<?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>66346</bug_id>
          
          <creation_ts>2011-08-16 16:06:42 -0700</creation_ts>
          <short_desc>Incorporate newer, faster dtoa library</short_desc>
          <delta_ts>2011-09-06 11:03:13 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>67562</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Hahnenberg">mhahnenberg</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          <cc>barraclough</cc>
    
    <cc>dglazkov</cc>
    
    <cc>ggaren</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>ossy</cc>
    
    <cc>paroga</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>451943</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-08-16 16:06:42 -0700</bug_when>
    <thetext>Our current dtoa library is a bit dated.  There is a newer, faster one that has been lifted out of the V8 project.  We should use it!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451948</commentid>
    <comment_count>1</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-08-16 16:07:47 -0700</bug_when>
    <thetext>&lt;rdar://problem/9946258&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451974</commentid>
    <comment_count>2</comment_count>
      <attachid>104118</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-08-16 16:41:04 -0700</bug_when>
    <thetext>Created attachment 104118
New dtoa library</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451979</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-16 16:44:46 -0700</bug_when>
    <thetext>Attachment 104118 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Last 3072 characters of output:
&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/cached-powers.h:66:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/wtf/dtoa/cached-powers.h:68:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:28:  #ifndef header guard has wrong style, please use: WTF_diy_fp_h  [build/header_guard] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:40:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:44:  Missing space inside { }.  [whitespace/braces] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:45:  Missing space inside { }.  [whitespace/braces] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:51:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:60:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:71:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:78:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:85:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:89:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:97:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:106:  set_f is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:106:  _value is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:107:  set_e is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:107:  _value is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:112:  f_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:113:  e_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:116:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:118:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 234 in 34 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>451981</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-08-16 16:46:07 -0700</bug_when>
    <thetext>The style bot freaked out because the new library was extracted from V8, and Google&apos;s coding style is like the bitwise-not of ours.  We should probably refrain from modifying the library to fit our style so we can more easily update it if any changes are made to it upstream.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451983</commentid>
    <comment_count>5</comment_count>
      <attachid>104118</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-08-16 16:46:29 -0700</bug_when>
    <thetext>Comment on attachment 104118
New dtoa library

Attachment 104118 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9402485</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451991</commentid>
    <comment_count>6</comment_count>
      <attachid>104118</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-08-16 16:54:06 -0700</bug_when>
    <thetext>Comment on attachment 104118
New dtoa library

Attachment 104118 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9407469</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451999</commentid>
    <comment_count>7</comment_count>
      <attachid>104124</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-08-16 17:09:06 -0700</bug_when>
    <thetext>Created attachment 104124
New dtoa library</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452002</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-16 17:12:32 -0700</bug_when>
    <thetext>Attachment 104124 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Last 3072 characters of output:
&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/cached-powers.h:66:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/wtf/dtoa/cached-powers.h:68:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:28:  #ifndef header guard has wrong style, please use: WTF_diy_fp_h  [build/header_guard] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:40:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:44:  Missing space inside { }.  [whitespace/braces] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:45:  Missing space inside { }.  [whitespace/braces] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:51:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:60:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:71:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:78:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:85:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:89:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:97:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:106:  set_f is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:106:  _value is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:107:  set_e is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:107:  _value is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:112:  f_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:113:  e_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:116:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:118:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 234 in 34 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>452007</commentid>
    <comment_count>9</comment_count>
      <attachid>104124</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-08-16 17:16:07 -0700</bug_when>
    <thetext>Comment on attachment 104124
New dtoa library

Attachment 104124 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9401540</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452020</commentid>
    <comment_count>10</comment_count>
      <attachid>104124</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-08-16 17:26:09 -0700</bug_when>
    <thetext>Comment on attachment 104124
New dtoa library

Attachment 104124 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9405438</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452047</commentid>
    <comment_count>11</comment_count>
      <attachid>104124</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-16 18:14:19 -0700</bug_when>
    <thetext>Comment on attachment 104124
New dtoa library

Attachment 104124 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9408408</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452079</commentid>
    <comment_count>12</comment_count>
      <attachid>104124</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-08-16 19:58:43 -0700</bug_when>
    <thetext>Comment on attachment 104124
New dtoa library

Attachment 104124 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/9402608</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452398</commentid>
    <comment_count>13</comment_count>
      <attachid>104199</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-08-17 11:24:52 -0700</bug_when>
    <thetext>Created attachment 104199
Fixing build errors</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452403</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-17 11:26:40 -0700</bug_when>
    <thetext>Attachment 104199 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Last 3072 characters of output:
&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/cached-powers.h:66:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/wtf/dtoa/cached-powers.h:68:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:28:  #ifndef header guard has wrong style, please use: WTF_diy_fp_h  [build/header_guard] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:40:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:44:  Missing space inside { }.  [whitespace/braces] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:45:  Missing space inside { }.  [whitespace/braces] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:51:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:60:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:71:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:78:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:85:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:89:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:97:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:106:  set_f is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:106:  _value is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:107:  set_e is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:107:  _value is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:112:  f_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:113:  e_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:116:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:118:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 234 in 37 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>452422</commentid>
    <comment_count>15</comment_count>
      <attachid>104199</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-08-17 11:37:38 -0700</bug_when>
    <thetext>Comment on attachment 104199
Fixing build errors

Attachment 104199 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9420050</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452434</commentid>
    <comment_count>16</comment_count>
      <attachid>104199</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-08-17 11:43:47 -0700</bug_when>
    <thetext>Comment on attachment 104199
Fixing build errors

Attachment 104199 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9414780</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452440</commentid>
    <comment_count>17</comment_count>
      <attachid>104207</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-08-17 11:46:18 -0700</bug_when>
    <thetext>Created attachment 104207
Fixing build errors</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452452</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-17 12:03:48 -0700</bug_when>
    <thetext>Attachment 104207 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Last 3072 characters of output:
&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/cached-powers.h:66:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/wtf/dtoa/cached-powers.h:68:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:28:  #ifndef header guard has wrong style, please use: WTF_diy_fp_h  [build/header_guard] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:40:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:44:  Missing space inside { }.  [whitespace/braces] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:45:  Missing space inside { }.  [whitespace/braces] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:51:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:60:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:71:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:78:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:85:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:89:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:97:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:106:  set_f is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:106:  _value is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:107:  set_e is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:107:  _value is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:112:  f_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:113:  e_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:116:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:118:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 234 in 37 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>452461</commentid>
    <comment_count>19</comment_count>
      <attachid>104207</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-08-17 12:11:23 -0700</bug_when>
    <thetext>Comment on attachment 104207
Fixing build errors

Attachment 104207 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9424009</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452467</commentid>
    <comment_count>20</comment_count>
      <attachid>104211</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-08-17 12:18:05 -0700</bug_when>
    <thetext>Created attachment 104211
Fixing build errors</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452468</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-17 12:21:55 -0700</bug_when>
    <thetext>Attachment 104211 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Last 3072 characters of output:
&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/cached-powers.h:66:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/wtf/dtoa/cached-powers.h:68:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:28:  #ifndef header guard has wrong style, please use: WTF_diy_fp_h  [build/header_guard] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:40:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:44:  Missing space inside { }.  [whitespace/braces] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:45:  Missing space inside { }.  [whitespace/braces] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:51:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:60:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:71:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:78:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:85:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:89:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:97:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:106:  set_f is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:106:  _value is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:107:  set_e is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:107:  _value is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:112:  f_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:113:  e_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:116:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:118:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 234 in 38 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>452643</commentid>
    <comment_count>22</comment_count>
      <attachid>104211</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-17 15:33:31 -0700</bug_when>
    <thetext>Comment on attachment 104211
Fixing build errors

Attachment 104211 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9414929

New failing tests:
animations/combo-transform-rotate+scale.html
animations/animation-shorthand.html
animations/matrix-anim.html
animations/fill-mode-transform.html
animations/change-one-anim.html
animations/animation-matrix-negative-scale-unmatrix.html
animations/computed-style.html
animations/keyframes-rule.html
http/tests/appcache/video.html
animations/combo-transform-translate+scale.html
animations/lineheight-animation.html
animations/fill-unset-properties.html
animations/big-rotation.html
animations/missing-from-to-transforms.html
animations/keyframe-timing-functions-transform.html
animations/dynamic-stylesheet-loading.html
animations/animation-shorthand-removed.html
animations/animation-direction-normal.html
canvas/philip/tests/2d.fillStyle.get.semitransparent.html
animations/animation-add-events-in-handler.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452647</commentid>
    <comment_count>23</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-08-17 15:42:34 -0700</bug_when>
    <thetext>Hey Mark,

From a quick look at this patch, it looks like you might be changing WebCore&apos;s CSS code to use the same number-to-string conversion as for JS?  Sorry if I&apos;m mistaken, but if so, this isn&apos;t correct - the CSS spec prohibits exponential representation, all values should be simple decimal.

G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452841</commentid>
    <comment_count>24</comment_count>
      <attachid>104211</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2011-08-17 21:19:40 -0700</bug_when>
    <thetext>Comment on attachment 104211
Fixing build errors

Why is none of the new code in WTF inside the WTF namespace?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456402</commentid>
    <comment_count>25</comment_count>
      <attachid>105065</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-08-24 14:10:29 -0700</bug_when>
    <thetext>Created attachment 105065
Fixing windows build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456403</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-24 14:14:02 -0700</bug_when>
    <thetext>Attachment 105065 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Last 3072 characters of output:
&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/cached-powers.h:68:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/wtf/dtoa/cached-powers.h:72:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:28:  #ifndef header guard has wrong style, please use: WTF_diy_fp_h  [build/header_guard] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:42:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:46:  Missing space inside { }.  [whitespace/braces] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:47:  Missing space inside { }.  [whitespace/braces] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:53:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:62:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:73:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:79:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:80:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:87:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:91:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:99:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:108:  set_f is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:108:  _value is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:109:  set_e is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:109:  _value is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:114:  f_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:115:  e_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:118:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:122:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 234 in 42 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>456407</commentid>
    <comment_count>27</comment_count>
      <attachid>105065</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-24 14:25:10 -0700</bug_when>
    <thetext>Comment on attachment 105065
Fixing windows build

Attachment 105065 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9502005</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456442</commentid>
    <comment_count>28</comment_count>
      <attachid>105077</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-08-24 14:59:42 -0700</bug_when>
    <thetext>Created attachment 105077
Fixing chromium build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456450</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-24 15:04:05 -0700</bug_when>
    <thetext>Attachment 105077 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Last 3072 characters of output:
&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/cached-powers.h:68:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/wtf/dtoa/cached-powers.h:72:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:28:  #ifndef header guard has wrong style, please use: WTF_diy_fp_h  [build/header_guard] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:42:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:46:  Missing space inside { }.  [whitespace/braces] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:47:  Missing space inside { }.  [whitespace/braces] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:53:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:62:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:73:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:79:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:80:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:87:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:91:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:99:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:108:  set_f is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:108:  _value is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:109:  set_e is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:109:  _value is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:114:  f_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:115:  e_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:118:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:122:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 234 in 42 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>456625</commentid>
    <comment_count>30</comment_count>
      <attachid>105077</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-24 20:18:16 -0700</bug_when>
    <thetext>Comment on attachment 105077
Fixing chromium build

Attachment 105077 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9495193

New failing tests:
fast/css/readonly-pseudoclass-opera-003.html
http/tests/media/video-cancel-load.html
fast/css/shadow-dom-scope.html
fast/css/pseudo-required-optional-005.html
http/tests/media/video-error-abort.html
http/tests/appcache/video.html
fast/css/unknown-pseudo-element-matching.html
http/tests/security/local-video-poster-from-remote.html
fast/css/first-letter-block-form-controls-crash.html
http/tests/media/video-served-as-text.html
http/tests/media/text-served-as-text.html
http/tests/media/reload-after-dialog.html
fast/dom/HTMLInputElement/input-slider-update.html
http/tests/media/pdf-served-as-pdf.html
fast/css/pseudo-in-range-invalid-value.html
fast/css/pseudo-in-range.html
fast/canvas/webgl/tex-image-and-sub-image-2d-with-video.html
fast/dom/HTMLInputElement/input-slider-update-styled.html
fast/dom/boolean-attribute-reflection.html
http/tests/media/media-can-load-when-hidden.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457022</commentid>
    <comment_count>31</comment_count>
      <attachid>105227</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-08-25 11:40:37 -0700</bug_when>
    <thetext>Created attachment 105227
Fixing chromium again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457025</commentid>
    <comment_count>32</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-25 11:43:21 -0700</bug_when>
    <thetext>Attachment 105227 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Last 3072 characters of output:
&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/cached-powers.h:68:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/wtf/dtoa/cached-powers.h:72:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:28:  #ifndef header guard has wrong style, please use: WTF_diy_fp_h  [build/header_guard] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:42:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:46:  Missing space inside { }.  [whitespace/braces] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:47:  Missing space inside { }.  [whitespace/braces] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:53:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:62:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:73:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:79:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:80:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:87:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:91:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:99:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:108:  set_f is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:108:  _value is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:109:  set_e is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:109:  _value is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:114:  f_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:115:  e_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:118:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:122:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 234 in 42 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>457194</commentid>
    <comment_count>33</comment_count>
      <attachid>105266</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-08-25 15:40:59 -0700</bug_when>
    <thetext>Created attachment 105266
Fixing windows build again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457195</commentid>
    <comment_count>34</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-25 15:43:40 -0700</bug_when>
    <thetext>Attachment 105266 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Last 3072 characters of output:
&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/cached-powers.h:68:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/wtf/dtoa/cached-powers.h:72:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:28:  #ifndef header guard has wrong style, please use: WTF_diy_fp_h  [build/header_guard] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:42:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:46:  Missing space inside { }.  [whitespace/braces] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:47:  Missing space inside { }.  [whitespace/braces] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:53:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:62:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:73:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:79:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:80:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:87:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:91:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:99:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:108:  set_f is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:108:  _value is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:109:  set_e is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:109:  _value is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:114:  f_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:115:  e_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:118:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:122:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 234 in 43 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>457310</commentid>
    <comment_count>35</comment_count>
      <attachid>105266</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-25 18:02:56 -0700</bug_when>
    <thetext>Comment on attachment 105266
Fixing windows build again

Attachment 105266 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9511745

New failing tests:
fast/css/readonly-pseudoclass-opera-003.html
http/tests/media/video-cancel-load.html
fast/css/shadow-dom-scope.html
fast/css/pseudo-required-optional-005.html
http/tests/media/video-error-abort.html
http/tests/appcache/video.html
fast/css/unknown-pseudo-element-matching.html
http/tests/security/local-video-poster-from-remote.html
fast/css/first-letter-block-form-controls-crash.html
http/tests/media/video-served-as-text.html
http/tests/media/text-served-as-text.html
http/tests/media/reload-after-dialog.html
fast/dom/HTMLInputElement/input-slider-update.html
http/tests/media/pdf-served-as-pdf.html
fast/css/pseudo-in-range-invalid-value.html
fast/css/pseudo-in-range.html
fast/canvas/webgl/tex-image-and-sub-image-2d-with-video.html
fast/dom/HTMLInputElement/input-slider-update-styled.html
fast/dom/boolean-attribute-reflection.html
http/tests/media/media-can-load-when-hidden.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459764</commentid>
    <comment_count>36</comment_count>
      <attachid>105800</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-08-31 11:27:10 -0700</bug_when>
    <thetext>Created attachment 105800
Fixing chromium tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459770</commentid>
    <comment_count>37</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-31 11:30:22 -0700</bug_when>
    <thetext>Attachment 105800 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Last 3072 characters of output:
&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/cached-powers.h:68:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/wtf/dtoa/cached-powers.h:72:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:28:  #ifndef header guard has wrong style, please use: WTF_diy_fp_h  [build/header_guard] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:42:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:46:  Missing space inside { }.  [whitespace/braces] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:47:  Missing space inside { }.  [whitespace/braces] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:53:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:62:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:73:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:79:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:80:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:87:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:91:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:99:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:108:  set_f is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:108:  _value is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:109:  set_e is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:109:  _value is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:114:  f_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:115:  e_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:118:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/wtf/dtoa/diy-fp.h:122:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 234 in 44 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>461561</commentid>
    <comment_count>38</comment_count>
      <attachid>105800</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-02 15:08:46 -0700</bug_when>
    <thetext>Comment on attachment 105800
Fixing chromium tests

Clearing flags on attachment: 105800

Committed r94452: &lt;http://trac.webkit.org/changeset/94452&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461562</commentid>
    <comment_count>39</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-02 15:08:56 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461931</commentid>
    <comment_count>40</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-09-04 00:40:53 -0700</bug_when>
    <thetext>Reopen the bug report, because it  broke many JSC tests and layout tests on the Qt bot. Could you guys respect the WebKit policies and watch the bots?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462057</commentid>
    <comment_count>41</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-09-05 00:13:12 -0700</bug_when>
    <thetext>Fixed: http://trac.webkit.org/changeset/94514</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462086</commentid>
    <comment_count>42</comment_count>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2011-09-05 02:50:44 -0700</bug_when>
    <thetext>Committed r94520: &lt;http://trac.webkit.org/changeset/94520&gt;

I agree with ossy: Please watch the bots!
Do we have any guidelines for 3rd party code? The change breaks many of our coding style guidelines and I don&apos;t know why even the simple ones (like include config.h) get ignored.
The new dtoa library does some stuff too, which is already done in WTF. I&apos;m not a big fan of maintaining the #ifdef twice.

And finally: What does &quot;The new library is much faster than the old one.&quot; mean exactly? I usually get a clear r-, when I don&apos;t include exact performance data into the ChangeLog!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462394</commentid>
    <comment_count>43</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-09-06 00:28:51 -0700</bug_when>
    <thetext>&gt; Do we have any guidelines for 3rd party code? The change breaks many of our coding style guidelines and I don&apos;t know why even the simple ones (like include config.h) get ignored.

There is precedent to having some flexibility on coding style for 3rd party code, since this makes it easier to continue to integrate future improvements.  However yes, one would expect some adaption to fit within our codebase, and yes, files definitely need to be including config.h.

&gt; The new dtoa library does some stuff too, which is already done in WTF. I&apos;m not a big fan of maintaining the #ifdef twice.

OOI are you just referring to replicating existing behavior of dtoa &amp; DecimalNumber? - or of other basic types?  If re dtoa &amp; DecimalNumber, then I believe the intention is to deprecate the existing code, but that this will involve a bit of work (specifically because these are used from WebCore by CSS code, that requires slightly different dtoa behavior that the new library may require a little adaption to produce).

&gt; And finally: What does &quot;The new library is much faster than the old one.&quot; mean exactly? I usually get a clear r-, when I don&apos;t include exact performance data into the ChangeLog!

I have to agree on this one, we really should be justifying changes like this with performance numbers.  Mark, what does this progress? - could you post some SunSpider/V8 benchmark numbers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462603</commentid>
    <comment_count>44</comment_count>
      <attachid>106430</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-09-06 09:48:27 -0700</bug_when>
    <thetext>Created attachment 106430
Sunspider results</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462604</commentid>
    <comment_count>45</comment_count>
      <attachid>106431</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-09-06 09:48:53 -0700</bug_when>
    <thetext>Created attachment 106431
V8 results</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462605</commentid>
    <comment_count>46</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2011-09-06 09:50:04 -0700</bug_when>
    <thetext>&gt; I have to agree on this one, we really should be justifying changes like this with performance numbers.  Mark, what does this progress? - could you post some SunSpider/V8 benchmark numbers?

Sorry about that.  I attached some results to the Radar bug but neglected to do that here as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462666</commentid>
    <comment_count>47</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-09-06 11:03:13 -0700</bug_when>
    <thetext>Thanks Mark!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104118</attachid>
            <date>2011-08-16 16:41:04 -0700</date>
            <delta_ts>2011-08-16 17:09:03 -0700</delta_ts>
            <desc>New dtoa library</desc>
            <filename>bug-66346-20110816164105.patch</filename>
            <type>text/plain</type>
            <size>346087</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTMwNjAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDJl
MzZhMDcyYjNjYjMyMWNhZTdjMTAxYjVmNmVhZjUxYWY4MzMzM2EuLjYyNmQ1YzRhNTI5MjljNDNj
Y2Y0M2M3ZWMyODJmMjU1NTA0YWFiZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDExNSBAQAorMjAxMS0wOC0xNiAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBw
bGUuY29tPgorCisgICAgICAgIEluY29ycG9yYXRlIG5ld2VyLCBmYXN0ZXIgZHRvYSBsaWJyYXJ5
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM0Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIG5l
dyBkdG9hIGxpYnJhcnkgYXQgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2RvdWJsZS1jb252ZXJz
aW9uLy4KKyAgICAgICAgUmVwbGFjZWQgb2xkIGNhbGwgdG8gZHRvYS4gIFRoZSBuZXcgbGlicmFy
eSBpcyBtdWNoIGZhc3RlciB0aGFuIHRoZSBvbGQgb25lLgorICAgICAgICBXZSBzdGlsbCB1c2Ug
dGhlIG9sZCBzdHJ0b2QsIGJ1dCB3ZSBjYW4gcGhhc2UgdGhhdCBvdXQgZXZlbnR1YWxseSBhcyB3
ZWxsLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcnVudGltZS9Jbml0
aWFsaXplVGhyZWFkaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZ09u
Y2UpOgorICAgICAgICAqIHJ1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpT
Qzo6bnVtYmVyUHJvdG9GdW5jVG9FeHBvbmVudGlhbCk6CisgICAgICAgIChKU0M6Om51bWJlclBy
b3RvRnVuY1RvRml4ZWQpOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1bmNUb1ByZWNpc2lv
bik6CisgICAgICAgICogcnVudGltZS9VU3RyaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6VVN0cmlu
Zzo6bnVtYmVyKToKKyAgICAgICAgKiB3dGYvRGVjaW1hbE51bWJlci5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogd3RmL0RlY2ltYWxOdW1iZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvZHRv
YS5jcHA6CisgICAgICAgIChXVEY6Om51bWJlclRvU3RyaW5nKToKKyAgICAgICAgKiB3dGYvZHRv
YS5oOgorICAgICAgICAqIHd0Zi9kdG9hL0NPUFlJTkc6IEFkZGVkLgorICAgICAgICAqIHd0Zi9k
dG9hL0xJQ0VOU0U6IEFkZGVkLgorICAgICAgICAqIHd0Zi9kdG9hL1JFQURNRTogQWRkZWQuCisg
ICAgICAgICogd3RmL2R0b2EvYmlnbnVtLWR0b2EuY2M6IEFkZGVkLgorICAgICAgICAqIHd0Zi9k
dG9hL2JpZ251bS1kdG9hLmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9kdG9hL2JpZ251bS5jYzog
QWRkZWQuCisgICAgICAgICogd3RmL2R0b2EvYmlnbnVtLmg6IEFkZGVkLgorICAgICAgICAoZG91
YmxlX2NvbnZlcnNpb246OkJpZ251bTo6VGltZXMxMCk6CisgICAgICAgIChkb3VibGVfY29udmVy
c2lvbjo6QmlnbnVtOjpFcXVhbCk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6QmlnbnVt
OjpMZXNzRXF1YWwpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OkJpZ251bTo6TGVzcyk6
CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6QmlnbnVtOjpQbHVzRXF1YWwpOgorICAgICAg
ICAoZG91YmxlX2NvbnZlcnNpb246OkJpZ251bTo6UGx1c0xlc3NFcXVhbCk6CisgICAgICAgIChk
b3VibGVfY29udmVyc2lvbjo6QmlnbnVtOjpQbHVzTGVzcyk6CisgICAgICAgIChkb3VibGVfY29u
dmVyc2lvbjo6QmlnbnVtOjpFbnN1cmVDYXBhY2l0eSk6CisgICAgICAgIChkb3VibGVfY29udmVy
c2lvbjo6QmlnbnVtOjpCaWdpdExlbmd0aCk6CisgICAgICAgICogd3RmL2R0b2EvY2FjaGVkLXBv
d2Vycy5jYzogQWRkZWQuCisgICAgICAgICogd3RmL2R0b2EvY2FjaGVkLXBvd2Vycy5oOiBBZGRl
ZC4KKyAgICAgICAgKiB3dGYvZHRvYS9kaXktZnAuY2M6IEFkZGVkLgorICAgICAgICAqIHd0Zi9k
dG9hL2RpeS1mcC5oOiBBZGRlZC4KKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpEaXlGcDo6
RGl5RnApOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OkRpeUZwOjpTdWJ0cmFjdCk6Cisg
ICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6RGl5RnA6Ok1pbnVzKToKKyAgICAgICAgKGRvdWJs
ZV9jb252ZXJzaW9uOjpEaXlGcDo6VGltZXMpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246
OkRpeUZwOjpOb3JtYWxpemUpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OkRpeUZwOjpm
KToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpEaXlGcDo6ZSk6CisgICAgICAgIChkb3Vi
bGVfY29udmVyc2lvbjo6RGl5RnA6OnNldF9mKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9u
OjpEaXlGcDo6c2V0X2UpOgorICAgICAgICAqIHd0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmNj
OiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5oOiBBZGRlZC4K
KyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6RG91
YmxlVG9TdHJpbmdDb252ZXJ0ZXIpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OlN0cmlu
Z1RvRG91YmxlQ29udmVydGVyOjpTdHJpbmdUb0RvdWJsZUNvbnZlcnRlcik6CisgICAgICAgICog
d3RmL2R0b2EvZG91YmxlLmg6IEFkZGVkLgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OmRv
dWJsZV90b191aW50NjQpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OnVpbnQ2NF90b19k
b3VibGUpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZTo6RG91YmxlKToKKyAg
ICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGU6OkFzRGl5RnApOgorICAgICAgICAoZG91
YmxlX2NvbnZlcnNpb246OkRvdWJsZTo6QXNOb3JtYWxpemVkRGl5RnApOgorICAgICAgICAoZG91
YmxlX2NvbnZlcnNpb246OkRvdWJsZTo6QXNVaW50NjQpOgorICAgICAgICAoZG91YmxlX2NvbnZl
cnNpb246OkRvdWJsZTo6TmV4dERvdWJsZSk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6
RG91YmxlOjpFeHBvbmVudCk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpT
aWduaWZpY2FuZCk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpJc0Rlbm9y
bWFsKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGU6OklzU3BlY2lhbCk6Cisg
ICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpJc05hbik6CisgICAgICAgIChkb3Vi
bGVfY29udmVyc2lvbjo6RG91YmxlOjpJc0luZmluaXRlKToKKyAgICAgICAgKGRvdWJsZV9jb252
ZXJzaW9uOjpEb3VibGU6OlNpZ24pOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OkRvdWJs
ZTo6VXBwZXJCb3VuZGFyeSk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpO
b3JtYWxpemVkQm91bmRhcmllcyk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6RG91Ymxl
Ojp2YWx1ZSk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpTaWduaWZpY2Fu
ZFNpemVGb3JPcmRlck9mTWFnbml0dWRlKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpE
b3VibGU6OkluZmluaXR5KToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGU6Ok5h
Tik6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpEaXlGcFRvVWludDY0KToK
KyAgICAgICAgKiB3dGYvZHRvYS9mYXN0LWR0b2EuY2M6IEFkZGVkLgorICAgICAgICAqIHd0Zi9k
dG9hL2Zhc3QtZHRvYS5oOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9maXhlZC1kdG9hLmNj
OiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9maXhlZC1kdG9hLmg6IEFkZGVkLgorICAgICAg
ICAqIHd0Zi9kdG9hL3N0cnRvZC5jYzogQWRkZWQuCisgICAgICAgICogd3RmL2R0b2Evc3RydG9k
Lmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9kdG9hL3V0aWxzLmg6IEFkZGVkLgorICAgICAgICAo
ZG91YmxlX2NvbnZlcnNpb246Ok1heCk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6TWlu
KToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpTdHJMZW5ndGgpOgorICAgICAgICAoZG91
YmxlX2NvbnZlcnNpb246OlZlY3Rvcjo6VmVjdG9yKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJz
aW9uOjpWZWN0b3I6OlN1YlZlY3Rvcik6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6VmVj
dG9yOjpsZW5ndGgpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OlZlY3Rvcjo6aXNfZW1w
dHkpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OlZlY3Rvcjo6c3RhcnQpOgorICAgICAg
ICAoZG91YmxlX2NvbnZlcnNpb246OlZlY3Rvcjo6b3BlcmF0b3JbXSk6CisgICAgICAgIChkb3Vi
bGVfY29udmVyc2lvbjo6VmVjdG9yOjpmaXJzdCk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lv
bjo6VmVjdG9yOjpsYXN0KToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdCdWls
ZGVyOjpTdHJpbmdCdWlsZGVyKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdC
dWlsZGVyOjp+U3RyaW5nQnVpbGRlcik6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6U3Ry
aW5nQnVpbGRlcjo6c2l6ZSk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6U3RyaW5nQnVp
bGRlcjo6cG9zaXRpb24pOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OlN0cmluZ0J1aWxk
ZXI6OlJlc2V0KToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdCdWlsZGVyOjpB
ZGRDaGFyYWN0ZXIpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OlN0cmluZ0J1aWxkZXI6
OkFkZFN0cmluZyk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6U3RyaW5nQnVpbGRlcjo6
QWRkU3Vic3RyaW5nKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdCdWlsZGVy
OjpBZGRQYWRkaW5nKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdCdWlsZGVy
OjpGaW5hbGl6ZSk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6U3RyaW5nQnVpbGRlcjo6
aXNfZmluYWxpemVkKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpCaXRDYXN0KToKKwog
MjAxMS0wOC0xNSAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAK
ICAgICAgICAgQ3Jhc2ggYWNjZXNzaW5nIHN0YXRpYyBwcm9wZXJ0eSBvbiBzZWFsZWQgb2JqZWN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAppbmRleCBlNTVmNjlkOWUz
YTRlMTkxZGE2NjBiNDVmODhjZmIyNmQ1YmFkYWEzLi42ZDMxM2IzMWZiMWY5YWM3OTg5ODEyOGNk
NzFlOWQ0NzQ5YzI4YTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZXhwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5l
eHAKQEAgLTk5LDYgKzk5LDcgQEAgX1dURlJlcG9ydEJhY2t0cmFjZQogX1dURlJlcG9ydEVycm9y
CiBfV1RGUmVwb3J0RmF0YWxFcnJvcgogX19aTjE0T3BhcXVlSlNTdHJpbmc2Y3JlYXRlRVJLTjNK
U0M3VVN0cmluZ0UKK19fWk4xN2RvdWJsZV9jb252ZXJzaW9uMjNEb3VibGVUb1N0cmluZ0NvbnZl
cnRlcjE5RWNtYVNjcmlwdENvbnZlcnRlckV2CiBfX1pOM0pTQzEwSGFuZGxlSGVhcDEyd3JpdGVC
YXJyaWVyRVBOU183SlNWYWx1ZUVSS1MxXwogX19aTjNKU0MxMEhhbmRsZUhlYXA0Z3Jvd0V2CiBf
X1pOM0pTQzEwSWRlbnRpZmllcjExYWRkU2xvd0Nhc2VFUE5TXzEySlNHbG9iYWxEYXRhRVBOM1dU
RjEwU3RyaW5nSW1wbEUKQEAgLTM4Myw4ICszODQsNiBAQCBfX1pOM1dURjExT1NBbGxvY2F0b3Ix
NnJlc2VydmVBbmRDb21taXRFbU5TMF81VXNhZ2VFYmJiCiBfX1pOM1dURjExT1NBbGxvY2F0b3Ix
OHJlbGVhc2VEZWNvbW1pdHRlZEVQdm0KIF9fWk4zV1RGMTFjb21tZW50QXRvbUUKIF9fWk4zV1RG
MTFjdXJyZW50VGltZUV2Ci1fX1pOM1dURjExZHRvYVJvdW5kRFBFUGNkaVJiUmlSagotX19aTjNX
VEYxMWR0b2FSb3VuZFNGRVBjZGlSYlJpUmoKIF9fWk4zV1RGMTFlbXB0eVN0cmluZ0V2CiBfX1pO
M1dURjExZmFzdFJlYWxsb2NFUHZtCiBfX1pOM1dURjEyQXRvbWljU3RyaW5nMTFhZGRTbG93Q2Fz
ZUVQTlNfMTBTdHJpbmdJbXBsRQpAQCAtNDEzLDcgKzQxMiw3IEBAIF9fWk4zV1RGMTNjdXJyZW50
VGhyZWFkRXYKIF9fWk4zV1RGMTN0cnlGYXN0Q2FsbG9jRW1tCiBfX1pOM1dURjEzdHJ5RmFzdE1h
bGxvY0VtCiBfX1pOM1dURjE0ZmFzdE1hbGxvY1NpemVFUEt2Ci1fX1pOM1dURjE0bnVtYmVyVG9T
dHJpbmdFZFB0CitfX1pOM1dURjE0bnVtYmVyVG9TdHJpbmdFZFBjCiBfX1pOM1dURjE0dHJ5RmFz
dFJlYWxsb2NFUHZtCiBfX1pOM1dURjE1VGhyZWFkQ29uZGl0aW9uNHdhaXRFUk5TXzVNdXRleEUK
IF9fWk4zV1RGMTVUaHJlYWRDb25kaXRpb242c2lnbmFsRXYKQEAgLTQ2NSw3ICs0NjQsNiBAQCBf
X1pOM1dURjNNRDVDMUV2CiBfX1pOM1dURjRTSEExMTFjb21wdXRlSGFzaEVSTlNfNlZlY3Rvcklo
TG0yMEVFRQogX19aTjNXVEY0U0hBMThhZGRCeXRlc0VQS2htCiBfX1pOM1dURjRTSEExQzFFdgot
X19aTjNXVEY0ZHRvYUVQY2RSYlJpUmoKIF9fWk4zV1RGNU11dGV4NGxvY2tFdgogX19aTjNXVEY1
TXV0ZXg2dW5sb2NrRXYKIF9fWk4zV1RGNU11dGV4N3RyeUxvY2tFdgpAQCAtNTIyLDYgKzUyMCw3
IEBAIF9fWk4zV1RGOXhtbG5zQXRvbUUKIF9fWk4zV1RGZXFFUktOU18xMkF0b21pY1N0cmluZ0VQ
S2MKIF9fWk4zV1RGZXFFUktOU18xMkF0b21pY1N0cmluZ0VSS05TXzZWZWN0b3JJdExtMEVFRQog
X19aTjNXVEZlcUVSS05TXzdDU3RyaW5nRVMyXworX19aTksxN2RvdWJsZV9jb252ZXJzaW9uMjNE
b3VibGVUb1N0cmluZ0NvbnZlcnRlcjEwVG9TaG9ydGVzdEVkUE5TXzEzU3RyaW5nQnVpbGRlckUK
IF9fWk5LM0pTQzEwSlNGdW5jdGlvbjIzaXNIb3N0RnVuY3Rpb25Ob25JbmxpbmVFdgogX19aTksz
SlNDMTFJbnRlcnByZXRlcjE0cmV0cmlldmVDYWxsZXJFUE5TXzlFeGVjU3RhdGVFUE5TXzEwSlNG
dW5jdGlvbkUKIF9fWk5LM0pTQzExSW50ZXJwcmV0ZXIxOHJldHJpZXZlTGFzdENhbGxlckVQTlNf
OUV4ZWNTdGF0ZUVSaVJsUk5TXzdVU3RyaW5nRVJOU183SlNWYWx1ZUUKQEAgLTU3NSwxMCArNTc0
LDYgQEAgX19aTkszSlNDOEpTU3RyaW5nMTFyZXNvbHZlUm9wZUVQTlNfOUV4ZWNTdGF0ZUUKIF9f
Wk5LM0pTQzlIYXNoVGFibGUxMWNyZWF0ZVRhYmxlRVBOU18xMkpTR2xvYmFsRGF0YUUKIF9fWk5L
M0pTQzlIYXNoVGFibGUxMWRlbGV0ZVRhYmxlRXYKIF9fWk5LM1dURjEyQXRvbWljU3RyaW5nNWxv
d2VyRXYKLV9fWk5LM1dURjEzRGVjaW1hbE51bWJlcjE1dG9TdHJpbmdEZWNpbWFsRVB0agotX19a
TkszV1RGMTNEZWNpbWFsTnVtYmVyMTl0b1N0cmluZ0V4cG9uZW50aWFsRVB0agotX19aTkszV1RG
MTNEZWNpbWFsTnVtYmVyMjhidWZmZXJMZW5ndGhGb3JTdHJpbmdEZWNpbWFsRXYKLV9fWk5LM1dU
RjEzRGVjaW1hbE51bWJlcjMyYnVmZmVyTGVuZ3RoRm9yU3RyaW5nRXhwb25lbnRpYWxFdgogX19a
TkszV1RGNlN0cmluZzExdG9JbnRTdHJpY3RFUGJpCiBfX1pOSzNXVEY2U3RyaW5nMTJ0b1VJbnRT
dHJpY3RFUGJpCiBfX1pOSzNXVEY2U3RyaW5nMTN0b0ludDY0U3RyaWN0RVBiaQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCBkZTYwYTdmNmRlNDcwM2MwNDkzMmU2YmFiMWY2YjRhOTc2
YzUzNzVhLi5kZjIxMmM5ZjRhZmY0ZmU0NzZmYWM5OGY1MjE0MmE5YmY5MWI1MWExIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDgsNyArNDgsNiBAQAogCQkwQkRGRkFFMDBGQzYx
OTI5MDBENjlFRjQgLyogQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQkRGRkFENDBGQzYxNzEwMDBENjlFRjQgLyog
Q3Jvc3NUaHJlYWRSZWZDb3VudGVkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEJERkZBRTEwRkM2MTkzMTAwRDY5RUY0IC8qIE93bkZhc3RNYWxs
b2NQdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBC
REZGQUQxMEZDNjE2RUMwMEQ2OUVGNCAvKiBPd25GYXN0TWFsbG9jUHRyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEJGMjhBMjkxMUEzM0RDMzAw
NjM4Rjg0IC8qIFNpemVMaW1pdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMuY3Bw
ICovOyB9OwotCQkwRjI5NDc5QzEyNkU2OThDMDBCM0FCRjUgLyogRGVjaW1hbE51bWJlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI5NDc5QjEy
NkU2OThDMDBCM0FCRjUgLyogRGVjaW1hbE51bWJlci5jcHAgKi87IH07CiAJCTE0MDAwNjc3MTJB
NkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMDA2NzYxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2Nh
dG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MTQwMDA2OTMxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMDA2OTIxMkE2RjlFMTAw
NjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovOyB9OwogCQkxNDA1NjZDNDEwN0VDMjU1
MDA1REJDOEQgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwODk0RDUwRkFGQkEyRDAwMDAxODY1IC8qIEpTQVBJ
VmFsdWVXcmFwcGVyLmNwcCAqLzsgfTsKQEAgLTI0OCw3ICsyNDcsNiBAQAogCQk4NjAxNjFFNjBG
M0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MDE2MUUyMEYzQTgzQzEwMEY4NDcx
MCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oICovOyB9OwogCQk4NjI2QkVDRjExOTI4RTM5
MDA3ODJGQUIgLyogU3RyaW5nU3RhdGljcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NjI2QkVDRTExOTI4RTM5MDA3ODJGQUIgLyogU3RyaW5nU3Rh
dGljcy5jcHAgKi87IH07CiAJCTg2MjdFNUVDMTFGMTI4MTkwMEEzMTNCNSAvKiBQYWdlQWxsb2Nh
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODYy
N0U1RUExMUYxMjgxOTAwQTMxM0I1IC8qIFBhZ2VBbGxvY2F0aW9uLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJODYyQUY0QjYxMjIzOUM3QjAwMjRF
NUI4IC8qIERlY2ltYWxOdW1iZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg2MkFGNEI1MTIyMzlDN0IwMDI0RTVCOCAvKiBEZWNpbWFsTnVtYmVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODYzQjIz
RTAwRkM2MTE4OTAwNzAzQUE0IC8qIE1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODYzQjIzREYwRkM2MEU2MjAwNzAz
QUE0IC8qIE1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2NDM4RkM0MTI2NTUwM0UwMEUwREZDQSAvKiBTdHJp
bmdCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg2NDM4RkMzMTI2NTUwM0UwMEUwREZDQSAvKiBTdHJpbmdCdWlsZGVyLmNwcCAqLzsgfTsK
IAkJODY1NjU3NDIxMTVCRTNEQTAwMjkxRjQwIC8qIENTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY1NjU3NDAxMTVCRTNEQTAwMjkxRjQw
IC8qIENTdHJpbmcuY3BwICovOyB9OwpAQCAtNTkzLDYgKzU5MSwyNSBAQAogCQlCQ0ZEOEM5MjBF
RUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkQ4QzkwMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFi
bGUuY3BwICovOyB9OwogCQlCQ0ZEOEM5MzBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ZEOEM5MTBF
RUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggKi87IH07CiAJCUMwQTI3MjYzMEU1MEEwNjMw
MEU5NkUxNSAvKiBOb3RGb3VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzBBMjcyM0YwRTUwOUYxRTAwRTk2RTE1IC8qIE5vdEZvdW5kLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIyQzUyRjExM0ZB
RjZFRjAwQjdEQzBEIC8qIGJpZ251bS1kdG9hLmNjIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyQzUyOTAxM0ZBRjZFRjAwQjdEQzBEIC8qIGJpZ251bS1k
dG9hLmNjICovOyB9OworCQlDMjJDNTJGMjEzRkFGNkVGMDBCN0RDMEQgLyogYmlnbnVtLWR0b2Eu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1Mjkx
MTNGQUY2RUYwMEI3REMwRCAvKiBiaWdudW0tZHRvYS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUMyMkM1MkYzMTNGQUY2RUYwMEI3REMwRCAvKiBi
aWdudW0uY2MgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
MjJDNTI5MjEzRkFGNkVGMDBCN0RDMEQgLyogYmlnbnVtLmNjICovOyB9OworCQlDMjJDNTJGNDEz
RkFGNkVGMDBCN0RDMEQgLyogYmlnbnVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTI5MzEzRkFGNkVGMDBCN0RDMEQgLyogYmlnbnVtLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIyQzUyRjUx
M0ZBRjZFRjAwQjdEQzBEIC8qIGNhY2hlZC1wb3dlcnMuY2MgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTI5NDEzRkFGNkVGMDBCN0RDMEQgLyogY2Fj
aGVkLXBvd2Vycy5jYyAqLzsgfTsKKwkJQzIyQzUyRjYxM0ZBRjZFRjAwQjdEQzBEIC8qIGNhY2hl
ZC1wb3dlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEMyMkM1Mjk1MTNGQUY2RUYwMEI3REMwRCAvKiBjYWNoZWQtcG93ZXJzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIyQzUyRjcxM0ZBRjZFRjAw
QjdEQzBEIC8qIGRpeS1mcC5jYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEMyMkM1Mjk3MTNGQUY2RUYwMEI3REMwRCAvKiBkaXktZnAuY2MgKi87IH07CisJ
CUMyMkM1MkY4MTNGQUY2RUYwMEI3REMwRCAvKiBkaXktZnAuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1Mjk4MTNGQUY2RUYwMEI3REMwRCAvKiBk
aXktZnAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQlDMjJDNTJGOTEzRkFGNkVGMDBCN0RDMEQgLyogZG91YmxlLWNvbnZlcnNpb24uY2MgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTI5OTEzRkFGNkVG
MDBCN0RDMEQgLyogZG91YmxlLWNvbnZlcnNpb24uY2MgKi87IH07CisJCUMyMkM1MkZBMTNGQUY2
RUYwMEI3REMwRCAvKiBkb3VibGUtY29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyQzUyOUExM0ZBRjZFRjAwQjdEQzBEIC8qIGRvdWJs
ZS1jb252ZXJzaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJQzIyQzUyRkIxM0ZBRjZFRjAwQjdEQzBEIC8qIGRvdWJsZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyQzUyOUIxM0ZBRjZFRjAwQjdE
QzBEIC8qIGRvdWJsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCUMyMkM1MkZDMTNGQUY2RUYwMEI3REMwRCAvKiBmYXN0LWR0b2EuY2MgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTI5QzEzRkFGNkVG
MDBCN0RDMEQgLyogZmFzdC1kdG9hLmNjICovOyB9OworCQlDMjJDNTJGRDEzRkFGNkVGMDBCN0RD
MEQgLyogZmFzdC1kdG9hLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDMjJDNTI5RDEzRkFGNkVGMDBCN0RDMEQgLyogZmFzdC1kdG9hLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIyQzUyRkUxM0ZBRjZF
RjAwQjdEQzBEIC8qIGZpeGVkLWR0b2EuY2MgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTI5RTEzRkFGNkVGMDBCN0RDMEQgLyogZml4ZWQtZHRvYS5j
YyAqLzsgfTsKKwkJQzIyQzUyRkYxM0ZBRjZFRjAwQjdEQzBEIC8qIGZpeGVkLWR0b2EuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1MjlGMTNGQUY2
RUYwMEI3REMwRCAvKiBmaXhlZC1kdG9hLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIyQzUzMDAxM0ZBRjZFRjAwQjdEQzBEIC8qIE1ha2VmaWxl
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyQzUyQTEx
M0ZBRjZFRjAwQjdEQzBEIC8qIE1ha2VmaWxlICovOyB9OworCQlDMjJDNTMxMzEzRkFGNkVGMDBC
N0RDMEQgLyogc3RydG9kLmNjIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzIyQzUyQjkxM0ZBRjZFRjAwQjdEQzBEIC8qIHN0cnRvZC5jYyAqLzsgfTsKKwkJ
QzIyQzUzMTQxM0ZBRjZFRjAwQjdEQzBEIC8qIHN0cnRvZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyQzUyQkExM0ZBRjZFRjAwQjdEQzBEIC8qIHN0
cnRvZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CUMyMkM1MzE1MTNGQUY2RUYwMEI3REMwRCAvKiB1dGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyQzUyQkIxM0ZBRjZFRjAwQjdEQzBEIC8qIHV0
aWxzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
RDdBNDZBNEYxMzM4RkZFQTAwRUQ2OTVDIC8qIER5bmFtaWNBbm5vdGF0aW9ucy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDc1QUY1OTYxMkY4Q0I5NTAw
RkMwQURGIC8qIER5bmFtaWNBbm5vdGF0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUREMzc3Q0JDMTIwNzJDMTgwMDZBMjUxNyAvKiBCaXRt
YXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEREMzc3
Q0JCMTIwNzJDMTgwMDZBMjUxNyAvKiBCaXRtYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlEREY3QUJENDExRjYwRUQyMDAxMDhFMzYgLyogR0NB
Y3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBEREY3QUJEMjExRjYwRUQyMDAxMDhFMzYgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTcyOCw3
ICs3NDUsNiBAQAogCQkwQkRGRkFEMTBGQzYxNkVDMDBENjlFRjQgLyogT3duRmFzdE1hbGxvY1B0
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPd25GYXN0TWFsbG9jUHRyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBCREZGQUQ0MEZDNjE3MTAwMEQ2OUVGNCAv
KiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpemVMaW1pdHMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkwRjI5NDc5QjEyNkU2OThDMDBCM0FCRjUgLyogRGVjaW1hbE51bWJlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZWNpbWFsTnVtYmVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2NzYxMkE2Rjc4MzAwNjREMTIz
IC8qIE9TQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9TQWxs
b2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MDAwNjkyMTJBNkY5RTEw
MDY0RDEyMyAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IE9TQWxsb2NhdG9yUG9zaXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxNDBEMTdENjBFOEFENEE5MDAwQ0QxN0QgLyogSlNCYXNlUHJpdmF0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Jhc2VQcml2YXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC05MzcsNyArOTUzLDYgQEAKIAkJODYwMTYxRTIwRjNBODNDMTAw
Rjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTg2MjZCRUNFMTE5MjhFMzkwMDc4MkZBQiAvKiBTdHJpbmdTdGF0aWNzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFN0cmluZ1N0YXRpY3MuY3Bw
OyBwYXRoID0gdGV4dC9TdHJpbmdTdGF0aWNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODYyN0U1RUExMUYxMjgxOTAwQTMxM0I1IC8qIFBhZ2VBbGxvY2F0aW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VBbGxvY2F0aW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTg2MkFGNEI1MTIyMzlDN0IwMDI0RTVCOCAvKiBEZWNpbWFsTnVt
YmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlY2ltYWxOdW1iZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYzQjIzREYwRkM2MEU2MjAwNzAzQUE0IC8q
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
ODY0MzhGQzMxMjY1NTAzRTAwRTBERkNBIC8qIFN0cmluZ0J1aWxkZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU3RyaW5nQnVpbGRlci5jcHA7IHBhdGggPSB0ZXh0
L1N0cmluZ0J1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjU2NTc0
MDExNUJFM0RBMDAyOTFGNDAgLyogQ1N0cmluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBDU3RyaW5nLmNwcDsgcGF0aCA9IHRleHQvQ1N0cmluZy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjUzLDYgKzEyNjgsMzAgQEAKIAkJQkNGRDhDOTAw
RUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKdW1wVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCQ0ZEOEM5MTBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEp1bXBUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlDMEEyNzIzRjBFNTA5RjFFMDBFOTZFMTUgLyogTm90Rm91bmQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTm90Rm91bmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQzIyQzUyOTAxM0ZBRjZFRjAwQjdEQzBEIC8qIGJpZ251bS1kdG9hLmNjICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gImJpZ251bS1kdG9hLmNjIjsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyOTExM0ZBRjZFRjAwQjdEQzBEIC8qIGJpZ251bS1k
dG9hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9ICJiaWdudW0tZHRvYS5oIjsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyOTIxM0ZBRjZFRjAwQjdEQzBEIC8q
IGJpZ251bS5jYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGJpZ251bS5j
Yzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyOTMxM0ZBRjZFRjAwQjdEQzBE
IC8qIGJpZ251bS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBiaWdudW0uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyOTQxM0ZBRjZFRjAwQjdEQzBEIC8q
IGNhY2hlZC1wb3dlcnMuY2MgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSAi
Y2FjaGVkLXBvd2Vycy5jYyI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMkM1Mjk1
MTNGQUY2RUYwMEI3REMwRCAvKiBjYWNoZWQtcG93ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9ICJjYWNoZWQtcG93ZXJzLmgiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDMjJDNTI5NjEzRkFGNkVGMDBCN0RDMEQgLyogQ09QWUlORyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBDT1BZSU5HOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTI5NzEz
RkFGNkVGMDBCN0RDMEQgLyogZGl5LWZwLmNjICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gImRpeS1mcC5jYyI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMkM1
Mjk4MTNGQUY2RUYwMEI3REMwRCAvKiBkaXktZnAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gImRpeS1mcC5oIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUy
OTkxM0ZBRjZFRjAwQjdEQzBEIC8qIGRvdWJsZS1jb252ZXJzaW9uLmNjICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gImRvdWJsZS1jb252ZXJzaW9uLmNjIjsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyOUExM0ZBRjZFRjAwQjdEQzBEIC8qIGRvdWJsZS1j
b252ZXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9ICJkb3VibGUtY29u
dmVyc2lvbi5oIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyOUIxM0ZBRjZF
RjAwQjdEQzBEIC8qIGRvdWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBk
b3VibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyOUMxM0ZBRjZFRjAw
QjdEQzBEIC8qIGZhc3QtZHRvYS5jYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9ICJmYXN0LWR0b2EuY2MiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTI5
RDEzRkFGNkVGMDBCN0RDMEQgLyogZmFzdC1kdG9hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9ICJmYXN0LWR0b2EuaCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMy
MkM1MjlFMTNGQUY2RUYwMEI3REMwRCAvKiBmaXhlZC1kdG9hLmNjICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gImZpeGVkLWR0b2EuY2MiOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlDMjJDNTI5RjEzRkFGNkVGMDBCN0RDMEQgLyogZml4ZWQtZHRvYS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSAiZml4ZWQtZHRvYS5oIjsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyQTAxM0ZBRjZFRjAwQjdEQzBEIC8qIExJQ0VOU0UgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gTElDRU5TRTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQzIyQzUyQTExM0ZBRjZFRjAwQjdEQzBEIC8qIE1ha2VmaWxlICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5tYWtlOyBwYXRoID0gTWFrZWZpbGU7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUMyMkM1MkEyMTNGQUY2RUYwMEI3REMwRCAvKiBSRUFETUUgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gUkVBRE1FOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTJBMzEzRkFGNkVG
MDBCN0RDMEQgLyogU0NvbnNjcmlwdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTQ29uc2NyaXB0
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTJBNDEzRkFGNkVGMDBCN0RDMEQg
LyogU0NvbnN0cnVjdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTQ29uc3RydWN0OyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTJCOTEzRkFGNkVGMDBCN0RDMEQgLyogc3RydG9k
LmNjICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gc3RydG9kLmNjOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTJCQTEzRkFGNkVGMDBCN0RDMEQgLyogc3Ry
dG9kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHN0cnRvZC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTJCQjEzRkFGNkVGMDBCN0RDMEQgLyogdXRpbHMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gdXRpbHMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRDIxMjAyMjgwQUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252ZXJz
aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEYXRlQ29udmVy
c2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQyMTIwMjI5MEFENDMxMEMw
MEVENzlCNiAvKiBEYXRlQ29udmVyc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRGF0ZUNvbnZlcnNpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDc1
QUY1OTUxMkY4Q0I5NTAwRkMwQURGIC8qIER5bmFtaWNBbm5vdGF0aW9ucy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEeW5hbWljQW5ub3RhdGlvbnMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY1Miw2ICsxNjkxLDcgQEAKIAkJNjUxNjJFRjEw
OEU2QTIxQzAwNzU1NkNEIC8qIHd0ZiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCisJCQkJQzIyQzUyNDgxM0ZBRjZFRjAwQjdEQzBEIC8qIGR0b2EgKi8sCiAJCQkJ
MDZEMzU4QTAwREFBRDlDNDAwM0IxNzRFIC8qIG1hYyAqLywKIAkJCQk4NjU2NTczRTExNUJFMzUy
MDAyOTFGNDAgLyogdGV4dCAqLywKIAkJCQlFMTk1Njc4RDA5RTdDRjEyMDBCODlEMTMgLyogdW5p
Y29kZSAqLywKQEAgLTE2NzcsOCArMTcxNyw2IEBACiAJCQkJMTgwQjlBRjAwRjE2QzU2OTAwOUJE
QkM1IC8qIEN1cnJlbnRUaW1lLmggKi8sCiAJCQkJNDEzNTlDRjQwRkREODlDQjAwMjA2MTgwIC8q
IERhdGVNYXRoLmNwcCAqLywKIAkJCQk0MTM1OUNGNTBGREQ4OUNCMDAyMDYxODAgLyogRGF0ZU1h
dGguaCAqLywKLQkJCQkwRjI5NDc5QjEyNkU2OThDMDBCM0FCRjUgLyogRGVjaW1hbE51bWJlci5j
cHAgKi8sCi0JCQkJODYyQUY0QjUxMjIzOUM3QjAwMjRFNUI4IC8qIERlY2ltYWxOdW1iZXIuaCAq
LywKIAkJCQk1MTM1RkFENTEyRDI2ODU2MDAzQzA4M0IgLyogRGVjb2Rlci5oICovLAogCQkJCTUx
ODYxMTFEMENDODI0ODMwMDgxNDEyQiAvKiBEZXF1ZS5oICovLAogCQkJCTkzOEM0RjZCMENBMDZC
Q0UwMEQ5MzEwQSAvKiBEaXNhbGxvd0NUeXBlLmggKi8sCkBAIC0yMTc5LDYgKzIyMTcsMzcgQEAK
IAkJCXBhdGggPSBieXRlY29kZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJ
CUMyMkM1MjQ4MTNGQUY2RUYwMEI3REMwRCAvKiBkdG9hICovID0geworCQkJaXNhID0gUEJYR3Jv
dXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlDMjJDNTI5MDEzRkFGNkVGMDBCN0RDMEQgLyogYmln
bnVtLWR0b2EuY2MgKi8sCisJCQkJQzIyQzUyOTExM0ZBRjZFRjAwQjdEQzBEIC8qIGJpZ251bS1k
dG9hLmggKi8sCisJCQkJQzIyQzUyOTIxM0ZBRjZFRjAwQjdEQzBEIC8qIGJpZ251bS5jYyAqLywK
KwkJCQlDMjJDNTI5MzEzRkFGNkVGMDBCN0RDMEQgLyogYmlnbnVtLmggKi8sCisJCQkJQzIyQzUy
OTQxM0ZBRjZFRjAwQjdEQzBEIC8qIGNhY2hlZC1wb3dlcnMuY2MgKi8sCisJCQkJQzIyQzUyOTUx
M0ZBRjZFRjAwQjdEQzBEIC8qIGNhY2hlZC1wb3dlcnMuaCAqLywKKwkJCQlDMjJDNTI5NjEzRkFG
NkVGMDBCN0RDMEQgLyogQ09QWUlORyAqLywKKwkJCQlDMjJDNTI5NzEzRkFGNkVGMDBCN0RDMEQg
LyogZGl5LWZwLmNjICovLAorCQkJCUMyMkM1Mjk4MTNGQUY2RUYwMEI3REMwRCAvKiBkaXktZnAu
aCAqLywKKwkJCQlDMjJDNTI5OTEzRkFGNkVGMDBCN0RDMEQgLyogZG91YmxlLWNvbnZlcnNpb24u
Y2MgKi8sCisJCQkJQzIyQzUyOUExM0ZBRjZFRjAwQjdEQzBEIC8qIGRvdWJsZS1jb252ZXJzaW9u
LmggKi8sCisJCQkJQzIyQzUyOUIxM0ZBRjZFRjAwQjdEQzBEIC8qIGRvdWJsZS5oICovLAorCQkJ
CUMyMkM1MjlDMTNGQUY2RUYwMEI3REMwRCAvKiBmYXN0LWR0b2EuY2MgKi8sCisJCQkJQzIyQzUy
OUQxM0ZBRjZFRjAwQjdEQzBEIC8qIGZhc3QtZHRvYS5oICovLAorCQkJCUMyMkM1MjlFMTNGQUY2
RUYwMEI3REMwRCAvKiBmaXhlZC1kdG9hLmNjICovLAorCQkJCUMyMkM1MjlGMTNGQUY2RUYwMEI3
REMwRCAvKiBmaXhlZC1kdG9hLmggKi8sCisJCQkJQzIyQzUyQTAxM0ZBRjZFRjAwQjdEQzBEIC8q
IExJQ0VOU0UgKi8sCisJCQkJQzIyQzUyQTExM0ZBRjZFRjAwQjdEQzBEIC8qIE1ha2VmaWxlICov
LAorCQkJCUMyMkM1MkEyMTNGQUY2RUYwMEI3REMwRCAvKiBSRUFETUUgKi8sCisJCQkJQzIyQzUy
QTMxM0ZBRjZFRjAwQjdEQzBEIC8qIFNDb25zY3JpcHQgKi8sCisJCQkJQzIyQzUyQTQxM0ZBRjZF
RjAwQjdEQzBEIC8qIFNDb25zdHJ1Y3QgKi8sCisJCQkJQzIyQzUyQjkxM0ZBRjZFRjAwQjdEQzBE
IC8qIHN0cnRvZC5jYyAqLywKKwkJCQlDMjJDNTJCQTEzRkFGNkVGMDBCN0RDMEQgLyogc3RydG9k
LmggKi8sCisJCQkJQzIyQzUyQkIxM0ZBRjZFRjAwQjdEQzBEIC8qIHV0aWxzLmggKi8sCisJCQkp
OworCQkJcGF0aCA9IGR0b2E7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlF
MTk1Njc4RDA5RTdDRjEyMDBCODlEMTMgLyogdW5pY29kZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yMjc5LDcgKzIzNDgsNiBAQAogCQkJCUJDMThDM0ZB
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBEZWJ1Z2dlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMzMTM1
NjQwRjMwMkZBMzAwM0RGRDNBIC8qIERlYnVnZ2VyQWN0aXZhdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEMzRkIwRTE2RjVDRDAwQjM0NDYwIC8qIERlYnVnZ2VyQ2FsbEZyYW1lLmggaW4g
SGVhZGVycyAqLywKLQkJCQk4NjJBRjRCNjEyMjM5QzdCMDAyNEU1QjggLyogRGVjaW1hbE51bWJl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEzNUZBRjIxMkQyNkFDRTAwM0MwODNCIC8qIERlY29k
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0ZDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBEZXF1
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQ0E0RjExMzJFQUE2RDAwMkIyQUQ3IC8qIERGR0Fs
aWFzVHJhY2tlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDY0LDYgKzI1MzIsMTYgQEAKIAkJCQk5
MEQzNDY5QzBFMjg1MjgwMDA5NDkyRUUgLyogUmVmQ291bnRlZExlYWtDb3VudGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQ1ODBFMTZGNUNEMDBCMzQ0NjAgLyogUmVmUHRyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQ1OTBFMTZGNUNEMDBCMzQ0NjAgLyogUmVmUHRySGFzaE1hcC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQzIyQzUyRjIxM0ZBRjZFRjAwQjdEQzBEIC8qIGJpZ251bS1k
dG9hLmggaW4gSGVhZGVycyAqLywKKwkJCQlDMjJDNTJGNDEzRkFGNkVGMDBCN0RDMEQgLyogYmln
bnVtLmggaW4gSGVhZGVycyAqLywKKwkJCQlDMjJDNTJGNjEzRkFGNkVGMDBCN0RDMEQgLyogY2Fj
aGVkLXBvd2Vycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzIyQzUyRjgxM0ZBRjZFRjAwQjdEQzBE
IC8qIGRpeS1mcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzIyQzUyRkExM0ZBRjZFRjAwQjdEQzBE
IC8qIGRvdWJsZS1jb252ZXJzaW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQlDMjJDNTJGQjEzRkFG
NkVGMDBCN0RDMEQgLyogZG91YmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQlDMjJDNTJGRDEzRkFG
NkVGMDBCN0RDMEQgLyogZmFzdC1kdG9hLmggaW4gSGVhZGVycyAqLywKKwkJCQlDMjJDNTJGRjEz
RkFGNkVGMDBCN0RDMEQgLyogZml4ZWQtZHRvYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzIyQzUz
MTQxM0ZBRjZFRjAwQjdEQzBEIC8qIHN0cnRvZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzIyQzUz
MTUxM0ZBRjZFRjAwQjdEQzBEIC8qIHV0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1
QTBFMTZGNUNEMDBCMzQ0NjAgLyogUmVnRXhwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTcxMkIz
RjExQzdCMjI4MDA3QTUzMTUgLyogUmVnRXhwQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
RDIwMkMyMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0yODcwLDcgKzI5NDgsNiBAQAogCQkJCTE0MjgwODIzMTA3RUMwMkMwMDEzRTdCMiAv
KiBEZWJ1Z2dlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzMxMzU2NTBGMzAyRkEzMDAzREZE
M0EgLyogRGVidWdnZXJBY3RpdmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0OTU1OUVF
MEREQ0RERjcwMDY0ODA4NyAvKiBEZWJ1Z2dlckNhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQkwRjI5NDc5QzEyNkU2OThDMDBCM0FCRjUgLyogRGVjaW1hbE51bWJlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4NkVDOURDNDEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQzcxMzI4REY4MjAwMkIyQUQ3IC8qIERG
R0dyYXBoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5REM5MTMyOERGODIwMDJCMkFENyAv
KiBERkdKSVRDb2RlR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzAzMCw2ICszMTA3
LDE1IEBACiAJCQkJMTREMkYzREExMzlGNEJFMjAwNDkxMDMxIC8qIE5ld1NwYWNlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0MkExRDgzMTNBMTlDODQwMDlEQTVGRSAvKiBPbGRTcGFjZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNEJBN0E5NzEzQUFERkY4MDA1QjdDMkMgLyogSGVhcC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlDMjJDNTJGMTEzRkFGNkVGMDBCN0RDMEQgLyogYmlnbnVtLWR0
b2EuY2MgaW4gU291cmNlcyAqLywKKwkJCQlDMjJDNTJGMzEzRkFGNkVGMDBCN0RDMEQgLyogYmln
bnVtLmNjIGluIFNvdXJjZXMgKi8sCisJCQkJQzIyQzUyRjUxM0ZBRjZFRjAwQjdEQzBEIC8qIGNh
Y2hlZC1wb3dlcnMuY2MgaW4gU291cmNlcyAqLywKKwkJCQlDMjJDNTJGNzEzRkFGNkVGMDBCN0RD
MEQgLyogZGl5LWZwLmNjIGluIFNvdXJjZXMgKi8sCisJCQkJQzIyQzUyRjkxM0ZBRjZFRjAwQjdE
QzBEIC8qIGRvdWJsZS1jb252ZXJzaW9uLmNjIGluIFNvdXJjZXMgKi8sCisJCQkJQzIyQzUyRkMx
M0ZBRjZFRjAwQjdEQzBEIC8qIGZhc3QtZHRvYS5jYyBpbiBTb3VyY2VzICovLAorCQkJCUMyMkM1
MkZFMTNGQUY2RUYwMEI3REMwRCAvKiBmaXhlZC1kdG9hLmNjIGluIFNvdXJjZXMgKi8sCisJCQkJ
QzIyQzUzMDAxM0ZBRjZFRjAwQjdEQzBEIC8qIE1ha2VmaWxlIGluIFNvdXJjZXMgKi8sCisJCQkJ
QzIyQzUzMTMxM0ZBRjZFRjAwQjdEQzBEIC8qIHN0cnRvZC5jYyBpbiBTb3VyY2VzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGlu
Zy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5n
LmNwcAppbmRleCA3MTY1NDIxZjk1YWVmOWY4YjA5ZTkwMjRmMDcwYWMwNWYzNjYyODVlLi5mZmU1
MmYyOWU0MzMxNmQ1YjMzNGRlN2I2Y2MzOGQ0MTkwNWQ4ZTk3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcApAQCAtMzAs
NyArMzAsNyBAQAogI2luY2x1ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcuaCIKIAogI2luY2x1ZGUg
IkhlYXAuaCIKLSNpbmNsdWRlICJkdG9hLmgiCisjaW5jbHVkZSA8d3RmL2R0b2EvY2FjaGVkLXBv
d2Vycy5oPgogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVj
dC5oIgogI2luY2x1ZGUgIlVTdHJpbmcuaCIKQEAgLTQ3LDYgKzQ3LDcgQEAgc3RhdGljIHB0aHJl
YWRfb25jZV90IGluaXRpYWxpemVUaHJlYWRpbmdLZXlPbmNlID0gUFRIUkVBRF9PTkNFX0lOSVQ7
CiAKIHN0YXRpYyB2b2lkIGluaXRpYWxpemVUaHJlYWRpbmdPbmNlKCkKIHsKKyAgICBkb3VibGVf
Y29udmVyc2lvbjo6aW5pdGlhbGl6ZSgpOwogICAgIFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZygp
OwogICAgIEpTR2xvYmFsRGF0YTo6c3RvcmVWUHRycygpOwogI2lmIEVOQUJMRShKU0NfTVVMVElQ
TEVfVEhSRUFEUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051
bWJlclByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQ
cm90b3R5cGUuY3BwCmluZGV4IDY3OWY3NDc5ZGVjN2VlYjU0M2VlOWU2MjMzM2YwNmY4M2Q0OWVm
NGQuLjY3MjI1YmJlZGE3OTlmMjNlZmEzOGFkZTMwZGFjNjljMWYwOWEwZGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcApAQCAtMzMs
NiArMzMsOSBAQAogI2luY2x1ZGUgPHd0Zi9EZWNpbWFsTnVtYmVyLmg+CiAjaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL2R0
b2EvZG91YmxlLWNvbnZlcnNpb24uaD4KKwordXNpbmcgbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJz
aW9uOwogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzM5LDEyICszNDIsMTQgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb0V4cG9uZW50aWFsKEV4ZWNTdGF0
ZSogZXhlYykKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBV
U3RyaW5nOjpudW1iZXIoeCkpKTsKIAogICAgIC8vIFJvdW5kIGlmIHRoZSBhcmd1bWVudCBpcyBu
b3QgdW5kZWZpbmVkLCBhbHdheXMgZm9ybWF0IGFzIGV4cG9uZW50aWFsLgotICAgIE51bWJlclRv
U3RyaW5nQnVmZmVyIGJ1ZmZlcjsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBpc1VuZGVmaW5lZAot
ICAgICAgICA/IERlY2ltYWxOdW1iZXIoeCkudG9TdHJpbmdFeHBvbmVudGlhbChidWZmZXIsIFdU
Rjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgpCi0gICAgICAgIDogRGVjaW1hbE51bWJlcih4
LCBSb3VuZGluZ1NpZ25pZmljYW50RmlndXJlcywgZGVjaW1hbFBsYWNlc0luRXhwb25lbnQgKyAx
KS50b1N0cmluZ0V4cG9uZW50aWFsKGJ1ZmZlciwgV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxl
bmd0aCk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIFVTdHJp
bmcoYnVmZmVyLCBsZW5ndGgpKSk7CisgICAgY2hhciBidWZmZXJbV1RGOjpOdW1iZXJUb1N0cmlu
Z0J1ZmZlckxlbmd0aF07CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyKGJ1ZmZlciwgV1RGOjpO
dW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCk7CisgICAgY29uc3QgRG91YmxlVG9TdHJpbmdDb252
ZXJ0ZXImIGNvbnZlcnRlciA9IERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpFY21hU2NyaXB0Q29u
dmVydGVyKCk7CisgICAgYnVpbGRlci5SZXNldCgpOworICAgIGlzVW5kZWZpbmVkCisgICAgICAg
ID8gY29udmVydGVyLlRvRXhwb25lbnRpYWwoeCwgLTEsICZidWlsZGVyKQorICAgICAgICA6IGNv
bnZlcnRlci5Ub0V4cG9uZW50aWFsKHgsIGRlY2ltYWxQbGFjZXNJbkV4cG9uZW50LCAmYnVpbGRl
cik7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBVU3RyaW5nKGJ1
aWxkZXIuRmluYWxpemUoKSkpKTsKIH0KIAogLy8gdG9GaXhlZCBjb252ZXJ0cyBhIG51bWJlciB0
byBhIHN0cmluZywgYWx3YXlzIGZvcm1hdHRpbmcgYXMgYW4gYSBkZWNpbWFsIGZyYWN0aW9uLgpA
QCAtMzc2LDEwICszODEsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQ
cm90b0Z1bmNUb0ZpeGVkKEV4ZWNTdGF0ZSogZXhlYykKICAgICAvLyBoYW5kbGVkIGJ5IG51bWJl
clRvU3RyaW5nLgogICAgIEFTU0VSVChpc2Zpbml0ZSh4KSk7CiAKLSAgICAvLyBDb252ZXJ0IHRv
IGRlY2ltYWwgd2l0aCByb3VuZGluZywgYW5kIGZvcm1hdCBhcyBkZWNpbWFsLgotICAgIE51bWJl
clRvU3RyaW5nQnVmZmVyIGJ1ZmZlcjsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBEZWNpbWFsTnVt
YmVyKHgsIFJvdW5kaW5nRGVjaW1hbFBsYWNlcywgZGVjaW1hbFBsYWNlcykudG9TdHJpbmdEZWNp
bWFsKGJ1ZmZlciwgV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBVU3RyaW5nKGJ1ZmZlciwgbGVuZ3RoKSkp
OworICAgIGNoYXIgYnVmZmVyW1dURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGhdOworICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcihidWZmZXIsIFdURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJM
ZW5ndGgpOworICAgIGNvbnN0IERvdWJsZVRvU3RyaW5nQ29udmVydGVyJiBjb252ZXJ0ZXIgPSBE
b3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6RWNtYVNjcmlwdENvbnZlcnRlcigpOworICAgIGJ1aWxk
ZXIuUmVzZXQoKTsKKyAgICBjb252ZXJ0ZXIuVG9GaXhlZCh4LCBkZWNpbWFsUGxhY2VzLCAmYnVp
bGRlcik7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBVU3RyaW5n
KGJ1aWxkZXIuRmluYWxpemUoKSkpKTsKIH0KIAogLy8gdG9QcmVjaXNpb24gY29udmVydHMgYSBu
dW1iZXIgdG8gYSBzdHJpbmcsIHRha2VpbmcgYW4gYXJndW1lbnQgc3BlY2lmeWluZyBhCkBAIC00
MTIsMTcgKzQxOSwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3Rv
RnVuY1RvUHJlY2lzaW9uKEV4ZWNTdGF0ZSogZXhlYykKICAgICBpZiAoIWlzZmluaXRlKHgpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmc6Om51
bWJlcih4KSkpOwogCi0gICAgLy8gQ29udmVydCB0byBkZWNpbWFsIHdpdGggcm91bmRpbmcuCi0g
ICAgRGVjaW1hbE51bWJlciBudW1iZXIoeCwgUm91bmRpbmdTaWduaWZpY2FudEZpZ3VyZXMsIHNp
Z25pZmljYW50RmlndXJlcyk7Ci0gICAgLy8gSWYgbnVtYmVyIGlzIGluIHRoZSByYW5nZSAxZS02
IDw9IHggPCBwb3coMTAsIHNpZ25pZmljYW50RmlndXJlcykgdGhlbiBmb3JtYXQKLSAgICAvLyBh
cyBkZWNpbWFsLiBPdGhlcndpc2UsIGZvcm1hdCB0aGUgbnVtYmVyIGFzIGFuIGV4cG9uZW50aWFs
LiBEZWNpbWFsIGZvcm1hdAotICAgIC8vIGRlbWFuZHMgYSBtaW5pbXVtIG9mIChleHBvbmVudCAr
IDEpIGRpZ2l0cyB0byByZXByZXNlbnQgYSBudW1iZXIsIGZvciBleGFtcGxlCi0gICAgLy8gMTIz
NCAoMS4yMzRlKzMpIHJlcXVpcmVzIDQgZGlnaXRzLiAoU2VlIEVDTUEtMjYyIDE1LjcuNC43LjEw
LmMpCi0gICAgTnVtYmVyVG9TdHJpbmdCdWZmZXIgYnVmZmVyOwotICAgIHVuc2lnbmVkIGxlbmd0
aCA9IG51bWJlci5leHBvbmVudCgpID49IC02ICYmIG51bWJlci5leHBvbmVudCgpIDwgc2lnbmlm
aWNhbnRGaWd1cmVzCi0gICAgICAgID8gbnVtYmVyLnRvU3RyaW5nRGVjaW1hbChidWZmZXIsIFdU
Rjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgpCi0gICAgICAgIDogbnVtYmVyLnRvU3RyaW5n
RXhwb25lbnRpYWwoYnVmZmVyLCBXVEY6Ok51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmcoYnVmZmVyLCBs
ZW5ndGgpKSk7CisgICAgY2hhciBidWZmZXJbV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0
aF07CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyKGJ1ZmZlciwgV1RGOjpOdW1iZXJUb1N0cmlu
Z0J1ZmZlckxlbmd0aCk7CisgICAgY29uc3QgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXImIGNvbnZl
cnRlciA9IERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpFY21hU2NyaXB0Q29udmVydGVyKCk7Cisg
ICAgYnVpbGRlci5SZXNldCgpOworICAgIGNvbnZlcnRlci5Ub1ByZWNpc2lvbih4LCBzaWduaWZp
Y2FudEZpZ3VyZXMsICZidWlsZGVyKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3Ry
aW5nKGV4ZWMsIFVTdHJpbmcoYnVpbGRlci5GaW5hbGl6ZSgpKSkpOwogfQogCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhl
YykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5jcHAKaW5kZXggYzE0ZjMx
OTlmNDA3ZjQ3Zjc5NWY1MWJiOTIwZTZjMDlmM2MzYTZmZC4uYzg2ZjUwOTcwZTEyNjU5MmE1NmIy
ZDI0Y2Y0M2FiODQzNTFkYzM4YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVVN0cmluZy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0
cmluZy5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgog
I2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Cisj
aW5jbHVkZSA8d3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uaD4KICNpbmNsdWRlIDx3dGYvdW5p
Y29kZS9VVEY4Lmg+CiAKICNpZiBIQVZFKFNUUklOR1NfSCkKQEAgLTE5NSw5ICsxOTYsMTIgQEAg
VVN0cmluZyBVU3RyaW5nOjpudW1iZXIobG9uZyBsKQogCiBVU3RyaW5nIFVTdHJpbmc6Om51bWJl
cihkb3VibGUgZCkKIHsKLSAgICBOdW1iZXJUb1N0cmluZ0J1ZmZlciBidWZmZXI7Ci0gICAgdW5z
aWduZWQgbGVuZ3RoID0gbnVtYmVyVG9TdHJpbmcoZCwgYnVmZmVyKTsKLSAgICByZXR1cm4gVVN0
cmluZyhidWZmZXIsIGxlbmd0aCk7CisgICAgY2hhciBidWZmZXJbV1RGOjpOdW1iZXJUb1N0cmlu
Z0J1ZmZlckxlbmd0aF07CisgICAgZG91YmxlX2NvbnZlcnNpb246OlN0cmluZ0J1aWxkZXIgYnVp
bGRlcihidWZmZXIsIFdURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgpOworICAgIGNvbnN0
IGRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGVUb1N0cmluZ0NvbnZlcnRlciYgY29udmVydGVyID0g
ZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpFY21hU2NyaXB0Q29u
dmVydGVyKCk7CisgICAgYnVpbGRlci5SZXNldCgpOworICAgIGNvbnZlcnRlci5Ub1Nob3J0ZXN0
KGQsICZidWlsZGVyKTsKKyAgICByZXR1cm4gVVN0cmluZyhidWlsZGVyLkZpbmFsaXplKCkpOwog
fQogCiBVU3RyaW5nIFVTdHJpbmc6OnN1YnN0cmluZ1NoYXJpbmdJbXBsKHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9EZWNpbWFsTnVtYmVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGVj
aW1hbE51bWJlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwMzA0ZTJlNWY2
MzBkYWMzMjBmNTRmNzhmZjdmNzUyN2FkMDY3ODMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EZWNpbWFsTnVt
YmVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJEZWNpbWFsTnVtYmVyLmgiCi0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFj
ZSBXVEYgewotCi11bnNpZ25lZCBEZWNpbWFsTnVtYmVyOjpidWZmZXJMZW5ndGhGb3JTdHJpbmdE
ZWNpbWFsKCkgY29uc3QKLXsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwotICAgIC8vIGlmIHRo
ZSBleHBvbmVudCBpcyBuZWdhdGl2ZSB0aGUgbnVtYmVyIGRlY2ltYWwgcmVwcmVzZW50YXRpb24g
aXMgb2YgdGhlIGZvcm06Ci0gICAgLy8gWzxzaWduPl0wLls8emVyb3M+XTxzaWduaWZpY2FuZD4K
LSAgICBpZiAobV9leHBvbmVudCA8IDApIHsKLSAgICAgICAgaWYgKG1fc2lnbikKLSAgICAgICAg
ICAgICsrbGVuZ3RoOwotICAgICAgICBsZW5ndGggKz0gMjsgLy8gZm9yICIwLiIKLSAgICAgICAg
bGVuZ3RoICs9IC1tX2V4cG9uZW50IC0gMTsKLSAgICAgICAgbGVuZ3RoICs9IG1fcHJlY2lzaW9u
OwotICAgICAgICByZXR1cm4gbGVuZ3RoOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGRpZ2l0c0Jl
Zm9yZURlY2ltYWxQb2ludCA9IG1fZXhwb25lbnQgKyAxOwotCi0gICAgLy8gSWYgdGhlIHByZWNp
c2lvbiBpcyA8PSB0aGFuIHRoZSBudW1iZXIgb2YgZGlnaXRzIHRvIGdldCB1cCB0byB0aGUgZGVj
aW1hbAotICAgIC8vIHBvaW50LCB0aGVuIHRoZXJlIGlzIG5vIGZyYWN0aW9uYWwgcGFydCwgbnVt
YmVyIGlzIG9mIHRoZSBmb3JtOgotICAgIC8vIFs8c2lnbj5dPHNpZ25pZmljYW5kPls8emVyb3M+
XQotICAgIGlmIChtX3ByZWNpc2lvbiA8PSBkaWdpdHNCZWZvcmVEZWNpbWFsUG9pbnQpIHsKLSAg
ICAgICAgaWYgKG1fc2lnbikKLSAgICAgICAgICAgICsrbGVuZ3RoOwotICAgICAgICBsZW5ndGgg
Kz0gbV9wcmVjaXNpb247Ci0gICAgICAgIGxlbmd0aCArPSBkaWdpdHNCZWZvcmVEZWNpbWFsUG9p
bnQgLSBtX3ByZWNpc2lvbjsKLSAgICAgICAgcmV0dXJuIGxlbmd0aDsKLSAgICB9Ci0KLSAgICAv
LyBJZiB3ZSBnZXQgaGVyZSwgbnVtYmVyIHN0YXJ0cyBiZWZvcmUgdGhlIGRlY2ltYWwgcG9pbnQs
IGFuZCBlbmRzIGFmdGVyIGl0LAotICAgIC8vIGFzIHN1Y2ggaXMgb2YgdGhlIGZvcm06Ci0gICAg
Ly8gWzxzaWduPl08c2lnbmlmaWNhbmQtYmVnaW4+LjxzaWduaWZpY2FuZC1lbmQ+Ci0gICAgaWYg
KG1fc2lnbikKLSAgICAgICAgKytsZW5ndGg7Ci0gICAgbGVuZ3RoICs9IGRpZ2l0c0JlZm9yZURl
Y2ltYWxQb2ludDsKLSAgICArK2xlbmd0aDsgLy8gZm9yIGRlY2ltYWwgcG9pbnQKLSAgICBsZW5n
dGggKz0gbV9wcmVjaXNpb24gLSBkaWdpdHNCZWZvcmVEZWNpbWFsUG9pbnQ7Ci0KLSAgICByZXR1
cm4gbGVuZ3RoOwotfQotCi11bnNpZ25lZCBEZWNpbWFsTnVtYmVyOjpidWZmZXJMZW5ndGhGb3JT
dHJpbmdFeHBvbmVudGlhbCgpIGNvbnN0Ci17Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKLSAg
ICBpZiAobV9zaWduKQotICAgICAgICArK2xlbmd0aDsKLQotICAgIC8vIEFkZCB0aGUgc2lnbmlm
aWNhbmQKLSAgICArK2xlbmd0aDsKLQotICAgIGlmIChtX3ByZWNpc2lvbiA+IDEpIHsKLSAgICAg
ICAgKytsZW5ndGg7IC8vIGZvciBkZWNpbWFsIHBvaW50Ci0gICAgICAgIGxlbmd0aCArPSBtX3By
ZWNpc2lvbiAtIDE7Ci0gICAgfQotCi0gICAgLy8gQWRkICJlKyIgb3IgImUtIgotICAgIGxlbmd0
aCArPSAyOwotCi0gICAgaW50IGV4cG9uZW50ID0gKG1fZXhwb25lbnQgPj0gMCkgPyBtX2V4cG9u
ZW50IDogLW1fZXhwb25lbnQ7Ci0KLSAgICAvLyBBZGQgdGhlIGV4cG9uZW50Ci0gICAgaWYgKGV4
cG9uZW50ID49IDEwMCkKLSAgICAgICAgKytsZW5ndGg7Ci0gICAgaWYgKGV4cG9uZW50ID49IDEw
KQotICAgICAgICArK2xlbmd0aDsKLSAgICArK2xlbmd0aDsKLQotICAgIHJldHVybiBsZW5ndGg7
Ci19Ci0KLXVuc2lnbmVkIERlY2ltYWxOdW1iZXI6OnRvU3RyaW5nRGVjaW1hbChVQ2hhciogYnVm
ZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX1VOVVNFRChi
dWZmZXJMZW5ndGgsIGJ1ZmZlckxlbmd0aCA+PSBidWZmZXJMZW5ndGhGb3JTdHJpbmdEZWNpbWFs
KCkpOwotCi0gICAgLy8gU2hvdWxkIGFsd2F5cyBiZSBhdCBsZWFzdCBvbmUgZGlnaXQgdG8gYWRk
IHRvIHRoZSBzdHJpbmchCi0gICAgQVNTRVJUKG1fcHJlY2lzaW9uKTsKLSAgICBVQ2hhciogbmV4
dCA9IGJ1ZmZlcjsKLQotICAgIC8vIGlmIHRoZSBleHBvbmVudCBpcyBuZWdhdGl2ZSB0aGUgbnVt
YmVyIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gaXMgb2YgdGhlIGZvcm06Ci0gICAgLy8gWzxzaWdu
Pl0wLls8emVyb3M+XTxzaWduaWZpY2FuZD4KLSAgICBpZiAobV9leHBvbmVudCA8IDApIHsKLSAg
ICAgICAgdW5zaWduZWQgemVyb3MgPSAtbV9leHBvbmVudCAtIDE7Ci0KLSAgICAgICAgaWYgKG1f
c2lnbikKLSAgICAgICAgICAgICpuZXh0KysgPSAnLSc7Ci0gICAgICAgICpuZXh0KysgPSAnMCc7
Ci0gICAgICAgICpuZXh0KysgPSAnLic7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCB6ZXJvczsgKytpKQotICAgICAgICAgICAgKm5leHQrKyA9ICcwJzsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJlY2lzaW9uOyArK2kpCi0gICAgICAgICAgICAqbmV4dCsr
ID0gbV9zaWduaWZpY2FuZFtpXTsKLQotICAgICAgICByZXR1cm4gbmV4dCAtIGJ1ZmZlcjsKLSAg
ICB9Ci0KLSAgICB1bnNpZ25lZCBkaWdpdHNCZWZvcmVEZWNpbWFsUG9pbnQgPSBtX2V4cG9uZW50
ICsgMTsKLQotICAgIC8vIElmIHRoZSBwcmVjaXNpb24gaXMgPD0gdGhhbiB0aGUgbnVtYmVyIG9m
IGRpZ2l0cyB0byBnZXQgdXAgdG8gdGhlIGRlY2ltYWwKLSAgICAvLyBwb2ludCwgdGhlbiB0aGVy
ZSBpcyBubyBmcmFjdGlvbmFsIHBhcnQsIG51bWJlciBpcyBvZiB0aGUgZm9ybToKLSAgICAvLyBb
PHNpZ24+XTxzaWduaWZpY2FuZD5bPHplcm9zPl0KLSAgICBpZiAobV9wcmVjaXNpb24gPD0gZGln
aXRzQmVmb3JlRGVjaW1hbFBvaW50KSB7Ci0gICAgICAgIGlmIChtX3NpZ24pCi0gICAgICAgICAg
ICAqbmV4dCsrID0gJy0nOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcmVj
aXNpb247ICsraSkKLSAgICAgICAgICAgICpuZXh0KysgPSBtX3NpZ25pZmljYW5kW2ldOwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgKGRpZ2l0c0JlZm9yZURlY2ltYWxQb2ludCAt
IG1fcHJlY2lzaW9uKTsgKytpKQotICAgICAgICAgICAgKm5leHQrKyA9ICcwJzsKLQotICAgICAg
ICByZXR1cm4gbmV4dCAtIGJ1ZmZlcjsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBnZXQgaGVyZSwg
bnVtYmVyIHN0YXJ0cyBiZWZvcmUgdGhlIGRlY2ltYWwgcG9pbnQsIGFuZCBlbmRzIGFmdGVyIGl0
LAotICAgIC8vIGFzIHN1Y2ggaXMgb2YgdGhlIGZvcm06Ci0gICAgLy8gWzxzaWduPl08c2lnbmlm
aWNhbmQtYmVnaW4+LjxzaWduaWZpY2FuZC1lbmQ+Ci0KLSAgICBpZiAobV9zaWduKQotICAgICAg
ICAqbmV4dCsrID0gJy0nOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkaWdpdHNCZWZv
cmVEZWNpbWFsUG9pbnQ7ICsraSkKLSAgICAgICAgKm5leHQrKyA9IG1fc2lnbmlmaWNhbmRbaV07
Ci0gICAgKm5leHQrKyA9ICcuJzsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBkaWdpdHNCZWZvcmVE
ZWNpbWFsUG9pbnQ7IGkgPCBtX3ByZWNpc2lvbjsgKytpKQotICAgICAgICAqbmV4dCsrID0gbV9z
aWduaWZpY2FuZFtpXTsKLQotICAgIHJldHVybiBuZXh0IC0gYnVmZmVyOwotfQotCi11bnNpZ25l
ZCBEZWNpbWFsTnVtYmVyOjp0b1N0cmluZ0V4cG9uZW50aWFsKFVDaGFyKiBidWZmZXIsIHVuc2ln
bmVkIGJ1ZmZlckxlbmd0aCkgY29uc3QKLXsKLSAgICBBU1NFUlRfVU5VU0VEKGJ1ZmZlckxlbmd0
aCwgYnVmZmVyTGVuZ3RoID49IGJ1ZmZlckxlbmd0aEZvclN0cmluZ0V4cG9uZW50aWFsKCkpOwot
Ci0gICAgLy8gU2hvdWxkIGFsd2F5cyBiZSBhdCBsZWFzdCBvbmUgZGlnaXQgdG8gYWRkIHRvIHRo
ZSBzdHJpbmchCi0gICAgQVNTRVJUKG1fcHJlY2lzaW9uKTsKLSAgICBVQ2hhciogbmV4dCA9IGJ1
ZmZlcjsKLQotICAgIC8vIEFkZCB0aGUgc2lnbgotICAgIGlmIChtX3NpZ24pCi0gICAgICAgICpu
ZXh0KysgPSAnLSc7Ci0KLSAgICAvLyBBZGQgdGhlIHNpZ25pZmljYW5kCi0gICAgKm5leHQrKyA9
IG1fc2lnbmlmaWNhbmRbMF07Ci0gICAgaWYgKG1fcHJlY2lzaW9uID4gMSkgewotICAgICAgICAq
bmV4dCsrID0gJy4nOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbV9wcmVjaXNp
b247ICsraSkKLSAgICAgICAgICAgICpuZXh0KysgPSBtX3NpZ25pZmljYW5kW2ldOwotICAgIH0K
LQotICAgIC8vIEFkZCAiZSsiIG9yICJlLSIKLSAgICAqbmV4dCsrID0gJ2UnOwotICAgIGludCBl
eHBvbmVudDsKLSAgICBpZiAobV9leHBvbmVudCA+PSAwKSB7Ci0gICAgICAgICpuZXh0KysgPSAn
Kyc7Ci0gICAgICAgIGV4cG9uZW50ID0gbV9leHBvbmVudDsKLSAgICB9IGVsc2UgewotICAgICAg
ICAqbmV4dCsrID0gJy0nOwotICAgICAgICBleHBvbmVudCA9IC1tX2V4cG9uZW50OwotICAgIH0K
LQotICAgIC8vIEFkZCB0aGUgZXhwb25lbnQKLSAgICBpZiAoZXhwb25lbnQgPj0gMTAwKQotICAg
ICAgICAqbmV4dCsrID0gJzAnICsgZXhwb25lbnQgLyAxMDA7Ci0gICAgaWYgKGV4cG9uZW50ID49
IDEwKQotICAgICAgICAqbmV4dCsrID0gJzAnICsgKGV4cG9uZW50ICUgMTAwKSAvIDEwOwotICAg
ICpuZXh0KysgPSAnMCcgKyBleHBvbmVudCAlIDEwOwotCi0gICAgcmV0dXJuIG5leHQgLSBidWZm
ZXI7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9EZWNpbWFsTnVtYmVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Rl
Y2ltYWxOdW1iZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM3YjgwMDU4MmQz
NmFiMmExNzZiMDNlMDlkMGM1MmEwNDU0MjliMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RlY2ltYWxOdW1i
ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgRGVjaW1hbE51bWJlcl9oCi0jZGVm
aW5lIERlY2ltYWxOdW1iZXJfaAotCi0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHd0Zi9k
dG9hLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLWVudW0gUm91bmRpbmdTaWduaWZpY2Fu
dEZpZ3VyZXNUeXBlIHsgUm91bmRpbmdTaWduaWZpY2FudEZpZ3VyZXMgfTsKLWVudW0gUm91bmRp
bmdEZWNpbWFsUGxhY2VzVHlwZSB7IFJvdW5kaW5nRGVjaW1hbFBsYWNlcyB9OwotCi1jbGFzcyBE
ZWNpbWFsTnVtYmVyIHsKLXB1YmxpYzoKLSAgICBEZWNpbWFsTnVtYmVyKGRvdWJsZSBkKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKGlzZmluaXRlKGQpKTsKLSAgICAgICAgZHRvYShtX3NpZ25pZmlj
YW5kLCBkLCBtX3NpZ24sIG1fZXhwb25lbnQsIG1fcHJlY2lzaW9uKTsKLQotICAgICAgICBBU1NF
UlQobV9wcmVjaXNpb24pOwotICAgICAgICAvLyBaZXJvIHNob3VsZCBhbHdheXMgaGF2ZSBleHBv
bmVudCAwLgotICAgICAgICBBU1NFUlQobV9zaWduaWZpY2FuZFswXSAhPSAnMCcgfHwgIW1fZXhw
b25lbnQpOwotICAgICAgICAvLyBObyB2YWx1ZXMgb3RoZXIgdGhhbiB6ZXJvIHNob3VsZCBoYXZl
IGEgbGVhZGluZyB6ZXJvLgotICAgICAgICBBU1NFUlQobV9zaWduaWZpY2FuZFswXSAhPSAnMCcg
fHwgbV9wcmVjaXNpb24gPT0gMSk7Ci0gICAgICAgIC8vIE5vIHZhbHVlcyBvdGhlciB0aGFuIHpl
cm8gc2hvdWxkIGhhdmUgdHJhaWxpbmcgemVyb3MuCi0gICAgICAgIEFTU0VSVChtX3NpZ25pZmlj
YW5kWzBdID09ICcwJyB8fCBtX3NpZ25pZmljYW5kW21fcHJlY2lzaW9uIC0gMV0gIT0gJzAnKTsK
LSAgICB9Ci0KLSAgICBEZWNpbWFsTnVtYmVyKGRvdWJsZSBkLCBSb3VuZGluZ1NpZ25pZmljYW50
RmlndXJlc1R5cGUsIHVuc2lnbmVkIHNpZ25pZmljYW50RmlndXJlcykKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChpc2Zpbml0ZShkKSk7Ci0gICAgICAgIGR0b2FSb3VuZFNGKG1fc2lnbmlmaWNhbmQs
IGQsIHNpZ25pZmljYW50RmlndXJlcywgbV9zaWduLCBtX2V4cG9uZW50LCBtX3ByZWNpc2lvbik7
Ci0KLSAgICAgICAgQVNTRVJUKHNpZ25pZmljYW50RmlndXJlcyAmJiBzaWduaWZpY2FudEZpZ3Vy
ZXMgPD0gc2l6ZW9mKER0b2FCdWZmZXIpKTsKLSAgICAgICAgd2hpbGUgKG1fcHJlY2lzaW9uIDwg
c2lnbmlmaWNhbnRGaWd1cmVzKQotICAgICAgICAgICAgbV9zaWduaWZpY2FuZFttX3ByZWNpc2lv
bisrXSA9ICcwJzsKLQotICAgICAgICBBU1NFUlQobV9wcmVjaXNpb24pOwotICAgICAgICAvLyBa
ZXJvIHNob3VsZCBhbHdheXMgaGF2ZSBleHBvbmVudCAwLgotICAgICAgICBBU1NFUlQobV9zaWdu
aWZpY2FuZFswXSAhPSAnMCcgfHwgIW1fZXhwb25lbnQpOwotICAgIH0KLQotICAgIERlY2ltYWxO
dW1iZXIoZG91YmxlIGQsIFJvdW5kaW5nRGVjaW1hbFBsYWNlc1R5cGUsIHVuc2lnbmVkIGRlY2lt
YWxQbGFjZXMpCi0gICAgewotICAgICAgICBBU1NFUlQoaXNmaW5pdGUoZCkpOwotICAgICAgICBk
dG9hUm91bmREUChtX3NpZ25pZmljYW5kLCBkLCBkZWNpbWFsUGxhY2VzLCBtX3NpZ24sIG1fZXhw
b25lbnQsIG1fcHJlY2lzaW9uKTsKLQotICAgICAgICB1bnNpZ25lZCBzaWduaWZpY2FudEZpZ3Vy
ZXMgPSAxICsgbV9leHBvbmVudCArIGRlY2ltYWxQbGFjZXM7Ci0gICAgICAgIEFTU0VSVChzaWdu
aWZpY2FudEZpZ3VyZXMgJiYgc2lnbmlmaWNhbnRGaWd1cmVzIDw9IHNpemVvZihEdG9hQnVmZmVy
KSk7Ci0gICAgICAgIHdoaWxlIChtX3ByZWNpc2lvbiA8IHNpZ25pZmljYW50RmlndXJlcykKLSAg
ICAgICAgICAgIG1fc2lnbmlmaWNhbmRbbV9wcmVjaXNpb24rK10gPSAnMCc7Ci0KLSAgICAgICAg
QVNTRVJUKG1fcHJlY2lzaW9uKTsKLSAgICAgICAgLy8gWmVybyBzaG91bGQgYWx3YXlzIGhhdmUg
ZXhwb25lbnQgMC4KLSAgICAgICAgQVNTRVJUKG1fc2lnbmlmaWNhbmRbMF0gIT0gJzAnIHx8ICFt
X2V4cG9uZW50KTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBidWZmZXJMZW5ndGhGb3JTdHJpbmdE
ZWNpbWFsKCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgYnVmZmVyTGVuZ3RoRm9yU3RyaW5nRXhwb25l
bnRpYWwoKSBjb25zdDsKLQotICAgIHVuc2lnbmVkIHRvU3RyaW5nRGVjaW1hbChVQ2hhciogYnVm
ZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgpIGNvbnN0OwotICAgIHVuc2lnbmVkIHRvU3RyaW5n
RXhwb25lbnRpYWwoVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoKSBjb25zdDsK
LQotICAgIGJvb2wgc2lnbigpIGNvbnN0IHsgcmV0dXJuIG1fc2lnbjsgfQotICAgIGludCBleHBv
bmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwb25lbnQ7IH0KLSAgICBjb25zdCBjaGFyKiBzaWdu
aWZpY2FuZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2lnbmlmaWNhbmQ7IH0gLy8gc2lnbmlmaWNhbmQg
Y29udGFpbnMgcHJlY2lzaW9uIGNoYXJhY3RlcnMsIGlzIG5vdCBudWxsLXRlcm1pbmF0ZWQuCi0g
ICAgdW5zaWduZWQgcHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9wcmVjaXNpb247IH0KLQot
cHJpdmF0ZToKLSAgICBib29sIG1fc2lnbjsKLSAgICBpbnQgbV9leHBvbmVudDsKLSAgICBEdG9h
QnVmZmVyIG1fc2lnbmlmaWNhbmQ7Ci0gICAgdW5zaWduZWQgbV9wcmVjaXNpb247Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXVEYKLQotdXNpbmcgV1RGOjpEZWNpbWFsTnVtYmVyOwotdXNpbmcgV1RG
OjpSb3VuZGluZ1NpZ25pZmljYW50RmlndXJlczsKLXVzaW5nIFdURjo6Um91bmRpbmdEZWNpbWFs
UGxhY2VzOwotCi0jZW5kaWYgLy8gRGVjaW1hbE51bWJlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL2R0b2EuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9k
dG9hLmNwcAppbmRleCAxNDY2ZGY3MzY4MDg5NWZiN2Q2NzJmNjc4YTc0Mjk1M2Q5YzZkNWFkLi5i
NWJkYjJiODYwNTY3NTgzZWJmNGMxYmQ4NzUzZDc0ZTQ2OWU3M2I1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvZHRvYS5jcHAKQEAgLTgxLDYgKzgxLDcgQEAKICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5n
Lmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorI2luY2x1ZGUgPHd0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmg+CiAKICNpZiBDT01QSUxF
UihNU1ZDKQogI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQyNDQpCkBAIC0xMjc0LDU2MSArMTI3
NSwxMiBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBpbnQgcXVvcmVtKEJpZ0ludCYgYiwgQmlnSW50
JiBTKQogICAgIHJldHVybiBxOwogfQogCi0vKiBkdG9hIGZvciBJRUVFIGFyaXRobWV0aWMgKGRt
Zyk6IGNvbnZlcnQgZG91YmxlIHRvIEFTQ0lJIHN0cmluZy4KLSAqCi0gKiBJbnNwaXJlZCBieSAi
SG93IHRvIFByaW50IEZsb2F0aW5nLVBvaW50IE51bWJlcnMgQWNjdXJhdGVseSIgYnkKLSAqIEd1
eSBMLiBTdGVlbGUsIEpyLiBhbmQgSm9uIEwuIFdoaXRlIFtQcm9jLiBBQ00gU0lHUExBTiAnOTAs
IHBwLiAxMTItMTI2XS4KLSAqCi0gKiBNb2RpZmljYXRpb25zOgotICogICAgMS4gUmF0aGVyIHRo
YW4gaXRlcmF0aW5nLCB3ZSB1c2UgYSBzaW1wbGUgbnVtZXJpYyBvdmVyZXN0aW1hdGUKLSAqICAg
ICAgIHRvIGRldGVybWluZSBrID0gZmxvb3IobG9nMTAoZCkpLiAgV2Ugc2NhbGUgcmVsZXZhbnQK
LSAqICAgICAgIHF1YW50aXRpZXMgdXNpbmcgTyhsb2cyKGspKSByYXRoZXIgdGhhbiBPKGspIG11
bHRpcGxpY2F0aW9ucy4KLSAqICAgIDIuIEZvciBzb21lIG1vZGVzID4gMiAoY29ycmVzcG9uZGlu
ZyB0byBlY3Z0IGFuZCBmY3Z0KSwgd2UgZG9uJ3QKLSAqICAgICAgIHRyeSB0byBnZW5lcmF0ZSBk
aWdpdHMgc3RyaWN0bHkgbGVmdCB0byByaWdodC4gIEluc3RlYWQsIHdlCi0gKiAgICAgICBjb21w
dXRlIHdpdGggZmV3ZXIgYml0cyBhbmQgcHJvcGFnYXRlIHRoZSBjYXJyeSBpZiBuZWNlc3NhcnkK
LSAqICAgICAgIHdoZW4gcm91bmRpbmcgdGhlIGZpbmFsIGRpZ2l0IHVwLiAgVGhpcyBpcyBvZnRl
biBmYXN0ZXIuCi0gKiAgICAzLiBVbmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IGlucHV0IHdpbGwg
YmUgcm91bmRlZCBuZWFyZXN0LAotICogICAgICAgbW9kZSAwIHJlbmRlcnMgMWUyMyBhcyAxZTIz
IHJhdGhlciB0aGFuIDkuOTk5OTk5OTk5OTk5OTk5ZTIyLgotICogICAgICAgVGhhdCBpcywgd2Ug
YWxsb3cgZXF1YWxpdHkgaW4gc3RvcHBpbmcgdGVzdHMgd2hlbiB0aGUKLSAqICAgICAgIHJvdW5k
LW5lYXJlc3QgcnVsZSB3aWxsIGdpdmUgdGhlIHNhbWUgZmxvYXRpbmctcG9pbnQgdmFsdWUKLSAq
ICAgICAgIGFzIHdvdWxkIHNhdGlzZmFjdGlvbiBvZiB0aGUgc3RvcHBpbmcgdGVzdCB3aXRoIHN0
cmljdAotICogICAgICAgaW5lcXVhbGl0eS4KLSAqICAgIDQuIFdlIHJlbW92ZSBjb21tb24gZmFj
dG9ycyBvZiBwb3dlcnMgb2YgMiBmcm9tIHJlbGV2YW50Ci0gKiAgICAgICBxdWFudGl0aWVzLgot
ICogICAgNS4gV2hlbiBjb252ZXJ0aW5nIGZsb2F0aW5nLXBvaW50IGludGVnZXJzIGxlc3MgdGhh
biAxZTE2LAotICogICAgICAgd2UgdXNlIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMgcmF0aGVy
IHRoYW4gcmVzb3J0aW5nCi0gKiAgICAgICB0byBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlcnMu
Ci0gKiAgICA2LiBXaGVuIGFza2VkIHRvIHByb2R1Y2UgZmV3ZXIgdGhhbiAxNSBkaWdpdHMsIHdl
IGZpcnN0IHRyeQotICogICAgICAgdG8gZ2V0IGJ5IHdpdGggZmxvYXRpbmctcG9pbnQgYXJpdGht
ZXRpYzsgd2UgcmVzb3J0IHRvCi0gKiAgICAgICBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBh
cml0aG1ldGljIG9ubHkgaWYgd2UgY2Fubm90Ci0gKiAgICAgICBndWFyYW50ZWUgdGhhdCB0aGUg
ZmxvYXRpbmctcG9pbnQgY2FsY3VsYXRpb24gaGFzIGdpdmVuCi0gKiAgICAgICB0aGUgY29ycmVj
dGx5IHJvdW5kZWQgcmVzdWx0LiAgRm9yIGsgcmVxdWVzdGVkIGRpZ2l0cyBhbmQKLSAqICAgICAg
ICJ1bmlmb3JtbHkiIGRpc3RyaWJ1dGVkIGlucHV0LCB0aGUgcHJvYmFiaWxpdHkgaXMKLSAqICAg
ICAgIHNvbWV0aGluZyBsaWtlIDEwXihrLTE1KSB0aGF0IHdlIG11c3QgcmVzb3J0IHRvIHRoZSBp
bnQzMl90Ci0gKiAgICAgICBjYWxjdWxhdGlvbi4KLSAqCi0gKiBOb3RlOiAnbGVmdHJpZ2h0JyB0
cmFuc2xhdGVzIHRvICdnZW5lcmF0ZSBzaG9ydGVzdCBwb3NzaWJsZSBzdHJpbmcnLgotICovCi10
ZW1wbGF0ZTxib29sIHJvdW5kaW5nTm9uZSwgYm9vbCByb3VuZGluZ1NpZ25pZmljYW50RmlndXJl
cywgYm9vbCByb3VuZGluZ0RlY2ltYWxQbGFjZXMsIGJvb2wgbGVmdHJpZ2h0Pgotdm9pZCBkdG9h
KER0b2FCdWZmZXIgcmVzdWx0LCBkb3VibGUgZGQsIGludCBuZGlnaXRzLCBib29sJiBzaWduT3V0
LCBpbnQmIGV4cG9uZW50T3V0LCB1bnNpZ25lZCYgcHJlY2lzaW9uT3V0KQotewotICAgIC8vIEV4
YWN0bHkgb25lIHJvdW5kaW5nIG1vZGUgbXVzdCBiZSBzcGVjaWZpZWQuCi0gICAgQVNTRVJUKHJv
dW5kaW5nTm9uZSArIHJvdW5kaW5nU2lnbmlmaWNhbnRGaWd1cmVzICsgcm91bmRpbmdEZWNpbWFs
UGxhY2VzID09IDEpOwotICAgIC8vIHJvdW5kaW5nTm9uZSBvbmx5IGFsbG93ZWQgKG9ubHkgc2Vu
c2libGU/KSB3aXRoIGxlZnRyaWdodCBzZXQuCi0gICAgQVNTRVJUKCFyb3VuZGluZ05vbmUgfHwg
bGVmdHJpZ2h0KTsKLQotICAgIEFTU0VSVChpc2Zpbml0ZShkZCkpOwotCi0gICAgaW50IGJiaXRz
LCBiMiwgYjUsIGJlLCBkaWcsIGksIGllcHMsIGlsaW0gPSAwLCBpbGltMCwgaWxpbTEgPSAwLAot
ICAgICAgICBqLCBqMSwgaywgazAsIGtfY2hlY2ssIG0yLCBtNSwgczIsIHM1LAotICAgICAgICBz
cGVjX2Nhc2U7Ci0gICAgaW50MzJfdCBMOwotICAgIGludCBkZW5vcm07Ci0gICAgdWludDMyX3Qg
eDsKLSAgICBCaWdJbnQgYiwgZGVsdGEsIG1sbywgbWhpLCBTOwotICAgIFUgZDIsIGVwcywgdTsK
LSAgICBkb3VibGUgZHM7Ci0gICAgY2hhciogczsKLSAgICBjaGFyKiBzMDsKLQotICAgIHUuZCA9
IGRkOwotCi0gICAgLyogSW5maW5pdHkgb3IgTmFOICovCi0gICAgQVNTRVJUKCh3b3JkMCgmdSkg
JiBFeHBfbWFzaykgIT0gRXhwX21hc2spOwotCi0gICAgLy8gSmF2YVNjcmlwdCB0b1N0cmluZyBj
b252ZXJzaW9uIHRyZWF0cyAtMCBhcyAwLgotICAgIGlmICghZHZhbCgmdSkpIHsKLSAgICAgICAg
c2lnbk91dCA9IGZhbHNlOwotICAgICAgICBleHBvbmVudE91dCA9IDA7Ci0gICAgICAgIHByZWNp
c2lvbk91dCA9IDE7Ci0gICAgICAgIHJlc3VsdFswXSA9ICcwJzsKLSAgICAgICAgcmVzdWx0WzFd
ID0gJ1wwJzsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICh3b3JkMCgmdSkgJiBT
aWduX2JpdCkgewotICAgICAgICBzaWduT3V0ID0gdHJ1ZTsKLSAgICAgICAgd29yZDAoJnUpICY9
IH5TaWduX2JpdDsgLy8gY2xlYXIgc2lnbiBiaXQKLSAgICB9IGVsc2UKLSAgICAgICAgc2lnbk91
dCA9IGZhbHNlOwotCi0gICAgZDJiKGIsICZ1LCAmYmUsICZiYml0cyk7Ci0gICAgaWYgKChpID0g
KGludCkod29yZDAoJnUpID4+IEV4cF9zaGlmdDEgJiAoRXhwX21hc2sgPj4gRXhwX3NoaWZ0MSkp
KSkgewotICAgICAgICBkdmFsKCZkMikgPSBkdmFsKCZ1KTsKLSAgICAgICAgd29yZDAoJmQyKSAm
PSBGcmFjX21hc2sxOwotICAgICAgICB3b3JkMCgmZDIpIHw9IEV4cF8xMTsKLQotICAgICAgICAv
KiBsb2coeCkgICAgfj1+IGxvZygxLjUpICsgKHgtMS41KS8xLjUKLSAgICAgICAgICogbG9nMTAo
eCkgICAgID0gIGxvZyh4KSAvIGxvZygxMCkKLSAgICAgICAgICogICAgICAgIH49fiBsb2coMS41
KS9sb2coMTApICsgKHgtMS41KS8oMS41KmxvZygxMCkpCi0gICAgICAgICAqIGxvZzEwKGQpID0g
KGktQmlhcykqbG9nKDIpL2xvZygxMCkgKyBsb2cxMChkMikKLSAgICAgICAgICoKLSAgICAgICAg
ICogVGhpcyBzdWdnZXN0cyBjb21wdXRpbmcgYW4gYXBwcm94aW1hdGlvbiBrIHRvIGxvZzEwKGQp
IGJ5Ci0gICAgICAgICAqCi0gICAgICAgICAqIGsgPSAoaSAtIEJpYXMpKjAuMzAxMDI5OTk1NjYz
OTgxCi0gICAgICAgICAqICAgICsgKCAoZDItMS41KSowLjI4OTUyOTY1NDYwMjE2OCArIDAuMTc2
MDkxMjU5MDU1NjgxICk7Ci0gICAgICAgICAqCi0gICAgICAgICAqIFdlIHdhbnQgayB0byBiZSB0
b28gbGFyZ2UgcmF0aGVyIHRoYW4gdG9vIHNtYWxsLgotICAgICAgICAgKiBUaGUgZXJyb3IgaW4g
dGhlIGZpcnN0LW9yZGVyIFRheWxvciBzZXJpZXMgYXBwcm94aW1hdGlvbgotICAgICAgICAgKiBp
cyBpbiBvdXIgZmF2b3IsIHNvIHdlIGp1c3Qgcm91bmQgdXAgdGhlIGNvbnN0YW50IGVub3VnaAot
ICAgICAgICAgKiB0byBjb21wZW5zYXRlIGZvciBhbnkgZXJyb3IgaW4gdGhlIG11bHRpcGxpY2F0
aW9uIG9mCi0gICAgICAgICAqIChpIC0gQmlhcykgYnkgMC4zMDEwMjk5OTU2NjM5ODE7IHNpbmNl
IHxpIC0gQmlhc3wgPD0gMTA3NywKLSAgICAgICAgICogYW5kIDEwNzcgKiAwLjMwMTAzICogMl4t
NTIgfj1+IDcuMmUtMTQsCi0gICAgICAgICAqIGFkZGluZyAxZS0xMyB0byB0aGUgY29uc3RhbnQg
dGVybSBtb3JlIHRoYW4gc3VmZmljZXMuCi0gICAgICAgICAqIEhlbmNlIHdlIGFkanVzdCB0aGUg
Y29uc3RhbnQgdGVybSB0byAwLjE3NjA5MTI1OTA1NTguCi0gICAgICAgICAqIChXZSBjb3VsZCBn
ZXQgYSBtb3JlIGFjY3VyYXRlIGsgYnkgaW52b2tpbmcgbG9nMTAsCi0gICAgICAgICAqICBidXQg
dGhpcyBpcyBwcm9iYWJseSBub3Qgd29ydGh3aGlsZS4pCi0gICAgICAgICAqLwotCi0gICAgICAg
IGkgLT0gQmlhczsKLSAgICAgICAgZGVub3JtID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgICAv
KiBkIGlzIGRlbm9ybWFsaXplZCAqLwotCi0gICAgICAgIGkgPSBiYml0cyArIGJlICsgKEJpYXMg
KyAoUCAtIDEpIC0gMSk7Ci0gICAgICAgIHggPSAoaSA+IDMyKSA/ICh3b3JkMCgmdSkgPDwgKDY0
IC0gaSkpIHwgKHdvcmQxKCZ1KSA+PiAoaSAtIDMyKSkKLSAgICAgICAgICAgICAgICA6IHdvcmQx
KCZ1KSA8PCAoMzIgLSBpKTsKLSAgICAgICAgZHZhbCgmZDIpID0geDsKLSAgICAgICAgd29yZDAo
JmQyKSAtPSAzMSAqIEV4cF9tc2sxOyAvKiBhZGp1c3QgZXhwb25lbnQgKi8KLSAgICAgICAgaSAt
PSAoQmlhcyArIChQIC0gMSkgLSAxKSArIDE7Ci0gICAgICAgIGRlbm9ybSA9IDE7Ci0gICAgfQot
ICAgIGRzID0gKGR2YWwoJmQyKSAtIDEuNSkgKiAwLjI4OTUyOTY1NDYwMjE2OCArIDAuMTc2MDkx
MjU5MDU1OCArIChpICogMC4zMDEwMjk5OTU2NjM5ODEpOwotICAgIGsgPSAoaW50KWRzOwotICAg
IGlmIChkcyA8IDAuICYmIGRzICE9IGspCi0gICAgICAgIGstLTsgICAgLyogd2FudCBrID0gZmxv
b3IoZHMpICovCi0gICAga19jaGVjayA9IDE7Ci0gICAgaWYgKGsgPj0gMCAmJiBrIDw9IFRlbl9w
bWF4KSB7Ci0gICAgICAgIGlmIChkdmFsKCZ1KSA8IHRlbnNba10pCi0gICAgICAgICAgICBrLS07
Ci0gICAgICAgIGtfY2hlY2sgPSAwOwotICAgIH0KLSAgICBqID0gYmJpdHMgLSBpIC0gMTsKLSAg
ICBpZiAoaiA+PSAwKSB7Ci0gICAgICAgIGIyID0gMDsKLSAgICAgICAgczIgPSBqOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGIyID0gLWo7Ci0gICAgICAgIHMyID0gMDsKLSAgICB9Ci0gICAgaWYg
KGsgPj0gMCkgewotICAgICAgICBiNSA9IDA7Ci0gICAgICAgIHM1ID0gazsKLSAgICAgICAgczIg
Kz0gazsKLSAgICB9IGVsc2UgewotICAgICAgICBiMiAtPSBrOwotICAgICAgICBiNSA9IC1rOwot
ICAgICAgICBzNSA9IDA7Ci0gICAgfQotCi0gICAgaWYgKHJvdW5kaW5nTm9uZSkgewotICAgICAg
ICBpbGltID0gaWxpbTEgPSAtMTsKLSAgICAgICAgaSA9IDE4OwotICAgICAgICBuZGlnaXRzID0g
MDsKLSAgICB9Ci0gICAgaWYgKHJvdW5kaW5nU2lnbmlmaWNhbnRGaWd1cmVzKSB7Ci0gICAgICAg
IGlmIChuZGlnaXRzIDw9IDApCi0gICAgICAgICAgICBuZGlnaXRzID0gMTsKLSAgICAgICAgaWxp
bSA9IGlsaW0xID0gaSA9IG5kaWdpdHM7Ci0gICAgfQotICAgIGlmIChyb3VuZGluZ0RlY2ltYWxQ
bGFjZXMpIHsKLSAgICAgICAgaSA9IG5kaWdpdHMgKyBrICsgMTsKLSAgICAgICAgaWxpbSA9IGk7
Ci0gICAgICAgIGlsaW0xID0gaSAtIDE7Ci0gICAgICAgIGlmIChpIDw9IDApCi0gICAgICAgICAg
ICBpID0gMTsKLSAgICB9Ci0KLSAgICBzID0gczAgPSByZXN1bHQ7Ci0KLSAgICBpZiAoaWxpbSA+
PSAwICYmIGlsaW0gPD0gUXVpY2tfbWF4KSB7Ci0gICAgICAgIC8qIFRyeSB0byBnZXQgYnkgd2l0
aCBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljLiAqLwotCi0gICAgICAgIGkgPSAwOwotICAgICAg
ICBkdmFsKCZkMikgPSBkdmFsKCZ1KTsKLSAgICAgICAgazAgPSBrOwotICAgICAgICBpbGltMCA9
IGlsaW07Ci0gICAgICAgIGllcHMgPSAyOyAvKiBjb25zZXJ2YXRpdmUgKi8KLSAgICAgICAgaWYg
KGsgPiAwKSB7Ci0gICAgICAgICAgICBkcyA9IHRlbnNbayAmIDB4Zl07Ci0gICAgICAgICAgICBq
ID0gayA+PiA0OwotICAgICAgICAgICAgaWYgKGogJiBCbGV0Y2gpIHsKLSAgICAgICAgICAgICAg
ICAvKiBwcmV2ZW50IG92ZXJmbG93cyAqLwotICAgICAgICAgICAgICAgIGogJj0gQmxldGNoIC0g
MTsKLSAgICAgICAgICAgICAgICBkdmFsKCZ1KSAvPSBiaWd0ZW5zW25fYmlndGVucyAtIDFdOwot
ICAgICAgICAgICAgICAgIGllcHMrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAo
OyBqOyBqID4+PSAxLCBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoaiAmIDEpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWVwcysrOwotICAgICAgICAgICAgICAgICAgICBkcyAqPSBiaWd0ZW5z
W2ldOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGR2YWwo
JnUpIC89IGRzOwotICAgICAgICB9IGVsc2UgaWYgKChqMSA9IC1rKSkgewotICAgICAgICAgICAg
ZHZhbCgmdSkgKj0gdGVuc1tqMSAmIDB4Zl07Ci0gICAgICAgICAgICBmb3IgKGogPSBqMSA+PiA0
OyBqOyBqID4+PSAxLCBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoaiAmIDEpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWVwcysrOwotICAgICAgICAgICAgICAgICAgICBkdmFsKCZ1KSAqPSBi
aWd0ZW5zW2ldOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBpZiAoa19jaGVjayAmJiBkdmFsKCZ1KSA8IDEuICYmIGlsaW0gPiAwKSB7Ci0gICAg
ICAgICAgICBpZiAoaWxpbTEgPD0gMCkKLSAgICAgICAgICAgICAgICBnb3RvIGZhc3RGYWlsZWQ7
Ci0gICAgICAgICAgICBpbGltID0gaWxpbTE7Ci0gICAgICAgICAgICBrLS07Ci0gICAgICAgICAg
ICBkdmFsKCZ1KSAqPSAxMC47Ci0gICAgICAgICAgICBpZXBzKys7Ci0gICAgICAgIH0KLSAgICAg
ICAgZHZhbCgmZXBzKSA9IChpZXBzICogZHZhbCgmdSkpICsgNy47Ci0gICAgICAgIHdvcmQwKCZl
cHMpIC09IChQIC0gMSkgKiBFeHBfbXNrMTsKLSAgICAgICAgaWYgKCFpbGltKSB7Ci0gICAgICAg
ICAgICBTLmNsZWFyKCk7Ci0gICAgICAgICAgICBtaGkuY2xlYXIoKTsKLSAgICAgICAgICAgIGR2
YWwoJnUpIC09IDUuOwotICAgICAgICAgICAgaWYgKGR2YWwoJnUpID4gZHZhbCgmZXBzKSkKLSAg
ICAgICAgICAgICAgICBnb3RvIG9uZURpZ2l0OwotICAgICAgICAgICAgaWYgKGR2YWwoJnUpIDwg
LWR2YWwoJmVwcykpCi0gICAgICAgICAgICAgICAgZ290byBub0RpZ2l0czsKLSAgICAgICAgICAg
IGdvdG8gZmFzdEZhaWxlZDsKLSAgICAgICAgfQotICAgICAgICBpZiAobGVmdHJpZ2h0KSB7Ci0g
ICAgICAgICAgICAvKiBVc2UgU3RlZWxlICYgV2hpdGUgbWV0aG9kIG9mIG9ubHkKLSAgICAgICAg
ICAgICAqIGdlbmVyYXRpbmcgZGlnaXRzIG5lZWRlZC4KLSAgICAgICAgICAgICAqLwotICAgICAg
ICAgICAgZHZhbCgmZXBzKSA9ICgwLjUgLyB0ZW5zW2lsaW0gLSAxXSkgLSBkdmFsKCZlcHMpOwot
ICAgICAgICAgICAgZm9yIChpID0gMDs7KSB7Ci0gICAgICAgICAgICAgICAgTCA9IChsb25nIGlu
dClkdmFsKCZ1KTsKLSAgICAgICAgICAgICAgICBkdmFsKCZ1KSAtPSBMOwotICAgICAgICAgICAg
ICAgICpzKysgPSAnMCcgKyAoaW50KUw7Ci0gICAgICAgICAgICAgICAgaWYgKGR2YWwoJnUpIDwg
ZHZhbCgmZXBzKSkKLSAgICAgICAgICAgICAgICAgICAgZ290byByZXQ7Ci0gICAgICAgICAgICAg
ICAgaWYgKDEuIC0gZHZhbCgmdSkgPCBkdmFsKCZlcHMpKQotICAgICAgICAgICAgICAgICAgICBn
b3RvIGJ1bXBVcDsKLSAgICAgICAgICAgICAgICBpZiAoKytpID49IGlsaW0pCi0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGR2YWwoJmVwcykgKj0gMTAuOwotICAg
ICAgICAgICAgICAgIGR2YWwoJnUpICo9IDEwLjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIC8qIEdlbmVyYXRlIGlsaW0gZGlnaXRzLCB0aGVuIGZpeCB0aGVt
IHVwLiAqLwotICAgICAgICAgICAgZHZhbCgmZXBzKSAqPSB0ZW5zW2lsaW0gLSAxXTsKLSAgICAg
ICAgICAgIGZvciAoaSA9IDE7OyBpKyssIGR2YWwoJnUpICo9IDEwLikgewotICAgICAgICAgICAg
ICAgIEwgPSAoaW50MzJfdCkoZHZhbCgmdSkpOwotICAgICAgICAgICAgICAgIGlmICghKGR2YWwo
JnUpIC09IEwpKQotICAgICAgICAgICAgICAgICAgICBpbGltID0gaTsKLSAgICAgICAgICAgICAg
ICAqcysrID0gJzAnICsgKGludClMOwotICAgICAgICAgICAgICAgIGlmIChpID09IGlsaW0pIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGR2YWwoJnUpID4gMC41ICsgZHZhbCgmZXBzKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYnVtcFVwOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoZHZhbCgmdSkgPCAwLjUgLSBkdmFsKCZlcHMpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB3aGlsZSAoKi0tcyA9PSAnMCcpIHsgfQotICAgICAgICAgICAgICAgICAgICAgICAgcysrOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZ290byByZXQ7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci1mYXN0RmFpbGVkOgotICAgICAgICBzID0gczA7Ci0gICAgICAgIGR2
YWwoJnUpID0gZHZhbCgmZDIpOwotICAgICAgICBrID0gazA7Ci0gICAgICAgIGlsaW0gPSBpbGlt
MDsKLSAgICB9Ci0KLSAgICAvKiBEbyB3ZSBoYXZlIGEgInNtYWxsIiBpbnRlZ2VyPyAqLwotCi0g
ICAgaWYgKGJlID49IDAgJiYgayA8PSBJbnRfbWF4KSB7Ci0gICAgICAgIC8qIFllcy4gKi8KLSAg
ICAgICAgZHMgPSB0ZW5zW2tdOwotICAgICAgICBpZiAobmRpZ2l0cyA8IDAgJiYgaWxpbSA8PSAw
KSB7Ci0gICAgICAgICAgICBTLmNsZWFyKCk7Ci0gICAgICAgICAgICBtaGkuY2xlYXIoKTsKLSAg
ICAgICAgICAgIGlmIChpbGltIDwgMCB8fCBkdmFsKCZ1KSA8PSA1ICogZHMpCi0gICAgICAgICAg
ICAgICAgZ290byBub0RpZ2l0czsKLSAgICAgICAgICAgIGdvdG8gb25lRGlnaXQ7Ci0gICAgICAg
IH0KLSAgICAgICAgZm9yIChpID0gMTs7IGkrKywgZHZhbCgmdSkgKj0gMTAuKSB7Ci0gICAgICAg
ICAgICBMID0gKGludDMyX3QpKGR2YWwoJnUpIC8gZHMpOwotICAgICAgICAgICAgZHZhbCgmdSkg
LT0gTCAqIGRzOwotICAgICAgICAgICAgKnMrKyA9ICcwJyArIChpbnQpTDsKLSAgICAgICAgICAg
IGlmICghZHZhbCgmdSkpIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGlmIChpID09IGlsaW0pIHsKLSAgICAgICAgICAgICAgICBkdmFsKCZ1KSAr
PSBkdmFsKCZ1KTsKLSAgICAgICAgICAgICAgICBpZiAoZHZhbCgmdSkgPiBkcyB8fCAoZHZhbCgm
dSkgPT0gZHMgJiYgKEwgJiAxKSkpIHsKLWJ1bXBVcDoKLSAgICAgICAgICAgICAgICAgICAgd2hp
bGUgKCotLXMgPT0gJzknKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPT0gczApIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBrKys7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKnMgPSAnMCc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICsrKnMrKzsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgZ290byByZXQ7Ci0gICAgfQotCi0gICAgbTIgPSBiMjsKLSAgICBtNSA9
IGI1OwotICAgIG1oaS5jbGVhcigpOwotICAgIG1sby5jbGVhcigpOwotICAgIGlmIChsZWZ0cmln
aHQpIHsKLSAgICAgICAgaSA9IGRlbm9ybSA/IGJlICsgKEJpYXMgKyAoUCAtIDEpIC0gMSArIDEp
IDogMSArIFAgLSBiYml0czsKLSAgICAgICAgYjIgKz0gaTsKLSAgICAgICAgczIgKz0gaTsKLSAg
ICAgICAgaTJiKG1oaSwgMSk7Ci0gICAgfQotICAgIGlmIChtMiA+IDAgJiYgczIgPiAwKSB7Ci0g
ICAgICAgIGkgPSBtMiA8IHMyID8gbTIgOiBzMjsKLSAgICAgICAgYjIgLT0gaTsKLSAgICAgICAg
bTIgLT0gaTsKLSAgICAgICAgczIgLT0gaTsKLSAgICB9Ci0gICAgaWYgKGI1ID4gMCkgewotICAg
ICAgICBpZiAobGVmdHJpZ2h0KSB7Ci0gICAgICAgICAgICBpZiAobTUgPiAwKSB7Ci0gICAgICAg
ICAgICAgICAgcG93NW11bHQobWhpLCBtNSk7Ci0gICAgICAgICAgICAgICAgbXVsdChiLCBtaGkp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKChqID0gYjUgLSBtNSkpCi0gICAgICAg
ICAgICAgICAgcG93NW11bHQoYiwgaik7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcG93
NW11bHQoYiwgYjUpOwotICAgIH0KLSAgICBpMmIoUywgMSk7Ci0gICAgaWYgKHM1ID4gMCkKLSAg
ICAgICAgcG93NW11bHQoUywgczUpOwotCi0gICAgLyogQ2hlY2sgZm9yIHNwZWNpYWwgY2FzZSB0
aGF0IGQgaXMgYSBub3JtYWxpemVkIHBvd2VyIG9mIDIuICovCi0KLSAgICBzcGVjX2Nhc2UgPSAw
OwotICAgIGlmICgocm91bmRpbmdOb25lIHx8IGxlZnRyaWdodCkgJiYgKCF3b3JkMSgmdSkgJiYg
ISh3b3JkMCgmdSkgJiBCbmRyeV9tYXNrKSAmJiB3b3JkMCgmdSkgJiAoRXhwX21hc2sgJiB+RXhw
X21zazEpKSkgewotICAgICAgICAvKiBUaGUgc3BlY2lhbCBjYXNlICovCi0gICAgICAgIGIyICs9
IExvZzJQOwotICAgICAgICBzMiArPSBMb2cyUDsKLSAgICAgICAgc3BlY19jYXNlID0gMTsKLSAg
ICB9Ci0KLSAgICAvKiBBcnJhbmdlIGZvciBjb252ZW5pZW50IGNvbXB1dGF0aW9uIG9mIHF1b3Rp
ZW50czoKLSAgICAgKiBzaGlmdCBsZWZ0IGlmIG5lY2Vzc2FyeSBzbyBkaXZpc29yIGhhcyA0IGxl
YWRpbmcgMCBiaXRzLgotICAgICAqCi0gICAgICogUGVyaGFwcyB3ZSBzaG91bGQganVzdCBjb21w
dXRlIGxlYWRpbmcgMjggYml0cyBvZiBTIG9uY2UKLSAgICAgKiBhbmQgZm9yIGFsbCBhbmQgcGFz
cyB0aGVtIGFuZCBhIHNoaWZ0IHRvIHF1b3JlbSwgc28gaXQKLSAgICAgKiBjYW4gZG8gc2hpZnRz
IGFuZCBvcnMgdG8gY29tcHV0ZSB0aGUgbnVtZXJhdG9yIGZvciBxLgotICAgICAqLwotICAgIGlm
ICgoaSA9ICgoczUgPyAzMiAtIGhpMGJpdHMoUy53b3JkcygpW1Muc2l6ZSgpIC0gMV0pIDogMSkg
KyBzMikgJiAweDFmKSkKLSAgICAgICAgaSA9IDMyIC0gaTsKLSAgICBpZiAoaSA+IDQpIHsKLSAg
ICAgICAgaSAtPSA0OwotICAgICAgICBiMiArPSBpOwotICAgICAgICBtMiArPSBpOwotICAgICAg
ICBzMiArPSBpOwotICAgIH0gZWxzZSBpZiAoaSA8IDQpIHsKLSAgICAgICAgaSArPSAyODsKLSAg
ICAgICAgYjIgKz0gaTsKLSAgICAgICAgbTIgKz0gaTsKLSAgICAgICAgczIgKz0gaTsKLSAgICB9
Ci0gICAgaWYgKGIyID4gMCkKLSAgICAgICAgbHNoaWZ0KGIsIGIyKTsKLSAgICBpZiAoczIgPiAw
KQotICAgICAgICBsc2hpZnQoUywgczIpOwotICAgIGlmIChrX2NoZWNrKSB7Ci0gICAgICAgIGlm
IChjbXAoYiwgUykgPCAwKSB7Ci0gICAgICAgICAgICBrLS07Ci0gICAgICAgICAgICBtdWx0YWRk
KGIsIDEwLCAwKTsgICAgLyogd2UgYm90Y2hlZCB0aGUgayBlc3RpbWF0ZSAqLwotICAgICAgICAg
ICAgaWYgKGxlZnRyaWdodCkKLSAgICAgICAgICAgICAgICBtdWx0YWRkKG1oaSwgMTAsIDApOwot
ICAgICAgICAgICAgaWxpbSA9IGlsaW0xOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChpbGlt
IDw9IDAgJiYgcm91bmRpbmdEZWNpbWFsUGxhY2VzKSB7Ci0gICAgICAgIGlmIChpbGltIDwgMCkK
LSAgICAgICAgICAgIGdvdG8gbm9EaWdpdHM7Ci0gICAgICAgIG11bHRhZGQoUywgNSwgMCk7Ci0g
ICAgICAgIC8vIEZvciBJRUVFLTc1NCB1bmJpYXNlZCByb3VuZGluZyB0aGlzIGNoZWNrIHNob3Vs
ZCBiZSA8PSwgc3VjaCB0aGF0IDAuNSB3b3VsZCBmbHVzaCB0byB6ZXJvLgotICAgICAgICBpZiAo
Y21wKGIsIFMpIDwgMCkKLSAgICAgICAgICAgIGdvdG8gbm9EaWdpdHM7Ci0gICAgICAgIGdvdG8g
b25lRGlnaXQ7Ci0gICAgfQotICAgIGlmIChsZWZ0cmlnaHQpIHsKLSAgICAgICAgaWYgKG0yID4g
MCkKLSAgICAgICAgICAgIGxzaGlmdChtaGksIG0yKTsKLQotICAgICAgICAvKiBDb21wdXRlIG1s
byAtLSBjaGVjayBmb3Igc3BlY2lhbCBjYXNlCi0gICAgICAgICAqIHRoYXQgZCBpcyBhIG5vcm1h
bGl6ZWQgcG93ZXIgb2YgMi4KLSAgICAgICAgICovCi0KLSAgICAgICAgbWxvID0gbWhpOwotICAg
ICAgICBpZiAoc3BlY19jYXNlKQotICAgICAgICAgICAgbHNoaWZ0KG1oaSwgTG9nMlApOwotCi0g
ICAgICAgIGZvciAoaSA9IDE7O2krKykgewotICAgICAgICAgICAgZGlnID0gcXVvcmVtKGIsIFMp
ICsgJzAnOwotICAgICAgICAgICAgLyogRG8gd2UgeWV0IGhhdmUgdGhlIHNob3J0ZXN0IGRlY2lt
YWwgc3RyaW5nCi0gICAgICAgICAgICAgKiB0aGF0IHdpbGwgcm91bmQgdG8gZD8KLSAgICAgICAg
ICAgICAqLwotICAgICAgICAgICAgaiA9IGNtcChiLCBtbG8pOwotICAgICAgICAgICAgZGlmZihk
ZWx0YSwgUywgbWhpKTsKLSAgICAgICAgICAgIGoxID0gZGVsdGEuc2lnbiA/IDEgOiBjbXAoYiwg
ZGVsdGEpOwotI2lmZGVmIERUT0FfUk9VTkRfQklBU0VECi0gICAgICAgICAgICBpZiAoaiA8IDAg
fHwgIWopIHsKLSNlbHNlCi0gICAgICAgICAgICAvLyBGSVhNRTogRUNNQS0yNjIgc3BlY2lmaWVz
IHRoYXQgZXF1aWRpc3RhbnQgcmVzdWx0cyByb3VuZCBhd2F5IGZyb20KLSAgICAgICAgICAgIC8v
IHplcm8sIHdoaWNoIHByb2JhYmx5IG1lYW5zIHdlIHNob3VsZG4ndCBiZSBvbiB0aGUgdW5iaWFz
ZWQgY29kZSBwYXRoCi0gICAgICAgICAgICAvLyAodGhlICh3b3JkMSgmdSkgJiAxKSBjbGF1c2Ug
aXMgbG9va2luZyBoaWdobHkgc3VzcGljaW91cykuIEkgaGF2ZW4ndAotICAgICAgICAgICAgLy8g
eWV0IHVuZGVyc3Rvb2QgdGhpcyBjb2RlIHdlbGwgZW5vdWdoIHRvIG1ha2UgdGhlIGNhbGwsIGJ1
dCB3ZSBzaG91bGQKLSAgICAgICAgICAgIC8vIHByb2JhYmx5IGJlIGVuYWJsaW5nIERUT0FfUk9V
TkRfQklBU0VELiBJIHRoaW5rIHRoZSBpbnRlcmVzdGluZyBjb3JuZXIKLSAgICAgICAgICAgIC8v
IGNhc2UgdG8gdW5kZXJzdGFuZCBpcyBwcm9iYWJseSAiTWF0aC5wb3coMC41LCAyNCkudG9TdHJp
bmcoKSIuCi0gICAgICAgICAgICAvLyBJIGJlbGlldmUgdGhpcyB2YWx1ZSBpcyBpbnRlcmVzdGlu
ZyBiZWNhdXNlIEkgdGhpbmsgaXQgaXMgcHJlY2lzZWx5Ci0gICAgICAgICAgICAvLyByZXByZXNl
bnRhYmxlIGluIGJpbmFyeSBmbG9hdGluZyBwb2ludCwgYW5kIGl0cyBkZWNpbWFsIHJlcHJlc2Vu
dGF0aW9uCi0gICAgICAgICAgICAvLyBoYXMgYSBzaW5nbGUgZGlnaXQgdGhhdCBTdGVlbGUgJiBX
aGl0ZSByZWR1Y3Rpb24gY2FuIHJlbW92ZSwgd2l0aCB0aGUKLSAgICAgICAgICAgIC8vIHZhbHVl
IDUgKHRodXMgZXF1aWRpc3RhbnQgZnJvbSB0aGUgbmV4dCBudW1iZXJzIGFib3ZlIGFuZCBiZWxv
dykuCi0gICAgICAgICAgICAvLyBXZSBwcm9kdWNlIHRoZSBjb3JyZWN0IGFuc3dlciB1c2luZyBl
aXRoZXIgY29kZXBhdGgsIGFuZCBJIGRvbid0IGFzCi0gICAgICAgICAgICAvLyB5ZXQgdW5kZXJz
dGFuZCB3aHkuIDotKQotICAgICAgICAgICAgaWYgKCFqMSAmJiAhKHdvcmQxKCZ1KSAmIDEpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGRpZyA9PSAnOScpCi0gICAgICAgICAgICAgICAgICAgIGdv
dG8gcm91bmQ5dXA7Ci0gICAgICAgICAgICAgICAgaWYgKGogPiAwKQotICAgICAgICAgICAgICAg
ICAgICBkaWcrKzsKLSAgICAgICAgICAgICAgICAqcysrID0gZGlnOwotICAgICAgICAgICAgICAg
IGdvdG8gcmV0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGogPCAwIHx8ICghaiAm
JiAhKHdvcmQxKCZ1KSAmIDEpKSkgewotI2VuZGlmCi0gICAgICAgICAgICAgICAgaWYgKChiLndv
cmRzKClbMF0gfHwgYi5zaXplKCkgPiAxKSAmJiAoajEgPiAwKSkgewotICAgICAgICAgICAgICAg
ICAgICBsc2hpZnQoYiwgMSk7Ci0gICAgICAgICAgICAgICAgICAgIGoxID0gY21wKGIsIFMpOwot
ICAgICAgICAgICAgICAgICAgICAvLyBGb3IgSUVFRS03NTQgcm91bmQtdG8tZXZlbiwgdGhpcyBj
aGVjayBzaG91bGQgYmUgKGoxID4gMCB8fCAoIWoxICYmIChkaWcgJiAxKSkpLAotICAgICAgICAg
ICAgICAgICAgICAvLyBidXQgRUNNQS0yNjIgc3BlY2lmaWVzIHRoYXQgZXF1aWRpc3RhbnQgdmFs
dWVzIChlLmcuICguNSkudG9GaXhlZCgpKSBzaG91bGQKLSAgICAgICAgICAgICAgICAgICAgLy8g
YmUgcm91bmRlZCBhd2F5IGZyb20gemVyby4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGoxID49
IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaWcgPT0gJzknKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdvdG8gcm91bmQ5dXA7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBkaWcrKzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAqcysrID0gZGlnOwotICAgICAgICAgICAgICAgIGdvdG8gcmV0OwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKGoxID4gMCkgewotICAgICAgICAgICAgICAgIGlmIChk
aWcgPT0gJzknKSB7IC8qIHBvc3NpYmxlIGlmIGkgPT0gMSAqLwotcm91bmQ5dXA6Ci0gICAgICAg
ICAgICAgICAgICAgICpzKysgPSAnOSc7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gcm91bmRv
ZmY7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICpzKysgPSBkaWcgKyAxOwot
ICAgICAgICAgICAgICAgIGdvdG8gcmV0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKnMr
KyA9IGRpZzsKLSAgICAgICAgICAgIGlmIChpID09IGlsaW0pCi0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBtdWx0YWRkKGIsIDEwLCAwKTsKLSAgICAgICAgICAgIG11bHRhZGQo
bWxvLCAxMCwgMCk7Ci0gICAgICAgICAgICBtdWx0YWRkKG1oaSwgMTAsIDApOwotICAgICAgICB9
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChpID0gMTs7IGkrKykgewotICAgICAgICAgICAg
KnMrKyA9IGRpZyA9IHF1b3JlbShiLCBTKSArICcwJzsKLSAgICAgICAgICAgIGlmICghYi53b3Jk
cygpWzBdICYmIGIuc2l6ZSgpIDw9IDEpCi0gICAgICAgICAgICAgICAgZ290byByZXQ7Ci0gICAg
ICAgICAgICBpZiAoaSA+PSBpbGltKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgbXVsdGFkZChiLCAxMCwgMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBSb3VuZCBv
ZmYgbGFzdCBkaWdpdCAqLwotCi0gICAgbHNoaWZ0KGIsIDEpOwotICAgIGogPSBjbXAoYiwgUyk7
Ci0gICAgLy8gRm9yIElFRUUtNzU0IHJvdW5kLXRvLWV2ZW4sIHRoaXMgY2hlY2sgc2hvdWxkIGJl
IChqID4gMCB8fCAoIWogJiYgKGRpZyAmIDEpKSksCi0gICAgLy8gYnV0IEVDTUEtMjYyIHNwZWNp
ZmllcyB0aGF0IGVxdWlkaXN0YW50IHZhbHVlcyAoZS5nLiAoLjUpLnRvRml4ZWQoKSkgc2hvdWxk
Ci0gICAgLy8gYmUgcm91bmRlZCBhd2F5IGZyb20gemVyby4KLSAgICBpZiAoaiA+PSAwKSB7Ci1y
b3VuZG9mZjoKLSAgICAgICAgd2hpbGUgKCotLXMgPT0gJzknKQotICAgICAgICAgICAgaWYgKHMg
PT0gczApIHsKLSAgICAgICAgICAgICAgICBrKys7Ci0gICAgICAgICAgICAgICAgKnMrKyA9ICcx
JzsKLSAgICAgICAgICAgICAgICBnb3RvIHJldDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgKysq
cysrOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHdoaWxlICgqLS1zID09ICcwJykgeyB9Ci0gICAg
ICAgIHMrKzsKLSAgICB9Ci0gICAgZ290byByZXQ7Ci1ub0RpZ2l0czoKLSAgICBleHBvbmVudE91
dCA9IDA7Ci0gICAgcHJlY2lzaW9uT3V0ID0gMTsKLSAgICByZXN1bHRbMF0gPSAnMCc7Ci0gICAg
cmVzdWx0WzFdID0gJ1wwJzsKLSAgICByZXR1cm47Ci1vbmVEaWdpdDoKLSAgICAqcysrID0gJzEn
OwotICAgIGsrKzsKLSAgICBnb3RvIHJldDsKLXJldDoKLSAgICBBU1NFUlQocyA+IHJlc3VsdCk7
Ci0gICAgKnMgPSAwOwotICAgIGV4cG9uZW50T3V0ID0gazsKLSAgICBwcmVjaXNpb25PdXQgPSBz
IC0gcmVzdWx0OwotfQotCi12b2lkIGR0b2EoRHRvYUJ1ZmZlciByZXN1bHQsIGRvdWJsZSBkZCwg
Ym9vbCYgc2lnbiwgaW50JiBleHBvbmVudCwgdW5zaWduZWQmIHByZWNpc2lvbikKLXsKLSAgICAv
LyBmbGFncyBhcmUgcm91bmRpbmdOb25lLCBsZWZ0cmlnaHQuCi0gICAgZHRvYTx0cnVlLCBmYWxz
ZSwgZmFsc2UsIHRydWU+KHJlc3VsdCwgZGQsIDAsIHNpZ24sIGV4cG9uZW50LCBwcmVjaXNpb24p
OwotfQotCi12b2lkIGR0b2FSb3VuZFNGKER0b2FCdWZmZXIgcmVzdWx0LCBkb3VibGUgZGQsIGlu
dCBuZGlnaXRzLCBib29sJiBzaWduLCBpbnQmIGV4cG9uZW50LCB1bnNpZ25lZCYgcHJlY2lzaW9u
KQotewotICAgIC8vIGZsYWcgaXMgcm91bmRpbmdTaWduaWZpY2FudEZpZ3VyZXMuCi0gICAgZHRv
YTxmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlPihyZXN1bHQsIGRkLCBuZGlnaXRzLCBzaWduLCBl
eHBvbmVudCwgcHJlY2lzaW9uKTsKLX0KLQotdm9pZCBkdG9hUm91bmREUChEdG9hQnVmZmVyIHJl
c3VsdCwgZG91YmxlIGRkLCBpbnQgbmRpZ2l0cywgYm9vbCYgc2lnbiwgaW50JiBleHBvbmVudCwg
dW5zaWduZWQmIHByZWNpc2lvbikKLXsKLSAgICAvLyBmbGFnIGlzIHJvdW5kaW5nRGVjaW1hbFBs
YWNlcy4KLSAgICBkdG9hPGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2U+KHJlc3VsdCwgZGQsIG5k
aWdpdHMsIHNpZ24sIGV4cG9uZW50LCBwcmVjaXNpb24pOwotfQotCi1zdGF0aWMgQUxXQVlTX0lO
TElORSB2b2lkIGNvcHlBc2NpaVRvVVRGMTYoVUNoYXIqIG5leHQsIGNvbnN0IGNoYXIqIHNyYywg
dW5zaWduZWQgc2l6ZSkKK2NvbnN0IGNoYXIgKm51bWJlclRvU3RyaW5nKGRvdWJsZSBkLCBOdW1i
ZXJUb1N0cmluZ0J1ZmZlciBidWZmZXIpCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNpemU7ICsraSkKLSAgICAgICAgKm5leHQrKyA9ICpzcmMrKzsKLX0KLQotdW5zaWduZWQgbnVt
YmVyVG9TdHJpbmcoZG91YmxlIGQsIE51bWJlclRvU3RyaW5nQnVmZmVyIGJ1ZmZlcikKLXsKLSAg
ICAvLyBIYW5kbGUgTmFOIGFuZCBJbmZpbml0eS4KLSAgICBpZiAoIWlzZmluaXRlKGQpKSB7Ci0g
ICAgICAgIGlmIChpc25hbihkKSkgewotICAgICAgICAgICAgY29weUFzY2lpVG9VVEYxNihidWZm
ZXIsICJOYU4iLCAzKTsKLSAgICAgICAgICAgIHJldHVybiAzOwotICAgICAgICB9Ci0gICAgICAg
IGlmIChkID4gMCkgewotICAgICAgICAgICAgY29weUFzY2lpVG9VVEYxNihidWZmZXIsICJJbmZp
bml0eSIsIDgpOwotICAgICAgICAgICAgcmV0dXJuIDg7Ci0gICAgICAgIH0KLSAgICAgICAgY29w
eUFzY2lpVG9VVEYxNihidWZmZXIsICItSW5maW5pdHkiLCA5KTsKLSAgICAgICAgcmV0dXJuIDk7
Ci0gICAgfQotCi0gICAgLy8gQ29udmVydCB0byBkZWNpbWFsIHdpdGggcm91bmRpbmcuCi0gICAg
RGVjaW1hbE51bWJlciBudW1iZXIoZCk7Ci0gICAgcmV0dXJuIG51bWJlci5leHBvbmVudCgpID49
IC02ICYmIG51bWJlci5leHBvbmVudCgpIDwgMjEKLSAgICAgICAgPyBudW1iZXIudG9TdHJpbmdE
ZWNpbWFsKGJ1ZmZlciwgTnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgpCi0gICAgICAgIDogbnVt
YmVyLnRvU3RyaW5nRXhwb25lbnRpYWwoYnVmZmVyLCBOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0
aCk7CisgICAgZG91YmxlX2NvbnZlcnNpb246OlN0cmluZ0J1aWxkZXIgYnVpbGRlcihidWZmZXIs
IE51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoKTsKKyAgICBjb25zdCBkb3VibGVfY29udmVyc2lv
bjo6RG91YmxlVG9TdHJpbmdDb252ZXJ0ZXImIGNvbnZlcnRlciA9IGRvdWJsZV9jb252ZXJzaW9u
OjpEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6RWNtYVNjcmlwdENvbnZlcnRlcigpOworICAgIGNv
bnZlcnRlci5Ub1Nob3J0ZXN0KGQsICZidWlsZGVyKTsKKyAgICByZXR1cm4gYnVpbGRlci5GaW5h
bGl6ZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvZHRvYS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hLmgK
aW5kZXggMzkyNGExY2M0MDVkYjI5M2IwMWY2ZDRiZGFlNjU3NTk1MjU4MTcyYy4uNzBlZWMxMmU0
MzU1YzNiN2I0NTBjZTc5MjkyMWI4MmZhNWUyZWJhYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9kdG9hLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9h
LmgKQEAgLTIxLDcgKzIxLDcgQEAKICNpZm5kZWYgV1RGX2R0b2FfaAogI2RlZmluZSBXVEZfZHRv
YV9oCiAKLSNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CisjaW5jbHVkZSA8d3RmL2R0
b2EvZG91YmxlLWNvbnZlcnNpb24uaD4KIAogbmFtZXNwYWNlIFdURiB7CiBjbGFzcyBNdXRleDsK
QEAgLTMyLDE2ICszMiwxMCBAQCBleHRlcm4gV1RGOjpNdXRleCogc19kdG9hUDVNdXRleDsKIC8v
IHNlOiAqc2Ugd2lsbCBoYXZlIHRoZSBsYXN0IGNvbnN1bWVkIGNoYXJhY3RlciBwb3NpdGlvbiAr
IDEuCiBkb3VibGUgc3RydG9kKGNvbnN0IGNoYXIqIHMwMCwgY2hhcioqIHNlKTsKIAotdHlwZWRl
ZiBjaGFyIER0b2FCdWZmZXJbODBdOwotCi12b2lkIGR0b2EoRHRvYUJ1ZmZlciByZXN1bHQsIGRv
dWJsZSBkZCwgYm9vbCYgc2lnbiwgaW50JiBleHBvbmVudCwgdW5zaWduZWQmIHByZWNpc2lvbik7
Ci12b2lkIGR0b2FSb3VuZFNGKER0b2FCdWZmZXIgcmVzdWx0LCBkb3VibGUgZGQsIGludCBuZGln
aXRzLCBib29sJiBzaWduLCBpbnQmIGV4cG9uZW50LCB1bnNpZ25lZCYgcHJlY2lzaW9uKTsKLXZv
aWQgZHRvYVJvdW5kRFAoRHRvYUJ1ZmZlciByZXN1bHQsIGRvdWJsZSBkZCwgaW50IG5kaWdpdHMs
IGJvb2wmIHNpZ24sIGludCYgZXhwb25lbnQsIHVuc2lnbmVkJiBwcmVjaXNpb24pOwotCiAvLyBT
aXplID0gODAgZm9yIHNpemVvZihEdG9hQnVmZmVyKSArIHNvbWUgc2lnbiBiaXRzLCBkZWNpbWFs
IHBvaW50LCAnZScsIGV4cG9uZW50IGRpZ2l0cy4KIGNvbnN0IHVuc2lnbmVkIE51bWJlclRvU3Ry
aW5nQnVmZmVyTGVuZ3RoID0gOTY7Ci10eXBlZGVmIFVDaGFyIE51bWJlclRvU3RyaW5nQnVmZmVy
W051bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoXTsKLXVuc2lnbmVkIG51bWJlclRvU3RyaW5nKGRv
dWJsZSwgTnVtYmVyVG9TdHJpbmdCdWZmZXIpOwordHlwZWRlZiBjaGFyIE51bWJlclRvU3RyaW5n
QnVmZmVyW051bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoXTsKK2NvbnN0IGNoYXIgKm51bWJlclRv
U3RyaW5nKGRvdWJsZSwgTnVtYmVyVG9TdHJpbmdCdWZmZXIpOwogCiB9IC8vIG5hbWVzcGFjZSBX
VEYKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL0NPUFlJTkcg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvQ09QWUlORwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MzM3
MThhOWVmOWRhZTRjYjRhZmE1NmU0OTAyMTE3NjBkOGE5NDlmCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL0NPUFlJTkcKQEAgLTAsMCArMSwyNiBAQAor
Q29weXJpZ2h0IDIwMDYtMjAxMSwgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorbWV0OgorCisgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICAgICAgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKK0EgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCitPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK1NQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKK0xJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCitUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
K09GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2Ev
TElDRU5TRSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9MSUNFTlNFCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjkzMzcxOGE5ZWY5ZGFlNGNiNGFmYTU2ZTQ5MDIxMTc2MGQ4YTk0OWYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvTElDRU5TRQpAQCAtMCwwICsx
LDI2IEBACitDb3B5cmlnaHQgMjAwNi0yMDExLCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCittZXQ6CisKKyAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICAgICAgZGlzY2xhaW1lciBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgICAgICB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAgICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKK09XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCitEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKK1RIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvZHRvYS9SRUFETUUgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvUkVBRE1FCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmYxODZiNDIwZjQyYmMxNGM3ZDU3NjVlYTQzZjZiMjhkM2MyOWI5MjEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvUkVBRE1FCkBAIC0w
LDAgKzEsMTEgQEAKK2h0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9kb3VibGUtY29udmVyc2lvbgor
CitUaGlzIHByb2plY3QgKGRvdWJsZS1jb252ZXJzaW9uKSBwcm92aWRlcyBiaW5hcnktZGVjaW1h
bCBhbmQgZGVjaW1hbC1iaW5hcnkKK3JvdXRpbmVzIGZvciBJRUVFIGRvdWJsZXMuCisKK1RoZSBs
aWJyYXJ5IGNvbnNpc3RzIG9mIGVmZmljaWVudCBjb252ZXJzaW9uIHJvdXRpbmVzIHRoYXQgaGF2
ZSBiZWVuIGV4dHJhY3RlZAorZnJvbSB0aGUgVjggSmF2YVNjcmlwdCBlbmdpbmUuIFRoZSBjb2Rl
IGhhcyBiZWVuIHJlZmFjdG9yZWQgYW5kIGltcHJvdmVkIHNvIHRoYXQKK2l0IGNhbiBiZSB1c2Vk
IG1vcmUgZWFzaWx5IGluIG90aGVyIHByb2plY3RzLgorCitUaGVyZSBpcyBleHRlbnNpdmUgZG9j
dW1lbnRhdGlvbiBpbiBzcmMvZG91YmxlLWNvbnZlcnNpb24uaC4gT3RoZXIgZXhhbXBsZXMgY2Fu
CitiZSBmb3VuZCBpbiB0ZXN0L2NjdGVzdC90ZXN0LWNvbnZlcnNpb25zLmNjLgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS1kdG9hLmNjIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS1kdG9hLmNjCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU0OWIw
YTBkYjQ1ZmVhZjllZDA4NmE3NjlkODQxOTE5Y2IzZWYyMzMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvYmlnbnVtLWR0b2EuY2MKQEAgLTAsMCArMSw2
NTMgQEAKKy8vIENvcHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8v
CisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8v
ICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8g
ICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8g
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
Ky8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2luY2x1ZGUgPG1hdGguaD4KKwor
I2luY2x1ZGUgImJpZ251bS1kdG9hLmgiCisKKyNpbmNsdWRlICJiaWdudW0uaCIKKyNpbmNsdWRl
ICJkb3VibGUuaCIKKworbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKKyAgICAKKyAgICBz
dGF0aWMgaW50IE5vcm1hbGl6ZWRFeHBvbmVudCh1aW50NjRfdCBzaWduaWZpY2FuZCwgaW50IGV4
cG9uZW50KSB7CisgICAgICAgIEFTU0VSVChzaWduaWZpY2FuZCAhPSAwKTsKKyAgICAgICAgd2hp
bGUgKChzaWduaWZpY2FuZCAmIERvdWJsZTo6a0hpZGRlbkJpdCkgPT0gMCkgeworICAgICAgICAg
ICAgc2lnbmlmaWNhbmQgPSBzaWduaWZpY2FuZCA8PCAxOworICAgICAgICAgICAgZXhwb25lbnQg
PSBleHBvbmVudCAtIDE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGV4cG9uZW50OworICAg
IH0KKyAgICAKKyAgICAKKyAgICAvLyBGb3J3YXJkIGRlY2xhcmF0aW9uczoKKyAgICAvLyBSZXR1
cm5zIGFuIGVzdGltYXRpb24gb2YgayBzdWNoIHRoYXQgMTBeKGstMSkgPD0gdiA8IDEwXmsuCisg
ICAgc3RhdGljIGludCBFc3RpbWF0ZVBvd2VyKGludCBleHBvbmVudCk7CisgICAgLy8gQ29tcHV0
ZXMgdiAvIDEwXmVzdGltYXRlZF9wb3dlciBleGFjdGx5LCBhcyBhIHJhdGlvIG9mIHR3byBiaWdu
dW1zLCBudW1lcmF0b3IKKyAgICAvLyBhbmQgZGVub21pbmF0b3IuCisgICAgc3RhdGljIHZvaWQg
SW5pdGlhbFNjYWxlZFN0YXJ0VmFsdWVzKGRvdWJsZSB2LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgZXN0aW1hdGVkX3Bvd2VyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG5lZWRfYm91bmRhcnlfZGVsdGFzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIG51bWVyYXRvciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBkZW5vbWlu
YXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBk
ZWx0YV9taW51cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmln
bnVtKiBkZWx0YV9wbHVzKTsKKyAgICAvLyBNdWx0aXBsaWVzIG51bWVyYXRvci9kZW5vbWluYXRv
ciBzbyB0aGF0IGl0cyB2YWx1ZXMgbGllcyBpbiB0aGUgcmFuZ2UgMS0xMC4KKyAgICAvLyBSZXR1
cm5zIGRlY2ltYWxfcG9pbnQgcy50LgorICAgIC8vICB2ID0gbnVtZXJhdG9yJy9kZW5vbWluYXRv
cicgKiAxMF4oZGVjaW1hbF9wb2ludC0xKQorICAgIC8vICAgICB3aGVyZSBudW1lcmF0b3InIGFu
ZCBkZW5vbWluYXRvcicgYXJlIHRoZSB2YWx1ZXMgb2YgbnVtZXJhdG9yIGFuZAorICAgIC8vICAg
ICBkZW5vbWluYXRvciBhZnRlciB0aGUgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLgorICAgIHN0YXRp
YyB2b2lkIEZpeHVwTXVsdGlwbHkxMChpbnQgZXN0aW1hdGVkX3Bvd2VyLCBib29sIGlzX2V2ZW4s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogZGVjaW1hbF9wb2ludCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBudW1lcmF0b3IsIEJpZ251bSog
ZGVub21pbmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogZGVs
dGFfbWludXMsIEJpZ251bSogZGVsdGFfcGx1cyk7CisgICAgLy8gR2VuZXJhdGVzIGRpZ2l0cyBm
cm9tIHRoZSBsZWZ0IHRvIHRoZSByaWdodCBhbmQgc3RvcHMgd2hlbiB0aGUgZ2VuZXJhdGVkCisg
ICAgLy8gZGlnaXRzIHlpZWxkIHRoZSBzaG9ydGVzdCBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9m
IHYuCisgICAgc3RhdGljIHZvaWQgR2VuZXJhdGVTaG9ydGVzdERpZ2l0cyhCaWdudW0qIG51bWVy
YXRvciwgQmlnbnVtKiBkZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEJpZ251bSogZGVsdGFfbWludXMsIEJpZ251bSogZGVsdGFfcGx1cywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfZXZlbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXIsIGludCog
bGVuZ3RoKTsKKyAgICAvLyBHZW5lcmF0ZXMgJ3JlcXVlc3RlZF9kaWdpdHMnIGFmdGVyIHRoZSBk
ZWNpbWFsIHBvaW50LgorICAgIHN0YXRpYyB2b2lkIEJpZ251bVRvRml4ZWQoaW50IHJlcXVlc3Rl
ZF9kaWdpdHMsIGludCogZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEJpZ251bSogbnVtZXJhdG9yLCBCaWdudW0qIGRlbm9taW5hdG9yLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+KGJ1ZmZlciksIGludCogbGVuZ3RoKTsKKyAg
ICAvLyBHZW5lcmF0ZXMgJ2NvdW50JyBkaWdpdHMgb2YgbnVtZXJhdG9yL2Rlbm9taW5hdG9yLgor
ICAgIC8vIE9uY2UgJ2NvdW50JyBkaWdpdHMgaGF2ZSBiZWVuIHByb2R1Y2VkIHJvdW5kcyB0aGUg
cmVzdWx0IGRlcGVuZGluZyBvbiB0aGUKKyAgICAvLyByZW1haW5kZXIgKHJlbWFpbmRlcnMgb2Yg
ZXhhY3RseSAuNSByb3VuZCB1cHdhcmRzKS4gTWlnaHQgdXBkYXRlIHRoZQorICAgIC8vIGRlY2lt
YWxfcG9pbnQgd2hlbiByb3VuZGluZyB1cCAoZm9yIGV4YW1wbGUgZm9yIDAuOTk5OSkuCisgICAg
c3RhdGljIHZvaWQgR2VuZXJhdGVDb3VudGVkRGlnaXRzKGludCBjb3VudCwgaW50KiBkZWNpbWFs
X3BvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIG51
bWVyYXRvciwgQmlnbnVtKiBkZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVmVjdG9yPGNoYXI+KGJ1ZmZlciksIGludCogbGVuZ3RoKTsKKyAgICAKKyAg
ICAKKyAgICB2b2lkIEJpZ251bUR0b2EoZG91YmxlIHYsIEJpZ251bUR0b2FNb2RlIG1vZGUsIGlu
dCByZXF1ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVm
ZmVyLCBpbnQqIGxlbmd0aCwgaW50KiBkZWNpbWFsX3BvaW50KSB7CisgICAgICAgIEFTU0VSVCh2
ID4gMCk7CisgICAgICAgIEFTU0VSVCghRG91YmxlKHYpLklzU3BlY2lhbCgpKTsKKyAgICAgICAg
dWludDY0X3Qgc2lnbmlmaWNhbmQgPSBEb3VibGUodikuU2lnbmlmaWNhbmQoKTsKKyAgICAgICAg
Ym9vbCBpc19ldmVuID0gKHNpZ25pZmljYW5kICYgMSkgPT0gMDsKKyAgICAgICAgaW50IGV4cG9u
ZW50ID0gRG91YmxlKHYpLkV4cG9uZW50KCk7CisgICAgICAgIGludCBub3JtYWxpemVkX2V4cG9u
ZW50ID0gTm9ybWFsaXplZEV4cG9uZW50KHNpZ25pZmljYW5kLCBleHBvbmVudCk7CisgICAgICAg
IC8vIGVzdGltYXRlZF9wb3dlciBtaWdodCBiZSB0b28gbG93IGJ5IDEuCisgICAgICAgIGludCBl
c3RpbWF0ZWRfcG93ZXIgPSBFc3RpbWF0ZVBvd2VyKG5vcm1hbGl6ZWRfZXhwb25lbnQpOworICAg
ICAgICAKKyAgICAgICAgLy8gU2hvcnRjdXQgZm9yIEZpeGVkLgorICAgICAgICAvLyBUaGUgcmVx
dWVzdGVkIGRpZ2l0cyBjb3JyZXNwb25kIHRvIHRoZSBkaWdpdHMgYWZ0ZXIgdGhlIHBvaW50LiBJ
ZiB0aGUKKyAgICAgICAgLy8gbnVtYmVyIGlzIG11Y2ggdG9vIHNtYWxsLCB0aGVuIHRoZXJlIGlz
IG5vIG5lZWQgaW4gdHJ5aW5nIHRvIGdldCBhbnkKKyAgICAgICAgLy8gZGlnaXRzLgorICAgICAg
ICBpZiAobW9kZSA9PSBCSUdOVU1fRFRPQV9GSVhFRCAmJiAtZXN0aW1hdGVkX3Bvd2VyIC0gMSA+
IHJlcXVlc3RlZF9kaWdpdHMpIHsKKyAgICAgICAgICAgIGJ1ZmZlclswXSA9ICdcMCc7CisgICAg
ICAgICAgICAqbGVuZ3RoID0gMDsKKyAgICAgICAgICAgIC8vIFNldCBkZWNpbWFsLXBvaW50IHRv
IC1yZXF1ZXN0ZWRfZGlnaXRzLiBUaGlzIGlzIHdoYXQgR2F5IGRvZXMuCisgICAgICAgICAgICAv
LyBOb3RlIHRoYXQgaXQgc2hvdWxkIG5vdCBoYXZlIGFueSBlZmZlY3QgYW55d2F5cyBzaW5jZSB0
aGUgc3RyaW5nIGlzCisgICAgICAgICAgICAvLyBlbXB0eS4KKyAgICAgICAgICAgICpkZWNpbWFs
X3BvaW50ID0gLXJlcXVlc3RlZF9kaWdpdHM7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIEJpZ251bSBudW1lcmF0b3I7CisgICAgICAgIEJpZ251bSBk
ZW5vbWluYXRvcjsKKyAgICAgICAgQmlnbnVtIGRlbHRhX21pbnVzOworICAgICAgICBCaWdudW0g
ZGVsdGFfcGx1czsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBiaWdudW0gY2FuIGdyb3cgbGFy
Z2UgZW5vdWdoLiBUaGUgc21hbGxlc3QgZG91YmxlIGVxdWFscworICAgICAgICAvLyA0ZS0zMjQu
IEluIHRoaXMgY2FzZSB0aGUgZGVub21pbmF0b3IgbmVlZHMgZmV3ZXIgdGhhbiAzMjQqNCBiaW5h
cnkgZGlnaXRzLgorICAgICAgICAvLyBUaGUgbWF4aW11bSBkb3VibGUgaXMgMS43OTc2OTMxMzQ4
NjIzMTU3ZTMwOCB3aGljaCBuZWVkcyBmZXdlciB0aGFuCisgICAgICAgIC8vIDMwOCo0IGJpbmFy
eSBkaWdpdHMuCisgICAgICAgIEFTU0VSVChCaWdudW06OmtNYXhTaWduaWZpY2FudEJpdHMgPj0g
MzI0KjQpOworICAgICAgICBib29sIG5lZWRfYm91bmRhcnlfZGVsdGFzID0gKG1vZGUgPT0gQklH
TlVNX0RUT0FfU0hPUlRFU1QpOworICAgICAgICBJbml0aWFsU2NhbGVkU3RhcnRWYWx1ZXModiwg
ZXN0aW1hdGVkX3Bvd2VyLCBuZWVkX2JvdW5kYXJ5X2RlbHRhcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZudW1lcmF0b3IsICZkZW5vbWluYXRvciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZkZWx0YV9taW51cywgJmRlbHRhX3BsdXMpOworICAgICAgICAv
LyBXZSBub3cgaGF2ZSB2ID0gKG51bWVyYXRvciAvIGRlbm9taW5hdG9yKSAqIDEwXmVzdGltYXRl
ZF9wb3dlci4KKyAgICAgICAgRml4dXBNdWx0aXBseTEwKGVzdGltYXRlZF9wb3dlciwgaXNfZXZl
biwgZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICZudW1lcmF0b3IsICZk
ZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICZkZWx0YV9taW51cywgJmRlbHRh
X3BsdXMpOworICAgICAgICAvLyBXZSBub3cgaGF2ZSB2ID0gKG51bWVyYXRvciAvIGRlbm9taW5h
dG9yKSAqIDEwXihkZWNpbWFsX3BvaW50LTEpLCBhbmQKKyAgICAgICAgLy8gIDEgPD0gKG51bWVy
YXRvciArIGRlbHRhX3BsdXMpIC8gZGVub21pbmF0b3IgPCAxMAorICAgICAgICBzd2l0Y2ggKG1v
ZGUpIHsKKyAgICAgICAgICAgIGNhc2UgQklHTlVNX0RUT0FfU0hPUlRFU1Q6CisgICAgICAgICAg
ICAgICAgR2VuZXJhdGVTaG9ydGVzdERpZ2l0cygmbnVtZXJhdG9yLCAmZGVub21pbmF0b3IsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGVsdGFfbWludXMsICZkZWx0
YV9wbHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfZXZlbiwg
YnVmZmVyLCBsZW5ndGgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBCSUdOVU1fRFRPQV9GSVhFRDoKKyAgICAgICAgICAgICAgICBCaWdudW1Ub0ZpeGVkKHJlcXVl
c3RlZF9kaWdpdHMsIGRlY2ltYWxfcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmbnVtZXJhdG9yLCAmZGVub21pbmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIEJJR05VTV9EVE9BX1BSRUNJU0lPTjoKKyAgICAgICAgICAgICAgICBHZW5lcmF0ZUNvdW50
ZWREaWdpdHMocmVxdWVzdGVkX2RpZ2l0cywgZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJm51bWVyYXRvciwgJmRlbm9taW5hdG9yLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGxlbmd0aCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICAgICAgYnVmZmVyWypsZW5ndGhdID0gJ1wwJzsK
KyAgICB9CisgICAgCisgICAgCisgICAgLy8gVGhlIHByb2NlZHVyZSBzdGFydHMgZ2VuZXJhdGlu
ZyBkaWdpdHMgZnJvbSB0aGUgbGVmdCB0byB0aGUgcmlnaHQgYW5kIHN0b3BzCisgICAgLy8gd2hl
biB0aGUgZ2VuZXJhdGVkIGRpZ2l0cyB5aWVsZCB0aGUgc2hvcnRlc3QgZGVjaW1hbCByZXByZXNl
bnRhdGlvbiBvZiB2LiBBCisgICAgLy8gZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiB2IGlzIGEg
bnVtYmVyIGx5aW5nIGNsb3NlciB0byB2IHRoYW4gdG8gYW55IG90aGVyCisgICAgLy8gZG91Ymxl
LCBzbyBpdCBjb252ZXJ0cyB0byB2IHdoZW4gcmVhZC4KKyAgICAvLworICAgIC8vIFRoaXMgaXMg
dHJ1ZSBpZiBkLCB0aGUgZGVjaW1hbCByZXByZXNlbnRhdGlvbiwgaXMgYmV0d2VlbiBtLSBhbmQg
bSssIHRoZQorICAgIC8vIHVwcGVyIGFuZCBsb3dlciBib3VuZGFyaWVzLiBkIG11c3QgYmUgc3Ry
aWN0bHkgYmV0d2VlbiB0aGVtIGlmICFpc19ldmVuLgorICAgIC8vICAgICAgICAgICBtLSA6PSAo
bnVtZXJhdG9yIC0gZGVsdGFfbWludXMpIC8gZGVub21pbmF0b3IKKyAgICAvLyAgICAgICAgICAg
bSsgOj0gKG51bWVyYXRvciArIGRlbHRhX3BsdXMpIC8gZGVub21pbmF0b3IKKyAgICAvLworICAg
IC8vIFByZWNvbmRpdGlvbjogMCA8PSAobnVtZXJhdG9yK2RlbHRhX3BsdXMpIC8gZGVub21pbmF0
b3IgPCAxMC4KKyAgICAvLyAgIElmIDEgPD0gKG51bWVyYXRvcitkZWx0YV9wbHVzKSAvIGRlbm9t
aW5hdG9yIDwgMTAgdGhlbiBubyBsZWFkaW5nIDAgZGlnaXQKKyAgICAvLyAgIHdpbGwgYmUgcHJv
ZHVjZWQuIFRoaXMgc2hvdWxkIGJlIHRoZSBzdGFuZGFyZCBwcmVjb25kaXRpb24uCisgICAgc3Rh
dGljIHZvaWQgR2VuZXJhdGVTaG9ydGVzdERpZ2l0cyhCaWdudW0qIG51bWVyYXRvciwgQmlnbnVt
KiBkZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJp
Z251bSogZGVsdGFfbWludXMsIEJpZ251bSogZGVsdGFfcGx1cywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfZXZlbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXIsIGludCogbGVuZ3RoKSB7Cisg
ICAgICAgIC8vIFNtYWxsIG9wdGltaXphdGlvbjogaWYgZGVsdGFfbWludXMgYW5kIGRlbHRhX3Bs
dXMgYXJlIHRoZSBzYW1lIGp1c3QgcmV1c2UKKyAgICAgICAgLy8gb25lIG9mIHRoZSB0d28gYmln
bnVtcy4KKyAgICAgICAgaWYgKEJpZ251bTo6RXF1YWwoKmRlbHRhX21pbnVzLCAqZGVsdGFfcGx1
cykpIHsKKyAgICAgICAgICAgIGRlbHRhX3BsdXMgPSBkZWx0YV9taW51czsKKyAgICAgICAgfQor
ICAgICAgICAqbGVuZ3RoID0gMDsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAg
IHVpbnQxNl90IGRpZ2l0OworICAgICAgICAgICAgZGlnaXQgPSBudW1lcmF0b3ItPkRpdmlkZU1v
ZHVsb0ludEJpZ251bSgqZGVub21pbmF0b3IpOworICAgICAgICAgICAgQVNTRVJUKGRpZ2l0IDw9
IDkpOyAgLy8gZGlnaXQgaXMgYSB1aW50MTZfdCBhbmQgdGhlcmVmb3JlIGFsd2F5cyBwb3NpdGl2
ZS4KKyAgICAgICAgICAgIC8vIGRpZ2l0ID0gbnVtZXJhdG9yIC8gZGVub21pbmF0b3IgKGludGVn
ZXIgZGl2aXNpb24pLgorICAgICAgICAgICAgLy8gbnVtZXJhdG9yID0gbnVtZXJhdG9yICUgZGVu
b21pbmF0b3IuCisgICAgICAgICAgICBidWZmZXJbKCpsZW5ndGgpKytdID0gZGlnaXQgKyAnMCc7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIENhbiB3ZSBzdG9wIGFscmVhZHk/CisgICAg
ICAgICAgICAvLyBJZiB0aGUgcmVtYWluZGVyIG9mIHRoZSBkaXZpc2lvbiBpcyBsZXNzIHRoYW4g
dGhlIGRpc3RhbmNlIHRvIHRoZSBsb3dlcgorICAgICAgICAgICAgLy8gYm91bmRhcnkgd2UgY2Fu
IHN0b3AuIEluIHRoaXMgY2FzZSB3ZSBzaW1wbHkgcm91bmQgZG93biAoZGlzY2FyZGluZyB0aGUK
KyAgICAgICAgICAgIC8vIHJlbWFpbmRlcikuCisgICAgICAgICAgICAvLyBTaW1pbGFybHkgd2Ug
dGVzdCBpZiB3ZSBjYW4gcm91bmQgdXAgKHVzaW5nIHRoZSB1cHBlciBib3VuZGFyeSkuCisgICAg
ICAgICAgICBib29sIGluX2RlbHRhX3Jvb21fbWludXM7CisgICAgICAgICAgICBib29sIGluX2Rl
bHRhX3Jvb21fcGx1czsKKyAgICAgICAgICAgIGlmIChpc19ldmVuKSB7CisgICAgICAgICAgICAg
ICAgaW5fZGVsdGFfcm9vbV9taW51cyA9IEJpZ251bTo6TGVzc0VxdWFsKCpudW1lcmF0b3IsICpk
ZWx0YV9taW51cyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGluX2Rl
bHRhX3Jvb21fbWludXMgPSBCaWdudW06Okxlc3MoKm51bWVyYXRvciwgKmRlbHRhX21pbnVzKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpc19ldmVuKSB7CisgICAgICAgICAgICAg
ICAgaW5fZGVsdGFfcm9vbV9wbHVzID0KKyAgICAgICAgICAgICAgICBCaWdudW06OlBsdXNDb21w
YXJlKCpudW1lcmF0b3IsICpkZWx0YV9wbHVzLCAqZGVub21pbmF0b3IpID49IDA7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGluX2RlbHRhX3Jvb21fcGx1cyA9CisgICAg
ICAgICAgICAgICAgQmlnbnVtOjpQbHVzQ29tcGFyZSgqbnVtZXJhdG9yLCAqZGVsdGFfcGx1cywg
KmRlbm9taW5hdG9yKSA+IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWluX2Rl
bHRhX3Jvb21fbWludXMgJiYgIWluX2RlbHRhX3Jvb21fcGx1cykgeworICAgICAgICAgICAgICAg
IC8vIFByZXBhcmUgZm9yIG5leHQgaXRlcmF0aW9uLgorICAgICAgICAgICAgICAgIG51bWVyYXRv
ci0+VGltZXMxMCgpOworICAgICAgICAgICAgICAgIGRlbHRhX21pbnVzLT5UaW1lczEwKCk7Cisg
ICAgICAgICAgICAgICAgLy8gV2Ugb3B0aW1pemVkIGRlbHRhX3BsdXMgdG8gYmUgZXF1YWwgdG8g
ZGVsdGFfbWludXMgKGlmIHRoZXkgc2hhcmUgdGhlCisgICAgICAgICAgICAgICAgLy8gc2FtZSB2
YWx1ZSkuIFNvIGRvbid0IG11bHRpcGx5IGRlbHRhX3BsdXMgaWYgdGhleSBwb2ludCB0byB0aGUg
c2FtZQorICAgICAgICAgICAgICAgIC8vIG9iamVjdC4KKyAgICAgICAgICAgICAgICBpZiAoZGVs
dGFfbWludXMgIT0gZGVsdGFfcGx1cykgeworICAgICAgICAgICAgICAgICAgICBkZWx0YV9wbHVz
LT5UaW1lczEwKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChp
bl9kZWx0YV9yb29tX21pbnVzICYmIGluX2RlbHRhX3Jvb21fcGx1cykgeworICAgICAgICAgICAg
ICAgIC8vIExldCdzIHNlZSBpZiAyKm51bWVyYXRvciA8IGRlbm9taW5hdG9yLgorICAgICAgICAg
ICAgICAgIC8vIElmIHllcywgdGhlbiB0aGUgbmV4dCBkaWdpdCB3b3VsZCBiZSA8IDUgYW5kIHdl
IGNhbiByb3VuZCBkb3duLgorICAgICAgICAgICAgICAgIGludCBjb21wYXJlID0gQmlnbnVtOjpQ
bHVzQ29tcGFyZSgqbnVtZXJhdG9yLCAqbnVtZXJhdG9yLCAqZGVub21pbmF0b3IpOworICAgICAg
ICAgICAgICAgIGlmIChjb21wYXJlIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAvLyBSZW1h
aW5pbmcgZGlnaXRzIGFyZSBsZXNzIHRoYW4gLjUuIC0+IFJvdW5kIGRvd24gKD09IGRvIG5vdGhp
bmcpLgorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29tcGFyZSA+IDApIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gUmVtYWluaW5nIGRpZ2l0cyBhcmUgbW9yZSB0aGFuIC41IG9mIGRlbm9t
aW5hdG9yLiAtPiBSb3VuZCB1cC4KKyAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRo
ZSBsYXN0IGRpZ2l0IGNvdWxkIG5vdCBiZSBhICc5JyBhcyBvdGhlcndpc2UgdGhlIHdob2xlCisg
ICAgICAgICAgICAgICAgICAgIC8vIGxvb3Agd291bGQgaGF2ZSBzdG9wcGVkIGVhcmxpZXIuCisg
ICAgICAgICAgICAgICAgICAgIC8vIFdlIHN0aWxsIGhhdmUgYW4gYXNzZXJ0IGhlcmUgaW4gY2Fz
ZSB0aGUgcHJlY29uZGl0aW9ucyB3ZXJlIG5vdAorICAgICAgICAgICAgICAgICAgICAvLyBzYXRp
c2ZpZWQuCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChidWZmZXJbKCpsZW5ndGgpIC0gMV0g
IT0gJzknKTsKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyWygqbGVuZ3RoKSAtIDFdKys7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSGFsZndheSBj
YXNlLgorICAgICAgICAgICAgICAgICAgICAvLyBUT0RPKGZsb2l0c2NoKTogbmVlZCBhIHdheSB0
byBzb2x2ZSBoYWxmLXdheSBjYXNlcy4KKyAgICAgICAgICAgICAgICAgICAgLy8gICBGb3Igbm93
IGxldCdzIHJvdW5kIHRvd2FyZHMgZXZlbiAoc2luY2UgdGhpcyBpcyB3aGF0IEdheSBzZWVtcyB0
bworICAgICAgICAgICAgICAgICAgICAvLyAgIGRvKS4KKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIGlmICgoYnVmZmVyWygqbGVuZ3RoKSAtIDFdIC0gJzAnKSAlIDIg
PT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gUm91bmQgZG93biA9PiBEbyBub3Ro
aW5nLgorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKGJ1ZmZlclsoKmxlbmd0aCkgLSAxXSAhPSAnOScpOworICAgICAgICAgICAgICAg
ICAgICAgICAgYnVmZmVyWygqbGVuZ3RoKSAtIDFdKys7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fSBlbHNlIGlmIChpbl9kZWx0YV9yb29tX21pbnVzKSB7CisgICAgICAgICAgICAgICAgLy8gUm91
bmQgZG93biAoPT0gZG8gbm90aGluZykuCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfSBlbHNlIHsgIC8vIGluX2RlbHRhX3Jvb21fcGx1cworICAgICAgICAgICAgICAgIC8v
IFJvdW5kIHVwLgorICAgICAgICAgICAgICAgIC8vIE5vdGUgYWdhaW4gdGhhdCB0aGUgbGFzdCBk
aWdpdCBjb3VsZCBub3QgYmUgJzknIHNpbmNlIHRoaXMgd291bGQgaGF2ZQorICAgICAgICAgICAg
ICAgIC8vIHN0b3BwZWQgdGhlIGxvb3AgZWFybGllci4KKyAgICAgICAgICAgICAgICAvLyBXZSBz
dGlsbCBoYXZlIGFuIEFTU0VSVCBoZXJlLCBpbiBjYXNlIHRoZSBwcmVjb25kaXRpb25zIHdlcmUg
bm90CisgICAgICAgICAgICAgICAgLy8gc2F0aXNmaWVkLgorICAgICAgICAgICAgICAgIEFTU0VS
VChidWZmZXJbKCpsZW5ndGgpIC0xXSAhPSAnOScpOworICAgICAgICAgICAgICAgIGJ1ZmZlclso
Kmxlbmd0aCkgLSAxXSsrOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBMZXQgdiA9IG51bWVyYXRvciAv
IGRlbm9taW5hdG9yIDwgMTAuCisgICAgLy8gVGhlbiB3ZSBnZW5lcmF0ZSAnY291bnQnIGRpZ2l0
cyBvZiBkID0geC54eHh4eC4uLiAod2l0aG91dCB0aGUgZGVjaW1hbCBwb2ludCkKKyAgICAvLyBm
cm9tIGxlZnQgdG8gcmlnaHQuIE9uY2UgJ2NvdW50JyBkaWdpdHMgaGF2ZSBiZWVuIHByb2R1Y2Vk
IHdlIGRlY2lkZSB3ZXRoZXIKKyAgICAvLyB0byByb3VuZCB1cCBvciBkb3duLiBSZW1haW5kZXJz
IG9mIGV4YWN0bHkgLjUgcm91bmQgdXB3YXJkcy4gTnVtYmVycyBzdWNoCisgICAgLy8gYXMgOS45
OTk5OTkgcHJvcGFnYXRlIGEgY2FycnkgYWxsIHRoZSB3YXksIGFuZCBjaGFuZ2UgdGhlCisgICAg
Ly8gZXhwb25lbnQgKGRlY2ltYWxfcG9pbnQpLCB3aGVuIHJvdW5kaW5nIHVwd2FyZHMuCisgICAg
c3RhdGljIHZvaWQgR2VuZXJhdGVDb3VudGVkRGlnaXRzKGludCBjb3VudCwgaW50KiBkZWNpbWFs
X3BvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIG51
bWVyYXRvciwgQmlnbnVtKiBkZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVmVjdG9yPGNoYXI+KGJ1ZmZlciksIGludCogbGVuZ3RoKSB7CisgICAgICAg
IEFTU0VSVChjb3VudCA+PSAwKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAt
IDE7ICsraSkgeworICAgICAgICAgICAgdWludDE2X3QgZGlnaXQ7CisgICAgICAgICAgICBkaWdp
dCA9IG51bWVyYXRvci0+RGl2aWRlTW9kdWxvSW50QmlnbnVtKCpkZW5vbWluYXRvcik7CisgICAg
ICAgICAgICBBU1NFUlQoZGlnaXQgPD0gOSk7ICAvLyBkaWdpdCBpcyBhIHVpbnQxNl90IGFuZCB0
aGVyZWZvcmUgYWx3YXlzIHBvc2l0aXZlLgorICAgICAgICAgICAgLy8gZGlnaXQgPSBudW1lcmF0
b3IgLyBkZW5vbWluYXRvciAoaW50ZWdlciBkaXZpc2lvbikuCisgICAgICAgICAgICAvLyBudW1l
cmF0b3IgPSBudW1lcmF0b3IgJSBkZW5vbWluYXRvci4KKyAgICAgICAgICAgIGJ1ZmZlcltpXSA9
IGRpZ2l0ICsgJzAnOworICAgICAgICAgICAgLy8gUHJlcGFyZSBmb3IgbmV4dCBpdGVyYXRpb24u
CisgICAgICAgICAgICBudW1lcmF0b3ItPlRpbWVzMTAoKTsKKyAgICAgICAgfQorICAgICAgICAv
LyBHZW5lcmF0ZSB0aGUgbGFzdCBkaWdpdC4KKyAgICAgICAgdWludDE2X3QgZGlnaXQ7CisgICAg
ICAgIGRpZ2l0ID0gbnVtZXJhdG9yLT5EaXZpZGVNb2R1bG9JbnRCaWdudW0oKmRlbm9taW5hdG9y
KTsKKyAgICAgICAgaWYgKEJpZ251bTo6UGx1c0NvbXBhcmUoKm51bWVyYXRvciwgKm51bWVyYXRv
ciwgKmRlbm9taW5hdG9yKSA+PSAwKSB7CisgICAgICAgICAgICBkaWdpdCsrOworICAgICAgICB9
CisgICAgICAgIGJ1ZmZlcltjb3VudCAtIDFdID0gZGlnaXQgKyAnMCc7CisgICAgICAgIC8vIENv
cnJlY3QgYmFkIGRpZ2l0cyAoaW4gY2FzZSB3ZSBoYWQgYSBzZXF1ZW5jZSBvZiAnOSdzKS4gUHJv
cGFnYXRlIHRoZQorICAgICAgICAvLyBjYXJyeSB1bnRpbCB3ZSBoYXQgYSBub24tJzknIG9yIHRp
bCB3ZSByZWFjaCB0aGUgZmlyc3QgZGlnaXQuCisgICAgICAgIGZvciAoaW50IGkgPSBjb3VudCAt
IDE7IGkgPiAwOyAtLWkpIHsKKyAgICAgICAgICAgIGlmIChidWZmZXJbaV0gIT0gJzAnICsgMTAp
IGJyZWFrOworICAgICAgICAgICAgYnVmZmVyW2ldID0gJzAnOworICAgICAgICAgICAgYnVmZmVy
W2kgLSAxXSsrOworICAgICAgICB9CisgICAgICAgIGlmIChidWZmZXJbMF0gPT0gJzAnICsgMTAp
IHsKKyAgICAgICAgICAgIC8vIFByb3BhZ2F0ZSBhIGNhcnJ5IHBhc3QgdGhlIHRvcCBwbGFjZS4K
KyAgICAgICAgICAgIGJ1ZmZlclswXSA9ICcxJzsKKyAgICAgICAgICAgICgqZGVjaW1hbF9wb2lu
dCkrKzsKKyAgICAgICAgfQorICAgICAgICAqbGVuZ3RoID0gY291bnQ7CisgICAgfQorICAgIAor
ICAgIAorICAgIC8vIEdlbmVyYXRlcyAncmVxdWVzdGVkX2RpZ2l0cycgYWZ0ZXIgdGhlIGRlY2lt
YWwgcG9pbnQuIEl0IG1pZ2h0IG9taXQKKyAgICAvLyB0cmFpbGluZyAnMCdzLiBJZiB0aGUgaW5w
dXQgbnVtYmVyIGlzIHRvbyBzbWFsbCB0aGVuIG5vIGRpZ2l0cyBhdCBhbGwgYXJlCisgICAgLy8g
Z2VuZXJhdGVkIChleC46IDIgZml4ZWQgZGlnaXRzIGZvciAwLjAwMDAxKS4KKyAgICAvLworICAg
IC8vIElucHV0IHZlcmlmaWVzOiAgMSA8PSAobnVtZXJhdG9yICsgZGVsdGEpIC8gZGVub21pbmF0
b3IgPCAxMC4KKyAgICBzdGF0aWMgdm9pZCBCaWdudW1Ub0ZpeGVkKGludCByZXF1ZXN0ZWRfZGln
aXRzLCBpbnQqIGRlY2ltYWxfcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBC
aWdudW0qIG51bWVyYXRvciwgQmlnbnVtKiBkZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFZlY3RvcjxjaGFyPihidWZmZXIpLCBpbnQqIGxlbmd0aCkgeworICAgICAg
ICAvLyBOb3RlIHRoYXQgd2UgaGF2ZSB0byBsb29rIGF0IG1vcmUgdGhhbiBqdXN0IHRoZSByZXF1
ZXN0ZWRfZGlnaXRzLCBzaW5jZQorICAgICAgICAvLyBhIG51bWJlciBjb3VsZCBiZSByb3VuZGVk
IHVwLiBFeGFtcGxlOiB2PTAuNSB3aXRoIHJlcXVlc3RlZF9kaWdpdHM9MC4KKyAgICAgICAgLy8g
RXZlbiB0aG91Z2ggdGhlIHBvd2VyIG9mIHYgZXF1YWxzIDAgd2UgY2FuJ3QganVzdCBzdG9wIGhl
cmUuCisgICAgICAgIGlmICgtKCpkZWNpbWFsX3BvaW50KSA+IHJlcXVlc3RlZF9kaWdpdHMpIHsK
KyAgICAgICAgICAgIC8vIFRoZSBudW1iZXIgaXMgZGVmaW5pdGl2ZWx5IHRvbyBzbWFsbC4KKyAg
ICAgICAgICAgIC8vIEV4OiAwLjAwMSB3aXRoIHJlcXVlc3RlZF9kaWdpdHMgPT0gMS4KKyAgICAg
ICAgICAgIC8vIFNldCBkZWNpbWFsLXBvaW50IHRvIC1yZXF1ZXN0ZWRfZGlnaXRzLiBUaGlzIGlz
IHdoYXQgR2F5IGRvZXMuCisgICAgICAgICAgICAvLyBOb3RlIHRoYXQgaXQgc2hvdWxkIG5vdCBo
YXZlIGFueSBlZmZlY3QgYW55d2F5cyBzaW5jZSB0aGUgc3RyaW5nIGlzCisgICAgICAgICAgICAv
LyBlbXB0eS4KKyAgICAgICAgICAgICpkZWNpbWFsX3BvaW50ID0gLXJlcXVlc3RlZF9kaWdpdHM7
CisgICAgICAgICAgICAqbGVuZ3RoID0gMDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fSBlbHNlIGlmICgtKCpkZWNpbWFsX3BvaW50KSA9PSByZXF1ZXN0ZWRfZGlnaXRzKSB7CisgICAg
ICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdG8gdmVyaWZ5IGlmIHRoZSBudW1iZXIgcm91bmRzIGRv
d24gb3IgdXAuCisgICAgICAgICAgICAvLyBFeDogMC4wNCBhbmQgMC4wNiB3aXRoIHJlcXVlc3Rl
ZF9kaWdpdHMgPT0gMS4KKyAgICAgICAgICAgIEFTU0VSVCgqZGVjaW1hbF9wb2ludCA9PSAtcmVx
dWVzdGVkX2RpZ2l0cyk7CisgICAgICAgICAgICAvLyBJbml0aWFsbHkgdGhlIGZyYWN0aW9uIGxp
ZXMgaW4gcmFuZ2UgKDEsIDEwXS4gTXVsdGlwbHkgdGhlIGRlbm9taW5hdG9yCisgICAgICAgICAg
ICAvLyBieSAxMCBzbyB0aGF0IHdlIGNhbiBjb21wYXJlIG1vcmUgZWFzaWx5LgorICAgICAgICAg
ICAgZGVub21pbmF0b3ItPlRpbWVzMTAoKTsKKyAgICAgICAgICAgIGlmIChCaWdudW06OlBsdXND
b21wYXJlKCpudW1lcmF0b3IsICpudW1lcmF0b3IsICpkZW5vbWluYXRvcikgPj0gMCkgeworICAg
ICAgICAgICAgICAgIC8vIElmIHRoZSBmcmFjdGlvbiBpcyA+PSAwLjUgdGhlbiB3ZSBoYXZlIHRv
IGluY2x1ZGUgdGhlIHJvdW5kZWQKKyAgICAgICAgICAgICAgICAvLyBkaWdpdC4KKyAgICAgICAg
ICAgICAgICBidWZmZXJbMF0gPSAnMSc7CisgICAgICAgICAgICAgICAgKmxlbmd0aCA9IDE7Cisg
ICAgICAgICAgICAgICAgKCpkZWNpbWFsX3BvaW50KSsrOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgd2UgY2F1Z2h0IG1vc3Qgb2Ygc2ltaWxhciBj
YXNlcyBlYXJsaWVyLgorICAgICAgICAgICAgICAgICpsZW5ndGggPSAwOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8g
VGhlIHJlcXVlc3RlZCBkaWdpdHMgY29ycmVzcG9uZCB0byB0aGUgZGlnaXRzIGFmdGVyIHRoZSBw
b2ludC4KKyAgICAgICAgICAgIC8vIFRoZSB2YXJpYWJsZSAnbmVlZGVkX2RpZ2l0cycgaW5jbHVk
ZXMgdGhlIGRpZ2l0cyBiZWZvcmUgdGhlIHBvaW50LgorICAgICAgICAgICAgaW50IG5lZWRlZF9k
aWdpdHMgPSAoKmRlY2ltYWxfcG9pbnQpICsgcmVxdWVzdGVkX2RpZ2l0czsKKyAgICAgICAgICAg
IEdlbmVyYXRlQ291bnRlZERpZ2l0cyhuZWVkZWRfZGlnaXRzLCBkZWNpbWFsX3BvaW50LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyYXRvciwgZGVub21pbmF0b3IsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBsZW5ndGgpOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIAorICAgIC8vIFJldHVybnMgYW4gZXN0aW1hdGlvbiBvZiBr
IHN1Y2ggdGhhdCAxMF4oay0xKSA8PSB2IDwgMTBeayB3aGVyZQorICAgIC8vIHYgPSBmICogMl5l
eHBvbmVudCBhbmQgMl41MiA8PSBmIDwgMl41My4KKyAgICAvLyB2IGlzIGhlbmNlIGEgbm9ybWFs
aXplZCBkb3VibGUgd2l0aCB0aGUgZ2l2ZW4gZXhwb25lbnQuIFRoZSBvdXRwdXQgaXMgYW4KKyAg
ICAvLyBhcHByb3hpbWF0aW9uIGZvciB0aGUgZXhwb25lbnQgb2YgdGhlIGRlY2ltYWwgYXBwcm9p
bWF0aW9uIC5kaWdpdHMgKiAxMF5rLgorICAgIC8vCisgICAgLy8gVGhlIHJlc3VsdCBtaWdodCB1
bmRlcnNob290IGJ5IDEgaW4gd2hpY2ggY2FzZSAxMF5rIDw9IHYgPCAxMF5rKzEuCisgICAgLy8g
Tm90ZTogdGhpcyBwcm9wZXJ0eSBob2xkcyBmb3IgdidzIHVwcGVyIGJvdW5kYXJ5IG0rIHRvby4K
KyAgICAvLyAgICAxMF5rIDw9IG0rIDwgMTBeaysxLgorICAgIC8vICAgKHNlZSBleHBsYW5hdGlv
biBiZWxvdykuCisgICAgLy8KKyAgICAvLyBFeGFtcGxlczoKKyAgICAvLyAgRXN0aW1hdGVQb3dl
cigwKSAgID0+IDE2CisgICAgLy8gIEVzdGltYXRlUG93ZXIoLTUyKSA9PiAwCisgICAgLy8KKyAg
ICAvLyBOb3RlOiBlID49IDAgPT4gRXN0aW1hdGVkUG93ZXIoZSkgPiAwLiBObyBzaW1pbGFyIGNs
YWltIGNhbiBiZSBtYWRlIGZvciBlPDAuCisgICAgc3RhdGljIGludCBFc3RpbWF0ZVBvd2VyKGlu
dCBleHBvbmVudCkgeworICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGVzdGltYXRlcyBsb2cxMCBv
ZiB2IHdoZXJlIHYgPSBmKjJeZSAod2l0aCBlID09IGV4cG9uZW50KS4KKyAgICAgICAgLy8gTm90
ZSB0aGF0IDEwXmZsb29yKGxvZzEwKHYpKSA8PSB2LCBidXQgdiA8PSAxMF5jZWlsKGxvZzEwKHYp
KS4KKyAgICAgICAgLy8gTm90ZSB0aGF0IGYgaXMgYm91bmRlZCBieSBpdHMgY29udGFpbmVyIHNp
emUuIExldCBwID0gNTMgKHRoZSBkb3VibGUncworICAgICAgICAvLyBzaWduaWZpY2FuZCBzaXpl
KS4gVGhlbiAyXihwLTEpIDw9IGYgPCAyXnAuCisgICAgICAgIC8vCisgICAgICAgIC8vIEdpdmVu
IHRoYXQgbG9nMTAodikgPT0gbG9nMih2KS9sb2cyKDEwKSBhbmQgZSsobGVuKGYpLTEpIGlzIHF1
aXRlIGNsb3NlCisgICAgICAgIC8vIHRvIGxvZzIodikgdGhlIGZ1bmN0aW9uIGlzIHNpbXBsaWZp
ZWQgdG8gKGUrKGxlbihmKS0xKS9sb2cyKDEwKSkuCisgICAgICAgIC8vIFRoZSBjb21wdXRlZCBu
dW1iZXIgdW5kZXJzaG9vdHMgYnkgbGVzcyB0aGFuIDAuNjMxICh3aGVuIHdlIGNvbXB1dGUgbG9n
MworICAgICAgICAvLyBhbmQgbm90IGxvZzEwKS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gT3B0
aW1pemF0aW9uOiBzaW5jZSB3ZSBvbmx5IG5lZWQgYW4gYXBwcm94aW1hdGVkIHJlc3VsdCB0aGlz
IGNvbXB1dGF0aW9uCisgICAgICAgIC8vIGNhbiBiZSBwZXJmb3JtZWQgb24gNjQgYml0IGludGVn
ZXJzLiBPbiB4ODYveDY0IGFyY2hpdGVjdHVyZSB0aGUgc3BlZWR1cCBpcworICAgICAgICAvLyBu
b3QgcmVhbGx5IG1lYXN1cmFibGUsIHRob3VnaC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gU2lu
Y2Ugd2Ugd2FudCB0byBhdm9pZCBvdmVyc2hvb3Rpbmcgd2UgZGVjcmVtZW50IGJ5IDFlMTAgc28g
dGhhdAorICAgICAgICAvLyBmbG9hdGluZy1wb2ludCBpbXByZWNpc2lvbnMgZG9uJ3QgYWZmZWN0
IHVzLgorICAgICAgICAvLworICAgICAgICAvLyBFeHBsYW5hdGlvbiBmb3IgdidzIGJvdW5kYXJ5
IG0rOiB0aGUgY29tcHV0YXRpb24gdGFrZXMgYWR2YW50YWdlIG9mCisgICAgICAgIC8vIHRoZSBm
YWN0IHRoYXQgMl4ocC0xKSA8PSBmIDwgMl5wLiBCb3VuZGFyaWVzIHN0aWxsIHNhdGlzZnkgdGhp
cyByZXF1aXJlbWVudAorICAgICAgICAvLyAoZXZlbiBmb3IgZGVub3JtYWxzIHdoZXJlIHRoZSBk
ZWx0YSBjYW4gYmUgbXVjaCBtb3JlIGltcG9ydGFudCkuCisgICAgICAgIAorICAgICAgICBjb25z
dCBkb3VibGUgazFMb2cxMCA9IDAuMzAxMDI5OTk1NjYzOTgxMTQ7ICAvLyAxL2xnKDEwKQorICAg
ICAgICAKKyAgICAgICAgLy8gRm9yIGRvdWJsZXMgbGVuKGYpID09IDUzIChkb24ndCBmb3JnZXQg
dGhlIGhpZGRlbiBiaXQpLgorICAgICAgICBjb25zdCBpbnQga1NpZ25pZmljYW5kU2l6ZSA9IDUz
OworICAgICAgICBkb3VibGUgZXN0aW1hdGUgPSBjZWlsKChleHBvbmVudCArIGtTaWduaWZpY2Fu
ZFNpemUgLSAxKSAqIGsxTG9nMTAgLSAxZS0xMCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxpbnQ+KGVzdGltYXRlKTsKKyAgICB9CisgICAgCisgICAgCisgICAgLy8gU2VlIGNvbW1lbnRz
IGZvciBJbml0aWFsU2NhbGVkU3RhcnRWYWx1ZXMuCisgICAgc3RhdGljIHZvaWQgSW5pdGlhbFNj
YWxlZFN0YXJ0VmFsdWVzUG9zaXRpdmVFeHBvbmVudCgKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB2LCBpbnQgZXN0aW1hdGVk
X3Bvd2VyLCBib29sIG5lZWRfYm91bmRhcnlfZGVsdGFzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBudW1lcmF0b3IsIEJp
Z251bSogZGVub21pbmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBCaWdudW0qIGRlbHRhX21pbnVzLCBCaWdudW0qIGRlbHRhX3Bs
dXMpIHsKKyAgICAgICAgLy8gQSBwb3NpdGl2ZSBleHBvbmVudCBpbXBsaWVzIGEgcG9zaXRpdmUg
cG93ZXIuCisgICAgICAgIEFTU0VSVChlc3RpbWF0ZWRfcG93ZXIgPj0gMCk7CisgICAgICAgIC8v
IFNpbmNlIHRoZSBlc3RpbWF0ZWRfcG93ZXIgaXMgcG9zaXRpdmUgd2Ugc2ltcGx5IG11bHRpcGx5
IHRoZSBkZW5vbWluYXRvcgorICAgICAgICAvLyBieSAxMF5lc3RpbWF0ZWRfcG93ZXIuCisgICAg
ICAgIAorICAgICAgICAvLyBudW1lcmF0b3IgPSB2LgorICAgICAgICBudW1lcmF0b3ItPkFzc2ln
blVJbnQ2NChEb3VibGUodikuU2lnbmlmaWNhbmQoKSk7CisgICAgICAgIG51bWVyYXRvci0+U2hp
ZnRMZWZ0KERvdWJsZSh2KS5FeHBvbmVudCgpKTsKKyAgICAgICAgLy8gZGVub21pbmF0b3IgPSAx
MF5lc3RpbWF0ZWRfcG93ZXIuCisgICAgICAgIGRlbm9taW5hdG9yLT5Bc3NpZ25Qb3dlclVJbnQx
NigxMCwgZXN0aW1hdGVkX3Bvd2VyKTsKKyAgICAgICAgCisgICAgICAgIGlmIChuZWVkX2JvdW5k
YXJ5X2RlbHRhcykgeworICAgICAgICAgICAgLy8gSW50cm9kdWNlIGEgY29tbW9uIGRlbm9taW5h
dG9yIHNvIHRoYXQgdGhlIGRlbHRhcyB0byB0aGUgYm91bmRhcmllcyBhcmUKKyAgICAgICAgICAg
IC8vIGludGVnZXJzLgorICAgICAgICAgICAgZGVub21pbmF0b3ItPlNoaWZ0TGVmdCgxKTsKKyAg
ICAgICAgICAgIG51bWVyYXRvci0+U2hpZnRMZWZ0KDEpOworICAgICAgICAgICAgLy8gTGV0IHYg
PSBmICogMl5lLCB0aGVuIG0rIC0gdiA9IDEvMiAqIDJeZTsgV2l0aCB0aGUgY29tbW9uCisgICAg
ICAgICAgICAvLyBkZW5vbWluYXRvciAob2YgMikgZGVsdGFfcGx1cyBlcXVhbHMgMl5lLgorICAg
ICAgICAgICAgZGVsdGFfcGx1cy0+QXNzaWduVUludDE2KDEpOworICAgICAgICAgICAgZGVsdGFf
cGx1cy0+U2hpZnRMZWZ0KERvdWJsZSh2KS5FeHBvbmVudCgpKTsKKyAgICAgICAgICAgIC8vIFNh
bWUgZm9yIGRlbHRhX21pbnVzICh3aXRoIGFkanVzdG1lbnRzIGJlbG93IGlmIGYgPT0gMl5wLTEp
LgorICAgICAgICAgICAgZGVsdGFfbWludXMtPkFzc2lnblVJbnQxNigxKTsKKyAgICAgICAgICAg
IGRlbHRhX21pbnVzLT5TaGlmdExlZnQoRG91YmxlKHYpLkV4cG9uZW50KCkpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICAvLyBJZiB0aGUgc2lnbmlmaWNhbmQgKHdpdGhvdXQgdGhlIGhpZGRl
biBiaXQpIGlzIDAsIHRoZW4gdGhlIGxvd2VyCisgICAgICAgICAgICAvLyBib3VuZGFyeSBpcyBj
bG9zZXIgdGhhbiBqdXN0IGhhbGYgYSB1bHAgKHVuaXQgaW4gdGhlIGxhc3QgcGxhY2UpLgorICAg
ICAgICAgICAgLy8gVGhlcmUgaXMgb25seSBvbmUgZXhjZXB0aW9uOiBpZiB0aGUgbmV4dCBsb3dl
ciBudW1iZXIgaXMgYSBkZW5vcm1hbCB0aGVuCisgICAgICAgICAgICAvLyB0aGUgZGlzdGFuY2Ug
aXMgMSB1bHAuIFRoaXMgY2Fubm90IGJlIHRoZSBjYXNlIGZvciBleHBvbmVudCA+PSAwIChidXQg
d2UKKyAgICAgICAgICAgIC8vIGhhdmUgdG8gdGVzdCBpdCBpbiB0aGUgb3RoZXIgZnVuY3Rpb24g
d2hlcmUgZXhwb25lbnQgPCAwKS4KKyAgICAgICAgICAgIHVpbnQ2NF90IHZfYml0cyA9IERvdWJs
ZSh2KS5Bc1VpbnQ2NCgpOworICAgICAgICAgICAgaWYgKCh2X2JpdHMgJiBEb3VibGU6OmtTaWdu
aWZpY2FuZE1hc2spID09IDApIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgbG93ZXIgYm91bmRh
cnkgaXMgY2xvc2VyIGF0IGhhbGYgdGhlIGRpc3RhbmNlIG9mICJub3JtYWwiIG51bWJlcnMuCisg
ICAgICAgICAgICAgICAgLy8gSW5jcmVhc2UgdGhlIGNvbW1vbiBkZW5vbWluYXRvciBhbmQgYWRh
cHQgYWxsIGJ1dCB0aGUgZGVsdGFfbWludXMuCisgICAgICAgICAgICAgICAgZGVub21pbmF0b3It
PlNoaWZ0TGVmdCgxKTsgIC8vICoyCisgICAgICAgICAgICAgICAgbnVtZXJhdG9yLT5TaGlmdExl
ZnQoMSk7ICAgIC8vICoyCisgICAgICAgICAgICAgICAgZGVsdGFfcGx1cy0+U2hpZnRMZWZ0KDEp
OyAgIC8vICoyCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisg
ICAgLy8gU2VlIGNvbW1lbnRzIGZvciBJbml0aWFsU2NhbGVkU3RhcnRWYWx1ZXMKKyAgICBzdGF0
aWMgdm9pZCBJbml0aWFsU2NhbGVkU3RhcnRWYWx1ZXNOZWdhdGl2ZUV4cG9uZW50UG9zaXRpdmVQ
b3dlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkb3VibGUgdiwgaW50IGVzdGltYXRlZF9wb3dlciwgYm9vbCBu
ZWVkX2JvdW5kYXJ5X2RlbHRhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIG51bWVyYXRvciwgQmln
bnVtKiBkZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIGRlbHRhX21pbnVzLCBCaWdu
dW0qIGRlbHRhX3BsdXMpIHsKKyAgICAgICAgdWludDY0X3Qgc2lnbmlmaWNhbmQgPSBEb3VibGUo
dikuU2lnbmlmaWNhbmQoKTsKKyAgICAgICAgaW50IGV4cG9uZW50ID0gRG91YmxlKHYpLkV4cG9u
ZW50KCk7CisgICAgICAgIC8vIHYgPSBmICogMl5lIHdpdGggZSA8IDAsIGFuZCB3aXRoIGVzdGlt
YXRlZF9wb3dlciA+PSAwLgorICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgZSBpcyBjbG9zZSB0
byAwIChoYXZlIGEgbG9vayBhdCBob3cgZXN0aW1hdGVkX3Bvd2VyIGlzCisgICAgICAgIC8vIGNv
bXB1dGVkKS4KKyAgICAgICAgCisgICAgICAgIC8vIG51bWVyYXRvciA9IHNpZ25pZmljYW5kCisg
ICAgICAgIC8vICBzaW5jZSB2ID0gc2lnbmlmaWNhbmQgKiAyXmV4cG9uZW50IHRoaXMgaXMgZXF1
aXZhbGVudCB0bworICAgICAgICAvLyAgbnVtZXJhdG9yID0gdiAqIC8gMl4tZXhwb25lbnQKKyAg
ICAgICAgbnVtZXJhdG9yLT5Bc3NpZ25VSW50NjQoc2lnbmlmaWNhbmQpOworICAgICAgICAvLyBk
ZW5vbWluYXRvciA9IDEwXmVzdGltYXRlZF9wb3dlciAqIDJeLWV4cG9uZW50ICh3aXRoIGV4cG9u
ZW50IDwgMCkKKyAgICAgICAgZGVub21pbmF0b3ItPkFzc2lnblBvd2VyVUludDE2KDEwLCBlc3Rp
bWF0ZWRfcG93ZXIpOworICAgICAgICBkZW5vbWluYXRvci0+U2hpZnRMZWZ0KC1leHBvbmVudCk7
CisgICAgICAgIAorICAgICAgICBpZiAobmVlZF9ib3VuZGFyeV9kZWx0YXMpIHsKKyAgICAgICAg
ICAgIC8vIEludHJvZHVjZSBhIGNvbW1vbiBkZW5vbWluYXRvciBzbyB0aGF0IHRoZSBkZWx0YXMg
dG8gdGhlIGJvdW5kYXJpZXMgYXJlCisgICAgICAgICAgICAvLyBpbnRlZ2Vycy4KKyAgICAgICAg
ICAgIGRlbm9taW5hdG9yLT5TaGlmdExlZnQoMSk7CisgICAgICAgICAgICBudW1lcmF0b3ItPlNo
aWZ0TGVmdCgxKTsKKyAgICAgICAgICAgIC8vIExldCB2ID0gZiAqIDJeZSwgdGhlbiBtKyAtIHYg
PSAxLzIgKiAyXmU7IFdpdGggdGhlIGNvbW1vbgorICAgICAgICAgICAgLy8gZGVub21pbmF0b3Ig
KG9mIDIpIGRlbHRhX3BsdXMgZXF1YWxzIDJeZS4KKyAgICAgICAgICAgIC8vIEdpdmVuIHRoYXQg
dGhlIGRlbm9taW5hdG9yIGFscmVhZHkgaW5jbHVkZXMgdidzIGV4cG9uZW50IHRoZSBkaXN0YW5j
ZQorICAgICAgICAgICAgLy8gdG8gdGhlIGJvdW5kYXJpZXMgaXMgc2ltcGx5IDEuCisgICAgICAg
ICAgICBkZWx0YV9wbHVzLT5Bc3NpZ25VSW50MTYoMSk7CisgICAgICAgICAgICAvLyBTYW1lIGZv
ciBkZWx0YV9taW51cyAod2l0aCBhZGp1c3RtZW50cyBiZWxvdyBpZiBmID09IDJecC0xKS4KKyAg
ICAgICAgICAgIGRlbHRhX21pbnVzLT5Bc3NpZ25VSW50MTYoMSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIC8vIElmIHRoZSBzaWduaWZpY2FuZCAod2l0aG91dCB0aGUgaGlkZGVuIGJpdCkg
aXMgMCwgdGhlbiB0aGUgbG93ZXIKKyAgICAgICAgICAgIC8vIGJvdW5kYXJ5IGlzIGNsb3NlciB0
aGFuIGp1c3Qgb25lIHVscCAodW5pdCBpbiB0aGUgbGFzdCBwbGFjZSkuCisgICAgICAgICAgICAv
LyBUaGVyZSBpcyBvbmx5IG9uZSBleGNlcHRpb246IGlmIHRoZSBuZXh0IGxvd2VyIG51bWJlciBp
cyBhIGRlbm9ybWFsCisgICAgICAgICAgICAvLyB0aGVuIHRoZSBkaXN0YW5jZSBpcyAxIHVscC4g
U2luY2UgdGhlIGV4cG9uZW50IGlzIGNsb3NlIHRvIHplcm8KKyAgICAgICAgICAgIC8vIChvdGhl
cndpc2UgZXN0aW1hdGVkX3Bvd2VyIHdvdWxkIGhhdmUgYmVlbiBuZWdhdGl2ZSkgdGhpcyBjYW5u
b3QgaGFwcGVuCisgICAgICAgICAgICAvLyBoZXJlIGVpdGhlci4KKyAgICAgICAgICAgIHVpbnQ2
NF90IHZfYml0cyA9IERvdWJsZSh2KS5Bc1VpbnQ2NCgpOworICAgICAgICAgICAgaWYgKCh2X2Jp
dHMgJiBEb3VibGU6OmtTaWduaWZpY2FuZE1hc2spID09IDApIHsKKyAgICAgICAgICAgICAgICAv
LyBUaGUgbG93ZXIgYm91bmRhcnkgaXMgY2xvc2VyIGF0IGhhbGYgdGhlIGRpc3RhbmNlIG9mICJu
b3JtYWwiIG51bWJlcnMuCisgICAgICAgICAgICAgICAgLy8gSW5jcmVhc2UgdGhlIGRlbm9taW5h
dG9yIGFuZCBhZGFwdCBhbGwgYnV0IHRoZSBkZWx0YV9taW51cy4KKyAgICAgICAgICAgICAgICBk
ZW5vbWluYXRvci0+U2hpZnRMZWZ0KDEpOyAgLy8gKjIKKyAgICAgICAgICAgICAgICBudW1lcmF0
b3ItPlNoaWZ0TGVmdCgxKTsgICAgLy8gKjIKKyAgICAgICAgICAgICAgICBkZWx0YV9wbHVzLT5T
aGlmdExlZnQoMSk7ICAgLy8gKjIKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICAKKyAgICAvLyBTZWUgY29tbWVudHMgZm9yIEluaXRpYWxTY2FsZWRTdGFydFZhbHVl
cworICAgIHN0YXRpYyB2b2lkIEluaXRpYWxTY2FsZWRTdGFydFZhbHVlc05lZ2F0aXZlRXhwb25l
bnROZWdhdGl2ZVBvd2VyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB2LCBpbnQgZXN0aW1hdGVkX3Bv
d2VyLCBib29sIG5lZWRfYm91bmRhcnlfZGVsdGFzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogbnVt
ZXJhdG9yLCBCaWdudW0qIGRlbm9taW5hdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogZGVsdGFf
bWludXMsIEJpZ251bSogZGVsdGFfcGx1cykgeworICAgICAgICBjb25zdCB1aW50NjRfdCBrTWlu
aW1hbE5vcm1hbGl6ZWRFeHBvbmVudCA9CisgICAgICAgIFVJTlQ2NF8yUEFSVF9DKDB4MDAxMDAw
MDAsIDAwMDAwMDAwKTsKKyAgICAgICAgdWludDY0X3Qgc2lnbmlmaWNhbmQgPSBEb3VibGUodiku
U2lnbmlmaWNhbmQoKTsKKyAgICAgICAgaW50IGV4cG9uZW50ID0gRG91YmxlKHYpLkV4cG9uZW50
KCk7CisgICAgICAgIC8vIEluc3RlYWQgb2YgbXVsdGlwbHlpbmcgdGhlIGRlbm9taW5hdG9yIHdp
dGggMTBeZXN0aW1hdGVkX3Bvd2VyIHdlCisgICAgICAgIC8vIG11bHRpcGx5IGFsbCB2YWx1ZXMg
KG51bWVyYXRvciBhbmQgZGVsdGFzKSBieSAxMF4tZXN0aW1hdGVkX3Bvd2VyLgorICAgICAgICAK
KyAgICAgICAgLy8gVXNlIG51bWVyYXRvciBhcyB0ZW1wb3JhcnkgY29udGFpbmVyIGZvciBwb3dl
cl90ZW4uCisgICAgICAgIEJpZ251bSogcG93ZXJfdGVuID0gbnVtZXJhdG9yOworICAgICAgICBw
b3dlcl90ZW4tPkFzc2lnblBvd2VyVUludDE2KDEwLCAtZXN0aW1hdGVkX3Bvd2VyKTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChuZWVkX2JvdW5kYXJ5X2RlbHRhcykgeworICAgICAgICAgICAgLy8g
U2luY2UgcG93ZXJfdGVuID09IG51bWVyYXRvciB3ZSBtdXN0IG1ha2UgYSBjb3B5IG9mIDEwXmVz
dGltYXRlZF9wb3dlcgorICAgICAgICAgICAgLy8gYmVmb3JlIHdlIGNvbXBsZXRlIHRoZSBjb21w
dXRhdGlvbiBvZiB0aGUgbnVtZXJhdG9yLgorICAgICAgICAgICAgLy8gZGVsdGFfcGx1cyA9IGRl
bHRhX21pbnVzID0gMTBeZXN0aW1hdGVkX3Bvd2VyCisgICAgICAgICAgICBkZWx0YV9wbHVzLT5B
c3NpZ25CaWdudW0oKnBvd2VyX3Rlbik7CisgICAgICAgICAgICBkZWx0YV9taW51cy0+QXNzaWdu
QmlnbnVtKCpwb3dlcl90ZW4pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBudW1l
cmF0b3IgPSBzaWduaWZpY2FuZCAqIDIgKiAxMF4tZXN0aW1hdGVkX3Bvd2VyCisgICAgICAgIC8v
ICBzaW5jZSB2ID0gc2lnbmlmaWNhbmQgKiAyXmV4cG9uZW50IHRoaXMgaXMgZXF1aXZhbGVudCB0
bworICAgICAgICAvLyBudW1lcmF0b3IgPSB2ICogMTBeLWVzdGltYXRlZF9wb3dlciAqIDIgKiAy
Xi1leHBvbmVudC4KKyAgICAgICAgLy8gUmVtZW1iZXI6IG51bWVyYXRvciBoYXMgYmVlbiBhYnVz
ZWQgYXMgcG93ZXJfdGVuLiBTbyBubyBuZWVkIHRvIGFzc2lnbiBpdAorICAgICAgICAvLyAgdG8g
aXRzZWxmLgorICAgICAgICBBU1NFUlQobnVtZXJhdG9yID09IHBvd2VyX3Rlbik7CisgICAgICAg
IG51bWVyYXRvci0+TXVsdGlwbHlCeVVJbnQ2NChzaWduaWZpY2FuZCk7CisgICAgICAgIAorICAg
ICAgICAvLyBkZW5vbWluYXRvciA9IDIgKiAyXi1leHBvbmVudCB3aXRoIGV4cG9uZW50IDwgMC4K
KyAgICAgICAgZGVub21pbmF0b3ItPkFzc2lnblVJbnQxNigxKTsKKyAgICAgICAgZGVub21pbmF0
b3ItPlNoaWZ0TGVmdCgtZXhwb25lbnQpOworICAgICAgICAKKyAgICAgICAgaWYgKG5lZWRfYm91
bmRhcnlfZGVsdGFzKSB7CisgICAgICAgICAgICAvLyBJbnRyb2R1Y2UgYSBjb21tb24gZGVub21p
bmF0b3Igc28gdGhhdCB0aGUgZGVsdGFzIHRvIHRoZSBib3VuZGFyaWVzIGFyZQorICAgICAgICAg
ICAgLy8gaW50ZWdlcnMuCisgICAgICAgICAgICBudW1lcmF0b3ItPlNoaWZ0TGVmdCgxKTsKKyAg
ICAgICAgICAgIGRlbm9taW5hdG9yLT5TaGlmdExlZnQoMSk7CisgICAgICAgICAgICAvLyBXaXRo
IHRoaXMgc2hpZnQgdGhlIGJvdW5kYXJpZXMgaGF2ZSB0aGVpciBjb3JyZWN0IHZhbHVlLCBzaW5j
ZQorICAgICAgICAgICAgLy8gZGVsdGFfcGx1cyA9IDEwXi1lc3RpbWF0ZWRfcG93ZXIsIGFuZAor
ICAgICAgICAgICAgLy8gZGVsdGFfbWludXMgPSAxMF4tZXN0aW1hdGVkX3Bvd2VyLgorICAgICAg
ICAgICAgLy8gVGhlc2UgYXNzaWdubWVudHMgaGF2ZSBiZWVuIGRvbmUgZWFybGllci4KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8gVGhlIHNwZWNpYWwgY2FzZSB3aGVyZSB0aGUgbG93ZXIg
Ym91bmRhcnkgaXMgdHdpY2UgYXMgY2xvc2UuCisgICAgICAgICAgICAvLyBUaGlzIHRpbWUgd2Ug
aGF2ZSB0byBsb29rIG91dCBmb3IgdGhlIGV4Y2VwdGlvbiB0b28uCisgICAgICAgICAgICB1aW50
NjRfdCB2X2JpdHMgPSBEb3VibGUodikuQXNVaW50NjQoKTsKKyAgICAgICAgICAgIGlmICgodl9i
aXRzICYgRG91YmxlOjprU2lnbmlmaWNhbmRNYXNrKSA9PSAwICYmCisgICAgICAgICAgICAgICAg
Ly8gVGhlIG9ubHkgZXhjZXB0aW9uIHdoZXJlIGEgc2lnbmlmaWNhbmQgPT0gMCBoYXMgaXRzIGJv
dW5kYXJpZXMgYXQKKyAgICAgICAgICAgICAgICAvLyAibm9ybWFsIiBkaXN0YW5jZXM6CisgICAg
ICAgICAgICAgICAgKHZfYml0cyAmIERvdWJsZTo6a0V4cG9uZW50TWFzaykgIT0ga01pbmltYWxO
b3JtYWxpemVkRXhwb25lbnQpIHsKKyAgICAgICAgICAgICAgICBudW1lcmF0b3ItPlNoaWZ0TGVm
dCgxKTsgICAgLy8gKjIKKyAgICAgICAgICAgICAgICBkZW5vbWluYXRvci0+U2hpZnRMZWZ0KDEp
OyAgLy8gKjIKKyAgICAgICAgICAgICAgICBkZWx0YV9wbHVzLT5TaGlmdExlZnQoMSk7ICAgLy8g
KjIKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBM
ZXQgdiA9IHNpZ25pZmljYW5kICogMl5leHBvbmVudC4KKyAgICAvLyBDb21wdXRlcyB2IC8gMTBe
ZXN0aW1hdGVkX3Bvd2VyIGV4YWN0bHksIGFzIGEgcmF0aW8gb2YgdHdvIGJpZ251bXMsIG51bWVy
YXRvcgorICAgIC8vIGFuZCBkZW5vbWluYXRvci4gVGhlIGZ1bmN0aW9ucyBHZW5lcmF0ZVNob3J0
ZXN0RGlnaXRzIGFuZAorICAgIC8vIEdlbmVyYXRlQ291bnRlZERpZ2l0cyB3aWxsIHRoZW4gY29u
dmVydCB0aGlzIHJhdGlvIHRvIGl0cyBkZWNpbWFsCisgICAgLy8gcmVwcmVzZW50YXRpb24gZCwg
d2l0aCB0aGUgcmVxdWlyZWQgYWNjdXJhY3kuCisgICAgLy8gVGhlbiBkICogMTBeZXN0aW1hdGVk
X3Bvd2VyIGlzIHRoZSByZXByZXNlbnRhdGlvbiBvZiB2LgorICAgIC8vIChOb3RlOiB0aGUgZnJh
Y3Rpb24gYW5kIHRoZSBlc3RpbWF0ZWRfcG93ZXIgbWlnaHQgZ2V0IGFkanVzdGVkIGJlZm9yZQor
ICAgIC8vIGdlbmVyYXRpbmcgdGhlIGRlY2ltYWwgcmVwcmVzZW50YXRpb24uKQorICAgIC8vCisg
ICAgLy8gVGhlIGluaXRpYWwgc3RhcnQgdmFsdWVzIGNvbnNpc3Qgb2Y6CisgICAgLy8gIC0gYSBz
Y2FsZWQgbnVtZXJhdG9yOiBzLnQuIG51bWVyYXRvci9kZW5vbWluYXRvciA9PSB2IC8gMTBeZXN0
aW1hdGVkX3Bvd2VyLgorICAgIC8vICAtIGEgc2NhbGVkIChjb21tb24pIGRlbm9taW5hdG9yLgor
ICAgIC8vICBvcHRpb25hbGx5ICh1c2VkIGJ5IEdlbmVyYXRlU2hvcnRlc3REaWdpdHMgdG8gZGVj
aWRlIGlmIGl0IGhhcyB0aGUgc2hvcnRlc3QKKyAgICAvLyAgZGVjaW1hbCBjb252ZXJ0aW5nIGJh
Y2sgdG8gdik6CisgICAgLy8gIC0gdiAtIG0tOiB0aGUgZGlzdGFuY2UgdG8gdGhlIGxvd2VyIGJv
dW5kYXJ5LgorICAgIC8vICAtIG0rIC0gdjogdGhlIGRpc3RhbmNlIHRvIHRoZSB1cHBlciBib3Vu
ZGFyeS4KKyAgICAvLworICAgIC8vIHYsIG0rLCBtLSwgYW5kIHRoZXJlZm9yZSB2IC0gbS0gYW5k
IG0rIC0gdiBhbGwgc2hhcmUgdGhlIHNhbWUgZGVub21pbmF0b3IuCisgICAgLy8KKyAgICAvLyBM
ZXQgZXAgPT0gZXN0aW1hdGVkX3Bvd2VyLCB0aGVuIHRoZSByZXR1cm5lZCB2YWx1ZXMgd2lsbCBz
YXRpc2Z5OgorICAgIC8vICB2IC8gMTBeZXAgPSBudW1lcmF0b3IgLyBkZW5vbWluYXRvci4KKyAg
ICAvLyAgdidzIGJvdW5kYXJ5cyBtLSBhbmQgbSs6CisgICAgLy8gICAgbS0gLyAxMF5lcCA9PSB2
IC8gMTBeZXAgLSBkZWx0YV9taW51cyAvIGRlbm9taW5hdG9yCisgICAgLy8gICAgbSsgLyAxMF5l
cCA9PSB2IC8gMTBeZXAgKyBkZWx0YV9wbHVzIC8gZGVub21pbmF0b3IKKyAgICAvLyAgT3IgaW4g
b3RoZXIgd29yZHM6CisgICAgLy8gICAgbS0gPT0gdiAtIGRlbHRhX21pbnVzICogMTBeZXAgLyBk
ZW5vbWluYXRvcjsKKyAgICAvLyAgICBtKyA9PSB2ICsgZGVsdGFfcGx1cyAqIDEwXmVwIC8gZGVu
b21pbmF0b3I7CisgICAgLy8KKyAgICAvLyBTaW5jZSAxMF4oay0xKSA8PSB2IDwgMTBeayAgICAo
d2l0aCBrID09IGVzdGltYXRlZF9wb3dlcikKKyAgICAvLyAgb3IgICAgICAgMTBeayA8PSB2IDwg
MTBeKGsrMSkKKyAgICAvLyAgd2UgdGhlbiBoYXZlIDAuMSA8PSBudW1lcmF0b3IvZGVub21pbmF0
b3IgPCAxCisgICAgLy8gICAgICAgICAgIG9yICAgIDEgPD0gbnVtZXJhdG9yL2Rlbm9taW5hdG9y
IDwgMTAKKyAgICAvLworICAgIC8vIEl0IGlzIHRoZW4gZWFzeSB0byBraWNrc3RhcnQgdGhlIGRp
Z2l0LWdlbmVyYXRpb24gcm91dGluZS4KKyAgICAvLworICAgIC8vIFRoZSBib3VuZGFyeS1kZWx0
YXMgYXJlIG9ubHkgZmlsbGVkIGlmIG5lZWRfYm91bmRhcnlfZGVsdGFzIGlzIHNldC4KKyAgICBz
dGF0aWMgdm9pZCBJbml0aWFsU2NhbGVkU3RhcnRWYWx1ZXMoZG91YmxlIHYsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlc3RpbWF0ZWRfcG93ZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbmVlZF9ib3VuZGFyeV9k
ZWx0YXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSog
bnVtZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdu
dW0qIGRlbm9taW5hdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBCaWdudW0qIGRlbHRhX21pbnVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBCaWdudW0qIGRlbHRhX3BsdXMpIHsKKyAgICAgICAgaWYgKERvdWJsZSh2KS5FeHBv
bmVudCgpID49IDApIHsKKyAgICAgICAgICAgIEluaXRpYWxTY2FsZWRTdGFydFZhbHVlc1Bvc2l0
aXZlRXhwb25lbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHYsIGVzdGltYXRlZF9wb3dlciwgbmVlZF9ib3VuZGFyeV9kZWx0YXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyYXRv
ciwgZGVub21pbmF0b3IsIGRlbHRhX21pbnVzLCBkZWx0YV9wbHVzKTsKKyAgICAgICAgfSBlbHNl
IGlmIChlc3RpbWF0ZWRfcG93ZXIgPj0gMCkgeworICAgICAgICAgICAgSW5pdGlhbFNjYWxlZFN0
YXJ0VmFsdWVzTmVnYXRpdmVFeHBvbmVudFBvc2l0aXZlUG93ZXIoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LCBlc3Rp
bWF0ZWRfcG93ZXIsIG5lZWRfYm91bmRhcnlfZGVsdGFzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJhdG9yLCBk
ZW5vbWluYXRvciwgZGVsdGFfbWludXMsIGRlbHRhX3BsdXMpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgSW5pdGlhbFNjYWxlZFN0YXJ0VmFsdWVzTmVnYXRpdmVFeHBvbmVudE5lZ2F0
aXZlUG93ZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2LCBlc3RpbWF0ZWRfcG93ZXIsIG5lZWRfYm91bmRhcnlfZGVs
dGFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnVtZXJhdG9yLCBkZW5vbWluYXRvciwgZGVsdGFfbWludXMsIGRlbHRh
X3BsdXMpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIC8vIFRoaXMgcm91dGlu
ZSBtdWx0aXBsaWVzIG51bWVyYXRvci9kZW5vbWluYXRvciBzbyB0aGF0IGl0cyB2YWx1ZXMgbGll
cyBpbiB0aGUKKyAgICAvLyByYW5nZSAxLTEwLiBUaGF0IGlzIGFmdGVyIGEgY2FsbCB0byB0aGlz
IGZ1bmN0aW9uIHdlIGhhdmU6CisgICAgLy8gICAgMSA8PSAobnVtZXJhdG9yICsgZGVsdGFfcGx1
cykgL2Rlbm9taW5hdG9yIDwgMTAuCisgICAgLy8gTGV0IG51bWVyYXRvciB0aGUgaW5wdXQgYmVm
b3JlIG1vZGlmaWNhdGlvbiBhbmQgbnVtZXJhdG9yJyB0aGUgYXJndW1lbnQKKyAgICAvLyBhZnRl
ciBtb2RpZmljYXRpb24sIHRoZW4gdGhlIG91dHB1dC1wYXJhbWV0ZXIgZGVjaW1hbF9wb2ludCBp
cyBzdWNoIHRoYXQKKyAgICAvLyAgbnVtZXJhdG9yIC8gZGVub21pbmF0b3IgKiAxMF5lc3RpbWF0
ZWRfcG93ZXIgPT0KKyAgICAvLyAgICBudW1lcmF0b3InIC8gZGVub21pbmF0b3InICogMTBeKGRl
Y2ltYWxfcG9pbnQgLSAxKQorICAgIC8vIEluIHNvbWUgY2FzZXMgZXN0aW1hdGVkX3Bvd2VyIHdh
cyB0b28gbG93LCBhbmQgdGhpcyBpcyBhbHJlYWR5IHRoZSBjYXNlLiBXZQorICAgIC8vIHRoZW4g
c2ltcGx5IGFkanVzdCB0aGUgcG93ZXIgc28gdGhhdCAxMF4oay0xKSA8PSB2IDwgMTBeayAod2l0
aCBrID09CisgICAgLy8gZXN0aW1hdGVkX3Bvd2VyKSBidXQgZG8gbm90IHRvdWNoIHRoZSBudW1l
cmF0b3Igb3IgZGVub21pbmF0b3IuCisgICAgLy8gT3RoZXJ3aXNlIHRoZSByb3V0aW5lIG11bHRp
cGxpZXMgdGhlIG51bWVyYXRvciBhbmQgdGhlIGRlbHRhcyBieSAxMC4KKyAgICBzdGF0aWMgdm9p
ZCBGaXh1cE11bHRpcGx5MTAoaW50IGVzdGltYXRlZF9wb3dlciwgYm9vbCBpc19ldmVuLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGRlY2ltYWxfcG9pbnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogbnVtZXJhdG9yLCBCaWdudW0qIGRlbm9t
aW5hdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIGRlbHRhX21p
bnVzLCBCaWdudW0qIGRlbHRhX3BsdXMpIHsKKyAgICAgICAgYm9vbCBpbl9yYW5nZTsKKyAgICAg
ICAgaWYgKGlzX2V2ZW4pIHsKKyAgICAgICAgICAgIC8vIEZvciBJRUVFIGRvdWJsZXMgaGFsZi13
YXkgY2FzZXMgKGluIGRlY2ltYWwgc3lzdGVtIG51bWJlcnMgZW5kaW5nIHdpdGggNSkKKyAgICAg
ICAgICAgIC8vIGFyZSByb3VuZGVkIHRvIHRoZSBjbG9zZXN0IGZsb2F0aW5nLXBvaW50IG51bWJl
ciB3aXRoIGV2ZW4gc2lnbmlmaWNhbmQuCisgICAgICAgICAgICBpbl9yYW5nZSA9IEJpZ251bTo6
UGx1c0NvbXBhcmUoKm51bWVyYXRvciwgKmRlbHRhX3BsdXMsICpkZW5vbWluYXRvcikgPj0gMDsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGluX3JhbmdlID0gQmlnbnVtOjpQbHVzQ29t
cGFyZSgqbnVtZXJhdG9yLCAqZGVsdGFfcGx1cywgKmRlbm9taW5hdG9yKSA+IDA7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGluX3JhbmdlKSB7CisgICAgICAgICAgICAvLyBTaW5jZSBudW1lcmF0
b3IgKyBkZWx0YV9wbHVzID49IGRlbm9taW5hdG9yIHdlIGFscmVhZHkgaGF2ZQorICAgICAgICAg
ICAgLy8gMSA8PSBudW1lcmF0b3IvZGVub21pbmF0b3IgPCAxMC4gU2ltcGx5IHVwZGF0ZSB0aGUg
ZXN0aW1hdGVkX3Bvd2VyLgorICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSBlc3RpbWF0ZWRf
cG93ZXIgKyAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQg
PSBlc3RpbWF0ZWRfcG93ZXI7CisgICAgICAgICAgICBudW1lcmF0b3ItPlRpbWVzMTAoKTsKKyAg
ICAgICAgICAgIGlmIChCaWdudW06OkVxdWFsKCpkZWx0YV9taW51cywgKmRlbHRhX3BsdXMpKSB7
CisgICAgICAgICAgICAgICAgZGVsdGFfbWludXMtPlRpbWVzMTAoKTsKKyAgICAgICAgICAgICAg
ICBkZWx0YV9wbHVzLT5Bc3NpZ25CaWdudW0oKmRlbHRhX21pbnVzKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgZGVsdGFfbWludXMtPlRpbWVzMTAoKTsKKyAgICAgICAg
ICAgICAgICBkZWx0YV9wbHVzLT5UaW1lczEwKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgCit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9iaWdudW0tZHRvYS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS1kdG9hLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDNmYmFh
YmI3YTU2Mzg1NmYwZmE0Y2Y1NGViN2Y3ZTYyOTYwZTY3OQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9iaWdudW0tZHRvYS5oCkBAIC0wLDAgKzEsODIg
QEAKKy8vIENvcHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisv
LyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAg
ICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAg
ICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
Ky8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8v
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmbmRlZiBET1VCTEVfQ09OVkVSU0lP
Tl9CSUdOVU1fRFRPQV9IXworI2RlZmluZSBET1VCTEVfQ09OVkVSU0lPTl9CSUdOVU1fRFRPQV9I
XworCisjaW5jbHVkZSAidXRpbHMuaCIKKworbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsK
KyAgICAKKyAgICBlbnVtIEJpZ251bUR0b2FNb2RlIHsKKyAgICAgICAgLy8gUmV0dXJuIHRoZSBz
aG9ydGVzdCBjb3JyZWN0IHJlcHJlc2VudGF0aW9uLgorICAgICAgICAvLyBGb3IgZXhhbXBsZSB0
aGUgb3V0cHV0IG9mIDAuMjk5OTk5OTk5OTk5OTk5OTg4ODk3IGlzICh0aGUgbGVzcyBhY2N1cmF0
ZSBidXQKKyAgICAgICAgLy8gY29ycmVjdCkgMC4zLgorICAgICAgICBCSUdOVU1fRFRPQV9TSE9S
VEVTVCwKKyAgICAgICAgLy8gUmV0dXJuIGEgZml4ZWQgbnVtYmVyIG9mIGRpZ2l0cyBhZnRlciB0
aGUgZGVjaW1hbCBwb2ludC4KKyAgICAgICAgLy8gRm9yIGluc3RhbmNlIGZpeGVkKDAuMSwgNCkg
YmVjb21lcyAwLjEwMDAKKyAgICAgICAgLy8gSWYgdGhlIGlucHV0IG51bWJlciBpcyBiaWcsIHRo
ZSBvdXRwdXQgd2lsbCBiZSBiaWcuCisgICAgICAgIEJJR05VTV9EVE9BX0ZJWEVELAorICAgICAg
ICAvLyBSZXR1cm4gYSBmaXhlZCBudW1iZXIgb2YgZGlnaXRzLCBubyBtYXR0ZXIgd2hhdCB0aGUg
ZXhwb25lbnQgaXMuCisgICAgICAgIEJJR05VTV9EVE9BX1BSRUNJU0lPTgorICAgIH07CisgICAg
CisgICAgLy8gQ29udmVydHMgdGhlIGdpdmVuIGRvdWJsZSAndicgdG8gYXNjaWkuCisgICAgLy8g
VGhlIHJlc3VsdCBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgYnVmZmVyICogMTBeKHBvaW50LWxl
bmd0aCkuCisgICAgLy8gVGhlIGJ1ZmZlciB3aWxsIGJlIG51bGwtdGVybWluYXRlZC4KKyAgICAv
LworICAgIC8vIFRoZSBpbnB1dCB2IG11c3QgYmUgPiAwIGFuZCBkaWZmZXJlbnQgZnJvbSBOYU4s
IGFuZCBJbmZpbml0eS4KKyAgICAvLworICAgIC8vIFRoZSBvdXRwdXQgZGVwZW5kcyBvbiB0aGUg
Z2l2ZW4gbW9kZToKKyAgICAvLyAgLSBTSE9SVEVTVDogcHJvZHVjZSB0aGUgbGVhc3QgYW1vdW50
IG9mIGRpZ2l0cyBmb3Igd2hpY2ggdGhlIGludGVybmFsCisgICAgLy8gICBpZGVudGl0eSByZXF1
aXJlbWVudCBpcyBzdGlsbCBzYXRpc2ZpZWQuIElmIHRoZSBkaWdpdHMgYXJlIHByaW50ZWQKKyAg
ICAvLyAgICh0b2dldGhlciB3aXRoIHRoZSBjb3JyZWN0IGV4cG9uZW50KSB0aGVuIHJlYWRpbmcg
dGhpcyBudW1iZXIgd2lsbCBnaXZlCisgICAgLy8gICAndicgYWdhaW4uIFRoZSBidWZmZXIgd2ls
bCBjaG9vc2UgdGhlIHJlcHJlc2VudGF0aW9uIHRoYXQgaXMgY2xvc2VzdCB0bworICAgIC8vICAg
J3YnLiBJZiB0aGVyZSBhcmUgdHdvIGF0IHRoZSBzYW1lIGRpc3RhbmNlLCB0aGFuIHRoZSBudW1i
ZXIgaXMgcm91bmQgdXAuCisgICAgLy8gICBJbiB0aGlzIG1vZGUgdGhlICdyZXF1ZXN0ZWRfZGln
aXRzJyBwYXJhbWV0ZXIgaXMgaWdub3JlZC4KKyAgICAvLyAgLSBGSVhFRDogcHJvZHVjZXMgZGln
aXRzIG5lY2Vzc2FyeSB0byBwcmludCBhIGdpdmVuIG51bWJlciB3aXRoCisgICAgLy8gICAncmVx
dWVzdGVkX2RpZ2l0cycgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50LiBUaGUgcHJvZHVj
ZWQgZGlnaXRzCisgICAgLy8gICBtaWdodCBiZSB0b28gc2hvcnQgaW4gd2hpY2ggY2FzZSB0aGUg
Y2FsbGVyIGhhcyB0byBmaWxsIHRoZSBnYXBzIHdpdGggJzAncy4KKyAgICAvLyAgIEV4YW1wbGU6
IHRvRml4ZWQoMC4wMDEsIDUpIGlzIGFsbG93ZWQgdG8gcmV0dXJuIGJ1ZmZlcj0iMSIsIHBvaW50
PS0yLgorICAgIC8vICAgSGFsZndheSBjYXNlcyBhcmUgcm91bmRlZCB1cC4gVGhlIGNhbGwgdG9G
aXhlZCgwLjE1LCAyKSB0aHVzIHJldHVybnMKKyAgICAvLyAgICAgYnVmZmVyPSIyIiwgcG9pbnQ9
MC4KKyAgICAvLyAgIE5vdGU6IHRoZSBsZW5ndGggb2YgdGhlIHJldHVybmVkIGJ1ZmZlciBoYXMg
bm8gbWVhbmluZyB3cnQgdGhlIHNpZ25pZmljYW5jZQorICAgIC8vICAgb2YgaXRzIGRpZ2l0cy4g
VGhhdCBpcywganVzdCBiZWNhdXNlIGl0IGNvbnRhaW5zICcwJ3MgZG9lcyBub3QgbWVhbiB0aGF0
CisgICAgLy8gICBhbnkgb3RoZXIgZGlnaXQgd291bGQgbm90IHNhdGlzZnkgdGhlIGludGVybmFs
IGlkZW50aXR5IHJlcXVpcmVtZW50LgorICAgIC8vICAtIFBSRUNJU0lPTjogcHJvZHVjZXMgJ3Jl
cXVlc3RlZF9kaWdpdHMnIHdoZXJlIHRoZSBmaXJzdCBkaWdpdCBpcyBub3QgJzAnLgorICAgIC8v
ICAgRXZlbiB0aG91Z2ggdGhlIGxlbmd0aCBvZiBwcm9kdWNlZCBkaWdpdHMgdXN1YWxseSBlcXVh
bHMKKyAgICAvLyAgICdyZXF1ZXN0ZWRfZGlnaXRzJywgdGhlIGZ1bmN0aW9uIGlzIGFsbG93ZWQg
dG8gcmV0dXJuIGZld2VyIGRpZ2l0cywgaW4KKyAgICAvLyAgIHdoaWNoIGNhc2UgdGhlIGNhbGxl
ciBoYXMgdG8gZmlsbCB0aGUgbWlzc2luZyBkaWdpdHMgd2l0aCAnMCdzLgorICAgIC8vICAgSGFs
ZndheSBjYXNlcyBhcmUgYWdhaW4gcm91bmRlZCB1cC4KKyAgICAvLyAnQmlnbnVtRHRvYScgZXhw
ZWN0cyB0aGUgZ2l2ZW4gYnVmZmVyIHRvIGJlIGJpZyBlbm91Z2ggdG8gaG9sZCBhbGwgZGlnaXRz
CisgICAgLy8gYW5kIGEgdGVybWluYXRpbmcgbnVsbC1jaGFyYWN0ZXIuCisgICAgdm9pZCBCaWdu
dW1EdG9hKGRvdWJsZSB2LCBCaWdudW1EdG9hTW9kZSBtb2RlLCBpbnQgcmVxdWVzdGVkX2RpZ2l0
cywKKyAgICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwgaW50KiBsZW5ndGgs
IGludCogcG9pbnQpOworICAgIAorfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCisK
KyNlbmRpZiAgLy8gRE9VQkxFX0NPTlZFUlNJT05fQklHTlVNX0RUT0FfSF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9iaWdudW0uY2MgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL2R0b2EvYmlnbnVtLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRmMDE1NDY2MjVlZDkzN2Fm
OGYxNDBmMTRkMTA1N2Y1OTExNTJiNjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL2R0b2EvYmlnbnVtLmNjCkBAIC0wLDAgKzEsNzY0IEBACisvLyBDb3B5cmln
aHQgMjAxMCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
Ky8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVy
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8v
ICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8g
ICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
Ky8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKKyNpbmNsdWRlICJiaWdudW0uaCIKKyNpbmNsdWRlICJ1dGlscy5o
IgorCituYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIEJpZ251bTo6Qmln
bnVtKCkKKyAgICA6IGJpZ2l0c18oYmlnaXRzX2J1ZmZlcl8sIGtCaWdpdENhcGFjaXR5KSwgdXNl
ZF9kaWdpdHNfKDApLCBleHBvbmVudF8oMCkgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGtCaWdpdENhcGFjaXR5OyArK2kpIHsKKyAgICAgICAgICAgIGJpZ2l0c19baV0gPSAwOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFM+CisgICAg
c3RhdGljIGludCBCaXRTaXplKFMgdmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIDggKiBzaXplb2Yo
dmFsdWUpOworICAgIH0KKyAgICAKKyAgICAvLyBHdWFyYW50ZWVkIHRvIGxpZSBpbiBvbmUgQmln
aXQuCisgICAgdm9pZCBCaWdudW06OkFzc2lnblVJbnQxNih1aW50MTZfdCB2YWx1ZSkgeworICAg
ICAgICBBU1NFUlQoa0JpZ2l0U2l6ZSA+PSBCaXRTaXplKHZhbHVlKSk7CisgICAgICAgIFplcm8o
KTsKKyAgICAgICAgaWYgKHZhbHVlID09IDApIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIEVu
c3VyZUNhcGFjaXR5KDEpOworICAgICAgICBiaWdpdHNfWzBdID0gdmFsdWU7CisgICAgICAgIHVz
ZWRfZGlnaXRzXyA9IDE7CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpBc3Np
Z25VSW50NjQodWludDY0X3QgdmFsdWUpIHsKKyAgICAgICAgY29uc3QgaW50IGtVSW50NjRTaXpl
ID0gNjQ7CisgICAgICAgIAorICAgICAgICBaZXJvKCk7CisgICAgICAgIGlmICh2YWx1ZSA9PSAw
KSByZXR1cm47CisgICAgICAgIAorICAgICAgICBpbnQgbmVlZGVkX2JpZ2l0cyA9IGtVSW50NjRT
aXplIC8ga0JpZ2l0U2l6ZSArIDE7CisgICAgICAgIEVuc3VyZUNhcGFjaXR5KG5lZWRlZF9iaWdp
dHMpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5lZWRlZF9iaWdpdHM7ICsraSkgewor
ICAgICAgICAgICAgYmlnaXRzX1tpXSA9IHZhbHVlICYga0JpZ2l0TWFzazsKKyAgICAgICAgICAg
IHZhbHVlID0gdmFsdWUgPj4ga0JpZ2l0U2l6ZTsKKyAgICAgICAgfQorICAgICAgICB1c2VkX2Rp
Z2l0c18gPSBuZWVkZWRfYmlnaXRzOworICAgICAgICBDbGFtcCgpOworICAgIH0KKyAgICAKKyAg
ICAKKyAgICB2b2lkIEJpZ251bTo6QXNzaWduQmlnbnVtKGNvbnN0IEJpZ251bSYgb3RoZXIpIHsK
KyAgICAgICAgZXhwb25lbnRfID0gb3RoZXIuZXhwb25lbnRfOworICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IG90aGVyLnVzZWRfZGlnaXRzXzsgKytpKSB7CisgICAgICAgICAgICBiaWdpdHNf
W2ldID0gb3RoZXIuYmlnaXRzX1tpXTsKKyAgICAgICAgfQorICAgICAgICAvLyBDbGVhciB0aGUg
ZXhjZXNzIGRpZ2l0cyAoaWYgdGhlcmUgd2VyZSBhbnkpLgorICAgICAgICBmb3IgKGludCBpID0g
b3RoZXIudXNlZF9kaWdpdHNfOyBpIDwgdXNlZF9kaWdpdHNfOyArK2kpIHsKKyAgICAgICAgICAg
IGJpZ2l0c19baV0gPSAwOworICAgICAgICB9CisgICAgICAgIHVzZWRfZGlnaXRzXyA9IG90aGVy
LnVzZWRfZGlnaXRzXzsKKyAgICB9CisgICAgCisgICAgCisgICAgc3RhdGljIHVpbnQ2NF90IFJl
YWRVSW50NjQoVmVjdG9yPGNvbnN0IGNoYXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
ZGlnaXRzX3RvX3JlYWQpIHsKKyAgICAgICAgdWludDY0X3QgcmVzdWx0ID0gMDsKKyAgICAgICAg
Zm9yIChpbnQgaSA9IGZyb207IGkgPCBmcm9tICsgZGlnaXRzX3RvX3JlYWQ7ICsraSkgeworICAg
ICAgICAgICAgaW50IGRpZ2l0ID0gYnVmZmVyW2ldIC0gJzAnOworICAgICAgICAgICAgQVNTRVJU
KDAgPD0gZGlnaXQgJiYgZGlnaXQgPD0gOSk7CisgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQg
KiAxMCArIGRpZ2l0OworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
ICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpBc3NpZ25EZWNpbWFsU3RyaW5nKFZlY3Rvcjxj
b25zdCBjaGFyPiB2YWx1ZSkgeworICAgICAgICAvLyAyXjY0ID0gMTg0NDY3NDQwNzM3MDk1NTE2
MTYgPiAxMF4xOQorICAgICAgICBjb25zdCBpbnQga01heFVpbnQ2NERlY2ltYWxEaWdpdHMgPSAx
OTsKKyAgICAgICAgWmVybygpOworICAgICAgICBpbnQgbGVuZ3RoID0gdmFsdWUubGVuZ3RoKCk7
CisgICAgICAgIGludCBwb3MgPSAwOworICAgICAgICAvLyBMZXQncyBqdXN0IHNheSB0aGF0IGVh
Y2ggZGlnaXQgbmVlZHMgNCBiaXRzLgorICAgICAgICB3aGlsZSAobGVuZ3RoID49IGtNYXhVaW50
NjREZWNpbWFsRGlnaXRzKSB7CisgICAgICAgICAgICB1aW50NjRfdCBkaWdpdHMgPSBSZWFkVUlu
dDY0KHZhbHVlLCBwb3MsIGtNYXhVaW50NjREZWNpbWFsRGlnaXRzKTsKKyAgICAgICAgICAgIHBv
cyArPSBrTWF4VWludDY0RGVjaW1hbERpZ2l0czsKKyAgICAgICAgICAgIGxlbmd0aCAtPSBrTWF4
VWludDY0RGVjaW1hbERpZ2l0czsKKyAgICAgICAgICAgIE11bHRpcGx5QnlQb3dlck9mVGVuKGtN
YXhVaW50NjREZWNpbWFsRGlnaXRzKTsKKyAgICAgICAgICAgIEFkZFVJbnQ2NChkaWdpdHMpOwor
ICAgICAgICB9CisgICAgICAgIHVpbnQ2NF90IGRpZ2l0cyA9IFJlYWRVSW50NjQodmFsdWUsIHBv
cywgbGVuZ3RoKTsKKyAgICAgICAgTXVsdGlwbHlCeVBvd2VyT2ZUZW4obGVuZ3RoKTsKKyAgICAg
ICAgQWRkVUludDY0KGRpZ2l0cyk7CisgICAgICAgIENsYW1wKCk7CisgICAgfQorICAgIAorICAg
IAorICAgIHN0YXRpYyBpbnQgSGV4Q2hhclZhbHVlKGNoYXIgYykgeworICAgICAgICBpZiAoJzAn
IDw9IGMgJiYgYyA8PSAnOScpIHJldHVybiBjIC0gJzAnOworICAgICAgICBpZiAoJ2EnIDw9IGMg
JiYgYyA8PSAnZicpIHJldHVybiAxMCArIGMgLSAnYSc7CisgICAgICAgIGlmICgnQScgPD0gYyAm
JiBjIDw9ICdGJykgcmV0dXJuIDEwICsgYyAtICdBJzsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgcmV0dXJuIDA7ICAvLyBUbyBtYWtlIGNvbXBpbGVyIGhhcHB5LgorICAgIH0KKyAg
ICAKKyAgICAKKyAgICB2b2lkIEJpZ251bTo6QXNzaWduSGV4U3RyaW5nKFZlY3Rvcjxjb25zdCBj
aGFyPiB2YWx1ZSkgeworICAgICAgICBaZXJvKCk7CisgICAgICAgIGludCBsZW5ndGggPSB2YWx1
ZS5sZW5ndGgoKTsKKyAgICAgICAgCisgICAgICAgIGludCBuZWVkZWRfYmlnaXRzID0gbGVuZ3Ro
ICogNCAvIGtCaWdpdFNpemUgKyAxOworICAgICAgICBFbnN1cmVDYXBhY2l0eShuZWVkZWRfYmln
aXRzKTsKKyAgICAgICAgaW50IHN0cmluZ19pbmRleCA9IGxlbmd0aCAtIDE7CisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbmVlZGVkX2JpZ2l0cyAtIDE7ICsraSkgeworICAgICAgICAgICAg
Ly8gVGhlc2UgYmlnaXRzIGFyZSBndWFyYW50ZWVkIHRvIGJlICJmdWxsIi4KKyAgICAgICAgICAg
IENodW5rIGN1cnJlbnRfYmlnaXQgPSAwOworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGog
PCBrQmlnaXRTaXplIC8gNDsgaisrKSB7CisgICAgICAgICAgICAgICAgY3VycmVudF9iaWdpdCAr
PSBIZXhDaGFyVmFsdWUodmFsdWVbc3RyaW5nX2luZGV4LS1dKSA8PCAoaiAqIDQpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYmlnaXRzX1tpXSA9IGN1cnJlbnRfYmlnaXQ7CisgICAgICAg
IH0KKyAgICAgICAgdXNlZF9kaWdpdHNfID0gbmVlZGVkX2JpZ2l0cyAtIDE7CisgICAgICAgIAor
ICAgICAgICBDaHVuayBtb3N0X3NpZ25pZmljYW50X2JpZ2l0ID0gMDsgIC8vIENvdWxkIGJlID0g
MDsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPD0gc3RyaW5nX2luZGV4OyArK2opIHsKKyAg
ICAgICAgICAgIG1vc3Rfc2lnbmlmaWNhbnRfYmlnaXQgPDw9IDQ7CisgICAgICAgICAgICBtb3N0
X3NpZ25pZmljYW50X2JpZ2l0ICs9IEhleENoYXJWYWx1ZSh2YWx1ZVtqXSk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKG1vc3Rfc2lnbmlmaWNhbnRfYmlnaXQgIT0gMCkgeworICAgICAgICAgICAg
YmlnaXRzX1t1c2VkX2RpZ2l0c19dID0gbW9zdF9zaWduaWZpY2FudF9iaWdpdDsKKyAgICAgICAg
ICAgIHVzZWRfZGlnaXRzXysrOworICAgICAgICB9CisgICAgICAgIENsYW1wKCk7CisgICAgfQor
ICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpBZGRVSW50NjQodWludDY0X3Qgb3BlcmFuZCkg
eworICAgICAgICBpZiAob3BlcmFuZCA9PSAwKSByZXR1cm47CisgICAgICAgIEJpZ251bSBvdGhl
cjsKKyAgICAgICAgb3RoZXIuQXNzaWduVUludDY0KG9wZXJhbmQpOworICAgICAgICBBZGRCaWdu
dW0ob3RoZXIpOworICAgIH0KKyAgICAKKyAgICAKKyAgICB2b2lkIEJpZ251bTo6QWRkQmlnbnVt
KGNvbnN0IEJpZ251bSYgb3RoZXIpIHsKKyAgICAgICAgQVNTRVJUKElzQ2xhbXBlZCgpKTsKKyAg
ICAgICAgQVNTRVJUKG90aGVyLklzQ2xhbXBlZCgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIElm
IHRoaXMgaGFzIGEgZ3JlYXRlciBleHBvbmVudCB0aGFuIG90aGVyIGFwcGVuZCB6ZXJvLWJpZ2l0
cyB0byB0aGlzLgorICAgICAgICAvLyBBZnRlciB0aGlzIGNhbGwgZXhwb25lbnRfIDw9IG90aGVy
LmV4cG9uZW50Xy4KKyAgICAgICAgQWxpZ24ob3RoZXIpOworICAgICAgICAKKyAgICAgICAgLy8g
VGhlcmUgYXJlIHR3byBwb3NzaWJpbGl0aWVzOgorICAgICAgICAvLyAgIGFhYWFhYWFhYWFhIDAw
MDAgICh3aGVyZSB0aGUgMHMgcmVwcmVzZW50IGEncyBleHBvbmVudCkKKyAgICAgICAgLy8gICAg
IGJiYmJiIDAwMDAwMDAwCisgICAgICAgIC8vICAgLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAv
LyAgIGNjY2NjY2NjY2NjIDAwMDAKKyAgICAgICAgLy8gb3IKKyAgICAgICAgLy8gICAgYWFhYWFh
YWFhYSAwMDAwCisgICAgICAgIC8vICBiYmJiYmJiYmIgMDAwMDAwMAorICAgICAgICAvLyAgLS0t
LS0tLS0tLS0tLS0tLS0KKyAgICAgICAgLy8gIGNjY2NjY2NjY2NjYyAwMDAwCisgICAgICAgIC8v
IEluIGJvdGggY2FzZXMgd2UgbWlnaHQgbmVlZCBhIGNhcnJ5IGJpZ2l0LgorICAgICAgICAKKyAg
ICAgICAgRW5zdXJlQ2FwYWNpdHkoMSArIE1heChCaWdpdExlbmd0aCgpLCBvdGhlci5CaWdpdExl
bmd0aCgpKSAtIGV4cG9uZW50Xyk7CisgICAgICAgIENodW5rIGNhcnJ5ID0gMDsKKyAgICAgICAg
aW50IGJpZ2l0X3BvcyA9IG90aGVyLmV4cG9uZW50XyAtIGV4cG9uZW50XzsKKyAgICAgICAgQVNT
RVJUKGJpZ2l0X3BvcyA+PSAwKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvdGhlci51
c2VkX2RpZ2l0c187ICsraSkgeworICAgICAgICAgICAgQ2h1bmsgc3VtID0gYmlnaXRzX1tiaWdp
dF9wb3NdICsgb3RoZXIuYmlnaXRzX1tpXSArIGNhcnJ5OworICAgICAgICAgICAgYmlnaXRzX1ti
aWdpdF9wb3NdID0gc3VtICYga0JpZ2l0TWFzazsKKyAgICAgICAgICAgIGNhcnJ5ID0gc3VtID4+
IGtCaWdpdFNpemU7CisgICAgICAgICAgICBiaWdpdF9wb3MrKzsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgd2hpbGUgKGNhcnJ5ICE9IDApIHsKKyAgICAgICAgICAgIENodW5rIHN1bSA9
IGJpZ2l0c19bYmlnaXRfcG9zXSArIGNhcnJ5OworICAgICAgICAgICAgYmlnaXRzX1tiaWdpdF9w
b3NdID0gc3VtICYga0JpZ2l0TWFzazsKKyAgICAgICAgICAgIGNhcnJ5ID0gc3VtID4+IGtCaWdp
dFNpemU7CisgICAgICAgICAgICBiaWdpdF9wb3MrKzsKKyAgICAgICAgfQorICAgICAgICB1c2Vk
X2RpZ2l0c18gPSBNYXgoYmlnaXRfcG9zLCB1c2VkX2RpZ2l0c18pOworICAgICAgICBBU1NFUlQo
SXNDbGFtcGVkKCkpOworICAgIH0KKyAgICAKKyAgICAKKyAgICB2b2lkIEJpZ251bTo6U3VidHJh
Y3RCaWdudW0oY29uc3QgQmlnbnVtJiBvdGhlcikgeworICAgICAgICBBU1NFUlQoSXNDbGFtcGVk
KCkpOworICAgICAgICBBU1NFUlQob3RoZXIuSXNDbGFtcGVkKCkpOworICAgICAgICAvLyBXZSBy
ZXF1aXJlIHRoaXMgdG8gYmUgYmlnZ2VyIHRoYW4gb3RoZXIuCisgICAgICAgIEFTU0VSVChMZXNz
RXF1YWwob3RoZXIsICp0aGlzKSk7CisgICAgICAgIAorICAgICAgICBBbGlnbihvdGhlcik7Cisg
ICAgICAgIAorICAgICAgICBpbnQgb2Zmc2V0ID0gb3RoZXIuZXhwb25lbnRfIC0gZXhwb25lbnRf
OworICAgICAgICBDaHVuayBib3Jyb3cgPSAwOworICAgICAgICBpbnQgaTsKKyAgICAgICAgZm9y
IChpID0gMDsgaSA8IG90aGVyLnVzZWRfZGlnaXRzXzsgKytpKSB7CisgICAgICAgICAgICBBU1NF
UlQoKGJvcnJvdyA9PSAwKSB8fCAoYm9ycm93ID09IDEpKTsKKyAgICAgICAgICAgIENodW5rIGRp
ZmZlcmVuY2UgPSBiaWdpdHNfW2kgKyBvZmZzZXRdIC0gb3RoZXIuYmlnaXRzX1tpXSAtIGJvcnJv
dzsKKyAgICAgICAgICAgIGJpZ2l0c19baSArIG9mZnNldF0gPSBkaWZmZXJlbmNlICYga0JpZ2l0
TWFzazsKKyAgICAgICAgICAgIGJvcnJvdyA9IGRpZmZlcmVuY2UgPj4gKGtDaHVua1NpemUgLSAx
KTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoYm9ycm93ICE9IDApIHsKKyAgICAgICAgICAg
IENodW5rIGRpZmZlcmVuY2UgPSBiaWdpdHNfW2kgKyBvZmZzZXRdIC0gYm9ycm93OworICAgICAg
ICAgICAgYmlnaXRzX1tpICsgb2Zmc2V0XSA9IGRpZmZlcmVuY2UgJiBrQmlnaXRNYXNrOworICAg
ICAgICAgICAgYm9ycm93ID0gZGlmZmVyZW5jZSA+PiAoa0NodW5rU2l6ZSAtIDEpOworICAgICAg
ICAgICAgKytpOworICAgICAgICB9CisgICAgICAgIENsYW1wKCk7CisgICAgfQorICAgIAorICAg
IAorICAgIHZvaWQgQmlnbnVtOjpTaGlmdExlZnQoaW50IHNoaWZ0X2Ftb3VudCkgeworICAgICAg
ICBpZiAodXNlZF9kaWdpdHNfID09IDApIHJldHVybjsKKyAgICAgICAgZXhwb25lbnRfICs9IHNo
aWZ0X2Ftb3VudCAvIGtCaWdpdFNpemU7CisgICAgICAgIGludCBsb2NhbF9zaGlmdCA9IHNoaWZ0
X2Ftb3VudCAlIGtCaWdpdFNpemU7CisgICAgICAgIEVuc3VyZUNhcGFjaXR5KHVzZWRfZGlnaXRz
XyArIDEpOworICAgICAgICBCaWdpdHNTaGlmdExlZnQobG9jYWxfc2hpZnQpOworICAgIH0KKyAg
ICAKKyAgICAKKyAgICB2b2lkIEJpZ251bTo6TXVsdGlwbHlCeVVJbnQzMih1aW50MzJfdCBmYWN0
b3IpIHsKKyAgICAgICAgaWYgKGZhY3RvciA9PSAxKSByZXR1cm47CisgICAgICAgIGlmIChmYWN0
b3IgPT0gMCkgeworICAgICAgICAgICAgWmVybygpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIGlmICh1c2VkX2RpZ2l0c18gPT0gMCkgcmV0dXJuOworICAgICAgICAK
KyAgICAgICAgLy8gVGhlIHByb2R1Y3Qgb2YgYSBiaWdpdCB3aXRoIHRoZSBmYWN0b3IgaXMgb2Yg
c2l6ZSBrQmlnaXRTaXplICsgMzIuCisgICAgICAgIC8vIEFzc2VydCB0aGF0IHRoaXMgbnVtYmVy
ICsgMSAoZm9yIHRoZSBjYXJyeSkgZml0cyBpbnRvIGRvdWJsZSBjaHVuay4KKyAgICAgICAgQVNT
RVJUKGtEb3VibGVDaHVua1NpemUgPj0ga0JpZ2l0U2l6ZSArIDMyICsgMSk7CisgICAgICAgIERv
dWJsZUNodW5rIGNhcnJ5ID0gMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1c2VkX2Rp
Z2l0c187ICsraSkgeworICAgICAgICAgICAgRG91YmxlQ2h1bmsgcHJvZHVjdCA9IHN0YXRpY19j
YXN0PERvdWJsZUNodW5rPihmYWN0b3IpICogYmlnaXRzX1tpXSArIGNhcnJ5OworICAgICAgICAg
ICAgYmlnaXRzX1tpXSA9IHN0YXRpY19jYXN0PENodW5rPihwcm9kdWN0ICYga0JpZ2l0TWFzayk7
CisgICAgICAgICAgICBjYXJyeSA9IChwcm9kdWN0ID4+IGtCaWdpdFNpemUpOworICAgICAgICB9
CisgICAgICAgIHdoaWxlIChjYXJyeSAhPSAwKSB7CisgICAgICAgICAgICBFbnN1cmVDYXBhY2l0
eSh1c2VkX2RpZ2l0c18gKyAxKTsKKyAgICAgICAgICAgIGJpZ2l0c19bdXNlZF9kaWdpdHNfXSA9
IGNhcnJ5ICYga0JpZ2l0TWFzazsKKyAgICAgICAgICAgIHVzZWRfZGlnaXRzXysrOworICAgICAg
ICAgICAgY2FycnkgPj49IGtCaWdpdFNpemU7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
CisgICAgdm9pZCBCaWdudW06Ok11bHRpcGx5QnlVSW50NjQodWludDY0X3QgZmFjdG9yKSB7Cisg
ICAgICAgIGlmIChmYWN0b3IgPT0gMSkgcmV0dXJuOworICAgICAgICBpZiAoZmFjdG9yID09IDAp
IHsKKyAgICAgICAgICAgIFplcm8oKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBBU1NFUlQoa0JpZ2l0U2l6ZSA8IDMyKTsKKyAgICAgICAgdWludDY0X3QgY2Fycnkg
PSAwOworICAgICAgICB1aW50NjRfdCBsb3cgPSBmYWN0b3IgJiAweEZGRkZGRkZGOworICAgICAg
ICB1aW50NjRfdCBoaWdoID0gZmFjdG9yID4+IDMyOworICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IHVzZWRfZGlnaXRzXzsgKytpKSB7CisgICAgICAgICAgICB1aW50NjRfdCBwcm9kdWN0X2xv
dyA9IGxvdyAqIGJpZ2l0c19baV07CisgICAgICAgICAgICB1aW50NjRfdCBwcm9kdWN0X2hpZ2gg
PSBoaWdoICogYmlnaXRzX1tpXTsKKyAgICAgICAgICAgIHVpbnQ2NF90IHRtcCA9IChjYXJyeSAm
IGtCaWdpdE1hc2spICsgcHJvZHVjdF9sb3c7CisgICAgICAgICAgICBiaWdpdHNfW2ldID0gdG1w
ICYga0JpZ2l0TWFzazsKKyAgICAgICAgICAgIGNhcnJ5ID0gKGNhcnJ5ID4+IGtCaWdpdFNpemUp
ICsgKHRtcCA+PiBrQmlnaXRTaXplKSArCisgICAgICAgICAgICAocHJvZHVjdF9oaWdoIDw8ICgz
MiAtIGtCaWdpdFNpemUpKTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoY2FycnkgIT0gMCkg
eworICAgICAgICAgICAgRW5zdXJlQ2FwYWNpdHkodXNlZF9kaWdpdHNfICsgMSk7CisgICAgICAg
ICAgICBiaWdpdHNfW3VzZWRfZGlnaXRzX10gPSBjYXJyeSAmIGtCaWdpdE1hc2s7CisgICAgICAg
ICAgICB1c2VkX2RpZ2l0c18rKzsKKyAgICAgICAgICAgIGNhcnJ5ID4+PSBrQmlnaXRTaXplOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpNdWx0aXBseUJ5
UG93ZXJPZlRlbihpbnQgZXhwb25lbnQpIHsKKyAgICAgICAgY29uc3QgdWludDY0X3Qga0ZpdmUy
NyA9IFVJTlQ2NF8yUEFSVF9DKDB4Njc2NWM3OTMsIGZhMTAwNzlkKTsKKyAgICAgICAgY29uc3Qg
dWludDE2X3Qga0ZpdmUxID0gNTsKKyAgICAgICAgY29uc3QgdWludDE2X3Qga0ZpdmUyID0ga0Zp
dmUxICogNTsKKyAgICAgICAgY29uc3QgdWludDE2X3Qga0ZpdmUzID0ga0ZpdmUyICogNTsKKyAg
ICAgICAgY29uc3QgdWludDE2X3Qga0ZpdmU0ID0ga0ZpdmUzICogNTsKKyAgICAgICAgY29uc3Qg
dWludDE2X3Qga0ZpdmU1ID0ga0ZpdmU0ICogNTsKKyAgICAgICAgY29uc3QgdWludDE2X3Qga0Zp
dmU2ID0ga0ZpdmU1ICogNTsKKyAgICAgICAgY29uc3QgdWludDMyX3Qga0ZpdmU3ID0ga0ZpdmU2
ICogNTsKKyAgICAgICAgY29uc3QgdWludDMyX3Qga0ZpdmU4ID0ga0ZpdmU3ICogNTsKKyAgICAg
ICAgY29uc3QgdWludDMyX3Qga0ZpdmU5ID0ga0ZpdmU4ICogNTsKKyAgICAgICAgY29uc3QgdWlu
dDMyX3Qga0ZpdmUxMCA9IGtGaXZlOSAqIDU7CisgICAgICAgIGNvbnN0IHVpbnQzMl90IGtGaXZl
MTEgPSBrRml2ZTEwICogNTsKKyAgICAgICAgY29uc3QgdWludDMyX3Qga0ZpdmUxMiA9IGtGaXZl
MTEgKiA1OworICAgICAgICBjb25zdCB1aW50MzJfdCBrRml2ZTEzID0ga0ZpdmUxMiAqIDU7Cisg
ICAgICAgIGNvbnN0IHVpbnQzMl90IGtGaXZlMV90b18xMltdID0KKyAgICAgICAgeyBrRml2ZTEs
IGtGaXZlMiwga0ZpdmUzLCBrRml2ZTQsIGtGaXZlNSwga0ZpdmU2LAorICAgICAgICAgICAga0Zp
dmU3LCBrRml2ZTgsIGtGaXZlOSwga0ZpdmUxMCwga0ZpdmUxMSwga0ZpdmUxMiB9OworICAgICAg
ICAKKyAgICAgICAgQVNTRVJUKGV4cG9uZW50ID49IDApOworICAgICAgICBpZiAoZXhwb25lbnQg
PT0gMCkgcmV0dXJuOworICAgICAgICBpZiAodXNlZF9kaWdpdHNfID09IDApIHJldHVybjsKKyAg
ICAgICAgCisgICAgICAgIC8vIFdlIHNoaWZ0IGJ5IGV4cG9uZW50IGF0IHRoZSBlbmQganVzdCBi
ZWZvcmUgcmV0dXJuaW5nLgorICAgICAgICBpbnQgcmVtYWluaW5nX2V4cG9uZW50ID0gZXhwb25l
bnQ7CisgICAgICAgIHdoaWxlIChyZW1haW5pbmdfZXhwb25lbnQgPj0gMjcpIHsKKyAgICAgICAg
ICAgIE11bHRpcGx5QnlVSW50NjQoa0ZpdmUyNyk7CisgICAgICAgICAgICByZW1haW5pbmdfZXhw
b25lbnQgLT0gMjc7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKHJlbWFpbmluZ19leHBvbmVu
dCA+PSAxMykgeworICAgICAgICAgICAgTXVsdGlwbHlCeVVJbnQzMihrRml2ZTEzKTsKKyAgICAg
ICAgICAgIHJlbWFpbmluZ19leHBvbmVudCAtPSAxMzsKKyAgICAgICAgfQorICAgICAgICBpZiAo
cmVtYWluaW5nX2V4cG9uZW50ID4gMCkgeworICAgICAgICAgICAgTXVsdGlwbHlCeVVJbnQzMihr
Rml2ZTFfdG9fMTJbcmVtYWluaW5nX2V4cG9uZW50IC0gMV0pOworICAgICAgICB9CisgICAgICAg
IFNoaWZ0TGVmdChleHBvbmVudCk7CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVt
OjpTcXVhcmUoKSB7CisgICAgICAgIEFTU0VSVChJc0NsYW1wZWQoKSk7CisgICAgICAgIGludCBw
cm9kdWN0X2xlbmd0aCA9IDIgKiB1c2VkX2RpZ2l0c187CisgICAgICAgIEVuc3VyZUNhcGFjaXR5
KHByb2R1Y3RfbGVuZ3RoKTsKKyAgICAgICAgCisgICAgICAgIC8vIENvbWJhIG11bHRpcGxpY2F0
aW9uOiBjb21wdXRlIGVhY2ggY29sdW1uIHNlcGFyYXRlbHkuCisgICAgICAgIC8vIEV4YW1wbGU6
IHIgPSBhMmExYTAgKiBiMmIxYjAuCisgICAgICAgIC8vICAgIHIgPSAgMSAgICAqIGEwYjAgKwor
ICAgICAgICAvLyAgICAgICAgMTAgICAgKiAoYTFiMCArIGEwYjEpICsKKyAgICAgICAgLy8gICAg
ICAgIDEwMCAgICogKGEyYjAgKyBhMWIxICsgYTBiMikgKworICAgICAgICAvLyAgICAgICAgMTAw
MCAgKiAoYTJiMSArIGExYjIpICsKKyAgICAgICAgLy8gICAgICAgIDEwMDAwICogYTJiMgorICAg
ICAgICAvLworICAgICAgICAvLyBJbiB0aGUgd29yc3QgY2FzZSB3ZSBoYXZlIHRvIGFjY3VtdWxh
dGUgbmItZGlnaXRzIHByb2R1Y3RzIG9mIGRpZ2l0KmRpZ2l0LgorICAgICAgICAvLworICAgICAg
ICAvLyBBc3NlcnQgdGhhdCB0aGUgYWRkaXRpb25hbCBudW1iZXIgb2YgYml0cyBpbiBhIERvdWJs
ZUNodW5rIGFyZSBlbm91Z2ggdG8KKyAgICAgICAgLy8gc3VtIHVwIHVzZWRfZGlnaXRzIG9mIEJp
Z2l0KkJpZ2l0LgorICAgICAgICBpZiAoKDEgPDwgKDIgKiAoa0NodW5rU2l6ZSAtIGtCaWdpdFNp
emUpKSkgPD0gdXNlZF9kaWdpdHNfKSB7CisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgRG91YmxlQ2h1bmsgYWNjdW11bGF0b3IgPSAwOworICAgICAgICAv
LyBGaXJzdCBzaGlmdCB0aGUgZGlnaXRzIHNvIHdlIGRvbid0IG92ZXJ3cml0ZSB0aGVtLgorICAg
ICAgICBpbnQgY29weV9vZmZzZXQgPSB1c2VkX2RpZ2l0c187CisgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgdXNlZF9kaWdpdHNfOyArK2kpIHsKKyAgICAgICAgICAgIGJpZ2l0c19bY29weV9v
ZmZzZXQgKyBpXSA9IGJpZ2l0c19baV07CisgICAgICAgIH0KKyAgICAgICAgLy8gV2UgaGF2ZSB0
d28gbG9vcHMgdG8gYXZvaWQgc29tZSAnaWYncyBpbiB0aGUgbG9vcC4KKyAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCB1c2VkX2RpZ2l0c187ICsraSkgeworICAgICAgICAgICAgLy8gUHJvY2Vz
cyB0ZW1wb3JhcnkgZGlnaXQgaSB3aXRoIHBvd2VyIGkuCisgICAgICAgICAgICAvLyBUaGUgc3Vt
IG9mIHRoZSB0d28gaW5kaWNlcyBtdXN0IGJlIGVxdWFsIHRvIGkuCisgICAgICAgICAgICBpbnQg
YmlnaXRfaW5kZXgxID0gaTsKKyAgICAgICAgICAgIGludCBiaWdpdF9pbmRleDIgPSAwOworICAg
ICAgICAgICAgLy8gU3VtIGFsbCBvZiB0aGUgc3ViLXByb2R1Y3RzLgorICAgICAgICAgICAgd2hp
bGUgKGJpZ2l0X2luZGV4MSA+PSAwKSB7CisgICAgICAgICAgICAgICAgQ2h1bmsgY2h1bmsxID0g
YmlnaXRzX1tjb3B5X29mZnNldCArIGJpZ2l0X2luZGV4MV07CisgICAgICAgICAgICAgICAgQ2h1
bmsgY2h1bmsyID0gYmlnaXRzX1tjb3B5X29mZnNldCArIGJpZ2l0X2luZGV4Ml07CisgICAgICAg
ICAgICAgICAgYWNjdW11bGF0b3IgKz0gc3RhdGljX2Nhc3Q8RG91YmxlQ2h1bms+KGNodW5rMSkg
KiBjaHVuazI7CisgICAgICAgICAgICAgICAgYmlnaXRfaW5kZXgxLS07CisgICAgICAgICAgICAg
ICAgYmlnaXRfaW5kZXgyKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBiaWdpdHNfW2ld
ID0gc3RhdGljX2Nhc3Q8Q2h1bms+KGFjY3VtdWxhdG9yKSAmIGtCaWdpdE1hc2s7CisgICAgICAg
ICAgICBhY2N1bXVsYXRvciA+Pj0ga0JpZ2l0U2l6ZTsKKyAgICAgICAgfQorICAgICAgICBmb3Ig
KGludCBpID0gdXNlZF9kaWdpdHNfOyBpIDwgcHJvZHVjdF9sZW5ndGg7ICsraSkgeworICAgICAg
ICAgICAgaW50IGJpZ2l0X2luZGV4MSA9IHVzZWRfZGlnaXRzXyAtIDE7CisgICAgICAgICAgICBp
bnQgYmlnaXRfaW5kZXgyID0gaSAtIGJpZ2l0X2luZGV4MTsKKyAgICAgICAgICAgIC8vIEludmFy
aWFudDogc3VtIG9mIGJvdGggaW5kaWNlcyBpcyBhZ2FpbiBlcXVhbCB0byBpLgorICAgICAgICAg
ICAgLy8gSW5uZXIgbG9vcCBydW5zIDAgdGltZXMgb24gbGFzdCBpdGVyYXRpb24sIGVtcHR5aW5n
IGFjY3VtdWxhdG9yLgorICAgICAgICAgICAgd2hpbGUgKGJpZ2l0X2luZGV4MiA8IHVzZWRfZGln
aXRzXykgeworICAgICAgICAgICAgICAgIENodW5rIGNodW5rMSA9IGJpZ2l0c19bY29weV9vZmZz
ZXQgKyBiaWdpdF9pbmRleDFdOworICAgICAgICAgICAgICAgIENodW5rIGNodW5rMiA9IGJpZ2l0
c19bY29weV9vZmZzZXQgKyBiaWdpdF9pbmRleDJdOworICAgICAgICAgICAgICAgIGFjY3VtdWxh
dG9yICs9IHN0YXRpY19jYXN0PERvdWJsZUNodW5rPihjaHVuazEpICogY2h1bmsyOworICAgICAg
ICAgICAgICAgIGJpZ2l0X2luZGV4MS0tOworICAgICAgICAgICAgICAgIGJpZ2l0X2luZGV4Misr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gVGhlIG92ZXJ3cml0dGVuIGJpZ2l0c19b
aV0gd2lsbCBuZXZlciBiZSByZWFkIGluIGZ1cnRoZXIgbG9vcCBpdGVyYXRpb25zLAorICAgICAg
ICAgICAgLy8gYmVjYXVzZSBiaWdpdF9pbmRleDEgYW5kIGJpZ2l0X2luZGV4MiBhcmUgYWx3YXlz
IGdyZWF0ZXIKKyAgICAgICAgICAgIC8vIHRoYW4gaSAtIHVzZWRfZGlnaXRzXy4KKyAgICAgICAg
ICAgIGJpZ2l0c19baV0gPSBzdGF0aWNfY2FzdDxDaHVuaz4oYWNjdW11bGF0b3IpICYga0JpZ2l0
TWFzazsKKyAgICAgICAgICAgIGFjY3VtdWxhdG9yID4+PSBrQmlnaXRTaXplOworICAgICAgICB9
CisgICAgICAgIC8vIFNpbmNlIHRoZSByZXN1bHQgd2FzIGd1YXJhbnRlZWQgdG8gbGllIGluc2lk
ZSB0aGUgbnVtYmVyIHRoZQorICAgICAgICAvLyBhY2N1bXVsYXRvciBtdXN0IGJlIDAgbm93Lgor
ICAgICAgICBBU1NFUlQoYWNjdW11bGF0b3IgPT0gMCk7CisgICAgICAgIAorICAgICAgICAvLyBE
b24ndCBmb3JnZXQgdG8gdXBkYXRlIHRoZSB1c2VkX2RpZ2l0cyBhbmQgdGhlIGV4cG9uZW50Lgor
ICAgICAgICB1c2VkX2RpZ2l0c18gPSBwcm9kdWN0X2xlbmd0aDsKKyAgICAgICAgZXhwb25lbnRf
ICo9IDI7CisgICAgICAgIENsYW1wKCk7CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgQmln
bnVtOjpBc3NpZ25Qb3dlclVJbnQxNih1aW50MTZfdCBiYXNlLCBpbnQgcG93ZXJfZXhwb25lbnQp
IHsKKyAgICAgICAgQVNTRVJUKGJhc2UgIT0gMCk7CisgICAgICAgIEFTU0VSVChwb3dlcl9leHBv
bmVudCA+PSAwKTsKKyAgICAgICAgaWYgKHBvd2VyX2V4cG9uZW50ID09IDApIHsKKyAgICAgICAg
ICAgIEFzc2lnblVJbnQxNigxKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBaZXJvKCk7CisgICAgICAgIGludCBzaGlmdHMgPSAwOworICAgICAgICAvLyBXZSBleHBl
Y3QgYmFzZSB0byBiZSBpbiByYW5nZSAyLTMyLCBhbmQgbW9zdCBvZnRlbiB0byBiZSAxMC4KKyAg
ICAgICAgLy8gSXQgZG9lcyBub3QgbWFrZSBtdWNoIHNlbnNlIHRvIGltcGxlbWVudCBkaWZmZXJl
bnQgYWxnb3JpdGhtcyBmb3IgY291bnRpbmcKKyAgICAgICAgLy8gdGhlIGJpdHMuCisgICAgICAg
IHdoaWxlICgoYmFzZSAmIDEpID09IDApIHsKKyAgICAgICAgICAgIGJhc2UgPj49IDE7CisgICAg
ICAgICAgICBzaGlmdHMrKzsKKyAgICAgICAgfQorICAgICAgICBpbnQgYml0X3NpemUgPSAwOwor
ICAgICAgICBpbnQgdG1wX2Jhc2UgPSBiYXNlOworICAgICAgICB3aGlsZSAodG1wX2Jhc2UgIT0g
MCkgeworICAgICAgICAgICAgdG1wX2Jhc2UgPj49IDE7CisgICAgICAgICAgICBiaXRfc2l6ZSsr
OworICAgICAgICB9CisgICAgICAgIGludCBmaW5hbF9zaXplID0gYml0X3NpemUgKiBwb3dlcl9l
eHBvbmVudDsKKyAgICAgICAgLy8gMSBleHRyYSBiaWdpdCBmb3IgdGhlIHNoaWZ0aW5nLCBhbmQg
b25lIGZvciByb3VuZGVkIGZpbmFsX3NpemUuCisgICAgICAgIEVuc3VyZUNhcGFjaXR5KGZpbmFs
X3NpemUgLyBrQmlnaXRTaXplICsgMik7CisgICAgICAgIAorICAgICAgICAvLyBMZWZ0IHRvIFJp
Z2h0IGV4cG9uZW50aWF0aW9uLgorICAgICAgICBpbnQgbWFzayA9IDE7CisgICAgICAgIHdoaWxl
IChwb3dlcl9leHBvbmVudCA+PSBtYXNrKSBtYXNrIDw8PSAxOworICAgICAgICAKKyAgICAgICAg
Ly8gVGhlIG1hc2sgaXMgbm93IHBvaW50aW5nIHRvIHRoZSBiaXQgYWJvdmUgdGhlIG1vc3Qgc2ln
bmlmaWNhbnQgMS1iaXQgb2YKKyAgICAgICAgLy8gcG93ZXJfZXhwb25lbnQuCisgICAgICAgIC8v
IEdldCByaWQgb2YgZmlyc3QgMS1iaXQ7CisgICAgICAgIG1hc2sgPj49IDI7CisgICAgICAgIHVp
bnQ2NF90IHRoaXNfdmFsdWUgPSBiYXNlOworICAgICAgICAKKyAgICAgICAgYm9vbCBkZWxheWVk
X211bHRpcGxpY2lhdGlvbiA9IGZhbHNlOworICAgICAgICBjb25zdCB1aW50NjRfdCBtYXhfMzJi
aXRzID0gMHhGRkZGRkZGRjsKKyAgICAgICAgd2hpbGUgKG1hc2sgIT0gMCAmJiB0aGlzX3ZhbHVl
IDw9IG1heF8zMmJpdHMpIHsKKyAgICAgICAgICAgIHRoaXNfdmFsdWUgPSB0aGlzX3ZhbHVlICog
dGhpc192YWx1ZTsKKyAgICAgICAgICAgIC8vIFZlcmlmeSB0aGF0IHRoZXJlIGlzIGVub3VnaCBz
cGFjZSBpbiB0aGlzX3ZhbHVlIHRvIHBlcmZvcm0gdGhlCisgICAgICAgICAgICAvLyBtdWx0aXBs
aWNhdGlvbi4gIFRoZSBmaXJzdCBiaXRfc2l6ZSBiaXRzIG11c3QgYmUgMC4KKyAgICAgICAgICAg
IGlmICgocG93ZXJfZXhwb25lbnQgJiBtYXNrKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgdWlu
dDY0X3QgYmFzZV9iaXRzX21hc2sgPQorICAgICAgICAgICAgICAgIH4oKHN0YXRpY19jYXN0PHVp
bnQ2NF90PigxKSA8PCAoNjQgLSBiaXRfc2l6ZSkpIC0gMSk7CisgICAgICAgICAgICAgICAgYm9v
bCBoaWdoX2JpdHNfemVybyA9ICh0aGlzX3ZhbHVlICYgYmFzZV9iaXRzX21hc2spID09IDA7Cisg
ICAgICAgICAgICAgICAgaWYgKGhpZ2hfYml0c196ZXJvKSB7CisgICAgICAgICAgICAgICAgICAg
IHRoaXNfdmFsdWUgKj0gYmFzZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBkZWxheWVkX211bHRpcGxpY2lhdGlvbiA9IHRydWU7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbWFzayA+Pj0gMTsKKyAgICAgICAgfQor
ICAgICAgICBBc3NpZ25VSW50NjQodGhpc192YWx1ZSk7CisgICAgICAgIGlmIChkZWxheWVkX211
bHRpcGxpY2lhdGlvbikgeworICAgICAgICAgICAgTXVsdGlwbHlCeVVJbnQzMihiYXNlKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gTm93IGRvIHRoZSBzYW1lIHRoaW5nIGFzIGEg
YmlnbnVtLgorICAgICAgICB3aGlsZSAobWFzayAhPSAwKSB7CisgICAgICAgICAgICBTcXVhcmUo
KTsKKyAgICAgICAgICAgIGlmICgocG93ZXJfZXhwb25lbnQgJiBtYXNrKSAhPSAwKSB7CisgICAg
ICAgICAgICAgICAgTXVsdGlwbHlCeVVJbnQzMihiYXNlKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIG1hc2sgPj49IDE7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEFuZCBm
aW5hbGx5IGFkZCB0aGUgc2F2ZWQgc2hpZnRzLgorICAgICAgICBTaGlmdExlZnQoc2hpZnRzICog
cG93ZXJfZXhwb25lbnQpOworICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBQcmVjb25kaXRpb246
IHRoaXMvb3RoZXIgPCAxNmJpdC4KKyAgICB1aW50MTZfdCBCaWdudW06OkRpdmlkZU1vZHVsb0lu
dEJpZ251bShjb25zdCBCaWdudW0mIG90aGVyKSB7CisgICAgICAgIEFTU0VSVChJc0NsYW1wZWQo
KSk7CisgICAgICAgIEFTU0VSVChvdGhlci5Jc0NsYW1wZWQoKSk7CisgICAgICAgIEFTU0VSVChv
dGhlci51c2VkX2RpZ2l0c18gPiAwKTsKKyAgICAgICAgCisgICAgICAgIC8vIEVhc3kgY2FzZTog
aWYgd2UgaGF2ZSBsZXNzIGRpZ2l0cyB0aGFuIHRoZSBkaXZpc29yIHRoYW4gdGhlIHJlc3VsdCBp
cyAwLgorICAgICAgICAvLyBOb3RlOiB0aGlzIGhhbmRsZXMgdGhlIGNhc2Ugd2hlcmUgdGhpcyA9
PSAwLCB0b28uCisgICAgICAgIGlmIChCaWdpdExlbmd0aCgpIDwgb3RoZXIuQmlnaXRMZW5ndGgo
KSkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IEFsaWduKG90aGVyKTsKKyAgICAgICAgCisgICAgICAgIHVpbnQxNl90IHJlc3VsdCA9IDA7Cisg
ICAgICAgIAorICAgICAgICAvLyBTdGFydCBieSByZW1vdmluZyBtdWx0aXBsZXMgb2YgJ290aGVy
JyB1bnRpbCBib3RoIG51bWJlcnMgaGF2ZSB0aGUgc2FtZQorICAgICAgICAvLyBudW1iZXIgb2Yg
ZGlnaXRzLgorICAgICAgICB3aGlsZSAoQmlnaXRMZW5ndGgoKSA+IG90aGVyLkJpZ2l0TGVuZ3Ro
KCkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgbmFpdmUgYXBwcm9hY2ggaXMgZXh0cmVtZWx5IGlu
ZWZmaWNpZW50IGlmIHRoZSB0aGlzIGRpdmlkZWQgb3RoZXIKKyAgICAgICAgICAgIC8vIG1pZ2h0
IGJlIGJpZy4gVGhpcyBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCBmb3IgZG91YmxlVG9TdHJpbmcg
d2hlcmUKKyAgICAgICAgICAgIC8vIHRoZSByZXN1bHQgc2hvdWxkIGJlIHNtYWxsIChsZXNzIHRo
YW4gMTApLgorICAgICAgICAgICAgQVNTRVJUKG90aGVyLmJpZ2l0c19bb3RoZXIudXNlZF9kaWdp
dHNfIC0gMV0gPj0gKCgxIDw8IGtCaWdpdFNpemUpIC8gMTYpKTsKKyAgICAgICAgICAgIC8vIFJl
bW92ZSB0aGUgbXVsdGlwbGVzIG9mIHRoZSBmaXJzdCBkaWdpdC4KKyAgICAgICAgICAgIC8vIEV4
YW1wbGUgdGhpcyA9IDIzIGFuZCBvdGhlciBlcXVhbHMgOS4gLT4gUmVtb3ZlIDIgbXVsdGlwbGVz
LgorICAgICAgICAgICAgcmVzdWx0ICs9IGJpZ2l0c19bdXNlZF9kaWdpdHNfIC0gMV07CisgICAg
ICAgICAgICBTdWJ0cmFjdFRpbWVzKG90aGVyLCBiaWdpdHNfW3VzZWRfZGlnaXRzXyAtIDFdKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJUKEJpZ2l0TGVuZ3RoKCkgPT0gb3Ro
ZXIuQmlnaXRMZW5ndGgoKSk7CisgICAgICAgIAorICAgICAgICAvLyBCb3RoIGJpZ251bXMgYXJl
IGF0IHRoZSBzYW1lIGxlbmd0aCBub3cuCisgICAgICAgIC8vIFNpbmNlIG90aGVyIGhhcyBtb3Jl
IHRoYW4gMCBkaWdpdHMgd2Uga25vdyB0aGF0IHRoZSBhY2Nlc3MgdG8KKyAgICAgICAgLy8gYmln
aXRzX1t1c2VkX2RpZ2l0c18gLSAxXSBpcyBzYWZlLgorICAgICAgICBDaHVuayB0aGlzX2JpZ2l0
ID0gYmlnaXRzX1t1c2VkX2RpZ2l0c18gLSAxXTsKKyAgICAgICAgQ2h1bmsgb3RoZXJfYmlnaXQg
PSBvdGhlci5iaWdpdHNfW290aGVyLnVzZWRfZGlnaXRzXyAtIDFdOworICAgICAgICAKKyAgICAg
ICAgaWYgKG90aGVyLnVzZWRfZGlnaXRzXyA9PSAxKSB7CisgICAgICAgICAgICAvLyBTaG9ydGN1
dCBmb3IgZWFzeSAoYW5kIGNvbW1vbikgY2FzZS4KKyAgICAgICAgICAgIGludCBxdW90aWVudCA9
IHRoaXNfYmlnaXQgLyBvdGhlcl9iaWdpdDsKKyAgICAgICAgICAgIGJpZ2l0c19bdXNlZF9kaWdp
dHNfIC0gMV0gPSB0aGlzX2JpZ2l0IC0gb3RoZXJfYmlnaXQgKiBxdW90aWVudDsKKyAgICAgICAg
ICAgIHJlc3VsdCArPSBxdW90aWVudDsKKyAgICAgICAgICAgIENsYW1wKCk7CisgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpbnQgZGl2aXNp
b25fZXN0aW1hdGUgPSB0aGlzX2JpZ2l0IC8gKG90aGVyX2JpZ2l0ICsgMSk7CisgICAgICAgIHJl
c3VsdCArPSBkaXZpc2lvbl9lc3RpbWF0ZTsKKyAgICAgICAgU3VidHJhY3RUaW1lcyhvdGhlciwg
ZGl2aXNpb25fZXN0aW1hdGUpOworICAgICAgICAKKyAgICAgICAgaWYgKG90aGVyX2JpZ2l0ICog
KGRpdmlzaW9uX2VzdGltYXRlICsgMSkgPiB0aGlzX2JpZ2l0KSB7CisgICAgICAgICAgICAvLyBO
byBuZWVkIHRvIGV2ZW4gdHJ5IHRvIHN1YnRyYWN0LiBFdmVuIGlmIG90aGVyJ3MgcmVtYWluaW5n
IGRpZ2l0cyB3ZXJlIDAKKyAgICAgICAgICAgIC8vIGFub3RoZXIgc3VidHJhY3Rpb24gd291bGQg
YmUgdG9vIG11Y2guCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICB3aGlsZSAoTGVzc0VxdWFsKG90aGVyLCAqdGhpcykpIHsKKyAgICAgICAg
ICAgIFN1YnRyYWN0QmlnbnVtKG90aGVyKTsKKyAgICAgICAgICAgIHJlc3VsdCsrOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIAorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFM+CisgICAgc3RhdGljIGludCBTaXplSW5IZXhDaGFycyhTIG51bWJlcikg
eworICAgICAgICBBU1NFUlQobnVtYmVyID4gMCk7CisgICAgICAgIGludCByZXN1bHQgPSAwOwor
ICAgICAgICB3aGlsZSAobnVtYmVyICE9IDApIHsKKyAgICAgICAgICAgIG51bWJlciA+Pj0gNDsK
KyAgICAgICAgICAgIHJlc3VsdCsrOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIAorICAgIAorICAgIHN0YXRpYyBjaGFyIEhleENoYXJPZlZhbHVlKGludCB2
YWx1ZSkgeworICAgICAgICBBU1NFUlQoMCA8PSB2YWx1ZSAmJiB2YWx1ZSA8PSAxNik7CisgICAg
ICAgIGlmICh2YWx1ZSA8IDEwKSByZXR1cm4gdmFsdWUgKyAnMCc7CisgICAgICAgIHJldHVybiB2
YWx1ZSAtIDEwICsgJ0EnOworICAgIH0KKyAgICAKKyAgICAKKyAgICBib29sIEJpZ251bTo6VG9I
ZXhTdHJpbmcoY2hhciogYnVmZmVyLCBpbnQgYnVmZmVyX3NpemUpIGNvbnN0IHsKKyAgICAgICAg
QVNTRVJUKElzQ2xhbXBlZCgpKTsKKyAgICAgICAgLy8gRWFjaCBiaWdpdCBtdXN0IGJlIHByaW50
YWJsZSBhcyBzZXBhcmF0ZSBoZXgtY2hhcmFjdGVyLgorICAgICAgICBBU1NFUlQoa0JpZ2l0U2l6
ZSAlIDQgPT0gMCk7CisgICAgICAgIGNvbnN0IGludCBrSGV4Q2hhcnNQZXJCaWdpdCA9IGtCaWdp
dFNpemUgLyA0OworICAgICAgICAKKyAgICAgICAgaWYgKHVzZWRfZGlnaXRzXyA9PSAwKSB7Cisg
ICAgICAgICAgICBpZiAoYnVmZmVyX3NpemUgPCAyKSByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICBidWZmZXJbMF0gPSAnMCc7CisgICAgICAgICAgICBidWZmZXJbMV0gPSAnXDAnOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gV2UgYWRkIDEgZm9yIHRo
ZSB0ZXJtaW5hdGluZyAnXDAnIGNoYXJhY3Rlci4KKyAgICAgICAgaW50IG5lZWRlZF9jaGFycyA9
IChCaWdpdExlbmd0aCgpIC0gMSkgKiBrSGV4Q2hhcnNQZXJCaWdpdCArCisgICAgICAgIFNpemVJ
bkhleENoYXJzKGJpZ2l0c19bdXNlZF9kaWdpdHNfIC0gMV0pICsgMTsKKyAgICAgICAgaWYgKG5l
ZWRlZF9jaGFycyA+IGJ1ZmZlcl9zaXplKSByZXR1cm4gZmFsc2U7CisgICAgICAgIGludCBzdHJp
bmdfaW5kZXggPSBuZWVkZWRfY2hhcnMgLSAxOworICAgICAgICBidWZmZXJbc3RyaW5nX2luZGV4
LS1dID0gJ1wwJzsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHBvbmVudF87ICsraSkg
eworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBrSGV4Q2hhcnNQZXJCaWdpdDsgKytq
KSB7CisgICAgICAgICAgICAgICAgYnVmZmVyW3N0cmluZ19pbmRleC0tXSA9ICcwJzsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHVzZWRfZGln
aXRzXyAtIDE7ICsraSkgeworICAgICAgICAgICAgQ2h1bmsgY3VycmVudF9iaWdpdCA9IGJpZ2l0
c19baV07CisgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGtIZXhDaGFyc1BlckJpZ2l0
OyArK2opIHsKKyAgICAgICAgICAgICAgICBidWZmZXJbc3RyaW5nX2luZGV4LS1dID0gSGV4Q2hh
ck9mVmFsdWUoY3VycmVudF9iaWdpdCAmIDB4Rik7CisgICAgICAgICAgICAgICAgY3VycmVudF9i
aWdpdCA+Pj0gNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBBbmQgZmlu
YWxseSB0aGUgbGFzdCBiaWdpdC4KKyAgICAgICAgQ2h1bmsgbW9zdF9zaWduaWZpY2FudF9iaWdp
dCA9IGJpZ2l0c19bdXNlZF9kaWdpdHNfIC0gMV07CisgICAgICAgIHdoaWxlIChtb3N0X3NpZ25p
ZmljYW50X2JpZ2l0ICE9IDApIHsKKyAgICAgICAgICAgIGJ1ZmZlcltzdHJpbmdfaW5kZXgtLV0g
PSBIZXhDaGFyT2ZWYWx1ZShtb3N0X3NpZ25pZmljYW50X2JpZ2l0ICYgMHhGKTsKKyAgICAgICAg
ICAgIG1vc3Rfc2lnbmlmaWNhbnRfYmlnaXQgPj49IDQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIAorICAgIEJpZ251bTo6Q2h1bmsgQmlnbnVtOjpC
aWdpdEF0KGludCBpbmRleCkgY29uc3QgeworICAgICAgICBpZiAoaW5kZXggPj0gQmlnaXRMZW5n
dGgoKSkgcmV0dXJuIDA7CisgICAgICAgIGlmIChpbmRleCA8IGV4cG9uZW50XykgcmV0dXJuIDA7
CisgICAgICAgIHJldHVybiBiaWdpdHNfW2luZGV4IC0gZXhwb25lbnRfXTsKKyAgICB9CisgICAg
CisgICAgCisgICAgaW50IEJpZ251bTo6Q29tcGFyZShjb25zdCBCaWdudW0mIGEsIGNvbnN0IEJp
Z251bSYgYikgeworICAgICAgICBBU1NFUlQoYS5Jc0NsYW1wZWQoKSk7CisgICAgICAgIEFTU0VS
VChiLklzQ2xhbXBlZCgpKTsKKyAgICAgICAgaW50IGJpZ2l0X2xlbmd0aF9hID0gYS5CaWdpdExl
bmd0aCgpOworICAgICAgICBpbnQgYmlnaXRfbGVuZ3RoX2IgPSBiLkJpZ2l0TGVuZ3RoKCk7Cisg
ICAgICAgIGlmIChiaWdpdF9sZW5ndGhfYSA8IGJpZ2l0X2xlbmd0aF9iKSByZXR1cm4gLTE7Cisg
ICAgICAgIGlmIChiaWdpdF9sZW5ndGhfYSA+IGJpZ2l0X2xlbmd0aF9iKSByZXR1cm4gKzE7Cisg
ICAgICAgIGZvciAoaW50IGkgPSBiaWdpdF9sZW5ndGhfYSAtIDE7IGkgPj0gTWluKGEuZXhwb25l
bnRfLCBiLmV4cG9uZW50Xyk7IC0taSkgeworICAgICAgICAgICAgQ2h1bmsgYmlnaXRfYSA9IGEu
QmlnaXRBdChpKTsKKyAgICAgICAgICAgIENodW5rIGJpZ2l0X2IgPSBiLkJpZ2l0QXQoaSk7Cisg
ICAgICAgICAgICBpZiAoYmlnaXRfYSA8IGJpZ2l0X2IpIHJldHVybiAtMTsKKyAgICAgICAgICAg
IGlmIChiaWdpdF9hID4gYmlnaXRfYikgcmV0dXJuICsxOworICAgICAgICAgICAgLy8gT3RoZXJ3
aXNlIHRoZXkgYXJlIGVxdWFsIHVwIHRvIHRoaXMgZGlnaXQuIFRyeSB0aGUgbmV4dCBkaWdpdC4K
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgCisgICAgaW50
IEJpZ251bTo6UGx1c0NvbXBhcmUoY29uc3QgQmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIsIGNv
bnN0IEJpZ251bSYgYykgeworICAgICAgICBBU1NFUlQoYS5Jc0NsYW1wZWQoKSk7CisgICAgICAg
IEFTU0VSVChiLklzQ2xhbXBlZCgpKTsKKyAgICAgICAgQVNTRVJUKGMuSXNDbGFtcGVkKCkpOwor
ICAgICAgICBpZiAoYS5CaWdpdExlbmd0aCgpIDwgYi5CaWdpdExlbmd0aCgpKSB7CisgICAgICAg
ICAgICByZXR1cm4gUGx1c0NvbXBhcmUoYiwgYSwgYyk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGEuQmlnaXRMZW5ndGgoKSArIDEgPCBjLkJpZ2l0TGVuZ3RoKCkpIHJldHVybiAtMTsKKyAgICAg
ICAgaWYgKGEuQmlnaXRMZW5ndGgoKSA+IGMuQmlnaXRMZW5ndGgoKSkgcmV0dXJuICsxOworICAg
ICAgICAvLyBUaGUgZXhwb25lbnQgZW5jb2RlcyAwLWJpZ2l0cy4gU28gaWYgdGhlcmUgYXJlIG1v
cmUgMC1kaWdpdHMgaW4gJ2EnIHRoYW4KKyAgICAgICAgLy8gJ2InIGhhcyBkaWdpdHMsIHRoZW4g
dGhlIGJpZ2l0LWxlbmd0aCBvZiAnYScrJ2InIG11c3QgYmUgZXF1YWwgdG8gdGhlIG9uZQorICAg
ICAgICAvLyBvZiAnYScuCisgICAgICAgIGlmIChhLmV4cG9uZW50XyA+PSBiLkJpZ2l0TGVuZ3Ro
KCkgJiYgYS5CaWdpdExlbmd0aCgpIDwgYy5CaWdpdExlbmd0aCgpKSB7CisgICAgICAgICAgICBy
ZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIENodW5rIGJvcnJvdyA9IDA7
CisgICAgICAgIC8vIFN0YXJ0aW5nIGF0IG1pbl9leHBvbmVudCBhbGwgZGlnaXRzIGFyZSA9PSAw
LiBTbyBubyBuZWVkIHRvIGNvbXBhcmUgdGhlbS4KKyAgICAgICAgaW50IG1pbl9leHBvbmVudCA9
IE1pbihNaW4oYS5leHBvbmVudF8sIGIuZXhwb25lbnRfKSwgYy5leHBvbmVudF8pOworICAgICAg
ICBmb3IgKGludCBpID0gYy5CaWdpdExlbmd0aCgpIC0gMTsgaSA+PSBtaW5fZXhwb25lbnQ7IC0t
aSkgeworICAgICAgICAgICAgQ2h1bmsgY2h1bmtfYSA9IGEuQmlnaXRBdChpKTsKKyAgICAgICAg
ICAgIENodW5rIGNodW5rX2IgPSBiLkJpZ2l0QXQoaSk7CisgICAgICAgICAgICBDaHVuayBjaHVu
a19jID0gYy5CaWdpdEF0KGkpOworICAgICAgICAgICAgQ2h1bmsgc3VtID0gY2h1bmtfYSArIGNo
dW5rX2I7CisgICAgICAgICAgICBpZiAoc3VtID4gY2h1bmtfYyArIGJvcnJvdykgeworICAgICAg
ICAgICAgICAgIHJldHVybiArMTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgYm9ycm93ID0gY2h1bmtfYyArIGJvcnJvdyAtIHN1bTsKKyAgICAgICAgICAgICAgICBpZiAo
Ym9ycm93ID4gMSkgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIGJvcnJvdyA8PD0ga0JpZ2l0
U2l6ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoYm9ycm93ID09IDAp
IHJldHVybiAwOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIAorICAgIAorICAgIHZv
aWQgQmlnbnVtOjpDbGFtcCgpIHsKKyAgICAgICAgd2hpbGUgKHVzZWRfZGlnaXRzXyA+IDAgJiYg
YmlnaXRzX1t1c2VkX2RpZ2l0c18gLSAxXSA9PSAwKSB7CisgICAgICAgICAgICB1c2VkX2RpZ2l0
c18tLTsKKyAgICAgICAgfQorICAgICAgICBpZiAodXNlZF9kaWdpdHNfID09IDApIHsKKyAgICAg
ICAgICAgIC8vIFplcm8uCisgICAgICAgICAgICBleHBvbmVudF8gPSAwOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIAorICAgIGJvb2wgQmlnbnVtOjpJc0NsYW1wZWQoKSBjb25zdCB7Cisg
ICAgICAgIHJldHVybiB1c2VkX2RpZ2l0c18gPT0gMCB8fCBiaWdpdHNfW3VzZWRfZGlnaXRzXyAt
IDFdICE9IDA7CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpaZXJvKCkgewor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHVzZWRfZGlnaXRzXzsgKytpKSB7CisgICAgICAg
ICAgICBiaWdpdHNfW2ldID0gMDsKKyAgICAgICAgfQorICAgICAgICB1c2VkX2RpZ2l0c18gPSAw
OworICAgICAgICBleHBvbmVudF8gPSAwOworICAgIH0KKyAgICAKKyAgICAKKyAgICB2b2lkIEJp
Z251bTo6QWxpZ24oY29uc3QgQmlnbnVtJiBvdGhlcikgeworICAgICAgICBpZiAoZXhwb25lbnRf
ID4gb3RoZXIuZXhwb25lbnRfKSB7CisgICAgICAgICAgICAvLyBJZiAiWCIgcmVwcmVzZW50cyBh
ICJoaWRkZW4iIGRpZ2l0IChieSB0aGUgZXhwb25lbnQpIHRoZW4gd2UgYXJlIGluIHRoZQorICAg
ICAgICAgICAgLy8gZm9sbG93aW5nIGNhc2UgKGEgPT0gdGhpcywgYiA9PSBvdGhlcik6CisgICAg
ICAgICAgICAvLyBhOiAgYWFhYWFhWFhYWCAgIG9yIGE6ICAgYWFhYWFYWFgKKyAgICAgICAgICAg
IC8vIGI6ICAgICBiYmJiYmJYICAgICAgYjogYmJiYmJiYmJYWAorICAgICAgICAgICAgLy8gV2Ug
cmVwbGFjZSBzb21lIG9mIHRoZSBoaWRkZW4gZGlnaXRzIChYKSBvZiBhIHdpdGggMCBkaWdpdHMu
CisgICAgICAgICAgICAvLyBhOiAgYWFhYWFhMDAwWCAgIG9yIGE6ICAgYWFhYWEwWFgKKyAgICAg
ICAgICAgIGludCB6ZXJvX2RpZ2l0cyA9IGV4cG9uZW50XyAtIG90aGVyLmV4cG9uZW50XzsKKyAg
ICAgICAgICAgIEVuc3VyZUNhcGFjaXR5KHVzZWRfZGlnaXRzXyArIHplcm9fZGlnaXRzKTsKKyAg
ICAgICAgICAgIGZvciAoaW50IGkgPSB1c2VkX2RpZ2l0c18gLSAxOyBpID49IDA7IC0taSkgewor
ICAgICAgICAgICAgICAgIGJpZ2l0c19baSArIHplcm9fZGlnaXRzXSA9IGJpZ2l0c19baV07Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHplcm9fZGlnaXRz
OyArK2kpIHsKKyAgICAgICAgICAgICAgICBiaWdpdHNfW2ldID0gMDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHVzZWRfZGlnaXRzXyArPSB6ZXJvX2RpZ2l0czsKKyAgICAgICAgICAgIGV4
cG9uZW50XyAtPSB6ZXJvX2RpZ2l0czsKKyAgICAgICAgICAgIEFTU0VSVCh1c2VkX2RpZ2l0c18g
Pj0gMCk7CisgICAgICAgICAgICBBU1NFUlQoZXhwb25lbnRfID49IDApOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpCaWdpdHNTaGlmdExlZnQoaW50IHNo
aWZ0X2Ftb3VudCkgeworICAgICAgICBBU1NFUlQoc2hpZnRfYW1vdW50IDwga0JpZ2l0U2l6ZSk7
CisgICAgICAgIEFTU0VSVChzaGlmdF9hbW91bnQgPj0gMCk7CisgICAgICAgIENodW5rIGNhcnJ5
ID0gMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1c2VkX2RpZ2l0c187ICsraSkgewor
ICAgICAgICAgICAgQ2h1bmsgbmV3X2NhcnJ5ID0gYmlnaXRzX1tpXSA+PiAoa0JpZ2l0U2l6ZSAt
IHNoaWZ0X2Ftb3VudCk7CisgICAgICAgICAgICBiaWdpdHNfW2ldID0gKChiaWdpdHNfW2ldIDw8
IHNoaWZ0X2Ftb3VudCkgKyBjYXJyeSkgJiBrQmlnaXRNYXNrOworICAgICAgICAgICAgY2Fycnkg
PSBuZXdfY2Fycnk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNhcnJ5ICE9IDApIHsKKyAgICAg
ICAgICAgIGJpZ2l0c19bdXNlZF9kaWdpdHNfXSA9IGNhcnJ5OworICAgICAgICAgICAgdXNlZF9k
aWdpdHNfKys7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06
OlN1YnRyYWN0VGltZXMoY29uc3QgQmlnbnVtJiBvdGhlciwgaW50IGZhY3RvcikgeworICAgICAg
ICBBU1NFUlQoZXhwb25lbnRfIDw9IG90aGVyLmV4cG9uZW50Xyk7CisgICAgICAgIGlmIChmYWN0
b3IgPCAzKSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZhY3RvcjsgKytpKSB7
CisgICAgICAgICAgICAgICAgU3VidHJhY3RCaWdudW0ob3RoZXIpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIENodW5rIGJvcnJvdyA9IDA7
CisgICAgICAgIGludCBleHBvbmVudF9kaWZmID0gb3RoZXIuZXhwb25lbnRfIC0gZXhwb25lbnRf
OworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG90aGVyLnVzZWRfZGlnaXRzXzsgKytpKSB7
CisgICAgICAgICAgICBEb3VibGVDaHVuayBwcm9kdWN0ID0gc3RhdGljX2Nhc3Q8RG91YmxlQ2h1
bms+KGZhY3RvcikgKiBvdGhlci5iaWdpdHNfW2ldOworICAgICAgICAgICAgRG91YmxlQ2h1bmsg
cmVtb3ZlID0gYm9ycm93ICsgcHJvZHVjdDsKKyAgICAgICAgICAgIENodW5rIGRpZmZlcmVuY2Ug
PSBiaWdpdHNfW2kgKyBleHBvbmVudF9kaWZmXSAtIChyZW1vdmUgJiBrQmlnaXRNYXNrKTsKKyAg
ICAgICAgICAgIGJpZ2l0c19baSArIGV4cG9uZW50X2RpZmZdID0gZGlmZmVyZW5jZSAmIGtCaWdp
dE1hc2s7CisgICAgICAgICAgICBib3Jyb3cgPSBzdGF0aWNfY2FzdDxDaHVuaz4oKGRpZmZlcmVu
Y2UgPj4gKGtDaHVua1NpemUgLSAxKSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChyZW1vdmUgPj4ga0JpZ2l0U2l6ZSkpOworICAgICAgICB9CisgICAgICAgIGZv
ciAoaW50IGkgPSBvdGhlci51c2VkX2RpZ2l0c18gKyBleHBvbmVudF9kaWZmOyBpIDwgdXNlZF9k
aWdpdHNfOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChib3Jyb3cgPT0gMCkgcmV0dXJuOworICAg
ICAgICAgICAgQ2h1bmsgZGlmZmVyZW5jZSA9IGJpZ2l0c19baV0gLSBib3Jyb3c7CisgICAgICAg
ICAgICBiaWdpdHNfW2ldID0gZGlmZmVyZW5jZSAmIGtCaWdpdE1hc2s7CisgICAgICAgICAgICBi
b3Jyb3cgPSBkaWZmZXJlbmNlID4+IChrQ2h1bmtTaXplIC0gMSk7CisgICAgICAgICAgICArK2k7
CisgICAgICAgIH0KKyAgICAgICAgQ2xhbXAoKTsKKyAgICB9CisgICAgCisgICAgCit9ICAvLyBu
YW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvZHRvYS9iaWdudW0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9i
aWdudW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44NTY0MjEwYjJmODY0ODVhNmQyNmI5YTY5YjdlMTVjZTU3ZmFk
MDMwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2Jp
Z251bS5oCkBAIC0wLDAgKzEsMTQxIEBACisvLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJvamVj
dCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisv
LyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNp
Zm5kZWYgRE9VQkxFX0NPTlZFUlNJT05fQklHTlVNX0hfCisjZGVmaW5lIERPVUJMRV9DT05WRVJT
SU9OX0JJR05VTV9IXworCisjaW5jbHVkZSAidXRpbHMuaCIKKworbmFtZXNwYWNlIGRvdWJsZV9j
b252ZXJzaW9uIHsKKyAgICAKKyAgICBjbGFzcyBCaWdudW0geworICAgIHB1YmxpYzoKKyAgICAg
ICAgLy8gMzU4NCA9IDEyOCAqIDI4LiBXZSBjYW4gcmVwcmVzZW50IDJeMzU4NCA+IDEwXjEwMDAg
YWNjdXJhdGVseS4KKyAgICAgICAgLy8gVGhpcyBiaWdudW0gY2FuIGVuY29kZSBtdWNoIGJpZ2dl
ciBudW1iZXJzLCBzaW5jZSBpdCBjb250YWlucyBhbgorICAgICAgICAvLyBleHBvbmVudC4KKyAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBrTWF4U2lnbmlmaWNhbnRCaXRzID0gMzU4NDsKKyAgICAg
ICAgCisgICAgICAgIEJpZ251bSgpOworICAgICAgICB2b2lkIEFzc2lnblVJbnQxNih1aW50MTZf
dCB2YWx1ZSk7CisgICAgICAgIHZvaWQgQXNzaWduVUludDY0KHVpbnQ2NF90IHZhbHVlKTsKKyAg
ICAgICAgdm9pZCBBc3NpZ25CaWdudW0oY29uc3QgQmlnbnVtJiBvdGhlcik7CisgICAgICAgIAor
ICAgICAgICB2b2lkIEFzc2lnbkRlY2ltYWxTdHJpbmcoVmVjdG9yPGNvbnN0IGNoYXI+IHZhbHVl
KTsKKyAgICAgICAgdm9pZCBBc3NpZ25IZXhTdHJpbmcoVmVjdG9yPGNvbnN0IGNoYXI+IHZhbHVl
KTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgQXNzaWduUG93ZXJVSW50MTYodWludDE2X3QgYmFz
ZSwgaW50IGV4cG9uZW50KTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgQWRkVUludDE2KHVpbnQx
Nl90IG9wZXJhbmQpOworICAgICAgICB2b2lkIEFkZFVJbnQ2NCh1aW50NjRfdCBvcGVyYW5kKTsK
KyAgICAgICAgdm9pZCBBZGRCaWdudW0oY29uc3QgQmlnbnVtJiBvdGhlcik7CisgICAgICAgIC8v
IFByZWNvbmRpdGlvbjogdGhpcyA+PSBvdGhlci4KKyAgICAgICAgdm9pZCBTdWJ0cmFjdEJpZ251
bShjb25zdCBCaWdudW0mIG90aGVyKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgU3F1YXJlKCk7
CisgICAgICAgIHZvaWQgU2hpZnRMZWZ0KGludCBzaGlmdF9hbW91bnQpOworICAgICAgICB2b2lk
IE11bHRpcGx5QnlVSW50MzIodWludDMyX3QgZmFjdG9yKTsKKyAgICAgICAgdm9pZCBNdWx0aXBs
eUJ5VUludDY0KHVpbnQ2NF90IGZhY3Rvcik7CisgICAgICAgIHZvaWQgTXVsdGlwbHlCeVBvd2Vy
T2ZUZW4oaW50IGV4cG9uZW50KTsKKyAgICAgICAgdm9pZCBUaW1lczEwKCkgeyByZXR1cm4gTXVs
dGlwbHlCeVVJbnQzMigxMCk7IH0KKyAgICAgICAgLy8gUHNldWRvY29kZToKKyAgICAgICAgLy8g
IGludCByZXN1bHQgPSB0aGlzIC8gb3RoZXI7CisgICAgICAgIC8vICB0aGlzID0gdGhpcyAlIG90
aGVyOworICAgICAgICAvLyBJbiB0aGUgd29yc3QgY2FzZSB0aGlzIGZ1bmN0aW9uIGlzIGluIE8o
dGhpcy9vdGhlcikuCisgICAgICAgIHVpbnQxNl90IERpdmlkZU1vZHVsb0ludEJpZ251bShjb25z
dCBCaWdudW0mIG90aGVyKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgVG9IZXhTdHJpbmcoY2hh
ciogYnVmZmVyLCBpbnQgYnVmZmVyX3NpemUpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgc3Rh
dGljIGludCBDb21wYXJlKGNvbnN0IEJpZ251bSYgYSwgY29uc3QgQmlnbnVtJiBiKTsKKyAgICAg
ICAgc3RhdGljIGJvb2wgRXF1YWwoY29uc3QgQmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIpIHsK
KyAgICAgICAgICAgIHJldHVybiBDb21wYXJlKGEsIGIpID09IDA7CisgICAgICAgIH0KKyAgICAg
ICAgc3RhdGljIGJvb2wgTGVzc0VxdWFsKGNvbnN0IEJpZ251bSYgYSwgY29uc3QgQmlnbnVtJiBi
KSB7CisgICAgICAgICAgICByZXR1cm4gQ29tcGFyZShhLCBiKSA8PSAwOworICAgICAgICB9Cisg
ICAgICAgIHN0YXRpYyBib29sIExlc3MoY29uc3QgQmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIp
IHsKKyAgICAgICAgICAgIHJldHVybiBDb21wYXJlKGEsIGIpIDwgMDsKKyAgICAgICAgfQorICAg
ICAgICAvLyBSZXR1cm5zIENvbXBhcmUoYSArIGIsIGMpOworICAgICAgICBzdGF0aWMgaW50IFBs
dXNDb21wYXJlKGNvbnN0IEJpZ251bSYgYSwgY29uc3QgQmlnbnVtJiBiLCBjb25zdCBCaWdudW0m
IGMpOworICAgICAgICAvLyBSZXR1cm5zIGEgKyBiID09IGMKKyAgICAgICAgc3RhdGljIGJvb2wg
UGx1c0VxdWFsKGNvbnN0IEJpZ251bSYgYSwgY29uc3QgQmlnbnVtJiBiLCBjb25zdCBCaWdudW0m
IGMpIHsKKyAgICAgICAgICAgIHJldHVybiBQbHVzQ29tcGFyZShhLCBiLCBjKSA9PSAwOworICAg
ICAgICB9CisgICAgICAgIC8vIFJldHVybnMgYSArIGIgPD0gYworICAgICAgICBzdGF0aWMgYm9v
bCBQbHVzTGVzc0VxdWFsKGNvbnN0IEJpZ251bSYgYSwgY29uc3QgQmlnbnVtJiBiLCBjb25zdCBC
aWdudW0mIGMpIHsKKyAgICAgICAgICAgIHJldHVybiBQbHVzQ29tcGFyZShhLCBiLCBjKSA8PSAw
OworICAgICAgICB9CisgICAgICAgIC8vIFJldHVybnMgYSArIGIgPCBjCisgICAgICAgIHN0YXRp
YyBib29sIFBsdXNMZXNzKGNvbnN0IEJpZ251bSYgYSwgY29uc3QgQmlnbnVtJiBiLCBjb25zdCBC
aWdudW0mIGMpIHsKKyAgICAgICAgICAgIHJldHVybiBQbHVzQ29tcGFyZShhLCBiLCBjKSA8IDA7
CisgICAgICAgIH0KKyAgICBwcml2YXRlOgorICAgICAgICB0eXBlZGVmIHVpbnQzMl90IENodW5r
OworICAgICAgICB0eXBlZGVmIHVpbnQ2NF90IERvdWJsZUNodW5rOworICAgICAgICAKKyAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBrQ2h1bmtTaXplID0gc2l6ZW9mKENodW5rKSAqIDg7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQga0RvdWJsZUNodW5rU2l6ZSA9IHNpemVvZihEb3VibGVDaHVu
aykgKiA4OworICAgICAgICAvLyBXaXRoIGJpZ2l0IHNpemUgb2YgMjggd2UgbG9vc2Ugc29tZSBi
aXRzLCBidXQgYSBkb3VibGUgc3RpbGwgZml0cyBlYXNpbHkKKyAgICAgICAgLy8gaW50byB0d28g
Y2h1bmtzLCBhbmQgbW9yZSBpbXBvcnRhbnRseSB3ZSBjYW4gdXNlIHRoZSBDb21iYSBtdWx0aXBs
aWNhdGlvbi4KKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBrQmlnaXRTaXplID0gMjg7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBDaHVuayBrQmlnaXRNYXNrID0gKDEgPDwga0JpZ2l0U2l6ZSkgLSAx
OworICAgICAgICAvLyBFdmVyeSBpbnN0YW5jZSBhbGxvY2F0ZXMga0JpZ2l0TGVuZ3RoIGNodW5r
cyBvbiB0aGUgc3RhY2suIEJpZ251bXMgY2Fubm90CisgICAgICAgIC8vIGdyb3cuIFRoZXJlIGFy
ZSBubyBjaGVja3MgaWYgdGhlIHN0YWNrLWFsbG9jYXRlZCBzcGFjZSBpcyBzdWZmaWNpZW50Lgor
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtCaWdpdENhcGFjaXR5ID0ga01heFNpZ25pZmljYW50
Qml0cyAvIGtCaWdpdFNpemU7CisgICAgICAgIAorICAgICAgICB2b2lkIEVuc3VyZUNhcGFjaXR5
KGludCBzaXplKSB7CisgICAgICAgICAgICBpZiAoc2l6ZSA+IGtCaWdpdENhcGFjaXR5KSB7Cisg
ICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICB2b2lkIEFsaWduKGNvbnN0IEJpZ251bSYgb3RoZXIpOworICAgICAgICB2b2lkIENs
YW1wKCk7CisgICAgICAgIGJvb2wgSXNDbGFtcGVkKCkgY29uc3Q7CisgICAgICAgIHZvaWQgWmVy
bygpOworICAgICAgICAvLyBSZXF1aXJlcyB0aGlzIHRvIGhhdmUgZW5vdWdoIGNhcGFjaXR5IChu
byB0ZXN0cyBkb25lKS4KKyAgICAgICAgLy8gVXBkYXRlcyB1c2VkX2RpZ2l0c18gaWYgbmVjZXNz
YXJ5LgorICAgICAgICAvLyBzaGlmdF9hbW91bnQgbXVzdCBiZSA8IGtCaWdpdFNpemUuCisgICAg
ICAgIHZvaWQgQmlnaXRzU2hpZnRMZWZ0KGludCBzaGlmdF9hbW91bnQpOworICAgICAgICAvLyBC
aWdpdExlbmd0aCBpbmNsdWRlcyB0aGUgImhpZGRlbiIgZGlnaXRzIGVuY29kZWQgaW4gdGhlIGV4
cG9uZW50LgorICAgICAgICBpbnQgQmlnaXRMZW5ndGgoKSBjb25zdCB7IHJldHVybiB1c2VkX2Rp
Z2l0c18gKyBleHBvbmVudF87IH0KKyAgICAgICAgQ2h1bmsgQmlnaXRBdChpbnQgaW5kZXgpIGNv
bnN0OworICAgICAgICB2b2lkIFN1YnRyYWN0VGltZXMoY29uc3QgQmlnbnVtJiBvdGhlciwgaW50
IGZhY3Rvcik7CisgICAgICAgIAorICAgICAgICBDaHVuayBiaWdpdHNfYnVmZmVyX1trQmlnaXRD
YXBhY2l0eV07CisgICAgICAgIC8vIEEgdmVjdG9yIGJhY2tlZCBieSBiaWdpdHNfYnVmZmVyXy4g
VGhpcyB3YXkgYWNjZXNzZXMgdG8gdGhlIGFycmF5IGFyZQorICAgICAgICAvLyBjaGVja2VkIGZv
ciBvdXQtb2YtYm91bmRzIGVycm9ycy4KKyAgICAgICAgVmVjdG9yPENodW5rPiBiaWdpdHNfOwor
ICAgICAgICBpbnQgdXNlZF9kaWdpdHNfOworICAgICAgICAvLyBUaGUgQmlnbnVtJ3MgdmFsdWUg
ZXF1YWxzIHZhbHVlKGJpZ2l0c18pICogMl4oZXhwb25lbnRfICoga0JpZ2l0U2l6ZSkuCisgICAg
ICAgIGludCBleHBvbmVudF87CisgICAgICAgIAorICAgICAgICBESVNBTExPV19DT1BZX0FORF9B
U1NJR04oQmlnbnVtKTsKKyAgICB9OworICAgIAorfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252
ZXJzaW9uCisKKyNlbmRpZiAgLy8gRE9VQkxFX0NPTlZFUlNJT05fQklHTlVNX0hfCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvY2FjaGVkLXBvd2Vycy5jYyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmNjCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmNmM2NiOGNjOGY0MzRlMThiZTNiNzA1NjYxY2NkNWNmNTQ5YjYyM2UKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvY2FjaGVkLXBvd2Vycy5jYwpAQCAt
MCwwICsxLDE4NSBAQAorLy8gQ29weXJpZ2h0IDIwMDYtMjAwOCB0aGUgVjggcHJvamVjdCBhdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8v
ICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisv
LyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpbmNsdWRl
IDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNp
bmNsdWRlICJVbnVzZWRQYXJhbS5oIgorI2luY2x1ZGUgInV0aWxzLmgiCisjaW5jbHVkZSAiY2Fj
aGVkLXBvd2Vycy5oIgorCituYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAg
IHN0cnVjdCBDYWNoZWRQb3dlciB7CisgICAgICAgIHVpbnQ2NF90IHNpZ25pZmljYW5kOworICAg
ICAgICBpbnQxNl90IGJpbmFyeV9leHBvbmVudDsKKyAgICAgICAgaW50MTZfdCBkZWNpbWFsX2V4
cG9uZW50OworICAgIH07CisgICAgCisgICAgc3RhdGljIGludCBrQ2FjaGVkUG93ZXJzTGVuZ3Ro
ID0gMTsKKyAgICBzdGF0aWMgaW50IGtDYWNoZWRQb3dlcnNPZmZzZXQgPSAxOworICAgIHN0YXRp
YyBjb25zdCBkb3VibGUga0RfMV9MT0cyXzEwID0gMC4zMDEwMjk5OTU2NjM5ODExNDsgIC8vICAx
IC8gbGcoMTApCisgICAgc3RhdGljIENhY2hlZFBvd2VyKiBrQ2FjaGVkUG93ZXJzID0gMDsKKyAg
ICAKKyAgICBpbnQgUG93ZXJzT2ZUZW5DYWNoZTo6a0RlY2ltYWxFeHBvbmVudERpc3RhbmNlID0g
MTsKKyAgICBpbnQgUG93ZXJzT2ZUZW5DYWNoZTo6a01pbkRlY2ltYWxFeHBvbmVudCA9IDE7Cisg
ICAgaW50IFBvd2Vyc09mVGVuQ2FjaGU6OmtNYXhEZWNpbWFsRXhwb25lbnQgPSAxOworICAgIAor
ICAgIHZvaWQgaW5pdGlhbGl6ZSgpIHsKKyAgICAgICAgc3RhdGljIENhY2hlZFBvd2VyIGNhY2hl
ZFBvd2Vyc1tdID0geworICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZmE4ZmQ1YTAsIDA4
MWMwMjg4KSwgLTEyMjAsIC0zNDh9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YmFh
ZWUxN2YsIGEyM2ViZjc2KSwgLTExOTMsIC0zNDB9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFS
VF9DKDB4OGIxNmZiMjAsIDMwNTVhYzc2KSwgLTExNjYsIC0zMzJ9LAorICAgICAgICAgICAge1VJ
TlQ2NF8yUEFSVF9DKDB4Y2Y0Mjg5NGEsIDVkY2UzNWVhKSwgLTExNDAsIC0zMjR9LAorICAgICAg
ICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4OWE2YmIwYWEsIDU1NjUzYjJkKSwgLTExMTMsIC0zMTZ9
LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZTYxYWNmMDMsIDNkMWE0NWRmKSwgLTEw
ODcsIC0zMDh9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YWI3MGZlMTcsIGM3OWFj
NmNhKSwgLTEwNjAsIC0zMDB9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZmY3N2Ix
ZmMsIGJlYmNkYzRmKSwgLTEwMzQsIC0yOTJ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9D
KDB4YmU1NjkxZWYsIDQxNmJkNjBjKSwgLTEwMDcsIC0yODR9LAorICAgICAgICAgICAge1VJTlQ2
NF8yUEFSVF9DKDB4OGRkMDFmYWQsIDkwN2ZmYzNjKSwgLTk4MCwgLTI3Nn0sCisgICAgICAgICAg
ICB7VUlOVDY0XzJQQVJUX0MoMHhkMzUxNWMyOCwgMzE1NTlhODMpLCAtOTU0LCAtMjY4fSwKKyAg
ICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDlkNzFhYzhmLCBhZGE2YzliNSksIC05MjcsIC0y
NjB9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZWE5YzIyNzcsIDIzZWU4YmNiKSwg
LTkwMSwgLTI1Mn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhhZWNjNDk5MSwgNDA3
ODUzNmQpLCAtODc0LCAtMjQ0fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDgyM2Mx
Mjc5LCA1ZGI2Y2U1NyksIC04NDcsIC0yMzZ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9D
KDB4YzIxMDk0MzYsIDRkZmI1NjM3KSwgLTgyMSwgLTIyOH0sCisgICAgICAgICAgICB7VUlOVDY0
XzJQQVJUX0MoMHg5MDk2ZWE2ZiwgMzg0ODk4NGYpLCAtNzk0LCAtMjIwfSwKKyAgICAgICAgICAg
IHtVSU5UNjRfMlBBUlRfQygweGQ3NzQ4NWNiLCAyNTgyM2FjNyksIC03NjgsIC0yMTJ9LAorICAg
ICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YTA4NmNmY2QsIDk3YmY5N2Y0KSwgLTc0MSwgLTIw
NH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhlZjM0MGE5OCwgMTcyYWFjZTUpLCAt
NzE1LCAtMTk2fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGIyMzg2N2ZiLCAyYTM1
YjI4ZSksIC02ODgsIC0xODh9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ODRjOGQ0
ZGYsIGQyYzYzZjNiKSwgLTY2MSwgLTE4MH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0Mo
MHhjNWRkNDQyNywgMWFkM2NkYmEpLCAtNjM1LCAtMTcyfSwKKyAgICAgICAgICAgIHtVSU5UNjRf
MlBBUlRfQygweDkzNmI5ZmNlLCBiYjI1Yzk5NiksIC02MDgsIC0xNjR9LAorICAgICAgICAgICAg
e1VJTlQ2NF8yUEFSVF9DKDB4ZGJhYzZjMjQsIDdkNjJhNTg0KSwgLTU4MiwgLTE1Nn0sCisgICAg
ICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhhM2FiNjY1OCwgMGQ1ZmRhZjYpLCAtNTU1LCAtMTQ4
fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGYzZTJmODkzLCBkZWMzZjEyNiksIC01
MjksIC0xNDB9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YjViNWFkYTgsIGFhZmY4
MGI4KSwgLTUwMiwgLTEzMn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg4NzYyNWYw
NSwgNmM3YzRhOGIpLCAtNDc1LCAtMTI0fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygw
eGM5YmNmZjYwLCAzNGMxMzA1MyksIC00NDksIC0xMTZ9LAorICAgICAgICAgICAge1VJTlQ2NF8y
UEFSVF9DKDB4OTY0ZTg1OGMsIDkxYmEyNjU1KSwgLTQyMiwgLTEwOH0sCisgICAgICAgICAgICB7
VUlOVDY0XzJQQVJUX0MoMHhkZmY5NzcyNCwgNzAyOTdlYmQpLCAtMzk2LCAtMTAwfSwKKyAgICAg
ICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGE2ZGZiZDlmLCBiOGU1Yjg4ZiksIC0zNjksIC05Mn0s
CisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhmOGE5NWZjZiwgODg3NDdkOTQpLCAtMzQz
LCAtODR9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4Yjk0NDcwOTMsIDhmYTg5YmNm
KSwgLTMxNiwgLTc2fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDhhMDhmMGY4LCBi
ZjBmMTU2YiksIC0yODksIC02OH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhjZGIw
MjU1NSwgNjUzMTMxYjYpLCAtMjYzLCAtNjB9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9D
KDB4OTkzZmUyYzYsIGQwN2I3ZmFjKSwgLTIzNiwgLTUyfSwKKyAgICAgICAgICAgIHtVSU5UNjRf
MlBBUlRfQygweGU0NWMxMGM0LCAyYTJiM2IwNiksIC0yMTAsIC00NH0sCisgICAgICAgICAgICB7
VUlOVDY0XzJQQVJUX0MoMHhhYTI0MjQ5OSwgNjk3MzkyZDMpLCAtMTgzLCAtMzZ9LAorICAgICAg
ICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZmQ4N2I1ZjIsIDgzMDBjYTBlKSwgLTE1NywgLTI4fSwK
KyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGJjZTUwODY0LCA5MjExMWFlYiksIC0xMzAs
IC0yMH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg4Y2JjY2MwOSwgNmY1MDg4Y2Mp
LCAtMTAzLCAtMTJ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZDFiNzE3NTgsIGUy
MTk2NTJjKSwgLTc3LCAtNH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg5YzQwMDAw
MCwgMDAwMDAwMDApLCAtNTAsIDR9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZThk
NGE1MTAsIDAwMDAwMDAwKSwgLTI0LCAxMn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0Mo
MHhhZDc4ZWJjNSwgYWM2MjAwMDApLCAzLCAyMH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJU
X0MoMHg4MTNmMzk3OCwgZjg5NDA5ODQpLCAzMCwgMjh9LAorICAgICAgICAgICAge1VJTlQ2NF8y
UEFSVF9DKDB4YzA5N2NlN2IsIGM5MDcxNWIzKSwgNTYsIDM2fSwKKyAgICAgICAgICAgIHtVSU5U
NjRfMlBBUlRfQygweDhmN2UzMmNlLCA3YmVhNWM3MCksIDgzLCA0NH0sCisgICAgICAgICAgICB7
VUlOVDY0XzJQQVJUX0MoMHhkNWQyMzhhNCwgYWJlOTgwNjgpLCAxMDksIDUyfSwKKyAgICAgICAg
ICAgIHtVSU5UNjRfMlBBUlRfQygweDlmNGYyNzI2LCAxNzlhMjI0NSksIDEzNiwgNjB9LAorICAg
ICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZWQ2M2EyMzEsIGQ0YzRmYjI3KSwgMTYyLCA2OH0s
CisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhiMGRlNjUzOCwgOGNjOGFkYTgpLCAxODks
IDc2fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDgzYzcwODhlLCAxYWFiNjVkYiks
IDIxNiwgODR9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YzQ1ZDFkZjksIDQyNzEx
ZDlhKSwgMjQyLCA5Mn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg5MjRkNjkyYywg
YTYxYmU3NTgpLCAyNjksIDEwMH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhkYTAx
ZWU2NCwgMWE3MDhkZWEpLCAyOTUsIDEwOH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0Mo
MHhhMjZkYTM5OSwgOWFlZjc3NGEpLCAzMjIsIDExNn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQ
QVJUX0MoMHhmMjA5Nzg3YiwgYjQ3ZDZiODUpLCAzNDgsIDEyNH0sCisgICAgICAgICAgICB7VUlO
VDY0XzJQQVJUX0MoMHhiNDU0ZTRhMSwgNzlkZDE4NzcpLCAzNzUsIDEzMn0sCisgICAgICAgICAg
ICB7VUlOVDY0XzJQQVJUX0MoMHg4NjViODY5MiwgNWI5YmM1YzIpLCA0MDIsIDE0MH0sCisgICAg
ICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhjODM1NTNjNSwgYzg5NjVkM2QpLCA0MjgsIDE0OH0s
CisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg5NTJhYjQ1YywgZmE5N2EwYjMpLCA0NTUs
IDE1Nn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhkZTQ2OWZiZCwgOTlhMDVmZTMp
LCA0ODEsIDE2NH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhhNTliYzIzNCwgZGIz
OThjMjUpLCA1MDgsIDE3Mn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhmNmM2OWE3
MiwgYTM5ODlmNWMpLCA1MzQsIDE4MH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhi
N2RjYmY1MywgNTRlOWJlY2UpLCA1NjEsIDE4OH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJU
X0MoMHg4OGZjZjMxNywgZjIyMjQxZTIpLCA1ODgsIDE5Nn0sCisgICAgICAgICAgICB7VUlOVDY0
XzJQQVJUX0MoMHhjYzIwY2U5YiwgZDM1Yzc4YTUpLCA2MTQsIDIwNH0sCisgICAgICAgICAgICB7
VUlOVDY0XzJQQVJUX0MoMHg5ODE2NWFmMywgN2IyMTUzZGYpLCA2NDEsIDIxMn0sCisgICAgICAg
ICAgICB7VUlOVDY0XzJQQVJUX0MoMHhlMmEwYjVkYywgOTcxZjMwM2EpLCA2NjcsIDIyMH0sCisg
ICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhhOGQ5ZDE1MywgNWNlM2IzOTYpLCA2OTQsIDIy
OH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhmYjliN2NkOSwgYTRhNzQ0M2MpLCA3
MjAsIDIzNn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhiYjc2NGM0YywgYTdhNDQ0
MTApLCA3NDcsIDI0NH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg4YmFiOGVlZiwg
YjY0MDljMWEpLCA3NzQsIDI1Mn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhkMDFm
ZWYxMCwgYTY1Nzg0MmMpLCA4MDAsIDI2MH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0Mo
MHg5YjEwYTRlNSwgZTk5MTMxMjkpLCA4MjcsIDI2OH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQ
QVJUX0MoMHhlNzEwOWJmYiwgYTE5YzBjOWQpLCA4NTMsIDI3Nn0sCisgICAgICAgICAgICB7VUlO
VDY0XzJQQVJUX0MoMHhhYzI4MjBkOSwgNjIzYmY0MjkpLCA4ODAsIDI4NH0sCisgICAgICAgICAg
ICB7VUlOVDY0XzJQQVJUX0MoMHg4MDQ0NGI1ZSwgN2FhN2NmODUpLCA5MDcsIDI5Mn0sCisgICAg
ICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhiZjIxZTQ0MCwgMDNhY2RkMmQpLCA5MzMsIDMwMH0s
CisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg4ZTY3OWMyZiwgNWU0NGZmOGYpLCA5NjAs
IDMwOH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhkNDMzMTc5ZCwgOWM4Y2I4NDEp
LCA5ODYsIDMxNn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg5ZTE5ZGI5MiwgYjRl
MzFiYTkpLCAxMDEzLCAzMjR9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZWI5NmJm
NmUsIGJhZGY3N2Q5KSwgMTAzOSwgMzMyfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygw
eGFmODcwMjNiLCA5YmYwZWU2YiksIDEwNjYsIDM0MH0sCisgICAgICAgIH07CisgICAgICAgIGtD
YWNoZWRQb3dlcnMgPSBjYWNoZWRQb3dlcnM7CisgICAgICAgIGtDYWNoZWRQb3dlcnNMZW5ndGgg
PSBBUlJBWV9TSVpFKGNhY2hlZFBvd2Vycyk7CisgICAgICAgIGtDYWNoZWRQb3dlcnNPZmZzZXQg
PSAtY2FjaGVkUG93ZXJzWzBdLmRlY2ltYWxfZXhwb25lbnQ7CisgICAgICAgIFBvd2Vyc09mVGVu
Q2FjaGU6OmtEZWNpbWFsRXhwb25lbnREaXN0YW5jZSA9IGtDYWNoZWRQb3dlcnNbMV0uZGVjaW1h
bF9leHBvbmVudCAtIGtDYWNoZWRQb3dlcnNbMF0uZGVjaW1hbF9leHBvbmVudDsKKyAgICAgICAg
UG93ZXJzT2ZUZW5DYWNoZTo6a01pbkRlY2ltYWxFeHBvbmVudCA9IGtDYWNoZWRQb3dlcnNbMF0u
ZGVjaW1hbF9leHBvbmVudDsKKyAgICAgICAgUG93ZXJzT2ZUZW5DYWNoZTo6a01heERlY2ltYWxF
eHBvbmVudCA9IGtDYWNoZWRQb3dlcnNba0NhY2hlZFBvd2Vyc0xlbmd0aCAtIDFdLmRlY2ltYWxf
ZXhwb25lbnQ7CisgICAgfQorICAgIAorICAgIHZvaWQgUG93ZXJzT2ZUZW5DYWNoZTo6R2V0Q2Fj
aGVkUG93ZXJGb3JCaW5hcnlFeHBvbmVudFJhbmdlKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtaW5fZXhwb25lbnQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IG1heF9leHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXlGcCogcG93ZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50KiBkZWNpbWFsX2V4cG9uZW50KSB7CisgICAgICAgIFVOVVNFRF9QQVJBTShtYXhfZXhwb25l
bnQpOworICAgICAgICBpbnQga1EgPSBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZTsKKyAgICAgICAg
ZG91YmxlIGsgPSBjZWlsKChtaW5fZXhwb25lbnQgKyBrUSAtIDEpICoga0RfMV9MT0cyXzEwKTsK
KyAgICAgICAgaW50IGZvbyA9IGtDYWNoZWRQb3dlcnNPZmZzZXQ7CisgICAgICAgIGludCBpbmRl
eCA9CisgICAgICAgIChmb28gKyBzdGF0aWNfY2FzdDxpbnQ+KGspIC0gMSkgLyBrRGVjaW1hbEV4
cG9uZW50RGlzdGFuY2UgKyAxOworICAgICAgICBBU1NFUlQoMCA8PSBpbmRleCAmJiBpbmRleCA8
IGtDYWNoZWRQb3dlcnNMZW5ndGgpOworICAgICAgICBDYWNoZWRQb3dlciBjYWNoZWRfcG93ZXIg
PSBrQ2FjaGVkUG93ZXJzW2luZGV4XTsKKyAgICAgICAgQVNTRVJUKG1pbl9leHBvbmVudCA8PSBj
YWNoZWRfcG93ZXIuYmluYXJ5X2V4cG9uZW50KTsKKyAgICAgICAgQVNTRVJUKGNhY2hlZF9wb3dl
ci5iaW5hcnlfZXhwb25lbnQgPD0gbWF4X2V4cG9uZW50KTsKKyAgICAgICAgKmRlY2ltYWxfZXhw
b25lbnQgPSBjYWNoZWRfcG93ZXIuZGVjaW1hbF9leHBvbmVudDsKKyAgICAgICAgKnBvd2VyID0g
RGl5RnAoY2FjaGVkX3Bvd2VyLnNpZ25pZmljYW5kLCBjYWNoZWRfcG93ZXIuYmluYXJ5X2V4cG9u
ZW50KTsKKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBQb3dlcnNPZlRlbkNhY2hlOjpHZXRD
YWNoZWRQb3dlckZvckRlY2ltYWxFeHBvbmVudChpbnQgcmVxdWVzdGVkX2V4cG9uZW50LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RGl5RnAqIHBvd2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50KiBmb3VuZF9leHBvbmVudCkgeworICAgICAgICBBU1NFUlQo
a01pbkRlY2ltYWxFeHBvbmVudCA8PSByZXF1ZXN0ZWRfZXhwb25lbnQpOworICAgICAgICBBU1NF
UlQocmVxdWVzdGVkX2V4cG9uZW50IDwga01heERlY2ltYWxFeHBvbmVudCArIGtEZWNpbWFsRXhw
b25lbnREaXN0YW5jZSk7CisgICAgICAgIGludCBpbmRleCA9CisgICAgICAgIChyZXF1ZXN0ZWRf
ZXhwb25lbnQgKyBrQ2FjaGVkUG93ZXJzT2Zmc2V0KSAvIGtEZWNpbWFsRXhwb25lbnREaXN0YW5j
ZTsKKyAgICAgICAgQ2FjaGVkUG93ZXIgY2FjaGVkX3Bvd2VyID0ga0NhY2hlZFBvd2Vyc1tpbmRl
eF07CisgICAgICAgICpwb3dlciA9IERpeUZwKGNhY2hlZF9wb3dlci5zaWduaWZpY2FuZCwgY2Fj
aGVkX3Bvd2VyLmJpbmFyeV9leHBvbmVudCk7CisgICAgICAgICpmb3VuZF9leHBvbmVudCA9IGNh
Y2hlZF9wb3dlci5kZWNpbWFsX2V4cG9uZW50OworICAgICAgICBBU1NFUlQoKmZvdW5kX2V4cG9u
ZW50IDw9IHJlcXVlc3RlZF9leHBvbmVudCk7CisgICAgICAgIEFTU0VSVChyZXF1ZXN0ZWRfZXhw
b25lbnQgPCAqZm91bmRfZXhwb25lbnQgKyBrRGVjaW1hbEV4cG9uZW50RGlzdGFuY2UpOworICAg
IH0KKyAgICAKK30gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2NhY2hlZC1wb3dlcnMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWExZGMy
NTllMWRjZTQ4OTkzMDBmZGUyY2Y3ZmZiODIwMzA3MDZmMgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmgKQEAgLTAsMCArMSw2
OCBAQAorLy8gQ29weXJpZ2h0IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8K
Ky8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8g
ICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAg
ICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
Ly8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWZuZGVmIERPVUJMRV9DT05WRVJT
SU9OX0NBQ0hFRF9QT1dFUlNfSF8KKyNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05fQ0FDSEVEX1BP
V0VSU19IXworCisjaW5jbHVkZSAiZGl5LWZwLmgiCisKK25hbWVzcGFjZSBkb3VibGVfY29udmVy
c2lvbiB7CisgICAgCisgICAgY2xhc3MgUG93ZXJzT2ZUZW5DYWNoZSB7CisgICAgcHVibGljOgor
ICAgICAgICAKKyAgICAgICAgLy8gTm90IGFsbCBwb3dlcnMgb2YgdGVuIGFyZSBjYWNoZWQuIFRo
ZSBkZWNpbWFsIGV4cG9uZW50IG9mIHR3byBuZWlnaGJvcmluZworICAgICAgICAvLyBjYWNoZWQg
bnVtYmVycyB3aWxsIGRpZmZlciBieSBrRGVjaW1hbEV4cG9uZW50RGlzdGFuY2UuCisgICAgICAg
IHN0YXRpYyBpbnQga0RlY2ltYWxFeHBvbmVudERpc3RhbmNlOworICAgICAgICAKKyAgICAgICAg
c3RhdGljIGludCBrTWluRGVjaW1hbEV4cG9uZW50OworICAgICAgICBzdGF0aWMgaW50IGtNYXhE
ZWNpbWFsRXhwb25lbnQ7CisgICAgICAgIAorICAgICAgICAvLyBSZXR1cm5zIGEgY2FjaGVkIHBv
d2VyLW9mLXRlbiB3aXRoIGEgYmluYXJ5IGV4cG9uZW50IGluIHRoZSByYW5nZQorICAgICAgICAv
LyBbbWluX2V4cG9uZW50OyBtYXhfZXhwb25lbnRdIChib3VuZGFyaWVzIGluY2x1ZGVkKS4KKyAg
ICAgICAgc3RhdGljIHZvaWQgR2V0Q2FjaGVkUG93ZXJGb3JCaW5hcnlFeHBvbmVudFJhbmdlKGlu
dCBtaW5fZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgbWF4X2V4cG9uZW50LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGl5RnAqIHBvd2VyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBk
ZWNpbWFsX2V4cG9uZW50KTsKKyAgICAgICAgCisgICAgICAgIC8vIFJldHVybnMgYSBjYWNoZWQg
cG93ZXIgb2YgdGVuIHggfj0gMTBeayBzdWNoIHRoYXQKKyAgICAgICAgLy8gICBrIDw9IGRlY2lt
YWxfZXhwb25lbnQgPCBrICsga0NhY2hlZFBvd2Vyc0RlY2ltYWxEaXN0YW5jZS4KKyAgICAgICAg
Ly8gVGhlIGdpdmVuIGRlY2ltYWxfZXhwb25lbnQgbXVzdCBzYXRpc2Z5CisgICAgICAgIC8vICAg
a01pbkRlY2ltYWxFeHBvbmVudCA8PSByZXF1ZXN0ZWRfZXhwb25lbnQsIGFuZAorICAgICAgICAv
LyAgIHJlcXVlc3RlZF9leHBvbmVudCA8IGtNYXhEZWNpbWFsRXhwb25lbnQgKyBrRGVjaW1hbEV4
cG9uZW50RGlzdGFuY2UuCisgICAgICAgIHN0YXRpYyB2b2lkIEdldENhY2hlZFBvd2VyRm9yRGVj
aW1hbEV4cG9uZW50KGludCByZXF1ZXN0ZWRfZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpeUZwKiBwb3dlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBmb3VuZF9l
eHBvbmVudCk7CisgICAgfTsKKyAgICAKKyAgICAvLyBJbml0aWFsaXplcyB0aGUgdGFibGUgb2Yg
Y2FjaGVkIHBvd2VycyB1c2VkIGJ5IHRoZSBkdG9hIGFsZ29yaXRobS4KKyAgICAvLyBUaGlzIG5l
ZWRzIHRvIGJlIGNhbGxlZCB3aGVuIEpTQyBpcyBiZWluZyBpbml0aWFsaXplZC4KKyAgICB2b2lk
IGluaXRpYWxpemUoKTsKKyAgICAKK30gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbgor
CisjZW5kaWYgIC8vIERPVUJMRV9DT05WRVJTSU9OX0NBQ0hFRF9QT1dFUlNfSF8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kaXktZnAuY2MgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL2R0b2EvZGl5LWZwLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFiMWY3ZWUzNWI5Y2Qx
YzBiMGQ0MWNkZjE3N2VhODg4ZWU5YWNiNDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL2R0b2EvZGl5LWZwLmNjCkBAIC0wLDAgKzEsNTcgQEAKKy8vIENvcHly
aWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWlt
ZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAor
Ly8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisv
LyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworCisjaW5jbHVkZSAiZGl5LWZwLmgiCisjaW5jbHVkZSAidXRp
bHMuaCIKKworbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKKyAgICAKKyAgICB2b2lkIERp
eUZwOjpNdWx0aXBseShjb25zdCBEaXlGcCYgb3RoZXIpIHsKKyAgICAgICAgLy8gU2ltcGx5ICJl
bXVsYXRlcyIgYSAxMjggYml0IG11bHRpcGxpY2F0aW9uLgorICAgICAgICAvLyBIb3dldmVyOiB0
aGUgcmVzdWx0aW5nIG51bWJlciBvbmx5IGNvbnRhaW5zIDY0IGJpdHMuIFRoZSBsZWFzdAorICAg
ICAgICAvLyBzaWduaWZpY2FudCA2NCBiaXRzIGFyZSBvbmx5IHVzZWQgZm9yIHJvdW5kaW5nIHRo
ZSBtb3N0IHNpZ25pZmljYW50IDY0CisgICAgICAgIC8vIGJpdHMuCisgICAgICAgIGNvbnN0IHVp
bnQ2NF90IGtNMzIgPSAweEZGRkZGRkZGVTsKKyAgICAgICAgdWludDY0X3QgYSA9IGZfID4+IDMy
OworICAgICAgICB1aW50NjRfdCBiID0gZl8gJiBrTTMyOworICAgICAgICB1aW50NjRfdCBjID0g
b3RoZXIuZl8gPj4gMzI7CisgICAgICAgIHVpbnQ2NF90IGQgPSBvdGhlci5mXyAmIGtNMzI7Cisg
ICAgICAgIHVpbnQ2NF90IGFjID0gYSAqIGM7CisgICAgICAgIHVpbnQ2NF90IGJjID0gYiAqIGM7
CisgICAgICAgIHVpbnQ2NF90IGFkID0gYSAqIGQ7CisgICAgICAgIHVpbnQ2NF90IGJkID0gYiAq
IGQ7CisgICAgICAgIHVpbnQ2NF90IHRtcCA9IChiZCA+PiAzMikgKyAoYWQgJiBrTTMyKSArIChi
YyAmIGtNMzIpOworICAgICAgICAvLyBCeSBhZGRpbmcgMVUgPDwgMzEgdG8gdG1wIHdlIHJvdW5k
IHRoZSBmaW5hbCByZXN1bHQuCisgICAgICAgIC8vIEhhbGZ3YXkgY2FzZXMgd2lsbCBiZSByb3Vu
ZCB1cC4KKyAgICAgICAgdG1wICs9IDFVIDw8IDMxOworICAgICAgICB1aW50NjRfdCByZXN1bHRf
ZiA9IGFjICsgKGFkID4+IDMyKSArIChiYyA+PiAzMikgKyAodG1wID4+IDMyKTsKKyAgICAgICAg
ZV8gKz0gb3RoZXIuZV8gKyA2NDsKKyAgICAgICAgZl8gPSByZXN1bHRfZjsKKyAgICB9CisgICAg
Cit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kaXktZnAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvZHRvYS9kaXktZnAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZmFkYjM3YmJkNjdhMzJkMmZiOGFkMDEzZDM1
NWJlNzBkMmJlMDdkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9kdG9hL2RpeS1mcC5oCkBAIC0wLDAgKzEsMTE4IEBACisvLyBDb3B5cmlnaHQgMjAxMCB0aGUg
VjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisv
LyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
Ly8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8g
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKKyNpZm5kZWYgRE9VQkxFX0NPTlZFUlNJT05fRElZX0ZQX0hfCisjZGVmaW5lIERPVUJM
RV9DT05WRVJTSU9OX0RJWV9GUF9IXworCisjaW5jbHVkZSAidXRpbHMuaCIKKworbmFtZXNwYWNl
IGRvdWJsZV9jb252ZXJzaW9uIHsKKyAgICAKKyAgICAvLyBUaGlzICJEbyBJdCBZb3Vyc2VsZiBG
bG9hdGluZyBQb2ludCIgY2xhc3MgaW1wbGVtZW50cyBhIGZsb2F0aW5nLXBvaW50IG51bWJlcgor
ICAgIC8vIHdpdGggYSB1aW50NjQgc2lnbmlmaWNhbmQgYW5kIGFuIGludCBleHBvbmVudC4gTm9y
bWFsaXplZCBEaXlGcCBudW1iZXJzIHdpbGwKKyAgICAvLyBoYXZlIHRoZSBtb3N0IHNpZ25pZmlj
YW50IGJpdCBvZiB0aGUgc2lnbmlmaWNhbmQgc2V0LgorICAgIC8vIE11bHRpcGxpY2F0aW9uIGFu
ZCBTdWJ0cmFjdGlvbiBkbyBub3Qgbm9ybWFsaXplIHRoZWlyIHJlc3VsdHMuCisgICAgLy8gRGl5
RnAgYXJlIG5vdCBkZXNpZ25lZCB0byBjb250YWluIHNwZWNpYWwgZG91YmxlcyAoTmFOIGFuZCBJ
bmZpbml0eSkuCisgICAgY2xhc3MgRGl5RnAgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBrU2lnbmlmaWNhbmRTaXplID0gNjQ7CisgICAgICAgIAorICAgICAgICBEaXlG
cCgpIDogZl8oMCksIGVfKDApIHt9CisgICAgICAgIERpeUZwKHVpbnQ2NF90IGYsIGludCBlKSA6
IGZfKGYpLCBlXyhlKSB7fQorICAgICAgICAKKyAgICAgICAgLy8gdGhpcyA9IHRoaXMgLSBvdGhl
ci4KKyAgICAgICAgLy8gVGhlIGV4cG9uZW50cyBvZiBib3RoIG51bWJlcnMgbXVzdCBiZSB0aGUg
c2FtZSBhbmQgdGhlIHNpZ25pZmljYW5kIG9mIHRoaXMKKyAgICAgICAgLy8gbXVzdCBiZSBiaWdn
ZXIgdGhhbiB0aGUgc2lnbmlmaWNhbmQgb2Ygb3RoZXIuCisgICAgICAgIC8vIFRoZSByZXN1bHQg
d2lsbCBub3QgYmUgbm9ybWFsaXplZC4KKyAgICAgICAgdm9pZCBTdWJ0cmFjdChjb25zdCBEaXlG
cCYgb3RoZXIpIHsKKyAgICAgICAgICAgIEFTU0VSVChlXyA9PSBvdGhlci5lXyk7CisgICAgICAg
ICAgICBBU1NFUlQoZl8gPj0gb3RoZXIuZl8pOworICAgICAgICAgICAgZl8gLT0gb3RoZXIuZl87
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFJldHVybnMgYSAtIGIuCisgICAgICAg
IC8vIFRoZSBleHBvbmVudHMgb2YgYm90aCBudW1iZXJzIG11c3QgYmUgdGhlIHNhbWUgYW5kIHRo
aXMgbXVzdCBiZSBiaWdnZXIKKyAgICAgICAgLy8gdGhhbiBvdGhlci4gVGhlIHJlc3VsdCB3aWxs
IG5vdCBiZSBub3JtYWxpemVkLgorICAgICAgICBzdGF0aWMgRGl5RnAgTWludXMoY29uc3QgRGl5
RnAmIGEsIGNvbnN0IERpeUZwJiBiKSB7CisgICAgICAgICAgICBEaXlGcCByZXN1bHQgPSBhOwor
ICAgICAgICAgICAgcmVzdWx0LlN1YnRyYWN0KGIpOworICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgCisgICAgICAgIC8vIHRoaXMgPSB0aGlz
ICogb3RoZXIuCisgICAgICAgIHZvaWQgTXVsdGlwbHkoY29uc3QgRGl5RnAmIG90aGVyKTsKKyAg
ICAgICAgCisgICAgICAgIC8vIHJldHVybnMgYSAqIGI7CisgICAgICAgIHN0YXRpYyBEaXlGcCBU
aW1lcyhjb25zdCBEaXlGcCYgYSwgY29uc3QgRGl5RnAmIGIpIHsKKyAgICAgICAgICAgIERpeUZw
IHJlc3VsdCA9IGE7CisgICAgICAgICAgICByZXN1bHQuTXVsdGlwbHkoYik7CisgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIE5vcm1h
bGl6ZSgpIHsKKyAgICAgICAgICAgIEFTU0VSVChmXyAhPSAwKTsKKyAgICAgICAgICAgIHVpbnQ2
NF90IGYgPSBmXzsKKyAgICAgICAgICAgIGludCBlID0gZV87CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vIFRoaXMgbWV0aG9kIGlzIG1haW5seSBjYWxsZWQgZm9yIG5vcm1hbGl6aW5nIGJv
dW5kYXJpZXMuIEluIGdlbmVyYWwKKyAgICAgICAgICAgIC8vIGJvdW5kYXJpZXMgbmVlZCB0byBi
ZSBzaGlmdGVkIGJ5IDEwIGJpdHMuIFdlIHRodXMgb3B0aW1pemUgZm9yIHRoaXMgY2FzZS4KKyAg
ICAgICAgICAgIGNvbnN0IHVpbnQ2NF90IGsxME1TQml0cyA9IFVJTlQ2NF8yUEFSVF9DKDB4RkZD
MDAwMDAsIDAwMDAwMDAwKTsKKyAgICAgICAgICAgIHdoaWxlICgoZiAmIGsxME1TQml0cykgPT0g
MCkgeworICAgICAgICAgICAgICAgIGYgPDw9IDEwOworICAgICAgICAgICAgICAgIGUgLT0gMTA7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAoKGYgJiBrVWludDY0TVNCKSA9PSAw
KSB7CisgICAgICAgICAgICAgICAgZiA8PD0gMTsKKyAgICAgICAgICAgICAgICBlLS07CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBmXyA9IGY7CisgICAgICAgICAgICBlXyA9IGU7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBEaXlGcCBOb3JtYWxpemUoY29uc3QgRGl5
RnAmIGEpIHsKKyAgICAgICAgICAgIERpeUZwIHJlc3VsdCA9IGE7CisgICAgICAgICAgICByZXN1
bHQuTm9ybWFsaXplKCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICB1aW50NjRfdCBmKCkgY29uc3QgeyByZXR1cm4gZl87IH0KKyAgICAg
ICAgaW50IGUoKSBjb25zdCB7IHJldHVybiBlXzsgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBz
ZXRfZih1aW50NjRfdCBuZXdfdmFsdWUpIHsgZl8gPSBuZXdfdmFsdWU7IH0KKyAgICAgICAgdm9p
ZCBzZXRfZShpbnQgbmV3X3ZhbHVlKSB7IGVfID0gbmV3X3ZhbHVlOyB9CisgICAgICAgIAorICAg
IHByaXZhdGU6CisgICAgICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBrVWludDY0TVNCID0gVUlO
VDY0XzJQQVJUX0MoMHg4MDAwMDAwMCwgMDAwMDAwMDApOworICAgICAgICAKKyAgICAgICAgdWlu
dDY0X3QgZl87CisgICAgICAgIGludCBlXzsKKyAgICB9OworICAgIAorfSAgLy8gbmFtZXNwYWNl
IGRvdWJsZV9jb252ZXJzaW9uCisKKyNlbmRpZiAgLy8gRE9VQkxFX0NPTlZFUlNJT05fRElZX0ZQ
X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZG91YmxlLWNv
bnZlcnNpb24uY2MgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZG91YmxlLWNvbnZl
cnNpb24uY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMzE3ZGYxNDJlOWE0YzIzMDNiYTRiMmNkMDEzMmExNmE0ZTI4
ZjJmYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9k
b3VibGUtY29udmVyc2lvbi5jYwpAQCAtMCwwICsxLDg2OSBAQAorLy8gQ29weXJpZ2h0IDIwMTAg
dGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
Ky8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5j
bHVkZSAiZG91YmxlLWNvbnZlcnNpb24uaCIKKworI2luY2x1ZGUgImJpZ251bS1kdG9hLmgiCisj
aW5jbHVkZSAiZG91YmxlLmgiCisjaW5jbHVkZSAiZmFzdC1kdG9hLmgiCisjaW5jbHVkZSAiZml4
ZWQtZHRvYS5oIgorI2luY2x1ZGUgInN0cnRvZC5oIgorI2luY2x1ZGUgInV0aWxzLmgiCisKK25h
bWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgY29uc3QgRG91YmxlVG9TdHJp
bmdDb252ZXJ0ZXImIERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpFY21hU2NyaXB0Q29udmVydGVy
KCkgeworICAgICAgICBpbnQgZmxhZ3MgPSBVTklRVUVfWkVSTyB8IEVNSVRfUE9TSVRJVkVfRVhQ
T05FTlRfU0lHTjsKKyAgICAgICAgc3RhdGljIERvdWJsZVRvU3RyaW5nQ29udmVydGVyIGNvbnZl
cnRlcihmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiSW5maW5pdHkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJOYU4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICdlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAtNiwgMjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgNiwgMCk7CisgICAgICAgIHJldHVybiBjb252ZXJ0ZXI7CisgICAgfQorICAgIAor
ICAgIAorICAgIGJvb2wgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6OkhhbmRsZVNwZWNpYWxWYWx1
ZXMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkb3VibGUgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyKiByZXN1bHRfYnVpbGRlcikgY29uc3QgeworICAg
ICAgICBEb3VibGUgZG91YmxlX2luc3BlY3QodmFsdWUpOworICAgICAgICBpZiAoZG91YmxlX2lu
c3BlY3QuSXNJbmZpbml0ZSgpKSB7CisgICAgICAgICAgICBpZiAoaW5maW5pdHlfc3ltYm9sXyA9
PSBOVUxMKSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAodmFsdWUgPCAwKSB7CisgICAg
ICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcignLScpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZFN0cmluZyhpbmZpbml0eV9zeW1i
b2xfKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChk
b3VibGVfaW5zcGVjdC5Jc05hbigpKSB7CisgICAgICAgICAgICBpZiAobmFuX3N5bWJvbF8gPT0g
TlVMTCkgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZFN0cmlu
ZyhuYW5fc3ltYm9sXyk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgRG91YmxlVG9T
dHJpbmdDb252ZXJ0ZXI6OkNyZWF0ZUV4cG9uZW50aWFsUmVwcmVzZW50YXRpb24oCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyKiBkZWNpbWFsX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyKiByZXN1bHRfYnVpbGRl
cikgY29uc3QgeworICAgICAgICBBU1NFUlQobGVuZ3RoICE9IDApOworICAgICAgICByZXN1bHRf
YnVpbGRlci0+QWRkQ2hhcmFjdGVyKGRlY2ltYWxfZGlnaXRzWzBdKTsKKyAgICAgICAgaWYgKGxl
bmd0aCAhPSAxKSB7CisgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKCcu
Jyk7CisgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkU3Vic3RyaW5nKCZkZWNpbWFsX2Rp
Z2l0c1sxXSwgbGVuZ3RoLTEpOworICAgICAgICB9CisgICAgICAgIHJlc3VsdF9idWlsZGVyLT5B
ZGRDaGFyYWN0ZXIoZXhwb25lbnRfY2hhcmFjdGVyXyk7CisgICAgICAgIGlmIChleHBvbmVudCA8
IDApIHsKKyAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRDaGFyYWN0ZXIoJy0nKTsKKyAg
ICAgICAgICAgIGV4cG9uZW50ID0gLWV4cG9uZW50OworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgaWYgKChmbGFnc18gJiBFTUlUX1BPU0lUSVZFX0VYUE9ORU5UX1NJR04pICE9IDApIHsK
KyAgICAgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKCcrJyk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGV4cG9uZW50ID09IDApIHsKKyAgICAg
ICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRDaGFyYWN0ZXIoJzAnKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoZXhwb25lbnQgPCAxZTQpOworICAgICAg
ICBjb25zdCBpbnQga01heEV4cG9uZW50TGVuZ3RoID0gNTsKKyAgICAgICAgY2hhciBidWZmZXJb
a01heEV4cG9uZW50TGVuZ3RoXTsKKyAgICAgICAgaW50IGZpcnN0X2NoYXJfcG9zID0ga01heEV4
cG9uZW50TGVuZ3RoOworICAgICAgICB3aGlsZSAoZXhwb25lbnQgPiAwKSB7CisgICAgICAgICAg
ICBidWZmZXJbLS1maXJzdF9jaGFyX3Bvc10gPSAnMCcgKyAoZXhwb25lbnQgJSAxMCk7CisgICAg
ICAgICAgICBleHBvbmVudCAvPSAxMDsKKyAgICAgICAgfQorICAgICAgICByZXN1bHRfYnVpbGRl
ci0+QWRkU3Vic3RyaW5nKCZidWZmZXJbZmlyc3RfY2hhcl9wb3NdLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGtNYXhFeHBvbmVudExlbmd0aCAtIGZpcnN0X2NoYXJfcG9z
KTsKKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6
Q3JlYXRlRGVjaW1hbFJlcHJlc2VudGF0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBkZWNpbWFsX2Rp
Z2l0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlY2ltYWxfcG9pbnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBkaWdpdHNfYWZ0ZXJfcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVy
KSBjb25zdCB7CisgICAgICAgIC8vIENyZWF0ZSBhIHJlcHJlc2VudGF0aW9uIHRoYXQgaXMgcGFk
ZGVkIHdpdGggemVyb3MgaWYgbmVlZGVkLgorICAgICAgICBpZiAoZGVjaW1hbF9wb2ludCA8PSAw
KSB7CisgICAgICAgICAgICAvLyAiMC4wMDAwMGRlY2ltYWxfcmVwIi4KKyAgICAgICAgICAgIHJl
c3VsdF9idWlsZGVyLT5BZGRDaGFyYWN0ZXIoJzAnKTsKKyAgICAgICAgICAgIGlmIChkaWdpdHNf
YWZ0ZXJfcG9pbnQgPiAwKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENo
YXJhY3RlcignLicpOworICAgICAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRQYWRkaW5n
KCcwJywgLWRlY2ltYWxfcG9pbnQpOworICAgICAgICAgICAgICAgIEFTU0VSVChsZW5ndGggPD0g
ZGlnaXRzX2FmdGVyX3BvaW50IC0gKC1kZWNpbWFsX3BvaW50KSk7CisgICAgICAgICAgICAgICAg
cmVzdWx0X2J1aWxkZXItPkFkZFN1YnN0cmluZyhkZWNpbWFsX2RpZ2l0cywgbGVuZ3RoKTsKKyAg
ICAgICAgICAgICAgICBpbnQgcmVtYWluaW5nX2RpZ2l0cyA9IGRpZ2l0c19hZnRlcl9wb2ludCAt
ICgtZGVjaW1hbF9wb2ludCkgLSBsZW5ndGg7CisgICAgICAgICAgICAgICAgcmVzdWx0X2J1aWxk
ZXItPkFkZFBhZGRpbmcoJzAnLCByZW1haW5pbmdfZGlnaXRzKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIGlmIChkZWNpbWFsX3BvaW50ID49IGxlbmd0aCkgeworICAgICAgICAgICAg
Ly8gImRlY2ltYWxfcmVwMDAwMC4wMDAwMCIgb3IgImRlY2ltYWxfcmVwLjAwMDAiCisgICAgICAg
ICAgICByZXN1bHRfYnVpbGRlci0+QWRkU3Vic3RyaW5nKGRlY2ltYWxfZGlnaXRzLCBsZW5ndGgp
OworICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZFBhZGRpbmcoJzAnLCBkZWNpbWFsX3Bv
aW50IC0gbGVuZ3RoKTsKKyAgICAgICAgICAgIGlmIChkaWdpdHNfYWZ0ZXJfcG9pbnQgPiAwKSB7
CisgICAgICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcignLicpOworICAg
ICAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRQYWRkaW5nKCcwJywgZGlnaXRzX2FmdGVy
X3BvaW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8v
ICJkZWNpbWEubF9yZXAwMDAiCisgICAgICAgICAgICBBU1NFUlQoZGlnaXRzX2FmdGVyX3BvaW50
ID4gMCk7CisgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkU3Vic3RyaW5nKGRlY2ltYWxf
ZGlnaXRzLCBkZWNpbWFsX3BvaW50KTsKKyAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRD
aGFyYWN0ZXIoJy4nKTsKKyAgICAgICAgICAgIEFTU0VSVChsZW5ndGggLSBkZWNpbWFsX3BvaW50
IDw9IGRpZ2l0c19hZnRlcl9wb2ludCk7CisgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRk
U3Vic3RyaW5nKCZkZWNpbWFsX2RpZ2l0c1tkZWNpbWFsX3BvaW50XSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoIC0gZGVjaW1hbF9wb2ludCk7CisgICAg
ICAgICAgICBpbnQgcmVtYWluaW5nX2RpZ2l0cyA9IGRpZ2l0c19hZnRlcl9wb2ludCAtIChsZW5n
dGggLSBkZWNpbWFsX3BvaW50KTsKKyAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRQYWRk
aW5nKCcwJywgcmVtYWluaW5nX2RpZ2l0cyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRpZ2l0
c19hZnRlcl9wb2ludCA9PSAwKSB7CisgICAgICAgICAgICBpZiAoKGZsYWdzXyAmIEVNSVRfVFJB
SUxJTkdfREVDSU1BTF9QT0lOVCkgIT0gMCkgeworICAgICAgICAgICAgICAgIHJlc3VsdF9idWls
ZGVyLT5BZGRDaGFyYWN0ZXIoJy4nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgo
ZmxhZ3NfICYgRU1JVF9UUkFJTElOR19aRVJPX0FGVEVSX1BPSU5UKSAhPSAwKSB7CisgICAgICAg
ICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcignMCcpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIGJvb2wgRG91YmxlVG9TdHJpbmdD
b252ZXJ0ZXI6OlRvU2hvcnRlc3QoZG91YmxlIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVpbGRlciogcmVzdWx0X2J1aWxkZXIpIGNv
bnN0IHsKKyAgICAgICAgaWYgKERvdWJsZSh2YWx1ZSkuSXNTcGVjaWFsKCkpIHsKKyAgICAgICAg
ICAgIHJldHVybiBIYW5kbGVTcGVjaWFsVmFsdWVzKHZhbHVlLCByZXN1bHRfYnVpbGRlcik7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludCBkZWNpbWFsX3BvaW50OworICAgICAgICBi
b29sIHNpZ247CisgICAgICAgIGNvbnN0IGludCBrRGVjaW1hbFJlcENhcGFjaXR5ID0ga0Jhc2Ux
ME1heGltYWxMZW5ndGggKyAxOworICAgICAgICBjaGFyIGRlY2ltYWxfcmVwW2tEZWNpbWFsUmVw
Q2FwYWNpdHldOworICAgICAgICBpbnQgZGVjaW1hbF9yZXBfbGVuZ3RoOworICAgICAgICAKKyAg
ICAgICAgRG91YmxlVG9Bc2NpaSh2YWx1ZSwgU0hPUlRFU1QsIDAsIGRlY2ltYWxfcmVwLCBrRGVj
aW1hbFJlcENhcGFjaXR5LAorICAgICAgICAgICAgICAgICAgICAgICZzaWduLCAmZGVjaW1hbF9y
ZXBfbGVuZ3RoLCAmZGVjaW1hbF9wb2ludCk7CisgICAgICAgIAorICAgICAgICBib29sIHVuaXF1
ZV96ZXJvID0gKGZsYWdzXyAmIFVOSVFVRV9aRVJPKSAhPSAwOworICAgICAgICBpZiAoc2lnbiAm
JiAodmFsdWUgIT0gMC4wIHx8ICF1bmlxdWVfemVybykpIHsKKyAgICAgICAgICAgIHJlc3VsdF9i
dWlsZGVyLT5BZGRDaGFyYWN0ZXIoJy0nKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aW50IGV4cG9uZW50ID0gZGVjaW1hbF9wb2ludCAtIDE7CisgICAgICAgIGlmICgoZGVjaW1hbF9p
bl9zaG9ydGVzdF9sb3dfIDw9IGV4cG9uZW50KSAmJgorICAgICAgICAgICAgKGV4cG9uZW50IDwg
ZGVjaW1hbF9pbl9zaG9ydGVzdF9oaWdoXykpIHsKKyAgICAgICAgICAgIENyZWF0ZURlY2ltYWxS
ZXByZXNlbnRhdGlvbihkZWNpbWFsX3JlcCwgZGVjaW1hbF9yZXBfbGVuZ3RoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2ltYWxfcG9pbnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF4KDAsIGRlY2ltYWxfcmVwX2xlbmd0aCAt
IGRlY2ltYWxfcG9pbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdF9idWlsZGVyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIENyZWF0ZUV4
cG9uZW50aWFsUmVwcmVzZW50YXRpb24oZGVjaW1hbF9yZXAsIGRlY2ltYWxfcmVwX2xlbmd0aCwg
ZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdF9idWlsZGVyKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgCisgICAgCisgICAgYm9vbCBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6VG9GaXhlZChkb3Vi
bGUgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
cmVxdWVzdGVkX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25zdCB7CisgICAgICAgIEFTU0VS
VChrTWF4Rml4ZWREaWdpdHNCZWZvcmVQb2ludCA9PSA2MCk7CisgICAgICAgIGNvbnN0IGRvdWJs
ZSBrRmlyc3ROb25GaXhlZCA9IDFlNjA7CisgICAgICAgIAorICAgICAgICBpZiAoRG91YmxlKHZh
bHVlKS5Jc1NwZWNpYWwoKSkgeworICAgICAgICAgICAgcmV0dXJuIEhhbmRsZVNwZWNpYWxWYWx1
ZXModmFsdWUsIHJlc3VsdF9idWlsZGVyKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aWYgKHJlcXVlc3RlZF9kaWdpdHMgPiBrTWF4Rml4ZWREaWdpdHNBZnRlclBvaW50KSByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGlmICh2YWx1ZSA+PSBrRmlyc3ROb25GaXhlZCB8fCB2YWx1ZSA8PSAt
a0ZpcnN0Tm9uRml4ZWQpIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIC8vIEZpbmQg
YSBzdWZmaWNpZW50bHkgcHJlY2lzZSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIG4uCisgICAg
ICAgIGludCBkZWNpbWFsX3BvaW50OworICAgICAgICBib29sIHNpZ247CisgICAgICAgIC8vIEFk
ZCBzcGFjZSBmb3IgdGhlICdcMCcgYnl0ZS4KKyAgICAgICAgY29uc3QgaW50IGtEZWNpbWFsUmVw
Q2FwYWNpdHkgPQorICAgICAgICBrTWF4Rml4ZWREaWdpdHNCZWZvcmVQb2ludCArIGtNYXhGaXhl
ZERpZ2l0c0FmdGVyUG9pbnQgKyAxOworICAgICAgICBjaGFyIGRlY2ltYWxfcmVwW2tEZWNpbWFs
UmVwQ2FwYWNpdHldOworICAgICAgICBpbnQgZGVjaW1hbF9yZXBfbGVuZ3RoOworICAgICAgICBE
b3VibGVUb0FzY2lpKHZhbHVlLCBGSVhFRCwgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAgICAgICAg
ICAgICAgICAgICBkZWNpbWFsX3JlcCwga0RlY2ltYWxSZXBDYXBhY2l0eSwKKyAgICAgICAgICAg
ICAgICAgICAgICAmc2lnbiwgJmRlY2ltYWxfcmVwX2xlbmd0aCwgJmRlY2ltYWxfcG9pbnQpOwor
ICAgICAgICAKKyAgICAgICAgYm9vbCB1bmlxdWVfemVybyA9ICgoZmxhZ3NfICYgVU5JUVVFX1pF
Uk8pICE9IDApOworICAgICAgICBpZiAoc2lnbiAmJiAodmFsdWUgIT0gMC4wIHx8ICF1bmlxdWVf
emVybykpIHsKKyAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRDaGFyYWN0ZXIoJy0nKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQ3JlYXRlRGVjaW1hbFJlcHJlc2VudGF0aW9u
KGRlY2ltYWxfcmVwLCBkZWNpbWFsX3JlcF9sZW5ndGgsIGRlY2ltYWxfcG9pbnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ZWRfZGlnaXRzLCByZXN1bHRfYnVp
bGRlcik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAKKyAgICBib29s
IERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpUb0V4cG9uZW50aWFsKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHZhbHVlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlcXVlc3RlZF9kaWdp
dHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJp
bmdCdWlsZGVyKiByZXN1bHRfYnVpbGRlcikgY29uc3QgeworICAgICAgICBpZiAoRG91YmxlKHZh
bHVlKS5Jc1NwZWNpYWwoKSkgeworICAgICAgICAgICAgcmV0dXJuIEhhbmRsZVNwZWNpYWxWYWx1
ZXModmFsdWUsIHJlc3VsdF9idWlsZGVyKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aWYgKHJlcXVlc3RlZF9kaWdpdHMgPCAtMSkgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAocmVx
dWVzdGVkX2RpZ2l0cyA+IGtNYXhFeHBvbmVudGlhbERpZ2l0cykgcmV0dXJuIGZhbHNlOworICAg
ICAgICAKKyAgICAgICAgaW50IGRlY2ltYWxfcG9pbnQ7CisgICAgICAgIGJvb2wgc2lnbjsKKyAg
ICAgICAgLy8gQWRkIHNwYWNlIGZvciBkaWdpdCBiZWZvcmUgdGhlIGRlY2ltYWwgcG9pbnQgYW5k
IHRoZSAnXDAnIGNoYXJhY3Rlci4KKyAgICAgICAgY29uc3QgaW50IGtEZWNpbWFsUmVwQ2FwYWNp
dHkgPSBrTWF4RXhwb25lbnRpYWxEaWdpdHMgKyAyOworICAgICAgICBBU1NFUlQoa0RlY2ltYWxS
ZXBDYXBhY2l0eSA+IGtCYXNlMTBNYXhpbWFsTGVuZ3RoKTsKKyAgICAgICAgY2hhciBkZWNpbWFs
X3JlcFtrRGVjaW1hbFJlcENhcGFjaXR5XTsKKyAgICAgICAgaW50IGRlY2ltYWxfcmVwX2xlbmd0
aDsKKyAgICAgICAgCisgICAgICAgIGlmIChyZXF1ZXN0ZWRfZGlnaXRzID09IC0xKSB7CisgICAg
ICAgICAgICBEb3VibGVUb0FzY2lpKHZhbHVlLCBTSE9SVEVTVCwgMCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVjaW1hbF9yZXAsIGtEZWNpbWFsUmVwQ2FwYWNpdHksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICZzaWduLCAmZGVjaW1hbF9yZXBfbGVuZ3RoLCAmZGVjaW1hbF9wb2lu
dCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBEb3VibGVUb0FzY2lpKHZhbHVlLCBQ
UkVDSVNJT04sIHJlcXVlc3RlZF9kaWdpdHMgKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWNpbWFsX3JlcCwga0RlY2ltYWxSZXBDYXBhY2l0eSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgJnNpZ24sICZkZWNpbWFsX3JlcF9sZW5ndGgsICZkZWNpbWFsX3BvaW50KTsKKyAgICAg
ICAgICAgIEFTU0VSVChkZWNpbWFsX3JlcF9sZW5ndGggPD0gcmVxdWVzdGVkX2RpZ2l0cyArIDEp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKGludCBpID0gZGVjaW1hbF9yZXBfbGVu
Z3RoOyBpIDwgcmVxdWVzdGVkX2RpZ2l0cyArIDE7ICsraSkgeworICAgICAgICAgICAgICAgIGRl
Y2ltYWxfcmVwW2ldID0gJzAnOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVjaW1hbF9y
ZXBfbGVuZ3RoID0gcmVxdWVzdGVkX2RpZ2l0cyArIDE7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGJvb2wgdW5pcXVlX3plcm8gPSAoKGZsYWdzXyAmIFVOSVFVRV9aRVJPKSAhPSAwKTsK
KyAgICAgICAgaWYgKHNpZ24gJiYgKHZhbHVlICE9IDAuMCB8fCAhdW5pcXVlX3plcm8pKSB7Cisg
ICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKCctJyk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGludCBleHBvbmVudCA9IGRlY2ltYWxfcG9pbnQgLSAxOworICAg
ICAgICBDcmVhdGVFeHBvbmVudGlhbFJlcHJlc2VudGF0aW9uKGRlY2ltYWxfcmVwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2ltYWxfcmVwX2xlbmd0aCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvbmVudCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfYnVpbGRlcik7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAKKyAgICBib29sIERvdWJsZVRvU3RyaW5n
Q29udmVydGVyOjpUb1ByZWNpc2lvbihkb3VibGUgdmFsdWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHByZWNpc2lvbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyKiByZXN1bHRfYnVp
bGRlcikgY29uc3QgeworICAgICAgICBpZiAoRG91YmxlKHZhbHVlKS5Jc1NwZWNpYWwoKSkgewor
ICAgICAgICAgICAgcmV0dXJuIEhhbmRsZVNwZWNpYWxWYWx1ZXModmFsdWUsIHJlc3VsdF9idWls
ZGVyKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHByZWNpc2lvbiA8IGtNaW5Q
cmVjaXNpb25EaWdpdHMgfHwgcHJlY2lzaW9uID4ga01heFByZWNpc2lvbkRpZ2l0cykgeworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBG
aW5kIGEgc3VmZmljaWVudGx5IHByZWNpc2UgZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiBuLgor
ICAgICAgICBpbnQgZGVjaW1hbF9wb2ludDsKKyAgICAgICAgYm9vbCBzaWduOworICAgICAgICAv
LyBBZGQgb25lIGZvciB0aGUgdGVybWluYXRpbmcgbnVsbCBjaGFyYWN0ZXIuCisgICAgICAgIGNv
bnN0IGludCBrRGVjaW1hbFJlcENhcGFjaXR5ID0ga01heFByZWNpc2lvbkRpZ2l0cyArIDE7Cisg
ICAgICAgIGNoYXIgZGVjaW1hbF9yZXBba0RlY2ltYWxSZXBDYXBhY2l0eV07CisgICAgICAgIGlu
dCBkZWNpbWFsX3JlcF9sZW5ndGg7CisgICAgICAgIAorICAgICAgICBEb3VibGVUb0FzY2lpKHZh
bHVlLCBQUkVDSVNJT04sIHByZWNpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICBkZWNpbWFs
X3JlcCwga0RlY2ltYWxSZXBDYXBhY2l0eSwKKyAgICAgICAgICAgICAgICAgICAgICAmc2lnbiwg
JmRlY2ltYWxfcmVwX2xlbmd0aCwgJmRlY2ltYWxfcG9pbnQpOworICAgICAgICBBU1NFUlQoZGVj
aW1hbF9yZXBfbGVuZ3RoIDw9IHByZWNpc2lvbik7CisgICAgICAgIAorICAgICAgICBib29sIHVu
aXF1ZV96ZXJvID0gKChmbGFnc18gJiBVTklRVUVfWkVSTykgIT0gMCk7CisgICAgICAgIGlmIChz
aWduICYmICh2YWx1ZSAhPSAwLjAgfHwgIXVuaXF1ZV96ZXJvKSkgeworICAgICAgICAgICAgcmVz
dWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcignLScpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICAvLyBUaGUgZXhwb25lbnQgaWYgd2UgcHJpbnQgdGhlIG51bWJlciBhcyB4Lnh4ZXl5eS4g
VGhhdCBpcyB3aXRoIHRoZQorICAgICAgICAvLyBkZWNpbWFsIHBvaW50IGFmdGVyIHRoZSBmaXJz
dCBkaWdpdC4KKyAgICAgICAgaW50IGV4cG9uZW50ID0gZGVjaW1hbF9wb2ludCAtIDE7CisgICAg
ICAgIAorICAgICAgICBpbnQgZXh0cmFfemVybyA9ICgoZmxhZ3NfICYgRU1JVF9UUkFJTElOR19a
RVJPX0FGVEVSX1BPSU5UKSAhPSAwKSA/IDEgOiAwOworICAgICAgICBpZiAoKC1kZWNpbWFsX3Bv
aW50ICsgMSA+IG1heF9sZWFkaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2RlXykg
fHwKKyAgICAgICAgICAgIChkZWNpbWFsX3BvaW50IC0gcHJlY2lzaW9uICsgZXh0cmFfemVybyA+
CisgICAgICAgICAgICAgbWF4X3RyYWlsaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9t
b2RlXykpIHsKKyAgICAgICAgICAgICAgICAvLyBGaWxsIGJ1ZmZlciB0byBjb250YWluICdwcmVj
aXNpb24nIGRpZ2l0cy4KKyAgICAgICAgICAgICAgICAvLyBVc3VhbGx5IHRoZSBidWZmZXIgaXMg
YWxyZWFkeSBhdCB0aGUgY29ycmVjdCBsZW5ndGgsIGJ1dCAnRG91YmxlVG9Bc2NpaScKKyAgICAg
ICAgICAgICAgICAvLyBpcyBhbGxvd2VkIHRvIHJldHVybiBsZXNzIGNoYXJhY3RlcnMuCisgICAg
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IGRlY2ltYWxfcmVwX2xlbmd0aDsgaSA8IHByZWNpc2lv
bjsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGRlY2ltYWxfcmVwW2ldID0gJzAnOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBDcmVhdGVF
eHBvbmVudGlhbFJlcHJlc2VudGF0aW9uKGRlY2ltYWxfcmVwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb25lbnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfYnVpbGRlcik7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIENyZWF0ZURlY2ltYWxSZXByZXNlbnRh
dGlvbihkZWNpbWFsX3JlcCwgZGVjaW1hbF9yZXBfbGVuZ3RoLCBkZWNpbWFsX3BvaW50LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXgoMCwgcHJlY2lzaW9u
IC0gZGVjaW1hbF9wb2ludCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdF9idWlsZGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIAorICAgIAorICAgIHN0YXRpYyBCaWdudW1EdG9hTW9kZSBEdG9hVG9C
aWdudW1EdG9hTW9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6OkR0b2FNb2RlIGR0b2FfbW9kZSkgeworICAg
ICAgICBzd2l0Y2ggKGR0b2FfbW9kZSkgeworICAgICAgICAgICAgY2FzZSBEb3VibGVUb1N0cmlu
Z0NvbnZlcnRlcjo6U0hPUlRFU1Q6ICByZXR1cm4gQklHTlVNX0RUT0FfU0hPUlRFU1Q7CisgICAg
ICAgICAgICBjYXNlIERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpGSVhFRDogICAgIHJldHVybiBC
SUdOVU1fRFRPQV9GSVhFRDsKKyAgICAgICAgICAgIGNhc2UgRG91YmxlVG9TdHJpbmdDb252ZXJ0
ZXI6OlBSRUNJU0lPTjogcmV0dXJuIEJJR05VTV9EVE9BX1BSRUNJU0lPTjsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gQklHTlVNX0RUT0FfU0hPUlRFU1Q7ICAvLyBUbyBzaWxlbmNlIGNvbXBpbGVyLgor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgRG91YmxlVG9TdHJpbmdDb252
ZXJ0ZXI6OkRvdWJsZVRvQXNjaWkoZG91YmxlIHYsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBEdG9hTW9kZSBtb2RlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlcXVlc3RlZF9kaWdpdHMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBidWZmZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnVm
ZmVyX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wqIHNpZ24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQqIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCogcG9pbnQpIHsKKyAgICAgICAgVmVjdG9yPGNoYXI+IHZlY3Rvcihi
dWZmZXIsIGJ1ZmZlcl9sZW5ndGgpOworICAgICAgICBBU1NFUlQoIURvdWJsZSh2KS5Jc1NwZWNp
YWwoKSk7CisgICAgICAgIEFTU0VSVChtb2RlID09IFNIT1JURVNUIHx8IHJlcXVlc3RlZF9kaWdp
dHMgPj0gMCk7CisgICAgICAgIAorICAgICAgICBpZiAoRG91YmxlKHYpLlNpZ24oKSA8IDApIHsK
KyAgICAgICAgICAgICpzaWduID0gdHJ1ZTsKKyAgICAgICAgICAgIHYgPSAtdjsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICpzaWduID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGlmIChtb2RlID09IFBSRUNJU0lPTiAmJiByZXF1ZXN0ZWRfZGlnaXRzID09IDAp
IHsKKyAgICAgICAgICAgIHZlY3RvclswXSA9ICdcMCc7CisgICAgICAgICAgICAqbGVuZ3RoID0g
MDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYg
KHYgPT0gMCkgeworICAgICAgICAgICAgdmVjdG9yWzBdID0gJzAnOworICAgICAgICAgICAgdmVj
dG9yWzFdID0gJ1wwJzsKKyAgICAgICAgICAgICpsZW5ndGggPSAxOworICAgICAgICAgICAgKnBv
aW50ID0gMTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgYm9vbCBmYXN0X3dvcmtlZDsKKyAgICAgICAgc3dpdGNoIChtb2RlKSB7CisgICAgICAgICAg
ICBjYXNlIFNIT1JURVNUOgorICAgICAgICAgICAgICAgIGZhc3Rfd29ya2VkID0gRmFzdER0b2Eo
diwgRkFTVF9EVE9BX1NIT1JURVNULCAwLCB2ZWN0b3IsIGxlbmd0aCwgcG9pbnQpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBGSVhFRDoKKyAgICAgICAgICAgICAg
ICBmYXN0X3dvcmtlZCA9IEZhc3RGaXhlZER0b2EodiwgcmVxdWVzdGVkX2RpZ2l0cywgdmVjdG9y
LCBsZW5ndGgsIHBvaW50KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgUFJFQ0lTSU9OOgorICAgICAgICAgICAgICAgIGZhc3Rfd29ya2VkID0gRmFzdER0b2Eodiwg
RkFTVF9EVE9BX1BSRUNJU0lPTiwgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciwgbGVuZ3RoLCBwb2ludCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgICAgICAgICAgZmFzdF93b3JrZWQgPSBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoZmFzdF93b3JrZWQpIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIC8v
IElmIHRoZSBmYXN0IGR0b2EgZGlkbid0IHN1Y2NlZWQgdXNlIHRoZSBzbG93ZXIgYmlnbnVtIHZl
cnNpb24uCisgICAgICAgIEJpZ251bUR0b2FNb2RlIGJpZ251bV9tb2RlID0gRHRvYVRvQmlnbnVt
RHRvYU1vZGUobW9kZSk7CisgICAgICAgIEJpZ251bUR0b2EodiwgYmlnbnVtX21vZGUsIHJlcXVl
c3RlZF9kaWdpdHMsIHZlY3RvciwgbGVuZ3RoLCBwb2ludCk7CisgICAgICAgIHZlY3RvclsqbGVu
Z3RoXSA9ICdcMCc7CisgICAgfQorICAgIAorICAgIAorICAgIC8vIENvbnN1bWVzIHRoZSBnaXZl
biBzdWJzdHJpbmcgZnJvbSB0aGUgaXRlcmF0b3IuCisgICAgLy8gUmV0dXJucyBmYWxzZSwgaWYg
dGhlIHN1YnN0cmluZyBkb2VzIG5vdCBtYXRjaC4KKyAgICBzdGF0aWMgYm9vbCBDb25zdW1lU3Vi
U3RyaW5nKGNvbnN0IGNoYXIqKiBjdXJyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciogZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogc3Vic3RyaW5nKSB7CisgICAgICAgIEFTU0VSVCgqKmN1cnJlbnQgPT0gKnN1
YnN0cmluZyk7CisgICAgICAgIGZvciAoc3Vic3RyaW5nKys7ICpzdWJzdHJpbmcgIT0gJ1wwJzsg
c3Vic3RyaW5nKyspIHsKKyAgICAgICAgICAgICsrKmN1cnJlbnQ7CisgICAgICAgICAgICBpZiAo
KmN1cnJlbnQgPT0gZW5kIHx8ICoqY3VycmVudCAhPSAqc3Vic3RyaW5nKSByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgKysqY3VycmVudDsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIAorICAgIAorICAgIC8vIE1heGltdW0gbnVtYmVyIG9mIHNpZ25pZmljYW50IGRp
Z2l0cyBpbiBkZWNpbWFsIHJlcHJlc2VudGF0aW9uLgorICAgIC8vIFRoZSBsb25nZXN0IHBvc3Np
YmxlIGRvdWJsZSBpbiBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIGlzCisgICAgLy8gKDJeNTMgLSAx
KSAqIDIgXiAtMTA3NCB0aGF0IGlzICgyIF4gNTMgLSAxKSAqIDUgXiAxMDc0IC8gMTAgXiAxMDc0
CisgICAgLy8gKDc2OCBkaWdpdHMpLiBJZiB3ZSBwYXJzZSBhIG51bWJlciB3aG9zZSBmaXJzdCBk
aWdpdHMgYXJlIGVxdWFsIHRvIGEKKyAgICAvLyBtZWFuIG9mIDIgYWRqYWNlbnQgZG91YmxlcyAo
dGhhdCBjb3VsZCBoYXZlIHVwIHRvIDc2OSBkaWdpdHMpIHRoZSByZXN1bHQKKyAgICAvLyBtdXN0
IGJlIHJvdW5kZWQgdG8gdGhlIGJpZ2dlciBvbmUgdW5sZXNzIHRoZSB0YWlsIGNvbnNpc3RzIG9m
IHplcm9zLCBzbworICAgIC8vIHdlIGRvbid0IG5lZWQgdG8gcHJlc2VydmUgYWxsIHRoZSBkaWdp
dHMuCisgICAgY29uc3QgaW50IGtNYXhTaWduaWZpY2FudERpZ2l0cyA9IDc3MjsKKyAgICAKKyAg
ICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgYSBub25zcGFjZSBmb3VuZCBhbmQgZmFsc2UgaWYg
dGhlIGVuZCBoYXMgcmVhY2hlZC4KKyAgICBzdGF0aWMgaW5saW5lIGJvb2wgQWR2YW5jZVRvTm9u
c3BhY2UoY29uc3QgY2hhcioqIGN1cnJlbnQsIGNvbnN0IGNoYXIqIGVuZCkgeworICAgICAgICB3
aGlsZSAoKmN1cnJlbnQgIT0gZW5kKSB7CisgICAgICAgICAgICBpZiAoKipjdXJyZW50ICE9ICcg
JykgcmV0dXJuIHRydWU7CisgICAgICAgICAgICArKypjdXJyZW50OworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgCisgICAgc3RhdGljIGJvb2wgaXNE
aWdpdChpbnQgeCwgaW50IHJhZGl4KSB7CisgICAgICAgIHJldHVybiAoeCA+PSAnMCcgJiYgeCA8
PSAnOScgJiYgeCA8ICcwJyArIHJhZGl4KQorICAgICAgICB8fCAocmFkaXggPiAxMCAmJiB4ID49
ICdhJyAmJiB4IDwgJ2EnICsgcmFkaXggLSAxMCkKKyAgICAgICAgfHwgKHJhZGl4ID4gMTAgJiYg
eCA+PSAnQScgJiYgeCA8ICdBJyArIHJhZGl4IC0gMTApOworICAgIH0KKyAgICAKKyAgICAKKyAg
ICBzdGF0aWMgZG91YmxlIFNpZ25lZFplcm8oYm9vbCBzaWduKSB7CisgICAgICAgIHJldHVybiBz
aWduID8gLTAuMCA6IDAuMDsKKyAgICB9CisgICAgCisgICAgCisgICAgLy8gUGFyc2luZyBpbnRl
Z2VycyB3aXRoIHJhZGl4IDIsIDQsIDgsIDE2LCAzMi4gQXNzdW1lcyBjdXJyZW50ICE9IGVuZC4K
KyAgICB0ZW1wbGF0ZSA8aW50IHJhZGl4X2xvZ18yPgorICAgIHN0YXRpYyBkb3VibGUgUmFkaXhT
dHJpbmdUb0RvdWJsZShjb25zdCBjaGFyKiBjdXJyZW50LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBlbmQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgc2lnbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBhbGxvd190cmFpbGluZ19qdW5rLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkb3VibGUganVua19zdHJpbmdfdmFsdWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKiB0cmFpbGluZ19wb2ludGVyKSB7
CisgICAgICAgIEFTU0VSVChjdXJyZW50ICE9IGVuZCk7CisgICAgICAgIAorICAgICAgICAvLyBT
a2lwIGxlYWRpbmcgMHMuCisgICAgICAgIHdoaWxlICgqY3VycmVudCA9PSAnMCcpIHsKKyAgICAg
ICAgICAgICsrY3VycmVudDsKKyAgICAgICAgICAgIGlmIChjdXJyZW50ID09IGVuZCkgeworICAg
ICAgICAgICAgICAgICp0cmFpbGluZ19wb2ludGVyID0gZW5kOworICAgICAgICAgICAgICAgIHJl
dHVybiBTaWduZWRaZXJvKHNpZ24pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBpbnQ2NF90IG51bWJlciA9IDA7CisgICAgICAgIGludCBleHBvbmVudCA9IDA7
CisgICAgICAgIGNvbnN0IGludCByYWRpeCA9ICgxIDw8IHJhZGl4X2xvZ18yKTsKKyAgICAgICAg
CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGludCBkaWdpdDsKKyAgICAgICAgICAgIGlmICgq
Y3VycmVudCA+PSAnMCcgJiYgKmN1cnJlbnQgPD0gJzknICYmICpjdXJyZW50IDwgJzAnICsgcmFk
aXgpIHsKKyAgICAgICAgICAgICAgICBkaWdpdCA9IHN0YXRpY19jYXN0PGNoYXI+KCpjdXJyZW50
KSAtICcwJzsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocmFkaXggPiAxMCAmJiAqY3VycmVudCA+
PSAnYScgJiYgKmN1cnJlbnQgPCAnYScgKyByYWRpeCAtIDEwKSB7CisgICAgICAgICAgICAgICAg
ZGlnaXQgPSBzdGF0aWNfY2FzdDxjaGFyPigqY3VycmVudCkgLSAnYScgKyAxMDsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAocmFkaXggPiAxMCAmJiAqY3VycmVudCA+PSAnQScgJiYgKmN1cnJlbnQg
PCAnQScgKyByYWRpeCAtIDEwKSB7CisgICAgICAgICAgICAgICAgZGlnaXQgPSBzdGF0aWNfY2Fz
dDxjaGFyPigqY3VycmVudCkgLSAnQScgKyAxMDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgaWYgKGFsbG93X3RyYWlsaW5nX2p1bmsgfHwgIUFkdmFuY2VUb05vbnNwYWNl
KCZjdXJyZW50LCBlbmQpKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192
YWx1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG51bWJlciA9IG51bWJlciAqIHJhZGl4ICsgZGlnaXQ7CisgICAgICAgICAgICBp
bnQgb3ZlcmZsb3cgPSBzdGF0aWNfY2FzdDxpbnQ+KG51bWJlciA+PiA1Myk7CisgICAgICAgICAg
ICBpZiAob3ZlcmZsb3cgIT0gMCkgeworICAgICAgICAgICAgICAgIC8vIE92ZXJmbG93IG9jY3Vy
cmVkLiBOZWVkIHRvIGRldGVybWluZSB3aGljaCBkaXJlY3Rpb24gdG8gcm91bmQgdGhlCisgICAg
ICAgICAgICAgICAgLy8gcmVzdWx0LgorICAgICAgICAgICAgICAgIGludCBvdmVyZmxvd19iaXRz
X2NvdW50ID0gMTsKKyAgICAgICAgICAgICAgICB3aGlsZSAob3ZlcmZsb3cgPiAxKSB7CisgICAg
ICAgICAgICAgICAgICAgIG92ZXJmbG93X2JpdHNfY291bnQrKzsKKyAgICAgICAgICAgICAgICAg
ICAgb3ZlcmZsb3cgPj49IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGludCBkcm9wcGVkX2JpdHNfbWFzayA9ICgoMSA8PCBvdmVyZmxvd19i
aXRzX2NvdW50KSAtIDEpOworICAgICAgICAgICAgICAgIGludCBkcm9wcGVkX2JpdHMgPSBzdGF0
aWNfY2FzdDxpbnQ+KG51bWJlcikgJiBkcm9wcGVkX2JpdHNfbWFzazsKKyAgICAgICAgICAgICAg
ICBudW1iZXIgPj49IG92ZXJmbG93X2JpdHNfY291bnQ7CisgICAgICAgICAgICAgICAgZXhwb25l
bnQgPSBvdmVyZmxvd19iaXRzX2NvdW50OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGJvb2wgemVyb190YWlsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkg
eworICAgICAgICAgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgICAgICAgICAgICAgIGlm
IChjdXJyZW50ID09IGVuZCB8fCAhaXNEaWdpdCgqY3VycmVudCwgcmFkaXgpKSBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgemVyb190YWlsID0gemVyb190YWlsICYmICpjdXJyZW50ID09ICcw
JzsKKyAgICAgICAgICAgICAgICAgICAgZXhwb25lbnQgKz0gcmFkaXhfbG9nXzI7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghYWxsb3df
dHJhaWxpbmdfanVuayAmJiBBZHZhbmNlVG9Ob25zcGFjZSgmY3VycmVudCwgZW5kKSkgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWU7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGludCBtaWRkbGVfdmFsdWUg
PSAoMSA8PCAob3ZlcmZsb3dfYml0c19jb3VudCAtIDEpKTsKKyAgICAgICAgICAgICAgICBpZiAo
ZHJvcHBlZF9iaXRzID4gbWlkZGxlX3ZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIG51bWJl
cisrOyAgLy8gUm91bmRpbmcgdXAuCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkcm9wcGVk
X2JpdHMgPT0gbWlkZGxlX3ZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFJvdW5kaW5n
IHRvIGV2ZW4gdG8gY29uc2lzdGVuY3kgd2l0aCBkZWNpbWFsczogaGFsZi13YXkgY2FzZSByb3Vu
ZHMKKyAgICAgICAgICAgICAgICAgICAgLy8gdXAgaWYgc2lnbmlmaWNhbnQgcGFydCBpcyBvZGQg
YW5kIGRvd24gb3RoZXJ3aXNlLgorICAgICAgICAgICAgICAgICAgICBpZiAoKG51bWJlciAmIDEp
ICE9IDAgfHwgIXplcm9fdGFpbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyKys7
ICAvLyBSb3VuZGluZyB1cC4KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBSb3VuZGluZyB1cCBtYXkg
Y2F1c2Ugb3ZlcmZsb3cuCisgICAgICAgICAgICAgICAgaWYgKChudW1iZXIgJiAoKGludDY0X3Qp
MSA8PCA1MykpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZXhwb25lbnQrKzsKKyAgICAg
ICAgICAgICAgICAgICAgbnVtYmVyID4+PSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICsrY3VycmVudDsKKyAg
ICAgICAgfSB3aGlsZSAoY3VycmVudCAhPSBlbmQpOworICAgICAgICAKKyAgICAgICAgQVNTRVJU
KG51bWJlciA8ICgoaW50NjRfdCkxIDw8IDUzKSk7CisgICAgICAgIEFTU0VSVChzdGF0aWNfY2Fz
dDxpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KG51bWJlcikpID09IG51bWJlcik7CisgICAg
ICAgIAorICAgICAgICAqdHJhaWxpbmdfcG9pbnRlciA9IGN1cnJlbnQ7CisgICAgICAgIAorICAg
ICAgICBpZiAoZXhwb25lbnQgPT0gMCkgeworICAgICAgICAgICAgaWYgKHNpZ24pIHsKKyAgICAg
ICAgICAgICAgICBpZiAobnVtYmVyID09IDApIHJldHVybiAtMC4wOworICAgICAgICAgICAgICAg
IG51bWJlciA9IC1udW1iZXI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8ZG91YmxlPihudW1iZXIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBB
U1NFUlQobnVtYmVyICE9IDApOworICAgICAgICByZXR1cm4gRG91YmxlKERpeUZwKG51bWJlciwg
ZXhwb25lbnQpKS52YWx1ZSgpOworICAgIH0KKyAgICAKKyAgICAKKyAgICBkb3VibGUgU3RyaW5n
VG9Eb3VibGVDb252ZXJ0ZXI6OlN0cmluZ1RvRG91YmxlKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogaW5wdXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBw
cm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCkgeworICAgICAgICBjb25zdCBjaGFyKiBjdXJyZW50
ID0gaW5wdXQ7CisgICAgICAgIGNvbnN0IGNoYXIqIGVuZCA9IGlucHV0ICsgbGVuZ3RoOworICAg
ICAgICAKKyAgICAgICAgKnByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50ID0gMDsKKyAgICAgICAg
CisgICAgICAgIGNvbnN0IGJvb2wgYWxsb3dfdHJhaWxpbmdfanVuayA9IChmbGFnc18gJiBBTExP
V19UUkFJTElOR19KVU5LKSAhPSAwOworICAgICAgICBjb25zdCBib29sIGFsbG93X2xlYWRpbmdf
c3BhY2VzID0gKGZsYWdzXyAmIEFMTE9XX0xFQURJTkdfU1BBQ0VTKSAhPSAwOworICAgICAgICBj
b25zdCBib29sIGFsbG93X3RyYWlsaW5nX3NwYWNlcyA9IChmbGFnc18gJiBBTExPV19UUkFJTElO
R19TUEFDRVMpICE9IDA7CisgICAgICAgIGNvbnN0IGJvb2wgYWxsb3dfc3BhY2VzX2FmdGVyX3Np
Z24gPSAoZmxhZ3NfICYgQUxMT1dfU1BBQ0VTX0FGVEVSX1NJR04pICE9IDA7CisgICAgICAgIAor
ICAgICAgICAvLyBUbyBtYWtlIHN1cmUgdGhhdCBpdGVyYXRvciBkZXJlZmVyZW5jaW5nIGlzIHZh
bGlkIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgLy8gY29udmVudGlvbiBpcyB1c2VkOgorICAgICAg
ICAvLyAxLiBFYWNoICcrK2N1cnJlbnQnIHN0YXRlbWVudCBpcyBmb2xsb3dlZCBieSBjaGVjayBm
b3IgZXF1YWxpdHkgdG8gJ2VuZCcuCisgICAgICAgIC8vIDIuIElmIEFkdmFuY2VUb05vbnNwYWNl
IHJldHVybmVkIGZhbHNlIHRoZW4gY3VycmVudCA9PSBlbmQuCisgICAgICAgIC8vIDMuIElmICdj
dXJyZW50JyBiZWNvbWVzIGVxdWFsIHRvICdlbmQnIHRoZSBmdW5jdGlvbiByZXR1cm5zIG9yIGdv
ZXMgdG8KKyAgICAgICAgLy8gJ3BhcnNpbmdfZG9uZScuCisgICAgICAgIC8vIDQuICdjdXJyZW50
JyBpcyBub3QgZGVyZWZlcmVuY2VkIGFmdGVyIHRoZSAncGFyc2luZ19kb25lJyBsYWJlbC4KKyAg
ICAgICAgLy8gNS4gQ29kZSBiZWZvcmUgJ3BhcnNpbmdfZG9uZScgbWF5IHJlbHkgb24gJ2N1cnJl
bnQgIT0gZW5kJy4KKyAgICAgICAgaWYgKGN1cnJlbnQgPT0gZW5kKSByZXR1cm4gZW1wdHlfc3Ry
aW5nX3ZhbHVlXzsKKyAgICAgICAgCisgICAgICAgIGlmIChhbGxvd19sZWFkaW5nX3NwYWNlcyB8
fCBhbGxvd190cmFpbGluZ19zcGFjZXMpIHsKKyAgICAgICAgICAgIGlmICghQWR2YW5jZVRvTm9u
c3BhY2UoJmN1cnJlbnQsIGVuZCkpIHsKKyAgICAgICAgICAgICAgICAqcHJvY2Vzc2VkX2NoYXJh
Y3RlcnNfY291bnQgPSBjdXJyZW50IC0gaW5wdXQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVt
cHR5X3N0cmluZ192YWx1ZV87CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWFsbG93
X2xlYWRpbmdfc3BhY2VzICYmIChpbnB1dCAhPSBjdXJyZW50KSkgeworICAgICAgICAgICAgICAg
IC8vIE5vIGxlYWRpbmcgc3BhY2VzIGFsbG93ZWQsIGJ1dCBBZHZhbmNlVG9Ob25zcGFjZSBtb3Zl
ZCBmb3J3YXJkLgorICAgICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBsb25nZXN0
IGZvcm0gb2Ygc2ltcGxpZmllZCBudW1iZXIgaXM6ICItPHNpZ25pZmljYW50IGRpZ2l0cz4uMWVY
WFhcMCIuCisgICAgICAgIGNvbnN0IGludCBrQnVmZmVyU2l6ZSA9IGtNYXhTaWduaWZpY2FudERp
Z2l0cyArIDEwOworICAgICAgICBjaGFyIGJ1ZmZlcltrQnVmZmVyU2l6ZV07ICAvLyBOT0xJTlQ6
IHNpemUgaXMga25vd24gYXQgY29tcGlsZSB0aW1lLgorICAgICAgICBpbnQgYnVmZmVyX3BvcyA9
IDA7CisgICAgICAgIAorICAgICAgICAvLyBFeHBvbmVudCB3aWxsIGJlIGFkanVzdGVkIGlmIGlu
c2lnbmlmaWNhbnQgZGlnaXRzIG9mIHRoZSBpbnRlZ2VyIHBhcnQKKyAgICAgICAgLy8gb3IgaW5z
aWduaWZpY2FudCBsZWFkaW5nIHplcm9zIG9mIHRoZSBmcmFjdGlvbmFsIHBhcnQgYXJlIGRyb3Bw
ZWQuCisgICAgICAgIGludCBleHBvbmVudCA9IDA7CisgICAgICAgIGludCBzaWduaWZpY2FudF9k
aWdpdHMgPSAwOworICAgICAgICBpbnQgaW5zaWduaWZpY2FudF9kaWdpdHMgPSAwOworICAgICAg
ICBib29sIG5vbnplcm9fZGlnaXRfZHJvcHBlZCA9IGZhbHNlOworICAgICAgICBib29sIGZyYWN0
aW9uYWxfcGFydCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgYm9vbCBzaWduID0gZmFsc2U7
CisgICAgICAgIAorICAgICAgICBpZiAoKmN1cnJlbnQgPT0gJysnIHx8ICpjdXJyZW50ID09ICct
JykgeworICAgICAgICAgICAgc2lnbiA9ICgqY3VycmVudCA9PSAnLScpOworICAgICAgICAgICAg
KytjdXJyZW50OworICAgICAgICAgICAgY29uc3QgY2hhciogbmV4dF9ub25fc3BhY2UgPSBjdXJy
ZW50OworICAgICAgICAgICAgLy8gU2tpcCBmb2xsb3dpbmcgc3BhY2VzIChpZiBhbGxvd2VkKS4K
KyAgICAgICAgICAgIGlmICghQWR2YW5jZVRvTm9uc3BhY2UoJm5leHRfbm9uX3NwYWNlLCBlbmQp
KSByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAgICAgICAgaWYgKCFhbGxvd19zcGFj
ZXNfYWZ0ZXJfc2lnbiAmJiAoY3VycmVudCAhPSBuZXh0X25vbl9zcGFjZSkpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgY3VycmVudCA9IG5leHRfbm9uX3NwYWNlOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBpZiAoaW5maW5pdHlfc3ltYm9sXyAhPSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoKmN1
cnJlbnQgPT0gaW5maW5pdHlfc3ltYm9sX1swXSkgeworICAgICAgICAgICAgICAgIGlmICghQ29u
c3VtZVN1YlN0cmluZygmY3VycmVudCwgZW5kLCBpbmZpbml0eV9zeW1ib2xfKSkgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIShhbGxvd190cmFpbGlu
Z19zcGFjZXMgfHwgYWxsb3dfdHJhaWxpbmdfanVuaykgJiYgKGN1cnJlbnQgIT0gZW5kKSkgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWFsbG93X3RyYWlsaW5nX2p1bmsgJiYgQWR2
YW5jZVRvTm9uc3BhY2UoJmN1cnJlbnQsIGVuZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgQVNTRVJUKGJ1ZmZlcl9wb3MgPT0gMCk7CisgICAgICAgICAg
ICAgICAgKnByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50ID0gY3VycmVudCAtIGlucHV0OworICAg
ICAgICAgICAgICAgIHJldHVybiBzaWduID8gLURvdWJsZTo6SW5maW5pdHkoKSA6IERvdWJsZTo6
SW5maW5pdHkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aWYgKG5hbl9zeW1ib2xfICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGlmICgqY3VycmVudCA9PSBu
YW5fc3ltYm9sX1swXSkgeworICAgICAgICAgICAgICAgIGlmICghQ29uc3VtZVN1YlN0cmluZygm
Y3VycmVudCwgZW5kLCBuYW5fc3ltYm9sXykpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGp1bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgaWYgKCEoYWxsb3dfdHJhaWxpbmdfc3BhY2VzIHx8IGFsbG93X3Ry
YWlsaW5nX2p1bmspICYmIChjdXJyZW50ICE9IGVuZCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYgKCFhbGxvd190cmFpbGluZ19qdW5rICYmIEFkdmFuY2VUb05vbnNwYWNlKCZjdXJy
ZW50LCBlbmQpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1
ZV87CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IEFTU0VSVChidWZmZXJfcG9zID09IDApOworICAgICAgICAgICAgICAgICpwcm9jZXNzZWRfY2hh
cmFjdGVyc19jb3VudCA9IGN1cnJlbnQgLSBpbnB1dDsKKyAgICAgICAgICAgICAgICByZXR1cm4g
c2lnbiA/IC1Eb3VibGU6Ok5hTigpIDogRG91YmxlOjpOYU4oKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBsZWFkaW5nX3plcm8gPSBmYWxzZTsKKyAg
ICAgICAgaWYgKCpjdXJyZW50ID09ICcwJykgeworICAgICAgICAgICAgKytjdXJyZW50OworICAg
ICAgICAgICAgaWYgKGN1cnJlbnQgPT0gZW5kKSB7CisgICAgICAgICAgICAgICAgKnByb2Nlc3Nl
ZF9jaGFyYWN0ZXJzX2NvdW50ID0gY3VycmVudCAtIGlucHV0OworICAgICAgICAgICAgICAgIHJl
dHVybiBTaWduZWRaZXJvKHNpZ24pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBsZWFkaW5nX3plcm8gPSB0cnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICAv
LyBJdCBjb3VsZCBiZSBoZXhhZGVjaW1hbCB2YWx1ZS4KKyAgICAgICAgICAgIGlmICgoZmxhZ3Nf
ICYgQUxMT1dfSEVYKSAmJiAoKmN1cnJlbnQgPT0gJ3gnIHx8ICpjdXJyZW50ID09ICdYJykpIHsK
KyAgICAgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQg
PT0gZW5kIHx8ICFpc0RpZ2l0KCpjdXJyZW50LCAxNikpIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsgIC8vICIweCIuCisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHRhaWxfcG9pbnRl
ciA9IE5VTEw7CisgICAgICAgICAgICAgICAgZG91YmxlIHJlc3VsdCA9IFJhZGl4U3RyaW5nVG9E
b3VibGU8ND4oY3VycmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2lnbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd190cmFpbGluZ19qdW5rLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1bmtfc3RyaW5n
X3ZhbHVlXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmdGFpbF9wb2ludGVyKTsKKyAgICAgICAgICAgICAgICBpZiAodGFpbF9wb2ludGVy
ICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFsbG93X3RyYWlsaW5nX3NwYWNl
cykgQWR2YW5jZVRvTm9uc3BhY2UoJnRhaWxfcG9pbnRlciwgZW5kKTsKKyAgICAgICAgICAgICAg
ICAgICAgKnByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50ID0gdGFpbF9wb2ludGVyIC0gaW5wdXQ7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIElnbm9yZSBsZWFkaW5nIHpl
cm9zIGluIHRoZSBpbnRlZ2VyIHBhcnQuCisgICAgICAgICAgICB3aGlsZSAoKmN1cnJlbnQgPT0g
JzAnKSB7CisgICAgICAgICAgICAgICAgKytjdXJyZW50OworICAgICAgICAgICAgICAgIGlmIChj
dXJyZW50ID09IGVuZCkgeworICAgICAgICAgICAgICAgICAgICAqcHJvY2Vzc2VkX2NoYXJhY3Rl
cnNfY291bnQgPSBjdXJyZW50IC0gaW5wdXQ7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBT
aWduZWRaZXJvKHNpZ24pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBvY3RhbCA9IGxlYWRpbmdfemVybyAmJiAoZmxh
Z3NfICYgQUxMT1dfT0NUQUxTKSAhPSAwOworICAgICAgICAKKyAgICAgICAgLy8gQ29weSBzaWdu
aWZpY2FudCBkaWdpdHMgb2YgdGhlIGludGVnZXIgcGFydCAoaWYgYW55KSB0byB0aGUgYnVmZmVy
LgorICAgICAgICB3aGlsZSAoKmN1cnJlbnQgPj0gJzAnICYmICpjdXJyZW50IDw9ICc5Jykgewor
ICAgICAgICAgICAgaWYgKHNpZ25pZmljYW50X2RpZ2l0cyA8IGtNYXhTaWduaWZpY2FudERpZ2l0
cykgeworICAgICAgICAgICAgICAgIEFTU0VSVChidWZmZXJfcG9zIDwga0J1ZmZlclNpemUpOwor
ICAgICAgICAgICAgICAgIGJ1ZmZlcltidWZmZXJfcG9zKytdID0gc3RhdGljX2Nhc3Q8Y2hhcj4o
KmN1cnJlbnQpOworICAgICAgICAgICAgICAgIHNpZ25pZmljYW50X2RpZ2l0cysrOworICAgICAg
ICAgICAgICAgIC8vIFdpbGwgbGF0ZXIgY2hlY2sgaWYgaXQncyBhbiBvY3RhbCBpbiB0aGUgYnVm
ZmVyLgorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbnNpZ25pZmljYW50
X2RpZ2l0cysrOyAgLy8gTW92ZSB0aGUgZGlnaXQgaW50byB0aGUgZXhwb25lbnRpYWwgcGFydC4K
KyAgICAgICAgICAgICAgICBub256ZXJvX2RpZ2l0X2Ryb3BwZWQgPSBub256ZXJvX2RpZ2l0X2Ry
b3BwZWQgfHwgKmN1cnJlbnQgIT0gJzAnOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb2N0
YWwgPSBvY3RhbCAmJiAqY3VycmVudCA8ICc4JzsKKyAgICAgICAgICAgICsrY3VycmVudDsKKyAg
ICAgICAgICAgIGlmIChjdXJyZW50ID09IGVuZCkgZ290byBwYXJzaW5nX2RvbmU7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGlmIChzaWduaWZpY2FudF9kaWdpdHMgPT0gMCkgeworICAg
ICAgICAgICAgb2N0YWwgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYg
KCpjdXJyZW50ID09ICcuJykgeworICAgICAgICAgICAgaWYgKG9jdGFsICYmICFhbGxvd190cmFp
bGluZ19qdW5rKSByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAgICAgICAgaWYgKG9j
dGFsKSBnb3RvIHBhcnNpbmdfZG9uZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgKytjdXJy
ZW50OworICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gZW5kKSB7CisgICAgICAgICAgICAgICAg
aWYgKHNpZ25pZmljYW50X2RpZ2l0cyA9PSAwICYmICFsZWFkaW5nX3plcm8pIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBnb3RvIHBhcnNpbmdfZG9uZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChz
aWduaWZpY2FudF9kaWdpdHMgPT0gMCkgeworICAgICAgICAgICAgICAgIC8vIG9jdGFsID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgLy8gSW50ZWdlciBwYXJ0IGNvbnNpc3RzIG9mIDAgb3IgaXMg
YWJzZW50LiBTaWduaWZpY2FudCBkaWdpdHMgc3RhcnQgYWZ0ZXIKKyAgICAgICAgICAgICAgICAv
LyBsZWFkaW5nIHplcm9zIChpZiBhbnkpLgorICAgICAgICAgICAgICAgIHdoaWxlICgqY3VycmVu
dCA9PSAnMCcpIHsKKyAgICAgICAgICAgICAgICAgICAgKytjdXJyZW50OworICAgICAgICAgICAg
ICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpw
cm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCA9IGN1cnJlbnQgLSBpbnB1dDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBTaWduZWRaZXJvKHNpZ24pOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGV4cG9uZW50LS07ICAvLyBNb3ZlIHRoaXMgMCBpbnRv
IHRoZSBleHBvbmVudC4KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIFdlIGRvbid0IGVtaXQgYSAnLicsIGJ1dCBhZGp1c3QgdGhl
IGV4cG9uZW50IGluc3RlYWQuCisgICAgICAgICAgICBmcmFjdGlvbmFsX3BhcnQgPSB0cnVlOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGVyZSBpcyBhIGZyYWN0aW9uYWwgcGFydC4K
KyAgICAgICAgICAgIHdoaWxlICgqY3VycmVudCA+PSAnMCcgJiYgKmN1cnJlbnQgPD0gJzknKSB7
CisgICAgICAgICAgICAgICAgaWYgKHNpZ25pZmljYW50X2RpZ2l0cyA8IGtNYXhTaWduaWZpY2Fu
dERpZ2l0cykgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYnVmZmVyX3BvcyA8IGtCdWZm
ZXJTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2J1ZmZlcl9wb3MrK10gPSBzdGF0
aWNfY2FzdDxjaGFyPigqY3VycmVudCk7CisgICAgICAgICAgICAgICAgICAgIHNpZ25pZmljYW50
X2RpZ2l0cysrOworICAgICAgICAgICAgICAgICAgICBleHBvbmVudC0tOworICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSBpbnNpZ25pZmljYW50
IGRpZ2l0cyBpbiB0aGUgZnJhY3Rpb25hbCBwYXJ0LgorICAgICAgICAgICAgICAgICAgICBub256
ZXJvX2RpZ2l0X2Ryb3BwZWQgPSBub256ZXJvX2RpZ2l0X2Ryb3BwZWQgfHwgKmN1cnJlbnQgIT0g
JzAnOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAg
ICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gZW5kKSBnb3RvIHBhcnNpbmdfZG9uZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFsZWFkaW5nX3plcm8g
JiYgZXhwb25lbnQgPT0gMCAmJiBzaWduaWZpY2FudF9kaWdpdHMgPT0gMCkgeworICAgICAgICAg
ICAgLy8gSWYgbGVhZGluZ196ZXJvcyBpcyB0cnVlIHRoZW4gdGhlIHN0cmluZyBjb250YWlucyB6
ZXJvcy4KKyAgICAgICAgICAgIC8vIElmIGV4cG9uZW50IDwgMCB0aGVuIHN0cmluZyB3YXMgWyst
XVwuMCouLi4KKyAgICAgICAgICAgIC8vIElmIHNpZ25pZmljYW50X2RpZ2l0cyAhPSAwIHRoZSBz
dHJpbmcgaXMgbm90IGVxdWFsIHRvIDAuCisgICAgICAgICAgICAvLyBPdGhlcndpc2UgdGhlcmUg
YXJlIG5vIGRpZ2l0cyBpbiB0aGUgc3RyaW5nLgorICAgICAgICAgICAgcmV0dXJuIGp1bmtfc3Ry
aW5nX3ZhbHVlXzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gUGFyc2UgZXhwb25l
bnRpYWwgcGFydC4KKyAgICAgICAgaWYgKCpjdXJyZW50ID09ICdlJyB8fCAqY3VycmVudCA9PSAn
RScpIHsKKyAgICAgICAgICAgIGlmIChvY3RhbCAmJiAhYWxsb3dfdHJhaWxpbmdfanVuaykgcmV0
dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgICAgIGlmIChvY3RhbCkgZ290byBwYXJz
aW5nX2RvbmU7CisgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgICAgICBpZiAoY3VycmVu
dCA9PSBlbmQpIHsKKyAgICAgICAgICAgICAgICBpZiAoYWxsb3dfdHJhaWxpbmdfanVuaykgewor
ICAgICAgICAgICAgICAgICAgICBnb3RvIHBhcnNpbmdfZG9uZTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNoYXIgc2lnbiA9
ICcrJzsKKyAgICAgICAgICAgIGlmICgqY3VycmVudCA9PSAnKycgfHwgKmN1cnJlbnQgPT0gJy0n
KSB7CisgICAgICAgICAgICAgICAgc2lnbiA9IHN0YXRpY19jYXN0PGNoYXI+KCpjdXJyZW50KTsK
KyAgICAgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQg
PT0gZW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChhbGxvd190cmFpbGluZ19qdW5rKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHBhcnNpbmdfZG9uZTsKKyAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0
cmluZ192YWx1ZV87CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChjdXJyZW50ID09IGVu
ZCB8fCAqY3VycmVudCA8ICcwJyB8fCAqY3VycmVudCA+ICc5JykgeworICAgICAgICAgICAgICAg
IGlmIChhbGxvd190cmFpbGluZ19qdW5rKSB7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gcGFy
c2luZ19kb25lOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0g
SU5UX01BWCAvIDI7CisgICAgICAgICAgICBBU1NFUlQoLW1heF9leHBvbmVudCAvIDIgPD0gZXhw
b25lbnQgJiYgZXhwb25lbnQgPD0gbWF4X2V4cG9uZW50IC8gMik7CisgICAgICAgICAgICBpbnQg
bnVtID0gMDsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAvLyBDaGVjayBvdmVy
Zmxvdy4KKyAgICAgICAgICAgICAgICBpbnQgZGlnaXQgPSAqY3VycmVudCAtICcwJzsKKyAgICAg
ICAgICAgICAgICBpZiAobnVtID49IG1heF9leHBvbmVudCAvIDEwCisgICAgICAgICAgICAgICAg
ICAgICYmICEobnVtID09IG1heF9leHBvbmVudCAvIDEwICYmIGRpZ2l0IDw9IG1heF9leHBvbmVu
dCAlIDEwKSkgeworICAgICAgICAgICAgICAgICAgICBudW0gPSBtYXhfZXhwb25lbnQ7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbnVtID0gbnVtICogMTAg
KyBkaWdpdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKytjdXJyZW50Owor
ICAgICAgICAgICAgfSB3aGlsZSAoY3VycmVudCAhPSBlbmQgJiYgKmN1cnJlbnQgPj0gJzAnICYm
ICpjdXJyZW50IDw9ICc5Jyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGV4cG9uZW50ICs9
IChzaWduID09ICctJyA/IC1udW0gOiBudW0pOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpZiAoIShhbGxvd190cmFpbGluZ19zcGFjZXMgfHwgYWxsb3dfdHJhaWxpbmdfanVuaykgJiYg
KGN1cnJlbnQgIT0gZW5kKSkgeworICAgICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVl
XzsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWFsbG93X3RyYWlsaW5nX2p1bmsgJiYgQWR2YW5j
ZVRvTm9uc3BhY2UoJmN1cnJlbnQsIGVuZCkpIHsKKyAgICAgICAgICAgIHJldHVybiBqdW5rX3N0
cmluZ192YWx1ZV87CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFsbG93X3RyYWlsaW5nX3NwYWNl
cykgeworICAgICAgICAgICAgQWR2YW5jZVRvTm9uc3BhY2UoJmN1cnJlbnQsIGVuZCk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgcGFyc2luZ19kb25lOgorICAgICAgICBleHBvbmVudCArPSBp
bnNpZ25pZmljYW50X2RpZ2l0czsKKyAgICAgICAgCisgICAgICAgIGlmIChvY3RhbCkgeworICAg
ICAgICAgICAgZG91YmxlIHJlc3VsdDsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIHRhaWxfcG9p
bnRlciA9IE5VTEw7CisgICAgICAgICAgICByZXN1bHQgPSBSYWRpeFN0cmluZ1RvRG91YmxlPDM+
KGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVm
ZmVyICsgYnVmZmVyX3BvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2lnbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YWxsb3dfdHJhaWxpbmdfanVuaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAganVua19zdHJpbmdfdmFsdWVfLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmdGFpbF9wb2ludGVyKTsKKyAgICAgICAgICAgIEFTU0VSVCh0YWls
X3BvaW50ZXIgIT0gTlVMTCk7CisgICAgICAgICAgICAqcHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291
bnQgPSBjdXJyZW50IC0gaW5wdXQ7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBpZiAobm9uemVyb19kaWdpdF9kcm9wcGVkKSB7CisgICAg
ICAgICAgICBidWZmZXJbYnVmZmVyX3BvcysrXSA9ICcxJzsKKyAgICAgICAgICAgIGV4cG9uZW50
LS07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFTU0VSVChidWZmZXJfcG9zIDwga0J1
ZmZlclNpemUpOworICAgICAgICBidWZmZXJbYnVmZmVyX3Bvc10gPSAnXDAnOworICAgICAgICAK
KyAgICAgICAgZG91YmxlIGNvbnZlcnRlZCA9IFN0cnRvZChWZWN0b3I8Y29uc3QgY2hhcj4oYnVm
ZmVyLCBidWZmZXJfcG9zKSwgZXhwb25lbnQpOworICAgICAgICAqcHJvY2Vzc2VkX2NoYXJhY3Rl
cnNfY291bnQgPSBjdXJyZW50IC0gaW5wdXQ7CisgICAgICAgIHJldHVybiBzaWduPyAtY29udmVy
dGVkOiBjb252ZXJ0ZWQ7CisgICAgfQorICAgIAorfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252
ZXJzaW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZG91Ymxl
LWNvbnZlcnNpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kb3VibGUtY29u
dmVyc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ1YzMwZDc5MGM2ZjRkNjgzZjk2MzI3YjdiNTE3ZjllNmZi
MDUwZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2Ev
ZG91YmxlLWNvbnZlcnNpb24uaApAQCAtMCwwICsxLDQ5OCBAQAorLy8gQ29weXJpZ2h0IDIwMTAg
dGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
Ky8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisjaWZuZGVmIERPVUJMRV9DT05WRVJTSU9OX0RPVUJMRV9DT05WRVJTSU9OX0hf
CisjZGVmaW5lIERPVUJMRV9DT05WRVJTSU9OX0RPVUJMRV9DT05WRVJTSU9OX0hfCisKKyNpbmNs
dWRlICJ1dGlscy5oIgorCituYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAg
IGNsYXNzIERvdWJsZVRvU3RyaW5nQ29udmVydGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIC8v
IFdoZW4gY2FsbGluZyBUb0ZpeGVkIHdpdGggYSBkb3VibGUgPiAxMF5rTWF4Rml4ZWREaWdpdHNC
ZWZvcmVQb2ludAorICAgICAgICAvLyBvciBhIHJlcXVlc3RlZF9kaWdpdHMgcGFyYW1ldGVyID4g
a01heEZpeGVkRGlnaXRzQWZ0ZXJQb2ludCB0aGVuIHRoZQorICAgICAgICAvLyBmdW5jdGlvbiBy
ZXR1cm5zIGZhbHNlLgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtNYXhGaXhlZERpZ2l0c0Jl
Zm9yZVBvaW50ID0gNjA7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQga01heEZpeGVkRGlnaXRz
QWZ0ZXJQb2ludCA9IDYwOworICAgICAgICAKKyAgICAgICAgLy8gV2hlbiBjYWxsaW5nIFRvRXhw
b25lbnRpYWwgd2l0aCBhIHJlcXVlc3RlZF9kaWdpdHMKKyAgICAgICAgLy8gcGFyYW1ldGVyID4g
a01heEV4cG9uZW50aWFsRGlnaXRzIHRoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UuCisg
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQga01heEV4cG9uZW50aWFsRGlnaXRzID0gMTIwOworICAg
ICAgICAKKyAgICAgICAgLy8gV2hlbiBjYWxsaW5nIFRvUHJlY2lzaW9uIHdpdGggYSByZXF1ZXN0
ZWRfZGlnaXRzCisgICAgICAgIC8vIHBhcmFtZXRlciA8IGtNaW5QcmVjaXNpb25EaWdpdHMgb3Ig
cmVxdWVzdGVkX2RpZ2l0cyA+IGtNYXhQcmVjaXNpb25EaWdpdHMKKyAgICAgICAgLy8gdGhlbiB0
aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZS4KKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBrTWlu
UHJlY2lzaW9uRGlnaXRzID0gMTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBrTWF4UHJlY2lz
aW9uRGlnaXRzID0gMTIwOworICAgICAgICAKKyAgICAgICAgZW51bSBGbGFncyB7CisgICAgICAg
ICAgICBOT19GTEFHUyA9IDAsCisgICAgICAgICAgICBFTUlUX1BPU0lUSVZFX0VYUE9ORU5UX1NJ
R04gPSAxLAorICAgICAgICAgICAgRU1JVF9UUkFJTElOR19ERUNJTUFMX1BPSU5UID0gMiwKKyAg
ICAgICAgICAgIEVNSVRfVFJBSUxJTkdfWkVST19BRlRFUl9QT0lOVCA9IDQsCisgICAgICAgICAg
ICBVTklRVUVfWkVSTyA9IDgKKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIC8vIEZsYWdz
IHNob3VsZCBiZSBhIGJpdC1vciBjb21iaW5hdGlvbiBvZiB0aGUgcG9zc2libGUgRmxhZ3MtZW51
bS4KKyAgICAgICAgLy8gIC0gTk9fRkxBR1M6IG5vIHNwZWNpYWwgZmxhZ3MuCisgICAgICAgIC8v
ICAtIEVNSVRfUE9TSVRJVkVfRVhQT05FTlRfU0lHTjogd2hlbiB0aGUgbnVtYmVyIGlzIGNvbnZl
cnRlZCBpbnRvIGV4cG9uZW50CisgICAgICAgIC8vICAgIGZvcm0sIGVtaXRzIGEgJysnIGZvciBw
b3NpdGl2ZSBleHBvbmVudHMuIEV4YW1wbGU6IDEuMmUrMi4KKyAgICAgICAgLy8gIC0gRU1JVF9U
UkFJTElOR19ERUNJTUFMX1BPSU5UOiB3aGVuIHRoZSBpbnB1dCBudW1iZXIgaXMgYW4gaW50ZWdl
ciBhbmQgaXMKKyAgICAgICAgLy8gICAgY29udmVydGVkIGludG8gZGVjaW1hbCBmb3JtYXQgdGhl
biBhIHRyYWlsaW5nIGRlY2ltYWwgcG9pbnQgaXMgYXBwZW5kZWQuCisgICAgICAgIC8vICAgIEV4
YW1wbGU6IDIzNDUuMCBpcyBjb252ZXJ0ZWQgdG8gIjIzNDUuIi4KKyAgICAgICAgLy8gIC0gRU1J
VF9UUkFJTElOR19aRVJPX0FGVEVSX1BPSU5UOiBpbiBhZGRpdGlvbiB0byBhIHRyYWlsaW5nIGRl
Y2ltYWwgcG9pbnQKKyAgICAgICAgLy8gICAgZW1pdHMgYSB0cmFpbGluZyAnMCctY2hhcmFjdGVy
LiBUaGlzIGZsYWcgcmVxdWlyZXMgdGhlCisgICAgICAgIC8vICAgIEVYTUlUX1RSQUlMSU5HX0RF
Q0lNQUxfUE9JTlQgZmxhZy4KKyAgICAgICAgLy8gICAgRXhhbXBsZTogMjM0NS4wIGlzIGNvbnZl
cnRlZCB0byAiMjM0NS4wIi4KKyAgICAgICAgLy8gIC0gVU5JUVVFX1pFUk86ICItMC4wIiBpcyBj
b252ZXJ0ZWQgdG8gIjAuMCIuCisgICAgICAgIC8vCisgICAgICAgIC8vIEluZmluaXR5IHN5bWJv
bCBhbmQgbmFuX3N5bWJvbCBwcm92aWRlIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHRo
ZXNlCisgICAgICAgIC8vIHNwZWNpYWwgdmFsdWVzLiBJZiB0aGUgc3RyaW5nIGlzIE5VTEwgYW5k
IHRoZSBzcGVjaWFsIHZhbHVlIGlzIGVuY291bnRlcmVkCisgICAgICAgIC8vIHRoZW4gdGhlIGNv
bnZlcnNpb24gZnVuY3Rpb25zIHJldHVybiBmYWxzZS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8g
VGhlIGV4cG9uZW50X2NoYXJhY3RlciBpcyB1c2VkIGluIGV4cG9uZW50aWFsIHJlcHJlc2VudGF0
aW9ucy4gSXQgaXMKKyAgICAgICAgLy8gdXN1YWxseSAnZScgb3IgJ0UnLgorICAgICAgICAvLwor
ICAgICAgICAvLyBXaGVuIGNvbnZlcnRpbmcgdG8gdGhlIHNob3J0ZXN0IHJlcHJlc2VudGF0aW9u
IHRoZSBjb252ZXJ0ZXIgd2lsbAorICAgICAgICAvLyByZXByZXNlbnQgaW5wdXQgbnVtYmVycyBp
biBkZWNpbWFsIGZvcm1hdCBpZiB0aGV5IGFyZSBpbiB0aGUgaW50ZXJ2YWwKKyAgICAgICAgLy8g
WzEwXmRlY2ltYWxfaW5fc2hvcnRlc3RfbG93OyAxMF5kZWNpbWFsX2luX3Nob3J0ZXN0X2hpZ2hb
CisgICAgICAgIC8vICAgIChsb3dlciBib3VuZGFyeSBpbmNsdWRlZCwgZ3JlYXRlciBib3VuZGFy
eSBleGNsdWRlZCkuCisgICAgICAgIC8vIEV4YW1wbGU6IHdpdGggZGVjaW1hbF9pbl9zaG9ydGVz
dF9sb3cgPSAtNiBhbmQKKyAgICAgICAgLy8gICAgICAgICAgICAgICBkZWNpbWFsX2luX3Nob3J0
ZXN0X2hpZ2ggPSAyMToKKyAgICAgICAgLy8gICBUb1Nob3J0ZXN0KDAuMDAwMDAxKSAgLT4gIjAu
MDAwMDAxIgorICAgICAgICAvLyAgIFRvU2hvcnRlc3QoMC4wMDAwMDAxKSAtPiAiMWUtNyIKKyAg
ICAgICAgLy8gICBUb1Nob3J0ZXN0KDExMTExMTExMTExMTExMTExMTExMS4wKSAgLT4gIjExMTEx
MTExMTExMTExMTExMDAwMCIKKyAgICAgICAgLy8gICBUb1Nob3J0ZXN0KDEwMDAwMDAwMDAwMDAw
MDAwMDAwMC4wKSAgLT4gIjEwMDAwMDAwMDAwMDAwMDAwMDAwMCIKKyAgICAgICAgLy8gICBUb1No
b3J0ZXN0KDExMTExMTExMTExMTExMTExMTExMTEuMCkgLT4gIjEuMTExMTExMTExMTExMTExMWUr
MjEiCisgICAgICAgIC8vCisgICAgICAgIC8vIFdoZW4gY29udmVydGluZyB0byBwcmVjaXNpb24g
bW9kZSB0aGUgY29udmVydGVyIG1heSBhZGQKKyAgICAgICAgLy8gbWF4X2xlYWRpbmdfcGFkZGlu
Z196ZXJvZXMgYmVmb3JlIHJldHVybmluZyB0aGUgbnVtYmVyIGluIGV4cG9uZW50aWFsCisgICAg
ICAgIC8vIGZvcm1hdC4KKyAgICAgICAgLy8gRXhhbXBsZSB3aXRoIG1heF9sZWFkaW5nX3BhZGRp
bmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2RlID0gNi4KKyAgICAgICAgLy8gICBUb1ByZWNpc2lv
bigwLjAwMDAwMTIzNDUsIDIpIC0+ICIwLjAwMDAwMTIiCisgICAgICAgIC8vICAgVG9QcmVjaXNp
b24oMC4wMDAwMDAxMjM0NSwgMikgLT4gIjEuMmUtNyIKKyAgICAgICAgLy8gU2ltaWxhcmlseSB0
aGUgY29udmVydGVyIG1heSBhZGQgdXAgdG8KKyAgICAgICAgLy8gbWF4X3RyYWlsaW5nX3BhZGRp
bmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2RlIGluIHByZWNpc2lvbiBtb2RlIHRvIGF2b2lkCisg
ICAgICAgIC8vIHJldHVybmluZyBhbiBleHBvbmVudGlhbCByZXByZXNlbnRhdGlvbi4gQSB6ZXJv
IGFkZGVkIGJ5IHRoZQorICAgICAgICAvLyBFTUlUX1RSQUlMSU5HX1pFUk9fQUZURVJfUE9JTlQg
ZmxhZyBpcyBjb3VudGVkIGZvciB0aGlzIGxpbWl0LgorICAgICAgICAvLyBFeGFtcGxlcyBmb3Ig
bWF4X3RyYWlsaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2RlID0gMToKKyAgICAg
ICAgLy8gICBUb1ByZWNpc2lvbigyMzAuMCwgMikgLT4gIjIzMCIKKyAgICAgICAgLy8gICBUb1By
ZWNpc2lvbigyMzAuMCwgMikgLT4gIjIzMC4iICB3aXRoIEVNSVRfVFJBSUxJTkdfREVDSU1BTF9Q
T0lOVC4KKyAgICAgICAgLy8gICBUb1ByZWNpc2lvbigyMzAuMCwgMikgLT4gIjIuM2UyIiB3aXRo
IEVNSVRfVFJBSUxJTkdfWkVST19BRlRFUl9QT0lOVC4KKyAgICAgICAgRG91YmxlVG9TdHJpbmdD
b252ZXJ0ZXIoaW50IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiBpbmZpbml0eV9zeW1ib2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIqIG5hbl9zeW1ib2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNoYXIgZXhwb25lbnRfY2hhcmFjdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgZGVjaW1hbF9pbl9zaG9ydGVzdF9sb3csCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBkZWNpbWFsX2luX3Nob3J0ZXN0X2hpZ2gsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBtYXhfbGVhZGluZ19wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25f
bW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1heF90cmFpbGluZ19w
YWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZSkKKyAgICAgICAgOiBmbGFnc18oZmxhZ3Mp
LAorICAgICAgICBpbmZpbml0eV9zeW1ib2xfKGluZmluaXR5X3N5bWJvbCksCisgICAgICAgIG5h
bl9zeW1ib2xfKG5hbl9zeW1ib2wpLAorICAgICAgICBleHBvbmVudF9jaGFyYWN0ZXJfKGV4cG9u
ZW50X2NoYXJhY3RlciksCisgICAgICAgIGRlY2ltYWxfaW5fc2hvcnRlc3RfbG93XyhkZWNpbWFs
X2luX3Nob3J0ZXN0X2xvdyksCisgICAgICAgIGRlY2ltYWxfaW5fc2hvcnRlc3RfaGlnaF8oZGVj
aW1hbF9pbl9zaG9ydGVzdF9oaWdoKSwKKyAgICAgICAgbWF4X2xlYWRpbmdfcGFkZGluZ196ZXJv
ZXNfaW5fcHJlY2lzaW9uX21vZGVfKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWF4X2xlYWRpbmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lz
aW9uX21vZGUpLAorICAgICAgICBtYXhfdHJhaWxpbmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lz
aW9uX21vZGVfKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1heF90cmFpbGluZ19wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZSkg
eworICAgICAgICAgICAgLy8gV2hlbiAndHJhaWxpbmcgemVybyBhZnRlciB0aGUgcG9pbnQnIGlz
IHNldCwgdGhlbiAndHJhaWxpbmcgcG9pbnQnCisgICAgICAgICAgICAvLyBtdXN0IGJlIHNldCB0
b28uCisgICAgICAgICAgICBBU1NFUlQoKChmbGFncyAmIEVNSVRfVFJBSUxJTkdfREVDSU1BTF9Q
T0lOVCkgIT0gMCkgfHwKKyAgICAgICAgICAgICAgICAgICAhKChmbGFncyAmIEVNSVRfVFJBSUxJ
TkdfWkVST19BRlRFUl9QT0lOVCkgIT0gMCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICAvLyBSZXR1cm5zIGEgY29udmVydGVyIGZvbGxvd2luZyB0aGUgRWNtYVNjcmlwdCBzcGVjaWZp
Y2F0aW9uLgorICAgICAgICBzdGF0aWMgY29uc3QgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXImIEVj
bWFTY3JpcHRDb252ZXJ0ZXIoKTsKKyAgICAgICAgCisgICAgICAgIC8vIENvbXB1dGVzIHRoZSBz
aG9ydGVzdCBzdHJpbmcgb2YgZGlnaXRzIHRoYXQgY29ycmVjdGx5IHJlcHJlc2VudCB0aGUgaW5w
dXQKKyAgICAgICAgLy8gbnVtYmVyLiBEZXBlbmRpbmcgb24gZGVjaW1hbF9pbl9zaG9ydGVzdF9s
b3cgYW5kIGRlY2ltYWxfaW5fc2hvcnRlc3RfaGlnaAorICAgICAgICAvLyAoc2VlIGNvbnN0cnVj
dG9yKSBpdCB0aGVuIGVpdGhlciByZXR1cm5zIGEgZGVjaW1hbCByZXByZXNlbnRhdGlvbiwgb3Ig
YW4KKyAgICAgICAgLy8gZXhwb25lbnRpYWwgcmVwcmVzZW50YXRpb24uCisgICAgICAgIC8vIEV4
YW1wbGUgd2l0aCBkZWNpbWFsX2luX3Nob3J0ZXN0X2xvdyA9IC02LAorICAgICAgICAvLyAgICAg
ICAgICAgICAgZGVjaW1hbF9pbl9zaG9ydGVzdF9oaWdoID0gMjEsCisgICAgICAgIC8vICAgICAg
ICAgICAgICBFTUlUX1BPU0lUSVZFX0VYUE9ORU5UX1NJR04gYWN0aXZhdGVkLCBhbmQKKyAgICAg
ICAgLy8gICAgICAgICAgICAgIEVNSVRfVFJBSUxJTkdfREVDSU1BTF9QT0lOVCBkZWFjdGl2ZWQ6
CisgICAgICAgIC8vICAgVG9TaG9ydGVzdCgwLjAwMDAwMSkgIC0+ICIwLjAwMDAwMSIKKyAgICAg
ICAgLy8gICBUb1Nob3J0ZXN0KDAuMDAwMDAwMSkgLT4gIjFlLTciCisgICAgICAgIC8vICAgVG9T
aG9ydGVzdCgxMTExMTExMTExMTExMTExMTExMTEuMCkgIC0+ICIxMTExMTExMTExMTExMTExMTAw
MDAiCisgICAgICAgIC8vICAgVG9TaG9ydGVzdCgxMDAwMDAwMDAwMDAwMDAwMDAwMDAuMCkgIC0+
ICIxMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisgICAgICAgIC8vICAgVG9TaG9ydGVzdCgxMTExMTEx
MTExMTExMTExMTExMTExLjApIC0+ICIxLjExMTExMTExMTExMTExMTFlKzIxIgorICAgICAgICAv
LworICAgICAgICAvLyBOb3RlOiB0aGUgY29udmVyc2lvbiBtYXkgcm91bmQgdGhlIG91dHB1dCBp
ZiB0aGUgcmV0dXJuZWQgc3RyaW5nCisgICAgICAgIC8vIGlzIGFjY3VyYXRlIGVub3VnaCB0byB1
bmlxdWVseSBpZGVudGlmeSB0aGUgaW5wdXQtbnVtYmVyLgorICAgICAgICAvLyBGb3IgZXhhbXBs
ZSB0aGUgbW9zdCBwcmVjaXNlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkb3VibGUgOWU1OSBlcXVh
bHMKKyAgICAgICAgLy8gIjg5OTk5OTk5OTk5OTk5OTkxODc2NzIyOTQ0OTcxNzYxOTk1MzgxMDEz
MTI3MzY3NDY5MDY1NjIwNjg0OCIsIGJ1dAorICAgICAgICAvLyB0aGUgY29udmVydGVyIHdpbGwg
cmV0dXJuIHRoZSBzaG9ydGVyIChidXQgc3RpbGwgY29ycmVjdCkgIjllNTkiLgorICAgICAgICAv
LworICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbnZlcnNpb24gc3VjY2VlZHMuIFRo
ZSBjb252ZXJzaW9uIGFsd2F5cyBzdWNjZWVkcworICAgICAgICAvLyBleGNlcHQgd2hlbiB0aGUg
aW5wdXQgdmFsdWUgaXMgc3BlY2lhbCBhbmQgbm8gaW5maW5pdHlfc3ltYm9sIG9yCisgICAgICAg
IC8vIG5hbl9zeW1ib2wgaGFzIGJlZW4gZ2l2ZW4gdG8gdGhlIGNvbnN0cnVjdG9yLgorICAgICAg
ICBib29sIFRvU2hvcnRlc3QoZG91YmxlIHZhbHVlLCBTdHJpbmdCdWlsZGVyKiByZXN1bHRfYnVp
bGRlcikgY29uc3Q7CisgICAgICAgIAorICAgICAgICAKKyAgICAgICAgLy8gQ29tcHV0ZXMgYSBk
ZWNpbWFsIHJlcHJlc2VudGF0aW9uIHdpdGggYSBmaXhlZCBudW1iZXIgb2YgZGlnaXRzIGFmdGVy
IHRoZQorICAgICAgICAvLyBkZWNpbWFsIHBvaW50LiBUaGUgbGFzdCBlbWl0dGVkIGRpZ2l0IGlz
IHJvdW5kZWQuCisgICAgICAgIC8vCisgICAgICAgIC8vIEV4YW1wbGVzOgorICAgICAgICAvLyAg
IFRvRml4ZWQoMy4xMiwgMSkgLT4gIjMuMSIKKyAgICAgICAgLy8gICBUb0ZpeGVkKDMuMTQxNSwg
MykgLT4gIjMuMTQyIgorICAgICAgICAvLyAgIFRvRml4ZWQoMTIzNC41Njc4OSwgNCkgLT4gIjEy
MzQuNTY3OSIKKyAgICAgICAgLy8gICBUb0ZpeGVkKDEuMjMsIDUpIC0+ICIxLjIzMDAwIgorICAg
ICAgICAvLyAgIFRvRml4ZWQoMC4xLCA0KSAtPiAiMC4xMDAwIgorICAgICAgICAvLyAgIFRvRml4
ZWQoMWUzMCwgMikgLT4gIjEwMDAwMDAwMDAwMDAwMDAwMTk4ODQ2MjQ4Mzg2NTYuMDAiCisgICAg
ICAgIC8vICAgVG9GaXhlZCgwLjEsIDMwKSAtPiAiMC4xMDAwMDAwMDAwMDAwMDAwMDU1NTExMTUx
MjMxMjYiCisgICAgICAgIC8vICAgVG9GaXhlZCgwLjEsIDE3KSAtPiAiMC4xMDAwMDAwMDAwMDAw
MDAwMSIKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgcmVxdWVzdGVkX2RpZ2l0cyBlcXVhbHMg
MCwgdGhlbiB0aGUgdGFpbCBvZiB0aGUgcmVzdWx0IGRlcGVuZHMgb24KKyAgICAgICAgLy8gdGhl
IEVNSVRfVFJBSUxJTkdfREVDSU1BTF9QT0lOVCBhbmQgRU1JVF9UUkFJTElOR19aRVJPX0FGVEVS
X1BPSU5ULgorICAgICAgICAvLyBFeGFtcGxlcywgZm9yIHJlcXVlc3RlZF9kaWdpdHMgPT0gMCwK
KyAgICAgICAgLy8gICBsZXQgRU1JVF9UUkFJTElOR19ERUNJTUFMX1BPSU5UIGFuZCBFTUlUX1RS
QUlMSU5HX1pFUk9fQUZURVJfUE9JTlQgYmUKKyAgICAgICAgLy8gICAgLSBmYWxzZSBhbmQgZmFs
c2U6IHRoZW4gMTIzLjQ1IC0+IDEyMworICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMC42NzggLT4gMQorICAgICAgICAvLyAgICAtIHRydWUgYW5kIGZhbHNlOiB0aGVuIDEy
My40NSAtPiAxMjMuCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNjc4
IC0+IDEuCisgICAgICAgIC8vICAgIC0gdHJ1ZSBhbmQgdHJ1ZTogdGhlbiAxMjMuNDUgLT4gMTIz
LjAKKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAwLjY3OCAtPiAxLjAKKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb252ZXJzaW9uIHN1Y2Nl
ZWRzLiBUaGUgY29udmVyc2lvbiBhbHdheXMgc3VjY2VlZHMKKyAgICAgICAgLy8gZXhjZXB0IGZv
ciB0aGUgZm9sbG93aW5nIGNhc2VzOgorICAgICAgICAvLyAgIC0gdGhlIGlucHV0IHZhbHVlIGlz
IHNwZWNpYWwgYW5kIG5vIGluZmluaXR5X3N5bWJvbCBvciBuYW5fc3ltYm9sIGhhcworICAgICAg
ICAvLyAgICAgYmVlbiBwcm92aWRlZCB0byB0aGUgY29uc3RydWN0b3IsCisgICAgICAgIC8vICAg
LSAndmFsdWUnID4gMTBea01heEZpeGVkRGlnaXRzQmVmb3JlUG9pbnQsIG9yCisgICAgICAgIC8v
ICAgLSAncmVxdWVzdGVkX2RpZ2l0cycgPiBrTWF4Rml4ZWREaWdpdHNBZnRlclBvaW50LgorICAg
ICAgICAvLyBUaGUgbGFzdCB0d28gY29uZGl0aW9ucyBpbXBseSB0aGF0IHRoZSByZXN1bHQgd2ls
bCBuZXZlciBjb250YWluIG1vcmUgdGhhbgorICAgICAgICAvLyAxICsga01heEZpeGVkRGlnaXRz
QmVmb3JlUG9pbnQgKyAxICsga01heEZpeGVkRGlnaXRzQWZ0ZXJQb2ludCBjaGFyYWN0ZXJzCisg
ICAgICAgIC8vIChvbmUgYWRkaXRpb25hbCBjaGFyYWN0ZXIgZm9yIHRoZSBzaWduLCBhbmQgb25l
IGZvciB0aGUgZGVjaW1hbCBwb2ludCkuCisgICAgICAgIGJvb2wgVG9GaXhlZChkb3VibGUgdmFs
dWUsCisgICAgICAgICAgICAgICAgICAgICBpbnQgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAgICAg
ICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25zdDsKKyAgICAg
ICAgCisgICAgICAgIC8vIENvbXB1dGVzIGEgcmVwcmVzZW50YXRpb24gaW4gZXhwb25lbnRpYWwg
Zm9ybWF0IHdpdGggcmVxdWVzdGVkX2RpZ2l0cworICAgICAgICAvLyBhZnRlciB0aGUgZGVjaW1h
bCBwb2ludC4gVGhlIGxhc3QgZW1pdHRlZCBkaWdpdCBpcyByb3VuZGVkLgorICAgICAgICAvLyBJ
ZiByZXF1ZXN0ZWRfZGlnaXRzIGVxdWFscyAtMSwgdGhlbiB0aGUgc2hvcnRlc3QgZXhwb25lbnRp
YWwgcmVwcmVzZW50YXRpb24KKyAgICAgICAgLy8gaXMgY29tcHV0ZWQuCisgICAgICAgIC8vCisg
ICAgICAgIC8vIEV4YW1wbGVzIHdpdGggRU1JVF9QT1NJVElWRV9FWFBPTkVOVF9TSUdOIGRlYWN0
aXZhdGVkLCBhbmQKKyAgICAgICAgLy8gICAgICAgICAgICAgICBleHBvbmVudF9jaGFyYWN0ZXIg
c2V0IHRvICdlJy4KKyAgICAgICAgLy8gICBUb0V4cG9uZW50aWFsKDMuMTIsIDEpIC0+ICIzLjFl
MCIKKyAgICAgICAgLy8gICBUb0V4cG9uZW50aWFsKDUuMCwgMykgLT4gIjUuMDAwZTAiCisgICAg
ICAgIC8vICAgVG9FeHBvbmVudGlhbCgwLjAwMSwgMikgLT4gIjEuMDBlLTMiCisgICAgICAgIC8v
ICAgVG9FeHBvbmVudGlhbCgzLjE0MTUsIC0xKSAtPiAiMy4xNDE1ZTAiCisgICAgICAgIC8vICAg
VG9FeHBvbmVudGlhbCgzLjE0MTUsIDQpIC0+ICIzLjE0MTVlMCIKKyAgICAgICAgLy8gICBUb0V4
cG9uZW50aWFsKDMuMTQxNSwgMykgLT4gIjMuMTQyZTAiCisgICAgICAgIC8vICAgVG9FeHBvbmVu
dGlhbCgxMjM0NTY3ODkwMDAwMDAsIDMpIC0+ICIxLjIzNWUxNCIKKyAgICAgICAgLy8gICBUb0V4
cG9uZW50aWFsKDEwMDAwMDAwMDAwMDAwMDAwMTk4ODQ2MjQ4Mzg2NTYuMCwgLTEpIC0+ICIxZTMw
IgorICAgICAgICAvLyAgIFRvRXhwb25lbnRpYWwoMTAwMDAwMDAwMDAwMDAwMDAxOTg4NDYyNDgz
ODY1Ni4wLCAzMikgLT4KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAiMS4wMDAwMDAw
MDAwMDAwMDAwMTk4ODQ2MjQ4Mzg2NTYwMGUzMCIKKyAgICAgICAgLy8gICBUb0V4cG9uZW50aWFs
KDEyMzQsIDApIC0+ICIxZTMiCisgICAgICAgIC8vCisgICAgICAgIC8vIFJldHVybnMgdHJ1ZSBp
ZiB0aGUgY29udmVyc2lvbiBzdWNjZWVkcy4gVGhlIGNvbnZlcnNpb24gYWx3YXlzIHN1Y2NlZWRz
CisgICAgICAgIC8vIGV4Y2VwdCBmb3IgdGhlIGZvbGxvd2luZyBjYXNlczoKKyAgICAgICAgLy8g
ICAtIHRoZSBpbnB1dCB2YWx1ZSBpcyBzcGVjaWFsIGFuZCBubyBpbmZpbml0eV9zeW1ib2wgb3Ig
bmFuX3N5bWJvbCBoYXMKKyAgICAgICAgLy8gICAgIGJlZW4gcHJvdmlkZWQgdG8gdGhlIGNvbnN0
cnVjdG9yLAorICAgICAgICAvLyAgIC0gJ3JlcXVlc3RlZF9kaWdpdHMnID4ga01heEV4cG9uZW50
aWFsRGlnaXRzLgorICAgICAgICAvLyBUaGUgbGFzdCBjb25kaXRpb24gaW1wbGllcyB0aGF0IHRo
ZSByZXN1bHQgd2lsbCBuZXZlciBjb250YWluIG1vcmUgdGhhbgorICAgICAgICAvLyBrTWF4RXhw
b25lbnRpYWxEaWdpdHMgKyA4IGNoYXJhY3RlcnMgKHRoZSBzaWduLCB0aGUgZGlnaXQgYmVmb3Jl
IHRoZQorICAgICAgICAvLyBkZWNpbWFsIHBvaW50LCB0aGUgZGVjaW1hbCBwb2ludCwgdGhlIGV4
cG9uZW50IGNoYXJhY3RlciwgdGhlCisgICAgICAgIC8vIGV4cG9uZW50J3Mgc2lnbiwgYW5kIGF0
IG1vc3QgMyBleHBvbmVudCBkaWdpdHMpLgorICAgICAgICBib29sIFRvRXhwb25lbnRpYWwoZG91
YmxlIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlcXVlc3RlZF9kaWdp
dHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyKiByZXN1bHRfYnVp
bGRlcikgY29uc3Q7CisgICAgICAgIAorICAgICAgICAvLyBDb21wdXRlcyAncHJlY2lzaW9uJyBs
ZWFkaW5nIGRpZ2l0cyBvZiB0aGUgZ2l2ZW4gJ3ZhbHVlJyBhbmQgcmV0dXJucyB0aGVtCisgICAg
ICAgIC8vIGVpdGhlciBpbiBleHBvbmVudGlhbCBvciBkZWNpbWFsIGZvcm1hdCwgZGVwZW5kaW5n
IG9uCisgICAgICAgIC8vIG1heF97bGVhZGluZ3x0cmFpbGluZ31fcGFkZGluZ196ZXJvZXNfaW5f
cHJlY2lzaW9uX21vZGUgKGdpdmVuIHRvIHRoZQorICAgICAgICAvLyBjb25zdHJ1Y3RvcikuCisg
ICAgICAgIC8vIFRoZSBsYXN0IGNvbXB1dGVkIGRpZ2l0IGlzIHJvdW5kZWQuCisgICAgICAgIC8v
CisgICAgICAgIC8vIEV4YW1wbGUgd2l0aCBtYXhfbGVhZGluZ19wYWRkaW5nX3plcm9lc19pbl9w
cmVjaXNpb25fbW9kZSA9IDYuCisgICAgICAgIC8vICAgVG9QcmVjaXNpb24oMC4wMDAwMDEyMzQ1
LCAyKSAtPiAiMC4wMDAwMDEyIgorICAgICAgICAvLyAgIFRvUHJlY2lzaW9uKDAuMDAwMDAwMTIz
NDUsIDIpIC0+ICIxLjJlLTciCisgICAgICAgIC8vIFNpbWlsYXJpbHkgdGhlIGNvbnZlcnRlciBt
YXkgYWRkIHVwIHRvCisgICAgICAgIC8vIG1heF90cmFpbGluZ19wYWRkaW5nX3plcm9lc19pbl9w
cmVjaXNpb25fbW9kZSBpbiBwcmVjaXNpb24gbW9kZSB0byBhdm9pZAorICAgICAgICAvLyByZXR1
cm5pbmcgYW4gZXhwb25lbnRpYWwgcmVwcmVzZW50YXRpb24uIEEgemVybyBhZGRlZCBieSB0aGUK
KyAgICAgICAgLy8gRU1JVF9UUkFJTElOR19aRVJPX0FGVEVSX1BPSU5UIGZsYWcgaXMgY291bnRl
ZCBmb3IgdGhpcyBsaW1pdC4KKyAgICAgICAgLy8gRXhhbXBsZXMgZm9yIG1heF90cmFpbGluZ19w
YWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZSA9IDE6CisgICAgICAgIC8vICAgVG9QcmVj
aXNpb24oMjMwLjAsIDIpIC0+ICIyMzAiCisgICAgICAgIC8vICAgVG9QcmVjaXNpb24oMjMwLjAs
IDIpIC0+ICIyMzAuIiAgd2l0aCBFTUlUX1RSQUlMSU5HX0RFQ0lNQUxfUE9JTlQuCisgICAgICAg
IC8vICAgVG9QcmVjaXNpb24oMjMwLjAsIDIpIC0+ICIyLjNlMiIgd2l0aCBFTUlUX1RSQUlMSU5H
X1pFUk9fQUZURVJfUE9JTlQuCisgICAgICAgIC8vIEV4YW1wbGVzIGZvciBtYXhfdHJhaWxpbmdf
cGFkZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGUgPSAzLCBhbmQgbm8KKyAgICAgICAgLy8g
ICAgRU1JVF9UUkFJTElOR19aRVJPX0FGVEVSX1BPSU5UOgorICAgICAgICAvLyAgIFRvUHJlY2lz
aW9uKDEyMzQ1MC4wLCA2KSAtPiAiMTIzNDUwIgorICAgICAgICAvLyAgIFRvUHJlY2lzaW9uKDEy
MzQ1MC4wLCA1KSAtPiAiMTIzNDUwIgorICAgICAgICAvLyAgIFRvUHJlY2lzaW9uKDEyMzQ1MC4w
LCA0KSAtPiAiMTIzNTAwIgorICAgICAgICAvLyAgIFRvUHJlY2lzaW9uKDEyMzQ1MC4wLCAzKSAt
PiAiMTIzMDAwIgorICAgICAgICAvLyAgIFRvUHJlY2lzaW9uKDEyMzQ1MC4wLCAyKSAtPiAiMS4y
ZTUiCisgICAgICAgIC8vCisgICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29udmVyc2lv
biBzdWNjZWVkcy4gVGhlIGNvbnZlcnNpb24gYWx3YXlzIHN1Y2NlZWRzCisgICAgICAgIC8vIGV4
Y2VwdCBmb3IgdGhlIGZvbGxvd2luZyBjYXNlczoKKyAgICAgICAgLy8gICAtIHRoZSBpbnB1dCB2
YWx1ZSBpcyBzcGVjaWFsIGFuZCBubyBpbmZpbml0eV9zeW1ib2wgb3IgbmFuX3N5bWJvbCBoYXMK
KyAgICAgICAgLy8gICAgIGJlZW4gcHJvdmlkZWQgdG8gdGhlIGNvbnN0cnVjdG9yLAorICAgICAg
ICAvLyAgIC0gcHJlY2lzaW9uIDwga01pblBlcmljaXNpb25EaWdpdHMKKyAgICAgICAgLy8gICAt
IHByZWNpc2lvbiA+IGtNYXhQcmVjaXNpb25EaWdpdHMKKyAgICAgICAgLy8gVGhlIGxhc3QgY29u
ZGl0aW9uIGltcGxpZXMgdGhhdCB0aGUgcmVzdWx0IHdpbGwgbmV2ZXIgY29udGFpbiBtb3JlIHRo
YW4KKyAgICAgICAgLy8ga01heFByZWNpc2lvbkRpZ2l0cyArIDcgY2hhcmFjdGVycyAodGhlIHNp
Z24sIHRoZSBkZWNpbWFsIHBvaW50LCB0aGUKKyAgICAgICAgLy8gZXhwb25lbnQgY2hhcmFjdGVy
LCB0aGUgZXhwb25lbnQncyBzaWduLCBhbmQgYXQgbW9zdCAzIGV4cG9uZW50IGRpZ2l0cykuCisg
ICAgICAgIGJvb2wgVG9QcmVjaXNpb24oZG91YmxlIHZhbHVlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBwcmVjaXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVp
bGRlciogcmVzdWx0X2J1aWxkZXIpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgZW51bSBEdG9h
TW9kZSB7CisgICAgICAgICAgICAvLyBQcm9kdWNlIHRoZSBzaG9ydGVzdCBjb3JyZWN0IHJlcHJl
c2VudGF0aW9uLgorICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGUgdGhlIG91dHB1dCBvZiAwLjI5
OTk5OTk5OTk5OTk5OTk4ODg5NyBpcyAodGhlIGxlc3MgYWNjdXJhdGUKKyAgICAgICAgICAgIC8v
IGJ1dCBjb3JyZWN0KSAwLjMuCisgICAgICAgICAgICBTSE9SVEVTVCwKKyAgICAgICAgICAgIC8v
IFByb2R1Y2UgYSBmaXhlZCBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50
LgorICAgICAgICAgICAgLy8gRm9yIGluc3RhbmNlIGZpeGVkKDAuMSwgNCkgYmVjb21lcyAwLjEw
MDAKKyAgICAgICAgICAgIC8vIElmIHRoZSBpbnB1dCBudW1iZXIgaXMgYmlnLCB0aGUgb3V0cHV0
IHdpbGwgYmUgYmlnLgorICAgICAgICAgICAgRklYRUQsCisgICAgICAgICAgICAvLyBGaXhlZCBu
dW1iZXIgb2YgZGlnaXRzIChpbmRlcGVuZGVudCBvZiB0aGUgZGVjaW1hbCBwb2ludCkuCisgICAg
ICAgICAgICBQUkVDSVNJT04KKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBt
YXhpbWFsIG51bWJlciBvZiBkaWdpdHMgdGhhdCBhcmUgbmVlZGVkIHRvIGVtaXQgYSBkb3VibGUg
aW4gYmFzZSAxMC4KKyAgICAgICAgLy8gQSBoaWdoZXIgcHJlY2lzaW9uIGNhbiBiZSBhY2hpZXZl
ZCBieSB1c2luZyBtb3JlIGRpZ2l0cywgYnV0IHRoZSBzaG9ydGVzdAorICAgICAgICAvLyBhY2N1
cmF0ZSByZXByZXNlbnRhdGlvbiBvZiBhbnkgZG91YmxlIHdpbGwgbmV2ZXIgdXNlIG1vcmUgZGln
aXRzIHRoYW4KKyAgICAgICAgLy8ga0Jhc2UxME1heGltYWxMZW5ndGguCisgICAgICAgIC8vIE5v
dGUgdGhhdCBEb3VibGVUb0FzY2lpIG51bGwtdGVybWluYXRlcyBpdHMgaW5wdXQuIFNvIHRoZSBn
aXZlbiBidWZmZXIKKyAgICAgICAgLy8gc2hvdWxkIGJlIGF0IGxlYXN0IGtCYXNlMTBNYXhpbWFs
TGVuZ3RoICsgMSBjaGFyYWN0ZXJzIGxvbmcuCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQga0Jh
c2UxME1heGltYWxMZW5ndGggPSAxNzsKKyAgICAgICAgCisgICAgICAgIC8vIENvbnZlcnRzIHRo
ZSBnaXZlbiBkb3VibGUgJ3YnIHRvIGFzY2lpLgorICAgICAgICAvLyBUaGUgcmVzdWx0IHNob3Vs
ZCBiZSBpbnRlcnByZXRlZCBhcyBidWZmZXIgKiAxMF4ocG9pbnQtbGVuZ3RoKS4KKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gVGhlIG91dHB1dCBkZXBlbmRzIG9uIHRoZSBnaXZlbiBtb2RlOgorICAg
ICAgICAvLyAgLSBTSE9SVEVTVDogcHJvZHVjZSB0aGUgbGVhc3QgYW1vdW50IG9mIGRpZ2l0cyBm
b3Igd2hpY2ggdGhlIGludGVybmFsCisgICAgICAgIC8vICAgaWRlbnRpdHkgcmVxdWlyZW1lbnQg
aXMgc3RpbGwgc2F0aXNmaWVkLiBJZiB0aGUgZGlnaXRzIGFyZSBwcmludGVkCisgICAgICAgIC8v
ICAgKHRvZ2V0aGVyIHdpdGggdGhlIGNvcnJlY3QgZXhwb25lbnQpIHRoZW4gcmVhZGluZyB0aGlz
IG51bWJlciB3aWxsIGdpdmUKKyAgICAgICAgLy8gICAndicgYWdhaW4uIFRoZSBidWZmZXIgd2ls
bCBjaG9vc2UgdGhlIHJlcHJlc2VudGF0aW9uIHRoYXQgaXMgY2xvc2VzdCB0bworICAgICAgICAv
LyAgICd2Jy4gSWYgdGhlcmUgYXJlIHR3byBhdCB0aGUgc2FtZSBkaXN0YW5jZSwgdGhhbiB0aGUg
b25lIGZhcnRoZXIgYXdheQorICAgICAgICAvLyAgIGZyb20gMCBpcyBjaG9zZW4gKGhhbGZ3YXkg
Y2FzZXMgLSBlbmRpbmcgd2l0aCA1IC0gYXJlIHJvdW5kZWQgdXApLgorICAgICAgICAvLyAgIElu
IHRoaXMgbW9kZSB0aGUgJ3JlcXVlc3RlZF9kaWdpdHMnIHBhcmFtZXRlciBpcyBpZ25vcmVkLgor
ICAgICAgICAvLyAgLSBGSVhFRDogcHJvZHVjZXMgZGlnaXRzIG5lY2Vzc2FyeSB0byBwcmludCBh
IGdpdmVuIG51bWJlciB3aXRoCisgICAgICAgIC8vICAgJ3JlcXVlc3RlZF9kaWdpdHMnIGRpZ2l0
cyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludC4gVGhlIHByb2R1Y2VkIGRpZ2l0cworICAgICAgICAv
LyAgIG1pZ2h0IGJlIHRvbyBzaG9ydCBpbiB3aGljaCBjYXNlIHRoZSBjYWxsZXIgaGFzIHRvIGZp
bGwgdGhlIHJlbWFpbmRlcgorICAgICAgICAvLyAgIHdpdGggJzAncy4KKyAgICAgICAgLy8gICBF
eGFtcGxlOiB0b0ZpeGVkKDAuMDAxLCA1KSBpcyBhbGxvd2VkIHRvIHJldHVybiBidWZmZXI9IjEi
LCBwb2ludD0tMi4KKyAgICAgICAgLy8gICBIYWxmd2F5IGNhc2VzIGFyZSByb3VuZGVkIHRvd2Fy
ZHMgKy8tSW5maW5pdHkgKGF3YXkgZnJvbSAwKS4gVGhlIGNhbGwKKyAgICAgICAgLy8gICB0b0Zp
eGVkKDAuMTUsIDIpIHRodXMgcmV0dXJucyBidWZmZXI9IjIiLCBwb2ludD0wLgorICAgICAgICAv
LyAgIFRoZSByZXR1cm5lZCBidWZmZXIgbWF5IGNvbnRhaW4gZGlnaXRzIHRoYXQgd291bGQgYmUg
dHJ1bmNhdGVkIGZyb20gdGhlCisgICAgICAgIC8vICAgc2hvcnRlc3QgcmVwcmVzZW50YXRpb24g
b2YgdGhlIGlucHV0LgorICAgICAgICAvLyAgLSBQUkVDSVNJT046IHByb2R1Y2VzICdyZXF1ZXN0
ZWRfZGlnaXRzJyB3aGVyZSB0aGUgZmlyc3QgZGlnaXQgaXMgbm90ICcwJy4KKyAgICAgICAgLy8g
ICBFdmVuIHRob3VnaCB0aGUgbGVuZ3RoIG9mIHByb2R1Y2VkIGRpZ2l0cyB1c3VhbGx5IGVxdWFs
cworICAgICAgICAvLyAgICdyZXF1ZXN0ZWRfZGlnaXRzJywgdGhlIGZ1bmN0aW9uIGlzIGFsbG93
ZWQgdG8gcmV0dXJuIGZld2VyIGRpZ2l0cywgaW4KKyAgICAgICAgLy8gICB3aGljaCBjYXNlIHRo
ZSBjYWxsZXIgaGFzIHRvIGZpbGwgdGhlIG1pc3NpbmcgZGlnaXRzIHdpdGggJzAncy4KKyAgICAg
ICAgLy8gICBIYWxmd2F5IGNhc2VzIGFyZSBhZ2FpbiByb3VuZGVkIGF3YXkgZnJvbSAwLgorICAg
ICAgICAvLyBEb3VibGVUb0FzY2lpIGV4cGVjdHMgdGhlIGdpdmVuIGJ1ZmZlciB0byBiZSBiaWcg
ZW5vdWdoIHRvIGhvbGQgYWxsCisgICAgICAgIC8vIGRpZ2l0cyBhbmQgYSB0ZXJtaW5hdGluZyBu
dWxsLWNoYXJhY3Rlci4gSW4gU0hPUlRFU1QtbW9kZSBpdCBleHBlY3RzIGEKKyAgICAgICAgLy8g
YnVmZmVyIG9mIGF0IGxlYXN0IGtCYXNlMTBNYXhpbWFsTGVuZ3RoICsgMS4gSW4gYWxsIG90aGVy
IG1vZGVzIHRoZQorICAgICAgICAvLyByZXF1ZXN0ZWRfZGlnaXRzIHBhcmFtZXRlciAoKyAxIGZv
ciB0aGUgbnVsbC1jaGFyYWN0ZXIpIGxpbWl0cyB0aGUgc2l6ZSBvZgorICAgICAgICAvLyB0aGUg
b3V0cHV0LiBUaGUgZ2l2ZW4gbGVuZ3RoIGlzIG9ubHkgdXNlZCBpbiBkZWJ1ZyBtb2RlIHRvIGVu
c3VyZSB0aGUKKyAgICAgICAgLy8gYnVmZmVyIGlzIGJpZyBlbm91Z2guCisgICAgICAgIHN0YXRp
YyB2b2lkIERvdWJsZVRvQXNjaWkoZG91YmxlIHYsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRHRvYU1vZGUgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGFyKiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ1
ZmZlcl9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCogc2ln
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGxlbmd0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHBvaW50KTsKKyAgICAgICAgCisgICAg
cHJpdmF0ZToKKyAgICAgICAgLy8gSWYgdGhlIHZhbHVlIGlzIGEgc3BlY2lhbCB2YWx1ZSAoTmFO
IG9yIEluZmluaXR5KSBjb25zdHJ1Y3RzIHRoZQorICAgICAgICAvLyBjb3JyZXNwb25kaW5nIHN0
cmluZyB1c2luZyB0aGUgY29uZmlndXJlZCBpbmZpbml0eS9uYW4tc3ltYm9sLgorICAgICAgICAv
LyBJZiBlaXRoZXIgb2YgdGhlbSBpcyBOVUxMIG9yIHRoZSB2YWx1ZSBpcyBub3Qgc3BlY2lhbCB0
aGVuIHRoZQorICAgICAgICAvLyBmdW5jdGlvbiByZXR1cm5zIGZhbHNlLgorICAgICAgICBib29s
IEhhbmRsZVNwZWNpYWxWYWx1ZXMoZG91YmxlIHZhbHVlLCBTdHJpbmdCdWlsZGVyKiByZXN1bHRf
YnVpbGRlcikgY29uc3Q7CisgICAgICAgIC8vIENvbnN0cnVjdHMgYW4gZXhwb25lbnRpYWwgcmVw
cmVzZW50YXRpb24gKGkuZS4gMS4yMzRlNTYpLgorICAgICAgICAvLyBUaGUgZ2l2ZW4gZXhwb25l
bnQgYXNzdW1lcyBhIGRlY2ltYWwgcG9pbnQgYWZ0ZXIgdGhlIGZpcnN0IGRlY2ltYWwgZGlnaXQu
CisgICAgICAgIHZvaWQgQ3JlYXRlRXhwb25lbnRpYWxSZXByZXNlbnRhdGlvbihjb25zdCBjaGFy
KiBkZWNpbWFsX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTdHJpbmdCdWlsZGVyKiByZXN1bHRfYnVpbGRlcikgY29uc3Q7CisgICAgICAg
IC8vIENyZWF0ZXMgYSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIChpLmUgMTIzNC41Njc4KS4KKyAg
ICAgICAgdm9pZCBDcmVhdGVEZWNpbWFsUmVwcmVzZW50YXRpb24oY29uc3QgY2hhciogZGVjaW1h
bF9kaWdpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBs
ZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZWNp
bWFsX3BvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
ZGlnaXRzX2FmdGVyX3BvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTdHJpbmdCdWlsZGVyKiByZXN1bHRfYnVpbGRlcikgY29uc3Q7CisgICAgICAgIAorICAg
ICAgICBjb25zdCBpbnQgZmxhZ3NfOworICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBpbmZpbml0
eV9zeW1ib2xfOworICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBuYW5fc3ltYm9sXzsKKyAgICAg
ICAgY29uc3QgY2hhciBleHBvbmVudF9jaGFyYWN0ZXJfOworICAgICAgICBjb25zdCBpbnQgZGVj
aW1hbF9pbl9zaG9ydGVzdF9sb3dfOworICAgICAgICBjb25zdCBpbnQgZGVjaW1hbF9pbl9zaG9y
dGVzdF9oaWdoXzsKKyAgICAgICAgY29uc3QgaW50IG1heF9sZWFkaW5nX3BhZGRpbmdfemVyb2Vz
X2luX3ByZWNpc2lvbl9tb2RlXzsKKyAgICAgICAgY29uc3QgaW50IG1heF90cmFpbGluZ19wYWRk
aW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZV87CisgICAgICAgIAorICAgICAgICBESVNBTExP
V19JTVBMSUNJVF9DT05TVFJVQ1RPUlMoRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXIpOworICAgIH07
CisgICAgCisgICAgCisgICAgY2xhc3MgU3RyaW5nVG9Eb3VibGVDb252ZXJ0ZXIgeworICAgIHB1
YmxpYzoKKyAgICAgICAgLy8gRW51bWVyYXRpb24gZm9yIGFsbG93aW5nIG9jdGFscyBhbmQgaWdu
b3JpbmcganVuayB3aGVuIGNvbnZlcnRpbmcKKyAgICAgICAgLy8gc3RyaW5ncyB0byBudW1iZXJz
LgorICAgICAgICBlbnVtIEZsYWdzIHsKKyAgICAgICAgICAgIE5PX0ZMQUdTID0gMCwKKyAgICAg
ICAgICAgIEFMTE9XX0hFWCA9IDEsCisgICAgICAgICAgICBBTExPV19PQ1RBTFMgPSAyLAorICAg
ICAgICAgICAgQUxMT1dfVFJBSUxJTkdfSlVOSyA9IDQsCisgICAgICAgICAgICBBTExPV19MRUFE
SU5HX1NQQUNFUyA9IDgsCisgICAgICAgICAgICBBTExPV19UUkFJTElOR19TUEFDRVMgPSAxNiwK
KyAgICAgICAgICAgIEFMTE9XX1NQQUNFU19BRlRFUl9TSUdOID0gMzIKKyAgICAgICAgfTsKKyAg
ICAgICAgCisgICAgICAgIC8vIEZsYWdzIHNob3VsZCBiZSBhIGJpdC1vciBjb21iaW5hdGlvbiBv
ZiB0aGUgcG9zc2libGUgRmxhZ3MtZW51bS4KKyAgICAgICAgLy8gIC0gTk9fRkxBR1M6IG5vIHNw
ZWNpYWwgZmxhZ3MuCisgICAgICAgIC8vICAtIEFMTE9XX0hFWDogcmVjb2duaXplcyB0aGUgcHJl
Zml4ICIweCIuIEhleCBudW1iZXJzIG1heSBvbmx5IGJlIGludGVnZXJzLgorICAgICAgICAvLyAg
ICAgIEV4OiBTdHJpbmdUb0RvdWJsZSgiMHgxMjM0IikgLT4gNDY2MC4wCisgICAgICAgIC8vICAg
ICAgICAgIEluIFN0cmluZ1RvRG91YmxlKCIweDEyMzQuNTYiKSB0aGUgY2hhcmFjdGVycyAiLjU2
IiBhcmUgdHJhaWxpbmcKKyAgICAgICAgLy8gICAgICAgICAganVuay4gVGhlIHJlc3VsdCBvZiB0
aGUgY2FsbCBpcyBoZW5jZSBkZXBlbmRlbnQgb24KKyAgICAgICAgLy8gICAgICAgICAgdGhlIEFM
TE9XX1RSQUlMSU5HX0pVTksgZmxhZyBhbmQvb3IgdGhlIGp1bmsgdmFsdWUuCisgICAgICAgIC8v
ICAgICAgV2l0aCB0aGlzIGZsYWcgIjB4IiBpcyBhIGp1bmstc3RyaW5nLiBFdmVuIHdpdGggQUxM
T1dfVFJBSUxJTkdfSlVOSywKKyAgICAgICAgLy8gICAgICB0aGUgc3RyaW5nIHdpbGwgbm90IGJl
IHBhcnNlZCBhcyAiMCIgZm9sbG93ZWQgYnkganVuay4KKyAgICAgICAgLy8KKyAgICAgICAgLy8g
IC0gQUxMT1dfT0NUQUxTOiByZWNvZ25pemVzIHRoZSBwcmVmaXggIjAiIGZvciBvY3RhbHM6Cisg
ICAgICAgIC8vICAgICAgSWYgYSBzZXF1ZW5jZSBvZiBvY3RhbCBkaWdpdHMgc3RhcnRzIHdpdGgg
JzAnLCB0aGVuIHRoZSBudW1iZXIgaXMKKyAgICAgICAgLy8gICAgICByZWFkIGFzIG9jdGFsIGlu
dGVnZXIuIE9jdGFsIG51bWJlcnMgbWF5IG9ubHkgYmUgaW50ZWdlcnMuCisgICAgICAgIC8vICAg
ICAgRXg6IFN0cmluZ1RvRG91YmxlKCIwMTIzNCIpIC0+IDY2OC4wCisgICAgICAgIC8vICAgICAg
ICAgIFN0cmluZ1RvRG91YmxlKCIwMTIzNDkiKSAtPiAxMjM0OS4wICAvLyBOb3QgYSBzZXF1ZW5j
ZSBvZiBvY3RhbAorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gZGlnaXRzLgorICAgICAgICAvLyAgICAgICAgICBJbiBTdHJpbmdUb0Rv
dWJsZSgiMDEyMzQuNTYiKSB0aGUgY2hhcmFjdGVycyAiLjU2IiBhcmUgdHJhaWxpbmcKKyAgICAg
ICAgLy8gICAgICAgICAganVuay4gVGhlIHJlc3VsdCBvZiB0aGUgY2FsbCBpcyBoZW5jZSBkZXBl
bmRlbnQgb24KKyAgICAgICAgLy8gICAgICAgICAgdGhlIEFMTE9XX1RSQUlMSU5HX0pVTksgZmxh
ZyBhbmQvb3IgdGhlIGp1bmsgdmFsdWUuCisgICAgICAgIC8vICAgICAgICAgIEluIFN0cmluZ1Rv
RG91YmxlKCIwMTIzNGU1NiIpIHRoZSBjaGFyYWN0ZXJzICJlNTYiIGFyZSB0cmFpbGluZworICAg
ICAgICAvLyAgICAgICAgICBqdW5rLCB0b28uCisgICAgICAgIC8vICAtIEFMTE9XX1RSQUlMSU5H
X0pVTks6IGlnbm9yZSB0cmFpbGluZyBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBwYXJ0IG9mCisg
ICAgICAgIC8vICAgICAgYSBkb3VibGUgbGl0ZXJhbC4KKyAgICAgICAgLy8gIC0gQUxMT1dfTEVB
RElOR19TUEFDRVM6IHNraXAgb3ZlciBsZWFkaW5nIHNwYWNlcy4KKyAgICAgICAgLy8gIC0gQUxM
T1dfVFJBSUxJTkdfU1BBQ0VTOiBpZ25vcmUgdHJhaWxpbmcgc3BhY2VzLgorICAgICAgICAvLyAg
LSBBTExPV19TUEFDRVNfQUZURVJfU0lHTjogaWdub3JlIHNwYWNlcyBhZnRlciB0aGUgc2lnbi4K
KyAgICAgICAgLy8gICAgICAgRXg6IFN0cmluZ1RvRG91YmxlKCItICAgMTIzLjIiKSAtPiAtMTIz
LjIuCisgICAgICAgIC8vICAgICAgICAgICBTdHJpbmdUb0RvdWJsZSgiKyAgIDEyMy4yIikgLT4g
MTIzLjIKKyAgICAgICAgLy8KKyAgICAgICAgLy8gZW1wdHlfc3RyaW5nX3ZhbHVlIGlzIHJldHVy
bmVkIHdoZW4gYW4gZW1wdHkgc3RyaW5nIGlzIGdpdmVuIGFzIGlucHV0LgorICAgICAgICAvLyBJ
ZiBBTExPV19MRUFESU5HX1NQQUNFUyBvciBBTExPV19UUkFJTElOR19TUEFDRVMgYXJlIHNldCwg
dGhlbiBhIHN0cmluZworICAgICAgICAvLyBjb250YWluaW5nIG9ubHkgc3BhY2VzIGlzIGNvbnZl
cnRlZCB0byB0aGUgJ2VtcHR5X3N0cmluZ192YWx1ZScsIHRvby4KKyAgICAgICAgLy8KKyAgICAg
ICAgLy8ganVua19zdHJpbmdfdmFsdWUgaXMgcmV0dXJuZWQgd2hlbgorICAgICAgICAvLyAgYSkg
QUxMT1dfVFJBSUxJTkdfSlVOSyBpcyBub3Qgc2V0LCBhbmQgYSBqdW5rIGNoYXJhY3RlciAoYSBj
aGFyYWN0ZXIgbm90CisgICAgICAgIC8vICAgICBwYXJ0IG9mIGEgZG91YmxlLWxpdGVyYWwpIGlz
IGZvdW5kLgorICAgICAgICAvLyAgYikgQUxMT1dfVFJBSUxJTkdfSlVOSyBpcyBzZXQsIGJ1dCB0
aGUgc3RyaW5nIGRvZXMgbm90IHN0YXJ0IHdpdGggYQorICAgICAgICAvLyAgICAgZG91YmxlIGxp
dGVyYWwuCisgICAgICAgIC8vCisgICAgICAgIC8vIGluZmluaXR5X3N5bWJvbCBhbmQgbmFuX3N5
bWJvbCBhcmUgc3RyaW5ncyB0aGF0IGFyZSB1c2VkIHRvIGRldGVjdAorICAgICAgICAvLyBpbnB1
dHMgdGhhdCByZXByZXNlbnQgaW5maW5pdHkgYW5kIE5hTi4gVGhleSBjYW4gYmUgbnVsbCwgaW4g
d2hpY2ggY2FzZQorICAgICAgICAvLyB0aGV5IGFyZSBpZ25vcmVkLgorICAgICAgICAvLyBUaGUg
Y29udmVyc2lvbiByb3V0aW5lIGZpcnN0IHJlYWRzIGFueSBwb3NzaWJsZSBzaWducy4gVGhlbiBp
dCBjb21wYXJlcyB0aGUKKyAgICAgICAgLy8gZm9sbG93aW5nIGNoYXJhY3RlciBvZiB0aGUgaW5w
dXQtc3RyaW5nIHdpdGggdGhlIGZpcnN0IGNoYXJhY3RlciBvZgorICAgICAgICAvLyB0aGUgaW5m
aW5pdHksIGFuZCBuYW4tc3ltYm9sLiBJZiBlaXRoZXIgbWF0Y2hlcywgdGhlIGZ1bmN0aW9uIGFz
c3VtZXMsIHRoYXQKKyAgICAgICAgLy8gYSBtYXRjaCBoYXMgYmVlbiBmb3VuZCwgYW5kIGV4cGVj
dHMgdGhlIGZvbGxvd2luZyBpbnB1dCBjaGFyYWN0ZXJzIHRvIG1hdGNoCisgICAgICAgIC8vIHRo
ZSByZW1haW5pbmcgY2hhcmFjdGVycyBvZiB0aGUgc3BlY2lhbC12YWx1ZSBzeW1ib2wuCisgICAg
ICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9ucyBhcHBseSB0
byBzcGVjaWFsLXZhbHVlIHN5bWJvbHM6CisgICAgICAgIC8vICAtIHRoZXkgbXVzdCBub3Qgc3Rh
cnQgd2l0aCBzaWducyAoJysnLCBvciAnLScpLAorICAgICAgICAvLyAgLSB0aGV5IG11c3Qgbm90
IGhhdmUgdGhlIHNhbWUgZmlyc3QgY2hhcmFjdGVyLgorICAgICAgICAvLyAgLSB0aGV5IG11c3Qg
bm90IHN0YXJ0IHdpdGggZGlnaXRzLgorICAgICAgICAvLworICAgICAgICAvLyBFeGFtcGxlczoK
KyAgICAgICAgLy8gIGZsYWdzID0gQUxMT1dfSEVYIHwgQUxMT1dfVFJBSUxJTkdfSlVOSywKKyAg
ICAgICAgLy8gIGVtcHR5X3N0cmluZ192YWx1ZSA9IDAuMCwKKyAgICAgICAgLy8gIGp1bmtfc3Ry
aW5nX3ZhbHVlID0gTmFOLAorICAgICAgICAvLyAgaW5maW5pdHlfc3ltYm9sID0gImluZmluaXR5
IiwKKyAgICAgICAgLy8gIG5hbl9zeW1ib2wgPSAibmFuIjoKKyAgICAgICAgLy8gICAgU3RyaW5n
VG9Eb3VibGUoIjB4MTIzNCIpIC0+IDQ2NjAuMC4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3Vi
bGUoIjB4MTIzNEsiKSAtPiA0NjYwLjAuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIi
KSAtPiAwLjAgIC8vIGVtcHR5X3N0cmluZ192YWx1ZS4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9E
b3VibGUoIiAiKSAtPiBOYU4gIC8vIGp1bmtfc3RyaW5nX3ZhbHVlLgorICAgICAgICAvLyAgICBT
dHJpbmdUb0RvdWJsZSgiIDEiKSAtPiBOYU4gIC8vIGp1bmtfc3RyaW5nX3ZhbHVlLgorICAgICAg
ICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMHgiKSAtPiBOYU4gIC8vIGp1bmtfc3RyaW5nX3ZhbHVl
LgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiLTEyMy40NSIpIC0+IC0xMjMuNDUuCisg
ICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCItLTEyMy40NSIpIC0+IE5hTiAgLy8ganVua19z
dHJpbmdfdmFsdWUuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIxMjNlNDUiKSAtPiAx
MjNlNDUuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIxMjNFNDUiKSAtPiAxMjNlNDUu
CisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIxMjNlKzQ1IikgLT4gMTIzZTQ1LgorICAg
ICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMTIzRS00NSIpIC0+IDEyM2UtNDUuCisgICAgICAg
IC8vICAgIFN0cmluZ1RvRG91YmxlKCIxMjNlIikgLT4gMTIzLjAgIC8vIHRyYWlsaW5nIGp1bmsg
aWdub3JlZC4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjEyM2UtIikgLT4gMTIzLjAg
IC8vIHRyYWlsaW5nIGp1bmsgaWdub3JlZC4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUo
IitOYU4iKSAtPiBOYU4gIC8vIE5hTiBzdHJpbmcgbGl0ZXJhbC4KKyAgICAgICAgLy8gICAgU3Ry
aW5nVG9Eb3VibGUoIi1pbmZpbml0eSIpIC0+IC1pbmYuICAvLyBpbmZpbml0eSBsaXRlcmFsLgor
ICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiSW5maW5pdHkiKSAtPiBOYU4gIC8vIGp1bmtf
c3RyaW5nX3ZhbHVlLgorICAgICAgICAvLworICAgICAgICAvLyAgZmxhZ3MgPSBBTExPV19PQ1RB
TCB8IEFMTE9XX0xFQURJTkdfU1BBQ0VTLAorICAgICAgICAvLyAgZW1wdHlfc3RyaW5nX3ZhbHVl
ID0gMC4wLAorICAgICAgICAvLyAganVua19zdHJpbmdfdmFsdWUgPSBOYU4sCisgICAgICAgIC8v
ICBpbmZpbml0eV9zeW1ib2wgPSBOVUxMLAorICAgICAgICAvLyAgbmFuX3N5bWJvbCA9IE5VTEw6
CisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIweDEyMzQiKSAtPiBOYU4gIC8vIGp1bmtf
c3RyaW5nX3ZhbHVlLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMDEyMzQiKSAtPiA2
NjguMC4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIiIpIC0+IDAuMCAgLy8gZW1wdHlf
c3RyaW5nX3ZhbHVlLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiICIpIC0+IDAuMCAg
Ly8gZW1wdHlfc3RyaW5nX3ZhbHVlLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiIDEi
KSAtPiAxLjAKKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjB4IikgLT4gTmFOICAvLyBq
dW5rX3N0cmluZ192YWx1ZS4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjAxMjNlNDUi
KSAtPiBOYU4gIC8vIGp1bmtfc3RyaW5nX3ZhbHVlLgorICAgICAgICAvLyAgICBTdHJpbmdUb0Rv
dWJsZSgiMDEyMzlFNDUiKSAtPiAxMjM5ZTQ1LgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJs
ZSgiLWluZmluaXR5IikgLT4gTmFOICAvLyBqdW5rX3N0cmluZ192YWx1ZS4KKyAgICAgICAgLy8g
ICAgU3RyaW5nVG9Eb3VibGUoIk5hTiIpIC0+IE5hTiAgLy8ganVua19zdHJpbmdfdmFsdWUuCisg
ICAgICAgIFN0cmluZ1RvRG91YmxlQ29udmVydGVyKGludCBmbGFncywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZG91YmxlIGVtcHR5X3N0cmluZ192YWx1ZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGp1bmtfc3RyaW5nX3ZhbHVlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBpbmZpbml0eV9zeW1ib2wsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbl9zeW1ib2wpCisgICAg
ICAgIDogZmxhZ3NfKGZsYWdzKSwKKyAgICAgICAgZW1wdHlfc3RyaW5nX3ZhbHVlXyhlbXB0eV9z
dHJpbmdfdmFsdWUpLAorICAgICAgICBqdW5rX3N0cmluZ192YWx1ZV8oanVua19zdHJpbmdfdmFs
dWUpLAorICAgICAgICBpbmZpbml0eV9zeW1ib2xfKGluZmluaXR5X3N5bWJvbCksCisgICAgICAg
IG5hbl9zeW1ib2xfKG5hbl9zeW1ib2wpIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Ly8gUGVyZm9ybXMgdGhlIGNvbnZlcnNpb24uCisgICAgICAgIC8vIFRoZSBvdXRwdXQgcGFyYW1l
dGVyICdwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCcgaXMgc2V0IHRvIHRoZSBudW1iZXIKKyAg
ICAgICAgLy8gb2YgY2hhcmFjdGVycyB0aGF0IGhhdmUgYmVlbiBwcm9jZXNzZWQgdG8gcmVhZCB0
aGUgbnVtYmVyLgorICAgICAgICAvLyBTcGFjZXMgdGhhbiBhcmUgcHJvY2Vzc2VkIHdpdGggQUxM
T1dfe0xFQURJTkd8VFJBSUxJTkd9X1NQQUNFUyBhcmUgaW5jbHVkZWQKKyAgICAgICAgLy8gaW4g
dGhlICdwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCcuIFRyYWlsaW5nIGp1bmsgaXMgbmV2ZXIg
aW5jbHVkZWQuCisgICAgICAgIGRvdWJsZSBTdHJpbmdUb0RvdWJsZShjb25zdCBjaGFyKiBidWZm
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50KiBwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCk7Cisg
ICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IGludCBmbGFnc187CisgICAgICAg
IGNvbnN0IGRvdWJsZSBlbXB0eV9zdHJpbmdfdmFsdWVfOworICAgICAgICBjb25zdCBkb3VibGUg
anVua19zdHJpbmdfdmFsdWVfOworICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBpbmZpbml0eV9z
eW1ib2xfOworICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBuYW5fc3ltYm9sXzsKKyAgICAgICAg
CisgICAgICAgIERJU0FMTE9XX0lNUExJQ0lUX0NPTlNUUlVDVE9SUyhTdHJpbmdUb0RvdWJsZUNv
bnZlcnRlcik7CisgICAgfTsKKyAgICAKK30gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lv
bgorCisjZW5kaWYgIC8vIERPVUJMRV9DT05WRVJTSU9OX0RPVUJMRV9DT05WRVJTSU9OX0hfCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZG91YmxlLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZG91YmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjNkM2I0ZjA5
MWJlYTAwNDQxOGRmNDZkMjZjZjY5ZDM1NjNiYzc1NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kb3VibGUuaApAQCAtMCwwICsxLDI0NSBAQAorLy8g
Q29weXJpZ2h0IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlz
Y2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkCisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKy8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisv
LyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWZuZGVmIERPVUJMRV9DT05WRVJTSU9OX0RPVUJM
RV9IXworI2RlZmluZSBET1VCTEVfQ09OVkVSU0lPTl9ET1VCTEVfSF8KKworI2luY2x1ZGUgImRp
eS1mcC5oIgorCituYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIC8vIFdl
IGFzc3VtZSB0aGF0IGRvdWJsZXMgYW5kIHVpbnQ2NF90IGhhdmUgdGhlIHNhbWUgZW5kaWFubmVz
cy4KKyAgICBzdGF0aWMgdWludDY0X3QgZG91YmxlX3RvX3VpbnQ2NChkb3VibGUgZCkgeyByZXR1
cm4gQml0Q2FzdDx1aW50NjRfdD4oZCk7IH0KKyAgICBzdGF0aWMgZG91YmxlIHVpbnQ2NF90b19k
b3VibGUodWludDY0X3QgZDY0KSB7IHJldHVybiBCaXRDYXN0PGRvdWJsZT4oZDY0KTsgfQorICAg
IAorICAgIC8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIGRvdWJsZXMuCisgICAgY2xhc3MgRG91Ymxl
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBrU2lnbk1hc2sg
PSBVSU5UNjRfMlBBUlRfQygweDgwMDAwMDAwLCAwMDAwMDAwMCk7CisgICAgICAgIHN0YXRpYyBj
b25zdCB1aW50NjRfdCBrRXhwb25lbnRNYXNrID0gVUlOVDY0XzJQQVJUX0MoMHg3RkYwMDAwMCwg
MDAwMDAwMDApOworICAgICAgICBzdGF0aWMgY29uc3QgdWludDY0X3Qga1NpZ25pZmljYW5kTWFz
ayA9IFVJTlQ2NF8yUEFSVF9DKDB4MDAwRkZGRkYsIEZGRkZGRkZGKTsKKyAgICAgICAgc3RhdGlj
IGNvbnN0IHVpbnQ2NF90IGtIaWRkZW5CaXQgPSBVSU5UNjRfMlBBUlRfQygweDAwMTAwMDAwLCAw
MDAwMDAwMCk7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQga1BoeXNpY2FsU2lnbmlmaWNhbmRT
aXplID0gNTI7ICAvLyBFeGNsdWRlcyB0aGUgaGlkZGVuIGJpdC4KKyAgICAgICAgc3RhdGljIGNv
bnN0IGludCBrU2lnbmlmaWNhbmRTaXplID0gNTM7CisgICAgICAgIAorICAgICAgICBEb3VibGUo
KSA6IGQ2NF8oMCkge30KKyAgICAgICAgZXhwbGljaXQgRG91YmxlKGRvdWJsZSBkKSA6IGQ2NF8o
ZG91YmxlX3RvX3VpbnQ2NChkKSkge30KKyAgICAgICAgZXhwbGljaXQgRG91YmxlKHVpbnQ2NF90
IGQ2NCkgOiBkNjRfKGQ2NCkge30KKyAgICAgICAgZXhwbGljaXQgRG91YmxlKERpeUZwIGRpeV9m
cCkKKyAgICAgICAgOiBkNjRfKERpeUZwVG9VaW50NjQoZGl5X2ZwKSkge30KKyAgICAgICAgCisg
ICAgICAgIC8vIFRoZSB2YWx1ZSBlbmNvZGVkIGJ5IHRoaXMgRG91YmxlIG11c3QgYmUgZ3JlYXRl
ciBvciBlcXVhbCB0byArMC4wLgorICAgICAgICAvLyBJdCBtdXN0IG5vdCBiZSBzcGVjaWFsIChp
bmZpbml0eSwgb3IgTmFOKS4KKyAgICAgICAgRGl5RnAgQXNEaXlGcCgpIGNvbnN0IHsKKyAgICAg
ICAgICAgIEFTU0VSVChTaWduKCkgPiAwKTsKKyAgICAgICAgICAgIEFTU0VSVCghSXNTcGVjaWFs
KCkpOworICAgICAgICAgICAgcmV0dXJuIERpeUZwKFNpZ25pZmljYW5kKCksIEV4cG9uZW50KCkp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBUaGUgdmFsdWUgZW5jb2RlZCBieSB0
aGlzIERvdWJsZSBtdXN0IGJlIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiAwLgorICAgICAgICBEaXlG
cCBBc05vcm1hbGl6ZWREaXlGcCgpIGNvbnN0IHsKKyAgICAgICAgICAgIEFTU0VSVCh2YWx1ZSgp
ID4gMC4wKTsKKyAgICAgICAgICAgIHVpbnQ2NF90IGYgPSBTaWduaWZpY2FuZCgpOworICAgICAg
ICAgICAgaW50IGUgPSBFeHBvbmVudCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBU
aGUgY3VycmVudCBkb3VibGUgY291bGQgYmUgYSBkZW5vcm1hbC4KKyAgICAgICAgICAgIHdoaWxl
ICgoZiAmIGtIaWRkZW5CaXQpID09IDApIHsKKyAgICAgICAgICAgICAgICBmIDw8PSAxOworICAg
ICAgICAgICAgICAgIGUtLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIERvIHRoZSBm
aW5hbCBzaGlmdHMgaW4gb25lIGdvLgorICAgICAgICAgICAgZiA8PD0gRGl5RnA6OmtTaWduaWZp
Y2FuZFNpemUgLSBrU2lnbmlmaWNhbmRTaXplOworICAgICAgICAgICAgZSAtPSBEaXlGcDo6a1Np
Z25pZmljYW5kU2l6ZSAtIGtTaWduaWZpY2FuZFNpemU7CisgICAgICAgICAgICByZXR1cm4gRGl5
RnAoZiwgZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFJldHVybnMgdGhlIGRv
dWJsZSdzIGJpdCBhcyB1aW50NjQuCisgICAgICAgIHVpbnQ2NF90IEFzVWludDY0KCkgY29uc3Qg
eworICAgICAgICAgICAgcmV0dXJuIGQ2NF87CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IC8vIFJldHVybnMgdGhlIG5leHQgZ3JlYXRlciBkb3VibGUuIFJldHVybnMgK2luZmluaXR5IG9u
IGlucHV0ICtpbmZpbml0eS4KKyAgICAgICAgZG91YmxlIE5leHREb3VibGUoKSBjb25zdCB7Cisg
ICAgICAgICAgICBpZiAoZDY0XyA9PSBrSW5maW5pdHkpIHJldHVybiBEb3VibGUoa0luZmluaXR5
KS52YWx1ZSgpOworICAgICAgICAgICAgaWYgKFNpZ24oKSA8IDAgJiYgU2lnbmlmaWNhbmQoKSA9
PSAwKSB7CisgICAgICAgICAgICAgICAgLy8gLTAuMAorICAgICAgICAgICAgICAgIHJldHVybiAw
LjA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoU2lnbigpIDwgMCkgeworICAgICAg
ICAgICAgICAgIHJldHVybiBEb3VibGUoZDY0XyAtIDEpLnZhbHVlKCk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBEb3VibGUoZDY0XyArIDEpLnZhbHVlKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludCBFeHBvbmVu
dCgpIGNvbnN0IHsKKyAgICAgICAgICAgIGlmIChJc0Rlbm9ybWFsKCkpIHJldHVybiBrRGVub3Jt
YWxFeHBvbmVudDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdWludDY0X3QgZDY0ID0gQXNV
aW50NjQoKTsKKyAgICAgICAgICAgIGludCBiaWFzZWRfZSA9CisgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxpbnQ+KChkNjQgJiBrRXhwb25lbnRNYXNrKSA+PiBrUGh5c2ljYWxTaWduaWZpY2FuZFNp
emUpOworICAgICAgICAgICAgcmV0dXJuIGJpYXNlZF9lIC0ga0V4cG9uZW50QmlhczsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgdWludDY0X3QgU2lnbmlmaWNhbmQoKSBjb25zdCB7Cisg
ICAgICAgICAgICB1aW50NjRfdCBkNjQgPSBBc1VpbnQ2NCgpOworICAgICAgICAgICAgdWludDY0
X3Qgc2lnbmlmaWNhbmQgPSBkNjQgJiBrU2lnbmlmaWNhbmRNYXNrOworICAgICAgICAgICAgaWYg
KCFJc0Rlbm9ybWFsKCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2lnbmlmaWNhbmQgKyBr
SGlkZGVuQml0OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
c2lnbmlmaWNhbmQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZG91YmxlIGlzIGEgZGVub3JtYWwuCisgICAgICAgIGJv
b2wgSXNEZW5vcm1hbCgpIGNvbnN0IHsKKyAgICAgICAgICAgIHVpbnQ2NF90IGQ2NCA9IEFzVWlu
dDY0KCk7CisgICAgICAgICAgICByZXR1cm4gKGQ2NCAmIGtFeHBvbmVudE1hc2spID09IDA7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFdlIGNvbnNpZGVyIGRlbm9ybWFscyBub3Qg
dG8gYmUgc3BlY2lhbC4KKyAgICAgICAgLy8gSGVuY2Ugb25seSBJbmZpbml0eSBhbmQgTmFOIGFy
ZSBzcGVjaWFsLgorICAgICAgICBib29sIElzU3BlY2lhbCgpIGNvbnN0IHsKKyAgICAgICAgICAg
IHVpbnQ2NF90IGQ2NCA9IEFzVWludDY0KCk7CisgICAgICAgICAgICByZXR1cm4gKGQ2NCAmIGtF
eHBvbmVudE1hc2spID09IGtFeHBvbmVudE1hc2s7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGJvb2wgSXNOYW4oKSBjb25zdCB7CisgICAgICAgICAgICB1aW50NjRfdCBkNjQgPSBBc1Vp
bnQ2NCgpOworICAgICAgICAgICAgcmV0dXJuICgoZDY0ICYga0V4cG9uZW50TWFzaykgPT0ga0V4
cG9uZW50TWFzaykgJiYKKyAgICAgICAgICAgICgoZDY0ICYga1NpZ25pZmljYW5kTWFzaykgIT0g
MCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgSXNJbmZpbml0ZSgpIGNvbnN0
IHsKKyAgICAgICAgICAgIHVpbnQ2NF90IGQ2NCA9IEFzVWludDY0KCk7CisgICAgICAgICAgICBy
ZXR1cm4gKChkNjQgJiBrRXhwb25lbnRNYXNrKSA9PSBrRXhwb25lbnRNYXNrKSAmJgorICAgICAg
ICAgICAgKChkNjQgJiBrU2lnbmlmaWNhbmRNYXNrKSA9PSAwKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgaW50IFNpZ24oKSBjb25zdCB7CisgICAgICAgICAgICB1aW50NjRfdCBkNjQg
PSBBc1VpbnQ2NCgpOworICAgICAgICAgICAgcmV0dXJuIChkNjQgJiBrU2lnbk1hc2spID09IDA/
IDE6IC0xOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBQcmVjb25kaXRpb246IHRo
ZSB2YWx1ZSBlbmNvZGVkIGJ5IHRoaXMgRG91YmxlIG11c3QgYmUgZ3JlYXRlciBvciBlcXVhbAor
ICAgICAgICAvLyB0aGFuICswLjAuCisgICAgICAgIERpeUZwIFVwcGVyQm91bmRhcnkoKSBjb25z
dCB7CisgICAgICAgICAgICBBU1NFUlQoU2lnbigpID4gMCk7CisgICAgICAgICAgICByZXR1cm4g
RGl5RnAoU2lnbmlmaWNhbmQoKSAqIDIgKyAxLCBFeHBvbmVudCgpIC0gMSk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIC8vIENvbXB1dGVzIHRoZSB0d28gYm91bmRhcmllcyBvZiB0aGlz
LgorICAgICAgICAvLyBUaGUgYmlnZ2VyIGJvdW5kYXJ5IChtX3BsdXMpIGlzIG5vcm1hbGl6ZWQu
IFRoZSBsb3dlciBib3VuZGFyeSBoYXMgdGhlIHNhbWUKKyAgICAgICAgLy8gZXhwb25lbnQgYXMg
bV9wbHVzLgorICAgICAgICAvLyBQcmVjb25kaXRpb246IHRoZSB2YWx1ZSBlbmNvZGVkIGJ5IHRo
aXMgRG91YmxlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuCisgICAgICAgIHZvaWQgTm9ybWFsaXpl
ZEJvdW5kYXJpZXMoRGl5RnAqIG91dF9tX21pbnVzLCBEaXlGcCogb3V0X21fcGx1cykgY29uc3Qg
eworICAgICAgICAgICAgQVNTRVJUKHZhbHVlKCkgPiAwLjApOworICAgICAgICAgICAgRGl5RnAg
diA9IHRoaXMtPkFzRGl5RnAoKTsKKyAgICAgICAgICAgIGJvb2wgc2lnbmlmaWNhbmRfaXNfemVy
byA9ICh2LmYoKSA9PSBrSGlkZGVuQml0KTsKKyAgICAgICAgICAgIERpeUZwIG1fcGx1cyA9IERp
eUZwOjpOb3JtYWxpemUoRGl5RnAoKHYuZigpIDw8IDEpICsgMSwgdi5lKCkgLSAxKSk7CisgICAg
ICAgICAgICBEaXlGcCBtX21pbnVzOworICAgICAgICAgICAgaWYgKHNpZ25pZmljYW5kX2lzX3pl
cm8gJiYgdi5lKCkgIT0ga0Rlbm9ybWFsRXhwb25lbnQpIHsKKyAgICAgICAgICAgICAgICAvLyBU
aGUgYm91bmRhcnkgaXMgY2xvc2VyLiBUaGluayBvZiB2ID0gMTAwMGUxMCBhbmQgdi0gPSA5OTk5
ZTkuCisgICAgICAgICAgICAgICAgLy8gVGhlbiB0aGUgYm91bmRhcnkgKD09ICh2IC0gdi0pLzIp
IGlzIG5vdCBqdXN0IGF0IGEgZGlzdGFuY2Ugb2YgMWU5IGJ1dAorICAgICAgICAgICAgICAgIC8v
IGF0IGEgZGlzdGFuY2Ugb2YgMWU4LgorICAgICAgICAgICAgICAgIC8vIFRoZSBvbmx5IGV4Y2Vw
dGlvbiBpcyBmb3IgdGhlIHNtYWxsZXN0IG5vcm1hbDogdGhlIGxhcmdlc3QgZGVub3JtYWwgaXMK
KyAgICAgICAgICAgICAgICAvLyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBhcyBpdHMgc3VjY2Vzc29y
LgorICAgICAgICAgICAgICAgIC8vIE5vdGU6IGRlbm9ybWFscyBoYXZlIHRoZSBzYW1lIGV4cG9u
ZW50IGFzIHRoZSBzbWFsbGVzdCBub3JtYWxzLgorICAgICAgICAgICAgICAgIG1fbWludXMgPSBE
aXlGcCgodi5mKCkgPDwgMikgLSAxLCB2LmUoKSAtIDIpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBtX21pbnVzID0gRGl5RnAoKHYuZigpIDw8IDEpIC0gMSwgdi5lKCkg
LSAxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fbWludXMuc2V0X2YobV9taW51cy5m
KCkgPDwgKG1fbWludXMuZSgpIC0gbV9wbHVzLmUoKSkpOworICAgICAgICAgICAgbV9taW51cy5z
ZXRfZShtX3BsdXMuZSgpKTsKKyAgICAgICAgICAgICpvdXRfbV9wbHVzID0gbV9wbHVzOworICAg
ICAgICAgICAgKm91dF9tX21pbnVzID0gbV9taW51czsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgZG91YmxlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gdWludDY0X3RvX2RvdWJsZShkNjRf
KTsgfQorICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJucyB0aGUgc2lnbmlmaWNhbmQgc2l6ZSBm
b3IgYSBnaXZlbiBvcmRlciBvZiBtYWduaXR1ZGUuCisgICAgICAgIC8vIElmIHYgPSBmKjJeZSB3
aXRoIDJecC0xIDw9IGYgPD0gMl5wIHRoZW4gcCtlIGlzIHYncyBvcmRlciBvZiBtYWduaXR1ZGUu
CisgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIHNpZ25pZmlj
YW50IGJpbmFyeSBkaWdpdHMgdiB3aWxsIGhhdmUKKyAgICAgICAgLy8gb25jZSBpdCdzIGVuY29k
ZWQgaW50byBhIGRvdWJsZS4gSW4gYWxtb3N0IGFsbCBjYXNlcyB0aGlzIGlzIGVxdWFsIHRvCisg
ICAgICAgIC8vIGtTaWduaWZpY2FuZFNpemUuIFRoZSBvbmx5IGV4Y2VwdGlvbnMgYXJlIGRlbm9y
bWFscy4gVGhleSBzdGFydCB3aXRoCisgICAgICAgIC8vIGxlYWRpbmcgemVyb2VzIGFuZCB0aGVp
ciBlZmZlY3RpdmUgc2lnbmlmaWNhbmQtc2l6ZSBpcyBoZW5jZSBzbWFsbGVyLgorICAgICAgICBz
dGF0aWMgaW50IFNpZ25pZmljYW5kU2l6ZUZvck9yZGVyT2ZNYWduaXR1ZGUoaW50IG9yZGVyKSB7
CisgICAgICAgICAgICBpZiAob3JkZXIgPj0gKGtEZW5vcm1hbEV4cG9uZW50ICsga1NpZ25pZmlj
YW5kU2l6ZSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4ga1NpZ25pZmljYW5kU2l6ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvcmRlciA8PSBrRGVub3JtYWxFeHBvbmVudCkg
cmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gb3JkZXIgLSBrRGVub3JtYWxFeHBvbmVudDsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIGRvdWJsZSBJbmZpbml0eSgpIHsK
KyAgICAgICAgICAgIHJldHVybiBEb3VibGUoa0luZmluaXR5KS52YWx1ZSgpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBzdGF0aWMgZG91YmxlIE5hTigpIHsKKyAgICAgICAgICAgIHJl
dHVybiBEb3VibGUoa05hTikudmFsdWUoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2
YXRlOgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtFeHBvbmVudEJpYXMgPSAweDNGRiArIGtQ
aHlzaWNhbFNpZ25pZmljYW5kU2l6ZTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBrRGVub3Jt
YWxFeHBvbmVudCA9IC1rRXhwb25lbnRCaWFzICsgMTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBrTWF4RXhwb25lbnQgPSAweDdGRiAtIGtFeHBvbmVudEJpYXM7CisgICAgICAgIHN0YXRpYyBj
b25zdCB1aW50NjRfdCBrSW5maW5pdHkgPSBVSU5UNjRfMlBBUlRfQygweDdGRjAwMDAwLCAwMDAw
MDAwMCk7CisgICAgICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBrTmFOID0gVUlOVDY0XzJQQVJU
X0MoMHg3RkY4MDAwMCwgMDAwMDAwMDApOworICAgICAgICAKKyAgICAgICAgY29uc3QgdWludDY0
X3QgZDY0XzsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyB1aW50NjRfdCBEaXlGcFRvVWludDY0
KERpeUZwIGRpeV9mcCkgeworICAgICAgICAgICAgdWludDY0X3Qgc2lnbmlmaWNhbmQgPSBkaXlf
ZnAuZigpOworICAgICAgICAgICAgaW50IGV4cG9uZW50ID0gZGl5X2ZwLmUoKTsKKyAgICAgICAg
ICAgIHdoaWxlIChzaWduaWZpY2FuZCA+IGtIaWRkZW5CaXQgKyBrU2lnbmlmaWNhbmRNYXNrKSB7
CisgICAgICAgICAgICAgICAgc2lnbmlmaWNhbmQgPj49IDE7CisgICAgICAgICAgICAgICAgZXhw
b25lbnQrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChleHBvbmVudCA+PSBrTWF4
RXhwb25lbnQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4ga0luZmluaXR5OworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKGV4cG9uZW50IDwga0Rlbm9ybWFsRXhwb25lbnQpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdoaWxl
IChleHBvbmVudCA+IGtEZW5vcm1hbEV4cG9uZW50ICYmIChzaWduaWZpY2FuZCAmIGtIaWRkZW5C
aXQpID09IDApIHsKKyAgICAgICAgICAgICAgICBzaWduaWZpY2FuZCA8PD0gMTsKKyAgICAgICAg
ICAgICAgICBleHBvbmVudC0tOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdWludDY0X3Qg
Ymlhc2VkX2V4cG9uZW50OworICAgICAgICAgICAgaWYgKGV4cG9uZW50ID09IGtEZW5vcm1hbEV4
cG9uZW50ICYmIChzaWduaWZpY2FuZCAmIGtIaWRkZW5CaXQpID09IDApIHsKKyAgICAgICAgICAg
ICAgICBiaWFzZWRfZXhwb25lbnQgPSAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBiaWFzZWRfZXhwb25lbnQgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oZXhwb25lbnQg
KyBrRXhwb25lbnRCaWFzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAoc2ln
bmlmaWNhbmQgJiBrU2lnbmlmaWNhbmRNYXNrKSB8CisgICAgICAgICAgICAoYmlhc2VkX2V4cG9u
ZW50IDw8IGtQaHlzaWNhbFNpZ25pZmljYW5kU2l6ZSk7CisgICAgICAgIH0KKyAgICB9OworICAg
IAorfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCisKKyNlbmRpZiAgLy8gRE9VQkxF
X0NPTlZFUlNJT05fRE9VQkxFX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL2R0b2EvZmFzdC1kdG9hLmNjIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2Zh
c3QtZHRvYS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZDg2OGUwYjM4YTc1MzhlNWY5ZGE3MDVhOTlkMGFlZTIw
MjQ4ODAwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9h
L2Zhc3QtZHRvYS5jYwpAQCAtMCwwICsxLDczNSBAQAorLy8gQ29weXJpZ2h0IDIwMTAgdGhlIFY4
IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8v
CisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisjaW5jbHVkZSAiZmFzdC1kdG9hLmgiCisKKyNpbmNsdWRlICJjYWNoZWQtcG93ZXJzLmgi
CisjaW5jbHVkZSAiZGl5LWZwLmgiCisjaW5jbHVkZSAiZG91YmxlLmgiCisKK25hbWVzcGFjZSBk
b3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgLy8gVGhlIG1pbmltYWwgYW5kIG1heGltYWwg
dGFyZ2V0IGV4cG9uZW50IGRlZmluZSB0aGUgcmFuZ2Ugb2YgdydzIGJpbmFyeQorICAgIC8vIGV4
cG9uZW50LCB3aGVyZSAndycgaXMgdGhlIHJlc3VsdCBvZiBtdWx0aXBseWluZyB0aGUgaW5wdXQg
YnkgYSBjYWNoZWQgcG93ZXIKKyAgICAvLyBvZiB0ZW4uCisgICAgLy8KKyAgICAvLyBBIGRpZmZl
cmVudCByYW5nZSBtaWdodCBiZSBjaG9zZW4gb24gYSBkaWZmZXJlbnQgcGxhdGZvcm0sIHRvIG9w
dGltaXplIGRpZ2l0CisgICAgLy8gZ2VuZXJhdGlvbiwgYnV0IGEgc21hbGxlciByYW5nZSByZXF1
aXJlcyBtb3JlIHBvd2VycyBvZiB0ZW4gdG8gYmUgY2FjaGVkLgorICAgIHN0YXRpYyBjb25zdCBp
bnQga01pbmltYWxUYXJnZXRFeHBvbmVudCA9IC02MDsKKyAgICBzdGF0aWMgY29uc3QgaW50IGtN
YXhpbWFsVGFyZ2V0RXhwb25lbnQgPSAtMzI7CisgICAgCisgICAgCisgICAgLy8gQWRqdXN0cyB0
aGUgbGFzdCBkaWdpdCBvZiB0aGUgZ2VuZXJhdGVkIG51bWJlciwgYW5kIHNjcmVlbnMgb3V0IGdl
bmVyYXRlZAorICAgIC8vIHNvbHV0aW9ucyB0aGF0IG1heSBiZSBpbmFjY3VyYXRlLiBBIHNvbHV0
aW9uIG1heSBiZSBpbmFjY3VyYXRlIGlmIGl0IGlzCisgICAgLy8gb3V0c2lkZSB0aGUgc2FmZSBp
bnRlcnZhbCwgb3IgaWYgd2UgY2Fubm90IHByb3ZlIHRoYXQgaXQgaXMgY2xvc2VyIHRvIHRoZQor
ICAgIC8vIGlucHV0IHRoYW4gYSBuZWlnaGJvcmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2Ft
ZSBsZW5ndGguCisgICAgLy8KKyAgICAvLyBJbnB1dDogKiBidWZmZXIgY29udGFpbmluZyB0aGUg
ZGlnaXRzIG9mIHRvb19oaWdoIC8gMTBea2FwcGEKKyAgICAvLyAgICAgICAgKiB0aGUgYnVmZmVy
J3MgbGVuZ3RoCisgICAgLy8gICAgICAgICogZGlzdGFuY2VfdG9vX2hpZ2hfdyA9PSAodG9vX2hp
Z2ggLSB3KS5mKCkgKiB1bml0CisgICAgLy8gICAgICAgICogdW5zYWZlX2ludGVydmFsID09ICh0
b29faGlnaCAtIHRvb19sb3cpLmYoKSAqIHVuaXQKKyAgICAvLyAgICAgICAgKiByZXN0ID0gKHRv
b19oaWdoIC0gYnVmZmVyICogMTBea2FwcGEpLmYoKSAqIHVuaXQKKyAgICAvLyAgICAgICAgKiB0
ZW5fa2FwcGEgPSAxMF5rYXBwYSAqIHVuaXQKKyAgICAvLyAgICAgICAgKiB1bml0ID0gdGhlIGNv
bW1vbiBtdWx0aXBsaWVyCisgICAgLy8gT3V0cHV0OiByZXR1cm5zIHRydWUgaWYgdGhlIGJ1ZmZl
ciBpcyBndWFyYW50ZWVkIHRvIGNvbnRhaW4gdGhlIGNsb3Nlc3QKKyAgICAvLyAgICByZXByZXNl
bnRhYmxlIG51bWJlciB0byB0aGUgaW5wdXQuCisgICAgLy8gIE1vZGlmaWVzIHRoZSBnZW5lcmF0
ZWQgZGlnaXRzIGluIHRoZSBidWZmZXIgdG8gYXBwcm9hY2ggKHJvdW5kIHRvd2FyZHMpIHcuCisg
ICAgc3RhdGljIGJvb2wgUm91bmRXZWVkKFZlY3RvcjxjaGFyPiBidWZmZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVp
bnQ2NF90IGRpc3RhbmNlX3Rvb19oaWdoX3csCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVp
bnQ2NF90IHVuc2FmZV9pbnRlcnZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0
X3QgcmVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgdGVuX2thcHBhLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCB1bml0KSB7CisgICAgICAgIHVpbnQ2
NF90IHNtYWxsX2Rpc3RhbmNlID0gZGlzdGFuY2VfdG9vX2hpZ2hfdyAtIHVuaXQ7CisgICAgICAg
IHVpbnQ2NF90IGJpZ19kaXN0YW5jZSA9IGRpc3RhbmNlX3Rvb19oaWdoX3cgKyB1bml0OworICAg
ICAgICAvLyBMZXQgd19sb3cgID0gdG9vX2hpZ2ggLSBiaWdfZGlzdGFuY2UsIGFuZAorICAgICAg
ICAvLyAgICAgd19oaWdoID0gdG9vX2hpZ2ggLSBzbWFsbF9kaXN0YW5jZS4KKyAgICAgICAgLy8g
Tm90ZTogd19sb3cgPCB3IDwgd19oaWdoCisgICAgICAgIC8vCisgICAgICAgIC8vIFRoZSByZWFs
IHcgKCogdW5pdCkgbXVzdCBsaWUgc29tZXdoZXJlIGluc2lkZSB0aGUgaW50ZXJ2YWwKKyAgICAg
ICAgLy8gXXdfbG93OyB3X2hpZ2hbIChvZnRlbiB3cml0dGVuIGFzICIod19sb3c7IHdfaGlnaCki
KQorICAgICAgICAKKyAgICAgICAgLy8gQmFzaWNhbGx5IHRoZSBidWZmZXIgY3VycmVudGx5IGNv
bnRhaW5zIGEgbnVtYmVyIGluIHRoZSB1bnNhZmUgaW50ZXJ2YWwKKyAgICAgICAgLy8gXXRvb19s
b3c7IHRvb19oaWdoWyB3aXRoIHRvb19sb3cgPCB3IDwgdG9vX2hpZ2gKKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gIHRvb19oaWdoIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g
LSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAg
ICAgXnYgMSB1bml0ICAgICAgICAgICAgXiAgICAgIF4gICAgICAgICAgICAgICAgIF4gICAgICBe
CisgICAgICAgIC8vICBib3VuZGFyeV9oaWdoIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgLiAg
ICAgIC4gICAgICAgICAgICAgICAgIC4gICAgICAuCisgICAgICAgIC8vICAgICAgICAgICAgICAg
ICAgICAgXnYgMSB1bml0ICAgICAgICAgICAgLiAgICAgIC4gICAgICAgICAgICAgICAgIC4gICAg
ICAuCisgICAgICAgIC8vICAgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAg
KyAgLSAtICsgLSAtIC0gLSAtIC0gICAgIC4gICAgICAuCisgICAgICAgIC8vICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAgICAgIC4gICAgICAgICBeICAgICAgIC4g
ICAgICAuCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLiAgYmlnX2Rpc3RhbmNlICAuICAgICAgIC4gICAgICAuCisgICAgICAgIC8vICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAgICAgIC4gICAgICAgICAuICAgICAg
IC4gICAgcmVzdAorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtYWxs
X2Rpc3RhbmNlICAgICAuICAgICAgICAgLiAgICAgICAuICAgICAgLgorICAgICAgICAvLyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgICAgICAuICAgICAgICAgLiAg
ICAgICAuICAgICAgLgorICAgICAgICAvLyAgd19oaWdoIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAt
IC0gLSAtIC0gLSAtICAgICAuICAgICAgICAgLiAgICAgICAuICAgICAgLgorICAgICAgICAvLyAg
ICAgICAgICAgICAgICAgICAgIF52IDEgdW5pdCAgICAgICAgICAgICAgICAgICAuICAgICAgICAg
LiAgICAgICAuICAgICAgLgorICAgICAgICAvLyAgdyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tICAgICAuICAgICAgICAgLiAgICAgICAuICAgICAgLgorICAgICAgICAv
LyAgICAgICAgICAgICAgICAgICAgIF52IDEgdW5pdCAgICAgICAgICAgICAgICAgICB2ICAgICAg
ICAgLiAgICAgICAuICAgICAgLgorICAgICAgICAvLyAgd19sb3cgIC0gLSAtIC0gLSAtIC0gLSAt
IC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICAgICAgICAgLiAgICAgICAuICAgICAgLgorICAgICAg
ICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLiAgICAgICAuICAgICAgdgorICAgICAgICAvLyAgYnVmZmVyIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0KKyAg
ICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC4gICAgICAgLgorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2FmZV9pbnRlcnZhbCAgICAuCisgICAgICAgIC8vICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
ICAgICAgIC4KKyAgICAgICAgLy8gICAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g
LSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAgICAgLgorICAgICAgICAvLyAgICAgICAgICAgICAg
ICAgICAgIF52IDEgdW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuCisg
ICAgICAgIC8vICBib3VuZGFyeV9sb3cgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAg
ICAgICAgICAgICAgIHVuc2FmZV9pbnRlcnZhbAorICAgICAgICAvLyAgICAgICAgICAgICAgICAg
ICAgIF52IDEgdW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2CisgICAg
ICAgIC8vICB0b29fbG93ICAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g
LSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLQorICAgICAgICAvLworICAgICAgICAvLworICAgICAg
ICAvLyBOb3RlIHRoYXQgdGhlIHZhbHVlIG9mIGJ1ZmZlciBjb3VsZCBsaWUgYW55d2hlcmUgaW5z
aWRlIHRoZSByYW5nZSB0b29fbG93CisgICAgICAgIC8vIHRvIHRvb19oaWdoLgorICAgICAgICAv
LworICAgICAgICAvLyBib3VuZGFyeV9sb3csIGJvdW5kYXJ5X2hpZ2ggYW5kIHcgYXJlIGFwcHJv
eGltYXRpb25zIG9mIHRoZSByZWFsIGJvdW5kYXJpZXMKKyAgICAgICAgLy8gYW5kIHYgKHRoZSBp
bnB1dCBudW1iZXIpLiBUaGV5IGFyZSBndWFyYW50ZWVkIHRvIGJlIHByZWNpc2UgdXAgdG8gb25l
IHVuaXQuCisgICAgICAgIC8vIEluIGZhY3QgdGhlIGVycm9yIGlzIGd1YXJhbnRlZWQgdG8gYmUg
c3RyaWN0bHkgbGVzcyB0aGFuIG9uZSB1bml0LgorICAgICAgICAvLworICAgICAgICAvLyBBbnl0
aGluZyB0aGF0IGxpZXMgb3V0c2lkZSB0aGUgdW5zYWZlIGludGVydmFsIGlzIGd1YXJhbnRlZWQg
bm90IHRvIHJvdW5kCisgICAgICAgIC8vIHRvIHYgd2hlbiByZWFkIGFnYWluLgorICAgICAgICAv
LyBBbnl0aGluZyB0aGF0IGxpZXMgaW5zaWRlIHRoZSBzYWZlIGludGVydmFsIGlzIGd1YXJhbnRl
ZWQgdG8gcm91bmQgdG8gdgorICAgICAgICAvLyB3aGVuIHJlYWQgYWdhaW4uCisgICAgICAgIC8v
IElmIHRoZSBudW1iZXIgaW5zaWRlIHRoZSBidWZmZXIgbGllcyBpbnNpZGUgdGhlIHVuc2FmZSBp
bnRlcnZhbCBidXQgbm90CisgICAgICAgIC8vIGluc2lkZSB0aGUgc2FmZSBpbnRlcnZhbCB0aGVu
IHdlIHNpbXBseSBkbyBub3Qga25vdyBhbmQgYmFpbCBvdXQgKHJldHVybmluZworICAgICAgICAv
LyBmYWxzZSkuCisgICAgICAgIC8vCisgICAgICAgIC8vIFNpbWlsYXJseSB3ZSBoYXZlIHRvIHRh
a2UgaW50byBhY2NvdW50IHRoZSBpbXByZWNpc2lvbiBvZiAndycgd2hlbiBmaW5kaW5nCisgICAg
ICAgIC8vIHRoZSBjbG9zZXN0IHJlcHJlc2VudGF0aW9uIG9mICd3Jy4gSWYgd2UgaGF2ZSB0d28g
cG90ZW50aWFsCisgICAgICAgIC8vIHJlcHJlc2VudGF0aW9ucywgYW5kIG9uZSBpcyBjbG9zZXIg
dG8gYm90aCB3X2xvdyBhbmQgd19oaWdoLCB0aGVuIHdlIGtub3cKKyAgICAgICAgLy8gaXQgaXMg
Y2xvc2VyIHRvIHRoZSBhY3R1YWwgdmFsdWUgdi4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gQnkg
Z2VuZXJhdGluZyB0aGUgZGlnaXRzIG9mIHRvb19oaWdoIHdlIGdvdCB0aGUgbGFyZ2VzdCAoY2xv
c2VzdCB0bworICAgICAgICAvLyB0b29faGlnaCkgYnVmZmVyIHRoYXQgaXMgc3RpbGwgaW4gdGhl
IHVuc2FmZSBpbnRlcnZhbC4gSW4gdGhlIGNhc2Ugd2hlcmUKKyAgICAgICAgLy8gd19oaWdoIDwg
YnVmZmVyIDwgdG9vX2hpZ2ggd2UgdHJ5IHRvIGRlY3JlbWVudCB0aGUgYnVmZmVyLgorICAgICAg
ICAvLyBUaGlzIHdheSB0aGUgYnVmZmVyIGFwcHJvYWNoZXMgKHJvdW5kcyB0b3dhcmRzKSB3Lgor
ICAgICAgICAvLyBUaGVyZSBhcmUgMyBjb25kaXRpb25zIHRoYXQgc3RvcCB0aGUgZGVjcmVtZW50
YXRpb24gcHJvY2VzczoKKyAgICAgICAgLy8gICAxKSB0aGUgYnVmZmVyIGlzIGFscmVhZHkgYmVs
b3cgd19oaWdoCisgICAgICAgIC8vICAgMikgZGVjcmVtZW50aW5nIHRoZSBidWZmZXIgd291bGQg
bWFrZSBpdCBsZWF2ZSB0aGUgdW5zYWZlIGludGVydmFsCisgICAgICAgIC8vICAgMykgZGVjcmVt
ZW50aW5nIHRoZSBidWZmZXIgd291bGQgeWllbGQgYSBudW1iZXIgYmVsb3cgd19oaWdoIGFuZCBm
YXJ0aGVyCisgICAgICAgIC8vICAgICAgYXdheSB0aGFuIHRoZSBjdXJyZW50IG51bWJlci4gSW4g
b3RoZXIgd29yZHM6CisgICAgICAgIC8vICAgICAgICAgICAgICAoYnVmZmVyey0xfSA8IHdfaGln
aCkgJiYgd19oaWdoIC0gYnVmZmVyey0xfSA+IGJ1ZmZlciAtIHdfaGlnaAorICAgICAgICAvLyBJ
bnN0ZWFkIG9mIHVzaW5nIHRoZSBidWZmZXIgZGlyZWN0bHkgd2UgdXNlIGl0cyBkaXN0YW5jZSB0
byB0b29faGlnaC4KKyAgICAgICAgLy8gQ29uY2VwdHVhbGx5IHJlc3Qgfj0gdG9vX2hpZ2ggLSBi
dWZmZXIKKyAgICAgICAgLy8gV2UgbmVlZCB0byBkbyB0aGUgZm9sbG93aW5nIHRlc3RzIGluIHRo
aXMgb3JkZXIgdG8gYXZvaWQgb3Zlci0gYW5kCisgICAgICAgIC8vIHVuZGVyZmxvd3MuCisgICAg
ICAgIEFTU0VSVChyZXN0IDw9IHVuc2FmZV9pbnRlcnZhbCk7CisgICAgICAgIHdoaWxlIChyZXN0
IDwgc21hbGxfZGlzdGFuY2UgJiYgIC8vIE5lZ2F0ZWQgY29uZGl0aW9uIDEKKyAgICAgICAgICAg
ICAgIHVuc2FmZV9pbnRlcnZhbCAtIHJlc3QgPj0gdGVuX2thcHBhICYmICAvLyBOZWdhdGVkIGNv
bmRpdGlvbiAyCisgICAgICAgICAgICAgICAocmVzdCArIHRlbl9rYXBwYSA8IHNtYWxsX2Rpc3Rh
bmNlIHx8ICAvLyBidWZmZXJ7LTF9ID4gd19oaWdoCisgICAgICAgICAgICAgICAgc21hbGxfZGlz
dGFuY2UgLSByZXN0ID49IHJlc3QgKyB0ZW5fa2FwcGEgLSBzbWFsbF9kaXN0YW5jZSkpIHsKKyAg
ICAgICAgICAgICAgICAgICBidWZmZXJbbGVuZ3RoIC0gMV0tLTsKKyAgICAgICAgICAgICAgICAg
ICByZXN0ICs9IHRlbl9rYXBwYTsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IC8vIFdlIGhhdmUgYXBwcm9hY2hlZCB3KyBhcyBtdWNoIGFzIHBvc3NpYmxlLiBXZSBub3cgdGVz
dCBpZiBhcHByb2FjaGluZyB3LQorICAgICAgICAvLyB3b3VsZCByZXF1aXJlIGNoYW5naW5nIHRo
ZSBidWZmZXIuIElmIHllcywgdGhlbiB3ZSBoYXZlIHR3byBwb3NzaWJsZQorICAgICAgICAvLyBy
ZXByZXNlbnRhdGlvbnMgY2xvc2UgdG8gdywgYnV0IHdlIGNhbm5vdCBkZWNpZGUgd2hpY2ggb25l
IGlzIGNsb3Nlci4KKyAgICAgICAgaWYgKHJlc3QgPCBiaWdfZGlzdGFuY2UgJiYKKyAgICAgICAg
ICAgIHVuc2FmZV9pbnRlcnZhbCAtIHJlc3QgPj0gdGVuX2thcHBhICYmCisgICAgICAgICAgICAo
cmVzdCArIHRlbl9rYXBwYSA8IGJpZ19kaXN0YW5jZSB8fAorICAgICAgICAgICAgIGJpZ19kaXN0
YW5jZSAtIHJlc3QgPiByZXN0ICsgdGVuX2thcHBhIC0gYmlnX2Rpc3RhbmNlKSkgeworICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IC8vIFdlZWRpbmcgdGVzdC4KKyAgICAgICAgLy8gICBUaGUgc2FmZSBpbnRlcnZhbCBpcyBbdG9v
X2xvdyArIDIgdWxwOyB0b29faGlnaCAtIDIgdWxwXQorICAgICAgICAvLyAgIFNpbmNlIHRvb19s
b3cgPSB0b29faGlnaCAtIHVuc2FmZV9pbnRlcnZhbCB0aGlzIGlzIGVxdWl2YWxlbnQgdG8KKyAg
ICAgICAgLy8gICAgICBbdG9vX2hpZ2ggLSB1bnNhZmVfaW50ZXJ2YWwgKyA0IHVscDsgdG9vX2hp
Z2ggLSAyIHVscF0KKyAgICAgICAgLy8gICBDb25jZXB0dWFsbHkgd2UgaGF2ZTogcmVzdCB+PSB0
b29faGlnaCAtIGJ1ZmZlcgorICAgICAgICByZXR1cm4gKDIgKiB1bml0IDw9IHJlc3QpICYmIChy
ZXN0IDw9IHVuc2FmZV9pbnRlcnZhbCAtIDQgKiB1bml0KTsKKyAgICB9CisgICAgCisgICAgCisg
ICAgLy8gUm91bmRzIHRoZSBidWZmZXIgdXB3YXJkcyBpZiB0aGUgcmVzdWx0IGlzIGNsb3NlciB0
byB2IGJ5IHBvc3NpYmx5IGFkZGluZworICAgIC8vIDEgdG8gdGhlIGJ1ZmZlci4gSWYgdGhlIHBy
ZWNpc2lvbiBvZiB0aGUgY2FsY3VsYXRpb24gaXMgbm90IHN1ZmZpY2llbnQgdG8KKyAgICAvLyBy
b3VuZCBjb3JyZWN0bHksIHJldHVybiBmYWxzZS4KKyAgICAvLyBUaGUgcm91bmRpbmcgbWlnaHQg
c2hpZnQgdGhlIHdob2xlIGJ1ZmZlciBpbiB3aGljaCBjYXNlIHRoZSBrYXBwYSBpcworICAgIC8v
IGFkanVzdGVkLiBGb3IgZXhhbXBsZSAiOTkiLCBrYXBwYSA9IDMgbWlnaHQgYmVjb21lICIxMCIs
IGthcHBhID0gNC4KKyAgICAvLworICAgIC8vIElmIDIqcmVzdCA+IHRlbl9rYXBwYSB0aGVuIHRo
ZSBidWZmZXIgbmVlZHMgdG8gYmUgcm91bmQgdXAuCisgICAgLy8gcmVzdCBjYW4gaGF2ZSBhbiBl
cnJvciBvZiArLy0gMSB1bml0LiBUaGlzIGZ1bmN0aW9uIGFjY291bnRzIGZvciB0aGUKKyAgICAv
LyBpbXByZWNpc2lvbiBhbmQgcmV0dXJucyBmYWxzZSwgaWYgdGhlIHJvdW5kaW5nIGRpcmVjdGlv
biBjYW5ub3QgYmUKKyAgICAvLyB1bmFtYmlndW91c2x5IGRldGVybWluZWQuCisgICAgLy8KKyAg
ICAvLyBQcmVjb25kaXRpb246IHJlc3QgPCB0ZW5fa2FwcGEuCisgICAgc3RhdGljIGJvb2wgUm91
bmRXZWVkQ291bnRlZChWZWN0b3I8Y2hhcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVpbnQ2NF90IHJlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRf
dCB0ZW5fa2FwcGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCB1
bml0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBrYXBwYSkgeworICAg
ICAgICBBU1NFUlQocmVzdCA8IHRlbl9rYXBwYSk7CisgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcg
dGVzdHMgYXJlIGRvbmUgaW4gYSBzcGVjaWZpYyBvcmRlciB0byBhdm9pZCBvdmVyZmxvd3MuIFRo
ZXkKKyAgICAgICAgLy8gd2lsbCB3b3JrIGNvcnJlY3RseSB3aXRoIGFueSB1aW50NjQgdmFsdWVz
IG9mIHJlc3QgPCB0ZW5fa2FwcGEgYW5kIHVuaXQuCisgICAgICAgIC8vCisgICAgICAgIC8vIElm
IHRoZSB1bml0IGlzIHRvbyBiaWcsIHRoZW4gd2UgZG9uJ3Qga25vdyB3aGljaCB3YXkgdG8gcm91
bmQuIEZvciBleGFtcGxlCisgICAgICAgIC8vIGEgdW5pdCBvZiA1MCBtZWFucyB0aGF0IHRoZSBy
ZWFsIG51bWJlciBsaWVzIHdpdGhpbiByZXN0ICsvLSA1MC4gSWYKKyAgICAgICAgLy8gMTBea2Fw
cGEgPT0gNDAgdGhlbiB0aGVyZSBpcyBubyB3YXkgdG8gdGVsbCB3aGljaCB3YXkgdG8gcm91bmQu
CisgICAgICAgIGlmICh1bml0ID49IHRlbl9rYXBwYSkgcmV0dXJuIGZhbHNlOworICAgICAgICAv
LyBFdmVuIGlmIHVuaXQgaXMganVzdCBoYWxmIHRoZSBzaXplIG9mIDEwXmthcHBhIHdlIGFyZSBh
bHJlYWR5IGNvbXBsZXRlbHkKKyAgICAgICAgLy8gbG9zdC4gKEFuZCBhZnRlciB0aGUgcHJldmlv
dXMgdGVzdCB3ZSBrbm93IHRoYXQgdGhlIGV4cHJlc3Npb24gd2lsbCBub3QKKyAgICAgICAgLy8g
b3Zlci91bmRlcmZsb3cuKQorICAgICAgICBpZiAodGVuX2thcHBhIC0gdW5pdCA8PSB1bml0KSBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIElmIDIgKiAocmVzdCArIHVuaXQpIDw9IDEwXmthcHBh
IHdlIGNhbiBzYWZlbHkgcm91bmQgZG93bi4KKyAgICAgICAgaWYgKCh0ZW5fa2FwcGEgLSByZXN0
ID4gcmVzdCkgJiYgKHRlbl9rYXBwYSAtIDIgKiByZXN0ID49IDIgKiB1bml0KSkgeworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gSWYgMiAqIChyZXN0IC0g
dW5pdCkgPj0gMTBea2FwcGEsIHRoZW4gd2UgY2FuIHNhZmVseSByb3VuZCB1cC4KKyAgICAgICAg
aWYgKChyZXN0ID4gdW5pdCkgJiYgKHRlbl9rYXBwYSAtIChyZXN0IC0gdW5pdCkgPD0gKHJlc3Qg
LSB1bml0KSkpIHsKKyAgICAgICAgICAgIC8vIEluY3JlbWVudCB0aGUgbGFzdCBkaWdpdCByZWN1
cnNpdmVseSB1bnRpbCB3ZSBmaW5kIGEgbm9uICc5JyBkaWdpdC4KKyAgICAgICAgICAgIGJ1ZmZl
cltsZW5ndGggLSAxXSsrOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IGxlbmd0aCAtIDE7IGkg
PiAwOyAtLWkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYnVmZmVyW2ldICE9ICcwJyArIDEwKSBi
cmVhazsKKyAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSAnMCc7CisgICAgICAgICAgICAgICAg
YnVmZmVyW2kgLSAxXSsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gSWYgdGhlIGZp
cnN0IGRpZ2l0IGlzIG5vdyAnMCcrIDEwIHdlIGhhZCBhIGJ1ZmZlciB3aXRoIGFsbCAnOSdzLiBX
aXRoIHRoZQorICAgICAgICAgICAgLy8gZXhjZXB0aW9uIG9mIHRoZSBmaXJzdCBkaWdpdCBhbGwg
ZGlnaXRzIGFyZSBub3cgJzAnLiBTaW1wbHkgc3dpdGNoIHRoZQorICAgICAgICAgICAgLy8gZmly
c3QgZGlnaXQgdG8gJzEnIGFuZCBhZGp1c3QgdGhlIGthcHBhLiBFeGFtcGxlOiAiOTkiIGJlY29t
ZXMgIjEwIiBhbmQKKyAgICAgICAgICAgIC8vIHRoZSBwb3dlciAodGhlIGthcHBhKSBpcyBpbmNy
ZWFzZWQuCisgICAgICAgICAgICBpZiAoYnVmZmVyWzBdID09ICcwJyArIDEwKSB7CisgICAgICAg
ICAgICAgICAgYnVmZmVyWzBdID0gJzEnOworICAgICAgICAgICAgICAgICgqa2FwcGEpICs9IDE7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIAorICAgIHN0YXRpYyBjb25zdCB1
aW50MzJfdCBrVGVuNCA9IDEwMDAwOworICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBrVGVuNSA9
IDEwMDAwMDsKKyAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qga1RlbjYgPSAxMDAwMDAwOworICAg
IHN0YXRpYyBjb25zdCB1aW50MzJfdCBrVGVuNyA9IDEwMDAwMDAwOworICAgIHN0YXRpYyBjb25z
dCB1aW50MzJfdCBrVGVuOCA9IDEwMDAwMDAwMDsKKyAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qg
a1RlbjkgPSAxMDAwMDAwMDAwOworICAgIAorICAgIC8vIFJldHVybnMgdGhlIGJpZ2dlc3QgcG93
ZXIgb2YgdGVuIHRoYXQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbgorICAgIC8v
IG51bWJlci4gV2UgZnVydGhlcm1vcmUgcmVjZWl2ZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgYml0
cyAnbnVtYmVyJyBoYXMuCisgICAgLy8gSWYgbnVtYmVyX2JpdHMgPT0gMCB0aGVuIDBeLTEgaXMg
cmV0dXJuZWQKKyAgICAvLyBUaGUgbnVtYmVyIG9mIGJpdHMgbXVzdCBiZSA8PSAzMi4KKyAgICAv
LyBQcmVjb25kaXRpb246IG51bWJlciA8ICgxIDw8IChudW1iZXJfYml0cyArIDEpKS4KKyAgICBz
dGF0aWMgdm9pZCBCaWdnZXN0UG93ZXJUZW4odWludDMyX3QgbnVtYmVyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgbnVtYmVyX2JpdHMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVpbnQzMl90KiBwb3dlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50KiBleHBvbmVudCkgeworICAgICAgICBBU1NFUlQobnVtYmVyIDwgKDEgPDwgKG51
bWJlcl9iaXRzICsgMSkpKTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAobnVtYmVyX2JpdHMp
IHsKKyAgICAgICAgICAgIGNhc2UgMzI6CisgICAgICAgICAgICBjYXNlIDMxOgorICAgICAgICAg
ICAgY2FzZSAzMDoKKyAgICAgICAgICAgICAgICBpZiAoa1RlbjkgPD0gbnVtYmVyKSB7CisgICAg
ICAgICAgICAgICAgICAgICpwb3dlciA9IGtUZW45OworICAgICAgICAgICAgICAgICAgICAqZXhw
b25lbnQgPSA5OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
ICAvLyBlbHNlIGZhbGx0aHJvdWdoCisgICAgICAgICAgICBjYXNlIDI5OgorICAgICAgICAgICAg
Y2FzZSAyODoKKyAgICAgICAgICAgIGNhc2UgMjc6CisgICAgICAgICAgICAgICAgaWYgKGtUZW44
IDw9IG51bWJlcikgeworICAgICAgICAgICAgICAgICAgICAqcG93ZXIgPSBrVGVuODsKKyAgICAg
ICAgICAgICAgICAgICAgKmV4cG9uZW50ID0gODsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfSAgLy8gZWxzZSBmYWxsdGhyb3VnaAorICAgICAgICAgICAgY2Fz
ZSAyNjoKKyAgICAgICAgICAgIGNhc2UgMjU6CisgICAgICAgICAgICBjYXNlIDI0OgorICAgICAg
ICAgICAgICAgIGlmIChrVGVuNyA8PSBudW1iZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgKnBv
d2VyID0ga1Rlbjc7CisgICAgICAgICAgICAgICAgICAgICpleHBvbmVudCA9IDc7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gIC8vIGVsc2UgZmFsbHRocm91
Z2gKKyAgICAgICAgICAgIGNhc2UgMjM6CisgICAgICAgICAgICBjYXNlIDIyOgorICAgICAgICAg
ICAgY2FzZSAyMToKKyAgICAgICAgICAgIGNhc2UgMjA6CisgICAgICAgICAgICAgICAgaWYgKGtU
ZW42IDw9IG51bWJlcikgeworICAgICAgICAgICAgICAgICAgICAqcG93ZXIgPSBrVGVuNjsKKyAg
ICAgICAgICAgICAgICAgICAgKmV4cG9uZW50ID0gNjsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfSAgLy8gZWxzZSBmYWxsdGhyb3VnaAorICAgICAgICAgICAg
Y2FzZSAxOToKKyAgICAgICAgICAgIGNhc2UgMTg6CisgICAgICAgICAgICBjYXNlIDE3OgorICAg
ICAgICAgICAgICAgIGlmIChrVGVuNSA8PSBudW1iZXIpIHsKKyAgICAgICAgICAgICAgICAgICAg
KnBvd2VyID0ga1RlbjU7CisgICAgICAgICAgICAgICAgICAgICpleHBvbmVudCA9IDU7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gIC8vIGVsc2UgZmFsbHRo
cm91Z2gKKyAgICAgICAgICAgIGNhc2UgMTY6CisgICAgICAgICAgICBjYXNlIDE1OgorICAgICAg
ICAgICAgY2FzZSAxNDoKKyAgICAgICAgICAgICAgICBpZiAoa1RlbjQgPD0gbnVtYmVyKSB7Cisg
ICAgICAgICAgICAgICAgICAgICpwb3dlciA9IGtUZW40OworICAgICAgICAgICAgICAgICAgICAq
ZXhwb25lbnQgPSA0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9ICAvLyBlbHNlIGZhbGx0aHJvdWdoCisgICAgICAgICAgICBjYXNlIDEzOgorICAgICAgICAg
ICAgY2FzZSAxMjoKKyAgICAgICAgICAgIGNhc2UgMTE6CisgICAgICAgICAgICBjYXNlIDEwOgor
ICAgICAgICAgICAgICAgIGlmICgxMDAwIDw9IG51bWJlcikgeworICAgICAgICAgICAgICAgICAg
ICAqcG93ZXIgPSAxMDAwOworICAgICAgICAgICAgICAgICAgICAqZXhwb25lbnQgPSAzOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9ICAvLyBlbHNlIGZhbGx0
aHJvdWdoCisgICAgICAgICAgICBjYXNlIDk6CisgICAgICAgICAgICBjYXNlIDg6CisgICAgICAg
ICAgICBjYXNlIDc6CisgICAgICAgICAgICAgICAgaWYgKDEwMCA8PSBudW1iZXIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgKnBvd2VyID0gMTAwOworICAgICAgICAgICAgICAgICAgICAqZXhwb25l
bnQgPSAyOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9ICAv
LyBlbHNlIGZhbGx0aHJvdWdoCisgICAgICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICBjYXNl
IDU6CisgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgaWYgKDEwIDw9IG51bWJl
cikgeworICAgICAgICAgICAgICAgICAgICAqcG93ZXIgPSAxMDsKKyAgICAgICAgICAgICAgICAg
ICAgKmV4cG9uZW50ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfSAgLy8gZWxzZSBmYWxsdGhyb3VnaAorICAgICAgICAgICAgY2FzZSAzOgorICAgICAg
ICAgICAgY2FzZSAyOgorICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIGlmICgx
IDw9IG51bWJlcikgeworICAgICAgICAgICAgICAgICAgICAqcG93ZXIgPSAxOworICAgICAgICAg
ICAgICAgICAgICAqZXhwb25lbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9ICAvLyBlbHNlIGZhbGx0aHJvdWdoCisgICAgICAgICAgICBjYXNlIDA6
CisgICAgICAgICAgICAgICAgKnBvd2VyID0gMDsKKyAgICAgICAgICAgICAgICAqZXhwb25lbnQg
PSAtMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgLy8gRm9sbG93aW5nIGFzc2lnbm1lbnRzIGFyZSBoZXJlIHRvIHNpbGVuY2Ug
Y29tcGlsZXIgd2FybmluZ3MuCisgICAgICAgICAgICAgICAgKnBvd2VyID0gMDsKKyAgICAgICAg
ICAgICAgICAqZXhwb25lbnQgPSAwOworICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgLy8gR2VuZXJhdGVzIHRoZSBkaWdpdHMg
b2YgaW5wdXQgbnVtYmVyIHcuCisgICAgLy8gdyBpcyBhIGZsb2F0aW5nLXBvaW50IG51bWJlciAo
RGl5RnApLCBjb25zaXN0aW5nIG9mIGEgc2lnbmlmaWNhbmQgYW5kIGFuCisgICAgLy8gZXhwb25l
bnQuIEl0cyBleHBvbmVudCBpcyBib3VuZGVkIGJ5IGtNaW5pbWFsVGFyZ2V0RXhwb25lbnQgYW5k
CisgICAgLy8ga01heGltYWxUYXJnZXRFeHBvbmVudC4KKyAgICAvLyAgICAgICBIZW5jZSAtNjAg
PD0gdy5lKCkgPD0gLTMyLgorICAgIC8vCisgICAgLy8gUmV0dXJucyBmYWxzZSBpZiBpdCBmYWls
cywgaW4gd2hpY2ggY2FzZSB0aGUgZ2VuZXJhdGVkIGRpZ2l0cyBpbiB0aGUgYnVmZmVyCisgICAg
Ly8gc2hvdWxkIG5vdCBiZSB1c2VkLgorICAgIC8vIFByZWNvbmRpdGlvbnM6CisgICAgLy8gICog
bG93LCB3IGFuZCBoaWdoIGFyZSBjb3JyZWN0IHVwIHRvIDEgdWxwICh1bml0IGluIHRoZSBsYXN0
IHBsYWNlKS4gVGhhdAorICAgIC8vICAgIGlzLCB0aGVpciBlcnJvciBtdXN0IGJlIGxlc3MgdGhh
biBhIHVuaXQgb2YgdGhlaXIgbGFzdCBkaWdpdHMuCisgICAgLy8gICogbG93LmUoKSA9PSB3LmUo
KSA9PSBoaWdoLmUoKQorICAgIC8vICAqIGxvdyA8IHcgPCBoaWdoLCBhbmQgdGFraW5nIGludG8g
YWNjb3VudCB0aGVpciBlcnJvcjogbG93fiA8PSBoaWdofgorICAgIC8vICAqIGtNaW5pbWFsVGFy
Z2V0RXhwb25lbnQgPD0gdy5lKCkgPD0ga01heGltYWxUYXJnZXRFeHBvbmVudAorICAgIC8vIFBv
c3Rjb25kaXRpb25zOiByZXR1cm5zIGZhbHNlIGlmIHByb2NlZHVyZSBmYWlscy4KKyAgICAvLyAg
IG90aGVyd2lzZToKKyAgICAvLyAgICAgKiBidWZmZXIgaXMgbm90IG51bGwtdGVybWluYXRlZCwg
YnV0IGxlbiBjb250YWlucyB0aGUgbnVtYmVyIG9mIGRpZ2l0cy4KKyAgICAvLyAgICAgKiBidWZm
ZXIgY29udGFpbnMgdGhlIHNob3J0ZXN0IHBvc3NpYmxlIGRlY2ltYWwgZGlnaXQtc2VxdWVuY2UK
KyAgICAvLyAgICAgICBzdWNoIHRoYXQgTE9XIDwgYnVmZmVyICogMTBea2FwcGEgPCBISUdILCB3
aGVyZSBMT1cgYW5kIEhJR0ggYXJlIHRoZQorICAgIC8vICAgICAgIGNvcnJlY3QgdmFsdWVzIG9m
IGxvdyBhbmQgaGlnaCAod2l0aG91dCB0aGVpciBlcnJvcikuCisgICAgLy8gICAgICogaWYgbW9y
ZSB0aGFuIG9uZSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIGdpdmVzIHRoZSBtaW5pbWFsIG51bWJl
ciBvZgorICAgIC8vICAgICAgIGRlY2ltYWwgZGlnaXRzIHRoZW4gdGhlIG9uZSBjbG9zZXN0IHRv
IFcgKHdoZXJlIFcgaXMgdGhlIGNvcnJlY3QgdmFsdWUKKyAgICAvLyAgICAgICBvZiB3KSBpcyBj
aG9zZW4uCisgICAgLy8gUmVtYXJrOiB0aGlzIHByb2NlZHVyZSB0YWtlcyBpbnRvIGFjY291bnQg
dGhlIGltcHJlY2lzaW9uIG9mIGl0cyBpbnB1dAorICAgIC8vICAgbnVtYmVycy4gSWYgdGhlIHBy
ZWNpc2lvbiBpcyBub3QgZW5vdWdoIHRvIGd1YXJhbnRlZSBhbGwgdGhlIHBvc3Rjb25kaXRpb25z
CisgICAgLy8gICB0aGVuIGZhbHNlIGlzIHJldHVybmVkLiBUaGlzIHVzdWFsbHkgaGFwcGVucyBy
YXJlbHkgKH4wLjUlKS4KKyAgICAvLworICAgIC8vIFNheSwgZm9yIHRoZSBzYWtlIG9mIGV4YW1w
bGUsIHRoYXQKKyAgICAvLyAgIHcuZSgpID09IC00OCwgYW5kIHcuZigpID09IDB4MTIzNDU2Nzg5
MGFiY2RlZgorICAgIC8vIHcncyB2YWx1ZSBjYW4gYmUgY29tcHV0ZWQgYnkgdy5mKCkgKiAyXncu
ZSgpCisgICAgLy8gV2UgY2FuIG9idGFpbiB3J3MgaW50ZWdyYWwgZGlnaXRzIGJ5IHNpbXBseSBz
aGlmdGluZyB3LmYoKSBieSAtdy5lKCkuCisgICAgLy8gIC0+IHcncyBpbnRlZ3JhbCBwYXJ0IGlz
IDB4MTIzNAorICAgIC8vICB3J3MgZnJhY3Rpb25hbCBwYXJ0IGlzIHRoZXJlZm9yZSAweDU2Nzg5
MGFiY2RlZi4KKyAgICAvLyBQcmludGluZyB3J3MgaW50ZWdyYWwgcGFydCBpcyBlYXN5IChzaW1w
bHkgcHJpbnQgMHgxMjM0IGluIGRlY2ltYWwpLgorICAgIC8vIEluIG9yZGVyIHRvIHByaW50IGl0
cyBmcmFjdGlvbiB3ZSByZXBlYXRlZGx5IG11bHRpcGx5IHRoZSBmcmFjdGlvbiBieSAxMCBhbmQK
KyAgICAvLyBnZXQgZWFjaCBkaWdpdC4gRXhhbXBsZSB0aGUgZmlyc3QgZGlnaXQgYWZ0ZXIgdGhl
IHBvaW50IHdvdWxkIGJlIGNvbXB1dGVkIGJ5CisgICAgLy8gICAoMHg1Njc4OTBhYmNkZWYgKiAx
MCkgPj4gNDguIC0+IDMKKyAgICAvLyBUaGUgd2hvbGUgdGhpbmcgYmVjb21lcyBzbGlnaHRseSBt
b3JlIGNvbXBsaWNhdGVkIGJlY2F1c2Ugd2Ugd2FudCB0byBzdG9wCisgICAgLy8gb25jZSB3ZSBo
YXZlIGVub3VnaCBkaWdpdHMuIFRoYXQgaXMsIG9uY2UgdGhlIGRpZ2l0cyBpbnNpZGUgdGhlIGJ1
ZmZlcgorICAgIC8vIHJlcHJlc2VudCAndycgd2UgY2FuIHN0b3AuIEV2ZXJ5dGhpbmcgaW5zaWRl
IHRoZSBpbnRlcnZhbCBsb3cgLSBoaWdoCisgICAgLy8gcmVwcmVzZW50cyB3LiBIb3dldmVyIHdl
IGhhdmUgdG8gcGF5IGF0dGVudGlvbiB0byBsb3csIGhpZ2ggYW5kIHcncworICAgIC8vIGltcHJl
Y2lzaW9uLgorICAgIHN0YXRpYyBib29sIERpZ2l0R2VuKERpeUZwIGxvdywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBEaXlGcCB3LAorICAgICAgICAgICAgICAgICAgICAgICAgIERpeUZwIGhp
Z2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQqIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQqIGthcHBhKSB7CisgICAgICAgIEFTU0VSVChsb3cuZSgpID09IHcuZSgpICYmIHcuZSgp
ID09IGhpZ2guZSgpKTsKKyAgICAgICAgQVNTRVJUKGxvdy5mKCkgKyAxIDw9IGhpZ2guZigpIC0g
MSk7CisgICAgICAgIEFTU0VSVChrTWluaW1hbFRhcmdldEV4cG9uZW50IDw9IHcuZSgpICYmIHcu
ZSgpIDw9IGtNYXhpbWFsVGFyZ2V0RXhwb25lbnQpOworICAgICAgICAvLyBsb3csIHcgYW5kIGhp
Z2ggYXJlIGltcHJlY2lzZSwgYnV0IGJ5IGxlc3MgdGhhbiBvbmUgdWxwICh1bml0IGluIHRoZSBs
YXN0CisgICAgICAgIC8vIHBsYWNlKS4KKyAgICAgICAgLy8gSWYgd2UgcmVtb3ZlIChyZXNwLiBh
ZGQpIDEgdWxwIGZyb20gbG93IChyZXNwLiBoaWdoKSB3ZSBhcmUgY2VydGFpbiB0aGF0CisgICAg
ICAgIC8vIHRoZSBuZXcgbnVtYmVycyBhcmUgb3V0c2lkZSBvZiB0aGUgaW50ZXJ2YWwgd2Ugd2Fu
dCB0aGUgZmluYWwKKyAgICAgICAgLy8gcmVwcmVzZW50YXRpb24gdG8gbGllIGluLgorICAgICAg
ICAvLyBJbnZlcnNlbHkgYWRkaW5nIChyZXNwLiByZW1vdmluZykgMSB1bHAgZnJvbSBsb3cgKHJl
c3AuIGhpZ2gpIHdvdWxkIHlpZWxkCisgICAgICAgIC8vIG51bWJlcnMgdGhhdCBhcmUgY2VydGFp
biB0byBsaWUgaW4gdGhlIGludGVydmFsLiBXZSB3aWxsIHVzZSB0aGlzIGZhY3QKKyAgICAgICAg
Ly8gbGF0ZXIgb24uCisgICAgICAgIC8vIFdlIHdpbGwgbm93IHN0YXJ0IGJ5IGdlbmVyYXRpbmcg
dGhlIGRpZ2l0cyB3aXRoaW4gdGhlIHVuY2VydGFpbgorICAgICAgICAvLyBpbnRlcnZhbC4gTGF0
ZXIgd2Ugd2lsbCB3ZWVkIG91dCByZXByZXNlbnRhdGlvbnMgdGhhdCBsaWUgb3V0c2lkZSB0aGUg
c2FmZQorICAgICAgICAvLyBpbnRlcnZhbCBhbmQgdGh1cyBfbWlnaHRfIGxpZSBvdXRzaWRlIHRo
ZSBjb3JyZWN0IGludGVydmFsLgorICAgICAgICB1aW50NjRfdCB1bml0ID0gMTsKKyAgICAgICAg
RGl5RnAgdG9vX2xvdyA9IERpeUZwKGxvdy5mKCkgLSB1bml0LCBsb3cuZSgpKTsKKyAgICAgICAg
RGl5RnAgdG9vX2hpZ2ggPSBEaXlGcChoaWdoLmYoKSArIHVuaXQsIGhpZ2guZSgpKTsKKyAgICAg
ICAgLy8gdG9vX2xvdyBhbmQgdG9vX2hpZ2ggYXJlIGd1YXJhbnRlZWQgdG8gbGllIG91dHNpZGUg
dGhlIGludGVydmFsIHdlIHdhbnQgdGhlCisgICAgICAgIC8vIGdlbmVyYXRlZCBudW1iZXIgaW4u
CisgICAgICAgIERpeUZwIHVuc2FmZV9pbnRlcnZhbCA9IERpeUZwOjpNaW51cyh0b29faGlnaCwg
dG9vX2xvdyk7CisgICAgICAgIC8vIFdlIG5vdyBjdXQgdGhlIGlucHV0IG51bWJlciBpbnRvIHR3
byBwYXJ0czogdGhlIGludGVncmFsIGRpZ2l0cyBhbmQgdGhlCisgICAgICAgIC8vIGZyYWN0aW9u
YWxzLiBXZSB3aWxsIG5vdCB3cml0ZSBhbnkgZGVjaW1hbCBzZXBhcmF0b3IgdGhvdWdoLCBidXQg
YWRhcHQKKyAgICAgICAgLy8ga2FwcGEgaW5zdGVhZC4KKyAgICAgICAgLy8gUmVtaW5kZXI6IHdl
IGFyZSBjdXJyZW50bHkgY29tcHV0aW5nIHRoZSBkaWdpdHMgKHN0b3JlZCBpbnNpZGUgdGhlIGJ1
ZmZlcikKKyAgICAgICAgLy8gc3VjaCB0aGF0OiAgIHRvb19sb3cgPCBidWZmZXIgKiAxMF5rYXBw
YSA8IHRvb19oaWdoCisgICAgICAgIC8vIFdlIHVzZSB0b29faGlnaCBmb3IgdGhlIGRpZ2l0X2dl
bmVyYXRpb24gYW5kIHN0b3AgYXMgc29vbiBhcyBwb3NzaWJsZS4KKyAgICAgICAgLy8gSWYgd2Ug
c3RvcCBlYXJseSB3ZSBlZmZlY3RpdmVseSByb3VuZCBkb3duLgorICAgICAgICBEaXlGcCBvbmUg
PSBEaXlGcChzdGF0aWNfY2FzdDx1aW50NjRfdD4oMSkgPDwgLXcuZSgpLCB3LmUoKSk7CisgICAg
ICAgIC8vIERpdmlzaW9uIGJ5IG9uZSBpcyBhIHNoaWZ0LgorICAgICAgICB1aW50MzJfdCBpbnRl
Z3JhbHMgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4odG9vX2hpZ2guZigpID4+IC1vbmUuZSgpKTsK
KyAgICAgICAgLy8gTW9kdWxvIGJ5IG9uZSBpcyBhbiBhbmQuCisgICAgICAgIHVpbnQ2NF90IGZy
YWN0aW9uYWxzID0gdG9vX2hpZ2guZigpICYgKG9uZS5mKCkgLSAxKTsKKyAgICAgICAgdWludDMy
X3QgZGl2aXNvcjsKKyAgICAgICAgaW50IGRpdmlzb3JfZXhwb25lbnQ7CisgICAgICAgIEJpZ2dl
c3RQb3dlclRlbihpbnRlZ3JhbHMsIERpeUZwOjprU2lnbmlmaWNhbmRTaXplIC0gKC1vbmUuZSgp
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICZkaXZpc29yLCAmZGl2aXNvcl9leHBvbmVudCk7
CisgICAgICAgICprYXBwYSA9IGRpdmlzb3JfZXhwb25lbnQgKyAxOworICAgICAgICAqbGVuZ3Ro
ID0gMDsKKyAgICAgICAgLy8gTG9vcCBpbnZhcmlhbnQ6IGJ1ZmZlciA9IHRvb19oaWdoIC8gMTBe
a2FwcGEgIChpbnRlZ2VyIGRpdmlzaW9uKQorICAgICAgICAvLyBUaGUgaW52YXJpYW50IGhvbGRz
IGZvciB0aGUgZmlyc3QgaXRlcmF0aW9uOiBrYXBwYSBoYXMgYmVlbiBpbml0aWFsaXplZAorICAg
ICAgICAvLyB3aXRoIHRoZSBkaXZpc29yIGV4cG9uZW50ICsgMS4gQW5kIHRoZSBkaXZpc29yIGlz
IHRoZSBiaWdnZXN0IHBvd2VyIG9mIHRlbgorICAgICAgICAvLyB0aGF0IGlzIHNtYWxsZXIgdGhh
biBpbnRlZ3JhbHMuCisgICAgICAgIHdoaWxlICgqa2FwcGEgPiAwKSB7CisgICAgICAgICAgICBp
bnQgZGlnaXQgPSBpbnRlZ3JhbHMgLyBkaXZpc29yOworICAgICAgICAgICAgYnVmZmVyWypsZW5n
dGhdID0gJzAnICsgZGlnaXQ7CisgICAgICAgICAgICAoKmxlbmd0aCkrKzsKKyAgICAgICAgICAg
IGludGVncmFscyAlPSBkaXZpc29yOworICAgICAgICAgICAgKCprYXBwYSktLTsKKyAgICAgICAg
ICAgIC8vIE5vdGUgdGhhdCBrYXBwYSBub3cgZXF1YWxzIHRoZSBleHBvbmVudCBvZiB0aGUgZGl2
aXNvciBhbmQgdGhhdCB0aGUKKyAgICAgICAgICAgIC8vIGludmFyaWFudCB0aHVzIGhvbGRzIGFn
YWluLgorICAgICAgICAgICAgdWludDY0X3QgcmVzdCA9CisgICAgICAgICAgICAoc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KGludGVncmFscykgPDwgLW9uZS5lKCkpICsgZnJhY3Rpb25hbHM7CisgICAg
ICAgICAgICAvLyBJbnZhcmlhbnQ6IHRvb19oaWdoID0gYnVmZmVyICogMTBea2FwcGEgKyBEaXlG
cChyZXN0LCBvbmUuZSgpKQorICAgICAgICAgICAgLy8gUmVtaW5kZXI6IHVuc2FmZV9pbnRlcnZh
bC5lKCkgPT0gb25lLmUoKQorICAgICAgICAgICAgaWYgKHJlc3QgPCB1bnNhZmVfaW50ZXJ2YWwu
ZigpKSB7CisgICAgICAgICAgICAgICAgLy8gUm91bmRpbmcgZG93biAoYnkgbm90IGVtaXR0aW5n
IHRoZSByZW1haW5pbmcgZGlnaXRzKSB5aWVsZHMgYSBudW1iZXIKKyAgICAgICAgICAgICAgICAv
LyB0aGF0IGxpZXMgd2l0aGluIHRoZSB1bnNhZmUgaW50ZXJ2YWwuCisgICAgICAgICAgICAgICAg
cmV0dXJuIFJvdW5kV2VlZChidWZmZXIsICpsZW5ndGgsIERpeUZwOjpNaW51cyh0b29faGlnaCwg
dykuZigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zYWZlX2ludGVydmFs
LmYoKSwgcmVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PHVpbnQ2NF90PihkaXZpc29yKSA8PCAtb25lLmUoKSwgdW5pdCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBkaXZpc29yIC89IDEwOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAv
LyBUaGUgaW50ZWdyYWxzIGhhdmUgYmVlbiBnZW5lcmF0ZWQuIFdlIGFyZSBhdCB0aGUgcG9pbnQg
b2YgdGhlIGRlY2ltYWwKKyAgICAgICAgLy8gc2VwYXJhdG9yLiBJbiB0aGUgZm9sbG93aW5nIGxv
b3Agd2Ugc2ltcGx5IG11bHRpcGx5IHRoZSByZW1haW5pbmcgZGlnaXRzIGJ5CisgICAgICAgIC8v
IDEwIGFuZCBkaXZpZGUgYnkgb25lLiBXZSBqdXN0IG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0byBt
dWx0aXBseSBhc3NvY2lhdGVkCisgICAgICAgIC8vIGRhdGEgKGxpa2UgdGhlIGludGVydmFsIG9y
ICd1bml0JyksIHRvby4KKyAgICAgICAgLy8gTm90ZSB0aGF0IHRoZSBtdWx0aXBsaWNhdGlvbiBi
eSAxMCBkb2VzIG5vdCBvdmVyZmxvdywgYmVjYXVzZSB3LmUgPj0gLTYwCisgICAgICAgIC8vIGFu
ZCB0aHVzIG9uZS5lID49IC02MC4KKyAgICAgICAgQVNTRVJUKG9uZS5lKCkgPj0gLTYwKTsKKyAg
ICAgICAgQVNTRVJUKGZyYWN0aW9uYWxzIDwgb25lLmYoKSk7CisgICAgICAgIEFTU0VSVChVSU5U
NjRfMlBBUlRfQygweEZGRkZGRkZGLCBGRkZGRkZGRikgLyAxMCA+PSBvbmUuZigpKTsKKyAgICAg
ICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIGZyYWN0aW9uYWxzICo9IDEwOworICAgICAg
ICAgICAgdW5pdCAqPSAxMDsKKyAgICAgICAgICAgIHVuc2FmZV9pbnRlcnZhbC5zZXRfZih1bnNh
ZmVfaW50ZXJ2YWwuZigpICogMTApOworICAgICAgICAgICAgLy8gSW50ZWdlciBkaXZpc2lvbiBi
eSBvbmUuCisgICAgICAgICAgICBpbnQgZGlnaXQgPSBzdGF0aWNfY2FzdDxpbnQ+KGZyYWN0aW9u
YWxzID4+IC1vbmUuZSgpKTsKKyAgICAgICAgICAgIGJ1ZmZlclsqbGVuZ3RoXSA9ICcwJyArIGRp
Z2l0OworICAgICAgICAgICAgKCpsZW5ndGgpKys7CisgICAgICAgICAgICBmcmFjdGlvbmFscyAm
PSBvbmUuZigpIC0gMTsgIC8vIE1vZHVsbyBieSBvbmUuCisgICAgICAgICAgICAoKmthcHBhKS0t
OworICAgICAgICAgICAgaWYgKGZyYWN0aW9uYWxzIDwgdW5zYWZlX2ludGVydmFsLmYoKSkgewor
ICAgICAgICAgICAgICAgIHJldHVybiBSb3VuZFdlZWQoYnVmZmVyLCAqbGVuZ3RoLCBEaXlGcDo6
TWludXModG9vX2hpZ2gsIHcpLmYoKSAqIHVuaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNhZmVfaW50ZXJ2YWwuZigpLCBmcmFjdGlvbmFscywgb25lLmYoKSwgdW5pdCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgCisgICAg
Ly8gR2VuZXJhdGVzIChhdCBtb3N0KSByZXF1ZXN0ZWRfZGlnaXRzIGRpZ2l0cyBvZiBpbnB1dCBu
dW1iZXIgdy4KKyAgICAvLyB3IGlzIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIChEaXlGcCksIGNv
bnNpc3Rpbmcgb2YgYSBzaWduaWZpY2FuZCBhbmQgYW4KKyAgICAvLyBleHBvbmVudC4gSXRzIGV4
cG9uZW50IGlzIGJvdW5kZWQgYnkga01pbmltYWxUYXJnZXRFeHBvbmVudCBhbmQKKyAgICAvLyBr
TWF4aW1hbFRhcmdldEV4cG9uZW50LgorICAgIC8vICAgICAgIEhlbmNlIC02MCA8PSB3LmUoKSA8
PSAtMzIuCisgICAgLy8KKyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIGl0IGZhaWxzLCBpbiB3aGlj
aCBjYXNlIHRoZSBnZW5lcmF0ZWQgZGlnaXRzIGluIHRoZSBidWZmZXIKKyAgICAvLyBzaG91bGQg
bm90IGJlIHVzZWQuCisgICAgLy8gUHJlY29uZGl0aW9uczoKKyAgICAvLyAgKiB3IGlzIGNvcnJl
Y3QgdXAgdG8gMSB1bHAgKHVuaXQgaW4gdGhlIGxhc3QgcGxhY2UpLiBUaGF0CisgICAgLy8gICAg
aXMsIGl0cyBlcnJvciBtdXN0IGJlIHN0cmljdGx5IGxlc3MgdGhhbiBhIHVuaXQgb2YgaXRzIGxh
c3QgZGlnaXQuCisgICAgLy8gICoga01pbmltYWxUYXJnZXRFeHBvbmVudCA8PSB3LmUoKSA8PSBr
TWF4aW1hbFRhcmdldEV4cG9uZW50CisgICAgLy8KKyAgICAvLyBQb3N0Y29uZGl0aW9uczogcmV0
dXJucyBmYWxzZSBpZiBwcm9jZWR1cmUgZmFpbHMuCisgICAgLy8gICBvdGhlcndpc2U6CisgICAg
Ly8gICAgICogYnVmZmVyIGlzIG5vdCBudWxsLXRlcm1pbmF0ZWQsIGJ1dCBsZW5ndGggY29udGFp
bnMgdGhlIG51bWJlciBvZgorICAgIC8vICAgICAgIGRpZ2l0cy4KKyAgICAvLyAgICAgKiB0aGUg
cmVwcmVzZW50YXRpb24gaW4gYnVmZmVyIGlzIHRoZSBtb3N0IHByZWNpc2UgcmVwcmVzZW50YXRp
b24gb2YKKyAgICAvLyAgICAgICByZXF1ZXN0ZWRfZGlnaXRzIGRpZ2l0cy4KKyAgICAvLyAgICAg
KiBidWZmZXIgY29udGFpbnMgYXQgbW9zdCByZXF1ZXN0ZWRfZGlnaXRzIGRpZ2l0cyBvZiB3LiBJ
ZiB0aGVyZSBhcmUgbGVzcworICAgIC8vICAgICAgIHRoYW4gcmVxdWVzdGVkX2RpZ2l0cyBkaWdp
dHMgdGhlbiBzb21lIHRyYWlsaW5nICcwJ3MgaGF2ZSBiZWVuIHJlbW92ZWQuCisgICAgLy8gICAg
ICoga2FwcGEgaXMgc3VjaCB0aGF0CisgICAgLy8gICAgICAgICAgICB3ID0gYnVmZmVyICogMTBe
a2FwcGEgKyBlcHMgd2l0aCB8ZXBzfCA8IDEwXmthcHBhIC8gMi4KKyAgICAvLworICAgIC8vIFJl
bWFyazogVGhpcyBwcm9jZWR1cmUgdGFrZXMgaW50byBhY2NvdW50IHRoZSBpbXByZWNpc2lvbiBv
ZiBpdHMgaW5wdXQKKyAgICAvLyAgIG51bWJlcnMuIElmIHRoZSBwcmVjaXNpb24gaXMgbm90IGVu
b3VnaCB0byBndWFyYW50ZWUgYWxsIHRoZSBwb3N0Y29uZGl0aW9ucworICAgIC8vICAgdGhlbiBm
YWxzZSBpcyByZXR1cm5lZC4gVGhpcyB1c3VhbGx5IGhhcHBlbnMgcmFyZWx5LCBidXQgdGhlIGZh
aWx1cmUtcmF0ZQorICAgIC8vICAgaW5jcmVhc2VzIHdpdGggaGlnaGVyIHJlcXVlc3RlZF9kaWdp
dHMuCisgICAgc3RhdGljIGJvb2wgRGlnaXRHZW5Db3VudGVkKERpeUZwIHcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCByZXF1ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQqIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50KiBrYXBwYSkgeworICAgICAgICBBU1NFUlQoa01pbmltYWxUYXJnZXRFeHBvbmVu
dCA8PSB3LmUoKSAmJiB3LmUoKSA8PSBrTWF4aW1hbFRhcmdldEV4cG9uZW50KTsKKyAgICAgICAg
QVNTRVJUKGtNaW5pbWFsVGFyZ2V0RXhwb25lbnQgPj0gLTYwKTsKKyAgICAgICAgQVNTRVJUKGtN
YXhpbWFsVGFyZ2V0RXhwb25lbnQgPD0gLTMyKTsKKyAgICAgICAgLy8gdyBpcyBhc3N1bWVkIHRv
IGhhdmUgYW4gZXJyb3IgbGVzcyB0aGFuIDEgdW5pdC4gV2hlbmV2ZXIgdyBpcyBzY2FsZWQgd2UK
KyAgICAgICAgLy8gYWxzbyBzY2FsZSBpdHMgZXJyb3IuCisgICAgICAgIHVpbnQ2NF90IHdfZXJy
b3IgPSAxOworICAgICAgICAvLyBXZSBjdXQgdGhlIGlucHV0IG51bWJlciBpbnRvIHR3byBwYXJ0
czogdGhlIGludGVncmFsIGRpZ2l0cyBhbmQgdGhlCisgICAgICAgIC8vIGZyYWN0aW9uYWwgZGln
aXRzLiBXZSBkb24ndCBlbWl0IGFueSBkZWNpbWFsIHNlcGFyYXRvciwgYnV0IGFkYXB0IGthcHBh
CisgICAgICAgIC8vIGluc3RlYWQuIEV4YW1wbGU6IGluc3RlYWQgb2Ygd3JpdGluZyAiMS4yIiB3
ZSBwdXQgIjEyIiBpbnRvIHRoZSBidWZmZXIgYW5kCisgICAgICAgIC8vIGluY3JlYXNlIGthcHBh
IGJ5IDEuCisgICAgICAgIERpeUZwIG9uZSA9IERpeUZwKHN0YXRpY19jYXN0PHVpbnQ2NF90Pigx
KSA8PCAtdy5lKCksIHcuZSgpKTsKKyAgICAgICAgLy8gRGl2aXNpb24gYnkgb25lIGlzIGEgc2hp
ZnQuCisgICAgICAgIHVpbnQzMl90IGludGVncmFscyA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pih3
LmYoKSA+PiAtb25lLmUoKSk7CisgICAgICAgIC8vIE1vZHVsbyBieSBvbmUgaXMgYW4gYW5kLgor
ICAgICAgICB1aW50NjRfdCBmcmFjdGlvbmFscyA9IHcuZigpICYgKG9uZS5mKCkgLSAxKTsKKyAg
ICAgICAgdWludDMyX3QgZGl2aXNvcjsKKyAgICAgICAgaW50IGRpdmlzb3JfZXhwb25lbnQ7Cisg
ICAgICAgIEJpZ2dlc3RQb3dlclRlbihpbnRlZ3JhbHMsIERpeUZwOjprU2lnbmlmaWNhbmRTaXpl
IC0gKC1vbmUuZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICZkaXZpc29yLCAmZGl2aXNv
cl9leHBvbmVudCk7CisgICAgICAgICprYXBwYSA9IGRpdmlzb3JfZXhwb25lbnQgKyAxOworICAg
ICAgICAqbGVuZ3RoID0gMDsKKyAgICAgICAgCisgICAgICAgIC8vIExvb3AgaW52YXJpYW50OiBi
dWZmZXIgPSB3IC8gMTBea2FwcGEgIChpbnRlZ2VyIGRpdmlzaW9uKQorICAgICAgICAvLyBUaGUg
aW52YXJpYW50IGhvbGRzIGZvciB0aGUgZmlyc3QgaXRlcmF0aW9uOiBrYXBwYSBoYXMgYmVlbiBp
bml0aWFsaXplZAorICAgICAgICAvLyB3aXRoIHRoZSBkaXZpc29yIGV4cG9uZW50ICsgMS4gQW5k
IHRoZSBkaXZpc29yIGlzIHRoZSBiaWdnZXN0IHBvd2VyIG9mIHRlbgorICAgICAgICAvLyB0aGF0
IGlzIHNtYWxsZXIgdGhhbiAnaW50ZWdyYWxzJy4KKyAgICAgICAgd2hpbGUgKCprYXBwYSA+IDAp
IHsKKyAgICAgICAgICAgIGludCBkaWdpdCA9IGludGVncmFscyAvIGRpdmlzb3I7CisgICAgICAg
ICAgICBidWZmZXJbKmxlbmd0aF0gPSAnMCcgKyBkaWdpdDsKKyAgICAgICAgICAgICgqbGVuZ3Ro
KSsrOworICAgICAgICAgICAgcmVxdWVzdGVkX2RpZ2l0cy0tOworICAgICAgICAgICAgaW50ZWdy
YWxzICU9IGRpdmlzb3I7CisgICAgICAgICAgICAoKmthcHBhKS0tOworICAgICAgICAgICAgLy8g
Tm90ZSB0aGF0IGthcHBhIG5vdyBlcXVhbHMgdGhlIGV4cG9uZW50IG9mIHRoZSBkaXZpc29yIGFu
ZCB0aGF0IHRoZQorICAgICAgICAgICAgLy8gaW52YXJpYW50IHRodXMgaG9sZHMgYWdhaW4uCisg
ICAgICAgICAgICBpZiAocmVxdWVzdGVkX2RpZ2l0cyA9PSAwKSBicmVhazsKKyAgICAgICAgICAg
IGRpdmlzb3IgLz0gMTA7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChyZXF1ZXN0
ZWRfZGlnaXRzID09IDApIHsKKyAgICAgICAgICAgIHVpbnQ2NF90IHJlc3QgPQorICAgICAgICAg
ICAgKHN0YXRpY19jYXN0PHVpbnQ2NF90PihpbnRlZ3JhbHMpIDw8IC1vbmUuZSgpKSArIGZyYWN0
aW9uYWxzOworICAgICAgICAgICAgcmV0dXJuIFJvdW5kV2VlZENvdW50ZWQoYnVmZmVyLCAqbGVu
Z3RoLCByZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KGRpdmlzb3IpIDw8IC1vbmUuZSgpLCB3X2Vycm9yLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAga2FwcGEpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICAvLyBUaGUgaW50ZWdyYWxzIGhhdmUgYmVlbiBnZW5lcmF0ZWQuIFdlIGFyZSBhdCB0aGUg
cG9pbnQgb2YgdGhlIGRlY2ltYWwKKyAgICAgICAgLy8gc2VwYXJhdG9yLiBJbiB0aGUgZm9sbG93
aW5nIGxvb3Agd2Ugc2ltcGx5IG11bHRpcGx5IHRoZSByZW1haW5pbmcgZGlnaXRzIGJ5CisgICAg
ICAgIC8vIDEwIGFuZCBkaXZpZGUgYnkgb25lLiBXZSBqdXN0IG5lZWQgdG8gcGF5IGF0dGVudGlv
biB0byBtdWx0aXBseSBhc3NvY2lhdGVkCisgICAgICAgIC8vIGRhdGEgKHRoZSAndW5pdCcpLCB0
b28uCisgICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgbXVsdGlwbGljYXRpb24gYnkgMTAgZG9lcyBu
b3Qgb3ZlcmZsb3csIGJlY2F1c2Ugdy5lID49IC02MAorICAgICAgICAvLyBhbmQgdGh1cyBvbmUu
ZSA+PSAtNjAuCisgICAgICAgIEFTU0VSVChvbmUuZSgpID49IC02MCk7CisgICAgICAgIEFTU0VS
VChmcmFjdGlvbmFscyA8IG9uZS5mKCkpOworICAgICAgICBBU1NFUlQoVUlOVDY0XzJQQVJUX0Mo
MHhGRkZGRkZGRiwgRkZGRkZGRkYpIC8gMTAgPj0gb25lLmYoKSk7CisgICAgICAgIHdoaWxlIChy
ZXF1ZXN0ZWRfZGlnaXRzID4gMCAmJiBmcmFjdGlvbmFscyA+IHdfZXJyb3IpIHsKKyAgICAgICAg
ICAgIGZyYWN0aW9uYWxzICo9IDEwOworICAgICAgICAgICAgd19lcnJvciAqPSAxMDsKKyAgICAg
ICAgICAgIC8vIEludGVnZXIgZGl2aXNpb24gYnkgb25lLgorICAgICAgICAgICAgaW50IGRpZ2l0
ID0gc3RhdGljX2Nhc3Q8aW50PihmcmFjdGlvbmFscyA+PiAtb25lLmUoKSk7CisgICAgICAgICAg
ICBidWZmZXJbKmxlbmd0aF0gPSAnMCcgKyBkaWdpdDsKKyAgICAgICAgICAgICgqbGVuZ3RoKSsr
OworICAgICAgICAgICAgcmVxdWVzdGVkX2RpZ2l0cy0tOworICAgICAgICAgICAgZnJhY3Rpb25h
bHMgJj0gb25lLmYoKSAtIDE7ICAvLyBNb2R1bG8gYnkgb25lLgorICAgICAgICAgICAgKCprYXBw
YSktLTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVxdWVzdGVkX2RpZ2l0cyAhPSAwKSByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBSb3VuZFdlZWRDb3VudGVkKGJ1ZmZlciwgKmxlbmd0
aCwgZnJhY3Rpb25hbHMsIG9uZS5mKCksIHdfZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGthcHBhKTsKKyAgICB9CisgICAgCisgICAgCisgICAgLy8gUHJvdmlkZXMgYSBk
ZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIHYuCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIGl0IHN1
Y2NlZWRzLCBvdGhlcndpc2UgdGhlIHJlc3VsdCBjYW5ub3QgYmUgdHJ1c3RlZC4KKyAgICAvLyBU
aGVyZSB3aWxsIGJlICpsZW5ndGggZGlnaXRzIGluc2lkZSB0aGUgYnVmZmVyIChub3QgbnVsbC10
ZXJtaW5hdGVkKS4KKyAgICAvLyBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHRoZW4KKyAg
ICAvLyAgICAgICAgdiA9PSAoZG91YmxlKSAoYnVmZmVyICogMTBeZGVjaW1hbF9leHBvbmVudCku
CisgICAgLy8gVGhlIGRpZ2l0cyBpbiB0aGUgYnVmZmVyIGFyZSB0aGUgc2hvcnRlc3QgcmVwcmVz
ZW50YXRpb24gcG9zc2libGU6IG5vCisgICAgLy8gMC4wOTk5OTk5OTk5OTk5OTk5OSBpbnN0ZWFk
IG9mIDAuMS4gVGhlIHNob3J0ZXIgcmVwcmVzZW50YXRpb24gd2lsbCBldmVuIGJlCisgICAgLy8g
Y2hvc2VuIGV2ZW4gaWYgdGhlIGxvbmdlciBvbmUgd291bGQgYmUgY2xvc2VyIHRvIHYuCisgICAg
Ly8gVGhlIGxhc3QgZGlnaXQgd2lsbCBiZSBjbG9zZXN0IHRvIHRoZSBhY3R1YWwgdi4gVGhhdCBp
cywgZXZlbiBpZiBzZXZlcmFsCisgICAgLy8gZGlnaXRzIG1pZ2h0IGNvcnJlY3RseSB5aWVsZCAn
dicgd2hlbiByZWFkIGFnYWluLCB0aGUgY2xvc2VzdCB3aWxsIGJlCisgICAgLy8gY29tcHV0ZWQu
CisgICAgc3RhdGljIGJvb2wgR3Jpc3UzKGRvdWJsZSB2LAorICAgICAgICAgICAgICAgICAgICAg
ICBWZWN0b3I8Y2hhcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGxlbmd0
aCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50KiBkZWNpbWFsX2V4cG9uZW50KSB7CisgICAg
ICAgIERpeUZwIHcgPSBEb3VibGUodikuQXNOb3JtYWxpemVkRGl5RnAoKTsKKyAgICAgICAgLy8g
Ym91bmRhcnlfbWludXMgYW5kIGJvdW5kYXJ5X3BsdXMgYXJlIHRoZSBib3VuZGFyaWVzIGJldHdl
ZW4gdiBhbmQgaXRzCisgICAgICAgIC8vIGNsb3Nlc3QgZmxvYXRpbmctcG9pbnQgbmVpZ2hib3Jz
LiBBbnkgbnVtYmVyIHN0cmljdGx5IGJldHdlZW4KKyAgICAgICAgLy8gYm91bmRhcnlfbWludXMg
YW5kIGJvdW5kYXJ5X3BsdXMgd2lsbCByb3VuZCB0byB2IHdoZW4gY29udmVydCB0byBhIGRvdWJs
ZS4KKyAgICAgICAgLy8gR3Jpc3UzIHdpbGwgbmV2ZXIgb3V0cHV0IHJlcHJlc2VudGF0aW9ucyB0
aGF0IGxpZSBleGFjdGx5IG9uIGEgYm91bmRhcnkuCisgICAgICAgIERpeUZwIGJvdW5kYXJ5X21p
bnVzLCBib3VuZGFyeV9wbHVzOworICAgICAgICBEb3VibGUodikuTm9ybWFsaXplZEJvdW5kYXJp
ZXMoJmJvdW5kYXJ5X21pbnVzLCAmYm91bmRhcnlfcGx1cyk7CisgICAgICAgIEFTU0VSVChib3Vu
ZGFyeV9wbHVzLmUoKSA9PSB3LmUoKSk7CisgICAgICAgIERpeUZwIHRlbl9tazsgIC8vIENhY2hl
ZCBwb3dlciBvZiB0ZW46IDEwXi1rCisgICAgICAgIGludCBtazsgICAgICAgIC8vIC1rCisgICAg
ICAgIGludCB0ZW5fbWtfbWluaW1hbF9iaW5hcnlfZXhwb25lbnQgPQorICAgICAgICBrTWluaW1h
bFRhcmdldEV4cG9uZW50IC0gKHcuZSgpICsgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUpOworICAg
ICAgICBpbnQgdGVuX21rX21heGltYWxfYmluYXJ5X2V4cG9uZW50ID0KKyAgICAgICAga01heGlt
YWxUYXJnZXRFeHBvbmVudCAtICh3LmUoKSArIERpeUZwOjprU2lnbmlmaWNhbmRTaXplKTsKKyAg
ICAgICAgUG93ZXJzT2ZUZW5DYWNoZTo6R2V0Q2FjaGVkUG93ZXJGb3JCaW5hcnlFeHBvbmVudFJh
bmdlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGVuX21rX21pbmltYWxfYmluYXJ5X2V4cG9uZW50LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVuX21r
X21heGltYWxfYmluYXJ5X2V4cG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRlbl9taywgJm1rKTsKKyAgICAgICAg
QVNTRVJUKChrTWluaW1hbFRhcmdldEV4cG9uZW50IDw9IHcuZSgpICsgdGVuX21rLmUoKSArCisg
ICAgICAgICAgICAgICAgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUpICYmCisgICAgICAgICAgICAg
ICAoa01heGltYWxUYXJnZXRFeHBvbmVudCA+PSB3LmUoKSArIHRlbl9tay5lKCkgKworICAgICAg
ICAgICAgICAgIERpeUZwOjprU2lnbmlmaWNhbmRTaXplKSk7CisgICAgICAgIC8vIE5vdGUgdGhh
dCB0ZW5fbWsgaXMgb25seSBhbiBhcHByb3hpbWF0aW9uIG9mIDEwXi1rLiBBIERpeUZwIG9ubHkg
Y29udGFpbnMgYQorICAgICAgICAvLyA2NCBiaXQgc2lnbmlmaWNhbmQgYW5kIHRlbl9tayBpcyB0
aHVzIG9ubHkgcHJlY2lzZSB1cCB0byA2NCBiaXRzLgorICAgICAgICAKKyAgICAgICAgLy8gVGhl
IERpeUZwOjpUaW1lcyBwcm9jZWR1cmUgcm91bmRzIGl0cyByZXN1bHQsIGFuZCB0ZW5fbWsgaXMg
YXBwcm94aW1hdGVkCisgICAgICAgIC8vIHRvby4gVGhlIHZhcmlhYmxlIHNjYWxlZF93IChhcyB3
ZWxsIGFzIHNjYWxlZF9ib3VuZGFyeV9taW51cy9wbHVzKSBhcmUgbm93CisgICAgICAgIC8vIG9m
ZiBieSBhIHNtYWxsIGFtb3VudC4KKyAgICAgICAgLy8gSW4gZmFjdDogc2NhbGVkX3cgLSB3KjEw
XmsgPCAxdWxwICh1bml0IGluIHRoZSBsYXN0IHBsYWNlKSBvZiBzY2FsZWRfdy4KKyAgICAgICAg
Ly8gSW4gb3RoZXIgd29yZHM6IGxldCBmID0gc2NhbGVkX3cuZigpIGFuZCBlID0gc2NhbGVkX3cu
ZSgpLCB0aGVuCisgICAgICAgIC8vICAgICAgICAgICAoZi0xKSAqIDJeZSA8IHcqMTBeayA8IChm
KzEpICogMl5lCisgICAgICAgIERpeUZwIHNjYWxlZF93ID0gRGl5RnA6OlRpbWVzKHcsIHRlbl9t
ayk7CisgICAgICAgIEFTU0VSVChzY2FsZWRfdy5lKCkgPT0KKyAgICAgICAgICAgICAgIGJvdW5k
YXJ5X3BsdXMuZSgpICsgdGVuX21rLmUoKSArIERpeUZwOjprU2lnbmlmaWNhbmRTaXplKTsKKyAg
ICAgICAgLy8gSW4gdGhlb3J5IGl0IHdvdWxkIGJlIHBvc3NpYmxlIHRvIGF2b2lkIHNvbWUgcmVj
b21wdXRhdGlvbnMgYnkgY29tcHV0aW5nCisgICAgICAgIC8vIHRoZSBkaWZmZXJlbmNlIGJldHdl
ZW4gdyBhbmQgYm91bmRhcnlfbWludXMvcGx1cyAoYSBwb3dlciBvZiAyKSBhbmQgdG8KKyAgICAg
ICAgLy8gY29tcHV0ZSBzY2FsZWRfYm91bmRhcnlfbWludXMvcGx1cyBieSBzdWJ0cmFjdGluZy9h
ZGRpbmcgZnJvbQorICAgICAgICAvLyBzY2FsZWRfdy4gSG93ZXZlciB0aGUgY29kZSBiZWNvbWVz
IG11Y2ggbGVzcyByZWFkYWJsZSBhbmQgdGhlIHNwZWVkCisgICAgICAgIC8vIGVuaGFuY2VtZW50
cyBhcmUgbm90IHRlcnJpZmZpYy4KKyAgICAgICAgRGl5RnAgc2NhbGVkX2JvdW5kYXJ5X21pbnVz
ID0gRGl5RnA6OlRpbWVzKGJvdW5kYXJ5X21pbnVzLCB0ZW5fbWspOworICAgICAgICBEaXlGcCBz
Y2FsZWRfYm91bmRhcnlfcGx1cyAgPSBEaXlGcDo6VGltZXMoYm91bmRhcnlfcGx1cywgIHRlbl9t
ayk7CisgICAgICAgIAorICAgICAgICAvLyBEaWdpdEdlbiB3aWxsIGdlbmVyYXRlIHRoZSBkaWdp
dHMgb2Ygc2NhbGVkX3cuIFRoZXJlZm9yZSB3ZSBoYXZlCisgICAgICAgIC8vIHYgPT0gKGRvdWJs
ZSkgKHNjYWxlZF93ICogMTBeLW1rKS4KKyAgICAgICAgLy8gU2V0IGRlY2ltYWxfZXhwb25lbnQg
PT0gLW1rIGFuZCBwYXNzIGl0IHRvIERpZ2l0R2VuLiBJZiBzY2FsZWRfdyBpcyBub3QgYW4KKyAg
ICAgICAgLy8gaW50ZWdlciB0aGFuIGl0IHdpbGwgYmUgdXBkYXRlZC4gRm9yIGluc3RhbmNlIGlm
IHNjYWxlZF93ID09IDEuMjMgdGhlbgorICAgICAgICAvLyB0aGUgYnVmZmVyIHdpbGwgYmUgZmls
bGVkIHdpdGggIjEyMyIgdW5kIHRoZSBkZWNpbWFsX2V4cG9uZW50IHdpbGwgYmUKKyAgICAgICAg
Ly8gZGVjcmVhc2VkIGJ5IDIuCisgICAgICAgIGludCBrYXBwYTsKKyAgICAgICAgYm9vbCByZXN1
bHQgPSBEaWdpdEdlbihzY2FsZWRfYm91bmRhcnlfbWludXMsIHNjYWxlZF93LCBzY2FsZWRfYm91
bmRhcnlfcGx1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGxlbmd0
aCwgJmthcHBhKTsKKyAgICAgICAgKmRlY2ltYWxfZXhwb25lbnQgPSAtbWsgKyBrYXBwYTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgCisgICAgLy8gVGhlICJjb3Vu
dGVkIiB2ZXJzaW9uIG9mIGdyaXN1MyAoc2VlIGFib3ZlKSBvbmx5IGdlbmVyYXRlcyByZXF1ZXN0
ZWRfZGlnaXRzCisgICAgLy8gbnVtYmVyIG9mIGRpZ2l0cy4gVGhpcyB2ZXJzaW9uIGRvZXMgbm90
IGdlbmVyYXRlIHRoZSBzaG9ydGVzdCByZXByZXNlbnRhdGlvbiwKKyAgICAvLyBhbmQgd2l0aCBl
bm91Z2ggcmVxdWVzdGVkIGRpZ2l0cyAwLjEgd2lsbCBhdCBzb21lIHBvaW50IHByaW50IGFzIDAu
OTk5OTk5OS4uLgorICAgIC8vIEdyaXN1MyBpcyB0b28gaW1wcmVjaXNlIGZvciByZWFsIGhhbGZ3
YXkgY2FzZXMgKDEuNSB3aWxsIG5vdCB3b3JrKSBhbmQKKyAgICAvLyB0aGVyZWZvcmUgdGhlIHJv
dW5kaW5nIHN0cmF0ZWd5IGZvciBoYWxmd2F5IGNhc2VzIGlzIGlycmVsZXZhbnQuCisgICAgc3Rh
dGljIGJvb2wgR3Jpc3UzQ291bnRlZChkb3VibGUgdiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCByZXF1ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCogbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBkZWNpbWFsX2V4
cG9uZW50KSB7CisgICAgICAgIERpeUZwIHcgPSBEb3VibGUodikuQXNOb3JtYWxpemVkRGl5RnAo
KTsKKyAgICAgICAgRGl5RnAgdGVuX21rOyAgLy8gQ2FjaGVkIHBvd2VyIG9mIHRlbjogMTBeLWsK
KyAgICAgICAgaW50IG1rOyAgICAgICAgLy8gLWsKKyAgICAgICAgaW50IHRlbl9ta19taW5pbWFs
X2JpbmFyeV9leHBvbmVudCA9CisgICAgICAgIGtNaW5pbWFsVGFyZ2V0RXhwb25lbnQgLSAody5l
KCkgKyBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSk7CisgICAgICAgIGludCB0ZW5fbWtfbWF4aW1h
bF9iaW5hcnlfZXhwb25lbnQgPQorICAgICAgICBrTWF4aW1hbFRhcmdldEV4cG9uZW50IC0gKHcu
ZSgpICsgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUpOworICAgICAgICBQb3dlcnNPZlRlbkNhY2hl
OjpHZXRDYWNoZWRQb3dlckZvckJpbmFyeUV4cG9uZW50UmFuZ2UoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW5fbWtfbWlu
aW1hbF9iaW5hcnlfZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW5fbWtfbWF4aW1hbF9iaW5hcnlfZXhwb25l
bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmdGVuX21rLCAmbWspOworICAgICAgICBBU1NFUlQoKGtNaW5pbWFsVGFyZ2V0
RXhwb25lbnQgPD0gdy5lKCkgKyB0ZW5fbWsuZSgpICsKKyAgICAgICAgICAgICAgICBEaXlGcDo6
a1NpZ25pZmljYW5kU2l6ZSkgJiYKKyAgICAgICAgICAgICAgIChrTWF4aW1hbFRhcmdldEV4cG9u
ZW50ID49IHcuZSgpICsgdGVuX21rLmUoKSArCisgICAgICAgICAgICAgICAgRGl5RnA6OmtTaWdu
aWZpY2FuZFNpemUpKTsKKyAgICAgICAgLy8gTm90ZSB0aGF0IHRlbl9tayBpcyBvbmx5IGFuIGFw
cHJveGltYXRpb24gb2YgMTBeLWsuIEEgRGl5RnAgb25seSBjb250YWlucyBhCisgICAgICAgIC8v
IDY0IGJpdCBzaWduaWZpY2FuZCBhbmQgdGVuX21rIGlzIHRodXMgb25seSBwcmVjaXNlIHVwIHRv
IDY0IGJpdHMuCisgICAgICAgIAorICAgICAgICAvLyBUaGUgRGl5RnA6OlRpbWVzIHByb2NlZHVy
ZSByb3VuZHMgaXRzIHJlc3VsdCwgYW5kIHRlbl9tayBpcyBhcHByb3hpbWF0ZWQKKyAgICAgICAg
Ly8gdG9vLiBUaGUgdmFyaWFibGUgc2NhbGVkX3cgKGFzIHdlbGwgYXMgc2NhbGVkX2JvdW5kYXJ5
X21pbnVzL3BsdXMpIGFyZSBub3cKKyAgICAgICAgLy8gb2ZmIGJ5IGEgc21hbGwgYW1vdW50Lgor
ICAgICAgICAvLyBJbiBmYWN0OiBzY2FsZWRfdyAtIHcqMTBeayA8IDF1bHAgKHVuaXQgaW4gdGhl
IGxhc3QgcGxhY2UpIG9mIHNjYWxlZF93LgorICAgICAgICAvLyBJbiBvdGhlciB3b3JkczogbGV0
IGYgPSBzY2FsZWRfdy5mKCkgYW5kIGUgPSBzY2FsZWRfdy5lKCksIHRoZW4KKyAgICAgICAgLy8g
ICAgICAgICAgIChmLTEpICogMl5lIDwgdyoxMF5rIDwgKGYrMSkgKiAyXmUKKyAgICAgICAgRGl5
RnAgc2NhbGVkX3cgPSBEaXlGcDo6VGltZXModywgdGVuX21rKTsKKyAgICAgICAgCisgICAgICAg
IC8vIFdlIG5vdyBoYXZlIChkb3VibGUpIChzY2FsZWRfdyAqIDEwXi1taykuCisgICAgICAgIC8v
IERpZ2l0R2VuIHdpbGwgZ2VuZXJhdGUgdGhlIGZpcnN0IHJlcXVlc3RlZF9kaWdpdHMgZGlnaXRz
IG9mIHNjYWxlZF93IGFuZAorICAgICAgICAvLyByZXR1cm4gdG9nZXRoZXIgd2l0aCBhIGthcHBh
IHN1Y2ggdGhhdCBzY2FsZWRfdyB+PSBidWZmZXIgKiAxMF5rYXBwYS4gKEl0CisgICAgICAgIC8v
IHdpbGwgbm90IGFsd2F5cyBiZSBleGFjdGx5IHRoZSBzYW1lIHNpbmNlIERpZ2l0R2VuQ291bnRl
ZCBvbmx5IHByb2R1Y2VzIGEKKyAgICAgICAgLy8gbGltaXRlZCBudW1iZXIgb2YgZGlnaXRzLikK
KyAgICAgICAgaW50IGthcHBhOworICAgICAgICBib29sIHJlc3VsdCA9IERpZ2l0R2VuQ291bnRl
ZChzY2FsZWRfdywgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnVmZmVyLCBsZW5ndGgsICZrYXBwYSk7CisgICAgICAgICpkZWNpbWFsX2V4
cG9uZW50ID0gLW1rICsga2FwcGE7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAg
IAorICAgIAorICAgIGJvb2wgRmFzdER0b2EoZG91YmxlIHYsCisgICAgICAgICAgICAgICAgICBG
YXN0RHRvYU1vZGUgbW9kZSwKKyAgICAgICAgICAgICAgICAgIGludCByZXF1ZXN0ZWRfZGlnaXRz
LAorICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAg
ICAgIGludCogbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgaW50KiBkZWNpbWFsX3BvaW50KSB7
CisgICAgICAgIEFTU0VSVCh2ID4gMCk7CisgICAgICAgIEFTU0VSVCghRG91YmxlKHYpLklzU3Bl
Y2lhbCgpKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgICAg
IGludCBkZWNpbWFsX2V4cG9uZW50ID0gMDsKKyAgICAgICAgc3dpdGNoIChtb2RlKSB7CisgICAg
ICAgICAgICBjYXNlIEZBU1RfRFRPQV9TSE9SVEVTVDoKKyAgICAgICAgICAgICAgICByZXN1bHQg
PSBHcmlzdTModiwgYnVmZmVyLCBsZW5ndGgsICZkZWNpbWFsX2V4cG9uZW50KTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRkFTVF9EVE9BX1BSRUNJU0lPTjoKKyAg
ICAgICAgICAgICAgICByZXN1bHQgPSBHcmlzdTNDb3VudGVkKHYsIHJlcXVlc3RlZF9kaWdpdHMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGxlbmd0aCwg
JmRlY2ltYWxfZXhwb25lbnQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAg
ICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgICAgICpkZWNpbWFsX3BvaW50ID0gKmxlbmd0aCAr
IGRlY2ltYWxfZXhwb25lbnQ7CisgICAgICAgICAgICBidWZmZXJbKmxlbmd0aF0gPSAnXDAnOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorfSAgLy8gbmFt
ZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL2R0b2EvZmFzdC1kdG9hLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2Ev
ZmFzdC1kdG9hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODg0MzZmZDU1YmJmNDBjMTVhNGEzNTg0YWM4YTUzYjMw
OTE0NzMwMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRv
YS9mYXN0LWR0b2EuaApAQCAtMCwwICsxLDg0IEBACisvLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjgg
cHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
Ky8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8K
Ky8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKKyNpZm5kZWYgRE9VQkxFX0NPTlZFUlNJT05fRkFTVF9EVE9BX0hfCisjZGVmaW5lIERPVUJM
RV9DT05WRVJTSU9OX0ZBU1RfRFRPQV9IXworCisjaW5jbHVkZSAidXRpbHMuaCIKKworbmFtZXNw
YWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKKyAgICAKKyAgICBlbnVtIEZhc3REdG9hTW9kZSB7Cisg
ICAgICAgIC8vIENvbXB1dGVzIHRoZSBzaG9ydGVzdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2
ZW4gaW5wdXQuIFRoZSByZXR1cm5lZAorICAgICAgICAvLyByZXN1bHQgd2lsbCBiZSB0aGUgbW9z
dCBhY2N1cmF0ZSBudW1iZXIgb2YgdGhpcyBsZW5ndGguIExvbmdlcgorICAgICAgICAvLyByZXBy
ZXNlbnRhdGlvbnMgbWlnaHQgYmUgbW9yZSBhY2N1cmF0ZS4KKyAgICAgICAgRkFTVF9EVE9BX1NI
T1JURVNULAorICAgICAgICAvLyBDb21wdXRlcyBhIHJlcHJlc2VudGF0aW9uIHdoZXJlIHRoZSBw
cmVjaXNpb24gKG51bWJlciBvZiBkaWdpdHMpIGlzCisgICAgICAgIC8vIGdpdmVuIGFzIGlucHV0
LiBUaGUgcHJlY2lzaW9uIGlzIGluZGVwZW5kZW50IG9mIHRoZSBkZWNpbWFsIHBvaW50LgorICAg
ICAgICBGQVNUX0RUT0FfUFJFQ0lTSU9OCisgICAgfTsKKyAgICAKKyAgICAvLyBGYXN0RHRvYSB3
aWxsIHByb2R1Y2UgYXQgbW9zdCBrRmFzdER0b2FNYXhpbWFsTGVuZ3RoIGRpZ2l0cy4gVGhpcyBk
b2VzIG5vdAorICAgIC8vIGluY2x1ZGUgdGhlIHRlcm1pbmF0aW5nICdcMCcgY2hhcmFjdGVyLgor
ICAgIHN0YXRpYyBjb25zdCBpbnQga0Zhc3REdG9hTWF4aW1hbExlbmd0aCA9IDE3OworICAgIAor
ICAgIC8vIFByb3ZpZGVzIGEgZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiB2LgorICAgIC8vIFRo
ZSByZXN1bHQgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGJ1ZmZlciAqIDEwXihwb2ludCAtIGxl
bmd0aCkuCisgICAgLy8KKyAgICAvLyBQcmVjb25kaXRpb246CisgICAgLy8gICAqIHYgbXVzdCBi
ZSBhIHN0cmljdGx5IHBvc2l0aXZlIGZpbml0ZSBkb3VibGUuCisgICAgLy8KKyAgICAvLyBSZXR1
cm5zIHRydWUgaWYgaXQgc3VjY2VlZHMsIG90aGVyd2lzZSB0aGUgcmVzdWx0IGNhbiBub3QgYmUg
dHJ1c3RlZC4KKyAgICAvLyBUaGVyZSB3aWxsIGJlICpsZW5ndGggZGlnaXRzIGluc2lkZSB0aGUg
YnVmZmVyIGZvbGxvd2VkIGJ5IGEgbnVsbCB0ZXJtaW5hdG9yLgorICAgIC8vIElmIHRoZSBmdW5j
dGlvbiByZXR1cm5zIHRydWUgYW5kIG1vZGUgZXF1YWxzCisgICAgLy8gICAtIEZBU1RfRFRPQV9T
SE9SVEVTVCwgdGhlbgorICAgIC8vICAgICB0aGUgcGFyYW1ldGVyIHJlcXVlc3RlZF9kaWdpdHMg
aXMgaWdub3JlZC4KKyAgICAvLyAgICAgVGhlIHJlc3VsdCBzYXRpc2ZpZXMKKyAgICAvLyAgICAg
ICAgIHYgPT0gKGRvdWJsZSkgKGJ1ZmZlciAqIDEwXihwb2ludCAtIGxlbmd0aCkpLgorICAgIC8v
ICAgICBUaGUgZGlnaXRzIGluIHRoZSBidWZmZXIgYXJlIHRoZSBzaG9ydGVzdCByZXByZXNlbnRh
dGlvbiBwb3NzaWJsZS4gRS5nLgorICAgIC8vICAgICBpZiAwLjA5OTk5OTk5OTk5OSBhbmQgMC4x
IHJlcHJlc2VudCB0aGUgc2FtZSBkb3VibGUgdGhlbiAiMSIgaXMgcmV0dXJuZWQKKyAgICAvLyAg
ICAgd2l0aCBwb2ludCA9IDAuCisgICAgLy8gICAgIFRoZSBsYXN0IGRpZ2l0IHdpbGwgYmUgY2xv
c2VzdCB0byB0aGUgYWN0dWFsIHYuIFRoYXQgaXMsIGV2ZW4gaWYgc2V2ZXJhbAorICAgIC8vICAg
ICBkaWdpdHMgbWlnaHQgY29ycmVjdGx5IHlpZWxkICd2JyB3aGVuIHJlYWQgYWdhaW4sIHRoZSBi
dWZmZXIgd2lsbCBjb250YWluCisgICAgLy8gICAgIHRoZSBvbmUgY2xvc2VzdCB0byB2LgorICAg
IC8vICAgLSBGQVNUX0RUT0FfUFJFQ0lTSU9OLCB0aGVuCisgICAgLy8gICAgIHRoZSBidWZmZXIg
Y29udGFpbnMgcmVxdWVzdGVkX2RpZ2l0cyBkaWdpdHMuCisgICAgLy8gICAgIHRoZSBkaWZmZXJl
bmNlIHYgLSAoYnVmZmVyICogMTBeKHBvaW50LWxlbmd0aCkpIGlzIGNsb3Nlc3QgdG8gemVybyBm
b3IKKyAgICAvLyAgICAgYWxsIHBvc3NpYmxlIHJlcHJlc2VudGF0aW9ucyBvZiByZXF1ZXN0ZWRf
ZGlnaXRzIGRpZ2l0cy4KKyAgICAvLyAgICAgSWYgdGhlcmUgYXJlIHR3byB2YWx1ZXMgdGhhdCBh
cmUgZXF1YWxseSBjbG9zZSwgdGhlbiBGYXN0RHRvYSByZXR1cm5zCisgICAgLy8gICAgIGZhbHNl
LgorICAgIC8vIEZvciBib3RoIG1vZGVzIHRoZSBidWZmZXIgbXVzdCBiZSBsYXJnZSBlbm91Z2gg
dG8gaG9sZCB0aGUgcmVzdWx0LgorICAgIGJvb2wgRmFzdER0b2EoZG91YmxlIGQsCisgICAgICAg
ICAgICAgICAgICBGYXN0RHRvYU1vZGUgbW9kZSwKKyAgICAgICAgICAgICAgICAgIGludCByZXF1
ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwKKyAg
ICAgICAgICAgICAgICAgIGludCogbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgaW50KiBkZWNp
bWFsX3BvaW50KTsKKyAgICAKK30gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbgorCisj
ZW5kaWYgIC8vIERPVUJMRV9DT05WRVJTSU9OX0ZBU1RfRFRPQV9IXwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2ZpeGVkLWR0b2EuY2MgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL2R0b2EvZml4ZWQtZHRvYS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NGQzMjI5ZWM2YzQ3
NDQ5YWRmNWQwMTQ5Yzc0MTBiYjIwZjAyMGFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2ZpeGVkLWR0b2EuY2MKQEAgLTAsMCArMSw0MDQgQEAKKy8v
IENvcHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRp
c2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
Ly8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUg
IlVudXNlZFBhcmFtLmgiCisjaW5jbHVkZSAiZml4ZWQtZHRvYS5oIgorI2luY2x1ZGUgImRvdWJs
ZS5oIgorCituYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIC8vIFJlcHJl
c2VudHMgYSAxMjhiaXQgdHlwZS4gVGhpcyBjbGFzcyBzaG91bGQgYmUgcmVwbGFjZWQgYnkgYSBu
YXRpdmUgdHlwZSBvbgorICAgIC8vIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgMTI4Yml0IGludGVn
ZXJzLgorICAgIGNsYXNzIFVJbnQxMjggeworICAgIHB1YmxpYzoKKyAgICAgICAgVUludDEyOCgp
IDogaGlnaF9iaXRzXygwKSwgbG93X2JpdHNfKDApIHsgfQorICAgICAgICBVSW50MTI4KHVpbnQ2
NF90IGhpZ2gsIHVpbnQ2NF90IGxvdykgOiBoaWdoX2JpdHNfKGhpZ2gpLCBsb3dfYml0c18obG93
KSB7IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgTXVsdGlwbHkodWludDMyX3QgbXVsdGlwbGlj
YW5kKSB7CisgICAgICAgICAgICB1aW50NjRfdCBhY2N1bXVsYXRvcjsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgYWNjdW11bGF0b3IgPSAobG93X2JpdHNfICYga01hc2szMikgKiBtdWx0aXBs
aWNhbmQ7CisgICAgICAgICAgICB1aW50MzJfdCBwYXJ0ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KGFjY3VtdWxhdG9yICYga01hc2szMik7CisgICAgICAgICAgICBhY2N1bXVsYXRvciA+Pj0gMzI7
CisgICAgICAgICAgICBhY2N1bXVsYXRvciA9IGFjY3VtdWxhdG9yICsgKGxvd19iaXRzXyA+PiAz
MikgKiBtdWx0aXBsaWNhbmQ7CisgICAgICAgICAgICBsb3dfYml0c18gPSAoYWNjdW11bGF0b3Ig
PDwgMzIpICsgcGFydDsKKyAgICAgICAgICAgIGFjY3VtdWxhdG9yID4+PSAzMjsKKyAgICAgICAg
ICAgIGFjY3VtdWxhdG9yID0gYWNjdW11bGF0b3IgKyAoaGlnaF9iaXRzXyAmIGtNYXNrMzIpICog
bXVsdGlwbGljYW5kOworICAgICAgICAgICAgcGFydCA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pihh
Y2N1bXVsYXRvciAmIGtNYXNrMzIpOworICAgICAgICAgICAgYWNjdW11bGF0b3IgPj49IDMyOwor
ICAgICAgICAgICAgYWNjdW11bGF0b3IgPSBhY2N1bXVsYXRvciArIChoaWdoX2JpdHNfID4+IDMy
KSAqIG11bHRpcGxpY2FuZDsKKyAgICAgICAgICAgIGhpZ2hfYml0c18gPSAoYWNjdW11bGF0b3Ig
PDwgMzIpICsgcGFydDsKKyAgICAgICAgICAgIEFTU0VSVCgoYWNjdW11bGF0b3IgPj4gMzIpID09
IDApOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIFNoaWZ0KGludCBzaGlmdF9h
bW91bnQpIHsKKyAgICAgICAgICAgIEFTU0VSVCgtNjQgPD0gc2hpZnRfYW1vdW50ICYmIHNoaWZ0
X2Ftb3VudCA8PSA2NCk7CisgICAgICAgICAgICBpZiAoc2hpZnRfYW1vdW50ID09IDApIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNoaWZ0X2Ftb3Vu
dCA9PSAtNjQpIHsKKyAgICAgICAgICAgICAgICBoaWdoX2JpdHNfID0gbG93X2JpdHNfOworICAg
ICAgICAgICAgICAgIGxvd19iaXRzXyA9IDA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNoaWZ0
X2Ftb3VudCA9PSA2NCkgeworICAgICAgICAgICAgICAgIGxvd19iaXRzXyA9IGhpZ2hfYml0c187
CisgICAgICAgICAgICAgICAgaGlnaF9iaXRzXyA9IDA7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KHNoaWZ0X2Ftb3VudCA8PSAwKSB7CisgICAgICAgICAgICAgICAgaGlnaF9iaXRzXyA8PD0gLXNo
aWZ0X2Ftb3VudDsKKyAgICAgICAgICAgICAgICBoaWdoX2JpdHNfICs9IGxvd19iaXRzXyA+PiAo
NjQgKyBzaGlmdF9hbW91bnQpOworICAgICAgICAgICAgICAgIGxvd19iaXRzXyA8PD0gLXNoaWZ0
X2Ftb3VudDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbG93X2JpdHNf
ID4+PSBzaGlmdF9hbW91bnQ7CisgICAgICAgICAgICAgICAgbG93X2JpdHNfICs9IGhpZ2hfYml0
c18gPDwgKDY0IC0gc2hpZnRfYW1vdW50KTsKKyAgICAgICAgICAgICAgICBoaWdoX2JpdHNfID4+
PSBzaGlmdF9hbW91bnQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIC8vIE1vZGlmaWVzICp0aGlzIHRvICp0aGlzIE1PRCAoMl5wb3dlcikuCisgICAgICAgIC8v
IFJldHVybnMgKnRoaXMgRElWICgyXnBvd2VyKS4KKyAgICAgICAgaW50IERpdk1vZFBvd2VyT2Yy
KGludCBwb3dlcikgeworICAgICAgICAgICAgaWYgKHBvd2VyID49IDY0KSB7CisgICAgICAgICAg
ICAgICAgaW50IHJlc3VsdCA9IHN0YXRpY19jYXN0PGludD4oaGlnaF9iaXRzXyA+PiAocG93ZXIg
LSA2NCkpOworICAgICAgICAgICAgICAgIGhpZ2hfYml0c18gLT0gc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KHJlc3VsdCkgPDwgKHBvd2VyIC0gNjQpOworICAgICAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHVpbnQ2NF90IHBhcnRf
bG93ID0gbG93X2JpdHNfID4+IHBvd2VyOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IHBhcnRf
aGlnaCA9IGhpZ2hfYml0c18gPDwgKDY0IC0gcG93ZXIpOworICAgICAgICAgICAgICAgIGludCBy
ZXN1bHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBhcnRfbG93ICsgcGFydF9oaWdoKTsKKyAgICAgICAg
ICAgICAgICBoaWdoX2JpdHNfID0gMDsKKyAgICAgICAgICAgICAgICBsb3dfYml0c18gLT0gcGFy
dF9sb3cgPDwgcG93ZXI7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBJc1plcm8oKSBjb25zdCB7
CisgICAgICAgICAgICByZXR1cm4gaGlnaF9iaXRzXyA9PSAwICYmIGxvd19iaXRzXyA9PSAwOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpbnQgQml0QXQoaW50IHBvc2l0aW9uKSB7Cisg
ICAgICAgICAgICBpZiAocG9zaXRpb24gPj0gNjQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8aW50PihoaWdoX2JpdHNfID4+IChwb3NpdGlvbiAtIDY0KSkgJiAxOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50
Pihsb3dfYml0c18gPj4gcG9zaXRpb24pICYgMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBzdGF0aWMgY29uc3QgdWludDY0X3Qga01h
c2szMiA9IDB4RkZGRkZGRkY7CisgICAgICAgIC8vIFZhbHVlID09IChoaWdoX2JpdHNfIDw8IDY0
KSArIGxvd19iaXRzXworICAgICAgICB1aW50NjRfdCBoaWdoX2JpdHNfOworICAgICAgICB1aW50
NjRfdCBsb3dfYml0c187CisgICAgfTsKKyAgICAKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgaW50
IGtEb3VibGVTaWduaWZpY2FuZFNpemUgPSA1MzsgIC8vIEluY2x1ZGVzIHRoZSBoaWRkZW4gYml0
LgorICAgIAorICAgIAorICAgIHN0YXRpYyB2b2lkIEZpbGxEaWdpdHMzMkZpeGVkTGVuZ3RoKHVp
bnQzMl90IG51bWJlciwgaW50IHJlcXVlc3RlZF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwgaW50KiBsZW5ndGgpIHsK
KyAgICAgICAgZm9yIChpbnQgaSA9IHJlcXVlc3RlZF9sZW5ndGggLSAxOyBpID49IDA7IC0taSkg
eworICAgICAgICAgICAgYnVmZmVyWygqbGVuZ3RoKSArIGldID0gJzAnICsgbnVtYmVyICUgMTA7
CisgICAgICAgICAgICBudW1iZXIgLz0gMTA7CisgICAgICAgIH0KKyAgICAgICAgKmxlbmd0aCAr
PSByZXF1ZXN0ZWRfbGVuZ3RoOworICAgIH0KKyAgICAKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBG
aWxsRGlnaXRzMzIodWludDMyX3QgbnVtYmVyLCBWZWN0b3I8Y2hhcj4gYnVmZmVyLCBpbnQqIGxl
bmd0aCkgeworICAgICAgICBpbnQgbnVtYmVyX2xlbmd0aCA9IDA7CisgICAgICAgIC8vIFdlIGZp
bGwgdGhlIGRpZ2l0cyBpbiByZXZlcnNlIG9yZGVyIGFuZCBleGNoYW5nZSB0aGVtIGFmdGVyd2Fy
ZHMuCisgICAgICAgIHdoaWxlIChudW1iZXIgIT0gMCkgeworICAgICAgICAgICAgaW50IGRpZ2l0
ID0gbnVtYmVyICUgMTA7CisgICAgICAgICAgICBudW1iZXIgLz0gMTA7CisgICAgICAgICAgICBi
dWZmZXJbKCpsZW5ndGgpICsgbnVtYmVyX2xlbmd0aF0gPSAnMCcgKyBkaWdpdDsKKyAgICAgICAg
ICAgIG51bWJlcl9sZW5ndGgrKzsKKyAgICAgICAgfQorICAgICAgICAvLyBFeGNoYW5nZSB0aGUg
ZGlnaXRzLgorICAgICAgICBpbnQgaSA9ICpsZW5ndGg7CisgICAgICAgIGludCBqID0gKmxlbmd0
aCArIG51bWJlcl9sZW5ndGggLSAxOworICAgICAgICB3aGlsZSAoaSA8IGopIHsKKyAgICAgICAg
ICAgIGNoYXIgdG1wID0gYnVmZmVyW2ldOworICAgICAgICAgICAgYnVmZmVyW2ldID0gYnVmZmVy
W2pdOworICAgICAgICAgICAgYnVmZmVyW2pdID0gdG1wOworICAgICAgICAgICAgaSsrOworICAg
ICAgICAgICAgai0tOworICAgICAgICB9CisgICAgICAgICpsZW5ndGggKz0gbnVtYmVyX2xlbmd0
aDsKKyAgICB9CisgICAgCisgICAgCisgICAgc3RhdGljIHZvaWQgRmlsbERpZ2l0czY0Rml4ZWRM
ZW5ndGgodWludDY0X3QgbnVtYmVyLCBpbnQgcmVxdWVzdGVkX2xlbmd0aCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLCBpbnQqIGxl
bmd0aCkgeworICAgICAgICBVTlVTRURfUEFSQU0ocmVxdWVzdGVkX2xlbmd0aCk7CisgICAgICAg
IGNvbnN0IHVpbnQzMl90IGtUZW43ID0gMTAwMDAwMDA7CisgICAgICAgIC8vIEZvciBlZmZpY2ll
bmN5IGN1dCB0aGUgbnVtYmVyIGludG8gMyB1aW50MzJfdCBwYXJ0cywgYW5kIHByaW50IHRob3Nl
LgorICAgICAgICB1aW50MzJfdCBwYXJ0MiA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihudW1iZXIg
JSBrVGVuNyk7CisgICAgICAgIG51bWJlciAvPSBrVGVuNzsKKyAgICAgICAgdWludDMyX3QgcGFy
dDEgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4obnVtYmVyICUga1RlbjcpOworICAgICAgICB1aW50
MzJfdCBwYXJ0MCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihudW1iZXIgLyBrVGVuNyk7CisgICAg
ICAgIAorICAgICAgICBGaWxsRGlnaXRzMzJGaXhlZExlbmd0aChwYXJ0MCwgMywgYnVmZmVyLCBs
ZW5ndGgpOworICAgICAgICBGaWxsRGlnaXRzMzJGaXhlZExlbmd0aChwYXJ0MSwgNywgYnVmZmVy
LCBsZW5ndGgpOworICAgICAgICBGaWxsRGlnaXRzMzJGaXhlZExlbmd0aChwYXJ0MiwgNywgYnVm
ZmVyLCBsZW5ndGgpOworICAgIH0KKyAgICAKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBGaWxsRGln
aXRzNjQodWludDY0X3QgbnVtYmVyLCBWZWN0b3I8Y2hhcj4gYnVmZmVyLCBpbnQqIGxlbmd0aCkg
eworICAgICAgICBjb25zdCB1aW50MzJfdCBrVGVuNyA9IDEwMDAwMDAwOworICAgICAgICAvLyBG
b3IgZWZmaWNpZW5jeSBjdXQgdGhlIG51bWJlciBpbnRvIDMgdWludDMyX3QgcGFydHMsIGFuZCBw
cmludCB0aG9zZS4KKyAgICAgICAgdWludDMyX3QgcGFydDIgPSBzdGF0aWNfY2FzdDx1aW50MzJf
dD4obnVtYmVyICUga1RlbjcpOworICAgICAgICBudW1iZXIgLz0ga1Rlbjc7CisgICAgICAgIHVp
bnQzMl90IHBhcnQxID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG51bWJlciAlIGtUZW43KTsKKyAg
ICAgICAgdWludDMyX3QgcGFydDAgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4obnVtYmVyIC8ga1Rl
bjcpOworICAgICAgICAKKyAgICAgICAgaWYgKHBhcnQwICE9IDApIHsKKyAgICAgICAgICAgIEZp
bGxEaWdpdHMzMihwYXJ0MCwgYnVmZmVyLCBsZW5ndGgpOworICAgICAgICAgICAgRmlsbERpZ2l0
czMyRml4ZWRMZW5ndGgocGFydDEsIDcsIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAgICAgIEZp
bGxEaWdpdHMzMkZpeGVkTGVuZ3RoKHBhcnQyLCA3LCBidWZmZXIsIGxlbmd0aCk7CisgICAgICAg
IH0gZWxzZSBpZiAocGFydDEgIT0gMCkgeworICAgICAgICAgICAgRmlsbERpZ2l0czMyKHBhcnQx
LCBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgICAgICBGaWxsRGlnaXRzMzJGaXhlZExlbmd0aChw
YXJ0MiwgNywgYnVmZmVyLCBsZW5ndGgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
RmlsbERpZ2l0czMyKHBhcnQyLCBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgCisgICAgc3RhdGljIHZvaWQgUm91bmRVcChWZWN0b3I8Y2hhcj4gYnVmZmVyLCBp
bnQqIGxlbmd0aCwgaW50KiBkZWNpbWFsX3BvaW50KSB7CisgICAgICAgIC8vIEFuIGVtcHR5IGJ1
ZmZlciByZXByZXNlbnRzIDAuCisgICAgICAgIGlmICgqbGVuZ3RoID09IDApIHsKKyAgICAgICAg
ICAgIGJ1ZmZlclswXSA9ICcxJzsKKyAgICAgICAgICAgICpkZWNpbWFsX3BvaW50ID0gMTsKKyAg
ICAgICAgICAgICpsZW5ndGggPSAxOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIC8vIFJvdW5kIHRoZSBsYXN0IGRpZ2l0IHVudGlsIHdlIGVpdGhlciBoYXZlIGEgZGln
aXQgdGhhdCB3YXMgbm90ICc5JyBvciB1bnRpbAorICAgICAgICAvLyB3ZSByZWFjaGVkIHRoZSBm
aXJzdCBkaWdpdC4KKyAgICAgICAgYnVmZmVyWygqbGVuZ3RoKSAtIDFdKys7CisgICAgICAgIGZv
ciAoaW50IGkgPSAoKmxlbmd0aCkgLSAxOyBpID4gMDsgLS1pKSB7CisgICAgICAgICAgICBpZiAo
YnVmZmVyW2ldICE9ICcwJyArIDEwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnVmZmVyW2ldID0gJzAnOworICAgICAgICAgICAgYnVmZmVy
W2kgLSAxXSsrOworICAgICAgICB9CisgICAgICAgIC8vIElmIHRoZSBmaXJzdCBkaWdpdCBpcyBu
b3cgJzAnICsgMTAsIHdlIHdvdWxkIG5lZWQgdG8gc2V0IGl0IHRvICcwJyBhbmQgYWRkCisgICAg
ICAgIC8vIGEgJzEnIGluIGZyb250LiBIb3dldmVyIHdlIHJlYWNoIHRoZSBmaXJzdCBkaWdpdCBv
bmx5IGlmIGFsbCBmb2xsb3dpbmcKKyAgICAgICAgLy8gZGlnaXRzIGhhZCBiZWVuICc5JyBiZWZv
cmUgcm91bmRpbmcgdXAuIE5vdyBhbGwgdHJhaWxpbmcgZGlnaXRzIGFyZSAnMCcgYW5kCisgICAg
ICAgIC8vIHdlIHNpbXBseSBzd2l0Y2ggdGhlIGZpcnN0IGRpZ2l0IHRvICcxJyBhbmQgdXBkYXRl
IHRoZSBkZWNpbWFsLXBvaW50CisgICAgICAgIC8vIChpbmRpY2F0aW5nIHRoYXQgdGhlIHBvaW50
IGlzIG5vdyBvbmUgZGlnaXQgdG8gdGhlIHJpZ2h0KS4KKyAgICAgICAgaWYgKGJ1ZmZlclswXSA9
PSAnMCcgKyAxMCkgeworICAgICAgICAgICAgYnVmZmVyWzBdID0gJzEnOworICAgICAgICAgICAg
KCpkZWNpbWFsX3BvaW50KSsrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIC8v
IFRoZSBnaXZlbiBmcmFjdGlvbmFscyBudW1iZXIgcmVwcmVzZW50cyBhIGZpeGVkLXBvaW50IG51
bWJlciB3aXRoIGJpbmFyeQorICAgIC8vIHBvaW50IGF0IGJpdCAoLWV4cG9uZW50KS4KKyAgICAv
LyBQcmVjb25kaXRpb25zOgorICAgIC8vICAgLTEyOCA8PSBleHBvbmVudCA8PSAwLgorICAgIC8v
ICAgMCA8PSBmcmFjdGlvbmFscyAqIDJeZXhwb25lbnQgPCAxCisgICAgLy8gICBUaGUgYnVmZmVy
IGhvbGRzIHRoZSByZXN1bHQuCisgICAgLy8gVGhlIGZ1bmN0aW9uIHdpbGwgcm91bmQgaXRzIHJl
c3VsdC4gRHVyaW5nIHRoZSByb3VuZGluZy1wcm9jZXNzIGRpZ2l0cyBub3QKKyAgICAvLyBnZW5l
cmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBtaWdodCBiZSB1cGRhdGVkLCBhbmQgdGhlIGRlY2ltYWwt
cG9pbnQgdmFyaWFibGUKKyAgICAvLyBtaWdodCBiZSB1cGRhdGVkLiBJZiB0aGlzIGZ1bmN0aW9u
IGdlbmVyYXRlcyB0aGUgZGlnaXRzIDk5IGFuZCB0aGUgYnVmZmVyCisgICAgLy8gYWxyZWFkeSBj
b250YWluZWQgIjE5OSIgKHRodXMgeWllbGRpbmcgYSBidWZmZXIgb2YgIjE5OTk5IikgdGhlbiBh
CisgICAgLy8gcm91bmRpbmctdXAgd2lsbCBjaGFuZ2UgdGhlIGNvbnRlbnRzIG9mIHRoZSBidWZm
ZXIgdG8gIjIwMDAwIi4KKyAgICBzdGF0aWMgdm9pZCBGaWxsRnJhY3Rpb25hbHModWludDY0X3Qg
ZnJhY3Rpb25hbHMsIGludCBleHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGZyYWN0aW9uYWxfY291bnQsIFZlY3RvcjxjaGFyPiBidWZmZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCogbGVuZ3RoLCBpbnQqIGRlY2ltYWxfcG9pbnQpIHsK
KyAgICAgICAgQVNTRVJUKC0xMjggPD0gZXhwb25lbnQgJiYgZXhwb25lbnQgPD0gMCk7CisgICAg
ICAgIC8vICdmcmFjdGlvbmFscycgaXMgYSBmaXhlZC1wb2ludCBudW1iZXIsIHdpdGggYmluYXJ5
IHBvaW50IGF0IGJpdAorICAgICAgICAvLyAoLWV4cG9uZW50KS4gSW5zaWRlIHRoZSBmdW5jdGlv
biB0aGUgbm9uLWNvbnZlcnRlZCByZW1haW5kZXIgb2YgZnJhY3Rpb25hbHMKKyAgICAgICAgLy8g
aXMgYSBmaXhlZC1wb2ludCBudW1iZXIsIHdpdGggYmluYXJ5IHBvaW50IGF0IGJpdCAncG9pbnQn
LgorICAgICAgICBpZiAoLWV4cG9uZW50IDw9IDY0KSB7CisgICAgICAgICAgICAvLyBPbmUgNjQg
Yml0IG51bWJlciBpcyBzdWZmaWNpZW50LgorICAgICAgICAgICAgQVNTRVJUKGZyYWN0aW9uYWxz
ID4+IDU2ID09IDApOworICAgICAgICAgICAgaW50IHBvaW50ID0gLWV4cG9uZW50OworICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFjdGlvbmFsX2NvdW50OyArK2kpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoZnJhY3Rpb25hbHMgPT0gMCkgYnJlYWs7CisgICAgICAgICAgICAgICAg
Ly8gSW5zdGVhZCBvZiBtdWx0aXBseWluZyBieSAxMCB3ZSBtdWx0aXBseSBieSA1IGFuZCBhZGp1
c3QgdGhlIHBvaW50CisgICAgICAgICAgICAgICAgLy8gbG9jYXRpb24uIFRoaXMgd2F5IHRoZSBm
cmFjdGlvbmFscyB2YXJpYWJsZSB3aWxsIG5vdCBvdmVyZmxvdy4KKyAgICAgICAgICAgICAgICAv
LyBJbnZhcmlhbnQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbG9vcDogZnJhY3Rpb25hbHMgPCAy
XnBvaW50LgorICAgICAgICAgICAgICAgIC8vIEluaXRpYWxseSB3ZSBoYXZlOiBwb2ludCA8PSA2
NCBhbmQgZnJhY3Rpb25hbHMgPCAyXjU2CisgICAgICAgICAgICAgICAgLy8gQWZ0ZXIgZWFjaCBp
dGVyYXRpb24gdGhlIHBvaW50IGlzIGRlY3JlbWVudGVkIGJ5IG9uZS4KKyAgICAgICAgICAgICAg
ICAvLyBOb3RlIHRoYXQgNV4zID0gMTI1IDwgMTI4ID0gMl43LgorICAgICAgICAgICAgICAgIC8v
IFRoZXJlZm9yZSB0aHJlZSBpdGVyYXRpb25zIG9mIHRoaXMgbG9vcCB3aWxsIG5vdCBvdmVyZmxv
dyBmcmFjdGlvbmFscworICAgICAgICAgICAgICAgIC8vIChldmVuIHdpdGhvdXQgdGhlIHN1YnRy
YWN0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIGxvb3AgYm9keSkuIEF0IHRoaXMKKyAgICAgICAgICAg
ICAgICAvLyB0aW1lIHBvaW50IHdpbGwgc2F0aXNmeSBwb2ludCA8PSA2MSBhbmQgdGhlcmVmb3Jl
IGZyYWN0aW9uYWxzIDwgMl5wb2ludAorICAgICAgICAgICAgICAgIC8vIGFuZCBhbnkgZnVydGhl
ciBtdWx0aXBsaWNhdGlvbiBvZiBmcmFjdGlvbmFscyBieSA1IHdpbGwgbm90IG92ZXJmbG93Lgor
ICAgICAgICAgICAgICAgIGZyYWN0aW9uYWxzICo9IDU7CisgICAgICAgICAgICAgICAgcG9pbnQt
LTsKKyAgICAgICAgICAgICAgICBpbnQgZGlnaXQgPSBzdGF0aWNfY2FzdDxpbnQ+KGZyYWN0aW9u
YWxzID4+IHBvaW50KTsKKyAgICAgICAgICAgICAgICBidWZmZXJbKmxlbmd0aF0gPSAnMCcgKyBk
aWdpdDsKKyAgICAgICAgICAgICAgICAoKmxlbmd0aCkrKzsKKyAgICAgICAgICAgICAgICBmcmFj
dGlvbmFscyAtPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oZGlnaXQpIDw8IHBvaW50OworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgLy8gSWYgdGhlIGZpcnN0IGJpdCBhZnRlciB0aGUgcG9pbnQg
aXMgc2V0IHdlIGhhdmUgdG8gcm91bmQgdXAuCisgICAgICAgICAgICBpZiAoKChmcmFjdGlvbmFs
cyA+PiAocG9pbnQgLSAxKSkgJiAxKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgUm91bmRVcChi
dWZmZXIsIGxlbmd0aCwgZGVjaW1hbF9wb2ludCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSB7ICAvLyBXZSBuZWVkIDEyOCBiaXRzLgorICAgICAgICAgICAgQVNTRVJUKDY0IDwgLWV4
cG9uZW50ICYmIC1leHBvbmVudCA8PSAxMjgpOworICAgICAgICAgICAgVUludDEyOCBmcmFjdGlv
bmFsczEyOCA9IFVJbnQxMjgoZnJhY3Rpb25hbHMsIDApOworICAgICAgICAgICAgZnJhY3Rpb25h
bHMxMjguU2hpZnQoLWV4cG9uZW50IC0gNjQpOworICAgICAgICAgICAgaW50IHBvaW50ID0gMTI4
OworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFjdGlvbmFsX2NvdW50OyArK2kp
IHsKKyAgICAgICAgICAgICAgICBpZiAoZnJhY3Rpb25hbHMxMjguSXNaZXJvKCkpIGJyZWFrOwor
ICAgICAgICAgICAgICAgIC8vIEFzIGJlZm9yZTogaW5zdGVhZCBvZiBtdWx0aXBseWluZyBieSAx
MCB3ZSBtdWx0aXBseSBieSA1IGFuZCBhZGp1c3QgdGhlCisgICAgICAgICAgICAgICAgLy8gcG9p
bnQgbG9jYXRpb24uCisgICAgICAgICAgICAgICAgLy8gVGhpcyBtdWx0aXBsaWNhdGlvbiB3aWxs
IG5vdCBvdmVyZmxvdyBmb3IgdGhlIHNhbWUgcmVhc29ucyBhcyBiZWZvcmUuCisgICAgICAgICAg
ICAgICAgZnJhY3Rpb25hbHMxMjguTXVsdGlwbHkoNSk7CisgICAgICAgICAgICAgICAgcG9pbnQt
LTsKKyAgICAgICAgICAgICAgICBpbnQgZGlnaXQgPSBmcmFjdGlvbmFsczEyOC5EaXZNb2RQb3dl
ck9mMihwb2ludCk7CisgICAgICAgICAgICAgICAgYnVmZmVyWypsZW5ndGhdID0gJzAnICsgZGln
aXQ7CisgICAgICAgICAgICAgICAgKCpsZW5ndGgpKys7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoZnJhY3Rpb25hbHMxMjguQml0QXQocG9pbnQgLSAxKSA9PSAxKSB7CisgICAgICAg
ICAgICAgICAgUm91bmRVcChidWZmZXIsIGxlbmd0aCwgZGVjaW1hbF9wb2ludCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgLy8gUmVtb3ZlcyBsZWFk
aW5nIGFuZCB0cmFpbGluZyB6ZXJvcy4KKyAgICAvLyBJZiBsZWFkaW5nIHplcm9zIGFyZSByZW1v
dmVkIHRoZW4gdGhlIGRlY2ltYWwgcG9pbnQgcG9zaXRpb24gaXMgYWRqdXN0ZWQuCisgICAgc3Rh
dGljIHZvaWQgVHJpbVplcm9zKFZlY3RvcjxjaGFyPiBidWZmZXIsIGludCogbGVuZ3RoLCBpbnQq
IGRlY2ltYWxfcG9pbnQpIHsKKyAgICAgICAgd2hpbGUgKCpsZW5ndGggPiAwICYmIGJ1ZmZlclso
Kmxlbmd0aCkgLSAxXSA9PSAnMCcpIHsKKyAgICAgICAgICAgICgqbGVuZ3RoKS0tOworICAgICAg
ICB9CisgICAgICAgIGludCBmaXJzdF9ub25femVybyA9IDA7CisgICAgICAgIHdoaWxlIChmaXJz
dF9ub25femVybyA8ICpsZW5ndGggJiYgYnVmZmVyW2ZpcnN0X25vbl96ZXJvXSA9PSAnMCcpIHsK
KyAgICAgICAgICAgIGZpcnN0X25vbl96ZXJvKys7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZp
cnN0X25vbl96ZXJvICE9IDApIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSBmaXJzdF9ub25f
emVybzsgaSA8ICpsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIGJ1ZmZlcltpIC0gZmly
c3Rfbm9uX3plcm9dID0gYnVmZmVyW2ldOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKmxl
bmd0aCAtPSBmaXJzdF9ub25femVybzsKKyAgICAgICAgICAgICpkZWNpbWFsX3BvaW50IC09IGZp
cnN0X25vbl96ZXJvOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIGJvb2wgRmFz
dEZpeGVkRHRvYShkb3VibGUgdiwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IGZyYWN0aW9u
YWxfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgIGludCogbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAg
ICBpbnQqIGRlY2ltYWxfcG9pbnQpIHsKKyAgICAgICAgY29uc3QgdWludDMyX3Qga01heFVJbnQz
MiA9IDB4RkZGRkZGRkY7CisgICAgICAgIHVpbnQ2NF90IHNpZ25pZmljYW5kID0gRG91YmxlKHYp
LlNpZ25pZmljYW5kKCk7CisgICAgICAgIGludCBleHBvbmVudCA9IERvdWJsZSh2KS5FeHBvbmVu
dCgpOworICAgICAgICAvLyB2ID0gc2lnbmlmaWNhbmQgKiAyXmV4cG9uZW50ICh3aXRoIHNpZ25p
ZmljYW5kIGEgNTNiaXQgaW50ZWdlcikuCisgICAgICAgIC8vIElmIHRoZSBleHBvbmVudCBpcyBs
YXJnZXIgdGhhbiAyMCAoaS5lLiB3ZSBtYXkgaGF2ZSBhIDczYml0IG51bWJlcikgdGhlbiB3ZQor
ICAgICAgICAvLyBkb24ndCBrbm93IGhvdyB0byBjb21wdXRlIHRoZSByZXByZXNlbnRhdGlvbi4g
Ml43MyB+PSA5LjUqMTBeMjEuCisgICAgICAgIC8vIElmIG5lY2Vzc2FyeSB0aGlzIGxpbWl0IGNv
dWxkIHByb2JhYmx5IGJlIGluY3JlYXNlZCwgYnV0IHdlIGRvbid0IG5lZWQKKyAgICAgICAgLy8g
bW9yZS4KKyAgICAgICAgaWYgKGV4cG9uZW50ID4gMjApIHJldHVybiBmYWxzZTsKKyAgICAgICAg
aWYgKGZyYWN0aW9uYWxfY291bnQgPiAyMCkgcmV0dXJuIGZhbHNlOworICAgICAgICAqbGVuZ3Ro
ID0gMDsKKyAgICAgICAgLy8gQXQgbW9zdCBrRG91YmxlU2lnbmlmaWNhbmRTaXplIGJpdHMgb2Yg
dGhlIHNpZ25pZmljYW5kIGFyZSBub24temVyby4KKyAgICAgICAgLy8gR2l2ZW4gYSA2NCBiaXQg
aW50ZWdlciB3ZSBoYXZlIDExIDBzIGZvbGxvd2VkIGJ5IDUzIHBvdGVudGlhbGx5IG5vbi16ZXJv
CisgICAgICAgIC8vIGJpdHM6ICAwLi4xMSouLjB4eHguLjUzKi4ueHgKKyAgICAgICAgaWYgKGV4
cG9uZW50ICsga0RvdWJsZVNpZ25pZmljYW5kU2l6ZSA+IDY0KSB7CisgICAgICAgICAgICAvLyBU
aGUgZXhwb25lbnQgbXVzdCBiZSA+IDExLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8v
IFdlIGtub3cgdGhhdCB2ID0gc2lnbmlmaWNhbmQgKiAyXmV4cG9uZW50LgorICAgICAgICAgICAg
Ly8gQW5kIHRoZSBleHBvbmVudCA+IDExLgorICAgICAgICAgICAgLy8gV2Ugc2ltcGxpZnkgdGhl
IHRhc2sgYnkgZGl2aWRpbmcgdiBieSAxMF4xNy4KKyAgICAgICAgICAgIC8vIFRoZSBxdW90aWVu
dCBkZWxpdmVycyB0aGUgZmlyc3QgZGlnaXRzLCBhbmQgdGhlIHJlbWFpbmRlciBmaXRzIGludG8g
YSA2NAorICAgICAgICAgICAgLy8gYml0IG51bWJlci4KKyAgICAgICAgICAgIC8vIERpdmlkaW5n
IGJ5IDEwXjE3IGlzIGVxdWl2YWxlbnQgdG8gZGl2aWRpbmcgYnkgNV4xNyoyXjE3LgorICAgICAg
ICAgICAgY29uc3QgdWludDY0X3Qga0ZpdmUxNyA9IFVJTlQ2NF8yUEFSVF9DKDB4QjEsIEEyQkMy
RUM1KTsgIC8vIDVeMTcKKyAgICAgICAgICAgIHVpbnQ2NF90IGRpdmlzb3IgPSBrRml2ZTE3Owor
ICAgICAgICAgICAgaW50IGRpdmlzb3JfcG93ZXIgPSAxNzsKKyAgICAgICAgICAgIHVpbnQ2NF90
IGRpdmlkZW5kID0gc2lnbmlmaWNhbmQ7CisgICAgICAgICAgICB1aW50MzJfdCBxdW90aWVudDsK
KyAgICAgICAgICAgIHVpbnQ2NF90IHJlbWFpbmRlcjsKKyAgICAgICAgICAgIC8vIExldCB2ID0g
ZiAqIDJeZSB3aXRoIGYgPT0gc2lnbmlmaWNhbmQgYW5kIGUgPT0gZXhwb25lbnQuCisgICAgICAg
ICAgICAvLyBUaGVuIG5lZWQgcSAocXVvdGllbnQpIGFuZCByIChyZW1haW5kZXIpIGFzIGZvbGxv
d3M6CisgICAgICAgICAgICAvLyAgIHYgICAgICAgICAgICA9IHEgKiAxMF4xNyAgICAgICArIHIK
KyAgICAgICAgICAgIC8vICAgZiAqIDJeZSAgICAgID0gcSAqIDEwXjE3ICAgICAgICsgcgorICAg
ICAgICAgICAgLy8gICBmICogMl5lICAgICAgPSBxICogNV4xNyAqIDJeMTcgKyByCisgICAgICAg
ICAgICAvLyBJZiBlID4gMTcgdGhlbgorICAgICAgICAgICAgLy8gICBmICogMl4oZS0xNykgPSBx
ICogNV4xNyAgICAgICAgKyByLzJeMTcKKyAgICAgICAgICAgIC8vIGVsc2UKKyAgICAgICAgICAg
IC8vICAgZiAgPSBxICogNV4xNyAqIDJeKDE3LWUpICsgci8yXmUKKyAgICAgICAgICAgIGlmIChl
eHBvbmVudCA+IGRpdmlzb3JfcG93ZXIpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBvbmx5IGFs
bG93IGV4cG9uZW50cyBvZiB1cCB0byAyMCBhbmQgdGhlcmVmb3JlICgxNyAtIGUpIDw9IDMKKyAg
ICAgICAgICAgICAgICBkaXZpZGVuZCA8PD0gZXhwb25lbnQgLSBkaXZpc29yX3Bvd2VyOworICAg
ICAgICAgICAgICAgIHF1b3RpZW50ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGRpdmlkZW5kIC8g
ZGl2aXNvcik7CisgICAgICAgICAgICAgICAgcmVtYWluZGVyID0gKGRpdmlkZW5kICUgZGl2aXNv
cikgPDwgZGl2aXNvcl9wb3dlcjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgZGl2aXNvciA8PD0gZGl2aXNvcl9wb3dlciAtIGV4cG9uZW50OworICAgICAgICAgICAgICAg
IHF1b3RpZW50ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGRpdmlkZW5kIC8gZGl2aXNvcik7Cisg
ICAgICAgICAgICAgICAgcmVtYWluZGVyID0gKGRpdmlkZW5kICUgZGl2aXNvcikgPDwgZXhwb25l
bnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGaWxsRGlnaXRzMzIocXVvdGllbnQsIGJ1
ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAgICAgIEZpbGxEaWdpdHM2NEZpeGVkTGVuZ3RoKHJlbWFp
bmRlciwgZGl2aXNvcl9wb3dlciwgYnVmZmVyLCBsZW5ndGgpOworICAgICAgICAgICAgKmRlY2lt
YWxfcG9pbnQgPSAqbGVuZ3RoOworICAgICAgICB9IGVsc2UgaWYgKGV4cG9uZW50ID49IDApIHsK
KyAgICAgICAgICAgIC8vIDAgPD0gZXhwb25lbnQgPD0gMTEKKyAgICAgICAgICAgIHNpZ25pZmlj
YW5kIDw8PSBleHBvbmVudDsKKyAgICAgICAgICAgIEZpbGxEaWdpdHM2NChzaWduaWZpY2FuZCwg
YnVmZmVyLCBsZW5ndGgpOworICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSAqbGVuZ3RoOwor
ICAgICAgICB9IGVsc2UgaWYgKGV4cG9uZW50ID4gLWtEb3VibGVTaWduaWZpY2FuZFNpemUpIHsK
KyAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gY3V0IHRoZSBudW1iZXIuCisgICAgICAgICAgICB1
aW50NjRfdCBpbnRlZ3JhbHMgPSBzaWduaWZpY2FuZCA+PiAtZXhwb25lbnQ7CisgICAgICAgICAg
ICB1aW50NjRfdCBmcmFjdGlvbmFscyA9IHNpZ25pZmljYW5kIC0gKGludGVncmFscyA8PCAtZXhw
b25lbnQpOworICAgICAgICAgICAgaWYgKGludGVncmFscyA+IGtNYXhVSW50MzIpIHsKKyAgICAg
ICAgICAgICAgICBGaWxsRGlnaXRzNjQoaW50ZWdyYWxzLCBidWZmZXIsIGxlbmd0aCk7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEZpbGxEaWdpdHMzMihzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oaW50ZWdyYWxzKSwgYnVmZmVyLCBsZW5ndGgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSAqbGVuZ3RoOworICAgICAgICAgICAgRmlsbEZy
YWN0aW9uYWxzKGZyYWN0aW9uYWxzLCBleHBvbmVudCwgZnJhY3Rpb25hbF9jb3VudCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGxlbmd0aCwgZGVjaW1hbF9wb2ludCk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoZXhwb25lbnQgPCAtMTI4KSB7CisgICAgICAgICAgICAvLyBUaGlz
IGNvbmZpZ3VyYXRpb24gKHdpdGggYXQgbW9zdCAyMCBkaWdpdHMpIG1lYW5zIHRoYXQgYWxsIGRp
Z2l0cyBtdXN0IGJlCisgICAgICAgICAgICAvLyAwLgorICAgICAgICAgICAgQVNTRVJUKGZyYWN0
aW9uYWxfY291bnQgPD0gMjApOworICAgICAgICAgICAgYnVmZmVyWzBdID0gJ1wwJzsKKyAgICAg
ICAgICAgICpsZW5ndGggPSAwOworICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSAtZnJhY3Rp
b25hbF9jb3VudDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICpkZWNpbWFsX3BvaW50
ID0gMDsKKyAgICAgICAgICAgIEZpbGxGcmFjdGlvbmFscyhzaWduaWZpY2FuZCwgZXhwb25lbnQs
IGZyYWN0aW9uYWxfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBs
ZW5ndGgsIGRlY2ltYWxfcG9pbnQpOworICAgICAgICB9CisgICAgICAgIFRyaW1aZXJvcyhidWZm
ZXIsIGxlbmd0aCwgZGVjaW1hbF9wb2ludCk7CisgICAgICAgIGJ1ZmZlclsqbGVuZ3RoXSA9ICdc
MCc7CisgICAgICAgIGlmICgoKmxlbmd0aCkgPT0gMCkgeworICAgICAgICAgICAgLy8gVGhlIHN0
cmluZyBpcyBlbXB0eSBhbmQgdGhlIGRlY2ltYWxfcG9pbnQgdGh1cyBoYXMgbm8gaW1wb3J0YW5j
ZS4gTWltaWNrCisgICAgICAgICAgICAvLyBHYXkncyBkdG9hIGFuZCBhbmQgc2V0IGl0IHRvIC1m
cmFjdGlvbmFsX2NvdW50LgorICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSAtZnJhY3Rpb25h
bF9jb3VudDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCit9
ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvZHRvYS9maXhlZC1kdG9hLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL2R0b2EvZml4ZWQtZHRvYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZkODJhZTNmMzA1MmE0ZTY0ZjNlNWRl
Yjk4ZTc5MzAwMWRlMzAyZTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL2R0b2EvZml4ZWQtZHRvYS5oCkBAIC0wLDAgKzEsNTYgQEAKKy8vIENvcHlyaWdodCAy
MDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8g
ICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAg
ICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
Ly8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8g
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworI2lmbmRlZiBET1VCTEVfQ09OVkVSU0lPTl9GSVhFRF9EVE9BX0hfCisj
ZGVmaW5lIERPVUJMRV9DT05WRVJTSU9OX0ZJWEVEX0RUT0FfSF8KKworI2luY2x1ZGUgInV0aWxz
LmgiCisKK25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgLy8gUHJvZHVj
ZXMgZGlnaXRzIG5lY2Vzc2FyeSB0byBwcmludCBhIGdpdmVuIG51bWJlciB3aXRoCisgICAgLy8g
J2ZyYWN0aW9uYWxfY291bnQnIGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludC4KKyAgICAv
LyBUaGUgYnVmZmVyIG11c3QgYmUgYmlnIGVub3VnaCB0byBob2xkIHRoZSByZXN1bHQgcGx1cyBv
bmUgdGVybWluYXRpbmcgbnVsbAorICAgIC8vIGNoYXJhY3Rlci4KKyAgICAvLworICAgIC8vIFRo
ZSBwcm9kdWNlZCBkaWdpdHMgbWlnaHQgYmUgdG9vIHNob3J0IGluIHdoaWNoIGNhc2UgdGhlIGNh
bGxlciBoYXMgdG8gZmlsbAorICAgIC8vIHRoZSBnYXBzIHdpdGggJzAncy4KKyAgICAvLyBFeGFt
cGxlOiBGYXN0Rml4ZWREdG9hKDAuMDAxLCA1LCAuLi4pIGlzIGFsbG93ZWQgdG8gcmV0dXJuIGJ1
ZmZlciA9ICIxIiwgYW5kCisgICAgLy8gZGVjaW1hbF9wb2ludCA9IC0yLgorICAgIC8vIEhhbGZ3
YXkgY2FzZXMgYXJlIHJvdW5kZWQgdG93YXJkcyArLy1JbmZpbml0eSAoYXdheSBmcm9tIDApLiBU
aGUgY2FsbAorICAgIC8vIEZhc3RGaXhlZER0b2EoMC4xNSwgMiwgLi4uKSB0aHVzIHJldHVybnMg
YnVmZmVyID0gIjIiLCBkZWNpbWFsX3BvaW50ID0gMC4KKyAgICAvLyBUaGUgcmV0dXJuZWQgYnVm
ZmVyIG1heSBjb250YWluIGRpZ2l0cyB0aGF0IHdvdWxkIGJlIHRydW5jYXRlZCBmcm9tIHRoZQor
ICAgIC8vIHNob3J0ZXN0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbnB1dC4KKyAgICAvLworICAg
IC8vIFRoaXMgbWV0aG9kIG9ubHkgd29ya3MgZm9yIHNvbWUgcGFyYW1ldGVycy4gSWYgaXQgY2Fu
J3QgaGFuZGxlIHRoZSBpbnB1dCBpdAorICAgIC8vIHJldHVybnMgZmFsc2UuIFRoZSBvdXRwdXQg
aXMgbnVsbC10ZXJtaW5hdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIHN1Y2NlZWRzLgorICAgIGJvb2wg
RmFzdEZpeGVkRHRvYShkb3VibGUgdiwgaW50IGZyYWN0aW9uYWxfY291bnQsCisgICAgICAgICAg
ICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXIsIGludCogbGVuZ3RoLCBpbnQqIGRlY2lt
YWxfcG9pbnQpOworICAgIAorfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCisKKyNl
bmRpZiAgLy8gRE9VQkxFX0NPTlZFUlNJT05fRklYRURfRFRPQV9IXwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL3N0cnRvZC5jYyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvZHRvYS9zdHJ0b2QuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjRmZTExMWEwYTE1OGZkMDBjMjMw
MWVhN2I3OGM5MTA1NTc3MmVhMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvZHRvYS9zdHJ0b2QuY2MKQEAgLTAsMCArMSw0NDEgQEAKKy8vIENvcHlyaWdodCAy
MDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8g
ICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAg
ICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
Ly8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8g
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgor
CisjaW5jbHVkZSAic3RydG9kLmgiCisjaW5jbHVkZSAiYmlnbnVtLmgiCisjaW5jbHVkZSAiY2Fj
aGVkLXBvd2Vycy5oIgorI2luY2x1ZGUgImRvdWJsZS5oIgorCituYW1lc3BhY2UgZG91YmxlX2Nv
bnZlcnNpb24geworICAgIAorICAgIC8vIDJeNTMgPSA5MDA3MTk5MjU0NzQwOTkyLgorICAgIC8v
IEFueSBpbnRlZ2VyIHdpdGggYXQgbW9zdCAxNSBkZWNpbWFsIGRpZ2l0cyB3aWxsIGhlbmNlIGZp
dCBpbnRvIGEgZG91YmxlCisgICAgLy8gKHdoaWNoIGhhcyBhIDUzYml0IHNpZ25pZmljYW5kKSB3
aXRob3V0IGxvc3Mgb2YgcHJlY2lzaW9uLgorICAgIHN0YXRpYyBjb25zdCBpbnQga01heEV4YWN0
RG91YmxlSW50ZWdlckRlY2ltYWxEaWdpdHMgPSAxNTsKKyAgICAvLyAyXjY0ID0gMTg0NDY3NDQw
NzM3MDk1NTE2MTYgPiAxMF4xOQorICAgIHN0YXRpYyBjb25zdCBpbnQga01heFVpbnQ2NERlY2lt
YWxEaWdpdHMgPSAxOTsKKyAgICAKKyAgICAvLyBNYXggZG91YmxlOiAxLjc5NzY5MzEzNDg2MjMx
NTcgeCAxMF4zMDgKKyAgICAvLyBNaW4gbm9uLXplcm8gZG91YmxlOiA0Ljk0MDY1NjQ1ODQxMjQ2
NTQgeCAxMF4tMzI0CisgICAgLy8gQW55IHggPj0gMTBeMzA5IGlzIGludGVycHJldGVkIGFzICtp
bmZpbml0eS4KKyAgICAvLyBBbnkgeCA8PSAxMF4tMzI0IGlzIGludGVycHJldGVkIGFzIDAuCisg
ICAgLy8gTm90ZSB0aGF0IDIuNWUtMzI0IChkZXNwaXRlIGJlaW5nIHNtYWxsZXIgdGhhbiB0aGUg
bWluIGRvdWJsZSkgd2lsbCBiZSByZWFkCisgICAgLy8gYXMgbm9uLXplcm8gKGVxdWFsIHRvIHRo
ZSBtaW4gbm9uLXplcm8gZG91YmxlKS4KKyAgICBzdGF0aWMgY29uc3QgaW50IGtNYXhEZWNpbWFs
UG93ZXIgPSAzMDk7CisgICAgc3RhdGljIGNvbnN0IGludCBrTWluRGVjaW1hbFBvd2VyID0gLTMy
NDsKKyAgICAKKyAgICAvLyAyXjY0ID0gMTg0NDY3NDQwNzM3MDk1NTE2MTYKKyAgICBzdGF0aWMg
Y29uc3QgdWludDY0X3Qga01heFVpbnQ2NCA9IFVJTlQ2NF8yUEFSVF9DKDB4RkZGRkZGRkYsIEZG
RkZGRkZGKTsKKyAgICAKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgZG91YmxlIGV4YWN0X3Bvd2Vy
c19vZl90ZW5bXSA9IHsKKyAgICAgICAgMS4wLCAgLy8gMTBeMAorICAgICAgICAxMC4wLAorICAg
ICAgICAxMDAuMCwKKyAgICAgICAgMTAwMC4wLAorICAgICAgICAxMDAwMC4wLAorICAgICAgICAx
MDAwMDAuMCwKKyAgICAgICAgMTAwMDAwMC4wLAorICAgICAgICAxMDAwMDAwMC4wLAorICAgICAg
ICAxMDAwMDAwMDAuMCwKKyAgICAgICAgMTAwMDAwMDAwMC4wLAorICAgICAgICAxMDAwMDAwMDAw
MC4wLCAgLy8gMTBeMTAKKyAgICAgICAgMTAwMDAwMDAwMDAwLjAsCisgICAgICAgIDEwMDAwMDAw
MDAwMDAuMCwKKyAgICAgICAgMTAwMDAwMDAwMDAwMDAuMCwKKyAgICAgICAgMTAwMDAwMDAwMDAw
MDAwLjAsCisgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAuMCwKKyAgICAgICAgMTAwMDAwMDAwMDAw
MDAwMDAuMCwKKyAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwLjAsCisgICAgICAgIDEwMDAwMDAw
MDAwMDAwMDAwMDAuMCwKKyAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAuMCwKKyAgICAgICAg
MTAwMDAwMDAwMDAwMDAwMDAwMDAwLjAsICAvLyAxMF4yMAorICAgICAgICAxMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLjAsCisgICAgICAgIC8vIDEwXjIyID0gMHgyMWUxOWUwYzliYWIyNDAwMDAwID0g
MHg4Nzg2NzgzMjZlYWM5ICogMl4yMgorICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4w
CisgICAgfTsKKyAgICBzdGF0aWMgY29uc3QgaW50IGtFeGFjdFBvd2Vyc09mVGVuU2l6ZSA9IEFS
UkFZX1NJWkUoZXhhY3RfcG93ZXJzX29mX3Rlbik7CisgICAgCisgICAgLy8gTWF4aW11bSBudW1i
ZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIGluIHRoZSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uLgor
ICAgIC8vIEluIGZhY3QgdGhlIHZhbHVlIGlzIDc3MiAoc2VlIGNvbnZlcnNpb25zLmNjKSwgYnV0
IHRvIGdpdmUgdXMgc29tZSBtYXJnaW4KKyAgICAvLyB3ZSByb3VuZCB1cCB0byA3ODAuCisgICAg
c3RhdGljIGNvbnN0IGludCBrTWF4U2lnbmlmaWNhbnREZWNpbWFsRGlnaXRzID0gNzgwOworICAg
IAorICAgIHN0YXRpYyBWZWN0b3I8Y29uc3QgY2hhcj4gVHJpbUxlYWRpbmdaZXJvcyhWZWN0b3I8
Y29uc3QgY2hhcj4gYnVmZmVyKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYnVmZmVy
Lmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChidWZmZXJbaV0gIT0gJzAnKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlci5TdWJWZWN0b3IoaSwgYnVmZmVyLmxlbmd0aCgp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gVmVjdG9yPGNvbnN0
IGNoYXI+KGJ1ZmZlci5zdGFydCgpLCAwKTsKKyAgICB9CisgICAgCisgICAgCisgICAgc3RhdGlj
IFZlY3Rvcjxjb25zdCBjaGFyPiBUcmltVHJhaWxpbmdaZXJvcyhWZWN0b3I8Y29uc3QgY2hhcj4g
YnVmZmVyKSB7CisgICAgICAgIGZvciAoaW50IGkgPSBidWZmZXIubGVuZ3RoKCkgLSAxOyBpID49
IDA7IC0taSkgeworICAgICAgICAgICAgaWYgKGJ1ZmZlcltpXSAhPSAnMCcpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gYnVmZmVyLlN1YlZlY3RvcigwLCBpICsgMSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFZlY3Rvcjxjb25zdCBjaGFyPihidWZmZXIuc3Rh
cnQoKSwgMCk7CisgICAgfQorICAgIAorICAgIAorICAgIHN0YXRpYyB2b2lkIFRyaW1Ub01heFNp
Z25pZmljYW50RGlnaXRzKFZlY3Rvcjxjb25zdCBjaGFyPiBidWZmZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV4cG9uZW50LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIHNpZ25pZmljYW50X2J1ZmZlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHNpZ25pZmlj
YW50X2V4cG9uZW50KSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwga01heFNpZ25pZmlj
YW50RGVjaW1hbERpZ2l0cyAtIDE7ICsraSkgeworICAgICAgICAgICAgc2lnbmlmaWNhbnRfYnVm
ZmVyW2ldID0gYnVmZmVyW2ldOworICAgICAgICB9CisgICAgICAgIC8vIFRoZSBpbnB1dCBidWZm
ZXIgaGFzIGJlZW4gdHJpbW1lZC4gVGhlcmVmb3JlIHRoZSBsYXN0IGRpZ2l0IG11c3QgYmUKKyAg
ICAgICAgLy8gZGlmZmVyZW50IGZyb20gJzAnLgorICAgICAgICBBU1NFUlQoYnVmZmVyW2J1ZmZl
ci5sZW5ndGgoKSAtIDFdICE9ICcwJyk7CisgICAgICAgIC8vIFNldCB0aGUgbGFzdCBkaWdpdCB0
byBiZSBub24temVyby4gVGhpcyBpcyBzdWZmaWNpZW50IHRvIGd1YXJhbnRlZQorICAgICAgICAv
LyBjb3JyZWN0IHJvdW5kaW5nLgorICAgICAgICBzaWduaWZpY2FudF9idWZmZXJba01heFNpZ25p
ZmljYW50RGVjaW1hbERpZ2l0cyAtIDFdID0gJzEnOworICAgICAgICAqc2lnbmlmaWNhbnRfZXhw
b25lbnQgPQorICAgICAgICBleHBvbmVudCArIChidWZmZXIubGVuZ3RoKCkgLSBrTWF4U2lnbmlm
aWNhbnREZWNpbWFsRGlnaXRzKTsKKyAgICB9CisgICAgCisgICAgLy8gUmVhZHMgZGlnaXRzIGZy
b20gdGhlIGJ1ZmZlciBhbmQgY29udmVydHMgdGhlbSB0byBhIHVpbnQ2NC4KKyAgICAvLyBSZWFk
cyBpbiBhcyBtYW55IGRpZ2l0cyBhcyBmaXQgaW50byBhIHVpbnQ2NC4KKyAgICAvLyBXaGVuIHRo
ZSBzdHJpbmcgc3RhcnRzIHdpdGggIjE4NDQ2NzQ0MDczNzA5NTUxNjEiIG5vIGZ1cnRoZXIgZGln
aXQgaXMgcmVhZC4KKyAgICAvLyBTaW5jZSAyXjY0ID0gMTg0NDY3NDQwNzM3MDk1NTE2MTYgaXQg
d291bGQgc3RpbGwgYmUgcG9zc2libGUgcmVhZCBhbm90aGVyCisgICAgLy8gZGlnaXQgaWYgaXQg
d2FzIGxlc3Mgb3IgZXF1YWwgdGhhbiA2LCBidXQgdGhpcyB3b3VsZCBjb21wbGljYXRlIHRoZSBj
b2RlLgorICAgIHN0YXRpYyB1aW50NjRfdCBSZWFkVWludDY0KFZlY3Rvcjxjb25zdCBjaGFyPiBi
dWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBudW1iZXJfb2ZfcmVh
ZF9kaWdpdHMpIHsKKyAgICAgICAgdWludDY0X3QgcmVzdWx0ID0gMDsKKyAgICAgICAgaW50IGkg
PSAwOworICAgICAgICB3aGlsZSAoaSA8IGJ1ZmZlci5sZW5ndGgoKSAmJiByZXN1bHQgPD0gKGtN
YXhVaW50NjQgLyAxMCAtIDEpKSB7CisgICAgICAgICAgICBpbnQgZGlnaXQgPSBidWZmZXJbaSsr
XSAtICcwJzsKKyAgICAgICAgICAgIEFTU0VSVCgwIDw9IGRpZ2l0ICYmIGRpZ2l0IDw9IDkpOwor
ICAgICAgICAgICAgcmVzdWx0ID0gMTAgKiByZXN1bHQgKyBkaWdpdDsKKyAgICAgICAgfQorICAg
ICAgICAqbnVtYmVyX29mX3JlYWRfZGlnaXRzID0gaTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisgICAgCisgICAgCisgICAgLy8gUmVhZHMgYSBEaXlGcCBmcm9tIHRoZSBidWZmZXIu
CisgICAgLy8gVGhlIHJldHVybmVkIERpeUZwIGlzIG5vdCBuZWNlc3NhcmlseSBub3JtYWxpemVk
LgorICAgIC8vIElmIHJlbWFpbmluZ19kZWNpbWFscyBpcyB6ZXJvIHRoZW4gdGhlIHJldHVybmVk
IERpeUZwIGlzIGFjY3VyYXRlLgorICAgIC8vIE90aGVyd2lzZSBpdCBoYXMgYmVlbiByb3VuZGVk
IGFuZCBoYXMgZXJyb3Igb2YgYXQgbW9zdCAxLzIgdWxwLgorICAgIHN0YXRpYyB2b2lkIFJlYWRE
aXlGcChWZWN0b3I8Y29uc3QgY2hhcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICBEaXlGcCogcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHJlbWFpbmlu
Z19kZWNpbWFscykgeworICAgICAgICBpbnQgcmVhZF9kaWdpdHM7CisgICAgICAgIHVpbnQ2NF90
IHNpZ25pZmljYW5kID0gUmVhZFVpbnQ2NChidWZmZXIsICZyZWFkX2RpZ2l0cyk7CisgICAgICAg
IGlmIChidWZmZXIubGVuZ3RoKCkgPT0gcmVhZF9kaWdpdHMpIHsKKyAgICAgICAgICAgICpyZXN1
bHQgPSBEaXlGcChzaWduaWZpY2FuZCwgMCk7CisgICAgICAgICAgICAqcmVtYWluaW5nX2RlY2lt
YWxzID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFJvdW5kIHRoZSBzaWdu
aWZpY2FuZC4KKyAgICAgICAgICAgIGlmIChidWZmZXJbcmVhZF9kaWdpdHNdID49ICc1Jykgewor
ICAgICAgICAgICAgICAgIHNpZ25pZmljYW5kKys7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAvLyBDb21wdXRlIHRoZSBiaW5hcnkgZXhwb25lbnQuCisgICAgICAgICAgICBpbnQgZXhwb25l
bnQgPSAwOworICAgICAgICAgICAgKnJlc3VsdCA9IERpeUZwKHNpZ25pZmljYW5kLCBleHBvbmVu
dCk7CisgICAgICAgICAgICAqcmVtYWluaW5nX2RlY2ltYWxzID0gYnVmZmVyLmxlbmd0aCgpIC0g
cmVhZF9kaWdpdHM7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgc3RhdGljIGJv
b2wgRG91YmxlU3RydG9kKFZlY3Rvcjxjb25zdCBjaGFyPiB0cmltbWVkLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRvdWJsZSogcmVzdWx0KSB7CisjaWYgIWRlZmluZWQoRE9VQkxFX0NPTlZFUlNJT05fQ09S
UkVDVF9ET1VCTEVfT1BFUkFUSU9OUykKKyAgICAgICAgLy8gT24geDg2IHRoZSBmbG9hdGluZy1w
b2ludCBzdGFjayBjYW4gYmUgNjQgb3IgODAgYml0cyB3aWRlLiBJZiBpdCBpcworICAgICAgICAv
LyA4MCBiaXRzIHdpZGUgKGFzIGlzIHRoZSBjYXNlIG9uIExpbnV4KSB0aGVuIGRvdWJsZS1yb3Vu
ZGluZyBvY2N1cnMgYW5kIHRoZQorICAgICAgICAvLyByZXN1bHQgaXMgbm90IGFjY3VyYXRlLgor
ICAgICAgICAvLyBXZSBrbm93IHRoYXQgV2luZG93czMyIHVzZXMgNjQgYml0cyBhbmQgaXMgdGhl
cmVmb3JlIGFjY3VyYXRlLgorICAgICAgICAvLyBOb3RlIHRoYXQgdGhlIEFSTSBzaW11bGF0b3Ig
aXMgY29tcGlsZWQgZm9yIDMyYml0cy4gSXQgdGhlcmVmb3JlIGV4aGliaXRzCisgICAgICAgIC8v
IHRoZSBzYW1lIHByb2JsZW0uCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorICAgICAg
ICBpZiAodHJpbW1lZC5sZW5ndGgoKSA8PSBrTWF4RXhhY3REb3VibGVJbnRlZ2VyRGVjaW1hbERp
Z2l0cykgeworICAgICAgICAgICAgaW50IHJlYWRfZGlnaXRzOworICAgICAgICAgICAgLy8gVGhl
IHRyaW1tZWQgaW5wdXQgZml0cyBpbnRvIGEgZG91YmxlLgorICAgICAgICAgICAgLy8gSWYgdGhl
IDEwXmV4cG9uZW50IChyZXNwLiAxMF4tZXhwb25lbnQpIGZpdHMgaW50byBhIGRvdWJsZSB0b28g
dGhlbiB3ZQorICAgICAgICAgICAgLy8gY2FuIGNvbXB1dGUgdGhlIHJlc3VsdC1kb3VibGUgc2lt
cGx5IGJ5IG11bHRpcGx5aW5nIChyZXNwLiBkaXZpZGluZykgdGhlCisgICAgICAgICAgICAvLyB0
d28gbnVtYmVycy4KKyAgICAgICAgICAgIC8vIFRoaXMgaXMgcG9zc2libGUgYmVjYXVzZSBJRUVF
IGd1YXJhbnRlZXMgdGhhdCBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zCisgICAgICAgICAgICAv
LyByZXR1cm4gdGhlIGJlc3QgcG9zc2libGUgYXBwcm94aW1hdGlvbi4KKyAgICAgICAgICAgIGlm
IChleHBvbmVudCA8IDAgJiYgLWV4cG9uZW50IDwga0V4YWN0UG93ZXJzT2ZUZW5TaXplKSB7Cisg
ICAgICAgICAgICAgICAgLy8gMTBeLWV4cG9uZW50IGZpdHMgaW50byBhIGRvdWJsZS4KKyAgICAg
ICAgICAgICAgICAqcmVzdWx0ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihSZWFkVWludDY0KHRyaW1t
ZWQsICZyZWFkX2RpZ2l0cykpOworICAgICAgICAgICAgICAgIEFTU0VSVChyZWFkX2RpZ2l0cyA9
PSB0cmltbWVkLmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICAqcmVzdWx0IC89IGV4YWN0X3Bv
d2Vyc19vZl90ZW5bLWV4cG9uZW50XTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgwIDw9IGV4cG9uZW50ICYmIGV4cG9uZW50IDwg
a0V4YWN0UG93ZXJzT2ZUZW5TaXplKSB7CisgICAgICAgICAgICAgICAgLy8gMTBeZXhwb25lbnQg
Zml0cyBpbnRvIGEgZG91YmxlLgorICAgICAgICAgICAgICAgICpyZXN1bHQgPSBzdGF0aWNfY2Fz
dDxkb3VibGU+KFJlYWRVaW50NjQodHJpbW1lZCwgJnJlYWRfZGlnaXRzKSk7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKHJlYWRfZGlnaXRzID09IHRyaW1tZWQubGVuZ3RoKCkpOworICAgICAgICAg
ICAgICAgICpyZXN1bHQgKj0gZXhhY3RfcG93ZXJzX29mX3RlbltleHBvbmVudF07CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgcmVt
YWluaW5nX2RpZ2l0cyA9CisgICAgICAgICAgICBrTWF4RXhhY3REb3VibGVJbnRlZ2VyRGVjaW1h
bERpZ2l0cyAtIHRyaW1tZWQubGVuZ3RoKCk7CisgICAgICAgICAgICBpZiAoKDAgPD0gZXhwb25l
bnQpICYmCisgICAgICAgICAgICAgICAgKGV4cG9uZW50IC0gcmVtYWluaW5nX2RpZ2l0cyA8IGtF
eGFjdFBvd2Vyc09mVGVuU2l6ZSkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgdHJpbW1lZCBz
dHJpbmcgd2FzIHNob3J0IGFuZCB3ZSBjYW4gbXVsdGlwbHkgaXQgd2l0aAorICAgICAgICAgICAg
ICAgIC8vIDEwXnJlbWFpbmluZ19kaWdpdHMuIEFzIGEgcmVzdWx0IHRoZSByZW1haW5pbmcgZXhw
b25lbnQgbm93IGZpdHMKKyAgICAgICAgICAgICAgICAvLyBpbnRvIGEgZG91YmxlIHRvby4KKyAg
ICAgICAgICAgICAgICAqcmVzdWx0ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihSZWFkVWludDY0KHRy
aW1tZWQsICZyZWFkX2RpZ2l0cykpOworICAgICAgICAgICAgICAgIEFTU0VSVChyZWFkX2RpZ2l0
cyA9PSB0cmltbWVkLmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICAqcmVzdWx0ICo9IGV4YWN0
X3Bvd2Vyc19vZl90ZW5bcmVtYWluaW5nX2RpZ2l0c107CisgICAgICAgICAgICAgICAgKnJlc3Vs
dCAqPSBleGFjdF9wb3dlcnNfb2ZfdGVuW2V4cG9uZW50IC0gcmVtYWluaW5nX2RpZ2l0c107Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBSZXR1cm5zIDEw
XmV4cG9uZW50IGFzIGFuIGV4YWN0IERpeUZwLgorICAgIC8vIFRoZSBnaXZlbiBleHBvbmVudCBt
dXN0IGJlIGluIHRoZSByYW5nZSBbMTsga0RlY2ltYWxFeHBvbmVudERpc3RhbmNlWy4KKyAgICBz
dGF0aWMgRGl5RnAgQWRqdXN0bWVudFBvd2VyT2ZUZW4oaW50IGV4cG9uZW50KSB7CisgICAgICAg
IEFTU0VSVCgwIDwgZXhwb25lbnQpOworICAgICAgICBBU1NFUlQoZXhwb25lbnQgPCBQb3dlcnNP
ZlRlbkNhY2hlOjprRGVjaW1hbEV4cG9uZW50RGlzdGFuY2UpOworICAgICAgICAvLyBTaW1wbHkg
aGFyZGNvZGUgdGhlIHJlbWFpbmluZyBwb3dlcnMgZm9yIHRoZSBnaXZlbiBkZWNpbWFsIGV4cG9u
ZW50CisgICAgICAgIC8vIGRpc3RhbmNlLgorICAgICAgICBBU1NFUlQoUG93ZXJzT2ZUZW5DYWNo
ZTo6a0RlY2ltYWxFeHBvbmVudERpc3RhbmNlID09IDgpOworICAgICAgICBzd2l0Y2ggKGV4cG9u
ZW50KSB7CisgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBEaXlGcChVSU5UNjRfMlBBUlRfQygw
eGEwMDAwMDAwLCAwMDAwMDAwMCksIC02MCk7CisgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBE
aXlGcChVSU5UNjRfMlBBUlRfQygweGM4MDAwMDAwLCAwMDAwMDAwMCksIC01Nyk7CisgICAgICAg
ICAgICBjYXNlIDM6IHJldHVybiBEaXlGcChVSU5UNjRfMlBBUlRfQygweGZhMDAwMDAwLCAwMDAw
MDAwMCksIC01NCk7CisgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBEaXlGcChVSU5UNjRfMlBB
UlRfQygweDljNDAwMDAwLCAwMDAwMDAwMCksIC01MCk7CisgICAgICAgICAgICBjYXNlIDU6IHJl
dHVybiBEaXlGcChVSU5UNjRfMlBBUlRfQygweGMzNTAwMDAwLCAwMDAwMDAwMCksIC00Nyk7Cisg
ICAgICAgICAgICBjYXNlIDY6IHJldHVybiBEaXlGcChVSU5UNjRfMlBBUlRfQygweGY0MjQwMDAw
LCAwMDAwMDAwMCksIC00NCk7CisgICAgICAgICAgICBjYXNlIDc6IHJldHVybiBEaXlGcChVSU5U
NjRfMlBBUlRfQygweDk4OTY4MDAwLCAwMDAwMDAwMCksIC00MCk7CisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIERpeUZwKDAsIDApOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIC8vIElm
IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgdGhlbiB0aGUgcmVzdWx0IGlzIHRoZSBjb3JyZWN0
IGRvdWJsZS4KKyAgICAvLyBPdGhlcndpc2UgaXQgaXMgZWl0aGVyIHRoZSBjb3JyZWN0IGRvdWJs
ZSBvciB0aGUgZG91YmxlIHRoYXQgaXMganVzdCBiZWxvdworICAgIC8vIHRoZSBjb3JyZWN0IGRv
dWJsZS4KKyAgICBzdGF0aWMgYm9vbCBEaXlGcFN0cnRvZChWZWN0b3I8Y29uc3QgY2hhcj4gYnVm
ZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBvbmVudCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkb3VibGUqIHJlc3VsdCkgeworICAgICAgICBEaXlGcCBpbnB1
dDsKKyAgICAgICAgaW50IHJlbWFpbmluZ19kZWNpbWFsczsKKyAgICAgICAgUmVhZERpeUZwKGJ1
ZmZlciwgJmlucHV0LCAmcmVtYWluaW5nX2RlY2ltYWxzKTsKKyAgICAgICAgLy8gU2luY2Ugd2Ug
bWF5IGhhdmUgZHJvcHBlZCBzb21lIGRpZ2l0cyB0aGUgaW5wdXQgaXMgbm90IGFjY3VyYXRlLgor
ICAgICAgICAvLyBJZiByZW1haW5pbmdfZGVjaW1hbHMgaXMgZGlmZmVyZW50IHRoYW4gMCB0aGFu
IHRoZSBlcnJvciBpcyBhdCBtb3N0CisgICAgICAgIC8vIC41IHVscCAodW5pdCBpbiB0aGUgbGFz
dCBwbGFjZSkuCisgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZGVhbCB3aXRoIGZyYWN0aW9u
cyBhbmQgdGhlcmVmb3JlIGtlZXAgYSBjb21tb24KKyAgICAgICAgLy8gZGVub21pbmF0b3IuCisg
ICAgICAgIGNvbnN0IGludCBrRGVub21pbmF0b3JMb2cgPSAzOworICAgICAgICBjb25zdCBpbnQg
a0Rlbm9taW5hdG9yID0gMSA8PCBrRGVub21pbmF0b3JMb2c7CisgICAgICAgIC8vIE1vdmUgdGhl
IHJlbWFpbmluZyBkZWNpbWFscyBpbnRvIHRoZSBleHBvbmVudC4KKyAgICAgICAgZXhwb25lbnQg
Kz0gcmVtYWluaW5nX2RlY2ltYWxzOworICAgICAgICBpbnQgZXJyb3IgPSAocmVtYWluaW5nX2Rl
Y2ltYWxzID09IDAgPyAwIDoga0Rlbm9taW5hdG9yIC8gMik7CisgICAgICAgIAorICAgICAgICBp
bnQgb2xkX2UgPSBpbnB1dC5lKCk7CisgICAgICAgIGlucHV0Lk5vcm1hbGl6ZSgpOworICAgICAg
ICBlcnJvciA8PD0gb2xkX2UgLSBpbnB1dC5lKCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQo
ZXhwb25lbnQgPD0gUG93ZXJzT2ZUZW5DYWNoZTo6a01heERlY2ltYWxFeHBvbmVudCk7CisgICAg
ICAgIGlmIChleHBvbmVudCA8IFBvd2Vyc09mVGVuQ2FjaGU6OmtNaW5EZWNpbWFsRXhwb25lbnQp
IHsKKyAgICAgICAgICAgICpyZXN1bHQgPSAwLjA7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICBEaXlGcCBjYWNoZWRfcG93ZXI7CisgICAgICAgIGludCBjYWNo
ZWRfZGVjaW1hbF9leHBvbmVudDsKKyAgICAgICAgUG93ZXJzT2ZUZW5DYWNoZTo6R2V0Q2FjaGVk
UG93ZXJGb3JEZWNpbWFsRXhwb25lbnQoZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjYWNoZWRfcG93ZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZj
YWNoZWRfZGVjaW1hbF9leHBvbmVudCk7CisgICAgICAgIAorICAgICAgICBpZiAoY2FjaGVkX2Rl
Y2ltYWxfZXhwb25lbnQgIT0gZXhwb25lbnQpIHsKKyAgICAgICAgICAgIGludCBhZGp1c3RtZW50
X2V4cG9uZW50ID0gZXhwb25lbnQgLSBjYWNoZWRfZGVjaW1hbF9leHBvbmVudDsKKyAgICAgICAg
ICAgIERpeUZwIGFkanVzdG1lbnRfcG93ZXIgPSBBZGp1c3RtZW50UG93ZXJPZlRlbihhZGp1c3Rt
ZW50X2V4cG9uZW50KTsKKyAgICAgICAgICAgIGlucHV0Lk11bHRpcGx5KGFkanVzdG1lbnRfcG93
ZXIpOworICAgICAgICAgICAgaWYgKGtNYXhVaW50NjREZWNpbWFsRGlnaXRzIC0gYnVmZmVyLmxl
bmd0aCgpID49IGFkanVzdG1lbnRfZXhwb25lbnQpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUg
cHJvZHVjdCBvZiBpbnB1dCB3aXRoIHRoZSBhZGp1c3RtZW50IHBvd2VyIGZpdHMgaW50byBhIDY0
IGJpdAorICAgICAgICAgICAgICAgIC8vIGludGVnZXIuCisgICAgICAgICAgICAgICAgQVNTRVJU
KERpeUZwOjprU2lnbmlmaWNhbmRTaXplID09IDY0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgLy8gVGhlIGFkanVzdG1lbnQgcG93ZXIgaXMgZXhhY3QuIFRoZXJlIGlz
IGhlbmNlIG9ubHkgYW4gZXJyb3Igb2YgMC41LgorICAgICAgICAgICAgICAgIGVycm9yICs9IGtE
ZW5vbWluYXRvciAvIDI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGlucHV0Lk11bHRpcGx5KGNhY2hlZF9wb3dlcik7CisgICAgICAgIC8vIFRoZSBlcnJvciBp
bnRyb2R1Y2VkIGJ5IGEgbXVsdGlwbGljYXRpb24gb2YgYSpiIGVxdWFscworICAgICAgICAvLyAg
IGVycm9yX2EgKyBlcnJvcl9iICsgZXJyb3JfYSplcnJvcl9iLzJeNjQgKyAwLjUKKyAgICAgICAg
Ly8gU3Vic3RpdHV0aW5nIGEgd2l0aCAnaW5wdXQnIGFuZCBiIHdpdGggJ2NhY2hlZF9wb3dlcicg
d2UgaGF2ZQorICAgICAgICAvLyAgIGVycm9yX2IgPSAwLjUgIChhbGwgY2FjaGVkIHBvd2VycyBo
YXZlIGFuIGVycm9yIG9mIGxlc3MgdGhhbiAwLjUgdWxwKSwKKyAgICAgICAgLy8gICBlcnJvcl9h
YiA9IDAgb3IgMSAvIGtEZW5vbWluYXRvciA+IGVycm9yX2EqZXJyb3JfYi8gMl42NAorICAgICAg
ICBpbnQgZXJyb3JfYiA9IGtEZW5vbWluYXRvciAvIDI7CisgICAgICAgIGludCBlcnJvcl9hYiA9
IChlcnJvciA9PSAwID8gMCA6IDEpOyAgLy8gV2Ugcm91bmQgdXAgdG8gMS4KKyAgICAgICAgaW50
IGZpeGVkX2Vycm9yID0ga0Rlbm9taW5hdG9yIC8gMjsKKyAgICAgICAgZXJyb3IgKz0gZXJyb3Jf
YiArIGVycm9yX2FiICsgZml4ZWRfZXJyb3I7CisgICAgICAgIAorICAgICAgICBvbGRfZSA9IGlu
cHV0LmUoKTsKKyAgICAgICAgaW5wdXQuTm9ybWFsaXplKCk7CisgICAgICAgIGVycm9yIDw8PSBv
bGRfZSAtIGlucHV0LmUoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFNlZSBpZiB0aGUgZG91Ymxl
J3Mgc2lnbmlmaWNhbmQgY2hhbmdlcyBpZiB3ZSBhZGQvc3VidHJhY3QgdGhlIGVycm9yLgorICAg
ICAgICBpbnQgb3JkZXJfb2ZfbWFnbml0dWRlID0gRGl5RnA6OmtTaWduaWZpY2FuZFNpemUgKyBp
bnB1dC5lKCk7CisgICAgICAgIGludCBlZmZlY3RpdmVfc2lnbmlmaWNhbmRfc2l6ZSA9CisgICAg
ICAgIERvdWJsZTo6U2lnbmlmaWNhbmRTaXplRm9yT3JkZXJPZk1hZ25pdHVkZShvcmRlcl9vZl9t
YWduaXR1ZGUpOworICAgICAgICBpbnQgcHJlY2lzaW9uX2RpZ2l0c19jb3VudCA9CisgICAgICAg
IERpeUZwOjprU2lnbmlmaWNhbmRTaXplIC0gZWZmZWN0aXZlX3NpZ25pZmljYW5kX3NpemU7Cisg
ICAgICAgIGlmIChwcmVjaXNpb25fZGlnaXRzX2NvdW50ICsga0Rlbm9taW5hdG9yTG9nID49IERp
eUZwOjprU2lnbmlmaWNhbmRTaXplKSB7CisgICAgICAgICAgICAvLyBUaGlzIGNhbiBvbmx5IGhh
cHBlbiBmb3IgdmVyeSBzbWFsbCBkZW5vcm1hbHMuIEluIHRoaXMgY2FzZSB0aGUKKyAgICAgICAg
ICAgIC8vIGhhbGYtd2F5IG11bHRpcGxpZWQgYnkgdGhlIGRlbm9taW5hdG9yIGV4Y2VlZHMgdGhl
IHJhbmdlIG9mIGFuIHVpbnQ2NC4KKyAgICAgICAgICAgIC8vIFNpbXBseSBzaGlmdCBldmVyeXRo
aW5nIHRvIHRoZSByaWdodC4KKyAgICAgICAgICAgIGludCBzaGlmdF9hbW91bnQgPSAocHJlY2lz
aW9uX2RpZ2l0c19jb3VudCArIGtEZW5vbWluYXRvckxvZykgLQorICAgICAgICAgICAgRGl5RnA6
OmtTaWduaWZpY2FuZFNpemUgKyAxOworICAgICAgICAgICAgaW5wdXQuc2V0X2YoaW5wdXQuZigp
ID4+IHNoaWZ0X2Ftb3VudCk7CisgICAgICAgICAgICBpbnB1dC5zZXRfZShpbnB1dC5lKCkgKyBz
aGlmdF9hbW91bnQpOworICAgICAgICAgICAgLy8gV2UgYWRkIDEgZm9yIHRoZSBsb3N0IHByZWNp
c2lvbiBvZiBlcnJvciwgYW5kIGtEZW5vbWluYXRvciBmb3IKKyAgICAgICAgICAgIC8vIHRoZSBs
b3N0IHByZWNpc2lvbiBvZiBpbnB1dC5mKCkuCisgICAgICAgICAgICBlcnJvciA9IChlcnJvciA+
PiBzaGlmdF9hbW91bnQpICsgMSArIGtEZW5vbWluYXRvcjsKKyAgICAgICAgICAgIHByZWNpc2lv
bl9kaWdpdHNfY291bnQgLT0gc2hpZnRfYW1vdW50OworICAgICAgICB9CisgICAgICAgIC8vIFdl
IHVzZSB1aW50NjRfdHMgbm93LiBUaGlzIG9ubHkgd29ya3MgaWYgdGhlIERpeUZwIHVzZXMgdWlu
dDY0X3RzIHRvby4KKyAgICAgICAgQVNTRVJUKERpeUZwOjprU2lnbmlmaWNhbmRTaXplID09IDY0
KTsKKyAgICAgICAgQVNTRVJUKHByZWNpc2lvbl9kaWdpdHNfY291bnQgPCA2NCk7CisgICAgICAg
IHVpbnQ2NF90IG9uZTY0ID0gMTsKKyAgICAgICAgdWludDY0X3QgcHJlY2lzaW9uX2JpdHNfbWFz
ayA9IChvbmU2NCA8PCBwcmVjaXNpb25fZGlnaXRzX2NvdW50KSAtIDE7CisgICAgICAgIHVpbnQ2
NF90IHByZWNpc2lvbl9iaXRzID0gaW5wdXQuZigpICYgcHJlY2lzaW9uX2JpdHNfbWFzazsKKyAg
ICAgICAgdWludDY0X3QgaGFsZl93YXkgPSBvbmU2NCA8PCAocHJlY2lzaW9uX2RpZ2l0c19jb3Vu
dCAtIDEpOworICAgICAgICBwcmVjaXNpb25fYml0cyAqPSBrRGVub21pbmF0b3I7CisgICAgICAg
IGhhbGZfd2F5ICo9IGtEZW5vbWluYXRvcjsKKyAgICAgICAgRGl5RnAgcm91bmRlZF9pbnB1dChp
bnB1dC5mKCkgPj4gcHJlY2lzaW9uX2RpZ2l0c19jb3VudCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnB1dC5lKCkgKyBwcmVjaXNpb25fZGlnaXRzX2NvdW50KTsKKyAgICAgICAgaWYg
KHByZWNpc2lvbl9iaXRzID49IGhhbGZfd2F5ICsgZXJyb3IpIHsKKyAgICAgICAgICAgIHJvdW5k
ZWRfaW5wdXQuc2V0X2Yocm91bmRlZF9pbnB1dC5mKCkgKyAxKTsKKyAgICAgICAgfQorICAgICAg
ICAvLyBJZiB0aGUgbGFzdF9iaXRzIGFyZSB0b28gY2xvc2UgdG8gdGhlIGhhbGYtd2F5IGNhc2Ug
dGhhbiB3ZSBhcmUgdG9vCisgICAgICAgIC8vIGluYWNjdXJhdGUgYW5kIHJvdW5kIGRvd24uIElu
IHRoaXMgY2FzZSB3ZSByZXR1cm4gZmFsc2Ugc28gdGhhdCB3ZSBjYW4KKyAgICAgICAgLy8gZmFs
bCBiYWNrIHRvIGEgbW9yZSBwcmVjaXNlIGFsZ29yaXRobS4KKyAgICAgICAgCisgICAgICAgICpy
ZXN1bHQgPSBEb3VibGUocm91bmRlZF9pbnB1dCkudmFsdWUoKTsKKyAgICAgICAgaWYgKGhhbGZf
d2F5IC0gZXJyb3IgPCBwcmVjaXNpb25fYml0cyAmJiBwcmVjaXNpb25fYml0cyA8IGhhbGZfd2F5
ICsgZXJyb3IpIHsKKyAgICAgICAgICAgIC8vIFRvbyBpbXByZWNpc2UuIFRoZSBjYWxsZXIgd2ls
bCBoYXZlIHRvIGZhbGwgYmFjayB0byBhIHNsb3dlciB2ZXJzaW9uLgorICAgICAgICAgICAgLy8g
SG93ZXZlciB0aGUgcmV0dXJuZWQgbnVtYmVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgZWl0aGVyIHRo
ZSBjb3JyZWN0CisgICAgICAgICAgICAvLyBkb3VibGUsIG9yIHRoZSBuZXh0LWxvd2VyIGRvdWJs
ZS4KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIC8vIFJl
dHVybnMgdGhlIGNvcnJlY3QgZG91YmxlIGZvciB0aGUgYnVmZmVyKjEwXmV4cG9uZW50LgorICAg
IC8vIFRoZSB2YXJpYWJsZSBndWVzcyBzaG91bGQgYmUgYSBjbG9zZSBndWVzcyB0aGF0IGlzIGVp
dGhlciB0aGUgY29ycmVjdCBkb3VibGUKKyAgICAvLyBvciBpdHMgbG93ZXIgbmVpZ2hib3IgKHRo
ZSBuZWFyZXN0IGRvdWJsZSBsZXNzIHRoYW4gdGhlIGNvcnJlY3Qgb25lKS4KKyAgICAvLyBQcmVj
b25kaXRpb25zOgorICAgIC8vICAgYnVmZmVyLmxlbmd0aCgpICsgZXhwb25lbnQgPD0ga01heERl
Y2ltYWxQb3dlciArIDEKKyAgICAvLyAgIGJ1ZmZlci5sZW5ndGgoKSArIGV4cG9uZW50ID4ga01p
bkRlY2ltYWxQb3dlcgorICAgIC8vICAgYnVmZmVyLmxlbmd0aCgpIDw9IGtNYXhEZWNpbWFsU2ln
bmlmaWNhbnREaWdpdHMKKyAgICBzdGF0aWMgZG91YmxlIEJpZ251bVN0cnRvZChWZWN0b3I8Y29u
c3QgY2hhcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBv
bmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZ3Vlc3MpIHsKKyAg
ICAgICAgaWYgKGd1ZXNzID09IERvdWJsZTo6SW5maW5pdHkoKSkgeworICAgICAgICAgICAgcmV0
dXJuIGd1ZXNzOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBEaXlGcCB1cHBlcl9ib3Vu
ZGFyeSA9IERvdWJsZShndWVzcykuVXBwZXJCb3VuZGFyeSgpOworICAgICAgICAKKyAgICAgICAg
QVNTRVJUKGJ1ZmZlci5sZW5ndGgoKSArIGV4cG9uZW50IDw9IGtNYXhEZWNpbWFsUG93ZXIgKyAx
KTsKKyAgICAgICAgQVNTRVJUKGJ1ZmZlci5sZW5ndGgoKSArIGV4cG9uZW50ID4ga01pbkRlY2lt
YWxQb3dlcik7CisgICAgICAgIEFTU0VSVChidWZmZXIubGVuZ3RoKCkgPD0ga01heFNpZ25pZmlj
YW50RGVjaW1hbERpZ2l0cyk7CisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBCaWdudW0g
d2lsbCBiZSBhYmxlIHRvIGhvbGQgYWxsIG91ciBudW1iZXJzLgorICAgICAgICAvLyBPdXIgQmln
bnVtIGltcGxlbWVudGF0aW9uIGhhcyBhIHNlcGFyYXRlIGZpZWxkIGZvciBleHBvbmVudHMuIFNo
aWZ0cyB3aWxsCisgICAgICAgIC8vIGNvbnN1bWUgYXQgbW9zdCBvbmUgYmlnaXQgKDwgNjQgYml0
cykuCisgICAgICAgIC8vIGxuKDEwKSA9PSAzLjMyMTkuLi4KKyAgICAgICAgQVNTRVJUKCgoa01h
eERlY2ltYWxQb3dlciArIDEpICogMzMzIC8gMTAwKSA8IEJpZ251bTo6a01heFNpZ25pZmljYW50
Qml0cyk7CisgICAgICAgIEJpZ251bSBpbnB1dDsKKyAgICAgICAgQmlnbnVtIGJvdW5kYXJ5Owor
ICAgICAgICBpbnB1dC5Bc3NpZ25EZWNpbWFsU3RyaW5nKGJ1ZmZlcik7CisgICAgICAgIGJvdW5k
YXJ5LkFzc2lnblVJbnQ2NCh1cHBlcl9ib3VuZGFyeS5mKCkpOworICAgICAgICBpZiAoZXhwb25l
bnQgPj0gMCkgeworICAgICAgICAgICAgaW5wdXQuTXVsdGlwbHlCeVBvd2VyT2ZUZW4oZXhwb25l
bnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYm91bmRhcnkuTXVsdGlwbHlCeVBv
d2VyT2ZUZW4oLWV4cG9uZW50KTsKKyAgICAgICAgfQorICAgICAgICBpZiAodXBwZXJfYm91bmRh
cnkuZSgpID4gMCkgeworICAgICAgICAgICAgYm91bmRhcnkuU2hpZnRMZWZ0KHVwcGVyX2JvdW5k
YXJ5LmUoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbnB1dC5TaGlmdExlZnQo
LXVwcGVyX2JvdW5kYXJ5LmUoKSk7CisgICAgICAgIH0KKyAgICAgICAgaW50IGNvbXBhcmlzb24g
PSBCaWdudW06OkNvbXBhcmUoaW5wdXQsIGJvdW5kYXJ5KTsKKyAgICAgICAgaWYgKGNvbXBhcmlz
b24gPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gZ3Vlc3M7CisgICAgICAgIH0gZWxzZSBpZiAo
Y29tcGFyaXNvbiA+IDApIHsKKyAgICAgICAgICAgIHJldHVybiBEb3VibGUoZ3Vlc3MpLk5leHRE
b3VibGUoKTsKKyAgICAgICAgfSBlbHNlIGlmICgoRG91YmxlKGd1ZXNzKS5TaWduaWZpY2FuZCgp
ICYgMSkgPT0gMCkgeworICAgICAgICAgICAgLy8gUm91bmQgdG93YXJkcyBldmVuLgorICAgICAg
ICAgICAgcmV0dXJuIGd1ZXNzOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJu
IERvdWJsZShndWVzcykuTmV4dERvdWJsZSgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IAorICAgIGRvdWJsZSBTdHJ0b2QoVmVjdG9yPGNvbnN0IGNoYXI+IGJ1ZmZlciwgaW50IGV4cG9u
ZW50KSB7CisgICAgICAgIFZlY3Rvcjxjb25zdCBjaGFyPiBsZWZ0X3RyaW1tZWQgPSBUcmltTGVh
ZGluZ1plcm9zKGJ1ZmZlcik7CisgICAgICAgIFZlY3Rvcjxjb25zdCBjaGFyPiB0cmltbWVkID0g
VHJpbVRyYWlsaW5nWmVyb3MobGVmdF90cmltbWVkKTsKKyAgICAgICAgZXhwb25lbnQgKz0gbGVm
dF90cmltbWVkLmxlbmd0aCgpIC0gdHJpbW1lZC5sZW5ndGgoKTsKKyAgICAgICAgaWYgKHRyaW1t
ZWQubGVuZ3RoKCkgPT0gMCkgcmV0dXJuIDAuMDsKKyAgICAgICAgaWYgKHRyaW1tZWQubGVuZ3Ro
KCkgPiBrTWF4U2lnbmlmaWNhbnREZWNpbWFsRGlnaXRzKSB7CisgICAgICAgICAgICBjaGFyIHNp
Z25pZmljYW50X2J1ZmZlcltrTWF4U2lnbmlmaWNhbnREZWNpbWFsRGlnaXRzXTsKKyAgICAgICAg
ICAgIGludCBzaWduaWZpY2FudF9leHBvbmVudDsKKyAgICAgICAgICAgIFRyaW1Ub01heFNpZ25p
ZmljYW50RGlnaXRzKHRyaW1tZWQsIGV4cG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2lnbmlmaWNhbnRfYnVmZmVyLCAmc2lnbmlmaWNhbnRfZXhwb25lbnQp
OworICAgICAgICAgICAgcmV0dXJuIFN0cnRvZChWZWN0b3I8Y29uc3QgY2hhcj4oc2lnbmlmaWNh
bnRfYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
a01heFNpZ25pZmljYW50RGVjaW1hbERpZ2l0cyksCisgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpZ25pZmljYW50X2V4cG9uZW50KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZXhwb25lbnQg
KyB0cmltbWVkLmxlbmd0aCgpIC0gMSA+PSBrTWF4RGVjaW1hbFBvd2VyKSB7CisgICAgICAgICAg
ICByZXR1cm4gRG91YmxlOjpJbmZpbml0eSgpOworICAgICAgICB9CisgICAgICAgIGlmIChleHBv
bmVudCArIHRyaW1tZWQubGVuZ3RoKCkgPD0ga01pbkRlY2ltYWxQb3dlcikgeworICAgICAgICAg
ICAgcmV0dXJuIDAuMDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZG91YmxlIGd1ZXNz
OworICAgICAgICBpZiAoRG91YmxlU3RydG9kKHRyaW1tZWQsIGV4cG9uZW50LCAmZ3Vlc3MpIHx8
CisgICAgICAgICAgICBEaXlGcFN0cnRvZCh0cmltbWVkLCBleHBvbmVudCwgJmd1ZXNzKSkgewor
ICAgICAgICAgICAgcmV0dXJuIGd1ZXNzOworICAgICAgICB9CisgICAgICAgIHJldHVybiBCaWdu
dW1TdHJ0b2QodHJpbW1lZCwgZXhwb25lbnQsIGd1ZXNzKTsKKyAgICB9CisgICAgCit9ICAvLyBu
YW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvZHRvYS9zdHJ0b2QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9z
dHJ0b2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4wOTc5ZjQ0ZGViOTU4NWEwZDlkNTk4NjEwMjg1NzM5YWNhMjE2
OTM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL3N0
cnRvZC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8vIENvcHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0
IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8v
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lm
bmRlZiBET1VCTEVfQ09OVkVSU0lPTl9TVFJUT0RfSF8KKyNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJ
T05fU1RSVE9EX0hfCisKKyNpbmNsdWRlICJ1dGlscy5oIgorCituYW1lc3BhY2UgZG91YmxlX2Nv
bnZlcnNpb24geworICAgIAorICAgIC8vIFRoZSBidWZmZXIgbXVzdCBvbmx5IGNvbnRhaW4gZGln
aXRzIGluIHRoZSByYW5nZSBbMC05XS4gSXQgbXVzdCBub3QKKyAgICAvLyBjb250YWluIGEgZG90
IG9yIGEgc2lnbi4gSXQgbXVzdCBub3Qgc3RhcnQgd2l0aCAnMCcsIGFuZCBtdXN0IG5vdCBiZSBl
bXB0eS4KKyAgICBkb3VibGUgU3RydG9kKFZlY3Rvcjxjb25zdCBjaGFyPiBidWZmZXIsIGludCBl
eHBvbmVudCk7CisgICAgCit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KKworI2Vu
ZGlmICAvLyBET1VCTEVfQ09OVkVSU0lPTl9TVFJUT0RfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvZHRvYS91dGlscy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9kdG9hL3V0aWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDIzMjBiZWQ3N2Y1M2Q5MjVlNWU2YzJhNTQ0Njkz
OWIxNjNmNDI0MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
ZHRvYS91dGlscy5oCkBAIC0wLDAgKzEsMjk5IEBACisvLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjgg
cHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
Ky8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8K
Ky8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKKyNpZm5kZWYgRE9VQkxFX0NPTlZFUlNJT05fVVRJTFNfSF8KKyNkZWZpbmUgRE9VQkxFX0NP
TlZFUlNJT05fVVRJTFNfSF8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmlu
Zy5oPgorCisjaWZuZGVmIEFTU0VSVAorI2luY2x1ZGUgPGFzc2VydC5oPgorI2RlZmluZSBBU1NF
UlQoY29uZGl0aW9uKSAgICAgIChhc3NlcnQoY29uZGl0aW9uKSkKKyNkZWZpbmUgVU5JTVBMRU1F
TlRFRCgpIChhYm9ydCgpKQorI2RlZmluZSBVTlJFQUNIQUJMRSgpICAgKGFib3J0KCkpCisjZW5k
aWYKKworLy8gRG91YmxlIG9wZXJhdGlvbnMgZGV0ZWN0aW9uIGJhc2VkIG9uIHRhcmdldCBhcmNo
aXRlY3R1cmUuCisvLyBMaW51eCB1c2VzIGEgODBiaXQgd2lkZSBmbG9hdGluZyBwb2ludCBzdGFj
ayBvbiB4ODYuIFRoaXMgaW5kdWNlcyBkb3VibGUKKy8vIHJvdW5kaW5nLCB3aGljaCBpbiB0dXJu
IGxlYWRzIHRvIHdyb25nIHJlc3VsdHMuCisvLyBBbiBlYXN5IHdheSB0byB0ZXN0IGlmIHRoZSBm
bG9hdGluZy1wb2ludCBvcGVyYXRpb25zIGFyZSBjb3JyZWN0IGlzIHRvCisvLyBldmFsdWF0ZTog
ODkyNTUuMC8xZTIyLiBJZiB0aGUgZmxvYXRpbmctcG9pbnQgc3RhY2sgaXMgNjQgYml0cyB3aWRl
IHRoZW4KKy8vIHRoZSByZXN1bHQgaXMgZXF1YWwgdG8gODkyNTVlLTIyLgorLy8gVGhlIGJlc3Qg
d2F5IHRvIHRlc3QgdGhpcywgaXMgdG8gY3JlYXRlIGEgZGl2aXNpb24tZnVuY3Rpb24gYW5kIHRv
IGNvbXBhcmUKKy8vIHRoZSBvdXRwdXQgb2YgdGhlIGRpdmlzaW9uIHdpdGggdGhlIGV4cGVjdGVk
IHJlc3VsdC4gKElubGluaW5nIG11c3QgYmUKKy8vIGRpc2FibGVkLikKKy8vIE9uIExpbnV4LHg4
NiA4OTI1NWUtMjIgIT0gRGl2X2RvdWJsZSg4OTI1NS4wLzFlMjIpCisjaWYgZGVmaW5lZChfTV9Y
NjQpIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgXAorZGVmaW5lZChfX0FSTUVMX18pIHx8IFwK
K2RlZmluZWQoX01JUFNfQVJDSF9NSVBTMzJSMikKKyNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05f
Q09SUkVDVF9ET1VCTEVfT1BFUkFUSU9OUyAxCisjZWxpZiBkZWZpbmVkKF9NX0lYODYpIHx8IGRl
ZmluZWQoX19pMzg2X18pCisjaWYgZGVmaW5lZChfV0lOMzIpCisvLyBXaW5kb3dzIHVzZXMgYSA2
NGJpdCB3aWRlIGZsb2F0aW5nIHBvaW50IHN0YWNrLgorI2RlZmluZSBET1VCTEVfQ09OVkVSU0lP
Tl9DT1JSRUNUX0RPVUJMRV9PUEVSQVRJT05TIDEKKyNlbHNlCisjdW5kZWYgRE9VQkxFX0NPTlZF
UlNJT05fQ09SUkVDVF9ET1VCTEVfT1BFUkFUSU9OUworI2VuZGlmICAvLyBfV0lOMzIKKyNlbHNl
CisjZXJyb3IgVGFyZ2V0IGFyY2hpdGVjdHVyZSB3YXMgbm90IGRldGVjdGVkIGFzIHN1cHBvcnRl
ZCBieSBEb3VibGUtQ29udmVyc2lvbi4KKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkKF9XSU4zMikg
JiYgIWRlZmluZWQoX19NSU5HVzMyX18pCisKK3R5cGVkZWYgc2lnbmVkIGNoYXIgaW50OF90Owor
dHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnQ4X3Q7Cit0eXBlZGVmIHNob3J0IGludDE2X3Q7ICAv
LyBOT0xJTlQKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgdWludDE2X3Q7ICAvLyBOT0xJTlQKK3R5
cGVkZWYgaW50IGludDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50MzJfdDsKK3R5cGVk
ZWYgX19pbnQ2NCBpbnQ2NF90OwordHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0IHVpbnQ2NF90Owor
Ly8gaW50cHRyX3QgYW5kIGZyaWVuZHMgYXJlIGRlZmluZWQgaW4gY3J0ZGVmcy5oIHRocm91Z2gg
c3RkaW8uaC4KKworI2Vsc2UKKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisjZW5kaWYKKworLy8g
VGhlIGZvbGxvd2luZyBtYWNybyB3b3JrcyBvbiBib3RoIDMyIGFuZCA2NC1iaXQgcGxhdGZvcm1z
LgorLy8gVXNhZ2U6IGluc3RlYWQgb2Ygd3JpdGluZyAweDEyMzQ1Njc4OTAxMjM0NTYKKy8vICAg
ICAgd3JpdGUgVUlOVDY0XzJQQVJUX0MoMHgxMjM0NTY3OCw5MDEyMzQ1Nik7CisjZGVmaW5lIFVJ
TlQ2NF8yUEFSVF9DKGEsIGIpICgoKHN0YXRpY19jYXN0PHVpbnQ2NF90PihhKSA8PCAzMikgKyAw
eCMjYiMjdSkpCisKKworLy8gVGhlIGV4cHJlc3Npb24gQVJSQVlfU0laRShhKSBpcyBhIGNvbXBp
bGUtdGltZSBjb25zdGFudCBvZiB0eXBlCisvLyBzaXplX3Qgd2hpY2ggcmVwcmVzZW50cyB0aGUg
bnVtYmVyIG9mIGVsZW1lbnRzIG9mIHRoZSBnaXZlbgorLy8gYXJyYXkuIFlvdSBzaG91bGQgb25s
eSB1c2UgQVJSQVlfU0laRSBvbiBzdGF0aWNhbGx5IGFsbG9jYXRlZAorLy8gYXJyYXlzLgorI2Rl
ZmluZSBBUlJBWV9TSVpFKGEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiso
KHNpemVvZihhKSAvIHNpemVvZigqKGEpKSkgLyAgICAgICAgICAgICAgICAgICAgICAgICBcCitz
dGF0aWNfY2FzdDxzaXplX3Q+KCEoc2l6ZW9mKGEpICUgc2l6ZW9mKCooYSkpKSkpCisKKy8vIEEg
bWFjcm8gdG8gZGlzYWxsb3cgdGhlIGV2aWwgY29weSBjb25zdHJ1Y3RvciBhbmQgb3BlcmF0b3I9
IGZ1bmN0aW9ucworLy8gVGhpcyBzaG91bGQgYmUgdXNlZCBpbiB0aGUgcHJpdmF0ZTogZGVjbGFy
YXRpb25zIGZvciBhIGNsYXNzCisjZGVmaW5lIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUeXBl
TmFtZSkgICAgICBcCitUeXBlTmFtZShjb25zdCBUeXBlTmFtZSYpOyAgICAgICAgICAgICAgICAg
ICAgXAordm9pZCBvcGVyYXRvcj0oY29uc3QgVHlwZU5hbWUmKQorCisvLyBBIG1hY3JvIHRvIGRp
c2FsbG93IGFsbCB0aGUgaW1wbGljaXQgY29uc3RydWN0b3JzLCBuYW1lbHkgdGhlCisvLyBkZWZh
dWx0IGNvbnN0cnVjdG9yLCBjb3B5IGNvbnN0cnVjdG9yIGFuZCBvcGVyYXRvcj0gZnVuY3Rpb25z
LgorLy8KKy8vIFRoaXMgc2hvdWxkIGJlIHVzZWQgaW4gdGhlIHByaXZhdGU6IGRlY2xhcmF0aW9u
cyBmb3IgYSBjbGFzcworLy8gdGhhdCB3YW50cyB0byBwcmV2ZW50IGFueW9uZSBmcm9tIGluc3Rh
bnRpYXRpbmcgaXQuIFRoaXMgaXMKKy8vIGVzcGVjaWFsbHkgdXNlZnVsIGZvciBjbGFzc2VzIGNv
bnRhaW5pbmcgb25seSBzdGF0aWMgbWV0aG9kcy4KKyNkZWZpbmUgRElTQUxMT1dfSU1QTElDSVRf
Q09OU1RSVUNUT1JTKFR5cGVOYW1lKSBcCitUeXBlTmFtZSgpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKK0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUeXBlTmFtZSkKKwor
bmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgaW50
IGtDaGFyU2l6ZSA9IHNpemVvZihjaGFyKTsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRoZSBtYXhp
bXVtIG9mIHRoZSB0d28gcGFyYW1ldGVycy4KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAg
ICBzdGF0aWMgVCBNYXgoVCBhLCBUIGIpIHsKKyAgICAgICAgcmV0dXJuIGEgPCBiID8gYiA6IGE7
CisgICAgfQorICAgIAorICAgIAorICAgIC8vIFJldHVybnMgdGhlIG1pbmltdW0gb2YgdGhlIHR3
byBwYXJhbWV0ZXJzLgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHN0YXRpYyBUIE1p
bihUIGEsIFQgYikgeworICAgICAgICByZXR1cm4gYSA8IGIgPyBhIDogYjsKKyAgICB9CisgICAg
CisgICAgCisgICAgaW5saW5lIGludCBTdHJMZW5ndGgoY29uc3QgY2hhciogc3RyaW5nKSB7Cisg
ICAgICAgIHNpemVfdCBsZW5ndGggPSBzdHJsZW4oc3RyaW5nKTsKKyAgICAgICAgQVNTRVJUKGxl
bmd0aCA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KHN0YXRpY19jYXN0PGludD4obGVuZ3RoKSkpOwor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihsZW5ndGgpOworICAgIH0KKyAgICAKKyAg
ICAvLyBUaGlzIGlzIGEgc2ltcGxpZmllZCB2ZXJzaW9uIG9mIFY4J3MgVmVjdG9yIGNsYXNzLgor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIGNsYXNzIFZlY3RvciB7CisgICAgcHVibGlj
OgorICAgICAgICBWZWN0b3IoKSA6IHN0YXJ0XyhOVUxMKSwgbGVuZ3RoXygwKSB7fQorICAgICAg
ICBWZWN0b3IoVCogZGF0YSwgaW50IGxlbmd0aCkgOiBzdGFydF8oZGF0YSksIGxlbmd0aF8obGVu
Z3RoKSB7CisgICAgICAgICAgICBBU1NFUlQobGVuZ3RoID09IDAgfHwgKGxlbmd0aCA+IDAgJiYg
ZGF0YSAhPSBOVUxMKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFJldHVybnMg
YSB2ZWN0b3IgdXNpbmcgdGhlIHNhbWUgYmFja2luZyBzdG9yYWdlIGFzIHRoaXMgb25lLAorICAg
ICAgICAvLyBzcGFubmluZyBmcm9tIGFuZCBpbmNsdWRpbmcgJ2Zyb20nLCB0byBidXQgbm90IGlu
Y2x1ZGluZyAndG8nLgorICAgICAgICBWZWN0b3I8VD4gU3ViVmVjdG9yKGludCBmcm9tLCBpbnQg
dG8pIHsKKyAgICAgICAgICAgIEFTU0VSVCh0byA8PSBsZW5ndGhfKTsKKyAgICAgICAgICAgIEFT
U0VSVChmcm9tIDwgdG8pOworICAgICAgICAgICAgQVNTRVJUKDAgPD0gZnJvbSk7CisgICAgICAg
ICAgICByZXR1cm4gVmVjdG9yPFQ+KHN0YXJ0KCkgKyBmcm9tLCB0byAtIGZyb20pOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICAvLyBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIHZlY3Rv
ci4KKyAgICAgICAgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIGxlbmd0aF87IH0KKyAgICAg
ICAgCisgICAgICAgIC8vIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHZlY3RvciBpcyBlbXB0
eS4KKyAgICAgICAgYm9vbCBpc19lbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGxlbmd0aF8gPT0gMDsg
fQorICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJucyB0aGUgcG9pbnRlciB0byB0aGUgc3RhcnQg
b2YgdGhlIGRhdGEgaW4gdGhlIHZlY3Rvci4KKyAgICAgICAgVCogc3RhcnQoKSBjb25zdCB7IHJl
dHVybiBzdGFydF87IH0KKyAgICAgICAgCisgICAgICAgIC8vIEFjY2VzcyBpbmRpdmlkdWFsIHZl
Y3RvciBlbGVtZW50cyAtIGNoZWNrcyBib3VuZHMgaW4gZGVidWcgbW9kZS4KKyAgICAgICAgVCYg
b3BlcmF0b3JbXShpbnQgaW5kZXgpIGNvbnN0IHsKKyAgICAgICAgICAgIEFTU0VSVCgwIDw9IGlu
ZGV4ICYmIGluZGV4IDwgbGVuZ3RoXyk7CisgICAgICAgICAgICByZXR1cm4gc3RhcnRfW2luZGV4
XTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgVCYgZmlyc3QoKSB7IHJldHVybiBzdGFy
dF9bMF07IH0KKyAgICAgICAgCisgICAgICAgIFQmIGxhc3QoKSB7IHJldHVybiBzdGFydF9bbGVu
Z3RoXyAtIDFdOyB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIFQqIHN0YXJ0XzsK
KyAgICAgICAgaW50IGxlbmd0aF87CisgICAgfTsKKyAgICAKKyAgICAKKyAgICAvLyBIZWxwZXIg
Y2xhc3MgZm9yIGJ1aWxkaW5nIHJlc3VsdCBzdHJpbmdzIGluIGEgY2hhcmFjdGVyIGJ1ZmZlci4g
VGhlCisgICAgLy8gcHVycG9zZSBvZiB0aGUgY2xhc3MgaXMgdG8gdXNlIHNhZmUgb3BlcmF0aW9u
cyB0aGF0IGNoZWNrcyB0aGUKKyAgICAvLyBidWZmZXIgYm91bmRzIG9uIGFsbCBvcGVyYXRpb25z
IGluIGRlYnVnIG1vZGUuCisgICAgY2xhc3MgU3RyaW5nQnVpbGRlciB7CisgICAgcHVibGljOgor
ICAgICAgICBTdHJpbmdCdWlsZGVyKGNoYXIqIGJ1ZmZlciwgaW50IHNpemUpCisgICAgICAgIDog
YnVmZmVyXyhidWZmZXIsIHNpemUpLCBwb3NpdGlvbl8oMCkgeyB9CisgICAgICAgIAorICAgICAg
ICB+U3RyaW5nQnVpbGRlcigpIHsgaWYgKCFpc19maW5hbGl6ZWQoKSkgRmluYWxpemUoKTsgfQor
ICAgICAgICAKKyAgICAgICAgaW50IHNpemUoKSBjb25zdCB7IHJldHVybiBidWZmZXJfLmxlbmd0
aCgpOyB9CisgICAgICAgIAorICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4g
dGhlIGJ1aWxkZXIuCisgICAgICAgIGludCBwb3NpdGlvbigpIGNvbnN0IHsKKyAgICAgICAgICAg
IEFTU0VSVCghaXNfZmluYWxpemVkKCkpOworICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uXzsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gUmVzZXQgdGhlIHBvc2l0aW9uLgorICAg
ICAgICB2b2lkIFJlc2V0KCkgeyBwb3NpdGlvbl8gPSAwOyB9CisgICAgICAgIAorICAgICAgICAv
LyBBZGQgYSBzaW5nbGUgY2hhcmFjdGVyIHRvIHRoZSBidWlsZGVyLiBJdCBpcyBub3QgYWxsb3dl
ZCB0byBhZGQKKyAgICAgICAgLy8gMC1jaGFyYWN0ZXJzOyB1c2UgdGhlIEZpbmFsaXplKCkgbWV0
aG9kIHRvIHRlcm1pbmF0ZSB0aGUgc3RyaW5nCisgICAgICAgIC8vIGluc3RlYWQuCisgICAgICAg
IHZvaWQgQWRkQ2hhcmFjdGVyKGNoYXIgYykgeworICAgICAgICAgICAgQVNTRVJUKGMgIT0gJ1ww
Jyk7CisgICAgICAgICAgICBBU1NFUlQoIWlzX2ZpbmFsaXplZCgpICYmIHBvc2l0aW9uXyA8IGJ1
ZmZlcl8ubGVuZ3RoKCkpOworICAgICAgICAgICAgYnVmZmVyX1twb3NpdGlvbl8rK10gPSBjOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBBZGQgYW4gZW50aXJlIHN0cmluZyB0byB0
aGUgYnVpbGRlci4gVXNlcyBzdHJsZW4oKSBpbnRlcm5hbGx5IHRvCisgICAgICAgIC8vIGNvbXB1
dGUgdGhlIGxlbmd0aCBvZiB0aGUgaW5wdXQgc3RyaW5nLgorICAgICAgICB2b2lkIEFkZFN0cmlu
Zyhjb25zdCBjaGFyKiBzKSB7CisgICAgICAgICAgICBBZGRTdWJzdHJpbmcocywgU3RyTGVuZ3Ro
KHMpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQWRkIHRoZSBmaXJzdCAnbicg
Y2hhcmFjdGVycyBvZiB0aGUgZ2l2ZW4gc3RyaW5nICdzJyB0byB0aGUKKyAgICAgICAgLy8gYnVp
bGRlci4gVGhlIGlucHV0IHN0cmluZyBtdXN0IGhhdmUgZW5vdWdoIGNoYXJhY3RlcnMuCisgICAg
ICAgIHZvaWQgQWRkU3Vic3RyaW5nKGNvbnN0IGNoYXIqIHMsIGludCBuKSB7CisgICAgICAgICAg
ICBBU1NFUlQoIWlzX2ZpbmFsaXplZCgpICYmIHBvc2l0aW9uXyArIG4gPCBidWZmZXJfLmxlbmd0
aCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KG4pIDw9IHN0cmxl
bihzKSk7CisgICAgICAgICAgICBtZW1jcHkoJmJ1ZmZlcl9bcG9zaXRpb25fXSwgcywgbiAqIGtD
aGFyU2l6ZSk7CisgICAgICAgICAgICBwb3NpdGlvbl8gKz0gbjsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgCisgICAgICAgIC8vIEFkZCBjaGFyYWN0ZXIgcGFkZGluZyB0byB0aGUgYnVp
bGRlci4gSWYgY291bnQgaXMgbm9uLXBvc2l0aXZlLAorICAgICAgICAvLyBub3RoaW5nIGlzIGFk
ZGVkIHRvIHRoZSBidWlsZGVyLgorICAgICAgICB2b2lkIEFkZFBhZGRpbmcoY2hhciBjLCBpbnQg
Y291bnQpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewor
ICAgICAgICAgICAgICAgIEFkZENoYXJhY3RlcihjKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgLy8gRmluYWxpemUgdGhlIHN0cmluZyBieSAwLXRlcm1pbmF0
aW5nIGl0IGFuZCByZXR1cm5pbmcgdGhlIGJ1ZmZlci4KKyAgICAgICAgY2hhciogRmluYWxpemUo
KSB7CisgICAgICAgICAgICBBU1NFUlQoIWlzX2ZpbmFsaXplZCgpICYmIHBvc2l0aW9uXyA8IGJ1
ZmZlcl8ubGVuZ3RoKCkpOworICAgICAgICAgICAgYnVmZmVyX1twb3NpdGlvbl9dID0gJ1wwJzsK
KyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBub2JvZHkgbWFuYWdlZCB0byBhZGQgYSAwLWNoYXJh
Y3RlciB0byB0aGUKKyAgICAgICAgICAgIC8vIGJ1ZmZlciB3aGlsZSBidWlsZGluZyB0aGUgc3Ry
aW5nLgorICAgICAgICAgICAgQVNTRVJUKHN0cmxlbihidWZmZXJfLnN0YXJ0KCkpID09IHN0YXRp
Y19jYXN0PHNpemVfdD4ocG9zaXRpb25fKSk7CisgICAgICAgICAgICBwb3NpdGlvbl8gPSAtMTsK
KyAgICAgICAgICAgIEFTU0VSVChpc19maW5hbGl6ZWQoKSk7CisgICAgICAgICAgICByZXR1cm4g
YnVmZmVyXy5zdGFydCgpOworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAg
ICAgIFZlY3RvcjxjaGFyPiBidWZmZXJfOworICAgICAgICBpbnQgcG9zaXRpb25fOworICAgICAg
ICAKKyAgICAgICAgYm9vbCBpc19maW5hbGl6ZWQoKSBjb25zdCB7IHJldHVybiBwb3NpdGlvbl8g
PCAwOyB9CisgICAgICAgIAorICAgICAgICBESVNBTExPV19JTVBMSUNJVF9DT05TVFJVQ1RPUlMo
U3RyaW5nQnVpbGRlcik7CisgICAgfTsKKyAgICAKKyAgICAvLyBUaGUgdHlwZS1iYXNlZCBhbGlh
c2luZyBydWxlIGFsbG93cyB0aGUgY29tcGlsZXIgdG8gYXNzdW1lIHRoYXQgcG9pbnRlcnMgb2YK
KyAgICAvLyBkaWZmZXJlbnQgdHlwZXMgKGZvciBzb21lIGRlZmluaXRpb24gb2YgZGlmZmVyZW50
KSBuZXZlciBhbGlhcyBlYWNoIG90aGVyLgorICAgIC8vIFRodXMgdGhlIGZvbGxvd2luZyBjb2Rl
IGRvZXMgbm90IHdvcms6CisgICAgLy8KKyAgICAvLyBmbG9hdCBmID0gZm9vKCk7CisgICAgLy8g
aW50IGZiaXRzID0gKihpbnQqKSgmZik7CisgICAgLy8KKyAgICAvLyBUaGUgY29tcGlsZXIgJ2tu
b3dzJyB0aGF0IHRoZSBpbnQgcG9pbnRlciBjYW4ndCByZWZlciB0byBmIHNpbmNlIHRoZSB0eXBl
cworICAgIC8vIGRvbid0IG1hdGNoLCBzbyB0aGUgY29tcGlsZXIgbWF5IGNhY2hlIGYgaW4gYSBy
ZWdpc3RlciwgbGVhdmluZyByYW5kb20gZGF0YQorICAgIC8vIGluIGZiaXRzLiAgVXNpbmcgQysr
IHN0eWxlIGNhc3RzIG1ha2VzIG5vIGRpZmZlcmVuY2UsIGhvd2V2ZXIgYSBwb2ludGVyIHRvCisg
ICAgLy8gY2hhciBkYXRhIGlzIGFzc3VtZWQgdG8gYWxpYXMgYW55IG90aGVyIHBvaW50ZXIuICBU
aGlzIGlzIHRoZSAnbWVtY3B5CisgICAgLy8gZXhjZXB0aW9uJy4KKyAgICAvLworICAgIC8vIEJp
dF9jYXN0IHVzZXMgdGhlIG1lbWNweSBleGNlcHRpb24gdG8gbW92ZSB0aGUgYml0cyBmcm9tIGEg
dmFyaWFibGUgb2Ygb25lCisgICAgLy8gdHlwZSBvZiBhIHZhcmlhYmxlIG9mIGFub3RoZXIgdHlw
ZS4gIE9mIGNvdXJzZSB0aGUgZW5kIHJlc3VsdCBpcyBsaWtlbHkgdG8KKyAgICAvLyBiZSBpbXBs
ZW1lbnRhdGlvbiBkZXBlbmRlbnQuICBNb3N0IGNvbXBpbGVycyAoZ2NjLTQuMiBhbmQgTVNWQyAy
MDA1KQorICAgIC8vIHdpbGwgY29tcGxldGVseSBvcHRpbWl6ZSBCaXRDYXN0IGF3YXkuCisgICAg
Ly8KKyAgICAvLyBUaGVyZSBpcyBhbiBhZGRpdGlvbmFsIHVzZSBmb3IgQml0Q2FzdC4KKyAgICAv
LyBSZWNlbnQgZ2NjcyB3aWxsIHdhcm4gd2hlbiB0aGV5IHNlZSBjYXN0cyB0aGF0IG1heSByZXN1
bHQgaW4gYnJlYWthZ2UgZHVlIHRvCisgICAgLy8gdGhlIHR5cGUtYmFzZWQgYWxpYXNpbmcgcnVs
ZS4gIElmIHlvdSBoYXZlIGNoZWNrZWQgdGhhdCB0aGVyZSBpcyBubyBicmVha2FnZQorICAgIC8v
IHlvdSBjYW4gdXNlIEJpdENhc3QgdG8gY2FzdCBvbmUgcG9pbnRlciB0eXBlIHRvIGFub3RoZXIu
ICBUaGlzIGNvbmZ1c2VzIGdjYworICAgIC8vIGVub3VnaCB0aGF0IGl0IGNhbiBubyBsb25nZXIg
c2VlIHRoYXQgeW91IGhhdmUgY2FzdCBvbmUgcG9pbnRlciB0eXBlIHRvCisgICAgLy8gYW5vdGhl
ciB0aHVzIGF2b2lkaW5nIHRoZSB3YXJuaW5nLgorICAgIHRlbXBsYXRlIDxjbGFzcyBEZXN0LCBj
bGFzcyBTb3VyY2U+CisgICAgaW5saW5lIERlc3QgQml0Q2FzdChjb25zdCBTb3VyY2UmIHNvdXJj
ZSkgeworICAgICAgICAvLyBDb21waWxlIHRpbWUgYXNzZXJ0aW9uOiBzaXplb2YoRGVzdCkgPT0g
c2l6ZW9mKFNvdXJjZSkKKyAgICAgICAgLy8gQSBjb21waWxlIGVycm9yIGhlcmUgbWVhbnMgeW91
ciBEZXN0IGFuZCBTb3VyY2UgaGF2ZSBkaWZmZXJlbnQgc2l6ZXMuCisgICAgICAgIHR5cGVkZWYg
Y2hhciBWZXJpZnlTaXplc0FyZUVxdWFsW3NpemVvZihEZXN0KSA9PSBzaXplb2YoU291cmNlKSA/
IDEgOiAtMV07CisgICAgICAgIAorICAgICAgICBEZXN0IGRlc3Q7CisgICAgICAgIG1lbWNweSgm
ZGVzdCwgJnNvdXJjZSwgc2l6ZW9mKGRlc3QpKTsKKyAgICAgICAgcmV0dXJuIGRlc3Q7CisgICAg
fQorICAgIAorICAgIHRlbXBsYXRlIDxjbGFzcyBEZXN0LCBjbGFzcyBTb3VyY2U+CisgICAgaW5s
aW5lIERlc3QgQml0Q2FzdChTb3VyY2UqIHNvdXJjZSkgeworICAgICAgICByZXR1cm4gQml0Q2Fz
dDxEZXN0PihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oc291cmNlKSk7CisgICAgfQorICAg
IAorfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCisKKyNlbmRpZiAgLy8gRE9VQkxF
X0NPTlZFUlNJT05fVVRJTFNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlMmVkMmU2OGE4M2E2NjRiZjk4ZWM3
YTU1MDUxNzFhNjM5MTA3MGNmLi5hOTNmZDA3MzNjNTYzZTViMGFmNmYxMjU0ZDU2MmI3ZTA0YzBl
ZDBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTEtMDgtMTYgIE1hcmsgSGFobmVu
YmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KKworICAgICAgICBJbmNvcnBvcmF0ZSBuZXdl
ciwgZmFzdGVyIGR0b2EgbGlicmFyeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjYzNDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgQWRkZWQgbmV3IGR0b2EgbGli
cmFyeSBhdCBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZG91YmxlLWNvbnZlcnNpb24vLgorICAg
ICAgICBSZXBsYWNlZCBvbGQgY2FsbCB0byBkdG9hLiAgVGhlIG5ldyBsaWJyYXJ5IGlzIG11Y2gg
ZmFzdGVyIHRoYW4gdGhlIG9sZCBvbmUuCisgICAgICAgIFdlIHN0aWxsIHVzZSB0aGUgb2xkIHN0
cnRvZCwgYnV0IHdlIGNhbiBwaGFzZSB0aGF0IG91dCBldmVudHVhbGx5IGFzIHdlbGwuCisKKyAg
ICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYvRGVjaW1hbE51bWJlci5oOiBSZW1vdmVkLgor
ICAgICAgICAqIGNzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpm
b3JtYXROdW1iZXIpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXplRm9yTnVtYmVyVHlwZSk6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JCYXNpY1ZhbHVlOjp3cml0ZUpTT04pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpzZXJpYWxpemVkKToKKwogMjAxMS0w
OC0xNSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAg
IFJlZmFjdG9yIEpTIG9iamVjdHMgdG8gYWxsb2NhdGUgaW4gc3RhdGljIGNyZWF0ZSBtZXRob2Rz
IHJhdGhlciB0aGFuIGNvbnN0cnVjdG9ycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRm9y
d2FyZGluZ0hlYWRlcnMvd3RmL0RlY2ltYWxOdW1iZXIuaCBiL1NvdXJjZS9XZWJDb3JlL0Zvcndh
cmRpbmdIZWFkZXJzL3d0Zi9EZWNpbWFsTnVtYmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDMzMzE3NGQ1OGFjZjdkMDdjNjQ1YWVlOGMzNjY4MTNhYjMxNDIzOWYuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvRm9y
d2FyZGluZ0hlYWRlcnMvd3RmL0RlY2ltYWxOdW1iZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDQg
KzAsMCBAQAotI2lmbmRlZiBXZWJDb3JlX0ZXRF9EZWNpbWFsTnVtYmVyX2gKLSNkZWZpbmUgV2Vi
Q29yZV9GV0RfRGVjaW1hbE51bWJlcl9oCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRGVjaW1h
bE51bWJlci5oPgotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJp
bWl0aXZlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNw
cAppbmRleCBiYWQyZTNjZDMwY2VmNDdhMWZkMmE4YTQyODAwOTJjYzdkZjQxMTJhLi42OGIwYzFj
N2VhNGNhNjYyYjJkOTczZTQ3NjYzZGJhYWUzMTQ2ZmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQcmltaXRpdmVWYWx1ZS5jcHAKQEAgLTM2LDggKzM2LDkgQEAKICNpbmNsdWRlICJSZWN0Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgot
I2luY2x1ZGUgPHd0Zi9EZWNpbWFsTnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgorI2luY2x1ZGUgPHd0Zi9kdG9hLmg+CisjaW5jbHVkZSA8d3RmL2R0b2EvZG91YmxlLWNv
bnZlcnNpb24uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWZmZXIuaD4KIAogI2lmIEVO
QUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKQEAgLTYwOSwxMyArNjEwLDggQEAgaW50IENTU1ByaW1p
dGl2ZVZhbHVlOjpnZXRJZGVudCgpIGNvbnN0CiAKIHN0YXRpYyBTdHJpbmcgZm9ybWF0TnVtYmVy
KGRvdWJsZSBudW1iZXIpCiB7Ci0gICAgRGVjaW1hbE51bWJlciBkZWNpbWFsKG51bWJlcik7Ci0g
ICAgCi0gICAgU3RyaW5nQnVmZmVyIGJ1ZmZlcihkZWNpbWFsLmJ1ZmZlckxlbmd0aEZvclN0cmlu
Z0RlY2ltYWwoKSk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gZGVjaW1hbC50b1N0cmluZ0RlY2lt
YWwoYnVmZmVyLmNoYXJhY3RlcnMoKSwgYnVmZmVyLmxlbmd0aCgpKTsKLSAgICBBU1NFUlRfVU5V
U0VEKGxlbmd0aCwgbGVuZ3RoID09IGJ1ZmZlci5sZW5ndGgoKSk7Ci0KLSAgICByZXR1cm4gU3Ry
aW5nOjphZG9wdChidWZmZXIpOworICAgIE51bWJlclRvU3RyaW5nQnVmZmVyIGJ1ZmZlcjsKKyAg
ICByZXR1cm4gU3RyaW5nKG51bWJlclRvU3RyaW5nKG51bWJlciwgYnVmZmVyKSk7CiB9CiAKIFN0
cmluZyBDU1NQcmltaXRpdmVWYWx1ZTo6Y3NzVGV4dCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuY3BwCmluZGV4IDA1OGJiOTMzOWNmZmY1
ZDE4M2U0OWY3ZDI1ODgyNTg3MzAyMGNhMTIuLjAzNjIyMWIyMWIxNmY4ZjUyYWUyNTcyZmJkMzQ2
MDk4OTZiN2FhMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQ
YXJzZXJJZGlvbXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJz
ZXJJZGlvbXMuY3BwCkBAIC02Myw4ICs2Myw3IEBAIFN0cmluZyBzZXJpYWxpemVGb3JOdW1iZXJU
eXBlKGRvdWJsZSBudW1iZXIpCiAgICAgLy8gQWNjb3JkaW5nIHRvIEhUTUw1LCAidGhlIGJlc3Qg
cmVwcmVzZW50YXRpb24gb2YgdGhlIG51bWJlciBuIGFzIGEgZmxvYXRpbmcKICAgICAvLyBwb2lu
dCBudW1iZXIiIGlzIGEgc3RyaW5nIHByb2R1Y2VkIGJ5IGFwcGx5aW5nIFRvU3RyaW5nKCkgdG8g
bi4KICAgICBOdW1iZXJUb1N0cmluZ0J1ZmZlciBidWZmZXI7Ci0gICAgdW5zaWduZWQgbGVuZ3Ro
ID0gbnVtYmVyVG9TdHJpbmcobnVtYmVyLCBidWZmZXIpOwotICAgIHJldHVybiBTdHJpbmcoYnVm
ZmVyLCBsZW5ndGgpOworICAgIHJldHVybiBTdHJpbmcobnVtYmVyVG9TdHJpbmcobnVtYmVyLCBi
dWZmZXIpKTsKIH0KIAogYm9vbCBwYXJzZVRvRG91YmxlRm9yTnVtYmVyVHlwZShjb25zdCBTdHJp
bmcmIHN0cmluZywgZG91YmxlKiByZXN1bHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JWYWx1ZXMuY3BwCmluZGV4IDkyYmFiZDY3ZTk4ZDRhYzU5MGMzNTUxYmE0YWY4NmFm
OTk3NDhiZjYuLjZhNGRhOTNhODFmODczYTJiMjhkZjZmMDRlYjJlMGI3MDYwZWI5MDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCkBAIC0zMyw3ICsz
Myw3IEBACiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogCi0jaW5jbHVkZSA8d3RmL0RlY2ltYWxO
dW1iZXIuaD4KKyNpbmNsdWRlIDx3dGYvZHRvYS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTYyNiwyMyArNjI2LDExIEBAIHZvaWQgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6d3JpdGVKU09O
KFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkgY29uc3QKICAgICAgICAgICAgIG91dHB1dC0+YXBwZW5k
KGZhbHNlU3RyaW5nLCA1KTsKICAgICB9IGVsc2UgaWYgKHR5cGUoKSA9PSBUeXBlTnVtYmVyKSB7
CiAgICAgICAgIE51bWJlclRvU3RyaW5nQnVmZmVyIGJ1ZmZlcjsKLSAgICAgICAgaWYgKCFpc2Zp
bml0ZShtX2RvdWJsZVZhbHVlKSkgewotICAgICAgICAgICAgb3V0cHV0LT5hcHBlbmQobnVsbFN0
cmluZywgNCk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNvbnN0IGNoYXIqIGRvdWJs
ZVN0cmluZyA9IG51bWJlclRvU3RyaW5nKG1fZG91YmxlVmFsdWUsIGJ1ZmZlcik7CisgICAgICAg
IHdoaWxlICgqZG91YmxlU3RyaW5nKSB7CisgICAgICAgICAgICBvdXRwdXQtPmFwcGVuZChVQ2hh
cigqZG91YmxlU3RyaW5nKSk7CisgICAgICAgICAgICBkb3VibGVTdHJpbmcrKzsKICAgICAgICAg
fQotICAgICAgICBEZWNpbWFsTnVtYmVyIGRlY2ltYWwgPSBtX2RvdWJsZVZhbHVlOwotICAgICAg
ICB1bnNpZ25lZCBsZW5ndGggPSAwOwotICAgICAgICBpZiAoZGVjaW1hbC5idWZmZXJMZW5ndGhG
b3JTdHJpbmdEZWNpbWFsKCkgPiBXVEY6Ok51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoKSB7Ci0g
ICAgICAgICAgICAvLyBOb3QgZW5vdWdoIHJvb20gZm9yIGRlY2ltYWwuIFVzZSBleHBvbmVudGlh
bCBmb3JtYXQuCi0gICAgICAgICAgICBpZiAoZGVjaW1hbC5idWZmZXJMZW5ndGhGb3JTdHJpbmdF
eHBvbmVudGlhbCgpID4gV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCkgewotICAgICAg
ICAgICAgICAgIC8vIEZhbGxiYWNrIGZvciBhbiBhYm5vcm1hbCBjYXNlIGlmIGl0J3MgdG9vIGxp
dHRsZSBldmVuIGZvciBleHBvbmVudGlhbC4KLSAgICAgICAgICAgICAgICBvdXRwdXQtPmFwcGVu
ZCgiTmFOIiwgMyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgbGVuZ3RoID0gZGVjaW1hbC50b1N0cmluZ0V4cG9uZW50aWFsKGJ1ZmZlciwgV1RG
OjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgbGVuZ3RoID0gZGVjaW1hbC50b1N0cmluZ0RlY2ltYWwoYnVmZmVyLCBXVEY6Ok51bWJlclRv
U3RyaW5nQnVmZmVyTGVuZ3RoKTsKLSAgICAgICAgb3V0cHV0LT5hcHBlbmQoYnVmZmVyLCBsZW5n
dGgpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3Iu
Y3BwCmluZGV4IDQ4Zjc1MjAzMDE2YmY3ZjUwNmM4MThlNGM0MWE4NzNkZmYzY2ViOGIuLjVlY2Rj
MGVlOWFmYTVlMTUyYzEyMWRkNzY3Y2EzM2NmODA1ZDBlMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKQEAgLTI4LDkgKzI4LDEwIEBACiAKICNpbmNsdWRl
ICJIYXNoVG9vbHMuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0
Zi9EZWNpbWFsTnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgogI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL2R0b2EuaD4KKyNpbmNsdWRlIDx3dGYv
ZHRvYS9kb3VibGUtY29udmVyc2lvbi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKQEAgLTIxMCw4ICsyMTEsMTEgQEAgU3RyaW5n
IENvbG9yOjpzZXJpYWxpemVkKCkgY29uc3QKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnMCcpOwog
ICAgIGVsc2UgewogICAgICAgICBOdW1iZXJUb1N0cmluZ0J1ZmZlciBidWZmZXI7Ci0gICAgICAg
IHVuc2lnbmVkIGxlbmd0aCA9IERlY2ltYWxOdW1iZXIoYWxwaGEoKSAvIDI1NS4wKS50b1N0cmlu
Z0RlY2ltYWwoYnVmZmVyLCBXVEY6Ok51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoKTsKLSAgICAg
ICAgcmVzdWx0LmFwcGVuZChidWZmZXIsIGxlbmd0aCk7CisgICAgICAgIGNvbnN0IGNoYXIgKmRv
dWJsZVN0cmluZyA9IG51bWJlclRvU3RyaW5nKGFscGhhKCkgLyAyNTUuMCwgYnVmZmVyKTsKKyAg
ICAgICAgd2hpbGUgKCpkb3VibGVTdHJpbmcpIHsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
VUNoYXIoKmRvdWJsZVN0cmluZykpOworICAgICAgICAgICAgZG91YmxlU3RyaW5nKys7CisgICAg
ICAgIH0KICAgICB9CiAKICAgICByZXN1bHQuYXBwZW5kKCcpJyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104124</attachid>
            <date>2011-08-16 17:09:06 -0700</date>
            <delta_ts>2011-08-17 11:24:47 -0700</delta_ts>
            <desc>New dtoa library</desc>
            <filename>bug-66346-20110816170908.patch</filename>
            <type>text/plain</type>
            <size>352883</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTMwNjAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDJl
MzZhMDcyYjNjYjMyMWNhZTdjMTAxYjVmNmVhZjUxYWY4MzMzM2EuLjYyNmQ1YzRhNTI5MjljNDNj
Y2Y0M2M3ZWMyODJmMjU1NTA0YWFiZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDExNSBAQAorMjAxMS0wOC0xNiAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBw
bGUuY29tPgorCisgICAgICAgIEluY29ycG9yYXRlIG5ld2VyLCBmYXN0ZXIgZHRvYSBsaWJyYXJ5
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM0Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIG5l
dyBkdG9hIGxpYnJhcnkgYXQgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2RvdWJsZS1jb252ZXJz
aW9uLy4KKyAgICAgICAgUmVwbGFjZWQgb2xkIGNhbGwgdG8gZHRvYS4gIFRoZSBuZXcgbGlicmFy
eSBpcyBtdWNoIGZhc3RlciB0aGFuIHRoZSBvbGQgb25lLgorICAgICAgICBXZSBzdGlsbCB1c2Ug
dGhlIG9sZCBzdHJ0b2QsIGJ1dCB3ZSBjYW4gcGhhc2UgdGhhdCBvdXQgZXZlbnR1YWxseSBhcyB3
ZWxsLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcnVudGltZS9Jbml0
aWFsaXplVGhyZWFkaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZ09u
Y2UpOgorICAgICAgICAqIHJ1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpT
Qzo6bnVtYmVyUHJvdG9GdW5jVG9FeHBvbmVudGlhbCk6CisgICAgICAgIChKU0M6Om51bWJlclBy
b3RvRnVuY1RvRml4ZWQpOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1bmNUb1ByZWNpc2lv
bik6CisgICAgICAgICogcnVudGltZS9VU3RyaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6VVN0cmlu
Zzo6bnVtYmVyKToKKyAgICAgICAgKiB3dGYvRGVjaW1hbE51bWJlci5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogd3RmL0RlY2ltYWxOdW1iZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3dGYvZHRv
YS5jcHA6CisgICAgICAgIChXVEY6Om51bWJlclRvU3RyaW5nKToKKyAgICAgICAgKiB3dGYvZHRv
YS5oOgorICAgICAgICAqIHd0Zi9kdG9hL0NPUFlJTkc6IEFkZGVkLgorICAgICAgICAqIHd0Zi9k
dG9hL0xJQ0VOU0U6IEFkZGVkLgorICAgICAgICAqIHd0Zi9kdG9hL1JFQURNRTogQWRkZWQuCisg
ICAgICAgICogd3RmL2R0b2EvYmlnbnVtLWR0b2EuY2M6IEFkZGVkLgorICAgICAgICAqIHd0Zi9k
dG9hL2JpZ251bS1kdG9hLmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9kdG9hL2JpZ251bS5jYzog
QWRkZWQuCisgICAgICAgICogd3RmL2R0b2EvYmlnbnVtLmg6IEFkZGVkLgorICAgICAgICAoZG91
YmxlX2NvbnZlcnNpb246OkJpZ251bTo6VGltZXMxMCk6CisgICAgICAgIChkb3VibGVfY29udmVy
c2lvbjo6QmlnbnVtOjpFcXVhbCk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6QmlnbnVt
OjpMZXNzRXF1YWwpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OkJpZ251bTo6TGVzcyk6
CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6QmlnbnVtOjpQbHVzRXF1YWwpOgorICAgICAg
ICAoZG91YmxlX2NvbnZlcnNpb246OkJpZ251bTo6UGx1c0xlc3NFcXVhbCk6CisgICAgICAgIChk
b3VibGVfY29udmVyc2lvbjo6QmlnbnVtOjpQbHVzTGVzcyk6CisgICAgICAgIChkb3VibGVfY29u
dmVyc2lvbjo6QmlnbnVtOjpFbnN1cmVDYXBhY2l0eSk6CisgICAgICAgIChkb3VibGVfY29udmVy
c2lvbjo6QmlnbnVtOjpCaWdpdExlbmd0aCk6CisgICAgICAgICogd3RmL2R0b2EvY2FjaGVkLXBv
d2Vycy5jYzogQWRkZWQuCisgICAgICAgICogd3RmL2R0b2EvY2FjaGVkLXBvd2Vycy5oOiBBZGRl
ZC4KKyAgICAgICAgKiB3dGYvZHRvYS9kaXktZnAuY2M6IEFkZGVkLgorICAgICAgICAqIHd0Zi9k
dG9hL2RpeS1mcC5oOiBBZGRlZC4KKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpEaXlGcDo6
RGl5RnApOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OkRpeUZwOjpTdWJ0cmFjdCk6Cisg
ICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6RGl5RnA6Ok1pbnVzKToKKyAgICAgICAgKGRvdWJs
ZV9jb252ZXJzaW9uOjpEaXlGcDo6VGltZXMpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246
OkRpeUZwOjpOb3JtYWxpemUpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OkRpeUZwOjpm
KToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpEaXlGcDo6ZSk6CisgICAgICAgIChkb3Vi
bGVfY29udmVyc2lvbjo6RGl5RnA6OnNldF9mKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9u
OjpEaXlGcDo6c2V0X2UpOgorICAgICAgICAqIHd0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmNj
OiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5oOiBBZGRlZC4K
KyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6RG91
YmxlVG9TdHJpbmdDb252ZXJ0ZXIpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OlN0cmlu
Z1RvRG91YmxlQ29udmVydGVyOjpTdHJpbmdUb0RvdWJsZUNvbnZlcnRlcik6CisgICAgICAgICog
d3RmL2R0b2EvZG91YmxlLmg6IEFkZGVkLgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OmRv
dWJsZV90b191aW50NjQpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OnVpbnQ2NF90b19k
b3VibGUpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZTo6RG91YmxlKToKKyAg
ICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGU6OkFzRGl5RnApOgorICAgICAgICAoZG91
YmxlX2NvbnZlcnNpb246OkRvdWJsZTo6QXNOb3JtYWxpemVkRGl5RnApOgorICAgICAgICAoZG91
YmxlX2NvbnZlcnNpb246OkRvdWJsZTo6QXNVaW50NjQpOgorICAgICAgICAoZG91YmxlX2NvbnZl
cnNpb246OkRvdWJsZTo6TmV4dERvdWJsZSk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6
RG91YmxlOjpFeHBvbmVudCk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpT
aWduaWZpY2FuZCk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpJc0Rlbm9y
bWFsKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGU6OklzU3BlY2lhbCk6Cisg
ICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpJc05hbik6CisgICAgICAgIChkb3Vi
bGVfY29udmVyc2lvbjo6RG91YmxlOjpJc0luZmluaXRlKToKKyAgICAgICAgKGRvdWJsZV9jb252
ZXJzaW9uOjpEb3VibGU6OlNpZ24pOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OkRvdWJs
ZTo6VXBwZXJCb3VuZGFyeSk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpO
b3JtYWxpemVkQm91bmRhcmllcyk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6RG91Ymxl
Ojp2YWx1ZSk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpTaWduaWZpY2Fu
ZFNpemVGb3JPcmRlck9mTWFnbml0dWRlKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpE
b3VibGU6OkluZmluaXR5KToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGU6Ok5h
Tik6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpEaXlGcFRvVWludDY0KToK
KyAgICAgICAgKiB3dGYvZHRvYS9mYXN0LWR0b2EuY2M6IEFkZGVkLgorICAgICAgICAqIHd0Zi9k
dG9hL2Zhc3QtZHRvYS5oOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9maXhlZC1kdG9hLmNj
OiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9maXhlZC1kdG9hLmg6IEFkZGVkLgorICAgICAg
ICAqIHd0Zi9kdG9hL3N0cnRvZC5jYzogQWRkZWQuCisgICAgICAgICogd3RmL2R0b2Evc3RydG9k
Lmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9kdG9hL3V0aWxzLmg6IEFkZGVkLgorICAgICAgICAo
ZG91YmxlX2NvbnZlcnNpb246Ok1heCk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6TWlu
KToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpTdHJMZW5ndGgpOgorICAgICAgICAoZG91
YmxlX2NvbnZlcnNpb246OlZlY3Rvcjo6VmVjdG9yKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJz
aW9uOjpWZWN0b3I6OlN1YlZlY3Rvcik6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6VmVj
dG9yOjpsZW5ndGgpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OlZlY3Rvcjo6aXNfZW1w
dHkpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OlZlY3Rvcjo6c3RhcnQpOgorICAgICAg
ICAoZG91YmxlX2NvbnZlcnNpb246OlZlY3Rvcjo6b3BlcmF0b3JbXSk6CisgICAgICAgIChkb3Vi
bGVfY29udmVyc2lvbjo6VmVjdG9yOjpmaXJzdCk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lv
bjo6VmVjdG9yOjpsYXN0KToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdCdWls
ZGVyOjpTdHJpbmdCdWlsZGVyKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdC
dWlsZGVyOjp+U3RyaW5nQnVpbGRlcik6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6U3Ry
aW5nQnVpbGRlcjo6c2l6ZSk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6U3RyaW5nQnVp
bGRlcjo6cG9zaXRpb24pOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OlN0cmluZ0J1aWxk
ZXI6OlJlc2V0KToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdCdWlsZGVyOjpB
ZGRDaGFyYWN0ZXIpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OlN0cmluZ0J1aWxkZXI6
OkFkZFN0cmluZyk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6U3RyaW5nQnVpbGRlcjo6
QWRkU3Vic3RyaW5nKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdCdWlsZGVy
OjpBZGRQYWRkaW5nKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdCdWlsZGVy
OjpGaW5hbGl6ZSk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6U3RyaW5nQnVpbGRlcjo6
aXNfZmluYWxpemVkKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpCaXRDYXN0KToKKwog
MjAxMS0wOC0xNSAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAK
ICAgICAgICAgQ3Jhc2ggYWNjZXNzaW5nIHN0YXRpYyBwcm9wZXJ0eSBvbiBzZWFsZWQgb2JqZWN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDM4YmQ5OWRl
MzczOTg3NWY4OTUxYWMyNTliN2VkMDQwNjY2NjVjYmQuLmJlMTFhNzBkYjcxOTYxMTFjMTQwNDll
ZWM1ZDEyMWU4MDFkZjhjNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCkBAIC00NjAsOCArNDYwLDYgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DdXJyZW50VGltZS5oIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL0RhdGVNYXRoLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9E
YXRlTWF0aC5oIFwKLQlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RlY2ltYWxOdW1iZXIuaCBc
Ci0JU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EZWNpbWFsTnVtYmVyLmNwcCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9EZWNvZGVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvRGVxdWUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EaXNhbGxvd0NUeXBlLmgg
XApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKaW5kZXggZTU1ZjY5ZDll
M2E0ZTE5MWRhNjYwYjQ1Zjg4Y2ZiMjZkNWJhZGFhMy4uNmQzMTNiMzFmYjFmOWFjNzk4OTgxMjhj
ZDcxZTlkNDc0OWMyOGE3OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLmV4cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
ZXhwCkBAIC05OSw2ICs5OSw3IEBAIF9XVEZSZXBvcnRCYWNrdHJhY2UKIF9XVEZSZXBvcnRFcnJv
cgogX1dURlJlcG9ydEZhdGFsRXJyb3IKIF9fWk4xNE9wYXF1ZUpTU3RyaW5nNmNyZWF0ZUVSS04z
SlNDN1VTdHJpbmdFCitfX1pOMTdkb3VibGVfY29udmVyc2lvbjIzRG91YmxlVG9TdHJpbmdDb252
ZXJ0ZXIxOUVjbWFTY3JpcHRDb252ZXJ0ZXJFdgogX19aTjNKU0MxMEhhbmRsZUhlYXAxMndyaXRl
QmFycmllckVQTlNfN0pTVmFsdWVFUktTMV8KIF9fWk4zSlNDMTBIYW5kbGVIZWFwNGdyb3dFdgog
X19aTjNKU0MxMElkZW50aWZpZXIxMWFkZFNsb3dDYXNlRVBOU18xMkpTR2xvYmFsRGF0YUVQTjNX
VEYxMFN0cmluZ0ltcGxFCkBAIC0zODMsOCArMzg0LDYgQEAgX19aTjNXVEYxMU9TQWxsb2NhdG9y
MTZyZXNlcnZlQW5kQ29tbWl0RW1OUzBfNVVzYWdlRWJiYgogX19aTjNXVEYxMU9TQWxsb2NhdG9y
MThyZWxlYXNlRGVjb21taXR0ZWRFUHZtCiBfX1pOM1dURjExY29tbWVudEF0b21FCiBfX1pOM1dU
RjExY3VycmVudFRpbWVFdgotX19aTjNXVEYxMWR0b2FSb3VuZERQRVBjZGlSYlJpUmoKLV9fWk4z
V1RGMTFkdG9hUm91bmRTRkVQY2RpUmJSaVJqCiBfX1pOM1dURjExZW1wdHlTdHJpbmdFdgogX19a
TjNXVEYxMWZhc3RSZWFsbG9jRVB2bQogX19aTjNXVEYxMkF0b21pY1N0cmluZzExYWRkU2xvd0Nh
c2VFUE5TXzEwU3RyaW5nSW1wbEUKQEAgLTQxMyw3ICs0MTIsNyBAQCBfX1pOM1dURjEzY3VycmVu
dFRocmVhZEV2CiBfX1pOM1dURjEzdHJ5RmFzdENhbGxvY0VtbQogX19aTjNXVEYxM3RyeUZhc3RN
YWxsb2NFbQogX19aTjNXVEYxNGZhc3RNYWxsb2NTaXplRVBLdgotX19aTjNXVEYxNG51bWJlclRv
U3RyaW5nRWRQdAorX19aTjNXVEYxNG51bWJlclRvU3RyaW5nRWRQYwogX19aTjNXVEYxNHRyeUZh
c3RSZWFsbG9jRVB2bQogX19aTjNXVEYxNVRocmVhZENvbmRpdGlvbjR3YWl0RVJOU181TXV0ZXhF
CiBfX1pOM1dURjE1VGhyZWFkQ29uZGl0aW9uNnNpZ25hbEV2CkBAIC00NjUsNyArNDY0LDYgQEAg
X19aTjNXVEYzTUQ1QzFFdgogX19aTjNXVEY0U0hBMTExY29tcHV0ZUhhc2hFUk5TXzZWZWN0b3JJ
aExtMjBFRUUKIF9fWk4zV1RGNFNIQTE4YWRkQnl0ZXNFUEtobQogX19aTjNXVEY0U0hBMUMxRXYK
LV9fWk4zV1RGNGR0b2FFUGNkUmJSaVJqCiBfX1pOM1dURjVNdXRleDRsb2NrRXYKIF9fWk4zV1RG
NU11dGV4NnVubG9ja0V2CiBfX1pOM1dURjVNdXRleDd0cnlMb2NrRXYKQEAgLTUyMiw2ICs1MjAs
NyBAQCBfX1pOM1dURjl4bWxuc0F0b21FCiBfX1pOM1dURmVxRVJLTlNfMTJBdG9taWNTdHJpbmdF
UEtjCiBfX1pOM1dURmVxRVJLTlNfMTJBdG9taWNTdHJpbmdFUktOU182VmVjdG9ySXRMbTBFRUUK
IF9fWk4zV1RGZXFFUktOU183Q1N0cmluZ0VTMl8KK19fWk5LMTdkb3VibGVfY29udmVyc2lvbjIz
RG91YmxlVG9TdHJpbmdDb252ZXJ0ZXIxMFRvU2hvcnRlc3RFZFBOU18xM1N0cmluZ0J1aWxkZXJF
CiBfX1pOSzNKU0MxMEpTRnVuY3Rpb24yM2lzSG9zdEZ1bmN0aW9uTm9uSW5saW5lRXYKIF9fWk5L
M0pTQzExSW50ZXJwcmV0ZXIxNHJldHJpZXZlQ2FsbGVyRVBOU185RXhlY1N0YXRlRVBOU18xMEpT
RnVuY3Rpb25FCiBfX1pOSzNKU0MxMUludGVycHJldGVyMThyZXRyaWV2ZUxhc3RDYWxsZXJFUE5T
XzlFeGVjU3RhdGVFUmlSbFJOU183VVN0cmluZ0VSTlNfN0pTVmFsdWVFCkBAIC01NzUsMTAgKzU3
NCw2IEBAIF9fWk5LM0pTQzhKU1N0cmluZzExcmVzb2x2ZVJvcGVFUE5TXzlFeGVjU3RhdGVFCiBf
X1pOSzNKU0M5SGFzaFRhYmxlMTFjcmVhdGVUYWJsZUVQTlNfMTJKU0dsb2JhbERhdGFFCiBfX1pO
SzNKU0M5SGFzaFRhYmxlMTFkZWxldGVUYWJsZUV2CiBfX1pOSzNXVEYxMkF0b21pY1N0cmluZzVs
b3dlckV2Ci1fX1pOSzNXVEYxM0RlY2ltYWxOdW1iZXIxNXRvU3RyaW5nRGVjaW1hbEVQdGoKLV9f
Wk5LM1dURjEzRGVjaW1hbE51bWJlcjE5dG9TdHJpbmdFeHBvbmVudGlhbEVQdGoKLV9fWk5LM1dU
RjEzRGVjaW1hbE51bWJlcjI4YnVmZmVyTGVuZ3RoRm9yU3RyaW5nRGVjaW1hbEV2Ci1fX1pOSzNX
VEYxM0RlY2ltYWxOdW1iZXIzMmJ1ZmZlckxlbmd0aEZvclN0cmluZ0V4cG9uZW50aWFsRXYKIF9f
Wk5LM1dURjZTdHJpbmcxMXRvSW50U3RyaWN0RVBiaQogX19aTkszV1RGNlN0cmluZzEydG9VSW50
U3RyaWN0RVBiaQogX19aTkszV1RGNlN0cmluZzEzdG9JbnQ2NFN0cmljdEVQYmkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkKaW5kZXggZGM3YzRkYTk1YTVlYzgxMDY4
NTE5MzZiMmFkYjZmNWRkODdiZGM1Mi4uZWU5M2ZiODU0MjJlYzI5NWMwNjRkNDc5MDU5ZWZkZjgx
OGIzZDhmNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lmd5cGkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkKQEAg
LTE0Niw3ICsxNDYsNiBAQAogICAgICAgICAgICAgJ3d0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRv
bU51bWJlci5oJywKICAgICAgICAgICAgICd3dGYvQ3VycmVudFRpbWUuaCcsCiAgICAgICAgICAg
ICAnd3RmL0RhdGVNYXRoLmgnLAotICAgICAgICAgICAgJ3d0Zi9EZWNpbWFsTnVtYmVyLmgnLAog
ICAgICAgICAgICAgJ3d0Zi9EZWNvZGVyLmgnLAogICAgICAgICAgICAgJ3d0Zi9EZXF1ZS5oJywK
ICAgICAgICAgICAgICd3dGYvRGlzYWxsb3dDVHlwZS5oJywKQEAgLTU4MSw3ICs1ODAsNiBAQAog
ICAgICAgICAgICAgJ3d0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5jcHAnLAogICAg
ICAgICAgICAgJ3d0Zi9DdXJyZW50VGltZS5jcHAnLAogICAgICAgICAgICAgJ3d0Zi9EYXRlTWF0
aC5jcHAnLAotICAgICAgICAgICAgJ3d0Zi9EZWNpbWFsTnVtYmVyLmNwcCcsCiAgICAgICAgICAg
ICAnd3RmL0R5bmFtaWNBbm5vdGF0aW9ucy5jcHAnLAogICAgICAgICAgICAgJ3d0Zi9EeW5hbWlj
QW5ub3RhdGlvbnMuaCcsCiAgICAgICAgICAgICAnd3RmL0Zhc3RNYWxsb2MuY3BwJywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5vcmRlciBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5vcmRlcgppbmRleCBjZDQ5NTM3MzViYjk1
OGNkZDk5Y2VjNGI4NTlmNmFhNWQ4M2JkZDAwLi42OWVjMmRjZWFjYjlmNjRmOWE2Y2E4MzlhMWYy
NjlkYzUxYmIzODU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUub3JkZXIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLm9y
ZGVyCkBAIC0xMTMyLDcgKzExMzIsNiBAQCBfX1pOSzNKU0M3SlNBcnJheTEyc3ViY2xhc3NEYXRh
RXYKIF9fWk4zV1RGMTBTdHJpbmdJbXBsMTZmaW5kSWdub3JpbmdDYXNlRVBLY2oKIF9fWk4zV1RG
MTRudW1iZXJUb1N0cmluZ0VkUHQKIF9fWk4zV1RGNGR0b2FJTGIxRUxiMEVMYjBFTGIxRUVFdlBj
ZGlSYlJpUmoKLV9fWk5LM1dURjEzRGVjaW1hbE51bWJlcjE1dG9TdHJpbmdEZWNpbWFsRVB0agog
X19aTjNXVEYxMFN0cmluZ0ltcGw4dG9Eb3VibGVFUGJTMV8KIF9fWk4zV1RGNlZlY3RvcklqTG0x
NkVFNnJlc2l6ZUVtCiBfX1pOM1dURkw3bXVsdGFkZEVSTlNfNkJpZ0ludEVpaQpAQCAtMTE4NSw3
ICsxMTg0LDYgQEAgX19aTjNKU0MzSklUMTVlbWl0U2xvd19vcF9tdWxFUE5TXzExSW5zdHJ1Y3Rp
b25FUlBOU18xM1Nsb3dDYXNlRW50cnlFCiBfX1pOM1dURjEzU3RyaW5nQnVpbGRlcjE1cmVzZXJ2
ZUNhcGFjaXR5RWoKIF9fWk4zV1RGMTdlcXVhbElnbm9yaW5nQ2FzZUVQS3RQS2NqCiBfX1pOM1dU
RjRkdG9hRVBjZFJiUmlSagotX19aTkszV1RGMTNEZWNpbWFsTnVtYmVyMjhidWZmZXJMZW5ndGhG
b3JTdHJpbmdEZWNpbWFsRXYKIF9fWk4zSlNDM0pJVDE5cGF0Y2hQdXRCeUlkUmVwbGFjZUVQTlNf
OUNvZGVCbG9ja0VQTlNfMTdTdHJ1Y3R1cmVTdHViSW5mb0VQTlNfOVN0cnVjdHVyZUVtTlNfMTZS
ZXR1cm5BZGRyZXNzUHRyRWIKIF9fWk4zSlNDMTBJZGVudGlmaWVyNWVxdWFsRVBLTjNXVEYxMFN0
cmluZ0ltcGxFUEtjCiBfX1pOM0pTQzhKU1BhcnNlcjE5cGFyc2VCcmVha1N0YXRlbWVudElOU18x
M1N5bnRheENoZWNrZXJFRUVOVF85U3RhdGVtZW50RVJTM18KQEAgLTE4OTUsNyArMTg5Myw2IEBA
IF9fWk4zV1RGNlZlY3RvcklOM0pTQzhKU1N0cmluZzEyUm9wZUl0ZXJhdG9yOFdvcmtJdGVtRUxt
MTZFRTE0ZXhwYW5kQ2FwYWNpdHlFbVBLCiBfX1pOM1dURjZWZWN0b3JJTjNKU0M4SlNTdHJpbmcx
MlJvcGVJdGVyYXRvcjhXb3JrSXRlbUVMbTE2RUUxNXJlc2VydmVDYXBhY2l0eUVtCiBfX1pOM0pT
QzEwSlNGdW5jdGlvbjE0ZGVsZXRlUHJvcGVydHlFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50
aWZpZXJFCiBfX1pOM0pTQzE4Z2xvYmFsRnVuY1VuZXNjYXBlRVBOU185RXhlY1N0YXRlRQotX19a
TkszV1RGMTNEZWNpbWFsTnVtYmVyMTl0b1N0cmluZ0V4cG9uZW50aWFsRVB0agogX19aTjNKU0M4
SlNPYmplY3QzcHV0RVBOU185RXhlY1N0YXRlRWpOU183SlNWYWx1ZUUKIF9fWk4zSlNDN0pTQXJy
YXkxNGRlbGV0ZVByb3BlcnR5RVBOU185RXhlY1N0YXRlRWoKIF9fWk4zSlNDMTlGdW5jdGlvbkNv
bnN0cnVjdG9yMTZnZXRDb25zdHJ1Y3REYXRhRVJOU18xM0NvbnN0cnVjdERhdGFFCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCmluZGV4IGI3
YTIxYjA4OTU1ZDdjMGU2ZDJmMTBiN2YzMzgxNDYzZTE0NzM0NmUuLjVhYzQ1MzkxNDU1Zjc2ODhk
ZDJjNjdlM2JiYjFjOTU5YjM5MzFiMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVm
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCkBAIC02MSw4ICs2MSw2IEBAIEVYUE9SVFMKICAg
ICA/YXNjaWlAVVN0cmluZ0BKU0NAQFFCRT9BVkNTdHJpbmdAV1RGQEBYWgogICAgID9hdHRhY2hA
RGVidWdnZXJASlNDQEBRQUVYUEFWSlNHbG9iYWxPYmplY3RAMkBAWgogICAgID9icm9hZGNhc3RA
VGhyZWFkQ29uZGl0aW9uQFdURkBAUUFFWFhaCi0gICAgP2J1ZmZlckxlbmd0aEZvclN0cmluZ0Rl
Y2ltYWxARGVjaW1hbE51bWJlckBXVEZAQFFCRUlYWgotICAgID9idWZmZXJMZW5ndGhGb3JTdHJp
bmdFeHBvbmVudGlhbEBEZWNpbWFsTnVtYmVyQFdURkBAUUJFSVhaCiAgICAgP2J5dGVDb21waWxl
QFlhcnJASlNDQEBZQT9BVj8kUGFzc093blB0ckBVQnl0ZWNvZGVQYXR0ZXJuQFlhcnJASlNDQEBA
V1RGQEBBQVVZYXJyUGF0dGVybkAxMkBQQVZCdW1wUG9pbnRlckFsbG9jYXRvckA0QEBaCiAgICAg
P2J5dGVTaXplQFNvdXJjZVByb3ZpZGVyQ2FjaGVASlNDQEBRQkVJWFoKICAgICA/Y2FsY3VsYXRl
RFNUT2Zmc2V0QFdURkBAWUFOTk5AWgpAQCAtMzQ5LDggKzM0Nyw2IEBAIEVYUE9SVFMKICAgICA/
dG9TdHJpbmdASlNDZWxsQEpTQ0BAVUJFP0FWVVN0cmluZ0AyQFBBVkV4ZWNTdGF0ZUAyQEBaCiAg
ICAgP3RvU3RyaW5nQEpTT2JqZWN0QEpTQ0BAVUJFP0FWVVN0cmluZ0AyQFBBVkV4ZWNTdGF0ZUAy
QEBaCiAgICAgP3RvU3RyaW5nQEpTU3RyaW5nQEpTQ0BARUJFP0FWVVN0cmluZ0AyQFBBVkV4ZWNT
dGF0ZUAyQEBaCi0gICAgP3RvU3RyaW5nRGVjaW1hbEBEZWNpbWFsTnVtYmVyQFdURkBAUUJFSVBB
X1dJQFoKLSAgICA/dG9TdHJpbmdFeHBvbmVudGlhbEBEZWNpbWFsTnVtYmVyQFdURkBAUUJFSVBB
X1dJQFoKICAgICA/dG9UaGlzT2JqZWN0QEpTQ2VsbEBKU0NAQFVCRVBBVkpTT2JqZWN0QDJAUEFW
RXhlY1N0YXRlQDJAQFoKICAgICA/dG9UaGlzT2JqZWN0QEpTT2JqZWN0QEpTQ0BAVUJFUEFWMTJA
UEFWRXhlY1N0YXRlQDJAQFoKICAgICA/dG9UaGlzT2JqZWN0QEpTU3RyaW5nQEpTQ0BARUJFUEFW
SlNPYmplY3RAMkBQQVZFeGVjU3RhdGVAMkBAWgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvaiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oKaW5kZXggMzQ4
YzI2ZjAxOTgxZDEzOTc0YjRlYjNiNzUzYTJjOTk5YzJmOGIyZC4uMTNhZjE0ZTE5ZDVlYTczMjdh
MTRiOGU1MzFkNWM2YTQ0YmY5NzJkMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvagorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qCkBAIC01OTMsMTQg
KzU5Myw2IEBACiAJCQk+CiAJCTwvRmlsZT4KIAkJPEZpbGUKLQkJCVJlbGF0aXZlUGF0aD0iLi5c
Li5cd3RmXERlY2ltYWxOdW1iZXIuY3BwIgotCQkJPgotCQk8L0ZpbGU+Ci0JCTxGaWxlCi0JCQlS
ZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxEZWNpbWFsTnVtYmVyLmgiCi0JCQk+Ci0JCTwvRmlsZT4K
LQkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXERlY29kZXIuaCIKIAkJCT4KIAkJ
PC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBkZTYwYTdmNmRlNDcwM2Mw
NDkzMmU2YmFiMWY2YjRhOTc2YzUzNzVhLi5kZjIxMmM5ZjRhZmY0ZmU0NzZmYWM5OGY1MjE0MmE5
YmY5MWI1MWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDgsNyArNDgsNiBA
QAogCQkwQkRGRkFFMDBGQzYxOTI5MDBENjlFRjQgLyogQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQkRGRkFENDBG
QzYxNzEwMDBENjlFRjQgLyogQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEJERkZBRTEwRkM2MTkzMTAwRDY5
RUY0IC8qIE93bkZhc3RNYWxsb2NQdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBCREZGQUQxMEZDNjE2RUMwMEQ2OUVGNCAvKiBPd25GYXN0TWFsbG9j
UHRyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEJGMjhBMjkxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0
IC8qIFNpemVMaW1pdHMuY3BwICovOyB9OwotCQkwRjI5NDc5QzEyNkU2OThDMDBCM0FCRjUgLyog
RGVjaW1hbE51bWJlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjI5NDc5QjEyNkU2OThDMDBCM0FCRjUgLyogRGVjaW1hbE51bWJlci5jcHAgKi87
IH07CiAJCTE0MDAwNjc3MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMDA2NzYxMkE2Rjc4MzAw
NjREMTIzIC8qIE9TQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMTQwMDA2OTMxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9y
UG9zaXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MTQwMDA2OTIxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovOyB9Owog
CQkxNDA1NjZDNDEwN0VDMjU1MDA1REJDOEQgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwODk0RDUwRkFGQkEy
RDAwMDAxODY1IC8qIEpTQVBJVmFsdWVXcmFwcGVyLmNwcCAqLzsgfTsKQEAgLTI0OCw3ICsyNDcs
NiBAQAogCQk4NjAxNjFFNjBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21t
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MDE2
MUUyMEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oICovOyB9Owog
CQk4NjI2QkVDRjExOTI4RTM5MDA3ODJGQUIgLyogU3RyaW5nU3RhdGljcy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjI2QkVDRTExOTI4RTM5MDA3
ODJGQUIgLyogU3RyaW5nU3RhdGljcy5jcHAgKi87IH07CiAJCTg2MjdFNUVDMTFGMTI4MTkwMEEz
MTNCNSAvKiBQYWdlQWxsb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODYyN0U1RUExMUYxMjgxOTAwQTMxM0I1IC8qIFBhZ2VBbGxvY2F0aW9u
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJODYy
QUY0QjYxMjIzOUM3QjAwMjRFNUI4IC8qIERlY2ltYWxOdW1iZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MkFGNEI1MTIyMzlDN0IwMDI0RTVCOCAv
KiBEZWNpbWFsTnVtYmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJODYzQjIzRTAwRkM2MTE4OTAwNzAzQUE0IC8qIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODYz
QjIzREYwRkM2MEU2MjAwNzAzQUE0IC8qIE1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2NDM4RkM0MTI2NTUw
M0UwMEUwREZDQSAvKiBTdHJpbmdCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2NDM4RkMzMTI2NTUwM0UwMEUwREZDQSAvKiBTdHJpbmdC
dWlsZGVyLmNwcCAqLzsgfTsKIAkJODY1NjU3NDIxMTVCRTNEQTAwMjkxRjQwIC8qIENTdHJpbmcu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY1NjU3
NDAxMTVCRTNEQTAwMjkxRjQwIC8qIENTdHJpbmcuY3BwICovOyB9OwpAQCAtNTkzLDYgKzU5MSwy
NSBAQAogCQlCQ0ZEOEM5MjBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkQ4QzkwMEVFQjJFRTcw
MDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwICovOyB9OwogCQlCQ0ZEOEM5MzBFRUIyRUU3MDAyODM4
NDggLyogSnVtcFRhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQ0ZEOEM5MTBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggKi87IH07CiAJ
CUMwQTI3MjYzMEU1MEEwNjMwMEU5NkUxNSAvKiBOb3RGb3VuZC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzBBMjcyM0YwRTUwOUYxRTAwRTk2RTE1IC8q
IE5vdEZvdW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJQzIyQzUyRjExM0ZBRjZFRjAwQjdEQzBEIC8qIGJpZ251bS1kdG9hLmNjIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyQzUyOTAxM0ZBRjZFRjAw
QjdEQzBEIC8qIGJpZ251bS1kdG9hLmNjICovOyB9OworCQlDMjJDNTJGMjEzRkFGNkVGMDBCN0RD
MEQgLyogYmlnbnVtLWR0b2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEMyMkM1MjkxMTNGQUY2RUYwMEI3REMwRCAvKiBiaWdudW0tZHRvYS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUMyMkM1MkYzMTNG
QUY2RUYwMEI3REMwRCAvKiBiaWdudW0uY2MgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTI5MjEzRkFGNkVGMDBCN0RDMEQgLyogYmlnbnVtLmNjICov
OyB9OworCQlDMjJDNTJGNDEzRkFGNkVGMDBCN0RDMEQgLyogYmlnbnVtLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTI5MzEzRkFGNkVGMDBCN0RD
MEQgLyogYmlnbnVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJQzIyQzUyRjUxM0ZBRjZFRjAwQjdEQzBEIC8qIGNhY2hlZC1wb3dlcnMuY2MgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTI5NDEzRkFG
NkVGMDBCN0RDMEQgLyogY2FjaGVkLXBvd2Vycy5jYyAqLzsgfTsKKwkJQzIyQzUyRjYxM0ZBRjZF
RjAwQjdEQzBEIC8qIGNhY2hlZC1wb3dlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1Mjk1MTNGQUY2RUYwMEI3REMwRCAvKiBjYWNoZWQtcG93
ZXJzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
QzIyQzUyRjcxM0ZBRjZFRjAwQjdEQzBEIC8qIGRpeS1mcC5jYyBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1Mjk3MTNGQUY2RUYwMEI3REMwRCAvKiBk
aXktZnAuY2MgKi87IH07CisJCUMyMkM1MkY4MTNGQUY2RUYwMEI3REMwRCAvKiBkaXktZnAuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1Mjk4MTNG
QUY2RUYwMEI3REMwRCAvKiBkaXktZnAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQlDMjJDNTJGOTEzRkFGNkVGMDBCN0RDMEQgLyogZG91YmxlLWNv
bnZlcnNpb24uY2MgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDMjJDNTI5OTEzRkFGNkVGMDBCN0RDMEQgLyogZG91YmxlLWNvbnZlcnNpb24uY2MgKi87IH07
CisJCUMyMkM1MkZBMTNGQUY2RUYwMEI3REMwRCAvKiBkb3VibGUtY29udmVyc2lvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyQzUyOUExM0ZBRjZF
RjAwQjdEQzBEIC8qIGRvdWJsZS1jb252ZXJzaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIyQzUyRkIxM0ZBRjZFRjAwQjdEQzBEIC8qIGRv
dWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIy
QzUyOUIxM0ZBRjZFRjAwQjdEQzBEIC8qIGRvdWJsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUMyMkM1MkZDMTNGQUY2RUYwMEI3REMwRCAvKiBm
YXN0LWR0b2EuY2MgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDMjJDNTI5QzEzRkFGNkVGMDBCN0RDMEQgLyogZmFzdC1kdG9hLmNjICovOyB9OworCQlDMjJD
NTJGRDEzRkFGNkVGMDBCN0RDMEQgLyogZmFzdC1kdG9hLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTI5RDEzRkFGNkVGMDBCN0RDMEQgLyogZmFz
dC1kdG9hLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJQzIyQzUyRkUxM0ZBRjZFRjAwQjdEQzBEIC8qIGZpeGVkLWR0b2EuY2MgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTI5RTEzRkFGNkVGMDBCN0RD
MEQgLyogZml4ZWQtZHRvYS5jYyAqLzsgfTsKKwkJQzIyQzUyRkYxM0ZBRjZFRjAwQjdEQzBEIC8q
IGZpeGVkLWR0b2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEMyMkM1MjlGMTNGQUY2RUYwMEI3REMwRCAvKiBmaXhlZC1kdG9hLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIyQzUzMDAxM0ZBRjZFRjAw
QjdEQzBEIC8qIE1ha2VmaWxlIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzIyQzUyQTExM0ZBRjZFRjAwQjdEQzBEIC8qIE1ha2VmaWxlICovOyB9OworCQlD
MjJDNTMxMzEzRkFGNkVGMDBCN0RDMEQgLyogc3RydG9kLmNjIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyQzUyQjkxM0ZBRjZFRjAwQjdEQzBEIC8qIHN0
cnRvZC5jYyAqLzsgfTsKKwkJQzIyQzUzMTQxM0ZBRjZFRjAwQjdEQzBEIC8qIHN0cnRvZC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyQzUyQkExM0ZB
RjZFRjAwQjdEQzBEIC8qIHN0cnRvZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCUMyMkM1MzE1MTNGQUY2RUYwMEI3REMwRCAvKiB1dGlscy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyQzUyQkIxM0ZB
RjZFRjAwQjdEQzBEIC8qIHV0aWxzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRDdBNDZBNEYxMzM4RkZFQTAwRUQ2OTVDIC8qIER5bmFtaWNBbm5v
dGF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RDc1QUY1OTYxMkY4Q0I5NTAwRkMwQURGIC8qIER5bmFtaWNBbm5vdGF0aW9ucy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUREMzc3Q0JDMTIwNzJD
MTgwMDZBMjUxNyAvKiBCaXRtYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEREMzc3Q0JCMTIwNzJDMTgwMDZBMjUxNyAvKiBCaXRtYXAuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlEREY3QUJENDExRjYw
RUQyMDAxMDhFMzYgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEREY3QUJEMjExRjYwRUQyMDAxMDhFMzYgLyogR0NB
Y3Rpdml0eUNhbGxiYWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTcyOCw3ICs3NDUsNiBAQAogCQkwQkRGRkFEMTBGQzYxNkVDMDBENjlFRjQg
LyogT3duRmFzdE1hbGxvY1B0ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBP
d25GYXN0TWFsbG9jUHRyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBCREZGQUQ0
MEZDNjE3MTAwMEQ2OUVGNCAvKiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpemVMaW1pdHMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjI5NDc5QjEyNkU2OThDMDBCM0FCRjUg
LyogRGVjaW1hbE51bWJlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBEZWNpbWFsTnVtYmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2
NzYxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE9TQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTE0MDAwNjkyMTJBNkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9TQWxsb2NhdG9yUG9zaXguY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDBEMTdENjBFOEFENEE5MDAwQ0QxN0QgLyogSlNC
YXNlUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Jhc2VQcml2
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05MzcsNyArOTUzLDYgQEAKIAkJ
ODYwMTYxRTIwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MjZCRUNFMTE5MjhFMzkwMDc4MkZBQiAv
KiBTdHJpbmdTdGF0aWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IFN0cmluZ1N0YXRpY3MuY3BwOyBwYXRoID0gdGV4dC9TdHJpbmdTdGF0aWNzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYyN0U1RUExMUYxMjgxOTAwQTMxM0I1IC8qIFBhZ2VB
bGxvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VBbGxvY2F0
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg2MkFGNEI1MTIyMzlDN0IwMDI0
RTVCOCAvKiBEZWNpbWFsTnVtYmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERlY2ltYWxOdW1iZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYzQjIzREYw
RkM2MEU2MjAwNzAzQUE0IC8qIE1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODY0MzhGQzMxMjY1NTAzRTAwRTBERkNBIC8qIFN0cmluZ0J1aWxk
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU3RyaW5nQnVpbGRl
ci5jcHA7IHBhdGggPSB0ZXh0L1N0cmluZ0J1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4NjU2NTc0MDExNUJFM0RBMDAyOTFGNDAgLyogQ1N0cmluZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDU3RyaW5nLmNwcDsgcGF0aCA9IHRleHQv
Q1N0cmluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjUzLDYgKzEyNjgs
MzAgQEAKIAkJQkNGRDhDOTAwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKdW1wVGFibGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQ0ZEOEM5MTBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEp1bXBUYWJsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDMEEyNzIzRjBFNTA5RjFFMDBFOTZFMTUgLyogTm90Rm91
bmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm90Rm91bmQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyOTAxM0ZBRjZFRjAwQjdEQzBEIC8qIGJpZ251
bS1kdG9hLmNjICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gImJpZ251bS1k
dG9hLmNjIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyOTExM0ZBRjZFRjAw
QjdEQzBEIC8qIGJpZ251bS1kdG9hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
ICJiaWdudW0tZHRvYS5oIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyOTIx
M0ZBRjZFRjAwQjdEQzBEIC8qIGJpZ251bS5jYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IGJpZ251bS5jYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUy
OTMxM0ZBRjZFRjAwQjdEQzBEIC8qIGJpZ251bS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBiaWdudW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyOTQx
M0ZBRjZFRjAwQjdEQzBEIC8qIGNhY2hlZC1wb3dlcnMuY2MgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSAiY2FjaGVkLXBvd2Vycy5jYyI7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUMyMkM1Mjk1MTNGQUY2RUYwMEI3REMwRCAvKiBjYWNoZWQtcG93ZXJzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9ICJjYWNoZWQtcG93ZXJzLmgiOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTI5NjEzRkFGNkVGMDBCN0RDMEQgLyogQ09QWUlO
RyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBDT1BZSU5HOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlDMjJDNTI5NzEzRkFGNkVGMDBCN0RDMEQgLyogZGl5LWZwLmNjICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gImRpeS1mcC5jYyI7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUMyMkM1Mjk4MTNGQUY2RUYwMEI3REMwRCAvKiBkaXktZnAuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gImRpeS1mcC5oIjsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQzIyQzUyOTkxM0ZBRjZFRjAwQjdEQzBEIC8qIGRvdWJsZS1jb252ZXJzaW9u
LmNjICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gImRvdWJsZS1jb252ZXJz
aW9uLmNjIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyOUExM0ZBRjZFRjAw
QjdEQzBEIC8qIGRvdWJsZS1jb252ZXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9ICJkb3VibGUtY29udmVyc2lvbi5oIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQzIyQzUyOUIxM0ZBRjZFRjAwQjdEQzBEIC8qIGRvdWJsZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBkb3VibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QzIyQzUyOUMxM0ZBRjZFRjAwQjdEQzBEIC8qIGZhc3QtZHRvYS5jYyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9ICJmYXN0LWR0b2EuY2MiOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlDMjJDNTI5RDEzRkFGNkVGMDBCN0RDMEQgLyogZmFzdC1kdG9hLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9ICJmYXN0LWR0b2EuaCI7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUMyMkM1MjlFMTNGQUY2RUYwMEI3REMwRCAvKiBmaXhlZC1kdG9hLmNj
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gImZpeGVkLWR0b2EuY2MiOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTI5RjEzRkFGNkVGMDBCN0RDMEQgLyog
Zml4ZWQtZHRvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSAiZml4ZWQtZHRv
YS5oIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyQTAxM0ZBRjZFRjAwQjdE
QzBEIC8qIExJQ0VOU0UgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTElDRU5TRTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyQTExM0ZBRjZFRjAwQjdEQzBEIC8qIE1ha2VmaWxl
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5tYWtlOyBwYXRoID0gTWFrZWZpbGU7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUMyMkM1MkEyMTNGQUY2RUYwMEI3REMwRCAvKiBSRUFETUUgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gUkVBRE1FOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlDMjJDNTJBMzEzRkFGNkVGMDBCN0RDMEQgLyogU0NvbnNjcmlwdCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBTQ29uc2NyaXB0OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTJB
NDEzRkFGNkVGMDBCN0RDMEQgLyogU0NvbnN0cnVjdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBT
Q29uc3RydWN0OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTJCOTEzRkFGNkVG
MDBCN0RDMEQgLyogc3RydG9kLmNjICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gc3RydG9kLmNjOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTJCQTEzRkFG
NkVGMDBCN0RDMEQgLyogc3RydG9kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IHN0cnRvZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTJCQjEzRkFGNkVG
MDBCN0RDMEQgLyogdXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gdXRp
bHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDIxMjAyMjgwQUQ0MzEwQzAwRUQ3
OUI2IC8qIERhdGVDb252ZXJzaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEYXRlQ29udmVyc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUQyMTIwMjI5MEFENDMxMEMwMEVENzlCNiAvKiBEYXRlQ29udmVyc2lvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0ZUNvbnZlcnNpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRDc1QUY1OTUxMkY4Q0I5NTAwRkMwQURGIC8qIER5bmFtaWNBbm5vdGF0
aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEeW5hbWljQW5u
b3RhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY1Miw2ICsxNjkx
LDcgQEAKIAkJNjUxNjJFRjEwOEU2QTIxQzAwNzU1NkNEIC8qIHd0ZiAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQzIyQzUyNDgxM0ZBRjZFRjAwQjdEQzBE
IC8qIGR0b2EgKi8sCiAJCQkJMDZEMzU4QTAwREFBRDlDNDAwM0IxNzRFIC8qIG1hYyAqLywKIAkJ
CQk4NjU2NTczRTExNUJFMzUyMDAyOTFGNDAgLyogdGV4dCAqLywKIAkJCQlFMTk1Njc4RDA5RTdD
RjEyMDBCODlEMTMgLyogdW5pY29kZSAqLywKQEAgLTE2NzcsOCArMTcxNyw2IEBACiAJCQkJMTgw
QjlBRjAwRjE2QzU2OTAwOUJEQkM1IC8qIEN1cnJlbnRUaW1lLmggKi8sCiAJCQkJNDEzNTlDRjQw
RkREODlDQjAwMjA2MTgwIC8qIERhdGVNYXRoLmNwcCAqLywKIAkJCQk0MTM1OUNGNTBGREQ4OUNC
MDAyMDYxODAgLyogRGF0ZU1hdGguaCAqLywKLQkJCQkwRjI5NDc5QjEyNkU2OThDMDBCM0FCRjUg
LyogRGVjaW1hbE51bWJlci5jcHAgKi8sCi0JCQkJODYyQUY0QjUxMjIzOUM3QjAwMjRFNUI4IC8q
IERlY2ltYWxOdW1iZXIuaCAqLywKIAkJCQk1MTM1RkFENTEyRDI2ODU2MDAzQzA4M0IgLyogRGVj
b2Rlci5oICovLAogCQkJCTUxODYxMTFEMENDODI0ODMwMDgxNDEyQiAvKiBEZXF1ZS5oICovLAog
CQkJCTkzOEM0RjZCMENBMDZCQ0UwMEQ5MzEwQSAvKiBEaXNhbGxvd0NUeXBlLmggKi8sCkBAIC0y
MTc5LDYgKzIyMTcsMzcgQEAKIAkJCXBhdGggPSBieXRlY29kZTsKIAkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CiAJCX07CisJCUMyMkM1MjQ4MTNGQUY2RUYwMEI3REMwRCAvKiBkdG9hICovID0g
eworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlDMjJDNTI5MDEzRkFG
NkVGMDBCN0RDMEQgLyogYmlnbnVtLWR0b2EuY2MgKi8sCisJCQkJQzIyQzUyOTExM0ZBRjZFRjAw
QjdEQzBEIC8qIGJpZ251bS1kdG9hLmggKi8sCisJCQkJQzIyQzUyOTIxM0ZBRjZFRjAwQjdEQzBE
IC8qIGJpZ251bS5jYyAqLywKKwkJCQlDMjJDNTI5MzEzRkFGNkVGMDBCN0RDMEQgLyogYmlnbnVt
LmggKi8sCisJCQkJQzIyQzUyOTQxM0ZBRjZFRjAwQjdEQzBEIC8qIGNhY2hlZC1wb3dlcnMuY2Mg
Ki8sCisJCQkJQzIyQzUyOTUxM0ZBRjZFRjAwQjdEQzBEIC8qIGNhY2hlZC1wb3dlcnMuaCAqLywK
KwkJCQlDMjJDNTI5NjEzRkFGNkVGMDBCN0RDMEQgLyogQ09QWUlORyAqLywKKwkJCQlDMjJDNTI5
NzEzRkFGNkVGMDBCN0RDMEQgLyogZGl5LWZwLmNjICovLAorCQkJCUMyMkM1Mjk4MTNGQUY2RUYw
MEI3REMwRCAvKiBkaXktZnAuaCAqLywKKwkJCQlDMjJDNTI5OTEzRkFGNkVGMDBCN0RDMEQgLyog
ZG91YmxlLWNvbnZlcnNpb24uY2MgKi8sCisJCQkJQzIyQzUyOUExM0ZBRjZFRjAwQjdEQzBEIC8q
IGRvdWJsZS1jb252ZXJzaW9uLmggKi8sCisJCQkJQzIyQzUyOUIxM0ZBRjZFRjAwQjdEQzBEIC8q
IGRvdWJsZS5oICovLAorCQkJCUMyMkM1MjlDMTNGQUY2RUYwMEI3REMwRCAvKiBmYXN0LWR0b2Eu
Y2MgKi8sCisJCQkJQzIyQzUyOUQxM0ZBRjZFRjAwQjdEQzBEIC8qIGZhc3QtZHRvYS5oICovLAor
CQkJCUMyMkM1MjlFMTNGQUY2RUYwMEI3REMwRCAvKiBmaXhlZC1kdG9hLmNjICovLAorCQkJCUMy
MkM1MjlGMTNGQUY2RUYwMEI3REMwRCAvKiBmaXhlZC1kdG9hLmggKi8sCisJCQkJQzIyQzUyQTAx
M0ZBRjZFRjAwQjdEQzBEIC8qIExJQ0VOU0UgKi8sCisJCQkJQzIyQzUyQTExM0ZBRjZFRjAwQjdE
QzBEIC8qIE1ha2VmaWxlICovLAorCQkJCUMyMkM1MkEyMTNGQUY2RUYwMEI3REMwRCAvKiBSRUFE
TUUgKi8sCisJCQkJQzIyQzUyQTMxM0ZBRjZFRjAwQjdEQzBEIC8qIFNDb25zY3JpcHQgKi8sCisJ
CQkJQzIyQzUyQTQxM0ZBRjZFRjAwQjdEQzBEIC8qIFNDb25zdHJ1Y3QgKi8sCisJCQkJQzIyQzUy
QjkxM0ZBRjZFRjAwQjdEQzBEIC8qIHN0cnRvZC5jYyAqLywKKwkJCQlDMjJDNTJCQTEzRkFGNkVG
MDBCN0RDMEQgLyogc3RydG9kLmggKi8sCisJCQkJQzIyQzUyQkIxM0ZBRjZFRjAwQjdEQzBEIC8q
IHV0aWxzLmggKi8sCisJCQkpOworCQkJcGF0aCA9IGR0b2E7CisJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOworCQl9OwogCQlFMTk1Njc4RDA5RTdDRjEyMDBCODlEMTMgLyogdW5pY29kZSAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yMjc5LDcgKzIzNDgs
NiBAQAogCQkJCUJDMThDM0ZBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBEZWJ1Z2dlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMzMTM1NjQwRjMwMkZBMzAwM0RGRDNBIC8qIERlYnVnZ2VyQWN0aXZhdGlv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRkIwRTE2RjVDRDAwQjM0NDYwIC8qIERlYnVn
Z2VyQ2FsbEZyYW1lLmggaW4gSGVhZGVycyAqLywKLQkJCQk4NjJBRjRCNjEyMjM5QzdCMDAyNEU1
QjggLyogRGVjaW1hbE51bWJlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEzNUZBRjIxMkQyNkFD
RTAwM0MwODNCIC8qIERlY29kZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0ZDMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBEZXF1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQ0E0RjExMzJFQUE2
RDAwMkIyQUQ3IC8qIERGR0FsaWFzVHJhY2tlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDY0LDYg
KzI1MzIsMTYgQEAKIAkJCQk5MEQzNDY5QzBFMjg1MjgwMDA5NDkyRUUgLyogUmVmQ291bnRlZExl
YWtDb3VudGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1ODBFMTZGNUNEMDBCMzQ0NjAg
LyogUmVmUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1OTBFMTZGNUNEMDBCMzQ0NjAg
LyogUmVmUHRySGFzaE1hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzIyQzUyRjIxM0ZBRjZFRjAw
QjdEQzBEIC8qIGJpZ251bS1kdG9hLmggaW4gSGVhZGVycyAqLywKKwkJCQlDMjJDNTJGNDEzRkFG
NkVGMDBCN0RDMEQgLyogYmlnbnVtLmggaW4gSGVhZGVycyAqLywKKwkJCQlDMjJDNTJGNjEzRkFG
NkVGMDBCN0RDMEQgLyogY2FjaGVkLXBvd2Vycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzIyQzUy
RjgxM0ZBRjZFRjAwQjdEQzBEIC8qIGRpeS1mcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzIyQzUy
RkExM0ZBRjZFRjAwQjdEQzBEIC8qIGRvdWJsZS1jb252ZXJzaW9uLmggaW4gSGVhZGVycyAqLywK
KwkJCQlDMjJDNTJGQjEzRkFGNkVGMDBCN0RDMEQgLyogZG91YmxlLmggaW4gSGVhZGVycyAqLywK
KwkJCQlDMjJDNTJGRDEzRkFGNkVGMDBCN0RDMEQgLyogZmFzdC1kdG9hLmggaW4gSGVhZGVycyAq
LywKKwkJCQlDMjJDNTJGRjEzRkFGNkVGMDBCN0RDMEQgLyogZml4ZWQtZHRvYS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJQzIyQzUzMTQxM0ZBRjZFRjAwQjdEQzBEIC8qIHN0cnRvZC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJQzIyQzUzMTUxM0ZBRjZFRjAwQjdEQzBEIC8qIHV0aWxzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzQ1QTBFMTZGNUNEMDBCMzQ0NjAgLyogUmVnRXhwLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBMTcxMkIzRjExQzdCMjI4MDA3QTUzMTUgLyogUmVnRXhwQ2FjaGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDRDIwMkMyMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdFeHBDb25zdHJ1
Y3Rvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODcwLDcgKzI5NDgsNiBAQAogCQkJCTE0MjgwODIz
MTA3RUMwMkMwMDEzRTdCMiAvKiBEZWJ1Z2dlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzMx
MzU2NTBGMzAyRkEzMDAzREZEM0EgLyogRGVidWdnZXJBY3RpdmF0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0OTU1OUVFMEREQ0RERjcwMDY0ODA4NyAvKiBEZWJ1Z2dlckNhbGxGcmFtZS5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQkwRjI5NDc5QzEyNkU2OThDMDBCM0FCRjUgLyogRGVjaW1h
bE51bWJlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkVDOURDNDEzMjhERjgyMDAyQjJBRDcg
LyogREZHQnl0ZUNvZGVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQzcxMzI4
REY4MjAwMkIyQUQ3IC8qIERGR0dyYXBoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5REM5
MTMyOERGODIwMDJCMkFENyAvKiBERkdKSVRDb2RlR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtMzAzMCw2ICszMTA3LDE1IEBACiAJCQkJMTREMkYzREExMzlGNEJFMjAwNDkxMDMxIC8q
IE5ld1NwYWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MkExRDgzMTNBMTlDODQwMDlEQTVG
RSAvKiBPbGRTcGFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEJBN0E5NzEzQUFERkY4MDA1
QjdDMkMgLyogSGVhcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDMjJDNTJGMTEzRkFGNkVGMDBC
N0RDMEQgLyogYmlnbnVtLWR0b2EuY2MgaW4gU291cmNlcyAqLywKKwkJCQlDMjJDNTJGMzEzRkFG
NkVGMDBCN0RDMEQgLyogYmlnbnVtLmNjIGluIFNvdXJjZXMgKi8sCisJCQkJQzIyQzUyRjUxM0ZB
RjZFRjAwQjdEQzBEIC8qIGNhY2hlZC1wb3dlcnMuY2MgaW4gU291cmNlcyAqLywKKwkJCQlDMjJD
NTJGNzEzRkFGNkVGMDBCN0RDMEQgLyogZGl5LWZwLmNjIGluIFNvdXJjZXMgKi8sCisJCQkJQzIy
QzUyRjkxM0ZBRjZFRjAwQjdEQzBEIC8qIGRvdWJsZS1jb252ZXJzaW9uLmNjIGluIFNvdXJjZXMg
Ki8sCisJCQkJQzIyQzUyRkMxM0ZBRjZFRjAwQjdEQzBEIC8qIGZhc3QtZHRvYS5jYyBpbiBTb3Vy
Y2VzICovLAorCQkJCUMyMkM1MkZFMTNGQUY2RUYwMEI3REMwRCAvKiBmaXhlZC1kdG9hLmNjIGlu
IFNvdXJjZXMgKi8sCisJCQkJQzIyQzUzMDAxM0ZBRjZFRjAwQjdEQzBEIC8qIE1ha2VmaWxlIGlu
IFNvdXJjZXMgKi8sCisJCQkJQzIyQzUzMTMxM0ZBRjZFRjAwQjdEQzBEIC8qIHN0cnRvZC5jYyBp
biBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bml0aWFsaXplVGhyZWFkaW5nLmNwcAppbmRleCA3MTY1NDIxZjk1YWVmOWY4YjA5ZTkwMjRmMDcw
YWMwNWYzNjYyODVlLi5mZmU1MmYyOWU0MzMxNmQ1YjMzNGRlN2I2Y2MzOGQ0MTkwNWQ4ZTk3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFk
aW5nLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhy
ZWFkaW5nLmNwcApAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgIkluaXRpYWxpemVUaHJlYWRp
bmcuaCIKIAogI2luY2x1ZGUgIkhlYXAuaCIKLSNpbmNsdWRlICJkdG9hLmgiCisjaW5jbHVkZSA8
d3RmL2R0b2EvY2FjaGVkLXBvd2Vycy5oPgogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKICNpbmNs
dWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIlVTdHJpbmcuaCIKQEAgLTQ3LDYgKzQ3
LDcgQEAgc3RhdGljIHB0aHJlYWRfb25jZV90IGluaXRpYWxpemVUaHJlYWRpbmdLZXlPbmNlID0g
UFRIUkVBRF9PTkNFX0lOSVQ7CiAKIHN0YXRpYyB2b2lkIGluaXRpYWxpemVUaHJlYWRpbmdPbmNl
KCkKIHsKKyAgICBkb3VibGVfY29udmVyc2lvbjo6aW5pdGlhbGl6ZSgpOwogICAgIFdURjo6aW5p
dGlhbGl6ZVRocmVhZGluZygpOwogICAgIEpTR2xvYmFsRGF0YTo6c3RvcmVWUHRycygpOwogI2lm
IEVOQUJMRShKU0NfTVVMVElQTEVfVEhSRUFEUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwCmluZGV4IDY3OWY3NDc5ZGVjN2VlYjU0M2Vl
OWU2MjMzM2YwNmY4M2Q0OWVmNGQuLmJkOWQzZjMwNzRjZGJlNDAxZWJlMDdmYTcwNzUxYmYyOTg5
NjNmODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclBy
b3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJv
dG90eXBlLmNwcApAQCAtMzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJVaW50MTZXaXRoRnJhY3Rp
b24uaCIKICNpbmNsdWRlICJkdG9hLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNp
bmNsdWRlIDx3dGYvRGVjaW1hbE51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9kdG9hL2RvdWJsZS1jb252
ZXJzaW9uLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbjsKIAogbmFtZXNw
YWNlIEpTQyB7CiAKQEAgLTMzOSwxMiArMzQxLDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9FeHBvbmVudGlhbChFeGVjU3RhdGUqIGV4ZWMpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgVVN0cmluZzo6bnVtYmVy
KHgpKSk7CiAKICAgICAvLyBSb3VuZCBpZiB0aGUgYXJndW1lbnQgaXMgbm90IHVuZGVmaW5lZCwg
YWx3YXlzIGZvcm1hdCBhcyBleHBvbmVudGlhbC4KLSAgICBOdW1iZXJUb1N0cmluZ0J1ZmZlciBi
dWZmZXI7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaXNVbmRlZmluZWQKLSAgICAgICAgPyBEZWNp
bWFsTnVtYmVyKHgpLnRvU3RyaW5nRXhwb25lbnRpYWwoYnVmZmVyLCBXVEY6Ok51bWJlclRvU3Ry
aW5nQnVmZmVyTGVuZ3RoKQotICAgICAgICA6IERlY2ltYWxOdW1iZXIoeCwgUm91bmRpbmdTaWdu
aWZpY2FudEZpZ3VyZXMsIGRlY2ltYWxQbGFjZXNJbkV4cG9uZW50ICsgMSkudG9TdHJpbmdFeHBv
bmVudGlhbChidWZmZXIsIFdURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgpOwotCi0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBVU3RyaW5nKGJ1ZmZlciwgbGVu
Z3RoKSkpOworICAgIGNoYXIgYnVmZmVyW1dURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGhd
OworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcihidWZmZXIsIFdURjo6TnVtYmVyVG9TdHJpbmdC
dWZmZXJMZW5ndGgpOworICAgIGNvbnN0IERvdWJsZVRvU3RyaW5nQ29udmVydGVyJiBjb252ZXJ0
ZXIgPSBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6RWNtYVNjcmlwdENvbnZlcnRlcigpOworICAg
IGJ1aWxkZXIuUmVzZXQoKTsKKyAgICBpc1VuZGVmaW5lZAorICAgICAgICA/IGNvbnZlcnRlci5U
b0V4cG9uZW50aWFsKHgsIC0xLCAmYnVpbGRlcikKKyAgICAgICAgOiBjb252ZXJ0ZXIuVG9FeHBv
bmVudGlhbCh4LCBkZWNpbWFsUGxhY2VzSW5FeHBvbmVudCwgJmJ1aWxkZXIpOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgVVN0cmluZyhidWlsZGVyLkZpbmFsaXpl
KCkpKSk7CiB9CiAKIC8vIHRvRml4ZWQgY29udmVydHMgYSBudW1iZXIgdG8gYSBzdHJpbmcsIGFs
d2F5cyBmb3JtYXR0aW5nIGFzIGFuIGEgZGVjaW1hbCBmcmFjdGlvbi4KQEAgLTM3NiwxMCArMzgw
LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9GaXhl
ZChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgLy8gaGFuZGxlZCBieSBudW1iZXJUb1N0cmluZy4KICAg
ICBBU1NFUlQoaXNmaW5pdGUoeCkpOwogCi0gICAgLy8gQ29udmVydCB0byBkZWNpbWFsIHdpdGgg
cm91bmRpbmcsIGFuZCBmb3JtYXQgYXMgZGVjaW1hbC4KLSAgICBOdW1iZXJUb1N0cmluZ0J1ZmZl
ciBidWZmZXI7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gRGVjaW1hbE51bWJlcih4LCBSb3VuZGlu
Z0RlY2ltYWxQbGFjZXMsIGRlY2ltYWxQbGFjZXMpLnRvU3RyaW5nRGVjaW1hbChidWZmZXIsIFdU
Rjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNTdHJpbmcoZXhlYywgVVN0cmluZyhidWZmZXIsIGxlbmd0aCkpKTsKKyAgICBjaGFyIGJ1
ZmZlcltXVEY6Ok51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoXTsKKyAgICBTdHJpbmdCdWlsZGVy
IGJ1aWxkZXIoYnVmZmVyLCBXVEY6Ok51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoKTsKKyAgICBj
b25zdCBEb3VibGVUb1N0cmluZ0NvbnZlcnRlciYgY29udmVydGVyID0gRG91YmxlVG9TdHJpbmdD
b252ZXJ0ZXI6OkVjbWFTY3JpcHRDb252ZXJ0ZXIoKTsKKyAgICBidWlsZGVyLlJlc2V0KCk7Cisg
ICAgY29udmVydGVyLlRvRml4ZWQoeCwgZGVjaW1hbFBsYWNlcywgJmJ1aWxkZXIpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgVVN0cmluZyhidWlsZGVyLkZpbmFs
aXplKCkpKSk7CiB9CiAKIC8vIHRvUHJlY2lzaW9uIGNvbnZlcnRzIGEgbnVtYmVyIHRvIGEgc3Ry
aW5nLCB0YWtlaW5nIGFuIGFyZ3VtZW50IHNwZWNpZnlpbmcgYQpAQCAtNDEyLDE3ICs0MTgsMTIg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb1ByZWNpc2lv
bihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgaWYgKCFpc2Zpbml0ZSh4KSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBVU3RyaW5nOjpudW1iZXIoeCkpKTsKIAot
ICAgIC8vIENvbnZlcnQgdG8gZGVjaW1hbCB3aXRoIHJvdW5kaW5nLgotICAgIERlY2ltYWxOdW1i
ZXIgbnVtYmVyKHgsIFJvdW5kaW5nU2lnbmlmaWNhbnRGaWd1cmVzLCBzaWduaWZpY2FudEZpZ3Vy
ZXMpOwotICAgIC8vIElmIG51bWJlciBpcyBpbiB0aGUgcmFuZ2UgMWUtNiA8PSB4IDwgcG93KDEw
LCBzaWduaWZpY2FudEZpZ3VyZXMpIHRoZW4gZm9ybWF0Ci0gICAgLy8gYXMgZGVjaW1hbC4gT3Ro
ZXJ3aXNlLCBmb3JtYXQgdGhlIG51bWJlciBhcyBhbiBleHBvbmVudGlhbC4gRGVjaW1hbCBmb3Jt
YXQKLSAgICAvLyBkZW1hbmRzIGEgbWluaW11bSBvZiAoZXhwb25lbnQgKyAxKSBkaWdpdHMgdG8g
cmVwcmVzZW50IGEgbnVtYmVyLCBmb3IgZXhhbXBsZQotICAgIC8vIDEyMzQgKDEuMjM0ZSszKSBy
ZXF1aXJlcyA0IGRpZ2l0cy4gKFNlZSBFQ01BLTI2MiAxNS43LjQuNy4xMC5jKQotICAgIE51bWJl
clRvU3RyaW5nQnVmZmVyIGJ1ZmZlcjsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBudW1iZXIuZXhw
b25lbnQoKSA+PSAtNiAmJiBudW1iZXIuZXhwb25lbnQoKSA8IHNpZ25pZmljYW50RmlndXJlcwot
ICAgICAgICA/IG51bWJlci50b1N0cmluZ0RlY2ltYWwoYnVmZmVyLCBXVEY6Ok51bWJlclRvU3Ry
aW5nQnVmZmVyTGVuZ3RoKQotICAgICAgICA6IG51bWJlci50b1N0cmluZ0V4cG9uZW50aWFsKGJ1
ZmZlciwgV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBVU3RyaW5nKGJ1ZmZlciwgbGVuZ3RoKSkpOworICAg
IGNoYXIgYnVmZmVyW1dURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGhdOworICAgIFN0cmlu
Z0J1aWxkZXIgYnVpbGRlcihidWZmZXIsIFdURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgp
OworICAgIGNvbnN0IERvdWJsZVRvU3RyaW5nQ29udmVydGVyJiBjb252ZXJ0ZXIgPSBEb3VibGVU
b1N0cmluZ0NvbnZlcnRlcjo6RWNtYVNjcmlwdENvbnZlcnRlcigpOworICAgIGJ1aWxkZXIuUmVz
ZXQoKTsKKyAgICBjb252ZXJ0ZXIuVG9QcmVjaXNpb24oeCwgc2lnbmlmaWNhbnRGaWd1cmVzLCAm
YnVpbGRlcik7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBVU3Ry
aW5nKGJ1aWxkZXIuRmluYWxpemUoKSkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBudW1iZXJQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5nLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuY3BwCmluZGV4IGMxNGYzMTk5ZjQwN2Y0N2Y3OTVm
NTFiYjkyMGU2YzA5ZjNjM2E2ZmQuLjY3Y2RmMmFmM2QzZDU4MDhiOTI4NmY3ZjFkNjM5ZDdhYmI4
OGJmNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuY3BwCkBAIC0z
NSwxMCArMzUsMTEgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDx3dGYvQVNDSUlD
VHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0RlY2lt
YWxOdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9T
dHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL2R0
b2EuaD4KKyNpbmNsdWRlIDx3dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5oPgogI2luY2x1ZGUg
PHd0Zi91bmljb2RlL1VURjguaD4KIAogI2lmIEhBVkUoU1RSSU5HU19IKQpAQCAtMTk1LDkgKzE5
NiwxMiBAQCBVU3RyaW5nIFVTdHJpbmc6Om51bWJlcihsb25nIGwpCiAKIFVTdHJpbmcgVVN0cmlu
Zzo6bnVtYmVyKGRvdWJsZSBkKQogewotICAgIE51bWJlclRvU3RyaW5nQnVmZmVyIGJ1ZmZlcjsK
LSAgICB1bnNpZ25lZCBsZW5ndGggPSBudW1iZXJUb1N0cmluZyhkLCBidWZmZXIpOwotICAgIHJl
dHVybiBVU3RyaW5nKGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICBjaGFyIGJ1ZmZlcltXVEY6Ok51bWJl
clRvU3RyaW5nQnVmZmVyTGVuZ3RoXTsKKyAgICBkb3VibGVfY29udmVyc2lvbjo6U3RyaW5nQnVp
bGRlciBidWlsZGVyKGJ1ZmZlciwgV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCk7Cisg
ICAgY29uc3QgZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZVRvU3RyaW5nQ29udmVydGVyJiBjb252
ZXJ0ZXIgPSBkb3VibGVfY29udmVyc2lvbjo6RG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6OkVjbWFT
Y3JpcHRDb252ZXJ0ZXIoKTsKKyAgICBidWlsZGVyLlJlc2V0KCk7CisgICAgY29udmVydGVyLlRv
U2hvcnRlc3QoZCwgJmJ1aWxkZXIpOworICAgIHJldHVybiBVU3RyaW5nKGJ1aWxkZXIuRmluYWxp
emUoKSk7CiB9CiAKIFVTdHJpbmcgVVN0cmluZzo6c3Vic3RyaW5nU2hhcmluZ0ltcGwodW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9DTWFrZUxpc3RzLnR4dAppbmRleCBjNmRkYTEzOWM0ZWMzNDRjOTdjM2IzZTczZmYwNDFlZjg5
MzIyZDJkLi4xZDY2Yzg1NGEyZTBjZmU0YjY5NmRiMzc5YTZlOTRmMmY2MTE2YTNjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQKQEAgLTE0LDcgKzE0LDYgQEAgU0VU
KFdURl9IRUFERVJTCiAgICAgQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuaAogICAgIEN1
cnJlbnRUaW1lLmgKICAgICBEYXRlTWF0aC5oCi0gICAgRGVjaW1hbE51bWJlci5oCiAgICAgRGVj
b2Rlci5oCiAgICAgRGVxdWUuaAogICAgIERpc2FsbG93Q1R5cGUuaApAQCAtMTIwLDcgKzExOSw2
IEBAIFNFVChXVEZfU09VUkNFUwogICAgIENyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmNw
cAogICAgIEN1cnJlbnRUaW1lLmNwcAogICAgIERhdGVNYXRoLmNwcAotICAgIERlY2ltYWxOdW1i
ZXIuY3BwCiAgICAgRHluYW1pY0Fubm90YXRpb25zLmNwcAogICAgIEZhc3RNYWxsb2MuY3BwCiAg
ICAgSGFzaFRhYmxlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9E
ZWNpbWFsTnVtYmVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGVjaW1hbE51bWJl
ci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwMzA0ZTJlNWY2MzBkYWMzMjBm
NTRmNzhmZjdmNzUyN2FkMDY3ODMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EZWNpbWFsTnVtYmVyLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDE5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEZWNp
bWFsTnVtYmVyLmgiCi0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewot
Ci11bnNpZ25lZCBEZWNpbWFsTnVtYmVyOjpidWZmZXJMZW5ndGhGb3JTdHJpbmdEZWNpbWFsKCkg
Y29uc3QKLXsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwotICAgIC8vIGlmIHRoZSBleHBvbmVu
dCBpcyBuZWdhdGl2ZSB0aGUgbnVtYmVyIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gaXMgb2YgdGhl
IGZvcm06Ci0gICAgLy8gWzxzaWduPl0wLls8emVyb3M+XTxzaWduaWZpY2FuZD4KLSAgICBpZiAo
bV9leHBvbmVudCA8IDApIHsKLSAgICAgICAgaWYgKG1fc2lnbikKLSAgICAgICAgICAgICsrbGVu
Z3RoOwotICAgICAgICBsZW5ndGggKz0gMjsgLy8gZm9yICIwLiIKLSAgICAgICAgbGVuZ3RoICs9
IC1tX2V4cG9uZW50IC0gMTsKLSAgICAgICAgbGVuZ3RoICs9IG1fcHJlY2lzaW9uOwotICAgICAg
ICByZXR1cm4gbGVuZ3RoOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGRpZ2l0c0JlZm9yZURlY2lt
YWxQb2ludCA9IG1fZXhwb25lbnQgKyAxOwotCi0gICAgLy8gSWYgdGhlIHByZWNpc2lvbiBpcyA8
PSB0aGFuIHRoZSBudW1iZXIgb2YgZGlnaXRzIHRvIGdldCB1cCB0byB0aGUgZGVjaW1hbAotICAg
IC8vIHBvaW50LCB0aGVuIHRoZXJlIGlzIG5vIGZyYWN0aW9uYWwgcGFydCwgbnVtYmVyIGlzIG9m
IHRoZSBmb3JtOgotICAgIC8vIFs8c2lnbj5dPHNpZ25pZmljYW5kPls8emVyb3M+XQotICAgIGlm
IChtX3ByZWNpc2lvbiA8PSBkaWdpdHNCZWZvcmVEZWNpbWFsUG9pbnQpIHsKLSAgICAgICAgaWYg
KG1fc2lnbikKLSAgICAgICAgICAgICsrbGVuZ3RoOwotICAgICAgICBsZW5ndGggKz0gbV9wcmVj
aXNpb247Ci0gICAgICAgIGxlbmd0aCArPSBkaWdpdHNCZWZvcmVEZWNpbWFsUG9pbnQgLSBtX3By
ZWNpc2lvbjsKLSAgICAgICAgcmV0dXJuIGxlbmd0aDsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBn
ZXQgaGVyZSwgbnVtYmVyIHN0YXJ0cyBiZWZvcmUgdGhlIGRlY2ltYWwgcG9pbnQsIGFuZCBlbmRz
IGFmdGVyIGl0LAotICAgIC8vIGFzIHN1Y2ggaXMgb2YgdGhlIGZvcm06Ci0gICAgLy8gWzxzaWdu
Pl08c2lnbmlmaWNhbmQtYmVnaW4+LjxzaWduaWZpY2FuZC1lbmQ+Ci0gICAgaWYgKG1fc2lnbikK
LSAgICAgICAgKytsZW5ndGg7Ci0gICAgbGVuZ3RoICs9IGRpZ2l0c0JlZm9yZURlY2ltYWxQb2lu
dDsKLSAgICArK2xlbmd0aDsgLy8gZm9yIGRlY2ltYWwgcG9pbnQKLSAgICBsZW5ndGggKz0gbV9w
cmVjaXNpb24gLSBkaWdpdHNCZWZvcmVEZWNpbWFsUG9pbnQ7Ci0KLSAgICByZXR1cm4gbGVuZ3Ro
OwotfQotCi11bnNpZ25lZCBEZWNpbWFsTnVtYmVyOjpidWZmZXJMZW5ndGhGb3JTdHJpbmdFeHBv
bmVudGlhbCgpIGNvbnN0Ci17Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKLSAgICBpZiAobV9z
aWduKQotICAgICAgICArK2xlbmd0aDsKLQotICAgIC8vIEFkZCB0aGUgc2lnbmlmaWNhbmQKLSAg
ICArK2xlbmd0aDsKLQotICAgIGlmIChtX3ByZWNpc2lvbiA+IDEpIHsKLSAgICAgICAgKytsZW5n
dGg7IC8vIGZvciBkZWNpbWFsIHBvaW50Ci0gICAgICAgIGxlbmd0aCArPSBtX3ByZWNpc2lvbiAt
IDE7Ci0gICAgfQotCi0gICAgLy8gQWRkICJlKyIgb3IgImUtIgotICAgIGxlbmd0aCArPSAyOwot
Ci0gICAgaW50IGV4cG9uZW50ID0gKG1fZXhwb25lbnQgPj0gMCkgPyBtX2V4cG9uZW50IDogLW1f
ZXhwb25lbnQ7Ci0KLSAgICAvLyBBZGQgdGhlIGV4cG9uZW50Ci0gICAgaWYgKGV4cG9uZW50ID49
IDEwMCkKLSAgICAgICAgKytsZW5ndGg7Ci0gICAgaWYgKGV4cG9uZW50ID49IDEwKQotICAgICAg
ICArK2xlbmd0aDsKLSAgICArK2xlbmd0aDsKLQotICAgIHJldHVybiBsZW5ndGg7Ci19Ci0KLXVu
c2lnbmVkIERlY2ltYWxOdW1iZXI6OnRvU3RyaW5nRGVjaW1hbChVQ2hhciogYnVmZmVyLCB1bnNp
Z25lZCBidWZmZXJMZW5ndGgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX1VOVVNFRChidWZmZXJMZW5n
dGgsIGJ1ZmZlckxlbmd0aCA+PSBidWZmZXJMZW5ndGhGb3JTdHJpbmdEZWNpbWFsKCkpOwotCi0g
ICAgLy8gU2hvdWxkIGFsd2F5cyBiZSBhdCBsZWFzdCBvbmUgZGlnaXQgdG8gYWRkIHRvIHRoZSBz
dHJpbmchCi0gICAgQVNTRVJUKG1fcHJlY2lzaW9uKTsKLSAgICBVQ2hhciogbmV4dCA9IGJ1ZmZl
cjsKLQotICAgIC8vIGlmIHRoZSBleHBvbmVudCBpcyBuZWdhdGl2ZSB0aGUgbnVtYmVyIGRlY2lt
YWwgcmVwcmVzZW50YXRpb24gaXMgb2YgdGhlIGZvcm06Ci0gICAgLy8gWzxzaWduPl0wLls8emVy
b3M+XTxzaWduaWZpY2FuZD4KLSAgICBpZiAobV9leHBvbmVudCA8IDApIHsKLSAgICAgICAgdW5z
aWduZWQgemVyb3MgPSAtbV9leHBvbmVudCAtIDE7Ci0KLSAgICAgICAgaWYgKG1fc2lnbikKLSAg
ICAgICAgICAgICpuZXh0KysgPSAnLSc7Ci0gICAgICAgICpuZXh0KysgPSAnMCc7Ci0gICAgICAg
ICpuZXh0KysgPSAnLic7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB6ZXJvczsg
KytpKQotICAgICAgICAgICAgKm5leHQrKyA9ICcwJzsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fcHJlY2lzaW9uOyArK2kpCi0gICAgICAgICAgICAqbmV4dCsrID0gbV9zaWdu
aWZpY2FuZFtpXTsKLQotICAgICAgICByZXR1cm4gbmV4dCAtIGJ1ZmZlcjsKLSAgICB9Ci0KLSAg
ICB1bnNpZ25lZCBkaWdpdHNCZWZvcmVEZWNpbWFsUG9pbnQgPSBtX2V4cG9uZW50ICsgMTsKLQot
ICAgIC8vIElmIHRoZSBwcmVjaXNpb24gaXMgPD0gdGhhbiB0aGUgbnVtYmVyIG9mIGRpZ2l0cyB0
byBnZXQgdXAgdG8gdGhlIGRlY2ltYWwKLSAgICAvLyBwb2ludCwgdGhlbiB0aGVyZSBpcyBubyBm
cmFjdGlvbmFsIHBhcnQsIG51bWJlciBpcyBvZiB0aGUgZm9ybToKLSAgICAvLyBbPHNpZ24+XTxz
aWduaWZpY2FuZD5bPHplcm9zPl0KLSAgICBpZiAobV9wcmVjaXNpb24gPD0gZGlnaXRzQmVmb3Jl
RGVjaW1hbFBvaW50KSB7Ci0gICAgICAgIGlmIChtX3NpZ24pCi0gICAgICAgICAgICAqbmV4dCsr
ID0gJy0nOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcmVjaXNpb247ICsr
aSkKLSAgICAgICAgICAgICpuZXh0KysgPSBtX3NpZ25pZmljYW5kW2ldOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgKGRpZ2l0c0JlZm9yZURlY2ltYWxQb2ludCAtIG1fcHJlY2lz
aW9uKTsgKytpKQotICAgICAgICAgICAgKm5leHQrKyA9ICcwJzsKLQotICAgICAgICByZXR1cm4g
bmV4dCAtIGJ1ZmZlcjsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgbnVtYmVyIHN0
YXJ0cyBiZWZvcmUgdGhlIGRlY2ltYWwgcG9pbnQsIGFuZCBlbmRzIGFmdGVyIGl0LAotICAgIC8v
IGFzIHN1Y2ggaXMgb2YgdGhlIGZvcm06Ci0gICAgLy8gWzxzaWduPl08c2lnbmlmaWNhbmQtYmVn
aW4+LjxzaWduaWZpY2FuZC1lbmQ+Ci0KLSAgICBpZiAobV9zaWduKQotICAgICAgICAqbmV4dCsr
ID0gJy0nOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkaWdpdHNCZWZvcmVEZWNpbWFs
UG9pbnQ7ICsraSkKLSAgICAgICAgKm5leHQrKyA9IG1fc2lnbmlmaWNhbmRbaV07Ci0gICAgKm5l
eHQrKyA9ICcuJzsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBkaWdpdHNCZWZvcmVEZWNpbWFsUG9p
bnQ7IGkgPCBtX3ByZWNpc2lvbjsgKytpKQotICAgICAgICAqbmV4dCsrID0gbV9zaWduaWZpY2Fu
ZFtpXTsKLQotICAgIHJldHVybiBuZXh0IC0gYnVmZmVyOwotfQotCi11bnNpZ25lZCBEZWNpbWFs
TnVtYmVyOjp0b1N0cmluZ0V4cG9uZW50aWFsKFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZl
ckxlbmd0aCkgY29uc3QKLXsKLSAgICBBU1NFUlRfVU5VU0VEKGJ1ZmZlckxlbmd0aCwgYnVmZmVy
TGVuZ3RoID49IGJ1ZmZlckxlbmd0aEZvclN0cmluZ0V4cG9uZW50aWFsKCkpOwotCi0gICAgLy8g
U2hvdWxkIGFsd2F5cyBiZSBhdCBsZWFzdCBvbmUgZGlnaXQgdG8gYWRkIHRvIHRoZSBzdHJpbmch
Ci0gICAgQVNTRVJUKG1fcHJlY2lzaW9uKTsKLSAgICBVQ2hhciogbmV4dCA9IGJ1ZmZlcjsKLQot
ICAgIC8vIEFkZCB0aGUgc2lnbgotICAgIGlmIChtX3NpZ24pCi0gICAgICAgICpuZXh0KysgPSAn
LSc7Ci0KLSAgICAvLyBBZGQgdGhlIHNpZ25pZmljYW5kCi0gICAgKm5leHQrKyA9IG1fc2lnbmlm
aWNhbmRbMF07Ci0gICAgaWYgKG1fcHJlY2lzaW9uID4gMSkgewotICAgICAgICAqbmV4dCsrID0g
Jy4nOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbV9wcmVjaXNpb247ICsraSkK
LSAgICAgICAgICAgICpuZXh0KysgPSBtX3NpZ25pZmljYW5kW2ldOwotICAgIH0KLQotICAgIC8v
IEFkZCAiZSsiIG9yICJlLSIKLSAgICAqbmV4dCsrID0gJ2UnOwotICAgIGludCBleHBvbmVudDsK
LSAgICBpZiAobV9leHBvbmVudCA+PSAwKSB7Ci0gICAgICAgICpuZXh0KysgPSAnKyc7Ci0gICAg
ICAgIGV4cG9uZW50ID0gbV9leHBvbmVudDsKLSAgICB9IGVsc2UgewotICAgICAgICAqbmV4dCsr
ID0gJy0nOwotICAgICAgICBleHBvbmVudCA9IC1tX2V4cG9uZW50OwotICAgIH0KLQotICAgIC8v
IEFkZCB0aGUgZXhwb25lbnQKLSAgICBpZiAoZXhwb25lbnQgPj0gMTAwKQotICAgICAgICAqbmV4
dCsrID0gJzAnICsgZXhwb25lbnQgLyAxMDA7Ci0gICAgaWYgKGV4cG9uZW50ID49IDEwKQotICAg
ICAgICAqbmV4dCsrID0gJzAnICsgKGV4cG9uZW50ICUgMTAwKSAvIDEwOwotICAgICpuZXh0Kysg
PSAnMCcgKyBleHBvbmVudCAlIDEwOwotCi0gICAgcmV0dXJuIG5leHQgLSBidWZmZXI7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9EZWNpbWFsTnVtYmVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RlY2ltYWxOdW1i
ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM3YjgwMDU4MmQzNmFiMmExNzZi
MDNlMDlkMGM1MmEwNDU0MjliMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RlY2ltYWxOdW1iZXIuaAorKysg
L2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgRGVjaW1hbE51bWJlcl9oCi0jZGVmaW5lIERlY2lt
YWxOdW1iZXJfaAotCi0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHd0Zi9kdG9hLmg+Ci0j
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLWVudW0gUm91bmRpbmdTaWduaWZpY2FudEZpZ3VyZXNU
eXBlIHsgUm91bmRpbmdTaWduaWZpY2FudEZpZ3VyZXMgfTsKLWVudW0gUm91bmRpbmdEZWNpbWFs
UGxhY2VzVHlwZSB7IFJvdW5kaW5nRGVjaW1hbFBsYWNlcyB9OwotCi1jbGFzcyBEZWNpbWFsTnVt
YmVyIHsKLXB1YmxpYzoKLSAgICBEZWNpbWFsTnVtYmVyKGRvdWJsZSBkKQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKGlzZmluaXRlKGQpKTsKLSAgICAgICAgZHRvYShtX3NpZ25pZmljYW5kLCBkLCBt
X3NpZ24sIG1fZXhwb25lbnQsIG1fcHJlY2lzaW9uKTsKLQotICAgICAgICBBU1NFUlQobV9wcmVj
aXNpb24pOwotICAgICAgICAvLyBaZXJvIHNob3VsZCBhbHdheXMgaGF2ZSBleHBvbmVudCAwLgot
ICAgICAgICBBU1NFUlQobV9zaWduaWZpY2FuZFswXSAhPSAnMCcgfHwgIW1fZXhwb25lbnQpOwot
ICAgICAgICAvLyBObyB2YWx1ZXMgb3RoZXIgdGhhbiB6ZXJvIHNob3VsZCBoYXZlIGEgbGVhZGlu
ZyB6ZXJvLgotICAgICAgICBBU1NFUlQobV9zaWduaWZpY2FuZFswXSAhPSAnMCcgfHwgbV9wcmVj
aXNpb24gPT0gMSk7Ci0gICAgICAgIC8vIE5vIHZhbHVlcyBvdGhlciB0aGFuIHplcm8gc2hvdWxk
IGhhdmUgdHJhaWxpbmcgemVyb3MuCi0gICAgICAgIEFTU0VSVChtX3NpZ25pZmljYW5kWzBdID09
ICcwJyB8fCBtX3NpZ25pZmljYW5kW21fcHJlY2lzaW9uIC0gMV0gIT0gJzAnKTsKLSAgICB9Ci0K
LSAgICBEZWNpbWFsTnVtYmVyKGRvdWJsZSBkLCBSb3VuZGluZ1NpZ25pZmljYW50RmlndXJlc1R5
cGUsIHVuc2lnbmVkIHNpZ25pZmljYW50RmlndXJlcykKLSAgICB7Ci0gICAgICAgIEFTU0VSVChp
c2Zpbml0ZShkKSk7Ci0gICAgICAgIGR0b2FSb3VuZFNGKG1fc2lnbmlmaWNhbmQsIGQsIHNpZ25p
ZmljYW50RmlndXJlcywgbV9zaWduLCBtX2V4cG9uZW50LCBtX3ByZWNpc2lvbik7Ci0KLSAgICAg
ICAgQVNTRVJUKHNpZ25pZmljYW50RmlndXJlcyAmJiBzaWduaWZpY2FudEZpZ3VyZXMgPD0gc2l6
ZW9mKER0b2FCdWZmZXIpKTsKLSAgICAgICAgd2hpbGUgKG1fcHJlY2lzaW9uIDwgc2lnbmlmaWNh
bnRGaWd1cmVzKQotICAgICAgICAgICAgbV9zaWduaWZpY2FuZFttX3ByZWNpc2lvbisrXSA9ICcw
JzsKLQotICAgICAgICBBU1NFUlQobV9wcmVjaXNpb24pOwotICAgICAgICAvLyBaZXJvIHNob3Vs
ZCBhbHdheXMgaGF2ZSBleHBvbmVudCAwLgotICAgICAgICBBU1NFUlQobV9zaWduaWZpY2FuZFsw
XSAhPSAnMCcgfHwgIW1fZXhwb25lbnQpOwotICAgIH0KLQotICAgIERlY2ltYWxOdW1iZXIoZG91
YmxlIGQsIFJvdW5kaW5nRGVjaW1hbFBsYWNlc1R5cGUsIHVuc2lnbmVkIGRlY2ltYWxQbGFjZXMp
Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNmaW5pdGUoZCkpOwotICAgICAgICBkdG9hUm91bmRE
UChtX3NpZ25pZmljYW5kLCBkLCBkZWNpbWFsUGxhY2VzLCBtX3NpZ24sIG1fZXhwb25lbnQsIG1f
cHJlY2lzaW9uKTsKLQotICAgICAgICB1bnNpZ25lZCBzaWduaWZpY2FudEZpZ3VyZXMgPSAxICsg
bV9leHBvbmVudCArIGRlY2ltYWxQbGFjZXM7Ci0gICAgICAgIEFTU0VSVChzaWduaWZpY2FudEZp
Z3VyZXMgJiYgc2lnbmlmaWNhbnRGaWd1cmVzIDw9IHNpemVvZihEdG9hQnVmZmVyKSk7Ci0gICAg
ICAgIHdoaWxlIChtX3ByZWNpc2lvbiA8IHNpZ25pZmljYW50RmlndXJlcykKLSAgICAgICAgICAg
IG1fc2lnbmlmaWNhbmRbbV9wcmVjaXNpb24rK10gPSAnMCc7Ci0KLSAgICAgICAgQVNTRVJUKG1f
cHJlY2lzaW9uKTsKLSAgICAgICAgLy8gWmVybyBzaG91bGQgYWx3YXlzIGhhdmUgZXhwb25lbnQg
MC4KLSAgICAgICAgQVNTRVJUKG1fc2lnbmlmaWNhbmRbMF0gIT0gJzAnIHx8ICFtX2V4cG9uZW50
KTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBidWZmZXJMZW5ndGhGb3JTdHJpbmdEZWNpbWFsKCkg
Y29uc3Q7Ci0gICAgdW5zaWduZWQgYnVmZmVyTGVuZ3RoRm9yU3RyaW5nRXhwb25lbnRpYWwoKSBj
b25zdDsKLQotICAgIHVuc2lnbmVkIHRvU3RyaW5nRGVjaW1hbChVQ2hhciogYnVmZmVyLCB1bnNp
Z25lZCBidWZmZXJMZW5ndGgpIGNvbnN0OwotICAgIHVuc2lnbmVkIHRvU3RyaW5nRXhwb25lbnRp
YWwoVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoKSBjb25zdDsKLQotICAgIGJv
b2wgc2lnbigpIGNvbnN0IHsgcmV0dXJuIG1fc2lnbjsgfQotICAgIGludCBleHBvbmVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fZXhwb25lbnQ7IH0KLSAgICBjb25zdCBjaGFyKiBzaWduaWZpY2FuZCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2lnbmlmaWNhbmQ7IH0gLy8gc2lnbmlmaWNhbmQgY29udGFpbnMg
cHJlY2lzaW9uIGNoYXJhY3RlcnMsIGlzIG5vdCBudWxsLXRlcm1pbmF0ZWQuCi0gICAgdW5zaWdu
ZWQgcHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9wcmVjaXNpb247IH0KLQotcHJpdmF0ZToK
LSAgICBib29sIG1fc2lnbjsKLSAgICBpbnQgbV9leHBvbmVudDsKLSAgICBEdG9hQnVmZmVyIG1f
c2lnbmlmaWNhbmQ7Ci0gICAgdW5zaWduZWQgbV9wcmVjaXNpb247Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXVEYKLQotdXNpbmcgV1RGOjpEZWNpbWFsTnVtYmVyOwotdXNpbmcgV1RGOjpSb3VuZGlu
Z1NpZ25pZmljYW50RmlndXJlczsKLXVzaW5nIFdURjo6Um91bmRpbmdEZWNpbWFsUGxhY2VzOwot
Ci0jZW5kaWYgLy8gRGVjaW1hbE51bWJlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL2R0b2EuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hLmNwcApp
bmRleCAxNDY2ZGY3MzY4MDg5NWZiN2Q2NzJmNjc4YTc0Mjk1M2Q5YzZkNWFkLi5iNWIyNzMyNGVk
MDlkMDE5YTc3Y2IwZGVjMjg4NGUyY2IwZDY1MTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL2R0b2EuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRv
YS5jcHAKQEAgLTc1LDEyICs3NSwxMiBAQAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUg
PHd0Zi9BbHdheXNJbmxpbmUuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1
ZGUgPHd0Zi9EZWNpbWFsTnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNp
bmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5j
bHVkZSA8d3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uaD4KIAogI2lmIENPTVBJTEVSKE1TVkMp
CiAjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDI0NCkKQEAgLTEyNzQsNTYxICsxMjc0LDEyIEBA
IHN0YXRpYyBBTFdBWVNfSU5MSU5FIGludCBxdW9yZW0oQmlnSW50JiBiLCBCaWdJbnQmIFMpCiAg
ICAgcmV0dXJuIHE7CiB9CiAKLS8qIGR0b2EgZm9yIElFRUUgYXJpdGhtZXRpYyAoZG1nKTogY29u
dmVydCBkb3VibGUgdG8gQVNDSUkgc3RyaW5nLgotICoKLSAqIEluc3BpcmVkIGJ5ICJIb3cgdG8g
UHJpbnQgRmxvYXRpbmctUG9pbnQgTnVtYmVycyBBY2N1cmF0ZWx5IiBieQotICogR3V5IEwuIFN0
ZWVsZSwgSnIuIGFuZCBKb24gTC4gV2hpdGUgW1Byb2MuIEFDTSBTSUdQTEFOICc5MCwgcHAuIDEx
Mi0xMjZdLgotICoKLSAqIE1vZGlmaWNhdGlvbnM6Ci0gKiAgICAxLiBSYXRoZXIgdGhhbiBpdGVy
YXRpbmcsIHdlIHVzZSBhIHNpbXBsZSBudW1lcmljIG92ZXJlc3RpbWF0ZQotICogICAgICAgdG8g
ZGV0ZXJtaW5lIGsgPSBmbG9vcihsb2cxMChkKSkuICBXZSBzY2FsZSByZWxldmFudAotICogICAg
ICAgcXVhbnRpdGllcyB1c2luZyBPKGxvZzIoaykpIHJhdGhlciB0aGFuIE8oaykgbXVsdGlwbGlj
YXRpb25zLgotICogICAgMi4gRm9yIHNvbWUgbW9kZXMgPiAyIChjb3JyZXNwb25kaW5nIHRvIGVj
dnQgYW5kIGZjdnQpLCB3ZSBkb24ndAotICogICAgICAgdHJ5IHRvIGdlbmVyYXRlIGRpZ2l0cyBz
dHJpY3RseSBsZWZ0IHRvIHJpZ2h0LiAgSW5zdGVhZCwgd2UKLSAqICAgICAgIGNvbXB1dGUgd2l0
aCBmZXdlciBiaXRzIGFuZCBwcm9wYWdhdGUgdGhlIGNhcnJ5IGlmIG5lY2Vzc2FyeQotICogICAg
ICAgd2hlbiByb3VuZGluZyB0aGUgZmluYWwgZGlnaXQgdXAuICBUaGlzIGlzIG9mdGVuIGZhc3Rl
ci4KLSAqICAgIDMuIFVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgaW5wdXQgd2lsbCBiZSByb3Vu
ZGVkIG5lYXJlc3QsCi0gKiAgICAgICBtb2RlIDAgcmVuZGVycyAxZTIzIGFzIDFlMjMgcmF0aGVy
IHRoYW4gOS45OTk5OTk5OTk5OTk5OTllMjIuCi0gKiAgICAgICBUaGF0IGlzLCB3ZSBhbGxvdyBl
cXVhbGl0eSBpbiBzdG9wcGluZyB0ZXN0cyB3aGVuIHRoZQotICogICAgICAgcm91bmQtbmVhcmVz
dCBydWxlIHdpbGwgZ2l2ZSB0aGUgc2FtZSBmbG9hdGluZy1wb2ludCB2YWx1ZQotICogICAgICAg
YXMgd291bGQgc2F0aXNmYWN0aW9uIG9mIHRoZSBzdG9wcGluZyB0ZXN0IHdpdGggc3RyaWN0Ci0g
KiAgICAgICBpbmVxdWFsaXR5LgotICogICAgNC4gV2UgcmVtb3ZlIGNvbW1vbiBmYWN0b3JzIG9m
IHBvd2VycyBvZiAyIGZyb20gcmVsZXZhbnQKLSAqICAgICAgIHF1YW50aXRpZXMuCi0gKiAgICA1
LiBXaGVuIGNvbnZlcnRpbmcgZmxvYXRpbmctcG9pbnQgaW50ZWdlcnMgbGVzcyB0aGFuIDFlMTYs
Ci0gKiAgICAgICB3ZSB1c2UgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYyByYXRoZXIgdGhhbiBy
ZXNvcnRpbmcKLSAqICAgICAgIHRvIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2Vycy4KLSAqICAg
IDYuIFdoZW4gYXNrZWQgdG8gcHJvZHVjZSBmZXdlciB0aGFuIDE1IGRpZ2l0cywgd2UgZmlyc3Qg
dHJ5Ci0gKiAgICAgICB0byBnZXQgYnkgd2l0aCBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljOyB3
ZSByZXNvcnQgdG8KLSAqICAgICAgIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGFyaXRobWV0
aWMgb25seSBpZiB3ZSBjYW5ub3QKLSAqICAgICAgIGd1YXJhbnRlZSB0aGF0IHRoZSBmbG9hdGlu
Zy1wb2ludCBjYWxjdWxhdGlvbiBoYXMgZ2l2ZW4KLSAqICAgICAgIHRoZSBjb3JyZWN0bHkgcm91
bmRlZCByZXN1bHQuICBGb3IgayByZXF1ZXN0ZWQgZGlnaXRzIGFuZAotICogICAgICAgInVuaWZv
cm1seSIgZGlzdHJpYnV0ZWQgaW5wdXQsIHRoZSBwcm9iYWJpbGl0eSBpcwotICogICAgICAgc29t
ZXRoaW5nIGxpa2UgMTBeKGstMTUpIHRoYXQgd2UgbXVzdCByZXNvcnQgdG8gdGhlIGludDMyX3QK
LSAqICAgICAgIGNhbGN1bGF0aW9uLgotICoKLSAqIE5vdGU6ICdsZWZ0cmlnaHQnIHRyYW5zbGF0
ZXMgdG8gJ2dlbmVyYXRlIHNob3J0ZXN0IHBvc3NpYmxlIHN0cmluZycuCi0gKi8KLXRlbXBsYXRl
PGJvb2wgcm91bmRpbmdOb25lLCBib29sIHJvdW5kaW5nU2lnbmlmaWNhbnRGaWd1cmVzLCBib29s
IHJvdW5kaW5nRGVjaW1hbFBsYWNlcywgYm9vbCBsZWZ0cmlnaHQ+Ci12b2lkIGR0b2EoRHRvYUJ1
ZmZlciByZXN1bHQsIGRvdWJsZSBkZCwgaW50IG5kaWdpdHMsIGJvb2wmIHNpZ25PdXQsIGludCYg
ZXhwb25lbnRPdXQsIHVuc2lnbmVkJiBwcmVjaXNpb25PdXQpCi17Ci0gICAgLy8gRXhhY3RseSBv
bmUgcm91bmRpbmcgbW9kZSBtdXN0IGJlIHNwZWNpZmllZC4KLSAgICBBU1NFUlQocm91bmRpbmdO
b25lICsgcm91bmRpbmdTaWduaWZpY2FudEZpZ3VyZXMgKyByb3VuZGluZ0RlY2ltYWxQbGFjZXMg
PT0gMSk7Ci0gICAgLy8gcm91bmRpbmdOb25lIG9ubHkgYWxsb3dlZCAob25seSBzZW5zaWJsZT8p
IHdpdGggbGVmdHJpZ2h0IHNldC4KLSAgICBBU1NFUlQoIXJvdW5kaW5nTm9uZSB8fCBsZWZ0cmln
aHQpOwotCi0gICAgQVNTRVJUKGlzZmluaXRlKGRkKSk7Ci0KLSAgICBpbnQgYmJpdHMsIGIyLCBi
NSwgYmUsIGRpZywgaSwgaWVwcywgaWxpbSA9IDAsIGlsaW0wLCBpbGltMSA9IDAsCi0gICAgICAg
IGosIGoxLCBrLCBrMCwga19jaGVjaywgbTIsIG01LCBzMiwgczUsCi0gICAgICAgIHNwZWNfY2Fz
ZTsKLSAgICBpbnQzMl90IEw7Ci0gICAgaW50IGRlbm9ybTsKLSAgICB1aW50MzJfdCB4OwotICAg
IEJpZ0ludCBiLCBkZWx0YSwgbWxvLCBtaGksIFM7Ci0gICAgVSBkMiwgZXBzLCB1OwotICAgIGRv
dWJsZSBkczsKLSAgICBjaGFyKiBzOwotICAgIGNoYXIqIHMwOwotCi0gICAgdS5kID0gZGQ7Ci0K
LSAgICAvKiBJbmZpbml0eSBvciBOYU4gKi8KLSAgICBBU1NFUlQoKHdvcmQwKCZ1KSAmIEV4cF9t
YXNrKSAhPSBFeHBfbWFzayk7Ci0KLSAgICAvLyBKYXZhU2NyaXB0IHRvU3RyaW5nIGNvbnZlcnNp
b24gdHJlYXRzIC0wIGFzIDAuCi0gICAgaWYgKCFkdmFsKCZ1KSkgewotICAgICAgICBzaWduT3V0
ID0gZmFsc2U7Ci0gICAgICAgIGV4cG9uZW50T3V0ID0gMDsKLSAgICAgICAgcHJlY2lzaW9uT3V0
ID0gMTsKLSAgICAgICAgcmVzdWx0WzBdID0gJzAnOwotICAgICAgICByZXN1bHRbMV0gPSAnXDAn
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHdvcmQwKCZ1KSAmIFNpZ25fYml0
KSB7Ci0gICAgICAgIHNpZ25PdXQgPSB0cnVlOwotICAgICAgICB3b3JkMCgmdSkgJj0gflNpZ25f
Yml0OyAvLyBjbGVhciBzaWduIGJpdAotICAgIH0gZWxzZQotICAgICAgICBzaWduT3V0ID0gZmFs
c2U7Ci0KLSAgICBkMmIoYiwgJnUsICZiZSwgJmJiaXRzKTsKLSAgICBpZiAoKGkgPSAoaW50KSh3
b3JkMCgmdSkgPj4gRXhwX3NoaWZ0MSAmIChFeHBfbWFzayA+PiBFeHBfc2hpZnQxKSkpKSB7Ci0g
ICAgICAgIGR2YWwoJmQyKSA9IGR2YWwoJnUpOwotICAgICAgICB3b3JkMCgmZDIpICY9IEZyYWNf
bWFzazE7Ci0gICAgICAgIHdvcmQwKCZkMikgfD0gRXhwXzExOwotCi0gICAgICAgIC8qIGxvZyh4
KSAgICB+PX4gbG9nKDEuNSkgKyAoeC0xLjUpLzEuNQotICAgICAgICAgKiBsb2cxMCh4KSAgICAg
PSAgbG9nKHgpIC8gbG9nKDEwKQotICAgICAgICAgKiAgICAgICAgfj1+IGxvZygxLjUpL2xvZygx
MCkgKyAoeC0xLjUpLygxLjUqbG9nKDEwKSkKLSAgICAgICAgICogbG9nMTAoZCkgPSAoaS1CaWFz
KSpsb2coMikvbG9nKDEwKSArIGxvZzEwKGQyKQotICAgICAgICAgKgotICAgICAgICAgKiBUaGlz
IHN1Z2dlc3RzIGNvbXB1dGluZyBhbiBhcHByb3hpbWF0aW9uIGsgdG8gbG9nMTAoZCkgYnkKLSAg
ICAgICAgICoKLSAgICAgICAgICogayA9IChpIC0gQmlhcykqMC4zMDEwMjk5OTU2NjM5ODEKLSAg
ICAgICAgICogICAgKyAoIChkMi0xLjUpKjAuMjg5NTI5NjU0NjAyMTY4ICsgMC4xNzYwOTEyNTkw
NTU2ODEgKTsKLSAgICAgICAgICoKLSAgICAgICAgICogV2Ugd2FudCBrIHRvIGJlIHRvbyBsYXJn
ZSByYXRoZXIgdGhhbiB0b28gc21hbGwuCi0gICAgICAgICAqIFRoZSBlcnJvciBpbiB0aGUgZmly
c3Qtb3JkZXIgVGF5bG9yIHNlcmllcyBhcHByb3hpbWF0aW9uCi0gICAgICAgICAqIGlzIGluIG91
ciBmYXZvciwgc28gd2UganVzdCByb3VuZCB1cCB0aGUgY29uc3RhbnQgZW5vdWdoCi0gICAgICAg
ICAqIHRvIGNvbXBlbnNhdGUgZm9yIGFueSBlcnJvciBpbiB0aGUgbXVsdGlwbGljYXRpb24gb2YK
LSAgICAgICAgICogKGkgLSBCaWFzKSBieSAwLjMwMTAyOTk5NTY2Mzk4MTsgc2luY2UgfGkgLSBC
aWFzfCA8PSAxMDc3LAotICAgICAgICAgKiBhbmQgMTA3NyAqIDAuMzAxMDMgKiAyXi01MiB+PX4g
Ny4yZS0xNCwKLSAgICAgICAgICogYWRkaW5nIDFlLTEzIHRvIHRoZSBjb25zdGFudCB0ZXJtIG1v
cmUgdGhhbiBzdWZmaWNlcy4KLSAgICAgICAgICogSGVuY2Ugd2UgYWRqdXN0IHRoZSBjb25zdGFu
dCB0ZXJtIHRvIDAuMTc2MDkxMjU5MDU1OC4KLSAgICAgICAgICogKFdlIGNvdWxkIGdldCBhIG1v
cmUgYWNjdXJhdGUgayBieSBpbnZva2luZyBsb2cxMCwKLSAgICAgICAgICogIGJ1dCB0aGlzIGlz
IHByb2JhYmx5IG5vdCB3b3J0aHdoaWxlLikKLSAgICAgICAgICovCi0KLSAgICAgICAgaSAtPSBC
aWFzOwotICAgICAgICBkZW5vcm0gPSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIGQgaXMg
ZGVub3JtYWxpemVkICovCi0KLSAgICAgICAgaSA9IGJiaXRzICsgYmUgKyAoQmlhcyArIChQIC0g
MSkgLSAxKTsKLSAgICAgICAgeCA9IChpID4gMzIpID8gKHdvcmQwKCZ1KSA8PCAoNjQgLSBpKSkg
fCAod29yZDEoJnUpID4+IChpIC0gMzIpKQotICAgICAgICAgICAgICAgIDogd29yZDEoJnUpIDw8
ICgzMiAtIGkpOwotICAgICAgICBkdmFsKCZkMikgPSB4OwotICAgICAgICB3b3JkMCgmZDIpIC09
IDMxICogRXhwX21zazE7IC8qIGFkanVzdCBleHBvbmVudCAqLwotICAgICAgICBpIC09IChCaWFz
ICsgKFAgLSAxKSAtIDEpICsgMTsKLSAgICAgICAgZGVub3JtID0gMTsKLSAgICB9Ci0gICAgZHMg
PSAoZHZhbCgmZDIpIC0gMS41KSAqIDAuMjg5NTI5NjU0NjAyMTY4ICsgMC4xNzYwOTEyNTkwNTU4
ICsgKGkgKiAwLjMwMTAyOTk5NTY2Mzk4MSk7Ci0gICAgayA9IChpbnQpZHM7Ci0gICAgaWYgKGRz
IDwgMC4gJiYgZHMgIT0gaykKLSAgICAgICAgay0tOyAgICAvKiB3YW50IGsgPSBmbG9vcihkcykg
Ki8KLSAgICBrX2NoZWNrID0gMTsKLSAgICBpZiAoayA+PSAwICYmIGsgPD0gVGVuX3BtYXgpIHsK
LSAgICAgICAgaWYgKGR2YWwoJnUpIDwgdGVuc1trXSkKLSAgICAgICAgICAgIGstLTsKLSAgICAg
ICAga19jaGVjayA9IDA7Ci0gICAgfQotICAgIGogPSBiYml0cyAtIGkgLSAxOwotICAgIGlmIChq
ID49IDApIHsKLSAgICAgICAgYjIgPSAwOwotICAgICAgICBzMiA9IGo7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgYjIgPSAtajsKLSAgICAgICAgczIgPSAwOwotICAgIH0KLSAgICBpZiAoayA+PSAw
KSB7Ci0gICAgICAgIGI1ID0gMDsKLSAgICAgICAgczUgPSBrOwotICAgICAgICBzMiArPSBrOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGIyIC09IGs7Ci0gICAgICAgIGI1ID0gLWs7Ci0gICAgICAg
IHM1ID0gMDsKLSAgICB9Ci0KLSAgICBpZiAocm91bmRpbmdOb25lKSB7Ci0gICAgICAgIGlsaW0g
PSBpbGltMSA9IC0xOwotICAgICAgICBpID0gMTg7Ci0gICAgICAgIG5kaWdpdHMgPSAwOwotICAg
IH0KLSAgICBpZiAocm91bmRpbmdTaWduaWZpY2FudEZpZ3VyZXMpIHsKLSAgICAgICAgaWYgKG5k
aWdpdHMgPD0gMCkKLSAgICAgICAgICAgIG5kaWdpdHMgPSAxOwotICAgICAgICBpbGltID0gaWxp
bTEgPSBpID0gbmRpZ2l0czsKLSAgICB9Ci0gICAgaWYgKHJvdW5kaW5nRGVjaW1hbFBsYWNlcykg
ewotICAgICAgICBpID0gbmRpZ2l0cyArIGsgKyAxOwotICAgICAgICBpbGltID0gaTsKLSAgICAg
ICAgaWxpbTEgPSBpIC0gMTsKLSAgICAgICAgaWYgKGkgPD0gMCkKLSAgICAgICAgICAgIGkgPSAx
OwotICAgIH0KLQotICAgIHMgPSBzMCA9IHJlc3VsdDsKLQotICAgIGlmIChpbGltID49IDAgJiYg
aWxpbSA8PSBRdWlja19tYXgpIHsKLSAgICAgICAgLyogVHJ5IHRvIGdldCBieSB3aXRoIGZsb2F0
aW5nLXBvaW50IGFyaXRobWV0aWMuICovCi0KLSAgICAgICAgaSA9IDA7Ci0gICAgICAgIGR2YWwo
JmQyKSA9IGR2YWwoJnUpOwotICAgICAgICBrMCA9IGs7Ci0gICAgICAgIGlsaW0wID0gaWxpbTsK
LSAgICAgICAgaWVwcyA9IDI7IC8qIGNvbnNlcnZhdGl2ZSAqLwotICAgICAgICBpZiAoayA+IDAp
IHsKLSAgICAgICAgICAgIGRzID0gdGVuc1trICYgMHhmXTsKLSAgICAgICAgICAgIGogPSBrID4+
IDQ7Ci0gICAgICAgICAgICBpZiAoaiAmIEJsZXRjaCkgewotICAgICAgICAgICAgICAgIC8qIHBy
ZXZlbnQgb3ZlcmZsb3dzICovCi0gICAgICAgICAgICAgICAgaiAmPSBCbGV0Y2ggLSAxOwotICAg
ICAgICAgICAgICAgIGR2YWwoJnUpIC89IGJpZ3RlbnNbbl9iaWd0ZW5zIC0gMV07Ci0gICAgICAg
ICAgICAgICAgaWVwcysrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yICg7IGo7IGog
Pj49IDEsIGkrKykgewotICAgICAgICAgICAgICAgIGlmIChqICYgMSkgewotICAgICAgICAgICAg
ICAgICAgICBpZXBzKys7Ci0gICAgICAgICAgICAgICAgICAgIGRzICo9IGJpZ3RlbnNbaV07Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZHZhbCgmdSkgLz0g
ZHM7Ci0gICAgICAgIH0gZWxzZSBpZiAoKGoxID0gLWspKSB7Ci0gICAgICAgICAgICBkdmFsKCZ1
KSAqPSB0ZW5zW2oxICYgMHhmXTsKLSAgICAgICAgICAgIGZvciAoaiA9IGoxID4+IDQ7IGo7IGog
Pj49IDEsIGkrKykgewotICAgICAgICAgICAgICAgIGlmIChqICYgMSkgewotICAgICAgICAgICAg
ICAgICAgICBpZXBzKys7Ci0gICAgICAgICAgICAgICAgICAgIGR2YWwoJnUpICo9IGJpZ3RlbnNb
aV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IGlmIChrX2NoZWNrICYmIGR2YWwoJnUpIDwgMS4gJiYgaWxpbSA+IDApIHsKLSAgICAgICAgICAg
IGlmIChpbGltMSA8PSAwKQotICAgICAgICAgICAgICAgIGdvdG8gZmFzdEZhaWxlZDsKLSAgICAg
ICAgICAgIGlsaW0gPSBpbGltMTsKLSAgICAgICAgICAgIGstLTsKLSAgICAgICAgICAgIGR2YWwo
JnUpICo9IDEwLjsKLSAgICAgICAgICAgIGllcHMrKzsKLSAgICAgICAgfQotICAgICAgICBkdmFs
KCZlcHMpID0gKGllcHMgKiBkdmFsKCZ1KSkgKyA3LjsKLSAgICAgICAgd29yZDAoJmVwcykgLT0g
KFAgLSAxKSAqIEV4cF9tc2sxOwotICAgICAgICBpZiAoIWlsaW0pIHsKLSAgICAgICAgICAgIFMu
Y2xlYXIoKTsKLSAgICAgICAgICAgIG1oaS5jbGVhcigpOwotICAgICAgICAgICAgZHZhbCgmdSkg
LT0gNS47Ci0gICAgICAgICAgICBpZiAoZHZhbCgmdSkgPiBkdmFsKCZlcHMpKQotICAgICAgICAg
ICAgICAgIGdvdG8gb25lRGlnaXQ7Ci0gICAgICAgICAgICBpZiAoZHZhbCgmdSkgPCAtZHZhbCgm
ZXBzKSkKLSAgICAgICAgICAgICAgICBnb3RvIG5vRGlnaXRzOwotICAgICAgICAgICAgZ290byBm
YXN0RmFpbGVkOwotICAgICAgICB9Ci0gICAgICAgIGlmIChsZWZ0cmlnaHQpIHsKLSAgICAgICAg
ICAgIC8qIFVzZSBTdGVlbGUgJiBXaGl0ZSBtZXRob2Qgb2Ygb25seQotICAgICAgICAgICAgICog
Z2VuZXJhdGluZyBkaWdpdHMgbmVlZGVkLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBk
dmFsKCZlcHMpID0gKDAuNSAvIHRlbnNbaWxpbSAtIDFdKSAtIGR2YWwoJmVwcyk7Ci0gICAgICAg
ICAgICBmb3IgKGkgPSAwOzspIHsKLSAgICAgICAgICAgICAgICBMID0gKGxvbmcgaW50KWR2YWwo
JnUpOwotICAgICAgICAgICAgICAgIGR2YWwoJnUpIC09IEw7Ci0gICAgICAgICAgICAgICAgKnMr
KyA9ICcwJyArIChpbnQpTDsKLSAgICAgICAgICAgICAgICBpZiAoZHZhbCgmdSkgPCBkdmFsKCZl
cHMpKQotICAgICAgICAgICAgICAgICAgICBnb3RvIHJldDsKLSAgICAgICAgICAgICAgICBpZiAo
MS4gLSBkdmFsKCZ1KSA8IGR2YWwoJmVwcykpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gYnVt
cFVwOwotICAgICAgICAgICAgICAgIGlmICgrK2kgPj0gaWxpbSkKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZHZhbCgmZXBzKSAqPSAxMC47Ci0gICAgICAgICAg
ICAgICAgZHZhbCgmdSkgKj0gMTAuOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgLyogR2VuZXJhdGUgaWxpbSBkaWdpdHMsIHRoZW4gZml4IHRoZW0gdXAuICov
Ci0gICAgICAgICAgICBkdmFsKCZlcHMpICo9IHRlbnNbaWxpbSAtIDFdOwotICAgICAgICAgICAg
Zm9yIChpID0gMTs7IGkrKywgZHZhbCgmdSkgKj0gMTAuKSB7Ci0gICAgICAgICAgICAgICAgTCA9
IChpbnQzMl90KShkdmFsKCZ1KSk7Ci0gICAgICAgICAgICAgICAgaWYgKCEoZHZhbCgmdSkgLT0g
TCkpCi0gICAgICAgICAgICAgICAgICAgIGlsaW0gPSBpOwotICAgICAgICAgICAgICAgICpzKysg
PSAnMCcgKyAoaW50KUw7Ci0gICAgICAgICAgICAgICAgaWYgKGkgPT0gaWxpbSkgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoZHZhbCgmdSkgPiAwLjUgKyBkdmFsKCZlcHMpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgZ290byBidW1wVXA7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkdmFs
KCZ1KSA8IDAuNSAtIGR2YWwoJmVwcykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxl
ICgqLS1zID09ICcwJykgeyB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBzKys7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBnb3RvIHJldDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLWZhc3RGYWlsZWQ6Ci0gICAgICAgIHMgPSBzMDsKLSAgICAgICAgZHZhbCgmdSkg
PSBkdmFsKCZkMik7Ci0gICAgICAgIGsgPSBrMDsKLSAgICAgICAgaWxpbSA9IGlsaW0wOwotICAg
IH0KLQotICAgIC8qIERvIHdlIGhhdmUgYSAic21hbGwiIGludGVnZXI/ICovCi0KLSAgICBpZiAo
YmUgPj0gMCAmJiBrIDw9IEludF9tYXgpIHsKLSAgICAgICAgLyogWWVzLiAqLwotICAgICAgICBk
cyA9IHRlbnNba107Ci0gICAgICAgIGlmIChuZGlnaXRzIDwgMCAmJiBpbGltIDw9IDApIHsKLSAg
ICAgICAgICAgIFMuY2xlYXIoKTsKLSAgICAgICAgICAgIG1oaS5jbGVhcigpOwotICAgICAgICAg
ICAgaWYgKGlsaW0gPCAwIHx8IGR2YWwoJnUpIDw9IDUgKiBkcykKLSAgICAgICAgICAgICAgICBn
b3RvIG5vRGlnaXRzOwotICAgICAgICAgICAgZ290byBvbmVEaWdpdDsKLSAgICAgICAgfQotICAg
ICAgICBmb3IgKGkgPSAxOzsgaSsrLCBkdmFsKCZ1KSAqPSAxMC4pIHsKLSAgICAgICAgICAgIEwg
PSAoaW50MzJfdCkoZHZhbCgmdSkgLyBkcyk7Ci0gICAgICAgICAgICBkdmFsKCZ1KSAtPSBMICog
ZHM7Ci0gICAgICAgICAgICAqcysrID0gJzAnICsgKGludClMOwotICAgICAgICAgICAgaWYgKCFk
dmFsKCZ1KSkgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaWYgKGkgPT0gaWxpbSkgewotICAgICAgICAgICAgICAgIGR2YWwoJnUpICs9IGR2YWwo
JnUpOwotICAgICAgICAgICAgICAgIGlmIChkdmFsKCZ1KSA+IGRzIHx8IChkdmFsKCZ1KSA9PSBk
cyAmJiAoTCAmIDEpKSkgewotYnVtcFVwOgotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKi0t
cyA9PSAnOScpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA9PSBzMCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGsrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
cyA9ICcwJzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgKysqcysrOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBnb3RvIHJldDsKLSAgICB9Ci0KLSAgICBtMiA9IGIyOwotICAgIG01ID0gYjU7Ci0g
ICAgbWhpLmNsZWFyKCk7Ci0gICAgbWxvLmNsZWFyKCk7Ci0gICAgaWYgKGxlZnRyaWdodCkgewot
ICAgICAgICBpID0gZGVub3JtID8gYmUgKyAoQmlhcyArIChQIC0gMSkgLSAxICsgMSkgOiAxICsg
UCAtIGJiaXRzOwotICAgICAgICBiMiArPSBpOwotICAgICAgICBzMiArPSBpOwotICAgICAgICBp
MmIobWhpLCAxKTsKLSAgICB9Ci0gICAgaWYgKG0yID4gMCAmJiBzMiA+IDApIHsKLSAgICAgICAg
aSA9IG0yIDwgczIgPyBtMiA6IHMyOwotICAgICAgICBiMiAtPSBpOwotICAgICAgICBtMiAtPSBp
OwotICAgICAgICBzMiAtPSBpOwotICAgIH0KLSAgICBpZiAoYjUgPiAwKSB7Ci0gICAgICAgIGlm
IChsZWZ0cmlnaHQpIHsKLSAgICAgICAgICAgIGlmIChtNSA+IDApIHsKLSAgICAgICAgICAgICAg
ICBwb3c1bXVsdChtaGksIG01KTsKLSAgICAgICAgICAgICAgICBtdWx0KGIsIG1oaSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKGogPSBiNSAtIG01KSkKLSAgICAgICAgICAgICAg
ICBwb3c1bXVsdChiLCBqKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBwb3c1bXVsdChi
LCBiNSk7Ci0gICAgfQotICAgIGkyYihTLCAxKTsKLSAgICBpZiAoczUgPiAwKQotICAgICAgICBw
b3c1bXVsdChTLCBzNSk7Ci0KLSAgICAvKiBDaGVjayBmb3Igc3BlY2lhbCBjYXNlIHRoYXQgZCBp
cyBhIG5vcm1hbGl6ZWQgcG93ZXIgb2YgMi4gKi8KLQotICAgIHNwZWNfY2FzZSA9IDA7Ci0gICAg
aWYgKChyb3VuZGluZ05vbmUgfHwgbGVmdHJpZ2h0KSAmJiAoIXdvcmQxKCZ1KSAmJiAhKHdvcmQw
KCZ1KSAmIEJuZHJ5X21hc2spICYmIHdvcmQwKCZ1KSAmIChFeHBfbWFzayAmIH5FeHBfbXNrMSkp
KSB7Ci0gICAgICAgIC8qIFRoZSBzcGVjaWFsIGNhc2UgKi8KLSAgICAgICAgYjIgKz0gTG9nMlA7
Ci0gICAgICAgIHMyICs9IExvZzJQOwotICAgICAgICBzcGVjX2Nhc2UgPSAxOwotICAgIH0KLQot
ICAgIC8qIEFycmFuZ2UgZm9yIGNvbnZlbmllbnQgY29tcHV0YXRpb24gb2YgcXVvdGllbnRzOgot
ICAgICAqIHNoaWZ0IGxlZnQgaWYgbmVjZXNzYXJ5IHNvIGRpdmlzb3IgaGFzIDQgbGVhZGluZyAw
IGJpdHMuCi0gICAgICoKLSAgICAgKiBQZXJoYXBzIHdlIHNob3VsZCBqdXN0IGNvbXB1dGUgbGVh
ZGluZyAyOCBiaXRzIG9mIFMgb25jZQotICAgICAqIGFuZCBmb3IgYWxsIGFuZCBwYXNzIHRoZW0g
YW5kIGEgc2hpZnQgdG8gcXVvcmVtLCBzbyBpdAotICAgICAqIGNhbiBkbyBzaGlmdHMgYW5kIG9y
cyB0byBjb21wdXRlIHRoZSBudW1lcmF0b3IgZm9yIHEuCi0gICAgICovCi0gICAgaWYgKChpID0g
KChzNSA/IDMyIC0gaGkwYml0cyhTLndvcmRzKClbUy5zaXplKCkgLSAxXSkgOiAxKSArIHMyKSAm
IDB4MWYpKQotICAgICAgICBpID0gMzIgLSBpOwotICAgIGlmIChpID4gNCkgewotICAgICAgICBp
IC09IDQ7Ci0gICAgICAgIGIyICs9IGk7Ci0gICAgICAgIG0yICs9IGk7Ci0gICAgICAgIHMyICs9
IGk7Ci0gICAgfSBlbHNlIGlmIChpIDwgNCkgewotICAgICAgICBpICs9IDI4OwotICAgICAgICBi
MiArPSBpOwotICAgICAgICBtMiArPSBpOwotICAgICAgICBzMiArPSBpOwotICAgIH0KLSAgICBp
ZiAoYjIgPiAwKQotICAgICAgICBsc2hpZnQoYiwgYjIpOwotICAgIGlmIChzMiA+IDApCi0gICAg
ICAgIGxzaGlmdChTLCBzMik7Ci0gICAgaWYgKGtfY2hlY2spIHsKLSAgICAgICAgaWYgKGNtcChi
LCBTKSA8IDApIHsKLSAgICAgICAgICAgIGstLTsKLSAgICAgICAgICAgIG11bHRhZGQoYiwgMTAs
IDApOyAgICAvKiB3ZSBib3RjaGVkIHRoZSBrIGVzdGltYXRlICovCi0gICAgICAgICAgICBpZiAo
bGVmdHJpZ2h0KQotICAgICAgICAgICAgICAgIG11bHRhZGQobWhpLCAxMCwgMCk7Ci0gICAgICAg
ICAgICBpbGltID0gaWxpbTE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGlsaW0gPD0gMCAm
JiByb3VuZGluZ0RlY2ltYWxQbGFjZXMpIHsKLSAgICAgICAgaWYgKGlsaW0gPCAwKQotICAgICAg
ICAgICAgZ290byBub0RpZ2l0czsKLSAgICAgICAgbXVsdGFkZChTLCA1LCAwKTsKLSAgICAgICAg
Ly8gRm9yIElFRUUtNzU0IHVuYmlhc2VkIHJvdW5kaW5nIHRoaXMgY2hlY2sgc2hvdWxkIGJlIDw9
LCBzdWNoIHRoYXQgMC41IHdvdWxkIGZsdXNoIHRvIHplcm8uCi0gICAgICAgIGlmIChjbXAoYiwg
UykgPCAwKQotICAgICAgICAgICAgZ290byBub0RpZ2l0czsKLSAgICAgICAgZ290byBvbmVEaWdp
dDsKLSAgICB9Ci0gICAgaWYgKGxlZnRyaWdodCkgewotICAgICAgICBpZiAobTIgPiAwKQotICAg
ICAgICAgICAgbHNoaWZ0KG1oaSwgbTIpOwotCi0gICAgICAgIC8qIENvbXB1dGUgbWxvIC0tIGNo
ZWNrIGZvciBzcGVjaWFsIGNhc2UKLSAgICAgICAgICogdGhhdCBkIGlzIGEgbm9ybWFsaXplZCBw
b3dlciBvZiAyLgotICAgICAgICAgKi8KLQotICAgICAgICBtbG8gPSBtaGk7Ci0gICAgICAgIGlm
IChzcGVjX2Nhc2UpCi0gICAgICAgICAgICBsc2hpZnQobWhpLCBMb2cyUCk7Ci0KLSAgICAgICAg
Zm9yIChpID0gMTs7aSsrKSB7Ci0gICAgICAgICAgICBkaWcgPSBxdW9yZW0oYiwgUykgKyAnMCc7
Ci0gICAgICAgICAgICAvKiBEbyB3ZSB5ZXQgaGF2ZSB0aGUgc2hvcnRlc3QgZGVjaW1hbCBzdHJp
bmcKLSAgICAgICAgICAgICAqIHRoYXQgd2lsbCByb3VuZCB0byBkPwotICAgICAgICAgICAgICov
Ci0gICAgICAgICAgICBqID0gY21wKGIsIG1sbyk7Ci0gICAgICAgICAgICBkaWZmKGRlbHRhLCBT
LCBtaGkpOwotICAgICAgICAgICAgajEgPSBkZWx0YS5zaWduID8gMSA6IGNtcChiLCBkZWx0YSk7
Ci0jaWZkZWYgRFRPQV9ST1VORF9CSUFTRUQKLSAgICAgICAgICAgIGlmIChqIDwgMCB8fCAhaikg
ewotI2Vsc2UKLSAgICAgICAgICAgIC8vIEZJWE1FOiBFQ01BLTI2MiBzcGVjaWZpZXMgdGhhdCBl
cXVpZGlzdGFudCByZXN1bHRzIHJvdW5kIGF3YXkgZnJvbQotICAgICAgICAgICAgLy8gemVybywg
d2hpY2ggcHJvYmFibHkgbWVhbnMgd2Ugc2hvdWxkbid0IGJlIG9uIHRoZSB1bmJpYXNlZCBjb2Rl
IHBhdGgKLSAgICAgICAgICAgIC8vICh0aGUgKHdvcmQxKCZ1KSAmIDEpIGNsYXVzZSBpcyBsb29r
aW5nIGhpZ2hseSBzdXNwaWNpb3VzKS4gSSBoYXZlbid0Ci0gICAgICAgICAgICAvLyB5ZXQgdW5k
ZXJzdG9vZCB0aGlzIGNvZGUgd2VsbCBlbm91Z2ggdG8gbWFrZSB0aGUgY2FsbCwgYnV0IHdlIHNo
b3VsZAotICAgICAgICAgICAgLy8gcHJvYmFibHkgYmUgZW5hYmxpbmcgRFRPQV9ST1VORF9CSUFT
RUQuIEkgdGhpbmsgdGhlIGludGVyZXN0aW5nIGNvcm5lcgotICAgICAgICAgICAgLy8gY2FzZSB0
byB1bmRlcnN0YW5kIGlzIHByb2JhYmx5ICJNYXRoLnBvdygwLjUsIDI0KS50b1N0cmluZygpIi4K
LSAgICAgICAgICAgIC8vIEkgYmVsaWV2ZSB0aGlzIHZhbHVlIGlzIGludGVyZXN0aW5nIGJlY2F1
c2UgSSB0aGluayBpdCBpcyBwcmVjaXNlbHkKLSAgICAgICAgICAgIC8vIHJlcHJlc2VudGFibGUg
aW4gYmluYXJ5IGZsb2F0aW5nIHBvaW50LCBhbmQgaXRzIGRlY2ltYWwgcmVwcmVzZW50YXRpb24K
LSAgICAgICAgICAgIC8vIGhhcyBhIHNpbmdsZSBkaWdpdCB0aGF0IFN0ZWVsZSAmIFdoaXRlIHJl
ZHVjdGlvbiBjYW4gcmVtb3ZlLCB3aXRoIHRoZQotICAgICAgICAgICAgLy8gdmFsdWUgNSAodGh1
cyBlcXVpZGlzdGFudCBmcm9tIHRoZSBuZXh0IG51bWJlcnMgYWJvdmUgYW5kIGJlbG93KS4KLSAg
ICAgICAgICAgIC8vIFdlIHByb2R1Y2UgdGhlIGNvcnJlY3QgYW5zd2VyIHVzaW5nIGVpdGhlciBj
b2RlcGF0aCwgYW5kIEkgZG9uJ3QgYXMKLSAgICAgICAgICAgIC8vIHlldCB1bmRlcnN0YW5kIHdo
eS4gOi0pCi0gICAgICAgICAgICBpZiAoIWoxICYmICEod29yZDEoJnUpICYgMSkpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoZGlnID09ICc5JykKLSAgICAgICAgICAgICAgICAgICAgZ290byByb3Vu
ZDl1cDsKLSAgICAgICAgICAgICAgICBpZiAoaiA+IDApCi0gICAgICAgICAgICAgICAgICAgIGRp
ZysrOwotICAgICAgICAgICAgICAgICpzKysgPSBkaWc7Ci0gICAgICAgICAgICAgICAgZ290byBy
ZXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaiA8IDAgfHwgKCFqICYmICEod29y
ZDEoJnUpICYgMSkpKSB7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBpZiAoKGIud29yZHMoKVsw
XSB8fCBiLnNpemUoKSA+IDEpICYmIChqMSA+IDApKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxz
aGlmdChiLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgajEgPSBjbXAoYiwgUyk7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIEZvciBJRUVFLTc1NCByb3VuZC10by1ldmVuLCB0aGlzIGNoZWNrIHNo
b3VsZCBiZSAoajEgPiAwIHx8ICghajEgJiYgKGRpZyAmIDEpKSksCi0gICAgICAgICAgICAgICAg
ICAgIC8vIGJ1dCBFQ01BLTI2MiBzcGVjaWZpZXMgdGhhdCBlcXVpZGlzdGFudCB2YWx1ZXMgKGUu
Zy4gKC41KS50b0ZpeGVkKCkpIHNob3VsZAotICAgICAgICAgICAgICAgICAgICAvLyBiZSByb3Vu
ZGVkIGF3YXkgZnJvbSB6ZXJvLgotICAgICAgICAgICAgICAgICAgICBpZiAoajEgPj0gMCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpZyA9PSAnOScpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ290byByb3VuZDl1cDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpZysr
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICpzKysgPSBkaWc7Ci0gICAgICAgICAgICAgICAgZ290byByZXQ7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAoajEgPiAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGRpZyA9PSAn
OScpIHsgLyogcG9zc2libGUgaWYgaSA9PSAxICovCi1yb3VuZDl1cDoKLSAgICAgICAgICAgICAg
ICAgICAgKnMrKyA9ICc5JzsKLSAgICAgICAgICAgICAgICAgICAgZ290byByb3VuZG9mZjsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgKnMrKyA9IGRpZyArIDE7Ci0gICAgICAg
ICAgICAgICAgZ290byByZXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAqcysrID0gZGln
OwotICAgICAgICAgICAgaWYgKGkgPT0gaWxpbSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIG11bHRhZGQoYiwgMTAsIDApOwotICAgICAgICAgICAgbXVsdGFkZChtbG8sIDEw
LCAwKTsKLSAgICAgICAgICAgIG11bHRhZGQobWhpLCAxMCwgMCk7Ci0gICAgICAgIH0KLSAgICB9
IGVsc2UgewotICAgICAgICBmb3IgKGkgPSAxOzsgaSsrKSB7Ci0gICAgICAgICAgICAqcysrID0g
ZGlnID0gcXVvcmVtKGIsIFMpICsgJzAnOwotICAgICAgICAgICAgaWYgKCFiLndvcmRzKClbMF0g
JiYgYi5zaXplKCkgPD0gMSkKLSAgICAgICAgICAgICAgICBnb3RvIHJldDsKLSAgICAgICAgICAg
IGlmIChpID49IGlsaW0pCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBtdWx0
YWRkKGIsIDEwLCAwKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIFJvdW5kIG9mZiBsYXN0
IGRpZ2l0ICovCi0KLSAgICBsc2hpZnQoYiwgMSk7Ci0gICAgaiA9IGNtcChiLCBTKTsKLSAgICAv
LyBGb3IgSUVFRS03NTQgcm91bmQtdG8tZXZlbiwgdGhpcyBjaGVjayBzaG91bGQgYmUgKGogPiAw
IHx8ICghaiAmJiAoZGlnICYgMSkpKSwKLSAgICAvLyBidXQgRUNNQS0yNjIgc3BlY2lmaWVzIHRo
YXQgZXF1aWRpc3RhbnQgdmFsdWVzIChlLmcuICguNSkudG9GaXhlZCgpKSBzaG91bGQKLSAgICAv
LyBiZSByb3VuZGVkIGF3YXkgZnJvbSB6ZXJvLgotICAgIGlmIChqID49IDApIHsKLXJvdW5kb2Zm
OgotICAgICAgICB3aGlsZSAoKi0tcyA9PSAnOScpCi0gICAgICAgICAgICBpZiAocyA9PSBzMCkg
ewotICAgICAgICAgICAgICAgIGsrKzsKLSAgICAgICAgICAgICAgICAqcysrID0gJzEnOwotICAg
ICAgICAgICAgICAgIGdvdG8gcmV0OwotICAgICAgICAgICAgfQotICAgICAgICArKypzKys7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgd2hpbGUgKCotLXMgPT0gJzAnKSB7IH0KLSAgICAgICAgcysr
OwotICAgIH0KLSAgICBnb3RvIHJldDsKLW5vRGlnaXRzOgotICAgIGV4cG9uZW50T3V0ID0gMDsK
LSAgICBwcmVjaXNpb25PdXQgPSAxOwotICAgIHJlc3VsdFswXSA9ICcwJzsKLSAgICByZXN1bHRb
MV0gPSAnXDAnOwotICAgIHJldHVybjsKLW9uZURpZ2l0OgotICAgICpzKysgPSAnMSc7Ci0gICAg
aysrOwotICAgIGdvdG8gcmV0OwotcmV0OgotICAgIEFTU0VSVChzID4gcmVzdWx0KTsKLSAgICAq
cyA9IDA7Ci0gICAgZXhwb25lbnRPdXQgPSBrOwotICAgIHByZWNpc2lvbk91dCA9IHMgLSByZXN1
bHQ7Ci19Ci0KLXZvaWQgZHRvYShEdG9hQnVmZmVyIHJlc3VsdCwgZG91YmxlIGRkLCBib29sJiBz
aWduLCBpbnQmIGV4cG9uZW50LCB1bnNpZ25lZCYgcHJlY2lzaW9uKQotewotICAgIC8vIGZsYWdz
IGFyZSByb3VuZGluZ05vbmUsIGxlZnRyaWdodC4KLSAgICBkdG9hPHRydWUsIGZhbHNlLCBmYWxz
ZSwgdHJ1ZT4ocmVzdWx0LCBkZCwgMCwgc2lnbiwgZXhwb25lbnQsIHByZWNpc2lvbik7Ci19Ci0K
LXZvaWQgZHRvYVJvdW5kU0YoRHRvYUJ1ZmZlciByZXN1bHQsIGRvdWJsZSBkZCwgaW50IG5kaWdp
dHMsIGJvb2wmIHNpZ24sIGludCYgZXhwb25lbnQsIHVuc2lnbmVkJiBwcmVjaXNpb24pCi17Ci0g
ICAgLy8gZmxhZyBpcyByb3VuZGluZ1NpZ25pZmljYW50RmlndXJlcy4KLSAgICBkdG9hPGZhbHNl
LCB0cnVlLCBmYWxzZSwgZmFsc2U+KHJlc3VsdCwgZGQsIG5kaWdpdHMsIHNpZ24sIGV4cG9uZW50
LCBwcmVjaXNpb24pOwotfQotCi12b2lkIGR0b2FSb3VuZERQKER0b2FCdWZmZXIgcmVzdWx0LCBk
b3VibGUgZGQsIGludCBuZGlnaXRzLCBib29sJiBzaWduLCBpbnQmIGV4cG9uZW50LCB1bnNpZ25l
ZCYgcHJlY2lzaW9uKQotewotICAgIC8vIGZsYWcgaXMgcm91bmRpbmdEZWNpbWFsUGxhY2VzLgot
ICAgIGR0b2E8ZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZT4ocmVzdWx0LCBkZCwgbmRpZ2l0cywg
c2lnbiwgZXhwb25lbnQsIHByZWNpc2lvbik7Ci19Ci0KLXN0YXRpYyBBTFdBWVNfSU5MSU5FIHZv
aWQgY29weUFzY2lpVG9VVEYxNihVQ2hhciogbmV4dCwgY29uc3QgY2hhciogc3JjLCB1bnNpZ25l
ZCBzaXplKQorY29uc3QgY2hhciAqbnVtYmVyVG9TdHJpbmcoZG91YmxlIGQsIE51bWJlclRvU3Ry
aW5nQnVmZmVyIGJ1ZmZlcikKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsg
KytpKQotICAgICAgICAqbmV4dCsrID0gKnNyYysrOwotfQotCi11bnNpZ25lZCBudW1iZXJUb1N0
cmluZyhkb3VibGUgZCwgTnVtYmVyVG9TdHJpbmdCdWZmZXIgYnVmZmVyKQotewotICAgIC8vIEhh
bmRsZSBOYU4gYW5kIEluZmluaXR5LgotICAgIGlmICghaXNmaW5pdGUoZCkpIHsKLSAgICAgICAg
aWYgKGlzbmFuKGQpKSB7Ci0gICAgICAgICAgICBjb3B5QXNjaWlUb1VURjE2KGJ1ZmZlciwgIk5h
TiIsIDMpOwotICAgICAgICAgICAgcmV0dXJuIDM7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGQg
PiAwKSB7Ci0gICAgICAgICAgICBjb3B5QXNjaWlUb1VURjE2KGJ1ZmZlciwgIkluZmluaXR5Iiwg
OCk7Ci0gICAgICAgICAgICByZXR1cm4gODsKLSAgICAgICAgfQotICAgICAgICBjb3B5QXNjaWlU
b1VURjE2KGJ1ZmZlciwgIi1JbmZpbml0eSIsIDkpOwotICAgICAgICByZXR1cm4gOTsKLSAgICB9
Ci0KLSAgICAvLyBDb252ZXJ0IHRvIGRlY2ltYWwgd2l0aCByb3VuZGluZy4KLSAgICBEZWNpbWFs
TnVtYmVyIG51bWJlcihkKTsKLSAgICByZXR1cm4gbnVtYmVyLmV4cG9uZW50KCkgPj0gLTYgJiYg
bnVtYmVyLmV4cG9uZW50KCkgPCAyMQotICAgICAgICA/IG51bWJlci50b1N0cmluZ0RlY2ltYWwo
YnVmZmVyLCBOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCkKLSAgICAgICAgOiBudW1iZXIudG9T
dHJpbmdFeHBvbmVudGlhbChidWZmZXIsIE51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoKTsKKyAg
ICBkb3VibGVfY29udmVyc2lvbjo6U3RyaW5nQnVpbGRlciBidWlsZGVyKGJ1ZmZlciwgTnVtYmVy
VG9TdHJpbmdCdWZmZXJMZW5ndGgpOworICAgIGNvbnN0IGRvdWJsZV9jb252ZXJzaW9uOjpEb3Vi
bGVUb1N0cmluZ0NvbnZlcnRlciYgY29udmVydGVyID0gZG91YmxlX2NvbnZlcnNpb246OkRvdWJs
ZVRvU3RyaW5nQ29udmVydGVyOjpFY21hU2NyaXB0Q29udmVydGVyKCk7CisgICAgY29udmVydGVy
LlRvU2hvcnRlc3QoZCwgJmJ1aWxkZXIpOworICAgIHJldHVybiBidWlsZGVyLkZpbmFsaXplKCk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9kdG9hLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EuaAppbmRleCAz
OTI0YTFjYzQwNWRiMjkzYjAxZjZkNGJkYWU2NTc1OTUyNTgxNzJjLi43MGVlYzEyZTQzNTVjM2I3
YjQ1MGNlNzkyOTIxYjgyZmE1ZTJlYmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL2R0b2EuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EuaApAQCAt
MjEsNyArMjEsNyBAQAogI2lmbmRlZiBXVEZfZHRvYV9oCiAjZGVmaW5lIFdURl9kdG9hX2gKIAot
I2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KKyNpbmNsdWRlIDx3dGYvZHRvYS9kb3Vi
bGUtY29udmVyc2lvbi5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIGNsYXNzIE11dGV4OwpAQCAtMzIs
MTYgKzMyLDEwIEBAIGV4dGVybiBXVEY6Ok11dGV4KiBzX2R0b2FQNU11dGV4OwogLy8gc2U6ICpz
ZSB3aWxsIGhhdmUgdGhlIGxhc3QgY29uc3VtZWQgY2hhcmFjdGVyIHBvc2l0aW9uICsgMS4KIGRv
dWJsZSBzdHJ0b2QoY29uc3QgY2hhciogczAwLCBjaGFyKiogc2UpOwogCi10eXBlZGVmIGNoYXIg
RHRvYUJ1ZmZlcls4MF07Ci0KLXZvaWQgZHRvYShEdG9hQnVmZmVyIHJlc3VsdCwgZG91YmxlIGRk
LCBib29sJiBzaWduLCBpbnQmIGV4cG9uZW50LCB1bnNpZ25lZCYgcHJlY2lzaW9uKTsKLXZvaWQg
ZHRvYVJvdW5kU0YoRHRvYUJ1ZmZlciByZXN1bHQsIGRvdWJsZSBkZCwgaW50IG5kaWdpdHMsIGJv
b2wmIHNpZ24sIGludCYgZXhwb25lbnQsIHVuc2lnbmVkJiBwcmVjaXNpb24pOwotdm9pZCBkdG9h
Um91bmREUChEdG9hQnVmZmVyIHJlc3VsdCwgZG91YmxlIGRkLCBpbnQgbmRpZ2l0cywgYm9vbCYg
c2lnbiwgaW50JiBleHBvbmVudCwgdW5zaWduZWQmIHByZWNpc2lvbik7Ci0KIC8vIFNpemUgPSA4
MCBmb3Igc2l6ZW9mKER0b2FCdWZmZXIpICsgc29tZSBzaWduIGJpdHMsIGRlY2ltYWwgcG9pbnQs
ICdlJywgZXhwb25lbnQgZGlnaXRzLgogY29uc3QgdW5zaWduZWQgTnVtYmVyVG9TdHJpbmdCdWZm
ZXJMZW5ndGggPSA5NjsKLXR5cGVkZWYgVUNoYXIgTnVtYmVyVG9TdHJpbmdCdWZmZXJbTnVtYmVy
VG9TdHJpbmdCdWZmZXJMZW5ndGhdOwotdW5zaWduZWQgbnVtYmVyVG9TdHJpbmcoZG91YmxlLCBO
dW1iZXJUb1N0cmluZ0J1ZmZlcik7Cit0eXBlZGVmIGNoYXIgTnVtYmVyVG9TdHJpbmdCdWZmZXJb
TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGhdOworY29uc3QgY2hhciAqbnVtYmVyVG9TdHJpbmco
ZG91YmxlLCBOdW1iZXJUb1N0cmluZ0J1ZmZlcik7CiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvQ09QWUlORyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9DT1BZSU5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkzMzcxOGE5ZWY5
ZGFlNGNiNGFmYTU2ZTQ5MDIxMTc2MGQ4YTk0OWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvQ09QWUlORwpAQCAtMCwwICsxLDI2IEBACitDb3B5cmln
aHQgMjAwNi0yMDExLCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCittZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZworICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgICAgICB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKK0xJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKK09XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCitEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKK1RIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9MSUNFTlNF
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL0xJQ0VOU0UKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTMz
NzE4YTllZjlkYWU0Y2I0YWZhNTZlNDkwMjExNzYwZDhhOTQ5ZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9MSUNFTlNFCkBAIC0wLDAgKzEsMjYgQEAK
K0NvcHlyaWdodCAyMDA2LTIwMTEsIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKK21ldDoKKworICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAgICAgIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCitBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCitTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCitMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKK0RBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CitPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9h
L1JFQURNRSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9SRUFETUUKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZjE4NmI0MjBmNDJiYzE0YzdkNTc2NWVhNDNmNmIyOGQzYzI5YjkyMQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9SRUFETUUKQEAgLTAsMCArMSwx
MSBAQAoraHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2RvdWJsZS1jb252ZXJzaW9uCisKK1RoaXMg
cHJvamVjdCAoZG91YmxlLWNvbnZlcnNpb24pIHByb3ZpZGVzIGJpbmFyeS1kZWNpbWFsIGFuZCBk
ZWNpbWFsLWJpbmFyeQorcm91dGluZXMgZm9yIElFRUUgZG91Ymxlcy4KKworVGhlIGxpYnJhcnkg
Y29uc2lzdHMgb2YgZWZmaWNpZW50IGNvbnZlcnNpb24gcm91dGluZXMgdGhhdCBoYXZlIGJlZW4g
ZXh0cmFjdGVkCitmcm9tIHRoZSBWOCBKYXZhU2NyaXB0IGVuZ2luZS4gVGhlIGNvZGUgaGFzIGJl
ZW4gcmVmYWN0b3JlZCBhbmQgaW1wcm92ZWQgc28gdGhhdAoraXQgY2FuIGJlIHVzZWQgbW9yZSBl
YXNpbHkgaW4gb3RoZXIgcHJvamVjdHMuCisKK1RoZXJlIGlzIGV4dGVuc2l2ZSBkb2N1bWVudGF0
aW9uIGluIHNyYy9kb3VibGUtY29udmVyc2lvbi5oLiBPdGhlciBleGFtcGxlcyBjYW4KK2JlIGZv
dW5kIGluIHRlc3QvY2N0ZXN0L3Rlc3QtY29udmVyc2lvbnMuY2MuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvYmlnbnVtLWR0b2EuY2MgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL2R0b2EvYmlnbnVtLWR0b2EuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTQ5YjBhMGRiNDVm
ZWFmOWVkMDg2YTc2OWQ4NDE5MTljYjNlZjIzMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvZHRvYS9iaWdudW0tZHRvYS5jYwpAQCAtMCwwICsxLDY1MyBAQAor
Ly8gQ29weXJpZ2h0IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAg
ZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkCisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKKy8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8g
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVk
ZSAiYmlnbnVtLWR0b2EuaCIKKworI2luY2x1ZGUgImJpZ251bS5oIgorI2luY2x1ZGUgImRvdWJs
ZS5oIgorCituYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIHN0YXRpYyBp
bnQgTm9ybWFsaXplZEV4cG9uZW50KHVpbnQ2NF90IHNpZ25pZmljYW5kLCBpbnQgZXhwb25lbnQp
IHsKKyAgICAgICAgQVNTRVJUKHNpZ25pZmljYW5kICE9IDApOworICAgICAgICB3aGlsZSAoKHNp
Z25pZmljYW5kICYgRG91YmxlOjprSGlkZGVuQml0KSA9PSAwKSB7CisgICAgICAgICAgICBzaWdu
aWZpY2FuZCA9IHNpZ25pZmljYW5kIDw8IDE7CisgICAgICAgICAgICBleHBvbmVudCA9IGV4cG9u
ZW50IC0gMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZXhwb25lbnQ7CisgICAgfQorICAg
IAorICAgIAorICAgIC8vIEZvcndhcmQgZGVjbGFyYXRpb25zOgorICAgIC8vIFJldHVybnMgYW4g
ZXN0aW1hdGlvbiBvZiBrIHN1Y2ggdGhhdCAxMF4oay0xKSA8PSB2IDwgMTBeay4KKyAgICBzdGF0
aWMgaW50IEVzdGltYXRlUG93ZXIoaW50IGV4cG9uZW50KTsKKyAgICAvLyBDb21wdXRlcyB2IC8g
MTBeZXN0aW1hdGVkX3Bvd2VyIGV4YWN0bHksIGFzIGEgcmF0aW8gb2YgdHdvIGJpZ251bXMsIG51
bWVyYXRvcgorICAgIC8vIGFuZCBkZW5vbWluYXRvci4KKyAgICBzdGF0aWMgdm9pZCBJbml0aWFs
U2NhbGVkU3RhcnRWYWx1ZXMoZG91YmxlIHYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBlc3RpbWF0ZWRfcG93ZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgbmVlZF9ib3VuZGFyeV9kZWx0YXMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogbnVtZXJhdG9yLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIGRlbm9taW5hdG9yLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIGRlbHRhX21p
bnVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIGRl
bHRhX3BsdXMpOworICAgIC8vIE11bHRpcGxpZXMgbnVtZXJhdG9yL2Rlbm9taW5hdG9yIHNvIHRo
YXQgaXRzIHZhbHVlcyBsaWVzIGluIHRoZSByYW5nZSAxLTEwLgorICAgIC8vIFJldHVybnMgZGVj
aW1hbF9wb2ludCBzLnQuCisgICAgLy8gIHYgPSBudW1lcmF0b3InL2Rlbm9taW5hdG9yJyAqIDEw
XihkZWNpbWFsX3BvaW50LTEpCisgICAgLy8gICAgIHdoZXJlIG51bWVyYXRvcicgYW5kIGRlbm9t
aW5hdG9yJyBhcmUgdGhlIHZhbHVlcyBvZiBudW1lcmF0b3IgYW5kCisgICAgLy8gICAgIGRlbm9t
aW5hdG9yIGFmdGVyIHRoZSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24uCisgICAgc3RhdGljIHZvaWQg
Rml4dXBNdWx0aXBseTEwKGludCBlc3RpbWF0ZWRfcG93ZXIsIGJvb2wgaXNfZXZlbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBkZWNpbWFsX3BvaW50LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIG51bWVyYXRvciwgQmlnbnVtKiBkZW5vbWlu
YXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBkZWx0YV9taW51
cywgQmlnbnVtKiBkZWx0YV9wbHVzKTsKKyAgICAvLyBHZW5lcmF0ZXMgZGlnaXRzIGZyb20gdGhl
IGxlZnQgdG8gdGhlIHJpZ2h0IGFuZCBzdG9wcyB3aGVuIHRoZSBnZW5lcmF0ZWQKKyAgICAvLyBk
aWdpdHMgeWllbGQgdGhlIHNob3J0ZXN0IGRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2Ygdi4KKyAg
ICBzdGF0aWMgdm9pZCBHZW5lcmF0ZVNob3J0ZXN0RGlnaXRzKEJpZ251bSogbnVtZXJhdG9yLCBC
aWdudW0qIGRlbm9taW5hdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQmlnbnVtKiBkZWx0YV9taW51cywgQmlnbnVtKiBkZWx0YV9wbHVzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc19ldmVuLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwgaW50KiBsZW5ndGgp
OworICAgIC8vIEdlbmVyYXRlcyAncmVxdWVzdGVkX2RpZ2l0cycgYWZ0ZXIgdGhlIGRlY2ltYWwg
cG9pbnQuCisgICAgc3RhdGljIHZvaWQgQmlnbnVtVG9GaXhlZChpbnQgcmVxdWVzdGVkX2RpZ2l0
cywgaW50KiBkZWNpbWFsX3BvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmln
bnVtKiBudW1lcmF0b3IsIEJpZ251bSogZGVub21pbmF0b3IsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBWZWN0b3I8Y2hhcj4oYnVmZmVyKSwgaW50KiBsZW5ndGgpOworICAgIC8vIEdl
bmVyYXRlcyAnY291bnQnIGRpZ2l0cyBvZiBudW1lcmF0b3IvZGVub21pbmF0b3IuCisgICAgLy8g
T25jZSAnY291bnQnIGRpZ2l0cyBoYXZlIGJlZW4gcHJvZHVjZWQgcm91bmRzIHRoZSByZXN1bHQg
ZGVwZW5kaW5nIG9uIHRoZQorICAgIC8vIHJlbWFpbmRlciAocmVtYWluZGVycyBvZiBleGFjdGx5
IC41IHJvdW5kIHVwd2FyZHMpLiBNaWdodCB1cGRhdGUgdGhlCisgICAgLy8gZGVjaW1hbF9wb2lu
dCB3aGVuIHJvdW5kaW5nIHVwIChmb3IgZXhhbXBsZSBmb3IgMC45OTk5KS4KKyAgICBzdGF0aWMg
dm9pZCBHZW5lcmF0ZUNvdW50ZWREaWdpdHMoaW50IGNvdW50LCBpbnQqIGRlY2ltYWxfcG9pbnQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogbnVtZXJhdG9y
LCBCaWdudW0qIGRlbm9taW5hdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBWZWN0b3I8Y2hhcj4oYnVmZmVyKSwgaW50KiBsZW5ndGgpOworICAgIAorICAgIAorICAg
IHZvaWQgQmlnbnVtRHRvYShkb3VibGUgdiwgQmlnbnVtRHRvYU1vZGUgbW9kZSwgaW50IHJlcXVl
c3RlZF9kaWdpdHMsCisgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXIsIGlu
dCogbGVuZ3RoLCBpbnQqIGRlY2ltYWxfcG9pbnQpIHsKKyAgICAgICAgQVNTRVJUKHYgPiAwKTsK
KyAgICAgICAgQVNTRVJUKCFEb3VibGUodikuSXNTcGVjaWFsKCkpOworICAgICAgICB1aW50NjRf
dCBzaWduaWZpY2FuZCA9IERvdWJsZSh2KS5TaWduaWZpY2FuZCgpOworICAgICAgICBib29sIGlz
X2V2ZW4gPSAoc2lnbmlmaWNhbmQgJiAxKSA9PSAwOworICAgICAgICBpbnQgZXhwb25lbnQgPSBE
b3VibGUodikuRXhwb25lbnQoKTsKKyAgICAgICAgaW50IG5vcm1hbGl6ZWRfZXhwb25lbnQgPSBO
b3JtYWxpemVkRXhwb25lbnQoc2lnbmlmaWNhbmQsIGV4cG9uZW50KTsKKyAgICAgICAgLy8gZXN0
aW1hdGVkX3Bvd2VyIG1pZ2h0IGJlIHRvbyBsb3cgYnkgMS4KKyAgICAgICAgaW50IGVzdGltYXRl
ZF9wb3dlciA9IEVzdGltYXRlUG93ZXIobm9ybWFsaXplZF9leHBvbmVudCk7CisgICAgICAgIAor
ICAgICAgICAvLyBTaG9ydGN1dCBmb3IgRml4ZWQuCisgICAgICAgIC8vIFRoZSByZXF1ZXN0ZWQg
ZGlnaXRzIGNvcnJlc3BvbmQgdG8gdGhlIGRpZ2l0cyBhZnRlciB0aGUgcG9pbnQuIElmIHRoZQor
ICAgICAgICAvLyBudW1iZXIgaXMgbXVjaCB0b28gc21hbGwsIHRoZW4gdGhlcmUgaXMgbm8gbmVl
ZCBpbiB0cnlpbmcgdG8gZ2V0IGFueQorICAgICAgICAvLyBkaWdpdHMuCisgICAgICAgIGlmICht
b2RlID09IEJJR05VTV9EVE9BX0ZJWEVEICYmIC1lc3RpbWF0ZWRfcG93ZXIgLSAxID4gcmVxdWVz
dGVkX2RpZ2l0cykgeworICAgICAgICAgICAgYnVmZmVyWzBdID0gJ1wwJzsKKyAgICAgICAgICAg
ICpsZW5ndGggPSAwOworICAgICAgICAgICAgLy8gU2V0IGRlY2ltYWwtcG9pbnQgdG8gLXJlcXVl
c3RlZF9kaWdpdHMuIFRoaXMgaXMgd2hhdCBHYXkgZG9lcy4KKyAgICAgICAgICAgIC8vIE5vdGUg
dGhhdCBpdCBzaG91bGQgbm90IGhhdmUgYW55IGVmZmVjdCBhbnl3YXlzIHNpbmNlIHRoZSBzdHJp
bmcgaXMKKyAgICAgICAgICAgIC8vIGVtcHR5LgorICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQg
PSAtcmVxdWVzdGVkX2RpZ2l0czsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgQmlnbnVtIG51bWVyYXRvcjsKKyAgICAgICAgQmlnbnVtIGRlbm9taW5h
dG9yOworICAgICAgICBCaWdudW0gZGVsdGFfbWludXM7CisgICAgICAgIEJpZ251bSBkZWx0YV9w
bHVzOworICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGJpZ251bSBjYW4gZ3JvdyBsYXJnZSBlbm91
Z2guIFRoZSBzbWFsbGVzdCBkb3VibGUgZXF1YWxzCisgICAgICAgIC8vIDRlLTMyNC4gSW4gdGhp
cyBjYXNlIHRoZSBkZW5vbWluYXRvciBuZWVkcyBmZXdlciB0aGFuIDMyNCo0IGJpbmFyeSBkaWdp
dHMuCisgICAgICAgIC8vIFRoZSBtYXhpbXVtIGRvdWJsZSBpcyAxLjc5NzY5MzEzNDg2MjMxNTdl
MzA4IHdoaWNoIG5lZWRzIGZld2VyIHRoYW4KKyAgICAgICAgLy8gMzA4KjQgYmluYXJ5IGRpZ2l0
cy4KKyAgICAgICAgQVNTRVJUKEJpZ251bTo6a01heFNpZ25pZmljYW50Qml0cyA+PSAzMjQqNCk7
CisgICAgICAgIGJvb2wgbmVlZF9ib3VuZGFyeV9kZWx0YXMgPSAobW9kZSA9PSBCSUdOVU1fRFRP
QV9TSE9SVEVTVCk7CisgICAgICAgIEluaXRpYWxTY2FsZWRTdGFydFZhbHVlcyh2LCBlc3RpbWF0
ZWRfcG93ZXIsIG5lZWRfYm91bmRhcnlfZGVsdGFzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJm51bWVyYXRvciwgJmRlbm9taW5hdG9yLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJmRlbHRhX21pbnVzLCAmZGVsdGFfcGx1cyk7CisgICAgICAgIC8vIFdlIG5v
dyBoYXZlIHYgPSAobnVtZXJhdG9yIC8gZGVub21pbmF0b3IpICogMTBeZXN0aW1hdGVkX3Bvd2Vy
LgorICAgICAgICBGaXh1cE11bHRpcGx5MTAoZXN0aW1hdGVkX3Bvd2VyLCBpc19ldmVuLCBkZWNp
bWFsX3BvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgJm51bWVyYXRvciwgJmRlbm9taW5h
dG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgJmRlbHRhX21pbnVzLCAmZGVsdGFfcGx1cyk7
CisgICAgICAgIC8vIFdlIG5vdyBoYXZlIHYgPSAobnVtZXJhdG9yIC8gZGVub21pbmF0b3IpICog
MTBeKGRlY2ltYWxfcG9pbnQtMSksIGFuZAorICAgICAgICAvLyAgMSA8PSAobnVtZXJhdG9yICsg
ZGVsdGFfcGx1cykgLyBkZW5vbWluYXRvciA8IDEwCisgICAgICAgIHN3aXRjaCAobW9kZSkgewor
ICAgICAgICAgICAgY2FzZSBCSUdOVU1fRFRPQV9TSE9SVEVTVDoKKyAgICAgICAgICAgICAgICBH
ZW5lcmF0ZVNob3J0ZXN0RGlnaXRzKCZudW1lcmF0b3IsICZkZW5vbWluYXRvciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkZWx0YV9taW51cywgJmRlbHRhX3BsdXMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19ldmVuLCBidWZmZXIs
IGxlbmd0aCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJJR05V
TV9EVE9BX0ZJWEVEOgorICAgICAgICAgICAgICAgIEJpZ251bVRvRml4ZWQocmVxdWVzdGVkX2Rp
Z2l0cywgZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZudW1l
cmF0b3IsICZkZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZl
ciwgbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQklH
TlVNX0RUT0FfUFJFQ0lTSU9OOgorICAgICAgICAgICAgICAgIEdlbmVyYXRlQ291bnRlZERpZ2l0
cyhyZXF1ZXN0ZWRfZGlnaXRzLCBkZWNpbWFsX3BvaW50LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmbnVtZXJhdG9yLCAmZGVub21pbmF0b3IsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgfQorICAgICAgICBidWZmZXJbKmxlbmd0aF0gPSAnXDAnOworICAgIH0K
KyAgICAKKyAgICAKKyAgICAvLyBUaGUgcHJvY2VkdXJlIHN0YXJ0cyBnZW5lcmF0aW5nIGRpZ2l0
cyBmcm9tIHRoZSBsZWZ0IHRvIHRoZSByaWdodCBhbmQgc3RvcHMKKyAgICAvLyB3aGVuIHRoZSBn
ZW5lcmF0ZWQgZGlnaXRzIHlpZWxkIHRoZSBzaG9ydGVzdCBkZWNpbWFsIHJlcHJlc2VudGF0aW9u
IG9mIHYuIEEKKyAgICAvLyBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIHYgaXMgYSBudW1iZXIg
bHlpbmcgY2xvc2VyIHRvIHYgdGhhbiB0byBhbnkgb3RoZXIKKyAgICAvLyBkb3VibGUsIHNvIGl0
IGNvbnZlcnRzIHRvIHYgd2hlbiByZWFkLgorICAgIC8vCisgICAgLy8gVGhpcyBpcyB0cnVlIGlm
IGQsIHRoZSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uLCBpcyBiZXR3ZWVuIG0tIGFuZCBtKywgdGhl
CisgICAgLy8gdXBwZXIgYW5kIGxvd2VyIGJvdW5kYXJpZXMuIGQgbXVzdCBiZSBzdHJpY3RseSBi
ZXR3ZWVuIHRoZW0gaWYgIWlzX2V2ZW4uCisgICAgLy8gICAgICAgICAgIG0tIDo9IChudW1lcmF0
b3IgLSBkZWx0YV9taW51cykgLyBkZW5vbWluYXRvcgorICAgIC8vICAgICAgICAgICBtKyA6PSAo
bnVtZXJhdG9yICsgZGVsdGFfcGx1cykgLyBkZW5vbWluYXRvcgorICAgIC8vCisgICAgLy8gUHJl
Y29uZGl0aW9uOiAwIDw9IChudW1lcmF0b3IrZGVsdGFfcGx1cykgLyBkZW5vbWluYXRvciA8IDEw
LgorICAgIC8vICAgSWYgMSA8PSAobnVtZXJhdG9yK2RlbHRhX3BsdXMpIC8gZGVub21pbmF0b3Ig
PCAxMCB0aGVuIG5vIGxlYWRpbmcgMCBkaWdpdAorICAgIC8vICAgd2lsbCBiZSBwcm9kdWNlZC4g
VGhpcyBzaG91bGQgYmUgdGhlIHN0YW5kYXJkIHByZWNvbmRpdGlvbi4KKyAgICBzdGF0aWMgdm9p
ZCBHZW5lcmF0ZVNob3J0ZXN0RGlnaXRzKEJpZ251bSogbnVtZXJhdG9yLCBCaWdudW0qIGRlbm9t
aW5hdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBk
ZWx0YV9taW51cywgQmlnbnVtKiBkZWx0YV9wbHVzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBpc19ldmVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwgaW50KiBsZW5ndGgpIHsKKyAgICAgICAg
Ly8gU21hbGwgb3B0aW1pemF0aW9uOiBpZiBkZWx0YV9taW51cyBhbmQgZGVsdGFfcGx1cyBhcmUg
dGhlIHNhbWUganVzdCByZXVzZQorICAgICAgICAvLyBvbmUgb2YgdGhlIHR3byBiaWdudW1zLgor
ICAgICAgICBpZiAoQmlnbnVtOjpFcXVhbCgqZGVsdGFfbWludXMsICpkZWx0YV9wbHVzKSkgewor
ICAgICAgICAgICAgZGVsdGFfcGx1cyA9IGRlbHRhX21pbnVzOworICAgICAgICB9CisgICAgICAg
ICpsZW5ndGggPSAwOworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgdWludDE2
X3QgZGlnaXQ7CisgICAgICAgICAgICBkaWdpdCA9IG51bWVyYXRvci0+RGl2aWRlTW9kdWxvSW50
QmlnbnVtKCpkZW5vbWluYXRvcik7CisgICAgICAgICAgICBBU1NFUlQoZGlnaXQgPD0gOSk7ICAv
LyBkaWdpdCBpcyBhIHVpbnQxNl90IGFuZCB0aGVyZWZvcmUgYWx3YXlzIHBvc2l0aXZlLgorICAg
ICAgICAgICAgLy8gZGlnaXQgPSBudW1lcmF0b3IgLyBkZW5vbWluYXRvciAoaW50ZWdlciBkaXZp
c2lvbikuCisgICAgICAgICAgICAvLyBudW1lcmF0b3IgPSBudW1lcmF0b3IgJSBkZW5vbWluYXRv
ci4KKyAgICAgICAgICAgIGJ1ZmZlclsoKmxlbmd0aCkrK10gPSBkaWdpdCArICcwJzsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8gQ2FuIHdlIHN0b3AgYWxyZWFkeT8KKyAgICAgICAgICAg
IC8vIElmIHRoZSByZW1haW5kZXIgb2YgdGhlIGRpdmlzaW9uIGlzIGxlc3MgdGhhbiB0aGUgZGlz
dGFuY2UgdG8gdGhlIGxvd2VyCisgICAgICAgICAgICAvLyBib3VuZGFyeSB3ZSBjYW4gc3RvcC4g
SW4gdGhpcyBjYXNlIHdlIHNpbXBseSByb3VuZCBkb3duIChkaXNjYXJkaW5nIHRoZQorICAgICAg
ICAgICAgLy8gcmVtYWluZGVyKS4KKyAgICAgICAgICAgIC8vIFNpbWlsYXJseSB3ZSB0ZXN0IGlm
IHdlIGNhbiByb3VuZCB1cCAodXNpbmcgdGhlIHVwcGVyIGJvdW5kYXJ5KS4KKyAgICAgICAgICAg
IGJvb2wgaW5fZGVsdGFfcm9vbV9taW51czsKKyAgICAgICAgICAgIGJvb2wgaW5fZGVsdGFfcm9v
bV9wbHVzOworICAgICAgICAgICAgaWYgKGlzX2V2ZW4pIHsKKyAgICAgICAgICAgICAgICBpbl9k
ZWx0YV9yb29tX21pbnVzID0gQmlnbnVtOjpMZXNzRXF1YWwoKm51bWVyYXRvciwgKmRlbHRhX21p
bnVzKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaW5fZGVsdGFfcm9v
bV9taW51cyA9IEJpZ251bTo6TGVzcygqbnVtZXJhdG9yLCAqZGVsdGFfbWludXMpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKGlzX2V2ZW4pIHsKKyAgICAgICAgICAgICAgICBpbl9k
ZWx0YV9yb29tX3BsdXMgPQorICAgICAgICAgICAgICAgIEJpZ251bTo6UGx1c0NvbXBhcmUoKm51
bWVyYXRvciwgKmRlbHRhX3BsdXMsICpkZW5vbWluYXRvcikgPj0gMDsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgaW5fZGVsdGFfcm9vbV9wbHVzID0KKyAgICAgICAgICAg
ICAgICBCaWdudW06OlBsdXNDb21wYXJlKCpudW1lcmF0b3IsICpkZWx0YV9wbHVzLCAqZGVub21p
bmF0b3IpID4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghaW5fZGVsdGFfcm9v
bV9taW51cyAmJiAhaW5fZGVsdGFfcm9vbV9wbHVzKSB7CisgICAgICAgICAgICAgICAgLy8gUHJl
cGFyZSBmb3IgbmV4dCBpdGVyYXRpb24uCisgICAgICAgICAgICAgICAgbnVtZXJhdG9yLT5UaW1l
czEwKCk7CisgICAgICAgICAgICAgICAgZGVsdGFfbWludXMtPlRpbWVzMTAoKTsKKyAgICAgICAg
ICAgICAgICAvLyBXZSBvcHRpbWl6ZWQgZGVsdGFfcGx1cyB0byBiZSBlcXVhbCB0byBkZWx0YV9t
aW51cyAoaWYgdGhleSBzaGFyZSB0aGUKKyAgICAgICAgICAgICAgICAvLyBzYW1lIHZhbHVlKS4g
U28gZG9uJ3QgbXVsdGlwbHkgZGVsdGFfcGx1cyBpZiB0aGV5IHBvaW50IHRvIHRoZSBzYW1lCisg
ICAgICAgICAgICAgICAgLy8gb2JqZWN0LgorICAgICAgICAgICAgICAgIGlmIChkZWx0YV9taW51
cyAhPSBkZWx0YV9wbHVzKSB7CisgICAgICAgICAgICAgICAgICAgIGRlbHRhX3BsdXMtPlRpbWVz
MTAoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGluX2RlbHRh
X3Jvb21fbWludXMgJiYgaW5fZGVsdGFfcm9vbV9wbHVzKSB7CisgICAgICAgICAgICAgICAgLy8g
TGV0J3Mgc2VlIGlmIDIqbnVtZXJhdG9yIDwgZGVub21pbmF0b3IuCisgICAgICAgICAgICAgICAg
Ly8gSWYgeWVzLCB0aGVuIHRoZSBuZXh0IGRpZ2l0IHdvdWxkIGJlIDwgNSBhbmQgd2UgY2FuIHJv
dW5kIGRvd24uCisgICAgICAgICAgICAgICAgaW50IGNvbXBhcmUgPSBCaWdudW06OlBsdXNDb21w
YXJlKCpudW1lcmF0b3IsICpudW1lcmF0b3IsICpkZW5vbWluYXRvcik7CisgICAgICAgICAgICAg
ICAgaWYgKGNvbXBhcmUgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFJlbWFpbmluZyBk
aWdpdHMgYXJlIGxlc3MgdGhhbiAuNS4gLT4gUm91bmQgZG93biAoPT0gZG8gbm90aGluZykuCisg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb21wYXJlID4gMCkgeworICAgICAgICAgICAgICAg
ICAgICAvLyBSZW1haW5pbmcgZGlnaXRzIGFyZSBtb3JlIHRoYW4gLjUgb2YgZGVub21pbmF0b3Iu
IC0+IFJvdW5kIHVwLgorICAgICAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGhlIGxhc3Qg
ZGlnaXQgY291bGQgbm90IGJlIGEgJzknIGFzIG90aGVyd2lzZSB0aGUgd2hvbGUKKyAgICAgICAg
ICAgICAgICAgICAgLy8gbG9vcCB3b3VsZCBoYXZlIHN0b3BwZWQgZWFybGllci4KKyAgICAgICAg
ICAgICAgICAgICAgLy8gV2Ugc3RpbGwgaGF2ZSBhbiBhc3NlcnQgaGVyZSBpbiBjYXNlIHRoZSBw
cmVjb25kaXRpb25zIHdlcmUgbm90CisgICAgICAgICAgICAgICAgICAgIC8vIHNhdGlzZmllZC4K
KyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJ1ZmZlclsoKmxlbmd0aCkgLSAxXSAhPSAnOScp
OworICAgICAgICAgICAgICAgICAgICBidWZmZXJbKCpsZW5ndGgpIC0gMV0rKzsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBIYWxmd2F5IGNhc2UuCisg
ICAgICAgICAgICAgICAgICAgIC8vIFRPRE8oZmxvaXRzY2gpOiBuZWVkIGEgd2F5IHRvIHNvbHZl
IGhhbGYtd2F5IGNhc2VzLgorICAgICAgICAgICAgICAgICAgICAvLyAgIEZvciBub3cgbGV0J3Mg
cm91bmQgdG93YXJkcyBldmVuIChzaW5jZSB0aGlzIGlzIHdoYXQgR2F5IHNlZW1zIHRvCisgICAg
ICAgICAgICAgICAgICAgIC8vICAgZG8pLgorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKChidWZmZXJbKCpsZW5ndGgpIC0gMV0gLSAnMCcpICUgMiA9PSAwKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBSb3VuZCBkb3duID0+IERvIG5vdGhpbmcuCisg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoYnVmZmVyWygqbGVuZ3RoKSAtIDFdICE9ICc5Jyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBidWZmZXJbKCpsZW5ndGgpIC0gMV0rKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKGluX2RlbHRhX3Jvb21fbWludXMpIHsKKyAgICAgICAgICAgICAgICAvLyBSb3VuZCBkb3du
ICg9PSBkbyBub3RoaW5nKS4KKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
IGVsc2UgeyAgLy8gaW5fZGVsdGFfcm9vbV9wbHVzCisgICAgICAgICAgICAgICAgLy8gUm91bmQg
dXAuCisgICAgICAgICAgICAgICAgLy8gTm90ZSBhZ2FpbiB0aGF0IHRoZSBsYXN0IGRpZ2l0IGNv
dWxkIG5vdCBiZSAnOScgc2luY2UgdGhpcyB3b3VsZCBoYXZlCisgICAgICAgICAgICAgICAgLy8g
c3RvcHBlZCB0aGUgbG9vcCBlYXJsaWVyLgorICAgICAgICAgICAgICAgIC8vIFdlIHN0aWxsIGhh
dmUgYW4gQVNTRVJUIGhlcmUsIGluIGNhc2UgdGhlIHByZWNvbmRpdGlvbnMgd2VyZSBub3QKKyAg
ICAgICAgICAgICAgICAvLyBzYXRpc2ZpZWQuCisgICAgICAgICAgICAgICAgQVNTRVJUKGJ1ZmZl
clsoKmxlbmd0aCkgLTFdICE9ICc5Jyk7CisgICAgICAgICAgICAgICAgYnVmZmVyWygqbGVuZ3Ro
KSAtIDFdKys7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIAorICAgIC8vIExldCB2ID0gbnVtZXJhdG9yIC8gZGVub21p
bmF0b3IgPCAxMC4KKyAgICAvLyBUaGVuIHdlIGdlbmVyYXRlICdjb3VudCcgZGlnaXRzIG9mIGQg
PSB4Lnh4eHh4Li4uICh3aXRob3V0IHRoZSBkZWNpbWFsIHBvaW50KQorICAgIC8vIGZyb20gbGVm
dCB0byByaWdodC4gT25jZSAnY291bnQnIGRpZ2l0cyBoYXZlIGJlZW4gcHJvZHVjZWQgd2UgZGVj
aWRlIHdldGhlcgorICAgIC8vIHRvIHJvdW5kIHVwIG9yIGRvd24uIFJlbWFpbmRlcnMgb2YgZXhh
Y3RseSAuNSByb3VuZCB1cHdhcmRzLiBOdW1iZXJzIHN1Y2gKKyAgICAvLyBhcyA5Ljk5OTk5OSBw
cm9wYWdhdGUgYSBjYXJyeSBhbGwgdGhlIHdheSwgYW5kIGNoYW5nZSB0aGUKKyAgICAvLyBleHBv
bmVudCAoZGVjaW1hbF9wb2ludCksIHdoZW4gcm91bmRpbmcgdXB3YXJkcy4KKyAgICBzdGF0aWMg
dm9pZCBHZW5lcmF0ZUNvdW50ZWREaWdpdHMoaW50IGNvdW50LCBpbnQqIGRlY2ltYWxfcG9pbnQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogbnVtZXJhdG9y
LCBCaWdudW0qIGRlbm9taW5hdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBWZWN0b3I8Y2hhcj4oYnVmZmVyKSwgaW50KiBsZW5ndGgpIHsKKyAgICAgICAgQVNTRVJU
KGNvdW50ID49IDApOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50IC0gMTsgKytp
KSB7CisgICAgICAgICAgICB1aW50MTZfdCBkaWdpdDsKKyAgICAgICAgICAgIGRpZ2l0ID0gbnVt
ZXJhdG9yLT5EaXZpZGVNb2R1bG9JbnRCaWdudW0oKmRlbm9taW5hdG9yKTsKKyAgICAgICAgICAg
IEFTU0VSVChkaWdpdCA8PSA5KTsgIC8vIGRpZ2l0IGlzIGEgdWludDE2X3QgYW5kIHRoZXJlZm9y
ZSBhbHdheXMgcG9zaXRpdmUuCisgICAgICAgICAgICAvLyBkaWdpdCA9IG51bWVyYXRvciAvIGRl
bm9taW5hdG9yIChpbnRlZ2VyIGRpdmlzaW9uKS4KKyAgICAgICAgICAgIC8vIG51bWVyYXRvciA9
IG51bWVyYXRvciAlIGRlbm9taW5hdG9yLgorICAgICAgICAgICAgYnVmZmVyW2ldID0gZGlnaXQg
KyAnMCc7CisgICAgICAgICAgICAvLyBQcmVwYXJlIGZvciBuZXh0IGl0ZXJhdGlvbi4KKyAgICAg
ICAgICAgIG51bWVyYXRvci0+VGltZXMxMCgpOworICAgICAgICB9CisgICAgICAgIC8vIEdlbmVy
YXRlIHRoZSBsYXN0IGRpZ2l0LgorICAgICAgICB1aW50MTZfdCBkaWdpdDsKKyAgICAgICAgZGln
aXQgPSBudW1lcmF0b3ItPkRpdmlkZU1vZHVsb0ludEJpZ251bSgqZGVub21pbmF0b3IpOworICAg
ICAgICBpZiAoQmlnbnVtOjpQbHVzQ29tcGFyZSgqbnVtZXJhdG9yLCAqbnVtZXJhdG9yLCAqZGVu
b21pbmF0b3IpID49IDApIHsKKyAgICAgICAgICAgIGRpZ2l0Kys7CisgICAgICAgIH0KKyAgICAg
ICAgYnVmZmVyW2NvdW50IC0gMV0gPSBkaWdpdCArICcwJzsKKyAgICAgICAgLy8gQ29ycmVjdCBi
YWQgZGlnaXRzIChpbiBjYXNlIHdlIGhhZCBhIHNlcXVlbmNlIG9mICc5J3MpLiBQcm9wYWdhdGUg
dGhlCisgICAgICAgIC8vIGNhcnJ5IHVudGlsIHdlIGhhdCBhIG5vbi0nOScgb3IgdGlsIHdlIHJl
YWNoIHRoZSBmaXJzdCBkaWdpdC4KKyAgICAgICAgZm9yIChpbnQgaSA9IGNvdW50IC0gMTsgaSA+
IDA7IC0taSkgeworICAgICAgICAgICAgaWYgKGJ1ZmZlcltpXSAhPSAnMCcgKyAxMCkgYnJlYWs7
CisgICAgICAgICAgICBidWZmZXJbaV0gPSAnMCc7CisgICAgICAgICAgICBidWZmZXJbaSAtIDFd
Kys7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJ1ZmZlclswXSA9PSAnMCcgKyAxMCkgeworICAg
ICAgICAgICAgLy8gUHJvcGFnYXRlIGEgY2FycnkgcGFzdCB0aGUgdG9wIHBsYWNlLgorICAgICAg
ICAgICAgYnVmZmVyWzBdID0gJzEnOworICAgICAgICAgICAgKCpkZWNpbWFsX3BvaW50KSsrOwor
ICAgICAgICB9CisgICAgICAgICpsZW5ndGggPSBjb3VudDsKKyAgICB9CisgICAgCisgICAgCisg
ICAgLy8gR2VuZXJhdGVzICdyZXF1ZXN0ZWRfZGlnaXRzJyBhZnRlciB0aGUgZGVjaW1hbCBwb2lu
dC4gSXQgbWlnaHQgb21pdAorICAgIC8vIHRyYWlsaW5nICcwJ3MuIElmIHRoZSBpbnB1dCBudW1i
ZXIgaXMgdG9vIHNtYWxsIHRoZW4gbm8gZGlnaXRzIGF0IGFsbCBhcmUKKyAgICAvLyBnZW5lcmF0
ZWQgKGV4LjogMiBmaXhlZCBkaWdpdHMgZm9yIDAuMDAwMDEpLgorICAgIC8vCisgICAgLy8gSW5w
dXQgdmVyaWZpZXM6ICAxIDw9IChudW1lcmF0b3IgKyBkZWx0YSkgLyBkZW5vbWluYXRvciA8IDEw
LgorICAgIHN0YXRpYyB2b2lkIEJpZ251bVRvRml4ZWQoaW50IHJlcXVlc3RlZF9kaWdpdHMsIGlu
dCogZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSog
bnVtZXJhdG9yLCBCaWdudW0qIGRlbm9taW5hdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVmVjdG9yPGNoYXI+KGJ1ZmZlciksIGludCogbGVuZ3RoKSB7CisgICAgICAgIC8vIE5v
dGUgdGhhdCB3ZSBoYXZlIHRvIGxvb2sgYXQgbW9yZSB0aGFuIGp1c3QgdGhlIHJlcXVlc3RlZF9k
aWdpdHMsIHNpbmNlCisgICAgICAgIC8vIGEgbnVtYmVyIGNvdWxkIGJlIHJvdW5kZWQgdXAuIEV4
YW1wbGU6IHY9MC41IHdpdGggcmVxdWVzdGVkX2RpZ2l0cz0wLgorICAgICAgICAvLyBFdmVuIHRo
b3VnaCB0aGUgcG93ZXIgb2YgdiBlcXVhbHMgMCB3ZSBjYW4ndCBqdXN0IHN0b3AgaGVyZS4KKyAg
ICAgICAgaWYgKC0oKmRlY2ltYWxfcG9pbnQpID4gcmVxdWVzdGVkX2RpZ2l0cykgeworICAgICAg
ICAgICAgLy8gVGhlIG51bWJlciBpcyBkZWZpbml0aXZlbHkgdG9vIHNtYWxsLgorICAgICAgICAg
ICAgLy8gRXg6IDAuMDAxIHdpdGggcmVxdWVzdGVkX2RpZ2l0cyA9PSAxLgorICAgICAgICAgICAg
Ly8gU2V0IGRlY2ltYWwtcG9pbnQgdG8gLXJlcXVlc3RlZF9kaWdpdHMuIFRoaXMgaXMgd2hhdCBH
YXkgZG9lcy4KKyAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBpdCBzaG91bGQgbm90IGhhdmUgYW55
IGVmZmVjdCBhbnl3YXlzIHNpbmNlIHRoZSBzdHJpbmcgaXMKKyAgICAgICAgICAgIC8vIGVtcHR5
LgorICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSAtcmVxdWVzdGVkX2RpZ2l0czsKKyAgICAg
ICAgICAgICpsZW5ndGggPSAwOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2Ug
aWYgKC0oKmRlY2ltYWxfcG9pbnQpID09IHJlcXVlc3RlZF9kaWdpdHMpIHsKKyAgICAgICAgICAg
IC8vIFdlIG9ubHkgbmVlZCB0byB2ZXJpZnkgaWYgdGhlIG51bWJlciByb3VuZHMgZG93biBvciB1
cC4KKyAgICAgICAgICAgIC8vIEV4OiAwLjA0IGFuZCAwLjA2IHdpdGggcmVxdWVzdGVkX2RpZ2l0
cyA9PSAxLgorICAgICAgICAgICAgQVNTRVJUKCpkZWNpbWFsX3BvaW50ID09IC1yZXF1ZXN0ZWRf
ZGlnaXRzKTsKKyAgICAgICAgICAgIC8vIEluaXRpYWxseSB0aGUgZnJhY3Rpb24gbGllcyBpbiBy
YW5nZSAoMSwgMTBdLiBNdWx0aXBseSB0aGUgZGVub21pbmF0b3IKKyAgICAgICAgICAgIC8vIGJ5
IDEwIHNvIHRoYXQgd2UgY2FuIGNvbXBhcmUgbW9yZSBlYXNpbHkuCisgICAgICAgICAgICBkZW5v
bWluYXRvci0+VGltZXMxMCgpOworICAgICAgICAgICAgaWYgKEJpZ251bTo6UGx1c0NvbXBhcmUo
Km51bWVyYXRvciwgKm51bWVyYXRvciwgKmRlbm9taW5hdG9yKSA+PSAwKSB7CisgICAgICAgICAg
ICAgICAgLy8gSWYgdGhlIGZyYWN0aW9uIGlzID49IDAuNSB0aGVuIHdlIGhhdmUgdG8gaW5jbHVk
ZSB0aGUgcm91bmRlZAorICAgICAgICAgICAgICAgIC8vIGRpZ2l0LgorICAgICAgICAgICAgICAg
IGJ1ZmZlclswXSA9ICcxJzsKKyAgICAgICAgICAgICAgICAqbGVuZ3RoID0gMTsKKyAgICAgICAg
ICAgICAgICAoKmRlY2ltYWxfcG9pbnQpKys7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBjYXVnaHQgbW9zdCBvZiBzaW1pbGFyIGNhc2VzIGVh
cmxpZXIuCisgICAgICAgICAgICAgICAgKmxlbmd0aCA9IDA7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBUaGUgcmVx
dWVzdGVkIGRpZ2l0cyBjb3JyZXNwb25kIHRvIHRoZSBkaWdpdHMgYWZ0ZXIgdGhlIHBvaW50Lgor
ICAgICAgICAgICAgLy8gVGhlIHZhcmlhYmxlICduZWVkZWRfZGlnaXRzJyBpbmNsdWRlcyB0aGUg
ZGlnaXRzIGJlZm9yZSB0aGUgcG9pbnQuCisgICAgICAgICAgICBpbnQgbmVlZGVkX2RpZ2l0cyA9
ICgqZGVjaW1hbF9wb2ludCkgKyByZXF1ZXN0ZWRfZGlnaXRzOworICAgICAgICAgICAgR2VuZXJh
dGVDb3VudGVkRGlnaXRzKG5lZWRlZF9kaWdpdHMsIGRlY2ltYWxfcG9pbnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJhdG9yLCBkZW5vbWluYXRvciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgCisgICAgLy8gUmV0dXJucyBhbiBlc3RpbWF0aW9uIG9mIGsgc3VjaCB0
aGF0IDEwXihrLTEpIDw9IHYgPCAxMF5rIHdoZXJlCisgICAgLy8gdiA9IGYgKiAyXmV4cG9uZW50
IGFuZCAyXjUyIDw9IGYgPCAyXjUzLgorICAgIC8vIHYgaXMgaGVuY2UgYSBub3JtYWxpemVkIGRv
dWJsZSB3aXRoIHRoZSBnaXZlbiBleHBvbmVudC4gVGhlIG91dHB1dCBpcyBhbgorICAgIC8vIGFw
cHJveGltYXRpb24gZm9yIHRoZSBleHBvbmVudCBvZiB0aGUgZGVjaW1hbCBhcHByb2ltYXRpb24g
LmRpZ2l0cyAqIDEwXmsuCisgICAgLy8KKyAgICAvLyBUaGUgcmVzdWx0IG1pZ2h0IHVuZGVyc2hv
b3QgYnkgMSBpbiB3aGljaCBjYXNlIDEwXmsgPD0gdiA8IDEwXmsrMS4KKyAgICAvLyBOb3RlOiB0
aGlzIHByb3BlcnR5IGhvbGRzIGZvciB2J3MgdXBwZXIgYm91bmRhcnkgbSsgdG9vLgorICAgIC8v
ICAgIDEwXmsgPD0gbSsgPCAxMF5rKzEuCisgICAgLy8gICAoc2VlIGV4cGxhbmF0aW9uIGJlbG93
KS4KKyAgICAvLworICAgIC8vIEV4YW1wbGVzOgorICAgIC8vICBFc3RpbWF0ZVBvd2VyKDApICAg
PT4gMTYKKyAgICAvLyAgRXN0aW1hdGVQb3dlcigtNTIpID0+IDAKKyAgICAvLworICAgIC8vIE5v
dGU6IGUgPj0gMCA9PiBFc3RpbWF0ZWRQb3dlcihlKSA+IDAuIE5vIHNpbWlsYXIgY2xhaW0gY2Fu
IGJlIG1hZGUgZm9yIGU8MC4KKyAgICBzdGF0aWMgaW50IEVzdGltYXRlUG93ZXIoaW50IGV4cG9u
ZW50KSB7CisgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gZXN0aW1hdGVzIGxvZzEwIG9mIHYgd2hl
cmUgdiA9IGYqMl5lICh3aXRoIGUgPT0gZXhwb25lbnQpLgorICAgICAgICAvLyBOb3RlIHRoYXQg
MTBeZmxvb3IobG9nMTAodikpIDw9IHYsIGJ1dCB2IDw9IDEwXmNlaWwobG9nMTAodikpLgorICAg
ICAgICAvLyBOb3RlIHRoYXQgZiBpcyBib3VuZGVkIGJ5IGl0cyBjb250YWluZXIgc2l6ZS4gTGV0
IHAgPSA1MyAodGhlIGRvdWJsZSdzCisgICAgICAgIC8vIHNpZ25pZmljYW5kIHNpemUpLiBUaGVu
IDJeKHAtMSkgPD0gZiA8IDJecC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gR2l2ZW4gdGhhdCBs
b2cxMCh2KSA9PSBsb2cyKHYpL2xvZzIoMTApIGFuZCBlKyhsZW4oZiktMSkgaXMgcXVpdGUgY2xv
c2UKKyAgICAgICAgLy8gdG8gbG9nMih2KSB0aGUgZnVuY3Rpb24gaXMgc2ltcGxpZmllZCB0byAo
ZSsobGVuKGYpLTEpL2xvZzIoMTApKS4KKyAgICAgICAgLy8gVGhlIGNvbXB1dGVkIG51bWJlciB1
bmRlcnNob290cyBieSBsZXNzIHRoYW4gMC42MzEgKHdoZW4gd2UgY29tcHV0ZSBsb2czCisgICAg
ICAgIC8vIGFuZCBub3QgbG9nMTApLgorICAgICAgICAvLworICAgICAgICAvLyBPcHRpbWl6YXRp
b246IHNpbmNlIHdlIG9ubHkgbmVlZCBhbiBhcHByb3hpbWF0ZWQgcmVzdWx0IHRoaXMgY29tcHV0
YXRpb24KKyAgICAgICAgLy8gY2FuIGJlIHBlcmZvcm1lZCBvbiA2NCBiaXQgaW50ZWdlcnMuIE9u
IHg4Ni94NjQgYXJjaGl0ZWN0dXJlIHRoZSBzcGVlZHVwIGlzCisgICAgICAgIC8vIG5vdCByZWFs
bHkgbWVhc3VyYWJsZSwgdGhvdWdoLgorICAgICAgICAvLworICAgICAgICAvLyBTaW5jZSB3ZSB3
YW50IHRvIGF2b2lkIG92ZXJzaG9vdGluZyB3ZSBkZWNyZW1lbnQgYnkgMWUxMCBzbyB0aGF0Cisg
ICAgICAgIC8vIGZsb2F0aW5nLXBvaW50IGltcHJlY2lzaW9ucyBkb24ndCBhZmZlY3QgdXMuCisg
ICAgICAgIC8vCisgICAgICAgIC8vIEV4cGxhbmF0aW9uIGZvciB2J3MgYm91bmRhcnkgbSs6IHRo
ZSBjb21wdXRhdGlvbiB0YWtlcyBhZHZhbnRhZ2Ugb2YKKyAgICAgICAgLy8gdGhlIGZhY3QgdGhh
dCAyXihwLTEpIDw9IGYgPCAyXnAuIEJvdW5kYXJpZXMgc3RpbGwgc2F0aXNmeSB0aGlzIHJlcXVp
cmVtZW50CisgICAgICAgIC8vIChldmVuIGZvciBkZW5vcm1hbHMgd2hlcmUgdGhlIGRlbHRhIGNh
biBiZSBtdWNoIG1vcmUgaW1wb3J0YW50KS4KKyAgICAgICAgCisgICAgICAgIGNvbnN0IGRvdWJs
ZSBrMUxvZzEwID0gMC4zMDEwMjk5OTU2NjM5ODExNDsgIC8vIDEvbGcoMTApCisgICAgICAgIAor
ICAgICAgICAvLyBGb3IgZG91YmxlcyBsZW4oZikgPT0gNTMgKGRvbid0IGZvcmdldCB0aGUgaGlk
ZGVuIGJpdCkuCisgICAgICAgIGNvbnN0IGludCBrU2lnbmlmaWNhbmRTaXplID0gNTM7CisgICAg
ICAgIGRvdWJsZSBlc3RpbWF0ZSA9IGNlaWwoKGV4cG9uZW50ICsga1NpZ25pZmljYW5kU2l6ZSAt
IDEpICogazFMb2cxMCAtIDFlLTEwKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4o
ZXN0aW1hdGUpOworICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBTZWUgY29tbWVudHMgZm9yIElu
aXRpYWxTY2FsZWRTdGFydFZhbHVlcy4KKyAgICBzdGF0aWMgdm9pZCBJbml0aWFsU2NhbGVkU3Rh
cnRWYWx1ZXNQb3NpdGl2ZUV4cG9uZW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHYsIGludCBlc3RpbWF0ZWRfcG93ZXIs
IGJvb2wgbmVlZF9ib3VuZGFyeV9kZWx0YXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIG51bWVyYXRvciwgQmlnbnVtKiBk
ZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEJpZ251bSogZGVsdGFfbWludXMsIEJpZ251bSogZGVsdGFfcGx1cykgewor
ICAgICAgICAvLyBBIHBvc2l0aXZlIGV4cG9uZW50IGltcGxpZXMgYSBwb3NpdGl2ZSBwb3dlci4K
KyAgICAgICAgQVNTRVJUKGVzdGltYXRlZF9wb3dlciA+PSAwKTsKKyAgICAgICAgLy8gU2luY2Ug
dGhlIGVzdGltYXRlZF9wb3dlciBpcyBwb3NpdGl2ZSB3ZSBzaW1wbHkgbXVsdGlwbHkgdGhlIGRl
bm9taW5hdG9yCisgICAgICAgIC8vIGJ5IDEwXmVzdGltYXRlZF9wb3dlci4KKyAgICAgICAgCisg
ICAgICAgIC8vIG51bWVyYXRvciA9IHYuCisgICAgICAgIG51bWVyYXRvci0+QXNzaWduVUludDY0
KERvdWJsZSh2KS5TaWduaWZpY2FuZCgpKTsKKyAgICAgICAgbnVtZXJhdG9yLT5TaGlmdExlZnQo
RG91YmxlKHYpLkV4cG9uZW50KCkpOworICAgICAgICAvLyBkZW5vbWluYXRvciA9IDEwXmVzdGlt
YXRlZF9wb3dlci4KKyAgICAgICAgZGVub21pbmF0b3ItPkFzc2lnblBvd2VyVUludDE2KDEwLCBl
c3RpbWF0ZWRfcG93ZXIpOworICAgICAgICAKKyAgICAgICAgaWYgKG5lZWRfYm91bmRhcnlfZGVs
dGFzKSB7CisgICAgICAgICAgICAvLyBJbnRyb2R1Y2UgYSBjb21tb24gZGVub21pbmF0b3Igc28g
dGhhdCB0aGUgZGVsdGFzIHRvIHRoZSBib3VuZGFyaWVzIGFyZQorICAgICAgICAgICAgLy8gaW50
ZWdlcnMuCisgICAgICAgICAgICBkZW5vbWluYXRvci0+U2hpZnRMZWZ0KDEpOworICAgICAgICAg
ICAgbnVtZXJhdG9yLT5TaGlmdExlZnQoMSk7CisgICAgICAgICAgICAvLyBMZXQgdiA9IGYgKiAy
XmUsIHRoZW4gbSsgLSB2ID0gMS8yICogMl5lOyBXaXRoIHRoZSBjb21tb24KKyAgICAgICAgICAg
IC8vIGRlbm9taW5hdG9yIChvZiAyKSBkZWx0YV9wbHVzIGVxdWFscyAyXmUuCisgICAgICAgICAg
ICBkZWx0YV9wbHVzLT5Bc3NpZ25VSW50MTYoMSk7CisgICAgICAgICAgICBkZWx0YV9wbHVzLT5T
aGlmdExlZnQoRG91YmxlKHYpLkV4cG9uZW50KCkpOworICAgICAgICAgICAgLy8gU2FtZSBmb3Ig
ZGVsdGFfbWludXMgKHdpdGggYWRqdXN0bWVudHMgYmVsb3cgaWYgZiA9PSAyXnAtMSkuCisgICAg
ICAgICAgICBkZWx0YV9taW51cy0+QXNzaWduVUludDE2KDEpOworICAgICAgICAgICAgZGVsdGFf
bWludXMtPlNoaWZ0TGVmdChEb3VibGUodikuRXhwb25lbnQoKSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIC8vIElmIHRoZSBzaWduaWZpY2FuZCAod2l0aG91dCB0aGUgaGlkZGVuIGJpdCkg
aXMgMCwgdGhlbiB0aGUgbG93ZXIKKyAgICAgICAgICAgIC8vIGJvdW5kYXJ5IGlzIGNsb3NlciB0
aGFuIGp1c3QgaGFsZiBhIHVscCAodW5pdCBpbiB0aGUgbGFzdCBwbGFjZSkuCisgICAgICAgICAg
ICAvLyBUaGVyZSBpcyBvbmx5IG9uZSBleGNlcHRpb246IGlmIHRoZSBuZXh0IGxvd2VyIG51bWJl
ciBpcyBhIGRlbm9ybWFsIHRoZW4KKyAgICAgICAgICAgIC8vIHRoZSBkaXN0YW5jZSBpcyAxIHVs
cC4gVGhpcyBjYW5ub3QgYmUgdGhlIGNhc2UgZm9yIGV4cG9uZW50ID49IDAgKGJ1dCB3ZQorICAg
ICAgICAgICAgLy8gaGF2ZSB0byB0ZXN0IGl0IGluIHRoZSBvdGhlciBmdW5jdGlvbiB3aGVyZSBl
eHBvbmVudCA8IDApLgorICAgICAgICAgICAgdWludDY0X3Qgdl9iaXRzID0gRG91YmxlKHYpLkFz
VWludDY0KCk7CisgICAgICAgICAgICBpZiAoKHZfYml0cyAmIERvdWJsZTo6a1NpZ25pZmljYW5k
TWFzaykgPT0gMCkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBsb3dlciBib3VuZGFyeSBpcyBj
bG9zZXIgYXQgaGFsZiB0aGUgZGlzdGFuY2Ugb2YgIm5vcm1hbCIgbnVtYmVycy4KKyAgICAgICAg
ICAgICAgICAvLyBJbmNyZWFzZSB0aGUgY29tbW9uIGRlbm9taW5hdG9yIGFuZCBhZGFwdCBhbGwg
YnV0IHRoZSBkZWx0YV9taW51cy4KKyAgICAgICAgICAgICAgICBkZW5vbWluYXRvci0+U2hpZnRM
ZWZ0KDEpOyAgLy8gKjIKKyAgICAgICAgICAgICAgICBudW1lcmF0b3ItPlNoaWZ0TGVmdCgxKTsg
ICAgLy8gKjIKKyAgICAgICAgICAgICAgICBkZWx0YV9wbHVzLT5TaGlmdExlZnQoMSk7ICAgLy8g
KjIKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBT
ZWUgY29tbWVudHMgZm9yIEluaXRpYWxTY2FsZWRTdGFydFZhbHVlcworICAgIHN0YXRpYyB2b2lk
IEluaXRpYWxTY2FsZWRTdGFydFZhbHVlc05lZ2F0aXZlRXhwb25lbnRQb3NpdGl2ZVBvd2VyKAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRvdWJsZSB2LCBpbnQgZXN0aW1hdGVkX3Bvd2VyLCBib29sIG5lZWRfYm91
bmRhcnlfZGVsdGFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogbnVtZXJhdG9yLCBCaWdudW0qIGRl
bm9taW5hdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogZGVsdGFfbWludXMsIEJpZ251bSogZGVs
dGFfcGx1cykgeworICAgICAgICB1aW50NjRfdCBzaWduaWZpY2FuZCA9IERvdWJsZSh2KS5TaWdu
aWZpY2FuZCgpOworICAgICAgICBpbnQgZXhwb25lbnQgPSBEb3VibGUodikuRXhwb25lbnQoKTsK
KyAgICAgICAgLy8gdiA9IGYgKiAyXmUgd2l0aCBlIDwgMCwgYW5kIHdpdGggZXN0aW1hdGVkX3Bv
d2VyID49IDAuCisgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBlIGlzIGNsb3NlIHRvIDAgKGhh
dmUgYSBsb29rIGF0IGhvdyBlc3RpbWF0ZWRfcG93ZXIgaXMKKyAgICAgICAgLy8gY29tcHV0ZWQp
LgorICAgICAgICAKKyAgICAgICAgLy8gbnVtZXJhdG9yID0gc2lnbmlmaWNhbmQKKyAgICAgICAg
Ly8gIHNpbmNlIHYgPSBzaWduaWZpY2FuZCAqIDJeZXhwb25lbnQgdGhpcyBpcyBlcXVpdmFsZW50
IHRvCisgICAgICAgIC8vICBudW1lcmF0b3IgPSB2ICogLyAyXi1leHBvbmVudAorICAgICAgICBu
dW1lcmF0b3ItPkFzc2lnblVJbnQ2NChzaWduaWZpY2FuZCk7CisgICAgICAgIC8vIGRlbm9taW5h
dG9yID0gMTBeZXN0aW1hdGVkX3Bvd2VyICogMl4tZXhwb25lbnQgKHdpdGggZXhwb25lbnQgPCAw
KQorICAgICAgICBkZW5vbWluYXRvci0+QXNzaWduUG93ZXJVSW50MTYoMTAsIGVzdGltYXRlZF9w
b3dlcik7CisgICAgICAgIGRlbm9taW5hdG9yLT5TaGlmdExlZnQoLWV4cG9uZW50KTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChuZWVkX2JvdW5kYXJ5X2RlbHRhcykgeworICAgICAgICAgICAgLy8g
SW50cm9kdWNlIGEgY29tbW9uIGRlbm9taW5hdG9yIHNvIHRoYXQgdGhlIGRlbHRhcyB0byB0aGUg
Ym91bmRhcmllcyBhcmUKKyAgICAgICAgICAgIC8vIGludGVnZXJzLgorICAgICAgICAgICAgZGVu
b21pbmF0b3ItPlNoaWZ0TGVmdCgxKTsKKyAgICAgICAgICAgIG51bWVyYXRvci0+U2hpZnRMZWZ0
KDEpOworICAgICAgICAgICAgLy8gTGV0IHYgPSBmICogMl5lLCB0aGVuIG0rIC0gdiA9IDEvMiAq
IDJeZTsgV2l0aCB0aGUgY29tbW9uCisgICAgICAgICAgICAvLyBkZW5vbWluYXRvciAob2YgMikg
ZGVsdGFfcGx1cyBlcXVhbHMgMl5lLgorICAgICAgICAgICAgLy8gR2l2ZW4gdGhhdCB0aGUgZGVu
b21pbmF0b3IgYWxyZWFkeSBpbmNsdWRlcyB2J3MgZXhwb25lbnQgdGhlIGRpc3RhbmNlCisgICAg
ICAgICAgICAvLyB0byB0aGUgYm91bmRhcmllcyBpcyBzaW1wbHkgMS4KKyAgICAgICAgICAgIGRl
bHRhX3BsdXMtPkFzc2lnblVJbnQxNigxKTsKKyAgICAgICAgICAgIC8vIFNhbWUgZm9yIGRlbHRh
X21pbnVzICh3aXRoIGFkanVzdG1lbnRzIGJlbG93IGlmIGYgPT0gMl5wLTEpLgorICAgICAgICAg
ICAgZGVsdGFfbWludXMtPkFzc2lnblVJbnQxNigxKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgLy8gSWYgdGhlIHNpZ25pZmljYW5kICh3aXRob3V0IHRoZSBoaWRkZW4gYml0KSBpcyAwLCB0
aGVuIHRoZSBsb3dlcgorICAgICAgICAgICAgLy8gYm91bmRhcnkgaXMgY2xvc2VyIHRoYW4ganVz
dCBvbmUgdWxwICh1bml0IGluIHRoZSBsYXN0IHBsYWNlKS4KKyAgICAgICAgICAgIC8vIFRoZXJl
IGlzIG9ubHkgb25lIGV4Y2VwdGlvbjogaWYgdGhlIG5leHQgbG93ZXIgbnVtYmVyIGlzIGEgZGVu
b3JtYWwKKyAgICAgICAgICAgIC8vIHRoZW4gdGhlIGRpc3RhbmNlIGlzIDEgdWxwLiBTaW5jZSB0
aGUgZXhwb25lbnQgaXMgY2xvc2UgdG8gemVybworICAgICAgICAgICAgLy8gKG90aGVyd2lzZSBl
c3RpbWF0ZWRfcG93ZXIgd291bGQgaGF2ZSBiZWVuIG5lZ2F0aXZlKSB0aGlzIGNhbm5vdCBoYXBw
ZW4KKyAgICAgICAgICAgIC8vIGhlcmUgZWl0aGVyLgorICAgICAgICAgICAgdWludDY0X3Qgdl9i
aXRzID0gRG91YmxlKHYpLkFzVWludDY0KCk7CisgICAgICAgICAgICBpZiAoKHZfYml0cyAmIERv
dWJsZTo6a1NpZ25pZmljYW5kTWFzaykgPT0gMCkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBs
b3dlciBib3VuZGFyeSBpcyBjbG9zZXIgYXQgaGFsZiB0aGUgZGlzdGFuY2Ugb2YgIm5vcm1hbCIg
bnVtYmVycy4KKyAgICAgICAgICAgICAgICAvLyBJbmNyZWFzZSB0aGUgZGVub21pbmF0b3IgYW5k
IGFkYXB0IGFsbCBidXQgdGhlIGRlbHRhX21pbnVzLgorICAgICAgICAgICAgICAgIGRlbm9taW5h
dG9yLT5TaGlmdExlZnQoMSk7ICAvLyAqMgorICAgICAgICAgICAgICAgIG51bWVyYXRvci0+U2hp
ZnRMZWZ0KDEpOyAgICAvLyAqMgorICAgICAgICAgICAgICAgIGRlbHRhX3BsdXMtPlNoaWZ0TGVm
dCgxKTsgICAvLyAqMgorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAg
IAorICAgIC8vIFNlZSBjb21tZW50cyBmb3IgSW5pdGlhbFNjYWxlZFN0YXJ0VmFsdWVzCisgICAg
c3RhdGljIHZvaWQgSW5pdGlhbFNjYWxlZFN0YXJ0VmFsdWVzTmVnYXRpdmVFeHBvbmVudE5lZ2F0
aXZlUG93ZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHYsIGludCBlc3RpbWF0ZWRfcG93ZXIsIGJv
b2wgbmVlZF9ib3VuZGFyeV9kZWx0YXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBudW1lcmF0b3Is
IEJpZ251bSogZGVub21pbmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBkZWx0YV9taW51cywg
QmlnbnVtKiBkZWx0YV9wbHVzKSB7CisgICAgICAgIGNvbnN0IHVpbnQ2NF90IGtNaW5pbWFsTm9y
bWFsaXplZEV4cG9uZW50ID0KKyAgICAgICAgVUlOVDY0XzJQQVJUX0MoMHgwMDEwMDAwMCwgMDAw
MDAwMDApOworICAgICAgICB1aW50NjRfdCBzaWduaWZpY2FuZCA9IERvdWJsZSh2KS5TaWduaWZp
Y2FuZCgpOworICAgICAgICBpbnQgZXhwb25lbnQgPSBEb3VibGUodikuRXhwb25lbnQoKTsKKyAg
ICAgICAgLy8gSW5zdGVhZCBvZiBtdWx0aXBseWluZyB0aGUgZGVub21pbmF0b3Igd2l0aCAxMF5l
c3RpbWF0ZWRfcG93ZXIgd2UKKyAgICAgICAgLy8gbXVsdGlwbHkgYWxsIHZhbHVlcyAobnVtZXJh
dG9yIGFuZCBkZWx0YXMpIGJ5IDEwXi1lc3RpbWF0ZWRfcG93ZXIuCisgICAgICAgIAorICAgICAg
ICAvLyBVc2UgbnVtZXJhdG9yIGFzIHRlbXBvcmFyeSBjb250YWluZXIgZm9yIHBvd2VyX3Rlbi4K
KyAgICAgICAgQmlnbnVtKiBwb3dlcl90ZW4gPSBudW1lcmF0b3I7CisgICAgICAgIHBvd2VyX3Rl
bi0+QXNzaWduUG93ZXJVSW50MTYoMTAsIC1lc3RpbWF0ZWRfcG93ZXIpOworICAgICAgICAKKyAg
ICAgICAgaWYgKG5lZWRfYm91bmRhcnlfZGVsdGFzKSB7CisgICAgICAgICAgICAvLyBTaW5jZSBw
b3dlcl90ZW4gPT0gbnVtZXJhdG9yIHdlIG11c3QgbWFrZSBhIGNvcHkgb2YgMTBeZXN0aW1hdGVk
X3Bvd2VyCisgICAgICAgICAgICAvLyBiZWZvcmUgd2UgY29tcGxldGUgdGhlIGNvbXB1dGF0aW9u
IG9mIHRoZSBudW1lcmF0b3IuCisgICAgICAgICAgICAvLyBkZWx0YV9wbHVzID0gZGVsdGFfbWlu
dXMgPSAxMF5lc3RpbWF0ZWRfcG93ZXIKKyAgICAgICAgICAgIGRlbHRhX3BsdXMtPkFzc2lnbkJp
Z251bSgqcG93ZXJfdGVuKTsKKyAgICAgICAgICAgIGRlbHRhX21pbnVzLT5Bc3NpZ25CaWdudW0o
KnBvd2VyX3Rlbik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIG51bWVyYXRvciA9
IHNpZ25pZmljYW5kICogMiAqIDEwXi1lc3RpbWF0ZWRfcG93ZXIKKyAgICAgICAgLy8gIHNpbmNl
IHYgPSBzaWduaWZpY2FuZCAqIDJeZXhwb25lbnQgdGhpcyBpcyBlcXVpdmFsZW50IHRvCisgICAg
ICAgIC8vIG51bWVyYXRvciA9IHYgKiAxMF4tZXN0aW1hdGVkX3Bvd2VyICogMiAqIDJeLWV4cG9u
ZW50LgorICAgICAgICAvLyBSZW1lbWJlcjogbnVtZXJhdG9yIGhhcyBiZWVuIGFidXNlZCBhcyBw
b3dlcl90ZW4uIFNvIG5vIG5lZWQgdG8gYXNzaWduIGl0CisgICAgICAgIC8vICB0byBpdHNlbGYu
CisgICAgICAgIEFTU0VSVChudW1lcmF0b3IgPT0gcG93ZXJfdGVuKTsKKyAgICAgICAgbnVtZXJh
dG9yLT5NdWx0aXBseUJ5VUludDY0KHNpZ25pZmljYW5kKTsKKyAgICAgICAgCisgICAgICAgIC8v
IGRlbm9taW5hdG9yID0gMiAqIDJeLWV4cG9uZW50IHdpdGggZXhwb25lbnQgPCAwLgorICAgICAg
ICBkZW5vbWluYXRvci0+QXNzaWduVUludDE2KDEpOworICAgICAgICBkZW5vbWluYXRvci0+U2hp
ZnRMZWZ0KC1leHBvbmVudCk7CisgICAgICAgIAorICAgICAgICBpZiAobmVlZF9ib3VuZGFyeV9k
ZWx0YXMpIHsKKyAgICAgICAgICAgIC8vIEludHJvZHVjZSBhIGNvbW1vbiBkZW5vbWluYXRvciBz
byB0aGF0IHRoZSBkZWx0YXMgdG8gdGhlIGJvdW5kYXJpZXMgYXJlCisgICAgICAgICAgICAvLyBp
bnRlZ2Vycy4KKyAgICAgICAgICAgIG51bWVyYXRvci0+U2hpZnRMZWZ0KDEpOworICAgICAgICAg
ICAgZGVub21pbmF0b3ItPlNoaWZ0TGVmdCgxKTsKKyAgICAgICAgICAgIC8vIFdpdGggdGhpcyBz
aGlmdCB0aGUgYm91bmRhcmllcyBoYXZlIHRoZWlyIGNvcnJlY3QgdmFsdWUsIHNpbmNlCisgICAg
ICAgICAgICAvLyBkZWx0YV9wbHVzID0gMTBeLWVzdGltYXRlZF9wb3dlciwgYW5kCisgICAgICAg
ICAgICAvLyBkZWx0YV9taW51cyA9IDEwXi1lc3RpbWF0ZWRfcG93ZXIuCisgICAgICAgICAgICAv
LyBUaGVzZSBhc3NpZ25tZW50cyBoYXZlIGJlZW4gZG9uZSBlYXJsaWVyLgorICAgICAgICAgICAg
CisgICAgICAgICAgICAvLyBUaGUgc3BlY2lhbCBjYXNlIHdoZXJlIHRoZSBsb3dlciBib3VuZGFy
eSBpcyB0d2ljZSBhcyBjbG9zZS4KKyAgICAgICAgICAgIC8vIFRoaXMgdGltZSB3ZSBoYXZlIHRv
IGxvb2sgb3V0IGZvciB0aGUgZXhjZXB0aW9uIHRvby4KKyAgICAgICAgICAgIHVpbnQ2NF90IHZf
Yml0cyA9IERvdWJsZSh2KS5Bc1VpbnQ2NCgpOworICAgICAgICAgICAgaWYgKCh2X2JpdHMgJiBE
b3VibGU6OmtTaWduaWZpY2FuZE1hc2spID09IDAgJiYKKyAgICAgICAgICAgICAgICAvLyBUaGUg
b25seSBleGNlcHRpb24gd2hlcmUgYSBzaWduaWZpY2FuZCA9PSAwIGhhcyBpdHMgYm91bmRhcmll
cyBhdAorICAgICAgICAgICAgICAgIC8vICJub3JtYWwiIGRpc3RhbmNlczoKKyAgICAgICAgICAg
ICAgICAodl9iaXRzICYgRG91YmxlOjprRXhwb25lbnRNYXNrKSAhPSBrTWluaW1hbE5vcm1hbGl6
ZWRFeHBvbmVudCkgeworICAgICAgICAgICAgICAgIG51bWVyYXRvci0+U2hpZnRMZWZ0KDEpOyAg
ICAvLyAqMgorICAgICAgICAgICAgICAgIGRlbm9taW5hdG9yLT5TaGlmdExlZnQoMSk7ICAvLyAq
MgorICAgICAgICAgICAgICAgIGRlbHRhX3BsdXMtPlNoaWZ0TGVmdCgxKTsgICAvLyAqMgorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIC8vIExldCB2ID0g
c2lnbmlmaWNhbmQgKiAyXmV4cG9uZW50LgorICAgIC8vIENvbXB1dGVzIHYgLyAxMF5lc3RpbWF0
ZWRfcG93ZXIgZXhhY3RseSwgYXMgYSByYXRpbyBvZiB0d28gYmlnbnVtcywgbnVtZXJhdG9yCisg
ICAgLy8gYW5kIGRlbm9taW5hdG9yLiBUaGUgZnVuY3Rpb25zIEdlbmVyYXRlU2hvcnRlc3REaWdp
dHMgYW5kCisgICAgLy8gR2VuZXJhdGVDb3VudGVkRGlnaXRzIHdpbGwgdGhlbiBjb252ZXJ0IHRo
aXMgcmF0aW8gdG8gaXRzIGRlY2ltYWwKKyAgICAvLyByZXByZXNlbnRhdGlvbiBkLCB3aXRoIHRo
ZSByZXF1aXJlZCBhY2N1cmFjeS4KKyAgICAvLyBUaGVuIGQgKiAxMF5lc3RpbWF0ZWRfcG93ZXIg
aXMgdGhlIHJlcHJlc2VudGF0aW9uIG9mIHYuCisgICAgLy8gKE5vdGU6IHRoZSBmcmFjdGlvbiBh
bmQgdGhlIGVzdGltYXRlZF9wb3dlciBtaWdodCBnZXQgYWRqdXN0ZWQgYmVmb3JlCisgICAgLy8g
Z2VuZXJhdGluZyB0aGUgZGVjaW1hbCByZXByZXNlbnRhdGlvbi4pCisgICAgLy8KKyAgICAvLyBU
aGUgaW5pdGlhbCBzdGFydCB2YWx1ZXMgY29uc2lzdCBvZjoKKyAgICAvLyAgLSBhIHNjYWxlZCBu
dW1lcmF0b3I6IHMudC4gbnVtZXJhdG9yL2Rlbm9taW5hdG9yID09IHYgLyAxMF5lc3RpbWF0ZWRf
cG93ZXIuCisgICAgLy8gIC0gYSBzY2FsZWQgKGNvbW1vbikgZGVub21pbmF0b3IuCisgICAgLy8g
IG9wdGlvbmFsbHkgKHVzZWQgYnkgR2VuZXJhdGVTaG9ydGVzdERpZ2l0cyB0byBkZWNpZGUgaWYg
aXQgaGFzIHRoZSBzaG9ydGVzdAorICAgIC8vICBkZWNpbWFsIGNvbnZlcnRpbmcgYmFjayB0byB2
KToKKyAgICAvLyAgLSB2IC0gbS06IHRoZSBkaXN0YW5jZSB0byB0aGUgbG93ZXIgYm91bmRhcnku
CisgICAgLy8gIC0gbSsgLSB2OiB0aGUgZGlzdGFuY2UgdG8gdGhlIHVwcGVyIGJvdW5kYXJ5Lgor
ICAgIC8vCisgICAgLy8gdiwgbSssIG0tLCBhbmQgdGhlcmVmb3JlIHYgLSBtLSBhbmQgbSsgLSB2
IGFsbCBzaGFyZSB0aGUgc2FtZSBkZW5vbWluYXRvci4KKyAgICAvLworICAgIC8vIExldCBlcCA9
PSBlc3RpbWF0ZWRfcG93ZXIsIHRoZW4gdGhlIHJldHVybmVkIHZhbHVlcyB3aWxsIHNhdGlzZnk6
CisgICAgLy8gIHYgLyAxMF5lcCA9IG51bWVyYXRvciAvIGRlbm9taW5hdG9yLgorICAgIC8vICB2
J3MgYm91bmRhcnlzIG0tIGFuZCBtKzoKKyAgICAvLyAgICBtLSAvIDEwXmVwID09IHYgLyAxMF5l
cCAtIGRlbHRhX21pbnVzIC8gZGVub21pbmF0b3IKKyAgICAvLyAgICBtKyAvIDEwXmVwID09IHYg
LyAxMF5lcCArIGRlbHRhX3BsdXMgLyBkZW5vbWluYXRvcgorICAgIC8vICBPciBpbiBvdGhlciB3
b3JkczoKKyAgICAvLyAgICBtLSA9PSB2IC0gZGVsdGFfbWludXMgKiAxMF5lcCAvIGRlbm9taW5h
dG9yOworICAgIC8vICAgIG0rID09IHYgKyBkZWx0YV9wbHVzICogMTBeZXAgLyBkZW5vbWluYXRv
cjsKKyAgICAvLworICAgIC8vIFNpbmNlIDEwXihrLTEpIDw9IHYgPCAxMF5rICAgICh3aXRoIGsg
PT0gZXN0aW1hdGVkX3Bvd2VyKQorICAgIC8vICBvciAgICAgICAxMF5rIDw9IHYgPCAxMF4oaysx
KQorICAgIC8vICB3ZSB0aGVuIGhhdmUgMC4xIDw9IG51bWVyYXRvci9kZW5vbWluYXRvciA8IDEK
KyAgICAvLyAgICAgICAgICAgb3IgICAgMSA8PSBudW1lcmF0b3IvZGVub21pbmF0b3IgPCAxMAor
ICAgIC8vCisgICAgLy8gSXQgaXMgdGhlbiBlYXN5IHRvIGtpY2tzdGFydCB0aGUgZGlnaXQtZ2Vu
ZXJhdGlvbiByb3V0aW5lLgorICAgIC8vCisgICAgLy8gVGhlIGJvdW5kYXJ5LWRlbHRhcyBhcmUg
b25seSBmaWxsZWQgaWYgbmVlZF9ib3VuZGFyeV9kZWx0YXMgaXMgc2V0LgorICAgIHN0YXRpYyB2
b2lkIEluaXRpYWxTY2FsZWRTdGFydFZhbHVlcyhkb3VibGUgdiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVzdGltYXRlZF9wb3dlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBuZWVkX2JvdW5kYXJ5X2RlbHRhcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBudW1lcmF0
b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogZGVu
b21pbmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251
bSogZGVsdGFfbWludXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEJpZ251bSogZGVsdGFfcGx1cykgeworICAgICAgICBpZiAoRG91YmxlKHYpLkV4cG9uZW50KCkg
Pj0gMCkgeworICAgICAgICAgICAgSW5pdGlhbFNjYWxlZFN0YXJ0VmFsdWVzUG9zaXRpdmVFeHBv
bmVudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdiwgZXN0aW1hdGVkX3Bvd2VyLCBuZWVkX2JvdW5kYXJ5X2RlbHRhcywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJhdG9yLCBkZW5v
bWluYXRvciwgZGVsdGFfbWludXMsIGRlbHRhX3BsdXMpOworICAgICAgICB9IGVsc2UgaWYgKGVz
dGltYXRlZF9wb3dlciA+PSAwKSB7CisgICAgICAgICAgICBJbml0aWFsU2NhbGVkU3RhcnRWYWx1
ZXNOZWdhdGl2ZUV4cG9uZW50UG9zaXRpdmVQb3dlcigKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYsIGVzdGltYXRlZF9w
b3dlciwgbmVlZF9ib3VuZGFyeV9kZWx0YXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmF0b3IsIGRlbm9taW5h
dG9yLCBkZWx0YV9taW51cywgZGVsdGFfcGx1cyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBJbml0aWFsU2NhbGVkU3RhcnRWYWx1ZXNOZWdhdGl2ZUV4cG9uZW50TmVnYXRpdmVQb3dl
cigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHYsIGVzdGltYXRlZF9wb3dlciwgbmVlZF9ib3VuZGFyeV9kZWx0YXMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBudW1lcmF0b3IsIGRlbm9taW5hdG9yLCBkZWx0YV9taW51cywgZGVsdGFfcGx1cyk7
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgLy8gVGhpcyByb3V0aW5lIG11bHRp
cGxpZXMgbnVtZXJhdG9yL2Rlbm9taW5hdG9yIHNvIHRoYXQgaXRzIHZhbHVlcyBsaWVzIGluIHRo
ZQorICAgIC8vIHJhbmdlIDEtMTAuIFRoYXQgaXMgYWZ0ZXIgYSBjYWxsIHRvIHRoaXMgZnVuY3Rp
b24gd2UgaGF2ZToKKyAgICAvLyAgICAxIDw9IChudW1lcmF0b3IgKyBkZWx0YV9wbHVzKSAvZGVu
b21pbmF0b3IgPCAxMC4KKyAgICAvLyBMZXQgbnVtZXJhdG9yIHRoZSBpbnB1dCBiZWZvcmUgbW9k
aWZpY2F0aW9uIGFuZCBudW1lcmF0b3InIHRoZSBhcmd1bWVudAorICAgIC8vIGFmdGVyIG1vZGlm
aWNhdGlvbiwgdGhlbiB0aGUgb3V0cHV0LXBhcmFtZXRlciBkZWNpbWFsX3BvaW50IGlzIHN1Y2gg
dGhhdAorICAgIC8vICBudW1lcmF0b3IgLyBkZW5vbWluYXRvciAqIDEwXmVzdGltYXRlZF9wb3dl
ciA9PQorICAgIC8vICAgIG51bWVyYXRvcicgLyBkZW5vbWluYXRvcicgKiAxMF4oZGVjaW1hbF9w
b2ludCAtIDEpCisgICAgLy8gSW4gc29tZSBjYXNlcyBlc3RpbWF0ZWRfcG93ZXIgd2FzIHRvbyBs
b3csIGFuZCB0aGlzIGlzIGFscmVhZHkgdGhlIGNhc2UuIFdlCisgICAgLy8gdGhlbiBzaW1wbHkg
YWRqdXN0IHRoZSBwb3dlciBzbyB0aGF0IDEwXihrLTEpIDw9IHYgPCAxMF5rICh3aXRoIGsgPT0K
KyAgICAvLyBlc3RpbWF0ZWRfcG93ZXIpIGJ1dCBkbyBub3QgdG91Y2ggdGhlIG51bWVyYXRvciBv
ciBkZW5vbWluYXRvci4KKyAgICAvLyBPdGhlcndpc2UgdGhlIHJvdXRpbmUgbXVsdGlwbGllcyB0
aGUgbnVtZXJhdG9yIGFuZCB0aGUgZGVsdGFzIGJ5IDEwLgorICAgIHN0YXRpYyB2b2lkIEZpeHVw
TXVsdGlwbHkxMChpbnQgZXN0aW1hdGVkX3Bvd2VyLCBib29sIGlzX2V2ZW4sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCogZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQmlnbnVtKiBudW1lcmF0b3IsIEJpZ251bSogZGVub21pbmF0b3Is
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogZGVsdGFfbWludXMsIEJp
Z251bSogZGVsdGFfcGx1cykgeworICAgICAgICBib29sIGluX3JhbmdlOworICAgICAgICBpZiAo
aXNfZXZlbikgeworICAgICAgICAgICAgLy8gRm9yIElFRUUgZG91YmxlcyBoYWxmLXdheSBjYXNl
cyAoaW4gZGVjaW1hbCBzeXN0ZW0gbnVtYmVycyBlbmRpbmcgd2l0aCA1KQorICAgICAgICAgICAg
Ly8gYXJlIHJvdW5kZWQgdG8gdGhlIGNsb3Nlc3QgZmxvYXRpbmctcG9pbnQgbnVtYmVyIHdpdGgg
ZXZlbiBzaWduaWZpY2FuZC4KKyAgICAgICAgICAgIGluX3JhbmdlID0gQmlnbnVtOjpQbHVzQ29t
cGFyZSgqbnVtZXJhdG9yLCAqZGVsdGFfcGx1cywgKmRlbm9taW5hdG9yKSA+PSAwOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgaW5fcmFuZ2UgPSBCaWdudW06OlBsdXNDb21wYXJlKCpu
dW1lcmF0b3IsICpkZWx0YV9wbHVzLCAqZGVub21pbmF0b3IpID4gMDsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoaW5fcmFuZ2UpIHsKKyAgICAgICAgICAgIC8vIFNpbmNlIG51bWVyYXRvciArIGRl
bHRhX3BsdXMgPj0gZGVub21pbmF0b3Igd2UgYWxyZWFkeSBoYXZlCisgICAgICAgICAgICAvLyAx
IDw9IG51bWVyYXRvci9kZW5vbWluYXRvciA8IDEwLiBTaW1wbHkgdXBkYXRlIHRoZSBlc3RpbWF0
ZWRfcG93ZXIuCisgICAgICAgICAgICAqZGVjaW1hbF9wb2ludCA9IGVzdGltYXRlZF9wb3dlciAr
IDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAqZGVjaW1hbF9wb2ludCA9IGVzdGlt
YXRlZF9wb3dlcjsKKyAgICAgICAgICAgIG51bWVyYXRvci0+VGltZXMxMCgpOworICAgICAgICAg
ICAgaWYgKEJpZ251bTo6RXF1YWwoKmRlbHRhX21pbnVzLCAqZGVsdGFfcGx1cykpIHsKKyAgICAg
ICAgICAgICAgICBkZWx0YV9taW51cy0+VGltZXMxMCgpOworICAgICAgICAgICAgICAgIGRlbHRh
X3BsdXMtPkFzc2lnbkJpZ251bSgqZGVsdGFfbWludXMpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBkZWx0YV9taW51cy0+VGltZXMxMCgpOworICAgICAgICAgICAgICAg
IGRlbHRhX3BsdXMtPlRpbWVzMTAoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICAKK30gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS1kdG9hLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL2R0b2EvYmlnbnVtLWR0b2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wM2ZiYWFiYjdhNTYz
ODU2ZjBmYTRjZjU0ZWI3ZjdlNjI5NjBlNjc5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS1kdG9hLmgKQEAgLTAsMCArMSw4MiBAQAorLy8g
Q29weXJpZ2h0IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlz
Y2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkCisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKy8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisv
LyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWZuZGVmIERPVUJMRV9DT05WRVJTSU9OX0JJR05V
TV9EVE9BX0hfCisjZGVmaW5lIERPVUJMRV9DT05WRVJTSU9OX0JJR05VTV9EVE9BX0hfCisKKyNp
bmNsdWRlICJ1dGlscy5oIgorCituYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24geworICAgIAor
ICAgIGVudW0gQmlnbnVtRHRvYU1vZGUgeworICAgICAgICAvLyBSZXR1cm4gdGhlIHNob3J0ZXN0
IGNvcnJlY3QgcmVwcmVzZW50YXRpb24uCisgICAgICAgIC8vIEZvciBleGFtcGxlIHRoZSBvdXRw
dXQgb2YgMC4yOTk5OTk5OTk5OTk5OTk5ODg4OTcgaXMgKHRoZSBsZXNzIGFjY3VyYXRlIGJ1dAor
ICAgICAgICAvLyBjb3JyZWN0KSAwLjMuCisgICAgICAgIEJJR05VTV9EVE9BX1NIT1JURVNULAor
ICAgICAgICAvLyBSZXR1cm4gYSBmaXhlZCBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIHRoZSBkZWNp
bWFsIHBvaW50LgorICAgICAgICAvLyBGb3IgaW5zdGFuY2UgZml4ZWQoMC4xLCA0KSBiZWNvbWVz
IDAuMTAwMAorICAgICAgICAvLyBJZiB0aGUgaW5wdXQgbnVtYmVyIGlzIGJpZywgdGhlIG91dHB1
dCB3aWxsIGJlIGJpZy4KKyAgICAgICAgQklHTlVNX0RUT0FfRklYRUQsCisgICAgICAgIC8vIFJl
dHVybiBhIGZpeGVkIG51bWJlciBvZiBkaWdpdHMsIG5vIG1hdHRlciB3aGF0IHRoZSBleHBvbmVu
dCBpcy4KKyAgICAgICAgQklHTlVNX0RUT0FfUFJFQ0lTSU9OCisgICAgfTsKKyAgICAKKyAgICAv
LyBDb252ZXJ0cyB0aGUgZ2l2ZW4gZG91YmxlICd2JyB0byBhc2NpaS4KKyAgICAvLyBUaGUgcmVz
dWx0IHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBidWZmZXIgKiAxMF4ocG9pbnQtbGVuZ3RoKS4K
KyAgICAvLyBUaGUgYnVmZmVyIHdpbGwgYmUgbnVsbC10ZXJtaW5hdGVkLgorICAgIC8vCisgICAg
Ly8gVGhlIGlucHV0IHYgbXVzdCBiZSA+IDAgYW5kIGRpZmZlcmVudCBmcm9tIE5hTiwgYW5kIElu
ZmluaXR5LgorICAgIC8vCisgICAgLy8gVGhlIG91dHB1dCBkZXBlbmRzIG9uIHRoZSBnaXZlbiBt
b2RlOgorICAgIC8vICAtIFNIT1JURVNUOiBwcm9kdWNlIHRoZSBsZWFzdCBhbW91bnQgb2YgZGln
aXRzIGZvciB3aGljaCB0aGUgaW50ZXJuYWwKKyAgICAvLyAgIGlkZW50aXR5IHJlcXVpcmVtZW50
IGlzIHN0aWxsIHNhdGlzZmllZC4gSWYgdGhlIGRpZ2l0cyBhcmUgcHJpbnRlZAorICAgIC8vICAg
KHRvZ2V0aGVyIHdpdGggdGhlIGNvcnJlY3QgZXhwb25lbnQpIHRoZW4gcmVhZGluZyB0aGlzIG51
bWJlciB3aWxsIGdpdmUKKyAgICAvLyAgICd2JyBhZ2Fpbi4gVGhlIGJ1ZmZlciB3aWxsIGNob29z
ZSB0aGUgcmVwcmVzZW50YXRpb24gdGhhdCBpcyBjbG9zZXN0IHRvCisgICAgLy8gICAndicuIElm
IHRoZXJlIGFyZSB0d28gYXQgdGhlIHNhbWUgZGlzdGFuY2UsIHRoYW4gdGhlIG51bWJlciBpcyBy
b3VuZCB1cC4KKyAgICAvLyAgIEluIHRoaXMgbW9kZSB0aGUgJ3JlcXVlc3RlZF9kaWdpdHMnIHBh
cmFtZXRlciBpcyBpZ25vcmVkLgorICAgIC8vICAtIEZJWEVEOiBwcm9kdWNlcyBkaWdpdHMgbmVj
ZXNzYXJ5IHRvIHByaW50IGEgZ2l2ZW4gbnVtYmVyIHdpdGgKKyAgICAvLyAgICdyZXF1ZXN0ZWRf
ZGlnaXRzJyBkaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQuIFRoZSBwcm9kdWNlZCBkaWdp
dHMKKyAgICAvLyAgIG1pZ2h0IGJlIHRvbyBzaG9ydCBpbiB3aGljaCBjYXNlIHRoZSBjYWxsZXIg
aGFzIHRvIGZpbGwgdGhlIGdhcHMgd2l0aCAnMCdzLgorICAgIC8vICAgRXhhbXBsZTogdG9GaXhl
ZCgwLjAwMSwgNSkgaXMgYWxsb3dlZCB0byByZXR1cm4gYnVmZmVyPSIxIiwgcG9pbnQ9LTIuCisg
ICAgLy8gICBIYWxmd2F5IGNhc2VzIGFyZSByb3VuZGVkIHVwLiBUaGUgY2FsbCB0b0ZpeGVkKDAu
MTUsIDIpIHRodXMgcmV0dXJucworICAgIC8vICAgICBidWZmZXI9IjIiLCBwb2ludD0wLgorICAg
IC8vICAgTm90ZTogdGhlIGxlbmd0aCBvZiB0aGUgcmV0dXJuZWQgYnVmZmVyIGhhcyBubyBtZWFu
aW5nIHdydCB0aGUgc2lnbmlmaWNhbmNlCisgICAgLy8gICBvZiBpdHMgZGlnaXRzLiBUaGF0IGlz
LCBqdXN0IGJlY2F1c2UgaXQgY29udGFpbnMgJzAncyBkb2VzIG5vdCBtZWFuIHRoYXQKKyAgICAv
LyAgIGFueSBvdGhlciBkaWdpdCB3b3VsZCBub3Qgc2F0aXNmeSB0aGUgaW50ZXJuYWwgaWRlbnRp
dHkgcmVxdWlyZW1lbnQuCisgICAgLy8gIC0gUFJFQ0lTSU9OOiBwcm9kdWNlcyAncmVxdWVzdGVk
X2RpZ2l0cycgd2hlcmUgdGhlIGZpcnN0IGRpZ2l0IGlzIG5vdCAnMCcuCisgICAgLy8gICBFdmVu
IHRob3VnaCB0aGUgbGVuZ3RoIG9mIHByb2R1Y2VkIGRpZ2l0cyB1c3VhbGx5IGVxdWFscworICAg
IC8vICAgJ3JlcXVlc3RlZF9kaWdpdHMnLCB0aGUgZnVuY3Rpb24gaXMgYWxsb3dlZCB0byByZXR1
cm4gZmV3ZXIgZGlnaXRzLCBpbgorICAgIC8vICAgd2hpY2ggY2FzZSB0aGUgY2FsbGVyIGhhcyB0
byBmaWxsIHRoZSBtaXNzaW5nIGRpZ2l0cyB3aXRoICcwJ3MuCisgICAgLy8gICBIYWxmd2F5IGNh
c2VzIGFyZSBhZ2FpbiByb3VuZGVkIHVwLgorICAgIC8vICdCaWdudW1EdG9hJyBleHBlY3RzIHRo
ZSBnaXZlbiBidWZmZXIgdG8gYmUgYmlnIGVub3VnaCB0byBob2xkIGFsbCBkaWdpdHMKKyAgICAv
LyBhbmQgYSB0ZXJtaW5hdGluZyBudWxsLWNoYXJhY3Rlci4KKyAgICB2b2lkIEJpZ251bUR0b2Eo
ZG91YmxlIHYsIEJpZ251bUR0b2FNb2RlIG1vZGUsIGludCByZXF1ZXN0ZWRfZGlnaXRzLAorICAg
ICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLCBpbnQqIGxlbmd0aCwgaW50KiBw
b2ludCk7CisgICAgCit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KKworI2VuZGlm
ICAvLyBET1VCTEVfQ09OVkVSU0lPTl9CSUdOVU1fRFRPQV9IXwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS5jYyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvZHRvYS9iaWdudW0uY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGYwMTU0NjYyNWVkOTM3YWY4ZjE0MGYx
NGQxMDU3ZjU5MTE1MmI2NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvZHRvYS9iaWdudW0uY2MKQEAgLTAsMCArMSw3NjQgQEAKKy8vIENvcHlyaWdodCAyMDEw
IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8g
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworI2luY2x1ZGUgImJpZ251bS5oIgorI2luY2x1ZGUgInV0aWxzLmgiCisKK25h
bWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgQmlnbnVtOjpCaWdudW0oKQor
ICAgIDogYmlnaXRzXyhiaWdpdHNfYnVmZmVyXywga0JpZ2l0Q2FwYWNpdHkpLCB1c2VkX2RpZ2l0
c18oMCksIGV4cG9uZW50XygwKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwga0JpZ2l0
Q2FwYWNpdHk7ICsraSkgeworICAgICAgICAgICAgYmlnaXRzX1tpXSA9IDA7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUz4KKyAgICBzdGF0aWMg
aW50IEJpdFNpemUoUyB2YWx1ZSkgeworICAgICAgICByZXR1cm4gOCAqIHNpemVvZih2YWx1ZSk7
CisgICAgfQorICAgIAorICAgIC8vIEd1YXJhbnRlZWQgdG8gbGllIGluIG9uZSBCaWdpdC4KKyAg
ICB2b2lkIEJpZ251bTo6QXNzaWduVUludDE2KHVpbnQxNl90IHZhbHVlKSB7CisgICAgICAgIEFT
U0VSVChrQmlnaXRTaXplID49IEJpdFNpemUodmFsdWUpKTsKKyAgICAgICAgWmVybygpOworICAg
ICAgICBpZiAodmFsdWUgPT0gMCkgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgRW5zdXJlQ2Fw
YWNpdHkoMSk7CisgICAgICAgIGJpZ2l0c19bMF0gPSB2YWx1ZTsKKyAgICAgICAgdXNlZF9kaWdp
dHNfID0gMTsKKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06OkFzc2lnblVJbnQ2
NCh1aW50NjRfdCB2YWx1ZSkgeworICAgICAgICBjb25zdCBpbnQga1VJbnQ2NFNpemUgPSA2NDsK
KyAgICAgICAgCisgICAgICAgIFplcm8oKTsKKyAgICAgICAgaWYgKHZhbHVlID09IDApIHJldHVy
bjsKKyAgICAgICAgCisgICAgICAgIGludCBuZWVkZWRfYmlnaXRzID0ga1VJbnQ2NFNpemUgLyBr
QmlnaXRTaXplICsgMTsKKyAgICAgICAgRW5zdXJlQ2FwYWNpdHkobmVlZGVkX2JpZ2l0cyk7Cisg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmVlZGVkX2JpZ2l0czsgKytpKSB7CisgICAgICAg
ICAgICBiaWdpdHNfW2ldID0gdmFsdWUgJiBrQmlnaXRNYXNrOworICAgICAgICAgICAgdmFsdWUg
PSB2YWx1ZSA+PiBrQmlnaXRTaXplOworICAgICAgICB9CisgICAgICAgIHVzZWRfZGlnaXRzXyA9
IG5lZWRlZF9iaWdpdHM7CisgICAgICAgIENsYW1wKCk7CisgICAgfQorICAgIAorICAgIAorICAg
IHZvaWQgQmlnbnVtOjpBc3NpZ25CaWdudW0oY29uc3QgQmlnbnVtJiBvdGhlcikgeworICAgICAg
ICBleHBvbmVudF8gPSBvdGhlci5leHBvbmVudF87CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgb3RoZXIudXNlZF9kaWdpdHNfOyArK2kpIHsKKyAgICAgICAgICAgIGJpZ2l0c19baV0gPSBv
dGhlci5iaWdpdHNfW2ldOworICAgICAgICB9CisgICAgICAgIC8vIENsZWFyIHRoZSBleGNlc3Mg
ZGlnaXRzIChpZiB0aGVyZSB3ZXJlIGFueSkuCisgICAgICAgIGZvciAoaW50IGkgPSBvdGhlci51
c2VkX2RpZ2l0c187IGkgPCB1c2VkX2RpZ2l0c187ICsraSkgeworICAgICAgICAgICAgYmlnaXRz
X1tpXSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgdXNlZF9kaWdpdHNfID0gb3RoZXIudXNlZF9k
aWdpdHNfOworICAgIH0KKyAgICAKKyAgICAKKyAgICBzdGF0aWMgdWludDY0X3QgUmVhZFVJbnQ2
NChWZWN0b3I8Y29uc3QgY2hhcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBmcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkaWdpdHNf
dG9fcmVhZCkgeworICAgICAgICB1aW50NjRfdCByZXN1bHQgPSAwOworICAgICAgICBmb3IgKGlu
dCBpID0gZnJvbTsgaSA8IGZyb20gKyBkaWdpdHNfdG9fcmVhZDsgKytpKSB7CisgICAgICAgICAg
ICBpbnQgZGlnaXQgPSBidWZmZXJbaV0gLSAnMCc7CisgICAgICAgICAgICBBU1NFUlQoMCA8PSBk
aWdpdCAmJiBkaWdpdCA8PSA5KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAqIDEwICsg
ZGlnaXQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisg
ICAgCisgICAgdm9pZCBCaWdudW06OkFzc2lnbkRlY2ltYWxTdHJpbmcoVmVjdG9yPGNvbnN0IGNo
YXI+IHZhbHVlKSB7CisgICAgICAgIC8vIDJeNjQgPSAxODQ0Njc0NDA3MzcwOTU1MTYxNiA+IDEw
XjE5CisgICAgICAgIGNvbnN0IGludCBrTWF4VWludDY0RGVjaW1hbERpZ2l0cyA9IDE5OworICAg
ICAgICBaZXJvKCk7CisgICAgICAgIGludCBsZW5ndGggPSB2YWx1ZS5sZW5ndGgoKTsKKyAgICAg
ICAgaW50IHBvcyA9IDA7CisgICAgICAgIC8vIExldCdzIGp1c3Qgc2F5IHRoYXQgZWFjaCBkaWdp
dCBuZWVkcyA0IGJpdHMuCisgICAgICAgIHdoaWxlIChsZW5ndGggPj0ga01heFVpbnQ2NERlY2lt
YWxEaWdpdHMpIHsKKyAgICAgICAgICAgIHVpbnQ2NF90IGRpZ2l0cyA9IFJlYWRVSW50NjQodmFs
dWUsIHBvcywga01heFVpbnQ2NERlY2ltYWxEaWdpdHMpOworICAgICAgICAgICAgcG9zICs9IGtN
YXhVaW50NjREZWNpbWFsRGlnaXRzOworICAgICAgICAgICAgbGVuZ3RoIC09IGtNYXhVaW50NjRE
ZWNpbWFsRGlnaXRzOworICAgICAgICAgICAgTXVsdGlwbHlCeVBvd2VyT2ZUZW4oa01heFVpbnQ2
NERlY2ltYWxEaWdpdHMpOworICAgICAgICAgICAgQWRkVUludDY0KGRpZ2l0cyk7CisgICAgICAg
IH0KKyAgICAgICAgdWludDY0X3QgZGlnaXRzID0gUmVhZFVJbnQ2NCh2YWx1ZSwgcG9zLCBsZW5n
dGgpOworICAgICAgICBNdWx0aXBseUJ5UG93ZXJPZlRlbihsZW5ndGgpOworICAgICAgICBBZGRV
SW50NjQoZGlnaXRzKTsKKyAgICAgICAgQ2xhbXAoKTsKKyAgICB9CisgICAgCisgICAgCisgICAg
c3RhdGljIGludCBIZXhDaGFyVmFsdWUoY2hhciBjKSB7CisgICAgICAgIGlmICgnMCcgPD0gYyAm
JiBjIDw9ICc5JykgcmV0dXJuIGMgLSAnMCc7CisgICAgICAgIGlmICgnYScgPD0gYyAmJiBjIDw9
ICdmJykgcmV0dXJuIDEwICsgYyAtICdhJzsKKyAgICAgICAgaWYgKCdBJyA8PSBjICYmIGMgPD0g
J0YnKSByZXR1cm4gMTAgKyBjIC0gJ0EnOworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAg
ICByZXR1cm4gMDsgIC8vIFRvIG1ha2UgY29tcGlsZXIgaGFwcHkuCisgICAgfQorICAgIAorICAg
IAorICAgIHZvaWQgQmlnbnVtOjpBc3NpZ25IZXhTdHJpbmcoVmVjdG9yPGNvbnN0IGNoYXI+IHZh
bHVlKSB7CisgICAgICAgIFplcm8oKTsKKyAgICAgICAgaW50IGxlbmd0aCA9IHZhbHVlLmxlbmd0
aCgpOworICAgICAgICAKKyAgICAgICAgaW50IG5lZWRlZF9iaWdpdHMgPSBsZW5ndGggKiA0IC8g
a0JpZ2l0U2l6ZSArIDE7CisgICAgICAgIEVuc3VyZUNhcGFjaXR5KG5lZWRlZF9iaWdpdHMpOwor
ICAgICAgICBpbnQgc3RyaW5nX2luZGV4ID0gbGVuZ3RoIC0gMTsKKyAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBuZWVkZWRfYmlnaXRzIC0gMTsgKytpKSB7CisgICAgICAgICAgICAvLyBUaGVz
ZSBiaWdpdHMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgImZ1bGwiLgorICAgICAgICAgICAgQ2h1bmsg
Y3VycmVudF9iaWdpdCA9IDA7CisgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGtCaWdp
dFNpemUgLyA0OyBqKyspIHsKKyAgICAgICAgICAgICAgICBjdXJyZW50X2JpZ2l0ICs9IEhleENo
YXJWYWx1ZSh2YWx1ZVtzdHJpbmdfaW5kZXgtLV0pIDw8IChqICogNCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBiaWdpdHNfW2ldID0gY3VycmVudF9iaWdpdDsKKyAgICAgICAgfQorICAg
ICAgICB1c2VkX2RpZ2l0c18gPSBuZWVkZWRfYmlnaXRzIC0gMTsKKyAgICAgICAgCisgICAgICAg
IENodW5rIG1vc3Rfc2lnbmlmaWNhbnRfYmlnaXQgPSAwOyAgLy8gQ291bGQgYmUgPSAwOworICAg
ICAgICBmb3IgKGludCBqID0gMDsgaiA8PSBzdHJpbmdfaW5kZXg7ICsraikgeworICAgICAgICAg
ICAgbW9zdF9zaWduaWZpY2FudF9iaWdpdCA8PD0gNDsKKyAgICAgICAgICAgIG1vc3Rfc2lnbmlm
aWNhbnRfYmlnaXQgKz0gSGV4Q2hhclZhbHVlKHZhbHVlW2pdKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAobW9zdF9zaWduaWZpY2FudF9iaWdpdCAhPSAwKSB7CisgICAgICAgICAgICBiaWdpdHNf
W3VzZWRfZGlnaXRzX10gPSBtb3N0X3NpZ25pZmljYW50X2JpZ2l0OworICAgICAgICAgICAgdXNl
ZF9kaWdpdHNfKys7CisgICAgICAgIH0KKyAgICAgICAgQ2xhbXAoKTsKKyAgICB9CisgICAgCisg
ICAgCisgICAgdm9pZCBCaWdudW06OkFkZFVJbnQ2NCh1aW50NjRfdCBvcGVyYW5kKSB7CisgICAg
ICAgIGlmIChvcGVyYW5kID09IDApIHJldHVybjsKKyAgICAgICAgQmlnbnVtIG90aGVyOworICAg
ICAgICBvdGhlci5Bc3NpZ25VSW50NjQob3BlcmFuZCk7CisgICAgICAgIEFkZEJpZ251bShvdGhl
cik7CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpBZGRCaWdudW0oY29uc3Qg
QmlnbnVtJiBvdGhlcikgeworICAgICAgICBBU1NFUlQoSXNDbGFtcGVkKCkpOworICAgICAgICBB
U1NFUlQob3RoZXIuSXNDbGFtcGVkKCkpOworICAgICAgICAKKyAgICAgICAgLy8gSWYgdGhpcyBo
YXMgYSBncmVhdGVyIGV4cG9uZW50IHRoYW4gb3RoZXIgYXBwZW5kIHplcm8tYmlnaXRzIHRvIHRo
aXMuCisgICAgICAgIC8vIEFmdGVyIHRoaXMgY2FsbCBleHBvbmVudF8gPD0gb3RoZXIuZXhwb25l
bnRfLgorICAgICAgICBBbGlnbihvdGhlcik7CisgICAgICAgIAorICAgICAgICAvLyBUaGVyZSBh
cmUgdHdvIHBvc3NpYmlsaXRpZXM6CisgICAgICAgIC8vICAgYWFhYWFhYWFhYWEgMDAwMCAgKHdo
ZXJlIHRoZSAwcyByZXByZXNlbnQgYSdzIGV4cG9uZW50KQorICAgICAgICAvLyAgICAgYmJiYmIg
MDAwMDAwMDAKKyAgICAgICAgLy8gICAtLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIC8vICAgY2Nj
Y2NjY2NjY2MgMDAwMAorICAgICAgICAvLyBvcgorICAgICAgICAvLyAgICBhYWFhYWFhYWFhIDAw
MDAKKyAgICAgICAgLy8gIGJiYmJiYmJiYiAwMDAwMDAwCisgICAgICAgIC8vICAtLS0tLS0tLS0t
LS0tLS0tLQorICAgICAgICAvLyAgY2NjY2NjY2NjY2NjIDAwMDAKKyAgICAgICAgLy8gSW4gYm90
aCBjYXNlcyB3ZSBtaWdodCBuZWVkIGEgY2FycnkgYmlnaXQuCisgICAgICAgIAorICAgICAgICBF
bnN1cmVDYXBhY2l0eSgxICsgTWF4KEJpZ2l0TGVuZ3RoKCksIG90aGVyLkJpZ2l0TGVuZ3RoKCkp
IC0gZXhwb25lbnRfKTsKKyAgICAgICAgQ2h1bmsgY2FycnkgPSAwOworICAgICAgICBpbnQgYmln
aXRfcG9zID0gb3RoZXIuZXhwb25lbnRfIC0gZXhwb25lbnRfOworICAgICAgICBBU1NFUlQoYmln
aXRfcG9zID49IDApOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG90aGVyLnVzZWRfZGln
aXRzXzsgKytpKSB7CisgICAgICAgICAgICBDaHVuayBzdW0gPSBiaWdpdHNfW2JpZ2l0X3Bvc10g
KyBvdGhlci5iaWdpdHNfW2ldICsgY2Fycnk7CisgICAgICAgICAgICBiaWdpdHNfW2JpZ2l0X3Bv
c10gPSBzdW0gJiBrQmlnaXRNYXNrOworICAgICAgICAgICAgY2FycnkgPSBzdW0gPj4ga0JpZ2l0
U2l6ZTsKKyAgICAgICAgICAgIGJpZ2l0X3BvcysrOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICB3aGlsZSAoY2FycnkgIT0gMCkgeworICAgICAgICAgICAgQ2h1bmsgc3VtID0gYmlnaXRz
X1tiaWdpdF9wb3NdICsgY2Fycnk7CisgICAgICAgICAgICBiaWdpdHNfW2JpZ2l0X3Bvc10gPSBz
dW0gJiBrQmlnaXRNYXNrOworICAgICAgICAgICAgY2FycnkgPSBzdW0gPj4ga0JpZ2l0U2l6ZTsK
KyAgICAgICAgICAgIGJpZ2l0X3BvcysrOworICAgICAgICB9CisgICAgICAgIHVzZWRfZGlnaXRz
XyA9IE1heChiaWdpdF9wb3MsIHVzZWRfZGlnaXRzXyk7CisgICAgICAgIEFTU0VSVChJc0NsYW1w
ZWQoKSk7CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpTdWJ0cmFjdEJpZ251
bShjb25zdCBCaWdudW0mIG90aGVyKSB7CisgICAgICAgIEFTU0VSVChJc0NsYW1wZWQoKSk7Cisg
ICAgICAgIEFTU0VSVChvdGhlci5Jc0NsYW1wZWQoKSk7CisgICAgICAgIC8vIFdlIHJlcXVpcmUg
dGhpcyB0byBiZSBiaWdnZXIgdGhhbiBvdGhlci4KKyAgICAgICAgQVNTRVJUKExlc3NFcXVhbChv
dGhlciwgKnRoaXMpKTsKKyAgICAgICAgCisgICAgICAgIEFsaWduKG90aGVyKTsKKyAgICAgICAg
CisgICAgICAgIGludCBvZmZzZXQgPSBvdGhlci5leHBvbmVudF8gLSBleHBvbmVudF87CisgICAg
ICAgIENodW5rIGJvcnJvdyA9IDA7CisgICAgICAgIGludCBpOworICAgICAgICBmb3IgKGkgPSAw
OyBpIDwgb3RoZXIudXNlZF9kaWdpdHNfOyArK2kpIHsKKyAgICAgICAgICAgIEFTU0VSVCgoYm9y
cm93ID09IDApIHx8IChib3Jyb3cgPT0gMSkpOworICAgICAgICAgICAgQ2h1bmsgZGlmZmVyZW5j
ZSA9IGJpZ2l0c19baSArIG9mZnNldF0gLSBvdGhlci5iaWdpdHNfW2ldIC0gYm9ycm93OworICAg
ICAgICAgICAgYmlnaXRzX1tpICsgb2Zmc2V0XSA9IGRpZmZlcmVuY2UgJiBrQmlnaXRNYXNrOwor
ICAgICAgICAgICAgYm9ycm93ID0gZGlmZmVyZW5jZSA+PiAoa0NodW5rU2l6ZSAtIDEpOworICAg
ICAgICB9CisgICAgICAgIHdoaWxlIChib3Jyb3cgIT0gMCkgeworICAgICAgICAgICAgQ2h1bmsg
ZGlmZmVyZW5jZSA9IGJpZ2l0c19baSArIG9mZnNldF0gLSBib3Jyb3c7CisgICAgICAgICAgICBi
aWdpdHNfW2kgKyBvZmZzZXRdID0gZGlmZmVyZW5jZSAmIGtCaWdpdE1hc2s7CisgICAgICAgICAg
ICBib3Jyb3cgPSBkaWZmZXJlbmNlID4+IChrQ2h1bmtTaXplIC0gMSk7CisgICAgICAgICAgICAr
K2k7CisgICAgICAgIH0KKyAgICAgICAgQ2xhbXAoKTsKKyAgICB9CisgICAgCisgICAgCisgICAg
dm9pZCBCaWdudW06OlNoaWZ0TGVmdChpbnQgc2hpZnRfYW1vdW50KSB7CisgICAgICAgIGlmICh1
c2VkX2RpZ2l0c18gPT0gMCkgcmV0dXJuOworICAgICAgICBleHBvbmVudF8gKz0gc2hpZnRfYW1v
dW50IC8ga0JpZ2l0U2l6ZTsKKyAgICAgICAgaW50IGxvY2FsX3NoaWZ0ID0gc2hpZnRfYW1vdW50
ICUga0JpZ2l0U2l6ZTsKKyAgICAgICAgRW5zdXJlQ2FwYWNpdHkodXNlZF9kaWdpdHNfICsgMSk7
CisgICAgICAgIEJpZ2l0c1NoaWZ0TGVmdChsb2NhbF9zaGlmdCk7CisgICAgfQorICAgIAorICAg
IAorICAgIHZvaWQgQmlnbnVtOjpNdWx0aXBseUJ5VUludDMyKHVpbnQzMl90IGZhY3Rvcikgewor
ICAgICAgICBpZiAoZmFjdG9yID09IDEpIHJldHVybjsKKyAgICAgICAgaWYgKGZhY3RvciA9PSAw
KSB7CisgICAgICAgICAgICBaZXJvKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHVzZWRfZGlnaXRzXyA9PSAwKSByZXR1cm47CisgICAgICAgIAorICAgICAg
ICAvLyBUaGUgcHJvZHVjdCBvZiBhIGJpZ2l0IHdpdGggdGhlIGZhY3RvciBpcyBvZiBzaXplIGtC
aWdpdFNpemUgKyAzMi4KKyAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhpcyBudW1iZXIgKyAxIChm
b3IgdGhlIGNhcnJ5KSBmaXRzIGludG8gZG91YmxlIGNodW5rLgorICAgICAgICBBU1NFUlQoa0Rv
dWJsZUNodW5rU2l6ZSA+PSBrQmlnaXRTaXplICsgMzIgKyAxKTsKKyAgICAgICAgRG91YmxlQ2h1
bmsgY2FycnkgPSAwOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHVzZWRfZGlnaXRzXzsg
KytpKSB7CisgICAgICAgICAgICBEb3VibGVDaHVuayBwcm9kdWN0ID0gc3RhdGljX2Nhc3Q8RG91
YmxlQ2h1bms+KGZhY3RvcikgKiBiaWdpdHNfW2ldICsgY2Fycnk7CisgICAgICAgICAgICBiaWdp
dHNfW2ldID0gc3RhdGljX2Nhc3Q8Q2h1bms+KHByb2R1Y3QgJiBrQmlnaXRNYXNrKTsKKyAgICAg
ICAgICAgIGNhcnJ5ID0gKHByb2R1Y3QgPj4ga0JpZ2l0U2l6ZSk7CisgICAgICAgIH0KKyAgICAg
ICAgd2hpbGUgKGNhcnJ5ICE9IDApIHsKKyAgICAgICAgICAgIEVuc3VyZUNhcGFjaXR5KHVzZWRf
ZGlnaXRzXyArIDEpOworICAgICAgICAgICAgYmlnaXRzX1t1c2VkX2RpZ2l0c19dID0gY2Fycnkg
JiBrQmlnaXRNYXNrOworICAgICAgICAgICAgdXNlZF9kaWdpdHNfKys7CisgICAgICAgICAgICBj
YXJyeSA+Pj0ga0JpZ2l0U2l6ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICB2
b2lkIEJpZ251bTo6TXVsdGlwbHlCeVVJbnQ2NCh1aW50NjRfdCBmYWN0b3IpIHsKKyAgICAgICAg
aWYgKGZhY3RvciA9PSAxKSByZXR1cm47CisgICAgICAgIGlmIChmYWN0b3IgPT0gMCkgeworICAg
ICAgICAgICAgWmVybygpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IEFTU0VSVChrQmlnaXRTaXplIDwgMzIpOworICAgICAgICB1aW50NjRfdCBjYXJyeSA9IDA7Cisg
ICAgICAgIHVpbnQ2NF90IGxvdyA9IGZhY3RvciAmIDB4RkZGRkZGRkY7CisgICAgICAgIHVpbnQ2
NF90IGhpZ2ggPSBmYWN0b3IgPj4gMzI7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdXNl
ZF9kaWdpdHNfOyArK2kpIHsKKyAgICAgICAgICAgIHVpbnQ2NF90IHByb2R1Y3RfbG93ID0gbG93
ICogYmlnaXRzX1tpXTsKKyAgICAgICAgICAgIHVpbnQ2NF90IHByb2R1Y3RfaGlnaCA9IGhpZ2gg
KiBiaWdpdHNfW2ldOworICAgICAgICAgICAgdWludDY0X3QgdG1wID0gKGNhcnJ5ICYga0JpZ2l0
TWFzaykgKyBwcm9kdWN0X2xvdzsKKyAgICAgICAgICAgIGJpZ2l0c19baV0gPSB0bXAgJiBrQmln
aXRNYXNrOworICAgICAgICAgICAgY2FycnkgPSAoY2FycnkgPj4ga0JpZ2l0U2l6ZSkgKyAodG1w
ID4+IGtCaWdpdFNpemUpICsKKyAgICAgICAgICAgIChwcm9kdWN0X2hpZ2ggPDwgKDMyIC0ga0Jp
Z2l0U2l6ZSkpOworICAgICAgICB9CisgICAgICAgIHdoaWxlIChjYXJyeSAhPSAwKSB7CisgICAg
ICAgICAgICBFbnN1cmVDYXBhY2l0eSh1c2VkX2RpZ2l0c18gKyAxKTsKKyAgICAgICAgICAgIGJp
Z2l0c19bdXNlZF9kaWdpdHNfXSA9IGNhcnJ5ICYga0JpZ2l0TWFzazsKKyAgICAgICAgICAgIHVz
ZWRfZGlnaXRzXysrOworICAgICAgICAgICAgY2FycnkgPj49IGtCaWdpdFNpemU7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06Ok11bHRpcGx5QnlQb3dlck9m
VGVuKGludCBleHBvbmVudCkgeworICAgICAgICBjb25zdCB1aW50NjRfdCBrRml2ZTI3ID0gVUlO
VDY0XzJQQVJUX0MoMHg2NzY1Yzc5MywgZmExMDA3OWQpOworICAgICAgICBjb25zdCB1aW50MTZf
dCBrRml2ZTEgPSA1OworICAgICAgICBjb25zdCB1aW50MTZfdCBrRml2ZTIgPSBrRml2ZTEgKiA1
OworICAgICAgICBjb25zdCB1aW50MTZfdCBrRml2ZTMgPSBrRml2ZTIgKiA1OworICAgICAgICBj
b25zdCB1aW50MTZfdCBrRml2ZTQgPSBrRml2ZTMgKiA1OworICAgICAgICBjb25zdCB1aW50MTZf
dCBrRml2ZTUgPSBrRml2ZTQgKiA1OworICAgICAgICBjb25zdCB1aW50MTZfdCBrRml2ZTYgPSBr
Rml2ZTUgKiA1OworICAgICAgICBjb25zdCB1aW50MzJfdCBrRml2ZTcgPSBrRml2ZTYgKiA1Owor
ICAgICAgICBjb25zdCB1aW50MzJfdCBrRml2ZTggPSBrRml2ZTcgKiA1OworICAgICAgICBjb25z
dCB1aW50MzJfdCBrRml2ZTkgPSBrRml2ZTggKiA1OworICAgICAgICBjb25zdCB1aW50MzJfdCBr
Rml2ZTEwID0ga0ZpdmU5ICogNTsKKyAgICAgICAgY29uc3QgdWludDMyX3Qga0ZpdmUxMSA9IGtG
aXZlMTAgKiA1OworICAgICAgICBjb25zdCB1aW50MzJfdCBrRml2ZTEyID0ga0ZpdmUxMSAqIDU7
CisgICAgICAgIGNvbnN0IHVpbnQzMl90IGtGaXZlMTMgPSBrRml2ZTEyICogNTsKKyAgICAgICAg
Y29uc3QgdWludDMyX3Qga0ZpdmUxX3RvXzEyW10gPQorICAgICAgICB7IGtGaXZlMSwga0ZpdmUy
LCBrRml2ZTMsIGtGaXZlNCwga0ZpdmU1LCBrRml2ZTYsCisgICAgICAgICAgICBrRml2ZTcsIGtG
aXZlOCwga0ZpdmU5LCBrRml2ZTEwLCBrRml2ZTExLCBrRml2ZTEyIH07CisgICAgICAgIAorICAg
ICAgICBBU1NFUlQoZXhwb25lbnQgPj0gMCk7CisgICAgICAgIGlmIChleHBvbmVudCA9PSAwKSBy
ZXR1cm47CisgICAgICAgIGlmICh1c2VkX2RpZ2l0c18gPT0gMCkgcmV0dXJuOworICAgICAgICAK
KyAgICAgICAgLy8gV2Ugc2hpZnQgYnkgZXhwb25lbnQgYXQgdGhlIGVuZCBqdXN0IGJlZm9yZSBy
ZXR1cm5pbmcuCisgICAgICAgIGludCByZW1haW5pbmdfZXhwb25lbnQgPSBleHBvbmVudDsKKyAg
ICAgICAgd2hpbGUgKHJlbWFpbmluZ19leHBvbmVudCA+PSAyNykgeworICAgICAgICAgICAgTXVs
dGlwbHlCeVVJbnQ2NChrRml2ZTI3KTsKKyAgICAgICAgICAgIHJlbWFpbmluZ19leHBvbmVudCAt
PSAyNzsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAocmVtYWluaW5nX2V4cG9uZW50ID49IDEz
KSB7CisgICAgICAgICAgICBNdWx0aXBseUJ5VUludDMyKGtGaXZlMTMpOworICAgICAgICAgICAg
cmVtYWluaW5nX2V4cG9uZW50IC09IDEzOworICAgICAgICB9CisgICAgICAgIGlmIChyZW1haW5p
bmdfZXhwb25lbnQgPiAwKSB7CisgICAgICAgICAgICBNdWx0aXBseUJ5VUludDMyKGtGaXZlMV90
b18xMltyZW1haW5pbmdfZXhwb25lbnQgLSAxXSk7CisgICAgICAgIH0KKyAgICAgICAgU2hpZnRM
ZWZ0KGV4cG9uZW50KTsKKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06OlNxdWFy
ZSgpIHsKKyAgICAgICAgQVNTRVJUKElzQ2xhbXBlZCgpKTsKKyAgICAgICAgaW50IHByb2R1Y3Rf
bGVuZ3RoID0gMiAqIHVzZWRfZGlnaXRzXzsKKyAgICAgICAgRW5zdXJlQ2FwYWNpdHkocHJvZHVj
dF9sZW5ndGgpOworICAgICAgICAKKyAgICAgICAgLy8gQ29tYmEgbXVsdGlwbGljYXRpb246IGNv
bXB1dGUgZWFjaCBjb2x1bW4gc2VwYXJhdGVseS4KKyAgICAgICAgLy8gRXhhbXBsZTogciA9IGEy
YTFhMCAqIGIyYjFiMC4KKyAgICAgICAgLy8gICAgciA9ICAxICAgICogYTBiMCArCisgICAgICAg
IC8vICAgICAgICAxMCAgICAqIChhMWIwICsgYTBiMSkgKworICAgICAgICAvLyAgICAgICAgMTAw
ICAgKiAoYTJiMCArIGExYjEgKyBhMGIyKSArCisgICAgICAgIC8vICAgICAgICAxMDAwICAqIChh
MmIxICsgYTFiMikgKworICAgICAgICAvLyAgICAgICAgMTAwMDAgKiBhMmIyCisgICAgICAgIC8v
CisgICAgICAgIC8vIEluIHRoZSB3b3JzdCBjYXNlIHdlIGhhdmUgdG8gYWNjdW11bGF0ZSBuYi1k
aWdpdHMgcHJvZHVjdHMgb2YgZGlnaXQqZGlnaXQuCisgICAgICAgIC8vCisgICAgICAgIC8vIEFz
c2VydCB0aGF0IHRoZSBhZGRpdGlvbmFsIG51bWJlciBvZiBiaXRzIGluIGEgRG91YmxlQ2h1bmsg
YXJlIGVub3VnaCB0bworICAgICAgICAvLyBzdW0gdXAgdXNlZF9kaWdpdHMgb2YgQmlnaXQqQmln
aXQuCisgICAgICAgIGlmICgoMSA8PCAoMiAqIChrQ2h1bmtTaXplIC0ga0JpZ2l0U2l6ZSkpKSA8
PSB1c2VkX2RpZ2l0c18pIHsKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICAgICAg
fQorICAgICAgICBEb3VibGVDaHVuayBhY2N1bXVsYXRvciA9IDA7CisgICAgICAgIC8vIEZpcnN0
IHNoaWZ0IHRoZSBkaWdpdHMgc28gd2UgZG9uJ3Qgb3ZlcndyaXRlIHRoZW0uCisgICAgICAgIGlu
dCBjb3B5X29mZnNldCA9IHVzZWRfZGlnaXRzXzsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCB1c2VkX2RpZ2l0c187ICsraSkgeworICAgICAgICAgICAgYmlnaXRzX1tjb3B5X29mZnNldCAr
IGldID0gYmlnaXRzX1tpXTsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBoYXZlIHR3byBsb29w
cyB0byBhdm9pZCBzb21lICdpZidzIGluIHRoZSBsb29wLgorICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IHVzZWRfZGlnaXRzXzsgKytpKSB7CisgICAgICAgICAgICAvLyBQcm9jZXNzIHRlbXBv
cmFyeSBkaWdpdCBpIHdpdGggcG93ZXIgaS4KKyAgICAgICAgICAgIC8vIFRoZSBzdW0gb2YgdGhl
IHR3byBpbmRpY2VzIG11c3QgYmUgZXF1YWwgdG8gaS4KKyAgICAgICAgICAgIGludCBiaWdpdF9p
bmRleDEgPSBpOworICAgICAgICAgICAgaW50IGJpZ2l0X2luZGV4MiA9IDA7CisgICAgICAgICAg
ICAvLyBTdW0gYWxsIG9mIHRoZSBzdWItcHJvZHVjdHMuCisgICAgICAgICAgICB3aGlsZSAoYmln
aXRfaW5kZXgxID49IDApIHsKKyAgICAgICAgICAgICAgICBDaHVuayBjaHVuazEgPSBiaWdpdHNf
W2NvcHlfb2Zmc2V0ICsgYmlnaXRfaW5kZXgxXTsKKyAgICAgICAgICAgICAgICBDaHVuayBjaHVu
azIgPSBiaWdpdHNfW2NvcHlfb2Zmc2V0ICsgYmlnaXRfaW5kZXgyXTsKKyAgICAgICAgICAgICAg
ICBhY2N1bXVsYXRvciArPSBzdGF0aWNfY2FzdDxEb3VibGVDaHVuaz4oY2h1bmsxKSAqIGNodW5r
MjsKKyAgICAgICAgICAgICAgICBiaWdpdF9pbmRleDEtLTsKKyAgICAgICAgICAgICAgICBiaWdp
dF9pbmRleDIrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJpZ2l0c19baV0gPSBzdGF0
aWNfY2FzdDxDaHVuaz4oYWNjdW11bGF0b3IpICYga0JpZ2l0TWFzazsKKyAgICAgICAgICAgIGFj
Y3VtdWxhdG9yID4+PSBrQmlnaXRTaXplOworICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGkg
PSB1c2VkX2RpZ2l0c187IGkgPCBwcm9kdWN0X2xlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBp
bnQgYmlnaXRfaW5kZXgxID0gdXNlZF9kaWdpdHNfIC0gMTsKKyAgICAgICAgICAgIGludCBiaWdp
dF9pbmRleDIgPSBpIC0gYmlnaXRfaW5kZXgxOworICAgICAgICAgICAgLy8gSW52YXJpYW50OiBz
dW0gb2YgYm90aCBpbmRpY2VzIGlzIGFnYWluIGVxdWFsIHRvIGkuCisgICAgICAgICAgICAvLyBJ
bm5lciBsb29wIHJ1bnMgMCB0aW1lcyBvbiBsYXN0IGl0ZXJhdGlvbiwgZW1wdHlpbmcgYWNjdW11
bGF0b3IuCisgICAgICAgICAgICB3aGlsZSAoYmlnaXRfaW5kZXgyIDwgdXNlZF9kaWdpdHNfKSB7
CisgICAgICAgICAgICAgICAgQ2h1bmsgY2h1bmsxID0gYmlnaXRzX1tjb3B5X29mZnNldCArIGJp
Z2l0X2luZGV4MV07CisgICAgICAgICAgICAgICAgQ2h1bmsgY2h1bmsyID0gYmlnaXRzX1tjb3B5
X29mZnNldCArIGJpZ2l0X2luZGV4Ml07CisgICAgICAgICAgICAgICAgYWNjdW11bGF0b3IgKz0g
c3RhdGljX2Nhc3Q8RG91YmxlQ2h1bms+KGNodW5rMSkgKiBjaHVuazI7CisgICAgICAgICAgICAg
ICAgYmlnaXRfaW5kZXgxLS07CisgICAgICAgICAgICAgICAgYmlnaXRfaW5kZXgyKys7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAvLyBUaGUgb3ZlcndyaXR0ZW4gYmlnaXRzX1tpXSB3aWxs
IG5ldmVyIGJlIHJlYWQgaW4gZnVydGhlciBsb29wIGl0ZXJhdGlvbnMsCisgICAgICAgICAgICAv
LyBiZWNhdXNlIGJpZ2l0X2luZGV4MSBhbmQgYmlnaXRfaW5kZXgyIGFyZSBhbHdheXMgZ3JlYXRl
cgorICAgICAgICAgICAgLy8gdGhhbiBpIC0gdXNlZF9kaWdpdHNfLgorICAgICAgICAgICAgYmln
aXRzX1tpXSA9IHN0YXRpY19jYXN0PENodW5rPihhY2N1bXVsYXRvcikgJiBrQmlnaXRNYXNrOwor
ICAgICAgICAgICAgYWNjdW11bGF0b3IgPj49IGtCaWdpdFNpemU7CisgICAgICAgIH0KKyAgICAg
ICAgLy8gU2luY2UgdGhlIHJlc3VsdCB3YXMgZ3VhcmFudGVlZCB0byBsaWUgaW5zaWRlIHRoZSBu
dW1iZXIgdGhlCisgICAgICAgIC8vIGFjY3VtdWxhdG9yIG11c3QgYmUgMCBub3cuCisgICAgICAg
IEFTU0VSVChhY2N1bXVsYXRvciA9PSAwKTsKKyAgICAgICAgCisgICAgICAgIC8vIERvbid0IGZv
cmdldCB0byB1cGRhdGUgdGhlIHVzZWRfZGlnaXRzIGFuZCB0aGUgZXhwb25lbnQuCisgICAgICAg
IHVzZWRfZGlnaXRzXyA9IHByb2R1Y3RfbGVuZ3RoOworICAgICAgICBleHBvbmVudF8gKj0gMjsK
KyAgICAgICAgQ2xhbXAoKTsKKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06OkFz
c2lnblBvd2VyVUludDE2KHVpbnQxNl90IGJhc2UsIGludCBwb3dlcl9leHBvbmVudCkgeworICAg
ICAgICBBU1NFUlQoYmFzZSAhPSAwKTsKKyAgICAgICAgQVNTRVJUKHBvd2VyX2V4cG9uZW50ID49
IDApOworICAgICAgICBpZiAocG93ZXJfZXhwb25lbnQgPT0gMCkgeworICAgICAgICAgICAgQXNz
aWduVUludDE2KDEpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIFpl
cm8oKTsKKyAgICAgICAgaW50IHNoaWZ0cyA9IDA7CisgICAgICAgIC8vIFdlIGV4cGVjdCBiYXNl
IHRvIGJlIGluIHJhbmdlIDItMzIsIGFuZCBtb3N0IG9mdGVuIHRvIGJlIDEwLgorICAgICAgICAv
LyBJdCBkb2VzIG5vdCBtYWtlIG11Y2ggc2Vuc2UgdG8gaW1wbGVtZW50IGRpZmZlcmVudCBhbGdv
cml0aG1zIGZvciBjb3VudGluZworICAgICAgICAvLyB0aGUgYml0cy4KKyAgICAgICAgd2hpbGUg
KChiYXNlICYgMSkgPT0gMCkgeworICAgICAgICAgICAgYmFzZSA+Pj0gMTsKKyAgICAgICAgICAg
IHNoaWZ0cysrOworICAgICAgICB9CisgICAgICAgIGludCBiaXRfc2l6ZSA9IDA7CisgICAgICAg
IGludCB0bXBfYmFzZSA9IGJhc2U7CisgICAgICAgIHdoaWxlICh0bXBfYmFzZSAhPSAwKSB7Cisg
ICAgICAgICAgICB0bXBfYmFzZSA+Pj0gMTsKKyAgICAgICAgICAgIGJpdF9zaXplKys7CisgICAg
ICAgIH0KKyAgICAgICAgaW50IGZpbmFsX3NpemUgPSBiaXRfc2l6ZSAqIHBvd2VyX2V4cG9uZW50
OworICAgICAgICAvLyAxIGV4dHJhIGJpZ2l0IGZvciB0aGUgc2hpZnRpbmcsIGFuZCBvbmUgZm9y
IHJvdW5kZWQgZmluYWxfc2l6ZS4KKyAgICAgICAgRW5zdXJlQ2FwYWNpdHkoZmluYWxfc2l6ZSAv
IGtCaWdpdFNpemUgKyAyKTsKKyAgICAgICAgCisgICAgICAgIC8vIExlZnQgdG8gUmlnaHQgZXhw
b25lbnRpYXRpb24uCisgICAgICAgIGludCBtYXNrID0gMTsKKyAgICAgICAgd2hpbGUgKHBvd2Vy
X2V4cG9uZW50ID49IG1hc2spIG1hc2sgPDw9IDE7CisgICAgICAgIAorICAgICAgICAvLyBUaGUg
bWFzayBpcyBub3cgcG9pbnRpbmcgdG8gdGhlIGJpdCBhYm92ZSB0aGUgbW9zdCBzaWduaWZpY2Fu
dCAxLWJpdCBvZgorICAgICAgICAvLyBwb3dlcl9leHBvbmVudC4KKyAgICAgICAgLy8gR2V0IHJp
ZCBvZiBmaXJzdCAxLWJpdDsKKyAgICAgICAgbWFzayA+Pj0gMjsKKyAgICAgICAgdWludDY0X3Qg
dGhpc192YWx1ZSA9IGJhc2U7CisgICAgICAgIAorICAgICAgICBib29sIGRlbGF5ZWRfbXVsdGlw
bGljaWF0aW9uID0gZmFsc2U7CisgICAgICAgIGNvbnN0IHVpbnQ2NF90IG1heF8zMmJpdHMgPSAw
eEZGRkZGRkZGOworICAgICAgICB3aGlsZSAobWFzayAhPSAwICYmIHRoaXNfdmFsdWUgPD0gbWF4
XzMyYml0cykgeworICAgICAgICAgICAgdGhpc192YWx1ZSA9IHRoaXNfdmFsdWUgKiB0aGlzX3Zh
bHVlOworICAgICAgICAgICAgLy8gVmVyaWZ5IHRoYXQgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGlu
IHRoaXNfdmFsdWUgdG8gcGVyZm9ybSB0aGUKKyAgICAgICAgICAgIC8vIG11bHRpcGxpY2F0aW9u
LiAgVGhlIGZpcnN0IGJpdF9zaXplIGJpdHMgbXVzdCBiZSAwLgorICAgICAgICAgICAgaWYgKChw
b3dlcl9leHBvbmVudCAmIG1hc2spICE9IDApIHsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBi
YXNlX2JpdHNfbWFzayA9CisgICAgICAgICAgICAgICAgfigoc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KDEpIDw8ICg2NCAtIGJpdF9zaXplKSkgLSAxKTsKKyAgICAgICAgICAgICAgICBib29sIGhpZ2hf
Yml0c196ZXJvID0gKHRoaXNfdmFsdWUgJiBiYXNlX2JpdHNfbWFzaykgPT0gMDsKKyAgICAgICAg
ICAgICAgICBpZiAoaGlnaF9iaXRzX3plcm8pIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpc192
YWx1ZSAqPSBiYXNlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIGRlbGF5ZWRfbXVsdGlwbGljaWF0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBtYXNrID4+PSAxOworICAgICAgICB9CisgICAgICAg
IEFzc2lnblVJbnQ2NCh0aGlzX3ZhbHVlKTsKKyAgICAgICAgaWYgKGRlbGF5ZWRfbXVsdGlwbGlj
aWF0aW9uKSB7CisgICAgICAgICAgICBNdWx0aXBseUJ5VUludDMyKGJhc2UpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAvLyBOb3cgZG8gdGhlIHNhbWUgdGhpbmcgYXMgYSBiaWdudW0u
CisgICAgICAgIHdoaWxlIChtYXNrICE9IDApIHsKKyAgICAgICAgICAgIFNxdWFyZSgpOworICAg
ICAgICAgICAgaWYgKChwb3dlcl9leHBvbmVudCAmIG1hc2spICE9IDApIHsKKyAgICAgICAgICAg
ICAgICBNdWx0aXBseUJ5VUludDMyKGJhc2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
bWFzayA+Pj0gMTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQW5kIGZpbmFsbHkg
YWRkIHRoZSBzYXZlZCBzaGlmdHMuCisgICAgICAgIFNoaWZ0TGVmdChzaGlmdHMgKiBwb3dlcl9l
eHBvbmVudCk7CisgICAgfQorICAgIAorICAgIAorICAgIC8vIFByZWNvbmRpdGlvbjogdGhpcy9v
dGhlciA8IDE2Yml0LgorICAgIHVpbnQxNl90IEJpZ251bTo6RGl2aWRlTW9kdWxvSW50QmlnbnVt
KGNvbnN0IEJpZ251bSYgb3RoZXIpIHsKKyAgICAgICAgQVNTRVJUKElzQ2xhbXBlZCgpKTsKKyAg
ICAgICAgQVNTRVJUKG90aGVyLklzQ2xhbXBlZCgpKTsKKyAgICAgICAgQVNTRVJUKG90aGVyLnVz
ZWRfZGlnaXRzXyA+IDApOworICAgICAgICAKKyAgICAgICAgLy8gRWFzeSBjYXNlOiBpZiB3ZSBo
YXZlIGxlc3MgZGlnaXRzIHRoYW4gdGhlIGRpdmlzb3IgdGhhbiB0aGUgcmVzdWx0IGlzIDAuCisg
ICAgICAgIC8vIE5vdGU6IHRoaXMgaGFuZGxlcyB0aGUgY2FzZSB3aGVyZSB0aGlzID09IDAsIHRv
by4KKyAgICAgICAgaWYgKEJpZ2l0TGVuZ3RoKCkgPCBvdGhlci5CaWdpdExlbmd0aCgpKSB7Cisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQWxpZ24o
b3RoZXIpOworICAgICAgICAKKyAgICAgICAgdWludDE2X3QgcmVzdWx0ID0gMDsKKyAgICAgICAg
CisgICAgICAgIC8vIFN0YXJ0IGJ5IHJlbW92aW5nIG11bHRpcGxlcyBvZiAnb3RoZXInIHVudGls
IGJvdGggbnVtYmVycyBoYXZlIHRoZSBzYW1lCisgICAgICAgIC8vIG51bWJlciBvZiBkaWdpdHMu
CisgICAgICAgIHdoaWxlIChCaWdpdExlbmd0aCgpID4gb3RoZXIuQmlnaXRMZW5ndGgoKSkgewor
ICAgICAgICAgICAgLy8gVGhpcyBuYWl2ZSBhcHByb2FjaCBpcyBleHRyZW1lbHkgaW5lZmZpY2ll
bnQgaWYgdGhlIHRoaXMgZGl2aWRlZCBvdGhlcgorICAgICAgICAgICAgLy8gbWlnaHQgYmUgYmln
LiBUaGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGZvciBkb3VibGVUb1N0cmluZyB3aGVyZQor
ICAgICAgICAgICAgLy8gdGhlIHJlc3VsdCBzaG91bGQgYmUgc21hbGwgKGxlc3MgdGhhbiAxMCku
CisgICAgICAgICAgICBBU1NFUlQob3RoZXIuYmlnaXRzX1tvdGhlci51c2VkX2RpZ2l0c18gLSAx
XSA+PSAoKDEgPDwga0JpZ2l0U2l6ZSkgLyAxNikpOworICAgICAgICAgICAgLy8gUmVtb3ZlIHRo
ZSBtdWx0aXBsZXMgb2YgdGhlIGZpcnN0IGRpZ2l0LgorICAgICAgICAgICAgLy8gRXhhbXBsZSB0
aGlzID0gMjMgYW5kIG90aGVyIGVxdWFscyA5LiAtPiBSZW1vdmUgMiBtdWx0aXBsZXMuCisgICAg
ICAgICAgICByZXN1bHQgKz0gYmlnaXRzX1t1c2VkX2RpZ2l0c18gLSAxXTsKKyAgICAgICAgICAg
IFN1YnRyYWN0VGltZXMob3RoZXIsIGJpZ2l0c19bdXNlZF9kaWdpdHNfIC0gMV0pOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBBU1NFUlQoQmlnaXRMZW5ndGgoKSA9PSBvdGhlci5CaWdp
dExlbmd0aCgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIEJvdGggYmlnbnVtcyBhcmUgYXQgdGhl
IHNhbWUgbGVuZ3RoIG5vdy4KKyAgICAgICAgLy8gU2luY2Ugb3RoZXIgaGFzIG1vcmUgdGhhbiAw
IGRpZ2l0cyB3ZSBrbm93IHRoYXQgdGhlIGFjY2VzcyB0bworICAgICAgICAvLyBiaWdpdHNfW3Vz
ZWRfZGlnaXRzXyAtIDFdIGlzIHNhZmUuCisgICAgICAgIENodW5rIHRoaXNfYmlnaXQgPSBiaWdp
dHNfW3VzZWRfZGlnaXRzXyAtIDFdOworICAgICAgICBDaHVuayBvdGhlcl9iaWdpdCA9IG90aGVy
LmJpZ2l0c19bb3RoZXIudXNlZF9kaWdpdHNfIC0gMV07CisgICAgICAgIAorICAgICAgICBpZiAo
b3RoZXIudXNlZF9kaWdpdHNfID09IDEpIHsKKyAgICAgICAgICAgIC8vIFNob3J0Y3V0IGZvciBl
YXN5IChhbmQgY29tbW9uKSBjYXNlLgorICAgICAgICAgICAgaW50IHF1b3RpZW50ID0gdGhpc19i
aWdpdCAvIG90aGVyX2JpZ2l0OworICAgICAgICAgICAgYmlnaXRzX1t1c2VkX2RpZ2l0c18gLSAx
XSA9IHRoaXNfYmlnaXQgLSBvdGhlcl9iaWdpdCAqIHF1b3RpZW50OworICAgICAgICAgICAgcmVz
dWx0ICs9IHF1b3RpZW50OworICAgICAgICAgICAgQ2xhbXAoKTsKKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludCBkaXZpc2lvbl9lc3Rp
bWF0ZSA9IHRoaXNfYmlnaXQgLyAob3RoZXJfYmlnaXQgKyAxKTsKKyAgICAgICAgcmVzdWx0ICs9
IGRpdmlzaW9uX2VzdGltYXRlOworICAgICAgICBTdWJ0cmFjdFRpbWVzKG90aGVyLCBkaXZpc2lv
bl9lc3RpbWF0ZSk7CisgICAgICAgIAorICAgICAgICBpZiAob3RoZXJfYmlnaXQgKiAoZGl2aXNp
b25fZXN0aW1hdGUgKyAxKSA+IHRoaXNfYmlnaXQpIHsKKyAgICAgICAgICAgIC8vIE5vIG5lZWQg
dG8gZXZlbiB0cnkgdG8gc3VidHJhY3QuIEV2ZW4gaWYgb3RoZXIncyByZW1haW5pbmcgZGlnaXRz
IHdlcmUgMAorICAgICAgICAgICAgLy8gYW5vdGhlciBzdWJ0cmFjdGlvbiB3b3VsZCBiZSB0b28g
bXVjaC4KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHdoaWxlIChMZXNzRXF1YWwob3RoZXIsICp0aGlzKSkgeworICAgICAgICAgICAgU3Vi
dHJhY3RCaWdudW0ob3RoZXIpOworICAgICAgICAgICAgcmVzdWx0Kys7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgUz4KKyAgICBzdGF0aWMgaW50IFNpemVJbkhleENoYXJzKFMgbnVtYmVyKSB7CisgICAg
ICAgIEFTU0VSVChudW1iZXIgPiAwKTsKKyAgICAgICAgaW50IHJlc3VsdCA9IDA7CisgICAgICAg
IHdoaWxlIChudW1iZXIgIT0gMCkgeworICAgICAgICAgICAgbnVtYmVyID4+PSA0OworICAgICAg
ICAgICAgcmVzdWx0Kys7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisgICAgCisgICAgCisgICAgc3RhdGljIGNoYXIgSGV4Q2hhck9mVmFsdWUoaW50IHZhbHVlKSB7
CisgICAgICAgIEFTU0VSVCgwIDw9IHZhbHVlICYmIHZhbHVlIDw9IDE2KTsKKyAgICAgICAgaWYg
KHZhbHVlIDwgMTApIHJldHVybiB2YWx1ZSArICcwJzsKKyAgICAgICAgcmV0dXJuIHZhbHVlIC0g
MTAgKyAnQSc7CisgICAgfQorICAgIAorICAgIAorICAgIGJvb2wgQmlnbnVtOjpUb0hleFN0cmlu
ZyhjaGFyKiBidWZmZXIsIGludCBidWZmZXJfc2l6ZSkgY29uc3QgeworICAgICAgICBBU1NFUlQo
SXNDbGFtcGVkKCkpOworICAgICAgICAvLyBFYWNoIGJpZ2l0IG11c3QgYmUgcHJpbnRhYmxlIGFz
IHNlcGFyYXRlIGhleC1jaGFyYWN0ZXIuCisgICAgICAgIEFTU0VSVChrQmlnaXRTaXplICUgNCA9
PSAwKTsKKyAgICAgICAgY29uc3QgaW50IGtIZXhDaGFyc1BlckJpZ2l0ID0ga0JpZ2l0U2l6ZSAv
IDQ7CisgICAgICAgIAorICAgICAgICBpZiAodXNlZF9kaWdpdHNfID09IDApIHsKKyAgICAgICAg
ICAgIGlmIChidWZmZXJfc2l6ZSA8IDIpIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJ1ZmZl
clswXSA9ICcwJzsKKyAgICAgICAgICAgIGJ1ZmZlclsxXSA9ICdcMCc7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBhZGQgMSBmb3IgdGhlIHRlcm1p
bmF0aW5nICdcMCcgY2hhcmFjdGVyLgorICAgICAgICBpbnQgbmVlZGVkX2NoYXJzID0gKEJpZ2l0
TGVuZ3RoKCkgLSAxKSAqIGtIZXhDaGFyc1BlckJpZ2l0ICsKKyAgICAgICAgU2l6ZUluSGV4Q2hh
cnMoYmlnaXRzX1t1c2VkX2RpZ2l0c18gLSAxXSkgKyAxOworICAgICAgICBpZiAobmVlZGVkX2No
YXJzID4gYnVmZmVyX3NpemUpIHJldHVybiBmYWxzZTsKKyAgICAgICAgaW50IHN0cmluZ19pbmRl
eCA9IG5lZWRlZF9jaGFycyAtIDE7CisgICAgICAgIGJ1ZmZlcltzdHJpbmdfaW5kZXgtLV0gPSAn
XDAnOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4cG9uZW50XzsgKytpKSB7CisgICAg
ICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGtIZXhDaGFyc1BlckJpZ2l0OyArK2opIHsKKyAg
ICAgICAgICAgICAgICBidWZmZXJbc3RyaW5nX2luZGV4LS1dID0gJzAnOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdXNlZF9kaWdpdHNfIC0g
MTsgKytpKSB7CisgICAgICAgICAgICBDaHVuayBjdXJyZW50X2JpZ2l0ID0gYmlnaXRzX1tpXTsK
KyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwga0hleENoYXJzUGVyQmlnaXQ7ICsraikg
eworICAgICAgICAgICAgICAgIGJ1ZmZlcltzdHJpbmdfaW5kZXgtLV0gPSBIZXhDaGFyT2ZWYWx1
ZShjdXJyZW50X2JpZ2l0ICYgMHhGKTsKKyAgICAgICAgICAgICAgICBjdXJyZW50X2JpZ2l0ID4+
PSA0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIEFuZCBmaW5hbGx5IHRo
ZSBsYXN0IGJpZ2l0LgorICAgICAgICBDaHVuayBtb3N0X3NpZ25pZmljYW50X2JpZ2l0ID0gYmln
aXRzX1t1c2VkX2RpZ2l0c18gLSAxXTsKKyAgICAgICAgd2hpbGUgKG1vc3Rfc2lnbmlmaWNhbnRf
YmlnaXQgIT0gMCkgeworICAgICAgICAgICAgYnVmZmVyW3N0cmluZ19pbmRleC0tXSA9IEhleENo
YXJPZlZhbHVlKG1vc3Rfc2lnbmlmaWNhbnRfYmlnaXQgJiAweEYpOworICAgICAgICAgICAgbW9z
dF9zaWduaWZpY2FudF9iaWdpdCA+Pj0gNDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgCisgICAgCisgICAgQmlnbnVtOjpDaHVuayBCaWdudW06OkJpZ2l0QXQo
aW50IGluZGV4KSBjb25zdCB7CisgICAgICAgIGlmIChpbmRleCA+PSBCaWdpdExlbmd0aCgpKSBy
ZXR1cm4gMDsKKyAgICAgICAgaWYgKGluZGV4IDwgZXhwb25lbnRfKSByZXR1cm4gMDsKKyAgICAg
ICAgcmV0dXJuIGJpZ2l0c19baW5kZXggLSBleHBvbmVudF9dOworICAgIH0KKyAgICAKKyAgICAK
KyAgICBpbnQgQmlnbnVtOjpDb21wYXJlKGNvbnN0IEJpZ251bSYgYSwgY29uc3QgQmlnbnVtJiBi
KSB7CisgICAgICAgIEFTU0VSVChhLklzQ2xhbXBlZCgpKTsKKyAgICAgICAgQVNTRVJUKGIuSXND
bGFtcGVkKCkpOworICAgICAgICBpbnQgYmlnaXRfbGVuZ3RoX2EgPSBhLkJpZ2l0TGVuZ3RoKCk7
CisgICAgICAgIGludCBiaWdpdF9sZW5ndGhfYiA9IGIuQmlnaXRMZW5ndGgoKTsKKyAgICAgICAg
aWYgKGJpZ2l0X2xlbmd0aF9hIDwgYmlnaXRfbGVuZ3RoX2IpIHJldHVybiAtMTsKKyAgICAgICAg
aWYgKGJpZ2l0X2xlbmd0aF9hID4gYmlnaXRfbGVuZ3RoX2IpIHJldHVybiArMTsKKyAgICAgICAg
Zm9yIChpbnQgaSA9IGJpZ2l0X2xlbmd0aF9hIC0gMTsgaSA+PSBNaW4oYS5leHBvbmVudF8sIGIu
ZXhwb25lbnRfKTsgLS1pKSB7CisgICAgICAgICAgICBDaHVuayBiaWdpdF9hID0gYS5CaWdpdEF0
KGkpOworICAgICAgICAgICAgQ2h1bmsgYmlnaXRfYiA9IGIuQmlnaXRBdChpKTsKKyAgICAgICAg
ICAgIGlmIChiaWdpdF9hIDwgYmlnaXRfYikgcmV0dXJuIC0xOworICAgICAgICAgICAgaWYgKGJp
Z2l0X2EgPiBiaWdpdF9iKSByZXR1cm4gKzE7CisgICAgICAgICAgICAvLyBPdGhlcndpc2UgdGhl
eSBhcmUgZXF1YWwgdXAgdG8gdGhpcyBkaWdpdC4gVHJ5IHRoZSBuZXh0IGRpZ2l0LgorICAgICAg
ICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICAKKyAgICBpbnQgQmlnbnVt
OjpQbHVzQ29tcGFyZShjb25zdCBCaWdudW0mIGEsIGNvbnN0IEJpZ251bSYgYiwgY29uc3QgQmln
bnVtJiBjKSB7CisgICAgICAgIEFTU0VSVChhLklzQ2xhbXBlZCgpKTsKKyAgICAgICAgQVNTRVJU
KGIuSXNDbGFtcGVkKCkpOworICAgICAgICBBU1NFUlQoYy5Jc0NsYW1wZWQoKSk7CisgICAgICAg
IGlmIChhLkJpZ2l0TGVuZ3RoKCkgPCBiLkJpZ2l0TGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIHJl
dHVybiBQbHVzQ29tcGFyZShiLCBhLCBjKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYS5CaWdp
dExlbmd0aCgpICsgMSA8IGMuQmlnaXRMZW5ndGgoKSkgcmV0dXJuIC0xOworICAgICAgICBpZiAo
YS5CaWdpdExlbmd0aCgpID4gYy5CaWdpdExlbmd0aCgpKSByZXR1cm4gKzE7CisgICAgICAgIC8v
IFRoZSBleHBvbmVudCBlbmNvZGVzIDAtYmlnaXRzLiBTbyBpZiB0aGVyZSBhcmUgbW9yZSAwLWRp
Z2l0cyBpbiAnYScgdGhhbgorICAgICAgICAvLyAnYicgaGFzIGRpZ2l0cywgdGhlbiB0aGUgYmln
aXQtbGVuZ3RoIG9mICdhJysnYicgbXVzdCBiZSBlcXVhbCB0byB0aGUgb25lCisgICAgICAgIC8v
IG9mICdhJy4KKyAgICAgICAgaWYgKGEuZXhwb25lbnRfID49IGIuQmlnaXRMZW5ndGgoKSAmJiBh
LkJpZ2l0TGVuZ3RoKCkgPCBjLkJpZ2l0TGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIHJldHVybiAt
MTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQ2h1bmsgYm9ycm93ID0gMDsKKyAgICAg
ICAgLy8gU3RhcnRpbmcgYXQgbWluX2V4cG9uZW50IGFsbCBkaWdpdHMgYXJlID09IDAuIFNvIG5v
IG5lZWQgdG8gY29tcGFyZSB0aGVtLgorICAgICAgICBpbnQgbWluX2V4cG9uZW50ID0gTWluKE1p
bihhLmV4cG9uZW50XywgYi5leHBvbmVudF8pLCBjLmV4cG9uZW50Xyk7CisgICAgICAgIGZvciAo
aW50IGkgPSBjLkJpZ2l0TGVuZ3RoKCkgLSAxOyBpID49IG1pbl9leHBvbmVudDsgLS1pKSB7Cisg
ICAgICAgICAgICBDaHVuayBjaHVua19hID0gYS5CaWdpdEF0KGkpOworICAgICAgICAgICAgQ2h1
bmsgY2h1bmtfYiA9IGIuQmlnaXRBdChpKTsKKyAgICAgICAgICAgIENodW5rIGNodW5rX2MgPSBj
LkJpZ2l0QXQoaSk7CisgICAgICAgICAgICBDaHVuayBzdW0gPSBjaHVua19hICsgY2h1bmtfYjsK
KyAgICAgICAgICAgIGlmIChzdW0gPiBjaHVua19jICsgYm9ycm93KSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuICsxOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBib3Jy
b3cgPSBjaHVua19jICsgYm9ycm93IC0gc3VtOworICAgICAgICAgICAgICAgIGlmIChib3Jyb3cg
PiAxKSByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgYm9ycm93IDw8PSBrQmlnaXRTaXplOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChib3Jyb3cgPT0gMCkgcmV0dXJu
IDA7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdu
dW06OkNsYW1wKCkgeworICAgICAgICB3aGlsZSAodXNlZF9kaWdpdHNfID4gMCAmJiBiaWdpdHNf
W3VzZWRfZGlnaXRzXyAtIDFdID09IDApIHsKKyAgICAgICAgICAgIHVzZWRfZGlnaXRzXy0tOwor
ICAgICAgICB9CisgICAgICAgIGlmICh1c2VkX2RpZ2l0c18gPT0gMCkgeworICAgICAgICAgICAg
Ly8gWmVyby4KKyAgICAgICAgICAgIGV4cG9uZW50XyA9IDA7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgCisgICAgYm9vbCBCaWdudW06OklzQ2xhbXBlZCgpIGNvbnN0IHsKKyAgICAgICAg
cmV0dXJuIHVzZWRfZGlnaXRzXyA9PSAwIHx8IGJpZ2l0c19bdXNlZF9kaWdpdHNfIC0gMV0gIT0g
MDsKKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06Olplcm8oKSB7CisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgdXNlZF9kaWdpdHNfOyArK2kpIHsKKyAgICAgICAgICAgIGJp
Z2l0c19baV0gPSAwOworICAgICAgICB9CisgICAgICAgIHVzZWRfZGlnaXRzXyA9IDA7CisgICAg
ICAgIGV4cG9uZW50XyA9IDA7CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpB
bGlnbihjb25zdCBCaWdudW0mIG90aGVyKSB7CisgICAgICAgIGlmIChleHBvbmVudF8gPiBvdGhl
ci5leHBvbmVudF8pIHsKKyAgICAgICAgICAgIC8vIElmICJYIiByZXByZXNlbnRzIGEgImhpZGRl
biIgZGlnaXQgKGJ5IHRoZSBleHBvbmVudCkgdGhlbiB3ZSBhcmUgaW4gdGhlCisgICAgICAgICAg
ICAvLyBmb2xsb3dpbmcgY2FzZSAoYSA9PSB0aGlzLCBiID09IG90aGVyKToKKyAgICAgICAgICAg
IC8vIGE6ICBhYWFhYWFYWFhYICAgb3IgYTogICBhYWFhYVhYWAorICAgICAgICAgICAgLy8gYjog
ICAgIGJiYmJiYlggICAgICBiOiBiYmJiYmJiYlhYCisgICAgICAgICAgICAvLyBXZSByZXBsYWNl
IHNvbWUgb2YgdGhlIGhpZGRlbiBkaWdpdHMgKFgpIG9mIGEgd2l0aCAwIGRpZ2l0cy4KKyAgICAg
ICAgICAgIC8vIGE6ICBhYWFhYWEwMDBYICAgb3IgYTogICBhYWFhYTBYWAorICAgICAgICAgICAg
aW50IHplcm9fZGlnaXRzID0gZXhwb25lbnRfIC0gb3RoZXIuZXhwb25lbnRfOworICAgICAgICAg
ICAgRW5zdXJlQ2FwYWNpdHkodXNlZF9kaWdpdHNfICsgemVyb19kaWdpdHMpOworICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IHVzZWRfZGlnaXRzXyAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAg
ICAgICAgICAgYmlnaXRzX1tpICsgemVyb19kaWdpdHNdID0gYmlnaXRzX1tpXTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgemVyb19kaWdpdHM7ICsraSkg
eworICAgICAgICAgICAgICAgIGJpZ2l0c19baV0gPSAwOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdXNlZF9kaWdpdHNfICs9IHplcm9fZGlnaXRzOworICAgICAgICAgICAgZXhwb25lbnRf
IC09IHplcm9fZGlnaXRzOworICAgICAgICAgICAgQVNTRVJUKHVzZWRfZGlnaXRzXyA+PSAwKTsK
KyAgICAgICAgICAgIEFTU0VSVChleHBvbmVudF8gPj0gMCk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgCisgICAgdm9pZCBCaWdudW06OkJpZ2l0c1NoaWZ0TGVmdChpbnQgc2hpZnRfYW1v
dW50KSB7CisgICAgICAgIEFTU0VSVChzaGlmdF9hbW91bnQgPCBrQmlnaXRTaXplKTsKKyAgICAg
ICAgQVNTRVJUKHNoaWZ0X2Ftb3VudCA+PSAwKTsKKyAgICAgICAgQ2h1bmsgY2FycnkgPSAwOwor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHVzZWRfZGlnaXRzXzsgKytpKSB7CisgICAgICAg
ICAgICBDaHVuayBuZXdfY2FycnkgPSBiaWdpdHNfW2ldID4+IChrQmlnaXRTaXplIC0gc2hpZnRf
YW1vdW50KTsKKyAgICAgICAgICAgIGJpZ2l0c19baV0gPSAoKGJpZ2l0c19baV0gPDwgc2hpZnRf
YW1vdW50KSArIGNhcnJ5KSAmIGtCaWdpdE1hc2s7CisgICAgICAgICAgICBjYXJyeSA9IG5ld19j
YXJyeTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2FycnkgIT0gMCkgeworICAgICAgICAgICAg
YmlnaXRzX1t1c2VkX2RpZ2l0c19dID0gY2Fycnk7CisgICAgICAgICAgICB1c2VkX2RpZ2l0c18r
KzsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICB2b2lkIEJpZ251bTo6U3VidHJh
Y3RUaW1lcyhjb25zdCBCaWdudW0mIG90aGVyLCBpbnQgZmFjdG9yKSB7CisgICAgICAgIEFTU0VS
VChleHBvbmVudF8gPD0gb3RoZXIuZXhwb25lbnRfKTsKKyAgICAgICAgaWYgKGZhY3RvciA8IDMp
IHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmFjdG9yOyArK2kpIHsKKyAgICAg
ICAgICAgICAgICBTdWJ0cmFjdEJpZ251bShvdGhlcik7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgQ2h1bmsgYm9ycm93ID0gMDsKKyAgICAg
ICAgaW50IGV4cG9uZW50X2RpZmYgPSBvdGhlci5leHBvbmVudF8gLSBleHBvbmVudF87CisgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3RoZXIudXNlZF9kaWdpdHNfOyArK2kpIHsKKyAgICAg
ICAgICAgIERvdWJsZUNodW5rIHByb2R1Y3QgPSBzdGF0aWNfY2FzdDxEb3VibGVDaHVuaz4oZmFj
dG9yKSAqIG90aGVyLmJpZ2l0c19baV07CisgICAgICAgICAgICBEb3VibGVDaHVuayByZW1vdmUg
PSBib3Jyb3cgKyBwcm9kdWN0OworICAgICAgICAgICAgQ2h1bmsgZGlmZmVyZW5jZSA9IGJpZ2l0
c19baSArIGV4cG9uZW50X2RpZmZdIC0gKHJlbW92ZSAmIGtCaWdpdE1hc2spOworICAgICAgICAg
ICAgYmlnaXRzX1tpICsgZXhwb25lbnRfZGlmZl0gPSBkaWZmZXJlbmNlICYga0JpZ2l0TWFzazsK
KyAgICAgICAgICAgIGJvcnJvdyA9IHN0YXRpY19jYXN0PENodW5rPigoZGlmZmVyZW5jZSA+PiAo
a0NodW5rU2l6ZSAtIDEpKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKHJlbW92ZSA+PiBrQmlnaXRTaXplKSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQg
aSA9IG90aGVyLnVzZWRfZGlnaXRzXyArIGV4cG9uZW50X2RpZmY7IGkgPCB1c2VkX2RpZ2l0c187
ICsraSkgeworICAgICAgICAgICAgaWYgKGJvcnJvdyA9PSAwKSByZXR1cm47CisgICAgICAgICAg
ICBDaHVuayBkaWZmZXJlbmNlID0gYmlnaXRzX1tpXSAtIGJvcnJvdzsKKyAgICAgICAgICAgIGJp
Z2l0c19baV0gPSBkaWZmZXJlbmNlICYga0JpZ2l0TWFzazsKKyAgICAgICAgICAgIGJvcnJvdyA9
IGRpZmZlcmVuY2UgPj4gKGtDaHVua1NpemUgLSAxKTsKKyAgICAgICAgICAgICsraTsKKyAgICAg
ICAgfQorICAgICAgICBDbGFtcCgpOworICAgIH0KKyAgICAKKyAgICAKK30gIC8vIG5hbWVzcGFj
ZSBkb3VibGVfY29udmVyc2lvbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9kdG9hL2JpZ251bS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjg1NjQyMTBiMmY4NjQ4NWE2ZDI2YjlhNjliN2UxNWNlNTdmYWQwMzAKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvYmlnbnVtLmgK
QEAgLTAsMCArMSwxNDEgQEAKKy8vIENvcHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
Ky8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8g
ICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8v
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmbmRlZiBE
T1VCTEVfQ09OVkVSU0lPTl9CSUdOVU1fSF8KKyNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05fQklH
TlVNX0hfCisKKyNpbmNsdWRlICJ1dGlscy5oIgorCituYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNp
b24geworICAgIAorICAgIGNsYXNzIEJpZ251bSB7CisgICAgcHVibGljOgorICAgICAgICAvLyAz
NTg0ID0gMTI4ICogMjguIFdlIGNhbiByZXByZXNlbnQgMl4zNTg0ID4gMTBeMTAwMCBhY2N1cmF0
ZWx5LgorICAgICAgICAvLyBUaGlzIGJpZ251bSBjYW4gZW5jb2RlIG11Y2ggYmlnZ2VyIG51bWJl
cnMsIHNpbmNlIGl0IGNvbnRhaW5zIGFuCisgICAgICAgIC8vIGV4cG9uZW50LgorICAgICAgICBz
dGF0aWMgY29uc3QgaW50IGtNYXhTaWduaWZpY2FudEJpdHMgPSAzNTg0OworICAgICAgICAKKyAg
ICAgICAgQmlnbnVtKCk7CisgICAgICAgIHZvaWQgQXNzaWduVUludDE2KHVpbnQxNl90IHZhbHVl
KTsKKyAgICAgICAgdm9pZCBBc3NpZ25VSW50NjQodWludDY0X3QgdmFsdWUpOworICAgICAgICB2
b2lkIEFzc2lnbkJpZ251bShjb25zdCBCaWdudW0mIG90aGVyKTsKKyAgICAgICAgCisgICAgICAg
IHZvaWQgQXNzaWduRGVjaW1hbFN0cmluZyhWZWN0b3I8Y29uc3QgY2hhcj4gdmFsdWUpOworICAg
ICAgICB2b2lkIEFzc2lnbkhleFN0cmluZyhWZWN0b3I8Y29uc3QgY2hhcj4gdmFsdWUpOworICAg
ICAgICAKKyAgICAgICAgdm9pZCBBc3NpZ25Qb3dlclVJbnQxNih1aW50MTZfdCBiYXNlLCBpbnQg
ZXhwb25lbnQpOworICAgICAgICAKKyAgICAgICAgdm9pZCBBZGRVSW50MTYodWludDE2X3Qgb3Bl
cmFuZCk7CisgICAgICAgIHZvaWQgQWRkVUludDY0KHVpbnQ2NF90IG9wZXJhbmQpOworICAgICAg
ICB2b2lkIEFkZEJpZ251bShjb25zdCBCaWdudW0mIG90aGVyKTsKKyAgICAgICAgLy8gUHJlY29u
ZGl0aW9uOiB0aGlzID49IG90aGVyLgorICAgICAgICB2b2lkIFN1YnRyYWN0QmlnbnVtKGNvbnN0
IEJpZ251bSYgb3RoZXIpOworICAgICAgICAKKyAgICAgICAgdm9pZCBTcXVhcmUoKTsKKyAgICAg
ICAgdm9pZCBTaGlmdExlZnQoaW50IHNoaWZ0X2Ftb3VudCk7CisgICAgICAgIHZvaWQgTXVsdGlw
bHlCeVVJbnQzMih1aW50MzJfdCBmYWN0b3IpOworICAgICAgICB2b2lkIE11bHRpcGx5QnlVSW50
NjQodWludDY0X3QgZmFjdG9yKTsKKyAgICAgICAgdm9pZCBNdWx0aXBseUJ5UG93ZXJPZlRlbihp
bnQgZXhwb25lbnQpOworICAgICAgICB2b2lkIFRpbWVzMTAoKSB7IHJldHVybiBNdWx0aXBseUJ5
VUludDMyKDEwKTsgfQorICAgICAgICAvLyBQc2V1ZG9jb2RlOgorICAgICAgICAvLyAgaW50IHJl
c3VsdCA9IHRoaXMgLyBvdGhlcjsKKyAgICAgICAgLy8gIHRoaXMgPSB0aGlzICUgb3RoZXI7Cisg
ICAgICAgIC8vIEluIHRoZSB3b3JzdCBjYXNlIHRoaXMgZnVuY3Rpb24gaXMgaW4gTyh0aGlzL290
aGVyKS4KKyAgICAgICAgdWludDE2X3QgRGl2aWRlTW9kdWxvSW50QmlnbnVtKGNvbnN0IEJpZ251
bSYgb3RoZXIpOworICAgICAgICAKKyAgICAgICAgYm9vbCBUb0hleFN0cmluZyhjaGFyKiBidWZm
ZXIsIGludCBidWZmZXJfc2l6ZSkgY29uc3Q7CisgICAgICAgIAorICAgICAgICBzdGF0aWMgaW50
IENvbXBhcmUoY29uc3QgQmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIpOworICAgICAgICBzdGF0
aWMgYm9vbCBFcXVhbChjb25zdCBCaWdudW0mIGEsIGNvbnN0IEJpZ251bSYgYikgeworICAgICAg
ICAgICAgcmV0dXJuIENvbXBhcmUoYSwgYikgPT0gMDsKKyAgICAgICAgfQorICAgICAgICBzdGF0
aWMgYm9vbCBMZXNzRXF1YWwoY29uc3QgQmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIpIHsKKyAg
ICAgICAgICAgIHJldHVybiBDb21wYXJlKGEsIGIpIDw9IDA7CisgICAgICAgIH0KKyAgICAgICAg
c3RhdGljIGJvb2wgTGVzcyhjb25zdCBCaWdudW0mIGEsIGNvbnN0IEJpZ251bSYgYikgeworICAg
ICAgICAgICAgcmV0dXJuIENvbXBhcmUoYSwgYikgPCAwOworICAgICAgICB9CisgICAgICAgIC8v
IFJldHVybnMgQ29tcGFyZShhICsgYiwgYyk7CisgICAgICAgIHN0YXRpYyBpbnQgUGx1c0NvbXBh
cmUoY29uc3QgQmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIsIGNvbnN0IEJpZ251bSYgYyk7Cisg
ICAgICAgIC8vIFJldHVybnMgYSArIGIgPT0gYworICAgICAgICBzdGF0aWMgYm9vbCBQbHVzRXF1
YWwoY29uc3QgQmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIsIGNvbnN0IEJpZ251bSYgYykgewor
ICAgICAgICAgICAgcmV0dXJuIFBsdXNDb21wYXJlKGEsIGIsIGMpID09IDA7CisgICAgICAgIH0K
KyAgICAgICAgLy8gUmV0dXJucyBhICsgYiA8PSBjCisgICAgICAgIHN0YXRpYyBib29sIFBsdXNM
ZXNzRXF1YWwoY29uc3QgQmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIsIGNvbnN0IEJpZ251bSYg
YykgeworICAgICAgICAgICAgcmV0dXJuIFBsdXNDb21wYXJlKGEsIGIsIGMpIDw9IDA7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gUmV0dXJucyBhICsgYiA8IGMKKyAgICAgICAgc3RhdGljIGJvb2wg
UGx1c0xlc3MoY29uc3QgQmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIsIGNvbnN0IEJpZ251bSYg
YykgeworICAgICAgICAgICAgcmV0dXJuIFBsdXNDb21wYXJlKGEsIGIsIGMpIDwgMDsKKyAgICAg
ICAgfQorICAgIHByaXZhdGU6CisgICAgICAgIHR5cGVkZWYgdWludDMyX3QgQ2h1bms7CisgICAg
ICAgIHR5cGVkZWYgdWludDY0X3QgRG91YmxlQ2h1bms7CisgICAgICAgIAorICAgICAgICBzdGF0
aWMgY29uc3QgaW50IGtDaHVua1NpemUgPSBzaXplb2YoQ2h1bmspICogODsKKyAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBrRG91YmxlQ2h1bmtTaXplID0gc2l6ZW9mKERvdWJsZUNodW5rKSAqIDg7
CisgICAgICAgIC8vIFdpdGggYmlnaXQgc2l6ZSBvZiAyOCB3ZSBsb29zZSBzb21lIGJpdHMsIGJ1
dCBhIGRvdWJsZSBzdGlsbCBmaXRzIGVhc2lseQorICAgICAgICAvLyBpbnRvIHR3byBjaHVua3Ms
IGFuZCBtb3JlIGltcG9ydGFudGx5IHdlIGNhbiB1c2UgdGhlIENvbWJhIG11bHRpcGxpY2F0aW9u
LgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtCaWdpdFNpemUgPSAyODsKKyAgICAgICAgc3Rh
dGljIGNvbnN0IENodW5rIGtCaWdpdE1hc2sgPSAoMSA8PCBrQmlnaXRTaXplKSAtIDE7CisgICAg
ICAgIC8vIEV2ZXJ5IGluc3RhbmNlIGFsbG9jYXRlcyBrQmlnaXRMZW5ndGggY2h1bmtzIG9uIHRo
ZSBzdGFjay4gQmlnbnVtcyBjYW5ub3QKKyAgICAgICAgLy8gZ3Jvdy4gVGhlcmUgYXJlIG5vIGNo
ZWNrcyBpZiB0aGUgc3RhY2stYWxsb2NhdGVkIHNwYWNlIGlzIHN1ZmZpY2llbnQuCisgICAgICAg
IHN0YXRpYyBjb25zdCBpbnQga0JpZ2l0Q2FwYWNpdHkgPSBrTWF4U2lnbmlmaWNhbnRCaXRzIC8g
a0JpZ2l0U2l6ZTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgRW5zdXJlQ2FwYWNpdHkoaW50IHNp
emUpIHsKKyAgICAgICAgICAgIGlmIChzaXplID4ga0JpZ2l0Q2FwYWNpdHkpIHsKKyAgICAgICAg
ICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHZvaWQgQWxpZ24oY29uc3QgQmlnbnVtJiBvdGhlcik7CisgICAgICAgIHZvaWQgQ2xhbXAoKTsK
KyAgICAgICAgYm9vbCBJc0NsYW1wZWQoKSBjb25zdDsKKyAgICAgICAgdm9pZCBaZXJvKCk7Cisg
ICAgICAgIC8vIFJlcXVpcmVzIHRoaXMgdG8gaGF2ZSBlbm91Z2ggY2FwYWNpdHkgKG5vIHRlc3Rz
IGRvbmUpLgorICAgICAgICAvLyBVcGRhdGVzIHVzZWRfZGlnaXRzXyBpZiBuZWNlc3NhcnkuCisg
ICAgICAgIC8vIHNoaWZ0X2Ftb3VudCBtdXN0IGJlIDwga0JpZ2l0U2l6ZS4KKyAgICAgICAgdm9p
ZCBCaWdpdHNTaGlmdExlZnQoaW50IHNoaWZ0X2Ftb3VudCk7CisgICAgICAgIC8vIEJpZ2l0TGVu
Z3RoIGluY2x1ZGVzIHRoZSAiaGlkZGVuIiBkaWdpdHMgZW5jb2RlZCBpbiB0aGUgZXhwb25lbnQu
CisgICAgICAgIGludCBCaWdpdExlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIHVzZWRfZGlnaXRzXyAr
IGV4cG9uZW50XzsgfQorICAgICAgICBDaHVuayBCaWdpdEF0KGludCBpbmRleCkgY29uc3Q7Cisg
ICAgICAgIHZvaWQgU3VidHJhY3RUaW1lcyhjb25zdCBCaWdudW0mIG90aGVyLCBpbnQgZmFjdG9y
KTsKKyAgICAgICAgCisgICAgICAgIENodW5rIGJpZ2l0c19idWZmZXJfW2tCaWdpdENhcGFjaXR5
XTsKKyAgICAgICAgLy8gQSB2ZWN0b3IgYmFja2VkIGJ5IGJpZ2l0c19idWZmZXJfLiBUaGlzIHdh
eSBhY2Nlc3NlcyB0byB0aGUgYXJyYXkgYXJlCisgICAgICAgIC8vIGNoZWNrZWQgZm9yIG91dC1v
Zi1ib3VuZHMgZXJyb3JzLgorICAgICAgICBWZWN0b3I8Q2h1bms+IGJpZ2l0c187CisgICAgICAg
IGludCB1c2VkX2RpZ2l0c187CisgICAgICAgIC8vIFRoZSBCaWdudW0ncyB2YWx1ZSBlcXVhbHMg
dmFsdWUoYmlnaXRzXykgKiAyXihleHBvbmVudF8gKiBrQmlnaXRTaXplKS4KKyAgICAgICAgaW50
IGV4cG9uZW50XzsKKyAgICAgICAgCisgICAgICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihC
aWdudW0pOworICAgIH07CisgICAgCit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24K
KworI2VuZGlmICAvLyBET1VCTEVfQ09OVkVSU0lPTl9CSUdOVU1fSF8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmNjIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2NhY2hlZC1wb3dlcnMuY2MKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2YzY2I4
Y2M4ZjQzNGUxOGJlM2I3MDU2NjFjY2Q1Y2Y1NDliNjIzZQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmNjCkBAIC0wLDAgKzEs
MTg1IEBACisvLyBDb3B5cmlnaHQgMjAwNi0yMDA4IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1l
dDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8g
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8g
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2luY2x1ZGUgPHN0ZGFy
Zy5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUg
IlVudXNlZFBhcmFtLmgiCisjaW5jbHVkZSAidXRpbHMuaCIKKyNpbmNsdWRlICJjYWNoZWQtcG93
ZXJzLmgiCisKK25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgc3RydWN0
IENhY2hlZFBvd2VyIHsKKyAgICAgICAgdWludDY0X3Qgc2lnbmlmaWNhbmQ7CisgICAgICAgIGlu
dDE2X3QgYmluYXJ5X2V4cG9uZW50OworICAgICAgICBpbnQxNl90IGRlY2ltYWxfZXhwb25lbnQ7
CisgICAgfTsKKyAgICAKKyAgICBzdGF0aWMgaW50IGtDYWNoZWRQb3dlcnNMZW5ndGggPSAxOwor
ICAgIHN0YXRpYyBpbnQga0NhY2hlZFBvd2Vyc09mZnNldCA9IDE7CisgICAgc3RhdGljIGNvbnN0
IGRvdWJsZSBrRF8xX0xPRzJfMTAgPSAwLjMwMTAyOTk5NTY2Mzk4MTE0OyAgLy8gIDEgLyBsZygx
MCkKKyAgICBzdGF0aWMgQ2FjaGVkUG93ZXIqIGtDYWNoZWRQb3dlcnMgPSAwOworICAgIAorICAg
IGludCBQb3dlcnNPZlRlbkNhY2hlOjprRGVjaW1hbEV4cG9uZW50RGlzdGFuY2UgPSAxOworICAg
IGludCBQb3dlcnNPZlRlbkNhY2hlOjprTWluRGVjaW1hbEV4cG9uZW50ID0gMTsKKyAgICBpbnQg
UG93ZXJzT2ZUZW5DYWNoZTo6a01heERlY2ltYWxFeHBvbmVudCA9IDE7CisgICAgCisgICAgdm9p
ZCBpbml0aWFsaXplKCkgeworICAgICAgICBzdGF0aWMgQ2FjaGVkUG93ZXIgY2FjaGVkUG93ZXJz
W10gPSB7CisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhmYThmZDVhMCwgMDgxYzAyODgp
LCAtMTIyMCwgLTM0OH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhiYWFlZTE3Ziwg
YTIzZWJmNzYpLCAtMTE5MywgLTM0MH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg4
YjE2ZmIyMCwgMzA1NWFjNzYpLCAtMTE2NiwgLTMzMn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQ
QVJUX0MoMHhjZjQyODk0YSwgNWRjZTM1ZWEpLCAtMTE0MCwgLTMyNH0sCisgICAgICAgICAgICB7
VUlOVDY0XzJQQVJUX0MoMHg5YTZiYjBhYSwgNTU2NTNiMmQpLCAtMTExMywgLTMxNn0sCisgICAg
ICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhlNjFhY2YwMywgM2QxYTQ1ZGYpLCAtMTA4NywgLTMw
OH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhhYjcwZmUxNywgYzc5YWM2Y2EpLCAt
MTA2MCwgLTMwMH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhmZjc3YjFmYywgYmVi
Y2RjNGYpLCAtMTAzNCwgLTI5Mn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhiZTU2
OTFlZiwgNDE2YmQ2MGMpLCAtMTAwNywgLTI4NH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJU
X0MoMHg4ZGQwMWZhZCwgOTA3ZmZjM2MpLCAtOTgwLCAtMjc2fSwKKyAgICAgICAgICAgIHtVSU5U
NjRfMlBBUlRfQygweGQzNTE1YzI4LCAzMTU1OWE4MyksIC05NTQsIC0yNjh9LAorICAgICAgICAg
ICAge1VJTlQ2NF8yUEFSVF9DKDB4OWQ3MWFjOGYsIGFkYTZjOWI1KSwgLTkyNywgLTI2MH0sCisg
ICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhlYTljMjI3NywgMjNlZThiY2IpLCAtOTAxLCAt
MjUyfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGFlY2M0OTkxLCA0MDc4NTM2ZCks
IC04NzQsIC0yNDR9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ODIzYzEyNzksIDVk
YjZjZTU3KSwgLTg0NywgLTIzNn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhjMjEw
OTQzNiwgNGRmYjU2MzcpLCAtODIxLCAtMjI4fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRf
QygweDkwOTZlYTZmLCAzODQ4OTg0ZiksIC03OTQsIC0yMjB9LAorICAgICAgICAgICAge1VJTlQ2
NF8yUEFSVF9DKDB4ZDc3NDg1Y2IsIDI1ODIzYWM3KSwgLTc2OCwgLTIxMn0sCisgICAgICAgICAg
ICB7VUlOVDY0XzJQQVJUX0MoMHhhMDg2Y2ZjZCwgOTdiZjk3ZjQpLCAtNzQxLCAtMjA0fSwKKyAg
ICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGVmMzQwYTk4LCAxNzJhYWNlNSksIC03MTUsIC0x
OTZ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YjIzODY3ZmIsIDJhMzViMjhlKSwg
LTY4OCwgLTE4OH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg4NGM4ZDRkZiwgZDJj
NjNmM2IpLCAtNjYxLCAtMTgwfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGM1ZGQ0
NDI3LCAxYWQzY2RiYSksIC02MzUsIC0xNzJ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9D
KDB4OTM2YjlmY2UsIGJiMjVjOTk2KSwgLTYwOCwgLTE2NH0sCisgICAgICAgICAgICB7VUlOVDY0
XzJQQVJUX0MoMHhkYmFjNmMyNCwgN2Q2MmE1ODQpLCAtNTgyLCAtMTU2fSwKKyAgICAgICAgICAg
IHtVSU5UNjRfMlBBUlRfQygweGEzYWI2NjU4LCAwZDVmZGFmNiksIC01NTUsIC0xNDh9LAorICAg
ICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZjNlMmY4OTMsIGRlYzNmMTI2KSwgLTUyOSwgLTE0
MH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhiNWI1YWRhOCwgYWFmZjgwYjgpLCAt
NTAyLCAtMTMyfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDg3NjI1ZjA1LCA2Yzdj
NGE4YiksIC00NzUsIC0xMjR9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YzliY2Zm
NjAsIDM0YzEzMDUzKSwgLTQ0OSwgLTExNn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0Mo
MHg5NjRlODU4YywgOTFiYTI2NTUpLCAtNDIyLCAtMTA4fSwKKyAgICAgICAgICAgIHtVSU5UNjRf
MlBBUlRfQygweGRmZjk3NzI0LCA3MDI5N2ViZCksIC0zOTYsIC0xMDB9LAorICAgICAgICAgICAg
e1VJTlQ2NF8yUEFSVF9DKDB4YTZkZmJkOWYsIGI4ZTViODhmKSwgLTM2OSwgLTkyfSwKKyAgICAg
ICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGY4YTk1ZmNmLCA4ODc0N2Q5NCksIC0zNDMsIC04NH0s
CisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhiOTQ0NzA5MywgOGZhODliY2YpLCAtMzE2
LCAtNzZ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4OGEwOGYwZjgsIGJmMGYxNTZi
KSwgLTI4OSwgLTY4fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGNkYjAyNTU1LCA2
NTMxMzFiNiksIC0yNjMsIC02MH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg5OTNm
ZTJjNiwgZDA3YjdmYWMpLCAtMjM2LCAtNTJ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9D
KDB4ZTQ1YzEwYzQsIDJhMmIzYjA2KSwgLTIxMCwgLTQ0fSwKKyAgICAgICAgICAgIHtVSU5UNjRf
MlBBUlRfQygweGFhMjQyNDk5LCA2OTczOTJkMyksIC0xODMsIC0zNn0sCisgICAgICAgICAgICB7
VUlOVDY0XzJQQVJUX0MoMHhmZDg3YjVmMiwgODMwMGNhMGUpLCAtMTU3LCAtMjh9LAorICAgICAg
ICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YmNlNTA4NjQsIDkyMTExYWViKSwgLTEzMCwgLTIwfSwK
KyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDhjYmNjYzA5LCA2ZjUwODhjYyksIC0xMDMs
IC0xMn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhkMWI3MTc1OCwgZTIxOTY1MmMp
LCAtNzcsIC00fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDljNDAwMDAwLCAwMDAw
MDAwMCksIC01MCwgNH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhlOGQ0YTUxMCwg
MDAwMDAwMDApLCAtMjQsIDEyfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGFkNzhl
YmM1LCBhYzYyMDAwMCksIDMsIDIwfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDgx
M2YzOTc4LCBmODk0MDk4NCksIDMwLCAyOH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0Mo
MHhjMDk3Y2U3YiwgYzkwNzE1YjMpLCA1NiwgMzZ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFS
VF9DKDB4OGY3ZTMyY2UsIDdiZWE1YzcwKSwgODMsIDQ0fSwKKyAgICAgICAgICAgIHtVSU5UNjRf
MlBBUlRfQygweGQ1ZDIzOGE0LCBhYmU5ODA2OCksIDEwOSwgNTJ9LAorICAgICAgICAgICAge1VJ
TlQ2NF8yUEFSVF9DKDB4OWY0ZjI3MjYsIDE3OWEyMjQ1KSwgMTM2LCA2MH0sCisgICAgICAgICAg
ICB7VUlOVDY0XzJQQVJUX0MoMHhlZDYzYTIzMSwgZDRjNGZiMjcpLCAxNjIsIDY4fSwKKyAgICAg
ICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGIwZGU2NTM4LCA4Y2M4YWRhOCksIDE4OSwgNzZ9LAor
ICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ODNjNzA4OGUsIDFhYWI2NWRiKSwgMjE2LCA4
NH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhjNDVkMWRmOSwgNDI3MTFkOWEpLCAy
NDIsIDkyfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDkyNGQ2OTJjLCBhNjFiZTc1
OCksIDI2OSwgMTAwfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGRhMDFlZTY0LCAx
YTcwOGRlYSksIDI5NSwgMTA4fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGEyNmRh
Mzk5LCA5YWVmNzc0YSksIDMyMiwgMTE2fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygw
eGYyMDk3ODdiLCBiNDdkNmI4NSksIDM0OCwgMTI0fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBB
UlRfQygweGI0NTRlNGExLCA3OWRkMTg3NyksIDM3NSwgMTMyfSwKKyAgICAgICAgICAgIHtVSU5U
NjRfMlBBUlRfQygweDg2NWI4NjkyLCA1YjliYzVjMiksIDQwMiwgMTQwfSwKKyAgICAgICAgICAg
IHtVSU5UNjRfMlBBUlRfQygweGM4MzU1M2M1LCBjODk2NWQzZCksIDQyOCwgMTQ4fSwKKyAgICAg
ICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDk1MmFiNDVjLCBmYTk3YTBiMyksIDQ1NSwgMTU2fSwK
KyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGRlNDY5ZmJkLCA5OWEwNWZlMyksIDQ4MSwg
MTY0fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGE1OWJjMjM0LCBkYjM5OGMyNSks
IDUwOCwgMTcyfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGY2YzY5YTcyLCBhMzk4
OWY1YyksIDUzNCwgMTgwfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGI3ZGNiZjUz
LCA1NGU5YmVjZSksIDU2MSwgMTg4fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDg4
ZmNmMzE3LCBmMjIyNDFlMiksIDU4OCwgMTk2fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRf
QygweGNjMjBjZTliLCBkMzVjNzhhNSksIDYxNCwgMjA0fSwKKyAgICAgICAgICAgIHtVSU5UNjRf
MlBBUlRfQygweDk4MTY1YWYzLCA3YjIxNTNkZiksIDY0MSwgMjEyfSwKKyAgICAgICAgICAgIHtV
SU5UNjRfMlBBUlRfQygweGUyYTBiNWRjLCA5NzFmMzAzYSksIDY2NywgMjIwfSwKKyAgICAgICAg
ICAgIHtVSU5UNjRfMlBBUlRfQygweGE4ZDlkMTUzLCA1Y2UzYjM5NiksIDY5NCwgMjI4fSwKKyAg
ICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGZiOWI3Y2Q5LCBhNGE3NDQzYyksIDcyMCwgMjM2
fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGJiNzY0YzRjLCBhN2E0NDQxMCksIDc0
NywgMjQ0fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDhiYWI4ZWVmLCBiNjQwOWMx
YSksIDc3NCwgMjUyfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGQwMWZlZjEwLCBh
NjU3ODQyYyksIDgwMCwgMjYwfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDliMTBh
NGU1LCBlOTkxMzEyOSksIDgyNywgMjY4fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygw
eGU3MTA5YmZiLCBhMTljMGM5ZCksIDg1MywgMjc2fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBB
UlRfQygweGFjMjgyMGQ5LCA2MjNiZjQyOSksIDg4MCwgMjg0fSwKKyAgICAgICAgICAgIHtVSU5U
NjRfMlBBUlRfQygweDgwNDQ0YjVlLCA3YWE3Y2Y4NSksIDkwNywgMjkyfSwKKyAgICAgICAgICAg
IHtVSU5UNjRfMlBBUlRfQygweGJmMjFlNDQwLCAwM2FjZGQyZCksIDkzMywgMzAwfSwKKyAgICAg
ICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDhlNjc5YzJmLCA1ZTQ0ZmY4ZiksIDk2MCwgMzA4fSwK
KyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGQ0MzMxNzlkLCA5YzhjYjg0MSksIDk4Niwg
MzE2fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDllMTlkYjkyLCBiNGUzMWJhOSks
IDEwMTMsIDMyNH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhlYjk2YmY2ZSwgYmFk
Zjc3ZDkpLCAxMDM5LCAzMzJ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YWY4NzAy
M2IsIDliZjBlZTZiKSwgMTA2NiwgMzQwfSwKKyAgICAgICAgfTsKKyAgICAgICAga0NhY2hlZFBv
d2VycyA9IGNhY2hlZFBvd2VyczsKKyAgICAgICAga0NhY2hlZFBvd2Vyc0xlbmd0aCA9IEFSUkFZ
X1NJWkUoY2FjaGVkUG93ZXJzKTsKKyAgICAgICAga0NhY2hlZFBvd2Vyc09mZnNldCA9IC1jYWNo
ZWRQb3dlcnNbMF0uZGVjaW1hbF9leHBvbmVudDsKKyAgICAgICAgUG93ZXJzT2ZUZW5DYWNoZTo6
a0RlY2ltYWxFeHBvbmVudERpc3RhbmNlID0ga0NhY2hlZFBvd2Vyc1sxXS5kZWNpbWFsX2V4cG9u
ZW50IC0ga0NhY2hlZFBvd2Vyc1swXS5kZWNpbWFsX2V4cG9uZW50OworICAgICAgICBQb3dlcnNP
ZlRlbkNhY2hlOjprTWluRGVjaW1hbEV4cG9uZW50ID0ga0NhY2hlZFBvd2Vyc1swXS5kZWNpbWFs
X2V4cG9uZW50OworICAgICAgICBQb3dlcnNPZlRlbkNhY2hlOjprTWF4RGVjaW1hbEV4cG9uZW50
ID0ga0NhY2hlZFBvd2Vyc1trQ2FjaGVkUG93ZXJzTGVuZ3RoIC0gMV0uZGVjaW1hbF9leHBvbmVu
dDsKKyAgICB9CisgICAgCisgICAgdm9pZCBQb3dlcnNPZlRlbkNhY2hlOjpHZXRDYWNoZWRQb3dl
ckZvckJpbmFyeUV4cG9uZW50UmFuZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1pbl9leHBvbmVudCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgbWF4X2V4cG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpeUZwKiBwb3dlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGRl
Y2ltYWxfZXhwb25lbnQpIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKG1heF9leHBvbmVudCk7Cisg
ICAgICAgIGludCBrUSA9IERpeUZwOjprU2lnbmlmaWNhbmRTaXplOworICAgICAgICBkb3VibGUg
ayA9IGNlaWwoKG1pbl9leHBvbmVudCArIGtRIC0gMSkgKiBrRF8xX0xPRzJfMTApOworICAgICAg
ICBpbnQgZm9vID0ga0NhY2hlZFBvd2Vyc09mZnNldDsKKyAgICAgICAgaW50IGluZGV4ID0KKyAg
ICAgICAgKGZvbyArIHN0YXRpY19jYXN0PGludD4oaykgLSAxKSAvIGtEZWNpbWFsRXhwb25lbnRE
aXN0YW5jZSArIDE7CisgICAgICAgIEFTU0VSVCgwIDw9IGluZGV4ICYmIGluZGV4IDwga0NhY2hl
ZFBvd2Vyc0xlbmd0aCk7CisgICAgICAgIENhY2hlZFBvd2VyIGNhY2hlZF9wb3dlciA9IGtDYWNo
ZWRQb3dlcnNbaW5kZXhdOworICAgICAgICBBU1NFUlQobWluX2V4cG9uZW50IDw9IGNhY2hlZF9w
b3dlci5iaW5hcnlfZXhwb25lbnQpOworICAgICAgICBBU1NFUlQoY2FjaGVkX3Bvd2VyLmJpbmFy
eV9leHBvbmVudCA8PSBtYXhfZXhwb25lbnQpOworICAgICAgICAqZGVjaW1hbF9leHBvbmVudCA9
IGNhY2hlZF9wb3dlci5kZWNpbWFsX2V4cG9uZW50OworICAgICAgICAqcG93ZXIgPSBEaXlGcChj
YWNoZWRfcG93ZXIuc2lnbmlmaWNhbmQsIGNhY2hlZF9wb3dlci5iaW5hcnlfZXhwb25lbnQpOwor
ICAgIH0KKyAgICAKKyAgICAKKyAgICB2b2lkIFBvd2Vyc09mVGVuQ2FjaGU6OkdldENhY2hlZFBv
d2VyRm9yRGVjaW1hbEV4cG9uZW50KGludCByZXF1ZXN0ZWRfZXhwb25lbnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXlGcCog
cG93ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQqIGZvdW5kX2V4cG9uZW50KSB7CisgICAgICAgIEFTU0VSVChrTWluRGVj
aW1hbEV4cG9uZW50IDw9IHJlcXVlc3RlZF9leHBvbmVudCk7CisgICAgICAgIEFTU0VSVChyZXF1
ZXN0ZWRfZXhwb25lbnQgPCBrTWF4RGVjaW1hbEV4cG9uZW50ICsga0RlY2ltYWxFeHBvbmVudERp
c3RhbmNlKTsKKyAgICAgICAgaW50IGluZGV4ID0KKyAgICAgICAgKHJlcXVlc3RlZF9leHBvbmVu
dCArIGtDYWNoZWRQb3dlcnNPZmZzZXQpIC8ga0RlY2ltYWxFeHBvbmVudERpc3RhbmNlOworICAg
ICAgICBDYWNoZWRQb3dlciBjYWNoZWRfcG93ZXIgPSBrQ2FjaGVkUG93ZXJzW2luZGV4XTsKKyAg
ICAgICAgKnBvd2VyID0gRGl5RnAoY2FjaGVkX3Bvd2VyLnNpZ25pZmljYW5kLCBjYWNoZWRfcG93
ZXIuYmluYXJ5X2V4cG9uZW50KTsKKyAgICAgICAgKmZvdW5kX2V4cG9uZW50ID0gY2FjaGVkX3Bv
d2VyLmRlY2ltYWxfZXhwb25lbnQ7CisgICAgICAgIEFTU0VSVCgqZm91bmRfZXhwb25lbnQgPD0g
cmVxdWVzdGVkX2V4cG9uZW50KTsKKyAgICAgICAgQVNTRVJUKHJlcXVlc3RlZF9leHBvbmVudCA8
ICpmb3VuZF9leHBvbmVudCArIGtEZWNpbWFsRXhwb25lbnREaXN0YW5jZSk7CisgICAgfQorICAg
IAorfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvY2FjaGVkLXBvd2Vycy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9kdG9hL2NhY2hlZC1wb3dlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYTFkYzI1OWUxZGNl
NDg5OTMwMGZkZTJjZjdmZmI4MjAzMDcwNmYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2NhY2hlZC1wb3dlcnMuaApAQCAtMCwwICsxLDY4IEBACisv
LyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBk
aXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
Ky8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZm5kZWYgRE9VQkxFX0NPTlZFUlNJT05fQ0FD
SEVEX1BPV0VSU19IXworI2RlZmluZSBET1VCTEVfQ09OVkVSU0lPTl9DQUNIRURfUE9XRVJTX0hf
CisKKyNpbmNsdWRlICJkaXktZnAuaCIKKworbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsK
KyAgICAKKyAgICBjbGFzcyBQb3dlcnNPZlRlbkNhY2hlIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IAorICAgICAgICAvLyBOb3QgYWxsIHBvd2VycyBvZiB0ZW4gYXJlIGNhY2hlZC4gVGhlIGRlY2lt
YWwgZXhwb25lbnQgb2YgdHdvIG5laWdoYm9yaW5nCisgICAgICAgIC8vIGNhY2hlZCBudW1iZXJz
IHdpbGwgZGlmZmVyIGJ5IGtEZWNpbWFsRXhwb25lbnREaXN0YW5jZS4KKyAgICAgICAgc3RhdGlj
IGludCBrRGVjaW1hbEV4cG9uZW50RGlzdGFuY2U7CisgICAgICAgIAorICAgICAgICBzdGF0aWMg
aW50IGtNaW5EZWNpbWFsRXhwb25lbnQ7CisgICAgICAgIHN0YXRpYyBpbnQga01heERlY2ltYWxF
eHBvbmVudDsKKyAgICAgICAgCisgICAgICAgIC8vIFJldHVybnMgYSBjYWNoZWQgcG93ZXItb2Yt
dGVuIHdpdGggYSBiaW5hcnkgZXhwb25lbnQgaW4gdGhlIHJhbmdlCisgICAgICAgIC8vIFttaW5f
ZXhwb25lbnQ7IG1heF9leHBvbmVudF0gKGJvdW5kYXJpZXMgaW5jbHVkZWQpLgorICAgICAgICBz
dGF0aWMgdm9pZCBHZXRDYWNoZWRQb3dlckZvckJpbmFyeUV4cG9uZW50UmFuZ2UoaW50IG1pbl9l
eHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBtYXhfZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXlGcCogcG93ZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGRlY2ltYWxf
ZXhwb25lbnQpOworICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJucyBhIGNhY2hlZCBwb3dlciBv
ZiB0ZW4geCB+PSAxMF5rIHN1Y2ggdGhhdAorICAgICAgICAvLyAgIGsgPD0gZGVjaW1hbF9leHBv
bmVudCA8IGsgKyBrQ2FjaGVkUG93ZXJzRGVjaW1hbERpc3RhbmNlLgorICAgICAgICAvLyBUaGUg
Z2l2ZW4gZGVjaW1hbF9leHBvbmVudCBtdXN0IHNhdGlzZnkKKyAgICAgICAgLy8gICBrTWluRGVj
aW1hbEV4cG9uZW50IDw9IHJlcXVlc3RlZF9leHBvbmVudCwgYW5kCisgICAgICAgIC8vICAgcmVx
dWVzdGVkX2V4cG9uZW50IDwga01heERlY2ltYWxFeHBvbmVudCArIGtEZWNpbWFsRXhwb25lbnRE
aXN0YW5jZS4KKyAgICAgICAgc3RhdGljIHZvaWQgR2V0Q2FjaGVkUG93ZXJGb3JEZWNpbWFsRXhw
b25lbnQoaW50IHJlcXVlc3RlZF9leHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRGl5RnAqIHBvd2VyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGZvdW5kX2V4cG9uZW50
KTsKKyAgICB9OworICAgIAorICAgIC8vIEluaXRpYWxpemVzIHRoZSB0YWJsZSBvZiBjYWNoZWQg
cG93ZXJzIHVzZWQgYnkgdGhlIGR0b2EgYWxnb3JpdGhtLgorICAgIC8vIFRoaXMgbmVlZHMgdG8g
YmUgY2FsbGVkIHdoZW4gSlNDIGlzIGJlaW5nIGluaXRpYWxpemVkLgorICAgIHZvaWQgaW5pdGlh
bGl6ZSgpOworICAgIAorfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCisKKyNlbmRp
ZiAgLy8gRE9VQkxFX0NPTlZFUlNJT05fQ0FDSEVEX1BPV0VSU19IXwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2RpeS1mcC5jYyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvZHRvYS9kaXktZnAuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWIxZjdlZTM1YjljZDFjMGIwZDQx
Y2RmMTc3ZWE4ODhlZTlhY2I0NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvZHRvYS9kaXktZnAuY2MKQEAgLTAsMCArMSw1NyBAQAorLy8gQ29weXJpZ2h0IDIw
MTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAg
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAg
ICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisv
LyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCisKKyNpbmNsdWRlICJkaXktZnAuaCIKKyNpbmNsdWRlICJ1dGlscy5oIgor
CituYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIHZvaWQgRGl5RnA6Ok11
bHRpcGx5KGNvbnN0IERpeUZwJiBvdGhlcikgeworICAgICAgICAvLyBTaW1wbHkgImVtdWxhdGVz
IiBhIDEyOCBiaXQgbXVsdGlwbGljYXRpb24uCisgICAgICAgIC8vIEhvd2V2ZXI6IHRoZSByZXN1
bHRpbmcgbnVtYmVyIG9ubHkgY29udGFpbnMgNjQgYml0cy4gVGhlIGxlYXN0CisgICAgICAgIC8v
IHNpZ25pZmljYW50IDY0IGJpdHMgYXJlIG9ubHkgdXNlZCBmb3Igcm91bmRpbmcgdGhlIG1vc3Qg
c2lnbmlmaWNhbnQgNjQKKyAgICAgICAgLy8gYml0cy4KKyAgICAgICAgY29uc3QgdWludDY0X3Qg
a00zMiA9IDB4RkZGRkZGRkZVOworICAgICAgICB1aW50NjRfdCBhID0gZl8gPj4gMzI7CisgICAg
ICAgIHVpbnQ2NF90IGIgPSBmXyAmIGtNMzI7CisgICAgICAgIHVpbnQ2NF90IGMgPSBvdGhlci5m
XyA+PiAzMjsKKyAgICAgICAgdWludDY0X3QgZCA9IG90aGVyLmZfICYga00zMjsKKyAgICAgICAg
dWludDY0X3QgYWMgPSBhICogYzsKKyAgICAgICAgdWludDY0X3QgYmMgPSBiICogYzsKKyAgICAg
ICAgdWludDY0X3QgYWQgPSBhICogZDsKKyAgICAgICAgdWludDY0X3QgYmQgPSBiICogZDsKKyAg
ICAgICAgdWludDY0X3QgdG1wID0gKGJkID4+IDMyKSArIChhZCAmIGtNMzIpICsgKGJjICYga00z
Mik7CisgICAgICAgIC8vIEJ5IGFkZGluZyAxVSA8PCAzMSB0byB0bXAgd2Ugcm91bmQgdGhlIGZp
bmFsIHJlc3VsdC4KKyAgICAgICAgLy8gSGFsZndheSBjYXNlcyB3aWxsIGJlIHJvdW5kIHVwLgor
ICAgICAgICB0bXAgKz0gMVUgPDwgMzE7CisgICAgICAgIHVpbnQ2NF90IHJlc3VsdF9mID0gYWMg
KyAoYWQgPj4gMzIpICsgKGJjID4+IDMyKSArICh0bXAgPj4gMzIpOworICAgICAgICBlXyArPSBv
dGhlci5lXyArIDY0OworICAgICAgICBmXyA9IHJlc3VsdF9mOworICAgIH0KKyAgICAKK30gIC8v
IG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9kdG9hL2RpeS1mcC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9h
L2RpeS1mcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlmYWRiMzdiYmQ2N2EzMmQyZmI4YWQwMTNkMzU1YmU3MGQy
YmUwN2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2Ev
ZGl5LWZwLmgKQEAgLTAsMCArMSwxMTggQEAKKy8vIENvcHlyaWdodCAyMDEwIHRoZSBWOCBwcm9q
ZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8g
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
Ky8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
I2lmbmRlZiBET1VCTEVfQ09OVkVSU0lPTl9ESVlfRlBfSF8KKyNkZWZpbmUgRE9VQkxFX0NPTlZF
UlNJT05fRElZX0ZQX0hfCisKKyNpbmNsdWRlICJ1dGlscy5oIgorCituYW1lc3BhY2UgZG91Ymxl
X2NvbnZlcnNpb24geworICAgIAorICAgIC8vIFRoaXMgIkRvIEl0IFlvdXJzZWxmIEZsb2F0aW5n
IFBvaW50IiBjbGFzcyBpbXBsZW1lbnRzIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyCisgICAgLy8g
d2l0aCBhIHVpbnQ2NCBzaWduaWZpY2FuZCBhbmQgYW4gaW50IGV4cG9uZW50LiBOb3JtYWxpemVk
IERpeUZwIG51bWJlcnMgd2lsbAorICAgIC8vIGhhdmUgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0
IG9mIHRoZSBzaWduaWZpY2FuZCBzZXQuCisgICAgLy8gTXVsdGlwbGljYXRpb24gYW5kIFN1YnRy
YWN0aW9uIGRvIG5vdCBub3JtYWxpemUgdGhlaXIgcmVzdWx0cy4KKyAgICAvLyBEaXlGcCBhcmUg
bm90IGRlc2lnbmVkIHRvIGNvbnRhaW4gc3BlY2lhbCBkb3VibGVzIChOYU4gYW5kIEluZmluaXR5
KS4KKyAgICBjbGFzcyBEaXlGcCB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IGtTaWduaWZpY2FuZFNpemUgPSA2NDsKKyAgICAgICAgCisgICAgICAgIERpeUZwKCkgOiBm
XygwKSwgZV8oMCkge30KKyAgICAgICAgRGl5RnAodWludDY0X3QgZiwgaW50IGUpIDogZl8oZiks
IGVfKGUpIHt9CisgICAgICAgIAorICAgICAgICAvLyB0aGlzID0gdGhpcyAtIG90aGVyLgorICAg
ICAgICAvLyBUaGUgZXhwb25lbnRzIG9mIGJvdGggbnVtYmVycyBtdXN0IGJlIHRoZSBzYW1lIGFu
ZCB0aGUgc2lnbmlmaWNhbmQgb2YgdGhpcworICAgICAgICAvLyBtdXN0IGJlIGJpZ2dlciB0aGFu
IHRoZSBzaWduaWZpY2FuZCBvZiBvdGhlci4KKyAgICAgICAgLy8gVGhlIHJlc3VsdCB3aWxsIG5v
dCBiZSBub3JtYWxpemVkLgorICAgICAgICB2b2lkIFN1YnRyYWN0KGNvbnN0IERpeUZwJiBvdGhl
cikgeworICAgICAgICAgICAgQVNTRVJUKGVfID09IG90aGVyLmVfKTsKKyAgICAgICAgICAgIEFT
U0VSVChmXyA+PSBvdGhlci5mXyk7CisgICAgICAgICAgICBmXyAtPSBvdGhlci5mXzsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJucyBhIC0gYi4KKyAgICAgICAgLy8gVGhl
IGV4cG9uZW50cyBvZiBib3RoIG51bWJlcnMgbXVzdCBiZSB0aGUgc2FtZSBhbmQgdGhpcyBtdXN0
IGJlIGJpZ2dlcgorICAgICAgICAvLyB0aGFuIG90aGVyLiBUaGUgcmVzdWx0IHdpbGwgbm90IGJl
IG5vcm1hbGl6ZWQuCisgICAgICAgIHN0YXRpYyBEaXlGcCBNaW51cyhjb25zdCBEaXlGcCYgYSwg
Y29uc3QgRGl5RnAmIGIpIHsKKyAgICAgICAgICAgIERpeUZwIHJlc3VsdCA9IGE7CisgICAgICAg
ICAgICByZXN1bHQuU3VidHJhY3QoYik7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICAKKyAgICAgICAgLy8gdGhpcyA9IHRoaXMgKiBvdGhl
ci4KKyAgICAgICAgdm9pZCBNdWx0aXBseShjb25zdCBEaXlGcCYgb3RoZXIpOworICAgICAgICAK
KyAgICAgICAgLy8gcmV0dXJucyBhICogYjsKKyAgICAgICAgc3RhdGljIERpeUZwIFRpbWVzKGNv
bnN0IERpeUZwJiBhLCBjb25zdCBEaXlGcCYgYikgeworICAgICAgICAgICAgRGl5RnAgcmVzdWx0
ID0gYTsKKyAgICAgICAgICAgIHJlc3VsdC5NdWx0aXBseShiKTsKKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgTm9ybWFsaXplKCkg
eworICAgICAgICAgICAgQVNTRVJUKGZfICE9IDApOworICAgICAgICAgICAgdWludDY0X3QgZiA9
IGZfOworICAgICAgICAgICAgaW50IGUgPSBlXzsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Ly8gVGhpcyBtZXRob2QgaXMgbWFpbmx5IGNhbGxlZCBmb3Igbm9ybWFsaXppbmcgYm91bmRhcmll
cy4gSW4gZ2VuZXJhbAorICAgICAgICAgICAgLy8gYm91bmRhcmllcyBuZWVkIHRvIGJlIHNoaWZ0
ZWQgYnkgMTAgYml0cy4gV2UgdGh1cyBvcHRpbWl6ZSBmb3IgdGhpcyBjYXNlLgorICAgICAgICAg
ICAgY29uc3QgdWludDY0X3QgazEwTVNCaXRzID0gVUlOVDY0XzJQQVJUX0MoMHhGRkMwMDAwMCwg
MDAwMDAwMDApOworICAgICAgICAgICAgd2hpbGUgKChmICYgazEwTVNCaXRzKSA9PSAwKSB7Cisg
ICAgICAgICAgICAgICAgZiA8PD0gMTA7CisgICAgICAgICAgICAgICAgZSAtPSAxMDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHdoaWxlICgoZiAmIGtVaW50NjRNU0IpID09IDApIHsKKyAg
ICAgICAgICAgICAgICBmIDw8PSAxOworICAgICAgICAgICAgICAgIGUtLTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGZfID0gZjsKKyAgICAgICAgICAgIGVfID0gZTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgc3RhdGljIERpeUZwIE5vcm1hbGl6ZShjb25zdCBEaXlGcCYgYSkg
eworICAgICAgICAgICAgRGl5RnAgcmVzdWx0ID0gYTsKKyAgICAgICAgICAgIHJlc3VsdC5Ob3Jt
YWxpemUoKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHVpbnQ2NF90IGYoKSBjb25zdCB7IHJldHVybiBmXzsgfQorICAgICAgICBpbnQg
ZSgpIGNvbnN0IHsgcmV0dXJuIGVfOyB9CisgICAgICAgIAorICAgICAgICB2b2lkIHNldF9mKHVp
bnQ2NF90IG5ld192YWx1ZSkgeyBmXyA9IG5ld192YWx1ZTsgfQorICAgICAgICB2b2lkIHNldF9l
KGludCBuZXdfdmFsdWUpIHsgZV8gPSBuZXdfdmFsdWU7IH0KKyAgICAgICAgCisgICAgcHJpdmF0
ZToKKyAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGtVaW50NjRNU0IgPSBVSU5UNjRfMlBB
UlRfQygweDgwMDAwMDAwLCAwMDAwMDAwMCk7CisgICAgICAgIAorICAgICAgICB1aW50NjRfdCBm
XzsKKyAgICAgICAgaW50IGVfOworICAgIH07CisgICAgCit9ICAvLyBuYW1lc3BhY2UgZG91Ymxl
X2NvbnZlcnNpb24KKworI2VuZGlmICAvLyBET1VCTEVfQ09OVkVSU0lPTl9ESVlfRlBfSF8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kb3VibGUtY29udmVyc2lv
bi5jYyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5j
YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4zMTdkZjE0MmU5YTRjMjMwM2JhNGIyY2QwMTMyYTE2YTRlMjhmMmZiCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2RvdWJsZS1j
b252ZXJzaW9uLmNjCkBAIC0wLDAgKzEsODY5IEBACisvLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjgg
cHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
Ky8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8K
Ky8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlICJk
b3VibGUtY29udmVyc2lvbi5oIgorCisjaW5jbHVkZSAiYmlnbnVtLWR0b2EuaCIKKyNpbmNsdWRl
ICJkb3VibGUuaCIKKyNpbmNsdWRlICJmYXN0LWR0b2EuaCIKKyNpbmNsdWRlICJmaXhlZC1kdG9h
LmgiCisjaW5jbHVkZSAic3RydG9kLmgiCisjaW5jbHVkZSAidXRpbHMuaCIKKworbmFtZXNwYWNl
IGRvdWJsZV9jb252ZXJzaW9uIHsKKyAgICAKKyAgICBjb25zdCBEb3VibGVUb1N0cmluZ0NvbnZl
cnRlciYgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6OkVjbWFTY3JpcHRDb252ZXJ0ZXIoKSB7Cisg
ICAgICAgIGludCBmbGFncyA9IFVOSVFVRV9aRVJPIHwgRU1JVF9QT1NJVElWRV9FWFBPTkVOVF9T
SUdOOworICAgICAgICBzdGF0aWMgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXIgY29udmVydGVyKGZs
YWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJ
bmZpbml0eSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIk5hTiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC02LCAyMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA2LCAwKTsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRlcjsKKyAgICB9CisgICAgCisgICAgCisg
ICAgYm9vbCBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6SGFuZGxlU3BlY2lhbFZhbHVlcygKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJs
ZSB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25zdCB7CisgICAgICAgIERv
dWJsZSBkb3VibGVfaW5zcGVjdCh2YWx1ZSk7CisgICAgICAgIGlmIChkb3VibGVfaW5zcGVjdC5J
c0luZmluaXRlKCkpIHsKKyAgICAgICAgICAgIGlmIChpbmZpbml0eV9zeW1ib2xfID09IE5VTEwp
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA8IDApIHsKKyAgICAgICAgICAg
ICAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKCctJyk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkU3RyaW5nKGluZmluaXR5X3N5bWJvbF8pOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRvdWJsZV9p
bnNwZWN0LklzTmFuKCkpIHsKKyAgICAgICAgICAgIGlmIChuYW5fc3ltYm9sXyA9PSBOVUxMKSBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkU3RyaW5nKG5hbl9z
eW1ib2xfKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBEb3VibGVUb1N0cmluZ0Nv
bnZlcnRlcjo6Q3JlYXRlRXhwb25lbnRpYWxSZXByZXNlbnRhdGlvbigKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIqIGRlY2ltYWxfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBleHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25z
dCB7CisgICAgICAgIEFTU0VSVChsZW5ndGggIT0gMCk7CisgICAgICAgIHJlc3VsdF9idWlsZGVy
LT5BZGRDaGFyYWN0ZXIoZGVjaW1hbF9kaWdpdHNbMF0pOworICAgICAgICBpZiAobGVuZ3RoICE9
IDEpIHsKKyAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRDaGFyYWN0ZXIoJy4nKTsKKyAg
ICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRTdWJzdHJpbmcoJmRlY2ltYWxfZGlnaXRzWzFd
LCBsZW5ndGgtMSk7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJh
Y3RlcihleHBvbmVudF9jaGFyYWN0ZXJfKTsKKyAgICAgICAgaWYgKGV4cG9uZW50IDwgMCkgewor
ICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcignLScpOworICAgICAgICAg
ICAgZXhwb25lbnQgPSAtZXhwb25lbnQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBp
ZiAoKGZsYWdzXyAmIEVNSVRfUE9TSVRJVkVfRVhQT05FTlRfU0lHTikgIT0gMCkgeworICAgICAg
ICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRDaGFyYWN0ZXIoJysnKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBpZiAoZXhwb25lbnQgPT0gMCkgeworICAgICAgICAgICAg
cmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcignMCcpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIEFTU0VSVChleHBvbmVudCA8IDFlNCk7CisgICAgICAgIGNvbnN0
IGludCBrTWF4RXhwb25lbnRMZW5ndGggPSA1OworICAgICAgICBjaGFyIGJ1ZmZlcltrTWF4RXhw
b25lbnRMZW5ndGhdOworICAgICAgICBpbnQgZmlyc3RfY2hhcl9wb3MgPSBrTWF4RXhwb25lbnRM
ZW5ndGg7CisgICAgICAgIHdoaWxlIChleHBvbmVudCA+IDApIHsKKyAgICAgICAgICAgIGJ1ZmZl
clstLWZpcnN0X2NoYXJfcG9zXSA9ICcwJyArIChleHBvbmVudCAlIDEwKTsKKyAgICAgICAgICAg
IGV4cG9uZW50IC89IDEwOworICAgICAgICB9CisgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRT
dWJzdHJpbmcoJmJ1ZmZlcltmaXJzdF9jaGFyX3Bvc10sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAga01heEV4cG9uZW50TGVuZ3RoIC0gZmlyc3RfY2hhcl9wb3MpOworICAg
IH0KKyAgICAKKyAgICAKKyAgICB2b2lkIERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpDcmVhdGVE
ZWNpbWFsUmVwcmVzZW50YXRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGRlY2ltYWxfZGlnaXRzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRpZ2l0
c19hZnRlcl9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVpbGRlciogcmVzdWx0X2J1aWxkZXIpIGNvbnN0
IHsKKyAgICAgICAgLy8gQ3JlYXRlIGEgcmVwcmVzZW50YXRpb24gdGhhdCBpcyBwYWRkZWQgd2l0
aCB6ZXJvcyBpZiBuZWVkZWQuCisgICAgICAgIGlmIChkZWNpbWFsX3BvaW50IDw9IDApIHsKKyAg
ICAgICAgICAgIC8vICIwLjAwMDAwZGVjaW1hbF9yZXAiLgorICAgICAgICAgICAgcmVzdWx0X2J1
aWxkZXItPkFkZENoYXJhY3RlcignMCcpOworICAgICAgICAgICAgaWYgKGRpZ2l0c19hZnRlcl9w
b2ludCA+IDApIHsKKyAgICAgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVy
KCcuJyk7CisgICAgICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZFBhZGRpbmcoJzAnLCAt
ZGVjaW1hbF9wb2ludCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGxlbmd0aCA8PSBkaWdpdHNf
YWZ0ZXJfcG9pbnQgLSAoLWRlY2ltYWxfcG9pbnQpKTsKKyAgICAgICAgICAgICAgICByZXN1bHRf
YnVpbGRlci0+QWRkU3Vic3RyaW5nKGRlY2ltYWxfZGlnaXRzLCBsZW5ndGgpOworICAgICAgICAg
ICAgICAgIGludCByZW1haW5pbmdfZGlnaXRzID0gZGlnaXRzX2FmdGVyX3BvaW50IC0gKC1kZWNp
bWFsX3BvaW50KSAtIGxlbmd0aDsKKyAgICAgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRk
UGFkZGluZygnMCcsIHJlbWFpbmluZ19kaWdpdHMpOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgaWYgKGRlY2ltYWxfcG9pbnQgPj0gbGVuZ3RoKSB7CisgICAgICAgICAgICAvLyAiZGVj
aW1hbF9yZXAwMDAwLjAwMDAwIiBvciAiZGVjaW1hbF9yZXAuMDAwMCIKKyAgICAgICAgICAgIHJl
c3VsdF9idWlsZGVyLT5BZGRTdWJzdHJpbmcoZGVjaW1hbF9kaWdpdHMsIGxlbmd0aCk7CisgICAg
ICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkUGFkZGluZygnMCcsIGRlY2ltYWxfcG9pbnQgLSBs
ZW5ndGgpOworICAgICAgICAgICAgaWYgKGRpZ2l0c19hZnRlcl9wb2ludCA+IDApIHsKKyAgICAg
ICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKCcuJyk7CisgICAgICAgICAg
ICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZFBhZGRpbmcoJzAnLCBkaWdpdHNfYWZ0ZXJfcG9pbnQp
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gImRlY2lt
YS5sX3JlcDAwMCIKKyAgICAgICAgICAgIEFTU0VSVChkaWdpdHNfYWZ0ZXJfcG9pbnQgPiAwKTsK
KyAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRTdWJzdHJpbmcoZGVjaW1hbF9kaWdpdHMs
IGRlY2ltYWxfcG9pbnQpOworICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3Rl
cignLicpOworICAgICAgICAgICAgQVNTRVJUKGxlbmd0aCAtIGRlY2ltYWxfcG9pbnQgPD0gZGln
aXRzX2FmdGVyX3BvaW50KTsKKyAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRTdWJzdHJp
bmcoJmRlY2ltYWxfZGlnaXRzW2RlY2ltYWxfcG9pbnRdLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsZW5ndGggLSBkZWNpbWFsX3BvaW50KTsKKyAgICAgICAgICAg
IGludCByZW1haW5pbmdfZGlnaXRzID0gZGlnaXRzX2FmdGVyX3BvaW50IC0gKGxlbmd0aCAtIGRl
Y2ltYWxfcG9pbnQpOworICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZFBhZGRpbmcoJzAn
LCByZW1haW5pbmdfZGlnaXRzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGlnaXRzX2FmdGVy
X3BvaW50ID09IDApIHsKKyAgICAgICAgICAgIGlmICgoZmxhZ3NfICYgRU1JVF9UUkFJTElOR19E
RUNJTUFMX1BPSU5UKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFk
ZENoYXJhY3RlcignLicpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChmbGFnc18g
JiBFTUlUX1RSQUlMSU5HX1pFUk9fQUZURVJfUE9JTlQpICE9IDApIHsKKyAgICAgICAgICAgICAg
ICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKCcwJyk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgYm9vbCBEb3VibGVUb1N0cmluZ0NvbnZlcnRl
cjo6VG9TaG9ydGVzdChkb3VibGUgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyKiByZXN1bHRfYnVpbGRlcikgY29uc3Qgewor
ICAgICAgICBpZiAoRG91YmxlKHZhbHVlKS5Jc1NwZWNpYWwoKSkgeworICAgICAgICAgICAgcmV0
dXJuIEhhbmRsZVNwZWNpYWxWYWx1ZXModmFsdWUsIHJlc3VsdF9idWlsZGVyKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgaW50IGRlY2ltYWxfcG9pbnQ7CisgICAgICAgIGJvb2wgc2ln
bjsKKyAgICAgICAgY29uc3QgaW50IGtEZWNpbWFsUmVwQ2FwYWNpdHkgPSBrQmFzZTEwTWF4aW1h
bExlbmd0aCArIDE7CisgICAgICAgIGNoYXIgZGVjaW1hbF9yZXBba0RlY2ltYWxSZXBDYXBhY2l0
eV07CisgICAgICAgIGludCBkZWNpbWFsX3JlcF9sZW5ndGg7CisgICAgICAgIAorICAgICAgICBE
b3VibGVUb0FzY2lpKHZhbHVlLCBTSE9SVEVTVCwgMCwgZGVjaW1hbF9yZXAsIGtEZWNpbWFsUmVw
Q2FwYWNpdHksCisgICAgICAgICAgICAgICAgICAgICAgJnNpZ24sICZkZWNpbWFsX3JlcF9sZW5n
dGgsICZkZWNpbWFsX3BvaW50KTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgdW5pcXVlX3plcm8g
PSAoZmxhZ3NfICYgVU5JUVVFX1pFUk8pICE9IDA7CisgICAgICAgIGlmIChzaWduICYmICh2YWx1
ZSAhPSAwLjAgfHwgIXVuaXF1ZV96ZXJvKSkgeworICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXIt
PkFkZENoYXJhY3RlcignLScpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpbnQgZXhw
b25lbnQgPSBkZWNpbWFsX3BvaW50IC0gMTsKKyAgICAgICAgaWYgKChkZWNpbWFsX2luX3Nob3J0
ZXN0X2xvd18gPD0gZXhwb25lbnQpICYmCisgICAgICAgICAgICAoZXhwb25lbnQgPCBkZWNpbWFs
X2luX3Nob3J0ZXN0X2hpZ2hfKSkgeworICAgICAgICAgICAgQ3JlYXRlRGVjaW1hbFJlcHJlc2Vu
dGF0aW9uKGRlY2ltYWxfcmVwLCBkZWNpbWFsX3JlcF9sZW5ndGgsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBNYXgoMCwgZGVjaW1hbF9yZXBfbGVuZ3RoIC0gZGVjaW1h
bF9wb2ludCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
X2J1aWxkZXIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQ3JlYXRlRXhwb25lbnRp
YWxSZXByZXNlbnRhdGlvbihkZWNpbWFsX3JlcCwgZGVjaW1hbF9yZXBfbGVuZ3RoLCBleHBvbmVu
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2J1
aWxkZXIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAg
ICAKKyAgICBib29sIERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpUb0ZpeGVkKGRvdWJsZSB2YWx1
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXF1ZXN0
ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3Ry
aW5nQnVpbGRlciogcmVzdWx0X2J1aWxkZXIpIGNvbnN0IHsKKyAgICAgICAgQVNTRVJUKGtNYXhG
aXhlZERpZ2l0c0JlZm9yZVBvaW50ID09IDYwKTsKKyAgICAgICAgY29uc3QgZG91YmxlIGtGaXJz
dE5vbkZpeGVkID0gMWU2MDsKKyAgICAgICAgCisgICAgICAgIGlmIChEb3VibGUodmFsdWUpLklz
U3BlY2lhbCgpKSB7CisgICAgICAgICAgICByZXR1cm4gSGFuZGxlU3BlY2lhbFZhbHVlcyh2YWx1
ZSwgcmVzdWx0X2J1aWxkZXIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAocmVx
dWVzdGVkX2RpZ2l0cyA+IGtNYXhGaXhlZERpZ2l0c0FmdGVyUG9pbnQpIHJldHVybiBmYWxzZTsK
KyAgICAgICAgaWYgKHZhbHVlID49IGtGaXJzdE5vbkZpeGVkIHx8IHZhbHVlIDw9IC1rRmlyc3RO
b25GaXhlZCkgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgLy8gRmluZCBhIHN1ZmZp
Y2llbnRseSBwcmVjaXNlIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2Ygbi4KKyAgICAgICAgaW50
IGRlY2ltYWxfcG9pbnQ7CisgICAgICAgIGJvb2wgc2lnbjsKKyAgICAgICAgLy8gQWRkIHNwYWNl
IGZvciB0aGUgJ1wwJyBieXRlLgorICAgICAgICBjb25zdCBpbnQga0RlY2ltYWxSZXBDYXBhY2l0
eSA9CisgICAgICAgIGtNYXhGaXhlZERpZ2l0c0JlZm9yZVBvaW50ICsga01heEZpeGVkRGlnaXRz
QWZ0ZXJQb2ludCArIDE7CisgICAgICAgIGNoYXIgZGVjaW1hbF9yZXBba0RlY2ltYWxSZXBDYXBh
Y2l0eV07CisgICAgICAgIGludCBkZWNpbWFsX3JlcF9sZW5ndGg7CisgICAgICAgIERvdWJsZVRv
QXNjaWkodmFsdWUsIEZJWEVELCByZXF1ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAg
ICAgIGRlY2ltYWxfcmVwLCBrRGVjaW1hbFJlcENhcGFjaXR5LAorICAgICAgICAgICAgICAgICAg
ICAgICZzaWduLCAmZGVjaW1hbF9yZXBfbGVuZ3RoLCAmZGVjaW1hbF9wb2ludCk7CisgICAgICAg
IAorICAgICAgICBib29sIHVuaXF1ZV96ZXJvID0gKChmbGFnc18gJiBVTklRVUVfWkVSTykgIT0g
MCk7CisgICAgICAgIGlmIChzaWduICYmICh2YWx1ZSAhPSAwLjAgfHwgIXVuaXF1ZV96ZXJvKSkg
eworICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcignLScpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBDcmVhdGVEZWNpbWFsUmVwcmVzZW50YXRpb24oZGVjaW1h
bF9yZXAsIGRlY2ltYWxfcmVwX2xlbmd0aCwgZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZF9kaWdpdHMsIHJlc3VsdF9idWlsZGVyKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIAorICAgIGJvb2wgRG91Ymxl
VG9TdHJpbmdDb252ZXJ0ZXI6OlRvRXhwb25lbnRpYWwoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdmFsdWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVxdWVzdGVkX2RpZ2l0cywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxk
ZXIqIHJlc3VsdF9idWlsZGVyKSBjb25zdCB7CisgICAgICAgIGlmIChEb3VibGUodmFsdWUpLklz
U3BlY2lhbCgpKSB7CisgICAgICAgICAgICByZXR1cm4gSGFuZGxlU3BlY2lhbFZhbHVlcyh2YWx1
ZSwgcmVzdWx0X2J1aWxkZXIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAocmVx
dWVzdGVkX2RpZ2l0cyA8IC0xKSByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChyZXF1ZXN0ZWRf
ZGlnaXRzID4ga01heEV4cG9uZW50aWFsRGlnaXRzKSByZXR1cm4gZmFsc2U7CisgICAgICAgIAor
ICAgICAgICBpbnQgZGVjaW1hbF9wb2ludDsKKyAgICAgICAgYm9vbCBzaWduOworICAgICAgICAv
LyBBZGQgc3BhY2UgZm9yIGRpZ2l0IGJlZm9yZSB0aGUgZGVjaW1hbCBwb2ludCBhbmQgdGhlICdc
MCcgY2hhcmFjdGVyLgorICAgICAgICBjb25zdCBpbnQga0RlY2ltYWxSZXBDYXBhY2l0eSA9IGtN
YXhFeHBvbmVudGlhbERpZ2l0cyArIDI7CisgICAgICAgIEFTU0VSVChrRGVjaW1hbFJlcENhcGFj
aXR5ID4ga0Jhc2UxME1heGltYWxMZW5ndGgpOworICAgICAgICBjaGFyIGRlY2ltYWxfcmVwW2tE
ZWNpbWFsUmVwQ2FwYWNpdHldOworICAgICAgICBpbnQgZGVjaW1hbF9yZXBfbGVuZ3RoOworICAg
ICAgICAKKyAgICAgICAgaWYgKHJlcXVlc3RlZF9kaWdpdHMgPT0gLTEpIHsKKyAgICAgICAgICAg
IERvdWJsZVRvQXNjaWkodmFsdWUsIFNIT1JURVNULCAwLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWNpbWFsX3JlcCwga0RlY2ltYWxSZXBDYXBhY2l0eSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgJnNpZ24sICZkZWNpbWFsX3JlcF9sZW5ndGgsICZkZWNpbWFsX3BvaW50KTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIERvdWJsZVRvQXNjaWkodmFsdWUsIFBSRUNJU0lP
TiwgcmVxdWVzdGVkX2RpZ2l0cyArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2lt
YWxfcmVwLCBrRGVjaW1hbFJlcENhcGFjaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAm
c2lnbiwgJmRlY2ltYWxfcmVwX2xlbmd0aCwgJmRlY2ltYWxfcG9pbnQpOworICAgICAgICAgICAg
QVNTRVJUKGRlY2ltYWxfcmVwX2xlbmd0aCA8PSByZXF1ZXN0ZWRfZGlnaXRzICsgMSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSBkZWNpbWFsX3JlcF9sZW5ndGg7IGkg
PCByZXF1ZXN0ZWRfZGlnaXRzICsgMTsgKytpKSB7CisgICAgICAgICAgICAgICAgZGVjaW1hbF9y
ZXBbaV0gPSAnMCc7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWNpbWFsX3JlcF9sZW5n
dGggPSByZXF1ZXN0ZWRfZGlnaXRzICsgMTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Ym9vbCB1bmlxdWVfemVybyA9ICgoZmxhZ3NfICYgVU5JUVVFX1pFUk8pICE9IDApOworICAgICAg
ICBpZiAoc2lnbiAmJiAodmFsdWUgIT0gMC4wIHx8ICF1bmlxdWVfemVybykpIHsKKyAgICAgICAg
ICAgIHJlc3VsdF9idWlsZGVyLT5BZGRDaGFyYWN0ZXIoJy0nKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgaW50IGV4cG9uZW50ID0gZGVjaW1hbF9wb2ludCAtIDE7CisgICAgICAgIENy
ZWF0ZUV4cG9uZW50aWFsUmVwcmVzZW50YXRpb24oZGVjaW1hbF9yZXAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjaW1hbF9yZXBfbGVuZ3RoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9uZW50LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIAorICAgIAorICAgIGJvb2wgRG91YmxlVG9TdHJpbmdDb252ZXJ0
ZXI6OlRvUHJlY2lzaW9uKGRvdWJsZSB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgcHJlY2lzaW9uLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBj
b25zdCB7CisgICAgICAgIGlmIChEb3VibGUodmFsdWUpLklzU3BlY2lhbCgpKSB7CisgICAgICAg
ICAgICByZXR1cm4gSGFuZGxlU3BlY2lhbFZhbHVlcyh2YWx1ZSwgcmVzdWx0X2J1aWxkZXIpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAocHJlY2lzaW9uIDwga01pblByZWNpc2lv
bkRpZ2l0cyB8fCBwcmVjaXNpb24gPiBrTWF4UHJlY2lzaW9uRGlnaXRzKSB7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZpbmQgYSBz
dWZmaWNpZW50bHkgcHJlY2lzZSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIG4uCisgICAgICAg
IGludCBkZWNpbWFsX3BvaW50OworICAgICAgICBib29sIHNpZ247CisgICAgICAgIC8vIEFkZCBv
bmUgZm9yIHRoZSB0ZXJtaW5hdGluZyBudWxsIGNoYXJhY3Rlci4KKyAgICAgICAgY29uc3QgaW50
IGtEZWNpbWFsUmVwQ2FwYWNpdHkgPSBrTWF4UHJlY2lzaW9uRGlnaXRzICsgMTsKKyAgICAgICAg
Y2hhciBkZWNpbWFsX3JlcFtrRGVjaW1hbFJlcENhcGFjaXR5XTsKKyAgICAgICAgaW50IGRlY2lt
YWxfcmVwX2xlbmd0aDsKKyAgICAgICAgCisgICAgICAgIERvdWJsZVRvQXNjaWkodmFsdWUsIFBS
RUNJU0lPTiwgcHJlY2lzaW9uLAorICAgICAgICAgICAgICAgICAgICAgIGRlY2ltYWxfcmVwLCBr
RGVjaW1hbFJlcENhcGFjaXR5LAorICAgICAgICAgICAgICAgICAgICAgICZzaWduLCAmZGVjaW1h
bF9yZXBfbGVuZ3RoLCAmZGVjaW1hbF9wb2ludCk7CisgICAgICAgIEFTU0VSVChkZWNpbWFsX3Jl
cF9sZW5ndGggPD0gcHJlY2lzaW9uKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgdW5pcXVlX3pl
cm8gPSAoKGZsYWdzXyAmIFVOSVFVRV9aRVJPKSAhPSAwKTsKKyAgICAgICAgaWYgKHNpZ24gJiYg
KHZhbHVlICE9IDAuMCB8fCAhdW5pcXVlX3plcm8pKSB7CisgICAgICAgICAgICByZXN1bHRfYnVp
bGRlci0+QWRkQ2hhcmFjdGVyKCctJyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8v
IFRoZSBleHBvbmVudCBpZiB3ZSBwcmludCB0aGUgbnVtYmVyIGFzIHgueHhleXl5LiBUaGF0IGlz
IHdpdGggdGhlCisgICAgICAgIC8vIGRlY2ltYWwgcG9pbnQgYWZ0ZXIgdGhlIGZpcnN0IGRpZ2l0
LgorICAgICAgICBpbnQgZXhwb25lbnQgPSBkZWNpbWFsX3BvaW50IC0gMTsKKyAgICAgICAgCisg
ICAgICAgIGludCBleHRyYV96ZXJvID0gKChmbGFnc18gJiBFTUlUX1RSQUlMSU5HX1pFUk9fQUZU
RVJfUE9JTlQpICE9IDApID8gMSA6IDA7CisgICAgICAgIGlmICgoLWRlY2ltYWxfcG9pbnQgKyAx
ID4gbWF4X2xlYWRpbmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGVfKSB8fAorICAg
ICAgICAgICAgKGRlY2ltYWxfcG9pbnQgLSBwcmVjaXNpb24gKyBleHRyYV96ZXJvID4KKyAgICAg
ICAgICAgICBtYXhfdHJhaWxpbmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGVfKSkg
eworICAgICAgICAgICAgICAgIC8vIEZpbGwgYnVmZmVyIHRvIGNvbnRhaW4gJ3ByZWNpc2lvbicg
ZGlnaXRzLgorICAgICAgICAgICAgICAgIC8vIFVzdWFsbHkgdGhlIGJ1ZmZlciBpcyBhbHJlYWR5
IGF0IHRoZSBjb3JyZWN0IGxlbmd0aCwgYnV0ICdEb3VibGVUb0FzY2lpJworICAgICAgICAgICAg
ICAgIC8vIGlzIGFsbG93ZWQgdG8gcmV0dXJuIGxlc3MgY2hhcmFjdGVycy4KKyAgICAgICAgICAg
ICAgICBmb3IgKGludCBpID0gZGVjaW1hbF9yZXBfbGVuZ3RoOyBpIDwgcHJlY2lzaW9uOyArK2kp
IHsKKyAgICAgICAgICAgICAgICAgICAgZGVjaW1hbF9yZXBbaV0gPSAnMCc7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENyZWF0ZUV4cG9uZW50
aWFsUmVwcmVzZW50YXRpb24oZGVjaW1hbF9yZXAsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb24sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQ3JlYXRlRGVjaW1hbFJlcHJlc2VudGF0aW9uKGRl
Y2ltYWxfcmVwLCBkZWNpbWFsX3JlcF9sZW5ndGgsIGRlY2ltYWxfcG9pbnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heCgwLCBwcmVjaXNpb24gLSBkZWNp
bWFsX3BvaW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0X2J1aWxkZXIpOworICAgICAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgCisgICAgCisgICAgc3RhdGljIEJpZ251bUR0b2FNb2RlIER0b2FUb0JpZ251bUR0
b2FNb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
b3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6RHRvYU1vZGUgZHRvYV9tb2RlKSB7CisgICAgICAgIHN3
aXRjaCAoZHRvYV9tb2RlKSB7CisgICAgICAgICAgICBjYXNlIERvdWJsZVRvU3RyaW5nQ29udmVy
dGVyOjpTSE9SVEVTVDogIHJldHVybiBCSUdOVU1fRFRPQV9TSE9SVEVTVDsKKyAgICAgICAgICAg
IGNhc2UgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6OkZJWEVEOiAgICAgcmV0dXJuIEJJR05VTV9E
VE9BX0ZJWEVEOworICAgICAgICAgICAgY2FzZSBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6UFJF
Q0lTSU9OOiByZXR1cm4gQklHTlVNX0RUT0FfUFJFQ0lTSU9OOworICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIHJldHVy
biBCSUdOVU1fRFRPQV9TSE9SVEVTVDsgIC8vIFRvIHNpbGVuY2UgY29tcGlsZXIuCisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6
RG91YmxlVG9Bc2NpaShkb3VibGUgdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIER0b2FNb2RlIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIGJ1ZmZlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBidWZmZXJfbGVu
Z3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCogc2lnbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCogbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50KiBwb2ludCkgeworICAgICAgICBWZWN0b3I8Y2hhcj4gdmVjdG9yKGJ1ZmZlciwg
YnVmZmVyX2xlbmd0aCk7CisgICAgICAgIEFTU0VSVCghRG91YmxlKHYpLklzU3BlY2lhbCgpKTsK
KyAgICAgICAgQVNTRVJUKG1vZGUgPT0gU0hPUlRFU1QgfHwgcmVxdWVzdGVkX2RpZ2l0cyA+PSAw
KTsKKyAgICAgICAgCisgICAgICAgIGlmIChEb3VibGUodikuU2lnbigpIDwgMCkgeworICAgICAg
ICAgICAgKnNpZ24gPSB0cnVlOworICAgICAgICAgICAgdiA9IC12OworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgKnNpZ24gPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgaWYgKG1vZGUgPT0gUFJFQ0lTSU9OICYmIHJlcXVlc3RlZF9kaWdpdHMgPT0gMCkgeworICAg
ICAgICAgICAgdmVjdG9yWzBdID0gJ1wwJzsKKyAgICAgICAgICAgICpsZW5ndGggPSAwOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAodiA9PSAw
KSB7CisgICAgICAgICAgICB2ZWN0b3JbMF0gPSAnMCc7CisgICAgICAgICAgICB2ZWN0b3JbMV0g
PSAnXDAnOworICAgICAgICAgICAgKmxlbmd0aCA9IDE7CisgICAgICAgICAgICAqcG9pbnQgPSAx
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29s
IGZhc3Rfd29ya2VkOworICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgICAgIGNhc2Ug
U0hPUlRFU1Q6CisgICAgICAgICAgICAgICAgZmFzdF93b3JrZWQgPSBGYXN0RHRvYSh2LCBGQVNU
X0RUT0FfU0hPUlRFU1QsIDAsIHZlY3RvciwgbGVuZ3RoLCBwb2ludCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEZJWEVEOgorICAgICAgICAgICAgICAgIGZhc3Rf
d29ya2VkID0gRmFzdEZpeGVkRHRvYSh2LCByZXF1ZXN0ZWRfZGlnaXRzLCB2ZWN0b3IsIGxlbmd0
aCwgcG9pbnQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBQUkVD
SVNJT046CisgICAgICAgICAgICAgICAgZmFzdF93b3JrZWQgPSBGYXN0RHRvYSh2LCBGQVNUX0RU
T0FfUFJFQ0lTSU9OLCByZXF1ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmVjdG9yLCBsZW5ndGgsIHBvaW50KTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgICAgICAgICBmYXN0X3dvcmtlZCA9IGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIGlmIChmYXN0X3dvcmtlZCkgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgLy8gSWYgdGhl
IGZhc3QgZHRvYSBkaWRuJ3Qgc3VjY2VlZCB1c2UgdGhlIHNsb3dlciBiaWdudW0gdmVyc2lvbi4K
KyAgICAgICAgQmlnbnVtRHRvYU1vZGUgYmlnbnVtX21vZGUgPSBEdG9hVG9CaWdudW1EdG9hTW9k
ZShtb2RlKTsKKyAgICAgICAgQmlnbnVtRHRvYSh2LCBiaWdudW1fbW9kZSwgcmVxdWVzdGVkX2Rp
Z2l0cywgdmVjdG9yLCBsZW5ndGgsIHBvaW50KTsKKyAgICAgICAgdmVjdG9yWypsZW5ndGhdID0g
J1wwJzsKKyAgICB9CisgICAgCisgICAgCisgICAgLy8gQ29uc3VtZXMgdGhlIGdpdmVuIHN1YnN0
cmluZyBmcm9tIHRoZSBpdGVyYXRvci4KKyAgICAvLyBSZXR1cm5zIGZhbHNlLCBpZiB0aGUgc3Vi
c3RyaW5nIGRvZXMgbm90IG1hdGNoLgorICAgIHN0YXRpYyBib29sIENvbnN1bWVTdWJTdHJpbmco
Y29uc3QgY2hhcioqIGN1cnJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyKiBlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyKiBzdWJzdHJpbmcpIHsKKyAgICAgICAgQVNTRVJUKCoqY3VycmVudCA9PSAqc3Vic3RyaW5n
KTsKKyAgICAgICAgZm9yIChzdWJzdHJpbmcrKzsgKnN1YnN0cmluZyAhPSAnXDAnOyBzdWJzdHJp
bmcrKykgeworICAgICAgICAgICAgKysqY3VycmVudDsKKyAgICAgICAgICAgIGlmICgqY3VycmVu
dCA9PSBlbmQgfHwgKipjdXJyZW50ICE9ICpzdWJzdHJpbmcpIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICArKypjdXJyZW50OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgCisgICAgCisgICAgLy8gTWF4aW11bSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIGlu
IGRlY2ltYWwgcmVwcmVzZW50YXRpb24uCisgICAgLy8gVGhlIGxvbmdlc3QgcG9zc2libGUgZG91
YmxlIGluIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gaXMKKyAgICAvLyAoMl41MyAtIDEpICogMiBe
IC0xMDc0IHRoYXQgaXMgKDIgXiA1MyAtIDEpICogNSBeIDEwNzQgLyAxMCBeIDEwNzQKKyAgICAv
LyAoNzY4IGRpZ2l0cykuIElmIHdlIHBhcnNlIGEgbnVtYmVyIHdob3NlIGZpcnN0IGRpZ2l0cyBh
cmUgZXF1YWwgdG8gYQorICAgIC8vIG1lYW4gb2YgMiBhZGphY2VudCBkb3VibGVzICh0aGF0IGNv
dWxkIGhhdmUgdXAgdG8gNzY5IGRpZ2l0cykgdGhlIHJlc3VsdAorICAgIC8vIG11c3QgYmUgcm91
bmRlZCB0byB0aGUgYmlnZ2VyIG9uZSB1bmxlc3MgdGhlIHRhaWwgY29uc2lzdHMgb2YgemVyb3Ms
IHNvCisgICAgLy8gd2UgZG9uJ3QgbmVlZCB0byBwcmVzZXJ2ZSBhbGwgdGhlIGRpZ2l0cy4KKyAg
ICBjb25zdCBpbnQga01heFNpZ25pZmljYW50RGlnaXRzID0gNzcyOworICAgIAorICAgIAorICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiBhIG5vbnNwYWNlIGZvdW5kIGFuZCBmYWxzZSBpZiB0aGUgZW5k
IGhhcyByZWFjaGVkLgorICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBBZHZhbmNlVG9Ob25zcGFjZShj
b25zdCBjaGFyKiogY3VycmVudCwgY29uc3QgY2hhciogZW5kKSB7CisgICAgICAgIHdoaWxlICgq
Y3VycmVudCAhPSBlbmQpIHsKKyAgICAgICAgICAgIGlmICgqKmN1cnJlbnQgIT0gJyAnKSByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgICsrKmN1cnJlbnQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICAKKyAgICBzdGF0aWMgYm9vbCBpc0RpZ2l0KGlu
dCB4LCBpbnQgcmFkaXgpIHsKKyAgICAgICAgcmV0dXJuICh4ID49ICcwJyAmJiB4IDw9ICc5JyAm
JiB4IDwgJzAnICsgcmFkaXgpCisgICAgICAgIHx8IChyYWRpeCA+IDEwICYmIHggPj0gJ2EnICYm
IHggPCAnYScgKyByYWRpeCAtIDEwKQorICAgICAgICB8fCAocmFkaXggPiAxMCAmJiB4ID49ICdB
JyAmJiB4IDwgJ0EnICsgcmFkaXggLSAxMCk7CisgICAgfQorICAgIAorICAgIAorICAgIHN0YXRp
YyBkb3VibGUgU2lnbmVkWmVybyhib29sIHNpZ24pIHsKKyAgICAgICAgcmV0dXJuIHNpZ24gPyAt
MC4wIDogMC4wOworICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBQYXJzaW5nIGludGVnZXJzIHdp
dGggcmFkaXggMiwgNCwgOCwgMTYsIDMyLiBBc3N1bWVzIGN1cnJlbnQgIT0gZW5kLgorICAgIHRl
bXBsYXRlIDxpbnQgcmFkaXhfbG9nXzI+CisgICAgc3RhdGljIGRvdWJsZSBSYWRpeFN0cmluZ1Rv
RG91YmxlKGNvbnN0IGNoYXIqIGN1cnJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIGVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBzaWduLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGFsbG93X3RyYWlsaW5nX2p1bmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRvdWJsZSBqdW5rX3N0cmluZ192YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcioqIHRyYWlsaW5nX3BvaW50ZXIpIHsKKyAgICAg
ICAgQVNTRVJUKGN1cnJlbnQgIT0gZW5kKTsKKyAgICAgICAgCisgICAgICAgIC8vIFNraXAgbGVh
ZGluZyAwcy4KKyAgICAgICAgd2hpbGUgKCpjdXJyZW50ID09ICcwJykgeworICAgICAgICAgICAg
KytjdXJyZW50OworICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gZW5kKSB7CisgICAgICAgICAg
ICAgICAgKnRyYWlsaW5nX3BvaW50ZXIgPSBlbmQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNp
Z25lZFplcm8oc2lnbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGludDY0X3QgbnVtYmVyID0gMDsKKyAgICAgICAgaW50IGV4cG9uZW50ID0gMDsKKyAgICAg
ICAgY29uc3QgaW50IHJhZGl4ID0gKDEgPDwgcmFkaXhfbG9nXzIpOworICAgICAgICAKKyAgICAg
ICAgZG8geworICAgICAgICAgICAgaW50IGRpZ2l0OworICAgICAgICAgICAgaWYgKCpjdXJyZW50
ID49ICcwJyAmJiAqY3VycmVudCA8PSAnOScgJiYgKmN1cnJlbnQgPCAnMCcgKyByYWRpeCkgewor
ICAgICAgICAgICAgICAgIGRpZ2l0ID0gc3RhdGljX2Nhc3Q8Y2hhcj4oKmN1cnJlbnQpIC0gJzAn
OworICAgICAgICAgICAgfSBlbHNlIGlmIChyYWRpeCA+IDEwICYmICpjdXJyZW50ID49ICdhJyAm
JiAqY3VycmVudCA8ICdhJyArIHJhZGl4IC0gMTApIHsKKyAgICAgICAgICAgICAgICBkaWdpdCA9
IHN0YXRpY19jYXN0PGNoYXI+KCpjdXJyZW50KSAtICdhJyArIDEwOworICAgICAgICAgICAgfSBl
bHNlIGlmIChyYWRpeCA+IDEwICYmICpjdXJyZW50ID49ICdBJyAmJiAqY3VycmVudCA8ICdBJyAr
IHJhZGl4IC0gMTApIHsKKyAgICAgICAgICAgICAgICBkaWdpdCA9IHN0YXRpY19jYXN0PGNoYXI+
KCpjdXJyZW50KSAtICdBJyArIDEwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBpZiAoYWxsb3dfdHJhaWxpbmdfanVuayB8fCAhQWR2YW5jZVRvTm9uc3BhY2UoJmN1cnJl
bnQsIGVuZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgbnVtYmVyID0gbnVtYmVyICogcmFkaXggKyBkaWdpdDsKKyAgICAgICAgICAgIGludCBvdmVy
ZmxvdyA9IHN0YXRpY19jYXN0PGludD4obnVtYmVyID4+IDUzKTsKKyAgICAgICAgICAgIGlmIChv
dmVyZmxvdyAhPSAwKSB7CisgICAgICAgICAgICAgICAgLy8gT3ZlcmZsb3cgb2NjdXJyZWQuIE5l
ZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGRpcmVjdGlvbiB0byByb3VuZCB0aGUKKyAgICAgICAgICAg
ICAgICAvLyByZXN1bHQuCisgICAgICAgICAgICAgICAgaW50IG92ZXJmbG93X2JpdHNfY291bnQg
PSAxOworICAgICAgICAgICAgICAgIHdoaWxlIChvdmVyZmxvdyA+IDEpIHsKKyAgICAgICAgICAg
ICAgICAgICAgb3ZlcmZsb3dfYml0c19jb3VudCsrOworICAgICAgICAgICAgICAgICAgICBvdmVy
ZmxvdyA+Pj0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgaW50IGRyb3BwZWRfYml0c19tYXNrID0gKCgxIDw8IG92ZXJmbG93X2JpdHNfY291
bnQpIC0gMSk7CisgICAgICAgICAgICAgICAgaW50IGRyb3BwZWRfYml0cyA9IHN0YXRpY19jYXN0
PGludD4obnVtYmVyKSAmIGRyb3BwZWRfYml0c19tYXNrOworICAgICAgICAgICAgICAgIG51bWJl
ciA+Pj0gb3ZlcmZsb3dfYml0c19jb3VudDsKKyAgICAgICAgICAgICAgICBleHBvbmVudCA9IG92
ZXJmbG93X2JpdHNfY291bnQ7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYm9v
bCB6ZXJvX3RhaWwgPSB0cnVlOworICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAg
ICAgICAgICAgICAgICAgICsrY3VycmVudDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJl
bnQgPT0gZW5kIHx8ICFpc0RpZ2l0KCpjdXJyZW50LCByYWRpeCkpIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB6ZXJvX3RhaWwgPSB6ZXJvX3RhaWwgJiYgKmN1cnJlbnQgPT0gJzAnOworICAg
ICAgICAgICAgICAgICAgICBleHBvbmVudCArPSByYWRpeF9sb2dfMjsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFhbGxvd190cmFpbGlu
Z19qdW5rICYmIEFkdmFuY2VUb05vbnNwYWNlKCZjdXJyZW50LCBlbmQpKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaW50IG1pZGRsZV92YWx1ZSA9ICgxIDw8
IChvdmVyZmxvd19iaXRzX2NvdW50IC0gMSkpOworICAgICAgICAgICAgICAgIGlmIChkcm9wcGVk
X2JpdHMgPiBtaWRkbGVfdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyKys7ICAv
LyBSb3VuZGluZyB1cC4KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRyb3BwZWRfYml0cyA9
PSBtaWRkbGVfdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUm91bmRpbmcgdG8gZXZl
biB0byBjb25zaXN0ZW5jeSB3aXRoIGRlY2ltYWxzOiBoYWxmLXdheSBjYXNlIHJvdW5kcworICAg
ICAgICAgICAgICAgICAgICAvLyB1cCBpZiBzaWduaWZpY2FudCBwYXJ0IGlzIG9kZCBhbmQgZG93
biBvdGhlcndpc2UuCisgICAgICAgICAgICAgICAgICAgIGlmICgobnVtYmVyICYgMSkgIT0gMCB8
fCAhemVyb190YWlsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIrKzsgIC8vIFJv
dW5kaW5nIHVwLgorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFJvdW5kaW5nIHVwIG1heSBjYXVzZSBv
dmVyZmxvdy4KKyAgICAgICAgICAgICAgICBpZiAoKG51bWJlciAmICgoaW50NjRfdCkxIDw8IDUz
KSkgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICBleHBvbmVudCsrOworICAgICAgICAgICAg
ICAgICAgICBudW1iZXIgPj49IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKytjdXJyZW50OworICAgICAgICB9
IHdoaWxlIChjdXJyZW50ICE9IGVuZCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQobnVtYmVy
IDwgKChpbnQ2NF90KTEgPDwgNTMpKTsKKyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludDY0
X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4obnVtYmVyKSkgPT0gbnVtYmVyKTsKKyAgICAgICAgCisg
ICAgICAgICp0cmFpbGluZ19wb2ludGVyID0gY3VycmVudDsKKyAgICAgICAgCisgICAgICAgIGlm
IChleHBvbmVudCA9PSAwKSB7CisgICAgICAgICAgICBpZiAoc2lnbikgeworICAgICAgICAgICAg
ICAgIGlmIChudW1iZXIgPT0gMCkgcmV0dXJuIC0wLjA7CisgICAgICAgICAgICAgICAgbnVtYmVy
ID0gLW51bWJlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxkb3VibGU+KG51bWJlcik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFTU0VSVChu
dW1iZXIgIT0gMCk7CisgICAgICAgIHJldHVybiBEb3VibGUoRGl5RnAobnVtYmVyLCBleHBvbmVu
dCkpLnZhbHVlKCk7CisgICAgfQorICAgIAorICAgIAorICAgIGRvdWJsZSBTdHJpbmdUb0RvdWJs
ZUNvbnZlcnRlcjo6U3RyaW5nVG9Eb3VibGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBpbnB1dCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGgsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHByb2Nlc3Nl
ZF9jaGFyYWN0ZXJzX2NvdW50KSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGN1cnJlbnQgPSBpbnB1
dDsKKyAgICAgICAgY29uc3QgY2hhciogZW5kID0gaW5wdXQgKyBsZW5ndGg7CisgICAgICAgIAor
ICAgICAgICAqcHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291bnQgPSAwOworICAgICAgICAKKyAgICAg
ICAgY29uc3QgYm9vbCBhbGxvd190cmFpbGluZ19qdW5rID0gKGZsYWdzXyAmIEFMTE9XX1RSQUlM
SU5HX0pVTkspICE9IDA7CisgICAgICAgIGNvbnN0IGJvb2wgYWxsb3dfbGVhZGluZ19zcGFjZXMg
PSAoZmxhZ3NfICYgQUxMT1dfTEVBRElOR19TUEFDRVMpICE9IDA7CisgICAgICAgIGNvbnN0IGJv
b2wgYWxsb3dfdHJhaWxpbmdfc3BhY2VzID0gKGZsYWdzXyAmIEFMTE9XX1RSQUlMSU5HX1NQQUNF
UykgIT0gMDsKKyAgICAgICAgY29uc3QgYm9vbCBhbGxvd19zcGFjZXNfYWZ0ZXJfc2lnbiA9IChm
bGFnc18gJiBBTExPV19TUEFDRVNfQUZURVJfU0lHTikgIT0gMDsKKyAgICAgICAgCisgICAgICAg
IC8vIFRvIG1ha2Ugc3VyZSB0aGF0IGl0ZXJhdG9yIGRlcmVmZXJlbmNpbmcgaXMgdmFsaWQgdGhl
IGZvbGxvd2luZworICAgICAgICAvLyBjb252ZW50aW9uIGlzIHVzZWQ6CisgICAgICAgIC8vIDEu
IEVhY2ggJysrY3VycmVudCcgc3RhdGVtZW50IGlzIGZvbGxvd2VkIGJ5IGNoZWNrIGZvciBlcXVh
bGl0eSB0byAnZW5kJy4KKyAgICAgICAgLy8gMi4gSWYgQWR2YW5jZVRvTm9uc3BhY2UgcmV0dXJu
ZWQgZmFsc2UgdGhlbiBjdXJyZW50ID09IGVuZC4KKyAgICAgICAgLy8gMy4gSWYgJ2N1cnJlbnQn
IGJlY29tZXMgZXF1YWwgdG8gJ2VuZCcgdGhlIGZ1bmN0aW9uIHJldHVybnMgb3IgZ29lcyB0bwor
ICAgICAgICAvLyAncGFyc2luZ19kb25lJy4KKyAgICAgICAgLy8gNC4gJ2N1cnJlbnQnIGlzIG5v
dCBkZXJlZmVyZW5jZWQgYWZ0ZXIgdGhlICdwYXJzaW5nX2RvbmUnIGxhYmVsLgorICAgICAgICAv
LyA1LiBDb2RlIGJlZm9yZSAncGFyc2luZ19kb25lJyBtYXkgcmVseSBvbiAnY3VycmVudCAhPSBl
bmQnLgorICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQpIHJldHVybiBlbXB0eV9zdHJpbmdfdmFs
dWVfOworICAgICAgICAKKyAgICAgICAgaWYgKGFsbG93X2xlYWRpbmdfc3BhY2VzIHx8IGFsbG93
X3RyYWlsaW5nX3NwYWNlcykgeworICAgICAgICAgICAgaWYgKCFBZHZhbmNlVG9Ob25zcGFjZSgm
Y3VycmVudCwgZW5kKSkgeworICAgICAgICAgICAgICAgICpwcm9jZXNzZWRfY2hhcmFjdGVyc19j
b3VudCA9IGN1cnJlbnQgLSBpbnB1dDsKKyAgICAgICAgICAgICAgICByZXR1cm4gZW1wdHlfc3Ry
aW5nX3ZhbHVlXzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghYWxsb3dfbGVhZGlu
Z19zcGFjZXMgJiYgKGlucHV0ICE9IGN1cnJlbnQpKSB7CisgICAgICAgICAgICAgICAgLy8gTm8g
bGVhZGluZyBzcGFjZXMgYWxsb3dlZCwgYnV0IEFkdmFuY2VUb05vbnNwYWNlIG1vdmVkIGZvcndh
cmQuCisgICAgICAgICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gVGhlIGxvbmdlc3QgZm9ybSBv
ZiBzaW1wbGlmaWVkIG51bWJlciBpczogIi08c2lnbmlmaWNhbnQgZGlnaXRzPi4xZVhYWFwwIi4K
KyAgICAgICAgY29uc3QgaW50IGtCdWZmZXJTaXplID0ga01heFNpZ25pZmljYW50RGlnaXRzICsg
MTA7CisgICAgICAgIGNoYXIgYnVmZmVyW2tCdWZmZXJTaXplXTsgIC8vIE5PTElOVDogc2l6ZSBp
cyBrbm93biBhdCBjb21waWxlIHRpbWUuCisgICAgICAgIGludCBidWZmZXJfcG9zID0gMDsKKyAg
ICAgICAgCisgICAgICAgIC8vIEV4cG9uZW50IHdpbGwgYmUgYWRqdXN0ZWQgaWYgaW5zaWduaWZp
Y2FudCBkaWdpdHMgb2YgdGhlIGludGVnZXIgcGFydAorICAgICAgICAvLyBvciBpbnNpZ25pZmlj
YW50IGxlYWRpbmcgemVyb3Mgb2YgdGhlIGZyYWN0aW9uYWwgcGFydCBhcmUgZHJvcHBlZC4KKyAg
ICAgICAgaW50IGV4cG9uZW50ID0gMDsKKyAgICAgICAgaW50IHNpZ25pZmljYW50X2RpZ2l0cyA9
IDA7CisgICAgICAgIGludCBpbnNpZ25pZmljYW50X2RpZ2l0cyA9IDA7CisgICAgICAgIGJvb2wg
bm9uemVyb19kaWdpdF9kcm9wcGVkID0gZmFsc2U7CisgICAgICAgIGJvb2wgZnJhY3Rpb25hbF9w
YXJ0ID0gZmFsc2U7CisgICAgICAgIAorICAgICAgICBib29sIHNpZ24gPSBmYWxzZTsKKyAgICAg
ICAgCisgICAgICAgIGlmICgqY3VycmVudCA9PSAnKycgfHwgKmN1cnJlbnQgPT0gJy0nKSB7Cisg
ICAgICAgICAgICBzaWduID0gKCpjdXJyZW50ID09ICctJyk7CisgICAgICAgICAgICArK2N1cnJl
bnQ7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBuZXh0X25vbl9zcGFjZSA9IGN1cnJlbnQ7Cisg
ICAgICAgICAgICAvLyBTa2lwIGZvbGxvd2luZyBzcGFjZXMgKGlmIGFsbG93ZWQpLgorICAgICAg
ICAgICAgaWYgKCFBZHZhbmNlVG9Ob25zcGFjZSgmbmV4dF9ub25fc3BhY2UsIGVuZCkpIHJldHVy
biBqdW5rX3N0cmluZ192YWx1ZV87CisgICAgICAgICAgICBpZiAoIWFsbG93X3NwYWNlc19hZnRl
cl9zaWduICYmIChjdXJyZW50ICE9IG5leHRfbm9uX3NwYWNlKSkgeworICAgICAgICAgICAgICAg
IHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87CisgICAgICAgICAgICB9CisgICAgICAgICAgICBj
dXJyZW50ID0gbmV4dF9ub25fc3BhY2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
IChpbmZpbml0eV9zeW1ib2xfICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGlmICgqY3VycmVudCA9
PSBpbmZpbml0eV9zeW1ib2xfWzBdKSB7CisgICAgICAgICAgICAgICAgaWYgKCFDb25zdW1lU3Vi
U3RyaW5nKCZjdXJyZW50LCBlbmQsIGluZmluaXR5X3N5bWJvbF8pKSB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghKGFsbG93X3RyYWlsaW5nX3NwYWNl
cyB8fCBhbGxvd190cmFpbGluZ19qdW5rKSAmJiAoY3VycmVudCAhPSBlbmQpKSB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmICghYWxsb3dfdHJhaWxpbmdfanVuayAmJiBBZHZhbmNlVG9O
b25zcGFjZSgmY3VycmVudCwgZW5kKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4ganVu
a19zdHJpbmdfdmFsdWVfOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoYnVmZmVyX3BvcyA9PSAwKTsKKyAgICAgICAgICAgICAgICAq
cHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291bnQgPSBjdXJyZW50IC0gaW5wdXQ7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHNpZ24gPyAtRG91YmxlOjpJbmZpbml0eSgpIDogRG91YmxlOjpJbmZpbml0
eSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobmFu
X3N5bWJvbF8gIT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKCpjdXJyZW50ID09IG5hbl9zeW1i
b2xfWzBdKSB7CisgICAgICAgICAgICAgICAgaWYgKCFDb25zdW1lU3ViU3RyaW5nKCZjdXJyZW50
LCBlbmQsIG5hbl9zeW1ib2xfKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4ganVua19z
dHJpbmdfdmFsdWVfOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBpZiAoIShhbGxvd190cmFpbGluZ19zcGFjZXMgfHwgYWxsb3dfdHJhaWxpbmdf
anVuaykgJiYgKGN1cnJlbnQgIT0gZW5kKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
anVua19zdHJpbmdfdmFsdWVfOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAoIWFsbG93X3RyYWlsaW5nX2p1bmsgJiYgQWR2YW5jZVRvTm9uc3BhY2UoJmN1cnJlbnQsIGVu
ZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQVNTRVJU
KGJ1ZmZlcl9wb3MgPT0gMCk7CisgICAgICAgICAgICAgICAgKnByb2Nlc3NlZF9jaGFyYWN0ZXJz
X2NvdW50ID0gY3VycmVudCAtIGlucHV0OworICAgICAgICAgICAgICAgIHJldHVybiBzaWduID8g
LURvdWJsZTo6TmFOKCkgOiBEb3VibGU6Ok5hTigpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBib29sIGxlYWRpbmdfemVybyA9IGZhbHNlOworICAgICAgICBp
ZiAoKmN1cnJlbnQgPT0gJzAnKSB7CisgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgICAg
ICBpZiAoY3VycmVudCA9PSBlbmQpIHsKKyAgICAgICAgICAgICAgICAqcHJvY2Vzc2VkX2NoYXJh
Y3RlcnNfY291bnQgPSBjdXJyZW50IC0gaW5wdXQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNp
Z25lZFplcm8oc2lnbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGxlYWRpbmdfemVybyA9IHRydWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEl0IGNv
dWxkIGJlIGhleGFkZWNpbWFsIHZhbHVlLgorICAgICAgICAgICAgaWYgKChmbGFnc18gJiBBTExP
V19IRVgpICYmICgqY3VycmVudCA9PSAneCcgfHwgKmN1cnJlbnQgPT0gJ1gnKSkgeworICAgICAg
ICAgICAgICAgICsrY3VycmVudDsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQg
fHwgIWlzRGlnaXQoKmN1cnJlbnQsIDE2KSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
anVua19zdHJpbmdfdmFsdWVfOyAgLy8gIjB4Ii4KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdGFpbF9wb2ludGVyID0gTlVM
TDsKKyAgICAgICAgICAgICAgICBkb3VibGUgcmVzdWx0ID0gUmFkaXhTdHJpbmdUb0RvdWJsZTw0
PihjdXJyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaWduLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFsbG93X3RyYWlsaW5nX2p1bmssCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVua19zdHJpbmdfdmFsdWVf
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZ0YWlsX3BvaW50ZXIpOworICAgICAgICAgICAgICAgIGlmICh0YWlsX3BvaW50ZXIgIT0gTlVM
TCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoYWxsb3dfdHJhaWxpbmdfc3BhY2VzKSBBZHZh
bmNlVG9Ob25zcGFjZSgmdGFpbF9wb2ludGVyLCBlbmQpOworICAgICAgICAgICAgICAgICAgICAq
cHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291bnQgPSB0YWlsX3BvaW50ZXIgLSBpbnB1dDsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSWdub3JlIGxlYWRpbmcgemVyb3MgaW4g
dGhlIGludGVnZXIgcGFydC4KKyAgICAgICAgICAgIHdoaWxlICgqY3VycmVudCA9PSAnMCcpIHsK
KyAgICAgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQg
PT0gZW5kKSB7CisgICAgICAgICAgICAgICAgICAgICpwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3Vu
dCA9IGN1cnJlbnQgLSBpbnB1dDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNpZ25lZFpl
cm8oc2lnbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBib29sIG9jdGFsID0gbGVhZGluZ196ZXJvICYmIChmbGFnc18gJiBB
TExPV19PQ1RBTFMpICE9IDA7CisgICAgICAgIAorICAgICAgICAvLyBDb3B5IHNpZ25pZmljYW50
IGRpZ2l0cyBvZiB0aGUgaW50ZWdlciBwYXJ0IChpZiBhbnkpIHRvIHRoZSBidWZmZXIuCisgICAg
ICAgIHdoaWxlICgqY3VycmVudCA+PSAnMCcgJiYgKmN1cnJlbnQgPD0gJzknKSB7CisgICAgICAg
ICAgICBpZiAoc2lnbmlmaWNhbnRfZGlnaXRzIDwga01heFNpZ25pZmljYW50RGlnaXRzKSB7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKGJ1ZmZlcl9wb3MgPCBrQnVmZmVyU2l6ZSk7CisgICAgICAg
ICAgICAgICAgYnVmZmVyW2J1ZmZlcl9wb3MrK10gPSBzdGF0aWNfY2FzdDxjaGFyPigqY3VycmVu
dCk7CisgICAgICAgICAgICAgICAgc2lnbmlmaWNhbnRfZGlnaXRzKys7CisgICAgICAgICAgICAg
ICAgLy8gV2lsbCBsYXRlciBjaGVjayBpZiBpdCdzIGFuIG9jdGFsIGluIHRoZSBidWZmZXIuCisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGluc2lnbmlmaWNhbnRfZGlnaXRz
Kys7ICAvLyBNb3ZlIHRoZSBkaWdpdCBpbnRvIHRoZSBleHBvbmVudGlhbCBwYXJ0LgorICAgICAg
ICAgICAgICAgIG5vbnplcm9fZGlnaXRfZHJvcHBlZCA9IG5vbnplcm9fZGlnaXRfZHJvcHBlZCB8
fCAqY3VycmVudCAhPSAnMCc7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvY3RhbCA9IG9j
dGFsICYmICpjdXJyZW50IDwgJzgnOworICAgICAgICAgICAgKytjdXJyZW50OworICAgICAgICAg
ICAgaWYgKGN1cnJlbnQgPT0gZW5kKSBnb3RvIHBhcnNpbmdfZG9uZTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaWYgKHNpZ25pZmljYW50X2RpZ2l0cyA9PSAwKSB7CisgICAgICAgICAg
ICBvY3RhbCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoKmN1cnJl
bnQgPT0gJy4nKSB7CisgICAgICAgICAgICBpZiAob2N0YWwgJiYgIWFsbG93X3RyYWlsaW5nX2p1
bmspIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87CisgICAgICAgICAgICBpZiAob2N0YWwpIGdv
dG8gcGFyc2luZ19kb25lOworICAgICAgICAgICAgCisgICAgICAgICAgICArK2N1cnJlbnQ7Cisg
ICAgICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2ln
bmlmaWNhbnRfZGlnaXRzID09IDAgJiYgIWxlYWRpbmdfemVybykgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIGdvdG8gcGFyc2luZ19kb25lOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHNpZ25pZmlj
YW50X2RpZ2l0cyA9PSAwKSB7CisgICAgICAgICAgICAgICAgLy8gb2N0YWwgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAvLyBJbnRlZ2VyIHBhcnQgY29uc2lzdHMgb2YgMCBvciBpcyBhYnNlbnQu
IFNpZ25pZmljYW50IGRpZ2l0cyBzdGFydCBhZnRlcgorICAgICAgICAgICAgICAgIC8vIGxlYWRp
bmcgemVyb3MgKGlmIGFueSkuCisgICAgICAgICAgICAgICAgd2hpbGUgKCpjdXJyZW50ID09ICcw
JykgeworICAgICAgICAgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgICAgICAgICAgICAg
IGlmIChjdXJyZW50ID09IGVuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgKnByb2Nlc3Nl
ZF9jaGFyYWN0ZXJzX2NvdW50ID0gY3VycmVudCAtIGlucHV0OworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFNpZ25lZFplcm8oc2lnbik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgZXhwb25lbnQtLTsgIC8vIE1vdmUgdGhpcyAwIGludG8gdGhlIGV4
cG9uZW50LgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgLy8gV2UgZG9uJ3QgZW1pdCBhICcuJywgYnV0IGFkanVzdCB0aGUgZXhwb25l
bnQgaW5zdGVhZC4KKyAgICAgICAgICAgIGZyYWN0aW9uYWxfcGFydCA9IHRydWU7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgZnJhY3Rpb25hbCBwYXJ0LgorICAgICAg
ICAgICAgd2hpbGUgKCpjdXJyZW50ID49ICcwJyAmJiAqY3VycmVudCA8PSAnOScpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoc2lnbmlmaWNhbnRfZGlnaXRzIDwga01heFNpZ25pZmljYW50RGlnaXRz
KSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChidWZmZXJfcG9zIDwga0J1ZmZlclNpemUp
OworICAgICAgICAgICAgICAgICAgICBidWZmZXJbYnVmZmVyX3BvcysrXSA9IHN0YXRpY19jYXN0
PGNoYXI+KCpjdXJyZW50KTsKKyAgICAgICAgICAgICAgICAgICAgc2lnbmlmaWNhbnRfZGlnaXRz
Kys7CisgICAgICAgICAgICAgICAgICAgIGV4cG9uZW50LS07CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlIGluc2lnbmlmaWNhbnQgZGlnaXRz
IGluIHRoZSBmcmFjdGlvbmFsIHBhcnQuCisgICAgICAgICAgICAgICAgICAgIG5vbnplcm9fZGln
aXRfZHJvcHBlZCA9IG5vbnplcm9fZGlnaXRfZHJvcHBlZCB8fCAqY3VycmVudCAhPSAnMCc7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICsrY3VycmVudDsKKyAgICAgICAgICAg
ICAgICBpZiAoY3VycmVudCA9PSBlbmQpIGdvdG8gcGFyc2luZ19kb25lOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWxlYWRpbmdfemVybyAmJiBleHBv
bmVudCA9PSAwICYmIHNpZ25pZmljYW50X2RpZ2l0cyA9PSAwKSB7CisgICAgICAgICAgICAvLyBJ
ZiBsZWFkaW5nX3plcm9zIGlzIHRydWUgdGhlbiB0aGUgc3RyaW5nIGNvbnRhaW5zIHplcm9zLgor
ICAgICAgICAgICAgLy8gSWYgZXhwb25lbnQgPCAwIHRoZW4gc3RyaW5nIHdhcyBbKy1dXC4wKi4u
LgorICAgICAgICAgICAgLy8gSWYgc2lnbmlmaWNhbnRfZGlnaXRzICE9IDAgdGhlIHN0cmluZyBp
cyBub3QgZXF1YWwgdG8gMC4KKyAgICAgICAgICAgIC8vIE90aGVyd2lzZSB0aGVyZSBhcmUgbm8g
ZGlnaXRzIGluIHRoZSBzdHJpbmcuCisgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFs
dWVfOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBQYXJzZSBleHBvbmVudGlhbCBw
YXJ0LgorICAgICAgICBpZiAoKmN1cnJlbnQgPT0gJ2UnIHx8ICpjdXJyZW50ID09ICdFJykgewor
ICAgICAgICAgICAgaWYgKG9jdGFsICYmICFhbGxvd190cmFpbGluZ19qdW5rKSByZXR1cm4ganVu
a19zdHJpbmdfdmFsdWVfOworICAgICAgICAgICAgaWYgKG9jdGFsKSBnb3RvIHBhcnNpbmdfZG9u
ZTsKKyAgICAgICAgICAgICsrY3VycmVudDsKKyAgICAgICAgICAgIGlmIChjdXJyZW50ID09IGVu
ZCkgeworICAgICAgICAgICAgICAgIGlmIChhbGxvd190cmFpbGluZ19qdW5rKSB7CisgICAgICAg
ICAgICAgICAgICAgIGdvdG8gcGFyc2luZ19kb25lOworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgY2hhciBzaWduID0gJysnOwor
ICAgICAgICAgICAgaWYgKCpjdXJyZW50ID09ICcrJyB8fCAqY3VycmVudCA9PSAnLScpIHsKKyAg
ICAgICAgICAgICAgICBzaWduID0gc3RhdGljX2Nhc3Q8Y2hhcj4oKmN1cnJlbnQpOworICAgICAg
ICAgICAgICAgICsrY3VycmVudDsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFsbG93X3RyYWlsaW5nX2p1bmspIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGdvdG8gcGFyc2luZ19kb25lOworICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3Zh
bHVlXzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gZW5kIHx8ICpj
dXJyZW50IDwgJzAnIHx8ICpjdXJyZW50ID4gJzknKSB7CisgICAgICAgICAgICAgICAgaWYgKGFs
bG93X3RyYWlsaW5nX2p1bmspIHsKKyAgICAgICAgICAgICAgICAgICAgZ290byBwYXJzaW5nX2Rv
bmU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGp1bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSBJTlRfTUFY
IC8gMjsKKyAgICAgICAgICAgIEFTU0VSVCgtbWF4X2V4cG9uZW50IC8gMiA8PSBleHBvbmVudCAm
JiBleHBvbmVudCA8PSBtYXhfZXhwb25lbnQgLyAyKTsKKyAgICAgICAgICAgIGludCBudW0gPSAw
OworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIC8vIENoZWNrIG92ZXJmbG93Lgor
ICAgICAgICAgICAgICAgIGludCBkaWdpdCA9ICpjdXJyZW50IC0gJzAnOworICAgICAgICAgICAg
ICAgIGlmIChudW0gPj0gbWF4X2V4cG9uZW50IC8gMTAKKyAgICAgICAgICAgICAgICAgICAgJiYg
IShudW0gPT0gbWF4X2V4cG9uZW50IC8gMTAgJiYgZGlnaXQgPD0gbWF4X2V4cG9uZW50ICUgMTAp
KSB7CisgICAgICAgICAgICAgICAgICAgIG51bSA9IG1heF9leHBvbmVudDsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBudW0gPSBudW0gKiAxMCArIGRpZ2l0
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAg
ICAgICB9IHdoaWxlIChjdXJyZW50ICE9IGVuZCAmJiAqY3VycmVudCA+PSAnMCcgJiYgKmN1cnJl
bnQgPD0gJzknKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZXhwb25lbnQgKz0gKHNpZ24g
PT0gJy0nID8gLW51bSA6IG51bSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICgh
KGFsbG93X3RyYWlsaW5nX3NwYWNlcyB8fCBhbGxvd190cmFpbGluZ19qdW5rKSAmJiAoY3VycmVu
dCAhPSBlbmQpKSB7CisgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAg
ICAgICB9CisgICAgICAgIGlmICghYWxsb3dfdHJhaWxpbmdfanVuayAmJiBBZHZhbmNlVG9Ob25z
cGFjZSgmY3VycmVudCwgZW5kKSkgeworICAgICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3Zh
bHVlXzsKKyAgICAgICAgfQorICAgICAgICBpZiAoYWxsb3dfdHJhaWxpbmdfc3BhY2VzKSB7Cisg
ICAgICAgICAgICBBZHZhbmNlVG9Ob25zcGFjZSgmY3VycmVudCwgZW5kKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICBwYXJzaW5nX2RvbmU6CisgICAgICAgIGV4cG9uZW50ICs9IGluc2lnbmlm
aWNhbnRfZGlnaXRzOworICAgICAgICAKKyAgICAgICAgaWYgKG9jdGFsKSB7CisgICAgICAgICAg
ICBkb3VibGUgcmVzdWx0OworICAgICAgICAgICAgY29uc3QgY2hhciogdGFpbF9wb2ludGVyID0g
TlVMTDsKKyAgICAgICAgICAgIHJlc3VsdCA9IFJhZGl4U3RyaW5nVG9Eb3VibGU8Mz4oYnVmZmVy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKyBi
dWZmZXJfcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aWduLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd190
cmFpbGluZ19qdW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqdW5rX3N0cmluZ192YWx1ZV8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZ0YWlsX3BvaW50ZXIpOworICAgICAgICAgICAgQVNTRVJUKHRhaWxfcG9pbnRl
ciAhPSBOVUxMKTsKKyAgICAgICAgICAgICpwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCA9IGN1
cnJlbnQgLSBpbnB1dDsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGlmIChub256ZXJvX2RpZ2l0X2Ryb3BwZWQpIHsKKyAgICAgICAgICAg
IGJ1ZmZlcltidWZmZXJfcG9zKytdID0gJzEnOworICAgICAgICAgICAgZXhwb25lbnQtLTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJUKGJ1ZmZlcl9wb3MgPCBrQnVmZmVyU2l6
ZSk7CisgICAgICAgIGJ1ZmZlcltidWZmZXJfcG9zXSA9ICdcMCc7CisgICAgICAgIAorICAgICAg
ICBkb3VibGUgY29udmVydGVkID0gU3RydG9kKFZlY3Rvcjxjb25zdCBjaGFyPihidWZmZXIsIGJ1
ZmZlcl9wb3MpLCBleHBvbmVudCk7CisgICAgICAgICpwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3Vu
dCA9IGN1cnJlbnQgLSBpbnB1dDsKKyAgICAgICAgcmV0dXJuIHNpZ24/IC1jb252ZXJ0ZWQ6IGNv
bnZlcnRlZDsKKyAgICB9CisgICAgCit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kb3VibGUtY29udmVy
c2lvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9u
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNDVjMzBkNzkwYzZmNGQ2ODNmOTYzMjdiN2I1MTdmOWU2ZmIwNTBlNwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kb3VibGUt
Y29udmVyc2lvbi5oCkBAIC0wLDAgKzEsNDk4IEBACisvLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjgg
cHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
Ky8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8K
Ky8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKKyNpZm5kZWYgRE9VQkxFX0NPTlZFUlNJT05fRE9VQkxFX0NPTlZFUlNJT05fSF8KKyNkZWZp
bmUgRE9VQkxFX0NPTlZFUlNJT05fRE9VQkxFX0NPTlZFUlNJT05fSF8KKworI2luY2x1ZGUgInV0
aWxzLmgiCisKK25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgY2xhc3Mg
RG91YmxlVG9TdHJpbmdDb252ZXJ0ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgLy8gV2hlbiBj
YWxsaW5nIFRvRml4ZWQgd2l0aCBhIGRvdWJsZSA+IDEwXmtNYXhGaXhlZERpZ2l0c0JlZm9yZVBv
aW50CisgICAgICAgIC8vIG9yIGEgcmVxdWVzdGVkX2RpZ2l0cyBwYXJhbWV0ZXIgPiBrTWF4Rml4
ZWREaWdpdHNBZnRlclBvaW50IHRoZW4gdGhlCisgICAgICAgIC8vIGZ1bmN0aW9uIHJldHVybnMg
ZmFsc2UuCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQga01heEZpeGVkRGlnaXRzQmVmb3JlUG9p
bnQgPSA2MDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBrTWF4Rml4ZWREaWdpdHNBZnRlclBv
aW50ID0gNjA7CisgICAgICAgIAorICAgICAgICAvLyBXaGVuIGNhbGxpbmcgVG9FeHBvbmVudGlh
bCB3aXRoIGEgcmVxdWVzdGVkX2RpZ2l0cworICAgICAgICAvLyBwYXJhbWV0ZXIgPiBrTWF4RXhw
b25lbnRpYWxEaWdpdHMgdGhlbiB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZS4KKyAgICAgICAg
c3RhdGljIGNvbnN0IGludCBrTWF4RXhwb25lbnRpYWxEaWdpdHMgPSAxMjA7CisgICAgICAgIAor
ICAgICAgICAvLyBXaGVuIGNhbGxpbmcgVG9QcmVjaXNpb24gd2l0aCBhIHJlcXVlc3RlZF9kaWdp
dHMKKyAgICAgICAgLy8gcGFyYW1ldGVyIDwga01pblByZWNpc2lvbkRpZ2l0cyBvciByZXF1ZXN0
ZWRfZGlnaXRzID4ga01heFByZWNpc2lvbkRpZ2l0cworICAgICAgICAvLyB0aGVuIHRoZSBmdW5j
dGlvbiByZXR1cm5zIGZhbHNlLgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtNaW5QcmVjaXNp
b25EaWdpdHMgPSAxOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtNYXhQcmVjaXNpb25EaWdp
dHMgPSAxMjA7CisgICAgICAgIAorICAgICAgICBlbnVtIEZsYWdzIHsKKyAgICAgICAgICAgIE5P
X0ZMQUdTID0gMCwKKyAgICAgICAgICAgIEVNSVRfUE9TSVRJVkVfRVhQT05FTlRfU0lHTiA9IDEs
CisgICAgICAgICAgICBFTUlUX1RSQUlMSU5HX0RFQ0lNQUxfUE9JTlQgPSAyLAorICAgICAgICAg
ICAgRU1JVF9UUkFJTElOR19aRVJPX0FGVEVSX1BPSU5UID0gNCwKKyAgICAgICAgICAgIFVOSVFV
RV9aRVJPID0gOAorICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgLy8gRmxhZ3Mgc2hvdWxk
IGJlIGEgYml0LW9yIGNvbWJpbmF0aW9uIG9mIHRoZSBwb3NzaWJsZSBGbGFncy1lbnVtLgorICAg
ICAgICAvLyAgLSBOT19GTEFHUzogbm8gc3BlY2lhbCBmbGFncy4KKyAgICAgICAgLy8gIC0gRU1J
VF9QT1NJVElWRV9FWFBPTkVOVF9TSUdOOiB3aGVuIHRoZSBudW1iZXIgaXMgY29udmVydGVkIGlu
dG8gZXhwb25lbnQKKyAgICAgICAgLy8gICAgZm9ybSwgZW1pdHMgYSAnKycgZm9yIHBvc2l0aXZl
IGV4cG9uZW50cy4gRXhhbXBsZTogMS4yZSsyLgorICAgICAgICAvLyAgLSBFTUlUX1RSQUlMSU5H
X0RFQ0lNQUxfUE9JTlQ6IHdoZW4gdGhlIGlucHV0IG51bWJlciBpcyBhbiBpbnRlZ2VyIGFuZCBp
cworICAgICAgICAvLyAgICBjb252ZXJ0ZWQgaW50byBkZWNpbWFsIGZvcm1hdCB0aGVuIGEgdHJh
aWxpbmcgZGVjaW1hbCBwb2ludCBpcyBhcHBlbmRlZC4KKyAgICAgICAgLy8gICAgRXhhbXBsZTog
MjM0NS4wIGlzIGNvbnZlcnRlZCB0byAiMjM0NS4iLgorICAgICAgICAvLyAgLSBFTUlUX1RSQUlM
SU5HX1pFUk9fQUZURVJfUE9JTlQ6IGluIGFkZGl0aW9uIHRvIGEgdHJhaWxpbmcgZGVjaW1hbCBw
b2ludAorICAgICAgICAvLyAgICBlbWl0cyBhIHRyYWlsaW5nICcwJy1jaGFyYWN0ZXIuIFRoaXMg
ZmxhZyByZXF1aXJlcyB0aGUKKyAgICAgICAgLy8gICAgRVhNSVRfVFJBSUxJTkdfREVDSU1BTF9Q
T0lOVCBmbGFnLgorICAgICAgICAvLyAgICBFeGFtcGxlOiAyMzQ1LjAgaXMgY29udmVydGVkIHRv
ICIyMzQ1LjAiLgorICAgICAgICAvLyAgLSBVTklRVUVfWkVSTzogIi0wLjAiIGlzIGNvbnZlcnRl
ZCB0byAiMC4wIi4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSW5maW5pdHkgc3ltYm9sIGFuZCBu
YW5fc3ltYm9sIHByb3ZpZGUgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3IgdGhlc2UKKyAg
ICAgICAgLy8gc3BlY2lhbCB2YWx1ZXMuIElmIHRoZSBzdHJpbmcgaXMgTlVMTCBhbmQgdGhlIHNw
ZWNpYWwgdmFsdWUgaXMgZW5jb3VudGVyZWQKKyAgICAgICAgLy8gdGhlbiB0aGUgY29udmVyc2lv
biBmdW5jdGlvbnMgcmV0dXJuIGZhbHNlLgorICAgICAgICAvLworICAgICAgICAvLyBUaGUgZXhw
b25lbnRfY2hhcmFjdGVyIGlzIHVzZWQgaW4gZXhwb25lbnRpYWwgcmVwcmVzZW50YXRpb25zLiBJ
dCBpcworICAgICAgICAvLyB1c3VhbGx5ICdlJyBvciAnRScuCisgICAgICAgIC8vCisgICAgICAg
IC8vIFdoZW4gY29udmVydGluZyB0byB0aGUgc2hvcnRlc3QgcmVwcmVzZW50YXRpb24gdGhlIGNv
bnZlcnRlciB3aWxsCisgICAgICAgIC8vIHJlcHJlc2VudCBpbnB1dCBudW1iZXJzIGluIGRlY2lt
YWwgZm9ybWF0IGlmIHRoZXkgYXJlIGluIHRoZSBpbnRlcnZhbAorICAgICAgICAvLyBbMTBeZGVj
aW1hbF9pbl9zaG9ydGVzdF9sb3c7IDEwXmRlY2ltYWxfaW5fc2hvcnRlc3RfaGlnaFsKKyAgICAg
ICAgLy8gICAgKGxvd2VyIGJvdW5kYXJ5IGluY2x1ZGVkLCBncmVhdGVyIGJvdW5kYXJ5IGV4Y2x1
ZGVkKS4KKyAgICAgICAgLy8gRXhhbXBsZTogd2l0aCBkZWNpbWFsX2luX3Nob3J0ZXN0X2xvdyA9
IC02IGFuZAorICAgICAgICAvLyAgICAgICAgICAgICAgIGRlY2ltYWxfaW5fc2hvcnRlc3RfaGln
aCA9IDIxOgorICAgICAgICAvLyAgIFRvU2hvcnRlc3QoMC4wMDAwMDEpICAtPiAiMC4wMDAwMDEi
CisgICAgICAgIC8vICAgVG9TaG9ydGVzdCgwLjAwMDAwMDEpIC0+ICIxZS03IgorICAgICAgICAv
LyAgIFRvU2hvcnRlc3QoMTExMTExMTExMTExMTExMTExMTExLjApICAtPiAiMTExMTExMTExMTEx
MTExMTEwMDAwIgorICAgICAgICAvLyAgIFRvU2hvcnRlc3QoMTAwMDAwMDAwMDAwMDAwMDAwMDAw
LjApICAtPiAiMTAwMDAwMDAwMDAwMDAwMDAwMDAwIgorICAgICAgICAvLyAgIFRvU2hvcnRlc3Qo
MTExMTExMTExMTExMTExMTExMTExMS4wKSAtPiAiMS4xMTExMTExMTExMTExMTExZSsyMSIKKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gV2hlbiBjb252ZXJ0aW5nIHRvIHByZWNpc2lvbiBtb2RlIHRo
ZSBjb252ZXJ0ZXIgbWF5IGFkZAorICAgICAgICAvLyBtYXhfbGVhZGluZ19wYWRkaW5nX3plcm9l
cyBiZWZvcmUgcmV0dXJuaW5nIHRoZSBudW1iZXIgaW4gZXhwb25lbnRpYWwKKyAgICAgICAgLy8g
Zm9ybWF0LgorICAgICAgICAvLyBFeGFtcGxlIHdpdGggbWF4X2xlYWRpbmdfcGFkZGluZ196ZXJv
ZXNfaW5fcHJlY2lzaW9uX21vZGUgPSA2LgorICAgICAgICAvLyAgIFRvUHJlY2lzaW9uKDAuMDAw
MDAxMjM0NSwgMikgLT4gIjAuMDAwMDAxMiIKKyAgICAgICAgLy8gICBUb1ByZWNpc2lvbigwLjAw
MDAwMDEyMzQ1LCAyKSAtPiAiMS4yZS03IgorICAgICAgICAvLyBTaW1pbGFyaWx5IHRoZSBjb252
ZXJ0ZXIgbWF5IGFkZCB1cCB0bworICAgICAgICAvLyBtYXhfdHJhaWxpbmdfcGFkZGluZ196ZXJv
ZXNfaW5fcHJlY2lzaW9uX21vZGUgaW4gcHJlY2lzaW9uIG1vZGUgdG8gYXZvaWQKKyAgICAgICAg
Ly8gcmV0dXJuaW5nIGFuIGV4cG9uZW50aWFsIHJlcHJlc2VudGF0aW9uLiBBIHplcm8gYWRkZWQg
YnkgdGhlCisgICAgICAgIC8vIEVNSVRfVFJBSUxJTkdfWkVST19BRlRFUl9QT0lOVCBmbGFnIGlz
IGNvdW50ZWQgZm9yIHRoaXMgbGltaXQuCisgICAgICAgIC8vIEV4YW1wbGVzIGZvciBtYXhfdHJh
aWxpbmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGUgPSAxOgorICAgICAgICAvLyAg
IFRvUHJlY2lzaW9uKDIzMC4wLCAyKSAtPiAiMjMwIgorICAgICAgICAvLyAgIFRvUHJlY2lzaW9u
KDIzMC4wLCAyKSAtPiAiMjMwLiIgIHdpdGggRU1JVF9UUkFJTElOR19ERUNJTUFMX1BPSU5ULgor
ICAgICAgICAvLyAgIFRvUHJlY2lzaW9uKDIzMC4wLCAyKSAtPiAiMi4zZTIiIHdpdGggRU1JVF9U
UkFJTElOR19aRVJPX0FGVEVSX1BPSU5ULgorICAgICAgICBEb3VibGVUb1N0cmluZ0NvbnZlcnRl
cihpbnQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IGluZmluaXR5X3N5bWJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciogbmFuX3N5bWJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBl
eHBvbmVudF9jaGFyYWN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBk
ZWNpbWFsX2luX3Nob3J0ZXN0X2xvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGRlY2ltYWxfaW5fc2hvcnRlc3RfaGlnaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IG1heF9sZWFkaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2RlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWF4X3RyYWlsaW5nX3BhZGRpbmdf
emVyb2VzX2luX3ByZWNpc2lvbl9tb2RlKQorICAgICAgICA6IGZsYWdzXyhmbGFncyksCisgICAg
ICAgIGluZmluaXR5X3N5bWJvbF8oaW5maW5pdHlfc3ltYm9sKSwKKyAgICAgICAgbmFuX3N5bWJv
bF8obmFuX3N5bWJvbCksCisgICAgICAgIGV4cG9uZW50X2NoYXJhY3Rlcl8oZXhwb25lbnRfY2hh
cmFjdGVyKSwKKyAgICAgICAgZGVjaW1hbF9pbl9zaG9ydGVzdF9sb3dfKGRlY2ltYWxfaW5fc2hv
cnRlc3RfbG93KSwKKyAgICAgICAgZGVjaW1hbF9pbl9zaG9ydGVzdF9oaWdoXyhkZWNpbWFsX2lu
X3Nob3J0ZXN0X2hpZ2gpLAorICAgICAgICBtYXhfbGVhZGluZ19wYWRkaW5nX3plcm9lc19pbl9w
cmVjaXNpb25fbW9kZV8oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtYXhfbGVhZGluZ19wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9k
ZSksCisgICAgICAgIG1heF90cmFpbGluZ19wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9k
ZV8oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWF4X3RyYWlsaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2RlKSB7CisgICAg
ICAgICAgICAvLyBXaGVuICd0cmFpbGluZyB6ZXJvIGFmdGVyIHRoZSBwb2ludCcgaXMgc2V0LCB0
aGVuICd0cmFpbGluZyBwb2ludCcKKyAgICAgICAgICAgIC8vIG11c3QgYmUgc2V0IHRvby4KKyAg
ICAgICAgICAgIEFTU0VSVCgoKGZsYWdzICYgRU1JVF9UUkFJTElOR19ERUNJTUFMX1BPSU5UKSAh
PSAwKSB8fAorICAgICAgICAgICAgICAgICAgICEoKGZsYWdzICYgRU1JVF9UUkFJTElOR19aRVJP
X0FGVEVSX1BPSU5UKSAhPSAwKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFJl
dHVybnMgYSBjb252ZXJ0ZXIgZm9sbG93aW5nIHRoZSBFY21hU2NyaXB0IHNwZWNpZmljYXRpb24u
CisgICAgICAgIHN0YXRpYyBjb25zdCBEb3VibGVUb1N0cmluZ0NvbnZlcnRlciYgRWNtYVNjcmlw
dENvbnZlcnRlcigpOworICAgICAgICAKKyAgICAgICAgLy8gQ29tcHV0ZXMgdGhlIHNob3J0ZXN0
IHN0cmluZyBvZiBkaWdpdHMgdGhhdCBjb3JyZWN0bHkgcmVwcmVzZW50IHRoZSBpbnB1dAorICAg
ICAgICAvLyBudW1iZXIuIERlcGVuZGluZyBvbiBkZWNpbWFsX2luX3Nob3J0ZXN0X2xvdyBhbmQg
ZGVjaW1hbF9pbl9zaG9ydGVzdF9oaWdoCisgICAgICAgIC8vIChzZWUgY29uc3RydWN0b3IpIGl0
IHRoZW4gZWl0aGVyIHJldHVybnMgYSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uLCBvciBhbgorICAg
ICAgICAvLyBleHBvbmVudGlhbCByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgLy8gRXhhbXBsZSB3
aXRoIGRlY2ltYWxfaW5fc2hvcnRlc3RfbG93ID0gLTYsCisgICAgICAgIC8vICAgICAgICAgICAg
ICBkZWNpbWFsX2luX3Nob3J0ZXN0X2hpZ2ggPSAyMSwKKyAgICAgICAgLy8gICAgICAgICAgICAg
IEVNSVRfUE9TSVRJVkVfRVhQT05FTlRfU0lHTiBhY3RpdmF0ZWQsIGFuZAorICAgICAgICAvLyAg
ICAgICAgICAgICAgRU1JVF9UUkFJTElOR19ERUNJTUFMX1BPSU5UIGRlYWN0aXZlZDoKKyAgICAg
ICAgLy8gICBUb1Nob3J0ZXN0KDAuMDAwMDAxKSAgLT4gIjAuMDAwMDAxIgorICAgICAgICAvLyAg
IFRvU2hvcnRlc3QoMC4wMDAwMDAxKSAtPiAiMWUtNyIKKyAgICAgICAgLy8gICBUb1Nob3J0ZXN0
KDExMTExMTExMTExMTExMTExMTExMS4wKSAgLT4gIjExMTExMTExMTExMTExMTExMDAwMCIKKyAg
ICAgICAgLy8gICBUb1Nob3J0ZXN0KDEwMDAwMDAwMDAwMDAwMDAwMDAwMC4wKSAgLT4gIjEwMDAw
MDAwMDAwMDAwMDAwMDAwMCIKKyAgICAgICAgLy8gICBUb1Nob3J0ZXN0KDExMTExMTExMTExMTEx
MTExMTExMTEuMCkgLT4gIjEuMTExMTExMTExMTExMTExMWUrMjEiCisgICAgICAgIC8vCisgICAg
ICAgIC8vIE5vdGU6IHRoZSBjb252ZXJzaW9uIG1heSByb3VuZCB0aGUgb3V0cHV0IGlmIHRoZSBy
ZXR1cm5lZCBzdHJpbmcKKyAgICAgICAgLy8gaXMgYWNjdXJhdGUgZW5vdWdoIHRvIHVuaXF1ZWx5
IGlkZW50aWZ5IHRoZSBpbnB1dC1udW1iZXIuCisgICAgICAgIC8vIEZvciBleGFtcGxlIHRoZSBt
b3N0IHByZWNpc2UgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRvdWJsZSA5ZTU5IGVxdWFscworICAg
ICAgICAvLyAiODk5OTk5OTk5OTk5OTk5OTE4NzY3MjI5NDQ5NzE3NjE5OTUzODEwMTMxMjczNjc0
NjkwNjU2MjA2ODQ4IiwgYnV0CisgICAgICAgIC8vIHRoZSBjb252ZXJ0ZXIgd2lsbCByZXR1cm4g
dGhlIHNob3J0ZXIgKGJ1dCBzdGlsbCBjb3JyZWN0KSAiOWU1OSIuCisgICAgICAgIC8vCisgICAg
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29udmVyc2lvbiBzdWNjZWVkcy4gVGhlIGNvbnZl
cnNpb24gYWx3YXlzIHN1Y2NlZWRzCisgICAgICAgIC8vIGV4Y2VwdCB3aGVuIHRoZSBpbnB1dCB2
YWx1ZSBpcyBzcGVjaWFsIGFuZCBubyBpbmZpbml0eV9zeW1ib2wgb3IKKyAgICAgICAgLy8gbmFu
X3N5bWJvbCBoYXMgYmVlbiBnaXZlbiB0byB0aGUgY29uc3RydWN0b3IuCisgICAgICAgIGJvb2wg
VG9TaG9ydGVzdChkb3VibGUgdmFsdWUsIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBj
b25zdDsKKyAgICAgICAgCisgICAgICAgIAorICAgICAgICAvLyBDb21wdXRlcyBhIGRlY2ltYWwg
cmVwcmVzZW50YXRpb24gd2l0aCBhIGZpeGVkIG51bWJlciBvZiBkaWdpdHMgYWZ0ZXIgdGhlCisg
ICAgICAgIC8vIGRlY2ltYWwgcG9pbnQuIFRoZSBsYXN0IGVtaXR0ZWQgZGlnaXQgaXMgcm91bmRl
ZC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gRXhhbXBsZXM6CisgICAgICAgIC8vICAgVG9GaXhl
ZCgzLjEyLCAxKSAtPiAiMy4xIgorICAgICAgICAvLyAgIFRvRml4ZWQoMy4xNDE1LCAzKSAtPiAi
My4xNDIiCisgICAgICAgIC8vICAgVG9GaXhlZCgxMjM0LjU2Nzg5LCA0KSAtPiAiMTIzNC41Njc5
IgorICAgICAgICAvLyAgIFRvRml4ZWQoMS4yMywgNSkgLT4gIjEuMjMwMDAiCisgICAgICAgIC8v
ICAgVG9GaXhlZCgwLjEsIDQpIC0+ICIwLjEwMDAiCisgICAgICAgIC8vICAgVG9GaXhlZCgxZTMw
LCAyKSAtPiAiMTAwMDAwMDAwMDAwMDAwMDAxOTg4NDYyNDgzODY1Ni4wMCIKKyAgICAgICAgLy8g
ICBUb0ZpeGVkKDAuMSwgMzApIC0+ICIwLjEwMDAwMDAwMDAwMDAwMDAwNTU1MTExNTEyMzEyNiIK
KyAgICAgICAgLy8gICBUb0ZpeGVkKDAuMSwgMTcpIC0+ICIwLjEwMDAwMDAwMDAwMDAwMDAxIgor
ICAgICAgICAvLworICAgICAgICAvLyBJZiByZXF1ZXN0ZWRfZGlnaXRzIGVxdWFscyAwLCB0aGVu
IHRoZSB0YWlsIG9mIHRoZSByZXN1bHQgZGVwZW5kcyBvbgorICAgICAgICAvLyB0aGUgRU1JVF9U
UkFJTElOR19ERUNJTUFMX1BPSU5UIGFuZCBFTUlUX1RSQUlMSU5HX1pFUk9fQUZURVJfUE9JTlQu
CisgICAgICAgIC8vIEV4YW1wbGVzLCBmb3IgcmVxdWVzdGVkX2RpZ2l0cyA9PSAwLAorICAgICAg
ICAvLyAgIGxldCBFTUlUX1RSQUlMSU5HX0RFQ0lNQUxfUE9JTlQgYW5kIEVNSVRfVFJBSUxJTkdf
WkVST19BRlRFUl9QT0lOVCBiZQorICAgICAgICAvLyAgICAtIGZhbHNlIGFuZCBmYWxzZTogdGhl
biAxMjMuNDUgLT4gMTIzCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LjY3OCAtPiAxCisgICAgICAgIC8vICAgIC0gdHJ1ZSBhbmQgZmFsc2U6IHRoZW4gMTIzLjQ1IC0+
IDEyMy4KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgMC42NzggLT4gMS4K
KyAgICAgICAgLy8gICAgLSB0cnVlIGFuZCB0cnVlOiB0aGVuIDEyMy40NSAtPiAxMjMuMAorICAg
ICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNjc4IC0+IDEuMAorICAgICAgICAv
LworICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbnZlcnNpb24gc3VjY2VlZHMuIFRo
ZSBjb252ZXJzaW9uIGFsd2F5cyBzdWNjZWVkcworICAgICAgICAvLyBleGNlcHQgZm9yIHRoZSBm
b2xsb3dpbmcgY2FzZXM6CisgICAgICAgIC8vICAgLSB0aGUgaW5wdXQgdmFsdWUgaXMgc3BlY2lh
bCBhbmQgbm8gaW5maW5pdHlfc3ltYm9sIG9yIG5hbl9zeW1ib2wgaGFzCisgICAgICAgIC8vICAg
ICBiZWVuIHByb3ZpZGVkIHRvIHRoZSBjb25zdHJ1Y3RvciwKKyAgICAgICAgLy8gICAtICd2YWx1
ZScgPiAxMF5rTWF4Rml4ZWREaWdpdHNCZWZvcmVQb2ludCwgb3IKKyAgICAgICAgLy8gICAtICdy
ZXF1ZXN0ZWRfZGlnaXRzJyA+IGtNYXhGaXhlZERpZ2l0c0FmdGVyUG9pbnQuCisgICAgICAgIC8v
IFRoZSBsYXN0IHR3byBjb25kaXRpb25zIGltcGx5IHRoYXQgdGhlIHJlc3VsdCB3aWxsIG5ldmVy
IGNvbnRhaW4gbW9yZSB0aGFuCisgICAgICAgIC8vIDEgKyBrTWF4Rml4ZWREaWdpdHNCZWZvcmVQ
b2ludCArIDEgKyBrTWF4Rml4ZWREaWdpdHNBZnRlclBvaW50IGNoYXJhY3RlcnMKKyAgICAgICAg
Ly8gKG9uZSBhZGRpdGlvbmFsIGNoYXJhY3RlciBmb3IgdGhlIHNpZ24sIGFuZCBvbmUgZm9yIHRo
ZSBkZWNpbWFsIHBvaW50KS4KKyAgICAgICAgYm9vbCBUb0ZpeGVkKGRvdWJsZSB2YWx1ZSwKKyAg
ICAgICAgICAgICAgICAgICAgIGludCByZXF1ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAg
ICAgICAgU3RyaW5nQnVpbGRlciogcmVzdWx0X2J1aWxkZXIpIGNvbnN0OworICAgICAgICAKKyAg
ICAgICAgLy8gQ29tcHV0ZXMgYSByZXByZXNlbnRhdGlvbiBpbiBleHBvbmVudGlhbCBmb3JtYXQg
d2l0aCByZXF1ZXN0ZWRfZGlnaXRzCisgICAgICAgIC8vIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50
LiBUaGUgbGFzdCBlbWl0dGVkIGRpZ2l0IGlzIHJvdW5kZWQuCisgICAgICAgIC8vIElmIHJlcXVl
c3RlZF9kaWdpdHMgZXF1YWxzIC0xLCB0aGVuIHRoZSBzaG9ydGVzdCBleHBvbmVudGlhbCByZXBy
ZXNlbnRhdGlvbgorICAgICAgICAvLyBpcyBjb21wdXRlZC4KKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gRXhhbXBsZXMgd2l0aCBFTUlUX1BPU0lUSVZFX0VYUE9ORU5UX1NJR04gZGVhY3RpdmF0ZWQs
IGFuZAorICAgICAgICAvLyAgICAgICAgICAgICAgIGV4cG9uZW50X2NoYXJhY3RlciBzZXQgdG8g
J2UnLgorICAgICAgICAvLyAgIFRvRXhwb25lbnRpYWwoMy4xMiwgMSkgLT4gIjMuMWUwIgorICAg
ICAgICAvLyAgIFRvRXhwb25lbnRpYWwoNS4wLCAzKSAtPiAiNS4wMDBlMCIKKyAgICAgICAgLy8g
ICBUb0V4cG9uZW50aWFsKDAuMDAxLCAyKSAtPiAiMS4wMGUtMyIKKyAgICAgICAgLy8gICBUb0V4
cG9uZW50aWFsKDMuMTQxNSwgLTEpIC0+ICIzLjE0MTVlMCIKKyAgICAgICAgLy8gICBUb0V4cG9u
ZW50aWFsKDMuMTQxNSwgNCkgLT4gIjMuMTQxNWUwIgorICAgICAgICAvLyAgIFRvRXhwb25lbnRp
YWwoMy4xNDE1LCAzKSAtPiAiMy4xNDJlMCIKKyAgICAgICAgLy8gICBUb0V4cG9uZW50aWFsKDEy
MzQ1Njc4OTAwMDAwMCwgMykgLT4gIjEuMjM1ZTE0IgorICAgICAgICAvLyAgIFRvRXhwb25lbnRp
YWwoMTAwMDAwMDAwMDAwMDAwMDAxOTg4NDYyNDgzODY1Ni4wLCAtMSkgLT4gIjFlMzAiCisgICAg
ICAgIC8vICAgVG9FeHBvbmVudGlhbCgxMDAwMDAwMDAwMDAwMDAwMDE5ODg0NjI0ODM4NjU2LjAs
IDMyKSAtPgorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICIxLjAwMDAwMDAwMDAwMDAw
MDAxOTg4NDYyNDgzODY1NjAwZTMwIgorICAgICAgICAvLyAgIFRvRXhwb25lbnRpYWwoMTIzNCwg
MCkgLT4gIjFlMyIKKyAgICAgICAgLy8KKyAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBj
b252ZXJzaW9uIHN1Y2NlZWRzLiBUaGUgY29udmVyc2lvbiBhbHdheXMgc3VjY2VlZHMKKyAgICAg
ICAgLy8gZXhjZXB0IGZvciB0aGUgZm9sbG93aW5nIGNhc2VzOgorICAgICAgICAvLyAgIC0gdGhl
IGlucHV0IHZhbHVlIGlzIHNwZWNpYWwgYW5kIG5vIGluZmluaXR5X3N5bWJvbCBvciBuYW5fc3lt
Ym9sIGhhcworICAgICAgICAvLyAgICAgYmVlbiBwcm92aWRlZCB0byB0aGUgY29uc3RydWN0b3Is
CisgICAgICAgIC8vICAgLSAncmVxdWVzdGVkX2RpZ2l0cycgPiBrTWF4RXhwb25lbnRpYWxEaWdp
dHMuCisgICAgICAgIC8vIFRoZSBsYXN0IGNvbmRpdGlvbiBpbXBsaWVzIHRoYXQgdGhlIHJlc3Vs
dCB3aWxsIG5ldmVyIGNvbnRhaW4gbW9yZSB0aGFuCisgICAgICAgIC8vIGtNYXhFeHBvbmVudGlh
bERpZ2l0cyArIDggY2hhcmFjdGVycyAodGhlIHNpZ24sIHRoZSBkaWdpdCBiZWZvcmUgdGhlCisg
ICAgICAgIC8vIGRlY2ltYWwgcG9pbnQsIHRoZSBkZWNpbWFsIHBvaW50LCB0aGUgZXhwb25lbnQg
Y2hhcmFjdGVyLCB0aGUKKyAgICAgICAgLy8gZXhwb25lbnQncyBzaWduLCBhbmQgYXQgbW9zdCAz
IGV4cG9uZW50IGRpZ2l0cykuCisgICAgICAgIGJvb2wgVG9FeHBvbmVudGlhbChkb3VibGUgdmFs
dWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVxdWVzdGVkX2RpZ2l0cywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBj
b25zdDsKKyAgICAgICAgCisgICAgICAgIC8vIENvbXB1dGVzICdwcmVjaXNpb24nIGxlYWRpbmcg
ZGlnaXRzIG9mIHRoZSBnaXZlbiAndmFsdWUnIGFuZCByZXR1cm5zIHRoZW0KKyAgICAgICAgLy8g
ZWl0aGVyIGluIGV4cG9uZW50aWFsIG9yIGRlY2ltYWwgZm9ybWF0LCBkZXBlbmRpbmcgb24KKyAg
ICAgICAgLy8gbWF4X3tsZWFkaW5nfHRyYWlsaW5nfV9wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNp
b25fbW9kZSAoZ2l2ZW4gdG8gdGhlCisgICAgICAgIC8vIGNvbnN0cnVjdG9yKS4KKyAgICAgICAg
Ly8gVGhlIGxhc3QgY29tcHV0ZWQgZGlnaXQgaXMgcm91bmRlZC4KKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gRXhhbXBsZSB3aXRoIG1heF9sZWFkaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lv
bl9tb2RlID0gNi4KKyAgICAgICAgLy8gICBUb1ByZWNpc2lvbigwLjAwMDAwMTIzNDUsIDIpIC0+
ICIwLjAwMDAwMTIiCisgICAgICAgIC8vICAgVG9QcmVjaXNpb24oMC4wMDAwMDAxMjM0NSwgMikg
LT4gIjEuMmUtNyIKKyAgICAgICAgLy8gU2ltaWxhcmlseSB0aGUgY29udmVydGVyIG1heSBhZGQg
dXAgdG8KKyAgICAgICAgLy8gbWF4X3RyYWlsaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lv
bl9tb2RlIGluIHByZWNpc2lvbiBtb2RlIHRvIGF2b2lkCisgICAgICAgIC8vIHJldHVybmluZyBh
biBleHBvbmVudGlhbCByZXByZXNlbnRhdGlvbi4gQSB6ZXJvIGFkZGVkIGJ5IHRoZQorICAgICAg
ICAvLyBFTUlUX1RSQUlMSU5HX1pFUk9fQUZURVJfUE9JTlQgZmxhZyBpcyBjb3VudGVkIGZvciB0
aGlzIGxpbWl0LgorICAgICAgICAvLyBFeGFtcGxlcyBmb3IgbWF4X3RyYWlsaW5nX3BhZGRpbmdf
emVyb2VzX2luX3ByZWNpc2lvbl9tb2RlID0gMToKKyAgICAgICAgLy8gICBUb1ByZWNpc2lvbigy
MzAuMCwgMikgLT4gIjIzMCIKKyAgICAgICAgLy8gICBUb1ByZWNpc2lvbigyMzAuMCwgMikgLT4g
IjIzMC4iICB3aXRoIEVNSVRfVFJBSUxJTkdfREVDSU1BTF9QT0lOVC4KKyAgICAgICAgLy8gICBU
b1ByZWNpc2lvbigyMzAuMCwgMikgLT4gIjIuM2UyIiB3aXRoIEVNSVRfVFJBSUxJTkdfWkVST19B
RlRFUl9QT0lOVC4KKyAgICAgICAgLy8gRXhhbXBsZXMgZm9yIG1heF90cmFpbGluZ19wYWRkaW5n
X3plcm9lc19pbl9wcmVjaXNpb25fbW9kZSA9IDMsIGFuZCBubworICAgICAgICAvLyAgICBFTUlU
X1RSQUlMSU5HX1pFUk9fQUZURVJfUE9JTlQ6CisgICAgICAgIC8vICAgVG9QcmVjaXNpb24oMTIz
NDUwLjAsIDYpIC0+ICIxMjM0NTAiCisgICAgICAgIC8vICAgVG9QcmVjaXNpb24oMTIzNDUwLjAs
IDUpIC0+ICIxMjM0NTAiCisgICAgICAgIC8vICAgVG9QcmVjaXNpb24oMTIzNDUwLjAsIDQpIC0+
ICIxMjM1MDAiCisgICAgICAgIC8vICAgVG9QcmVjaXNpb24oMTIzNDUwLjAsIDMpIC0+ICIxMjMw
MDAiCisgICAgICAgIC8vICAgVG9QcmVjaXNpb24oMTIzNDUwLjAsIDIpIC0+ICIxLjJlNSIKKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb252ZXJzaW9uIHN1Y2Nl
ZWRzLiBUaGUgY29udmVyc2lvbiBhbHdheXMgc3VjY2VlZHMKKyAgICAgICAgLy8gZXhjZXB0IGZv
ciB0aGUgZm9sbG93aW5nIGNhc2VzOgorICAgICAgICAvLyAgIC0gdGhlIGlucHV0IHZhbHVlIGlz
IHNwZWNpYWwgYW5kIG5vIGluZmluaXR5X3N5bWJvbCBvciBuYW5fc3ltYm9sIGhhcworICAgICAg
ICAvLyAgICAgYmVlbiBwcm92aWRlZCB0byB0aGUgY29uc3RydWN0b3IsCisgICAgICAgIC8vICAg
LSBwcmVjaXNpb24gPCBrTWluUGVyaWNpc2lvbkRpZ2l0cworICAgICAgICAvLyAgIC0gcHJlY2lz
aW9uID4ga01heFByZWNpc2lvbkRpZ2l0cworICAgICAgICAvLyBUaGUgbGFzdCBjb25kaXRpb24g
aW1wbGllcyB0aGF0IHRoZSByZXN1bHQgd2lsbCBuZXZlciBjb250YWluIG1vcmUgdGhhbgorICAg
ICAgICAvLyBrTWF4UHJlY2lzaW9uRGlnaXRzICsgNyBjaGFyYWN0ZXJzICh0aGUgc2lnbiwgdGhl
IGRlY2ltYWwgcG9pbnQsIHRoZQorICAgICAgICAvLyBleHBvbmVudCBjaGFyYWN0ZXIsIHRoZSBl
eHBvbmVudCdzIHNpZ24sIGFuZCBhdCBtb3N0IDMgZXhwb25lbnQgZGlnaXRzKS4KKyAgICAgICAg
Ym9vbCBUb1ByZWNpc2lvbihkb3VibGUgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IHByZWNpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyKiBy
ZXN1bHRfYnVpbGRlcikgY29uc3Q7CisgICAgICAgIAorICAgICAgICBlbnVtIER0b2FNb2RlIHsK
KyAgICAgICAgICAgIC8vIFByb2R1Y2UgdGhlIHNob3J0ZXN0IGNvcnJlY3QgcmVwcmVzZW50YXRp
b24uCisgICAgICAgICAgICAvLyBGb3IgZXhhbXBsZSB0aGUgb3V0cHV0IG9mIDAuMjk5OTk5OTk5
OTk5OTk5OTg4ODk3IGlzICh0aGUgbGVzcyBhY2N1cmF0ZQorICAgICAgICAgICAgLy8gYnV0IGNv
cnJlY3QpIDAuMy4KKyAgICAgICAgICAgIFNIT1JURVNULAorICAgICAgICAgICAgLy8gUHJvZHVj
ZSBhIGZpeGVkIG51bWJlciBvZiBkaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQuCisgICAg
ICAgICAgICAvLyBGb3IgaW5zdGFuY2UgZml4ZWQoMC4xLCA0KSBiZWNvbWVzIDAuMTAwMAorICAg
ICAgICAgICAgLy8gSWYgdGhlIGlucHV0IG51bWJlciBpcyBiaWcsIHRoZSBvdXRwdXQgd2lsbCBi
ZSBiaWcuCisgICAgICAgICAgICBGSVhFRCwKKyAgICAgICAgICAgIC8vIEZpeGVkIG51bWJlciBv
ZiBkaWdpdHMgKGluZGVwZW5kZW50IG9mIHRoZSBkZWNpbWFsIHBvaW50KS4KKyAgICAgICAgICAg
IFBSRUNJU0lPTgorICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgLy8gVGhlIG1heGltYWwg
bnVtYmVyIG9mIGRpZ2l0cyB0aGF0IGFyZSBuZWVkZWQgdG8gZW1pdCBhIGRvdWJsZSBpbiBiYXNl
IDEwLgorICAgICAgICAvLyBBIGhpZ2hlciBwcmVjaXNpb24gY2FuIGJlIGFjaGlldmVkIGJ5IHVz
aW5nIG1vcmUgZGlnaXRzLCBidXQgdGhlIHNob3J0ZXN0CisgICAgICAgIC8vIGFjY3VyYXRlIHJl
cHJlc2VudGF0aW9uIG9mIGFueSBkb3VibGUgd2lsbCBuZXZlciB1c2UgbW9yZSBkaWdpdHMgdGhh
bgorICAgICAgICAvLyBrQmFzZTEwTWF4aW1hbExlbmd0aC4KKyAgICAgICAgLy8gTm90ZSB0aGF0
IERvdWJsZVRvQXNjaWkgbnVsbC10ZXJtaW5hdGVzIGl0cyBpbnB1dC4gU28gdGhlIGdpdmVuIGJ1
ZmZlcgorICAgICAgICAvLyBzaG91bGQgYmUgYXQgbGVhc3Qga0Jhc2UxME1heGltYWxMZW5ndGgg
KyAxIGNoYXJhY3RlcnMgbG9uZy4KKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBrQmFzZTEwTWF4
aW1hbExlbmd0aCA9IDE3OworICAgICAgICAKKyAgICAgICAgLy8gQ29udmVydHMgdGhlIGdpdmVu
IGRvdWJsZSAndicgdG8gYXNjaWkuCisgICAgICAgIC8vIFRoZSByZXN1bHQgc2hvdWxkIGJlIGlu
dGVycHJldGVkIGFzIGJ1ZmZlciAqIDEwXihwb2ludC1sZW5ndGgpLgorICAgICAgICAvLworICAg
ICAgICAvLyBUaGUgb3V0cHV0IGRlcGVuZHMgb24gdGhlIGdpdmVuIG1vZGU6CisgICAgICAgIC8v
ICAtIFNIT1JURVNUOiBwcm9kdWNlIHRoZSBsZWFzdCBhbW91bnQgb2YgZGlnaXRzIGZvciB3aGlj
aCB0aGUgaW50ZXJuYWwKKyAgICAgICAgLy8gICBpZGVudGl0eSByZXF1aXJlbWVudCBpcyBzdGls
bCBzYXRpc2ZpZWQuIElmIHRoZSBkaWdpdHMgYXJlIHByaW50ZWQKKyAgICAgICAgLy8gICAodG9n
ZXRoZXIgd2l0aCB0aGUgY29ycmVjdCBleHBvbmVudCkgdGhlbiByZWFkaW5nIHRoaXMgbnVtYmVy
IHdpbGwgZ2l2ZQorICAgICAgICAvLyAgICd2JyBhZ2Fpbi4gVGhlIGJ1ZmZlciB3aWxsIGNob29z
ZSB0aGUgcmVwcmVzZW50YXRpb24gdGhhdCBpcyBjbG9zZXN0IHRvCisgICAgICAgIC8vICAgJ3Yn
LiBJZiB0aGVyZSBhcmUgdHdvIGF0IHRoZSBzYW1lIGRpc3RhbmNlLCB0aGFuIHRoZSBvbmUgZmFy
dGhlciBhd2F5CisgICAgICAgIC8vICAgZnJvbSAwIGlzIGNob3NlbiAoaGFsZndheSBjYXNlcyAt
IGVuZGluZyB3aXRoIDUgLSBhcmUgcm91bmRlZCB1cCkuCisgICAgICAgIC8vICAgSW4gdGhpcyBt
b2RlIHRoZSAncmVxdWVzdGVkX2RpZ2l0cycgcGFyYW1ldGVyIGlzIGlnbm9yZWQuCisgICAgICAg
IC8vICAtIEZJWEVEOiBwcm9kdWNlcyBkaWdpdHMgbmVjZXNzYXJ5IHRvIHByaW50IGEgZ2l2ZW4g
bnVtYmVyIHdpdGgKKyAgICAgICAgLy8gICAncmVxdWVzdGVkX2RpZ2l0cycgZGlnaXRzIGFmdGVy
IHRoZSBkZWNpbWFsIHBvaW50LiBUaGUgcHJvZHVjZWQgZGlnaXRzCisgICAgICAgIC8vICAgbWln
aHQgYmUgdG9vIHNob3J0IGluIHdoaWNoIGNhc2UgdGhlIGNhbGxlciBoYXMgdG8gZmlsbCB0aGUg
cmVtYWluZGVyCisgICAgICAgIC8vICAgd2l0aCAnMCdzLgorICAgICAgICAvLyAgIEV4YW1wbGU6
IHRvRml4ZWQoMC4wMDEsIDUpIGlzIGFsbG93ZWQgdG8gcmV0dXJuIGJ1ZmZlcj0iMSIsIHBvaW50
PS0yLgorICAgICAgICAvLyAgIEhhbGZ3YXkgY2FzZXMgYXJlIHJvdW5kZWQgdG93YXJkcyArLy1J
bmZpbml0eSAoYXdheSBmcm9tIDApLiBUaGUgY2FsbAorICAgICAgICAvLyAgIHRvRml4ZWQoMC4x
NSwgMikgdGh1cyByZXR1cm5zIGJ1ZmZlcj0iMiIsIHBvaW50PTAuCisgICAgICAgIC8vICAgVGhl
IHJldHVybmVkIGJ1ZmZlciBtYXkgY29udGFpbiBkaWdpdHMgdGhhdCB3b3VsZCBiZSB0cnVuY2F0
ZWQgZnJvbSB0aGUKKyAgICAgICAgLy8gICBzaG9ydGVzdCByZXByZXNlbnRhdGlvbiBvZiB0aGUg
aW5wdXQuCisgICAgICAgIC8vICAtIFBSRUNJU0lPTjogcHJvZHVjZXMgJ3JlcXVlc3RlZF9kaWdp
dHMnIHdoZXJlIHRoZSBmaXJzdCBkaWdpdCBpcyBub3QgJzAnLgorICAgICAgICAvLyAgIEV2ZW4g
dGhvdWdoIHRoZSBsZW5ndGggb2YgcHJvZHVjZWQgZGlnaXRzIHVzdWFsbHkgZXF1YWxzCisgICAg
ICAgIC8vICAgJ3JlcXVlc3RlZF9kaWdpdHMnLCB0aGUgZnVuY3Rpb24gaXMgYWxsb3dlZCB0byBy
ZXR1cm4gZmV3ZXIgZGlnaXRzLCBpbgorICAgICAgICAvLyAgIHdoaWNoIGNhc2UgdGhlIGNhbGxl
ciBoYXMgdG8gZmlsbCB0aGUgbWlzc2luZyBkaWdpdHMgd2l0aCAnMCdzLgorICAgICAgICAvLyAg
IEhhbGZ3YXkgY2FzZXMgYXJlIGFnYWluIHJvdW5kZWQgYXdheSBmcm9tIDAuCisgICAgICAgIC8v
IERvdWJsZVRvQXNjaWkgZXhwZWN0cyB0aGUgZ2l2ZW4gYnVmZmVyIHRvIGJlIGJpZyBlbm91Z2gg
dG8gaG9sZCBhbGwKKyAgICAgICAgLy8gZGlnaXRzIGFuZCBhIHRlcm1pbmF0aW5nIG51bGwtY2hh
cmFjdGVyLiBJbiBTSE9SVEVTVC1tb2RlIGl0IGV4cGVjdHMgYQorICAgICAgICAvLyBidWZmZXIg
b2YgYXQgbGVhc3Qga0Jhc2UxME1heGltYWxMZW5ndGggKyAxLiBJbiBhbGwgb3RoZXIgbW9kZXMg
dGhlCisgICAgICAgIC8vIHJlcXVlc3RlZF9kaWdpdHMgcGFyYW1ldGVyICgrIDEgZm9yIHRoZSBu
dWxsLWNoYXJhY3RlcikgbGltaXRzIHRoZSBzaXplIG9mCisgICAgICAgIC8vIHRoZSBvdXRwdXQu
IFRoZSBnaXZlbiBsZW5ndGggaXMgb25seSB1c2VkIGluIGRlYnVnIG1vZGUgdG8gZW5zdXJlIHRo
ZQorICAgICAgICAvLyBidWZmZXIgaXMgYmlnIGVub3VnaC4KKyAgICAgICAgc3RhdGljIHZvaWQg
RG91YmxlVG9Bc2NpaShkb3VibGUgdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBEdG9hTW9kZSBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBy
ZXF1ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIq
IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnVmZmVyX2xl
bmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sKiBzaWduLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogbGVuZ3RoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCogcG9pbnQpOworICAgICAgICAKKyAgICBwcml2YXRl
OgorICAgICAgICAvLyBJZiB0aGUgdmFsdWUgaXMgYSBzcGVjaWFsIHZhbHVlIChOYU4gb3IgSW5m
aW5pdHkpIGNvbnN0cnVjdHMgdGhlCisgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgc3RyaW5nIHVz
aW5nIHRoZSBjb25maWd1cmVkIGluZmluaXR5L25hbi1zeW1ib2wuCisgICAgICAgIC8vIElmIGVp
dGhlciBvZiB0aGVtIGlzIE5VTEwgb3IgdGhlIHZhbHVlIGlzIG5vdCBzcGVjaWFsIHRoZW4gdGhl
CisgICAgICAgIC8vIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UuCisgICAgICAgIGJvb2wgSGFuZGxl
U3BlY2lhbFZhbHVlcyhkb3VibGUgdmFsdWUsIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVy
KSBjb25zdDsKKyAgICAgICAgLy8gQ29uc3RydWN0cyBhbiBleHBvbmVudGlhbCByZXByZXNlbnRh
dGlvbiAoaS5lLiAxLjIzNGU1NikuCisgICAgICAgIC8vIFRoZSBnaXZlbiBleHBvbmVudCBhc3N1
bWVzIGEgZGVjaW1hbCBwb2ludCBhZnRlciB0aGUgZmlyc3QgZGVjaW1hbCBkaWdpdC4KKyAgICAg
ICAgdm9pZCBDcmVhdGVFeHBvbmVudGlhbFJlcHJlc2VudGF0aW9uKGNvbnN0IGNoYXIqIGRlY2lt
YWxfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBleHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25zdDsKKyAgICAgICAgLy8gQ3Jl
YXRlcyBhIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gKGkuZSAxMjM0LjU2NzgpLgorICAgICAgICB2
b2lkIENyZWF0ZURlY2ltYWxSZXByZXNlbnRhdGlvbihjb25zdCBjaGFyKiBkZWNpbWFsX2RpZ2l0
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlY2ltYWxfcG9p
bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkaWdpdHNf
YWZ0ZXJfcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0
cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25zdDsKKyAgICAgICAgCisgICAgICAgIGNv
bnN0IGludCBmbGFnc187CisgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IGluZmluaXR5X3N5bWJv
bF87CisgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IG5hbl9zeW1ib2xfOworICAgICAgICBjb25z
dCBjaGFyIGV4cG9uZW50X2NoYXJhY3Rlcl87CisgICAgICAgIGNvbnN0IGludCBkZWNpbWFsX2lu
X3Nob3J0ZXN0X2xvd187CisgICAgICAgIGNvbnN0IGludCBkZWNpbWFsX2luX3Nob3J0ZXN0X2hp
Z2hfOworICAgICAgICBjb25zdCBpbnQgbWF4X2xlYWRpbmdfcGFkZGluZ196ZXJvZXNfaW5fcHJl
Y2lzaW9uX21vZGVfOworICAgICAgICBjb25zdCBpbnQgbWF4X3RyYWlsaW5nX3BhZGRpbmdfemVy
b2VzX2luX3ByZWNpc2lvbl9tb2RlXzsKKyAgICAgICAgCisgICAgICAgIERJU0FMTE9XX0lNUExJ
Q0lUX0NPTlNUUlVDVE9SUyhEb3VibGVUb1N0cmluZ0NvbnZlcnRlcik7CisgICAgfTsKKyAgICAK
KyAgICAKKyAgICBjbGFzcyBTdHJpbmdUb0RvdWJsZUNvbnZlcnRlciB7CisgICAgcHVibGljOgor
ICAgICAgICAvLyBFbnVtZXJhdGlvbiBmb3IgYWxsb3dpbmcgb2N0YWxzIGFuZCBpZ25vcmluZyBq
dW5rIHdoZW4gY29udmVydGluZworICAgICAgICAvLyBzdHJpbmdzIHRvIG51bWJlcnMuCisgICAg
ICAgIGVudW0gRmxhZ3MgeworICAgICAgICAgICAgTk9fRkxBR1MgPSAwLAorICAgICAgICAgICAg
QUxMT1dfSEVYID0gMSwKKyAgICAgICAgICAgIEFMTE9XX09DVEFMUyA9IDIsCisgICAgICAgICAg
ICBBTExPV19UUkFJTElOR19KVU5LID0gNCwKKyAgICAgICAgICAgIEFMTE9XX0xFQURJTkdfU1BB
Q0VTID0gOCwKKyAgICAgICAgICAgIEFMTE9XX1RSQUlMSU5HX1NQQUNFUyA9IDE2LAorICAgICAg
ICAgICAgQUxMT1dfU1BBQ0VTX0FGVEVSX1NJR04gPSAzMgorICAgICAgICB9OworICAgICAgICAK
KyAgICAgICAgLy8gRmxhZ3Mgc2hvdWxkIGJlIGEgYml0LW9yIGNvbWJpbmF0aW9uIG9mIHRoZSBw
b3NzaWJsZSBGbGFncy1lbnVtLgorICAgICAgICAvLyAgLSBOT19GTEFHUzogbm8gc3BlY2lhbCBm
bGFncy4KKyAgICAgICAgLy8gIC0gQUxMT1dfSEVYOiByZWNvZ25pemVzIHRoZSBwcmVmaXggIjB4
Ii4gSGV4IG51bWJlcnMgbWF5IG9ubHkgYmUgaW50ZWdlcnMuCisgICAgICAgIC8vICAgICAgRXg6
IFN0cmluZ1RvRG91YmxlKCIweDEyMzQiKSAtPiA0NjYwLjAKKyAgICAgICAgLy8gICAgICAgICAg
SW4gU3RyaW5nVG9Eb3VibGUoIjB4MTIzNC41NiIpIHRoZSBjaGFyYWN0ZXJzICIuNTYiIGFyZSB0
cmFpbGluZworICAgICAgICAvLyAgICAgICAgICBqdW5rLiBUaGUgcmVzdWx0IG9mIHRoZSBjYWxs
IGlzIGhlbmNlIGRlcGVuZGVudCBvbgorICAgICAgICAvLyAgICAgICAgICB0aGUgQUxMT1dfVFJB
SUxJTkdfSlVOSyBmbGFnIGFuZC9vciB0aGUganVuayB2YWx1ZS4KKyAgICAgICAgLy8gICAgICBX
aXRoIHRoaXMgZmxhZyAiMHgiIGlzIGEganVuay1zdHJpbmcuIEV2ZW4gd2l0aCBBTExPV19UUkFJ
TElOR19KVU5LLAorICAgICAgICAvLyAgICAgIHRoZSBzdHJpbmcgd2lsbCBub3QgYmUgcGFyc2Vk
IGFzICIwIiBmb2xsb3dlZCBieSBqdW5rLgorICAgICAgICAvLworICAgICAgICAvLyAgLSBBTExP
V19PQ1RBTFM6IHJlY29nbml6ZXMgdGhlIHByZWZpeCAiMCIgZm9yIG9jdGFsczoKKyAgICAgICAg
Ly8gICAgICBJZiBhIHNlcXVlbmNlIG9mIG9jdGFsIGRpZ2l0cyBzdGFydHMgd2l0aCAnMCcsIHRo
ZW4gdGhlIG51bWJlciBpcworICAgICAgICAvLyAgICAgIHJlYWQgYXMgb2N0YWwgaW50ZWdlci4g
T2N0YWwgbnVtYmVycyBtYXkgb25seSBiZSBpbnRlZ2Vycy4KKyAgICAgICAgLy8gICAgICBFeDog
U3RyaW5nVG9Eb3VibGUoIjAxMjM0IikgLT4gNjY4LjAKKyAgICAgICAgLy8gICAgICAgICAgU3Ry
aW5nVG9Eb3VibGUoIjAxMjM0OSIpIC0+IDEyMzQ5LjAgIC8vIE5vdCBhIHNlcXVlbmNlIG9mIG9j
dGFsCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBkaWdpdHMuCisgICAgICAgIC8vICAgICAgICAgIEluIFN0cmluZ1RvRG91YmxlKCIw
MTIzNC41NiIpIHRoZSBjaGFyYWN0ZXJzICIuNTYiIGFyZSB0cmFpbGluZworICAgICAgICAvLyAg
ICAgICAgICBqdW5rLiBUaGUgcmVzdWx0IG9mIHRoZSBjYWxsIGlzIGhlbmNlIGRlcGVuZGVudCBv
bgorICAgICAgICAvLyAgICAgICAgICB0aGUgQUxMT1dfVFJBSUxJTkdfSlVOSyBmbGFnIGFuZC9v
ciB0aGUganVuayB2YWx1ZS4KKyAgICAgICAgLy8gICAgICAgICAgSW4gU3RyaW5nVG9Eb3VibGUo
IjAxMjM0ZTU2IikgdGhlIGNoYXJhY3RlcnMgImU1NiIgYXJlIHRyYWlsaW5nCisgICAgICAgIC8v
ICAgICAgICAgIGp1bmssIHRvby4KKyAgICAgICAgLy8gIC0gQUxMT1dfVFJBSUxJTkdfSlVOSzog
aWdub3JlIHRyYWlsaW5nIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IHBhcnQgb2YKKyAgICAgICAg
Ly8gICAgICBhIGRvdWJsZSBsaXRlcmFsLgorICAgICAgICAvLyAgLSBBTExPV19MRUFESU5HX1NQ
QUNFUzogc2tpcCBvdmVyIGxlYWRpbmcgc3BhY2VzLgorICAgICAgICAvLyAgLSBBTExPV19UUkFJ
TElOR19TUEFDRVM6IGlnbm9yZSB0cmFpbGluZyBzcGFjZXMuCisgICAgICAgIC8vICAtIEFMTE9X
X1NQQUNFU19BRlRFUl9TSUdOOiBpZ25vcmUgc3BhY2VzIGFmdGVyIHRoZSBzaWduLgorICAgICAg
ICAvLyAgICAgICBFeDogU3RyaW5nVG9Eb3VibGUoIi0gICAxMjMuMiIpIC0+IC0xMjMuMi4KKyAg
ICAgICAgLy8gICAgICAgICAgIFN0cmluZ1RvRG91YmxlKCIrICAgMTIzLjIiKSAtPiAxMjMuMgor
ICAgICAgICAvLworICAgICAgICAvLyBlbXB0eV9zdHJpbmdfdmFsdWUgaXMgcmV0dXJuZWQgd2hl
biBhbiBlbXB0eSBzdHJpbmcgaXMgZ2l2ZW4gYXMgaW5wdXQuCisgICAgICAgIC8vIElmIEFMTE9X
X0xFQURJTkdfU1BBQ0VTIG9yIEFMTE9XX1RSQUlMSU5HX1NQQUNFUyBhcmUgc2V0LCB0aGVuIGEg
c3RyaW5nCisgICAgICAgIC8vIGNvbnRhaW5pbmcgb25seSBzcGFjZXMgaXMgY29udmVydGVkIHRv
IHRoZSAnZW1wdHlfc3RyaW5nX3ZhbHVlJywgdG9vLgorICAgICAgICAvLworICAgICAgICAvLyBq
dW5rX3N0cmluZ192YWx1ZSBpcyByZXR1cm5lZCB3aGVuCisgICAgICAgIC8vICBhKSBBTExPV19U
UkFJTElOR19KVU5LIGlzIG5vdCBzZXQsIGFuZCBhIGp1bmsgY2hhcmFjdGVyIChhIGNoYXJhY3Rl
ciBub3QKKyAgICAgICAgLy8gICAgIHBhcnQgb2YgYSBkb3VibGUtbGl0ZXJhbCkgaXMgZm91bmQu
CisgICAgICAgIC8vICBiKSBBTExPV19UUkFJTElOR19KVU5LIGlzIHNldCwgYnV0IHRoZSBzdHJp
bmcgZG9lcyBub3Qgc3RhcnQgd2l0aCBhCisgICAgICAgIC8vICAgICBkb3VibGUgbGl0ZXJhbC4K
KyAgICAgICAgLy8KKyAgICAgICAgLy8gaW5maW5pdHlfc3ltYm9sIGFuZCBuYW5fc3ltYm9sIGFy
ZSBzdHJpbmdzIHRoYXQgYXJlIHVzZWQgdG8gZGV0ZWN0CisgICAgICAgIC8vIGlucHV0cyB0aGF0
IHJlcHJlc2VudCBpbmZpbml0eSBhbmQgTmFOLiBUaGV5IGNhbiBiZSBudWxsLCBpbiB3aGljaCBj
YXNlCisgICAgICAgIC8vIHRoZXkgYXJlIGlnbm9yZWQuCisgICAgICAgIC8vIFRoZSBjb252ZXJz
aW9uIHJvdXRpbmUgZmlyc3QgcmVhZHMgYW55IHBvc3NpYmxlIHNpZ25zLiBUaGVuIGl0IGNvbXBh
cmVzIHRoZQorICAgICAgICAvLyBmb2xsb3dpbmcgY2hhcmFjdGVyIG9mIHRoZSBpbnB1dC1zdHJp
bmcgd2l0aCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mCisgICAgICAgIC8vIHRoZSBpbmZpbml0eSwg
YW5kIG5hbi1zeW1ib2wuIElmIGVpdGhlciBtYXRjaGVzLCB0aGUgZnVuY3Rpb24gYXNzdW1lcywg
dGhhdAorICAgICAgICAvLyBhIG1hdGNoIGhhcyBiZWVuIGZvdW5kLCBhbmQgZXhwZWN0cyB0aGUg
Zm9sbG93aW5nIGlucHV0IGNoYXJhY3RlcnMgdG8gbWF0Y2gKKyAgICAgICAgLy8gdGhlIHJlbWFp
bmluZyBjaGFyYWN0ZXJzIG9mIHRoZSBzcGVjaWFsLXZhbHVlIHN5bWJvbC4KKyAgICAgICAgLy8g
VGhpcyBtZWFucyB0aGF0IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zIGFwcGx5IHRvIHNwZWNp
YWwtdmFsdWUgc3ltYm9sczoKKyAgICAgICAgLy8gIC0gdGhleSBtdXN0IG5vdCBzdGFydCB3aXRo
IHNpZ25zICgnKycsIG9yICctJyksCisgICAgICAgIC8vICAtIHRoZXkgbXVzdCBub3QgaGF2ZSB0
aGUgc2FtZSBmaXJzdCBjaGFyYWN0ZXIuCisgICAgICAgIC8vICAtIHRoZXkgbXVzdCBub3Qgc3Rh
cnQgd2l0aCBkaWdpdHMuCisgICAgICAgIC8vCisgICAgICAgIC8vIEV4YW1wbGVzOgorICAgICAg
ICAvLyAgZmxhZ3MgPSBBTExPV19IRVggfCBBTExPV19UUkFJTElOR19KVU5LLAorICAgICAgICAv
LyAgZW1wdHlfc3RyaW5nX3ZhbHVlID0gMC4wLAorICAgICAgICAvLyAganVua19zdHJpbmdfdmFs
dWUgPSBOYU4sCisgICAgICAgIC8vICBpbmZpbml0eV9zeW1ib2wgPSAiaW5maW5pdHkiLAorICAg
ICAgICAvLyAgbmFuX3N5bWJvbCA9ICJuYW4iOgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJs
ZSgiMHgxMjM0IikgLT4gNDY2MC4wLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMHgx
MjM0SyIpIC0+IDQ2NjAuMC4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIiIpIC0+IDAu
MCAgLy8gZW1wdHlfc3RyaW5nX3ZhbHVlLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgi
ICIpIC0+IE5hTiAgLy8ganVua19zdHJpbmdfdmFsdWUuCisgICAgICAgIC8vICAgIFN0cmluZ1Rv
RG91YmxlKCIgMSIpIC0+IE5hTiAgLy8ganVua19zdHJpbmdfdmFsdWUuCisgICAgICAgIC8vICAg
IFN0cmluZ1RvRG91YmxlKCIweCIpIC0+IE5hTiAgLy8ganVua19zdHJpbmdfdmFsdWUuCisgICAg
ICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCItMTIzLjQ1IikgLT4gLTEyMy40NS4KKyAgICAgICAg
Ly8gICAgU3RyaW5nVG9Eb3VibGUoIi0tMTIzLjQ1IikgLT4gTmFOICAvLyBqdW5rX3N0cmluZ192
YWx1ZS4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjEyM2U0NSIpIC0+IDEyM2U0NS4K
KyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjEyM0U0NSIpIC0+IDEyM2U0NS4KKyAgICAg
ICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjEyM2UrNDUiKSAtPiAxMjNlNDUuCisgICAgICAgIC8v
ICAgIFN0cmluZ1RvRG91YmxlKCIxMjNFLTQ1IikgLT4gMTIzZS00NS4KKyAgICAgICAgLy8gICAg
U3RyaW5nVG9Eb3VibGUoIjEyM2UiKSAtPiAxMjMuMCAgLy8gdHJhaWxpbmcganVuayBpZ25vcmVk
LgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMTIzZS0iKSAtPiAxMjMuMCAgLy8gdHJh
aWxpbmcganVuayBpZ25vcmVkLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiK05hTiIp
IC0+IE5hTiAgLy8gTmFOIHN0cmluZyBsaXRlcmFsLgorICAgICAgICAvLyAgICBTdHJpbmdUb0Rv
dWJsZSgiLWluZmluaXR5IikgLT4gLWluZi4gIC8vIGluZmluaXR5IGxpdGVyYWwuCisgICAgICAg
IC8vICAgIFN0cmluZ1RvRG91YmxlKCJJbmZpbml0eSIpIC0+IE5hTiAgLy8ganVua19zdHJpbmdf
dmFsdWUuCisgICAgICAgIC8vCisgICAgICAgIC8vICBmbGFncyA9IEFMTE9XX09DVEFMIHwgQUxM
T1dfTEVBRElOR19TUEFDRVMsCisgICAgICAgIC8vICBlbXB0eV9zdHJpbmdfdmFsdWUgPSAwLjAs
CisgICAgICAgIC8vICBqdW5rX3N0cmluZ192YWx1ZSA9IE5hTiwKKyAgICAgICAgLy8gIGluZmlu
aXR5X3N5bWJvbCA9IE5VTEwsCisgICAgICAgIC8vICBuYW5fc3ltYm9sID0gTlVMTDoKKyAgICAg
ICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjB4MTIzNCIpIC0+IE5hTiAgLy8ganVua19zdHJpbmdf
dmFsdWUuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIwMTIzNCIpIC0+IDY2OC4wLgor
ICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiIikgLT4gMC4wICAvLyBlbXB0eV9zdHJpbmdf
dmFsdWUuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIgIikgLT4gMC4wICAvLyBlbXB0
eV9zdHJpbmdfdmFsdWUuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIgMSIpIC0+IDEu
MAorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMHgiKSAtPiBOYU4gIC8vIGp1bmtfc3Ry
aW5nX3ZhbHVlLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMDEyM2U0NSIpIC0+IE5h
TiAgLy8ganVua19zdHJpbmdfdmFsdWUuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIw
MTIzOUU0NSIpIC0+IDEyMzllNDUuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCItaW5m
aW5pdHkiKSAtPiBOYU4gIC8vIGp1bmtfc3RyaW5nX3ZhbHVlLgorICAgICAgICAvLyAgICBTdHJp
bmdUb0RvdWJsZSgiTmFOIikgLT4gTmFOICAvLyBqdW5rX3N0cmluZ192YWx1ZS4KKyAgICAgICAg
U3RyaW5nVG9Eb3VibGVDb252ZXJ0ZXIoaW50IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkb3VibGUgZW1wdHlfc3RyaW5nX3ZhbHVlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkb3VibGUganVua19zdHJpbmdfdmFsdWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGluZmluaXR5X3N5bWJvbCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogbmFuX3N5bWJvbCkKKyAgICAgICAgOiBm
bGFnc18oZmxhZ3MpLAorICAgICAgICBlbXB0eV9zdHJpbmdfdmFsdWVfKGVtcHR5X3N0cmluZ192
YWx1ZSksCisgICAgICAgIGp1bmtfc3RyaW5nX3ZhbHVlXyhqdW5rX3N0cmluZ192YWx1ZSksCisg
ICAgICAgIGluZmluaXR5X3N5bWJvbF8oaW5maW5pdHlfc3ltYm9sKSwKKyAgICAgICAgbmFuX3N5
bWJvbF8obmFuX3N5bWJvbCkgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBQZXJm
b3JtcyB0aGUgY29udmVyc2lvbi4KKyAgICAgICAgLy8gVGhlIG91dHB1dCBwYXJhbWV0ZXIgJ3By
b2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50JyBpcyBzZXQgdG8gdGhlIG51bWJlcgorICAgICAgICAv
LyBvZiBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSBiZWVuIHByb2Nlc3NlZCB0byByZWFkIHRoZSBudW1i
ZXIuCisgICAgICAgIC8vIFNwYWNlcyB0aGFuIGFyZSBwcm9jZXNzZWQgd2l0aCBBTExPV197TEVB
RElOR3xUUkFJTElOR31fU1BBQ0VTIGFyZSBpbmNsdWRlZAorICAgICAgICAvLyBpbiB0aGUgJ3By
b2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50Jy4gVHJhaWxpbmcganVuayBpcyBuZXZlciBpbmNsdWRl
ZC4KKyAgICAgICAgZG91YmxlIFN0cmluZ1RvRG91YmxlKGNvbnN0IGNoYXIqIGJ1ZmZlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGgsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQqIHByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50KTsKKyAgICAgICAg
CisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgaW50IGZsYWdzXzsKKyAgICAgICAgY29uc3Qg
ZG91YmxlIGVtcHR5X3N0cmluZ192YWx1ZV87CisgICAgICAgIGNvbnN0IGRvdWJsZSBqdW5rX3N0
cmluZ192YWx1ZV87CisgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IGluZmluaXR5X3N5bWJvbF87
CisgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IG5hbl9zeW1ib2xfOworICAgICAgICAKKyAgICAg
ICAgRElTQUxMT1dfSU1QTElDSVRfQ09OU1RSVUNUT1JTKFN0cmluZ1RvRG91YmxlQ29udmVydGVy
KTsKKyAgICB9OworICAgIAorfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCisKKyNl
bmRpZiAgLy8gRE9VQkxFX0NPTlZFUlNJT05fRE9VQkxFX0NPTlZFUlNJT05fSF8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kb3VibGUuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvZHRvYS9kb3VibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mM2QzYjRmMDkxYmVhMDA0
NDE4ZGY0NmQyNmNmNjlkMzU2M2JjNzU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9kdG9hL2RvdWJsZS5oCkBAIC0wLDAgKzEsMjQ1IEBACisvLyBDb3B5cmln
aHQgMjAxMCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
Ky8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVy
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8v
ICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8g
ICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
Ky8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKKyNpZm5kZWYgRE9VQkxFX0NPTlZFUlNJT05fRE9VQkxFX0hfCisj
ZGVmaW5lIERPVUJMRV9DT05WRVJTSU9OX0RPVUJMRV9IXworCisjaW5jbHVkZSAiZGl5LWZwLmgi
CisKK25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgLy8gV2UgYXNzdW1l
IHRoYXQgZG91YmxlcyBhbmQgdWludDY0X3QgaGF2ZSB0aGUgc2FtZSBlbmRpYW5uZXNzLgorICAg
IHN0YXRpYyB1aW50NjRfdCBkb3VibGVfdG9fdWludDY0KGRvdWJsZSBkKSB7IHJldHVybiBCaXRD
YXN0PHVpbnQ2NF90PihkKTsgfQorICAgIHN0YXRpYyBkb3VibGUgdWludDY0X3RvX2RvdWJsZSh1
aW50NjRfdCBkNjQpIHsgcmV0dXJuIEJpdENhc3Q8ZG91YmxlPihkNjQpOyB9CisgICAgCisgICAg
Ly8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgZG91Ymxlcy4KKyAgICBjbGFzcyBEb3VibGUgeworICAg
IHB1YmxpYzoKKyAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGtTaWduTWFzayA9IFVJTlQ2
NF8yUEFSVF9DKDB4ODAwMDAwMDAsIDAwMDAwMDAwKTsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVp
bnQ2NF90IGtFeHBvbmVudE1hc2sgPSBVSU5UNjRfMlBBUlRfQygweDdGRjAwMDAwLCAwMDAwMDAw
MCk7CisgICAgICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBrU2lnbmlmaWNhbmRNYXNrID0gVUlO
VDY0XzJQQVJUX0MoMHgwMDBGRkZGRiwgRkZGRkZGRkYpOworICAgICAgICBzdGF0aWMgY29uc3Qg
dWludDY0X3Qga0hpZGRlbkJpdCA9IFVJTlQ2NF8yUEFSVF9DKDB4MDAxMDAwMDAsIDAwMDAwMDAw
KTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBrUGh5c2ljYWxTaWduaWZpY2FuZFNpemUgPSA1
MjsgIC8vIEV4Y2x1ZGVzIHRoZSBoaWRkZW4gYml0LgorICAgICAgICBzdGF0aWMgY29uc3QgaW50
IGtTaWduaWZpY2FuZFNpemUgPSA1MzsKKyAgICAgICAgCisgICAgICAgIERvdWJsZSgpIDogZDY0
XygwKSB7fQorICAgICAgICBleHBsaWNpdCBEb3VibGUoZG91YmxlIGQpIDogZDY0Xyhkb3VibGVf
dG9fdWludDY0KGQpKSB7fQorICAgICAgICBleHBsaWNpdCBEb3VibGUodWludDY0X3QgZDY0KSA6
IGQ2NF8oZDY0KSB7fQorICAgICAgICBleHBsaWNpdCBEb3VibGUoRGl5RnAgZGl5X2ZwKQorICAg
ICAgICA6IGQ2NF8oRGl5RnBUb1VpbnQ2NChkaXlfZnApKSB7fQorICAgICAgICAKKyAgICAgICAg
Ly8gVGhlIHZhbHVlIGVuY29kZWQgYnkgdGhpcyBEb3VibGUgbXVzdCBiZSBncmVhdGVyIG9yIGVx
dWFsIHRvICswLjAuCisgICAgICAgIC8vIEl0IG11c3Qgbm90IGJlIHNwZWNpYWwgKGluZmluaXR5
LCBvciBOYU4pLgorICAgICAgICBEaXlGcCBBc0RpeUZwKCkgY29uc3QgeworICAgICAgICAgICAg
QVNTRVJUKFNpZ24oKSA+IDApOworICAgICAgICAgICAgQVNTRVJUKCFJc1NwZWNpYWwoKSk7Cisg
ICAgICAgICAgICByZXR1cm4gRGl5RnAoU2lnbmlmaWNhbmQoKSwgRXhwb25lbnQoKSk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSB2YWx1ZSBlbmNvZGVkIGJ5IHRoaXMgRG91
YmxlIG11c3QgYmUgc3RyaWN0bHkgZ3JlYXRlciB0aGFuIDAuCisgICAgICAgIERpeUZwIEFzTm9y
bWFsaXplZERpeUZwKCkgY29uc3QgeworICAgICAgICAgICAgQVNTRVJUKHZhbHVlKCkgPiAwLjAp
OworICAgICAgICAgICAgdWludDY0X3QgZiA9IFNpZ25pZmljYW5kKCk7CisgICAgICAgICAgICBp
bnQgZSA9IEV4cG9uZW50KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoZSBjdXJy
ZW50IGRvdWJsZSBjb3VsZCBiZSBhIGRlbm9ybWFsLgorICAgICAgICAgICAgd2hpbGUgKChmICYg
a0hpZGRlbkJpdCkgPT0gMCkgeworICAgICAgICAgICAgICAgIGYgPDw9IDE7CisgICAgICAgICAg
ICAgICAgZS0tOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gRG8gdGhlIGZpbmFsIHNo
aWZ0cyBpbiBvbmUgZ28uCisgICAgICAgICAgICBmIDw8PSBEaXlGcDo6a1NpZ25pZmljYW5kU2l6
ZSAtIGtTaWduaWZpY2FuZFNpemU7CisgICAgICAgICAgICBlIC09IERpeUZwOjprU2lnbmlmaWNh
bmRTaXplIC0ga1NpZ25pZmljYW5kU2l6ZTsKKyAgICAgICAgICAgIHJldHVybiBEaXlGcChmLCBl
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJucyB0aGUgZG91YmxlJ3Mg
Yml0IGFzIHVpbnQ2NC4KKyAgICAgICAgdWludDY0X3QgQXNVaW50NjQoKSBjb25zdCB7CisgICAg
ICAgICAgICByZXR1cm4gZDY0XzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gUmV0
dXJucyB0aGUgbmV4dCBncmVhdGVyIGRvdWJsZS4gUmV0dXJucyAraW5maW5pdHkgb24gaW5wdXQg
K2luZmluaXR5LgorICAgICAgICBkb3VibGUgTmV4dERvdWJsZSgpIGNvbnN0IHsKKyAgICAgICAg
ICAgIGlmIChkNjRfID09IGtJbmZpbml0eSkgcmV0dXJuIERvdWJsZShrSW5maW5pdHkpLnZhbHVl
KCk7CisgICAgICAgICAgICBpZiAoU2lnbigpIDwgMCAmJiBTaWduaWZpY2FuZCgpID09IDApIHsK
KyAgICAgICAgICAgICAgICAvLyAtMC4wCisgICAgICAgICAgICAgICAgcmV0dXJuIDAuMDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChTaWduKCkgPCAwKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIERvdWJsZShkNjRfIC0gMSkudmFsdWUoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIERvdWJsZShkNjRfICsgMSkudmFsdWUoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaW50IEV4cG9uZW50KCkgY29u
c3QgeworICAgICAgICAgICAgaWYgKElzRGVub3JtYWwoKSkgcmV0dXJuIGtEZW5vcm1hbEV4cG9u
ZW50OworICAgICAgICAgICAgCisgICAgICAgICAgICB1aW50NjRfdCBkNjQgPSBBc1VpbnQ2NCgp
OworICAgICAgICAgICAgaW50IGJpYXNlZF9lID0KKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGlu
dD4oKGQ2NCAmIGtFeHBvbmVudE1hc2spID4+IGtQaHlzaWNhbFNpZ25pZmljYW5kU2l6ZSk7Cisg
ICAgICAgICAgICByZXR1cm4gYmlhc2VkX2UgLSBrRXhwb25lbnRCaWFzOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICB1aW50NjRfdCBTaWduaWZpY2FuZCgpIGNvbnN0IHsKKyAgICAgICAg
ICAgIHVpbnQ2NF90IGQ2NCA9IEFzVWludDY0KCk7CisgICAgICAgICAgICB1aW50NjRfdCBzaWdu
aWZpY2FuZCA9IGQ2NCAmIGtTaWduaWZpY2FuZE1hc2s7CisgICAgICAgICAgICBpZiAoIUlzRGVu
b3JtYWwoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBzaWduaWZpY2FuZCArIGtIaWRkZW5C
aXQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBzaWduaWZp
Y2FuZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gUmV0
dXJucyB0cnVlIGlmIHRoZSBkb3VibGUgaXMgYSBkZW5vcm1hbC4KKyAgICAgICAgYm9vbCBJc0Rl
bm9ybWFsKCkgY29uc3QgeworICAgICAgICAgICAgdWludDY0X3QgZDY0ID0gQXNVaW50NjQoKTsK
KyAgICAgICAgICAgIHJldHVybiAoZDY0ICYga0V4cG9uZW50TWFzaykgPT0gMDsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgLy8gV2UgY29uc2lkZXIgZGVub3JtYWxzIG5vdCB0byBiZSBz
cGVjaWFsLgorICAgICAgICAvLyBIZW5jZSBvbmx5IEluZmluaXR5IGFuZCBOYU4gYXJlIHNwZWNp
YWwuCisgICAgICAgIGJvb2wgSXNTcGVjaWFsKCkgY29uc3QgeworICAgICAgICAgICAgdWludDY0
X3QgZDY0ID0gQXNVaW50NjQoKTsKKyAgICAgICAgICAgIHJldHVybiAoZDY0ICYga0V4cG9uZW50
TWFzaykgPT0ga0V4cG9uZW50TWFzazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9v
bCBJc05hbigpIGNvbnN0IHsKKyAgICAgICAgICAgIHVpbnQ2NF90IGQ2NCA9IEFzVWludDY0KCk7
CisgICAgICAgICAgICByZXR1cm4gKChkNjQgJiBrRXhwb25lbnRNYXNrKSA9PSBrRXhwb25lbnRN
YXNrKSAmJgorICAgICAgICAgICAgKChkNjQgJiBrU2lnbmlmaWNhbmRNYXNrKSAhPSAwKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBJc0luZmluaXRlKCkgY29uc3QgeworICAg
ICAgICAgICAgdWludDY0X3QgZDY0ID0gQXNVaW50NjQoKTsKKyAgICAgICAgICAgIHJldHVybiAo
KGQ2NCAmIGtFeHBvbmVudE1hc2spID09IGtFeHBvbmVudE1hc2spICYmCisgICAgICAgICAgICAo
KGQ2NCAmIGtTaWduaWZpY2FuZE1hc2spID09IDApOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBpbnQgU2lnbigpIGNvbnN0IHsKKyAgICAgICAgICAgIHVpbnQ2NF90IGQ2NCA9IEFzVWlu
dDY0KCk7CisgICAgICAgICAgICByZXR1cm4gKGQ2NCAmIGtTaWduTWFzaykgPT0gMD8gMTogLTE7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFByZWNvbmRpdGlvbjogdGhlIHZhbHVl
IGVuY29kZWQgYnkgdGhpcyBEb3VibGUgbXVzdCBiZSBncmVhdGVyIG9yIGVxdWFsCisgICAgICAg
IC8vIHRoYW4gKzAuMC4KKyAgICAgICAgRGl5RnAgVXBwZXJCb3VuZGFyeSgpIGNvbnN0IHsKKyAg
ICAgICAgICAgIEFTU0VSVChTaWduKCkgPiAwKTsKKyAgICAgICAgICAgIHJldHVybiBEaXlGcChT
aWduaWZpY2FuZCgpICogMiArIDEsIEV4cG9uZW50KCkgLSAxKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgLy8gQ29tcHV0ZXMgdGhlIHR3byBib3VuZGFyaWVzIG9mIHRoaXMuCisgICAg
ICAgIC8vIFRoZSBiaWdnZXIgYm91bmRhcnkgKG1fcGx1cykgaXMgbm9ybWFsaXplZC4gVGhlIGxv
d2VyIGJvdW5kYXJ5IGhhcyB0aGUgc2FtZQorICAgICAgICAvLyBleHBvbmVudCBhcyBtX3BsdXMu
CisgICAgICAgIC8vIFByZWNvbmRpdGlvbjogdGhlIHZhbHVlIGVuY29kZWQgYnkgdGhpcyBEb3Vi
bGUgbXVzdCBiZSBncmVhdGVyIHRoYW4gMC4KKyAgICAgICAgdm9pZCBOb3JtYWxpemVkQm91bmRh
cmllcyhEaXlGcCogb3V0X21fbWludXMsIERpeUZwKiBvdXRfbV9wbHVzKSBjb25zdCB7CisgICAg
ICAgICAgICBBU1NFUlQodmFsdWUoKSA+IDAuMCk7CisgICAgICAgICAgICBEaXlGcCB2ID0gdGhp
cy0+QXNEaXlGcCgpOworICAgICAgICAgICAgYm9vbCBzaWduaWZpY2FuZF9pc196ZXJvID0gKHYu
ZigpID09IGtIaWRkZW5CaXQpOworICAgICAgICAgICAgRGl5RnAgbV9wbHVzID0gRGl5RnA6Ok5v
cm1hbGl6ZShEaXlGcCgodi5mKCkgPDwgMSkgKyAxLCB2LmUoKSAtIDEpKTsKKyAgICAgICAgICAg
IERpeUZwIG1fbWludXM7CisgICAgICAgICAgICBpZiAoc2lnbmlmaWNhbmRfaXNfemVybyAmJiB2
LmUoKSAhPSBrRGVub3JtYWxFeHBvbmVudCkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBib3Vu
ZGFyeSBpcyBjbG9zZXIuIFRoaW5rIG9mIHYgPSAxMDAwZTEwIGFuZCB2LSA9IDk5OTllOS4KKyAg
ICAgICAgICAgICAgICAvLyBUaGVuIHRoZSBib3VuZGFyeSAoPT0gKHYgLSB2LSkvMikgaXMgbm90
IGp1c3QgYXQgYSBkaXN0YW5jZSBvZiAxZTkgYnV0CisgICAgICAgICAgICAgICAgLy8gYXQgYSBk
aXN0YW5jZSBvZiAxZTguCisgICAgICAgICAgICAgICAgLy8gVGhlIG9ubHkgZXhjZXB0aW9uIGlz
IGZvciB0aGUgc21hbGxlc3Qgbm9ybWFsOiB0aGUgbGFyZ2VzdCBkZW5vcm1hbCBpcworICAgICAg
ICAgICAgICAgIC8vIGF0IHRoZSBzYW1lIGRpc3RhbmNlIGFzIGl0cyBzdWNjZXNzb3IuCisgICAg
ICAgICAgICAgICAgLy8gTm90ZTogZGVub3JtYWxzIGhhdmUgdGhlIHNhbWUgZXhwb25lbnQgYXMg
dGhlIHNtYWxsZXN0IG5vcm1hbHMuCisgICAgICAgICAgICAgICAgbV9taW51cyA9IERpeUZwKCh2
LmYoKSA8PCAyKSAtIDEsIHYuZSgpIC0gMik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIG1fbWludXMgPSBEaXlGcCgodi5mKCkgPDwgMSkgLSAxLCB2LmUoKSAtIDEpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9taW51cy5zZXRfZihtX21pbnVzLmYoKSA8PCAo
bV9taW51cy5lKCkgLSBtX3BsdXMuZSgpKSk7CisgICAgICAgICAgICBtX21pbnVzLnNldF9lKG1f
cGx1cy5lKCkpOworICAgICAgICAgICAgKm91dF9tX3BsdXMgPSBtX3BsdXM7CisgICAgICAgICAg
ICAqb3V0X21fbWludXMgPSBtX21pbnVzOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBk
b3VibGUgdmFsdWUoKSBjb25zdCB7IHJldHVybiB1aW50NjRfdG9fZG91YmxlKGQ2NF8pOyB9Cisg
ICAgICAgIAorICAgICAgICAvLyBSZXR1cm5zIHRoZSBzaWduaWZpY2FuZCBzaXplIGZvciBhIGdp
dmVuIG9yZGVyIG9mIG1hZ25pdHVkZS4KKyAgICAgICAgLy8gSWYgdiA9IGYqMl5lIHdpdGggMl5w
LTEgPD0gZiA8PSAyXnAgdGhlbiBwK2UgaXMgdidzIG9yZGVyIG9mIG1hZ25pdHVkZS4KKyAgICAg
ICAgLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgYmlu
YXJ5IGRpZ2l0cyB2IHdpbGwgaGF2ZQorICAgICAgICAvLyBvbmNlIGl0J3MgZW5jb2RlZCBpbnRv
IGEgZG91YmxlLiBJbiBhbG1vc3QgYWxsIGNhc2VzIHRoaXMgaXMgZXF1YWwgdG8KKyAgICAgICAg
Ly8ga1NpZ25pZmljYW5kU2l6ZS4gVGhlIG9ubHkgZXhjZXB0aW9ucyBhcmUgZGVub3JtYWxzLiBU
aGV5IHN0YXJ0IHdpdGgKKyAgICAgICAgLy8gbGVhZGluZyB6ZXJvZXMgYW5kIHRoZWlyIGVmZmVj
dGl2ZSBzaWduaWZpY2FuZC1zaXplIGlzIGhlbmNlIHNtYWxsZXIuCisgICAgICAgIHN0YXRpYyBp
bnQgU2lnbmlmaWNhbmRTaXplRm9yT3JkZXJPZk1hZ25pdHVkZShpbnQgb3JkZXIpIHsKKyAgICAg
ICAgICAgIGlmIChvcmRlciA+PSAoa0Rlbm9ybWFsRXhwb25lbnQgKyBrU2lnbmlmaWNhbmRTaXpl
KSkgeworICAgICAgICAgICAgICAgIHJldHVybiBrU2lnbmlmaWNhbmRTaXplOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKG9yZGVyIDw9IGtEZW5vcm1hbEV4cG9uZW50KSByZXR1cm4g
MDsKKyAgICAgICAgICAgIHJldHVybiBvcmRlciAtIGtEZW5vcm1hbEV4cG9uZW50OworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgZG91YmxlIEluZmluaXR5KCkgeworICAgICAg
ICAgICAgcmV0dXJuIERvdWJsZShrSW5maW5pdHkpLnZhbHVlKCk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIHN0YXRpYyBkb3VibGUgTmFOKCkgeworICAgICAgICAgICAgcmV0dXJuIERv
dWJsZShrTmFOKS52YWx1ZSgpOworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6Cisg
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQga0V4cG9uZW50QmlhcyA9IDB4M0ZGICsga1BoeXNpY2Fs
U2lnbmlmaWNhbmRTaXplOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtEZW5vcm1hbEV4cG9u
ZW50ID0gLWtFeHBvbmVudEJpYXMgKyAxOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtNYXhF
eHBvbmVudCA9IDB4N0ZGIC0ga0V4cG9uZW50QmlhczsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVp
bnQ2NF90IGtJbmZpbml0eSA9IFVJTlQ2NF8yUEFSVF9DKDB4N0ZGMDAwMDAsIDAwMDAwMDAwKTsK
KyAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGtOYU4gPSBVSU5UNjRfMlBBUlRfQygweDdG
RjgwMDAwLCAwMDAwMDAwMCk7CisgICAgICAgIAorICAgICAgICBjb25zdCB1aW50NjRfdCBkNjRf
OworICAgICAgICAKKyAgICAgICAgc3RhdGljIHVpbnQ2NF90IERpeUZwVG9VaW50NjQoRGl5RnAg
ZGl5X2ZwKSB7CisgICAgICAgICAgICB1aW50NjRfdCBzaWduaWZpY2FuZCA9IGRpeV9mcC5mKCk7
CisgICAgICAgICAgICBpbnQgZXhwb25lbnQgPSBkaXlfZnAuZSgpOworICAgICAgICAgICAgd2hp
bGUgKHNpZ25pZmljYW5kID4ga0hpZGRlbkJpdCArIGtTaWduaWZpY2FuZE1hc2spIHsKKyAgICAg
ICAgICAgICAgICBzaWduaWZpY2FuZCA+Pj0gMTsKKyAgICAgICAgICAgICAgICBleHBvbmVudCsr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGV4cG9uZW50ID49IGtNYXhFeHBvbmVu
dCkgeworICAgICAgICAgICAgICAgIHJldHVybiBrSW5maW5pdHk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoZXhwb25lbnQgPCBrRGVub3JtYWxFeHBvbmVudCkgeworICAgICAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hpbGUgKGV4cG9u
ZW50ID4ga0Rlbm9ybWFsRXhwb25lbnQgJiYgKHNpZ25pZmljYW5kICYga0hpZGRlbkJpdCkgPT0g
MCkgeworICAgICAgICAgICAgICAgIHNpZ25pZmljYW5kIDw8PSAxOworICAgICAgICAgICAgICAg
IGV4cG9uZW50LS07CisgICAgICAgICAgICB9CisgICAgICAgICAgICB1aW50NjRfdCBiaWFzZWRf
ZXhwb25lbnQ7CisgICAgICAgICAgICBpZiAoZXhwb25lbnQgPT0ga0Rlbm9ybWFsRXhwb25lbnQg
JiYgKHNpZ25pZmljYW5kICYga0hpZGRlbkJpdCkgPT0gMCkgeworICAgICAgICAgICAgICAgIGJp
YXNlZF9leHBvbmVudCA9IDA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IGJpYXNlZF9leHBvbmVudCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihleHBvbmVudCArIGtFeHBv
bmVudEJpYXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIChzaWduaWZpY2Fu
ZCAmIGtTaWduaWZpY2FuZE1hc2spIHwKKyAgICAgICAgICAgIChiaWFzZWRfZXhwb25lbnQgPDwg
a1BoeXNpY2FsU2lnbmlmaWNhbmRTaXplKTsKKyAgICAgICAgfQorICAgIH07CisgICAgCit9ICAv
LyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KKworI2VuZGlmICAvLyBET1VCTEVfQ09OVkVS
U0lPTl9ET1VCTEVfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRv
YS9mYXN0LWR0b2EuY2MgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZmFzdC1kdG9h
LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmRkODY4ZTBiMzhhNzUzOGU1ZjlkYTcwNWE5OWQwYWVlMjAyNDg4MDAK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZmFzdC1k
dG9hLmNjCkBAIC0wLDAgKzEsNzM1IEBACisvLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJvamVj
dCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisv
LyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNp
bmNsdWRlICJmYXN0LWR0b2EuaCIKKworI2luY2x1ZGUgImNhY2hlZC1wb3dlcnMuaCIKKyNpbmNs
dWRlICJkaXktZnAuaCIKKyNpbmNsdWRlICJkb3VibGUuaCIKKworbmFtZXNwYWNlIGRvdWJsZV9j
b252ZXJzaW9uIHsKKyAgICAKKyAgICAvLyBUaGUgbWluaW1hbCBhbmQgbWF4aW1hbCB0YXJnZXQg
ZXhwb25lbnQgZGVmaW5lIHRoZSByYW5nZSBvZiB3J3MgYmluYXJ5CisgICAgLy8gZXhwb25lbnQs
IHdoZXJlICd3JyBpcyB0aGUgcmVzdWx0IG9mIG11bHRpcGx5aW5nIHRoZSBpbnB1dCBieSBhIGNh
Y2hlZCBwb3dlcgorICAgIC8vIG9mIHRlbi4KKyAgICAvLworICAgIC8vIEEgZGlmZmVyZW50IHJh
bmdlIG1pZ2h0IGJlIGNob3NlbiBvbiBhIGRpZmZlcmVudCBwbGF0Zm9ybSwgdG8gb3B0aW1pemUg
ZGlnaXQKKyAgICAvLyBnZW5lcmF0aW9uLCBidXQgYSBzbWFsbGVyIHJhbmdlIHJlcXVpcmVzIG1v
cmUgcG93ZXJzIG9mIHRlbiB0byBiZSBjYWNoZWQuCisgICAgc3RhdGljIGNvbnN0IGludCBrTWlu
aW1hbFRhcmdldEV4cG9uZW50ID0gLTYwOworICAgIHN0YXRpYyBjb25zdCBpbnQga01heGltYWxU
YXJnZXRFeHBvbmVudCA9IC0zMjsKKyAgICAKKyAgICAKKyAgICAvLyBBZGp1c3RzIHRoZSBsYXN0
IGRpZ2l0IG9mIHRoZSBnZW5lcmF0ZWQgbnVtYmVyLCBhbmQgc2NyZWVucyBvdXQgZ2VuZXJhdGVk
CisgICAgLy8gc29sdXRpb25zIHRoYXQgbWF5IGJlIGluYWNjdXJhdGUuIEEgc29sdXRpb24gbWF5
IGJlIGluYWNjdXJhdGUgaWYgaXQgaXMKKyAgICAvLyBvdXRzaWRlIHRoZSBzYWZlIGludGVydmFs
LCBvciBpZiB3ZSBjYW5ub3QgcHJvdmUgdGhhdCBpdCBpcyBjbG9zZXIgdG8gdGhlCisgICAgLy8g
aW5wdXQgdGhhbiBhIG5laWdoYm9yaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzYW1lIGxlbmd0
aC4KKyAgICAvLworICAgIC8vIElucHV0OiAqIGJ1ZmZlciBjb250YWluaW5nIHRoZSBkaWdpdHMg
b2YgdG9vX2hpZ2ggLyAxMF5rYXBwYQorICAgIC8vICAgICAgICAqIHRoZSBidWZmZXIncyBsZW5n
dGgKKyAgICAvLyAgICAgICAgKiBkaXN0YW5jZV90b29faGlnaF93ID09ICh0b29faGlnaCAtIHcp
LmYoKSAqIHVuaXQKKyAgICAvLyAgICAgICAgKiB1bnNhZmVfaW50ZXJ2YWwgPT0gKHRvb19oaWdo
IC0gdG9vX2xvdykuZigpICogdW5pdAorICAgIC8vICAgICAgICAqIHJlc3QgPSAodG9vX2hpZ2gg
LSBidWZmZXIgKiAxMF5rYXBwYSkuZigpICogdW5pdAorICAgIC8vICAgICAgICAqIHRlbl9rYXBw
YSA9IDEwXmthcHBhICogdW5pdAorICAgIC8vICAgICAgICAqIHVuaXQgPSB0aGUgY29tbW9uIG11
bHRpcGxpZXIKKyAgICAvLyBPdXRwdXQ6IHJldHVybnMgdHJ1ZSBpZiB0aGUgYnVmZmVyIGlzIGd1
YXJhbnRlZWQgdG8gY29udGFpbiB0aGUgY2xvc2VzdAorICAgIC8vICAgIHJlcHJlc2VudGFibGUg
bnVtYmVyIHRvIHRoZSBpbnB1dC4KKyAgICAvLyAgTW9kaWZpZXMgdGhlIGdlbmVyYXRlZCBkaWdp
dHMgaW4gdGhlIGJ1ZmZlciB0byBhcHByb2FjaCAocm91bmQgdG93YXJkcykgdy4KKyAgICBzdGF0
aWMgYm9vbCBSb3VuZFdlZWQoVmVjdG9yPGNoYXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3Qg
ZGlzdGFuY2VfdG9vX2hpZ2hfdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3Qg
dW5zYWZlX2ludGVydmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCByZXN0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCB0ZW5fa2FwcGEsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHVuaXQpIHsKKyAgICAgICAgdWludDY0X3Qgc21h
bGxfZGlzdGFuY2UgPSBkaXN0YW5jZV90b29faGlnaF93IC0gdW5pdDsKKyAgICAgICAgdWludDY0
X3QgYmlnX2Rpc3RhbmNlID0gZGlzdGFuY2VfdG9vX2hpZ2hfdyArIHVuaXQ7CisgICAgICAgIC8v
IExldCB3X2xvdyAgPSB0b29faGlnaCAtIGJpZ19kaXN0YW5jZSwgYW5kCisgICAgICAgIC8vICAg
ICB3X2hpZ2ggPSB0b29faGlnaCAtIHNtYWxsX2Rpc3RhbmNlLgorICAgICAgICAvLyBOb3RlOiB3
X2xvdyA8IHcgPCB3X2hpZ2gKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhlIHJlYWwgdyAoKiB1
bml0KSBtdXN0IGxpZSBzb21ld2hlcmUgaW5zaWRlIHRoZSBpbnRlcnZhbAorICAgICAgICAvLyBd
d19sb3c7IHdfaGlnaFsgKG9mdGVuIHdyaXR0ZW4gYXMgIih3X2xvdzsgd19oaWdoKSIpCisgICAg
ICAgIAorICAgICAgICAvLyBCYXNpY2FsbHkgdGhlIGJ1ZmZlciBjdXJyZW50bHkgY29udGFpbnMg
YSBudW1iZXIgaW4gdGhlIHVuc2FmZSBpbnRlcnZhbAorICAgICAgICAvLyBddG9vX2xvdzsgdG9v
X2hpZ2hbIHdpdGggdG9vX2xvdyA8IHcgPCB0b29faGlnaAorICAgICAgICAvLworICAgICAgICAv
LyAgdG9vX2hpZ2ggLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAt
IC0gLSAtIC0gLSAtIC0gLSAtIC0KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBediAx
IHVuaXQgICAgICAgICAgICBeICAgICAgXiAgICAgICAgICAgICAgICAgXiAgICAgIF4KKyAgICAg
ICAgLy8gIGJvdW5kYXJ5X2hpZ2ggLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAuICAgICAgLiAg
ICAgICAgICAgICAgICAgLiAgICAgIC4KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBe
diAxIHVuaXQgICAgICAgICAgICAuICAgICAgLiAgICAgICAgICAgICAgICAgLiAgICAgIC4KKyAg
ICAgICAgLy8gICAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICArICAtIC0g
KyAtIC0gLSAtIC0gLSAgICAgLiAgICAgIC4KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAuICAgICAgLiAgICAgICAgIF4gICAgICAgLiAgICAgIC4K
KyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICBi
aWdfZGlzdGFuY2UgIC4gICAgICAgLiAgICAgIC4KKyAgICAgICAgLy8gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAuICAgICAgLiAgICAgICAgIC4gICAgICAgLiAgICBy
ZXN0CisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21hbGxfZGlzdGFu
Y2UgICAgIC4gICAgICAgICAuICAgICAgIC4gICAgICAuCisgICAgICAgIC8vICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiAgICAgIC4gICAgICAgICAuICAgICAgIC4g
ICAgICAuCisgICAgICAgIC8vICB3X2hpZ2ggLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g
LSAtIC0gICAgIC4gICAgICAgICAuICAgICAgIC4gICAgICAuCisgICAgICAgIC8vICAgICAgICAg
ICAgICAgICAgICAgXnYgMSB1bml0ICAgICAgICAgICAgICAgICAgIC4gICAgICAgICAuICAgICAg
IC4gICAgICAuCisgICAgICAgIC8vICB3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gICAgIC4gICAgICAgICAuICAgICAgIC4gICAgICAuCisgICAgICAgIC8vICAgICAg
ICAgICAgICAgICAgICAgXnYgMSB1bml0ICAgICAgICAgICAgICAgICAgIHYgICAgICAgICAuICAg
ICAgIC4gICAgICAuCisgICAgICAgIC8vICB3X2xvdyAgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g
LSAtIC0gLSAtIC0gLSAtIC0gICAgICAgICAuICAgICAgIC4gICAgICAuCisgICAgICAgIC8vICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAu
ICAgICAgIC4gICAgICB2CisgICAgICAgIC8vICBidWZmZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLQorICAgICAgICAv
LyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLiAgICAgICAuCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzYWZlX2ludGVydmFsICAgIC4KKyAgICAgICAgLy8gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgICAgICAg
LgorICAgICAgICAvLyAgIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAt
IC0gLSAtIC0gLSAtIC0gLSAtICAgICAuCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAg
XnYgMSB1bml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4KKyAgICAgICAg
Ly8gIGJvdW5kYXJ5X2xvdyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAg
ICAgICAgdW5zYWZlX2ludGVydmFsCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXnYg
MSB1bml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYKKyAgICAgICAgLy8g
IHRvb19sb3cgIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAt
IC0gLSAtIC0gLSAtIC0gLSAtCisgICAgICAgIC8vCisgICAgICAgIC8vCisgICAgICAgIC8vIE5v
dGUgdGhhdCB0aGUgdmFsdWUgb2YgYnVmZmVyIGNvdWxkIGxpZSBhbnl3aGVyZSBpbnNpZGUgdGhl
IHJhbmdlIHRvb19sb3cKKyAgICAgICAgLy8gdG8gdG9vX2hpZ2guCisgICAgICAgIC8vCisgICAg
ICAgIC8vIGJvdW5kYXJ5X2xvdywgYm91bmRhcnlfaGlnaCBhbmQgdyBhcmUgYXBwcm94aW1hdGlv
bnMgb2YgdGhlIHJlYWwgYm91bmRhcmllcworICAgICAgICAvLyBhbmQgdiAodGhlIGlucHV0IG51
bWJlcikuIFRoZXkgYXJlIGd1YXJhbnRlZWQgdG8gYmUgcHJlY2lzZSB1cCB0byBvbmUgdW5pdC4K
KyAgICAgICAgLy8gSW4gZmFjdCB0aGUgZXJyb3IgaXMgZ3VhcmFudGVlZCB0byBiZSBzdHJpY3Rs
eSBsZXNzIHRoYW4gb25lIHVuaXQuCisgICAgICAgIC8vCisgICAgICAgIC8vIEFueXRoaW5nIHRo
YXQgbGllcyBvdXRzaWRlIHRoZSB1bnNhZmUgaW50ZXJ2YWwgaXMgZ3VhcmFudGVlZCBub3QgdG8g
cm91bmQKKyAgICAgICAgLy8gdG8gdiB3aGVuIHJlYWQgYWdhaW4uCisgICAgICAgIC8vIEFueXRo
aW5nIHRoYXQgbGllcyBpbnNpZGUgdGhlIHNhZmUgaW50ZXJ2YWwgaXMgZ3VhcmFudGVlZCB0byBy
b3VuZCB0byB2CisgICAgICAgIC8vIHdoZW4gcmVhZCBhZ2Fpbi4KKyAgICAgICAgLy8gSWYgdGhl
IG51bWJlciBpbnNpZGUgdGhlIGJ1ZmZlciBsaWVzIGluc2lkZSB0aGUgdW5zYWZlIGludGVydmFs
IGJ1dCBub3QKKyAgICAgICAgLy8gaW5zaWRlIHRoZSBzYWZlIGludGVydmFsIHRoZW4gd2Ugc2lt
cGx5IGRvIG5vdCBrbm93IGFuZCBiYWlsIG91dCAocmV0dXJuaW5nCisgICAgICAgIC8vIGZhbHNl
KS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gU2ltaWxhcmx5IHdlIGhhdmUgdG8gdGFrZSBpbnRv
IGFjY291bnQgdGhlIGltcHJlY2lzaW9uIG9mICd3JyB3aGVuIGZpbmRpbmcKKyAgICAgICAgLy8g
dGhlIGNsb3Nlc3QgcmVwcmVzZW50YXRpb24gb2YgJ3cnLiBJZiB3ZSBoYXZlIHR3byBwb3RlbnRp
YWwKKyAgICAgICAgLy8gcmVwcmVzZW50YXRpb25zLCBhbmQgb25lIGlzIGNsb3NlciB0byBib3Ro
IHdfbG93IGFuZCB3X2hpZ2gsIHRoZW4gd2Uga25vdworICAgICAgICAvLyBpdCBpcyBjbG9zZXIg
dG8gdGhlIGFjdHVhbCB2YWx1ZSB2LgorICAgICAgICAvLworICAgICAgICAvLyBCeSBnZW5lcmF0
aW5nIHRoZSBkaWdpdHMgb2YgdG9vX2hpZ2ggd2UgZ290IHRoZSBsYXJnZXN0IChjbG9zZXN0IHRv
CisgICAgICAgIC8vIHRvb19oaWdoKSBidWZmZXIgdGhhdCBpcyBzdGlsbCBpbiB0aGUgdW5zYWZl
IGludGVydmFsLiBJbiB0aGUgY2FzZSB3aGVyZQorICAgICAgICAvLyB3X2hpZ2ggPCBidWZmZXIg
PCB0b29faGlnaCB3ZSB0cnkgdG8gZGVjcmVtZW50IHRoZSBidWZmZXIuCisgICAgICAgIC8vIFRo
aXMgd2F5IHRoZSBidWZmZXIgYXBwcm9hY2hlcyAocm91bmRzIHRvd2FyZHMpIHcuCisgICAgICAg
IC8vIFRoZXJlIGFyZSAzIGNvbmRpdGlvbnMgdGhhdCBzdG9wIHRoZSBkZWNyZW1lbnRhdGlvbiBw
cm9jZXNzOgorICAgICAgICAvLyAgIDEpIHRoZSBidWZmZXIgaXMgYWxyZWFkeSBiZWxvdyB3X2hp
Z2gKKyAgICAgICAgLy8gICAyKSBkZWNyZW1lbnRpbmcgdGhlIGJ1ZmZlciB3b3VsZCBtYWtlIGl0
IGxlYXZlIHRoZSB1bnNhZmUgaW50ZXJ2YWwKKyAgICAgICAgLy8gICAzKSBkZWNyZW1lbnRpbmcg
dGhlIGJ1ZmZlciB3b3VsZCB5aWVsZCBhIG51bWJlciBiZWxvdyB3X2hpZ2ggYW5kIGZhcnRoZXIK
KyAgICAgICAgLy8gICAgICBhd2F5IHRoYW4gdGhlIGN1cnJlbnQgbnVtYmVyLiBJbiBvdGhlciB3
b3JkczoKKyAgICAgICAgLy8gICAgICAgICAgICAgIChidWZmZXJ7LTF9IDwgd19oaWdoKSAmJiB3
X2hpZ2ggLSBidWZmZXJ7LTF9ID4gYnVmZmVyIC0gd19oaWdoCisgICAgICAgIC8vIEluc3RlYWQg
b2YgdXNpbmcgdGhlIGJ1ZmZlciBkaXJlY3RseSB3ZSB1c2UgaXRzIGRpc3RhbmNlIHRvIHRvb19o
aWdoLgorICAgICAgICAvLyBDb25jZXB0dWFsbHkgcmVzdCB+PSB0b29faGlnaCAtIGJ1ZmZlcgor
ICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIHRoZSBmb2xsb3dpbmcgdGVzdHMgaW4gdGhpcyBvcmRl
ciB0byBhdm9pZCBvdmVyLSBhbmQKKyAgICAgICAgLy8gdW5kZXJmbG93cy4KKyAgICAgICAgQVNT
RVJUKHJlc3QgPD0gdW5zYWZlX2ludGVydmFsKTsKKyAgICAgICAgd2hpbGUgKHJlc3QgPCBzbWFs
bF9kaXN0YW5jZSAmJiAgLy8gTmVnYXRlZCBjb25kaXRpb24gMQorICAgICAgICAgICAgICAgdW5z
YWZlX2ludGVydmFsIC0gcmVzdCA+PSB0ZW5fa2FwcGEgJiYgIC8vIE5lZ2F0ZWQgY29uZGl0aW9u
IDIKKyAgICAgICAgICAgICAgIChyZXN0ICsgdGVuX2thcHBhIDwgc21hbGxfZGlzdGFuY2UgfHwg
IC8vIGJ1ZmZlcnstMX0gPiB3X2hpZ2gKKyAgICAgICAgICAgICAgICBzbWFsbF9kaXN0YW5jZSAt
IHJlc3QgPj0gcmVzdCArIHRlbl9rYXBwYSAtIHNtYWxsX2Rpc3RhbmNlKSkgeworICAgICAgICAg
ICAgICAgICAgIGJ1ZmZlcltsZW5ndGggLSAxXS0tOworICAgICAgICAgICAgICAgICAgIHJlc3Qg
Kz0gdGVuX2thcHBhOworICAgICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gV2Ug
aGF2ZSBhcHByb2FjaGVkIHcrIGFzIG11Y2ggYXMgcG9zc2libGUuIFdlIG5vdyB0ZXN0IGlmIGFw
cHJvYWNoaW5nIHctCisgICAgICAgIC8vIHdvdWxkIHJlcXVpcmUgY2hhbmdpbmcgdGhlIGJ1ZmZl
ci4gSWYgeWVzLCB0aGVuIHdlIGhhdmUgdHdvIHBvc3NpYmxlCisgICAgICAgIC8vIHJlcHJlc2Vu
dGF0aW9ucyBjbG9zZSB0byB3LCBidXQgd2UgY2Fubm90IGRlY2lkZSB3aGljaCBvbmUgaXMgY2xv
c2VyLgorICAgICAgICBpZiAocmVzdCA8IGJpZ19kaXN0YW5jZSAmJgorICAgICAgICAgICAgdW5z
YWZlX2ludGVydmFsIC0gcmVzdCA+PSB0ZW5fa2FwcGEgJiYKKyAgICAgICAgICAgIChyZXN0ICsg
dGVuX2thcHBhIDwgYmlnX2Rpc3RhbmNlIHx8CisgICAgICAgICAgICAgYmlnX2Rpc3RhbmNlIC0g
cmVzdCA+IHJlc3QgKyB0ZW5fa2FwcGEgLSBiaWdfZGlzdGFuY2UpKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gV2Vl
ZGluZyB0ZXN0LgorICAgICAgICAvLyAgIFRoZSBzYWZlIGludGVydmFsIGlzIFt0b29fbG93ICsg
MiB1bHA7IHRvb19oaWdoIC0gMiB1bHBdCisgICAgICAgIC8vICAgU2luY2UgdG9vX2xvdyA9IHRv
b19oaWdoIC0gdW5zYWZlX2ludGVydmFsIHRoaXMgaXMgZXF1aXZhbGVudCB0bworICAgICAgICAv
LyAgICAgIFt0b29faGlnaCAtIHVuc2FmZV9pbnRlcnZhbCArIDQgdWxwOyB0b29faGlnaCAtIDIg
dWxwXQorICAgICAgICAvLyAgIENvbmNlcHR1YWxseSB3ZSBoYXZlOiByZXN0IH49IHRvb19oaWdo
IC0gYnVmZmVyCisgICAgICAgIHJldHVybiAoMiAqIHVuaXQgPD0gcmVzdCkgJiYgKHJlc3QgPD0g
dW5zYWZlX2ludGVydmFsIC0gNCAqIHVuaXQpOworICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBS
b3VuZHMgdGhlIGJ1ZmZlciB1cHdhcmRzIGlmIHRoZSByZXN1bHQgaXMgY2xvc2VyIHRvIHYgYnkg
cG9zc2libHkgYWRkaW5nCisgICAgLy8gMSB0byB0aGUgYnVmZmVyLiBJZiB0aGUgcHJlY2lzaW9u
IG9mIHRoZSBjYWxjdWxhdGlvbiBpcyBub3Qgc3VmZmljaWVudCB0bworICAgIC8vIHJvdW5kIGNv
cnJlY3RseSwgcmV0dXJuIGZhbHNlLgorICAgIC8vIFRoZSByb3VuZGluZyBtaWdodCBzaGlmdCB0
aGUgd2hvbGUgYnVmZmVyIGluIHdoaWNoIGNhc2UgdGhlIGthcHBhIGlzCisgICAgLy8gYWRqdXN0
ZWQuIEZvciBleGFtcGxlICI5OSIsIGthcHBhID0gMyBtaWdodCBiZWNvbWUgIjEwIiwga2FwcGEg
PSA0LgorICAgIC8vCisgICAgLy8gSWYgMipyZXN0ID4gdGVuX2thcHBhIHRoZW4gdGhlIGJ1ZmZl
ciBuZWVkcyB0byBiZSByb3VuZCB1cC4KKyAgICAvLyByZXN0IGNhbiBoYXZlIGFuIGVycm9yIG9m
ICsvLSAxIHVuaXQuIFRoaXMgZnVuY3Rpb24gYWNjb3VudHMgZm9yIHRoZQorICAgIC8vIGltcHJl
Y2lzaW9uIGFuZCByZXR1cm5zIGZhbHNlLCBpZiB0aGUgcm91bmRpbmcgZGlyZWN0aW9uIGNhbm5v
dCBiZQorICAgIC8vIHVuYW1iaWd1b3VzbHkgZGV0ZXJtaW5lZC4KKyAgICAvLworICAgIC8vIFBy
ZWNvbmRpdGlvbjogcmVzdCA8IHRlbl9rYXBwYS4KKyAgICBzdGF0aWMgYm9vbCBSb3VuZFdlZWRD
b3VudGVkKFZlY3RvcjxjaGFyPiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0
X3QgcmVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHRlbl9r
YXBwYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHVuaXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGthcHBhKSB7CisgICAgICAgIEFT
U0VSVChyZXN0IDwgdGVuX2thcHBhKTsKKyAgICAgICAgLy8gVGhlIGZvbGxvd2luZyB0ZXN0cyBh
cmUgZG9uZSBpbiBhIHNwZWNpZmljIG9yZGVyIHRvIGF2b2lkIG92ZXJmbG93cy4gVGhleQorICAg
ICAgICAvLyB3aWxsIHdvcmsgY29ycmVjdGx5IHdpdGggYW55IHVpbnQ2NCB2YWx1ZXMgb2YgcmVz
dCA8IHRlbl9rYXBwYSBhbmQgdW5pdC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgdGhlIHVu
aXQgaXMgdG9vIGJpZywgdGhlbiB3ZSBkb24ndCBrbm93IHdoaWNoIHdheSB0byByb3VuZC4gRm9y
IGV4YW1wbGUKKyAgICAgICAgLy8gYSB1bml0IG9mIDUwIG1lYW5zIHRoYXQgdGhlIHJlYWwgbnVt
YmVyIGxpZXMgd2l0aGluIHJlc3QgKy8tIDUwLiBJZgorICAgICAgICAvLyAxMF5rYXBwYSA9PSA0
MCB0aGVuIHRoZXJlIGlzIG5vIHdheSB0byB0ZWxsIHdoaWNoIHdheSB0byByb3VuZC4KKyAgICAg
ICAgaWYgKHVuaXQgPj0gdGVuX2thcHBhKSByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIEV2ZW4g
aWYgdW5pdCBpcyBqdXN0IGhhbGYgdGhlIHNpemUgb2YgMTBea2FwcGEgd2UgYXJlIGFscmVhZHkg
Y29tcGxldGVseQorICAgICAgICAvLyBsb3N0LiAoQW5kIGFmdGVyIHRoZSBwcmV2aW91cyB0ZXN0
IHdlIGtub3cgdGhhdCB0aGUgZXhwcmVzc2lvbiB3aWxsIG5vdAorICAgICAgICAvLyBvdmVyL3Vu
ZGVyZmxvdy4pCisgICAgICAgIGlmICh0ZW5fa2FwcGEgLSB1bml0IDw9IHVuaXQpIHJldHVybiBm
YWxzZTsKKyAgICAgICAgLy8gSWYgMiAqIChyZXN0ICsgdW5pdCkgPD0gMTBea2FwcGEgd2UgY2Fu
IHNhZmVseSByb3VuZCBkb3duLgorICAgICAgICBpZiAoKHRlbl9rYXBwYSAtIHJlc3QgPiByZXN0
KSAmJiAodGVuX2thcHBhIC0gMiAqIHJlc3QgPj0gMiAqIHVuaXQpKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBJZiAyICogKHJlc3QgLSB1bml0KSA+
PSAxMF5rYXBwYSwgdGhlbiB3ZSBjYW4gc2FmZWx5IHJvdW5kIHVwLgorICAgICAgICBpZiAoKHJl
c3QgPiB1bml0KSAmJiAodGVuX2thcHBhIC0gKHJlc3QgLSB1bml0KSA8PSAocmVzdCAtIHVuaXQp
KSkgeworICAgICAgICAgICAgLy8gSW5jcmVtZW50IHRoZSBsYXN0IGRpZ2l0IHJlY3Vyc2l2ZWx5
IHVudGlsIHdlIGZpbmQgYSBub24gJzknIGRpZ2l0LgorICAgICAgICAgICAgYnVmZmVyW2xlbmd0
aCAtIDFdKys7CisgICAgICAgICAgICBmb3IgKGludCBpID0gbGVuZ3RoIC0gMTsgaSA+IDA7IC0t
aSkgeworICAgICAgICAgICAgICAgIGlmIChidWZmZXJbaV0gIT0gJzAnICsgMTApIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGJ1ZmZlcltpXSA9ICcwJzsKKyAgICAgICAgICAgICAgICBidWZmZXJb
aSAtIDFdKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBJZiB0aGUgZmlyc3QgZGln
aXQgaXMgbm93ICcwJysgMTAgd2UgaGFkIGEgYnVmZmVyIHdpdGggYWxsICc5J3MuIFdpdGggdGhl
CisgICAgICAgICAgICAvLyBleGNlcHRpb24gb2YgdGhlIGZpcnN0IGRpZ2l0IGFsbCBkaWdpdHMg
YXJlIG5vdyAnMCcuIFNpbXBseSBzd2l0Y2ggdGhlCisgICAgICAgICAgICAvLyBmaXJzdCBkaWdp
dCB0byAnMScgYW5kIGFkanVzdCB0aGUga2FwcGEuIEV4YW1wbGU6ICI5OSIgYmVjb21lcyAiMTAi
IGFuZAorICAgICAgICAgICAgLy8gdGhlIHBvd2VyICh0aGUga2FwcGEpIGlzIGluY3JlYXNlZC4K
KyAgICAgICAgICAgIGlmIChidWZmZXJbMF0gPT0gJzAnICsgMTApIHsKKyAgICAgICAgICAgICAg
ICBidWZmZXJbMF0gPSAnMSc7CisgICAgICAgICAgICAgICAgKCprYXBwYSkgKz0gMTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgCisgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90
IGtUZW40ID0gMTAwMDA7CisgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IGtUZW41ID0gMTAwMDAw
OworICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBrVGVuNiA9IDEwMDAwMDA7CisgICAgc3RhdGlj
IGNvbnN0IHVpbnQzMl90IGtUZW43ID0gMTAwMDAwMDA7CisgICAgc3RhdGljIGNvbnN0IHVpbnQz
Ml90IGtUZW44ID0gMTAwMDAwMDAwOworICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBrVGVuOSA9
IDEwMDAwMDAwMDA7CisgICAgCisgICAgLy8gUmV0dXJucyB0aGUgYmlnZ2VzdCBwb3dlciBvZiB0
ZW4gdGhhdCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuCisgICAgLy8gbnVtYmVy
LiBXZSBmdXJ0aGVybW9yZSByZWNlaXZlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBiaXRzICdudW1i
ZXInIGhhcy4KKyAgICAvLyBJZiBudW1iZXJfYml0cyA9PSAwIHRoZW4gMF4tMSBpcyByZXR1cm5l
ZAorICAgIC8vIFRoZSBudW1iZXIgb2YgYml0cyBtdXN0IGJlIDw9IDMyLgorICAgIC8vIFByZWNv
bmRpdGlvbjogbnVtYmVyIDwgKDEgPDwgKG51bWJlcl9iaXRzICsgMSkpLgorICAgIHN0YXRpYyB2
b2lkIEJpZ2dlc3RQb3dlclRlbih1aW50MzJfdCBudW1iZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBudW1iZXJfYml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdWludDMyX3QqIHBvd2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQqIGV4cG9uZW50KSB7CisgICAgICAgIEFTU0VSVChudW1iZXIgPCAoMSA8PCAobnVtYmVyX2Jp
dHMgKyAxKSkpOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChudW1iZXJfYml0cykgeworICAg
ICAgICAgICAgY2FzZSAzMjoKKyAgICAgICAgICAgIGNhc2UgMzE6CisgICAgICAgICAgICBjYXNl
IDMwOgorICAgICAgICAgICAgICAgIGlmIChrVGVuOSA8PSBudW1iZXIpIHsKKyAgICAgICAgICAg
ICAgICAgICAgKnBvd2VyID0ga1Rlbjk7CisgICAgICAgICAgICAgICAgICAgICpleHBvbmVudCA9
IDk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gIC8vIGVs
c2UgZmFsbHRocm91Z2gKKyAgICAgICAgICAgIGNhc2UgMjk6CisgICAgICAgICAgICBjYXNlIDI4
OgorICAgICAgICAgICAgY2FzZSAyNzoKKyAgICAgICAgICAgICAgICBpZiAoa1RlbjggPD0gbnVt
YmVyKSB7CisgICAgICAgICAgICAgICAgICAgICpwb3dlciA9IGtUZW44OworICAgICAgICAgICAg
ICAgICAgICAqZXhwb25lbnQgPSA4OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9ICAvLyBlbHNlIGZhbGx0aHJvdWdoCisgICAgICAgICAgICBjYXNlIDI2Ogor
ICAgICAgICAgICAgY2FzZSAyNToKKyAgICAgICAgICAgIGNhc2UgMjQ6CisgICAgICAgICAgICAg
ICAgaWYgKGtUZW43IDw9IG51bWJlcikgeworICAgICAgICAgICAgICAgICAgICAqcG93ZXIgPSBr
VGVuNzsKKyAgICAgICAgICAgICAgICAgICAgKmV4cG9uZW50ID0gNzsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSAgLy8gZWxzZSBmYWxsdGhyb3VnaAorICAg
ICAgICAgICAgY2FzZSAyMzoKKyAgICAgICAgICAgIGNhc2UgMjI6CisgICAgICAgICAgICBjYXNl
IDIxOgorICAgICAgICAgICAgY2FzZSAyMDoKKyAgICAgICAgICAgICAgICBpZiAoa1RlbjYgPD0g
bnVtYmVyKSB7CisgICAgICAgICAgICAgICAgICAgICpwb3dlciA9IGtUZW42OworICAgICAgICAg
ICAgICAgICAgICAqZXhwb25lbnQgPSA2OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9ICAvLyBlbHNlIGZhbGx0aHJvdWdoCisgICAgICAgICAgICBjYXNlIDE5
OgorICAgICAgICAgICAgY2FzZSAxODoKKyAgICAgICAgICAgIGNhc2UgMTc6CisgICAgICAgICAg
ICAgICAgaWYgKGtUZW41IDw9IG51bWJlcikgeworICAgICAgICAgICAgICAgICAgICAqcG93ZXIg
PSBrVGVuNTsKKyAgICAgICAgICAgICAgICAgICAgKmV4cG9uZW50ID0gNTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSAgLy8gZWxzZSBmYWxsdGhyb3VnaAor
ICAgICAgICAgICAgY2FzZSAxNjoKKyAgICAgICAgICAgIGNhc2UgMTU6CisgICAgICAgICAgICBj
YXNlIDE0OgorICAgICAgICAgICAgICAgIGlmIChrVGVuNCA8PSBudW1iZXIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgKnBvd2VyID0ga1RlbjQ7CisgICAgICAgICAgICAgICAgICAgICpleHBvbmVu
dCA9IDQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gIC8v
IGVsc2UgZmFsbHRocm91Z2gKKyAgICAgICAgICAgIGNhc2UgMTM6CisgICAgICAgICAgICBjYXNl
IDEyOgorICAgICAgICAgICAgY2FzZSAxMToKKyAgICAgICAgICAgIGNhc2UgMTA6CisgICAgICAg
ICAgICAgICAgaWYgKDEwMDAgPD0gbnVtYmVyKSB7CisgICAgICAgICAgICAgICAgICAgICpwb3dl
ciA9IDEwMDA7CisgICAgICAgICAgICAgICAgICAgICpleHBvbmVudCA9IDM7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gIC8vIGVsc2UgZmFsbHRocm91Z2gK
KyAgICAgICAgICAgIGNhc2UgOToKKyAgICAgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIGNh
c2UgNzoKKyAgICAgICAgICAgICAgICBpZiAoMTAwIDw9IG51bWJlcikgeworICAgICAgICAgICAg
ICAgICAgICAqcG93ZXIgPSAxMDA7CisgICAgICAgICAgICAgICAgICAgICpleHBvbmVudCA9IDI7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gIC8vIGVsc2Ug
ZmFsbHRocm91Z2gKKyAgICAgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgIGNhc2UgNToKKyAg
ICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICBpZiAoMTAgPD0gbnVtYmVyKSB7Cisg
ICAgICAgICAgICAgICAgICAgICpwb3dlciA9IDEwOworICAgICAgICAgICAgICAgICAgICAqZXhw
b25lbnQgPSAxOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
ICAvLyBlbHNlIGZhbGx0aHJvdWdoCisgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICBj
YXNlIDI6CisgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgaWYgKDEgPD0gbnVt
YmVyKSB7CisgICAgICAgICAgICAgICAgICAgICpwb3dlciA9IDE7CisgICAgICAgICAgICAgICAg
ICAgICpleHBvbmVudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0gIC8vIGVsc2UgZmFsbHRocm91Z2gKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAg
ICAgICAgICAgICAqcG93ZXIgPSAwOworICAgICAgICAgICAgICAgICpleHBvbmVudCA9IC0xOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICAvLyBGb2xsb3dpbmcgYXNzaWdubWVudHMgYXJlIGhlcmUgdG8gc2lsZW5jZSBjb21waWxl
ciB3YXJuaW5ncy4KKyAgICAgICAgICAgICAgICAqcG93ZXIgPSAwOworICAgICAgICAgICAgICAg
ICpleHBvbmVudCA9IDA7CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBHZW5lcmF0ZXMgdGhlIGRpZ2l0cyBvZiBpbnB1
dCBudW1iZXIgdy4KKyAgICAvLyB3IGlzIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIChEaXlGcCks
IGNvbnNpc3Rpbmcgb2YgYSBzaWduaWZpY2FuZCBhbmQgYW4KKyAgICAvLyBleHBvbmVudC4gSXRz
IGV4cG9uZW50IGlzIGJvdW5kZWQgYnkga01pbmltYWxUYXJnZXRFeHBvbmVudCBhbmQKKyAgICAv
LyBrTWF4aW1hbFRhcmdldEV4cG9uZW50LgorICAgIC8vICAgICAgIEhlbmNlIC02MCA8PSB3LmUo
KSA8PSAtMzIuCisgICAgLy8KKyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIGl0IGZhaWxzLCBpbiB3
aGljaCBjYXNlIHRoZSBnZW5lcmF0ZWQgZGlnaXRzIGluIHRoZSBidWZmZXIKKyAgICAvLyBzaG91
bGQgbm90IGJlIHVzZWQuCisgICAgLy8gUHJlY29uZGl0aW9uczoKKyAgICAvLyAgKiBsb3csIHcg
YW5kIGhpZ2ggYXJlIGNvcnJlY3QgdXAgdG8gMSB1bHAgKHVuaXQgaW4gdGhlIGxhc3QgcGxhY2Up
LiBUaGF0CisgICAgLy8gICAgaXMsIHRoZWlyIGVycm9yIG11c3QgYmUgbGVzcyB0aGFuIGEgdW5p
dCBvZiB0aGVpciBsYXN0IGRpZ2l0cy4KKyAgICAvLyAgKiBsb3cuZSgpID09IHcuZSgpID09IGhp
Z2guZSgpCisgICAgLy8gICogbG93IDwgdyA8IGhpZ2gsIGFuZCB0YWtpbmcgaW50byBhY2NvdW50
IHRoZWlyIGVycm9yOiBsb3d+IDw9IGhpZ2h+CisgICAgLy8gICoga01pbmltYWxUYXJnZXRFeHBv
bmVudCA8PSB3LmUoKSA8PSBrTWF4aW1hbFRhcmdldEV4cG9uZW50CisgICAgLy8gUG9zdGNvbmRp
dGlvbnM6IHJldHVybnMgZmFsc2UgaWYgcHJvY2VkdXJlIGZhaWxzLgorICAgIC8vICAgb3RoZXJ3
aXNlOgorICAgIC8vICAgICAqIGJ1ZmZlciBpcyBub3QgbnVsbC10ZXJtaW5hdGVkLCBidXQgbGVu
IGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgZGlnaXRzLgorICAgIC8vICAgICAqIGJ1ZmZlciBjb250
YWlucyB0aGUgc2hvcnRlc3QgcG9zc2libGUgZGVjaW1hbCBkaWdpdC1zZXF1ZW5jZQorICAgIC8v
ICAgICAgIHN1Y2ggdGhhdCBMT1cgPCBidWZmZXIgKiAxMF5rYXBwYSA8IEhJR0gsIHdoZXJlIExP
VyBhbmQgSElHSCBhcmUgdGhlCisgICAgLy8gICAgICAgY29ycmVjdCB2YWx1ZXMgb2YgbG93IGFu
ZCBoaWdoICh3aXRob3V0IHRoZWlyIGVycm9yKS4KKyAgICAvLyAgICAgKiBpZiBtb3JlIHRoYW4g
b25lIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gZ2l2ZXMgdGhlIG1pbmltYWwgbnVtYmVyIG9mCisg
ICAgLy8gICAgICAgZGVjaW1hbCBkaWdpdHMgdGhlbiB0aGUgb25lIGNsb3Nlc3QgdG8gVyAod2hl
cmUgVyBpcyB0aGUgY29ycmVjdCB2YWx1ZQorICAgIC8vICAgICAgIG9mIHcpIGlzIGNob3Nlbi4K
KyAgICAvLyBSZW1hcms6IHRoaXMgcHJvY2VkdXJlIHRha2VzIGludG8gYWNjb3VudCB0aGUgaW1w
cmVjaXNpb24gb2YgaXRzIGlucHV0CisgICAgLy8gICBudW1iZXJzLiBJZiB0aGUgcHJlY2lzaW9u
IGlzIG5vdCBlbm91Z2ggdG8gZ3VhcmFudGVlIGFsbCB0aGUgcG9zdGNvbmRpdGlvbnMKKyAgICAv
LyAgIHRoZW4gZmFsc2UgaXMgcmV0dXJuZWQuIFRoaXMgdXN1YWxseSBoYXBwZW5zIHJhcmVseSAo
fjAuNSUpLgorICAgIC8vCisgICAgLy8gU2F5LCBmb3IgdGhlIHNha2Ugb2YgZXhhbXBsZSwgdGhh
dAorICAgIC8vICAgdy5lKCkgPT0gLTQ4LCBhbmQgdy5mKCkgPT0gMHgxMjM0NTY3ODkwYWJjZGVm
CisgICAgLy8gdydzIHZhbHVlIGNhbiBiZSBjb21wdXRlZCBieSB3LmYoKSAqIDJedy5lKCkKKyAg
ICAvLyBXZSBjYW4gb2J0YWluIHcncyBpbnRlZ3JhbCBkaWdpdHMgYnkgc2ltcGx5IHNoaWZ0aW5n
IHcuZigpIGJ5IC13LmUoKS4KKyAgICAvLyAgLT4gdydzIGludGVncmFsIHBhcnQgaXMgMHgxMjM0
CisgICAgLy8gIHcncyBmcmFjdGlvbmFsIHBhcnQgaXMgdGhlcmVmb3JlIDB4NTY3ODkwYWJjZGVm
LgorICAgIC8vIFByaW50aW5nIHcncyBpbnRlZ3JhbCBwYXJ0IGlzIGVhc3kgKHNpbXBseSBwcmlu
dCAweDEyMzQgaW4gZGVjaW1hbCkuCisgICAgLy8gSW4gb3JkZXIgdG8gcHJpbnQgaXRzIGZyYWN0
aW9uIHdlIHJlcGVhdGVkbHkgbXVsdGlwbHkgdGhlIGZyYWN0aW9uIGJ5IDEwIGFuZAorICAgIC8v
IGdldCBlYWNoIGRpZ2l0LiBFeGFtcGxlIHRoZSBmaXJzdCBkaWdpdCBhZnRlciB0aGUgcG9pbnQg
d291bGQgYmUgY29tcHV0ZWQgYnkKKyAgICAvLyAgICgweDU2Nzg5MGFiY2RlZiAqIDEwKSA+PiA0
OC4gLT4gMworICAgIC8vIFRoZSB3aG9sZSB0aGluZyBiZWNvbWVzIHNsaWdodGx5IG1vcmUgY29t
cGxpY2F0ZWQgYmVjYXVzZSB3ZSB3YW50IHRvIHN0b3AKKyAgICAvLyBvbmNlIHdlIGhhdmUgZW5v
dWdoIGRpZ2l0cy4gVGhhdCBpcywgb25jZSB0aGUgZGlnaXRzIGluc2lkZSB0aGUgYnVmZmVyCisg
ICAgLy8gcmVwcmVzZW50ICd3JyB3ZSBjYW4gc3RvcC4gRXZlcnl0aGluZyBpbnNpZGUgdGhlIGlu
dGVydmFsIGxvdyAtIGhpZ2gKKyAgICAvLyByZXByZXNlbnRzIHcuIEhvd2V2ZXIgd2UgaGF2ZSB0
byBwYXkgYXR0ZW50aW9uIHRvIGxvdywgaGlnaCBhbmQgdydzCisgICAgLy8gaW1wcmVjaXNpb24u
CisgICAgc3RhdGljIGJvb2wgRGlnaXRHZW4oRGl5RnAgbG93LAorICAgICAgICAgICAgICAgICAg
ICAgICAgIERpeUZwIHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgRGl5RnAgaGlnaCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCogbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCog
a2FwcGEpIHsKKyAgICAgICAgQVNTRVJUKGxvdy5lKCkgPT0gdy5lKCkgJiYgdy5lKCkgPT0gaGln
aC5lKCkpOworICAgICAgICBBU1NFUlQobG93LmYoKSArIDEgPD0gaGlnaC5mKCkgLSAxKTsKKyAg
ICAgICAgQVNTRVJUKGtNaW5pbWFsVGFyZ2V0RXhwb25lbnQgPD0gdy5lKCkgJiYgdy5lKCkgPD0g
a01heGltYWxUYXJnZXRFeHBvbmVudCk7CisgICAgICAgIC8vIGxvdywgdyBhbmQgaGlnaCBhcmUg
aW1wcmVjaXNlLCBidXQgYnkgbGVzcyB0aGFuIG9uZSB1bHAgKHVuaXQgaW4gdGhlIGxhc3QKKyAg
ICAgICAgLy8gcGxhY2UpLgorICAgICAgICAvLyBJZiB3ZSByZW1vdmUgKHJlc3AuIGFkZCkgMSB1
bHAgZnJvbSBsb3cgKHJlc3AuIGhpZ2gpIHdlIGFyZSBjZXJ0YWluIHRoYXQKKyAgICAgICAgLy8g
dGhlIG5ldyBudW1iZXJzIGFyZSBvdXRzaWRlIG9mIHRoZSBpbnRlcnZhbCB3ZSB3YW50IHRoZSBm
aW5hbAorICAgICAgICAvLyByZXByZXNlbnRhdGlvbiB0byBsaWUgaW4uCisgICAgICAgIC8vIElu
dmVyc2VseSBhZGRpbmcgKHJlc3AuIHJlbW92aW5nKSAxIHVscCBmcm9tIGxvdyAocmVzcC4gaGln
aCkgd291bGQgeWllbGQKKyAgICAgICAgLy8gbnVtYmVycyB0aGF0IGFyZSBjZXJ0YWluIHRvIGxp
ZSBpbiB0aGUgaW50ZXJ2YWwuIFdlIHdpbGwgdXNlIHRoaXMgZmFjdAorICAgICAgICAvLyBsYXRl
ciBvbi4KKyAgICAgICAgLy8gV2Ugd2lsbCBub3cgc3RhcnQgYnkgZ2VuZXJhdGluZyB0aGUgZGln
aXRzIHdpdGhpbiB0aGUgdW5jZXJ0YWluCisgICAgICAgIC8vIGludGVydmFsLiBMYXRlciB3ZSB3
aWxsIHdlZWQgb3V0IHJlcHJlc2VudGF0aW9ucyB0aGF0IGxpZSBvdXRzaWRlIHRoZSBzYWZlCisg
ICAgICAgIC8vIGludGVydmFsIGFuZCB0aHVzIF9taWdodF8gbGllIG91dHNpZGUgdGhlIGNvcnJl
Y3QgaW50ZXJ2YWwuCisgICAgICAgIHVpbnQ2NF90IHVuaXQgPSAxOworICAgICAgICBEaXlGcCB0
b29fbG93ID0gRGl5RnAobG93LmYoKSAtIHVuaXQsIGxvdy5lKCkpOworICAgICAgICBEaXlGcCB0
b29faGlnaCA9IERpeUZwKGhpZ2guZigpICsgdW5pdCwgaGlnaC5lKCkpOworICAgICAgICAvLyB0
b29fbG93IGFuZCB0b29faGlnaCBhcmUgZ3VhcmFudGVlZCB0byBsaWUgb3V0c2lkZSB0aGUgaW50
ZXJ2YWwgd2Ugd2FudCB0aGUKKyAgICAgICAgLy8gZ2VuZXJhdGVkIG51bWJlciBpbi4KKyAgICAg
ICAgRGl5RnAgdW5zYWZlX2ludGVydmFsID0gRGl5RnA6Ok1pbnVzKHRvb19oaWdoLCB0b29fbG93
KTsKKyAgICAgICAgLy8gV2Ugbm93IGN1dCB0aGUgaW5wdXQgbnVtYmVyIGludG8gdHdvIHBhcnRz
OiB0aGUgaW50ZWdyYWwgZGlnaXRzIGFuZCB0aGUKKyAgICAgICAgLy8gZnJhY3Rpb25hbHMuIFdl
IHdpbGwgbm90IHdyaXRlIGFueSBkZWNpbWFsIHNlcGFyYXRvciB0aG91Z2gsIGJ1dCBhZGFwdAor
ICAgICAgICAvLyBrYXBwYSBpbnN0ZWFkLgorICAgICAgICAvLyBSZW1pbmRlcjogd2UgYXJlIGN1
cnJlbnRseSBjb21wdXRpbmcgdGhlIGRpZ2l0cyAoc3RvcmVkIGluc2lkZSB0aGUgYnVmZmVyKQor
ICAgICAgICAvLyBzdWNoIHRoYXQ6ICAgdG9vX2xvdyA8IGJ1ZmZlciAqIDEwXmthcHBhIDwgdG9v
X2hpZ2gKKyAgICAgICAgLy8gV2UgdXNlIHRvb19oaWdoIGZvciB0aGUgZGlnaXRfZ2VuZXJhdGlv
biBhbmQgc3RvcCBhcyBzb29uIGFzIHBvc3NpYmxlLgorICAgICAgICAvLyBJZiB3ZSBzdG9wIGVh
cmx5IHdlIGVmZmVjdGl2ZWx5IHJvdW5kIGRvd24uCisgICAgICAgIERpeUZwIG9uZSA9IERpeUZw
KHN0YXRpY19jYXN0PHVpbnQ2NF90PigxKSA8PCAtdy5lKCksIHcuZSgpKTsKKyAgICAgICAgLy8g
RGl2aXNpb24gYnkgb25lIGlzIGEgc2hpZnQuCisgICAgICAgIHVpbnQzMl90IGludGVncmFscyA9
IHN0YXRpY19jYXN0PHVpbnQzMl90Pih0b29faGlnaC5mKCkgPj4gLW9uZS5lKCkpOworICAgICAg
ICAvLyBNb2R1bG8gYnkgb25lIGlzIGFuIGFuZC4KKyAgICAgICAgdWludDY0X3QgZnJhY3Rpb25h
bHMgPSB0b29faGlnaC5mKCkgJiAob25lLmYoKSAtIDEpOworICAgICAgICB1aW50MzJfdCBkaXZp
c29yOworICAgICAgICBpbnQgZGl2aXNvcl9leHBvbmVudDsKKyAgICAgICAgQmlnZ2VzdFBvd2Vy
VGVuKGludGVncmFscywgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUgLSAoLW9uZS5lKCkpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgJmRpdmlzb3IsICZkaXZpc29yX2V4cG9uZW50KTsKKyAgICAg
ICAgKmthcHBhID0gZGl2aXNvcl9leHBvbmVudCArIDE7CisgICAgICAgICpsZW5ndGggPSAwOwor
ICAgICAgICAvLyBMb29wIGludmFyaWFudDogYnVmZmVyID0gdG9vX2hpZ2ggLyAxMF5rYXBwYSAg
KGludGVnZXIgZGl2aXNpb24pCisgICAgICAgIC8vIFRoZSBpbnZhcmlhbnQgaG9sZHMgZm9yIHRo
ZSBmaXJzdCBpdGVyYXRpb246IGthcHBhIGhhcyBiZWVuIGluaXRpYWxpemVkCisgICAgICAgIC8v
IHdpdGggdGhlIGRpdmlzb3IgZXhwb25lbnQgKyAxLiBBbmQgdGhlIGRpdmlzb3IgaXMgdGhlIGJp
Z2dlc3QgcG93ZXIgb2YgdGVuCisgICAgICAgIC8vIHRoYXQgaXMgc21hbGxlciB0aGFuIGludGVn
cmFscy4KKyAgICAgICAgd2hpbGUgKCprYXBwYSA+IDApIHsKKyAgICAgICAgICAgIGludCBkaWdp
dCA9IGludGVncmFscyAvIGRpdmlzb3I7CisgICAgICAgICAgICBidWZmZXJbKmxlbmd0aF0gPSAn
MCcgKyBkaWdpdDsKKyAgICAgICAgICAgICgqbGVuZ3RoKSsrOworICAgICAgICAgICAgaW50ZWdy
YWxzICU9IGRpdmlzb3I7CisgICAgICAgICAgICAoKmthcHBhKS0tOworICAgICAgICAgICAgLy8g
Tm90ZSB0aGF0IGthcHBhIG5vdyBlcXVhbHMgdGhlIGV4cG9uZW50IG9mIHRoZSBkaXZpc29yIGFu
ZCB0aGF0IHRoZQorICAgICAgICAgICAgLy8gaW52YXJpYW50IHRodXMgaG9sZHMgYWdhaW4uCisg
ICAgICAgICAgICB1aW50NjRfdCByZXN0ID0KKyAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1aW50
NjRfdD4oaW50ZWdyYWxzKSA8PCAtb25lLmUoKSkgKyBmcmFjdGlvbmFsczsKKyAgICAgICAgICAg
IC8vIEludmFyaWFudDogdG9vX2hpZ2ggPSBidWZmZXIgKiAxMF5rYXBwYSArIERpeUZwKHJlc3Qs
IG9uZS5lKCkpCisgICAgICAgICAgICAvLyBSZW1pbmRlcjogdW5zYWZlX2ludGVydmFsLmUoKSA9
PSBvbmUuZSgpCisgICAgICAgICAgICBpZiAocmVzdCA8IHVuc2FmZV9pbnRlcnZhbC5mKCkpIHsK
KyAgICAgICAgICAgICAgICAvLyBSb3VuZGluZyBkb3duIChieSBub3QgZW1pdHRpbmcgdGhlIHJl
bWFpbmluZyBkaWdpdHMpIHlpZWxkcyBhIG51bWJlcgorICAgICAgICAgICAgICAgIC8vIHRoYXQg
bGllcyB3aXRoaW4gdGhlIHVuc2FmZSBpbnRlcnZhbC4KKyAgICAgICAgICAgICAgICByZXR1cm4g
Um91bmRXZWVkKGJ1ZmZlciwgKmxlbmd0aCwgRGl5RnA6Ok1pbnVzKHRvb19oaWdoLCB3KS5mKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNhZmVfaW50ZXJ2YWwuZigpLCBy
ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KGRpdmlzb3IpIDw8IC1vbmUuZSgpLCB1bml0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGRpdmlzb3IgLz0gMTA7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBp
bnRlZ3JhbHMgaGF2ZSBiZWVuIGdlbmVyYXRlZC4gV2UgYXJlIGF0IHRoZSBwb2ludCBvZiB0aGUg
ZGVjaW1hbAorICAgICAgICAvLyBzZXBhcmF0b3IuIEluIHRoZSBmb2xsb3dpbmcgbG9vcCB3ZSBz
aW1wbHkgbXVsdGlwbHkgdGhlIHJlbWFpbmluZyBkaWdpdHMgYnkKKyAgICAgICAgLy8gMTAgYW5k
IGRpdmlkZSBieSBvbmUuIFdlIGp1c3QgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRvIG11bHRpcGx5
IGFzc29jaWF0ZWQKKyAgICAgICAgLy8gZGF0YSAobGlrZSB0aGUgaW50ZXJ2YWwgb3IgJ3VuaXQn
KSwgdG9vLgorICAgICAgICAvLyBOb3RlIHRoYXQgdGhlIG11bHRpcGxpY2F0aW9uIGJ5IDEwIGRv
ZXMgbm90IG92ZXJmbG93LCBiZWNhdXNlIHcuZSA+PSAtNjAKKyAgICAgICAgLy8gYW5kIHRodXMg
b25lLmUgPj0gLTYwLgorICAgICAgICBBU1NFUlQob25lLmUoKSA+PSAtNjApOworICAgICAgICBB
U1NFUlQoZnJhY3Rpb25hbHMgPCBvbmUuZigpKTsKKyAgICAgICAgQVNTRVJUKFVJTlQ2NF8yUEFS
VF9DKDB4RkZGRkZGRkYsIEZGRkZGRkZGKSAvIDEwID49IG9uZS5mKCkpOworICAgICAgICB3aGls
ZSAodHJ1ZSkgeworICAgICAgICAgICAgZnJhY3Rpb25hbHMgKj0gMTA7CisgICAgICAgICAgICB1
bml0ICo9IDEwOworICAgICAgICAgICAgdW5zYWZlX2ludGVydmFsLnNldF9mKHVuc2FmZV9pbnRl
cnZhbC5mKCkgKiAxMCk7CisgICAgICAgICAgICAvLyBJbnRlZ2VyIGRpdmlzaW9uIGJ5IG9uZS4K
KyAgICAgICAgICAgIGludCBkaWdpdCA9IHN0YXRpY19jYXN0PGludD4oZnJhY3Rpb25hbHMgPj4g
LW9uZS5lKCkpOworICAgICAgICAgICAgYnVmZmVyWypsZW5ndGhdID0gJzAnICsgZGlnaXQ7Cisg
ICAgICAgICAgICAoKmxlbmd0aCkrKzsKKyAgICAgICAgICAgIGZyYWN0aW9uYWxzICY9IG9uZS5m
KCkgLSAxOyAgLy8gTW9kdWxvIGJ5IG9uZS4KKyAgICAgICAgICAgICgqa2FwcGEpLS07CisgICAg
ICAgICAgICBpZiAoZnJhY3Rpb25hbHMgPCB1bnNhZmVfaW50ZXJ2YWwuZigpKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIFJvdW5kV2VlZChidWZmZXIsICpsZW5ndGgsIERpeUZwOjpNaW51cyh0
b29faGlnaCwgdykuZigpICogdW5pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2FmZV9pbnRlcnZhbC5mKCksIGZyYWN0aW9uYWxzLCBvbmUuZigpLCB1bml0KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICAKKyAgICAvLyBHZW5l
cmF0ZXMgKGF0IG1vc3QpIHJlcXVlc3RlZF9kaWdpdHMgZGlnaXRzIG9mIGlucHV0IG51bWJlciB3
LgorICAgIC8vIHcgaXMgYSBmbG9hdGluZy1wb2ludCBudW1iZXIgKERpeUZwKSwgY29uc2lzdGlu
ZyBvZiBhIHNpZ25pZmljYW5kIGFuZCBhbgorICAgIC8vIGV4cG9uZW50LiBJdHMgZXhwb25lbnQg
aXMgYm91bmRlZCBieSBrTWluaW1hbFRhcmdldEV4cG9uZW50IGFuZAorICAgIC8vIGtNYXhpbWFs
VGFyZ2V0RXhwb25lbnQuCisgICAgLy8gICAgICAgSGVuY2UgLTYwIDw9IHcuZSgpIDw9IC0zMi4K
KyAgICAvLworICAgIC8vIFJldHVybnMgZmFsc2UgaWYgaXQgZmFpbHMsIGluIHdoaWNoIGNhc2Ug
dGhlIGdlbmVyYXRlZCBkaWdpdHMgaW4gdGhlIGJ1ZmZlcgorICAgIC8vIHNob3VsZCBub3QgYmUg
dXNlZC4KKyAgICAvLyBQcmVjb25kaXRpb25zOgorICAgIC8vICAqIHcgaXMgY29ycmVjdCB1cCB0
byAxIHVscCAodW5pdCBpbiB0aGUgbGFzdCBwbGFjZSkuIFRoYXQKKyAgICAvLyAgICBpcywgaXRz
IGVycm9yIG11c3QgYmUgc3RyaWN0bHkgbGVzcyB0aGFuIGEgdW5pdCBvZiBpdHMgbGFzdCBkaWdp
dC4KKyAgICAvLyAgKiBrTWluaW1hbFRhcmdldEV4cG9uZW50IDw9IHcuZSgpIDw9IGtNYXhpbWFs
VGFyZ2V0RXhwb25lbnQKKyAgICAvLworICAgIC8vIFBvc3Rjb25kaXRpb25zOiByZXR1cm5zIGZh
bHNlIGlmIHByb2NlZHVyZSBmYWlscy4KKyAgICAvLyAgIG90aGVyd2lzZToKKyAgICAvLyAgICAg
KiBidWZmZXIgaXMgbm90IG51bGwtdGVybWluYXRlZCwgYnV0IGxlbmd0aCBjb250YWlucyB0aGUg
bnVtYmVyIG9mCisgICAgLy8gICAgICAgZGlnaXRzLgorICAgIC8vICAgICAqIHRoZSByZXByZXNl
bnRhdGlvbiBpbiBidWZmZXIgaXMgdGhlIG1vc3QgcHJlY2lzZSByZXByZXNlbnRhdGlvbiBvZgor
ICAgIC8vICAgICAgIHJlcXVlc3RlZF9kaWdpdHMgZGlnaXRzLgorICAgIC8vICAgICAqIGJ1ZmZl
ciBjb250YWlucyBhdCBtb3N0IHJlcXVlc3RlZF9kaWdpdHMgZGlnaXRzIG9mIHcuIElmIHRoZXJl
IGFyZSBsZXNzCisgICAgLy8gICAgICAgdGhhbiByZXF1ZXN0ZWRfZGlnaXRzIGRpZ2l0cyB0aGVu
IHNvbWUgdHJhaWxpbmcgJzAncyBoYXZlIGJlZW4gcmVtb3ZlZC4KKyAgICAvLyAgICAgKiBrYXBw
YSBpcyBzdWNoIHRoYXQKKyAgICAvLyAgICAgICAgICAgIHcgPSBidWZmZXIgKiAxMF5rYXBwYSAr
IGVwcyB3aXRoIHxlcHN8IDwgMTBea2FwcGEgLyAyLgorICAgIC8vCisgICAgLy8gUmVtYXJrOiBU
aGlzIHByb2NlZHVyZSB0YWtlcyBpbnRvIGFjY291bnQgdGhlIGltcHJlY2lzaW9uIG9mIGl0cyBp
bnB1dAorICAgIC8vICAgbnVtYmVycy4gSWYgdGhlIHByZWNpc2lvbiBpcyBub3QgZW5vdWdoIHRv
IGd1YXJhbnRlZSBhbGwgdGhlIHBvc3Rjb25kaXRpb25zCisgICAgLy8gICB0aGVuIGZhbHNlIGlz
IHJldHVybmVkLiBUaGlzIHVzdWFsbHkgaGFwcGVucyByYXJlbHksIGJ1dCB0aGUgZmFpbHVyZS1y
YXRlCisgICAgLy8gICBpbmNyZWFzZXMgd2l0aCBoaWdoZXIgcmVxdWVzdGVkX2RpZ2l0cy4KKyAg
ICBzdGF0aWMgYm9vbCBEaWdpdEdlbkNvdW50ZWQoRGl5RnAgdywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IHJlcXVlc3RlZF9kaWdpdHMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCogbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQqIGthcHBhKSB7CisgICAgICAgIEFTU0VSVChrTWluaW1hbFRhcmdldEV4cG9uZW50IDw9IHcu
ZSgpICYmIHcuZSgpIDw9IGtNYXhpbWFsVGFyZ2V0RXhwb25lbnQpOworICAgICAgICBBU1NFUlQo
a01pbmltYWxUYXJnZXRFeHBvbmVudCA+PSAtNjApOworICAgICAgICBBU1NFUlQoa01heGltYWxU
YXJnZXRFeHBvbmVudCA8PSAtMzIpOworICAgICAgICAvLyB3IGlzIGFzc3VtZWQgdG8gaGF2ZSBh
biBlcnJvciBsZXNzIHRoYW4gMSB1bml0LiBXaGVuZXZlciB3IGlzIHNjYWxlZCB3ZQorICAgICAg
ICAvLyBhbHNvIHNjYWxlIGl0cyBlcnJvci4KKyAgICAgICAgdWludDY0X3Qgd19lcnJvciA9IDE7
CisgICAgICAgIC8vIFdlIGN1dCB0aGUgaW5wdXQgbnVtYmVyIGludG8gdHdvIHBhcnRzOiB0aGUg
aW50ZWdyYWwgZGlnaXRzIGFuZCB0aGUKKyAgICAgICAgLy8gZnJhY3Rpb25hbCBkaWdpdHMuIFdl
IGRvbid0IGVtaXQgYW55IGRlY2ltYWwgc2VwYXJhdG9yLCBidXQgYWRhcHQga2FwcGEKKyAgICAg
ICAgLy8gaW5zdGVhZC4gRXhhbXBsZTogaW5zdGVhZCBvZiB3cml0aW5nICIxLjIiIHdlIHB1dCAi
MTIiIGludG8gdGhlIGJ1ZmZlciBhbmQKKyAgICAgICAgLy8gaW5jcmVhc2Uga2FwcGEgYnkgMS4K
KyAgICAgICAgRGl5RnAgb25lID0gRGl5RnAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDEpIDw8IC13
LmUoKSwgdy5lKCkpOworICAgICAgICAvLyBEaXZpc2lvbiBieSBvbmUgaXMgYSBzaGlmdC4KKyAg
ICAgICAgdWludDMyX3QgaW50ZWdyYWxzID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHcuZigpID4+
IC1vbmUuZSgpKTsKKyAgICAgICAgLy8gTW9kdWxvIGJ5IG9uZSBpcyBhbiBhbmQuCisgICAgICAg
IHVpbnQ2NF90IGZyYWN0aW9uYWxzID0gdy5mKCkgJiAob25lLmYoKSAtIDEpOworICAgICAgICB1
aW50MzJfdCBkaXZpc29yOworICAgICAgICBpbnQgZGl2aXNvcl9leHBvbmVudDsKKyAgICAgICAg
QmlnZ2VzdFBvd2VyVGVuKGludGVncmFscywgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUgLSAoLW9u
ZS5lKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgJmRpdmlzb3IsICZkaXZpc29yX2V4cG9u
ZW50KTsKKyAgICAgICAgKmthcHBhID0gZGl2aXNvcl9leHBvbmVudCArIDE7CisgICAgICAgICps
ZW5ndGggPSAwOworICAgICAgICAKKyAgICAgICAgLy8gTG9vcCBpbnZhcmlhbnQ6IGJ1ZmZlciA9
IHcgLyAxMF5rYXBwYSAgKGludGVnZXIgZGl2aXNpb24pCisgICAgICAgIC8vIFRoZSBpbnZhcmlh
bnQgaG9sZHMgZm9yIHRoZSBmaXJzdCBpdGVyYXRpb246IGthcHBhIGhhcyBiZWVuIGluaXRpYWxp
emVkCisgICAgICAgIC8vIHdpdGggdGhlIGRpdmlzb3IgZXhwb25lbnQgKyAxLiBBbmQgdGhlIGRp
dmlzb3IgaXMgdGhlIGJpZ2dlc3QgcG93ZXIgb2YgdGVuCisgICAgICAgIC8vIHRoYXQgaXMgc21h
bGxlciB0aGFuICdpbnRlZ3JhbHMnLgorICAgICAgICB3aGlsZSAoKmthcHBhID4gMCkgeworICAg
ICAgICAgICAgaW50IGRpZ2l0ID0gaW50ZWdyYWxzIC8gZGl2aXNvcjsKKyAgICAgICAgICAgIGJ1
ZmZlclsqbGVuZ3RoXSA9ICcwJyArIGRpZ2l0OworICAgICAgICAgICAgKCpsZW5ndGgpKys7Cisg
ICAgICAgICAgICByZXF1ZXN0ZWRfZGlnaXRzLS07CisgICAgICAgICAgICBpbnRlZ3JhbHMgJT0g
ZGl2aXNvcjsKKyAgICAgICAgICAgICgqa2FwcGEpLS07CisgICAgICAgICAgICAvLyBOb3RlIHRo
YXQga2FwcGEgbm93IGVxdWFscyB0aGUgZXhwb25lbnQgb2YgdGhlIGRpdmlzb3IgYW5kIHRoYXQg
dGhlCisgICAgICAgICAgICAvLyBpbnZhcmlhbnQgdGh1cyBob2xkcyBhZ2Fpbi4KKyAgICAgICAg
ICAgIGlmIChyZXF1ZXN0ZWRfZGlnaXRzID09IDApIGJyZWFrOworICAgICAgICAgICAgZGl2aXNv
ciAvPSAxMDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHJlcXVlc3RlZF9kaWdp
dHMgPT0gMCkgeworICAgICAgICAgICAgdWludDY0X3QgcmVzdCA9CisgICAgICAgICAgICAoc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KGludGVncmFscykgPDwgLW9uZS5lKCkpICsgZnJhY3Rpb25hbHM7
CisgICAgICAgICAgICByZXR1cm4gUm91bmRXZWVkQ291bnRlZChidWZmZXIsICpsZW5ndGgsIHJl
c3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50
NjRfdD4oZGl2aXNvcikgPDwgLW9uZS5lKCksIHdfZXJyb3IsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBrYXBwYSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8v
IFRoZSBpbnRlZ3JhbHMgaGF2ZSBiZWVuIGdlbmVyYXRlZC4gV2UgYXJlIGF0IHRoZSBwb2ludCBv
ZiB0aGUgZGVjaW1hbAorICAgICAgICAvLyBzZXBhcmF0b3IuIEluIHRoZSBmb2xsb3dpbmcgbG9v
cCB3ZSBzaW1wbHkgbXVsdGlwbHkgdGhlIHJlbWFpbmluZyBkaWdpdHMgYnkKKyAgICAgICAgLy8g
MTAgYW5kIGRpdmlkZSBieSBvbmUuIFdlIGp1c3QgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRvIG11
bHRpcGx5IGFzc29jaWF0ZWQKKyAgICAgICAgLy8gZGF0YSAodGhlICd1bml0JyksIHRvby4KKyAg
ICAgICAgLy8gTm90ZSB0aGF0IHRoZSBtdWx0aXBsaWNhdGlvbiBieSAxMCBkb2VzIG5vdCBvdmVy
ZmxvdywgYmVjYXVzZSB3LmUgPj0gLTYwCisgICAgICAgIC8vIGFuZCB0aHVzIG9uZS5lID49IC02
MC4KKyAgICAgICAgQVNTRVJUKG9uZS5lKCkgPj0gLTYwKTsKKyAgICAgICAgQVNTRVJUKGZyYWN0
aW9uYWxzIDwgb25lLmYoKSk7CisgICAgICAgIEFTU0VSVChVSU5UNjRfMlBBUlRfQygweEZGRkZG
RkZGLCBGRkZGRkZGRikgLyAxMCA+PSBvbmUuZigpKTsKKyAgICAgICAgd2hpbGUgKHJlcXVlc3Rl
ZF9kaWdpdHMgPiAwICYmIGZyYWN0aW9uYWxzID4gd19lcnJvcikgeworICAgICAgICAgICAgZnJh
Y3Rpb25hbHMgKj0gMTA7CisgICAgICAgICAgICB3X2Vycm9yICo9IDEwOworICAgICAgICAgICAg
Ly8gSW50ZWdlciBkaXZpc2lvbiBieSBvbmUuCisgICAgICAgICAgICBpbnQgZGlnaXQgPSBzdGF0
aWNfY2FzdDxpbnQ+KGZyYWN0aW9uYWxzID4+IC1vbmUuZSgpKTsKKyAgICAgICAgICAgIGJ1ZmZl
clsqbGVuZ3RoXSA9ICcwJyArIGRpZ2l0OworICAgICAgICAgICAgKCpsZW5ndGgpKys7CisgICAg
ICAgICAgICByZXF1ZXN0ZWRfZGlnaXRzLS07CisgICAgICAgICAgICBmcmFjdGlvbmFscyAmPSBv
bmUuZigpIC0gMTsgIC8vIE1vZHVsbyBieSBvbmUuCisgICAgICAgICAgICAoKmthcHBhKS0tOwor
ICAgICAgICB9CisgICAgICAgIGlmIChyZXF1ZXN0ZWRfZGlnaXRzICE9IDApIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgcmV0dXJuIFJvdW5kV2VlZENvdW50ZWQoYnVmZmVyLCAqbGVuZ3RoLCBmcmFj
dGlvbmFscywgb25lLmYoKSwgd19lcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAga2FwcGEpOworICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBQcm92aWRlcyBhIGRlY2ltYWwg
cmVwcmVzZW50YXRpb24gb2Ygdi4KKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgaXQgc3VjY2VlZHMs
IG90aGVyd2lzZSB0aGUgcmVzdWx0IGNhbm5vdCBiZSB0cnVzdGVkLgorICAgIC8vIFRoZXJlIHdp
bGwgYmUgKmxlbmd0aCBkaWdpdHMgaW5zaWRlIHRoZSBidWZmZXIgKG5vdCBudWxsLXRlcm1pbmF0
ZWQpLgorICAgIC8vIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgdGhlbgorICAgIC8vICAg
ICAgICB2ID09IChkb3VibGUpIChidWZmZXIgKiAxMF5kZWNpbWFsX2V4cG9uZW50KS4KKyAgICAv
LyBUaGUgZGlnaXRzIGluIHRoZSBidWZmZXIgYXJlIHRoZSBzaG9ydGVzdCByZXByZXNlbnRhdGlv
biBwb3NzaWJsZTogbm8KKyAgICAvLyAwLjA5OTk5OTk5OTk5OTk5OTk5IGluc3RlYWQgb2YgMC4x
LiBUaGUgc2hvcnRlciByZXByZXNlbnRhdGlvbiB3aWxsIGV2ZW4gYmUKKyAgICAvLyBjaG9zZW4g
ZXZlbiBpZiB0aGUgbG9uZ2VyIG9uZSB3b3VsZCBiZSBjbG9zZXIgdG8gdi4KKyAgICAvLyBUaGUg
bGFzdCBkaWdpdCB3aWxsIGJlIGNsb3Nlc3QgdG8gdGhlIGFjdHVhbCB2LiBUaGF0IGlzLCBldmVu
IGlmIHNldmVyYWwKKyAgICAvLyBkaWdpdHMgbWlnaHQgY29ycmVjdGx5IHlpZWxkICd2JyB3aGVu
IHJlYWQgYWdhaW4sIHRoZSBjbG9zZXN0IHdpbGwgYmUKKyAgICAvLyBjb21wdXRlZC4KKyAgICBz
dGF0aWMgYm9vbCBHcmlzdTMoZG91YmxlIHYsCisgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rv
cjxjaGFyPiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgIGludCogbGVuZ3RoLAorICAg
ICAgICAgICAgICAgICAgICAgICBpbnQqIGRlY2ltYWxfZXhwb25lbnQpIHsKKyAgICAgICAgRGl5
RnAgdyA9IERvdWJsZSh2KS5Bc05vcm1hbGl6ZWREaXlGcCgpOworICAgICAgICAvLyBib3VuZGFy
eV9taW51cyBhbmQgYm91bmRhcnlfcGx1cyBhcmUgdGhlIGJvdW5kYXJpZXMgYmV0d2VlbiB2IGFu
ZCBpdHMKKyAgICAgICAgLy8gY2xvc2VzdCBmbG9hdGluZy1wb2ludCBuZWlnaGJvcnMuIEFueSBu
dW1iZXIgc3RyaWN0bHkgYmV0d2VlbgorICAgICAgICAvLyBib3VuZGFyeV9taW51cyBhbmQgYm91
bmRhcnlfcGx1cyB3aWxsIHJvdW5kIHRvIHYgd2hlbiBjb252ZXJ0IHRvIGEgZG91YmxlLgorICAg
ICAgICAvLyBHcmlzdTMgd2lsbCBuZXZlciBvdXRwdXQgcmVwcmVzZW50YXRpb25zIHRoYXQgbGll
IGV4YWN0bHkgb24gYSBib3VuZGFyeS4KKyAgICAgICAgRGl5RnAgYm91bmRhcnlfbWludXMsIGJv
dW5kYXJ5X3BsdXM7CisgICAgICAgIERvdWJsZSh2KS5Ob3JtYWxpemVkQm91bmRhcmllcygmYm91
bmRhcnlfbWludXMsICZib3VuZGFyeV9wbHVzKTsKKyAgICAgICAgQVNTRVJUKGJvdW5kYXJ5X3Bs
dXMuZSgpID09IHcuZSgpKTsKKyAgICAgICAgRGl5RnAgdGVuX21rOyAgLy8gQ2FjaGVkIHBvd2Vy
IG9mIHRlbjogMTBeLWsKKyAgICAgICAgaW50IG1rOyAgICAgICAgLy8gLWsKKyAgICAgICAgaW50
IHRlbl9ta19taW5pbWFsX2JpbmFyeV9leHBvbmVudCA9CisgICAgICAgIGtNaW5pbWFsVGFyZ2V0
RXhwb25lbnQgLSAody5lKCkgKyBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSk7CisgICAgICAgIGlu
dCB0ZW5fbWtfbWF4aW1hbF9iaW5hcnlfZXhwb25lbnQgPQorICAgICAgICBrTWF4aW1hbFRhcmdl
dEV4cG9uZW50IC0gKHcuZSgpICsgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUpOworICAgICAgICBQ
b3dlcnNPZlRlbkNhY2hlOjpHZXRDYWNoZWRQb3dlckZvckJpbmFyeUV4cG9uZW50UmFuZ2UoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0ZW5fbWtfbWluaW1hbF9iaW5hcnlfZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW5fbWtfbWF4aW1h
bF9iaW5hcnlfZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmdGVuX21rLCAmbWspOworICAgICAgICBBU1NFUlQo
KGtNaW5pbWFsVGFyZ2V0RXhwb25lbnQgPD0gdy5lKCkgKyB0ZW5fbWsuZSgpICsKKyAgICAgICAg
ICAgICAgICBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSkgJiYKKyAgICAgICAgICAgICAgIChrTWF4
aW1hbFRhcmdldEV4cG9uZW50ID49IHcuZSgpICsgdGVuX21rLmUoKSArCisgICAgICAgICAgICAg
ICAgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUpKTsKKyAgICAgICAgLy8gTm90ZSB0aGF0IHRlbl9t
ayBpcyBvbmx5IGFuIGFwcHJveGltYXRpb24gb2YgMTBeLWsuIEEgRGl5RnAgb25seSBjb250YWlu
cyBhCisgICAgICAgIC8vIDY0IGJpdCBzaWduaWZpY2FuZCBhbmQgdGVuX21rIGlzIHRodXMgb25s
eSBwcmVjaXNlIHVwIHRvIDY0IGJpdHMuCisgICAgICAgIAorICAgICAgICAvLyBUaGUgRGl5RnA6
OlRpbWVzIHByb2NlZHVyZSByb3VuZHMgaXRzIHJlc3VsdCwgYW5kIHRlbl9tayBpcyBhcHByb3hp
bWF0ZWQKKyAgICAgICAgLy8gdG9vLiBUaGUgdmFyaWFibGUgc2NhbGVkX3cgKGFzIHdlbGwgYXMg
c2NhbGVkX2JvdW5kYXJ5X21pbnVzL3BsdXMpIGFyZSBub3cKKyAgICAgICAgLy8gb2ZmIGJ5IGEg
c21hbGwgYW1vdW50LgorICAgICAgICAvLyBJbiBmYWN0OiBzY2FsZWRfdyAtIHcqMTBeayA8IDF1
bHAgKHVuaXQgaW4gdGhlIGxhc3QgcGxhY2UpIG9mIHNjYWxlZF93LgorICAgICAgICAvLyBJbiBv
dGhlciB3b3JkczogbGV0IGYgPSBzY2FsZWRfdy5mKCkgYW5kIGUgPSBzY2FsZWRfdy5lKCksIHRo
ZW4KKyAgICAgICAgLy8gICAgICAgICAgIChmLTEpICogMl5lIDwgdyoxMF5rIDwgKGYrMSkgKiAy
XmUKKyAgICAgICAgRGl5RnAgc2NhbGVkX3cgPSBEaXlGcDo6VGltZXModywgdGVuX21rKTsKKyAg
ICAgICAgQVNTRVJUKHNjYWxlZF93LmUoKSA9PQorICAgICAgICAgICAgICAgYm91bmRhcnlfcGx1
cy5lKCkgKyB0ZW5fbWsuZSgpICsgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUpOworICAgICAgICAv
LyBJbiB0aGVvcnkgaXQgd291bGQgYmUgcG9zc2libGUgdG8gYXZvaWQgc29tZSByZWNvbXB1dGF0
aW9ucyBieSBjb21wdXRpbmcKKyAgICAgICAgLy8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB3IGFu
ZCBib3VuZGFyeV9taW51cy9wbHVzIChhIHBvd2VyIG9mIDIpIGFuZCB0bworICAgICAgICAvLyBj
b21wdXRlIHNjYWxlZF9ib3VuZGFyeV9taW51cy9wbHVzIGJ5IHN1YnRyYWN0aW5nL2FkZGluZyBm
cm9tCisgICAgICAgIC8vIHNjYWxlZF93LiBIb3dldmVyIHRoZSBjb2RlIGJlY29tZXMgbXVjaCBs
ZXNzIHJlYWRhYmxlIGFuZCB0aGUgc3BlZWQKKyAgICAgICAgLy8gZW5oYW5jZW1lbnRzIGFyZSBu
b3QgdGVycmlmZmljLgorICAgICAgICBEaXlGcCBzY2FsZWRfYm91bmRhcnlfbWludXMgPSBEaXlG
cDo6VGltZXMoYm91bmRhcnlfbWludXMsIHRlbl9tayk7CisgICAgICAgIERpeUZwIHNjYWxlZF9i
b3VuZGFyeV9wbHVzICA9IERpeUZwOjpUaW1lcyhib3VuZGFyeV9wbHVzLCAgdGVuX21rKTsKKyAg
ICAgICAgCisgICAgICAgIC8vIERpZ2l0R2VuIHdpbGwgZ2VuZXJhdGUgdGhlIGRpZ2l0cyBvZiBz
Y2FsZWRfdy4gVGhlcmVmb3JlIHdlIGhhdmUKKyAgICAgICAgLy8gdiA9PSAoZG91YmxlKSAoc2Nh
bGVkX3cgKiAxMF4tbWspLgorICAgICAgICAvLyBTZXQgZGVjaW1hbF9leHBvbmVudCA9PSAtbWsg
YW5kIHBhc3MgaXQgdG8gRGlnaXRHZW4uIElmIHNjYWxlZF93IGlzIG5vdCBhbgorICAgICAgICAv
LyBpbnRlZ2VyIHRoYW4gaXQgd2lsbCBiZSB1cGRhdGVkLiBGb3IgaW5zdGFuY2UgaWYgc2NhbGVk
X3cgPT0gMS4yMyB0aGVuCisgICAgICAgIC8vIHRoZSBidWZmZXIgd2lsbCBiZSBmaWxsZWQgd2l0
aCAiMTIzIiB1bmQgdGhlIGRlY2ltYWxfZXhwb25lbnQgd2lsbCBiZQorICAgICAgICAvLyBkZWNy
ZWFzZWQgYnkgMi4KKyAgICAgICAgaW50IGthcHBhOworICAgICAgICBib29sIHJlc3VsdCA9IERp
Z2l0R2VuKHNjYWxlZF9ib3VuZGFyeV9taW51cywgc2NhbGVkX3csIHNjYWxlZF9ib3VuZGFyeV9w
bHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgbGVuZ3RoLCAma2Fw
cGEpOworICAgICAgICAqZGVjaW1hbF9leHBvbmVudCA9IC1tayArIGthcHBhOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBUaGUgImNvdW50ZWQiIHZl
cnNpb24gb2YgZ3Jpc3UzIChzZWUgYWJvdmUpIG9ubHkgZ2VuZXJhdGVzIHJlcXVlc3RlZF9kaWdp
dHMKKyAgICAvLyBudW1iZXIgb2YgZGlnaXRzLiBUaGlzIHZlcnNpb24gZG9lcyBub3QgZ2VuZXJh
dGUgdGhlIHNob3J0ZXN0IHJlcHJlc2VudGF0aW9uLAorICAgIC8vIGFuZCB3aXRoIGVub3VnaCBy
ZXF1ZXN0ZWQgZGlnaXRzIDAuMSB3aWxsIGF0IHNvbWUgcG9pbnQgcHJpbnQgYXMgMC45OTk5OTk5
Li4uCisgICAgLy8gR3Jpc3UzIGlzIHRvbyBpbXByZWNpc2UgZm9yIHJlYWwgaGFsZndheSBjYXNl
cyAoMS41IHdpbGwgbm90IHdvcmspIGFuZAorICAgIC8vIHRoZXJlZm9yZSB0aGUgcm91bmRpbmcg
c3RyYXRlZ3kgZm9yIGhhbGZ3YXkgY2FzZXMgaXMgaXJyZWxldmFudC4KKyAgICBzdGF0aWMgYm9v
bCBHcmlzdTNDb3VudGVkKGRvdWJsZSB2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IHJlcXVlc3RlZF9kaWdpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0
b3I8Y2hhcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBsZW5n
dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGRlY2ltYWxfZXhwb25lbnQp
IHsKKyAgICAgICAgRGl5RnAgdyA9IERvdWJsZSh2KS5Bc05vcm1hbGl6ZWREaXlGcCgpOworICAg
ICAgICBEaXlGcCB0ZW5fbWs7ICAvLyBDYWNoZWQgcG93ZXIgb2YgdGVuOiAxMF4taworICAgICAg
ICBpbnQgbWs7ICAgICAgICAvLyAtaworICAgICAgICBpbnQgdGVuX21rX21pbmltYWxfYmluYXJ5
X2V4cG9uZW50ID0KKyAgICAgICAga01pbmltYWxUYXJnZXRFeHBvbmVudCAtICh3LmUoKSArIERp
eUZwOjprU2lnbmlmaWNhbmRTaXplKTsKKyAgICAgICAgaW50IHRlbl9ta19tYXhpbWFsX2JpbmFy
eV9leHBvbmVudCA9CisgICAgICAgIGtNYXhpbWFsVGFyZ2V0RXhwb25lbnQgLSAody5lKCkgKyBE
aXlGcDo6a1NpZ25pZmljYW5kU2l6ZSk7CisgICAgICAgIFBvd2Vyc09mVGVuQ2FjaGU6OkdldENh
Y2hlZFBvd2VyRm9yQmluYXJ5RXhwb25lbnRSYW5nZSgKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbl9ta19taW5pbWFsX2Jp
bmFyeV9leHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRlbl9ta19tYXhpbWFsX2JpbmFyeV9leHBvbmVudCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZ0ZW5fbWssICZtayk7CisgICAgICAgIEFTU0VSVCgoa01pbmltYWxUYXJnZXRFeHBvbmVu
dCA8PSB3LmUoKSArIHRlbl9tay5lKCkgKworICAgICAgICAgICAgICAgIERpeUZwOjprU2lnbmlm
aWNhbmRTaXplKSAmJgorICAgICAgICAgICAgICAgKGtNYXhpbWFsVGFyZ2V0RXhwb25lbnQgPj0g
dy5lKCkgKyB0ZW5fbWsuZSgpICsKKyAgICAgICAgICAgICAgICBEaXlGcDo6a1NpZ25pZmljYW5k
U2l6ZSkpOworICAgICAgICAvLyBOb3RlIHRoYXQgdGVuX21rIGlzIG9ubHkgYW4gYXBwcm94aW1h
dGlvbiBvZiAxMF4tay4gQSBEaXlGcCBvbmx5IGNvbnRhaW5zIGEKKyAgICAgICAgLy8gNjQgYml0
IHNpZ25pZmljYW5kIGFuZCB0ZW5fbWsgaXMgdGh1cyBvbmx5IHByZWNpc2UgdXAgdG8gNjQgYml0
cy4KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBEaXlGcDo6VGltZXMgcHJvY2VkdXJlIHJvdW5k
cyBpdHMgcmVzdWx0LCBhbmQgdGVuX21rIGlzIGFwcHJveGltYXRlZAorICAgICAgICAvLyB0b28u
IFRoZSB2YXJpYWJsZSBzY2FsZWRfdyAoYXMgd2VsbCBhcyBzY2FsZWRfYm91bmRhcnlfbWludXMv
cGx1cykgYXJlIG5vdworICAgICAgICAvLyBvZmYgYnkgYSBzbWFsbCBhbW91bnQuCisgICAgICAg
IC8vIEluIGZhY3Q6IHNjYWxlZF93IC0gdyoxMF5rIDwgMXVscCAodW5pdCBpbiB0aGUgbGFzdCBw
bGFjZSkgb2Ygc2NhbGVkX3cuCisgICAgICAgIC8vIEluIG90aGVyIHdvcmRzOiBsZXQgZiA9IHNj
YWxlZF93LmYoKSBhbmQgZSA9IHNjYWxlZF93LmUoKSwgdGhlbgorICAgICAgICAvLyAgICAgICAg
ICAgKGYtMSkgKiAyXmUgPCB3KjEwXmsgPCAoZisxKSAqIDJeZQorICAgICAgICBEaXlGcCBzY2Fs
ZWRfdyA9IERpeUZwOjpUaW1lcyh3LCB0ZW5fbWspOworICAgICAgICAKKyAgICAgICAgLy8gV2Ug
bm93IGhhdmUgKGRvdWJsZSkgKHNjYWxlZF93ICogMTBeLW1rKS4KKyAgICAgICAgLy8gRGlnaXRH
ZW4gd2lsbCBnZW5lcmF0ZSB0aGUgZmlyc3QgcmVxdWVzdGVkX2RpZ2l0cyBkaWdpdHMgb2Ygc2Nh
bGVkX3cgYW5kCisgICAgICAgIC8vIHJldHVybiB0b2dldGhlciB3aXRoIGEga2FwcGEgc3VjaCB0
aGF0IHNjYWxlZF93IH49IGJ1ZmZlciAqIDEwXmthcHBhLiAoSXQKKyAgICAgICAgLy8gd2lsbCBu
b3QgYWx3YXlzIGJlIGV4YWN0bHkgdGhlIHNhbWUgc2luY2UgRGlnaXRHZW5Db3VudGVkIG9ubHkg
cHJvZHVjZXMgYQorICAgICAgICAvLyBsaW1pdGVkIG51bWJlciBvZiBkaWdpdHMuKQorICAgICAg
ICBpbnQga2FwcGE7CisgICAgICAgIGJvb2wgcmVzdWx0ID0gRGlnaXRHZW5Db3VudGVkKHNjYWxl
ZF93LCByZXF1ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBidWZmZXIsIGxlbmd0aCwgJmthcHBhKTsKKyAgICAgICAgKmRlY2ltYWxfZXhwb25lbnQg
PSAtbWsgKyBrYXBwYTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAg
CisgICAgYm9vbCBGYXN0RHRvYShkb3VibGUgdiwKKyAgICAgICAgICAgICAgICAgIEZhc3REdG9h
TW9kZSBtb2RlLAorICAgICAgICAgICAgICAgICAgaW50IHJlcXVlc3RlZF9kaWdpdHMsCisgICAg
ICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAgaW50
KiBsZW5ndGgsCisgICAgICAgICAgICAgICAgICBpbnQqIGRlY2ltYWxfcG9pbnQpIHsKKyAgICAg
ICAgQVNTRVJUKHYgPiAwKTsKKyAgICAgICAgQVNTRVJUKCFEb3VibGUodikuSXNTcGVjaWFsKCkp
OworICAgICAgICAKKyAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgaW50IGRl
Y2ltYWxfZXhwb25lbnQgPSAwOworICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgICAg
IGNhc2UgRkFTVF9EVE9BX1NIT1JURVNUOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IEdyaXN1
Myh2LCBidWZmZXIsIGxlbmd0aCwgJmRlY2ltYWxfZXhwb25lbnQpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBGQVNUX0RUT0FfUFJFQ0lTSU9OOgorICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IEdyaXN1M0NvdW50ZWQodiwgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgbGVuZ3RoLCAmZGVjaW1h
bF9leHBvbmVudCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHJlc3VsdCkgeworICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSAqbGVuZ3RoICsgZGVjaW1h
bF9leHBvbmVudDsKKyAgICAgICAgICAgIGJ1ZmZlclsqbGVuZ3RoXSA9ICdcMCc7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCit9ICAvLyBuYW1lc3BhY2Ug
ZG91YmxlX2NvbnZlcnNpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
ZHRvYS9mYXN0LWR0b2EuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9mYXN0LWR0
b2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi44ODQzNmZkNTViYmY0MGMxNWE0YTM1ODRhYzhhNTNiMzA5MTQ3MzAy
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2Zhc3Qt
ZHRvYS5oCkBAIC0wLDAgKzEsODQgQEAKKy8vIENvcHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0
IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8v
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lm
bmRlZiBET1VCTEVfQ09OVkVSU0lPTl9GQVNUX0RUT0FfSF8KKyNkZWZpbmUgRE9VQkxFX0NPTlZF
UlNJT05fRkFTVF9EVE9BX0hfCisKKyNpbmNsdWRlICJ1dGlscy5oIgorCituYW1lc3BhY2UgZG91
YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIGVudW0gRmFzdER0b2FNb2RlIHsKKyAgICAgICAg
Ly8gQ29tcHV0ZXMgdGhlIHNob3J0ZXN0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBpbnB1
dC4gVGhlIHJldHVybmVkCisgICAgICAgIC8vIHJlc3VsdCB3aWxsIGJlIHRoZSBtb3N0IGFjY3Vy
YXRlIG51bWJlciBvZiB0aGlzIGxlbmd0aC4gTG9uZ2VyCisgICAgICAgIC8vIHJlcHJlc2VudGF0
aW9ucyBtaWdodCBiZSBtb3JlIGFjY3VyYXRlLgorICAgICAgICBGQVNUX0RUT0FfU0hPUlRFU1Qs
CisgICAgICAgIC8vIENvbXB1dGVzIGEgcmVwcmVzZW50YXRpb24gd2hlcmUgdGhlIHByZWNpc2lv
biAobnVtYmVyIG9mIGRpZ2l0cykgaXMKKyAgICAgICAgLy8gZ2l2ZW4gYXMgaW5wdXQuIFRoZSBw
cmVjaXNpb24gaXMgaW5kZXBlbmRlbnQgb2YgdGhlIGRlY2ltYWwgcG9pbnQuCisgICAgICAgIEZB
U1RfRFRPQV9QUkVDSVNJT04KKyAgICB9OworICAgIAorICAgIC8vIEZhc3REdG9hIHdpbGwgcHJv
ZHVjZSBhdCBtb3N0IGtGYXN0RHRvYU1heGltYWxMZW5ndGggZGlnaXRzLiBUaGlzIGRvZXMgbm90
CisgICAgLy8gaW5jbHVkZSB0aGUgdGVybWluYXRpbmcgJ1wwJyBjaGFyYWN0ZXIuCisgICAgc3Rh
dGljIGNvbnN0IGludCBrRmFzdER0b2FNYXhpbWFsTGVuZ3RoID0gMTc7CisgICAgCisgICAgLy8g
UHJvdmlkZXMgYSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIHYuCisgICAgLy8gVGhlIHJlc3Vs
dCBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgYnVmZmVyICogMTBeKHBvaW50IC0gbGVuZ3RoKS4K
KyAgICAvLworICAgIC8vIFByZWNvbmRpdGlvbjoKKyAgICAvLyAgICogdiBtdXN0IGJlIGEgc3Ry
aWN0bHkgcG9zaXRpdmUgZmluaXRlIGRvdWJsZS4KKyAgICAvLworICAgIC8vIFJldHVybnMgdHJ1
ZSBpZiBpdCBzdWNjZWVkcywgb3RoZXJ3aXNlIHRoZSByZXN1bHQgY2FuIG5vdCBiZSB0cnVzdGVk
LgorICAgIC8vIFRoZXJlIHdpbGwgYmUgKmxlbmd0aCBkaWdpdHMgaW5zaWRlIHRoZSBidWZmZXIg
Zm9sbG93ZWQgYnkgYSBudWxsIHRlcm1pbmF0b3IuCisgICAgLy8gSWYgdGhlIGZ1bmN0aW9uIHJl
dHVybnMgdHJ1ZSBhbmQgbW9kZSBlcXVhbHMKKyAgICAvLyAgIC0gRkFTVF9EVE9BX1NIT1JURVNU
LCB0aGVuCisgICAgLy8gICAgIHRoZSBwYXJhbWV0ZXIgcmVxdWVzdGVkX2RpZ2l0cyBpcyBpZ25v
cmVkLgorICAgIC8vICAgICBUaGUgcmVzdWx0IHNhdGlzZmllcworICAgIC8vICAgICAgICAgdiA9
PSAoZG91YmxlKSAoYnVmZmVyICogMTBeKHBvaW50IC0gbGVuZ3RoKSkuCisgICAgLy8gICAgIFRo
ZSBkaWdpdHMgaW4gdGhlIGJ1ZmZlciBhcmUgdGhlIHNob3J0ZXN0IHJlcHJlc2VudGF0aW9uIHBv
c3NpYmxlLiBFLmcuCisgICAgLy8gICAgIGlmIDAuMDk5OTk5OTk5OTk5IGFuZCAwLjEgcmVwcmVz
ZW50IHRoZSBzYW1lIGRvdWJsZSB0aGVuICIxIiBpcyByZXR1cm5lZAorICAgIC8vICAgICB3aXRo
IHBvaW50ID0gMC4KKyAgICAvLyAgICAgVGhlIGxhc3QgZGlnaXQgd2lsbCBiZSBjbG9zZXN0IHRv
IHRoZSBhY3R1YWwgdi4gVGhhdCBpcywgZXZlbiBpZiBzZXZlcmFsCisgICAgLy8gICAgIGRpZ2l0
cyBtaWdodCBjb3JyZWN0bHkgeWllbGQgJ3YnIHdoZW4gcmVhZCBhZ2FpbiwgdGhlIGJ1ZmZlciB3
aWxsIGNvbnRhaW4KKyAgICAvLyAgICAgdGhlIG9uZSBjbG9zZXN0IHRvIHYuCisgICAgLy8gICAt
IEZBU1RfRFRPQV9QUkVDSVNJT04sIHRoZW4KKyAgICAvLyAgICAgdGhlIGJ1ZmZlciBjb250YWlu
cyByZXF1ZXN0ZWRfZGlnaXRzIGRpZ2l0cy4KKyAgICAvLyAgICAgdGhlIGRpZmZlcmVuY2UgdiAt
IChidWZmZXIgKiAxMF4ocG9pbnQtbGVuZ3RoKSkgaXMgY2xvc2VzdCB0byB6ZXJvIGZvcgorICAg
IC8vICAgICBhbGwgcG9zc2libGUgcmVwcmVzZW50YXRpb25zIG9mIHJlcXVlc3RlZF9kaWdpdHMg
ZGlnaXRzLgorICAgIC8vICAgICBJZiB0aGVyZSBhcmUgdHdvIHZhbHVlcyB0aGF0IGFyZSBlcXVh
bGx5IGNsb3NlLCB0aGVuIEZhc3REdG9hIHJldHVybnMKKyAgICAvLyAgICAgZmFsc2UuCisgICAg
Ly8gRm9yIGJvdGggbW9kZXMgdGhlIGJ1ZmZlciBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xk
IHRoZSByZXN1bHQuCisgICAgYm9vbCBGYXN0RHRvYShkb3VibGUgZCwKKyAgICAgICAgICAgICAg
ICAgIEZhc3REdG9hTW9kZSBtb2RlLAorICAgICAgICAgICAgICAgICAgaW50IHJlcXVlc3RlZF9k
aWdpdHMsCisgICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLAorICAgICAgICAg
ICAgICAgICAgaW50KiBsZW5ndGgsCisgICAgICAgICAgICAgICAgICBpbnQqIGRlY2ltYWxfcG9p
bnQpOworICAgIAorfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCisKKyNlbmRpZiAg
Ly8gRE9VQkxFX0NPTlZFUlNJT05fRkFTVF9EVE9BX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL2R0b2EvZml4ZWQtZHRvYS5jYyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvZHRvYS9maXhlZC1kdG9hLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk0ZDMyMjllYzZjNDc0NDlhZGY1
ZDAxNDljNzQxMGJiMjBmMDIwYWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL2R0b2EvZml4ZWQtZHRvYS5jYwpAQCAtMCwwICsxLDQwNCBAQAorLy8gQ29weXJp
Z2h0IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1l
ciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisv
LyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8v
ICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSAiVW51c2Vk
UGFyYW0uaCIKKyNpbmNsdWRlICJmaXhlZC1kdG9hLmgiCisjaW5jbHVkZSAiZG91YmxlLmgiCisK
K25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgLy8gUmVwcmVzZW50cyBh
IDEyOGJpdCB0eXBlLiBUaGlzIGNsYXNzIHNob3VsZCBiZSByZXBsYWNlZCBieSBhIG5hdGl2ZSB0
eXBlIG9uCisgICAgLy8gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCAxMjhiaXQgaW50ZWdlcnMuCisg
ICAgY2xhc3MgVUludDEyOCB7CisgICAgcHVibGljOgorICAgICAgICBVSW50MTI4KCkgOiBoaWdo
X2JpdHNfKDApLCBsb3dfYml0c18oMCkgeyB9CisgICAgICAgIFVJbnQxMjgodWludDY0X3QgaGln
aCwgdWludDY0X3QgbG93KSA6IGhpZ2hfYml0c18oaGlnaCksIGxvd19iaXRzXyhsb3cpIHsgfQor
ICAgICAgICAKKyAgICAgICAgdm9pZCBNdWx0aXBseSh1aW50MzJfdCBtdWx0aXBsaWNhbmQpIHsK
KyAgICAgICAgICAgIHVpbnQ2NF90IGFjY3VtdWxhdG9yOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBhY2N1bXVsYXRvciA9IChsb3dfYml0c18gJiBrTWFzazMyKSAqIG11bHRpcGxpY2FuZDsK
KyAgICAgICAgICAgIHVpbnQzMl90IHBhcnQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYWNjdW11
bGF0b3IgJiBrTWFzazMyKTsKKyAgICAgICAgICAgIGFjY3VtdWxhdG9yID4+PSAzMjsKKyAgICAg
ICAgICAgIGFjY3VtdWxhdG9yID0gYWNjdW11bGF0b3IgKyAobG93X2JpdHNfID4+IDMyKSAqIG11
bHRpcGxpY2FuZDsKKyAgICAgICAgICAgIGxvd19iaXRzXyA9IChhY2N1bXVsYXRvciA8PCAzMikg
KyBwYXJ0OworICAgICAgICAgICAgYWNjdW11bGF0b3IgPj49IDMyOworICAgICAgICAgICAgYWNj
dW11bGF0b3IgPSBhY2N1bXVsYXRvciArIChoaWdoX2JpdHNfICYga01hc2szMikgKiBtdWx0aXBs
aWNhbmQ7CisgICAgICAgICAgICBwYXJ0ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFjY3VtdWxh
dG9yICYga01hc2szMik7CisgICAgICAgICAgICBhY2N1bXVsYXRvciA+Pj0gMzI7CisgICAgICAg
ICAgICBhY2N1bXVsYXRvciA9IGFjY3VtdWxhdG9yICsgKGhpZ2hfYml0c18gPj4gMzIpICogbXVs
dGlwbGljYW5kOworICAgICAgICAgICAgaGlnaF9iaXRzXyA9IChhY2N1bXVsYXRvciA8PCAzMikg
KyBwYXJ0OworICAgICAgICAgICAgQVNTRVJUKChhY2N1bXVsYXRvciA+PiAzMikgPT0gMCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgU2hpZnQoaW50IHNoaWZ0X2Ftb3VudCkg
eworICAgICAgICAgICAgQVNTRVJUKC02NCA8PSBzaGlmdF9hbW91bnQgJiYgc2hpZnRfYW1vdW50
IDw9IDY0KTsKKyAgICAgICAgICAgIGlmIChzaGlmdF9hbW91bnQgPT0gMCkgeworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hpZnRfYW1vdW50ID09IC02
NCkgeworICAgICAgICAgICAgICAgIGhpZ2hfYml0c18gPSBsb3dfYml0c187CisgICAgICAgICAg
ICAgICAgbG93X2JpdHNfID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hpZnRfYW1vdW50
ID09IDY0KSB7CisgICAgICAgICAgICAgICAgbG93X2JpdHNfID0gaGlnaF9iaXRzXzsKKyAgICAg
ICAgICAgICAgICBoaWdoX2JpdHNfID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hpZnRf
YW1vdW50IDw9IDApIHsKKyAgICAgICAgICAgICAgICBoaWdoX2JpdHNfIDw8PSAtc2hpZnRfYW1v
dW50OworICAgICAgICAgICAgICAgIGhpZ2hfYml0c18gKz0gbG93X2JpdHNfID4+ICg2NCArIHNo
aWZ0X2Ftb3VudCk7CisgICAgICAgICAgICAgICAgbG93X2JpdHNfIDw8PSAtc2hpZnRfYW1vdW50
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBsb3dfYml0c18gPj49IHNo
aWZ0X2Ftb3VudDsKKyAgICAgICAgICAgICAgICBsb3dfYml0c18gKz0gaGlnaF9iaXRzXyA8PCAo
NjQgLSBzaGlmdF9hbW91bnQpOworICAgICAgICAgICAgICAgIGhpZ2hfYml0c18gPj49IHNoaWZ0
X2Ftb3VudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8g
TW9kaWZpZXMgKnRoaXMgdG8gKnRoaXMgTU9EICgyXnBvd2VyKS4KKyAgICAgICAgLy8gUmV0dXJu
cyAqdGhpcyBESVYgKDJecG93ZXIpLgorICAgICAgICBpbnQgRGl2TW9kUG93ZXJPZjIoaW50IHBv
d2VyKSB7CisgICAgICAgICAgICBpZiAocG93ZXIgPj0gNjQpIHsKKyAgICAgICAgICAgICAgICBp
bnQgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8aW50PihoaWdoX2JpdHNfID4+IChwb3dlciAtIDY0KSk7
CisgICAgICAgICAgICAgICAgaGlnaF9iaXRzXyAtPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4ocmVz
dWx0KSA8PCAocG93ZXIgLSA2NCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdWludDY0X3QgcGFydF9sb3cgPSBs
b3dfYml0c18gPj4gcG93ZXI7CisgICAgICAgICAgICAgICAgdWludDY0X3QgcGFydF9oaWdoID0g
aGlnaF9iaXRzXyA8PCAoNjQgLSBwb3dlcik7CisgICAgICAgICAgICAgICAgaW50IHJlc3VsdCA9
IHN0YXRpY19jYXN0PGludD4ocGFydF9sb3cgKyBwYXJ0X2hpZ2gpOworICAgICAgICAgICAgICAg
IGhpZ2hfYml0c18gPSAwOworICAgICAgICAgICAgICAgIGxvd19iaXRzXyAtPSBwYXJ0X2xvdyA8
PCBwb3dlcjsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIElzWmVybygpIGNvbnN0IHsKKyAgICAg
ICAgICAgIHJldHVybiBoaWdoX2JpdHNfID09IDAgJiYgbG93X2JpdHNfID09IDA7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGludCBCaXRBdChpbnQgcG9zaXRpb24pIHsKKyAgICAgICAg
ICAgIGlmIChwb3NpdGlvbiA+PSA2NCkgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxpbnQ+KGhpZ2hfYml0c18gPj4gKHBvc2l0aW9uIC0gNjQpKSAmIDE7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxvd19i
aXRzXyA+PiBwb3NpdGlvbikgJiAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgIHByaXZhdGU6CisgICAgICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBrTWFzazMyID0g
MHhGRkZGRkZGRjsKKyAgICAgICAgLy8gVmFsdWUgPT0gKGhpZ2hfYml0c18gPDwgNjQpICsgbG93
X2JpdHNfCisgICAgICAgIHVpbnQ2NF90IGhpZ2hfYml0c187CisgICAgICAgIHVpbnQ2NF90IGxv
d19iaXRzXzsKKyAgICB9OworICAgIAorICAgIAorICAgIHN0YXRpYyBjb25zdCBpbnQga0RvdWJs
ZVNpZ25pZmljYW5kU2l6ZSA9IDUzOyAgLy8gSW5jbHVkZXMgdGhlIGhpZGRlbiBiaXQuCisgICAg
CisgICAgCisgICAgc3RhdGljIHZvaWQgRmlsbERpZ2l0czMyRml4ZWRMZW5ndGgodWludDMyX3Qg
bnVtYmVyLCBpbnQgcmVxdWVzdGVkX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLCBpbnQqIGxlbmd0aCkgeworICAgICAg
ICBmb3IgKGludCBpID0gcmVxdWVzdGVkX2xlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAg
ICAgICAgICBidWZmZXJbKCpsZW5ndGgpICsgaV0gPSAnMCcgKyBudW1iZXIgJSAxMDsKKyAgICAg
ICAgICAgIG51bWJlciAvPSAxMDsKKyAgICAgICAgfQorICAgICAgICAqbGVuZ3RoICs9IHJlcXVl
c3RlZF9sZW5ndGg7CisgICAgfQorICAgIAorICAgIAorICAgIHN0YXRpYyB2b2lkIEZpbGxEaWdp
dHMzMih1aW50MzJfdCBudW1iZXIsIFZlY3RvcjxjaGFyPiBidWZmZXIsIGludCogbGVuZ3RoKSB7
CisgICAgICAgIGludCBudW1iZXJfbGVuZ3RoID0gMDsKKyAgICAgICAgLy8gV2UgZmlsbCB0aGUg
ZGlnaXRzIGluIHJldmVyc2Ugb3JkZXIgYW5kIGV4Y2hhbmdlIHRoZW0gYWZ0ZXJ3YXJkcy4KKyAg
ICAgICAgd2hpbGUgKG51bWJlciAhPSAwKSB7CisgICAgICAgICAgICBpbnQgZGlnaXQgPSBudW1i
ZXIgJSAxMDsKKyAgICAgICAgICAgIG51bWJlciAvPSAxMDsKKyAgICAgICAgICAgIGJ1ZmZlclso
Kmxlbmd0aCkgKyBudW1iZXJfbGVuZ3RoXSA9ICcwJyArIGRpZ2l0OworICAgICAgICAgICAgbnVt
YmVyX2xlbmd0aCsrOworICAgICAgICB9CisgICAgICAgIC8vIEV4Y2hhbmdlIHRoZSBkaWdpdHMu
CisgICAgICAgIGludCBpID0gKmxlbmd0aDsKKyAgICAgICAgaW50IGogPSAqbGVuZ3RoICsgbnVt
YmVyX2xlbmd0aCAtIDE7CisgICAgICAgIHdoaWxlIChpIDwgaikgeworICAgICAgICAgICAgY2hh
ciB0bXAgPSBidWZmZXJbaV07CisgICAgICAgICAgICBidWZmZXJbaV0gPSBidWZmZXJbal07Cisg
ICAgICAgICAgICBidWZmZXJbal0gPSB0bXA7CisgICAgICAgICAgICBpKys7CisgICAgICAgICAg
ICBqLS07CisgICAgICAgIH0KKyAgICAgICAgKmxlbmd0aCArPSBudW1iZXJfbGVuZ3RoOworICAg
IH0KKyAgICAKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBGaWxsRGlnaXRzNjRGaXhlZExlbmd0aCh1
aW50NjRfdCBudW1iZXIsIGludCByZXF1ZXN0ZWRfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXIsIGludCogbGVuZ3RoKSB7
CisgICAgICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0ZWRfbGVuZ3RoKTsKKyAgICAgICAgY29uc3Qg
dWludDMyX3Qga1RlbjcgPSAxMDAwMDAwMDsKKyAgICAgICAgLy8gRm9yIGVmZmljaWVuY3kgY3V0
IHRoZSBudW1iZXIgaW50byAzIHVpbnQzMl90IHBhcnRzLCBhbmQgcHJpbnQgdGhvc2UuCisgICAg
ICAgIHVpbnQzMl90IHBhcnQyID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG51bWJlciAlIGtUZW43
KTsKKyAgICAgICAgbnVtYmVyIC89IGtUZW43OworICAgICAgICB1aW50MzJfdCBwYXJ0MSA9IHN0
YXRpY19jYXN0PHVpbnQzMl90PihudW1iZXIgJSBrVGVuNyk7CisgICAgICAgIHVpbnQzMl90IHBh
cnQwID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG51bWJlciAvIGtUZW43KTsKKyAgICAgICAgCisg
ICAgICAgIEZpbGxEaWdpdHMzMkZpeGVkTGVuZ3RoKHBhcnQwLCAzLCBidWZmZXIsIGxlbmd0aCk7
CisgICAgICAgIEZpbGxEaWdpdHMzMkZpeGVkTGVuZ3RoKHBhcnQxLCA3LCBidWZmZXIsIGxlbmd0
aCk7CisgICAgICAgIEZpbGxEaWdpdHMzMkZpeGVkTGVuZ3RoKHBhcnQyLCA3LCBidWZmZXIsIGxl
bmd0aCk7CisgICAgfQorICAgIAorICAgIAorICAgIHN0YXRpYyB2b2lkIEZpbGxEaWdpdHM2NCh1
aW50NjRfdCBudW1iZXIsIFZlY3RvcjxjaGFyPiBidWZmZXIsIGludCogbGVuZ3RoKSB7CisgICAg
ICAgIGNvbnN0IHVpbnQzMl90IGtUZW43ID0gMTAwMDAwMDA7CisgICAgICAgIC8vIEZvciBlZmZp
Y2llbmN5IGN1dCB0aGUgbnVtYmVyIGludG8gMyB1aW50MzJfdCBwYXJ0cywgYW5kIHByaW50IHRo
b3NlLgorICAgICAgICB1aW50MzJfdCBwYXJ0MiA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihudW1i
ZXIgJSBrVGVuNyk7CisgICAgICAgIG51bWJlciAvPSBrVGVuNzsKKyAgICAgICAgdWludDMyX3Qg
cGFydDEgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4obnVtYmVyICUga1RlbjcpOworICAgICAgICB1
aW50MzJfdCBwYXJ0MCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihudW1iZXIgLyBrVGVuNyk7Cisg
ICAgICAgIAorICAgICAgICBpZiAocGFydDAgIT0gMCkgeworICAgICAgICAgICAgRmlsbERpZ2l0
czMyKHBhcnQwLCBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgICAgICBGaWxsRGlnaXRzMzJGaXhl
ZExlbmd0aChwYXJ0MSwgNywgYnVmZmVyLCBsZW5ndGgpOworICAgICAgICAgICAgRmlsbERpZ2l0
czMyRml4ZWRMZW5ndGgocGFydDIsIDcsIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAgfSBlbHNl
IGlmIChwYXJ0MSAhPSAwKSB7CisgICAgICAgICAgICBGaWxsRGlnaXRzMzIocGFydDEsIGJ1ZmZl
ciwgbGVuZ3RoKTsKKyAgICAgICAgICAgIEZpbGxEaWdpdHMzMkZpeGVkTGVuZ3RoKHBhcnQyLCA3
LCBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBGaWxsRGln
aXRzMzIocGFydDIsIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICAKKyAgICBzdGF0aWMgdm9pZCBSb3VuZFVwKFZlY3RvcjxjaGFyPiBidWZmZXIsIGludCogbGVu
Z3RoLCBpbnQqIGRlY2ltYWxfcG9pbnQpIHsKKyAgICAgICAgLy8gQW4gZW1wdHkgYnVmZmVyIHJl
cHJlc2VudHMgMC4KKyAgICAgICAgaWYgKCpsZW5ndGggPT0gMCkgeworICAgICAgICAgICAgYnVm
ZmVyWzBdID0gJzEnOworICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSAxOworICAgICAgICAg
ICAgKmxlbmd0aCA9IDE7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
Ly8gUm91bmQgdGhlIGxhc3QgZGlnaXQgdW50aWwgd2UgZWl0aGVyIGhhdmUgYSBkaWdpdCB0aGF0
IHdhcyBub3QgJzknIG9yIHVudGlsCisgICAgICAgIC8vIHdlIHJlYWNoZWQgdGhlIGZpcnN0IGRp
Z2l0LgorICAgICAgICBidWZmZXJbKCpsZW5ndGgpIC0gMV0rKzsKKyAgICAgICAgZm9yIChpbnQg
aSA9ICgqbGVuZ3RoKSAtIDE7IGkgPiAwOyAtLWkpIHsKKyAgICAgICAgICAgIGlmIChidWZmZXJb
aV0gIT0gJzAnICsgMTApIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBidWZmZXJbaV0gPSAnMCc7CisgICAgICAgICAgICBidWZmZXJbaSAtIDFd
Kys7CisgICAgICAgIH0KKyAgICAgICAgLy8gSWYgdGhlIGZpcnN0IGRpZ2l0IGlzIG5vdyAnMCcg
KyAxMCwgd2Ugd291bGQgbmVlZCB0byBzZXQgaXQgdG8gJzAnIGFuZCBhZGQKKyAgICAgICAgLy8g
YSAnMScgaW4gZnJvbnQuIEhvd2V2ZXIgd2UgcmVhY2ggdGhlIGZpcnN0IGRpZ2l0IG9ubHkgaWYg
YWxsIGZvbGxvd2luZworICAgICAgICAvLyBkaWdpdHMgaGFkIGJlZW4gJzknIGJlZm9yZSByb3Vu
ZGluZyB1cC4gTm93IGFsbCB0cmFpbGluZyBkaWdpdHMgYXJlICcwJyBhbmQKKyAgICAgICAgLy8g
d2Ugc2ltcGx5IHN3aXRjaCB0aGUgZmlyc3QgZGlnaXQgdG8gJzEnIGFuZCB1cGRhdGUgdGhlIGRl
Y2ltYWwtcG9pbnQKKyAgICAgICAgLy8gKGluZGljYXRpbmcgdGhhdCB0aGUgcG9pbnQgaXMgbm93
IG9uZSBkaWdpdCB0byB0aGUgcmlnaHQpLgorICAgICAgICBpZiAoYnVmZmVyWzBdID09ICcwJyAr
IDEwKSB7CisgICAgICAgICAgICBidWZmZXJbMF0gPSAnMSc7CisgICAgICAgICAgICAoKmRlY2lt
YWxfcG9pbnQpKys7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgLy8gVGhlIGdp
dmVuIGZyYWN0aW9uYWxzIG51bWJlciByZXByZXNlbnRzIGEgZml4ZWQtcG9pbnQgbnVtYmVyIHdp
dGggYmluYXJ5CisgICAgLy8gcG9pbnQgYXQgYml0ICgtZXhwb25lbnQpLgorICAgIC8vIFByZWNv
bmRpdGlvbnM6CisgICAgLy8gICAtMTI4IDw9IGV4cG9uZW50IDw9IDAuCisgICAgLy8gICAwIDw9
IGZyYWN0aW9uYWxzICogMl5leHBvbmVudCA8IDEKKyAgICAvLyAgIFRoZSBidWZmZXIgaG9sZHMg
dGhlIHJlc3VsdC4KKyAgICAvLyBUaGUgZnVuY3Rpb24gd2lsbCByb3VuZCBpdHMgcmVzdWx0LiBE
dXJpbmcgdGhlIHJvdW5kaW5nLXByb2Nlc3MgZGlnaXRzIG5vdAorICAgIC8vIGdlbmVyYXRlZCBi
eSB0aGlzIGZ1bmN0aW9uIG1pZ2h0IGJlIHVwZGF0ZWQsIGFuZCB0aGUgZGVjaW1hbC1wb2ludCB2
YXJpYWJsZQorICAgIC8vIG1pZ2h0IGJlIHVwZGF0ZWQuIElmIHRoaXMgZnVuY3Rpb24gZ2VuZXJh
dGVzIHRoZSBkaWdpdHMgOTkgYW5kIHRoZSBidWZmZXIKKyAgICAvLyBhbHJlYWR5IGNvbnRhaW5l
ZCAiMTk5IiAodGh1cyB5aWVsZGluZyBhIGJ1ZmZlciBvZiAiMTk5OTkiKSB0aGVuIGEKKyAgICAv
LyByb3VuZGluZy11cCB3aWxsIGNoYW5nZSB0aGUgY29udGVudHMgb2YgdGhlIGJ1ZmZlciB0byAi
MjAwMDAiLgorICAgIHN0YXRpYyB2b2lkIEZpbGxGcmFjdGlvbmFscyh1aW50NjRfdCBmcmFjdGlv
bmFscywgaW50IGV4cG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
ZnJhY3Rpb25hbF9jb3VudCwgVmVjdG9yPGNoYXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50KiBsZW5ndGgsIGludCogZGVjaW1hbF9wb2ludCkgeworICAgICAg
ICBBU1NFUlQoLTEyOCA8PSBleHBvbmVudCAmJiBleHBvbmVudCA8PSAwKTsKKyAgICAgICAgLy8g
J2ZyYWN0aW9uYWxzJyBpcyBhIGZpeGVkLXBvaW50IG51bWJlciwgd2l0aCBiaW5hcnkgcG9pbnQg
YXQgYml0CisgICAgICAgIC8vICgtZXhwb25lbnQpLiBJbnNpZGUgdGhlIGZ1bmN0aW9uIHRoZSBu
b24tY29udmVydGVkIHJlbWFpbmRlciBvZiBmcmFjdGlvbmFscworICAgICAgICAvLyBpcyBhIGZp
eGVkLXBvaW50IG51bWJlciwgd2l0aCBiaW5hcnkgcG9pbnQgYXQgYml0ICdwb2ludCcuCisgICAg
ICAgIGlmICgtZXhwb25lbnQgPD0gNjQpIHsKKyAgICAgICAgICAgIC8vIE9uZSA2NCBiaXQgbnVt
YmVyIGlzIHN1ZmZpY2llbnQuCisgICAgICAgICAgICBBU1NFUlQoZnJhY3Rpb25hbHMgPj4gNTYg
PT0gMCk7CisgICAgICAgICAgICBpbnQgcG9pbnQgPSAtZXhwb25lbnQ7CisgICAgICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGZyYWN0aW9uYWxfY291bnQ7ICsraSkgeworICAgICAgICAgICAg
ICAgIGlmIChmcmFjdGlvbmFscyA9PSAwKSBicmVhazsKKyAgICAgICAgICAgICAgICAvLyBJbnN0
ZWFkIG9mIG11bHRpcGx5aW5nIGJ5IDEwIHdlIG11bHRpcGx5IGJ5IDUgYW5kIGFkanVzdCB0aGUg
cG9pbnQKKyAgICAgICAgICAgICAgICAvLyBsb2NhdGlvbi4gVGhpcyB3YXkgdGhlIGZyYWN0aW9u
YWxzIHZhcmlhYmxlIHdpbGwgbm90IG92ZXJmbG93LgorICAgICAgICAgICAgICAgIC8vIEludmFy
aWFudCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wOiBmcmFjdGlvbmFscyA8IDJecG9pbnQu
CisgICAgICAgICAgICAgICAgLy8gSW5pdGlhbGx5IHdlIGhhdmU6IHBvaW50IDw9IDY0IGFuZCBm
cmFjdGlvbmFscyA8IDJeNTYKKyAgICAgICAgICAgICAgICAvLyBBZnRlciBlYWNoIGl0ZXJhdGlv
biB0aGUgcG9pbnQgaXMgZGVjcmVtZW50ZWQgYnkgb25lLgorICAgICAgICAgICAgICAgIC8vIE5v
dGUgdGhhdCA1XjMgPSAxMjUgPCAxMjggPSAyXjcuCisgICAgICAgICAgICAgICAgLy8gVGhlcmVm
b3JlIHRocmVlIGl0ZXJhdGlvbnMgb2YgdGhpcyBsb29wIHdpbGwgbm90IG92ZXJmbG93IGZyYWN0
aW9uYWxzCisgICAgICAgICAgICAgICAgLy8gKGV2ZW4gd2l0aG91dCB0aGUgc3VidHJhY3Rpb24g
YXQgdGhlIGVuZCBvZiB0aGUgbG9vcCBib2R5KS4gQXQgdGhpcworICAgICAgICAgICAgICAgIC8v
IHRpbWUgcG9pbnQgd2lsbCBzYXRpc2Z5IHBvaW50IDw9IDYxIGFuZCB0aGVyZWZvcmUgZnJhY3Rp
b25hbHMgPCAyXnBvaW50CisgICAgICAgICAgICAgICAgLy8gYW5kIGFueSBmdXJ0aGVyIG11bHRp
cGxpY2F0aW9uIG9mIGZyYWN0aW9uYWxzIGJ5IDUgd2lsbCBub3Qgb3ZlcmZsb3cuCisgICAgICAg
ICAgICAgICAgZnJhY3Rpb25hbHMgKj0gNTsKKyAgICAgICAgICAgICAgICBwb2ludC0tOworICAg
ICAgICAgICAgICAgIGludCBkaWdpdCA9IHN0YXRpY19jYXN0PGludD4oZnJhY3Rpb25hbHMgPj4g
cG9pbnQpOworICAgICAgICAgICAgICAgIGJ1ZmZlclsqbGVuZ3RoXSA9ICcwJyArIGRpZ2l0Owor
ICAgICAgICAgICAgICAgICgqbGVuZ3RoKSsrOworICAgICAgICAgICAgICAgIGZyYWN0aW9uYWxz
IC09IHN0YXRpY19jYXN0PHVpbnQ2NF90PihkaWdpdCkgPDwgcG9pbnQ7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAvLyBJZiB0aGUgZmlyc3QgYml0IGFmdGVyIHRoZSBwb2ludCBpcyBzZXQg
d2UgaGF2ZSB0byByb3VuZCB1cC4KKyAgICAgICAgICAgIGlmICgoKGZyYWN0aW9uYWxzID4+IChw
b2ludCAtIDEpKSAmIDEpID09IDEpIHsKKyAgICAgICAgICAgICAgICBSb3VuZFVwKGJ1ZmZlciwg
bGVuZ3RoLCBkZWNpbWFsX3BvaW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsg
IC8vIFdlIG5lZWQgMTI4IGJpdHMuCisgICAgICAgICAgICBBU1NFUlQoNjQgPCAtZXhwb25lbnQg
JiYgLWV4cG9uZW50IDw9IDEyOCk7CisgICAgICAgICAgICBVSW50MTI4IGZyYWN0aW9uYWxzMTI4
ID0gVUludDEyOChmcmFjdGlvbmFscywgMCk7CisgICAgICAgICAgICBmcmFjdGlvbmFsczEyOC5T
aGlmdCgtZXhwb25lbnQgLSA2NCk7CisgICAgICAgICAgICBpbnQgcG9pbnQgPSAxMjg7CisgICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYWN0aW9uYWxfY291bnQ7ICsraSkgeworICAg
ICAgICAgICAgICAgIGlmIChmcmFjdGlvbmFsczEyOC5Jc1plcm8oKSkgYnJlYWs7CisgICAgICAg
ICAgICAgICAgLy8gQXMgYmVmb3JlOiBpbnN0ZWFkIG9mIG11bHRpcGx5aW5nIGJ5IDEwIHdlIG11
bHRpcGx5IGJ5IDUgYW5kIGFkanVzdCB0aGUKKyAgICAgICAgICAgICAgICAvLyBwb2ludCBsb2Nh
dGlvbi4KKyAgICAgICAgICAgICAgICAvLyBUaGlzIG11bHRpcGxpY2F0aW9uIHdpbGwgbm90IG92
ZXJmbG93IGZvciB0aGUgc2FtZSByZWFzb25zIGFzIGJlZm9yZS4KKyAgICAgICAgICAgICAgICBm
cmFjdGlvbmFsczEyOC5NdWx0aXBseSg1KTsKKyAgICAgICAgICAgICAgICBwb2ludC0tOworICAg
ICAgICAgICAgICAgIGludCBkaWdpdCA9IGZyYWN0aW9uYWxzMTI4LkRpdk1vZFBvd2VyT2YyKHBv
aW50KTsKKyAgICAgICAgICAgICAgICBidWZmZXJbKmxlbmd0aF0gPSAnMCcgKyBkaWdpdDsKKyAg
ICAgICAgICAgICAgICAoKmxlbmd0aCkrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChmcmFjdGlvbmFsczEyOC5CaXRBdChwb2ludCAtIDEpID09IDEpIHsKKyAgICAgICAgICAgICAg
ICBSb3VuZFVwKGJ1ZmZlciwgbGVuZ3RoLCBkZWNpbWFsX3BvaW50KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBSZW1vdmVzIGxlYWRpbmcgYW5k
IHRyYWlsaW5nIHplcm9zLgorICAgIC8vIElmIGxlYWRpbmcgemVyb3MgYXJlIHJlbW92ZWQgdGhl
biB0aGUgZGVjaW1hbCBwb2ludCBwb3NpdGlvbiBpcyBhZGp1c3RlZC4KKyAgICBzdGF0aWMgdm9p
ZCBUcmltWmVyb3MoVmVjdG9yPGNoYXI+IGJ1ZmZlciwgaW50KiBsZW5ndGgsIGludCogZGVjaW1h
bF9wb2ludCkgeworICAgICAgICB3aGlsZSAoKmxlbmd0aCA+IDAgJiYgYnVmZmVyWygqbGVuZ3Ro
KSAtIDFdID09ICcwJykgeworICAgICAgICAgICAgKCpsZW5ndGgpLS07CisgICAgICAgIH0KKyAg
ICAgICAgaW50IGZpcnN0X25vbl96ZXJvID0gMDsKKyAgICAgICAgd2hpbGUgKGZpcnN0X25vbl96
ZXJvIDwgKmxlbmd0aCAmJiBidWZmZXJbZmlyc3Rfbm9uX3plcm9dID09ICcwJykgeworICAgICAg
ICAgICAgZmlyc3Rfbm9uX3plcm8rKzsKKyAgICAgICAgfQorICAgICAgICBpZiAoZmlyc3Rfbm9u
X3plcm8gIT0gMCkgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IGZpcnN0X25vbl96ZXJvOyBp
IDwgKmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgLSBmaXJzdF9ub25f
emVyb10gPSBidWZmZXJbaV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICAqbGVuZ3RoIC09
IGZpcnN0X25vbl96ZXJvOworICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgLT0gZmlyc3Rfbm9u
X3plcm87CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgYm9vbCBGYXN0Rml4ZWRE
dG9hKGRvdWJsZSB2LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJhY3Rpb25hbF9jb3Vu
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgaW50KiBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgIGludCog
ZGVjaW1hbF9wb2ludCkgeworICAgICAgICBjb25zdCB1aW50MzJfdCBrTWF4VUludDMyID0gMHhG
RkZGRkZGRjsKKyAgICAgICAgdWludDY0X3Qgc2lnbmlmaWNhbmQgPSBEb3VibGUodikuU2lnbmlm
aWNhbmQoKTsKKyAgICAgICAgaW50IGV4cG9uZW50ID0gRG91YmxlKHYpLkV4cG9uZW50KCk7Cisg
ICAgICAgIC8vIHYgPSBzaWduaWZpY2FuZCAqIDJeZXhwb25lbnQgKHdpdGggc2lnbmlmaWNhbmQg
YSA1M2JpdCBpbnRlZ2VyKS4KKyAgICAgICAgLy8gSWYgdGhlIGV4cG9uZW50IGlzIGxhcmdlciB0
aGFuIDIwIChpLmUuIHdlIG1heSBoYXZlIGEgNzNiaXQgbnVtYmVyKSB0aGVuIHdlCisgICAgICAg
IC8vIGRvbid0IGtub3cgaG93IHRvIGNvbXB1dGUgdGhlIHJlcHJlc2VudGF0aW9uLiAyXjczIH49
IDkuNSoxMF4yMS4KKyAgICAgICAgLy8gSWYgbmVjZXNzYXJ5IHRoaXMgbGltaXQgY291bGQgcHJv
YmFibHkgYmUgaW5jcmVhc2VkLCBidXQgd2UgZG9uJ3QgbmVlZAorICAgICAgICAvLyBtb3JlLgor
ICAgICAgICBpZiAoZXhwb25lbnQgPiAyMCkgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoZnJh
Y3Rpb25hbF9jb3VudCA+IDIwKSByZXR1cm4gZmFsc2U7CisgICAgICAgICpsZW5ndGggPSAwOwor
ICAgICAgICAvLyBBdCBtb3N0IGtEb3VibGVTaWduaWZpY2FuZFNpemUgYml0cyBvZiB0aGUgc2ln
bmlmaWNhbmQgYXJlIG5vbi16ZXJvLgorICAgICAgICAvLyBHaXZlbiBhIDY0IGJpdCBpbnRlZ2Vy
IHdlIGhhdmUgMTEgMHMgZm9sbG93ZWQgYnkgNTMgcG90ZW50aWFsbHkgbm9uLXplcm8KKyAgICAg
ICAgLy8gYml0czogIDAuLjExKi4uMHh4eC4uNTMqLi54eAorICAgICAgICBpZiAoZXhwb25lbnQg
KyBrRG91YmxlU2lnbmlmaWNhbmRTaXplID4gNjQpIHsKKyAgICAgICAgICAgIC8vIFRoZSBleHBv
bmVudCBtdXN0IGJlID4gMTEuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gV2Uga25v
dyB0aGF0IHYgPSBzaWduaWZpY2FuZCAqIDJeZXhwb25lbnQuCisgICAgICAgICAgICAvLyBBbmQg
dGhlIGV4cG9uZW50ID4gMTEuCisgICAgICAgICAgICAvLyBXZSBzaW1wbGlmeSB0aGUgdGFzayBi
eSBkaXZpZGluZyB2IGJ5IDEwXjE3LgorICAgICAgICAgICAgLy8gVGhlIHF1b3RpZW50IGRlbGl2
ZXJzIHRoZSBmaXJzdCBkaWdpdHMsIGFuZCB0aGUgcmVtYWluZGVyIGZpdHMgaW50byBhIDY0Cisg
ICAgICAgICAgICAvLyBiaXQgbnVtYmVyLgorICAgICAgICAgICAgLy8gRGl2aWRpbmcgYnkgMTBe
MTcgaXMgZXF1aXZhbGVudCB0byBkaXZpZGluZyBieSA1XjE3KjJeMTcuCisgICAgICAgICAgICBj
b25zdCB1aW50NjRfdCBrRml2ZTE3ID0gVUlOVDY0XzJQQVJUX0MoMHhCMSwgQTJCQzJFQzUpOyAg
Ly8gNV4xNworICAgICAgICAgICAgdWludDY0X3QgZGl2aXNvciA9IGtGaXZlMTc7CisgICAgICAg
ICAgICBpbnQgZGl2aXNvcl9wb3dlciA9IDE3OworICAgICAgICAgICAgdWludDY0X3QgZGl2aWRl
bmQgPSBzaWduaWZpY2FuZDsKKyAgICAgICAgICAgIHVpbnQzMl90IHF1b3RpZW50OworICAgICAg
ICAgICAgdWludDY0X3QgcmVtYWluZGVyOworICAgICAgICAgICAgLy8gTGV0IHYgPSBmICogMl5l
IHdpdGggZiA9PSBzaWduaWZpY2FuZCBhbmQgZSA9PSBleHBvbmVudC4KKyAgICAgICAgICAgIC8v
IFRoZW4gbmVlZCBxIChxdW90aWVudCkgYW5kIHIgKHJlbWFpbmRlcikgYXMgZm9sbG93czoKKyAg
ICAgICAgICAgIC8vICAgdiAgICAgICAgICAgID0gcSAqIDEwXjE3ICAgICAgICsgcgorICAgICAg
ICAgICAgLy8gICBmICogMl5lICAgICAgPSBxICogMTBeMTcgICAgICAgKyByCisgICAgICAgICAg
ICAvLyAgIGYgKiAyXmUgICAgICA9IHEgKiA1XjE3ICogMl4xNyArIHIKKyAgICAgICAgICAgIC8v
IElmIGUgPiAxNyB0aGVuCisgICAgICAgICAgICAvLyAgIGYgKiAyXihlLTE3KSA9IHEgKiA1XjE3
ICAgICAgICArIHIvMl4xNworICAgICAgICAgICAgLy8gZWxzZQorICAgICAgICAgICAgLy8gICBm
ICA9IHEgKiA1XjE3ICogMl4oMTctZSkgKyByLzJeZQorICAgICAgICAgICAgaWYgKGV4cG9uZW50
ID4gZGl2aXNvcl9wb3dlcikgeworICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgYWxsb3cgZXhw
b25lbnRzIG9mIHVwIHRvIDIwIGFuZCB0aGVyZWZvcmUgKDE3IC0gZSkgPD0gMworICAgICAgICAg
ICAgICAgIGRpdmlkZW5kIDw8PSBleHBvbmVudCAtIGRpdmlzb3JfcG93ZXI7CisgICAgICAgICAg
ICAgICAgcXVvdGllbnQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZGl2aWRlbmQgLyBkaXZpc29y
KTsKKyAgICAgICAgICAgICAgICByZW1haW5kZXIgPSAoZGl2aWRlbmQgJSBkaXZpc29yKSA8PCBk
aXZpc29yX3Bvd2VyOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkaXZp
c29yIDw8PSBkaXZpc29yX3Bvd2VyIC0gZXhwb25lbnQ7CisgICAgICAgICAgICAgICAgcXVvdGll
bnQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZGl2aWRlbmQgLyBkaXZpc29yKTsKKyAgICAgICAg
ICAgICAgICByZW1haW5kZXIgPSAoZGl2aWRlbmQgJSBkaXZpc29yKSA8PCBleHBvbmVudDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIEZpbGxEaWdpdHMzMihxdW90aWVudCwgYnVmZmVyLCBs
ZW5ndGgpOworICAgICAgICAgICAgRmlsbERpZ2l0czY0Rml4ZWRMZW5ndGgocmVtYWluZGVyLCBk
aXZpc29yX3Bvd2VyLCBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgICAgICAqZGVjaW1hbF9wb2lu
dCA9ICpsZW5ndGg7CisgICAgICAgIH0gZWxzZSBpZiAoZXhwb25lbnQgPj0gMCkgeworICAgICAg
ICAgICAgLy8gMCA8PSBleHBvbmVudCA8PSAxMQorICAgICAgICAgICAgc2lnbmlmaWNhbmQgPDw9
IGV4cG9uZW50OworICAgICAgICAgICAgRmlsbERpZ2l0czY0KHNpZ25pZmljYW5kLCBidWZmZXIs
IGxlbmd0aCk7CisgICAgICAgICAgICAqZGVjaW1hbF9wb2ludCA9ICpsZW5ndGg7CisgICAgICAg
IH0gZWxzZSBpZiAoZXhwb25lbnQgPiAta0RvdWJsZVNpZ25pZmljYW5kU2l6ZSkgeworICAgICAg
ICAgICAgLy8gV2UgaGF2ZSB0byBjdXQgdGhlIG51bWJlci4KKyAgICAgICAgICAgIHVpbnQ2NF90
IGludGVncmFscyA9IHNpZ25pZmljYW5kID4+IC1leHBvbmVudDsKKyAgICAgICAgICAgIHVpbnQ2
NF90IGZyYWN0aW9uYWxzID0gc2lnbmlmaWNhbmQgLSAoaW50ZWdyYWxzIDw8IC1leHBvbmVudCk7
CisgICAgICAgICAgICBpZiAoaW50ZWdyYWxzID4ga01heFVJbnQzMikgeworICAgICAgICAgICAg
ICAgIEZpbGxEaWdpdHM2NChpbnRlZ3JhbHMsIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgRmlsbERpZ2l0czMyKHN0YXRpY19jYXN0PHVpbnQz
Ml90PihpbnRlZ3JhbHMpLCBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAqZGVjaW1hbF9wb2ludCA9ICpsZW5ndGg7CisgICAgICAgICAgICBGaWxsRnJhY3Rpb25h
bHMoZnJhY3Rpb25hbHMsIGV4cG9uZW50LCBmcmFjdGlvbmFsX2NvdW50LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJ1ZmZlciwgbGVuZ3RoLCBkZWNpbWFsX3BvaW50KTsKKyAgICAgICAg
fSBlbHNlIGlmIChleHBvbmVudCA8IC0xMjgpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgY29uZmln
dXJhdGlvbiAod2l0aCBhdCBtb3N0IDIwIGRpZ2l0cykgbWVhbnMgdGhhdCBhbGwgZGlnaXRzIG11
c3QgYmUKKyAgICAgICAgICAgIC8vIDAuCisgICAgICAgICAgICBBU1NFUlQoZnJhY3Rpb25hbF9j
b3VudCA8PSAyMCk7CisgICAgICAgICAgICBidWZmZXJbMF0gPSAnXDAnOworICAgICAgICAgICAg
Kmxlbmd0aCA9IDA7CisgICAgICAgICAgICAqZGVjaW1hbF9wb2ludCA9IC1mcmFjdGlvbmFsX2Nv
dW50OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSAwOwor
ICAgICAgICAgICAgRmlsbEZyYWN0aW9uYWxzKHNpZ25pZmljYW5kLCBleHBvbmVudCwgZnJhY3Rp
b25hbF9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGxlbmd0aCwg
ZGVjaW1hbF9wb2ludCk7CisgICAgICAgIH0KKyAgICAgICAgVHJpbVplcm9zKGJ1ZmZlciwgbGVu
Z3RoLCBkZWNpbWFsX3BvaW50KTsKKyAgICAgICAgYnVmZmVyWypsZW5ndGhdID0gJ1wwJzsKKyAg
ICAgICAgaWYgKCgqbGVuZ3RoKSA9PSAwKSB7CisgICAgICAgICAgICAvLyBUaGUgc3RyaW5nIGlz
IGVtcHR5IGFuZCB0aGUgZGVjaW1hbF9wb2ludCB0aHVzIGhhcyBubyBpbXBvcnRhbmNlLiBNaW1p
Y2sKKyAgICAgICAgICAgIC8vIEdheSdzIGR0b2EgYW5kIGFuZCBzZXQgaXQgdG8gLWZyYWN0aW9u
YWxfY291bnQuCisgICAgICAgICAgICAqZGVjaW1hbF9wb2ludCA9IC1mcmFjdGlvbmFsX2NvdW50
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKK30gIC8vIG5h
bWVzcGFjZSBkb3VibGVfY29udmVyc2lvbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9kdG9hL2ZpeGVkLWR0b2EuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRv
YS9maXhlZC1kdG9hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmQ4MmFlM2YzMDUyYTRlNjRmM2U1ZGViOThlNzkz
MDAxZGUzMDJlMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
ZHRvYS9maXhlZC1kdG9hLmgKQEAgLTAsMCArMSw1NiBAQAorLy8gQ29weXJpZ2h0IDIwMTAgdGhl
IFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
Ly8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
Ky8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8v
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCisjaWZuZGVmIERPVUJMRV9DT05WRVJTSU9OX0ZJWEVEX0RUT0FfSF8KKyNkZWZpbmUg
RE9VQkxFX0NPTlZFUlNJT05fRklYRURfRFRPQV9IXworCisjaW5jbHVkZSAidXRpbHMuaCIKKwor
bmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKKyAgICAKKyAgICAvLyBQcm9kdWNlcyBkaWdp
dHMgbmVjZXNzYXJ5IHRvIHByaW50IGEgZ2l2ZW4gbnVtYmVyIHdpdGgKKyAgICAvLyAnZnJhY3Rp
b25hbF9jb3VudCcgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50LgorICAgIC8vIFRoZSBi
dWZmZXIgbXVzdCBiZSBiaWcgZW5vdWdoIHRvIGhvbGQgdGhlIHJlc3VsdCBwbHVzIG9uZSB0ZXJt
aW5hdGluZyBudWxsCisgICAgLy8gY2hhcmFjdGVyLgorICAgIC8vCisgICAgLy8gVGhlIHByb2R1
Y2VkIGRpZ2l0cyBtaWdodCBiZSB0b28gc2hvcnQgaW4gd2hpY2ggY2FzZSB0aGUgY2FsbGVyIGhh
cyB0byBmaWxsCisgICAgLy8gdGhlIGdhcHMgd2l0aCAnMCdzLgorICAgIC8vIEV4YW1wbGU6IEZh
c3RGaXhlZER0b2EoMC4wMDEsIDUsIC4uLikgaXMgYWxsb3dlZCB0byByZXR1cm4gYnVmZmVyID0g
IjEiLCBhbmQKKyAgICAvLyBkZWNpbWFsX3BvaW50ID0gLTIuCisgICAgLy8gSGFsZndheSBjYXNl
cyBhcmUgcm91bmRlZCB0b3dhcmRzICsvLUluZmluaXR5IChhd2F5IGZyb20gMCkuIFRoZSBjYWxs
CisgICAgLy8gRmFzdEZpeGVkRHRvYSgwLjE1LCAyLCAuLi4pIHRodXMgcmV0dXJucyBidWZmZXIg
PSAiMiIsIGRlY2ltYWxfcG9pbnQgPSAwLgorICAgIC8vIFRoZSByZXR1cm5lZCBidWZmZXIgbWF5
IGNvbnRhaW4gZGlnaXRzIHRoYXQgd291bGQgYmUgdHJ1bmNhdGVkIGZyb20gdGhlCisgICAgLy8g
c2hvcnRlc3QgcmVwcmVzZW50YXRpb24gb2YgdGhlIGlucHV0LgorICAgIC8vCisgICAgLy8gVGhp
cyBtZXRob2Qgb25seSB3b3JrcyBmb3Igc29tZSBwYXJhbWV0ZXJzLiBJZiBpdCBjYW4ndCBoYW5k
bGUgdGhlIGlucHV0IGl0CisgICAgLy8gcmV0dXJucyBmYWxzZS4gVGhlIG91dHB1dCBpcyBudWxs
LXRlcm1pbmF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gc3VjY2VlZHMuCisgICAgYm9vbCBGYXN0Rml4
ZWREdG9hKGRvdWJsZSB2LCBpbnQgZnJhY3Rpb25hbF9jb3VudCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwgaW50KiBsZW5ndGgsIGludCogZGVjaW1hbF9wb2lu
dCk7CisgICAgCit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KKworI2VuZGlmICAv
LyBET1VCTEVfQ09OVkVSU0lPTl9GSVhFRF9EVE9BX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL2R0b2Evc3RydG9kLmNjIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9kdG9hL3N0cnRvZC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNGZlMTExYTBhMTU4ZmQwMGMyMzAxZWE3Yjc4
YzkxMDU1NzcyZWExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9kdG9hL3N0cnRvZC5jYwpAQCAtMCwwICsxLDQ0MSBAQAorLy8gQ29weXJpZ2h0IDIwMTAgdGhl
IFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
Ly8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
Ky8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8v
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNpbmNs
dWRlICJzdHJ0b2QuaCIKKyNpbmNsdWRlICJiaWdudW0uaCIKKyNpbmNsdWRlICJjYWNoZWQtcG93
ZXJzLmgiCisjaW5jbHVkZSAiZG91YmxlLmgiCisKK25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lv
biB7CisgICAgCisgICAgLy8gMl41MyA9IDkwMDcxOTkyNTQ3NDA5OTIuCisgICAgLy8gQW55IGlu
dGVnZXIgd2l0aCBhdCBtb3N0IDE1IGRlY2ltYWwgZGlnaXRzIHdpbGwgaGVuY2UgZml0IGludG8g
YSBkb3VibGUKKyAgICAvLyAod2hpY2ggaGFzIGEgNTNiaXQgc2lnbmlmaWNhbmQpIHdpdGhvdXQg
bG9zcyBvZiBwcmVjaXNpb24uCisgICAgc3RhdGljIGNvbnN0IGludCBrTWF4RXhhY3REb3VibGVJ
bnRlZ2VyRGVjaW1hbERpZ2l0cyA9IDE1OworICAgIC8vIDJeNjQgPSAxODQ0Njc0NDA3MzcwOTU1
MTYxNiA+IDEwXjE5CisgICAgc3RhdGljIGNvbnN0IGludCBrTWF4VWludDY0RGVjaW1hbERpZ2l0
cyA9IDE5OworICAgIAorICAgIC8vIE1heCBkb3VibGU6IDEuNzk3NjkzMTM0ODYyMzE1NyB4IDEw
XjMwOAorICAgIC8vIE1pbiBub24temVybyBkb3VibGU6IDQuOTQwNjU2NDU4NDEyNDY1NCB4IDEw
Xi0zMjQKKyAgICAvLyBBbnkgeCA+PSAxMF4zMDkgaXMgaW50ZXJwcmV0ZWQgYXMgK2luZmluaXR5
LgorICAgIC8vIEFueSB4IDw9IDEwXi0zMjQgaXMgaW50ZXJwcmV0ZWQgYXMgMC4KKyAgICAvLyBO
b3RlIHRoYXQgMi41ZS0zMjQgKGRlc3BpdGUgYmVpbmcgc21hbGxlciB0aGFuIHRoZSBtaW4gZG91
YmxlKSB3aWxsIGJlIHJlYWQKKyAgICAvLyBhcyBub24temVybyAoZXF1YWwgdG8gdGhlIG1pbiBu
b24temVybyBkb3VibGUpLgorICAgIHN0YXRpYyBjb25zdCBpbnQga01heERlY2ltYWxQb3dlciA9
IDMwOTsKKyAgICBzdGF0aWMgY29uc3QgaW50IGtNaW5EZWNpbWFsUG93ZXIgPSAtMzI0OworICAg
IAorICAgIC8vIDJeNjQgPSAxODQ0Njc0NDA3MzcwOTU1MTYxNgorICAgIHN0YXRpYyBjb25zdCB1
aW50NjRfdCBrTWF4VWludDY0ID0gVUlOVDY0XzJQQVJUX0MoMHhGRkZGRkZGRiwgRkZGRkZGRkYp
OworICAgIAorICAgIAorICAgIHN0YXRpYyBjb25zdCBkb3VibGUgZXhhY3RfcG93ZXJzX29mX3Rl
bltdID0geworICAgICAgICAxLjAsICAvLyAxMF4wCisgICAgICAgIDEwLjAsCisgICAgICAgIDEw
MC4wLAorICAgICAgICAxMDAwLjAsCisgICAgICAgIDEwMDAwLjAsCisgICAgICAgIDEwMDAwMC4w
LAorICAgICAgICAxMDAwMDAwLjAsCisgICAgICAgIDEwMDAwMDAwLjAsCisgICAgICAgIDEwMDAw
MDAwMC4wLAorICAgICAgICAxMDAwMDAwMDAwLjAsCisgICAgICAgIDEwMDAwMDAwMDAwLjAsICAv
LyAxMF4xMAorICAgICAgICAxMDAwMDAwMDAwMDAuMCwKKyAgICAgICAgMTAwMDAwMDAwMDAwMC4w
LAorICAgICAgICAxMDAwMDAwMDAwMDAwMC4wLAorICAgICAgICAxMDAwMDAwMDAwMDAwMDAuMCwK
KyAgICAgICAgMTAwMDAwMDAwMDAwMDAwMC4wLAorICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMC4w
LAorICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAuMCwKKyAgICAgICAgMTAwMDAwMDAwMDAwMDAw
MDAwMC4wLAorICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMC4wLAorICAgICAgICAxMDAwMDAw
MDAwMDAwMDAwMDAwMDAuMCwgIC8vIDEwXjIwCisgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuMCwKKyAgICAgICAgLy8gMTBeMjIgPSAweDIxZTE5ZTBjOWJhYjI0MDAwMDAgPSAweDg3ODY3
ODMyNmVhYzkgKiAyXjIyCisgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLjAKKyAgICB9
OworICAgIHN0YXRpYyBjb25zdCBpbnQga0V4YWN0UG93ZXJzT2ZUZW5TaXplID0gQVJSQVlfU0la
RShleGFjdF9wb3dlcnNfb2ZfdGVuKTsKKyAgICAKKyAgICAvLyBNYXhpbXVtIG51bWJlciBvZiBz
aWduaWZpY2FudCBkaWdpdHMgaW4gdGhlIGRlY2ltYWwgcmVwcmVzZW50YXRpb24uCisgICAgLy8g
SW4gZmFjdCB0aGUgdmFsdWUgaXMgNzcyIChzZWUgY29udmVyc2lvbnMuY2MpLCBidXQgdG8gZ2l2
ZSB1cyBzb21lIG1hcmdpbgorICAgIC8vIHdlIHJvdW5kIHVwIHRvIDc4MC4KKyAgICBzdGF0aWMg
Y29uc3QgaW50IGtNYXhTaWduaWZpY2FudERlY2ltYWxEaWdpdHMgPSA3ODA7CisgICAgCisgICAg
c3RhdGljIFZlY3Rvcjxjb25zdCBjaGFyPiBUcmltTGVhZGluZ1plcm9zKFZlY3Rvcjxjb25zdCBj
aGFyPiBidWZmZXIpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBidWZmZXIubGVuZ3Ro
KCk7IGkrKykgeworICAgICAgICAgICAgaWYgKGJ1ZmZlcltpXSAhPSAnMCcpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gYnVmZmVyLlN1YlZlY3RvcihpLCBidWZmZXIubGVuZ3RoKCkpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBWZWN0b3I8Y29uc3QgY2hhcj4o
YnVmZmVyLnN0YXJ0KCksIDApOworICAgIH0KKyAgICAKKyAgICAKKyAgICBzdGF0aWMgVmVjdG9y
PGNvbnN0IGNoYXI+IFRyaW1UcmFpbGluZ1plcm9zKFZlY3Rvcjxjb25zdCBjaGFyPiBidWZmZXIp
IHsKKyAgICAgICAgZm9yIChpbnQgaSA9IGJ1ZmZlci5sZW5ndGgoKSAtIDE7IGkgPj0gMDsgLS1p
KSB7CisgICAgICAgICAgICBpZiAoYnVmZmVyW2ldICE9ICcwJykgeworICAgICAgICAgICAgICAg
IHJldHVybiBidWZmZXIuU3ViVmVjdG9yKDAsIGkgKyAxKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gVmVjdG9yPGNvbnN0IGNoYXI+KGJ1ZmZlci5zdGFydCgpLCAw
KTsKKyAgICB9CisgICAgCisgICAgCisgICAgc3RhdGljIHZvaWQgVHJpbVRvTWF4U2lnbmlmaWNh
bnREaWdpdHMoVmVjdG9yPGNvbnN0IGNoYXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogc2lnbmlmaWNhbnRfYnVmZmVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogc2lnbmlmaWNhbnRfZXhw
b25lbnQpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrTWF4U2lnbmlmaWNhbnREZWNp
bWFsRGlnaXRzIC0gMTsgKytpKSB7CisgICAgICAgICAgICBzaWduaWZpY2FudF9idWZmZXJbaV0g
PSBidWZmZXJbaV07CisgICAgICAgIH0KKyAgICAgICAgLy8gVGhlIGlucHV0IGJ1ZmZlciBoYXMg
YmVlbiB0cmltbWVkLiBUaGVyZWZvcmUgdGhlIGxhc3QgZGlnaXQgbXVzdCBiZQorICAgICAgICAv
LyBkaWZmZXJlbnQgZnJvbSAnMCcuCisgICAgICAgIEFTU0VSVChidWZmZXJbYnVmZmVyLmxlbmd0
aCgpIC0gMV0gIT0gJzAnKTsKKyAgICAgICAgLy8gU2V0IHRoZSBsYXN0IGRpZ2l0IHRvIGJlIG5v
bi16ZXJvLiBUaGlzIGlzIHN1ZmZpY2llbnQgdG8gZ3VhcmFudGVlCisgICAgICAgIC8vIGNvcnJl
Y3Qgcm91bmRpbmcuCisgICAgICAgIHNpZ25pZmljYW50X2J1ZmZlcltrTWF4U2lnbmlmaWNhbnRE
ZWNpbWFsRGlnaXRzIC0gMV0gPSAnMSc7CisgICAgICAgICpzaWduaWZpY2FudF9leHBvbmVudCA9
CisgICAgICAgIGV4cG9uZW50ICsgKGJ1ZmZlci5sZW5ndGgoKSAtIGtNYXhTaWduaWZpY2FudERl
Y2ltYWxEaWdpdHMpOworICAgIH0KKyAgICAKKyAgICAvLyBSZWFkcyBkaWdpdHMgZnJvbSB0aGUg
YnVmZmVyIGFuZCBjb252ZXJ0cyB0aGVtIHRvIGEgdWludDY0LgorICAgIC8vIFJlYWRzIGluIGFz
IG1hbnkgZGlnaXRzIGFzIGZpdCBpbnRvIGEgdWludDY0LgorICAgIC8vIFdoZW4gdGhlIHN0cmlu
ZyBzdGFydHMgd2l0aCAiMTg0NDY3NDQwNzM3MDk1NTE2MSIgbm8gZnVydGhlciBkaWdpdCBpcyBy
ZWFkLgorICAgIC8vIFNpbmNlIDJeNjQgPSAxODQ0Njc0NDA3MzcwOTU1MTYxNiBpdCB3b3VsZCBz
dGlsbCBiZSBwb3NzaWJsZSByZWFkIGFub3RoZXIKKyAgICAvLyBkaWdpdCBpZiBpdCB3YXMgbGVz
cyBvciBlcXVhbCB0aGFuIDYsIGJ1dCB0aGlzIHdvdWxkIGNvbXBsaWNhdGUgdGhlIGNvZGUuCisg
ICAgc3RhdGljIHVpbnQ2NF90IFJlYWRVaW50NjQoVmVjdG9yPGNvbnN0IGNoYXI+IGJ1ZmZlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIG51bWJlcl9vZl9yZWFkX2RpZ2l0
cykgeworICAgICAgICB1aW50NjRfdCByZXN1bHQgPSAwOworICAgICAgICBpbnQgaSA9IDA7Cisg
ICAgICAgIHdoaWxlIChpIDwgYnVmZmVyLmxlbmd0aCgpICYmIHJlc3VsdCA8PSAoa01heFVpbnQ2
NCAvIDEwIC0gMSkpIHsKKyAgICAgICAgICAgIGludCBkaWdpdCA9IGJ1ZmZlcltpKytdIC0gJzAn
OworICAgICAgICAgICAgQVNTRVJUKDAgPD0gZGlnaXQgJiYgZGlnaXQgPD0gOSk7CisgICAgICAg
ICAgICByZXN1bHQgPSAxMCAqIHJlc3VsdCArIGRpZ2l0OworICAgICAgICB9CisgICAgICAgICpu
dW1iZXJfb2ZfcmVhZF9kaWdpdHMgPSBpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KyAgICAKKyAgICAKKyAgICAvLyBSZWFkcyBhIERpeUZwIGZyb20gdGhlIGJ1ZmZlci4KKyAgICAv
LyBUaGUgcmV0dXJuZWQgRGl5RnAgaXMgbm90IG5lY2Vzc2FyaWx5IG5vcm1hbGl6ZWQuCisgICAg
Ly8gSWYgcmVtYWluaW5nX2RlY2ltYWxzIGlzIHplcm8gdGhlbiB0aGUgcmV0dXJuZWQgRGl5RnAg
aXMgYWNjdXJhdGUuCisgICAgLy8gT3RoZXJ3aXNlIGl0IGhhcyBiZWVuIHJvdW5kZWQgYW5kIGhh
cyBlcnJvciBvZiBhdCBtb3N0IDEvMiB1bHAuCisgICAgc3RhdGljIHZvaWQgUmVhZERpeUZwKFZl
Y3Rvcjxjb25zdCBjaGFyPiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIERpeUZw
KiByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogcmVtYWluaW5nX2RlY2lt
YWxzKSB7CisgICAgICAgIGludCByZWFkX2RpZ2l0czsKKyAgICAgICAgdWludDY0X3Qgc2lnbmlm
aWNhbmQgPSBSZWFkVWludDY0KGJ1ZmZlciwgJnJlYWRfZGlnaXRzKTsKKyAgICAgICAgaWYgKGJ1
ZmZlci5sZW5ndGgoKSA9PSByZWFkX2RpZ2l0cykgeworICAgICAgICAgICAgKnJlc3VsdCA9IERp
eUZwKHNpZ25pZmljYW5kLCAwKTsKKyAgICAgICAgICAgICpyZW1haW5pbmdfZGVjaW1hbHMgPSAw
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gUm91bmQgdGhlIHNpZ25pZmljYW5k
LgorICAgICAgICAgICAgaWYgKGJ1ZmZlcltyZWFkX2RpZ2l0c10gPj0gJzUnKSB7CisgICAgICAg
ICAgICAgICAgc2lnbmlmaWNhbmQrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIENv
bXB1dGUgdGhlIGJpbmFyeSBleHBvbmVudC4KKyAgICAgICAgICAgIGludCBleHBvbmVudCA9IDA7
CisgICAgICAgICAgICAqcmVzdWx0ID0gRGl5RnAoc2lnbmlmaWNhbmQsIGV4cG9uZW50KTsKKyAg
ICAgICAgICAgICpyZW1haW5pbmdfZGVjaW1hbHMgPSBidWZmZXIubGVuZ3RoKCkgLSByZWFkX2Rp
Z2l0czsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICBzdGF0aWMgYm9vbCBEb3Vi
bGVTdHJ0b2QoVmVjdG9yPGNvbnN0IGNoYXI+IHRyaW1tZWQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBleHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91
YmxlKiByZXN1bHQpIHsKKyNpZiAhZGVmaW5lZChET1VCTEVfQ09OVkVSU0lPTl9DT1JSRUNUX0RP
VUJMRV9PUEVSQVRJT05TKQorICAgICAgICAvLyBPbiB4ODYgdGhlIGZsb2F0aW5nLXBvaW50IHN0
YWNrIGNhbiBiZSA2NCBvciA4MCBiaXRzIHdpZGUuIElmIGl0IGlzCisgICAgICAgIC8vIDgwIGJp
dHMgd2lkZSAoYXMgaXMgdGhlIGNhc2Ugb24gTGludXgpIHRoZW4gZG91YmxlLXJvdW5kaW5nIG9j
Y3VycyBhbmQgdGhlCisgICAgICAgIC8vIHJlc3VsdCBpcyBub3QgYWNjdXJhdGUuCisgICAgICAg
IC8vIFdlIGtub3cgdGhhdCBXaW5kb3dzMzIgdXNlcyA2NCBiaXRzIGFuZCBpcyB0aGVyZWZvcmUg
YWNjdXJhdGUuCisgICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgQVJNIHNpbXVsYXRvciBpcyBjb21w
aWxlZCBmb3IgMzJiaXRzLiBJdCB0aGVyZWZvcmUgZXhoaWJpdHMKKyAgICAgICAgLy8gdGhlIHNh
bWUgcHJvYmxlbS4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisgICAgICAgIGlmICh0
cmltbWVkLmxlbmd0aCgpIDw9IGtNYXhFeGFjdERvdWJsZUludGVnZXJEZWNpbWFsRGlnaXRzKSB7
CisgICAgICAgICAgICBpbnQgcmVhZF9kaWdpdHM7CisgICAgICAgICAgICAvLyBUaGUgdHJpbW1l
ZCBpbnB1dCBmaXRzIGludG8gYSBkb3VibGUuCisgICAgICAgICAgICAvLyBJZiB0aGUgMTBeZXhw
b25lbnQgKHJlc3AuIDEwXi1leHBvbmVudCkgZml0cyBpbnRvIGEgZG91YmxlIHRvbyB0aGVuIHdl
CisgICAgICAgICAgICAvLyBjYW4gY29tcHV0ZSB0aGUgcmVzdWx0LWRvdWJsZSBzaW1wbHkgYnkg
bXVsdGlwbHlpbmcgKHJlc3AuIGRpdmlkaW5nKSB0aGUKKyAgICAgICAgICAgIC8vIHR3byBudW1i
ZXJzLgorICAgICAgICAgICAgLy8gVGhpcyBpcyBwb3NzaWJsZSBiZWNhdXNlIElFRUUgZ3VhcmFu
dGVlcyB0aGF0IGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMKKyAgICAgICAgICAgIC8vIHJldHVy
biB0aGUgYmVzdCBwb3NzaWJsZSBhcHByb3hpbWF0aW9uLgorICAgICAgICAgICAgaWYgKGV4cG9u
ZW50IDwgMCAmJiAtZXhwb25lbnQgPCBrRXhhY3RQb3dlcnNPZlRlblNpemUpIHsKKyAgICAgICAg
ICAgICAgICAvLyAxMF4tZXhwb25lbnQgZml0cyBpbnRvIGEgZG91YmxlLgorICAgICAgICAgICAg
ICAgICpyZXN1bHQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KFJlYWRVaW50NjQodHJpbW1lZCwgJnJl
YWRfZGlnaXRzKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHJlYWRfZGlnaXRzID09IHRyaW1t
ZWQubGVuZ3RoKCkpOworICAgICAgICAgICAgICAgICpyZXN1bHQgLz0gZXhhY3RfcG93ZXJzX29m
X3RlblstZXhwb25lbnRdOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKDAgPD0gZXhwb25lbnQgJiYgZXhwb25lbnQgPCBrRXhhY3RQ
b3dlcnNPZlRlblNpemUpIHsKKyAgICAgICAgICAgICAgICAvLyAxMF5leHBvbmVudCBmaXRzIGlu
dG8gYSBkb3VibGUuCisgICAgICAgICAgICAgICAgKnJlc3VsdCA9IHN0YXRpY19jYXN0PGRvdWJs
ZT4oUmVhZFVpbnQ2NCh0cmltbWVkLCAmcmVhZF9kaWdpdHMpKTsKKyAgICAgICAgICAgICAgICBB
U1NFUlQocmVhZF9kaWdpdHMgPT0gdHJpbW1lZC5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAg
KnJlc3VsdCAqPSBleGFjdF9wb3dlcnNfb2ZfdGVuW2V4cG9uZW50XTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCByZW1haW5pbmdf
ZGlnaXRzID0KKyAgICAgICAgICAgIGtNYXhFeGFjdERvdWJsZUludGVnZXJEZWNpbWFsRGlnaXRz
IC0gdHJpbW1lZC5sZW5ndGgoKTsKKyAgICAgICAgICAgIGlmICgoMCA8PSBleHBvbmVudCkgJiYK
KyAgICAgICAgICAgICAgICAoZXhwb25lbnQgLSByZW1haW5pbmdfZGlnaXRzIDwga0V4YWN0UG93
ZXJzT2ZUZW5TaXplKSkgeworICAgICAgICAgICAgICAgIC8vIFRoZSB0cmltbWVkIHN0cmluZyB3
YXMgc2hvcnQgYW5kIHdlIGNhbiBtdWx0aXBseSBpdCB3aXRoCisgICAgICAgICAgICAgICAgLy8g
MTBecmVtYWluaW5nX2RpZ2l0cy4gQXMgYSByZXN1bHQgdGhlIHJlbWFpbmluZyBleHBvbmVudCBu
b3cgZml0cworICAgICAgICAgICAgICAgIC8vIGludG8gYSBkb3VibGUgdG9vLgorICAgICAgICAg
ICAgICAgICpyZXN1bHQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KFJlYWRVaW50NjQodHJpbW1lZCwg
JnJlYWRfZGlnaXRzKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHJlYWRfZGlnaXRzID09IHRy
aW1tZWQubGVuZ3RoKCkpOworICAgICAgICAgICAgICAgICpyZXN1bHQgKj0gZXhhY3RfcG93ZXJz
X29mX3RlbltyZW1haW5pbmdfZGlnaXRzXTsKKyAgICAgICAgICAgICAgICAqcmVzdWx0ICo9IGV4
YWN0X3Bvd2Vyc19vZl90ZW5bZXhwb25lbnQgLSByZW1haW5pbmdfZGlnaXRzXTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIAorICAgIC8vIFJldHVybnMgMTBeZXhwb25l
bnQgYXMgYW4gZXhhY3QgRGl5RnAuCisgICAgLy8gVGhlIGdpdmVuIGV4cG9uZW50IG11c3QgYmUg
aW4gdGhlIHJhbmdlIFsxOyBrRGVjaW1hbEV4cG9uZW50RGlzdGFuY2VbLgorICAgIHN0YXRpYyBE
aXlGcCBBZGp1c3RtZW50UG93ZXJPZlRlbihpbnQgZXhwb25lbnQpIHsKKyAgICAgICAgQVNTRVJU
KDAgPCBleHBvbmVudCk7CisgICAgICAgIEFTU0VSVChleHBvbmVudCA8IFBvd2Vyc09mVGVuQ2Fj
aGU6OmtEZWNpbWFsRXhwb25lbnREaXN0YW5jZSk7CisgICAgICAgIC8vIFNpbXBseSBoYXJkY29k
ZSB0aGUgcmVtYWluaW5nIHBvd2VycyBmb3IgdGhlIGdpdmVuIGRlY2ltYWwgZXhwb25lbnQKKyAg
ICAgICAgLy8gZGlzdGFuY2UuCisgICAgICAgIEFTU0VSVChQb3dlcnNPZlRlbkNhY2hlOjprRGVj
aW1hbEV4cG9uZW50RGlzdGFuY2UgPT0gOCk7CisgICAgICAgIHN3aXRjaCAoZXhwb25lbnQpIHsK
KyAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIERpeUZwKFVJTlQ2NF8yUEFSVF9DKDB4YTAwMDAw
MDAsIDAwMDAwMDAwKSwgLTYwKTsKKyAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIERpeUZwKFVJ
TlQ2NF8yUEFSVF9DKDB4YzgwMDAwMDAsIDAwMDAwMDAwKSwgLTU3KTsKKyAgICAgICAgICAgIGNh
c2UgMzogcmV0dXJuIERpeUZwKFVJTlQ2NF8yUEFSVF9DKDB4ZmEwMDAwMDAsIDAwMDAwMDAwKSwg
LTU0KTsKKyAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIERpeUZwKFVJTlQ2NF8yUEFSVF9DKDB4
OWM0MDAwMDAsIDAwMDAwMDAwKSwgLTUwKTsKKyAgICAgICAgICAgIGNhc2UgNTogcmV0dXJuIERp
eUZwKFVJTlQ2NF8yUEFSVF9DKDB4YzM1MDAwMDAsIDAwMDAwMDAwKSwgLTQ3KTsKKyAgICAgICAg
ICAgIGNhc2UgNjogcmV0dXJuIERpeUZwKFVJTlQ2NF8yUEFSVF9DKDB4ZjQyNDAwMDAsIDAwMDAw
MDAwKSwgLTQ0KTsKKyAgICAgICAgICAgIGNhc2UgNzogcmV0dXJuIERpeUZwKFVJTlQ2NF8yUEFS
VF9DKDB4OTg5NjgwMDAsIDAwMDAwMDAwKSwgLTQwKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gRGl5
RnAoMCwgMCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgLy8gSWYgdGhlIGZ1
bmN0aW9uIHJldHVybnMgdHJ1ZSB0aGVuIHRoZSByZXN1bHQgaXMgdGhlIGNvcnJlY3QgZG91Ymxl
LgorICAgIC8vIE90aGVyd2lzZSBpdCBpcyBlaXRoZXIgdGhlIGNvcnJlY3QgZG91YmxlIG9yIHRo
ZSBkb3VibGUgdGhhdCBpcyBqdXN0IGJlbG93CisgICAgLy8gdGhlIGNvcnJlY3QgZG91YmxlLgor
ICAgIHN0YXRpYyBib29sIERpeUZwU3RydG9kKFZlY3Rvcjxjb25zdCBjaGFyPiBidWZmZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV4cG9uZW50LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRvdWJsZSogcmVzdWx0KSB7CisgICAgICAgIERpeUZwIGlucHV0OworICAg
ICAgICBpbnQgcmVtYWluaW5nX2RlY2ltYWxzOworICAgICAgICBSZWFkRGl5RnAoYnVmZmVyLCAm
aW5wdXQsICZyZW1haW5pbmdfZGVjaW1hbHMpOworICAgICAgICAvLyBTaW5jZSB3ZSBtYXkgaGF2
ZSBkcm9wcGVkIHNvbWUgZGlnaXRzIHRoZSBpbnB1dCBpcyBub3QgYWNjdXJhdGUuCisgICAgICAg
IC8vIElmIHJlbWFpbmluZ19kZWNpbWFscyBpcyBkaWZmZXJlbnQgdGhhbiAwIHRoYW4gdGhlIGVy
cm9yIGlzIGF0IG1vc3QKKyAgICAgICAgLy8gLjUgdWxwICh1bml0IGluIHRoZSBsYXN0IHBsYWNl
KS4KKyAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBkZWFsIHdpdGggZnJhY3Rpb25zIGFuZCB0
aGVyZWZvcmUga2VlcCBhIGNvbW1vbgorICAgICAgICAvLyBkZW5vbWluYXRvci4KKyAgICAgICAg
Y29uc3QgaW50IGtEZW5vbWluYXRvckxvZyA9IDM7CisgICAgICAgIGNvbnN0IGludCBrRGVub21p
bmF0b3IgPSAxIDw8IGtEZW5vbWluYXRvckxvZzsKKyAgICAgICAgLy8gTW92ZSB0aGUgcmVtYWlu
aW5nIGRlY2ltYWxzIGludG8gdGhlIGV4cG9uZW50LgorICAgICAgICBleHBvbmVudCArPSByZW1h
aW5pbmdfZGVjaW1hbHM7CisgICAgICAgIGludCBlcnJvciA9IChyZW1haW5pbmdfZGVjaW1hbHMg
PT0gMCA/IDAgOiBrRGVub21pbmF0b3IgLyAyKTsKKyAgICAgICAgCisgICAgICAgIGludCBvbGRf
ZSA9IGlucHV0LmUoKTsKKyAgICAgICAgaW5wdXQuTm9ybWFsaXplKCk7CisgICAgICAgIGVycm9y
IDw8PSBvbGRfZSAtIGlucHV0LmUoKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChleHBvbmVu
dCA8PSBQb3dlcnNPZlRlbkNhY2hlOjprTWF4RGVjaW1hbEV4cG9uZW50KTsKKyAgICAgICAgaWYg
KGV4cG9uZW50IDwgUG93ZXJzT2ZUZW5DYWNoZTo6a01pbkRlY2ltYWxFeHBvbmVudCkgeworICAg
ICAgICAgICAgKnJlc3VsdCA9IDAuMDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgICAgIERpeUZwIGNhY2hlZF9wb3dlcjsKKyAgICAgICAgaW50IGNhY2hlZF9kZWNp
bWFsX2V4cG9uZW50OworICAgICAgICBQb3dlcnNPZlRlbkNhY2hlOjpHZXRDYWNoZWRQb3dlckZv
ckRlY2ltYWxFeHBvbmVudChleHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhY2hlZF9wb3dlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhY2hlZF9k
ZWNpbWFsX2V4cG9uZW50KTsKKyAgICAgICAgCisgICAgICAgIGlmIChjYWNoZWRfZGVjaW1hbF9l
eHBvbmVudCAhPSBleHBvbmVudCkgeworICAgICAgICAgICAgaW50IGFkanVzdG1lbnRfZXhwb25l
bnQgPSBleHBvbmVudCAtIGNhY2hlZF9kZWNpbWFsX2V4cG9uZW50OworICAgICAgICAgICAgRGl5
RnAgYWRqdXN0bWVudF9wb3dlciA9IEFkanVzdG1lbnRQb3dlck9mVGVuKGFkanVzdG1lbnRfZXhw
b25lbnQpOworICAgICAgICAgICAgaW5wdXQuTXVsdGlwbHkoYWRqdXN0bWVudF9wb3dlcik7Cisg
ICAgICAgICAgICBpZiAoa01heFVpbnQ2NERlY2ltYWxEaWdpdHMgLSBidWZmZXIubGVuZ3RoKCkg
Pj0gYWRqdXN0bWVudF9leHBvbmVudCkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBwcm9kdWN0
IG9mIGlucHV0IHdpdGggdGhlIGFkanVzdG1lbnQgcG93ZXIgZml0cyBpbnRvIGEgNjQgYml0Cisg
ICAgICAgICAgICAgICAgLy8gaW50ZWdlci4KKyAgICAgICAgICAgICAgICBBU1NFUlQoRGl5RnA6
OmtTaWduaWZpY2FuZFNpemUgPT0gNjQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAvLyBUaGUgYWRqdXN0bWVudCBwb3dlciBpcyBleGFjdC4gVGhlcmUgaXMgaGVuY2Ug
b25seSBhbiBlcnJvciBvZiAwLjUuCisgICAgICAgICAgICAgICAgZXJyb3IgKz0ga0Rlbm9taW5h
dG9yIC8gMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaW5w
dXQuTXVsdGlwbHkoY2FjaGVkX3Bvd2VyKTsKKyAgICAgICAgLy8gVGhlIGVycm9yIGludHJvZHVj
ZWQgYnkgYSBtdWx0aXBsaWNhdGlvbiBvZiBhKmIgZXF1YWxzCisgICAgICAgIC8vICAgZXJyb3Jf
YSArIGVycm9yX2IgKyBlcnJvcl9hKmVycm9yX2IvMl42NCArIDAuNQorICAgICAgICAvLyBTdWJz
dGl0dXRpbmcgYSB3aXRoICdpbnB1dCcgYW5kIGIgd2l0aCAnY2FjaGVkX3Bvd2VyJyB3ZSBoYXZl
CisgICAgICAgIC8vICAgZXJyb3JfYiA9IDAuNSAgKGFsbCBjYWNoZWQgcG93ZXJzIGhhdmUgYW4g
ZXJyb3Igb2YgbGVzcyB0aGFuIDAuNSB1bHApLAorICAgICAgICAvLyAgIGVycm9yX2FiID0gMCBv
ciAxIC8ga0Rlbm9taW5hdG9yID4gZXJyb3JfYSplcnJvcl9iLyAyXjY0CisgICAgICAgIGludCBl
cnJvcl9iID0ga0Rlbm9taW5hdG9yIC8gMjsKKyAgICAgICAgaW50IGVycm9yX2FiID0gKGVycm9y
ID09IDAgPyAwIDogMSk7ICAvLyBXZSByb3VuZCB1cCB0byAxLgorICAgICAgICBpbnQgZml4ZWRf
ZXJyb3IgPSBrRGVub21pbmF0b3IgLyAyOworICAgICAgICBlcnJvciArPSBlcnJvcl9iICsgZXJy
b3JfYWIgKyBmaXhlZF9lcnJvcjsKKyAgICAgICAgCisgICAgICAgIG9sZF9lID0gaW5wdXQuZSgp
OworICAgICAgICBpbnB1dC5Ob3JtYWxpemUoKTsKKyAgICAgICAgZXJyb3IgPDw9IG9sZF9lIC0g
aW5wdXQuZSgpOworICAgICAgICAKKyAgICAgICAgLy8gU2VlIGlmIHRoZSBkb3VibGUncyBzaWdu
aWZpY2FuZCBjaGFuZ2VzIGlmIHdlIGFkZC9zdWJ0cmFjdCB0aGUgZXJyb3IuCisgICAgICAgIGlu
dCBvcmRlcl9vZl9tYWduaXR1ZGUgPSBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSArIGlucHV0LmUo
KTsKKyAgICAgICAgaW50IGVmZmVjdGl2ZV9zaWduaWZpY2FuZF9zaXplID0KKyAgICAgICAgRG91
YmxlOjpTaWduaWZpY2FuZFNpemVGb3JPcmRlck9mTWFnbml0dWRlKG9yZGVyX29mX21hZ25pdHVk
ZSk7CisgICAgICAgIGludCBwcmVjaXNpb25fZGlnaXRzX2NvdW50ID0KKyAgICAgICAgRGl5RnA6
OmtTaWduaWZpY2FuZFNpemUgLSBlZmZlY3RpdmVfc2lnbmlmaWNhbmRfc2l6ZTsKKyAgICAgICAg
aWYgKHByZWNpc2lvbl9kaWdpdHNfY291bnQgKyBrRGVub21pbmF0b3JMb2cgPj0gRGl5RnA6OmtT
aWduaWZpY2FuZFNpemUpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgY2FuIG9ubHkgaGFwcGVuIGZv
ciB2ZXJ5IHNtYWxsIGRlbm9ybWFscy4gSW4gdGhpcyBjYXNlIHRoZQorICAgICAgICAgICAgLy8g
aGFsZi13YXkgbXVsdGlwbGllZCBieSB0aGUgZGVub21pbmF0b3IgZXhjZWVkcyB0aGUgcmFuZ2Ug
b2YgYW4gdWludDY0LgorICAgICAgICAgICAgLy8gU2ltcGx5IHNoaWZ0IGV2ZXJ5dGhpbmcgdG8g
dGhlIHJpZ2h0LgorICAgICAgICAgICAgaW50IHNoaWZ0X2Ftb3VudCA9IChwcmVjaXNpb25fZGln
aXRzX2NvdW50ICsga0Rlbm9taW5hdG9yTG9nKSAtCisgICAgICAgICAgICBEaXlGcDo6a1NpZ25p
ZmljYW5kU2l6ZSArIDE7CisgICAgICAgICAgICBpbnB1dC5zZXRfZihpbnB1dC5mKCkgPj4gc2hp
ZnRfYW1vdW50KTsKKyAgICAgICAgICAgIGlucHV0LnNldF9lKGlucHV0LmUoKSArIHNoaWZ0X2Ft
b3VudCk7CisgICAgICAgICAgICAvLyBXZSBhZGQgMSBmb3IgdGhlIGxvc3QgcHJlY2lzaW9uIG9m
IGVycm9yLCBhbmQga0Rlbm9taW5hdG9yIGZvcgorICAgICAgICAgICAgLy8gdGhlIGxvc3QgcHJl
Y2lzaW9uIG9mIGlucHV0LmYoKS4KKyAgICAgICAgICAgIGVycm9yID0gKGVycm9yID4+IHNoaWZ0
X2Ftb3VudCkgKyAxICsga0Rlbm9taW5hdG9yOworICAgICAgICAgICAgcHJlY2lzaW9uX2RpZ2l0
c19jb3VudCAtPSBzaGlmdF9hbW91bnQ7CisgICAgICAgIH0KKyAgICAgICAgLy8gV2UgdXNlIHVp
bnQ2NF90cyBub3cuIFRoaXMgb25seSB3b3JrcyBpZiB0aGUgRGl5RnAgdXNlcyB1aW50NjRfdHMg
dG9vLgorICAgICAgICBBU1NFUlQoRGl5RnA6OmtTaWduaWZpY2FuZFNpemUgPT0gNjQpOworICAg
ICAgICBBU1NFUlQocHJlY2lzaW9uX2RpZ2l0c19jb3VudCA8IDY0KTsKKyAgICAgICAgdWludDY0
X3Qgb25lNjQgPSAxOworICAgICAgICB1aW50NjRfdCBwcmVjaXNpb25fYml0c19tYXNrID0gKG9u
ZTY0IDw8IHByZWNpc2lvbl9kaWdpdHNfY291bnQpIC0gMTsKKyAgICAgICAgdWludDY0X3QgcHJl
Y2lzaW9uX2JpdHMgPSBpbnB1dC5mKCkgJiBwcmVjaXNpb25fYml0c19tYXNrOworICAgICAgICB1
aW50NjRfdCBoYWxmX3dheSA9IG9uZTY0IDw8IChwcmVjaXNpb25fZGlnaXRzX2NvdW50IC0gMSk7
CisgICAgICAgIHByZWNpc2lvbl9iaXRzICo9IGtEZW5vbWluYXRvcjsKKyAgICAgICAgaGFsZl93
YXkgKj0ga0Rlbm9taW5hdG9yOworICAgICAgICBEaXlGcCByb3VuZGVkX2lucHV0KGlucHV0LmYo
KSA+PiBwcmVjaXNpb25fZGlnaXRzX2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlucHV0LmUoKSArIHByZWNpc2lvbl9kaWdpdHNfY291bnQpOworICAgICAgICBpZiAocHJlY2lz
aW9uX2JpdHMgPj0gaGFsZl93YXkgKyBlcnJvcikgeworICAgICAgICAgICAgcm91bmRlZF9pbnB1
dC5zZXRfZihyb3VuZGVkX2lucHV0LmYoKSArIDEpOworICAgICAgICB9CisgICAgICAgIC8vIElm
IHRoZSBsYXN0X2JpdHMgYXJlIHRvbyBjbG9zZSB0byB0aGUgaGFsZi13YXkgY2FzZSB0aGFuIHdl
IGFyZSB0b28KKyAgICAgICAgLy8gaW5hY2N1cmF0ZSBhbmQgcm91bmQgZG93bi4gSW4gdGhpcyBj
YXNlIHdlIHJldHVybiBmYWxzZSBzbyB0aGF0IHdlIGNhbgorICAgICAgICAvLyBmYWxsIGJhY2sg
dG8gYSBtb3JlIHByZWNpc2UgYWxnb3JpdGhtLgorICAgICAgICAKKyAgICAgICAgKnJlc3VsdCA9
IERvdWJsZShyb3VuZGVkX2lucHV0KS52YWx1ZSgpOworICAgICAgICBpZiAoaGFsZl93YXkgLSBl
cnJvciA8IHByZWNpc2lvbl9iaXRzICYmIHByZWNpc2lvbl9iaXRzIDwgaGFsZl93YXkgKyBlcnJv
cikgeworICAgICAgICAgICAgLy8gVG9vIGltcHJlY2lzZS4gVGhlIGNhbGxlciB3aWxsIGhhdmUg
dG8gZmFsbCBiYWNrIHRvIGEgc2xvd2VyIHZlcnNpb24uCisgICAgICAgICAgICAvLyBIb3dldmVy
IHRoZSByZXR1cm5lZCBudW1iZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBlaXRoZXIgdGhlIGNvcnJl
Y3QKKyAgICAgICAgICAgIC8vIGRvdWJsZSwgb3IgdGhlIG5leHQtbG93ZXIgZG91YmxlLgorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgLy8gUmV0dXJucyB0
aGUgY29ycmVjdCBkb3VibGUgZm9yIHRoZSBidWZmZXIqMTBeZXhwb25lbnQuCisgICAgLy8gVGhl
IHZhcmlhYmxlIGd1ZXNzIHNob3VsZCBiZSBhIGNsb3NlIGd1ZXNzIHRoYXQgaXMgZWl0aGVyIHRo
ZSBjb3JyZWN0IGRvdWJsZQorICAgIC8vIG9yIGl0cyBsb3dlciBuZWlnaGJvciAodGhlIG5lYXJl
c3QgZG91YmxlIGxlc3MgdGhhbiB0aGUgY29ycmVjdCBvbmUpLgorICAgIC8vIFByZWNvbmRpdGlv
bnM6CisgICAgLy8gICBidWZmZXIubGVuZ3RoKCkgKyBleHBvbmVudCA8PSBrTWF4RGVjaW1hbFBv
d2VyICsgMQorICAgIC8vICAgYnVmZmVyLmxlbmd0aCgpICsgZXhwb25lbnQgPiBrTWluRGVjaW1h
bFBvd2VyCisgICAgLy8gICBidWZmZXIubGVuZ3RoKCkgPD0ga01heERlY2ltYWxTaWduaWZpY2Fu
dERpZ2l0cworICAgIHN0YXRpYyBkb3VibGUgQmlnbnVtU3RydG9kKFZlY3Rvcjxjb25zdCBjaGFy
PiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV4cG9uZW50LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBndWVzcykgeworICAgICAgICBp
ZiAoZ3Vlc3MgPT0gRG91YmxlOjpJbmZpbml0eSgpKSB7CisgICAgICAgICAgICByZXR1cm4gZ3Vl
c3M7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIERpeUZwIHVwcGVyX2JvdW5kYXJ5ID0g
RG91YmxlKGd1ZXNzKS5VcHBlckJvdW5kYXJ5KCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQo
YnVmZmVyLmxlbmd0aCgpICsgZXhwb25lbnQgPD0ga01heERlY2ltYWxQb3dlciArIDEpOworICAg
ICAgICBBU1NFUlQoYnVmZmVyLmxlbmd0aCgpICsgZXhwb25lbnQgPiBrTWluRGVjaW1hbFBvd2Vy
KTsKKyAgICAgICAgQVNTRVJUKGJ1ZmZlci5sZW5ndGgoKSA8PSBrTWF4U2lnbmlmaWNhbnREZWNp
bWFsRGlnaXRzKTsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIEJpZ251bSB3aWxsIGJl
IGFibGUgdG8gaG9sZCBhbGwgb3VyIG51bWJlcnMuCisgICAgICAgIC8vIE91ciBCaWdudW0gaW1w
bGVtZW50YXRpb24gaGFzIGEgc2VwYXJhdGUgZmllbGQgZm9yIGV4cG9uZW50cy4gU2hpZnRzIHdp
bGwKKyAgICAgICAgLy8gY29uc3VtZSBhdCBtb3N0IG9uZSBiaWdpdCAoPCA2NCBiaXRzKS4KKyAg
ICAgICAgLy8gbG4oMTApID09IDMuMzIxOS4uLgorICAgICAgICBBU1NFUlQoKChrTWF4RGVjaW1h
bFBvd2VyICsgMSkgKiAzMzMgLyAxMDApIDwgQmlnbnVtOjprTWF4U2lnbmlmaWNhbnRCaXRzKTsK
KyAgICAgICAgQmlnbnVtIGlucHV0OworICAgICAgICBCaWdudW0gYm91bmRhcnk7CisgICAgICAg
IGlucHV0LkFzc2lnbkRlY2ltYWxTdHJpbmcoYnVmZmVyKTsKKyAgICAgICAgYm91bmRhcnkuQXNz
aWduVUludDY0KHVwcGVyX2JvdW5kYXJ5LmYoKSk7CisgICAgICAgIGlmIChleHBvbmVudCA+PSAw
KSB7CisgICAgICAgICAgICBpbnB1dC5NdWx0aXBseUJ5UG93ZXJPZlRlbihleHBvbmVudCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBib3VuZGFyeS5NdWx0aXBseUJ5UG93ZXJPZlRl
bigtZXhwb25lbnQpOworICAgICAgICB9CisgICAgICAgIGlmICh1cHBlcl9ib3VuZGFyeS5lKCkg
PiAwKSB7CisgICAgICAgICAgICBib3VuZGFyeS5TaGlmdExlZnQodXBwZXJfYm91bmRhcnkuZSgp
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlucHV0LlNoaWZ0TGVmdCgtdXBwZXJf
Ym91bmRhcnkuZSgpKTsKKyAgICAgICAgfQorICAgICAgICBpbnQgY29tcGFyaXNvbiA9IEJpZ251
bTo6Q29tcGFyZShpbnB1dCwgYm91bmRhcnkpOworICAgICAgICBpZiAoY29tcGFyaXNvbiA8IDAp
IHsKKyAgICAgICAgICAgIHJldHVybiBndWVzczsKKyAgICAgICAgfSBlbHNlIGlmIChjb21wYXJp
c29uID4gMCkgeworICAgICAgICAgICAgcmV0dXJuIERvdWJsZShndWVzcykuTmV4dERvdWJsZSgp
OworICAgICAgICB9IGVsc2UgaWYgKChEb3VibGUoZ3Vlc3MpLlNpZ25pZmljYW5kKCkgJiAxKSA9
PSAwKSB7CisgICAgICAgICAgICAvLyBSb3VuZCB0b3dhcmRzIGV2ZW4uCisgICAgICAgICAgICBy
ZXR1cm4gZ3Vlc3M7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gRG91Ymxl
KGd1ZXNzKS5OZXh0RG91YmxlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAg
ZG91YmxlIFN0cnRvZChWZWN0b3I8Y29uc3QgY2hhcj4gYnVmZmVyLCBpbnQgZXhwb25lbnQpIHsK
KyAgICAgICAgVmVjdG9yPGNvbnN0IGNoYXI+IGxlZnRfdHJpbW1lZCA9IFRyaW1MZWFkaW5nWmVy
b3MoYnVmZmVyKTsKKyAgICAgICAgVmVjdG9yPGNvbnN0IGNoYXI+IHRyaW1tZWQgPSBUcmltVHJh
aWxpbmdaZXJvcyhsZWZ0X3RyaW1tZWQpOworICAgICAgICBleHBvbmVudCArPSBsZWZ0X3RyaW1t
ZWQubGVuZ3RoKCkgLSB0cmltbWVkLmxlbmd0aCgpOworICAgICAgICBpZiAodHJpbW1lZC5sZW5n
dGgoKSA9PSAwKSByZXR1cm4gMC4wOworICAgICAgICBpZiAodHJpbW1lZC5sZW5ndGgoKSA+IGtN
YXhTaWduaWZpY2FudERlY2ltYWxEaWdpdHMpIHsKKyAgICAgICAgICAgIGNoYXIgc2lnbmlmaWNh
bnRfYnVmZmVyW2tNYXhTaWduaWZpY2FudERlY2ltYWxEaWdpdHNdOworICAgICAgICAgICAgaW50
IHNpZ25pZmljYW50X2V4cG9uZW50OworICAgICAgICAgICAgVHJpbVRvTWF4U2lnbmlmaWNhbnRE
aWdpdHModHJpbW1lZCwgZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaWduaWZpY2FudF9idWZmZXIsICZzaWduaWZpY2FudF9leHBvbmVudCk7CisgICAg
ICAgICAgICByZXR1cm4gU3RydG9kKFZlY3Rvcjxjb25zdCBjaGFyPihzaWduaWZpY2FudF9idWZm
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrTWF4U2ln
bmlmaWNhbnREZWNpbWFsRGlnaXRzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmlm
aWNhbnRfZXhwb25lbnQpOworICAgICAgICB9CisgICAgICAgIGlmIChleHBvbmVudCArIHRyaW1t
ZWQubGVuZ3RoKCkgLSAxID49IGtNYXhEZWNpbWFsUG93ZXIpIHsKKyAgICAgICAgICAgIHJldHVy
biBEb3VibGU6OkluZmluaXR5KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGV4cG9uZW50ICsg
dHJpbW1lZC5sZW5ndGgoKSA8PSBrTWluRGVjaW1hbFBvd2VyKSB7CisgICAgICAgICAgICByZXR1
cm4gMC4wOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBkb3VibGUgZ3Vlc3M7CisgICAg
ICAgIGlmIChEb3VibGVTdHJ0b2QodHJpbW1lZCwgZXhwb25lbnQsICZndWVzcykgfHwKKyAgICAg
ICAgICAgIERpeUZwU3RydG9kKHRyaW1tZWQsIGV4cG9uZW50LCAmZ3Vlc3MpKSB7CisgICAgICAg
ICAgICByZXR1cm4gZ3Vlc3M7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEJpZ251bVN0cnRv
ZCh0cmltbWVkLCBleHBvbmVudCwgZ3Vlc3MpOworICAgIH0KKyAgICAKK30gIC8vIG5hbWVzcGFj
ZSBkb3VibGVfY29udmVyc2lvbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9kdG9hL3N0cnRvZC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL3N0cnRvZC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjA5NzlmNDRkZWI5NTg1YTBkOWQ1OTg2MTAyODU3MzlhY2EyMTY5MzQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2Evc3RydG9kLmgK
QEAgLTAsMCArMSw0MSBAQAorLy8gQ29weXJpZ2h0IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
Ly8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAg
ICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8g
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWZuZGVmIERP
VUJMRV9DT05WRVJTSU9OX1NUUlRPRF9IXworI2RlZmluZSBET1VCTEVfQ09OVkVSU0lPTl9TVFJU
T0RfSF8KKworI2luY2x1ZGUgInV0aWxzLmgiCisKK25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lv
biB7CisgICAgCisgICAgLy8gVGhlIGJ1ZmZlciBtdXN0IG9ubHkgY29udGFpbiBkaWdpdHMgaW4g
dGhlIHJhbmdlIFswLTldLiBJdCBtdXN0IG5vdAorICAgIC8vIGNvbnRhaW4gYSBkb3Qgb3IgYSBz
aWduLiBJdCBtdXN0IG5vdCBzdGFydCB3aXRoICcwJywgYW5kIG11c3Qgbm90IGJlIGVtcHR5Lgor
ICAgIGRvdWJsZSBTdHJ0b2QoVmVjdG9yPGNvbnN0IGNoYXI+IGJ1ZmZlciwgaW50IGV4cG9uZW50
KTsKKyAgICAKK30gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbgorCisjZW5kaWYgIC8v
IERPVUJMRV9DT05WRVJTSU9OX1NUUlRPRF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9kdG9hL3V0aWxzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2Ev
dXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5kMjMyMGJlZDc3ZjUzZDkyNWU1ZTZjMmE1NDQ2OTM5YjE2M2Y0
MjQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL3V0
aWxzLmgKQEAgLTAsMCArMSwyOTkgQEAKKy8vIENvcHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0
IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8v
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lm
bmRlZiBET1VCTEVfQ09OVkVSU0lPTl9VVElMU19IXworI2RlZmluZSBET1VCTEVfQ09OVkVSU0lP
Tl9VVElMU19IXworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisK
KyNpZm5kZWYgQVNTRVJUCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZGVmaW5lIEFTU0VSVChjb25k
aXRpb24pICAgICAgKGFzc2VydChjb25kaXRpb24pKQorI2RlZmluZSBVTklNUExFTUVOVEVEKCkg
KGFib3J0KCkpCisjZGVmaW5lIFVOUkVBQ0hBQkxFKCkgICAoYWJvcnQoKSkKKyNlbmRpZgorCisv
LyBEb3VibGUgb3BlcmF0aW9ucyBkZXRlY3Rpb24gYmFzZWQgb24gdGFyZ2V0IGFyY2hpdGVjdHVy
ZS4KKy8vIExpbnV4IHVzZXMgYSA4MGJpdCB3aWRlIGZsb2F0aW5nIHBvaW50IHN0YWNrIG9uIHg4
Ni4gVGhpcyBpbmR1Y2VzIGRvdWJsZQorLy8gcm91bmRpbmcsIHdoaWNoIGluIHR1cm4gbGVhZHMg
dG8gd3JvbmcgcmVzdWx0cy4KKy8vIEFuIGVhc3kgd2F5IHRvIHRlc3QgaWYgdGhlIGZsb2F0aW5n
LXBvaW50IG9wZXJhdGlvbnMgYXJlIGNvcnJlY3QgaXMgdG8KKy8vIGV2YWx1YXRlOiA4OTI1NS4w
LzFlMjIuIElmIHRoZSBmbG9hdGluZy1wb2ludCBzdGFjayBpcyA2NCBiaXRzIHdpZGUgdGhlbgor
Ly8gdGhlIHJlc3VsdCBpcyBlcXVhbCB0byA4OTI1NWUtMjIuCisvLyBUaGUgYmVzdCB3YXkgdG8g
dGVzdCB0aGlzLCBpcyB0byBjcmVhdGUgYSBkaXZpc2lvbi1mdW5jdGlvbiBhbmQgdG8gY29tcGFy
ZQorLy8gdGhlIG91dHB1dCBvZiB0aGUgZGl2aXNpb24gd2l0aCB0aGUgZXhwZWN0ZWQgcmVzdWx0
LiAoSW5saW5pbmcgbXVzdCBiZQorLy8gZGlzYWJsZWQuKQorLy8gT24gTGludXgseDg2IDg5MjU1
ZS0yMiAhPSBEaXZfZG91YmxlKDg5MjU1LjAvMWUyMikKKyNpZiBkZWZpbmVkKF9NX1g2NCkgfHwg
ZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBcCitkZWZpbmVkKF9fQVJNRUxfXykgfHwgXAorZGVmaW5l
ZChfTUlQU19BUkNIX01JUFMzMlIyKQorI2RlZmluZSBET1VCTEVfQ09OVkVSU0lPTl9DT1JSRUNU
X0RPVUJMRV9PUEVSQVRJT05TIDEKKyNlbGlmIGRlZmluZWQoX01fSVg4NikgfHwgZGVmaW5lZChf
X2kzODZfXykKKyNpZiBkZWZpbmVkKF9XSU4zMikKKy8vIFdpbmRvd3MgdXNlcyBhIDY0Yml0IHdp
ZGUgZmxvYXRpbmcgcG9pbnQgc3RhY2suCisjZGVmaW5lIERPVUJMRV9DT05WRVJTSU9OX0NPUlJF
Q1RfRE9VQkxFX09QRVJBVElPTlMgMQorI2Vsc2UKKyN1bmRlZiBET1VCTEVfQ09OVkVSU0lPTl9D
T1JSRUNUX0RPVUJMRV9PUEVSQVRJT05TCisjZW5kaWYgIC8vIF9XSU4zMgorI2Vsc2UKKyNlcnJv
ciBUYXJnZXQgYXJjaGl0ZWN0dXJlIHdhcyBub3QgZGV0ZWN0ZWQgYXMgc3VwcG9ydGVkIGJ5IERv
dWJsZS1Db252ZXJzaW9uLgorI2VuZGlmCisKKworI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVm
aW5lZChfX01JTkdXMzJfXykKKwordHlwZWRlZiBzaWduZWQgY2hhciBpbnQ4X3Q7Cit0eXBlZGVm
IHVuc2lnbmVkIGNoYXIgdWludDhfdDsKK3R5cGVkZWYgc2hvcnQgaW50MTZfdDsgIC8vIE5PTElO
VAordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1aW50MTZfdDsgIC8vIE5PTElOVAordHlwZWRlZiBp
bnQgaW50MzJfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQzMl90OwordHlwZWRlZiBfX2lu
dDY0IGludDY0X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgdWludDY0X3Q7CisvLyBpbnRw
dHJfdCBhbmQgZnJpZW5kcyBhcmUgZGVmaW5lZCBpbiBjcnRkZWZzLmggdGhyb3VnaCBzdGRpby5o
LgorCisjZWxzZQorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNlbmRpZgorCisvLyBUaGUgZm9s
bG93aW5nIG1hY3JvIHdvcmtzIG9uIGJvdGggMzIgYW5kIDY0LWJpdCBwbGF0Zm9ybXMuCisvLyBV
c2FnZTogaW5zdGVhZCBvZiB3cml0aW5nIDB4MTIzNDU2Nzg5MDEyMzQ1NgorLy8gICAgICB3cml0
ZSBVSU5UNjRfMlBBUlRfQygweDEyMzQ1Njc4LDkwMTIzNDU2KTsKKyNkZWZpbmUgVUlOVDY0XzJQ
QVJUX0MoYSwgYikgKCgoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGEpIDw8IDMyKSArIDB4IyNiIyN1
KSkKKworCisvLyBUaGUgZXhwcmVzc2lvbiBBUlJBWV9TSVpFKGEpIGlzIGEgY29tcGlsZS10aW1l
IGNvbnN0YW50IG9mIHR5cGUKKy8vIHNpemVfdCB3aGljaCByZXByZXNlbnRzIHRoZSBudW1iZXIg
b2YgZWxlbWVudHMgb2YgdGhlIGdpdmVuCisvLyBhcnJheS4gWW91IHNob3VsZCBvbmx5IHVzZSBB
UlJBWV9TSVpFIG9uIHN0YXRpY2FsbHkgYWxsb2NhdGVkCisvLyBhcnJheXMuCisjZGVmaW5lIEFS
UkFZX1NJWkUoYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKygoc2l6ZW9m
KGEpIC8gc2l6ZW9mKCooYSkpKSAvICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3N0YXRpY19j
YXN0PHNpemVfdD4oIShzaXplb2YoYSkgJSBzaXplb2YoKihhKSkpKSkKKworLy8gQSBtYWNybyB0
byBkaXNhbGxvdyB0aGUgZXZpbCBjb3B5IGNvbnN0cnVjdG9yIGFuZCBvcGVyYXRvcj0gZnVuY3Rp
b25zCisvLyBUaGlzIHNob3VsZCBiZSB1c2VkIGluIHRoZSBwcml2YXRlOiBkZWNsYXJhdGlvbnMg
Zm9yIGEgY2xhc3MKKyNkZWZpbmUgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFR5cGVOYW1lKSAg
ICAgIFwKK1R5cGVOYW1lKGNvbnN0IFR5cGVOYW1lJik7ICAgICAgICAgICAgICAgICAgICBcCit2
b2lkIG9wZXJhdG9yPShjb25zdCBUeXBlTmFtZSYpCisKKy8vIEEgbWFjcm8gdG8gZGlzYWxsb3cg
YWxsIHRoZSBpbXBsaWNpdCBjb25zdHJ1Y3RvcnMsIG5hbWVseSB0aGUKKy8vIGRlZmF1bHQgY29u
c3RydWN0b3IsIGNvcHkgY29uc3RydWN0b3IgYW5kIG9wZXJhdG9yPSBmdW5jdGlvbnMuCisvLwor
Ly8gVGhpcyBzaG91bGQgYmUgdXNlZCBpbiB0aGUgcHJpdmF0ZTogZGVjbGFyYXRpb25zIGZvciBh
IGNsYXNzCisvLyB0aGF0IHdhbnRzIHRvIHByZXZlbnQgYW55b25lIGZyb20gaW5zdGFudGlhdGlu
ZyBpdC4gVGhpcyBpcworLy8gZXNwZWNpYWxseSB1c2VmdWwgZm9yIGNsYXNzZXMgY29udGFpbmlu
ZyBvbmx5IHN0YXRpYyBtZXRob2RzLgorI2RlZmluZSBESVNBTExPV19JTVBMSUNJVF9DT05TVFJV
Q1RPUlMoVHlwZU5hbWUpIFwKK1R5cGVOYW1lKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFR5cGVOYW1lKQorCituYW1lc3Bh
Y2UgZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIHN0YXRpYyBjb25zdCBpbnQga0NoYXJT
aXplID0gc2l6ZW9mKGNoYXIpOworICAgIAorICAgIC8vIFJldHVybnMgdGhlIG1heGltdW0gb2Yg
dGhlIHR3byBwYXJhbWV0ZXJzLgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHN0YXRp
YyBUIE1heChUIGEsIFQgYikgeworICAgICAgICByZXR1cm4gYSA8IGIgPyBiIDogYTsKKyAgICB9
CisgICAgCisgICAgCisgICAgLy8gUmV0dXJucyB0aGUgbWluaW11bSBvZiB0aGUgdHdvIHBhcmFt
ZXRlcnMuCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3RhdGljIFQgTWluKFQgYSwg
VCBiKSB7CisgICAgICAgIHJldHVybiBhIDwgYiA/IGEgOiBiOworICAgIH0KKyAgICAKKyAgICAK
KyAgICBpbmxpbmUgaW50IFN0ckxlbmd0aChjb25zdCBjaGFyKiBzdHJpbmcpIHsKKyAgICAgICAg
c2l6ZV90IGxlbmd0aCA9IHN0cmxlbihzdHJpbmcpOworICAgICAgICBBU1NFUlQobGVuZ3RoID09
IHN0YXRpY19jYXN0PHNpemVfdD4oc3RhdGljX2Nhc3Q8aW50PihsZW5ndGgpKSk7CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxlbmd0aCk7CisgICAgfQorICAgIAorICAgIC8vIFRo
aXMgaXMgYSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgVjgncyBWZWN0b3IgY2xhc3MuCisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgY2xhc3MgVmVjdG9yIHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIFZlY3RvcigpIDogc3RhcnRfKE5VTEwpLCBsZW5ndGhfKDApIHt9CisgICAgICAgIFZlY3Rv
cihUKiBkYXRhLCBpbnQgbGVuZ3RoKSA6IHN0YXJ0XyhkYXRhKSwgbGVuZ3RoXyhsZW5ndGgpIHsK
KyAgICAgICAgICAgIEFTU0VSVChsZW5ndGggPT0gMCB8fCAobGVuZ3RoID4gMCAmJiBkYXRhICE9
IE5VTEwpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJucyBhIHZlY3Rv
ciB1c2luZyB0aGUgc2FtZSBiYWNraW5nIHN0b3JhZ2UgYXMgdGhpcyBvbmUsCisgICAgICAgIC8v
IHNwYW5uaW5nIGZyb20gYW5kIGluY2x1ZGluZyAnZnJvbScsIHRvIGJ1dCBub3QgaW5jbHVkaW5n
ICd0bycuCisgICAgICAgIFZlY3RvcjxUPiBTdWJWZWN0b3IoaW50IGZyb20sIGludCB0bykgewor
ICAgICAgICAgICAgQVNTRVJUKHRvIDw9IGxlbmd0aF8pOworICAgICAgICAgICAgQVNTRVJUKGZy
b20gPCB0byk7CisgICAgICAgICAgICBBU1NFUlQoMCA8PSBmcm9tKTsKKyAgICAgICAgICAgIHJl
dHVybiBWZWN0b3I8VD4oc3RhcnQoKSArIGZyb20sIHRvIC0gZnJvbSk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIC8vIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgdmVjdG9yLgorICAg
ICAgICBpbnQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbGVuZ3RoXzsgfQorICAgICAgICAKKyAg
ICAgICAgLy8gUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgdmVjdG9yIGlzIGVtcHR5LgorICAg
ICAgICBib29sIGlzX2VtcHR5KCkgY29uc3QgeyByZXR1cm4gbGVuZ3RoXyA9PSAwOyB9CisgICAg
ICAgIAorICAgICAgICAvLyBSZXR1cm5zIHRoZSBwb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUg
ZGF0YSBpbiB0aGUgdmVjdG9yLgorICAgICAgICBUKiBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIHN0
YXJ0XzsgfQorICAgICAgICAKKyAgICAgICAgLy8gQWNjZXNzIGluZGl2aWR1YWwgdmVjdG9yIGVs
ZW1lbnRzIC0gY2hlY2tzIGJvdW5kcyBpbiBkZWJ1ZyBtb2RlLgorICAgICAgICBUJiBvcGVyYXRv
cltdKGludCBpbmRleCkgY29uc3QgeworICAgICAgICAgICAgQVNTRVJUKDAgPD0gaW5kZXggJiYg
aW5kZXggPCBsZW5ndGhfKTsKKyAgICAgICAgICAgIHJldHVybiBzdGFydF9baW5kZXhdOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBUJiBmaXJzdCgpIHsgcmV0dXJuIHN0YXJ0X1swXTsg
fQorICAgICAgICAKKyAgICAgICAgVCYgbGFzdCgpIHsgcmV0dXJuIHN0YXJ0X1tsZW5ndGhfIC0g
MV07IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgVCogc3RhcnRfOworICAgICAg
ICBpbnQgbGVuZ3RoXzsKKyAgICB9OworICAgIAorICAgIAorICAgIC8vIEhlbHBlciBjbGFzcyBm
b3IgYnVpbGRpbmcgcmVzdWx0IHN0cmluZ3MgaW4gYSBjaGFyYWN0ZXIgYnVmZmVyLiBUaGUKKyAg
ICAvLyBwdXJwb3NlIG9mIHRoZSBjbGFzcyBpcyB0byB1c2Ugc2FmZSBvcGVyYXRpb25zIHRoYXQg
Y2hlY2tzIHRoZQorICAgIC8vIGJ1ZmZlciBib3VuZHMgb24gYWxsIG9wZXJhdGlvbnMgaW4gZGVi
dWcgbW9kZS4KKyAgICBjbGFzcyBTdHJpbmdCdWlsZGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IFN0cmluZ0J1aWxkZXIoY2hhciogYnVmZmVyLCBpbnQgc2l6ZSkKKyAgICAgICAgOiBidWZmZXJf
KGJ1ZmZlciwgc2l6ZSksIHBvc2l0aW9uXygwKSB7IH0KKyAgICAgICAgCisgICAgICAgIH5TdHJp
bmdCdWlsZGVyKCkgeyBpZiAoIWlzX2ZpbmFsaXplZCgpKSBGaW5hbGl6ZSgpOyB9CisgICAgICAg
IAorICAgICAgICBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGJ1ZmZlcl8ubGVuZ3RoKCk7IH0K
KyAgICAgICAgCisgICAgICAgIC8vIEdldCB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgYnVp
bGRlci4KKyAgICAgICAgaW50IHBvc2l0aW9uKCkgY29uc3QgeworICAgICAgICAgICAgQVNTRVJU
KCFpc19maW5hbGl6ZWQoKSk7CisgICAgICAgICAgICByZXR1cm4gcG9zaXRpb25fOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICAvLyBSZXNldCB0aGUgcG9zaXRpb24uCisgICAgICAgIHZv
aWQgUmVzZXQoKSB7IHBvc2l0aW9uXyA9IDA7IH0KKyAgICAgICAgCisgICAgICAgIC8vIEFkZCBh
IHNpbmdsZSBjaGFyYWN0ZXIgdG8gdGhlIGJ1aWxkZXIuIEl0IGlzIG5vdCBhbGxvd2VkIHRvIGFk
ZAorICAgICAgICAvLyAwLWNoYXJhY3RlcnM7IHVzZSB0aGUgRmluYWxpemUoKSBtZXRob2QgdG8g
dGVybWluYXRlIHRoZSBzdHJpbmcKKyAgICAgICAgLy8gaW5zdGVhZC4KKyAgICAgICAgdm9pZCBB
ZGRDaGFyYWN0ZXIoY2hhciBjKSB7CisgICAgICAgICAgICBBU1NFUlQoYyAhPSAnXDAnKTsKKyAg
ICAgICAgICAgIEFTU0VSVCghaXNfZmluYWxpemVkKCkgJiYgcG9zaXRpb25fIDwgYnVmZmVyXy5s
ZW5ndGgoKSk7CisgICAgICAgICAgICBidWZmZXJfW3Bvc2l0aW9uXysrXSA9IGM7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIC8vIEFkZCBhbiBlbnRpcmUgc3RyaW5nIHRvIHRoZSBidWls
ZGVyLiBVc2VzIHN0cmxlbigpIGludGVybmFsbHkgdG8KKyAgICAgICAgLy8gY29tcHV0ZSB0aGUg
bGVuZ3RoIG9mIHRoZSBpbnB1dCBzdHJpbmcuCisgICAgICAgIHZvaWQgQWRkU3RyaW5nKGNvbnN0
IGNoYXIqIHMpIHsKKyAgICAgICAgICAgIEFkZFN1YnN0cmluZyhzLCBTdHJMZW5ndGgocykpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBBZGQgdGhlIGZpcnN0ICduJyBjaGFyYWN0
ZXJzIG9mIHRoZSBnaXZlbiBzdHJpbmcgJ3MnIHRvIHRoZQorICAgICAgICAvLyBidWlsZGVyLiBU
aGUgaW5wdXQgc3RyaW5nIG11c3QgaGF2ZSBlbm91Z2ggY2hhcmFjdGVycy4KKyAgICAgICAgdm9p
ZCBBZGRTdWJzdHJpbmcoY29uc3QgY2hhciogcywgaW50IG4pIHsKKyAgICAgICAgICAgIEFTU0VS
VCghaXNfZmluYWxpemVkKCkgJiYgcG9zaXRpb25fICsgbiA8IGJ1ZmZlcl8ubGVuZ3RoKCkpOwor
ICAgICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHNpemVfdD4obikgPD0gc3RybGVuKHMpKTsK
KyAgICAgICAgICAgIG1lbWNweSgmYnVmZmVyX1twb3NpdGlvbl9dLCBzLCBuICoga0NoYXJTaXpl
KTsKKyAgICAgICAgICAgIHBvc2l0aW9uXyArPSBuOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICAKKyAgICAgICAgLy8gQWRkIGNoYXJhY3RlciBwYWRkaW5nIHRvIHRoZSBidWlsZGVyLiBJ
ZiBjb3VudCBpcyBub24tcG9zaXRpdmUsCisgICAgICAgIC8vIG5vdGhpbmcgaXMgYWRkZWQgdG8g
dGhlIGJ1aWxkZXIuCisgICAgICAgIHZvaWQgQWRkUGFkZGluZyhjaGFyIGMsIGludCBjb3VudCkg
eworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAg
ICAgICAgICAgQWRkQ2hhcmFjdGVyKGMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICAvLyBGaW5hbGl6ZSB0aGUgc3RyaW5nIGJ5IDAtdGVybWluYXRpbmcgaXQg
YW5kIHJldHVybmluZyB0aGUgYnVmZmVyLgorICAgICAgICBjaGFyKiBGaW5hbGl6ZSgpIHsKKyAg
ICAgICAgICAgIEFTU0VSVCghaXNfZmluYWxpemVkKCkgJiYgcG9zaXRpb25fIDwgYnVmZmVyXy5s
ZW5ndGgoKSk7CisgICAgICAgICAgICBidWZmZXJfW3Bvc2l0aW9uX10gPSAnXDAnOworICAgICAg
ICAgICAgLy8gTWFrZSBzdXJlIG5vYm9keSBtYW5hZ2VkIHRvIGFkZCBhIDAtY2hhcmFjdGVyIHRv
IHRoZQorICAgICAgICAgICAgLy8gYnVmZmVyIHdoaWxlIGJ1aWxkaW5nIHRoZSBzdHJpbmcuCisg
ICAgICAgICAgICBBU1NFUlQoc3RybGVuKGJ1ZmZlcl8uc3RhcnQoKSkgPT0gc3RhdGljX2Nhc3Q8
c2l6ZV90Pihwb3NpdGlvbl8pKTsKKyAgICAgICAgICAgIHBvc2l0aW9uXyA9IC0xOworICAgICAg
ICAgICAgQVNTRVJUKGlzX2ZpbmFsaXplZCgpKTsKKyAgICAgICAgICAgIHJldHVybiBidWZmZXJf
LnN0YXJ0KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgVmVj
dG9yPGNoYXI+IGJ1ZmZlcl87CisgICAgICAgIGludCBwb3NpdGlvbl87CisgICAgICAgIAorICAg
ICAgICBib29sIGlzX2ZpbmFsaXplZCgpIGNvbnN0IHsgcmV0dXJuIHBvc2l0aW9uXyA8IDA7IH0K
KyAgICAgICAgCisgICAgICAgIERJU0FMTE9XX0lNUExJQ0lUX0NPTlNUUlVDVE9SUyhTdHJpbmdC
dWlsZGVyKTsKKyAgICB9OworICAgIAorICAgIC8vIFRoZSB0eXBlLWJhc2VkIGFsaWFzaW5nIHJ1
bGUgYWxsb3dzIHRoZSBjb21waWxlciB0byBhc3N1bWUgdGhhdCBwb2ludGVycyBvZgorICAgIC8v
IGRpZmZlcmVudCB0eXBlcyAoZm9yIHNvbWUgZGVmaW5pdGlvbiBvZiBkaWZmZXJlbnQpIG5ldmVy
IGFsaWFzIGVhY2ggb3RoZXIuCisgICAgLy8gVGh1cyB0aGUgZm9sbG93aW5nIGNvZGUgZG9lcyBu
b3Qgd29yazoKKyAgICAvLworICAgIC8vIGZsb2F0IGYgPSBmb28oKTsKKyAgICAvLyBpbnQgZmJp
dHMgPSAqKGludCopKCZmKTsKKyAgICAvLworICAgIC8vIFRoZSBjb21waWxlciAna25vd3MnIHRo
YXQgdGhlIGludCBwb2ludGVyIGNhbid0IHJlZmVyIHRvIGYgc2luY2UgdGhlIHR5cGVzCisgICAg
Ly8gZG9uJ3QgbWF0Y2gsIHNvIHRoZSBjb21waWxlciBtYXkgY2FjaGUgZiBpbiBhIHJlZ2lzdGVy
LCBsZWF2aW5nIHJhbmRvbSBkYXRhCisgICAgLy8gaW4gZmJpdHMuICBVc2luZyBDKysgc3R5bGUg
Y2FzdHMgbWFrZXMgbm8gZGlmZmVyZW5jZSwgaG93ZXZlciBhIHBvaW50ZXIgdG8KKyAgICAvLyBj
aGFyIGRhdGEgaXMgYXNzdW1lZCB0byBhbGlhcyBhbnkgb3RoZXIgcG9pbnRlci4gIFRoaXMgaXMg
dGhlICdtZW1jcHkKKyAgICAvLyBleGNlcHRpb24nLgorICAgIC8vCisgICAgLy8gQml0X2Nhc3Qg
dXNlcyB0aGUgbWVtY3B5IGV4Y2VwdGlvbiB0byBtb3ZlIHRoZSBiaXRzIGZyb20gYSB2YXJpYWJs
ZSBvZiBvbmUKKyAgICAvLyB0eXBlIG9mIGEgdmFyaWFibGUgb2YgYW5vdGhlciB0eXBlLiAgT2Yg
Y291cnNlIHRoZSBlbmQgcmVzdWx0IGlzIGxpa2VseSB0bworICAgIC8vIGJlIGltcGxlbWVudGF0
aW9uIGRlcGVuZGVudC4gIE1vc3QgY29tcGlsZXJzIChnY2MtNC4yIGFuZCBNU1ZDIDIwMDUpCisg
ICAgLy8gd2lsbCBjb21wbGV0ZWx5IG9wdGltaXplIEJpdENhc3QgYXdheS4KKyAgICAvLworICAg
IC8vIFRoZXJlIGlzIGFuIGFkZGl0aW9uYWwgdXNlIGZvciBCaXRDYXN0LgorICAgIC8vIFJlY2Vu
dCBnY2NzIHdpbGwgd2FybiB3aGVuIHRoZXkgc2VlIGNhc3RzIHRoYXQgbWF5IHJlc3VsdCBpbiBi
cmVha2FnZSBkdWUgdG8KKyAgICAvLyB0aGUgdHlwZS1iYXNlZCBhbGlhc2luZyBydWxlLiAgSWYg
eW91IGhhdmUgY2hlY2tlZCB0aGF0IHRoZXJlIGlzIG5vIGJyZWFrYWdlCisgICAgLy8geW91IGNh
biB1c2UgQml0Q2FzdCB0byBjYXN0IG9uZSBwb2ludGVyIHR5cGUgdG8gYW5vdGhlci4gIFRoaXMg
Y29uZnVzZXMgZ2NjCisgICAgLy8gZW5vdWdoIHRoYXQgaXQgY2FuIG5vIGxvbmdlciBzZWUgdGhh
dCB5b3UgaGF2ZSBjYXN0IG9uZSBwb2ludGVyIHR5cGUgdG8KKyAgICAvLyBhbm90aGVyIHRodXMg
YXZvaWRpbmcgdGhlIHdhcm5pbmcuCisgICAgdGVtcGxhdGUgPGNsYXNzIERlc3QsIGNsYXNzIFNv
dXJjZT4KKyAgICBpbmxpbmUgRGVzdCBCaXRDYXN0KGNvbnN0IFNvdXJjZSYgc291cmNlKSB7Cisg
ICAgICAgIC8vIENvbXBpbGUgdGltZSBhc3NlcnRpb246IHNpemVvZihEZXN0KSA9PSBzaXplb2Yo
U291cmNlKQorICAgICAgICAvLyBBIGNvbXBpbGUgZXJyb3IgaGVyZSBtZWFucyB5b3VyIERlc3Qg
YW5kIFNvdXJjZSBoYXZlIGRpZmZlcmVudCBzaXplcy4KKyAgICAgICAgdHlwZWRlZiBjaGFyIFZl
cmlmeVNpemVzQXJlRXF1YWxbc2l6ZW9mKERlc3QpID09IHNpemVvZihTb3VyY2UpID8gMSA6IC0x
XTsKKyAgICAgICAgCisgICAgICAgIERlc3QgZGVzdDsKKyAgICAgICAgbWVtY3B5KCZkZXN0LCAm
c291cmNlLCBzaXplb2YoZGVzdCkpOworICAgICAgICByZXR1cm4gZGVzdDsKKyAgICB9CisgICAg
CisgICAgdGVtcGxhdGUgPGNsYXNzIERlc3QsIGNsYXNzIFNvdXJjZT4KKyAgICBpbmxpbmUgRGVz
dCBCaXRDYXN0KFNvdXJjZSogc291cmNlKSB7CisgICAgICAgIHJldHVybiBCaXRDYXN0PERlc3Q+
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihzb3VyY2UpKTsKKyAgICB9CisgICAgCit9ICAv
LyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KKworI2VuZGlmICAvLyBET1VCTEVfQ09OVkVS
U0lPTl9VVElMU19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi93dGYu
cHJpIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi93dGYucHJpCmluZGV4IDVlNDhmOWE1MDFk
YzM5ZTFmNWFjNjI4Yjk1MTM5OWU2ODZiMzU0NzAuLmRiNjU4MGM0MzQ5OTJiZWI1MzZiZmE1NWZk
ODA1ZWI4MTBmNGY4MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvd3Rm
LnByaQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3d0Zi5wcmkKQEAgLTcsNyArNyw2
IEBAIFNPVVJDRVMgKz0gXAogICAgIHd0Zi9DdXJyZW50VGltZS5jcHAgXAogICAgIHd0Zi9EYXRl
TWF0aC5jcHAgXAogICAgIHd0Zi9kdG9hLmNwcCBcCi0gICAgd3RmL0RlY2ltYWxOdW1iZXIuY3Bw
IFwKICAgICB3dGYvRmFzdE1hbGxvYy5jcHAgXAogICAgIHd0Zi9nb2JqZWN0L0dPd25QdHIuY3Bw
IFwKICAgICB3dGYvZ29iamVjdC9HUmVmUHRyLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTJlZDJlNjhh
ODNhNjY0YmY5OGVjN2E1NTA1MTcxYTYzOTEwNzBjZi4uYTkzZmQwNzMzYzU2M2U1YjBhZjZmMTI1
NGQ1NjJiN2UwNGMwZWQwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDExLTA4LTE2
ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgSW5j
b3Jwb3JhdGUgbmV3ZXIsIGZhc3RlciBkdG9hIGxpYnJhcnkKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MzQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgIEFkZGVk
IG5ldyBkdG9hIGxpYnJhcnkgYXQgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2RvdWJsZS1jb252
ZXJzaW9uLy4KKyAgICAgICAgUmVwbGFjZWQgb2xkIGNhbGwgdG8gZHRvYS4gIFRoZSBuZXcgbGli
cmFyeSBpcyBtdWNoIGZhc3RlciB0aGFuIHRoZSBvbGQgb25lLgorICAgICAgICBXZSBzdGlsbCB1
c2UgdGhlIG9sZCBzdHJ0b2QsIGJ1dCB3ZSBjYW4gcGhhc2UgdGhhdCBvdXQgZXZlbnR1YWxseSBh
cyB3ZWxsLgorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvd3RmL0RlY2ltYWxOdW1iZXIu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBjc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Zm9ybWF0TnVtYmVyKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MUGFy
c2VySWRpb21zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6ZUZvck51bWJlclR5cGUp
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQmFzaWNWYWx1ZTo6d3JpdGVKU09OKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9Db2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6c2VyaWFsaXpl
ZCk6CisKIDIwMTEtMDgtMTUgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNv
bT4KIAogICAgICAgICBSZWZhY3RvciBKUyBvYmplY3RzIHRvIGFsbG9jYXRlIGluIHN0YXRpYyBj
cmVhdGUgbWV0aG9kcyByYXRoZXIgdGhhbiBjb25zdHJ1Y3RvcnMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9EZWNpbWFsTnVtYmVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvRGVjaW1hbE51bWJlci5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAzMzMxNzRkNThhY2Y3ZDA3YzY0NWFlZThjMzY2ODEzYWIzMTQy
MzlmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9EZWNpbWFsTnVtYmVyLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw0ICswLDAgQEAKLSNpZm5kZWYgV2ViQ29yZV9GV0RfRGVjaW1hbE51bWJlcl9o
Ci0jZGVmaW5lIFdlYkNvcmVfRldEX0RlY2ltYWxOdW1iZXJfaAotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0RlY2ltYWxOdW1iZXIuaD4KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmlt
aXRpdmVWYWx1ZS5jcHAKaW5kZXggYmFkMmUzY2QzMGNlZjQ3YTFmZDJhOGE0MjgwMDkyY2M3ZGY0
MTEyYS4uNjhiMGMxYzdlYTRjYTY2MmIyZDk3M2U0NzY2M2RiYWFlMzE0NmZlMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCkBAIC0zNiw4ICszNiw5IEBACiAjaW5j
bHVkZSAiUmVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSA8d3RmL0FT
Q0lJQ1R5cGUuaD4KLSNpbmNsdWRlIDx3dGYvRGVjaW1hbE51bWJlci5oPgogI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvZHRvYS5oPgorI2luY2x1ZGUgPHd0Zi9k
dG9hL2RvdWJsZS1jb252ZXJzaW9uLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVmZmVy
Lmg+CiAKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCkBAIC02MDksMTMgKzYxMCw4IEBA
IGludCBDU1NQcmltaXRpdmVWYWx1ZTo6Z2V0SWRlbnQoKSBjb25zdAogCiBzdGF0aWMgU3RyaW5n
IGZvcm1hdE51bWJlcihkb3VibGUgbnVtYmVyKQogewotICAgIERlY2ltYWxOdW1iZXIgZGVjaW1h
bChudW1iZXIpOwotICAgIAotICAgIFN0cmluZ0J1ZmZlciBidWZmZXIoZGVjaW1hbC5idWZmZXJM
ZW5ndGhGb3JTdHJpbmdEZWNpbWFsKCkpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGRlY2ltYWwu
dG9TdHJpbmdEZWNpbWFsKGJ1ZmZlci5jaGFyYWN0ZXJzKCksIGJ1ZmZlci5sZW5ndGgoKSk7Ci0g
ICAgQVNTRVJUX1VOVVNFRChsZW5ndGgsIGxlbmd0aCA9PSBidWZmZXIubGVuZ3RoKCkpOwotCi0g
ICAgcmV0dXJuIFN0cmluZzo6YWRvcHQoYnVmZmVyKTsKKyAgICBOdW1iZXJUb1N0cmluZ0J1ZmZl
ciBidWZmZXI7CisgICAgcmV0dXJuIFN0cmluZyhudW1iZXJUb1N0cmluZyhudW1iZXIsIGJ1ZmZl
cikpOwogfQogCiBTdHJpbmcgQ1NTUHJpbWl0aXZlVmFsdWU6OmNzc1RleHQoKSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcAppbmRleCAw
NThiYjkzMzljZmZmNWQxODNlNDlmN2QyNTg4MjU4NzMwMjBjYTEyLi4wMzYyMjFiMjFiMTZmOGY1
MmFlMjU3MmZiZDM0NjA5ODk2YjdhYTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MUGFyc2VySWRpb21zLmNwcApAQCAtNjMsOCArNjMsNyBAQCBTdHJpbmcgc2VyaWFs
aXplRm9yTnVtYmVyVHlwZShkb3VibGUgbnVtYmVyKQogICAgIC8vIEFjY29yZGluZyB0byBIVE1M
NSwgInRoZSBiZXN0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBudW1iZXIgbiBhcyBhIGZsb2F0aW5n
CiAgICAgLy8gcG9pbnQgbnVtYmVyIiBpcyBhIHN0cmluZyBwcm9kdWNlZCBieSBhcHBseWluZyBU
b1N0cmluZygpIHRvIG4uCiAgICAgTnVtYmVyVG9TdHJpbmdCdWZmZXIgYnVmZmVyOwotICAgIHVu
c2lnbmVkIGxlbmd0aCA9IG51bWJlclRvU3RyaW5nKG51bWJlciwgYnVmZmVyKTsKLSAgICByZXR1
cm4gU3RyaW5nKGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICByZXR1cm4gU3RyaW5nKG51bWJlclRvU3Ry
aW5nKG51bWJlciwgYnVmZmVyKSk7CiB9CiAKIGJvb2wgcGFyc2VUb0RvdWJsZUZvck51bWJlclR5
cGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGRvdWJsZSogcmVzdWx0KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcAppbmRleCA5MmJhYmQ2N2U5OGQ0YWM1OTBj
MzU1MWJhNGFmODZhZjk5NzQ4YmY2Li42YTRkYTkzYTgxZjg3M2EyYjI4ZGY2ZjA0ZWIyZTBiNzA2
MGViOTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFs
dWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNw
cApAQCAtMzMsNyArMzMsNyBAQAogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIAotI2luY2x1ZGUg
PHd0Zi9EZWNpbWFsTnVtYmVyLmg+CisjaW5jbHVkZSA8d3RmL2R0b2EuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC02MjYsMjMgKzYyNiwxMSBAQCB2b2lkIEluc3BlY3RvckJhc2ljVmFs
dWU6OndyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0CiAgICAgICAgICAgICBv
dXRwdXQtPmFwcGVuZChmYWxzZVN0cmluZywgNSk7CiAgICAgfSBlbHNlIGlmICh0eXBlKCkgPT0g
VHlwZU51bWJlcikgewogICAgICAgICBOdW1iZXJUb1N0cmluZ0J1ZmZlciBidWZmZXI7Ci0gICAg
ICAgIGlmICghaXNmaW5pdGUobV9kb3VibGVWYWx1ZSkpIHsKLSAgICAgICAgICAgIG91dHB1dC0+
YXBwZW5kKG51bGxTdHJpbmcsIDQpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjb25z
dCBjaGFyKiBkb3VibGVTdHJpbmcgPSBudW1iZXJUb1N0cmluZyhtX2RvdWJsZVZhbHVlLCBidWZm
ZXIpOworICAgICAgICB3aGlsZSAoKmRvdWJsZVN0cmluZykgeworICAgICAgICAgICAgb3V0cHV0
LT5hcHBlbmQoVUNoYXIoKmRvdWJsZVN0cmluZykpOworICAgICAgICAgICAgZG91YmxlU3RyaW5n
Kys7CiAgICAgICAgIH0KLSAgICAgICAgRGVjaW1hbE51bWJlciBkZWNpbWFsID0gbV9kb3VibGVW
YWx1ZTsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKLSAgICAgICAgaWYgKGRlY2ltYWwu
YnVmZmVyTGVuZ3RoRm9yU3RyaW5nRGVjaW1hbCgpID4gV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZl
ckxlbmd0aCkgewotICAgICAgICAgICAgLy8gTm90IGVub3VnaCByb29tIGZvciBkZWNpbWFsLiBV
c2UgZXhwb25lbnRpYWwgZm9ybWF0LgotICAgICAgICAgICAgaWYgKGRlY2ltYWwuYnVmZmVyTGVu
Z3RoRm9yU3RyaW5nRXhwb25lbnRpYWwoKSA+IFdURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5n
dGgpIHsKLSAgICAgICAgICAgICAgICAvLyBGYWxsYmFjayBmb3IgYW4gYWJub3JtYWwgY2FzZSBp
ZiBpdCdzIHRvbyBsaXR0bGUgZXZlbiBmb3IgZXhwb25lbnRpYWwuCi0gICAgICAgICAgICAgICAg
b3V0cHV0LT5hcHBlbmQoIk5hTiIsIDMpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGxlbmd0aCA9IGRlY2ltYWwudG9TdHJpbmdFeHBvbmVudGlh
bChidWZmZXIsIFdURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgpOwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIGxlbmd0aCA9IGRlY2ltYWwudG9TdHJpbmdEZWNpbWFsKGJ1ZmZlciwg
V1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCk7Ci0gICAgICAgIG91dHB1dC0+YXBwZW5k
KGJ1ZmZlciwgbGVuZ3RoKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yLmNwcAppbmRleCA0OGY3NTIwMzAxNmJmN2Y1MDZjODE4ZTRjNDFhODczZGZm
M2NlYjhiLi41ZWNkYzBlZTlhZmE1ZTE1MmMxMjFkZDc2N2NhMzNjZjgwNWQwZTE2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCkBAIC0yOCw5ICsyOCwxMCBA
QAogCiAjaW5jbHVkZSAiSGFzaFRvb2xzLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
LSNpbmNsdWRlIDx3dGYvRGVjaW1hbE51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIu
aD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9kdG9hLmg+Cisj
aW5jbHVkZSA8d3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC0yMTAsOCArMjEx
LDExIEBAIFN0cmluZyBDb2xvcjo6c2VyaWFsaXplZCgpIGNvbnN0CiAgICAgICAgIHJlc3VsdC5h
cHBlbmQoJzAnKTsKICAgICBlbHNlIHsKICAgICAgICAgTnVtYmVyVG9TdHJpbmdCdWZmZXIgYnVm
ZmVyOwotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBEZWNpbWFsTnVtYmVyKGFscGhhKCkgLyAy
NTUuMCkudG9TdHJpbmdEZWNpbWFsKGJ1ZmZlciwgV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxl
bmd0aCk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyLCBsZW5ndGgpOworICAgICAgICBj
b25zdCBjaGFyICpkb3VibGVTdHJpbmcgPSBudW1iZXJUb1N0cmluZyhhbHBoYSgpIC8gMjU1LjAs
IGJ1ZmZlcik7CisgICAgICAgIHdoaWxlICgqZG91YmxlU3RyaW5nKSB7CisgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKFVDaGFyKCpkb3VibGVTdHJpbmcpKTsKKyAgICAgICAgICAgIGRvdWJsZVN0
cmluZysrOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmVzdWx0LmFwcGVuZCgnKScpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104199</attachid>
            <date>2011-08-17 11:24:52 -0700</date>
            <delta_ts>2011-08-17 11:46:13 -0700</delta_ts>
            <desc>Fixing build errors</desc>
            <filename>bug-66346-20110817112454.patch</filename>
            <type>text/plain</type>
            <size>350505</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTMxNjYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDMy
ZDIwZTMwYTI0YWRlZDI1NmRhMmE2MjVlNDFhM2IwOWRkNmE4MGEuLjZjMzQxNDBiMTMzMTMxM2Y3
ZTliNDdmNGI5YTI5ODhkMjM0ZTI4MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDExOCBAQAorMjAxMS0wOC0xNyAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBw
bGUuY29tPgorCisgICAgICAgIEluY29ycG9yYXRlIG5ld2VyLCBmYXN0ZXIgZHRvYSBsaWJyYXJ5
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM0Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIG5l
dyBkdG9hIGxpYnJhcnkgYXQgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2RvdWJsZS1jb252ZXJz
aW9uLy4KKyAgICAgICAgUmVwbGFjZWQgb2xkIGNhbGwgdG8gZHRvYS4gIFRoZSBuZXcgbGlicmFy
eSBpcyBtdWNoIGZhc3RlciB0aGFuIHRoZSBvbGQgb25lLgorICAgICAgICBXZSBzdGlsbCB1c2Ug
dGhlIG9sZCBzdHJ0b2QsIGJ1dCB3ZSBjYW4gcGhhc2UgdGhhdCBvdXQgZXZlbnR1YWxseSBhcyB3
ZWxsLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS5leHA6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwOgorICAg
ICAgICAoSlNDOjppbml0aWFsaXplVGhyZWFkaW5nT25jZSk6CisgICAgICAgICogcnVudGltZS9O
dW1iZXJQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1bmNUb0V4cG9u
ZW50aWFsKToKKyAgICAgICAgKEpTQzo6bnVtYmVyUHJvdG9GdW5jVG9GaXhlZCk6CisgICAgICAg
IChKU0M6Om51bWJlclByb3RvRnVuY1RvUHJlY2lzaW9uKToKKyAgICAgICAgKiBydW50aW1lL1VT
dHJpbmcuY3BwOgorICAgICAgICAoSlNDOjpVU3RyaW5nOjpudW1iZXIpOgorICAgICAgICAqIHd0
Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvRGVjaW1hbE51bWJlci5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogd3RmL0RlY2ltYWxOdW1iZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3
dGYvZHRvYS5jcHA6CisgICAgICAgIChXVEY6Om51bWJlclRvU3RyaW5nKToKKyAgICAgICAgKiB3
dGYvZHRvYS5oOgorICAgICAgICAqIHd0Zi9kdG9hL0NPUFlJTkc6IEFkZGVkLgorICAgICAgICAq
IHd0Zi9kdG9hL0xJQ0VOU0U6IEFkZGVkLgorICAgICAgICAqIHd0Zi9kdG9hL1JFQURNRTogQWRk
ZWQuCisgICAgICAgICogd3RmL2R0b2EvYmlnbnVtLWR0b2EuY2M6IEFkZGVkLgorICAgICAgICAq
IHd0Zi9kdG9hL2JpZ251bS1kdG9hLmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9kdG9hL2JpZ251
bS5jYzogQWRkZWQuCisgICAgICAgICogd3RmL2R0b2EvYmlnbnVtLmg6IEFkZGVkLgorICAgICAg
ICAoZG91YmxlX2NvbnZlcnNpb246OkJpZ251bTo6VGltZXMxMCk6CisgICAgICAgIChkb3VibGVf
Y29udmVyc2lvbjo6QmlnbnVtOjpFcXVhbCk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6
QmlnbnVtOjpMZXNzRXF1YWwpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OkJpZ251bTo6
TGVzcyk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6QmlnbnVtOjpQbHVzRXF1YWwpOgor
ICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OkJpZ251bTo6UGx1c0xlc3NFcXVhbCk6CisgICAg
ICAgIChkb3VibGVfY29udmVyc2lvbjo6QmlnbnVtOjpQbHVzTGVzcyk6CisgICAgICAgIChkb3Vi
bGVfY29udmVyc2lvbjo6QmlnbnVtOjpFbnN1cmVDYXBhY2l0eSk6CisgICAgICAgIChkb3VibGVf
Y29udmVyc2lvbjo6QmlnbnVtOjpCaWdpdExlbmd0aCk6CisgICAgICAgICogd3RmL2R0b2EvY2Fj
aGVkLXBvd2Vycy5jYzogQWRkZWQuCisgICAgICAgICogd3RmL2R0b2EvY2FjaGVkLXBvd2Vycy5o
OiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9kaXktZnAuY2M6IEFkZGVkLgorICAgICAgICAq
IHd0Zi9kdG9hL2RpeS1mcC5oOiBBZGRlZC4KKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpE
aXlGcDo6RGl5RnApOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OkRpeUZwOjpTdWJ0cmFj
dCk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6RGl5RnA6Ok1pbnVzKToKKyAgICAgICAg
KGRvdWJsZV9jb252ZXJzaW9uOjpEaXlGcDo6VGltZXMpOgorICAgICAgICAoZG91YmxlX2NvbnZl
cnNpb246OkRpeUZwOjpOb3JtYWxpemUpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OkRp
eUZwOjpmKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpEaXlGcDo6ZSk6CisgICAgICAg
IChkb3VibGVfY29udmVyc2lvbjo6RGl5RnA6OnNldF9mKToKKyAgICAgICAgKGRvdWJsZV9jb252
ZXJzaW9uOjpEaXlGcDo6c2V0X2UpOgorICAgICAgICAqIHd0Zi9kdG9hL2RvdWJsZS1jb252ZXJz
aW9uLmNjOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5oOiBB
ZGRlZC4KKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGVUb1N0cmluZ0NvbnZlcnRl
cjo6RG91YmxlVG9TdHJpbmdDb252ZXJ0ZXIpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246
OlN0cmluZ1RvRG91YmxlQ29udmVydGVyOjpTdHJpbmdUb0RvdWJsZUNvbnZlcnRlcik6CisgICAg
ICAgICogd3RmL2R0b2EvZG91YmxlLmg6IEFkZGVkLgorICAgICAgICAoZG91YmxlX2NvbnZlcnNp
b246OmRvdWJsZV90b191aW50NjQpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OnVpbnQ2
NF90b19kb3VibGUpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZTo6RG91Ymxl
KToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGU6OkFzRGl5RnApOgorICAgICAg
ICAoZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZTo6QXNOb3JtYWxpemVkRGl5RnApOgorICAgICAg
ICAoZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZTo6QXNVaW50NjQpOgorICAgICAgICAoZG91Ymxl
X2NvbnZlcnNpb246OkRvdWJsZTo6TmV4dERvdWJsZSk6CisgICAgICAgIChkb3VibGVfY29udmVy
c2lvbjo6RG91YmxlOjpFeHBvbmVudCk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6RG91
YmxlOjpTaWduaWZpY2FuZCk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpJ
c0Rlbm9ybWFsKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGU6OklzU3BlY2lh
bCk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpJc05hbik6CisgICAgICAg
IChkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpJc0luZmluaXRlKToKKyAgICAgICAgKGRvdWJs
ZV9jb252ZXJzaW9uOjpEb3VibGU6OlNpZ24pOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246
OkRvdWJsZTo6VXBwZXJCb3VuZGFyeSk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6RG91
YmxlOjpOb3JtYWxpemVkQm91bmRhcmllcyk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6
RG91YmxlOjp2YWx1ZSk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpTaWdu
aWZpY2FuZFNpemVGb3JPcmRlck9mTWFnbml0dWRlKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJz
aW9uOjpEb3VibGU6OkluZmluaXR5KToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpEb3Vi
bGU6Ok5hTik6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpEaXlGcFRvVWlu
dDY0KToKKyAgICAgICAgKiB3dGYvZHRvYS9mYXN0LWR0b2EuY2M6IEFkZGVkLgorICAgICAgICAq
IHd0Zi9kdG9hL2Zhc3QtZHRvYS5oOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9maXhlZC1k
dG9hLmNjOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9maXhlZC1kdG9hLmg6IEFkZGVkLgor
ICAgICAgICAqIHd0Zi9kdG9hL3N0cnRvZC5jYzogQWRkZWQuCisgICAgICAgICogd3RmL2R0b2Ev
c3RydG9kLmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9kdG9hL3V0aWxzLmg6IEFkZGVkLgorICAg
ICAgICAoZG91YmxlX2NvbnZlcnNpb246Ok1heCk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lv
bjo6TWluKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpTdHJMZW5ndGgpOgorICAgICAg
ICAoZG91YmxlX2NvbnZlcnNpb246OlZlY3Rvcjo6VmVjdG9yKToKKyAgICAgICAgKGRvdWJsZV9j
b252ZXJzaW9uOjpWZWN0b3I6OlN1YlZlY3Rvcik6CisgICAgICAgIChkb3VibGVfY29udmVyc2lv
bjo6VmVjdG9yOjpsZW5ndGgpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OlZlY3Rvcjo6
aXNfZW1wdHkpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OlZlY3Rvcjo6c3RhcnQpOgor
ICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OlZlY3Rvcjo6b3BlcmF0b3JbXSk6CisgICAgICAg
IChkb3VibGVfY29udmVyc2lvbjo6VmVjdG9yOjpmaXJzdCk6CisgICAgICAgIChkb3VibGVfY29u
dmVyc2lvbjo6VmVjdG9yOjpsYXN0KToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpTdHJp
bmdCdWlsZGVyOjpTdHJpbmdCdWlsZGVyKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpT
dHJpbmdCdWlsZGVyOjp+U3RyaW5nQnVpbGRlcik6CisgICAgICAgIChkb3VibGVfY29udmVyc2lv
bjo6U3RyaW5nQnVpbGRlcjo6c2l6ZSk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6U3Ry
aW5nQnVpbGRlcjo6cG9zaXRpb24pOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OlN0cmlu
Z0J1aWxkZXI6OlJlc2V0KToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdCdWls
ZGVyOjpBZGRDaGFyYWN0ZXIpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OlN0cmluZ0J1
aWxkZXI6OkFkZFN0cmluZyk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6U3RyaW5nQnVp
bGRlcjo6QWRkU3Vic3RyaW5nKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdC
dWlsZGVyOjpBZGRQYWRkaW5nKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdC
dWlsZGVyOjpGaW5hbGl6ZSk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6U3RyaW5nQnVp
bGRlcjo6aXNfZmluYWxpemVkKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpCaXRDYXN0
KToKKyAgICAgICAgKiB3dGYvd3RmLnByaToKKwogMjAxMS0wOC0xNSAgR2F2aW4gQmFycmFjbG91
Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MjYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCmluZGV4IDM4YmQ5OWRlMzczOTg3NWY4OTUxYWMyNTliN2VkMDQwNjY2NjVj
YmQuLjYyOGM0ZTRjNjZiMzk5YzM5ZGY2ZWFkNWEwODc1MzQ1YjBiOTYxYmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC00NjAsOSArNDYwLDI1IEBAIGph
dmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ3Vy
cmVudFRpbWUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EYXRlTWF0aC5jcHAgXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGF0ZU1hdGguaCBcCi0JU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9EZWNpbWFsTnVtYmVyLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
RGVjaW1hbE51bWJlci5jcHAgXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGVjb2Rlci5o
IFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvYmlnbnVtLWR0b2EuY2MgXAor
ICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9iaWdudW0uY2MgXAorICAgIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmNjIFwKKyAgICBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZGl5LWZwLmNjIFwKKyAgICBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uY2MgXAorICAgIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvZHRvYS9mYXN0LWR0b2EuY2MgXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvZHRvYS9maXhlZC1kdG9hLmNjIFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L2R0b2Evc3RydG9kLmNjIFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvYmln
bnVtLWR0b2EuaCBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS5o
IFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvY2FjaGVkLXBvd2Vycy5oIFwK
KyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZGl5LWZwLmggXAorICAgIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5oIFwKKyAgICBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZG91YmxlLmggXAorICAgIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvZHRvYS9mYXN0LWR0b2EuaCBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9kdG9hL2ZpeGVkLWR0b2EuaCBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9k
dG9hL3N0cnRvZC5oIFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvdXRpbHMu
aCBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EZWNvZGVyLmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvRGVxdWUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9E
aXNhbGxvd0NUeXBlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRG91Ymx5TGlua2Vk
TGlzdC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5leHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCmluZGV4IGU1
NWY2OWQ5ZTNhNGUxOTFkYTY2MGI0NWY4OGNmYjI2ZDViYWRhYTMuLjZkMzEzYjMxZmIxZjlhYzc5
ODk4MTI4Y2Q3MWU5ZDQ3NDljMjhhNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5leHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLmV4cApAQCAtOTksNiArOTksNyBAQCBfV1RGUmVwb3J0QmFja3RyYWNlCiBfV1RGUmVw
b3J0RXJyb3IKIF9XVEZSZXBvcnRGYXRhbEVycm9yCiBfX1pOMTRPcGFxdWVKU1N0cmluZzZjcmVh
dGVFUktOM0pTQzdVU3RyaW5nRQorX19aTjE3ZG91YmxlX2NvbnZlcnNpb24yM0RvdWJsZVRvU3Ry
aW5nQ29udmVydGVyMTlFY21hU2NyaXB0Q29udmVydGVyRXYKIF9fWk4zSlNDMTBIYW5kbGVIZWFw
MTJ3cml0ZUJhcnJpZXJFUE5TXzdKU1ZhbHVlRVJLUzFfCiBfX1pOM0pTQzEwSGFuZGxlSGVhcDRn
cm93RXYKIF9fWk4zSlNDMTBJZGVudGlmaWVyMTFhZGRTbG93Q2FzZUVQTlNfMTJKU0dsb2JhbERh
dGFFUE4zV1RGMTBTdHJpbmdJbXBsRQpAQCAtMzgzLDggKzM4NCw2IEBAIF9fWk4zV1RGMTFPU0Fs
bG9jYXRvcjE2cmVzZXJ2ZUFuZENvbW1pdEVtTlMwXzVVc2FnZUViYmIKIF9fWk4zV1RGMTFPU0Fs
bG9jYXRvcjE4cmVsZWFzZURlY29tbWl0dGVkRVB2bQogX19aTjNXVEYxMWNvbW1lbnRBdG9tRQog
X19aTjNXVEYxMWN1cnJlbnRUaW1lRXYKLV9fWk4zV1RGMTFkdG9hUm91bmREUEVQY2RpUmJSaVJq
Ci1fX1pOM1dURjExZHRvYVJvdW5kU0ZFUGNkaVJiUmlSagogX19aTjNXVEYxMWVtcHR5U3RyaW5n
RXYKIF9fWk4zV1RGMTFmYXN0UmVhbGxvY0VQdm0KIF9fWk4zV1RGMTJBdG9taWNTdHJpbmcxMWFk
ZFNsb3dDYXNlRVBOU18xMFN0cmluZ0ltcGxFCkBAIC00MTMsNyArNDEyLDcgQEAgX19aTjNXVEYx
M2N1cnJlbnRUaHJlYWRFdgogX19aTjNXVEYxM3RyeUZhc3RDYWxsb2NFbW0KIF9fWk4zV1RGMTN0
cnlGYXN0TWFsbG9jRW0KIF9fWk4zV1RGMTRmYXN0TWFsbG9jU2l6ZUVQS3YKLV9fWk4zV1RGMTRu
dW1iZXJUb1N0cmluZ0VkUHQKK19fWk4zV1RGMTRudW1iZXJUb1N0cmluZ0VkUGMKIF9fWk4zV1RG
MTR0cnlGYXN0UmVhbGxvY0VQdm0KIF9fWk4zV1RGMTVUaHJlYWRDb25kaXRpb240d2FpdEVSTlNf
NU11dGV4RQogX19aTjNXVEYxNVRocmVhZENvbmRpdGlvbjZzaWduYWxFdgpAQCAtNDY1LDcgKzQ2
NCw2IEBAIF9fWk4zV1RGM01ENUMxRXYKIF9fWk4zV1RGNFNIQTExMWNvbXB1dGVIYXNoRVJOU182
VmVjdG9ySWhMbTIwRUVFCiBfX1pOM1dURjRTSEExOGFkZEJ5dGVzRVBLaG0KIF9fWk4zV1RGNFNI
QTFDMUV2Ci1fX1pOM1dURjRkdG9hRVBjZFJiUmlSagogX19aTjNXVEY1TXV0ZXg0bG9ja0V2CiBf
X1pOM1dURjVNdXRleDZ1bmxvY2tFdgogX19aTjNXVEY1TXV0ZXg3dHJ5TG9ja0V2CkBAIC01MjIs
NiArNTIwLDcgQEAgX19aTjNXVEY5eG1sbnNBdG9tRQogX19aTjNXVEZlcUVSS05TXzEyQXRvbWlj
U3RyaW5nRVBLYwogX19aTjNXVEZlcUVSS05TXzEyQXRvbWljU3RyaW5nRVJLTlNfNlZlY3Rvckl0
TG0wRUVFCiBfX1pOM1dURmVxRVJLTlNfN0NTdHJpbmdFUzJfCitfX1pOSzE3ZG91YmxlX2NvbnZl
cnNpb24yM0RvdWJsZVRvU3RyaW5nQ29udmVydGVyMTBUb1Nob3J0ZXN0RWRQTlNfMTNTdHJpbmdC
dWlsZGVyRQogX19aTkszSlNDMTBKU0Z1bmN0aW9uMjNpc0hvc3RGdW5jdGlvbk5vbklubGluZUV2
CiBfX1pOSzNKU0MxMUludGVycHJldGVyMTRyZXRyaWV2ZUNhbGxlckVQTlNfOUV4ZWNTdGF0ZUVQ
TlNfMTBKU0Z1bmN0aW9uRQogX19aTkszSlNDMTFJbnRlcnByZXRlcjE4cmV0cmlldmVMYXN0Q2Fs
bGVyRVBOU185RXhlY1N0YXRlRVJpUmxSTlNfN1VTdHJpbmdFUk5TXzdKU1ZhbHVlRQpAQCAtNTc1
LDEwICs1NzQsNiBAQCBfX1pOSzNKU0M4SlNTdHJpbmcxMXJlc29sdmVSb3BlRVBOU185RXhlY1N0
YXRlRQogX19aTkszSlNDOUhhc2hUYWJsZTExY3JlYXRlVGFibGVFUE5TXzEySlNHbG9iYWxEYXRh
RQogX19aTkszSlNDOUhhc2hUYWJsZTExZGVsZXRlVGFibGVFdgogX19aTkszV1RGMTJBdG9taWNT
dHJpbmc1bG93ZXJFdgotX19aTkszV1RGMTNEZWNpbWFsTnVtYmVyMTV0b1N0cmluZ0RlY2ltYWxF
UHRqCi1fX1pOSzNXVEYxM0RlY2ltYWxOdW1iZXIxOXRvU3RyaW5nRXhwb25lbnRpYWxFUHRqCi1f
X1pOSzNXVEYxM0RlY2ltYWxOdW1iZXIyOGJ1ZmZlckxlbmd0aEZvclN0cmluZ0RlY2ltYWxFdgot
X19aTkszV1RGMTNEZWNpbWFsTnVtYmVyMzJidWZmZXJMZW5ndGhGb3JTdHJpbmdFeHBvbmVudGlh
bEV2CiBfX1pOSzNXVEY2U3RyaW5nMTF0b0ludFN0cmljdEVQYmkKIF9fWk5LM1dURjZTdHJpbmcx
MnRvVUludFN0cmljdEVQYmkKIF9fWk5LM1dURjZTdHJpbmcxM3RvSW50NjRTdHJpY3RFUGJpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGRlNjBhN2Y2ZGU0NzAzYzA0OTMyZTZiYWIx
ZjZiNGE5NzZjNTM3NWEuLmRmMjEyYzlmNGFmZjRmZTQ3NmZhYzk4ZjUyMTQyYTliZjkxYjUxYTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00OCw3ICs0OCw2IEBACiAJCTBCREZG
QUUwMEZDNjE5MjkwMEQ2OUVGNCAvKiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBCREZGQUQ0MEZDNjE3MTAwMEQ2
OUVGNCAvKiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwQkRGRkFFMTBGQzYxOTMxMDBENjlFRjQgLyogT3du
RmFzdE1hbGxvY1B0ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEJERkZBRDEwRkM2MTZFQzAwRDY5RUY0IC8qIE93bkZhc3RNYWxsb2NQdHIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwQkYyOEEyOTEx
QTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQkYyOEEyODExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxp
bWl0cy5jcHAgKi87IH07Ci0JCTBGMjk0NzlDMTI2RTY5OEMwMEIzQUJGNSAvKiBEZWNpbWFsTnVt
YmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
Mjk0NzlCMTI2RTY5OEMwMEIzQUJGNSAvKiBEZWNpbWFsTnVtYmVyLmNwcCAqLzsgfTsKIAkJMTQw
MDA2NzcxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMgLyog
T1NBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkxNDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY5MjEy
QTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi87IH07CiAJCTE0MDU2NkM0
MTA3RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4OTRENTBGQUZCQTJEMDAwMDE4NjUg
LyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAtMjQ4LDcgKzI0Nyw2IEBACiAJCTg2
MDE2MUU2MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODYwMTYxRTIwRjNBODND
MTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggKi87IH07CiAJCTg2MjZCRUNG
MTE5MjhFMzkwMDc4MkZBQiAvKiBTdHJpbmdTdGF0aWNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MjZCRUNFMTE5MjhFMzkwMDc4MkZBQiAvKiBT
dHJpbmdTdGF0aWNzLmNwcCAqLzsgfTsKIAkJODYyN0U1RUMxMUYxMjgxOTAwQTMxM0I1IC8qIFBh
Z2VBbGxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4NjI3RTVFQTExRjEyODE5MDBBMzEzQjUgLyogUGFnZUFsbG9jYXRpb24uaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk4NjJBRjRCNjEyMjM5
QzdCMDAyNEU1QjggLyogRGVjaW1hbE51bWJlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODYyQUY0QjUxMjIzOUM3QjAwMjRFNUI4IC8qIERlY2ltYWxO
dW1iZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk4NjNCMjNFMDBGQzYxMTg5MDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjNCMjNERjBGQzYw
RTYyMDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODY0MzhGQzQxMjY1NTAzRTAwRTBERkNB
IC8qIFN0cmluZ0J1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODY0MzhGQzMxMjY1NTAzRTAwRTBERkNBIC8qIFN0cmluZ0J1aWxkZXIuY3Bw
ICovOyB9OwogCQk4NjU2NTc0MjExNUJFM0RBMDAyOTFGNDAgLyogQ1N0cmluZy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjU2NTc0MDExNUJFM0RB
MDAyOTFGNDAgLyogQ1N0cmluZy5jcHAgKi87IH07CkBAIC01OTMsNiArNTkxLDI1IEBACiAJCUJD
RkQ4QzkyMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGRDhDOTAwRUVCMkVFNzAwMjgzODQ4IC8q
IEp1bXBUYWJsZS5jcHAgKi87IH07CiAJCUJDRkQ4QzkzMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1w
VGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
RkQ4QzkxMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuaCAqLzsgfTsKIAkJQzBBMjcyNjMw
RTUwQTA2MzAwRTk2RTE1IC8qIE5vdEZvdW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDMEEyNzIzRjBFNTA5RjFFMDBFOTZFMTUgLyogTm90Rm91bmQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDMjJD
NTJGMTEzRkFGNkVGMDBCN0RDMEQgLyogYmlnbnVtLWR0b2EuY2MgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTI5MDEzRkFGNkVGMDBCN0RDMEQgLyog
YmlnbnVtLWR0b2EuY2MgKi87IH07CisJCUMyMkM1MkYyMTNGQUY2RUYwMEI3REMwRCAvKiBiaWdu
dW0tZHRvYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzIyQzUyOTExM0ZBRjZFRjAwQjdEQzBEIC8qIGJpZ251bS1kdG9hLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIyQzUyRjMxM0ZBRjZFRjAwQjdE
QzBEIC8qIGJpZ251bS5jYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEMyMkM1MjkyMTNGQUY2RUYwMEI3REMwRCAvKiBiaWdudW0uY2MgKi87IH07CisJCUMy
MkM1MkY0MTNGQUY2RUYwMEI3REMwRCAvKiBiaWdudW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1MjkzMTNGQUY2RUYwMEI3REMwRCAvKiBiaWdu
dW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlD
MjJDNTJGNTEzRkFGNkVGMDBCN0RDMEQgLyogY2FjaGVkLXBvd2Vycy5jYyBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1Mjk0MTNGQUY2RUYwMEI3REMw
RCAvKiBjYWNoZWQtcG93ZXJzLmNjICovOyB9OworCQlDMjJDNTJGNjEzRkFGNkVGMDBCN0RDMEQg
LyogY2FjaGVkLXBvd2Vycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzIyQzUyOTUxM0ZBRjZFRjAwQjdEQzBEIC8qIGNhY2hlZC1wb3dlcnMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDMjJDNTJGNzEz
RkFGNkVGMDBCN0RDMEQgLyogZGl5LWZwLmNjIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQzIyQzUyOTcxM0ZBRjZFRjAwQjdEQzBEIC8qIGRpeS1mcC5jYyAq
LzsgfTsKKwkJQzIyQzUyRjgxM0ZBRjZFRjAwQjdEQzBEIC8qIGRpeS1mcC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyQzUyOTgxM0ZBRjZFRjAwQjdE
QzBEIC8qIGRpeS1mcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCUMyMkM1MkY5MTNGQUY2RUYwMEI3REMwRCAvKiBkb3VibGUtY29udmVyc2lvbi5j
YyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1Mjk5
MTNGQUY2RUYwMEI3REMwRCAvKiBkb3VibGUtY29udmVyc2lvbi5jYyAqLzsgfTsKKwkJQzIyQzUy
RkExM0ZBRjZFRjAwQjdEQzBEIC8qIGRvdWJsZS1jb252ZXJzaW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTI5QTEzRkFGNkVGMDBCN0RDMEQg
LyogZG91YmxlLWNvbnZlcnNpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQlDMjJDNTJGQjEzRkFGNkVGMDBCN0RDMEQgLyogZG91YmxlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTI5QjEzRkFG
NkVGMDBCN0RDMEQgLyogZG91YmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJQzIyQzUyRkMxM0ZBRjZFRjAwQjdEQzBEIC8qIGZhc3QtZHRvYS5j
YyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1MjlD
MTNGQUY2RUYwMEI3REMwRCAvKiBmYXN0LWR0b2EuY2MgKi87IH07CisJCUMyMkM1MkZEMTNGQUY2
RUYwMEI3REMwRCAvKiBmYXN0LWR0b2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEMyMkM1MjlEMTNGQUY2RUYwMEI3REMwRCAvKiBmYXN0LWR0b2EuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDMjJDNTJG
RTEzRkFGNkVGMDBCN0RDMEQgLyogZml4ZWQtZHRvYS5jYyBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1MjlFMTNGQUY2RUYwMEI3REMwRCAvKiBmaXhl
ZC1kdG9hLmNjICovOyB9OworCQlDMjJDNTJGRjEzRkFGNkVGMDBCN0RDMEQgLyogZml4ZWQtZHRv
YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyQzUy
OUYxM0ZBRjZFRjAwQjdEQzBEIC8qIGZpeGVkLWR0b2EuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDMjJDNTMwMDEzRkFGNkVGMDBCN0RDMEQgLyog
TWFrZWZpbGUgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
MjJDNTJBMTEzRkFGNkVGMDBCN0RDMEQgLyogTWFrZWZpbGUgKi87IH07CisJCUMyMkM1MzEzMTNG
QUY2RUYwMEI3REMwRCAvKiBzdHJ0b2QuY2MgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTJCOTEzRkFGNkVGMDBCN0RDMEQgLyogc3RydG9kLmNjICov
OyB9OworCQlDMjJDNTMxNDEzRkFGNkVGMDBCN0RDMEQgLyogc3RydG9kLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTJCQTEzRkFGNkVGMDBCN0RD
MEQgLyogc3RydG9kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJQzIyQzUzMTUxM0ZBRjZFRjAwQjdEQzBEIC8qIHV0aWxzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTJCQjEzRkFGNkVGMDBCN0RD
MEQgLyogdXRpbHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlEN0E0NkE0RjEzMzhGRkVBMDBFRDY5NUMgLyogRHluYW1pY0Fubm90YXRpb25zLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBENzVBRjU5NjEy
RjhDQjk1MDBGQzBBREYgLyogRHluYW1pY0Fubm90YXRpb25zLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJREQzNzdDQkMxMjA3MkMxODAwNkEyNTE3
IC8qIEJpdG1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gREQzNzdDQkIxMjA3MkMxODAwNkEyNTE3IC8qIEJpdG1hcC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCURERjdBQkQ0MTFGNjBFRDIwMDEwOEUz
NiAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IERERjdBQkQyMTFGNjBFRDIwMDEwOEUzNiAvKiBHQ0FjdGl2aXR5Q2Fs
bGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtNzI4LDcgKzc0NSw2IEBACiAJCTBCREZGQUQxMEZDNjE2RUMwMEQ2OUVGNCAvKiBPd25GYXN0
TWFsbG9jUHRyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE93bkZhc3RNYWxs
b2NQdHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEJERkZBRDQwRkM2MTcxMDAw
RDY5RUY0IC8qIENyb3NzVGhyZWFkUmVmQ291bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2l6ZUxpbWl0cy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMjk0NzlCMTI2RTY5OEMwMEIzQUJGNSAvKiBEZWNpbWFs
TnVtYmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlY2ltYWxO
dW1iZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAwMDY3NjEyQTZGNzgz
MDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gT1NBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2OTIx
MkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gT1NBbGxvY2F0b3JQb3NpeC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTE0MEQxN0Q2MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQmFzZVByaXZhdGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTkzNyw3ICs5NTMsNiBAQAogCQk4NjAxNjFFMjBG
M0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYyNkJFQ0UxMTkyOEUzOTAwNzgyRkFCIC8qIFN0cmluZ1N0
YXRpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU3RyaW5nU3Rh
dGljcy5jcHA7IHBhdGggPSB0ZXh0L1N0cmluZ1N0YXRpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk4NjI3RTVFQTExRjEyODE5MDBBMzEzQjUgLyogUGFnZUFsbG9jYXRpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFnZUFsbG9jYXRpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODYyQUY0QjUxMjIzOUM3QjAwMjRFNUI4IC8qIERl
Y2ltYWxOdW1iZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVjaW1hbE51
bWJlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjNCMjNERjBGQzYwRTYyMDA3
MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk4NjQzOEZDMzEyNjU1MDNFMDBFMERGQ0EgLyogU3RyaW5nQnVpbGRlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTdHJpbmdCdWlsZGVyLmNwcDsgcGF0
aCA9IHRleHQvU3RyaW5nQnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTg2NTY1NzQwMTE1QkUzREEwMDI5MUY0MCAvKiBDU3RyaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENTdHJpbmcuY3BwOyBwYXRoID0gdGV4dC9DU3RyaW5nLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNTMsNiArMTI2OCwzMCBAQAogCQlC
Q0ZEOEM5MDBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEp1bXBUYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDRkQ4QzkxMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSnVtcFRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMwQTI3MjNGMEU1MDlGMUUwMEU5NkUxNSAvKiBOb3RGb3VuZC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb3RGb3VuZC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlDMjJDNTI5MDEzRkFGNkVGMDBCN0RDMEQgLyogYmlnbnVtLWR0b2EuY2Mg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSAiYmlnbnVtLWR0b2EuY2MiOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTI5MTEzRkFGNkVGMDBCN0RDMEQgLyog
YmlnbnVtLWR0b2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gImJpZ251bS1k
dG9hLmgiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTI5MjEzRkFGNkVGMDBC
N0RDMEQgLyogYmlnbnVtLmNjICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
YmlnbnVtLmNjOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTI5MzEzRkFGNkVG
MDBCN0RDMEQgLyogYmlnbnVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGJp
Z251bS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTI5NDEzRkFGNkVGMDBC
N0RDMEQgLyogY2FjaGVkLXBvd2Vycy5jYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9ICJjYWNoZWQtcG93ZXJzLmNjIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QzIyQzUyOTUxM0ZBRjZFRjAwQjdEQzBEIC8qIGNhY2hlZC1wb3dlcnMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gImNhY2hlZC1wb3dlcnMuaCI7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUMyMkM1Mjk2MTNGQUY2RUYwMEI3REMwRCAvKiBDT1BZSU5HICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IENPUFlJTkc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMy
MkM1Mjk3MTNGQUY2RUYwMEI3REMwRCAvKiBkaXktZnAuY2MgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSAiZGl5LWZwLmNjIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQzIyQzUyOTgxM0ZBRjZFRjAwQjdEQzBEIC8qIGRpeS1mcC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSAiZGl5LWZwLmgiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlDMjJDNTI5OTEzRkFGNkVGMDBCN0RDMEQgLyogZG91YmxlLWNvbnZlcnNpb24uY2MgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSAiZG91YmxlLWNvbnZlcnNpb24uY2MiOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTI5QTEzRkFGNkVGMDBCN0RDMEQgLyog
ZG91YmxlLWNvbnZlcnNpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gImRv
dWJsZS1jb252ZXJzaW9uLmgiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTI5
QjEzRkFGNkVGMDBCN0RDMEQgLyogZG91YmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IGRvdWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTI5QzEz
RkFGNkVGMDBCN0RDMEQgLyogZmFzdC1kdG9hLmNjICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gImZhc3QtZHRvYS5jYyI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUMyMkM1MjlEMTNGQUY2RUYwMEI3REMwRCAvKiBmYXN0LWR0b2EuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gImZhc3QtZHRvYS5oIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQzIyQzUyOUUxM0ZBRjZFRjAwQjdEQzBEIC8qIGZpeGVkLWR0b2EuY2MgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSAiZml4ZWQtZHRvYS5jYyI7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUMyMkM1MjlGMTNGQUY2RUYwMEI3REMwRCAvKiBmaXhlZC1kdG9h
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9ICJmaXhlZC1kdG9hLmgiOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTJBMDEzRkFGNkVGMDBCN0RDMEQgLyogTElD
RU5TRSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBMSUNFTlNFOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlDMjJDNTJBMTEzRkFGNkVGMDBCN0RDMEQgLyogTWFrZWZpbGUgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLm1ha2U7IHBhdGggPSBNYWtlZmlsZTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQzIyQzUyQTIxM0ZBRjZFRjAwQjdEQzBEIC8qIFJFQURNRSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBSRUFETUU7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMkM1MkEz
MTNGQUY2RUYwMEI3REMwRCAvKiBTQ29uc2NyaXB0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFND
b25zY3JpcHQ7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMkM1MkE0MTNGQUY2RUYw
MEI3REMwRCAvKiBTQ29uc3RydWN0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNDb25zdHJ1Y3Q7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMkM1MkI5MTNGQUY2RUYwMEI3REMwRCAv
KiBzdHJ0b2QuY2MgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBzdHJ0b2Qu
Y2M7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMkM1MkJBMTNGQUY2RUYwMEI3REMw
RCAvKiBzdHJ0b2QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gc3RydG9kLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMkM1MkJCMTNGQUY2RUYwMEI3REMwRCAv
KiB1dGlscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1dGlscy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMjEyMDIyODBBRDQzMTBDMDBFRDc5QjYgLyogRGF0
ZUNvbnZlcnNpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERh
dGVDb252ZXJzaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDIxMjAyMjkw
QUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252ZXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBEYXRlQ29udmVyc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlENzVBRjU5NTEyRjhDQjk1MDBGQzBBREYgLyogRHluYW1pY0Fubm90YXRpb25zLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IER5bmFtaWNBbm5vdGF0aW9ucy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjUyLDYgKzE2OTEsNyBAQAogCQk2
NTE2MkVGMTA4RTZBMjFDMDA3NTU2Q0QgLyogd3RmICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlDMjJDNTI0ODEzRkFGNkVGMDBCN0RDMEQgLyogZHRvYSAq
LywKIAkJCQkwNkQzNThBMDBEQUFEOUM0MDAzQjE3NEUgLyogbWFjICovLAogCQkJCTg2NTY1NzNF
MTE1QkUzNTIwMDI5MUY0MCAvKiB0ZXh0ICovLAogCQkJCUUxOTU2NzhEMDlFN0NGMTIwMEI4OUQx
MyAvKiB1bmljb2RlICovLApAQCAtMTY3Nyw4ICsxNzE3LDYgQEAKIAkJCQkxODBCOUFGMDBGMTZD
NTY5MDA5QkRCQzUgLyogQ3VycmVudFRpbWUuaCAqLywKIAkJCQk0MTM1OUNGNDBGREQ4OUNCMDAy
MDYxODAgLyogRGF0ZU1hdGguY3BwICovLAogCQkJCTQxMzU5Q0Y1MEZERDg5Q0IwMDIwNjE4MCAv
KiBEYXRlTWF0aC5oICovLAotCQkJCTBGMjk0NzlCMTI2RTY5OEMwMEIzQUJGNSAvKiBEZWNpbWFs
TnVtYmVyLmNwcCAqLywKLQkJCQk4NjJBRjRCNTEyMjM5QzdCMDAyNEU1QjggLyogRGVjaW1hbE51
bWJlci5oICovLAogCQkJCTUxMzVGQUQ1MTJEMjY4NTYwMDNDMDgzQiAvKiBEZWNvZGVyLmggKi8s
CiAJCQkJNTE4NjExMUQwQ0M4MjQ4MzAwODE0MTJCIC8qIERlcXVlLmggKi8sCiAJCQkJOTM4QzRG
NkIwQ0EwNkJDRTAwRDkzMTBBIC8qIERpc2FsbG93Q1R5cGUuaCAqLywKQEAgLTIxNzksNiArMjIx
NywzNyBAQAogCQkJcGF0aCA9IGJ5dGVjb2RlOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
IAkJfTsKKwkJQzIyQzUyNDgxM0ZBRjZFRjAwQjdEQzBEIC8qIGR0b2EgKi8gPSB7CisJCQlpc2Eg
PSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUMyMkM1MjkwMTNGQUY2RUYwMEI3REMw
RCAvKiBiaWdudW0tZHRvYS5jYyAqLywKKwkJCQlDMjJDNTI5MTEzRkFGNkVGMDBCN0RDMEQgLyog
YmlnbnVtLWR0b2EuaCAqLywKKwkJCQlDMjJDNTI5MjEzRkFGNkVGMDBCN0RDMEQgLyogYmlnbnVt
LmNjICovLAorCQkJCUMyMkM1MjkzMTNGQUY2RUYwMEI3REMwRCAvKiBiaWdudW0uaCAqLywKKwkJ
CQlDMjJDNTI5NDEzRkFGNkVGMDBCN0RDMEQgLyogY2FjaGVkLXBvd2Vycy5jYyAqLywKKwkJCQlD
MjJDNTI5NTEzRkFGNkVGMDBCN0RDMEQgLyogY2FjaGVkLXBvd2Vycy5oICovLAorCQkJCUMyMkM1
Mjk2MTNGQUY2RUYwMEI3REMwRCAvKiBDT1BZSU5HICovLAorCQkJCUMyMkM1Mjk3MTNGQUY2RUYw
MEI3REMwRCAvKiBkaXktZnAuY2MgKi8sCisJCQkJQzIyQzUyOTgxM0ZBRjZFRjAwQjdEQzBEIC8q
IGRpeS1mcC5oICovLAorCQkJCUMyMkM1Mjk5MTNGQUY2RUYwMEI3REMwRCAvKiBkb3VibGUtY29u
dmVyc2lvbi5jYyAqLywKKwkJCQlDMjJDNTI5QTEzRkFGNkVGMDBCN0RDMEQgLyogZG91YmxlLWNv
bnZlcnNpb24uaCAqLywKKwkJCQlDMjJDNTI5QjEzRkFGNkVGMDBCN0RDMEQgLyogZG91YmxlLmgg
Ki8sCisJCQkJQzIyQzUyOUMxM0ZBRjZFRjAwQjdEQzBEIC8qIGZhc3QtZHRvYS5jYyAqLywKKwkJ
CQlDMjJDNTI5RDEzRkFGNkVGMDBCN0RDMEQgLyogZmFzdC1kdG9hLmggKi8sCisJCQkJQzIyQzUy
OUUxM0ZBRjZFRjAwQjdEQzBEIC8qIGZpeGVkLWR0b2EuY2MgKi8sCisJCQkJQzIyQzUyOUYxM0ZB
RjZFRjAwQjdEQzBEIC8qIGZpeGVkLWR0b2EuaCAqLywKKwkJCQlDMjJDNTJBMDEzRkFGNkVGMDBC
N0RDMEQgLyogTElDRU5TRSAqLywKKwkJCQlDMjJDNTJBMTEzRkFGNkVGMDBCN0RDMEQgLyogTWFr
ZWZpbGUgKi8sCisJCQkJQzIyQzUyQTIxM0ZBRjZFRjAwQjdEQzBEIC8qIFJFQURNRSAqLywKKwkJ
CQlDMjJDNTJBMzEzRkFGNkVGMDBCN0RDMEQgLyogU0NvbnNjcmlwdCAqLywKKwkJCQlDMjJDNTJB
NDEzRkFGNkVGMDBCN0RDMEQgLyogU0NvbnN0cnVjdCAqLywKKwkJCQlDMjJDNTJCOTEzRkFGNkVG
MDBCN0RDMEQgLyogc3RydG9kLmNjICovLAorCQkJCUMyMkM1MkJBMTNGQUY2RUYwMEI3REMwRCAv
KiBzdHJ0b2QuaCAqLywKKwkJCQlDMjJDNTJCQjEzRkFGNkVGMDBCN0RDMEQgLyogdXRpbHMuaCAq
LywKKwkJCSk7CisJCQlwYXRoID0gZHRvYTsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJ
CX07CiAJCUUxOTU2NzhEMDlFN0NGMTIwMEI4OUQxMyAvKiB1bmljb2RlICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTIyNzksNyArMjM0OCw2IEBACiAJCQkJ
QkMxOEMzRkEwRTE2RjVDRDAwQjM0NDYwIC8qIERlYnVnZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzMxMzU2NDBGMzAyRkEzMDAzREZEM0EgLyogRGVidWdnZXJBY3RpdmF0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzNGQjBFMTZGNUNEMDBCMzQ0NjAgLyogRGVidWdnZXJDYWxsRnJh
bWUuaCBpbiBIZWFkZXJzICovLAotCQkJCTg2MkFGNEI2MTIyMzlDN0IwMDI0RTVCOCAvKiBEZWNp
bWFsTnVtYmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTM1RkFGMjEyRDI2QUNFMDAzQzA4M0Ig
LyogRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRkMwRTE2RjVDRDAwQjM0NDYw
IC8qIERlcXVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDQTRGMTEzMkVBQTZEMDAyQjJBRDcg
LyogREZHQWxpYXNUcmFja2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTI0NjQsNiArMjUzMiwxNiBA
QAogCQkJCTkwRDM0NjlDMEUyODUyODAwMDk0OTJFRSAvKiBSZWZDb3VudGVkTGVha0NvdW50ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDU4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWZQdHIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDU5MEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWZQdHJI
YXNoTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQlDMjJDNTJGMjEzRkFGNkVGMDBCN0RDMEQgLyog
YmlnbnVtLWR0b2EuaCBpbiBIZWFkZXJzICovLAorCQkJCUMyMkM1MkY0MTNGQUY2RUYwMEI3REMw
RCAvKiBiaWdudW0uaCBpbiBIZWFkZXJzICovLAorCQkJCUMyMkM1MkY2MTNGQUY2RUYwMEI3REMw
RCAvKiBjYWNoZWQtcG93ZXJzLmggaW4gSGVhZGVycyAqLywKKwkJCQlDMjJDNTJGODEzRkFGNkVG
MDBCN0RDMEQgLyogZGl5LWZwLmggaW4gSGVhZGVycyAqLywKKwkJCQlDMjJDNTJGQTEzRkFGNkVG
MDBCN0RDMEQgLyogZG91YmxlLWNvbnZlcnNpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUMyMkM1
MkZCMTNGQUY2RUYwMEI3REMwRCAvKiBkb3VibGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUMyMkM1
MkZEMTNGQUY2RUYwMEI3REMwRCAvKiBmYXN0LWR0b2EuaCBpbiBIZWFkZXJzICovLAorCQkJCUMy
MkM1MkZGMTNGQUY2RUYwMEI3REMwRCAvKiBmaXhlZC1kdG9hLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlDMjJDNTMxNDEzRkFGNkVGMDBCN0RDMEQgLyogc3RydG9kLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlDMjJDNTMxNTEzRkFGNkVGMDBCN0RDMEQgLyogdXRpbHMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDNDVBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWdFeHAuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUExNzEyQjNGMTFDN0IyMjgwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkNEMjAyQzIwRTE3MDZBNzAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmggaW4g
SGVhZGVycyAqLywKQEAgLTI4NzAsNyArMjk0OCw2IEBACiAJCQkJMTQyODA4MjMxMDdFQzAyQzAw
MTNFN0IyIC8qIERlYnVnZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMzEzNTY1MEYzMDJG
QTMwMDNERkQzQSAvKiBEZWJ1Z2dlckFjdGl2YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ5NTU5RUUwRERDRERGNzAwNjQ4MDg3IC8qIERlYnVnZ2VyQ2FsbEZyYW1lLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCTBGMjk0NzlDMTI2RTY5OEMwMEIzQUJGNSAvKiBEZWNpbWFsTnVtYmVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5REM0MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRl
Q29kZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkVDOURDNzEzMjhERjgyMDAyQjJB
RDcgLyogREZHR3JhcGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQzkxMzI4REY4MjAw
MkIyQUQ3IC8qIERGR0pJVENvZGVHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMDMw
LDYgKzMxMDcsMTUgQEAKIAkJCQkxNEQyRjNEQTEzOUY0QkUyMDA0OTEwMzEgLyogTmV3U3BhY2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyQTFEODMxM0ExOUM4NDAwOURBNUZFIC8qIE9sZFNw
YWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0QkE3QTk3MTNBQURGRjgwMDVCN0MyQyAvKiBI
ZWFwLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUMyMkM1MkYxMTNGQUY2RUYwMEI3REMwRCAvKiBi
aWdudW0tZHRvYS5jYyBpbiBTb3VyY2VzICovLAorCQkJCUMyMkM1MkYzMTNGQUY2RUYwMEI3REMw
RCAvKiBiaWdudW0uY2MgaW4gU291cmNlcyAqLywKKwkJCQlDMjJDNTJGNTEzRkFGNkVGMDBCN0RD
MEQgLyogY2FjaGVkLXBvd2Vycy5jYyBpbiBTb3VyY2VzICovLAorCQkJCUMyMkM1MkY3MTNGQUY2
RUYwMEI3REMwRCAvKiBkaXktZnAuY2MgaW4gU291cmNlcyAqLywKKwkJCQlDMjJDNTJGOTEzRkFG
NkVGMDBCN0RDMEQgLyogZG91YmxlLWNvbnZlcnNpb24uY2MgaW4gU291cmNlcyAqLywKKwkJCQlD
MjJDNTJGQzEzRkFGNkVGMDBCN0RDMEQgLyogZmFzdC1kdG9hLmNjIGluIFNvdXJjZXMgKi8sCisJ
CQkJQzIyQzUyRkUxM0ZBRjZFRjAwQjdEQzBEIC8qIGZpeGVkLWR0b2EuY2MgaW4gU291cmNlcyAq
LywKKwkJCQlDMjJDNTMwMDEzRkFGNkVGMDBCN0RDMEQgLyogTWFrZWZpbGUgaW4gU291cmNlcyAq
LywKKwkJCQlDMjJDNTMxMzEzRkFGNkVGMDBCN0RDMEQgLyogc3RydG9kLmNjIGluIFNvdXJjZXMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXpl
VGhyZWFkaW5nLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVU
aHJlYWRpbmcuY3BwCmluZGV4IDcxNjU0MjFmOTVhZWY5ZjhiMDllOTAyNGYwNzBhYzA1ZjM2NjI4
NWUuLmZmZTUyZjI5ZTQzMzE2ZDViMzM0ZGU3YjZjYzM4ZDQxOTA1ZDhlOTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3Bw
CkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgogCiAj
aW5jbHVkZSAiSGVhcC5oIgotI2luY2x1ZGUgImR0b2EuaCIKKyNpbmNsdWRlIDx3dGYvZHRvYS9j
YWNoZWQtcG93ZXJzLmg+CiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIkpTR2xv
YmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiVVN0cmluZy5oIgpAQCAtNDcsNiArNDcsNyBAQCBzdGF0
aWMgcHRocmVhZF9vbmNlX3QgaW5pdGlhbGl6ZVRocmVhZGluZ0tleU9uY2UgPSBQVEhSRUFEX09O
Q0VfSU5JVDsKIAogc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZ09uY2UoKQogeworICAg
IGRvdWJsZV9jb252ZXJzaW9uOjppbml0aWFsaXplKCk7CiAgICAgV1RGOjppbml0aWFsaXplVGhy
ZWFkaW5nKCk7CiAgICAgSlNHbG9iYWxEYXRhOjpzdG9yZVZQdHJzKCk7CiAjaWYgRU5BQkxFKEpT
Q19NVUxUSVBMRV9USFJFQURTKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L051bWJlclByb3RvdHlwZS5jcHAKaW5kZXggNjc5Zjc0NzlkZWM3ZWViNTQzZWU5ZTYyMzMzZjA2
ZjgzZDQ5ZWY0ZC4uYmQ5ZDNmMzA3NGNkYmU0MDFlYmUwN2ZhNzA3NTFiZjI5ODk2M2Y4NyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3Bw
CkBAIC0zMCw5ICszMCwxMSBAQAogI2luY2x1ZGUgIlVpbnQxNldpdGhGcmFjdGlvbi5oIgogI2lu
Y2x1ZGUgImR0b2EuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0
Zi9EZWNpbWFsTnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uaD4K
KwordXNpbmcgbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uOwogCiBuYW1lc3BhY2UgSlNDIHsK
IApAQCAtMzM5LDEyICszNDEsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1i
ZXJQcm90b0Z1bmNUb0V4cG9uZW50aWFsKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBVU3RyaW5nOjpudW1iZXIoeCkpKTsKIAog
ICAgIC8vIFJvdW5kIGlmIHRoZSBhcmd1bWVudCBpcyBub3QgdW5kZWZpbmVkLCBhbHdheXMgZm9y
bWF0IGFzIGV4cG9uZW50aWFsLgotICAgIE51bWJlclRvU3RyaW5nQnVmZmVyIGJ1ZmZlcjsKLSAg
ICB1bnNpZ25lZCBsZW5ndGggPSBpc1VuZGVmaW5lZAotICAgICAgICA/IERlY2ltYWxOdW1iZXIo
eCkudG9TdHJpbmdFeHBvbmVudGlhbChidWZmZXIsIFdURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJM
ZW5ndGgpCi0gICAgICAgIDogRGVjaW1hbE51bWJlcih4LCBSb3VuZGluZ1NpZ25pZmljYW50Rmln
dXJlcywgZGVjaW1hbFBsYWNlc0luRXhwb25lbnQgKyAxKS50b1N0cmluZ0V4cG9uZW50aWFsKGJ1
ZmZlciwgV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCk7Ci0KLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmcoYnVmZmVyLCBsZW5ndGgpKSk7Cisg
ICAgY2hhciBidWZmZXJbV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aF07CisgICAgU3Ry
aW5nQnVpbGRlciBidWlsZGVyKGJ1ZmZlciwgV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0
aCk7CisgICAgY29uc3QgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXImIGNvbnZlcnRlciA9IERvdWJs
ZVRvU3RyaW5nQ29udmVydGVyOjpFY21hU2NyaXB0Q29udmVydGVyKCk7CisgICAgYnVpbGRlci5S
ZXNldCgpOworICAgIGlzVW5kZWZpbmVkCisgICAgICAgID8gY29udmVydGVyLlRvRXhwb25lbnRp
YWwoeCwgLTEsICZidWlsZGVyKQorICAgICAgICA6IGNvbnZlcnRlci5Ub0V4cG9uZW50aWFsKHgs
IGRlY2ltYWxQbGFjZXNJbkV4cG9uZW50LCAmYnVpbGRlcik7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1N0cmluZyhleGVjLCBVU3RyaW5nKGJ1aWxkZXIuRmluYWxpemUoKSkpKTsKIH0K
IAogLy8gdG9GaXhlZCBjb252ZXJ0cyBhIG51bWJlciB0byBhIHN0cmluZywgYWx3YXlzIGZvcm1h
dHRpbmcgYXMgYW4gYSBkZWNpbWFsIGZyYWN0aW9uLgpAQCAtMzc2LDEwICszODAsMTIgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb0ZpeGVkKEV4ZWNTdGF0
ZSogZXhlYykKICAgICAvLyBoYW5kbGVkIGJ5IG51bWJlclRvU3RyaW5nLgogICAgIEFTU0VSVChp
c2Zpbml0ZSh4KSk7CiAKLSAgICAvLyBDb252ZXJ0IHRvIGRlY2ltYWwgd2l0aCByb3VuZGluZywg
YW5kIGZvcm1hdCBhcyBkZWNpbWFsLgotICAgIE51bWJlclRvU3RyaW5nQnVmZmVyIGJ1ZmZlcjsK
LSAgICB1bnNpZ25lZCBsZW5ndGggPSBEZWNpbWFsTnVtYmVyKHgsIFJvdW5kaW5nRGVjaW1hbFBs
YWNlcywgZGVjaW1hbFBsYWNlcykudG9TdHJpbmdEZWNpbWFsKGJ1ZmZlciwgV1RGOjpOdW1iZXJU
b1N0cmluZ0J1ZmZlckxlbmd0aCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmlu
ZyhleGVjLCBVU3RyaW5nKGJ1ZmZlciwgbGVuZ3RoKSkpOworICAgIGNoYXIgYnVmZmVyW1dURjo6
TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGhdOworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcihi
dWZmZXIsIFdURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgpOworICAgIGNvbnN0IERvdWJs
ZVRvU3RyaW5nQ29udmVydGVyJiBjb252ZXJ0ZXIgPSBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6
RWNtYVNjcmlwdENvbnZlcnRlcigpOworICAgIGJ1aWxkZXIuUmVzZXQoKTsKKyAgICBjb252ZXJ0
ZXIuVG9GaXhlZCh4LCBkZWNpbWFsUGxhY2VzLCAmYnVpbGRlcik7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBVU3RyaW5nKGJ1aWxkZXIuRmluYWxpemUoKSkpKTsK
IH0KIAogLy8gdG9QcmVjaXNpb24gY29udmVydHMgYSBudW1iZXIgdG8gYSBzdHJpbmcsIHRha2Vp
bmcgYW4gYXJndW1lbnQgc3BlY2lmeWluZyBhCkBAIC00MTIsMTcgKzQxOCwxMiBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1RvUHJlY2lzaW9uKEV4ZWNTdGF0
ZSogZXhlYykKICAgICBpZiAoIWlzZmluaXRlKHgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmc6Om51bWJlcih4KSkpOwogCi0gICAgLy8gQ29u
dmVydCB0byBkZWNpbWFsIHdpdGggcm91bmRpbmcuCi0gICAgRGVjaW1hbE51bWJlciBudW1iZXIo
eCwgUm91bmRpbmdTaWduaWZpY2FudEZpZ3VyZXMsIHNpZ25pZmljYW50RmlndXJlcyk7Ci0gICAg
Ly8gSWYgbnVtYmVyIGlzIGluIHRoZSByYW5nZSAxZS02IDw9IHggPCBwb3coMTAsIHNpZ25pZmlj
YW50RmlndXJlcykgdGhlbiBmb3JtYXQKLSAgICAvLyBhcyBkZWNpbWFsLiBPdGhlcndpc2UsIGZv
cm1hdCB0aGUgbnVtYmVyIGFzIGFuIGV4cG9uZW50aWFsLiBEZWNpbWFsIGZvcm1hdAotICAgIC8v
IGRlbWFuZHMgYSBtaW5pbXVtIG9mIChleHBvbmVudCArIDEpIGRpZ2l0cyB0byByZXByZXNlbnQg
YSBudW1iZXIsIGZvciBleGFtcGxlCi0gICAgLy8gMTIzNCAoMS4yMzRlKzMpIHJlcXVpcmVzIDQg
ZGlnaXRzLiAoU2VlIEVDTUEtMjYyIDE1LjcuNC43LjEwLmMpCi0gICAgTnVtYmVyVG9TdHJpbmdC
dWZmZXIgYnVmZmVyOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IG51bWJlci5leHBvbmVudCgpID49
IC02ICYmIG51bWJlci5leHBvbmVudCgpIDwgc2lnbmlmaWNhbnRGaWd1cmVzCi0gICAgICAgID8g
bnVtYmVyLnRvU3RyaW5nRGVjaW1hbChidWZmZXIsIFdURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJM
ZW5ndGgpCi0gICAgICAgIDogbnVtYmVyLnRvU3RyaW5nRXhwb25lbnRpYWwoYnVmZmVyLCBXVEY6
Ok51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmcoYnVmZmVyLCBsZW5ndGgpKSk7CisgICAgY2hhciBidWZm
ZXJbV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aF07CisgICAgU3RyaW5nQnVpbGRlciBi
dWlsZGVyKGJ1ZmZlciwgV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCk7CisgICAgY29u
c3QgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXImIGNvbnZlcnRlciA9IERvdWJsZVRvU3RyaW5nQ29u
dmVydGVyOjpFY21hU2NyaXB0Q29udmVydGVyKCk7CisgICAgYnVpbGRlci5SZXNldCgpOworICAg
IGNvbnZlcnRlci5Ub1ByZWNpc2lvbih4LCBzaWduaWZpY2FudEZpZ3VyZXMsICZidWlsZGVyKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmcoYnVpbGRl
ci5GaW5hbGl6ZSgpKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJl
clByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVVN0cmluZy5jcHAKaW5kZXggYzE0ZjMxOTlmNDA3ZjQ3Zjc5NWY1MWJiOTIwZTZj
MDlmM2MzYTZmZC4uNDNjMTNmZjQ0NDZhMGVmNzI4Yzc4MjUwM2NhMjFkNTY2YTczZjczNiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5jcHAKQEAgLTM1LDEwICszNSwx
MCBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvRGVjaW1hbE51bWJlci5o
PgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvZHRvYS9kb3VibGUt
Y29udmVyc2lvbi5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VURjguaD4KIAogI2lmIEhBVkUo
U1RSSU5HU19IKQpAQCAtMTk1LDkgKzE5NSwxMiBAQCBVU3RyaW5nIFVTdHJpbmc6Om51bWJlcihs
b25nIGwpCiAKIFVTdHJpbmcgVVN0cmluZzo6bnVtYmVyKGRvdWJsZSBkKQogewotICAgIE51bWJl
clRvU3RyaW5nQnVmZmVyIGJ1ZmZlcjsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBudW1iZXJUb1N0
cmluZyhkLCBidWZmZXIpOwotICAgIHJldHVybiBVU3RyaW5nKGJ1ZmZlciwgbGVuZ3RoKTsKKyAg
ICBjaGFyIGJ1ZmZlcltXVEY6Ok51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoXTsKKyAgICBkb3Vi
bGVfY29udmVyc2lvbjo6U3RyaW5nQnVpbGRlciBidWlsZGVyKGJ1ZmZlciwgV1RGOjpOdW1iZXJU
b1N0cmluZ0J1ZmZlckxlbmd0aCk7CisgICAgY29uc3QgZG91YmxlX2NvbnZlcnNpb246OkRvdWJs
ZVRvU3RyaW5nQ29udmVydGVyJiBjb252ZXJ0ZXIgPSBkb3VibGVfY29udmVyc2lvbjo6RG91Ymxl
VG9TdHJpbmdDb252ZXJ0ZXI6OkVjbWFTY3JpcHRDb252ZXJ0ZXIoKTsKKyAgICBidWlsZGVyLlJl
c2V0KCk7CisgICAgY29udmVydGVyLlRvU2hvcnRlc3QoZCwgJmJ1aWxkZXIpOworICAgIHJldHVy
biBVU3RyaW5nKGJ1aWxkZXIuRmluYWxpemUoKSk7CiB9CiAKIFVTdHJpbmcgVVN0cmluZzo6c3Vi
c3RyaW5nU2hhcmluZ0ltcGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMudHh0IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3RzLnR4dAppbmRleCBjNmRkYTEzOWM0
ZWMzNDRjOTdjM2IzZTczZmYwNDFlZjg5MzIyZDJkLi4wYTQ5YjRjMTRjZjc3YzMyMDMxMWUxNmFj
ODhlMjBkY2Q2YmE2MDU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NN
YWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50
eHQKQEAgLTE0LDcgKzE0LDYgQEAgU0VUKFdURl9IRUFERVJTCiAgICAgQ3J5cHRvZ3JhcGhpY2Fs
bHlSYW5kb21OdW1iZXIuaAogICAgIEN1cnJlbnRUaW1lLmgKICAgICBEYXRlTWF0aC5oCi0gICAg
RGVjaW1hbE51bWJlci5oCiAgICAgRGVjb2Rlci5oCiAgICAgRGVxdWUuaAogICAgIERpc2FsbG93
Q1R5cGUuaApAQCAtOTksNiArOTgsMTcgQEAgU0VUKFdURl9IRUFERVJTCiAgICAgV1RGVGhyZWFk
RGF0YS5oCiAgICAgZHRvYS5oCiAKKyAgICBkdG9hL2JpZ251bS1kdG9hLmgKKyAgICBkdG9hL2Jp
Z251bS5oCisgICAgZHRvYS9jYWNoZWQtcG93ZXJzLmgKKyAgICBkdG9hL2RpeS1mcC5oCisgICAg
ZHRvYS9kb3VibGUtY29udmVyc2lvbi5oCisgICAgZHRvYS9kb3VibGUuaAorICAgIGR0b2EvZmFz
dC1kdG9hLmgKKyAgICBkdG9hL2ZpeGVkLWR0b2EuaAorICAgIGR0b2Evc3RydG9kLmgKKyAgICBk
dG9hL3V0aWxzLmgKKwogICAgIHRleHQvQXRvbWljU3RyaW5nLmgKICAgICB0ZXh0L0F0b21pY1N0
cmluZ0ltcGwuaAogICAgIHRleHQvQ1N0cmluZy5oCkBAIC0xMjAsNyArMTMwLDYgQEAgU0VUKFdU
Rl9TT1VSQ0VTCiAgICAgQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuY3BwCiAgICAgQ3Vy
cmVudFRpbWUuY3BwCiAgICAgRGF0ZU1hdGguY3BwCi0gICAgRGVjaW1hbE51bWJlci5jcHAKICAg
ICBEeW5hbWljQW5ub3RhdGlvbnMuY3BwCiAgICAgRmFzdE1hbGxvYy5jcHAKICAgICBIYXNoVGFi
bGUuY3BwCkBAIC0xNDAsNiArMTQ5LDE1IEBAIFNFVChXVEZfU09VUkNFUwogICAgIFdURlRocmVh
ZERhdGEuY3BwCiAgICAgZHRvYS5jcHAKIAorICAgIGR0b2EvYmlnbnVtLWR0b2EuY2MKKyAgICBk
dG9hL2JpZ251bS5jYworICAgIGR0b2EvY2FjaGVkLXBvd2Vycy5jYworICAgIGR0b2EvZGl5LWZw
LmNjCisgICAgZHRvYS9kb3VibGUtY29udmVyc2lvbi5jYworICAgIGR0b2EvZmFzdC1kdG9hLmNj
CisgICAgZHRvYS9maXhlZC1kdG9hLmNjCisgICAgZHRvYS9zdHJ0b2QuY2MKKwogICAgIHRleHQv
QXRvbWljU3RyaW5nLmNwcAogICAgIHRleHQvQ1N0cmluZy5jcHAKICAgICB0ZXh0L1N0cmluZ0J1
aWxkZXIuY3BwCkBAIC0xNTQsNiArMTcyLDcgQEAgU0VUKFdURl9JTkNMVURFX0RJUkVDVE9SSUVT
CiAgICAgIiR7SkFWQVNDUklQVENPUkVfRElSfSIKICAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9
L3d0ZiIKICAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L3d0Zi91bmljb2RlIgorICAgICIke0pB
VkFTQ1JJUFRDT1JFX0RJUn0vd3RmL2R0b2EiCiAgICAgIiR7SmF2YVNjcmlwdENvcmVfSU5DTFVE
RV9ESVJFQ1RPUklFU30iCiApCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvRGVjaW1hbE51bWJlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RlY2ltYWxO
dW1iZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDMwNGUyZTVmNjMwZGFj
MzIwZjU0Zjc4ZmY3Zjc1MjdhZDA2NzgzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGVjaW1hbE51bWJlci5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwxOTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
RGVjaW1hbE51bWJlci5oIgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV1RG
IHsKLQotdW5zaWduZWQgRGVjaW1hbE51bWJlcjo6YnVmZmVyTGVuZ3RoRm9yU3RyaW5nRGVjaW1h
bCgpIGNvbnN0Ci17Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKLSAgICAvLyBpZiB0aGUgZXhw
b25lbnQgaXMgbmVnYXRpdmUgdGhlIG51bWJlciBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIGlzIG9m
IHRoZSBmb3JtOgotICAgIC8vIFs8c2lnbj5dMC5bPHplcm9zPl08c2lnbmlmaWNhbmQ+Ci0gICAg
aWYgKG1fZXhwb25lbnQgPCAwKSB7Ci0gICAgICAgIGlmIChtX3NpZ24pCi0gICAgICAgICAgICAr
K2xlbmd0aDsKLSAgICAgICAgbGVuZ3RoICs9IDI7IC8vIGZvciAiMC4iCi0gICAgICAgIGxlbmd0
aCArPSAtbV9leHBvbmVudCAtIDE7Ci0gICAgICAgIGxlbmd0aCArPSBtX3ByZWNpc2lvbjsKLSAg
ICAgICAgcmV0dXJuIGxlbmd0aDsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBkaWdpdHNCZWZvcmVE
ZWNpbWFsUG9pbnQgPSBtX2V4cG9uZW50ICsgMTsKLQotICAgIC8vIElmIHRoZSBwcmVjaXNpb24g
aXMgPD0gdGhhbiB0aGUgbnVtYmVyIG9mIGRpZ2l0cyB0byBnZXQgdXAgdG8gdGhlIGRlY2ltYWwK
LSAgICAvLyBwb2ludCwgdGhlbiB0aGVyZSBpcyBubyBmcmFjdGlvbmFsIHBhcnQsIG51bWJlciBp
cyBvZiB0aGUgZm9ybToKLSAgICAvLyBbPHNpZ24+XTxzaWduaWZpY2FuZD5bPHplcm9zPl0KLSAg
ICBpZiAobV9wcmVjaXNpb24gPD0gZGlnaXRzQmVmb3JlRGVjaW1hbFBvaW50KSB7Ci0gICAgICAg
IGlmIChtX3NpZ24pCi0gICAgICAgICAgICArK2xlbmd0aDsKLSAgICAgICAgbGVuZ3RoICs9IG1f
cHJlY2lzaW9uOwotICAgICAgICBsZW5ndGggKz0gZGlnaXRzQmVmb3JlRGVjaW1hbFBvaW50IC0g
bV9wcmVjaXNpb247Ci0gICAgICAgIHJldHVybiBsZW5ndGg7Ci0gICAgfQotCi0gICAgLy8gSWYg
d2UgZ2V0IGhlcmUsIG51bWJlciBzdGFydHMgYmVmb3JlIHRoZSBkZWNpbWFsIHBvaW50LCBhbmQg
ZW5kcyBhZnRlciBpdCwKLSAgICAvLyBhcyBzdWNoIGlzIG9mIHRoZSBmb3JtOgotICAgIC8vIFs8
c2lnbj5dPHNpZ25pZmljYW5kLWJlZ2luPi48c2lnbmlmaWNhbmQtZW5kPgotICAgIGlmIChtX3Np
Z24pCi0gICAgICAgICsrbGVuZ3RoOwotICAgIGxlbmd0aCArPSBkaWdpdHNCZWZvcmVEZWNpbWFs
UG9pbnQ7Ci0gICAgKytsZW5ndGg7IC8vIGZvciBkZWNpbWFsIHBvaW50Ci0gICAgbGVuZ3RoICs9
IG1fcHJlY2lzaW9uIC0gZGlnaXRzQmVmb3JlRGVjaW1hbFBvaW50OwotCi0gICAgcmV0dXJuIGxl
bmd0aDsKLX0KLQotdW5zaWduZWQgRGVjaW1hbE51bWJlcjo6YnVmZmVyTGVuZ3RoRm9yU3RyaW5n
RXhwb25lbnRpYWwoKSBjb25zdAotewotICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7Ci0gICAgaWYg
KG1fc2lnbikKLSAgICAgICAgKytsZW5ndGg7Ci0KLSAgICAvLyBBZGQgdGhlIHNpZ25pZmljYW5k
Ci0gICAgKytsZW5ndGg7Ci0KLSAgICBpZiAobV9wcmVjaXNpb24gPiAxKSB7Ci0gICAgICAgICsr
bGVuZ3RoOyAvLyBmb3IgZGVjaW1hbCBwb2ludAotICAgICAgICBsZW5ndGggKz0gbV9wcmVjaXNp
b24gLSAxOwotICAgIH0KLQotICAgIC8vIEFkZCAiZSsiIG9yICJlLSIKLSAgICBsZW5ndGggKz0g
MjsKLQotICAgIGludCBleHBvbmVudCA9IChtX2V4cG9uZW50ID49IDApID8gbV9leHBvbmVudCA6
IC1tX2V4cG9uZW50OwotCi0gICAgLy8gQWRkIHRoZSBleHBvbmVudAotICAgIGlmIChleHBvbmVu
dCA+PSAxMDApCi0gICAgICAgICsrbGVuZ3RoOwotICAgIGlmIChleHBvbmVudCA+PSAxMCkKLSAg
ICAgICAgKytsZW5ndGg7Ci0gICAgKytsZW5ndGg7Ci0KLSAgICByZXR1cm4gbGVuZ3RoOwotfQot
Ci11bnNpZ25lZCBEZWNpbWFsTnVtYmVyOjp0b1N0cmluZ0RlY2ltYWwoVUNoYXIqIGJ1ZmZlciwg
dW5zaWduZWQgYnVmZmVyTGVuZ3RoKSBjb25zdAotewotICAgIEFTU0VSVF9VTlVTRUQoYnVmZmVy
TGVuZ3RoLCBidWZmZXJMZW5ndGggPj0gYnVmZmVyTGVuZ3RoRm9yU3RyaW5nRGVjaW1hbCgpKTsK
LQotICAgIC8vIFNob3VsZCBhbHdheXMgYmUgYXQgbGVhc3Qgb25lIGRpZ2l0IHRvIGFkZCB0byB0
aGUgc3RyaW5nIQotICAgIEFTU0VSVChtX3ByZWNpc2lvbik7Ci0gICAgVUNoYXIqIG5leHQgPSBi
dWZmZXI7Ci0KLSAgICAvLyBpZiB0aGUgZXhwb25lbnQgaXMgbmVnYXRpdmUgdGhlIG51bWJlciBk
ZWNpbWFsIHJlcHJlc2VudGF0aW9uIGlzIG9mIHRoZSBmb3JtOgotICAgIC8vIFs8c2lnbj5dMC5b
PHplcm9zPl08c2lnbmlmaWNhbmQ+Ci0gICAgaWYgKG1fZXhwb25lbnQgPCAwKSB7Ci0gICAgICAg
IHVuc2lnbmVkIHplcm9zID0gLW1fZXhwb25lbnQgLSAxOwotCi0gICAgICAgIGlmIChtX3NpZ24p
Ci0gICAgICAgICAgICAqbmV4dCsrID0gJy0nOwotICAgICAgICAqbmV4dCsrID0gJzAnOwotICAg
ICAgICAqbmV4dCsrID0gJy4nOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgemVy
b3M7ICsraSkKLSAgICAgICAgICAgICpuZXh0KysgPSAnMCc7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX3ByZWNpc2lvbjsgKytpKQotICAgICAgICAgICAgKm5leHQrKyA9IG1f
c2lnbmlmaWNhbmRbaV07Ci0KLSAgICAgICAgcmV0dXJuIG5leHQgLSBidWZmZXI7Ci0gICAgfQot
Ci0gICAgdW5zaWduZWQgZGlnaXRzQmVmb3JlRGVjaW1hbFBvaW50ID0gbV9leHBvbmVudCArIDE7
Ci0KLSAgICAvLyBJZiB0aGUgcHJlY2lzaW9uIGlzIDw9IHRoYW4gdGhlIG51bWJlciBvZiBkaWdp
dHMgdG8gZ2V0IHVwIHRvIHRoZSBkZWNpbWFsCi0gICAgLy8gcG9pbnQsIHRoZW4gdGhlcmUgaXMg
bm8gZnJhY3Rpb25hbCBwYXJ0LCBudW1iZXIgaXMgb2YgdGhlIGZvcm06Ci0gICAgLy8gWzxzaWdu
Pl08c2lnbmlmaWNhbmQ+Wzx6ZXJvcz5dCi0gICAgaWYgKG1fcHJlY2lzaW9uIDw9IGRpZ2l0c0Jl
Zm9yZURlY2ltYWxQb2ludCkgewotICAgICAgICBpZiAobV9zaWduKQotICAgICAgICAgICAgKm5l
eHQrKyA9ICctJzsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJlY2lzaW9u
OyArK2kpCi0gICAgICAgICAgICAqbmV4dCsrID0gbV9zaWduaWZpY2FuZFtpXTsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IChkaWdpdHNCZWZvcmVEZWNpbWFsUG9pbnQgLSBtX3By
ZWNpc2lvbik7ICsraSkKLSAgICAgICAgICAgICpuZXh0KysgPSAnMCc7Ci0KLSAgICAgICAgcmV0
dXJuIG5leHQgLSBidWZmZXI7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgZ2V0IGhlcmUsIG51bWJl
ciBzdGFydHMgYmVmb3JlIHRoZSBkZWNpbWFsIHBvaW50LCBhbmQgZW5kcyBhZnRlciBpdCwKLSAg
ICAvLyBhcyBzdWNoIGlzIG9mIHRoZSBmb3JtOgotICAgIC8vIFs8c2lnbj5dPHNpZ25pZmljYW5k
LWJlZ2luPi48c2lnbmlmaWNhbmQtZW5kPgotCi0gICAgaWYgKG1fc2lnbikKLSAgICAgICAgKm5l
eHQrKyA9ICctJzsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGlnaXRzQmVmb3JlRGVj
aW1hbFBvaW50OyArK2kpCi0gICAgICAgICpuZXh0KysgPSBtX3NpZ25pZmljYW5kW2ldOwotICAg
ICpuZXh0KysgPSAnLic7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gZGlnaXRzQmVmb3JlRGVjaW1h
bFBvaW50OyBpIDwgbV9wcmVjaXNpb247ICsraSkKLSAgICAgICAgKm5leHQrKyA9IG1fc2lnbmlm
aWNhbmRbaV07Ci0KLSAgICByZXR1cm4gbmV4dCAtIGJ1ZmZlcjsKLX0KLQotdW5zaWduZWQgRGVj
aW1hbE51bWJlcjo6dG9TdHJpbmdFeHBvbmVudGlhbChVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBi
dWZmZXJMZW5ndGgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX1VOVVNFRChidWZmZXJMZW5ndGgsIGJ1
ZmZlckxlbmd0aCA+PSBidWZmZXJMZW5ndGhGb3JTdHJpbmdFeHBvbmVudGlhbCgpKTsKLQotICAg
IC8vIFNob3VsZCBhbHdheXMgYmUgYXQgbGVhc3Qgb25lIGRpZ2l0IHRvIGFkZCB0byB0aGUgc3Ry
aW5nIQotICAgIEFTU0VSVChtX3ByZWNpc2lvbik7Ci0gICAgVUNoYXIqIG5leHQgPSBidWZmZXI7
Ci0KLSAgICAvLyBBZGQgdGhlIHNpZ24KLSAgICBpZiAobV9zaWduKQotICAgICAgICAqbmV4dCsr
ID0gJy0nOwotCi0gICAgLy8gQWRkIHRoZSBzaWduaWZpY2FuZAotICAgICpuZXh0KysgPSBtX3Np
Z25pZmljYW5kWzBdOwotICAgIGlmIChtX3ByZWNpc2lvbiA+IDEpIHsKLSAgICAgICAgKm5leHQr
KyA9ICcuJzsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG1fcHJlY2lzaW9uOyAr
K2kpCi0gICAgICAgICAgICAqbmV4dCsrID0gbV9zaWduaWZpY2FuZFtpXTsKLSAgICB9Ci0KLSAg
ICAvLyBBZGQgImUrIiBvciAiZS0iCi0gICAgKm5leHQrKyA9ICdlJzsKLSAgICBpbnQgZXhwb25l
bnQ7Ci0gICAgaWYgKG1fZXhwb25lbnQgPj0gMCkgewotICAgICAgICAqbmV4dCsrID0gJysnOwot
ICAgICAgICBleHBvbmVudCA9IG1fZXhwb25lbnQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgKm5l
eHQrKyA9ICctJzsKLSAgICAgICAgZXhwb25lbnQgPSAtbV9leHBvbmVudDsKLSAgICB9Ci0KLSAg
ICAvLyBBZGQgdGhlIGV4cG9uZW50Ci0gICAgaWYgKGV4cG9uZW50ID49IDEwMCkKLSAgICAgICAg
Km5leHQrKyA9ICcwJyArIGV4cG9uZW50IC8gMTAwOwotICAgIGlmIChleHBvbmVudCA+PSAxMCkK
LSAgICAgICAgKm5leHQrKyA9ICcwJyArIChleHBvbmVudCAlIDEwMCkgLyAxMDsKLSAgICAqbmV4
dCsrID0gJzAnICsgZXhwb25lbnQgJSAxMDsKLQotICAgIHJldHVybiBuZXh0IC0gYnVmZmVyOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvRGVjaW1hbE51bWJlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EZWNpbWFs
TnVtYmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjN2I4MDA1ODJkMzZhYjJh
MTc2YjAzZTA5ZDBjNTJhMDQ1NDI5YjIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EZWNpbWFsTnVtYmVyLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIERlY2ltYWxOdW1iZXJfaAotI2RlZmluZSBE
ZWNpbWFsTnVtYmVyX2gKLQotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDx3dGYvZHRvYS5o
PgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi1lbnVtIFJvdW5kaW5nU2lnbmlmaWNhbnRGaWd1
cmVzVHlwZSB7IFJvdW5kaW5nU2lnbmlmaWNhbnRGaWd1cmVzIH07Ci1lbnVtIFJvdW5kaW5nRGVj
aW1hbFBsYWNlc1R5cGUgeyBSb3VuZGluZ0RlY2ltYWxQbGFjZXMgfTsKLQotY2xhc3MgRGVjaW1h
bE51bWJlciB7Ci1wdWJsaWM6Ci0gICAgRGVjaW1hbE51bWJlcihkb3VibGUgZCkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChpc2Zpbml0ZShkKSk7Ci0gICAgICAgIGR0b2EobV9zaWduaWZpY2FuZCwg
ZCwgbV9zaWduLCBtX2V4cG9uZW50LCBtX3ByZWNpc2lvbik7Ci0KLSAgICAgICAgQVNTRVJUKG1f
cHJlY2lzaW9uKTsKLSAgICAgICAgLy8gWmVybyBzaG91bGQgYWx3YXlzIGhhdmUgZXhwb25lbnQg
MC4KLSAgICAgICAgQVNTRVJUKG1fc2lnbmlmaWNhbmRbMF0gIT0gJzAnIHx8ICFtX2V4cG9uZW50
KTsKLSAgICAgICAgLy8gTm8gdmFsdWVzIG90aGVyIHRoYW4gemVybyBzaG91bGQgaGF2ZSBhIGxl
YWRpbmcgemVyby4KLSAgICAgICAgQVNTRVJUKG1fc2lnbmlmaWNhbmRbMF0gIT0gJzAnIHx8IG1f
cHJlY2lzaW9uID09IDEpOwotICAgICAgICAvLyBObyB2YWx1ZXMgb3RoZXIgdGhhbiB6ZXJvIHNo
b3VsZCBoYXZlIHRyYWlsaW5nIHplcm9zLgotICAgICAgICBBU1NFUlQobV9zaWduaWZpY2FuZFsw
XSA9PSAnMCcgfHwgbV9zaWduaWZpY2FuZFttX3ByZWNpc2lvbiAtIDFdICE9ICcwJyk7Ci0gICAg
fQotCi0gICAgRGVjaW1hbE51bWJlcihkb3VibGUgZCwgUm91bmRpbmdTaWduaWZpY2FudEZpZ3Vy
ZXNUeXBlLCB1bnNpZ25lZCBzaWduaWZpY2FudEZpZ3VyZXMpCi0gICAgewotICAgICAgICBBU1NF
UlQoaXNmaW5pdGUoZCkpOwotICAgICAgICBkdG9hUm91bmRTRihtX3NpZ25pZmljYW5kLCBkLCBz
aWduaWZpY2FudEZpZ3VyZXMsIG1fc2lnbiwgbV9leHBvbmVudCwgbV9wcmVjaXNpb24pOwotCi0g
ICAgICAgIEFTU0VSVChzaWduaWZpY2FudEZpZ3VyZXMgJiYgc2lnbmlmaWNhbnRGaWd1cmVzIDw9
IHNpemVvZihEdG9hQnVmZmVyKSk7Ci0gICAgICAgIHdoaWxlIChtX3ByZWNpc2lvbiA8IHNpZ25p
ZmljYW50RmlndXJlcykKLSAgICAgICAgICAgIG1fc2lnbmlmaWNhbmRbbV9wcmVjaXNpb24rK10g
PSAnMCc7Ci0KLSAgICAgICAgQVNTRVJUKG1fcHJlY2lzaW9uKTsKLSAgICAgICAgLy8gWmVybyBz
aG91bGQgYWx3YXlzIGhhdmUgZXhwb25lbnQgMC4KLSAgICAgICAgQVNTRVJUKG1fc2lnbmlmaWNh
bmRbMF0gIT0gJzAnIHx8ICFtX2V4cG9uZW50KTsKLSAgICB9Ci0KLSAgICBEZWNpbWFsTnVtYmVy
KGRvdWJsZSBkLCBSb3VuZGluZ0RlY2ltYWxQbGFjZXNUeXBlLCB1bnNpZ25lZCBkZWNpbWFsUGxh
Y2VzKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzZmluaXRlKGQpKTsKLSAgICAgICAgZHRvYVJv
dW5kRFAobV9zaWduaWZpY2FuZCwgZCwgZGVjaW1hbFBsYWNlcywgbV9zaWduLCBtX2V4cG9uZW50
LCBtX3ByZWNpc2lvbik7Ci0KLSAgICAgICAgdW5zaWduZWQgc2lnbmlmaWNhbnRGaWd1cmVzID0g
MSArIG1fZXhwb25lbnQgKyBkZWNpbWFsUGxhY2VzOwotICAgICAgICBBU1NFUlQoc2lnbmlmaWNh
bnRGaWd1cmVzICYmIHNpZ25pZmljYW50RmlndXJlcyA8PSBzaXplb2YoRHRvYUJ1ZmZlcikpOwot
ICAgICAgICB3aGlsZSAobV9wcmVjaXNpb24gPCBzaWduaWZpY2FudEZpZ3VyZXMpCi0gICAgICAg
ICAgICBtX3NpZ25pZmljYW5kW21fcHJlY2lzaW9uKytdID0gJzAnOwotCi0gICAgICAgIEFTU0VS
VChtX3ByZWNpc2lvbik7Ci0gICAgICAgIC8vIFplcm8gc2hvdWxkIGFsd2F5cyBoYXZlIGV4cG9u
ZW50IDAuCi0gICAgICAgIEFTU0VSVChtX3NpZ25pZmljYW5kWzBdICE9ICcwJyB8fCAhbV9leHBv
bmVudCk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgYnVmZmVyTGVuZ3RoRm9yU3RyaW5nRGVjaW1h
bCgpIGNvbnN0OwotICAgIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aEZvclN0cmluZ0V4cG9uZW50aWFs
KCkgY29uc3Q7Ci0KLSAgICB1bnNpZ25lZCB0b1N0cmluZ0RlY2ltYWwoVUNoYXIqIGJ1ZmZlciwg
dW5zaWduZWQgYnVmZmVyTGVuZ3RoKSBjb25zdDsKLSAgICB1bnNpZ25lZCB0b1N0cmluZ0V4cG9u
ZW50aWFsKFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCkgY29uc3Q7Ci0KLSAg
ICBib29sIHNpZ24oKSBjb25zdCB7IHJldHVybiBtX3NpZ247IH0KLSAgICBpbnQgZXhwb25lbnQo
KSBjb25zdCB7IHJldHVybiBtX2V4cG9uZW50OyB9Ci0gICAgY29uc3QgY2hhciogc2lnbmlmaWNh
bmQoKSBjb25zdCB7IHJldHVybiBtX3NpZ25pZmljYW5kOyB9IC8vIHNpZ25pZmljYW5kIGNvbnRh
aW5zIHByZWNpc2lvbiBjaGFyYWN0ZXJzLCBpcyBub3QgbnVsbC10ZXJtaW5hdGVkLgotICAgIHVu
c2lnbmVkIHByZWNpc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fcHJlY2lzaW9uOyB9Ci0KLXByaXZh
dGU6Ci0gICAgYm9vbCBtX3NpZ247Ci0gICAgaW50IG1fZXhwb25lbnQ7Ci0gICAgRHRvYUJ1ZmZl
ciBtX3NpZ25pZmljYW5kOwotICAgIHVuc2lnbmVkIG1fcHJlY2lzaW9uOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV1RGCi0KLXVzaW5nIFdURjo6RGVjaW1hbE51bWJlcjsKLXVzaW5nIFdURjo6Um91
bmRpbmdTaWduaWZpY2FudEZpZ3VyZXM7Ci11c2luZyBXVEY6OlJvdW5kaW5nRGVjaW1hbFBsYWNl
czsKLQotI2VuZGlmIC8vIERlY2ltYWxOdW1iZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9kdG9hLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS5j
cHAKaW5kZXggMTQ2NmRmNzM2ODA4OTVmYjdkNjcyZjY3OGE3NDI5NTNkOWM2ZDVhZC4uYjViMjcz
MjRlZDA5ZDAxOWE3N2NiMGRlYzI4ODRlMmNiMGQ2NTE4NiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9kdG9hLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L2R0b2EuY3BwCkBAIC03NSwxMiArNzUsMTIgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNs
dWRlIDx3dGYvQWx3YXlzSW5saW5lLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNp
bmNsdWRlIDx3dGYvRGVjaW1hbE51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+
CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+
CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
I2luY2x1ZGUgPHd0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmg+CiAKICNpZiBDT01QSUxFUihN
U1ZDKQogI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQyNDQpCkBAIC0xMjc0LDU2MSArMTI3NCwx
MiBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBpbnQgcXVvcmVtKEJpZ0ludCYgYiwgQmlnSW50JiBT
KQogICAgIHJldHVybiBxOwogfQogCi0vKiBkdG9hIGZvciBJRUVFIGFyaXRobWV0aWMgKGRtZyk6
IGNvbnZlcnQgZG91YmxlIHRvIEFTQ0lJIHN0cmluZy4KLSAqCi0gKiBJbnNwaXJlZCBieSAiSG93
IHRvIFByaW50IEZsb2F0aW5nLVBvaW50IE51bWJlcnMgQWNjdXJhdGVseSIgYnkKLSAqIEd1eSBM
LiBTdGVlbGUsIEpyLiBhbmQgSm9uIEwuIFdoaXRlIFtQcm9jLiBBQ00gU0lHUExBTiAnOTAsIHBw
LiAxMTItMTI2XS4KLSAqCi0gKiBNb2RpZmljYXRpb25zOgotICogICAgMS4gUmF0aGVyIHRoYW4g
aXRlcmF0aW5nLCB3ZSB1c2UgYSBzaW1wbGUgbnVtZXJpYyBvdmVyZXN0aW1hdGUKLSAqICAgICAg
IHRvIGRldGVybWluZSBrID0gZmxvb3IobG9nMTAoZCkpLiAgV2Ugc2NhbGUgcmVsZXZhbnQKLSAq
ICAgICAgIHF1YW50aXRpZXMgdXNpbmcgTyhsb2cyKGspKSByYXRoZXIgdGhhbiBPKGspIG11bHRp
cGxpY2F0aW9ucy4KLSAqICAgIDIuIEZvciBzb21lIG1vZGVzID4gMiAoY29ycmVzcG9uZGluZyB0
byBlY3Z0IGFuZCBmY3Z0KSwgd2UgZG9uJ3QKLSAqICAgICAgIHRyeSB0byBnZW5lcmF0ZSBkaWdp
dHMgc3RyaWN0bHkgbGVmdCB0byByaWdodC4gIEluc3RlYWQsIHdlCi0gKiAgICAgICBjb21wdXRl
IHdpdGggZmV3ZXIgYml0cyBhbmQgcHJvcGFnYXRlIHRoZSBjYXJyeSBpZiBuZWNlc3NhcnkKLSAq
ICAgICAgIHdoZW4gcm91bmRpbmcgdGhlIGZpbmFsIGRpZ2l0IHVwLiAgVGhpcyBpcyBvZnRlbiBm
YXN0ZXIuCi0gKiAgICAzLiBVbmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IGlucHV0IHdpbGwgYmUg
cm91bmRlZCBuZWFyZXN0LAotICogICAgICAgbW9kZSAwIHJlbmRlcnMgMWUyMyBhcyAxZTIzIHJh
dGhlciB0aGFuIDkuOTk5OTk5OTk5OTk5OTk5ZTIyLgotICogICAgICAgVGhhdCBpcywgd2UgYWxs
b3cgZXF1YWxpdHkgaW4gc3RvcHBpbmcgdGVzdHMgd2hlbiB0aGUKLSAqICAgICAgIHJvdW5kLW5l
YXJlc3QgcnVsZSB3aWxsIGdpdmUgdGhlIHNhbWUgZmxvYXRpbmctcG9pbnQgdmFsdWUKLSAqICAg
ICAgIGFzIHdvdWxkIHNhdGlzZmFjdGlvbiBvZiB0aGUgc3RvcHBpbmcgdGVzdCB3aXRoIHN0cmlj
dAotICogICAgICAgaW5lcXVhbGl0eS4KLSAqICAgIDQuIFdlIHJlbW92ZSBjb21tb24gZmFjdG9y
cyBvZiBwb3dlcnMgb2YgMiBmcm9tIHJlbGV2YW50Ci0gKiAgICAgICBxdWFudGl0aWVzLgotICog
ICAgNS4gV2hlbiBjb252ZXJ0aW5nIGZsb2F0aW5nLXBvaW50IGludGVnZXJzIGxlc3MgdGhhbiAx
ZTE2LAotICogICAgICAgd2UgdXNlIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMgcmF0aGVyIHRo
YW4gcmVzb3J0aW5nCi0gKiAgICAgICB0byBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlcnMuCi0g
KiAgICA2LiBXaGVuIGFza2VkIHRvIHByb2R1Y2UgZmV3ZXIgdGhhbiAxNSBkaWdpdHMsIHdlIGZp
cnN0IHRyeQotICogICAgICAgdG8gZ2V0IGJ5IHdpdGggZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRp
Yzsgd2UgcmVzb3J0IHRvCi0gKiAgICAgICBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBhcml0
aG1ldGljIG9ubHkgaWYgd2UgY2Fubm90Ci0gKiAgICAgICBndWFyYW50ZWUgdGhhdCB0aGUgZmxv
YXRpbmctcG9pbnQgY2FsY3VsYXRpb24gaGFzIGdpdmVuCi0gKiAgICAgICB0aGUgY29ycmVjdGx5
IHJvdW5kZWQgcmVzdWx0LiAgRm9yIGsgcmVxdWVzdGVkIGRpZ2l0cyBhbmQKLSAqICAgICAgICJ1
bmlmb3JtbHkiIGRpc3RyaWJ1dGVkIGlucHV0LCB0aGUgcHJvYmFiaWxpdHkgaXMKLSAqICAgICAg
IHNvbWV0aGluZyBsaWtlIDEwXihrLTE1KSB0aGF0IHdlIG11c3QgcmVzb3J0IHRvIHRoZSBpbnQz
Ml90Ci0gKiAgICAgICBjYWxjdWxhdGlvbi4KLSAqCi0gKiBOb3RlOiAnbGVmdHJpZ2h0JyB0cmFu
c2xhdGVzIHRvICdnZW5lcmF0ZSBzaG9ydGVzdCBwb3NzaWJsZSBzdHJpbmcnLgotICovCi10ZW1w
bGF0ZTxib29sIHJvdW5kaW5nTm9uZSwgYm9vbCByb3VuZGluZ1NpZ25pZmljYW50RmlndXJlcywg
Ym9vbCByb3VuZGluZ0RlY2ltYWxQbGFjZXMsIGJvb2wgbGVmdHJpZ2h0Pgotdm9pZCBkdG9hKER0
b2FCdWZmZXIgcmVzdWx0LCBkb3VibGUgZGQsIGludCBuZGlnaXRzLCBib29sJiBzaWduT3V0LCBp
bnQmIGV4cG9uZW50T3V0LCB1bnNpZ25lZCYgcHJlY2lzaW9uT3V0KQotewotICAgIC8vIEV4YWN0
bHkgb25lIHJvdW5kaW5nIG1vZGUgbXVzdCBiZSBzcGVjaWZpZWQuCi0gICAgQVNTRVJUKHJvdW5k
aW5nTm9uZSArIHJvdW5kaW5nU2lnbmlmaWNhbnRGaWd1cmVzICsgcm91bmRpbmdEZWNpbWFsUGxh
Y2VzID09IDEpOwotICAgIC8vIHJvdW5kaW5nTm9uZSBvbmx5IGFsbG93ZWQgKG9ubHkgc2Vuc2li
bGU/KSB3aXRoIGxlZnRyaWdodCBzZXQuCi0gICAgQVNTRVJUKCFyb3VuZGluZ05vbmUgfHwgbGVm
dHJpZ2h0KTsKLQotICAgIEFTU0VSVChpc2Zpbml0ZShkZCkpOwotCi0gICAgaW50IGJiaXRzLCBi
MiwgYjUsIGJlLCBkaWcsIGksIGllcHMsIGlsaW0gPSAwLCBpbGltMCwgaWxpbTEgPSAwLAotICAg
ICAgICBqLCBqMSwgaywgazAsIGtfY2hlY2ssIG0yLCBtNSwgczIsIHM1LAotICAgICAgICBzcGVj
X2Nhc2U7Ci0gICAgaW50MzJfdCBMOwotICAgIGludCBkZW5vcm07Ci0gICAgdWludDMyX3QgeDsK
LSAgICBCaWdJbnQgYiwgZGVsdGEsIG1sbywgbWhpLCBTOwotICAgIFUgZDIsIGVwcywgdTsKLSAg
ICBkb3VibGUgZHM7Ci0gICAgY2hhciogczsKLSAgICBjaGFyKiBzMDsKLQotICAgIHUuZCA9IGRk
OwotCi0gICAgLyogSW5maW5pdHkgb3IgTmFOICovCi0gICAgQVNTRVJUKCh3b3JkMCgmdSkgJiBF
eHBfbWFzaykgIT0gRXhwX21hc2spOwotCi0gICAgLy8gSmF2YVNjcmlwdCB0b1N0cmluZyBjb252
ZXJzaW9uIHRyZWF0cyAtMCBhcyAwLgotICAgIGlmICghZHZhbCgmdSkpIHsKLSAgICAgICAgc2ln
bk91dCA9IGZhbHNlOwotICAgICAgICBleHBvbmVudE91dCA9IDA7Ci0gICAgICAgIHByZWNpc2lv
bk91dCA9IDE7Ci0gICAgICAgIHJlc3VsdFswXSA9ICcwJzsKLSAgICAgICAgcmVzdWx0WzFdID0g
J1wwJzsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICh3b3JkMCgmdSkgJiBTaWdu
X2JpdCkgewotICAgICAgICBzaWduT3V0ID0gdHJ1ZTsKLSAgICAgICAgd29yZDAoJnUpICY9IH5T
aWduX2JpdDsgLy8gY2xlYXIgc2lnbiBiaXQKLSAgICB9IGVsc2UKLSAgICAgICAgc2lnbk91dCA9
IGZhbHNlOwotCi0gICAgZDJiKGIsICZ1LCAmYmUsICZiYml0cyk7Ci0gICAgaWYgKChpID0gKGlu
dCkod29yZDAoJnUpID4+IEV4cF9zaGlmdDEgJiAoRXhwX21hc2sgPj4gRXhwX3NoaWZ0MSkpKSkg
ewotICAgICAgICBkdmFsKCZkMikgPSBkdmFsKCZ1KTsKLSAgICAgICAgd29yZDAoJmQyKSAmPSBG
cmFjX21hc2sxOwotICAgICAgICB3b3JkMCgmZDIpIHw9IEV4cF8xMTsKLQotICAgICAgICAvKiBs
b2coeCkgICAgfj1+IGxvZygxLjUpICsgKHgtMS41KS8xLjUKLSAgICAgICAgICogbG9nMTAoeCkg
ICAgID0gIGxvZyh4KSAvIGxvZygxMCkKLSAgICAgICAgICogICAgICAgIH49fiBsb2coMS41KS9s
b2coMTApICsgKHgtMS41KS8oMS41KmxvZygxMCkpCi0gICAgICAgICAqIGxvZzEwKGQpID0gKGkt
QmlhcykqbG9nKDIpL2xvZygxMCkgKyBsb2cxMChkMikKLSAgICAgICAgICoKLSAgICAgICAgICog
VGhpcyBzdWdnZXN0cyBjb21wdXRpbmcgYW4gYXBwcm94aW1hdGlvbiBrIHRvIGxvZzEwKGQpIGJ5
Ci0gICAgICAgICAqCi0gICAgICAgICAqIGsgPSAoaSAtIEJpYXMpKjAuMzAxMDI5OTk1NjYzOTgx
Ci0gICAgICAgICAqICAgICsgKCAoZDItMS41KSowLjI4OTUyOTY1NDYwMjE2OCArIDAuMTc2MDkx
MjU5MDU1NjgxICk7Ci0gICAgICAgICAqCi0gICAgICAgICAqIFdlIHdhbnQgayB0byBiZSB0b28g
bGFyZ2UgcmF0aGVyIHRoYW4gdG9vIHNtYWxsLgotICAgICAgICAgKiBUaGUgZXJyb3IgaW4gdGhl
IGZpcnN0LW9yZGVyIFRheWxvciBzZXJpZXMgYXBwcm94aW1hdGlvbgotICAgICAgICAgKiBpcyBp
biBvdXIgZmF2b3IsIHNvIHdlIGp1c3Qgcm91bmQgdXAgdGhlIGNvbnN0YW50IGVub3VnaAotICAg
ICAgICAgKiB0byBjb21wZW5zYXRlIGZvciBhbnkgZXJyb3IgaW4gdGhlIG11bHRpcGxpY2F0aW9u
IG9mCi0gICAgICAgICAqIChpIC0gQmlhcykgYnkgMC4zMDEwMjk5OTU2NjM5ODE7IHNpbmNlIHxp
IC0gQmlhc3wgPD0gMTA3NywKLSAgICAgICAgICogYW5kIDEwNzcgKiAwLjMwMTAzICogMl4tNTIg
fj1+IDcuMmUtMTQsCi0gICAgICAgICAqIGFkZGluZyAxZS0xMyB0byB0aGUgY29uc3RhbnQgdGVy
bSBtb3JlIHRoYW4gc3VmZmljZXMuCi0gICAgICAgICAqIEhlbmNlIHdlIGFkanVzdCB0aGUgY29u
c3RhbnQgdGVybSB0byAwLjE3NjA5MTI1OTA1NTguCi0gICAgICAgICAqIChXZSBjb3VsZCBnZXQg
YSBtb3JlIGFjY3VyYXRlIGsgYnkgaW52b2tpbmcgbG9nMTAsCi0gICAgICAgICAqICBidXQgdGhp
cyBpcyBwcm9iYWJseSBub3Qgd29ydGh3aGlsZS4pCi0gICAgICAgICAqLwotCi0gICAgICAgIGkg
LT0gQmlhczsKLSAgICAgICAgZGVub3JtID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgICAvKiBk
IGlzIGRlbm9ybWFsaXplZCAqLwotCi0gICAgICAgIGkgPSBiYml0cyArIGJlICsgKEJpYXMgKyAo
UCAtIDEpIC0gMSk7Ci0gICAgICAgIHggPSAoaSA+IDMyKSA/ICh3b3JkMCgmdSkgPDwgKDY0IC0g
aSkpIHwgKHdvcmQxKCZ1KSA+PiAoaSAtIDMyKSkKLSAgICAgICAgICAgICAgICA6IHdvcmQxKCZ1
KSA8PCAoMzIgLSBpKTsKLSAgICAgICAgZHZhbCgmZDIpID0geDsKLSAgICAgICAgd29yZDAoJmQy
KSAtPSAzMSAqIEV4cF9tc2sxOyAvKiBhZGp1c3QgZXhwb25lbnQgKi8KLSAgICAgICAgaSAtPSAo
QmlhcyArIChQIC0gMSkgLSAxKSArIDE7Ci0gICAgICAgIGRlbm9ybSA9IDE7Ci0gICAgfQotICAg
IGRzID0gKGR2YWwoJmQyKSAtIDEuNSkgKiAwLjI4OTUyOTY1NDYwMjE2OCArIDAuMTc2MDkxMjU5
MDU1OCArIChpICogMC4zMDEwMjk5OTU2NjM5ODEpOwotICAgIGsgPSAoaW50KWRzOwotICAgIGlm
IChkcyA8IDAuICYmIGRzICE9IGspCi0gICAgICAgIGstLTsgICAgLyogd2FudCBrID0gZmxvb3Io
ZHMpICovCi0gICAga19jaGVjayA9IDE7Ci0gICAgaWYgKGsgPj0gMCAmJiBrIDw9IFRlbl9wbWF4
KSB7Ci0gICAgICAgIGlmIChkdmFsKCZ1KSA8IHRlbnNba10pCi0gICAgICAgICAgICBrLS07Ci0g
ICAgICAgIGtfY2hlY2sgPSAwOwotICAgIH0KLSAgICBqID0gYmJpdHMgLSBpIC0gMTsKLSAgICBp
ZiAoaiA+PSAwKSB7Ci0gICAgICAgIGIyID0gMDsKLSAgICAgICAgczIgPSBqOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGIyID0gLWo7Ci0gICAgICAgIHMyID0gMDsKLSAgICB9Ci0gICAgaWYgKGsg
Pj0gMCkgewotICAgICAgICBiNSA9IDA7Ci0gICAgICAgIHM1ID0gazsKLSAgICAgICAgczIgKz0g
azsKLSAgICB9IGVsc2UgewotICAgICAgICBiMiAtPSBrOwotICAgICAgICBiNSA9IC1rOwotICAg
ICAgICBzNSA9IDA7Ci0gICAgfQotCi0gICAgaWYgKHJvdW5kaW5nTm9uZSkgewotICAgICAgICBp
bGltID0gaWxpbTEgPSAtMTsKLSAgICAgICAgaSA9IDE4OwotICAgICAgICBuZGlnaXRzID0gMDsK
LSAgICB9Ci0gICAgaWYgKHJvdW5kaW5nU2lnbmlmaWNhbnRGaWd1cmVzKSB7Ci0gICAgICAgIGlm
IChuZGlnaXRzIDw9IDApCi0gICAgICAgICAgICBuZGlnaXRzID0gMTsKLSAgICAgICAgaWxpbSA9
IGlsaW0xID0gaSA9IG5kaWdpdHM7Ci0gICAgfQotICAgIGlmIChyb3VuZGluZ0RlY2ltYWxQbGFj
ZXMpIHsKLSAgICAgICAgaSA9IG5kaWdpdHMgKyBrICsgMTsKLSAgICAgICAgaWxpbSA9IGk7Ci0g
ICAgICAgIGlsaW0xID0gaSAtIDE7Ci0gICAgICAgIGlmIChpIDw9IDApCi0gICAgICAgICAgICBp
ID0gMTsKLSAgICB9Ci0KLSAgICBzID0gczAgPSByZXN1bHQ7Ci0KLSAgICBpZiAoaWxpbSA+PSAw
ICYmIGlsaW0gPD0gUXVpY2tfbWF4KSB7Ci0gICAgICAgIC8qIFRyeSB0byBnZXQgYnkgd2l0aCBm
bG9hdGluZy1wb2ludCBhcml0aG1ldGljLiAqLwotCi0gICAgICAgIGkgPSAwOwotICAgICAgICBk
dmFsKCZkMikgPSBkdmFsKCZ1KTsKLSAgICAgICAgazAgPSBrOwotICAgICAgICBpbGltMCA9IGls
aW07Ci0gICAgICAgIGllcHMgPSAyOyAvKiBjb25zZXJ2YXRpdmUgKi8KLSAgICAgICAgaWYgKGsg
PiAwKSB7Ci0gICAgICAgICAgICBkcyA9IHRlbnNbayAmIDB4Zl07Ci0gICAgICAgICAgICBqID0g
ayA+PiA0OwotICAgICAgICAgICAgaWYgKGogJiBCbGV0Y2gpIHsKLSAgICAgICAgICAgICAgICAv
KiBwcmV2ZW50IG92ZXJmbG93cyAqLwotICAgICAgICAgICAgICAgIGogJj0gQmxldGNoIC0gMTsK
LSAgICAgICAgICAgICAgICBkdmFsKCZ1KSAvPSBiaWd0ZW5zW25fYmlndGVucyAtIDFdOwotICAg
ICAgICAgICAgICAgIGllcHMrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAoOyBq
OyBqID4+PSAxLCBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoaiAmIDEpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWVwcysrOwotICAgICAgICAgICAgICAgICAgICBkcyAqPSBiaWd0ZW5zW2ld
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGR2YWwoJnUp
IC89IGRzOwotICAgICAgICB9IGVsc2UgaWYgKChqMSA9IC1rKSkgewotICAgICAgICAgICAgZHZh
bCgmdSkgKj0gdGVuc1tqMSAmIDB4Zl07Ci0gICAgICAgICAgICBmb3IgKGogPSBqMSA+PiA0OyBq
OyBqID4+PSAxLCBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoaiAmIDEpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWVwcysrOwotICAgICAgICAgICAgICAgICAgICBkdmFsKCZ1KSAqPSBiaWd0
ZW5zW2ldOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICBpZiAoa19jaGVjayAmJiBkdmFsKCZ1KSA8IDEuICYmIGlsaW0gPiAwKSB7Ci0gICAgICAg
ICAgICBpZiAoaWxpbTEgPD0gMCkKLSAgICAgICAgICAgICAgICBnb3RvIGZhc3RGYWlsZWQ7Ci0g
ICAgICAgICAgICBpbGltID0gaWxpbTE7Ci0gICAgICAgICAgICBrLS07Ci0gICAgICAgICAgICBk
dmFsKCZ1KSAqPSAxMC47Ci0gICAgICAgICAgICBpZXBzKys7Ci0gICAgICAgIH0KLSAgICAgICAg
ZHZhbCgmZXBzKSA9IChpZXBzICogZHZhbCgmdSkpICsgNy47Ci0gICAgICAgIHdvcmQwKCZlcHMp
IC09IChQIC0gMSkgKiBFeHBfbXNrMTsKLSAgICAgICAgaWYgKCFpbGltKSB7Ci0gICAgICAgICAg
ICBTLmNsZWFyKCk7Ci0gICAgICAgICAgICBtaGkuY2xlYXIoKTsKLSAgICAgICAgICAgIGR2YWwo
JnUpIC09IDUuOwotICAgICAgICAgICAgaWYgKGR2YWwoJnUpID4gZHZhbCgmZXBzKSkKLSAgICAg
ICAgICAgICAgICBnb3RvIG9uZURpZ2l0OwotICAgICAgICAgICAgaWYgKGR2YWwoJnUpIDwgLWR2
YWwoJmVwcykpCi0gICAgICAgICAgICAgICAgZ290byBub0RpZ2l0czsKLSAgICAgICAgICAgIGdv
dG8gZmFzdEZhaWxlZDsKLSAgICAgICAgfQotICAgICAgICBpZiAobGVmdHJpZ2h0KSB7Ci0gICAg
ICAgICAgICAvKiBVc2UgU3RlZWxlICYgV2hpdGUgbWV0aG9kIG9mIG9ubHkKLSAgICAgICAgICAg
ICAqIGdlbmVyYXRpbmcgZGlnaXRzIG5lZWRlZC4KLSAgICAgICAgICAgICAqLwotICAgICAgICAg
ICAgZHZhbCgmZXBzKSA9ICgwLjUgLyB0ZW5zW2lsaW0gLSAxXSkgLSBkdmFsKCZlcHMpOwotICAg
ICAgICAgICAgZm9yIChpID0gMDs7KSB7Ci0gICAgICAgICAgICAgICAgTCA9IChsb25nIGludClk
dmFsKCZ1KTsKLSAgICAgICAgICAgICAgICBkdmFsKCZ1KSAtPSBMOwotICAgICAgICAgICAgICAg
ICpzKysgPSAnMCcgKyAoaW50KUw7Ci0gICAgICAgICAgICAgICAgaWYgKGR2YWwoJnUpIDwgZHZh
bCgmZXBzKSkKLSAgICAgICAgICAgICAgICAgICAgZ290byByZXQ7Ci0gICAgICAgICAgICAgICAg
aWYgKDEuIC0gZHZhbCgmdSkgPCBkdmFsKCZlcHMpKQotICAgICAgICAgICAgICAgICAgICBnb3Rv
IGJ1bXBVcDsKLSAgICAgICAgICAgICAgICBpZiAoKytpID49IGlsaW0pCi0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGR2YWwoJmVwcykgKj0gMTAuOwotICAgICAg
ICAgICAgICAgIGR2YWwoJnUpICo9IDEwLjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIC8qIEdlbmVyYXRlIGlsaW0gZGlnaXRzLCB0aGVuIGZpeCB0aGVtIHVw
LiAqLwotICAgICAgICAgICAgZHZhbCgmZXBzKSAqPSB0ZW5zW2lsaW0gLSAxXTsKLSAgICAgICAg
ICAgIGZvciAoaSA9IDE7OyBpKyssIGR2YWwoJnUpICo9IDEwLikgewotICAgICAgICAgICAgICAg
IEwgPSAoaW50MzJfdCkoZHZhbCgmdSkpOwotICAgICAgICAgICAgICAgIGlmICghKGR2YWwoJnUp
IC09IEwpKQotICAgICAgICAgICAgICAgICAgICBpbGltID0gaTsKLSAgICAgICAgICAgICAgICAq
cysrID0gJzAnICsgKGludClMOwotICAgICAgICAgICAgICAgIGlmIChpID09IGlsaW0pIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGR2YWwoJnUpID4gMC41ICsgZHZhbCgmZXBzKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGdvdG8gYnVtcFVwOwotICAgICAgICAgICAgICAgICAgICBpZiAo
ZHZhbCgmdSkgPCAwLjUgLSBkdmFsKCZlcHMpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3
aGlsZSAoKi0tcyA9PSAnMCcpIHsgfQotICAgICAgICAgICAgICAgICAgICAgICAgcysrOwotICAg
ICAgICAgICAgICAgICAgICAgICAgZ290byByZXQ7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci1mYXN0RmFpbGVkOgotICAgICAgICBzID0gczA7Ci0gICAgICAgIGR2YWwo
JnUpID0gZHZhbCgmZDIpOwotICAgICAgICBrID0gazA7Ci0gICAgICAgIGlsaW0gPSBpbGltMDsK
LSAgICB9Ci0KLSAgICAvKiBEbyB3ZSBoYXZlIGEgInNtYWxsIiBpbnRlZ2VyPyAqLwotCi0gICAg
aWYgKGJlID49IDAgJiYgayA8PSBJbnRfbWF4KSB7Ci0gICAgICAgIC8qIFllcy4gKi8KLSAgICAg
ICAgZHMgPSB0ZW5zW2tdOwotICAgICAgICBpZiAobmRpZ2l0cyA8IDAgJiYgaWxpbSA8PSAwKSB7
Ci0gICAgICAgICAgICBTLmNsZWFyKCk7Ci0gICAgICAgICAgICBtaGkuY2xlYXIoKTsKLSAgICAg
ICAgICAgIGlmIChpbGltIDwgMCB8fCBkdmFsKCZ1KSA8PSA1ICogZHMpCi0gICAgICAgICAgICAg
ICAgZ290byBub0RpZ2l0czsKLSAgICAgICAgICAgIGdvdG8gb25lRGlnaXQ7Ci0gICAgICAgIH0K
LSAgICAgICAgZm9yIChpID0gMTs7IGkrKywgZHZhbCgmdSkgKj0gMTAuKSB7Ci0gICAgICAgICAg
ICBMID0gKGludDMyX3QpKGR2YWwoJnUpIC8gZHMpOwotICAgICAgICAgICAgZHZhbCgmdSkgLT0g
TCAqIGRzOwotICAgICAgICAgICAgKnMrKyA9ICcwJyArIChpbnQpTDsKLSAgICAgICAgICAgIGlm
ICghZHZhbCgmdSkpIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmIChpID09IGlsaW0pIHsKLSAgICAgICAgICAgICAgICBkdmFsKCZ1KSArPSBk
dmFsKCZ1KTsKLSAgICAgICAgICAgICAgICBpZiAoZHZhbCgmdSkgPiBkcyB8fCAoZHZhbCgmdSkg
PT0gZHMgJiYgKEwgJiAxKSkpIHsKLWJ1bXBVcDoKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUg
KCotLXMgPT0gJzknKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPT0gczApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBrKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKnMgPSAnMCc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICsrKnMrKzsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgZ290byByZXQ7Ci0gICAgfQotCi0gICAgbTIgPSBiMjsKLSAgICBtNSA9IGI1
OwotICAgIG1oaS5jbGVhcigpOwotICAgIG1sby5jbGVhcigpOwotICAgIGlmIChsZWZ0cmlnaHQp
IHsKLSAgICAgICAgaSA9IGRlbm9ybSA/IGJlICsgKEJpYXMgKyAoUCAtIDEpIC0gMSArIDEpIDog
MSArIFAgLSBiYml0czsKLSAgICAgICAgYjIgKz0gaTsKLSAgICAgICAgczIgKz0gaTsKLSAgICAg
ICAgaTJiKG1oaSwgMSk7Ci0gICAgfQotICAgIGlmIChtMiA+IDAgJiYgczIgPiAwKSB7Ci0gICAg
ICAgIGkgPSBtMiA8IHMyID8gbTIgOiBzMjsKLSAgICAgICAgYjIgLT0gaTsKLSAgICAgICAgbTIg
LT0gaTsKLSAgICAgICAgczIgLT0gaTsKLSAgICB9Ci0gICAgaWYgKGI1ID4gMCkgewotICAgICAg
ICBpZiAobGVmdHJpZ2h0KSB7Ci0gICAgICAgICAgICBpZiAobTUgPiAwKSB7Ci0gICAgICAgICAg
ICAgICAgcG93NW11bHQobWhpLCBtNSk7Ci0gICAgICAgICAgICAgICAgbXVsdChiLCBtaGkpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKChqID0gYjUgLSBtNSkpCi0gICAgICAgICAg
ICAgICAgcG93NW11bHQoYiwgaik7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcG93NW11
bHQoYiwgYjUpOwotICAgIH0KLSAgICBpMmIoUywgMSk7Ci0gICAgaWYgKHM1ID4gMCkKLSAgICAg
ICAgcG93NW11bHQoUywgczUpOwotCi0gICAgLyogQ2hlY2sgZm9yIHNwZWNpYWwgY2FzZSB0aGF0
IGQgaXMgYSBub3JtYWxpemVkIHBvd2VyIG9mIDIuICovCi0KLSAgICBzcGVjX2Nhc2UgPSAwOwot
ICAgIGlmICgocm91bmRpbmdOb25lIHx8IGxlZnRyaWdodCkgJiYgKCF3b3JkMSgmdSkgJiYgISh3
b3JkMCgmdSkgJiBCbmRyeV9tYXNrKSAmJiB3b3JkMCgmdSkgJiAoRXhwX21hc2sgJiB+RXhwX21z
azEpKSkgewotICAgICAgICAvKiBUaGUgc3BlY2lhbCBjYXNlICovCi0gICAgICAgIGIyICs9IExv
ZzJQOwotICAgICAgICBzMiArPSBMb2cyUDsKLSAgICAgICAgc3BlY19jYXNlID0gMTsKLSAgICB9
Ci0KLSAgICAvKiBBcnJhbmdlIGZvciBjb252ZW5pZW50IGNvbXB1dGF0aW9uIG9mIHF1b3RpZW50
czoKLSAgICAgKiBzaGlmdCBsZWZ0IGlmIG5lY2Vzc2FyeSBzbyBkaXZpc29yIGhhcyA0IGxlYWRp
bmcgMCBiaXRzLgotICAgICAqCi0gICAgICogUGVyaGFwcyB3ZSBzaG91bGQganVzdCBjb21wdXRl
IGxlYWRpbmcgMjggYml0cyBvZiBTIG9uY2UKLSAgICAgKiBhbmQgZm9yIGFsbCBhbmQgcGFzcyB0
aGVtIGFuZCBhIHNoaWZ0IHRvIHF1b3JlbSwgc28gaXQKLSAgICAgKiBjYW4gZG8gc2hpZnRzIGFu
ZCBvcnMgdG8gY29tcHV0ZSB0aGUgbnVtZXJhdG9yIGZvciBxLgotICAgICAqLwotICAgIGlmICgo
aSA9ICgoczUgPyAzMiAtIGhpMGJpdHMoUy53b3JkcygpW1Muc2l6ZSgpIC0gMV0pIDogMSkgKyBz
MikgJiAweDFmKSkKLSAgICAgICAgaSA9IDMyIC0gaTsKLSAgICBpZiAoaSA+IDQpIHsKLSAgICAg
ICAgaSAtPSA0OwotICAgICAgICBiMiArPSBpOwotICAgICAgICBtMiArPSBpOwotICAgICAgICBz
MiArPSBpOwotICAgIH0gZWxzZSBpZiAoaSA8IDQpIHsKLSAgICAgICAgaSArPSAyODsKLSAgICAg
ICAgYjIgKz0gaTsKLSAgICAgICAgbTIgKz0gaTsKLSAgICAgICAgczIgKz0gaTsKLSAgICB9Ci0g
ICAgaWYgKGIyID4gMCkKLSAgICAgICAgbHNoaWZ0KGIsIGIyKTsKLSAgICBpZiAoczIgPiAwKQot
ICAgICAgICBsc2hpZnQoUywgczIpOwotICAgIGlmIChrX2NoZWNrKSB7Ci0gICAgICAgIGlmIChj
bXAoYiwgUykgPCAwKSB7Ci0gICAgICAgICAgICBrLS07Ci0gICAgICAgICAgICBtdWx0YWRkKGIs
IDEwLCAwKTsgICAgLyogd2UgYm90Y2hlZCB0aGUgayBlc3RpbWF0ZSAqLwotICAgICAgICAgICAg
aWYgKGxlZnRyaWdodCkKLSAgICAgICAgICAgICAgICBtdWx0YWRkKG1oaSwgMTAsIDApOwotICAg
ICAgICAgICAgaWxpbSA9IGlsaW0xOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChpbGltIDw9
IDAgJiYgcm91bmRpbmdEZWNpbWFsUGxhY2VzKSB7Ci0gICAgICAgIGlmIChpbGltIDwgMCkKLSAg
ICAgICAgICAgIGdvdG8gbm9EaWdpdHM7Ci0gICAgICAgIG11bHRhZGQoUywgNSwgMCk7Ci0gICAg
ICAgIC8vIEZvciBJRUVFLTc1NCB1bmJpYXNlZCByb3VuZGluZyB0aGlzIGNoZWNrIHNob3VsZCBi
ZSA8PSwgc3VjaCB0aGF0IDAuNSB3b3VsZCBmbHVzaCB0byB6ZXJvLgotICAgICAgICBpZiAoY21w
KGIsIFMpIDwgMCkKLSAgICAgICAgICAgIGdvdG8gbm9EaWdpdHM7Ci0gICAgICAgIGdvdG8gb25l
RGlnaXQ7Ci0gICAgfQotICAgIGlmIChsZWZ0cmlnaHQpIHsKLSAgICAgICAgaWYgKG0yID4gMCkK
LSAgICAgICAgICAgIGxzaGlmdChtaGksIG0yKTsKLQotICAgICAgICAvKiBDb21wdXRlIG1sbyAt
LSBjaGVjayBmb3Igc3BlY2lhbCBjYXNlCi0gICAgICAgICAqIHRoYXQgZCBpcyBhIG5vcm1hbGl6
ZWQgcG93ZXIgb2YgMi4KLSAgICAgICAgICovCi0KLSAgICAgICAgbWxvID0gbWhpOwotICAgICAg
ICBpZiAoc3BlY19jYXNlKQotICAgICAgICAgICAgbHNoaWZ0KG1oaSwgTG9nMlApOwotCi0gICAg
ICAgIGZvciAoaSA9IDE7O2krKykgewotICAgICAgICAgICAgZGlnID0gcXVvcmVtKGIsIFMpICsg
JzAnOwotICAgICAgICAgICAgLyogRG8gd2UgeWV0IGhhdmUgdGhlIHNob3J0ZXN0IGRlY2ltYWwg
c3RyaW5nCi0gICAgICAgICAgICAgKiB0aGF0IHdpbGwgcm91bmQgdG8gZD8KLSAgICAgICAgICAg
ICAqLwotICAgICAgICAgICAgaiA9IGNtcChiLCBtbG8pOwotICAgICAgICAgICAgZGlmZihkZWx0
YSwgUywgbWhpKTsKLSAgICAgICAgICAgIGoxID0gZGVsdGEuc2lnbiA/IDEgOiBjbXAoYiwgZGVs
dGEpOwotI2lmZGVmIERUT0FfUk9VTkRfQklBU0VECi0gICAgICAgICAgICBpZiAoaiA8IDAgfHwg
IWopIHsKLSNlbHNlCi0gICAgICAgICAgICAvLyBGSVhNRTogRUNNQS0yNjIgc3BlY2lmaWVzIHRo
YXQgZXF1aWRpc3RhbnQgcmVzdWx0cyByb3VuZCBhd2F5IGZyb20KLSAgICAgICAgICAgIC8vIHpl
cm8sIHdoaWNoIHByb2JhYmx5IG1lYW5zIHdlIHNob3VsZG4ndCBiZSBvbiB0aGUgdW5iaWFzZWQg
Y29kZSBwYXRoCi0gICAgICAgICAgICAvLyAodGhlICh3b3JkMSgmdSkgJiAxKSBjbGF1c2UgaXMg
bG9va2luZyBoaWdobHkgc3VzcGljaW91cykuIEkgaGF2ZW4ndAotICAgICAgICAgICAgLy8geWV0
IHVuZGVyc3Rvb2QgdGhpcyBjb2RlIHdlbGwgZW5vdWdoIHRvIG1ha2UgdGhlIGNhbGwsIGJ1dCB3
ZSBzaG91bGQKLSAgICAgICAgICAgIC8vIHByb2JhYmx5IGJlIGVuYWJsaW5nIERUT0FfUk9VTkRf
QklBU0VELiBJIHRoaW5rIHRoZSBpbnRlcmVzdGluZyBjb3JuZXIKLSAgICAgICAgICAgIC8vIGNh
c2UgdG8gdW5kZXJzdGFuZCBpcyBwcm9iYWJseSAiTWF0aC5wb3coMC41LCAyNCkudG9TdHJpbmco
KSIuCi0gICAgICAgICAgICAvLyBJIGJlbGlldmUgdGhpcyB2YWx1ZSBpcyBpbnRlcmVzdGluZyBi
ZWNhdXNlIEkgdGhpbmsgaXQgaXMgcHJlY2lzZWx5Ci0gICAgICAgICAgICAvLyByZXByZXNlbnRh
YmxlIGluIGJpbmFyeSBmbG9hdGluZyBwb2ludCwgYW5kIGl0cyBkZWNpbWFsIHJlcHJlc2VudGF0
aW9uCi0gICAgICAgICAgICAvLyBoYXMgYSBzaW5nbGUgZGlnaXQgdGhhdCBTdGVlbGUgJiBXaGl0
ZSByZWR1Y3Rpb24gY2FuIHJlbW92ZSwgd2l0aCB0aGUKLSAgICAgICAgICAgIC8vIHZhbHVlIDUg
KHRodXMgZXF1aWRpc3RhbnQgZnJvbSB0aGUgbmV4dCBudW1iZXJzIGFib3ZlIGFuZCBiZWxvdyku
Ci0gICAgICAgICAgICAvLyBXZSBwcm9kdWNlIHRoZSBjb3JyZWN0IGFuc3dlciB1c2luZyBlaXRo
ZXIgY29kZXBhdGgsIGFuZCBJIGRvbid0IGFzCi0gICAgICAgICAgICAvLyB5ZXQgdW5kZXJzdGFu
ZCB3aHkuIDotKQotICAgICAgICAgICAgaWYgKCFqMSAmJiAhKHdvcmQxKCZ1KSAmIDEpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGRpZyA9PSAnOScpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8g
cm91bmQ5dXA7Ci0gICAgICAgICAgICAgICAgaWYgKGogPiAwKQotICAgICAgICAgICAgICAgICAg
ICBkaWcrKzsKLSAgICAgICAgICAgICAgICAqcysrID0gZGlnOwotICAgICAgICAgICAgICAgIGdv
dG8gcmV0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGogPCAwIHx8ICghaiAmJiAh
KHdvcmQxKCZ1KSAmIDEpKSkgewotI2VuZGlmCi0gICAgICAgICAgICAgICAgaWYgKChiLndvcmRz
KClbMF0gfHwgYi5zaXplKCkgPiAxKSAmJiAoajEgPiAwKSkgewotICAgICAgICAgICAgICAgICAg
ICBsc2hpZnQoYiwgMSk7Ci0gICAgICAgICAgICAgICAgICAgIGoxID0gY21wKGIsIFMpOwotICAg
ICAgICAgICAgICAgICAgICAvLyBGb3IgSUVFRS03NTQgcm91bmQtdG8tZXZlbiwgdGhpcyBjaGVj
ayBzaG91bGQgYmUgKGoxID4gMCB8fCAoIWoxICYmIChkaWcgJiAxKSkpLAotICAgICAgICAgICAg
ICAgICAgICAvLyBidXQgRUNNQS0yNjIgc3BlY2lmaWVzIHRoYXQgZXF1aWRpc3RhbnQgdmFsdWVz
IChlLmcuICguNSkudG9GaXhlZCgpKSBzaG91bGQKLSAgICAgICAgICAgICAgICAgICAgLy8gYmUg
cm91bmRlZCBhd2F5IGZyb20gemVyby4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGoxID49IDAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaWcgPT0gJzknKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdvdG8gcm91bmQ5dXA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBk
aWcrKzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAqcysrID0gZGlnOwotICAgICAgICAgICAgICAgIGdvdG8gcmV0OwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKGoxID4gMCkgewotICAgICAgICAgICAgICAgIGlmIChkaWcg
PT0gJzknKSB7IC8qIHBvc3NpYmxlIGlmIGkgPT0gMSAqLwotcm91bmQ5dXA6Ci0gICAgICAgICAg
ICAgICAgICAgICpzKysgPSAnOSc7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gcm91bmRvZmY7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICpzKysgPSBkaWcgKyAxOwotICAg
ICAgICAgICAgICAgIGdvdG8gcmV0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKnMrKyA9
IGRpZzsKLSAgICAgICAgICAgIGlmIChpID09IGlsaW0pCi0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBtdWx0YWRkKGIsIDEwLCAwKTsKLSAgICAgICAgICAgIG11bHRhZGQobWxv
LCAxMCwgMCk7Ci0gICAgICAgICAgICBtdWx0YWRkKG1oaSwgMTAsIDApOwotICAgICAgICB9Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChpID0gMTs7IGkrKykgewotICAgICAgICAgICAgKnMr
KyA9IGRpZyA9IHF1b3JlbShiLCBTKSArICcwJzsKLSAgICAgICAgICAgIGlmICghYi53b3Jkcygp
WzBdICYmIGIuc2l6ZSgpIDw9IDEpCi0gICAgICAgICAgICAgICAgZ290byByZXQ7Ci0gICAgICAg
ICAgICBpZiAoaSA+PSBpbGltKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
bXVsdGFkZChiLCAxMCwgMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBSb3VuZCBvZmYg
bGFzdCBkaWdpdCAqLwotCi0gICAgbHNoaWZ0KGIsIDEpOwotICAgIGogPSBjbXAoYiwgUyk7Ci0g
ICAgLy8gRm9yIElFRUUtNzU0IHJvdW5kLXRvLWV2ZW4sIHRoaXMgY2hlY2sgc2hvdWxkIGJlIChq
ID4gMCB8fCAoIWogJiYgKGRpZyAmIDEpKSksCi0gICAgLy8gYnV0IEVDTUEtMjYyIHNwZWNpZmll
cyB0aGF0IGVxdWlkaXN0YW50IHZhbHVlcyAoZS5nLiAoLjUpLnRvRml4ZWQoKSkgc2hvdWxkCi0g
ICAgLy8gYmUgcm91bmRlZCBhd2F5IGZyb20gemVyby4KLSAgICBpZiAoaiA+PSAwKSB7Ci1yb3Vu
ZG9mZjoKLSAgICAgICAgd2hpbGUgKCotLXMgPT0gJzknKQotICAgICAgICAgICAgaWYgKHMgPT0g
czApIHsKLSAgICAgICAgICAgICAgICBrKys7Ci0gICAgICAgICAgICAgICAgKnMrKyA9ICcxJzsK
LSAgICAgICAgICAgICAgICBnb3RvIHJldDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgKysqcysr
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHdoaWxlICgqLS1zID09ICcwJykgeyB9Ci0gICAgICAg
IHMrKzsKLSAgICB9Ci0gICAgZ290byByZXQ7Ci1ub0RpZ2l0czoKLSAgICBleHBvbmVudE91dCA9
IDA7Ci0gICAgcHJlY2lzaW9uT3V0ID0gMTsKLSAgICByZXN1bHRbMF0gPSAnMCc7Ci0gICAgcmVz
dWx0WzFdID0gJ1wwJzsKLSAgICByZXR1cm47Ci1vbmVEaWdpdDoKLSAgICAqcysrID0gJzEnOwot
ICAgIGsrKzsKLSAgICBnb3RvIHJldDsKLXJldDoKLSAgICBBU1NFUlQocyA+IHJlc3VsdCk7Ci0g
ICAgKnMgPSAwOwotICAgIGV4cG9uZW50T3V0ID0gazsKLSAgICBwcmVjaXNpb25PdXQgPSBzIC0g
cmVzdWx0OwotfQotCi12b2lkIGR0b2EoRHRvYUJ1ZmZlciByZXN1bHQsIGRvdWJsZSBkZCwgYm9v
bCYgc2lnbiwgaW50JiBleHBvbmVudCwgdW5zaWduZWQmIHByZWNpc2lvbikKLXsKLSAgICAvLyBm
bGFncyBhcmUgcm91bmRpbmdOb25lLCBsZWZ0cmlnaHQuCi0gICAgZHRvYTx0cnVlLCBmYWxzZSwg
ZmFsc2UsIHRydWU+KHJlc3VsdCwgZGQsIDAsIHNpZ24sIGV4cG9uZW50LCBwcmVjaXNpb24pOwot
fQotCi12b2lkIGR0b2FSb3VuZFNGKER0b2FCdWZmZXIgcmVzdWx0LCBkb3VibGUgZGQsIGludCBu
ZGlnaXRzLCBib29sJiBzaWduLCBpbnQmIGV4cG9uZW50LCB1bnNpZ25lZCYgcHJlY2lzaW9uKQot
ewotICAgIC8vIGZsYWcgaXMgcm91bmRpbmdTaWduaWZpY2FudEZpZ3VyZXMuCi0gICAgZHRvYTxm
YWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlPihyZXN1bHQsIGRkLCBuZGlnaXRzLCBzaWduLCBleHBv
bmVudCwgcHJlY2lzaW9uKTsKLX0KLQotdm9pZCBkdG9hUm91bmREUChEdG9hQnVmZmVyIHJlc3Vs
dCwgZG91YmxlIGRkLCBpbnQgbmRpZ2l0cywgYm9vbCYgc2lnbiwgaW50JiBleHBvbmVudCwgdW5z
aWduZWQmIHByZWNpc2lvbikKLXsKLSAgICAvLyBmbGFnIGlzIHJvdW5kaW5nRGVjaW1hbFBsYWNl
cy4KLSAgICBkdG9hPGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2U+KHJlc3VsdCwgZGQsIG5kaWdp
dHMsIHNpZ24sIGV4cG9uZW50LCBwcmVjaXNpb24pOwotfQotCi1zdGF0aWMgQUxXQVlTX0lOTElO
RSB2b2lkIGNvcHlBc2NpaVRvVVRGMTYoVUNoYXIqIG5leHQsIGNvbnN0IGNoYXIqIHNyYywgdW5z
aWduZWQgc2l6ZSkKK2NvbnN0IGNoYXIgKm51bWJlclRvU3RyaW5nKGRvdWJsZSBkLCBOdW1iZXJU
b1N0cmluZ0J1ZmZlciBidWZmZXIpCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNp
emU7ICsraSkKLSAgICAgICAgKm5leHQrKyA9ICpzcmMrKzsKLX0KLQotdW5zaWduZWQgbnVtYmVy
VG9TdHJpbmcoZG91YmxlIGQsIE51bWJlclRvU3RyaW5nQnVmZmVyIGJ1ZmZlcikKLXsKLSAgICAv
LyBIYW5kbGUgTmFOIGFuZCBJbmZpbml0eS4KLSAgICBpZiAoIWlzZmluaXRlKGQpKSB7Ci0gICAg
ICAgIGlmIChpc25hbihkKSkgewotICAgICAgICAgICAgY29weUFzY2lpVG9VVEYxNihidWZmZXIs
ICJOYU4iLCAzKTsKLSAgICAgICAgICAgIHJldHVybiAzOwotICAgICAgICB9Ci0gICAgICAgIGlm
IChkID4gMCkgewotICAgICAgICAgICAgY29weUFzY2lpVG9VVEYxNihidWZmZXIsICJJbmZpbml0
eSIsIDgpOwotICAgICAgICAgICAgcmV0dXJuIDg7Ci0gICAgICAgIH0KLSAgICAgICAgY29weUFz
Y2lpVG9VVEYxNihidWZmZXIsICItSW5maW5pdHkiLCA5KTsKLSAgICAgICAgcmV0dXJuIDk7Ci0g
ICAgfQotCi0gICAgLy8gQ29udmVydCB0byBkZWNpbWFsIHdpdGggcm91bmRpbmcuCi0gICAgRGVj
aW1hbE51bWJlciBudW1iZXIoZCk7Ci0gICAgcmV0dXJuIG51bWJlci5leHBvbmVudCgpID49IC02
ICYmIG51bWJlci5leHBvbmVudCgpIDwgMjEKLSAgICAgICAgPyBudW1iZXIudG9TdHJpbmdEZWNp
bWFsKGJ1ZmZlciwgTnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgpCi0gICAgICAgIDogbnVtYmVy
LnRvU3RyaW5nRXhwb25lbnRpYWwoYnVmZmVyLCBOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCk7
CisgICAgZG91YmxlX2NvbnZlcnNpb246OlN0cmluZ0J1aWxkZXIgYnVpbGRlcihidWZmZXIsIE51
bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoKTsKKyAgICBjb25zdCBkb3VibGVfY29udmVyc2lvbjo6
RG91YmxlVG9TdHJpbmdDb252ZXJ0ZXImIGNvbnZlcnRlciA9IGRvdWJsZV9jb252ZXJzaW9uOjpE
b3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6RWNtYVNjcmlwdENvbnZlcnRlcigpOworICAgIGNvbnZl
cnRlci5Ub1Nob3J0ZXN0KGQsICZidWlsZGVyKTsKKyAgICByZXR1cm4gYnVpbGRlci5GaW5hbGl6
ZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvZHRvYS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hLmgKaW5k
ZXggMzkyNGExY2M0MDVkYjI5M2IwMWY2ZDRiZGFlNjU3NTk1MjU4MTcyYy4uNzBlZWMxMmU0MzU1
YzNiN2I0NTBjZTc5MjkyMWI4MmZhNWUyZWJhYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9kdG9hLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hLmgK
QEAgLTIxLDcgKzIxLDcgQEAKICNpZm5kZWYgV1RGX2R0b2FfaAogI2RlZmluZSBXVEZfZHRvYV9o
CiAKLSNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CisjaW5jbHVkZSA8d3RmL2R0b2Ev
ZG91YmxlLWNvbnZlcnNpb24uaD4KIAogbmFtZXNwYWNlIFdURiB7CiBjbGFzcyBNdXRleDsKQEAg
LTMyLDE2ICszMiwxMCBAQCBleHRlcm4gV1RGOjpNdXRleCogc19kdG9hUDVNdXRleDsKIC8vIHNl
OiAqc2Ugd2lsbCBoYXZlIHRoZSBsYXN0IGNvbnN1bWVkIGNoYXJhY3RlciBwb3NpdGlvbiArIDEu
CiBkb3VibGUgc3RydG9kKGNvbnN0IGNoYXIqIHMwMCwgY2hhcioqIHNlKTsKIAotdHlwZWRlZiBj
aGFyIER0b2FCdWZmZXJbODBdOwotCi12b2lkIGR0b2EoRHRvYUJ1ZmZlciByZXN1bHQsIGRvdWJs
ZSBkZCwgYm9vbCYgc2lnbiwgaW50JiBleHBvbmVudCwgdW5zaWduZWQmIHByZWNpc2lvbik7Ci12
b2lkIGR0b2FSb3VuZFNGKER0b2FCdWZmZXIgcmVzdWx0LCBkb3VibGUgZGQsIGludCBuZGlnaXRz
LCBib29sJiBzaWduLCBpbnQmIGV4cG9uZW50LCB1bnNpZ25lZCYgcHJlY2lzaW9uKTsKLXZvaWQg
ZHRvYVJvdW5kRFAoRHRvYUJ1ZmZlciByZXN1bHQsIGRvdWJsZSBkZCwgaW50IG5kaWdpdHMsIGJv
b2wmIHNpZ24sIGludCYgZXhwb25lbnQsIHVuc2lnbmVkJiBwcmVjaXNpb24pOwotCiAvLyBTaXpl
ID0gODAgZm9yIHNpemVvZihEdG9hQnVmZmVyKSArIHNvbWUgc2lnbiBiaXRzLCBkZWNpbWFsIHBv
aW50LCAnZScsIGV4cG9uZW50IGRpZ2l0cy4KIGNvbnN0IHVuc2lnbmVkIE51bWJlclRvU3RyaW5n
QnVmZmVyTGVuZ3RoID0gOTY7Ci10eXBlZGVmIFVDaGFyIE51bWJlclRvU3RyaW5nQnVmZmVyW051
bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoXTsKLXVuc2lnbmVkIG51bWJlclRvU3RyaW5nKGRvdWJs
ZSwgTnVtYmVyVG9TdHJpbmdCdWZmZXIpOwordHlwZWRlZiBjaGFyIE51bWJlclRvU3RyaW5nQnVm
ZmVyW051bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoXTsKK2NvbnN0IGNoYXIgKm51bWJlclRvU3Ry
aW5nKGRvdWJsZSwgTnVtYmVyVG9TdHJpbmdCdWZmZXIpOwogCiB9IC8vIG5hbWVzcGFjZSBXVEYK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL0NPUFlJTkcgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvQ09QWUlORwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MzM3MThh
OWVmOWRhZTRjYjRhZmE1NmU0OTAyMTE3NjBkOGE5NDlmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL0NPUFlJTkcKQEAgLTAsMCArMSwyNiBAQAorQ29w
eXJpZ2h0IDIwMDYtMjAxMSwgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICAgICAgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKK0EgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCitPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK1NQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
K0xJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCitUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKK09G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvTElD
RU5TRSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9MSUNFTlNFCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjkzMzcxOGE5ZWY5ZGFlNGNiNGFmYTU2ZTQ5MDIxMTc2MGQ4YTk0OWYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvTElDRU5TRQpAQCAtMCwwICsxLDI2
IEBACitDb3B5cmlnaHQgMjAwNi0yMDExLCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCittZXQ6CisKKyAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICAgICAgZGlzY2xhaW1lciBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgICAgICB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAgICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKK09XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCitEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKK1RIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
ZHRvYS9SRUFETUUgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvUkVBRE1FCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmYxODZiNDIwZjQyYmMxNGM3ZDU3NjVlYTQzZjZiMjhkM2MyOWI5MjEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvUkVBRE1FCkBAIC0wLDAg
KzEsMTEgQEAKK2h0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9kb3VibGUtY29udmVyc2lvbgorCitU
aGlzIHByb2plY3QgKGRvdWJsZS1jb252ZXJzaW9uKSBwcm92aWRlcyBiaW5hcnktZGVjaW1hbCBh
bmQgZGVjaW1hbC1iaW5hcnkKK3JvdXRpbmVzIGZvciBJRUVFIGRvdWJsZXMuCisKK1RoZSBsaWJy
YXJ5IGNvbnNpc3RzIG9mIGVmZmljaWVudCBjb252ZXJzaW9uIHJvdXRpbmVzIHRoYXQgaGF2ZSBi
ZWVuIGV4dHJhY3RlZAorZnJvbSB0aGUgVjggSmF2YVNjcmlwdCBlbmdpbmUuIFRoZSBjb2RlIGhh
cyBiZWVuIHJlZmFjdG9yZWQgYW5kIGltcHJvdmVkIHNvIHRoYXQKK2l0IGNhbiBiZSB1c2VkIG1v
cmUgZWFzaWx5IGluIG90aGVyIHByb2plY3RzLgorCitUaGVyZSBpcyBleHRlbnNpdmUgZG9jdW1l
bnRhdGlvbiBpbiBzcmMvZG91YmxlLWNvbnZlcnNpb24uaC4gT3RoZXIgZXhhbXBsZXMgY2FuCiti
ZSBmb3VuZCBpbiB0ZXN0L2NjdGVzdC90ZXN0LWNvbnZlcnNpb25zLmNjLgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS1kdG9hLmNjIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS1kdG9hLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU0OWIwYTBk
YjQ1ZmVhZjllZDA4NmE3NjlkODQxOTE5Y2IzZWYyMzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvYmlnbnVtLWR0b2EuY2MKQEAgLTAsMCArMSw2NTMg
QEAKKy8vIENvcHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisv
LyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAg
ICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAg
ICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
Ky8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8v
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2luY2x1ZGUgPG1hdGguaD4KKworI2lu
Y2x1ZGUgImJpZ251bS1kdG9hLmgiCisKKyNpbmNsdWRlICJiaWdudW0uaCIKKyNpbmNsdWRlICJk
b3VibGUuaCIKKworbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKKyAgICAKKyAgICBzdGF0
aWMgaW50IE5vcm1hbGl6ZWRFeHBvbmVudCh1aW50NjRfdCBzaWduaWZpY2FuZCwgaW50IGV4cG9u
ZW50KSB7CisgICAgICAgIEFTU0VSVChzaWduaWZpY2FuZCAhPSAwKTsKKyAgICAgICAgd2hpbGUg
KChzaWduaWZpY2FuZCAmIERvdWJsZTo6a0hpZGRlbkJpdCkgPT0gMCkgeworICAgICAgICAgICAg
c2lnbmlmaWNhbmQgPSBzaWduaWZpY2FuZCA8PCAxOworICAgICAgICAgICAgZXhwb25lbnQgPSBl
eHBvbmVudCAtIDE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGV4cG9uZW50OworICAgIH0K
KyAgICAKKyAgICAKKyAgICAvLyBGb3J3YXJkIGRlY2xhcmF0aW9uczoKKyAgICAvLyBSZXR1cm5z
IGFuIGVzdGltYXRpb24gb2YgayBzdWNoIHRoYXQgMTBeKGstMSkgPD0gdiA8IDEwXmsuCisgICAg
c3RhdGljIGludCBFc3RpbWF0ZVBvd2VyKGludCBleHBvbmVudCk7CisgICAgLy8gQ29tcHV0ZXMg
diAvIDEwXmVzdGltYXRlZF9wb3dlciBleGFjdGx5LCBhcyBhIHJhdGlvIG9mIHR3byBiaWdudW1z
LCBudW1lcmF0b3IKKyAgICAvLyBhbmQgZGVub21pbmF0b3IuCisgICAgc3RhdGljIHZvaWQgSW5p
dGlhbFNjYWxlZFN0YXJ0VmFsdWVzKGRvdWJsZSB2LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgZXN0aW1hdGVkX3Bvd2VyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIG5lZWRfYm91bmRhcnlfZGVsdGFzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIG51bWVyYXRvciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBkZW5vbWluYXRv
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBkZWx0
YV9taW51cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVt
KiBkZWx0YV9wbHVzKTsKKyAgICAvLyBNdWx0aXBsaWVzIG51bWVyYXRvci9kZW5vbWluYXRvciBz
byB0aGF0IGl0cyB2YWx1ZXMgbGllcyBpbiB0aGUgcmFuZ2UgMS0xMC4KKyAgICAvLyBSZXR1cm5z
IGRlY2ltYWxfcG9pbnQgcy50LgorICAgIC8vICB2ID0gbnVtZXJhdG9yJy9kZW5vbWluYXRvcicg
KiAxMF4oZGVjaW1hbF9wb2ludC0xKQorICAgIC8vICAgICB3aGVyZSBudW1lcmF0b3InIGFuZCBk
ZW5vbWluYXRvcicgYXJlIHRoZSB2YWx1ZXMgb2YgbnVtZXJhdG9yIGFuZAorICAgIC8vICAgICBk
ZW5vbWluYXRvciBhZnRlciB0aGUgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLgorICAgIHN0YXRpYyB2
b2lkIEZpeHVwTXVsdGlwbHkxMChpbnQgZXN0aW1hdGVkX3Bvd2VyLCBib29sIGlzX2V2ZW4sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogZGVjaW1hbF9wb2ludCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBudW1lcmF0b3IsIEJpZ251bSogZGVu
b21pbmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogZGVsdGFf
bWludXMsIEJpZ251bSogZGVsdGFfcGx1cyk7CisgICAgLy8gR2VuZXJhdGVzIGRpZ2l0cyBmcm9t
IHRoZSBsZWZ0IHRvIHRoZSByaWdodCBhbmQgc3RvcHMgd2hlbiB0aGUgZ2VuZXJhdGVkCisgICAg
Ly8gZGlnaXRzIHlpZWxkIHRoZSBzaG9ydGVzdCBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIHYu
CisgICAgc3RhdGljIHZvaWQgR2VuZXJhdGVTaG9ydGVzdERpZ2l0cyhCaWdudW0qIG51bWVyYXRv
ciwgQmlnbnVtKiBkZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEJpZ251bSogZGVsdGFfbWludXMsIEJpZ251bSogZGVsdGFfcGx1cywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfZXZlbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXIsIGludCogbGVu
Z3RoKTsKKyAgICAvLyBHZW5lcmF0ZXMgJ3JlcXVlc3RlZF9kaWdpdHMnIGFmdGVyIHRoZSBkZWNp
bWFsIHBvaW50LgorICAgIHN0YXRpYyB2b2lkIEJpZ251bVRvRml4ZWQoaW50IHJlcXVlc3RlZF9k
aWdpdHMsIGludCogZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEJpZ251bSogbnVtZXJhdG9yLCBCaWdudW0qIGRlbm9taW5hdG9yLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+KGJ1ZmZlciksIGludCogbGVuZ3RoKTsKKyAgICAv
LyBHZW5lcmF0ZXMgJ2NvdW50JyBkaWdpdHMgb2YgbnVtZXJhdG9yL2Rlbm9taW5hdG9yLgorICAg
IC8vIE9uY2UgJ2NvdW50JyBkaWdpdHMgaGF2ZSBiZWVuIHByb2R1Y2VkIHJvdW5kcyB0aGUgcmVz
dWx0IGRlcGVuZGluZyBvbiB0aGUKKyAgICAvLyByZW1haW5kZXIgKHJlbWFpbmRlcnMgb2YgZXhh
Y3RseSAuNSByb3VuZCB1cHdhcmRzKS4gTWlnaHQgdXBkYXRlIHRoZQorICAgIC8vIGRlY2ltYWxf
cG9pbnQgd2hlbiByb3VuZGluZyB1cCAoZm9yIGV4YW1wbGUgZm9yIDAuOTk5OSkuCisgICAgc3Rh
dGljIHZvaWQgR2VuZXJhdGVDb3VudGVkRGlnaXRzKGludCBjb3VudCwgaW50KiBkZWNpbWFsX3Bv
aW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIG51bWVy
YXRvciwgQmlnbnVtKiBkZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVmVjdG9yPGNoYXI+KGJ1ZmZlciksIGludCogbGVuZ3RoKTsKKyAgICAKKyAgICAK
KyAgICB2b2lkIEJpZ251bUR0b2EoZG91YmxlIHYsIEJpZ251bUR0b2FNb2RlIG1vZGUsIGludCBy
ZXF1ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVy
LCBpbnQqIGxlbmd0aCwgaW50KiBkZWNpbWFsX3BvaW50KSB7CisgICAgICAgIEFTU0VSVCh2ID4g
MCk7CisgICAgICAgIEFTU0VSVCghRG91YmxlKHYpLklzU3BlY2lhbCgpKTsKKyAgICAgICAgdWlu
dDY0X3Qgc2lnbmlmaWNhbmQgPSBEb3VibGUodikuU2lnbmlmaWNhbmQoKTsKKyAgICAgICAgYm9v
bCBpc19ldmVuID0gKHNpZ25pZmljYW5kICYgMSkgPT0gMDsKKyAgICAgICAgaW50IGV4cG9uZW50
ID0gRG91YmxlKHYpLkV4cG9uZW50KCk7CisgICAgICAgIGludCBub3JtYWxpemVkX2V4cG9uZW50
ID0gTm9ybWFsaXplZEV4cG9uZW50KHNpZ25pZmljYW5kLCBleHBvbmVudCk7CisgICAgICAgIC8v
IGVzdGltYXRlZF9wb3dlciBtaWdodCBiZSB0b28gbG93IGJ5IDEuCisgICAgICAgIGludCBlc3Rp
bWF0ZWRfcG93ZXIgPSBFc3RpbWF0ZVBvd2VyKG5vcm1hbGl6ZWRfZXhwb25lbnQpOworICAgICAg
ICAKKyAgICAgICAgLy8gU2hvcnRjdXQgZm9yIEZpeGVkLgorICAgICAgICAvLyBUaGUgcmVxdWVz
dGVkIGRpZ2l0cyBjb3JyZXNwb25kIHRvIHRoZSBkaWdpdHMgYWZ0ZXIgdGhlIHBvaW50LiBJZiB0
aGUKKyAgICAgICAgLy8gbnVtYmVyIGlzIG11Y2ggdG9vIHNtYWxsLCB0aGVuIHRoZXJlIGlzIG5v
IG5lZWQgaW4gdHJ5aW5nIHRvIGdldCBhbnkKKyAgICAgICAgLy8gZGlnaXRzLgorICAgICAgICBp
ZiAobW9kZSA9PSBCSUdOVU1fRFRPQV9GSVhFRCAmJiAtZXN0aW1hdGVkX3Bvd2VyIC0gMSA+IHJl
cXVlc3RlZF9kaWdpdHMpIHsKKyAgICAgICAgICAgIGJ1ZmZlclswXSA9ICdcMCc7CisgICAgICAg
ICAgICAqbGVuZ3RoID0gMDsKKyAgICAgICAgICAgIC8vIFNldCBkZWNpbWFsLXBvaW50IHRvIC1y
ZXF1ZXN0ZWRfZGlnaXRzLiBUaGlzIGlzIHdoYXQgR2F5IGRvZXMuCisgICAgICAgICAgICAvLyBO
b3RlIHRoYXQgaXQgc2hvdWxkIG5vdCBoYXZlIGFueSBlZmZlY3QgYW55d2F5cyBzaW5jZSB0aGUg
c3RyaW5nIGlzCisgICAgICAgICAgICAvLyBlbXB0eS4KKyAgICAgICAgICAgICpkZWNpbWFsX3Bv
aW50ID0gLXJlcXVlc3RlZF9kaWdpdHM7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIEJpZ251bSBudW1lcmF0b3I7CisgICAgICAgIEJpZ251bSBkZW5v
bWluYXRvcjsKKyAgICAgICAgQmlnbnVtIGRlbHRhX21pbnVzOworICAgICAgICBCaWdudW0gZGVs
dGFfcGx1czsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBiaWdudW0gY2FuIGdyb3cgbGFyZ2Ug
ZW5vdWdoLiBUaGUgc21hbGxlc3QgZG91YmxlIGVxdWFscworICAgICAgICAvLyA0ZS0zMjQuIElu
IHRoaXMgY2FzZSB0aGUgZGVub21pbmF0b3IgbmVlZHMgZmV3ZXIgdGhhbiAzMjQqNCBiaW5hcnkg
ZGlnaXRzLgorICAgICAgICAvLyBUaGUgbWF4aW11bSBkb3VibGUgaXMgMS43OTc2OTMxMzQ4NjIz
MTU3ZTMwOCB3aGljaCBuZWVkcyBmZXdlciB0aGFuCisgICAgICAgIC8vIDMwOCo0IGJpbmFyeSBk
aWdpdHMuCisgICAgICAgIEFTU0VSVChCaWdudW06OmtNYXhTaWduaWZpY2FudEJpdHMgPj0gMzI0
KjQpOworICAgICAgICBib29sIG5lZWRfYm91bmRhcnlfZGVsdGFzID0gKG1vZGUgPT0gQklHTlVN
X0RUT0FfU0hPUlRFU1QpOworICAgICAgICBJbml0aWFsU2NhbGVkU3RhcnRWYWx1ZXModiwgZXN0
aW1hdGVkX3Bvd2VyLCBuZWVkX2JvdW5kYXJ5X2RlbHRhcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZudW1lcmF0b3IsICZkZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZkZWx0YV9taW51cywgJmRlbHRhX3BsdXMpOworICAgICAgICAvLyBX
ZSBub3cgaGF2ZSB2ID0gKG51bWVyYXRvciAvIGRlbm9taW5hdG9yKSAqIDEwXmVzdGltYXRlZF9w
b3dlci4KKyAgICAgICAgRml4dXBNdWx0aXBseTEwKGVzdGltYXRlZF9wb3dlciwgaXNfZXZlbiwg
ZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICZudW1lcmF0b3IsICZkZW5v
bWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICZkZWx0YV9taW51cywgJmRlbHRhX3Bs
dXMpOworICAgICAgICAvLyBXZSBub3cgaGF2ZSB2ID0gKG51bWVyYXRvciAvIGRlbm9taW5hdG9y
KSAqIDEwXihkZWNpbWFsX3BvaW50LTEpLCBhbmQKKyAgICAgICAgLy8gIDEgPD0gKG51bWVyYXRv
ciArIGRlbHRhX3BsdXMpIC8gZGVub21pbmF0b3IgPCAxMAorICAgICAgICBzd2l0Y2ggKG1vZGUp
IHsKKyAgICAgICAgICAgIGNhc2UgQklHTlVNX0RUT0FfU0hPUlRFU1Q6CisgICAgICAgICAgICAg
ICAgR2VuZXJhdGVTaG9ydGVzdERpZ2l0cygmbnVtZXJhdG9yLCAmZGVub21pbmF0b3IsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGVsdGFfbWludXMsICZkZWx0YV9w
bHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfZXZlbiwgYnVm
ZmVyLCBsZW5ndGgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBC
SUdOVU1fRFRPQV9GSVhFRDoKKyAgICAgICAgICAgICAgICBCaWdudW1Ub0ZpeGVkKHJlcXVlc3Rl
ZF9kaWdpdHMsIGRlY2ltYWxfcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
bnVtZXJhdG9yLCAmZGVub21pbmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
dWZmZXIsIGxlbmd0aCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IEJJR05VTV9EVE9BX1BSRUNJU0lPTjoKKyAgICAgICAgICAgICAgICBHZW5lcmF0ZUNvdW50ZWRE
aWdpdHMocmVxdWVzdGVkX2RpZ2l0cywgZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJm51bWVyYXRvciwgJmRlbm9taW5hdG9yLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgIH0KKyAgICAgICAgYnVmZmVyWypsZW5ndGhdID0gJ1wwJzsKKyAg
ICB9CisgICAgCisgICAgCisgICAgLy8gVGhlIHByb2NlZHVyZSBzdGFydHMgZ2VuZXJhdGluZyBk
aWdpdHMgZnJvbSB0aGUgbGVmdCB0byB0aGUgcmlnaHQgYW5kIHN0b3BzCisgICAgLy8gd2hlbiB0
aGUgZ2VuZXJhdGVkIGRpZ2l0cyB5aWVsZCB0aGUgc2hvcnRlc3QgZGVjaW1hbCByZXByZXNlbnRh
dGlvbiBvZiB2LiBBCisgICAgLy8gZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiB2IGlzIGEgbnVt
YmVyIGx5aW5nIGNsb3NlciB0byB2IHRoYW4gdG8gYW55IG90aGVyCisgICAgLy8gZG91YmxlLCBz
byBpdCBjb252ZXJ0cyB0byB2IHdoZW4gcmVhZC4KKyAgICAvLworICAgIC8vIFRoaXMgaXMgdHJ1
ZSBpZiBkLCB0aGUgZGVjaW1hbCByZXByZXNlbnRhdGlvbiwgaXMgYmV0d2VlbiBtLSBhbmQgbSss
IHRoZQorICAgIC8vIHVwcGVyIGFuZCBsb3dlciBib3VuZGFyaWVzLiBkIG11c3QgYmUgc3RyaWN0
bHkgYmV0d2VlbiB0aGVtIGlmICFpc19ldmVuLgorICAgIC8vICAgICAgICAgICBtLSA6PSAobnVt
ZXJhdG9yIC0gZGVsdGFfbWludXMpIC8gZGVub21pbmF0b3IKKyAgICAvLyAgICAgICAgICAgbSsg
Oj0gKG51bWVyYXRvciArIGRlbHRhX3BsdXMpIC8gZGVub21pbmF0b3IKKyAgICAvLworICAgIC8v
IFByZWNvbmRpdGlvbjogMCA8PSAobnVtZXJhdG9yK2RlbHRhX3BsdXMpIC8gZGVub21pbmF0b3Ig
PCAxMC4KKyAgICAvLyAgIElmIDEgPD0gKG51bWVyYXRvcitkZWx0YV9wbHVzKSAvIGRlbm9taW5h
dG9yIDwgMTAgdGhlbiBubyBsZWFkaW5nIDAgZGlnaXQKKyAgICAvLyAgIHdpbGwgYmUgcHJvZHVj
ZWQuIFRoaXMgc2hvdWxkIGJlIHRoZSBzdGFuZGFyZCBwcmVjb25kaXRpb24uCisgICAgc3RhdGlj
IHZvaWQgR2VuZXJhdGVTaG9ydGVzdERpZ2l0cyhCaWdudW0qIG51bWVyYXRvciwgQmlnbnVtKiBk
ZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251
bSogZGVsdGFfbWludXMsIEJpZ251bSogZGVsdGFfcGx1cywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfZXZlbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXIsIGludCogbGVuZ3RoKSB7CisgICAg
ICAgIC8vIFNtYWxsIG9wdGltaXphdGlvbjogaWYgZGVsdGFfbWludXMgYW5kIGRlbHRhX3BsdXMg
YXJlIHRoZSBzYW1lIGp1c3QgcmV1c2UKKyAgICAgICAgLy8gb25lIG9mIHRoZSB0d28gYmlnbnVt
cy4KKyAgICAgICAgaWYgKEJpZ251bTo6RXF1YWwoKmRlbHRhX21pbnVzLCAqZGVsdGFfcGx1cykp
IHsKKyAgICAgICAgICAgIGRlbHRhX3BsdXMgPSBkZWx0YV9taW51czsKKyAgICAgICAgfQorICAg
ICAgICAqbGVuZ3RoID0gMDsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIHVp
bnQxNl90IGRpZ2l0OworICAgICAgICAgICAgZGlnaXQgPSBudW1lcmF0b3ItPkRpdmlkZU1vZHVs
b0ludEJpZ251bSgqZGVub21pbmF0b3IpOworICAgICAgICAgICAgQVNTRVJUKGRpZ2l0IDw9IDkp
OyAgLy8gZGlnaXQgaXMgYSB1aW50MTZfdCBhbmQgdGhlcmVmb3JlIGFsd2F5cyBwb3NpdGl2ZS4K
KyAgICAgICAgICAgIC8vIGRpZ2l0ID0gbnVtZXJhdG9yIC8gZGVub21pbmF0b3IgKGludGVnZXIg
ZGl2aXNpb24pLgorICAgICAgICAgICAgLy8gbnVtZXJhdG9yID0gbnVtZXJhdG9yICUgZGVub21p
bmF0b3IuCisgICAgICAgICAgICBidWZmZXJbKCpsZW5ndGgpKytdID0gZGlnaXQgKyAnMCc7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIENhbiB3ZSBzdG9wIGFscmVhZHk/CisgICAgICAg
ICAgICAvLyBJZiB0aGUgcmVtYWluZGVyIG9mIHRoZSBkaXZpc2lvbiBpcyBsZXNzIHRoYW4gdGhl
IGRpc3RhbmNlIHRvIHRoZSBsb3dlcgorICAgICAgICAgICAgLy8gYm91bmRhcnkgd2UgY2FuIHN0
b3AuIEluIHRoaXMgY2FzZSB3ZSBzaW1wbHkgcm91bmQgZG93biAoZGlzY2FyZGluZyB0aGUKKyAg
ICAgICAgICAgIC8vIHJlbWFpbmRlcikuCisgICAgICAgICAgICAvLyBTaW1pbGFybHkgd2UgdGVz
dCBpZiB3ZSBjYW4gcm91bmQgdXAgKHVzaW5nIHRoZSB1cHBlciBib3VuZGFyeSkuCisgICAgICAg
ICAgICBib29sIGluX2RlbHRhX3Jvb21fbWludXM7CisgICAgICAgICAgICBib29sIGluX2RlbHRh
X3Jvb21fcGx1czsKKyAgICAgICAgICAgIGlmIChpc19ldmVuKSB7CisgICAgICAgICAgICAgICAg
aW5fZGVsdGFfcm9vbV9taW51cyA9IEJpZ251bTo6TGVzc0VxdWFsKCpudW1lcmF0b3IsICpkZWx0
YV9taW51cyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGluX2RlbHRh
X3Jvb21fbWludXMgPSBCaWdudW06Okxlc3MoKm51bWVyYXRvciwgKmRlbHRhX21pbnVzKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpc19ldmVuKSB7CisgICAgICAgICAgICAgICAg
aW5fZGVsdGFfcm9vbV9wbHVzID0KKyAgICAgICAgICAgICAgICBCaWdudW06OlBsdXNDb21wYXJl
KCpudW1lcmF0b3IsICpkZWx0YV9wbHVzLCAqZGVub21pbmF0b3IpID49IDA7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGluX2RlbHRhX3Jvb21fcGx1cyA9CisgICAgICAg
ICAgICAgICAgQmlnbnVtOjpQbHVzQ29tcGFyZSgqbnVtZXJhdG9yLCAqZGVsdGFfcGx1cywgKmRl
bm9taW5hdG9yKSA+IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWluX2RlbHRh
X3Jvb21fbWludXMgJiYgIWluX2RlbHRhX3Jvb21fcGx1cykgeworICAgICAgICAgICAgICAgIC8v
IFByZXBhcmUgZm9yIG5leHQgaXRlcmF0aW9uLgorICAgICAgICAgICAgICAgIG51bWVyYXRvci0+
VGltZXMxMCgpOworICAgICAgICAgICAgICAgIGRlbHRhX21pbnVzLT5UaW1lczEwKCk7CisgICAg
ICAgICAgICAgICAgLy8gV2Ugb3B0aW1pemVkIGRlbHRhX3BsdXMgdG8gYmUgZXF1YWwgdG8gZGVs
dGFfbWludXMgKGlmIHRoZXkgc2hhcmUgdGhlCisgICAgICAgICAgICAgICAgLy8gc2FtZSB2YWx1
ZSkuIFNvIGRvbid0IG11bHRpcGx5IGRlbHRhX3BsdXMgaWYgdGhleSBwb2ludCB0byB0aGUgc2Ft
ZQorICAgICAgICAgICAgICAgIC8vIG9iamVjdC4KKyAgICAgICAgICAgICAgICBpZiAoZGVsdGFf
bWludXMgIT0gZGVsdGFfcGx1cykgeworICAgICAgICAgICAgICAgICAgICBkZWx0YV9wbHVzLT5U
aW1lczEwKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChpbl9k
ZWx0YV9yb29tX21pbnVzICYmIGluX2RlbHRhX3Jvb21fcGx1cykgeworICAgICAgICAgICAgICAg
IC8vIExldCdzIHNlZSBpZiAyKm51bWVyYXRvciA8IGRlbm9taW5hdG9yLgorICAgICAgICAgICAg
ICAgIC8vIElmIHllcywgdGhlbiB0aGUgbmV4dCBkaWdpdCB3b3VsZCBiZSA8IDUgYW5kIHdlIGNh
biByb3VuZCBkb3duLgorICAgICAgICAgICAgICAgIGludCBjb21wYXJlID0gQmlnbnVtOjpQbHVz
Q29tcGFyZSgqbnVtZXJhdG9yLCAqbnVtZXJhdG9yLCAqZGVub21pbmF0b3IpOworICAgICAgICAg
ICAgICAgIGlmIChjb21wYXJlIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAvLyBSZW1haW5p
bmcgZGlnaXRzIGFyZSBsZXNzIHRoYW4gLjUuIC0+IFJvdW5kIGRvd24gKD09IGRvIG5vdGhpbmcp
LgorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29tcGFyZSA+IDApIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gUmVtYWluaW5nIGRpZ2l0cyBhcmUgbW9yZSB0aGFuIC41IG9mIGRlbm9taW5h
dG9yLiAtPiBSb3VuZCB1cC4KKyAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRoZSBs
YXN0IGRpZ2l0IGNvdWxkIG5vdCBiZSBhICc5JyBhcyBvdGhlcndpc2UgdGhlIHdob2xlCisgICAg
ICAgICAgICAgICAgICAgIC8vIGxvb3Agd291bGQgaGF2ZSBzdG9wcGVkIGVhcmxpZXIuCisgICAg
ICAgICAgICAgICAgICAgIC8vIFdlIHN0aWxsIGhhdmUgYW4gYXNzZXJ0IGhlcmUgaW4gY2FzZSB0
aGUgcHJlY29uZGl0aW9ucyB3ZXJlIG5vdAorICAgICAgICAgICAgICAgICAgICAvLyBzYXRpc2Zp
ZWQuCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChidWZmZXJbKCpsZW5ndGgpIC0gMV0gIT0g
JzknKTsKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyWygqbGVuZ3RoKSAtIDFdKys7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSGFsZndheSBjYXNl
LgorICAgICAgICAgICAgICAgICAgICAvLyBUT0RPKGZsb2l0c2NoKTogbmVlZCBhIHdheSB0byBz
b2x2ZSBoYWxmLXdheSBjYXNlcy4KKyAgICAgICAgICAgICAgICAgICAgLy8gICBGb3Igbm93IGxl
dCdzIHJvdW5kIHRvd2FyZHMgZXZlbiAoc2luY2UgdGhpcyBpcyB3aGF0IEdheSBzZWVtcyB0bwor
ICAgICAgICAgICAgICAgICAgICAvLyAgIGRvKS4KKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgIGlmICgoYnVmZmVyWygqbGVuZ3RoKSAtIDFdIC0gJzAnKSAlIDIgPT0g
MCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gUm91bmQgZG93biA9PiBEbyBub3RoaW5n
LgorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKGJ1ZmZlclsoKmxlbmd0aCkgLSAxXSAhPSAnOScpOworICAgICAgICAgICAgICAgICAg
ICAgICAgYnVmZmVyWygqbGVuZ3RoKSAtIDFdKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfSBl
bHNlIGlmIChpbl9kZWx0YV9yb29tX21pbnVzKSB7CisgICAgICAgICAgICAgICAgLy8gUm91bmQg
ZG93biAoPT0gZG8gbm90aGluZykuCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfSBlbHNlIHsgIC8vIGluX2RlbHRhX3Jvb21fcGx1cworICAgICAgICAgICAgICAgIC8vIFJv
dW5kIHVwLgorICAgICAgICAgICAgICAgIC8vIE5vdGUgYWdhaW4gdGhhdCB0aGUgbGFzdCBkaWdp
dCBjb3VsZCBub3QgYmUgJzknIHNpbmNlIHRoaXMgd291bGQgaGF2ZQorICAgICAgICAgICAgICAg
IC8vIHN0b3BwZWQgdGhlIGxvb3AgZWFybGllci4KKyAgICAgICAgICAgICAgICAvLyBXZSBzdGls
bCBoYXZlIGFuIEFTU0VSVCBoZXJlLCBpbiBjYXNlIHRoZSBwcmVjb25kaXRpb25zIHdlcmUgbm90
CisgICAgICAgICAgICAgICAgLy8gc2F0aXNmaWVkLgorICAgICAgICAgICAgICAgIEFTU0VSVChi
dWZmZXJbKCpsZW5ndGgpIC0xXSAhPSAnOScpOworICAgICAgICAgICAgICAgIGJ1ZmZlclsoKmxl
bmd0aCkgLSAxXSsrOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBMZXQgdiA9IG51bWVyYXRvciAvIGRl
bm9taW5hdG9yIDwgMTAuCisgICAgLy8gVGhlbiB3ZSBnZW5lcmF0ZSAnY291bnQnIGRpZ2l0cyBv
ZiBkID0geC54eHh4eC4uLiAod2l0aG91dCB0aGUgZGVjaW1hbCBwb2ludCkKKyAgICAvLyBmcm9t
IGxlZnQgdG8gcmlnaHQuIE9uY2UgJ2NvdW50JyBkaWdpdHMgaGF2ZSBiZWVuIHByb2R1Y2VkIHdl
IGRlY2lkZSB3ZXRoZXIKKyAgICAvLyB0byByb3VuZCB1cCBvciBkb3duLiBSZW1haW5kZXJzIG9m
IGV4YWN0bHkgLjUgcm91bmQgdXB3YXJkcy4gTnVtYmVycyBzdWNoCisgICAgLy8gYXMgOS45OTk5
OTkgcHJvcGFnYXRlIGEgY2FycnkgYWxsIHRoZSB3YXksIGFuZCBjaGFuZ2UgdGhlCisgICAgLy8g
ZXhwb25lbnQgKGRlY2ltYWxfcG9pbnQpLCB3aGVuIHJvdW5kaW5nIHVwd2FyZHMuCisgICAgc3Rh
dGljIHZvaWQgR2VuZXJhdGVDb3VudGVkRGlnaXRzKGludCBjb3VudCwgaW50KiBkZWNpbWFsX3Bv
aW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIG51bWVy
YXRvciwgQmlnbnVtKiBkZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVmVjdG9yPGNoYXI+KGJ1ZmZlciksIGludCogbGVuZ3RoKSB7CisgICAgICAgIEFT
U0VSVChjb3VudCA+PSAwKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAtIDE7
ICsraSkgeworICAgICAgICAgICAgdWludDE2X3QgZGlnaXQ7CisgICAgICAgICAgICBkaWdpdCA9
IG51bWVyYXRvci0+RGl2aWRlTW9kdWxvSW50QmlnbnVtKCpkZW5vbWluYXRvcik7CisgICAgICAg
ICAgICBBU1NFUlQoZGlnaXQgPD0gOSk7ICAvLyBkaWdpdCBpcyBhIHVpbnQxNl90IGFuZCB0aGVy
ZWZvcmUgYWx3YXlzIHBvc2l0aXZlLgorICAgICAgICAgICAgLy8gZGlnaXQgPSBudW1lcmF0b3Ig
LyBkZW5vbWluYXRvciAoaW50ZWdlciBkaXZpc2lvbikuCisgICAgICAgICAgICAvLyBudW1lcmF0
b3IgPSBudW1lcmF0b3IgJSBkZW5vbWluYXRvci4KKyAgICAgICAgICAgIGJ1ZmZlcltpXSA9IGRp
Z2l0ICsgJzAnOworICAgICAgICAgICAgLy8gUHJlcGFyZSBmb3IgbmV4dCBpdGVyYXRpb24uCisg
ICAgICAgICAgICBudW1lcmF0b3ItPlRpbWVzMTAoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBH
ZW5lcmF0ZSB0aGUgbGFzdCBkaWdpdC4KKyAgICAgICAgdWludDE2X3QgZGlnaXQ7CisgICAgICAg
IGRpZ2l0ID0gbnVtZXJhdG9yLT5EaXZpZGVNb2R1bG9JbnRCaWdudW0oKmRlbm9taW5hdG9yKTsK
KyAgICAgICAgaWYgKEJpZ251bTo6UGx1c0NvbXBhcmUoKm51bWVyYXRvciwgKm51bWVyYXRvciwg
KmRlbm9taW5hdG9yKSA+PSAwKSB7CisgICAgICAgICAgICBkaWdpdCsrOworICAgICAgICB9Cisg
ICAgICAgIGJ1ZmZlcltjb3VudCAtIDFdID0gZGlnaXQgKyAnMCc7CisgICAgICAgIC8vIENvcnJl
Y3QgYmFkIGRpZ2l0cyAoaW4gY2FzZSB3ZSBoYWQgYSBzZXF1ZW5jZSBvZiAnOSdzKS4gUHJvcGFn
YXRlIHRoZQorICAgICAgICAvLyBjYXJyeSB1bnRpbCB3ZSBoYXQgYSBub24tJzknIG9yIHRpbCB3
ZSByZWFjaCB0aGUgZmlyc3QgZGlnaXQuCisgICAgICAgIGZvciAoaW50IGkgPSBjb3VudCAtIDE7
IGkgPiAwOyAtLWkpIHsKKyAgICAgICAgICAgIGlmIChidWZmZXJbaV0gIT0gJzAnICsgMTApIGJy
ZWFrOworICAgICAgICAgICAgYnVmZmVyW2ldID0gJzAnOworICAgICAgICAgICAgYnVmZmVyW2kg
LSAxXSsrOworICAgICAgICB9CisgICAgICAgIGlmIChidWZmZXJbMF0gPT0gJzAnICsgMTApIHsK
KyAgICAgICAgICAgIC8vIFByb3BhZ2F0ZSBhIGNhcnJ5IHBhc3QgdGhlIHRvcCBwbGFjZS4KKyAg
ICAgICAgICAgIGJ1ZmZlclswXSA9ICcxJzsKKyAgICAgICAgICAgICgqZGVjaW1hbF9wb2ludCkr
KzsKKyAgICAgICAgfQorICAgICAgICAqbGVuZ3RoID0gY291bnQ7CisgICAgfQorICAgIAorICAg
IAorICAgIC8vIEdlbmVyYXRlcyAncmVxdWVzdGVkX2RpZ2l0cycgYWZ0ZXIgdGhlIGRlY2ltYWwg
cG9pbnQuIEl0IG1pZ2h0IG9taXQKKyAgICAvLyB0cmFpbGluZyAnMCdzLiBJZiB0aGUgaW5wdXQg
bnVtYmVyIGlzIHRvbyBzbWFsbCB0aGVuIG5vIGRpZ2l0cyBhdCBhbGwgYXJlCisgICAgLy8gZ2Vu
ZXJhdGVkIChleC46IDIgZml4ZWQgZGlnaXRzIGZvciAwLjAwMDAxKS4KKyAgICAvLworICAgIC8v
IElucHV0IHZlcmlmaWVzOiAgMSA8PSAobnVtZXJhdG9yICsgZGVsdGEpIC8gZGVub21pbmF0b3Ig
PCAxMC4KKyAgICBzdGF0aWMgdm9pZCBCaWdudW1Ub0ZpeGVkKGludCByZXF1ZXN0ZWRfZGlnaXRz
LCBpbnQqIGRlY2ltYWxfcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdu
dW0qIG51bWVyYXRvciwgQmlnbnVtKiBkZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFZlY3RvcjxjaGFyPihidWZmZXIpLCBpbnQqIGxlbmd0aCkgeworICAgICAgICAv
LyBOb3RlIHRoYXQgd2UgaGF2ZSB0byBsb29rIGF0IG1vcmUgdGhhbiBqdXN0IHRoZSByZXF1ZXN0
ZWRfZGlnaXRzLCBzaW5jZQorICAgICAgICAvLyBhIG51bWJlciBjb3VsZCBiZSByb3VuZGVkIHVw
LiBFeGFtcGxlOiB2PTAuNSB3aXRoIHJlcXVlc3RlZF9kaWdpdHM9MC4KKyAgICAgICAgLy8gRXZl
biB0aG91Z2ggdGhlIHBvd2VyIG9mIHYgZXF1YWxzIDAgd2UgY2FuJ3QganVzdCBzdG9wIGhlcmUu
CisgICAgICAgIGlmICgtKCpkZWNpbWFsX3BvaW50KSA+IHJlcXVlc3RlZF9kaWdpdHMpIHsKKyAg
ICAgICAgICAgIC8vIFRoZSBudW1iZXIgaXMgZGVmaW5pdGl2ZWx5IHRvbyBzbWFsbC4KKyAgICAg
ICAgICAgIC8vIEV4OiAwLjAwMSB3aXRoIHJlcXVlc3RlZF9kaWdpdHMgPT0gMS4KKyAgICAgICAg
ICAgIC8vIFNldCBkZWNpbWFsLXBvaW50IHRvIC1yZXF1ZXN0ZWRfZGlnaXRzLiBUaGlzIGlzIHdo
YXQgR2F5IGRvZXMuCisgICAgICAgICAgICAvLyBOb3RlIHRoYXQgaXQgc2hvdWxkIG5vdCBoYXZl
IGFueSBlZmZlY3QgYW55d2F5cyBzaW5jZSB0aGUgc3RyaW5nIGlzCisgICAgICAgICAgICAvLyBl
bXB0eS4KKyAgICAgICAgICAgICpkZWNpbWFsX3BvaW50ID0gLXJlcXVlc3RlZF9kaWdpdHM7Cisg
ICAgICAgICAgICAqbGVuZ3RoID0gMDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBl
bHNlIGlmICgtKCpkZWNpbWFsX3BvaW50KSA9PSByZXF1ZXN0ZWRfZGlnaXRzKSB7CisgICAgICAg
ICAgICAvLyBXZSBvbmx5IG5lZWQgdG8gdmVyaWZ5IGlmIHRoZSBudW1iZXIgcm91bmRzIGRvd24g
b3IgdXAuCisgICAgICAgICAgICAvLyBFeDogMC4wNCBhbmQgMC4wNiB3aXRoIHJlcXVlc3RlZF9k
aWdpdHMgPT0gMS4KKyAgICAgICAgICAgIEFTU0VSVCgqZGVjaW1hbF9wb2ludCA9PSAtcmVxdWVz
dGVkX2RpZ2l0cyk7CisgICAgICAgICAgICAvLyBJbml0aWFsbHkgdGhlIGZyYWN0aW9uIGxpZXMg
aW4gcmFuZ2UgKDEsIDEwXS4gTXVsdGlwbHkgdGhlIGRlbm9taW5hdG9yCisgICAgICAgICAgICAv
LyBieSAxMCBzbyB0aGF0IHdlIGNhbiBjb21wYXJlIG1vcmUgZWFzaWx5LgorICAgICAgICAgICAg
ZGVub21pbmF0b3ItPlRpbWVzMTAoKTsKKyAgICAgICAgICAgIGlmIChCaWdudW06OlBsdXNDb21w
YXJlKCpudW1lcmF0b3IsICpudW1lcmF0b3IsICpkZW5vbWluYXRvcikgPj0gMCkgeworICAgICAg
ICAgICAgICAgIC8vIElmIHRoZSBmcmFjdGlvbiBpcyA+PSAwLjUgdGhlbiB3ZSBoYXZlIHRvIGlu
Y2x1ZGUgdGhlIHJvdW5kZWQKKyAgICAgICAgICAgICAgICAvLyBkaWdpdC4KKyAgICAgICAgICAg
ICAgICBidWZmZXJbMF0gPSAnMSc7CisgICAgICAgICAgICAgICAgKmxlbmd0aCA9IDE7CisgICAg
ICAgICAgICAgICAgKCpkZWNpbWFsX3BvaW50KSsrOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgd2UgY2F1Z2h0IG1vc3Qgb2Ygc2ltaWxhciBjYXNl
cyBlYXJsaWVyLgorICAgICAgICAgICAgICAgICpsZW5ndGggPSAwOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gVGhl
IHJlcXVlc3RlZCBkaWdpdHMgY29ycmVzcG9uZCB0byB0aGUgZGlnaXRzIGFmdGVyIHRoZSBwb2lu
dC4KKyAgICAgICAgICAgIC8vIFRoZSB2YXJpYWJsZSAnbmVlZGVkX2RpZ2l0cycgaW5jbHVkZXMg
dGhlIGRpZ2l0cyBiZWZvcmUgdGhlIHBvaW50LgorICAgICAgICAgICAgaW50IG5lZWRlZF9kaWdp
dHMgPSAoKmRlY2ltYWxfcG9pbnQpICsgcmVxdWVzdGVkX2RpZ2l0czsKKyAgICAgICAgICAgIEdl
bmVyYXRlQ291bnRlZERpZ2l0cyhuZWVkZWRfZGlnaXRzLCBkZWNpbWFsX3BvaW50LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyYXRvciwgZGVub21pbmF0b3IsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBsZW5ndGgpOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIAorICAgIC8vIFJldHVybnMgYW4gZXN0aW1hdGlvbiBvZiBrIHN1
Y2ggdGhhdCAxMF4oay0xKSA8PSB2IDwgMTBeayB3aGVyZQorICAgIC8vIHYgPSBmICogMl5leHBv
bmVudCBhbmQgMl41MiA8PSBmIDwgMl41My4KKyAgICAvLyB2IGlzIGhlbmNlIGEgbm9ybWFsaXpl
ZCBkb3VibGUgd2l0aCB0aGUgZ2l2ZW4gZXhwb25lbnQuIFRoZSBvdXRwdXQgaXMgYW4KKyAgICAv
LyBhcHByb3hpbWF0aW9uIGZvciB0aGUgZXhwb25lbnQgb2YgdGhlIGRlY2ltYWwgYXBwcm9pbWF0
aW9uIC5kaWdpdHMgKiAxMF5rLgorICAgIC8vCisgICAgLy8gVGhlIHJlc3VsdCBtaWdodCB1bmRl
cnNob290IGJ5IDEgaW4gd2hpY2ggY2FzZSAxMF5rIDw9IHYgPCAxMF5rKzEuCisgICAgLy8gTm90
ZTogdGhpcyBwcm9wZXJ0eSBob2xkcyBmb3IgdidzIHVwcGVyIGJvdW5kYXJ5IG0rIHRvby4KKyAg
ICAvLyAgICAxMF5rIDw9IG0rIDwgMTBeaysxLgorICAgIC8vICAgKHNlZSBleHBsYW5hdGlvbiBi
ZWxvdykuCisgICAgLy8KKyAgICAvLyBFeGFtcGxlczoKKyAgICAvLyAgRXN0aW1hdGVQb3dlcigw
KSAgID0+IDE2CisgICAgLy8gIEVzdGltYXRlUG93ZXIoLTUyKSA9PiAwCisgICAgLy8KKyAgICAv
LyBOb3RlOiBlID49IDAgPT4gRXN0aW1hdGVkUG93ZXIoZSkgPiAwLiBObyBzaW1pbGFyIGNsYWlt
IGNhbiBiZSBtYWRlIGZvciBlPDAuCisgICAgc3RhdGljIGludCBFc3RpbWF0ZVBvd2VyKGludCBl
eHBvbmVudCkgeworICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGVzdGltYXRlcyBsb2cxMCBvZiB2
IHdoZXJlIHYgPSBmKjJeZSAod2l0aCBlID09IGV4cG9uZW50KS4KKyAgICAgICAgLy8gTm90ZSB0
aGF0IDEwXmZsb29yKGxvZzEwKHYpKSA8PSB2LCBidXQgdiA8PSAxMF5jZWlsKGxvZzEwKHYpKS4K
KyAgICAgICAgLy8gTm90ZSB0aGF0IGYgaXMgYm91bmRlZCBieSBpdHMgY29udGFpbmVyIHNpemUu
IExldCBwID0gNTMgKHRoZSBkb3VibGUncworICAgICAgICAvLyBzaWduaWZpY2FuZCBzaXplKS4g
VGhlbiAyXihwLTEpIDw9IGYgPCAyXnAuCisgICAgICAgIC8vCisgICAgICAgIC8vIEdpdmVuIHRo
YXQgbG9nMTAodikgPT0gbG9nMih2KS9sb2cyKDEwKSBhbmQgZSsobGVuKGYpLTEpIGlzIHF1aXRl
IGNsb3NlCisgICAgICAgIC8vIHRvIGxvZzIodikgdGhlIGZ1bmN0aW9uIGlzIHNpbXBsaWZpZWQg
dG8gKGUrKGxlbihmKS0xKS9sb2cyKDEwKSkuCisgICAgICAgIC8vIFRoZSBjb21wdXRlZCBudW1i
ZXIgdW5kZXJzaG9vdHMgYnkgbGVzcyB0aGFuIDAuNjMxICh3aGVuIHdlIGNvbXB1dGUgbG9nMwor
ICAgICAgICAvLyBhbmQgbm90IGxvZzEwKS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gT3B0aW1p
emF0aW9uOiBzaW5jZSB3ZSBvbmx5IG5lZWQgYW4gYXBwcm94aW1hdGVkIHJlc3VsdCB0aGlzIGNv
bXB1dGF0aW9uCisgICAgICAgIC8vIGNhbiBiZSBwZXJmb3JtZWQgb24gNjQgYml0IGludGVnZXJz
LiBPbiB4ODYveDY0IGFyY2hpdGVjdHVyZSB0aGUgc3BlZWR1cCBpcworICAgICAgICAvLyBub3Qg
cmVhbGx5IG1lYXN1cmFibGUsIHRob3VnaC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gU2luY2Ug
d2Ugd2FudCB0byBhdm9pZCBvdmVyc2hvb3Rpbmcgd2UgZGVjcmVtZW50IGJ5IDFlMTAgc28gdGhh
dAorICAgICAgICAvLyBmbG9hdGluZy1wb2ludCBpbXByZWNpc2lvbnMgZG9uJ3QgYWZmZWN0IHVz
LgorICAgICAgICAvLworICAgICAgICAvLyBFeHBsYW5hdGlvbiBmb3IgdidzIGJvdW5kYXJ5IG0r
OiB0aGUgY29tcHV0YXRpb24gdGFrZXMgYWR2YW50YWdlIG9mCisgICAgICAgIC8vIHRoZSBmYWN0
IHRoYXQgMl4ocC0xKSA8PSBmIDwgMl5wLiBCb3VuZGFyaWVzIHN0aWxsIHNhdGlzZnkgdGhpcyBy
ZXF1aXJlbWVudAorICAgICAgICAvLyAoZXZlbiBmb3IgZGVub3JtYWxzIHdoZXJlIHRoZSBkZWx0
YSBjYW4gYmUgbXVjaCBtb3JlIGltcG9ydGFudCkuCisgICAgICAgIAorICAgICAgICBjb25zdCBk
b3VibGUgazFMb2cxMCA9IDAuMzAxMDI5OTk1NjYzOTgxMTQ7ICAvLyAxL2xnKDEwKQorICAgICAg
ICAKKyAgICAgICAgLy8gRm9yIGRvdWJsZXMgbGVuKGYpID09IDUzIChkb24ndCBmb3JnZXQgdGhl
IGhpZGRlbiBiaXQpLgorICAgICAgICBjb25zdCBpbnQga1NpZ25pZmljYW5kU2l6ZSA9IDUzOwor
ICAgICAgICBkb3VibGUgZXN0aW1hdGUgPSBjZWlsKChleHBvbmVudCArIGtTaWduaWZpY2FuZFNp
emUgLSAxKSAqIGsxTG9nMTAgLSAxZS0xMCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxp
bnQ+KGVzdGltYXRlKTsKKyAgICB9CisgICAgCisgICAgCisgICAgLy8gU2VlIGNvbW1lbnRzIGZv
ciBJbml0aWFsU2NhbGVkU3RhcnRWYWx1ZXMuCisgICAgc3RhdGljIHZvaWQgSW5pdGlhbFNjYWxl
ZFN0YXJ0VmFsdWVzUG9zaXRpdmVFeHBvbmVudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB2LCBpbnQgZXN0aW1hdGVkX3Bv
d2VyLCBib29sIG5lZWRfYm91bmRhcnlfZGVsdGFzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBudW1lcmF0b3IsIEJpZ251
bSogZGVub21pbmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBCaWdudW0qIGRlbHRhX21pbnVzLCBCaWdudW0qIGRlbHRhX3BsdXMp
IHsKKyAgICAgICAgLy8gQSBwb3NpdGl2ZSBleHBvbmVudCBpbXBsaWVzIGEgcG9zaXRpdmUgcG93
ZXIuCisgICAgICAgIEFTU0VSVChlc3RpbWF0ZWRfcG93ZXIgPj0gMCk7CisgICAgICAgIC8vIFNp
bmNlIHRoZSBlc3RpbWF0ZWRfcG93ZXIgaXMgcG9zaXRpdmUgd2Ugc2ltcGx5IG11bHRpcGx5IHRo
ZSBkZW5vbWluYXRvcgorICAgICAgICAvLyBieSAxMF5lc3RpbWF0ZWRfcG93ZXIuCisgICAgICAg
IAorICAgICAgICAvLyBudW1lcmF0b3IgPSB2LgorICAgICAgICBudW1lcmF0b3ItPkFzc2lnblVJ
bnQ2NChEb3VibGUodikuU2lnbmlmaWNhbmQoKSk7CisgICAgICAgIG51bWVyYXRvci0+U2hpZnRM
ZWZ0KERvdWJsZSh2KS5FeHBvbmVudCgpKTsKKyAgICAgICAgLy8gZGVub21pbmF0b3IgPSAxMF5l
c3RpbWF0ZWRfcG93ZXIuCisgICAgICAgIGRlbm9taW5hdG9yLT5Bc3NpZ25Qb3dlclVJbnQxNigx
MCwgZXN0aW1hdGVkX3Bvd2VyKTsKKyAgICAgICAgCisgICAgICAgIGlmIChuZWVkX2JvdW5kYXJ5
X2RlbHRhcykgeworICAgICAgICAgICAgLy8gSW50cm9kdWNlIGEgY29tbW9uIGRlbm9taW5hdG9y
IHNvIHRoYXQgdGhlIGRlbHRhcyB0byB0aGUgYm91bmRhcmllcyBhcmUKKyAgICAgICAgICAgIC8v
IGludGVnZXJzLgorICAgICAgICAgICAgZGVub21pbmF0b3ItPlNoaWZ0TGVmdCgxKTsKKyAgICAg
ICAgICAgIG51bWVyYXRvci0+U2hpZnRMZWZ0KDEpOworICAgICAgICAgICAgLy8gTGV0IHYgPSBm
ICogMl5lLCB0aGVuIG0rIC0gdiA9IDEvMiAqIDJeZTsgV2l0aCB0aGUgY29tbW9uCisgICAgICAg
ICAgICAvLyBkZW5vbWluYXRvciAob2YgMikgZGVsdGFfcGx1cyBlcXVhbHMgMl5lLgorICAgICAg
ICAgICAgZGVsdGFfcGx1cy0+QXNzaWduVUludDE2KDEpOworICAgICAgICAgICAgZGVsdGFfcGx1
cy0+U2hpZnRMZWZ0KERvdWJsZSh2KS5FeHBvbmVudCgpKTsKKyAgICAgICAgICAgIC8vIFNhbWUg
Zm9yIGRlbHRhX21pbnVzICh3aXRoIGFkanVzdG1lbnRzIGJlbG93IGlmIGYgPT0gMl5wLTEpLgor
ICAgICAgICAgICAgZGVsdGFfbWludXMtPkFzc2lnblVJbnQxNigxKTsKKyAgICAgICAgICAgIGRl
bHRhX21pbnVzLT5TaGlmdExlZnQoRG91YmxlKHYpLkV4cG9uZW50KCkpOworICAgICAgICAgICAg
CisgICAgICAgICAgICAvLyBJZiB0aGUgc2lnbmlmaWNhbmQgKHdpdGhvdXQgdGhlIGhpZGRlbiBi
aXQpIGlzIDAsIHRoZW4gdGhlIGxvd2VyCisgICAgICAgICAgICAvLyBib3VuZGFyeSBpcyBjbG9z
ZXIgdGhhbiBqdXN0IGhhbGYgYSB1bHAgKHVuaXQgaW4gdGhlIGxhc3QgcGxhY2UpLgorICAgICAg
ICAgICAgLy8gVGhlcmUgaXMgb25seSBvbmUgZXhjZXB0aW9uOiBpZiB0aGUgbmV4dCBsb3dlciBu
dW1iZXIgaXMgYSBkZW5vcm1hbCB0aGVuCisgICAgICAgICAgICAvLyB0aGUgZGlzdGFuY2UgaXMg
MSB1bHAuIFRoaXMgY2Fubm90IGJlIHRoZSBjYXNlIGZvciBleHBvbmVudCA+PSAwIChidXQgd2UK
KyAgICAgICAgICAgIC8vIGhhdmUgdG8gdGVzdCBpdCBpbiB0aGUgb3RoZXIgZnVuY3Rpb24gd2hl
cmUgZXhwb25lbnQgPCAwKS4KKyAgICAgICAgICAgIHVpbnQ2NF90IHZfYml0cyA9IERvdWJsZSh2
KS5Bc1VpbnQ2NCgpOworICAgICAgICAgICAgaWYgKCh2X2JpdHMgJiBEb3VibGU6OmtTaWduaWZp
Y2FuZE1hc2spID09IDApIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgbG93ZXIgYm91bmRhcnkg
aXMgY2xvc2VyIGF0IGhhbGYgdGhlIGRpc3RhbmNlIG9mICJub3JtYWwiIG51bWJlcnMuCisgICAg
ICAgICAgICAgICAgLy8gSW5jcmVhc2UgdGhlIGNvbW1vbiBkZW5vbWluYXRvciBhbmQgYWRhcHQg
YWxsIGJ1dCB0aGUgZGVsdGFfbWludXMuCisgICAgICAgICAgICAgICAgZGVub21pbmF0b3ItPlNo
aWZ0TGVmdCgxKTsgIC8vICoyCisgICAgICAgICAgICAgICAgbnVtZXJhdG9yLT5TaGlmdExlZnQo
MSk7ICAgIC8vICoyCisgICAgICAgICAgICAgICAgZGVsdGFfcGx1cy0+U2hpZnRMZWZ0KDEpOyAg
IC8vICoyCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAg
Ly8gU2VlIGNvbW1lbnRzIGZvciBJbml0aWFsU2NhbGVkU3RhcnRWYWx1ZXMKKyAgICBzdGF0aWMg
dm9pZCBJbml0aWFsU2NhbGVkU3RhcnRWYWx1ZXNOZWdhdGl2ZUV4cG9uZW50UG9zaXRpdmVQb3dl
cigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkb3VibGUgdiwgaW50IGVzdGltYXRlZF9wb3dlciwgYm9vbCBuZWVk
X2JvdW5kYXJ5X2RlbHRhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIG51bWVyYXRvciwgQmlnbnVt
KiBkZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIGRlbHRhX21pbnVzLCBCaWdudW0q
IGRlbHRhX3BsdXMpIHsKKyAgICAgICAgdWludDY0X3Qgc2lnbmlmaWNhbmQgPSBEb3VibGUodiku
U2lnbmlmaWNhbmQoKTsKKyAgICAgICAgaW50IGV4cG9uZW50ID0gRG91YmxlKHYpLkV4cG9uZW50
KCk7CisgICAgICAgIC8vIHYgPSBmICogMl5lIHdpdGggZSA8IDAsIGFuZCB3aXRoIGVzdGltYXRl
ZF9wb3dlciA+PSAwLgorICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgZSBpcyBjbG9zZSB0byAw
IChoYXZlIGEgbG9vayBhdCBob3cgZXN0aW1hdGVkX3Bvd2VyIGlzCisgICAgICAgIC8vIGNvbXB1
dGVkKS4KKyAgICAgICAgCisgICAgICAgIC8vIG51bWVyYXRvciA9IHNpZ25pZmljYW5kCisgICAg
ICAgIC8vICBzaW5jZSB2ID0gc2lnbmlmaWNhbmQgKiAyXmV4cG9uZW50IHRoaXMgaXMgZXF1aXZh
bGVudCB0bworICAgICAgICAvLyAgbnVtZXJhdG9yID0gdiAqIC8gMl4tZXhwb25lbnQKKyAgICAg
ICAgbnVtZXJhdG9yLT5Bc3NpZ25VSW50NjQoc2lnbmlmaWNhbmQpOworICAgICAgICAvLyBkZW5v
bWluYXRvciA9IDEwXmVzdGltYXRlZF9wb3dlciAqIDJeLWV4cG9uZW50ICh3aXRoIGV4cG9uZW50
IDwgMCkKKyAgICAgICAgZGVub21pbmF0b3ItPkFzc2lnblBvd2VyVUludDE2KDEwLCBlc3RpbWF0
ZWRfcG93ZXIpOworICAgICAgICBkZW5vbWluYXRvci0+U2hpZnRMZWZ0KC1leHBvbmVudCk7Cisg
ICAgICAgIAorICAgICAgICBpZiAobmVlZF9ib3VuZGFyeV9kZWx0YXMpIHsKKyAgICAgICAgICAg
IC8vIEludHJvZHVjZSBhIGNvbW1vbiBkZW5vbWluYXRvciBzbyB0aGF0IHRoZSBkZWx0YXMgdG8g
dGhlIGJvdW5kYXJpZXMgYXJlCisgICAgICAgICAgICAvLyBpbnRlZ2Vycy4KKyAgICAgICAgICAg
IGRlbm9taW5hdG9yLT5TaGlmdExlZnQoMSk7CisgICAgICAgICAgICBudW1lcmF0b3ItPlNoaWZ0
TGVmdCgxKTsKKyAgICAgICAgICAgIC8vIExldCB2ID0gZiAqIDJeZSwgdGhlbiBtKyAtIHYgPSAx
LzIgKiAyXmU7IFdpdGggdGhlIGNvbW1vbgorICAgICAgICAgICAgLy8gZGVub21pbmF0b3IgKG9m
IDIpIGRlbHRhX3BsdXMgZXF1YWxzIDJeZS4KKyAgICAgICAgICAgIC8vIEdpdmVuIHRoYXQgdGhl
IGRlbm9taW5hdG9yIGFscmVhZHkgaW5jbHVkZXMgdidzIGV4cG9uZW50IHRoZSBkaXN0YW5jZQor
ICAgICAgICAgICAgLy8gdG8gdGhlIGJvdW5kYXJpZXMgaXMgc2ltcGx5IDEuCisgICAgICAgICAg
ICBkZWx0YV9wbHVzLT5Bc3NpZ25VSW50MTYoMSk7CisgICAgICAgICAgICAvLyBTYW1lIGZvciBk
ZWx0YV9taW51cyAod2l0aCBhZGp1c3RtZW50cyBiZWxvdyBpZiBmID09IDJecC0xKS4KKyAgICAg
ICAgICAgIGRlbHRhX21pbnVzLT5Bc3NpZ25VSW50MTYoMSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vIElmIHRoZSBzaWduaWZpY2FuZCAod2l0aG91dCB0aGUgaGlkZGVuIGJpdCkgaXMg
MCwgdGhlbiB0aGUgbG93ZXIKKyAgICAgICAgICAgIC8vIGJvdW5kYXJ5IGlzIGNsb3NlciB0aGFu
IGp1c3Qgb25lIHVscCAodW5pdCBpbiB0aGUgbGFzdCBwbGFjZSkuCisgICAgICAgICAgICAvLyBU
aGVyZSBpcyBvbmx5IG9uZSBleGNlcHRpb246IGlmIHRoZSBuZXh0IGxvd2VyIG51bWJlciBpcyBh
IGRlbm9ybWFsCisgICAgICAgICAgICAvLyB0aGVuIHRoZSBkaXN0YW5jZSBpcyAxIHVscC4gU2lu
Y2UgdGhlIGV4cG9uZW50IGlzIGNsb3NlIHRvIHplcm8KKyAgICAgICAgICAgIC8vIChvdGhlcndp
c2UgZXN0aW1hdGVkX3Bvd2VyIHdvdWxkIGhhdmUgYmVlbiBuZWdhdGl2ZSkgdGhpcyBjYW5ub3Qg
aGFwcGVuCisgICAgICAgICAgICAvLyBoZXJlIGVpdGhlci4KKyAgICAgICAgICAgIHVpbnQ2NF90
IHZfYml0cyA9IERvdWJsZSh2KS5Bc1VpbnQ2NCgpOworICAgICAgICAgICAgaWYgKCh2X2JpdHMg
JiBEb3VibGU6OmtTaWduaWZpY2FuZE1hc2spID09IDApIHsKKyAgICAgICAgICAgICAgICAvLyBU
aGUgbG93ZXIgYm91bmRhcnkgaXMgY2xvc2VyIGF0IGhhbGYgdGhlIGRpc3RhbmNlIG9mICJub3Jt
YWwiIG51bWJlcnMuCisgICAgICAgICAgICAgICAgLy8gSW5jcmVhc2UgdGhlIGRlbm9taW5hdG9y
IGFuZCBhZGFwdCBhbGwgYnV0IHRoZSBkZWx0YV9taW51cy4KKyAgICAgICAgICAgICAgICBkZW5v
bWluYXRvci0+U2hpZnRMZWZ0KDEpOyAgLy8gKjIKKyAgICAgICAgICAgICAgICBudW1lcmF0b3It
PlNoaWZ0TGVmdCgxKTsgICAgLy8gKjIKKyAgICAgICAgICAgICAgICBkZWx0YV9wbHVzLT5TaGlm
dExlZnQoMSk7ICAgLy8gKjIKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICAKKyAgICAvLyBTZWUgY29tbWVudHMgZm9yIEluaXRpYWxTY2FsZWRTdGFydFZhbHVlcwor
ICAgIHN0YXRpYyB2b2lkIEluaXRpYWxTY2FsZWRTdGFydFZhbHVlc05lZ2F0aXZlRXhwb25lbnRO
ZWdhdGl2ZVBvd2VyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB2LCBpbnQgZXN0aW1hdGVkX3Bvd2Vy
LCBib29sIG5lZWRfYm91bmRhcnlfZGVsdGFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogbnVtZXJh
dG9yLCBCaWdudW0qIGRlbm9taW5hdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogZGVsdGFfbWlu
dXMsIEJpZ251bSogZGVsdGFfcGx1cykgeworICAgICAgICBjb25zdCB1aW50NjRfdCBrTWluaW1h
bE5vcm1hbGl6ZWRFeHBvbmVudCA9CisgICAgICAgIFVJTlQ2NF8yUEFSVF9DKDB4MDAxMDAwMDAs
IDAwMDAwMDAwKTsKKyAgICAgICAgdWludDY0X3Qgc2lnbmlmaWNhbmQgPSBEb3VibGUodikuU2ln
bmlmaWNhbmQoKTsKKyAgICAgICAgaW50IGV4cG9uZW50ID0gRG91YmxlKHYpLkV4cG9uZW50KCk7
CisgICAgICAgIC8vIEluc3RlYWQgb2YgbXVsdGlwbHlpbmcgdGhlIGRlbm9taW5hdG9yIHdpdGgg
MTBeZXN0aW1hdGVkX3Bvd2VyIHdlCisgICAgICAgIC8vIG11bHRpcGx5IGFsbCB2YWx1ZXMgKG51
bWVyYXRvciBhbmQgZGVsdGFzKSBieSAxMF4tZXN0aW1hdGVkX3Bvd2VyLgorICAgICAgICAKKyAg
ICAgICAgLy8gVXNlIG51bWVyYXRvciBhcyB0ZW1wb3JhcnkgY29udGFpbmVyIGZvciBwb3dlcl90
ZW4uCisgICAgICAgIEJpZ251bSogcG93ZXJfdGVuID0gbnVtZXJhdG9yOworICAgICAgICBwb3dl
cl90ZW4tPkFzc2lnblBvd2VyVUludDE2KDEwLCAtZXN0aW1hdGVkX3Bvd2VyKTsKKyAgICAgICAg
CisgICAgICAgIGlmIChuZWVkX2JvdW5kYXJ5X2RlbHRhcykgeworICAgICAgICAgICAgLy8gU2lu
Y2UgcG93ZXJfdGVuID09IG51bWVyYXRvciB3ZSBtdXN0IG1ha2UgYSBjb3B5IG9mIDEwXmVzdGlt
YXRlZF9wb3dlcgorICAgICAgICAgICAgLy8gYmVmb3JlIHdlIGNvbXBsZXRlIHRoZSBjb21wdXRh
dGlvbiBvZiB0aGUgbnVtZXJhdG9yLgorICAgICAgICAgICAgLy8gZGVsdGFfcGx1cyA9IGRlbHRh
X21pbnVzID0gMTBeZXN0aW1hdGVkX3Bvd2VyCisgICAgICAgICAgICBkZWx0YV9wbHVzLT5Bc3Np
Z25CaWdudW0oKnBvd2VyX3Rlbik7CisgICAgICAgICAgICBkZWx0YV9taW51cy0+QXNzaWduQmln
bnVtKCpwb3dlcl90ZW4pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBudW1lcmF0
b3IgPSBzaWduaWZpY2FuZCAqIDIgKiAxMF4tZXN0aW1hdGVkX3Bvd2VyCisgICAgICAgIC8vICBz
aW5jZSB2ID0gc2lnbmlmaWNhbmQgKiAyXmV4cG9uZW50IHRoaXMgaXMgZXF1aXZhbGVudCB0bwor
ICAgICAgICAvLyBudW1lcmF0b3IgPSB2ICogMTBeLWVzdGltYXRlZF9wb3dlciAqIDIgKiAyXi1l
eHBvbmVudC4KKyAgICAgICAgLy8gUmVtZW1iZXI6IG51bWVyYXRvciBoYXMgYmVlbiBhYnVzZWQg
YXMgcG93ZXJfdGVuLiBTbyBubyBuZWVkIHRvIGFzc2lnbiBpdAorICAgICAgICAvLyAgdG8gaXRz
ZWxmLgorICAgICAgICBBU1NFUlQobnVtZXJhdG9yID09IHBvd2VyX3Rlbik7CisgICAgICAgIG51
bWVyYXRvci0+TXVsdGlwbHlCeVVJbnQ2NChzaWduaWZpY2FuZCk7CisgICAgICAgIAorICAgICAg
ICAvLyBkZW5vbWluYXRvciA9IDIgKiAyXi1leHBvbmVudCB3aXRoIGV4cG9uZW50IDwgMC4KKyAg
ICAgICAgZGVub21pbmF0b3ItPkFzc2lnblVJbnQxNigxKTsKKyAgICAgICAgZGVub21pbmF0b3It
PlNoaWZ0TGVmdCgtZXhwb25lbnQpOworICAgICAgICAKKyAgICAgICAgaWYgKG5lZWRfYm91bmRh
cnlfZGVsdGFzKSB7CisgICAgICAgICAgICAvLyBJbnRyb2R1Y2UgYSBjb21tb24gZGVub21pbmF0
b3Igc28gdGhhdCB0aGUgZGVsdGFzIHRvIHRoZSBib3VuZGFyaWVzIGFyZQorICAgICAgICAgICAg
Ly8gaW50ZWdlcnMuCisgICAgICAgICAgICBudW1lcmF0b3ItPlNoaWZ0TGVmdCgxKTsKKyAgICAg
ICAgICAgIGRlbm9taW5hdG9yLT5TaGlmdExlZnQoMSk7CisgICAgICAgICAgICAvLyBXaXRoIHRo
aXMgc2hpZnQgdGhlIGJvdW5kYXJpZXMgaGF2ZSB0aGVpciBjb3JyZWN0IHZhbHVlLCBzaW5jZQor
ICAgICAgICAgICAgLy8gZGVsdGFfcGx1cyA9IDEwXi1lc3RpbWF0ZWRfcG93ZXIsIGFuZAorICAg
ICAgICAgICAgLy8gZGVsdGFfbWludXMgPSAxMF4tZXN0aW1hdGVkX3Bvd2VyLgorICAgICAgICAg
ICAgLy8gVGhlc2UgYXNzaWdubWVudHMgaGF2ZSBiZWVuIGRvbmUgZWFybGllci4KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgLy8gVGhlIHNwZWNpYWwgY2FzZSB3aGVyZSB0aGUgbG93ZXIgYm91
bmRhcnkgaXMgdHdpY2UgYXMgY2xvc2UuCisgICAgICAgICAgICAvLyBUaGlzIHRpbWUgd2UgaGF2
ZSB0byBsb29rIG91dCBmb3IgdGhlIGV4Y2VwdGlvbiB0b28uCisgICAgICAgICAgICB1aW50NjRf
dCB2X2JpdHMgPSBEb3VibGUodikuQXNVaW50NjQoKTsKKyAgICAgICAgICAgIGlmICgodl9iaXRz
ICYgRG91YmxlOjprU2lnbmlmaWNhbmRNYXNrKSA9PSAwICYmCisgICAgICAgICAgICAgICAgLy8g
VGhlIG9ubHkgZXhjZXB0aW9uIHdoZXJlIGEgc2lnbmlmaWNhbmQgPT0gMCBoYXMgaXRzIGJvdW5k
YXJpZXMgYXQKKyAgICAgICAgICAgICAgICAvLyAibm9ybWFsIiBkaXN0YW5jZXM6CisgICAgICAg
ICAgICAgICAgKHZfYml0cyAmIERvdWJsZTo6a0V4cG9uZW50TWFzaykgIT0ga01pbmltYWxOb3Jt
YWxpemVkRXhwb25lbnQpIHsKKyAgICAgICAgICAgICAgICBudW1lcmF0b3ItPlNoaWZ0TGVmdCgx
KTsgICAgLy8gKjIKKyAgICAgICAgICAgICAgICBkZW5vbWluYXRvci0+U2hpZnRMZWZ0KDEpOyAg
Ly8gKjIKKyAgICAgICAgICAgICAgICBkZWx0YV9wbHVzLT5TaGlmdExlZnQoMSk7ICAgLy8gKjIK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBMZXQg
diA9IHNpZ25pZmljYW5kICogMl5leHBvbmVudC4KKyAgICAvLyBDb21wdXRlcyB2IC8gMTBeZXN0
aW1hdGVkX3Bvd2VyIGV4YWN0bHksIGFzIGEgcmF0aW8gb2YgdHdvIGJpZ251bXMsIG51bWVyYXRv
cgorICAgIC8vIGFuZCBkZW5vbWluYXRvci4gVGhlIGZ1bmN0aW9ucyBHZW5lcmF0ZVNob3J0ZXN0
RGlnaXRzIGFuZAorICAgIC8vIEdlbmVyYXRlQ291bnRlZERpZ2l0cyB3aWxsIHRoZW4gY29udmVy
dCB0aGlzIHJhdGlvIHRvIGl0cyBkZWNpbWFsCisgICAgLy8gcmVwcmVzZW50YXRpb24gZCwgd2l0
aCB0aGUgcmVxdWlyZWQgYWNjdXJhY3kuCisgICAgLy8gVGhlbiBkICogMTBeZXN0aW1hdGVkX3Bv
d2VyIGlzIHRoZSByZXByZXNlbnRhdGlvbiBvZiB2LgorICAgIC8vIChOb3RlOiB0aGUgZnJhY3Rp
b24gYW5kIHRoZSBlc3RpbWF0ZWRfcG93ZXIgbWlnaHQgZ2V0IGFkanVzdGVkIGJlZm9yZQorICAg
IC8vIGdlbmVyYXRpbmcgdGhlIGRlY2ltYWwgcmVwcmVzZW50YXRpb24uKQorICAgIC8vCisgICAg
Ly8gVGhlIGluaXRpYWwgc3RhcnQgdmFsdWVzIGNvbnNpc3Qgb2Y6CisgICAgLy8gIC0gYSBzY2Fs
ZWQgbnVtZXJhdG9yOiBzLnQuIG51bWVyYXRvci9kZW5vbWluYXRvciA9PSB2IC8gMTBeZXN0aW1h
dGVkX3Bvd2VyLgorICAgIC8vICAtIGEgc2NhbGVkIChjb21tb24pIGRlbm9taW5hdG9yLgorICAg
IC8vICBvcHRpb25hbGx5ICh1c2VkIGJ5IEdlbmVyYXRlU2hvcnRlc3REaWdpdHMgdG8gZGVjaWRl
IGlmIGl0IGhhcyB0aGUgc2hvcnRlc3QKKyAgICAvLyAgZGVjaW1hbCBjb252ZXJ0aW5nIGJhY2sg
dG8gdik6CisgICAgLy8gIC0gdiAtIG0tOiB0aGUgZGlzdGFuY2UgdG8gdGhlIGxvd2VyIGJvdW5k
YXJ5LgorICAgIC8vICAtIG0rIC0gdjogdGhlIGRpc3RhbmNlIHRvIHRoZSB1cHBlciBib3VuZGFy
eS4KKyAgICAvLworICAgIC8vIHYsIG0rLCBtLSwgYW5kIHRoZXJlZm9yZSB2IC0gbS0gYW5kIG0r
IC0gdiBhbGwgc2hhcmUgdGhlIHNhbWUgZGVub21pbmF0b3IuCisgICAgLy8KKyAgICAvLyBMZXQg
ZXAgPT0gZXN0aW1hdGVkX3Bvd2VyLCB0aGVuIHRoZSByZXR1cm5lZCB2YWx1ZXMgd2lsbCBzYXRp
c2Z5OgorICAgIC8vICB2IC8gMTBeZXAgPSBudW1lcmF0b3IgLyBkZW5vbWluYXRvci4KKyAgICAv
LyAgdidzIGJvdW5kYXJ5cyBtLSBhbmQgbSs6CisgICAgLy8gICAgbS0gLyAxMF5lcCA9PSB2IC8g
MTBeZXAgLSBkZWx0YV9taW51cyAvIGRlbm9taW5hdG9yCisgICAgLy8gICAgbSsgLyAxMF5lcCA9
PSB2IC8gMTBeZXAgKyBkZWx0YV9wbHVzIC8gZGVub21pbmF0b3IKKyAgICAvLyAgT3IgaW4gb3Ro
ZXIgd29yZHM6CisgICAgLy8gICAgbS0gPT0gdiAtIGRlbHRhX21pbnVzICogMTBeZXAgLyBkZW5v
bWluYXRvcjsKKyAgICAvLyAgICBtKyA9PSB2ICsgZGVsdGFfcGx1cyAqIDEwXmVwIC8gZGVub21p
bmF0b3I7CisgICAgLy8KKyAgICAvLyBTaW5jZSAxMF4oay0xKSA8PSB2IDwgMTBeayAgICAod2l0
aCBrID09IGVzdGltYXRlZF9wb3dlcikKKyAgICAvLyAgb3IgICAgICAgMTBeayA8PSB2IDwgMTBe
KGsrMSkKKyAgICAvLyAgd2UgdGhlbiBoYXZlIDAuMSA8PSBudW1lcmF0b3IvZGVub21pbmF0b3Ig
PCAxCisgICAgLy8gICAgICAgICAgIG9yICAgIDEgPD0gbnVtZXJhdG9yL2Rlbm9taW5hdG9yIDwg
MTAKKyAgICAvLworICAgIC8vIEl0IGlzIHRoZW4gZWFzeSB0byBraWNrc3RhcnQgdGhlIGRpZ2l0
LWdlbmVyYXRpb24gcm91dGluZS4KKyAgICAvLworICAgIC8vIFRoZSBib3VuZGFyeS1kZWx0YXMg
YXJlIG9ubHkgZmlsbGVkIGlmIG5lZWRfYm91bmRhcnlfZGVsdGFzIGlzIHNldC4KKyAgICBzdGF0
aWMgdm9pZCBJbml0aWFsU2NhbGVkU3RhcnRWYWx1ZXMoZG91YmxlIHYsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlc3RpbWF0ZWRfcG93ZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbmVlZF9ib3VuZGFyeV9kZWx0
YXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogbnVt
ZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0q
IGRlbm9taW5hdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBC
aWdudW0qIGRlbHRhX21pbnVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBCaWdudW0qIGRlbHRhX3BsdXMpIHsKKyAgICAgICAgaWYgKERvdWJsZSh2KS5FeHBvbmVu
dCgpID49IDApIHsKKyAgICAgICAgICAgIEluaXRpYWxTY2FsZWRTdGFydFZhbHVlc1Bvc2l0aXZl
RXhwb25lbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHYsIGVzdGltYXRlZF9wb3dlciwgbmVlZF9ib3VuZGFyeV9kZWx0YXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyYXRvciwg
ZGVub21pbmF0b3IsIGRlbHRhX21pbnVzLCBkZWx0YV9wbHVzKTsKKyAgICAgICAgfSBlbHNlIGlm
IChlc3RpbWF0ZWRfcG93ZXIgPj0gMCkgeworICAgICAgICAgICAgSW5pdGlhbFNjYWxlZFN0YXJ0
VmFsdWVzTmVnYXRpdmVFeHBvbmVudFBvc2l0aXZlUG93ZXIoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LCBlc3RpbWF0
ZWRfcG93ZXIsIG5lZWRfYm91bmRhcnlfZGVsdGFzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJhdG9yLCBkZW5v
bWluYXRvciwgZGVsdGFfbWludXMsIGRlbHRhX3BsdXMpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgSW5pdGlhbFNjYWxlZFN0YXJ0VmFsdWVzTmVnYXRpdmVFeHBvbmVudE5lZ2F0aXZl
UG93ZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2LCBlc3RpbWF0ZWRfcG93ZXIsIG5lZWRfYm91bmRhcnlfZGVsdGFz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnVtZXJhdG9yLCBkZW5vbWluYXRvciwgZGVsdGFfbWludXMsIGRlbHRhX3Bs
dXMpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIC8vIFRoaXMgcm91dGluZSBt
dWx0aXBsaWVzIG51bWVyYXRvci9kZW5vbWluYXRvciBzbyB0aGF0IGl0cyB2YWx1ZXMgbGllcyBp
biB0aGUKKyAgICAvLyByYW5nZSAxLTEwLiBUaGF0IGlzIGFmdGVyIGEgY2FsbCB0byB0aGlzIGZ1
bmN0aW9uIHdlIGhhdmU6CisgICAgLy8gICAgMSA8PSAobnVtZXJhdG9yICsgZGVsdGFfcGx1cykg
L2Rlbm9taW5hdG9yIDwgMTAuCisgICAgLy8gTGV0IG51bWVyYXRvciB0aGUgaW5wdXQgYmVmb3Jl
IG1vZGlmaWNhdGlvbiBhbmQgbnVtZXJhdG9yJyB0aGUgYXJndW1lbnQKKyAgICAvLyBhZnRlciBt
b2RpZmljYXRpb24sIHRoZW4gdGhlIG91dHB1dC1wYXJhbWV0ZXIgZGVjaW1hbF9wb2ludCBpcyBz
dWNoIHRoYXQKKyAgICAvLyAgbnVtZXJhdG9yIC8gZGVub21pbmF0b3IgKiAxMF5lc3RpbWF0ZWRf
cG93ZXIgPT0KKyAgICAvLyAgICBudW1lcmF0b3InIC8gZGVub21pbmF0b3InICogMTBeKGRlY2lt
YWxfcG9pbnQgLSAxKQorICAgIC8vIEluIHNvbWUgY2FzZXMgZXN0aW1hdGVkX3Bvd2VyIHdhcyB0
b28gbG93LCBhbmQgdGhpcyBpcyBhbHJlYWR5IHRoZSBjYXNlLiBXZQorICAgIC8vIHRoZW4gc2lt
cGx5IGFkanVzdCB0aGUgcG93ZXIgc28gdGhhdCAxMF4oay0xKSA8PSB2IDwgMTBeayAod2l0aCBr
ID09CisgICAgLy8gZXN0aW1hdGVkX3Bvd2VyKSBidXQgZG8gbm90IHRvdWNoIHRoZSBudW1lcmF0
b3Igb3IgZGVub21pbmF0b3IuCisgICAgLy8gT3RoZXJ3aXNlIHRoZSByb3V0aW5lIG11bHRpcGxp
ZXMgdGhlIG51bWVyYXRvciBhbmQgdGhlIGRlbHRhcyBieSAxMC4KKyAgICBzdGF0aWMgdm9pZCBG
aXh1cE11bHRpcGx5MTAoaW50IGVzdGltYXRlZF9wb3dlciwgYm9vbCBpc19ldmVuLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGRlY2ltYWxfcG9pbnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogbnVtZXJhdG9yLCBCaWdudW0qIGRlbm9taW5h
dG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIGRlbHRhX21pbnVz
LCBCaWdudW0qIGRlbHRhX3BsdXMpIHsKKyAgICAgICAgYm9vbCBpbl9yYW5nZTsKKyAgICAgICAg
aWYgKGlzX2V2ZW4pIHsKKyAgICAgICAgICAgIC8vIEZvciBJRUVFIGRvdWJsZXMgaGFsZi13YXkg
Y2FzZXMgKGluIGRlY2ltYWwgc3lzdGVtIG51bWJlcnMgZW5kaW5nIHdpdGggNSkKKyAgICAgICAg
ICAgIC8vIGFyZSByb3VuZGVkIHRvIHRoZSBjbG9zZXN0IGZsb2F0aW5nLXBvaW50IG51bWJlciB3
aXRoIGV2ZW4gc2lnbmlmaWNhbmQuCisgICAgICAgICAgICBpbl9yYW5nZSA9IEJpZ251bTo6UGx1
c0NvbXBhcmUoKm51bWVyYXRvciwgKmRlbHRhX3BsdXMsICpkZW5vbWluYXRvcikgPj0gMDsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGluX3JhbmdlID0gQmlnbnVtOjpQbHVzQ29tcGFy
ZSgqbnVtZXJhdG9yLCAqZGVsdGFfcGx1cywgKmRlbm9taW5hdG9yKSA+IDA7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGluX3JhbmdlKSB7CisgICAgICAgICAgICAvLyBTaW5jZSBudW1lcmF0b3Ig
KyBkZWx0YV9wbHVzID49IGRlbm9taW5hdG9yIHdlIGFscmVhZHkgaGF2ZQorICAgICAgICAgICAg
Ly8gMSA8PSBudW1lcmF0b3IvZGVub21pbmF0b3IgPCAxMC4gU2ltcGx5IHVwZGF0ZSB0aGUgZXN0
aW1hdGVkX3Bvd2VyLgorICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSBlc3RpbWF0ZWRfcG93
ZXIgKyAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSBl
c3RpbWF0ZWRfcG93ZXI7CisgICAgICAgICAgICBudW1lcmF0b3ItPlRpbWVzMTAoKTsKKyAgICAg
ICAgICAgIGlmIChCaWdudW06OkVxdWFsKCpkZWx0YV9taW51cywgKmRlbHRhX3BsdXMpKSB7Cisg
ICAgICAgICAgICAgICAgZGVsdGFfbWludXMtPlRpbWVzMTAoKTsKKyAgICAgICAgICAgICAgICBk
ZWx0YV9wbHVzLT5Bc3NpZ25CaWdudW0oKmRlbHRhX21pbnVzKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgZGVsdGFfbWludXMtPlRpbWVzMTAoKTsKKyAgICAgICAgICAg
ICAgICBkZWx0YV9wbHVzLT5UaW1lczEwKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgCit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9iaWdudW0tZHRvYS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS1kdG9hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDNmYmFhYmI3
YTU2Mzg1NmYwZmE0Y2Y1NGViN2Y3ZTYyOTYwZTY3OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9iaWdudW0tZHRvYS5oCkBAIC0wLDAgKzEsODIgQEAK
Ky8vIENvcHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAg
IGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8v
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmbmRlZiBET1VCTEVfQ09OVkVSU0lPTl9C
SUdOVU1fRFRPQV9IXworI2RlZmluZSBET1VCTEVfQ09OVkVSU0lPTl9CSUdOVU1fRFRPQV9IXwor
CisjaW5jbHVkZSAidXRpbHMuaCIKKworbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKKyAg
ICAKKyAgICBlbnVtIEJpZ251bUR0b2FNb2RlIHsKKyAgICAgICAgLy8gUmV0dXJuIHRoZSBzaG9y
dGVzdCBjb3JyZWN0IHJlcHJlc2VudGF0aW9uLgorICAgICAgICAvLyBGb3IgZXhhbXBsZSB0aGUg
b3V0cHV0IG9mIDAuMjk5OTk5OTk5OTk5OTk5OTg4ODk3IGlzICh0aGUgbGVzcyBhY2N1cmF0ZSBi
dXQKKyAgICAgICAgLy8gY29ycmVjdCkgMC4zLgorICAgICAgICBCSUdOVU1fRFRPQV9TSE9SVEVT
VCwKKyAgICAgICAgLy8gUmV0dXJuIGEgZml4ZWQgbnVtYmVyIG9mIGRpZ2l0cyBhZnRlciB0aGUg
ZGVjaW1hbCBwb2ludC4KKyAgICAgICAgLy8gRm9yIGluc3RhbmNlIGZpeGVkKDAuMSwgNCkgYmVj
b21lcyAwLjEwMDAKKyAgICAgICAgLy8gSWYgdGhlIGlucHV0IG51bWJlciBpcyBiaWcsIHRoZSBv
dXRwdXQgd2lsbCBiZSBiaWcuCisgICAgICAgIEJJR05VTV9EVE9BX0ZJWEVELAorICAgICAgICAv
LyBSZXR1cm4gYSBmaXhlZCBudW1iZXIgb2YgZGlnaXRzLCBubyBtYXR0ZXIgd2hhdCB0aGUgZXhw
b25lbnQgaXMuCisgICAgICAgIEJJR05VTV9EVE9BX1BSRUNJU0lPTgorICAgIH07CisgICAgCisg
ICAgLy8gQ29udmVydHMgdGhlIGdpdmVuIGRvdWJsZSAndicgdG8gYXNjaWkuCisgICAgLy8gVGhl
IHJlc3VsdCBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgYnVmZmVyICogMTBeKHBvaW50LWxlbmd0
aCkuCisgICAgLy8gVGhlIGJ1ZmZlciB3aWxsIGJlIG51bGwtdGVybWluYXRlZC4KKyAgICAvLwor
ICAgIC8vIFRoZSBpbnB1dCB2IG11c3QgYmUgPiAwIGFuZCBkaWZmZXJlbnQgZnJvbSBOYU4sIGFu
ZCBJbmZpbml0eS4KKyAgICAvLworICAgIC8vIFRoZSBvdXRwdXQgZGVwZW5kcyBvbiB0aGUgZ2l2
ZW4gbW9kZToKKyAgICAvLyAgLSBTSE9SVEVTVDogcHJvZHVjZSB0aGUgbGVhc3QgYW1vdW50IG9m
IGRpZ2l0cyBmb3Igd2hpY2ggdGhlIGludGVybmFsCisgICAgLy8gICBpZGVudGl0eSByZXF1aXJl
bWVudCBpcyBzdGlsbCBzYXRpc2ZpZWQuIElmIHRoZSBkaWdpdHMgYXJlIHByaW50ZWQKKyAgICAv
LyAgICh0b2dldGhlciB3aXRoIHRoZSBjb3JyZWN0IGV4cG9uZW50KSB0aGVuIHJlYWRpbmcgdGhp
cyBudW1iZXIgd2lsbCBnaXZlCisgICAgLy8gICAndicgYWdhaW4uIFRoZSBidWZmZXIgd2lsbCBj
aG9vc2UgdGhlIHJlcHJlc2VudGF0aW9uIHRoYXQgaXMgY2xvc2VzdCB0bworICAgIC8vICAgJ3Yn
LiBJZiB0aGVyZSBhcmUgdHdvIGF0IHRoZSBzYW1lIGRpc3RhbmNlLCB0aGFuIHRoZSBudW1iZXIg
aXMgcm91bmQgdXAuCisgICAgLy8gICBJbiB0aGlzIG1vZGUgdGhlICdyZXF1ZXN0ZWRfZGlnaXRz
JyBwYXJhbWV0ZXIgaXMgaWdub3JlZC4KKyAgICAvLyAgLSBGSVhFRDogcHJvZHVjZXMgZGlnaXRz
IG5lY2Vzc2FyeSB0byBwcmludCBhIGdpdmVuIG51bWJlciB3aXRoCisgICAgLy8gICAncmVxdWVz
dGVkX2RpZ2l0cycgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50LiBUaGUgcHJvZHVjZWQg
ZGlnaXRzCisgICAgLy8gICBtaWdodCBiZSB0b28gc2hvcnQgaW4gd2hpY2ggY2FzZSB0aGUgY2Fs
bGVyIGhhcyB0byBmaWxsIHRoZSBnYXBzIHdpdGggJzAncy4KKyAgICAvLyAgIEV4YW1wbGU6IHRv
Rml4ZWQoMC4wMDEsIDUpIGlzIGFsbG93ZWQgdG8gcmV0dXJuIGJ1ZmZlcj0iMSIsIHBvaW50PS0y
LgorICAgIC8vICAgSGFsZndheSBjYXNlcyBhcmUgcm91bmRlZCB1cC4gVGhlIGNhbGwgdG9GaXhl
ZCgwLjE1LCAyKSB0aHVzIHJldHVybnMKKyAgICAvLyAgICAgYnVmZmVyPSIyIiwgcG9pbnQ9MC4K
KyAgICAvLyAgIE5vdGU6IHRoZSBsZW5ndGggb2YgdGhlIHJldHVybmVkIGJ1ZmZlciBoYXMgbm8g
bWVhbmluZyB3cnQgdGhlIHNpZ25pZmljYW5jZQorICAgIC8vICAgb2YgaXRzIGRpZ2l0cy4gVGhh
dCBpcywganVzdCBiZWNhdXNlIGl0IGNvbnRhaW5zICcwJ3MgZG9lcyBub3QgbWVhbiB0aGF0Cisg
ICAgLy8gICBhbnkgb3RoZXIgZGlnaXQgd291bGQgbm90IHNhdGlzZnkgdGhlIGludGVybmFsIGlk
ZW50aXR5IHJlcXVpcmVtZW50LgorICAgIC8vICAtIFBSRUNJU0lPTjogcHJvZHVjZXMgJ3JlcXVl
c3RlZF9kaWdpdHMnIHdoZXJlIHRoZSBmaXJzdCBkaWdpdCBpcyBub3QgJzAnLgorICAgIC8vICAg
RXZlbiB0aG91Z2ggdGhlIGxlbmd0aCBvZiBwcm9kdWNlZCBkaWdpdHMgdXN1YWxseSBlcXVhbHMK
KyAgICAvLyAgICdyZXF1ZXN0ZWRfZGlnaXRzJywgdGhlIGZ1bmN0aW9uIGlzIGFsbG93ZWQgdG8g
cmV0dXJuIGZld2VyIGRpZ2l0cywgaW4KKyAgICAvLyAgIHdoaWNoIGNhc2UgdGhlIGNhbGxlciBo
YXMgdG8gZmlsbCB0aGUgbWlzc2luZyBkaWdpdHMgd2l0aCAnMCdzLgorICAgIC8vICAgSGFsZndh
eSBjYXNlcyBhcmUgYWdhaW4gcm91bmRlZCB1cC4KKyAgICAvLyAnQmlnbnVtRHRvYScgZXhwZWN0
cyB0aGUgZ2l2ZW4gYnVmZmVyIHRvIGJlIGJpZyBlbm91Z2ggdG8gaG9sZCBhbGwgZGlnaXRzCisg
ICAgLy8gYW5kIGEgdGVybWluYXRpbmcgbnVsbC1jaGFyYWN0ZXIuCisgICAgdm9pZCBCaWdudW1E
dG9hKGRvdWJsZSB2LCBCaWdudW1EdG9hTW9kZSBtb2RlLCBpbnQgcmVxdWVzdGVkX2RpZ2l0cywK
KyAgICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwgaW50KiBsZW5ndGgsIGlu
dCogcG9pbnQpOworICAgIAorfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCisKKyNl
bmRpZiAgLy8gRE9VQkxFX0NPTlZFUlNJT05fQklHTlVNX0RUT0FfSF8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9iaWdudW0uY2MgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL2R0b2EvYmlnbnVtLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRmMDE1NDY2MjVlZDkzN2FmOGYx
NDBmMTRkMTA1N2Y1OTExNTJiNjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL2R0b2EvYmlnbnVtLmNjCkBAIC0wLDAgKzEsNzY0IEBACisvLyBDb3B5cmlnaHQg
MjAxMCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8v
ICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAg
ICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
Ky8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKKyNpbmNsdWRlICJiaWdudW0uaCIKKyNpbmNsdWRlICJ1dGlscy5oIgor
CituYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIEJpZ251bTo6QmlnbnVt
KCkKKyAgICA6IGJpZ2l0c18oYmlnaXRzX2J1ZmZlcl8sIGtCaWdpdENhcGFjaXR5KSwgdXNlZF9k
aWdpdHNfKDApLCBleHBvbmVudF8oMCkgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGtC
aWdpdENhcGFjaXR5OyArK2kpIHsKKyAgICAgICAgICAgIGJpZ2l0c19baV0gPSAwOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFM+CisgICAgc3Rh
dGljIGludCBCaXRTaXplKFMgdmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIDggKiBzaXplb2YodmFs
dWUpOworICAgIH0KKyAgICAKKyAgICAvLyBHdWFyYW50ZWVkIHRvIGxpZSBpbiBvbmUgQmlnaXQu
CisgICAgdm9pZCBCaWdudW06OkFzc2lnblVJbnQxNih1aW50MTZfdCB2YWx1ZSkgeworICAgICAg
ICBBU1NFUlQoa0JpZ2l0U2l6ZSA+PSBCaXRTaXplKHZhbHVlKSk7CisgICAgICAgIFplcm8oKTsK
KyAgICAgICAgaWYgKHZhbHVlID09IDApIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIEVuc3Vy
ZUNhcGFjaXR5KDEpOworICAgICAgICBiaWdpdHNfWzBdID0gdmFsdWU7CisgICAgICAgIHVzZWRf
ZGlnaXRzXyA9IDE7CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpBc3NpZ25V
SW50NjQodWludDY0X3QgdmFsdWUpIHsKKyAgICAgICAgY29uc3QgaW50IGtVSW50NjRTaXplID0g
NjQ7CisgICAgICAgIAorICAgICAgICBaZXJvKCk7CisgICAgICAgIGlmICh2YWx1ZSA9PSAwKSBy
ZXR1cm47CisgICAgICAgIAorICAgICAgICBpbnQgbmVlZGVkX2JpZ2l0cyA9IGtVSW50NjRTaXpl
IC8ga0JpZ2l0U2l6ZSArIDE7CisgICAgICAgIEVuc3VyZUNhcGFjaXR5KG5lZWRlZF9iaWdpdHMp
OworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5lZWRlZF9iaWdpdHM7ICsraSkgeworICAg
ICAgICAgICAgYmlnaXRzX1tpXSA9IHZhbHVlICYga0JpZ2l0TWFzazsKKyAgICAgICAgICAgIHZh
bHVlID0gdmFsdWUgPj4ga0JpZ2l0U2l6ZTsKKyAgICAgICAgfQorICAgICAgICB1c2VkX2RpZ2l0
c18gPSBuZWVkZWRfYmlnaXRzOworICAgICAgICBDbGFtcCgpOworICAgIH0KKyAgICAKKyAgICAK
KyAgICB2b2lkIEJpZ251bTo6QXNzaWduQmlnbnVtKGNvbnN0IEJpZ251bSYgb3RoZXIpIHsKKyAg
ICAgICAgZXhwb25lbnRfID0gb3RoZXIuZXhwb25lbnRfOworICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IG90aGVyLnVzZWRfZGlnaXRzXzsgKytpKSB7CisgICAgICAgICAgICBiaWdpdHNfW2ld
ID0gb3RoZXIuYmlnaXRzX1tpXTsKKyAgICAgICAgfQorICAgICAgICAvLyBDbGVhciB0aGUgZXhj
ZXNzIGRpZ2l0cyAoaWYgdGhlcmUgd2VyZSBhbnkpLgorICAgICAgICBmb3IgKGludCBpID0gb3Ro
ZXIudXNlZF9kaWdpdHNfOyBpIDwgdXNlZF9kaWdpdHNfOyArK2kpIHsKKyAgICAgICAgICAgIGJp
Z2l0c19baV0gPSAwOworICAgICAgICB9CisgICAgICAgIHVzZWRfZGlnaXRzXyA9IG90aGVyLnVz
ZWRfZGlnaXRzXzsKKyAgICB9CisgICAgCisgICAgCisgICAgc3RhdGljIHVpbnQ2NF90IFJlYWRV
SW50NjQoVmVjdG9yPGNvbnN0IGNoYXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGln
aXRzX3RvX3JlYWQpIHsKKyAgICAgICAgdWludDY0X3QgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9y
IChpbnQgaSA9IGZyb207IGkgPCBmcm9tICsgZGlnaXRzX3RvX3JlYWQ7ICsraSkgeworICAgICAg
ICAgICAgaW50IGRpZ2l0ID0gYnVmZmVyW2ldIC0gJzAnOworICAgICAgICAgICAgQVNTRVJUKDAg
PD0gZGlnaXQgJiYgZGlnaXQgPD0gOSk7CisgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKiAx
MCArIGRpZ2l0OworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAg
IAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpBc3NpZ25EZWNpbWFsU3RyaW5nKFZlY3Rvcjxjb25z
dCBjaGFyPiB2YWx1ZSkgeworICAgICAgICAvLyAyXjY0ID0gMTg0NDY3NDQwNzM3MDk1NTE2MTYg
PiAxMF4xOQorICAgICAgICBjb25zdCBpbnQga01heFVpbnQ2NERlY2ltYWxEaWdpdHMgPSAxOTsK
KyAgICAgICAgWmVybygpOworICAgICAgICBpbnQgbGVuZ3RoID0gdmFsdWUubGVuZ3RoKCk7Cisg
ICAgICAgIGludCBwb3MgPSAwOworICAgICAgICAvLyBMZXQncyBqdXN0IHNheSB0aGF0IGVhY2gg
ZGlnaXQgbmVlZHMgNCBiaXRzLgorICAgICAgICB3aGlsZSAobGVuZ3RoID49IGtNYXhVaW50NjRE
ZWNpbWFsRGlnaXRzKSB7CisgICAgICAgICAgICB1aW50NjRfdCBkaWdpdHMgPSBSZWFkVUludDY0
KHZhbHVlLCBwb3MsIGtNYXhVaW50NjREZWNpbWFsRGlnaXRzKTsKKyAgICAgICAgICAgIHBvcyAr
PSBrTWF4VWludDY0RGVjaW1hbERpZ2l0czsKKyAgICAgICAgICAgIGxlbmd0aCAtPSBrTWF4VWlu
dDY0RGVjaW1hbERpZ2l0czsKKyAgICAgICAgICAgIE11bHRpcGx5QnlQb3dlck9mVGVuKGtNYXhV
aW50NjREZWNpbWFsRGlnaXRzKTsKKyAgICAgICAgICAgIEFkZFVJbnQ2NChkaWdpdHMpOworICAg
ICAgICB9CisgICAgICAgIHVpbnQ2NF90IGRpZ2l0cyA9IFJlYWRVSW50NjQodmFsdWUsIHBvcywg
bGVuZ3RoKTsKKyAgICAgICAgTXVsdGlwbHlCeVBvd2VyT2ZUZW4obGVuZ3RoKTsKKyAgICAgICAg
QWRkVUludDY0KGRpZ2l0cyk7CisgICAgICAgIENsYW1wKCk7CisgICAgfQorICAgIAorICAgIAor
ICAgIHN0YXRpYyBpbnQgSGV4Q2hhclZhbHVlKGNoYXIgYykgeworICAgICAgICBpZiAoJzAnIDw9
IGMgJiYgYyA8PSAnOScpIHJldHVybiBjIC0gJzAnOworICAgICAgICBpZiAoJ2EnIDw9IGMgJiYg
YyA8PSAnZicpIHJldHVybiAxMCArIGMgLSAnYSc7CisgICAgICAgIGlmICgnQScgPD0gYyAmJiBj
IDw9ICdGJykgcmV0dXJuIDEwICsgYyAtICdBJzsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgcmV0dXJuIDA7ICAvLyBUbyBtYWtlIGNvbXBpbGVyIGhhcHB5LgorICAgIH0KKyAgICAK
KyAgICAKKyAgICB2b2lkIEJpZ251bTo6QXNzaWduSGV4U3RyaW5nKFZlY3Rvcjxjb25zdCBjaGFy
PiB2YWx1ZSkgeworICAgICAgICBaZXJvKCk7CisgICAgICAgIGludCBsZW5ndGggPSB2YWx1ZS5s
ZW5ndGgoKTsKKyAgICAgICAgCisgICAgICAgIGludCBuZWVkZWRfYmlnaXRzID0gbGVuZ3RoICog
NCAvIGtCaWdpdFNpemUgKyAxOworICAgICAgICBFbnN1cmVDYXBhY2l0eShuZWVkZWRfYmlnaXRz
KTsKKyAgICAgICAgaW50IHN0cmluZ19pbmRleCA9IGxlbmd0aCAtIDE7CisgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbmVlZGVkX2JpZ2l0cyAtIDE7ICsraSkgeworICAgICAgICAgICAgLy8g
VGhlc2UgYmlnaXRzIGFyZSBndWFyYW50ZWVkIHRvIGJlICJmdWxsIi4KKyAgICAgICAgICAgIENo
dW5rIGN1cnJlbnRfYmlnaXQgPSAwOworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBr
QmlnaXRTaXplIC8gNDsgaisrKSB7CisgICAgICAgICAgICAgICAgY3VycmVudF9iaWdpdCArPSBI
ZXhDaGFyVmFsdWUodmFsdWVbc3RyaW5nX2luZGV4LS1dKSA8PCAoaiAqIDQpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYmlnaXRzX1tpXSA9IGN1cnJlbnRfYmlnaXQ7CisgICAgICAgIH0K
KyAgICAgICAgdXNlZF9kaWdpdHNfID0gbmVlZGVkX2JpZ2l0cyAtIDE7CisgICAgICAgIAorICAg
ICAgICBDaHVuayBtb3N0X3NpZ25pZmljYW50X2JpZ2l0ID0gMDsgIC8vIENvdWxkIGJlID0gMDsK
KyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPD0gc3RyaW5nX2luZGV4OyArK2opIHsKKyAgICAg
ICAgICAgIG1vc3Rfc2lnbmlmaWNhbnRfYmlnaXQgPDw9IDQ7CisgICAgICAgICAgICBtb3N0X3Np
Z25pZmljYW50X2JpZ2l0ICs9IEhleENoYXJWYWx1ZSh2YWx1ZVtqXSk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKG1vc3Rfc2lnbmlmaWNhbnRfYmlnaXQgIT0gMCkgeworICAgICAgICAgICAgYmln
aXRzX1t1c2VkX2RpZ2l0c19dID0gbW9zdF9zaWduaWZpY2FudF9iaWdpdDsKKyAgICAgICAgICAg
IHVzZWRfZGlnaXRzXysrOworICAgICAgICB9CisgICAgICAgIENsYW1wKCk7CisgICAgfQorICAg
IAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpBZGRVSW50NjQodWludDY0X3Qgb3BlcmFuZCkgewor
ICAgICAgICBpZiAob3BlcmFuZCA9PSAwKSByZXR1cm47CisgICAgICAgIEJpZ251bSBvdGhlcjsK
KyAgICAgICAgb3RoZXIuQXNzaWduVUludDY0KG9wZXJhbmQpOworICAgICAgICBBZGRCaWdudW0o
b3RoZXIpOworICAgIH0KKyAgICAKKyAgICAKKyAgICB2b2lkIEJpZ251bTo6QWRkQmlnbnVtKGNv
bnN0IEJpZ251bSYgb3RoZXIpIHsKKyAgICAgICAgQVNTRVJUKElzQ2xhbXBlZCgpKTsKKyAgICAg
ICAgQVNTRVJUKG90aGVyLklzQ2xhbXBlZCgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIElmIHRo
aXMgaGFzIGEgZ3JlYXRlciBleHBvbmVudCB0aGFuIG90aGVyIGFwcGVuZCB6ZXJvLWJpZ2l0cyB0
byB0aGlzLgorICAgICAgICAvLyBBZnRlciB0aGlzIGNhbGwgZXhwb25lbnRfIDw9IG90aGVyLmV4
cG9uZW50Xy4KKyAgICAgICAgQWxpZ24ob3RoZXIpOworICAgICAgICAKKyAgICAgICAgLy8gVGhl
cmUgYXJlIHR3byBwb3NzaWJpbGl0aWVzOgorICAgICAgICAvLyAgIGFhYWFhYWFhYWFhIDAwMDAg
ICh3aGVyZSB0aGUgMHMgcmVwcmVzZW50IGEncyBleHBvbmVudCkKKyAgICAgICAgLy8gICAgIGJi
YmJiIDAwMDAwMDAwCisgICAgICAgIC8vICAgLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAvLyAg
IGNjY2NjY2NjY2NjIDAwMDAKKyAgICAgICAgLy8gb3IKKyAgICAgICAgLy8gICAgYWFhYWFhYWFh
YSAwMDAwCisgICAgICAgIC8vICBiYmJiYmJiYmIgMDAwMDAwMAorICAgICAgICAvLyAgLS0tLS0t
LS0tLS0tLS0tLS0KKyAgICAgICAgLy8gIGNjY2NjY2NjY2NjYyAwMDAwCisgICAgICAgIC8vIElu
IGJvdGggY2FzZXMgd2UgbWlnaHQgbmVlZCBhIGNhcnJ5IGJpZ2l0LgorICAgICAgICAKKyAgICAg
ICAgRW5zdXJlQ2FwYWNpdHkoMSArIE1heChCaWdpdExlbmd0aCgpLCBvdGhlci5CaWdpdExlbmd0
aCgpKSAtIGV4cG9uZW50Xyk7CisgICAgICAgIENodW5rIGNhcnJ5ID0gMDsKKyAgICAgICAgaW50
IGJpZ2l0X3BvcyA9IG90aGVyLmV4cG9uZW50XyAtIGV4cG9uZW50XzsKKyAgICAgICAgQVNTRVJU
KGJpZ2l0X3BvcyA+PSAwKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvdGhlci51c2Vk
X2RpZ2l0c187ICsraSkgeworICAgICAgICAgICAgQ2h1bmsgc3VtID0gYmlnaXRzX1tiaWdpdF9w
b3NdICsgb3RoZXIuYmlnaXRzX1tpXSArIGNhcnJ5OworICAgICAgICAgICAgYmlnaXRzX1tiaWdp
dF9wb3NdID0gc3VtICYga0JpZ2l0TWFzazsKKyAgICAgICAgICAgIGNhcnJ5ID0gc3VtID4+IGtC
aWdpdFNpemU7CisgICAgICAgICAgICBiaWdpdF9wb3MrKzsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgd2hpbGUgKGNhcnJ5ICE9IDApIHsKKyAgICAgICAgICAgIENodW5rIHN1bSA9IGJp
Z2l0c19bYmlnaXRfcG9zXSArIGNhcnJ5OworICAgICAgICAgICAgYmlnaXRzX1tiaWdpdF9wb3Nd
ID0gc3VtICYga0JpZ2l0TWFzazsKKyAgICAgICAgICAgIGNhcnJ5ID0gc3VtID4+IGtCaWdpdFNp
emU7CisgICAgICAgICAgICBiaWdpdF9wb3MrKzsKKyAgICAgICAgfQorICAgICAgICB1c2VkX2Rp
Z2l0c18gPSBNYXgoYmlnaXRfcG9zLCB1c2VkX2RpZ2l0c18pOworICAgICAgICBBU1NFUlQoSXND
bGFtcGVkKCkpOworICAgIH0KKyAgICAKKyAgICAKKyAgICB2b2lkIEJpZ251bTo6U3VidHJhY3RC
aWdudW0oY29uc3QgQmlnbnVtJiBvdGhlcikgeworICAgICAgICBBU1NFUlQoSXNDbGFtcGVkKCkp
OworICAgICAgICBBU1NFUlQob3RoZXIuSXNDbGFtcGVkKCkpOworICAgICAgICAvLyBXZSByZXF1
aXJlIHRoaXMgdG8gYmUgYmlnZ2VyIHRoYW4gb3RoZXIuCisgICAgICAgIEFTU0VSVChMZXNzRXF1
YWwob3RoZXIsICp0aGlzKSk7CisgICAgICAgIAorICAgICAgICBBbGlnbihvdGhlcik7CisgICAg
ICAgIAorICAgICAgICBpbnQgb2Zmc2V0ID0gb3RoZXIuZXhwb25lbnRfIC0gZXhwb25lbnRfOwor
ICAgICAgICBDaHVuayBib3Jyb3cgPSAwOworICAgICAgICBpbnQgaTsKKyAgICAgICAgZm9yIChp
ID0gMDsgaSA8IG90aGVyLnVzZWRfZGlnaXRzXzsgKytpKSB7CisgICAgICAgICAgICBBU1NFUlQo
KGJvcnJvdyA9PSAwKSB8fCAoYm9ycm93ID09IDEpKTsKKyAgICAgICAgICAgIENodW5rIGRpZmZl
cmVuY2UgPSBiaWdpdHNfW2kgKyBvZmZzZXRdIC0gb3RoZXIuYmlnaXRzX1tpXSAtIGJvcnJvdzsK
KyAgICAgICAgICAgIGJpZ2l0c19baSArIG9mZnNldF0gPSBkaWZmZXJlbmNlICYga0JpZ2l0TWFz
azsKKyAgICAgICAgICAgIGJvcnJvdyA9IGRpZmZlcmVuY2UgPj4gKGtDaHVua1NpemUgLSAxKTsK
KyAgICAgICAgfQorICAgICAgICB3aGlsZSAoYm9ycm93ICE9IDApIHsKKyAgICAgICAgICAgIENo
dW5rIGRpZmZlcmVuY2UgPSBiaWdpdHNfW2kgKyBvZmZzZXRdIC0gYm9ycm93OworICAgICAgICAg
ICAgYmlnaXRzX1tpICsgb2Zmc2V0XSA9IGRpZmZlcmVuY2UgJiBrQmlnaXRNYXNrOworICAgICAg
ICAgICAgYm9ycm93ID0gZGlmZmVyZW5jZSA+PiAoa0NodW5rU2l6ZSAtIDEpOworICAgICAgICAg
ICAgKytpOworICAgICAgICB9CisgICAgICAgIENsYW1wKCk7CisgICAgfQorICAgIAorICAgIAor
ICAgIHZvaWQgQmlnbnVtOjpTaGlmdExlZnQoaW50IHNoaWZ0X2Ftb3VudCkgeworICAgICAgICBp
ZiAodXNlZF9kaWdpdHNfID09IDApIHJldHVybjsKKyAgICAgICAgZXhwb25lbnRfICs9IHNoaWZ0
X2Ftb3VudCAvIGtCaWdpdFNpemU7CisgICAgICAgIGludCBsb2NhbF9zaGlmdCA9IHNoaWZ0X2Ft
b3VudCAlIGtCaWdpdFNpemU7CisgICAgICAgIEVuc3VyZUNhcGFjaXR5KHVzZWRfZGlnaXRzXyAr
IDEpOworICAgICAgICBCaWdpdHNTaGlmdExlZnQobG9jYWxfc2hpZnQpOworICAgIH0KKyAgICAK
KyAgICAKKyAgICB2b2lkIEJpZ251bTo6TXVsdGlwbHlCeVVJbnQzMih1aW50MzJfdCBmYWN0b3Ip
IHsKKyAgICAgICAgaWYgKGZhY3RvciA9PSAxKSByZXR1cm47CisgICAgICAgIGlmIChmYWN0b3Ig
PT0gMCkgeworICAgICAgICAgICAgWmVybygpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIGlmICh1c2VkX2RpZ2l0c18gPT0gMCkgcmV0dXJuOworICAgICAgICAKKyAg
ICAgICAgLy8gVGhlIHByb2R1Y3Qgb2YgYSBiaWdpdCB3aXRoIHRoZSBmYWN0b3IgaXMgb2Ygc2l6
ZSBrQmlnaXRTaXplICsgMzIuCisgICAgICAgIC8vIEFzc2VydCB0aGF0IHRoaXMgbnVtYmVyICsg
MSAoZm9yIHRoZSBjYXJyeSkgZml0cyBpbnRvIGRvdWJsZSBjaHVuay4KKyAgICAgICAgQVNTRVJU
KGtEb3VibGVDaHVua1NpemUgPj0ga0JpZ2l0U2l6ZSArIDMyICsgMSk7CisgICAgICAgIERvdWJs
ZUNodW5rIGNhcnJ5ID0gMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1c2VkX2RpZ2l0
c187ICsraSkgeworICAgICAgICAgICAgRG91YmxlQ2h1bmsgcHJvZHVjdCA9IHN0YXRpY19jYXN0
PERvdWJsZUNodW5rPihmYWN0b3IpICogYmlnaXRzX1tpXSArIGNhcnJ5OworICAgICAgICAgICAg
YmlnaXRzX1tpXSA9IHN0YXRpY19jYXN0PENodW5rPihwcm9kdWN0ICYga0JpZ2l0TWFzayk7Cisg
ICAgICAgICAgICBjYXJyeSA9IChwcm9kdWN0ID4+IGtCaWdpdFNpemUpOworICAgICAgICB9Cisg
ICAgICAgIHdoaWxlIChjYXJyeSAhPSAwKSB7CisgICAgICAgICAgICBFbnN1cmVDYXBhY2l0eSh1
c2VkX2RpZ2l0c18gKyAxKTsKKyAgICAgICAgICAgIGJpZ2l0c19bdXNlZF9kaWdpdHNfXSA9IGNh
cnJ5ICYga0JpZ2l0TWFzazsKKyAgICAgICAgICAgIHVzZWRfZGlnaXRzXysrOworICAgICAgICAg
ICAgY2FycnkgPj49IGtCaWdpdFNpemU7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisg
ICAgdm9pZCBCaWdudW06Ok11bHRpcGx5QnlVSW50NjQodWludDY0X3QgZmFjdG9yKSB7CisgICAg
ICAgIGlmIChmYWN0b3IgPT0gMSkgcmV0dXJuOworICAgICAgICBpZiAoZmFjdG9yID09IDApIHsK
KyAgICAgICAgICAgIFplcm8oKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBBU1NFUlQoa0JpZ2l0U2l6ZSA8IDMyKTsKKyAgICAgICAgdWludDY0X3QgY2FycnkgPSAw
OworICAgICAgICB1aW50NjRfdCBsb3cgPSBmYWN0b3IgJiAweEZGRkZGRkZGOworICAgICAgICB1
aW50NjRfdCBoaWdoID0gZmFjdG9yID4+IDMyOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IHVzZWRfZGlnaXRzXzsgKytpKSB7CisgICAgICAgICAgICB1aW50NjRfdCBwcm9kdWN0X2xvdyA9
IGxvdyAqIGJpZ2l0c19baV07CisgICAgICAgICAgICB1aW50NjRfdCBwcm9kdWN0X2hpZ2ggPSBo
aWdoICogYmlnaXRzX1tpXTsKKyAgICAgICAgICAgIHVpbnQ2NF90IHRtcCA9IChjYXJyeSAmIGtC
aWdpdE1hc2spICsgcHJvZHVjdF9sb3c7CisgICAgICAgICAgICBiaWdpdHNfW2ldID0gdG1wICYg
a0JpZ2l0TWFzazsKKyAgICAgICAgICAgIGNhcnJ5ID0gKGNhcnJ5ID4+IGtCaWdpdFNpemUpICsg
KHRtcCA+PiBrQmlnaXRTaXplKSArCisgICAgICAgICAgICAocHJvZHVjdF9oaWdoIDw8ICgzMiAt
IGtCaWdpdFNpemUpKTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoY2FycnkgIT0gMCkgewor
ICAgICAgICAgICAgRW5zdXJlQ2FwYWNpdHkodXNlZF9kaWdpdHNfICsgMSk7CisgICAgICAgICAg
ICBiaWdpdHNfW3VzZWRfZGlnaXRzX10gPSBjYXJyeSAmIGtCaWdpdE1hc2s7CisgICAgICAgICAg
ICB1c2VkX2RpZ2l0c18rKzsKKyAgICAgICAgICAgIGNhcnJ5ID4+PSBrQmlnaXRTaXplOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpNdWx0aXBseUJ5UG93
ZXJPZlRlbihpbnQgZXhwb25lbnQpIHsKKyAgICAgICAgY29uc3QgdWludDY0X3Qga0ZpdmUyNyA9
IFVJTlQ2NF8yUEFSVF9DKDB4Njc2NWM3OTMsIGZhMTAwNzlkKTsKKyAgICAgICAgY29uc3QgdWlu
dDE2X3Qga0ZpdmUxID0gNTsKKyAgICAgICAgY29uc3QgdWludDE2X3Qga0ZpdmUyID0ga0ZpdmUx
ICogNTsKKyAgICAgICAgY29uc3QgdWludDE2X3Qga0ZpdmUzID0ga0ZpdmUyICogNTsKKyAgICAg
ICAgY29uc3QgdWludDE2X3Qga0ZpdmU0ID0ga0ZpdmUzICogNTsKKyAgICAgICAgY29uc3QgdWlu
dDE2X3Qga0ZpdmU1ID0ga0ZpdmU0ICogNTsKKyAgICAgICAgY29uc3QgdWludDE2X3Qga0ZpdmU2
ID0ga0ZpdmU1ICogNTsKKyAgICAgICAgY29uc3QgdWludDMyX3Qga0ZpdmU3ID0ga0ZpdmU2ICog
NTsKKyAgICAgICAgY29uc3QgdWludDMyX3Qga0ZpdmU4ID0ga0ZpdmU3ICogNTsKKyAgICAgICAg
Y29uc3QgdWludDMyX3Qga0ZpdmU5ID0ga0ZpdmU4ICogNTsKKyAgICAgICAgY29uc3QgdWludDMy
X3Qga0ZpdmUxMCA9IGtGaXZlOSAqIDU7CisgICAgICAgIGNvbnN0IHVpbnQzMl90IGtGaXZlMTEg
PSBrRml2ZTEwICogNTsKKyAgICAgICAgY29uc3QgdWludDMyX3Qga0ZpdmUxMiA9IGtGaXZlMTEg
KiA1OworICAgICAgICBjb25zdCB1aW50MzJfdCBrRml2ZTEzID0ga0ZpdmUxMiAqIDU7CisgICAg
ICAgIGNvbnN0IHVpbnQzMl90IGtGaXZlMV90b18xMltdID0KKyAgICAgICAgeyBrRml2ZTEsIGtG
aXZlMiwga0ZpdmUzLCBrRml2ZTQsIGtGaXZlNSwga0ZpdmU2LAorICAgICAgICAgICAga0ZpdmU3
LCBrRml2ZTgsIGtGaXZlOSwga0ZpdmUxMCwga0ZpdmUxMSwga0ZpdmUxMiB9OworICAgICAgICAK
KyAgICAgICAgQVNTRVJUKGV4cG9uZW50ID49IDApOworICAgICAgICBpZiAoZXhwb25lbnQgPT0g
MCkgcmV0dXJuOworICAgICAgICBpZiAodXNlZF9kaWdpdHNfID09IDApIHJldHVybjsKKyAgICAg
ICAgCisgICAgICAgIC8vIFdlIHNoaWZ0IGJ5IGV4cG9uZW50IGF0IHRoZSBlbmQganVzdCBiZWZv
cmUgcmV0dXJuaW5nLgorICAgICAgICBpbnQgcmVtYWluaW5nX2V4cG9uZW50ID0gZXhwb25lbnQ7
CisgICAgICAgIHdoaWxlIChyZW1haW5pbmdfZXhwb25lbnQgPj0gMjcpIHsKKyAgICAgICAgICAg
IE11bHRpcGx5QnlVSW50NjQoa0ZpdmUyNyk7CisgICAgICAgICAgICByZW1haW5pbmdfZXhwb25l
bnQgLT0gMjc7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKHJlbWFpbmluZ19leHBvbmVudCA+
PSAxMykgeworICAgICAgICAgICAgTXVsdGlwbHlCeVVJbnQzMihrRml2ZTEzKTsKKyAgICAgICAg
ICAgIHJlbWFpbmluZ19leHBvbmVudCAtPSAxMzsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVt
YWluaW5nX2V4cG9uZW50ID4gMCkgeworICAgICAgICAgICAgTXVsdGlwbHlCeVVJbnQzMihrRml2
ZTFfdG9fMTJbcmVtYWluaW5nX2V4cG9uZW50IC0gMV0pOworICAgICAgICB9CisgICAgICAgIFNo
aWZ0TGVmdChleHBvbmVudCk7CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpT
cXVhcmUoKSB7CisgICAgICAgIEFTU0VSVChJc0NsYW1wZWQoKSk7CisgICAgICAgIGludCBwcm9k
dWN0X2xlbmd0aCA9IDIgKiB1c2VkX2RpZ2l0c187CisgICAgICAgIEVuc3VyZUNhcGFjaXR5KHBy
b2R1Y3RfbGVuZ3RoKTsKKyAgICAgICAgCisgICAgICAgIC8vIENvbWJhIG11bHRpcGxpY2F0aW9u
OiBjb21wdXRlIGVhY2ggY29sdW1uIHNlcGFyYXRlbHkuCisgICAgICAgIC8vIEV4YW1wbGU6IHIg
PSBhMmExYTAgKiBiMmIxYjAuCisgICAgICAgIC8vICAgIHIgPSAgMSAgICAqIGEwYjAgKworICAg
ICAgICAvLyAgICAgICAgMTAgICAgKiAoYTFiMCArIGEwYjEpICsKKyAgICAgICAgLy8gICAgICAg
IDEwMCAgICogKGEyYjAgKyBhMWIxICsgYTBiMikgKworICAgICAgICAvLyAgICAgICAgMTAwMCAg
KiAoYTJiMSArIGExYjIpICsKKyAgICAgICAgLy8gICAgICAgIDEwMDAwICogYTJiMgorICAgICAg
ICAvLworICAgICAgICAvLyBJbiB0aGUgd29yc3QgY2FzZSB3ZSBoYXZlIHRvIGFjY3VtdWxhdGUg
bmItZGlnaXRzIHByb2R1Y3RzIG9mIGRpZ2l0KmRpZ2l0LgorICAgICAgICAvLworICAgICAgICAv
LyBBc3NlcnQgdGhhdCB0aGUgYWRkaXRpb25hbCBudW1iZXIgb2YgYml0cyBpbiBhIERvdWJsZUNo
dW5rIGFyZSBlbm91Z2ggdG8KKyAgICAgICAgLy8gc3VtIHVwIHVzZWRfZGlnaXRzIG9mIEJpZ2l0
KkJpZ2l0LgorICAgICAgICBpZiAoKDEgPDwgKDIgKiAoa0NodW5rU2l6ZSAtIGtCaWdpdFNpemUp
KSkgPD0gdXNlZF9kaWdpdHNfKSB7CisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7CisgICAg
ICAgIH0KKyAgICAgICAgRG91YmxlQ2h1bmsgYWNjdW11bGF0b3IgPSAwOworICAgICAgICAvLyBG
aXJzdCBzaGlmdCB0aGUgZGlnaXRzIHNvIHdlIGRvbid0IG92ZXJ3cml0ZSB0aGVtLgorICAgICAg
ICBpbnQgY29weV9vZmZzZXQgPSB1c2VkX2RpZ2l0c187CisgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgdXNlZF9kaWdpdHNfOyArK2kpIHsKKyAgICAgICAgICAgIGJpZ2l0c19bY29weV9vZmZz
ZXQgKyBpXSA9IGJpZ2l0c19baV07CisgICAgICAgIH0KKyAgICAgICAgLy8gV2UgaGF2ZSB0d28g
bG9vcHMgdG8gYXZvaWQgc29tZSAnaWYncyBpbiB0aGUgbG9vcC4KKyAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCB1c2VkX2RpZ2l0c187ICsraSkgeworICAgICAgICAgICAgLy8gUHJvY2VzcyB0
ZW1wb3JhcnkgZGlnaXQgaSB3aXRoIHBvd2VyIGkuCisgICAgICAgICAgICAvLyBUaGUgc3VtIG9m
IHRoZSB0d28gaW5kaWNlcyBtdXN0IGJlIGVxdWFsIHRvIGkuCisgICAgICAgICAgICBpbnQgYmln
aXRfaW5kZXgxID0gaTsKKyAgICAgICAgICAgIGludCBiaWdpdF9pbmRleDIgPSAwOworICAgICAg
ICAgICAgLy8gU3VtIGFsbCBvZiB0aGUgc3ViLXByb2R1Y3RzLgorICAgICAgICAgICAgd2hpbGUg
KGJpZ2l0X2luZGV4MSA+PSAwKSB7CisgICAgICAgICAgICAgICAgQ2h1bmsgY2h1bmsxID0gYmln
aXRzX1tjb3B5X29mZnNldCArIGJpZ2l0X2luZGV4MV07CisgICAgICAgICAgICAgICAgQ2h1bmsg
Y2h1bmsyID0gYmlnaXRzX1tjb3B5X29mZnNldCArIGJpZ2l0X2luZGV4Ml07CisgICAgICAgICAg
ICAgICAgYWNjdW11bGF0b3IgKz0gc3RhdGljX2Nhc3Q8RG91YmxlQ2h1bms+KGNodW5rMSkgKiBj
aHVuazI7CisgICAgICAgICAgICAgICAgYmlnaXRfaW5kZXgxLS07CisgICAgICAgICAgICAgICAg
YmlnaXRfaW5kZXgyKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBiaWdpdHNfW2ldID0g
c3RhdGljX2Nhc3Q8Q2h1bms+KGFjY3VtdWxhdG9yKSAmIGtCaWdpdE1hc2s7CisgICAgICAgICAg
ICBhY2N1bXVsYXRvciA+Pj0ga0JpZ2l0U2l6ZTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGlu
dCBpID0gdXNlZF9kaWdpdHNfOyBpIDwgcHJvZHVjdF9sZW5ndGg7ICsraSkgeworICAgICAgICAg
ICAgaW50IGJpZ2l0X2luZGV4MSA9IHVzZWRfZGlnaXRzXyAtIDE7CisgICAgICAgICAgICBpbnQg
YmlnaXRfaW5kZXgyID0gaSAtIGJpZ2l0X2luZGV4MTsKKyAgICAgICAgICAgIC8vIEludmFyaWFu
dDogc3VtIG9mIGJvdGggaW5kaWNlcyBpcyBhZ2FpbiBlcXVhbCB0byBpLgorICAgICAgICAgICAg
Ly8gSW5uZXIgbG9vcCBydW5zIDAgdGltZXMgb24gbGFzdCBpdGVyYXRpb24sIGVtcHR5aW5nIGFj
Y3VtdWxhdG9yLgorICAgICAgICAgICAgd2hpbGUgKGJpZ2l0X2luZGV4MiA8IHVzZWRfZGlnaXRz
XykgeworICAgICAgICAgICAgICAgIENodW5rIGNodW5rMSA9IGJpZ2l0c19bY29weV9vZmZzZXQg
KyBiaWdpdF9pbmRleDFdOworICAgICAgICAgICAgICAgIENodW5rIGNodW5rMiA9IGJpZ2l0c19b
Y29weV9vZmZzZXQgKyBiaWdpdF9pbmRleDJdOworICAgICAgICAgICAgICAgIGFjY3VtdWxhdG9y
ICs9IHN0YXRpY19jYXN0PERvdWJsZUNodW5rPihjaHVuazEpICogY2h1bmsyOworICAgICAgICAg
ICAgICAgIGJpZ2l0X2luZGV4MS0tOworICAgICAgICAgICAgICAgIGJpZ2l0X2luZGV4MisrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gVGhlIG92ZXJ3cml0dGVuIGJpZ2l0c19baV0g
d2lsbCBuZXZlciBiZSByZWFkIGluIGZ1cnRoZXIgbG9vcCBpdGVyYXRpb25zLAorICAgICAgICAg
ICAgLy8gYmVjYXVzZSBiaWdpdF9pbmRleDEgYW5kIGJpZ2l0X2luZGV4MiBhcmUgYWx3YXlzIGdy
ZWF0ZXIKKyAgICAgICAgICAgIC8vIHRoYW4gaSAtIHVzZWRfZGlnaXRzXy4KKyAgICAgICAgICAg
IGJpZ2l0c19baV0gPSBzdGF0aWNfY2FzdDxDaHVuaz4oYWNjdW11bGF0b3IpICYga0JpZ2l0TWFz
azsKKyAgICAgICAgICAgIGFjY3VtdWxhdG9yID4+PSBrQmlnaXRTaXplOworICAgICAgICB9Cisg
ICAgICAgIC8vIFNpbmNlIHRoZSByZXN1bHQgd2FzIGd1YXJhbnRlZWQgdG8gbGllIGluc2lkZSB0
aGUgbnVtYmVyIHRoZQorICAgICAgICAvLyBhY2N1bXVsYXRvciBtdXN0IGJlIDAgbm93LgorICAg
ICAgICBBU1NFUlQoYWNjdW11bGF0b3IgPT0gMCk7CisgICAgICAgIAorICAgICAgICAvLyBEb24n
dCBmb3JnZXQgdG8gdXBkYXRlIHRoZSB1c2VkX2RpZ2l0cyBhbmQgdGhlIGV4cG9uZW50LgorICAg
ICAgICB1c2VkX2RpZ2l0c18gPSBwcm9kdWN0X2xlbmd0aDsKKyAgICAgICAgZXhwb25lbnRfICo9
IDI7CisgICAgICAgIENsYW1wKCk7CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVt
OjpBc3NpZ25Qb3dlclVJbnQxNih1aW50MTZfdCBiYXNlLCBpbnQgcG93ZXJfZXhwb25lbnQpIHsK
KyAgICAgICAgQVNTRVJUKGJhc2UgIT0gMCk7CisgICAgICAgIEFTU0VSVChwb3dlcl9leHBvbmVu
dCA+PSAwKTsKKyAgICAgICAgaWYgKHBvd2VyX2V4cG9uZW50ID09IDApIHsKKyAgICAgICAgICAg
IEFzc2lnblVJbnQxNigxKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBaZXJvKCk7CisgICAgICAgIGludCBzaGlmdHMgPSAwOworICAgICAgICAvLyBXZSBleHBlY3Qg
YmFzZSB0byBiZSBpbiByYW5nZSAyLTMyLCBhbmQgbW9zdCBvZnRlbiB0byBiZSAxMC4KKyAgICAg
ICAgLy8gSXQgZG9lcyBub3QgbWFrZSBtdWNoIHNlbnNlIHRvIGltcGxlbWVudCBkaWZmZXJlbnQg
YWxnb3JpdGhtcyBmb3IgY291bnRpbmcKKyAgICAgICAgLy8gdGhlIGJpdHMuCisgICAgICAgIHdo
aWxlICgoYmFzZSAmIDEpID09IDApIHsKKyAgICAgICAgICAgIGJhc2UgPj49IDE7CisgICAgICAg
ICAgICBzaGlmdHMrKzsKKyAgICAgICAgfQorICAgICAgICBpbnQgYml0X3NpemUgPSAwOworICAg
ICAgICBpbnQgdG1wX2Jhc2UgPSBiYXNlOworICAgICAgICB3aGlsZSAodG1wX2Jhc2UgIT0gMCkg
eworICAgICAgICAgICAgdG1wX2Jhc2UgPj49IDE7CisgICAgICAgICAgICBiaXRfc2l6ZSsrOwor
ICAgICAgICB9CisgICAgICAgIGludCBmaW5hbF9zaXplID0gYml0X3NpemUgKiBwb3dlcl9leHBv
bmVudDsKKyAgICAgICAgLy8gMSBleHRyYSBiaWdpdCBmb3IgdGhlIHNoaWZ0aW5nLCBhbmQgb25l
IGZvciByb3VuZGVkIGZpbmFsX3NpemUuCisgICAgICAgIEVuc3VyZUNhcGFjaXR5KGZpbmFsX3Np
emUgLyBrQmlnaXRTaXplICsgMik7CisgICAgICAgIAorICAgICAgICAvLyBMZWZ0IHRvIFJpZ2h0
IGV4cG9uZW50aWF0aW9uLgorICAgICAgICBpbnQgbWFzayA9IDE7CisgICAgICAgIHdoaWxlIChw
b3dlcl9leHBvbmVudCA+PSBtYXNrKSBtYXNrIDw8PSAxOworICAgICAgICAKKyAgICAgICAgLy8g
VGhlIG1hc2sgaXMgbm93IHBvaW50aW5nIHRvIHRoZSBiaXQgYWJvdmUgdGhlIG1vc3Qgc2lnbmlm
aWNhbnQgMS1iaXQgb2YKKyAgICAgICAgLy8gcG93ZXJfZXhwb25lbnQuCisgICAgICAgIC8vIEdl
dCByaWQgb2YgZmlyc3QgMS1iaXQ7CisgICAgICAgIG1hc2sgPj49IDI7CisgICAgICAgIHVpbnQ2
NF90IHRoaXNfdmFsdWUgPSBiYXNlOworICAgICAgICAKKyAgICAgICAgYm9vbCBkZWxheWVkX211
bHRpcGxpY2lhdGlvbiA9IGZhbHNlOworICAgICAgICBjb25zdCB1aW50NjRfdCBtYXhfMzJiaXRz
ID0gMHhGRkZGRkZGRjsKKyAgICAgICAgd2hpbGUgKG1hc2sgIT0gMCAmJiB0aGlzX3ZhbHVlIDw9
IG1heF8zMmJpdHMpIHsKKyAgICAgICAgICAgIHRoaXNfdmFsdWUgPSB0aGlzX3ZhbHVlICogdGhp
c192YWx1ZTsKKyAgICAgICAgICAgIC8vIFZlcmlmeSB0aGF0IHRoZXJlIGlzIGVub3VnaCBzcGFj
ZSBpbiB0aGlzX3ZhbHVlIHRvIHBlcmZvcm0gdGhlCisgICAgICAgICAgICAvLyBtdWx0aXBsaWNh
dGlvbi4gIFRoZSBmaXJzdCBiaXRfc2l6ZSBiaXRzIG11c3QgYmUgMC4KKyAgICAgICAgICAgIGlm
ICgocG93ZXJfZXhwb25lbnQgJiBtYXNrKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgdWludDY0
X3QgYmFzZV9iaXRzX21hc2sgPQorICAgICAgICAgICAgICAgIH4oKHN0YXRpY19jYXN0PHVpbnQ2
NF90PigxKSA8PCAoNjQgLSBiaXRfc2l6ZSkpIC0gMSk7CisgICAgICAgICAgICAgICAgYm9vbCBo
aWdoX2JpdHNfemVybyA9ICh0aGlzX3ZhbHVlICYgYmFzZV9iaXRzX21hc2spID09IDA7CisgICAg
ICAgICAgICAgICAgaWYgKGhpZ2hfYml0c196ZXJvKSB7CisgICAgICAgICAgICAgICAgICAgIHRo
aXNfdmFsdWUgKj0gYmFzZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICBkZWxheWVkX211bHRpcGxpY2lhdGlvbiA9IHRydWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbWFzayA+Pj0gMTsKKyAgICAgICAgfQorICAg
ICAgICBBc3NpZ25VSW50NjQodGhpc192YWx1ZSk7CisgICAgICAgIGlmIChkZWxheWVkX211bHRp
cGxpY2lhdGlvbikgeworICAgICAgICAgICAgTXVsdGlwbHlCeVVJbnQzMihiYXNlKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgLy8gTm93IGRvIHRoZSBzYW1lIHRoaW5nIGFzIGEgYmln
bnVtLgorICAgICAgICB3aGlsZSAobWFzayAhPSAwKSB7CisgICAgICAgICAgICBTcXVhcmUoKTsK
KyAgICAgICAgICAgIGlmICgocG93ZXJfZXhwb25lbnQgJiBtYXNrKSAhPSAwKSB7CisgICAgICAg
ICAgICAgICAgTXVsdGlwbHlCeVVJbnQzMihiYXNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIG1hc2sgPj49IDE7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEFuZCBmaW5h
bGx5IGFkZCB0aGUgc2F2ZWQgc2hpZnRzLgorICAgICAgICBTaGlmdExlZnQoc2hpZnRzICogcG93
ZXJfZXhwb25lbnQpOworICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBQcmVjb25kaXRpb246IHRo
aXMvb3RoZXIgPCAxNmJpdC4KKyAgICB1aW50MTZfdCBCaWdudW06OkRpdmlkZU1vZHVsb0ludEJp
Z251bShjb25zdCBCaWdudW0mIG90aGVyKSB7CisgICAgICAgIEFTU0VSVChJc0NsYW1wZWQoKSk7
CisgICAgICAgIEFTU0VSVChvdGhlci5Jc0NsYW1wZWQoKSk7CisgICAgICAgIEFTU0VSVChvdGhl
ci51c2VkX2RpZ2l0c18gPiAwKTsKKyAgICAgICAgCisgICAgICAgIC8vIEVhc3kgY2FzZTogaWYg
d2UgaGF2ZSBsZXNzIGRpZ2l0cyB0aGFuIHRoZSBkaXZpc29yIHRoYW4gdGhlIHJlc3VsdCBpcyAw
LgorICAgICAgICAvLyBOb3RlOiB0aGlzIGhhbmRsZXMgdGhlIGNhc2Ugd2hlcmUgdGhpcyA9PSAw
LCB0b28uCisgICAgICAgIGlmIChCaWdpdExlbmd0aCgpIDwgb3RoZXIuQmlnaXRMZW5ndGgoKSkg
eworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFs
aWduKG90aGVyKTsKKyAgICAgICAgCisgICAgICAgIHVpbnQxNl90IHJlc3VsdCA9IDA7CisgICAg
ICAgIAorICAgICAgICAvLyBTdGFydCBieSByZW1vdmluZyBtdWx0aXBsZXMgb2YgJ290aGVyJyB1
bnRpbCBib3RoIG51bWJlcnMgaGF2ZSB0aGUgc2FtZQorICAgICAgICAvLyBudW1iZXIgb2YgZGln
aXRzLgorICAgICAgICB3aGlsZSAoQmlnaXRMZW5ndGgoKSA+IG90aGVyLkJpZ2l0TGVuZ3RoKCkp
IHsKKyAgICAgICAgICAgIC8vIFRoaXMgbmFpdmUgYXBwcm9hY2ggaXMgZXh0cmVtZWx5IGluZWZm
aWNpZW50IGlmIHRoZSB0aGlzIGRpdmlkZWQgb3RoZXIKKyAgICAgICAgICAgIC8vIG1pZ2h0IGJl
IGJpZy4gVGhpcyBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCBmb3IgZG91YmxlVG9TdHJpbmcgd2hl
cmUKKyAgICAgICAgICAgIC8vIHRoZSByZXN1bHQgc2hvdWxkIGJlIHNtYWxsIChsZXNzIHRoYW4g
MTApLgorICAgICAgICAgICAgQVNTRVJUKG90aGVyLmJpZ2l0c19bb3RoZXIudXNlZF9kaWdpdHNf
IC0gMV0gPj0gKCgxIDw8IGtCaWdpdFNpemUpIC8gMTYpKTsKKyAgICAgICAgICAgIC8vIFJlbW92
ZSB0aGUgbXVsdGlwbGVzIG9mIHRoZSBmaXJzdCBkaWdpdC4KKyAgICAgICAgICAgIC8vIEV4YW1w
bGUgdGhpcyA9IDIzIGFuZCBvdGhlciBlcXVhbHMgOS4gLT4gUmVtb3ZlIDIgbXVsdGlwbGVzLgor
ICAgICAgICAgICAgcmVzdWx0ICs9IGJpZ2l0c19bdXNlZF9kaWdpdHNfIC0gMV07CisgICAgICAg
ICAgICBTdWJ0cmFjdFRpbWVzKG90aGVyLCBiaWdpdHNfW3VzZWRfZGlnaXRzXyAtIDFdKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJUKEJpZ2l0TGVuZ3RoKCkgPT0gb3RoZXIu
QmlnaXRMZW5ndGgoKSk7CisgICAgICAgIAorICAgICAgICAvLyBCb3RoIGJpZ251bXMgYXJlIGF0
IHRoZSBzYW1lIGxlbmd0aCBub3cuCisgICAgICAgIC8vIFNpbmNlIG90aGVyIGhhcyBtb3JlIHRo
YW4gMCBkaWdpdHMgd2Uga25vdyB0aGF0IHRoZSBhY2Nlc3MgdG8KKyAgICAgICAgLy8gYmlnaXRz
X1t1c2VkX2RpZ2l0c18gLSAxXSBpcyBzYWZlLgorICAgICAgICBDaHVuayB0aGlzX2JpZ2l0ID0g
YmlnaXRzX1t1c2VkX2RpZ2l0c18gLSAxXTsKKyAgICAgICAgQ2h1bmsgb3RoZXJfYmlnaXQgPSBv
dGhlci5iaWdpdHNfW290aGVyLnVzZWRfZGlnaXRzXyAtIDFdOworICAgICAgICAKKyAgICAgICAg
aWYgKG90aGVyLnVzZWRfZGlnaXRzXyA9PSAxKSB7CisgICAgICAgICAgICAvLyBTaG9ydGN1dCBm
b3IgZWFzeSAoYW5kIGNvbW1vbikgY2FzZS4KKyAgICAgICAgICAgIGludCBxdW90aWVudCA9IHRo
aXNfYmlnaXQgLyBvdGhlcl9iaWdpdDsKKyAgICAgICAgICAgIGJpZ2l0c19bdXNlZF9kaWdpdHNf
IC0gMV0gPSB0aGlzX2JpZ2l0IC0gb3RoZXJfYmlnaXQgKiBxdW90aWVudDsKKyAgICAgICAgICAg
IHJlc3VsdCArPSBxdW90aWVudDsKKyAgICAgICAgICAgIENsYW1wKCk7CisgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpbnQgZGl2aXNpb25f
ZXN0aW1hdGUgPSB0aGlzX2JpZ2l0IC8gKG90aGVyX2JpZ2l0ICsgMSk7CisgICAgICAgIHJlc3Vs
dCArPSBkaXZpc2lvbl9lc3RpbWF0ZTsKKyAgICAgICAgU3VidHJhY3RUaW1lcyhvdGhlciwgZGl2
aXNpb25fZXN0aW1hdGUpOworICAgICAgICAKKyAgICAgICAgaWYgKG90aGVyX2JpZ2l0ICogKGRp
dmlzaW9uX2VzdGltYXRlICsgMSkgPiB0aGlzX2JpZ2l0KSB7CisgICAgICAgICAgICAvLyBObyBu
ZWVkIHRvIGV2ZW4gdHJ5IHRvIHN1YnRyYWN0LiBFdmVuIGlmIG90aGVyJ3MgcmVtYWluaW5nIGRp
Z2l0cyB3ZXJlIDAKKyAgICAgICAgICAgIC8vIGFub3RoZXIgc3VidHJhY3Rpb24gd291bGQgYmUg
dG9vIG11Y2guCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICB3aGlsZSAoTGVzc0VxdWFsKG90aGVyLCAqdGhpcykpIHsKKyAgICAgICAgICAg
IFN1YnRyYWN0QmlnbnVtKG90aGVyKTsKKyAgICAgICAgICAgIHJlc3VsdCsrOworICAgICAgICB9
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFM+CisgICAgc3RhdGljIGludCBTaXplSW5IZXhDaGFycyhTIG51bWJlcikgewor
ICAgICAgICBBU1NFUlQobnVtYmVyID4gMCk7CisgICAgICAgIGludCByZXN1bHQgPSAwOworICAg
ICAgICB3aGlsZSAobnVtYmVyICE9IDApIHsKKyAgICAgICAgICAgIG51bWJlciA+Pj0gNDsKKyAg
ICAgICAgICAgIHJlc3VsdCsrOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorICAgIAorICAgIAorICAgIHN0YXRpYyBjaGFyIEhleENoYXJPZlZhbHVlKGludCB2YWx1
ZSkgeworICAgICAgICBBU1NFUlQoMCA8PSB2YWx1ZSAmJiB2YWx1ZSA8PSAxNik7CisgICAgICAg
IGlmICh2YWx1ZSA8IDEwKSByZXR1cm4gdmFsdWUgKyAnMCc7CisgICAgICAgIHJldHVybiB2YWx1
ZSAtIDEwICsgJ0EnOworICAgIH0KKyAgICAKKyAgICAKKyAgICBib29sIEJpZ251bTo6VG9IZXhT
dHJpbmcoY2hhciogYnVmZmVyLCBpbnQgYnVmZmVyX3NpemUpIGNvbnN0IHsKKyAgICAgICAgQVNT
RVJUKElzQ2xhbXBlZCgpKTsKKyAgICAgICAgLy8gRWFjaCBiaWdpdCBtdXN0IGJlIHByaW50YWJs
ZSBhcyBzZXBhcmF0ZSBoZXgtY2hhcmFjdGVyLgorICAgICAgICBBU1NFUlQoa0JpZ2l0U2l6ZSAl
IDQgPT0gMCk7CisgICAgICAgIGNvbnN0IGludCBrSGV4Q2hhcnNQZXJCaWdpdCA9IGtCaWdpdFNp
emUgLyA0OworICAgICAgICAKKyAgICAgICAgaWYgKHVzZWRfZGlnaXRzXyA9PSAwKSB7CisgICAg
ICAgICAgICBpZiAoYnVmZmVyX3NpemUgPCAyKSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBi
dWZmZXJbMF0gPSAnMCc7CisgICAgICAgICAgICBidWZmZXJbMV0gPSAnXDAnOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gV2UgYWRkIDEgZm9yIHRoZSB0
ZXJtaW5hdGluZyAnXDAnIGNoYXJhY3Rlci4KKyAgICAgICAgaW50IG5lZWRlZF9jaGFycyA9IChC
aWdpdExlbmd0aCgpIC0gMSkgKiBrSGV4Q2hhcnNQZXJCaWdpdCArCisgICAgICAgIFNpemVJbkhl
eENoYXJzKGJpZ2l0c19bdXNlZF9kaWdpdHNfIC0gMV0pICsgMTsKKyAgICAgICAgaWYgKG5lZWRl
ZF9jaGFycyA+IGJ1ZmZlcl9zaXplKSByZXR1cm4gZmFsc2U7CisgICAgICAgIGludCBzdHJpbmdf
aW5kZXggPSBuZWVkZWRfY2hhcnMgLSAxOworICAgICAgICBidWZmZXJbc3RyaW5nX2luZGV4LS1d
ID0gJ1wwJzsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHBvbmVudF87ICsraSkgewor
ICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBrSGV4Q2hhcnNQZXJCaWdpdDsgKytqKSB7
CisgICAgICAgICAgICAgICAgYnVmZmVyW3N0cmluZ19pbmRleC0tXSA9ICcwJzsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHVzZWRfZGlnaXRz
XyAtIDE7ICsraSkgeworICAgICAgICAgICAgQ2h1bmsgY3VycmVudF9iaWdpdCA9IGJpZ2l0c19b
aV07CisgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGtIZXhDaGFyc1BlckJpZ2l0OyAr
K2opIHsKKyAgICAgICAgICAgICAgICBidWZmZXJbc3RyaW5nX2luZGV4LS1dID0gSGV4Q2hhck9m
VmFsdWUoY3VycmVudF9iaWdpdCAmIDB4Rik7CisgICAgICAgICAgICAgICAgY3VycmVudF9iaWdp
dCA+Pj0gNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBBbmQgZmluYWxs
eSB0aGUgbGFzdCBiaWdpdC4KKyAgICAgICAgQ2h1bmsgbW9zdF9zaWduaWZpY2FudF9iaWdpdCA9
IGJpZ2l0c19bdXNlZF9kaWdpdHNfIC0gMV07CisgICAgICAgIHdoaWxlIChtb3N0X3NpZ25pZmlj
YW50X2JpZ2l0ICE9IDApIHsKKyAgICAgICAgICAgIGJ1ZmZlcltzdHJpbmdfaW5kZXgtLV0gPSBI
ZXhDaGFyT2ZWYWx1ZShtb3N0X3NpZ25pZmljYW50X2JpZ2l0ICYgMHhGKTsKKyAgICAgICAgICAg
IG1vc3Rfc2lnbmlmaWNhbnRfYmlnaXQgPj49IDQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIAorICAgIAorICAgIEJpZ251bTo6Q2h1bmsgQmlnbnVtOjpCaWdp
dEF0KGludCBpbmRleCkgY29uc3QgeworICAgICAgICBpZiAoaW5kZXggPj0gQmlnaXRMZW5ndGgo
KSkgcmV0dXJuIDA7CisgICAgICAgIGlmIChpbmRleCA8IGV4cG9uZW50XykgcmV0dXJuIDA7Cisg
ICAgICAgIHJldHVybiBiaWdpdHNfW2luZGV4IC0gZXhwb25lbnRfXTsKKyAgICB9CisgICAgCisg
ICAgCisgICAgaW50IEJpZ251bTo6Q29tcGFyZShjb25zdCBCaWdudW0mIGEsIGNvbnN0IEJpZ251
bSYgYikgeworICAgICAgICBBU1NFUlQoYS5Jc0NsYW1wZWQoKSk7CisgICAgICAgIEFTU0VSVChi
LklzQ2xhbXBlZCgpKTsKKyAgICAgICAgaW50IGJpZ2l0X2xlbmd0aF9hID0gYS5CaWdpdExlbmd0
aCgpOworICAgICAgICBpbnQgYmlnaXRfbGVuZ3RoX2IgPSBiLkJpZ2l0TGVuZ3RoKCk7CisgICAg
ICAgIGlmIChiaWdpdF9sZW5ndGhfYSA8IGJpZ2l0X2xlbmd0aF9iKSByZXR1cm4gLTE7CisgICAg
ICAgIGlmIChiaWdpdF9sZW5ndGhfYSA+IGJpZ2l0X2xlbmd0aF9iKSByZXR1cm4gKzE7CisgICAg
ICAgIGZvciAoaW50IGkgPSBiaWdpdF9sZW5ndGhfYSAtIDE7IGkgPj0gTWluKGEuZXhwb25lbnRf
LCBiLmV4cG9uZW50Xyk7IC0taSkgeworICAgICAgICAgICAgQ2h1bmsgYmlnaXRfYSA9IGEuQmln
aXRBdChpKTsKKyAgICAgICAgICAgIENodW5rIGJpZ2l0X2IgPSBiLkJpZ2l0QXQoaSk7CisgICAg
ICAgICAgICBpZiAoYmlnaXRfYSA8IGJpZ2l0X2IpIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlm
IChiaWdpdF9hID4gYmlnaXRfYikgcmV0dXJuICsxOworICAgICAgICAgICAgLy8gT3RoZXJ3aXNl
IHRoZXkgYXJlIGVxdWFsIHVwIHRvIHRoaXMgZGlnaXQuIFRyeSB0aGUgbmV4dCBkaWdpdC4KKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgCisgICAgaW50IEJp
Z251bTo6UGx1c0NvbXBhcmUoY29uc3QgQmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIsIGNvbnN0
IEJpZ251bSYgYykgeworICAgICAgICBBU1NFUlQoYS5Jc0NsYW1wZWQoKSk7CisgICAgICAgIEFT
U0VSVChiLklzQ2xhbXBlZCgpKTsKKyAgICAgICAgQVNTRVJUKGMuSXNDbGFtcGVkKCkpOworICAg
ICAgICBpZiAoYS5CaWdpdExlbmd0aCgpIDwgYi5CaWdpdExlbmd0aCgpKSB7CisgICAgICAgICAg
ICByZXR1cm4gUGx1c0NvbXBhcmUoYiwgYSwgYyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGEu
QmlnaXRMZW5ndGgoKSArIDEgPCBjLkJpZ2l0TGVuZ3RoKCkpIHJldHVybiAtMTsKKyAgICAgICAg
aWYgKGEuQmlnaXRMZW5ndGgoKSA+IGMuQmlnaXRMZW5ndGgoKSkgcmV0dXJuICsxOworICAgICAg
ICAvLyBUaGUgZXhwb25lbnQgZW5jb2RlcyAwLWJpZ2l0cy4gU28gaWYgdGhlcmUgYXJlIG1vcmUg
MC1kaWdpdHMgaW4gJ2EnIHRoYW4KKyAgICAgICAgLy8gJ2InIGhhcyBkaWdpdHMsIHRoZW4gdGhl
IGJpZ2l0LWxlbmd0aCBvZiAnYScrJ2InIG11c3QgYmUgZXF1YWwgdG8gdGhlIG9uZQorICAgICAg
ICAvLyBvZiAnYScuCisgICAgICAgIGlmIChhLmV4cG9uZW50XyA+PSBiLkJpZ2l0TGVuZ3RoKCkg
JiYgYS5CaWdpdExlbmd0aCgpIDwgYy5CaWdpdExlbmd0aCgpKSB7CisgICAgICAgICAgICByZXR1
cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIENodW5rIGJvcnJvdyA9IDA7Cisg
ICAgICAgIC8vIFN0YXJ0aW5nIGF0IG1pbl9leHBvbmVudCBhbGwgZGlnaXRzIGFyZSA9PSAwLiBT
byBubyBuZWVkIHRvIGNvbXBhcmUgdGhlbS4KKyAgICAgICAgaW50IG1pbl9leHBvbmVudCA9IE1p
bihNaW4oYS5leHBvbmVudF8sIGIuZXhwb25lbnRfKSwgYy5leHBvbmVudF8pOworICAgICAgICBm
b3IgKGludCBpID0gYy5CaWdpdExlbmd0aCgpIC0gMTsgaSA+PSBtaW5fZXhwb25lbnQ7IC0taSkg
eworICAgICAgICAgICAgQ2h1bmsgY2h1bmtfYSA9IGEuQmlnaXRBdChpKTsKKyAgICAgICAgICAg
IENodW5rIGNodW5rX2IgPSBiLkJpZ2l0QXQoaSk7CisgICAgICAgICAgICBDaHVuayBjaHVua19j
ID0gYy5CaWdpdEF0KGkpOworICAgICAgICAgICAgQ2h1bmsgc3VtID0gY2h1bmtfYSArIGNodW5r
X2I7CisgICAgICAgICAgICBpZiAoc3VtID4gY2h1bmtfYyArIGJvcnJvdykgeworICAgICAgICAg
ICAgICAgIHJldHVybiArMTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
Ym9ycm93ID0gY2h1bmtfYyArIGJvcnJvdyAtIHN1bTsKKyAgICAgICAgICAgICAgICBpZiAoYm9y
cm93ID4gMSkgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIGJvcnJvdyA8PD0ga0JpZ2l0U2l6
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoYm9ycm93ID09IDApIHJl
dHVybiAwOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQg
QmlnbnVtOjpDbGFtcCgpIHsKKyAgICAgICAgd2hpbGUgKHVzZWRfZGlnaXRzXyA+IDAgJiYgYmln
aXRzX1t1c2VkX2RpZ2l0c18gLSAxXSA9PSAwKSB7CisgICAgICAgICAgICB1c2VkX2RpZ2l0c18t
LTsKKyAgICAgICAgfQorICAgICAgICBpZiAodXNlZF9kaWdpdHNfID09IDApIHsKKyAgICAgICAg
ICAgIC8vIFplcm8uCisgICAgICAgICAgICBleHBvbmVudF8gPSAwOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIAorICAgIGJvb2wgQmlnbnVtOjpJc0NsYW1wZWQoKSBjb25zdCB7CisgICAg
ICAgIHJldHVybiB1c2VkX2RpZ2l0c18gPT0gMCB8fCBiaWdpdHNfW3VzZWRfZGlnaXRzXyAtIDFd
ICE9IDA7CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpaZXJvKCkgeworICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IHVzZWRfZGlnaXRzXzsgKytpKSB7CisgICAgICAgICAg
ICBiaWdpdHNfW2ldID0gMDsKKyAgICAgICAgfQorICAgICAgICB1c2VkX2RpZ2l0c18gPSAwOwor
ICAgICAgICBleHBvbmVudF8gPSAwOworICAgIH0KKyAgICAKKyAgICAKKyAgICB2b2lkIEJpZ251
bTo6QWxpZ24oY29uc3QgQmlnbnVtJiBvdGhlcikgeworICAgICAgICBpZiAoZXhwb25lbnRfID4g
b3RoZXIuZXhwb25lbnRfKSB7CisgICAgICAgICAgICAvLyBJZiAiWCIgcmVwcmVzZW50cyBhICJo
aWRkZW4iIGRpZ2l0IChieSB0aGUgZXhwb25lbnQpIHRoZW4gd2UgYXJlIGluIHRoZQorICAgICAg
ICAgICAgLy8gZm9sbG93aW5nIGNhc2UgKGEgPT0gdGhpcywgYiA9PSBvdGhlcik6CisgICAgICAg
ICAgICAvLyBhOiAgYWFhYWFhWFhYWCAgIG9yIGE6ICAgYWFhYWFYWFgKKyAgICAgICAgICAgIC8v
IGI6ICAgICBiYmJiYmJYICAgICAgYjogYmJiYmJiYmJYWAorICAgICAgICAgICAgLy8gV2UgcmVw
bGFjZSBzb21lIG9mIHRoZSBoaWRkZW4gZGlnaXRzIChYKSBvZiBhIHdpdGggMCBkaWdpdHMuCisg
ICAgICAgICAgICAvLyBhOiAgYWFhYWFhMDAwWCAgIG9yIGE6ICAgYWFhYWEwWFgKKyAgICAgICAg
ICAgIGludCB6ZXJvX2RpZ2l0cyA9IGV4cG9uZW50XyAtIG90aGVyLmV4cG9uZW50XzsKKyAgICAg
ICAgICAgIEVuc3VyZUNhcGFjaXR5KHVzZWRfZGlnaXRzXyArIHplcm9fZGlnaXRzKTsKKyAgICAg
ICAgICAgIGZvciAoaW50IGkgPSB1c2VkX2RpZ2l0c18gLSAxOyBpID49IDA7IC0taSkgeworICAg
ICAgICAgICAgICAgIGJpZ2l0c19baSArIHplcm9fZGlnaXRzXSA9IGJpZ2l0c19baV07CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHplcm9fZGlnaXRzOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICBiaWdpdHNfW2ldID0gMDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHVzZWRfZGlnaXRzXyArPSB6ZXJvX2RpZ2l0czsKKyAgICAgICAgICAgIGV4cG9u
ZW50XyAtPSB6ZXJvX2RpZ2l0czsKKyAgICAgICAgICAgIEFTU0VSVCh1c2VkX2RpZ2l0c18gPj0g
MCk7CisgICAgICAgICAgICBBU1NFUlQoZXhwb25lbnRfID49IDApOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpCaWdpdHNTaGlmdExlZnQoaW50IHNoaWZ0
X2Ftb3VudCkgeworICAgICAgICBBU1NFUlQoc2hpZnRfYW1vdW50IDwga0JpZ2l0U2l6ZSk7Cisg
ICAgICAgIEFTU0VSVChzaGlmdF9hbW91bnQgPj0gMCk7CisgICAgICAgIENodW5rIGNhcnJ5ID0g
MDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1c2VkX2RpZ2l0c187ICsraSkgeworICAg
ICAgICAgICAgQ2h1bmsgbmV3X2NhcnJ5ID0gYmlnaXRzX1tpXSA+PiAoa0JpZ2l0U2l6ZSAtIHNo
aWZ0X2Ftb3VudCk7CisgICAgICAgICAgICBiaWdpdHNfW2ldID0gKChiaWdpdHNfW2ldIDw8IHNo
aWZ0X2Ftb3VudCkgKyBjYXJyeSkgJiBrQmlnaXRNYXNrOworICAgICAgICAgICAgY2FycnkgPSBu
ZXdfY2Fycnk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNhcnJ5ICE9IDApIHsKKyAgICAgICAg
ICAgIGJpZ2l0c19bdXNlZF9kaWdpdHNfXSA9IGNhcnJ5OworICAgICAgICAgICAgdXNlZF9kaWdp
dHNfKys7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06OlN1
YnRyYWN0VGltZXMoY29uc3QgQmlnbnVtJiBvdGhlciwgaW50IGZhY3RvcikgeworICAgICAgICBB
U1NFUlQoZXhwb25lbnRfIDw9IG90aGVyLmV4cG9uZW50Xyk7CisgICAgICAgIGlmIChmYWN0b3Ig
PCAzKSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZhY3RvcjsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgU3VidHJhY3RCaWdudW0ob3RoZXIpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIENodW5rIGJvcnJvdyA9IDA7Cisg
ICAgICAgIGludCBleHBvbmVudF9kaWZmID0gb3RoZXIuZXhwb25lbnRfIC0gZXhwb25lbnRfOwor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG90aGVyLnVzZWRfZGlnaXRzXzsgKytpKSB7Cisg
ICAgICAgICAgICBEb3VibGVDaHVuayBwcm9kdWN0ID0gc3RhdGljX2Nhc3Q8RG91YmxlQ2h1bms+
KGZhY3RvcikgKiBvdGhlci5iaWdpdHNfW2ldOworICAgICAgICAgICAgRG91YmxlQ2h1bmsgcmVt
b3ZlID0gYm9ycm93ICsgcHJvZHVjdDsKKyAgICAgICAgICAgIENodW5rIGRpZmZlcmVuY2UgPSBi
aWdpdHNfW2kgKyBleHBvbmVudF9kaWZmXSAtIChyZW1vdmUgJiBrQmlnaXRNYXNrKTsKKyAgICAg
ICAgICAgIGJpZ2l0c19baSArIGV4cG9uZW50X2RpZmZdID0gZGlmZmVyZW5jZSAmIGtCaWdpdE1h
c2s7CisgICAgICAgICAgICBib3Jyb3cgPSBzdGF0aWNfY2FzdDxDaHVuaz4oKGRpZmZlcmVuY2Ug
Pj4gKGtDaHVua1NpemUgLSAxKSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChyZW1vdmUgPj4ga0JpZ2l0U2l6ZSkpOworICAgICAgICB9CisgICAgICAgIGZvciAo
aW50IGkgPSBvdGhlci51c2VkX2RpZ2l0c18gKyBleHBvbmVudF9kaWZmOyBpIDwgdXNlZF9kaWdp
dHNfOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChib3Jyb3cgPT0gMCkgcmV0dXJuOworICAgICAg
ICAgICAgQ2h1bmsgZGlmZmVyZW5jZSA9IGJpZ2l0c19baV0gLSBib3Jyb3c7CisgICAgICAgICAg
ICBiaWdpdHNfW2ldID0gZGlmZmVyZW5jZSAmIGtCaWdpdE1hc2s7CisgICAgICAgICAgICBib3Jy
b3cgPSBkaWZmZXJlbmNlID4+IChrQ2h1bmtTaXplIC0gMSk7CisgICAgICAgICAgICArK2k7Cisg
ICAgICAgIH0KKyAgICAgICAgQ2xhbXAoKTsKKyAgICB9CisgICAgCisgICAgCit9ICAvLyBuYW1l
c3BhY2UgZG91YmxlX2NvbnZlcnNpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvZHRvYS9iaWdudW0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9iaWdu
dW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi44NTY0MjEwYjJmODY0ODVhNmQyNmI5YTY5YjdlMTVjZTU3ZmFkMDMw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251
bS5oCkBAIC0wLDAgKzEsMTQxIEBACisvLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJvamVjdCBh
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
Ky8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZm5k
ZWYgRE9VQkxFX0NPTlZFUlNJT05fQklHTlVNX0hfCisjZGVmaW5lIERPVUJMRV9DT05WRVJTSU9O
X0JJR05VTV9IXworCisjaW5jbHVkZSAidXRpbHMuaCIKKworbmFtZXNwYWNlIGRvdWJsZV9jb252
ZXJzaW9uIHsKKyAgICAKKyAgICBjbGFzcyBCaWdudW0geworICAgIHB1YmxpYzoKKyAgICAgICAg
Ly8gMzU4NCA9IDEyOCAqIDI4LiBXZSBjYW4gcmVwcmVzZW50IDJeMzU4NCA+IDEwXjEwMDAgYWNj
dXJhdGVseS4KKyAgICAgICAgLy8gVGhpcyBiaWdudW0gY2FuIGVuY29kZSBtdWNoIGJpZ2dlciBu
dW1iZXJzLCBzaW5jZSBpdCBjb250YWlucyBhbgorICAgICAgICAvLyBleHBvbmVudC4KKyAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBrTWF4U2lnbmlmaWNhbnRCaXRzID0gMzU4NDsKKyAgICAgICAg
CisgICAgICAgIEJpZ251bSgpOworICAgICAgICB2b2lkIEFzc2lnblVJbnQxNih1aW50MTZfdCB2
YWx1ZSk7CisgICAgICAgIHZvaWQgQXNzaWduVUludDY0KHVpbnQ2NF90IHZhbHVlKTsKKyAgICAg
ICAgdm9pZCBBc3NpZ25CaWdudW0oY29uc3QgQmlnbnVtJiBvdGhlcik7CisgICAgICAgIAorICAg
ICAgICB2b2lkIEFzc2lnbkRlY2ltYWxTdHJpbmcoVmVjdG9yPGNvbnN0IGNoYXI+IHZhbHVlKTsK
KyAgICAgICAgdm9pZCBBc3NpZ25IZXhTdHJpbmcoVmVjdG9yPGNvbnN0IGNoYXI+IHZhbHVlKTsK
KyAgICAgICAgCisgICAgICAgIHZvaWQgQXNzaWduUG93ZXJVSW50MTYodWludDE2X3QgYmFzZSwg
aW50IGV4cG9uZW50KTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgQWRkVUludDE2KHVpbnQxNl90
IG9wZXJhbmQpOworICAgICAgICB2b2lkIEFkZFVJbnQ2NCh1aW50NjRfdCBvcGVyYW5kKTsKKyAg
ICAgICAgdm9pZCBBZGRCaWdudW0oY29uc3QgQmlnbnVtJiBvdGhlcik7CisgICAgICAgIC8vIFBy
ZWNvbmRpdGlvbjogdGhpcyA+PSBvdGhlci4KKyAgICAgICAgdm9pZCBTdWJ0cmFjdEJpZ251bShj
b25zdCBCaWdudW0mIG90aGVyKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgU3F1YXJlKCk7Cisg
ICAgICAgIHZvaWQgU2hpZnRMZWZ0KGludCBzaGlmdF9hbW91bnQpOworICAgICAgICB2b2lkIE11
bHRpcGx5QnlVSW50MzIodWludDMyX3QgZmFjdG9yKTsKKyAgICAgICAgdm9pZCBNdWx0aXBseUJ5
VUludDY0KHVpbnQ2NF90IGZhY3Rvcik7CisgICAgICAgIHZvaWQgTXVsdGlwbHlCeVBvd2VyT2ZU
ZW4oaW50IGV4cG9uZW50KTsKKyAgICAgICAgdm9pZCBUaW1lczEwKCkgeyByZXR1cm4gTXVsdGlw
bHlCeVVJbnQzMigxMCk7IH0KKyAgICAgICAgLy8gUHNldWRvY29kZToKKyAgICAgICAgLy8gIGlu
dCByZXN1bHQgPSB0aGlzIC8gb3RoZXI7CisgICAgICAgIC8vICB0aGlzID0gdGhpcyAlIG90aGVy
OworICAgICAgICAvLyBJbiB0aGUgd29yc3QgY2FzZSB0aGlzIGZ1bmN0aW9uIGlzIGluIE8odGhp
cy9vdGhlcikuCisgICAgICAgIHVpbnQxNl90IERpdmlkZU1vZHVsb0ludEJpZ251bShjb25zdCBC
aWdudW0mIG90aGVyKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgVG9IZXhTdHJpbmcoY2hhciog
YnVmZmVyLCBpbnQgYnVmZmVyX3NpemUpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgc3RhdGlj
IGludCBDb21wYXJlKGNvbnN0IEJpZ251bSYgYSwgY29uc3QgQmlnbnVtJiBiKTsKKyAgICAgICAg
c3RhdGljIGJvb2wgRXF1YWwoY29uc3QgQmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIpIHsKKyAg
ICAgICAgICAgIHJldHVybiBDb21wYXJlKGEsIGIpID09IDA7CisgICAgICAgIH0KKyAgICAgICAg
c3RhdGljIGJvb2wgTGVzc0VxdWFsKGNvbnN0IEJpZ251bSYgYSwgY29uc3QgQmlnbnVtJiBiKSB7
CisgICAgICAgICAgICByZXR1cm4gQ29tcGFyZShhLCBiKSA8PSAwOworICAgICAgICB9CisgICAg
ICAgIHN0YXRpYyBib29sIExlc3MoY29uc3QgQmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIpIHsK
KyAgICAgICAgICAgIHJldHVybiBDb21wYXJlKGEsIGIpIDwgMDsKKyAgICAgICAgfQorICAgICAg
ICAvLyBSZXR1cm5zIENvbXBhcmUoYSArIGIsIGMpOworICAgICAgICBzdGF0aWMgaW50IFBsdXND
b21wYXJlKGNvbnN0IEJpZ251bSYgYSwgY29uc3QgQmlnbnVtJiBiLCBjb25zdCBCaWdudW0mIGMp
OworICAgICAgICAvLyBSZXR1cm5zIGEgKyBiID09IGMKKyAgICAgICAgc3RhdGljIGJvb2wgUGx1
c0VxdWFsKGNvbnN0IEJpZ251bSYgYSwgY29uc3QgQmlnbnVtJiBiLCBjb25zdCBCaWdudW0mIGMp
IHsKKyAgICAgICAgICAgIHJldHVybiBQbHVzQ29tcGFyZShhLCBiLCBjKSA9PSAwOworICAgICAg
ICB9CisgICAgICAgIC8vIFJldHVybnMgYSArIGIgPD0gYworICAgICAgICBzdGF0aWMgYm9vbCBQ
bHVzTGVzc0VxdWFsKGNvbnN0IEJpZ251bSYgYSwgY29uc3QgQmlnbnVtJiBiLCBjb25zdCBCaWdu
dW0mIGMpIHsKKyAgICAgICAgICAgIHJldHVybiBQbHVzQ29tcGFyZShhLCBiLCBjKSA8PSAwOwor
ICAgICAgICB9CisgICAgICAgIC8vIFJldHVybnMgYSArIGIgPCBjCisgICAgICAgIHN0YXRpYyBi
b29sIFBsdXNMZXNzKGNvbnN0IEJpZ251bSYgYSwgY29uc3QgQmlnbnVtJiBiLCBjb25zdCBCaWdu
dW0mIGMpIHsKKyAgICAgICAgICAgIHJldHVybiBQbHVzQ29tcGFyZShhLCBiLCBjKSA8IDA7Cisg
ICAgICAgIH0KKyAgICBwcml2YXRlOgorICAgICAgICB0eXBlZGVmIHVpbnQzMl90IENodW5rOwor
ICAgICAgICB0eXBlZGVmIHVpbnQ2NF90IERvdWJsZUNodW5rOworICAgICAgICAKKyAgICAgICAg
c3RhdGljIGNvbnN0IGludCBrQ2h1bmtTaXplID0gc2l6ZW9mKENodW5rKSAqIDg7CisgICAgICAg
IHN0YXRpYyBjb25zdCBpbnQga0RvdWJsZUNodW5rU2l6ZSA9IHNpemVvZihEb3VibGVDaHVuaykg
KiA4OworICAgICAgICAvLyBXaXRoIGJpZ2l0IHNpemUgb2YgMjggd2UgbG9vc2Ugc29tZSBiaXRz
LCBidXQgYSBkb3VibGUgc3RpbGwgZml0cyBlYXNpbHkKKyAgICAgICAgLy8gaW50byB0d28gY2h1
bmtzLCBhbmQgbW9yZSBpbXBvcnRhbnRseSB3ZSBjYW4gdXNlIHRoZSBDb21iYSBtdWx0aXBsaWNh
dGlvbi4KKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBrQmlnaXRTaXplID0gMjg7CisgICAgICAg
IHN0YXRpYyBjb25zdCBDaHVuayBrQmlnaXRNYXNrID0gKDEgPDwga0JpZ2l0U2l6ZSkgLSAxOwor
ICAgICAgICAvLyBFdmVyeSBpbnN0YW5jZSBhbGxvY2F0ZXMga0JpZ2l0TGVuZ3RoIGNodW5rcyBv
biB0aGUgc3RhY2suIEJpZ251bXMgY2Fubm90CisgICAgICAgIC8vIGdyb3cuIFRoZXJlIGFyZSBu
byBjaGVja3MgaWYgdGhlIHN0YWNrLWFsbG9jYXRlZCBzcGFjZSBpcyBzdWZmaWNpZW50LgorICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IGtCaWdpdENhcGFjaXR5ID0ga01heFNpZ25pZmljYW50Qml0
cyAvIGtCaWdpdFNpemU7CisgICAgICAgIAorICAgICAgICB2b2lkIEVuc3VyZUNhcGFjaXR5KGlu
dCBzaXplKSB7CisgICAgICAgICAgICBpZiAoc2l6ZSA+IGtCaWdpdENhcGFjaXR5KSB7CisgICAg
ICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICB2b2lkIEFsaWduKGNvbnN0IEJpZ251bSYgb3RoZXIpOworICAgICAgICB2b2lkIENsYW1w
KCk7CisgICAgICAgIGJvb2wgSXNDbGFtcGVkKCkgY29uc3Q7CisgICAgICAgIHZvaWQgWmVybygp
OworICAgICAgICAvLyBSZXF1aXJlcyB0aGlzIHRvIGhhdmUgZW5vdWdoIGNhcGFjaXR5IChubyB0
ZXN0cyBkb25lKS4KKyAgICAgICAgLy8gVXBkYXRlcyB1c2VkX2RpZ2l0c18gaWYgbmVjZXNzYXJ5
LgorICAgICAgICAvLyBzaGlmdF9hbW91bnQgbXVzdCBiZSA8IGtCaWdpdFNpemUuCisgICAgICAg
IHZvaWQgQmlnaXRzU2hpZnRMZWZ0KGludCBzaGlmdF9hbW91bnQpOworICAgICAgICAvLyBCaWdp
dExlbmd0aCBpbmNsdWRlcyB0aGUgImhpZGRlbiIgZGlnaXRzIGVuY29kZWQgaW4gdGhlIGV4cG9u
ZW50LgorICAgICAgICBpbnQgQmlnaXRMZW5ndGgoKSBjb25zdCB7IHJldHVybiB1c2VkX2RpZ2l0
c18gKyBleHBvbmVudF87IH0KKyAgICAgICAgQ2h1bmsgQmlnaXRBdChpbnQgaW5kZXgpIGNvbnN0
OworICAgICAgICB2b2lkIFN1YnRyYWN0VGltZXMoY29uc3QgQmlnbnVtJiBvdGhlciwgaW50IGZh
Y3Rvcik7CisgICAgICAgIAorICAgICAgICBDaHVuayBiaWdpdHNfYnVmZmVyX1trQmlnaXRDYXBh
Y2l0eV07CisgICAgICAgIC8vIEEgdmVjdG9yIGJhY2tlZCBieSBiaWdpdHNfYnVmZmVyXy4gVGhp
cyB3YXkgYWNjZXNzZXMgdG8gdGhlIGFycmF5IGFyZQorICAgICAgICAvLyBjaGVja2VkIGZvciBv
dXQtb2YtYm91bmRzIGVycm9ycy4KKyAgICAgICAgVmVjdG9yPENodW5rPiBiaWdpdHNfOworICAg
ICAgICBpbnQgdXNlZF9kaWdpdHNfOworICAgICAgICAvLyBUaGUgQmlnbnVtJ3MgdmFsdWUgZXF1
YWxzIHZhbHVlKGJpZ2l0c18pICogMl4oZXhwb25lbnRfICoga0JpZ2l0U2l6ZSkuCisgICAgICAg
IGludCBleHBvbmVudF87CisgICAgICAgIAorICAgICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oQmlnbnVtKTsKKyAgICB9OworICAgIAorfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJz
aW9uCisKKyNlbmRpZiAgLy8gRE9VQkxFX0NPTlZFUlNJT05fQklHTlVNX0hfCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvY2FjaGVkLXBvd2Vycy5jYyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmNjCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNm
M2NiOGNjOGY0MzRlMThiZTNiNzA1NjYxY2NkNWNmNTQ5YjYyM2UKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvY2FjaGVkLXBvd2Vycy5jYwpAQCAtMCww
ICsxLDE4NSBAQAorLy8gQ29weXJpZ2h0IDIwMDYtMjAwOCB0aGUgVjggcHJvamVjdCBhdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisv
LyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAg
ICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
Ky8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
Ky8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpbmNsdWRlIDxz
dGRhcmcuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNs
dWRlICJVbnVzZWRQYXJhbS5oIgorI2luY2x1ZGUgInV0aWxzLmgiCisjaW5jbHVkZSAiY2FjaGVk
LXBvd2Vycy5oIgorCituYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIHN0
cnVjdCBDYWNoZWRQb3dlciB7CisgICAgICAgIHVpbnQ2NF90IHNpZ25pZmljYW5kOworICAgICAg
ICBpbnQxNl90IGJpbmFyeV9leHBvbmVudDsKKyAgICAgICAgaW50MTZfdCBkZWNpbWFsX2V4cG9u
ZW50OworICAgIH07CisgICAgCisgICAgc3RhdGljIGludCBrQ2FjaGVkUG93ZXJzTGVuZ3RoID0g
MTsKKyAgICBzdGF0aWMgaW50IGtDYWNoZWRQb3dlcnNPZmZzZXQgPSAxOworICAgIHN0YXRpYyBj
b25zdCBkb3VibGUga0RfMV9MT0cyXzEwID0gMC4zMDEwMjk5OTU2NjM5ODExNDsgIC8vICAxIC8g
bGcoMTApCisgICAgc3RhdGljIENhY2hlZFBvd2VyKiBrQ2FjaGVkUG93ZXJzID0gMDsKKyAgICAK
KyAgICBpbnQgUG93ZXJzT2ZUZW5DYWNoZTo6a0RlY2ltYWxFeHBvbmVudERpc3RhbmNlID0gMTsK
KyAgICBpbnQgUG93ZXJzT2ZUZW5DYWNoZTo6a01pbkRlY2ltYWxFeHBvbmVudCA9IDE7CisgICAg
aW50IFBvd2Vyc09mVGVuQ2FjaGU6OmtNYXhEZWNpbWFsRXhwb25lbnQgPSAxOworICAgIAorICAg
IHZvaWQgaW5pdGlhbGl6ZSgpIHsKKyAgICAgICAgc3RhdGljIENhY2hlZFBvd2VyIGNhY2hlZFBv
d2Vyc1tdID0geworICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZmE4ZmQ1YTAsIDA4MWMw
Mjg4KSwgLTEyMjAsIC0zNDh9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YmFhZWUx
N2YsIGEyM2ViZjc2KSwgLTExOTMsIC0zNDB9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9D
KDB4OGIxNmZiMjAsIDMwNTVhYzc2KSwgLTExNjYsIC0zMzJ9LAorICAgICAgICAgICAge1VJTlQ2
NF8yUEFSVF9DKDB4Y2Y0Mjg5NGEsIDVkY2UzNWVhKSwgLTExNDAsIC0zMjR9LAorICAgICAgICAg
ICAge1VJTlQ2NF8yUEFSVF9DKDB4OWE2YmIwYWEsIDU1NjUzYjJkKSwgLTExMTMsIC0zMTZ9LAor
ICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZTYxYWNmMDMsIDNkMWE0NWRmKSwgLTEwODcs
IC0zMDh9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YWI3MGZlMTcsIGM3OWFjNmNh
KSwgLTEwNjAsIC0zMDB9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZmY3N2IxZmMs
IGJlYmNkYzRmKSwgLTEwMzQsIC0yOTJ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4
YmU1NjkxZWYsIDQxNmJkNjBjKSwgLTEwMDcsIC0yODR9LAorICAgICAgICAgICAge1VJTlQ2NF8y
UEFSVF9DKDB4OGRkMDFmYWQsIDkwN2ZmYzNjKSwgLTk4MCwgLTI3Nn0sCisgICAgICAgICAgICB7
VUlOVDY0XzJQQVJUX0MoMHhkMzUxNWMyOCwgMzE1NTlhODMpLCAtOTU0LCAtMjY4fSwKKyAgICAg
ICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDlkNzFhYzhmLCBhZGE2YzliNSksIC05MjcsIC0yNjB9
LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZWE5YzIyNzcsIDIzZWU4YmNiKSwgLTkw
MSwgLTI1Mn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhhZWNjNDk5MSwgNDA3ODUz
NmQpLCAtODc0LCAtMjQ0fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDgyM2MxMjc5
LCA1ZGI2Y2U1NyksIC04NDcsIC0yMzZ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4
YzIxMDk0MzYsIDRkZmI1NjM3KSwgLTgyMSwgLTIyOH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQ
QVJUX0MoMHg5MDk2ZWE2ZiwgMzg0ODk4NGYpLCAtNzk0LCAtMjIwfSwKKyAgICAgICAgICAgIHtV
SU5UNjRfMlBBUlRfQygweGQ3NzQ4NWNiLCAyNTgyM2FjNyksIC03NjgsIC0yMTJ9LAorICAgICAg
ICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YTA4NmNmY2QsIDk3YmY5N2Y0KSwgLTc0MSwgLTIwNH0s
CisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhlZjM0MGE5OCwgMTcyYWFjZTUpLCAtNzE1
LCAtMTk2fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGIyMzg2N2ZiLCAyYTM1YjI4
ZSksIC02ODgsIC0xODh9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ODRjOGQ0ZGYs
IGQyYzYzZjNiKSwgLTY2MSwgLTE4MH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhj
NWRkNDQyNywgMWFkM2NkYmEpLCAtNjM1LCAtMTcyfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBB
UlRfQygweDkzNmI5ZmNlLCBiYjI1Yzk5NiksIC02MDgsIC0xNjR9LAorICAgICAgICAgICAge1VJ
TlQ2NF8yUEFSVF9DKDB4ZGJhYzZjMjQsIDdkNjJhNTg0KSwgLTU4MiwgLTE1Nn0sCisgICAgICAg
ICAgICB7VUlOVDY0XzJQQVJUX0MoMHhhM2FiNjY1OCwgMGQ1ZmRhZjYpLCAtNTU1LCAtMTQ4fSwK
KyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGYzZTJmODkzLCBkZWMzZjEyNiksIC01Mjks
IC0xNDB9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YjViNWFkYTgsIGFhZmY4MGI4
KSwgLTUwMiwgLTEzMn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg4NzYyNWYwNSwg
NmM3YzRhOGIpLCAtNDc1LCAtMTI0fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGM5
YmNmZjYwLCAzNGMxMzA1MyksIC00NDksIC0xMTZ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFS
VF9DKDB4OTY0ZTg1OGMsIDkxYmEyNjU1KSwgLTQyMiwgLTEwOH0sCisgICAgICAgICAgICB7VUlO
VDY0XzJQQVJUX0MoMHhkZmY5NzcyNCwgNzAyOTdlYmQpLCAtMzk2LCAtMTAwfSwKKyAgICAgICAg
ICAgIHtVSU5UNjRfMlBBUlRfQygweGE2ZGZiZDlmLCBiOGU1Yjg4ZiksIC0zNjksIC05Mn0sCisg
ICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhmOGE5NWZjZiwgODg3NDdkOTQpLCAtMzQzLCAt
ODR9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4Yjk0NDcwOTMsIDhmYTg5YmNmKSwg
LTMxNiwgLTc2fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDhhMDhmMGY4LCBiZjBm
MTU2YiksIC0yODksIC02OH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhjZGIwMjU1
NSwgNjUzMTMxYjYpLCAtMjYzLCAtNjB9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4
OTkzZmUyYzYsIGQwN2I3ZmFjKSwgLTIzNiwgLTUyfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBB
UlRfQygweGU0NWMxMGM0LCAyYTJiM2IwNiksIC0yMTAsIC00NH0sCisgICAgICAgICAgICB7VUlO
VDY0XzJQQVJUX0MoMHhhYTI0MjQ5OSwgNjk3MzkyZDMpLCAtMTgzLCAtMzZ9LAorICAgICAgICAg
ICAge1VJTlQ2NF8yUEFSVF9DKDB4ZmQ4N2I1ZjIsIDgzMDBjYTBlKSwgLTE1NywgLTI4fSwKKyAg
ICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGJjZTUwODY0LCA5MjExMWFlYiksIC0xMzAsIC0y
MH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg4Y2JjY2MwOSwgNmY1MDg4Y2MpLCAt
MTAzLCAtMTJ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZDFiNzE3NTgsIGUyMTk2
NTJjKSwgLTc3LCAtNH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg5YzQwMDAwMCwg
MDAwMDAwMDApLCAtNTAsIDR9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZThkNGE1
MTAsIDAwMDAwMDAwKSwgLTI0LCAxMn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhh
ZDc4ZWJjNSwgYWM2MjAwMDApLCAzLCAyMH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0Mo
MHg4MTNmMzk3OCwgZjg5NDA5ODQpLCAzMCwgMjh9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFS
VF9DKDB4YzA5N2NlN2IsIGM5MDcxNWIzKSwgNTYsIDM2fSwKKyAgICAgICAgICAgIHtVSU5UNjRf
MlBBUlRfQygweDhmN2UzMmNlLCA3YmVhNWM3MCksIDgzLCA0NH0sCisgICAgICAgICAgICB7VUlO
VDY0XzJQQVJUX0MoMHhkNWQyMzhhNCwgYWJlOTgwNjgpLCAxMDksIDUyfSwKKyAgICAgICAgICAg
IHtVSU5UNjRfMlBBUlRfQygweDlmNGYyNzI2LCAxNzlhMjI0NSksIDEzNiwgNjB9LAorICAgICAg
ICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZWQ2M2EyMzEsIGQ0YzRmYjI3KSwgMTYyLCA2OH0sCisg
ICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhiMGRlNjUzOCwgOGNjOGFkYTgpLCAxODksIDc2
fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDgzYzcwODhlLCAxYWFiNjVkYiksIDIx
NiwgODR9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YzQ1ZDFkZjksIDQyNzExZDlh
KSwgMjQyLCA5Mn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg5MjRkNjkyYywgYTYx
YmU3NTgpLCAyNjksIDEwMH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhkYTAxZWU2
NCwgMWE3MDhkZWEpLCAyOTUsIDEwOH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhh
MjZkYTM5OSwgOWFlZjc3NGEpLCAzMjIsIDExNn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJU
X0MoMHhmMjA5Nzg3YiwgYjQ3ZDZiODUpLCAzNDgsIDEyNH0sCisgICAgICAgICAgICB7VUlOVDY0
XzJQQVJUX0MoMHhiNDU0ZTRhMSwgNzlkZDE4NzcpLCAzNzUsIDEzMn0sCisgICAgICAgICAgICB7
VUlOVDY0XzJQQVJUX0MoMHg4NjViODY5MiwgNWI5YmM1YzIpLCA0MDIsIDE0MH0sCisgICAgICAg
ICAgICB7VUlOVDY0XzJQQVJUX0MoMHhjODM1NTNjNSwgYzg5NjVkM2QpLCA0MjgsIDE0OH0sCisg
ICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg5NTJhYjQ1YywgZmE5N2EwYjMpLCA0NTUsIDE1
Nn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhkZTQ2OWZiZCwgOTlhMDVmZTMpLCA0
ODEsIDE2NH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhhNTliYzIzNCwgZGIzOThj
MjUpLCA1MDgsIDE3Mn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhmNmM2OWE3Miwg
YTM5ODlmNWMpLCA1MzQsIDE4MH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhiN2Rj
YmY1MywgNTRlOWJlY2UpLCA1NjEsIDE4OH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0Mo
MHg4OGZjZjMxNywgZjIyMjQxZTIpLCA1ODgsIDE5Nn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQ
QVJUX0MoMHhjYzIwY2U5YiwgZDM1Yzc4YTUpLCA2MTQsIDIwNH0sCisgICAgICAgICAgICB7VUlO
VDY0XzJQQVJUX0MoMHg5ODE2NWFmMywgN2IyMTUzZGYpLCA2NDEsIDIxMn0sCisgICAgICAgICAg
ICB7VUlOVDY0XzJQQVJUX0MoMHhlMmEwYjVkYywgOTcxZjMwM2EpLCA2NjcsIDIyMH0sCisgICAg
ICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhhOGQ5ZDE1MywgNWNlM2IzOTYpLCA2OTQsIDIyOH0s
CisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhmYjliN2NkOSwgYTRhNzQ0M2MpLCA3MjAs
IDIzNn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhiYjc2NGM0YywgYTdhNDQ0MTAp
LCA3NDcsIDI0NH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg4YmFiOGVlZiwgYjY0
MDljMWEpLCA3NzQsIDI1Mn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhkMDFmZWYx
MCwgYTY1Nzg0MmMpLCA4MDAsIDI2MH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg5
YjEwYTRlNSwgZTk5MTMxMjkpLCA4MjcsIDI2OH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJU
X0MoMHhlNzEwOWJmYiwgYTE5YzBjOWQpLCA4NTMsIDI3Nn0sCisgICAgICAgICAgICB7VUlOVDY0
XzJQQVJUX0MoMHhhYzI4MjBkOSwgNjIzYmY0MjkpLCA4ODAsIDI4NH0sCisgICAgICAgICAgICB7
VUlOVDY0XzJQQVJUX0MoMHg4MDQ0NGI1ZSwgN2FhN2NmODUpLCA5MDcsIDI5Mn0sCisgICAgICAg
ICAgICB7VUlOVDY0XzJQQVJUX0MoMHhiZjIxZTQ0MCwgMDNhY2RkMmQpLCA5MzMsIDMwMH0sCisg
ICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg4ZTY3OWMyZiwgNWU0NGZmOGYpLCA5NjAsIDMw
OH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhkNDMzMTc5ZCwgOWM4Y2I4NDEpLCA5
ODYsIDMxNn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg5ZTE5ZGI5MiwgYjRlMzFi
YTkpLCAxMDEzLCAzMjR9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZWI5NmJmNmUs
IGJhZGY3N2Q5KSwgMTAzOSwgMzMyfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGFm
ODcwMjNiLCA5YmYwZWU2YiksIDEwNjYsIDM0MH0sCisgICAgICAgIH07CisgICAgICAgIGtDYWNo
ZWRQb3dlcnMgPSBjYWNoZWRQb3dlcnM7CisgICAgICAgIGtDYWNoZWRQb3dlcnNMZW5ndGggPSBB
UlJBWV9TSVpFKGNhY2hlZFBvd2Vycyk7CisgICAgICAgIGtDYWNoZWRQb3dlcnNPZmZzZXQgPSAt
Y2FjaGVkUG93ZXJzWzBdLmRlY2ltYWxfZXhwb25lbnQ7CisgICAgICAgIFBvd2Vyc09mVGVuQ2Fj
aGU6OmtEZWNpbWFsRXhwb25lbnREaXN0YW5jZSA9IGtDYWNoZWRQb3dlcnNbMV0uZGVjaW1hbF9l
eHBvbmVudCAtIGtDYWNoZWRQb3dlcnNbMF0uZGVjaW1hbF9leHBvbmVudDsKKyAgICAgICAgUG93
ZXJzT2ZUZW5DYWNoZTo6a01pbkRlY2ltYWxFeHBvbmVudCA9IGtDYWNoZWRQb3dlcnNbMF0uZGVj
aW1hbF9leHBvbmVudDsKKyAgICAgICAgUG93ZXJzT2ZUZW5DYWNoZTo6a01heERlY2ltYWxFeHBv
bmVudCA9IGtDYWNoZWRQb3dlcnNba0NhY2hlZFBvd2Vyc0xlbmd0aCAtIDFdLmRlY2ltYWxfZXhw
b25lbnQ7CisgICAgfQorICAgIAorICAgIHZvaWQgUG93ZXJzT2ZUZW5DYWNoZTo6R2V0Q2FjaGVk
UG93ZXJGb3JCaW5hcnlFeHBvbmVudFJhbmdlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtaW5fZXhwb25lbnQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IG1heF9leHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXlGcCogcG93ZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
KiBkZWNpbWFsX2V4cG9uZW50KSB7CisgICAgICAgIFVOVVNFRF9QQVJBTShtYXhfZXhwb25lbnQp
OworICAgICAgICBpbnQga1EgPSBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZTsKKyAgICAgICAgZG91
YmxlIGsgPSBjZWlsKChtaW5fZXhwb25lbnQgKyBrUSAtIDEpICoga0RfMV9MT0cyXzEwKTsKKyAg
ICAgICAgaW50IGZvbyA9IGtDYWNoZWRQb3dlcnNPZmZzZXQ7CisgICAgICAgIGludCBpbmRleCA9
CisgICAgICAgIChmb28gKyBzdGF0aWNfY2FzdDxpbnQ+KGspIC0gMSkgLyBrRGVjaW1hbEV4cG9u
ZW50RGlzdGFuY2UgKyAxOworICAgICAgICBBU1NFUlQoMCA8PSBpbmRleCAmJiBpbmRleCA8IGtD
YWNoZWRQb3dlcnNMZW5ndGgpOworICAgICAgICBDYWNoZWRQb3dlciBjYWNoZWRfcG93ZXIgPSBr
Q2FjaGVkUG93ZXJzW2luZGV4XTsKKyAgICAgICAgQVNTRVJUKG1pbl9leHBvbmVudCA8PSBjYWNo
ZWRfcG93ZXIuYmluYXJ5X2V4cG9uZW50KTsKKyAgICAgICAgQVNTRVJUKGNhY2hlZF9wb3dlci5i
aW5hcnlfZXhwb25lbnQgPD0gbWF4X2V4cG9uZW50KTsKKyAgICAgICAgKmRlY2ltYWxfZXhwb25l
bnQgPSBjYWNoZWRfcG93ZXIuZGVjaW1hbF9leHBvbmVudDsKKyAgICAgICAgKnBvd2VyID0gRGl5
RnAoY2FjaGVkX3Bvd2VyLnNpZ25pZmljYW5kLCBjYWNoZWRfcG93ZXIuYmluYXJ5X2V4cG9uZW50
KTsKKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBQb3dlcnNPZlRlbkNhY2hlOjpHZXRDYWNo
ZWRQb3dlckZvckRlY2ltYWxFeHBvbmVudChpbnQgcmVxdWVzdGVkX2V4cG9uZW50LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGl5
RnAqIHBvd2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50KiBmb3VuZF9leHBvbmVudCkgeworICAgICAgICBBU1NFUlQoa01p
bkRlY2ltYWxFeHBvbmVudCA8PSByZXF1ZXN0ZWRfZXhwb25lbnQpOworICAgICAgICBBU1NFUlQo
cmVxdWVzdGVkX2V4cG9uZW50IDwga01heERlY2ltYWxFeHBvbmVudCArIGtEZWNpbWFsRXhwb25l
bnREaXN0YW5jZSk7CisgICAgICAgIGludCBpbmRleCA9CisgICAgICAgIChyZXF1ZXN0ZWRfZXhw
b25lbnQgKyBrQ2FjaGVkUG93ZXJzT2Zmc2V0KSAvIGtEZWNpbWFsRXhwb25lbnREaXN0YW5jZTsK
KyAgICAgICAgQ2FjaGVkUG93ZXIgY2FjaGVkX3Bvd2VyID0ga0NhY2hlZFBvd2Vyc1tpbmRleF07
CisgICAgICAgICpwb3dlciA9IERpeUZwKGNhY2hlZF9wb3dlci5zaWduaWZpY2FuZCwgY2FjaGVk
X3Bvd2VyLmJpbmFyeV9leHBvbmVudCk7CisgICAgICAgICpmb3VuZF9leHBvbmVudCA9IGNhY2hl
ZF9wb3dlci5kZWNpbWFsX2V4cG9uZW50OworICAgICAgICBBU1NFUlQoKmZvdW5kX2V4cG9uZW50
IDw9IHJlcXVlc3RlZF9leHBvbmVudCk7CisgICAgICAgIEFTU0VSVChyZXF1ZXN0ZWRfZXhwb25l
bnQgPCAqZm91bmRfZXhwb25lbnQgKyBrRGVjaW1hbEV4cG9uZW50RGlzdGFuY2UpOworICAgIH0K
KyAgICAKK30gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2NhY2hlZC1wb3dlcnMuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWExZGMyNTll
MWRjZTQ4OTkzMDBmZGUyY2Y3ZmZiODIwMzA3MDZmMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmgKQEAgLTAsMCArMSw2OCBA
QAorLy8gQ29weXJpZ2h0IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAg
ICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkCisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAg
ICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKKy8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWZuZGVmIERPVUJMRV9DT05WRVJTSU9O
X0NBQ0hFRF9QT1dFUlNfSF8KKyNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05fQ0FDSEVEX1BPV0VS
U19IXworCisjaW5jbHVkZSAiZGl5LWZwLmgiCisKK25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lv
biB7CisgICAgCisgICAgY2xhc3MgUG93ZXJzT2ZUZW5DYWNoZSB7CisgICAgcHVibGljOgorICAg
ICAgICAKKyAgICAgICAgLy8gTm90IGFsbCBwb3dlcnMgb2YgdGVuIGFyZSBjYWNoZWQuIFRoZSBk
ZWNpbWFsIGV4cG9uZW50IG9mIHR3byBuZWlnaGJvcmluZworICAgICAgICAvLyBjYWNoZWQgbnVt
YmVycyB3aWxsIGRpZmZlciBieSBrRGVjaW1hbEV4cG9uZW50RGlzdGFuY2UuCisgICAgICAgIHN0
YXRpYyBpbnQga0RlY2ltYWxFeHBvbmVudERpc3RhbmNlOworICAgICAgICAKKyAgICAgICAgc3Rh
dGljIGludCBrTWluRGVjaW1hbEV4cG9uZW50OworICAgICAgICBzdGF0aWMgaW50IGtNYXhEZWNp
bWFsRXhwb25lbnQ7CisgICAgICAgIAorICAgICAgICAvLyBSZXR1cm5zIGEgY2FjaGVkIHBvd2Vy
LW9mLXRlbiB3aXRoIGEgYmluYXJ5IGV4cG9uZW50IGluIHRoZSByYW5nZQorICAgICAgICAvLyBb
bWluX2V4cG9uZW50OyBtYXhfZXhwb25lbnRdIChib3VuZGFyaWVzIGluY2x1ZGVkKS4KKyAgICAg
ICAgc3RhdGljIHZvaWQgR2V0Q2FjaGVkUG93ZXJGb3JCaW5hcnlFeHBvbmVudFJhbmdlKGludCBt
aW5fZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgbWF4X2V4cG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGl5RnAqIHBvd2VyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBkZWNp
bWFsX2V4cG9uZW50KTsKKyAgICAgICAgCisgICAgICAgIC8vIFJldHVybnMgYSBjYWNoZWQgcG93
ZXIgb2YgdGVuIHggfj0gMTBeayBzdWNoIHRoYXQKKyAgICAgICAgLy8gICBrIDw9IGRlY2ltYWxf
ZXhwb25lbnQgPCBrICsga0NhY2hlZFBvd2Vyc0RlY2ltYWxEaXN0YW5jZS4KKyAgICAgICAgLy8g
VGhlIGdpdmVuIGRlY2ltYWxfZXhwb25lbnQgbXVzdCBzYXRpc2Z5CisgICAgICAgIC8vICAga01p
bkRlY2ltYWxFeHBvbmVudCA8PSByZXF1ZXN0ZWRfZXhwb25lbnQsIGFuZAorICAgICAgICAvLyAg
IHJlcXVlc3RlZF9leHBvbmVudCA8IGtNYXhEZWNpbWFsRXhwb25lbnQgKyBrRGVjaW1hbEV4cG9u
ZW50RGlzdGFuY2UuCisgICAgICAgIHN0YXRpYyB2b2lkIEdldENhY2hlZFBvd2VyRm9yRGVjaW1h
bEV4cG9uZW50KGludCByZXF1ZXN0ZWRfZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpeUZwKiBwb3dlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBmb3VuZF9leHBv
bmVudCk7CisgICAgfTsKKyAgICAKKyAgICAvLyBJbml0aWFsaXplcyB0aGUgdGFibGUgb2YgY2Fj
aGVkIHBvd2VycyB1c2VkIGJ5IHRoZSBkdG9hIGFsZ29yaXRobS4KKyAgICAvLyBUaGlzIG5lZWRz
IHRvIGJlIGNhbGxlZCB3aGVuIEpTQyBpcyBiZWluZyBpbml0aWFsaXplZC4KKyAgICB2b2lkIGlu
aXRpYWxpemUoKTsKKyAgICAKK30gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbgorCisj
ZW5kaWYgIC8vIERPVUJMRV9DT05WRVJTSU9OX0NBQ0hFRF9QT1dFUlNfSF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kaXktZnAuY2MgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL2R0b2EvZGl5LWZwLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFiMWY3ZWUzNWI5Y2QxYzBi
MGQ0MWNkZjE3N2VhODg4ZWU5YWNiNDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL2R0b2EvZGl5LWZwLmNjCkBAIC0wLDAgKzEsNTcgQEAKKy8vIENvcHlyaWdo
dCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
Ly8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8g
ICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAg
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
Ly8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworCisjaW5jbHVkZSAiZGl5LWZwLmgiCisjaW5jbHVkZSAidXRpbHMu
aCIKKworbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKKyAgICAKKyAgICB2b2lkIERpeUZw
OjpNdWx0aXBseShjb25zdCBEaXlGcCYgb3RoZXIpIHsKKyAgICAgICAgLy8gU2ltcGx5ICJlbXVs
YXRlcyIgYSAxMjggYml0IG11bHRpcGxpY2F0aW9uLgorICAgICAgICAvLyBIb3dldmVyOiB0aGUg
cmVzdWx0aW5nIG51bWJlciBvbmx5IGNvbnRhaW5zIDY0IGJpdHMuIFRoZSBsZWFzdAorICAgICAg
ICAvLyBzaWduaWZpY2FudCA2NCBiaXRzIGFyZSBvbmx5IHVzZWQgZm9yIHJvdW5kaW5nIHRoZSBt
b3N0IHNpZ25pZmljYW50IDY0CisgICAgICAgIC8vIGJpdHMuCisgICAgICAgIGNvbnN0IHVpbnQ2
NF90IGtNMzIgPSAweEZGRkZGRkZGVTsKKyAgICAgICAgdWludDY0X3QgYSA9IGZfID4+IDMyOwor
ICAgICAgICB1aW50NjRfdCBiID0gZl8gJiBrTTMyOworICAgICAgICB1aW50NjRfdCBjID0gb3Ro
ZXIuZl8gPj4gMzI7CisgICAgICAgIHVpbnQ2NF90IGQgPSBvdGhlci5mXyAmIGtNMzI7CisgICAg
ICAgIHVpbnQ2NF90IGFjID0gYSAqIGM7CisgICAgICAgIHVpbnQ2NF90IGJjID0gYiAqIGM7Cisg
ICAgICAgIHVpbnQ2NF90IGFkID0gYSAqIGQ7CisgICAgICAgIHVpbnQ2NF90IGJkID0gYiAqIGQ7
CisgICAgICAgIHVpbnQ2NF90IHRtcCA9IChiZCA+PiAzMikgKyAoYWQgJiBrTTMyKSArIChiYyAm
IGtNMzIpOworICAgICAgICAvLyBCeSBhZGRpbmcgMVUgPDwgMzEgdG8gdG1wIHdlIHJvdW5kIHRo
ZSBmaW5hbCByZXN1bHQuCisgICAgICAgIC8vIEhhbGZ3YXkgY2FzZXMgd2lsbCBiZSByb3VuZCB1
cC4KKyAgICAgICAgdG1wICs9IDFVIDw8IDMxOworICAgICAgICB1aW50NjRfdCByZXN1bHRfZiA9
IGFjICsgKGFkID4+IDMyKSArIChiYyA+PiAzMikgKyAodG1wID4+IDMyKTsKKyAgICAgICAgZV8g
Kz0gb3RoZXIuZV8gKyA2NDsKKyAgICAgICAgZl8gPSByZXN1bHRfZjsKKyAgICB9CisgICAgCit9
ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvZHRvYS9kaXktZnAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
ZHRvYS9kaXktZnAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZmFkYjM3YmJkNjdhMzJkMmZiOGFkMDEzZDM1NWJl
NzBkMmJlMDdkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9k
dG9hL2RpeS1mcC5oCkBAIC0wLDAgKzEsMTE4IEBACisvLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjgg
cHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
Ky8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8K
Ky8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKKyNpZm5kZWYgRE9VQkxFX0NPTlZFUlNJT05fRElZX0ZQX0hfCisjZGVmaW5lIERPVUJMRV9D
T05WRVJTSU9OX0RJWV9GUF9IXworCisjaW5jbHVkZSAidXRpbHMuaCIKKworbmFtZXNwYWNlIGRv
dWJsZV9jb252ZXJzaW9uIHsKKyAgICAKKyAgICAvLyBUaGlzICJEbyBJdCBZb3Vyc2VsZiBGbG9h
dGluZyBQb2ludCIgY2xhc3MgaW1wbGVtZW50cyBhIGZsb2F0aW5nLXBvaW50IG51bWJlcgorICAg
IC8vIHdpdGggYSB1aW50NjQgc2lnbmlmaWNhbmQgYW5kIGFuIGludCBleHBvbmVudC4gTm9ybWFs
aXplZCBEaXlGcCBudW1iZXJzIHdpbGwKKyAgICAvLyBoYXZlIHRoZSBtb3N0IHNpZ25pZmljYW50
IGJpdCBvZiB0aGUgc2lnbmlmaWNhbmQgc2V0LgorICAgIC8vIE11bHRpcGxpY2F0aW9uIGFuZCBT
dWJ0cmFjdGlvbiBkbyBub3Qgbm9ybWFsaXplIHRoZWlyIHJlc3VsdHMuCisgICAgLy8gRGl5RnAg
YXJlIG5vdCBkZXNpZ25lZCB0byBjb250YWluIHNwZWNpYWwgZG91YmxlcyAoTmFOIGFuZCBJbmZp
bml0eSkuCisgICAgY2xhc3MgRGl5RnAgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIGNv
bnN0IGludCBrU2lnbmlmaWNhbmRTaXplID0gNjQ7CisgICAgICAgIAorICAgICAgICBEaXlGcCgp
IDogZl8oMCksIGVfKDApIHt9CisgICAgICAgIERpeUZwKHVpbnQ2NF90IGYsIGludCBlKSA6IGZf
KGYpLCBlXyhlKSB7fQorICAgICAgICAKKyAgICAgICAgLy8gdGhpcyA9IHRoaXMgLSBvdGhlci4K
KyAgICAgICAgLy8gVGhlIGV4cG9uZW50cyBvZiBib3RoIG51bWJlcnMgbXVzdCBiZSB0aGUgc2Ft
ZSBhbmQgdGhlIHNpZ25pZmljYW5kIG9mIHRoaXMKKyAgICAgICAgLy8gbXVzdCBiZSBiaWdnZXIg
dGhhbiB0aGUgc2lnbmlmaWNhbmQgb2Ygb3RoZXIuCisgICAgICAgIC8vIFRoZSByZXN1bHQgd2ls
bCBub3QgYmUgbm9ybWFsaXplZC4KKyAgICAgICAgdm9pZCBTdWJ0cmFjdChjb25zdCBEaXlGcCYg
b3RoZXIpIHsKKyAgICAgICAgICAgIEFTU0VSVChlXyA9PSBvdGhlci5lXyk7CisgICAgICAgICAg
ICBBU1NFUlQoZl8gPj0gb3RoZXIuZl8pOworICAgICAgICAgICAgZl8gLT0gb3RoZXIuZl87Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFJldHVybnMgYSAtIGIuCisgICAgICAgIC8v
IFRoZSBleHBvbmVudHMgb2YgYm90aCBudW1iZXJzIG11c3QgYmUgdGhlIHNhbWUgYW5kIHRoaXMg
bXVzdCBiZSBiaWdnZXIKKyAgICAgICAgLy8gdGhhbiBvdGhlci4gVGhlIHJlc3VsdCB3aWxsIG5v
dCBiZSBub3JtYWxpemVkLgorICAgICAgICBzdGF0aWMgRGl5RnAgTWludXMoY29uc3QgRGl5RnAm
IGEsIGNvbnN0IERpeUZwJiBiKSB7CisgICAgICAgICAgICBEaXlGcCByZXN1bHQgPSBhOworICAg
ICAgICAgICAgcmVzdWx0LlN1YnRyYWN0KGIpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgCisgICAgICAgIC8vIHRoaXMgPSB0aGlzICog
b3RoZXIuCisgICAgICAgIHZvaWQgTXVsdGlwbHkoY29uc3QgRGl5RnAmIG90aGVyKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIHJldHVybnMgYSAqIGI7CisgICAgICAgIHN0YXRpYyBEaXlGcCBUaW1l
cyhjb25zdCBEaXlGcCYgYSwgY29uc3QgRGl5RnAmIGIpIHsKKyAgICAgICAgICAgIERpeUZwIHJl
c3VsdCA9IGE7CisgICAgICAgICAgICByZXN1bHQuTXVsdGlwbHkoYik7CisgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIE5vcm1hbGl6
ZSgpIHsKKyAgICAgICAgICAgIEFTU0VSVChmXyAhPSAwKTsKKyAgICAgICAgICAgIHVpbnQ2NF90
IGYgPSBmXzsKKyAgICAgICAgICAgIGludCBlID0gZV87CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIC8vIFRoaXMgbWV0aG9kIGlzIG1haW5seSBjYWxsZWQgZm9yIG5vcm1hbGl6aW5nIGJvdW5k
YXJpZXMuIEluIGdlbmVyYWwKKyAgICAgICAgICAgIC8vIGJvdW5kYXJpZXMgbmVlZCB0byBiZSBz
aGlmdGVkIGJ5IDEwIGJpdHMuIFdlIHRodXMgb3B0aW1pemUgZm9yIHRoaXMgY2FzZS4KKyAgICAg
ICAgICAgIGNvbnN0IHVpbnQ2NF90IGsxME1TQml0cyA9IFVJTlQ2NF8yUEFSVF9DKDB4RkZDMDAw
MDAsIDAwMDAwMDAwKTsKKyAgICAgICAgICAgIHdoaWxlICgoZiAmIGsxME1TQml0cykgPT0gMCkg
eworICAgICAgICAgICAgICAgIGYgPDw9IDEwOworICAgICAgICAgICAgICAgIGUgLT0gMTA7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAoKGYgJiBrVWludDY0TVNCKSA9PSAwKSB7
CisgICAgICAgICAgICAgICAgZiA8PD0gMTsKKyAgICAgICAgICAgICAgICBlLS07CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBmXyA9IGY7CisgICAgICAgICAgICBlXyA9IGU7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBEaXlGcCBOb3JtYWxpemUoY29uc3QgRGl5RnAm
IGEpIHsKKyAgICAgICAgICAgIERpeUZwIHJlc3VsdCA9IGE7CisgICAgICAgICAgICByZXN1bHQu
Tm9ybWFsaXplKCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICB1aW50NjRfdCBmKCkgY29uc3QgeyByZXR1cm4gZl87IH0KKyAgICAgICAg
aW50IGUoKSBjb25zdCB7IHJldHVybiBlXzsgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBzZXRf
Zih1aW50NjRfdCBuZXdfdmFsdWUpIHsgZl8gPSBuZXdfdmFsdWU7IH0KKyAgICAgICAgdm9pZCBz
ZXRfZShpbnQgbmV3X3ZhbHVlKSB7IGVfID0gbmV3X3ZhbHVlOyB9CisgICAgICAgIAorICAgIHBy
aXZhdGU6CisgICAgICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBrVWludDY0TVNCID0gVUlOVDY0
XzJQQVJUX0MoMHg4MDAwMDAwMCwgMDAwMDAwMDApOworICAgICAgICAKKyAgICAgICAgdWludDY0
X3QgZl87CisgICAgICAgIGludCBlXzsKKyAgICB9OworICAgIAorfSAgLy8gbmFtZXNwYWNlIGRv
dWJsZV9jb252ZXJzaW9uCisKKyNlbmRpZiAgLy8gRE9VQkxFX0NPTlZFUlNJT05fRElZX0ZQX0hf
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZG91YmxlLWNvbnZl
cnNpb24uY2MgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZG91YmxlLWNvbnZlcnNp
b24uY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMzE3ZGYxNDJlOWE0YzIzMDNiYTRiMmNkMDEzMmExNmE0ZTI4ZjJm
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kb3Vi
bGUtY29udmVyc2lvbi5jYwpAQCAtMCwwICsxLDg2OSBAQAorLy8gQ29weXJpZ2h0IDIwMTAgdGhl
IFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
Ly8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
Ky8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8v
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVk
ZSAiZG91YmxlLWNvbnZlcnNpb24uaCIKKworI2luY2x1ZGUgImJpZ251bS1kdG9hLmgiCisjaW5j
bHVkZSAiZG91YmxlLmgiCisjaW5jbHVkZSAiZmFzdC1kdG9hLmgiCisjaW5jbHVkZSAiZml4ZWQt
ZHRvYS5oIgorI2luY2x1ZGUgInN0cnRvZC5oIgorI2luY2x1ZGUgInV0aWxzLmgiCisKK25hbWVz
cGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgY29uc3QgRG91YmxlVG9TdHJpbmdD
b252ZXJ0ZXImIERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpFY21hU2NyaXB0Q29udmVydGVyKCkg
eworICAgICAgICBpbnQgZmxhZ3MgPSBVTklRVUVfWkVSTyB8IEVNSVRfUE9TSVRJVkVfRVhQT05F
TlRfU0lHTjsKKyAgICAgICAgc3RhdGljIERvdWJsZVRvU3RyaW5nQ29udmVydGVyIGNvbnZlcnRl
cihmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiSW5maW5pdHkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJOYU4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAtNiwgMjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgNiwgMCk7CisgICAgICAgIHJldHVybiBjb252ZXJ0ZXI7CisgICAgfQorICAgIAorICAg
IAorICAgIGJvb2wgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6OkhhbmRsZVNwZWNpYWxWYWx1ZXMo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
b3VibGUgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTdHJpbmdCdWlsZGVyKiByZXN1bHRfYnVpbGRlcikgY29uc3QgeworICAgICAg
ICBEb3VibGUgZG91YmxlX2luc3BlY3QodmFsdWUpOworICAgICAgICBpZiAoZG91YmxlX2luc3Bl
Y3QuSXNJbmZpbml0ZSgpKSB7CisgICAgICAgICAgICBpZiAoaW5maW5pdHlfc3ltYm9sXyA9PSBO
VUxMKSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAodmFsdWUgPCAwKSB7CisgICAgICAg
ICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcignLScpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZFN0cmluZyhpbmZpbml0eV9zeW1ib2xf
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChkb3Vi
bGVfaW5zcGVjdC5Jc05hbigpKSB7CisgICAgICAgICAgICBpZiAobmFuX3N5bWJvbF8gPT0gTlVM
TCkgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZFN0cmluZyhu
YW5fc3ltYm9sXyk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgRG91YmxlVG9TdHJp
bmdDb252ZXJ0ZXI6OkNyZWF0ZUV4cG9uZW50aWFsUmVwcmVzZW50YXRpb24oCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyKiBkZWNpbWFsX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGgsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyKiByZXN1bHRfYnVpbGRlcikg
Y29uc3QgeworICAgICAgICBBU1NFUlQobGVuZ3RoICE9IDApOworICAgICAgICByZXN1bHRfYnVp
bGRlci0+QWRkQ2hhcmFjdGVyKGRlY2ltYWxfZGlnaXRzWzBdKTsKKyAgICAgICAgaWYgKGxlbmd0
aCAhPSAxKSB7CisgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKCcuJyk7
CisgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkU3Vic3RyaW5nKCZkZWNpbWFsX2RpZ2l0
c1sxXSwgbGVuZ3RoLTEpOworICAgICAgICB9CisgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRD
aGFyYWN0ZXIoZXhwb25lbnRfY2hhcmFjdGVyXyk7CisgICAgICAgIGlmIChleHBvbmVudCA8IDAp
IHsKKyAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRDaGFyYWN0ZXIoJy0nKTsKKyAgICAg
ICAgICAgIGV4cG9uZW50ID0gLWV4cG9uZW50OworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgaWYgKChmbGFnc18gJiBFTUlUX1BPU0lUSVZFX0VYUE9ORU5UX1NJR04pICE9IDApIHsKKyAg
ICAgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKCcrJyk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGV4cG9uZW50ID09IDApIHsKKyAgICAgICAg
ICAgIHJlc3VsdF9idWlsZGVyLT5BZGRDaGFyYWN0ZXIoJzAnKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoZXhwb25lbnQgPCAxZTQpOworICAgICAgICBj
b25zdCBpbnQga01heEV4cG9uZW50TGVuZ3RoID0gNTsKKyAgICAgICAgY2hhciBidWZmZXJba01h
eEV4cG9uZW50TGVuZ3RoXTsKKyAgICAgICAgaW50IGZpcnN0X2NoYXJfcG9zID0ga01heEV4cG9u
ZW50TGVuZ3RoOworICAgICAgICB3aGlsZSAoZXhwb25lbnQgPiAwKSB7CisgICAgICAgICAgICBi
dWZmZXJbLS1maXJzdF9jaGFyX3Bvc10gPSAnMCcgKyAoZXhwb25lbnQgJSAxMCk7CisgICAgICAg
ICAgICBleHBvbmVudCAvPSAxMDsKKyAgICAgICAgfQorICAgICAgICByZXN1bHRfYnVpbGRlci0+
QWRkU3Vic3RyaW5nKCZidWZmZXJbZmlyc3RfY2hhcl9wb3NdLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGtNYXhFeHBvbmVudExlbmd0aCAtIGZpcnN0X2NoYXJfcG9zKTsK
KyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6Q3Jl
YXRlRGVjaW1hbFJlcHJlc2VudGF0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBkZWNpbWFsX2RpZ2l0
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlY2ltYWxfcG9pbnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBk
aWdpdHNfYWZ0ZXJfcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBj
b25zdCB7CisgICAgICAgIC8vIENyZWF0ZSBhIHJlcHJlc2VudGF0aW9uIHRoYXQgaXMgcGFkZGVk
IHdpdGggemVyb3MgaWYgbmVlZGVkLgorICAgICAgICBpZiAoZGVjaW1hbF9wb2ludCA8PSAwKSB7
CisgICAgICAgICAgICAvLyAiMC4wMDAwMGRlY2ltYWxfcmVwIi4KKyAgICAgICAgICAgIHJlc3Vs
dF9idWlsZGVyLT5BZGRDaGFyYWN0ZXIoJzAnKTsKKyAgICAgICAgICAgIGlmIChkaWdpdHNfYWZ0
ZXJfcG9pbnQgPiAwKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJh
Y3RlcignLicpOworICAgICAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRQYWRkaW5nKCcw
JywgLWRlY2ltYWxfcG9pbnQpOworICAgICAgICAgICAgICAgIEFTU0VSVChsZW5ndGggPD0gZGln
aXRzX2FmdGVyX3BvaW50IC0gKC1kZWNpbWFsX3BvaW50KSk7CisgICAgICAgICAgICAgICAgcmVz
dWx0X2J1aWxkZXItPkFkZFN1YnN0cmluZyhkZWNpbWFsX2RpZ2l0cywgbGVuZ3RoKTsKKyAgICAg
ICAgICAgICAgICBpbnQgcmVtYWluaW5nX2RpZ2l0cyA9IGRpZ2l0c19hZnRlcl9wb2ludCAtICgt
ZGVjaW1hbF9wb2ludCkgLSBsZW5ndGg7CisgICAgICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXIt
PkFkZFBhZGRpbmcoJzAnLCByZW1haW5pbmdfZGlnaXRzKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIGlmIChkZWNpbWFsX3BvaW50ID49IGxlbmd0aCkgeworICAgICAgICAgICAgLy8g
ImRlY2ltYWxfcmVwMDAwMC4wMDAwMCIgb3IgImRlY2ltYWxfcmVwLjAwMDAiCisgICAgICAgICAg
ICByZXN1bHRfYnVpbGRlci0+QWRkU3Vic3RyaW5nKGRlY2ltYWxfZGlnaXRzLCBsZW5ndGgpOwor
ICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZFBhZGRpbmcoJzAnLCBkZWNpbWFsX3BvaW50
IC0gbGVuZ3RoKTsKKyAgICAgICAgICAgIGlmIChkaWdpdHNfYWZ0ZXJfcG9pbnQgPiAwKSB7Cisg
ICAgICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcignLicpOworICAgICAg
ICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRQYWRkaW5nKCcwJywgZGlnaXRzX2FmdGVyX3Bv
aW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vICJk
ZWNpbWEubF9yZXAwMDAiCisgICAgICAgICAgICBBU1NFUlQoZGlnaXRzX2FmdGVyX3BvaW50ID4g
MCk7CisgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkU3Vic3RyaW5nKGRlY2ltYWxfZGln
aXRzLCBkZWNpbWFsX3BvaW50KTsKKyAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRDaGFy
YWN0ZXIoJy4nKTsKKyAgICAgICAgICAgIEFTU0VSVChsZW5ndGggLSBkZWNpbWFsX3BvaW50IDw9
IGRpZ2l0c19hZnRlcl9wb2ludCk7CisgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkU3Vi
c3RyaW5nKCZkZWNpbWFsX2RpZ2l0c1tkZWNpbWFsX3BvaW50XSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoIC0gZGVjaW1hbF9wb2ludCk7CisgICAgICAg
ICAgICBpbnQgcmVtYWluaW5nX2RpZ2l0cyA9IGRpZ2l0c19hZnRlcl9wb2ludCAtIChsZW5ndGgg
LSBkZWNpbWFsX3BvaW50KTsKKyAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRQYWRkaW5n
KCcwJywgcmVtYWluaW5nX2RpZ2l0cyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRpZ2l0c19h
ZnRlcl9wb2ludCA9PSAwKSB7CisgICAgICAgICAgICBpZiAoKGZsYWdzXyAmIEVNSVRfVFJBSUxJ
TkdfREVDSU1BTF9QT0lOVCkgIT0gMCkgeworICAgICAgICAgICAgICAgIHJlc3VsdF9idWlsZGVy
LT5BZGRDaGFyYWN0ZXIoJy4nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgoZmxh
Z3NfICYgRU1JVF9UUkFJTElOR19aRVJPX0FGVEVSX1BPSU5UKSAhPSAwKSB7CisgICAgICAgICAg
ICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcignMCcpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIGJvb2wgRG91YmxlVG9TdHJpbmdDb252
ZXJ0ZXI6OlRvU2hvcnRlc3QoZG91YmxlIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVpbGRlciogcmVzdWx0X2J1aWxkZXIpIGNvbnN0
IHsKKyAgICAgICAgaWYgKERvdWJsZSh2YWx1ZSkuSXNTcGVjaWFsKCkpIHsKKyAgICAgICAgICAg
IHJldHVybiBIYW5kbGVTcGVjaWFsVmFsdWVzKHZhbHVlLCByZXN1bHRfYnVpbGRlcik7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGludCBkZWNpbWFsX3BvaW50OworICAgICAgICBib29s
IHNpZ247CisgICAgICAgIGNvbnN0IGludCBrRGVjaW1hbFJlcENhcGFjaXR5ID0ga0Jhc2UxME1h
eGltYWxMZW5ndGggKyAxOworICAgICAgICBjaGFyIGRlY2ltYWxfcmVwW2tEZWNpbWFsUmVwQ2Fw
YWNpdHldOworICAgICAgICBpbnQgZGVjaW1hbF9yZXBfbGVuZ3RoOworICAgICAgICAKKyAgICAg
ICAgRG91YmxlVG9Bc2NpaSh2YWx1ZSwgU0hPUlRFU1QsIDAsIGRlY2ltYWxfcmVwLCBrRGVjaW1h
bFJlcENhcGFjaXR5LAorICAgICAgICAgICAgICAgICAgICAgICZzaWduLCAmZGVjaW1hbF9yZXBf
bGVuZ3RoLCAmZGVjaW1hbF9wb2ludCk7CisgICAgICAgIAorICAgICAgICBib29sIHVuaXF1ZV96
ZXJvID0gKGZsYWdzXyAmIFVOSVFVRV9aRVJPKSAhPSAwOworICAgICAgICBpZiAoc2lnbiAmJiAo
dmFsdWUgIT0gMC4wIHx8ICF1bmlxdWVfemVybykpIHsKKyAgICAgICAgICAgIHJlc3VsdF9idWls
ZGVyLT5BZGRDaGFyYWN0ZXIoJy0nKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaW50
IGV4cG9uZW50ID0gZGVjaW1hbF9wb2ludCAtIDE7CisgICAgICAgIGlmICgoZGVjaW1hbF9pbl9z
aG9ydGVzdF9sb3dfIDw9IGV4cG9uZW50KSAmJgorICAgICAgICAgICAgKGV4cG9uZW50IDwgZGVj
aW1hbF9pbl9zaG9ydGVzdF9oaWdoXykpIHsKKyAgICAgICAgICAgIENyZWF0ZURlY2ltYWxSZXBy
ZXNlbnRhdGlvbihkZWNpbWFsX3JlcCwgZGVjaW1hbF9yZXBfbGVuZ3RoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2ltYWxfcG9pbnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF4KDAsIGRlY2ltYWxfcmVwX2xlbmd0aCAtIGRl
Y2ltYWxfcG9pbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdF9idWlsZGVyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIENyZWF0ZUV4cG9u
ZW50aWFsUmVwcmVzZW50YXRpb24oZGVjaW1hbF9yZXAsIGRlY2ltYWxfcmVwX2xlbmd0aCwgZXhw
b25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dF9idWlsZGVyKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgCisgICAgYm9vbCBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6VG9GaXhlZChkb3VibGUg
dmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVx
dWVzdGVkX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25zdCB7CisgICAgICAgIEFTU0VSVChr
TWF4Rml4ZWREaWdpdHNCZWZvcmVQb2ludCA9PSA2MCk7CisgICAgICAgIGNvbnN0IGRvdWJsZSBr
Rmlyc3ROb25GaXhlZCA9IDFlNjA7CisgICAgICAgIAorICAgICAgICBpZiAoRG91YmxlKHZhbHVl
KS5Jc1NwZWNpYWwoKSkgeworICAgICAgICAgICAgcmV0dXJuIEhhbmRsZVNwZWNpYWxWYWx1ZXMo
dmFsdWUsIHJlc3VsdF9idWlsZGVyKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYg
KHJlcXVlc3RlZF9kaWdpdHMgPiBrTWF4Rml4ZWREaWdpdHNBZnRlclBvaW50KSByZXR1cm4gZmFs
c2U7CisgICAgICAgIGlmICh2YWx1ZSA+PSBrRmlyc3ROb25GaXhlZCB8fCB2YWx1ZSA8PSAta0Zp
cnN0Tm9uRml4ZWQpIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIC8vIEZpbmQgYSBz
dWZmaWNpZW50bHkgcHJlY2lzZSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIG4uCisgICAgICAg
IGludCBkZWNpbWFsX3BvaW50OworICAgICAgICBib29sIHNpZ247CisgICAgICAgIC8vIEFkZCBz
cGFjZSBmb3IgdGhlICdcMCcgYnl0ZS4KKyAgICAgICAgY29uc3QgaW50IGtEZWNpbWFsUmVwQ2Fw
YWNpdHkgPQorICAgICAgICBrTWF4Rml4ZWREaWdpdHNCZWZvcmVQb2ludCArIGtNYXhGaXhlZERp
Z2l0c0FmdGVyUG9pbnQgKyAxOworICAgICAgICBjaGFyIGRlY2ltYWxfcmVwW2tEZWNpbWFsUmVw
Q2FwYWNpdHldOworICAgICAgICBpbnQgZGVjaW1hbF9yZXBfbGVuZ3RoOworICAgICAgICBEb3Vi
bGVUb0FzY2lpKHZhbHVlLCBGSVhFRCwgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAgICAgICAgICAg
ICAgICAgICBkZWNpbWFsX3JlcCwga0RlY2ltYWxSZXBDYXBhY2l0eSwKKyAgICAgICAgICAgICAg
ICAgICAgICAmc2lnbiwgJmRlY2ltYWxfcmVwX2xlbmd0aCwgJmRlY2ltYWxfcG9pbnQpOworICAg
ICAgICAKKyAgICAgICAgYm9vbCB1bmlxdWVfemVybyA9ICgoZmxhZ3NfICYgVU5JUVVFX1pFUk8p
ICE9IDApOworICAgICAgICBpZiAoc2lnbiAmJiAodmFsdWUgIT0gMC4wIHx8ICF1bmlxdWVfemVy
bykpIHsKKyAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRDaGFyYWN0ZXIoJy0nKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgQ3JlYXRlRGVjaW1hbFJlcHJlc2VudGF0aW9uKGRl
Y2ltYWxfcmVwLCBkZWNpbWFsX3JlcF9sZW5ndGgsIGRlY2ltYWxfcG9pbnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ZWRfZGlnaXRzLCByZXN1bHRfYnVpbGRl
cik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAKKyAgICBib29sIERv
dWJsZVRvU3RyaW5nQ29udmVydGVyOjpUb0V4cG9uZW50aWFsKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHZhbHVlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlcXVlc3RlZF9kaWdpdHMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdC
dWlsZGVyKiByZXN1bHRfYnVpbGRlcikgY29uc3QgeworICAgICAgICBpZiAoRG91YmxlKHZhbHVl
KS5Jc1NwZWNpYWwoKSkgeworICAgICAgICAgICAgcmV0dXJuIEhhbmRsZVNwZWNpYWxWYWx1ZXMo
dmFsdWUsIHJlc3VsdF9idWlsZGVyKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYg
KHJlcXVlc3RlZF9kaWdpdHMgPCAtMSkgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAocmVxdWVz
dGVkX2RpZ2l0cyA+IGtNYXhFeHBvbmVudGlhbERpZ2l0cykgcmV0dXJuIGZhbHNlOworICAgICAg
ICAKKyAgICAgICAgaW50IGRlY2ltYWxfcG9pbnQ7CisgICAgICAgIGJvb2wgc2lnbjsKKyAgICAg
ICAgLy8gQWRkIHNwYWNlIGZvciBkaWdpdCBiZWZvcmUgdGhlIGRlY2ltYWwgcG9pbnQgYW5kIHRo
ZSAnXDAnIGNoYXJhY3Rlci4KKyAgICAgICAgY29uc3QgaW50IGtEZWNpbWFsUmVwQ2FwYWNpdHkg
PSBrTWF4RXhwb25lbnRpYWxEaWdpdHMgKyAyOworICAgICAgICBBU1NFUlQoa0RlY2ltYWxSZXBD
YXBhY2l0eSA+IGtCYXNlMTBNYXhpbWFsTGVuZ3RoKTsKKyAgICAgICAgY2hhciBkZWNpbWFsX3Jl
cFtrRGVjaW1hbFJlcENhcGFjaXR5XTsKKyAgICAgICAgaW50IGRlY2ltYWxfcmVwX2xlbmd0aDsK
KyAgICAgICAgCisgICAgICAgIGlmIChyZXF1ZXN0ZWRfZGlnaXRzID09IC0xKSB7CisgICAgICAg
ICAgICBEb3VibGVUb0FzY2lpKHZhbHVlLCBTSE9SVEVTVCwgMCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVjaW1hbF9yZXAsIGtEZWNpbWFsUmVwQ2FwYWNpdHksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICZzaWduLCAmZGVjaW1hbF9yZXBfbGVuZ3RoLCAmZGVjaW1hbF9wb2ludCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBEb3VibGVUb0FzY2lpKHZhbHVlLCBQUkVD
SVNJT04sIHJlcXVlc3RlZF9kaWdpdHMgKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWNpbWFsX3JlcCwga0RlY2ltYWxSZXBDYXBhY2l0eSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgJnNpZ24sICZkZWNpbWFsX3JlcF9sZW5ndGgsICZkZWNpbWFsX3BvaW50KTsKKyAgICAgICAg
ICAgIEFTU0VSVChkZWNpbWFsX3JlcF9sZW5ndGggPD0gcmVxdWVzdGVkX2RpZ2l0cyArIDEpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKGludCBpID0gZGVjaW1hbF9yZXBfbGVuZ3Ro
OyBpIDwgcmVxdWVzdGVkX2RpZ2l0cyArIDE7ICsraSkgeworICAgICAgICAgICAgICAgIGRlY2lt
YWxfcmVwW2ldID0gJzAnOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVjaW1hbF9yZXBf
bGVuZ3RoID0gcmVxdWVzdGVkX2RpZ2l0cyArIDE7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGJvb2wgdW5pcXVlX3plcm8gPSAoKGZsYWdzXyAmIFVOSVFVRV9aRVJPKSAhPSAwKTsKKyAg
ICAgICAgaWYgKHNpZ24gJiYgKHZhbHVlICE9IDAuMCB8fCAhdW5pcXVlX3plcm8pKSB7CisgICAg
ICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKCctJyk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGludCBleHBvbmVudCA9IGRlY2ltYWxfcG9pbnQgLSAxOworICAgICAg
ICBDcmVhdGVFeHBvbmVudGlhbFJlcHJlc2VudGF0aW9uKGRlY2ltYWxfcmVwLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2ltYWxfcmVwX2xlbmd0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvbmVudCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfYnVpbGRlcik7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAKKyAgICBib29sIERvdWJsZVRvU3RyaW5nQ29u
dmVydGVyOjpUb1ByZWNpc2lvbihkb3VibGUgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHByZWNpc2lvbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyKiByZXN1bHRfYnVpbGRl
cikgY29uc3QgeworICAgICAgICBpZiAoRG91YmxlKHZhbHVlKS5Jc1NwZWNpYWwoKSkgeworICAg
ICAgICAgICAgcmV0dXJuIEhhbmRsZVNwZWNpYWxWYWx1ZXModmFsdWUsIHJlc3VsdF9idWlsZGVy
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHByZWNpc2lvbiA8IGtNaW5QcmVj
aXNpb25EaWdpdHMgfHwgcHJlY2lzaW9uID4ga01heFByZWNpc2lvbkRpZ2l0cykgeworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGaW5k
IGEgc3VmZmljaWVudGx5IHByZWNpc2UgZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiBuLgorICAg
ICAgICBpbnQgZGVjaW1hbF9wb2ludDsKKyAgICAgICAgYm9vbCBzaWduOworICAgICAgICAvLyBB
ZGQgb25lIGZvciB0aGUgdGVybWluYXRpbmcgbnVsbCBjaGFyYWN0ZXIuCisgICAgICAgIGNvbnN0
IGludCBrRGVjaW1hbFJlcENhcGFjaXR5ID0ga01heFByZWNpc2lvbkRpZ2l0cyArIDE7CisgICAg
ICAgIGNoYXIgZGVjaW1hbF9yZXBba0RlY2ltYWxSZXBDYXBhY2l0eV07CisgICAgICAgIGludCBk
ZWNpbWFsX3JlcF9sZW5ndGg7CisgICAgICAgIAorICAgICAgICBEb3VibGVUb0FzY2lpKHZhbHVl
LCBQUkVDSVNJT04sIHByZWNpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICBkZWNpbWFsX3Jl
cCwga0RlY2ltYWxSZXBDYXBhY2l0eSwKKyAgICAgICAgICAgICAgICAgICAgICAmc2lnbiwgJmRl
Y2ltYWxfcmVwX2xlbmd0aCwgJmRlY2ltYWxfcG9pbnQpOworICAgICAgICBBU1NFUlQoZGVjaW1h
bF9yZXBfbGVuZ3RoIDw9IHByZWNpc2lvbik7CisgICAgICAgIAorICAgICAgICBib29sIHVuaXF1
ZV96ZXJvID0gKChmbGFnc18gJiBVTklRVUVfWkVSTykgIT0gMCk7CisgICAgICAgIGlmIChzaWdu
ICYmICh2YWx1ZSAhPSAwLjAgfHwgIXVuaXF1ZV96ZXJvKSkgeworICAgICAgICAgICAgcmVzdWx0
X2J1aWxkZXItPkFkZENoYXJhY3RlcignLScpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICAvLyBUaGUgZXhwb25lbnQgaWYgd2UgcHJpbnQgdGhlIG51bWJlciBhcyB4Lnh4ZXl5eS4gVGhh
dCBpcyB3aXRoIHRoZQorICAgICAgICAvLyBkZWNpbWFsIHBvaW50IGFmdGVyIHRoZSBmaXJzdCBk
aWdpdC4KKyAgICAgICAgaW50IGV4cG9uZW50ID0gZGVjaW1hbF9wb2ludCAtIDE7CisgICAgICAg
IAorICAgICAgICBpbnQgZXh0cmFfemVybyA9ICgoZmxhZ3NfICYgRU1JVF9UUkFJTElOR19aRVJP
X0FGVEVSX1BPSU5UKSAhPSAwKSA/IDEgOiAwOworICAgICAgICBpZiAoKC1kZWNpbWFsX3BvaW50
ICsgMSA+IG1heF9sZWFkaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2RlXykgfHwK
KyAgICAgICAgICAgIChkZWNpbWFsX3BvaW50IC0gcHJlY2lzaW9uICsgZXh0cmFfemVybyA+Cisg
ICAgICAgICAgICAgbWF4X3RyYWlsaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2Rl
XykpIHsKKyAgICAgICAgICAgICAgICAvLyBGaWxsIGJ1ZmZlciB0byBjb250YWluICdwcmVjaXNp
b24nIGRpZ2l0cy4KKyAgICAgICAgICAgICAgICAvLyBVc3VhbGx5IHRoZSBidWZmZXIgaXMgYWxy
ZWFkeSBhdCB0aGUgY29ycmVjdCBsZW5ndGgsIGJ1dCAnRG91YmxlVG9Bc2NpaScKKyAgICAgICAg
ICAgICAgICAvLyBpcyBhbGxvd2VkIHRvIHJldHVybiBsZXNzIGNoYXJhY3RlcnMuCisgICAgICAg
ICAgICAgICAgZm9yIChpbnQgaSA9IGRlY2ltYWxfcmVwX2xlbmd0aDsgaSA8IHByZWNpc2lvbjsg
KytpKSB7CisgICAgICAgICAgICAgICAgICAgIGRlY2ltYWxfcmVwW2ldID0gJzAnOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBDcmVhdGVFeHBv
bmVudGlhbFJlcHJlc2VudGF0aW9uKGRlY2ltYWxfcmVwLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb25lbnQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfYnVpbGRlcik7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIENyZWF0ZURlY2ltYWxSZXByZXNlbnRhdGlv
bihkZWNpbWFsX3JlcCwgZGVjaW1hbF9yZXBfbGVuZ3RoLCBkZWNpbWFsX3BvaW50LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXgoMCwgcHJlY2lzaW9uIC0g
ZGVjaW1hbF9wb2ludCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdF9idWlsZGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIAorICAgIAorICAgIHN0YXRpYyBCaWdudW1EdG9hTW9kZSBEdG9hVG9CaWdu
dW1EdG9hTW9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6OkR0b2FNb2RlIGR0b2FfbW9kZSkgeworICAgICAg
ICBzd2l0Y2ggKGR0b2FfbW9kZSkgeworICAgICAgICAgICAgY2FzZSBEb3VibGVUb1N0cmluZ0Nv
bnZlcnRlcjo6U0hPUlRFU1Q6ICByZXR1cm4gQklHTlVNX0RUT0FfU0hPUlRFU1Q7CisgICAgICAg
ICAgICBjYXNlIERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpGSVhFRDogICAgIHJldHVybiBCSUdO
VU1fRFRPQV9GSVhFRDsKKyAgICAgICAgICAgIGNhc2UgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6
OlBSRUNJU0lPTjogcmV0dXJuIEJJR05VTV9EVE9BX1BSRUNJU0lPTjsKKyAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gQklHTlVNX0RUT0FfU0hPUlRFU1Q7ICAvLyBUbyBzaWxlbmNlIGNvbXBpbGVyLgorICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgRG91YmxlVG9TdHJpbmdDb252ZXJ0
ZXI6OkRvdWJsZVRvQXNjaWkoZG91YmxlIHYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBEdG9hTW9kZSBtb2RlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlcXVlc3RlZF9kaWdpdHMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBidWZmZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnVmZmVy
X2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wqIHNpZ24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQqIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCogcG9pbnQpIHsKKyAgICAgICAgVmVjdG9yPGNoYXI+IHZlY3RvcihidWZm
ZXIsIGJ1ZmZlcl9sZW5ndGgpOworICAgICAgICBBU1NFUlQoIURvdWJsZSh2KS5Jc1NwZWNpYWwo
KSk7CisgICAgICAgIEFTU0VSVChtb2RlID09IFNIT1JURVNUIHx8IHJlcXVlc3RlZF9kaWdpdHMg
Pj0gMCk7CisgICAgICAgIAorICAgICAgICBpZiAoRG91YmxlKHYpLlNpZ24oKSA8IDApIHsKKyAg
ICAgICAgICAgICpzaWduID0gdHJ1ZTsKKyAgICAgICAgICAgIHYgPSAtdjsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICpzaWduID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmIChtb2RlID09IFBSRUNJU0lPTiAmJiByZXF1ZXN0ZWRfZGlnaXRzID09IDApIHsK
KyAgICAgICAgICAgIHZlY3RvclswXSA9ICdcMCc7CisgICAgICAgICAgICAqbGVuZ3RoID0gMDsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHYg
PT0gMCkgeworICAgICAgICAgICAgdmVjdG9yWzBdID0gJzAnOworICAgICAgICAgICAgdmVjdG9y
WzFdID0gJ1wwJzsKKyAgICAgICAgICAgICpsZW5ndGggPSAxOworICAgICAgICAgICAgKnBvaW50
ID0gMTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Ym9vbCBmYXN0X3dvcmtlZDsKKyAgICAgICAgc3dpdGNoIChtb2RlKSB7CisgICAgICAgICAgICBj
YXNlIFNIT1JURVNUOgorICAgICAgICAgICAgICAgIGZhc3Rfd29ya2VkID0gRmFzdER0b2Eodiwg
RkFTVF9EVE9BX1NIT1JURVNULCAwLCB2ZWN0b3IsIGxlbmd0aCwgcG9pbnQpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBGSVhFRDoKKyAgICAgICAgICAgICAgICBm
YXN0X3dvcmtlZCA9IEZhc3RGaXhlZER0b2EodiwgcmVxdWVzdGVkX2RpZ2l0cywgdmVjdG9yLCBs
ZW5ndGgsIHBvaW50KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
UFJFQ0lTSU9OOgorICAgICAgICAgICAgICAgIGZhc3Rfd29ya2VkID0gRmFzdER0b2EodiwgRkFT
VF9EVE9BX1BSRUNJU0lPTiwgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZlY3RvciwgbGVuZ3RoLCBwb2ludCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgICAgICAgICAgZmFzdF93b3JrZWQgPSBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoZmFzdF93b3JrZWQpIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIC8vIElm
IHRoZSBmYXN0IGR0b2EgZGlkbid0IHN1Y2NlZWQgdXNlIHRoZSBzbG93ZXIgYmlnbnVtIHZlcnNp
b24uCisgICAgICAgIEJpZ251bUR0b2FNb2RlIGJpZ251bV9tb2RlID0gRHRvYVRvQmlnbnVtRHRv
YU1vZGUobW9kZSk7CisgICAgICAgIEJpZ251bUR0b2EodiwgYmlnbnVtX21vZGUsIHJlcXVlc3Rl
ZF9kaWdpdHMsIHZlY3RvciwgbGVuZ3RoLCBwb2ludCk7CisgICAgICAgIHZlY3RvclsqbGVuZ3Ro
XSA9ICdcMCc7CisgICAgfQorICAgIAorICAgIAorICAgIC8vIENvbnN1bWVzIHRoZSBnaXZlbiBz
dWJzdHJpbmcgZnJvbSB0aGUgaXRlcmF0b3IuCisgICAgLy8gUmV0dXJucyBmYWxzZSwgaWYgdGhl
IHN1YnN0cmluZyBkb2VzIG5vdCBtYXRjaC4KKyAgICBzdGF0aWMgYm9vbCBDb25zdW1lU3ViU3Ry
aW5nKGNvbnN0IGNoYXIqKiBjdXJyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciogZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciogc3Vic3RyaW5nKSB7CisgICAgICAgIEFTU0VSVCgqKmN1cnJlbnQgPT0gKnN1YnN0
cmluZyk7CisgICAgICAgIGZvciAoc3Vic3RyaW5nKys7ICpzdWJzdHJpbmcgIT0gJ1wwJzsgc3Vi
c3RyaW5nKyspIHsKKyAgICAgICAgICAgICsrKmN1cnJlbnQ7CisgICAgICAgICAgICBpZiAoKmN1
cnJlbnQgPT0gZW5kIHx8ICoqY3VycmVudCAhPSAqc3Vic3RyaW5nKSByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgKysqY3VycmVudDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIAorICAgIAorICAgIC8vIE1heGltdW0gbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0
cyBpbiBkZWNpbWFsIHJlcHJlc2VudGF0aW9uLgorICAgIC8vIFRoZSBsb25nZXN0IHBvc3NpYmxl
IGRvdWJsZSBpbiBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIGlzCisgICAgLy8gKDJeNTMgLSAxKSAq
IDIgXiAtMTA3NCB0aGF0IGlzICgyIF4gNTMgLSAxKSAqIDUgXiAxMDc0IC8gMTAgXiAxMDc0Cisg
ICAgLy8gKDc2OCBkaWdpdHMpLiBJZiB3ZSBwYXJzZSBhIG51bWJlciB3aG9zZSBmaXJzdCBkaWdp
dHMgYXJlIGVxdWFsIHRvIGEKKyAgICAvLyBtZWFuIG9mIDIgYWRqYWNlbnQgZG91YmxlcyAodGhh
dCBjb3VsZCBoYXZlIHVwIHRvIDc2OSBkaWdpdHMpIHRoZSByZXN1bHQKKyAgICAvLyBtdXN0IGJl
IHJvdW5kZWQgdG8gdGhlIGJpZ2dlciBvbmUgdW5sZXNzIHRoZSB0YWlsIGNvbnNpc3RzIG9mIHpl
cm9zLCBzbworICAgIC8vIHdlIGRvbid0IG5lZWQgdG8gcHJlc2VydmUgYWxsIHRoZSBkaWdpdHMu
CisgICAgY29uc3QgaW50IGtNYXhTaWduaWZpY2FudERpZ2l0cyA9IDc3MjsKKyAgICAKKyAgICAK
KyAgICAvLyBSZXR1cm5zIHRydWUgaWYgYSBub25zcGFjZSBmb3VuZCBhbmQgZmFsc2UgaWYgdGhl
IGVuZCBoYXMgcmVhY2hlZC4KKyAgICBzdGF0aWMgaW5saW5lIGJvb2wgQWR2YW5jZVRvTm9uc3Bh
Y2UoY29uc3QgY2hhcioqIGN1cnJlbnQsIGNvbnN0IGNoYXIqIGVuZCkgeworICAgICAgICB3aGls
ZSAoKmN1cnJlbnQgIT0gZW5kKSB7CisgICAgICAgICAgICBpZiAoKipjdXJyZW50ICE9ICcgJykg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICArKypjdXJyZW50OworICAgICAgICB9CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgCisgICAgc3RhdGljIGJvb2wgaXNEaWdp
dChpbnQgeCwgaW50IHJhZGl4KSB7CisgICAgICAgIHJldHVybiAoeCA+PSAnMCcgJiYgeCA8PSAn
OScgJiYgeCA8ICcwJyArIHJhZGl4KQorICAgICAgICB8fCAocmFkaXggPiAxMCAmJiB4ID49ICdh
JyAmJiB4IDwgJ2EnICsgcmFkaXggLSAxMCkKKyAgICAgICAgfHwgKHJhZGl4ID4gMTAgJiYgeCA+
PSAnQScgJiYgeCA8ICdBJyArIHJhZGl4IC0gMTApOworICAgIH0KKyAgICAKKyAgICAKKyAgICBz
dGF0aWMgZG91YmxlIFNpZ25lZFplcm8oYm9vbCBzaWduKSB7CisgICAgICAgIHJldHVybiBzaWdu
ID8gLTAuMCA6IDAuMDsKKyAgICB9CisgICAgCisgICAgCisgICAgLy8gUGFyc2luZyBpbnRlZ2Vy
cyB3aXRoIHJhZGl4IDIsIDQsIDgsIDE2LCAzMi4gQXNzdW1lcyBjdXJyZW50ICE9IGVuZC4KKyAg
ICB0ZW1wbGF0ZSA8aW50IHJhZGl4X2xvZ18yPgorICAgIHN0YXRpYyBkb3VibGUgUmFkaXhTdHJp
bmdUb0RvdWJsZShjb25zdCBjaGFyKiBjdXJyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyKiBlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgc2lnbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBhbGxvd190cmFpbGluZ19qdW5rLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkb3VibGUganVua19zdHJpbmdfdmFsdWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKiB0cmFpbGluZ19wb2ludGVyKSB7Cisg
ICAgICAgIEFTU0VSVChjdXJyZW50ICE9IGVuZCk7CisgICAgICAgIAorICAgICAgICAvLyBTa2lw
IGxlYWRpbmcgMHMuCisgICAgICAgIHdoaWxlICgqY3VycmVudCA9PSAnMCcpIHsKKyAgICAgICAg
ICAgICsrY3VycmVudDsKKyAgICAgICAgICAgIGlmIChjdXJyZW50ID09IGVuZCkgeworICAgICAg
ICAgICAgICAgICp0cmFpbGluZ19wb2ludGVyID0gZW5kOworICAgICAgICAgICAgICAgIHJldHVy
biBTaWduZWRaZXJvKHNpZ24pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBpbnQ2NF90IG51bWJlciA9IDA7CisgICAgICAgIGludCBleHBvbmVudCA9IDA7Cisg
ICAgICAgIGNvbnN0IGludCByYWRpeCA9ICgxIDw8IHJhZGl4X2xvZ18yKTsKKyAgICAgICAgCisg
ICAgICAgIGRvIHsKKyAgICAgICAgICAgIGludCBkaWdpdDsKKyAgICAgICAgICAgIGlmICgqY3Vy
cmVudCA+PSAnMCcgJiYgKmN1cnJlbnQgPD0gJzknICYmICpjdXJyZW50IDwgJzAnICsgcmFkaXgp
IHsKKyAgICAgICAgICAgICAgICBkaWdpdCA9IHN0YXRpY19jYXN0PGNoYXI+KCpjdXJyZW50KSAt
ICcwJzsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocmFkaXggPiAxMCAmJiAqY3VycmVudCA+PSAn
YScgJiYgKmN1cnJlbnQgPCAnYScgKyByYWRpeCAtIDEwKSB7CisgICAgICAgICAgICAgICAgZGln
aXQgPSBzdGF0aWNfY2FzdDxjaGFyPigqY3VycmVudCkgLSAnYScgKyAxMDsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAocmFkaXggPiAxMCAmJiAqY3VycmVudCA+PSAnQScgJiYgKmN1cnJlbnQgPCAn
QScgKyByYWRpeCAtIDEwKSB7CisgICAgICAgICAgICAgICAgZGlnaXQgPSBzdGF0aWNfY2FzdDxj
aGFyPigqY3VycmVudCkgLSAnQScgKyAxMDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgaWYgKGFsbG93X3RyYWlsaW5nX2p1bmsgfHwgIUFkdmFuY2VUb05vbnNwYWNlKCZj
dXJyZW50LCBlbmQpKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1
ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG51bWJlciA9IG51bWJlciAqIHJhZGl4ICsgZGlnaXQ7CisgICAgICAgICAgICBpbnQg
b3ZlcmZsb3cgPSBzdGF0aWNfY2FzdDxpbnQ+KG51bWJlciA+PiA1Myk7CisgICAgICAgICAgICBp
ZiAob3ZlcmZsb3cgIT0gMCkgeworICAgICAgICAgICAgICAgIC8vIE92ZXJmbG93IG9jY3VycmVk
LiBOZWVkIHRvIGRldGVybWluZSB3aGljaCBkaXJlY3Rpb24gdG8gcm91bmQgdGhlCisgICAgICAg
ICAgICAgICAgLy8gcmVzdWx0LgorICAgICAgICAgICAgICAgIGludCBvdmVyZmxvd19iaXRzX2Nv
dW50ID0gMTsKKyAgICAgICAgICAgICAgICB3aGlsZSAob3ZlcmZsb3cgPiAxKSB7CisgICAgICAg
ICAgICAgICAgICAgIG92ZXJmbG93X2JpdHNfY291bnQrKzsKKyAgICAgICAgICAgICAgICAgICAg
b3ZlcmZsb3cgPj49IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGludCBkcm9wcGVkX2JpdHNfbWFzayA9ICgoMSA8PCBvdmVyZmxvd19iaXRz
X2NvdW50KSAtIDEpOworICAgICAgICAgICAgICAgIGludCBkcm9wcGVkX2JpdHMgPSBzdGF0aWNf
Y2FzdDxpbnQ+KG51bWJlcikgJiBkcm9wcGVkX2JpdHNfbWFzazsKKyAgICAgICAgICAgICAgICBu
dW1iZXIgPj49IG92ZXJmbG93X2JpdHNfY291bnQ7CisgICAgICAgICAgICAgICAgZXhwb25lbnQg
PSBvdmVyZmxvd19iaXRzX2NvdW50OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGJvb2wgemVyb190YWlsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewor
ICAgICAgICAgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgICAgICAgICAgICAgIGlmIChj
dXJyZW50ID09IGVuZCB8fCAhaXNEaWdpdCgqY3VycmVudCwgcmFkaXgpKSBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgemVyb190YWlsID0gemVyb190YWlsICYmICpjdXJyZW50ID09ICcwJzsK
KyAgICAgICAgICAgICAgICAgICAgZXhwb25lbnQgKz0gcmFkaXhfbG9nXzI7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghYWxsb3dfdHJh
aWxpbmdfanVuayAmJiBBZHZhbmNlVG9Ob25zcGFjZSgmY3VycmVudCwgZW5kKSkgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGludCBtaWRkbGVfdmFsdWUgPSAo
MSA8PCAob3ZlcmZsb3dfYml0c19jb3VudCAtIDEpKTsKKyAgICAgICAgICAgICAgICBpZiAoZHJv
cHBlZF9iaXRzID4gbWlkZGxlX3ZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIG51bWJlcisr
OyAgLy8gUm91bmRpbmcgdXAuCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkcm9wcGVkX2Jp
dHMgPT0gbWlkZGxlX3ZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFJvdW5kaW5nIHRv
IGV2ZW4gdG8gY29uc2lzdGVuY3kgd2l0aCBkZWNpbWFsczogaGFsZi13YXkgY2FzZSByb3VuZHMK
KyAgICAgICAgICAgICAgICAgICAgLy8gdXAgaWYgc2lnbmlmaWNhbnQgcGFydCBpcyBvZGQgYW5k
IGRvd24gb3RoZXJ3aXNlLgorICAgICAgICAgICAgICAgICAgICBpZiAoKG51bWJlciAmIDEpICE9
IDAgfHwgIXplcm9fdGFpbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyKys7ICAv
LyBSb3VuZGluZyB1cC4KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBSb3VuZGluZyB1cCBtYXkgY2F1
c2Ugb3ZlcmZsb3cuCisgICAgICAgICAgICAgICAgaWYgKChudW1iZXIgJiAoKGludDY0X3QpMSA8
PCA1MykpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZXhwb25lbnQrKzsKKyAgICAgICAg
ICAgICAgICAgICAgbnVtYmVyID4+PSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICsrY3VycmVudDsKKyAgICAg
ICAgfSB3aGlsZSAoY3VycmVudCAhPSBlbmQpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKG51
bWJlciA8ICgoaW50NjRfdCkxIDw8IDUzKSk7CisgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxp
bnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KG51bWJlcikpID09IG51bWJlcik7CisgICAgICAg
IAorICAgICAgICAqdHJhaWxpbmdfcG9pbnRlciA9IGN1cnJlbnQ7CisgICAgICAgIAorICAgICAg
ICBpZiAoZXhwb25lbnQgPT0gMCkgeworICAgICAgICAgICAgaWYgKHNpZ24pIHsKKyAgICAgICAg
ICAgICAgICBpZiAobnVtYmVyID09IDApIHJldHVybiAtMC4wOworICAgICAgICAgICAgICAgIG51
bWJlciA9IC1udW1iZXI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8ZG91YmxlPihudW1iZXIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBU1NF
UlQobnVtYmVyICE9IDApOworICAgICAgICByZXR1cm4gRG91YmxlKERpeUZwKG51bWJlciwgZXhw
b25lbnQpKS52YWx1ZSgpOworICAgIH0KKyAgICAKKyAgICAKKyAgICBkb3VibGUgU3RyaW5nVG9E
b3VibGVDb252ZXJ0ZXI6OlN0cmluZ1RvRG91YmxlKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogaW5wdXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBwcm9j
ZXNzZWRfY2hhcmFjdGVyc19jb3VudCkgeworICAgICAgICBjb25zdCBjaGFyKiBjdXJyZW50ID0g
aW5wdXQ7CisgICAgICAgIGNvbnN0IGNoYXIqIGVuZCA9IGlucHV0ICsgbGVuZ3RoOworICAgICAg
ICAKKyAgICAgICAgKnByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50ID0gMDsKKyAgICAgICAgCisg
ICAgICAgIGNvbnN0IGJvb2wgYWxsb3dfdHJhaWxpbmdfanVuayA9IChmbGFnc18gJiBBTExPV19U
UkFJTElOR19KVU5LKSAhPSAwOworICAgICAgICBjb25zdCBib29sIGFsbG93X2xlYWRpbmdfc3Bh
Y2VzID0gKGZsYWdzXyAmIEFMTE9XX0xFQURJTkdfU1BBQ0VTKSAhPSAwOworICAgICAgICBjb25z
dCBib29sIGFsbG93X3RyYWlsaW5nX3NwYWNlcyA9IChmbGFnc18gJiBBTExPV19UUkFJTElOR19T
UEFDRVMpICE9IDA7CisgICAgICAgIGNvbnN0IGJvb2wgYWxsb3dfc3BhY2VzX2FmdGVyX3NpZ24g
PSAoZmxhZ3NfICYgQUxMT1dfU1BBQ0VTX0FGVEVSX1NJR04pICE9IDA7CisgICAgICAgIAorICAg
ICAgICAvLyBUbyBtYWtlIHN1cmUgdGhhdCBpdGVyYXRvciBkZXJlZmVyZW5jaW5nIGlzIHZhbGlk
IHRoZSBmb2xsb3dpbmcKKyAgICAgICAgLy8gY29udmVudGlvbiBpcyB1c2VkOgorICAgICAgICAv
LyAxLiBFYWNoICcrK2N1cnJlbnQnIHN0YXRlbWVudCBpcyBmb2xsb3dlZCBieSBjaGVjayBmb3Ig
ZXF1YWxpdHkgdG8gJ2VuZCcuCisgICAgICAgIC8vIDIuIElmIEFkdmFuY2VUb05vbnNwYWNlIHJl
dHVybmVkIGZhbHNlIHRoZW4gY3VycmVudCA9PSBlbmQuCisgICAgICAgIC8vIDMuIElmICdjdXJy
ZW50JyBiZWNvbWVzIGVxdWFsIHRvICdlbmQnIHRoZSBmdW5jdGlvbiByZXR1cm5zIG9yIGdvZXMg
dG8KKyAgICAgICAgLy8gJ3BhcnNpbmdfZG9uZScuCisgICAgICAgIC8vIDQuICdjdXJyZW50JyBp
cyBub3QgZGVyZWZlcmVuY2VkIGFmdGVyIHRoZSAncGFyc2luZ19kb25lJyBsYWJlbC4KKyAgICAg
ICAgLy8gNS4gQ29kZSBiZWZvcmUgJ3BhcnNpbmdfZG9uZScgbWF5IHJlbHkgb24gJ2N1cnJlbnQg
IT0gZW5kJy4KKyAgICAgICAgaWYgKGN1cnJlbnQgPT0gZW5kKSByZXR1cm4gZW1wdHlfc3RyaW5n
X3ZhbHVlXzsKKyAgICAgICAgCisgICAgICAgIGlmIChhbGxvd19sZWFkaW5nX3NwYWNlcyB8fCBh
bGxvd190cmFpbGluZ19zcGFjZXMpIHsKKyAgICAgICAgICAgIGlmICghQWR2YW5jZVRvTm9uc3Bh
Y2UoJmN1cnJlbnQsIGVuZCkpIHsKKyAgICAgICAgICAgICAgICAqcHJvY2Vzc2VkX2NoYXJhY3Rl
cnNfY291bnQgPSBjdXJyZW50IC0gaW5wdXQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVtcHR5
X3N0cmluZ192YWx1ZV87CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWFsbG93X2xl
YWRpbmdfc3BhY2VzICYmIChpbnB1dCAhPSBjdXJyZW50KSkgeworICAgICAgICAgICAgICAgIC8v
IE5vIGxlYWRpbmcgc3BhY2VzIGFsbG93ZWQsIGJ1dCBBZHZhbmNlVG9Ob25zcGFjZSBtb3ZlZCBm
b3J3YXJkLgorICAgICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBsb25nZXN0IGZv
cm0gb2Ygc2ltcGxpZmllZCBudW1iZXIgaXM6ICItPHNpZ25pZmljYW50IGRpZ2l0cz4uMWVYWFhc
MCIuCisgICAgICAgIGNvbnN0IGludCBrQnVmZmVyU2l6ZSA9IGtNYXhTaWduaWZpY2FudERpZ2l0
cyArIDEwOworICAgICAgICBjaGFyIGJ1ZmZlcltrQnVmZmVyU2l6ZV07ICAvLyBOT0xJTlQ6IHNp
emUgaXMga25vd24gYXQgY29tcGlsZSB0aW1lLgorICAgICAgICBpbnQgYnVmZmVyX3BvcyA9IDA7
CisgICAgICAgIAorICAgICAgICAvLyBFeHBvbmVudCB3aWxsIGJlIGFkanVzdGVkIGlmIGluc2ln
bmlmaWNhbnQgZGlnaXRzIG9mIHRoZSBpbnRlZ2VyIHBhcnQKKyAgICAgICAgLy8gb3IgaW5zaWdu
aWZpY2FudCBsZWFkaW5nIHplcm9zIG9mIHRoZSBmcmFjdGlvbmFsIHBhcnQgYXJlIGRyb3BwZWQu
CisgICAgICAgIGludCBleHBvbmVudCA9IDA7CisgICAgICAgIGludCBzaWduaWZpY2FudF9kaWdp
dHMgPSAwOworICAgICAgICBpbnQgaW5zaWduaWZpY2FudF9kaWdpdHMgPSAwOworICAgICAgICBi
b29sIG5vbnplcm9fZGlnaXRfZHJvcHBlZCA9IGZhbHNlOworICAgICAgICBib29sIGZyYWN0aW9u
YWxfcGFydCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgYm9vbCBzaWduID0gZmFsc2U7Cisg
ICAgICAgIAorICAgICAgICBpZiAoKmN1cnJlbnQgPT0gJysnIHx8ICpjdXJyZW50ID09ICctJykg
eworICAgICAgICAgICAgc2lnbiA9ICgqY3VycmVudCA9PSAnLScpOworICAgICAgICAgICAgKytj
dXJyZW50OworICAgICAgICAgICAgY29uc3QgY2hhciogbmV4dF9ub25fc3BhY2UgPSBjdXJyZW50
OworICAgICAgICAgICAgLy8gU2tpcCBmb2xsb3dpbmcgc3BhY2VzIChpZiBhbGxvd2VkKS4KKyAg
ICAgICAgICAgIGlmICghQWR2YW5jZVRvTm9uc3BhY2UoJm5leHRfbm9uX3NwYWNlLCBlbmQpKSBy
ZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAgICAgICAgaWYgKCFhbGxvd19zcGFjZXNf
YWZ0ZXJfc2lnbiAmJiAoY3VycmVudCAhPSBuZXh0X25vbl9zcGFjZSkpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgY3VycmVudCA9IG5leHRfbm9uX3NwYWNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpZiAoaW5maW5pdHlfc3ltYm9sXyAhPSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoKmN1cnJl
bnQgPT0gaW5maW5pdHlfc3ltYm9sX1swXSkgeworICAgICAgICAgICAgICAgIGlmICghQ29uc3Vt
ZVN1YlN0cmluZygmY3VycmVudCwgZW5kLCBpbmZpbml0eV9zeW1ib2xfKSkgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIShhbGxvd190cmFpbGluZ19z
cGFjZXMgfHwgYWxsb3dfdHJhaWxpbmdfanVuaykgJiYgKGN1cnJlbnQgIT0gZW5kKSkgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWFsbG93X3RyYWlsaW5nX2p1bmsgJiYgQWR2YW5j
ZVRvTm9uc3BhY2UoJmN1cnJlbnQsIGVuZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGp1bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgQVNTRVJUKGJ1ZmZlcl9wb3MgPT0gMCk7CisgICAgICAgICAgICAg
ICAgKnByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50ID0gY3VycmVudCAtIGlucHV0OworICAgICAg
ICAgICAgICAgIHJldHVybiBzaWduID8gLURvdWJsZTo6SW5maW5pdHkoKSA6IERvdWJsZTo6SW5m
aW5pdHkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYg
KG5hbl9zeW1ib2xfICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGlmICgqY3VycmVudCA9PSBuYW5f
c3ltYm9sX1swXSkgeworICAgICAgICAgICAgICAgIGlmICghQ29uc3VtZVN1YlN0cmluZygmY3Vy
cmVudCwgZW5kLCBuYW5fc3ltYm9sXykpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGp1
bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgaWYgKCEoYWxsb3dfdHJhaWxpbmdfc3BhY2VzIHx8IGFsbG93X3RyYWls
aW5nX2p1bmspICYmIChjdXJyZW50ICE9IGVuZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWYgKCFhbGxvd190cmFpbGluZ19qdW5rICYmIEFkdmFuY2VUb05vbnNwYWNlKCZjdXJyZW50
LCBlbmQpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEFT
U0VSVChidWZmZXJfcG9zID09IDApOworICAgICAgICAgICAgICAgICpwcm9jZXNzZWRfY2hhcmFj
dGVyc19jb3VudCA9IGN1cnJlbnQgLSBpbnB1dDsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2ln
biA/IC1Eb3VibGU6Ok5hTigpIDogRG91YmxlOjpOYU4oKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBsZWFkaW5nX3plcm8gPSBmYWxzZTsKKyAgICAg
ICAgaWYgKCpjdXJyZW50ID09ICcwJykgeworICAgICAgICAgICAgKytjdXJyZW50OworICAgICAg
ICAgICAgaWYgKGN1cnJlbnQgPT0gZW5kKSB7CisgICAgICAgICAgICAgICAgKnByb2Nlc3NlZF9j
aGFyYWN0ZXJzX2NvdW50ID0gY3VycmVudCAtIGlucHV0OworICAgICAgICAgICAgICAgIHJldHVy
biBTaWduZWRaZXJvKHNpZ24pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBsZWFkaW5nX3plcm8gPSB0cnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBJ
dCBjb3VsZCBiZSBoZXhhZGVjaW1hbCB2YWx1ZS4KKyAgICAgICAgICAgIGlmICgoZmxhZ3NfICYg
QUxMT1dfSEVYKSAmJiAoKmN1cnJlbnQgPT0gJ3gnIHx8ICpjdXJyZW50ID09ICdYJykpIHsKKyAg
ICAgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0g
ZW5kIHx8ICFpc0RpZ2l0KCpjdXJyZW50LCAxNikpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsgIC8vICIweCIuCisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHRhaWxfcG9pbnRlciA9
IE5VTEw7CisgICAgICAgICAgICAgICAgZG91YmxlIHJlc3VsdCA9IFJhZGl4U3RyaW5nVG9Eb3Vi
bGU8ND4oY3VycmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2lnbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhbGxvd190cmFpbGluZ19qdW5rLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1bmtfc3RyaW5nX3Zh
bHVlXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmdGFpbF9wb2ludGVyKTsKKyAgICAgICAgICAgICAgICBpZiAodGFpbF9wb2ludGVyICE9
IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFsbG93X3RyYWlsaW5nX3NwYWNlcykg
QWR2YW5jZVRvTm9uc3BhY2UoJnRhaWxfcG9pbnRlciwgZW5kKTsKKyAgICAgICAgICAgICAgICAg
ICAgKnByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50ID0gdGFpbF9wb2ludGVyIC0gaW5wdXQ7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIElnbm9yZSBsZWFkaW5nIHplcm9z
IGluIHRoZSBpbnRlZ2VyIHBhcnQuCisgICAgICAgICAgICB3aGlsZSAoKmN1cnJlbnQgPT0gJzAn
KSB7CisgICAgICAgICAgICAgICAgKytjdXJyZW50OworICAgICAgICAgICAgICAgIGlmIChjdXJy
ZW50ID09IGVuZCkgeworICAgICAgICAgICAgICAgICAgICAqcHJvY2Vzc2VkX2NoYXJhY3RlcnNf
Y291bnQgPSBjdXJyZW50IC0gaW5wdXQ7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBTaWdu
ZWRaZXJvKHNpZ24pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgYm9vbCBvY3RhbCA9IGxlYWRpbmdfemVybyAmJiAoZmxhZ3Nf
ICYgQUxMT1dfT0NUQUxTKSAhPSAwOworICAgICAgICAKKyAgICAgICAgLy8gQ29weSBzaWduaWZp
Y2FudCBkaWdpdHMgb2YgdGhlIGludGVnZXIgcGFydCAoaWYgYW55KSB0byB0aGUgYnVmZmVyLgor
ICAgICAgICB3aGlsZSAoKmN1cnJlbnQgPj0gJzAnICYmICpjdXJyZW50IDw9ICc5JykgeworICAg
ICAgICAgICAgaWYgKHNpZ25pZmljYW50X2RpZ2l0cyA8IGtNYXhTaWduaWZpY2FudERpZ2l0cykg
eworICAgICAgICAgICAgICAgIEFTU0VSVChidWZmZXJfcG9zIDwga0J1ZmZlclNpemUpOworICAg
ICAgICAgICAgICAgIGJ1ZmZlcltidWZmZXJfcG9zKytdID0gc3RhdGljX2Nhc3Q8Y2hhcj4oKmN1
cnJlbnQpOworICAgICAgICAgICAgICAgIHNpZ25pZmljYW50X2RpZ2l0cysrOworICAgICAgICAg
ICAgICAgIC8vIFdpbGwgbGF0ZXIgY2hlY2sgaWYgaXQncyBhbiBvY3RhbCBpbiB0aGUgYnVmZmVy
LgorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbnNpZ25pZmljYW50X2Rp
Z2l0cysrOyAgLy8gTW92ZSB0aGUgZGlnaXQgaW50byB0aGUgZXhwb25lbnRpYWwgcGFydC4KKyAg
ICAgICAgICAgICAgICBub256ZXJvX2RpZ2l0X2Ryb3BwZWQgPSBub256ZXJvX2RpZ2l0X2Ryb3Bw
ZWQgfHwgKmN1cnJlbnQgIT0gJzAnOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb2N0YWwg
PSBvY3RhbCAmJiAqY3VycmVudCA8ICc4JzsKKyAgICAgICAgICAgICsrY3VycmVudDsKKyAgICAg
ICAgICAgIGlmIChjdXJyZW50ID09IGVuZCkgZ290byBwYXJzaW5nX2RvbmU7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGlmIChzaWduaWZpY2FudF9kaWdpdHMgPT0gMCkgeworICAgICAg
ICAgICAgb2N0YWwgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCpj
dXJyZW50ID09ICcuJykgeworICAgICAgICAgICAgaWYgKG9jdGFsICYmICFhbGxvd190cmFpbGlu
Z19qdW5rKSByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAgICAgICAgaWYgKG9jdGFs
KSBnb3RvIHBhcnNpbmdfZG9uZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgKytjdXJyZW50
OworICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gZW5kKSB7CisgICAgICAgICAgICAgICAgaWYg
KHNpZ25pZmljYW50X2RpZ2l0cyA9PSAwICYmICFsZWFkaW5nX3plcm8pIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICBnb3RvIHBhcnNpbmdfZG9uZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzaWdu
aWZpY2FudF9kaWdpdHMgPT0gMCkgeworICAgICAgICAgICAgICAgIC8vIG9jdGFsID0gZmFsc2U7
CisgICAgICAgICAgICAgICAgLy8gSW50ZWdlciBwYXJ0IGNvbnNpc3RzIG9mIDAgb3IgaXMgYWJz
ZW50LiBTaWduaWZpY2FudCBkaWdpdHMgc3RhcnQgYWZ0ZXIKKyAgICAgICAgICAgICAgICAvLyBs
ZWFkaW5nIHplcm9zIChpZiBhbnkpLgorICAgICAgICAgICAgICAgIHdoaWxlICgqY3VycmVudCA9
PSAnMCcpIHsKKyAgICAgICAgICAgICAgICAgICAgKytjdXJyZW50OworICAgICAgICAgICAgICAg
ICAgICBpZiAoY3VycmVudCA9PSBlbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpwcm9j
ZXNzZWRfY2hhcmFjdGVyc19jb3VudCA9IGN1cnJlbnQgLSBpbnB1dDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBTaWduZWRaZXJvKHNpZ24pOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGV4cG9uZW50LS07ICAvLyBNb3ZlIHRoaXMgMCBpbnRvIHRo
ZSBleHBvbmVudC4KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIC8vIFdlIGRvbid0IGVtaXQgYSAnLicsIGJ1dCBhZGp1c3QgdGhlIGV4
cG9uZW50IGluc3RlYWQuCisgICAgICAgICAgICBmcmFjdGlvbmFsX3BhcnQgPSB0cnVlOworICAg
ICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGVyZSBpcyBhIGZyYWN0aW9uYWwgcGFydC4KKyAg
ICAgICAgICAgIHdoaWxlICgqY3VycmVudCA+PSAnMCcgJiYgKmN1cnJlbnQgPD0gJzknKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHNpZ25pZmljYW50X2RpZ2l0cyA8IGtNYXhTaWduaWZpY2FudERp
Z2l0cykgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYnVmZmVyX3BvcyA8IGtCdWZmZXJT
aXplKTsKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2J1ZmZlcl9wb3MrK10gPSBzdGF0aWNf
Y2FzdDxjaGFyPigqY3VycmVudCk7CisgICAgICAgICAgICAgICAgICAgIHNpZ25pZmljYW50X2Rp
Z2l0cysrOworICAgICAgICAgICAgICAgICAgICBleHBvbmVudC0tOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSBpbnNpZ25pZmljYW50IGRp
Z2l0cyBpbiB0aGUgZnJhY3Rpb25hbCBwYXJ0LgorICAgICAgICAgICAgICAgICAgICBub256ZXJv
X2RpZ2l0X2Ryb3BwZWQgPSBub256ZXJvX2RpZ2l0X2Ryb3BwZWQgfHwgKmN1cnJlbnQgIT0gJzAn
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAg
ICAgICAgICAgaWYgKGN1cnJlbnQgPT0gZW5kKSBnb3RvIHBhcnNpbmdfZG9uZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFsZWFkaW5nX3plcm8gJiYg
ZXhwb25lbnQgPT0gMCAmJiBzaWduaWZpY2FudF9kaWdpdHMgPT0gMCkgeworICAgICAgICAgICAg
Ly8gSWYgbGVhZGluZ196ZXJvcyBpcyB0cnVlIHRoZW4gdGhlIHN0cmluZyBjb250YWlucyB6ZXJv
cy4KKyAgICAgICAgICAgIC8vIElmIGV4cG9uZW50IDwgMCB0aGVuIHN0cmluZyB3YXMgWystXVwu
MCouLi4KKyAgICAgICAgICAgIC8vIElmIHNpZ25pZmljYW50X2RpZ2l0cyAhPSAwIHRoZSBzdHJp
bmcgaXMgbm90IGVxdWFsIHRvIDAuCisgICAgICAgICAgICAvLyBPdGhlcndpc2UgdGhlcmUgYXJl
IG5vIGRpZ2l0cyBpbiB0aGUgc3RyaW5nLgorICAgICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5n
X3ZhbHVlXzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gUGFyc2UgZXhwb25lbnRp
YWwgcGFydC4KKyAgICAgICAgaWYgKCpjdXJyZW50ID09ICdlJyB8fCAqY3VycmVudCA9PSAnRScp
IHsKKyAgICAgICAgICAgIGlmIChvY3RhbCAmJiAhYWxsb3dfdHJhaWxpbmdfanVuaykgcmV0dXJu
IGp1bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgICAgIGlmIChvY3RhbCkgZ290byBwYXJzaW5n
X2RvbmU7CisgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgICAgICBpZiAoY3VycmVudCA9
PSBlbmQpIHsKKyAgICAgICAgICAgICAgICBpZiAoYWxsb3dfdHJhaWxpbmdfanVuaykgeworICAg
ICAgICAgICAgICAgICAgICBnb3RvIHBhcnNpbmdfZG9uZTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNoYXIgc2lnbiA9ICcr
JzsKKyAgICAgICAgICAgIGlmICgqY3VycmVudCA9PSAnKycgfHwgKmN1cnJlbnQgPT0gJy0nKSB7
CisgICAgICAgICAgICAgICAgc2lnbiA9IHN0YXRpY19jYXN0PGNoYXI+KCpjdXJyZW50KTsKKyAg
ICAgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0g
ZW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChhbGxvd190cmFpbGluZ19qdW5rKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHBhcnNpbmdfZG9uZTsKKyAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0cmlu
Z192YWx1ZV87CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChjdXJyZW50ID09IGVuZCB8
fCAqY3VycmVudCA8ICcwJyB8fCAqY3VycmVudCA+ICc5JykgeworICAgICAgICAgICAgICAgIGlm
IChhbGxvd190cmFpbGluZ19qdW5rKSB7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gcGFyc2lu
Z19kb25lOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBqdW5rX3N0cmluZ192YWx1ZV87CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gSU5U
X01BWCAvIDI7CisgICAgICAgICAgICBBU1NFUlQoLW1heF9leHBvbmVudCAvIDIgPD0gZXhwb25l
bnQgJiYgZXhwb25lbnQgPD0gbWF4X2V4cG9uZW50IC8gMik7CisgICAgICAgICAgICBpbnQgbnVt
ID0gMDsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAvLyBDaGVjayBvdmVyZmxv
dy4KKyAgICAgICAgICAgICAgICBpbnQgZGlnaXQgPSAqY3VycmVudCAtICcwJzsKKyAgICAgICAg
ICAgICAgICBpZiAobnVtID49IG1heF9leHBvbmVudCAvIDEwCisgICAgICAgICAgICAgICAgICAg
ICYmICEobnVtID09IG1heF9leHBvbmVudCAvIDEwICYmIGRpZ2l0IDw9IG1heF9leHBvbmVudCAl
IDEwKSkgeworICAgICAgICAgICAgICAgICAgICBudW0gPSBtYXhfZXhwb25lbnQ7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbnVtID0gbnVtICogMTAgKyBk
aWdpdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKytjdXJyZW50OworICAg
ICAgICAgICAgfSB3aGlsZSAoY3VycmVudCAhPSBlbmQgJiYgKmN1cnJlbnQgPj0gJzAnICYmICpj
dXJyZW50IDw9ICc5Jyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGV4cG9uZW50ICs9IChz
aWduID09ICctJyA/IC1udW0gOiBudW0pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBp
ZiAoIShhbGxvd190cmFpbGluZ19zcGFjZXMgfHwgYWxsb3dfdHJhaWxpbmdfanVuaykgJiYgKGN1
cnJlbnQgIT0gZW5kKSkgeworICAgICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsK
KyAgICAgICAgfQorICAgICAgICBpZiAoIWFsbG93X3RyYWlsaW5nX2p1bmsgJiYgQWR2YW5jZVRv
Tm9uc3BhY2UoJmN1cnJlbnQsIGVuZCkpIHsKKyAgICAgICAgICAgIHJldHVybiBqdW5rX3N0cmlu
Z192YWx1ZV87CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFsbG93X3RyYWlsaW5nX3NwYWNlcykg
eworICAgICAgICAgICAgQWR2YW5jZVRvTm9uc3BhY2UoJmN1cnJlbnQsIGVuZCk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgcGFyc2luZ19kb25lOgorICAgICAgICBleHBvbmVudCArPSBpbnNp
Z25pZmljYW50X2RpZ2l0czsKKyAgICAgICAgCisgICAgICAgIGlmIChvY3RhbCkgeworICAgICAg
ICAgICAgZG91YmxlIHJlc3VsdDsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIHRhaWxfcG9pbnRl
ciA9IE5VTEw7CisgICAgICAgICAgICByZXN1bHQgPSBSYWRpeFN0cmluZ1RvRG91YmxlPDM+KGJ1
ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVy
ICsgYnVmZmVyX3BvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2lnbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxs
b3dfdHJhaWxpbmdfanVuaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAganVua19zdHJpbmdfdmFsdWVfLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmdGFpbF9wb2ludGVyKTsKKyAgICAgICAgICAgIEFTU0VSVCh0YWlsX3Bv
aW50ZXIgIT0gTlVMTCk7CisgICAgICAgICAgICAqcHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291bnQg
PSBjdXJyZW50IC0gaW5wdXQ7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBpZiAobm9uemVyb19kaWdpdF9kcm9wcGVkKSB7CisgICAgICAg
ICAgICBidWZmZXJbYnVmZmVyX3BvcysrXSA9ICcxJzsKKyAgICAgICAgICAgIGV4cG9uZW50LS07
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFTU0VSVChidWZmZXJfcG9zIDwga0J1ZmZl
clNpemUpOworICAgICAgICBidWZmZXJbYnVmZmVyX3Bvc10gPSAnXDAnOworICAgICAgICAKKyAg
ICAgICAgZG91YmxlIGNvbnZlcnRlZCA9IFN0cnRvZChWZWN0b3I8Y29uc3QgY2hhcj4oYnVmZmVy
LCBidWZmZXJfcG9zKSwgZXhwb25lbnQpOworICAgICAgICAqcHJvY2Vzc2VkX2NoYXJhY3RlcnNf
Y291bnQgPSBjdXJyZW50IC0gaW5wdXQ7CisgICAgICAgIHJldHVybiBzaWduPyAtY29udmVydGVk
OiBjb252ZXJ0ZWQ7CisgICAgfQorICAgIAorfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJz
aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZG91YmxlLWNv
bnZlcnNpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kb3VibGUtY29udmVy
c2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjQ1YzMwZDc5MGM2ZjRkNjgzZjk2MzI3YjdiNTE3ZjllNmZiMDUw
ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZG91
YmxlLWNvbnZlcnNpb24uaApAQCAtMCwwICsxLDQ5OCBAQAorLy8gQ29weXJpZ2h0IDIwMTAgdGhl
IFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
Ly8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
Ky8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8v
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCisjaWZuZGVmIERPVUJMRV9DT05WRVJTSU9OX0RPVUJMRV9DT05WRVJTSU9OX0hfCisj
ZGVmaW5lIERPVUJMRV9DT05WRVJTSU9OX0RPVUJMRV9DT05WRVJTSU9OX0hfCisKKyNpbmNsdWRl
ICJ1dGlscy5oIgorCituYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIGNs
YXNzIERvdWJsZVRvU3RyaW5nQ29udmVydGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIC8vIFdo
ZW4gY2FsbGluZyBUb0ZpeGVkIHdpdGggYSBkb3VibGUgPiAxMF5rTWF4Rml4ZWREaWdpdHNCZWZv
cmVQb2ludAorICAgICAgICAvLyBvciBhIHJlcXVlc3RlZF9kaWdpdHMgcGFyYW1ldGVyID4ga01h
eEZpeGVkRGlnaXRzQWZ0ZXJQb2ludCB0aGVuIHRoZQorICAgICAgICAvLyBmdW5jdGlvbiByZXR1
cm5zIGZhbHNlLgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtNYXhGaXhlZERpZ2l0c0JlZm9y
ZVBvaW50ID0gNjA7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQga01heEZpeGVkRGlnaXRzQWZ0
ZXJQb2ludCA9IDYwOworICAgICAgICAKKyAgICAgICAgLy8gV2hlbiBjYWxsaW5nIFRvRXhwb25l
bnRpYWwgd2l0aCBhIHJlcXVlc3RlZF9kaWdpdHMKKyAgICAgICAgLy8gcGFyYW1ldGVyID4ga01h
eEV4cG9uZW50aWFsRGlnaXRzIHRoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UuCisgICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQga01heEV4cG9uZW50aWFsRGlnaXRzID0gMTIwOworICAgICAg
ICAKKyAgICAgICAgLy8gV2hlbiBjYWxsaW5nIFRvUHJlY2lzaW9uIHdpdGggYSByZXF1ZXN0ZWRf
ZGlnaXRzCisgICAgICAgIC8vIHBhcmFtZXRlciA8IGtNaW5QcmVjaXNpb25EaWdpdHMgb3IgcmVx
dWVzdGVkX2RpZ2l0cyA+IGtNYXhQcmVjaXNpb25EaWdpdHMKKyAgICAgICAgLy8gdGhlbiB0aGUg
ZnVuY3Rpb24gcmV0dXJucyBmYWxzZS4KKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBrTWluUHJl
Y2lzaW9uRGlnaXRzID0gMTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBrTWF4UHJlY2lzaW9u
RGlnaXRzID0gMTIwOworICAgICAgICAKKyAgICAgICAgZW51bSBGbGFncyB7CisgICAgICAgICAg
ICBOT19GTEFHUyA9IDAsCisgICAgICAgICAgICBFTUlUX1BPU0lUSVZFX0VYUE9ORU5UX1NJR04g
PSAxLAorICAgICAgICAgICAgRU1JVF9UUkFJTElOR19ERUNJTUFMX1BPSU5UID0gMiwKKyAgICAg
ICAgICAgIEVNSVRfVFJBSUxJTkdfWkVST19BRlRFUl9QT0lOVCA9IDQsCisgICAgICAgICAgICBV
TklRVUVfWkVSTyA9IDgKKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIC8vIEZsYWdzIHNo
b3VsZCBiZSBhIGJpdC1vciBjb21iaW5hdGlvbiBvZiB0aGUgcG9zc2libGUgRmxhZ3MtZW51bS4K
KyAgICAgICAgLy8gIC0gTk9fRkxBR1M6IG5vIHNwZWNpYWwgZmxhZ3MuCisgICAgICAgIC8vICAt
IEVNSVRfUE9TSVRJVkVfRVhQT05FTlRfU0lHTjogd2hlbiB0aGUgbnVtYmVyIGlzIGNvbnZlcnRl
ZCBpbnRvIGV4cG9uZW50CisgICAgICAgIC8vICAgIGZvcm0sIGVtaXRzIGEgJysnIGZvciBwb3Np
dGl2ZSBleHBvbmVudHMuIEV4YW1wbGU6IDEuMmUrMi4KKyAgICAgICAgLy8gIC0gRU1JVF9UUkFJ
TElOR19ERUNJTUFMX1BPSU5UOiB3aGVuIHRoZSBpbnB1dCBudW1iZXIgaXMgYW4gaW50ZWdlciBh
bmQgaXMKKyAgICAgICAgLy8gICAgY29udmVydGVkIGludG8gZGVjaW1hbCBmb3JtYXQgdGhlbiBh
IHRyYWlsaW5nIGRlY2ltYWwgcG9pbnQgaXMgYXBwZW5kZWQuCisgICAgICAgIC8vICAgIEV4YW1w
bGU6IDIzNDUuMCBpcyBjb252ZXJ0ZWQgdG8gIjIzNDUuIi4KKyAgICAgICAgLy8gIC0gRU1JVF9U
UkFJTElOR19aRVJPX0FGVEVSX1BPSU5UOiBpbiBhZGRpdGlvbiB0byBhIHRyYWlsaW5nIGRlY2lt
YWwgcG9pbnQKKyAgICAgICAgLy8gICAgZW1pdHMgYSB0cmFpbGluZyAnMCctY2hhcmFjdGVyLiBU
aGlzIGZsYWcgcmVxdWlyZXMgdGhlCisgICAgICAgIC8vICAgIEVYTUlUX1RSQUlMSU5HX0RFQ0lN
QUxfUE9JTlQgZmxhZy4KKyAgICAgICAgLy8gICAgRXhhbXBsZTogMjM0NS4wIGlzIGNvbnZlcnRl
ZCB0byAiMjM0NS4wIi4KKyAgICAgICAgLy8gIC0gVU5JUVVFX1pFUk86ICItMC4wIiBpcyBjb252
ZXJ0ZWQgdG8gIjAuMCIuCisgICAgICAgIC8vCisgICAgICAgIC8vIEluZmluaXR5IHN5bWJvbCBh
bmQgbmFuX3N5bWJvbCBwcm92aWRlIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHRoZXNl
CisgICAgICAgIC8vIHNwZWNpYWwgdmFsdWVzLiBJZiB0aGUgc3RyaW5nIGlzIE5VTEwgYW5kIHRo
ZSBzcGVjaWFsIHZhbHVlIGlzIGVuY291bnRlcmVkCisgICAgICAgIC8vIHRoZW4gdGhlIGNvbnZl
cnNpb24gZnVuY3Rpb25zIHJldHVybiBmYWxzZS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhl
IGV4cG9uZW50X2NoYXJhY3RlciBpcyB1c2VkIGluIGV4cG9uZW50aWFsIHJlcHJlc2VudGF0aW9u
cy4gSXQgaXMKKyAgICAgICAgLy8gdXN1YWxseSAnZScgb3IgJ0UnLgorICAgICAgICAvLworICAg
ICAgICAvLyBXaGVuIGNvbnZlcnRpbmcgdG8gdGhlIHNob3J0ZXN0IHJlcHJlc2VudGF0aW9uIHRo
ZSBjb252ZXJ0ZXIgd2lsbAorICAgICAgICAvLyByZXByZXNlbnQgaW5wdXQgbnVtYmVycyBpbiBk
ZWNpbWFsIGZvcm1hdCBpZiB0aGV5IGFyZSBpbiB0aGUgaW50ZXJ2YWwKKyAgICAgICAgLy8gWzEw
XmRlY2ltYWxfaW5fc2hvcnRlc3RfbG93OyAxMF5kZWNpbWFsX2luX3Nob3J0ZXN0X2hpZ2hbCisg
ICAgICAgIC8vICAgIChsb3dlciBib3VuZGFyeSBpbmNsdWRlZCwgZ3JlYXRlciBib3VuZGFyeSBl
eGNsdWRlZCkuCisgICAgICAgIC8vIEV4YW1wbGU6IHdpdGggZGVjaW1hbF9pbl9zaG9ydGVzdF9s
b3cgPSAtNiBhbmQKKyAgICAgICAgLy8gICAgICAgICAgICAgICBkZWNpbWFsX2luX3Nob3J0ZXN0
X2hpZ2ggPSAyMToKKyAgICAgICAgLy8gICBUb1Nob3J0ZXN0KDAuMDAwMDAxKSAgLT4gIjAuMDAw
MDAxIgorICAgICAgICAvLyAgIFRvU2hvcnRlc3QoMC4wMDAwMDAxKSAtPiAiMWUtNyIKKyAgICAg
ICAgLy8gICBUb1Nob3J0ZXN0KDExMTExMTExMTExMTExMTExMTExMS4wKSAgLT4gIjExMTExMTEx
MTExMTExMTExMDAwMCIKKyAgICAgICAgLy8gICBUb1Nob3J0ZXN0KDEwMDAwMDAwMDAwMDAwMDAw
MDAwMC4wKSAgLT4gIjEwMDAwMDAwMDAwMDAwMDAwMDAwMCIKKyAgICAgICAgLy8gICBUb1Nob3J0
ZXN0KDExMTExMTExMTExMTExMTExMTExMTEuMCkgLT4gIjEuMTExMTExMTExMTExMTExMWUrMjEi
CisgICAgICAgIC8vCisgICAgICAgIC8vIFdoZW4gY29udmVydGluZyB0byBwcmVjaXNpb24gbW9k
ZSB0aGUgY29udmVydGVyIG1heSBhZGQKKyAgICAgICAgLy8gbWF4X2xlYWRpbmdfcGFkZGluZ196
ZXJvZXMgYmVmb3JlIHJldHVybmluZyB0aGUgbnVtYmVyIGluIGV4cG9uZW50aWFsCisgICAgICAg
IC8vIGZvcm1hdC4KKyAgICAgICAgLy8gRXhhbXBsZSB3aXRoIG1heF9sZWFkaW5nX3BhZGRpbmdf
emVyb2VzX2luX3ByZWNpc2lvbl9tb2RlID0gNi4KKyAgICAgICAgLy8gICBUb1ByZWNpc2lvbigw
LjAwMDAwMTIzNDUsIDIpIC0+ICIwLjAwMDAwMTIiCisgICAgICAgIC8vICAgVG9QcmVjaXNpb24o
MC4wMDAwMDAxMjM0NSwgMikgLT4gIjEuMmUtNyIKKyAgICAgICAgLy8gU2ltaWxhcmlseSB0aGUg
Y29udmVydGVyIG1heSBhZGQgdXAgdG8KKyAgICAgICAgLy8gbWF4X3RyYWlsaW5nX3BhZGRpbmdf
emVyb2VzX2luX3ByZWNpc2lvbl9tb2RlIGluIHByZWNpc2lvbiBtb2RlIHRvIGF2b2lkCisgICAg
ICAgIC8vIHJldHVybmluZyBhbiBleHBvbmVudGlhbCByZXByZXNlbnRhdGlvbi4gQSB6ZXJvIGFk
ZGVkIGJ5IHRoZQorICAgICAgICAvLyBFTUlUX1RSQUlMSU5HX1pFUk9fQUZURVJfUE9JTlQgZmxh
ZyBpcyBjb3VudGVkIGZvciB0aGlzIGxpbWl0LgorICAgICAgICAvLyBFeGFtcGxlcyBmb3IgbWF4
X3RyYWlsaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2RlID0gMToKKyAgICAgICAg
Ly8gICBUb1ByZWNpc2lvbigyMzAuMCwgMikgLT4gIjIzMCIKKyAgICAgICAgLy8gICBUb1ByZWNp
c2lvbigyMzAuMCwgMikgLT4gIjIzMC4iICB3aXRoIEVNSVRfVFJBSUxJTkdfREVDSU1BTF9QT0lO
VC4KKyAgICAgICAgLy8gICBUb1ByZWNpc2lvbigyMzAuMCwgMikgLT4gIjIuM2UyIiB3aXRoIEVN
SVRfVFJBSUxJTkdfWkVST19BRlRFUl9QT0lOVC4KKyAgICAgICAgRG91YmxlVG9TdHJpbmdDb252
ZXJ0ZXIoaW50IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyKiBpbmZpbml0eV9zeW1ib2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIqIG5hbl9zeW1ib2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo
YXIgZXhwb25lbnRfY2hhcmFjdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgZGVjaW1hbF9pbl9zaG9ydGVzdF9sb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBkZWNpbWFsX2luX3Nob3J0ZXN0X2hpZ2gsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBtYXhfbGVhZGluZ19wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9k
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1heF90cmFpbGluZ19wYWRk
aW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZSkKKyAgICAgICAgOiBmbGFnc18oZmxhZ3MpLAor
ICAgICAgICBpbmZpbml0eV9zeW1ib2xfKGluZmluaXR5X3N5bWJvbCksCisgICAgICAgIG5hbl9z
eW1ib2xfKG5hbl9zeW1ib2wpLAorICAgICAgICBleHBvbmVudF9jaGFyYWN0ZXJfKGV4cG9uZW50
X2NoYXJhY3RlciksCisgICAgICAgIGRlY2ltYWxfaW5fc2hvcnRlc3RfbG93XyhkZWNpbWFsX2lu
X3Nob3J0ZXN0X2xvdyksCisgICAgICAgIGRlY2ltYWxfaW5fc2hvcnRlc3RfaGlnaF8oZGVjaW1h
bF9pbl9zaG9ydGVzdF9oaWdoKSwKKyAgICAgICAgbWF4X2xlYWRpbmdfcGFkZGluZ196ZXJvZXNf
aW5fcHJlY2lzaW9uX21vZGVfKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWF4X2xlYWRpbmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9u
X21vZGUpLAorICAgICAgICBtYXhfdHJhaWxpbmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9u
X21vZGVfKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1heF90cmFpbGluZ19wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZSkgewor
ICAgICAgICAgICAgLy8gV2hlbiAndHJhaWxpbmcgemVybyBhZnRlciB0aGUgcG9pbnQnIGlzIHNl
dCwgdGhlbiAndHJhaWxpbmcgcG9pbnQnCisgICAgICAgICAgICAvLyBtdXN0IGJlIHNldCB0b28u
CisgICAgICAgICAgICBBU1NFUlQoKChmbGFncyAmIEVNSVRfVFJBSUxJTkdfREVDSU1BTF9QT0lO
VCkgIT0gMCkgfHwKKyAgICAgICAgICAgICAgICAgICAhKChmbGFncyAmIEVNSVRfVFJBSUxJTkdf
WkVST19BRlRFUl9QT0lOVCkgIT0gMCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAv
LyBSZXR1cm5zIGEgY29udmVydGVyIGZvbGxvd2luZyB0aGUgRWNtYVNjcmlwdCBzcGVjaWZpY2F0
aW9uLgorICAgICAgICBzdGF0aWMgY29uc3QgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXImIEVjbWFT
Y3JpcHRDb252ZXJ0ZXIoKTsKKyAgICAgICAgCisgICAgICAgIC8vIENvbXB1dGVzIHRoZSBzaG9y
dGVzdCBzdHJpbmcgb2YgZGlnaXRzIHRoYXQgY29ycmVjdGx5IHJlcHJlc2VudCB0aGUgaW5wdXQK
KyAgICAgICAgLy8gbnVtYmVyLiBEZXBlbmRpbmcgb24gZGVjaW1hbF9pbl9zaG9ydGVzdF9sb3cg
YW5kIGRlY2ltYWxfaW5fc2hvcnRlc3RfaGlnaAorICAgICAgICAvLyAoc2VlIGNvbnN0cnVjdG9y
KSBpdCB0aGVuIGVpdGhlciByZXR1cm5zIGEgZGVjaW1hbCByZXByZXNlbnRhdGlvbiwgb3IgYW4K
KyAgICAgICAgLy8gZXhwb25lbnRpYWwgcmVwcmVzZW50YXRpb24uCisgICAgICAgIC8vIEV4YW1w
bGUgd2l0aCBkZWNpbWFsX2luX3Nob3J0ZXN0X2xvdyA9IC02LAorICAgICAgICAvLyAgICAgICAg
ICAgICAgZGVjaW1hbF9pbl9zaG9ydGVzdF9oaWdoID0gMjEsCisgICAgICAgIC8vICAgICAgICAg
ICAgICBFTUlUX1BPU0lUSVZFX0VYUE9ORU5UX1NJR04gYWN0aXZhdGVkLCBhbmQKKyAgICAgICAg
Ly8gICAgICAgICAgICAgIEVNSVRfVFJBSUxJTkdfREVDSU1BTF9QT0lOVCBkZWFjdGl2ZWQ6Cisg
ICAgICAgIC8vICAgVG9TaG9ydGVzdCgwLjAwMDAwMSkgIC0+ICIwLjAwMDAwMSIKKyAgICAgICAg
Ly8gICBUb1Nob3J0ZXN0KDAuMDAwMDAwMSkgLT4gIjFlLTciCisgICAgICAgIC8vICAgVG9TaG9y
dGVzdCgxMTExMTExMTExMTExMTExMTExMTEuMCkgIC0+ICIxMTExMTExMTExMTExMTExMTAwMDAi
CisgICAgICAgIC8vICAgVG9TaG9ydGVzdCgxMDAwMDAwMDAwMDAwMDAwMDAwMDAuMCkgIC0+ICIx
MDAwMDAwMDAwMDAwMDAwMDAwMDAiCisgICAgICAgIC8vICAgVG9TaG9ydGVzdCgxMTExMTExMTEx
MTExMTExMTExMTExLjApIC0+ICIxLjExMTExMTExMTExMTExMTFlKzIxIgorICAgICAgICAvLwor
ICAgICAgICAvLyBOb3RlOiB0aGUgY29udmVyc2lvbiBtYXkgcm91bmQgdGhlIG91dHB1dCBpZiB0
aGUgcmV0dXJuZWQgc3RyaW5nCisgICAgICAgIC8vIGlzIGFjY3VyYXRlIGVub3VnaCB0byB1bmlx
dWVseSBpZGVudGlmeSB0aGUgaW5wdXQtbnVtYmVyLgorICAgICAgICAvLyBGb3IgZXhhbXBsZSB0
aGUgbW9zdCBwcmVjaXNlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkb3VibGUgOWU1OSBlcXVhbHMK
KyAgICAgICAgLy8gIjg5OTk5OTk5OTk5OTk5OTkxODc2NzIyOTQ0OTcxNzYxOTk1MzgxMDEzMTI3
MzY3NDY5MDY1NjIwNjg0OCIsIGJ1dAorICAgICAgICAvLyB0aGUgY29udmVydGVyIHdpbGwgcmV0
dXJuIHRoZSBzaG9ydGVyIChidXQgc3RpbGwgY29ycmVjdCkgIjllNTkiLgorICAgICAgICAvLwor
ICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbnZlcnNpb24gc3VjY2VlZHMuIFRoZSBj
b252ZXJzaW9uIGFsd2F5cyBzdWNjZWVkcworICAgICAgICAvLyBleGNlcHQgd2hlbiB0aGUgaW5w
dXQgdmFsdWUgaXMgc3BlY2lhbCBhbmQgbm8gaW5maW5pdHlfc3ltYm9sIG9yCisgICAgICAgIC8v
IG5hbl9zeW1ib2wgaGFzIGJlZW4gZ2l2ZW4gdG8gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICBi
b29sIFRvU2hvcnRlc3QoZG91YmxlIHZhbHVlLCBTdHJpbmdCdWlsZGVyKiByZXN1bHRfYnVpbGRl
cikgY29uc3Q7CisgICAgICAgIAorICAgICAgICAKKyAgICAgICAgLy8gQ29tcHV0ZXMgYSBkZWNp
bWFsIHJlcHJlc2VudGF0aW9uIHdpdGggYSBmaXhlZCBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIHRo
ZQorICAgICAgICAvLyBkZWNpbWFsIHBvaW50LiBUaGUgbGFzdCBlbWl0dGVkIGRpZ2l0IGlzIHJv
dW5kZWQuCisgICAgICAgIC8vCisgICAgICAgIC8vIEV4YW1wbGVzOgorICAgICAgICAvLyAgIFRv
Rml4ZWQoMy4xMiwgMSkgLT4gIjMuMSIKKyAgICAgICAgLy8gICBUb0ZpeGVkKDMuMTQxNSwgMykg
LT4gIjMuMTQyIgorICAgICAgICAvLyAgIFRvRml4ZWQoMTIzNC41Njc4OSwgNCkgLT4gIjEyMzQu
NTY3OSIKKyAgICAgICAgLy8gICBUb0ZpeGVkKDEuMjMsIDUpIC0+ICIxLjIzMDAwIgorICAgICAg
ICAvLyAgIFRvRml4ZWQoMC4xLCA0KSAtPiAiMC4xMDAwIgorICAgICAgICAvLyAgIFRvRml4ZWQo
MWUzMCwgMikgLT4gIjEwMDAwMDAwMDAwMDAwMDAwMTk4ODQ2MjQ4Mzg2NTYuMDAiCisgICAgICAg
IC8vICAgVG9GaXhlZCgwLjEsIDMwKSAtPiAiMC4xMDAwMDAwMDAwMDAwMDAwMDU1NTExMTUxMjMx
MjYiCisgICAgICAgIC8vICAgVG9GaXhlZCgwLjEsIDE3KSAtPiAiMC4xMDAwMDAwMDAwMDAwMDAw
MSIKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgcmVxdWVzdGVkX2RpZ2l0cyBlcXVhbHMgMCwg
dGhlbiB0aGUgdGFpbCBvZiB0aGUgcmVzdWx0IGRlcGVuZHMgb24KKyAgICAgICAgLy8gdGhlIEVN
SVRfVFJBSUxJTkdfREVDSU1BTF9QT0lOVCBhbmQgRU1JVF9UUkFJTElOR19aRVJPX0FGVEVSX1BP
SU5ULgorICAgICAgICAvLyBFeGFtcGxlcywgZm9yIHJlcXVlc3RlZF9kaWdpdHMgPT0gMCwKKyAg
ICAgICAgLy8gICBsZXQgRU1JVF9UUkFJTElOR19ERUNJTUFMX1BPSU5UIGFuZCBFTUlUX1RSQUlM
SU5HX1pFUk9fQUZURVJfUE9JTlQgYmUKKyAgICAgICAgLy8gICAgLSBmYWxzZSBhbmQgZmFsc2U6
IHRoZW4gMTIzLjQ1IC0+IDEyMworICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMC42NzggLT4gMQorICAgICAgICAvLyAgICAtIHRydWUgYW5kIGZhbHNlOiB0aGVuIDEyMy40
NSAtPiAxMjMuCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNjc4IC0+
IDEuCisgICAgICAgIC8vICAgIC0gdHJ1ZSBhbmQgdHJ1ZTogdGhlbiAxMjMuNDUgLT4gMTIzLjAK
KyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAwLjY3OCAtPiAxLjAKKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb252ZXJzaW9uIHN1Y2NlZWRz
LiBUaGUgY29udmVyc2lvbiBhbHdheXMgc3VjY2VlZHMKKyAgICAgICAgLy8gZXhjZXB0IGZvciB0
aGUgZm9sbG93aW5nIGNhc2VzOgorICAgICAgICAvLyAgIC0gdGhlIGlucHV0IHZhbHVlIGlzIHNw
ZWNpYWwgYW5kIG5vIGluZmluaXR5X3N5bWJvbCBvciBuYW5fc3ltYm9sIGhhcworICAgICAgICAv
LyAgICAgYmVlbiBwcm92aWRlZCB0byB0aGUgY29uc3RydWN0b3IsCisgICAgICAgIC8vICAgLSAn
dmFsdWUnID4gMTBea01heEZpeGVkRGlnaXRzQmVmb3JlUG9pbnQsIG9yCisgICAgICAgIC8vICAg
LSAncmVxdWVzdGVkX2RpZ2l0cycgPiBrTWF4Rml4ZWREaWdpdHNBZnRlclBvaW50LgorICAgICAg
ICAvLyBUaGUgbGFzdCB0d28gY29uZGl0aW9ucyBpbXBseSB0aGF0IHRoZSByZXN1bHQgd2lsbCBu
ZXZlciBjb250YWluIG1vcmUgdGhhbgorICAgICAgICAvLyAxICsga01heEZpeGVkRGlnaXRzQmVm
b3JlUG9pbnQgKyAxICsga01heEZpeGVkRGlnaXRzQWZ0ZXJQb2ludCBjaGFyYWN0ZXJzCisgICAg
ICAgIC8vIChvbmUgYWRkaXRpb25hbCBjaGFyYWN0ZXIgZm9yIHRoZSBzaWduLCBhbmQgb25lIGZv
ciB0aGUgZGVjaW1hbCBwb2ludCkuCisgICAgICAgIGJvb2wgVG9GaXhlZChkb3VibGUgdmFsdWUs
CisgICAgICAgICAgICAgICAgICAgICBpbnQgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAgICAgICAg
ICAgICAgICAgIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25zdDsKKyAgICAgICAg
CisgICAgICAgIC8vIENvbXB1dGVzIGEgcmVwcmVzZW50YXRpb24gaW4gZXhwb25lbnRpYWwgZm9y
bWF0IHdpdGggcmVxdWVzdGVkX2RpZ2l0cworICAgICAgICAvLyBhZnRlciB0aGUgZGVjaW1hbCBw
b2ludC4gVGhlIGxhc3QgZW1pdHRlZCBkaWdpdCBpcyByb3VuZGVkLgorICAgICAgICAvLyBJZiBy
ZXF1ZXN0ZWRfZGlnaXRzIGVxdWFscyAtMSwgdGhlbiB0aGUgc2hvcnRlc3QgZXhwb25lbnRpYWwg
cmVwcmVzZW50YXRpb24KKyAgICAgICAgLy8gaXMgY29tcHV0ZWQuCisgICAgICAgIC8vCisgICAg
ICAgIC8vIEV4YW1wbGVzIHdpdGggRU1JVF9QT1NJVElWRV9FWFBPTkVOVF9TSUdOIGRlYWN0aXZh
dGVkLCBhbmQKKyAgICAgICAgLy8gICAgICAgICAgICAgICBleHBvbmVudF9jaGFyYWN0ZXIgc2V0
IHRvICdlJy4KKyAgICAgICAgLy8gICBUb0V4cG9uZW50aWFsKDMuMTIsIDEpIC0+ICIzLjFlMCIK
KyAgICAgICAgLy8gICBUb0V4cG9uZW50aWFsKDUuMCwgMykgLT4gIjUuMDAwZTAiCisgICAgICAg
IC8vICAgVG9FeHBvbmVudGlhbCgwLjAwMSwgMikgLT4gIjEuMDBlLTMiCisgICAgICAgIC8vICAg
VG9FeHBvbmVudGlhbCgzLjE0MTUsIC0xKSAtPiAiMy4xNDE1ZTAiCisgICAgICAgIC8vICAgVG9F
eHBvbmVudGlhbCgzLjE0MTUsIDQpIC0+ICIzLjE0MTVlMCIKKyAgICAgICAgLy8gICBUb0V4cG9u
ZW50aWFsKDMuMTQxNSwgMykgLT4gIjMuMTQyZTAiCisgICAgICAgIC8vICAgVG9FeHBvbmVudGlh
bCgxMjM0NTY3ODkwMDAwMDAsIDMpIC0+ICIxLjIzNWUxNCIKKyAgICAgICAgLy8gICBUb0V4cG9u
ZW50aWFsKDEwMDAwMDAwMDAwMDAwMDAwMTk4ODQ2MjQ4Mzg2NTYuMCwgLTEpIC0+ICIxZTMwIgor
ICAgICAgICAvLyAgIFRvRXhwb25lbnRpYWwoMTAwMDAwMDAwMDAwMDAwMDAxOTg4NDYyNDgzODY1
Ni4wLCAzMikgLT4KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAiMS4wMDAwMDAwMDAw
MDAwMDAwMTk4ODQ2MjQ4Mzg2NTYwMGUzMCIKKyAgICAgICAgLy8gICBUb0V4cG9uZW50aWFsKDEy
MzQsIDApIC0+ICIxZTMiCisgICAgICAgIC8vCisgICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgY29udmVyc2lvbiBzdWNjZWVkcy4gVGhlIGNvbnZlcnNpb24gYWx3YXlzIHN1Y2NlZWRzCisg
ICAgICAgIC8vIGV4Y2VwdCBmb3IgdGhlIGZvbGxvd2luZyBjYXNlczoKKyAgICAgICAgLy8gICAt
IHRoZSBpbnB1dCB2YWx1ZSBpcyBzcGVjaWFsIGFuZCBubyBpbmZpbml0eV9zeW1ib2wgb3IgbmFu
X3N5bWJvbCBoYXMKKyAgICAgICAgLy8gICAgIGJlZW4gcHJvdmlkZWQgdG8gdGhlIGNvbnN0cnVj
dG9yLAorICAgICAgICAvLyAgIC0gJ3JlcXVlc3RlZF9kaWdpdHMnID4ga01heEV4cG9uZW50aWFs
RGlnaXRzLgorICAgICAgICAvLyBUaGUgbGFzdCBjb25kaXRpb24gaW1wbGllcyB0aGF0IHRoZSBy
ZXN1bHQgd2lsbCBuZXZlciBjb250YWluIG1vcmUgdGhhbgorICAgICAgICAvLyBrTWF4RXhwb25l
bnRpYWxEaWdpdHMgKyA4IGNoYXJhY3RlcnMgKHRoZSBzaWduLCB0aGUgZGlnaXQgYmVmb3JlIHRo
ZQorICAgICAgICAvLyBkZWNpbWFsIHBvaW50LCB0aGUgZGVjaW1hbCBwb2ludCwgdGhlIGV4cG9u
ZW50IGNoYXJhY3RlciwgdGhlCisgICAgICAgIC8vIGV4cG9uZW50J3Mgc2lnbiwgYW5kIGF0IG1v
c3QgMyBleHBvbmVudCBkaWdpdHMpLgorICAgICAgICBib29sIFRvRXhwb25lbnRpYWwoZG91Ymxl
IHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlcXVlc3RlZF9kaWdpdHMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyKiByZXN1bHRfYnVpbGRl
cikgY29uc3Q7CisgICAgICAgIAorICAgICAgICAvLyBDb21wdXRlcyAncHJlY2lzaW9uJyBsZWFk
aW5nIGRpZ2l0cyBvZiB0aGUgZ2l2ZW4gJ3ZhbHVlJyBhbmQgcmV0dXJucyB0aGVtCisgICAgICAg
IC8vIGVpdGhlciBpbiBleHBvbmVudGlhbCBvciBkZWNpbWFsIGZvcm1hdCwgZGVwZW5kaW5nIG9u
CisgICAgICAgIC8vIG1heF97bGVhZGluZ3x0cmFpbGluZ31fcGFkZGluZ196ZXJvZXNfaW5fcHJl
Y2lzaW9uX21vZGUgKGdpdmVuIHRvIHRoZQorICAgICAgICAvLyBjb25zdHJ1Y3RvcikuCisgICAg
ICAgIC8vIFRoZSBsYXN0IGNvbXB1dGVkIGRpZ2l0IGlzIHJvdW5kZWQuCisgICAgICAgIC8vCisg
ICAgICAgIC8vIEV4YW1wbGUgd2l0aCBtYXhfbGVhZGluZ19wYWRkaW5nX3plcm9lc19pbl9wcmVj
aXNpb25fbW9kZSA9IDYuCisgICAgICAgIC8vICAgVG9QcmVjaXNpb24oMC4wMDAwMDEyMzQ1LCAy
KSAtPiAiMC4wMDAwMDEyIgorICAgICAgICAvLyAgIFRvUHJlY2lzaW9uKDAuMDAwMDAwMTIzNDUs
IDIpIC0+ICIxLjJlLTciCisgICAgICAgIC8vIFNpbWlsYXJpbHkgdGhlIGNvbnZlcnRlciBtYXkg
YWRkIHVwIHRvCisgICAgICAgIC8vIG1heF90cmFpbGluZ19wYWRkaW5nX3plcm9lc19pbl9wcmVj
aXNpb25fbW9kZSBpbiBwcmVjaXNpb24gbW9kZSB0byBhdm9pZAorICAgICAgICAvLyByZXR1cm5p
bmcgYW4gZXhwb25lbnRpYWwgcmVwcmVzZW50YXRpb24uIEEgemVybyBhZGRlZCBieSB0aGUKKyAg
ICAgICAgLy8gRU1JVF9UUkFJTElOR19aRVJPX0FGVEVSX1BPSU5UIGZsYWcgaXMgY291bnRlZCBm
b3IgdGhpcyBsaW1pdC4KKyAgICAgICAgLy8gRXhhbXBsZXMgZm9yIG1heF90cmFpbGluZ19wYWRk
aW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZSA9IDE6CisgICAgICAgIC8vICAgVG9QcmVjaXNp
b24oMjMwLjAsIDIpIC0+ICIyMzAiCisgICAgICAgIC8vICAgVG9QcmVjaXNpb24oMjMwLjAsIDIp
IC0+ICIyMzAuIiAgd2l0aCBFTUlUX1RSQUlMSU5HX0RFQ0lNQUxfUE9JTlQuCisgICAgICAgIC8v
ICAgVG9QcmVjaXNpb24oMjMwLjAsIDIpIC0+ICIyLjNlMiIgd2l0aCBFTUlUX1RSQUlMSU5HX1pF
Uk9fQUZURVJfUE9JTlQuCisgICAgICAgIC8vIEV4YW1wbGVzIGZvciBtYXhfdHJhaWxpbmdfcGFk
ZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGUgPSAzLCBhbmQgbm8KKyAgICAgICAgLy8gICAg
RU1JVF9UUkFJTElOR19aRVJPX0FGVEVSX1BPSU5UOgorICAgICAgICAvLyAgIFRvUHJlY2lzaW9u
KDEyMzQ1MC4wLCA2KSAtPiAiMTIzNDUwIgorICAgICAgICAvLyAgIFRvUHJlY2lzaW9uKDEyMzQ1
MC4wLCA1KSAtPiAiMTIzNDUwIgorICAgICAgICAvLyAgIFRvUHJlY2lzaW9uKDEyMzQ1MC4wLCA0
KSAtPiAiMTIzNTAwIgorICAgICAgICAvLyAgIFRvUHJlY2lzaW9uKDEyMzQ1MC4wLCAzKSAtPiAi
MTIzMDAwIgorICAgICAgICAvLyAgIFRvUHJlY2lzaW9uKDEyMzQ1MC4wLCAyKSAtPiAiMS4yZTUi
CisgICAgICAgIC8vCisgICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29udmVyc2lvbiBz
dWNjZWVkcy4gVGhlIGNvbnZlcnNpb24gYWx3YXlzIHN1Y2NlZWRzCisgICAgICAgIC8vIGV4Y2Vw
dCBmb3IgdGhlIGZvbGxvd2luZyBjYXNlczoKKyAgICAgICAgLy8gICAtIHRoZSBpbnB1dCB2YWx1
ZSBpcyBzcGVjaWFsIGFuZCBubyBpbmZpbml0eV9zeW1ib2wgb3IgbmFuX3N5bWJvbCBoYXMKKyAg
ICAgICAgLy8gICAgIGJlZW4gcHJvdmlkZWQgdG8gdGhlIGNvbnN0cnVjdG9yLAorICAgICAgICAv
LyAgIC0gcHJlY2lzaW9uIDwga01pblBlcmljaXNpb25EaWdpdHMKKyAgICAgICAgLy8gICAtIHBy
ZWNpc2lvbiA+IGtNYXhQcmVjaXNpb25EaWdpdHMKKyAgICAgICAgLy8gVGhlIGxhc3QgY29uZGl0
aW9uIGltcGxpZXMgdGhhdCB0aGUgcmVzdWx0IHdpbGwgbmV2ZXIgY29udGFpbiBtb3JlIHRoYW4K
KyAgICAgICAgLy8ga01heFByZWNpc2lvbkRpZ2l0cyArIDcgY2hhcmFjdGVycyAodGhlIHNpZ24s
IHRoZSBkZWNpbWFsIHBvaW50LCB0aGUKKyAgICAgICAgLy8gZXhwb25lbnQgY2hhcmFjdGVyLCB0
aGUgZXhwb25lbnQncyBzaWduLCBhbmQgYXQgbW9zdCAzIGV4cG9uZW50IGRpZ2l0cykuCisgICAg
ICAgIGJvb2wgVG9QcmVjaXNpb24oZG91YmxlIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBwcmVjaXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVpbGRl
ciogcmVzdWx0X2J1aWxkZXIpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgZW51bSBEdG9hTW9k
ZSB7CisgICAgICAgICAgICAvLyBQcm9kdWNlIHRoZSBzaG9ydGVzdCBjb3JyZWN0IHJlcHJlc2Vu
dGF0aW9uLgorICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGUgdGhlIG91dHB1dCBvZiAwLjI5OTk5
OTk5OTk5OTk5OTk4ODg5NyBpcyAodGhlIGxlc3MgYWNjdXJhdGUKKyAgICAgICAgICAgIC8vIGJ1
dCBjb3JyZWN0KSAwLjMuCisgICAgICAgICAgICBTSE9SVEVTVCwKKyAgICAgICAgICAgIC8vIFBy
b2R1Y2UgYSBmaXhlZCBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50Lgor
ICAgICAgICAgICAgLy8gRm9yIGluc3RhbmNlIGZpeGVkKDAuMSwgNCkgYmVjb21lcyAwLjEwMDAK
KyAgICAgICAgICAgIC8vIElmIHRoZSBpbnB1dCBudW1iZXIgaXMgYmlnLCB0aGUgb3V0cHV0IHdp
bGwgYmUgYmlnLgorICAgICAgICAgICAgRklYRUQsCisgICAgICAgICAgICAvLyBGaXhlZCBudW1i
ZXIgb2YgZGlnaXRzIChpbmRlcGVuZGVudCBvZiB0aGUgZGVjaW1hbCBwb2ludCkuCisgICAgICAg
ICAgICBQUkVDSVNJT04KKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBtYXhp
bWFsIG51bWJlciBvZiBkaWdpdHMgdGhhdCBhcmUgbmVlZGVkIHRvIGVtaXQgYSBkb3VibGUgaW4g
YmFzZSAxMC4KKyAgICAgICAgLy8gQSBoaWdoZXIgcHJlY2lzaW9uIGNhbiBiZSBhY2hpZXZlZCBi
eSB1c2luZyBtb3JlIGRpZ2l0cywgYnV0IHRoZSBzaG9ydGVzdAorICAgICAgICAvLyBhY2N1cmF0
ZSByZXByZXNlbnRhdGlvbiBvZiBhbnkgZG91YmxlIHdpbGwgbmV2ZXIgdXNlIG1vcmUgZGlnaXRz
IHRoYW4KKyAgICAgICAgLy8ga0Jhc2UxME1heGltYWxMZW5ndGguCisgICAgICAgIC8vIE5vdGUg
dGhhdCBEb3VibGVUb0FzY2lpIG51bGwtdGVybWluYXRlcyBpdHMgaW5wdXQuIFNvIHRoZSBnaXZl
biBidWZmZXIKKyAgICAgICAgLy8gc2hvdWxkIGJlIGF0IGxlYXN0IGtCYXNlMTBNYXhpbWFsTGVu
Z3RoICsgMSBjaGFyYWN0ZXJzIGxvbmcuCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQga0Jhc2Ux
ME1heGltYWxMZW5ndGggPSAxNzsKKyAgICAgICAgCisgICAgICAgIC8vIENvbnZlcnRzIHRoZSBn
aXZlbiBkb3VibGUgJ3YnIHRvIGFzY2lpLgorICAgICAgICAvLyBUaGUgcmVzdWx0IHNob3VsZCBi
ZSBpbnRlcnByZXRlZCBhcyBidWZmZXIgKiAxMF4ocG9pbnQtbGVuZ3RoKS4KKyAgICAgICAgLy8K
KyAgICAgICAgLy8gVGhlIG91dHB1dCBkZXBlbmRzIG9uIHRoZSBnaXZlbiBtb2RlOgorICAgICAg
ICAvLyAgLSBTSE9SVEVTVDogcHJvZHVjZSB0aGUgbGVhc3QgYW1vdW50IG9mIGRpZ2l0cyBmb3Ig
d2hpY2ggdGhlIGludGVybmFsCisgICAgICAgIC8vICAgaWRlbnRpdHkgcmVxdWlyZW1lbnQgaXMg
c3RpbGwgc2F0aXNmaWVkLiBJZiB0aGUgZGlnaXRzIGFyZSBwcmludGVkCisgICAgICAgIC8vICAg
KHRvZ2V0aGVyIHdpdGggdGhlIGNvcnJlY3QgZXhwb25lbnQpIHRoZW4gcmVhZGluZyB0aGlzIG51
bWJlciB3aWxsIGdpdmUKKyAgICAgICAgLy8gICAndicgYWdhaW4uIFRoZSBidWZmZXIgd2lsbCBj
aG9vc2UgdGhlIHJlcHJlc2VudGF0aW9uIHRoYXQgaXMgY2xvc2VzdCB0bworICAgICAgICAvLyAg
ICd2Jy4gSWYgdGhlcmUgYXJlIHR3byBhdCB0aGUgc2FtZSBkaXN0YW5jZSwgdGhhbiB0aGUgb25l
IGZhcnRoZXIgYXdheQorICAgICAgICAvLyAgIGZyb20gMCBpcyBjaG9zZW4gKGhhbGZ3YXkgY2Fz
ZXMgLSBlbmRpbmcgd2l0aCA1IC0gYXJlIHJvdW5kZWQgdXApLgorICAgICAgICAvLyAgIEluIHRo
aXMgbW9kZSB0aGUgJ3JlcXVlc3RlZF9kaWdpdHMnIHBhcmFtZXRlciBpcyBpZ25vcmVkLgorICAg
ICAgICAvLyAgLSBGSVhFRDogcHJvZHVjZXMgZGlnaXRzIG5lY2Vzc2FyeSB0byBwcmludCBhIGdp
dmVuIG51bWJlciB3aXRoCisgICAgICAgIC8vICAgJ3JlcXVlc3RlZF9kaWdpdHMnIGRpZ2l0cyBh
ZnRlciB0aGUgZGVjaW1hbCBwb2ludC4gVGhlIHByb2R1Y2VkIGRpZ2l0cworICAgICAgICAvLyAg
IG1pZ2h0IGJlIHRvbyBzaG9ydCBpbiB3aGljaCBjYXNlIHRoZSBjYWxsZXIgaGFzIHRvIGZpbGwg
dGhlIHJlbWFpbmRlcgorICAgICAgICAvLyAgIHdpdGggJzAncy4KKyAgICAgICAgLy8gICBFeGFt
cGxlOiB0b0ZpeGVkKDAuMDAxLCA1KSBpcyBhbGxvd2VkIHRvIHJldHVybiBidWZmZXI9IjEiLCBw
b2ludD0tMi4KKyAgICAgICAgLy8gICBIYWxmd2F5IGNhc2VzIGFyZSByb3VuZGVkIHRvd2FyZHMg
Ky8tSW5maW5pdHkgKGF3YXkgZnJvbSAwKS4gVGhlIGNhbGwKKyAgICAgICAgLy8gICB0b0ZpeGVk
KDAuMTUsIDIpIHRodXMgcmV0dXJucyBidWZmZXI9IjIiLCBwb2ludD0wLgorICAgICAgICAvLyAg
IFRoZSByZXR1cm5lZCBidWZmZXIgbWF5IGNvbnRhaW4gZGlnaXRzIHRoYXQgd291bGQgYmUgdHJ1
bmNhdGVkIGZyb20gdGhlCisgICAgICAgIC8vICAgc2hvcnRlc3QgcmVwcmVzZW50YXRpb24gb2Yg
dGhlIGlucHV0LgorICAgICAgICAvLyAgLSBQUkVDSVNJT046IHByb2R1Y2VzICdyZXF1ZXN0ZWRf
ZGlnaXRzJyB3aGVyZSB0aGUgZmlyc3QgZGlnaXQgaXMgbm90ICcwJy4KKyAgICAgICAgLy8gICBF
dmVuIHRob3VnaCB0aGUgbGVuZ3RoIG9mIHByb2R1Y2VkIGRpZ2l0cyB1c3VhbGx5IGVxdWFscwor
ICAgICAgICAvLyAgICdyZXF1ZXN0ZWRfZGlnaXRzJywgdGhlIGZ1bmN0aW9uIGlzIGFsbG93ZWQg
dG8gcmV0dXJuIGZld2VyIGRpZ2l0cywgaW4KKyAgICAgICAgLy8gICB3aGljaCBjYXNlIHRoZSBj
YWxsZXIgaGFzIHRvIGZpbGwgdGhlIG1pc3NpbmcgZGlnaXRzIHdpdGggJzAncy4KKyAgICAgICAg
Ly8gICBIYWxmd2F5IGNhc2VzIGFyZSBhZ2FpbiByb3VuZGVkIGF3YXkgZnJvbSAwLgorICAgICAg
ICAvLyBEb3VibGVUb0FzY2lpIGV4cGVjdHMgdGhlIGdpdmVuIGJ1ZmZlciB0byBiZSBiaWcgZW5v
dWdoIHRvIGhvbGQgYWxsCisgICAgICAgIC8vIGRpZ2l0cyBhbmQgYSB0ZXJtaW5hdGluZyBudWxs
LWNoYXJhY3Rlci4gSW4gU0hPUlRFU1QtbW9kZSBpdCBleHBlY3RzIGEKKyAgICAgICAgLy8gYnVm
ZmVyIG9mIGF0IGxlYXN0IGtCYXNlMTBNYXhpbWFsTGVuZ3RoICsgMS4gSW4gYWxsIG90aGVyIG1v
ZGVzIHRoZQorICAgICAgICAvLyByZXF1ZXN0ZWRfZGlnaXRzIHBhcmFtZXRlciAoKyAxIGZvciB0
aGUgbnVsbC1jaGFyYWN0ZXIpIGxpbWl0cyB0aGUgc2l6ZSBvZgorICAgICAgICAvLyB0aGUgb3V0
cHV0LiBUaGUgZ2l2ZW4gbGVuZ3RoIGlzIG9ubHkgdXNlZCBpbiBkZWJ1ZyBtb2RlIHRvIGVuc3Vy
ZSB0aGUKKyAgICAgICAgLy8gYnVmZmVyIGlzIGJpZyBlbm91Z2guCisgICAgICAgIHN0YXRpYyB2
b2lkIERvdWJsZVRvQXNjaWkoZG91YmxlIHYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRHRvYU1vZGUgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFyKiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ1ZmZl
cl9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCogc2lnbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGxlbmd0aCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHBvaW50KTsKKyAgICAgICAgCisgICAgcHJp
dmF0ZToKKyAgICAgICAgLy8gSWYgdGhlIHZhbHVlIGlzIGEgc3BlY2lhbCB2YWx1ZSAoTmFOIG9y
IEluZmluaXR5KSBjb25zdHJ1Y3RzIHRoZQorICAgICAgICAvLyBjb3JyZXNwb25kaW5nIHN0cmlu
ZyB1c2luZyB0aGUgY29uZmlndXJlZCBpbmZpbml0eS9uYW4tc3ltYm9sLgorICAgICAgICAvLyBJ
ZiBlaXRoZXIgb2YgdGhlbSBpcyBOVUxMIG9yIHRoZSB2YWx1ZSBpcyBub3Qgc3BlY2lhbCB0aGVu
IHRoZQorICAgICAgICAvLyBmdW5jdGlvbiByZXR1cm5zIGZhbHNlLgorICAgICAgICBib29sIEhh
bmRsZVNwZWNpYWxWYWx1ZXMoZG91YmxlIHZhbHVlLCBTdHJpbmdCdWlsZGVyKiByZXN1bHRfYnVp
bGRlcikgY29uc3Q7CisgICAgICAgIC8vIENvbnN0cnVjdHMgYW4gZXhwb25lbnRpYWwgcmVwcmVz
ZW50YXRpb24gKGkuZS4gMS4yMzRlNTYpLgorICAgICAgICAvLyBUaGUgZ2l2ZW4gZXhwb25lbnQg
YXNzdW1lcyBhIGRlY2ltYWwgcG9pbnQgYWZ0ZXIgdGhlIGZpcnN0IGRlY2ltYWwgZGlnaXQuCisg
ICAgICAgIHZvaWQgQ3JlYXRlRXhwb25lbnRpYWxSZXByZXNlbnRhdGlvbihjb25zdCBjaGFyKiBk
ZWNpbWFsX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTdHJpbmdCdWlsZGVyKiByZXN1bHRfYnVpbGRlcikgY29uc3Q7CisgICAgICAgIC8v
IENyZWF0ZXMgYSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIChpLmUgMTIzNC41Njc4KS4KKyAgICAg
ICAgdm9pZCBDcmVhdGVEZWNpbWFsUmVwcmVzZW50YXRpb24oY29uc3QgY2hhciogZGVjaW1hbF9k
aWdpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5n
dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZWNpbWFs
X3BvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGln
aXRzX2FmdGVyX3BvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTdHJpbmdCdWlsZGVyKiByZXN1bHRfYnVpbGRlcikgY29uc3Q7CisgICAgICAgIAorICAgICAg
ICBjb25zdCBpbnQgZmxhZ3NfOworICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBpbmZpbml0eV9z
eW1ib2xfOworICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBuYW5fc3ltYm9sXzsKKyAgICAgICAg
Y29uc3QgY2hhciBleHBvbmVudF9jaGFyYWN0ZXJfOworICAgICAgICBjb25zdCBpbnQgZGVjaW1h
bF9pbl9zaG9ydGVzdF9sb3dfOworICAgICAgICBjb25zdCBpbnQgZGVjaW1hbF9pbl9zaG9ydGVz
dF9oaWdoXzsKKyAgICAgICAgY29uc3QgaW50IG1heF9sZWFkaW5nX3BhZGRpbmdfemVyb2VzX2lu
X3ByZWNpc2lvbl9tb2RlXzsKKyAgICAgICAgY29uc3QgaW50IG1heF90cmFpbGluZ19wYWRkaW5n
X3plcm9lc19pbl9wcmVjaXNpb25fbW9kZV87CisgICAgICAgIAorICAgICAgICBESVNBTExPV19J
TVBMSUNJVF9DT05TVFJVQ1RPUlMoRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXIpOworICAgIH07Cisg
ICAgCisgICAgCisgICAgY2xhc3MgU3RyaW5nVG9Eb3VibGVDb252ZXJ0ZXIgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgLy8gRW51bWVyYXRpb24gZm9yIGFsbG93aW5nIG9jdGFscyBhbmQgaWdub3Jp
bmcganVuayB3aGVuIGNvbnZlcnRpbmcKKyAgICAgICAgLy8gc3RyaW5ncyB0byBudW1iZXJzLgor
ICAgICAgICBlbnVtIEZsYWdzIHsKKyAgICAgICAgICAgIE5PX0ZMQUdTID0gMCwKKyAgICAgICAg
ICAgIEFMTE9XX0hFWCA9IDEsCisgICAgICAgICAgICBBTExPV19PQ1RBTFMgPSAyLAorICAgICAg
ICAgICAgQUxMT1dfVFJBSUxJTkdfSlVOSyA9IDQsCisgICAgICAgICAgICBBTExPV19MRUFESU5H
X1NQQUNFUyA9IDgsCisgICAgICAgICAgICBBTExPV19UUkFJTElOR19TUEFDRVMgPSAxNiwKKyAg
ICAgICAgICAgIEFMTE9XX1NQQUNFU19BRlRFUl9TSUdOID0gMzIKKyAgICAgICAgfTsKKyAgICAg
ICAgCisgICAgICAgIC8vIEZsYWdzIHNob3VsZCBiZSBhIGJpdC1vciBjb21iaW5hdGlvbiBvZiB0
aGUgcG9zc2libGUgRmxhZ3MtZW51bS4KKyAgICAgICAgLy8gIC0gTk9fRkxBR1M6IG5vIHNwZWNp
YWwgZmxhZ3MuCisgICAgICAgIC8vICAtIEFMTE9XX0hFWDogcmVjb2duaXplcyB0aGUgcHJlZml4
ICIweCIuIEhleCBudW1iZXJzIG1heSBvbmx5IGJlIGludGVnZXJzLgorICAgICAgICAvLyAgICAg
IEV4OiBTdHJpbmdUb0RvdWJsZSgiMHgxMjM0IikgLT4gNDY2MC4wCisgICAgICAgIC8vICAgICAg
ICAgIEluIFN0cmluZ1RvRG91YmxlKCIweDEyMzQuNTYiKSB0aGUgY2hhcmFjdGVycyAiLjU2IiBh
cmUgdHJhaWxpbmcKKyAgICAgICAgLy8gICAgICAgICAganVuay4gVGhlIHJlc3VsdCBvZiB0aGUg
Y2FsbCBpcyBoZW5jZSBkZXBlbmRlbnQgb24KKyAgICAgICAgLy8gICAgICAgICAgdGhlIEFMTE9X
X1RSQUlMSU5HX0pVTksgZmxhZyBhbmQvb3IgdGhlIGp1bmsgdmFsdWUuCisgICAgICAgIC8vICAg
ICAgV2l0aCB0aGlzIGZsYWcgIjB4IiBpcyBhIGp1bmstc3RyaW5nLiBFdmVuIHdpdGggQUxMT1df
VFJBSUxJTkdfSlVOSywKKyAgICAgICAgLy8gICAgICB0aGUgc3RyaW5nIHdpbGwgbm90IGJlIHBh
cnNlZCBhcyAiMCIgZm9sbG93ZWQgYnkganVuay4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gIC0g
QUxMT1dfT0NUQUxTOiByZWNvZ25pemVzIHRoZSBwcmVmaXggIjAiIGZvciBvY3RhbHM6CisgICAg
ICAgIC8vICAgICAgSWYgYSBzZXF1ZW5jZSBvZiBvY3RhbCBkaWdpdHMgc3RhcnRzIHdpdGggJzAn
LCB0aGVuIHRoZSBudW1iZXIgaXMKKyAgICAgICAgLy8gICAgICByZWFkIGFzIG9jdGFsIGludGVn
ZXIuIE9jdGFsIG51bWJlcnMgbWF5IG9ubHkgYmUgaW50ZWdlcnMuCisgICAgICAgIC8vICAgICAg
RXg6IFN0cmluZ1RvRG91YmxlKCIwMTIzNCIpIC0+IDY2OC4wCisgICAgICAgIC8vICAgICAgICAg
IFN0cmluZ1RvRG91YmxlKCIwMTIzNDkiKSAtPiAxMjM0OS4wICAvLyBOb3QgYSBzZXF1ZW5jZSBv
ZiBvY3RhbAorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gZGlnaXRzLgorICAgICAgICAvLyAgICAgICAgICBJbiBTdHJpbmdUb0RvdWJs
ZSgiMDEyMzQuNTYiKSB0aGUgY2hhcmFjdGVycyAiLjU2IiBhcmUgdHJhaWxpbmcKKyAgICAgICAg
Ly8gICAgICAgICAganVuay4gVGhlIHJlc3VsdCBvZiB0aGUgY2FsbCBpcyBoZW5jZSBkZXBlbmRl
bnQgb24KKyAgICAgICAgLy8gICAgICAgICAgdGhlIEFMTE9XX1RSQUlMSU5HX0pVTksgZmxhZyBh
bmQvb3IgdGhlIGp1bmsgdmFsdWUuCisgICAgICAgIC8vICAgICAgICAgIEluIFN0cmluZ1RvRG91
YmxlKCIwMTIzNGU1NiIpIHRoZSBjaGFyYWN0ZXJzICJlNTYiIGFyZSB0cmFpbGluZworICAgICAg
ICAvLyAgICAgICAgICBqdW5rLCB0b28uCisgICAgICAgIC8vICAtIEFMTE9XX1RSQUlMSU5HX0pV
Tks6IGlnbm9yZSB0cmFpbGluZyBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBwYXJ0IG9mCisgICAg
ICAgIC8vICAgICAgYSBkb3VibGUgbGl0ZXJhbC4KKyAgICAgICAgLy8gIC0gQUxMT1dfTEVBRElO
R19TUEFDRVM6IHNraXAgb3ZlciBsZWFkaW5nIHNwYWNlcy4KKyAgICAgICAgLy8gIC0gQUxMT1df
VFJBSUxJTkdfU1BBQ0VTOiBpZ25vcmUgdHJhaWxpbmcgc3BhY2VzLgorICAgICAgICAvLyAgLSBB
TExPV19TUEFDRVNfQUZURVJfU0lHTjogaWdub3JlIHNwYWNlcyBhZnRlciB0aGUgc2lnbi4KKyAg
ICAgICAgLy8gICAgICAgRXg6IFN0cmluZ1RvRG91YmxlKCItICAgMTIzLjIiKSAtPiAtMTIzLjIu
CisgICAgICAgIC8vICAgICAgICAgICBTdHJpbmdUb0RvdWJsZSgiKyAgIDEyMy4yIikgLT4gMTIz
LjIKKyAgICAgICAgLy8KKyAgICAgICAgLy8gZW1wdHlfc3RyaW5nX3ZhbHVlIGlzIHJldHVybmVk
IHdoZW4gYW4gZW1wdHkgc3RyaW5nIGlzIGdpdmVuIGFzIGlucHV0LgorICAgICAgICAvLyBJZiBB
TExPV19MRUFESU5HX1NQQUNFUyBvciBBTExPV19UUkFJTElOR19TUEFDRVMgYXJlIHNldCwgdGhl
biBhIHN0cmluZworICAgICAgICAvLyBjb250YWluaW5nIG9ubHkgc3BhY2VzIGlzIGNvbnZlcnRl
ZCB0byB0aGUgJ2VtcHR5X3N0cmluZ192YWx1ZScsIHRvby4KKyAgICAgICAgLy8KKyAgICAgICAg
Ly8ganVua19zdHJpbmdfdmFsdWUgaXMgcmV0dXJuZWQgd2hlbgorICAgICAgICAvLyAgYSkgQUxM
T1dfVFJBSUxJTkdfSlVOSyBpcyBub3Qgc2V0LCBhbmQgYSBqdW5rIGNoYXJhY3RlciAoYSBjaGFy
YWN0ZXIgbm90CisgICAgICAgIC8vICAgICBwYXJ0IG9mIGEgZG91YmxlLWxpdGVyYWwpIGlzIGZv
dW5kLgorICAgICAgICAvLyAgYikgQUxMT1dfVFJBSUxJTkdfSlVOSyBpcyBzZXQsIGJ1dCB0aGUg
c3RyaW5nIGRvZXMgbm90IHN0YXJ0IHdpdGggYQorICAgICAgICAvLyAgICAgZG91YmxlIGxpdGVy
YWwuCisgICAgICAgIC8vCisgICAgICAgIC8vIGluZmluaXR5X3N5bWJvbCBhbmQgbmFuX3N5bWJv
bCBhcmUgc3RyaW5ncyB0aGF0IGFyZSB1c2VkIHRvIGRldGVjdAorICAgICAgICAvLyBpbnB1dHMg
dGhhdCByZXByZXNlbnQgaW5maW5pdHkgYW5kIE5hTi4gVGhleSBjYW4gYmUgbnVsbCwgaW4gd2hp
Y2ggY2FzZQorICAgICAgICAvLyB0aGV5IGFyZSBpZ25vcmVkLgorICAgICAgICAvLyBUaGUgY29u
dmVyc2lvbiByb3V0aW5lIGZpcnN0IHJlYWRzIGFueSBwb3NzaWJsZSBzaWducy4gVGhlbiBpdCBj
b21wYXJlcyB0aGUKKyAgICAgICAgLy8gZm9sbG93aW5nIGNoYXJhY3RlciBvZiB0aGUgaW5wdXQt
c3RyaW5nIHdpdGggdGhlIGZpcnN0IGNoYXJhY3RlciBvZgorICAgICAgICAvLyB0aGUgaW5maW5p
dHksIGFuZCBuYW4tc3ltYm9sLiBJZiBlaXRoZXIgbWF0Y2hlcywgdGhlIGZ1bmN0aW9uIGFzc3Vt
ZXMsIHRoYXQKKyAgICAgICAgLy8gYSBtYXRjaCBoYXMgYmVlbiBmb3VuZCwgYW5kIGV4cGVjdHMg
dGhlIGZvbGxvd2luZyBpbnB1dCBjaGFyYWN0ZXJzIHRvIG1hdGNoCisgICAgICAgIC8vIHRoZSBy
ZW1haW5pbmcgY2hhcmFjdGVycyBvZiB0aGUgc3BlY2lhbC12YWx1ZSBzeW1ib2wuCisgICAgICAg
IC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9ucyBhcHBseSB0byBz
cGVjaWFsLXZhbHVlIHN5bWJvbHM6CisgICAgICAgIC8vICAtIHRoZXkgbXVzdCBub3Qgc3RhcnQg
d2l0aCBzaWducyAoJysnLCBvciAnLScpLAorICAgICAgICAvLyAgLSB0aGV5IG11c3Qgbm90IGhh
dmUgdGhlIHNhbWUgZmlyc3QgY2hhcmFjdGVyLgorICAgICAgICAvLyAgLSB0aGV5IG11c3Qgbm90
IHN0YXJ0IHdpdGggZGlnaXRzLgorICAgICAgICAvLworICAgICAgICAvLyBFeGFtcGxlczoKKyAg
ICAgICAgLy8gIGZsYWdzID0gQUxMT1dfSEVYIHwgQUxMT1dfVFJBSUxJTkdfSlVOSywKKyAgICAg
ICAgLy8gIGVtcHR5X3N0cmluZ192YWx1ZSA9IDAuMCwKKyAgICAgICAgLy8gIGp1bmtfc3RyaW5n
X3ZhbHVlID0gTmFOLAorICAgICAgICAvLyAgaW5maW5pdHlfc3ltYm9sID0gImluZmluaXR5IiwK
KyAgICAgICAgLy8gIG5hbl9zeW1ib2wgPSAibmFuIjoKKyAgICAgICAgLy8gICAgU3RyaW5nVG9E
b3VibGUoIjB4MTIzNCIpIC0+IDQ2NjAuMC4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUo
IjB4MTIzNEsiKSAtPiA0NjYwLjAuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIiKSAt
PiAwLjAgIC8vIGVtcHR5X3N0cmluZ192YWx1ZS4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3Vi
bGUoIiAiKSAtPiBOYU4gIC8vIGp1bmtfc3RyaW5nX3ZhbHVlLgorICAgICAgICAvLyAgICBTdHJp
bmdUb0RvdWJsZSgiIDEiKSAtPiBOYU4gIC8vIGp1bmtfc3RyaW5nX3ZhbHVlLgorICAgICAgICAv
LyAgICBTdHJpbmdUb0RvdWJsZSgiMHgiKSAtPiBOYU4gIC8vIGp1bmtfc3RyaW5nX3ZhbHVlLgor
ICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiLTEyMy40NSIpIC0+IC0xMjMuNDUuCisgICAg
ICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCItLTEyMy40NSIpIC0+IE5hTiAgLy8ganVua19zdHJp
bmdfdmFsdWUuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIxMjNlNDUiKSAtPiAxMjNl
NDUuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIxMjNFNDUiKSAtPiAxMjNlNDUuCisg
ICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIxMjNlKzQ1IikgLT4gMTIzZTQ1LgorICAgICAg
ICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMTIzRS00NSIpIC0+IDEyM2UtNDUuCisgICAgICAgIC8v
ICAgIFN0cmluZ1RvRG91YmxlKCIxMjNlIikgLT4gMTIzLjAgIC8vIHRyYWlsaW5nIGp1bmsgaWdu
b3JlZC4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjEyM2UtIikgLT4gMTIzLjAgIC8v
IHRyYWlsaW5nIGp1bmsgaWdub3JlZC4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIitO
YU4iKSAtPiBOYU4gIC8vIE5hTiBzdHJpbmcgbGl0ZXJhbC4KKyAgICAgICAgLy8gICAgU3RyaW5n
VG9Eb3VibGUoIi1pbmZpbml0eSIpIC0+IC1pbmYuICAvLyBpbmZpbml0eSBsaXRlcmFsLgorICAg
ICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiSW5maW5pdHkiKSAtPiBOYU4gIC8vIGp1bmtfc3Ry
aW5nX3ZhbHVlLgorICAgICAgICAvLworICAgICAgICAvLyAgZmxhZ3MgPSBBTExPV19PQ1RBTCB8
IEFMTE9XX0xFQURJTkdfU1BBQ0VTLAorICAgICAgICAvLyAgZW1wdHlfc3RyaW5nX3ZhbHVlID0g
MC4wLAorICAgICAgICAvLyAganVua19zdHJpbmdfdmFsdWUgPSBOYU4sCisgICAgICAgIC8vICBp
bmZpbml0eV9zeW1ib2wgPSBOVUxMLAorICAgICAgICAvLyAgbmFuX3N5bWJvbCA9IE5VTEw6Cisg
ICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIweDEyMzQiKSAtPiBOYU4gIC8vIGp1bmtfc3Ry
aW5nX3ZhbHVlLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMDEyMzQiKSAtPiA2Njgu
MC4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIiIpIC0+IDAuMCAgLy8gZW1wdHlfc3Ry
aW5nX3ZhbHVlLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiICIpIC0+IDAuMCAgLy8g
ZW1wdHlfc3RyaW5nX3ZhbHVlLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiIDEiKSAt
PiAxLjAKKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjB4IikgLT4gTmFOICAvLyBqdW5r
X3N0cmluZ192YWx1ZS4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjAxMjNlNDUiKSAt
PiBOYU4gIC8vIGp1bmtfc3RyaW5nX3ZhbHVlLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJs
ZSgiMDEyMzlFNDUiKSAtPiAxMjM5ZTQ1LgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgi
LWluZmluaXR5IikgLT4gTmFOICAvLyBqdW5rX3N0cmluZ192YWx1ZS4KKyAgICAgICAgLy8gICAg
U3RyaW5nVG9Eb3VibGUoIk5hTiIpIC0+IE5hTiAgLy8ganVua19zdHJpbmdfdmFsdWUuCisgICAg
ICAgIFN0cmluZ1RvRG91YmxlQ29udmVydGVyKGludCBmbGFncywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZG91YmxlIGVtcHR5X3N0cmluZ192YWx1ZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZG91YmxlIGp1bmtfc3RyaW5nX3ZhbHVlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBpbmZpbml0eV9zeW1ib2wsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbl9zeW1ib2wpCisgICAgICAg
IDogZmxhZ3NfKGZsYWdzKSwKKyAgICAgICAgZW1wdHlfc3RyaW5nX3ZhbHVlXyhlbXB0eV9zdHJp
bmdfdmFsdWUpLAorICAgICAgICBqdW5rX3N0cmluZ192YWx1ZV8oanVua19zdHJpbmdfdmFsdWUp
LAorICAgICAgICBpbmZpbml0eV9zeW1ib2xfKGluZmluaXR5X3N5bWJvbCksCisgICAgICAgIG5h
bl9zeW1ib2xfKG5hbl9zeW1ib2wpIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8g
UGVyZm9ybXMgdGhlIGNvbnZlcnNpb24uCisgICAgICAgIC8vIFRoZSBvdXRwdXQgcGFyYW1ldGVy
ICdwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCcgaXMgc2V0IHRvIHRoZSBudW1iZXIKKyAgICAg
ICAgLy8gb2YgY2hhcmFjdGVycyB0aGF0IGhhdmUgYmVlbiBwcm9jZXNzZWQgdG8gcmVhZCB0aGUg
bnVtYmVyLgorICAgICAgICAvLyBTcGFjZXMgdGhhbiBhcmUgcHJvY2Vzc2VkIHdpdGggQUxMT1df
e0xFQURJTkd8VFJBSUxJTkd9X1NQQUNFUyBhcmUgaW5jbHVkZWQKKyAgICAgICAgLy8gaW4gdGhl
ICdwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCcuIFRyYWlsaW5nIGp1bmsgaXMgbmV2ZXIgaW5j
bHVkZWQuCisgICAgICAgIGRvdWJsZSBTdHJpbmdUb0RvdWJsZShjb25zdCBjaGFyKiBidWZmZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50KiBwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCk7CisgICAg
ICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IGludCBmbGFnc187CisgICAgICAgIGNv
bnN0IGRvdWJsZSBlbXB0eV9zdHJpbmdfdmFsdWVfOworICAgICAgICBjb25zdCBkb3VibGUganVu
a19zdHJpbmdfdmFsdWVfOworICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBpbmZpbml0eV9zeW1i
b2xfOworICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBuYW5fc3ltYm9sXzsKKyAgICAgICAgCisg
ICAgICAgIERJU0FMTE9XX0lNUExJQ0lUX0NPTlNUUlVDVE9SUyhTdHJpbmdUb0RvdWJsZUNvbnZl
cnRlcik7CisgICAgfTsKKyAgICAKK30gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbgor
CisjZW5kaWYgIC8vIERPVUJMRV9DT05WRVJTSU9OX0RPVUJMRV9DT05WRVJTSU9OX0hfCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZG91YmxlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZG91YmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjNkM2I0ZjA5MWJl
YTAwNDQxOGRmNDZkMjZjZjY5ZDM1NjNiYzc1NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kb3VibGUuaApAQCAtMCwwICsxLDI0NSBAQAorLy8gQ29w
eXJpZ2h0IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xh
aW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
CisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
Ky8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWZuZGVmIERPVUJMRV9DT05WRVJTSU9OX0RPVUJMRV9I
XworI2RlZmluZSBET1VCTEVfQ09OVkVSU0lPTl9ET1VCTEVfSF8KKworI2luY2x1ZGUgImRpeS1m
cC5oIgorCituYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIC8vIFdlIGFz
c3VtZSB0aGF0IGRvdWJsZXMgYW5kIHVpbnQ2NF90IGhhdmUgdGhlIHNhbWUgZW5kaWFubmVzcy4K
KyAgICBzdGF0aWMgdWludDY0X3QgZG91YmxlX3RvX3VpbnQ2NChkb3VibGUgZCkgeyByZXR1cm4g
Qml0Q2FzdDx1aW50NjRfdD4oZCk7IH0KKyAgICBzdGF0aWMgZG91YmxlIHVpbnQ2NF90b19kb3Vi
bGUodWludDY0X3QgZDY0KSB7IHJldHVybiBCaXRDYXN0PGRvdWJsZT4oZDY0KTsgfQorICAgIAor
ICAgIC8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIGRvdWJsZXMuCisgICAgY2xhc3MgRG91YmxlIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBrU2lnbk1hc2sgPSBV
SU5UNjRfMlBBUlRfQygweDgwMDAwMDAwLCAwMDAwMDAwMCk7CisgICAgICAgIHN0YXRpYyBjb25z
dCB1aW50NjRfdCBrRXhwb25lbnRNYXNrID0gVUlOVDY0XzJQQVJUX0MoMHg3RkYwMDAwMCwgMDAw
MDAwMDApOworICAgICAgICBzdGF0aWMgY29uc3QgdWludDY0X3Qga1NpZ25pZmljYW5kTWFzayA9
IFVJTlQ2NF8yUEFSVF9DKDB4MDAwRkZGRkYsIEZGRkZGRkZGKTsKKyAgICAgICAgc3RhdGljIGNv
bnN0IHVpbnQ2NF90IGtIaWRkZW5CaXQgPSBVSU5UNjRfMlBBUlRfQygweDAwMTAwMDAwLCAwMDAw
MDAwMCk7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQga1BoeXNpY2FsU2lnbmlmaWNhbmRTaXpl
ID0gNTI7ICAvLyBFeGNsdWRlcyB0aGUgaGlkZGVuIGJpdC4KKyAgICAgICAgc3RhdGljIGNvbnN0
IGludCBrU2lnbmlmaWNhbmRTaXplID0gNTM7CisgICAgICAgIAorICAgICAgICBEb3VibGUoKSA6
IGQ2NF8oMCkge30KKyAgICAgICAgZXhwbGljaXQgRG91YmxlKGRvdWJsZSBkKSA6IGQ2NF8oZG91
YmxlX3RvX3VpbnQ2NChkKSkge30KKyAgICAgICAgZXhwbGljaXQgRG91YmxlKHVpbnQ2NF90IGQ2
NCkgOiBkNjRfKGQ2NCkge30KKyAgICAgICAgZXhwbGljaXQgRG91YmxlKERpeUZwIGRpeV9mcCkK
KyAgICAgICAgOiBkNjRfKERpeUZwVG9VaW50NjQoZGl5X2ZwKSkge30KKyAgICAgICAgCisgICAg
ICAgIC8vIFRoZSB2YWx1ZSBlbmNvZGVkIGJ5IHRoaXMgRG91YmxlIG11c3QgYmUgZ3JlYXRlciBv
ciBlcXVhbCB0byArMC4wLgorICAgICAgICAvLyBJdCBtdXN0IG5vdCBiZSBzcGVjaWFsIChpbmZp
bml0eSwgb3IgTmFOKS4KKyAgICAgICAgRGl5RnAgQXNEaXlGcCgpIGNvbnN0IHsKKyAgICAgICAg
ICAgIEFTU0VSVChTaWduKCkgPiAwKTsKKyAgICAgICAgICAgIEFTU0VSVCghSXNTcGVjaWFsKCkp
OworICAgICAgICAgICAgcmV0dXJuIERpeUZwKFNpZ25pZmljYW5kKCksIEV4cG9uZW50KCkpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBUaGUgdmFsdWUgZW5jb2RlZCBieSB0aGlz
IERvdWJsZSBtdXN0IGJlIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiAwLgorICAgICAgICBEaXlGcCBB
c05vcm1hbGl6ZWREaXlGcCgpIGNvbnN0IHsKKyAgICAgICAgICAgIEFTU0VSVCh2YWx1ZSgpID4g
MC4wKTsKKyAgICAgICAgICAgIHVpbnQ2NF90IGYgPSBTaWduaWZpY2FuZCgpOworICAgICAgICAg
ICAgaW50IGUgPSBFeHBvbmVudCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGUg
Y3VycmVudCBkb3VibGUgY291bGQgYmUgYSBkZW5vcm1hbC4KKyAgICAgICAgICAgIHdoaWxlICgo
ZiAmIGtIaWRkZW5CaXQpID09IDApIHsKKyAgICAgICAgICAgICAgICBmIDw8PSAxOworICAgICAg
ICAgICAgICAgIGUtLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIERvIHRoZSBmaW5h
bCBzaGlmdHMgaW4gb25lIGdvLgorICAgICAgICAgICAgZiA8PD0gRGl5RnA6OmtTaWduaWZpY2Fu
ZFNpemUgLSBrU2lnbmlmaWNhbmRTaXplOworICAgICAgICAgICAgZSAtPSBEaXlGcDo6a1NpZ25p
ZmljYW5kU2l6ZSAtIGtTaWduaWZpY2FuZFNpemU7CisgICAgICAgICAgICByZXR1cm4gRGl5RnAo
ZiwgZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFJldHVybnMgdGhlIGRvdWJs
ZSdzIGJpdCBhcyB1aW50NjQuCisgICAgICAgIHVpbnQ2NF90IEFzVWludDY0KCkgY29uc3Qgewor
ICAgICAgICAgICAgcmV0dXJuIGQ2NF87CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8v
IFJldHVybnMgdGhlIG5leHQgZ3JlYXRlciBkb3VibGUuIFJldHVybnMgK2luZmluaXR5IG9uIGlu
cHV0ICtpbmZpbml0eS4KKyAgICAgICAgZG91YmxlIE5leHREb3VibGUoKSBjb25zdCB7CisgICAg
ICAgICAgICBpZiAoZDY0XyA9PSBrSW5maW5pdHkpIHJldHVybiBEb3VibGUoa0luZmluaXR5KS52
YWx1ZSgpOworICAgICAgICAgICAgaWYgKFNpZ24oKSA8IDAgJiYgU2lnbmlmaWNhbmQoKSA9PSAw
KSB7CisgICAgICAgICAgICAgICAgLy8gLTAuMAorICAgICAgICAgICAgICAgIHJldHVybiAwLjA7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoU2lnbigpIDwgMCkgeworICAgICAgICAg
ICAgICAgIHJldHVybiBEb3VibGUoZDY0XyAtIDEpLnZhbHVlKCk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIHJldHVybiBEb3VibGUoZDY0XyArIDEpLnZhbHVlKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludCBFeHBvbmVudCgp
IGNvbnN0IHsKKyAgICAgICAgICAgIGlmIChJc0Rlbm9ybWFsKCkpIHJldHVybiBrRGVub3JtYWxF
eHBvbmVudDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdWludDY0X3QgZDY0ID0gQXNVaW50
NjQoKTsKKyAgICAgICAgICAgIGludCBiaWFzZWRfZSA9CisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQ+KChkNjQgJiBrRXhwb25lbnRNYXNrKSA+PiBrUGh5c2ljYWxTaWduaWZpY2FuZFNpemUp
OworICAgICAgICAgICAgcmV0dXJuIGJpYXNlZF9lIC0ga0V4cG9uZW50QmlhczsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgdWludDY0X3QgU2lnbmlmaWNhbmQoKSBjb25zdCB7CisgICAg
ICAgICAgICB1aW50NjRfdCBkNjQgPSBBc1VpbnQ2NCgpOworICAgICAgICAgICAgdWludDY0X3Qg
c2lnbmlmaWNhbmQgPSBkNjQgJiBrU2lnbmlmaWNhbmRNYXNrOworICAgICAgICAgICAgaWYgKCFJ
c0Rlbm9ybWFsKCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2lnbmlmaWNhbmQgKyBrSGlk
ZGVuQml0OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2ln
bmlmaWNhbmQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgZG91YmxlIGlzIGEgZGVub3JtYWwuCisgICAgICAgIGJvb2wg
SXNEZW5vcm1hbCgpIGNvbnN0IHsKKyAgICAgICAgICAgIHVpbnQ2NF90IGQ2NCA9IEFzVWludDY0
KCk7CisgICAgICAgICAgICByZXR1cm4gKGQ2NCAmIGtFeHBvbmVudE1hc2spID09IDA7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFdlIGNvbnNpZGVyIGRlbm9ybWFscyBub3QgdG8g
YmUgc3BlY2lhbC4KKyAgICAgICAgLy8gSGVuY2Ugb25seSBJbmZpbml0eSBhbmQgTmFOIGFyZSBz
cGVjaWFsLgorICAgICAgICBib29sIElzU3BlY2lhbCgpIGNvbnN0IHsKKyAgICAgICAgICAgIHVp
bnQ2NF90IGQ2NCA9IEFzVWludDY0KCk7CisgICAgICAgICAgICByZXR1cm4gKGQ2NCAmIGtFeHBv
bmVudE1hc2spID09IGtFeHBvbmVudE1hc2s7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGJvb2wgSXNOYW4oKSBjb25zdCB7CisgICAgICAgICAgICB1aW50NjRfdCBkNjQgPSBBc1VpbnQ2
NCgpOworICAgICAgICAgICAgcmV0dXJuICgoZDY0ICYga0V4cG9uZW50TWFzaykgPT0ga0V4cG9u
ZW50TWFzaykgJiYKKyAgICAgICAgICAgICgoZDY0ICYga1NpZ25pZmljYW5kTWFzaykgIT0gMCk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgSXNJbmZpbml0ZSgpIGNvbnN0IHsK
KyAgICAgICAgICAgIHVpbnQ2NF90IGQ2NCA9IEFzVWludDY0KCk7CisgICAgICAgICAgICByZXR1
cm4gKChkNjQgJiBrRXhwb25lbnRNYXNrKSA9PSBrRXhwb25lbnRNYXNrKSAmJgorICAgICAgICAg
ICAgKChkNjQgJiBrU2lnbmlmaWNhbmRNYXNrKSA9PSAwKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaW50IFNpZ24oKSBjb25zdCB7CisgICAgICAgICAgICB1aW50NjRfdCBkNjQgPSBB
c1VpbnQ2NCgpOworICAgICAgICAgICAgcmV0dXJuIChkNjQgJiBrU2lnbk1hc2spID09IDA/IDE6
IC0xOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBQcmVjb25kaXRpb246IHRoZSB2
YWx1ZSBlbmNvZGVkIGJ5IHRoaXMgRG91YmxlIG11c3QgYmUgZ3JlYXRlciBvciBlcXVhbAorICAg
ICAgICAvLyB0aGFuICswLjAuCisgICAgICAgIERpeUZwIFVwcGVyQm91bmRhcnkoKSBjb25zdCB7
CisgICAgICAgICAgICBBU1NFUlQoU2lnbigpID4gMCk7CisgICAgICAgICAgICByZXR1cm4gRGl5
RnAoU2lnbmlmaWNhbmQoKSAqIDIgKyAxLCBFeHBvbmVudCgpIC0gMSk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIC8vIENvbXB1dGVzIHRoZSB0d28gYm91bmRhcmllcyBvZiB0aGlzLgor
ICAgICAgICAvLyBUaGUgYmlnZ2VyIGJvdW5kYXJ5IChtX3BsdXMpIGlzIG5vcm1hbGl6ZWQuIFRo
ZSBsb3dlciBib3VuZGFyeSBoYXMgdGhlIHNhbWUKKyAgICAgICAgLy8gZXhwb25lbnQgYXMgbV9w
bHVzLgorICAgICAgICAvLyBQcmVjb25kaXRpb246IHRoZSB2YWx1ZSBlbmNvZGVkIGJ5IHRoaXMg
RG91YmxlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuCisgICAgICAgIHZvaWQgTm9ybWFsaXplZEJv
dW5kYXJpZXMoRGl5RnAqIG91dF9tX21pbnVzLCBEaXlGcCogb3V0X21fcGx1cykgY29uc3Qgewor
ICAgICAgICAgICAgQVNTRVJUKHZhbHVlKCkgPiAwLjApOworICAgICAgICAgICAgRGl5RnAgdiA9
IHRoaXMtPkFzRGl5RnAoKTsKKyAgICAgICAgICAgIGJvb2wgc2lnbmlmaWNhbmRfaXNfemVybyA9
ICh2LmYoKSA9PSBrSGlkZGVuQml0KTsKKyAgICAgICAgICAgIERpeUZwIG1fcGx1cyA9IERpeUZw
OjpOb3JtYWxpemUoRGl5RnAoKHYuZigpIDw8IDEpICsgMSwgdi5lKCkgLSAxKSk7CisgICAgICAg
ICAgICBEaXlGcCBtX21pbnVzOworICAgICAgICAgICAgaWYgKHNpZ25pZmljYW5kX2lzX3plcm8g
JiYgdi5lKCkgIT0ga0Rlbm9ybWFsRXhwb25lbnQpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUg
Ym91bmRhcnkgaXMgY2xvc2VyLiBUaGluayBvZiB2ID0gMTAwMGUxMCBhbmQgdi0gPSA5OTk5ZTku
CisgICAgICAgICAgICAgICAgLy8gVGhlbiB0aGUgYm91bmRhcnkgKD09ICh2IC0gdi0pLzIpIGlz
IG5vdCBqdXN0IGF0IGEgZGlzdGFuY2Ugb2YgMWU5IGJ1dAorICAgICAgICAgICAgICAgIC8vIGF0
IGEgZGlzdGFuY2Ugb2YgMWU4LgorICAgICAgICAgICAgICAgIC8vIFRoZSBvbmx5IGV4Y2VwdGlv
biBpcyBmb3IgdGhlIHNtYWxsZXN0IG5vcm1hbDogdGhlIGxhcmdlc3QgZGVub3JtYWwgaXMKKyAg
ICAgICAgICAgICAgICAvLyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBhcyBpdHMgc3VjY2Vzc29yLgor
ICAgICAgICAgICAgICAgIC8vIE5vdGU6IGRlbm9ybWFscyBoYXZlIHRoZSBzYW1lIGV4cG9uZW50
IGFzIHRoZSBzbWFsbGVzdCBub3JtYWxzLgorICAgICAgICAgICAgICAgIG1fbWludXMgPSBEaXlG
cCgodi5mKCkgPDwgMikgLSAxLCB2LmUoKSAtIDIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBtX21pbnVzID0gRGl5RnAoKHYuZigpIDw8IDEpIC0gMSwgdi5lKCkgLSAx
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fbWludXMuc2V0X2YobV9taW51cy5mKCkg
PDwgKG1fbWludXMuZSgpIC0gbV9wbHVzLmUoKSkpOworICAgICAgICAgICAgbV9taW51cy5zZXRf
ZShtX3BsdXMuZSgpKTsKKyAgICAgICAgICAgICpvdXRfbV9wbHVzID0gbV9wbHVzOworICAgICAg
ICAgICAgKm91dF9tX21pbnVzID0gbV9taW51czsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgZG91YmxlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gdWludDY0X3RvX2RvdWJsZShkNjRfKTsg
fQorICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJucyB0aGUgc2lnbmlmaWNhbmQgc2l6ZSBmb3Ig
YSBnaXZlbiBvcmRlciBvZiBtYWduaXR1ZGUuCisgICAgICAgIC8vIElmIHYgPSBmKjJeZSB3aXRo
IDJecC0xIDw9IGYgPD0gMl5wIHRoZW4gcCtlIGlzIHYncyBvcmRlciBvZiBtYWduaXR1ZGUuCisg
ICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIHNpZ25pZmljYW50
IGJpbmFyeSBkaWdpdHMgdiB3aWxsIGhhdmUKKyAgICAgICAgLy8gb25jZSBpdCdzIGVuY29kZWQg
aW50byBhIGRvdWJsZS4gSW4gYWxtb3N0IGFsbCBjYXNlcyB0aGlzIGlzIGVxdWFsIHRvCisgICAg
ICAgIC8vIGtTaWduaWZpY2FuZFNpemUuIFRoZSBvbmx5IGV4Y2VwdGlvbnMgYXJlIGRlbm9ybWFs
cy4gVGhleSBzdGFydCB3aXRoCisgICAgICAgIC8vIGxlYWRpbmcgemVyb2VzIGFuZCB0aGVpciBl
ZmZlY3RpdmUgc2lnbmlmaWNhbmQtc2l6ZSBpcyBoZW5jZSBzbWFsbGVyLgorICAgICAgICBzdGF0
aWMgaW50IFNpZ25pZmljYW5kU2l6ZUZvck9yZGVyT2ZNYWduaXR1ZGUoaW50IG9yZGVyKSB7Cisg
ICAgICAgICAgICBpZiAob3JkZXIgPj0gKGtEZW5vcm1hbEV4cG9uZW50ICsga1NpZ25pZmljYW5k
U2l6ZSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4ga1NpZ25pZmljYW5kU2l6ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvcmRlciA8PSBrRGVub3JtYWxFeHBvbmVudCkgcmV0
dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gb3JkZXIgLSBrRGVub3JtYWxFeHBvbmVudDsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIGRvdWJsZSBJbmZpbml0eSgpIHsKKyAg
ICAgICAgICAgIHJldHVybiBEb3VibGUoa0luZmluaXR5KS52YWx1ZSgpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBzdGF0aWMgZG91YmxlIE5hTigpIHsKKyAgICAgICAgICAgIHJldHVy
biBEb3VibGUoa05hTikudmFsdWUoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2YXRl
OgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtFeHBvbmVudEJpYXMgPSAweDNGRiArIGtQaHlz
aWNhbFNpZ25pZmljYW5kU2l6ZTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBrRGVub3JtYWxF
eHBvbmVudCA9IC1rRXhwb25lbnRCaWFzICsgMTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBr
TWF4RXhwb25lbnQgPSAweDdGRiAtIGtFeHBvbmVudEJpYXM7CisgICAgICAgIHN0YXRpYyBjb25z
dCB1aW50NjRfdCBrSW5maW5pdHkgPSBVSU5UNjRfMlBBUlRfQygweDdGRjAwMDAwLCAwMDAwMDAw
MCk7CisgICAgICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBrTmFOID0gVUlOVDY0XzJQQVJUX0Mo
MHg3RkY4MDAwMCwgMDAwMDAwMDApOworICAgICAgICAKKyAgICAgICAgY29uc3QgdWludDY0X3Qg
ZDY0XzsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyB1aW50NjRfdCBEaXlGcFRvVWludDY0KERp
eUZwIGRpeV9mcCkgeworICAgICAgICAgICAgdWludDY0X3Qgc2lnbmlmaWNhbmQgPSBkaXlfZnAu
ZigpOworICAgICAgICAgICAgaW50IGV4cG9uZW50ID0gZGl5X2ZwLmUoKTsKKyAgICAgICAgICAg
IHdoaWxlIChzaWduaWZpY2FuZCA+IGtIaWRkZW5CaXQgKyBrU2lnbmlmaWNhbmRNYXNrKSB7Cisg
ICAgICAgICAgICAgICAgc2lnbmlmaWNhbmQgPj49IDE7CisgICAgICAgICAgICAgICAgZXhwb25l
bnQrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChleHBvbmVudCA+PSBrTWF4RXhw
b25lbnQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4ga0luZmluaXR5OworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKGV4cG9uZW50IDwga0Rlbm9ybWFsRXhwb25lbnQpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdoaWxlIChl
eHBvbmVudCA+IGtEZW5vcm1hbEV4cG9uZW50ICYmIChzaWduaWZpY2FuZCAmIGtIaWRkZW5CaXQp
ID09IDApIHsKKyAgICAgICAgICAgICAgICBzaWduaWZpY2FuZCA8PD0gMTsKKyAgICAgICAgICAg
ICAgICBleHBvbmVudC0tOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdWludDY0X3QgYmlh
c2VkX2V4cG9uZW50OworICAgICAgICAgICAgaWYgKGV4cG9uZW50ID09IGtEZW5vcm1hbEV4cG9u
ZW50ICYmIChzaWduaWZpY2FuZCAmIGtIaWRkZW5CaXQpID09IDApIHsKKyAgICAgICAgICAgICAg
ICBiaWFzZWRfZXhwb25lbnQgPSAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBiaWFzZWRfZXhwb25lbnQgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oZXhwb25lbnQgKyBr
RXhwb25lbnRCaWFzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAoc2lnbmlm
aWNhbmQgJiBrU2lnbmlmaWNhbmRNYXNrKSB8CisgICAgICAgICAgICAoYmlhc2VkX2V4cG9uZW50
IDw8IGtQaHlzaWNhbFNpZ25pZmljYW5kU2l6ZSk7CisgICAgICAgIH0KKyAgICB9OworICAgIAor
fSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCisKKyNlbmRpZiAgLy8gRE9VQkxFX0NP
TlZFUlNJT05fRE9VQkxFX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L2R0b2EvZmFzdC1kdG9hLmNjIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2Zhc3Qt
ZHRvYS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5kZDg2OGUwYjM4YTc1MzhlNWY5ZGE3MDVhOTlkMGFlZTIwMjQ4
ODAwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2Zh
c3QtZHRvYS5jYwpAQCAtMCwwICsxLDczNSBAQAorLy8gQ29weXJpZ2h0IDIwMTAgdGhlIFY4IHBy
b2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisv
LyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisv
LyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
CisjaW5jbHVkZSAiZmFzdC1kdG9hLmgiCisKKyNpbmNsdWRlICJjYWNoZWQtcG93ZXJzLmgiCisj
aW5jbHVkZSAiZGl5LWZwLmgiCisjaW5jbHVkZSAiZG91YmxlLmgiCisKK25hbWVzcGFjZSBkb3Vi
bGVfY29udmVyc2lvbiB7CisgICAgCisgICAgLy8gVGhlIG1pbmltYWwgYW5kIG1heGltYWwgdGFy
Z2V0IGV4cG9uZW50IGRlZmluZSB0aGUgcmFuZ2Ugb2YgdydzIGJpbmFyeQorICAgIC8vIGV4cG9u
ZW50LCB3aGVyZSAndycgaXMgdGhlIHJlc3VsdCBvZiBtdWx0aXBseWluZyB0aGUgaW5wdXQgYnkg
YSBjYWNoZWQgcG93ZXIKKyAgICAvLyBvZiB0ZW4uCisgICAgLy8KKyAgICAvLyBBIGRpZmZlcmVu
dCByYW5nZSBtaWdodCBiZSBjaG9zZW4gb24gYSBkaWZmZXJlbnQgcGxhdGZvcm0sIHRvIG9wdGlt
aXplIGRpZ2l0CisgICAgLy8gZ2VuZXJhdGlvbiwgYnV0IGEgc21hbGxlciByYW5nZSByZXF1aXJl
cyBtb3JlIHBvd2VycyBvZiB0ZW4gdG8gYmUgY2FjaGVkLgorICAgIHN0YXRpYyBjb25zdCBpbnQg
a01pbmltYWxUYXJnZXRFeHBvbmVudCA9IC02MDsKKyAgICBzdGF0aWMgY29uc3QgaW50IGtNYXhp
bWFsVGFyZ2V0RXhwb25lbnQgPSAtMzI7CisgICAgCisgICAgCisgICAgLy8gQWRqdXN0cyB0aGUg
bGFzdCBkaWdpdCBvZiB0aGUgZ2VuZXJhdGVkIG51bWJlciwgYW5kIHNjcmVlbnMgb3V0IGdlbmVy
YXRlZAorICAgIC8vIHNvbHV0aW9ucyB0aGF0IG1heSBiZSBpbmFjY3VyYXRlLiBBIHNvbHV0aW9u
IG1heSBiZSBpbmFjY3VyYXRlIGlmIGl0IGlzCisgICAgLy8gb3V0c2lkZSB0aGUgc2FmZSBpbnRl
cnZhbCwgb3IgaWYgd2UgY2Fubm90IHByb3ZlIHRoYXQgaXQgaXMgY2xvc2VyIHRvIHRoZQorICAg
IC8vIGlucHV0IHRoYW4gYSBuZWlnaGJvcmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2FtZSBs
ZW5ndGguCisgICAgLy8KKyAgICAvLyBJbnB1dDogKiBidWZmZXIgY29udGFpbmluZyB0aGUgZGln
aXRzIG9mIHRvb19oaWdoIC8gMTBea2FwcGEKKyAgICAvLyAgICAgICAgKiB0aGUgYnVmZmVyJ3Mg
bGVuZ3RoCisgICAgLy8gICAgICAgICogZGlzdGFuY2VfdG9vX2hpZ2hfdyA9PSAodG9vX2hpZ2gg
LSB3KS5mKCkgKiB1bml0CisgICAgLy8gICAgICAgICogdW5zYWZlX2ludGVydmFsID09ICh0b29f
aGlnaCAtIHRvb19sb3cpLmYoKSAqIHVuaXQKKyAgICAvLyAgICAgICAgKiByZXN0ID0gKHRvb19o
aWdoIC0gYnVmZmVyICogMTBea2FwcGEpLmYoKSAqIHVuaXQKKyAgICAvLyAgICAgICAgKiB0ZW5f
a2FwcGEgPSAxMF5rYXBwYSAqIHVuaXQKKyAgICAvLyAgICAgICAgKiB1bml0ID0gdGhlIGNvbW1v
biBtdWx0aXBsaWVyCisgICAgLy8gT3V0cHV0OiByZXR1cm5zIHRydWUgaWYgdGhlIGJ1ZmZlciBp
cyBndWFyYW50ZWVkIHRvIGNvbnRhaW4gdGhlIGNsb3Nlc3QKKyAgICAvLyAgICByZXByZXNlbnRh
YmxlIG51bWJlciB0byB0aGUgaW5wdXQuCisgICAgLy8gIE1vZGlmaWVzIHRoZSBnZW5lcmF0ZWQg
ZGlnaXRzIGluIHRoZSBidWZmZXIgdG8gYXBwcm9hY2ggKHJvdW5kIHRvd2FyZHMpIHcuCisgICAg
c3RhdGljIGJvb2wgUm91bmRXZWVkKFZlY3RvcjxjaGFyPiBidWZmZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2
NF90IGRpc3RhbmNlX3Rvb19oaWdoX3csCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2
NF90IHVuc2FmZV9pbnRlcnZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3Qg
cmVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgdGVuX2thcHBhLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCB1bml0KSB7CisgICAgICAgIHVpbnQ2NF90
IHNtYWxsX2Rpc3RhbmNlID0gZGlzdGFuY2VfdG9vX2hpZ2hfdyAtIHVuaXQ7CisgICAgICAgIHVp
bnQ2NF90IGJpZ19kaXN0YW5jZSA9IGRpc3RhbmNlX3Rvb19oaWdoX3cgKyB1bml0OworICAgICAg
ICAvLyBMZXQgd19sb3cgID0gdG9vX2hpZ2ggLSBiaWdfZGlzdGFuY2UsIGFuZAorICAgICAgICAv
LyAgICAgd19oaWdoID0gdG9vX2hpZ2ggLSBzbWFsbF9kaXN0YW5jZS4KKyAgICAgICAgLy8gTm90
ZTogd19sb3cgPCB3IDwgd19oaWdoCisgICAgICAgIC8vCisgICAgICAgIC8vIFRoZSByZWFsIHcg
KCogdW5pdCkgbXVzdCBsaWUgc29tZXdoZXJlIGluc2lkZSB0aGUgaW50ZXJ2YWwKKyAgICAgICAg
Ly8gXXdfbG93OyB3X2hpZ2hbIChvZnRlbiB3cml0dGVuIGFzICIod19sb3c7IHdfaGlnaCkiKQor
ICAgICAgICAKKyAgICAgICAgLy8gQmFzaWNhbGx5IHRoZSBidWZmZXIgY3VycmVudGx5IGNvbnRh
aW5zIGEgbnVtYmVyIGluIHRoZSB1bnNhZmUgaW50ZXJ2YWwKKyAgICAgICAgLy8gXXRvb19sb3c7
IHRvb19oaWdoWyB3aXRoIHRvb19sb3cgPCB3IDwgdG9vX2hpZ2gKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gIHRvb19oaWdoIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAt
IC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAg
XnYgMSB1bml0ICAgICAgICAgICAgXiAgICAgIF4gICAgICAgICAgICAgICAgIF4gICAgICBeCisg
ICAgICAgIC8vICBib3VuZGFyeV9oaWdoIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgLiAgICAg
IC4gICAgICAgICAgICAgICAgIC4gICAgICAuCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAg
ICAgXnYgMSB1bml0ICAgICAgICAgICAgLiAgICAgIC4gICAgICAgICAgICAgICAgIC4gICAgICAu
CisgICAgICAgIC8vICAgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAgKyAg
LSAtICsgLSAtIC0gLSAtIC0gICAgIC4gICAgICAuCisgICAgICAgIC8vICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAgICAgIC4gICAgICAgICBeICAgICAgIC4gICAg
ICAuCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LiAgYmlnX2Rpc3RhbmNlICAuICAgICAgIC4gICAgICAuCisgICAgICAgIC8vICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAgICAgIC4gICAgICAgICAuICAgICAgIC4g
ICAgcmVzdAorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtYWxsX2Rp
c3RhbmNlICAgICAuICAgICAgICAgLiAgICAgICAuICAgICAgLgorICAgICAgICAvLyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgICAgICAuICAgICAgICAgLiAgICAg
ICAuICAgICAgLgorICAgICAgICAvLyAgd19oaWdoIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g
LSAtIC0gLSAtICAgICAuICAgICAgICAgLiAgICAgICAuICAgICAgLgorICAgICAgICAvLyAgICAg
ICAgICAgICAgICAgICAgIF52IDEgdW5pdCAgICAgICAgICAgICAgICAgICAuICAgICAgICAgLiAg
ICAgICAuICAgICAgLgorICAgICAgICAvLyAgdyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tICAgICAuICAgICAgICAgLiAgICAgICAuICAgICAgLgorICAgICAgICAvLyAg
ICAgICAgICAgICAgICAgICAgIF52IDEgdW5pdCAgICAgICAgICAgICAgICAgICB2ICAgICAgICAg
LiAgICAgICAuICAgICAgLgorICAgICAgICAvLyAgd19sb3cgIC0gLSAtIC0gLSAtIC0gLSAtIC0g
LSAtIC0gLSAtIC0gLSAtIC0gLSAtICAgICAgICAgLiAgICAgICAuICAgICAgLgorICAgICAgICAv
LyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLiAgICAgICAuICAgICAgdgorICAgICAgICAvLyAgYnVmZmVyIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0KKyAgICAg
ICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC4gICAgICAgLgorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2FmZV9pbnRlcnZhbCAgICAuCisgICAgICAgIC8vICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ICAg
ICAgIC4KKyAgICAgICAgLy8gICAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAt
IC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAgICAgLgorICAgICAgICAvLyAgICAgICAgICAgICAgICAg
ICAgIF52IDEgdW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuCisgICAg
ICAgIC8vICBib3VuZGFyeV9sb3cgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAg
ICAgICAgICAgIHVuc2FmZV9pbnRlcnZhbAorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAg
IF52IDEgdW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2CisgICAgICAg
IC8vICB0b29fbG93ICAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAt
IC0gLSAtIC0gLSAtIC0gLSAtIC0gLQorICAgICAgICAvLworICAgICAgICAvLworICAgICAgICAv
LyBOb3RlIHRoYXQgdGhlIHZhbHVlIG9mIGJ1ZmZlciBjb3VsZCBsaWUgYW55d2hlcmUgaW5zaWRl
IHRoZSByYW5nZSB0b29fbG93CisgICAgICAgIC8vIHRvIHRvb19oaWdoLgorICAgICAgICAvLwor
ICAgICAgICAvLyBib3VuZGFyeV9sb3csIGJvdW5kYXJ5X2hpZ2ggYW5kIHcgYXJlIGFwcHJveGlt
YXRpb25zIG9mIHRoZSByZWFsIGJvdW5kYXJpZXMKKyAgICAgICAgLy8gYW5kIHYgKHRoZSBpbnB1
dCBudW1iZXIpLiBUaGV5IGFyZSBndWFyYW50ZWVkIHRvIGJlIHByZWNpc2UgdXAgdG8gb25lIHVu
aXQuCisgICAgICAgIC8vIEluIGZhY3QgdGhlIGVycm9yIGlzIGd1YXJhbnRlZWQgdG8gYmUgc3Ry
aWN0bHkgbGVzcyB0aGFuIG9uZSB1bml0LgorICAgICAgICAvLworICAgICAgICAvLyBBbnl0aGlu
ZyB0aGF0IGxpZXMgb3V0c2lkZSB0aGUgdW5zYWZlIGludGVydmFsIGlzIGd1YXJhbnRlZWQgbm90
IHRvIHJvdW5kCisgICAgICAgIC8vIHRvIHYgd2hlbiByZWFkIGFnYWluLgorICAgICAgICAvLyBB
bnl0aGluZyB0aGF0IGxpZXMgaW5zaWRlIHRoZSBzYWZlIGludGVydmFsIGlzIGd1YXJhbnRlZWQg
dG8gcm91bmQgdG8gdgorICAgICAgICAvLyB3aGVuIHJlYWQgYWdhaW4uCisgICAgICAgIC8vIElm
IHRoZSBudW1iZXIgaW5zaWRlIHRoZSBidWZmZXIgbGllcyBpbnNpZGUgdGhlIHVuc2FmZSBpbnRl
cnZhbCBidXQgbm90CisgICAgICAgIC8vIGluc2lkZSB0aGUgc2FmZSBpbnRlcnZhbCB0aGVuIHdl
IHNpbXBseSBkbyBub3Qga25vdyBhbmQgYmFpbCBvdXQgKHJldHVybmluZworICAgICAgICAvLyBm
YWxzZSkuCisgICAgICAgIC8vCisgICAgICAgIC8vIFNpbWlsYXJseSB3ZSBoYXZlIHRvIHRha2Ug
aW50byBhY2NvdW50IHRoZSBpbXByZWNpc2lvbiBvZiAndycgd2hlbiBmaW5kaW5nCisgICAgICAg
IC8vIHRoZSBjbG9zZXN0IHJlcHJlc2VudGF0aW9uIG9mICd3Jy4gSWYgd2UgaGF2ZSB0d28gcG90
ZW50aWFsCisgICAgICAgIC8vIHJlcHJlc2VudGF0aW9ucywgYW5kIG9uZSBpcyBjbG9zZXIgdG8g
Ym90aCB3X2xvdyBhbmQgd19oaWdoLCB0aGVuIHdlIGtub3cKKyAgICAgICAgLy8gaXQgaXMgY2xv
c2VyIHRvIHRoZSBhY3R1YWwgdmFsdWUgdi4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gQnkgZ2Vu
ZXJhdGluZyB0aGUgZGlnaXRzIG9mIHRvb19oaWdoIHdlIGdvdCB0aGUgbGFyZ2VzdCAoY2xvc2Vz
dCB0bworICAgICAgICAvLyB0b29faGlnaCkgYnVmZmVyIHRoYXQgaXMgc3RpbGwgaW4gdGhlIHVu
c2FmZSBpbnRlcnZhbC4gSW4gdGhlIGNhc2Ugd2hlcmUKKyAgICAgICAgLy8gd19oaWdoIDwgYnVm
ZmVyIDwgdG9vX2hpZ2ggd2UgdHJ5IHRvIGRlY3JlbWVudCB0aGUgYnVmZmVyLgorICAgICAgICAv
LyBUaGlzIHdheSB0aGUgYnVmZmVyIGFwcHJvYWNoZXMgKHJvdW5kcyB0b3dhcmRzKSB3LgorICAg
ICAgICAvLyBUaGVyZSBhcmUgMyBjb25kaXRpb25zIHRoYXQgc3RvcCB0aGUgZGVjcmVtZW50YXRp
b24gcHJvY2VzczoKKyAgICAgICAgLy8gICAxKSB0aGUgYnVmZmVyIGlzIGFscmVhZHkgYmVsb3cg
d19oaWdoCisgICAgICAgIC8vICAgMikgZGVjcmVtZW50aW5nIHRoZSBidWZmZXIgd291bGQgbWFr
ZSBpdCBsZWF2ZSB0aGUgdW5zYWZlIGludGVydmFsCisgICAgICAgIC8vICAgMykgZGVjcmVtZW50
aW5nIHRoZSBidWZmZXIgd291bGQgeWllbGQgYSBudW1iZXIgYmVsb3cgd19oaWdoIGFuZCBmYXJ0
aGVyCisgICAgICAgIC8vICAgICAgYXdheSB0aGFuIHRoZSBjdXJyZW50IG51bWJlci4gSW4gb3Ro
ZXIgd29yZHM6CisgICAgICAgIC8vICAgICAgICAgICAgICAoYnVmZmVyey0xfSA8IHdfaGlnaCkg
JiYgd19oaWdoIC0gYnVmZmVyey0xfSA+IGJ1ZmZlciAtIHdfaGlnaAorICAgICAgICAvLyBJbnN0
ZWFkIG9mIHVzaW5nIHRoZSBidWZmZXIgZGlyZWN0bHkgd2UgdXNlIGl0cyBkaXN0YW5jZSB0byB0
b29faGlnaC4KKyAgICAgICAgLy8gQ29uY2VwdHVhbGx5IHJlc3Qgfj0gdG9vX2hpZ2ggLSBidWZm
ZXIKKyAgICAgICAgLy8gV2UgbmVlZCB0byBkbyB0aGUgZm9sbG93aW5nIHRlc3RzIGluIHRoaXMg
b3JkZXIgdG8gYXZvaWQgb3Zlci0gYW5kCisgICAgICAgIC8vIHVuZGVyZmxvd3MuCisgICAgICAg
IEFTU0VSVChyZXN0IDw9IHVuc2FmZV9pbnRlcnZhbCk7CisgICAgICAgIHdoaWxlIChyZXN0IDwg
c21hbGxfZGlzdGFuY2UgJiYgIC8vIE5lZ2F0ZWQgY29uZGl0aW9uIDEKKyAgICAgICAgICAgICAg
IHVuc2FmZV9pbnRlcnZhbCAtIHJlc3QgPj0gdGVuX2thcHBhICYmICAvLyBOZWdhdGVkIGNvbmRp
dGlvbiAyCisgICAgICAgICAgICAgICAocmVzdCArIHRlbl9rYXBwYSA8IHNtYWxsX2Rpc3RhbmNl
IHx8ICAvLyBidWZmZXJ7LTF9ID4gd19oaWdoCisgICAgICAgICAgICAgICAgc21hbGxfZGlzdGFu
Y2UgLSByZXN0ID49IHJlc3QgKyB0ZW5fa2FwcGEgLSBzbWFsbF9kaXN0YW5jZSkpIHsKKyAgICAg
ICAgICAgICAgICAgICBidWZmZXJbbGVuZ3RoIC0gMV0tLTsKKyAgICAgICAgICAgICAgICAgICBy
ZXN0ICs9IHRlbl9rYXBwYTsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8v
IFdlIGhhdmUgYXBwcm9hY2hlZCB3KyBhcyBtdWNoIGFzIHBvc3NpYmxlLiBXZSBub3cgdGVzdCBp
ZiBhcHByb2FjaGluZyB3LQorICAgICAgICAvLyB3b3VsZCByZXF1aXJlIGNoYW5naW5nIHRoZSBi
dWZmZXIuIElmIHllcywgdGhlbiB3ZSBoYXZlIHR3byBwb3NzaWJsZQorICAgICAgICAvLyByZXBy
ZXNlbnRhdGlvbnMgY2xvc2UgdG8gdywgYnV0IHdlIGNhbm5vdCBkZWNpZGUgd2hpY2ggb25lIGlz
IGNsb3Nlci4KKyAgICAgICAgaWYgKHJlc3QgPCBiaWdfZGlzdGFuY2UgJiYKKyAgICAgICAgICAg
IHVuc2FmZV9pbnRlcnZhbCAtIHJlc3QgPj0gdGVuX2thcHBhICYmCisgICAgICAgICAgICAocmVz
dCArIHRlbl9rYXBwYSA8IGJpZ19kaXN0YW5jZSB8fAorICAgICAgICAgICAgIGJpZ19kaXN0YW5j
ZSAtIHJlc3QgPiByZXN0ICsgdGVuX2thcHBhIC0gYmlnX2Rpc3RhbmNlKSkgeworICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8v
IFdlZWRpbmcgdGVzdC4KKyAgICAgICAgLy8gICBUaGUgc2FmZSBpbnRlcnZhbCBpcyBbdG9vX2xv
dyArIDIgdWxwOyB0b29faGlnaCAtIDIgdWxwXQorICAgICAgICAvLyAgIFNpbmNlIHRvb19sb3cg
PSB0b29faGlnaCAtIHVuc2FmZV9pbnRlcnZhbCB0aGlzIGlzIGVxdWl2YWxlbnQgdG8KKyAgICAg
ICAgLy8gICAgICBbdG9vX2hpZ2ggLSB1bnNhZmVfaW50ZXJ2YWwgKyA0IHVscDsgdG9vX2hpZ2gg
LSAyIHVscF0KKyAgICAgICAgLy8gICBDb25jZXB0dWFsbHkgd2UgaGF2ZTogcmVzdCB+PSB0b29f
aGlnaCAtIGJ1ZmZlcgorICAgICAgICByZXR1cm4gKDIgKiB1bml0IDw9IHJlc3QpICYmIChyZXN0
IDw9IHVuc2FmZV9pbnRlcnZhbCAtIDQgKiB1bml0KTsKKyAgICB9CisgICAgCisgICAgCisgICAg
Ly8gUm91bmRzIHRoZSBidWZmZXIgdXB3YXJkcyBpZiB0aGUgcmVzdWx0IGlzIGNsb3NlciB0byB2
IGJ5IHBvc3NpYmx5IGFkZGluZworICAgIC8vIDEgdG8gdGhlIGJ1ZmZlci4gSWYgdGhlIHByZWNp
c2lvbiBvZiB0aGUgY2FsY3VsYXRpb24gaXMgbm90IHN1ZmZpY2llbnQgdG8KKyAgICAvLyByb3Vu
ZCBjb3JyZWN0bHksIHJldHVybiBmYWxzZS4KKyAgICAvLyBUaGUgcm91bmRpbmcgbWlnaHQgc2hp
ZnQgdGhlIHdob2xlIGJ1ZmZlciBpbiB3aGljaCBjYXNlIHRoZSBrYXBwYSBpcworICAgIC8vIGFk
anVzdGVkLiBGb3IgZXhhbXBsZSAiOTkiLCBrYXBwYSA9IDMgbWlnaHQgYmVjb21lICIxMCIsIGth
cHBhID0gNC4KKyAgICAvLworICAgIC8vIElmIDIqcmVzdCA+IHRlbl9rYXBwYSB0aGVuIHRoZSBi
dWZmZXIgbmVlZHMgdG8gYmUgcm91bmQgdXAuCisgICAgLy8gcmVzdCBjYW4gaGF2ZSBhbiBlcnJv
ciBvZiArLy0gMSB1bml0LiBUaGlzIGZ1bmN0aW9uIGFjY291bnRzIGZvciB0aGUKKyAgICAvLyBp
bXByZWNpc2lvbiBhbmQgcmV0dXJucyBmYWxzZSwgaWYgdGhlIHJvdW5kaW5nIGRpcmVjdGlvbiBj
YW5ub3QgYmUKKyAgICAvLyB1bmFtYmlndW91c2x5IGRldGVybWluZWQuCisgICAgLy8KKyAgICAv
LyBQcmVjb25kaXRpb246IHJlc3QgPCB0ZW5fa2FwcGEuCisgICAgc3RhdGljIGJvb2wgUm91bmRX
ZWVkQ291bnRlZChWZWN0b3I8Y2hhcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp
bnQ2NF90IHJlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCB0
ZW5fa2FwcGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCB1bml0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBrYXBwYSkgeworICAgICAg
ICBBU1NFUlQocmVzdCA8IHRlbl9rYXBwYSk7CisgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgdGVz
dHMgYXJlIGRvbmUgaW4gYSBzcGVjaWZpYyBvcmRlciB0byBhdm9pZCBvdmVyZmxvd3MuIFRoZXkK
KyAgICAgICAgLy8gd2lsbCB3b3JrIGNvcnJlY3RseSB3aXRoIGFueSB1aW50NjQgdmFsdWVzIG9m
IHJlc3QgPCB0ZW5fa2FwcGEgYW5kIHVuaXQuCisgICAgICAgIC8vCisgICAgICAgIC8vIElmIHRo
ZSB1bml0IGlzIHRvbyBiaWcsIHRoZW4gd2UgZG9uJ3Qga25vdyB3aGljaCB3YXkgdG8gcm91bmQu
IEZvciBleGFtcGxlCisgICAgICAgIC8vIGEgdW5pdCBvZiA1MCBtZWFucyB0aGF0IHRoZSByZWFs
IG51bWJlciBsaWVzIHdpdGhpbiByZXN0ICsvLSA1MC4gSWYKKyAgICAgICAgLy8gMTBea2FwcGEg
PT0gNDAgdGhlbiB0aGVyZSBpcyBubyB3YXkgdG8gdGVsbCB3aGljaCB3YXkgdG8gcm91bmQuCisg
ICAgICAgIGlmICh1bml0ID49IHRlbl9rYXBwYSkgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBF
dmVuIGlmIHVuaXQgaXMganVzdCBoYWxmIHRoZSBzaXplIG9mIDEwXmthcHBhIHdlIGFyZSBhbHJl
YWR5IGNvbXBsZXRlbHkKKyAgICAgICAgLy8gbG9zdC4gKEFuZCBhZnRlciB0aGUgcHJldmlvdXMg
dGVzdCB3ZSBrbm93IHRoYXQgdGhlIGV4cHJlc3Npb24gd2lsbCBub3QKKyAgICAgICAgLy8gb3Zl
ci91bmRlcmZsb3cuKQorICAgICAgICBpZiAodGVuX2thcHBhIC0gdW5pdCA8PSB1bml0KSByZXR1
cm4gZmFsc2U7CisgICAgICAgIC8vIElmIDIgKiAocmVzdCArIHVuaXQpIDw9IDEwXmthcHBhIHdl
IGNhbiBzYWZlbHkgcm91bmQgZG93bi4KKyAgICAgICAgaWYgKCh0ZW5fa2FwcGEgLSByZXN0ID4g
cmVzdCkgJiYgKHRlbl9rYXBwYSAtIDIgKiByZXN0ID49IDIgKiB1bml0KSkgeworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gSWYgMiAqIChyZXN0IC0gdW5p
dCkgPj0gMTBea2FwcGEsIHRoZW4gd2UgY2FuIHNhZmVseSByb3VuZCB1cC4KKyAgICAgICAgaWYg
KChyZXN0ID4gdW5pdCkgJiYgKHRlbl9rYXBwYSAtIChyZXN0IC0gdW5pdCkgPD0gKHJlc3QgLSB1
bml0KSkpIHsKKyAgICAgICAgICAgIC8vIEluY3JlbWVudCB0aGUgbGFzdCBkaWdpdCByZWN1cnNp
dmVseSB1bnRpbCB3ZSBmaW5kIGEgbm9uICc5JyBkaWdpdC4KKyAgICAgICAgICAgIGJ1ZmZlclts
ZW5ndGggLSAxXSsrOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IGxlbmd0aCAtIDE7IGkgPiAw
OyAtLWkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYnVmZmVyW2ldICE9ICcwJyArIDEwKSBicmVh
azsKKyAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSAnMCc7CisgICAgICAgICAgICAgICAgYnVm
ZmVyW2kgLSAxXSsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gSWYgdGhlIGZpcnN0
IGRpZ2l0IGlzIG5vdyAnMCcrIDEwIHdlIGhhZCBhIGJ1ZmZlciB3aXRoIGFsbCAnOSdzLiBXaXRo
IHRoZQorICAgICAgICAgICAgLy8gZXhjZXB0aW9uIG9mIHRoZSBmaXJzdCBkaWdpdCBhbGwgZGln
aXRzIGFyZSBub3cgJzAnLiBTaW1wbHkgc3dpdGNoIHRoZQorICAgICAgICAgICAgLy8gZmlyc3Qg
ZGlnaXQgdG8gJzEnIGFuZCBhZGp1c3QgdGhlIGthcHBhLiBFeGFtcGxlOiAiOTkiIGJlY29tZXMg
IjEwIiBhbmQKKyAgICAgICAgICAgIC8vIHRoZSBwb3dlciAodGhlIGthcHBhKSBpcyBpbmNyZWFz
ZWQuCisgICAgICAgICAgICBpZiAoYnVmZmVyWzBdID09ICcwJyArIDEwKSB7CisgICAgICAgICAg
ICAgICAgYnVmZmVyWzBdID0gJzEnOworICAgICAgICAgICAgICAgICgqa2FwcGEpICs9IDE7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIAorICAgIHN0YXRpYyBjb25zdCB1aW50
MzJfdCBrVGVuNCA9IDEwMDAwOworICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBrVGVuNSA9IDEw
MDAwMDsKKyAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qga1RlbjYgPSAxMDAwMDAwOworICAgIHN0
YXRpYyBjb25zdCB1aW50MzJfdCBrVGVuNyA9IDEwMDAwMDAwOworICAgIHN0YXRpYyBjb25zdCB1
aW50MzJfdCBrVGVuOCA9IDEwMDAwMDAwMDsKKyAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qga1Rl
bjkgPSAxMDAwMDAwMDAwOworICAgIAorICAgIC8vIFJldHVybnMgdGhlIGJpZ2dlc3QgcG93ZXIg
b2YgdGVuIHRoYXQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbgorICAgIC8vIG51
bWJlci4gV2UgZnVydGhlcm1vcmUgcmVjZWl2ZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgYml0cyAn
bnVtYmVyJyBoYXMuCisgICAgLy8gSWYgbnVtYmVyX2JpdHMgPT0gMCB0aGVuIDBeLTEgaXMgcmV0
dXJuZWQKKyAgICAvLyBUaGUgbnVtYmVyIG9mIGJpdHMgbXVzdCBiZSA8PSAzMi4KKyAgICAvLyBQ
cmVjb25kaXRpb246IG51bWJlciA8ICgxIDw8IChudW1iZXJfYml0cyArIDEpKS4KKyAgICBzdGF0
aWMgdm9pZCBCaWdnZXN0UG93ZXJUZW4odWludDMyX3QgbnVtYmVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgbnVtYmVyX2JpdHMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVpbnQzMl90KiBwb3dlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50KiBleHBvbmVudCkgeworICAgICAgICBBU1NFUlQobnVtYmVyIDwgKDEgPDwgKG51bWJl
cl9iaXRzICsgMSkpKTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAobnVtYmVyX2JpdHMpIHsK
KyAgICAgICAgICAgIGNhc2UgMzI6CisgICAgICAgICAgICBjYXNlIDMxOgorICAgICAgICAgICAg
Y2FzZSAzMDoKKyAgICAgICAgICAgICAgICBpZiAoa1RlbjkgPD0gbnVtYmVyKSB7CisgICAgICAg
ICAgICAgICAgICAgICpwb3dlciA9IGtUZW45OworICAgICAgICAgICAgICAgICAgICAqZXhwb25l
bnQgPSA5OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9ICAv
LyBlbHNlIGZhbGx0aHJvdWdoCisgICAgICAgICAgICBjYXNlIDI5OgorICAgICAgICAgICAgY2Fz
ZSAyODoKKyAgICAgICAgICAgIGNhc2UgMjc6CisgICAgICAgICAgICAgICAgaWYgKGtUZW44IDw9
IG51bWJlcikgeworICAgICAgICAgICAgICAgICAgICAqcG93ZXIgPSBrVGVuODsKKyAgICAgICAg
ICAgICAgICAgICAgKmV4cG9uZW50ID0gODsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfSAgLy8gZWxzZSBmYWxsdGhyb3VnaAorICAgICAgICAgICAgY2FzZSAy
NjoKKyAgICAgICAgICAgIGNhc2UgMjU6CisgICAgICAgICAgICBjYXNlIDI0OgorICAgICAgICAg
ICAgICAgIGlmIChrVGVuNyA8PSBudW1iZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgKnBvd2Vy
ID0ga1Rlbjc7CisgICAgICAgICAgICAgICAgICAgICpleHBvbmVudCA9IDc7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gIC8vIGVsc2UgZmFsbHRocm91Z2gK
KyAgICAgICAgICAgIGNhc2UgMjM6CisgICAgICAgICAgICBjYXNlIDIyOgorICAgICAgICAgICAg
Y2FzZSAyMToKKyAgICAgICAgICAgIGNhc2UgMjA6CisgICAgICAgICAgICAgICAgaWYgKGtUZW42
IDw9IG51bWJlcikgeworICAgICAgICAgICAgICAgICAgICAqcG93ZXIgPSBrVGVuNjsKKyAgICAg
ICAgICAgICAgICAgICAgKmV4cG9uZW50ID0gNjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfSAgLy8gZWxzZSBmYWxsdGhyb3VnaAorICAgICAgICAgICAgY2Fz
ZSAxOToKKyAgICAgICAgICAgIGNhc2UgMTg6CisgICAgICAgICAgICBjYXNlIDE3OgorICAgICAg
ICAgICAgICAgIGlmIChrVGVuNSA8PSBudW1iZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgKnBv
d2VyID0ga1RlbjU7CisgICAgICAgICAgICAgICAgICAgICpleHBvbmVudCA9IDU7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gIC8vIGVsc2UgZmFsbHRocm91
Z2gKKyAgICAgICAgICAgIGNhc2UgMTY6CisgICAgICAgICAgICBjYXNlIDE1OgorICAgICAgICAg
ICAgY2FzZSAxNDoKKyAgICAgICAgICAgICAgICBpZiAoa1RlbjQgPD0gbnVtYmVyKSB7CisgICAg
ICAgICAgICAgICAgICAgICpwb3dlciA9IGtUZW40OworICAgICAgICAgICAgICAgICAgICAqZXhw
b25lbnQgPSA0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
ICAvLyBlbHNlIGZhbGx0aHJvdWdoCisgICAgICAgICAgICBjYXNlIDEzOgorICAgICAgICAgICAg
Y2FzZSAxMjoKKyAgICAgICAgICAgIGNhc2UgMTE6CisgICAgICAgICAgICBjYXNlIDEwOgorICAg
ICAgICAgICAgICAgIGlmICgxMDAwIDw9IG51bWJlcikgeworICAgICAgICAgICAgICAgICAgICAq
cG93ZXIgPSAxMDAwOworICAgICAgICAgICAgICAgICAgICAqZXhwb25lbnQgPSAzOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9ICAvLyBlbHNlIGZhbGx0aHJv
dWdoCisgICAgICAgICAgICBjYXNlIDk6CisgICAgICAgICAgICBjYXNlIDg6CisgICAgICAgICAg
ICBjYXNlIDc6CisgICAgICAgICAgICAgICAgaWYgKDEwMCA8PSBudW1iZXIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgKnBvd2VyID0gMTAwOworICAgICAgICAgICAgICAgICAgICAqZXhwb25lbnQg
PSAyOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9ICAvLyBl
bHNlIGZhbGx0aHJvdWdoCisgICAgICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICBjYXNlIDU6
CisgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgaWYgKDEwIDw9IG51bWJlcikg
eworICAgICAgICAgICAgICAgICAgICAqcG93ZXIgPSAxMDsKKyAgICAgICAgICAgICAgICAgICAg
KmV4cG9uZW50ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfSAgLy8gZWxzZSBmYWxsdGhyb3VnaAorICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAg
ICAgY2FzZSAyOgorICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIGlmICgxIDw9
IG51bWJlcikgeworICAgICAgICAgICAgICAgICAgICAqcG93ZXIgPSAxOworICAgICAgICAgICAg
ICAgICAgICAqZXhwb25lbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9ICAvLyBlbHNlIGZhbGx0aHJvdWdoCisgICAgICAgICAgICBjYXNlIDA6Cisg
ICAgICAgICAgICAgICAgKnBvd2VyID0gMDsKKyAgICAgICAgICAgICAgICAqZXhwb25lbnQgPSAt
MTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgLy8gRm9sbG93aW5nIGFzc2lnbm1lbnRzIGFyZSBoZXJlIHRvIHNpbGVuY2UgY29t
cGlsZXIgd2FybmluZ3MuCisgICAgICAgICAgICAgICAgKnBvd2VyID0gMDsKKyAgICAgICAgICAg
ICAgICAqZXhwb25lbnQgPSAwOworICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgLy8gR2VuZXJhdGVzIHRoZSBkaWdpdHMgb2Yg
aW5wdXQgbnVtYmVyIHcuCisgICAgLy8gdyBpcyBhIGZsb2F0aW5nLXBvaW50IG51bWJlciAoRGl5
RnApLCBjb25zaXN0aW5nIG9mIGEgc2lnbmlmaWNhbmQgYW5kIGFuCisgICAgLy8gZXhwb25lbnQu
IEl0cyBleHBvbmVudCBpcyBib3VuZGVkIGJ5IGtNaW5pbWFsVGFyZ2V0RXhwb25lbnQgYW5kCisg
ICAgLy8ga01heGltYWxUYXJnZXRFeHBvbmVudC4KKyAgICAvLyAgICAgICBIZW5jZSAtNjAgPD0g
dy5lKCkgPD0gLTMyLgorICAgIC8vCisgICAgLy8gUmV0dXJucyBmYWxzZSBpZiBpdCBmYWlscywg
aW4gd2hpY2ggY2FzZSB0aGUgZ2VuZXJhdGVkIGRpZ2l0cyBpbiB0aGUgYnVmZmVyCisgICAgLy8g
c2hvdWxkIG5vdCBiZSB1c2VkLgorICAgIC8vIFByZWNvbmRpdGlvbnM6CisgICAgLy8gICogbG93
LCB3IGFuZCBoaWdoIGFyZSBjb3JyZWN0IHVwIHRvIDEgdWxwICh1bml0IGluIHRoZSBsYXN0IHBs
YWNlKS4gVGhhdAorICAgIC8vICAgIGlzLCB0aGVpciBlcnJvciBtdXN0IGJlIGxlc3MgdGhhbiBh
IHVuaXQgb2YgdGhlaXIgbGFzdCBkaWdpdHMuCisgICAgLy8gICogbG93LmUoKSA9PSB3LmUoKSA9
PSBoaWdoLmUoKQorICAgIC8vICAqIGxvdyA8IHcgPCBoaWdoLCBhbmQgdGFraW5nIGludG8gYWNj
b3VudCB0aGVpciBlcnJvcjogbG93fiA8PSBoaWdofgorICAgIC8vICAqIGtNaW5pbWFsVGFyZ2V0
RXhwb25lbnQgPD0gdy5lKCkgPD0ga01heGltYWxUYXJnZXRFeHBvbmVudAorICAgIC8vIFBvc3Rj
b25kaXRpb25zOiByZXR1cm5zIGZhbHNlIGlmIHByb2NlZHVyZSBmYWlscy4KKyAgICAvLyAgIG90
aGVyd2lzZToKKyAgICAvLyAgICAgKiBidWZmZXIgaXMgbm90IG51bGwtdGVybWluYXRlZCwgYnV0
IGxlbiBjb250YWlucyB0aGUgbnVtYmVyIG9mIGRpZ2l0cy4KKyAgICAvLyAgICAgKiBidWZmZXIg
Y29udGFpbnMgdGhlIHNob3J0ZXN0IHBvc3NpYmxlIGRlY2ltYWwgZGlnaXQtc2VxdWVuY2UKKyAg
ICAvLyAgICAgICBzdWNoIHRoYXQgTE9XIDwgYnVmZmVyICogMTBea2FwcGEgPCBISUdILCB3aGVy
ZSBMT1cgYW5kIEhJR0ggYXJlIHRoZQorICAgIC8vICAgICAgIGNvcnJlY3QgdmFsdWVzIG9mIGxv
dyBhbmQgaGlnaCAod2l0aG91dCB0aGVpciBlcnJvcikuCisgICAgLy8gICAgICogaWYgbW9yZSB0
aGFuIG9uZSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIGdpdmVzIHRoZSBtaW5pbWFsIG51bWJlciBv
ZgorICAgIC8vICAgICAgIGRlY2ltYWwgZGlnaXRzIHRoZW4gdGhlIG9uZSBjbG9zZXN0IHRvIFcg
KHdoZXJlIFcgaXMgdGhlIGNvcnJlY3QgdmFsdWUKKyAgICAvLyAgICAgICBvZiB3KSBpcyBjaG9z
ZW4uCisgICAgLy8gUmVtYXJrOiB0aGlzIHByb2NlZHVyZSB0YWtlcyBpbnRvIGFjY291bnQgdGhl
IGltcHJlY2lzaW9uIG9mIGl0cyBpbnB1dAorICAgIC8vICAgbnVtYmVycy4gSWYgdGhlIHByZWNp
c2lvbiBpcyBub3QgZW5vdWdoIHRvIGd1YXJhbnRlZSBhbGwgdGhlIHBvc3Rjb25kaXRpb25zCisg
ICAgLy8gICB0aGVuIGZhbHNlIGlzIHJldHVybmVkLiBUaGlzIHVzdWFsbHkgaGFwcGVucyByYXJl
bHkgKH4wLjUlKS4KKyAgICAvLworICAgIC8vIFNheSwgZm9yIHRoZSBzYWtlIG9mIGV4YW1wbGUs
IHRoYXQKKyAgICAvLyAgIHcuZSgpID09IC00OCwgYW5kIHcuZigpID09IDB4MTIzNDU2Nzg5MGFi
Y2RlZgorICAgIC8vIHcncyB2YWx1ZSBjYW4gYmUgY29tcHV0ZWQgYnkgdy5mKCkgKiAyXncuZSgp
CisgICAgLy8gV2UgY2FuIG9idGFpbiB3J3MgaW50ZWdyYWwgZGlnaXRzIGJ5IHNpbXBseSBzaGlm
dGluZyB3LmYoKSBieSAtdy5lKCkuCisgICAgLy8gIC0+IHcncyBpbnRlZ3JhbCBwYXJ0IGlzIDB4
MTIzNAorICAgIC8vICB3J3MgZnJhY3Rpb25hbCBwYXJ0IGlzIHRoZXJlZm9yZSAweDU2Nzg5MGFi
Y2RlZi4KKyAgICAvLyBQcmludGluZyB3J3MgaW50ZWdyYWwgcGFydCBpcyBlYXN5IChzaW1wbHkg
cHJpbnQgMHgxMjM0IGluIGRlY2ltYWwpLgorICAgIC8vIEluIG9yZGVyIHRvIHByaW50IGl0cyBm
cmFjdGlvbiB3ZSByZXBlYXRlZGx5IG11bHRpcGx5IHRoZSBmcmFjdGlvbiBieSAxMCBhbmQKKyAg
ICAvLyBnZXQgZWFjaCBkaWdpdC4gRXhhbXBsZSB0aGUgZmlyc3QgZGlnaXQgYWZ0ZXIgdGhlIHBv
aW50IHdvdWxkIGJlIGNvbXB1dGVkIGJ5CisgICAgLy8gICAoMHg1Njc4OTBhYmNkZWYgKiAxMCkg
Pj4gNDguIC0+IDMKKyAgICAvLyBUaGUgd2hvbGUgdGhpbmcgYmVjb21lcyBzbGlnaHRseSBtb3Jl
IGNvbXBsaWNhdGVkIGJlY2F1c2Ugd2Ugd2FudCB0byBzdG9wCisgICAgLy8gb25jZSB3ZSBoYXZl
IGVub3VnaCBkaWdpdHMuIFRoYXQgaXMsIG9uY2UgdGhlIGRpZ2l0cyBpbnNpZGUgdGhlIGJ1ZmZl
cgorICAgIC8vIHJlcHJlc2VudCAndycgd2UgY2FuIHN0b3AuIEV2ZXJ5dGhpbmcgaW5zaWRlIHRo
ZSBpbnRlcnZhbCBsb3cgLSBoaWdoCisgICAgLy8gcmVwcmVzZW50cyB3LiBIb3dldmVyIHdlIGhh
dmUgdG8gcGF5IGF0dGVudGlvbiB0byBsb3csIGhpZ2ggYW5kIHcncworICAgIC8vIGltcHJlY2lz
aW9uLgorICAgIHN0YXRpYyBib29sIERpZ2l0R2VuKERpeUZwIGxvdywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBEaXlGcCB3LAorICAgICAgICAgICAgICAgICAgICAgICAgIERpeUZwIGhpZ2gs
CisgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQqIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQqIGthcHBhKSB7CisgICAgICAgIEFTU0VSVChsb3cuZSgpID09IHcuZSgpICYmIHcuZSgpID09
IGhpZ2guZSgpKTsKKyAgICAgICAgQVNTRVJUKGxvdy5mKCkgKyAxIDw9IGhpZ2guZigpIC0gMSk7
CisgICAgICAgIEFTU0VSVChrTWluaW1hbFRhcmdldEV4cG9uZW50IDw9IHcuZSgpICYmIHcuZSgp
IDw9IGtNYXhpbWFsVGFyZ2V0RXhwb25lbnQpOworICAgICAgICAvLyBsb3csIHcgYW5kIGhpZ2gg
YXJlIGltcHJlY2lzZSwgYnV0IGJ5IGxlc3MgdGhhbiBvbmUgdWxwICh1bml0IGluIHRoZSBsYXN0
CisgICAgICAgIC8vIHBsYWNlKS4KKyAgICAgICAgLy8gSWYgd2UgcmVtb3ZlIChyZXNwLiBhZGQp
IDEgdWxwIGZyb20gbG93IChyZXNwLiBoaWdoKSB3ZSBhcmUgY2VydGFpbiB0aGF0CisgICAgICAg
IC8vIHRoZSBuZXcgbnVtYmVycyBhcmUgb3V0c2lkZSBvZiB0aGUgaW50ZXJ2YWwgd2Ugd2FudCB0
aGUgZmluYWwKKyAgICAgICAgLy8gcmVwcmVzZW50YXRpb24gdG8gbGllIGluLgorICAgICAgICAv
LyBJbnZlcnNlbHkgYWRkaW5nIChyZXNwLiByZW1vdmluZykgMSB1bHAgZnJvbSBsb3cgKHJlc3Au
IGhpZ2gpIHdvdWxkIHlpZWxkCisgICAgICAgIC8vIG51bWJlcnMgdGhhdCBhcmUgY2VydGFpbiB0
byBsaWUgaW4gdGhlIGludGVydmFsLiBXZSB3aWxsIHVzZSB0aGlzIGZhY3QKKyAgICAgICAgLy8g
bGF0ZXIgb24uCisgICAgICAgIC8vIFdlIHdpbGwgbm93IHN0YXJ0IGJ5IGdlbmVyYXRpbmcgdGhl
IGRpZ2l0cyB3aXRoaW4gdGhlIHVuY2VydGFpbgorICAgICAgICAvLyBpbnRlcnZhbC4gTGF0ZXIg
d2Ugd2lsbCB3ZWVkIG91dCByZXByZXNlbnRhdGlvbnMgdGhhdCBsaWUgb3V0c2lkZSB0aGUgc2Fm
ZQorICAgICAgICAvLyBpbnRlcnZhbCBhbmQgdGh1cyBfbWlnaHRfIGxpZSBvdXRzaWRlIHRoZSBj
b3JyZWN0IGludGVydmFsLgorICAgICAgICB1aW50NjRfdCB1bml0ID0gMTsKKyAgICAgICAgRGl5
RnAgdG9vX2xvdyA9IERpeUZwKGxvdy5mKCkgLSB1bml0LCBsb3cuZSgpKTsKKyAgICAgICAgRGl5
RnAgdG9vX2hpZ2ggPSBEaXlGcChoaWdoLmYoKSArIHVuaXQsIGhpZ2guZSgpKTsKKyAgICAgICAg
Ly8gdG9vX2xvdyBhbmQgdG9vX2hpZ2ggYXJlIGd1YXJhbnRlZWQgdG8gbGllIG91dHNpZGUgdGhl
IGludGVydmFsIHdlIHdhbnQgdGhlCisgICAgICAgIC8vIGdlbmVyYXRlZCBudW1iZXIgaW4uCisg
ICAgICAgIERpeUZwIHVuc2FmZV9pbnRlcnZhbCA9IERpeUZwOjpNaW51cyh0b29faGlnaCwgdG9v
X2xvdyk7CisgICAgICAgIC8vIFdlIG5vdyBjdXQgdGhlIGlucHV0IG51bWJlciBpbnRvIHR3byBw
YXJ0czogdGhlIGludGVncmFsIGRpZ2l0cyBhbmQgdGhlCisgICAgICAgIC8vIGZyYWN0aW9uYWxz
LiBXZSB3aWxsIG5vdCB3cml0ZSBhbnkgZGVjaW1hbCBzZXBhcmF0b3IgdGhvdWdoLCBidXQgYWRh
cHQKKyAgICAgICAgLy8ga2FwcGEgaW5zdGVhZC4KKyAgICAgICAgLy8gUmVtaW5kZXI6IHdlIGFy
ZSBjdXJyZW50bHkgY29tcHV0aW5nIHRoZSBkaWdpdHMgKHN0b3JlZCBpbnNpZGUgdGhlIGJ1ZmZl
cikKKyAgICAgICAgLy8gc3VjaCB0aGF0OiAgIHRvb19sb3cgPCBidWZmZXIgKiAxMF5rYXBwYSA8
IHRvb19oaWdoCisgICAgICAgIC8vIFdlIHVzZSB0b29faGlnaCBmb3IgdGhlIGRpZ2l0X2dlbmVy
YXRpb24gYW5kIHN0b3AgYXMgc29vbiBhcyBwb3NzaWJsZS4KKyAgICAgICAgLy8gSWYgd2Ugc3Rv
cCBlYXJseSB3ZSBlZmZlY3RpdmVseSByb3VuZCBkb3duLgorICAgICAgICBEaXlGcCBvbmUgPSBE
aXlGcChzdGF0aWNfY2FzdDx1aW50NjRfdD4oMSkgPDwgLXcuZSgpLCB3LmUoKSk7CisgICAgICAg
IC8vIERpdmlzaW9uIGJ5IG9uZSBpcyBhIHNoaWZ0LgorICAgICAgICB1aW50MzJfdCBpbnRlZ3Jh
bHMgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4odG9vX2hpZ2guZigpID4+IC1vbmUuZSgpKTsKKyAg
ICAgICAgLy8gTW9kdWxvIGJ5IG9uZSBpcyBhbiBhbmQuCisgICAgICAgIHVpbnQ2NF90IGZyYWN0
aW9uYWxzID0gdG9vX2hpZ2guZigpICYgKG9uZS5mKCkgLSAxKTsKKyAgICAgICAgdWludDMyX3Qg
ZGl2aXNvcjsKKyAgICAgICAgaW50IGRpdmlzb3JfZXhwb25lbnQ7CisgICAgICAgIEJpZ2dlc3RQ
b3dlclRlbihpbnRlZ3JhbHMsIERpeUZwOjprU2lnbmlmaWNhbmRTaXplIC0gKC1vbmUuZSgpKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICZkaXZpc29yLCAmZGl2aXNvcl9leHBvbmVudCk7Cisg
ICAgICAgICprYXBwYSA9IGRpdmlzb3JfZXhwb25lbnQgKyAxOworICAgICAgICAqbGVuZ3RoID0g
MDsKKyAgICAgICAgLy8gTG9vcCBpbnZhcmlhbnQ6IGJ1ZmZlciA9IHRvb19oaWdoIC8gMTBea2Fw
cGEgIChpbnRlZ2VyIGRpdmlzaW9uKQorICAgICAgICAvLyBUaGUgaW52YXJpYW50IGhvbGRzIGZv
ciB0aGUgZmlyc3QgaXRlcmF0aW9uOiBrYXBwYSBoYXMgYmVlbiBpbml0aWFsaXplZAorICAgICAg
ICAvLyB3aXRoIHRoZSBkaXZpc29yIGV4cG9uZW50ICsgMS4gQW5kIHRoZSBkaXZpc29yIGlzIHRo
ZSBiaWdnZXN0IHBvd2VyIG9mIHRlbgorICAgICAgICAvLyB0aGF0IGlzIHNtYWxsZXIgdGhhbiBp
bnRlZ3JhbHMuCisgICAgICAgIHdoaWxlICgqa2FwcGEgPiAwKSB7CisgICAgICAgICAgICBpbnQg
ZGlnaXQgPSBpbnRlZ3JhbHMgLyBkaXZpc29yOworICAgICAgICAgICAgYnVmZmVyWypsZW5ndGhd
ID0gJzAnICsgZGlnaXQ7CisgICAgICAgICAgICAoKmxlbmd0aCkrKzsKKyAgICAgICAgICAgIGlu
dGVncmFscyAlPSBkaXZpc29yOworICAgICAgICAgICAgKCprYXBwYSktLTsKKyAgICAgICAgICAg
IC8vIE5vdGUgdGhhdCBrYXBwYSBub3cgZXF1YWxzIHRoZSBleHBvbmVudCBvZiB0aGUgZGl2aXNv
ciBhbmQgdGhhdCB0aGUKKyAgICAgICAgICAgIC8vIGludmFyaWFudCB0aHVzIGhvbGRzIGFnYWlu
LgorICAgICAgICAgICAgdWludDY0X3QgcmVzdCA9CisgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KGludGVncmFscykgPDwgLW9uZS5lKCkpICsgZnJhY3Rpb25hbHM7CisgICAgICAg
ICAgICAvLyBJbnZhcmlhbnQ6IHRvb19oaWdoID0gYnVmZmVyICogMTBea2FwcGEgKyBEaXlGcChy
ZXN0LCBvbmUuZSgpKQorICAgICAgICAgICAgLy8gUmVtaW5kZXI6IHVuc2FmZV9pbnRlcnZhbC5l
KCkgPT0gb25lLmUoKQorICAgICAgICAgICAgaWYgKHJlc3QgPCB1bnNhZmVfaW50ZXJ2YWwuZigp
KSB7CisgICAgICAgICAgICAgICAgLy8gUm91bmRpbmcgZG93biAoYnkgbm90IGVtaXR0aW5nIHRo
ZSByZW1haW5pbmcgZGlnaXRzKSB5aWVsZHMgYSBudW1iZXIKKyAgICAgICAgICAgICAgICAvLyB0
aGF0IGxpZXMgd2l0aGluIHRoZSB1bnNhZmUgaW50ZXJ2YWwuCisgICAgICAgICAgICAgICAgcmV0
dXJuIFJvdW5kV2VlZChidWZmZXIsICpsZW5ndGgsIERpeUZwOjpNaW51cyh0b29faGlnaCwgdyku
ZigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zYWZlX2ludGVydmFsLmYo
KSwgcmVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVp
bnQ2NF90PihkaXZpc29yKSA8PCAtb25lLmUoKSwgdW5pdCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBkaXZpc29yIC89IDEwOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBU
aGUgaW50ZWdyYWxzIGhhdmUgYmVlbiBnZW5lcmF0ZWQuIFdlIGFyZSBhdCB0aGUgcG9pbnQgb2Yg
dGhlIGRlY2ltYWwKKyAgICAgICAgLy8gc2VwYXJhdG9yLiBJbiB0aGUgZm9sbG93aW5nIGxvb3Ag
d2Ugc2ltcGx5IG11bHRpcGx5IHRoZSByZW1haW5pbmcgZGlnaXRzIGJ5CisgICAgICAgIC8vIDEw
IGFuZCBkaXZpZGUgYnkgb25lLiBXZSBqdXN0IG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0byBtdWx0
aXBseSBhc3NvY2lhdGVkCisgICAgICAgIC8vIGRhdGEgKGxpa2UgdGhlIGludGVydmFsIG9yICd1
bml0JyksIHRvby4KKyAgICAgICAgLy8gTm90ZSB0aGF0IHRoZSBtdWx0aXBsaWNhdGlvbiBieSAx
MCBkb2VzIG5vdCBvdmVyZmxvdywgYmVjYXVzZSB3LmUgPj0gLTYwCisgICAgICAgIC8vIGFuZCB0
aHVzIG9uZS5lID49IC02MC4KKyAgICAgICAgQVNTRVJUKG9uZS5lKCkgPj0gLTYwKTsKKyAgICAg
ICAgQVNTRVJUKGZyYWN0aW9uYWxzIDwgb25lLmYoKSk7CisgICAgICAgIEFTU0VSVChVSU5UNjRf
MlBBUlRfQygweEZGRkZGRkZGLCBGRkZGRkZGRikgLyAxMCA+PSBvbmUuZigpKTsKKyAgICAgICAg
d2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIGZyYWN0aW9uYWxzICo9IDEwOworICAgICAgICAg
ICAgdW5pdCAqPSAxMDsKKyAgICAgICAgICAgIHVuc2FmZV9pbnRlcnZhbC5zZXRfZih1bnNhZmVf
aW50ZXJ2YWwuZigpICogMTApOworICAgICAgICAgICAgLy8gSW50ZWdlciBkaXZpc2lvbiBieSBv
bmUuCisgICAgICAgICAgICBpbnQgZGlnaXQgPSBzdGF0aWNfY2FzdDxpbnQ+KGZyYWN0aW9uYWxz
ID4+IC1vbmUuZSgpKTsKKyAgICAgICAgICAgIGJ1ZmZlclsqbGVuZ3RoXSA9ICcwJyArIGRpZ2l0
OworICAgICAgICAgICAgKCpsZW5ndGgpKys7CisgICAgICAgICAgICBmcmFjdGlvbmFscyAmPSBv
bmUuZigpIC0gMTsgIC8vIE1vZHVsbyBieSBvbmUuCisgICAgICAgICAgICAoKmthcHBhKS0tOwor
ICAgICAgICAgICAgaWYgKGZyYWN0aW9uYWxzIDwgdW5zYWZlX2ludGVydmFsLmYoKSkgeworICAg
ICAgICAgICAgICAgIHJldHVybiBSb3VuZFdlZWQoYnVmZmVyLCAqbGVuZ3RoLCBEaXlGcDo6TWlu
dXModG9vX2hpZ2gsIHcpLmYoKSAqIHVuaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNhZmVfaW50ZXJ2YWwuZigpLCBmcmFjdGlvbmFscywgb25lLmYoKSwgdW5pdCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgCisgICAgLy8g
R2VuZXJhdGVzIChhdCBtb3N0KSByZXF1ZXN0ZWRfZGlnaXRzIGRpZ2l0cyBvZiBpbnB1dCBudW1i
ZXIgdy4KKyAgICAvLyB3IGlzIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIChEaXlGcCksIGNvbnNp
c3Rpbmcgb2YgYSBzaWduaWZpY2FuZCBhbmQgYW4KKyAgICAvLyBleHBvbmVudC4gSXRzIGV4cG9u
ZW50IGlzIGJvdW5kZWQgYnkga01pbmltYWxUYXJnZXRFeHBvbmVudCBhbmQKKyAgICAvLyBrTWF4
aW1hbFRhcmdldEV4cG9uZW50LgorICAgIC8vICAgICAgIEhlbmNlIC02MCA8PSB3LmUoKSA8PSAt
MzIuCisgICAgLy8KKyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIGl0IGZhaWxzLCBpbiB3aGljaCBj
YXNlIHRoZSBnZW5lcmF0ZWQgZGlnaXRzIGluIHRoZSBidWZmZXIKKyAgICAvLyBzaG91bGQgbm90
IGJlIHVzZWQuCisgICAgLy8gUHJlY29uZGl0aW9uczoKKyAgICAvLyAgKiB3IGlzIGNvcnJlY3Qg
dXAgdG8gMSB1bHAgKHVuaXQgaW4gdGhlIGxhc3QgcGxhY2UpLiBUaGF0CisgICAgLy8gICAgaXMs
IGl0cyBlcnJvciBtdXN0IGJlIHN0cmljdGx5IGxlc3MgdGhhbiBhIHVuaXQgb2YgaXRzIGxhc3Qg
ZGlnaXQuCisgICAgLy8gICoga01pbmltYWxUYXJnZXRFeHBvbmVudCA8PSB3LmUoKSA8PSBrTWF4
aW1hbFRhcmdldEV4cG9uZW50CisgICAgLy8KKyAgICAvLyBQb3N0Y29uZGl0aW9uczogcmV0dXJu
cyBmYWxzZSBpZiBwcm9jZWR1cmUgZmFpbHMuCisgICAgLy8gICBvdGhlcndpc2U6CisgICAgLy8g
ICAgICogYnVmZmVyIGlzIG5vdCBudWxsLXRlcm1pbmF0ZWQsIGJ1dCBsZW5ndGggY29udGFpbnMg
dGhlIG51bWJlciBvZgorICAgIC8vICAgICAgIGRpZ2l0cy4KKyAgICAvLyAgICAgKiB0aGUgcmVw
cmVzZW50YXRpb24gaW4gYnVmZmVyIGlzIHRoZSBtb3N0IHByZWNpc2UgcmVwcmVzZW50YXRpb24g
b2YKKyAgICAvLyAgICAgICByZXF1ZXN0ZWRfZGlnaXRzIGRpZ2l0cy4KKyAgICAvLyAgICAgKiBi
dWZmZXIgY29udGFpbnMgYXQgbW9zdCByZXF1ZXN0ZWRfZGlnaXRzIGRpZ2l0cyBvZiB3LiBJZiB0
aGVyZSBhcmUgbGVzcworICAgIC8vICAgICAgIHRoYW4gcmVxdWVzdGVkX2RpZ2l0cyBkaWdpdHMg
dGhlbiBzb21lIHRyYWlsaW5nICcwJ3MgaGF2ZSBiZWVuIHJlbW92ZWQuCisgICAgLy8gICAgICog
a2FwcGEgaXMgc3VjaCB0aGF0CisgICAgLy8gICAgICAgICAgICB3ID0gYnVmZmVyICogMTBea2Fw
cGEgKyBlcHMgd2l0aCB8ZXBzfCA8IDEwXmthcHBhIC8gMi4KKyAgICAvLworICAgIC8vIFJlbWFy
azogVGhpcyBwcm9jZWR1cmUgdGFrZXMgaW50byBhY2NvdW50IHRoZSBpbXByZWNpc2lvbiBvZiBp
dHMgaW5wdXQKKyAgICAvLyAgIG51bWJlcnMuIElmIHRoZSBwcmVjaXNpb24gaXMgbm90IGVub3Vn
aCB0byBndWFyYW50ZWUgYWxsIHRoZSBwb3N0Y29uZGl0aW9ucworICAgIC8vICAgdGhlbiBmYWxz
ZSBpcyByZXR1cm5lZC4gVGhpcyB1c3VhbGx5IGhhcHBlbnMgcmFyZWx5LCBidXQgdGhlIGZhaWx1
cmUtcmF0ZQorICAgIC8vICAgaW5jcmVhc2VzIHdpdGggaGlnaGVyIHJlcXVlc3RlZF9kaWdpdHMu
CisgICAgc3RhdGljIGJvb2wgRGlnaXRHZW5Db3VudGVkKERpeUZwIHcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCByZXF1ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQqIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50KiBrYXBwYSkgeworICAgICAgICBBU1NFUlQoa01pbmltYWxUYXJnZXRFeHBvbmVudCA8
PSB3LmUoKSAmJiB3LmUoKSA8PSBrTWF4aW1hbFRhcmdldEV4cG9uZW50KTsKKyAgICAgICAgQVNT
RVJUKGtNaW5pbWFsVGFyZ2V0RXhwb25lbnQgPj0gLTYwKTsKKyAgICAgICAgQVNTRVJUKGtNYXhp
bWFsVGFyZ2V0RXhwb25lbnQgPD0gLTMyKTsKKyAgICAgICAgLy8gdyBpcyBhc3N1bWVkIHRvIGhh
dmUgYW4gZXJyb3IgbGVzcyB0aGFuIDEgdW5pdC4gV2hlbmV2ZXIgdyBpcyBzY2FsZWQgd2UKKyAg
ICAgICAgLy8gYWxzbyBzY2FsZSBpdHMgZXJyb3IuCisgICAgICAgIHVpbnQ2NF90IHdfZXJyb3Ig
PSAxOworICAgICAgICAvLyBXZSBjdXQgdGhlIGlucHV0IG51bWJlciBpbnRvIHR3byBwYXJ0czog
dGhlIGludGVncmFsIGRpZ2l0cyBhbmQgdGhlCisgICAgICAgIC8vIGZyYWN0aW9uYWwgZGlnaXRz
LiBXZSBkb24ndCBlbWl0IGFueSBkZWNpbWFsIHNlcGFyYXRvciwgYnV0IGFkYXB0IGthcHBhCisg
ICAgICAgIC8vIGluc3RlYWQuIEV4YW1wbGU6IGluc3RlYWQgb2Ygd3JpdGluZyAiMS4yIiB3ZSBw
dXQgIjEyIiBpbnRvIHRoZSBidWZmZXIgYW5kCisgICAgICAgIC8vIGluY3JlYXNlIGthcHBhIGJ5
IDEuCisgICAgICAgIERpeUZwIG9uZSA9IERpeUZwKHN0YXRpY19jYXN0PHVpbnQ2NF90PigxKSA8
PCAtdy5lKCksIHcuZSgpKTsKKyAgICAgICAgLy8gRGl2aXNpb24gYnkgb25lIGlzIGEgc2hpZnQu
CisgICAgICAgIHVpbnQzMl90IGludGVncmFscyA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pih3LmYo
KSA+PiAtb25lLmUoKSk7CisgICAgICAgIC8vIE1vZHVsbyBieSBvbmUgaXMgYW4gYW5kLgorICAg
ICAgICB1aW50NjRfdCBmcmFjdGlvbmFscyA9IHcuZigpICYgKG9uZS5mKCkgLSAxKTsKKyAgICAg
ICAgdWludDMyX3QgZGl2aXNvcjsKKyAgICAgICAgaW50IGRpdmlzb3JfZXhwb25lbnQ7CisgICAg
ICAgIEJpZ2dlc3RQb3dlclRlbihpbnRlZ3JhbHMsIERpeUZwOjprU2lnbmlmaWNhbmRTaXplIC0g
KC1vbmUuZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICZkaXZpc29yLCAmZGl2aXNvcl9l
eHBvbmVudCk7CisgICAgICAgICprYXBwYSA9IGRpdmlzb3JfZXhwb25lbnQgKyAxOworICAgICAg
ICAqbGVuZ3RoID0gMDsKKyAgICAgICAgCisgICAgICAgIC8vIExvb3AgaW52YXJpYW50OiBidWZm
ZXIgPSB3IC8gMTBea2FwcGEgIChpbnRlZ2VyIGRpdmlzaW9uKQorICAgICAgICAvLyBUaGUgaW52
YXJpYW50IGhvbGRzIGZvciB0aGUgZmlyc3QgaXRlcmF0aW9uOiBrYXBwYSBoYXMgYmVlbiBpbml0
aWFsaXplZAorICAgICAgICAvLyB3aXRoIHRoZSBkaXZpc29yIGV4cG9uZW50ICsgMS4gQW5kIHRo
ZSBkaXZpc29yIGlzIHRoZSBiaWdnZXN0IHBvd2VyIG9mIHRlbgorICAgICAgICAvLyB0aGF0IGlz
IHNtYWxsZXIgdGhhbiAnaW50ZWdyYWxzJy4KKyAgICAgICAgd2hpbGUgKCprYXBwYSA+IDApIHsK
KyAgICAgICAgICAgIGludCBkaWdpdCA9IGludGVncmFscyAvIGRpdmlzb3I7CisgICAgICAgICAg
ICBidWZmZXJbKmxlbmd0aF0gPSAnMCcgKyBkaWdpdDsKKyAgICAgICAgICAgICgqbGVuZ3RoKSsr
OworICAgICAgICAgICAgcmVxdWVzdGVkX2RpZ2l0cy0tOworICAgICAgICAgICAgaW50ZWdyYWxz
ICU9IGRpdmlzb3I7CisgICAgICAgICAgICAoKmthcHBhKS0tOworICAgICAgICAgICAgLy8gTm90
ZSB0aGF0IGthcHBhIG5vdyBlcXVhbHMgdGhlIGV4cG9uZW50IG9mIHRoZSBkaXZpc29yIGFuZCB0
aGF0IHRoZQorICAgICAgICAgICAgLy8gaW52YXJpYW50IHRodXMgaG9sZHMgYWdhaW4uCisgICAg
ICAgICAgICBpZiAocmVxdWVzdGVkX2RpZ2l0cyA9PSAwKSBicmVhazsKKyAgICAgICAgICAgIGRp
dmlzb3IgLz0gMTA7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChyZXF1ZXN0ZWRf
ZGlnaXRzID09IDApIHsKKyAgICAgICAgICAgIHVpbnQ2NF90IHJlc3QgPQorICAgICAgICAgICAg
KHN0YXRpY19jYXN0PHVpbnQ2NF90PihpbnRlZ3JhbHMpIDw8IC1vbmUuZSgpKSArIGZyYWN0aW9u
YWxzOworICAgICAgICAgICAgcmV0dXJuIFJvdW5kV2VlZENvdW50ZWQoYnVmZmVyLCAqbGVuZ3Ro
LCByZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KGRpdmlzb3IpIDw8IC1vbmUuZSgpLCB3X2Vycm9yLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAga2FwcGEpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICAvLyBUaGUgaW50ZWdyYWxzIGhhdmUgYmVlbiBnZW5lcmF0ZWQuIFdlIGFyZSBhdCB0aGUgcG9p
bnQgb2YgdGhlIGRlY2ltYWwKKyAgICAgICAgLy8gc2VwYXJhdG9yLiBJbiB0aGUgZm9sbG93aW5n
IGxvb3Agd2Ugc2ltcGx5IG11bHRpcGx5IHRoZSByZW1haW5pbmcgZGlnaXRzIGJ5CisgICAgICAg
IC8vIDEwIGFuZCBkaXZpZGUgYnkgb25lLiBXZSBqdXN0IG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0
byBtdWx0aXBseSBhc3NvY2lhdGVkCisgICAgICAgIC8vIGRhdGEgKHRoZSAndW5pdCcpLCB0b28u
CisgICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgbXVsdGlwbGljYXRpb24gYnkgMTAgZG9lcyBub3Qg
b3ZlcmZsb3csIGJlY2F1c2Ugdy5lID49IC02MAorICAgICAgICAvLyBhbmQgdGh1cyBvbmUuZSA+
PSAtNjAuCisgICAgICAgIEFTU0VSVChvbmUuZSgpID49IC02MCk7CisgICAgICAgIEFTU0VSVChm
cmFjdGlvbmFscyA8IG9uZS5mKCkpOworICAgICAgICBBU1NFUlQoVUlOVDY0XzJQQVJUX0MoMHhG
RkZGRkZGRiwgRkZGRkZGRkYpIC8gMTAgPj0gb25lLmYoKSk7CisgICAgICAgIHdoaWxlIChyZXF1
ZXN0ZWRfZGlnaXRzID4gMCAmJiBmcmFjdGlvbmFscyA+IHdfZXJyb3IpIHsKKyAgICAgICAgICAg
IGZyYWN0aW9uYWxzICo9IDEwOworICAgICAgICAgICAgd19lcnJvciAqPSAxMDsKKyAgICAgICAg
ICAgIC8vIEludGVnZXIgZGl2aXNpb24gYnkgb25lLgorICAgICAgICAgICAgaW50IGRpZ2l0ID0g
c3RhdGljX2Nhc3Q8aW50PihmcmFjdGlvbmFscyA+PiAtb25lLmUoKSk7CisgICAgICAgICAgICBi
dWZmZXJbKmxlbmd0aF0gPSAnMCcgKyBkaWdpdDsKKyAgICAgICAgICAgICgqbGVuZ3RoKSsrOwor
ICAgICAgICAgICAgcmVxdWVzdGVkX2RpZ2l0cy0tOworICAgICAgICAgICAgZnJhY3Rpb25hbHMg
Jj0gb25lLmYoKSAtIDE7ICAvLyBNb2R1bG8gYnkgb25lLgorICAgICAgICAgICAgKCprYXBwYSkt
LTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVxdWVzdGVkX2RpZ2l0cyAhPSAwKSByZXR1cm4g
ZmFsc2U7CisgICAgICAgIHJldHVybiBSb3VuZFdlZWRDb3VudGVkKGJ1ZmZlciwgKmxlbmd0aCwg
ZnJhY3Rpb25hbHMsIG9uZS5mKCksIHdfZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGthcHBhKTsKKyAgICB9CisgICAgCisgICAgCisgICAgLy8gUHJvdmlkZXMgYSBkZWNp
bWFsIHJlcHJlc2VudGF0aW9uIG9mIHYuCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIGl0IHN1Y2Nl
ZWRzLCBvdGhlcndpc2UgdGhlIHJlc3VsdCBjYW5ub3QgYmUgdHJ1c3RlZC4KKyAgICAvLyBUaGVy
ZSB3aWxsIGJlICpsZW5ndGggZGlnaXRzIGluc2lkZSB0aGUgYnVmZmVyIChub3QgbnVsbC10ZXJt
aW5hdGVkKS4KKyAgICAvLyBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHRoZW4KKyAgICAv
LyAgICAgICAgdiA9PSAoZG91YmxlKSAoYnVmZmVyICogMTBeZGVjaW1hbF9leHBvbmVudCkuCisg
ICAgLy8gVGhlIGRpZ2l0cyBpbiB0aGUgYnVmZmVyIGFyZSB0aGUgc2hvcnRlc3QgcmVwcmVzZW50
YXRpb24gcG9zc2libGU6IG5vCisgICAgLy8gMC4wOTk5OTk5OTk5OTk5OTk5OSBpbnN0ZWFkIG9m
IDAuMS4gVGhlIHNob3J0ZXIgcmVwcmVzZW50YXRpb24gd2lsbCBldmVuIGJlCisgICAgLy8gY2hv
c2VuIGV2ZW4gaWYgdGhlIGxvbmdlciBvbmUgd291bGQgYmUgY2xvc2VyIHRvIHYuCisgICAgLy8g
VGhlIGxhc3QgZGlnaXQgd2lsbCBiZSBjbG9zZXN0IHRvIHRoZSBhY3R1YWwgdi4gVGhhdCBpcywg
ZXZlbiBpZiBzZXZlcmFsCisgICAgLy8gZGlnaXRzIG1pZ2h0IGNvcnJlY3RseSB5aWVsZCAndicg
d2hlbiByZWFkIGFnYWluLCB0aGUgY2xvc2VzdCB3aWxsIGJlCisgICAgLy8gY29tcHV0ZWQuCisg
ICAgc3RhdGljIGJvb2wgR3Jpc3UzKGRvdWJsZSB2LAorICAgICAgICAgICAgICAgICAgICAgICBW
ZWN0b3I8Y2hhcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGxlbmd0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgaW50KiBkZWNpbWFsX2V4cG9uZW50KSB7CisgICAgICAg
IERpeUZwIHcgPSBEb3VibGUodikuQXNOb3JtYWxpemVkRGl5RnAoKTsKKyAgICAgICAgLy8gYm91
bmRhcnlfbWludXMgYW5kIGJvdW5kYXJ5X3BsdXMgYXJlIHRoZSBib3VuZGFyaWVzIGJldHdlZW4g
diBhbmQgaXRzCisgICAgICAgIC8vIGNsb3Nlc3QgZmxvYXRpbmctcG9pbnQgbmVpZ2hib3JzLiBB
bnkgbnVtYmVyIHN0cmljdGx5IGJldHdlZW4KKyAgICAgICAgLy8gYm91bmRhcnlfbWludXMgYW5k
IGJvdW5kYXJ5X3BsdXMgd2lsbCByb3VuZCB0byB2IHdoZW4gY29udmVydCB0byBhIGRvdWJsZS4K
KyAgICAgICAgLy8gR3Jpc3UzIHdpbGwgbmV2ZXIgb3V0cHV0IHJlcHJlc2VudGF0aW9ucyB0aGF0
IGxpZSBleGFjdGx5IG9uIGEgYm91bmRhcnkuCisgICAgICAgIERpeUZwIGJvdW5kYXJ5X21pbnVz
LCBib3VuZGFyeV9wbHVzOworICAgICAgICBEb3VibGUodikuTm9ybWFsaXplZEJvdW5kYXJpZXMo
JmJvdW5kYXJ5X21pbnVzLCAmYm91bmRhcnlfcGx1cyk7CisgICAgICAgIEFTU0VSVChib3VuZGFy
eV9wbHVzLmUoKSA9PSB3LmUoKSk7CisgICAgICAgIERpeUZwIHRlbl9tazsgIC8vIENhY2hlZCBw
b3dlciBvZiB0ZW46IDEwXi1rCisgICAgICAgIGludCBtazsgICAgICAgIC8vIC1rCisgICAgICAg
IGludCB0ZW5fbWtfbWluaW1hbF9iaW5hcnlfZXhwb25lbnQgPQorICAgICAgICBrTWluaW1hbFRh
cmdldEV4cG9uZW50IC0gKHcuZSgpICsgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUpOworICAgICAg
ICBpbnQgdGVuX21rX21heGltYWxfYmluYXJ5X2V4cG9uZW50ID0KKyAgICAgICAga01heGltYWxU
YXJnZXRFeHBvbmVudCAtICh3LmUoKSArIERpeUZwOjprU2lnbmlmaWNhbmRTaXplKTsKKyAgICAg
ICAgUG93ZXJzT2ZUZW5DYWNoZTo6R2V0Q2FjaGVkUG93ZXJGb3JCaW5hcnlFeHBvbmVudFJhbmdl
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGVuX21rX21pbmltYWxfYmluYXJ5X2V4cG9uZW50LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVuX21rX21h
eGltYWxfYmluYXJ5X2V4cG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRlbl9taywgJm1rKTsKKyAgICAgICAgQVNT
RVJUKChrTWluaW1hbFRhcmdldEV4cG9uZW50IDw9IHcuZSgpICsgdGVuX21rLmUoKSArCisgICAg
ICAgICAgICAgICAgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUpICYmCisgICAgICAgICAgICAgICAo
a01heGltYWxUYXJnZXRFeHBvbmVudCA+PSB3LmUoKSArIHRlbl9tay5lKCkgKworICAgICAgICAg
ICAgICAgIERpeUZwOjprU2lnbmlmaWNhbmRTaXplKSk7CisgICAgICAgIC8vIE5vdGUgdGhhdCB0
ZW5fbWsgaXMgb25seSBhbiBhcHByb3hpbWF0aW9uIG9mIDEwXi1rLiBBIERpeUZwIG9ubHkgY29u
dGFpbnMgYQorICAgICAgICAvLyA2NCBiaXQgc2lnbmlmaWNhbmQgYW5kIHRlbl9tayBpcyB0aHVz
IG9ubHkgcHJlY2lzZSB1cCB0byA2NCBiaXRzLgorICAgICAgICAKKyAgICAgICAgLy8gVGhlIERp
eUZwOjpUaW1lcyBwcm9jZWR1cmUgcm91bmRzIGl0cyByZXN1bHQsIGFuZCB0ZW5fbWsgaXMgYXBw
cm94aW1hdGVkCisgICAgICAgIC8vIHRvby4gVGhlIHZhcmlhYmxlIHNjYWxlZF93IChhcyB3ZWxs
IGFzIHNjYWxlZF9ib3VuZGFyeV9taW51cy9wbHVzKSBhcmUgbm93CisgICAgICAgIC8vIG9mZiBi
eSBhIHNtYWxsIGFtb3VudC4KKyAgICAgICAgLy8gSW4gZmFjdDogc2NhbGVkX3cgLSB3KjEwXmsg
PCAxdWxwICh1bml0IGluIHRoZSBsYXN0IHBsYWNlKSBvZiBzY2FsZWRfdy4KKyAgICAgICAgLy8g
SW4gb3RoZXIgd29yZHM6IGxldCBmID0gc2NhbGVkX3cuZigpIGFuZCBlID0gc2NhbGVkX3cuZSgp
LCB0aGVuCisgICAgICAgIC8vICAgICAgICAgICAoZi0xKSAqIDJeZSA8IHcqMTBeayA8IChmKzEp
ICogMl5lCisgICAgICAgIERpeUZwIHNjYWxlZF93ID0gRGl5RnA6OlRpbWVzKHcsIHRlbl9tayk7
CisgICAgICAgIEFTU0VSVChzY2FsZWRfdy5lKCkgPT0KKyAgICAgICAgICAgICAgIGJvdW5kYXJ5
X3BsdXMuZSgpICsgdGVuX21rLmUoKSArIERpeUZwOjprU2lnbmlmaWNhbmRTaXplKTsKKyAgICAg
ICAgLy8gSW4gdGhlb3J5IGl0IHdvdWxkIGJlIHBvc3NpYmxlIHRvIGF2b2lkIHNvbWUgcmVjb21w
dXRhdGlvbnMgYnkgY29tcHV0aW5nCisgICAgICAgIC8vIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4g
dyBhbmQgYm91bmRhcnlfbWludXMvcGx1cyAoYSBwb3dlciBvZiAyKSBhbmQgdG8KKyAgICAgICAg
Ly8gY29tcHV0ZSBzY2FsZWRfYm91bmRhcnlfbWludXMvcGx1cyBieSBzdWJ0cmFjdGluZy9hZGRp
bmcgZnJvbQorICAgICAgICAvLyBzY2FsZWRfdy4gSG93ZXZlciB0aGUgY29kZSBiZWNvbWVzIG11
Y2ggbGVzcyByZWFkYWJsZSBhbmQgdGhlIHNwZWVkCisgICAgICAgIC8vIGVuaGFuY2VtZW50cyBh
cmUgbm90IHRlcnJpZmZpYy4KKyAgICAgICAgRGl5RnAgc2NhbGVkX2JvdW5kYXJ5X21pbnVzID0g
RGl5RnA6OlRpbWVzKGJvdW5kYXJ5X21pbnVzLCB0ZW5fbWspOworICAgICAgICBEaXlGcCBzY2Fs
ZWRfYm91bmRhcnlfcGx1cyAgPSBEaXlGcDo6VGltZXMoYm91bmRhcnlfcGx1cywgIHRlbl9tayk7
CisgICAgICAgIAorICAgICAgICAvLyBEaWdpdEdlbiB3aWxsIGdlbmVyYXRlIHRoZSBkaWdpdHMg
b2Ygc2NhbGVkX3cuIFRoZXJlZm9yZSB3ZSBoYXZlCisgICAgICAgIC8vIHYgPT0gKGRvdWJsZSkg
KHNjYWxlZF93ICogMTBeLW1rKS4KKyAgICAgICAgLy8gU2V0IGRlY2ltYWxfZXhwb25lbnQgPT0g
LW1rIGFuZCBwYXNzIGl0IHRvIERpZ2l0R2VuLiBJZiBzY2FsZWRfdyBpcyBub3QgYW4KKyAgICAg
ICAgLy8gaW50ZWdlciB0aGFuIGl0IHdpbGwgYmUgdXBkYXRlZC4gRm9yIGluc3RhbmNlIGlmIHNj
YWxlZF93ID09IDEuMjMgdGhlbgorICAgICAgICAvLyB0aGUgYnVmZmVyIHdpbGwgYmUgZmlsbGVk
IHdpdGggIjEyMyIgdW5kIHRoZSBkZWNpbWFsX2V4cG9uZW50IHdpbGwgYmUKKyAgICAgICAgLy8g
ZGVjcmVhc2VkIGJ5IDIuCisgICAgICAgIGludCBrYXBwYTsKKyAgICAgICAgYm9vbCByZXN1bHQg
PSBEaWdpdEdlbihzY2FsZWRfYm91bmRhcnlfbWludXMsIHNjYWxlZF93LCBzY2FsZWRfYm91bmRh
cnlfcGx1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGxlbmd0aCwg
JmthcHBhKTsKKyAgICAgICAgKmRlY2ltYWxfZXhwb25lbnQgPSAtbWsgKyBrYXBwYTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgCisgICAgLy8gVGhlICJjb3VudGVk
IiB2ZXJzaW9uIG9mIGdyaXN1MyAoc2VlIGFib3ZlKSBvbmx5IGdlbmVyYXRlcyByZXF1ZXN0ZWRf
ZGlnaXRzCisgICAgLy8gbnVtYmVyIG9mIGRpZ2l0cy4gVGhpcyB2ZXJzaW9uIGRvZXMgbm90IGdl
bmVyYXRlIHRoZSBzaG9ydGVzdCByZXByZXNlbnRhdGlvbiwKKyAgICAvLyBhbmQgd2l0aCBlbm91
Z2ggcmVxdWVzdGVkIGRpZ2l0cyAwLjEgd2lsbCBhdCBzb21lIHBvaW50IHByaW50IGFzIDAuOTk5
OTk5OS4uLgorICAgIC8vIEdyaXN1MyBpcyB0b28gaW1wcmVjaXNlIGZvciByZWFsIGhhbGZ3YXkg
Y2FzZXMgKDEuNSB3aWxsIG5vdCB3b3JrKSBhbmQKKyAgICAvLyB0aGVyZWZvcmUgdGhlIHJvdW5k
aW5nIHN0cmF0ZWd5IGZvciBoYWxmd2F5IGNhc2VzIGlzIGlycmVsZXZhbnQuCisgICAgc3RhdGlj
IGJvb2wgR3Jpc3UzQ291bnRlZChkb3VibGUgdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCByZXF1ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VmVjdG9yPGNoYXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCog
bGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBkZWNpbWFsX2V4cG9u
ZW50KSB7CisgICAgICAgIERpeUZwIHcgPSBEb3VibGUodikuQXNOb3JtYWxpemVkRGl5RnAoKTsK
KyAgICAgICAgRGl5RnAgdGVuX21rOyAgLy8gQ2FjaGVkIHBvd2VyIG9mIHRlbjogMTBeLWsKKyAg
ICAgICAgaW50IG1rOyAgICAgICAgLy8gLWsKKyAgICAgICAgaW50IHRlbl9ta19taW5pbWFsX2Jp
bmFyeV9leHBvbmVudCA9CisgICAgICAgIGtNaW5pbWFsVGFyZ2V0RXhwb25lbnQgLSAody5lKCkg
KyBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSk7CisgICAgICAgIGludCB0ZW5fbWtfbWF4aW1hbF9i
aW5hcnlfZXhwb25lbnQgPQorICAgICAgICBrTWF4aW1hbFRhcmdldEV4cG9uZW50IC0gKHcuZSgp
ICsgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUpOworICAgICAgICBQb3dlcnNPZlRlbkNhY2hlOjpH
ZXRDYWNoZWRQb3dlckZvckJpbmFyeUV4cG9uZW50UmFuZ2UoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW5fbWtfbWluaW1h
bF9iaW5hcnlfZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW5fbWtfbWF4aW1hbF9iaW5hcnlfZXhwb25lbnQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmdGVuX21rLCAmbWspOworICAgICAgICBBU1NFUlQoKGtNaW5pbWFsVGFyZ2V0RXhw
b25lbnQgPD0gdy5lKCkgKyB0ZW5fbWsuZSgpICsKKyAgICAgICAgICAgICAgICBEaXlGcDo6a1Np
Z25pZmljYW5kU2l6ZSkgJiYKKyAgICAgICAgICAgICAgIChrTWF4aW1hbFRhcmdldEV4cG9uZW50
ID49IHcuZSgpICsgdGVuX21rLmUoKSArCisgICAgICAgICAgICAgICAgRGl5RnA6OmtTaWduaWZp
Y2FuZFNpemUpKTsKKyAgICAgICAgLy8gTm90ZSB0aGF0IHRlbl9tayBpcyBvbmx5IGFuIGFwcHJv
eGltYXRpb24gb2YgMTBeLWsuIEEgRGl5RnAgb25seSBjb250YWlucyBhCisgICAgICAgIC8vIDY0
IGJpdCBzaWduaWZpY2FuZCBhbmQgdGVuX21rIGlzIHRodXMgb25seSBwcmVjaXNlIHVwIHRvIDY0
IGJpdHMuCisgICAgICAgIAorICAgICAgICAvLyBUaGUgRGl5RnA6OlRpbWVzIHByb2NlZHVyZSBy
b3VuZHMgaXRzIHJlc3VsdCwgYW5kIHRlbl9tayBpcyBhcHByb3hpbWF0ZWQKKyAgICAgICAgLy8g
dG9vLiBUaGUgdmFyaWFibGUgc2NhbGVkX3cgKGFzIHdlbGwgYXMgc2NhbGVkX2JvdW5kYXJ5X21p
bnVzL3BsdXMpIGFyZSBub3cKKyAgICAgICAgLy8gb2ZmIGJ5IGEgc21hbGwgYW1vdW50LgorICAg
ICAgICAvLyBJbiBmYWN0OiBzY2FsZWRfdyAtIHcqMTBeayA8IDF1bHAgKHVuaXQgaW4gdGhlIGxh
c3QgcGxhY2UpIG9mIHNjYWxlZF93LgorICAgICAgICAvLyBJbiBvdGhlciB3b3JkczogbGV0IGYg
PSBzY2FsZWRfdy5mKCkgYW5kIGUgPSBzY2FsZWRfdy5lKCksIHRoZW4KKyAgICAgICAgLy8gICAg
ICAgICAgIChmLTEpICogMl5lIDwgdyoxMF5rIDwgKGYrMSkgKiAyXmUKKyAgICAgICAgRGl5RnAg
c2NhbGVkX3cgPSBEaXlGcDo6VGltZXModywgdGVuX21rKTsKKyAgICAgICAgCisgICAgICAgIC8v
IFdlIG5vdyBoYXZlIChkb3VibGUpIChzY2FsZWRfdyAqIDEwXi1taykuCisgICAgICAgIC8vIERp
Z2l0R2VuIHdpbGwgZ2VuZXJhdGUgdGhlIGZpcnN0IHJlcXVlc3RlZF9kaWdpdHMgZGlnaXRzIG9m
IHNjYWxlZF93IGFuZAorICAgICAgICAvLyByZXR1cm4gdG9nZXRoZXIgd2l0aCBhIGthcHBhIHN1
Y2ggdGhhdCBzY2FsZWRfdyB+PSBidWZmZXIgKiAxMF5rYXBwYS4gKEl0CisgICAgICAgIC8vIHdp
bGwgbm90IGFsd2F5cyBiZSBleGFjdGx5IHRoZSBzYW1lIHNpbmNlIERpZ2l0R2VuQ291bnRlZCBv
bmx5IHByb2R1Y2VzIGEKKyAgICAgICAgLy8gbGltaXRlZCBudW1iZXIgb2YgZGlnaXRzLikKKyAg
ICAgICAgaW50IGthcHBhOworICAgICAgICBib29sIHJlc3VsdCA9IERpZ2l0R2VuQ291bnRlZChz
Y2FsZWRfdywgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnVmZmVyLCBsZW5ndGgsICZrYXBwYSk7CisgICAgICAgICpkZWNpbWFsX2V4cG9u
ZW50ID0gLW1rICsga2FwcGE7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAor
ICAgIAorICAgIGJvb2wgRmFzdER0b2EoZG91YmxlIHYsCisgICAgICAgICAgICAgICAgICBGYXN0
RHRvYU1vZGUgbW9kZSwKKyAgICAgICAgICAgICAgICAgIGludCByZXF1ZXN0ZWRfZGlnaXRzLAor
ICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAg
IGludCogbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgaW50KiBkZWNpbWFsX3BvaW50KSB7Cisg
ICAgICAgIEFTU0VSVCh2ID4gMCk7CisgICAgICAgIEFTU0VSVCghRG91YmxlKHYpLklzU3BlY2lh
bCgpKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIGlu
dCBkZWNpbWFsX2V4cG9uZW50ID0gMDsKKyAgICAgICAgc3dpdGNoIChtb2RlKSB7CisgICAgICAg
ICAgICBjYXNlIEZBU1RfRFRPQV9TSE9SVEVTVDoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBH
cmlzdTModiwgYnVmZmVyLCBsZW5ndGgsICZkZWNpbWFsX2V4cG9uZW50KTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRkFTVF9EVE9BX1BSRUNJU0lPTjoKKyAgICAg
ICAgICAgICAgICByZXN1bHQgPSBHcmlzdTNDb3VudGVkKHYsIHJlcXVlc3RlZF9kaWdpdHMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGxlbmd0aCwgJmRl
Y2ltYWxfZXhwb25lbnQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgICAg
IGlmIChyZXN1bHQpIHsKKyAgICAgICAgICAgICpkZWNpbWFsX3BvaW50ID0gKmxlbmd0aCArIGRl
Y2ltYWxfZXhwb25lbnQ7CisgICAgICAgICAgICBidWZmZXJbKmxlbmd0aF0gPSAnXDAnOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorfSAgLy8gbmFtZXNw
YWNlIGRvdWJsZV9jb252ZXJzaW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL2R0b2EvZmFzdC1kdG9hLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZmFz
dC1kdG9hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uODg0MzZmZDU1YmJmNDBjMTVhNGEzNTg0YWM4YTUzYjMwOTE0
NzMwMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9m
YXN0LWR0b2EuaApAQCAtMCwwICsxLDg0IEBACisvLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJv
amVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8v
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
KyNpZm5kZWYgRE9VQkxFX0NPTlZFUlNJT05fRkFTVF9EVE9BX0hfCisjZGVmaW5lIERPVUJMRV9D
T05WRVJTSU9OX0ZBU1RfRFRPQV9IXworCisjaW5jbHVkZSAidXRpbHMuaCIKKworbmFtZXNwYWNl
IGRvdWJsZV9jb252ZXJzaW9uIHsKKyAgICAKKyAgICBlbnVtIEZhc3REdG9hTW9kZSB7CisgICAg
ICAgIC8vIENvbXB1dGVzIHRoZSBzaG9ydGVzdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4g
aW5wdXQuIFRoZSByZXR1cm5lZAorICAgICAgICAvLyByZXN1bHQgd2lsbCBiZSB0aGUgbW9zdCBh
Y2N1cmF0ZSBudW1iZXIgb2YgdGhpcyBsZW5ndGguIExvbmdlcgorICAgICAgICAvLyByZXByZXNl
bnRhdGlvbnMgbWlnaHQgYmUgbW9yZSBhY2N1cmF0ZS4KKyAgICAgICAgRkFTVF9EVE9BX1NIT1JU
RVNULAorICAgICAgICAvLyBDb21wdXRlcyBhIHJlcHJlc2VudGF0aW9uIHdoZXJlIHRoZSBwcmVj
aXNpb24gKG51bWJlciBvZiBkaWdpdHMpIGlzCisgICAgICAgIC8vIGdpdmVuIGFzIGlucHV0LiBU
aGUgcHJlY2lzaW9uIGlzIGluZGVwZW5kZW50IG9mIHRoZSBkZWNpbWFsIHBvaW50LgorICAgICAg
ICBGQVNUX0RUT0FfUFJFQ0lTSU9OCisgICAgfTsKKyAgICAKKyAgICAvLyBGYXN0RHRvYSB3aWxs
IHByb2R1Y2UgYXQgbW9zdCBrRmFzdER0b2FNYXhpbWFsTGVuZ3RoIGRpZ2l0cy4gVGhpcyBkb2Vz
IG5vdAorICAgIC8vIGluY2x1ZGUgdGhlIHRlcm1pbmF0aW5nICdcMCcgY2hhcmFjdGVyLgorICAg
IHN0YXRpYyBjb25zdCBpbnQga0Zhc3REdG9hTWF4aW1hbExlbmd0aCA9IDE3OworICAgIAorICAg
IC8vIFByb3ZpZGVzIGEgZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiB2LgorICAgIC8vIFRoZSBy
ZXN1bHQgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGJ1ZmZlciAqIDEwXihwb2ludCAtIGxlbmd0
aCkuCisgICAgLy8KKyAgICAvLyBQcmVjb25kaXRpb246CisgICAgLy8gICAqIHYgbXVzdCBiZSBh
IHN0cmljdGx5IHBvc2l0aXZlIGZpbml0ZSBkb3VibGUuCisgICAgLy8KKyAgICAvLyBSZXR1cm5z
IHRydWUgaWYgaXQgc3VjY2VlZHMsIG90aGVyd2lzZSB0aGUgcmVzdWx0IGNhbiBub3QgYmUgdHJ1
c3RlZC4KKyAgICAvLyBUaGVyZSB3aWxsIGJlICpsZW5ndGggZGlnaXRzIGluc2lkZSB0aGUgYnVm
ZmVyIGZvbGxvd2VkIGJ5IGEgbnVsbCB0ZXJtaW5hdG9yLgorICAgIC8vIElmIHRoZSBmdW5jdGlv
biByZXR1cm5zIHRydWUgYW5kIG1vZGUgZXF1YWxzCisgICAgLy8gICAtIEZBU1RfRFRPQV9TSE9S
VEVTVCwgdGhlbgorICAgIC8vICAgICB0aGUgcGFyYW1ldGVyIHJlcXVlc3RlZF9kaWdpdHMgaXMg
aWdub3JlZC4KKyAgICAvLyAgICAgVGhlIHJlc3VsdCBzYXRpc2ZpZXMKKyAgICAvLyAgICAgICAg
IHYgPT0gKGRvdWJsZSkgKGJ1ZmZlciAqIDEwXihwb2ludCAtIGxlbmd0aCkpLgorICAgIC8vICAg
ICBUaGUgZGlnaXRzIGluIHRoZSBidWZmZXIgYXJlIHRoZSBzaG9ydGVzdCByZXByZXNlbnRhdGlv
biBwb3NzaWJsZS4gRS5nLgorICAgIC8vICAgICBpZiAwLjA5OTk5OTk5OTk5OSBhbmQgMC4xIHJl
cHJlc2VudCB0aGUgc2FtZSBkb3VibGUgdGhlbiAiMSIgaXMgcmV0dXJuZWQKKyAgICAvLyAgICAg
d2l0aCBwb2ludCA9IDAuCisgICAgLy8gICAgIFRoZSBsYXN0IGRpZ2l0IHdpbGwgYmUgY2xvc2Vz
dCB0byB0aGUgYWN0dWFsIHYuIFRoYXQgaXMsIGV2ZW4gaWYgc2V2ZXJhbAorICAgIC8vICAgICBk
aWdpdHMgbWlnaHQgY29ycmVjdGx5IHlpZWxkICd2JyB3aGVuIHJlYWQgYWdhaW4sIHRoZSBidWZm
ZXIgd2lsbCBjb250YWluCisgICAgLy8gICAgIHRoZSBvbmUgY2xvc2VzdCB0byB2LgorICAgIC8v
ICAgLSBGQVNUX0RUT0FfUFJFQ0lTSU9OLCB0aGVuCisgICAgLy8gICAgIHRoZSBidWZmZXIgY29u
dGFpbnMgcmVxdWVzdGVkX2RpZ2l0cyBkaWdpdHMuCisgICAgLy8gICAgIHRoZSBkaWZmZXJlbmNl
IHYgLSAoYnVmZmVyICogMTBeKHBvaW50LWxlbmd0aCkpIGlzIGNsb3Nlc3QgdG8gemVybyBmb3IK
KyAgICAvLyAgICAgYWxsIHBvc3NpYmxlIHJlcHJlc2VudGF0aW9ucyBvZiByZXF1ZXN0ZWRfZGln
aXRzIGRpZ2l0cy4KKyAgICAvLyAgICAgSWYgdGhlcmUgYXJlIHR3byB2YWx1ZXMgdGhhdCBhcmUg
ZXF1YWxseSBjbG9zZSwgdGhlbiBGYXN0RHRvYSByZXR1cm5zCisgICAgLy8gICAgIGZhbHNlLgor
ICAgIC8vIEZvciBib3RoIG1vZGVzIHRoZSBidWZmZXIgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8g
aG9sZCB0aGUgcmVzdWx0LgorICAgIGJvb2wgRmFzdER0b2EoZG91YmxlIGQsCisgICAgICAgICAg
ICAgICAgICBGYXN0RHRvYU1vZGUgbW9kZSwKKyAgICAgICAgICAgICAgICAgIGludCByZXF1ZXN0
ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwKKyAgICAg
ICAgICAgICAgICAgIGludCogbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgaW50KiBkZWNpbWFs
X3BvaW50KTsKKyAgICAKK30gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbgorCisjZW5k
aWYgIC8vIERPVUJMRV9DT05WRVJTSU9OX0ZBU1RfRFRPQV9IXwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2ZpeGVkLWR0b2EuY2MgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL2R0b2EvZml4ZWQtZHRvYS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NGQzMjI5ZWM2YzQ3NDQ5
YWRmNWQwMTQ5Yzc0MTBiYjIwZjAyMGFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9kdG9hL2ZpeGVkLWR0b2EuY2MKQEAgLTAsMCArMSw0MDQgQEAKKy8vIENv
cHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2Ns
YWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
CisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8g
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgIlVu
dXNlZFBhcmFtLmgiCisjaW5jbHVkZSAiZml4ZWQtZHRvYS5oIgorI2luY2x1ZGUgImRvdWJsZS5o
IgorCituYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIC8vIFJlcHJlc2Vu
dHMgYSAxMjhiaXQgdHlwZS4gVGhpcyBjbGFzcyBzaG91bGQgYmUgcmVwbGFjZWQgYnkgYSBuYXRp
dmUgdHlwZSBvbgorICAgIC8vIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgMTI4Yml0IGludGVnZXJz
LgorICAgIGNsYXNzIFVJbnQxMjggeworICAgIHB1YmxpYzoKKyAgICAgICAgVUludDEyOCgpIDog
aGlnaF9iaXRzXygwKSwgbG93X2JpdHNfKDApIHsgfQorICAgICAgICBVSW50MTI4KHVpbnQ2NF90
IGhpZ2gsIHVpbnQ2NF90IGxvdykgOiBoaWdoX2JpdHNfKGhpZ2gpLCBsb3dfYml0c18obG93KSB7
IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgTXVsdGlwbHkodWludDMyX3QgbXVsdGlwbGljYW5k
KSB7CisgICAgICAgICAgICB1aW50NjRfdCBhY2N1bXVsYXRvcjsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgYWNjdW11bGF0b3IgPSAobG93X2JpdHNfICYga01hc2szMikgKiBtdWx0aXBsaWNh
bmQ7CisgICAgICAgICAgICB1aW50MzJfdCBwYXJ0ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFj
Y3VtdWxhdG9yICYga01hc2szMik7CisgICAgICAgICAgICBhY2N1bXVsYXRvciA+Pj0gMzI7Cisg
ICAgICAgICAgICBhY2N1bXVsYXRvciA9IGFjY3VtdWxhdG9yICsgKGxvd19iaXRzXyA+PiAzMikg
KiBtdWx0aXBsaWNhbmQ7CisgICAgICAgICAgICBsb3dfYml0c18gPSAoYWNjdW11bGF0b3IgPDwg
MzIpICsgcGFydDsKKyAgICAgICAgICAgIGFjY3VtdWxhdG9yID4+PSAzMjsKKyAgICAgICAgICAg
IGFjY3VtdWxhdG9yID0gYWNjdW11bGF0b3IgKyAoaGlnaF9iaXRzXyAmIGtNYXNrMzIpICogbXVs
dGlwbGljYW5kOworICAgICAgICAgICAgcGFydCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihhY2N1
bXVsYXRvciAmIGtNYXNrMzIpOworICAgICAgICAgICAgYWNjdW11bGF0b3IgPj49IDMyOworICAg
ICAgICAgICAgYWNjdW11bGF0b3IgPSBhY2N1bXVsYXRvciArIChoaWdoX2JpdHNfID4+IDMyKSAq
IG11bHRpcGxpY2FuZDsKKyAgICAgICAgICAgIGhpZ2hfYml0c18gPSAoYWNjdW11bGF0b3IgPDwg
MzIpICsgcGFydDsKKyAgICAgICAgICAgIEFTU0VSVCgoYWNjdW11bGF0b3IgPj4gMzIpID09IDAp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIFNoaWZ0KGludCBzaGlmdF9hbW91
bnQpIHsKKyAgICAgICAgICAgIEFTU0VSVCgtNjQgPD0gc2hpZnRfYW1vdW50ICYmIHNoaWZ0X2Ft
b3VudCA8PSA2NCk7CisgICAgICAgICAgICBpZiAoc2hpZnRfYW1vdW50ID09IDApIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNoaWZ0X2Ftb3VudCA9
PSAtNjQpIHsKKyAgICAgICAgICAgICAgICBoaWdoX2JpdHNfID0gbG93X2JpdHNfOworICAgICAg
ICAgICAgICAgIGxvd19iaXRzXyA9IDA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNoaWZ0X2Ft
b3VudCA9PSA2NCkgeworICAgICAgICAgICAgICAgIGxvd19iaXRzXyA9IGhpZ2hfYml0c187Cisg
ICAgICAgICAgICAgICAgaGlnaF9iaXRzXyA9IDA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNo
aWZ0X2Ftb3VudCA8PSAwKSB7CisgICAgICAgICAgICAgICAgaGlnaF9iaXRzXyA8PD0gLXNoaWZ0
X2Ftb3VudDsKKyAgICAgICAgICAgICAgICBoaWdoX2JpdHNfICs9IGxvd19iaXRzXyA+PiAoNjQg
KyBzaGlmdF9hbW91bnQpOworICAgICAgICAgICAgICAgIGxvd19iaXRzXyA8PD0gLXNoaWZ0X2Ft
b3VudDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbG93X2JpdHNfID4+
PSBzaGlmdF9hbW91bnQ7CisgICAgICAgICAgICAgICAgbG93X2JpdHNfICs9IGhpZ2hfYml0c18g
PDwgKDY0IC0gc2hpZnRfYW1vdW50KTsKKyAgICAgICAgICAgICAgICBoaWdoX2JpdHNfID4+PSBz
aGlmdF9hbW91bnQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IC8vIE1vZGlmaWVzICp0aGlzIHRvICp0aGlzIE1PRCAoMl5wb3dlcikuCisgICAgICAgIC8vIFJl
dHVybnMgKnRoaXMgRElWICgyXnBvd2VyKS4KKyAgICAgICAgaW50IERpdk1vZFBvd2VyT2YyKGlu
dCBwb3dlcikgeworICAgICAgICAgICAgaWYgKHBvd2VyID49IDY0KSB7CisgICAgICAgICAgICAg
ICAgaW50IHJlc3VsdCA9IHN0YXRpY19jYXN0PGludD4oaGlnaF9iaXRzXyA+PiAocG93ZXIgLSA2
NCkpOworICAgICAgICAgICAgICAgIGhpZ2hfYml0c18gLT0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KHJlc3VsdCkgPDwgKHBvd2VyIC0gNjQpOworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHVpbnQ2NF90IHBhcnRfbG93
ID0gbG93X2JpdHNfID4+IHBvd2VyOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IHBhcnRfaGln
aCA9IGhpZ2hfYml0c18gPDwgKDY0IC0gcG93ZXIpOworICAgICAgICAgICAgICAgIGludCByZXN1
bHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBhcnRfbG93ICsgcGFydF9oaWdoKTsKKyAgICAgICAgICAg
ICAgICBoaWdoX2JpdHNfID0gMDsKKyAgICAgICAgICAgICAgICBsb3dfYml0c18gLT0gcGFydF9s
b3cgPDwgcG93ZXI7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBJc1plcm8oKSBjb25zdCB7Cisg
ICAgICAgICAgICByZXR1cm4gaGlnaF9iaXRzXyA9PSAwICYmIGxvd19iaXRzXyA9PSAwOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpbnQgQml0QXQoaW50IHBvc2l0aW9uKSB7CisgICAg
ICAgICAgICBpZiAocG9zaXRpb24gPj0gNjQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8aW50PihoaWdoX2JpdHNfID4+IChwb3NpdGlvbiAtIDY0KSkgJiAxOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihs
b3dfYml0c18gPj4gcG9zaXRpb24pICYgMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBzdGF0aWMgY29uc3QgdWludDY0X3Qga01hc2sz
MiA9IDB4RkZGRkZGRkY7CisgICAgICAgIC8vIFZhbHVlID09IChoaWdoX2JpdHNfIDw8IDY0KSAr
IGxvd19iaXRzXworICAgICAgICB1aW50NjRfdCBoaWdoX2JpdHNfOworICAgICAgICB1aW50NjRf
dCBsb3dfYml0c187CisgICAgfTsKKyAgICAKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgaW50IGtE
b3VibGVTaWduaWZpY2FuZFNpemUgPSA1MzsgIC8vIEluY2x1ZGVzIHRoZSBoaWRkZW4gYml0Lgor
ICAgIAorICAgIAorICAgIHN0YXRpYyB2b2lkIEZpbGxEaWdpdHMzMkZpeGVkTGVuZ3RoKHVpbnQz
Ml90IG51bWJlciwgaW50IHJlcXVlc3RlZF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwgaW50KiBsZW5ndGgpIHsKKyAg
ICAgICAgZm9yIChpbnQgaSA9IHJlcXVlc3RlZF9sZW5ndGggLSAxOyBpID49IDA7IC0taSkgewor
ICAgICAgICAgICAgYnVmZmVyWygqbGVuZ3RoKSArIGldID0gJzAnICsgbnVtYmVyICUgMTA7Cisg
ICAgICAgICAgICBudW1iZXIgLz0gMTA7CisgICAgICAgIH0KKyAgICAgICAgKmxlbmd0aCArPSBy
ZXF1ZXN0ZWRfbGVuZ3RoOworICAgIH0KKyAgICAKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBGaWxs
RGlnaXRzMzIodWludDMyX3QgbnVtYmVyLCBWZWN0b3I8Y2hhcj4gYnVmZmVyLCBpbnQqIGxlbmd0
aCkgeworICAgICAgICBpbnQgbnVtYmVyX2xlbmd0aCA9IDA7CisgICAgICAgIC8vIFdlIGZpbGwg
dGhlIGRpZ2l0cyBpbiByZXZlcnNlIG9yZGVyIGFuZCBleGNoYW5nZSB0aGVtIGFmdGVyd2FyZHMu
CisgICAgICAgIHdoaWxlIChudW1iZXIgIT0gMCkgeworICAgICAgICAgICAgaW50IGRpZ2l0ID0g
bnVtYmVyICUgMTA7CisgICAgICAgICAgICBudW1iZXIgLz0gMTA7CisgICAgICAgICAgICBidWZm
ZXJbKCpsZW5ndGgpICsgbnVtYmVyX2xlbmd0aF0gPSAnMCcgKyBkaWdpdDsKKyAgICAgICAgICAg
IG51bWJlcl9sZW5ndGgrKzsKKyAgICAgICAgfQorICAgICAgICAvLyBFeGNoYW5nZSB0aGUgZGln
aXRzLgorICAgICAgICBpbnQgaSA9ICpsZW5ndGg7CisgICAgICAgIGludCBqID0gKmxlbmd0aCAr
IG51bWJlcl9sZW5ndGggLSAxOworICAgICAgICB3aGlsZSAoaSA8IGopIHsKKyAgICAgICAgICAg
IGNoYXIgdG1wID0gYnVmZmVyW2ldOworICAgICAgICAgICAgYnVmZmVyW2ldID0gYnVmZmVyW2pd
OworICAgICAgICAgICAgYnVmZmVyW2pdID0gdG1wOworICAgICAgICAgICAgaSsrOworICAgICAg
ICAgICAgai0tOworICAgICAgICB9CisgICAgICAgICpsZW5ndGggKz0gbnVtYmVyX2xlbmd0aDsK
KyAgICB9CisgICAgCisgICAgCisgICAgc3RhdGljIHZvaWQgRmlsbERpZ2l0czY0Rml4ZWRMZW5n
dGgodWludDY0X3QgbnVtYmVyLCBpbnQgcmVxdWVzdGVkX2xlbmd0aCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLCBpbnQqIGxlbmd0
aCkgeworICAgICAgICBVTlVTRURfUEFSQU0ocmVxdWVzdGVkX2xlbmd0aCk7CisgICAgICAgIGNv
bnN0IHVpbnQzMl90IGtUZW43ID0gMTAwMDAwMDA7CisgICAgICAgIC8vIEZvciBlZmZpY2llbmN5
IGN1dCB0aGUgbnVtYmVyIGludG8gMyB1aW50MzJfdCBwYXJ0cywgYW5kIHByaW50IHRob3NlLgor
ICAgICAgICB1aW50MzJfdCBwYXJ0MiA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihudW1iZXIgJSBr
VGVuNyk7CisgICAgICAgIG51bWJlciAvPSBrVGVuNzsKKyAgICAgICAgdWludDMyX3QgcGFydDEg
PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4obnVtYmVyICUga1RlbjcpOworICAgICAgICB1aW50MzJf
dCBwYXJ0MCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihudW1iZXIgLyBrVGVuNyk7CisgICAgICAg
IAorICAgICAgICBGaWxsRGlnaXRzMzJGaXhlZExlbmd0aChwYXJ0MCwgMywgYnVmZmVyLCBsZW5n
dGgpOworICAgICAgICBGaWxsRGlnaXRzMzJGaXhlZExlbmd0aChwYXJ0MSwgNywgYnVmZmVyLCBs
ZW5ndGgpOworICAgICAgICBGaWxsRGlnaXRzMzJGaXhlZExlbmd0aChwYXJ0MiwgNywgYnVmZmVy
LCBsZW5ndGgpOworICAgIH0KKyAgICAKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBGaWxsRGlnaXRz
NjQodWludDY0X3QgbnVtYmVyLCBWZWN0b3I8Y2hhcj4gYnVmZmVyLCBpbnQqIGxlbmd0aCkgewor
ICAgICAgICBjb25zdCB1aW50MzJfdCBrVGVuNyA9IDEwMDAwMDAwOworICAgICAgICAvLyBGb3Ig
ZWZmaWNpZW5jeSBjdXQgdGhlIG51bWJlciBpbnRvIDMgdWludDMyX3QgcGFydHMsIGFuZCBwcmlu
dCB0aG9zZS4KKyAgICAgICAgdWludDMyX3QgcGFydDIgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
bnVtYmVyICUga1RlbjcpOworICAgICAgICBudW1iZXIgLz0ga1Rlbjc7CisgICAgICAgIHVpbnQz
Ml90IHBhcnQxID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG51bWJlciAlIGtUZW43KTsKKyAgICAg
ICAgdWludDMyX3QgcGFydDAgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4obnVtYmVyIC8ga1Rlbjcp
OworICAgICAgICAKKyAgICAgICAgaWYgKHBhcnQwICE9IDApIHsKKyAgICAgICAgICAgIEZpbGxE
aWdpdHMzMihwYXJ0MCwgYnVmZmVyLCBsZW5ndGgpOworICAgICAgICAgICAgRmlsbERpZ2l0czMy
Rml4ZWRMZW5ndGgocGFydDEsIDcsIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAgICAgIEZpbGxE
aWdpdHMzMkZpeGVkTGVuZ3RoKHBhcnQyLCA3LCBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgIH0g
ZWxzZSBpZiAocGFydDEgIT0gMCkgeworICAgICAgICAgICAgRmlsbERpZ2l0czMyKHBhcnQxLCBi
dWZmZXIsIGxlbmd0aCk7CisgICAgICAgICAgICBGaWxsRGlnaXRzMzJGaXhlZExlbmd0aChwYXJ0
MiwgNywgYnVmZmVyLCBsZW5ndGgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgRmls
bERpZ2l0czMyKHBhcnQyLCBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgCisgICAgc3RhdGljIHZvaWQgUm91bmRVcChWZWN0b3I8Y2hhcj4gYnVmZmVyLCBpbnQq
IGxlbmd0aCwgaW50KiBkZWNpbWFsX3BvaW50KSB7CisgICAgICAgIC8vIEFuIGVtcHR5IGJ1ZmZl
ciByZXByZXNlbnRzIDAuCisgICAgICAgIGlmICgqbGVuZ3RoID09IDApIHsKKyAgICAgICAgICAg
IGJ1ZmZlclswXSA9ICcxJzsKKyAgICAgICAgICAgICpkZWNpbWFsX3BvaW50ID0gMTsKKyAgICAg
ICAgICAgICpsZW5ndGggPSAxOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIC8vIFJvdW5kIHRoZSBsYXN0IGRpZ2l0IHVudGlsIHdlIGVpdGhlciBoYXZlIGEgZGlnaXQg
dGhhdCB3YXMgbm90ICc5JyBvciB1bnRpbAorICAgICAgICAvLyB3ZSByZWFjaGVkIHRoZSBmaXJz
dCBkaWdpdC4KKyAgICAgICAgYnVmZmVyWygqbGVuZ3RoKSAtIDFdKys7CisgICAgICAgIGZvciAo
aW50IGkgPSAoKmxlbmd0aCkgLSAxOyBpID4gMDsgLS1pKSB7CisgICAgICAgICAgICBpZiAoYnVm
ZmVyW2ldICE9ICcwJyArIDEwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnVmZmVyW2ldID0gJzAnOworICAgICAgICAgICAgYnVmZmVyW2kg
LSAxXSsrOworICAgICAgICB9CisgICAgICAgIC8vIElmIHRoZSBmaXJzdCBkaWdpdCBpcyBub3cg
JzAnICsgMTAsIHdlIHdvdWxkIG5lZWQgdG8gc2V0IGl0IHRvICcwJyBhbmQgYWRkCisgICAgICAg
IC8vIGEgJzEnIGluIGZyb250LiBIb3dldmVyIHdlIHJlYWNoIHRoZSBmaXJzdCBkaWdpdCBvbmx5
IGlmIGFsbCBmb2xsb3dpbmcKKyAgICAgICAgLy8gZGlnaXRzIGhhZCBiZWVuICc5JyBiZWZvcmUg
cm91bmRpbmcgdXAuIE5vdyBhbGwgdHJhaWxpbmcgZGlnaXRzIGFyZSAnMCcgYW5kCisgICAgICAg
IC8vIHdlIHNpbXBseSBzd2l0Y2ggdGhlIGZpcnN0IGRpZ2l0IHRvICcxJyBhbmQgdXBkYXRlIHRo
ZSBkZWNpbWFsLXBvaW50CisgICAgICAgIC8vIChpbmRpY2F0aW5nIHRoYXQgdGhlIHBvaW50IGlz
IG5vdyBvbmUgZGlnaXQgdG8gdGhlIHJpZ2h0KS4KKyAgICAgICAgaWYgKGJ1ZmZlclswXSA9PSAn
MCcgKyAxMCkgeworICAgICAgICAgICAgYnVmZmVyWzBdID0gJzEnOworICAgICAgICAgICAgKCpk
ZWNpbWFsX3BvaW50KSsrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIC8vIFRo
ZSBnaXZlbiBmcmFjdGlvbmFscyBudW1iZXIgcmVwcmVzZW50cyBhIGZpeGVkLXBvaW50IG51bWJl
ciB3aXRoIGJpbmFyeQorICAgIC8vIHBvaW50IGF0IGJpdCAoLWV4cG9uZW50KS4KKyAgICAvLyBQ
cmVjb25kaXRpb25zOgorICAgIC8vICAgLTEyOCA8PSBleHBvbmVudCA8PSAwLgorICAgIC8vICAg
MCA8PSBmcmFjdGlvbmFscyAqIDJeZXhwb25lbnQgPCAxCisgICAgLy8gICBUaGUgYnVmZmVyIGhv
bGRzIHRoZSByZXN1bHQuCisgICAgLy8gVGhlIGZ1bmN0aW9uIHdpbGwgcm91bmQgaXRzIHJlc3Vs
dC4gRHVyaW5nIHRoZSByb3VuZGluZy1wcm9jZXNzIGRpZ2l0cyBub3QKKyAgICAvLyBnZW5lcmF0
ZWQgYnkgdGhpcyBmdW5jdGlvbiBtaWdodCBiZSB1cGRhdGVkLCBhbmQgdGhlIGRlY2ltYWwtcG9p
bnQgdmFyaWFibGUKKyAgICAvLyBtaWdodCBiZSB1cGRhdGVkLiBJZiB0aGlzIGZ1bmN0aW9uIGdl
bmVyYXRlcyB0aGUgZGlnaXRzIDk5IGFuZCB0aGUgYnVmZmVyCisgICAgLy8gYWxyZWFkeSBjb250
YWluZWQgIjE5OSIgKHRodXMgeWllbGRpbmcgYSBidWZmZXIgb2YgIjE5OTk5IikgdGhlbiBhCisg
ICAgLy8gcm91bmRpbmctdXAgd2lsbCBjaGFuZ2UgdGhlIGNvbnRlbnRzIG9mIHRoZSBidWZmZXIg
dG8gIjIwMDAwIi4KKyAgICBzdGF0aWMgdm9pZCBGaWxsRnJhY3Rpb25hbHModWludDY0X3QgZnJh
Y3Rpb25hbHMsIGludCBleHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGZyYWN0aW9uYWxfY291bnQsIFZlY3RvcjxjaGFyPiBidWZmZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCogbGVuZ3RoLCBpbnQqIGRlY2ltYWxfcG9pbnQpIHsKKyAg
ICAgICAgQVNTRVJUKC0xMjggPD0gZXhwb25lbnQgJiYgZXhwb25lbnQgPD0gMCk7CisgICAgICAg
IC8vICdmcmFjdGlvbmFscycgaXMgYSBmaXhlZC1wb2ludCBudW1iZXIsIHdpdGggYmluYXJ5IHBv
aW50IGF0IGJpdAorICAgICAgICAvLyAoLWV4cG9uZW50KS4gSW5zaWRlIHRoZSBmdW5jdGlvbiB0
aGUgbm9uLWNvbnZlcnRlZCByZW1haW5kZXIgb2YgZnJhY3Rpb25hbHMKKyAgICAgICAgLy8gaXMg
YSBmaXhlZC1wb2ludCBudW1iZXIsIHdpdGggYmluYXJ5IHBvaW50IGF0IGJpdCAncG9pbnQnLgor
ICAgICAgICBpZiAoLWV4cG9uZW50IDw9IDY0KSB7CisgICAgICAgICAgICAvLyBPbmUgNjQgYml0
IG51bWJlciBpcyBzdWZmaWNpZW50LgorICAgICAgICAgICAgQVNTRVJUKGZyYWN0aW9uYWxzID4+
IDU2ID09IDApOworICAgICAgICAgICAgaW50IHBvaW50ID0gLWV4cG9uZW50OworICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFjdGlvbmFsX2NvdW50OyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoZnJhY3Rpb25hbHMgPT0gMCkgYnJlYWs7CisgICAgICAgICAgICAgICAgLy8g
SW5zdGVhZCBvZiBtdWx0aXBseWluZyBieSAxMCB3ZSBtdWx0aXBseSBieSA1IGFuZCBhZGp1c3Qg
dGhlIHBvaW50CisgICAgICAgICAgICAgICAgLy8gbG9jYXRpb24uIFRoaXMgd2F5IHRoZSBmcmFj
dGlvbmFscyB2YXJpYWJsZSB3aWxsIG5vdCBvdmVyZmxvdy4KKyAgICAgICAgICAgICAgICAvLyBJ
bnZhcmlhbnQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbG9vcDogZnJhY3Rpb25hbHMgPCAyXnBv
aW50LgorICAgICAgICAgICAgICAgIC8vIEluaXRpYWxseSB3ZSBoYXZlOiBwb2ludCA8PSA2NCBh
bmQgZnJhY3Rpb25hbHMgPCAyXjU2CisgICAgICAgICAgICAgICAgLy8gQWZ0ZXIgZWFjaCBpdGVy
YXRpb24gdGhlIHBvaW50IGlzIGRlY3JlbWVudGVkIGJ5IG9uZS4KKyAgICAgICAgICAgICAgICAv
LyBOb3RlIHRoYXQgNV4zID0gMTI1IDwgMTI4ID0gMl43LgorICAgICAgICAgICAgICAgIC8vIFRo
ZXJlZm9yZSB0aHJlZSBpdGVyYXRpb25zIG9mIHRoaXMgbG9vcCB3aWxsIG5vdCBvdmVyZmxvdyBm
cmFjdGlvbmFscworICAgICAgICAgICAgICAgIC8vIChldmVuIHdpdGhvdXQgdGhlIHN1YnRyYWN0
aW9uIGF0IHRoZSBlbmQgb2YgdGhlIGxvb3AgYm9keSkuIEF0IHRoaXMKKyAgICAgICAgICAgICAg
ICAvLyB0aW1lIHBvaW50IHdpbGwgc2F0aXNmeSBwb2ludCA8PSA2MSBhbmQgdGhlcmVmb3JlIGZy
YWN0aW9uYWxzIDwgMl5wb2ludAorICAgICAgICAgICAgICAgIC8vIGFuZCBhbnkgZnVydGhlciBt
dWx0aXBsaWNhdGlvbiBvZiBmcmFjdGlvbmFscyBieSA1IHdpbGwgbm90IG92ZXJmbG93LgorICAg
ICAgICAgICAgICAgIGZyYWN0aW9uYWxzICo9IDU7CisgICAgICAgICAgICAgICAgcG9pbnQtLTsK
KyAgICAgICAgICAgICAgICBpbnQgZGlnaXQgPSBzdGF0aWNfY2FzdDxpbnQ+KGZyYWN0aW9uYWxz
ID4+IHBvaW50KTsKKyAgICAgICAgICAgICAgICBidWZmZXJbKmxlbmd0aF0gPSAnMCcgKyBkaWdp
dDsKKyAgICAgICAgICAgICAgICAoKmxlbmd0aCkrKzsKKyAgICAgICAgICAgICAgICBmcmFjdGlv
bmFscyAtPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oZGlnaXQpIDw8IHBvaW50OworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgLy8gSWYgdGhlIGZpcnN0IGJpdCBhZnRlciB0aGUgcG9pbnQgaXMg
c2V0IHdlIGhhdmUgdG8gcm91bmQgdXAuCisgICAgICAgICAgICBpZiAoKChmcmFjdGlvbmFscyA+
PiAocG9pbnQgLSAxKSkgJiAxKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgUm91bmRVcChidWZm
ZXIsIGxlbmd0aCwgZGVjaW1hbF9wb2ludCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSB7ICAvLyBXZSBuZWVkIDEyOCBiaXRzLgorICAgICAgICAgICAgQVNTRVJUKDY0IDwgLWV4cG9u
ZW50ICYmIC1leHBvbmVudCA8PSAxMjgpOworICAgICAgICAgICAgVUludDEyOCBmcmFjdGlvbmFs
czEyOCA9IFVJbnQxMjgoZnJhY3Rpb25hbHMsIDApOworICAgICAgICAgICAgZnJhY3Rpb25hbHMx
MjguU2hpZnQoLWV4cG9uZW50IC0gNjQpOworICAgICAgICAgICAgaW50IHBvaW50ID0gMTI4Owor
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFjdGlvbmFsX2NvdW50OyArK2kpIHsK
KyAgICAgICAgICAgICAgICBpZiAoZnJhY3Rpb25hbHMxMjguSXNaZXJvKCkpIGJyZWFrOworICAg
ICAgICAgICAgICAgIC8vIEFzIGJlZm9yZTogaW5zdGVhZCBvZiBtdWx0aXBseWluZyBieSAxMCB3
ZSBtdWx0aXBseSBieSA1IGFuZCBhZGp1c3QgdGhlCisgICAgICAgICAgICAgICAgLy8gcG9pbnQg
bG9jYXRpb24uCisgICAgICAgICAgICAgICAgLy8gVGhpcyBtdWx0aXBsaWNhdGlvbiB3aWxsIG5v
dCBvdmVyZmxvdyBmb3IgdGhlIHNhbWUgcmVhc29ucyBhcyBiZWZvcmUuCisgICAgICAgICAgICAg
ICAgZnJhY3Rpb25hbHMxMjguTXVsdGlwbHkoNSk7CisgICAgICAgICAgICAgICAgcG9pbnQtLTsK
KyAgICAgICAgICAgICAgICBpbnQgZGlnaXQgPSBmcmFjdGlvbmFsczEyOC5EaXZNb2RQb3dlck9m
Mihwb2ludCk7CisgICAgICAgICAgICAgICAgYnVmZmVyWypsZW5ndGhdID0gJzAnICsgZGlnaXQ7
CisgICAgICAgICAgICAgICAgKCpsZW5ndGgpKys7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoZnJhY3Rpb25hbHMxMjguQml0QXQocG9pbnQgLSAxKSA9PSAxKSB7CisgICAgICAgICAg
ICAgICAgUm91bmRVcChidWZmZXIsIGxlbmd0aCwgZGVjaW1hbF9wb2ludCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgLy8gUmVtb3ZlcyBsZWFkaW5n
IGFuZCB0cmFpbGluZyB6ZXJvcy4KKyAgICAvLyBJZiBsZWFkaW5nIHplcm9zIGFyZSByZW1vdmVk
IHRoZW4gdGhlIGRlY2ltYWwgcG9pbnQgcG9zaXRpb24gaXMgYWRqdXN0ZWQuCisgICAgc3RhdGlj
IHZvaWQgVHJpbVplcm9zKFZlY3RvcjxjaGFyPiBidWZmZXIsIGludCogbGVuZ3RoLCBpbnQqIGRl
Y2ltYWxfcG9pbnQpIHsKKyAgICAgICAgd2hpbGUgKCpsZW5ndGggPiAwICYmIGJ1ZmZlclsoKmxl
bmd0aCkgLSAxXSA9PSAnMCcpIHsKKyAgICAgICAgICAgICgqbGVuZ3RoKS0tOworICAgICAgICB9
CisgICAgICAgIGludCBmaXJzdF9ub25femVybyA9IDA7CisgICAgICAgIHdoaWxlIChmaXJzdF9u
b25femVybyA8ICpsZW5ndGggJiYgYnVmZmVyW2ZpcnN0X25vbl96ZXJvXSA9PSAnMCcpIHsKKyAg
ICAgICAgICAgIGZpcnN0X25vbl96ZXJvKys7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZpcnN0
X25vbl96ZXJvICE9IDApIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSBmaXJzdF9ub25femVy
bzsgaSA8ICpsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIGJ1ZmZlcltpIC0gZmlyc3Rf
bm9uX3plcm9dID0gYnVmZmVyW2ldOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKmxlbmd0
aCAtPSBmaXJzdF9ub25femVybzsKKyAgICAgICAgICAgICpkZWNpbWFsX3BvaW50IC09IGZpcnN0
X25vbl96ZXJvOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIGJvb2wgRmFzdEZp
eGVkRHRvYShkb3VibGUgdiwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IGZyYWN0aW9uYWxf
Y291bnQsCisgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgIGludCogbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICBp
bnQqIGRlY2ltYWxfcG9pbnQpIHsKKyAgICAgICAgY29uc3QgdWludDMyX3Qga01heFVJbnQzMiA9
IDB4RkZGRkZGRkY7CisgICAgICAgIHVpbnQ2NF90IHNpZ25pZmljYW5kID0gRG91YmxlKHYpLlNp
Z25pZmljYW5kKCk7CisgICAgICAgIGludCBleHBvbmVudCA9IERvdWJsZSh2KS5FeHBvbmVudCgp
OworICAgICAgICAvLyB2ID0gc2lnbmlmaWNhbmQgKiAyXmV4cG9uZW50ICh3aXRoIHNpZ25pZmlj
YW5kIGEgNTNiaXQgaW50ZWdlcikuCisgICAgICAgIC8vIElmIHRoZSBleHBvbmVudCBpcyBsYXJn
ZXIgdGhhbiAyMCAoaS5lLiB3ZSBtYXkgaGF2ZSBhIDczYml0IG51bWJlcikgdGhlbiB3ZQorICAg
ICAgICAvLyBkb24ndCBrbm93IGhvdyB0byBjb21wdXRlIHRoZSByZXByZXNlbnRhdGlvbi4gMl43
MyB+PSA5LjUqMTBeMjEuCisgICAgICAgIC8vIElmIG5lY2Vzc2FyeSB0aGlzIGxpbWl0IGNvdWxk
IHByb2JhYmx5IGJlIGluY3JlYXNlZCwgYnV0IHdlIGRvbid0IG5lZWQKKyAgICAgICAgLy8gbW9y
ZS4KKyAgICAgICAgaWYgKGV4cG9uZW50ID4gMjApIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYg
KGZyYWN0aW9uYWxfY291bnQgPiAyMCkgcmV0dXJuIGZhbHNlOworICAgICAgICAqbGVuZ3RoID0g
MDsKKyAgICAgICAgLy8gQXQgbW9zdCBrRG91YmxlU2lnbmlmaWNhbmRTaXplIGJpdHMgb2YgdGhl
IHNpZ25pZmljYW5kIGFyZSBub24temVyby4KKyAgICAgICAgLy8gR2l2ZW4gYSA2NCBiaXQgaW50
ZWdlciB3ZSBoYXZlIDExIDBzIGZvbGxvd2VkIGJ5IDUzIHBvdGVudGlhbGx5IG5vbi16ZXJvCisg
ICAgICAgIC8vIGJpdHM6ICAwLi4xMSouLjB4eHguLjUzKi4ueHgKKyAgICAgICAgaWYgKGV4cG9u
ZW50ICsga0RvdWJsZVNpZ25pZmljYW5kU2l6ZSA+IDY0KSB7CisgICAgICAgICAgICAvLyBUaGUg
ZXhwb25lbnQgbXVzdCBiZSA+IDExLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFdl
IGtub3cgdGhhdCB2ID0gc2lnbmlmaWNhbmQgKiAyXmV4cG9uZW50LgorICAgICAgICAgICAgLy8g
QW5kIHRoZSBleHBvbmVudCA+IDExLgorICAgICAgICAgICAgLy8gV2Ugc2ltcGxpZnkgdGhlIHRh
c2sgYnkgZGl2aWRpbmcgdiBieSAxMF4xNy4KKyAgICAgICAgICAgIC8vIFRoZSBxdW90aWVudCBk
ZWxpdmVycyB0aGUgZmlyc3QgZGlnaXRzLCBhbmQgdGhlIHJlbWFpbmRlciBmaXRzIGludG8gYSA2
NAorICAgICAgICAgICAgLy8gYml0IG51bWJlci4KKyAgICAgICAgICAgIC8vIERpdmlkaW5nIGJ5
IDEwXjE3IGlzIGVxdWl2YWxlbnQgdG8gZGl2aWRpbmcgYnkgNV4xNyoyXjE3LgorICAgICAgICAg
ICAgY29uc3QgdWludDY0X3Qga0ZpdmUxNyA9IFVJTlQ2NF8yUEFSVF9DKDB4QjEsIEEyQkMyRUM1
KTsgIC8vIDVeMTcKKyAgICAgICAgICAgIHVpbnQ2NF90IGRpdmlzb3IgPSBrRml2ZTE3OworICAg
ICAgICAgICAgaW50IGRpdmlzb3JfcG93ZXIgPSAxNzsKKyAgICAgICAgICAgIHVpbnQ2NF90IGRp
dmlkZW5kID0gc2lnbmlmaWNhbmQ7CisgICAgICAgICAgICB1aW50MzJfdCBxdW90aWVudDsKKyAg
ICAgICAgICAgIHVpbnQ2NF90IHJlbWFpbmRlcjsKKyAgICAgICAgICAgIC8vIExldCB2ID0gZiAq
IDJeZSB3aXRoIGYgPT0gc2lnbmlmaWNhbmQgYW5kIGUgPT0gZXhwb25lbnQuCisgICAgICAgICAg
ICAvLyBUaGVuIG5lZWQgcSAocXVvdGllbnQpIGFuZCByIChyZW1haW5kZXIpIGFzIGZvbGxvd3M6
CisgICAgICAgICAgICAvLyAgIHYgICAgICAgICAgICA9IHEgKiAxMF4xNyAgICAgICArIHIKKyAg
ICAgICAgICAgIC8vICAgZiAqIDJeZSAgICAgID0gcSAqIDEwXjE3ICAgICAgICsgcgorICAgICAg
ICAgICAgLy8gICBmICogMl5lICAgICAgPSBxICogNV4xNyAqIDJeMTcgKyByCisgICAgICAgICAg
ICAvLyBJZiBlID4gMTcgdGhlbgorICAgICAgICAgICAgLy8gICBmICogMl4oZS0xNykgPSBxICog
NV4xNyAgICAgICAgKyByLzJeMTcKKyAgICAgICAgICAgIC8vIGVsc2UKKyAgICAgICAgICAgIC8v
ICAgZiAgPSBxICogNV4xNyAqIDJeKDE3LWUpICsgci8yXmUKKyAgICAgICAgICAgIGlmIChleHBv
bmVudCA+IGRpdmlzb3JfcG93ZXIpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBvbmx5IGFsbG93
IGV4cG9uZW50cyBvZiB1cCB0byAyMCBhbmQgdGhlcmVmb3JlICgxNyAtIGUpIDw9IDMKKyAgICAg
ICAgICAgICAgICBkaXZpZGVuZCA8PD0gZXhwb25lbnQgLSBkaXZpc29yX3Bvd2VyOworICAgICAg
ICAgICAgICAgIHF1b3RpZW50ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGRpdmlkZW5kIC8gZGl2
aXNvcik7CisgICAgICAgICAgICAgICAgcmVtYWluZGVyID0gKGRpdmlkZW5kICUgZGl2aXNvcikg
PDwgZGl2aXNvcl9wb3dlcjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ZGl2aXNvciA8PD0gZGl2aXNvcl9wb3dlciAtIGV4cG9uZW50OworICAgICAgICAgICAgICAgIHF1
b3RpZW50ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGRpdmlkZW5kIC8gZGl2aXNvcik7CisgICAg
ICAgICAgICAgICAgcmVtYWluZGVyID0gKGRpdmlkZW5kICUgZGl2aXNvcikgPDwgZXhwb25lbnQ7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGaWxsRGlnaXRzMzIocXVvdGllbnQsIGJ1ZmZl
ciwgbGVuZ3RoKTsKKyAgICAgICAgICAgIEZpbGxEaWdpdHM2NEZpeGVkTGVuZ3RoKHJlbWFpbmRl
ciwgZGl2aXNvcl9wb3dlciwgYnVmZmVyLCBsZW5ndGgpOworICAgICAgICAgICAgKmRlY2ltYWxf
cG9pbnQgPSAqbGVuZ3RoOworICAgICAgICB9IGVsc2UgaWYgKGV4cG9uZW50ID49IDApIHsKKyAg
ICAgICAgICAgIC8vIDAgPD0gZXhwb25lbnQgPD0gMTEKKyAgICAgICAgICAgIHNpZ25pZmljYW5k
IDw8PSBleHBvbmVudDsKKyAgICAgICAgICAgIEZpbGxEaWdpdHM2NChzaWduaWZpY2FuZCwgYnVm
ZmVyLCBsZW5ndGgpOworICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSAqbGVuZ3RoOworICAg
ICAgICB9IGVsc2UgaWYgKGV4cG9uZW50ID4gLWtEb3VibGVTaWduaWZpY2FuZFNpemUpIHsKKyAg
ICAgICAgICAgIC8vIFdlIGhhdmUgdG8gY3V0IHRoZSBudW1iZXIuCisgICAgICAgICAgICB1aW50
NjRfdCBpbnRlZ3JhbHMgPSBzaWduaWZpY2FuZCA+PiAtZXhwb25lbnQ7CisgICAgICAgICAgICB1
aW50NjRfdCBmcmFjdGlvbmFscyA9IHNpZ25pZmljYW5kIC0gKGludGVncmFscyA8PCAtZXhwb25l
bnQpOworICAgICAgICAgICAgaWYgKGludGVncmFscyA+IGtNYXhVSW50MzIpIHsKKyAgICAgICAg
ICAgICAgICBGaWxsRGlnaXRzNjQoaW50ZWdyYWxzLCBidWZmZXIsIGxlbmd0aCk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEZpbGxEaWdpdHMzMihzdGF0aWNfY2FzdDx1
aW50MzJfdD4oaW50ZWdyYWxzKSwgYnVmZmVyLCBsZW5ndGgpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSAqbGVuZ3RoOworICAgICAgICAgICAgRmlsbEZyYWN0
aW9uYWxzKGZyYWN0aW9uYWxzLCBleHBvbmVudCwgZnJhY3Rpb25hbF9jb3VudCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGxlbmd0aCwgZGVjaW1hbF9wb2ludCk7CisgICAg
ICAgIH0gZWxzZSBpZiAoZXhwb25lbnQgPCAtMTI4KSB7CisgICAgICAgICAgICAvLyBUaGlzIGNv
bmZpZ3VyYXRpb24gKHdpdGggYXQgbW9zdCAyMCBkaWdpdHMpIG1lYW5zIHRoYXQgYWxsIGRpZ2l0
cyBtdXN0IGJlCisgICAgICAgICAgICAvLyAwLgorICAgICAgICAgICAgQVNTRVJUKGZyYWN0aW9u
YWxfY291bnQgPD0gMjApOworICAgICAgICAgICAgYnVmZmVyWzBdID0gJ1wwJzsKKyAgICAgICAg
ICAgICpsZW5ndGggPSAwOworICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSAtZnJhY3Rpb25h
bF9jb3VudDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICpkZWNpbWFsX3BvaW50ID0g
MDsKKyAgICAgICAgICAgIEZpbGxGcmFjdGlvbmFscyhzaWduaWZpY2FuZCwgZXhwb25lbnQsIGZy
YWN0aW9uYWxfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBsZW5n
dGgsIGRlY2ltYWxfcG9pbnQpOworICAgICAgICB9CisgICAgICAgIFRyaW1aZXJvcyhidWZmZXIs
IGxlbmd0aCwgZGVjaW1hbF9wb2ludCk7CisgICAgICAgIGJ1ZmZlclsqbGVuZ3RoXSA9ICdcMCc7
CisgICAgICAgIGlmICgoKmxlbmd0aCkgPT0gMCkgeworICAgICAgICAgICAgLy8gVGhlIHN0cmlu
ZyBpcyBlbXB0eSBhbmQgdGhlIGRlY2ltYWxfcG9pbnQgdGh1cyBoYXMgbm8gaW1wb3J0YW5jZS4g
TWltaWNrCisgICAgICAgICAgICAvLyBHYXkncyBkdG9hIGFuZCBhbmQgc2V0IGl0IHRvIC1mcmFj
dGlvbmFsX2NvdW50LgorICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSAtZnJhY3Rpb25hbF9j
b3VudDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCit9ICAv
LyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvZHRvYS9maXhlZC1kdG9hLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L2R0b2EvZml4ZWQtZHRvYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZkODJhZTNmMzA1MmE0ZTY0ZjNlNWRlYjk4
ZTc5MzAwMWRlMzAyZTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL2R0b2EvZml4ZWQtZHRvYS5oCkBAIC0wLDAgKzEsNTYgQEAKKy8vIENvcHlyaWdodCAyMDEw
IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8g
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworI2lmbmRlZiBET1VCTEVfQ09OVkVSU0lPTl9GSVhFRF9EVE9BX0hfCisjZGVm
aW5lIERPVUJMRV9DT05WRVJTSU9OX0ZJWEVEX0RUT0FfSF8KKworI2luY2x1ZGUgInV0aWxzLmgi
CisKK25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgLy8gUHJvZHVjZXMg
ZGlnaXRzIG5lY2Vzc2FyeSB0byBwcmludCBhIGdpdmVuIG51bWJlciB3aXRoCisgICAgLy8gJ2Zy
YWN0aW9uYWxfY291bnQnIGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludC4KKyAgICAvLyBU
aGUgYnVmZmVyIG11c3QgYmUgYmlnIGVub3VnaCB0byBob2xkIHRoZSByZXN1bHQgcGx1cyBvbmUg
dGVybWluYXRpbmcgbnVsbAorICAgIC8vIGNoYXJhY3Rlci4KKyAgICAvLworICAgIC8vIFRoZSBw
cm9kdWNlZCBkaWdpdHMgbWlnaHQgYmUgdG9vIHNob3J0IGluIHdoaWNoIGNhc2UgdGhlIGNhbGxl
ciBoYXMgdG8gZmlsbAorICAgIC8vIHRoZSBnYXBzIHdpdGggJzAncy4KKyAgICAvLyBFeGFtcGxl
OiBGYXN0Rml4ZWREdG9hKDAuMDAxLCA1LCAuLi4pIGlzIGFsbG93ZWQgdG8gcmV0dXJuIGJ1ZmZl
ciA9ICIxIiwgYW5kCisgICAgLy8gZGVjaW1hbF9wb2ludCA9IC0yLgorICAgIC8vIEhhbGZ3YXkg
Y2FzZXMgYXJlIHJvdW5kZWQgdG93YXJkcyArLy1JbmZpbml0eSAoYXdheSBmcm9tIDApLiBUaGUg
Y2FsbAorICAgIC8vIEZhc3RGaXhlZER0b2EoMC4xNSwgMiwgLi4uKSB0aHVzIHJldHVybnMgYnVm
ZmVyID0gIjIiLCBkZWNpbWFsX3BvaW50ID0gMC4KKyAgICAvLyBUaGUgcmV0dXJuZWQgYnVmZmVy
IG1heSBjb250YWluIGRpZ2l0cyB0aGF0IHdvdWxkIGJlIHRydW5jYXRlZCBmcm9tIHRoZQorICAg
IC8vIHNob3J0ZXN0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbnB1dC4KKyAgICAvLworICAgIC8v
IFRoaXMgbWV0aG9kIG9ubHkgd29ya3MgZm9yIHNvbWUgcGFyYW1ldGVycy4gSWYgaXQgY2FuJ3Qg
aGFuZGxlIHRoZSBpbnB1dCBpdAorICAgIC8vIHJldHVybnMgZmFsc2UuIFRoZSBvdXRwdXQgaXMg
bnVsbC10ZXJtaW5hdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIHN1Y2NlZWRzLgorICAgIGJvb2wgRmFz
dEZpeGVkRHRvYShkb3VibGUgdiwgaW50IGZyYWN0aW9uYWxfY291bnQsCisgICAgICAgICAgICAg
ICAgICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXIsIGludCogbGVuZ3RoLCBpbnQqIGRlY2ltYWxf
cG9pbnQpOworICAgIAorfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCisKKyNlbmRp
ZiAgLy8gRE9VQkxFX0NPTlZFUlNJT05fRklYRURfRFRPQV9IXwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL3N0cnRvZC5jYyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvZHRvYS9zdHJ0b2QuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjRmZTExMWEwYTE1OGZkMDBjMjMwMWVh
N2I3OGM5MTA1NTc3MmVhMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvZHRvYS9zdHJ0b2QuY2MKQEAgLTAsMCArMSw0NDEgQEAKKy8vIENvcHlyaWdodCAyMDEw
IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8g
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorCisj
aW5jbHVkZSAic3RydG9kLmgiCisjaW5jbHVkZSAiYmlnbnVtLmgiCisjaW5jbHVkZSAiY2FjaGVk
LXBvd2Vycy5oIgorI2luY2x1ZGUgImRvdWJsZS5oIgorCituYW1lc3BhY2UgZG91YmxlX2NvbnZl
cnNpb24geworICAgIAorICAgIC8vIDJeNTMgPSA5MDA3MTk5MjU0NzQwOTkyLgorICAgIC8vIEFu
eSBpbnRlZ2VyIHdpdGggYXQgbW9zdCAxNSBkZWNpbWFsIGRpZ2l0cyB3aWxsIGhlbmNlIGZpdCBp
bnRvIGEgZG91YmxlCisgICAgLy8gKHdoaWNoIGhhcyBhIDUzYml0IHNpZ25pZmljYW5kKSB3aXRo
b3V0IGxvc3Mgb2YgcHJlY2lzaW9uLgorICAgIHN0YXRpYyBjb25zdCBpbnQga01heEV4YWN0RG91
YmxlSW50ZWdlckRlY2ltYWxEaWdpdHMgPSAxNTsKKyAgICAvLyAyXjY0ID0gMTg0NDY3NDQwNzM3
MDk1NTE2MTYgPiAxMF4xOQorICAgIHN0YXRpYyBjb25zdCBpbnQga01heFVpbnQ2NERlY2ltYWxE
aWdpdHMgPSAxOTsKKyAgICAKKyAgICAvLyBNYXggZG91YmxlOiAxLjc5NzY5MzEzNDg2MjMxNTcg
eCAxMF4zMDgKKyAgICAvLyBNaW4gbm9uLXplcm8gZG91YmxlOiA0Ljk0MDY1NjQ1ODQxMjQ2NTQg
eCAxMF4tMzI0CisgICAgLy8gQW55IHggPj0gMTBeMzA5IGlzIGludGVycHJldGVkIGFzICtpbmZp
bml0eS4KKyAgICAvLyBBbnkgeCA8PSAxMF4tMzI0IGlzIGludGVycHJldGVkIGFzIDAuCisgICAg
Ly8gTm90ZSB0aGF0IDIuNWUtMzI0IChkZXNwaXRlIGJlaW5nIHNtYWxsZXIgdGhhbiB0aGUgbWlu
IGRvdWJsZSkgd2lsbCBiZSByZWFkCisgICAgLy8gYXMgbm9uLXplcm8gKGVxdWFsIHRvIHRoZSBt
aW4gbm9uLXplcm8gZG91YmxlKS4KKyAgICBzdGF0aWMgY29uc3QgaW50IGtNYXhEZWNpbWFsUG93
ZXIgPSAzMDk7CisgICAgc3RhdGljIGNvbnN0IGludCBrTWluRGVjaW1hbFBvd2VyID0gLTMyNDsK
KyAgICAKKyAgICAvLyAyXjY0ID0gMTg0NDY3NDQwNzM3MDk1NTE2MTYKKyAgICBzdGF0aWMgY29u
c3QgdWludDY0X3Qga01heFVpbnQ2NCA9IFVJTlQ2NF8yUEFSVF9DKDB4RkZGRkZGRkYsIEZGRkZG
RkZGKTsKKyAgICAKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgZG91YmxlIGV4YWN0X3Bvd2Vyc19v
Zl90ZW5bXSA9IHsKKyAgICAgICAgMS4wLCAgLy8gMTBeMAorICAgICAgICAxMC4wLAorICAgICAg
ICAxMDAuMCwKKyAgICAgICAgMTAwMC4wLAorICAgICAgICAxMDAwMC4wLAorICAgICAgICAxMDAw
MDAuMCwKKyAgICAgICAgMTAwMDAwMC4wLAorICAgICAgICAxMDAwMDAwMC4wLAorICAgICAgICAx
MDAwMDAwMDAuMCwKKyAgICAgICAgMTAwMDAwMDAwMC4wLAorICAgICAgICAxMDAwMDAwMDAwMC4w
LCAgLy8gMTBeMTAKKyAgICAgICAgMTAwMDAwMDAwMDAwLjAsCisgICAgICAgIDEwMDAwMDAwMDAw
MDAuMCwKKyAgICAgICAgMTAwMDAwMDAwMDAwMDAuMCwKKyAgICAgICAgMTAwMDAwMDAwMDAwMDAw
LjAsCisgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAuMCwKKyAgICAgICAgMTAwMDAwMDAwMDAwMDAw
MDAuMCwKKyAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwLjAsCisgICAgICAgIDEwMDAwMDAwMDAw
MDAwMDAwMDAuMCwKKyAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAuMCwKKyAgICAgICAgMTAw
MDAwMDAwMDAwMDAwMDAwMDAwLjAsICAvLyAxMF4yMAorICAgICAgICAxMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLjAsCisgICAgICAgIC8vIDEwXjIyID0gMHgyMWUxOWUwYzliYWIyNDAwMDAwID0gMHg4
Nzg2NzgzMjZlYWM5ICogMl4yMgorICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4wCisg
ICAgfTsKKyAgICBzdGF0aWMgY29uc3QgaW50IGtFeGFjdFBvd2Vyc09mVGVuU2l6ZSA9IEFSUkFZ
X1NJWkUoZXhhY3RfcG93ZXJzX29mX3Rlbik7CisgICAgCisgICAgLy8gTWF4aW11bSBudW1iZXIg
b2Ygc2lnbmlmaWNhbnQgZGlnaXRzIGluIHRoZSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uLgorICAg
IC8vIEluIGZhY3QgdGhlIHZhbHVlIGlzIDc3MiAoc2VlIGNvbnZlcnNpb25zLmNjKSwgYnV0IHRv
IGdpdmUgdXMgc29tZSBtYXJnaW4KKyAgICAvLyB3ZSByb3VuZCB1cCB0byA3ODAuCisgICAgc3Rh
dGljIGNvbnN0IGludCBrTWF4U2lnbmlmaWNhbnREZWNpbWFsRGlnaXRzID0gNzgwOworICAgIAor
ICAgIHN0YXRpYyBWZWN0b3I8Y29uc3QgY2hhcj4gVHJpbUxlYWRpbmdaZXJvcyhWZWN0b3I8Y29u
c3QgY2hhcj4gYnVmZmVyKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYnVmZmVyLmxl
bmd0aCgpOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChidWZmZXJbaV0gIT0gJzAnKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlci5TdWJWZWN0b3IoaSwgYnVmZmVyLmxlbmd0aCgpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gVmVjdG9yPGNvbnN0IGNo
YXI+KGJ1ZmZlci5zdGFydCgpLCAwKTsKKyAgICB9CisgICAgCisgICAgCisgICAgc3RhdGljIFZl
Y3Rvcjxjb25zdCBjaGFyPiBUcmltVHJhaWxpbmdaZXJvcyhWZWN0b3I8Y29uc3QgY2hhcj4gYnVm
ZmVyKSB7CisgICAgICAgIGZvciAoaW50IGkgPSBidWZmZXIubGVuZ3RoKCkgLSAxOyBpID49IDA7
IC0taSkgeworICAgICAgICAgICAgaWYgKGJ1ZmZlcltpXSAhPSAnMCcpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gYnVmZmVyLlN1YlZlY3RvcigwLCBpICsgMSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFZlY3Rvcjxjb25zdCBjaGFyPihidWZmZXIuc3RhcnQo
KSwgMCk7CisgICAgfQorICAgIAorICAgIAorICAgIHN0YXRpYyB2b2lkIFRyaW1Ub01heFNpZ25p
ZmljYW50RGlnaXRzKFZlY3Rvcjxjb25zdCBjaGFyPiBidWZmZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV4cG9uZW50LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIHNpZ25pZmljYW50X2J1ZmZlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHNpZ25pZmljYW50
X2V4cG9uZW50KSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwga01heFNpZ25pZmljYW50
RGVjaW1hbERpZ2l0cyAtIDE7ICsraSkgeworICAgICAgICAgICAgc2lnbmlmaWNhbnRfYnVmZmVy
W2ldID0gYnVmZmVyW2ldOworICAgICAgICB9CisgICAgICAgIC8vIFRoZSBpbnB1dCBidWZmZXIg
aGFzIGJlZW4gdHJpbW1lZC4gVGhlcmVmb3JlIHRoZSBsYXN0IGRpZ2l0IG11c3QgYmUKKyAgICAg
ICAgLy8gZGlmZmVyZW50IGZyb20gJzAnLgorICAgICAgICBBU1NFUlQoYnVmZmVyW2J1ZmZlci5s
ZW5ndGgoKSAtIDFdICE9ICcwJyk7CisgICAgICAgIC8vIFNldCB0aGUgbGFzdCBkaWdpdCB0byBi
ZSBub24temVyby4gVGhpcyBpcyBzdWZmaWNpZW50IHRvIGd1YXJhbnRlZQorICAgICAgICAvLyBj
b3JyZWN0IHJvdW5kaW5nLgorICAgICAgICBzaWduaWZpY2FudF9idWZmZXJba01heFNpZ25pZmlj
YW50RGVjaW1hbERpZ2l0cyAtIDFdID0gJzEnOworICAgICAgICAqc2lnbmlmaWNhbnRfZXhwb25l
bnQgPQorICAgICAgICBleHBvbmVudCArIChidWZmZXIubGVuZ3RoKCkgLSBrTWF4U2lnbmlmaWNh
bnREZWNpbWFsRGlnaXRzKTsKKyAgICB9CisgICAgCisgICAgLy8gUmVhZHMgZGlnaXRzIGZyb20g
dGhlIGJ1ZmZlciBhbmQgY29udmVydHMgdGhlbSB0byBhIHVpbnQ2NC4KKyAgICAvLyBSZWFkcyBp
biBhcyBtYW55IGRpZ2l0cyBhcyBmaXQgaW50byBhIHVpbnQ2NC4KKyAgICAvLyBXaGVuIHRoZSBz
dHJpbmcgc3RhcnRzIHdpdGggIjE4NDQ2NzQ0MDczNzA5NTUxNjEiIG5vIGZ1cnRoZXIgZGlnaXQg
aXMgcmVhZC4KKyAgICAvLyBTaW5jZSAyXjY0ID0gMTg0NDY3NDQwNzM3MDk1NTE2MTYgaXQgd291
bGQgc3RpbGwgYmUgcG9zc2libGUgcmVhZCBhbm90aGVyCisgICAgLy8gZGlnaXQgaWYgaXQgd2Fz
IGxlc3Mgb3IgZXF1YWwgdGhhbiA2LCBidXQgdGhpcyB3b3VsZCBjb21wbGljYXRlIHRoZSBjb2Rl
LgorICAgIHN0YXRpYyB1aW50NjRfdCBSZWFkVWludDY0KFZlY3Rvcjxjb25zdCBjaGFyPiBidWZm
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBudW1iZXJfb2ZfcmVhZF9k
aWdpdHMpIHsKKyAgICAgICAgdWludDY0X3QgcmVzdWx0ID0gMDsKKyAgICAgICAgaW50IGkgPSAw
OworICAgICAgICB3aGlsZSAoaSA8IGJ1ZmZlci5sZW5ndGgoKSAmJiByZXN1bHQgPD0gKGtNYXhV
aW50NjQgLyAxMCAtIDEpKSB7CisgICAgICAgICAgICBpbnQgZGlnaXQgPSBidWZmZXJbaSsrXSAt
ICcwJzsKKyAgICAgICAgICAgIEFTU0VSVCgwIDw9IGRpZ2l0ICYmIGRpZ2l0IDw9IDkpOworICAg
ICAgICAgICAgcmVzdWx0ID0gMTAgKiByZXN1bHQgKyBkaWdpdDsKKyAgICAgICAgfQorICAgICAg
ICAqbnVtYmVyX29mX3JlYWRfZGlnaXRzID0gaTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisgICAgCisgICAgCisgICAgLy8gUmVhZHMgYSBEaXlGcCBmcm9tIHRoZSBidWZmZXIuCisg
ICAgLy8gVGhlIHJldHVybmVkIERpeUZwIGlzIG5vdCBuZWNlc3NhcmlseSBub3JtYWxpemVkLgor
ICAgIC8vIElmIHJlbWFpbmluZ19kZWNpbWFscyBpcyB6ZXJvIHRoZW4gdGhlIHJldHVybmVkIERp
eUZwIGlzIGFjY3VyYXRlLgorICAgIC8vIE90aGVyd2lzZSBpdCBoYXMgYmVlbiByb3VuZGVkIGFu
ZCBoYXMgZXJyb3Igb2YgYXQgbW9zdCAxLzIgdWxwLgorICAgIHN0YXRpYyB2b2lkIFJlYWREaXlG
cChWZWN0b3I8Y29uc3QgY2hhcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBE
aXlGcCogcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHJlbWFpbmluZ19k
ZWNpbWFscykgeworICAgICAgICBpbnQgcmVhZF9kaWdpdHM7CisgICAgICAgIHVpbnQ2NF90IHNp
Z25pZmljYW5kID0gUmVhZFVpbnQ2NChidWZmZXIsICZyZWFkX2RpZ2l0cyk7CisgICAgICAgIGlm
IChidWZmZXIubGVuZ3RoKCkgPT0gcmVhZF9kaWdpdHMpIHsKKyAgICAgICAgICAgICpyZXN1bHQg
PSBEaXlGcChzaWduaWZpY2FuZCwgMCk7CisgICAgICAgICAgICAqcmVtYWluaW5nX2RlY2ltYWxz
ID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFJvdW5kIHRoZSBzaWduaWZp
Y2FuZC4KKyAgICAgICAgICAgIGlmIChidWZmZXJbcmVhZF9kaWdpdHNdID49ICc1JykgeworICAg
ICAgICAgICAgICAgIHNpZ25pZmljYW5kKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAv
LyBDb21wdXRlIHRoZSBiaW5hcnkgZXhwb25lbnQuCisgICAgICAgICAgICBpbnQgZXhwb25lbnQg
PSAwOworICAgICAgICAgICAgKnJlc3VsdCA9IERpeUZwKHNpZ25pZmljYW5kLCBleHBvbmVudCk7
CisgICAgICAgICAgICAqcmVtYWluaW5nX2RlY2ltYWxzID0gYnVmZmVyLmxlbmd0aCgpIC0gcmVh
ZF9kaWdpdHM7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgc3RhdGljIGJvb2wg
RG91YmxlU3RydG9kKFZlY3Rvcjxjb25zdCBjaGFyPiB0cmltbWVkLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRvdWJsZSogcmVzdWx0KSB7CisjaWYgIWRlZmluZWQoRE9VQkxFX0NPTlZFUlNJT05fQ09SUkVD
VF9ET1VCTEVfT1BFUkFUSU9OUykKKyAgICAgICAgLy8gT24geDg2IHRoZSBmbG9hdGluZy1wb2lu
dCBzdGFjayBjYW4gYmUgNjQgb3IgODAgYml0cyB3aWRlLiBJZiBpdCBpcworICAgICAgICAvLyA4
MCBiaXRzIHdpZGUgKGFzIGlzIHRoZSBjYXNlIG9uIExpbnV4KSB0aGVuIGRvdWJsZS1yb3VuZGlu
ZyBvY2N1cnMgYW5kIHRoZQorICAgICAgICAvLyByZXN1bHQgaXMgbm90IGFjY3VyYXRlLgorICAg
ICAgICAvLyBXZSBrbm93IHRoYXQgV2luZG93czMyIHVzZXMgNjQgYml0cyBhbmQgaXMgdGhlcmVm
b3JlIGFjY3VyYXRlLgorICAgICAgICAvLyBOb3RlIHRoYXQgdGhlIEFSTSBzaW11bGF0b3IgaXMg
Y29tcGlsZWQgZm9yIDMyYml0cy4gSXQgdGhlcmVmb3JlIGV4aGliaXRzCisgICAgICAgIC8vIHRo
ZSBzYW1lIHByb2JsZW0uCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorICAgICAgICBp
ZiAodHJpbW1lZC5sZW5ndGgoKSA8PSBrTWF4RXhhY3REb3VibGVJbnRlZ2VyRGVjaW1hbERpZ2l0
cykgeworICAgICAgICAgICAgaW50IHJlYWRfZGlnaXRzOworICAgICAgICAgICAgLy8gVGhlIHRy
aW1tZWQgaW5wdXQgZml0cyBpbnRvIGEgZG91YmxlLgorICAgICAgICAgICAgLy8gSWYgdGhlIDEw
XmV4cG9uZW50IChyZXNwLiAxMF4tZXhwb25lbnQpIGZpdHMgaW50byBhIGRvdWJsZSB0b28gdGhl
biB3ZQorICAgICAgICAgICAgLy8gY2FuIGNvbXB1dGUgdGhlIHJlc3VsdC1kb3VibGUgc2ltcGx5
IGJ5IG11bHRpcGx5aW5nIChyZXNwLiBkaXZpZGluZykgdGhlCisgICAgICAgICAgICAvLyB0d28g
bnVtYmVycy4KKyAgICAgICAgICAgIC8vIFRoaXMgaXMgcG9zc2libGUgYmVjYXVzZSBJRUVFIGd1
YXJhbnRlZXMgdGhhdCBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zCisgICAgICAgICAgICAvLyBy
ZXR1cm4gdGhlIGJlc3QgcG9zc2libGUgYXBwcm94aW1hdGlvbi4KKyAgICAgICAgICAgIGlmIChl
eHBvbmVudCA8IDAgJiYgLWV4cG9uZW50IDwga0V4YWN0UG93ZXJzT2ZUZW5TaXplKSB7CisgICAg
ICAgICAgICAgICAgLy8gMTBeLWV4cG9uZW50IGZpdHMgaW50byBhIGRvdWJsZS4KKyAgICAgICAg
ICAgICAgICAqcmVzdWx0ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihSZWFkVWludDY0KHRyaW1tZWQs
ICZyZWFkX2RpZ2l0cykpOworICAgICAgICAgICAgICAgIEFTU0VSVChyZWFkX2RpZ2l0cyA9PSB0
cmltbWVkLmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICAqcmVzdWx0IC89IGV4YWN0X3Bvd2Vy
c19vZl90ZW5bLWV4cG9uZW50XTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICgwIDw9IGV4cG9uZW50ICYmIGV4cG9uZW50IDwga0V4
YWN0UG93ZXJzT2ZUZW5TaXplKSB7CisgICAgICAgICAgICAgICAgLy8gMTBeZXhwb25lbnQgZml0
cyBpbnRvIGEgZG91YmxlLgorICAgICAgICAgICAgICAgICpyZXN1bHQgPSBzdGF0aWNfY2FzdDxk
b3VibGU+KFJlYWRVaW50NjQodHJpbW1lZCwgJnJlYWRfZGlnaXRzKSk7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKHJlYWRfZGlnaXRzID09IHRyaW1tZWQubGVuZ3RoKCkpOworICAgICAgICAgICAg
ICAgICpyZXN1bHQgKj0gZXhhY3RfcG93ZXJzX29mX3RlbltleHBvbmVudF07CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgcmVtYWlu
aW5nX2RpZ2l0cyA9CisgICAgICAgICAgICBrTWF4RXhhY3REb3VibGVJbnRlZ2VyRGVjaW1hbERp
Z2l0cyAtIHRyaW1tZWQubGVuZ3RoKCk7CisgICAgICAgICAgICBpZiAoKDAgPD0gZXhwb25lbnQp
ICYmCisgICAgICAgICAgICAgICAgKGV4cG9uZW50IC0gcmVtYWluaW5nX2RpZ2l0cyA8IGtFeGFj
dFBvd2Vyc09mVGVuU2l6ZSkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgdHJpbW1lZCBzdHJp
bmcgd2FzIHNob3J0IGFuZCB3ZSBjYW4gbXVsdGlwbHkgaXQgd2l0aAorICAgICAgICAgICAgICAg
IC8vIDEwXnJlbWFpbmluZ19kaWdpdHMuIEFzIGEgcmVzdWx0IHRoZSByZW1haW5pbmcgZXhwb25l
bnQgbm93IGZpdHMKKyAgICAgICAgICAgICAgICAvLyBpbnRvIGEgZG91YmxlIHRvby4KKyAgICAg
ICAgICAgICAgICAqcmVzdWx0ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihSZWFkVWludDY0KHRyaW1t
ZWQsICZyZWFkX2RpZ2l0cykpOworICAgICAgICAgICAgICAgIEFTU0VSVChyZWFkX2RpZ2l0cyA9
PSB0cmltbWVkLmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICAqcmVzdWx0ICo9IGV4YWN0X3Bv
d2Vyc19vZl90ZW5bcmVtYWluaW5nX2RpZ2l0c107CisgICAgICAgICAgICAgICAgKnJlc3VsdCAq
PSBleGFjdF9wb3dlcnNfb2ZfdGVuW2V4cG9uZW50IC0gcmVtYWluaW5nX2RpZ2l0c107CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBSZXR1cm5zIDEwXmV4
cG9uZW50IGFzIGFuIGV4YWN0IERpeUZwLgorICAgIC8vIFRoZSBnaXZlbiBleHBvbmVudCBtdXN0
IGJlIGluIHRoZSByYW5nZSBbMTsga0RlY2ltYWxFeHBvbmVudERpc3RhbmNlWy4KKyAgICBzdGF0
aWMgRGl5RnAgQWRqdXN0bWVudFBvd2VyT2ZUZW4oaW50IGV4cG9uZW50KSB7CisgICAgICAgIEFT
U0VSVCgwIDwgZXhwb25lbnQpOworICAgICAgICBBU1NFUlQoZXhwb25lbnQgPCBQb3dlcnNPZlRl
bkNhY2hlOjprRGVjaW1hbEV4cG9uZW50RGlzdGFuY2UpOworICAgICAgICAvLyBTaW1wbHkgaGFy
ZGNvZGUgdGhlIHJlbWFpbmluZyBwb3dlcnMgZm9yIHRoZSBnaXZlbiBkZWNpbWFsIGV4cG9uZW50
CisgICAgICAgIC8vIGRpc3RhbmNlLgorICAgICAgICBBU1NFUlQoUG93ZXJzT2ZUZW5DYWNoZTo6
a0RlY2ltYWxFeHBvbmVudERpc3RhbmNlID09IDgpOworICAgICAgICBzd2l0Y2ggKGV4cG9uZW50
KSB7CisgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBEaXlGcChVSU5UNjRfMlBBUlRfQygweGEw
MDAwMDAwLCAwMDAwMDAwMCksIC02MCk7CisgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBEaXlG
cChVSU5UNjRfMlBBUlRfQygweGM4MDAwMDAwLCAwMDAwMDAwMCksIC01Nyk7CisgICAgICAgICAg
ICBjYXNlIDM6IHJldHVybiBEaXlGcChVSU5UNjRfMlBBUlRfQygweGZhMDAwMDAwLCAwMDAwMDAw
MCksIC01NCk7CisgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBEaXlGcChVSU5UNjRfMlBBUlRf
QygweDljNDAwMDAwLCAwMDAwMDAwMCksIC01MCk7CisgICAgICAgICAgICBjYXNlIDU6IHJldHVy
biBEaXlGcChVSU5UNjRfMlBBUlRfQygweGMzNTAwMDAwLCAwMDAwMDAwMCksIC00Nyk7CisgICAg
ICAgICAgICBjYXNlIDY6IHJldHVybiBEaXlGcChVSU5UNjRfMlBBUlRfQygweGY0MjQwMDAwLCAw
MDAwMDAwMCksIC00NCk7CisgICAgICAgICAgICBjYXNlIDc6IHJldHVybiBEaXlGcChVSU5UNjRf
MlBBUlRfQygweDk4OTY4MDAwLCAwMDAwMDAwMCksIC00MCk7CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IERpeUZwKDAsIDApOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIC8vIElmIHRo
ZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgdGhlbiB0aGUgcmVzdWx0IGlzIHRoZSBjb3JyZWN0IGRv
dWJsZS4KKyAgICAvLyBPdGhlcndpc2UgaXQgaXMgZWl0aGVyIHRoZSBjb3JyZWN0IGRvdWJsZSBv
ciB0aGUgZG91YmxlIHRoYXQgaXMganVzdCBiZWxvdworICAgIC8vIHRoZSBjb3JyZWN0IGRvdWJs
ZS4KKyAgICBzdGF0aWMgYm9vbCBEaXlGcFN0cnRvZChWZWN0b3I8Y29uc3QgY2hhcj4gYnVmZmVy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBvbmVudCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkb3VibGUqIHJlc3VsdCkgeworICAgICAgICBEaXlGcCBpbnB1dDsK
KyAgICAgICAgaW50IHJlbWFpbmluZ19kZWNpbWFsczsKKyAgICAgICAgUmVhZERpeUZwKGJ1ZmZl
ciwgJmlucHV0LCAmcmVtYWluaW5nX2RlY2ltYWxzKTsKKyAgICAgICAgLy8gU2luY2Ugd2UgbWF5
IGhhdmUgZHJvcHBlZCBzb21lIGRpZ2l0cyB0aGUgaW5wdXQgaXMgbm90IGFjY3VyYXRlLgorICAg
ICAgICAvLyBJZiByZW1haW5pbmdfZGVjaW1hbHMgaXMgZGlmZmVyZW50IHRoYW4gMCB0aGFuIHRo
ZSBlcnJvciBpcyBhdCBtb3N0CisgICAgICAgIC8vIC41IHVscCAodW5pdCBpbiB0aGUgbGFzdCBw
bGFjZSkuCisgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZGVhbCB3aXRoIGZyYWN0aW9ucyBh
bmQgdGhlcmVmb3JlIGtlZXAgYSBjb21tb24KKyAgICAgICAgLy8gZGVub21pbmF0b3IuCisgICAg
ICAgIGNvbnN0IGludCBrRGVub21pbmF0b3JMb2cgPSAzOworICAgICAgICBjb25zdCBpbnQga0Rl
bm9taW5hdG9yID0gMSA8PCBrRGVub21pbmF0b3JMb2c7CisgICAgICAgIC8vIE1vdmUgdGhlIHJl
bWFpbmluZyBkZWNpbWFscyBpbnRvIHRoZSBleHBvbmVudC4KKyAgICAgICAgZXhwb25lbnQgKz0g
cmVtYWluaW5nX2RlY2ltYWxzOworICAgICAgICBpbnQgZXJyb3IgPSAocmVtYWluaW5nX2RlY2lt
YWxzID09IDAgPyAwIDoga0Rlbm9taW5hdG9yIC8gMik7CisgICAgICAgIAorICAgICAgICBpbnQg
b2xkX2UgPSBpbnB1dC5lKCk7CisgICAgICAgIGlucHV0Lk5vcm1hbGl6ZSgpOworICAgICAgICBl
cnJvciA8PD0gb2xkX2UgLSBpbnB1dC5lKCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoZXhw
b25lbnQgPD0gUG93ZXJzT2ZUZW5DYWNoZTo6a01heERlY2ltYWxFeHBvbmVudCk7CisgICAgICAg
IGlmIChleHBvbmVudCA8IFBvd2Vyc09mVGVuQ2FjaGU6OmtNaW5EZWNpbWFsRXhwb25lbnQpIHsK
KyAgICAgICAgICAgICpyZXN1bHQgPSAwLjA7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICBEaXlGcCBjYWNoZWRfcG93ZXI7CisgICAgICAgIGludCBjYWNoZWRf
ZGVjaW1hbF9leHBvbmVudDsKKyAgICAgICAgUG93ZXJzT2ZUZW5DYWNoZTo6R2V0Q2FjaGVkUG93
ZXJGb3JEZWNpbWFsRXhwb25lbnQoZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjYWNoZWRfcG93ZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjYWNo
ZWRfZGVjaW1hbF9leHBvbmVudCk7CisgICAgICAgIAorICAgICAgICBpZiAoY2FjaGVkX2RlY2lt
YWxfZXhwb25lbnQgIT0gZXhwb25lbnQpIHsKKyAgICAgICAgICAgIGludCBhZGp1c3RtZW50X2V4
cG9uZW50ID0gZXhwb25lbnQgLSBjYWNoZWRfZGVjaW1hbF9leHBvbmVudDsKKyAgICAgICAgICAg
IERpeUZwIGFkanVzdG1lbnRfcG93ZXIgPSBBZGp1c3RtZW50UG93ZXJPZlRlbihhZGp1c3RtZW50
X2V4cG9uZW50KTsKKyAgICAgICAgICAgIGlucHV0Lk11bHRpcGx5KGFkanVzdG1lbnRfcG93ZXIp
OworICAgICAgICAgICAgaWYgKGtNYXhVaW50NjREZWNpbWFsRGlnaXRzIC0gYnVmZmVyLmxlbmd0
aCgpID49IGFkanVzdG1lbnRfZXhwb25lbnQpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgcHJv
ZHVjdCBvZiBpbnB1dCB3aXRoIHRoZSBhZGp1c3RtZW50IHBvd2VyIGZpdHMgaW50byBhIDY0IGJp
dAorICAgICAgICAgICAgICAgIC8vIGludGVnZXIuCisgICAgICAgICAgICAgICAgQVNTRVJUKERp
eUZwOjprU2lnbmlmaWNhbmRTaXplID09IDY0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgLy8gVGhlIGFkanVzdG1lbnQgcG93ZXIgaXMgZXhhY3QuIFRoZXJlIGlzIGhl
bmNlIG9ubHkgYW4gZXJyb3Igb2YgMC41LgorICAgICAgICAgICAgICAgIGVycm9yICs9IGtEZW5v
bWluYXRvciAvIDI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGlucHV0Lk11bHRpcGx5KGNhY2hlZF9wb3dlcik7CisgICAgICAgIC8vIFRoZSBlcnJvciBpbnRy
b2R1Y2VkIGJ5IGEgbXVsdGlwbGljYXRpb24gb2YgYSpiIGVxdWFscworICAgICAgICAvLyAgIGVy
cm9yX2EgKyBlcnJvcl9iICsgZXJyb3JfYSplcnJvcl9iLzJeNjQgKyAwLjUKKyAgICAgICAgLy8g
U3Vic3RpdHV0aW5nIGEgd2l0aCAnaW5wdXQnIGFuZCBiIHdpdGggJ2NhY2hlZF9wb3dlcicgd2Ug
aGF2ZQorICAgICAgICAvLyAgIGVycm9yX2IgPSAwLjUgIChhbGwgY2FjaGVkIHBvd2VycyBoYXZl
IGFuIGVycm9yIG9mIGxlc3MgdGhhbiAwLjUgdWxwKSwKKyAgICAgICAgLy8gICBlcnJvcl9hYiA9
IDAgb3IgMSAvIGtEZW5vbWluYXRvciA+IGVycm9yX2EqZXJyb3JfYi8gMl42NAorICAgICAgICBp
bnQgZXJyb3JfYiA9IGtEZW5vbWluYXRvciAvIDI7CisgICAgICAgIGludCBlcnJvcl9hYiA9IChl
cnJvciA9PSAwID8gMCA6IDEpOyAgLy8gV2Ugcm91bmQgdXAgdG8gMS4KKyAgICAgICAgaW50IGZp
eGVkX2Vycm9yID0ga0Rlbm9taW5hdG9yIC8gMjsKKyAgICAgICAgZXJyb3IgKz0gZXJyb3JfYiAr
IGVycm9yX2FiICsgZml4ZWRfZXJyb3I7CisgICAgICAgIAorICAgICAgICBvbGRfZSA9IGlucHV0
LmUoKTsKKyAgICAgICAgaW5wdXQuTm9ybWFsaXplKCk7CisgICAgICAgIGVycm9yIDw8PSBvbGRf
ZSAtIGlucHV0LmUoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFNlZSBpZiB0aGUgZG91YmxlJ3Mg
c2lnbmlmaWNhbmQgY2hhbmdlcyBpZiB3ZSBhZGQvc3VidHJhY3QgdGhlIGVycm9yLgorICAgICAg
ICBpbnQgb3JkZXJfb2ZfbWFnbml0dWRlID0gRGl5RnA6OmtTaWduaWZpY2FuZFNpemUgKyBpbnB1
dC5lKCk7CisgICAgICAgIGludCBlZmZlY3RpdmVfc2lnbmlmaWNhbmRfc2l6ZSA9CisgICAgICAg
IERvdWJsZTo6U2lnbmlmaWNhbmRTaXplRm9yT3JkZXJPZk1hZ25pdHVkZShvcmRlcl9vZl9tYWdu
aXR1ZGUpOworICAgICAgICBpbnQgcHJlY2lzaW9uX2RpZ2l0c19jb3VudCA9CisgICAgICAgIERp
eUZwOjprU2lnbmlmaWNhbmRTaXplIC0gZWZmZWN0aXZlX3NpZ25pZmljYW5kX3NpemU7CisgICAg
ICAgIGlmIChwcmVjaXNpb25fZGlnaXRzX2NvdW50ICsga0Rlbm9taW5hdG9yTG9nID49IERpeUZw
OjprU2lnbmlmaWNhbmRTaXplKSB7CisgICAgICAgICAgICAvLyBUaGlzIGNhbiBvbmx5IGhhcHBl
biBmb3IgdmVyeSBzbWFsbCBkZW5vcm1hbHMuIEluIHRoaXMgY2FzZSB0aGUKKyAgICAgICAgICAg
IC8vIGhhbGYtd2F5IG11bHRpcGxpZWQgYnkgdGhlIGRlbm9taW5hdG9yIGV4Y2VlZHMgdGhlIHJh
bmdlIG9mIGFuIHVpbnQ2NC4KKyAgICAgICAgICAgIC8vIFNpbXBseSBzaGlmdCBldmVyeXRoaW5n
IHRvIHRoZSByaWdodC4KKyAgICAgICAgICAgIGludCBzaGlmdF9hbW91bnQgPSAocHJlY2lzaW9u
X2RpZ2l0c19jb3VudCArIGtEZW5vbWluYXRvckxvZykgLQorICAgICAgICAgICAgRGl5RnA6OmtT
aWduaWZpY2FuZFNpemUgKyAxOworICAgICAgICAgICAgaW5wdXQuc2V0X2YoaW5wdXQuZigpID4+
IHNoaWZ0X2Ftb3VudCk7CisgICAgICAgICAgICBpbnB1dC5zZXRfZShpbnB1dC5lKCkgKyBzaGlm
dF9hbW91bnQpOworICAgICAgICAgICAgLy8gV2UgYWRkIDEgZm9yIHRoZSBsb3N0IHByZWNpc2lv
biBvZiBlcnJvciwgYW5kIGtEZW5vbWluYXRvciBmb3IKKyAgICAgICAgICAgIC8vIHRoZSBsb3N0
IHByZWNpc2lvbiBvZiBpbnB1dC5mKCkuCisgICAgICAgICAgICBlcnJvciA9IChlcnJvciA+PiBz
aGlmdF9hbW91bnQpICsgMSArIGtEZW5vbWluYXRvcjsKKyAgICAgICAgICAgIHByZWNpc2lvbl9k
aWdpdHNfY291bnQgLT0gc2hpZnRfYW1vdW50OworICAgICAgICB9CisgICAgICAgIC8vIFdlIHVz
ZSB1aW50NjRfdHMgbm93LiBUaGlzIG9ubHkgd29ya3MgaWYgdGhlIERpeUZwIHVzZXMgdWludDY0
X3RzIHRvby4KKyAgICAgICAgQVNTRVJUKERpeUZwOjprU2lnbmlmaWNhbmRTaXplID09IDY0KTsK
KyAgICAgICAgQVNTRVJUKHByZWNpc2lvbl9kaWdpdHNfY291bnQgPCA2NCk7CisgICAgICAgIHVp
bnQ2NF90IG9uZTY0ID0gMTsKKyAgICAgICAgdWludDY0X3QgcHJlY2lzaW9uX2JpdHNfbWFzayA9
IChvbmU2NCA8PCBwcmVjaXNpb25fZGlnaXRzX2NvdW50KSAtIDE7CisgICAgICAgIHVpbnQ2NF90
IHByZWNpc2lvbl9iaXRzID0gaW5wdXQuZigpICYgcHJlY2lzaW9uX2JpdHNfbWFzazsKKyAgICAg
ICAgdWludDY0X3QgaGFsZl93YXkgPSBvbmU2NCA8PCAocHJlY2lzaW9uX2RpZ2l0c19jb3VudCAt
IDEpOworICAgICAgICBwcmVjaXNpb25fYml0cyAqPSBrRGVub21pbmF0b3I7CisgICAgICAgIGhh
bGZfd2F5ICo9IGtEZW5vbWluYXRvcjsKKyAgICAgICAgRGl5RnAgcm91bmRlZF9pbnB1dChpbnB1
dC5mKCkgPj4gcHJlY2lzaW9uX2RpZ2l0c19jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnB1dC5lKCkgKyBwcmVjaXNpb25fZGlnaXRzX2NvdW50KTsKKyAgICAgICAgaWYgKHBy
ZWNpc2lvbl9iaXRzID49IGhhbGZfd2F5ICsgZXJyb3IpIHsKKyAgICAgICAgICAgIHJvdW5kZWRf
aW5wdXQuc2V0X2Yocm91bmRlZF9pbnB1dC5mKCkgKyAxKTsKKyAgICAgICAgfQorICAgICAgICAv
LyBJZiB0aGUgbGFzdF9iaXRzIGFyZSB0b28gY2xvc2UgdG8gdGhlIGhhbGYtd2F5IGNhc2UgdGhh
biB3ZSBhcmUgdG9vCisgICAgICAgIC8vIGluYWNjdXJhdGUgYW5kIHJvdW5kIGRvd24uIEluIHRo
aXMgY2FzZSB3ZSByZXR1cm4gZmFsc2Ugc28gdGhhdCB3ZSBjYW4KKyAgICAgICAgLy8gZmFsbCBi
YWNrIHRvIGEgbW9yZSBwcmVjaXNlIGFsZ29yaXRobS4KKyAgICAgICAgCisgICAgICAgICpyZXN1
bHQgPSBEb3VibGUocm91bmRlZF9pbnB1dCkudmFsdWUoKTsKKyAgICAgICAgaWYgKGhhbGZfd2F5
IC0gZXJyb3IgPCBwcmVjaXNpb25fYml0cyAmJiBwcmVjaXNpb25fYml0cyA8IGhhbGZfd2F5ICsg
ZXJyb3IpIHsKKyAgICAgICAgICAgIC8vIFRvbyBpbXByZWNpc2UuIFRoZSBjYWxsZXIgd2lsbCBo
YXZlIHRvIGZhbGwgYmFjayB0byBhIHNsb3dlciB2ZXJzaW9uLgorICAgICAgICAgICAgLy8gSG93
ZXZlciB0aGUgcmV0dXJuZWQgbnVtYmVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgZWl0aGVyIHRoZSBj
b3JyZWN0CisgICAgICAgICAgICAvLyBkb3VibGUsIG9yIHRoZSBuZXh0LWxvd2VyIGRvdWJsZS4K
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIC8vIFJldHVy
bnMgdGhlIGNvcnJlY3QgZG91YmxlIGZvciB0aGUgYnVmZmVyKjEwXmV4cG9uZW50LgorICAgIC8v
IFRoZSB2YXJpYWJsZSBndWVzcyBzaG91bGQgYmUgYSBjbG9zZSBndWVzcyB0aGF0IGlzIGVpdGhl
ciB0aGUgY29ycmVjdCBkb3VibGUKKyAgICAvLyBvciBpdHMgbG93ZXIgbmVpZ2hib3IgKHRoZSBu
ZWFyZXN0IGRvdWJsZSBsZXNzIHRoYW4gdGhlIGNvcnJlY3Qgb25lKS4KKyAgICAvLyBQcmVjb25k
aXRpb25zOgorICAgIC8vICAgYnVmZmVyLmxlbmd0aCgpICsgZXhwb25lbnQgPD0ga01heERlY2lt
YWxQb3dlciArIDEKKyAgICAvLyAgIGJ1ZmZlci5sZW5ndGgoKSArIGV4cG9uZW50ID4ga01pbkRl
Y2ltYWxQb3dlcgorICAgIC8vICAgYnVmZmVyLmxlbmd0aCgpIDw9IGtNYXhEZWNpbWFsU2lnbmlm
aWNhbnREaWdpdHMKKyAgICBzdGF0aWMgZG91YmxlIEJpZ251bVN0cnRvZChWZWN0b3I8Y29uc3Qg
Y2hhcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBvbmVu
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZ3Vlc3MpIHsKKyAgICAg
ICAgaWYgKGd1ZXNzID09IERvdWJsZTo6SW5maW5pdHkoKSkgeworICAgICAgICAgICAgcmV0dXJu
IGd1ZXNzOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBEaXlGcCB1cHBlcl9ib3VuZGFy
eSA9IERvdWJsZShndWVzcykuVXBwZXJCb3VuZGFyeSgpOworICAgICAgICAKKyAgICAgICAgQVNT
RVJUKGJ1ZmZlci5sZW5ndGgoKSArIGV4cG9uZW50IDw9IGtNYXhEZWNpbWFsUG93ZXIgKyAxKTsK
KyAgICAgICAgQVNTRVJUKGJ1ZmZlci5sZW5ndGgoKSArIGV4cG9uZW50ID4ga01pbkRlY2ltYWxQ
b3dlcik7CisgICAgICAgIEFTU0VSVChidWZmZXIubGVuZ3RoKCkgPD0ga01heFNpZ25pZmljYW50
RGVjaW1hbERpZ2l0cyk7CisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBCaWdudW0gd2ls
bCBiZSBhYmxlIHRvIGhvbGQgYWxsIG91ciBudW1iZXJzLgorICAgICAgICAvLyBPdXIgQmlnbnVt
IGltcGxlbWVudGF0aW9uIGhhcyBhIHNlcGFyYXRlIGZpZWxkIGZvciBleHBvbmVudHMuIFNoaWZ0
cyB3aWxsCisgICAgICAgIC8vIGNvbnN1bWUgYXQgbW9zdCBvbmUgYmlnaXQgKDwgNjQgYml0cyku
CisgICAgICAgIC8vIGxuKDEwKSA9PSAzLjMyMTkuLi4KKyAgICAgICAgQVNTRVJUKCgoa01heERl
Y2ltYWxQb3dlciArIDEpICogMzMzIC8gMTAwKSA8IEJpZ251bTo6a01heFNpZ25pZmljYW50Qml0
cyk7CisgICAgICAgIEJpZ251bSBpbnB1dDsKKyAgICAgICAgQmlnbnVtIGJvdW5kYXJ5OworICAg
ICAgICBpbnB1dC5Bc3NpZ25EZWNpbWFsU3RyaW5nKGJ1ZmZlcik7CisgICAgICAgIGJvdW5kYXJ5
LkFzc2lnblVJbnQ2NCh1cHBlcl9ib3VuZGFyeS5mKCkpOworICAgICAgICBpZiAoZXhwb25lbnQg
Pj0gMCkgeworICAgICAgICAgICAgaW5wdXQuTXVsdGlwbHlCeVBvd2VyT2ZUZW4oZXhwb25lbnQp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYm91bmRhcnkuTXVsdGlwbHlCeVBvd2Vy
T2ZUZW4oLWV4cG9uZW50KTsKKyAgICAgICAgfQorICAgICAgICBpZiAodXBwZXJfYm91bmRhcnku
ZSgpID4gMCkgeworICAgICAgICAgICAgYm91bmRhcnkuU2hpZnRMZWZ0KHVwcGVyX2JvdW5kYXJ5
LmUoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbnB1dC5TaGlmdExlZnQoLXVw
cGVyX2JvdW5kYXJ5LmUoKSk7CisgICAgICAgIH0KKyAgICAgICAgaW50IGNvbXBhcmlzb24gPSBC
aWdudW06OkNvbXBhcmUoaW5wdXQsIGJvdW5kYXJ5KTsKKyAgICAgICAgaWYgKGNvbXBhcmlzb24g
PCAwKSB7CisgICAgICAgICAgICByZXR1cm4gZ3Vlc3M7CisgICAgICAgIH0gZWxzZSBpZiAoY29t
cGFyaXNvbiA+IDApIHsKKyAgICAgICAgICAgIHJldHVybiBEb3VibGUoZ3Vlc3MpLk5leHREb3Vi
bGUoKTsKKyAgICAgICAgfSBlbHNlIGlmICgoRG91YmxlKGd1ZXNzKS5TaWduaWZpY2FuZCgpICYg
MSkgPT0gMCkgeworICAgICAgICAgICAgLy8gUm91bmQgdG93YXJkcyBldmVuLgorICAgICAgICAg
ICAgcmV0dXJuIGd1ZXNzOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIERv
dWJsZShndWVzcykuTmV4dERvdWJsZSgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIAor
ICAgIGRvdWJsZSBTdHJ0b2QoVmVjdG9yPGNvbnN0IGNoYXI+IGJ1ZmZlciwgaW50IGV4cG9uZW50
KSB7CisgICAgICAgIFZlY3Rvcjxjb25zdCBjaGFyPiBsZWZ0X3RyaW1tZWQgPSBUcmltTGVhZGlu
Z1plcm9zKGJ1ZmZlcik7CisgICAgICAgIFZlY3Rvcjxjb25zdCBjaGFyPiB0cmltbWVkID0gVHJp
bVRyYWlsaW5nWmVyb3MobGVmdF90cmltbWVkKTsKKyAgICAgICAgZXhwb25lbnQgKz0gbGVmdF90
cmltbWVkLmxlbmd0aCgpIC0gdHJpbW1lZC5sZW5ndGgoKTsKKyAgICAgICAgaWYgKHRyaW1tZWQu
bGVuZ3RoKCkgPT0gMCkgcmV0dXJuIDAuMDsKKyAgICAgICAgaWYgKHRyaW1tZWQubGVuZ3RoKCkg
PiBrTWF4U2lnbmlmaWNhbnREZWNpbWFsRGlnaXRzKSB7CisgICAgICAgICAgICBjaGFyIHNpZ25p
ZmljYW50X2J1ZmZlcltrTWF4U2lnbmlmaWNhbnREZWNpbWFsRGlnaXRzXTsKKyAgICAgICAgICAg
IGludCBzaWduaWZpY2FudF9leHBvbmVudDsKKyAgICAgICAgICAgIFRyaW1Ub01heFNpZ25pZmlj
YW50RGlnaXRzKHRyaW1tZWQsIGV4cG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2lnbmlmaWNhbnRfYnVmZmVyLCAmc2lnbmlmaWNhbnRfZXhwb25lbnQpOwor
ICAgICAgICAgICAgcmV0dXJuIFN0cnRvZChWZWN0b3I8Y29uc3QgY2hhcj4oc2lnbmlmaWNhbnRf
YnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga01h
eFNpZ25pZmljYW50RGVjaW1hbERpZ2l0cyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
Z25pZmljYW50X2V4cG9uZW50KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZXhwb25lbnQgKyB0
cmltbWVkLmxlbmd0aCgpIC0gMSA+PSBrTWF4RGVjaW1hbFBvd2VyKSB7CisgICAgICAgICAgICBy
ZXR1cm4gRG91YmxlOjpJbmZpbml0eSgpOworICAgICAgICB9CisgICAgICAgIGlmIChleHBvbmVu
dCArIHRyaW1tZWQubGVuZ3RoKCkgPD0ga01pbkRlY2ltYWxQb3dlcikgeworICAgICAgICAgICAg
cmV0dXJuIDAuMDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZG91YmxlIGd1ZXNzOwor
ICAgICAgICBpZiAoRG91YmxlU3RydG9kKHRyaW1tZWQsIGV4cG9uZW50LCAmZ3Vlc3MpIHx8Cisg
ICAgICAgICAgICBEaXlGcFN0cnRvZCh0cmltbWVkLCBleHBvbmVudCwgJmd1ZXNzKSkgeworICAg
ICAgICAgICAgcmV0dXJuIGd1ZXNzOworICAgICAgICB9CisgICAgICAgIHJldHVybiBCaWdudW1T
dHJ0b2QodHJpbW1lZCwgZXhwb25lbnQsIGd1ZXNzKTsKKyAgICB9CisgICAgCit9ICAvLyBuYW1l
c3BhY2UgZG91YmxlX2NvbnZlcnNpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvZHRvYS9zdHJ0b2QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9zdHJ0
b2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4wOTc5ZjQ0ZGViOTU4NWEwZDlkNTk4NjEwMjg1NzM5YWNhMjE2OTM0
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL3N0cnRv
ZC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8vIENvcHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
Ly8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
Ky8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmbmRl
ZiBET1VCTEVfQ09OVkVSU0lPTl9TVFJUT0RfSF8KKyNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05f
U1RSVE9EX0hfCisKKyNpbmNsdWRlICJ1dGlscy5oIgorCituYW1lc3BhY2UgZG91YmxlX2NvbnZl
cnNpb24geworICAgIAorICAgIC8vIFRoZSBidWZmZXIgbXVzdCBvbmx5IGNvbnRhaW4gZGlnaXRz
IGluIHRoZSByYW5nZSBbMC05XS4gSXQgbXVzdCBub3QKKyAgICAvLyBjb250YWluIGEgZG90IG9y
IGEgc2lnbi4gSXQgbXVzdCBub3Qgc3RhcnQgd2l0aCAnMCcsIGFuZCBtdXN0IG5vdCBiZSBlbXB0
eS4KKyAgICBkb3VibGUgU3RydG9kKFZlY3Rvcjxjb25zdCBjaGFyPiBidWZmZXIsIGludCBleHBv
bmVudCk7CisgICAgCit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KKworI2VuZGlm
ICAvLyBET1VCTEVfQ09OVkVSU0lPTl9TVFJUT0RfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvZHRvYS91dGlscy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9k
dG9hL3V0aWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDIzMjBiZWQ3N2Y1M2Q5MjVlNWU2YzJhNTQ0NjkzOWIx
NjNmNDI0MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRv
YS91dGlscy5oCkBAIC0wLDAgKzEsMjk5IEBACisvLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJv
amVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8v
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
KyNpZm5kZWYgRE9VQkxFX0NPTlZFUlNJT05fVVRJTFNfSF8KKyNkZWZpbmUgRE9VQkxFX0NPTlZF
UlNJT05fVVRJTFNfSF8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5o
PgorCisjaWZuZGVmIEFTU0VSVAorI2luY2x1ZGUgPGFzc2VydC5oPgorI2RlZmluZSBBU1NFUlQo
Y29uZGl0aW9uKSAgICAgIChhc3NlcnQoY29uZGl0aW9uKSkKKyNkZWZpbmUgVU5JTVBMRU1FTlRF
RCgpIChhYm9ydCgpKQorI2RlZmluZSBVTlJFQUNIQUJMRSgpICAgKGFib3J0KCkpCisjZW5kaWYK
KworLy8gRG91YmxlIG9wZXJhdGlvbnMgZGV0ZWN0aW9uIGJhc2VkIG9uIHRhcmdldCBhcmNoaXRl
Y3R1cmUuCisvLyBMaW51eCB1c2VzIGEgODBiaXQgd2lkZSBmbG9hdGluZyBwb2ludCBzdGFjayBv
biB4ODYuIFRoaXMgaW5kdWNlcyBkb3VibGUKKy8vIHJvdW5kaW5nLCB3aGljaCBpbiB0dXJuIGxl
YWRzIHRvIHdyb25nIHJlc3VsdHMuCisvLyBBbiBlYXN5IHdheSB0byB0ZXN0IGlmIHRoZSBmbG9h
dGluZy1wb2ludCBvcGVyYXRpb25zIGFyZSBjb3JyZWN0IGlzIHRvCisvLyBldmFsdWF0ZTogODky
NTUuMC8xZTIyLiBJZiB0aGUgZmxvYXRpbmctcG9pbnQgc3RhY2sgaXMgNjQgYml0cyB3aWRlIHRo
ZW4KKy8vIHRoZSByZXN1bHQgaXMgZXF1YWwgdG8gODkyNTVlLTIyLgorLy8gVGhlIGJlc3Qgd2F5
IHRvIHRlc3QgdGhpcywgaXMgdG8gY3JlYXRlIGEgZGl2aXNpb24tZnVuY3Rpb24gYW5kIHRvIGNv
bXBhcmUKKy8vIHRoZSBvdXRwdXQgb2YgdGhlIGRpdmlzaW9uIHdpdGggdGhlIGV4cGVjdGVkIHJl
c3VsdC4gKElubGluaW5nIG11c3QgYmUKKy8vIGRpc2FibGVkLikKKy8vIE9uIExpbnV4LHg4NiA4
OTI1NWUtMjIgIT0gRGl2X2RvdWJsZSg4OTI1NS4wLzFlMjIpCisjaWYgZGVmaW5lZChfTV9YNjQp
IHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgXAorZGVmaW5lZChfX0FSTUVMX18pIHx8IFwKK2Rl
ZmluZWQoX01JUFNfQVJDSF9NSVBTMzJSMikKKyNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05fQ09S
UkVDVF9ET1VCTEVfT1BFUkFUSU9OUyAxCisjZWxpZiBkZWZpbmVkKF9NX0lYODYpIHx8IGRlZmlu
ZWQoX19pMzg2X18pCisjaWYgZGVmaW5lZChfV0lOMzIpCisvLyBXaW5kb3dzIHVzZXMgYSA2NGJp
dCB3aWRlIGZsb2F0aW5nIHBvaW50IHN0YWNrLgorI2RlZmluZSBET1VCTEVfQ09OVkVSU0lPTl9D
T1JSRUNUX0RPVUJMRV9PUEVSQVRJT05TIDEKKyNlbHNlCisjdW5kZWYgRE9VQkxFX0NPTlZFUlNJ
T05fQ09SUkVDVF9ET1VCTEVfT1BFUkFUSU9OUworI2VuZGlmICAvLyBfV0lOMzIKKyNlbHNlCisj
ZXJyb3IgVGFyZ2V0IGFyY2hpdGVjdHVyZSB3YXMgbm90IGRldGVjdGVkIGFzIHN1cHBvcnRlZCBi
eSBEb3VibGUtQ29udmVyc2lvbi4KKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYg
IWRlZmluZWQoX19NSU5HVzMyX18pCisKK3R5cGVkZWYgc2lnbmVkIGNoYXIgaW50OF90OwordHlw
ZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnQ4X3Q7Cit0eXBlZGVmIHNob3J0IGludDE2X3Q7ICAvLyBO
T0xJTlQKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgdWludDE2X3Q7ICAvLyBOT0xJTlQKK3R5cGVk
ZWYgaW50IGludDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50MzJfdDsKK3R5cGVkZWYg
X19pbnQ2NCBpbnQ2NF90OwordHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0IHVpbnQ2NF90OworLy8g
aW50cHRyX3QgYW5kIGZyaWVuZHMgYXJlIGRlZmluZWQgaW4gY3J0ZGVmcy5oIHRocm91Z2ggc3Rk
aW8uaC4KKworI2Vsc2UKKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisjZW5kaWYKKworLy8gVGhl
IGZvbGxvd2luZyBtYWNybyB3b3JrcyBvbiBib3RoIDMyIGFuZCA2NC1iaXQgcGxhdGZvcm1zLgor
Ly8gVXNhZ2U6IGluc3RlYWQgb2Ygd3JpdGluZyAweDEyMzQ1Njc4OTAxMjM0NTYKKy8vICAgICAg
d3JpdGUgVUlOVDY0XzJQQVJUX0MoMHgxMjM0NTY3OCw5MDEyMzQ1Nik7CisjZGVmaW5lIFVJTlQ2
NF8yUEFSVF9DKGEsIGIpICgoKHN0YXRpY19jYXN0PHVpbnQ2NF90PihhKSA8PCAzMikgKyAweCMj
YiMjdSkpCisKKworLy8gVGhlIGV4cHJlc3Npb24gQVJSQVlfU0laRShhKSBpcyBhIGNvbXBpbGUt
dGltZSBjb25zdGFudCBvZiB0eXBlCisvLyBzaXplX3Qgd2hpY2ggcmVwcmVzZW50cyB0aGUgbnVt
YmVyIG9mIGVsZW1lbnRzIG9mIHRoZSBnaXZlbgorLy8gYXJyYXkuIFlvdSBzaG91bGQgb25seSB1
c2UgQVJSQVlfU0laRSBvbiBzdGF0aWNhbGx5IGFsbG9jYXRlZAorLy8gYXJyYXlzLgorI2RlZmlu
ZSBBUlJBWV9TSVpFKGEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisoKHNp
emVvZihhKSAvIHNpemVvZigqKGEpKSkgLyAgICAgICAgICAgICAgICAgICAgICAgICBcCitzdGF0
aWNfY2FzdDxzaXplX3Q+KCEoc2l6ZW9mKGEpICUgc2l6ZW9mKCooYSkpKSkpCisKKy8vIEEgbWFj
cm8gdG8gZGlzYWxsb3cgdGhlIGV2aWwgY29weSBjb25zdHJ1Y3RvciBhbmQgb3BlcmF0b3I9IGZ1
bmN0aW9ucworLy8gVGhpcyBzaG91bGQgYmUgdXNlZCBpbiB0aGUgcHJpdmF0ZTogZGVjbGFyYXRp
b25zIGZvciBhIGNsYXNzCisjZGVmaW5lIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUeXBlTmFt
ZSkgICAgICBcCitUeXBlTmFtZShjb25zdCBUeXBlTmFtZSYpOyAgICAgICAgICAgICAgICAgICAg
XAordm9pZCBvcGVyYXRvcj0oY29uc3QgVHlwZU5hbWUmKQorCisvLyBBIG1hY3JvIHRvIGRpc2Fs
bG93IGFsbCB0aGUgaW1wbGljaXQgY29uc3RydWN0b3JzLCBuYW1lbHkgdGhlCisvLyBkZWZhdWx0
IGNvbnN0cnVjdG9yLCBjb3B5IGNvbnN0cnVjdG9yIGFuZCBvcGVyYXRvcj0gZnVuY3Rpb25zLgor
Ly8KKy8vIFRoaXMgc2hvdWxkIGJlIHVzZWQgaW4gdGhlIHByaXZhdGU6IGRlY2xhcmF0aW9ucyBm
b3IgYSBjbGFzcworLy8gdGhhdCB3YW50cyB0byBwcmV2ZW50IGFueW9uZSBmcm9tIGluc3RhbnRp
YXRpbmcgaXQuIFRoaXMgaXMKKy8vIGVzcGVjaWFsbHkgdXNlZnVsIGZvciBjbGFzc2VzIGNvbnRh
aW5pbmcgb25seSBzdGF0aWMgbWV0aG9kcy4KKyNkZWZpbmUgRElTQUxMT1dfSU1QTElDSVRfQ09O
U1RSVUNUT1JTKFR5cGVOYW1lKSBcCitUeXBlTmFtZSgpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKK0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUeXBlTmFtZSkKKworbmFt
ZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgaW50IGtD
aGFyU2l6ZSA9IHNpemVvZihjaGFyKTsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRoZSBtYXhpbXVt
IG9mIHRoZSB0d28gcGFyYW1ldGVycy4KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBz
dGF0aWMgVCBNYXgoVCBhLCBUIGIpIHsKKyAgICAgICAgcmV0dXJuIGEgPCBiID8gYiA6IGE7Cisg
ICAgfQorICAgIAorICAgIAorICAgIC8vIFJldHVybnMgdGhlIG1pbmltdW0gb2YgdGhlIHR3byBw
YXJhbWV0ZXJzLgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHN0YXRpYyBUIE1pbihU
IGEsIFQgYikgeworICAgICAgICByZXR1cm4gYSA8IGIgPyBhIDogYjsKKyAgICB9CisgICAgCisg
ICAgCisgICAgaW5saW5lIGludCBTdHJMZW5ndGgoY29uc3QgY2hhciogc3RyaW5nKSB7CisgICAg
ICAgIHNpemVfdCBsZW5ndGggPSBzdHJsZW4oc3RyaW5nKTsKKyAgICAgICAgQVNTRVJUKGxlbmd0
aCA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KHN0YXRpY19jYXN0PGludD4obGVuZ3RoKSkpOworICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihsZW5ndGgpOworICAgIH0KKyAgICAKKyAgICAv
LyBUaGlzIGlzIGEgc2ltcGxpZmllZCB2ZXJzaW9uIG9mIFY4J3MgVmVjdG9yIGNsYXNzLgorICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIGNsYXNzIFZlY3RvciB7CisgICAgcHVibGljOgor
ICAgICAgICBWZWN0b3IoKSA6IHN0YXJ0XyhOVUxMKSwgbGVuZ3RoXygwKSB7fQorICAgICAgICBW
ZWN0b3IoVCogZGF0YSwgaW50IGxlbmd0aCkgOiBzdGFydF8oZGF0YSksIGxlbmd0aF8obGVuZ3Ro
KSB7CisgICAgICAgICAgICBBU1NFUlQobGVuZ3RoID09IDAgfHwgKGxlbmd0aCA+IDAgJiYgZGF0
YSAhPSBOVUxMKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFJldHVybnMgYSB2
ZWN0b3IgdXNpbmcgdGhlIHNhbWUgYmFja2luZyBzdG9yYWdlIGFzIHRoaXMgb25lLAorICAgICAg
ICAvLyBzcGFubmluZyBmcm9tIGFuZCBpbmNsdWRpbmcgJ2Zyb20nLCB0byBidXQgbm90IGluY2x1
ZGluZyAndG8nLgorICAgICAgICBWZWN0b3I8VD4gU3ViVmVjdG9yKGludCBmcm9tLCBpbnQgdG8p
IHsKKyAgICAgICAgICAgIEFTU0VSVCh0byA8PSBsZW5ndGhfKTsKKyAgICAgICAgICAgIEFTU0VS
VChmcm9tIDwgdG8pOworICAgICAgICAgICAgQVNTRVJUKDAgPD0gZnJvbSk7CisgICAgICAgICAg
ICByZXR1cm4gVmVjdG9yPFQ+KHN0YXJ0KCkgKyBmcm9tLCB0byAtIGZyb20pOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAvLyBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIHZlY3Rvci4K
KyAgICAgICAgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIGxlbmd0aF87IH0KKyAgICAgICAg
CisgICAgICAgIC8vIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHZlY3RvciBpcyBlbXB0eS4K
KyAgICAgICAgYm9vbCBpc19lbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGxlbmd0aF8gPT0gMDsgfQor
ICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJucyB0aGUgcG9pbnRlciB0byB0aGUgc3RhcnQgb2Yg
dGhlIGRhdGEgaW4gdGhlIHZlY3Rvci4KKyAgICAgICAgVCogc3RhcnQoKSBjb25zdCB7IHJldHVy
biBzdGFydF87IH0KKyAgICAgICAgCisgICAgICAgIC8vIEFjY2VzcyBpbmRpdmlkdWFsIHZlY3Rv
ciBlbGVtZW50cyAtIGNoZWNrcyBib3VuZHMgaW4gZGVidWcgbW9kZS4KKyAgICAgICAgVCYgb3Bl
cmF0b3JbXShpbnQgaW5kZXgpIGNvbnN0IHsKKyAgICAgICAgICAgIEFTU0VSVCgwIDw9IGluZGV4
ICYmIGluZGV4IDwgbGVuZ3RoXyk7CisgICAgICAgICAgICByZXR1cm4gc3RhcnRfW2luZGV4XTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgVCYgZmlyc3QoKSB7IHJldHVybiBzdGFydF9b
MF07IH0KKyAgICAgICAgCisgICAgICAgIFQmIGxhc3QoKSB7IHJldHVybiBzdGFydF9bbGVuZ3Ro
XyAtIDFdOyB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIFQqIHN0YXJ0XzsKKyAg
ICAgICAgaW50IGxlbmd0aF87CisgICAgfTsKKyAgICAKKyAgICAKKyAgICAvLyBIZWxwZXIgY2xh
c3MgZm9yIGJ1aWxkaW5nIHJlc3VsdCBzdHJpbmdzIGluIGEgY2hhcmFjdGVyIGJ1ZmZlci4gVGhl
CisgICAgLy8gcHVycG9zZSBvZiB0aGUgY2xhc3MgaXMgdG8gdXNlIHNhZmUgb3BlcmF0aW9ucyB0
aGF0IGNoZWNrcyB0aGUKKyAgICAvLyBidWZmZXIgYm91bmRzIG9uIGFsbCBvcGVyYXRpb25zIGlu
IGRlYnVnIG1vZGUuCisgICAgY2xhc3MgU3RyaW5nQnVpbGRlciB7CisgICAgcHVibGljOgorICAg
ICAgICBTdHJpbmdCdWlsZGVyKGNoYXIqIGJ1ZmZlciwgaW50IHNpemUpCisgICAgICAgIDogYnVm
ZmVyXyhidWZmZXIsIHNpemUpLCBwb3NpdGlvbl8oMCkgeyB9CisgICAgICAgIAorICAgICAgICB+
U3RyaW5nQnVpbGRlcigpIHsgaWYgKCFpc19maW5hbGl6ZWQoKSkgRmluYWxpemUoKTsgfQorICAg
ICAgICAKKyAgICAgICAgaW50IHNpemUoKSBjb25zdCB7IHJldHVybiBidWZmZXJfLmxlbmd0aCgp
OyB9CisgICAgICAgIAorICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhl
IGJ1aWxkZXIuCisgICAgICAgIGludCBwb3NpdGlvbigpIGNvbnN0IHsKKyAgICAgICAgICAgIEFT
U0VSVCghaXNfZmluYWxpemVkKCkpOworICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uXzsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gUmVzZXQgdGhlIHBvc2l0aW9uLgorICAgICAg
ICB2b2lkIFJlc2V0KCkgeyBwb3NpdGlvbl8gPSAwOyB9CisgICAgICAgIAorICAgICAgICAvLyBB
ZGQgYSBzaW5nbGUgY2hhcmFjdGVyIHRvIHRoZSBidWlsZGVyLiBJdCBpcyBub3QgYWxsb3dlZCB0
byBhZGQKKyAgICAgICAgLy8gMC1jaGFyYWN0ZXJzOyB1c2UgdGhlIEZpbmFsaXplKCkgbWV0aG9k
IHRvIHRlcm1pbmF0ZSB0aGUgc3RyaW5nCisgICAgICAgIC8vIGluc3RlYWQuCisgICAgICAgIHZv
aWQgQWRkQ2hhcmFjdGVyKGNoYXIgYykgeworICAgICAgICAgICAgQVNTRVJUKGMgIT0gJ1wwJyk7
CisgICAgICAgICAgICBBU1NFUlQoIWlzX2ZpbmFsaXplZCgpICYmIHBvc2l0aW9uXyA8IGJ1ZmZl
cl8ubGVuZ3RoKCkpOworICAgICAgICAgICAgYnVmZmVyX1twb3NpdGlvbl8rK10gPSBjOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBBZGQgYW4gZW50aXJlIHN0cmluZyB0byB0aGUg
YnVpbGRlci4gVXNlcyBzdHJsZW4oKSBpbnRlcm5hbGx5IHRvCisgICAgICAgIC8vIGNvbXB1dGUg
dGhlIGxlbmd0aCBvZiB0aGUgaW5wdXQgc3RyaW5nLgorICAgICAgICB2b2lkIEFkZFN0cmluZyhj
b25zdCBjaGFyKiBzKSB7CisgICAgICAgICAgICBBZGRTdWJzdHJpbmcocywgU3RyTGVuZ3RoKHMp
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQWRkIHRoZSBmaXJzdCAnbicgY2hh
cmFjdGVycyBvZiB0aGUgZ2l2ZW4gc3RyaW5nICdzJyB0byB0aGUKKyAgICAgICAgLy8gYnVpbGRl
ci4gVGhlIGlucHV0IHN0cmluZyBtdXN0IGhhdmUgZW5vdWdoIGNoYXJhY3RlcnMuCisgICAgICAg
IHZvaWQgQWRkU3Vic3RyaW5nKGNvbnN0IGNoYXIqIHMsIGludCBuKSB7CisgICAgICAgICAgICBB
U1NFUlQoIWlzX2ZpbmFsaXplZCgpICYmIHBvc2l0aW9uXyArIG4gPCBidWZmZXJfLmxlbmd0aCgp
KTsKKyAgICAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KG4pIDw9IHN0cmxlbihz
KSk7CisgICAgICAgICAgICBtZW1jcHkoJmJ1ZmZlcl9bcG9zaXRpb25fXSwgcywgbiAqIGtDaGFy
U2l6ZSk7CisgICAgICAgICAgICBwb3NpdGlvbl8gKz0gbjsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgCisgICAgICAgIC8vIEFkZCBjaGFyYWN0ZXIgcGFkZGluZyB0byB0aGUgYnVpbGRl
ci4gSWYgY291bnQgaXMgbm9uLXBvc2l0aXZlLAorICAgICAgICAvLyBub3RoaW5nIGlzIGFkZGVk
IHRvIHRoZSBidWlsZGVyLgorICAgICAgICB2b2lkIEFkZFBhZGRpbmcoY2hhciBjLCBpbnQgY291
bnQpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAg
ICAgICAgICAgICAgIEFkZENoYXJhY3RlcihjKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgLy8gRmluYWxpemUgdGhlIHN0cmluZyBieSAwLXRlcm1pbmF0aW5n
IGl0IGFuZCByZXR1cm5pbmcgdGhlIGJ1ZmZlci4KKyAgICAgICAgY2hhciogRmluYWxpemUoKSB7
CisgICAgICAgICAgICBBU1NFUlQoIWlzX2ZpbmFsaXplZCgpICYmIHBvc2l0aW9uXyA8IGJ1ZmZl
cl8ubGVuZ3RoKCkpOworICAgICAgICAgICAgYnVmZmVyX1twb3NpdGlvbl9dID0gJ1wwJzsKKyAg
ICAgICAgICAgIC8vIE1ha2Ugc3VyZSBub2JvZHkgbWFuYWdlZCB0byBhZGQgYSAwLWNoYXJhY3Rl
ciB0byB0aGUKKyAgICAgICAgICAgIC8vIGJ1ZmZlciB3aGlsZSBidWlsZGluZyB0aGUgc3RyaW5n
LgorICAgICAgICAgICAgQVNTRVJUKHN0cmxlbihidWZmZXJfLnN0YXJ0KCkpID09IHN0YXRpY19j
YXN0PHNpemVfdD4ocG9zaXRpb25fKSk7CisgICAgICAgICAgICBwb3NpdGlvbl8gPSAtMTsKKyAg
ICAgICAgICAgIEFTU0VSVChpc19maW5hbGl6ZWQoKSk7CisgICAgICAgICAgICByZXR1cm4gYnVm
ZmVyXy5zdGFydCgpOworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAg
IFZlY3RvcjxjaGFyPiBidWZmZXJfOworICAgICAgICBpbnQgcG9zaXRpb25fOworICAgICAgICAK
KyAgICAgICAgYm9vbCBpc19maW5hbGl6ZWQoKSBjb25zdCB7IHJldHVybiBwb3NpdGlvbl8gPCAw
OyB9CisgICAgICAgIAorICAgICAgICBESVNBTExPV19JTVBMSUNJVF9DT05TVFJVQ1RPUlMoU3Ry
aW5nQnVpbGRlcik7CisgICAgfTsKKyAgICAKKyAgICAvLyBUaGUgdHlwZS1iYXNlZCBhbGlhc2lu
ZyBydWxlIGFsbG93cyB0aGUgY29tcGlsZXIgdG8gYXNzdW1lIHRoYXQgcG9pbnRlcnMgb2YKKyAg
ICAvLyBkaWZmZXJlbnQgdHlwZXMgKGZvciBzb21lIGRlZmluaXRpb24gb2YgZGlmZmVyZW50KSBu
ZXZlciBhbGlhcyBlYWNoIG90aGVyLgorICAgIC8vIFRodXMgdGhlIGZvbGxvd2luZyBjb2RlIGRv
ZXMgbm90IHdvcms6CisgICAgLy8KKyAgICAvLyBmbG9hdCBmID0gZm9vKCk7CisgICAgLy8gaW50
IGZiaXRzID0gKihpbnQqKSgmZik7CisgICAgLy8KKyAgICAvLyBUaGUgY29tcGlsZXIgJ2tub3dz
JyB0aGF0IHRoZSBpbnQgcG9pbnRlciBjYW4ndCByZWZlciB0byBmIHNpbmNlIHRoZSB0eXBlcwor
ICAgIC8vIGRvbid0IG1hdGNoLCBzbyB0aGUgY29tcGlsZXIgbWF5IGNhY2hlIGYgaW4gYSByZWdp
c3RlciwgbGVhdmluZyByYW5kb20gZGF0YQorICAgIC8vIGluIGZiaXRzLiAgVXNpbmcgQysrIHN0
eWxlIGNhc3RzIG1ha2VzIG5vIGRpZmZlcmVuY2UsIGhvd2V2ZXIgYSBwb2ludGVyIHRvCisgICAg
Ly8gY2hhciBkYXRhIGlzIGFzc3VtZWQgdG8gYWxpYXMgYW55IG90aGVyIHBvaW50ZXIuICBUaGlz
IGlzIHRoZSAnbWVtY3B5CisgICAgLy8gZXhjZXB0aW9uJy4KKyAgICAvLworICAgIC8vIEJpdF9j
YXN0IHVzZXMgdGhlIG1lbWNweSBleGNlcHRpb24gdG8gbW92ZSB0aGUgYml0cyBmcm9tIGEgdmFy
aWFibGUgb2Ygb25lCisgICAgLy8gdHlwZSBvZiBhIHZhcmlhYmxlIG9mIGFub3RoZXIgdHlwZS4g
IE9mIGNvdXJzZSB0aGUgZW5kIHJlc3VsdCBpcyBsaWtlbHkgdG8KKyAgICAvLyBiZSBpbXBsZW1l
bnRhdGlvbiBkZXBlbmRlbnQuICBNb3N0IGNvbXBpbGVycyAoZ2NjLTQuMiBhbmQgTVNWQyAyMDA1
KQorICAgIC8vIHdpbGwgY29tcGxldGVseSBvcHRpbWl6ZSBCaXRDYXN0IGF3YXkuCisgICAgLy8K
KyAgICAvLyBUaGVyZSBpcyBhbiBhZGRpdGlvbmFsIHVzZSBmb3IgQml0Q2FzdC4KKyAgICAvLyBS
ZWNlbnQgZ2NjcyB3aWxsIHdhcm4gd2hlbiB0aGV5IHNlZSBjYXN0cyB0aGF0IG1heSByZXN1bHQg
aW4gYnJlYWthZ2UgZHVlIHRvCisgICAgLy8gdGhlIHR5cGUtYmFzZWQgYWxpYXNpbmcgcnVsZS4g
IElmIHlvdSBoYXZlIGNoZWNrZWQgdGhhdCB0aGVyZSBpcyBubyBicmVha2FnZQorICAgIC8vIHlv
dSBjYW4gdXNlIEJpdENhc3QgdG8gY2FzdCBvbmUgcG9pbnRlciB0eXBlIHRvIGFub3RoZXIuICBU
aGlzIGNvbmZ1c2VzIGdjYworICAgIC8vIGVub3VnaCB0aGF0IGl0IGNhbiBubyBsb25nZXIgc2Vl
IHRoYXQgeW91IGhhdmUgY2FzdCBvbmUgcG9pbnRlciB0eXBlIHRvCisgICAgLy8gYW5vdGhlciB0
aHVzIGF2b2lkaW5nIHRoZSB3YXJuaW5nLgorICAgIHRlbXBsYXRlIDxjbGFzcyBEZXN0LCBjbGFz
cyBTb3VyY2U+CisgICAgaW5saW5lIERlc3QgQml0Q2FzdChjb25zdCBTb3VyY2UmIHNvdXJjZSkg
eworICAgICAgICAvLyBDb21waWxlIHRpbWUgYXNzZXJ0aW9uOiBzaXplb2YoRGVzdCkgPT0gc2l6
ZW9mKFNvdXJjZSkKKyAgICAgICAgLy8gQSBjb21waWxlIGVycm9yIGhlcmUgbWVhbnMgeW91ciBE
ZXN0IGFuZCBTb3VyY2UgaGF2ZSBkaWZmZXJlbnQgc2l6ZXMuCisgICAgICAgIHR5cGVkZWYgY2hh
ciBWZXJpZnlTaXplc0FyZUVxdWFsW3NpemVvZihEZXN0KSA9PSBzaXplb2YoU291cmNlKSA/IDEg
OiAtMV07CisgICAgICAgIAorICAgICAgICBEZXN0IGRlc3Q7CisgICAgICAgIG1lbWNweSgmZGVz
dCwgJnNvdXJjZSwgc2l6ZW9mKGRlc3QpKTsKKyAgICAgICAgcmV0dXJuIGRlc3Q7CisgICAgfQor
ICAgIAorICAgIHRlbXBsYXRlIDxjbGFzcyBEZXN0LCBjbGFzcyBTb3VyY2U+CisgICAgaW5saW5l
IERlc3QgQml0Q2FzdChTb3VyY2UqIHNvdXJjZSkgeworICAgICAgICByZXR1cm4gQml0Q2FzdDxE
ZXN0PihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oc291cmNlKSk7CisgICAgfQorICAgIAor
fSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCisKKyNlbmRpZiAgLy8gRE9VQkxFX0NP
TlZFUlNJT05fVVRJTFNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
d3RmLnByaSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvd3RmLnByaQppbmRleCA1ZTQ4Zjlh
NTAxZGMzOWUxZjVhYzYyOGI5NTEzOTllNjg2YjM1NDcwLi4xM2E4Mjk5NDU0YzVlMzQ5ZGM2NjM1
N2M2ZDk3Y2Q4MjBlNDlmZjQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L3d0Zi5wcmkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi93dGYucHJpCkBAIC03LDYg
KzcsMTQgQEAgU09VUkNFUyArPSBcCiAgICAgd3RmL0N1cnJlbnRUaW1lLmNwcCBcCiAgICAgd3Rm
L0RhdGVNYXRoLmNwcCBcCiAgICAgd3RmL2R0b2EuY3BwIFwKKyAgICB3dGYvZHRvYS9iaWdudW0t
ZHRvYS5jYyBcCisgICAgd3RmL2R0b2EvYmlnbnVtLmNjIFwKKyAgICB3dGYvZHRvYS9jYWNoZWQt
cG93ZXJzLmNjIFwKKyAgICB3dGYvZHRvYS9kaXktZnAuY2MgXAorICAgIHd0Zi9kdG9hL2RvdWJs
ZS1jb252ZXJzaW9uLmNjIFwKKyAgICB3dGYvZHRvYS9mYXN0LWR0b2EuY2MgXAorICAgIHd0Zi9k
dG9hL2ZpeGVkLWR0b2EuY2MgXAorICAgIHd0Zi9kdG9hL3N0cnRvZC5jYyBcCiAgICAgd3RmL0Rl
Y2ltYWxOdW1iZXIuY3BwIFwKICAgICB3dGYvRmFzdE1hbGxvYy5jcHAgXAogICAgIHd0Zi9nb2Jq
ZWN0L0dPd25QdHIuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhODI4Y2VjMDAzMjMxNzQ3MWE3YThiMTg3
MWU1M2JlMWM1ZmIxNjNmLi5hYzdkM2M0NDYxNzY1MDYxNGQ0YzA2MWNmNzc4YTA5YTNiNjcxODhh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTEtMDgtMTcgIE1hcmsgSGFobmVuYmVy
ZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KKworICAgICAgICBJbmNvcnBvcmF0ZSBuZXdlciwg
ZmFzdGVyIGR0b2EgbGlicmFyeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjYzNDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgQWRkZWQgbmV3IGR0b2EgbGlicmFy
eSBhdCBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZG91YmxlLWNvbnZlcnNpb24vLgorICAgICAg
ICBSZXBsYWNlZCBvbGQgY2FsbCB0byBkdG9hLiAgVGhlIG5ldyBsaWJyYXJ5IGlzIG11Y2ggZmFz
dGVyIHRoYW4gdGhlIG9sZCBvbmUuCisgICAgICAgIFdlIHN0aWxsIHVzZSB0aGUgb2xkIHN0cnRv
ZCwgYnV0IHdlIGNhbiBwaGFzZSB0aGF0IG91dCBldmVudHVhbGx5IGFzIHdlbGwuCisKKyAgICAg
ICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYvRGVjaW1hbE51bWJlci5oOiBSZW1vdmVkLgorICAg
ICAgICAqIGNzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmb3Jt
YXROdW1iZXIpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXplRm9yTnVtYmVyVHlwZSk6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JC
YXNpY1ZhbHVlOjp3cml0ZUpTT04pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpzZXJpYWxpemVkKToKKwogMjAxMS0wOC0x
NiAgSm9zZXBoIFBlY29yYXJvICA8am9lcGVja0B3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2
aWV3ZWQgQ2hyb21pdW0gV2luZG93cyBidWlsZCBmaXggYWZ0ZXIgcjkzMTQwLiBUYWtlIDQuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvRGVjaW1hbE51
bWJlci5oIGIvU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL0RlY2ltYWxOdW1i
ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzMzMTc0ZDU4YWNmN2QwN2M2NDVh
ZWU4YzM2NjgxM2FiMzE0MjM5Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvRGVjaW1hbE51
bWJlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jaWZuZGVmIFdlYkNvcmVfRldE
X0RlY2ltYWxOdW1iZXJfaAotI2RlZmluZSBXZWJDb3JlX0ZXRF9EZWNpbWFsTnVtYmVyX2gKLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9EZWNpbWFsTnVtYmVyLmg+Ci0jZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCmluZGV4IGJhZDJlM2NkMzBjZWY0N2ExZmQy
YThhNDI4MDA5MmNjN2RmNDExMmEuLjY4YjBjMWM3ZWE0Y2E2NjJiMmQ5NzNlNDc2NjNkYmFhZTMx
NDZmZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcApAQCAtMzYs
OCArMzYsOSBAQAogI2luY2x1ZGUgIlJlY3QuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgog
I2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+Ci0jaW5jbHVkZSA8d3RmL0RlY2ltYWxOdW1iZXIu
aD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL2R0b2EuaD4K
KyNpbmNsdWRlIDx3dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1ZmZlci5oPgogCiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQpAQCAt
NjA5LDEzICs2MTAsOCBAQCBpbnQgQ1NTUHJpbWl0aXZlVmFsdWU6OmdldElkZW50KCkgY29uc3QK
IAogc3RhdGljIFN0cmluZyBmb3JtYXROdW1iZXIoZG91YmxlIG51bWJlcikKIHsKLSAgICBEZWNp
bWFsTnVtYmVyIGRlY2ltYWwobnVtYmVyKTsKLSAgICAKLSAgICBTdHJpbmdCdWZmZXIgYnVmZmVy
KGRlY2ltYWwuYnVmZmVyTGVuZ3RoRm9yU3RyaW5nRGVjaW1hbCgpKTsKLSAgICB1bnNpZ25lZCBs
ZW5ndGggPSBkZWNpbWFsLnRvU3RyaW5nRGVjaW1hbChidWZmZXIuY2hhcmFjdGVycygpLCBidWZm
ZXIubGVuZ3RoKCkpOwotICAgIEFTU0VSVF9VTlVTRUQobGVuZ3RoLCBsZW5ndGggPT0gYnVmZmVy
Lmxlbmd0aCgpKTsKLQotICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KGJ1ZmZlcik7CisgICAgTnVt
YmVyVG9TdHJpbmdCdWZmZXIgYnVmZmVyOworICAgIHJldHVybiBTdHJpbmcobnVtYmVyVG9TdHJp
bmcobnVtYmVyLCBidWZmZXIpKTsKIH0KIAogU3RyaW5nIENTU1ByaW1pdGl2ZVZhbHVlOjpjc3NU
ZXh0KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQ
YXJzZXJJZGlvbXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklk
aW9tcy5jcHAKaW5kZXggMDU4YmI5MzM5Y2ZmZjVkMTgzZTQ5ZjdkMjU4ODI1ODczMDIwY2ExMi4u
MDM2MjIxYjIxYjE2ZjhmNTJhZTI1NzJmYmQzNDYwOTg5NmI3YWEyNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5jcHAKQEAgLTYzLDggKzYzLDcg
QEAgU3RyaW5nIHNlcmlhbGl6ZUZvck51bWJlclR5cGUoZG91YmxlIG51bWJlcikKICAgICAvLyBB
Y2NvcmRpbmcgdG8gSFRNTDUsICJ0aGUgYmVzdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgbnVtYmVy
IG4gYXMgYSBmbG9hdGluZwogICAgIC8vIHBvaW50IG51bWJlciIgaXMgYSBzdHJpbmcgcHJvZHVj
ZWQgYnkgYXBwbHlpbmcgVG9TdHJpbmcoKSB0byBuLgogICAgIE51bWJlclRvU3RyaW5nQnVmZmVy
IGJ1ZmZlcjsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBudW1iZXJUb1N0cmluZyhudW1iZXIsIGJ1
ZmZlcik7Ci0gICAgcmV0dXJuIFN0cmluZyhidWZmZXIsIGxlbmd0aCk7CisgICAgcmV0dXJuIFN0
cmluZyhudW1iZXJUb1N0cmluZyhudW1iZXIsIGJ1ZmZlcikpOwogfQogCiBib29sIHBhcnNlVG9E
b3VibGVGb3JOdW1iZXJUeXBlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBkb3VibGUqIHJlc3VsdCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKaW5kZXggOTJi
YWJkNjdlOThkNGFjNTkwYzM1NTFiYTRhZjg2YWY5OTc0OGJmNi4uNmE0ZGE5M2E4MWY4NzNhMmIy
OGRmNmYwNGViMmUwYjcwNjBlYjkwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclZhbHVlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclZhbHVlcy5jcHAKQEAgLTMzLDcgKzMzLDcgQEAKIAogI2lmIEVOQUJMRShJTlNQRUNU
T1IpCiAKLSNpbmNsdWRlIDx3dGYvRGVjaW1hbE51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi9kdG9h
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjI2LDIzICs2MjYsMTEgQEAgdm9pZCBJ
bnNwZWN0b3JCYXNpY1ZhbHVlOjp3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25z
dAogICAgICAgICAgICAgb3V0cHV0LT5hcHBlbmQoZmFsc2VTdHJpbmcsIDUpOwogICAgIH0gZWxz
ZSBpZiAodHlwZSgpID09IFR5cGVOdW1iZXIpIHsKICAgICAgICAgTnVtYmVyVG9TdHJpbmdCdWZm
ZXIgYnVmZmVyOwotICAgICAgICBpZiAoIWlzZmluaXRlKG1fZG91YmxlVmFsdWUpKSB7Ci0gICAg
ICAgICAgICBvdXRwdXQtPmFwcGVuZChudWxsU3RyaW5nLCA0KTsKLSAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgY29uc3QgY2hhciogZG91YmxlU3RyaW5nID0gbnVtYmVyVG9TdHJpbmcobV9k
b3VibGVWYWx1ZSwgYnVmZmVyKTsKKyAgICAgICAgd2hpbGUgKCpkb3VibGVTdHJpbmcpIHsKKyAg
ICAgICAgICAgIG91dHB1dC0+YXBwZW5kKFVDaGFyKCpkb3VibGVTdHJpbmcpKTsKKyAgICAgICAg
ICAgIGRvdWJsZVN0cmluZysrOwogICAgICAgICB9Ci0gICAgICAgIERlY2ltYWxOdW1iZXIgZGVj
aW1hbCA9IG1fZG91YmxlVmFsdWU7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7Ci0gICAg
ICAgIGlmIChkZWNpbWFsLmJ1ZmZlckxlbmd0aEZvclN0cmluZ0RlY2ltYWwoKSA+IFdURjo6TnVt
YmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgpIHsKLSAgICAgICAgICAgIC8vIE5vdCBlbm91Z2ggcm9v
bSBmb3IgZGVjaW1hbC4gVXNlIGV4cG9uZW50aWFsIGZvcm1hdC4KLSAgICAgICAgICAgIGlmIChk
ZWNpbWFsLmJ1ZmZlckxlbmd0aEZvclN0cmluZ0V4cG9uZW50aWFsKCkgPiBXVEY6Ok51bWJlclRv
U3RyaW5nQnVmZmVyTGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgLy8gRmFsbGJhY2sgZm9yIGFu
IGFibm9ybWFsIGNhc2UgaWYgaXQncyB0b28gbGl0dGxlIGV2ZW4gZm9yIGV4cG9uZW50aWFsLgot
ICAgICAgICAgICAgICAgIG91dHB1dC0+YXBwZW5kKCJOYU4iLCAzKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZW5ndGggPSBkZWNpbWFsLnRv
U3RyaW5nRXhwb25lbnRpYWwoYnVmZmVyLCBXVEY6Ok51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3Ro
KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBsZW5ndGggPSBkZWNpbWFsLnRvU3RyaW5n
RGVjaW1hbChidWZmZXIsIFdURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgpOwotICAgICAg
ICBvdXRwdXQtPmFwcGVuZChidWZmZXIsIGxlbmd0aCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKaW5kZXggNDhmNzUyMDMwMTZiZjdmNTA2
YzgxOGU0YzQxYTg3M2RmZjNjZWI4Yi4uNWVjZGMwZWU5YWZhNWUxNTJjMTIxZGQ3NjdjYTMzY2Y4
MDVkMGUxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcApA
QCAtMjgsOSArMjgsMTAgQEAKIAogI2luY2x1ZGUgIkhhc2hUb29scy5oIgogI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0RlY2ltYWxOdW1iZXIuaD4KICNpbmNsdWRl
IDx3dGYvSGV4TnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRl
IDx3dGYvZHRvYS5oPgorI2luY2x1ZGUgPHd0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3Rk
OwpAQCAtMjEwLDggKzIxMSwxMSBAQCBTdHJpbmcgQ29sb3I6OnNlcmlhbGl6ZWQoKSBjb25zdAog
ICAgICAgICByZXN1bHQuYXBwZW5kKCcwJyk7CiAgICAgZWxzZSB7CiAgICAgICAgIE51bWJlclRv
U3RyaW5nQnVmZmVyIGJ1ZmZlcjsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gRGVjaW1hbE51
bWJlcihhbHBoYSgpIC8gMjU1LjApLnRvU3RyaW5nRGVjaW1hbChidWZmZXIsIFdURjo6TnVtYmVy
VG9TdHJpbmdCdWZmZXJMZW5ndGgpOwotICAgICAgICByZXN1bHQuYXBwZW5kKGJ1ZmZlciwgbGVu
Z3RoKTsKKyAgICAgICAgY29uc3QgY2hhciAqZG91YmxlU3RyaW5nID0gbnVtYmVyVG9TdHJpbmco
YWxwaGEoKSAvIDI1NS4wLCBidWZmZXIpOworICAgICAgICB3aGlsZSAoKmRvdWJsZVN0cmluZykg
eworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChVQ2hhcigqZG91YmxlU3RyaW5nKSk7CisgICAg
ICAgICAgICBkb3VibGVTdHJpbmcrKzsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHJlc3VsdC5h
cHBlbmQoJyknKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104207</attachid>
            <date>2011-08-17 11:46:18 -0700</date>
            <delta_ts>2011-08-17 12:17:59 -0700</delta_ts>
            <desc>Fixing build errors</desc>
            <filename>bug-66346-20110817114621.patch</filename>
            <type>text/plain</type>
            <size>350156</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTMxNjYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDMy
ZDIwZTMwYTI0YWRlZDI1NmRhMmE2MjVlNDFhM2IwOWRkNmE4MGEuLjZjMzQxNDBiMTMzMTMxM2Y3
ZTliNDdmNGI5YTI5ODhkMjM0ZTI4MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDExOCBAQAorMjAxMS0wOC0xNyAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBw
bGUuY29tPgorCisgICAgICAgIEluY29ycG9yYXRlIG5ld2VyLCBmYXN0ZXIgZHRvYSBsaWJyYXJ5
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM0Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIG5l
dyBkdG9hIGxpYnJhcnkgYXQgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2RvdWJsZS1jb252ZXJz
aW9uLy4KKyAgICAgICAgUmVwbGFjZWQgb2xkIGNhbGwgdG8gZHRvYS4gIFRoZSBuZXcgbGlicmFy
eSBpcyBtdWNoIGZhc3RlciB0aGFuIHRoZSBvbGQgb25lLgorICAgICAgICBXZSBzdGlsbCB1c2Ug
dGhlIG9sZCBzdHJ0b2QsIGJ1dCB3ZSBjYW4gcGhhc2UgdGhhdCBvdXQgZXZlbnR1YWxseSBhcyB3
ZWxsLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS5leHA6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwOgorICAg
ICAgICAoSlNDOjppbml0aWFsaXplVGhyZWFkaW5nT25jZSk6CisgICAgICAgICogcnVudGltZS9O
dW1iZXJQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1bmNUb0V4cG9u
ZW50aWFsKToKKyAgICAgICAgKEpTQzo6bnVtYmVyUHJvdG9GdW5jVG9GaXhlZCk6CisgICAgICAg
IChKU0M6Om51bWJlclByb3RvRnVuY1RvUHJlY2lzaW9uKToKKyAgICAgICAgKiBydW50aW1lL1VT
dHJpbmcuY3BwOgorICAgICAgICAoSlNDOjpVU3RyaW5nOjpudW1iZXIpOgorICAgICAgICAqIHd0
Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvRGVjaW1hbE51bWJlci5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogd3RmL0RlY2ltYWxOdW1iZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3
dGYvZHRvYS5jcHA6CisgICAgICAgIChXVEY6Om51bWJlclRvU3RyaW5nKToKKyAgICAgICAgKiB3
dGYvZHRvYS5oOgorICAgICAgICAqIHd0Zi9kdG9hL0NPUFlJTkc6IEFkZGVkLgorICAgICAgICAq
IHd0Zi9kdG9hL0xJQ0VOU0U6IEFkZGVkLgorICAgICAgICAqIHd0Zi9kdG9hL1JFQURNRTogQWRk
ZWQuCisgICAgICAgICogd3RmL2R0b2EvYmlnbnVtLWR0b2EuY2M6IEFkZGVkLgorICAgICAgICAq
IHd0Zi9kdG9hL2JpZ251bS1kdG9hLmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9kdG9hL2JpZ251
bS5jYzogQWRkZWQuCisgICAgICAgICogd3RmL2R0b2EvYmlnbnVtLmg6IEFkZGVkLgorICAgICAg
ICAoZG91YmxlX2NvbnZlcnNpb246OkJpZ251bTo6VGltZXMxMCk6CisgICAgICAgIChkb3VibGVf
Y29udmVyc2lvbjo6QmlnbnVtOjpFcXVhbCk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6
QmlnbnVtOjpMZXNzRXF1YWwpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OkJpZ251bTo6
TGVzcyk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6QmlnbnVtOjpQbHVzRXF1YWwpOgor
ICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OkJpZ251bTo6UGx1c0xlc3NFcXVhbCk6CisgICAg
ICAgIChkb3VibGVfY29udmVyc2lvbjo6QmlnbnVtOjpQbHVzTGVzcyk6CisgICAgICAgIChkb3Vi
bGVfY29udmVyc2lvbjo6QmlnbnVtOjpFbnN1cmVDYXBhY2l0eSk6CisgICAgICAgIChkb3VibGVf
Y29udmVyc2lvbjo6QmlnbnVtOjpCaWdpdExlbmd0aCk6CisgICAgICAgICogd3RmL2R0b2EvY2Fj
aGVkLXBvd2Vycy5jYzogQWRkZWQuCisgICAgICAgICogd3RmL2R0b2EvY2FjaGVkLXBvd2Vycy5o
OiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9kaXktZnAuY2M6IEFkZGVkLgorICAgICAgICAq
IHd0Zi9kdG9hL2RpeS1mcC5oOiBBZGRlZC4KKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpE
aXlGcDo6RGl5RnApOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OkRpeUZwOjpTdWJ0cmFj
dCk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6RGl5RnA6Ok1pbnVzKToKKyAgICAgICAg
KGRvdWJsZV9jb252ZXJzaW9uOjpEaXlGcDo6VGltZXMpOgorICAgICAgICAoZG91YmxlX2NvbnZl
cnNpb246OkRpeUZwOjpOb3JtYWxpemUpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OkRp
eUZwOjpmKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpEaXlGcDo6ZSk6CisgICAgICAg
IChkb3VibGVfY29udmVyc2lvbjo6RGl5RnA6OnNldF9mKToKKyAgICAgICAgKGRvdWJsZV9jb252
ZXJzaW9uOjpEaXlGcDo6c2V0X2UpOgorICAgICAgICAqIHd0Zi9kdG9hL2RvdWJsZS1jb252ZXJz
aW9uLmNjOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5oOiBB
ZGRlZC4KKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGVUb1N0cmluZ0NvbnZlcnRl
cjo6RG91YmxlVG9TdHJpbmdDb252ZXJ0ZXIpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246
OlN0cmluZ1RvRG91YmxlQ29udmVydGVyOjpTdHJpbmdUb0RvdWJsZUNvbnZlcnRlcik6CisgICAg
ICAgICogd3RmL2R0b2EvZG91YmxlLmg6IEFkZGVkLgorICAgICAgICAoZG91YmxlX2NvbnZlcnNp
b246OmRvdWJsZV90b191aW50NjQpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OnVpbnQ2
NF90b19kb3VibGUpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZTo6RG91Ymxl
KToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGU6OkFzRGl5RnApOgorICAgICAg
ICAoZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZTo6QXNOb3JtYWxpemVkRGl5RnApOgorICAgICAg
ICAoZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZTo6QXNVaW50NjQpOgorICAgICAgICAoZG91Ymxl
X2NvbnZlcnNpb246OkRvdWJsZTo6TmV4dERvdWJsZSk6CisgICAgICAgIChkb3VibGVfY29udmVy
c2lvbjo6RG91YmxlOjpFeHBvbmVudCk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6RG91
YmxlOjpTaWduaWZpY2FuZCk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpJ
c0Rlbm9ybWFsKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGU6OklzU3BlY2lh
bCk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpJc05hbik6CisgICAgICAg
IChkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpJc0luZmluaXRlKToKKyAgICAgICAgKGRvdWJs
ZV9jb252ZXJzaW9uOjpEb3VibGU6OlNpZ24pOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246
OkRvdWJsZTo6VXBwZXJCb3VuZGFyeSk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6RG91
YmxlOjpOb3JtYWxpemVkQm91bmRhcmllcyk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6
RG91YmxlOjp2YWx1ZSk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpTaWdu
aWZpY2FuZFNpemVGb3JPcmRlck9mTWFnbml0dWRlKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJz
aW9uOjpEb3VibGU6OkluZmluaXR5KToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpEb3Vi
bGU6Ok5hTik6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpEaXlGcFRvVWlu
dDY0KToKKyAgICAgICAgKiB3dGYvZHRvYS9mYXN0LWR0b2EuY2M6IEFkZGVkLgorICAgICAgICAq
IHd0Zi9kdG9hL2Zhc3QtZHRvYS5oOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9maXhlZC1k
dG9hLmNjOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9maXhlZC1kdG9hLmg6IEFkZGVkLgor
ICAgICAgICAqIHd0Zi9kdG9hL3N0cnRvZC5jYzogQWRkZWQuCisgICAgICAgICogd3RmL2R0b2Ev
c3RydG9kLmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9kdG9hL3V0aWxzLmg6IEFkZGVkLgorICAg
ICAgICAoZG91YmxlX2NvbnZlcnNpb246Ok1heCk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lv
bjo6TWluKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpTdHJMZW5ndGgpOgorICAgICAg
ICAoZG91YmxlX2NvbnZlcnNpb246OlZlY3Rvcjo6VmVjdG9yKToKKyAgICAgICAgKGRvdWJsZV9j
b252ZXJzaW9uOjpWZWN0b3I6OlN1YlZlY3Rvcik6CisgICAgICAgIChkb3VibGVfY29udmVyc2lv
bjo6VmVjdG9yOjpsZW5ndGgpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OlZlY3Rvcjo6
aXNfZW1wdHkpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OlZlY3Rvcjo6c3RhcnQpOgor
ICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OlZlY3Rvcjo6b3BlcmF0b3JbXSk6CisgICAgICAg
IChkb3VibGVfY29udmVyc2lvbjo6VmVjdG9yOjpmaXJzdCk6CisgICAgICAgIChkb3VibGVfY29u
dmVyc2lvbjo6VmVjdG9yOjpsYXN0KToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpTdHJp
bmdCdWlsZGVyOjpTdHJpbmdCdWlsZGVyKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpT
dHJpbmdCdWlsZGVyOjp+U3RyaW5nQnVpbGRlcik6CisgICAgICAgIChkb3VibGVfY29udmVyc2lv
bjo6U3RyaW5nQnVpbGRlcjo6c2l6ZSk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6U3Ry
aW5nQnVpbGRlcjo6cG9zaXRpb24pOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OlN0cmlu
Z0J1aWxkZXI6OlJlc2V0KToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdCdWls
ZGVyOjpBZGRDaGFyYWN0ZXIpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OlN0cmluZ0J1
aWxkZXI6OkFkZFN0cmluZyk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6U3RyaW5nQnVp
bGRlcjo6QWRkU3Vic3RyaW5nKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdC
dWlsZGVyOjpBZGRQYWRkaW5nKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdC
dWlsZGVyOjpGaW5hbGl6ZSk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6U3RyaW5nQnVp
bGRlcjo6aXNfZmluYWxpemVkKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpCaXRDYXN0
KToKKyAgICAgICAgKiB3dGYvd3RmLnByaToKKwogMjAxMS0wOC0xNSAgR2F2aW4gQmFycmFjbG91
Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MjYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCmluZGV4IDM4YmQ5OWRlMzczOTg3NWY4OTUxYWMyNTliN2VkMDQwNjY2NjVj
YmQuLjYyOGM0ZTRjNjZiMzk5YzM5ZGY2ZWFkNWEwODc1MzQ1YjBiOTYxYmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC00NjAsOSArNDYwLDI1IEBAIGph
dmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ3Vy
cmVudFRpbWUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EYXRlTWF0aC5jcHAgXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGF0ZU1hdGguaCBcCi0JU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9EZWNpbWFsTnVtYmVyLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
RGVjaW1hbE51bWJlci5jcHAgXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGVjb2Rlci5o
IFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvYmlnbnVtLWR0b2EuY2MgXAor
ICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9iaWdudW0uY2MgXAorICAgIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmNjIFwKKyAgICBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZGl5LWZwLmNjIFwKKyAgICBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uY2MgXAorICAgIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvZHRvYS9mYXN0LWR0b2EuY2MgXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvZHRvYS9maXhlZC1kdG9hLmNjIFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L2R0b2Evc3RydG9kLmNjIFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvYmln
bnVtLWR0b2EuaCBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS5o
IFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvY2FjaGVkLXBvd2Vycy5oIFwK
KyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZGl5LWZwLmggXAorICAgIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5oIFwKKyAgICBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZG91YmxlLmggXAorICAgIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvZHRvYS9mYXN0LWR0b2EuaCBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9kdG9hL2ZpeGVkLWR0b2EuaCBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9k
dG9hL3N0cnRvZC5oIFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvdXRpbHMu
aCBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EZWNvZGVyLmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvRGVxdWUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9E
aXNhbGxvd0NUeXBlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRG91Ymx5TGlua2Vk
TGlzdC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5leHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCmluZGV4IGU1
NWY2OWQ5ZTNhNGUxOTFkYTY2MGI0NWY4OGNmYjI2ZDViYWRhYTMuLjZkMzEzYjMxZmIxZjlhYzc5
ODk4MTI4Y2Q3MWU5ZDQ3NDljMjhhNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5leHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLmV4cApAQCAtOTksNiArOTksNyBAQCBfV1RGUmVwb3J0QmFja3RyYWNlCiBfV1RGUmVw
b3J0RXJyb3IKIF9XVEZSZXBvcnRGYXRhbEVycm9yCiBfX1pOMTRPcGFxdWVKU1N0cmluZzZjcmVh
dGVFUktOM0pTQzdVU3RyaW5nRQorX19aTjE3ZG91YmxlX2NvbnZlcnNpb24yM0RvdWJsZVRvU3Ry
aW5nQ29udmVydGVyMTlFY21hU2NyaXB0Q29udmVydGVyRXYKIF9fWk4zSlNDMTBIYW5kbGVIZWFw
MTJ3cml0ZUJhcnJpZXJFUE5TXzdKU1ZhbHVlRVJLUzFfCiBfX1pOM0pTQzEwSGFuZGxlSGVhcDRn
cm93RXYKIF9fWk4zSlNDMTBJZGVudGlmaWVyMTFhZGRTbG93Q2FzZUVQTlNfMTJKU0dsb2JhbERh
dGFFUE4zV1RGMTBTdHJpbmdJbXBsRQpAQCAtMzgzLDggKzM4NCw2IEBAIF9fWk4zV1RGMTFPU0Fs
bG9jYXRvcjE2cmVzZXJ2ZUFuZENvbW1pdEVtTlMwXzVVc2FnZUViYmIKIF9fWk4zV1RGMTFPU0Fs
bG9jYXRvcjE4cmVsZWFzZURlY29tbWl0dGVkRVB2bQogX19aTjNXVEYxMWNvbW1lbnRBdG9tRQog
X19aTjNXVEYxMWN1cnJlbnRUaW1lRXYKLV9fWk4zV1RGMTFkdG9hUm91bmREUEVQY2RpUmJSaVJq
Ci1fX1pOM1dURjExZHRvYVJvdW5kU0ZFUGNkaVJiUmlSagogX19aTjNXVEYxMWVtcHR5U3RyaW5n
RXYKIF9fWk4zV1RGMTFmYXN0UmVhbGxvY0VQdm0KIF9fWk4zV1RGMTJBdG9taWNTdHJpbmcxMWFk
ZFNsb3dDYXNlRVBOU18xMFN0cmluZ0ltcGxFCkBAIC00MTMsNyArNDEyLDcgQEAgX19aTjNXVEYx
M2N1cnJlbnRUaHJlYWRFdgogX19aTjNXVEYxM3RyeUZhc3RDYWxsb2NFbW0KIF9fWk4zV1RGMTN0
cnlGYXN0TWFsbG9jRW0KIF9fWk4zV1RGMTRmYXN0TWFsbG9jU2l6ZUVQS3YKLV9fWk4zV1RGMTRu
dW1iZXJUb1N0cmluZ0VkUHQKK19fWk4zV1RGMTRudW1iZXJUb1N0cmluZ0VkUGMKIF9fWk4zV1RG
MTR0cnlGYXN0UmVhbGxvY0VQdm0KIF9fWk4zV1RGMTVUaHJlYWRDb25kaXRpb240d2FpdEVSTlNf
NU11dGV4RQogX19aTjNXVEYxNVRocmVhZENvbmRpdGlvbjZzaWduYWxFdgpAQCAtNDY1LDcgKzQ2
NCw2IEBAIF9fWk4zV1RGM01ENUMxRXYKIF9fWk4zV1RGNFNIQTExMWNvbXB1dGVIYXNoRVJOU182
VmVjdG9ySWhMbTIwRUVFCiBfX1pOM1dURjRTSEExOGFkZEJ5dGVzRVBLaG0KIF9fWk4zV1RGNFNI
QTFDMUV2Ci1fX1pOM1dURjRkdG9hRVBjZFJiUmlSagogX19aTjNXVEY1TXV0ZXg0bG9ja0V2CiBf
X1pOM1dURjVNdXRleDZ1bmxvY2tFdgogX19aTjNXVEY1TXV0ZXg3dHJ5TG9ja0V2CkBAIC01MjIs
NiArNTIwLDcgQEAgX19aTjNXVEY5eG1sbnNBdG9tRQogX19aTjNXVEZlcUVSS05TXzEyQXRvbWlj
U3RyaW5nRVBLYwogX19aTjNXVEZlcUVSS05TXzEyQXRvbWljU3RyaW5nRVJLTlNfNlZlY3Rvckl0
TG0wRUVFCiBfX1pOM1dURmVxRVJLTlNfN0NTdHJpbmdFUzJfCitfX1pOSzE3ZG91YmxlX2NvbnZl
cnNpb24yM0RvdWJsZVRvU3RyaW5nQ29udmVydGVyMTBUb1Nob3J0ZXN0RWRQTlNfMTNTdHJpbmdC
dWlsZGVyRQogX19aTkszSlNDMTBKU0Z1bmN0aW9uMjNpc0hvc3RGdW5jdGlvbk5vbklubGluZUV2
CiBfX1pOSzNKU0MxMUludGVycHJldGVyMTRyZXRyaWV2ZUNhbGxlckVQTlNfOUV4ZWNTdGF0ZUVQ
TlNfMTBKU0Z1bmN0aW9uRQogX19aTkszSlNDMTFJbnRlcnByZXRlcjE4cmV0cmlldmVMYXN0Q2Fs
bGVyRVBOU185RXhlY1N0YXRlRVJpUmxSTlNfN1VTdHJpbmdFUk5TXzdKU1ZhbHVlRQpAQCAtNTc1
LDEwICs1NzQsNiBAQCBfX1pOSzNKU0M4SlNTdHJpbmcxMXJlc29sdmVSb3BlRVBOU185RXhlY1N0
YXRlRQogX19aTkszSlNDOUhhc2hUYWJsZTExY3JlYXRlVGFibGVFUE5TXzEySlNHbG9iYWxEYXRh
RQogX19aTkszSlNDOUhhc2hUYWJsZTExZGVsZXRlVGFibGVFdgogX19aTkszV1RGMTJBdG9taWNT
dHJpbmc1bG93ZXJFdgotX19aTkszV1RGMTNEZWNpbWFsTnVtYmVyMTV0b1N0cmluZ0RlY2ltYWxF
UHRqCi1fX1pOSzNXVEYxM0RlY2ltYWxOdW1iZXIxOXRvU3RyaW5nRXhwb25lbnRpYWxFUHRqCi1f
X1pOSzNXVEYxM0RlY2ltYWxOdW1iZXIyOGJ1ZmZlckxlbmd0aEZvclN0cmluZ0RlY2ltYWxFdgot
X19aTkszV1RGMTNEZWNpbWFsTnVtYmVyMzJidWZmZXJMZW5ndGhGb3JTdHJpbmdFeHBvbmVudGlh
bEV2CiBfX1pOSzNXVEY2U3RyaW5nMTF0b0ludFN0cmljdEVQYmkKIF9fWk5LM1dURjZTdHJpbmcx
MnRvVUludFN0cmljdEVQYmkKIF9fWk5LM1dURjZTdHJpbmcxM3RvSW50NjRTdHJpY3RFUGJpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGRlNjBhN2Y2ZGU0NzAzYzA0OTMyZTZiYWIx
ZjZiNGE5NzZjNTM3NWEuLmRmMjEyYzlmNGFmZjRmZTQ3NmZhYzk4ZjUyMTQyYTliZjkxYjUxYTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00OCw3ICs0OCw2IEBACiAJCTBCREZG
QUUwMEZDNjE5MjkwMEQ2OUVGNCAvKiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBCREZGQUQ0MEZDNjE3MTAwMEQ2
OUVGNCAvKiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwQkRGRkFFMTBGQzYxOTMxMDBENjlFRjQgLyogT3du
RmFzdE1hbGxvY1B0ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEJERkZBRDEwRkM2MTZFQzAwRDY5RUY0IC8qIE93bkZhc3RNYWxsb2NQdHIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwQkYyOEEyOTEx
QTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQkYyOEEyODExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxp
bWl0cy5jcHAgKi87IH07Ci0JCTBGMjk0NzlDMTI2RTY5OEMwMEIzQUJGNSAvKiBEZWNpbWFsTnVt
YmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
Mjk0NzlCMTI2RTY5OEMwMEIzQUJGNSAvKiBEZWNpbWFsTnVtYmVyLmNwcCAqLzsgfTsKIAkJMTQw
MDA2NzcxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMgLyog
T1NBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkxNDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY5MjEy
QTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi87IH07CiAJCTE0MDU2NkM0
MTA3RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4OTRENTBGQUZCQTJEMDAwMDE4NjUg
LyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAtMjQ4LDcgKzI0Nyw2IEBACiAJCTg2
MDE2MUU2MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODYwMTYxRTIwRjNBODND
MTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggKi87IH07CiAJCTg2MjZCRUNG
MTE5MjhFMzkwMDc4MkZBQiAvKiBTdHJpbmdTdGF0aWNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MjZCRUNFMTE5MjhFMzkwMDc4MkZBQiAvKiBT
dHJpbmdTdGF0aWNzLmNwcCAqLzsgfTsKIAkJODYyN0U1RUMxMUYxMjgxOTAwQTMxM0I1IC8qIFBh
Z2VBbGxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4NjI3RTVFQTExRjEyODE5MDBBMzEzQjUgLyogUGFnZUFsbG9jYXRpb24uaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk4NjJBRjRCNjEyMjM5
QzdCMDAyNEU1QjggLyogRGVjaW1hbE51bWJlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODYyQUY0QjUxMjIzOUM3QjAwMjRFNUI4IC8qIERlY2ltYWxO
dW1iZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk4NjNCMjNFMDBGQzYxMTg5MDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjNCMjNERjBGQzYw
RTYyMDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODY0MzhGQzQxMjY1NTAzRTAwRTBERkNB
IC8qIFN0cmluZ0J1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODY0MzhGQzMxMjY1NTAzRTAwRTBERkNBIC8qIFN0cmluZ0J1aWxkZXIuY3Bw
ICovOyB9OwogCQk4NjU2NTc0MjExNUJFM0RBMDAyOTFGNDAgLyogQ1N0cmluZy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjU2NTc0MDExNUJFM0RB
MDAyOTFGNDAgLyogQ1N0cmluZy5jcHAgKi87IH07CkBAIC01OTMsNiArNTkxLDI1IEBACiAJCUJD
RkQ4QzkyMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGRDhDOTAwRUVCMkVFNzAwMjgzODQ4IC8q
IEp1bXBUYWJsZS5jcHAgKi87IH07CiAJCUJDRkQ4QzkzMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1w
VGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
RkQ4QzkxMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuaCAqLzsgfTsKIAkJQzBBMjcyNjMw
RTUwQTA2MzAwRTk2RTE1IC8qIE5vdEZvdW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDMEEyNzIzRjBFNTA5RjFFMDBFOTZFMTUgLyogTm90Rm91bmQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDMjJD
NTJGMTEzRkFGNkVGMDBCN0RDMEQgLyogYmlnbnVtLWR0b2EuY2MgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTI5MDEzRkFGNkVGMDBCN0RDMEQgLyog
YmlnbnVtLWR0b2EuY2MgKi87IH07CisJCUMyMkM1MkYyMTNGQUY2RUYwMEI3REMwRCAvKiBiaWdu
dW0tZHRvYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzIyQzUyOTExM0ZBRjZFRjAwQjdEQzBEIC8qIGJpZ251bS1kdG9hLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIyQzUyRjMxM0ZBRjZFRjAwQjdE
QzBEIC8qIGJpZ251bS5jYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEMyMkM1MjkyMTNGQUY2RUYwMEI3REMwRCAvKiBiaWdudW0uY2MgKi87IH07CisJCUMy
MkM1MkY0MTNGQUY2RUYwMEI3REMwRCAvKiBiaWdudW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1MjkzMTNGQUY2RUYwMEI3REMwRCAvKiBiaWdu
dW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlD
MjJDNTJGNTEzRkFGNkVGMDBCN0RDMEQgLyogY2FjaGVkLXBvd2Vycy5jYyBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1Mjk0MTNGQUY2RUYwMEI3REMw
RCAvKiBjYWNoZWQtcG93ZXJzLmNjICovOyB9OworCQlDMjJDNTJGNjEzRkFGNkVGMDBCN0RDMEQg
LyogY2FjaGVkLXBvd2Vycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzIyQzUyOTUxM0ZBRjZFRjAwQjdEQzBEIC8qIGNhY2hlZC1wb3dlcnMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDMjJDNTJGNzEz
RkFGNkVGMDBCN0RDMEQgLyogZGl5LWZwLmNjIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQzIyQzUyOTcxM0ZBRjZFRjAwQjdEQzBEIC8qIGRpeS1mcC5jYyAq
LzsgfTsKKwkJQzIyQzUyRjgxM0ZBRjZFRjAwQjdEQzBEIC8qIGRpeS1mcC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyQzUyOTgxM0ZBRjZFRjAwQjdE
QzBEIC8qIGRpeS1mcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCUMyMkM1MkY5MTNGQUY2RUYwMEI3REMwRCAvKiBkb3VibGUtY29udmVyc2lvbi5j
YyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1Mjk5
MTNGQUY2RUYwMEI3REMwRCAvKiBkb3VibGUtY29udmVyc2lvbi5jYyAqLzsgfTsKKwkJQzIyQzUy
RkExM0ZBRjZFRjAwQjdEQzBEIC8qIGRvdWJsZS1jb252ZXJzaW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTI5QTEzRkFGNkVGMDBCN0RDMEQg
LyogZG91YmxlLWNvbnZlcnNpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQlDMjJDNTJGQjEzRkFGNkVGMDBCN0RDMEQgLyogZG91YmxlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTI5QjEzRkFG
NkVGMDBCN0RDMEQgLyogZG91YmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJQzIyQzUyRkMxM0ZBRjZFRjAwQjdEQzBEIC8qIGZhc3QtZHRvYS5j
YyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1MjlD
MTNGQUY2RUYwMEI3REMwRCAvKiBmYXN0LWR0b2EuY2MgKi87IH07CisJCUMyMkM1MkZEMTNGQUY2
RUYwMEI3REMwRCAvKiBmYXN0LWR0b2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEMyMkM1MjlEMTNGQUY2RUYwMEI3REMwRCAvKiBmYXN0LWR0b2EuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDMjJDNTJG
RTEzRkFGNkVGMDBCN0RDMEQgLyogZml4ZWQtZHRvYS5jYyBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1MjlFMTNGQUY2RUYwMEI3REMwRCAvKiBmaXhl
ZC1kdG9hLmNjICovOyB9OworCQlDMjJDNTJGRjEzRkFGNkVGMDBCN0RDMEQgLyogZml4ZWQtZHRv
YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyQzUy
OUYxM0ZBRjZFRjAwQjdEQzBEIC8qIGZpeGVkLWR0b2EuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDMjJDNTMwMDEzRkFGNkVGMDBCN0RDMEQgLyog
TWFrZWZpbGUgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
MjJDNTJBMTEzRkFGNkVGMDBCN0RDMEQgLyogTWFrZWZpbGUgKi87IH07CisJCUMyMkM1MzEzMTNG
QUY2RUYwMEI3REMwRCAvKiBzdHJ0b2QuY2MgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTJCOTEzRkFGNkVGMDBCN0RDMEQgLyogc3RydG9kLmNjICov
OyB9OworCQlDMjJDNTMxNDEzRkFGNkVGMDBCN0RDMEQgLyogc3RydG9kLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTJCQTEzRkFGNkVGMDBCN0RD
MEQgLyogc3RydG9kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJQzIyQzUzMTUxM0ZBRjZFRjAwQjdEQzBEIC8qIHV0aWxzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTJCQjEzRkFGNkVGMDBCN0RD
MEQgLyogdXRpbHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlEN0E0NkE0RjEzMzhGRkVBMDBFRDY5NUMgLyogRHluYW1pY0Fubm90YXRpb25zLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBENzVBRjU5NjEy
RjhDQjk1MDBGQzBBREYgLyogRHluYW1pY0Fubm90YXRpb25zLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJREQzNzdDQkMxMjA3MkMxODAwNkEyNTE3
IC8qIEJpdG1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gREQzNzdDQkIxMjA3MkMxODAwNkEyNTE3IC8qIEJpdG1hcC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCURERjdBQkQ0MTFGNjBFRDIwMDEwOEUz
NiAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IERERjdBQkQyMTFGNjBFRDIwMDEwOEUzNiAvKiBHQ0FjdGl2aXR5Q2Fs
bGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtNzI4LDcgKzc0NSw2IEBACiAJCTBCREZGQUQxMEZDNjE2RUMwMEQ2OUVGNCAvKiBPd25GYXN0
TWFsbG9jUHRyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE93bkZhc3RNYWxs
b2NQdHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEJERkZBRDQwRkM2MTcxMDAw
RDY5RUY0IC8qIENyb3NzVGhyZWFkUmVmQ291bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2l6ZUxpbWl0cy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMjk0NzlCMTI2RTY5OEMwMEIzQUJGNSAvKiBEZWNpbWFs
TnVtYmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlY2ltYWxO
dW1iZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAwMDY3NjEyQTZGNzgz
MDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gT1NBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2OTIx
MkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gT1NBbGxvY2F0b3JQb3NpeC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTE0MEQxN0Q2MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQmFzZVByaXZhdGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTkzNyw3ICs5NTMsNiBAQAogCQk4NjAxNjFFMjBG
M0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYyNkJFQ0UxMTkyOEUzOTAwNzgyRkFCIC8qIFN0cmluZ1N0
YXRpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU3RyaW5nU3Rh
dGljcy5jcHA7IHBhdGggPSB0ZXh0L1N0cmluZ1N0YXRpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk4NjI3RTVFQTExRjEyODE5MDBBMzEzQjUgLyogUGFnZUFsbG9jYXRpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFnZUFsbG9jYXRpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODYyQUY0QjUxMjIzOUM3QjAwMjRFNUI4IC8qIERl
Y2ltYWxOdW1iZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVjaW1hbE51
bWJlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjNCMjNERjBGQzYwRTYyMDA3
MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk4NjQzOEZDMzEyNjU1MDNFMDBFMERGQ0EgLyogU3RyaW5nQnVpbGRlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTdHJpbmdCdWlsZGVyLmNwcDsgcGF0
aCA9IHRleHQvU3RyaW5nQnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTg2NTY1NzQwMTE1QkUzREEwMDI5MUY0MCAvKiBDU3RyaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENTdHJpbmcuY3BwOyBwYXRoID0gdGV4dC9DU3RyaW5nLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNTMsNiArMTI2OCwzMCBAQAogCQlC
Q0ZEOEM5MDBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEp1bXBUYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDRkQ4QzkxMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSnVtcFRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMwQTI3MjNGMEU1MDlGMUUwMEU5NkUxNSAvKiBOb3RGb3VuZC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb3RGb3VuZC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlDMjJDNTI5MDEzRkFGNkVGMDBCN0RDMEQgLyogYmlnbnVtLWR0b2EuY2Mg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSAiYmlnbnVtLWR0b2EuY2MiOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTI5MTEzRkFGNkVGMDBCN0RDMEQgLyog
YmlnbnVtLWR0b2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gImJpZ251bS1k
dG9hLmgiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTI5MjEzRkFGNkVGMDBC
N0RDMEQgLyogYmlnbnVtLmNjICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
YmlnbnVtLmNjOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTI5MzEzRkFGNkVG
MDBCN0RDMEQgLyogYmlnbnVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGJp
Z251bS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTI5NDEzRkFGNkVGMDBC
N0RDMEQgLyogY2FjaGVkLXBvd2Vycy5jYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9ICJjYWNoZWQtcG93ZXJzLmNjIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QzIyQzUyOTUxM0ZBRjZFRjAwQjdEQzBEIC8qIGNhY2hlZC1wb3dlcnMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gImNhY2hlZC1wb3dlcnMuaCI7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUMyMkM1Mjk2MTNGQUY2RUYwMEI3REMwRCAvKiBDT1BZSU5HICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IENPUFlJTkc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMy
MkM1Mjk3MTNGQUY2RUYwMEI3REMwRCAvKiBkaXktZnAuY2MgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSAiZGl5LWZwLmNjIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQzIyQzUyOTgxM0ZBRjZFRjAwQjdEQzBEIC8qIGRpeS1mcC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSAiZGl5LWZwLmgiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlDMjJDNTI5OTEzRkFGNkVGMDBCN0RDMEQgLyogZG91YmxlLWNvbnZlcnNpb24uY2MgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSAiZG91YmxlLWNvbnZlcnNpb24uY2MiOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTI5QTEzRkFGNkVGMDBCN0RDMEQgLyog
ZG91YmxlLWNvbnZlcnNpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gImRv
dWJsZS1jb252ZXJzaW9uLmgiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTI5
QjEzRkFGNkVGMDBCN0RDMEQgLyogZG91YmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IGRvdWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTI5QzEz
RkFGNkVGMDBCN0RDMEQgLyogZmFzdC1kdG9hLmNjICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gImZhc3QtZHRvYS5jYyI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUMyMkM1MjlEMTNGQUY2RUYwMEI3REMwRCAvKiBmYXN0LWR0b2EuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gImZhc3QtZHRvYS5oIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQzIyQzUyOUUxM0ZBRjZFRjAwQjdEQzBEIC8qIGZpeGVkLWR0b2EuY2MgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSAiZml4ZWQtZHRvYS5jYyI7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUMyMkM1MjlGMTNGQUY2RUYwMEI3REMwRCAvKiBmaXhlZC1kdG9h
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9ICJmaXhlZC1kdG9hLmgiOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTJBMDEzRkFGNkVGMDBCN0RDMEQgLyogTElD
RU5TRSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBMSUNFTlNFOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlDMjJDNTJBMTEzRkFGNkVGMDBCN0RDMEQgLyogTWFrZWZpbGUgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLm1ha2U7IHBhdGggPSBNYWtlZmlsZTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQzIyQzUyQTIxM0ZBRjZFRjAwQjdEQzBEIC8qIFJFQURNRSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBSRUFETUU7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMkM1MkEz
MTNGQUY2RUYwMEI3REMwRCAvKiBTQ29uc2NyaXB0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFND
b25zY3JpcHQ7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMkM1MkE0MTNGQUY2RUYw
MEI3REMwRCAvKiBTQ29uc3RydWN0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNDb25zdHJ1Y3Q7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMkM1MkI5MTNGQUY2RUYwMEI3REMwRCAv
KiBzdHJ0b2QuY2MgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBzdHJ0b2Qu
Y2M7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMkM1MkJBMTNGQUY2RUYwMEI3REMw
RCAvKiBzdHJ0b2QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gc3RydG9kLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMkM1MkJCMTNGQUY2RUYwMEI3REMwRCAv
KiB1dGlscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1dGlscy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMjEyMDIyODBBRDQzMTBDMDBFRDc5QjYgLyogRGF0
ZUNvbnZlcnNpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERh
dGVDb252ZXJzaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDIxMjAyMjkw
QUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252ZXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBEYXRlQ29udmVyc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlENzVBRjU5NTEyRjhDQjk1MDBGQzBBREYgLyogRHluYW1pY0Fubm90YXRpb25zLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IER5bmFtaWNBbm5vdGF0aW9ucy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjUyLDYgKzE2OTEsNyBAQAogCQk2
NTE2MkVGMTA4RTZBMjFDMDA3NTU2Q0QgLyogd3RmICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlDMjJDNTI0ODEzRkFGNkVGMDBCN0RDMEQgLyogZHRvYSAq
LywKIAkJCQkwNkQzNThBMDBEQUFEOUM0MDAzQjE3NEUgLyogbWFjICovLAogCQkJCTg2NTY1NzNF
MTE1QkUzNTIwMDI5MUY0MCAvKiB0ZXh0ICovLAogCQkJCUUxOTU2NzhEMDlFN0NGMTIwMEI4OUQx
MyAvKiB1bmljb2RlICovLApAQCAtMTY3Nyw4ICsxNzE3LDYgQEAKIAkJCQkxODBCOUFGMDBGMTZD
NTY5MDA5QkRCQzUgLyogQ3VycmVudFRpbWUuaCAqLywKIAkJCQk0MTM1OUNGNDBGREQ4OUNCMDAy
MDYxODAgLyogRGF0ZU1hdGguY3BwICovLAogCQkJCTQxMzU5Q0Y1MEZERDg5Q0IwMDIwNjE4MCAv
KiBEYXRlTWF0aC5oICovLAotCQkJCTBGMjk0NzlCMTI2RTY5OEMwMEIzQUJGNSAvKiBEZWNpbWFs
TnVtYmVyLmNwcCAqLywKLQkJCQk4NjJBRjRCNTEyMjM5QzdCMDAyNEU1QjggLyogRGVjaW1hbE51
bWJlci5oICovLAogCQkJCTUxMzVGQUQ1MTJEMjY4NTYwMDNDMDgzQiAvKiBEZWNvZGVyLmggKi8s
CiAJCQkJNTE4NjExMUQwQ0M4MjQ4MzAwODE0MTJCIC8qIERlcXVlLmggKi8sCiAJCQkJOTM4QzRG
NkIwQ0EwNkJDRTAwRDkzMTBBIC8qIERpc2FsbG93Q1R5cGUuaCAqLywKQEAgLTIxNzksNiArMjIx
NywzNyBAQAogCQkJcGF0aCA9IGJ5dGVjb2RlOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
IAkJfTsKKwkJQzIyQzUyNDgxM0ZBRjZFRjAwQjdEQzBEIC8qIGR0b2EgKi8gPSB7CisJCQlpc2Eg
PSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUMyMkM1MjkwMTNGQUY2RUYwMEI3REMw
RCAvKiBiaWdudW0tZHRvYS5jYyAqLywKKwkJCQlDMjJDNTI5MTEzRkFGNkVGMDBCN0RDMEQgLyog
YmlnbnVtLWR0b2EuaCAqLywKKwkJCQlDMjJDNTI5MjEzRkFGNkVGMDBCN0RDMEQgLyogYmlnbnVt
LmNjICovLAorCQkJCUMyMkM1MjkzMTNGQUY2RUYwMEI3REMwRCAvKiBiaWdudW0uaCAqLywKKwkJ
CQlDMjJDNTI5NDEzRkFGNkVGMDBCN0RDMEQgLyogY2FjaGVkLXBvd2Vycy5jYyAqLywKKwkJCQlD
MjJDNTI5NTEzRkFGNkVGMDBCN0RDMEQgLyogY2FjaGVkLXBvd2Vycy5oICovLAorCQkJCUMyMkM1
Mjk2MTNGQUY2RUYwMEI3REMwRCAvKiBDT1BZSU5HICovLAorCQkJCUMyMkM1Mjk3MTNGQUY2RUYw
MEI3REMwRCAvKiBkaXktZnAuY2MgKi8sCisJCQkJQzIyQzUyOTgxM0ZBRjZFRjAwQjdEQzBEIC8q
IGRpeS1mcC5oICovLAorCQkJCUMyMkM1Mjk5MTNGQUY2RUYwMEI3REMwRCAvKiBkb3VibGUtY29u
dmVyc2lvbi5jYyAqLywKKwkJCQlDMjJDNTI5QTEzRkFGNkVGMDBCN0RDMEQgLyogZG91YmxlLWNv
bnZlcnNpb24uaCAqLywKKwkJCQlDMjJDNTI5QjEzRkFGNkVGMDBCN0RDMEQgLyogZG91YmxlLmgg
Ki8sCisJCQkJQzIyQzUyOUMxM0ZBRjZFRjAwQjdEQzBEIC8qIGZhc3QtZHRvYS5jYyAqLywKKwkJ
CQlDMjJDNTI5RDEzRkFGNkVGMDBCN0RDMEQgLyogZmFzdC1kdG9hLmggKi8sCisJCQkJQzIyQzUy
OUUxM0ZBRjZFRjAwQjdEQzBEIC8qIGZpeGVkLWR0b2EuY2MgKi8sCisJCQkJQzIyQzUyOUYxM0ZB
RjZFRjAwQjdEQzBEIC8qIGZpeGVkLWR0b2EuaCAqLywKKwkJCQlDMjJDNTJBMDEzRkFGNkVGMDBC
N0RDMEQgLyogTElDRU5TRSAqLywKKwkJCQlDMjJDNTJBMTEzRkFGNkVGMDBCN0RDMEQgLyogTWFr
ZWZpbGUgKi8sCisJCQkJQzIyQzUyQTIxM0ZBRjZFRjAwQjdEQzBEIC8qIFJFQURNRSAqLywKKwkJ
CQlDMjJDNTJBMzEzRkFGNkVGMDBCN0RDMEQgLyogU0NvbnNjcmlwdCAqLywKKwkJCQlDMjJDNTJB
NDEzRkFGNkVGMDBCN0RDMEQgLyogU0NvbnN0cnVjdCAqLywKKwkJCQlDMjJDNTJCOTEzRkFGNkVG
MDBCN0RDMEQgLyogc3RydG9kLmNjICovLAorCQkJCUMyMkM1MkJBMTNGQUY2RUYwMEI3REMwRCAv
KiBzdHJ0b2QuaCAqLywKKwkJCQlDMjJDNTJCQjEzRkFGNkVGMDBCN0RDMEQgLyogdXRpbHMuaCAq
LywKKwkJCSk7CisJCQlwYXRoID0gZHRvYTsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJ
CX07CiAJCUUxOTU2NzhEMDlFN0NGMTIwMEI4OUQxMyAvKiB1bmljb2RlICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTIyNzksNyArMjM0OCw2IEBACiAJCQkJ
QkMxOEMzRkEwRTE2RjVDRDAwQjM0NDYwIC8qIERlYnVnZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzMxMzU2NDBGMzAyRkEzMDAzREZEM0EgLyogRGVidWdnZXJBY3RpdmF0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzNGQjBFMTZGNUNEMDBCMzQ0NjAgLyogRGVidWdnZXJDYWxsRnJh
bWUuaCBpbiBIZWFkZXJzICovLAotCQkJCTg2MkFGNEI2MTIyMzlDN0IwMDI0RTVCOCAvKiBEZWNp
bWFsTnVtYmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTM1RkFGMjEyRDI2QUNFMDAzQzA4M0Ig
LyogRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRkMwRTE2RjVDRDAwQjM0NDYw
IC8qIERlcXVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDQTRGMTEzMkVBQTZEMDAyQjJBRDcg
LyogREZHQWxpYXNUcmFja2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTI0NjQsNiArMjUzMiwxNiBA
QAogCQkJCTkwRDM0NjlDMEUyODUyODAwMDk0OTJFRSAvKiBSZWZDb3VudGVkTGVha0NvdW50ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDU4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWZQdHIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDU5MEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWZQdHJI
YXNoTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQlDMjJDNTJGMjEzRkFGNkVGMDBCN0RDMEQgLyog
YmlnbnVtLWR0b2EuaCBpbiBIZWFkZXJzICovLAorCQkJCUMyMkM1MkY0MTNGQUY2RUYwMEI3REMw
RCAvKiBiaWdudW0uaCBpbiBIZWFkZXJzICovLAorCQkJCUMyMkM1MkY2MTNGQUY2RUYwMEI3REMw
RCAvKiBjYWNoZWQtcG93ZXJzLmggaW4gSGVhZGVycyAqLywKKwkJCQlDMjJDNTJGODEzRkFGNkVG
MDBCN0RDMEQgLyogZGl5LWZwLmggaW4gSGVhZGVycyAqLywKKwkJCQlDMjJDNTJGQTEzRkFGNkVG
MDBCN0RDMEQgLyogZG91YmxlLWNvbnZlcnNpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUMyMkM1
MkZCMTNGQUY2RUYwMEI3REMwRCAvKiBkb3VibGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUMyMkM1
MkZEMTNGQUY2RUYwMEI3REMwRCAvKiBmYXN0LWR0b2EuaCBpbiBIZWFkZXJzICovLAorCQkJCUMy
MkM1MkZGMTNGQUY2RUYwMEI3REMwRCAvKiBmaXhlZC1kdG9hLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlDMjJDNTMxNDEzRkFGNkVGMDBCN0RDMEQgLyogc3RydG9kLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlDMjJDNTMxNTEzRkFGNkVGMDBCN0RDMEQgLyogdXRpbHMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDNDVBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWdFeHAuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUExNzEyQjNGMTFDN0IyMjgwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkNEMjAyQzIwRTE3MDZBNzAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmggaW4g
SGVhZGVycyAqLywKQEAgLTI4NzAsNyArMjk0OCw2IEBACiAJCQkJMTQyODA4MjMxMDdFQzAyQzAw
MTNFN0IyIC8qIERlYnVnZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMzEzNTY1MEYzMDJG
QTMwMDNERkQzQSAvKiBEZWJ1Z2dlckFjdGl2YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ5NTU5RUUwRERDRERGNzAwNjQ4MDg3IC8qIERlYnVnZ2VyQ2FsbEZyYW1lLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCTBGMjk0NzlDMTI2RTY5OEMwMEIzQUJGNSAvKiBEZWNpbWFsTnVtYmVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5REM0MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRl
Q29kZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkVDOURDNzEzMjhERjgyMDAyQjJB
RDcgLyogREZHR3JhcGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQzkxMzI4REY4MjAw
MkIyQUQ3IC8qIERGR0pJVENvZGVHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMDMw
LDYgKzMxMDcsMTUgQEAKIAkJCQkxNEQyRjNEQTEzOUY0QkUyMDA0OTEwMzEgLyogTmV3U3BhY2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyQTFEODMxM0ExOUM4NDAwOURBNUZFIC8qIE9sZFNw
YWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0QkE3QTk3MTNBQURGRjgwMDVCN0MyQyAvKiBI
ZWFwLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUMyMkM1MkYxMTNGQUY2RUYwMEI3REMwRCAvKiBi
aWdudW0tZHRvYS5jYyBpbiBTb3VyY2VzICovLAorCQkJCUMyMkM1MkYzMTNGQUY2RUYwMEI3REMw
RCAvKiBiaWdudW0uY2MgaW4gU291cmNlcyAqLywKKwkJCQlDMjJDNTJGNTEzRkFGNkVGMDBCN0RD
MEQgLyogY2FjaGVkLXBvd2Vycy5jYyBpbiBTb3VyY2VzICovLAorCQkJCUMyMkM1MkY3MTNGQUY2
RUYwMEI3REMwRCAvKiBkaXktZnAuY2MgaW4gU291cmNlcyAqLywKKwkJCQlDMjJDNTJGOTEzRkFG
NkVGMDBCN0RDMEQgLyogZG91YmxlLWNvbnZlcnNpb24uY2MgaW4gU291cmNlcyAqLywKKwkJCQlD
MjJDNTJGQzEzRkFGNkVGMDBCN0RDMEQgLyogZmFzdC1kdG9hLmNjIGluIFNvdXJjZXMgKi8sCisJ
CQkJQzIyQzUyRkUxM0ZBRjZFRjAwQjdEQzBEIC8qIGZpeGVkLWR0b2EuY2MgaW4gU291cmNlcyAq
LywKKwkJCQlDMjJDNTMwMDEzRkFGNkVGMDBCN0RDMEQgLyogTWFrZWZpbGUgaW4gU291cmNlcyAq
LywKKwkJCQlDMjJDNTMxMzEzRkFGNkVGMDBCN0RDMEQgLyogc3RydG9kLmNjIGluIFNvdXJjZXMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXpl
VGhyZWFkaW5nLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVU
aHJlYWRpbmcuY3BwCmluZGV4IDcxNjU0MjFmOTVhZWY5ZjhiMDllOTAyNGYwNzBhYzA1ZjM2NjI4
NWUuLmZmZTUyZjI5ZTQzMzE2ZDViMzM0ZGU3YjZjYzM4ZDQxOTA1ZDhlOTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3Bw
CkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgogCiAj
aW5jbHVkZSAiSGVhcC5oIgotI2luY2x1ZGUgImR0b2EuaCIKKyNpbmNsdWRlIDx3dGYvZHRvYS9j
YWNoZWQtcG93ZXJzLmg+CiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIkpTR2xv
YmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiVVN0cmluZy5oIgpAQCAtNDcsNiArNDcsNyBAQCBzdGF0
aWMgcHRocmVhZF9vbmNlX3QgaW5pdGlhbGl6ZVRocmVhZGluZ0tleU9uY2UgPSBQVEhSRUFEX09O
Q0VfSU5JVDsKIAogc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZ09uY2UoKQogeworICAg
IGRvdWJsZV9jb252ZXJzaW9uOjppbml0aWFsaXplKCk7CiAgICAgV1RGOjppbml0aWFsaXplVGhy
ZWFkaW5nKCk7CiAgICAgSlNHbG9iYWxEYXRhOjpzdG9yZVZQdHJzKCk7CiAjaWYgRU5BQkxFKEpT
Q19NVUxUSVBMRV9USFJFQURTKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L051bWJlclByb3RvdHlwZS5jcHAKaW5kZXggNjc5Zjc0NzlkZWM3ZWViNTQzZWU5ZTYyMzMzZjA2
ZjgzZDQ5ZWY0ZC4uYmQ5ZDNmMzA3NGNkYmU0MDFlYmUwN2ZhNzA3NTFiZjI5ODk2M2Y4NyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3Bw
CkBAIC0zMCw5ICszMCwxMSBAQAogI2luY2x1ZGUgIlVpbnQxNldpdGhGcmFjdGlvbi5oIgogI2lu
Y2x1ZGUgImR0b2EuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0
Zi9EZWNpbWFsTnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uaD4K
KwordXNpbmcgbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uOwogCiBuYW1lc3BhY2UgSlNDIHsK
IApAQCAtMzM5LDEyICszNDEsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1i
ZXJQcm90b0Z1bmNUb0V4cG9uZW50aWFsKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBVU3RyaW5nOjpudW1iZXIoeCkpKTsKIAog
ICAgIC8vIFJvdW5kIGlmIHRoZSBhcmd1bWVudCBpcyBub3QgdW5kZWZpbmVkLCBhbHdheXMgZm9y
bWF0IGFzIGV4cG9uZW50aWFsLgotICAgIE51bWJlclRvU3RyaW5nQnVmZmVyIGJ1ZmZlcjsKLSAg
ICB1bnNpZ25lZCBsZW5ndGggPSBpc1VuZGVmaW5lZAotICAgICAgICA/IERlY2ltYWxOdW1iZXIo
eCkudG9TdHJpbmdFeHBvbmVudGlhbChidWZmZXIsIFdURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJM
ZW5ndGgpCi0gICAgICAgIDogRGVjaW1hbE51bWJlcih4LCBSb3VuZGluZ1NpZ25pZmljYW50Rmln
dXJlcywgZGVjaW1hbFBsYWNlc0luRXhwb25lbnQgKyAxKS50b1N0cmluZ0V4cG9uZW50aWFsKGJ1
ZmZlciwgV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCk7Ci0KLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmcoYnVmZmVyLCBsZW5ndGgpKSk7Cisg
ICAgY2hhciBidWZmZXJbV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aF07CisgICAgU3Ry
aW5nQnVpbGRlciBidWlsZGVyKGJ1ZmZlciwgV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0
aCk7CisgICAgY29uc3QgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXImIGNvbnZlcnRlciA9IERvdWJs
ZVRvU3RyaW5nQ29udmVydGVyOjpFY21hU2NyaXB0Q29udmVydGVyKCk7CisgICAgYnVpbGRlci5S
ZXNldCgpOworICAgIGlzVW5kZWZpbmVkCisgICAgICAgID8gY29udmVydGVyLlRvRXhwb25lbnRp
YWwoeCwgLTEsICZidWlsZGVyKQorICAgICAgICA6IGNvbnZlcnRlci5Ub0V4cG9uZW50aWFsKHgs
IGRlY2ltYWxQbGFjZXNJbkV4cG9uZW50LCAmYnVpbGRlcik7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1N0cmluZyhleGVjLCBVU3RyaW5nKGJ1aWxkZXIuRmluYWxpemUoKSkpKTsKIH0K
IAogLy8gdG9GaXhlZCBjb252ZXJ0cyBhIG51bWJlciB0byBhIHN0cmluZywgYWx3YXlzIGZvcm1h
dHRpbmcgYXMgYW4gYSBkZWNpbWFsIGZyYWN0aW9uLgpAQCAtMzc2LDEwICszODAsMTIgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb0ZpeGVkKEV4ZWNTdGF0
ZSogZXhlYykKICAgICAvLyBoYW5kbGVkIGJ5IG51bWJlclRvU3RyaW5nLgogICAgIEFTU0VSVChp
c2Zpbml0ZSh4KSk7CiAKLSAgICAvLyBDb252ZXJ0IHRvIGRlY2ltYWwgd2l0aCByb3VuZGluZywg
YW5kIGZvcm1hdCBhcyBkZWNpbWFsLgotICAgIE51bWJlclRvU3RyaW5nQnVmZmVyIGJ1ZmZlcjsK
LSAgICB1bnNpZ25lZCBsZW5ndGggPSBEZWNpbWFsTnVtYmVyKHgsIFJvdW5kaW5nRGVjaW1hbFBs
YWNlcywgZGVjaW1hbFBsYWNlcykudG9TdHJpbmdEZWNpbWFsKGJ1ZmZlciwgV1RGOjpOdW1iZXJU
b1N0cmluZ0J1ZmZlckxlbmd0aCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmlu
ZyhleGVjLCBVU3RyaW5nKGJ1ZmZlciwgbGVuZ3RoKSkpOworICAgIGNoYXIgYnVmZmVyW1dURjo6
TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGhdOworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcihi
dWZmZXIsIFdURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgpOworICAgIGNvbnN0IERvdWJs
ZVRvU3RyaW5nQ29udmVydGVyJiBjb252ZXJ0ZXIgPSBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6
RWNtYVNjcmlwdENvbnZlcnRlcigpOworICAgIGJ1aWxkZXIuUmVzZXQoKTsKKyAgICBjb252ZXJ0
ZXIuVG9GaXhlZCh4LCBkZWNpbWFsUGxhY2VzLCAmYnVpbGRlcik7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBVU3RyaW5nKGJ1aWxkZXIuRmluYWxpemUoKSkpKTsK
IH0KIAogLy8gdG9QcmVjaXNpb24gY29udmVydHMgYSBudW1iZXIgdG8gYSBzdHJpbmcsIHRha2Vp
bmcgYW4gYXJndW1lbnQgc3BlY2lmeWluZyBhCkBAIC00MTIsMTcgKzQxOCwxMiBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1RvUHJlY2lzaW9uKEV4ZWNTdGF0
ZSogZXhlYykKICAgICBpZiAoIWlzZmluaXRlKHgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmc6Om51bWJlcih4KSkpOwogCi0gICAgLy8gQ29u
dmVydCB0byBkZWNpbWFsIHdpdGggcm91bmRpbmcuCi0gICAgRGVjaW1hbE51bWJlciBudW1iZXIo
eCwgUm91bmRpbmdTaWduaWZpY2FudEZpZ3VyZXMsIHNpZ25pZmljYW50RmlndXJlcyk7Ci0gICAg
Ly8gSWYgbnVtYmVyIGlzIGluIHRoZSByYW5nZSAxZS02IDw9IHggPCBwb3coMTAsIHNpZ25pZmlj
YW50RmlndXJlcykgdGhlbiBmb3JtYXQKLSAgICAvLyBhcyBkZWNpbWFsLiBPdGhlcndpc2UsIGZv
cm1hdCB0aGUgbnVtYmVyIGFzIGFuIGV4cG9uZW50aWFsLiBEZWNpbWFsIGZvcm1hdAotICAgIC8v
IGRlbWFuZHMgYSBtaW5pbXVtIG9mIChleHBvbmVudCArIDEpIGRpZ2l0cyB0byByZXByZXNlbnQg
YSBudW1iZXIsIGZvciBleGFtcGxlCi0gICAgLy8gMTIzNCAoMS4yMzRlKzMpIHJlcXVpcmVzIDQg
ZGlnaXRzLiAoU2VlIEVDTUEtMjYyIDE1LjcuNC43LjEwLmMpCi0gICAgTnVtYmVyVG9TdHJpbmdC
dWZmZXIgYnVmZmVyOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IG51bWJlci5leHBvbmVudCgpID49
IC02ICYmIG51bWJlci5leHBvbmVudCgpIDwgc2lnbmlmaWNhbnRGaWd1cmVzCi0gICAgICAgID8g
bnVtYmVyLnRvU3RyaW5nRGVjaW1hbChidWZmZXIsIFdURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJM
ZW5ndGgpCi0gICAgICAgIDogbnVtYmVyLnRvU3RyaW5nRXhwb25lbnRpYWwoYnVmZmVyLCBXVEY6
Ok51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmcoYnVmZmVyLCBsZW5ndGgpKSk7CisgICAgY2hhciBidWZm
ZXJbV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aF07CisgICAgU3RyaW5nQnVpbGRlciBi
dWlsZGVyKGJ1ZmZlciwgV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCk7CisgICAgY29u
c3QgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXImIGNvbnZlcnRlciA9IERvdWJsZVRvU3RyaW5nQ29u
dmVydGVyOjpFY21hU2NyaXB0Q29udmVydGVyKCk7CisgICAgYnVpbGRlci5SZXNldCgpOworICAg
IGNvbnZlcnRlci5Ub1ByZWNpc2lvbih4LCBzaWduaWZpY2FudEZpZ3VyZXMsICZidWlsZGVyKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmcoYnVpbGRl
ci5GaW5hbGl6ZSgpKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJl
clByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVVN0cmluZy5jcHAKaW5kZXggYzE0ZjMxOTlmNDA3ZjQ3Zjc5NWY1MWJiOTIwZTZj
MDlmM2MzYTZmZC4uYjc4ZTZmMWFjYzc4MTBjYjI2ZTg5ODQ4YWE1NDdkOGZkYTJiYmY2NiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5jcHAKQEAgLTM1LDEwICszNSwx
MCBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvRGVjaW1hbE51bWJlci5o
PgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvZHRvYS5oPgogI2lu
Y2x1ZGUgPHd0Zi91bmljb2RlL1VURjguaD4KIAogI2lmIEhBVkUoU1RSSU5HU19IKQpAQCAtMTk2
LDggKzE5Niw3IEBAIFVTdHJpbmcgVVN0cmluZzo6bnVtYmVyKGxvbmcgbCkKIFVTdHJpbmcgVVN0
cmluZzo6bnVtYmVyKGRvdWJsZSBkKQogewogICAgIE51bWJlclRvU3RyaW5nQnVmZmVyIGJ1ZmZl
cjsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBudW1iZXJUb1N0cmluZyhkLCBidWZmZXIpOwotICAg
IHJldHVybiBVU3RyaW5nKGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICByZXR1cm4gVVN0cmluZyhudW1i
ZXJUb1N0cmluZyhkLCBidWZmZXIpKTsKIH0KIAogVVN0cmluZyBVU3RyaW5nOjpzdWJzdHJpbmdT
aGFyaW5nSW1wbCh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IGM2ZGRhMTM5YzRlYzM0NGM5
N2MzYjNlNzNmZjA0MWVmODkzMjJkMmQuLjBhNDliNGMxNGNmNzdjMzIwMzExZTE2YWM4OGUyMGRj
ZDZiYTYwNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3RzLnR4dApAQCAt
MTQsNyArMTQsNiBAQCBTRVQoV1RGX0hFQURFUlMKICAgICBDcnlwdG9ncmFwaGljYWxseVJhbmRv
bU51bWJlci5oCiAgICAgQ3VycmVudFRpbWUuaAogICAgIERhdGVNYXRoLmgKLSAgICBEZWNpbWFs
TnVtYmVyLmgKICAgICBEZWNvZGVyLmgKICAgICBEZXF1ZS5oCiAgICAgRGlzYWxsb3dDVHlwZS5o
CkBAIC05OSw2ICs5OCwxNyBAQCBTRVQoV1RGX0hFQURFUlMKICAgICBXVEZUaHJlYWREYXRhLmgK
ICAgICBkdG9hLmgKIAorICAgIGR0b2EvYmlnbnVtLWR0b2EuaAorICAgIGR0b2EvYmlnbnVtLmgK
KyAgICBkdG9hL2NhY2hlZC1wb3dlcnMuaAorICAgIGR0b2EvZGl5LWZwLmgKKyAgICBkdG9hL2Rv
dWJsZS1jb252ZXJzaW9uLmgKKyAgICBkdG9hL2RvdWJsZS5oCisgICAgZHRvYS9mYXN0LWR0b2Eu
aAorICAgIGR0b2EvZml4ZWQtZHRvYS5oCisgICAgZHRvYS9zdHJ0b2QuaAorICAgIGR0b2EvdXRp
bHMuaAorCiAgICAgdGV4dC9BdG9taWNTdHJpbmcuaAogICAgIHRleHQvQXRvbWljU3RyaW5nSW1w
bC5oCiAgICAgdGV4dC9DU3RyaW5nLmgKQEAgLTEyMCw3ICsxMzAsNiBAQCBTRVQoV1RGX1NPVVJD
RVMKICAgICBDcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5jcHAKICAgICBDdXJyZW50VGlt
ZS5jcHAKICAgICBEYXRlTWF0aC5jcHAKLSAgICBEZWNpbWFsTnVtYmVyLmNwcAogICAgIER5bmFt
aWNBbm5vdGF0aW9ucy5jcHAKICAgICBGYXN0TWFsbG9jLmNwcAogICAgIEhhc2hUYWJsZS5jcHAK
QEAgLTE0MCw2ICsxNDksMTUgQEAgU0VUKFdURl9TT1VSQ0VTCiAgICAgV1RGVGhyZWFkRGF0YS5j
cHAKICAgICBkdG9hLmNwcAogCisgICAgZHRvYS9iaWdudW0tZHRvYS5jYworICAgIGR0b2EvYmln
bnVtLmNjCisgICAgZHRvYS9jYWNoZWQtcG93ZXJzLmNjCisgICAgZHRvYS9kaXktZnAuY2MKKyAg
ICBkdG9hL2RvdWJsZS1jb252ZXJzaW9uLmNjCisgICAgZHRvYS9mYXN0LWR0b2EuY2MKKyAgICBk
dG9hL2ZpeGVkLWR0b2EuY2MKKyAgICBkdG9hL3N0cnRvZC5jYworCiAgICAgdGV4dC9BdG9taWNT
dHJpbmcuY3BwCiAgICAgdGV4dC9DU3RyaW5nLmNwcAogICAgIHRleHQvU3RyaW5nQnVpbGRlci5j
cHAKQEAgLTE1NCw2ICsxNzIsNyBAQCBTRVQoV1RGX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAi
JHtKQVZBU0NSSVBUQ09SRV9ESVJ9IgogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vd3RmIgog
ICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vd3RmL3VuaWNvZGUiCisgICAgIiR7SkFWQVNDUklQ
VENPUkVfRElSfS93dGYvZHRvYSIKICAgICAiJHtKYXZhU2NyaXB0Q29yZV9JTkNMVURFX0RJUkVD
VE9SSUVTfSIKICkKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EZWNp
bWFsTnVtYmVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGVjaW1hbE51bWJlci5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwMzA0ZTJlNWY2MzBkYWMzMjBmNTRm
NzhmZjdmNzUyN2FkMDY3ODMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EZWNpbWFsTnVtYmVyLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDE5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEZWNpbWFs
TnVtYmVyLmgiCi0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi11
bnNpZ25lZCBEZWNpbWFsTnVtYmVyOjpidWZmZXJMZW5ndGhGb3JTdHJpbmdEZWNpbWFsKCkgY29u
c3QKLXsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwotICAgIC8vIGlmIHRoZSBleHBvbmVudCBp
cyBuZWdhdGl2ZSB0aGUgbnVtYmVyIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gaXMgb2YgdGhlIGZv
cm06Ci0gICAgLy8gWzxzaWduPl0wLls8emVyb3M+XTxzaWduaWZpY2FuZD4KLSAgICBpZiAobV9l
eHBvbmVudCA8IDApIHsKLSAgICAgICAgaWYgKG1fc2lnbikKLSAgICAgICAgICAgICsrbGVuZ3Ro
OwotICAgICAgICBsZW5ndGggKz0gMjsgLy8gZm9yICIwLiIKLSAgICAgICAgbGVuZ3RoICs9IC1t
X2V4cG9uZW50IC0gMTsKLSAgICAgICAgbGVuZ3RoICs9IG1fcHJlY2lzaW9uOwotICAgICAgICBy
ZXR1cm4gbGVuZ3RoOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGRpZ2l0c0JlZm9yZURlY2ltYWxQ
b2ludCA9IG1fZXhwb25lbnQgKyAxOwotCi0gICAgLy8gSWYgdGhlIHByZWNpc2lvbiBpcyA8PSB0
aGFuIHRoZSBudW1iZXIgb2YgZGlnaXRzIHRvIGdldCB1cCB0byB0aGUgZGVjaW1hbAotICAgIC8v
IHBvaW50LCB0aGVuIHRoZXJlIGlzIG5vIGZyYWN0aW9uYWwgcGFydCwgbnVtYmVyIGlzIG9mIHRo
ZSBmb3JtOgotICAgIC8vIFs8c2lnbj5dPHNpZ25pZmljYW5kPls8emVyb3M+XQotICAgIGlmICht
X3ByZWNpc2lvbiA8PSBkaWdpdHNCZWZvcmVEZWNpbWFsUG9pbnQpIHsKLSAgICAgICAgaWYgKG1f
c2lnbikKLSAgICAgICAgICAgICsrbGVuZ3RoOwotICAgICAgICBsZW5ndGggKz0gbV9wcmVjaXNp
b247Ci0gICAgICAgIGxlbmd0aCArPSBkaWdpdHNCZWZvcmVEZWNpbWFsUG9pbnQgLSBtX3ByZWNp
c2lvbjsKLSAgICAgICAgcmV0dXJuIGxlbmd0aDsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBnZXQg
aGVyZSwgbnVtYmVyIHN0YXJ0cyBiZWZvcmUgdGhlIGRlY2ltYWwgcG9pbnQsIGFuZCBlbmRzIGFm
dGVyIGl0LAotICAgIC8vIGFzIHN1Y2ggaXMgb2YgdGhlIGZvcm06Ci0gICAgLy8gWzxzaWduPl08
c2lnbmlmaWNhbmQtYmVnaW4+LjxzaWduaWZpY2FuZC1lbmQ+Ci0gICAgaWYgKG1fc2lnbikKLSAg
ICAgICAgKytsZW5ndGg7Ci0gICAgbGVuZ3RoICs9IGRpZ2l0c0JlZm9yZURlY2ltYWxQb2ludDsK
LSAgICArK2xlbmd0aDsgLy8gZm9yIGRlY2ltYWwgcG9pbnQKLSAgICBsZW5ndGggKz0gbV9wcmVj
aXNpb24gLSBkaWdpdHNCZWZvcmVEZWNpbWFsUG9pbnQ7Ci0KLSAgICByZXR1cm4gbGVuZ3RoOwot
fQotCi11bnNpZ25lZCBEZWNpbWFsTnVtYmVyOjpidWZmZXJMZW5ndGhGb3JTdHJpbmdFeHBvbmVu
dGlhbCgpIGNvbnN0Ci17Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKLSAgICBpZiAobV9zaWdu
KQotICAgICAgICArK2xlbmd0aDsKLQotICAgIC8vIEFkZCB0aGUgc2lnbmlmaWNhbmQKLSAgICAr
K2xlbmd0aDsKLQotICAgIGlmIChtX3ByZWNpc2lvbiA+IDEpIHsKLSAgICAgICAgKytsZW5ndGg7
IC8vIGZvciBkZWNpbWFsIHBvaW50Ci0gICAgICAgIGxlbmd0aCArPSBtX3ByZWNpc2lvbiAtIDE7
Ci0gICAgfQotCi0gICAgLy8gQWRkICJlKyIgb3IgImUtIgotICAgIGxlbmd0aCArPSAyOwotCi0g
ICAgaW50IGV4cG9uZW50ID0gKG1fZXhwb25lbnQgPj0gMCkgPyBtX2V4cG9uZW50IDogLW1fZXhw
b25lbnQ7Ci0KLSAgICAvLyBBZGQgdGhlIGV4cG9uZW50Ci0gICAgaWYgKGV4cG9uZW50ID49IDEw
MCkKLSAgICAgICAgKytsZW5ndGg7Ci0gICAgaWYgKGV4cG9uZW50ID49IDEwKQotICAgICAgICAr
K2xlbmd0aDsKLSAgICArK2xlbmd0aDsKLQotICAgIHJldHVybiBsZW5ndGg7Ci19Ci0KLXVuc2ln
bmVkIERlY2ltYWxOdW1iZXI6OnRvU3RyaW5nRGVjaW1hbChVQ2hhciogYnVmZmVyLCB1bnNpZ25l
ZCBidWZmZXJMZW5ndGgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX1VOVVNFRChidWZmZXJMZW5ndGgs
IGJ1ZmZlckxlbmd0aCA+PSBidWZmZXJMZW5ndGhGb3JTdHJpbmdEZWNpbWFsKCkpOwotCi0gICAg
Ly8gU2hvdWxkIGFsd2F5cyBiZSBhdCBsZWFzdCBvbmUgZGlnaXQgdG8gYWRkIHRvIHRoZSBzdHJp
bmchCi0gICAgQVNTRVJUKG1fcHJlY2lzaW9uKTsKLSAgICBVQ2hhciogbmV4dCA9IGJ1ZmZlcjsK
LQotICAgIC8vIGlmIHRoZSBleHBvbmVudCBpcyBuZWdhdGl2ZSB0aGUgbnVtYmVyIGRlY2ltYWwg
cmVwcmVzZW50YXRpb24gaXMgb2YgdGhlIGZvcm06Ci0gICAgLy8gWzxzaWduPl0wLls8emVyb3M+
XTxzaWduaWZpY2FuZD4KLSAgICBpZiAobV9leHBvbmVudCA8IDApIHsKLSAgICAgICAgdW5zaWdu
ZWQgemVyb3MgPSAtbV9leHBvbmVudCAtIDE7Ci0KLSAgICAgICAgaWYgKG1fc2lnbikKLSAgICAg
ICAgICAgICpuZXh0KysgPSAnLSc7Ci0gICAgICAgICpuZXh0KysgPSAnMCc7Ci0gICAgICAgICpu
ZXh0KysgPSAnLic7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB6ZXJvczsgKytp
KQotICAgICAgICAgICAgKm5leHQrKyA9ICcwJzsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fcHJlY2lzaW9uOyArK2kpCi0gICAgICAgICAgICAqbmV4dCsrID0gbV9zaWduaWZp
Y2FuZFtpXTsKLQotICAgICAgICByZXR1cm4gbmV4dCAtIGJ1ZmZlcjsKLSAgICB9Ci0KLSAgICB1
bnNpZ25lZCBkaWdpdHNCZWZvcmVEZWNpbWFsUG9pbnQgPSBtX2V4cG9uZW50ICsgMTsKLQotICAg
IC8vIElmIHRoZSBwcmVjaXNpb24gaXMgPD0gdGhhbiB0aGUgbnVtYmVyIG9mIGRpZ2l0cyB0byBn
ZXQgdXAgdG8gdGhlIGRlY2ltYWwKLSAgICAvLyBwb2ludCwgdGhlbiB0aGVyZSBpcyBubyBmcmFj
dGlvbmFsIHBhcnQsIG51bWJlciBpcyBvZiB0aGUgZm9ybToKLSAgICAvLyBbPHNpZ24+XTxzaWdu
aWZpY2FuZD5bPHplcm9zPl0KLSAgICBpZiAobV9wcmVjaXNpb24gPD0gZGlnaXRzQmVmb3JlRGVj
aW1hbFBvaW50KSB7Ci0gICAgICAgIGlmIChtX3NpZ24pCi0gICAgICAgICAgICAqbmV4dCsrID0g
Jy0nOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcmVjaXNpb247ICsraSkK
LSAgICAgICAgICAgICpuZXh0KysgPSBtX3NpZ25pZmljYW5kW2ldOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgKGRpZ2l0c0JlZm9yZURlY2ltYWxQb2ludCAtIG1fcHJlY2lzaW9u
KTsgKytpKQotICAgICAgICAgICAgKm5leHQrKyA9ICcwJzsKLQotICAgICAgICByZXR1cm4gbmV4
dCAtIGJ1ZmZlcjsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgbnVtYmVyIHN0YXJ0
cyBiZWZvcmUgdGhlIGRlY2ltYWwgcG9pbnQsIGFuZCBlbmRzIGFmdGVyIGl0LAotICAgIC8vIGFz
IHN1Y2ggaXMgb2YgdGhlIGZvcm06Ci0gICAgLy8gWzxzaWduPl08c2lnbmlmaWNhbmQtYmVnaW4+
LjxzaWduaWZpY2FuZC1lbmQ+Ci0KLSAgICBpZiAobV9zaWduKQotICAgICAgICAqbmV4dCsrID0g
Jy0nOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkaWdpdHNCZWZvcmVEZWNpbWFsUG9p
bnQ7ICsraSkKLSAgICAgICAgKm5leHQrKyA9IG1fc2lnbmlmaWNhbmRbaV07Ci0gICAgKm5leHQr
KyA9ICcuJzsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBkaWdpdHNCZWZvcmVEZWNpbWFsUG9pbnQ7
IGkgPCBtX3ByZWNpc2lvbjsgKytpKQotICAgICAgICAqbmV4dCsrID0gbV9zaWduaWZpY2FuZFtp
XTsKLQotICAgIHJldHVybiBuZXh0IC0gYnVmZmVyOwotfQotCi11bnNpZ25lZCBEZWNpbWFsTnVt
YmVyOjp0b1N0cmluZ0V4cG9uZW50aWFsKFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxl
bmd0aCkgY29uc3QKLXsKLSAgICBBU1NFUlRfVU5VU0VEKGJ1ZmZlckxlbmd0aCwgYnVmZmVyTGVu
Z3RoID49IGJ1ZmZlckxlbmd0aEZvclN0cmluZ0V4cG9uZW50aWFsKCkpOwotCi0gICAgLy8gU2hv
dWxkIGFsd2F5cyBiZSBhdCBsZWFzdCBvbmUgZGlnaXQgdG8gYWRkIHRvIHRoZSBzdHJpbmchCi0g
ICAgQVNTRVJUKG1fcHJlY2lzaW9uKTsKLSAgICBVQ2hhciogbmV4dCA9IGJ1ZmZlcjsKLQotICAg
IC8vIEFkZCB0aGUgc2lnbgotICAgIGlmIChtX3NpZ24pCi0gICAgICAgICpuZXh0KysgPSAnLSc7
Ci0KLSAgICAvLyBBZGQgdGhlIHNpZ25pZmljYW5kCi0gICAgKm5leHQrKyA9IG1fc2lnbmlmaWNh
bmRbMF07Ci0gICAgaWYgKG1fcHJlY2lzaW9uID4gMSkgewotICAgICAgICAqbmV4dCsrID0gJy4n
OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbV9wcmVjaXNpb247ICsraSkKLSAg
ICAgICAgICAgICpuZXh0KysgPSBtX3NpZ25pZmljYW5kW2ldOwotICAgIH0KLQotICAgIC8vIEFk
ZCAiZSsiIG9yICJlLSIKLSAgICAqbmV4dCsrID0gJ2UnOwotICAgIGludCBleHBvbmVudDsKLSAg
ICBpZiAobV9leHBvbmVudCA+PSAwKSB7Ci0gICAgICAgICpuZXh0KysgPSAnKyc7Ci0gICAgICAg
IGV4cG9uZW50ID0gbV9leHBvbmVudDsKLSAgICB9IGVsc2UgewotICAgICAgICAqbmV4dCsrID0g
Jy0nOwotICAgICAgICBleHBvbmVudCA9IC1tX2V4cG9uZW50OwotICAgIH0KLQotICAgIC8vIEFk
ZCB0aGUgZXhwb25lbnQKLSAgICBpZiAoZXhwb25lbnQgPj0gMTAwKQotICAgICAgICAqbmV4dCsr
ID0gJzAnICsgZXhwb25lbnQgLyAxMDA7Ci0gICAgaWYgKGV4cG9uZW50ID49IDEwKQotICAgICAg
ICAqbmV4dCsrID0gJzAnICsgKGV4cG9uZW50ICUgMTAwKSAvIDEwOwotICAgICpuZXh0KysgPSAn
MCcgKyBleHBvbmVudCAlIDEwOwotCi0gICAgcmV0dXJuIG5leHQgLSBidWZmZXI7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9E
ZWNpbWFsTnVtYmVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RlY2ltYWxOdW1iZXIu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM3YjgwMDU4MmQzNmFiMmExNzZiMDNl
MDlkMGM1MmEwNDU0MjliMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RlY2ltYWxOdW1iZXIuaAorKysgL2Rl
di9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpZm5kZWYgRGVjaW1hbE51bWJlcl9oCi0jZGVmaW5lIERlY2ltYWxO
dW1iZXJfaAotCi0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHd0Zi9kdG9hLmg+Ci0jaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIFdURiB7Ci0KLWVudW0gUm91bmRpbmdTaWduaWZpY2FudEZpZ3VyZXNUeXBl
IHsgUm91bmRpbmdTaWduaWZpY2FudEZpZ3VyZXMgfTsKLWVudW0gUm91bmRpbmdEZWNpbWFsUGxh
Y2VzVHlwZSB7IFJvdW5kaW5nRGVjaW1hbFBsYWNlcyB9OwotCi1jbGFzcyBEZWNpbWFsTnVtYmVy
IHsKLXB1YmxpYzoKLSAgICBEZWNpbWFsTnVtYmVyKGRvdWJsZSBkKQotICAgIHsKLSAgICAgICAg
QVNTRVJUKGlzZmluaXRlKGQpKTsKLSAgICAgICAgZHRvYShtX3NpZ25pZmljYW5kLCBkLCBtX3Np
Z24sIG1fZXhwb25lbnQsIG1fcHJlY2lzaW9uKTsKLQotICAgICAgICBBU1NFUlQobV9wcmVjaXNp
b24pOwotICAgICAgICAvLyBaZXJvIHNob3VsZCBhbHdheXMgaGF2ZSBleHBvbmVudCAwLgotICAg
ICAgICBBU1NFUlQobV9zaWduaWZpY2FuZFswXSAhPSAnMCcgfHwgIW1fZXhwb25lbnQpOwotICAg
ICAgICAvLyBObyB2YWx1ZXMgb3RoZXIgdGhhbiB6ZXJvIHNob3VsZCBoYXZlIGEgbGVhZGluZyB6
ZXJvLgotICAgICAgICBBU1NFUlQobV9zaWduaWZpY2FuZFswXSAhPSAnMCcgfHwgbV9wcmVjaXNp
b24gPT0gMSk7Ci0gICAgICAgIC8vIE5vIHZhbHVlcyBvdGhlciB0aGFuIHplcm8gc2hvdWxkIGhh
dmUgdHJhaWxpbmcgemVyb3MuCi0gICAgICAgIEFTU0VSVChtX3NpZ25pZmljYW5kWzBdID09ICcw
JyB8fCBtX3NpZ25pZmljYW5kW21fcHJlY2lzaW9uIC0gMV0gIT0gJzAnKTsKLSAgICB9Ci0KLSAg
ICBEZWNpbWFsTnVtYmVyKGRvdWJsZSBkLCBSb3VuZGluZ1NpZ25pZmljYW50RmlndXJlc1R5cGUs
IHVuc2lnbmVkIHNpZ25pZmljYW50RmlndXJlcykKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc2Zp
bml0ZShkKSk7Ci0gICAgICAgIGR0b2FSb3VuZFNGKG1fc2lnbmlmaWNhbmQsIGQsIHNpZ25pZmlj
YW50RmlndXJlcywgbV9zaWduLCBtX2V4cG9uZW50LCBtX3ByZWNpc2lvbik7Ci0KLSAgICAgICAg
QVNTRVJUKHNpZ25pZmljYW50RmlndXJlcyAmJiBzaWduaWZpY2FudEZpZ3VyZXMgPD0gc2l6ZW9m
KER0b2FCdWZmZXIpKTsKLSAgICAgICAgd2hpbGUgKG1fcHJlY2lzaW9uIDwgc2lnbmlmaWNhbnRG
aWd1cmVzKQotICAgICAgICAgICAgbV9zaWduaWZpY2FuZFttX3ByZWNpc2lvbisrXSA9ICcwJzsK
LQotICAgICAgICBBU1NFUlQobV9wcmVjaXNpb24pOwotICAgICAgICAvLyBaZXJvIHNob3VsZCBh
bHdheXMgaGF2ZSBleHBvbmVudCAwLgotICAgICAgICBBU1NFUlQobV9zaWduaWZpY2FuZFswXSAh
PSAnMCcgfHwgIW1fZXhwb25lbnQpOwotICAgIH0KLQotICAgIERlY2ltYWxOdW1iZXIoZG91Ymxl
IGQsIFJvdW5kaW5nRGVjaW1hbFBsYWNlc1R5cGUsIHVuc2lnbmVkIGRlY2ltYWxQbGFjZXMpCi0g
ICAgewotICAgICAgICBBU1NFUlQoaXNmaW5pdGUoZCkpOwotICAgICAgICBkdG9hUm91bmREUCht
X3NpZ25pZmljYW5kLCBkLCBkZWNpbWFsUGxhY2VzLCBtX3NpZ24sIG1fZXhwb25lbnQsIG1fcHJl
Y2lzaW9uKTsKLQotICAgICAgICB1bnNpZ25lZCBzaWduaWZpY2FudEZpZ3VyZXMgPSAxICsgbV9l
eHBvbmVudCArIGRlY2ltYWxQbGFjZXM7Ci0gICAgICAgIEFTU0VSVChzaWduaWZpY2FudEZpZ3Vy
ZXMgJiYgc2lnbmlmaWNhbnRGaWd1cmVzIDw9IHNpemVvZihEdG9hQnVmZmVyKSk7Ci0gICAgICAg
IHdoaWxlIChtX3ByZWNpc2lvbiA8IHNpZ25pZmljYW50RmlndXJlcykKLSAgICAgICAgICAgIG1f
c2lnbmlmaWNhbmRbbV9wcmVjaXNpb24rK10gPSAnMCc7Ci0KLSAgICAgICAgQVNTRVJUKG1fcHJl
Y2lzaW9uKTsKLSAgICAgICAgLy8gWmVybyBzaG91bGQgYWx3YXlzIGhhdmUgZXhwb25lbnQgMC4K
LSAgICAgICAgQVNTRVJUKG1fc2lnbmlmaWNhbmRbMF0gIT0gJzAnIHx8ICFtX2V4cG9uZW50KTsK
LSAgICB9Ci0KLSAgICB1bnNpZ25lZCBidWZmZXJMZW5ndGhGb3JTdHJpbmdEZWNpbWFsKCkgY29u
c3Q7Ci0gICAgdW5zaWduZWQgYnVmZmVyTGVuZ3RoRm9yU3RyaW5nRXhwb25lbnRpYWwoKSBjb25z
dDsKLQotICAgIHVuc2lnbmVkIHRvU3RyaW5nRGVjaW1hbChVQ2hhciogYnVmZmVyLCB1bnNpZ25l
ZCBidWZmZXJMZW5ndGgpIGNvbnN0OwotICAgIHVuc2lnbmVkIHRvU3RyaW5nRXhwb25lbnRpYWwo
VUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoKSBjb25zdDsKLQotICAgIGJvb2wg
c2lnbigpIGNvbnN0IHsgcmV0dXJuIG1fc2lnbjsgfQotICAgIGludCBleHBvbmVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fZXhwb25lbnQ7IH0KLSAgICBjb25zdCBjaGFyKiBzaWduaWZpY2FuZCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2lnbmlmaWNhbmQ7IH0gLy8gc2lnbmlmaWNhbmQgY29udGFpbnMgcHJl
Y2lzaW9uIGNoYXJhY3RlcnMsIGlzIG5vdCBudWxsLXRlcm1pbmF0ZWQuCi0gICAgdW5zaWduZWQg
cHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9wcmVjaXNpb247IH0KLQotcHJpdmF0ZToKLSAg
ICBib29sIG1fc2lnbjsKLSAgICBpbnQgbV9leHBvbmVudDsKLSAgICBEdG9hQnVmZmVyIG1fc2ln
bmlmaWNhbmQ7Ci0gICAgdW5zaWduZWQgbV9wcmVjaXNpb247Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBXVEYKLQotdXNpbmcgV1RGOjpEZWNpbWFsTnVtYmVyOwotdXNpbmcgV1RGOjpSb3VuZGluZ1Np
Z25pZmljYW50RmlndXJlczsKLXVzaW5nIFdURjo6Um91bmRpbmdEZWNpbWFsUGxhY2VzOwotCi0j
ZW5kaWYgLy8gRGVjaW1hbE51bWJlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL2R0b2EuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hLmNwcAppbmRl
eCAxNDY2ZGY3MzY4MDg5NWZiN2Q2NzJmNjc4YTc0Mjk1M2Q5YzZkNWFkLi5iNWIyNzMyNGVkMDlk
MDE5YTc3Y2IwZGVjMjg4NGUyY2IwZDY1MTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL2R0b2EuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS5j
cHAKQEAgLTc1LDEyICs3NSwxMiBAQAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHd0
Zi9BbHdheXNJbmxpbmUuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUg
PHd0Zi9EZWNpbWFsTnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNs
dWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVk
ZSA8d3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uaD4KIAogI2lmIENPTVBJTEVSKE1TVkMpCiAj
cHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDI0NCkKQEAgLTEyNzQsNTYxICsxMjc0LDEyIEBAIHN0
YXRpYyBBTFdBWVNfSU5MSU5FIGludCBxdW9yZW0oQmlnSW50JiBiLCBCaWdJbnQmIFMpCiAgICAg
cmV0dXJuIHE7CiB9CiAKLS8qIGR0b2EgZm9yIElFRUUgYXJpdGhtZXRpYyAoZG1nKTogY29udmVy
dCBkb3VibGUgdG8gQVNDSUkgc3RyaW5nLgotICoKLSAqIEluc3BpcmVkIGJ5ICJIb3cgdG8gUHJp
bnQgRmxvYXRpbmctUG9pbnQgTnVtYmVycyBBY2N1cmF0ZWx5IiBieQotICogR3V5IEwuIFN0ZWVs
ZSwgSnIuIGFuZCBKb24gTC4gV2hpdGUgW1Byb2MuIEFDTSBTSUdQTEFOICc5MCwgcHAuIDExMi0x
MjZdLgotICoKLSAqIE1vZGlmaWNhdGlvbnM6Ci0gKiAgICAxLiBSYXRoZXIgdGhhbiBpdGVyYXRp
bmcsIHdlIHVzZSBhIHNpbXBsZSBudW1lcmljIG92ZXJlc3RpbWF0ZQotICogICAgICAgdG8gZGV0
ZXJtaW5lIGsgPSBmbG9vcihsb2cxMChkKSkuICBXZSBzY2FsZSByZWxldmFudAotICogICAgICAg
cXVhbnRpdGllcyB1c2luZyBPKGxvZzIoaykpIHJhdGhlciB0aGFuIE8oaykgbXVsdGlwbGljYXRp
b25zLgotICogICAgMi4gRm9yIHNvbWUgbW9kZXMgPiAyIChjb3JyZXNwb25kaW5nIHRvIGVjdnQg
YW5kIGZjdnQpLCB3ZSBkb24ndAotICogICAgICAgdHJ5IHRvIGdlbmVyYXRlIGRpZ2l0cyBzdHJp
Y3RseSBsZWZ0IHRvIHJpZ2h0LiAgSW5zdGVhZCwgd2UKLSAqICAgICAgIGNvbXB1dGUgd2l0aCBm
ZXdlciBiaXRzIGFuZCBwcm9wYWdhdGUgdGhlIGNhcnJ5IGlmIG5lY2Vzc2FyeQotICogICAgICAg
d2hlbiByb3VuZGluZyB0aGUgZmluYWwgZGlnaXQgdXAuICBUaGlzIGlzIG9mdGVuIGZhc3Rlci4K
LSAqICAgIDMuIFVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgaW5wdXQgd2lsbCBiZSByb3VuZGVk
IG5lYXJlc3QsCi0gKiAgICAgICBtb2RlIDAgcmVuZGVycyAxZTIzIGFzIDFlMjMgcmF0aGVyIHRo
YW4gOS45OTk5OTk5OTk5OTk5OTllMjIuCi0gKiAgICAgICBUaGF0IGlzLCB3ZSBhbGxvdyBlcXVh
bGl0eSBpbiBzdG9wcGluZyB0ZXN0cyB3aGVuIHRoZQotICogICAgICAgcm91bmQtbmVhcmVzdCBy
dWxlIHdpbGwgZ2l2ZSB0aGUgc2FtZSBmbG9hdGluZy1wb2ludCB2YWx1ZQotICogICAgICAgYXMg
d291bGQgc2F0aXNmYWN0aW9uIG9mIHRoZSBzdG9wcGluZyB0ZXN0IHdpdGggc3RyaWN0Ci0gKiAg
ICAgICBpbmVxdWFsaXR5LgotICogICAgNC4gV2UgcmVtb3ZlIGNvbW1vbiBmYWN0b3JzIG9mIHBv
d2VycyBvZiAyIGZyb20gcmVsZXZhbnQKLSAqICAgICAgIHF1YW50aXRpZXMuCi0gKiAgICA1LiBX
aGVuIGNvbnZlcnRpbmcgZmxvYXRpbmctcG9pbnQgaW50ZWdlcnMgbGVzcyB0aGFuIDFlMTYsCi0g
KiAgICAgICB3ZSB1c2UgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYyByYXRoZXIgdGhhbiByZXNv
cnRpbmcKLSAqICAgICAgIHRvIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2Vycy4KLSAqICAgIDYu
IFdoZW4gYXNrZWQgdG8gcHJvZHVjZSBmZXdlciB0aGFuIDE1IGRpZ2l0cywgd2UgZmlyc3QgdHJ5
Ci0gKiAgICAgICB0byBnZXQgYnkgd2l0aCBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljOyB3ZSBy
ZXNvcnQgdG8KLSAqICAgICAgIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGFyaXRobWV0aWMg
b25seSBpZiB3ZSBjYW5ub3QKLSAqICAgICAgIGd1YXJhbnRlZSB0aGF0IHRoZSBmbG9hdGluZy1w
b2ludCBjYWxjdWxhdGlvbiBoYXMgZ2l2ZW4KLSAqICAgICAgIHRoZSBjb3JyZWN0bHkgcm91bmRl
ZCByZXN1bHQuICBGb3IgayByZXF1ZXN0ZWQgZGlnaXRzIGFuZAotICogICAgICAgInVuaWZvcm1s
eSIgZGlzdHJpYnV0ZWQgaW5wdXQsIHRoZSBwcm9iYWJpbGl0eSBpcwotICogICAgICAgc29tZXRo
aW5nIGxpa2UgMTBeKGstMTUpIHRoYXQgd2UgbXVzdCByZXNvcnQgdG8gdGhlIGludDMyX3QKLSAq
ICAgICAgIGNhbGN1bGF0aW9uLgotICoKLSAqIE5vdGU6ICdsZWZ0cmlnaHQnIHRyYW5zbGF0ZXMg
dG8gJ2dlbmVyYXRlIHNob3J0ZXN0IHBvc3NpYmxlIHN0cmluZycuCi0gKi8KLXRlbXBsYXRlPGJv
b2wgcm91bmRpbmdOb25lLCBib29sIHJvdW5kaW5nU2lnbmlmaWNhbnRGaWd1cmVzLCBib29sIHJv
dW5kaW5nRGVjaW1hbFBsYWNlcywgYm9vbCBsZWZ0cmlnaHQ+Ci12b2lkIGR0b2EoRHRvYUJ1ZmZl
ciByZXN1bHQsIGRvdWJsZSBkZCwgaW50IG5kaWdpdHMsIGJvb2wmIHNpZ25PdXQsIGludCYgZXhw
b25lbnRPdXQsIHVuc2lnbmVkJiBwcmVjaXNpb25PdXQpCi17Ci0gICAgLy8gRXhhY3RseSBvbmUg
cm91bmRpbmcgbW9kZSBtdXN0IGJlIHNwZWNpZmllZC4KLSAgICBBU1NFUlQocm91bmRpbmdOb25l
ICsgcm91bmRpbmdTaWduaWZpY2FudEZpZ3VyZXMgKyByb3VuZGluZ0RlY2ltYWxQbGFjZXMgPT0g
MSk7Ci0gICAgLy8gcm91bmRpbmdOb25lIG9ubHkgYWxsb3dlZCAob25seSBzZW5zaWJsZT8pIHdp
dGggbGVmdHJpZ2h0IHNldC4KLSAgICBBU1NFUlQoIXJvdW5kaW5nTm9uZSB8fCBsZWZ0cmlnaHQp
OwotCi0gICAgQVNTRVJUKGlzZmluaXRlKGRkKSk7Ci0KLSAgICBpbnQgYmJpdHMsIGIyLCBiNSwg
YmUsIGRpZywgaSwgaWVwcywgaWxpbSA9IDAsIGlsaW0wLCBpbGltMSA9IDAsCi0gICAgICAgIGos
IGoxLCBrLCBrMCwga19jaGVjaywgbTIsIG01LCBzMiwgczUsCi0gICAgICAgIHNwZWNfY2FzZTsK
LSAgICBpbnQzMl90IEw7Ci0gICAgaW50IGRlbm9ybTsKLSAgICB1aW50MzJfdCB4OwotICAgIEJp
Z0ludCBiLCBkZWx0YSwgbWxvLCBtaGksIFM7Ci0gICAgVSBkMiwgZXBzLCB1OwotICAgIGRvdWJs
ZSBkczsKLSAgICBjaGFyKiBzOwotICAgIGNoYXIqIHMwOwotCi0gICAgdS5kID0gZGQ7Ci0KLSAg
ICAvKiBJbmZpbml0eSBvciBOYU4gKi8KLSAgICBBU1NFUlQoKHdvcmQwKCZ1KSAmIEV4cF9tYXNr
KSAhPSBFeHBfbWFzayk7Ci0KLSAgICAvLyBKYXZhU2NyaXB0IHRvU3RyaW5nIGNvbnZlcnNpb24g
dHJlYXRzIC0wIGFzIDAuCi0gICAgaWYgKCFkdmFsKCZ1KSkgewotICAgICAgICBzaWduT3V0ID0g
ZmFsc2U7Ci0gICAgICAgIGV4cG9uZW50T3V0ID0gMDsKLSAgICAgICAgcHJlY2lzaW9uT3V0ID0g
MTsKLSAgICAgICAgcmVzdWx0WzBdID0gJzAnOwotICAgICAgICByZXN1bHRbMV0gPSAnXDAnOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHdvcmQwKCZ1KSAmIFNpZ25fYml0KSB7
Ci0gICAgICAgIHNpZ25PdXQgPSB0cnVlOwotICAgICAgICB3b3JkMCgmdSkgJj0gflNpZ25fYml0
OyAvLyBjbGVhciBzaWduIGJpdAotICAgIH0gZWxzZQotICAgICAgICBzaWduT3V0ID0gZmFsc2U7
Ci0KLSAgICBkMmIoYiwgJnUsICZiZSwgJmJiaXRzKTsKLSAgICBpZiAoKGkgPSAoaW50KSh3b3Jk
MCgmdSkgPj4gRXhwX3NoaWZ0MSAmIChFeHBfbWFzayA+PiBFeHBfc2hpZnQxKSkpKSB7Ci0gICAg
ICAgIGR2YWwoJmQyKSA9IGR2YWwoJnUpOwotICAgICAgICB3b3JkMCgmZDIpICY9IEZyYWNfbWFz
azE7Ci0gICAgICAgIHdvcmQwKCZkMikgfD0gRXhwXzExOwotCi0gICAgICAgIC8qIGxvZyh4KSAg
ICB+PX4gbG9nKDEuNSkgKyAoeC0xLjUpLzEuNQotICAgICAgICAgKiBsb2cxMCh4KSAgICAgPSAg
bG9nKHgpIC8gbG9nKDEwKQotICAgICAgICAgKiAgICAgICAgfj1+IGxvZygxLjUpL2xvZygxMCkg
KyAoeC0xLjUpLygxLjUqbG9nKDEwKSkKLSAgICAgICAgICogbG9nMTAoZCkgPSAoaS1CaWFzKSps
b2coMikvbG9nKDEwKSArIGxvZzEwKGQyKQotICAgICAgICAgKgotICAgICAgICAgKiBUaGlzIHN1
Z2dlc3RzIGNvbXB1dGluZyBhbiBhcHByb3hpbWF0aW9uIGsgdG8gbG9nMTAoZCkgYnkKLSAgICAg
ICAgICoKLSAgICAgICAgICogayA9IChpIC0gQmlhcykqMC4zMDEwMjk5OTU2NjM5ODEKLSAgICAg
ICAgICogICAgKyAoIChkMi0xLjUpKjAuMjg5NTI5NjU0NjAyMTY4ICsgMC4xNzYwOTEyNTkwNTU2
ODEgKTsKLSAgICAgICAgICoKLSAgICAgICAgICogV2Ugd2FudCBrIHRvIGJlIHRvbyBsYXJnZSBy
YXRoZXIgdGhhbiB0b28gc21hbGwuCi0gICAgICAgICAqIFRoZSBlcnJvciBpbiB0aGUgZmlyc3Qt
b3JkZXIgVGF5bG9yIHNlcmllcyBhcHByb3hpbWF0aW9uCi0gICAgICAgICAqIGlzIGluIG91ciBm
YXZvciwgc28gd2UganVzdCByb3VuZCB1cCB0aGUgY29uc3RhbnQgZW5vdWdoCi0gICAgICAgICAq
IHRvIGNvbXBlbnNhdGUgZm9yIGFueSBlcnJvciBpbiB0aGUgbXVsdGlwbGljYXRpb24gb2YKLSAg
ICAgICAgICogKGkgLSBCaWFzKSBieSAwLjMwMTAyOTk5NTY2Mzk4MTsgc2luY2UgfGkgLSBCaWFz
fCA8PSAxMDc3LAotICAgICAgICAgKiBhbmQgMTA3NyAqIDAuMzAxMDMgKiAyXi01MiB+PX4gNy4y
ZS0xNCwKLSAgICAgICAgICogYWRkaW5nIDFlLTEzIHRvIHRoZSBjb25zdGFudCB0ZXJtIG1vcmUg
dGhhbiBzdWZmaWNlcy4KLSAgICAgICAgICogSGVuY2Ugd2UgYWRqdXN0IHRoZSBjb25zdGFudCB0
ZXJtIHRvIDAuMTc2MDkxMjU5MDU1OC4KLSAgICAgICAgICogKFdlIGNvdWxkIGdldCBhIG1vcmUg
YWNjdXJhdGUgayBieSBpbnZva2luZyBsb2cxMCwKLSAgICAgICAgICogIGJ1dCB0aGlzIGlzIHBy
b2JhYmx5IG5vdCB3b3J0aHdoaWxlLikKLSAgICAgICAgICovCi0KLSAgICAgICAgaSAtPSBCaWFz
OwotICAgICAgICBkZW5vcm0gPSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIGQgaXMgZGVu
b3JtYWxpemVkICovCi0KLSAgICAgICAgaSA9IGJiaXRzICsgYmUgKyAoQmlhcyArIChQIC0gMSkg
LSAxKTsKLSAgICAgICAgeCA9IChpID4gMzIpID8gKHdvcmQwKCZ1KSA8PCAoNjQgLSBpKSkgfCAo
d29yZDEoJnUpID4+IChpIC0gMzIpKQotICAgICAgICAgICAgICAgIDogd29yZDEoJnUpIDw8ICgz
MiAtIGkpOwotICAgICAgICBkdmFsKCZkMikgPSB4OwotICAgICAgICB3b3JkMCgmZDIpIC09IDMx
ICogRXhwX21zazE7IC8qIGFkanVzdCBleHBvbmVudCAqLwotICAgICAgICBpIC09IChCaWFzICsg
KFAgLSAxKSAtIDEpICsgMTsKLSAgICAgICAgZGVub3JtID0gMTsKLSAgICB9Ci0gICAgZHMgPSAo
ZHZhbCgmZDIpIC0gMS41KSAqIDAuMjg5NTI5NjU0NjAyMTY4ICsgMC4xNzYwOTEyNTkwNTU4ICsg
KGkgKiAwLjMwMTAyOTk5NTY2Mzk4MSk7Ci0gICAgayA9IChpbnQpZHM7Ci0gICAgaWYgKGRzIDwg
MC4gJiYgZHMgIT0gaykKLSAgICAgICAgay0tOyAgICAvKiB3YW50IGsgPSBmbG9vcihkcykgKi8K
LSAgICBrX2NoZWNrID0gMTsKLSAgICBpZiAoayA+PSAwICYmIGsgPD0gVGVuX3BtYXgpIHsKLSAg
ICAgICAgaWYgKGR2YWwoJnUpIDwgdGVuc1trXSkKLSAgICAgICAgICAgIGstLTsKLSAgICAgICAg
a19jaGVjayA9IDA7Ci0gICAgfQotICAgIGogPSBiYml0cyAtIGkgLSAxOwotICAgIGlmIChqID49
IDApIHsKLSAgICAgICAgYjIgPSAwOwotICAgICAgICBzMiA9IGo7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgYjIgPSAtajsKLSAgICAgICAgczIgPSAwOwotICAgIH0KLSAgICBpZiAoayA+PSAwKSB7
Ci0gICAgICAgIGI1ID0gMDsKLSAgICAgICAgczUgPSBrOwotICAgICAgICBzMiArPSBrOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGIyIC09IGs7Ci0gICAgICAgIGI1ID0gLWs7Ci0gICAgICAgIHM1
ID0gMDsKLSAgICB9Ci0KLSAgICBpZiAocm91bmRpbmdOb25lKSB7Ci0gICAgICAgIGlsaW0gPSBp
bGltMSA9IC0xOwotICAgICAgICBpID0gMTg7Ci0gICAgICAgIG5kaWdpdHMgPSAwOwotICAgIH0K
LSAgICBpZiAocm91bmRpbmdTaWduaWZpY2FudEZpZ3VyZXMpIHsKLSAgICAgICAgaWYgKG5kaWdp
dHMgPD0gMCkKLSAgICAgICAgICAgIG5kaWdpdHMgPSAxOwotICAgICAgICBpbGltID0gaWxpbTEg
PSBpID0gbmRpZ2l0czsKLSAgICB9Ci0gICAgaWYgKHJvdW5kaW5nRGVjaW1hbFBsYWNlcykgewot
ICAgICAgICBpID0gbmRpZ2l0cyArIGsgKyAxOwotICAgICAgICBpbGltID0gaTsKLSAgICAgICAg
aWxpbTEgPSBpIC0gMTsKLSAgICAgICAgaWYgKGkgPD0gMCkKLSAgICAgICAgICAgIGkgPSAxOwot
ICAgIH0KLQotICAgIHMgPSBzMCA9IHJlc3VsdDsKLQotICAgIGlmIChpbGltID49IDAgJiYgaWxp
bSA8PSBRdWlja19tYXgpIHsKLSAgICAgICAgLyogVHJ5IHRvIGdldCBieSB3aXRoIGZsb2F0aW5n
LXBvaW50IGFyaXRobWV0aWMuICovCi0KLSAgICAgICAgaSA9IDA7Ci0gICAgICAgIGR2YWwoJmQy
KSA9IGR2YWwoJnUpOwotICAgICAgICBrMCA9IGs7Ci0gICAgICAgIGlsaW0wID0gaWxpbTsKLSAg
ICAgICAgaWVwcyA9IDI7IC8qIGNvbnNlcnZhdGl2ZSAqLwotICAgICAgICBpZiAoayA+IDApIHsK
LSAgICAgICAgICAgIGRzID0gdGVuc1trICYgMHhmXTsKLSAgICAgICAgICAgIGogPSBrID4+IDQ7
Ci0gICAgICAgICAgICBpZiAoaiAmIEJsZXRjaCkgewotICAgICAgICAgICAgICAgIC8qIHByZXZl
bnQgb3ZlcmZsb3dzICovCi0gICAgICAgICAgICAgICAgaiAmPSBCbGV0Y2ggLSAxOwotICAgICAg
ICAgICAgICAgIGR2YWwoJnUpIC89IGJpZ3RlbnNbbl9iaWd0ZW5zIC0gMV07Ci0gICAgICAgICAg
ICAgICAgaWVwcysrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yICg7IGo7IGogPj49
IDEsIGkrKykgewotICAgICAgICAgICAgICAgIGlmIChqICYgMSkgewotICAgICAgICAgICAgICAg
ICAgICBpZXBzKys7Ci0gICAgICAgICAgICAgICAgICAgIGRzICo9IGJpZ3RlbnNbaV07Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZHZhbCgmdSkgLz0gZHM7
Ci0gICAgICAgIH0gZWxzZSBpZiAoKGoxID0gLWspKSB7Ci0gICAgICAgICAgICBkdmFsKCZ1KSAq
PSB0ZW5zW2oxICYgMHhmXTsKLSAgICAgICAgICAgIGZvciAoaiA9IGoxID4+IDQ7IGo7IGogPj49
IDEsIGkrKykgewotICAgICAgICAgICAgICAgIGlmIChqICYgMSkgewotICAgICAgICAgICAgICAg
ICAgICBpZXBzKys7Ci0gICAgICAgICAgICAgICAgICAgIGR2YWwoJnUpICo9IGJpZ3RlbnNbaV07
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlm
IChrX2NoZWNrICYmIGR2YWwoJnUpIDwgMS4gJiYgaWxpbSA+IDApIHsKLSAgICAgICAgICAgIGlm
IChpbGltMSA8PSAwKQotICAgICAgICAgICAgICAgIGdvdG8gZmFzdEZhaWxlZDsKLSAgICAgICAg
ICAgIGlsaW0gPSBpbGltMTsKLSAgICAgICAgICAgIGstLTsKLSAgICAgICAgICAgIGR2YWwoJnUp
ICo9IDEwLjsKLSAgICAgICAgICAgIGllcHMrKzsKLSAgICAgICAgfQotICAgICAgICBkdmFsKCZl
cHMpID0gKGllcHMgKiBkdmFsKCZ1KSkgKyA3LjsKLSAgICAgICAgd29yZDAoJmVwcykgLT0gKFAg
LSAxKSAqIEV4cF9tc2sxOwotICAgICAgICBpZiAoIWlsaW0pIHsKLSAgICAgICAgICAgIFMuY2xl
YXIoKTsKLSAgICAgICAgICAgIG1oaS5jbGVhcigpOwotICAgICAgICAgICAgZHZhbCgmdSkgLT0g
NS47Ci0gICAgICAgICAgICBpZiAoZHZhbCgmdSkgPiBkdmFsKCZlcHMpKQotICAgICAgICAgICAg
ICAgIGdvdG8gb25lRGlnaXQ7Ci0gICAgICAgICAgICBpZiAoZHZhbCgmdSkgPCAtZHZhbCgmZXBz
KSkKLSAgICAgICAgICAgICAgICBnb3RvIG5vRGlnaXRzOwotICAgICAgICAgICAgZ290byBmYXN0
RmFpbGVkOwotICAgICAgICB9Ci0gICAgICAgIGlmIChsZWZ0cmlnaHQpIHsKLSAgICAgICAgICAg
IC8qIFVzZSBTdGVlbGUgJiBXaGl0ZSBtZXRob2Qgb2Ygb25seQotICAgICAgICAgICAgICogZ2Vu
ZXJhdGluZyBkaWdpdHMgbmVlZGVkLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBkdmFs
KCZlcHMpID0gKDAuNSAvIHRlbnNbaWxpbSAtIDFdKSAtIGR2YWwoJmVwcyk7Ci0gICAgICAgICAg
ICBmb3IgKGkgPSAwOzspIHsKLSAgICAgICAgICAgICAgICBMID0gKGxvbmcgaW50KWR2YWwoJnUp
OwotICAgICAgICAgICAgICAgIGR2YWwoJnUpIC09IEw7Ci0gICAgICAgICAgICAgICAgKnMrKyA9
ICcwJyArIChpbnQpTDsKLSAgICAgICAgICAgICAgICBpZiAoZHZhbCgmdSkgPCBkdmFsKCZlcHMp
KQotICAgICAgICAgICAgICAgICAgICBnb3RvIHJldDsKLSAgICAgICAgICAgICAgICBpZiAoMS4g
LSBkdmFsKCZ1KSA8IGR2YWwoJmVwcykpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gYnVtcFVw
OwotICAgICAgICAgICAgICAgIGlmICgrK2kgPj0gaWxpbSkKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgZHZhbCgmZXBzKSAqPSAxMC47Ci0gICAgICAgICAgICAg
ICAgZHZhbCgmdSkgKj0gMTAuOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgLyogR2VuZXJhdGUgaWxpbSBkaWdpdHMsIHRoZW4gZml4IHRoZW0gdXAuICovCi0g
ICAgICAgICAgICBkdmFsKCZlcHMpICo9IHRlbnNbaWxpbSAtIDFdOwotICAgICAgICAgICAgZm9y
IChpID0gMTs7IGkrKywgZHZhbCgmdSkgKj0gMTAuKSB7Ci0gICAgICAgICAgICAgICAgTCA9IChp
bnQzMl90KShkdmFsKCZ1KSk7Ci0gICAgICAgICAgICAgICAgaWYgKCEoZHZhbCgmdSkgLT0gTCkp
Ci0gICAgICAgICAgICAgICAgICAgIGlsaW0gPSBpOwotICAgICAgICAgICAgICAgICpzKysgPSAn
MCcgKyAoaW50KUw7Ci0gICAgICAgICAgICAgICAgaWYgKGkgPT0gaWxpbSkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoZHZhbCgmdSkgPiAwLjUgKyBkdmFsKCZlcHMpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgZ290byBidW1wVXA7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkdmFsKCZ1
KSA8IDAuNSAtIGR2YWwoJmVwcykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgq
LS1zID09ICcwJykgeyB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBzKys7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBnb3RvIHJldDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLWZhc3RGYWlsZWQ6Ci0gICAgICAgIHMgPSBzMDsKLSAgICAgICAgZHZhbCgmdSkgPSBk
dmFsKCZkMik7Ci0gICAgICAgIGsgPSBrMDsKLSAgICAgICAgaWxpbSA9IGlsaW0wOwotICAgIH0K
LQotICAgIC8qIERvIHdlIGhhdmUgYSAic21hbGwiIGludGVnZXI/ICovCi0KLSAgICBpZiAoYmUg
Pj0gMCAmJiBrIDw9IEludF9tYXgpIHsKLSAgICAgICAgLyogWWVzLiAqLwotICAgICAgICBkcyA9
IHRlbnNba107Ci0gICAgICAgIGlmIChuZGlnaXRzIDwgMCAmJiBpbGltIDw9IDApIHsKLSAgICAg
ICAgICAgIFMuY2xlYXIoKTsKLSAgICAgICAgICAgIG1oaS5jbGVhcigpOwotICAgICAgICAgICAg
aWYgKGlsaW0gPCAwIHx8IGR2YWwoJnUpIDw9IDUgKiBkcykKLSAgICAgICAgICAgICAgICBnb3Rv
IG5vRGlnaXRzOwotICAgICAgICAgICAgZ290byBvbmVEaWdpdDsKLSAgICAgICAgfQotICAgICAg
ICBmb3IgKGkgPSAxOzsgaSsrLCBkdmFsKCZ1KSAqPSAxMC4pIHsKLSAgICAgICAgICAgIEwgPSAo
aW50MzJfdCkoZHZhbCgmdSkgLyBkcyk7Ci0gICAgICAgICAgICBkdmFsKCZ1KSAtPSBMICogZHM7
Ci0gICAgICAgICAgICAqcysrID0gJzAnICsgKGludClMOwotICAgICAgICAgICAgaWYgKCFkdmFs
KCZ1KSkgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKGkgPT0gaWxpbSkgewotICAgICAgICAgICAgICAgIGR2YWwoJnUpICs9IGR2YWwoJnUp
OwotICAgICAgICAgICAgICAgIGlmIChkdmFsKCZ1KSA+IGRzIHx8IChkdmFsKCZ1KSA9PSBkcyAm
JiAoTCAmIDEpKSkgewotYnVtcFVwOgotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKi0tcyA9
PSAnOScpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA9PSBzMCkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGsrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcyA9
ICcwJzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgKysqcysrOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICBnb3RvIHJldDsKLSAgICB9Ci0KLSAgICBtMiA9IGIyOwotICAgIG01ID0gYjU7Ci0gICAg
bWhpLmNsZWFyKCk7Ci0gICAgbWxvLmNsZWFyKCk7Ci0gICAgaWYgKGxlZnRyaWdodCkgewotICAg
ICAgICBpID0gZGVub3JtID8gYmUgKyAoQmlhcyArIChQIC0gMSkgLSAxICsgMSkgOiAxICsgUCAt
IGJiaXRzOwotICAgICAgICBiMiArPSBpOwotICAgICAgICBzMiArPSBpOwotICAgICAgICBpMmIo
bWhpLCAxKTsKLSAgICB9Ci0gICAgaWYgKG0yID4gMCAmJiBzMiA+IDApIHsKLSAgICAgICAgaSA9
IG0yIDwgczIgPyBtMiA6IHMyOwotICAgICAgICBiMiAtPSBpOwotICAgICAgICBtMiAtPSBpOwot
ICAgICAgICBzMiAtPSBpOwotICAgIH0KLSAgICBpZiAoYjUgPiAwKSB7Ci0gICAgICAgIGlmIChs
ZWZ0cmlnaHQpIHsKLSAgICAgICAgICAgIGlmIChtNSA+IDApIHsKLSAgICAgICAgICAgICAgICBw
b3c1bXVsdChtaGksIG01KTsKLSAgICAgICAgICAgICAgICBtdWx0KGIsIG1oaSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAoKGogPSBiNSAtIG01KSkKLSAgICAgICAgICAgICAgICBw
b3c1bXVsdChiLCBqKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBwb3c1bXVsdChiLCBi
NSk7Ci0gICAgfQotICAgIGkyYihTLCAxKTsKLSAgICBpZiAoczUgPiAwKQotICAgICAgICBwb3c1
bXVsdChTLCBzNSk7Ci0KLSAgICAvKiBDaGVjayBmb3Igc3BlY2lhbCBjYXNlIHRoYXQgZCBpcyBh
IG5vcm1hbGl6ZWQgcG93ZXIgb2YgMi4gKi8KLQotICAgIHNwZWNfY2FzZSA9IDA7Ci0gICAgaWYg
KChyb3VuZGluZ05vbmUgfHwgbGVmdHJpZ2h0KSAmJiAoIXdvcmQxKCZ1KSAmJiAhKHdvcmQwKCZ1
KSAmIEJuZHJ5X21hc2spICYmIHdvcmQwKCZ1KSAmIChFeHBfbWFzayAmIH5FeHBfbXNrMSkpKSB7
Ci0gICAgICAgIC8qIFRoZSBzcGVjaWFsIGNhc2UgKi8KLSAgICAgICAgYjIgKz0gTG9nMlA7Ci0g
ICAgICAgIHMyICs9IExvZzJQOwotICAgICAgICBzcGVjX2Nhc2UgPSAxOwotICAgIH0KLQotICAg
IC8qIEFycmFuZ2UgZm9yIGNvbnZlbmllbnQgY29tcHV0YXRpb24gb2YgcXVvdGllbnRzOgotICAg
ICAqIHNoaWZ0IGxlZnQgaWYgbmVjZXNzYXJ5IHNvIGRpdmlzb3IgaGFzIDQgbGVhZGluZyAwIGJp
dHMuCi0gICAgICoKLSAgICAgKiBQZXJoYXBzIHdlIHNob3VsZCBqdXN0IGNvbXB1dGUgbGVhZGlu
ZyAyOCBiaXRzIG9mIFMgb25jZQotICAgICAqIGFuZCBmb3IgYWxsIGFuZCBwYXNzIHRoZW0gYW5k
IGEgc2hpZnQgdG8gcXVvcmVtLCBzbyBpdAotICAgICAqIGNhbiBkbyBzaGlmdHMgYW5kIG9ycyB0
byBjb21wdXRlIHRoZSBudW1lcmF0b3IgZm9yIHEuCi0gICAgICovCi0gICAgaWYgKChpID0gKChz
NSA/IDMyIC0gaGkwYml0cyhTLndvcmRzKClbUy5zaXplKCkgLSAxXSkgOiAxKSArIHMyKSAmIDB4
MWYpKQotICAgICAgICBpID0gMzIgLSBpOwotICAgIGlmIChpID4gNCkgewotICAgICAgICBpIC09
IDQ7Ci0gICAgICAgIGIyICs9IGk7Ci0gICAgICAgIG0yICs9IGk7Ci0gICAgICAgIHMyICs9IGk7
Ci0gICAgfSBlbHNlIGlmIChpIDwgNCkgewotICAgICAgICBpICs9IDI4OwotICAgICAgICBiMiAr
PSBpOwotICAgICAgICBtMiArPSBpOwotICAgICAgICBzMiArPSBpOwotICAgIH0KLSAgICBpZiAo
YjIgPiAwKQotICAgICAgICBsc2hpZnQoYiwgYjIpOwotICAgIGlmIChzMiA+IDApCi0gICAgICAg
IGxzaGlmdChTLCBzMik7Ci0gICAgaWYgKGtfY2hlY2spIHsKLSAgICAgICAgaWYgKGNtcChiLCBT
KSA8IDApIHsKLSAgICAgICAgICAgIGstLTsKLSAgICAgICAgICAgIG11bHRhZGQoYiwgMTAsIDAp
OyAgICAvKiB3ZSBib3RjaGVkIHRoZSBrIGVzdGltYXRlICovCi0gICAgICAgICAgICBpZiAobGVm
dHJpZ2h0KQotICAgICAgICAgICAgICAgIG11bHRhZGQobWhpLCAxMCwgMCk7Ci0gICAgICAgICAg
ICBpbGltID0gaWxpbTE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGlsaW0gPD0gMCAmJiBy
b3VuZGluZ0RlY2ltYWxQbGFjZXMpIHsKLSAgICAgICAgaWYgKGlsaW0gPCAwKQotICAgICAgICAg
ICAgZ290byBub0RpZ2l0czsKLSAgICAgICAgbXVsdGFkZChTLCA1LCAwKTsKLSAgICAgICAgLy8g
Rm9yIElFRUUtNzU0IHVuYmlhc2VkIHJvdW5kaW5nIHRoaXMgY2hlY2sgc2hvdWxkIGJlIDw9LCBz
dWNoIHRoYXQgMC41IHdvdWxkIGZsdXNoIHRvIHplcm8uCi0gICAgICAgIGlmIChjbXAoYiwgUykg
PCAwKQotICAgICAgICAgICAgZ290byBub0RpZ2l0czsKLSAgICAgICAgZ290byBvbmVEaWdpdDsK
LSAgICB9Ci0gICAgaWYgKGxlZnRyaWdodCkgewotICAgICAgICBpZiAobTIgPiAwKQotICAgICAg
ICAgICAgbHNoaWZ0KG1oaSwgbTIpOwotCi0gICAgICAgIC8qIENvbXB1dGUgbWxvIC0tIGNoZWNr
IGZvciBzcGVjaWFsIGNhc2UKLSAgICAgICAgICogdGhhdCBkIGlzIGEgbm9ybWFsaXplZCBwb3dl
ciBvZiAyLgotICAgICAgICAgKi8KLQotICAgICAgICBtbG8gPSBtaGk7Ci0gICAgICAgIGlmIChz
cGVjX2Nhc2UpCi0gICAgICAgICAgICBsc2hpZnQobWhpLCBMb2cyUCk7Ci0KLSAgICAgICAgZm9y
IChpID0gMTs7aSsrKSB7Ci0gICAgICAgICAgICBkaWcgPSBxdW9yZW0oYiwgUykgKyAnMCc7Ci0g
ICAgICAgICAgICAvKiBEbyB3ZSB5ZXQgaGF2ZSB0aGUgc2hvcnRlc3QgZGVjaW1hbCBzdHJpbmcK
LSAgICAgICAgICAgICAqIHRoYXQgd2lsbCByb3VuZCB0byBkPwotICAgICAgICAgICAgICovCi0g
ICAgICAgICAgICBqID0gY21wKGIsIG1sbyk7Ci0gICAgICAgICAgICBkaWZmKGRlbHRhLCBTLCBt
aGkpOwotICAgICAgICAgICAgajEgPSBkZWx0YS5zaWduID8gMSA6IGNtcChiLCBkZWx0YSk7Ci0j
aWZkZWYgRFRPQV9ST1VORF9CSUFTRUQKLSAgICAgICAgICAgIGlmIChqIDwgMCB8fCAhaikgewot
I2Vsc2UKLSAgICAgICAgICAgIC8vIEZJWE1FOiBFQ01BLTI2MiBzcGVjaWZpZXMgdGhhdCBlcXVp
ZGlzdGFudCByZXN1bHRzIHJvdW5kIGF3YXkgZnJvbQotICAgICAgICAgICAgLy8gemVybywgd2hp
Y2ggcHJvYmFibHkgbWVhbnMgd2Ugc2hvdWxkbid0IGJlIG9uIHRoZSB1bmJpYXNlZCBjb2RlIHBh
dGgKLSAgICAgICAgICAgIC8vICh0aGUgKHdvcmQxKCZ1KSAmIDEpIGNsYXVzZSBpcyBsb29raW5n
IGhpZ2hseSBzdXNwaWNpb3VzKS4gSSBoYXZlbid0Ci0gICAgICAgICAgICAvLyB5ZXQgdW5kZXJz
dG9vZCB0aGlzIGNvZGUgd2VsbCBlbm91Z2ggdG8gbWFrZSB0aGUgY2FsbCwgYnV0IHdlIHNob3Vs
ZAotICAgICAgICAgICAgLy8gcHJvYmFibHkgYmUgZW5hYmxpbmcgRFRPQV9ST1VORF9CSUFTRUQu
IEkgdGhpbmsgdGhlIGludGVyZXN0aW5nIGNvcm5lcgotICAgICAgICAgICAgLy8gY2FzZSB0byB1
bmRlcnN0YW5kIGlzIHByb2JhYmx5ICJNYXRoLnBvdygwLjUsIDI0KS50b1N0cmluZygpIi4KLSAg
ICAgICAgICAgIC8vIEkgYmVsaWV2ZSB0aGlzIHZhbHVlIGlzIGludGVyZXN0aW5nIGJlY2F1c2Ug
SSB0aGluayBpdCBpcyBwcmVjaXNlbHkKLSAgICAgICAgICAgIC8vIHJlcHJlc2VudGFibGUgaW4g
YmluYXJ5IGZsb2F0aW5nIHBvaW50LCBhbmQgaXRzIGRlY2ltYWwgcmVwcmVzZW50YXRpb24KLSAg
ICAgICAgICAgIC8vIGhhcyBhIHNpbmdsZSBkaWdpdCB0aGF0IFN0ZWVsZSAmIFdoaXRlIHJlZHVj
dGlvbiBjYW4gcmVtb3ZlLCB3aXRoIHRoZQotICAgICAgICAgICAgLy8gdmFsdWUgNSAodGh1cyBl
cXVpZGlzdGFudCBmcm9tIHRoZSBuZXh0IG51bWJlcnMgYWJvdmUgYW5kIGJlbG93KS4KLSAgICAg
ICAgICAgIC8vIFdlIHByb2R1Y2UgdGhlIGNvcnJlY3QgYW5zd2VyIHVzaW5nIGVpdGhlciBjb2Rl
cGF0aCwgYW5kIEkgZG9uJ3QgYXMKLSAgICAgICAgICAgIC8vIHlldCB1bmRlcnN0YW5kIHdoeS4g
Oi0pCi0gICAgICAgICAgICBpZiAoIWoxICYmICEod29yZDEoJnUpICYgMSkpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoZGlnID09ICc5JykKLSAgICAgICAgICAgICAgICAgICAgZ290byByb3VuZDl1
cDsKLSAgICAgICAgICAgICAgICBpZiAoaiA+IDApCi0gICAgICAgICAgICAgICAgICAgIGRpZysr
OwotICAgICAgICAgICAgICAgICpzKysgPSBkaWc7Ci0gICAgICAgICAgICAgICAgZ290byByZXQ7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaiA8IDAgfHwgKCFqICYmICEod29yZDEo
JnUpICYgMSkpKSB7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBpZiAoKGIud29yZHMoKVswXSB8
fCBiLnNpemUoKSA+IDEpICYmIChqMSA+IDApKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxzaGlm
dChiLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgajEgPSBjbXAoYiwgUyk7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIEZvciBJRUVFLTc1NCByb3VuZC10by1ldmVuLCB0aGlzIGNoZWNrIHNob3Vs
ZCBiZSAoajEgPiAwIHx8ICghajEgJiYgKGRpZyAmIDEpKSksCi0gICAgICAgICAgICAgICAgICAg
IC8vIGJ1dCBFQ01BLTI2MiBzcGVjaWZpZXMgdGhhdCBlcXVpZGlzdGFudCB2YWx1ZXMgKGUuZy4g
KC41KS50b0ZpeGVkKCkpIHNob3VsZAotICAgICAgICAgICAgICAgICAgICAvLyBiZSByb3VuZGVk
IGF3YXkgZnJvbSB6ZXJvLgotICAgICAgICAgICAgICAgICAgICBpZiAoajEgPj0gMCkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGRpZyA9PSAnOScpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ290byByb3VuZDl1cDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpZysrOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICpzKysgPSBkaWc7Ci0gICAgICAgICAgICAgICAgZ290byByZXQ7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAoajEgPiAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGRpZyA9PSAnOScp
IHsgLyogcG9zc2libGUgaWYgaSA9PSAxICovCi1yb3VuZDl1cDoKLSAgICAgICAgICAgICAgICAg
ICAgKnMrKyA9ICc5JzsKLSAgICAgICAgICAgICAgICAgICAgZ290byByb3VuZG9mZjsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgKnMrKyA9IGRpZyArIDE7Ci0gICAgICAgICAg
ICAgICAgZ290byByZXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAqcysrID0gZGlnOwot
ICAgICAgICAgICAgaWYgKGkgPT0gaWxpbSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIG11bHRhZGQoYiwgMTAsIDApOwotICAgICAgICAgICAgbXVsdGFkZChtbG8sIDEwLCAw
KTsKLSAgICAgICAgICAgIG11bHRhZGQobWhpLCAxMCwgMCk7Ci0gICAgICAgIH0KLSAgICB9IGVs
c2UgewotICAgICAgICBmb3IgKGkgPSAxOzsgaSsrKSB7Ci0gICAgICAgICAgICAqcysrID0gZGln
ID0gcXVvcmVtKGIsIFMpICsgJzAnOwotICAgICAgICAgICAgaWYgKCFiLndvcmRzKClbMF0gJiYg
Yi5zaXplKCkgPD0gMSkKLSAgICAgICAgICAgICAgICBnb3RvIHJldDsKLSAgICAgICAgICAgIGlm
IChpID49IGlsaW0pCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBtdWx0YWRk
KGIsIDEwLCAwKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIFJvdW5kIG9mZiBsYXN0IGRp
Z2l0ICovCi0KLSAgICBsc2hpZnQoYiwgMSk7Ci0gICAgaiA9IGNtcChiLCBTKTsKLSAgICAvLyBG
b3IgSUVFRS03NTQgcm91bmQtdG8tZXZlbiwgdGhpcyBjaGVjayBzaG91bGQgYmUgKGogPiAwIHx8
ICghaiAmJiAoZGlnICYgMSkpKSwKLSAgICAvLyBidXQgRUNNQS0yNjIgc3BlY2lmaWVzIHRoYXQg
ZXF1aWRpc3RhbnQgdmFsdWVzIChlLmcuICguNSkudG9GaXhlZCgpKSBzaG91bGQKLSAgICAvLyBi
ZSByb3VuZGVkIGF3YXkgZnJvbSB6ZXJvLgotICAgIGlmIChqID49IDApIHsKLXJvdW5kb2ZmOgot
ICAgICAgICB3aGlsZSAoKi0tcyA9PSAnOScpCi0gICAgICAgICAgICBpZiAocyA9PSBzMCkgewot
ICAgICAgICAgICAgICAgIGsrKzsKLSAgICAgICAgICAgICAgICAqcysrID0gJzEnOwotICAgICAg
ICAgICAgICAgIGdvdG8gcmV0OwotICAgICAgICAgICAgfQotICAgICAgICArKypzKys7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgd2hpbGUgKCotLXMgPT0gJzAnKSB7IH0KLSAgICAgICAgcysrOwot
ICAgIH0KLSAgICBnb3RvIHJldDsKLW5vRGlnaXRzOgotICAgIGV4cG9uZW50T3V0ID0gMDsKLSAg
ICBwcmVjaXNpb25PdXQgPSAxOwotICAgIHJlc3VsdFswXSA9ICcwJzsKLSAgICByZXN1bHRbMV0g
PSAnXDAnOwotICAgIHJldHVybjsKLW9uZURpZ2l0OgotICAgICpzKysgPSAnMSc7Ci0gICAgaysr
OwotICAgIGdvdG8gcmV0OwotcmV0OgotICAgIEFTU0VSVChzID4gcmVzdWx0KTsKLSAgICAqcyA9
IDA7Ci0gICAgZXhwb25lbnRPdXQgPSBrOwotICAgIHByZWNpc2lvbk91dCA9IHMgLSByZXN1bHQ7
Ci19Ci0KLXZvaWQgZHRvYShEdG9hQnVmZmVyIHJlc3VsdCwgZG91YmxlIGRkLCBib29sJiBzaWdu
LCBpbnQmIGV4cG9uZW50LCB1bnNpZ25lZCYgcHJlY2lzaW9uKQotewotICAgIC8vIGZsYWdzIGFy
ZSByb3VuZGluZ05vbmUsIGxlZnRyaWdodC4KLSAgICBkdG9hPHRydWUsIGZhbHNlLCBmYWxzZSwg
dHJ1ZT4ocmVzdWx0LCBkZCwgMCwgc2lnbiwgZXhwb25lbnQsIHByZWNpc2lvbik7Ci19Ci0KLXZv
aWQgZHRvYVJvdW5kU0YoRHRvYUJ1ZmZlciByZXN1bHQsIGRvdWJsZSBkZCwgaW50IG5kaWdpdHMs
IGJvb2wmIHNpZ24sIGludCYgZXhwb25lbnQsIHVuc2lnbmVkJiBwcmVjaXNpb24pCi17Ci0gICAg
Ly8gZmxhZyBpcyByb3VuZGluZ1NpZ25pZmljYW50RmlndXJlcy4KLSAgICBkdG9hPGZhbHNlLCB0
cnVlLCBmYWxzZSwgZmFsc2U+KHJlc3VsdCwgZGQsIG5kaWdpdHMsIHNpZ24sIGV4cG9uZW50LCBw
cmVjaXNpb24pOwotfQotCi12b2lkIGR0b2FSb3VuZERQKER0b2FCdWZmZXIgcmVzdWx0LCBkb3Vi
bGUgZGQsIGludCBuZGlnaXRzLCBib29sJiBzaWduLCBpbnQmIGV4cG9uZW50LCB1bnNpZ25lZCYg
cHJlY2lzaW9uKQotewotICAgIC8vIGZsYWcgaXMgcm91bmRpbmdEZWNpbWFsUGxhY2VzLgotICAg
IGR0b2E8ZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZT4ocmVzdWx0LCBkZCwgbmRpZ2l0cywgc2ln
biwgZXhwb25lbnQsIHByZWNpc2lvbik7Ci19Ci0KLXN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQg
Y29weUFzY2lpVG9VVEYxNihVQ2hhciogbmV4dCwgY29uc3QgY2hhciogc3JjLCB1bnNpZ25lZCBz
aXplKQorY29uc3QgY2hhciAqbnVtYmVyVG9TdHJpbmcoZG91YmxlIGQsIE51bWJlclRvU3RyaW5n
QnVmZmVyIGJ1ZmZlcikKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytp
KQotICAgICAgICAqbmV4dCsrID0gKnNyYysrOwotfQotCi11bnNpZ25lZCBudW1iZXJUb1N0cmlu
Zyhkb3VibGUgZCwgTnVtYmVyVG9TdHJpbmdCdWZmZXIgYnVmZmVyKQotewotICAgIC8vIEhhbmRs
ZSBOYU4gYW5kIEluZmluaXR5LgotICAgIGlmICghaXNmaW5pdGUoZCkpIHsKLSAgICAgICAgaWYg
KGlzbmFuKGQpKSB7Ci0gICAgICAgICAgICBjb3B5QXNjaWlUb1VURjE2KGJ1ZmZlciwgIk5hTiIs
IDMpOwotICAgICAgICAgICAgcmV0dXJuIDM7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGQgPiAw
KSB7Ci0gICAgICAgICAgICBjb3B5QXNjaWlUb1VURjE2KGJ1ZmZlciwgIkluZmluaXR5IiwgOCk7
Ci0gICAgICAgICAgICByZXR1cm4gODsKLSAgICAgICAgfQotICAgICAgICBjb3B5QXNjaWlUb1VU
RjE2KGJ1ZmZlciwgIi1JbmZpbml0eSIsIDkpOwotICAgICAgICByZXR1cm4gOTsKLSAgICB9Ci0K
LSAgICAvLyBDb252ZXJ0IHRvIGRlY2ltYWwgd2l0aCByb3VuZGluZy4KLSAgICBEZWNpbWFsTnVt
YmVyIG51bWJlcihkKTsKLSAgICByZXR1cm4gbnVtYmVyLmV4cG9uZW50KCkgPj0gLTYgJiYgbnVt
YmVyLmV4cG9uZW50KCkgPCAyMQotICAgICAgICA/IG51bWJlci50b1N0cmluZ0RlY2ltYWwoYnVm
ZmVyLCBOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCkKLSAgICAgICAgOiBudW1iZXIudG9TdHJp
bmdFeHBvbmVudGlhbChidWZmZXIsIE51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoKTsKKyAgICBk
b3VibGVfY29udmVyc2lvbjo6U3RyaW5nQnVpbGRlciBidWlsZGVyKGJ1ZmZlciwgTnVtYmVyVG9T
dHJpbmdCdWZmZXJMZW5ndGgpOworICAgIGNvbnN0IGRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGVU
b1N0cmluZ0NvbnZlcnRlciYgY29udmVydGVyID0gZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZVRv
U3RyaW5nQ29udmVydGVyOjpFY21hU2NyaXB0Q29udmVydGVyKCk7CisgICAgY29udmVydGVyLlRv
U2hvcnRlc3QoZCwgJmJ1aWxkZXIpOworICAgIHJldHVybiBidWlsZGVyLkZpbmFsaXplKCk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9kdG9hLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EuaAppbmRleCAzOTI0
YTFjYzQwNWRiMjkzYjAxZjZkNGJkYWU2NTc1OTUyNTgxNzJjLi43MGVlYzEyZTQzNTVjM2I3YjQ1
MGNlNzkyOTIxYjgyZmE1ZTJlYmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL2R0b2EuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EuaApAQCAtMjEs
NyArMjEsNyBAQAogI2lmbmRlZiBXVEZfZHRvYV9oCiAjZGVmaW5lIFdURl9kdG9hX2gKIAotI2lu
Y2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KKyNpbmNsdWRlIDx3dGYvZHRvYS9kb3VibGUt
Y29udmVyc2lvbi5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIGNsYXNzIE11dGV4OwpAQCAtMzIsMTYg
KzMyLDEwIEBAIGV4dGVybiBXVEY6Ok11dGV4KiBzX2R0b2FQNU11dGV4OwogLy8gc2U6ICpzZSB3
aWxsIGhhdmUgdGhlIGxhc3QgY29uc3VtZWQgY2hhcmFjdGVyIHBvc2l0aW9uICsgMS4KIGRvdWJs
ZSBzdHJ0b2QoY29uc3QgY2hhciogczAwLCBjaGFyKiogc2UpOwogCi10eXBlZGVmIGNoYXIgRHRv
YUJ1ZmZlcls4MF07Ci0KLXZvaWQgZHRvYShEdG9hQnVmZmVyIHJlc3VsdCwgZG91YmxlIGRkLCBi
b29sJiBzaWduLCBpbnQmIGV4cG9uZW50LCB1bnNpZ25lZCYgcHJlY2lzaW9uKTsKLXZvaWQgZHRv
YVJvdW5kU0YoRHRvYUJ1ZmZlciByZXN1bHQsIGRvdWJsZSBkZCwgaW50IG5kaWdpdHMsIGJvb2wm
IHNpZ24sIGludCYgZXhwb25lbnQsIHVuc2lnbmVkJiBwcmVjaXNpb24pOwotdm9pZCBkdG9hUm91
bmREUChEdG9hQnVmZmVyIHJlc3VsdCwgZG91YmxlIGRkLCBpbnQgbmRpZ2l0cywgYm9vbCYgc2ln
biwgaW50JiBleHBvbmVudCwgdW5zaWduZWQmIHByZWNpc2lvbik7Ci0KIC8vIFNpemUgPSA4MCBm
b3Igc2l6ZW9mKER0b2FCdWZmZXIpICsgc29tZSBzaWduIGJpdHMsIGRlY2ltYWwgcG9pbnQsICdl
JywgZXhwb25lbnQgZGlnaXRzLgogY29uc3QgdW5zaWduZWQgTnVtYmVyVG9TdHJpbmdCdWZmZXJM
ZW5ndGggPSA5NjsKLXR5cGVkZWYgVUNoYXIgTnVtYmVyVG9TdHJpbmdCdWZmZXJbTnVtYmVyVG9T
dHJpbmdCdWZmZXJMZW5ndGhdOwotdW5zaWduZWQgbnVtYmVyVG9TdHJpbmcoZG91YmxlLCBOdW1i
ZXJUb1N0cmluZ0J1ZmZlcik7Cit0eXBlZGVmIGNoYXIgTnVtYmVyVG9TdHJpbmdCdWZmZXJbTnVt
YmVyVG9TdHJpbmdCdWZmZXJMZW5ndGhdOworY29uc3QgY2hhciAqbnVtYmVyVG9TdHJpbmcoZG91
YmxlLCBOdW1iZXJUb1N0cmluZ0J1ZmZlcik7CiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvQ09QWUlORyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvZHRvYS9DT1BZSU5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkzMzcxOGE5ZWY5ZGFl
NGNiNGFmYTU2ZTQ5MDIxMTc2MGQ4YTk0OWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL2R0b2EvQ09QWUlORwpAQCAtMCwwICsxLDI2IEBACitDb3B5cmlnaHQg
MjAwNi0yMDExLCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCittZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZworICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgICAgICB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
K0xJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKK09XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCitEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKK1RIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9MSUNFTlNFIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL0xJQ0VOU0UKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTMzNzE4
YTllZjlkYWU0Y2I0YWZhNTZlNDkwMjExNzYwZDhhOTQ5ZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9MSUNFTlNFCkBAIC0wLDAgKzEsMjYgQEAKK0Nv
cHlyaWdodCAyMDA2LTIwMTEsIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKK21ldDoKKworICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAgICAgIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCitBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCitTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CitMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKK0RBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCitP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL1JF
QURNRSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9SRUFETUUKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZjE4NmI0MjBmNDJiYzE0YzdkNTc2NWVhNDNmNmIyOGQzYzI5YjkyMQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9SRUFETUUKQEAgLTAsMCArMSwxMSBA
QAoraHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2RvdWJsZS1jb252ZXJzaW9uCisKK1RoaXMgcHJv
amVjdCAoZG91YmxlLWNvbnZlcnNpb24pIHByb3ZpZGVzIGJpbmFyeS1kZWNpbWFsIGFuZCBkZWNp
bWFsLWJpbmFyeQorcm91dGluZXMgZm9yIElFRUUgZG91Ymxlcy4KKworVGhlIGxpYnJhcnkgY29u
c2lzdHMgb2YgZWZmaWNpZW50IGNvbnZlcnNpb24gcm91dGluZXMgdGhhdCBoYXZlIGJlZW4gZXh0
cmFjdGVkCitmcm9tIHRoZSBWOCBKYXZhU2NyaXB0IGVuZ2luZS4gVGhlIGNvZGUgaGFzIGJlZW4g
cmVmYWN0b3JlZCBhbmQgaW1wcm92ZWQgc28gdGhhdAoraXQgY2FuIGJlIHVzZWQgbW9yZSBlYXNp
bHkgaW4gb3RoZXIgcHJvamVjdHMuCisKK1RoZXJlIGlzIGV4dGVuc2l2ZSBkb2N1bWVudGF0aW9u
IGluIHNyYy9kb3VibGUtY29udmVyc2lvbi5oLiBPdGhlciBleGFtcGxlcyBjYW4KK2JlIGZvdW5k
IGluIHRlc3QvY2N0ZXN0L3Rlc3QtY29udmVyc2lvbnMuY2MuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvYmlnbnVtLWR0b2EuY2MgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL2R0b2EvYmlnbnVtLWR0b2EuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTQ5YjBhMGRiNDVmZWFm
OWVkMDg2YTc2OWQ4NDE5MTljYjNlZjIzMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvZHRvYS9iaWdudW0tZHRvYS5jYwpAQCAtMCwwICsxLDY1MyBAQAorLy8g
Q29weXJpZ2h0IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlz
Y2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkCisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKy8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisv
LyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSAi
YmlnbnVtLWR0b2EuaCIKKworI2luY2x1ZGUgImJpZ251bS5oIgorI2luY2x1ZGUgImRvdWJsZS5o
IgorCituYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIHN0YXRpYyBpbnQg
Tm9ybWFsaXplZEV4cG9uZW50KHVpbnQ2NF90IHNpZ25pZmljYW5kLCBpbnQgZXhwb25lbnQpIHsK
KyAgICAgICAgQVNTRVJUKHNpZ25pZmljYW5kICE9IDApOworICAgICAgICB3aGlsZSAoKHNpZ25p
ZmljYW5kICYgRG91YmxlOjprSGlkZGVuQml0KSA9PSAwKSB7CisgICAgICAgICAgICBzaWduaWZp
Y2FuZCA9IHNpZ25pZmljYW5kIDw8IDE7CisgICAgICAgICAgICBleHBvbmVudCA9IGV4cG9uZW50
IC0gMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZXhwb25lbnQ7CisgICAgfQorICAgIAor
ICAgIAorICAgIC8vIEZvcndhcmQgZGVjbGFyYXRpb25zOgorICAgIC8vIFJldHVybnMgYW4gZXN0
aW1hdGlvbiBvZiBrIHN1Y2ggdGhhdCAxMF4oay0xKSA8PSB2IDwgMTBeay4KKyAgICBzdGF0aWMg
aW50IEVzdGltYXRlUG93ZXIoaW50IGV4cG9uZW50KTsKKyAgICAvLyBDb21wdXRlcyB2IC8gMTBe
ZXN0aW1hdGVkX3Bvd2VyIGV4YWN0bHksIGFzIGEgcmF0aW8gb2YgdHdvIGJpZ251bXMsIG51bWVy
YXRvcgorICAgIC8vIGFuZCBkZW5vbWluYXRvci4KKyAgICBzdGF0aWMgdm9pZCBJbml0aWFsU2Nh
bGVkU3RhcnRWYWx1ZXMoZG91YmxlIHYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBlc3RpbWF0ZWRfcG93ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgbmVlZF9ib3VuZGFyeV9kZWx0YXMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogbnVtZXJhdG9yLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIGRlbm9taW5hdG9yLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIGRlbHRhX21pbnVz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIGRlbHRh
X3BsdXMpOworICAgIC8vIE11bHRpcGxpZXMgbnVtZXJhdG9yL2Rlbm9taW5hdG9yIHNvIHRoYXQg
aXRzIHZhbHVlcyBsaWVzIGluIHRoZSByYW5nZSAxLTEwLgorICAgIC8vIFJldHVybnMgZGVjaW1h
bF9wb2ludCBzLnQuCisgICAgLy8gIHYgPSBudW1lcmF0b3InL2Rlbm9taW5hdG9yJyAqIDEwXihk
ZWNpbWFsX3BvaW50LTEpCisgICAgLy8gICAgIHdoZXJlIG51bWVyYXRvcicgYW5kIGRlbm9taW5h
dG9yJyBhcmUgdGhlIHZhbHVlcyBvZiBudW1lcmF0b3IgYW5kCisgICAgLy8gICAgIGRlbm9taW5h
dG9yIGFmdGVyIHRoZSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24uCisgICAgc3RhdGljIHZvaWQgRml4
dXBNdWx0aXBseTEwKGludCBlc3RpbWF0ZWRfcG93ZXIsIGJvb2wgaXNfZXZlbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBkZWNpbWFsX3BvaW50LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBCaWdudW0qIG51bWVyYXRvciwgQmlnbnVtKiBkZW5vbWluYXRv
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBkZWx0YV9taW51cywg
QmlnbnVtKiBkZWx0YV9wbHVzKTsKKyAgICAvLyBHZW5lcmF0ZXMgZGlnaXRzIGZyb20gdGhlIGxl
ZnQgdG8gdGhlIHJpZ2h0IGFuZCBzdG9wcyB3aGVuIHRoZSBnZW5lcmF0ZWQKKyAgICAvLyBkaWdp
dHMgeWllbGQgdGhlIHNob3J0ZXN0IGRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2Ygdi4KKyAgICBz
dGF0aWMgdm9pZCBHZW5lcmF0ZVNob3J0ZXN0RGlnaXRzKEJpZ251bSogbnVtZXJhdG9yLCBCaWdu
dW0qIGRlbm9taW5hdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QmlnbnVtKiBkZWx0YV9taW51cywgQmlnbnVtKiBkZWx0YV9wbHVzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc19ldmVuLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwgaW50KiBsZW5ndGgpOwor
ICAgIC8vIEdlbmVyYXRlcyAncmVxdWVzdGVkX2RpZ2l0cycgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9p
bnQuCisgICAgc3RhdGljIHZvaWQgQmlnbnVtVG9GaXhlZChpbnQgcmVxdWVzdGVkX2RpZ2l0cywg
aW50KiBkZWNpbWFsX3BvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVt
KiBudW1lcmF0b3IsIEJpZ251bSogZGVub21pbmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBWZWN0b3I8Y2hhcj4oYnVmZmVyKSwgaW50KiBsZW5ndGgpOworICAgIC8vIEdlbmVy
YXRlcyAnY291bnQnIGRpZ2l0cyBvZiBudW1lcmF0b3IvZGVub21pbmF0b3IuCisgICAgLy8gT25j
ZSAnY291bnQnIGRpZ2l0cyBoYXZlIGJlZW4gcHJvZHVjZWQgcm91bmRzIHRoZSByZXN1bHQgZGVw
ZW5kaW5nIG9uIHRoZQorICAgIC8vIHJlbWFpbmRlciAocmVtYWluZGVycyBvZiBleGFjdGx5IC41
IHJvdW5kIHVwd2FyZHMpLiBNaWdodCB1cGRhdGUgdGhlCisgICAgLy8gZGVjaW1hbF9wb2ludCB3
aGVuIHJvdW5kaW5nIHVwIChmb3IgZXhhbXBsZSBmb3IgMC45OTk5KS4KKyAgICBzdGF0aWMgdm9p
ZCBHZW5lcmF0ZUNvdW50ZWREaWdpdHMoaW50IGNvdW50LCBpbnQqIGRlY2ltYWxfcG9pbnQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogbnVtZXJhdG9yLCBC
aWdudW0qIGRlbm9taW5hdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBWZWN0b3I8Y2hhcj4oYnVmZmVyKSwgaW50KiBsZW5ndGgpOworICAgIAorICAgIAorICAgIHZv
aWQgQmlnbnVtRHRvYShkb3VibGUgdiwgQmlnbnVtRHRvYU1vZGUgbW9kZSwgaW50IHJlcXVlc3Rl
ZF9kaWdpdHMsCisgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXIsIGludCog
bGVuZ3RoLCBpbnQqIGRlY2ltYWxfcG9pbnQpIHsKKyAgICAgICAgQVNTRVJUKHYgPiAwKTsKKyAg
ICAgICAgQVNTRVJUKCFEb3VibGUodikuSXNTcGVjaWFsKCkpOworICAgICAgICB1aW50NjRfdCBz
aWduaWZpY2FuZCA9IERvdWJsZSh2KS5TaWduaWZpY2FuZCgpOworICAgICAgICBib29sIGlzX2V2
ZW4gPSAoc2lnbmlmaWNhbmQgJiAxKSA9PSAwOworICAgICAgICBpbnQgZXhwb25lbnQgPSBEb3Vi
bGUodikuRXhwb25lbnQoKTsKKyAgICAgICAgaW50IG5vcm1hbGl6ZWRfZXhwb25lbnQgPSBOb3Jt
YWxpemVkRXhwb25lbnQoc2lnbmlmaWNhbmQsIGV4cG9uZW50KTsKKyAgICAgICAgLy8gZXN0aW1h
dGVkX3Bvd2VyIG1pZ2h0IGJlIHRvbyBsb3cgYnkgMS4KKyAgICAgICAgaW50IGVzdGltYXRlZF9w
b3dlciA9IEVzdGltYXRlUG93ZXIobm9ybWFsaXplZF9leHBvbmVudCk7CisgICAgICAgIAorICAg
ICAgICAvLyBTaG9ydGN1dCBmb3IgRml4ZWQuCisgICAgICAgIC8vIFRoZSByZXF1ZXN0ZWQgZGln
aXRzIGNvcnJlc3BvbmQgdG8gdGhlIGRpZ2l0cyBhZnRlciB0aGUgcG9pbnQuIElmIHRoZQorICAg
ICAgICAvLyBudW1iZXIgaXMgbXVjaCB0b28gc21hbGwsIHRoZW4gdGhlcmUgaXMgbm8gbmVlZCBp
biB0cnlpbmcgdG8gZ2V0IGFueQorICAgICAgICAvLyBkaWdpdHMuCisgICAgICAgIGlmIChtb2Rl
ID09IEJJR05VTV9EVE9BX0ZJWEVEICYmIC1lc3RpbWF0ZWRfcG93ZXIgLSAxID4gcmVxdWVzdGVk
X2RpZ2l0cykgeworICAgICAgICAgICAgYnVmZmVyWzBdID0gJ1wwJzsKKyAgICAgICAgICAgICps
ZW5ndGggPSAwOworICAgICAgICAgICAgLy8gU2V0IGRlY2ltYWwtcG9pbnQgdG8gLXJlcXVlc3Rl
ZF9kaWdpdHMuIFRoaXMgaXMgd2hhdCBHYXkgZG9lcy4KKyAgICAgICAgICAgIC8vIE5vdGUgdGhh
dCBpdCBzaG91bGQgbm90IGhhdmUgYW55IGVmZmVjdCBhbnl3YXlzIHNpbmNlIHRoZSBzdHJpbmcg
aXMKKyAgICAgICAgICAgIC8vIGVtcHR5LgorICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSAt
cmVxdWVzdGVkX2RpZ2l0czsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgQmlnbnVtIG51bWVyYXRvcjsKKyAgICAgICAgQmlnbnVtIGRlbm9taW5hdG9y
OworICAgICAgICBCaWdudW0gZGVsdGFfbWludXM7CisgICAgICAgIEJpZ251bSBkZWx0YV9wbHVz
OworICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGJpZ251bSBjYW4gZ3JvdyBsYXJnZSBlbm91Z2gu
IFRoZSBzbWFsbGVzdCBkb3VibGUgZXF1YWxzCisgICAgICAgIC8vIDRlLTMyNC4gSW4gdGhpcyBj
YXNlIHRoZSBkZW5vbWluYXRvciBuZWVkcyBmZXdlciB0aGFuIDMyNCo0IGJpbmFyeSBkaWdpdHMu
CisgICAgICAgIC8vIFRoZSBtYXhpbXVtIGRvdWJsZSBpcyAxLjc5NzY5MzEzNDg2MjMxNTdlMzA4
IHdoaWNoIG5lZWRzIGZld2VyIHRoYW4KKyAgICAgICAgLy8gMzA4KjQgYmluYXJ5IGRpZ2l0cy4K
KyAgICAgICAgQVNTRVJUKEJpZ251bTo6a01heFNpZ25pZmljYW50Qml0cyA+PSAzMjQqNCk7Cisg
ICAgICAgIGJvb2wgbmVlZF9ib3VuZGFyeV9kZWx0YXMgPSAobW9kZSA9PSBCSUdOVU1fRFRPQV9T
SE9SVEVTVCk7CisgICAgICAgIEluaXRpYWxTY2FsZWRTdGFydFZhbHVlcyh2LCBlc3RpbWF0ZWRf
cG93ZXIsIG5lZWRfYm91bmRhcnlfZGVsdGFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJm51bWVyYXRvciwgJmRlbm9taW5hdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJmRlbHRhX21pbnVzLCAmZGVsdGFfcGx1cyk7CisgICAgICAgIC8vIFdlIG5vdyBo
YXZlIHYgPSAobnVtZXJhdG9yIC8gZGVub21pbmF0b3IpICogMTBeZXN0aW1hdGVkX3Bvd2VyLgor
ICAgICAgICBGaXh1cE11bHRpcGx5MTAoZXN0aW1hdGVkX3Bvd2VyLCBpc19ldmVuLCBkZWNpbWFs
X3BvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgJm51bWVyYXRvciwgJmRlbm9taW5hdG9y
LAorICAgICAgICAgICAgICAgICAgICAgICAgJmRlbHRhX21pbnVzLCAmZGVsdGFfcGx1cyk7Cisg
ICAgICAgIC8vIFdlIG5vdyBoYXZlIHYgPSAobnVtZXJhdG9yIC8gZGVub21pbmF0b3IpICogMTBe
KGRlY2ltYWxfcG9pbnQtMSksIGFuZAorICAgICAgICAvLyAgMSA8PSAobnVtZXJhdG9yICsgZGVs
dGFfcGx1cykgLyBkZW5vbWluYXRvciA8IDEwCisgICAgICAgIHN3aXRjaCAobW9kZSkgeworICAg
ICAgICAgICAgY2FzZSBCSUdOVU1fRFRPQV9TSE9SVEVTVDoKKyAgICAgICAgICAgICAgICBHZW5l
cmF0ZVNob3J0ZXN0RGlnaXRzKCZudW1lcmF0b3IsICZkZW5vbWluYXRvciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkZWx0YV9taW51cywgJmRlbHRhX3BsdXMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19ldmVuLCBidWZmZXIsIGxl
bmd0aCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJJR05VTV9E
VE9BX0ZJWEVEOgorICAgICAgICAgICAgICAgIEJpZ251bVRvRml4ZWQocmVxdWVzdGVkX2RpZ2l0
cywgZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZudW1lcmF0
b3IsICZkZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwg
bGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQklHTlVN
X0RUT0FfUFJFQ0lTSU9OOgorICAgICAgICAgICAgICAgIEdlbmVyYXRlQ291bnRlZERpZ2l0cyhy
ZXF1ZXN0ZWRfZGlnaXRzLCBkZWNpbWFsX3BvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmbnVtZXJhdG9yLCAmZGVub21pbmF0b3IsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgfQorICAgICAgICBidWZmZXJbKmxlbmd0aF0gPSAnXDAnOworICAgIH0KKyAg
ICAKKyAgICAKKyAgICAvLyBUaGUgcHJvY2VkdXJlIHN0YXJ0cyBnZW5lcmF0aW5nIGRpZ2l0cyBm
cm9tIHRoZSBsZWZ0IHRvIHRoZSByaWdodCBhbmQgc3RvcHMKKyAgICAvLyB3aGVuIHRoZSBnZW5l
cmF0ZWQgZGlnaXRzIHlpZWxkIHRoZSBzaG9ydGVzdCBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9m
IHYuIEEKKyAgICAvLyBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIHYgaXMgYSBudW1iZXIgbHlp
bmcgY2xvc2VyIHRvIHYgdGhhbiB0byBhbnkgb3RoZXIKKyAgICAvLyBkb3VibGUsIHNvIGl0IGNv
bnZlcnRzIHRvIHYgd2hlbiByZWFkLgorICAgIC8vCisgICAgLy8gVGhpcyBpcyB0cnVlIGlmIGQs
IHRoZSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uLCBpcyBiZXR3ZWVuIG0tIGFuZCBtKywgdGhlCisg
ICAgLy8gdXBwZXIgYW5kIGxvd2VyIGJvdW5kYXJpZXMuIGQgbXVzdCBiZSBzdHJpY3RseSBiZXR3
ZWVuIHRoZW0gaWYgIWlzX2V2ZW4uCisgICAgLy8gICAgICAgICAgIG0tIDo9IChudW1lcmF0b3Ig
LSBkZWx0YV9taW51cykgLyBkZW5vbWluYXRvcgorICAgIC8vICAgICAgICAgICBtKyA6PSAobnVt
ZXJhdG9yICsgZGVsdGFfcGx1cykgLyBkZW5vbWluYXRvcgorICAgIC8vCisgICAgLy8gUHJlY29u
ZGl0aW9uOiAwIDw9IChudW1lcmF0b3IrZGVsdGFfcGx1cykgLyBkZW5vbWluYXRvciA8IDEwLgor
ICAgIC8vICAgSWYgMSA8PSAobnVtZXJhdG9yK2RlbHRhX3BsdXMpIC8gZGVub21pbmF0b3IgPCAx
MCB0aGVuIG5vIGxlYWRpbmcgMCBkaWdpdAorICAgIC8vICAgd2lsbCBiZSBwcm9kdWNlZC4gVGhp
cyBzaG91bGQgYmUgdGhlIHN0YW5kYXJkIHByZWNvbmRpdGlvbi4KKyAgICBzdGF0aWMgdm9pZCBH
ZW5lcmF0ZVNob3J0ZXN0RGlnaXRzKEJpZ251bSogbnVtZXJhdG9yLCBCaWdudW0qIGRlbm9taW5h
dG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBkZWx0
YV9taW51cywgQmlnbnVtKiBkZWx0YV9wbHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBpc19ldmVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwgaW50KiBsZW5ndGgpIHsKKyAgICAgICAgLy8g
U21hbGwgb3B0aW1pemF0aW9uOiBpZiBkZWx0YV9taW51cyBhbmQgZGVsdGFfcGx1cyBhcmUgdGhl
IHNhbWUganVzdCByZXVzZQorICAgICAgICAvLyBvbmUgb2YgdGhlIHR3byBiaWdudW1zLgorICAg
ICAgICBpZiAoQmlnbnVtOjpFcXVhbCgqZGVsdGFfbWludXMsICpkZWx0YV9wbHVzKSkgeworICAg
ICAgICAgICAgZGVsdGFfcGx1cyA9IGRlbHRhX21pbnVzOworICAgICAgICB9CisgICAgICAgICps
ZW5ndGggPSAwOworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgdWludDE2X3Qg
ZGlnaXQ7CisgICAgICAgICAgICBkaWdpdCA9IG51bWVyYXRvci0+RGl2aWRlTW9kdWxvSW50Qmln
bnVtKCpkZW5vbWluYXRvcik7CisgICAgICAgICAgICBBU1NFUlQoZGlnaXQgPD0gOSk7ICAvLyBk
aWdpdCBpcyBhIHVpbnQxNl90IGFuZCB0aGVyZWZvcmUgYWx3YXlzIHBvc2l0aXZlLgorICAgICAg
ICAgICAgLy8gZGlnaXQgPSBudW1lcmF0b3IgLyBkZW5vbWluYXRvciAoaW50ZWdlciBkaXZpc2lv
bikuCisgICAgICAgICAgICAvLyBudW1lcmF0b3IgPSBudW1lcmF0b3IgJSBkZW5vbWluYXRvci4K
KyAgICAgICAgICAgIGJ1ZmZlclsoKmxlbmd0aCkrK10gPSBkaWdpdCArICcwJzsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgLy8gQ2FuIHdlIHN0b3AgYWxyZWFkeT8KKyAgICAgICAgICAgIC8v
IElmIHRoZSByZW1haW5kZXIgb2YgdGhlIGRpdmlzaW9uIGlzIGxlc3MgdGhhbiB0aGUgZGlzdGFu
Y2UgdG8gdGhlIGxvd2VyCisgICAgICAgICAgICAvLyBib3VuZGFyeSB3ZSBjYW4gc3RvcC4gSW4g
dGhpcyBjYXNlIHdlIHNpbXBseSByb3VuZCBkb3duIChkaXNjYXJkaW5nIHRoZQorICAgICAgICAg
ICAgLy8gcmVtYWluZGVyKS4KKyAgICAgICAgICAgIC8vIFNpbWlsYXJseSB3ZSB0ZXN0IGlmIHdl
IGNhbiByb3VuZCB1cCAodXNpbmcgdGhlIHVwcGVyIGJvdW5kYXJ5KS4KKyAgICAgICAgICAgIGJv
b2wgaW5fZGVsdGFfcm9vbV9taW51czsKKyAgICAgICAgICAgIGJvb2wgaW5fZGVsdGFfcm9vbV9w
bHVzOworICAgICAgICAgICAgaWYgKGlzX2V2ZW4pIHsKKyAgICAgICAgICAgICAgICBpbl9kZWx0
YV9yb29tX21pbnVzID0gQmlnbnVtOjpMZXNzRXF1YWwoKm51bWVyYXRvciwgKmRlbHRhX21pbnVz
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaW5fZGVsdGFfcm9vbV9t
aW51cyA9IEJpZ251bTo6TGVzcygqbnVtZXJhdG9yLCAqZGVsdGFfbWludXMpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKGlzX2V2ZW4pIHsKKyAgICAgICAgICAgICAgICBpbl9kZWx0
YV9yb29tX3BsdXMgPQorICAgICAgICAgICAgICAgIEJpZ251bTo6UGx1c0NvbXBhcmUoKm51bWVy
YXRvciwgKmRlbHRhX3BsdXMsICpkZW5vbWluYXRvcikgPj0gMDsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgaW5fZGVsdGFfcm9vbV9wbHVzID0KKyAgICAgICAgICAgICAg
ICBCaWdudW06OlBsdXNDb21wYXJlKCpudW1lcmF0b3IsICpkZWx0YV9wbHVzLCAqZGVub21pbmF0
b3IpID4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghaW5fZGVsdGFfcm9vbV9t
aW51cyAmJiAhaW5fZGVsdGFfcm9vbV9wbHVzKSB7CisgICAgICAgICAgICAgICAgLy8gUHJlcGFy
ZSBmb3IgbmV4dCBpdGVyYXRpb24uCisgICAgICAgICAgICAgICAgbnVtZXJhdG9yLT5UaW1lczEw
KCk7CisgICAgICAgICAgICAgICAgZGVsdGFfbWludXMtPlRpbWVzMTAoKTsKKyAgICAgICAgICAg
ICAgICAvLyBXZSBvcHRpbWl6ZWQgZGVsdGFfcGx1cyB0byBiZSBlcXVhbCB0byBkZWx0YV9taW51
cyAoaWYgdGhleSBzaGFyZSB0aGUKKyAgICAgICAgICAgICAgICAvLyBzYW1lIHZhbHVlKS4gU28g
ZG9uJ3QgbXVsdGlwbHkgZGVsdGFfcGx1cyBpZiB0aGV5IHBvaW50IHRvIHRoZSBzYW1lCisgICAg
ICAgICAgICAgICAgLy8gb2JqZWN0LgorICAgICAgICAgICAgICAgIGlmIChkZWx0YV9taW51cyAh
PSBkZWx0YV9wbHVzKSB7CisgICAgICAgICAgICAgICAgICAgIGRlbHRhX3BsdXMtPlRpbWVzMTAo
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGluX2RlbHRhX3Jv
b21fbWludXMgJiYgaW5fZGVsdGFfcm9vbV9wbHVzKSB7CisgICAgICAgICAgICAgICAgLy8gTGV0
J3Mgc2VlIGlmIDIqbnVtZXJhdG9yIDwgZGVub21pbmF0b3IuCisgICAgICAgICAgICAgICAgLy8g
SWYgeWVzLCB0aGVuIHRoZSBuZXh0IGRpZ2l0IHdvdWxkIGJlIDwgNSBhbmQgd2UgY2FuIHJvdW5k
IGRvd24uCisgICAgICAgICAgICAgICAgaW50IGNvbXBhcmUgPSBCaWdudW06OlBsdXNDb21wYXJl
KCpudW1lcmF0b3IsICpudW1lcmF0b3IsICpkZW5vbWluYXRvcik7CisgICAgICAgICAgICAgICAg
aWYgKGNvbXBhcmUgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFJlbWFpbmluZyBkaWdp
dHMgYXJlIGxlc3MgdGhhbiAuNS4gLT4gUm91bmQgZG93biAoPT0gZG8gbm90aGluZykuCisgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChjb21wYXJlID4gMCkgeworICAgICAgICAgICAgICAgICAg
ICAvLyBSZW1haW5pbmcgZGlnaXRzIGFyZSBtb3JlIHRoYW4gLjUgb2YgZGVub21pbmF0b3IuIC0+
IFJvdW5kIHVwLgorICAgICAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGhlIGxhc3QgZGln
aXQgY291bGQgbm90IGJlIGEgJzknIGFzIG90aGVyd2lzZSB0aGUgd2hvbGUKKyAgICAgICAgICAg
ICAgICAgICAgLy8gbG9vcCB3b3VsZCBoYXZlIHN0b3BwZWQgZWFybGllci4KKyAgICAgICAgICAg
ICAgICAgICAgLy8gV2Ugc3RpbGwgaGF2ZSBhbiBhc3NlcnQgaGVyZSBpbiBjYXNlIHRoZSBwcmVj
b25kaXRpb25zIHdlcmUgbm90CisgICAgICAgICAgICAgICAgICAgIC8vIHNhdGlzZmllZC4KKyAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKGJ1ZmZlclsoKmxlbmd0aCkgLSAxXSAhPSAnOScpOwor
ICAgICAgICAgICAgICAgICAgICBidWZmZXJbKCpsZW5ndGgpIC0gMV0rKzsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBIYWxmd2F5IGNhc2UuCisgICAg
ICAgICAgICAgICAgICAgIC8vIFRPRE8oZmxvaXRzY2gpOiBuZWVkIGEgd2F5IHRvIHNvbHZlIGhh
bGYtd2F5IGNhc2VzLgorICAgICAgICAgICAgICAgICAgICAvLyAgIEZvciBub3cgbGV0J3Mgcm91
bmQgdG93YXJkcyBldmVuIChzaW5jZSB0aGlzIGlzIHdoYXQgR2F5IHNlZW1zIHRvCisgICAgICAg
ICAgICAgICAgICAgIC8vICAgZG8pLgorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKChidWZmZXJbKCpsZW5ndGgpIC0gMV0gLSAnMCcpICUgMiA9PSAwKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBSb3VuZCBkb3duID0+IERvIG5vdGhpbmcuCisgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
YnVmZmVyWygqbGVuZ3RoKSAtIDFdICE9ICc5Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICBi
dWZmZXJbKCpsZW5ndGgpIC0gMV0rKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9IGVsc2UgaWYg
KGluX2RlbHRhX3Jvb21fbWludXMpIHsKKyAgICAgICAgICAgICAgICAvLyBSb3VuZCBkb3duICg9
PSBkbyBub3RoaW5nKS4KKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9IGVs
c2UgeyAgLy8gaW5fZGVsdGFfcm9vbV9wbHVzCisgICAgICAgICAgICAgICAgLy8gUm91bmQgdXAu
CisgICAgICAgICAgICAgICAgLy8gTm90ZSBhZ2FpbiB0aGF0IHRoZSBsYXN0IGRpZ2l0IGNvdWxk
IG5vdCBiZSAnOScgc2luY2UgdGhpcyB3b3VsZCBoYXZlCisgICAgICAgICAgICAgICAgLy8gc3Rv
cHBlZCB0aGUgbG9vcCBlYXJsaWVyLgorICAgICAgICAgICAgICAgIC8vIFdlIHN0aWxsIGhhdmUg
YW4gQVNTRVJUIGhlcmUsIGluIGNhc2UgdGhlIHByZWNvbmRpdGlvbnMgd2VyZSBub3QKKyAgICAg
ICAgICAgICAgICAvLyBzYXRpc2ZpZWQuCisgICAgICAgICAgICAgICAgQVNTRVJUKGJ1ZmZlclso
Kmxlbmd0aCkgLTFdICE9ICc5Jyk7CisgICAgICAgICAgICAgICAgYnVmZmVyWygqbGVuZ3RoKSAt
IDFdKys7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIAorICAgIAorICAgIC8vIExldCB2ID0gbnVtZXJhdG9yIC8gZGVub21pbmF0
b3IgPCAxMC4KKyAgICAvLyBUaGVuIHdlIGdlbmVyYXRlICdjb3VudCcgZGlnaXRzIG9mIGQgPSB4
Lnh4eHh4Li4uICh3aXRob3V0IHRoZSBkZWNpbWFsIHBvaW50KQorICAgIC8vIGZyb20gbGVmdCB0
byByaWdodC4gT25jZSAnY291bnQnIGRpZ2l0cyBoYXZlIGJlZW4gcHJvZHVjZWQgd2UgZGVjaWRl
IHdldGhlcgorICAgIC8vIHRvIHJvdW5kIHVwIG9yIGRvd24uIFJlbWFpbmRlcnMgb2YgZXhhY3Rs
eSAuNSByb3VuZCB1cHdhcmRzLiBOdW1iZXJzIHN1Y2gKKyAgICAvLyBhcyA5Ljk5OTk5OSBwcm9w
YWdhdGUgYSBjYXJyeSBhbGwgdGhlIHdheSwgYW5kIGNoYW5nZSB0aGUKKyAgICAvLyBleHBvbmVu
dCAoZGVjaW1hbF9wb2ludCksIHdoZW4gcm91bmRpbmcgdXB3YXJkcy4KKyAgICBzdGF0aWMgdm9p
ZCBHZW5lcmF0ZUNvdW50ZWREaWdpdHMoaW50IGNvdW50LCBpbnQqIGRlY2ltYWxfcG9pbnQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogbnVtZXJhdG9yLCBC
aWdudW0qIGRlbm9taW5hdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBWZWN0b3I8Y2hhcj4oYnVmZmVyKSwgaW50KiBsZW5ndGgpIHsKKyAgICAgICAgQVNTRVJUKGNv
dW50ID49IDApOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50IC0gMTsgKytpKSB7
CisgICAgICAgICAgICB1aW50MTZfdCBkaWdpdDsKKyAgICAgICAgICAgIGRpZ2l0ID0gbnVtZXJh
dG9yLT5EaXZpZGVNb2R1bG9JbnRCaWdudW0oKmRlbm9taW5hdG9yKTsKKyAgICAgICAgICAgIEFT
U0VSVChkaWdpdCA8PSA5KTsgIC8vIGRpZ2l0IGlzIGEgdWludDE2X3QgYW5kIHRoZXJlZm9yZSBh
bHdheXMgcG9zaXRpdmUuCisgICAgICAgICAgICAvLyBkaWdpdCA9IG51bWVyYXRvciAvIGRlbm9t
aW5hdG9yIChpbnRlZ2VyIGRpdmlzaW9uKS4KKyAgICAgICAgICAgIC8vIG51bWVyYXRvciA9IG51
bWVyYXRvciAlIGRlbm9taW5hdG9yLgorICAgICAgICAgICAgYnVmZmVyW2ldID0gZGlnaXQgKyAn
MCc7CisgICAgICAgICAgICAvLyBQcmVwYXJlIGZvciBuZXh0IGl0ZXJhdGlvbi4KKyAgICAgICAg
ICAgIG51bWVyYXRvci0+VGltZXMxMCgpOworICAgICAgICB9CisgICAgICAgIC8vIEdlbmVyYXRl
IHRoZSBsYXN0IGRpZ2l0LgorICAgICAgICB1aW50MTZfdCBkaWdpdDsKKyAgICAgICAgZGlnaXQg
PSBudW1lcmF0b3ItPkRpdmlkZU1vZHVsb0ludEJpZ251bSgqZGVub21pbmF0b3IpOworICAgICAg
ICBpZiAoQmlnbnVtOjpQbHVzQ29tcGFyZSgqbnVtZXJhdG9yLCAqbnVtZXJhdG9yLCAqZGVub21p
bmF0b3IpID49IDApIHsKKyAgICAgICAgICAgIGRpZ2l0Kys7CisgICAgICAgIH0KKyAgICAgICAg
YnVmZmVyW2NvdW50IC0gMV0gPSBkaWdpdCArICcwJzsKKyAgICAgICAgLy8gQ29ycmVjdCBiYWQg
ZGlnaXRzIChpbiBjYXNlIHdlIGhhZCBhIHNlcXVlbmNlIG9mICc5J3MpLiBQcm9wYWdhdGUgdGhl
CisgICAgICAgIC8vIGNhcnJ5IHVudGlsIHdlIGhhdCBhIG5vbi0nOScgb3IgdGlsIHdlIHJlYWNo
IHRoZSBmaXJzdCBkaWdpdC4KKyAgICAgICAgZm9yIChpbnQgaSA9IGNvdW50IC0gMTsgaSA+IDA7
IC0taSkgeworICAgICAgICAgICAgaWYgKGJ1ZmZlcltpXSAhPSAnMCcgKyAxMCkgYnJlYWs7Cisg
ICAgICAgICAgICBidWZmZXJbaV0gPSAnMCc7CisgICAgICAgICAgICBidWZmZXJbaSAtIDFdKys7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJ1ZmZlclswXSA9PSAnMCcgKyAxMCkgeworICAgICAg
ICAgICAgLy8gUHJvcGFnYXRlIGEgY2FycnkgcGFzdCB0aGUgdG9wIHBsYWNlLgorICAgICAgICAg
ICAgYnVmZmVyWzBdID0gJzEnOworICAgICAgICAgICAgKCpkZWNpbWFsX3BvaW50KSsrOworICAg
ICAgICB9CisgICAgICAgICpsZW5ndGggPSBjb3VudDsKKyAgICB9CisgICAgCisgICAgCisgICAg
Ly8gR2VuZXJhdGVzICdyZXF1ZXN0ZWRfZGlnaXRzJyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludC4g
SXQgbWlnaHQgb21pdAorICAgIC8vIHRyYWlsaW5nICcwJ3MuIElmIHRoZSBpbnB1dCBudW1iZXIg
aXMgdG9vIHNtYWxsIHRoZW4gbm8gZGlnaXRzIGF0IGFsbCBhcmUKKyAgICAvLyBnZW5lcmF0ZWQg
KGV4LjogMiBmaXhlZCBkaWdpdHMgZm9yIDAuMDAwMDEpLgorICAgIC8vCisgICAgLy8gSW5wdXQg
dmVyaWZpZXM6ICAxIDw9IChudW1lcmF0b3IgKyBkZWx0YSkgLyBkZW5vbWluYXRvciA8IDEwLgor
ICAgIHN0YXRpYyB2b2lkIEJpZ251bVRvRml4ZWQoaW50IHJlcXVlc3RlZF9kaWdpdHMsIGludCog
ZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogbnVt
ZXJhdG9yLCBCaWdudW0qIGRlbm9taW5hdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVmVjdG9yPGNoYXI+KGJ1ZmZlciksIGludCogbGVuZ3RoKSB7CisgICAgICAgIC8vIE5vdGUg
dGhhdCB3ZSBoYXZlIHRvIGxvb2sgYXQgbW9yZSB0aGFuIGp1c3QgdGhlIHJlcXVlc3RlZF9kaWdp
dHMsIHNpbmNlCisgICAgICAgIC8vIGEgbnVtYmVyIGNvdWxkIGJlIHJvdW5kZWQgdXAuIEV4YW1w
bGU6IHY9MC41IHdpdGggcmVxdWVzdGVkX2RpZ2l0cz0wLgorICAgICAgICAvLyBFdmVuIHRob3Vn
aCB0aGUgcG93ZXIgb2YgdiBlcXVhbHMgMCB3ZSBjYW4ndCBqdXN0IHN0b3AgaGVyZS4KKyAgICAg
ICAgaWYgKC0oKmRlY2ltYWxfcG9pbnQpID4gcmVxdWVzdGVkX2RpZ2l0cykgeworICAgICAgICAg
ICAgLy8gVGhlIG51bWJlciBpcyBkZWZpbml0aXZlbHkgdG9vIHNtYWxsLgorICAgICAgICAgICAg
Ly8gRXg6IDAuMDAxIHdpdGggcmVxdWVzdGVkX2RpZ2l0cyA9PSAxLgorICAgICAgICAgICAgLy8g
U2V0IGRlY2ltYWwtcG9pbnQgdG8gLXJlcXVlc3RlZF9kaWdpdHMuIFRoaXMgaXMgd2hhdCBHYXkg
ZG9lcy4KKyAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBpdCBzaG91bGQgbm90IGhhdmUgYW55IGVm
ZmVjdCBhbnl3YXlzIHNpbmNlIHRoZSBzdHJpbmcgaXMKKyAgICAgICAgICAgIC8vIGVtcHR5Lgor
ICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSAtcmVxdWVzdGVkX2RpZ2l0czsKKyAgICAgICAg
ICAgICpsZW5ndGggPSAwOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgaWYg
KC0oKmRlY2ltYWxfcG9pbnQpID09IHJlcXVlc3RlZF9kaWdpdHMpIHsKKyAgICAgICAgICAgIC8v
IFdlIG9ubHkgbmVlZCB0byB2ZXJpZnkgaWYgdGhlIG51bWJlciByb3VuZHMgZG93biBvciB1cC4K
KyAgICAgICAgICAgIC8vIEV4OiAwLjA0IGFuZCAwLjA2IHdpdGggcmVxdWVzdGVkX2RpZ2l0cyA9
PSAxLgorICAgICAgICAgICAgQVNTRVJUKCpkZWNpbWFsX3BvaW50ID09IC1yZXF1ZXN0ZWRfZGln
aXRzKTsKKyAgICAgICAgICAgIC8vIEluaXRpYWxseSB0aGUgZnJhY3Rpb24gbGllcyBpbiByYW5n
ZSAoMSwgMTBdLiBNdWx0aXBseSB0aGUgZGVub21pbmF0b3IKKyAgICAgICAgICAgIC8vIGJ5IDEw
IHNvIHRoYXQgd2UgY2FuIGNvbXBhcmUgbW9yZSBlYXNpbHkuCisgICAgICAgICAgICBkZW5vbWlu
YXRvci0+VGltZXMxMCgpOworICAgICAgICAgICAgaWYgKEJpZ251bTo6UGx1c0NvbXBhcmUoKm51
bWVyYXRvciwgKm51bWVyYXRvciwgKmRlbm9taW5hdG9yKSA+PSAwKSB7CisgICAgICAgICAgICAg
ICAgLy8gSWYgdGhlIGZyYWN0aW9uIGlzID49IDAuNSB0aGVuIHdlIGhhdmUgdG8gaW5jbHVkZSB0
aGUgcm91bmRlZAorICAgICAgICAgICAgICAgIC8vIGRpZ2l0LgorICAgICAgICAgICAgICAgIGJ1
ZmZlclswXSA9ICcxJzsKKyAgICAgICAgICAgICAgICAqbGVuZ3RoID0gMTsKKyAgICAgICAgICAg
ICAgICAoKmRlY2ltYWxfcG9pbnQpKys7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBjYXVnaHQgbW9zdCBvZiBzaW1pbGFyIGNhc2VzIGVhcmxp
ZXIuCisgICAgICAgICAgICAgICAgKmxlbmd0aCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBUaGUgcmVxdWVz
dGVkIGRpZ2l0cyBjb3JyZXNwb25kIHRvIHRoZSBkaWdpdHMgYWZ0ZXIgdGhlIHBvaW50LgorICAg
ICAgICAgICAgLy8gVGhlIHZhcmlhYmxlICduZWVkZWRfZGlnaXRzJyBpbmNsdWRlcyB0aGUgZGln
aXRzIGJlZm9yZSB0aGUgcG9pbnQuCisgICAgICAgICAgICBpbnQgbmVlZGVkX2RpZ2l0cyA9ICgq
ZGVjaW1hbF9wb2ludCkgKyByZXF1ZXN0ZWRfZGlnaXRzOworICAgICAgICAgICAgR2VuZXJhdGVD
b3VudGVkRGlnaXRzKG5lZWRlZF9kaWdpdHMsIGRlY2ltYWxfcG9pbnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnVtZXJhdG9yLCBkZW5vbWluYXRvciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgCisgICAgLy8gUmV0dXJucyBhbiBlc3RpbWF0aW9uIG9mIGsgc3VjaCB0aGF0
IDEwXihrLTEpIDw9IHYgPCAxMF5rIHdoZXJlCisgICAgLy8gdiA9IGYgKiAyXmV4cG9uZW50IGFu
ZCAyXjUyIDw9IGYgPCAyXjUzLgorICAgIC8vIHYgaXMgaGVuY2UgYSBub3JtYWxpemVkIGRvdWJs
ZSB3aXRoIHRoZSBnaXZlbiBleHBvbmVudC4gVGhlIG91dHB1dCBpcyBhbgorICAgIC8vIGFwcHJv
eGltYXRpb24gZm9yIHRoZSBleHBvbmVudCBvZiB0aGUgZGVjaW1hbCBhcHByb2ltYXRpb24gLmRp
Z2l0cyAqIDEwXmsuCisgICAgLy8KKyAgICAvLyBUaGUgcmVzdWx0IG1pZ2h0IHVuZGVyc2hvb3Qg
YnkgMSBpbiB3aGljaCBjYXNlIDEwXmsgPD0gdiA8IDEwXmsrMS4KKyAgICAvLyBOb3RlOiB0aGlz
IHByb3BlcnR5IGhvbGRzIGZvciB2J3MgdXBwZXIgYm91bmRhcnkgbSsgdG9vLgorICAgIC8vICAg
IDEwXmsgPD0gbSsgPCAxMF5rKzEuCisgICAgLy8gICAoc2VlIGV4cGxhbmF0aW9uIGJlbG93KS4K
KyAgICAvLworICAgIC8vIEV4YW1wbGVzOgorICAgIC8vICBFc3RpbWF0ZVBvd2VyKDApICAgPT4g
MTYKKyAgICAvLyAgRXN0aW1hdGVQb3dlcigtNTIpID0+IDAKKyAgICAvLworICAgIC8vIE5vdGU6
IGUgPj0gMCA9PiBFc3RpbWF0ZWRQb3dlcihlKSA+IDAuIE5vIHNpbWlsYXIgY2xhaW0gY2FuIGJl
IG1hZGUgZm9yIGU8MC4KKyAgICBzdGF0aWMgaW50IEVzdGltYXRlUG93ZXIoaW50IGV4cG9uZW50
KSB7CisgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gZXN0aW1hdGVzIGxvZzEwIG9mIHYgd2hlcmUg
diA9IGYqMl5lICh3aXRoIGUgPT0gZXhwb25lbnQpLgorICAgICAgICAvLyBOb3RlIHRoYXQgMTBe
Zmxvb3IobG9nMTAodikpIDw9IHYsIGJ1dCB2IDw9IDEwXmNlaWwobG9nMTAodikpLgorICAgICAg
ICAvLyBOb3RlIHRoYXQgZiBpcyBib3VuZGVkIGJ5IGl0cyBjb250YWluZXIgc2l6ZS4gTGV0IHAg
PSA1MyAodGhlIGRvdWJsZSdzCisgICAgICAgIC8vIHNpZ25pZmljYW5kIHNpemUpLiBUaGVuIDJe
KHAtMSkgPD0gZiA8IDJecC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gR2l2ZW4gdGhhdCBsb2cx
MCh2KSA9PSBsb2cyKHYpL2xvZzIoMTApIGFuZCBlKyhsZW4oZiktMSkgaXMgcXVpdGUgY2xvc2UK
KyAgICAgICAgLy8gdG8gbG9nMih2KSB0aGUgZnVuY3Rpb24gaXMgc2ltcGxpZmllZCB0byAoZSso
bGVuKGYpLTEpL2xvZzIoMTApKS4KKyAgICAgICAgLy8gVGhlIGNvbXB1dGVkIG51bWJlciB1bmRl
cnNob290cyBieSBsZXNzIHRoYW4gMC42MzEgKHdoZW4gd2UgY29tcHV0ZSBsb2czCisgICAgICAg
IC8vIGFuZCBub3QgbG9nMTApLgorICAgICAgICAvLworICAgICAgICAvLyBPcHRpbWl6YXRpb246
IHNpbmNlIHdlIG9ubHkgbmVlZCBhbiBhcHByb3hpbWF0ZWQgcmVzdWx0IHRoaXMgY29tcHV0YXRp
b24KKyAgICAgICAgLy8gY2FuIGJlIHBlcmZvcm1lZCBvbiA2NCBiaXQgaW50ZWdlcnMuIE9uIHg4
Ni94NjQgYXJjaGl0ZWN0dXJlIHRoZSBzcGVlZHVwIGlzCisgICAgICAgIC8vIG5vdCByZWFsbHkg
bWVhc3VyYWJsZSwgdGhvdWdoLgorICAgICAgICAvLworICAgICAgICAvLyBTaW5jZSB3ZSB3YW50
IHRvIGF2b2lkIG92ZXJzaG9vdGluZyB3ZSBkZWNyZW1lbnQgYnkgMWUxMCBzbyB0aGF0CisgICAg
ICAgIC8vIGZsb2F0aW5nLXBvaW50IGltcHJlY2lzaW9ucyBkb24ndCBhZmZlY3QgdXMuCisgICAg
ICAgIC8vCisgICAgICAgIC8vIEV4cGxhbmF0aW9uIGZvciB2J3MgYm91bmRhcnkgbSs6IHRoZSBj
b21wdXRhdGlvbiB0YWtlcyBhZHZhbnRhZ2Ugb2YKKyAgICAgICAgLy8gdGhlIGZhY3QgdGhhdCAy
XihwLTEpIDw9IGYgPCAyXnAuIEJvdW5kYXJpZXMgc3RpbGwgc2F0aXNmeSB0aGlzIHJlcXVpcmVt
ZW50CisgICAgICAgIC8vIChldmVuIGZvciBkZW5vcm1hbHMgd2hlcmUgdGhlIGRlbHRhIGNhbiBi
ZSBtdWNoIG1vcmUgaW1wb3J0YW50KS4KKyAgICAgICAgCisgICAgICAgIGNvbnN0IGRvdWJsZSBr
MUxvZzEwID0gMC4zMDEwMjk5OTU2NjM5ODExNDsgIC8vIDEvbGcoMTApCisgICAgICAgIAorICAg
ICAgICAvLyBGb3IgZG91YmxlcyBsZW4oZikgPT0gNTMgKGRvbid0IGZvcmdldCB0aGUgaGlkZGVu
IGJpdCkuCisgICAgICAgIGNvbnN0IGludCBrU2lnbmlmaWNhbmRTaXplID0gNTM7CisgICAgICAg
IGRvdWJsZSBlc3RpbWF0ZSA9IGNlaWwoKGV4cG9uZW50ICsga1NpZ25pZmljYW5kU2l6ZSAtIDEp
ICogazFMb2cxMCAtIDFlLTEwKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oZXN0
aW1hdGUpOworICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBTZWUgY29tbWVudHMgZm9yIEluaXRp
YWxTY2FsZWRTdGFydFZhbHVlcy4KKyAgICBzdGF0aWMgdm9pZCBJbml0aWFsU2NhbGVkU3RhcnRW
YWx1ZXNQb3NpdGl2ZUV4cG9uZW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHYsIGludCBlc3RpbWF0ZWRfcG93ZXIsIGJv
b2wgbmVlZF9ib3VuZGFyeV9kZWx0YXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIG51bWVyYXRvciwgQmlnbnVtKiBkZW5v
bWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEJpZ251bSogZGVsdGFfbWludXMsIEJpZ251bSogZGVsdGFfcGx1cykgeworICAg
ICAgICAvLyBBIHBvc2l0aXZlIGV4cG9uZW50IGltcGxpZXMgYSBwb3NpdGl2ZSBwb3dlci4KKyAg
ICAgICAgQVNTRVJUKGVzdGltYXRlZF9wb3dlciA+PSAwKTsKKyAgICAgICAgLy8gU2luY2UgdGhl
IGVzdGltYXRlZF9wb3dlciBpcyBwb3NpdGl2ZSB3ZSBzaW1wbHkgbXVsdGlwbHkgdGhlIGRlbm9t
aW5hdG9yCisgICAgICAgIC8vIGJ5IDEwXmVzdGltYXRlZF9wb3dlci4KKyAgICAgICAgCisgICAg
ICAgIC8vIG51bWVyYXRvciA9IHYuCisgICAgICAgIG51bWVyYXRvci0+QXNzaWduVUludDY0KERv
dWJsZSh2KS5TaWduaWZpY2FuZCgpKTsKKyAgICAgICAgbnVtZXJhdG9yLT5TaGlmdExlZnQoRG91
YmxlKHYpLkV4cG9uZW50KCkpOworICAgICAgICAvLyBkZW5vbWluYXRvciA9IDEwXmVzdGltYXRl
ZF9wb3dlci4KKyAgICAgICAgZGVub21pbmF0b3ItPkFzc2lnblBvd2VyVUludDE2KDEwLCBlc3Rp
bWF0ZWRfcG93ZXIpOworICAgICAgICAKKyAgICAgICAgaWYgKG5lZWRfYm91bmRhcnlfZGVsdGFz
KSB7CisgICAgICAgICAgICAvLyBJbnRyb2R1Y2UgYSBjb21tb24gZGVub21pbmF0b3Igc28gdGhh
dCB0aGUgZGVsdGFzIHRvIHRoZSBib3VuZGFyaWVzIGFyZQorICAgICAgICAgICAgLy8gaW50ZWdl
cnMuCisgICAgICAgICAgICBkZW5vbWluYXRvci0+U2hpZnRMZWZ0KDEpOworICAgICAgICAgICAg
bnVtZXJhdG9yLT5TaGlmdExlZnQoMSk7CisgICAgICAgICAgICAvLyBMZXQgdiA9IGYgKiAyXmUs
IHRoZW4gbSsgLSB2ID0gMS8yICogMl5lOyBXaXRoIHRoZSBjb21tb24KKyAgICAgICAgICAgIC8v
IGRlbm9taW5hdG9yIChvZiAyKSBkZWx0YV9wbHVzIGVxdWFscyAyXmUuCisgICAgICAgICAgICBk
ZWx0YV9wbHVzLT5Bc3NpZ25VSW50MTYoMSk7CisgICAgICAgICAgICBkZWx0YV9wbHVzLT5TaGlm
dExlZnQoRG91YmxlKHYpLkV4cG9uZW50KCkpOworICAgICAgICAgICAgLy8gU2FtZSBmb3IgZGVs
dGFfbWludXMgKHdpdGggYWRqdXN0bWVudHMgYmVsb3cgaWYgZiA9PSAyXnAtMSkuCisgICAgICAg
ICAgICBkZWx0YV9taW51cy0+QXNzaWduVUludDE2KDEpOworICAgICAgICAgICAgZGVsdGFfbWlu
dXMtPlNoaWZ0TGVmdChEb3VibGUodikuRXhwb25lbnQoKSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vIElmIHRoZSBzaWduaWZpY2FuZCAod2l0aG91dCB0aGUgaGlkZGVuIGJpdCkgaXMg
MCwgdGhlbiB0aGUgbG93ZXIKKyAgICAgICAgICAgIC8vIGJvdW5kYXJ5IGlzIGNsb3NlciB0aGFu
IGp1c3QgaGFsZiBhIHVscCAodW5pdCBpbiB0aGUgbGFzdCBwbGFjZSkuCisgICAgICAgICAgICAv
LyBUaGVyZSBpcyBvbmx5IG9uZSBleGNlcHRpb246IGlmIHRoZSBuZXh0IGxvd2VyIG51bWJlciBp
cyBhIGRlbm9ybWFsIHRoZW4KKyAgICAgICAgICAgIC8vIHRoZSBkaXN0YW5jZSBpcyAxIHVscC4g
VGhpcyBjYW5ub3QgYmUgdGhlIGNhc2UgZm9yIGV4cG9uZW50ID49IDAgKGJ1dCB3ZQorICAgICAg
ICAgICAgLy8gaGF2ZSB0byB0ZXN0IGl0IGluIHRoZSBvdGhlciBmdW5jdGlvbiB3aGVyZSBleHBv
bmVudCA8IDApLgorICAgICAgICAgICAgdWludDY0X3Qgdl9iaXRzID0gRG91YmxlKHYpLkFzVWlu
dDY0KCk7CisgICAgICAgICAgICBpZiAoKHZfYml0cyAmIERvdWJsZTo6a1NpZ25pZmljYW5kTWFz
aykgPT0gMCkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBsb3dlciBib3VuZGFyeSBpcyBjbG9z
ZXIgYXQgaGFsZiB0aGUgZGlzdGFuY2Ugb2YgIm5vcm1hbCIgbnVtYmVycy4KKyAgICAgICAgICAg
ICAgICAvLyBJbmNyZWFzZSB0aGUgY29tbW9uIGRlbm9taW5hdG9yIGFuZCBhZGFwdCBhbGwgYnV0
IHRoZSBkZWx0YV9taW51cy4KKyAgICAgICAgICAgICAgICBkZW5vbWluYXRvci0+U2hpZnRMZWZ0
KDEpOyAgLy8gKjIKKyAgICAgICAgICAgICAgICBudW1lcmF0b3ItPlNoaWZ0TGVmdCgxKTsgICAg
Ly8gKjIKKyAgICAgICAgICAgICAgICBkZWx0YV9wbHVzLT5TaGlmdExlZnQoMSk7ICAgLy8gKjIK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBTZWUg
Y29tbWVudHMgZm9yIEluaXRpYWxTY2FsZWRTdGFydFZhbHVlcworICAgIHN0YXRpYyB2b2lkIElu
aXRpYWxTY2FsZWRTdGFydFZhbHVlc05lZ2F0aXZlRXhwb25lbnRQb3NpdGl2ZVBvd2VyKAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRvdWJsZSB2LCBpbnQgZXN0aW1hdGVkX3Bvd2VyLCBib29sIG5lZWRfYm91bmRh
cnlfZGVsdGFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogbnVtZXJhdG9yLCBCaWdudW0qIGRlbm9t
aW5hdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogZGVsdGFfbWludXMsIEJpZ251bSogZGVsdGFf
cGx1cykgeworICAgICAgICB1aW50NjRfdCBzaWduaWZpY2FuZCA9IERvdWJsZSh2KS5TaWduaWZp
Y2FuZCgpOworICAgICAgICBpbnQgZXhwb25lbnQgPSBEb3VibGUodikuRXhwb25lbnQoKTsKKyAg
ICAgICAgLy8gdiA9IGYgKiAyXmUgd2l0aCBlIDwgMCwgYW5kIHdpdGggZXN0aW1hdGVkX3Bvd2Vy
ID49IDAuCisgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBlIGlzIGNsb3NlIHRvIDAgKGhhdmUg
YSBsb29rIGF0IGhvdyBlc3RpbWF0ZWRfcG93ZXIgaXMKKyAgICAgICAgLy8gY29tcHV0ZWQpLgor
ICAgICAgICAKKyAgICAgICAgLy8gbnVtZXJhdG9yID0gc2lnbmlmaWNhbmQKKyAgICAgICAgLy8g
IHNpbmNlIHYgPSBzaWduaWZpY2FuZCAqIDJeZXhwb25lbnQgdGhpcyBpcyBlcXVpdmFsZW50IHRv
CisgICAgICAgIC8vICBudW1lcmF0b3IgPSB2ICogLyAyXi1leHBvbmVudAorICAgICAgICBudW1l
cmF0b3ItPkFzc2lnblVJbnQ2NChzaWduaWZpY2FuZCk7CisgICAgICAgIC8vIGRlbm9taW5hdG9y
ID0gMTBeZXN0aW1hdGVkX3Bvd2VyICogMl4tZXhwb25lbnQgKHdpdGggZXhwb25lbnQgPCAwKQor
ICAgICAgICBkZW5vbWluYXRvci0+QXNzaWduUG93ZXJVSW50MTYoMTAsIGVzdGltYXRlZF9wb3dl
cik7CisgICAgICAgIGRlbm9taW5hdG9yLT5TaGlmdExlZnQoLWV4cG9uZW50KTsKKyAgICAgICAg
CisgICAgICAgIGlmIChuZWVkX2JvdW5kYXJ5X2RlbHRhcykgeworICAgICAgICAgICAgLy8gSW50
cm9kdWNlIGEgY29tbW9uIGRlbm9taW5hdG9yIHNvIHRoYXQgdGhlIGRlbHRhcyB0byB0aGUgYm91
bmRhcmllcyBhcmUKKyAgICAgICAgICAgIC8vIGludGVnZXJzLgorICAgICAgICAgICAgZGVub21p
bmF0b3ItPlNoaWZ0TGVmdCgxKTsKKyAgICAgICAgICAgIG51bWVyYXRvci0+U2hpZnRMZWZ0KDEp
OworICAgICAgICAgICAgLy8gTGV0IHYgPSBmICogMl5lLCB0aGVuIG0rIC0gdiA9IDEvMiAqIDJe
ZTsgV2l0aCB0aGUgY29tbW9uCisgICAgICAgICAgICAvLyBkZW5vbWluYXRvciAob2YgMikgZGVs
dGFfcGx1cyBlcXVhbHMgMl5lLgorICAgICAgICAgICAgLy8gR2l2ZW4gdGhhdCB0aGUgZGVub21p
bmF0b3IgYWxyZWFkeSBpbmNsdWRlcyB2J3MgZXhwb25lbnQgdGhlIGRpc3RhbmNlCisgICAgICAg
ICAgICAvLyB0byB0aGUgYm91bmRhcmllcyBpcyBzaW1wbHkgMS4KKyAgICAgICAgICAgIGRlbHRh
X3BsdXMtPkFzc2lnblVJbnQxNigxKTsKKyAgICAgICAgICAgIC8vIFNhbWUgZm9yIGRlbHRhX21p
bnVzICh3aXRoIGFkanVzdG1lbnRzIGJlbG93IGlmIGYgPT0gMl5wLTEpLgorICAgICAgICAgICAg
ZGVsdGFfbWludXMtPkFzc2lnblVJbnQxNigxKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Ly8gSWYgdGhlIHNpZ25pZmljYW5kICh3aXRob3V0IHRoZSBoaWRkZW4gYml0KSBpcyAwLCB0aGVu
IHRoZSBsb3dlcgorICAgICAgICAgICAgLy8gYm91bmRhcnkgaXMgY2xvc2VyIHRoYW4ganVzdCBv
bmUgdWxwICh1bml0IGluIHRoZSBsYXN0IHBsYWNlKS4KKyAgICAgICAgICAgIC8vIFRoZXJlIGlz
IG9ubHkgb25lIGV4Y2VwdGlvbjogaWYgdGhlIG5leHQgbG93ZXIgbnVtYmVyIGlzIGEgZGVub3Jt
YWwKKyAgICAgICAgICAgIC8vIHRoZW4gdGhlIGRpc3RhbmNlIGlzIDEgdWxwLiBTaW5jZSB0aGUg
ZXhwb25lbnQgaXMgY2xvc2UgdG8gemVybworICAgICAgICAgICAgLy8gKG90aGVyd2lzZSBlc3Rp
bWF0ZWRfcG93ZXIgd291bGQgaGF2ZSBiZWVuIG5lZ2F0aXZlKSB0aGlzIGNhbm5vdCBoYXBwZW4K
KyAgICAgICAgICAgIC8vIGhlcmUgZWl0aGVyLgorICAgICAgICAgICAgdWludDY0X3Qgdl9iaXRz
ID0gRG91YmxlKHYpLkFzVWludDY0KCk7CisgICAgICAgICAgICBpZiAoKHZfYml0cyAmIERvdWJs
ZTo6a1NpZ25pZmljYW5kTWFzaykgPT0gMCkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBsb3dl
ciBib3VuZGFyeSBpcyBjbG9zZXIgYXQgaGFsZiB0aGUgZGlzdGFuY2Ugb2YgIm5vcm1hbCIgbnVt
YmVycy4KKyAgICAgICAgICAgICAgICAvLyBJbmNyZWFzZSB0aGUgZGVub21pbmF0b3IgYW5kIGFk
YXB0IGFsbCBidXQgdGhlIGRlbHRhX21pbnVzLgorICAgICAgICAgICAgICAgIGRlbm9taW5hdG9y
LT5TaGlmdExlZnQoMSk7ICAvLyAqMgorICAgICAgICAgICAgICAgIG51bWVyYXRvci0+U2hpZnRM
ZWZ0KDEpOyAgICAvLyAqMgorICAgICAgICAgICAgICAgIGRlbHRhX3BsdXMtPlNoaWZ0TGVmdCgx
KTsgICAvLyAqMgorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIAor
ICAgIC8vIFNlZSBjb21tZW50cyBmb3IgSW5pdGlhbFNjYWxlZFN0YXJ0VmFsdWVzCisgICAgc3Rh
dGljIHZvaWQgSW5pdGlhbFNjYWxlZFN0YXJ0VmFsdWVzTmVnYXRpdmVFeHBvbmVudE5lZ2F0aXZl
UG93ZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHYsIGludCBlc3RpbWF0ZWRfcG93ZXIsIGJvb2wg
bmVlZF9ib3VuZGFyeV9kZWx0YXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBudW1lcmF0b3IsIEJp
Z251bSogZGVub21pbmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBkZWx0YV9taW51cywgQmln
bnVtKiBkZWx0YV9wbHVzKSB7CisgICAgICAgIGNvbnN0IHVpbnQ2NF90IGtNaW5pbWFsTm9ybWFs
aXplZEV4cG9uZW50ID0KKyAgICAgICAgVUlOVDY0XzJQQVJUX0MoMHgwMDEwMDAwMCwgMDAwMDAw
MDApOworICAgICAgICB1aW50NjRfdCBzaWduaWZpY2FuZCA9IERvdWJsZSh2KS5TaWduaWZpY2Fu
ZCgpOworICAgICAgICBpbnQgZXhwb25lbnQgPSBEb3VibGUodikuRXhwb25lbnQoKTsKKyAgICAg
ICAgLy8gSW5zdGVhZCBvZiBtdWx0aXBseWluZyB0aGUgZGVub21pbmF0b3Igd2l0aCAxMF5lc3Rp
bWF0ZWRfcG93ZXIgd2UKKyAgICAgICAgLy8gbXVsdGlwbHkgYWxsIHZhbHVlcyAobnVtZXJhdG9y
IGFuZCBkZWx0YXMpIGJ5IDEwXi1lc3RpbWF0ZWRfcG93ZXIuCisgICAgICAgIAorICAgICAgICAv
LyBVc2UgbnVtZXJhdG9yIGFzIHRlbXBvcmFyeSBjb250YWluZXIgZm9yIHBvd2VyX3Rlbi4KKyAg
ICAgICAgQmlnbnVtKiBwb3dlcl90ZW4gPSBudW1lcmF0b3I7CisgICAgICAgIHBvd2VyX3Rlbi0+
QXNzaWduUG93ZXJVSW50MTYoMTAsIC1lc3RpbWF0ZWRfcG93ZXIpOworICAgICAgICAKKyAgICAg
ICAgaWYgKG5lZWRfYm91bmRhcnlfZGVsdGFzKSB7CisgICAgICAgICAgICAvLyBTaW5jZSBwb3dl
cl90ZW4gPT0gbnVtZXJhdG9yIHdlIG11c3QgbWFrZSBhIGNvcHkgb2YgMTBeZXN0aW1hdGVkX3Bv
d2VyCisgICAgICAgICAgICAvLyBiZWZvcmUgd2UgY29tcGxldGUgdGhlIGNvbXB1dGF0aW9uIG9m
IHRoZSBudW1lcmF0b3IuCisgICAgICAgICAgICAvLyBkZWx0YV9wbHVzID0gZGVsdGFfbWludXMg
PSAxMF5lc3RpbWF0ZWRfcG93ZXIKKyAgICAgICAgICAgIGRlbHRhX3BsdXMtPkFzc2lnbkJpZ251
bSgqcG93ZXJfdGVuKTsKKyAgICAgICAgICAgIGRlbHRhX21pbnVzLT5Bc3NpZ25CaWdudW0oKnBv
d2VyX3Rlbik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIG51bWVyYXRvciA9IHNp
Z25pZmljYW5kICogMiAqIDEwXi1lc3RpbWF0ZWRfcG93ZXIKKyAgICAgICAgLy8gIHNpbmNlIHYg
PSBzaWduaWZpY2FuZCAqIDJeZXhwb25lbnQgdGhpcyBpcyBlcXVpdmFsZW50IHRvCisgICAgICAg
IC8vIG51bWVyYXRvciA9IHYgKiAxMF4tZXN0aW1hdGVkX3Bvd2VyICogMiAqIDJeLWV4cG9uZW50
LgorICAgICAgICAvLyBSZW1lbWJlcjogbnVtZXJhdG9yIGhhcyBiZWVuIGFidXNlZCBhcyBwb3dl
cl90ZW4uIFNvIG5vIG5lZWQgdG8gYXNzaWduIGl0CisgICAgICAgIC8vICB0byBpdHNlbGYuCisg
ICAgICAgIEFTU0VSVChudW1lcmF0b3IgPT0gcG93ZXJfdGVuKTsKKyAgICAgICAgbnVtZXJhdG9y
LT5NdWx0aXBseUJ5VUludDY0KHNpZ25pZmljYW5kKTsKKyAgICAgICAgCisgICAgICAgIC8vIGRl
bm9taW5hdG9yID0gMiAqIDJeLWV4cG9uZW50IHdpdGggZXhwb25lbnQgPCAwLgorICAgICAgICBk
ZW5vbWluYXRvci0+QXNzaWduVUludDE2KDEpOworICAgICAgICBkZW5vbWluYXRvci0+U2hpZnRM
ZWZ0KC1leHBvbmVudCk7CisgICAgICAgIAorICAgICAgICBpZiAobmVlZF9ib3VuZGFyeV9kZWx0
YXMpIHsKKyAgICAgICAgICAgIC8vIEludHJvZHVjZSBhIGNvbW1vbiBkZW5vbWluYXRvciBzbyB0
aGF0IHRoZSBkZWx0YXMgdG8gdGhlIGJvdW5kYXJpZXMgYXJlCisgICAgICAgICAgICAvLyBpbnRl
Z2Vycy4KKyAgICAgICAgICAgIG51bWVyYXRvci0+U2hpZnRMZWZ0KDEpOworICAgICAgICAgICAg
ZGVub21pbmF0b3ItPlNoaWZ0TGVmdCgxKTsKKyAgICAgICAgICAgIC8vIFdpdGggdGhpcyBzaGlm
dCB0aGUgYm91bmRhcmllcyBoYXZlIHRoZWlyIGNvcnJlY3QgdmFsdWUsIHNpbmNlCisgICAgICAg
ICAgICAvLyBkZWx0YV9wbHVzID0gMTBeLWVzdGltYXRlZF9wb3dlciwgYW5kCisgICAgICAgICAg
ICAvLyBkZWx0YV9taW51cyA9IDEwXi1lc3RpbWF0ZWRfcG93ZXIuCisgICAgICAgICAgICAvLyBU
aGVzZSBhc3NpZ25tZW50cyBoYXZlIGJlZW4gZG9uZSBlYXJsaWVyLgorICAgICAgICAgICAgCisg
ICAgICAgICAgICAvLyBUaGUgc3BlY2lhbCBjYXNlIHdoZXJlIHRoZSBsb3dlciBib3VuZGFyeSBp
cyB0d2ljZSBhcyBjbG9zZS4KKyAgICAgICAgICAgIC8vIFRoaXMgdGltZSB3ZSBoYXZlIHRvIGxv
b2sgb3V0IGZvciB0aGUgZXhjZXB0aW9uIHRvby4KKyAgICAgICAgICAgIHVpbnQ2NF90IHZfYml0
cyA9IERvdWJsZSh2KS5Bc1VpbnQ2NCgpOworICAgICAgICAgICAgaWYgKCh2X2JpdHMgJiBEb3Vi
bGU6OmtTaWduaWZpY2FuZE1hc2spID09IDAgJiYKKyAgICAgICAgICAgICAgICAvLyBUaGUgb25s
eSBleGNlcHRpb24gd2hlcmUgYSBzaWduaWZpY2FuZCA9PSAwIGhhcyBpdHMgYm91bmRhcmllcyBh
dAorICAgICAgICAgICAgICAgIC8vICJub3JtYWwiIGRpc3RhbmNlczoKKyAgICAgICAgICAgICAg
ICAodl9iaXRzICYgRG91YmxlOjprRXhwb25lbnRNYXNrKSAhPSBrTWluaW1hbE5vcm1hbGl6ZWRF
eHBvbmVudCkgeworICAgICAgICAgICAgICAgIG51bWVyYXRvci0+U2hpZnRMZWZ0KDEpOyAgICAv
LyAqMgorICAgICAgICAgICAgICAgIGRlbm9taW5hdG9yLT5TaGlmdExlZnQoMSk7ICAvLyAqMgor
ICAgICAgICAgICAgICAgIGRlbHRhX3BsdXMtPlNoaWZ0TGVmdCgxKTsgICAvLyAqMgorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIC8vIExldCB2ID0gc2ln
bmlmaWNhbmQgKiAyXmV4cG9uZW50LgorICAgIC8vIENvbXB1dGVzIHYgLyAxMF5lc3RpbWF0ZWRf
cG93ZXIgZXhhY3RseSwgYXMgYSByYXRpbyBvZiB0d28gYmlnbnVtcywgbnVtZXJhdG9yCisgICAg
Ly8gYW5kIGRlbm9taW5hdG9yLiBUaGUgZnVuY3Rpb25zIEdlbmVyYXRlU2hvcnRlc3REaWdpdHMg
YW5kCisgICAgLy8gR2VuZXJhdGVDb3VudGVkRGlnaXRzIHdpbGwgdGhlbiBjb252ZXJ0IHRoaXMg
cmF0aW8gdG8gaXRzIGRlY2ltYWwKKyAgICAvLyByZXByZXNlbnRhdGlvbiBkLCB3aXRoIHRoZSBy
ZXF1aXJlZCBhY2N1cmFjeS4KKyAgICAvLyBUaGVuIGQgKiAxMF5lc3RpbWF0ZWRfcG93ZXIgaXMg
dGhlIHJlcHJlc2VudGF0aW9uIG9mIHYuCisgICAgLy8gKE5vdGU6IHRoZSBmcmFjdGlvbiBhbmQg
dGhlIGVzdGltYXRlZF9wb3dlciBtaWdodCBnZXQgYWRqdXN0ZWQgYmVmb3JlCisgICAgLy8gZ2Vu
ZXJhdGluZyB0aGUgZGVjaW1hbCByZXByZXNlbnRhdGlvbi4pCisgICAgLy8KKyAgICAvLyBUaGUg
aW5pdGlhbCBzdGFydCB2YWx1ZXMgY29uc2lzdCBvZjoKKyAgICAvLyAgLSBhIHNjYWxlZCBudW1l
cmF0b3I6IHMudC4gbnVtZXJhdG9yL2Rlbm9taW5hdG9yID09IHYgLyAxMF5lc3RpbWF0ZWRfcG93
ZXIuCisgICAgLy8gIC0gYSBzY2FsZWQgKGNvbW1vbikgZGVub21pbmF0b3IuCisgICAgLy8gIG9w
dGlvbmFsbHkgKHVzZWQgYnkgR2VuZXJhdGVTaG9ydGVzdERpZ2l0cyB0byBkZWNpZGUgaWYgaXQg
aGFzIHRoZSBzaG9ydGVzdAorICAgIC8vICBkZWNpbWFsIGNvbnZlcnRpbmcgYmFjayB0byB2KToK
KyAgICAvLyAgLSB2IC0gbS06IHRoZSBkaXN0YW5jZSB0byB0aGUgbG93ZXIgYm91bmRhcnkuCisg
ICAgLy8gIC0gbSsgLSB2OiB0aGUgZGlzdGFuY2UgdG8gdGhlIHVwcGVyIGJvdW5kYXJ5LgorICAg
IC8vCisgICAgLy8gdiwgbSssIG0tLCBhbmQgdGhlcmVmb3JlIHYgLSBtLSBhbmQgbSsgLSB2IGFs
bCBzaGFyZSB0aGUgc2FtZSBkZW5vbWluYXRvci4KKyAgICAvLworICAgIC8vIExldCBlcCA9PSBl
c3RpbWF0ZWRfcG93ZXIsIHRoZW4gdGhlIHJldHVybmVkIHZhbHVlcyB3aWxsIHNhdGlzZnk6Cisg
ICAgLy8gIHYgLyAxMF5lcCA9IG51bWVyYXRvciAvIGRlbm9taW5hdG9yLgorICAgIC8vICB2J3Mg
Ym91bmRhcnlzIG0tIGFuZCBtKzoKKyAgICAvLyAgICBtLSAvIDEwXmVwID09IHYgLyAxMF5lcCAt
IGRlbHRhX21pbnVzIC8gZGVub21pbmF0b3IKKyAgICAvLyAgICBtKyAvIDEwXmVwID09IHYgLyAx
MF5lcCArIGRlbHRhX3BsdXMgLyBkZW5vbWluYXRvcgorICAgIC8vICBPciBpbiBvdGhlciB3b3Jk
czoKKyAgICAvLyAgICBtLSA9PSB2IC0gZGVsdGFfbWludXMgKiAxMF5lcCAvIGRlbm9taW5hdG9y
OworICAgIC8vICAgIG0rID09IHYgKyBkZWx0YV9wbHVzICogMTBeZXAgLyBkZW5vbWluYXRvcjsK
KyAgICAvLworICAgIC8vIFNpbmNlIDEwXihrLTEpIDw9IHYgPCAxMF5rICAgICh3aXRoIGsgPT0g
ZXN0aW1hdGVkX3Bvd2VyKQorICAgIC8vICBvciAgICAgICAxMF5rIDw9IHYgPCAxMF4oaysxKQor
ICAgIC8vICB3ZSB0aGVuIGhhdmUgMC4xIDw9IG51bWVyYXRvci9kZW5vbWluYXRvciA8IDEKKyAg
ICAvLyAgICAgICAgICAgb3IgICAgMSA8PSBudW1lcmF0b3IvZGVub21pbmF0b3IgPCAxMAorICAg
IC8vCisgICAgLy8gSXQgaXMgdGhlbiBlYXN5IHRvIGtpY2tzdGFydCB0aGUgZGlnaXQtZ2VuZXJh
dGlvbiByb3V0aW5lLgorICAgIC8vCisgICAgLy8gVGhlIGJvdW5kYXJ5LWRlbHRhcyBhcmUgb25s
eSBmaWxsZWQgaWYgbmVlZF9ib3VuZGFyeV9kZWx0YXMgaXMgc2V0LgorICAgIHN0YXRpYyB2b2lk
IEluaXRpYWxTY2FsZWRTdGFydFZhbHVlcyhkb3VibGUgdiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGVzdGltYXRlZF9wb3dlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBuZWVkX2JvdW5kYXJ5X2RlbHRhcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBudW1lcmF0b3Is
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogZGVub21p
bmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSog
ZGVsdGFfbWludXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJp
Z251bSogZGVsdGFfcGx1cykgeworICAgICAgICBpZiAoRG91YmxlKHYpLkV4cG9uZW50KCkgPj0g
MCkgeworICAgICAgICAgICAgSW5pdGlhbFNjYWxlZFN0YXJ0VmFsdWVzUG9zaXRpdmVFeHBvbmVu
dCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
diwgZXN0aW1hdGVkX3Bvd2VyLCBuZWVkX2JvdW5kYXJ5X2RlbHRhcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJhdG9yLCBkZW5vbWlu
YXRvciwgZGVsdGFfbWludXMsIGRlbHRhX3BsdXMpOworICAgICAgICB9IGVsc2UgaWYgKGVzdGlt
YXRlZF9wb3dlciA+PSAwKSB7CisgICAgICAgICAgICBJbml0aWFsU2NhbGVkU3RhcnRWYWx1ZXNO
ZWdhdGl2ZUV4cG9uZW50UG9zaXRpdmVQb3dlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYsIGVzdGltYXRlZF9wb3dl
ciwgbmVlZF9ib3VuZGFyeV9kZWx0YXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmF0b3IsIGRlbm9taW5hdG9y
LCBkZWx0YV9taW51cywgZGVsdGFfcGx1cyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBJbml0aWFsU2NhbGVkU3RhcnRWYWx1ZXNOZWdhdGl2ZUV4cG9uZW50TmVnYXRpdmVQb3dlcigK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHYsIGVzdGltYXRlZF9wb3dlciwgbmVlZF9ib3VuZGFyeV9kZWx0YXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBudW1lcmF0b3IsIGRlbm9taW5hdG9yLCBkZWx0YV9taW51cywgZGVsdGFfcGx1cyk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgLy8gVGhpcyByb3V0aW5lIG11bHRpcGxp
ZXMgbnVtZXJhdG9yL2Rlbm9taW5hdG9yIHNvIHRoYXQgaXRzIHZhbHVlcyBsaWVzIGluIHRoZQor
ICAgIC8vIHJhbmdlIDEtMTAuIFRoYXQgaXMgYWZ0ZXIgYSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24g
d2UgaGF2ZToKKyAgICAvLyAgICAxIDw9IChudW1lcmF0b3IgKyBkZWx0YV9wbHVzKSAvZGVub21p
bmF0b3IgPCAxMC4KKyAgICAvLyBMZXQgbnVtZXJhdG9yIHRoZSBpbnB1dCBiZWZvcmUgbW9kaWZp
Y2F0aW9uIGFuZCBudW1lcmF0b3InIHRoZSBhcmd1bWVudAorICAgIC8vIGFmdGVyIG1vZGlmaWNh
dGlvbiwgdGhlbiB0aGUgb3V0cHV0LXBhcmFtZXRlciBkZWNpbWFsX3BvaW50IGlzIHN1Y2ggdGhh
dAorICAgIC8vICBudW1lcmF0b3IgLyBkZW5vbWluYXRvciAqIDEwXmVzdGltYXRlZF9wb3dlciA9
PQorICAgIC8vICAgIG51bWVyYXRvcicgLyBkZW5vbWluYXRvcicgKiAxMF4oZGVjaW1hbF9wb2lu
dCAtIDEpCisgICAgLy8gSW4gc29tZSBjYXNlcyBlc3RpbWF0ZWRfcG93ZXIgd2FzIHRvbyBsb3cs
IGFuZCB0aGlzIGlzIGFscmVhZHkgdGhlIGNhc2UuIFdlCisgICAgLy8gdGhlbiBzaW1wbHkgYWRq
dXN0IHRoZSBwb3dlciBzbyB0aGF0IDEwXihrLTEpIDw9IHYgPCAxMF5rICh3aXRoIGsgPT0KKyAg
ICAvLyBlc3RpbWF0ZWRfcG93ZXIpIGJ1dCBkbyBub3QgdG91Y2ggdGhlIG51bWVyYXRvciBvciBk
ZW5vbWluYXRvci4KKyAgICAvLyBPdGhlcndpc2UgdGhlIHJvdXRpbmUgbXVsdGlwbGllcyB0aGUg
bnVtZXJhdG9yIGFuZCB0aGUgZGVsdGFzIGJ5IDEwLgorICAgIHN0YXRpYyB2b2lkIEZpeHVwTXVs
dGlwbHkxMChpbnQgZXN0aW1hdGVkX3Bvd2VyLCBib29sIGlzX2V2ZW4sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCogZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQmlnbnVtKiBudW1lcmF0b3IsIEJpZ251bSogZGVub21pbmF0b3IsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogZGVsdGFfbWludXMsIEJpZ251
bSogZGVsdGFfcGx1cykgeworICAgICAgICBib29sIGluX3JhbmdlOworICAgICAgICBpZiAoaXNf
ZXZlbikgeworICAgICAgICAgICAgLy8gRm9yIElFRUUgZG91YmxlcyBoYWxmLXdheSBjYXNlcyAo
aW4gZGVjaW1hbCBzeXN0ZW0gbnVtYmVycyBlbmRpbmcgd2l0aCA1KQorICAgICAgICAgICAgLy8g
YXJlIHJvdW5kZWQgdG8gdGhlIGNsb3Nlc3QgZmxvYXRpbmctcG9pbnQgbnVtYmVyIHdpdGggZXZl
biBzaWduaWZpY2FuZC4KKyAgICAgICAgICAgIGluX3JhbmdlID0gQmlnbnVtOjpQbHVzQ29tcGFy
ZSgqbnVtZXJhdG9yLCAqZGVsdGFfcGx1cywgKmRlbm9taW5hdG9yKSA+PSAwOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgaW5fcmFuZ2UgPSBCaWdudW06OlBsdXNDb21wYXJlKCpudW1l
cmF0b3IsICpkZWx0YV9wbHVzLCAqZGVub21pbmF0b3IpID4gMDsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoaW5fcmFuZ2UpIHsKKyAgICAgICAgICAgIC8vIFNpbmNlIG51bWVyYXRvciArIGRlbHRh
X3BsdXMgPj0gZGVub21pbmF0b3Igd2UgYWxyZWFkeSBoYXZlCisgICAgICAgICAgICAvLyAxIDw9
IG51bWVyYXRvci9kZW5vbWluYXRvciA8IDEwLiBTaW1wbHkgdXBkYXRlIHRoZSBlc3RpbWF0ZWRf
cG93ZXIuCisgICAgICAgICAgICAqZGVjaW1hbF9wb2ludCA9IGVzdGltYXRlZF9wb3dlciArIDE7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAqZGVjaW1hbF9wb2ludCA9IGVzdGltYXRl
ZF9wb3dlcjsKKyAgICAgICAgICAgIG51bWVyYXRvci0+VGltZXMxMCgpOworICAgICAgICAgICAg
aWYgKEJpZ251bTo6RXF1YWwoKmRlbHRhX21pbnVzLCAqZGVsdGFfcGx1cykpIHsKKyAgICAgICAg
ICAgICAgICBkZWx0YV9taW51cy0+VGltZXMxMCgpOworICAgICAgICAgICAgICAgIGRlbHRhX3Bs
dXMtPkFzc2lnbkJpZ251bSgqZGVsdGFfbWludXMpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBkZWx0YV9taW51cy0+VGltZXMxMCgpOworICAgICAgICAgICAgICAgIGRl
bHRhX3BsdXMtPlRpbWVzMTAoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAg
ICAKK30gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS1kdG9hLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL2R0b2EvYmlnbnVtLWR0b2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wM2ZiYWFiYjdhNTYzODU2
ZjBmYTRjZjU0ZWI3ZjdlNjI5NjBlNjc5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS1kdG9hLmgKQEAgLTAsMCArMSw4MiBAQAorLy8gQ29w
eXJpZ2h0IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xh
aW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
CisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
Ky8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWZuZGVmIERPVUJMRV9DT05WRVJTSU9OX0JJR05VTV9E
VE9BX0hfCisjZGVmaW5lIERPVUJMRV9DT05WRVJTSU9OX0JJR05VTV9EVE9BX0hfCisKKyNpbmNs
dWRlICJ1dGlscy5oIgorCituYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAg
IGVudW0gQmlnbnVtRHRvYU1vZGUgeworICAgICAgICAvLyBSZXR1cm4gdGhlIHNob3J0ZXN0IGNv
cnJlY3QgcmVwcmVzZW50YXRpb24uCisgICAgICAgIC8vIEZvciBleGFtcGxlIHRoZSBvdXRwdXQg
b2YgMC4yOTk5OTk5OTk5OTk5OTk5ODg4OTcgaXMgKHRoZSBsZXNzIGFjY3VyYXRlIGJ1dAorICAg
ICAgICAvLyBjb3JyZWN0KSAwLjMuCisgICAgICAgIEJJR05VTV9EVE9BX1NIT1JURVNULAorICAg
ICAgICAvLyBSZXR1cm4gYSBmaXhlZCBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFs
IHBvaW50LgorICAgICAgICAvLyBGb3IgaW5zdGFuY2UgZml4ZWQoMC4xLCA0KSBiZWNvbWVzIDAu
MTAwMAorICAgICAgICAvLyBJZiB0aGUgaW5wdXQgbnVtYmVyIGlzIGJpZywgdGhlIG91dHB1dCB3
aWxsIGJlIGJpZy4KKyAgICAgICAgQklHTlVNX0RUT0FfRklYRUQsCisgICAgICAgIC8vIFJldHVy
biBhIGZpeGVkIG51bWJlciBvZiBkaWdpdHMsIG5vIG1hdHRlciB3aGF0IHRoZSBleHBvbmVudCBp
cy4KKyAgICAgICAgQklHTlVNX0RUT0FfUFJFQ0lTSU9OCisgICAgfTsKKyAgICAKKyAgICAvLyBD
b252ZXJ0cyB0aGUgZ2l2ZW4gZG91YmxlICd2JyB0byBhc2NpaS4KKyAgICAvLyBUaGUgcmVzdWx0
IHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBidWZmZXIgKiAxMF4ocG9pbnQtbGVuZ3RoKS4KKyAg
ICAvLyBUaGUgYnVmZmVyIHdpbGwgYmUgbnVsbC10ZXJtaW5hdGVkLgorICAgIC8vCisgICAgLy8g
VGhlIGlucHV0IHYgbXVzdCBiZSA+IDAgYW5kIGRpZmZlcmVudCBmcm9tIE5hTiwgYW5kIEluZmlu
aXR5LgorICAgIC8vCisgICAgLy8gVGhlIG91dHB1dCBkZXBlbmRzIG9uIHRoZSBnaXZlbiBtb2Rl
OgorICAgIC8vICAtIFNIT1JURVNUOiBwcm9kdWNlIHRoZSBsZWFzdCBhbW91bnQgb2YgZGlnaXRz
IGZvciB3aGljaCB0aGUgaW50ZXJuYWwKKyAgICAvLyAgIGlkZW50aXR5IHJlcXVpcmVtZW50IGlz
IHN0aWxsIHNhdGlzZmllZC4gSWYgdGhlIGRpZ2l0cyBhcmUgcHJpbnRlZAorICAgIC8vICAgKHRv
Z2V0aGVyIHdpdGggdGhlIGNvcnJlY3QgZXhwb25lbnQpIHRoZW4gcmVhZGluZyB0aGlzIG51bWJl
ciB3aWxsIGdpdmUKKyAgICAvLyAgICd2JyBhZ2Fpbi4gVGhlIGJ1ZmZlciB3aWxsIGNob29zZSB0
aGUgcmVwcmVzZW50YXRpb24gdGhhdCBpcyBjbG9zZXN0IHRvCisgICAgLy8gICAndicuIElmIHRo
ZXJlIGFyZSB0d28gYXQgdGhlIHNhbWUgZGlzdGFuY2UsIHRoYW4gdGhlIG51bWJlciBpcyByb3Vu
ZCB1cC4KKyAgICAvLyAgIEluIHRoaXMgbW9kZSB0aGUgJ3JlcXVlc3RlZF9kaWdpdHMnIHBhcmFt
ZXRlciBpcyBpZ25vcmVkLgorICAgIC8vICAtIEZJWEVEOiBwcm9kdWNlcyBkaWdpdHMgbmVjZXNz
YXJ5IHRvIHByaW50IGEgZ2l2ZW4gbnVtYmVyIHdpdGgKKyAgICAvLyAgICdyZXF1ZXN0ZWRfZGln
aXRzJyBkaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQuIFRoZSBwcm9kdWNlZCBkaWdpdHMK
KyAgICAvLyAgIG1pZ2h0IGJlIHRvbyBzaG9ydCBpbiB3aGljaCBjYXNlIHRoZSBjYWxsZXIgaGFz
IHRvIGZpbGwgdGhlIGdhcHMgd2l0aCAnMCdzLgorICAgIC8vICAgRXhhbXBsZTogdG9GaXhlZCgw
LjAwMSwgNSkgaXMgYWxsb3dlZCB0byByZXR1cm4gYnVmZmVyPSIxIiwgcG9pbnQ9LTIuCisgICAg
Ly8gICBIYWxmd2F5IGNhc2VzIGFyZSByb3VuZGVkIHVwLiBUaGUgY2FsbCB0b0ZpeGVkKDAuMTUs
IDIpIHRodXMgcmV0dXJucworICAgIC8vICAgICBidWZmZXI9IjIiLCBwb2ludD0wLgorICAgIC8v
ICAgTm90ZTogdGhlIGxlbmd0aCBvZiB0aGUgcmV0dXJuZWQgYnVmZmVyIGhhcyBubyBtZWFuaW5n
IHdydCB0aGUgc2lnbmlmaWNhbmNlCisgICAgLy8gICBvZiBpdHMgZGlnaXRzLiBUaGF0IGlzLCBq
dXN0IGJlY2F1c2UgaXQgY29udGFpbnMgJzAncyBkb2VzIG5vdCBtZWFuIHRoYXQKKyAgICAvLyAg
IGFueSBvdGhlciBkaWdpdCB3b3VsZCBub3Qgc2F0aXNmeSB0aGUgaW50ZXJuYWwgaWRlbnRpdHkg
cmVxdWlyZW1lbnQuCisgICAgLy8gIC0gUFJFQ0lTSU9OOiBwcm9kdWNlcyAncmVxdWVzdGVkX2Rp
Z2l0cycgd2hlcmUgdGhlIGZpcnN0IGRpZ2l0IGlzIG5vdCAnMCcuCisgICAgLy8gICBFdmVuIHRo
b3VnaCB0aGUgbGVuZ3RoIG9mIHByb2R1Y2VkIGRpZ2l0cyB1c3VhbGx5IGVxdWFscworICAgIC8v
ICAgJ3JlcXVlc3RlZF9kaWdpdHMnLCB0aGUgZnVuY3Rpb24gaXMgYWxsb3dlZCB0byByZXR1cm4g
ZmV3ZXIgZGlnaXRzLCBpbgorICAgIC8vICAgd2hpY2ggY2FzZSB0aGUgY2FsbGVyIGhhcyB0byBm
aWxsIHRoZSBtaXNzaW5nIGRpZ2l0cyB3aXRoICcwJ3MuCisgICAgLy8gICBIYWxmd2F5IGNhc2Vz
IGFyZSBhZ2FpbiByb3VuZGVkIHVwLgorICAgIC8vICdCaWdudW1EdG9hJyBleHBlY3RzIHRoZSBn
aXZlbiBidWZmZXIgdG8gYmUgYmlnIGVub3VnaCB0byBob2xkIGFsbCBkaWdpdHMKKyAgICAvLyBh
bmQgYSB0ZXJtaW5hdGluZyBudWxsLWNoYXJhY3Rlci4KKyAgICB2b2lkIEJpZ251bUR0b2EoZG91
YmxlIHYsIEJpZ251bUR0b2FNb2RlIG1vZGUsIGludCByZXF1ZXN0ZWRfZGlnaXRzLAorICAgICAg
ICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLCBpbnQqIGxlbmd0aCwgaW50KiBwb2lu
dCk7CisgICAgCit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KKworI2VuZGlmICAv
LyBET1VCTEVfQ09OVkVSU0lPTl9CSUdOVU1fRFRPQV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS5jYyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvZHRvYS9iaWdudW0uY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGYwMTU0NjYyNWVkOTM3YWY4ZjE0MGYxNGQx
MDU3ZjU5MTE1MmI2NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvZHRvYS9iaWdudW0uY2MKQEAgLTAsMCArMSw3NjQgQEAKKy8vIENvcHlyaWdodCAyMDEwIHRo
ZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
Ky8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisv
LyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworI2luY2x1ZGUgImJpZ251bS5oIgorI2luY2x1ZGUgInV0aWxzLmgiCisKK25hbWVz
cGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgQmlnbnVtOjpCaWdudW0oKQorICAg
IDogYmlnaXRzXyhiaWdpdHNfYnVmZmVyXywga0JpZ2l0Q2FwYWNpdHkpLCB1c2VkX2RpZ2l0c18o
MCksIGV4cG9uZW50XygwKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwga0JpZ2l0Q2Fw
YWNpdHk7ICsraSkgeworICAgICAgICAgICAgYmlnaXRzX1tpXSA9IDA7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUz4KKyAgICBzdGF0aWMgaW50
IEJpdFNpemUoUyB2YWx1ZSkgeworICAgICAgICByZXR1cm4gOCAqIHNpemVvZih2YWx1ZSk7Cisg
ICAgfQorICAgIAorICAgIC8vIEd1YXJhbnRlZWQgdG8gbGllIGluIG9uZSBCaWdpdC4KKyAgICB2
b2lkIEJpZ251bTo6QXNzaWduVUludDE2KHVpbnQxNl90IHZhbHVlKSB7CisgICAgICAgIEFTU0VS
VChrQmlnaXRTaXplID49IEJpdFNpemUodmFsdWUpKTsKKyAgICAgICAgWmVybygpOworICAgICAg
ICBpZiAodmFsdWUgPT0gMCkgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgRW5zdXJlQ2FwYWNp
dHkoMSk7CisgICAgICAgIGJpZ2l0c19bMF0gPSB2YWx1ZTsKKyAgICAgICAgdXNlZF9kaWdpdHNf
ID0gMTsKKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06OkFzc2lnblVJbnQ2NCh1
aW50NjRfdCB2YWx1ZSkgeworICAgICAgICBjb25zdCBpbnQga1VJbnQ2NFNpemUgPSA2NDsKKyAg
ICAgICAgCisgICAgICAgIFplcm8oKTsKKyAgICAgICAgaWYgKHZhbHVlID09IDApIHJldHVybjsK
KyAgICAgICAgCisgICAgICAgIGludCBuZWVkZWRfYmlnaXRzID0ga1VJbnQ2NFNpemUgLyBrQmln
aXRTaXplICsgMTsKKyAgICAgICAgRW5zdXJlQ2FwYWNpdHkobmVlZGVkX2JpZ2l0cyk7CisgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmVlZGVkX2JpZ2l0czsgKytpKSB7CisgICAgICAgICAg
ICBiaWdpdHNfW2ldID0gdmFsdWUgJiBrQmlnaXRNYXNrOworICAgICAgICAgICAgdmFsdWUgPSB2
YWx1ZSA+PiBrQmlnaXRTaXplOworICAgICAgICB9CisgICAgICAgIHVzZWRfZGlnaXRzXyA9IG5l
ZWRlZF9iaWdpdHM7CisgICAgICAgIENsYW1wKCk7CisgICAgfQorICAgIAorICAgIAorICAgIHZv
aWQgQmlnbnVtOjpBc3NpZ25CaWdudW0oY29uc3QgQmlnbnVtJiBvdGhlcikgeworICAgICAgICBl
eHBvbmVudF8gPSBvdGhlci5leHBvbmVudF87CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
b3RoZXIudXNlZF9kaWdpdHNfOyArK2kpIHsKKyAgICAgICAgICAgIGJpZ2l0c19baV0gPSBvdGhl
ci5iaWdpdHNfW2ldOworICAgICAgICB9CisgICAgICAgIC8vIENsZWFyIHRoZSBleGNlc3MgZGln
aXRzIChpZiB0aGVyZSB3ZXJlIGFueSkuCisgICAgICAgIGZvciAoaW50IGkgPSBvdGhlci51c2Vk
X2RpZ2l0c187IGkgPCB1c2VkX2RpZ2l0c187ICsraSkgeworICAgICAgICAgICAgYmlnaXRzX1tp
XSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgdXNlZF9kaWdpdHNfID0gb3RoZXIudXNlZF9kaWdp
dHNfOworICAgIH0KKyAgICAKKyAgICAKKyAgICBzdGF0aWMgdWludDY0X3QgUmVhZFVJbnQ2NChW
ZWN0b3I8Y29uc3QgY2hhcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBmcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkaWdpdHNfdG9f
cmVhZCkgeworICAgICAgICB1aW50NjRfdCByZXN1bHQgPSAwOworICAgICAgICBmb3IgKGludCBp
ID0gZnJvbTsgaSA8IGZyb20gKyBkaWdpdHNfdG9fcmVhZDsgKytpKSB7CisgICAgICAgICAgICBp
bnQgZGlnaXQgPSBidWZmZXJbaV0gLSAnMCc7CisgICAgICAgICAgICBBU1NFUlQoMCA8PSBkaWdp
dCAmJiBkaWdpdCA8PSA5KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAqIDEwICsgZGln
aXQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAg
CisgICAgdm9pZCBCaWdudW06OkFzc2lnbkRlY2ltYWxTdHJpbmcoVmVjdG9yPGNvbnN0IGNoYXI+
IHZhbHVlKSB7CisgICAgICAgIC8vIDJeNjQgPSAxODQ0Njc0NDA3MzcwOTU1MTYxNiA+IDEwXjE5
CisgICAgICAgIGNvbnN0IGludCBrTWF4VWludDY0RGVjaW1hbERpZ2l0cyA9IDE5OworICAgICAg
ICBaZXJvKCk7CisgICAgICAgIGludCBsZW5ndGggPSB2YWx1ZS5sZW5ndGgoKTsKKyAgICAgICAg
aW50IHBvcyA9IDA7CisgICAgICAgIC8vIExldCdzIGp1c3Qgc2F5IHRoYXQgZWFjaCBkaWdpdCBu
ZWVkcyA0IGJpdHMuCisgICAgICAgIHdoaWxlIChsZW5ndGggPj0ga01heFVpbnQ2NERlY2ltYWxE
aWdpdHMpIHsKKyAgICAgICAgICAgIHVpbnQ2NF90IGRpZ2l0cyA9IFJlYWRVSW50NjQodmFsdWUs
IHBvcywga01heFVpbnQ2NERlY2ltYWxEaWdpdHMpOworICAgICAgICAgICAgcG9zICs9IGtNYXhV
aW50NjREZWNpbWFsRGlnaXRzOworICAgICAgICAgICAgbGVuZ3RoIC09IGtNYXhVaW50NjREZWNp
bWFsRGlnaXRzOworICAgICAgICAgICAgTXVsdGlwbHlCeVBvd2VyT2ZUZW4oa01heFVpbnQ2NERl
Y2ltYWxEaWdpdHMpOworICAgICAgICAgICAgQWRkVUludDY0KGRpZ2l0cyk7CisgICAgICAgIH0K
KyAgICAgICAgdWludDY0X3QgZGlnaXRzID0gUmVhZFVJbnQ2NCh2YWx1ZSwgcG9zLCBsZW5ndGgp
OworICAgICAgICBNdWx0aXBseUJ5UG93ZXJPZlRlbihsZW5ndGgpOworICAgICAgICBBZGRVSW50
NjQoZGlnaXRzKTsKKyAgICAgICAgQ2xhbXAoKTsKKyAgICB9CisgICAgCisgICAgCisgICAgc3Rh
dGljIGludCBIZXhDaGFyVmFsdWUoY2hhciBjKSB7CisgICAgICAgIGlmICgnMCcgPD0gYyAmJiBj
IDw9ICc5JykgcmV0dXJuIGMgLSAnMCc7CisgICAgICAgIGlmICgnYScgPD0gYyAmJiBjIDw9ICdm
JykgcmV0dXJuIDEwICsgYyAtICdhJzsKKyAgICAgICAgaWYgKCdBJyA8PSBjICYmIGMgPD0gJ0Yn
KSByZXR1cm4gMTAgKyBjIC0gJ0EnOworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICBy
ZXR1cm4gMDsgIC8vIFRvIG1ha2UgY29tcGlsZXIgaGFwcHkuCisgICAgfQorICAgIAorICAgIAor
ICAgIHZvaWQgQmlnbnVtOjpBc3NpZ25IZXhTdHJpbmcoVmVjdG9yPGNvbnN0IGNoYXI+IHZhbHVl
KSB7CisgICAgICAgIFplcm8oKTsKKyAgICAgICAgaW50IGxlbmd0aCA9IHZhbHVlLmxlbmd0aCgp
OworICAgICAgICAKKyAgICAgICAgaW50IG5lZWRlZF9iaWdpdHMgPSBsZW5ndGggKiA0IC8ga0Jp
Z2l0U2l6ZSArIDE7CisgICAgICAgIEVuc3VyZUNhcGFjaXR5KG5lZWRlZF9iaWdpdHMpOworICAg
ICAgICBpbnQgc3RyaW5nX2luZGV4ID0gbGVuZ3RoIC0gMTsKKyAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBuZWVkZWRfYmlnaXRzIC0gMTsgKytpKSB7CisgICAgICAgICAgICAvLyBUaGVzZSBi
aWdpdHMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgImZ1bGwiLgorICAgICAgICAgICAgQ2h1bmsgY3Vy
cmVudF9iaWdpdCA9IDA7CisgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGtCaWdpdFNp
emUgLyA0OyBqKyspIHsKKyAgICAgICAgICAgICAgICBjdXJyZW50X2JpZ2l0ICs9IEhleENoYXJW
YWx1ZSh2YWx1ZVtzdHJpbmdfaW5kZXgtLV0pIDw8IChqICogNCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBiaWdpdHNfW2ldID0gY3VycmVudF9iaWdpdDsKKyAgICAgICAgfQorICAgICAg
ICB1c2VkX2RpZ2l0c18gPSBuZWVkZWRfYmlnaXRzIC0gMTsKKyAgICAgICAgCisgICAgICAgIENo
dW5rIG1vc3Rfc2lnbmlmaWNhbnRfYmlnaXQgPSAwOyAgLy8gQ291bGQgYmUgPSAwOworICAgICAg
ICBmb3IgKGludCBqID0gMDsgaiA8PSBzdHJpbmdfaW5kZXg7ICsraikgeworICAgICAgICAgICAg
bW9zdF9zaWduaWZpY2FudF9iaWdpdCA8PD0gNDsKKyAgICAgICAgICAgIG1vc3Rfc2lnbmlmaWNh
bnRfYmlnaXQgKz0gSGV4Q2hhclZhbHVlKHZhbHVlW2pdKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAobW9zdF9zaWduaWZpY2FudF9iaWdpdCAhPSAwKSB7CisgICAgICAgICAgICBiaWdpdHNfW3Vz
ZWRfZGlnaXRzX10gPSBtb3N0X3NpZ25pZmljYW50X2JpZ2l0OworICAgICAgICAgICAgdXNlZF9k
aWdpdHNfKys7CisgICAgICAgIH0KKyAgICAgICAgQ2xhbXAoKTsKKyAgICB9CisgICAgCisgICAg
CisgICAgdm9pZCBCaWdudW06OkFkZFVJbnQ2NCh1aW50NjRfdCBvcGVyYW5kKSB7CisgICAgICAg
IGlmIChvcGVyYW5kID09IDApIHJldHVybjsKKyAgICAgICAgQmlnbnVtIG90aGVyOworICAgICAg
ICBvdGhlci5Bc3NpZ25VSW50NjQob3BlcmFuZCk7CisgICAgICAgIEFkZEJpZ251bShvdGhlcik7
CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpBZGRCaWdudW0oY29uc3QgQmln
bnVtJiBvdGhlcikgeworICAgICAgICBBU1NFUlQoSXNDbGFtcGVkKCkpOworICAgICAgICBBU1NF
UlQob3RoZXIuSXNDbGFtcGVkKCkpOworICAgICAgICAKKyAgICAgICAgLy8gSWYgdGhpcyBoYXMg
YSBncmVhdGVyIGV4cG9uZW50IHRoYW4gb3RoZXIgYXBwZW5kIHplcm8tYmlnaXRzIHRvIHRoaXMu
CisgICAgICAgIC8vIEFmdGVyIHRoaXMgY2FsbCBleHBvbmVudF8gPD0gb3RoZXIuZXhwb25lbnRf
LgorICAgICAgICBBbGlnbihvdGhlcik7CisgICAgICAgIAorICAgICAgICAvLyBUaGVyZSBhcmUg
dHdvIHBvc3NpYmlsaXRpZXM6CisgICAgICAgIC8vICAgYWFhYWFhYWFhYWEgMDAwMCAgKHdoZXJl
IHRoZSAwcyByZXByZXNlbnQgYSdzIGV4cG9uZW50KQorICAgICAgICAvLyAgICAgYmJiYmIgMDAw
MDAwMDAKKyAgICAgICAgLy8gICAtLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIC8vICAgY2NjY2Nj
Y2NjY2MgMDAwMAorICAgICAgICAvLyBvcgorICAgICAgICAvLyAgICBhYWFhYWFhYWFhIDAwMDAK
KyAgICAgICAgLy8gIGJiYmJiYmJiYiAwMDAwMDAwCisgICAgICAgIC8vICAtLS0tLS0tLS0tLS0t
LS0tLQorICAgICAgICAvLyAgY2NjY2NjY2NjY2NjIDAwMDAKKyAgICAgICAgLy8gSW4gYm90aCBj
YXNlcyB3ZSBtaWdodCBuZWVkIGEgY2FycnkgYmlnaXQuCisgICAgICAgIAorICAgICAgICBFbnN1
cmVDYXBhY2l0eSgxICsgTWF4KEJpZ2l0TGVuZ3RoKCksIG90aGVyLkJpZ2l0TGVuZ3RoKCkpIC0g
ZXhwb25lbnRfKTsKKyAgICAgICAgQ2h1bmsgY2FycnkgPSAwOworICAgICAgICBpbnQgYmlnaXRf
cG9zID0gb3RoZXIuZXhwb25lbnRfIC0gZXhwb25lbnRfOworICAgICAgICBBU1NFUlQoYmlnaXRf
cG9zID49IDApOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG90aGVyLnVzZWRfZGlnaXRz
XzsgKytpKSB7CisgICAgICAgICAgICBDaHVuayBzdW0gPSBiaWdpdHNfW2JpZ2l0X3Bvc10gKyBv
dGhlci5iaWdpdHNfW2ldICsgY2Fycnk7CisgICAgICAgICAgICBiaWdpdHNfW2JpZ2l0X3Bvc10g
PSBzdW0gJiBrQmlnaXRNYXNrOworICAgICAgICAgICAgY2FycnkgPSBzdW0gPj4ga0JpZ2l0U2l6
ZTsKKyAgICAgICAgICAgIGJpZ2l0X3BvcysrOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICB3aGlsZSAoY2FycnkgIT0gMCkgeworICAgICAgICAgICAgQ2h1bmsgc3VtID0gYmlnaXRzX1ti
aWdpdF9wb3NdICsgY2Fycnk7CisgICAgICAgICAgICBiaWdpdHNfW2JpZ2l0X3Bvc10gPSBzdW0g
JiBrQmlnaXRNYXNrOworICAgICAgICAgICAgY2FycnkgPSBzdW0gPj4ga0JpZ2l0U2l6ZTsKKyAg
ICAgICAgICAgIGJpZ2l0X3BvcysrOworICAgICAgICB9CisgICAgICAgIHVzZWRfZGlnaXRzXyA9
IE1heChiaWdpdF9wb3MsIHVzZWRfZGlnaXRzXyk7CisgICAgICAgIEFTU0VSVChJc0NsYW1wZWQo
KSk7CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpTdWJ0cmFjdEJpZ251bShj
b25zdCBCaWdudW0mIG90aGVyKSB7CisgICAgICAgIEFTU0VSVChJc0NsYW1wZWQoKSk7CisgICAg
ICAgIEFTU0VSVChvdGhlci5Jc0NsYW1wZWQoKSk7CisgICAgICAgIC8vIFdlIHJlcXVpcmUgdGhp
cyB0byBiZSBiaWdnZXIgdGhhbiBvdGhlci4KKyAgICAgICAgQVNTRVJUKExlc3NFcXVhbChvdGhl
ciwgKnRoaXMpKTsKKyAgICAgICAgCisgICAgICAgIEFsaWduKG90aGVyKTsKKyAgICAgICAgCisg
ICAgICAgIGludCBvZmZzZXQgPSBvdGhlci5leHBvbmVudF8gLSBleHBvbmVudF87CisgICAgICAg
IENodW5rIGJvcnJvdyA9IDA7CisgICAgICAgIGludCBpOworICAgICAgICBmb3IgKGkgPSAwOyBp
IDwgb3RoZXIudXNlZF9kaWdpdHNfOyArK2kpIHsKKyAgICAgICAgICAgIEFTU0VSVCgoYm9ycm93
ID09IDApIHx8IChib3Jyb3cgPT0gMSkpOworICAgICAgICAgICAgQ2h1bmsgZGlmZmVyZW5jZSA9
IGJpZ2l0c19baSArIG9mZnNldF0gLSBvdGhlci5iaWdpdHNfW2ldIC0gYm9ycm93OworICAgICAg
ICAgICAgYmlnaXRzX1tpICsgb2Zmc2V0XSA9IGRpZmZlcmVuY2UgJiBrQmlnaXRNYXNrOworICAg
ICAgICAgICAgYm9ycm93ID0gZGlmZmVyZW5jZSA+PiAoa0NodW5rU2l6ZSAtIDEpOworICAgICAg
ICB9CisgICAgICAgIHdoaWxlIChib3Jyb3cgIT0gMCkgeworICAgICAgICAgICAgQ2h1bmsgZGlm
ZmVyZW5jZSA9IGJpZ2l0c19baSArIG9mZnNldF0gLSBib3Jyb3c7CisgICAgICAgICAgICBiaWdp
dHNfW2kgKyBvZmZzZXRdID0gZGlmZmVyZW5jZSAmIGtCaWdpdE1hc2s7CisgICAgICAgICAgICBi
b3Jyb3cgPSBkaWZmZXJlbmNlID4+IChrQ2h1bmtTaXplIC0gMSk7CisgICAgICAgICAgICArK2k7
CisgICAgICAgIH0KKyAgICAgICAgQ2xhbXAoKTsKKyAgICB9CisgICAgCisgICAgCisgICAgdm9p
ZCBCaWdudW06OlNoaWZ0TGVmdChpbnQgc2hpZnRfYW1vdW50KSB7CisgICAgICAgIGlmICh1c2Vk
X2RpZ2l0c18gPT0gMCkgcmV0dXJuOworICAgICAgICBleHBvbmVudF8gKz0gc2hpZnRfYW1vdW50
IC8ga0JpZ2l0U2l6ZTsKKyAgICAgICAgaW50IGxvY2FsX3NoaWZ0ID0gc2hpZnRfYW1vdW50ICUg
a0JpZ2l0U2l6ZTsKKyAgICAgICAgRW5zdXJlQ2FwYWNpdHkodXNlZF9kaWdpdHNfICsgMSk7Cisg
ICAgICAgIEJpZ2l0c1NoaWZ0TGVmdChsb2NhbF9zaGlmdCk7CisgICAgfQorICAgIAorICAgIAor
ICAgIHZvaWQgQmlnbnVtOjpNdWx0aXBseUJ5VUludDMyKHVpbnQzMl90IGZhY3RvcikgeworICAg
ICAgICBpZiAoZmFjdG9yID09IDEpIHJldHVybjsKKyAgICAgICAgaWYgKGZhY3RvciA9PSAwKSB7
CisgICAgICAgICAgICBaZXJvKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHVzZWRfZGlnaXRzXyA9PSAwKSByZXR1cm47CisgICAgICAgIAorICAgICAgICAv
LyBUaGUgcHJvZHVjdCBvZiBhIGJpZ2l0IHdpdGggdGhlIGZhY3RvciBpcyBvZiBzaXplIGtCaWdp
dFNpemUgKyAzMi4KKyAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhpcyBudW1iZXIgKyAxIChmb3Ig
dGhlIGNhcnJ5KSBmaXRzIGludG8gZG91YmxlIGNodW5rLgorICAgICAgICBBU1NFUlQoa0RvdWJs
ZUNodW5rU2l6ZSA+PSBrQmlnaXRTaXplICsgMzIgKyAxKTsKKyAgICAgICAgRG91YmxlQ2h1bmsg
Y2FycnkgPSAwOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHVzZWRfZGlnaXRzXzsgKytp
KSB7CisgICAgICAgICAgICBEb3VibGVDaHVuayBwcm9kdWN0ID0gc3RhdGljX2Nhc3Q8RG91Ymxl
Q2h1bms+KGZhY3RvcikgKiBiaWdpdHNfW2ldICsgY2Fycnk7CisgICAgICAgICAgICBiaWdpdHNf
W2ldID0gc3RhdGljX2Nhc3Q8Q2h1bms+KHByb2R1Y3QgJiBrQmlnaXRNYXNrKTsKKyAgICAgICAg
ICAgIGNhcnJ5ID0gKHByb2R1Y3QgPj4ga0JpZ2l0U2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAg
d2hpbGUgKGNhcnJ5ICE9IDApIHsKKyAgICAgICAgICAgIEVuc3VyZUNhcGFjaXR5KHVzZWRfZGln
aXRzXyArIDEpOworICAgICAgICAgICAgYmlnaXRzX1t1c2VkX2RpZ2l0c19dID0gY2FycnkgJiBr
QmlnaXRNYXNrOworICAgICAgICAgICAgdXNlZF9kaWdpdHNfKys7CisgICAgICAgICAgICBjYXJy
eSA+Pj0ga0JpZ2l0U2l6ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICB2b2lk
IEJpZ251bTo6TXVsdGlwbHlCeVVJbnQ2NCh1aW50NjRfdCBmYWN0b3IpIHsKKyAgICAgICAgaWYg
KGZhY3RvciA9PSAxKSByZXR1cm47CisgICAgICAgIGlmIChmYWN0b3IgPT0gMCkgeworICAgICAg
ICAgICAgWmVybygpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIEFT
U0VSVChrQmlnaXRTaXplIDwgMzIpOworICAgICAgICB1aW50NjRfdCBjYXJyeSA9IDA7CisgICAg
ICAgIHVpbnQ2NF90IGxvdyA9IGZhY3RvciAmIDB4RkZGRkZGRkY7CisgICAgICAgIHVpbnQ2NF90
IGhpZ2ggPSBmYWN0b3IgPj4gMzI7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdXNlZF9k
aWdpdHNfOyArK2kpIHsKKyAgICAgICAgICAgIHVpbnQ2NF90IHByb2R1Y3RfbG93ID0gbG93ICog
YmlnaXRzX1tpXTsKKyAgICAgICAgICAgIHVpbnQ2NF90IHByb2R1Y3RfaGlnaCA9IGhpZ2ggKiBi
aWdpdHNfW2ldOworICAgICAgICAgICAgdWludDY0X3QgdG1wID0gKGNhcnJ5ICYga0JpZ2l0TWFz
aykgKyBwcm9kdWN0X2xvdzsKKyAgICAgICAgICAgIGJpZ2l0c19baV0gPSB0bXAgJiBrQmlnaXRN
YXNrOworICAgICAgICAgICAgY2FycnkgPSAoY2FycnkgPj4ga0JpZ2l0U2l6ZSkgKyAodG1wID4+
IGtCaWdpdFNpemUpICsKKyAgICAgICAgICAgIChwcm9kdWN0X2hpZ2ggPDwgKDMyIC0ga0JpZ2l0
U2l6ZSkpOworICAgICAgICB9CisgICAgICAgIHdoaWxlIChjYXJyeSAhPSAwKSB7CisgICAgICAg
ICAgICBFbnN1cmVDYXBhY2l0eSh1c2VkX2RpZ2l0c18gKyAxKTsKKyAgICAgICAgICAgIGJpZ2l0
c19bdXNlZF9kaWdpdHNfXSA9IGNhcnJ5ICYga0JpZ2l0TWFzazsKKyAgICAgICAgICAgIHVzZWRf
ZGlnaXRzXysrOworICAgICAgICAgICAgY2FycnkgPj49IGtCaWdpdFNpemU7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06Ok11bHRpcGx5QnlQb3dlck9mVGVu
KGludCBleHBvbmVudCkgeworICAgICAgICBjb25zdCB1aW50NjRfdCBrRml2ZTI3ID0gVUlOVDY0
XzJQQVJUX0MoMHg2NzY1Yzc5MywgZmExMDA3OWQpOworICAgICAgICBjb25zdCB1aW50MTZfdCBr
Rml2ZTEgPSA1OworICAgICAgICBjb25zdCB1aW50MTZfdCBrRml2ZTIgPSBrRml2ZTEgKiA1Owor
ICAgICAgICBjb25zdCB1aW50MTZfdCBrRml2ZTMgPSBrRml2ZTIgKiA1OworICAgICAgICBjb25z
dCB1aW50MTZfdCBrRml2ZTQgPSBrRml2ZTMgKiA1OworICAgICAgICBjb25zdCB1aW50MTZfdCBr
Rml2ZTUgPSBrRml2ZTQgKiA1OworICAgICAgICBjb25zdCB1aW50MTZfdCBrRml2ZTYgPSBrRml2
ZTUgKiA1OworICAgICAgICBjb25zdCB1aW50MzJfdCBrRml2ZTcgPSBrRml2ZTYgKiA1OworICAg
ICAgICBjb25zdCB1aW50MzJfdCBrRml2ZTggPSBrRml2ZTcgKiA1OworICAgICAgICBjb25zdCB1
aW50MzJfdCBrRml2ZTkgPSBrRml2ZTggKiA1OworICAgICAgICBjb25zdCB1aW50MzJfdCBrRml2
ZTEwID0ga0ZpdmU5ICogNTsKKyAgICAgICAgY29uc3QgdWludDMyX3Qga0ZpdmUxMSA9IGtGaXZl
MTAgKiA1OworICAgICAgICBjb25zdCB1aW50MzJfdCBrRml2ZTEyID0ga0ZpdmUxMSAqIDU7Cisg
ICAgICAgIGNvbnN0IHVpbnQzMl90IGtGaXZlMTMgPSBrRml2ZTEyICogNTsKKyAgICAgICAgY29u
c3QgdWludDMyX3Qga0ZpdmUxX3RvXzEyW10gPQorICAgICAgICB7IGtGaXZlMSwga0ZpdmUyLCBr
Rml2ZTMsIGtGaXZlNCwga0ZpdmU1LCBrRml2ZTYsCisgICAgICAgICAgICBrRml2ZTcsIGtGaXZl
OCwga0ZpdmU5LCBrRml2ZTEwLCBrRml2ZTExLCBrRml2ZTEyIH07CisgICAgICAgIAorICAgICAg
ICBBU1NFUlQoZXhwb25lbnQgPj0gMCk7CisgICAgICAgIGlmIChleHBvbmVudCA9PSAwKSByZXR1
cm47CisgICAgICAgIGlmICh1c2VkX2RpZ2l0c18gPT0gMCkgcmV0dXJuOworICAgICAgICAKKyAg
ICAgICAgLy8gV2Ugc2hpZnQgYnkgZXhwb25lbnQgYXQgdGhlIGVuZCBqdXN0IGJlZm9yZSByZXR1
cm5pbmcuCisgICAgICAgIGludCByZW1haW5pbmdfZXhwb25lbnQgPSBleHBvbmVudDsKKyAgICAg
ICAgd2hpbGUgKHJlbWFpbmluZ19leHBvbmVudCA+PSAyNykgeworICAgICAgICAgICAgTXVsdGlw
bHlCeVVJbnQ2NChrRml2ZTI3KTsKKyAgICAgICAgICAgIHJlbWFpbmluZ19leHBvbmVudCAtPSAy
NzsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAocmVtYWluaW5nX2V4cG9uZW50ID49IDEzKSB7
CisgICAgICAgICAgICBNdWx0aXBseUJ5VUludDMyKGtGaXZlMTMpOworICAgICAgICAgICAgcmVt
YWluaW5nX2V4cG9uZW50IC09IDEzOworICAgICAgICB9CisgICAgICAgIGlmIChyZW1haW5pbmdf
ZXhwb25lbnQgPiAwKSB7CisgICAgICAgICAgICBNdWx0aXBseUJ5VUludDMyKGtGaXZlMV90b18x
MltyZW1haW5pbmdfZXhwb25lbnQgLSAxXSk7CisgICAgICAgIH0KKyAgICAgICAgU2hpZnRMZWZ0
KGV4cG9uZW50KTsKKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06OlNxdWFyZSgp
IHsKKyAgICAgICAgQVNTRVJUKElzQ2xhbXBlZCgpKTsKKyAgICAgICAgaW50IHByb2R1Y3RfbGVu
Z3RoID0gMiAqIHVzZWRfZGlnaXRzXzsKKyAgICAgICAgRW5zdXJlQ2FwYWNpdHkocHJvZHVjdF9s
ZW5ndGgpOworICAgICAgICAKKyAgICAgICAgLy8gQ29tYmEgbXVsdGlwbGljYXRpb246IGNvbXB1
dGUgZWFjaCBjb2x1bW4gc2VwYXJhdGVseS4KKyAgICAgICAgLy8gRXhhbXBsZTogciA9IGEyYTFh
MCAqIGIyYjFiMC4KKyAgICAgICAgLy8gICAgciA9ICAxICAgICogYTBiMCArCisgICAgICAgIC8v
ICAgICAgICAxMCAgICAqIChhMWIwICsgYTBiMSkgKworICAgICAgICAvLyAgICAgICAgMTAwICAg
KiAoYTJiMCArIGExYjEgKyBhMGIyKSArCisgICAgICAgIC8vICAgICAgICAxMDAwICAqIChhMmIx
ICsgYTFiMikgKworICAgICAgICAvLyAgICAgICAgMTAwMDAgKiBhMmIyCisgICAgICAgIC8vCisg
ICAgICAgIC8vIEluIHRoZSB3b3JzdCBjYXNlIHdlIGhhdmUgdG8gYWNjdW11bGF0ZSBuYi1kaWdp
dHMgcHJvZHVjdHMgb2YgZGlnaXQqZGlnaXQuCisgICAgICAgIC8vCisgICAgICAgIC8vIEFzc2Vy
dCB0aGF0IHRoZSBhZGRpdGlvbmFsIG51bWJlciBvZiBiaXRzIGluIGEgRG91YmxlQ2h1bmsgYXJl
IGVub3VnaCB0bworICAgICAgICAvLyBzdW0gdXAgdXNlZF9kaWdpdHMgb2YgQmlnaXQqQmlnaXQu
CisgICAgICAgIGlmICgoMSA8PCAoMiAqIChrQ2h1bmtTaXplIC0ga0JpZ2l0U2l6ZSkpKSA8PSB1
c2VkX2RpZ2l0c18pIHsKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICAgICAgfQor
ICAgICAgICBEb3VibGVDaHVuayBhY2N1bXVsYXRvciA9IDA7CisgICAgICAgIC8vIEZpcnN0IHNo
aWZ0IHRoZSBkaWdpdHMgc28gd2UgZG9uJ3Qgb3ZlcndyaXRlIHRoZW0uCisgICAgICAgIGludCBj
b3B5X29mZnNldCA9IHVzZWRfZGlnaXRzXzsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1
c2VkX2RpZ2l0c187ICsraSkgeworICAgICAgICAgICAgYmlnaXRzX1tjb3B5X29mZnNldCArIGld
ID0gYmlnaXRzX1tpXTsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBoYXZlIHR3byBsb29wcyB0
byBhdm9pZCBzb21lICdpZidzIGluIHRoZSBsb29wLgorICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IHVzZWRfZGlnaXRzXzsgKytpKSB7CisgICAgICAgICAgICAvLyBQcm9jZXNzIHRlbXBvcmFy
eSBkaWdpdCBpIHdpdGggcG93ZXIgaS4KKyAgICAgICAgICAgIC8vIFRoZSBzdW0gb2YgdGhlIHR3
byBpbmRpY2VzIG11c3QgYmUgZXF1YWwgdG8gaS4KKyAgICAgICAgICAgIGludCBiaWdpdF9pbmRl
eDEgPSBpOworICAgICAgICAgICAgaW50IGJpZ2l0X2luZGV4MiA9IDA7CisgICAgICAgICAgICAv
LyBTdW0gYWxsIG9mIHRoZSBzdWItcHJvZHVjdHMuCisgICAgICAgICAgICB3aGlsZSAoYmlnaXRf
aW5kZXgxID49IDApIHsKKyAgICAgICAgICAgICAgICBDaHVuayBjaHVuazEgPSBiaWdpdHNfW2Nv
cHlfb2Zmc2V0ICsgYmlnaXRfaW5kZXgxXTsKKyAgICAgICAgICAgICAgICBDaHVuayBjaHVuazIg
PSBiaWdpdHNfW2NvcHlfb2Zmc2V0ICsgYmlnaXRfaW5kZXgyXTsKKyAgICAgICAgICAgICAgICBh
Y2N1bXVsYXRvciArPSBzdGF0aWNfY2FzdDxEb3VibGVDaHVuaz4oY2h1bmsxKSAqIGNodW5rMjsK
KyAgICAgICAgICAgICAgICBiaWdpdF9pbmRleDEtLTsKKyAgICAgICAgICAgICAgICBiaWdpdF9p
bmRleDIrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJpZ2l0c19baV0gPSBzdGF0aWNf
Y2FzdDxDaHVuaz4oYWNjdW11bGF0b3IpICYga0JpZ2l0TWFzazsKKyAgICAgICAgICAgIGFjY3Vt
dWxhdG9yID4+PSBrQmlnaXRTaXplOworICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGkgPSB1
c2VkX2RpZ2l0c187IGkgPCBwcm9kdWN0X2xlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpbnQg
YmlnaXRfaW5kZXgxID0gdXNlZF9kaWdpdHNfIC0gMTsKKyAgICAgICAgICAgIGludCBiaWdpdF9p
bmRleDIgPSBpIC0gYmlnaXRfaW5kZXgxOworICAgICAgICAgICAgLy8gSW52YXJpYW50OiBzdW0g
b2YgYm90aCBpbmRpY2VzIGlzIGFnYWluIGVxdWFsIHRvIGkuCisgICAgICAgICAgICAvLyBJbm5l
ciBsb29wIHJ1bnMgMCB0aW1lcyBvbiBsYXN0IGl0ZXJhdGlvbiwgZW1wdHlpbmcgYWNjdW11bGF0
b3IuCisgICAgICAgICAgICB3aGlsZSAoYmlnaXRfaW5kZXgyIDwgdXNlZF9kaWdpdHNfKSB7Cisg
ICAgICAgICAgICAgICAgQ2h1bmsgY2h1bmsxID0gYmlnaXRzX1tjb3B5X29mZnNldCArIGJpZ2l0
X2luZGV4MV07CisgICAgICAgICAgICAgICAgQ2h1bmsgY2h1bmsyID0gYmlnaXRzX1tjb3B5X29m
ZnNldCArIGJpZ2l0X2luZGV4Ml07CisgICAgICAgICAgICAgICAgYWNjdW11bGF0b3IgKz0gc3Rh
dGljX2Nhc3Q8RG91YmxlQ2h1bms+KGNodW5rMSkgKiBjaHVuazI7CisgICAgICAgICAgICAgICAg
YmlnaXRfaW5kZXgxLS07CisgICAgICAgICAgICAgICAgYmlnaXRfaW5kZXgyKys7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAvLyBUaGUgb3ZlcndyaXR0ZW4gYmlnaXRzX1tpXSB3aWxsIG5l
dmVyIGJlIHJlYWQgaW4gZnVydGhlciBsb29wIGl0ZXJhdGlvbnMsCisgICAgICAgICAgICAvLyBi
ZWNhdXNlIGJpZ2l0X2luZGV4MSBhbmQgYmlnaXRfaW5kZXgyIGFyZSBhbHdheXMgZ3JlYXRlcgor
ICAgICAgICAgICAgLy8gdGhhbiBpIC0gdXNlZF9kaWdpdHNfLgorICAgICAgICAgICAgYmlnaXRz
X1tpXSA9IHN0YXRpY19jYXN0PENodW5rPihhY2N1bXVsYXRvcikgJiBrQmlnaXRNYXNrOworICAg
ICAgICAgICAgYWNjdW11bGF0b3IgPj49IGtCaWdpdFNpemU7CisgICAgICAgIH0KKyAgICAgICAg
Ly8gU2luY2UgdGhlIHJlc3VsdCB3YXMgZ3VhcmFudGVlZCB0byBsaWUgaW5zaWRlIHRoZSBudW1i
ZXIgdGhlCisgICAgICAgIC8vIGFjY3VtdWxhdG9yIG11c3QgYmUgMCBub3cuCisgICAgICAgIEFT
U0VSVChhY2N1bXVsYXRvciA9PSAwKTsKKyAgICAgICAgCisgICAgICAgIC8vIERvbid0IGZvcmdl
dCB0byB1cGRhdGUgdGhlIHVzZWRfZGlnaXRzIGFuZCB0aGUgZXhwb25lbnQuCisgICAgICAgIHVz
ZWRfZGlnaXRzXyA9IHByb2R1Y3RfbGVuZ3RoOworICAgICAgICBleHBvbmVudF8gKj0gMjsKKyAg
ICAgICAgQ2xhbXAoKTsKKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06OkFzc2ln
blBvd2VyVUludDE2KHVpbnQxNl90IGJhc2UsIGludCBwb3dlcl9leHBvbmVudCkgeworICAgICAg
ICBBU1NFUlQoYmFzZSAhPSAwKTsKKyAgICAgICAgQVNTRVJUKHBvd2VyX2V4cG9uZW50ID49IDAp
OworICAgICAgICBpZiAocG93ZXJfZXhwb25lbnQgPT0gMCkgeworICAgICAgICAgICAgQXNzaWdu
VUludDE2KDEpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIFplcm8o
KTsKKyAgICAgICAgaW50IHNoaWZ0cyA9IDA7CisgICAgICAgIC8vIFdlIGV4cGVjdCBiYXNlIHRv
IGJlIGluIHJhbmdlIDItMzIsIGFuZCBtb3N0IG9mdGVuIHRvIGJlIDEwLgorICAgICAgICAvLyBJ
dCBkb2VzIG5vdCBtYWtlIG11Y2ggc2Vuc2UgdG8gaW1wbGVtZW50IGRpZmZlcmVudCBhbGdvcml0
aG1zIGZvciBjb3VudGluZworICAgICAgICAvLyB0aGUgYml0cy4KKyAgICAgICAgd2hpbGUgKChi
YXNlICYgMSkgPT0gMCkgeworICAgICAgICAgICAgYmFzZSA+Pj0gMTsKKyAgICAgICAgICAgIHNo
aWZ0cysrOworICAgICAgICB9CisgICAgICAgIGludCBiaXRfc2l6ZSA9IDA7CisgICAgICAgIGlu
dCB0bXBfYmFzZSA9IGJhc2U7CisgICAgICAgIHdoaWxlICh0bXBfYmFzZSAhPSAwKSB7CisgICAg
ICAgICAgICB0bXBfYmFzZSA+Pj0gMTsKKyAgICAgICAgICAgIGJpdF9zaXplKys7CisgICAgICAg
IH0KKyAgICAgICAgaW50IGZpbmFsX3NpemUgPSBiaXRfc2l6ZSAqIHBvd2VyX2V4cG9uZW50Owor
ICAgICAgICAvLyAxIGV4dHJhIGJpZ2l0IGZvciB0aGUgc2hpZnRpbmcsIGFuZCBvbmUgZm9yIHJv
dW5kZWQgZmluYWxfc2l6ZS4KKyAgICAgICAgRW5zdXJlQ2FwYWNpdHkoZmluYWxfc2l6ZSAvIGtC
aWdpdFNpemUgKyAyKTsKKyAgICAgICAgCisgICAgICAgIC8vIExlZnQgdG8gUmlnaHQgZXhwb25l
bnRpYXRpb24uCisgICAgICAgIGludCBtYXNrID0gMTsKKyAgICAgICAgd2hpbGUgKHBvd2VyX2V4
cG9uZW50ID49IG1hc2spIG1hc2sgPDw9IDE7CisgICAgICAgIAorICAgICAgICAvLyBUaGUgbWFz
ayBpcyBub3cgcG9pbnRpbmcgdG8gdGhlIGJpdCBhYm92ZSB0aGUgbW9zdCBzaWduaWZpY2FudCAx
LWJpdCBvZgorICAgICAgICAvLyBwb3dlcl9leHBvbmVudC4KKyAgICAgICAgLy8gR2V0IHJpZCBv
ZiBmaXJzdCAxLWJpdDsKKyAgICAgICAgbWFzayA+Pj0gMjsKKyAgICAgICAgdWludDY0X3QgdGhp
c192YWx1ZSA9IGJhc2U7CisgICAgICAgIAorICAgICAgICBib29sIGRlbGF5ZWRfbXVsdGlwbGlj
aWF0aW9uID0gZmFsc2U7CisgICAgICAgIGNvbnN0IHVpbnQ2NF90IG1heF8zMmJpdHMgPSAweEZG
RkZGRkZGOworICAgICAgICB3aGlsZSAobWFzayAhPSAwICYmIHRoaXNfdmFsdWUgPD0gbWF4XzMy
Yml0cykgeworICAgICAgICAgICAgdGhpc192YWx1ZSA9IHRoaXNfdmFsdWUgKiB0aGlzX3ZhbHVl
OworICAgICAgICAgICAgLy8gVmVyaWZ5IHRoYXQgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGluIHRo
aXNfdmFsdWUgdG8gcGVyZm9ybSB0aGUKKyAgICAgICAgICAgIC8vIG11bHRpcGxpY2F0aW9uLiAg
VGhlIGZpcnN0IGJpdF9zaXplIGJpdHMgbXVzdCBiZSAwLgorICAgICAgICAgICAgaWYgKChwb3dl
cl9leHBvbmVudCAmIG1hc2spICE9IDApIHsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBiYXNl
X2JpdHNfbWFzayA9CisgICAgICAgICAgICAgICAgfigoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDEp
IDw8ICg2NCAtIGJpdF9zaXplKSkgLSAxKTsKKyAgICAgICAgICAgICAgICBib29sIGhpZ2hfYml0
c196ZXJvID0gKHRoaXNfdmFsdWUgJiBiYXNlX2JpdHNfbWFzaykgPT0gMDsKKyAgICAgICAgICAg
ICAgICBpZiAoaGlnaF9iaXRzX3plcm8pIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpc192YWx1
ZSAqPSBiYXNlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IGRlbGF5ZWRfbXVsdGlwbGljaWF0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBtYXNrID4+PSAxOworICAgICAgICB9CisgICAgICAgIEFz
c2lnblVJbnQ2NCh0aGlzX3ZhbHVlKTsKKyAgICAgICAgaWYgKGRlbGF5ZWRfbXVsdGlwbGljaWF0
aW9uKSB7CisgICAgICAgICAgICBNdWx0aXBseUJ5VUludDMyKGJhc2UpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICAvLyBOb3cgZG8gdGhlIHNhbWUgdGhpbmcgYXMgYSBiaWdudW0uCisg
ICAgICAgIHdoaWxlIChtYXNrICE9IDApIHsKKyAgICAgICAgICAgIFNxdWFyZSgpOworICAgICAg
ICAgICAgaWYgKChwb3dlcl9leHBvbmVudCAmIG1hc2spICE9IDApIHsKKyAgICAgICAgICAgICAg
ICBNdWx0aXBseUJ5VUludDMyKGJhc2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWFz
ayA+Pj0gMTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQW5kIGZpbmFsbHkgYWRk
IHRoZSBzYXZlZCBzaGlmdHMuCisgICAgICAgIFNoaWZ0TGVmdChzaGlmdHMgKiBwb3dlcl9leHBv
bmVudCk7CisgICAgfQorICAgIAorICAgIAorICAgIC8vIFByZWNvbmRpdGlvbjogdGhpcy9vdGhl
ciA8IDE2Yml0LgorICAgIHVpbnQxNl90IEJpZ251bTo6RGl2aWRlTW9kdWxvSW50QmlnbnVtKGNv
bnN0IEJpZ251bSYgb3RoZXIpIHsKKyAgICAgICAgQVNTRVJUKElzQ2xhbXBlZCgpKTsKKyAgICAg
ICAgQVNTRVJUKG90aGVyLklzQ2xhbXBlZCgpKTsKKyAgICAgICAgQVNTRVJUKG90aGVyLnVzZWRf
ZGlnaXRzXyA+IDApOworICAgICAgICAKKyAgICAgICAgLy8gRWFzeSBjYXNlOiBpZiB3ZSBoYXZl
IGxlc3MgZGlnaXRzIHRoYW4gdGhlIGRpdmlzb3IgdGhhbiB0aGUgcmVzdWx0IGlzIDAuCisgICAg
ICAgIC8vIE5vdGU6IHRoaXMgaGFuZGxlcyB0aGUgY2FzZSB3aGVyZSB0aGlzID09IDAsIHRvby4K
KyAgICAgICAgaWYgKEJpZ2l0TGVuZ3RoKCkgPCBvdGhlci5CaWdpdExlbmd0aCgpKSB7CisgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQWxpZ24ob3Ro
ZXIpOworICAgICAgICAKKyAgICAgICAgdWludDE2X3QgcmVzdWx0ID0gMDsKKyAgICAgICAgCisg
ICAgICAgIC8vIFN0YXJ0IGJ5IHJlbW92aW5nIG11bHRpcGxlcyBvZiAnb3RoZXInIHVudGlsIGJv
dGggbnVtYmVycyBoYXZlIHRoZSBzYW1lCisgICAgICAgIC8vIG51bWJlciBvZiBkaWdpdHMuCisg
ICAgICAgIHdoaWxlIChCaWdpdExlbmd0aCgpID4gb3RoZXIuQmlnaXRMZW5ndGgoKSkgeworICAg
ICAgICAgICAgLy8gVGhpcyBuYWl2ZSBhcHByb2FjaCBpcyBleHRyZW1lbHkgaW5lZmZpY2llbnQg
aWYgdGhlIHRoaXMgZGl2aWRlZCBvdGhlcgorICAgICAgICAgICAgLy8gbWlnaHQgYmUgYmlnLiBU
aGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGZvciBkb3VibGVUb1N0cmluZyB3aGVyZQorICAg
ICAgICAgICAgLy8gdGhlIHJlc3VsdCBzaG91bGQgYmUgc21hbGwgKGxlc3MgdGhhbiAxMCkuCisg
ICAgICAgICAgICBBU1NFUlQob3RoZXIuYmlnaXRzX1tvdGhlci51c2VkX2RpZ2l0c18gLSAxXSA+
PSAoKDEgPDwga0JpZ2l0U2l6ZSkgLyAxNikpOworICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBt
dWx0aXBsZXMgb2YgdGhlIGZpcnN0IGRpZ2l0LgorICAgICAgICAgICAgLy8gRXhhbXBsZSB0aGlz
ID0gMjMgYW5kIG90aGVyIGVxdWFscyA5LiAtPiBSZW1vdmUgMiBtdWx0aXBsZXMuCisgICAgICAg
ICAgICByZXN1bHQgKz0gYmlnaXRzX1t1c2VkX2RpZ2l0c18gLSAxXTsKKyAgICAgICAgICAgIFN1
YnRyYWN0VGltZXMob3RoZXIsIGJpZ2l0c19bdXNlZF9kaWdpdHNfIC0gMV0pOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBBU1NFUlQoQmlnaXRMZW5ndGgoKSA9PSBvdGhlci5CaWdpdExl
bmd0aCgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIEJvdGggYmlnbnVtcyBhcmUgYXQgdGhlIHNh
bWUgbGVuZ3RoIG5vdy4KKyAgICAgICAgLy8gU2luY2Ugb3RoZXIgaGFzIG1vcmUgdGhhbiAwIGRp
Z2l0cyB3ZSBrbm93IHRoYXQgdGhlIGFjY2VzcyB0bworICAgICAgICAvLyBiaWdpdHNfW3VzZWRf
ZGlnaXRzXyAtIDFdIGlzIHNhZmUuCisgICAgICAgIENodW5rIHRoaXNfYmlnaXQgPSBiaWdpdHNf
W3VzZWRfZGlnaXRzXyAtIDFdOworICAgICAgICBDaHVuayBvdGhlcl9iaWdpdCA9IG90aGVyLmJp
Z2l0c19bb3RoZXIudXNlZF9kaWdpdHNfIC0gMV07CisgICAgICAgIAorICAgICAgICBpZiAob3Ro
ZXIudXNlZF9kaWdpdHNfID09IDEpIHsKKyAgICAgICAgICAgIC8vIFNob3J0Y3V0IGZvciBlYXN5
IChhbmQgY29tbW9uKSBjYXNlLgorICAgICAgICAgICAgaW50IHF1b3RpZW50ID0gdGhpc19iaWdp
dCAvIG90aGVyX2JpZ2l0OworICAgICAgICAgICAgYmlnaXRzX1t1c2VkX2RpZ2l0c18gLSAxXSA9
IHRoaXNfYmlnaXQgLSBvdGhlcl9iaWdpdCAqIHF1b3RpZW50OworICAgICAgICAgICAgcmVzdWx0
ICs9IHF1b3RpZW50OworICAgICAgICAgICAgQ2xhbXAoKTsKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludCBkaXZpc2lvbl9lc3RpbWF0
ZSA9IHRoaXNfYmlnaXQgLyAob3RoZXJfYmlnaXQgKyAxKTsKKyAgICAgICAgcmVzdWx0ICs9IGRp
dmlzaW9uX2VzdGltYXRlOworICAgICAgICBTdWJ0cmFjdFRpbWVzKG90aGVyLCBkaXZpc2lvbl9l
c3RpbWF0ZSk7CisgICAgICAgIAorICAgICAgICBpZiAob3RoZXJfYmlnaXQgKiAoZGl2aXNpb25f
ZXN0aW1hdGUgKyAxKSA+IHRoaXNfYmlnaXQpIHsKKyAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8g
ZXZlbiB0cnkgdG8gc3VidHJhY3QuIEV2ZW4gaWYgb3RoZXIncyByZW1haW5pbmcgZGlnaXRzIHdl
cmUgMAorICAgICAgICAgICAgLy8gYW5vdGhlciBzdWJ0cmFjdGlvbiB3b3VsZCBiZSB0b28gbXVj
aC4KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHdoaWxlIChMZXNzRXF1YWwob3RoZXIsICp0aGlzKSkgeworICAgICAgICAgICAgU3VidHJh
Y3RCaWdudW0ob3RoZXIpOworICAgICAgICAgICAgcmVzdWx0Kys7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgUz4KKyAgICBzdGF0aWMgaW50IFNpemVJbkhleENoYXJzKFMgbnVtYmVyKSB7CisgICAgICAg
IEFTU0VSVChudW1iZXIgPiAwKTsKKyAgICAgICAgaW50IHJlc3VsdCA9IDA7CisgICAgICAgIHdo
aWxlIChudW1iZXIgIT0gMCkgeworICAgICAgICAgICAgbnVtYmVyID4+PSA0OworICAgICAgICAg
ICAgcmVzdWx0Kys7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cisg
ICAgCisgICAgCisgICAgc3RhdGljIGNoYXIgSGV4Q2hhck9mVmFsdWUoaW50IHZhbHVlKSB7Cisg
ICAgICAgIEFTU0VSVCgwIDw9IHZhbHVlICYmIHZhbHVlIDw9IDE2KTsKKyAgICAgICAgaWYgKHZh
bHVlIDwgMTApIHJldHVybiB2YWx1ZSArICcwJzsKKyAgICAgICAgcmV0dXJuIHZhbHVlIC0gMTAg
KyAnQSc7CisgICAgfQorICAgIAorICAgIAorICAgIGJvb2wgQmlnbnVtOjpUb0hleFN0cmluZyhj
aGFyKiBidWZmZXIsIGludCBidWZmZXJfc2l6ZSkgY29uc3QgeworICAgICAgICBBU1NFUlQoSXND
bGFtcGVkKCkpOworICAgICAgICAvLyBFYWNoIGJpZ2l0IG11c3QgYmUgcHJpbnRhYmxlIGFzIHNl
cGFyYXRlIGhleC1jaGFyYWN0ZXIuCisgICAgICAgIEFTU0VSVChrQmlnaXRTaXplICUgNCA9PSAw
KTsKKyAgICAgICAgY29uc3QgaW50IGtIZXhDaGFyc1BlckJpZ2l0ID0ga0JpZ2l0U2l6ZSAvIDQ7
CisgICAgICAgIAorICAgICAgICBpZiAodXNlZF9kaWdpdHNfID09IDApIHsKKyAgICAgICAgICAg
IGlmIChidWZmZXJfc2l6ZSA8IDIpIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJ1ZmZlclsw
XSA9ICcwJzsKKyAgICAgICAgICAgIGJ1ZmZlclsxXSA9ICdcMCc7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBhZGQgMSBmb3IgdGhlIHRlcm1pbmF0
aW5nICdcMCcgY2hhcmFjdGVyLgorICAgICAgICBpbnQgbmVlZGVkX2NoYXJzID0gKEJpZ2l0TGVu
Z3RoKCkgLSAxKSAqIGtIZXhDaGFyc1BlckJpZ2l0ICsKKyAgICAgICAgU2l6ZUluSGV4Q2hhcnMo
YmlnaXRzX1t1c2VkX2RpZ2l0c18gLSAxXSkgKyAxOworICAgICAgICBpZiAobmVlZGVkX2NoYXJz
ID4gYnVmZmVyX3NpemUpIHJldHVybiBmYWxzZTsKKyAgICAgICAgaW50IHN0cmluZ19pbmRleCA9
IG5lZWRlZF9jaGFycyAtIDE7CisgICAgICAgIGJ1ZmZlcltzdHJpbmdfaW5kZXgtLV0gPSAnXDAn
OworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4cG9uZW50XzsgKytpKSB7CisgICAgICAg
ICAgICBmb3IgKGludCBqID0gMDsgaiA8IGtIZXhDaGFyc1BlckJpZ2l0OyArK2opIHsKKyAgICAg
ICAgICAgICAgICBidWZmZXJbc3RyaW5nX2luZGV4LS1dID0gJzAnOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdXNlZF9kaWdpdHNfIC0gMTsg
KytpKSB7CisgICAgICAgICAgICBDaHVuayBjdXJyZW50X2JpZ2l0ID0gYmlnaXRzX1tpXTsKKyAg
ICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwga0hleENoYXJzUGVyQmlnaXQ7ICsraikgewor
ICAgICAgICAgICAgICAgIGJ1ZmZlcltzdHJpbmdfaW5kZXgtLV0gPSBIZXhDaGFyT2ZWYWx1ZShj
dXJyZW50X2JpZ2l0ICYgMHhGKTsKKyAgICAgICAgICAgICAgICBjdXJyZW50X2JpZ2l0ID4+PSA0
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIEFuZCBmaW5hbGx5IHRoZSBs
YXN0IGJpZ2l0LgorICAgICAgICBDaHVuayBtb3N0X3NpZ25pZmljYW50X2JpZ2l0ID0gYmlnaXRz
X1t1c2VkX2RpZ2l0c18gLSAxXTsKKyAgICAgICAgd2hpbGUgKG1vc3Rfc2lnbmlmaWNhbnRfYmln
aXQgIT0gMCkgeworICAgICAgICAgICAgYnVmZmVyW3N0cmluZ19pbmRleC0tXSA9IEhleENoYXJP
ZlZhbHVlKG1vc3Rfc2lnbmlmaWNhbnRfYmlnaXQgJiAweEYpOworICAgICAgICAgICAgbW9zdF9z
aWduaWZpY2FudF9iaWdpdCA+Pj0gNDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgCisgICAgCisgICAgQmlnbnVtOjpDaHVuayBCaWdudW06OkJpZ2l0QXQoaW50
IGluZGV4KSBjb25zdCB7CisgICAgICAgIGlmIChpbmRleCA+PSBCaWdpdExlbmd0aCgpKSByZXR1
cm4gMDsKKyAgICAgICAgaWYgKGluZGV4IDwgZXhwb25lbnRfKSByZXR1cm4gMDsKKyAgICAgICAg
cmV0dXJuIGJpZ2l0c19baW5kZXggLSBleHBvbmVudF9dOworICAgIH0KKyAgICAKKyAgICAKKyAg
ICBpbnQgQmlnbnVtOjpDb21wYXJlKGNvbnN0IEJpZ251bSYgYSwgY29uc3QgQmlnbnVtJiBiKSB7
CisgICAgICAgIEFTU0VSVChhLklzQ2xhbXBlZCgpKTsKKyAgICAgICAgQVNTRVJUKGIuSXNDbGFt
cGVkKCkpOworICAgICAgICBpbnQgYmlnaXRfbGVuZ3RoX2EgPSBhLkJpZ2l0TGVuZ3RoKCk7Cisg
ICAgICAgIGludCBiaWdpdF9sZW5ndGhfYiA9IGIuQmlnaXRMZW5ndGgoKTsKKyAgICAgICAgaWYg
KGJpZ2l0X2xlbmd0aF9hIDwgYmlnaXRfbGVuZ3RoX2IpIHJldHVybiAtMTsKKyAgICAgICAgaWYg
KGJpZ2l0X2xlbmd0aF9hID4gYmlnaXRfbGVuZ3RoX2IpIHJldHVybiArMTsKKyAgICAgICAgZm9y
IChpbnQgaSA9IGJpZ2l0X2xlbmd0aF9hIC0gMTsgaSA+PSBNaW4oYS5leHBvbmVudF8sIGIuZXhw
b25lbnRfKTsgLS1pKSB7CisgICAgICAgICAgICBDaHVuayBiaWdpdF9hID0gYS5CaWdpdEF0KGkp
OworICAgICAgICAgICAgQ2h1bmsgYmlnaXRfYiA9IGIuQmlnaXRBdChpKTsKKyAgICAgICAgICAg
IGlmIChiaWdpdF9hIDwgYmlnaXRfYikgcmV0dXJuIC0xOworICAgICAgICAgICAgaWYgKGJpZ2l0
X2EgPiBiaWdpdF9iKSByZXR1cm4gKzE7CisgICAgICAgICAgICAvLyBPdGhlcndpc2UgdGhleSBh
cmUgZXF1YWwgdXAgdG8gdGhpcyBkaWdpdC4gVHJ5IHRoZSBuZXh0IGRpZ2l0LgorICAgICAgICB9
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICAKKyAgICBpbnQgQmlnbnVtOjpQ
bHVzQ29tcGFyZShjb25zdCBCaWdudW0mIGEsIGNvbnN0IEJpZ251bSYgYiwgY29uc3QgQmlnbnVt
JiBjKSB7CisgICAgICAgIEFTU0VSVChhLklzQ2xhbXBlZCgpKTsKKyAgICAgICAgQVNTRVJUKGIu
SXNDbGFtcGVkKCkpOworICAgICAgICBBU1NFUlQoYy5Jc0NsYW1wZWQoKSk7CisgICAgICAgIGlm
IChhLkJpZ2l0TGVuZ3RoKCkgPCBiLkJpZ2l0TGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIHJldHVy
biBQbHVzQ29tcGFyZShiLCBhLCBjKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYS5CaWdpdExl
bmd0aCgpICsgMSA8IGMuQmlnaXRMZW5ndGgoKSkgcmV0dXJuIC0xOworICAgICAgICBpZiAoYS5C
aWdpdExlbmd0aCgpID4gYy5CaWdpdExlbmd0aCgpKSByZXR1cm4gKzE7CisgICAgICAgIC8vIFRo
ZSBleHBvbmVudCBlbmNvZGVzIDAtYmlnaXRzLiBTbyBpZiB0aGVyZSBhcmUgbW9yZSAwLWRpZ2l0
cyBpbiAnYScgdGhhbgorICAgICAgICAvLyAnYicgaGFzIGRpZ2l0cywgdGhlbiB0aGUgYmlnaXQt
bGVuZ3RoIG9mICdhJysnYicgbXVzdCBiZSBlcXVhbCB0byB0aGUgb25lCisgICAgICAgIC8vIG9m
ICdhJy4KKyAgICAgICAgaWYgKGEuZXhwb25lbnRfID49IGIuQmlnaXRMZW5ndGgoKSAmJiBhLkJp
Z2l0TGVuZ3RoKCkgPCBjLkJpZ2l0TGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQ2h1bmsgYm9ycm93ID0gMDsKKyAgICAgICAg
Ly8gU3RhcnRpbmcgYXQgbWluX2V4cG9uZW50IGFsbCBkaWdpdHMgYXJlID09IDAuIFNvIG5vIG5l
ZWQgdG8gY29tcGFyZSB0aGVtLgorICAgICAgICBpbnQgbWluX2V4cG9uZW50ID0gTWluKE1pbihh
LmV4cG9uZW50XywgYi5leHBvbmVudF8pLCBjLmV4cG9uZW50Xyk7CisgICAgICAgIGZvciAoaW50
IGkgPSBjLkJpZ2l0TGVuZ3RoKCkgLSAxOyBpID49IG1pbl9leHBvbmVudDsgLS1pKSB7CisgICAg
ICAgICAgICBDaHVuayBjaHVua19hID0gYS5CaWdpdEF0KGkpOworICAgICAgICAgICAgQ2h1bmsg
Y2h1bmtfYiA9IGIuQmlnaXRBdChpKTsKKyAgICAgICAgICAgIENodW5rIGNodW5rX2MgPSBjLkJp
Z2l0QXQoaSk7CisgICAgICAgICAgICBDaHVuayBzdW0gPSBjaHVua19hICsgY2h1bmtfYjsKKyAg
ICAgICAgICAgIGlmIChzdW0gPiBjaHVua19jICsgYm9ycm93KSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuICsxOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBib3Jyb3cg
PSBjaHVua19jICsgYm9ycm93IC0gc3VtOworICAgICAgICAgICAgICAgIGlmIChib3Jyb3cgPiAx
KSByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgYm9ycm93IDw8PSBrQmlnaXRTaXplOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChib3Jyb3cgPT0gMCkgcmV0dXJuIDA7
CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06
OkNsYW1wKCkgeworICAgICAgICB3aGlsZSAodXNlZF9kaWdpdHNfID4gMCAmJiBiaWdpdHNfW3Vz
ZWRfZGlnaXRzXyAtIDFdID09IDApIHsKKyAgICAgICAgICAgIHVzZWRfZGlnaXRzXy0tOworICAg
ICAgICB9CisgICAgICAgIGlmICh1c2VkX2RpZ2l0c18gPT0gMCkgeworICAgICAgICAgICAgLy8g
WmVyby4KKyAgICAgICAgICAgIGV4cG9uZW50XyA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgCisgICAgYm9vbCBCaWdudW06OklzQ2xhbXBlZCgpIGNvbnN0IHsKKyAgICAgICAgcmV0
dXJuIHVzZWRfZGlnaXRzXyA9PSAwIHx8IGJpZ2l0c19bdXNlZF9kaWdpdHNfIC0gMV0gIT0gMDsK
KyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06Olplcm8oKSB7CisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgdXNlZF9kaWdpdHNfOyArK2kpIHsKKyAgICAgICAgICAgIGJpZ2l0
c19baV0gPSAwOworICAgICAgICB9CisgICAgICAgIHVzZWRfZGlnaXRzXyA9IDA7CisgICAgICAg
IGV4cG9uZW50XyA9IDA7CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpBbGln
bihjb25zdCBCaWdudW0mIG90aGVyKSB7CisgICAgICAgIGlmIChleHBvbmVudF8gPiBvdGhlci5l
eHBvbmVudF8pIHsKKyAgICAgICAgICAgIC8vIElmICJYIiByZXByZXNlbnRzIGEgImhpZGRlbiIg
ZGlnaXQgKGJ5IHRoZSBleHBvbmVudCkgdGhlbiB3ZSBhcmUgaW4gdGhlCisgICAgICAgICAgICAv
LyBmb2xsb3dpbmcgY2FzZSAoYSA9PSB0aGlzLCBiID09IG90aGVyKToKKyAgICAgICAgICAgIC8v
IGE6ICBhYWFhYWFYWFhYICAgb3IgYTogICBhYWFhYVhYWAorICAgICAgICAgICAgLy8gYjogICAg
IGJiYmJiYlggICAgICBiOiBiYmJiYmJiYlhYCisgICAgICAgICAgICAvLyBXZSByZXBsYWNlIHNv
bWUgb2YgdGhlIGhpZGRlbiBkaWdpdHMgKFgpIG9mIGEgd2l0aCAwIGRpZ2l0cy4KKyAgICAgICAg
ICAgIC8vIGE6ICBhYWFhYWEwMDBYICAgb3IgYTogICBhYWFhYTBYWAorICAgICAgICAgICAgaW50
IHplcm9fZGlnaXRzID0gZXhwb25lbnRfIC0gb3RoZXIuZXhwb25lbnRfOworICAgICAgICAgICAg
RW5zdXJlQ2FwYWNpdHkodXNlZF9kaWdpdHNfICsgemVyb19kaWdpdHMpOworICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IHVzZWRfZGlnaXRzXyAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgICAg
ICAgICAgYmlnaXRzX1tpICsgemVyb19kaWdpdHNdID0gYmlnaXRzX1tpXTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgemVyb19kaWdpdHM7ICsraSkgewor
ICAgICAgICAgICAgICAgIGJpZ2l0c19baV0gPSAwOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdXNlZF9kaWdpdHNfICs9IHplcm9fZGlnaXRzOworICAgICAgICAgICAgZXhwb25lbnRfIC09
IHplcm9fZGlnaXRzOworICAgICAgICAgICAgQVNTRVJUKHVzZWRfZGlnaXRzXyA+PSAwKTsKKyAg
ICAgICAgICAgIEFTU0VSVChleHBvbmVudF8gPj0gMCk7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgCisgICAgdm9pZCBCaWdudW06OkJpZ2l0c1NoaWZ0TGVmdChpbnQgc2hpZnRfYW1vdW50
KSB7CisgICAgICAgIEFTU0VSVChzaGlmdF9hbW91bnQgPCBrQmlnaXRTaXplKTsKKyAgICAgICAg
QVNTRVJUKHNoaWZ0X2Ftb3VudCA+PSAwKTsKKyAgICAgICAgQ2h1bmsgY2FycnkgPSAwOworICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IHVzZWRfZGlnaXRzXzsgKytpKSB7CisgICAgICAgICAg
ICBDaHVuayBuZXdfY2FycnkgPSBiaWdpdHNfW2ldID4+IChrQmlnaXRTaXplIC0gc2hpZnRfYW1v
dW50KTsKKyAgICAgICAgICAgIGJpZ2l0c19baV0gPSAoKGJpZ2l0c19baV0gPDwgc2hpZnRfYW1v
dW50KSArIGNhcnJ5KSAmIGtCaWdpdE1hc2s7CisgICAgICAgICAgICBjYXJyeSA9IG5ld19jYXJy
eTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2FycnkgIT0gMCkgeworICAgICAgICAgICAgYmln
aXRzX1t1c2VkX2RpZ2l0c19dID0gY2Fycnk7CisgICAgICAgICAgICB1c2VkX2RpZ2l0c18rKzsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICB2b2lkIEJpZ251bTo6U3VidHJhY3RU
aW1lcyhjb25zdCBCaWdudW0mIG90aGVyLCBpbnQgZmFjdG9yKSB7CisgICAgICAgIEFTU0VSVChl
eHBvbmVudF8gPD0gb3RoZXIuZXhwb25lbnRfKTsKKyAgICAgICAgaWYgKGZhY3RvciA8IDMpIHsK
KyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmFjdG9yOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBTdWJ0cmFjdEJpZ251bShvdGhlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgQ2h1bmsgYm9ycm93ID0gMDsKKyAgICAgICAg
aW50IGV4cG9uZW50X2RpZmYgPSBvdGhlci5leHBvbmVudF8gLSBleHBvbmVudF87CisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgb3RoZXIudXNlZF9kaWdpdHNfOyArK2kpIHsKKyAgICAgICAg
ICAgIERvdWJsZUNodW5rIHByb2R1Y3QgPSBzdGF0aWNfY2FzdDxEb3VibGVDaHVuaz4oZmFjdG9y
KSAqIG90aGVyLmJpZ2l0c19baV07CisgICAgICAgICAgICBEb3VibGVDaHVuayByZW1vdmUgPSBi
b3Jyb3cgKyBwcm9kdWN0OworICAgICAgICAgICAgQ2h1bmsgZGlmZmVyZW5jZSA9IGJpZ2l0c19b
aSArIGV4cG9uZW50X2RpZmZdIC0gKHJlbW92ZSAmIGtCaWdpdE1hc2spOworICAgICAgICAgICAg
YmlnaXRzX1tpICsgZXhwb25lbnRfZGlmZl0gPSBkaWZmZXJlbmNlICYga0JpZ2l0TWFzazsKKyAg
ICAgICAgICAgIGJvcnJvdyA9IHN0YXRpY19jYXN0PENodW5rPigoZGlmZmVyZW5jZSA+PiAoa0No
dW5rU2l6ZSAtIDEpKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHJlbW92ZSA+PiBrQmlnaXRTaXplKSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgaSA9
IG90aGVyLnVzZWRfZGlnaXRzXyArIGV4cG9uZW50X2RpZmY7IGkgPCB1c2VkX2RpZ2l0c187ICsr
aSkgeworICAgICAgICAgICAgaWYgKGJvcnJvdyA9PSAwKSByZXR1cm47CisgICAgICAgICAgICBD
aHVuayBkaWZmZXJlbmNlID0gYmlnaXRzX1tpXSAtIGJvcnJvdzsKKyAgICAgICAgICAgIGJpZ2l0
c19baV0gPSBkaWZmZXJlbmNlICYga0JpZ2l0TWFzazsKKyAgICAgICAgICAgIGJvcnJvdyA9IGRp
ZmZlcmVuY2UgPj4gKGtDaHVua1NpemUgLSAxKTsKKyAgICAgICAgICAgICsraTsKKyAgICAgICAg
fQorICAgICAgICBDbGFtcCgpOworICAgIH0KKyAgICAKKyAgICAKK30gIC8vIG5hbWVzcGFjZSBk
b3VibGVfY29udmVyc2lvbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9k
dG9hL2JpZ251bS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjg1NjQyMTBiMmY4NjQ4NWE2ZDI2YjlhNjliN2UxNWNlNTdmYWQwMzAKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvYmlnbnVtLmgKQEAg
LTAsMCArMSwxNDEgQEAKKy8vIENvcHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8v
IG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAg
ICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
Ly8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
Ly8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmbmRlZiBET1VC
TEVfQ09OVkVSU0lPTl9CSUdOVU1fSF8KKyNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05fQklHTlVN
X0hfCisKKyNpbmNsdWRlICJ1dGlscy5oIgorCituYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24g
eworICAgIAorICAgIGNsYXNzIEJpZ251bSB7CisgICAgcHVibGljOgorICAgICAgICAvLyAzNTg0
ID0gMTI4ICogMjguIFdlIGNhbiByZXByZXNlbnQgMl4zNTg0ID4gMTBeMTAwMCBhY2N1cmF0ZWx5
LgorICAgICAgICAvLyBUaGlzIGJpZ251bSBjYW4gZW5jb2RlIG11Y2ggYmlnZ2VyIG51bWJlcnMs
IHNpbmNlIGl0IGNvbnRhaW5zIGFuCisgICAgICAgIC8vIGV4cG9uZW50LgorICAgICAgICBzdGF0
aWMgY29uc3QgaW50IGtNYXhTaWduaWZpY2FudEJpdHMgPSAzNTg0OworICAgICAgICAKKyAgICAg
ICAgQmlnbnVtKCk7CisgICAgICAgIHZvaWQgQXNzaWduVUludDE2KHVpbnQxNl90IHZhbHVlKTsK
KyAgICAgICAgdm9pZCBBc3NpZ25VSW50NjQodWludDY0X3QgdmFsdWUpOworICAgICAgICB2b2lk
IEFzc2lnbkJpZ251bShjb25zdCBCaWdudW0mIG90aGVyKTsKKyAgICAgICAgCisgICAgICAgIHZv
aWQgQXNzaWduRGVjaW1hbFN0cmluZyhWZWN0b3I8Y29uc3QgY2hhcj4gdmFsdWUpOworICAgICAg
ICB2b2lkIEFzc2lnbkhleFN0cmluZyhWZWN0b3I8Y29uc3QgY2hhcj4gdmFsdWUpOworICAgICAg
ICAKKyAgICAgICAgdm9pZCBBc3NpZ25Qb3dlclVJbnQxNih1aW50MTZfdCBiYXNlLCBpbnQgZXhw
b25lbnQpOworICAgICAgICAKKyAgICAgICAgdm9pZCBBZGRVSW50MTYodWludDE2X3Qgb3BlcmFu
ZCk7CisgICAgICAgIHZvaWQgQWRkVUludDY0KHVpbnQ2NF90IG9wZXJhbmQpOworICAgICAgICB2
b2lkIEFkZEJpZ251bShjb25zdCBCaWdudW0mIG90aGVyKTsKKyAgICAgICAgLy8gUHJlY29uZGl0
aW9uOiB0aGlzID49IG90aGVyLgorICAgICAgICB2b2lkIFN1YnRyYWN0QmlnbnVtKGNvbnN0IEJp
Z251bSYgb3RoZXIpOworICAgICAgICAKKyAgICAgICAgdm9pZCBTcXVhcmUoKTsKKyAgICAgICAg
dm9pZCBTaGlmdExlZnQoaW50IHNoaWZ0X2Ftb3VudCk7CisgICAgICAgIHZvaWQgTXVsdGlwbHlC
eVVJbnQzMih1aW50MzJfdCBmYWN0b3IpOworICAgICAgICB2b2lkIE11bHRpcGx5QnlVSW50NjQo
dWludDY0X3QgZmFjdG9yKTsKKyAgICAgICAgdm9pZCBNdWx0aXBseUJ5UG93ZXJPZlRlbihpbnQg
ZXhwb25lbnQpOworICAgICAgICB2b2lkIFRpbWVzMTAoKSB7IHJldHVybiBNdWx0aXBseUJ5VUlu
dDMyKDEwKTsgfQorICAgICAgICAvLyBQc2V1ZG9jb2RlOgorICAgICAgICAvLyAgaW50IHJlc3Vs
dCA9IHRoaXMgLyBvdGhlcjsKKyAgICAgICAgLy8gIHRoaXMgPSB0aGlzICUgb3RoZXI7CisgICAg
ICAgIC8vIEluIHRoZSB3b3JzdCBjYXNlIHRoaXMgZnVuY3Rpb24gaXMgaW4gTyh0aGlzL290aGVy
KS4KKyAgICAgICAgdWludDE2X3QgRGl2aWRlTW9kdWxvSW50QmlnbnVtKGNvbnN0IEJpZ251bSYg
b3RoZXIpOworICAgICAgICAKKyAgICAgICAgYm9vbCBUb0hleFN0cmluZyhjaGFyKiBidWZmZXIs
IGludCBidWZmZXJfc2l6ZSkgY29uc3Q7CisgICAgICAgIAorICAgICAgICBzdGF0aWMgaW50IENv
bXBhcmUoY29uc3QgQmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIpOworICAgICAgICBzdGF0aWMg
Ym9vbCBFcXVhbChjb25zdCBCaWdudW0mIGEsIGNvbnN0IEJpZ251bSYgYikgeworICAgICAgICAg
ICAgcmV0dXJuIENvbXBhcmUoYSwgYikgPT0gMDsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMg
Ym9vbCBMZXNzRXF1YWwoY29uc3QgQmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIpIHsKKyAgICAg
ICAgICAgIHJldHVybiBDb21wYXJlKGEsIGIpIDw9IDA7CisgICAgICAgIH0KKyAgICAgICAgc3Rh
dGljIGJvb2wgTGVzcyhjb25zdCBCaWdudW0mIGEsIGNvbnN0IEJpZ251bSYgYikgeworICAgICAg
ICAgICAgcmV0dXJuIENvbXBhcmUoYSwgYikgPCAwOworICAgICAgICB9CisgICAgICAgIC8vIFJl
dHVybnMgQ29tcGFyZShhICsgYiwgYyk7CisgICAgICAgIHN0YXRpYyBpbnQgUGx1c0NvbXBhcmUo
Y29uc3QgQmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIsIGNvbnN0IEJpZ251bSYgYyk7CisgICAg
ICAgIC8vIFJldHVybnMgYSArIGIgPT0gYworICAgICAgICBzdGF0aWMgYm9vbCBQbHVzRXF1YWwo
Y29uc3QgQmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIsIGNvbnN0IEJpZ251bSYgYykgeworICAg
ICAgICAgICAgcmV0dXJuIFBsdXNDb21wYXJlKGEsIGIsIGMpID09IDA7CisgICAgICAgIH0KKyAg
ICAgICAgLy8gUmV0dXJucyBhICsgYiA8PSBjCisgICAgICAgIHN0YXRpYyBib29sIFBsdXNMZXNz
RXF1YWwoY29uc3QgQmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIsIGNvbnN0IEJpZ251bSYgYykg
eworICAgICAgICAgICAgcmV0dXJuIFBsdXNDb21wYXJlKGEsIGIsIGMpIDw9IDA7CisgICAgICAg
IH0KKyAgICAgICAgLy8gUmV0dXJucyBhICsgYiA8IGMKKyAgICAgICAgc3RhdGljIGJvb2wgUGx1
c0xlc3MoY29uc3QgQmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIsIGNvbnN0IEJpZ251bSYgYykg
eworICAgICAgICAgICAgcmV0dXJuIFBsdXNDb21wYXJlKGEsIGIsIGMpIDwgMDsKKyAgICAgICAg
fQorICAgIHByaXZhdGU6CisgICAgICAgIHR5cGVkZWYgdWludDMyX3QgQ2h1bms7CisgICAgICAg
IHR5cGVkZWYgdWludDY0X3QgRG91YmxlQ2h1bms7CisgICAgICAgIAorICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IGtDaHVua1NpemUgPSBzaXplb2YoQ2h1bmspICogODsKKyAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBrRG91YmxlQ2h1bmtTaXplID0gc2l6ZW9mKERvdWJsZUNodW5rKSAqIDg7Cisg
ICAgICAgIC8vIFdpdGggYmlnaXQgc2l6ZSBvZiAyOCB3ZSBsb29zZSBzb21lIGJpdHMsIGJ1dCBh
IGRvdWJsZSBzdGlsbCBmaXRzIGVhc2lseQorICAgICAgICAvLyBpbnRvIHR3byBjaHVua3MsIGFu
ZCBtb3JlIGltcG9ydGFudGx5IHdlIGNhbiB1c2UgdGhlIENvbWJhIG11bHRpcGxpY2F0aW9uLgor
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtCaWdpdFNpemUgPSAyODsKKyAgICAgICAgc3RhdGlj
IGNvbnN0IENodW5rIGtCaWdpdE1hc2sgPSAoMSA8PCBrQmlnaXRTaXplKSAtIDE7CisgICAgICAg
IC8vIEV2ZXJ5IGluc3RhbmNlIGFsbG9jYXRlcyBrQmlnaXRMZW5ndGggY2h1bmtzIG9uIHRoZSBz
dGFjay4gQmlnbnVtcyBjYW5ub3QKKyAgICAgICAgLy8gZ3Jvdy4gVGhlcmUgYXJlIG5vIGNoZWNr
cyBpZiB0aGUgc3RhY2stYWxsb2NhdGVkIHNwYWNlIGlzIHN1ZmZpY2llbnQuCisgICAgICAgIHN0
YXRpYyBjb25zdCBpbnQga0JpZ2l0Q2FwYWNpdHkgPSBrTWF4U2lnbmlmaWNhbnRCaXRzIC8ga0Jp
Z2l0U2l6ZTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgRW5zdXJlQ2FwYWNpdHkoaW50IHNpemUp
IHsKKyAgICAgICAgICAgIGlmIChzaXplID4ga0JpZ2l0Q2FwYWNpdHkpIHsKKyAgICAgICAgICAg
ICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHZv
aWQgQWxpZ24oY29uc3QgQmlnbnVtJiBvdGhlcik7CisgICAgICAgIHZvaWQgQ2xhbXAoKTsKKyAg
ICAgICAgYm9vbCBJc0NsYW1wZWQoKSBjb25zdDsKKyAgICAgICAgdm9pZCBaZXJvKCk7CisgICAg
ICAgIC8vIFJlcXVpcmVzIHRoaXMgdG8gaGF2ZSBlbm91Z2ggY2FwYWNpdHkgKG5vIHRlc3RzIGRv
bmUpLgorICAgICAgICAvLyBVcGRhdGVzIHVzZWRfZGlnaXRzXyBpZiBuZWNlc3NhcnkuCisgICAg
ICAgIC8vIHNoaWZ0X2Ftb3VudCBtdXN0IGJlIDwga0JpZ2l0U2l6ZS4KKyAgICAgICAgdm9pZCBC
aWdpdHNTaGlmdExlZnQoaW50IHNoaWZ0X2Ftb3VudCk7CisgICAgICAgIC8vIEJpZ2l0TGVuZ3Ro
IGluY2x1ZGVzIHRoZSAiaGlkZGVuIiBkaWdpdHMgZW5jb2RlZCBpbiB0aGUgZXhwb25lbnQuCisg
ICAgICAgIGludCBCaWdpdExlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIHVzZWRfZGlnaXRzXyArIGV4
cG9uZW50XzsgfQorICAgICAgICBDaHVuayBCaWdpdEF0KGludCBpbmRleCkgY29uc3Q7CisgICAg
ICAgIHZvaWQgU3VidHJhY3RUaW1lcyhjb25zdCBCaWdudW0mIG90aGVyLCBpbnQgZmFjdG9yKTsK
KyAgICAgICAgCisgICAgICAgIENodW5rIGJpZ2l0c19idWZmZXJfW2tCaWdpdENhcGFjaXR5XTsK
KyAgICAgICAgLy8gQSB2ZWN0b3IgYmFja2VkIGJ5IGJpZ2l0c19idWZmZXJfLiBUaGlzIHdheSBh
Y2Nlc3NlcyB0byB0aGUgYXJyYXkgYXJlCisgICAgICAgIC8vIGNoZWNrZWQgZm9yIG91dC1vZi1i
b3VuZHMgZXJyb3JzLgorICAgICAgICBWZWN0b3I8Q2h1bms+IGJpZ2l0c187CisgICAgICAgIGlu
dCB1c2VkX2RpZ2l0c187CisgICAgICAgIC8vIFRoZSBCaWdudW0ncyB2YWx1ZSBlcXVhbHMgdmFs
dWUoYmlnaXRzXykgKiAyXihleHBvbmVudF8gKiBrQmlnaXRTaXplKS4KKyAgICAgICAgaW50IGV4
cG9uZW50XzsKKyAgICAgICAgCisgICAgICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihCaWdu
dW0pOworICAgIH07CisgICAgCit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KKwor
I2VuZGlmICAvLyBET1VCTEVfQ09OVkVSU0lPTl9CSUdOVU1fSF8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmNjIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9kdG9hL2NhY2hlZC1wb3dlcnMuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2YzY2I4Y2M4
ZjQzNGUxOGJlM2I3MDU2NjFjY2Q1Y2Y1NDliNjIzZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmNjCkBAIC0wLDAgKzEsMTg1
IEBACisvLyBDb3B5cmlnaHQgMjAwNi0yMDA4IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoK
Ky8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcK
Ky8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
Ly8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
Ly8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2luY2x1ZGUgPHN0ZGFyZy5o
PgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgIlVu
dXNlZFBhcmFtLmgiCisjaW5jbHVkZSAidXRpbHMuaCIKKyNpbmNsdWRlICJjYWNoZWQtcG93ZXJz
LmgiCisKK25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgc3RydWN0IENh
Y2hlZFBvd2VyIHsKKyAgICAgICAgdWludDY0X3Qgc2lnbmlmaWNhbmQ7CisgICAgICAgIGludDE2
X3QgYmluYXJ5X2V4cG9uZW50OworICAgICAgICBpbnQxNl90IGRlY2ltYWxfZXhwb25lbnQ7Cisg
ICAgfTsKKyAgICAKKyAgICBzdGF0aWMgaW50IGtDYWNoZWRQb3dlcnNMZW5ndGggPSAxOworICAg
IHN0YXRpYyBpbnQga0NhY2hlZFBvd2Vyc09mZnNldCA9IDE7CisgICAgc3RhdGljIGNvbnN0IGRv
dWJsZSBrRF8xX0xPRzJfMTAgPSAwLjMwMTAyOTk5NTY2Mzk4MTE0OyAgLy8gIDEgLyBsZygxMCkK
KyAgICBzdGF0aWMgQ2FjaGVkUG93ZXIqIGtDYWNoZWRQb3dlcnMgPSAwOworICAgIAorICAgIGlu
dCBQb3dlcnNPZlRlbkNhY2hlOjprRGVjaW1hbEV4cG9uZW50RGlzdGFuY2UgPSAxOworICAgIGlu
dCBQb3dlcnNPZlRlbkNhY2hlOjprTWluRGVjaW1hbEV4cG9uZW50ID0gMTsKKyAgICBpbnQgUG93
ZXJzT2ZUZW5DYWNoZTo6a01heERlY2ltYWxFeHBvbmVudCA9IDE7CisgICAgCisgICAgdm9pZCBp
bml0aWFsaXplKCkgeworICAgICAgICBzdGF0aWMgQ2FjaGVkUG93ZXIgY2FjaGVkUG93ZXJzW10g
PSB7CisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhmYThmZDVhMCwgMDgxYzAyODgpLCAt
MTIyMCwgLTM0OH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhiYWFlZTE3ZiwgYTIz
ZWJmNzYpLCAtMTE5MywgLTM0MH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg4YjE2
ZmIyMCwgMzA1NWFjNzYpLCAtMTE2NiwgLTMzMn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJU
X0MoMHhjZjQyODk0YSwgNWRjZTM1ZWEpLCAtMTE0MCwgLTMyNH0sCisgICAgICAgICAgICB7VUlO
VDY0XzJQQVJUX0MoMHg5YTZiYjBhYSwgNTU2NTNiMmQpLCAtMTExMywgLTMxNn0sCisgICAgICAg
ICAgICB7VUlOVDY0XzJQQVJUX0MoMHhlNjFhY2YwMywgM2QxYTQ1ZGYpLCAtMTA4NywgLTMwOH0s
CisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhhYjcwZmUxNywgYzc5YWM2Y2EpLCAtMTA2
MCwgLTMwMH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhmZjc3YjFmYywgYmViY2Rj
NGYpLCAtMTAzNCwgLTI5Mn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhiZTU2OTFl
ZiwgNDE2YmQ2MGMpLCAtMTAwNywgLTI4NH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0Mo
MHg4ZGQwMWZhZCwgOTA3ZmZjM2MpLCAtOTgwLCAtMjc2fSwKKyAgICAgICAgICAgIHtVSU5UNjRf
MlBBUlRfQygweGQzNTE1YzI4LCAzMTU1OWE4MyksIC05NTQsIC0yNjh9LAorICAgICAgICAgICAg
e1VJTlQ2NF8yUEFSVF9DKDB4OWQ3MWFjOGYsIGFkYTZjOWI1KSwgLTkyNywgLTI2MH0sCisgICAg
ICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhlYTljMjI3NywgMjNlZThiY2IpLCAtOTAxLCAtMjUy
fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGFlY2M0OTkxLCA0MDc4NTM2ZCksIC04
NzQsIC0yNDR9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ODIzYzEyNzksIDVkYjZj
ZTU3KSwgLTg0NywgLTIzNn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhjMjEwOTQz
NiwgNGRmYjU2MzcpLCAtODIxLCAtMjI4fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygw
eDkwOTZlYTZmLCAzODQ4OTg0ZiksIC03OTQsIC0yMjB9LAorICAgICAgICAgICAge1VJTlQ2NF8y
UEFSVF9DKDB4ZDc3NDg1Y2IsIDI1ODIzYWM3KSwgLTc2OCwgLTIxMn0sCisgICAgICAgICAgICB7
VUlOVDY0XzJQQVJUX0MoMHhhMDg2Y2ZjZCwgOTdiZjk3ZjQpLCAtNzQxLCAtMjA0fSwKKyAgICAg
ICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGVmMzQwYTk4LCAxNzJhYWNlNSksIC03MTUsIC0xOTZ9
LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YjIzODY3ZmIsIDJhMzViMjhlKSwgLTY4
OCwgLTE4OH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg4NGM4ZDRkZiwgZDJjNjNm
M2IpLCAtNjYxLCAtMTgwfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGM1ZGQ0NDI3
LCAxYWQzY2RiYSksIC02MzUsIC0xNzJ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4
OTM2YjlmY2UsIGJiMjVjOTk2KSwgLTYwOCwgLTE2NH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQ
QVJUX0MoMHhkYmFjNmMyNCwgN2Q2MmE1ODQpLCAtNTgyLCAtMTU2fSwKKyAgICAgICAgICAgIHtV
SU5UNjRfMlBBUlRfQygweGEzYWI2NjU4LCAwZDVmZGFmNiksIC01NTUsIC0xNDh9LAorICAgICAg
ICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZjNlMmY4OTMsIGRlYzNmMTI2KSwgLTUyOSwgLTE0MH0s
CisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhiNWI1YWRhOCwgYWFmZjgwYjgpLCAtNTAy
LCAtMTMyfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDg3NjI1ZjA1LCA2YzdjNGE4
YiksIC00NzUsIC0xMjR9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YzliY2ZmNjAs
IDM0YzEzMDUzKSwgLTQ0OSwgLTExNn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg5
NjRlODU4YywgOTFiYTI2NTUpLCAtNDIyLCAtMTA4fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBB
UlRfQygweGRmZjk3NzI0LCA3MDI5N2ViZCksIC0zOTYsIC0xMDB9LAorICAgICAgICAgICAge1VJ
TlQ2NF8yUEFSVF9DKDB4YTZkZmJkOWYsIGI4ZTViODhmKSwgLTM2OSwgLTkyfSwKKyAgICAgICAg
ICAgIHtVSU5UNjRfMlBBUlRfQygweGY4YTk1ZmNmLCA4ODc0N2Q5NCksIC0zNDMsIC04NH0sCisg
ICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhiOTQ0NzA5MywgOGZhODliY2YpLCAtMzE2LCAt
NzZ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4OGEwOGYwZjgsIGJmMGYxNTZiKSwg
LTI4OSwgLTY4fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGNkYjAyNTU1LCA2NTMx
MzFiNiksIC0yNjMsIC02MH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg5OTNmZTJj
NiwgZDA3YjdmYWMpLCAtMjM2LCAtNTJ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4
ZTQ1YzEwYzQsIDJhMmIzYjA2KSwgLTIxMCwgLTQ0fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBB
UlRfQygweGFhMjQyNDk5LCA2OTczOTJkMyksIC0xODMsIC0zNn0sCisgICAgICAgICAgICB7VUlO
VDY0XzJQQVJUX0MoMHhmZDg3YjVmMiwgODMwMGNhMGUpLCAtMTU3LCAtMjh9LAorICAgICAgICAg
ICAge1VJTlQ2NF8yUEFSVF9DKDB4YmNlNTA4NjQsIDkyMTExYWViKSwgLTEzMCwgLTIwfSwKKyAg
ICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDhjYmNjYzA5LCA2ZjUwODhjYyksIC0xMDMsIC0x
Mn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhkMWI3MTc1OCwgZTIxOTY1MmMpLCAt
NzcsIC00fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDljNDAwMDAwLCAwMDAwMDAw
MCksIC01MCwgNH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhlOGQ0YTUxMCwgMDAw
MDAwMDApLCAtMjQsIDEyfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGFkNzhlYmM1
LCBhYzYyMDAwMCksIDMsIDIwfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDgxM2Yz
OTc4LCBmODk0MDk4NCksIDMwLCAyOH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhj
MDk3Y2U3YiwgYzkwNzE1YjMpLCA1NiwgMzZ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9D
KDB4OGY3ZTMyY2UsIDdiZWE1YzcwKSwgODMsIDQ0fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBB
UlRfQygweGQ1ZDIzOGE0LCBhYmU5ODA2OCksIDEwOSwgNTJ9LAorICAgICAgICAgICAge1VJTlQ2
NF8yUEFSVF9DKDB4OWY0ZjI3MjYsIDE3OWEyMjQ1KSwgMTM2LCA2MH0sCisgICAgICAgICAgICB7
VUlOVDY0XzJQQVJUX0MoMHhlZDYzYTIzMSwgZDRjNGZiMjcpLCAxNjIsIDY4fSwKKyAgICAgICAg
ICAgIHtVSU5UNjRfMlBBUlRfQygweGIwZGU2NTM4LCA4Y2M4YWRhOCksIDE4OSwgNzZ9LAorICAg
ICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ODNjNzA4OGUsIDFhYWI2NWRiKSwgMjE2LCA4NH0s
CisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhjNDVkMWRmOSwgNDI3MTFkOWEpLCAyNDIs
IDkyfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDkyNGQ2OTJjLCBhNjFiZTc1OCks
IDI2OSwgMTAwfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGRhMDFlZTY0LCAxYTcw
OGRlYSksIDI5NSwgMTA4fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGEyNmRhMzk5
LCA5YWVmNzc0YSksIDMyMiwgMTE2fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGYy
MDk3ODdiLCBiNDdkNmI4NSksIDM0OCwgMTI0fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRf
QygweGI0NTRlNGExLCA3OWRkMTg3NyksIDM3NSwgMTMyfSwKKyAgICAgICAgICAgIHtVSU5UNjRf
MlBBUlRfQygweDg2NWI4NjkyLCA1YjliYzVjMiksIDQwMiwgMTQwfSwKKyAgICAgICAgICAgIHtV
SU5UNjRfMlBBUlRfQygweGM4MzU1M2M1LCBjODk2NWQzZCksIDQyOCwgMTQ4fSwKKyAgICAgICAg
ICAgIHtVSU5UNjRfMlBBUlRfQygweDk1MmFiNDVjLCBmYTk3YTBiMyksIDQ1NSwgMTU2fSwKKyAg
ICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGRlNDY5ZmJkLCA5OWEwNWZlMyksIDQ4MSwgMTY0
fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGE1OWJjMjM0LCBkYjM5OGMyNSksIDUw
OCwgMTcyfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGY2YzY5YTcyLCBhMzk4OWY1
YyksIDUzNCwgMTgwfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGI3ZGNiZjUzLCA1
NGU5YmVjZSksIDU2MSwgMTg4fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDg4ZmNm
MzE3LCBmMjIyNDFlMiksIDU4OCwgMTk2fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygw
eGNjMjBjZTliLCBkMzVjNzhhNSksIDYxNCwgMjA0fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBB
UlRfQygweDk4MTY1YWYzLCA3YjIxNTNkZiksIDY0MSwgMjEyfSwKKyAgICAgICAgICAgIHtVSU5U
NjRfMlBBUlRfQygweGUyYTBiNWRjLCA5NzFmMzAzYSksIDY2NywgMjIwfSwKKyAgICAgICAgICAg
IHtVSU5UNjRfMlBBUlRfQygweGE4ZDlkMTUzLCA1Y2UzYjM5NiksIDY5NCwgMjI4fSwKKyAgICAg
ICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGZiOWI3Y2Q5LCBhNGE3NDQzYyksIDcyMCwgMjM2fSwK
KyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGJiNzY0YzRjLCBhN2E0NDQxMCksIDc0Nywg
MjQ0fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDhiYWI4ZWVmLCBiNjQwOWMxYSks
IDc3NCwgMjUyfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGQwMWZlZjEwLCBhNjU3
ODQyYyksIDgwMCwgMjYwfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDliMTBhNGU1
LCBlOTkxMzEyOSksIDgyNywgMjY4fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGU3
MTA5YmZiLCBhMTljMGM5ZCksIDg1MywgMjc2fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRf
QygweGFjMjgyMGQ5LCA2MjNiZjQyOSksIDg4MCwgMjg0fSwKKyAgICAgICAgICAgIHtVSU5UNjRf
MlBBUlRfQygweDgwNDQ0YjVlLCA3YWE3Y2Y4NSksIDkwNywgMjkyfSwKKyAgICAgICAgICAgIHtV
SU5UNjRfMlBBUlRfQygweGJmMjFlNDQwLCAwM2FjZGQyZCksIDkzMywgMzAwfSwKKyAgICAgICAg
ICAgIHtVSU5UNjRfMlBBUlRfQygweDhlNjc5YzJmLCA1ZTQ0ZmY4ZiksIDk2MCwgMzA4fSwKKyAg
ICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGQ0MzMxNzlkLCA5YzhjYjg0MSksIDk4NiwgMzE2
fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDllMTlkYjkyLCBiNGUzMWJhOSksIDEw
MTMsIDMyNH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhlYjk2YmY2ZSwgYmFkZjc3
ZDkpLCAxMDM5LCAzMzJ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YWY4NzAyM2Is
IDliZjBlZTZiKSwgMTA2NiwgMzQwfSwKKyAgICAgICAgfTsKKyAgICAgICAga0NhY2hlZFBvd2Vy
cyA9IGNhY2hlZFBvd2VyczsKKyAgICAgICAga0NhY2hlZFBvd2Vyc0xlbmd0aCA9IEFSUkFZX1NJ
WkUoY2FjaGVkUG93ZXJzKTsKKyAgICAgICAga0NhY2hlZFBvd2Vyc09mZnNldCA9IC1jYWNoZWRQ
b3dlcnNbMF0uZGVjaW1hbF9leHBvbmVudDsKKyAgICAgICAgUG93ZXJzT2ZUZW5DYWNoZTo6a0Rl
Y2ltYWxFeHBvbmVudERpc3RhbmNlID0ga0NhY2hlZFBvd2Vyc1sxXS5kZWNpbWFsX2V4cG9uZW50
IC0ga0NhY2hlZFBvd2Vyc1swXS5kZWNpbWFsX2V4cG9uZW50OworICAgICAgICBQb3dlcnNPZlRl
bkNhY2hlOjprTWluRGVjaW1hbEV4cG9uZW50ID0ga0NhY2hlZFBvd2Vyc1swXS5kZWNpbWFsX2V4
cG9uZW50OworICAgICAgICBQb3dlcnNPZlRlbkNhY2hlOjprTWF4RGVjaW1hbEV4cG9uZW50ID0g
a0NhY2hlZFBvd2Vyc1trQ2FjaGVkUG93ZXJzTGVuZ3RoIC0gMV0uZGVjaW1hbF9leHBvbmVudDsK
KyAgICB9CisgICAgCisgICAgdm9pZCBQb3dlcnNPZlRlbkNhY2hlOjpHZXRDYWNoZWRQb3dlckZv
ckJpbmFyeUV4cG9uZW50UmFuZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1pbl9leHBvbmVudCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgbWF4X2V4cG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIERpeUZwKiBwb3dlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGRlY2lt
YWxfZXhwb25lbnQpIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKG1heF9leHBvbmVudCk7CisgICAg
ICAgIGludCBrUSA9IERpeUZwOjprU2lnbmlmaWNhbmRTaXplOworICAgICAgICBkb3VibGUgayA9
IGNlaWwoKG1pbl9leHBvbmVudCArIGtRIC0gMSkgKiBrRF8xX0xPRzJfMTApOworICAgICAgICBp
bnQgZm9vID0ga0NhY2hlZFBvd2Vyc09mZnNldDsKKyAgICAgICAgaW50IGluZGV4ID0KKyAgICAg
ICAgKGZvbyArIHN0YXRpY19jYXN0PGludD4oaykgLSAxKSAvIGtEZWNpbWFsRXhwb25lbnREaXN0
YW5jZSArIDE7CisgICAgICAgIEFTU0VSVCgwIDw9IGluZGV4ICYmIGluZGV4IDwga0NhY2hlZFBv
d2Vyc0xlbmd0aCk7CisgICAgICAgIENhY2hlZFBvd2VyIGNhY2hlZF9wb3dlciA9IGtDYWNoZWRQ
b3dlcnNbaW5kZXhdOworICAgICAgICBBU1NFUlQobWluX2V4cG9uZW50IDw9IGNhY2hlZF9wb3dl
ci5iaW5hcnlfZXhwb25lbnQpOworICAgICAgICBBU1NFUlQoY2FjaGVkX3Bvd2VyLmJpbmFyeV9l
eHBvbmVudCA8PSBtYXhfZXhwb25lbnQpOworICAgICAgICAqZGVjaW1hbF9leHBvbmVudCA9IGNh
Y2hlZF9wb3dlci5kZWNpbWFsX2V4cG9uZW50OworICAgICAgICAqcG93ZXIgPSBEaXlGcChjYWNo
ZWRfcG93ZXIuc2lnbmlmaWNhbmQsIGNhY2hlZF9wb3dlci5iaW5hcnlfZXhwb25lbnQpOworICAg
IH0KKyAgICAKKyAgICAKKyAgICB2b2lkIFBvd2Vyc09mVGVuQ2FjaGU6OkdldENhY2hlZFBvd2Vy
Rm9yRGVjaW1hbEV4cG9uZW50KGludCByZXF1ZXN0ZWRfZXhwb25lbnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXlGcCogcG93
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQqIGZvdW5kX2V4cG9uZW50KSB7CisgICAgICAgIEFTU0VSVChrTWluRGVjaW1h
bEV4cG9uZW50IDw9IHJlcXVlc3RlZF9leHBvbmVudCk7CisgICAgICAgIEFTU0VSVChyZXF1ZXN0
ZWRfZXhwb25lbnQgPCBrTWF4RGVjaW1hbEV4cG9uZW50ICsga0RlY2ltYWxFeHBvbmVudERpc3Rh
bmNlKTsKKyAgICAgICAgaW50IGluZGV4ID0KKyAgICAgICAgKHJlcXVlc3RlZF9leHBvbmVudCAr
IGtDYWNoZWRQb3dlcnNPZmZzZXQpIC8ga0RlY2ltYWxFeHBvbmVudERpc3RhbmNlOworICAgICAg
ICBDYWNoZWRQb3dlciBjYWNoZWRfcG93ZXIgPSBrQ2FjaGVkUG93ZXJzW2luZGV4XTsKKyAgICAg
ICAgKnBvd2VyID0gRGl5RnAoY2FjaGVkX3Bvd2VyLnNpZ25pZmljYW5kLCBjYWNoZWRfcG93ZXIu
YmluYXJ5X2V4cG9uZW50KTsKKyAgICAgICAgKmZvdW5kX2V4cG9uZW50ID0gY2FjaGVkX3Bvd2Vy
LmRlY2ltYWxfZXhwb25lbnQ7CisgICAgICAgIEFTU0VSVCgqZm91bmRfZXhwb25lbnQgPD0gcmVx
dWVzdGVkX2V4cG9uZW50KTsKKyAgICAgICAgQVNTRVJUKHJlcXVlc3RlZF9leHBvbmVudCA8ICpm
b3VuZF9leHBvbmVudCArIGtEZWNpbWFsRXhwb25lbnREaXN0YW5jZSk7CisgICAgfQorICAgIAor
fSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL2R0b2EvY2FjaGVkLXBvd2Vycy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9kdG9hL2NhY2hlZC1wb3dlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYTFkYzI1OWUxZGNlNDg5
OTMwMGZkZTJjZjdmZmI4MjAzMDcwNmYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9kdG9hL2NhY2hlZC1wb3dlcnMuaApAQCAtMCwwICsxLDY4IEBACisvLyBD
b3B5cmlnaHQgMjAxMCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNj
bGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8v
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZm5kZWYgRE9VQkxFX0NPTlZFUlNJT05fQ0FDSEVE
X1BPV0VSU19IXworI2RlZmluZSBET1VCTEVfQ09OVkVSU0lPTl9DQUNIRURfUE9XRVJTX0hfCisK
KyNpbmNsdWRlICJkaXktZnAuaCIKKworbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKKyAg
ICAKKyAgICBjbGFzcyBQb3dlcnNPZlRlbkNhY2hlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIAor
ICAgICAgICAvLyBOb3QgYWxsIHBvd2VycyBvZiB0ZW4gYXJlIGNhY2hlZC4gVGhlIGRlY2ltYWwg
ZXhwb25lbnQgb2YgdHdvIG5laWdoYm9yaW5nCisgICAgICAgIC8vIGNhY2hlZCBudW1iZXJzIHdp
bGwgZGlmZmVyIGJ5IGtEZWNpbWFsRXhwb25lbnREaXN0YW5jZS4KKyAgICAgICAgc3RhdGljIGlu
dCBrRGVjaW1hbEV4cG9uZW50RGlzdGFuY2U7CisgICAgICAgIAorICAgICAgICBzdGF0aWMgaW50
IGtNaW5EZWNpbWFsRXhwb25lbnQ7CisgICAgICAgIHN0YXRpYyBpbnQga01heERlY2ltYWxFeHBv
bmVudDsKKyAgICAgICAgCisgICAgICAgIC8vIFJldHVybnMgYSBjYWNoZWQgcG93ZXItb2YtdGVu
IHdpdGggYSBiaW5hcnkgZXhwb25lbnQgaW4gdGhlIHJhbmdlCisgICAgICAgIC8vIFttaW5fZXhw
b25lbnQ7IG1heF9leHBvbmVudF0gKGJvdW5kYXJpZXMgaW5jbHVkZWQpLgorICAgICAgICBzdGF0
aWMgdm9pZCBHZXRDYWNoZWRQb3dlckZvckJpbmFyeUV4cG9uZW50UmFuZ2UoaW50IG1pbl9leHBv
bmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBtYXhfZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBEaXlGcCogcG93ZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGRlY2ltYWxfZXhw
b25lbnQpOworICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJucyBhIGNhY2hlZCBwb3dlciBvZiB0
ZW4geCB+PSAxMF5rIHN1Y2ggdGhhdAorICAgICAgICAvLyAgIGsgPD0gZGVjaW1hbF9leHBvbmVu
dCA8IGsgKyBrQ2FjaGVkUG93ZXJzRGVjaW1hbERpc3RhbmNlLgorICAgICAgICAvLyBUaGUgZ2l2
ZW4gZGVjaW1hbF9leHBvbmVudCBtdXN0IHNhdGlzZnkKKyAgICAgICAgLy8gICBrTWluRGVjaW1h
bEV4cG9uZW50IDw9IHJlcXVlc3RlZF9leHBvbmVudCwgYW5kCisgICAgICAgIC8vICAgcmVxdWVz
dGVkX2V4cG9uZW50IDwga01heERlY2ltYWxFeHBvbmVudCArIGtEZWNpbWFsRXhwb25lbnREaXN0
YW5jZS4KKyAgICAgICAgc3RhdGljIHZvaWQgR2V0Q2FjaGVkUG93ZXJGb3JEZWNpbWFsRXhwb25l
bnQoaW50IHJlcXVlc3RlZF9leHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRGl5RnAqIHBvd2VyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGZvdW5kX2V4cG9uZW50KTsK
KyAgICB9OworICAgIAorICAgIC8vIEluaXRpYWxpemVzIHRoZSB0YWJsZSBvZiBjYWNoZWQgcG93
ZXJzIHVzZWQgYnkgdGhlIGR0b2EgYWxnb3JpdGhtLgorICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUg
Y2FsbGVkIHdoZW4gSlNDIGlzIGJlaW5nIGluaXRpYWxpemVkLgorICAgIHZvaWQgaW5pdGlhbGl6
ZSgpOworICAgIAorfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCisKKyNlbmRpZiAg
Ly8gRE9VQkxFX0NPTlZFUlNJT05fQ0FDSEVEX1BPV0VSU19IXwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2RpeS1mcC5jYyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvZHRvYS9kaXktZnAuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWIxZjdlZTM1YjljZDFjMGIwZDQxY2Rm
MTc3ZWE4ODhlZTlhY2I0NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvZHRvYS9kaXktZnAuY2MKQEAgLTAsMCArMSw1NyBAQAorLy8gQ29weXJpZ2h0IDIwMTAg
dGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
Ky8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisKKyNpbmNsdWRlICJkaXktZnAuaCIKKyNpbmNsdWRlICJ1dGlscy5oIgorCitu
YW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIHZvaWQgRGl5RnA6Ok11bHRp
cGx5KGNvbnN0IERpeUZwJiBvdGhlcikgeworICAgICAgICAvLyBTaW1wbHkgImVtdWxhdGVzIiBh
IDEyOCBiaXQgbXVsdGlwbGljYXRpb24uCisgICAgICAgIC8vIEhvd2V2ZXI6IHRoZSByZXN1bHRp
bmcgbnVtYmVyIG9ubHkgY29udGFpbnMgNjQgYml0cy4gVGhlIGxlYXN0CisgICAgICAgIC8vIHNp
Z25pZmljYW50IDY0IGJpdHMgYXJlIG9ubHkgdXNlZCBmb3Igcm91bmRpbmcgdGhlIG1vc3Qgc2ln
bmlmaWNhbnQgNjQKKyAgICAgICAgLy8gYml0cy4KKyAgICAgICAgY29uc3QgdWludDY0X3Qga00z
MiA9IDB4RkZGRkZGRkZVOworICAgICAgICB1aW50NjRfdCBhID0gZl8gPj4gMzI7CisgICAgICAg
IHVpbnQ2NF90IGIgPSBmXyAmIGtNMzI7CisgICAgICAgIHVpbnQ2NF90IGMgPSBvdGhlci5mXyA+
PiAzMjsKKyAgICAgICAgdWludDY0X3QgZCA9IG90aGVyLmZfICYga00zMjsKKyAgICAgICAgdWlu
dDY0X3QgYWMgPSBhICogYzsKKyAgICAgICAgdWludDY0X3QgYmMgPSBiICogYzsKKyAgICAgICAg
dWludDY0X3QgYWQgPSBhICogZDsKKyAgICAgICAgdWludDY0X3QgYmQgPSBiICogZDsKKyAgICAg
ICAgdWludDY0X3QgdG1wID0gKGJkID4+IDMyKSArIChhZCAmIGtNMzIpICsgKGJjICYga00zMik7
CisgICAgICAgIC8vIEJ5IGFkZGluZyAxVSA8PCAzMSB0byB0bXAgd2Ugcm91bmQgdGhlIGZpbmFs
IHJlc3VsdC4KKyAgICAgICAgLy8gSGFsZndheSBjYXNlcyB3aWxsIGJlIHJvdW5kIHVwLgorICAg
ICAgICB0bXAgKz0gMVUgPDwgMzE7CisgICAgICAgIHVpbnQ2NF90IHJlc3VsdF9mID0gYWMgKyAo
YWQgPj4gMzIpICsgKGJjID4+IDMyKSArICh0bXAgPj4gMzIpOworICAgICAgICBlXyArPSBvdGhl
ci5lXyArIDY0OworICAgICAgICBmXyA9IHJlc3VsdF9mOworICAgIH0KKyAgICAKK30gIC8vIG5h
bWVzcGFjZSBkb3VibGVfY29udmVyc2lvbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9kdG9hL2RpeS1mcC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2Rp
eS1mcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjlmYWRiMzdiYmQ2N2EzMmQyZmI4YWQwMTNkMzU1YmU3MGQyYmUw
N2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZGl5
LWZwLmgKQEAgLTAsMCArMSwxMTggQEAKKy8vIENvcHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0
IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8v
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lm
bmRlZiBET1VCTEVfQ09OVkVSU0lPTl9ESVlfRlBfSF8KKyNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJ
T05fRElZX0ZQX0hfCisKKyNpbmNsdWRlICJ1dGlscy5oIgorCituYW1lc3BhY2UgZG91YmxlX2Nv
bnZlcnNpb24geworICAgIAorICAgIC8vIFRoaXMgIkRvIEl0IFlvdXJzZWxmIEZsb2F0aW5nIFBv
aW50IiBjbGFzcyBpbXBsZW1lbnRzIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyCisgICAgLy8gd2l0
aCBhIHVpbnQ2NCBzaWduaWZpY2FuZCBhbmQgYW4gaW50IGV4cG9uZW50LiBOb3JtYWxpemVkIERp
eUZwIG51bWJlcnMgd2lsbAorICAgIC8vIGhhdmUgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IG9m
IHRoZSBzaWduaWZpY2FuZCBzZXQuCisgICAgLy8gTXVsdGlwbGljYXRpb24gYW5kIFN1YnRyYWN0
aW9uIGRvIG5vdCBub3JtYWxpemUgdGhlaXIgcmVzdWx0cy4KKyAgICAvLyBEaXlGcCBhcmUgbm90
IGRlc2lnbmVkIHRvIGNvbnRhaW4gc3BlY2lhbCBkb3VibGVzIChOYU4gYW5kIEluZmluaXR5KS4K
KyAgICBjbGFzcyBEaXlGcCB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgY29uc3QgaW50
IGtTaWduaWZpY2FuZFNpemUgPSA2NDsKKyAgICAgICAgCisgICAgICAgIERpeUZwKCkgOiBmXygw
KSwgZV8oMCkge30KKyAgICAgICAgRGl5RnAodWludDY0X3QgZiwgaW50IGUpIDogZl8oZiksIGVf
KGUpIHt9CisgICAgICAgIAorICAgICAgICAvLyB0aGlzID0gdGhpcyAtIG90aGVyLgorICAgICAg
ICAvLyBUaGUgZXhwb25lbnRzIG9mIGJvdGggbnVtYmVycyBtdXN0IGJlIHRoZSBzYW1lIGFuZCB0
aGUgc2lnbmlmaWNhbmQgb2YgdGhpcworICAgICAgICAvLyBtdXN0IGJlIGJpZ2dlciB0aGFuIHRo
ZSBzaWduaWZpY2FuZCBvZiBvdGhlci4KKyAgICAgICAgLy8gVGhlIHJlc3VsdCB3aWxsIG5vdCBi
ZSBub3JtYWxpemVkLgorICAgICAgICB2b2lkIFN1YnRyYWN0KGNvbnN0IERpeUZwJiBvdGhlcikg
eworICAgICAgICAgICAgQVNTRVJUKGVfID09IG90aGVyLmVfKTsKKyAgICAgICAgICAgIEFTU0VS
VChmXyA+PSBvdGhlci5mXyk7CisgICAgICAgICAgICBmXyAtPSBvdGhlci5mXzsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJucyBhIC0gYi4KKyAgICAgICAgLy8gVGhlIGV4
cG9uZW50cyBvZiBib3RoIG51bWJlcnMgbXVzdCBiZSB0aGUgc2FtZSBhbmQgdGhpcyBtdXN0IGJl
IGJpZ2dlcgorICAgICAgICAvLyB0aGFuIG90aGVyLiBUaGUgcmVzdWx0IHdpbGwgbm90IGJlIG5v
cm1hbGl6ZWQuCisgICAgICAgIHN0YXRpYyBEaXlGcCBNaW51cyhjb25zdCBEaXlGcCYgYSwgY29u
c3QgRGl5RnAmIGIpIHsKKyAgICAgICAgICAgIERpeUZwIHJlc3VsdCA9IGE7CisgICAgICAgICAg
ICByZXN1bHQuU3VidHJhY3QoYik7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICAKKyAgICAgICAgLy8gdGhpcyA9IHRoaXMgKiBvdGhlci4K
KyAgICAgICAgdm9pZCBNdWx0aXBseShjb25zdCBEaXlGcCYgb3RoZXIpOworICAgICAgICAKKyAg
ICAgICAgLy8gcmV0dXJucyBhICogYjsKKyAgICAgICAgc3RhdGljIERpeUZwIFRpbWVzKGNvbnN0
IERpeUZwJiBhLCBjb25zdCBEaXlGcCYgYikgeworICAgICAgICAgICAgRGl5RnAgcmVzdWx0ID0g
YTsKKyAgICAgICAgICAgIHJlc3VsdC5NdWx0aXBseShiKTsKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgTm9ybWFsaXplKCkgewor
ICAgICAgICAgICAgQVNTRVJUKGZfICE9IDApOworICAgICAgICAgICAgdWludDY0X3QgZiA9IGZf
OworICAgICAgICAgICAgaW50IGUgPSBlXzsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8g
VGhpcyBtZXRob2QgaXMgbWFpbmx5IGNhbGxlZCBmb3Igbm9ybWFsaXppbmcgYm91bmRhcmllcy4g
SW4gZ2VuZXJhbAorICAgICAgICAgICAgLy8gYm91bmRhcmllcyBuZWVkIHRvIGJlIHNoaWZ0ZWQg
YnkgMTAgYml0cy4gV2UgdGh1cyBvcHRpbWl6ZSBmb3IgdGhpcyBjYXNlLgorICAgICAgICAgICAg
Y29uc3QgdWludDY0X3QgazEwTVNCaXRzID0gVUlOVDY0XzJQQVJUX0MoMHhGRkMwMDAwMCwgMDAw
MDAwMDApOworICAgICAgICAgICAgd2hpbGUgKChmICYgazEwTVNCaXRzKSA9PSAwKSB7CisgICAg
ICAgICAgICAgICAgZiA8PD0gMTA7CisgICAgICAgICAgICAgICAgZSAtPSAxMDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHdoaWxlICgoZiAmIGtVaW50NjRNU0IpID09IDApIHsKKyAgICAg
ICAgICAgICAgICBmIDw8PSAxOworICAgICAgICAgICAgICAgIGUtLTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGZfID0gZjsKKyAgICAgICAgICAgIGVfID0gZTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgc3RhdGljIERpeUZwIE5vcm1hbGl6ZShjb25zdCBEaXlGcCYgYSkgewor
ICAgICAgICAgICAgRGl5RnAgcmVzdWx0ID0gYTsKKyAgICAgICAgICAgIHJlc3VsdC5Ob3JtYWxp
emUoKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHVpbnQ2NF90IGYoKSBjb25zdCB7IHJldHVybiBmXzsgfQorICAgICAgICBpbnQgZSgp
IGNvbnN0IHsgcmV0dXJuIGVfOyB9CisgICAgICAgIAorICAgICAgICB2b2lkIHNldF9mKHVpbnQ2
NF90IG5ld192YWx1ZSkgeyBmXyA9IG5ld192YWx1ZTsgfQorICAgICAgICB2b2lkIHNldF9lKGlu
dCBuZXdfdmFsdWUpIHsgZV8gPSBuZXdfdmFsdWU7IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToK
KyAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGtVaW50NjRNU0IgPSBVSU5UNjRfMlBBUlRf
QygweDgwMDAwMDAwLCAwMDAwMDAwMCk7CisgICAgICAgIAorICAgICAgICB1aW50NjRfdCBmXzsK
KyAgICAgICAgaW50IGVfOworICAgIH07CisgICAgCit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2Nv
bnZlcnNpb24KKworI2VuZGlmICAvLyBET1VCTEVfQ09OVkVSU0lPTl9ESVlfRlBfSF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5j
YyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5jYwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4zMTdkZjE0MmU5YTRjMjMwM2JhNGIyY2QwMTMyYTE2YTRlMjhmMmZiCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2RvdWJsZS1jb252
ZXJzaW9uLmNjCkBAIC0wLDAgKzEsODY5IEBACisvLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJv
amVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8v
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
KyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlICJkb3Vi
bGUtY29udmVyc2lvbi5oIgorCisjaW5jbHVkZSAiYmlnbnVtLWR0b2EuaCIKKyNpbmNsdWRlICJk
b3VibGUuaCIKKyNpbmNsdWRlICJmYXN0LWR0b2EuaCIKKyNpbmNsdWRlICJmaXhlZC1kdG9hLmgi
CisjaW5jbHVkZSAic3RydG9kLmgiCisjaW5jbHVkZSAidXRpbHMuaCIKKworbmFtZXNwYWNlIGRv
dWJsZV9jb252ZXJzaW9uIHsKKyAgICAKKyAgICBjb25zdCBEb3VibGVUb1N0cmluZ0NvbnZlcnRl
ciYgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6OkVjbWFTY3JpcHRDb252ZXJ0ZXIoKSB7CisgICAg
ICAgIGludCBmbGFncyA9IFVOSVFVRV9aRVJPIHwgRU1JVF9QT1NJVElWRV9FWFBPTkVOVF9TSUdO
OworICAgICAgICBzdGF0aWMgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXIgY29udmVydGVyKGZsYWdz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmZp
bml0eSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ik5hTiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC02
LCAyMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2
LCAwKTsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRlcjsKKyAgICB9CisgICAgCisgICAgCisgICAg
Ym9vbCBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6SGFuZGxlU3BlY2lhbFZhbHVlcygKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB2
YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25zdCB7CisgICAgICAgIERvdWJs
ZSBkb3VibGVfaW5zcGVjdCh2YWx1ZSk7CisgICAgICAgIGlmIChkb3VibGVfaW5zcGVjdC5Jc0lu
ZmluaXRlKCkpIHsKKyAgICAgICAgICAgIGlmIChpbmZpbml0eV9zeW1ib2xfID09IE5VTEwpIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA8IDApIHsKKyAgICAgICAgICAgICAg
ICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKCctJyk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkU3RyaW5nKGluZmluaXR5X3N5bWJvbF8pOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRvdWJsZV9pbnNw
ZWN0LklzTmFuKCkpIHsKKyAgICAgICAgICAgIGlmIChuYW5fc3ltYm9sXyA9PSBOVUxMKSByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkU3RyaW5nKG5hbl9zeW1i
b2xfKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBEb3VibGVUb1N0cmluZ0NvbnZl
cnRlcjo6Q3JlYXRlRXhwb25lbnRpYWxSZXByZXNlbnRhdGlvbigKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIqIGRlY2ltYWxfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBl
eHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25zdCB7
CisgICAgICAgIEFTU0VSVChsZW5ndGggIT0gMCk7CisgICAgICAgIHJlc3VsdF9idWlsZGVyLT5B
ZGRDaGFyYWN0ZXIoZGVjaW1hbF9kaWdpdHNbMF0pOworICAgICAgICBpZiAobGVuZ3RoICE9IDEp
IHsKKyAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRDaGFyYWN0ZXIoJy4nKTsKKyAgICAg
ICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRTdWJzdHJpbmcoJmRlY2ltYWxfZGlnaXRzWzFdLCBs
ZW5ndGgtMSk7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3Rl
cihleHBvbmVudF9jaGFyYWN0ZXJfKTsKKyAgICAgICAgaWYgKGV4cG9uZW50IDwgMCkgeworICAg
ICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcignLScpOworICAgICAgICAgICAg
ZXhwb25lbnQgPSAtZXhwb25lbnQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAo
KGZsYWdzXyAmIEVNSVRfUE9TSVRJVkVfRVhQT05FTlRfU0lHTikgIT0gMCkgeworICAgICAgICAg
ICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRDaGFyYWN0ZXIoJysnKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBpZiAoZXhwb25lbnQgPT0gMCkgeworICAgICAgICAgICAgcmVz
dWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcignMCcpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIEFTU0VSVChleHBvbmVudCA8IDFlNCk7CisgICAgICAgIGNvbnN0IGlu
dCBrTWF4RXhwb25lbnRMZW5ndGggPSA1OworICAgICAgICBjaGFyIGJ1ZmZlcltrTWF4RXhwb25l
bnRMZW5ndGhdOworICAgICAgICBpbnQgZmlyc3RfY2hhcl9wb3MgPSBrTWF4RXhwb25lbnRMZW5n
dGg7CisgICAgICAgIHdoaWxlIChleHBvbmVudCA+IDApIHsKKyAgICAgICAgICAgIGJ1ZmZlclst
LWZpcnN0X2NoYXJfcG9zXSA9ICcwJyArIChleHBvbmVudCAlIDEwKTsKKyAgICAgICAgICAgIGV4
cG9uZW50IC89IDEwOworICAgICAgICB9CisgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRTdWJz
dHJpbmcoJmJ1ZmZlcltmaXJzdF9jaGFyX3Bvc10sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAga01heEV4cG9uZW50TGVuZ3RoIC0gZmlyc3RfY2hhcl9wb3MpOworICAgIH0K
KyAgICAKKyAgICAKKyAgICB2b2lkIERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpDcmVhdGVEZWNp
bWFsUmVwcmVzZW50YXRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGRlY2ltYWxfZGlnaXRzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRpZ2l0c19h
ZnRlcl9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU3RyaW5nQnVpbGRlciogcmVzdWx0X2J1aWxkZXIpIGNvbnN0IHsK
KyAgICAgICAgLy8gQ3JlYXRlIGEgcmVwcmVzZW50YXRpb24gdGhhdCBpcyBwYWRkZWQgd2l0aCB6
ZXJvcyBpZiBuZWVkZWQuCisgICAgICAgIGlmIChkZWNpbWFsX3BvaW50IDw9IDApIHsKKyAgICAg
ICAgICAgIC8vICIwLjAwMDAwZGVjaW1hbF9yZXAiLgorICAgICAgICAgICAgcmVzdWx0X2J1aWxk
ZXItPkFkZENoYXJhY3RlcignMCcpOworICAgICAgICAgICAgaWYgKGRpZ2l0c19hZnRlcl9wb2lu
dCA+IDApIHsKKyAgICAgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKCcu
Jyk7CisgICAgICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZFBhZGRpbmcoJzAnLCAtZGVj
aW1hbF9wb2ludCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGxlbmd0aCA8PSBkaWdpdHNfYWZ0
ZXJfcG9pbnQgLSAoLWRlY2ltYWxfcG9pbnQpKTsKKyAgICAgICAgICAgICAgICByZXN1bHRfYnVp
bGRlci0+QWRkU3Vic3RyaW5nKGRlY2ltYWxfZGlnaXRzLCBsZW5ndGgpOworICAgICAgICAgICAg
ICAgIGludCByZW1haW5pbmdfZGlnaXRzID0gZGlnaXRzX2FmdGVyX3BvaW50IC0gKC1kZWNpbWFs
X3BvaW50KSAtIGxlbmd0aDsKKyAgICAgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkUGFk
ZGluZygnMCcsIHJlbWFpbmluZ19kaWdpdHMpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgaWYgKGRlY2ltYWxfcG9pbnQgPj0gbGVuZ3RoKSB7CisgICAgICAgICAgICAvLyAiZGVjaW1h
bF9yZXAwMDAwLjAwMDAwIiBvciAiZGVjaW1hbF9yZXAuMDAwMCIKKyAgICAgICAgICAgIHJlc3Vs
dF9idWlsZGVyLT5BZGRTdWJzdHJpbmcoZGVjaW1hbF9kaWdpdHMsIGxlbmd0aCk7CisgICAgICAg
ICAgICByZXN1bHRfYnVpbGRlci0+QWRkUGFkZGluZygnMCcsIGRlY2ltYWxfcG9pbnQgLSBsZW5n
dGgpOworICAgICAgICAgICAgaWYgKGRpZ2l0c19hZnRlcl9wb2ludCA+IDApIHsKKyAgICAgICAg
ICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKCcuJyk7CisgICAgICAgICAgICAg
ICAgcmVzdWx0X2J1aWxkZXItPkFkZFBhZGRpbmcoJzAnLCBkaWdpdHNfYWZ0ZXJfcG9pbnQpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gImRlY2ltYS5s
X3JlcDAwMCIKKyAgICAgICAgICAgIEFTU0VSVChkaWdpdHNfYWZ0ZXJfcG9pbnQgPiAwKTsKKyAg
ICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRTdWJzdHJpbmcoZGVjaW1hbF9kaWdpdHMsIGRl
Y2ltYWxfcG9pbnQpOworICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3Rlcign
LicpOworICAgICAgICAgICAgQVNTRVJUKGxlbmd0aCAtIGRlY2ltYWxfcG9pbnQgPD0gZGlnaXRz
X2FmdGVyX3BvaW50KTsKKyAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRTdWJzdHJpbmco
JmRlY2ltYWxfZGlnaXRzW2RlY2ltYWxfcG9pbnRdLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsZW5ndGggLSBkZWNpbWFsX3BvaW50KTsKKyAgICAgICAgICAgIGlu
dCByZW1haW5pbmdfZGlnaXRzID0gZGlnaXRzX2FmdGVyX3BvaW50IC0gKGxlbmd0aCAtIGRlY2lt
YWxfcG9pbnQpOworICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZFBhZGRpbmcoJzAnLCBy
ZW1haW5pbmdfZGlnaXRzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGlnaXRzX2FmdGVyX3Bv
aW50ID09IDApIHsKKyAgICAgICAgICAgIGlmICgoZmxhZ3NfICYgRU1JVF9UUkFJTElOR19ERUNJ
TUFMX1BPSU5UKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENo
YXJhY3RlcignLicpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChmbGFnc18gJiBF
TUlUX1RSQUlMSU5HX1pFUk9fQUZURVJfUE9JTlQpICE9IDApIHsKKyAgICAgICAgICAgICAgICBy
ZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKCcwJyk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgCisgICAgYm9vbCBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6
VG9TaG9ydGVzdChkb3VibGUgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyKiByZXN1bHRfYnVpbGRlcikgY29uc3QgeworICAg
ICAgICBpZiAoRG91YmxlKHZhbHVlKS5Jc1NwZWNpYWwoKSkgeworICAgICAgICAgICAgcmV0dXJu
IEhhbmRsZVNwZWNpYWxWYWx1ZXModmFsdWUsIHJlc3VsdF9idWlsZGVyKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgaW50IGRlY2ltYWxfcG9pbnQ7CisgICAgICAgIGJvb2wgc2lnbjsK
KyAgICAgICAgY29uc3QgaW50IGtEZWNpbWFsUmVwQ2FwYWNpdHkgPSBrQmFzZTEwTWF4aW1hbExl
bmd0aCArIDE7CisgICAgICAgIGNoYXIgZGVjaW1hbF9yZXBba0RlY2ltYWxSZXBDYXBhY2l0eV07
CisgICAgICAgIGludCBkZWNpbWFsX3JlcF9sZW5ndGg7CisgICAgICAgIAorICAgICAgICBEb3Vi
bGVUb0FzY2lpKHZhbHVlLCBTSE9SVEVTVCwgMCwgZGVjaW1hbF9yZXAsIGtEZWNpbWFsUmVwQ2Fw
YWNpdHksCisgICAgICAgICAgICAgICAgICAgICAgJnNpZ24sICZkZWNpbWFsX3JlcF9sZW5ndGgs
ICZkZWNpbWFsX3BvaW50KTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgdW5pcXVlX3plcm8gPSAo
ZmxhZ3NfICYgVU5JUVVFX1pFUk8pICE9IDA7CisgICAgICAgIGlmIChzaWduICYmICh2YWx1ZSAh
PSAwLjAgfHwgIXVuaXF1ZV96ZXJvKSkgeworICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFk
ZENoYXJhY3RlcignLScpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpbnQgZXhwb25l
bnQgPSBkZWNpbWFsX3BvaW50IC0gMTsKKyAgICAgICAgaWYgKChkZWNpbWFsX2luX3Nob3J0ZXN0
X2xvd18gPD0gZXhwb25lbnQpICYmCisgICAgICAgICAgICAoZXhwb25lbnQgPCBkZWNpbWFsX2lu
X3Nob3J0ZXN0X2hpZ2hfKSkgeworICAgICAgICAgICAgQ3JlYXRlRGVjaW1hbFJlcHJlc2VudGF0
aW9uKGRlY2ltYWxfcmVwLCBkZWNpbWFsX3JlcF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBNYXgoMCwgZGVjaW1hbF9yZXBfbGVuZ3RoIC0gZGVjaW1hbF9w
b2ludCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2J1
aWxkZXIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQ3JlYXRlRXhwb25lbnRpYWxS
ZXByZXNlbnRhdGlvbihkZWNpbWFsX3JlcCwgZGVjaW1hbF9yZXBfbGVuZ3RoLCBleHBvbmVudCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2J1aWxk
ZXIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAK
KyAgICBib29sIERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpUb0ZpeGVkKGRvdWJsZSB2YWx1ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXF1ZXN0ZWRf
ZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5n
QnVpbGRlciogcmVzdWx0X2J1aWxkZXIpIGNvbnN0IHsKKyAgICAgICAgQVNTRVJUKGtNYXhGaXhl
ZERpZ2l0c0JlZm9yZVBvaW50ID09IDYwKTsKKyAgICAgICAgY29uc3QgZG91YmxlIGtGaXJzdE5v
bkZpeGVkID0gMWU2MDsKKyAgICAgICAgCisgICAgICAgIGlmIChEb3VibGUodmFsdWUpLklzU3Bl
Y2lhbCgpKSB7CisgICAgICAgICAgICByZXR1cm4gSGFuZGxlU3BlY2lhbFZhbHVlcyh2YWx1ZSwg
cmVzdWx0X2J1aWxkZXIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAocmVxdWVz
dGVkX2RpZ2l0cyA+IGtNYXhGaXhlZERpZ2l0c0FmdGVyUG9pbnQpIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgaWYgKHZhbHVlID49IGtGaXJzdE5vbkZpeGVkIHx8IHZhbHVlIDw9IC1rRmlyc3ROb25G
aXhlZCkgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgLy8gRmluZCBhIHN1ZmZpY2ll
bnRseSBwcmVjaXNlIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2Ygbi4KKyAgICAgICAgaW50IGRl
Y2ltYWxfcG9pbnQ7CisgICAgICAgIGJvb2wgc2lnbjsKKyAgICAgICAgLy8gQWRkIHNwYWNlIGZv
ciB0aGUgJ1wwJyBieXRlLgorICAgICAgICBjb25zdCBpbnQga0RlY2ltYWxSZXBDYXBhY2l0eSA9
CisgICAgICAgIGtNYXhGaXhlZERpZ2l0c0JlZm9yZVBvaW50ICsga01heEZpeGVkRGlnaXRzQWZ0
ZXJQb2ludCArIDE7CisgICAgICAgIGNoYXIgZGVjaW1hbF9yZXBba0RlY2ltYWxSZXBDYXBhY2l0
eV07CisgICAgICAgIGludCBkZWNpbWFsX3JlcF9sZW5ndGg7CisgICAgICAgIERvdWJsZVRvQXNj
aWkodmFsdWUsIEZJWEVELCByZXF1ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAg
IGRlY2ltYWxfcmVwLCBrRGVjaW1hbFJlcENhcGFjaXR5LAorICAgICAgICAgICAgICAgICAgICAg
ICZzaWduLCAmZGVjaW1hbF9yZXBfbGVuZ3RoLCAmZGVjaW1hbF9wb2ludCk7CisgICAgICAgIAor
ICAgICAgICBib29sIHVuaXF1ZV96ZXJvID0gKChmbGFnc18gJiBVTklRVUVfWkVSTykgIT0gMCk7
CisgICAgICAgIGlmIChzaWduICYmICh2YWx1ZSAhPSAwLjAgfHwgIXVuaXF1ZV96ZXJvKSkgewor
ICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcignLScpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBDcmVhdGVEZWNpbWFsUmVwcmVzZW50YXRpb24oZGVjaW1hbF9y
ZXAsIGRlY2ltYWxfcmVwX2xlbmd0aCwgZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZF9kaWdpdHMsIHJlc3VsdF9idWlsZGVyKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIAorICAgIGJvb2wgRG91YmxlVG9T
dHJpbmdDb252ZXJ0ZXI6OlRvRXhwb25lbnRpYWwoCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdmFsdWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIq
IHJlc3VsdF9idWlsZGVyKSBjb25zdCB7CisgICAgICAgIGlmIChEb3VibGUodmFsdWUpLklzU3Bl
Y2lhbCgpKSB7CisgICAgICAgICAgICByZXR1cm4gSGFuZGxlU3BlY2lhbFZhbHVlcyh2YWx1ZSwg
cmVzdWx0X2J1aWxkZXIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAocmVxdWVz
dGVkX2RpZ2l0cyA8IC0xKSByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChyZXF1ZXN0ZWRfZGln
aXRzID4ga01heEV4cG9uZW50aWFsRGlnaXRzKSByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAg
ICAgICBpbnQgZGVjaW1hbF9wb2ludDsKKyAgICAgICAgYm9vbCBzaWduOworICAgICAgICAvLyBB
ZGQgc3BhY2UgZm9yIGRpZ2l0IGJlZm9yZSB0aGUgZGVjaW1hbCBwb2ludCBhbmQgdGhlICdcMCcg
Y2hhcmFjdGVyLgorICAgICAgICBjb25zdCBpbnQga0RlY2ltYWxSZXBDYXBhY2l0eSA9IGtNYXhF
eHBvbmVudGlhbERpZ2l0cyArIDI7CisgICAgICAgIEFTU0VSVChrRGVjaW1hbFJlcENhcGFjaXR5
ID4ga0Jhc2UxME1heGltYWxMZW5ndGgpOworICAgICAgICBjaGFyIGRlY2ltYWxfcmVwW2tEZWNp
bWFsUmVwQ2FwYWNpdHldOworICAgICAgICBpbnQgZGVjaW1hbF9yZXBfbGVuZ3RoOworICAgICAg
ICAKKyAgICAgICAgaWYgKHJlcXVlc3RlZF9kaWdpdHMgPT0gLTEpIHsKKyAgICAgICAgICAgIERv
dWJsZVRvQXNjaWkodmFsdWUsIFNIT1JURVNULCAwLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWNpbWFsX3JlcCwga0RlY2ltYWxSZXBDYXBhY2l0eSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgJnNpZ24sICZkZWNpbWFsX3JlcF9sZW5ndGgsICZkZWNpbWFsX3BvaW50KTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIERvdWJsZVRvQXNjaWkodmFsdWUsIFBSRUNJU0lPTiwg
cmVxdWVzdGVkX2RpZ2l0cyArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2ltYWxf
cmVwLCBrRGVjaW1hbFJlcENhcGFjaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAmc2ln
biwgJmRlY2ltYWxfcmVwX2xlbmd0aCwgJmRlY2ltYWxfcG9pbnQpOworICAgICAgICAgICAgQVNT
RVJUKGRlY2ltYWxfcmVwX2xlbmd0aCA8PSByZXF1ZXN0ZWRfZGlnaXRzICsgMSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSBkZWNpbWFsX3JlcF9sZW5ndGg7IGkgPCBy
ZXF1ZXN0ZWRfZGlnaXRzICsgMTsgKytpKSB7CisgICAgICAgICAgICAgICAgZGVjaW1hbF9yZXBb
aV0gPSAnMCc7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWNpbWFsX3JlcF9sZW5ndGgg
PSByZXF1ZXN0ZWRfZGlnaXRzICsgMTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9v
bCB1bmlxdWVfemVybyA9ICgoZmxhZ3NfICYgVU5JUVVFX1pFUk8pICE9IDApOworICAgICAgICBp
ZiAoc2lnbiAmJiAodmFsdWUgIT0gMC4wIHx8ICF1bmlxdWVfemVybykpIHsKKyAgICAgICAgICAg
IHJlc3VsdF9idWlsZGVyLT5BZGRDaGFyYWN0ZXIoJy0nKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaW50IGV4cG9uZW50ID0gZGVjaW1hbF9wb2ludCAtIDE7CisgICAgICAgIENyZWF0
ZUV4cG9uZW50aWFsUmVwcmVzZW50YXRpb24oZGVjaW1hbF9yZXAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVjaW1hbF9yZXBfbGVuZ3RoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9uZW50LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIAorICAgIAorICAgIGJvb2wgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6
OlRvUHJlY2lzaW9uKGRvdWJsZSB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgcHJlY2lzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25z
dCB7CisgICAgICAgIGlmIChEb3VibGUodmFsdWUpLklzU3BlY2lhbCgpKSB7CisgICAgICAgICAg
ICByZXR1cm4gSGFuZGxlU3BlY2lhbFZhbHVlcyh2YWx1ZSwgcmVzdWx0X2J1aWxkZXIpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAocHJlY2lzaW9uIDwga01pblByZWNpc2lvbkRp
Z2l0cyB8fCBwcmVjaXNpb24gPiBrTWF4UHJlY2lzaW9uRGlnaXRzKSB7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZpbmQgYSBzdWZm
aWNpZW50bHkgcHJlY2lzZSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIG4uCisgICAgICAgIGlu
dCBkZWNpbWFsX3BvaW50OworICAgICAgICBib29sIHNpZ247CisgICAgICAgIC8vIEFkZCBvbmUg
Zm9yIHRoZSB0ZXJtaW5hdGluZyBudWxsIGNoYXJhY3Rlci4KKyAgICAgICAgY29uc3QgaW50IGtE
ZWNpbWFsUmVwQ2FwYWNpdHkgPSBrTWF4UHJlY2lzaW9uRGlnaXRzICsgMTsKKyAgICAgICAgY2hh
ciBkZWNpbWFsX3JlcFtrRGVjaW1hbFJlcENhcGFjaXR5XTsKKyAgICAgICAgaW50IGRlY2ltYWxf
cmVwX2xlbmd0aDsKKyAgICAgICAgCisgICAgICAgIERvdWJsZVRvQXNjaWkodmFsdWUsIFBSRUNJ
U0lPTiwgcHJlY2lzaW9uLAorICAgICAgICAgICAgICAgICAgICAgIGRlY2ltYWxfcmVwLCBrRGVj
aW1hbFJlcENhcGFjaXR5LAorICAgICAgICAgICAgICAgICAgICAgICZzaWduLCAmZGVjaW1hbF9y
ZXBfbGVuZ3RoLCAmZGVjaW1hbF9wb2ludCk7CisgICAgICAgIEFTU0VSVChkZWNpbWFsX3JlcF9s
ZW5ndGggPD0gcHJlY2lzaW9uKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgdW5pcXVlX3plcm8g
PSAoKGZsYWdzXyAmIFVOSVFVRV9aRVJPKSAhPSAwKTsKKyAgICAgICAgaWYgKHNpZ24gJiYgKHZh
bHVlICE9IDAuMCB8fCAhdW5pcXVlX3plcm8pKSB7CisgICAgICAgICAgICByZXN1bHRfYnVpbGRl
ci0+QWRkQ2hhcmFjdGVyKCctJyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFRo
ZSBleHBvbmVudCBpZiB3ZSBwcmludCB0aGUgbnVtYmVyIGFzIHgueHhleXl5LiBUaGF0IGlzIHdp
dGggdGhlCisgICAgICAgIC8vIGRlY2ltYWwgcG9pbnQgYWZ0ZXIgdGhlIGZpcnN0IGRpZ2l0Lgor
ICAgICAgICBpbnQgZXhwb25lbnQgPSBkZWNpbWFsX3BvaW50IC0gMTsKKyAgICAgICAgCisgICAg
ICAgIGludCBleHRyYV96ZXJvID0gKChmbGFnc18gJiBFTUlUX1RSQUlMSU5HX1pFUk9fQUZURVJf
UE9JTlQpICE9IDApID8gMSA6IDA7CisgICAgICAgIGlmICgoLWRlY2ltYWxfcG9pbnQgKyAxID4g
bWF4X2xlYWRpbmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGVfKSB8fAorICAgICAg
ICAgICAgKGRlY2ltYWxfcG9pbnQgLSBwcmVjaXNpb24gKyBleHRyYV96ZXJvID4KKyAgICAgICAg
ICAgICBtYXhfdHJhaWxpbmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGVfKSkgewor
ICAgICAgICAgICAgICAgIC8vIEZpbGwgYnVmZmVyIHRvIGNvbnRhaW4gJ3ByZWNpc2lvbicgZGln
aXRzLgorICAgICAgICAgICAgICAgIC8vIFVzdWFsbHkgdGhlIGJ1ZmZlciBpcyBhbHJlYWR5IGF0
IHRoZSBjb3JyZWN0IGxlbmd0aCwgYnV0ICdEb3VibGVUb0FzY2lpJworICAgICAgICAgICAgICAg
IC8vIGlzIGFsbG93ZWQgdG8gcmV0dXJuIGxlc3MgY2hhcmFjdGVycy4KKyAgICAgICAgICAgICAg
ICBmb3IgKGludCBpID0gZGVjaW1hbF9yZXBfbGVuZ3RoOyBpIDwgcHJlY2lzaW9uOyArK2kpIHsK
KyAgICAgICAgICAgICAgICAgICAgZGVjaW1hbF9yZXBbaV0gPSAnMCc7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENyZWF0ZUV4cG9uZW50aWFs
UmVwcmVzZW50YXRpb24oZGVjaW1hbF9yZXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBleHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgQ3JlYXRlRGVjaW1hbFJlcHJlc2VudGF0aW9uKGRlY2lt
YWxfcmVwLCBkZWNpbWFsX3JlcF9sZW5ndGgsIGRlY2ltYWxfcG9pbnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heCgwLCBwcmVjaXNpb24gLSBkZWNpbWFs
X3BvaW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0X2J1aWxkZXIpOworICAgICAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgCisgICAgCisgICAgc3RhdGljIEJpZ251bUR0b2FNb2RlIER0b2FUb0JpZ251bUR0b2FN
b2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb3Vi
bGVUb1N0cmluZ0NvbnZlcnRlcjo6RHRvYU1vZGUgZHRvYV9tb2RlKSB7CisgICAgICAgIHN3aXRj
aCAoZHRvYV9tb2RlKSB7CisgICAgICAgICAgICBjYXNlIERvdWJsZVRvU3RyaW5nQ29udmVydGVy
OjpTSE9SVEVTVDogIHJldHVybiBCSUdOVU1fRFRPQV9TSE9SVEVTVDsKKyAgICAgICAgICAgIGNh
c2UgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6OkZJWEVEOiAgICAgcmV0dXJuIEJJR05VTV9EVE9B
X0ZJWEVEOworICAgICAgICAgICAgY2FzZSBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6UFJFQ0lT
SU9OOiByZXR1cm4gQklHTlVNX0RUT0FfUFJFQ0lTSU9OOworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIHJldHVybiBC
SUdOVU1fRFRPQV9TSE9SVEVTVDsgIC8vIFRvIHNpbGVuY2UgY29tcGlsZXIuCisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6RG91
YmxlVG9Bc2NpaShkb3VibGUgdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIER0b2FNb2RlIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIGJ1ZmZlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBidWZmZXJfbGVuZ3Ro
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCog
c2lnbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCogbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50KiBwb2ludCkgeworICAgICAgICBWZWN0b3I8Y2hhcj4gdmVjdG9yKGJ1ZmZlciwgYnVm
ZmVyX2xlbmd0aCk7CisgICAgICAgIEFTU0VSVCghRG91YmxlKHYpLklzU3BlY2lhbCgpKTsKKyAg
ICAgICAgQVNTRVJUKG1vZGUgPT0gU0hPUlRFU1QgfHwgcmVxdWVzdGVkX2RpZ2l0cyA+PSAwKTsK
KyAgICAgICAgCisgICAgICAgIGlmIChEb3VibGUodikuU2lnbigpIDwgMCkgeworICAgICAgICAg
ICAgKnNpZ24gPSB0cnVlOworICAgICAgICAgICAgdiA9IC12OworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgKnNpZ24gPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aWYgKG1vZGUgPT0gUFJFQ0lTSU9OICYmIHJlcXVlc3RlZF9kaWdpdHMgPT0gMCkgeworICAgICAg
ICAgICAgdmVjdG9yWzBdID0gJ1wwJzsKKyAgICAgICAgICAgICpsZW5ndGggPSAwOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAodiA9PSAwKSB7
CisgICAgICAgICAgICB2ZWN0b3JbMF0gPSAnMCc7CisgICAgICAgICAgICB2ZWN0b3JbMV0gPSAn
XDAnOworICAgICAgICAgICAgKmxlbmd0aCA9IDE7CisgICAgICAgICAgICAqcG9pbnQgPSAxOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGZh
c3Rfd29ya2VkOworICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgU0hP
UlRFU1Q6CisgICAgICAgICAgICAgICAgZmFzdF93b3JrZWQgPSBGYXN0RHRvYSh2LCBGQVNUX0RU
T0FfU0hPUlRFU1QsIDAsIHZlY3RvciwgbGVuZ3RoLCBwb2ludCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIEZJWEVEOgorICAgICAgICAgICAgICAgIGZhc3Rfd29y
a2VkID0gRmFzdEZpeGVkRHRvYSh2LCByZXF1ZXN0ZWRfZGlnaXRzLCB2ZWN0b3IsIGxlbmd0aCwg
cG9pbnQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBQUkVDSVNJ
T046CisgICAgICAgICAgICAgICAgZmFzdF93b3JrZWQgPSBGYXN0RHRvYSh2LCBGQVNUX0RUT0Ff
UFJFQ0lTSU9OLCByZXF1ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmVjdG9yLCBsZW5ndGgsIHBvaW50KTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgICAgICAgICBmYXN0X3dvcmtlZCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAg
IGlmIChmYXN0X3dvcmtlZCkgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgLy8gSWYgdGhlIGZh
c3QgZHRvYSBkaWRuJ3Qgc3VjY2VlZCB1c2UgdGhlIHNsb3dlciBiaWdudW0gdmVyc2lvbi4KKyAg
ICAgICAgQmlnbnVtRHRvYU1vZGUgYmlnbnVtX21vZGUgPSBEdG9hVG9CaWdudW1EdG9hTW9kZSht
b2RlKTsKKyAgICAgICAgQmlnbnVtRHRvYSh2LCBiaWdudW1fbW9kZSwgcmVxdWVzdGVkX2RpZ2l0
cywgdmVjdG9yLCBsZW5ndGgsIHBvaW50KTsKKyAgICAgICAgdmVjdG9yWypsZW5ndGhdID0gJ1ww
JzsKKyAgICB9CisgICAgCisgICAgCisgICAgLy8gQ29uc3VtZXMgdGhlIGdpdmVuIHN1YnN0cmlu
ZyBmcm9tIHRoZSBpdGVyYXRvci4KKyAgICAvLyBSZXR1cm5zIGZhbHNlLCBpZiB0aGUgc3Vic3Ry
aW5nIGRvZXMgbm90IG1hdGNoLgorICAgIHN0YXRpYyBib29sIENvbnN1bWVTdWJTdHJpbmcoY29u
c3QgY2hhcioqIGN1cnJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiBlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
KiBzdWJzdHJpbmcpIHsKKyAgICAgICAgQVNTRVJUKCoqY3VycmVudCA9PSAqc3Vic3RyaW5nKTsK
KyAgICAgICAgZm9yIChzdWJzdHJpbmcrKzsgKnN1YnN0cmluZyAhPSAnXDAnOyBzdWJzdHJpbmcr
KykgeworICAgICAgICAgICAgKysqY3VycmVudDsKKyAgICAgICAgICAgIGlmICgqY3VycmVudCA9
PSBlbmQgfHwgKipjdXJyZW50ICE9ICpzdWJzdHJpbmcpIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICArKypjdXJyZW50OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgCisgICAgLy8gTWF4aW11bSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIGluIGRl
Y2ltYWwgcmVwcmVzZW50YXRpb24uCisgICAgLy8gVGhlIGxvbmdlc3QgcG9zc2libGUgZG91Ymxl
IGluIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gaXMKKyAgICAvLyAoMl41MyAtIDEpICogMiBeIC0x
MDc0IHRoYXQgaXMgKDIgXiA1MyAtIDEpICogNSBeIDEwNzQgLyAxMCBeIDEwNzQKKyAgICAvLyAo
NzY4IGRpZ2l0cykuIElmIHdlIHBhcnNlIGEgbnVtYmVyIHdob3NlIGZpcnN0IGRpZ2l0cyBhcmUg
ZXF1YWwgdG8gYQorICAgIC8vIG1lYW4gb2YgMiBhZGphY2VudCBkb3VibGVzICh0aGF0IGNvdWxk
IGhhdmUgdXAgdG8gNzY5IGRpZ2l0cykgdGhlIHJlc3VsdAorICAgIC8vIG11c3QgYmUgcm91bmRl
ZCB0byB0aGUgYmlnZ2VyIG9uZSB1bmxlc3MgdGhlIHRhaWwgY29uc2lzdHMgb2YgemVyb3MsIHNv
CisgICAgLy8gd2UgZG9uJ3QgbmVlZCB0byBwcmVzZXJ2ZSBhbGwgdGhlIGRpZ2l0cy4KKyAgICBj
b25zdCBpbnQga01heFNpZ25pZmljYW50RGlnaXRzID0gNzcyOworICAgIAorICAgIAorICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiBhIG5vbnNwYWNlIGZvdW5kIGFuZCBmYWxzZSBpZiB0aGUgZW5kIGhh
cyByZWFjaGVkLgorICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBBZHZhbmNlVG9Ob25zcGFjZShjb25z
dCBjaGFyKiogY3VycmVudCwgY29uc3QgY2hhciogZW5kKSB7CisgICAgICAgIHdoaWxlICgqY3Vy
cmVudCAhPSBlbmQpIHsKKyAgICAgICAgICAgIGlmICgqKmN1cnJlbnQgIT0gJyAnKSByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgICsrKmN1cnJlbnQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICAKKyAgICAKKyAgICBzdGF0aWMgYm9vbCBpc0RpZ2l0KGludCB4
LCBpbnQgcmFkaXgpIHsKKyAgICAgICAgcmV0dXJuICh4ID49ICcwJyAmJiB4IDw9ICc5JyAmJiB4
IDwgJzAnICsgcmFkaXgpCisgICAgICAgIHx8IChyYWRpeCA+IDEwICYmIHggPj0gJ2EnICYmIHgg
PCAnYScgKyByYWRpeCAtIDEwKQorICAgICAgICB8fCAocmFkaXggPiAxMCAmJiB4ID49ICdBJyAm
JiB4IDwgJ0EnICsgcmFkaXggLSAxMCk7CisgICAgfQorICAgIAorICAgIAorICAgIHN0YXRpYyBk
b3VibGUgU2lnbmVkWmVybyhib29sIHNpZ24pIHsKKyAgICAgICAgcmV0dXJuIHNpZ24gPyAtMC4w
IDogMC4wOworICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBQYXJzaW5nIGludGVnZXJzIHdpdGgg
cmFkaXggMiwgNCwgOCwgMTYsIDMyLiBBc3N1bWVzIGN1cnJlbnQgIT0gZW5kLgorICAgIHRlbXBs
YXRlIDxpbnQgcmFkaXhfbG9nXzI+CisgICAgc3RhdGljIGRvdWJsZSBSYWRpeFN0cmluZ1RvRG91
YmxlKGNvbnN0IGNoYXIqIGN1cnJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIGVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBzaWduLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGFsbG93X3RyYWlsaW5nX2p1bmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRvdWJsZSBqdW5rX3N0cmluZ192YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhcioqIHRyYWlsaW5nX3BvaW50ZXIpIHsKKyAgICAgICAg
QVNTRVJUKGN1cnJlbnQgIT0gZW5kKTsKKyAgICAgICAgCisgICAgICAgIC8vIFNraXAgbGVhZGlu
ZyAwcy4KKyAgICAgICAgd2hpbGUgKCpjdXJyZW50ID09ICcwJykgeworICAgICAgICAgICAgKytj
dXJyZW50OworICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gZW5kKSB7CisgICAgICAgICAgICAg
ICAgKnRyYWlsaW5nX3BvaW50ZXIgPSBlbmQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNpZ25l
ZFplcm8oc2lnbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGludDY0X3QgbnVtYmVyID0gMDsKKyAgICAgICAgaW50IGV4cG9uZW50ID0gMDsKKyAgICAgICAg
Y29uc3QgaW50IHJhZGl4ID0gKDEgPDwgcmFkaXhfbG9nXzIpOworICAgICAgICAKKyAgICAgICAg
ZG8geworICAgICAgICAgICAgaW50IGRpZ2l0OworICAgICAgICAgICAgaWYgKCpjdXJyZW50ID49
ICcwJyAmJiAqY3VycmVudCA8PSAnOScgJiYgKmN1cnJlbnQgPCAnMCcgKyByYWRpeCkgeworICAg
ICAgICAgICAgICAgIGRpZ2l0ID0gc3RhdGljX2Nhc3Q8Y2hhcj4oKmN1cnJlbnQpIC0gJzAnOwor
ICAgICAgICAgICAgfSBlbHNlIGlmIChyYWRpeCA+IDEwICYmICpjdXJyZW50ID49ICdhJyAmJiAq
Y3VycmVudCA8ICdhJyArIHJhZGl4IC0gMTApIHsKKyAgICAgICAgICAgICAgICBkaWdpdCA9IHN0
YXRpY19jYXN0PGNoYXI+KCpjdXJyZW50KSAtICdhJyArIDEwOworICAgICAgICAgICAgfSBlbHNl
IGlmIChyYWRpeCA+IDEwICYmICpjdXJyZW50ID49ICdBJyAmJiAqY3VycmVudCA8ICdBJyArIHJh
ZGl4IC0gMTApIHsKKyAgICAgICAgICAgICAgICBkaWdpdCA9IHN0YXRpY19jYXN0PGNoYXI+KCpj
dXJyZW50KSAtICdBJyArIDEwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBpZiAoYWxsb3dfdHJhaWxpbmdfanVuayB8fCAhQWR2YW5jZVRvTm9uc3BhY2UoJmN1cnJlbnQs
IGVuZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
bnVtYmVyID0gbnVtYmVyICogcmFkaXggKyBkaWdpdDsKKyAgICAgICAgICAgIGludCBvdmVyZmxv
dyA9IHN0YXRpY19jYXN0PGludD4obnVtYmVyID4+IDUzKTsKKyAgICAgICAgICAgIGlmIChvdmVy
ZmxvdyAhPSAwKSB7CisgICAgICAgICAgICAgICAgLy8gT3ZlcmZsb3cgb2NjdXJyZWQuIE5lZWQg
dG8gZGV0ZXJtaW5lIHdoaWNoIGRpcmVjdGlvbiB0byByb3VuZCB0aGUKKyAgICAgICAgICAgICAg
ICAvLyByZXN1bHQuCisgICAgICAgICAgICAgICAgaW50IG92ZXJmbG93X2JpdHNfY291bnQgPSAx
OworICAgICAgICAgICAgICAgIHdoaWxlIChvdmVyZmxvdyA+IDEpIHsKKyAgICAgICAgICAgICAg
ICAgICAgb3ZlcmZsb3dfYml0c19jb3VudCsrOworICAgICAgICAgICAgICAgICAgICBvdmVyZmxv
dyA+Pj0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgaW50IGRyb3BwZWRfYml0c19tYXNrID0gKCgxIDw8IG92ZXJmbG93X2JpdHNfY291bnQp
IC0gMSk7CisgICAgICAgICAgICAgICAgaW50IGRyb3BwZWRfYml0cyA9IHN0YXRpY19jYXN0PGlu
dD4obnVtYmVyKSAmIGRyb3BwZWRfYml0c19tYXNrOworICAgICAgICAgICAgICAgIG51bWJlciA+
Pj0gb3ZlcmZsb3dfYml0c19jb3VudDsKKyAgICAgICAgICAgICAgICBleHBvbmVudCA9IG92ZXJm
bG93X2JpdHNfY291bnQ7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYm9vbCB6
ZXJvX3RhaWwgPSB0cnVlOworICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAg
ICAgICAgICAgICAgICsrY3VycmVudDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQg
PT0gZW5kIHx8ICFpc0RpZ2l0KCpjdXJyZW50LCByYWRpeCkpIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICB6ZXJvX3RhaWwgPSB6ZXJvX3RhaWwgJiYgKmN1cnJlbnQgPT0gJzAnOworICAgICAg
ICAgICAgICAgICAgICBleHBvbmVudCArPSByYWRpeF9sb2dfMjsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFhbGxvd190cmFpbGluZ19q
dW5rICYmIEFkdmFuY2VUb05vbnNwYWNlKCZjdXJyZW50LCBlbmQpKSB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaW50IG1pZGRsZV92YWx1ZSA9ICgxIDw8IChv
dmVyZmxvd19iaXRzX2NvdW50IC0gMSkpOworICAgICAgICAgICAgICAgIGlmIChkcm9wcGVkX2Jp
dHMgPiBtaWRkbGVfdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyKys7ICAvLyBS
b3VuZGluZyB1cC4KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRyb3BwZWRfYml0cyA9PSBt
aWRkbGVfdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUm91bmRpbmcgdG8gZXZlbiB0
byBjb25zaXN0ZW5jeSB3aXRoIGRlY2ltYWxzOiBoYWxmLXdheSBjYXNlIHJvdW5kcworICAgICAg
ICAgICAgICAgICAgICAvLyB1cCBpZiBzaWduaWZpY2FudCBwYXJ0IGlzIG9kZCBhbmQgZG93biBv
dGhlcndpc2UuCisgICAgICAgICAgICAgICAgICAgIGlmICgobnVtYmVyICYgMSkgIT0gMCB8fCAh
emVyb190YWlsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIrKzsgIC8vIFJvdW5k
aW5nIHVwLgorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFJvdW5kaW5nIHVwIG1heSBjYXVzZSBvdmVy
Zmxvdy4KKyAgICAgICAgICAgICAgICBpZiAoKG51bWJlciAmICgoaW50NjRfdCkxIDw8IDUzKSkg
IT0gMCkgeworICAgICAgICAgICAgICAgICAgICBleHBvbmVudCsrOworICAgICAgICAgICAgICAg
ICAgICBudW1iZXIgPj49IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKytjdXJyZW50OworICAgICAgICB9IHdo
aWxlIChjdXJyZW50ICE9IGVuZCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQobnVtYmVyIDwg
KChpbnQ2NF90KTEgPDwgNTMpKTsKKyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludDY0X3Q+
KHN0YXRpY19jYXN0PGRvdWJsZT4obnVtYmVyKSkgPT0gbnVtYmVyKTsKKyAgICAgICAgCisgICAg
ICAgICp0cmFpbGluZ19wb2ludGVyID0gY3VycmVudDsKKyAgICAgICAgCisgICAgICAgIGlmIChl
eHBvbmVudCA9PSAwKSB7CisgICAgICAgICAgICBpZiAoc2lnbikgeworICAgICAgICAgICAgICAg
IGlmIChudW1iZXIgPT0gMCkgcmV0dXJuIC0wLjA7CisgICAgICAgICAgICAgICAgbnVtYmVyID0g
LW51bWJlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxk
b3VibGU+KG51bWJlcik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFTU0VSVChudW1i
ZXIgIT0gMCk7CisgICAgICAgIHJldHVybiBEb3VibGUoRGl5RnAobnVtYmVyLCBleHBvbmVudCkp
LnZhbHVlKCk7CisgICAgfQorICAgIAorICAgIAorICAgIGRvdWJsZSBTdHJpbmdUb0RvdWJsZUNv
bnZlcnRlcjo6U3RyaW5nVG9Eb3VibGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBpbnB1dCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGgsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHByb2Nlc3NlZF9j
aGFyYWN0ZXJzX2NvdW50KSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGN1cnJlbnQgPSBpbnB1dDsK
KyAgICAgICAgY29uc3QgY2hhciogZW5kID0gaW5wdXQgKyBsZW5ndGg7CisgICAgICAgIAorICAg
ICAgICAqcHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291bnQgPSAwOworICAgICAgICAKKyAgICAgICAg
Y29uc3QgYm9vbCBhbGxvd190cmFpbGluZ19qdW5rID0gKGZsYWdzXyAmIEFMTE9XX1RSQUlMSU5H
X0pVTkspICE9IDA7CisgICAgICAgIGNvbnN0IGJvb2wgYWxsb3dfbGVhZGluZ19zcGFjZXMgPSAo
ZmxhZ3NfICYgQUxMT1dfTEVBRElOR19TUEFDRVMpICE9IDA7CisgICAgICAgIGNvbnN0IGJvb2wg
YWxsb3dfdHJhaWxpbmdfc3BhY2VzID0gKGZsYWdzXyAmIEFMTE9XX1RSQUlMSU5HX1NQQUNFUykg
IT0gMDsKKyAgICAgICAgY29uc3QgYm9vbCBhbGxvd19zcGFjZXNfYWZ0ZXJfc2lnbiA9IChmbGFn
c18gJiBBTExPV19TUEFDRVNfQUZURVJfU0lHTikgIT0gMDsKKyAgICAgICAgCisgICAgICAgIC8v
IFRvIG1ha2Ugc3VyZSB0aGF0IGl0ZXJhdG9yIGRlcmVmZXJlbmNpbmcgaXMgdmFsaWQgdGhlIGZv
bGxvd2luZworICAgICAgICAvLyBjb252ZW50aW9uIGlzIHVzZWQ6CisgICAgICAgIC8vIDEuIEVh
Y2ggJysrY3VycmVudCcgc3RhdGVtZW50IGlzIGZvbGxvd2VkIGJ5IGNoZWNrIGZvciBlcXVhbGl0
eSB0byAnZW5kJy4KKyAgICAgICAgLy8gMi4gSWYgQWR2YW5jZVRvTm9uc3BhY2UgcmV0dXJuZWQg
ZmFsc2UgdGhlbiBjdXJyZW50ID09IGVuZC4KKyAgICAgICAgLy8gMy4gSWYgJ2N1cnJlbnQnIGJl
Y29tZXMgZXF1YWwgdG8gJ2VuZCcgdGhlIGZ1bmN0aW9uIHJldHVybnMgb3IgZ29lcyB0bworICAg
ICAgICAvLyAncGFyc2luZ19kb25lJy4KKyAgICAgICAgLy8gNC4gJ2N1cnJlbnQnIGlzIG5vdCBk
ZXJlZmVyZW5jZWQgYWZ0ZXIgdGhlICdwYXJzaW5nX2RvbmUnIGxhYmVsLgorICAgICAgICAvLyA1
LiBDb2RlIGJlZm9yZSAncGFyc2luZ19kb25lJyBtYXkgcmVseSBvbiAnY3VycmVudCAhPSBlbmQn
LgorICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQpIHJldHVybiBlbXB0eV9zdHJpbmdfdmFsdWVf
OworICAgICAgICAKKyAgICAgICAgaWYgKGFsbG93X2xlYWRpbmdfc3BhY2VzIHx8IGFsbG93X3Ry
YWlsaW5nX3NwYWNlcykgeworICAgICAgICAgICAgaWYgKCFBZHZhbmNlVG9Ob25zcGFjZSgmY3Vy
cmVudCwgZW5kKSkgeworICAgICAgICAgICAgICAgICpwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3Vu
dCA9IGN1cnJlbnQgLSBpbnB1dDsKKyAgICAgICAgICAgICAgICByZXR1cm4gZW1wdHlfc3RyaW5n
X3ZhbHVlXzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghYWxsb3dfbGVhZGluZ19z
cGFjZXMgJiYgKGlucHV0ICE9IGN1cnJlbnQpKSB7CisgICAgICAgICAgICAgICAgLy8gTm8gbGVh
ZGluZyBzcGFjZXMgYWxsb3dlZCwgYnV0IEFkdmFuY2VUb05vbnNwYWNlIG1vdmVkIGZvcndhcmQu
CisgICAgICAgICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gVGhlIGxvbmdlc3QgZm9ybSBvZiBz
aW1wbGlmaWVkIG51bWJlciBpczogIi08c2lnbmlmaWNhbnQgZGlnaXRzPi4xZVhYWFwwIi4KKyAg
ICAgICAgY29uc3QgaW50IGtCdWZmZXJTaXplID0ga01heFNpZ25pZmljYW50RGlnaXRzICsgMTA7
CisgICAgICAgIGNoYXIgYnVmZmVyW2tCdWZmZXJTaXplXTsgIC8vIE5PTElOVDogc2l6ZSBpcyBr
bm93biBhdCBjb21waWxlIHRpbWUuCisgICAgICAgIGludCBidWZmZXJfcG9zID0gMDsKKyAgICAg
ICAgCisgICAgICAgIC8vIEV4cG9uZW50IHdpbGwgYmUgYWRqdXN0ZWQgaWYgaW5zaWduaWZpY2Fu
dCBkaWdpdHMgb2YgdGhlIGludGVnZXIgcGFydAorICAgICAgICAvLyBvciBpbnNpZ25pZmljYW50
IGxlYWRpbmcgemVyb3Mgb2YgdGhlIGZyYWN0aW9uYWwgcGFydCBhcmUgZHJvcHBlZC4KKyAgICAg
ICAgaW50IGV4cG9uZW50ID0gMDsKKyAgICAgICAgaW50IHNpZ25pZmljYW50X2RpZ2l0cyA9IDA7
CisgICAgICAgIGludCBpbnNpZ25pZmljYW50X2RpZ2l0cyA9IDA7CisgICAgICAgIGJvb2wgbm9u
emVyb19kaWdpdF9kcm9wcGVkID0gZmFsc2U7CisgICAgICAgIGJvb2wgZnJhY3Rpb25hbF9wYXJ0
ID0gZmFsc2U7CisgICAgICAgIAorICAgICAgICBib29sIHNpZ24gPSBmYWxzZTsKKyAgICAgICAg
CisgICAgICAgIGlmICgqY3VycmVudCA9PSAnKycgfHwgKmN1cnJlbnQgPT0gJy0nKSB7CisgICAg
ICAgICAgICBzaWduID0gKCpjdXJyZW50ID09ICctJyk7CisgICAgICAgICAgICArK2N1cnJlbnQ7
CisgICAgICAgICAgICBjb25zdCBjaGFyKiBuZXh0X25vbl9zcGFjZSA9IGN1cnJlbnQ7CisgICAg
ICAgICAgICAvLyBTa2lwIGZvbGxvd2luZyBzcGFjZXMgKGlmIGFsbG93ZWQpLgorICAgICAgICAg
ICAgaWYgKCFBZHZhbmNlVG9Ob25zcGFjZSgmbmV4dF9ub25fc3BhY2UsIGVuZCkpIHJldHVybiBq
dW5rX3N0cmluZ192YWx1ZV87CisgICAgICAgICAgICBpZiAoIWFsbG93X3NwYWNlc19hZnRlcl9z
aWduICYmIChjdXJyZW50ICE9IG5leHRfbm9uX3NwYWNlKSkgeworICAgICAgICAgICAgICAgIHJl
dHVybiBqdW5rX3N0cmluZ192YWx1ZV87CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjdXJy
ZW50ID0gbmV4dF9ub25fc3BhY2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChp
bmZpbml0eV9zeW1ib2xfICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGlmICgqY3VycmVudCA9PSBp
bmZpbml0eV9zeW1ib2xfWzBdKSB7CisgICAgICAgICAgICAgICAgaWYgKCFDb25zdW1lU3ViU3Ry
aW5nKCZjdXJyZW50LCBlbmQsIGluZmluaXR5X3N5bWJvbF8pKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghKGFsbG93X3RyYWlsaW5nX3NwYWNlcyB8
fCBhbGxvd190cmFpbGluZ19qdW5rKSAmJiAoY3VycmVudCAhPSBlbmQpKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGlmICghYWxsb3dfdHJhaWxpbmdfanVuayAmJiBBZHZhbmNlVG9Ob25z
cGFjZSgmY3VycmVudCwgZW5kKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4ganVua19z
dHJpbmdfdmFsdWVfOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoYnVmZmVyX3BvcyA9PSAwKTsKKyAgICAgICAgICAgICAgICAqcHJv
Y2Vzc2VkX2NoYXJhY3RlcnNfY291bnQgPSBjdXJyZW50IC0gaW5wdXQ7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHNpZ24gPyAtRG91YmxlOjpJbmZpbml0eSgpIDogRG91YmxlOjpJbmZpbml0eSgp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobmFuX3N5
bWJvbF8gIT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKCpjdXJyZW50ID09IG5hbl9zeW1ib2xf
WzBdKSB7CisgICAgICAgICAgICAgICAgaWYgKCFDb25zdW1lU3ViU3RyaW5nKCZjdXJyZW50LCBl
bmQsIG5hbl9zeW1ib2xfKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJp
bmdfdmFsdWVfOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBpZiAoIShhbGxvd190cmFpbGluZ19zcGFjZXMgfHwgYWxsb3dfdHJhaWxpbmdfanVu
aykgJiYgKGN1cnJlbnQgIT0gZW5kKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4ganVu
a19zdHJpbmdfdmFsdWVfOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
IWFsbG93X3RyYWlsaW5nX2p1bmsgJiYgQWR2YW5jZVRvTm9uc3BhY2UoJmN1cnJlbnQsIGVuZCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQVNTRVJUKGJ1
ZmZlcl9wb3MgPT0gMCk7CisgICAgICAgICAgICAgICAgKnByb2Nlc3NlZF9jaGFyYWN0ZXJzX2Nv
dW50ID0gY3VycmVudCAtIGlucHV0OworICAgICAgICAgICAgICAgIHJldHVybiBzaWduID8gLURv
dWJsZTo6TmFOKCkgOiBEb3VibGU6Ok5hTigpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBib29sIGxlYWRpbmdfemVybyA9IGZhbHNlOworICAgICAgICBpZiAo
KmN1cnJlbnQgPT0gJzAnKSB7CisgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgICAgICBp
ZiAoY3VycmVudCA9PSBlbmQpIHsKKyAgICAgICAgICAgICAgICAqcHJvY2Vzc2VkX2NoYXJhY3Rl
cnNfY291bnQgPSBjdXJyZW50IC0gaW5wdXQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNpZ25l
ZFplcm8oc2lnbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGxl
YWRpbmdfemVybyA9IHRydWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEl0IGNvdWxk
IGJlIGhleGFkZWNpbWFsIHZhbHVlLgorICAgICAgICAgICAgaWYgKChmbGFnc18gJiBBTExPV19I
RVgpICYmICgqY3VycmVudCA9PSAneCcgfHwgKmN1cnJlbnQgPT0gJ1gnKSkgeworICAgICAgICAg
ICAgICAgICsrY3VycmVudDsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQgfHwg
IWlzRGlnaXQoKmN1cnJlbnQsIDE2KSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4ganVu
a19zdHJpbmdfdmFsdWVfOyAgLy8gIjB4Ii4KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdGFpbF9wb2ludGVyID0gTlVMTDsK
KyAgICAgICAgICAgICAgICBkb3VibGUgcmVzdWx0ID0gUmFkaXhTdHJpbmdUb0RvdWJsZTw0Pihj
dXJyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaWduLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFsbG93X3RyYWlsaW5nX2p1bmssCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVua19zdHJpbmdfdmFsdWVfLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0
YWlsX3BvaW50ZXIpOworICAgICAgICAgICAgICAgIGlmICh0YWlsX3BvaW50ZXIgIT0gTlVMTCkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoYWxsb3dfdHJhaWxpbmdfc3BhY2VzKSBBZHZhbmNl
VG9Ob25zcGFjZSgmdGFpbF9wb2ludGVyLCBlbmQpOworICAgICAgICAgICAgICAgICAgICAqcHJv
Y2Vzc2VkX2NoYXJhY3RlcnNfY291bnQgPSB0YWlsX3BvaW50ZXIgLSBpbnB1dDsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSWdub3JlIGxlYWRpbmcgemVyb3MgaW4gdGhl
IGludGVnZXIgcGFydC4KKyAgICAgICAgICAgIHdoaWxlICgqY3VycmVudCA9PSAnMCcpIHsKKyAg
ICAgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0g
ZW5kKSB7CisgICAgICAgICAgICAgICAgICAgICpwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCA9
IGN1cnJlbnQgLSBpbnB1dDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNpZ25lZFplcm8o
c2lnbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBib29sIG9jdGFsID0gbGVhZGluZ196ZXJvICYmIChmbGFnc18gJiBBTExP
V19PQ1RBTFMpICE9IDA7CisgICAgICAgIAorICAgICAgICAvLyBDb3B5IHNpZ25pZmljYW50IGRp
Z2l0cyBvZiB0aGUgaW50ZWdlciBwYXJ0IChpZiBhbnkpIHRvIHRoZSBidWZmZXIuCisgICAgICAg
IHdoaWxlICgqY3VycmVudCA+PSAnMCcgJiYgKmN1cnJlbnQgPD0gJzknKSB7CisgICAgICAgICAg
ICBpZiAoc2lnbmlmaWNhbnRfZGlnaXRzIDwga01heFNpZ25pZmljYW50RGlnaXRzKSB7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKGJ1ZmZlcl9wb3MgPCBrQnVmZmVyU2l6ZSk7CisgICAgICAgICAg
ICAgICAgYnVmZmVyW2J1ZmZlcl9wb3MrK10gPSBzdGF0aWNfY2FzdDxjaGFyPigqY3VycmVudCk7
CisgICAgICAgICAgICAgICAgc2lnbmlmaWNhbnRfZGlnaXRzKys7CisgICAgICAgICAgICAgICAg
Ly8gV2lsbCBsYXRlciBjaGVjayBpZiBpdCdzIGFuIG9jdGFsIGluIHRoZSBidWZmZXIuCisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGluc2lnbmlmaWNhbnRfZGlnaXRzKys7
ICAvLyBNb3ZlIHRoZSBkaWdpdCBpbnRvIHRoZSBleHBvbmVudGlhbCBwYXJ0LgorICAgICAgICAg
ICAgICAgIG5vbnplcm9fZGlnaXRfZHJvcHBlZCA9IG5vbnplcm9fZGlnaXRfZHJvcHBlZCB8fCAq
Y3VycmVudCAhPSAnMCc7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvY3RhbCA9IG9jdGFs
ICYmICpjdXJyZW50IDwgJzgnOworICAgICAgICAgICAgKytjdXJyZW50OworICAgICAgICAgICAg
aWYgKGN1cnJlbnQgPT0gZW5kKSBnb3RvIHBhcnNpbmdfZG9uZTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgaWYgKHNpZ25pZmljYW50X2RpZ2l0cyA9PSAwKSB7CisgICAgICAgICAgICBv
Y3RhbCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoKmN1cnJlbnQg
PT0gJy4nKSB7CisgICAgICAgICAgICBpZiAob2N0YWwgJiYgIWFsbG93X3RyYWlsaW5nX2p1bmsp
IHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87CisgICAgICAgICAgICBpZiAob2N0YWwpIGdvdG8g
cGFyc2luZ19kb25lOworICAgICAgICAgICAgCisgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAg
ICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2lnbmlm
aWNhbnRfZGlnaXRzID09IDAgJiYgIWxlYWRpbmdfemVybykgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIGdvdG8gcGFyc2luZ19kb25lOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHNpZ25pZmljYW50
X2RpZ2l0cyA9PSAwKSB7CisgICAgICAgICAgICAgICAgLy8gb2N0YWwgPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAvLyBJbnRlZ2VyIHBhcnQgY29uc2lzdHMgb2YgMCBvciBpcyBhYnNlbnQuIFNp
Z25pZmljYW50IGRpZ2l0cyBzdGFydCBhZnRlcgorICAgICAgICAgICAgICAgIC8vIGxlYWRpbmcg
emVyb3MgKGlmIGFueSkuCisgICAgICAgICAgICAgICAgd2hpbGUgKCpjdXJyZW50ID09ICcwJykg
eworICAgICAgICAgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgICAgICAgICAgICAgIGlm
IChjdXJyZW50ID09IGVuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgKnByb2Nlc3NlZF9j
aGFyYWN0ZXJzX2NvdW50ID0gY3VycmVudCAtIGlucHV0OworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFNpZ25lZFplcm8oc2lnbik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgZXhwb25lbnQtLTsgIC8vIE1vdmUgdGhpcyAwIGludG8gdGhlIGV4cG9u
ZW50LgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgLy8gV2UgZG9uJ3QgZW1pdCBhICcuJywgYnV0IGFkanVzdCB0aGUgZXhwb25lbnQg
aW5zdGVhZC4KKyAgICAgICAgICAgIGZyYWN0aW9uYWxfcGFydCA9IHRydWU7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgZnJhY3Rpb25hbCBwYXJ0LgorICAgICAgICAg
ICAgd2hpbGUgKCpjdXJyZW50ID49ICcwJyAmJiAqY3VycmVudCA8PSAnOScpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoc2lnbmlmaWNhbnRfZGlnaXRzIDwga01heFNpZ25pZmljYW50RGlnaXRzKSB7
CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChidWZmZXJfcG9zIDwga0J1ZmZlclNpemUpOwor
ICAgICAgICAgICAgICAgICAgICBidWZmZXJbYnVmZmVyX3BvcysrXSA9IHN0YXRpY19jYXN0PGNo
YXI+KCpjdXJyZW50KTsKKyAgICAgICAgICAgICAgICAgICAgc2lnbmlmaWNhbnRfZGlnaXRzKys7
CisgICAgICAgICAgICAgICAgICAgIGV4cG9uZW50LS07CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlIGluc2lnbmlmaWNhbnQgZGlnaXRzIGlu
IHRoZSBmcmFjdGlvbmFsIHBhcnQuCisgICAgICAgICAgICAgICAgICAgIG5vbnplcm9fZGlnaXRf
ZHJvcHBlZCA9IG5vbnplcm9fZGlnaXRfZHJvcHBlZCB8fCAqY3VycmVudCAhPSAnMCc7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICsrY3VycmVudDsKKyAgICAgICAgICAgICAg
ICBpZiAoY3VycmVudCA9PSBlbmQpIGdvdG8gcGFyc2luZ19kb25lOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWxlYWRpbmdfemVybyAmJiBleHBvbmVu
dCA9PSAwICYmIHNpZ25pZmljYW50X2RpZ2l0cyA9PSAwKSB7CisgICAgICAgICAgICAvLyBJZiBs
ZWFkaW5nX3plcm9zIGlzIHRydWUgdGhlbiB0aGUgc3RyaW5nIGNvbnRhaW5zIHplcm9zLgorICAg
ICAgICAgICAgLy8gSWYgZXhwb25lbnQgPCAwIHRoZW4gc3RyaW5nIHdhcyBbKy1dXC4wKi4uLgor
ICAgICAgICAgICAgLy8gSWYgc2lnbmlmaWNhbnRfZGlnaXRzICE9IDAgdGhlIHN0cmluZyBpcyBu
b3QgZXF1YWwgdG8gMC4KKyAgICAgICAgICAgIC8vIE90aGVyd2lzZSB0aGVyZSBhcmUgbm8gZGln
aXRzIGluIHRoZSBzdHJpbmcuCisgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVf
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBQYXJzZSBleHBvbmVudGlhbCBwYXJ0
LgorICAgICAgICBpZiAoKmN1cnJlbnQgPT0gJ2UnIHx8ICpjdXJyZW50ID09ICdFJykgeworICAg
ICAgICAgICAgaWYgKG9jdGFsICYmICFhbGxvd190cmFpbGluZ19qdW5rKSByZXR1cm4ganVua19z
dHJpbmdfdmFsdWVfOworICAgICAgICAgICAgaWYgKG9jdGFsKSBnb3RvIHBhcnNpbmdfZG9uZTsK
KyAgICAgICAgICAgICsrY3VycmVudDsKKyAgICAgICAgICAgIGlmIChjdXJyZW50ID09IGVuZCkg
eworICAgICAgICAgICAgICAgIGlmIChhbGxvd190cmFpbGluZ19qdW5rKSB7CisgICAgICAgICAg
ICAgICAgICAgIGdvdG8gcGFyc2luZ19kb25lOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgY2hhciBzaWduID0gJysnOworICAg
ICAgICAgICAgaWYgKCpjdXJyZW50ID09ICcrJyB8fCAqY3VycmVudCA9PSAnLScpIHsKKyAgICAg
ICAgICAgICAgICBzaWduID0gc3RhdGljX2Nhc3Q8Y2hhcj4oKmN1cnJlbnQpOworICAgICAgICAg
ICAgICAgICsrY3VycmVudDsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGFsbG93X3RyYWlsaW5nX2p1bmspIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGdvdG8gcGFyc2luZ19kb25lOworICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVl
XzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gZW5kIHx8ICpjdXJy
ZW50IDwgJzAnIHx8ICpjdXJyZW50ID4gJzknKSB7CisgICAgICAgICAgICAgICAgaWYgKGFsbG93
X3RyYWlsaW5nX2p1bmspIHsKKyAgICAgICAgICAgICAgICAgICAgZ290byBwYXJzaW5nX2RvbmU7
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGp1
bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSBJTlRfTUFYIC8g
MjsKKyAgICAgICAgICAgIEFTU0VSVCgtbWF4X2V4cG9uZW50IC8gMiA8PSBleHBvbmVudCAmJiBl
eHBvbmVudCA8PSBtYXhfZXhwb25lbnQgLyAyKTsKKyAgICAgICAgICAgIGludCBudW0gPSAwOwor
ICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIC8vIENoZWNrIG92ZXJmbG93LgorICAg
ICAgICAgICAgICAgIGludCBkaWdpdCA9ICpjdXJyZW50IC0gJzAnOworICAgICAgICAgICAgICAg
IGlmIChudW0gPj0gbWF4X2V4cG9uZW50IC8gMTAKKyAgICAgICAgICAgICAgICAgICAgJiYgIShu
dW0gPT0gbWF4X2V4cG9uZW50IC8gMTAgJiYgZGlnaXQgPD0gbWF4X2V4cG9uZW50ICUgMTApKSB7
CisgICAgICAgICAgICAgICAgICAgIG51bSA9IG1heF9leHBvbmVudDsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBudW0gPSBudW0gKiAxMCArIGRpZ2l0Owor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgICAg
ICB9IHdoaWxlIChjdXJyZW50ICE9IGVuZCAmJiAqY3VycmVudCA+PSAnMCcgJiYgKmN1cnJlbnQg
PD0gJzknKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZXhwb25lbnQgKz0gKHNpZ24gPT0g
Jy0nID8gLW51bSA6IG51bSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghKGFs
bG93X3RyYWlsaW5nX3NwYWNlcyB8fCBhbGxvd190cmFpbGluZ19qdW5rKSAmJiAoY3VycmVudCAh
PSBlbmQpKSB7CisgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAg
ICB9CisgICAgICAgIGlmICghYWxsb3dfdHJhaWxpbmdfanVuayAmJiBBZHZhbmNlVG9Ob25zcGFj
ZSgmY3VycmVudCwgZW5kKSkgeworICAgICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVl
XzsKKyAgICAgICAgfQorICAgICAgICBpZiAoYWxsb3dfdHJhaWxpbmdfc3BhY2VzKSB7CisgICAg
ICAgICAgICBBZHZhbmNlVG9Ob25zcGFjZSgmY3VycmVudCwgZW5kKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICBwYXJzaW5nX2RvbmU6CisgICAgICAgIGV4cG9uZW50ICs9IGluc2lnbmlmaWNh
bnRfZGlnaXRzOworICAgICAgICAKKyAgICAgICAgaWYgKG9jdGFsKSB7CisgICAgICAgICAgICBk
b3VibGUgcmVzdWx0OworICAgICAgICAgICAgY29uc3QgY2hhciogdGFpbF9wb2ludGVyID0gTlVM
TDsKKyAgICAgICAgICAgIHJlc3VsdCA9IFJhZGl4U3RyaW5nVG9Eb3VibGU8Mz4oYnVmZmVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKyBidWZm
ZXJfcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWdu
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd190cmFp
bGluZ19qdW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
dW5rX3N0cmluZ192YWx1ZV8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZ0YWlsX3BvaW50ZXIpOworICAgICAgICAgICAgQVNTRVJUKHRhaWxfcG9pbnRlciAh
PSBOVUxMKTsKKyAgICAgICAgICAgICpwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCA9IGN1cnJl
bnQgLSBpbnB1dDsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGlmIChub256ZXJvX2RpZ2l0X2Ryb3BwZWQpIHsKKyAgICAgICAgICAgIGJ1
ZmZlcltidWZmZXJfcG9zKytdID0gJzEnOworICAgICAgICAgICAgZXhwb25lbnQtLTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJUKGJ1ZmZlcl9wb3MgPCBrQnVmZmVyU2l6ZSk7
CisgICAgICAgIGJ1ZmZlcltidWZmZXJfcG9zXSA9ICdcMCc7CisgICAgICAgIAorICAgICAgICBk
b3VibGUgY29udmVydGVkID0gU3RydG9kKFZlY3Rvcjxjb25zdCBjaGFyPihidWZmZXIsIGJ1ZmZl
cl9wb3MpLCBleHBvbmVudCk7CisgICAgICAgICpwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCA9
IGN1cnJlbnQgLSBpbnB1dDsKKyAgICAgICAgcmV0dXJuIHNpZ24/IC1jb252ZXJ0ZWQ6IGNvbnZl
cnRlZDsKKyAgICB9CisgICAgCit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kb3VibGUtY29udmVyc2lv
bi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNDVjMzBkNzkwYzZmNGQ2ODNmOTYzMjdiN2I1MTdmOWU2ZmIwNTBlNwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kb3VibGUtY29u
dmVyc2lvbi5oCkBAIC0wLDAgKzEsNDk4IEBACisvLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJv
amVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8v
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
KyNpZm5kZWYgRE9VQkxFX0NPTlZFUlNJT05fRE9VQkxFX0NPTlZFUlNJT05fSF8KKyNkZWZpbmUg
RE9VQkxFX0NPTlZFUlNJT05fRE9VQkxFX0NPTlZFUlNJT05fSF8KKworI2luY2x1ZGUgInV0aWxz
LmgiCisKK25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgY2xhc3MgRG91
YmxlVG9TdHJpbmdDb252ZXJ0ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgLy8gV2hlbiBjYWxs
aW5nIFRvRml4ZWQgd2l0aCBhIGRvdWJsZSA+IDEwXmtNYXhGaXhlZERpZ2l0c0JlZm9yZVBvaW50
CisgICAgICAgIC8vIG9yIGEgcmVxdWVzdGVkX2RpZ2l0cyBwYXJhbWV0ZXIgPiBrTWF4Rml4ZWRE
aWdpdHNBZnRlclBvaW50IHRoZW4gdGhlCisgICAgICAgIC8vIGZ1bmN0aW9uIHJldHVybnMgZmFs
c2UuCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQga01heEZpeGVkRGlnaXRzQmVmb3JlUG9pbnQg
PSA2MDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBrTWF4Rml4ZWREaWdpdHNBZnRlclBvaW50
ID0gNjA7CisgICAgICAgIAorICAgICAgICAvLyBXaGVuIGNhbGxpbmcgVG9FeHBvbmVudGlhbCB3
aXRoIGEgcmVxdWVzdGVkX2RpZ2l0cworICAgICAgICAvLyBwYXJhbWV0ZXIgPiBrTWF4RXhwb25l
bnRpYWxEaWdpdHMgdGhlbiB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZS4KKyAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBrTWF4RXhwb25lbnRpYWxEaWdpdHMgPSAxMjA7CisgICAgICAgIAorICAg
ICAgICAvLyBXaGVuIGNhbGxpbmcgVG9QcmVjaXNpb24gd2l0aCBhIHJlcXVlc3RlZF9kaWdpdHMK
KyAgICAgICAgLy8gcGFyYW1ldGVyIDwga01pblByZWNpc2lvbkRpZ2l0cyBvciByZXF1ZXN0ZWRf
ZGlnaXRzID4ga01heFByZWNpc2lvbkRpZ2l0cworICAgICAgICAvLyB0aGVuIHRoZSBmdW5jdGlv
biByZXR1cm5zIGZhbHNlLgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtNaW5QcmVjaXNpb25E
aWdpdHMgPSAxOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtNYXhQcmVjaXNpb25EaWdpdHMg
PSAxMjA7CisgICAgICAgIAorICAgICAgICBlbnVtIEZsYWdzIHsKKyAgICAgICAgICAgIE5PX0ZM
QUdTID0gMCwKKyAgICAgICAgICAgIEVNSVRfUE9TSVRJVkVfRVhQT05FTlRfU0lHTiA9IDEsCisg
ICAgICAgICAgICBFTUlUX1RSQUlMSU5HX0RFQ0lNQUxfUE9JTlQgPSAyLAorICAgICAgICAgICAg
RU1JVF9UUkFJTElOR19aRVJPX0FGVEVSX1BPSU5UID0gNCwKKyAgICAgICAgICAgIFVOSVFVRV9a
RVJPID0gOAorICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgLy8gRmxhZ3Mgc2hvdWxkIGJl
IGEgYml0LW9yIGNvbWJpbmF0aW9uIG9mIHRoZSBwb3NzaWJsZSBGbGFncy1lbnVtLgorICAgICAg
ICAvLyAgLSBOT19GTEFHUzogbm8gc3BlY2lhbCBmbGFncy4KKyAgICAgICAgLy8gIC0gRU1JVF9Q
T1NJVElWRV9FWFBPTkVOVF9TSUdOOiB3aGVuIHRoZSBudW1iZXIgaXMgY29udmVydGVkIGludG8g
ZXhwb25lbnQKKyAgICAgICAgLy8gICAgZm9ybSwgZW1pdHMgYSAnKycgZm9yIHBvc2l0aXZlIGV4
cG9uZW50cy4gRXhhbXBsZTogMS4yZSsyLgorICAgICAgICAvLyAgLSBFTUlUX1RSQUlMSU5HX0RF
Q0lNQUxfUE9JTlQ6IHdoZW4gdGhlIGlucHV0IG51bWJlciBpcyBhbiBpbnRlZ2VyIGFuZCBpcwor
ICAgICAgICAvLyAgICBjb252ZXJ0ZWQgaW50byBkZWNpbWFsIGZvcm1hdCB0aGVuIGEgdHJhaWxp
bmcgZGVjaW1hbCBwb2ludCBpcyBhcHBlbmRlZC4KKyAgICAgICAgLy8gICAgRXhhbXBsZTogMjM0
NS4wIGlzIGNvbnZlcnRlZCB0byAiMjM0NS4iLgorICAgICAgICAvLyAgLSBFTUlUX1RSQUlMSU5H
X1pFUk9fQUZURVJfUE9JTlQ6IGluIGFkZGl0aW9uIHRvIGEgdHJhaWxpbmcgZGVjaW1hbCBwb2lu
dAorICAgICAgICAvLyAgICBlbWl0cyBhIHRyYWlsaW5nICcwJy1jaGFyYWN0ZXIuIFRoaXMgZmxh
ZyByZXF1aXJlcyB0aGUKKyAgICAgICAgLy8gICAgRVhNSVRfVFJBSUxJTkdfREVDSU1BTF9QT0lO
VCBmbGFnLgorICAgICAgICAvLyAgICBFeGFtcGxlOiAyMzQ1LjAgaXMgY29udmVydGVkIHRvICIy
MzQ1LjAiLgorICAgICAgICAvLyAgLSBVTklRVUVfWkVSTzogIi0wLjAiIGlzIGNvbnZlcnRlZCB0
byAiMC4wIi4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSW5maW5pdHkgc3ltYm9sIGFuZCBuYW5f
c3ltYm9sIHByb3ZpZGUgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3IgdGhlc2UKKyAgICAg
ICAgLy8gc3BlY2lhbCB2YWx1ZXMuIElmIHRoZSBzdHJpbmcgaXMgTlVMTCBhbmQgdGhlIHNwZWNp
YWwgdmFsdWUgaXMgZW5jb3VudGVyZWQKKyAgICAgICAgLy8gdGhlbiB0aGUgY29udmVyc2lvbiBm
dW5jdGlvbnMgcmV0dXJuIGZhbHNlLgorICAgICAgICAvLworICAgICAgICAvLyBUaGUgZXhwb25l
bnRfY2hhcmFjdGVyIGlzIHVzZWQgaW4gZXhwb25lbnRpYWwgcmVwcmVzZW50YXRpb25zLiBJdCBp
cworICAgICAgICAvLyB1c3VhbGx5ICdlJyBvciAnRScuCisgICAgICAgIC8vCisgICAgICAgIC8v
IFdoZW4gY29udmVydGluZyB0byB0aGUgc2hvcnRlc3QgcmVwcmVzZW50YXRpb24gdGhlIGNvbnZl
cnRlciB3aWxsCisgICAgICAgIC8vIHJlcHJlc2VudCBpbnB1dCBudW1iZXJzIGluIGRlY2ltYWwg
Zm9ybWF0IGlmIHRoZXkgYXJlIGluIHRoZSBpbnRlcnZhbAorICAgICAgICAvLyBbMTBeZGVjaW1h
bF9pbl9zaG9ydGVzdF9sb3c7IDEwXmRlY2ltYWxfaW5fc2hvcnRlc3RfaGlnaFsKKyAgICAgICAg
Ly8gICAgKGxvd2VyIGJvdW5kYXJ5IGluY2x1ZGVkLCBncmVhdGVyIGJvdW5kYXJ5IGV4Y2x1ZGVk
KS4KKyAgICAgICAgLy8gRXhhbXBsZTogd2l0aCBkZWNpbWFsX2luX3Nob3J0ZXN0X2xvdyA9IC02
IGFuZAorICAgICAgICAvLyAgICAgICAgICAgICAgIGRlY2ltYWxfaW5fc2hvcnRlc3RfaGlnaCA9
IDIxOgorICAgICAgICAvLyAgIFRvU2hvcnRlc3QoMC4wMDAwMDEpICAtPiAiMC4wMDAwMDEiCisg
ICAgICAgIC8vICAgVG9TaG9ydGVzdCgwLjAwMDAwMDEpIC0+ICIxZS03IgorICAgICAgICAvLyAg
IFRvU2hvcnRlc3QoMTExMTExMTExMTExMTExMTExMTExLjApICAtPiAiMTExMTExMTExMTExMTEx
MTEwMDAwIgorICAgICAgICAvLyAgIFRvU2hvcnRlc3QoMTAwMDAwMDAwMDAwMDAwMDAwMDAwLjAp
ICAtPiAiMTAwMDAwMDAwMDAwMDAwMDAwMDAwIgorICAgICAgICAvLyAgIFRvU2hvcnRlc3QoMTEx
MTExMTExMTExMTExMTExMTExMS4wKSAtPiAiMS4xMTExMTExMTExMTExMTExZSsyMSIKKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gV2hlbiBjb252ZXJ0aW5nIHRvIHByZWNpc2lvbiBtb2RlIHRoZSBj
b252ZXJ0ZXIgbWF5IGFkZAorICAgICAgICAvLyBtYXhfbGVhZGluZ19wYWRkaW5nX3plcm9lcyBi
ZWZvcmUgcmV0dXJuaW5nIHRoZSBudW1iZXIgaW4gZXhwb25lbnRpYWwKKyAgICAgICAgLy8gZm9y
bWF0LgorICAgICAgICAvLyBFeGFtcGxlIHdpdGggbWF4X2xlYWRpbmdfcGFkZGluZ196ZXJvZXNf
aW5fcHJlY2lzaW9uX21vZGUgPSA2LgorICAgICAgICAvLyAgIFRvUHJlY2lzaW9uKDAuMDAwMDAx
MjM0NSwgMikgLT4gIjAuMDAwMDAxMiIKKyAgICAgICAgLy8gICBUb1ByZWNpc2lvbigwLjAwMDAw
MDEyMzQ1LCAyKSAtPiAiMS4yZS03IgorICAgICAgICAvLyBTaW1pbGFyaWx5IHRoZSBjb252ZXJ0
ZXIgbWF5IGFkZCB1cCB0bworICAgICAgICAvLyBtYXhfdHJhaWxpbmdfcGFkZGluZ196ZXJvZXNf
aW5fcHJlY2lzaW9uX21vZGUgaW4gcHJlY2lzaW9uIG1vZGUgdG8gYXZvaWQKKyAgICAgICAgLy8g
cmV0dXJuaW5nIGFuIGV4cG9uZW50aWFsIHJlcHJlc2VudGF0aW9uLiBBIHplcm8gYWRkZWQgYnkg
dGhlCisgICAgICAgIC8vIEVNSVRfVFJBSUxJTkdfWkVST19BRlRFUl9QT0lOVCBmbGFnIGlzIGNv
dW50ZWQgZm9yIHRoaXMgbGltaXQuCisgICAgICAgIC8vIEV4YW1wbGVzIGZvciBtYXhfdHJhaWxp
bmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGUgPSAxOgorICAgICAgICAvLyAgIFRv
UHJlY2lzaW9uKDIzMC4wLCAyKSAtPiAiMjMwIgorICAgICAgICAvLyAgIFRvUHJlY2lzaW9uKDIz
MC4wLCAyKSAtPiAiMjMwLiIgIHdpdGggRU1JVF9UUkFJTElOR19ERUNJTUFMX1BPSU5ULgorICAg
ICAgICAvLyAgIFRvUHJlY2lzaW9uKDIzMC4wLCAyKSAtPiAiMi4zZTIiIHdpdGggRU1JVF9UUkFJ
TElOR19aRVJPX0FGVEVSX1BPSU5ULgorICAgICAgICBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcihp
bnQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGlu
ZmluaXR5X3N5bWJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciogbmFuX3N5bWJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBleHBv
bmVudF9jaGFyYWN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZWNp
bWFsX2luX3Nob3J0ZXN0X2xvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGRlY2ltYWxfaW5fc2hvcnRlc3RfaGlnaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IG1heF9sZWFkaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2RlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWF4X3RyYWlsaW5nX3BhZGRpbmdfemVy
b2VzX2luX3ByZWNpc2lvbl9tb2RlKQorICAgICAgICA6IGZsYWdzXyhmbGFncyksCisgICAgICAg
IGluZmluaXR5X3N5bWJvbF8oaW5maW5pdHlfc3ltYm9sKSwKKyAgICAgICAgbmFuX3N5bWJvbF8o
bmFuX3N5bWJvbCksCisgICAgICAgIGV4cG9uZW50X2NoYXJhY3Rlcl8oZXhwb25lbnRfY2hhcmFj
dGVyKSwKKyAgICAgICAgZGVjaW1hbF9pbl9zaG9ydGVzdF9sb3dfKGRlY2ltYWxfaW5fc2hvcnRl
c3RfbG93KSwKKyAgICAgICAgZGVjaW1hbF9pbl9zaG9ydGVzdF9oaWdoXyhkZWNpbWFsX2luX3No
b3J0ZXN0X2hpZ2gpLAorICAgICAgICBtYXhfbGVhZGluZ19wYWRkaW5nX3plcm9lc19pbl9wcmVj
aXNpb25fbW9kZV8oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYXhfbGVhZGluZ19wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZSks
CisgICAgICAgIG1heF90cmFpbGluZ19wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZV8o
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWF4X3RyYWlsaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2RlKSB7CisgICAgICAg
ICAgICAvLyBXaGVuICd0cmFpbGluZyB6ZXJvIGFmdGVyIHRoZSBwb2ludCcgaXMgc2V0LCB0aGVu
ICd0cmFpbGluZyBwb2ludCcKKyAgICAgICAgICAgIC8vIG11c3QgYmUgc2V0IHRvby4KKyAgICAg
ICAgICAgIEFTU0VSVCgoKGZsYWdzICYgRU1JVF9UUkFJTElOR19ERUNJTUFMX1BPSU5UKSAhPSAw
KSB8fAorICAgICAgICAgICAgICAgICAgICEoKGZsYWdzICYgRU1JVF9UUkFJTElOR19aRVJPX0FG
VEVSX1BPSU5UKSAhPSAwKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFJldHVy
bnMgYSBjb252ZXJ0ZXIgZm9sbG93aW5nIHRoZSBFY21hU2NyaXB0IHNwZWNpZmljYXRpb24uCisg
ICAgICAgIHN0YXRpYyBjb25zdCBEb3VibGVUb1N0cmluZ0NvbnZlcnRlciYgRWNtYVNjcmlwdENv
bnZlcnRlcigpOworICAgICAgICAKKyAgICAgICAgLy8gQ29tcHV0ZXMgdGhlIHNob3J0ZXN0IHN0
cmluZyBvZiBkaWdpdHMgdGhhdCBjb3JyZWN0bHkgcmVwcmVzZW50IHRoZSBpbnB1dAorICAgICAg
ICAvLyBudW1iZXIuIERlcGVuZGluZyBvbiBkZWNpbWFsX2luX3Nob3J0ZXN0X2xvdyBhbmQgZGVj
aW1hbF9pbl9zaG9ydGVzdF9oaWdoCisgICAgICAgIC8vIChzZWUgY29uc3RydWN0b3IpIGl0IHRo
ZW4gZWl0aGVyIHJldHVybnMgYSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uLCBvciBhbgorICAgICAg
ICAvLyBleHBvbmVudGlhbCByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgLy8gRXhhbXBsZSB3aXRo
IGRlY2ltYWxfaW5fc2hvcnRlc3RfbG93ID0gLTYsCisgICAgICAgIC8vICAgICAgICAgICAgICBk
ZWNpbWFsX2luX3Nob3J0ZXN0X2hpZ2ggPSAyMSwKKyAgICAgICAgLy8gICAgICAgICAgICAgIEVN
SVRfUE9TSVRJVkVfRVhQT05FTlRfU0lHTiBhY3RpdmF0ZWQsIGFuZAorICAgICAgICAvLyAgICAg
ICAgICAgICAgRU1JVF9UUkFJTElOR19ERUNJTUFMX1BPSU5UIGRlYWN0aXZlZDoKKyAgICAgICAg
Ly8gICBUb1Nob3J0ZXN0KDAuMDAwMDAxKSAgLT4gIjAuMDAwMDAxIgorICAgICAgICAvLyAgIFRv
U2hvcnRlc3QoMC4wMDAwMDAxKSAtPiAiMWUtNyIKKyAgICAgICAgLy8gICBUb1Nob3J0ZXN0KDEx
MTExMTExMTExMTExMTExMTExMS4wKSAgLT4gIjExMTExMTExMTExMTExMTExMDAwMCIKKyAgICAg
ICAgLy8gICBUb1Nob3J0ZXN0KDEwMDAwMDAwMDAwMDAwMDAwMDAwMC4wKSAgLT4gIjEwMDAwMDAw
MDAwMDAwMDAwMDAwMCIKKyAgICAgICAgLy8gICBUb1Nob3J0ZXN0KDExMTExMTExMTExMTExMTEx
MTExMTEuMCkgLT4gIjEuMTExMTExMTExMTExMTExMWUrMjEiCisgICAgICAgIC8vCisgICAgICAg
IC8vIE5vdGU6IHRoZSBjb252ZXJzaW9uIG1heSByb3VuZCB0aGUgb3V0cHV0IGlmIHRoZSByZXR1
cm5lZCBzdHJpbmcKKyAgICAgICAgLy8gaXMgYWNjdXJhdGUgZW5vdWdoIHRvIHVuaXF1ZWx5IGlk
ZW50aWZ5IHRoZSBpbnB1dC1udW1iZXIuCisgICAgICAgIC8vIEZvciBleGFtcGxlIHRoZSBtb3N0
IHByZWNpc2UgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRvdWJsZSA5ZTU5IGVxdWFscworICAgICAg
ICAvLyAiODk5OTk5OTk5OTk5OTk5OTE4NzY3MjI5NDQ5NzE3NjE5OTUzODEwMTMxMjczNjc0Njkw
NjU2MjA2ODQ4IiwgYnV0CisgICAgICAgIC8vIHRoZSBjb252ZXJ0ZXIgd2lsbCByZXR1cm4gdGhl
IHNob3J0ZXIgKGJ1dCBzdGlsbCBjb3JyZWN0KSAiOWU1OSIuCisgICAgICAgIC8vCisgICAgICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29udmVyc2lvbiBzdWNjZWVkcy4gVGhlIGNvbnZlcnNp
b24gYWx3YXlzIHN1Y2NlZWRzCisgICAgICAgIC8vIGV4Y2VwdCB3aGVuIHRoZSBpbnB1dCB2YWx1
ZSBpcyBzcGVjaWFsIGFuZCBubyBpbmZpbml0eV9zeW1ib2wgb3IKKyAgICAgICAgLy8gbmFuX3N5
bWJvbCBoYXMgYmVlbiBnaXZlbiB0byB0aGUgY29uc3RydWN0b3IuCisgICAgICAgIGJvb2wgVG9T
aG9ydGVzdChkb3VibGUgdmFsdWUsIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25z
dDsKKyAgICAgICAgCisgICAgICAgIAorICAgICAgICAvLyBDb21wdXRlcyBhIGRlY2ltYWwgcmVw
cmVzZW50YXRpb24gd2l0aCBhIGZpeGVkIG51bWJlciBvZiBkaWdpdHMgYWZ0ZXIgdGhlCisgICAg
ICAgIC8vIGRlY2ltYWwgcG9pbnQuIFRoZSBsYXN0IGVtaXR0ZWQgZGlnaXQgaXMgcm91bmRlZC4K
KyAgICAgICAgLy8KKyAgICAgICAgLy8gRXhhbXBsZXM6CisgICAgICAgIC8vICAgVG9GaXhlZCgz
LjEyLCAxKSAtPiAiMy4xIgorICAgICAgICAvLyAgIFRvRml4ZWQoMy4xNDE1LCAzKSAtPiAiMy4x
NDIiCisgICAgICAgIC8vICAgVG9GaXhlZCgxMjM0LjU2Nzg5LCA0KSAtPiAiMTIzNC41Njc5Igor
ICAgICAgICAvLyAgIFRvRml4ZWQoMS4yMywgNSkgLT4gIjEuMjMwMDAiCisgICAgICAgIC8vICAg
VG9GaXhlZCgwLjEsIDQpIC0+ICIwLjEwMDAiCisgICAgICAgIC8vICAgVG9GaXhlZCgxZTMwLCAy
KSAtPiAiMTAwMDAwMDAwMDAwMDAwMDAxOTg4NDYyNDgzODY1Ni4wMCIKKyAgICAgICAgLy8gICBU
b0ZpeGVkKDAuMSwgMzApIC0+ICIwLjEwMDAwMDAwMDAwMDAwMDAwNTU1MTExNTEyMzEyNiIKKyAg
ICAgICAgLy8gICBUb0ZpeGVkKDAuMSwgMTcpIC0+ICIwLjEwMDAwMDAwMDAwMDAwMDAxIgorICAg
ICAgICAvLworICAgICAgICAvLyBJZiByZXF1ZXN0ZWRfZGlnaXRzIGVxdWFscyAwLCB0aGVuIHRo
ZSB0YWlsIG9mIHRoZSByZXN1bHQgZGVwZW5kcyBvbgorICAgICAgICAvLyB0aGUgRU1JVF9UUkFJ
TElOR19ERUNJTUFMX1BPSU5UIGFuZCBFTUlUX1RSQUlMSU5HX1pFUk9fQUZURVJfUE9JTlQuCisg
ICAgICAgIC8vIEV4YW1wbGVzLCBmb3IgcmVxdWVzdGVkX2RpZ2l0cyA9PSAwLAorICAgICAgICAv
LyAgIGxldCBFTUlUX1RSQUlMSU5HX0RFQ0lNQUxfUE9JTlQgYW5kIEVNSVRfVFJBSUxJTkdfWkVS
T19BRlRFUl9QT0lOVCBiZQorICAgICAgICAvLyAgICAtIGZhbHNlIGFuZCBmYWxzZTogdGhlbiAx
MjMuNDUgLT4gMTIzCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjY3
OCAtPiAxCisgICAgICAgIC8vICAgIC0gdHJ1ZSBhbmQgZmFsc2U6IHRoZW4gMTIzLjQ1IC0+IDEy
My4KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgMC42NzggLT4gMS4KKyAg
ICAgICAgLy8gICAgLSB0cnVlIGFuZCB0cnVlOiB0aGVuIDEyMy40NSAtPiAxMjMuMAorICAgICAg
ICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNjc4IC0+IDEuMAorICAgICAgICAvLwor
ICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbnZlcnNpb24gc3VjY2VlZHMuIFRoZSBj
b252ZXJzaW9uIGFsd2F5cyBzdWNjZWVkcworICAgICAgICAvLyBleGNlcHQgZm9yIHRoZSBmb2xs
b3dpbmcgY2FzZXM6CisgICAgICAgIC8vICAgLSB0aGUgaW5wdXQgdmFsdWUgaXMgc3BlY2lhbCBh
bmQgbm8gaW5maW5pdHlfc3ltYm9sIG9yIG5hbl9zeW1ib2wgaGFzCisgICAgICAgIC8vICAgICBi
ZWVuIHByb3ZpZGVkIHRvIHRoZSBjb25zdHJ1Y3RvciwKKyAgICAgICAgLy8gICAtICd2YWx1ZScg
PiAxMF5rTWF4Rml4ZWREaWdpdHNCZWZvcmVQb2ludCwgb3IKKyAgICAgICAgLy8gICAtICdyZXF1
ZXN0ZWRfZGlnaXRzJyA+IGtNYXhGaXhlZERpZ2l0c0FmdGVyUG9pbnQuCisgICAgICAgIC8vIFRo
ZSBsYXN0IHR3byBjb25kaXRpb25zIGltcGx5IHRoYXQgdGhlIHJlc3VsdCB3aWxsIG5ldmVyIGNv
bnRhaW4gbW9yZSB0aGFuCisgICAgICAgIC8vIDEgKyBrTWF4Rml4ZWREaWdpdHNCZWZvcmVQb2lu
dCArIDEgKyBrTWF4Rml4ZWREaWdpdHNBZnRlclBvaW50IGNoYXJhY3RlcnMKKyAgICAgICAgLy8g
KG9uZSBhZGRpdGlvbmFsIGNoYXJhY3RlciBmb3IgdGhlIHNpZ24sIGFuZCBvbmUgZm9yIHRoZSBk
ZWNpbWFsIHBvaW50KS4KKyAgICAgICAgYm9vbCBUb0ZpeGVkKGRvdWJsZSB2YWx1ZSwKKyAgICAg
ICAgICAgICAgICAgICAgIGludCByZXF1ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAg
ICAgU3RyaW5nQnVpbGRlciogcmVzdWx0X2J1aWxkZXIpIGNvbnN0OworICAgICAgICAKKyAgICAg
ICAgLy8gQ29tcHV0ZXMgYSByZXByZXNlbnRhdGlvbiBpbiBleHBvbmVudGlhbCBmb3JtYXQgd2l0
aCByZXF1ZXN0ZWRfZGlnaXRzCisgICAgICAgIC8vIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50LiBU
aGUgbGFzdCBlbWl0dGVkIGRpZ2l0IGlzIHJvdW5kZWQuCisgICAgICAgIC8vIElmIHJlcXVlc3Rl
ZF9kaWdpdHMgZXF1YWxzIC0xLCB0aGVuIHRoZSBzaG9ydGVzdCBleHBvbmVudGlhbCByZXByZXNl
bnRhdGlvbgorICAgICAgICAvLyBpcyBjb21wdXRlZC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8g
RXhhbXBsZXMgd2l0aCBFTUlUX1BPU0lUSVZFX0VYUE9ORU5UX1NJR04gZGVhY3RpdmF0ZWQsIGFu
ZAorICAgICAgICAvLyAgICAgICAgICAgICAgIGV4cG9uZW50X2NoYXJhY3RlciBzZXQgdG8gJ2Un
LgorICAgICAgICAvLyAgIFRvRXhwb25lbnRpYWwoMy4xMiwgMSkgLT4gIjMuMWUwIgorICAgICAg
ICAvLyAgIFRvRXhwb25lbnRpYWwoNS4wLCAzKSAtPiAiNS4wMDBlMCIKKyAgICAgICAgLy8gICBU
b0V4cG9uZW50aWFsKDAuMDAxLCAyKSAtPiAiMS4wMGUtMyIKKyAgICAgICAgLy8gICBUb0V4cG9u
ZW50aWFsKDMuMTQxNSwgLTEpIC0+ICIzLjE0MTVlMCIKKyAgICAgICAgLy8gICBUb0V4cG9uZW50
aWFsKDMuMTQxNSwgNCkgLT4gIjMuMTQxNWUwIgorICAgICAgICAvLyAgIFRvRXhwb25lbnRpYWwo
My4xNDE1LCAzKSAtPiAiMy4xNDJlMCIKKyAgICAgICAgLy8gICBUb0V4cG9uZW50aWFsKDEyMzQ1
Njc4OTAwMDAwMCwgMykgLT4gIjEuMjM1ZTE0IgorICAgICAgICAvLyAgIFRvRXhwb25lbnRpYWwo
MTAwMDAwMDAwMDAwMDAwMDAxOTg4NDYyNDgzODY1Ni4wLCAtMSkgLT4gIjFlMzAiCisgICAgICAg
IC8vICAgVG9FeHBvbmVudGlhbCgxMDAwMDAwMDAwMDAwMDAwMDE5ODg0NjI0ODM4NjU2LjAsIDMy
KSAtPgorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICIxLjAwMDAwMDAwMDAwMDAwMDAx
OTg4NDYyNDgzODY1NjAwZTMwIgorICAgICAgICAvLyAgIFRvRXhwb25lbnRpYWwoMTIzNCwgMCkg
LT4gIjFlMyIKKyAgICAgICAgLy8KKyAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb252
ZXJzaW9uIHN1Y2NlZWRzLiBUaGUgY29udmVyc2lvbiBhbHdheXMgc3VjY2VlZHMKKyAgICAgICAg
Ly8gZXhjZXB0IGZvciB0aGUgZm9sbG93aW5nIGNhc2VzOgorICAgICAgICAvLyAgIC0gdGhlIGlu
cHV0IHZhbHVlIGlzIHNwZWNpYWwgYW5kIG5vIGluZmluaXR5X3N5bWJvbCBvciBuYW5fc3ltYm9s
IGhhcworICAgICAgICAvLyAgICAgYmVlbiBwcm92aWRlZCB0byB0aGUgY29uc3RydWN0b3IsCisg
ICAgICAgIC8vICAgLSAncmVxdWVzdGVkX2RpZ2l0cycgPiBrTWF4RXhwb25lbnRpYWxEaWdpdHMu
CisgICAgICAgIC8vIFRoZSBsYXN0IGNvbmRpdGlvbiBpbXBsaWVzIHRoYXQgdGhlIHJlc3VsdCB3
aWxsIG5ldmVyIGNvbnRhaW4gbW9yZSB0aGFuCisgICAgICAgIC8vIGtNYXhFeHBvbmVudGlhbERp
Z2l0cyArIDggY2hhcmFjdGVycyAodGhlIHNpZ24sIHRoZSBkaWdpdCBiZWZvcmUgdGhlCisgICAg
ICAgIC8vIGRlY2ltYWwgcG9pbnQsIHRoZSBkZWNpbWFsIHBvaW50LCB0aGUgZXhwb25lbnQgY2hh
cmFjdGVyLCB0aGUKKyAgICAgICAgLy8gZXhwb25lbnQncyBzaWduLCBhbmQgYXQgbW9zdCAzIGV4
cG9uZW50IGRpZ2l0cykuCisgICAgICAgIGJvb2wgVG9FeHBvbmVudGlhbChkb3VibGUgdmFsdWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25z
dDsKKyAgICAgICAgCisgICAgICAgIC8vIENvbXB1dGVzICdwcmVjaXNpb24nIGxlYWRpbmcgZGln
aXRzIG9mIHRoZSBnaXZlbiAndmFsdWUnIGFuZCByZXR1cm5zIHRoZW0KKyAgICAgICAgLy8gZWl0
aGVyIGluIGV4cG9uZW50aWFsIG9yIGRlY2ltYWwgZm9ybWF0LCBkZXBlbmRpbmcgb24KKyAgICAg
ICAgLy8gbWF4X3tsZWFkaW5nfHRyYWlsaW5nfV9wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25f
bW9kZSAoZ2l2ZW4gdG8gdGhlCisgICAgICAgIC8vIGNvbnN0cnVjdG9yKS4KKyAgICAgICAgLy8g
VGhlIGxhc3QgY29tcHV0ZWQgZGlnaXQgaXMgcm91bmRlZC4KKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gRXhhbXBsZSB3aXRoIG1heF9sZWFkaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9t
b2RlID0gNi4KKyAgICAgICAgLy8gICBUb1ByZWNpc2lvbigwLjAwMDAwMTIzNDUsIDIpIC0+ICIw
LjAwMDAwMTIiCisgICAgICAgIC8vICAgVG9QcmVjaXNpb24oMC4wMDAwMDAxMjM0NSwgMikgLT4g
IjEuMmUtNyIKKyAgICAgICAgLy8gU2ltaWxhcmlseSB0aGUgY29udmVydGVyIG1heSBhZGQgdXAg
dG8KKyAgICAgICAgLy8gbWF4X3RyYWlsaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9t
b2RlIGluIHByZWNpc2lvbiBtb2RlIHRvIGF2b2lkCisgICAgICAgIC8vIHJldHVybmluZyBhbiBl
eHBvbmVudGlhbCByZXByZXNlbnRhdGlvbi4gQSB6ZXJvIGFkZGVkIGJ5IHRoZQorICAgICAgICAv
LyBFTUlUX1RSQUlMSU5HX1pFUk9fQUZURVJfUE9JTlQgZmxhZyBpcyBjb3VudGVkIGZvciB0aGlz
IGxpbWl0LgorICAgICAgICAvLyBFeGFtcGxlcyBmb3IgbWF4X3RyYWlsaW5nX3BhZGRpbmdfemVy
b2VzX2luX3ByZWNpc2lvbl9tb2RlID0gMToKKyAgICAgICAgLy8gICBUb1ByZWNpc2lvbigyMzAu
MCwgMikgLT4gIjIzMCIKKyAgICAgICAgLy8gICBUb1ByZWNpc2lvbigyMzAuMCwgMikgLT4gIjIz
MC4iICB3aXRoIEVNSVRfVFJBSUxJTkdfREVDSU1BTF9QT0lOVC4KKyAgICAgICAgLy8gICBUb1By
ZWNpc2lvbigyMzAuMCwgMikgLT4gIjIuM2UyIiB3aXRoIEVNSVRfVFJBSUxJTkdfWkVST19BRlRF
Ul9QT0lOVC4KKyAgICAgICAgLy8gRXhhbXBsZXMgZm9yIG1heF90cmFpbGluZ19wYWRkaW5nX3pl
cm9lc19pbl9wcmVjaXNpb25fbW9kZSA9IDMsIGFuZCBubworICAgICAgICAvLyAgICBFTUlUX1RS
QUlMSU5HX1pFUk9fQUZURVJfUE9JTlQ6CisgICAgICAgIC8vICAgVG9QcmVjaXNpb24oMTIzNDUw
LjAsIDYpIC0+ICIxMjM0NTAiCisgICAgICAgIC8vICAgVG9QcmVjaXNpb24oMTIzNDUwLjAsIDUp
IC0+ICIxMjM0NTAiCisgICAgICAgIC8vICAgVG9QcmVjaXNpb24oMTIzNDUwLjAsIDQpIC0+ICIx
MjM1MDAiCisgICAgICAgIC8vICAgVG9QcmVjaXNpb24oMTIzNDUwLjAsIDMpIC0+ICIxMjMwMDAi
CisgICAgICAgIC8vICAgVG9QcmVjaXNpb24oMTIzNDUwLjAsIDIpIC0+ICIxLjJlNSIKKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb252ZXJzaW9uIHN1Y2NlZWRz
LiBUaGUgY29udmVyc2lvbiBhbHdheXMgc3VjY2VlZHMKKyAgICAgICAgLy8gZXhjZXB0IGZvciB0
aGUgZm9sbG93aW5nIGNhc2VzOgorICAgICAgICAvLyAgIC0gdGhlIGlucHV0IHZhbHVlIGlzIHNw
ZWNpYWwgYW5kIG5vIGluZmluaXR5X3N5bWJvbCBvciBuYW5fc3ltYm9sIGhhcworICAgICAgICAv
LyAgICAgYmVlbiBwcm92aWRlZCB0byB0aGUgY29uc3RydWN0b3IsCisgICAgICAgIC8vICAgLSBw
cmVjaXNpb24gPCBrTWluUGVyaWNpc2lvbkRpZ2l0cworICAgICAgICAvLyAgIC0gcHJlY2lzaW9u
ID4ga01heFByZWNpc2lvbkRpZ2l0cworICAgICAgICAvLyBUaGUgbGFzdCBjb25kaXRpb24gaW1w
bGllcyB0aGF0IHRoZSByZXN1bHQgd2lsbCBuZXZlciBjb250YWluIG1vcmUgdGhhbgorICAgICAg
ICAvLyBrTWF4UHJlY2lzaW9uRGlnaXRzICsgNyBjaGFyYWN0ZXJzICh0aGUgc2lnbiwgdGhlIGRl
Y2ltYWwgcG9pbnQsIHRoZQorICAgICAgICAvLyBleHBvbmVudCBjaGFyYWN0ZXIsIHRoZSBleHBv
bmVudCdzIHNpZ24sIGFuZCBhdCBtb3N0IDMgZXhwb25lbnQgZGlnaXRzKS4KKyAgICAgICAgYm9v
bCBUb1ByZWNpc2lvbihkb3VibGUgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IHByZWNpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyKiByZXN1
bHRfYnVpbGRlcikgY29uc3Q7CisgICAgICAgIAorICAgICAgICBlbnVtIER0b2FNb2RlIHsKKyAg
ICAgICAgICAgIC8vIFByb2R1Y2UgdGhlIHNob3J0ZXN0IGNvcnJlY3QgcmVwcmVzZW50YXRpb24u
CisgICAgICAgICAgICAvLyBGb3IgZXhhbXBsZSB0aGUgb3V0cHV0IG9mIDAuMjk5OTk5OTk5OTk5
OTk5OTg4ODk3IGlzICh0aGUgbGVzcyBhY2N1cmF0ZQorICAgICAgICAgICAgLy8gYnV0IGNvcnJl
Y3QpIDAuMy4KKyAgICAgICAgICAgIFNIT1JURVNULAorICAgICAgICAgICAgLy8gUHJvZHVjZSBh
IGZpeGVkIG51bWJlciBvZiBkaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQuCisgICAgICAg
ICAgICAvLyBGb3IgaW5zdGFuY2UgZml4ZWQoMC4xLCA0KSBiZWNvbWVzIDAuMTAwMAorICAgICAg
ICAgICAgLy8gSWYgdGhlIGlucHV0IG51bWJlciBpcyBiaWcsIHRoZSBvdXRwdXQgd2lsbCBiZSBi
aWcuCisgICAgICAgICAgICBGSVhFRCwKKyAgICAgICAgICAgIC8vIEZpeGVkIG51bWJlciBvZiBk
aWdpdHMgKGluZGVwZW5kZW50IG9mIHRoZSBkZWNpbWFsIHBvaW50KS4KKyAgICAgICAgICAgIFBS
RUNJU0lPTgorICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgLy8gVGhlIG1heGltYWwgbnVt
YmVyIG9mIGRpZ2l0cyB0aGF0IGFyZSBuZWVkZWQgdG8gZW1pdCBhIGRvdWJsZSBpbiBiYXNlIDEw
LgorICAgICAgICAvLyBBIGhpZ2hlciBwcmVjaXNpb24gY2FuIGJlIGFjaGlldmVkIGJ5IHVzaW5n
IG1vcmUgZGlnaXRzLCBidXQgdGhlIHNob3J0ZXN0CisgICAgICAgIC8vIGFjY3VyYXRlIHJlcHJl
c2VudGF0aW9uIG9mIGFueSBkb3VibGUgd2lsbCBuZXZlciB1c2UgbW9yZSBkaWdpdHMgdGhhbgor
ICAgICAgICAvLyBrQmFzZTEwTWF4aW1hbExlbmd0aC4KKyAgICAgICAgLy8gTm90ZSB0aGF0IERv
dWJsZVRvQXNjaWkgbnVsbC10ZXJtaW5hdGVzIGl0cyBpbnB1dC4gU28gdGhlIGdpdmVuIGJ1ZmZl
cgorICAgICAgICAvLyBzaG91bGQgYmUgYXQgbGVhc3Qga0Jhc2UxME1heGltYWxMZW5ndGggKyAx
IGNoYXJhY3RlcnMgbG9uZy4KKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBrQmFzZTEwTWF4aW1h
bExlbmd0aCA9IDE3OworICAgICAgICAKKyAgICAgICAgLy8gQ29udmVydHMgdGhlIGdpdmVuIGRv
dWJsZSAndicgdG8gYXNjaWkuCisgICAgICAgIC8vIFRoZSByZXN1bHQgc2hvdWxkIGJlIGludGVy
cHJldGVkIGFzIGJ1ZmZlciAqIDEwXihwb2ludC1sZW5ndGgpLgorICAgICAgICAvLworICAgICAg
ICAvLyBUaGUgb3V0cHV0IGRlcGVuZHMgb24gdGhlIGdpdmVuIG1vZGU6CisgICAgICAgIC8vICAt
IFNIT1JURVNUOiBwcm9kdWNlIHRoZSBsZWFzdCBhbW91bnQgb2YgZGlnaXRzIGZvciB3aGljaCB0
aGUgaW50ZXJuYWwKKyAgICAgICAgLy8gICBpZGVudGl0eSByZXF1aXJlbWVudCBpcyBzdGlsbCBz
YXRpc2ZpZWQuIElmIHRoZSBkaWdpdHMgYXJlIHByaW50ZWQKKyAgICAgICAgLy8gICAodG9nZXRo
ZXIgd2l0aCB0aGUgY29ycmVjdCBleHBvbmVudCkgdGhlbiByZWFkaW5nIHRoaXMgbnVtYmVyIHdp
bGwgZ2l2ZQorICAgICAgICAvLyAgICd2JyBhZ2Fpbi4gVGhlIGJ1ZmZlciB3aWxsIGNob29zZSB0
aGUgcmVwcmVzZW50YXRpb24gdGhhdCBpcyBjbG9zZXN0IHRvCisgICAgICAgIC8vICAgJ3YnLiBJ
ZiB0aGVyZSBhcmUgdHdvIGF0IHRoZSBzYW1lIGRpc3RhbmNlLCB0aGFuIHRoZSBvbmUgZmFydGhl
ciBhd2F5CisgICAgICAgIC8vICAgZnJvbSAwIGlzIGNob3NlbiAoaGFsZndheSBjYXNlcyAtIGVu
ZGluZyB3aXRoIDUgLSBhcmUgcm91bmRlZCB1cCkuCisgICAgICAgIC8vICAgSW4gdGhpcyBtb2Rl
IHRoZSAncmVxdWVzdGVkX2RpZ2l0cycgcGFyYW1ldGVyIGlzIGlnbm9yZWQuCisgICAgICAgIC8v
ICAtIEZJWEVEOiBwcm9kdWNlcyBkaWdpdHMgbmVjZXNzYXJ5IHRvIHByaW50IGEgZ2l2ZW4gbnVt
YmVyIHdpdGgKKyAgICAgICAgLy8gICAncmVxdWVzdGVkX2RpZ2l0cycgZGlnaXRzIGFmdGVyIHRo
ZSBkZWNpbWFsIHBvaW50LiBUaGUgcHJvZHVjZWQgZGlnaXRzCisgICAgICAgIC8vICAgbWlnaHQg
YmUgdG9vIHNob3J0IGluIHdoaWNoIGNhc2UgdGhlIGNhbGxlciBoYXMgdG8gZmlsbCB0aGUgcmVt
YWluZGVyCisgICAgICAgIC8vICAgd2l0aCAnMCdzLgorICAgICAgICAvLyAgIEV4YW1wbGU6IHRv
Rml4ZWQoMC4wMDEsIDUpIGlzIGFsbG93ZWQgdG8gcmV0dXJuIGJ1ZmZlcj0iMSIsIHBvaW50PS0y
LgorICAgICAgICAvLyAgIEhhbGZ3YXkgY2FzZXMgYXJlIHJvdW5kZWQgdG93YXJkcyArLy1JbmZp
bml0eSAoYXdheSBmcm9tIDApLiBUaGUgY2FsbAorICAgICAgICAvLyAgIHRvRml4ZWQoMC4xNSwg
MikgdGh1cyByZXR1cm5zIGJ1ZmZlcj0iMiIsIHBvaW50PTAuCisgICAgICAgIC8vICAgVGhlIHJl
dHVybmVkIGJ1ZmZlciBtYXkgY29udGFpbiBkaWdpdHMgdGhhdCB3b3VsZCBiZSB0cnVuY2F0ZWQg
ZnJvbSB0aGUKKyAgICAgICAgLy8gICBzaG9ydGVzdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW5w
dXQuCisgICAgICAgIC8vICAtIFBSRUNJU0lPTjogcHJvZHVjZXMgJ3JlcXVlc3RlZF9kaWdpdHMn
IHdoZXJlIHRoZSBmaXJzdCBkaWdpdCBpcyBub3QgJzAnLgorICAgICAgICAvLyAgIEV2ZW4gdGhv
dWdoIHRoZSBsZW5ndGggb2YgcHJvZHVjZWQgZGlnaXRzIHVzdWFsbHkgZXF1YWxzCisgICAgICAg
IC8vICAgJ3JlcXVlc3RlZF9kaWdpdHMnLCB0aGUgZnVuY3Rpb24gaXMgYWxsb3dlZCB0byByZXR1
cm4gZmV3ZXIgZGlnaXRzLCBpbgorICAgICAgICAvLyAgIHdoaWNoIGNhc2UgdGhlIGNhbGxlciBo
YXMgdG8gZmlsbCB0aGUgbWlzc2luZyBkaWdpdHMgd2l0aCAnMCdzLgorICAgICAgICAvLyAgIEhh
bGZ3YXkgY2FzZXMgYXJlIGFnYWluIHJvdW5kZWQgYXdheSBmcm9tIDAuCisgICAgICAgIC8vIERv
dWJsZVRvQXNjaWkgZXhwZWN0cyB0aGUgZ2l2ZW4gYnVmZmVyIHRvIGJlIGJpZyBlbm91Z2ggdG8g
aG9sZCBhbGwKKyAgICAgICAgLy8gZGlnaXRzIGFuZCBhIHRlcm1pbmF0aW5nIG51bGwtY2hhcmFj
dGVyLiBJbiBTSE9SVEVTVC1tb2RlIGl0IGV4cGVjdHMgYQorICAgICAgICAvLyBidWZmZXIgb2Yg
YXQgbGVhc3Qga0Jhc2UxME1heGltYWxMZW5ndGggKyAxLiBJbiBhbGwgb3RoZXIgbW9kZXMgdGhl
CisgICAgICAgIC8vIHJlcXVlc3RlZF9kaWdpdHMgcGFyYW1ldGVyICgrIDEgZm9yIHRoZSBudWxs
LWNoYXJhY3RlcikgbGltaXRzIHRoZSBzaXplIG9mCisgICAgICAgIC8vIHRoZSBvdXRwdXQuIFRo
ZSBnaXZlbiBsZW5ndGggaXMgb25seSB1c2VkIGluIGRlYnVnIG1vZGUgdG8gZW5zdXJlIHRoZQor
ICAgICAgICAvLyBidWZmZXIgaXMgYmlnIGVub3VnaC4KKyAgICAgICAgc3RhdGljIHZvaWQgRG91
YmxlVG9Bc2NpaShkb3VibGUgdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
dG9hTW9kZSBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXF1
ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIGJ1
ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnVmZmVyX2xlbmd0
aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sKiBzaWduLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogbGVuZ3RoLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCogcG9pbnQpOworICAgICAgICAKKyAgICBwcml2YXRlOgor
ICAgICAgICAvLyBJZiB0aGUgdmFsdWUgaXMgYSBzcGVjaWFsIHZhbHVlIChOYU4gb3IgSW5maW5p
dHkpIGNvbnN0cnVjdHMgdGhlCisgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgc3RyaW5nIHVzaW5n
IHRoZSBjb25maWd1cmVkIGluZmluaXR5L25hbi1zeW1ib2wuCisgICAgICAgIC8vIElmIGVpdGhl
ciBvZiB0aGVtIGlzIE5VTEwgb3IgdGhlIHZhbHVlIGlzIG5vdCBzcGVjaWFsIHRoZW4gdGhlCisg
ICAgICAgIC8vIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UuCisgICAgICAgIGJvb2wgSGFuZGxlU3Bl
Y2lhbFZhbHVlcyhkb3VibGUgdmFsdWUsIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBj
b25zdDsKKyAgICAgICAgLy8gQ29uc3RydWN0cyBhbiBleHBvbmVudGlhbCByZXByZXNlbnRhdGlv
biAoaS5lLiAxLjIzNGU1NikuCisgICAgICAgIC8vIFRoZSBnaXZlbiBleHBvbmVudCBhc3N1bWVz
IGEgZGVjaW1hbCBwb2ludCBhZnRlciB0aGUgZmlyc3QgZGVjaW1hbCBkaWdpdC4KKyAgICAgICAg
dm9pZCBDcmVhdGVFeHBvbmVudGlhbFJlcHJlc2VudGF0aW9uKGNvbnN0IGNoYXIqIGRlY2ltYWxf
ZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBleHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25zdDsKKyAgICAgICAgLy8gQ3JlYXRl
cyBhIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gKGkuZSAxMjM0LjU2NzgpLgorICAgICAgICB2b2lk
IENyZWF0ZURlY2ltYWxSZXByZXNlbnRhdGlvbihjb25zdCBjaGFyKiBkZWNpbWFsX2RpZ2l0cywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlY2ltYWxfcG9pbnQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkaWdpdHNfYWZ0
ZXJfcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmlu
Z0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25zdDsKKyAgICAgICAgCisgICAgICAgIGNvbnN0
IGludCBmbGFnc187CisgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IGluZmluaXR5X3N5bWJvbF87
CisgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IG5hbl9zeW1ib2xfOworICAgICAgICBjb25zdCBj
aGFyIGV4cG9uZW50X2NoYXJhY3Rlcl87CisgICAgICAgIGNvbnN0IGludCBkZWNpbWFsX2luX3No
b3J0ZXN0X2xvd187CisgICAgICAgIGNvbnN0IGludCBkZWNpbWFsX2luX3Nob3J0ZXN0X2hpZ2hf
OworICAgICAgICBjb25zdCBpbnQgbWF4X2xlYWRpbmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lz
aW9uX21vZGVfOworICAgICAgICBjb25zdCBpbnQgbWF4X3RyYWlsaW5nX3BhZGRpbmdfemVyb2Vz
X2luX3ByZWNpc2lvbl9tb2RlXzsKKyAgICAgICAgCisgICAgICAgIERJU0FMTE9XX0lNUExJQ0lU
X0NPTlNUUlVDVE9SUyhEb3VibGVUb1N0cmluZ0NvbnZlcnRlcik7CisgICAgfTsKKyAgICAKKyAg
ICAKKyAgICBjbGFzcyBTdHJpbmdUb0RvdWJsZUNvbnZlcnRlciB7CisgICAgcHVibGljOgorICAg
ICAgICAvLyBFbnVtZXJhdGlvbiBmb3IgYWxsb3dpbmcgb2N0YWxzIGFuZCBpZ25vcmluZyBqdW5r
IHdoZW4gY29udmVydGluZworICAgICAgICAvLyBzdHJpbmdzIHRvIG51bWJlcnMuCisgICAgICAg
IGVudW0gRmxhZ3MgeworICAgICAgICAgICAgTk9fRkxBR1MgPSAwLAorICAgICAgICAgICAgQUxM
T1dfSEVYID0gMSwKKyAgICAgICAgICAgIEFMTE9XX09DVEFMUyA9IDIsCisgICAgICAgICAgICBB
TExPV19UUkFJTElOR19KVU5LID0gNCwKKyAgICAgICAgICAgIEFMTE9XX0xFQURJTkdfU1BBQ0VT
ID0gOCwKKyAgICAgICAgICAgIEFMTE9XX1RSQUlMSU5HX1NQQUNFUyA9IDE2LAorICAgICAgICAg
ICAgQUxMT1dfU1BBQ0VTX0FGVEVSX1NJR04gPSAzMgorICAgICAgICB9OworICAgICAgICAKKyAg
ICAgICAgLy8gRmxhZ3Mgc2hvdWxkIGJlIGEgYml0LW9yIGNvbWJpbmF0aW9uIG9mIHRoZSBwb3Nz
aWJsZSBGbGFncy1lbnVtLgorICAgICAgICAvLyAgLSBOT19GTEFHUzogbm8gc3BlY2lhbCBmbGFn
cy4KKyAgICAgICAgLy8gIC0gQUxMT1dfSEVYOiByZWNvZ25pemVzIHRoZSBwcmVmaXggIjB4Ii4g
SGV4IG51bWJlcnMgbWF5IG9ubHkgYmUgaW50ZWdlcnMuCisgICAgICAgIC8vICAgICAgRXg6IFN0
cmluZ1RvRG91YmxlKCIweDEyMzQiKSAtPiA0NjYwLjAKKyAgICAgICAgLy8gICAgICAgICAgSW4g
U3RyaW5nVG9Eb3VibGUoIjB4MTIzNC41NiIpIHRoZSBjaGFyYWN0ZXJzICIuNTYiIGFyZSB0cmFp
bGluZworICAgICAgICAvLyAgICAgICAgICBqdW5rLiBUaGUgcmVzdWx0IG9mIHRoZSBjYWxsIGlz
IGhlbmNlIGRlcGVuZGVudCBvbgorICAgICAgICAvLyAgICAgICAgICB0aGUgQUxMT1dfVFJBSUxJ
TkdfSlVOSyBmbGFnIGFuZC9vciB0aGUganVuayB2YWx1ZS4KKyAgICAgICAgLy8gICAgICBXaXRo
IHRoaXMgZmxhZyAiMHgiIGlzIGEganVuay1zdHJpbmcuIEV2ZW4gd2l0aCBBTExPV19UUkFJTElO
R19KVU5LLAorICAgICAgICAvLyAgICAgIHRoZSBzdHJpbmcgd2lsbCBub3QgYmUgcGFyc2VkIGFz
ICIwIiBmb2xsb3dlZCBieSBqdW5rLgorICAgICAgICAvLworICAgICAgICAvLyAgLSBBTExPV19P
Q1RBTFM6IHJlY29nbml6ZXMgdGhlIHByZWZpeCAiMCIgZm9yIG9jdGFsczoKKyAgICAgICAgLy8g
ICAgICBJZiBhIHNlcXVlbmNlIG9mIG9jdGFsIGRpZ2l0cyBzdGFydHMgd2l0aCAnMCcsIHRoZW4g
dGhlIG51bWJlciBpcworICAgICAgICAvLyAgICAgIHJlYWQgYXMgb2N0YWwgaW50ZWdlci4gT2N0
YWwgbnVtYmVycyBtYXkgb25seSBiZSBpbnRlZ2Vycy4KKyAgICAgICAgLy8gICAgICBFeDogU3Ry
aW5nVG9Eb3VibGUoIjAxMjM0IikgLT4gNjY4LjAKKyAgICAgICAgLy8gICAgICAgICAgU3RyaW5n
VG9Eb3VibGUoIjAxMjM0OSIpIC0+IDEyMzQ5LjAgIC8vIE5vdCBhIHNlcXVlbmNlIG9mIG9jdGFs
CisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBkaWdpdHMuCisgICAgICAgIC8vICAgICAgICAgIEluIFN0cmluZ1RvRG91YmxlKCIwMTIz
NC41NiIpIHRoZSBjaGFyYWN0ZXJzICIuNTYiIGFyZSB0cmFpbGluZworICAgICAgICAvLyAgICAg
ICAgICBqdW5rLiBUaGUgcmVzdWx0IG9mIHRoZSBjYWxsIGlzIGhlbmNlIGRlcGVuZGVudCBvbgor
ICAgICAgICAvLyAgICAgICAgICB0aGUgQUxMT1dfVFJBSUxJTkdfSlVOSyBmbGFnIGFuZC9vciB0
aGUganVuayB2YWx1ZS4KKyAgICAgICAgLy8gICAgICAgICAgSW4gU3RyaW5nVG9Eb3VibGUoIjAx
MjM0ZTU2IikgdGhlIGNoYXJhY3RlcnMgImU1NiIgYXJlIHRyYWlsaW5nCisgICAgICAgIC8vICAg
ICAgICAgIGp1bmssIHRvby4KKyAgICAgICAgLy8gIC0gQUxMT1dfVFJBSUxJTkdfSlVOSzogaWdu
b3JlIHRyYWlsaW5nIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IHBhcnQgb2YKKyAgICAgICAgLy8g
ICAgICBhIGRvdWJsZSBsaXRlcmFsLgorICAgICAgICAvLyAgLSBBTExPV19MRUFESU5HX1NQQUNF
Uzogc2tpcCBvdmVyIGxlYWRpbmcgc3BhY2VzLgorICAgICAgICAvLyAgLSBBTExPV19UUkFJTElO
R19TUEFDRVM6IGlnbm9yZSB0cmFpbGluZyBzcGFjZXMuCisgICAgICAgIC8vICAtIEFMTE9XX1NQ
QUNFU19BRlRFUl9TSUdOOiBpZ25vcmUgc3BhY2VzIGFmdGVyIHRoZSBzaWduLgorICAgICAgICAv
LyAgICAgICBFeDogU3RyaW5nVG9Eb3VibGUoIi0gICAxMjMuMiIpIC0+IC0xMjMuMi4KKyAgICAg
ICAgLy8gICAgICAgICAgIFN0cmluZ1RvRG91YmxlKCIrICAgMTIzLjIiKSAtPiAxMjMuMgorICAg
ICAgICAvLworICAgICAgICAvLyBlbXB0eV9zdHJpbmdfdmFsdWUgaXMgcmV0dXJuZWQgd2hlbiBh
biBlbXB0eSBzdHJpbmcgaXMgZ2l2ZW4gYXMgaW5wdXQuCisgICAgICAgIC8vIElmIEFMTE9XX0xF
QURJTkdfU1BBQ0VTIG9yIEFMTE9XX1RSQUlMSU5HX1NQQUNFUyBhcmUgc2V0LCB0aGVuIGEgc3Ry
aW5nCisgICAgICAgIC8vIGNvbnRhaW5pbmcgb25seSBzcGFjZXMgaXMgY29udmVydGVkIHRvIHRo
ZSAnZW1wdHlfc3RyaW5nX3ZhbHVlJywgdG9vLgorICAgICAgICAvLworICAgICAgICAvLyBqdW5r
X3N0cmluZ192YWx1ZSBpcyByZXR1cm5lZCB3aGVuCisgICAgICAgIC8vICBhKSBBTExPV19UUkFJ
TElOR19KVU5LIGlzIG5vdCBzZXQsIGFuZCBhIGp1bmsgY2hhcmFjdGVyIChhIGNoYXJhY3RlciBu
b3QKKyAgICAgICAgLy8gICAgIHBhcnQgb2YgYSBkb3VibGUtbGl0ZXJhbCkgaXMgZm91bmQuCisg
ICAgICAgIC8vICBiKSBBTExPV19UUkFJTElOR19KVU5LIGlzIHNldCwgYnV0IHRoZSBzdHJpbmcg
ZG9lcyBub3Qgc3RhcnQgd2l0aCBhCisgICAgICAgIC8vICAgICBkb3VibGUgbGl0ZXJhbC4KKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gaW5maW5pdHlfc3ltYm9sIGFuZCBuYW5fc3ltYm9sIGFyZSBz
dHJpbmdzIHRoYXQgYXJlIHVzZWQgdG8gZGV0ZWN0CisgICAgICAgIC8vIGlucHV0cyB0aGF0IHJl
cHJlc2VudCBpbmZpbml0eSBhbmQgTmFOLiBUaGV5IGNhbiBiZSBudWxsLCBpbiB3aGljaCBjYXNl
CisgICAgICAgIC8vIHRoZXkgYXJlIGlnbm9yZWQuCisgICAgICAgIC8vIFRoZSBjb252ZXJzaW9u
IHJvdXRpbmUgZmlyc3QgcmVhZHMgYW55IHBvc3NpYmxlIHNpZ25zLiBUaGVuIGl0IGNvbXBhcmVz
IHRoZQorICAgICAgICAvLyBmb2xsb3dpbmcgY2hhcmFjdGVyIG9mIHRoZSBpbnB1dC1zdHJpbmcg
d2l0aCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mCisgICAgICAgIC8vIHRoZSBpbmZpbml0eSwgYW5k
IG5hbi1zeW1ib2wuIElmIGVpdGhlciBtYXRjaGVzLCB0aGUgZnVuY3Rpb24gYXNzdW1lcywgdGhh
dAorICAgICAgICAvLyBhIG1hdGNoIGhhcyBiZWVuIGZvdW5kLCBhbmQgZXhwZWN0cyB0aGUgZm9s
bG93aW5nIGlucHV0IGNoYXJhY3RlcnMgdG8gbWF0Y2gKKyAgICAgICAgLy8gdGhlIHJlbWFpbmlu
ZyBjaGFyYWN0ZXJzIG9mIHRoZSBzcGVjaWFsLXZhbHVlIHN5bWJvbC4KKyAgICAgICAgLy8gVGhp
cyBtZWFucyB0aGF0IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zIGFwcGx5IHRvIHNwZWNpYWwt
dmFsdWUgc3ltYm9sczoKKyAgICAgICAgLy8gIC0gdGhleSBtdXN0IG5vdCBzdGFydCB3aXRoIHNp
Z25zICgnKycsIG9yICctJyksCisgICAgICAgIC8vICAtIHRoZXkgbXVzdCBub3QgaGF2ZSB0aGUg
c2FtZSBmaXJzdCBjaGFyYWN0ZXIuCisgICAgICAgIC8vICAtIHRoZXkgbXVzdCBub3Qgc3RhcnQg
d2l0aCBkaWdpdHMuCisgICAgICAgIC8vCisgICAgICAgIC8vIEV4YW1wbGVzOgorICAgICAgICAv
LyAgZmxhZ3MgPSBBTExPV19IRVggfCBBTExPV19UUkFJTElOR19KVU5LLAorICAgICAgICAvLyAg
ZW1wdHlfc3RyaW5nX3ZhbHVlID0gMC4wLAorICAgICAgICAvLyAganVua19zdHJpbmdfdmFsdWUg
PSBOYU4sCisgICAgICAgIC8vICBpbmZpbml0eV9zeW1ib2wgPSAiaW5maW5pdHkiLAorICAgICAg
ICAvLyAgbmFuX3N5bWJvbCA9ICJuYW4iOgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgi
MHgxMjM0IikgLT4gNDY2MC4wLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMHgxMjM0
SyIpIC0+IDQ2NjAuMC4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIiIpIC0+IDAuMCAg
Ly8gZW1wdHlfc3RyaW5nX3ZhbHVlLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiICIp
IC0+IE5hTiAgLy8ganVua19zdHJpbmdfdmFsdWUuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91
YmxlKCIgMSIpIC0+IE5hTiAgLy8ganVua19zdHJpbmdfdmFsdWUuCisgICAgICAgIC8vICAgIFN0
cmluZ1RvRG91YmxlKCIweCIpIC0+IE5hTiAgLy8ganVua19zdHJpbmdfdmFsdWUuCisgICAgICAg
IC8vICAgIFN0cmluZ1RvRG91YmxlKCItMTIzLjQ1IikgLT4gLTEyMy40NS4KKyAgICAgICAgLy8g
ICAgU3RyaW5nVG9Eb3VibGUoIi0tMTIzLjQ1IikgLT4gTmFOICAvLyBqdW5rX3N0cmluZ192YWx1
ZS4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjEyM2U0NSIpIC0+IDEyM2U0NS4KKyAg
ICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjEyM0U0NSIpIC0+IDEyM2U0NS4KKyAgICAgICAg
Ly8gICAgU3RyaW5nVG9Eb3VibGUoIjEyM2UrNDUiKSAtPiAxMjNlNDUuCisgICAgICAgIC8vICAg
IFN0cmluZ1RvRG91YmxlKCIxMjNFLTQ1IikgLT4gMTIzZS00NS4KKyAgICAgICAgLy8gICAgU3Ry
aW5nVG9Eb3VibGUoIjEyM2UiKSAtPiAxMjMuMCAgLy8gdHJhaWxpbmcganVuayBpZ25vcmVkLgor
ICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMTIzZS0iKSAtPiAxMjMuMCAgLy8gdHJhaWxp
bmcganVuayBpZ25vcmVkLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiK05hTiIpIC0+
IE5hTiAgLy8gTmFOIHN0cmluZyBsaXRlcmFsLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJs
ZSgiLWluZmluaXR5IikgLT4gLWluZi4gIC8vIGluZmluaXR5IGxpdGVyYWwuCisgICAgICAgIC8v
ICAgIFN0cmluZ1RvRG91YmxlKCJJbmZpbml0eSIpIC0+IE5hTiAgLy8ganVua19zdHJpbmdfdmFs
dWUuCisgICAgICAgIC8vCisgICAgICAgIC8vICBmbGFncyA9IEFMTE9XX09DVEFMIHwgQUxMT1df
TEVBRElOR19TUEFDRVMsCisgICAgICAgIC8vICBlbXB0eV9zdHJpbmdfdmFsdWUgPSAwLjAsCisg
ICAgICAgIC8vICBqdW5rX3N0cmluZ192YWx1ZSA9IE5hTiwKKyAgICAgICAgLy8gIGluZmluaXR5
X3N5bWJvbCA9IE5VTEwsCisgICAgICAgIC8vICBuYW5fc3ltYm9sID0gTlVMTDoKKyAgICAgICAg
Ly8gICAgU3RyaW5nVG9Eb3VibGUoIjB4MTIzNCIpIC0+IE5hTiAgLy8ganVua19zdHJpbmdfdmFs
dWUuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIwMTIzNCIpIC0+IDY2OC4wLgorICAg
ICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiIikgLT4gMC4wICAvLyBlbXB0eV9zdHJpbmdfdmFs
dWUuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIgIikgLT4gMC4wICAvLyBlbXB0eV9z
dHJpbmdfdmFsdWUuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIgMSIpIC0+IDEuMAor
ICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMHgiKSAtPiBOYU4gIC8vIGp1bmtfc3RyaW5n
X3ZhbHVlLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMDEyM2U0NSIpIC0+IE5hTiAg
Ly8ganVua19zdHJpbmdfdmFsdWUuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIwMTIz
OUU0NSIpIC0+IDEyMzllNDUuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCItaW5maW5p
dHkiKSAtPiBOYU4gIC8vIGp1bmtfc3RyaW5nX3ZhbHVlLgorICAgICAgICAvLyAgICBTdHJpbmdU
b0RvdWJsZSgiTmFOIikgLT4gTmFOICAvLyBqdW5rX3N0cmluZ192YWx1ZS4KKyAgICAgICAgU3Ry
aW5nVG9Eb3VibGVDb252ZXJ0ZXIoaW50IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkb3VibGUgZW1wdHlfc3RyaW5nX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkb3VibGUganVua19zdHJpbmdfdmFsdWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGluZmluaXR5X3N5bWJvbCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogbmFuX3N5bWJvbCkKKyAgICAgICAgOiBmbGFn
c18oZmxhZ3MpLAorICAgICAgICBlbXB0eV9zdHJpbmdfdmFsdWVfKGVtcHR5X3N0cmluZ192YWx1
ZSksCisgICAgICAgIGp1bmtfc3RyaW5nX3ZhbHVlXyhqdW5rX3N0cmluZ192YWx1ZSksCisgICAg
ICAgIGluZmluaXR5X3N5bWJvbF8oaW5maW5pdHlfc3ltYm9sKSwKKyAgICAgICAgbmFuX3N5bWJv
bF8obmFuX3N5bWJvbCkgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBQZXJmb3Jt
cyB0aGUgY29udmVyc2lvbi4KKyAgICAgICAgLy8gVGhlIG91dHB1dCBwYXJhbWV0ZXIgJ3Byb2Nl
c3NlZF9jaGFyYWN0ZXJzX2NvdW50JyBpcyBzZXQgdG8gdGhlIG51bWJlcgorICAgICAgICAvLyBv
ZiBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSBiZWVuIHByb2Nlc3NlZCB0byByZWFkIHRoZSBudW1iZXIu
CisgICAgICAgIC8vIFNwYWNlcyB0aGFuIGFyZSBwcm9jZXNzZWQgd2l0aCBBTExPV197TEVBRElO
R3xUUkFJTElOR31fU1BBQ0VTIGFyZSBpbmNsdWRlZAorICAgICAgICAvLyBpbiB0aGUgJ3Byb2Nl
c3NlZF9jaGFyYWN0ZXJzX2NvdW50Jy4gVHJhaWxpbmcganVuayBpcyBuZXZlciBpbmNsdWRlZC4K
KyAgICAgICAgZG91YmxlIFN0cmluZ1RvRG91YmxlKGNvbnN0IGNoYXIqIGJ1ZmZlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQqIHByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50KTsKKyAgICAgICAgCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgaW50IGZsYWdzXzsKKyAgICAgICAgY29uc3QgZG91
YmxlIGVtcHR5X3N0cmluZ192YWx1ZV87CisgICAgICAgIGNvbnN0IGRvdWJsZSBqdW5rX3N0cmlu
Z192YWx1ZV87CisgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IGluZmluaXR5X3N5bWJvbF87Cisg
ICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IG5hbl9zeW1ib2xfOworICAgICAgICAKKyAgICAgICAg
RElTQUxMT1dfSU1QTElDSVRfQ09OU1RSVUNUT1JTKFN0cmluZ1RvRG91YmxlQ29udmVydGVyKTsK
KyAgICB9OworICAgIAorfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCisKKyNlbmRp
ZiAgLy8gRE9VQkxFX0NPTlZFUlNJT05fRE9VQkxFX0NPTlZFUlNJT05fSF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kb3VibGUuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvZHRvYS9kb3VibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mM2QzYjRmMDkxYmVhMDA0NDE4
ZGY0NmQyNmNmNjlkMzU2M2JjNzU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9kdG9hL2RvdWJsZS5oCkBAIC0wLDAgKzEsMjQ1IEBACisvLyBDb3B5cmlnaHQg
MjAxMCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8v
ICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAg
ICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
Ky8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKKyNpZm5kZWYgRE9VQkxFX0NPTlZFUlNJT05fRE9VQkxFX0hfCisjZGVm
aW5lIERPVUJMRV9DT05WRVJTSU9OX0RPVUJMRV9IXworCisjaW5jbHVkZSAiZGl5LWZwLmgiCisK
K25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgLy8gV2UgYXNzdW1lIHRo
YXQgZG91YmxlcyBhbmQgdWludDY0X3QgaGF2ZSB0aGUgc2FtZSBlbmRpYW5uZXNzLgorICAgIHN0
YXRpYyB1aW50NjRfdCBkb3VibGVfdG9fdWludDY0KGRvdWJsZSBkKSB7IHJldHVybiBCaXRDYXN0
PHVpbnQ2NF90PihkKTsgfQorICAgIHN0YXRpYyBkb3VibGUgdWludDY0X3RvX2RvdWJsZSh1aW50
NjRfdCBkNjQpIHsgcmV0dXJuIEJpdENhc3Q8ZG91YmxlPihkNjQpOyB9CisgICAgCisgICAgLy8g
SGVscGVyIGZ1bmN0aW9ucyBmb3IgZG91Ymxlcy4KKyAgICBjbGFzcyBEb3VibGUgeworICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGtTaWduTWFzayA9IFVJTlQ2NF8y
UEFSVF9DKDB4ODAwMDAwMDAsIDAwMDAwMDAwKTsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQ2
NF90IGtFeHBvbmVudE1hc2sgPSBVSU5UNjRfMlBBUlRfQygweDdGRjAwMDAwLCAwMDAwMDAwMCk7
CisgICAgICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBrU2lnbmlmaWNhbmRNYXNrID0gVUlOVDY0
XzJQQVJUX0MoMHgwMDBGRkZGRiwgRkZGRkZGRkYpOworICAgICAgICBzdGF0aWMgY29uc3QgdWlu
dDY0X3Qga0hpZGRlbkJpdCA9IFVJTlQ2NF8yUEFSVF9DKDB4MDAxMDAwMDAsIDAwMDAwMDAwKTsK
KyAgICAgICAgc3RhdGljIGNvbnN0IGludCBrUGh5c2ljYWxTaWduaWZpY2FuZFNpemUgPSA1Mjsg
IC8vIEV4Y2x1ZGVzIHRoZSBoaWRkZW4gYml0LgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtT
aWduaWZpY2FuZFNpemUgPSA1MzsKKyAgICAgICAgCisgICAgICAgIERvdWJsZSgpIDogZDY0Xygw
KSB7fQorICAgICAgICBleHBsaWNpdCBEb3VibGUoZG91YmxlIGQpIDogZDY0Xyhkb3VibGVfdG9f
dWludDY0KGQpKSB7fQorICAgICAgICBleHBsaWNpdCBEb3VibGUodWludDY0X3QgZDY0KSA6IGQ2
NF8oZDY0KSB7fQorICAgICAgICBleHBsaWNpdCBEb3VibGUoRGl5RnAgZGl5X2ZwKQorICAgICAg
ICA6IGQ2NF8oRGl5RnBUb1VpbnQ2NChkaXlfZnApKSB7fQorICAgICAgICAKKyAgICAgICAgLy8g
VGhlIHZhbHVlIGVuY29kZWQgYnkgdGhpcyBEb3VibGUgbXVzdCBiZSBncmVhdGVyIG9yIGVxdWFs
IHRvICswLjAuCisgICAgICAgIC8vIEl0IG11c3Qgbm90IGJlIHNwZWNpYWwgKGluZmluaXR5LCBv
ciBOYU4pLgorICAgICAgICBEaXlGcCBBc0RpeUZwKCkgY29uc3QgeworICAgICAgICAgICAgQVNT
RVJUKFNpZ24oKSA+IDApOworICAgICAgICAgICAgQVNTRVJUKCFJc1NwZWNpYWwoKSk7CisgICAg
ICAgICAgICByZXR1cm4gRGl5RnAoU2lnbmlmaWNhbmQoKSwgRXhwb25lbnQoKSk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSB2YWx1ZSBlbmNvZGVkIGJ5IHRoaXMgRG91Ymxl
IG11c3QgYmUgc3RyaWN0bHkgZ3JlYXRlciB0aGFuIDAuCisgICAgICAgIERpeUZwIEFzTm9ybWFs
aXplZERpeUZwKCkgY29uc3QgeworICAgICAgICAgICAgQVNTRVJUKHZhbHVlKCkgPiAwLjApOwor
ICAgICAgICAgICAgdWludDY0X3QgZiA9IFNpZ25pZmljYW5kKCk7CisgICAgICAgICAgICBpbnQg
ZSA9IEV4cG9uZW50KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoZSBjdXJyZW50
IGRvdWJsZSBjb3VsZCBiZSBhIGRlbm9ybWFsLgorICAgICAgICAgICAgd2hpbGUgKChmICYga0hp
ZGRlbkJpdCkgPT0gMCkgeworICAgICAgICAgICAgICAgIGYgPDw9IDE7CisgICAgICAgICAgICAg
ICAgZS0tOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gRG8gdGhlIGZpbmFsIHNoaWZ0
cyBpbiBvbmUgZ28uCisgICAgICAgICAgICBmIDw8PSBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSAt
IGtTaWduaWZpY2FuZFNpemU7CisgICAgICAgICAgICBlIC09IERpeUZwOjprU2lnbmlmaWNhbmRT
aXplIC0ga1NpZ25pZmljYW5kU2l6ZTsKKyAgICAgICAgICAgIHJldHVybiBEaXlGcChmLCBlKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJucyB0aGUgZG91YmxlJ3MgYml0
IGFzIHVpbnQ2NC4KKyAgICAgICAgdWludDY0X3QgQXNVaW50NjQoKSBjb25zdCB7CisgICAgICAg
ICAgICByZXR1cm4gZDY0XzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJu
cyB0aGUgbmV4dCBncmVhdGVyIGRvdWJsZS4gUmV0dXJucyAraW5maW5pdHkgb24gaW5wdXQgK2lu
ZmluaXR5LgorICAgICAgICBkb3VibGUgTmV4dERvdWJsZSgpIGNvbnN0IHsKKyAgICAgICAgICAg
IGlmIChkNjRfID09IGtJbmZpbml0eSkgcmV0dXJuIERvdWJsZShrSW5maW5pdHkpLnZhbHVlKCk7
CisgICAgICAgICAgICBpZiAoU2lnbigpIDwgMCAmJiBTaWduaWZpY2FuZCgpID09IDApIHsKKyAg
ICAgICAgICAgICAgICAvLyAtMC4wCisgICAgICAgICAgICAgICAgcmV0dXJuIDAuMDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChTaWduKCkgPCAwKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIERvdWJsZShkNjRfIC0gMSkudmFsdWUoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIERvdWJsZShkNjRfICsgMSkudmFsdWUoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaW50IEV4cG9uZW50KCkgY29uc3Qg
eworICAgICAgICAgICAgaWYgKElzRGVub3JtYWwoKSkgcmV0dXJuIGtEZW5vcm1hbEV4cG9uZW50
OworICAgICAgICAgICAgCisgICAgICAgICAgICB1aW50NjRfdCBkNjQgPSBBc1VpbnQ2NCgpOwor
ICAgICAgICAgICAgaW50IGJpYXNlZF9lID0KKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4o
KGQ2NCAmIGtFeHBvbmVudE1hc2spID4+IGtQaHlzaWNhbFNpZ25pZmljYW5kU2l6ZSk7CisgICAg
ICAgICAgICByZXR1cm4gYmlhc2VkX2UgLSBrRXhwb25lbnRCaWFzOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICB1aW50NjRfdCBTaWduaWZpY2FuZCgpIGNvbnN0IHsKKyAgICAgICAgICAg
IHVpbnQ2NF90IGQ2NCA9IEFzVWludDY0KCk7CisgICAgICAgICAgICB1aW50NjRfdCBzaWduaWZp
Y2FuZCA9IGQ2NCAmIGtTaWduaWZpY2FuZE1hc2s7CisgICAgICAgICAgICBpZiAoIUlzRGVub3Jt
YWwoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBzaWduaWZpY2FuZCArIGtIaWRkZW5CaXQ7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBzaWduaWZpY2Fu
ZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZSBkb3VibGUgaXMgYSBkZW5vcm1hbC4KKyAgICAgICAgYm9vbCBJc0Rlbm9y
bWFsKCkgY29uc3QgeworICAgICAgICAgICAgdWludDY0X3QgZDY0ID0gQXNVaW50NjQoKTsKKyAg
ICAgICAgICAgIHJldHVybiAoZDY0ICYga0V4cG9uZW50TWFzaykgPT0gMDsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgLy8gV2UgY29uc2lkZXIgZGVub3JtYWxzIG5vdCB0byBiZSBzcGVj
aWFsLgorICAgICAgICAvLyBIZW5jZSBvbmx5IEluZmluaXR5IGFuZCBOYU4gYXJlIHNwZWNpYWwu
CisgICAgICAgIGJvb2wgSXNTcGVjaWFsKCkgY29uc3QgeworICAgICAgICAgICAgdWludDY0X3Qg
ZDY0ID0gQXNVaW50NjQoKTsKKyAgICAgICAgICAgIHJldHVybiAoZDY0ICYga0V4cG9uZW50TWFz
aykgPT0ga0V4cG9uZW50TWFzazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBJ
c05hbigpIGNvbnN0IHsKKyAgICAgICAgICAgIHVpbnQ2NF90IGQ2NCA9IEFzVWludDY0KCk7Cisg
ICAgICAgICAgICByZXR1cm4gKChkNjQgJiBrRXhwb25lbnRNYXNrKSA9PSBrRXhwb25lbnRNYXNr
KSAmJgorICAgICAgICAgICAgKChkNjQgJiBrU2lnbmlmaWNhbmRNYXNrKSAhPSAwKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBJc0luZmluaXRlKCkgY29uc3QgeworICAgICAg
ICAgICAgdWludDY0X3QgZDY0ID0gQXNVaW50NjQoKTsKKyAgICAgICAgICAgIHJldHVybiAoKGQ2
NCAmIGtFeHBvbmVudE1hc2spID09IGtFeHBvbmVudE1hc2spICYmCisgICAgICAgICAgICAoKGQ2
NCAmIGtTaWduaWZpY2FuZE1hc2spID09IDApOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpbnQgU2lnbigpIGNvbnN0IHsKKyAgICAgICAgICAgIHVpbnQ2NF90IGQ2NCA9IEFzVWludDY0
KCk7CisgICAgICAgICAgICByZXR1cm4gKGQ2NCAmIGtTaWduTWFzaykgPT0gMD8gMTogLTE7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFByZWNvbmRpdGlvbjogdGhlIHZhbHVlIGVu
Y29kZWQgYnkgdGhpcyBEb3VibGUgbXVzdCBiZSBncmVhdGVyIG9yIGVxdWFsCisgICAgICAgIC8v
IHRoYW4gKzAuMC4KKyAgICAgICAgRGl5RnAgVXBwZXJCb3VuZGFyeSgpIGNvbnN0IHsKKyAgICAg
ICAgICAgIEFTU0VSVChTaWduKCkgPiAwKTsKKyAgICAgICAgICAgIHJldHVybiBEaXlGcChTaWdu
aWZpY2FuZCgpICogMiArIDEsIEV4cG9uZW50KCkgLSAxKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgLy8gQ29tcHV0ZXMgdGhlIHR3byBib3VuZGFyaWVzIG9mIHRoaXMuCisgICAgICAg
IC8vIFRoZSBiaWdnZXIgYm91bmRhcnkgKG1fcGx1cykgaXMgbm9ybWFsaXplZC4gVGhlIGxvd2Vy
IGJvdW5kYXJ5IGhhcyB0aGUgc2FtZQorICAgICAgICAvLyBleHBvbmVudCBhcyBtX3BsdXMuCisg
ICAgICAgIC8vIFByZWNvbmRpdGlvbjogdGhlIHZhbHVlIGVuY29kZWQgYnkgdGhpcyBEb3VibGUg
bXVzdCBiZSBncmVhdGVyIHRoYW4gMC4KKyAgICAgICAgdm9pZCBOb3JtYWxpemVkQm91bmRhcmll
cyhEaXlGcCogb3V0X21fbWludXMsIERpeUZwKiBvdXRfbV9wbHVzKSBjb25zdCB7CisgICAgICAg
ICAgICBBU1NFUlQodmFsdWUoKSA+IDAuMCk7CisgICAgICAgICAgICBEaXlGcCB2ID0gdGhpcy0+
QXNEaXlGcCgpOworICAgICAgICAgICAgYm9vbCBzaWduaWZpY2FuZF9pc196ZXJvID0gKHYuZigp
ID09IGtIaWRkZW5CaXQpOworICAgICAgICAgICAgRGl5RnAgbV9wbHVzID0gRGl5RnA6Ok5vcm1h
bGl6ZShEaXlGcCgodi5mKCkgPDwgMSkgKyAxLCB2LmUoKSAtIDEpKTsKKyAgICAgICAgICAgIERp
eUZwIG1fbWludXM7CisgICAgICAgICAgICBpZiAoc2lnbmlmaWNhbmRfaXNfemVybyAmJiB2LmUo
KSAhPSBrRGVub3JtYWxFeHBvbmVudCkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBib3VuZGFy
eSBpcyBjbG9zZXIuIFRoaW5rIG9mIHYgPSAxMDAwZTEwIGFuZCB2LSA9IDk5OTllOS4KKyAgICAg
ICAgICAgICAgICAvLyBUaGVuIHRoZSBib3VuZGFyeSAoPT0gKHYgLSB2LSkvMikgaXMgbm90IGp1
c3QgYXQgYSBkaXN0YW5jZSBvZiAxZTkgYnV0CisgICAgICAgICAgICAgICAgLy8gYXQgYSBkaXN0
YW5jZSBvZiAxZTguCisgICAgICAgICAgICAgICAgLy8gVGhlIG9ubHkgZXhjZXB0aW9uIGlzIGZv
ciB0aGUgc21hbGxlc3Qgbm9ybWFsOiB0aGUgbGFyZ2VzdCBkZW5vcm1hbCBpcworICAgICAgICAg
ICAgICAgIC8vIGF0IHRoZSBzYW1lIGRpc3RhbmNlIGFzIGl0cyBzdWNjZXNzb3IuCisgICAgICAg
ICAgICAgICAgLy8gTm90ZTogZGVub3JtYWxzIGhhdmUgdGhlIHNhbWUgZXhwb25lbnQgYXMgdGhl
IHNtYWxsZXN0IG5vcm1hbHMuCisgICAgICAgICAgICAgICAgbV9taW51cyA9IERpeUZwKCh2LmYo
KSA8PCAyKSAtIDEsIHYuZSgpIC0gMik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIG1fbWludXMgPSBEaXlGcCgodi5mKCkgPDwgMSkgLSAxLCB2LmUoKSAtIDEpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgbV9taW51cy5zZXRfZihtX21pbnVzLmYoKSA8PCAobV9t
aW51cy5lKCkgLSBtX3BsdXMuZSgpKSk7CisgICAgICAgICAgICBtX21pbnVzLnNldF9lKG1fcGx1
cy5lKCkpOworICAgICAgICAgICAgKm91dF9tX3BsdXMgPSBtX3BsdXM7CisgICAgICAgICAgICAq
b3V0X21fbWludXMgPSBtX21pbnVzOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBkb3Vi
bGUgdmFsdWUoKSBjb25zdCB7IHJldHVybiB1aW50NjRfdG9fZG91YmxlKGQ2NF8pOyB9CisgICAg
ICAgIAorICAgICAgICAvLyBSZXR1cm5zIHRoZSBzaWduaWZpY2FuZCBzaXplIGZvciBhIGdpdmVu
IG9yZGVyIG9mIG1hZ25pdHVkZS4KKyAgICAgICAgLy8gSWYgdiA9IGYqMl5lIHdpdGggMl5wLTEg
PD0gZiA8PSAyXnAgdGhlbiBwK2UgaXMgdidzIG9yZGVyIG9mIG1hZ25pdHVkZS4KKyAgICAgICAg
Ly8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgYmluYXJ5
IGRpZ2l0cyB2IHdpbGwgaGF2ZQorICAgICAgICAvLyBvbmNlIGl0J3MgZW5jb2RlZCBpbnRvIGEg
ZG91YmxlLiBJbiBhbG1vc3QgYWxsIGNhc2VzIHRoaXMgaXMgZXF1YWwgdG8KKyAgICAgICAgLy8g
a1NpZ25pZmljYW5kU2l6ZS4gVGhlIG9ubHkgZXhjZXB0aW9ucyBhcmUgZGVub3JtYWxzLiBUaGV5
IHN0YXJ0IHdpdGgKKyAgICAgICAgLy8gbGVhZGluZyB6ZXJvZXMgYW5kIHRoZWlyIGVmZmVjdGl2
ZSBzaWduaWZpY2FuZC1zaXplIGlzIGhlbmNlIHNtYWxsZXIuCisgICAgICAgIHN0YXRpYyBpbnQg
U2lnbmlmaWNhbmRTaXplRm9yT3JkZXJPZk1hZ25pdHVkZShpbnQgb3JkZXIpIHsKKyAgICAgICAg
ICAgIGlmIChvcmRlciA+PSAoa0Rlbm9ybWFsRXhwb25lbnQgKyBrU2lnbmlmaWNhbmRTaXplKSkg
eworICAgICAgICAgICAgICAgIHJldHVybiBrU2lnbmlmaWNhbmRTaXplOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKG9yZGVyIDw9IGtEZW5vcm1hbEV4cG9uZW50KSByZXR1cm4gMDsK
KyAgICAgICAgICAgIHJldHVybiBvcmRlciAtIGtEZW5vcm1hbEV4cG9uZW50OworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBzdGF0aWMgZG91YmxlIEluZmluaXR5KCkgeworICAgICAgICAg
ICAgcmV0dXJuIERvdWJsZShrSW5maW5pdHkpLnZhbHVlKCk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHN0YXRpYyBkb3VibGUgTmFOKCkgeworICAgICAgICAgICAgcmV0dXJuIERvdWJs
ZShrTmFOKS52YWx1ZSgpOworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQga0V4cG9uZW50QmlhcyA9IDB4M0ZGICsga1BoeXNpY2FsU2ln
bmlmaWNhbmRTaXplOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtEZW5vcm1hbEV4cG9uZW50
ID0gLWtFeHBvbmVudEJpYXMgKyAxOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtNYXhFeHBv
bmVudCA9IDB4N0ZGIC0ga0V4cG9uZW50QmlhczsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQ2
NF90IGtJbmZpbml0eSA9IFVJTlQ2NF8yUEFSVF9DKDB4N0ZGMDAwMDAsIDAwMDAwMDAwKTsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGtOYU4gPSBVSU5UNjRfMlBBUlRfQygweDdGRjgw
MDAwLCAwMDAwMDAwMCk7CisgICAgICAgIAorICAgICAgICBjb25zdCB1aW50NjRfdCBkNjRfOwor
ICAgICAgICAKKyAgICAgICAgc3RhdGljIHVpbnQ2NF90IERpeUZwVG9VaW50NjQoRGl5RnAgZGl5
X2ZwKSB7CisgICAgICAgICAgICB1aW50NjRfdCBzaWduaWZpY2FuZCA9IGRpeV9mcC5mKCk7Cisg
ICAgICAgICAgICBpbnQgZXhwb25lbnQgPSBkaXlfZnAuZSgpOworICAgICAgICAgICAgd2hpbGUg
KHNpZ25pZmljYW5kID4ga0hpZGRlbkJpdCArIGtTaWduaWZpY2FuZE1hc2spIHsKKyAgICAgICAg
ICAgICAgICBzaWduaWZpY2FuZCA+Pj0gMTsKKyAgICAgICAgICAgICAgICBleHBvbmVudCsrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGV4cG9uZW50ID49IGtNYXhFeHBvbmVudCkg
eworICAgICAgICAgICAgICAgIHJldHVybiBrSW5maW5pdHk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoZXhwb25lbnQgPCBrRGVub3JtYWxFeHBvbmVudCkgeworICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hpbGUgKGV4cG9uZW50
ID4ga0Rlbm9ybWFsRXhwb25lbnQgJiYgKHNpZ25pZmljYW5kICYga0hpZGRlbkJpdCkgPT0gMCkg
eworICAgICAgICAgICAgICAgIHNpZ25pZmljYW5kIDw8PSAxOworICAgICAgICAgICAgICAgIGV4
cG9uZW50LS07CisgICAgICAgICAgICB9CisgICAgICAgICAgICB1aW50NjRfdCBiaWFzZWRfZXhw
b25lbnQ7CisgICAgICAgICAgICBpZiAoZXhwb25lbnQgPT0ga0Rlbm9ybWFsRXhwb25lbnQgJiYg
KHNpZ25pZmljYW5kICYga0hpZGRlbkJpdCkgPT0gMCkgeworICAgICAgICAgICAgICAgIGJpYXNl
ZF9leHBvbmVudCA9IDA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJp
YXNlZF9leHBvbmVudCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihleHBvbmVudCArIGtFeHBvbmVu
dEJpYXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIChzaWduaWZpY2FuZCAm
IGtTaWduaWZpY2FuZE1hc2spIHwKKyAgICAgICAgICAgIChiaWFzZWRfZXhwb25lbnQgPDwga1Bo
eXNpY2FsU2lnbmlmaWNhbmRTaXplKTsKKyAgICAgICAgfQorICAgIH07CisgICAgCit9ICAvLyBu
YW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KKworI2VuZGlmICAvLyBET1VCTEVfQ09OVkVSU0lP
Tl9ET1VCTEVfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9m
YXN0LWR0b2EuY2MgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZmFzdC1kdG9hLmNj
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmRkODY4ZTBiMzhhNzUzOGU1ZjlkYTcwNWE5OWQwYWVlMjAyNDg4MDAKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZmFzdC1kdG9h
LmNjCkBAIC0wLDAgKzEsNzM1IEBACisvLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJvamVjdCBh
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
Ky8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpbmNs
dWRlICJmYXN0LWR0b2EuaCIKKworI2luY2x1ZGUgImNhY2hlZC1wb3dlcnMuaCIKKyNpbmNsdWRl
ICJkaXktZnAuaCIKKyNpbmNsdWRlICJkb3VibGUuaCIKKworbmFtZXNwYWNlIGRvdWJsZV9jb252
ZXJzaW9uIHsKKyAgICAKKyAgICAvLyBUaGUgbWluaW1hbCBhbmQgbWF4aW1hbCB0YXJnZXQgZXhw
b25lbnQgZGVmaW5lIHRoZSByYW5nZSBvZiB3J3MgYmluYXJ5CisgICAgLy8gZXhwb25lbnQsIHdo
ZXJlICd3JyBpcyB0aGUgcmVzdWx0IG9mIG11bHRpcGx5aW5nIHRoZSBpbnB1dCBieSBhIGNhY2hl
ZCBwb3dlcgorICAgIC8vIG9mIHRlbi4KKyAgICAvLworICAgIC8vIEEgZGlmZmVyZW50IHJhbmdl
IG1pZ2h0IGJlIGNob3NlbiBvbiBhIGRpZmZlcmVudCBwbGF0Zm9ybSwgdG8gb3B0aW1pemUgZGln
aXQKKyAgICAvLyBnZW5lcmF0aW9uLCBidXQgYSBzbWFsbGVyIHJhbmdlIHJlcXVpcmVzIG1vcmUg
cG93ZXJzIG9mIHRlbiB0byBiZSBjYWNoZWQuCisgICAgc3RhdGljIGNvbnN0IGludCBrTWluaW1h
bFRhcmdldEV4cG9uZW50ID0gLTYwOworICAgIHN0YXRpYyBjb25zdCBpbnQga01heGltYWxUYXJn
ZXRFeHBvbmVudCA9IC0zMjsKKyAgICAKKyAgICAKKyAgICAvLyBBZGp1c3RzIHRoZSBsYXN0IGRp
Z2l0IG9mIHRoZSBnZW5lcmF0ZWQgbnVtYmVyLCBhbmQgc2NyZWVucyBvdXQgZ2VuZXJhdGVkCisg
ICAgLy8gc29sdXRpb25zIHRoYXQgbWF5IGJlIGluYWNjdXJhdGUuIEEgc29sdXRpb24gbWF5IGJl
IGluYWNjdXJhdGUgaWYgaXQgaXMKKyAgICAvLyBvdXRzaWRlIHRoZSBzYWZlIGludGVydmFsLCBv
ciBpZiB3ZSBjYW5ub3QgcHJvdmUgdGhhdCBpdCBpcyBjbG9zZXIgdG8gdGhlCisgICAgLy8gaW5w
dXQgdGhhbiBhIG5laWdoYm9yaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzYW1lIGxlbmd0aC4K
KyAgICAvLworICAgIC8vIElucHV0OiAqIGJ1ZmZlciBjb250YWluaW5nIHRoZSBkaWdpdHMgb2Yg
dG9vX2hpZ2ggLyAxMF5rYXBwYQorICAgIC8vICAgICAgICAqIHRoZSBidWZmZXIncyBsZW5ndGgK
KyAgICAvLyAgICAgICAgKiBkaXN0YW5jZV90b29faGlnaF93ID09ICh0b29faGlnaCAtIHcpLmYo
KSAqIHVuaXQKKyAgICAvLyAgICAgICAgKiB1bnNhZmVfaW50ZXJ2YWwgPT0gKHRvb19oaWdoIC0g
dG9vX2xvdykuZigpICogdW5pdAorICAgIC8vICAgICAgICAqIHJlc3QgPSAodG9vX2hpZ2ggLSBi
dWZmZXIgKiAxMF5rYXBwYSkuZigpICogdW5pdAorICAgIC8vICAgICAgICAqIHRlbl9rYXBwYSA9
IDEwXmthcHBhICogdW5pdAorICAgIC8vICAgICAgICAqIHVuaXQgPSB0aGUgY29tbW9uIG11bHRp
cGxpZXIKKyAgICAvLyBPdXRwdXQ6IHJldHVybnMgdHJ1ZSBpZiB0aGUgYnVmZmVyIGlzIGd1YXJh
bnRlZWQgdG8gY29udGFpbiB0aGUgY2xvc2VzdAorICAgIC8vICAgIHJlcHJlc2VudGFibGUgbnVt
YmVyIHRvIHRoZSBpbnB1dC4KKyAgICAvLyAgTW9kaWZpZXMgdGhlIGdlbmVyYXRlZCBkaWdpdHMg
aW4gdGhlIGJ1ZmZlciB0byBhcHByb2FjaCAocm91bmQgdG93YXJkcykgdy4KKyAgICBzdGF0aWMg
Ym9vbCBSb3VuZFdlZWQoVmVjdG9yPGNoYXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgZGlz
dGFuY2VfdG9vX2hpZ2hfdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgdW5z
YWZlX2ludGVydmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCByZXN0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCB0ZW5fa2FwcGEsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVpbnQ2NF90IHVuaXQpIHsKKyAgICAgICAgdWludDY0X3Qgc21hbGxf
ZGlzdGFuY2UgPSBkaXN0YW5jZV90b29faGlnaF93IC0gdW5pdDsKKyAgICAgICAgdWludDY0X3Qg
YmlnX2Rpc3RhbmNlID0gZGlzdGFuY2VfdG9vX2hpZ2hfdyArIHVuaXQ7CisgICAgICAgIC8vIExl
dCB3X2xvdyAgPSB0b29faGlnaCAtIGJpZ19kaXN0YW5jZSwgYW5kCisgICAgICAgIC8vICAgICB3
X2hpZ2ggPSB0b29faGlnaCAtIHNtYWxsX2Rpc3RhbmNlLgorICAgICAgICAvLyBOb3RlOiB3X2xv
dyA8IHcgPCB3X2hpZ2gKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhlIHJlYWwgdyAoKiB1bml0
KSBtdXN0IGxpZSBzb21ld2hlcmUgaW5zaWRlIHRoZSBpbnRlcnZhbAorICAgICAgICAvLyBdd19s
b3c7IHdfaGlnaFsgKG9mdGVuIHdyaXR0ZW4gYXMgIih3X2xvdzsgd19oaWdoKSIpCisgICAgICAg
IAorICAgICAgICAvLyBCYXNpY2FsbHkgdGhlIGJ1ZmZlciBjdXJyZW50bHkgY29udGFpbnMgYSBu
dW1iZXIgaW4gdGhlIHVuc2FmZSBpbnRlcnZhbAorICAgICAgICAvLyBddG9vX2xvdzsgdG9vX2hp
Z2hbIHdpdGggdG9vX2xvdyA8IHcgPCB0b29faGlnaAorICAgICAgICAvLworICAgICAgICAvLyAg
dG9vX2hpZ2ggLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g
LSAtIC0gLSAtIC0gLSAtIC0KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBediAxIHVu
aXQgICAgICAgICAgICBeICAgICAgXiAgICAgICAgICAgICAgICAgXiAgICAgIF4KKyAgICAgICAg
Ly8gIGJvdW5kYXJ5X2hpZ2ggLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAuICAgICAgLiAgICAg
ICAgICAgICAgICAgLiAgICAgIC4KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBediAx
IHVuaXQgICAgICAgICAgICAuICAgICAgLiAgICAgICAgICAgICAgICAgLiAgICAgIC4KKyAgICAg
ICAgLy8gICAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICArICAtIC0gKyAt
IC0gLSAtIC0gLSAgICAgLiAgICAgIC4KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAuICAgICAgLiAgICAgICAgIF4gICAgICAgLiAgICAgIC4KKyAg
ICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICBiaWdf
ZGlzdGFuY2UgIC4gICAgICAgLiAgICAgIC4KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAuICAgICAgLiAgICAgICAgIC4gICAgICAgLiAgICByZXN0
CisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21hbGxfZGlzdGFuY2Ug
ICAgIC4gICAgICAgICAuICAgICAgIC4gICAgICAuCisgICAgICAgIC8vICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdiAgICAgIC4gICAgICAgICAuICAgICAgIC4gICAg
ICAuCisgICAgICAgIC8vICB3X2hpZ2ggLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAt
IC0gICAgIC4gICAgICAgICAuICAgICAgIC4gICAgICAuCisgICAgICAgIC8vICAgICAgICAgICAg
ICAgICAgICAgXnYgMSB1bml0ICAgICAgICAgICAgICAgICAgIC4gICAgICAgICAuICAgICAgIC4g
ICAgICAuCisgICAgICAgIC8vICB3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0gICAgIC4gICAgICAgICAuICAgICAgIC4gICAgICAuCisgICAgICAgIC8vICAgICAgICAg
ICAgICAgICAgICAgXnYgMSB1bml0ICAgICAgICAgICAgICAgICAgIHYgICAgICAgICAuICAgICAg
IC4gICAgICAuCisgICAgICAgIC8vICB3X2xvdyAgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAt
IC0gLSAtIC0gLSAtIC0gICAgICAgICAuICAgICAgIC4gICAgICAuCisgICAgICAgIC8vICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICAg
ICAgIC4gICAgICB2CisgICAgICAgIC8vICBidWZmZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLQorICAgICAgICAvLyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LiAgICAgICAuCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzYWZlX2ludGVydmFsICAgIC4KKyAgICAgICAgLy8gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgICAgICAgLgor
ICAgICAgICAvLyAgIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g
LSAtIC0gLSAtIC0gLSAtICAgICAuCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXnYg
MSB1bml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4KKyAgICAgICAgLy8g
IGJvdW5kYXJ5X2xvdyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAg
ICAgdW5zYWZlX2ludGVydmFsCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXnYgMSB1
bml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYKKyAgICAgICAgLy8gIHRv
b19sb3cgIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g
LSAtIC0gLSAtIC0gLSAtCisgICAgICAgIC8vCisgICAgICAgIC8vCisgICAgICAgIC8vIE5vdGUg
dGhhdCB0aGUgdmFsdWUgb2YgYnVmZmVyIGNvdWxkIGxpZSBhbnl3aGVyZSBpbnNpZGUgdGhlIHJh
bmdlIHRvb19sb3cKKyAgICAgICAgLy8gdG8gdG9vX2hpZ2guCisgICAgICAgIC8vCisgICAgICAg
IC8vIGJvdW5kYXJ5X2xvdywgYm91bmRhcnlfaGlnaCBhbmQgdyBhcmUgYXBwcm94aW1hdGlvbnMg
b2YgdGhlIHJlYWwgYm91bmRhcmllcworICAgICAgICAvLyBhbmQgdiAodGhlIGlucHV0IG51bWJl
cikuIFRoZXkgYXJlIGd1YXJhbnRlZWQgdG8gYmUgcHJlY2lzZSB1cCB0byBvbmUgdW5pdC4KKyAg
ICAgICAgLy8gSW4gZmFjdCB0aGUgZXJyb3IgaXMgZ3VhcmFudGVlZCB0byBiZSBzdHJpY3RseSBs
ZXNzIHRoYW4gb25lIHVuaXQuCisgICAgICAgIC8vCisgICAgICAgIC8vIEFueXRoaW5nIHRoYXQg
bGllcyBvdXRzaWRlIHRoZSB1bnNhZmUgaW50ZXJ2YWwgaXMgZ3VhcmFudGVlZCBub3QgdG8gcm91
bmQKKyAgICAgICAgLy8gdG8gdiB3aGVuIHJlYWQgYWdhaW4uCisgICAgICAgIC8vIEFueXRoaW5n
IHRoYXQgbGllcyBpbnNpZGUgdGhlIHNhZmUgaW50ZXJ2YWwgaXMgZ3VhcmFudGVlZCB0byByb3Vu
ZCB0byB2CisgICAgICAgIC8vIHdoZW4gcmVhZCBhZ2Fpbi4KKyAgICAgICAgLy8gSWYgdGhlIG51
bWJlciBpbnNpZGUgdGhlIGJ1ZmZlciBsaWVzIGluc2lkZSB0aGUgdW5zYWZlIGludGVydmFsIGJ1
dCBub3QKKyAgICAgICAgLy8gaW5zaWRlIHRoZSBzYWZlIGludGVydmFsIHRoZW4gd2Ugc2ltcGx5
IGRvIG5vdCBrbm93IGFuZCBiYWlsIG91dCAocmV0dXJuaW5nCisgICAgICAgIC8vIGZhbHNlKS4K
KyAgICAgICAgLy8KKyAgICAgICAgLy8gU2ltaWxhcmx5IHdlIGhhdmUgdG8gdGFrZSBpbnRvIGFj
Y291bnQgdGhlIGltcHJlY2lzaW9uIG9mICd3JyB3aGVuIGZpbmRpbmcKKyAgICAgICAgLy8gdGhl
IGNsb3Nlc3QgcmVwcmVzZW50YXRpb24gb2YgJ3cnLiBJZiB3ZSBoYXZlIHR3byBwb3RlbnRpYWwK
KyAgICAgICAgLy8gcmVwcmVzZW50YXRpb25zLCBhbmQgb25lIGlzIGNsb3NlciB0byBib3RoIHdf
bG93IGFuZCB3X2hpZ2gsIHRoZW4gd2Uga25vdworICAgICAgICAvLyBpdCBpcyBjbG9zZXIgdG8g
dGhlIGFjdHVhbCB2YWx1ZSB2LgorICAgICAgICAvLworICAgICAgICAvLyBCeSBnZW5lcmF0aW5n
IHRoZSBkaWdpdHMgb2YgdG9vX2hpZ2ggd2UgZ290IHRoZSBsYXJnZXN0IChjbG9zZXN0IHRvCisg
ICAgICAgIC8vIHRvb19oaWdoKSBidWZmZXIgdGhhdCBpcyBzdGlsbCBpbiB0aGUgdW5zYWZlIGlu
dGVydmFsLiBJbiB0aGUgY2FzZSB3aGVyZQorICAgICAgICAvLyB3X2hpZ2ggPCBidWZmZXIgPCB0
b29faGlnaCB3ZSB0cnkgdG8gZGVjcmVtZW50IHRoZSBidWZmZXIuCisgICAgICAgIC8vIFRoaXMg
d2F5IHRoZSBidWZmZXIgYXBwcm9hY2hlcyAocm91bmRzIHRvd2FyZHMpIHcuCisgICAgICAgIC8v
IFRoZXJlIGFyZSAzIGNvbmRpdGlvbnMgdGhhdCBzdG9wIHRoZSBkZWNyZW1lbnRhdGlvbiBwcm9j
ZXNzOgorICAgICAgICAvLyAgIDEpIHRoZSBidWZmZXIgaXMgYWxyZWFkeSBiZWxvdyB3X2hpZ2gK
KyAgICAgICAgLy8gICAyKSBkZWNyZW1lbnRpbmcgdGhlIGJ1ZmZlciB3b3VsZCBtYWtlIGl0IGxl
YXZlIHRoZSB1bnNhZmUgaW50ZXJ2YWwKKyAgICAgICAgLy8gICAzKSBkZWNyZW1lbnRpbmcgdGhl
IGJ1ZmZlciB3b3VsZCB5aWVsZCBhIG51bWJlciBiZWxvdyB3X2hpZ2ggYW5kIGZhcnRoZXIKKyAg
ICAgICAgLy8gICAgICBhd2F5IHRoYW4gdGhlIGN1cnJlbnQgbnVtYmVyLiBJbiBvdGhlciB3b3Jk
czoKKyAgICAgICAgLy8gICAgICAgICAgICAgIChidWZmZXJ7LTF9IDwgd19oaWdoKSAmJiB3X2hp
Z2ggLSBidWZmZXJ7LTF9ID4gYnVmZmVyIC0gd19oaWdoCisgICAgICAgIC8vIEluc3RlYWQgb2Yg
dXNpbmcgdGhlIGJ1ZmZlciBkaXJlY3RseSB3ZSB1c2UgaXRzIGRpc3RhbmNlIHRvIHRvb19oaWdo
LgorICAgICAgICAvLyBDb25jZXB0dWFsbHkgcmVzdCB+PSB0b29faGlnaCAtIGJ1ZmZlcgorICAg
ICAgICAvLyBXZSBuZWVkIHRvIGRvIHRoZSBmb2xsb3dpbmcgdGVzdHMgaW4gdGhpcyBvcmRlciB0
byBhdm9pZCBvdmVyLSBhbmQKKyAgICAgICAgLy8gdW5kZXJmbG93cy4KKyAgICAgICAgQVNTRVJU
KHJlc3QgPD0gdW5zYWZlX2ludGVydmFsKTsKKyAgICAgICAgd2hpbGUgKHJlc3QgPCBzbWFsbF9k
aXN0YW5jZSAmJiAgLy8gTmVnYXRlZCBjb25kaXRpb24gMQorICAgICAgICAgICAgICAgdW5zYWZl
X2ludGVydmFsIC0gcmVzdCA+PSB0ZW5fa2FwcGEgJiYgIC8vIE5lZ2F0ZWQgY29uZGl0aW9uIDIK
KyAgICAgICAgICAgICAgIChyZXN0ICsgdGVuX2thcHBhIDwgc21hbGxfZGlzdGFuY2UgfHwgIC8v
IGJ1ZmZlcnstMX0gPiB3X2hpZ2gKKyAgICAgICAgICAgICAgICBzbWFsbF9kaXN0YW5jZSAtIHJl
c3QgPj0gcmVzdCArIHRlbl9rYXBwYSAtIHNtYWxsX2Rpc3RhbmNlKSkgeworICAgICAgICAgICAg
ICAgICAgIGJ1ZmZlcltsZW5ndGggLSAxXS0tOworICAgICAgICAgICAgICAgICAgIHJlc3QgKz0g
dGVuX2thcHBhOworICAgICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gV2UgaGF2
ZSBhcHByb2FjaGVkIHcrIGFzIG11Y2ggYXMgcG9zc2libGUuIFdlIG5vdyB0ZXN0IGlmIGFwcHJv
YWNoaW5nIHctCisgICAgICAgIC8vIHdvdWxkIHJlcXVpcmUgY2hhbmdpbmcgdGhlIGJ1ZmZlci4g
SWYgeWVzLCB0aGVuIHdlIGhhdmUgdHdvIHBvc3NpYmxlCisgICAgICAgIC8vIHJlcHJlc2VudGF0
aW9ucyBjbG9zZSB0byB3LCBidXQgd2UgY2Fubm90IGRlY2lkZSB3aGljaCBvbmUgaXMgY2xvc2Vy
LgorICAgICAgICBpZiAocmVzdCA8IGJpZ19kaXN0YW5jZSAmJgorICAgICAgICAgICAgdW5zYWZl
X2ludGVydmFsIC0gcmVzdCA+PSB0ZW5fa2FwcGEgJiYKKyAgICAgICAgICAgIChyZXN0ICsgdGVu
X2thcHBhIDwgYmlnX2Rpc3RhbmNlIHx8CisgICAgICAgICAgICAgYmlnX2Rpc3RhbmNlIC0gcmVz
dCA+IHJlc3QgKyB0ZW5fa2FwcGEgLSBiaWdfZGlzdGFuY2UpKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gV2VlZGlu
ZyB0ZXN0LgorICAgICAgICAvLyAgIFRoZSBzYWZlIGludGVydmFsIGlzIFt0b29fbG93ICsgMiB1
bHA7IHRvb19oaWdoIC0gMiB1bHBdCisgICAgICAgIC8vICAgU2luY2UgdG9vX2xvdyA9IHRvb19o
aWdoIC0gdW5zYWZlX2ludGVydmFsIHRoaXMgaXMgZXF1aXZhbGVudCB0bworICAgICAgICAvLyAg
ICAgIFt0b29faGlnaCAtIHVuc2FmZV9pbnRlcnZhbCArIDQgdWxwOyB0b29faGlnaCAtIDIgdWxw
XQorICAgICAgICAvLyAgIENvbmNlcHR1YWxseSB3ZSBoYXZlOiByZXN0IH49IHRvb19oaWdoIC0g
YnVmZmVyCisgICAgICAgIHJldHVybiAoMiAqIHVuaXQgPD0gcmVzdCkgJiYgKHJlc3QgPD0gdW5z
YWZlX2ludGVydmFsIC0gNCAqIHVuaXQpOworICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBSb3Vu
ZHMgdGhlIGJ1ZmZlciB1cHdhcmRzIGlmIHRoZSByZXN1bHQgaXMgY2xvc2VyIHRvIHYgYnkgcG9z
c2libHkgYWRkaW5nCisgICAgLy8gMSB0byB0aGUgYnVmZmVyLiBJZiB0aGUgcHJlY2lzaW9uIG9m
IHRoZSBjYWxjdWxhdGlvbiBpcyBub3Qgc3VmZmljaWVudCB0bworICAgIC8vIHJvdW5kIGNvcnJl
Y3RseSwgcmV0dXJuIGZhbHNlLgorICAgIC8vIFRoZSByb3VuZGluZyBtaWdodCBzaGlmdCB0aGUg
d2hvbGUgYnVmZmVyIGluIHdoaWNoIGNhc2UgdGhlIGthcHBhIGlzCisgICAgLy8gYWRqdXN0ZWQu
IEZvciBleGFtcGxlICI5OSIsIGthcHBhID0gMyBtaWdodCBiZWNvbWUgIjEwIiwga2FwcGEgPSA0
LgorICAgIC8vCisgICAgLy8gSWYgMipyZXN0ID4gdGVuX2thcHBhIHRoZW4gdGhlIGJ1ZmZlciBu
ZWVkcyB0byBiZSByb3VuZCB1cC4KKyAgICAvLyByZXN0IGNhbiBoYXZlIGFuIGVycm9yIG9mICsv
LSAxIHVuaXQuIFRoaXMgZnVuY3Rpb24gYWNjb3VudHMgZm9yIHRoZQorICAgIC8vIGltcHJlY2lz
aW9uIGFuZCByZXR1cm5zIGZhbHNlLCBpZiB0aGUgcm91bmRpbmcgZGlyZWN0aW9uIGNhbm5vdCBi
ZQorICAgIC8vIHVuYW1iaWd1b3VzbHkgZGV0ZXJtaW5lZC4KKyAgICAvLworICAgIC8vIFByZWNv
bmRpdGlvbjogcmVzdCA8IHRlbl9rYXBwYS4KKyAgICBzdGF0aWMgYm9vbCBSb3VuZFdlZWRDb3Vu
dGVkKFZlY3RvcjxjaGFyPiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3Qg
cmVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHRlbl9rYXBw
YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHVuaXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGthcHBhKSB7CisgICAgICAgIEFTU0VS
VChyZXN0IDwgdGVuX2thcHBhKTsKKyAgICAgICAgLy8gVGhlIGZvbGxvd2luZyB0ZXN0cyBhcmUg
ZG9uZSBpbiBhIHNwZWNpZmljIG9yZGVyIHRvIGF2b2lkIG92ZXJmbG93cy4gVGhleQorICAgICAg
ICAvLyB3aWxsIHdvcmsgY29ycmVjdGx5IHdpdGggYW55IHVpbnQ2NCB2YWx1ZXMgb2YgcmVzdCA8
IHRlbl9rYXBwYSBhbmQgdW5pdC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgdGhlIHVuaXQg
aXMgdG9vIGJpZywgdGhlbiB3ZSBkb24ndCBrbm93IHdoaWNoIHdheSB0byByb3VuZC4gRm9yIGV4
YW1wbGUKKyAgICAgICAgLy8gYSB1bml0IG9mIDUwIG1lYW5zIHRoYXQgdGhlIHJlYWwgbnVtYmVy
IGxpZXMgd2l0aGluIHJlc3QgKy8tIDUwLiBJZgorICAgICAgICAvLyAxMF5rYXBwYSA9PSA0MCB0
aGVuIHRoZXJlIGlzIG5vIHdheSB0byB0ZWxsIHdoaWNoIHdheSB0byByb3VuZC4KKyAgICAgICAg
aWYgKHVuaXQgPj0gdGVuX2thcHBhKSByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIEV2ZW4gaWYg
dW5pdCBpcyBqdXN0IGhhbGYgdGhlIHNpemUgb2YgMTBea2FwcGEgd2UgYXJlIGFscmVhZHkgY29t
cGxldGVseQorICAgICAgICAvLyBsb3N0LiAoQW5kIGFmdGVyIHRoZSBwcmV2aW91cyB0ZXN0IHdl
IGtub3cgdGhhdCB0aGUgZXhwcmVzc2lvbiB3aWxsIG5vdAorICAgICAgICAvLyBvdmVyL3VuZGVy
Zmxvdy4pCisgICAgICAgIGlmICh0ZW5fa2FwcGEgLSB1bml0IDw9IHVuaXQpIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgLy8gSWYgMiAqIChyZXN0ICsgdW5pdCkgPD0gMTBea2FwcGEgd2UgY2FuIHNh
ZmVseSByb3VuZCBkb3duLgorICAgICAgICBpZiAoKHRlbl9rYXBwYSAtIHJlc3QgPiByZXN0KSAm
JiAodGVuX2thcHBhIC0gMiAqIHJlc3QgPj0gMiAqIHVuaXQpKSB7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBJZiAyICogKHJlc3QgLSB1bml0KSA+PSAx
MF5rYXBwYSwgdGhlbiB3ZSBjYW4gc2FmZWx5IHJvdW5kIHVwLgorICAgICAgICBpZiAoKHJlc3Qg
PiB1bml0KSAmJiAodGVuX2thcHBhIC0gKHJlc3QgLSB1bml0KSA8PSAocmVzdCAtIHVuaXQpKSkg
eworICAgICAgICAgICAgLy8gSW5jcmVtZW50IHRoZSBsYXN0IGRpZ2l0IHJlY3Vyc2l2ZWx5IHVu
dGlsIHdlIGZpbmQgYSBub24gJzknIGRpZ2l0LgorICAgICAgICAgICAgYnVmZmVyW2xlbmd0aCAt
IDFdKys7CisgICAgICAgICAgICBmb3IgKGludCBpID0gbGVuZ3RoIC0gMTsgaSA+IDA7IC0taSkg
eworICAgICAgICAgICAgICAgIGlmIChidWZmZXJbaV0gIT0gJzAnICsgMTApIGJyZWFrOworICAg
ICAgICAgICAgICAgIGJ1ZmZlcltpXSA9ICcwJzsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSAt
IDFdKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBJZiB0aGUgZmlyc3QgZGlnaXQg
aXMgbm93ICcwJysgMTAgd2UgaGFkIGEgYnVmZmVyIHdpdGggYWxsICc5J3MuIFdpdGggdGhlCisg
ICAgICAgICAgICAvLyBleGNlcHRpb24gb2YgdGhlIGZpcnN0IGRpZ2l0IGFsbCBkaWdpdHMgYXJl
IG5vdyAnMCcuIFNpbXBseSBzd2l0Y2ggdGhlCisgICAgICAgICAgICAvLyBmaXJzdCBkaWdpdCB0
byAnMScgYW5kIGFkanVzdCB0aGUga2FwcGEuIEV4YW1wbGU6ICI5OSIgYmVjb21lcyAiMTAiIGFu
ZAorICAgICAgICAgICAgLy8gdGhlIHBvd2VyICh0aGUga2FwcGEpIGlzIGluY3JlYXNlZC4KKyAg
ICAgICAgICAgIGlmIChidWZmZXJbMF0gPT0gJzAnICsgMTApIHsKKyAgICAgICAgICAgICAgICBi
dWZmZXJbMF0gPSAnMSc7CisgICAgICAgICAgICAgICAgKCprYXBwYSkgKz0gMTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgCisgICAgCisgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IGtU
ZW40ID0gMTAwMDA7CisgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IGtUZW41ID0gMTAwMDAwOwor
ICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBrVGVuNiA9IDEwMDAwMDA7CisgICAgc3RhdGljIGNv
bnN0IHVpbnQzMl90IGtUZW43ID0gMTAwMDAwMDA7CisgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90
IGtUZW44ID0gMTAwMDAwMDAwOworICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBrVGVuOSA9IDEw
MDAwMDAwMDA7CisgICAgCisgICAgLy8gUmV0dXJucyB0aGUgYmlnZ2VzdCBwb3dlciBvZiB0ZW4g
dGhhdCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuCisgICAgLy8gbnVtYmVyLiBX
ZSBmdXJ0aGVybW9yZSByZWNlaXZlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBiaXRzICdudW1iZXIn
IGhhcy4KKyAgICAvLyBJZiBudW1iZXJfYml0cyA9PSAwIHRoZW4gMF4tMSBpcyByZXR1cm5lZAor
ICAgIC8vIFRoZSBudW1iZXIgb2YgYml0cyBtdXN0IGJlIDw9IDMyLgorICAgIC8vIFByZWNvbmRp
dGlvbjogbnVtYmVyIDwgKDEgPDwgKG51bWJlcl9iaXRzICsgMSkpLgorICAgIHN0YXRpYyB2b2lk
IEJpZ2dlc3RQb3dlclRlbih1aW50MzJfdCBudW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBudW1iZXJfYml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdWludDMyX3QqIHBvd2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQq
IGV4cG9uZW50KSB7CisgICAgICAgIEFTU0VSVChudW1iZXIgPCAoMSA8PCAobnVtYmVyX2JpdHMg
KyAxKSkpOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChudW1iZXJfYml0cykgeworICAgICAg
ICAgICAgY2FzZSAzMjoKKyAgICAgICAgICAgIGNhc2UgMzE6CisgICAgICAgICAgICBjYXNlIDMw
OgorICAgICAgICAgICAgICAgIGlmIChrVGVuOSA8PSBudW1iZXIpIHsKKyAgICAgICAgICAgICAg
ICAgICAgKnBvd2VyID0ga1Rlbjk7CisgICAgICAgICAgICAgICAgICAgICpleHBvbmVudCA9IDk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gIC8vIGVsc2Ug
ZmFsbHRocm91Z2gKKyAgICAgICAgICAgIGNhc2UgMjk6CisgICAgICAgICAgICBjYXNlIDI4Ogor
ICAgICAgICAgICAgY2FzZSAyNzoKKyAgICAgICAgICAgICAgICBpZiAoa1RlbjggPD0gbnVtYmVy
KSB7CisgICAgICAgICAgICAgICAgICAgICpwb3dlciA9IGtUZW44OworICAgICAgICAgICAgICAg
ICAgICAqZXhwb25lbnQgPSA4OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9ICAvLyBlbHNlIGZhbGx0aHJvdWdoCisgICAgICAgICAgICBjYXNlIDI2OgorICAg
ICAgICAgICAgY2FzZSAyNToKKyAgICAgICAgICAgIGNhc2UgMjQ6CisgICAgICAgICAgICAgICAg
aWYgKGtUZW43IDw9IG51bWJlcikgeworICAgICAgICAgICAgICAgICAgICAqcG93ZXIgPSBrVGVu
NzsKKyAgICAgICAgICAgICAgICAgICAgKmV4cG9uZW50ID0gNzsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSAgLy8gZWxzZSBmYWxsdGhyb3VnaAorICAgICAg
ICAgICAgY2FzZSAyMzoKKyAgICAgICAgICAgIGNhc2UgMjI6CisgICAgICAgICAgICBjYXNlIDIx
OgorICAgICAgICAgICAgY2FzZSAyMDoKKyAgICAgICAgICAgICAgICBpZiAoa1RlbjYgPD0gbnVt
YmVyKSB7CisgICAgICAgICAgICAgICAgICAgICpwb3dlciA9IGtUZW42OworICAgICAgICAgICAg
ICAgICAgICAqZXhwb25lbnQgPSA2OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9ICAvLyBlbHNlIGZhbGx0aHJvdWdoCisgICAgICAgICAgICBjYXNlIDE5Ogor
ICAgICAgICAgICAgY2FzZSAxODoKKyAgICAgICAgICAgIGNhc2UgMTc6CisgICAgICAgICAgICAg
ICAgaWYgKGtUZW41IDw9IG51bWJlcikgeworICAgICAgICAgICAgICAgICAgICAqcG93ZXIgPSBr
VGVuNTsKKyAgICAgICAgICAgICAgICAgICAgKmV4cG9uZW50ID0gNTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSAgLy8gZWxzZSBmYWxsdGhyb3VnaAorICAg
ICAgICAgICAgY2FzZSAxNjoKKyAgICAgICAgICAgIGNhc2UgMTU6CisgICAgICAgICAgICBjYXNl
IDE0OgorICAgICAgICAgICAgICAgIGlmIChrVGVuNCA8PSBudW1iZXIpIHsKKyAgICAgICAgICAg
ICAgICAgICAgKnBvd2VyID0ga1RlbjQ7CisgICAgICAgICAgICAgICAgICAgICpleHBvbmVudCA9
IDQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gIC8vIGVs
c2UgZmFsbHRocm91Z2gKKyAgICAgICAgICAgIGNhc2UgMTM6CisgICAgICAgICAgICBjYXNlIDEy
OgorICAgICAgICAgICAgY2FzZSAxMToKKyAgICAgICAgICAgIGNhc2UgMTA6CisgICAgICAgICAg
ICAgICAgaWYgKDEwMDAgPD0gbnVtYmVyKSB7CisgICAgICAgICAgICAgICAgICAgICpwb3dlciA9
IDEwMDA7CisgICAgICAgICAgICAgICAgICAgICpleHBvbmVudCA9IDM7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gIC8vIGVsc2UgZmFsbHRocm91Z2gKKyAg
ICAgICAgICAgIGNhc2UgOToKKyAgICAgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIGNhc2Ug
NzoKKyAgICAgICAgICAgICAgICBpZiAoMTAwIDw9IG51bWJlcikgeworICAgICAgICAgICAgICAg
ICAgICAqcG93ZXIgPSAxMDA7CisgICAgICAgICAgICAgICAgICAgICpleHBvbmVudCA9IDI7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gIC8vIGVsc2UgZmFs
bHRocm91Z2gKKyAgICAgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgIGNhc2UgNToKKyAgICAg
ICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICBpZiAoMTAgPD0gbnVtYmVyKSB7CisgICAg
ICAgICAgICAgICAgICAgICpwb3dlciA9IDEwOworICAgICAgICAgICAgICAgICAgICAqZXhwb25l
bnQgPSAxOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9ICAv
LyBlbHNlIGZhbGx0aHJvdWdoCisgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICBjYXNl
IDI6CisgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgaWYgKDEgPD0gbnVtYmVy
KSB7CisgICAgICAgICAgICAgICAgICAgICpwb3dlciA9IDE7CisgICAgICAgICAgICAgICAgICAg
ICpleHBvbmVudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0gIC8vIGVsc2UgZmFsbHRocm91Z2gKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAg
ICAgICAgICAqcG93ZXIgPSAwOworICAgICAgICAgICAgICAgICpleHBvbmVudCA9IC0xOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAvLyBGb2xsb3dpbmcgYXNzaWdubWVudHMgYXJlIGhlcmUgdG8gc2lsZW5jZSBjb21waWxlciB3
YXJuaW5ncy4KKyAgICAgICAgICAgICAgICAqcG93ZXIgPSAwOworICAgICAgICAgICAgICAgICpl
eHBvbmVudCA9IDA7CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBHZW5lcmF0ZXMgdGhlIGRpZ2l0cyBvZiBpbnB1dCBu
dW1iZXIgdy4KKyAgICAvLyB3IGlzIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIChEaXlGcCksIGNv
bnNpc3Rpbmcgb2YgYSBzaWduaWZpY2FuZCBhbmQgYW4KKyAgICAvLyBleHBvbmVudC4gSXRzIGV4
cG9uZW50IGlzIGJvdW5kZWQgYnkga01pbmltYWxUYXJnZXRFeHBvbmVudCBhbmQKKyAgICAvLyBr
TWF4aW1hbFRhcmdldEV4cG9uZW50LgorICAgIC8vICAgICAgIEhlbmNlIC02MCA8PSB3LmUoKSA8
PSAtMzIuCisgICAgLy8KKyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIGl0IGZhaWxzLCBpbiB3aGlj
aCBjYXNlIHRoZSBnZW5lcmF0ZWQgZGlnaXRzIGluIHRoZSBidWZmZXIKKyAgICAvLyBzaG91bGQg
bm90IGJlIHVzZWQuCisgICAgLy8gUHJlY29uZGl0aW9uczoKKyAgICAvLyAgKiBsb3csIHcgYW5k
IGhpZ2ggYXJlIGNvcnJlY3QgdXAgdG8gMSB1bHAgKHVuaXQgaW4gdGhlIGxhc3QgcGxhY2UpLiBU
aGF0CisgICAgLy8gICAgaXMsIHRoZWlyIGVycm9yIG11c3QgYmUgbGVzcyB0aGFuIGEgdW5pdCBv
ZiB0aGVpciBsYXN0IGRpZ2l0cy4KKyAgICAvLyAgKiBsb3cuZSgpID09IHcuZSgpID09IGhpZ2gu
ZSgpCisgICAgLy8gICogbG93IDwgdyA8IGhpZ2gsIGFuZCB0YWtpbmcgaW50byBhY2NvdW50IHRo
ZWlyIGVycm9yOiBsb3d+IDw9IGhpZ2h+CisgICAgLy8gICoga01pbmltYWxUYXJnZXRFeHBvbmVu
dCA8PSB3LmUoKSA8PSBrTWF4aW1hbFRhcmdldEV4cG9uZW50CisgICAgLy8gUG9zdGNvbmRpdGlv
bnM6IHJldHVybnMgZmFsc2UgaWYgcHJvY2VkdXJlIGZhaWxzLgorICAgIC8vICAgb3RoZXJ3aXNl
OgorICAgIC8vICAgICAqIGJ1ZmZlciBpcyBub3QgbnVsbC10ZXJtaW5hdGVkLCBidXQgbGVuIGNv
bnRhaW5zIHRoZSBudW1iZXIgb2YgZGlnaXRzLgorICAgIC8vICAgICAqIGJ1ZmZlciBjb250YWlu
cyB0aGUgc2hvcnRlc3QgcG9zc2libGUgZGVjaW1hbCBkaWdpdC1zZXF1ZW5jZQorICAgIC8vICAg
ICAgIHN1Y2ggdGhhdCBMT1cgPCBidWZmZXIgKiAxMF5rYXBwYSA8IEhJR0gsIHdoZXJlIExPVyBh
bmQgSElHSCBhcmUgdGhlCisgICAgLy8gICAgICAgY29ycmVjdCB2YWx1ZXMgb2YgbG93IGFuZCBo
aWdoICh3aXRob3V0IHRoZWlyIGVycm9yKS4KKyAgICAvLyAgICAgKiBpZiBtb3JlIHRoYW4gb25l
IGRlY2ltYWwgcmVwcmVzZW50YXRpb24gZ2l2ZXMgdGhlIG1pbmltYWwgbnVtYmVyIG9mCisgICAg
Ly8gICAgICAgZGVjaW1hbCBkaWdpdHMgdGhlbiB0aGUgb25lIGNsb3Nlc3QgdG8gVyAod2hlcmUg
VyBpcyB0aGUgY29ycmVjdCB2YWx1ZQorICAgIC8vICAgICAgIG9mIHcpIGlzIGNob3Nlbi4KKyAg
ICAvLyBSZW1hcms6IHRoaXMgcHJvY2VkdXJlIHRha2VzIGludG8gYWNjb3VudCB0aGUgaW1wcmVj
aXNpb24gb2YgaXRzIGlucHV0CisgICAgLy8gICBudW1iZXJzLiBJZiB0aGUgcHJlY2lzaW9uIGlz
IG5vdCBlbm91Z2ggdG8gZ3VhcmFudGVlIGFsbCB0aGUgcG9zdGNvbmRpdGlvbnMKKyAgICAvLyAg
IHRoZW4gZmFsc2UgaXMgcmV0dXJuZWQuIFRoaXMgdXN1YWxseSBoYXBwZW5zIHJhcmVseSAofjAu
NSUpLgorICAgIC8vCisgICAgLy8gU2F5LCBmb3IgdGhlIHNha2Ugb2YgZXhhbXBsZSwgdGhhdAor
ICAgIC8vICAgdy5lKCkgPT0gLTQ4LCBhbmQgdy5mKCkgPT0gMHgxMjM0NTY3ODkwYWJjZGVmCisg
ICAgLy8gdydzIHZhbHVlIGNhbiBiZSBjb21wdXRlZCBieSB3LmYoKSAqIDJedy5lKCkKKyAgICAv
LyBXZSBjYW4gb2J0YWluIHcncyBpbnRlZ3JhbCBkaWdpdHMgYnkgc2ltcGx5IHNoaWZ0aW5nIHcu
ZigpIGJ5IC13LmUoKS4KKyAgICAvLyAgLT4gdydzIGludGVncmFsIHBhcnQgaXMgMHgxMjM0Cisg
ICAgLy8gIHcncyBmcmFjdGlvbmFsIHBhcnQgaXMgdGhlcmVmb3JlIDB4NTY3ODkwYWJjZGVmLgor
ICAgIC8vIFByaW50aW5nIHcncyBpbnRlZ3JhbCBwYXJ0IGlzIGVhc3kgKHNpbXBseSBwcmludCAw
eDEyMzQgaW4gZGVjaW1hbCkuCisgICAgLy8gSW4gb3JkZXIgdG8gcHJpbnQgaXRzIGZyYWN0aW9u
IHdlIHJlcGVhdGVkbHkgbXVsdGlwbHkgdGhlIGZyYWN0aW9uIGJ5IDEwIGFuZAorICAgIC8vIGdl
dCBlYWNoIGRpZ2l0LiBFeGFtcGxlIHRoZSBmaXJzdCBkaWdpdCBhZnRlciB0aGUgcG9pbnQgd291
bGQgYmUgY29tcHV0ZWQgYnkKKyAgICAvLyAgICgweDU2Nzg5MGFiY2RlZiAqIDEwKSA+PiA0OC4g
LT4gMworICAgIC8vIFRoZSB3aG9sZSB0aGluZyBiZWNvbWVzIHNsaWdodGx5IG1vcmUgY29tcGxp
Y2F0ZWQgYmVjYXVzZSB3ZSB3YW50IHRvIHN0b3AKKyAgICAvLyBvbmNlIHdlIGhhdmUgZW5vdWdo
IGRpZ2l0cy4gVGhhdCBpcywgb25jZSB0aGUgZGlnaXRzIGluc2lkZSB0aGUgYnVmZmVyCisgICAg
Ly8gcmVwcmVzZW50ICd3JyB3ZSBjYW4gc3RvcC4gRXZlcnl0aGluZyBpbnNpZGUgdGhlIGludGVy
dmFsIGxvdyAtIGhpZ2gKKyAgICAvLyByZXByZXNlbnRzIHcuIEhvd2V2ZXIgd2UgaGF2ZSB0byBw
YXkgYXR0ZW50aW9uIHRvIGxvdywgaGlnaCBhbmQgdydzCisgICAgLy8gaW1wcmVjaXNpb24uCisg
ICAgc3RhdGljIGJvb2wgRGlnaXRHZW4oRGl5RnAgbG93LAorICAgICAgICAgICAgICAgICAgICAg
ICAgIERpeUZwIHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgRGl5RnAgaGlnaCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCogbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCoga2Fw
cGEpIHsKKyAgICAgICAgQVNTRVJUKGxvdy5lKCkgPT0gdy5lKCkgJiYgdy5lKCkgPT0gaGlnaC5l
KCkpOworICAgICAgICBBU1NFUlQobG93LmYoKSArIDEgPD0gaGlnaC5mKCkgLSAxKTsKKyAgICAg
ICAgQVNTRVJUKGtNaW5pbWFsVGFyZ2V0RXhwb25lbnQgPD0gdy5lKCkgJiYgdy5lKCkgPD0ga01h
eGltYWxUYXJnZXRFeHBvbmVudCk7CisgICAgICAgIC8vIGxvdywgdyBhbmQgaGlnaCBhcmUgaW1w
cmVjaXNlLCBidXQgYnkgbGVzcyB0aGFuIG9uZSB1bHAgKHVuaXQgaW4gdGhlIGxhc3QKKyAgICAg
ICAgLy8gcGxhY2UpLgorICAgICAgICAvLyBJZiB3ZSByZW1vdmUgKHJlc3AuIGFkZCkgMSB1bHAg
ZnJvbSBsb3cgKHJlc3AuIGhpZ2gpIHdlIGFyZSBjZXJ0YWluIHRoYXQKKyAgICAgICAgLy8gdGhl
IG5ldyBudW1iZXJzIGFyZSBvdXRzaWRlIG9mIHRoZSBpbnRlcnZhbCB3ZSB3YW50IHRoZSBmaW5h
bAorICAgICAgICAvLyByZXByZXNlbnRhdGlvbiB0byBsaWUgaW4uCisgICAgICAgIC8vIEludmVy
c2VseSBhZGRpbmcgKHJlc3AuIHJlbW92aW5nKSAxIHVscCBmcm9tIGxvdyAocmVzcC4gaGlnaCkg
d291bGQgeWllbGQKKyAgICAgICAgLy8gbnVtYmVycyB0aGF0IGFyZSBjZXJ0YWluIHRvIGxpZSBp
biB0aGUgaW50ZXJ2YWwuIFdlIHdpbGwgdXNlIHRoaXMgZmFjdAorICAgICAgICAvLyBsYXRlciBv
bi4KKyAgICAgICAgLy8gV2Ugd2lsbCBub3cgc3RhcnQgYnkgZ2VuZXJhdGluZyB0aGUgZGlnaXRz
IHdpdGhpbiB0aGUgdW5jZXJ0YWluCisgICAgICAgIC8vIGludGVydmFsLiBMYXRlciB3ZSB3aWxs
IHdlZWQgb3V0IHJlcHJlc2VudGF0aW9ucyB0aGF0IGxpZSBvdXRzaWRlIHRoZSBzYWZlCisgICAg
ICAgIC8vIGludGVydmFsIGFuZCB0aHVzIF9taWdodF8gbGllIG91dHNpZGUgdGhlIGNvcnJlY3Qg
aW50ZXJ2YWwuCisgICAgICAgIHVpbnQ2NF90IHVuaXQgPSAxOworICAgICAgICBEaXlGcCB0b29f
bG93ID0gRGl5RnAobG93LmYoKSAtIHVuaXQsIGxvdy5lKCkpOworICAgICAgICBEaXlGcCB0b29f
aGlnaCA9IERpeUZwKGhpZ2guZigpICsgdW5pdCwgaGlnaC5lKCkpOworICAgICAgICAvLyB0b29f
bG93IGFuZCB0b29faGlnaCBhcmUgZ3VhcmFudGVlZCB0byBsaWUgb3V0c2lkZSB0aGUgaW50ZXJ2
YWwgd2Ugd2FudCB0aGUKKyAgICAgICAgLy8gZ2VuZXJhdGVkIG51bWJlciBpbi4KKyAgICAgICAg
RGl5RnAgdW5zYWZlX2ludGVydmFsID0gRGl5RnA6Ok1pbnVzKHRvb19oaWdoLCB0b29fbG93KTsK
KyAgICAgICAgLy8gV2Ugbm93IGN1dCB0aGUgaW5wdXQgbnVtYmVyIGludG8gdHdvIHBhcnRzOiB0
aGUgaW50ZWdyYWwgZGlnaXRzIGFuZCB0aGUKKyAgICAgICAgLy8gZnJhY3Rpb25hbHMuIFdlIHdp
bGwgbm90IHdyaXRlIGFueSBkZWNpbWFsIHNlcGFyYXRvciB0aG91Z2gsIGJ1dCBhZGFwdAorICAg
ICAgICAvLyBrYXBwYSBpbnN0ZWFkLgorICAgICAgICAvLyBSZW1pbmRlcjogd2UgYXJlIGN1cnJl
bnRseSBjb21wdXRpbmcgdGhlIGRpZ2l0cyAoc3RvcmVkIGluc2lkZSB0aGUgYnVmZmVyKQorICAg
ICAgICAvLyBzdWNoIHRoYXQ6ICAgdG9vX2xvdyA8IGJ1ZmZlciAqIDEwXmthcHBhIDwgdG9vX2hp
Z2gKKyAgICAgICAgLy8gV2UgdXNlIHRvb19oaWdoIGZvciB0aGUgZGlnaXRfZ2VuZXJhdGlvbiBh
bmQgc3RvcCBhcyBzb29uIGFzIHBvc3NpYmxlLgorICAgICAgICAvLyBJZiB3ZSBzdG9wIGVhcmx5
IHdlIGVmZmVjdGl2ZWx5IHJvdW5kIGRvd24uCisgICAgICAgIERpeUZwIG9uZSA9IERpeUZwKHN0
YXRpY19jYXN0PHVpbnQ2NF90PigxKSA8PCAtdy5lKCksIHcuZSgpKTsKKyAgICAgICAgLy8gRGl2
aXNpb24gYnkgb25lIGlzIGEgc2hpZnQuCisgICAgICAgIHVpbnQzMl90IGludGVncmFscyA9IHN0
YXRpY19jYXN0PHVpbnQzMl90Pih0b29faGlnaC5mKCkgPj4gLW9uZS5lKCkpOworICAgICAgICAv
LyBNb2R1bG8gYnkgb25lIGlzIGFuIGFuZC4KKyAgICAgICAgdWludDY0X3QgZnJhY3Rpb25hbHMg
PSB0b29faGlnaC5mKCkgJiAob25lLmYoKSAtIDEpOworICAgICAgICB1aW50MzJfdCBkaXZpc29y
OworICAgICAgICBpbnQgZGl2aXNvcl9leHBvbmVudDsKKyAgICAgICAgQmlnZ2VzdFBvd2VyVGVu
KGludGVncmFscywgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUgLSAoLW9uZS5lKCkpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgJmRpdmlzb3IsICZkaXZpc29yX2V4cG9uZW50KTsKKyAgICAgICAg
KmthcHBhID0gZGl2aXNvcl9leHBvbmVudCArIDE7CisgICAgICAgICpsZW5ndGggPSAwOworICAg
ICAgICAvLyBMb29wIGludmFyaWFudDogYnVmZmVyID0gdG9vX2hpZ2ggLyAxMF5rYXBwYSAgKGlu
dGVnZXIgZGl2aXNpb24pCisgICAgICAgIC8vIFRoZSBpbnZhcmlhbnQgaG9sZHMgZm9yIHRoZSBm
aXJzdCBpdGVyYXRpb246IGthcHBhIGhhcyBiZWVuIGluaXRpYWxpemVkCisgICAgICAgIC8vIHdp
dGggdGhlIGRpdmlzb3IgZXhwb25lbnQgKyAxLiBBbmQgdGhlIGRpdmlzb3IgaXMgdGhlIGJpZ2dl
c3QgcG93ZXIgb2YgdGVuCisgICAgICAgIC8vIHRoYXQgaXMgc21hbGxlciB0aGFuIGludGVncmFs
cy4KKyAgICAgICAgd2hpbGUgKCprYXBwYSA+IDApIHsKKyAgICAgICAgICAgIGludCBkaWdpdCA9
IGludGVncmFscyAvIGRpdmlzb3I7CisgICAgICAgICAgICBidWZmZXJbKmxlbmd0aF0gPSAnMCcg
KyBkaWdpdDsKKyAgICAgICAgICAgICgqbGVuZ3RoKSsrOworICAgICAgICAgICAgaW50ZWdyYWxz
ICU9IGRpdmlzb3I7CisgICAgICAgICAgICAoKmthcHBhKS0tOworICAgICAgICAgICAgLy8gTm90
ZSB0aGF0IGthcHBhIG5vdyBlcXVhbHMgdGhlIGV4cG9uZW50IG9mIHRoZSBkaXZpc29yIGFuZCB0
aGF0IHRoZQorICAgICAgICAgICAgLy8gaW52YXJpYW50IHRodXMgaG9sZHMgYWdhaW4uCisgICAg
ICAgICAgICB1aW50NjRfdCByZXN0ID0KKyAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1aW50NjRf
dD4oaW50ZWdyYWxzKSA8PCAtb25lLmUoKSkgKyBmcmFjdGlvbmFsczsKKyAgICAgICAgICAgIC8v
IEludmFyaWFudDogdG9vX2hpZ2ggPSBidWZmZXIgKiAxMF5rYXBwYSArIERpeUZwKHJlc3QsIG9u
ZS5lKCkpCisgICAgICAgICAgICAvLyBSZW1pbmRlcjogdW5zYWZlX2ludGVydmFsLmUoKSA9PSBv
bmUuZSgpCisgICAgICAgICAgICBpZiAocmVzdCA8IHVuc2FmZV9pbnRlcnZhbC5mKCkpIHsKKyAg
ICAgICAgICAgICAgICAvLyBSb3VuZGluZyBkb3duIChieSBub3QgZW1pdHRpbmcgdGhlIHJlbWFp
bmluZyBkaWdpdHMpIHlpZWxkcyBhIG51bWJlcgorICAgICAgICAgICAgICAgIC8vIHRoYXQgbGll
cyB3aXRoaW4gdGhlIHVuc2FmZSBpbnRlcnZhbC4KKyAgICAgICAgICAgICAgICByZXR1cm4gUm91
bmRXZWVkKGJ1ZmZlciwgKmxlbmd0aCwgRGl5RnA6Ok1pbnVzKHRvb19oaWdoLCB3KS5mKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNhZmVfaW50ZXJ2YWwuZigpLCByZXN0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KGRpdmlzb3IpIDw8IC1vbmUuZSgpLCB1bml0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGRpdmlzb3IgLz0gMTA7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBpbnRl
Z3JhbHMgaGF2ZSBiZWVuIGdlbmVyYXRlZC4gV2UgYXJlIGF0IHRoZSBwb2ludCBvZiB0aGUgZGVj
aW1hbAorICAgICAgICAvLyBzZXBhcmF0b3IuIEluIHRoZSBmb2xsb3dpbmcgbG9vcCB3ZSBzaW1w
bHkgbXVsdGlwbHkgdGhlIHJlbWFpbmluZyBkaWdpdHMgYnkKKyAgICAgICAgLy8gMTAgYW5kIGRp
dmlkZSBieSBvbmUuIFdlIGp1c3QgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRvIG11bHRpcGx5IGFz
c29jaWF0ZWQKKyAgICAgICAgLy8gZGF0YSAobGlrZSB0aGUgaW50ZXJ2YWwgb3IgJ3VuaXQnKSwg
dG9vLgorICAgICAgICAvLyBOb3RlIHRoYXQgdGhlIG11bHRpcGxpY2F0aW9uIGJ5IDEwIGRvZXMg
bm90IG92ZXJmbG93LCBiZWNhdXNlIHcuZSA+PSAtNjAKKyAgICAgICAgLy8gYW5kIHRodXMgb25l
LmUgPj0gLTYwLgorICAgICAgICBBU1NFUlQob25lLmUoKSA+PSAtNjApOworICAgICAgICBBU1NF
UlQoZnJhY3Rpb25hbHMgPCBvbmUuZigpKTsKKyAgICAgICAgQVNTRVJUKFVJTlQ2NF8yUEFSVF9D
KDB4RkZGRkZGRkYsIEZGRkZGRkZGKSAvIDEwID49IG9uZS5mKCkpOworICAgICAgICB3aGlsZSAo
dHJ1ZSkgeworICAgICAgICAgICAgZnJhY3Rpb25hbHMgKj0gMTA7CisgICAgICAgICAgICB1bml0
ICo9IDEwOworICAgICAgICAgICAgdW5zYWZlX2ludGVydmFsLnNldF9mKHVuc2FmZV9pbnRlcnZh
bC5mKCkgKiAxMCk7CisgICAgICAgICAgICAvLyBJbnRlZ2VyIGRpdmlzaW9uIGJ5IG9uZS4KKyAg
ICAgICAgICAgIGludCBkaWdpdCA9IHN0YXRpY19jYXN0PGludD4oZnJhY3Rpb25hbHMgPj4gLW9u
ZS5lKCkpOworICAgICAgICAgICAgYnVmZmVyWypsZW5ndGhdID0gJzAnICsgZGlnaXQ7CisgICAg
ICAgICAgICAoKmxlbmd0aCkrKzsKKyAgICAgICAgICAgIGZyYWN0aW9uYWxzICY9IG9uZS5mKCkg
LSAxOyAgLy8gTW9kdWxvIGJ5IG9uZS4KKyAgICAgICAgICAgICgqa2FwcGEpLS07CisgICAgICAg
ICAgICBpZiAoZnJhY3Rpb25hbHMgPCB1bnNhZmVfaW50ZXJ2YWwuZigpKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIFJvdW5kV2VlZChidWZmZXIsICpsZW5ndGgsIERpeUZwOjpNaW51cyh0b29f
aGlnaCwgdykuZigpICogdW5pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2FmZV9pbnRlcnZhbC5mKCksIGZyYWN0aW9uYWxzLCBvbmUuZigpLCB1bml0KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICAKKyAgICAvLyBHZW5lcmF0
ZXMgKGF0IG1vc3QpIHJlcXVlc3RlZF9kaWdpdHMgZGlnaXRzIG9mIGlucHV0IG51bWJlciB3Lgor
ICAgIC8vIHcgaXMgYSBmbG9hdGluZy1wb2ludCBudW1iZXIgKERpeUZwKSwgY29uc2lzdGluZyBv
ZiBhIHNpZ25pZmljYW5kIGFuZCBhbgorICAgIC8vIGV4cG9uZW50LiBJdHMgZXhwb25lbnQgaXMg
Ym91bmRlZCBieSBrTWluaW1hbFRhcmdldEV4cG9uZW50IGFuZAorICAgIC8vIGtNYXhpbWFsVGFy
Z2V0RXhwb25lbnQuCisgICAgLy8gICAgICAgSGVuY2UgLTYwIDw9IHcuZSgpIDw9IC0zMi4KKyAg
ICAvLworICAgIC8vIFJldHVybnMgZmFsc2UgaWYgaXQgZmFpbHMsIGluIHdoaWNoIGNhc2UgdGhl
IGdlbmVyYXRlZCBkaWdpdHMgaW4gdGhlIGJ1ZmZlcgorICAgIC8vIHNob3VsZCBub3QgYmUgdXNl
ZC4KKyAgICAvLyBQcmVjb25kaXRpb25zOgorICAgIC8vICAqIHcgaXMgY29ycmVjdCB1cCB0byAx
IHVscCAodW5pdCBpbiB0aGUgbGFzdCBwbGFjZSkuIFRoYXQKKyAgICAvLyAgICBpcywgaXRzIGVy
cm9yIG11c3QgYmUgc3RyaWN0bHkgbGVzcyB0aGFuIGEgdW5pdCBvZiBpdHMgbGFzdCBkaWdpdC4K
KyAgICAvLyAgKiBrTWluaW1hbFRhcmdldEV4cG9uZW50IDw9IHcuZSgpIDw9IGtNYXhpbWFsVGFy
Z2V0RXhwb25lbnQKKyAgICAvLworICAgIC8vIFBvc3Rjb25kaXRpb25zOiByZXR1cm5zIGZhbHNl
IGlmIHByb2NlZHVyZSBmYWlscy4KKyAgICAvLyAgIG90aGVyd2lzZToKKyAgICAvLyAgICAgKiBi
dWZmZXIgaXMgbm90IG51bGwtdGVybWluYXRlZCwgYnV0IGxlbmd0aCBjb250YWlucyB0aGUgbnVt
YmVyIG9mCisgICAgLy8gICAgICAgZGlnaXRzLgorICAgIC8vICAgICAqIHRoZSByZXByZXNlbnRh
dGlvbiBpbiBidWZmZXIgaXMgdGhlIG1vc3QgcHJlY2lzZSByZXByZXNlbnRhdGlvbiBvZgorICAg
IC8vICAgICAgIHJlcXVlc3RlZF9kaWdpdHMgZGlnaXRzLgorICAgIC8vICAgICAqIGJ1ZmZlciBj
b250YWlucyBhdCBtb3N0IHJlcXVlc3RlZF9kaWdpdHMgZGlnaXRzIG9mIHcuIElmIHRoZXJlIGFy
ZSBsZXNzCisgICAgLy8gICAgICAgdGhhbiByZXF1ZXN0ZWRfZGlnaXRzIGRpZ2l0cyB0aGVuIHNv
bWUgdHJhaWxpbmcgJzAncyBoYXZlIGJlZW4gcmVtb3ZlZC4KKyAgICAvLyAgICAgKiBrYXBwYSBp
cyBzdWNoIHRoYXQKKyAgICAvLyAgICAgICAgICAgIHcgPSBidWZmZXIgKiAxMF5rYXBwYSArIGVw
cyB3aXRoIHxlcHN8IDwgMTBea2FwcGEgLyAyLgorICAgIC8vCisgICAgLy8gUmVtYXJrOiBUaGlz
IHByb2NlZHVyZSB0YWtlcyBpbnRvIGFjY291bnQgdGhlIGltcHJlY2lzaW9uIG9mIGl0cyBpbnB1
dAorICAgIC8vICAgbnVtYmVycy4gSWYgdGhlIHByZWNpc2lvbiBpcyBub3QgZW5vdWdoIHRvIGd1
YXJhbnRlZSBhbGwgdGhlIHBvc3Rjb25kaXRpb25zCisgICAgLy8gICB0aGVuIGZhbHNlIGlzIHJl
dHVybmVkLiBUaGlzIHVzdWFsbHkgaGFwcGVucyByYXJlbHksIGJ1dCB0aGUgZmFpbHVyZS1yYXRl
CisgICAgLy8gICBpbmNyZWFzZXMgd2l0aCBoaWdoZXIgcmVxdWVzdGVkX2RpZ2l0cy4KKyAgICBz
dGF0aWMgYm9vbCBEaWdpdEdlbkNvdW50ZWQoRGl5RnAgdywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IHJlcXVlc3RlZF9kaWdpdHMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCogbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQq
IGthcHBhKSB7CisgICAgICAgIEFTU0VSVChrTWluaW1hbFRhcmdldEV4cG9uZW50IDw9IHcuZSgp
ICYmIHcuZSgpIDw9IGtNYXhpbWFsVGFyZ2V0RXhwb25lbnQpOworICAgICAgICBBU1NFUlQoa01p
bmltYWxUYXJnZXRFeHBvbmVudCA+PSAtNjApOworICAgICAgICBBU1NFUlQoa01heGltYWxUYXJn
ZXRFeHBvbmVudCA8PSAtMzIpOworICAgICAgICAvLyB3IGlzIGFzc3VtZWQgdG8gaGF2ZSBhbiBl
cnJvciBsZXNzIHRoYW4gMSB1bml0LiBXaGVuZXZlciB3IGlzIHNjYWxlZCB3ZQorICAgICAgICAv
LyBhbHNvIHNjYWxlIGl0cyBlcnJvci4KKyAgICAgICAgdWludDY0X3Qgd19lcnJvciA9IDE7Cisg
ICAgICAgIC8vIFdlIGN1dCB0aGUgaW5wdXQgbnVtYmVyIGludG8gdHdvIHBhcnRzOiB0aGUgaW50
ZWdyYWwgZGlnaXRzIGFuZCB0aGUKKyAgICAgICAgLy8gZnJhY3Rpb25hbCBkaWdpdHMuIFdlIGRv
bid0IGVtaXQgYW55IGRlY2ltYWwgc2VwYXJhdG9yLCBidXQgYWRhcHQga2FwcGEKKyAgICAgICAg
Ly8gaW5zdGVhZC4gRXhhbXBsZTogaW5zdGVhZCBvZiB3cml0aW5nICIxLjIiIHdlIHB1dCAiMTIi
IGludG8gdGhlIGJ1ZmZlciBhbmQKKyAgICAgICAgLy8gaW5jcmVhc2Uga2FwcGEgYnkgMS4KKyAg
ICAgICAgRGl5RnAgb25lID0gRGl5RnAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDEpIDw8IC13LmUo
KSwgdy5lKCkpOworICAgICAgICAvLyBEaXZpc2lvbiBieSBvbmUgaXMgYSBzaGlmdC4KKyAgICAg
ICAgdWludDMyX3QgaW50ZWdyYWxzID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHcuZigpID4+IC1v
bmUuZSgpKTsKKyAgICAgICAgLy8gTW9kdWxvIGJ5IG9uZSBpcyBhbiBhbmQuCisgICAgICAgIHVp
bnQ2NF90IGZyYWN0aW9uYWxzID0gdy5mKCkgJiAob25lLmYoKSAtIDEpOworICAgICAgICB1aW50
MzJfdCBkaXZpc29yOworICAgICAgICBpbnQgZGl2aXNvcl9leHBvbmVudDsKKyAgICAgICAgQmln
Z2VzdFBvd2VyVGVuKGludGVncmFscywgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUgLSAoLW9uZS5l
KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgJmRpdmlzb3IsICZkaXZpc29yX2V4cG9uZW50
KTsKKyAgICAgICAgKmthcHBhID0gZGl2aXNvcl9leHBvbmVudCArIDE7CisgICAgICAgICpsZW5n
dGggPSAwOworICAgICAgICAKKyAgICAgICAgLy8gTG9vcCBpbnZhcmlhbnQ6IGJ1ZmZlciA9IHcg
LyAxMF5rYXBwYSAgKGludGVnZXIgZGl2aXNpb24pCisgICAgICAgIC8vIFRoZSBpbnZhcmlhbnQg
aG9sZHMgZm9yIHRoZSBmaXJzdCBpdGVyYXRpb246IGthcHBhIGhhcyBiZWVuIGluaXRpYWxpemVk
CisgICAgICAgIC8vIHdpdGggdGhlIGRpdmlzb3IgZXhwb25lbnQgKyAxLiBBbmQgdGhlIGRpdmlz
b3IgaXMgdGhlIGJpZ2dlc3QgcG93ZXIgb2YgdGVuCisgICAgICAgIC8vIHRoYXQgaXMgc21hbGxl
ciB0aGFuICdpbnRlZ3JhbHMnLgorICAgICAgICB3aGlsZSAoKmthcHBhID4gMCkgeworICAgICAg
ICAgICAgaW50IGRpZ2l0ID0gaW50ZWdyYWxzIC8gZGl2aXNvcjsKKyAgICAgICAgICAgIGJ1ZmZl
clsqbGVuZ3RoXSA9ICcwJyArIGRpZ2l0OworICAgICAgICAgICAgKCpsZW5ndGgpKys7CisgICAg
ICAgICAgICByZXF1ZXN0ZWRfZGlnaXRzLS07CisgICAgICAgICAgICBpbnRlZ3JhbHMgJT0gZGl2
aXNvcjsKKyAgICAgICAgICAgICgqa2FwcGEpLS07CisgICAgICAgICAgICAvLyBOb3RlIHRoYXQg
a2FwcGEgbm93IGVxdWFscyB0aGUgZXhwb25lbnQgb2YgdGhlIGRpdmlzb3IgYW5kIHRoYXQgdGhl
CisgICAgICAgICAgICAvLyBpbnZhcmlhbnQgdGh1cyBob2xkcyBhZ2Fpbi4KKyAgICAgICAgICAg
IGlmIChyZXF1ZXN0ZWRfZGlnaXRzID09IDApIGJyZWFrOworICAgICAgICAgICAgZGl2aXNvciAv
PSAxMDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHJlcXVlc3RlZF9kaWdpdHMg
PT0gMCkgeworICAgICAgICAgICAgdWludDY0X3QgcmVzdCA9CisgICAgICAgICAgICAoc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KGludGVncmFscykgPDwgLW9uZS5lKCkpICsgZnJhY3Rpb25hbHM7Cisg
ICAgICAgICAgICByZXR1cm4gUm91bmRXZWVkQ291bnRlZChidWZmZXIsICpsZW5ndGgsIHJlc3Qs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50NjRf
dD4oZGl2aXNvcikgPDwgLW9uZS5lKCksIHdfZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBrYXBwYSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFRo
ZSBpbnRlZ3JhbHMgaGF2ZSBiZWVuIGdlbmVyYXRlZC4gV2UgYXJlIGF0IHRoZSBwb2ludCBvZiB0
aGUgZGVjaW1hbAorICAgICAgICAvLyBzZXBhcmF0b3IuIEluIHRoZSBmb2xsb3dpbmcgbG9vcCB3
ZSBzaW1wbHkgbXVsdGlwbHkgdGhlIHJlbWFpbmluZyBkaWdpdHMgYnkKKyAgICAgICAgLy8gMTAg
YW5kIGRpdmlkZSBieSBvbmUuIFdlIGp1c3QgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRvIG11bHRp
cGx5IGFzc29jaWF0ZWQKKyAgICAgICAgLy8gZGF0YSAodGhlICd1bml0JyksIHRvby4KKyAgICAg
ICAgLy8gTm90ZSB0aGF0IHRoZSBtdWx0aXBsaWNhdGlvbiBieSAxMCBkb2VzIG5vdCBvdmVyZmxv
dywgYmVjYXVzZSB3LmUgPj0gLTYwCisgICAgICAgIC8vIGFuZCB0aHVzIG9uZS5lID49IC02MC4K
KyAgICAgICAgQVNTRVJUKG9uZS5lKCkgPj0gLTYwKTsKKyAgICAgICAgQVNTRVJUKGZyYWN0aW9u
YWxzIDwgb25lLmYoKSk7CisgICAgICAgIEFTU0VSVChVSU5UNjRfMlBBUlRfQygweEZGRkZGRkZG
LCBGRkZGRkZGRikgLyAxMCA+PSBvbmUuZigpKTsKKyAgICAgICAgd2hpbGUgKHJlcXVlc3RlZF9k
aWdpdHMgPiAwICYmIGZyYWN0aW9uYWxzID4gd19lcnJvcikgeworICAgICAgICAgICAgZnJhY3Rp
b25hbHMgKj0gMTA7CisgICAgICAgICAgICB3X2Vycm9yICo9IDEwOworICAgICAgICAgICAgLy8g
SW50ZWdlciBkaXZpc2lvbiBieSBvbmUuCisgICAgICAgICAgICBpbnQgZGlnaXQgPSBzdGF0aWNf
Y2FzdDxpbnQ+KGZyYWN0aW9uYWxzID4+IC1vbmUuZSgpKTsKKyAgICAgICAgICAgIGJ1ZmZlclsq
bGVuZ3RoXSA9ICcwJyArIGRpZ2l0OworICAgICAgICAgICAgKCpsZW5ndGgpKys7CisgICAgICAg
ICAgICByZXF1ZXN0ZWRfZGlnaXRzLS07CisgICAgICAgICAgICBmcmFjdGlvbmFscyAmPSBvbmUu
ZigpIC0gMTsgIC8vIE1vZHVsbyBieSBvbmUuCisgICAgICAgICAgICAoKmthcHBhKS0tOworICAg
ICAgICB9CisgICAgICAgIGlmIChyZXF1ZXN0ZWRfZGlnaXRzICE9IDApIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIFJvdW5kV2VlZENvdW50ZWQoYnVmZmVyLCAqbGVuZ3RoLCBmcmFjdGlv
bmFscywgb25lLmYoKSwgd19lcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
a2FwcGEpOworICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBQcm92aWRlcyBhIGRlY2ltYWwgcmVw
cmVzZW50YXRpb24gb2Ygdi4KKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgaXQgc3VjY2VlZHMsIG90
aGVyd2lzZSB0aGUgcmVzdWx0IGNhbm5vdCBiZSB0cnVzdGVkLgorICAgIC8vIFRoZXJlIHdpbGwg
YmUgKmxlbmd0aCBkaWdpdHMgaW5zaWRlIHRoZSBidWZmZXIgKG5vdCBudWxsLXRlcm1pbmF0ZWQp
LgorICAgIC8vIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgdGhlbgorICAgIC8vICAgICAg
ICB2ID09IChkb3VibGUpIChidWZmZXIgKiAxMF5kZWNpbWFsX2V4cG9uZW50KS4KKyAgICAvLyBU
aGUgZGlnaXRzIGluIHRoZSBidWZmZXIgYXJlIHRoZSBzaG9ydGVzdCByZXByZXNlbnRhdGlvbiBw
b3NzaWJsZTogbm8KKyAgICAvLyAwLjA5OTk5OTk5OTk5OTk5OTk5IGluc3RlYWQgb2YgMC4xLiBU
aGUgc2hvcnRlciByZXByZXNlbnRhdGlvbiB3aWxsIGV2ZW4gYmUKKyAgICAvLyBjaG9zZW4gZXZl
biBpZiB0aGUgbG9uZ2VyIG9uZSB3b3VsZCBiZSBjbG9zZXIgdG8gdi4KKyAgICAvLyBUaGUgbGFz
dCBkaWdpdCB3aWxsIGJlIGNsb3Nlc3QgdG8gdGhlIGFjdHVhbCB2LiBUaGF0IGlzLCBldmVuIGlm
IHNldmVyYWwKKyAgICAvLyBkaWdpdHMgbWlnaHQgY29ycmVjdGx5IHlpZWxkICd2JyB3aGVuIHJl
YWQgYWdhaW4sIHRoZSBjbG9zZXN0IHdpbGwgYmUKKyAgICAvLyBjb21wdXRlZC4KKyAgICBzdGF0
aWMgYm9vbCBHcmlzdTMoZG91YmxlIHYsCisgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjxj
aGFyPiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgIGludCogbGVuZ3RoLAorICAgICAg
ICAgICAgICAgICAgICAgICBpbnQqIGRlY2ltYWxfZXhwb25lbnQpIHsKKyAgICAgICAgRGl5RnAg
dyA9IERvdWJsZSh2KS5Bc05vcm1hbGl6ZWREaXlGcCgpOworICAgICAgICAvLyBib3VuZGFyeV9t
aW51cyBhbmQgYm91bmRhcnlfcGx1cyBhcmUgdGhlIGJvdW5kYXJpZXMgYmV0d2VlbiB2IGFuZCBp
dHMKKyAgICAgICAgLy8gY2xvc2VzdCBmbG9hdGluZy1wb2ludCBuZWlnaGJvcnMuIEFueSBudW1i
ZXIgc3RyaWN0bHkgYmV0d2VlbgorICAgICAgICAvLyBib3VuZGFyeV9taW51cyBhbmQgYm91bmRh
cnlfcGx1cyB3aWxsIHJvdW5kIHRvIHYgd2hlbiBjb252ZXJ0IHRvIGEgZG91YmxlLgorICAgICAg
ICAvLyBHcmlzdTMgd2lsbCBuZXZlciBvdXRwdXQgcmVwcmVzZW50YXRpb25zIHRoYXQgbGllIGV4
YWN0bHkgb24gYSBib3VuZGFyeS4KKyAgICAgICAgRGl5RnAgYm91bmRhcnlfbWludXMsIGJvdW5k
YXJ5X3BsdXM7CisgICAgICAgIERvdWJsZSh2KS5Ob3JtYWxpemVkQm91bmRhcmllcygmYm91bmRh
cnlfbWludXMsICZib3VuZGFyeV9wbHVzKTsKKyAgICAgICAgQVNTRVJUKGJvdW5kYXJ5X3BsdXMu
ZSgpID09IHcuZSgpKTsKKyAgICAgICAgRGl5RnAgdGVuX21rOyAgLy8gQ2FjaGVkIHBvd2VyIG9m
IHRlbjogMTBeLWsKKyAgICAgICAgaW50IG1rOyAgICAgICAgLy8gLWsKKyAgICAgICAgaW50IHRl
bl9ta19taW5pbWFsX2JpbmFyeV9leHBvbmVudCA9CisgICAgICAgIGtNaW5pbWFsVGFyZ2V0RXhw
b25lbnQgLSAody5lKCkgKyBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSk7CisgICAgICAgIGludCB0
ZW5fbWtfbWF4aW1hbF9iaW5hcnlfZXhwb25lbnQgPQorICAgICAgICBrTWF4aW1hbFRhcmdldEV4
cG9uZW50IC0gKHcuZSgpICsgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUpOworICAgICAgICBQb3dl
cnNPZlRlbkNhY2hlOjpHZXRDYWNoZWRQb3dlckZvckJpbmFyeUV4cG9uZW50UmFuZ2UoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0ZW5fbWtfbWluaW1hbF9iaW5hcnlfZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW5fbWtfbWF4aW1hbF9i
aW5hcnlfZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmdGVuX21rLCAmbWspOworICAgICAgICBBU1NFUlQoKGtN
aW5pbWFsVGFyZ2V0RXhwb25lbnQgPD0gdy5lKCkgKyB0ZW5fbWsuZSgpICsKKyAgICAgICAgICAg
ICAgICBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSkgJiYKKyAgICAgICAgICAgICAgIChrTWF4aW1h
bFRhcmdldEV4cG9uZW50ID49IHcuZSgpICsgdGVuX21rLmUoKSArCisgICAgICAgICAgICAgICAg
RGl5RnA6OmtTaWduaWZpY2FuZFNpemUpKTsKKyAgICAgICAgLy8gTm90ZSB0aGF0IHRlbl9tayBp
cyBvbmx5IGFuIGFwcHJveGltYXRpb24gb2YgMTBeLWsuIEEgRGl5RnAgb25seSBjb250YWlucyBh
CisgICAgICAgIC8vIDY0IGJpdCBzaWduaWZpY2FuZCBhbmQgdGVuX21rIGlzIHRodXMgb25seSBw
cmVjaXNlIHVwIHRvIDY0IGJpdHMuCisgICAgICAgIAorICAgICAgICAvLyBUaGUgRGl5RnA6OlRp
bWVzIHByb2NlZHVyZSByb3VuZHMgaXRzIHJlc3VsdCwgYW5kIHRlbl9tayBpcyBhcHByb3hpbWF0
ZWQKKyAgICAgICAgLy8gdG9vLiBUaGUgdmFyaWFibGUgc2NhbGVkX3cgKGFzIHdlbGwgYXMgc2Nh
bGVkX2JvdW5kYXJ5X21pbnVzL3BsdXMpIGFyZSBub3cKKyAgICAgICAgLy8gb2ZmIGJ5IGEgc21h
bGwgYW1vdW50LgorICAgICAgICAvLyBJbiBmYWN0OiBzY2FsZWRfdyAtIHcqMTBeayA8IDF1bHAg
KHVuaXQgaW4gdGhlIGxhc3QgcGxhY2UpIG9mIHNjYWxlZF93LgorICAgICAgICAvLyBJbiBvdGhl
ciB3b3JkczogbGV0IGYgPSBzY2FsZWRfdy5mKCkgYW5kIGUgPSBzY2FsZWRfdy5lKCksIHRoZW4K
KyAgICAgICAgLy8gICAgICAgICAgIChmLTEpICogMl5lIDwgdyoxMF5rIDwgKGYrMSkgKiAyXmUK
KyAgICAgICAgRGl5RnAgc2NhbGVkX3cgPSBEaXlGcDo6VGltZXModywgdGVuX21rKTsKKyAgICAg
ICAgQVNTRVJUKHNjYWxlZF93LmUoKSA9PQorICAgICAgICAgICAgICAgYm91bmRhcnlfcGx1cy5l
KCkgKyB0ZW5fbWsuZSgpICsgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUpOworICAgICAgICAvLyBJ
biB0aGVvcnkgaXQgd291bGQgYmUgcG9zc2libGUgdG8gYXZvaWQgc29tZSByZWNvbXB1dGF0aW9u
cyBieSBjb21wdXRpbmcKKyAgICAgICAgLy8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB3IGFuZCBi
b3VuZGFyeV9taW51cy9wbHVzIChhIHBvd2VyIG9mIDIpIGFuZCB0bworICAgICAgICAvLyBjb21w
dXRlIHNjYWxlZF9ib3VuZGFyeV9taW51cy9wbHVzIGJ5IHN1YnRyYWN0aW5nL2FkZGluZyBmcm9t
CisgICAgICAgIC8vIHNjYWxlZF93LiBIb3dldmVyIHRoZSBjb2RlIGJlY29tZXMgbXVjaCBsZXNz
IHJlYWRhYmxlIGFuZCB0aGUgc3BlZWQKKyAgICAgICAgLy8gZW5oYW5jZW1lbnRzIGFyZSBub3Qg
dGVycmlmZmljLgorICAgICAgICBEaXlGcCBzY2FsZWRfYm91bmRhcnlfbWludXMgPSBEaXlGcDo6
VGltZXMoYm91bmRhcnlfbWludXMsIHRlbl9tayk7CisgICAgICAgIERpeUZwIHNjYWxlZF9ib3Vu
ZGFyeV9wbHVzICA9IERpeUZwOjpUaW1lcyhib3VuZGFyeV9wbHVzLCAgdGVuX21rKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIERpZ2l0R2VuIHdpbGwgZ2VuZXJhdGUgdGhlIGRpZ2l0cyBvZiBzY2Fs
ZWRfdy4gVGhlcmVmb3JlIHdlIGhhdmUKKyAgICAgICAgLy8gdiA9PSAoZG91YmxlKSAoc2NhbGVk
X3cgKiAxMF4tbWspLgorICAgICAgICAvLyBTZXQgZGVjaW1hbF9leHBvbmVudCA9PSAtbWsgYW5k
IHBhc3MgaXQgdG8gRGlnaXRHZW4uIElmIHNjYWxlZF93IGlzIG5vdCBhbgorICAgICAgICAvLyBp
bnRlZ2VyIHRoYW4gaXQgd2lsbCBiZSB1cGRhdGVkLiBGb3IgaW5zdGFuY2UgaWYgc2NhbGVkX3cg
PT0gMS4yMyB0aGVuCisgICAgICAgIC8vIHRoZSBidWZmZXIgd2lsbCBiZSBmaWxsZWQgd2l0aCAi
MTIzIiB1bmQgdGhlIGRlY2ltYWxfZXhwb25lbnQgd2lsbCBiZQorICAgICAgICAvLyBkZWNyZWFz
ZWQgYnkgMi4KKyAgICAgICAgaW50IGthcHBhOworICAgICAgICBib29sIHJlc3VsdCA9IERpZ2l0
R2VuKHNjYWxlZF9ib3VuZGFyeV9taW51cywgc2NhbGVkX3csIHNjYWxlZF9ib3VuZGFyeV9wbHVz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgbGVuZ3RoLCAma2FwcGEp
OworICAgICAgICAqZGVjaW1hbF9leHBvbmVudCA9IC1tayArIGthcHBhOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBUaGUgImNvdW50ZWQiIHZlcnNp
b24gb2YgZ3Jpc3UzIChzZWUgYWJvdmUpIG9ubHkgZ2VuZXJhdGVzIHJlcXVlc3RlZF9kaWdpdHMK
KyAgICAvLyBudW1iZXIgb2YgZGlnaXRzLiBUaGlzIHZlcnNpb24gZG9lcyBub3QgZ2VuZXJhdGUg
dGhlIHNob3J0ZXN0IHJlcHJlc2VudGF0aW9uLAorICAgIC8vIGFuZCB3aXRoIGVub3VnaCByZXF1
ZXN0ZWQgZGlnaXRzIDAuMSB3aWxsIGF0IHNvbWUgcG9pbnQgcHJpbnQgYXMgMC45OTk5OTk5Li4u
CisgICAgLy8gR3Jpc3UzIGlzIHRvbyBpbXByZWNpc2UgZm9yIHJlYWwgaGFsZndheSBjYXNlcyAo
MS41IHdpbGwgbm90IHdvcmspIGFuZAorICAgIC8vIHRoZXJlZm9yZSB0aGUgcm91bmRpbmcgc3Ry
YXRlZ3kgZm9yIGhhbGZ3YXkgY2FzZXMgaXMgaXJyZWxldmFudC4KKyAgICBzdGF0aWMgYm9vbCBH
cmlzdTNDb3VudGVkKGRvdWJsZSB2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IHJlcXVlc3RlZF9kaWdpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8
Y2hhcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBsZW5ndGgs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGRlY2ltYWxfZXhwb25lbnQpIHsK
KyAgICAgICAgRGl5RnAgdyA9IERvdWJsZSh2KS5Bc05vcm1hbGl6ZWREaXlGcCgpOworICAgICAg
ICBEaXlGcCB0ZW5fbWs7ICAvLyBDYWNoZWQgcG93ZXIgb2YgdGVuOiAxMF4taworICAgICAgICBp
bnQgbWs7ICAgICAgICAvLyAtaworICAgICAgICBpbnQgdGVuX21rX21pbmltYWxfYmluYXJ5X2V4
cG9uZW50ID0KKyAgICAgICAga01pbmltYWxUYXJnZXRFeHBvbmVudCAtICh3LmUoKSArIERpeUZw
OjprU2lnbmlmaWNhbmRTaXplKTsKKyAgICAgICAgaW50IHRlbl9ta19tYXhpbWFsX2JpbmFyeV9l
eHBvbmVudCA9CisgICAgICAgIGtNYXhpbWFsVGFyZ2V0RXhwb25lbnQgLSAody5lKCkgKyBEaXlG
cDo6a1NpZ25pZmljYW5kU2l6ZSk7CisgICAgICAgIFBvd2Vyc09mVGVuQ2FjaGU6OkdldENhY2hl
ZFBvd2VyRm9yQmluYXJ5RXhwb25lbnRSYW5nZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbl9ta19taW5pbWFsX2JpbmFy
eV9leHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRlbl9ta19tYXhpbWFsX2JpbmFyeV9leHBvbmVudCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZ0ZW5fbWssICZtayk7CisgICAgICAgIEFTU0VSVCgoa01pbmltYWxUYXJnZXRFeHBvbmVudCA8
PSB3LmUoKSArIHRlbl9tay5lKCkgKworICAgICAgICAgICAgICAgIERpeUZwOjprU2lnbmlmaWNh
bmRTaXplKSAmJgorICAgICAgICAgICAgICAgKGtNYXhpbWFsVGFyZ2V0RXhwb25lbnQgPj0gdy5l
KCkgKyB0ZW5fbWsuZSgpICsKKyAgICAgICAgICAgICAgICBEaXlGcDo6a1NpZ25pZmljYW5kU2l6
ZSkpOworICAgICAgICAvLyBOb3RlIHRoYXQgdGVuX21rIGlzIG9ubHkgYW4gYXBwcm94aW1hdGlv
biBvZiAxMF4tay4gQSBEaXlGcCBvbmx5IGNvbnRhaW5zIGEKKyAgICAgICAgLy8gNjQgYml0IHNp
Z25pZmljYW5kIGFuZCB0ZW5fbWsgaXMgdGh1cyBvbmx5IHByZWNpc2UgdXAgdG8gNjQgYml0cy4K
KyAgICAgICAgCisgICAgICAgIC8vIFRoZSBEaXlGcDo6VGltZXMgcHJvY2VkdXJlIHJvdW5kcyBp
dHMgcmVzdWx0LCBhbmQgdGVuX21rIGlzIGFwcHJveGltYXRlZAorICAgICAgICAvLyB0b28uIFRo
ZSB2YXJpYWJsZSBzY2FsZWRfdyAoYXMgd2VsbCBhcyBzY2FsZWRfYm91bmRhcnlfbWludXMvcGx1
cykgYXJlIG5vdworICAgICAgICAvLyBvZmYgYnkgYSBzbWFsbCBhbW91bnQuCisgICAgICAgIC8v
IEluIGZhY3Q6IHNjYWxlZF93IC0gdyoxMF5rIDwgMXVscCAodW5pdCBpbiB0aGUgbGFzdCBwbGFj
ZSkgb2Ygc2NhbGVkX3cuCisgICAgICAgIC8vIEluIG90aGVyIHdvcmRzOiBsZXQgZiA9IHNjYWxl
ZF93LmYoKSBhbmQgZSA9IHNjYWxlZF93LmUoKSwgdGhlbgorICAgICAgICAvLyAgICAgICAgICAg
KGYtMSkgKiAyXmUgPCB3KjEwXmsgPCAoZisxKSAqIDJeZQorICAgICAgICBEaXlGcCBzY2FsZWRf
dyA9IERpeUZwOjpUaW1lcyh3LCB0ZW5fbWspOworICAgICAgICAKKyAgICAgICAgLy8gV2Ugbm93
IGhhdmUgKGRvdWJsZSkgKHNjYWxlZF93ICogMTBeLW1rKS4KKyAgICAgICAgLy8gRGlnaXRHZW4g
d2lsbCBnZW5lcmF0ZSB0aGUgZmlyc3QgcmVxdWVzdGVkX2RpZ2l0cyBkaWdpdHMgb2Ygc2NhbGVk
X3cgYW5kCisgICAgICAgIC8vIHJldHVybiB0b2dldGhlciB3aXRoIGEga2FwcGEgc3VjaCB0aGF0
IHNjYWxlZF93IH49IGJ1ZmZlciAqIDEwXmthcHBhLiAoSXQKKyAgICAgICAgLy8gd2lsbCBub3Qg
YWx3YXlzIGJlIGV4YWN0bHkgdGhlIHNhbWUgc2luY2UgRGlnaXRHZW5Db3VudGVkIG9ubHkgcHJv
ZHVjZXMgYQorICAgICAgICAvLyBsaW1pdGVkIG51bWJlciBvZiBkaWdpdHMuKQorICAgICAgICBp
bnQga2FwcGE7CisgICAgICAgIGJvb2wgcmVzdWx0ID0gRGlnaXRHZW5Db3VudGVkKHNjYWxlZF93
LCByZXF1ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBidWZmZXIsIGxlbmd0aCwgJmthcHBhKTsKKyAgICAgICAgKmRlY2ltYWxfZXhwb25lbnQgPSAt
bWsgKyBrYXBwYTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgCisg
ICAgYm9vbCBGYXN0RHRvYShkb3VibGUgdiwKKyAgICAgICAgICAgICAgICAgIEZhc3REdG9hTW9k
ZSBtb2RlLAorICAgICAgICAgICAgICAgICAgaW50IHJlcXVlc3RlZF9kaWdpdHMsCisgICAgICAg
ICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAgaW50KiBs
ZW5ndGgsCisgICAgICAgICAgICAgICAgICBpbnQqIGRlY2ltYWxfcG9pbnQpIHsKKyAgICAgICAg
QVNTRVJUKHYgPiAwKTsKKyAgICAgICAgQVNTRVJUKCFEb3VibGUodikuSXNTcGVjaWFsKCkpOwor
ICAgICAgICAKKyAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgaW50IGRlY2lt
YWxfZXhwb25lbnQgPSAwOworICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgICAgIGNh
c2UgRkFTVF9EVE9BX1NIT1JURVNUOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IEdyaXN1Myh2
LCBidWZmZXIsIGxlbmd0aCwgJmRlY2ltYWxfZXhwb25lbnQpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBGQVNUX0RUT0FfUFJFQ0lTSU9OOgorICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IEdyaXN1M0NvdW50ZWQodiwgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgbGVuZ3RoLCAmZGVjaW1hbF9l
eHBvbmVudCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJl
c3VsdCkgeworICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSAqbGVuZ3RoICsgZGVjaW1hbF9l
eHBvbmVudDsKKyAgICAgICAgICAgIGJ1ZmZlclsqbGVuZ3RoXSA9ICdcMCc7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCit9ICAvLyBuYW1lc3BhY2UgZG91
YmxlX2NvbnZlcnNpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRv
YS9mYXN0LWR0b2EuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9mYXN0LWR0b2Eu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44ODQzNmZkNTViYmY0MGMxNWE0YTM1ODRhYzhhNTNiMzA5MTQ3MzAyCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2Zhc3QtZHRv
YS5oCkBAIC0wLDAgKzEsODQgQEAKKy8vIENvcHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
Ly8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
Ky8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmbmRl
ZiBET1VCTEVfQ09OVkVSU0lPTl9GQVNUX0RUT0FfSF8KKyNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJ
T05fRkFTVF9EVE9BX0hfCisKKyNpbmNsdWRlICJ1dGlscy5oIgorCituYW1lc3BhY2UgZG91Ymxl
X2NvbnZlcnNpb24geworICAgIAorICAgIGVudW0gRmFzdER0b2FNb2RlIHsKKyAgICAgICAgLy8g
Q29tcHV0ZXMgdGhlIHNob3J0ZXN0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBpbnB1dC4g
VGhlIHJldHVybmVkCisgICAgICAgIC8vIHJlc3VsdCB3aWxsIGJlIHRoZSBtb3N0IGFjY3VyYXRl
IG51bWJlciBvZiB0aGlzIGxlbmd0aC4gTG9uZ2VyCisgICAgICAgIC8vIHJlcHJlc2VudGF0aW9u
cyBtaWdodCBiZSBtb3JlIGFjY3VyYXRlLgorICAgICAgICBGQVNUX0RUT0FfU0hPUlRFU1QsCisg
ICAgICAgIC8vIENvbXB1dGVzIGEgcmVwcmVzZW50YXRpb24gd2hlcmUgdGhlIHByZWNpc2lvbiAo
bnVtYmVyIG9mIGRpZ2l0cykgaXMKKyAgICAgICAgLy8gZ2l2ZW4gYXMgaW5wdXQuIFRoZSBwcmVj
aXNpb24gaXMgaW5kZXBlbmRlbnQgb2YgdGhlIGRlY2ltYWwgcG9pbnQuCisgICAgICAgIEZBU1Rf
RFRPQV9QUkVDSVNJT04KKyAgICB9OworICAgIAorICAgIC8vIEZhc3REdG9hIHdpbGwgcHJvZHVj
ZSBhdCBtb3N0IGtGYXN0RHRvYU1heGltYWxMZW5ndGggZGlnaXRzLiBUaGlzIGRvZXMgbm90Cisg
ICAgLy8gaW5jbHVkZSB0aGUgdGVybWluYXRpbmcgJ1wwJyBjaGFyYWN0ZXIuCisgICAgc3RhdGlj
IGNvbnN0IGludCBrRmFzdER0b2FNYXhpbWFsTGVuZ3RoID0gMTc7CisgICAgCisgICAgLy8gUHJv
dmlkZXMgYSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIHYuCisgICAgLy8gVGhlIHJlc3VsdCBz
aG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgYnVmZmVyICogMTBeKHBvaW50IC0gbGVuZ3RoKS4KKyAg
ICAvLworICAgIC8vIFByZWNvbmRpdGlvbjoKKyAgICAvLyAgICogdiBtdXN0IGJlIGEgc3RyaWN0
bHkgcG9zaXRpdmUgZmluaXRlIGRvdWJsZS4KKyAgICAvLworICAgIC8vIFJldHVybnMgdHJ1ZSBp
ZiBpdCBzdWNjZWVkcywgb3RoZXJ3aXNlIHRoZSByZXN1bHQgY2FuIG5vdCBiZSB0cnVzdGVkLgor
ICAgIC8vIFRoZXJlIHdpbGwgYmUgKmxlbmd0aCBkaWdpdHMgaW5zaWRlIHRoZSBidWZmZXIgZm9s
bG93ZWQgYnkgYSBudWxsIHRlcm1pbmF0b3IuCisgICAgLy8gSWYgdGhlIGZ1bmN0aW9uIHJldHVy
bnMgdHJ1ZSBhbmQgbW9kZSBlcXVhbHMKKyAgICAvLyAgIC0gRkFTVF9EVE9BX1NIT1JURVNULCB0
aGVuCisgICAgLy8gICAgIHRoZSBwYXJhbWV0ZXIgcmVxdWVzdGVkX2RpZ2l0cyBpcyBpZ25vcmVk
LgorICAgIC8vICAgICBUaGUgcmVzdWx0IHNhdGlzZmllcworICAgIC8vICAgICAgICAgdiA9PSAo
ZG91YmxlKSAoYnVmZmVyICogMTBeKHBvaW50IC0gbGVuZ3RoKSkuCisgICAgLy8gICAgIFRoZSBk
aWdpdHMgaW4gdGhlIGJ1ZmZlciBhcmUgdGhlIHNob3J0ZXN0IHJlcHJlc2VudGF0aW9uIHBvc3Np
YmxlLiBFLmcuCisgICAgLy8gICAgIGlmIDAuMDk5OTk5OTk5OTk5IGFuZCAwLjEgcmVwcmVzZW50
IHRoZSBzYW1lIGRvdWJsZSB0aGVuICIxIiBpcyByZXR1cm5lZAorICAgIC8vICAgICB3aXRoIHBv
aW50ID0gMC4KKyAgICAvLyAgICAgVGhlIGxhc3QgZGlnaXQgd2lsbCBiZSBjbG9zZXN0IHRvIHRo
ZSBhY3R1YWwgdi4gVGhhdCBpcywgZXZlbiBpZiBzZXZlcmFsCisgICAgLy8gICAgIGRpZ2l0cyBt
aWdodCBjb3JyZWN0bHkgeWllbGQgJ3YnIHdoZW4gcmVhZCBhZ2FpbiwgdGhlIGJ1ZmZlciB3aWxs
IGNvbnRhaW4KKyAgICAvLyAgICAgdGhlIG9uZSBjbG9zZXN0IHRvIHYuCisgICAgLy8gICAtIEZB
U1RfRFRPQV9QUkVDSVNJT04sIHRoZW4KKyAgICAvLyAgICAgdGhlIGJ1ZmZlciBjb250YWlucyBy
ZXF1ZXN0ZWRfZGlnaXRzIGRpZ2l0cy4KKyAgICAvLyAgICAgdGhlIGRpZmZlcmVuY2UgdiAtIChi
dWZmZXIgKiAxMF4ocG9pbnQtbGVuZ3RoKSkgaXMgY2xvc2VzdCB0byB6ZXJvIGZvcgorICAgIC8v
ICAgICBhbGwgcG9zc2libGUgcmVwcmVzZW50YXRpb25zIG9mIHJlcXVlc3RlZF9kaWdpdHMgZGln
aXRzLgorICAgIC8vICAgICBJZiB0aGVyZSBhcmUgdHdvIHZhbHVlcyB0aGF0IGFyZSBlcXVhbGx5
IGNsb3NlLCB0aGVuIEZhc3REdG9hIHJldHVybnMKKyAgICAvLyAgICAgZmFsc2UuCisgICAgLy8g
Rm9yIGJvdGggbW9kZXMgdGhlIGJ1ZmZlciBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIHRo
ZSByZXN1bHQuCisgICAgYm9vbCBGYXN0RHRvYShkb3VibGUgZCwKKyAgICAgICAgICAgICAgICAg
IEZhc3REdG9hTW9kZSBtb2RlLAorICAgICAgICAgICAgICAgICAgaW50IHJlcXVlc3RlZF9kaWdp
dHMsCisgICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLAorICAgICAgICAgICAg
ICAgICAgaW50KiBsZW5ndGgsCisgICAgICAgICAgICAgICAgICBpbnQqIGRlY2ltYWxfcG9pbnQp
OworICAgIAorfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCisKKyNlbmRpZiAgLy8g
RE9VQkxFX0NPTlZFUlNJT05fRkFTVF9EVE9BX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL2R0b2EvZml4ZWQtZHRvYS5jYyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvZHRvYS9maXhlZC1kdG9hLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk0ZDMyMjllYzZjNDc0NDlhZGY1ZDAx
NDljNzQxMGJiMjBmMDIwYWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL2R0b2EvZml4ZWQtZHRvYS5jYwpAQCAtMCwwICsxLDQwNCBAQAorLy8gQ29weXJpZ2h0
IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisv
LyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1lciBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAg
ICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAg
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisv
LyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorCisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSAiVW51c2VkUGFy
YW0uaCIKKyNpbmNsdWRlICJmaXhlZC1kdG9hLmgiCisjaW5jbHVkZSAiZG91YmxlLmgiCisKK25h
bWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgLy8gUmVwcmVzZW50cyBhIDEy
OGJpdCB0eXBlLiBUaGlzIGNsYXNzIHNob3VsZCBiZSByZXBsYWNlZCBieSBhIG5hdGl2ZSB0eXBl
IG9uCisgICAgLy8gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCAxMjhiaXQgaW50ZWdlcnMuCisgICAg
Y2xhc3MgVUludDEyOCB7CisgICAgcHVibGljOgorICAgICAgICBVSW50MTI4KCkgOiBoaWdoX2Jp
dHNfKDApLCBsb3dfYml0c18oMCkgeyB9CisgICAgICAgIFVJbnQxMjgodWludDY0X3QgaGlnaCwg
dWludDY0X3QgbG93KSA6IGhpZ2hfYml0c18oaGlnaCksIGxvd19iaXRzXyhsb3cpIHsgfQorICAg
ICAgICAKKyAgICAgICAgdm9pZCBNdWx0aXBseSh1aW50MzJfdCBtdWx0aXBsaWNhbmQpIHsKKyAg
ICAgICAgICAgIHVpbnQ2NF90IGFjY3VtdWxhdG9yOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBhY2N1bXVsYXRvciA9IChsb3dfYml0c18gJiBrTWFzazMyKSAqIG11bHRpcGxpY2FuZDsKKyAg
ICAgICAgICAgIHVpbnQzMl90IHBhcnQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYWNjdW11bGF0
b3IgJiBrTWFzazMyKTsKKyAgICAgICAgICAgIGFjY3VtdWxhdG9yID4+PSAzMjsKKyAgICAgICAg
ICAgIGFjY3VtdWxhdG9yID0gYWNjdW11bGF0b3IgKyAobG93X2JpdHNfID4+IDMyKSAqIG11bHRp
cGxpY2FuZDsKKyAgICAgICAgICAgIGxvd19iaXRzXyA9IChhY2N1bXVsYXRvciA8PCAzMikgKyBw
YXJ0OworICAgICAgICAgICAgYWNjdW11bGF0b3IgPj49IDMyOworICAgICAgICAgICAgYWNjdW11
bGF0b3IgPSBhY2N1bXVsYXRvciArIChoaWdoX2JpdHNfICYga01hc2szMikgKiBtdWx0aXBsaWNh
bmQ7CisgICAgICAgICAgICBwYXJ0ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFjY3VtdWxhdG9y
ICYga01hc2szMik7CisgICAgICAgICAgICBhY2N1bXVsYXRvciA+Pj0gMzI7CisgICAgICAgICAg
ICBhY2N1bXVsYXRvciA9IGFjY3VtdWxhdG9yICsgKGhpZ2hfYml0c18gPj4gMzIpICogbXVsdGlw
bGljYW5kOworICAgICAgICAgICAgaGlnaF9iaXRzXyA9IChhY2N1bXVsYXRvciA8PCAzMikgKyBw
YXJ0OworICAgICAgICAgICAgQVNTRVJUKChhY2N1bXVsYXRvciA+PiAzMikgPT0gMCk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgU2hpZnQoaW50IHNoaWZ0X2Ftb3VudCkgewor
ICAgICAgICAgICAgQVNTRVJUKC02NCA8PSBzaGlmdF9hbW91bnQgJiYgc2hpZnRfYW1vdW50IDw9
IDY0KTsKKyAgICAgICAgICAgIGlmIChzaGlmdF9hbW91bnQgPT0gMCkgeworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hpZnRfYW1vdW50ID09IC02NCkg
eworICAgICAgICAgICAgICAgIGhpZ2hfYml0c18gPSBsb3dfYml0c187CisgICAgICAgICAgICAg
ICAgbG93X2JpdHNfID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hpZnRfYW1vdW50ID09
IDY0KSB7CisgICAgICAgICAgICAgICAgbG93X2JpdHNfID0gaGlnaF9iaXRzXzsKKyAgICAgICAg
ICAgICAgICBoaWdoX2JpdHNfID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hpZnRfYW1v
dW50IDw9IDApIHsKKyAgICAgICAgICAgICAgICBoaWdoX2JpdHNfIDw8PSAtc2hpZnRfYW1vdW50
OworICAgICAgICAgICAgICAgIGhpZ2hfYml0c18gKz0gbG93X2JpdHNfID4+ICg2NCArIHNoaWZ0
X2Ftb3VudCk7CisgICAgICAgICAgICAgICAgbG93X2JpdHNfIDw8PSAtc2hpZnRfYW1vdW50Owor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBsb3dfYml0c18gPj49IHNoaWZ0
X2Ftb3VudDsKKyAgICAgICAgICAgICAgICBsb3dfYml0c18gKz0gaGlnaF9iaXRzXyA8PCAoNjQg
LSBzaGlmdF9hbW91bnQpOworICAgICAgICAgICAgICAgIGhpZ2hfYml0c18gPj49IHNoaWZ0X2Ft
b3VudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gTW9k
aWZpZXMgKnRoaXMgdG8gKnRoaXMgTU9EICgyXnBvd2VyKS4KKyAgICAgICAgLy8gUmV0dXJucyAq
dGhpcyBESVYgKDJecG93ZXIpLgorICAgICAgICBpbnQgRGl2TW9kUG93ZXJPZjIoaW50IHBvd2Vy
KSB7CisgICAgICAgICAgICBpZiAocG93ZXIgPj0gNjQpIHsKKyAgICAgICAgICAgICAgICBpbnQg
cmVzdWx0ID0gc3RhdGljX2Nhc3Q8aW50PihoaWdoX2JpdHNfID4+IChwb3dlciAtIDY0KSk7Cisg
ICAgICAgICAgICAgICAgaGlnaF9iaXRzXyAtPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4ocmVzdWx0
KSA8PCAocG93ZXIgLSA2NCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdWludDY0X3QgcGFydF9sb3cgPSBsb3df
Yml0c18gPj4gcG93ZXI7CisgICAgICAgICAgICAgICAgdWludDY0X3QgcGFydF9oaWdoID0gaGln
aF9iaXRzXyA8PCAoNjQgLSBwb3dlcik7CisgICAgICAgICAgICAgICAgaW50IHJlc3VsdCA9IHN0
YXRpY19jYXN0PGludD4ocGFydF9sb3cgKyBwYXJ0X2hpZ2gpOworICAgICAgICAgICAgICAgIGhp
Z2hfYml0c18gPSAwOworICAgICAgICAgICAgICAgIGxvd19iaXRzXyAtPSBwYXJ0X2xvdyA8PCBw
b3dlcjsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIElzWmVybygpIGNvbnN0IHsKKyAgICAgICAg
ICAgIHJldHVybiBoaWdoX2JpdHNfID09IDAgJiYgbG93X2JpdHNfID09IDA7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGludCBCaXRBdChpbnQgcG9zaXRpb24pIHsKKyAgICAgICAgICAg
IGlmIChwb3NpdGlvbiA+PSA2NCkgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxpbnQ+KGhpZ2hfYml0c18gPj4gKHBvc2l0aW9uIC0gNjQpKSAmIDE7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxvd19iaXRz
XyA+PiBwb3NpdGlvbikgJiAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAor
ICAgIHByaXZhdGU6CisgICAgICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBrTWFzazMyID0gMHhG
RkZGRkZGRjsKKyAgICAgICAgLy8gVmFsdWUgPT0gKGhpZ2hfYml0c18gPDwgNjQpICsgbG93X2Jp
dHNfCisgICAgICAgIHVpbnQ2NF90IGhpZ2hfYml0c187CisgICAgICAgIHVpbnQ2NF90IGxvd19i
aXRzXzsKKyAgICB9OworICAgIAorICAgIAorICAgIHN0YXRpYyBjb25zdCBpbnQga0RvdWJsZVNp
Z25pZmljYW5kU2l6ZSA9IDUzOyAgLy8gSW5jbHVkZXMgdGhlIGhpZGRlbiBiaXQuCisgICAgCisg
ICAgCisgICAgc3RhdGljIHZvaWQgRmlsbERpZ2l0czMyRml4ZWRMZW5ndGgodWludDMyX3QgbnVt
YmVyLCBpbnQgcmVxdWVzdGVkX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLCBpbnQqIGxlbmd0aCkgeworICAgICAgICBm
b3IgKGludCBpID0gcmVxdWVzdGVkX2xlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAg
ICAgICBidWZmZXJbKCpsZW5ndGgpICsgaV0gPSAnMCcgKyBudW1iZXIgJSAxMDsKKyAgICAgICAg
ICAgIG51bWJlciAvPSAxMDsKKyAgICAgICAgfQorICAgICAgICAqbGVuZ3RoICs9IHJlcXVlc3Rl
ZF9sZW5ndGg7CisgICAgfQorICAgIAorICAgIAorICAgIHN0YXRpYyB2b2lkIEZpbGxEaWdpdHMz
Mih1aW50MzJfdCBudW1iZXIsIFZlY3RvcjxjaGFyPiBidWZmZXIsIGludCogbGVuZ3RoKSB7Cisg
ICAgICAgIGludCBudW1iZXJfbGVuZ3RoID0gMDsKKyAgICAgICAgLy8gV2UgZmlsbCB0aGUgZGln
aXRzIGluIHJldmVyc2Ugb3JkZXIgYW5kIGV4Y2hhbmdlIHRoZW0gYWZ0ZXJ3YXJkcy4KKyAgICAg
ICAgd2hpbGUgKG51bWJlciAhPSAwKSB7CisgICAgICAgICAgICBpbnQgZGlnaXQgPSBudW1iZXIg
JSAxMDsKKyAgICAgICAgICAgIG51bWJlciAvPSAxMDsKKyAgICAgICAgICAgIGJ1ZmZlclsoKmxl
bmd0aCkgKyBudW1iZXJfbGVuZ3RoXSA9ICcwJyArIGRpZ2l0OworICAgICAgICAgICAgbnVtYmVy
X2xlbmd0aCsrOworICAgICAgICB9CisgICAgICAgIC8vIEV4Y2hhbmdlIHRoZSBkaWdpdHMuCisg
ICAgICAgIGludCBpID0gKmxlbmd0aDsKKyAgICAgICAgaW50IGogPSAqbGVuZ3RoICsgbnVtYmVy
X2xlbmd0aCAtIDE7CisgICAgICAgIHdoaWxlIChpIDwgaikgeworICAgICAgICAgICAgY2hhciB0
bXAgPSBidWZmZXJbaV07CisgICAgICAgICAgICBidWZmZXJbaV0gPSBidWZmZXJbal07CisgICAg
ICAgICAgICBidWZmZXJbal0gPSB0bXA7CisgICAgICAgICAgICBpKys7CisgICAgICAgICAgICBq
LS07CisgICAgICAgIH0KKyAgICAgICAgKmxlbmd0aCArPSBudW1iZXJfbGVuZ3RoOworICAgIH0K
KyAgICAKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBGaWxsRGlnaXRzNjRGaXhlZExlbmd0aCh1aW50
NjRfdCBudW1iZXIsIGludCByZXF1ZXN0ZWRfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXIsIGludCogbGVuZ3RoKSB7Cisg
ICAgICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0ZWRfbGVuZ3RoKTsKKyAgICAgICAgY29uc3QgdWlu
dDMyX3Qga1RlbjcgPSAxMDAwMDAwMDsKKyAgICAgICAgLy8gRm9yIGVmZmljaWVuY3kgY3V0IHRo
ZSBudW1iZXIgaW50byAzIHVpbnQzMl90IHBhcnRzLCBhbmQgcHJpbnQgdGhvc2UuCisgICAgICAg
IHVpbnQzMl90IHBhcnQyID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG51bWJlciAlIGtUZW43KTsK
KyAgICAgICAgbnVtYmVyIC89IGtUZW43OworICAgICAgICB1aW50MzJfdCBwYXJ0MSA9IHN0YXRp
Y19jYXN0PHVpbnQzMl90PihudW1iZXIgJSBrVGVuNyk7CisgICAgICAgIHVpbnQzMl90IHBhcnQw
ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG51bWJlciAvIGtUZW43KTsKKyAgICAgICAgCisgICAg
ICAgIEZpbGxEaWdpdHMzMkZpeGVkTGVuZ3RoKHBhcnQwLCAzLCBidWZmZXIsIGxlbmd0aCk7Cisg
ICAgICAgIEZpbGxEaWdpdHMzMkZpeGVkTGVuZ3RoKHBhcnQxLCA3LCBidWZmZXIsIGxlbmd0aCk7
CisgICAgICAgIEZpbGxEaWdpdHMzMkZpeGVkTGVuZ3RoKHBhcnQyLCA3LCBidWZmZXIsIGxlbmd0
aCk7CisgICAgfQorICAgIAorICAgIAorICAgIHN0YXRpYyB2b2lkIEZpbGxEaWdpdHM2NCh1aW50
NjRfdCBudW1iZXIsIFZlY3RvcjxjaGFyPiBidWZmZXIsIGludCogbGVuZ3RoKSB7CisgICAgICAg
IGNvbnN0IHVpbnQzMl90IGtUZW43ID0gMTAwMDAwMDA7CisgICAgICAgIC8vIEZvciBlZmZpY2ll
bmN5IGN1dCB0aGUgbnVtYmVyIGludG8gMyB1aW50MzJfdCBwYXJ0cywgYW5kIHByaW50IHRob3Nl
LgorICAgICAgICB1aW50MzJfdCBwYXJ0MiA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihudW1iZXIg
JSBrVGVuNyk7CisgICAgICAgIG51bWJlciAvPSBrVGVuNzsKKyAgICAgICAgdWludDMyX3QgcGFy
dDEgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4obnVtYmVyICUga1RlbjcpOworICAgICAgICB1aW50
MzJfdCBwYXJ0MCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihudW1iZXIgLyBrVGVuNyk7CisgICAg
ICAgIAorICAgICAgICBpZiAocGFydDAgIT0gMCkgeworICAgICAgICAgICAgRmlsbERpZ2l0czMy
KHBhcnQwLCBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgICAgICBGaWxsRGlnaXRzMzJGaXhlZExl
bmd0aChwYXJ0MSwgNywgYnVmZmVyLCBsZW5ndGgpOworICAgICAgICAgICAgRmlsbERpZ2l0czMy
Rml4ZWRMZW5ndGgocGFydDIsIDcsIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAgfSBlbHNlIGlm
IChwYXJ0MSAhPSAwKSB7CisgICAgICAgICAgICBGaWxsRGlnaXRzMzIocGFydDEsIGJ1ZmZlciwg
bGVuZ3RoKTsKKyAgICAgICAgICAgIEZpbGxEaWdpdHMzMkZpeGVkTGVuZ3RoKHBhcnQyLCA3LCBi
dWZmZXIsIGxlbmd0aCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBGaWxsRGlnaXRz
MzIocGFydDIsIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAK
KyAgICBzdGF0aWMgdm9pZCBSb3VuZFVwKFZlY3RvcjxjaGFyPiBidWZmZXIsIGludCogbGVuZ3Ro
LCBpbnQqIGRlY2ltYWxfcG9pbnQpIHsKKyAgICAgICAgLy8gQW4gZW1wdHkgYnVmZmVyIHJlcHJl
c2VudHMgMC4KKyAgICAgICAgaWYgKCpsZW5ndGggPT0gMCkgeworICAgICAgICAgICAgYnVmZmVy
WzBdID0gJzEnOworICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSAxOworICAgICAgICAgICAg
Kmxlbmd0aCA9IDE7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8g
Um91bmQgdGhlIGxhc3QgZGlnaXQgdW50aWwgd2UgZWl0aGVyIGhhdmUgYSBkaWdpdCB0aGF0IHdh
cyBub3QgJzknIG9yIHVudGlsCisgICAgICAgIC8vIHdlIHJlYWNoZWQgdGhlIGZpcnN0IGRpZ2l0
LgorICAgICAgICBidWZmZXJbKCpsZW5ndGgpIC0gMV0rKzsKKyAgICAgICAgZm9yIChpbnQgaSA9
ICgqbGVuZ3RoKSAtIDE7IGkgPiAwOyAtLWkpIHsKKyAgICAgICAgICAgIGlmIChidWZmZXJbaV0g
IT0gJzAnICsgMTApIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBidWZmZXJbaV0gPSAnMCc7CisgICAgICAgICAgICBidWZmZXJbaSAtIDFdKys7
CisgICAgICAgIH0KKyAgICAgICAgLy8gSWYgdGhlIGZpcnN0IGRpZ2l0IGlzIG5vdyAnMCcgKyAx
MCwgd2Ugd291bGQgbmVlZCB0byBzZXQgaXQgdG8gJzAnIGFuZCBhZGQKKyAgICAgICAgLy8gYSAn
MScgaW4gZnJvbnQuIEhvd2V2ZXIgd2UgcmVhY2ggdGhlIGZpcnN0IGRpZ2l0IG9ubHkgaWYgYWxs
IGZvbGxvd2luZworICAgICAgICAvLyBkaWdpdHMgaGFkIGJlZW4gJzknIGJlZm9yZSByb3VuZGlu
ZyB1cC4gTm93IGFsbCB0cmFpbGluZyBkaWdpdHMgYXJlICcwJyBhbmQKKyAgICAgICAgLy8gd2Ug
c2ltcGx5IHN3aXRjaCB0aGUgZmlyc3QgZGlnaXQgdG8gJzEnIGFuZCB1cGRhdGUgdGhlIGRlY2lt
YWwtcG9pbnQKKyAgICAgICAgLy8gKGluZGljYXRpbmcgdGhhdCB0aGUgcG9pbnQgaXMgbm93IG9u
ZSBkaWdpdCB0byB0aGUgcmlnaHQpLgorICAgICAgICBpZiAoYnVmZmVyWzBdID09ICcwJyArIDEw
KSB7CisgICAgICAgICAgICBidWZmZXJbMF0gPSAnMSc7CisgICAgICAgICAgICAoKmRlY2ltYWxf
cG9pbnQpKys7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgLy8gVGhlIGdpdmVu
IGZyYWN0aW9uYWxzIG51bWJlciByZXByZXNlbnRzIGEgZml4ZWQtcG9pbnQgbnVtYmVyIHdpdGgg
YmluYXJ5CisgICAgLy8gcG9pbnQgYXQgYml0ICgtZXhwb25lbnQpLgorICAgIC8vIFByZWNvbmRp
dGlvbnM6CisgICAgLy8gICAtMTI4IDw9IGV4cG9uZW50IDw9IDAuCisgICAgLy8gICAwIDw9IGZy
YWN0aW9uYWxzICogMl5leHBvbmVudCA8IDEKKyAgICAvLyAgIFRoZSBidWZmZXIgaG9sZHMgdGhl
IHJlc3VsdC4KKyAgICAvLyBUaGUgZnVuY3Rpb24gd2lsbCByb3VuZCBpdHMgcmVzdWx0LiBEdXJp
bmcgdGhlIHJvdW5kaW5nLXByb2Nlc3MgZGlnaXRzIG5vdAorICAgIC8vIGdlbmVyYXRlZCBieSB0
aGlzIGZ1bmN0aW9uIG1pZ2h0IGJlIHVwZGF0ZWQsIGFuZCB0aGUgZGVjaW1hbC1wb2ludCB2YXJp
YWJsZQorICAgIC8vIG1pZ2h0IGJlIHVwZGF0ZWQuIElmIHRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVz
IHRoZSBkaWdpdHMgOTkgYW5kIHRoZSBidWZmZXIKKyAgICAvLyBhbHJlYWR5IGNvbnRhaW5lZCAi
MTk5IiAodGh1cyB5aWVsZGluZyBhIGJ1ZmZlciBvZiAiMTk5OTkiKSB0aGVuIGEKKyAgICAvLyBy
b3VuZGluZy11cCB3aWxsIGNoYW5nZSB0aGUgY29udGVudHMgb2YgdGhlIGJ1ZmZlciB0byAiMjAw
MDAiLgorICAgIHN0YXRpYyB2b2lkIEZpbGxGcmFjdGlvbmFscyh1aW50NjRfdCBmcmFjdGlvbmFs
cywgaW50IGV4cG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJh
Y3Rpb25hbF9jb3VudCwgVmVjdG9yPGNoYXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50KiBsZW5ndGgsIGludCogZGVjaW1hbF9wb2ludCkgeworICAgICAgICBB
U1NFUlQoLTEyOCA8PSBleHBvbmVudCAmJiBleHBvbmVudCA8PSAwKTsKKyAgICAgICAgLy8gJ2Zy
YWN0aW9uYWxzJyBpcyBhIGZpeGVkLXBvaW50IG51bWJlciwgd2l0aCBiaW5hcnkgcG9pbnQgYXQg
Yml0CisgICAgICAgIC8vICgtZXhwb25lbnQpLiBJbnNpZGUgdGhlIGZ1bmN0aW9uIHRoZSBub24t
Y29udmVydGVkIHJlbWFpbmRlciBvZiBmcmFjdGlvbmFscworICAgICAgICAvLyBpcyBhIGZpeGVk
LXBvaW50IG51bWJlciwgd2l0aCBiaW5hcnkgcG9pbnQgYXQgYml0ICdwb2ludCcuCisgICAgICAg
IGlmICgtZXhwb25lbnQgPD0gNjQpIHsKKyAgICAgICAgICAgIC8vIE9uZSA2NCBiaXQgbnVtYmVy
IGlzIHN1ZmZpY2llbnQuCisgICAgICAgICAgICBBU1NFUlQoZnJhY3Rpb25hbHMgPj4gNTYgPT0g
MCk7CisgICAgICAgICAgICBpbnQgcG9pbnQgPSAtZXhwb25lbnQ7CisgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGZyYWN0aW9uYWxfY291bnQ7ICsraSkgeworICAgICAgICAgICAgICAg
IGlmIChmcmFjdGlvbmFscyA9PSAwKSBicmVhazsKKyAgICAgICAgICAgICAgICAvLyBJbnN0ZWFk
IG9mIG11bHRpcGx5aW5nIGJ5IDEwIHdlIG11bHRpcGx5IGJ5IDUgYW5kIGFkanVzdCB0aGUgcG9p
bnQKKyAgICAgICAgICAgICAgICAvLyBsb2NhdGlvbi4gVGhpcyB3YXkgdGhlIGZyYWN0aW9uYWxz
IHZhcmlhYmxlIHdpbGwgbm90IG92ZXJmbG93LgorICAgICAgICAgICAgICAgIC8vIEludmFyaWFu
dCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wOiBmcmFjdGlvbmFscyA8IDJecG9pbnQuCisg
ICAgICAgICAgICAgICAgLy8gSW5pdGlhbGx5IHdlIGhhdmU6IHBvaW50IDw9IDY0IGFuZCBmcmFj
dGlvbmFscyA8IDJeNTYKKyAgICAgICAgICAgICAgICAvLyBBZnRlciBlYWNoIGl0ZXJhdGlvbiB0
aGUgcG9pbnQgaXMgZGVjcmVtZW50ZWQgYnkgb25lLgorICAgICAgICAgICAgICAgIC8vIE5vdGUg
dGhhdCA1XjMgPSAxMjUgPCAxMjggPSAyXjcuCisgICAgICAgICAgICAgICAgLy8gVGhlcmVmb3Jl
IHRocmVlIGl0ZXJhdGlvbnMgb2YgdGhpcyBsb29wIHdpbGwgbm90IG92ZXJmbG93IGZyYWN0aW9u
YWxzCisgICAgICAgICAgICAgICAgLy8gKGV2ZW4gd2l0aG91dCB0aGUgc3VidHJhY3Rpb24gYXQg
dGhlIGVuZCBvZiB0aGUgbG9vcCBib2R5KS4gQXQgdGhpcworICAgICAgICAgICAgICAgIC8vIHRp
bWUgcG9pbnQgd2lsbCBzYXRpc2Z5IHBvaW50IDw9IDYxIGFuZCB0aGVyZWZvcmUgZnJhY3Rpb25h
bHMgPCAyXnBvaW50CisgICAgICAgICAgICAgICAgLy8gYW5kIGFueSBmdXJ0aGVyIG11bHRpcGxp
Y2F0aW9uIG9mIGZyYWN0aW9uYWxzIGJ5IDUgd2lsbCBub3Qgb3ZlcmZsb3cuCisgICAgICAgICAg
ICAgICAgZnJhY3Rpb25hbHMgKj0gNTsKKyAgICAgICAgICAgICAgICBwb2ludC0tOworICAgICAg
ICAgICAgICAgIGludCBkaWdpdCA9IHN0YXRpY19jYXN0PGludD4oZnJhY3Rpb25hbHMgPj4gcG9p
bnQpOworICAgICAgICAgICAgICAgIGJ1ZmZlclsqbGVuZ3RoXSA9ICcwJyArIGRpZ2l0OworICAg
ICAgICAgICAgICAgICgqbGVuZ3RoKSsrOworICAgICAgICAgICAgICAgIGZyYWN0aW9uYWxzIC09
IHN0YXRpY19jYXN0PHVpbnQ2NF90PihkaWdpdCkgPDwgcG9pbnQ7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAvLyBJZiB0aGUgZmlyc3QgYml0IGFmdGVyIHRoZSBwb2ludCBpcyBzZXQgd2Ug
aGF2ZSB0byByb3VuZCB1cC4KKyAgICAgICAgICAgIGlmICgoKGZyYWN0aW9uYWxzID4+IChwb2lu
dCAtIDEpKSAmIDEpID09IDEpIHsKKyAgICAgICAgICAgICAgICBSb3VuZFVwKGJ1ZmZlciwgbGVu
Z3RoLCBkZWNpbWFsX3BvaW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsgIC8v
IFdlIG5lZWQgMTI4IGJpdHMuCisgICAgICAgICAgICBBU1NFUlQoNjQgPCAtZXhwb25lbnQgJiYg
LWV4cG9uZW50IDw9IDEyOCk7CisgICAgICAgICAgICBVSW50MTI4IGZyYWN0aW9uYWxzMTI4ID0g
VUludDEyOChmcmFjdGlvbmFscywgMCk7CisgICAgICAgICAgICBmcmFjdGlvbmFsczEyOC5TaGlm
dCgtZXhwb25lbnQgLSA2NCk7CisgICAgICAgICAgICBpbnQgcG9pbnQgPSAxMjg7CisgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYWN0aW9uYWxfY291bnQ7ICsraSkgeworICAgICAg
ICAgICAgICAgIGlmIChmcmFjdGlvbmFsczEyOC5Jc1plcm8oKSkgYnJlYWs7CisgICAgICAgICAg
ICAgICAgLy8gQXMgYmVmb3JlOiBpbnN0ZWFkIG9mIG11bHRpcGx5aW5nIGJ5IDEwIHdlIG11bHRp
cGx5IGJ5IDUgYW5kIGFkanVzdCB0aGUKKyAgICAgICAgICAgICAgICAvLyBwb2ludCBsb2NhdGlv
bi4KKyAgICAgICAgICAgICAgICAvLyBUaGlzIG11bHRpcGxpY2F0aW9uIHdpbGwgbm90IG92ZXJm
bG93IGZvciB0aGUgc2FtZSByZWFzb25zIGFzIGJlZm9yZS4KKyAgICAgICAgICAgICAgICBmcmFj
dGlvbmFsczEyOC5NdWx0aXBseSg1KTsKKyAgICAgICAgICAgICAgICBwb2ludC0tOworICAgICAg
ICAgICAgICAgIGludCBkaWdpdCA9IGZyYWN0aW9uYWxzMTI4LkRpdk1vZFBvd2VyT2YyKHBvaW50
KTsKKyAgICAgICAgICAgICAgICBidWZmZXJbKmxlbmd0aF0gPSAnMCcgKyBkaWdpdDsKKyAgICAg
ICAgICAgICAgICAoKmxlbmd0aCkrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChm
cmFjdGlvbmFsczEyOC5CaXRBdChwb2ludCAtIDEpID09IDEpIHsKKyAgICAgICAgICAgICAgICBS
b3VuZFVwKGJ1ZmZlciwgbGVuZ3RoLCBkZWNpbWFsX3BvaW50KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBSZW1vdmVzIGxlYWRpbmcgYW5kIHRy
YWlsaW5nIHplcm9zLgorICAgIC8vIElmIGxlYWRpbmcgemVyb3MgYXJlIHJlbW92ZWQgdGhlbiB0
aGUgZGVjaW1hbCBwb2ludCBwb3NpdGlvbiBpcyBhZGp1c3RlZC4KKyAgICBzdGF0aWMgdm9pZCBU
cmltWmVyb3MoVmVjdG9yPGNoYXI+IGJ1ZmZlciwgaW50KiBsZW5ndGgsIGludCogZGVjaW1hbF9w
b2ludCkgeworICAgICAgICB3aGlsZSAoKmxlbmd0aCA+IDAgJiYgYnVmZmVyWygqbGVuZ3RoKSAt
IDFdID09ICcwJykgeworICAgICAgICAgICAgKCpsZW5ndGgpLS07CisgICAgICAgIH0KKyAgICAg
ICAgaW50IGZpcnN0X25vbl96ZXJvID0gMDsKKyAgICAgICAgd2hpbGUgKGZpcnN0X25vbl96ZXJv
IDwgKmxlbmd0aCAmJiBidWZmZXJbZmlyc3Rfbm9uX3plcm9dID09ICcwJykgeworICAgICAgICAg
ICAgZmlyc3Rfbm9uX3plcm8rKzsKKyAgICAgICAgfQorICAgICAgICBpZiAoZmlyc3Rfbm9uX3pl
cm8gIT0gMCkgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IGZpcnN0X25vbl96ZXJvOyBpIDwg
Kmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgLSBmaXJzdF9ub25femVy
b10gPSBidWZmZXJbaV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICAqbGVuZ3RoIC09IGZp
cnN0X25vbl96ZXJvOworICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgLT0gZmlyc3Rfbm9uX3pl
cm87CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgYm9vbCBGYXN0Rml4ZWREdG9h
KGRvdWJsZSB2LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJhY3Rpb25hbF9jb3VudCwK
KyAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgaW50KiBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgIGludCogZGVj
aW1hbF9wb2ludCkgeworICAgICAgICBjb25zdCB1aW50MzJfdCBrTWF4VUludDMyID0gMHhGRkZG
RkZGRjsKKyAgICAgICAgdWludDY0X3Qgc2lnbmlmaWNhbmQgPSBEb3VibGUodikuU2lnbmlmaWNh
bmQoKTsKKyAgICAgICAgaW50IGV4cG9uZW50ID0gRG91YmxlKHYpLkV4cG9uZW50KCk7CisgICAg
ICAgIC8vIHYgPSBzaWduaWZpY2FuZCAqIDJeZXhwb25lbnQgKHdpdGggc2lnbmlmaWNhbmQgYSA1
M2JpdCBpbnRlZ2VyKS4KKyAgICAgICAgLy8gSWYgdGhlIGV4cG9uZW50IGlzIGxhcmdlciB0aGFu
IDIwIChpLmUuIHdlIG1heSBoYXZlIGEgNzNiaXQgbnVtYmVyKSB0aGVuIHdlCisgICAgICAgIC8v
IGRvbid0IGtub3cgaG93IHRvIGNvbXB1dGUgdGhlIHJlcHJlc2VudGF0aW9uLiAyXjczIH49IDku
NSoxMF4yMS4KKyAgICAgICAgLy8gSWYgbmVjZXNzYXJ5IHRoaXMgbGltaXQgY291bGQgcHJvYmFi
bHkgYmUgaW5jcmVhc2VkLCBidXQgd2UgZG9uJ3QgbmVlZAorICAgICAgICAvLyBtb3JlLgorICAg
ICAgICBpZiAoZXhwb25lbnQgPiAyMCkgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoZnJhY3Rp
b25hbF9jb3VudCA+IDIwKSByZXR1cm4gZmFsc2U7CisgICAgICAgICpsZW5ndGggPSAwOworICAg
ICAgICAvLyBBdCBtb3N0IGtEb3VibGVTaWduaWZpY2FuZFNpemUgYml0cyBvZiB0aGUgc2lnbmlm
aWNhbmQgYXJlIG5vbi16ZXJvLgorICAgICAgICAvLyBHaXZlbiBhIDY0IGJpdCBpbnRlZ2VyIHdl
IGhhdmUgMTEgMHMgZm9sbG93ZWQgYnkgNTMgcG90ZW50aWFsbHkgbm9uLXplcm8KKyAgICAgICAg
Ly8gYml0czogIDAuLjExKi4uMHh4eC4uNTMqLi54eAorICAgICAgICBpZiAoZXhwb25lbnQgKyBr
RG91YmxlU2lnbmlmaWNhbmRTaXplID4gNjQpIHsKKyAgICAgICAgICAgIC8vIFRoZSBleHBvbmVu
dCBtdXN0IGJlID4gMTEuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gV2Uga25vdyB0
aGF0IHYgPSBzaWduaWZpY2FuZCAqIDJeZXhwb25lbnQuCisgICAgICAgICAgICAvLyBBbmQgdGhl
IGV4cG9uZW50ID4gMTEuCisgICAgICAgICAgICAvLyBXZSBzaW1wbGlmeSB0aGUgdGFzayBieSBk
aXZpZGluZyB2IGJ5IDEwXjE3LgorICAgICAgICAgICAgLy8gVGhlIHF1b3RpZW50IGRlbGl2ZXJz
IHRoZSBmaXJzdCBkaWdpdHMsIGFuZCB0aGUgcmVtYWluZGVyIGZpdHMgaW50byBhIDY0CisgICAg
ICAgICAgICAvLyBiaXQgbnVtYmVyLgorICAgICAgICAgICAgLy8gRGl2aWRpbmcgYnkgMTBeMTcg
aXMgZXF1aXZhbGVudCB0byBkaXZpZGluZyBieSA1XjE3KjJeMTcuCisgICAgICAgICAgICBjb25z
dCB1aW50NjRfdCBrRml2ZTE3ID0gVUlOVDY0XzJQQVJUX0MoMHhCMSwgQTJCQzJFQzUpOyAgLy8g
NV4xNworICAgICAgICAgICAgdWludDY0X3QgZGl2aXNvciA9IGtGaXZlMTc7CisgICAgICAgICAg
ICBpbnQgZGl2aXNvcl9wb3dlciA9IDE3OworICAgICAgICAgICAgdWludDY0X3QgZGl2aWRlbmQg
PSBzaWduaWZpY2FuZDsKKyAgICAgICAgICAgIHVpbnQzMl90IHF1b3RpZW50OworICAgICAgICAg
ICAgdWludDY0X3QgcmVtYWluZGVyOworICAgICAgICAgICAgLy8gTGV0IHYgPSBmICogMl5lIHdp
dGggZiA9PSBzaWduaWZpY2FuZCBhbmQgZSA9PSBleHBvbmVudC4KKyAgICAgICAgICAgIC8vIFRo
ZW4gbmVlZCBxIChxdW90aWVudCkgYW5kIHIgKHJlbWFpbmRlcikgYXMgZm9sbG93czoKKyAgICAg
ICAgICAgIC8vICAgdiAgICAgICAgICAgID0gcSAqIDEwXjE3ICAgICAgICsgcgorICAgICAgICAg
ICAgLy8gICBmICogMl5lICAgICAgPSBxICogMTBeMTcgICAgICAgKyByCisgICAgICAgICAgICAv
LyAgIGYgKiAyXmUgICAgICA9IHEgKiA1XjE3ICogMl4xNyArIHIKKyAgICAgICAgICAgIC8vIElm
IGUgPiAxNyB0aGVuCisgICAgICAgICAgICAvLyAgIGYgKiAyXihlLTE3KSA9IHEgKiA1XjE3ICAg
ICAgICArIHIvMl4xNworICAgICAgICAgICAgLy8gZWxzZQorICAgICAgICAgICAgLy8gICBmICA9
IHEgKiA1XjE3ICogMl4oMTctZSkgKyByLzJeZQorICAgICAgICAgICAgaWYgKGV4cG9uZW50ID4g
ZGl2aXNvcl9wb3dlcikgeworICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgYWxsb3cgZXhwb25l
bnRzIG9mIHVwIHRvIDIwIGFuZCB0aGVyZWZvcmUgKDE3IC0gZSkgPD0gMworICAgICAgICAgICAg
ICAgIGRpdmlkZW5kIDw8PSBleHBvbmVudCAtIGRpdmlzb3JfcG93ZXI7CisgICAgICAgICAgICAg
ICAgcXVvdGllbnQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZGl2aWRlbmQgLyBkaXZpc29yKTsK
KyAgICAgICAgICAgICAgICByZW1haW5kZXIgPSAoZGl2aWRlbmQgJSBkaXZpc29yKSA8PCBkaXZp
c29yX3Bvd2VyOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkaXZpc29y
IDw8PSBkaXZpc29yX3Bvd2VyIC0gZXhwb25lbnQ7CisgICAgICAgICAgICAgICAgcXVvdGllbnQg
PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZGl2aWRlbmQgLyBkaXZpc29yKTsKKyAgICAgICAgICAg
ICAgICByZW1haW5kZXIgPSAoZGl2aWRlbmQgJSBkaXZpc29yKSA8PCBleHBvbmVudDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIEZpbGxEaWdpdHMzMihxdW90aWVudCwgYnVmZmVyLCBsZW5n
dGgpOworICAgICAgICAgICAgRmlsbERpZ2l0czY0Rml4ZWRMZW5ndGgocmVtYWluZGVyLCBkaXZp
c29yX3Bvd2VyLCBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgICAgICAqZGVjaW1hbF9wb2ludCA9
ICpsZW5ndGg7CisgICAgICAgIH0gZWxzZSBpZiAoZXhwb25lbnQgPj0gMCkgeworICAgICAgICAg
ICAgLy8gMCA8PSBleHBvbmVudCA8PSAxMQorICAgICAgICAgICAgc2lnbmlmaWNhbmQgPDw9IGV4
cG9uZW50OworICAgICAgICAgICAgRmlsbERpZ2l0czY0KHNpZ25pZmljYW5kLCBidWZmZXIsIGxl
bmd0aCk7CisgICAgICAgICAgICAqZGVjaW1hbF9wb2ludCA9ICpsZW5ndGg7CisgICAgICAgIH0g
ZWxzZSBpZiAoZXhwb25lbnQgPiAta0RvdWJsZVNpZ25pZmljYW5kU2l6ZSkgeworICAgICAgICAg
ICAgLy8gV2UgaGF2ZSB0byBjdXQgdGhlIG51bWJlci4KKyAgICAgICAgICAgIHVpbnQ2NF90IGlu
dGVncmFscyA9IHNpZ25pZmljYW5kID4+IC1leHBvbmVudDsKKyAgICAgICAgICAgIHVpbnQ2NF90
IGZyYWN0aW9uYWxzID0gc2lnbmlmaWNhbmQgLSAoaW50ZWdyYWxzIDw8IC1leHBvbmVudCk7Cisg
ICAgICAgICAgICBpZiAoaW50ZWdyYWxzID4ga01heFVJbnQzMikgeworICAgICAgICAgICAgICAg
IEZpbGxEaWdpdHM2NChpbnRlZ3JhbHMsIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgRmlsbERpZ2l0czMyKHN0YXRpY19jYXN0PHVpbnQzMl90
PihpbnRlZ3JhbHMpLCBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAqZGVjaW1hbF9wb2ludCA9ICpsZW5ndGg7CisgICAgICAgICAgICBGaWxsRnJhY3Rpb25hbHMo
ZnJhY3Rpb25hbHMsIGV4cG9uZW50LCBmcmFjdGlvbmFsX2NvdW50LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJ1ZmZlciwgbGVuZ3RoLCBkZWNpbWFsX3BvaW50KTsKKyAgICAgICAgfSBl
bHNlIGlmIChleHBvbmVudCA8IC0xMjgpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgY29uZmlndXJh
dGlvbiAod2l0aCBhdCBtb3N0IDIwIGRpZ2l0cykgbWVhbnMgdGhhdCBhbGwgZGlnaXRzIG11c3Qg
YmUKKyAgICAgICAgICAgIC8vIDAuCisgICAgICAgICAgICBBU1NFUlQoZnJhY3Rpb25hbF9jb3Vu
dCA8PSAyMCk7CisgICAgICAgICAgICBidWZmZXJbMF0gPSAnXDAnOworICAgICAgICAgICAgKmxl
bmd0aCA9IDA7CisgICAgICAgICAgICAqZGVjaW1hbF9wb2ludCA9IC1mcmFjdGlvbmFsX2NvdW50
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSAwOworICAg
ICAgICAgICAgRmlsbEZyYWN0aW9uYWxzKHNpZ25pZmljYW5kLCBleHBvbmVudCwgZnJhY3Rpb25h
bF9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGxlbmd0aCwgZGVj
aW1hbF9wb2ludCk7CisgICAgICAgIH0KKyAgICAgICAgVHJpbVplcm9zKGJ1ZmZlciwgbGVuZ3Ro
LCBkZWNpbWFsX3BvaW50KTsKKyAgICAgICAgYnVmZmVyWypsZW5ndGhdID0gJ1wwJzsKKyAgICAg
ICAgaWYgKCgqbGVuZ3RoKSA9PSAwKSB7CisgICAgICAgICAgICAvLyBUaGUgc3RyaW5nIGlzIGVt
cHR5IGFuZCB0aGUgZGVjaW1hbF9wb2ludCB0aHVzIGhhcyBubyBpbXBvcnRhbmNlLiBNaW1pY2sK
KyAgICAgICAgICAgIC8vIEdheSdzIGR0b2EgYW5kIGFuZCBzZXQgaXQgdG8gLWZyYWN0aW9uYWxf
Y291bnQuCisgICAgICAgICAgICAqZGVjaW1hbF9wb2ludCA9IC1mcmFjdGlvbmFsX2NvdW50Owor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKK30gIC8vIG5hbWVz
cGFjZSBkb3VibGVfY29udmVyc2lvbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9kdG9hL2ZpeGVkLWR0b2EuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9m
aXhlZC1kdG9hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmQ4MmFlM2YzMDUyYTRlNjRmM2U1ZGViOThlNzkzMDAx
ZGUzMDJlMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRv
YS9maXhlZC1kdG9hLmgKQEAgLTAsMCArMSw1NiBAQAorLy8gQ29weXJpZ2h0IDIwMTAgdGhlIFY4
IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8v
CisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisjaWZuZGVmIERPVUJMRV9DT05WRVJTSU9OX0ZJWEVEX0RUT0FfSF8KKyNkZWZpbmUgRE9V
QkxFX0NPTlZFUlNJT05fRklYRURfRFRPQV9IXworCisjaW5jbHVkZSAidXRpbHMuaCIKKworbmFt
ZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKKyAgICAKKyAgICAvLyBQcm9kdWNlcyBkaWdpdHMg
bmVjZXNzYXJ5IHRvIHByaW50IGEgZ2l2ZW4gbnVtYmVyIHdpdGgKKyAgICAvLyAnZnJhY3Rpb25h
bF9jb3VudCcgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50LgorICAgIC8vIFRoZSBidWZm
ZXIgbXVzdCBiZSBiaWcgZW5vdWdoIHRvIGhvbGQgdGhlIHJlc3VsdCBwbHVzIG9uZSB0ZXJtaW5h
dGluZyBudWxsCisgICAgLy8gY2hhcmFjdGVyLgorICAgIC8vCisgICAgLy8gVGhlIHByb2R1Y2Vk
IGRpZ2l0cyBtaWdodCBiZSB0b28gc2hvcnQgaW4gd2hpY2ggY2FzZSB0aGUgY2FsbGVyIGhhcyB0
byBmaWxsCisgICAgLy8gdGhlIGdhcHMgd2l0aCAnMCdzLgorICAgIC8vIEV4YW1wbGU6IEZhc3RG
aXhlZER0b2EoMC4wMDEsIDUsIC4uLikgaXMgYWxsb3dlZCB0byByZXR1cm4gYnVmZmVyID0gIjEi
LCBhbmQKKyAgICAvLyBkZWNpbWFsX3BvaW50ID0gLTIuCisgICAgLy8gSGFsZndheSBjYXNlcyBh
cmUgcm91bmRlZCB0b3dhcmRzICsvLUluZmluaXR5IChhd2F5IGZyb20gMCkuIFRoZSBjYWxsCisg
ICAgLy8gRmFzdEZpeGVkRHRvYSgwLjE1LCAyLCAuLi4pIHRodXMgcmV0dXJucyBidWZmZXIgPSAi
MiIsIGRlY2ltYWxfcG9pbnQgPSAwLgorICAgIC8vIFRoZSByZXR1cm5lZCBidWZmZXIgbWF5IGNv
bnRhaW4gZGlnaXRzIHRoYXQgd291bGQgYmUgdHJ1bmNhdGVkIGZyb20gdGhlCisgICAgLy8gc2hv
cnRlc3QgcmVwcmVzZW50YXRpb24gb2YgdGhlIGlucHV0LgorICAgIC8vCisgICAgLy8gVGhpcyBt
ZXRob2Qgb25seSB3b3JrcyBmb3Igc29tZSBwYXJhbWV0ZXJzLiBJZiBpdCBjYW4ndCBoYW5kbGUg
dGhlIGlucHV0IGl0CisgICAgLy8gcmV0dXJucyBmYWxzZS4gVGhlIG91dHB1dCBpcyBudWxsLXRl
cm1pbmF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gc3VjY2VlZHMuCisgICAgYm9vbCBGYXN0Rml4ZWRE
dG9hKGRvdWJsZSB2LCBpbnQgZnJhY3Rpb25hbF9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwgaW50KiBsZW5ndGgsIGludCogZGVjaW1hbF9wb2ludCk7
CisgICAgCit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KKworI2VuZGlmICAvLyBE
T1VCTEVfQ09OVkVSU0lPTl9GSVhFRF9EVE9BX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL2R0b2Evc3RydG9kLmNjIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9k
dG9hL3N0cnRvZC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNGZlMTExYTBhMTU4ZmQwMGMyMzAxZWE3Yjc4Yzkx
MDU1NzcyZWExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9k
dG9hL3N0cnRvZC5jYwpAQCAtMCwwICsxLDQ0MSBAQAorLy8gQ29weXJpZ2h0IDIwMTAgdGhlIFY4
IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8v
CisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNpbmNsdWRl
ICJzdHJ0b2QuaCIKKyNpbmNsdWRlICJiaWdudW0uaCIKKyNpbmNsdWRlICJjYWNoZWQtcG93ZXJz
LmgiCisjaW5jbHVkZSAiZG91YmxlLmgiCisKK25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7
CisgICAgCisgICAgLy8gMl41MyA9IDkwMDcxOTkyNTQ3NDA5OTIuCisgICAgLy8gQW55IGludGVn
ZXIgd2l0aCBhdCBtb3N0IDE1IGRlY2ltYWwgZGlnaXRzIHdpbGwgaGVuY2UgZml0IGludG8gYSBk
b3VibGUKKyAgICAvLyAod2hpY2ggaGFzIGEgNTNiaXQgc2lnbmlmaWNhbmQpIHdpdGhvdXQgbG9z
cyBvZiBwcmVjaXNpb24uCisgICAgc3RhdGljIGNvbnN0IGludCBrTWF4RXhhY3REb3VibGVJbnRl
Z2VyRGVjaW1hbERpZ2l0cyA9IDE1OworICAgIC8vIDJeNjQgPSAxODQ0Njc0NDA3MzcwOTU1MTYx
NiA+IDEwXjE5CisgICAgc3RhdGljIGNvbnN0IGludCBrTWF4VWludDY0RGVjaW1hbERpZ2l0cyA9
IDE5OworICAgIAorICAgIC8vIE1heCBkb3VibGU6IDEuNzk3NjkzMTM0ODYyMzE1NyB4IDEwXjMw
OAorICAgIC8vIE1pbiBub24temVybyBkb3VibGU6IDQuOTQwNjU2NDU4NDEyNDY1NCB4IDEwXi0z
MjQKKyAgICAvLyBBbnkgeCA+PSAxMF4zMDkgaXMgaW50ZXJwcmV0ZWQgYXMgK2luZmluaXR5Lgor
ICAgIC8vIEFueSB4IDw9IDEwXi0zMjQgaXMgaW50ZXJwcmV0ZWQgYXMgMC4KKyAgICAvLyBOb3Rl
IHRoYXQgMi41ZS0zMjQgKGRlc3BpdGUgYmVpbmcgc21hbGxlciB0aGFuIHRoZSBtaW4gZG91Ymxl
KSB3aWxsIGJlIHJlYWQKKyAgICAvLyBhcyBub24temVybyAoZXF1YWwgdG8gdGhlIG1pbiBub24t
emVybyBkb3VibGUpLgorICAgIHN0YXRpYyBjb25zdCBpbnQga01heERlY2ltYWxQb3dlciA9IDMw
OTsKKyAgICBzdGF0aWMgY29uc3QgaW50IGtNaW5EZWNpbWFsUG93ZXIgPSAtMzI0OworICAgIAor
ICAgIC8vIDJeNjQgPSAxODQ0Njc0NDA3MzcwOTU1MTYxNgorICAgIHN0YXRpYyBjb25zdCB1aW50
NjRfdCBrTWF4VWludDY0ID0gVUlOVDY0XzJQQVJUX0MoMHhGRkZGRkZGRiwgRkZGRkZGRkYpOwor
ICAgIAorICAgIAorICAgIHN0YXRpYyBjb25zdCBkb3VibGUgZXhhY3RfcG93ZXJzX29mX3Rlbltd
ID0geworICAgICAgICAxLjAsICAvLyAxMF4wCisgICAgICAgIDEwLjAsCisgICAgICAgIDEwMC4w
LAorICAgICAgICAxMDAwLjAsCisgICAgICAgIDEwMDAwLjAsCisgICAgICAgIDEwMDAwMC4wLAor
ICAgICAgICAxMDAwMDAwLjAsCisgICAgICAgIDEwMDAwMDAwLjAsCisgICAgICAgIDEwMDAwMDAw
MC4wLAorICAgICAgICAxMDAwMDAwMDAwLjAsCisgICAgICAgIDEwMDAwMDAwMDAwLjAsICAvLyAx
MF4xMAorICAgICAgICAxMDAwMDAwMDAwMDAuMCwKKyAgICAgICAgMTAwMDAwMDAwMDAwMC4wLAor
ICAgICAgICAxMDAwMDAwMDAwMDAwMC4wLAorICAgICAgICAxMDAwMDAwMDAwMDAwMDAuMCwKKyAg
ICAgICAgMTAwMDAwMDAwMDAwMDAwMC4wLAorICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMC4wLAor
ICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAuMCwKKyAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAw
MC4wLAorICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMC4wLAorICAgICAgICAxMDAwMDAwMDAw
MDAwMDAwMDAwMDAuMCwgIC8vIDEwXjIwCisgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
MCwKKyAgICAgICAgLy8gMTBeMjIgPSAweDIxZTE5ZTBjOWJhYjI0MDAwMDAgPSAweDg3ODY3ODMy
NmVhYzkgKiAyXjIyCisgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLjAKKyAgICB9Owor
ICAgIHN0YXRpYyBjb25zdCBpbnQga0V4YWN0UG93ZXJzT2ZUZW5TaXplID0gQVJSQVlfU0laRShl
eGFjdF9wb3dlcnNfb2ZfdGVuKTsKKyAgICAKKyAgICAvLyBNYXhpbXVtIG51bWJlciBvZiBzaWdu
aWZpY2FudCBkaWdpdHMgaW4gdGhlIGRlY2ltYWwgcmVwcmVzZW50YXRpb24uCisgICAgLy8gSW4g
ZmFjdCB0aGUgdmFsdWUgaXMgNzcyIChzZWUgY29udmVyc2lvbnMuY2MpLCBidXQgdG8gZ2l2ZSB1
cyBzb21lIG1hcmdpbgorICAgIC8vIHdlIHJvdW5kIHVwIHRvIDc4MC4KKyAgICBzdGF0aWMgY29u
c3QgaW50IGtNYXhTaWduaWZpY2FudERlY2ltYWxEaWdpdHMgPSA3ODA7CisgICAgCisgICAgc3Rh
dGljIFZlY3Rvcjxjb25zdCBjaGFyPiBUcmltTGVhZGluZ1plcm9zKFZlY3Rvcjxjb25zdCBjaGFy
PiBidWZmZXIpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBidWZmZXIubGVuZ3RoKCk7
IGkrKykgeworICAgICAgICAgICAgaWYgKGJ1ZmZlcltpXSAhPSAnMCcpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gYnVmZmVyLlN1YlZlY3RvcihpLCBidWZmZXIubGVuZ3RoKCkpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBWZWN0b3I8Y29uc3QgY2hhcj4oYnVm
ZmVyLnN0YXJ0KCksIDApOworICAgIH0KKyAgICAKKyAgICAKKyAgICBzdGF0aWMgVmVjdG9yPGNv
bnN0IGNoYXI+IFRyaW1UcmFpbGluZ1plcm9zKFZlY3Rvcjxjb25zdCBjaGFyPiBidWZmZXIpIHsK
KyAgICAgICAgZm9yIChpbnQgaSA9IGJ1ZmZlci5sZW5ndGgoKSAtIDE7IGkgPj0gMDsgLS1pKSB7
CisgICAgICAgICAgICBpZiAoYnVmZmVyW2ldICE9ICcwJykgeworICAgICAgICAgICAgICAgIHJl
dHVybiBidWZmZXIuU3ViVmVjdG9yKDAsIGkgKyAxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gVmVjdG9yPGNvbnN0IGNoYXI+KGJ1ZmZlci5zdGFydCgpLCAwKTsK
KyAgICB9CisgICAgCisgICAgCisgICAgc3RhdGljIHZvaWQgVHJpbVRvTWF4U2lnbmlmaWNhbnRE
aWdpdHMoVmVjdG9yPGNvbnN0IGNoYXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciogc2lnbmlmaWNhbnRfYnVmZmVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogc2lnbmlmaWNhbnRfZXhwb25l
bnQpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrTWF4U2lnbmlmaWNhbnREZWNpbWFs
RGlnaXRzIC0gMTsgKytpKSB7CisgICAgICAgICAgICBzaWduaWZpY2FudF9idWZmZXJbaV0gPSBi
dWZmZXJbaV07CisgICAgICAgIH0KKyAgICAgICAgLy8gVGhlIGlucHV0IGJ1ZmZlciBoYXMgYmVl
biB0cmltbWVkLiBUaGVyZWZvcmUgdGhlIGxhc3QgZGlnaXQgbXVzdCBiZQorICAgICAgICAvLyBk
aWZmZXJlbnQgZnJvbSAnMCcuCisgICAgICAgIEFTU0VSVChidWZmZXJbYnVmZmVyLmxlbmd0aCgp
IC0gMV0gIT0gJzAnKTsKKyAgICAgICAgLy8gU2V0IHRoZSBsYXN0IGRpZ2l0IHRvIGJlIG5vbi16
ZXJvLiBUaGlzIGlzIHN1ZmZpY2llbnQgdG8gZ3VhcmFudGVlCisgICAgICAgIC8vIGNvcnJlY3Qg
cm91bmRpbmcuCisgICAgICAgIHNpZ25pZmljYW50X2J1ZmZlcltrTWF4U2lnbmlmaWNhbnREZWNp
bWFsRGlnaXRzIC0gMV0gPSAnMSc7CisgICAgICAgICpzaWduaWZpY2FudF9leHBvbmVudCA9Cisg
ICAgICAgIGV4cG9uZW50ICsgKGJ1ZmZlci5sZW5ndGgoKSAtIGtNYXhTaWduaWZpY2FudERlY2lt
YWxEaWdpdHMpOworICAgIH0KKyAgICAKKyAgICAvLyBSZWFkcyBkaWdpdHMgZnJvbSB0aGUgYnVm
ZmVyIGFuZCBjb252ZXJ0cyB0aGVtIHRvIGEgdWludDY0LgorICAgIC8vIFJlYWRzIGluIGFzIG1h
bnkgZGlnaXRzIGFzIGZpdCBpbnRvIGEgdWludDY0LgorICAgIC8vIFdoZW4gdGhlIHN0cmluZyBz
dGFydHMgd2l0aCAiMTg0NDY3NDQwNzM3MDk1NTE2MSIgbm8gZnVydGhlciBkaWdpdCBpcyByZWFk
LgorICAgIC8vIFNpbmNlIDJeNjQgPSAxODQ0Njc0NDA3MzcwOTU1MTYxNiBpdCB3b3VsZCBzdGls
bCBiZSBwb3NzaWJsZSByZWFkIGFub3RoZXIKKyAgICAvLyBkaWdpdCBpZiBpdCB3YXMgbGVzcyBv
ciBlcXVhbCB0aGFuIDYsIGJ1dCB0aGlzIHdvdWxkIGNvbXBsaWNhdGUgdGhlIGNvZGUuCisgICAg
c3RhdGljIHVpbnQ2NF90IFJlYWRVaW50NjQoVmVjdG9yPGNvbnN0IGNoYXI+IGJ1ZmZlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIG51bWJlcl9vZl9yZWFkX2RpZ2l0cykg
eworICAgICAgICB1aW50NjRfdCByZXN1bHQgPSAwOworICAgICAgICBpbnQgaSA9IDA7CisgICAg
ICAgIHdoaWxlIChpIDwgYnVmZmVyLmxlbmd0aCgpICYmIHJlc3VsdCA8PSAoa01heFVpbnQ2NCAv
IDEwIC0gMSkpIHsKKyAgICAgICAgICAgIGludCBkaWdpdCA9IGJ1ZmZlcltpKytdIC0gJzAnOwor
ICAgICAgICAgICAgQVNTRVJUKDAgPD0gZGlnaXQgJiYgZGlnaXQgPD0gOSk7CisgICAgICAgICAg
ICByZXN1bHQgPSAxMCAqIHJlc3VsdCArIGRpZ2l0OworICAgICAgICB9CisgICAgICAgICpudW1i
ZXJfb2ZfcmVhZF9kaWdpdHMgPSBpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICAKKyAgICAKKyAgICAvLyBSZWFkcyBhIERpeUZwIGZyb20gdGhlIGJ1ZmZlci4KKyAgICAvLyBU
aGUgcmV0dXJuZWQgRGl5RnAgaXMgbm90IG5lY2Vzc2FyaWx5IG5vcm1hbGl6ZWQuCisgICAgLy8g
SWYgcmVtYWluaW5nX2RlY2ltYWxzIGlzIHplcm8gdGhlbiB0aGUgcmV0dXJuZWQgRGl5RnAgaXMg
YWNjdXJhdGUuCisgICAgLy8gT3RoZXJ3aXNlIGl0IGhhcyBiZWVuIHJvdW5kZWQgYW5kIGhhcyBl
cnJvciBvZiBhdCBtb3N0IDEvMiB1bHAuCisgICAgc3RhdGljIHZvaWQgUmVhZERpeUZwKFZlY3Rv
cjxjb25zdCBjaGFyPiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIERpeUZwKiBy
ZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogcmVtYWluaW5nX2RlY2ltYWxz
KSB7CisgICAgICAgIGludCByZWFkX2RpZ2l0czsKKyAgICAgICAgdWludDY0X3Qgc2lnbmlmaWNh
bmQgPSBSZWFkVWludDY0KGJ1ZmZlciwgJnJlYWRfZGlnaXRzKTsKKyAgICAgICAgaWYgKGJ1ZmZl
ci5sZW5ndGgoKSA9PSByZWFkX2RpZ2l0cykgeworICAgICAgICAgICAgKnJlc3VsdCA9IERpeUZw
KHNpZ25pZmljYW5kLCAwKTsKKyAgICAgICAgICAgICpyZW1haW5pbmdfZGVjaW1hbHMgPSAwOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gUm91bmQgdGhlIHNpZ25pZmljYW5kLgor
ICAgICAgICAgICAgaWYgKGJ1ZmZlcltyZWFkX2RpZ2l0c10gPj0gJzUnKSB7CisgICAgICAgICAg
ICAgICAgc2lnbmlmaWNhbmQrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIENvbXB1
dGUgdGhlIGJpbmFyeSBleHBvbmVudC4KKyAgICAgICAgICAgIGludCBleHBvbmVudCA9IDA7Cisg
ICAgICAgICAgICAqcmVzdWx0ID0gRGl5RnAoc2lnbmlmaWNhbmQsIGV4cG9uZW50KTsKKyAgICAg
ICAgICAgICpyZW1haW5pbmdfZGVjaW1hbHMgPSBidWZmZXIubGVuZ3RoKCkgLSByZWFkX2RpZ2l0
czsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICBzdGF0aWMgYm9vbCBEb3VibGVT
dHJ0b2QoVmVjdG9yPGNvbnN0IGNoYXI+IHRyaW1tZWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBleHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91Ymxl
KiByZXN1bHQpIHsKKyNpZiAhZGVmaW5lZChET1VCTEVfQ09OVkVSU0lPTl9DT1JSRUNUX0RPVUJM
RV9PUEVSQVRJT05TKQorICAgICAgICAvLyBPbiB4ODYgdGhlIGZsb2F0aW5nLXBvaW50IHN0YWNr
IGNhbiBiZSA2NCBvciA4MCBiaXRzIHdpZGUuIElmIGl0IGlzCisgICAgICAgIC8vIDgwIGJpdHMg
d2lkZSAoYXMgaXMgdGhlIGNhc2Ugb24gTGludXgpIHRoZW4gZG91YmxlLXJvdW5kaW5nIG9jY3Vy
cyBhbmQgdGhlCisgICAgICAgIC8vIHJlc3VsdCBpcyBub3QgYWNjdXJhdGUuCisgICAgICAgIC8v
IFdlIGtub3cgdGhhdCBXaW5kb3dzMzIgdXNlcyA2NCBiaXRzIGFuZCBpcyB0aGVyZWZvcmUgYWNj
dXJhdGUuCisgICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgQVJNIHNpbXVsYXRvciBpcyBjb21waWxl
ZCBmb3IgMzJiaXRzLiBJdCB0aGVyZWZvcmUgZXhoaWJpdHMKKyAgICAgICAgLy8gdGhlIHNhbWUg
cHJvYmxlbS4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisgICAgICAgIGlmICh0cmlt
bWVkLmxlbmd0aCgpIDw9IGtNYXhFeGFjdERvdWJsZUludGVnZXJEZWNpbWFsRGlnaXRzKSB7Cisg
ICAgICAgICAgICBpbnQgcmVhZF9kaWdpdHM7CisgICAgICAgICAgICAvLyBUaGUgdHJpbW1lZCBp
bnB1dCBmaXRzIGludG8gYSBkb3VibGUuCisgICAgICAgICAgICAvLyBJZiB0aGUgMTBeZXhwb25l
bnQgKHJlc3AuIDEwXi1leHBvbmVudCkgZml0cyBpbnRvIGEgZG91YmxlIHRvbyB0aGVuIHdlCisg
ICAgICAgICAgICAvLyBjYW4gY29tcHV0ZSB0aGUgcmVzdWx0LWRvdWJsZSBzaW1wbHkgYnkgbXVs
dGlwbHlpbmcgKHJlc3AuIGRpdmlkaW5nKSB0aGUKKyAgICAgICAgICAgIC8vIHR3byBudW1iZXJz
LgorICAgICAgICAgICAgLy8gVGhpcyBpcyBwb3NzaWJsZSBiZWNhdXNlIElFRUUgZ3VhcmFudGVl
cyB0aGF0IGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMKKyAgICAgICAgICAgIC8vIHJldHVybiB0
aGUgYmVzdCBwb3NzaWJsZSBhcHByb3hpbWF0aW9uLgorICAgICAgICAgICAgaWYgKGV4cG9uZW50
IDwgMCAmJiAtZXhwb25lbnQgPCBrRXhhY3RQb3dlcnNPZlRlblNpemUpIHsKKyAgICAgICAgICAg
ICAgICAvLyAxMF4tZXhwb25lbnQgZml0cyBpbnRvIGEgZG91YmxlLgorICAgICAgICAgICAgICAg
ICpyZXN1bHQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KFJlYWRVaW50NjQodHJpbW1lZCwgJnJlYWRf
ZGlnaXRzKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHJlYWRfZGlnaXRzID09IHRyaW1tZWQu
bGVuZ3RoKCkpOworICAgICAgICAgICAgICAgICpyZXN1bHQgLz0gZXhhY3RfcG93ZXJzX29mX3Rl
blstZXhwb25lbnRdOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKDAgPD0gZXhwb25lbnQgJiYgZXhwb25lbnQgPCBrRXhhY3RQb3dl
cnNPZlRlblNpemUpIHsKKyAgICAgICAgICAgICAgICAvLyAxMF5leHBvbmVudCBmaXRzIGludG8g
YSBkb3VibGUuCisgICAgICAgICAgICAgICAgKnJlc3VsdCA9IHN0YXRpY19jYXN0PGRvdWJsZT4o
UmVhZFVpbnQ2NCh0cmltbWVkLCAmcmVhZF9kaWdpdHMpKTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQocmVhZF9kaWdpdHMgPT0gdHJpbW1lZC5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgKnJl
c3VsdCAqPSBleGFjdF9wb3dlcnNfb2ZfdGVuW2V4cG9uZW50XTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCByZW1haW5pbmdfZGln
aXRzID0KKyAgICAgICAgICAgIGtNYXhFeGFjdERvdWJsZUludGVnZXJEZWNpbWFsRGlnaXRzIC0g
dHJpbW1lZC5sZW5ndGgoKTsKKyAgICAgICAgICAgIGlmICgoMCA8PSBleHBvbmVudCkgJiYKKyAg
ICAgICAgICAgICAgICAoZXhwb25lbnQgLSByZW1haW5pbmdfZGlnaXRzIDwga0V4YWN0UG93ZXJz
T2ZUZW5TaXplKSkgeworICAgICAgICAgICAgICAgIC8vIFRoZSB0cmltbWVkIHN0cmluZyB3YXMg
c2hvcnQgYW5kIHdlIGNhbiBtdWx0aXBseSBpdCB3aXRoCisgICAgICAgICAgICAgICAgLy8gMTBe
cmVtYWluaW5nX2RpZ2l0cy4gQXMgYSByZXN1bHQgdGhlIHJlbWFpbmluZyBleHBvbmVudCBub3cg
Zml0cworICAgICAgICAgICAgICAgIC8vIGludG8gYSBkb3VibGUgdG9vLgorICAgICAgICAgICAg
ICAgICpyZXN1bHQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KFJlYWRVaW50NjQodHJpbW1lZCwgJnJl
YWRfZGlnaXRzKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHJlYWRfZGlnaXRzID09IHRyaW1t
ZWQubGVuZ3RoKCkpOworICAgICAgICAgICAgICAgICpyZXN1bHQgKj0gZXhhY3RfcG93ZXJzX29m
X3RlbltyZW1haW5pbmdfZGlnaXRzXTsKKyAgICAgICAgICAgICAgICAqcmVzdWx0ICo9IGV4YWN0
X3Bvd2Vyc19vZl90ZW5bZXhwb25lbnQgLSByZW1haW5pbmdfZGlnaXRzXTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIAorICAgIC8vIFJldHVybnMgMTBeZXhwb25lbnQg
YXMgYW4gZXhhY3QgRGl5RnAuCisgICAgLy8gVGhlIGdpdmVuIGV4cG9uZW50IG11c3QgYmUgaW4g
dGhlIHJhbmdlIFsxOyBrRGVjaW1hbEV4cG9uZW50RGlzdGFuY2VbLgorICAgIHN0YXRpYyBEaXlG
cCBBZGp1c3RtZW50UG93ZXJPZlRlbihpbnQgZXhwb25lbnQpIHsKKyAgICAgICAgQVNTRVJUKDAg
PCBleHBvbmVudCk7CisgICAgICAgIEFTU0VSVChleHBvbmVudCA8IFBvd2Vyc09mVGVuQ2FjaGU6
OmtEZWNpbWFsRXhwb25lbnREaXN0YW5jZSk7CisgICAgICAgIC8vIFNpbXBseSBoYXJkY29kZSB0
aGUgcmVtYWluaW5nIHBvd2VycyBmb3IgdGhlIGdpdmVuIGRlY2ltYWwgZXhwb25lbnQKKyAgICAg
ICAgLy8gZGlzdGFuY2UuCisgICAgICAgIEFTU0VSVChQb3dlcnNPZlRlbkNhY2hlOjprRGVjaW1h
bEV4cG9uZW50RGlzdGFuY2UgPT0gOCk7CisgICAgICAgIHN3aXRjaCAoZXhwb25lbnQpIHsKKyAg
ICAgICAgICAgIGNhc2UgMTogcmV0dXJuIERpeUZwKFVJTlQ2NF8yUEFSVF9DKDB4YTAwMDAwMDAs
IDAwMDAwMDAwKSwgLTYwKTsKKyAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIERpeUZwKFVJTlQ2
NF8yUEFSVF9DKDB4YzgwMDAwMDAsIDAwMDAwMDAwKSwgLTU3KTsKKyAgICAgICAgICAgIGNhc2Ug
MzogcmV0dXJuIERpeUZwKFVJTlQ2NF8yUEFSVF9DKDB4ZmEwMDAwMDAsIDAwMDAwMDAwKSwgLTU0
KTsKKyAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIERpeUZwKFVJTlQ2NF8yUEFSVF9DKDB4OWM0
MDAwMDAsIDAwMDAwMDAwKSwgLTUwKTsKKyAgICAgICAgICAgIGNhc2UgNTogcmV0dXJuIERpeUZw
KFVJTlQ2NF8yUEFSVF9DKDB4YzM1MDAwMDAsIDAwMDAwMDAwKSwgLTQ3KTsKKyAgICAgICAgICAg
IGNhc2UgNjogcmV0dXJuIERpeUZwKFVJTlQ2NF8yUEFSVF9DKDB4ZjQyNDAwMDAsIDAwMDAwMDAw
KSwgLTQ0KTsKKyAgICAgICAgICAgIGNhc2UgNzogcmV0dXJuIERpeUZwKFVJTlQ2NF8yUEFSVF9D
KDB4OTg5NjgwMDAsIDAwMDAwMDAwKSwgLTQwKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gRGl5RnAo
MCwgMCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgLy8gSWYgdGhlIGZ1bmN0
aW9uIHJldHVybnMgdHJ1ZSB0aGVuIHRoZSByZXN1bHQgaXMgdGhlIGNvcnJlY3QgZG91YmxlLgor
ICAgIC8vIE90aGVyd2lzZSBpdCBpcyBlaXRoZXIgdGhlIGNvcnJlY3QgZG91YmxlIG9yIHRoZSBk
b3VibGUgdGhhdCBpcyBqdXN0IGJlbG93CisgICAgLy8gdGhlIGNvcnJlY3QgZG91YmxlLgorICAg
IHN0YXRpYyBib29sIERpeUZwU3RydG9kKFZlY3Rvcjxjb25zdCBjaGFyPiBidWZmZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV4cG9uZW50LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRvdWJsZSogcmVzdWx0KSB7CisgICAgICAgIERpeUZwIGlucHV0OworICAgICAg
ICBpbnQgcmVtYWluaW5nX2RlY2ltYWxzOworICAgICAgICBSZWFkRGl5RnAoYnVmZmVyLCAmaW5w
dXQsICZyZW1haW5pbmdfZGVjaW1hbHMpOworICAgICAgICAvLyBTaW5jZSB3ZSBtYXkgaGF2ZSBk
cm9wcGVkIHNvbWUgZGlnaXRzIHRoZSBpbnB1dCBpcyBub3QgYWNjdXJhdGUuCisgICAgICAgIC8v
IElmIHJlbWFpbmluZ19kZWNpbWFscyBpcyBkaWZmZXJlbnQgdGhhbiAwIHRoYW4gdGhlIGVycm9y
IGlzIGF0IG1vc3QKKyAgICAgICAgLy8gLjUgdWxwICh1bml0IGluIHRoZSBsYXN0IHBsYWNlKS4K
KyAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBkZWFsIHdpdGggZnJhY3Rpb25zIGFuZCB0aGVy
ZWZvcmUga2VlcCBhIGNvbW1vbgorICAgICAgICAvLyBkZW5vbWluYXRvci4KKyAgICAgICAgY29u
c3QgaW50IGtEZW5vbWluYXRvckxvZyA9IDM7CisgICAgICAgIGNvbnN0IGludCBrRGVub21pbmF0
b3IgPSAxIDw8IGtEZW5vbWluYXRvckxvZzsKKyAgICAgICAgLy8gTW92ZSB0aGUgcmVtYWluaW5n
IGRlY2ltYWxzIGludG8gdGhlIGV4cG9uZW50LgorICAgICAgICBleHBvbmVudCArPSByZW1haW5p
bmdfZGVjaW1hbHM7CisgICAgICAgIGludCBlcnJvciA9IChyZW1haW5pbmdfZGVjaW1hbHMgPT0g
MCA/IDAgOiBrRGVub21pbmF0b3IgLyAyKTsKKyAgICAgICAgCisgICAgICAgIGludCBvbGRfZSA9
IGlucHV0LmUoKTsKKyAgICAgICAgaW5wdXQuTm9ybWFsaXplKCk7CisgICAgICAgIGVycm9yIDw8
PSBvbGRfZSAtIGlucHV0LmUoKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChleHBvbmVudCA8
PSBQb3dlcnNPZlRlbkNhY2hlOjprTWF4RGVjaW1hbEV4cG9uZW50KTsKKyAgICAgICAgaWYgKGV4
cG9uZW50IDwgUG93ZXJzT2ZUZW5DYWNoZTo6a01pbkRlY2ltYWxFeHBvbmVudCkgeworICAgICAg
ICAgICAgKnJlc3VsdCA9IDAuMDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgICAgIERpeUZwIGNhY2hlZF9wb3dlcjsKKyAgICAgICAgaW50IGNhY2hlZF9kZWNpbWFs
X2V4cG9uZW50OworICAgICAgICBQb3dlcnNPZlRlbkNhY2hlOjpHZXRDYWNoZWRQb3dlckZvckRl
Y2ltYWxFeHBvbmVudChleHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhY2hlZF9wb3dlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhY2hlZF9kZWNp
bWFsX2V4cG9uZW50KTsKKyAgICAgICAgCisgICAgICAgIGlmIChjYWNoZWRfZGVjaW1hbF9leHBv
bmVudCAhPSBleHBvbmVudCkgeworICAgICAgICAgICAgaW50IGFkanVzdG1lbnRfZXhwb25lbnQg
PSBleHBvbmVudCAtIGNhY2hlZF9kZWNpbWFsX2V4cG9uZW50OworICAgICAgICAgICAgRGl5RnAg
YWRqdXN0bWVudF9wb3dlciA9IEFkanVzdG1lbnRQb3dlck9mVGVuKGFkanVzdG1lbnRfZXhwb25l
bnQpOworICAgICAgICAgICAgaW5wdXQuTXVsdGlwbHkoYWRqdXN0bWVudF9wb3dlcik7CisgICAg
ICAgICAgICBpZiAoa01heFVpbnQ2NERlY2ltYWxEaWdpdHMgLSBidWZmZXIubGVuZ3RoKCkgPj0g
YWRqdXN0bWVudF9leHBvbmVudCkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBwcm9kdWN0IG9m
IGlucHV0IHdpdGggdGhlIGFkanVzdG1lbnQgcG93ZXIgZml0cyBpbnRvIGEgNjQgYml0CisgICAg
ICAgICAgICAgICAgLy8gaW50ZWdlci4KKyAgICAgICAgICAgICAgICBBU1NFUlQoRGl5RnA6OmtT
aWduaWZpY2FuZFNpemUgPT0gNjQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAvLyBUaGUgYWRqdXN0bWVudCBwb3dlciBpcyBleGFjdC4gVGhlcmUgaXMgaGVuY2Ugb25s
eSBhbiBlcnJvciBvZiAwLjUuCisgICAgICAgICAgICAgICAgZXJyb3IgKz0ga0Rlbm9taW5hdG9y
IC8gMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaW5wdXQu
TXVsdGlwbHkoY2FjaGVkX3Bvd2VyKTsKKyAgICAgICAgLy8gVGhlIGVycm9yIGludHJvZHVjZWQg
YnkgYSBtdWx0aXBsaWNhdGlvbiBvZiBhKmIgZXF1YWxzCisgICAgICAgIC8vICAgZXJyb3JfYSAr
IGVycm9yX2IgKyBlcnJvcl9hKmVycm9yX2IvMl42NCArIDAuNQorICAgICAgICAvLyBTdWJzdGl0
dXRpbmcgYSB3aXRoICdpbnB1dCcgYW5kIGIgd2l0aCAnY2FjaGVkX3Bvd2VyJyB3ZSBoYXZlCisg
ICAgICAgIC8vICAgZXJyb3JfYiA9IDAuNSAgKGFsbCBjYWNoZWQgcG93ZXJzIGhhdmUgYW4gZXJy
b3Igb2YgbGVzcyB0aGFuIDAuNSB1bHApLAorICAgICAgICAvLyAgIGVycm9yX2FiID0gMCBvciAx
IC8ga0Rlbm9taW5hdG9yID4gZXJyb3JfYSplcnJvcl9iLyAyXjY0CisgICAgICAgIGludCBlcnJv
cl9iID0ga0Rlbm9taW5hdG9yIC8gMjsKKyAgICAgICAgaW50IGVycm9yX2FiID0gKGVycm9yID09
IDAgPyAwIDogMSk7ICAvLyBXZSByb3VuZCB1cCB0byAxLgorICAgICAgICBpbnQgZml4ZWRfZXJy
b3IgPSBrRGVub21pbmF0b3IgLyAyOworICAgICAgICBlcnJvciArPSBlcnJvcl9iICsgZXJyb3Jf
YWIgKyBmaXhlZF9lcnJvcjsKKyAgICAgICAgCisgICAgICAgIG9sZF9lID0gaW5wdXQuZSgpOwor
ICAgICAgICBpbnB1dC5Ob3JtYWxpemUoKTsKKyAgICAgICAgZXJyb3IgPDw9IG9sZF9lIC0gaW5w
dXQuZSgpOworICAgICAgICAKKyAgICAgICAgLy8gU2VlIGlmIHRoZSBkb3VibGUncyBzaWduaWZp
Y2FuZCBjaGFuZ2VzIGlmIHdlIGFkZC9zdWJ0cmFjdCB0aGUgZXJyb3IuCisgICAgICAgIGludCBv
cmRlcl9vZl9tYWduaXR1ZGUgPSBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSArIGlucHV0LmUoKTsK
KyAgICAgICAgaW50IGVmZmVjdGl2ZV9zaWduaWZpY2FuZF9zaXplID0KKyAgICAgICAgRG91Ymxl
OjpTaWduaWZpY2FuZFNpemVGb3JPcmRlck9mTWFnbml0dWRlKG9yZGVyX29mX21hZ25pdHVkZSk7
CisgICAgICAgIGludCBwcmVjaXNpb25fZGlnaXRzX2NvdW50ID0KKyAgICAgICAgRGl5RnA6OmtT
aWduaWZpY2FuZFNpemUgLSBlZmZlY3RpdmVfc2lnbmlmaWNhbmRfc2l6ZTsKKyAgICAgICAgaWYg
KHByZWNpc2lvbl9kaWdpdHNfY291bnQgKyBrRGVub21pbmF0b3JMb2cgPj0gRGl5RnA6OmtTaWdu
aWZpY2FuZFNpemUpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgY2FuIG9ubHkgaGFwcGVuIGZvciB2
ZXJ5IHNtYWxsIGRlbm9ybWFscy4gSW4gdGhpcyBjYXNlIHRoZQorICAgICAgICAgICAgLy8gaGFs
Zi13YXkgbXVsdGlwbGllZCBieSB0aGUgZGVub21pbmF0b3IgZXhjZWVkcyB0aGUgcmFuZ2Ugb2Yg
YW4gdWludDY0LgorICAgICAgICAgICAgLy8gU2ltcGx5IHNoaWZ0IGV2ZXJ5dGhpbmcgdG8gdGhl
IHJpZ2h0LgorICAgICAgICAgICAgaW50IHNoaWZ0X2Ftb3VudCA9IChwcmVjaXNpb25fZGlnaXRz
X2NvdW50ICsga0Rlbm9taW5hdG9yTG9nKSAtCisgICAgICAgICAgICBEaXlGcDo6a1NpZ25pZmlj
YW5kU2l6ZSArIDE7CisgICAgICAgICAgICBpbnB1dC5zZXRfZihpbnB1dC5mKCkgPj4gc2hpZnRf
YW1vdW50KTsKKyAgICAgICAgICAgIGlucHV0LnNldF9lKGlucHV0LmUoKSArIHNoaWZ0X2Ftb3Vu
dCk7CisgICAgICAgICAgICAvLyBXZSBhZGQgMSBmb3IgdGhlIGxvc3QgcHJlY2lzaW9uIG9mIGVy
cm9yLCBhbmQga0Rlbm9taW5hdG9yIGZvcgorICAgICAgICAgICAgLy8gdGhlIGxvc3QgcHJlY2lz
aW9uIG9mIGlucHV0LmYoKS4KKyAgICAgICAgICAgIGVycm9yID0gKGVycm9yID4+IHNoaWZ0X2Ft
b3VudCkgKyAxICsga0Rlbm9taW5hdG9yOworICAgICAgICAgICAgcHJlY2lzaW9uX2RpZ2l0c19j
b3VudCAtPSBzaGlmdF9hbW91bnQ7CisgICAgICAgIH0KKyAgICAgICAgLy8gV2UgdXNlIHVpbnQ2
NF90cyBub3cuIFRoaXMgb25seSB3b3JrcyBpZiB0aGUgRGl5RnAgdXNlcyB1aW50NjRfdHMgdG9v
LgorICAgICAgICBBU1NFUlQoRGl5RnA6OmtTaWduaWZpY2FuZFNpemUgPT0gNjQpOworICAgICAg
ICBBU1NFUlQocHJlY2lzaW9uX2RpZ2l0c19jb3VudCA8IDY0KTsKKyAgICAgICAgdWludDY0X3Qg
b25lNjQgPSAxOworICAgICAgICB1aW50NjRfdCBwcmVjaXNpb25fYml0c19tYXNrID0gKG9uZTY0
IDw8IHByZWNpc2lvbl9kaWdpdHNfY291bnQpIC0gMTsKKyAgICAgICAgdWludDY0X3QgcHJlY2lz
aW9uX2JpdHMgPSBpbnB1dC5mKCkgJiBwcmVjaXNpb25fYml0c19tYXNrOworICAgICAgICB1aW50
NjRfdCBoYWxmX3dheSA9IG9uZTY0IDw8IChwcmVjaXNpb25fZGlnaXRzX2NvdW50IC0gMSk7Cisg
ICAgICAgIHByZWNpc2lvbl9iaXRzICo9IGtEZW5vbWluYXRvcjsKKyAgICAgICAgaGFsZl93YXkg
Kj0ga0Rlbm9taW5hdG9yOworICAgICAgICBEaXlGcCByb3VuZGVkX2lucHV0KGlucHV0LmYoKSA+
PiBwcmVjaXNpb25fZGlnaXRzX2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
cHV0LmUoKSArIHByZWNpc2lvbl9kaWdpdHNfY291bnQpOworICAgICAgICBpZiAocHJlY2lzaW9u
X2JpdHMgPj0gaGFsZl93YXkgKyBlcnJvcikgeworICAgICAgICAgICAgcm91bmRlZF9pbnB1dC5z
ZXRfZihyb3VuZGVkX2lucHV0LmYoKSArIDEpOworICAgICAgICB9CisgICAgICAgIC8vIElmIHRo
ZSBsYXN0X2JpdHMgYXJlIHRvbyBjbG9zZSB0byB0aGUgaGFsZi13YXkgY2FzZSB0aGFuIHdlIGFy
ZSB0b28KKyAgICAgICAgLy8gaW5hY2N1cmF0ZSBhbmQgcm91bmQgZG93bi4gSW4gdGhpcyBjYXNl
IHdlIHJldHVybiBmYWxzZSBzbyB0aGF0IHdlIGNhbgorICAgICAgICAvLyBmYWxsIGJhY2sgdG8g
YSBtb3JlIHByZWNpc2UgYWxnb3JpdGhtLgorICAgICAgICAKKyAgICAgICAgKnJlc3VsdCA9IERv
dWJsZShyb3VuZGVkX2lucHV0KS52YWx1ZSgpOworICAgICAgICBpZiAoaGFsZl93YXkgLSBlcnJv
ciA8IHByZWNpc2lvbl9iaXRzICYmIHByZWNpc2lvbl9iaXRzIDwgaGFsZl93YXkgKyBlcnJvcikg
eworICAgICAgICAgICAgLy8gVG9vIGltcHJlY2lzZS4gVGhlIGNhbGxlciB3aWxsIGhhdmUgdG8g
ZmFsbCBiYWNrIHRvIGEgc2xvd2VyIHZlcnNpb24uCisgICAgICAgICAgICAvLyBIb3dldmVyIHRo
ZSByZXR1cm5lZCBudW1iZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBlaXRoZXIgdGhlIGNvcnJlY3QK
KyAgICAgICAgICAgIC8vIGRvdWJsZSwgb3IgdGhlIG5leHQtbG93ZXIgZG91YmxlLgorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgLy8gUmV0dXJucyB0aGUg
Y29ycmVjdCBkb3VibGUgZm9yIHRoZSBidWZmZXIqMTBeZXhwb25lbnQuCisgICAgLy8gVGhlIHZh
cmlhYmxlIGd1ZXNzIHNob3VsZCBiZSBhIGNsb3NlIGd1ZXNzIHRoYXQgaXMgZWl0aGVyIHRoZSBj
b3JyZWN0IGRvdWJsZQorICAgIC8vIG9yIGl0cyBsb3dlciBuZWlnaGJvciAodGhlIG5lYXJlc3Qg
ZG91YmxlIGxlc3MgdGhhbiB0aGUgY29ycmVjdCBvbmUpLgorICAgIC8vIFByZWNvbmRpdGlvbnM6
CisgICAgLy8gICBidWZmZXIubGVuZ3RoKCkgKyBleHBvbmVudCA8PSBrTWF4RGVjaW1hbFBvd2Vy
ICsgMQorICAgIC8vICAgYnVmZmVyLmxlbmd0aCgpICsgZXhwb25lbnQgPiBrTWluRGVjaW1hbFBv
d2VyCisgICAgLy8gICBidWZmZXIubGVuZ3RoKCkgPD0ga01heERlY2ltYWxTaWduaWZpY2FudERp
Z2l0cworICAgIHN0YXRpYyBkb3VibGUgQmlnbnVtU3RydG9kKFZlY3Rvcjxjb25zdCBjaGFyPiBi
dWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV4cG9uZW50LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBndWVzcykgeworICAgICAgICBpZiAo
Z3Vlc3MgPT0gRG91YmxlOjpJbmZpbml0eSgpKSB7CisgICAgICAgICAgICByZXR1cm4gZ3Vlc3M7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIERpeUZwIHVwcGVyX2JvdW5kYXJ5ID0gRG91
YmxlKGd1ZXNzKS5VcHBlckJvdW5kYXJ5KCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoYnVm
ZmVyLmxlbmd0aCgpICsgZXhwb25lbnQgPD0ga01heERlY2ltYWxQb3dlciArIDEpOworICAgICAg
ICBBU1NFUlQoYnVmZmVyLmxlbmd0aCgpICsgZXhwb25lbnQgPiBrTWluRGVjaW1hbFBvd2VyKTsK
KyAgICAgICAgQVNTRVJUKGJ1ZmZlci5sZW5ndGgoKSA8PSBrTWF4U2lnbmlmaWNhbnREZWNpbWFs
RGlnaXRzKTsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIEJpZ251bSB3aWxsIGJlIGFi
bGUgdG8gaG9sZCBhbGwgb3VyIG51bWJlcnMuCisgICAgICAgIC8vIE91ciBCaWdudW0gaW1wbGVt
ZW50YXRpb24gaGFzIGEgc2VwYXJhdGUgZmllbGQgZm9yIGV4cG9uZW50cy4gU2hpZnRzIHdpbGwK
KyAgICAgICAgLy8gY29uc3VtZSBhdCBtb3N0IG9uZSBiaWdpdCAoPCA2NCBiaXRzKS4KKyAgICAg
ICAgLy8gbG4oMTApID09IDMuMzIxOS4uLgorICAgICAgICBBU1NFUlQoKChrTWF4RGVjaW1hbFBv
d2VyICsgMSkgKiAzMzMgLyAxMDApIDwgQmlnbnVtOjprTWF4U2lnbmlmaWNhbnRCaXRzKTsKKyAg
ICAgICAgQmlnbnVtIGlucHV0OworICAgICAgICBCaWdudW0gYm91bmRhcnk7CisgICAgICAgIGlu
cHV0LkFzc2lnbkRlY2ltYWxTdHJpbmcoYnVmZmVyKTsKKyAgICAgICAgYm91bmRhcnkuQXNzaWdu
VUludDY0KHVwcGVyX2JvdW5kYXJ5LmYoKSk7CisgICAgICAgIGlmIChleHBvbmVudCA+PSAwKSB7
CisgICAgICAgICAgICBpbnB1dC5NdWx0aXBseUJ5UG93ZXJPZlRlbihleHBvbmVudCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBib3VuZGFyeS5NdWx0aXBseUJ5UG93ZXJPZlRlbigt
ZXhwb25lbnQpOworICAgICAgICB9CisgICAgICAgIGlmICh1cHBlcl9ib3VuZGFyeS5lKCkgPiAw
KSB7CisgICAgICAgICAgICBib3VuZGFyeS5TaGlmdExlZnQodXBwZXJfYm91bmRhcnkuZSgpKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlucHV0LlNoaWZ0TGVmdCgtdXBwZXJfYm91
bmRhcnkuZSgpKTsKKyAgICAgICAgfQorICAgICAgICBpbnQgY29tcGFyaXNvbiA9IEJpZ251bTo6
Q29tcGFyZShpbnB1dCwgYm91bmRhcnkpOworICAgICAgICBpZiAoY29tcGFyaXNvbiA8IDApIHsK
KyAgICAgICAgICAgIHJldHVybiBndWVzczsKKyAgICAgICAgfSBlbHNlIGlmIChjb21wYXJpc29u
ID4gMCkgeworICAgICAgICAgICAgcmV0dXJuIERvdWJsZShndWVzcykuTmV4dERvdWJsZSgpOwor
ICAgICAgICB9IGVsc2UgaWYgKChEb3VibGUoZ3Vlc3MpLlNpZ25pZmljYW5kKCkgJiAxKSA9PSAw
KSB7CisgICAgICAgICAgICAvLyBSb3VuZCB0b3dhcmRzIGV2ZW4uCisgICAgICAgICAgICByZXR1
cm4gZ3Vlc3M7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gRG91YmxlKGd1
ZXNzKS5OZXh0RG91YmxlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgZG91
YmxlIFN0cnRvZChWZWN0b3I8Y29uc3QgY2hhcj4gYnVmZmVyLCBpbnQgZXhwb25lbnQpIHsKKyAg
ICAgICAgVmVjdG9yPGNvbnN0IGNoYXI+IGxlZnRfdHJpbW1lZCA9IFRyaW1MZWFkaW5nWmVyb3Mo
YnVmZmVyKTsKKyAgICAgICAgVmVjdG9yPGNvbnN0IGNoYXI+IHRyaW1tZWQgPSBUcmltVHJhaWxp
bmdaZXJvcyhsZWZ0X3RyaW1tZWQpOworICAgICAgICBleHBvbmVudCArPSBsZWZ0X3RyaW1tZWQu
bGVuZ3RoKCkgLSB0cmltbWVkLmxlbmd0aCgpOworICAgICAgICBpZiAodHJpbW1lZC5sZW5ndGgo
KSA9PSAwKSByZXR1cm4gMC4wOworICAgICAgICBpZiAodHJpbW1lZC5sZW5ndGgoKSA+IGtNYXhT
aWduaWZpY2FudERlY2ltYWxEaWdpdHMpIHsKKyAgICAgICAgICAgIGNoYXIgc2lnbmlmaWNhbnRf
YnVmZmVyW2tNYXhTaWduaWZpY2FudERlY2ltYWxEaWdpdHNdOworICAgICAgICAgICAgaW50IHNp
Z25pZmljYW50X2V4cG9uZW50OworICAgICAgICAgICAgVHJpbVRvTWF4U2lnbmlmaWNhbnREaWdp
dHModHJpbW1lZCwgZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaWduaWZpY2FudF9idWZmZXIsICZzaWduaWZpY2FudF9leHBvbmVudCk7CisgICAgICAg
ICAgICByZXR1cm4gU3RydG9kKFZlY3Rvcjxjb25zdCBjaGFyPihzaWduaWZpY2FudF9idWZmZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrTWF4U2lnbmlm
aWNhbnREZWNpbWFsRGlnaXRzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmlmaWNh
bnRfZXhwb25lbnQpOworICAgICAgICB9CisgICAgICAgIGlmIChleHBvbmVudCArIHRyaW1tZWQu
bGVuZ3RoKCkgLSAxID49IGtNYXhEZWNpbWFsUG93ZXIpIHsKKyAgICAgICAgICAgIHJldHVybiBE
b3VibGU6OkluZmluaXR5KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGV4cG9uZW50ICsgdHJp
bW1lZC5sZW5ndGgoKSA8PSBrTWluRGVjaW1hbFBvd2VyKSB7CisgICAgICAgICAgICByZXR1cm4g
MC4wOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBkb3VibGUgZ3Vlc3M7CisgICAgICAg
IGlmIChEb3VibGVTdHJ0b2QodHJpbW1lZCwgZXhwb25lbnQsICZndWVzcykgfHwKKyAgICAgICAg
ICAgIERpeUZwU3RydG9kKHRyaW1tZWQsIGV4cG9uZW50LCAmZ3Vlc3MpKSB7CisgICAgICAgICAg
ICByZXR1cm4gZ3Vlc3M7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEJpZ251bVN0cnRvZCh0
cmltbWVkLCBleHBvbmVudCwgZ3Vlc3MpOworICAgIH0KKyAgICAKK30gIC8vIG5hbWVzcGFjZSBk
b3VibGVfY29udmVyc2lvbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9k
dG9hL3N0cnRvZC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL3N0cnRvZC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjA5NzlmNDRkZWI5NTg1YTBkOWQ1OTg2MTAyODU3MzlhY2EyMTY5MzQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2Evc3RydG9kLmgKQEAg
LTAsMCArMSw0MSBAQAorLy8gQ29weXJpZ2h0IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8g
bWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAg
ICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisv
LyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisv
LyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWZuZGVmIERPVUJM
RV9DT05WRVJTSU9OX1NUUlRPRF9IXworI2RlZmluZSBET1VCTEVfQ09OVkVSU0lPTl9TVFJUT0Rf
SF8KKworI2luY2x1ZGUgInV0aWxzLmgiCisKK25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7
CisgICAgCisgICAgLy8gVGhlIGJ1ZmZlciBtdXN0IG9ubHkgY29udGFpbiBkaWdpdHMgaW4gdGhl
IHJhbmdlIFswLTldLiBJdCBtdXN0IG5vdAorICAgIC8vIGNvbnRhaW4gYSBkb3Qgb3IgYSBzaWdu
LiBJdCBtdXN0IG5vdCBzdGFydCB3aXRoICcwJywgYW5kIG11c3Qgbm90IGJlIGVtcHR5LgorICAg
IGRvdWJsZSBTdHJ0b2QoVmVjdG9yPGNvbnN0IGNoYXI+IGJ1ZmZlciwgaW50IGV4cG9uZW50KTsK
KyAgICAKK30gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbgorCisjZW5kaWYgIC8vIERP
VUJMRV9DT05WRVJTSU9OX1NUUlRPRF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9kdG9hL3V0aWxzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvdXRp
bHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5kMjMyMGJlZDc3ZjUzZDkyNWU1ZTZjMmE1NDQ2OTM5YjE2M2Y0MjQw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL3V0aWxz
LmgKQEAgLTAsMCArMSwyOTkgQEAKKy8vIENvcHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
Ly8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
Ky8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmbmRl
ZiBET1VCTEVfQ09OVkVSU0lPTl9VVElMU19IXworI2RlZmluZSBET1VCTEVfQ09OVkVSU0lPTl9V
VElMU19IXworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNp
Zm5kZWYgQVNTRVJUCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZGVmaW5lIEFTU0VSVChjb25kaXRp
b24pICAgICAgKGFzc2VydChjb25kaXRpb24pKQorI2RlZmluZSBVTklNUExFTUVOVEVEKCkgKGFi
b3J0KCkpCisjZGVmaW5lIFVOUkVBQ0hBQkxFKCkgICAoYWJvcnQoKSkKKyNlbmRpZgorCisvLyBE
b3VibGUgb3BlcmF0aW9ucyBkZXRlY3Rpb24gYmFzZWQgb24gdGFyZ2V0IGFyY2hpdGVjdHVyZS4K
Ky8vIExpbnV4IHVzZXMgYSA4MGJpdCB3aWRlIGZsb2F0aW5nIHBvaW50IHN0YWNrIG9uIHg4Ni4g
VGhpcyBpbmR1Y2VzIGRvdWJsZQorLy8gcm91bmRpbmcsIHdoaWNoIGluIHR1cm4gbGVhZHMgdG8g
d3JvbmcgcmVzdWx0cy4KKy8vIEFuIGVhc3kgd2F5IHRvIHRlc3QgaWYgdGhlIGZsb2F0aW5nLXBv
aW50IG9wZXJhdGlvbnMgYXJlIGNvcnJlY3QgaXMgdG8KKy8vIGV2YWx1YXRlOiA4OTI1NS4wLzFl
MjIuIElmIHRoZSBmbG9hdGluZy1wb2ludCBzdGFjayBpcyA2NCBiaXRzIHdpZGUgdGhlbgorLy8g
dGhlIHJlc3VsdCBpcyBlcXVhbCB0byA4OTI1NWUtMjIuCisvLyBUaGUgYmVzdCB3YXkgdG8gdGVz
dCB0aGlzLCBpcyB0byBjcmVhdGUgYSBkaXZpc2lvbi1mdW5jdGlvbiBhbmQgdG8gY29tcGFyZQor
Ly8gdGhlIG91dHB1dCBvZiB0aGUgZGl2aXNpb24gd2l0aCB0aGUgZXhwZWN0ZWQgcmVzdWx0LiAo
SW5saW5pbmcgbXVzdCBiZQorLy8gZGlzYWJsZWQuKQorLy8gT24gTGludXgseDg2IDg5MjU1ZS0y
MiAhPSBEaXZfZG91YmxlKDg5MjU1LjAvMWUyMikKKyNpZiBkZWZpbmVkKF9NX1g2NCkgfHwgZGVm
aW5lZChfX3g4Nl82NF9fKSB8fCBcCitkZWZpbmVkKF9fQVJNRUxfXykgfHwgXAorZGVmaW5lZChf
TUlQU19BUkNIX01JUFMzMlIyKQorI2RlZmluZSBET1VCTEVfQ09OVkVSU0lPTl9DT1JSRUNUX0RP
VUJMRV9PUEVSQVRJT05TIDEKKyNlbGlmIGRlZmluZWQoX01fSVg4NikgfHwgZGVmaW5lZChfX2kz
ODZfXykKKyNpZiBkZWZpbmVkKF9XSU4zMikKKy8vIFdpbmRvd3MgdXNlcyBhIDY0Yml0IHdpZGUg
ZmxvYXRpbmcgcG9pbnQgc3RhY2suCisjZGVmaW5lIERPVUJMRV9DT05WRVJTSU9OX0NPUlJFQ1Rf
RE9VQkxFX09QRVJBVElPTlMgMQorI2Vsc2UKKyN1bmRlZiBET1VCTEVfQ09OVkVSU0lPTl9DT1JS
RUNUX0RPVUJMRV9PUEVSQVRJT05TCisjZW5kaWYgIC8vIF9XSU4zMgorI2Vsc2UKKyNlcnJvciBU
YXJnZXQgYXJjaGl0ZWN0dXJlIHdhcyBub3QgZGV0ZWN0ZWQgYXMgc3VwcG9ydGVkIGJ5IERvdWJs
ZS1Db252ZXJzaW9uLgorI2VuZGlmCisKKworI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5l
ZChfX01JTkdXMzJfXykKKwordHlwZWRlZiBzaWduZWQgY2hhciBpbnQ4X3Q7Cit0eXBlZGVmIHVu
c2lnbmVkIGNoYXIgdWludDhfdDsKK3R5cGVkZWYgc2hvcnQgaW50MTZfdDsgIC8vIE5PTElOVAor
dHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1aW50MTZfdDsgIC8vIE5PTElOVAordHlwZWRlZiBpbnQg
aW50MzJfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQzMl90OwordHlwZWRlZiBfX2ludDY0
IGludDY0X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgdWludDY0X3Q7CisvLyBpbnRwdHJf
dCBhbmQgZnJpZW5kcyBhcmUgZGVmaW5lZCBpbiBjcnRkZWZzLmggdGhyb3VnaCBzdGRpby5oLgor
CisjZWxzZQorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNlbmRpZgorCisvLyBUaGUgZm9sbG93
aW5nIG1hY3JvIHdvcmtzIG9uIGJvdGggMzIgYW5kIDY0LWJpdCBwbGF0Zm9ybXMuCisvLyBVc2Fn
ZTogaW5zdGVhZCBvZiB3cml0aW5nIDB4MTIzNDU2Nzg5MDEyMzQ1NgorLy8gICAgICB3cml0ZSBV
SU5UNjRfMlBBUlRfQygweDEyMzQ1Njc4LDkwMTIzNDU2KTsKKyNkZWZpbmUgVUlOVDY0XzJQQVJU
X0MoYSwgYikgKCgoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGEpIDw8IDMyKSArIDB4IyNiIyN1KSkK
KworCisvLyBUaGUgZXhwcmVzc2lvbiBBUlJBWV9TSVpFKGEpIGlzIGEgY29tcGlsZS10aW1lIGNv
bnN0YW50IG9mIHR5cGUKKy8vIHNpemVfdCB3aGljaCByZXByZXNlbnRzIHRoZSBudW1iZXIgb2Yg
ZWxlbWVudHMgb2YgdGhlIGdpdmVuCisvLyBhcnJheS4gWW91IHNob3VsZCBvbmx5IHVzZSBBUlJB
WV9TSVpFIG9uIHN0YXRpY2FsbHkgYWxsb2NhdGVkCisvLyBhcnJheXMuCisjZGVmaW5lIEFSUkFZ
X1NJWkUoYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKygoc2l6ZW9mKGEp
IC8gc2l6ZW9mKCooYSkpKSAvICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3N0YXRpY19jYXN0
PHNpemVfdD4oIShzaXplb2YoYSkgJSBzaXplb2YoKihhKSkpKSkKKworLy8gQSBtYWNybyB0byBk
aXNhbGxvdyB0aGUgZXZpbCBjb3B5IGNvbnN0cnVjdG9yIGFuZCBvcGVyYXRvcj0gZnVuY3Rpb25z
CisvLyBUaGlzIHNob3VsZCBiZSB1c2VkIGluIHRoZSBwcml2YXRlOiBkZWNsYXJhdGlvbnMgZm9y
IGEgY2xhc3MKKyNkZWZpbmUgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFR5cGVOYW1lKSAgICAg
IFwKK1R5cGVOYW1lKGNvbnN0IFR5cGVOYW1lJik7ICAgICAgICAgICAgICAgICAgICBcCit2b2lk
IG9wZXJhdG9yPShjb25zdCBUeXBlTmFtZSYpCisKKy8vIEEgbWFjcm8gdG8gZGlzYWxsb3cgYWxs
IHRoZSBpbXBsaWNpdCBjb25zdHJ1Y3RvcnMsIG5hbWVseSB0aGUKKy8vIGRlZmF1bHQgY29uc3Ry
dWN0b3IsIGNvcHkgY29uc3RydWN0b3IgYW5kIG9wZXJhdG9yPSBmdW5jdGlvbnMuCisvLworLy8g
VGhpcyBzaG91bGQgYmUgdXNlZCBpbiB0aGUgcHJpdmF0ZTogZGVjbGFyYXRpb25zIGZvciBhIGNs
YXNzCisvLyB0aGF0IHdhbnRzIHRvIHByZXZlbnQgYW55b25lIGZyb20gaW5zdGFudGlhdGluZyBp
dC4gVGhpcyBpcworLy8gZXNwZWNpYWxseSB1c2VmdWwgZm9yIGNsYXNzZXMgY29udGFpbmluZyBv
bmx5IHN0YXRpYyBtZXRob2RzLgorI2RlZmluZSBESVNBTExPV19JTVBMSUNJVF9DT05TVFJVQ1RP
UlMoVHlwZU5hbWUpIFwKK1R5cGVOYW1lKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFR5cGVOYW1lKQorCituYW1lc3BhY2Ug
ZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIHN0YXRpYyBjb25zdCBpbnQga0NoYXJTaXpl
ID0gc2l6ZW9mKGNoYXIpOworICAgIAorICAgIC8vIFJldHVybnMgdGhlIG1heGltdW0gb2YgdGhl
IHR3byBwYXJhbWV0ZXJzLgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHN0YXRpYyBU
IE1heChUIGEsIFQgYikgeworICAgICAgICByZXR1cm4gYSA8IGIgPyBiIDogYTsKKyAgICB9Cisg
ICAgCisgICAgCisgICAgLy8gUmV0dXJucyB0aGUgbWluaW11bSBvZiB0aGUgdHdvIHBhcmFtZXRl
cnMuCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3RhdGljIFQgTWluKFQgYSwgVCBi
KSB7CisgICAgICAgIHJldHVybiBhIDwgYiA/IGEgOiBiOworICAgIH0KKyAgICAKKyAgICAKKyAg
ICBpbmxpbmUgaW50IFN0ckxlbmd0aChjb25zdCBjaGFyKiBzdHJpbmcpIHsKKyAgICAgICAgc2l6
ZV90IGxlbmd0aCA9IHN0cmxlbihzdHJpbmcpOworICAgICAgICBBU1NFUlQobGVuZ3RoID09IHN0
YXRpY19jYXN0PHNpemVfdD4oc3RhdGljX2Nhc3Q8aW50PihsZW5ndGgpKSk7CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxlbmd0aCk7CisgICAgfQorICAgIAorICAgIC8vIFRoaXMg
aXMgYSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgVjgncyBWZWN0b3IgY2xhc3MuCisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CisgICAgY2xhc3MgVmVjdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IFZlY3RvcigpIDogc3RhcnRfKE5VTEwpLCBsZW5ndGhfKDApIHt9CisgICAgICAgIFZlY3RvcihU
KiBkYXRhLCBpbnQgbGVuZ3RoKSA6IHN0YXJ0XyhkYXRhKSwgbGVuZ3RoXyhsZW5ndGgpIHsKKyAg
ICAgICAgICAgIEFTU0VSVChsZW5ndGggPT0gMCB8fCAobGVuZ3RoID4gMCAmJiBkYXRhICE9IE5V
TEwpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJucyBhIHZlY3RvciB1
c2luZyB0aGUgc2FtZSBiYWNraW5nIHN0b3JhZ2UgYXMgdGhpcyBvbmUsCisgICAgICAgIC8vIHNw
YW5uaW5nIGZyb20gYW5kIGluY2x1ZGluZyAnZnJvbScsIHRvIGJ1dCBub3QgaW5jbHVkaW5nICd0
bycuCisgICAgICAgIFZlY3RvcjxUPiBTdWJWZWN0b3IoaW50IGZyb20sIGludCB0bykgeworICAg
ICAgICAgICAgQVNTRVJUKHRvIDw9IGxlbmd0aF8pOworICAgICAgICAgICAgQVNTRVJUKGZyb20g
PCB0byk7CisgICAgICAgICAgICBBU1NFUlQoMCA8PSBmcm9tKTsKKyAgICAgICAgICAgIHJldHVy
biBWZWN0b3I8VD4oc3RhcnQoKSArIGZyb20sIHRvIC0gZnJvbSk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIC8vIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgdmVjdG9yLgorICAgICAg
ICBpbnQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbGVuZ3RoXzsgfQorICAgICAgICAKKyAgICAg
ICAgLy8gUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgdmVjdG9yIGlzIGVtcHR5LgorICAgICAg
ICBib29sIGlzX2VtcHR5KCkgY29uc3QgeyByZXR1cm4gbGVuZ3RoXyA9PSAwOyB9CisgICAgICAg
IAorICAgICAgICAvLyBSZXR1cm5zIHRoZSBwb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgZGF0
YSBpbiB0aGUgdmVjdG9yLgorICAgICAgICBUKiBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIHN0YXJ0
XzsgfQorICAgICAgICAKKyAgICAgICAgLy8gQWNjZXNzIGluZGl2aWR1YWwgdmVjdG9yIGVsZW1l
bnRzIC0gY2hlY2tzIGJvdW5kcyBpbiBkZWJ1ZyBtb2RlLgorICAgICAgICBUJiBvcGVyYXRvcltd
KGludCBpbmRleCkgY29uc3QgeworICAgICAgICAgICAgQVNTRVJUKDAgPD0gaW5kZXggJiYgaW5k
ZXggPCBsZW5ndGhfKTsKKyAgICAgICAgICAgIHJldHVybiBzdGFydF9baW5kZXhdOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBUJiBmaXJzdCgpIHsgcmV0dXJuIHN0YXJ0X1swXTsgfQor
ICAgICAgICAKKyAgICAgICAgVCYgbGFzdCgpIHsgcmV0dXJuIHN0YXJ0X1tsZW5ndGhfIC0gMV07
IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgVCogc3RhcnRfOworICAgICAgICBp
bnQgbGVuZ3RoXzsKKyAgICB9OworICAgIAorICAgIAorICAgIC8vIEhlbHBlciBjbGFzcyBmb3Ig
YnVpbGRpbmcgcmVzdWx0IHN0cmluZ3MgaW4gYSBjaGFyYWN0ZXIgYnVmZmVyLiBUaGUKKyAgICAv
LyBwdXJwb3NlIG9mIHRoZSBjbGFzcyBpcyB0byB1c2Ugc2FmZSBvcGVyYXRpb25zIHRoYXQgY2hl
Y2tzIHRoZQorICAgIC8vIGJ1ZmZlciBib3VuZHMgb24gYWxsIG9wZXJhdGlvbnMgaW4gZGVidWcg
bW9kZS4KKyAgICBjbGFzcyBTdHJpbmdCdWlsZGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFN0
cmluZ0J1aWxkZXIoY2hhciogYnVmZmVyLCBpbnQgc2l6ZSkKKyAgICAgICAgOiBidWZmZXJfKGJ1
ZmZlciwgc2l6ZSksIHBvc2l0aW9uXygwKSB7IH0KKyAgICAgICAgCisgICAgICAgIH5TdHJpbmdC
dWlsZGVyKCkgeyBpZiAoIWlzX2ZpbmFsaXplZCgpKSBGaW5hbGl6ZSgpOyB9CisgICAgICAgIAor
ICAgICAgICBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGJ1ZmZlcl8ubGVuZ3RoKCk7IH0KKyAg
ICAgICAgCisgICAgICAgIC8vIEdldCB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgYnVpbGRl
ci4KKyAgICAgICAgaW50IHBvc2l0aW9uKCkgY29uc3QgeworICAgICAgICAgICAgQVNTRVJUKCFp
c19maW5hbGl6ZWQoKSk7CisgICAgICAgICAgICByZXR1cm4gcG9zaXRpb25fOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAvLyBSZXNldCB0aGUgcG9zaXRpb24uCisgICAgICAgIHZvaWQg
UmVzZXQoKSB7IHBvc2l0aW9uXyA9IDA7IH0KKyAgICAgICAgCisgICAgICAgIC8vIEFkZCBhIHNp
bmdsZSBjaGFyYWN0ZXIgdG8gdGhlIGJ1aWxkZXIuIEl0IGlzIG5vdCBhbGxvd2VkIHRvIGFkZAor
ICAgICAgICAvLyAwLWNoYXJhY3RlcnM7IHVzZSB0aGUgRmluYWxpemUoKSBtZXRob2QgdG8gdGVy
bWluYXRlIHRoZSBzdHJpbmcKKyAgICAgICAgLy8gaW5zdGVhZC4KKyAgICAgICAgdm9pZCBBZGRD
aGFyYWN0ZXIoY2hhciBjKSB7CisgICAgICAgICAgICBBU1NFUlQoYyAhPSAnXDAnKTsKKyAgICAg
ICAgICAgIEFTU0VSVCghaXNfZmluYWxpemVkKCkgJiYgcG9zaXRpb25fIDwgYnVmZmVyXy5sZW5n
dGgoKSk7CisgICAgICAgICAgICBidWZmZXJfW3Bvc2l0aW9uXysrXSA9IGM7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIC8vIEFkZCBhbiBlbnRpcmUgc3RyaW5nIHRvIHRoZSBidWlsZGVy
LiBVc2VzIHN0cmxlbigpIGludGVybmFsbHkgdG8KKyAgICAgICAgLy8gY29tcHV0ZSB0aGUgbGVu
Z3RoIG9mIHRoZSBpbnB1dCBzdHJpbmcuCisgICAgICAgIHZvaWQgQWRkU3RyaW5nKGNvbnN0IGNo
YXIqIHMpIHsKKyAgICAgICAgICAgIEFkZFN1YnN0cmluZyhzLCBTdHJMZW5ndGgocykpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBBZGQgdGhlIGZpcnN0ICduJyBjaGFyYWN0ZXJz
IG9mIHRoZSBnaXZlbiBzdHJpbmcgJ3MnIHRvIHRoZQorICAgICAgICAvLyBidWlsZGVyLiBUaGUg
aW5wdXQgc3RyaW5nIG11c3QgaGF2ZSBlbm91Z2ggY2hhcmFjdGVycy4KKyAgICAgICAgdm9pZCBB
ZGRTdWJzdHJpbmcoY29uc3QgY2hhciogcywgaW50IG4pIHsKKyAgICAgICAgICAgIEFTU0VSVCgh
aXNfZmluYWxpemVkKCkgJiYgcG9zaXRpb25fICsgbiA8IGJ1ZmZlcl8ubGVuZ3RoKCkpOworICAg
ICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHNpemVfdD4obikgPD0gc3RybGVuKHMpKTsKKyAg
ICAgICAgICAgIG1lbWNweSgmYnVmZmVyX1twb3NpdGlvbl9dLCBzLCBuICoga0NoYXJTaXplKTsK
KyAgICAgICAgICAgIHBvc2l0aW9uXyArPSBuOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICAKKyAgICAgICAgLy8gQWRkIGNoYXJhY3RlciBwYWRkaW5nIHRvIHRoZSBidWlsZGVyLiBJZiBj
b3VudCBpcyBub24tcG9zaXRpdmUsCisgICAgICAgIC8vIG5vdGhpbmcgaXMgYWRkZWQgdG8gdGhl
IGJ1aWxkZXIuCisgICAgICAgIHZvaWQgQWRkUGFkZGluZyhjaGFyIGMsIGludCBjb3VudCkgewor
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgQWRkQ2hhcmFjdGVyKGMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICAvLyBGaW5hbGl6ZSB0aGUgc3RyaW5nIGJ5IDAtdGVybWluYXRpbmcgaXQgYW5k
IHJldHVybmluZyB0aGUgYnVmZmVyLgorICAgICAgICBjaGFyKiBGaW5hbGl6ZSgpIHsKKyAgICAg
ICAgICAgIEFTU0VSVCghaXNfZmluYWxpemVkKCkgJiYgcG9zaXRpb25fIDwgYnVmZmVyXy5sZW5n
dGgoKSk7CisgICAgICAgICAgICBidWZmZXJfW3Bvc2l0aW9uX10gPSAnXDAnOworICAgICAgICAg
ICAgLy8gTWFrZSBzdXJlIG5vYm9keSBtYW5hZ2VkIHRvIGFkZCBhIDAtY2hhcmFjdGVyIHRvIHRo
ZQorICAgICAgICAgICAgLy8gYnVmZmVyIHdoaWxlIGJ1aWxkaW5nIHRoZSBzdHJpbmcuCisgICAg
ICAgICAgICBBU1NFUlQoc3RybGVuKGJ1ZmZlcl8uc3RhcnQoKSkgPT0gc3RhdGljX2Nhc3Q8c2l6
ZV90Pihwb3NpdGlvbl8pKTsKKyAgICAgICAgICAgIHBvc2l0aW9uXyA9IC0xOworICAgICAgICAg
ICAgQVNTRVJUKGlzX2ZpbmFsaXplZCgpKTsKKyAgICAgICAgICAgIHJldHVybiBidWZmZXJfLnN0
YXJ0KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgVmVjdG9y
PGNoYXI+IGJ1ZmZlcl87CisgICAgICAgIGludCBwb3NpdGlvbl87CisgICAgICAgIAorICAgICAg
ICBib29sIGlzX2ZpbmFsaXplZCgpIGNvbnN0IHsgcmV0dXJuIHBvc2l0aW9uXyA8IDA7IH0KKyAg
ICAgICAgCisgICAgICAgIERJU0FMTE9XX0lNUExJQ0lUX0NPTlNUUlVDVE9SUyhTdHJpbmdCdWls
ZGVyKTsKKyAgICB9OworICAgIAorICAgIC8vIFRoZSB0eXBlLWJhc2VkIGFsaWFzaW5nIHJ1bGUg
YWxsb3dzIHRoZSBjb21waWxlciB0byBhc3N1bWUgdGhhdCBwb2ludGVycyBvZgorICAgIC8vIGRp
ZmZlcmVudCB0eXBlcyAoZm9yIHNvbWUgZGVmaW5pdGlvbiBvZiBkaWZmZXJlbnQpIG5ldmVyIGFs
aWFzIGVhY2ggb3RoZXIuCisgICAgLy8gVGh1cyB0aGUgZm9sbG93aW5nIGNvZGUgZG9lcyBub3Qg
d29yazoKKyAgICAvLworICAgIC8vIGZsb2F0IGYgPSBmb28oKTsKKyAgICAvLyBpbnQgZmJpdHMg
PSAqKGludCopKCZmKTsKKyAgICAvLworICAgIC8vIFRoZSBjb21waWxlciAna25vd3MnIHRoYXQg
dGhlIGludCBwb2ludGVyIGNhbid0IHJlZmVyIHRvIGYgc2luY2UgdGhlIHR5cGVzCisgICAgLy8g
ZG9uJ3QgbWF0Y2gsIHNvIHRoZSBjb21waWxlciBtYXkgY2FjaGUgZiBpbiBhIHJlZ2lzdGVyLCBs
ZWF2aW5nIHJhbmRvbSBkYXRhCisgICAgLy8gaW4gZmJpdHMuICBVc2luZyBDKysgc3R5bGUgY2Fz
dHMgbWFrZXMgbm8gZGlmZmVyZW5jZSwgaG93ZXZlciBhIHBvaW50ZXIgdG8KKyAgICAvLyBjaGFy
IGRhdGEgaXMgYXNzdW1lZCB0byBhbGlhcyBhbnkgb3RoZXIgcG9pbnRlci4gIFRoaXMgaXMgdGhl
ICdtZW1jcHkKKyAgICAvLyBleGNlcHRpb24nLgorICAgIC8vCisgICAgLy8gQml0X2Nhc3QgdXNl
cyB0aGUgbWVtY3B5IGV4Y2VwdGlvbiB0byBtb3ZlIHRoZSBiaXRzIGZyb20gYSB2YXJpYWJsZSBv
ZiBvbmUKKyAgICAvLyB0eXBlIG9mIGEgdmFyaWFibGUgb2YgYW5vdGhlciB0eXBlLiAgT2YgY291
cnNlIHRoZSBlbmQgcmVzdWx0IGlzIGxpa2VseSB0bworICAgIC8vIGJlIGltcGxlbWVudGF0aW9u
IGRlcGVuZGVudC4gIE1vc3QgY29tcGlsZXJzIChnY2MtNC4yIGFuZCBNU1ZDIDIwMDUpCisgICAg
Ly8gd2lsbCBjb21wbGV0ZWx5IG9wdGltaXplIEJpdENhc3QgYXdheS4KKyAgICAvLworICAgIC8v
IFRoZXJlIGlzIGFuIGFkZGl0aW9uYWwgdXNlIGZvciBCaXRDYXN0LgorICAgIC8vIFJlY2VudCBn
Y2NzIHdpbGwgd2FybiB3aGVuIHRoZXkgc2VlIGNhc3RzIHRoYXQgbWF5IHJlc3VsdCBpbiBicmVh
a2FnZSBkdWUgdG8KKyAgICAvLyB0aGUgdHlwZS1iYXNlZCBhbGlhc2luZyBydWxlLiAgSWYgeW91
IGhhdmUgY2hlY2tlZCB0aGF0IHRoZXJlIGlzIG5vIGJyZWFrYWdlCisgICAgLy8geW91IGNhbiB1
c2UgQml0Q2FzdCB0byBjYXN0IG9uZSBwb2ludGVyIHR5cGUgdG8gYW5vdGhlci4gIFRoaXMgY29u
ZnVzZXMgZ2NjCisgICAgLy8gZW5vdWdoIHRoYXQgaXQgY2FuIG5vIGxvbmdlciBzZWUgdGhhdCB5
b3UgaGF2ZSBjYXN0IG9uZSBwb2ludGVyIHR5cGUgdG8KKyAgICAvLyBhbm90aGVyIHRodXMgYXZv
aWRpbmcgdGhlIHdhcm5pbmcuCisgICAgdGVtcGxhdGUgPGNsYXNzIERlc3QsIGNsYXNzIFNvdXJj
ZT4KKyAgICBpbmxpbmUgRGVzdCBCaXRDYXN0KGNvbnN0IFNvdXJjZSYgc291cmNlKSB7CisgICAg
ICAgIC8vIENvbXBpbGUgdGltZSBhc3NlcnRpb246IHNpemVvZihEZXN0KSA9PSBzaXplb2YoU291
cmNlKQorICAgICAgICAvLyBBIGNvbXBpbGUgZXJyb3IgaGVyZSBtZWFucyB5b3VyIERlc3QgYW5k
IFNvdXJjZSBoYXZlIGRpZmZlcmVudCBzaXplcy4KKyAgICAgICAgdHlwZWRlZiBjaGFyIFZlcmlm
eVNpemVzQXJlRXF1YWxbc2l6ZW9mKERlc3QpID09IHNpemVvZihTb3VyY2UpID8gMSA6IC0xXTsK
KyAgICAgICAgCisgICAgICAgIERlc3QgZGVzdDsKKyAgICAgICAgbWVtY3B5KCZkZXN0LCAmc291
cmNlLCBzaXplb2YoZGVzdCkpOworICAgICAgICByZXR1cm4gZGVzdDsKKyAgICB9CisgICAgCisg
ICAgdGVtcGxhdGUgPGNsYXNzIERlc3QsIGNsYXNzIFNvdXJjZT4KKyAgICBpbmxpbmUgRGVzdCBC
aXRDYXN0KFNvdXJjZSogc291cmNlKSB7CisgICAgICAgIHJldHVybiBCaXRDYXN0PERlc3Q+KHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihzb3VyY2UpKTsKKyAgICB9CisgICAgCit9ICAvLyBu
YW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KKworI2VuZGlmICAvLyBET1VCTEVfQ09OVkVSU0lP
Tl9VVElMU19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi93dGYucHJp
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi93dGYucHJpCmluZGV4IDVlNDhmOWE1MDFkYzM5
ZTFmNWFjNjI4Yjk1MTM5OWU2ODZiMzU0NzAuLjEzYTgyOTk0NTRjNWUzNDlkYzY2MzU3YzZkOTdj
ZDgyMGU0OWZmNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvd3RmLnBy
aQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3d0Zi5wcmkKQEAgLTcsNiArNywxNCBA
QCBTT1VSQ0VTICs9IFwKICAgICB3dGYvQ3VycmVudFRpbWUuY3BwIFwKICAgICB3dGYvRGF0ZU1h
dGguY3BwIFwKICAgICB3dGYvZHRvYS5jcHAgXAorICAgIHd0Zi9kdG9hL2JpZ251bS1kdG9hLmNj
IFwKKyAgICB3dGYvZHRvYS9iaWdudW0uY2MgXAorICAgIHd0Zi9kdG9hL2NhY2hlZC1wb3dlcnMu
Y2MgXAorICAgIHd0Zi9kdG9hL2RpeS1mcC5jYyBcCisgICAgd3RmL2R0b2EvZG91YmxlLWNvbnZl
cnNpb24uY2MgXAorICAgIHd0Zi9kdG9hL2Zhc3QtZHRvYS5jYyBcCisgICAgd3RmL2R0b2EvZml4
ZWQtZHRvYS5jYyBcCisgICAgd3RmL2R0b2Evc3RydG9kLmNjIFwKICAgICB3dGYvRGVjaW1hbE51
bWJlci5jcHAgXAogICAgIHd0Zi9GYXN0TWFsbG9jLmNwcCBcCiAgICAgd3RmL2dvYmplY3QvR093
blB0ci5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGE4MjhjZWMwMDMyMzE3NDcxYTdhOGIxODcxZTUzYmUx
YzVmYjE2M2YuLmFjN2QzYzQ0NjE3NjUwNjE0ZDRjMDYxY2Y3NzhhMDlhM2I2NzE4OGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxMS0wOC0xNyAgTWFyayBIYWhuZW5iZXJnICA8bWhh
aG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIEluY29ycG9yYXRlIG5ld2VyLCBmYXN0ZXIg
ZHRvYSBsaWJyYXJ5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02NjM0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAgICBBZGRlZCBuZXcgZHRvYSBsaWJyYXJ5IGF0IGh0
dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9kb3VibGUtY29udmVyc2lvbi8uCisgICAgICAgIFJlcGxh
Y2VkIG9sZCBjYWxsIHRvIGR0b2EuICBUaGUgbmV3IGxpYnJhcnkgaXMgbXVjaCBmYXN0ZXIgdGhh
biB0aGUgb2xkIG9uZS4KKyAgICAgICAgV2Ugc3RpbGwgdXNlIHRoZSBvbGQgc3RydG9kLCBidXQg
d2UgY2FuIHBoYXNlIHRoYXQgb3V0IGV2ZW50dWFsbHkgYXMgd2VsbC4KKworICAgICAgICAqIEZv
cndhcmRpbmdIZWFkZXJzL3d0Zi9EZWNpbWFsTnVtYmVyLmg6IFJlbW92ZWQuCisgICAgICAgICog
Y3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZvcm1hdE51bWJl
cik6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpzZXJpYWxpemVGb3JOdW1iZXJUeXBlKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yVmFsdWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhc2ljVmFs
dWU6OndyaXRlSlNPTik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnNlcmlhbGl6ZWQpOgorCiAyMDExLTA4LTE2ICBKb3Nl
cGggUGVjb3Jhcm8gIDxqb2VwZWNrQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBD
aHJvbWl1bSBXaW5kb3dzIGJ1aWxkIGZpeCBhZnRlciByOTMxNDAuIFRha2UgNC4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9EZWNpbWFsTnVtYmVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvRGVjaW1hbE51bWJlci5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzMxNzRkNThhY2Y3ZDA3YzY0NWFlZThjMzY2
ODEzYWIzMTQyMzlmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9EZWNpbWFsTnVtYmVyLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSNpZm5kZWYgV2ViQ29yZV9GV0RfRGVjaW1h
bE51bWJlcl9oCi0jZGVmaW5lIFdlYkNvcmVfRldEX0RlY2ltYWxOdW1iZXJfaAotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0RlY2ltYWxOdW1iZXIuaD4KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAKaW5kZXggYmFkMmUzY2QzMGNlZjQ3YTFmZDJhOGE0Mjgw
MDkyY2M3ZGY0MTEyYS4uNjhiMGMxYzdlYTRjYTY2MmIyZDk3M2U0NzY2M2RiYWFlMzE0NmZlMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCkBAIC0zNiw4ICszNiw5
IEBACiAjaW5jbHVkZSAiUmVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVk
ZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KLSNpbmNsdWRlIDx3dGYvRGVjaW1hbE51bWJlci5oPgogI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvZHRvYS5oPgorI2luY2x1
ZGUgPHd0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQnVmZmVyLmg+CiAKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCkBAIC02MDksMTMg
KzYxMCw4IEBAIGludCBDU1NQcmltaXRpdmVWYWx1ZTo6Z2V0SWRlbnQoKSBjb25zdAogCiBzdGF0
aWMgU3RyaW5nIGZvcm1hdE51bWJlcihkb3VibGUgbnVtYmVyKQogewotICAgIERlY2ltYWxOdW1i
ZXIgZGVjaW1hbChudW1iZXIpOwotICAgIAotICAgIFN0cmluZ0J1ZmZlciBidWZmZXIoZGVjaW1h
bC5idWZmZXJMZW5ndGhGb3JTdHJpbmdEZWNpbWFsKCkpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9
IGRlY2ltYWwudG9TdHJpbmdEZWNpbWFsKGJ1ZmZlci5jaGFyYWN0ZXJzKCksIGJ1ZmZlci5sZW5n
dGgoKSk7Ci0gICAgQVNTRVJUX1VOVVNFRChsZW5ndGgsIGxlbmd0aCA9PSBidWZmZXIubGVuZ3Ro
KCkpOwotCi0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQoYnVmZmVyKTsKKyAgICBOdW1iZXJUb1N0
cmluZ0J1ZmZlciBidWZmZXI7CisgICAgcmV0dXJuIFN0cmluZyhudW1iZXJUb1N0cmluZyhudW1i
ZXIsIGJ1ZmZlcikpOwogfQogCiBTdHJpbmcgQ1NTUHJpbWl0aXZlVmFsdWU6OmNzc1RleHQoKSBj
b25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklk
aW9tcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNw
cAppbmRleCAwNThiYjkzMzljZmZmNWQxODNlNDlmN2QyNTg4MjU4NzMwMjBjYTEyLi4wMzYyMjFi
MjFiMTZmOGY1MmFlMjU3MmZiZDM0NjA5ODk2YjdhYTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcApAQCAtNjMsOCArNjMsNyBAQCBTdHJp
bmcgc2VyaWFsaXplRm9yTnVtYmVyVHlwZShkb3VibGUgbnVtYmVyKQogICAgIC8vIEFjY29yZGlu
ZyB0byBIVE1MNSwgInRoZSBiZXN0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBudW1iZXIgbiBhcyBh
IGZsb2F0aW5nCiAgICAgLy8gcG9pbnQgbnVtYmVyIiBpcyBhIHN0cmluZyBwcm9kdWNlZCBieSBh
cHBseWluZyBUb1N0cmluZygpIHRvIG4uCiAgICAgTnVtYmVyVG9TdHJpbmdCdWZmZXIgYnVmZmVy
OwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IG51bWJlclRvU3RyaW5nKG51bWJlciwgYnVmZmVyKTsK
LSAgICByZXR1cm4gU3RyaW5nKGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICByZXR1cm4gU3RyaW5nKG51
bWJlclRvU3RyaW5nKG51bWJlciwgYnVmZmVyKSk7CiB9CiAKIGJvb2wgcGFyc2VUb0RvdWJsZUZv
ck51bWJlclR5cGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGRvdWJsZSogcmVzdWx0KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcAppbmRleCA5MmJhYmQ2N2U5
OGQ0YWM1OTBjMzU1MWJhNGFmODZhZjk5NzQ4YmY2Li42YTRkYTkzYTgxZjg3M2EyYjI4ZGY2ZjA0
ZWIyZTBiNzA2MGViOTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yVmFsdWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
VmFsdWVzLmNwcApAQCAtMzMsNyArMzMsNyBAQAogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIAot
I2luY2x1ZGUgPHd0Zi9EZWNpbWFsTnVtYmVyLmg+CisjaW5jbHVkZSA8d3RmL2R0b2EuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02MjYsMjMgKzYyNiwxMSBAQCB2b2lkIEluc3BlY3Rv
ckJhc2ljVmFsdWU6OndyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0CiAgICAg
ICAgICAgICBvdXRwdXQtPmFwcGVuZChmYWxzZVN0cmluZywgNSk7CiAgICAgfSBlbHNlIGlmICh0
eXBlKCkgPT0gVHlwZU51bWJlcikgewogICAgICAgICBOdW1iZXJUb1N0cmluZ0J1ZmZlciBidWZm
ZXI7Ci0gICAgICAgIGlmICghaXNmaW5pdGUobV9kb3VibGVWYWx1ZSkpIHsKLSAgICAgICAgICAg
IG91dHB1dC0+YXBwZW5kKG51bGxTdHJpbmcsIDQpOwotICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBjb25zdCBjaGFyKiBkb3VibGVTdHJpbmcgPSBudW1iZXJUb1N0cmluZyhtX2RvdWJsZVZh
bHVlLCBidWZmZXIpOworICAgICAgICB3aGlsZSAoKmRvdWJsZVN0cmluZykgeworICAgICAgICAg
ICAgb3V0cHV0LT5hcHBlbmQoVUNoYXIoKmRvdWJsZVN0cmluZykpOworICAgICAgICAgICAgZG91
YmxlU3RyaW5nKys7CiAgICAgICAgIH0KLSAgICAgICAgRGVjaW1hbE51bWJlciBkZWNpbWFsID0g
bV9kb3VibGVWYWx1ZTsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKLSAgICAgICAgaWYg
KGRlY2ltYWwuYnVmZmVyTGVuZ3RoRm9yU3RyaW5nRGVjaW1hbCgpID4gV1RGOjpOdW1iZXJUb1N0
cmluZ0J1ZmZlckxlbmd0aCkgewotICAgICAgICAgICAgLy8gTm90IGVub3VnaCByb29tIGZvciBk
ZWNpbWFsLiBVc2UgZXhwb25lbnRpYWwgZm9ybWF0LgotICAgICAgICAgICAgaWYgKGRlY2ltYWwu
YnVmZmVyTGVuZ3RoRm9yU3RyaW5nRXhwb25lbnRpYWwoKSA+IFdURjo6TnVtYmVyVG9TdHJpbmdC
dWZmZXJMZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAvLyBGYWxsYmFjayBmb3IgYW4gYWJub3Jt
YWwgY2FzZSBpZiBpdCdzIHRvbyBsaXR0bGUgZXZlbiBmb3IgZXhwb25lbnRpYWwuCi0gICAgICAg
ICAgICAgICAgb3V0cHV0LT5hcHBlbmQoIk5hTiIsIDMpOwotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxlbmd0aCA9IGRlY2ltYWwudG9TdHJpbmdF
eHBvbmVudGlhbChidWZmZXIsIFdURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgpOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIGxlbmd0aCA9IGRlY2ltYWwudG9TdHJpbmdEZWNpbWFs
KGJ1ZmZlciwgV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCk7Ci0gICAgICAgIG91dHB1
dC0+YXBwZW5kKGJ1ZmZlciwgbGVuZ3RoKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAppbmRleCA0OGY3NTIwMzAxNmJmN2Y1MDZjODE4ZTRj
NDFhODczZGZmM2NlYjhiLi41ZWNkYzBlZTlhZmE1ZTE1MmMxMjFkZDc2N2NhMzNjZjgwNWQwZTE2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCkBAIC0yOCw5
ICsyOCwxMCBAQAogCiAjaW5jbHVkZSAiSGFzaFRvb2xzLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvRGVjaW1hbE51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9I
ZXhOdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9k
dG9hLmg+CisjaW5jbHVkZSA8d3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC0y
MTAsOCArMjExLDExIEBAIFN0cmluZyBDb2xvcjo6c2VyaWFsaXplZCgpIGNvbnN0CiAgICAgICAg
IHJlc3VsdC5hcHBlbmQoJzAnKTsKICAgICBlbHNlIHsKICAgICAgICAgTnVtYmVyVG9TdHJpbmdC
dWZmZXIgYnVmZmVyOwotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBEZWNpbWFsTnVtYmVyKGFs
cGhhKCkgLyAyNTUuMCkudG9TdHJpbmdEZWNpbWFsKGJ1ZmZlciwgV1RGOjpOdW1iZXJUb1N0cmlu
Z0J1ZmZlckxlbmd0aCk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyLCBsZW5ndGgpOwor
ICAgICAgICBjb25zdCBjaGFyICpkb3VibGVTdHJpbmcgPSBudW1iZXJUb1N0cmluZyhhbHBoYSgp
IC8gMjU1LjAsIGJ1ZmZlcik7CisgICAgICAgIHdoaWxlICgqZG91YmxlU3RyaW5nKSB7CisgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKFVDaGFyKCpkb3VibGVTdHJpbmcpKTsKKyAgICAgICAgICAg
IGRvdWJsZVN0cmluZysrOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmVzdWx0LmFwcGVuZCgn
KScpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104211</attachid>
            <date>2011-08-17 12:18:05 -0700</date>
            <delta_ts>2011-08-24 14:10:24 -0700</delta_ts>
            <desc>Fixing build errors</desc>
            <filename>bug-66346-20110817121807.patch</filename>
            <type>text/plain</type>
            <size>351726</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTMxNjYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDMy
ZDIwZTMwYTI0YWRlZDI1NmRhMmE2MjVlNDFhM2IwOWRkNmE4MGEuLjZjMzQxNDBiMTMzMTMxM2Y3
ZTliNDdmNGI5YTI5ODhkMjM0ZTI4MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDExOCBAQAorMjAxMS0wOC0xNyAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBw
bGUuY29tPgorCisgICAgICAgIEluY29ycG9yYXRlIG5ld2VyLCBmYXN0ZXIgZHRvYSBsaWJyYXJ5
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM0Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIG5l
dyBkdG9hIGxpYnJhcnkgYXQgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2RvdWJsZS1jb252ZXJz
aW9uLy4KKyAgICAgICAgUmVwbGFjZWQgb2xkIGNhbGwgdG8gZHRvYS4gIFRoZSBuZXcgbGlicmFy
eSBpcyBtdWNoIGZhc3RlciB0aGFuIHRoZSBvbGQgb25lLgorICAgICAgICBXZSBzdGlsbCB1c2Ug
dGhlIG9sZCBzdHJ0b2QsIGJ1dCB3ZSBjYW4gcGhhc2UgdGhhdCBvdXQgZXZlbnR1YWxseSBhcyB3
ZWxsLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS5leHA6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwOgorICAg
ICAgICAoSlNDOjppbml0aWFsaXplVGhyZWFkaW5nT25jZSk6CisgICAgICAgICogcnVudGltZS9O
dW1iZXJQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1bmNUb0V4cG9u
ZW50aWFsKToKKyAgICAgICAgKEpTQzo6bnVtYmVyUHJvdG9GdW5jVG9GaXhlZCk6CisgICAgICAg
IChKU0M6Om51bWJlclByb3RvRnVuY1RvUHJlY2lzaW9uKToKKyAgICAgICAgKiBydW50aW1lL1VT
dHJpbmcuY3BwOgorICAgICAgICAoSlNDOjpVU3RyaW5nOjpudW1iZXIpOgorICAgICAgICAqIHd0
Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvRGVjaW1hbE51bWJlci5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogd3RmL0RlY2ltYWxOdW1iZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB3
dGYvZHRvYS5jcHA6CisgICAgICAgIChXVEY6Om51bWJlclRvU3RyaW5nKToKKyAgICAgICAgKiB3
dGYvZHRvYS5oOgorICAgICAgICAqIHd0Zi9kdG9hL0NPUFlJTkc6IEFkZGVkLgorICAgICAgICAq
IHd0Zi9kdG9hL0xJQ0VOU0U6IEFkZGVkLgorICAgICAgICAqIHd0Zi9kdG9hL1JFQURNRTogQWRk
ZWQuCisgICAgICAgICogd3RmL2R0b2EvYmlnbnVtLWR0b2EuY2M6IEFkZGVkLgorICAgICAgICAq
IHd0Zi9kdG9hL2JpZ251bS1kdG9hLmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9kdG9hL2JpZ251
bS5jYzogQWRkZWQuCisgICAgICAgICogd3RmL2R0b2EvYmlnbnVtLmg6IEFkZGVkLgorICAgICAg
ICAoZG91YmxlX2NvbnZlcnNpb246OkJpZ251bTo6VGltZXMxMCk6CisgICAgICAgIChkb3VibGVf
Y29udmVyc2lvbjo6QmlnbnVtOjpFcXVhbCk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6
QmlnbnVtOjpMZXNzRXF1YWwpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OkJpZ251bTo6
TGVzcyk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6QmlnbnVtOjpQbHVzRXF1YWwpOgor
ICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OkJpZ251bTo6UGx1c0xlc3NFcXVhbCk6CisgICAg
ICAgIChkb3VibGVfY29udmVyc2lvbjo6QmlnbnVtOjpQbHVzTGVzcyk6CisgICAgICAgIChkb3Vi
bGVfY29udmVyc2lvbjo6QmlnbnVtOjpFbnN1cmVDYXBhY2l0eSk6CisgICAgICAgIChkb3VibGVf
Y29udmVyc2lvbjo6QmlnbnVtOjpCaWdpdExlbmd0aCk6CisgICAgICAgICogd3RmL2R0b2EvY2Fj
aGVkLXBvd2Vycy5jYzogQWRkZWQuCisgICAgICAgICogd3RmL2R0b2EvY2FjaGVkLXBvd2Vycy5o
OiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9kaXktZnAuY2M6IEFkZGVkLgorICAgICAgICAq
IHd0Zi9kdG9hL2RpeS1mcC5oOiBBZGRlZC4KKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpE
aXlGcDo6RGl5RnApOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OkRpeUZwOjpTdWJ0cmFj
dCk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6RGl5RnA6Ok1pbnVzKToKKyAgICAgICAg
KGRvdWJsZV9jb252ZXJzaW9uOjpEaXlGcDo6VGltZXMpOgorICAgICAgICAoZG91YmxlX2NvbnZl
cnNpb246OkRpeUZwOjpOb3JtYWxpemUpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OkRp
eUZwOjpmKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpEaXlGcDo6ZSk6CisgICAgICAg
IChkb3VibGVfY29udmVyc2lvbjo6RGl5RnA6OnNldF9mKToKKyAgICAgICAgKGRvdWJsZV9jb252
ZXJzaW9uOjpEaXlGcDo6c2V0X2UpOgorICAgICAgICAqIHd0Zi9kdG9hL2RvdWJsZS1jb252ZXJz
aW9uLmNjOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5oOiBB
ZGRlZC4KKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGVUb1N0cmluZ0NvbnZlcnRl
cjo6RG91YmxlVG9TdHJpbmdDb252ZXJ0ZXIpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246
OlN0cmluZ1RvRG91YmxlQ29udmVydGVyOjpTdHJpbmdUb0RvdWJsZUNvbnZlcnRlcik6CisgICAg
ICAgICogd3RmL2R0b2EvZG91YmxlLmg6IEFkZGVkLgorICAgICAgICAoZG91YmxlX2NvbnZlcnNp
b246OmRvdWJsZV90b191aW50NjQpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OnVpbnQ2
NF90b19kb3VibGUpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZTo6RG91Ymxl
KToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGU6OkFzRGl5RnApOgorICAgICAg
ICAoZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZTo6QXNOb3JtYWxpemVkRGl5RnApOgorICAgICAg
ICAoZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZTo6QXNVaW50NjQpOgorICAgICAgICAoZG91Ymxl
X2NvbnZlcnNpb246OkRvdWJsZTo6TmV4dERvdWJsZSk6CisgICAgICAgIChkb3VibGVfY29udmVy
c2lvbjo6RG91YmxlOjpFeHBvbmVudCk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6RG91
YmxlOjpTaWduaWZpY2FuZCk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpJ
c0Rlbm9ybWFsKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGU6OklzU3BlY2lh
bCk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpJc05hbik6CisgICAgICAg
IChkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpJc0luZmluaXRlKToKKyAgICAgICAgKGRvdWJs
ZV9jb252ZXJzaW9uOjpEb3VibGU6OlNpZ24pOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246
OkRvdWJsZTo6VXBwZXJCb3VuZGFyeSk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6RG91
YmxlOjpOb3JtYWxpemVkQm91bmRhcmllcyk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6
RG91YmxlOjp2YWx1ZSk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpTaWdu
aWZpY2FuZFNpemVGb3JPcmRlck9mTWFnbml0dWRlKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJz
aW9uOjpEb3VibGU6OkluZmluaXR5KToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpEb3Vi
bGU6Ok5hTik6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpEaXlGcFRvVWlu
dDY0KToKKyAgICAgICAgKiB3dGYvZHRvYS9mYXN0LWR0b2EuY2M6IEFkZGVkLgorICAgICAgICAq
IHd0Zi9kdG9hL2Zhc3QtZHRvYS5oOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9maXhlZC1k
dG9hLmNjOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9maXhlZC1kdG9hLmg6IEFkZGVkLgor
ICAgICAgICAqIHd0Zi9kdG9hL3N0cnRvZC5jYzogQWRkZWQuCisgICAgICAgICogd3RmL2R0b2Ev
c3RydG9kLmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9kdG9hL3V0aWxzLmg6IEFkZGVkLgorICAg
ICAgICAoZG91YmxlX2NvbnZlcnNpb246Ok1heCk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lv
bjo6TWluKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpTdHJMZW5ndGgpOgorICAgICAg
ICAoZG91YmxlX2NvbnZlcnNpb246OlZlY3Rvcjo6VmVjdG9yKToKKyAgICAgICAgKGRvdWJsZV9j
b252ZXJzaW9uOjpWZWN0b3I6OlN1YlZlY3Rvcik6CisgICAgICAgIChkb3VibGVfY29udmVyc2lv
bjo6VmVjdG9yOjpsZW5ndGgpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OlZlY3Rvcjo6
aXNfZW1wdHkpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OlZlY3Rvcjo6c3RhcnQpOgor
ICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OlZlY3Rvcjo6b3BlcmF0b3JbXSk6CisgICAgICAg
IChkb3VibGVfY29udmVyc2lvbjo6VmVjdG9yOjpmaXJzdCk6CisgICAgICAgIChkb3VibGVfY29u
dmVyc2lvbjo6VmVjdG9yOjpsYXN0KToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpTdHJp
bmdCdWlsZGVyOjpTdHJpbmdCdWlsZGVyKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpT
dHJpbmdCdWlsZGVyOjp+U3RyaW5nQnVpbGRlcik6CisgICAgICAgIChkb3VibGVfY29udmVyc2lv
bjo6U3RyaW5nQnVpbGRlcjo6c2l6ZSk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6U3Ry
aW5nQnVpbGRlcjo6cG9zaXRpb24pOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OlN0cmlu
Z0J1aWxkZXI6OlJlc2V0KToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdCdWls
ZGVyOjpBZGRDaGFyYWN0ZXIpOgorICAgICAgICAoZG91YmxlX2NvbnZlcnNpb246OlN0cmluZ0J1
aWxkZXI6OkFkZFN0cmluZyk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6U3RyaW5nQnVp
bGRlcjo6QWRkU3Vic3RyaW5nKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdC
dWlsZGVyOjpBZGRQYWRkaW5nKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdC
dWlsZGVyOjpGaW5hbGl6ZSk6CisgICAgICAgIChkb3VibGVfY29udmVyc2lvbjo6U3RyaW5nQnVp
bGRlcjo6aXNfZmluYWxpemVkKToKKyAgICAgICAgKGRvdWJsZV9jb252ZXJzaW9uOjpCaXRDYXN0
KToKKyAgICAgICAgKiB3dGYvd3RmLnByaToKKwogMjAxMS0wOC0xNSAgR2F2aW4gQmFycmFjbG91
Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MjYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCmluZGV4IDM4YmQ5OWRlMzczOTg3NWY4OTUxYWMyNTliN2VkMDQwNjY2NjVj
YmQuLjYyOGM0ZTRjNjZiMzk5YzM5ZGY2ZWFkNWEwODc1MzQ1YjBiOTYxYmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC00NjAsOSArNDYwLDI1IEBAIGph
dmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ3Vy
cmVudFRpbWUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EYXRlTWF0aC5jcHAgXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGF0ZU1hdGguaCBcCi0JU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9EZWNpbWFsTnVtYmVyLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
RGVjaW1hbE51bWJlci5jcHAgXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGVjb2Rlci5o
IFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvYmlnbnVtLWR0b2EuY2MgXAor
ICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9iaWdudW0uY2MgXAorICAgIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmNjIFwKKyAgICBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZGl5LWZwLmNjIFwKKyAgICBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uY2MgXAorICAgIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvZHRvYS9mYXN0LWR0b2EuY2MgXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvZHRvYS9maXhlZC1kdG9hLmNjIFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L2R0b2Evc3RydG9kLmNjIFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvYmln
bnVtLWR0b2EuaCBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS5o
IFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvY2FjaGVkLXBvd2Vycy5oIFwK
KyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZGl5LWZwLmggXAorICAgIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5oIFwKKyAgICBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZG91YmxlLmggXAorICAgIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvZHRvYS9mYXN0LWR0b2EuaCBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9kdG9hL2ZpeGVkLWR0b2EuaCBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9k
dG9hL3N0cnRvZC5oIFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvdXRpbHMu
aCBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EZWNvZGVyLmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvRGVxdWUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9E
aXNhbGxvd0NUeXBlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRG91Ymx5TGlua2Vk
TGlzdC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5leHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCmluZGV4IGU1
NWY2OWQ5ZTNhNGUxOTFkYTY2MGI0NWY4OGNmYjI2ZDViYWRhYTMuLjZkMzEzYjMxZmIxZjlhYzc5
ODk4MTI4Y2Q3MWU5ZDQ3NDljMjhhNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5leHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLmV4cApAQCAtOTksNiArOTksNyBAQCBfV1RGUmVwb3J0QmFja3RyYWNlCiBfV1RGUmVw
b3J0RXJyb3IKIF9XVEZSZXBvcnRGYXRhbEVycm9yCiBfX1pOMTRPcGFxdWVKU1N0cmluZzZjcmVh
dGVFUktOM0pTQzdVU3RyaW5nRQorX19aTjE3ZG91YmxlX2NvbnZlcnNpb24yM0RvdWJsZVRvU3Ry
aW5nQ29udmVydGVyMTlFY21hU2NyaXB0Q29udmVydGVyRXYKIF9fWk4zSlNDMTBIYW5kbGVIZWFw
MTJ3cml0ZUJhcnJpZXJFUE5TXzdKU1ZhbHVlRVJLUzFfCiBfX1pOM0pTQzEwSGFuZGxlSGVhcDRn
cm93RXYKIF9fWk4zSlNDMTBJZGVudGlmaWVyMTFhZGRTbG93Q2FzZUVQTlNfMTJKU0dsb2JhbERh
dGFFUE4zV1RGMTBTdHJpbmdJbXBsRQpAQCAtMzgzLDggKzM4NCw2IEBAIF9fWk4zV1RGMTFPU0Fs
bG9jYXRvcjE2cmVzZXJ2ZUFuZENvbW1pdEVtTlMwXzVVc2FnZUViYmIKIF9fWk4zV1RGMTFPU0Fs
bG9jYXRvcjE4cmVsZWFzZURlY29tbWl0dGVkRVB2bQogX19aTjNXVEYxMWNvbW1lbnRBdG9tRQog
X19aTjNXVEYxMWN1cnJlbnRUaW1lRXYKLV9fWk4zV1RGMTFkdG9hUm91bmREUEVQY2RpUmJSaVJq
Ci1fX1pOM1dURjExZHRvYVJvdW5kU0ZFUGNkaVJiUmlSagogX19aTjNXVEYxMWVtcHR5U3RyaW5n
RXYKIF9fWk4zV1RGMTFmYXN0UmVhbGxvY0VQdm0KIF9fWk4zV1RGMTJBdG9taWNTdHJpbmcxMWFk
ZFNsb3dDYXNlRVBOU18xMFN0cmluZ0ltcGxFCkBAIC00MTMsNyArNDEyLDcgQEAgX19aTjNXVEYx
M2N1cnJlbnRUaHJlYWRFdgogX19aTjNXVEYxM3RyeUZhc3RDYWxsb2NFbW0KIF9fWk4zV1RGMTN0
cnlGYXN0TWFsbG9jRW0KIF9fWk4zV1RGMTRmYXN0TWFsbG9jU2l6ZUVQS3YKLV9fWk4zV1RGMTRu
dW1iZXJUb1N0cmluZ0VkUHQKK19fWk4zV1RGMTRudW1iZXJUb1N0cmluZ0VkUGMKIF9fWk4zV1RG
MTR0cnlGYXN0UmVhbGxvY0VQdm0KIF9fWk4zV1RGMTVUaHJlYWRDb25kaXRpb240d2FpdEVSTlNf
NU11dGV4RQogX19aTjNXVEYxNVRocmVhZENvbmRpdGlvbjZzaWduYWxFdgpAQCAtNDY1LDcgKzQ2
NCw2IEBAIF9fWk4zV1RGM01ENUMxRXYKIF9fWk4zV1RGNFNIQTExMWNvbXB1dGVIYXNoRVJOU182
VmVjdG9ySWhMbTIwRUVFCiBfX1pOM1dURjRTSEExOGFkZEJ5dGVzRVBLaG0KIF9fWk4zV1RGNFNI
QTFDMUV2Ci1fX1pOM1dURjRkdG9hRVBjZFJiUmlSagogX19aTjNXVEY1TXV0ZXg0bG9ja0V2CiBf
X1pOM1dURjVNdXRleDZ1bmxvY2tFdgogX19aTjNXVEY1TXV0ZXg3dHJ5TG9ja0V2CkBAIC01MjIs
NiArNTIwLDcgQEAgX19aTjNXVEY5eG1sbnNBdG9tRQogX19aTjNXVEZlcUVSS05TXzEyQXRvbWlj
U3RyaW5nRVBLYwogX19aTjNXVEZlcUVSS05TXzEyQXRvbWljU3RyaW5nRVJLTlNfNlZlY3Rvckl0
TG0wRUVFCiBfX1pOM1dURmVxRVJLTlNfN0NTdHJpbmdFUzJfCitfX1pOSzE3ZG91YmxlX2NvbnZl
cnNpb24yM0RvdWJsZVRvU3RyaW5nQ29udmVydGVyMTBUb1Nob3J0ZXN0RWRQTlNfMTNTdHJpbmdC
dWlsZGVyRQogX19aTkszSlNDMTBKU0Z1bmN0aW9uMjNpc0hvc3RGdW5jdGlvbk5vbklubGluZUV2
CiBfX1pOSzNKU0MxMUludGVycHJldGVyMTRyZXRyaWV2ZUNhbGxlckVQTlNfOUV4ZWNTdGF0ZUVQ
TlNfMTBKU0Z1bmN0aW9uRQogX19aTkszSlNDMTFJbnRlcnByZXRlcjE4cmV0cmlldmVMYXN0Q2Fs
bGVyRVBOU185RXhlY1N0YXRlRVJpUmxSTlNfN1VTdHJpbmdFUk5TXzdKU1ZhbHVlRQpAQCAtNTc1
LDEwICs1NzQsNiBAQCBfX1pOSzNKU0M4SlNTdHJpbmcxMXJlc29sdmVSb3BlRVBOU185RXhlY1N0
YXRlRQogX19aTkszSlNDOUhhc2hUYWJsZTExY3JlYXRlVGFibGVFUE5TXzEySlNHbG9iYWxEYXRh
RQogX19aTkszSlNDOUhhc2hUYWJsZTExZGVsZXRlVGFibGVFdgogX19aTkszV1RGMTJBdG9taWNT
dHJpbmc1bG93ZXJFdgotX19aTkszV1RGMTNEZWNpbWFsTnVtYmVyMTV0b1N0cmluZ0RlY2ltYWxF
UHRqCi1fX1pOSzNXVEYxM0RlY2ltYWxOdW1iZXIxOXRvU3RyaW5nRXhwb25lbnRpYWxFUHRqCi1f
X1pOSzNXVEYxM0RlY2ltYWxOdW1iZXIyOGJ1ZmZlckxlbmd0aEZvclN0cmluZ0RlY2ltYWxFdgot
X19aTkszV1RGMTNEZWNpbWFsTnVtYmVyMzJidWZmZXJMZW5ndGhGb3JTdHJpbmdFeHBvbmVudGlh
bEV2CiBfX1pOSzNXVEY2U3RyaW5nMTF0b0ludFN0cmljdEVQYmkKIF9fWk5LM1dURjZTdHJpbmcx
MnRvVUludFN0cmljdEVQYmkKIF9fWk5LM1dURjZTdHJpbmcxM3RvSW50NjRTdHJpY3RFUGJpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaSBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCmluZGV4IGRjN2M0ZGE5NWE1
ZWM4MTA2ODUxOTM2YjJhZGI2ZjVkZDg3YmRjNTIuLjRlMmQ1ZjRjNGRkOTJjYTYyNjVkNjNiYzFh
OWEzYWNkNDI5MWM4MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS5neXBpCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5n
eXBpCkBAIC0xNDYsNyArMTQ2LDE2IEBACiAgICAgICAgICAgICAnd3RmL0NyeXB0b2dyYXBoaWNh
bGx5UmFuZG9tTnVtYmVyLmgnLAogICAgICAgICAgICAgJ3d0Zi9DdXJyZW50VGltZS5oJywKICAg
ICAgICAgICAgICd3dGYvRGF0ZU1hdGguaCcsCi0gICAgICAgICAgICAnd3RmL0RlY2ltYWxOdW1i
ZXIuaCcsCisgICAgICAgICAgICAnd3RmL2R0b2EvYmlnbnVtLWR0b2EuaCcsCisgICAgICAgICAg
ICAnd3RmL2R0b2EvYmlnbnVtLmgnLAorICAgICAgICAgICAgJ3d0Zi9kdG9hL2NhY2hlZC1wb3dl
cnMuaCcsCisgICAgICAgICAgICAnd3RmL2R0b2EvZGl5LWZwLmgnLAorICAgICAgICAgICAgJ3d0
Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmgnLAorICAgICAgICAgICAgJ3d0Zi9kdG9hL2RvdWJs
ZS5oJywKKyAgICAgICAgICAgICd3dGYvZHRvYS9mYXN0LWR0b2EuaCcsCisgICAgICAgICAgICAn
d3RmL2R0b2EvZml4ZWQtZHRvYS5oJywKKyAgICAgICAgICAgICd3dGYvZHRvYS9zdHJ0b2QuaCcs
CisgICAgICAgICAgICAnd3RmL2R0b2EvdXRpbHMuaCcsCiAgICAgICAgICAgICAnd3RmL0RlY29k
ZXIuaCcsCiAgICAgICAgICAgICAnd3RmL0RlcXVlLmgnLAogICAgICAgICAgICAgJ3d0Zi9EaXNh
bGxvd0NUeXBlLmgnLApAQCAtNTgxLDcgKzU5MCwxNCBAQAogICAgICAgICAgICAgJ3d0Zi9Dcnlw
dG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5jcHAnLAogICAgICAgICAgICAgJ3d0Zi9DdXJyZW50
VGltZS5jcHAnLAogICAgICAgICAgICAgJ3d0Zi9EYXRlTWF0aC5jcHAnLAotICAgICAgICAgICAg
J3d0Zi9EZWNpbWFsTnVtYmVyLmNwcCcsCisgICAgICAgICAgICAnd3RmL2R0b2EvYmlnbnVtLWR0
b2EuY2MnLAorICAgICAgICAgICAgJ3d0Zi9kdG9hL2JpZ251bS5jYycsCisgICAgICAgICAgICAn
d3RmL2R0b2EvY2FjaGVkLXBvd2Vycy5jYycsCisgICAgICAgICAgICAnd3RmL2R0b2EvZGl5LWZw
LmNjJywKKyAgICAgICAgICAgICd3dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5jYycsCisgICAg
ICAgICAgICAnd3RmL2R0b2EvZmFzdC1kdG9hLmNjJywKKyAgICAgICAgICAgICd3dGYvZHRvYS9m
aXhlZC1kdG9hLmNjJywKKyAgICAgICAgICAgICd3dGYvZHRvYS9zdHJ0b2QuY2MnLAogICAgICAg
ICAgICAgJ3d0Zi9EeW5hbWljQW5ub3RhdGlvbnMuY3BwJywKICAgICAgICAgICAgICd3dGYvRHlu
YW1pY0Fubm90YXRpb25zLmgnLAogICAgICAgICAgICAgJ3d0Zi9GYXN0TWFsbG9jLmNwcCcsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGRlNjBhN2Y2ZGU0NzAzYzA0OTMyZTZiYWIx
ZjZiNGE5NzZjNTM3NWEuLmRmMjEyYzlmNGFmZjRmZTQ3NmZhYzk4ZjUyMTQyYTliZjkxYjUxYTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00OCw3ICs0OCw2IEBACiAJCTBCREZG
QUUwMEZDNjE5MjkwMEQ2OUVGNCAvKiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBCREZGQUQ0MEZDNjE3MTAwMEQ2
OUVGNCAvKiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwQkRGRkFFMTBGQzYxOTMxMDBENjlFRjQgLyogT3du
RmFzdE1hbGxvY1B0ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEJERkZBRDEwRkM2MTZFQzAwRDY5RUY0IC8qIE93bkZhc3RNYWxsb2NQdHIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwQkYyOEEyOTEx
QTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQkYyOEEyODExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxp
bWl0cy5jcHAgKi87IH07Ci0JCTBGMjk0NzlDMTI2RTY5OEMwMEIzQUJGNSAvKiBEZWNpbWFsTnVt
YmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
Mjk0NzlCMTI2RTY5OEMwMEIzQUJGNSAvKiBEZWNpbWFsTnVtYmVyLmNwcCAqLzsgfTsKIAkJMTQw
MDA2NzcxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMgLyog
T1NBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkxNDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY5MjEy
QTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi87IH07CiAJCTE0MDU2NkM0
MTA3RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4OTRENTBGQUZCQTJEMDAwMDE4NjUg
LyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAtMjQ4LDcgKzI0Nyw2IEBACiAJCTg2
MDE2MUU2MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODYwMTYxRTIwRjNBODND
MTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggKi87IH07CiAJCTg2MjZCRUNG
MTE5MjhFMzkwMDc4MkZBQiAvKiBTdHJpbmdTdGF0aWNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MjZCRUNFMTE5MjhFMzkwMDc4MkZBQiAvKiBT
dHJpbmdTdGF0aWNzLmNwcCAqLzsgfTsKIAkJODYyN0U1RUMxMUYxMjgxOTAwQTMxM0I1IC8qIFBh
Z2VBbGxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4NjI3RTVFQTExRjEyODE5MDBBMzEzQjUgLyogUGFnZUFsbG9jYXRpb24uaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk4NjJBRjRCNjEyMjM5
QzdCMDAyNEU1QjggLyogRGVjaW1hbE51bWJlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODYyQUY0QjUxMjIzOUM3QjAwMjRFNUI4IC8qIERlY2ltYWxO
dW1iZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk4NjNCMjNFMDBGQzYxMTg5MDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjNCMjNERjBGQzYw
RTYyMDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODY0MzhGQzQxMjY1NTAzRTAwRTBERkNB
IC8qIFN0cmluZ0J1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODY0MzhGQzMxMjY1NTAzRTAwRTBERkNBIC8qIFN0cmluZ0J1aWxkZXIuY3Bw
ICovOyB9OwogCQk4NjU2NTc0MjExNUJFM0RBMDAyOTFGNDAgLyogQ1N0cmluZy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjU2NTc0MDExNUJFM0RB
MDAyOTFGNDAgLyogQ1N0cmluZy5jcHAgKi87IH07CkBAIC01OTMsNiArNTkxLDI1IEBACiAJCUJD
RkQ4QzkyMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGRDhDOTAwRUVCMkVFNzAwMjgzODQ4IC8q
IEp1bXBUYWJsZS5jcHAgKi87IH07CiAJCUJDRkQ4QzkzMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1w
VGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
RkQ4QzkxMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuaCAqLzsgfTsKIAkJQzBBMjcyNjMw
RTUwQTA2MzAwRTk2RTE1IC8qIE5vdEZvdW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDMEEyNzIzRjBFNTA5RjFFMDBFOTZFMTUgLyogTm90Rm91bmQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDMjJD
NTJGMTEzRkFGNkVGMDBCN0RDMEQgLyogYmlnbnVtLWR0b2EuY2MgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTI5MDEzRkFGNkVGMDBCN0RDMEQgLyog
YmlnbnVtLWR0b2EuY2MgKi87IH07CisJCUMyMkM1MkYyMTNGQUY2RUYwMEI3REMwRCAvKiBiaWdu
dW0tZHRvYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzIyQzUyOTExM0ZBRjZFRjAwQjdEQzBEIC8qIGJpZ251bS1kdG9hLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIyQzUyRjMxM0ZBRjZFRjAwQjdE
QzBEIC8qIGJpZ251bS5jYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEMyMkM1MjkyMTNGQUY2RUYwMEI3REMwRCAvKiBiaWdudW0uY2MgKi87IH07CisJCUMy
MkM1MkY0MTNGQUY2RUYwMEI3REMwRCAvKiBiaWdudW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1MjkzMTNGQUY2RUYwMEI3REMwRCAvKiBiaWdu
dW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlD
MjJDNTJGNTEzRkFGNkVGMDBCN0RDMEQgLyogY2FjaGVkLXBvd2Vycy5jYyBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1Mjk0MTNGQUY2RUYwMEI3REMw
RCAvKiBjYWNoZWQtcG93ZXJzLmNjICovOyB9OworCQlDMjJDNTJGNjEzRkFGNkVGMDBCN0RDMEQg
LyogY2FjaGVkLXBvd2Vycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzIyQzUyOTUxM0ZBRjZFRjAwQjdEQzBEIC8qIGNhY2hlZC1wb3dlcnMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDMjJDNTJGNzEz
RkFGNkVGMDBCN0RDMEQgLyogZGl5LWZwLmNjIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQzIyQzUyOTcxM0ZBRjZFRjAwQjdEQzBEIC8qIGRpeS1mcC5jYyAq
LzsgfTsKKwkJQzIyQzUyRjgxM0ZBRjZFRjAwQjdEQzBEIC8qIGRpeS1mcC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyQzUyOTgxM0ZBRjZFRjAwQjdE
QzBEIC8qIGRpeS1mcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCUMyMkM1MkY5MTNGQUY2RUYwMEI3REMwRCAvKiBkb3VibGUtY29udmVyc2lvbi5j
YyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1Mjk5
MTNGQUY2RUYwMEI3REMwRCAvKiBkb3VibGUtY29udmVyc2lvbi5jYyAqLzsgfTsKKwkJQzIyQzUy
RkExM0ZBRjZFRjAwQjdEQzBEIC8qIGRvdWJsZS1jb252ZXJzaW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTI5QTEzRkFGNkVGMDBCN0RDMEQg
LyogZG91YmxlLWNvbnZlcnNpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQlDMjJDNTJGQjEzRkFGNkVGMDBCN0RDMEQgLyogZG91YmxlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTI5QjEzRkFG
NkVGMDBCN0RDMEQgLyogZG91YmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJQzIyQzUyRkMxM0ZBRjZFRjAwQjdEQzBEIC8qIGZhc3QtZHRvYS5j
YyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1MjlD
MTNGQUY2RUYwMEI3REMwRCAvKiBmYXN0LWR0b2EuY2MgKi87IH07CisJCUMyMkM1MkZEMTNGQUY2
RUYwMEI3REMwRCAvKiBmYXN0LWR0b2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEMyMkM1MjlEMTNGQUY2RUYwMEI3REMwRCAvKiBmYXN0LWR0b2EuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDMjJDNTJG
RTEzRkFGNkVGMDBCN0RDMEQgLyogZml4ZWQtZHRvYS5jYyBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1MjlFMTNGQUY2RUYwMEI3REMwRCAvKiBmaXhl
ZC1kdG9hLmNjICovOyB9OworCQlDMjJDNTJGRjEzRkFGNkVGMDBCN0RDMEQgLyogZml4ZWQtZHRv
YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyQzUy
OUYxM0ZBRjZFRjAwQjdEQzBEIC8qIGZpeGVkLWR0b2EuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDMjJDNTMwMDEzRkFGNkVGMDBCN0RDMEQgLyog
TWFrZWZpbGUgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
MjJDNTJBMTEzRkFGNkVGMDBCN0RDMEQgLyogTWFrZWZpbGUgKi87IH07CisJCUMyMkM1MzEzMTNG
QUY2RUYwMEI3REMwRCAvKiBzdHJ0b2QuY2MgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTJCOTEzRkFGNkVGMDBCN0RDMEQgLyogc3RydG9kLmNjICov
OyB9OworCQlDMjJDNTMxNDEzRkFGNkVGMDBCN0RDMEQgLyogc3RydG9kLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTJCQTEzRkFGNkVGMDBCN0RD
MEQgLyogc3RydG9kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJQzIyQzUzMTUxM0ZBRjZFRjAwQjdEQzBEIC8qIHV0aWxzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTJCQjEzRkFGNkVGMDBCN0RD
MEQgLyogdXRpbHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlEN0E0NkE0RjEzMzhGRkVBMDBFRDY5NUMgLyogRHluYW1pY0Fubm90YXRpb25zLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBENzVBRjU5NjEy
RjhDQjk1MDBGQzBBREYgLyogRHluYW1pY0Fubm90YXRpb25zLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJREQzNzdDQkMxMjA3MkMxODAwNkEyNTE3
IC8qIEJpdG1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gREQzNzdDQkIxMjA3MkMxODAwNkEyNTE3IC8qIEJpdG1hcC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCURERjdBQkQ0MTFGNjBFRDIwMDEwOEUz
NiAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IERERjdBQkQyMTFGNjBFRDIwMDEwOEUzNiAvKiBHQ0FjdGl2aXR5Q2Fs
bGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtNzI4LDcgKzc0NSw2IEBACiAJCTBCREZGQUQxMEZDNjE2RUMwMEQ2OUVGNCAvKiBPd25GYXN0
TWFsbG9jUHRyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE93bkZhc3RNYWxs
b2NQdHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEJERkZBRDQwRkM2MTcxMDAw
RDY5RUY0IC8qIENyb3NzVGhyZWFkUmVmQ291bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2l6ZUxpbWl0cy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMjk0NzlCMTI2RTY5OEMwMEIzQUJGNSAvKiBEZWNpbWFs
TnVtYmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlY2ltYWxO
dW1iZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAwMDY3NjEyQTZGNzgz
MDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gT1NBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2OTIx
MkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gT1NBbGxvY2F0b3JQb3NpeC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTE0MEQxN0Q2MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQmFzZVByaXZhdGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTkzNyw3ICs5NTMsNiBAQAogCQk4NjAxNjFFMjBG
M0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYyNkJFQ0UxMTkyOEUzOTAwNzgyRkFCIC8qIFN0cmluZ1N0
YXRpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU3RyaW5nU3Rh
dGljcy5jcHA7IHBhdGggPSB0ZXh0L1N0cmluZ1N0YXRpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk4NjI3RTVFQTExRjEyODE5MDBBMzEzQjUgLyogUGFnZUFsbG9jYXRpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFnZUFsbG9jYXRpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODYyQUY0QjUxMjIzOUM3QjAwMjRFNUI4IC8qIERl
Y2ltYWxOdW1iZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVjaW1hbE51
bWJlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjNCMjNERjBGQzYwRTYyMDA3
MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk4NjQzOEZDMzEyNjU1MDNFMDBFMERGQ0EgLyogU3RyaW5nQnVpbGRlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTdHJpbmdCdWlsZGVyLmNwcDsgcGF0
aCA9IHRleHQvU3RyaW5nQnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTg2NTY1NzQwMTE1QkUzREEwMDI5MUY0MCAvKiBDU3RyaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENTdHJpbmcuY3BwOyBwYXRoID0gdGV4dC9DU3RyaW5nLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNTMsNiArMTI2OCwzMCBAQAogCQlC
Q0ZEOEM5MDBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEp1bXBUYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDRkQ4QzkxMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSnVtcFRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMwQTI3MjNGMEU1MDlGMUUwMEU5NkUxNSAvKiBOb3RGb3VuZC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb3RGb3VuZC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlDMjJDNTI5MDEzRkFGNkVGMDBCN0RDMEQgLyogYmlnbnVtLWR0b2EuY2Mg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSAiYmlnbnVtLWR0b2EuY2MiOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTI5MTEzRkFGNkVGMDBCN0RDMEQgLyog
YmlnbnVtLWR0b2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gImJpZ251bS1k
dG9hLmgiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTI5MjEzRkFGNkVGMDBC
N0RDMEQgLyogYmlnbnVtLmNjICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
YmlnbnVtLmNjOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTI5MzEzRkFGNkVG
MDBCN0RDMEQgLyogYmlnbnVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGJp
Z251bS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTI5NDEzRkFGNkVGMDBC
N0RDMEQgLyogY2FjaGVkLXBvd2Vycy5jYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9ICJjYWNoZWQtcG93ZXJzLmNjIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QzIyQzUyOTUxM0ZBRjZFRjAwQjdEQzBEIC8qIGNhY2hlZC1wb3dlcnMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gImNhY2hlZC1wb3dlcnMuaCI7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUMyMkM1Mjk2MTNGQUY2RUYwMEI3REMwRCAvKiBDT1BZSU5HICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IENPUFlJTkc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMy
MkM1Mjk3MTNGQUY2RUYwMEI3REMwRCAvKiBkaXktZnAuY2MgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSAiZGl5LWZwLmNjIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQzIyQzUyOTgxM0ZBRjZFRjAwQjdEQzBEIC8qIGRpeS1mcC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSAiZGl5LWZwLmgiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlDMjJDNTI5OTEzRkFGNkVGMDBCN0RDMEQgLyogZG91YmxlLWNvbnZlcnNpb24uY2MgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSAiZG91YmxlLWNvbnZlcnNpb24uY2MiOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTI5QTEzRkFGNkVGMDBCN0RDMEQgLyog
ZG91YmxlLWNvbnZlcnNpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gImRv
dWJsZS1jb252ZXJzaW9uLmgiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTI5
QjEzRkFGNkVGMDBCN0RDMEQgLyogZG91YmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IGRvdWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTI5QzEz
RkFGNkVGMDBCN0RDMEQgLyogZmFzdC1kdG9hLmNjICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gImZhc3QtZHRvYS5jYyI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUMyMkM1MjlEMTNGQUY2RUYwMEI3REMwRCAvKiBmYXN0LWR0b2EuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gImZhc3QtZHRvYS5oIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQzIyQzUyOUUxM0ZBRjZFRjAwQjdEQzBEIC8qIGZpeGVkLWR0b2EuY2MgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSAiZml4ZWQtZHRvYS5jYyI7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUMyMkM1MjlGMTNGQUY2RUYwMEI3REMwRCAvKiBmaXhlZC1kdG9h
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9ICJmaXhlZC1kdG9hLmgiOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTJBMDEzRkFGNkVGMDBCN0RDMEQgLyogTElD
RU5TRSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBMSUNFTlNFOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlDMjJDNTJBMTEzRkFGNkVGMDBCN0RDMEQgLyogTWFrZWZpbGUgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLm1ha2U7IHBhdGggPSBNYWtlZmlsZTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQzIyQzUyQTIxM0ZBRjZFRjAwQjdEQzBEIC8qIFJFQURNRSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBSRUFETUU7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMkM1MkEz
MTNGQUY2RUYwMEI3REMwRCAvKiBTQ29uc2NyaXB0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFND
b25zY3JpcHQ7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMkM1MkE0MTNGQUY2RUYw
MEI3REMwRCAvKiBTQ29uc3RydWN0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNDb25zdHJ1Y3Q7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMkM1MkI5MTNGQUY2RUYwMEI3REMwRCAv
KiBzdHJ0b2QuY2MgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBzdHJ0b2Qu
Y2M7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMkM1MkJBMTNGQUY2RUYwMEI3REMw
RCAvKiBzdHJ0b2QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gc3RydG9kLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMkM1MkJCMTNGQUY2RUYwMEI3REMwRCAv
KiB1dGlscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1dGlscy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMjEyMDIyODBBRDQzMTBDMDBFRDc5QjYgLyogRGF0
ZUNvbnZlcnNpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERh
dGVDb252ZXJzaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDIxMjAyMjkw
QUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252ZXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBEYXRlQ29udmVyc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlENzVBRjU5NTEyRjhDQjk1MDBGQzBBREYgLyogRHluYW1pY0Fubm90YXRpb25zLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IER5bmFtaWNBbm5vdGF0aW9ucy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjUyLDYgKzE2OTEsNyBAQAogCQk2
NTE2MkVGMTA4RTZBMjFDMDA3NTU2Q0QgLyogd3RmICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlDMjJDNTI0ODEzRkFGNkVGMDBCN0RDMEQgLyogZHRvYSAq
LywKIAkJCQkwNkQzNThBMDBEQUFEOUM0MDAzQjE3NEUgLyogbWFjICovLAogCQkJCTg2NTY1NzNF
MTE1QkUzNTIwMDI5MUY0MCAvKiB0ZXh0ICovLAogCQkJCUUxOTU2NzhEMDlFN0NGMTIwMEI4OUQx
MyAvKiB1bmljb2RlICovLApAQCAtMTY3Nyw4ICsxNzE3LDYgQEAKIAkJCQkxODBCOUFGMDBGMTZD
NTY5MDA5QkRCQzUgLyogQ3VycmVudFRpbWUuaCAqLywKIAkJCQk0MTM1OUNGNDBGREQ4OUNCMDAy
MDYxODAgLyogRGF0ZU1hdGguY3BwICovLAogCQkJCTQxMzU5Q0Y1MEZERDg5Q0IwMDIwNjE4MCAv
KiBEYXRlTWF0aC5oICovLAotCQkJCTBGMjk0NzlCMTI2RTY5OEMwMEIzQUJGNSAvKiBEZWNpbWFs
TnVtYmVyLmNwcCAqLywKLQkJCQk4NjJBRjRCNTEyMjM5QzdCMDAyNEU1QjggLyogRGVjaW1hbE51
bWJlci5oICovLAogCQkJCTUxMzVGQUQ1MTJEMjY4NTYwMDNDMDgzQiAvKiBEZWNvZGVyLmggKi8s
CiAJCQkJNTE4NjExMUQwQ0M4MjQ4MzAwODE0MTJCIC8qIERlcXVlLmggKi8sCiAJCQkJOTM4QzRG
NkIwQ0EwNkJDRTAwRDkzMTBBIC8qIERpc2FsbG93Q1R5cGUuaCAqLywKQEAgLTIxNzksNiArMjIx
NywzNyBAQAogCQkJcGF0aCA9IGJ5dGVjb2RlOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
IAkJfTsKKwkJQzIyQzUyNDgxM0ZBRjZFRjAwQjdEQzBEIC8qIGR0b2EgKi8gPSB7CisJCQlpc2Eg
PSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUMyMkM1MjkwMTNGQUY2RUYwMEI3REMw
RCAvKiBiaWdudW0tZHRvYS5jYyAqLywKKwkJCQlDMjJDNTI5MTEzRkFGNkVGMDBCN0RDMEQgLyog
YmlnbnVtLWR0b2EuaCAqLywKKwkJCQlDMjJDNTI5MjEzRkFGNkVGMDBCN0RDMEQgLyogYmlnbnVt
LmNjICovLAorCQkJCUMyMkM1MjkzMTNGQUY2RUYwMEI3REMwRCAvKiBiaWdudW0uaCAqLywKKwkJ
CQlDMjJDNTI5NDEzRkFGNkVGMDBCN0RDMEQgLyogY2FjaGVkLXBvd2Vycy5jYyAqLywKKwkJCQlD
MjJDNTI5NTEzRkFGNkVGMDBCN0RDMEQgLyogY2FjaGVkLXBvd2Vycy5oICovLAorCQkJCUMyMkM1
Mjk2MTNGQUY2RUYwMEI3REMwRCAvKiBDT1BZSU5HICovLAorCQkJCUMyMkM1Mjk3MTNGQUY2RUYw
MEI3REMwRCAvKiBkaXktZnAuY2MgKi8sCisJCQkJQzIyQzUyOTgxM0ZBRjZFRjAwQjdEQzBEIC8q
IGRpeS1mcC5oICovLAorCQkJCUMyMkM1Mjk5MTNGQUY2RUYwMEI3REMwRCAvKiBkb3VibGUtY29u
dmVyc2lvbi5jYyAqLywKKwkJCQlDMjJDNTI5QTEzRkFGNkVGMDBCN0RDMEQgLyogZG91YmxlLWNv
bnZlcnNpb24uaCAqLywKKwkJCQlDMjJDNTI5QjEzRkFGNkVGMDBCN0RDMEQgLyogZG91YmxlLmgg
Ki8sCisJCQkJQzIyQzUyOUMxM0ZBRjZFRjAwQjdEQzBEIC8qIGZhc3QtZHRvYS5jYyAqLywKKwkJ
CQlDMjJDNTI5RDEzRkFGNkVGMDBCN0RDMEQgLyogZmFzdC1kdG9hLmggKi8sCisJCQkJQzIyQzUy
OUUxM0ZBRjZFRjAwQjdEQzBEIC8qIGZpeGVkLWR0b2EuY2MgKi8sCisJCQkJQzIyQzUyOUYxM0ZB
RjZFRjAwQjdEQzBEIC8qIGZpeGVkLWR0b2EuaCAqLywKKwkJCQlDMjJDNTJBMDEzRkFGNkVGMDBC
N0RDMEQgLyogTElDRU5TRSAqLywKKwkJCQlDMjJDNTJBMTEzRkFGNkVGMDBCN0RDMEQgLyogTWFr
ZWZpbGUgKi8sCisJCQkJQzIyQzUyQTIxM0ZBRjZFRjAwQjdEQzBEIC8qIFJFQURNRSAqLywKKwkJ
CQlDMjJDNTJBMzEzRkFGNkVGMDBCN0RDMEQgLyogU0NvbnNjcmlwdCAqLywKKwkJCQlDMjJDNTJB
NDEzRkFGNkVGMDBCN0RDMEQgLyogU0NvbnN0cnVjdCAqLywKKwkJCQlDMjJDNTJCOTEzRkFGNkVG
MDBCN0RDMEQgLyogc3RydG9kLmNjICovLAorCQkJCUMyMkM1MkJBMTNGQUY2RUYwMEI3REMwRCAv
KiBzdHJ0b2QuaCAqLywKKwkJCQlDMjJDNTJCQjEzRkFGNkVGMDBCN0RDMEQgLyogdXRpbHMuaCAq
LywKKwkJCSk7CisJCQlwYXRoID0gZHRvYTsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJ
CX07CiAJCUUxOTU2NzhEMDlFN0NGMTIwMEI4OUQxMyAvKiB1bmljb2RlICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTIyNzksNyArMjM0OCw2IEBACiAJCQkJ
QkMxOEMzRkEwRTE2RjVDRDAwQjM0NDYwIC8qIERlYnVnZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzMxMzU2NDBGMzAyRkEzMDAzREZEM0EgLyogRGVidWdnZXJBY3RpdmF0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzNGQjBFMTZGNUNEMDBCMzQ0NjAgLyogRGVidWdnZXJDYWxsRnJh
bWUuaCBpbiBIZWFkZXJzICovLAotCQkJCTg2MkFGNEI2MTIyMzlDN0IwMDI0RTVCOCAvKiBEZWNp
bWFsTnVtYmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTM1RkFGMjEyRDI2QUNFMDAzQzA4M0Ig
LyogRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRkMwRTE2RjVDRDAwQjM0NDYw
IC8qIERlcXVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDQTRGMTEzMkVBQTZEMDAyQjJBRDcg
LyogREZHQWxpYXNUcmFja2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTI0NjQsNiArMjUzMiwxNiBA
QAogCQkJCTkwRDM0NjlDMEUyODUyODAwMDk0OTJFRSAvKiBSZWZDb3VudGVkTGVha0NvdW50ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDU4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWZQdHIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDU5MEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWZQdHJI
YXNoTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQlDMjJDNTJGMjEzRkFGNkVGMDBCN0RDMEQgLyog
YmlnbnVtLWR0b2EuaCBpbiBIZWFkZXJzICovLAorCQkJCUMyMkM1MkY0MTNGQUY2RUYwMEI3REMw
RCAvKiBiaWdudW0uaCBpbiBIZWFkZXJzICovLAorCQkJCUMyMkM1MkY2MTNGQUY2RUYwMEI3REMw
RCAvKiBjYWNoZWQtcG93ZXJzLmggaW4gSGVhZGVycyAqLywKKwkJCQlDMjJDNTJGODEzRkFGNkVG
MDBCN0RDMEQgLyogZGl5LWZwLmggaW4gSGVhZGVycyAqLywKKwkJCQlDMjJDNTJGQTEzRkFGNkVG
MDBCN0RDMEQgLyogZG91YmxlLWNvbnZlcnNpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUMyMkM1
MkZCMTNGQUY2RUYwMEI3REMwRCAvKiBkb3VibGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUMyMkM1
MkZEMTNGQUY2RUYwMEI3REMwRCAvKiBmYXN0LWR0b2EuaCBpbiBIZWFkZXJzICovLAorCQkJCUMy
MkM1MkZGMTNGQUY2RUYwMEI3REMwRCAvKiBmaXhlZC1kdG9hLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlDMjJDNTMxNDEzRkFGNkVGMDBCN0RDMEQgLyogc3RydG9kLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlDMjJDNTMxNTEzRkFGNkVGMDBCN0RDMEQgLyogdXRpbHMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDNDVBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWdFeHAuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUExNzEyQjNGMTFDN0IyMjgwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkNEMjAyQzIwRTE3MDZBNzAwMkM3RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmggaW4g
SGVhZGVycyAqLywKQEAgLTI4NzAsNyArMjk0OCw2IEBACiAJCQkJMTQyODA4MjMxMDdFQzAyQzAw
MTNFN0IyIC8qIERlYnVnZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMzEzNTY1MEYzMDJG
QTMwMDNERkQzQSAvKiBEZWJ1Z2dlckFjdGl2YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ5NTU5RUUwRERDRERGNzAwNjQ4MDg3IC8qIERlYnVnZ2VyQ2FsbEZyYW1lLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCTBGMjk0NzlDMTI2RTY5OEMwMEIzQUJGNSAvKiBEZWNpbWFsTnVtYmVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5REM0MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRl
Q29kZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkVDOURDNzEzMjhERjgyMDAyQjJB
RDcgLyogREZHR3JhcGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQzkxMzI4REY4MjAw
MkIyQUQ3IC8qIERGR0pJVENvZGVHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMDMw
LDYgKzMxMDcsMTUgQEAKIAkJCQkxNEQyRjNEQTEzOUY0QkUyMDA0OTEwMzEgLyogTmV3U3BhY2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyQTFEODMxM0ExOUM4NDAwOURBNUZFIC8qIE9sZFNw
YWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0QkE3QTk3MTNBQURGRjgwMDVCN0MyQyAvKiBI
ZWFwLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUMyMkM1MkYxMTNGQUY2RUYwMEI3REMwRCAvKiBi
aWdudW0tZHRvYS5jYyBpbiBTb3VyY2VzICovLAorCQkJCUMyMkM1MkYzMTNGQUY2RUYwMEI3REMw
RCAvKiBiaWdudW0uY2MgaW4gU291cmNlcyAqLywKKwkJCQlDMjJDNTJGNTEzRkFGNkVGMDBCN0RD
MEQgLyogY2FjaGVkLXBvd2Vycy5jYyBpbiBTb3VyY2VzICovLAorCQkJCUMyMkM1MkY3MTNGQUY2
RUYwMEI3REMwRCAvKiBkaXktZnAuY2MgaW4gU291cmNlcyAqLywKKwkJCQlDMjJDNTJGOTEzRkFG
NkVGMDBCN0RDMEQgLyogZG91YmxlLWNvbnZlcnNpb24uY2MgaW4gU291cmNlcyAqLywKKwkJCQlD
MjJDNTJGQzEzRkFGNkVGMDBCN0RDMEQgLyogZmFzdC1kdG9hLmNjIGluIFNvdXJjZXMgKi8sCisJ
CQkJQzIyQzUyRkUxM0ZBRjZFRjAwQjdEQzBEIC8qIGZpeGVkLWR0b2EuY2MgaW4gU291cmNlcyAq
LywKKwkJCQlDMjJDNTMwMDEzRkFGNkVGMDBCN0RDMEQgLyogTWFrZWZpbGUgaW4gU291cmNlcyAq
LywKKwkJCQlDMjJDNTMxMzEzRkFGNkVGMDBCN0RDMEQgLyogc3RydG9kLmNjIGluIFNvdXJjZXMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXpl
VGhyZWFkaW5nLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVU
aHJlYWRpbmcuY3BwCmluZGV4IDcxNjU0MjFmOTVhZWY5ZjhiMDllOTAyNGYwNzBhYzA1ZjM2NjI4
NWUuLmZmZTUyZjI5ZTQzMzE2ZDViMzM0ZGU3YjZjYzM4ZDQxOTA1ZDhlOTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3Bw
CkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgogCiAj
aW5jbHVkZSAiSGVhcC5oIgotI2luY2x1ZGUgImR0b2EuaCIKKyNpbmNsdWRlIDx3dGYvZHRvYS9j
YWNoZWQtcG93ZXJzLmg+CiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIkpTR2xv
YmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiVVN0cmluZy5oIgpAQCAtNDcsNiArNDcsNyBAQCBzdGF0
aWMgcHRocmVhZF9vbmNlX3QgaW5pdGlhbGl6ZVRocmVhZGluZ0tleU9uY2UgPSBQVEhSRUFEX09O
Q0VfSU5JVDsKIAogc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZ09uY2UoKQogeworICAg
IGRvdWJsZV9jb252ZXJzaW9uOjppbml0aWFsaXplKCk7CiAgICAgV1RGOjppbml0aWFsaXplVGhy
ZWFkaW5nKCk7CiAgICAgSlNHbG9iYWxEYXRhOjpzdG9yZVZQdHJzKCk7CiAjaWYgRU5BQkxFKEpT
Q19NVUxUSVBMRV9USFJFQURTKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L051bWJlclByb3RvdHlwZS5jcHAKaW5kZXggNjc5Zjc0NzlkZWM3ZWViNTQzZWU5ZTYyMzMzZjA2
ZjgzZDQ5ZWY0ZC4uYmQ5ZDNmMzA3NGNkYmU0MDFlYmUwN2ZhNzA3NTFiZjI5ODk2M2Y4NyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3Bw
CkBAIC0zMCw5ICszMCwxMSBAQAogI2luY2x1ZGUgIlVpbnQxNldpdGhGcmFjdGlvbi5oIgogI2lu
Y2x1ZGUgImR0b2EuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0
Zi9EZWNpbWFsTnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uaD4K
KwordXNpbmcgbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uOwogCiBuYW1lc3BhY2UgSlNDIHsK
IApAQCAtMzM5LDEyICszNDEsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1i
ZXJQcm90b0Z1bmNUb0V4cG9uZW50aWFsKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBVU3RyaW5nOjpudW1iZXIoeCkpKTsKIAog
ICAgIC8vIFJvdW5kIGlmIHRoZSBhcmd1bWVudCBpcyBub3QgdW5kZWZpbmVkLCBhbHdheXMgZm9y
bWF0IGFzIGV4cG9uZW50aWFsLgotICAgIE51bWJlclRvU3RyaW5nQnVmZmVyIGJ1ZmZlcjsKLSAg
ICB1bnNpZ25lZCBsZW5ndGggPSBpc1VuZGVmaW5lZAotICAgICAgICA/IERlY2ltYWxOdW1iZXIo
eCkudG9TdHJpbmdFeHBvbmVudGlhbChidWZmZXIsIFdURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJM
ZW5ndGgpCi0gICAgICAgIDogRGVjaW1hbE51bWJlcih4LCBSb3VuZGluZ1NpZ25pZmljYW50Rmln
dXJlcywgZGVjaW1hbFBsYWNlc0luRXhwb25lbnQgKyAxKS50b1N0cmluZ0V4cG9uZW50aWFsKGJ1
ZmZlciwgV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCk7Ci0KLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmcoYnVmZmVyLCBsZW5ndGgpKSk7Cisg
ICAgY2hhciBidWZmZXJbV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aF07CisgICAgU3Ry
aW5nQnVpbGRlciBidWlsZGVyKGJ1ZmZlciwgV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0
aCk7CisgICAgY29uc3QgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXImIGNvbnZlcnRlciA9IERvdWJs
ZVRvU3RyaW5nQ29udmVydGVyOjpFY21hU2NyaXB0Q29udmVydGVyKCk7CisgICAgYnVpbGRlci5S
ZXNldCgpOworICAgIGlzVW5kZWZpbmVkCisgICAgICAgID8gY29udmVydGVyLlRvRXhwb25lbnRp
YWwoeCwgLTEsICZidWlsZGVyKQorICAgICAgICA6IGNvbnZlcnRlci5Ub0V4cG9uZW50aWFsKHgs
IGRlY2ltYWxQbGFjZXNJbkV4cG9uZW50LCAmYnVpbGRlcik7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1N0cmluZyhleGVjLCBVU3RyaW5nKGJ1aWxkZXIuRmluYWxpemUoKSkpKTsKIH0K
IAogLy8gdG9GaXhlZCBjb252ZXJ0cyBhIG51bWJlciB0byBhIHN0cmluZywgYWx3YXlzIGZvcm1h
dHRpbmcgYXMgYW4gYSBkZWNpbWFsIGZyYWN0aW9uLgpAQCAtMzc2LDEwICszODAsMTIgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb0ZpeGVkKEV4ZWNTdGF0
ZSogZXhlYykKICAgICAvLyBoYW5kbGVkIGJ5IG51bWJlclRvU3RyaW5nLgogICAgIEFTU0VSVChp
c2Zpbml0ZSh4KSk7CiAKLSAgICAvLyBDb252ZXJ0IHRvIGRlY2ltYWwgd2l0aCByb3VuZGluZywg
YW5kIGZvcm1hdCBhcyBkZWNpbWFsLgotICAgIE51bWJlclRvU3RyaW5nQnVmZmVyIGJ1ZmZlcjsK
LSAgICB1bnNpZ25lZCBsZW5ndGggPSBEZWNpbWFsTnVtYmVyKHgsIFJvdW5kaW5nRGVjaW1hbFBs
YWNlcywgZGVjaW1hbFBsYWNlcykudG9TdHJpbmdEZWNpbWFsKGJ1ZmZlciwgV1RGOjpOdW1iZXJU
b1N0cmluZ0J1ZmZlckxlbmd0aCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmlu
ZyhleGVjLCBVU3RyaW5nKGJ1ZmZlciwgbGVuZ3RoKSkpOworICAgIGNoYXIgYnVmZmVyW1dURjo6
TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGhdOworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcihi
dWZmZXIsIFdURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgpOworICAgIGNvbnN0IERvdWJs
ZVRvU3RyaW5nQ29udmVydGVyJiBjb252ZXJ0ZXIgPSBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6
RWNtYVNjcmlwdENvbnZlcnRlcigpOworICAgIGJ1aWxkZXIuUmVzZXQoKTsKKyAgICBjb252ZXJ0
ZXIuVG9GaXhlZCh4LCBkZWNpbWFsUGxhY2VzLCAmYnVpbGRlcik7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBVU3RyaW5nKGJ1aWxkZXIuRmluYWxpemUoKSkpKTsK
IH0KIAogLy8gdG9QcmVjaXNpb24gY29udmVydHMgYSBudW1iZXIgdG8gYSBzdHJpbmcsIHRha2Vp
bmcgYW4gYXJndW1lbnQgc3BlY2lmeWluZyBhCkBAIC00MTIsMTcgKzQxOCwxMiBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1RvUHJlY2lzaW9uKEV4ZWNTdGF0
ZSogZXhlYykKICAgICBpZiAoIWlzZmluaXRlKHgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmc6Om51bWJlcih4KSkpOwogCi0gICAgLy8gQ29u
dmVydCB0byBkZWNpbWFsIHdpdGggcm91bmRpbmcuCi0gICAgRGVjaW1hbE51bWJlciBudW1iZXIo
eCwgUm91bmRpbmdTaWduaWZpY2FudEZpZ3VyZXMsIHNpZ25pZmljYW50RmlndXJlcyk7Ci0gICAg
Ly8gSWYgbnVtYmVyIGlzIGluIHRoZSByYW5nZSAxZS02IDw9IHggPCBwb3coMTAsIHNpZ25pZmlj
YW50RmlndXJlcykgdGhlbiBmb3JtYXQKLSAgICAvLyBhcyBkZWNpbWFsLiBPdGhlcndpc2UsIGZv
cm1hdCB0aGUgbnVtYmVyIGFzIGFuIGV4cG9uZW50aWFsLiBEZWNpbWFsIGZvcm1hdAotICAgIC8v
IGRlbWFuZHMgYSBtaW5pbXVtIG9mIChleHBvbmVudCArIDEpIGRpZ2l0cyB0byByZXByZXNlbnQg
YSBudW1iZXIsIGZvciBleGFtcGxlCi0gICAgLy8gMTIzNCAoMS4yMzRlKzMpIHJlcXVpcmVzIDQg
ZGlnaXRzLiAoU2VlIEVDTUEtMjYyIDE1LjcuNC43LjEwLmMpCi0gICAgTnVtYmVyVG9TdHJpbmdC
dWZmZXIgYnVmZmVyOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IG51bWJlci5leHBvbmVudCgpID49
IC02ICYmIG51bWJlci5leHBvbmVudCgpIDwgc2lnbmlmaWNhbnRGaWd1cmVzCi0gICAgICAgID8g
bnVtYmVyLnRvU3RyaW5nRGVjaW1hbChidWZmZXIsIFdURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJM
ZW5ndGgpCi0gICAgICAgIDogbnVtYmVyLnRvU3RyaW5nRXhwb25lbnRpYWwoYnVmZmVyLCBXVEY6
Ok51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmcoYnVmZmVyLCBsZW5ndGgpKSk7CisgICAgY2hhciBidWZm
ZXJbV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aF07CisgICAgU3RyaW5nQnVpbGRlciBi
dWlsZGVyKGJ1ZmZlciwgV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCk7CisgICAgY29u
c3QgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXImIGNvbnZlcnRlciA9IERvdWJsZVRvU3RyaW5nQ29u
dmVydGVyOjpFY21hU2NyaXB0Q29udmVydGVyKCk7CisgICAgYnVpbGRlci5SZXNldCgpOworICAg
IGNvbnZlcnRlci5Ub1ByZWNpc2lvbih4LCBzaWduaWZpY2FudEZpZ3VyZXMsICZidWlsZGVyKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmcoYnVpbGRl
ci5GaW5hbGl6ZSgpKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJl
clByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVVN0cmluZy5jcHAKaW5kZXggYzE0ZjMxOTlmNDA3ZjQ3Zjc5NWY1MWJiOTIwZTZj
MDlmM2MzYTZmZC4uYjc4ZTZmMWFjYzc4MTBjYjI2ZTg5ODQ4YWE1NDdkOGZkYTJiYmY2NiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5jcHAKQEAgLTM1LDEwICszNSwx
MCBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvRGVjaW1hbE51bWJlci5o
PgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvZHRvYS5oPgogI2lu
Y2x1ZGUgPHd0Zi91bmljb2RlL1VURjguaD4KIAogI2lmIEhBVkUoU1RSSU5HU19IKQpAQCAtMTk2
LDggKzE5Niw3IEBAIFVTdHJpbmcgVVN0cmluZzo6bnVtYmVyKGxvbmcgbCkKIFVTdHJpbmcgVVN0
cmluZzo6bnVtYmVyKGRvdWJsZSBkKQogewogICAgIE51bWJlclRvU3RyaW5nQnVmZmVyIGJ1ZmZl
cjsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBudW1iZXJUb1N0cmluZyhkLCBidWZmZXIpOwotICAg
IHJldHVybiBVU3RyaW5nKGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICByZXR1cm4gVVN0cmluZyhudW1i
ZXJUb1N0cmluZyhkLCBidWZmZXIpKTsKIH0KIAogVVN0cmluZyBVU3RyaW5nOjpzdWJzdHJpbmdT
aGFyaW5nSW1wbCh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IGM2ZGRhMTM5YzRlYzM0NGM5
N2MzYjNlNzNmZjA0MWVmODkzMjJkMmQuLjBhNDliNGMxNGNmNzdjMzIwMzExZTE2YWM4OGUyMGRj
ZDZiYTYwNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3RzLnR4dApAQCAt
MTQsNyArMTQsNiBAQCBTRVQoV1RGX0hFQURFUlMKICAgICBDcnlwdG9ncmFwaGljYWxseVJhbmRv
bU51bWJlci5oCiAgICAgQ3VycmVudFRpbWUuaAogICAgIERhdGVNYXRoLmgKLSAgICBEZWNpbWFs
TnVtYmVyLmgKICAgICBEZWNvZGVyLmgKICAgICBEZXF1ZS5oCiAgICAgRGlzYWxsb3dDVHlwZS5o
CkBAIC05OSw2ICs5OCwxNyBAQCBTRVQoV1RGX0hFQURFUlMKICAgICBXVEZUaHJlYWREYXRhLmgK
ICAgICBkdG9hLmgKIAorICAgIGR0b2EvYmlnbnVtLWR0b2EuaAorICAgIGR0b2EvYmlnbnVtLmgK
KyAgICBkdG9hL2NhY2hlZC1wb3dlcnMuaAorICAgIGR0b2EvZGl5LWZwLmgKKyAgICBkdG9hL2Rv
dWJsZS1jb252ZXJzaW9uLmgKKyAgICBkdG9hL2RvdWJsZS5oCisgICAgZHRvYS9mYXN0LWR0b2Eu
aAorICAgIGR0b2EvZml4ZWQtZHRvYS5oCisgICAgZHRvYS9zdHJ0b2QuaAorICAgIGR0b2EvdXRp
bHMuaAorCiAgICAgdGV4dC9BdG9taWNTdHJpbmcuaAogICAgIHRleHQvQXRvbWljU3RyaW5nSW1w
bC5oCiAgICAgdGV4dC9DU3RyaW5nLmgKQEAgLTEyMCw3ICsxMzAsNiBAQCBTRVQoV1RGX1NPVVJD
RVMKICAgICBDcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5jcHAKICAgICBDdXJyZW50VGlt
ZS5jcHAKICAgICBEYXRlTWF0aC5jcHAKLSAgICBEZWNpbWFsTnVtYmVyLmNwcAogICAgIER5bmFt
aWNBbm5vdGF0aW9ucy5jcHAKICAgICBGYXN0TWFsbG9jLmNwcAogICAgIEhhc2hUYWJsZS5jcHAK
QEAgLTE0MCw2ICsxNDksMTUgQEAgU0VUKFdURl9TT1VSQ0VTCiAgICAgV1RGVGhyZWFkRGF0YS5j
cHAKICAgICBkdG9hLmNwcAogCisgICAgZHRvYS9iaWdudW0tZHRvYS5jYworICAgIGR0b2EvYmln
bnVtLmNjCisgICAgZHRvYS9jYWNoZWQtcG93ZXJzLmNjCisgICAgZHRvYS9kaXktZnAuY2MKKyAg
ICBkdG9hL2RvdWJsZS1jb252ZXJzaW9uLmNjCisgICAgZHRvYS9mYXN0LWR0b2EuY2MKKyAgICBk
dG9hL2ZpeGVkLWR0b2EuY2MKKyAgICBkdG9hL3N0cnRvZC5jYworCiAgICAgdGV4dC9BdG9taWNT
dHJpbmcuY3BwCiAgICAgdGV4dC9DU3RyaW5nLmNwcAogICAgIHRleHQvU3RyaW5nQnVpbGRlci5j
cHAKQEAgLTE1NCw2ICsxNzIsNyBAQCBTRVQoV1RGX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAi
JHtKQVZBU0NSSVBUQ09SRV9ESVJ9IgogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vd3RmIgog
ICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vd3RmL3VuaWNvZGUiCisgICAgIiR7SkFWQVNDUklQ
VENPUkVfRElSfS93dGYvZHRvYSIKICAgICAiJHtKYXZhU2NyaXB0Q29yZV9JTkNMVURFX0RJUkVD
VE9SSUVTfSIKICkKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EZWNp
bWFsTnVtYmVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGVjaW1hbE51bWJlci5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwMzA0ZTJlNWY2MzBkYWMzMjBmNTRm
NzhmZjdmNzUyN2FkMDY3ODMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EZWNpbWFsTnVtYmVyLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDE5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEZWNpbWFs
TnVtYmVyLmgiCi0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi11
bnNpZ25lZCBEZWNpbWFsTnVtYmVyOjpidWZmZXJMZW5ndGhGb3JTdHJpbmdEZWNpbWFsKCkgY29u
c3QKLXsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwotICAgIC8vIGlmIHRoZSBleHBvbmVudCBp
cyBuZWdhdGl2ZSB0aGUgbnVtYmVyIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gaXMgb2YgdGhlIGZv
cm06Ci0gICAgLy8gWzxzaWduPl0wLls8emVyb3M+XTxzaWduaWZpY2FuZD4KLSAgICBpZiAobV9l
eHBvbmVudCA8IDApIHsKLSAgICAgICAgaWYgKG1fc2lnbikKLSAgICAgICAgICAgICsrbGVuZ3Ro
OwotICAgICAgICBsZW5ndGggKz0gMjsgLy8gZm9yICIwLiIKLSAgICAgICAgbGVuZ3RoICs9IC1t
X2V4cG9uZW50IC0gMTsKLSAgICAgICAgbGVuZ3RoICs9IG1fcHJlY2lzaW9uOwotICAgICAgICBy
ZXR1cm4gbGVuZ3RoOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGRpZ2l0c0JlZm9yZURlY2ltYWxQ
b2ludCA9IG1fZXhwb25lbnQgKyAxOwotCi0gICAgLy8gSWYgdGhlIHByZWNpc2lvbiBpcyA8PSB0
aGFuIHRoZSBudW1iZXIgb2YgZGlnaXRzIHRvIGdldCB1cCB0byB0aGUgZGVjaW1hbAotICAgIC8v
IHBvaW50LCB0aGVuIHRoZXJlIGlzIG5vIGZyYWN0aW9uYWwgcGFydCwgbnVtYmVyIGlzIG9mIHRo
ZSBmb3JtOgotICAgIC8vIFs8c2lnbj5dPHNpZ25pZmljYW5kPls8emVyb3M+XQotICAgIGlmICht
X3ByZWNpc2lvbiA8PSBkaWdpdHNCZWZvcmVEZWNpbWFsUG9pbnQpIHsKLSAgICAgICAgaWYgKG1f
c2lnbikKLSAgICAgICAgICAgICsrbGVuZ3RoOwotICAgICAgICBsZW5ndGggKz0gbV9wcmVjaXNp
b247Ci0gICAgICAgIGxlbmd0aCArPSBkaWdpdHNCZWZvcmVEZWNpbWFsUG9pbnQgLSBtX3ByZWNp
c2lvbjsKLSAgICAgICAgcmV0dXJuIGxlbmd0aDsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBnZXQg
aGVyZSwgbnVtYmVyIHN0YXJ0cyBiZWZvcmUgdGhlIGRlY2ltYWwgcG9pbnQsIGFuZCBlbmRzIGFm
dGVyIGl0LAotICAgIC8vIGFzIHN1Y2ggaXMgb2YgdGhlIGZvcm06Ci0gICAgLy8gWzxzaWduPl08
c2lnbmlmaWNhbmQtYmVnaW4+LjxzaWduaWZpY2FuZC1lbmQ+Ci0gICAgaWYgKG1fc2lnbikKLSAg
ICAgICAgKytsZW5ndGg7Ci0gICAgbGVuZ3RoICs9IGRpZ2l0c0JlZm9yZURlY2ltYWxQb2ludDsK
LSAgICArK2xlbmd0aDsgLy8gZm9yIGRlY2ltYWwgcG9pbnQKLSAgICBsZW5ndGggKz0gbV9wcmVj
aXNpb24gLSBkaWdpdHNCZWZvcmVEZWNpbWFsUG9pbnQ7Ci0KLSAgICByZXR1cm4gbGVuZ3RoOwot
fQotCi11bnNpZ25lZCBEZWNpbWFsTnVtYmVyOjpidWZmZXJMZW5ndGhGb3JTdHJpbmdFeHBvbmVu
dGlhbCgpIGNvbnN0Ci17Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKLSAgICBpZiAobV9zaWdu
KQotICAgICAgICArK2xlbmd0aDsKLQotICAgIC8vIEFkZCB0aGUgc2lnbmlmaWNhbmQKLSAgICAr
K2xlbmd0aDsKLQotICAgIGlmIChtX3ByZWNpc2lvbiA+IDEpIHsKLSAgICAgICAgKytsZW5ndGg7
IC8vIGZvciBkZWNpbWFsIHBvaW50Ci0gICAgICAgIGxlbmd0aCArPSBtX3ByZWNpc2lvbiAtIDE7
Ci0gICAgfQotCi0gICAgLy8gQWRkICJlKyIgb3IgImUtIgotICAgIGxlbmd0aCArPSAyOwotCi0g
ICAgaW50IGV4cG9uZW50ID0gKG1fZXhwb25lbnQgPj0gMCkgPyBtX2V4cG9uZW50IDogLW1fZXhw
b25lbnQ7Ci0KLSAgICAvLyBBZGQgdGhlIGV4cG9uZW50Ci0gICAgaWYgKGV4cG9uZW50ID49IDEw
MCkKLSAgICAgICAgKytsZW5ndGg7Ci0gICAgaWYgKGV4cG9uZW50ID49IDEwKQotICAgICAgICAr
K2xlbmd0aDsKLSAgICArK2xlbmd0aDsKLQotICAgIHJldHVybiBsZW5ndGg7Ci19Ci0KLXVuc2ln
bmVkIERlY2ltYWxOdW1iZXI6OnRvU3RyaW5nRGVjaW1hbChVQ2hhciogYnVmZmVyLCB1bnNpZ25l
ZCBidWZmZXJMZW5ndGgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX1VOVVNFRChidWZmZXJMZW5ndGgs
IGJ1ZmZlckxlbmd0aCA+PSBidWZmZXJMZW5ndGhGb3JTdHJpbmdEZWNpbWFsKCkpOwotCi0gICAg
Ly8gU2hvdWxkIGFsd2F5cyBiZSBhdCBsZWFzdCBvbmUgZGlnaXQgdG8gYWRkIHRvIHRoZSBzdHJp
bmchCi0gICAgQVNTRVJUKG1fcHJlY2lzaW9uKTsKLSAgICBVQ2hhciogbmV4dCA9IGJ1ZmZlcjsK
LQotICAgIC8vIGlmIHRoZSBleHBvbmVudCBpcyBuZWdhdGl2ZSB0aGUgbnVtYmVyIGRlY2ltYWwg
cmVwcmVzZW50YXRpb24gaXMgb2YgdGhlIGZvcm06Ci0gICAgLy8gWzxzaWduPl0wLls8emVyb3M+
XTxzaWduaWZpY2FuZD4KLSAgICBpZiAobV9leHBvbmVudCA8IDApIHsKLSAgICAgICAgdW5zaWdu
ZWQgemVyb3MgPSAtbV9leHBvbmVudCAtIDE7Ci0KLSAgICAgICAgaWYgKG1fc2lnbikKLSAgICAg
ICAgICAgICpuZXh0KysgPSAnLSc7Ci0gICAgICAgICpuZXh0KysgPSAnMCc7Ci0gICAgICAgICpu
ZXh0KysgPSAnLic7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB6ZXJvczsgKytp
KQotICAgICAgICAgICAgKm5leHQrKyA9ICcwJzsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fcHJlY2lzaW9uOyArK2kpCi0gICAgICAgICAgICAqbmV4dCsrID0gbV9zaWduaWZp
Y2FuZFtpXTsKLQotICAgICAgICByZXR1cm4gbmV4dCAtIGJ1ZmZlcjsKLSAgICB9Ci0KLSAgICB1
bnNpZ25lZCBkaWdpdHNCZWZvcmVEZWNpbWFsUG9pbnQgPSBtX2V4cG9uZW50ICsgMTsKLQotICAg
IC8vIElmIHRoZSBwcmVjaXNpb24gaXMgPD0gdGhhbiB0aGUgbnVtYmVyIG9mIGRpZ2l0cyB0byBn
ZXQgdXAgdG8gdGhlIGRlY2ltYWwKLSAgICAvLyBwb2ludCwgdGhlbiB0aGVyZSBpcyBubyBmcmFj
dGlvbmFsIHBhcnQsIG51bWJlciBpcyBvZiB0aGUgZm9ybToKLSAgICAvLyBbPHNpZ24+XTxzaWdu
aWZpY2FuZD5bPHplcm9zPl0KLSAgICBpZiAobV9wcmVjaXNpb24gPD0gZGlnaXRzQmVmb3JlRGVj
aW1hbFBvaW50KSB7Ci0gICAgICAgIGlmIChtX3NpZ24pCi0gICAgICAgICAgICAqbmV4dCsrID0g
Jy0nOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcmVjaXNpb247ICsraSkK
LSAgICAgICAgICAgICpuZXh0KysgPSBtX3NpZ25pZmljYW5kW2ldOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgKGRpZ2l0c0JlZm9yZURlY2ltYWxQb2ludCAtIG1fcHJlY2lzaW9u
KTsgKytpKQotICAgICAgICAgICAgKm5leHQrKyA9ICcwJzsKLQotICAgICAgICByZXR1cm4gbmV4
dCAtIGJ1ZmZlcjsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgbnVtYmVyIHN0YXJ0
cyBiZWZvcmUgdGhlIGRlY2ltYWwgcG9pbnQsIGFuZCBlbmRzIGFmdGVyIGl0LAotICAgIC8vIGFz
IHN1Y2ggaXMgb2YgdGhlIGZvcm06Ci0gICAgLy8gWzxzaWduPl08c2lnbmlmaWNhbmQtYmVnaW4+
LjxzaWduaWZpY2FuZC1lbmQ+Ci0KLSAgICBpZiAobV9zaWduKQotICAgICAgICAqbmV4dCsrID0g
Jy0nOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkaWdpdHNCZWZvcmVEZWNpbWFsUG9p
bnQ7ICsraSkKLSAgICAgICAgKm5leHQrKyA9IG1fc2lnbmlmaWNhbmRbaV07Ci0gICAgKm5leHQr
KyA9ICcuJzsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBkaWdpdHNCZWZvcmVEZWNpbWFsUG9pbnQ7
IGkgPCBtX3ByZWNpc2lvbjsgKytpKQotICAgICAgICAqbmV4dCsrID0gbV9zaWduaWZpY2FuZFtp
XTsKLQotICAgIHJldHVybiBuZXh0IC0gYnVmZmVyOwotfQotCi11bnNpZ25lZCBEZWNpbWFsTnVt
YmVyOjp0b1N0cmluZ0V4cG9uZW50aWFsKFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxl
bmd0aCkgY29uc3QKLXsKLSAgICBBU1NFUlRfVU5VU0VEKGJ1ZmZlckxlbmd0aCwgYnVmZmVyTGVu
Z3RoID49IGJ1ZmZlckxlbmd0aEZvclN0cmluZ0V4cG9uZW50aWFsKCkpOwotCi0gICAgLy8gU2hv
dWxkIGFsd2F5cyBiZSBhdCBsZWFzdCBvbmUgZGlnaXQgdG8gYWRkIHRvIHRoZSBzdHJpbmchCi0g
ICAgQVNTRVJUKG1fcHJlY2lzaW9uKTsKLSAgICBVQ2hhciogbmV4dCA9IGJ1ZmZlcjsKLQotICAg
IC8vIEFkZCB0aGUgc2lnbgotICAgIGlmIChtX3NpZ24pCi0gICAgICAgICpuZXh0KysgPSAnLSc7
Ci0KLSAgICAvLyBBZGQgdGhlIHNpZ25pZmljYW5kCi0gICAgKm5leHQrKyA9IG1fc2lnbmlmaWNh
bmRbMF07Ci0gICAgaWYgKG1fcHJlY2lzaW9uID4gMSkgewotICAgICAgICAqbmV4dCsrID0gJy4n
OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbV9wcmVjaXNpb247ICsraSkKLSAg
ICAgICAgICAgICpuZXh0KysgPSBtX3NpZ25pZmljYW5kW2ldOwotICAgIH0KLQotICAgIC8vIEFk
ZCAiZSsiIG9yICJlLSIKLSAgICAqbmV4dCsrID0gJ2UnOwotICAgIGludCBleHBvbmVudDsKLSAg
ICBpZiAobV9leHBvbmVudCA+PSAwKSB7Ci0gICAgICAgICpuZXh0KysgPSAnKyc7Ci0gICAgICAg
IGV4cG9uZW50ID0gbV9leHBvbmVudDsKLSAgICB9IGVsc2UgewotICAgICAgICAqbmV4dCsrID0g
Jy0nOwotICAgICAgICBleHBvbmVudCA9IC1tX2V4cG9uZW50OwotICAgIH0KLQotICAgIC8vIEFk
ZCB0aGUgZXhwb25lbnQKLSAgICBpZiAoZXhwb25lbnQgPj0gMTAwKQotICAgICAgICAqbmV4dCsr
ID0gJzAnICsgZXhwb25lbnQgLyAxMDA7Ci0gICAgaWYgKGV4cG9uZW50ID49IDEwKQotICAgICAg
ICAqbmV4dCsrID0gJzAnICsgKGV4cG9uZW50ICUgMTAwKSAvIDEwOwotICAgICpuZXh0KysgPSAn
MCcgKyBleHBvbmVudCAlIDEwOwotCi0gICAgcmV0dXJuIG5leHQgLSBidWZmZXI7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9E
ZWNpbWFsTnVtYmVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RlY2ltYWxOdW1iZXIu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM3YjgwMDU4MmQzNmFiMmExNzZiMDNl
MDlkMGM1MmEwNDU0MjliMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RlY2ltYWxOdW1iZXIuaAorKysgL2Rl
di9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpZm5kZWYgRGVjaW1hbE51bWJlcl9oCi0jZGVmaW5lIERlY2ltYWxO
dW1iZXJfaAotCi0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHd0Zi9kdG9hLmg+Ci0jaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIFdURiB7Ci0KLWVudW0gUm91bmRpbmdTaWduaWZpY2FudEZpZ3VyZXNUeXBl
IHsgUm91bmRpbmdTaWduaWZpY2FudEZpZ3VyZXMgfTsKLWVudW0gUm91bmRpbmdEZWNpbWFsUGxh
Y2VzVHlwZSB7IFJvdW5kaW5nRGVjaW1hbFBsYWNlcyB9OwotCi1jbGFzcyBEZWNpbWFsTnVtYmVy
IHsKLXB1YmxpYzoKLSAgICBEZWNpbWFsTnVtYmVyKGRvdWJsZSBkKQotICAgIHsKLSAgICAgICAg
QVNTRVJUKGlzZmluaXRlKGQpKTsKLSAgICAgICAgZHRvYShtX3NpZ25pZmljYW5kLCBkLCBtX3Np
Z24sIG1fZXhwb25lbnQsIG1fcHJlY2lzaW9uKTsKLQotICAgICAgICBBU1NFUlQobV9wcmVjaXNp
b24pOwotICAgICAgICAvLyBaZXJvIHNob3VsZCBhbHdheXMgaGF2ZSBleHBvbmVudCAwLgotICAg
ICAgICBBU1NFUlQobV9zaWduaWZpY2FuZFswXSAhPSAnMCcgfHwgIW1fZXhwb25lbnQpOwotICAg
ICAgICAvLyBObyB2YWx1ZXMgb3RoZXIgdGhhbiB6ZXJvIHNob3VsZCBoYXZlIGEgbGVhZGluZyB6
ZXJvLgotICAgICAgICBBU1NFUlQobV9zaWduaWZpY2FuZFswXSAhPSAnMCcgfHwgbV9wcmVjaXNp
b24gPT0gMSk7Ci0gICAgICAgIC8vIE5vIHZhbHVlcyBvdGhlciB0aGFuIHplcm8gc2hvdWxkIGhh
dmUgdHJhaWxpbmcgemVyb3MuCi0gICAgICAgIEFTU0VSVChtX3NpZ25pZmljYW5kWzBdID09ICcw
JyB8fCBtX3NpZ25pZmljYW5kW21fcHJlY2lzaW9uIC0gMV0gIT0gJzAnKTsKLSAgICB9Ci0KLSAg
ICBEZWNpbWFsTnVtYmVyKGRvdWJsZSBkLCBSb3VuZGluZ1NpZ25pZmljYW50RmlndXJlc1R5cGUs
IHVuc2lnbmVkIHNpZ25pZmljYW50RmlndXJlcykKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc2Zp
bml0ZShkKSk7Ci0gICAgICAgIGR0b2FSb3VuZFNGKG1fc2lnbmlmaWNhbmQsIGQsIHNpZ25pZmlj
YW50RmlndXJlcywgbV9zaWduLCBtX2V4cG9uZW50LCBtX3ByZWNpc2lvbik7Ci0KLSAgICAgICAg
QVNTRVJUKHNpZ25pZmljYW50RmlndXJlcyAmJiBzaWduaWZpY2FudEZpZ3VyZXMgPD0gc2l6ZW9m
KER0b2FCdWZmZXIpKTsKLSAgICAgICAgd2hpbGUgKG1fcHJlY2lzaW9uIDwgc2lnbmlmaWNhbnRG
aWd1cmVzKQotICAgICAgICAgICAgbV9zaWduaWZpY2FuZFttX3ByZWNpc2lvbisrXSA9ICcwJzsK
LQotICAgICAgICBBU1NFUlQobV9wcmVjaXNpb24pOwotICAgICAgICAvLyBaZXJvIHNob3VsZCBh
bHdheXMgaGF2ZSBleHBvbmVudCAwLgotICAgICAgICBBU1NFUlQobV9zaWduaWZpY2FuZFswXSAh
PSAnMCcgfHwgIW1fZXhwb25lbnQpOwotICAgIH0KLQotICAgIERlY2ltYWxOdW1iZXIoZG91Ymxl
IGQsIFJvdW5kaW5nRGVjaW1hbFBsYWNlc1R5cGUsIHVuc2lnbmVkIGRlY2ltYWxQbGFjZXMpCi0g
ICAgewotICAgICAgICBBU1NFUlQoaXNmaW5pdGUoZCkpOwotICAgICAgICBkdG9hUm91bmREUCht
X3NpZ25pZmljYW5kLCBkLCBkZWNpbWFsUGxhY2VzLCBtX3NpZ24sIG1fZXhwb25lbnQsIG1fcHJl
Y2lzaW9uKTsKLQotICAgICAgICB1bnNpZ25lZCBzaWduaWZpY2FudEZpZ3VyZXMgPSAxICsgbV9l
eHBvbmVudCArIGRlY2ltYWxQbGFjZXM7Ci0gICAgICAgIEFTU0VSVChzaWduaWZpY2FudEZpZ3Vy
ZXMgJiYgc2lnbmlmaWNhbnRGaWd1cmVzIDw9IHNpemVvZihEdG9hQnVmZmVyKSk7Ci0gICAgICAg
IHdoaWxlIChtX3ByZWNpc2lvbiA8IHNpZ25pZmljYW50RmlndXJlcykKLSAgICAgICAgICAgIG1f
c2lnbmlmaWNhbmRbbV9wcmVjaXNpb24rK10gPSAnMCc7Ci0KLSAgICAgICAgQVNTRVJUKG1fcHJl
Y2lzaW9uKTsKLSAgICAgICAgLy8gWmVybyBzaG91bGQgYWx3YXlzIGhhdmUgZXhwb25lbnQgMC4K
LSAgICAgICAgQVNTRVJUKG1fc2lnbmlmaWNhbmRbMF0gIT0gJzAnIHx8ICFtX2V4cG9uZW50KTsK
LSAgICB9Ci0KLSAgICB1bnNpZ25lZCBidWZmZXJMZW5ndGhGb3JTdHJpbmdEZWNpbWFsKCkgY29u
c3Q7Ci0gICAgdW5zaWduZWQgYnVmZmVyTGVuZ3RoRm9yU3RyaW5nRXhwb25lbnRpYWwoKSBjb25z
dDsKLQotICAgIHVuc2lnbmVkIHRvU3RyaW5nRGVjaW1hbChVQ2hhciogYnVmZmVyLCB1bnNpZ25l
ZCBidWZmZXJMZW5ndGgpIGNvbnN0OwotICAgIHVuc2lnbmVkIHRvU3RyaW5nRXhwb25lbnRpYWwo
VUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoKSBjb25zdDsKLQotICAgIGJvb2wg
c2lnbigpIGNvbnN0IHsgcmV0dXJuIG1fc2lnbjsgfQotICAgIGludCBleHBvbmVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fZXhwb25lbnQ7IH0KLSAgICBjb25zdCBjaGFyKiBzaWduaWZpY2FuZCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2lnbmlmaWNhbmQ7IH0gLy8gc2lnbmlmaWNhbmQgY29udGFpbnMgcHJl
Y2lzaW9uIGNoYXJhY3RlcnMsIGlzIG5vdCBudWxsLXRlcm1pbmF0ZWQuCi0gICAgdW5zaWduZWQg
cHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9wcmVjaXNpb247IH0KLQotcHJpdmF0ZToKLSAg
ICBib29sIG1fc2lnbjsKLSAgICBpbnQgbV9leHBvbmVudDsKLSAgICBEdG9hQnVmZmVyIG1fc2ln
bmlmaWNhbmQ7Ci0gICAgdW5zaWduZWQgbV9wcmVjaXNpb247Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBXVEYKLQotdXNpbmcgV1RGOjpEZWNpbWFsTnVtYmVyOwotdXNpbmcgV1RGOjpSb3VuZGluZ1Np
Z25pZmljYW50RmlndXJlczsKLXVzaW5nIFdURjo6Um91bmRpbmdEZWNpbWFsUGxhY2VzOwotCi0j
ZW5kaWYgLy8gRGVjaW1hbE51bWJlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL2R0b2EuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hLmNwcAppbmRl
eCAxNDY2ZGY3MzY4MDg5NWZiN2Q2NzJmNjc4YTc0Mjk1M2Q5YzZkNWFkLi5iNWIyNzMyNGVkMDlk
MDE5YTc3Y2IwZGVjMjg4NGUyY2IwZDY1MTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL2R0b2EuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS5j
cHAKQEAgLTc1LDEyICs3NSwxMiBAQAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHd0
Zi9BbHdheXNJbmxpbmUuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUg
PHd0Zi9EZWNpbWFsTnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNs
dWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVk
ZSA8d3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uaD4KIAogI2lmIENPTVBJTEVSKE1TVkMpCiAj
cHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDI0NCkKQEAgLTEyNzQsNTYxICsxMjc0LDEyIEBAIHN0
YXRpYyBBTFdBWVNfSU5MSU5FIGludCBxdW9yZW0oQmlnSW50JiBiLCBCaWdJbnQmIFMpCiAgICAg
cmV0dXJuIHE7CiB9CiAKLS8qIGR0b2EgZm9yIElFRUUgYXJpdGhtZXRpYyAoZG1nKTogY29udmVy
dCBkb3VibGUgdG8gQVNDSUkgc3RyaW5nLgotICoKLSAqIEluc3BpcmVkIGJ5ICJIb3cgdG8gUHJp
bnQgRmxvYXRpbmctUG9pbnQgTnVtYmVycyBBY2N1cmF0ZWx5IiBieQotICogR3V5IEwuIFN0ZWVs
ZSwgSnIuIGFuZCBKb24gTC4gV2hpdGUgW1Byb2MuIEFDTSBTSUdQTEFOICc5MCwgcHAuIDExMi0x
MjZdLgotICoKLSAqIE1vZGlmaWNhdGlvbnM6Ci0gKiAgICAxLiBSYXRoZXIgdGhhbiBpdGVyYXRp
bmcsIHdlIHVzZSBhIHNpbXBsZSBudW1lcmljIG92ZXJlc3RpbWF0ZQotICogICAgICAgdG8gZGV0
ZXJtaW5lIGsgPSBmbG9vcihsb2cxMChkKSkuICBXZSBzY2FsZSByZWxldmFudAotICogICAgICAg
cXVhbnRpdGllcyB1c2luZyBPKGxvZzIoaykpIHJhdGhlciB0aGFuIE8oaykgbXVsdGlwbGljYXRp
b25zLgotICogICAgMi4gRm9yIHNvbWUgbW9kZXMgPiAyIChjb3JyZXNwb25kaW5nIHRvIGVjdnQg
YW5kIGZjdnQpLCB3ZSBkb24ndAotICogICAgICAgdHJ5IHRvIGdlbmVyYXRlIGRpZ2l0cyBzdHJp
Y3RseSBsZWZ0IHRvIHJpZ2h0LiAgSW5zdGVhZCwgd2UKLSAqICAgICAgIGNvbXB1dGUgd2l0aCBm
ZXdlciBiaXRzIGFuZCBwcm9wYWdhdGUgdGhlIGNhcnJ5IGlmIG5lY2Vzc2FyeQotICogICAgICAg
d2hlbiByb3VuZGluZyB0aGUgZmluYWwgZGlnaXQgdXAuICBUaGlzIGlzIG9mdGVuIGZhc3Rlci4K
LSAqICAgIDMuIFVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgaW5wdXQgd2lsbCBiZSByb3VuZGVk
IG5lYXJlc3QsCi0gKiAgICAgICBtb2RlIDAgcmVuZGVycyAxZTIzIGFzIDFlMjMgcmF0aGVyIHRo
YW4gOS45OTk5OTk5OTk5OTk5OTllMjIuCi0gKiAgICAgICBUaGF0IGlzLCB3ZSBhbGxvdyBlcXVh
bGl0eSBpbiBzdG9wcGluZyB0ZXN0cyB3aGVuIHRoZQotICogICAgICAgcm91bmQtbmVhcmVzdCBy
dWxlIHdpbGwgZ2l2ZSB0aGUgc2FtZSBmbG9hdGluZy1wb2ludCB2YWx1ZQotICogICAgICAgYXMg
d291bGQgc2F0aXNmYWN0aW9uIG9mIHRoZSBzdG9wcGluZyB0ZXN0IHdpdGggc3RyaWN0Ci0gKiAg
ICAgICBpbmVxdWFsaXR5LgotICogICAgNC4gV2UgcmVtb3ZlIGNvbW1vbiBmYWN0b3JzIG9mIHBv
d2VycyBvZiAyIGZyb20gcmVsZXZhbnQKLSAqICAgICAgIHF1YW50aXRpZXMuCi0gKiAgICA1LiBX
aGVuIGNvbnZlcnRpbmcgZmxvYXRpbmctcG9pbnQgaW50ZWdlcnMgbGVzcyB0aGFuIDFlMTYsCi0g
KiAgICAgICB3ZSB1c2UgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYyByYXRoZXIgdGhhbiByZXNv
cnRpbmcKLSAqICAgICAgIHRvIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2Vycy4KLSAqICAgIDYu
IFdoZW4gYXNrZWQgdG8gcHJvZHVjZSBmZXdlciB0aGFuIDE1IGRpZ2l0cywgd2UgZmlyc3QgdHJ5
Ci0gKiAgICAgICB0byBnZXQgYnkgd2l0aCBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljOyB3ZSBy
ZXNvcnQgdG8KLSAqICAgICAgIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGFyaXRobWV0aWMg
b25seSBpZiB3ZSBjYW5ub3QKLSAqICAgICAgIGd1YXJhbnRlZSB0aGF0IHRoZSBmbG9hdGluZy1w
b2ludCBjYWxjdWxhdGlvbiBoYXMgZ2l2ZW4KLSAqICAgICAgIHRoZSBjb3JyZWN0bHkgcm91bmRl
ZCByZXN1bHQuICBGb3IgayByZXF1ZXN0ZWQgZGlnaXRzIGFuZAotICogICAgICAgInVuaWZvcm1s
eSIgZGlzdHJpYnV0ZWQgaW5wdXQsIHRoZSBwcm9iYWJpbGl0eSBpcwotICogICAgICAgc29tZXRo
aW5nIGxpa2UgMTBeKGstMTUpIHRoYXQgd2UgbXVzdCByZXNvcnQgdG8gdGhlIGludDMyX3QKLSAq
ICAgICAgIGNhbGN1bGF0aW9uLgotICoKLSAqIE5vdGU6ICdsZWZ0cmlnaHQnIHRyYW5zbGF0ZXMg
dG8gJ2dlbmVyYXRlIHNob3J0ZXN0IHBvc3NpYmxlIHN0cmluZycuCi0gKi8KLXRlbXBsYXRlPGJv
b2wgcm91bmRpbmdOb25lLCBib29sIHJvdW5kaW5nU2lnbmlmaWNhbnRGaWd1cmVzLCBib29sIHJv
dW5kaW5nRGVjaW1hbFBsYWNlcywgYm9vbCBsZWZ0cmlnaHQ+Ci12b2lkIGR0b2EoRHRvYUJ1ZmZl
ciByZXN1bHQsIGRvdWJsZSBkZCwgaW50IG5kaWdpdHMsIGJvb2wmIHNpZ25PdXQsIGludCYgZXhw
b25lbnRPdXQsIHVuc2lnbmVkJiBwcmVjaXNpb25PdXQpCi17Ci0gICAgLy8gRXhhY3RseSBvbmUg
cm91bmRpbmcgbW9kZSBtdXN0IGJlIHNwZWNpZmllZC4KLSAgICBBU1NFUlQocm91bmRpbmdOb25l
ICsgcm91bmRpbmdTaWduaWZpY2FudEZpZ3VyZXMgKyByb3VuZGluZ0RlY2ltYWxQbGFjZXMgPT0g
MSk7Ci0gICAgLy8gcm91bmRpbmdOb25lIG9ubHkgYWxsb3dlZCAob25seSBzZW5zaWJsZT8pIHdp
dGggbGVmdHJpZ2h0IHNldC4KLSAgICBBU1NFUlQoIXJvdW5kaW5nTm9uZSB8fCBsZWZ0cmlnaHQp
OwotCi0gICAgQVNTRVJUKGlzZmluaXRlKGRkKSk7Ci0KLSAgICBpbnQgYmJpdHMsIGIyLCBiNSwg
YmUsIGRpZywgaSwgaWVwcywgaWxpbSA9IDAsIGlsaW0wLCBpbGltMSA9IDAsCi0gICAgICAgIGos
IGoxLCBrLCBrMCwga19jaGVjaywgbTIsIG01LCBzMiwgczUsCi0gICAgICAgIHNwZWNfY2FzZTsK
LSAgICBpbnQzMl90IEw7Ci0gICAgaW50IGRlbm9ybTsKLSAgICB1aW50MzJfdCB4OwotICAgIEJp
Z0ludCBiLCBkZWx0YSwgbWxvLCBtaGksIFM7Ci0gICAgVSBkMiwgZXBzLCB1OwotICAgIGRvdWJs
ZSBkczsKLSAgICBjaGFyKiBzOwotICAgIGNoYXIqIHMwOwotCi0gICAgdS5kID0gZGQ7Ci0KLSAg
ICAvKiBJbmZpbml0eSBvciBOYU4gKi8KLSAgICBBU1NFUlQoKHdvcmQwKCZ1KSAmIEV4cF9tYXNr
KSAhPSBFeHBfbWFzayk7Ci0KLSAgICAvLyBKYXZhU2NyaXB0IHRvU3RyaW5nIGNvbnZlcnNpb24g
dHJlYXRzIC0wIGFzIDAuCi0gICAgaWYgKCFkdmFsKCZ1KSkgewotICAgICAgICBzaWduT3V0ID0g
ZmFsc2U7Ci0gICAgICAgIGV4cG9uZW50T3V0ID0gMDsKLSAgICAgICAgcHJlY2lzaW9uT3V0ID0g
MTsKLSAgICAgICAgcmVzdWx0WzBdID0gJzAnOwotICAgICAgICByZXN1bHRbMV0gPSAnXDAnOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHdvcmQwKCZ1KSAmIFNpZ25fYml0KSB7
Ci0gICAgICAgIHNpZ25PdXQgPSB0cnVlOwotICAgICAgICB3b3JkMCgmdSkgJj0gflNpZ25fYml0
OyAvLyBjbGVhciBzaWduIGJpdAotICAgIH0gZWxzZQotICAgICAgICBzaWduT3V0ID0gZmFsc2U7
Ci0KLSAgICBkMmIoYiwgJnUsICZiZSwgJmJiaXRzKTsKLSAgICBpZiAoKGkgPSAoaW50KSh3b3Jk
MCgmdSkgPj4gRXhwX3NoaWZ0MSAmIChFeHBfbWFzayA+PiBFeHBfc2hpZnQxKSkpKSB7Ci0gICAg
ICAgIGR2YWwoJmQyKSA9IGR2YWwoJnUpOwotICAgICAgICB3b3JkMCgmZDIpICY9IEZyYWNfbWFz
azE7Ci0gICAgICAgIHdvcmQwKCZkMikgfD0gRXhwXzExOwotCi0gICAgICAgIC8qIGxvZyh4KSAg
ICB+PX4gbG9nKDEuNSkgKyAoeC0xLjUpLzEuNQotICAgICAgICAgKiBsb2cxMCh4KSAgICAgPSAg
bG9nKHgpIC8gbG9nKDEwKQotICAgICAgICAgKiAgICAgICAgfj1+IGxvZygxLjUpL2xvZygxMCkg
KyAoeC0xLjUpLygxLjUqbG9nKDEwKSkKLSAgICAgICAgICogbG9nMTAoZCkgPSAoaS1CaWFzKSps
b2coMikvbG9nKDEwKSArIGxvZzEwKGQyKQotICAgICAgICAgKgotICAgICAgICAgKiBUaGlzIHN1
Z2dlc3RzIGNvbXB1dGluZyBhbiBhcHByb3hpbWF0aW9uIGsgdG8gbG9nMTAoZCkgYnkKLSAgICAg
ICAgICoKLSAgICAgICAgICogayA9IChpIC0gQmlhcykqMC4zMDEwMjk5OTU2NjM5ODEKLSAgICAg
ICAgICogICAgKyAoIChkMi0xLjUpKjAuMjg5NTI5NjU0NjAyMTY4ICsgMC4xNzYwOTEyNTkwNTU2
ODEgKTsKLSAgICAgICAgICoKLSAgICAgICAgICogV2Ugd2FudCBrIHRvIGJlIHRvbyBsYXJnZSBy
YXRoZXIgdGhhbiB0b28gc21hbGwuCi0gICAgICAgICAqIFRoZSBlcnJvciBpbiB0aGUgZmlyc3Qt
b3JkZXIgVGF5bG9yIHNlcmllcyBhcHByb3hpbWF0aW9uCi0gICAgICAgICAqIGlzIGluIG91ciBm
YXZvciwgc28gd2UganVzdCByb3VuZCB1cCB0aGUgY29uc3RhbnQgZW5vdWdoCi0gICAgICAgICAq
IHRvIGNvbXBlbnNhdGUgZm9yIGFueSBlcnJvciBpbiB0aGUgbXVsdGlwbGljYXRpb24gb2YKLSAg
ICAgICAgICogKGkgLSBCaWFzKSBieSAwLjMwMTAyOTk5NTY2Mzk4MTsgc2luY2UgfGkgLSBCaWFz
fCA8PSAxMDc3LAotICAgICAgICAgKiBhbmQgMTA3NyAqIDAuMzAxMDMgKiAyXi01MiB+PX4gNy4y
ZS0xNCwKLSAgICAgICAgICogYWRkaW5nIDFlLTEzIHRvIHRoZSBjb25zdGFudCB0ZXJtIG1vcmUg
dGhhbiBzdWZmaWNlcy4KLSAgICAgICAgICogSGVuY2Ugd2UgYWRqdXN0IHRoZSBjb25zdGFudCB0
ZXJtIHRvIDAuMTc2MDkxMjU5MDU1OC4KLSAgICAgICAgICogKFdlIGNvdWxkIGdldCBhIG1vcmUg
YWNjdXJhdGUgayBieSBpbnZva2luZyBsb2cxMCwKLSAgICAgICAgICogIGJ1dCB0aGlzIGlzIHBy
b2JhYmx5IG5vdCB3b3J0aHdoaWxlLikKLSAgICAgICAgICovCi0KLSAgICAgICAgaSAtPSBCaWFz
OwotICAgICAgICBkZW5vcm0gPSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIGQgaXMgZGVu
b3JtYWxpemVkICovCi0KLSAgICAgICAgaSA9IGJiaXRzICsgYmUgKyAoQmlhcyArIChQIC0gMSkg
LSAxKTsKLSAgICAgICAgeCA9IChpID4gMzIpID8gKHdvcmQwKCZ1KSA8PCAoNjQgLSBpKSkgfCAo
d29yZDEoJnUpID4+IChpIC0gMzIpKQotICAgICAgICAgICAgICAgIDogd29yZDEoJnUpIDw8ICgz
MiAtIGkpOwotICAgICAgICBkdmFsKCZkMikgPSB4OwotICAgICAgICB3b3JkMCgmZDIpIC09IDMx
ICogRXhwX21zazE7IC8qIGFkanVzdCBleHBvbmVudCAqLwotICAgICAgICBpIC09IChCaWFzICsg
KFAgLSAxKSAtIDEpICsgMTsKLSAgICAgICAgZGVub3JtID0gMTsKLSAgICB9Ci0gICAgZHMgPSAo
ZHZhbCgmZDIpIC0gMS41KSAqIDAuMjg5NTI5NjU0NjAyMTY4ICsgMC4xNzYwOTEyNTkwNTU4ICsg
KGkgKiAwLjMwMTAyOTk5NTY2Mzk4MSk7Ci0gICAgayA9IChpbnQpZHM7Ci0gICAgaWYgKGRzIDwg
MC4gJiYgZHMgIT0gaykKLSAgICAgICAgay0tOyAgICAvKiB3YW50IGsgPSBmbG9vcihkcykgKi8K
LSAgICBrX2NoZWNrID0gMTsKLSAgICBpZiAoayA+PSAwICYmIGsgPD0gVGVuX3BtYXgpIHsKLSAg
ICAgICAgaWYgKGR2YWwoJnUpIDwgdGVuc1trXSkKLSAgICAgICAgICAgIGstLTsKLSAgICAgICAg
a19jaGVjayA9IDA7Ci0gICAgfQotICAgIGogPSBiYml0cyAtIGkgLSAxOwotICAgIGlmIChqID49
IDApIHsKLSAgICAgICAgYjIgPSAwOwotICAgICAgICBzMiA9IGo7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgYjIgPSAtajsKLSAgICAgICAgczIgPSAwOwotICAgIH0KLSAgICBpZiAoayA+PSAwKSB7
Ci0gICAgICAgIGI1ID0gMDsKLSAgICAgICAgczUgPSBrOwotICAgICAgICBzMiArPSBrOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGIyIC09IGs7Ci0gICAgICAgIGI1ID0gLWs7Ci0gICAgICAgIHM1
ID0gMDsKLSAgICB9Ci0KLSAgICBpZiAocm91bmRpbmdOb25lKSB7Ci0gICAgICAgIGlsaW0gPSBp
bGltMSA9IC0xOwotICAgICAgICBpID0gMTg7Ci0gICAgICAgIG5kaWdpdHMgPSAwOwotICAgIH0K
LSAgICBpZiAocm91bmRpbmdTaWduaWZpY2FudEZpZ3VyZXMpIHsKLSAgICAgICAgaWYgKG5kaWdp
dHMgPD0gMCkKLSAgICAgICAgICAgIG5kaWdpdHMgPSAxOwotICAgICAgICBpbGltID0gaWxpbTEg
PSBpID0gbmRpZ2l0czsKLSAgICB9Ci0gICAgaWYgKHJvdW5kaW5nRGVjaW1hbFBsYWNlcykgewot
ICAgICAgICBpID0gbmRpZ2l0cyArIGsgKyAxOwotICAgICAgICBpbGltID0gaTsKLSAgICAgICAg
aWxpbTEgPSBpIC0gMTsKLSAgICAgICAgaWYgKGkgPD0gMCkKLSAgICAgICAgICAgIGkgPSAxOwot
ICAgIH0KLQotICAgIHMgPSBzMCA9IHJlc3VsdDsKLQotICAgIGlmIChpbGltID49IDAgJiYgaWxp
bSA8PSBRdWlja19tYXgpIHsKLSAgICAgICAgLyogVHJ5IHRvIGdldCBieSB3aXRoIGZsb2F0aW5n
LXBvaW50IGFyaXRobWV0aWMuICovCi0KLSAgICAgICAgaSA9IDA7Ci0gICAgICAgIGR2YWwoJmQy
KSA9IGR2YWwoJnUpOwotICAgICAgICBrMCA9IGs7Ci0gICAgICAgIGlsaW0wID0gaWxpbTsKLSAg
ICAgICAgaWVwcyA9IDI7IC8qIGNvbnNlcnZhdGl2ZSAqLwotICAgICAgICBpZiAoayA+IDApIHsK
LSAgICAgICAgICAgIGRzID0gdGVuc1trICYgMHhmXTsKLSAgICAgICAgICAgIGogPSBrID4+IDQ7
Ci0gICAgICAgICAgICBpZiAoaiAmIEJsZXRjaCkgewotICAgICAgICAgICAgICAgIC8qIHByZXZl
bnQgb3ZlcmZsb3dzICovCi0gICAgICAgICAgICAgICAgaiAmPSBCbGV0Y2ggLSAxOwotICAgICAg
ICAgICAgICAgIGR2YWwoJnUpIC89IGJpZ3RlbnNbbl9iaWd0ZW5zIC0gMV07Ci0gICAgICAgICAg
ICAgICAgaWVwcysrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yICg7IGo7IGogPj49
IDEsIGkrKykgewotICAgICAgICAgICAgICAgIGlmIChqICYgMSkgewotICAgICAgICAgICAgICAg
ICAgICBpZXBzKys7Ci0gICAgICAgICAgICAgICAgICAgIGRzICo9IGJpZ3RlbnNbaV07Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZHZhbCgmdSkgLz0gZHM7
Ci0gICAgICAgIH0gZWxzZSBpZiAoKGoxID0gLWspKSB7Ci0gICAgICAgICAgICBkdmFsKCZ1KSAq
PSB0ZW5zW2oxICYgMHhmXTsKLSAgICAgICAgICAgIGZvciAoaiA9IGoxID4+IDQ7IGo7IGogPj49
IDEsIGkrKykgewotICAgICAgICAgICAgICAgIGlmIChqICYgMSkgewotICAgICAgICAgICAgICAg
ICAgICBpZXBzKys7Ci0gICAgICAgICAgICAgICAgICAgIGR2YWwoJnUpICo9IGJpZ3RlbnNbaV07
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlm
IChrX2NoZWNrICYmIGR2YWwoJnUpIDwgMS4gJiYgaWxpbSA+IDApIHsKLSAgICAgICAgICAgIGlm
IChpbGltMSA8PSAwKQotICAgICAgICAgICAgICAgIGdvdG8gZmFzdEZhaWxlZDsKLSAgICAgICAg
ICAgIGlsaW0gPSBpbGltMTsKLSAgICAgICAgICAgIGstLTsKLSAgICAgICAgICAgIGR2YWwoJnUp
ICo9IDEwLjsKLSAgICAgICAgICAgIGllcHMrKzsKLSAgICAgICAgfQotICAgICAgICBkdmFsKCZl
cHMpID0gKGllcHMgKiBkdmFsKCZ1KSkgKyA3LjsKLSAgICAgICAgd29yZDAoJmVwcykgLT0gKFAg
LSAxKSAqIEV4cF9tc2sxOwotICAgICAgICBpZiAoIWlsaW0pIHsKLSAgICAgICAgICAgIFMuY2xl
YXIoKTsKLSAgICAgICAgICAgIG1oaS5jbGVhcigpOwotICAgICAgICAgICAgZHZhbCgmdSkgLT0g
NS47Ci0gICAgICAgICAgICBpZiAoZHZhbCgmdSkgPiBkdmFsKCZlcHMpKQotICAgICAgICAgICAg
ICAgIGdvdG8gb25lRGlnaXQ7Ci0gICAgICAgICAgICBpZiAoZHZhbCgmdSkgPCAtZHZhbCgmZXBz
KSkKLSAgICAgICAgICAgICAgICBnb3RvIG5vRGlnaXRzOwotICAgICAgICAgICAgZ290byBmYXN0
RmFpbGVkOwotICAgICAgICB9Ci0gICAgICAgIGlmIChsZWZ0cmlnaHQpIHsKLSAgICAgICAgICAg
IC8qIFVzZSBTdGVlbGUgJiBXaGl0ZSBtZXRob2Qgb2Ygb25seQotICAgICAgICAgICAgICogZ2Vu
ZXJhdGluZyBkaWdpdHMgbmVlZGVkLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBkdmFs
KCZlcHMpID0gKDAuNSAvIHRlbnNbaWxpbSAtIDFdKSAtIGR2YWwoJmVwcyk7Ci0gICAgICAgICAg
ICBmb3IgKGkgPSAwOzspIHsKLSAgICAgICAgICAgICAgICBMID0gKGxvbmcgaW50KWR2YWwoJnUp
OwotICAgICAgICAgICAgICAgIGR2YWwoJnUpIC09IEw7Ci0gICAgICAgICAgICAgICAgKnMrKyA9
ICcwJyArIChpbnQpTDsKLSAgICAgICAgICAgICAgICBpZiAoZHZhbCgmdSkgPCBkdmFsKCZlcHMp
KQotICAgICAgICAgICAgICAgICAgICBnb3RvIHJldDsKLSAgICAgICAgICAgICAgICBpZiAoMS4g
LSBkdmFsKCZ1KSA8IGR2YWwoJmVwcykpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gYnVtcFVw
OwotICAgICAgICAgICAgICAgIGlmICgrK2kgPj0gaWxpbSkKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgZHZhbCgmZXBzKSAqPSAxMC47Ci0gICAgICAgICAgICAg
ICAgZHZhbCgmdSkgKj0gMTAuOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgLyogR2VuZXJhdGUgaWxpbSBkaWdpdHMsIHRoZW4gZml4IHRoZW0gdXAuICovCi0g
ICAgICAgICAgICBkdmFsKCZlcHMpICo9IHRlbnNbaWxpbSAtIDFdOwotICAgICAgICAgICAgZm9y
IChpID0gMTs7IGkrKywgZHZhbCgmdSkgKj0gMTAuKSB7Ci0gICAgICAgICAgICAgICAgTCA9IChp
bnQzMl90KShkdmFsKCZ1KSk7Ci0gICAgICAgICAgICAgICAgaWYgKCEoZHZhbCgmdSkgLT0gTCkp
Ci0gICAgICAgICAgICAgICAgICAgIGlsaW0gPSBpOwotICAgICAgICAgICAgICAgICpzKysgPSAn
MCcgKyAoaW50KUw7Ci0gICAgICAgICAgICAgICAgaWYgKGkgPT0gaWxpbSkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoZHZhbCgmdSkgPiAwLjUgKyBkdmFsKCZlcHMpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgZ290byBidW1wVXA7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkdmFsKCZ1
KSA8IDAuNSAtIGR2YWwoJmVwcykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgq
LS1zID09ICcwJykgeyB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBzKys7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBnb3RvIHJldDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLWZhc3RGYWlsZWQ6Ci0gICAgICAgIHMgPSBzMDsKLSAgICAgICAgZHZhbCgmdSkgPSBk
dmFsKCZkMik7Ci0gICAgICAgIGsgPSBrMDsKLSAgICAgICAgaWxpbSA9IGlsaW0wOwotICAgIH0K
LQotICAgIC8qIERvIHdlIGhhdmUgYSAic21hbGwiIGludGVnZXI/ICovCi0KLSAgICBpZiAoYmUg
Pj0gMCAmJiBrIDw9IEludF9tYXgpIHsKLSAgICAgICAgLyogWWVzLiAqLwotICAgICAgICBkcyA9
IHRlbnNba107Ci0gICAgICAgIGlmIChuZGlnaXRzIDwgMCAmJiBpbGltIDw9IDApIHsKLSAgICAg
ICAgICAgIFMuY2xlYXIoKTsKLSAgICAgICAgICAgIG1oaS5jbGVhcigpOwotICAgICAgICAgICAg
aWYgKGlsaW0gPCAwIHx8IGR2YWwoJnUpIDw9IDUgKiBkcykKLSAgICAgICAgICAgICAgICBnb3Rv
IG5vRGlnaXRzOwotICAgICAgICAgICAgZ290byBvbmVEaWdpdDsKLSAgICAgICAgfQotICAgICAg
ICBmb3IgKGkgPSAxOzsgaSsrLCBkdmFsKCZ1KSAqPSAxMC4pIHsKLSAgICAgICAgICAgIEwgPSAo
aW50MzJfdCkoZHZhbCgmdSkgLyBkcyk7Ci0gICAgICAgICAgICBkdmFsKCZ1KSAtPSBMICogZHM7
Ci0gICAgICAgICAgICAqcysrID0gJzAnICsgKGludClMOwotICAgICAgICAgICAgaWYgKCFkdmFs
KCZ1KSkgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKGkgPT0gaWxpbSkgewotICAgICAgICAgICAgICAgIGR2YWwoJnUpICs9IGR2YWwoJnUp
OwotICAgICAgICAgICAgICAgIGlmIChkdmFsKCZ1KSA+IGRzIHx8IChkdmFsKCZ1KSA9PSBkcyAm
JiAoTCAmIDEpKSkgewotYnVtcFVwOgotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKi0tcyA9
PSAnOScpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA9PSBzMCkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGsrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcyA9
ICcwJzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgKysqcysrOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICBnb3RvIHJldDsKLSAgICB9Ci0KLSAgICBtMiA9IGIyOwotICAgIG01ID0gYjU7Ci0gICAg
bWhpLmNsZWFyKCk7Ci0gICAgbWxvLmNsZWFyKCk7Ci0gICAgaWYgKGxlZnRyaWdodCkgewotICAg
ICAgICBpID0gZGVub3JtID8gYmUgKyAoQmlhcyArIChQIC0gMSkgLSAxICsgMSkgOiAxICsgUCAt
IGJiaXRzOwotICAgICAgICBiMiArPSBpOwotICAgICAgICBzMiArPSBpOwotICAgICAgICBpMmIo
bWhpLCAxKTsKLSAgICB9Ci0gICAgaWYgKG0yID4gMCAmJiBzMiA+IDApIHsKLSAgICAgICAgaSA9
IG0yIDwgczIgPyBtMiA6IHMyOwotICAgICAgICBiMiAtPSBpOwotICAgICAgICBtMiAtPSBpOwot
ICAgICAgICBzMiAtPSBpOwotICAgIH0KLSAgICBpZiAoYjUgPiAwKSB7Ci0gICAgICAgIGlmIChs
ZWZ0cmlnaHQpIHsKLSAgICAgICAgICAgIGlmIChtNSA+IDApIHsKLSAgICAgICAgICAgICAgICBw
b3c1bXVsdChtaGksIG01KTsKLSAgICAgICAgICAgICAgICBtdWx0KGIsIG1oaSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAoKGogPSBiNSAtIG01KSkKLSAgICAgICAgICAgICAgICBw
b3c1bXVsdChiLCBqKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBwb3c1bXVsdChiLCBi
NSk7Ci0gICAgfQotICAgIGkyYihTLCAxKTsKLSAgICBpZiAoczUgPiAwKQotICAgICAgICBwb3c1
bXVsdChTLCBzNSk7Ci0KLSAgICAvKiBDaGVjayBmb3Igc3BlY2lhbCBjYXNlIHRoYXQgZCBpcyBh
IG5vcm1hbGl6ZWQgcG93ZXIgb2YgMi4gKi8KLQotICAgIHNwZWNfY2FzZSA9IDA7Ci0gICAgaWYg
KChyb3VuZGluZ05vbmUgfHwgbGVmdHJpZ2h0KSAmJiAoIXdvcmQxKCZ1KSAmJiAhKHdvcmQwKCZ1
KSAmIEJuZHJ5X21hc2spICYmIHdvcmQwKCZ1KSAmIChFeHBfbWFzayAmIH5FeHBfbXNrMSkpKSB7
Ci0gICAgICAgIC8qIFRoZSBzcGVjaWFsIGNhc2UgKi8KLSAgICAgICAgYjIgKz0gTG9nMlA7Ci0g
ICAgICAgIHMyICs9IExvZzJQOwotICAgICAgICBzcGVjX2Nhc2UgPSAxOwotICAgIH0KLQotICAg
IC8qIEFycmFuZ2UgZm9yIGNvbnZlbmllbnQgY29tcHV0YXRpb24gb2YgcXVvdGllbnRzOgotICAg
ICAqIHNoaWZ0IGxlZnQgaWYgbmVjZXNzYXJ5IHNvIGRpdmlzb3IgaGFzIDQgbGVhZGluZyAwIGJp
dHMuCi0gICAgICoKLSAgICAgKiBQZXJoYXBzIHdlIHNob3VsZCBqdXN0IGNvbXB1dGUgbGVhZGlu
ZyAyOCBiaXRzIG9mIFMgb25jZQotICAgICAqIGFuZCBmb3IgYWxsIGFuZCBwYXNzIHRoZW0gYW5k
IGEgc2hpZnQgdG8gcXVvcmVtLCBzbyBpdAotICAgICAqIGNhbiBkbyBzaGlmdHMgYW5kIG9ycyB0
byBjb21wdXRlIHRoZSBudW1lcmF0b3IgZm9yIHEuCi0gICAgICovCi0gICAgaWYgKChpID0gKChz
NSA/IDMyIC0gaGkwYml0cyhTLndvcmRzKClbUy5zaXplKCkgLSAxXSkgOiAxKSArIHMyKSAmIDB4
MWYpKQotICAgICAgICBpID0gMzIgLSBpOwotICAgIGlmIChpID4gNCkgewotICAgICAgICBpIC09
IDQ7Ci0gICAgICAgIGIyICs9IGk7Ci0gICAgICAgIG0yICs9IGk7Ci0gICAgICAgIHMyICs9IGk7
Ci0gICAgfSBlbHNlIGlmIChpIDwgNCkgewotICAgICAgICBpICs9IDI4OwotICAgICAgICBiMiAr
PSBpOwotICAgICAgICBtMiArPSBpOwotICAgICAgICBzMiArPSBpOwotICAgIH0KLSAgICBpZiAo
YjIgPiAwKQotICAgICAgICBsc2hpZnQoYiwgYjIpOwotICAgIGlmIChzMiA+IDApCi0gICAgICAg
IGxzaGlmdChTLCBzMik7Ci0gICAgaWYgKGtfY2hlY2spIHsKLSAgICAgICAgaWYgKGNtcChiLCBT
KSA8IDApIHsKLSAgICAgICAgICAgIGstLTsKLSAgICAgICAgICAgIG11bHRhZGQoYiwgMTAsIDAp
OyAgICAvKiB3ZSBib3RjaGVkIHRoZSBrIGVzdGltYXRlICovCi0gICAgICAgICAgICBpZiAobGVm
dHJpZ2h0KQotICAgICAgICAgICAgICAgIG11bHRhZGQobWhpLCAxMCwgMCk7Ci0gICAgICAgICAg
ICBpbGltID0gaWxpbTE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGlsaW0gPD0gMCAmJiBy
b3VuZGluZ0RlY2ltYWxQbGFjZXMpIHsKLSAgICAgICAgaWYgKGlsaW0gPCAwKQotICAgICAgICAg
ICAgZ290byBub0RpZ2l0czsKLSAgICAgICAgbXVsdGFkZChTLCA1LCAwKTsKLSAgICAgICAgLy8g
Rm9yIElFRUUtNzU0IHVuYmlhc2VkIHJvdW5kaW5nIHRoaXMgY2hlY2sgc2hvdWxkIGJlIDw9LCBz
dWNoIHRoYXQgMC41IHdvdWxkIGZsdXNoIHRvIHplcm8uCi0gICAgICAgIGlmIChjbXAoYiwgUykg
PCAwKQotICAgICAgICAgICAgZ290byBub0RpZ2l0czsKLSAgICAgICAgZ290byBvbmVEaWdpdDsK
LSAgICB9Ci0gICAgaWYgKGxlZnRyaWdodCkgewotICAgICAgICBpZiAobTIgPiAwKQotICAgICAg
ICAgICAgbHNoaWZ0KG1oaSwgbTIpOwotCi0gICAgICAgIC8qIENvbXB1dGUgbWxvIC0tIGNoZWNr
IGZvciBzcGVjaWFsIGNhc2UKLSAgICAgICAgICogdGhhdCBkIGlzIGEgbm9ybWFsaXplZCBwb3dl
ciBvZiAyLgotICAgICAgICAgKi8KLQotICAgICAgICBtbG8gPSBtaGk7Ci0gICAgICAgIGlmIChz
cGVjX2Nhc2UpCi0gICAgICAgICAgICBsc2hpZnQobWhpLCBMb2cyUCk7Ci0KLSAgICAgICAgZm9y
IChpID0gMTs7aSsrKSB7Ci0gICAgICAgICAgICBkaWcgPSBxdW9yZW0oYiwgUykgKyAnMCc7Ci0g
ICAgICAgICAgICAvKiBEbyB3ZSB5ZXQgaGF2ZSB0aGUgc2hvcnRlc3QgZGVjaW1hbCBzdHJpbmcK
LSAgICAgICAgICAgICAqIHRoYXQgd2lsbCByb3VuZCB0byBkPwotICAgICAgICAgICAgICovCi0g
ICAgICAgICAgICBqID0gY21wKGIsIG1sbyk7Ci0gICAgICAgICAgICBkaWZmKGRlbHRhLCBTLCBt
aGkpOwotICAgICAgICAgICAgajEgPSBkZWx0YS5zaWduID8gMSA6IGNtcChiLCBkZWx0YSk7Ci0j
aWZkZWYgRFRPQV9ST1VORF9CSUFTRUQKLSAgICAgICAgICAgIGlmIChqIDwgMCB8fCAhaikgewot
I2Vsc2UKLSAgICAgICAgICAgIC8vIEZJWE1FOiBFQ01BLTI2MiBzcGVjaWZpZXMgdGhhdCBlcXVp
ZGlzdGFudCByZXN1bHRzIHJvdW5kIGF3YXkgZnJvbQotICAgICAgICAgICAgLy8gemVybywgd2hp
Y2ggcHJvYmFibHkgbWVhbnMgd2Ugc2hvdWxkbid0IGJlIG9uIHRoZSB1bmJpYXNlZCBjb2RlIHBh
dGgKLSAgICAgICAgICAgIC8vICh0aGUgKHdvcmQxKCZ1KSAmIDEpIGNsYXVzZSBpcyBsb29raW5n
IGhpZ2hseSBzdXNwaWNpb3VzKS4gSSBoYXZlbid0Ci0gICAgICAgICAgICAvLyB5ZXQgdW5kZXJz
dG9vZCB0aGlzIGNvZGUgd2VsbCBlbm91Z2ggdG8gbWFrZSB0aGUgY2FsbCwgYnV0IHdlIHNob3Vs
ZAotICAgICAgICAgICAgLy8gcHJvYmFibHkgYmUgZW5hYmxpbmcgRFRPQV9ST1VORF9CSUFTRUQu
IEkgdGhpbmsgdGhlIGludGVyZXN0aW5nIGNvcm5lcgotICAgICAgICAgICAgLy8gY2FzZSB0byB1
bmRlcnN0YW5kIGlzIHByb2JhYmx5ICJNYXRoLnBvdygwLjUsIDI0KS50b1N0cmluZygpIi4KLSAg
ICAgICAgICAgIC8vIEkgYmVsaWV2ZSB0aGlzIHZhbHVlIGlzIGludGVyZXN0aW5nIGJlY2F1c2Ug
SSB0aGluayBpdCBpcyBwcmVjaXNlbHkKLSAgICAgICAgICAgIC8vIHJlcHJlc2VudGFibGUgaW4g
YmluYXJ5IGZsb2F0aW5nIHBvaW50LCBhbmQgaXRzIGRlY2ltYWwgcmVwcmVzZW50YXRpb24KLSAg
ICAgICAgICAgIC8vIGhhcyBhIHNpbmdsZSBkaWdpdCB0aGF0IFN0ZWVsZSAmIFdoaXRlIHJlZHVj
dGlvbiBjYW4gcmVtb3ZlLCB3aXRoIHRoZQotICAgICAgICAgICAgLy8gdmFsdWUgNSAodGh1cyBl
cXVpZGlzdGFudCBmcm9tIHRoZSBuZXh0IG51bWJlcnMgYWJvdmUgYW5kIGJlbG93KS4KLSAgICAg
ICAgICAgIC8vIFdlIHByb2R1Y2UgdGhlIGNvcnJlY3QgYW5zd2VyIHVzaW5nIGVpdGhlciBjb2Rl
cGF0aCwgYW5kIEkgZG9uJ3QgYXMKLSAgICAgICAgICAgIC8vIHlldCB1bmRlcnN0YW5kIHdoeS4g
Oi0pCi0gICAgICAgICAgICBpZiAoIWoxICYmICEod29yZDEoJnUpICYgMSkpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoZGlnID09ICc5JykKLSAgICAgICAgICAgICAgICAgICAgZ290byByb3VuZDl1
cDsKLSAgICAgICAgICAgICAgICBpZiAoaiA+IDApCi0gICAgICAgICAgICAgICAgICAgIGRpZysr
OwotICAgICAgICAgICAgICAgICpzKysgPSBkaWc7Ci0gICAgICAgICAgICAgICAgZ290byByZXQ7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaiA8IDAgfHwgKCFqICYmICEod29yZDEo
JnUpICYgMSkpKSB7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBpZiAoKGIud29yZHMoKVswXSB8
fCBiLnNpemUoKSA+IDEpICYmIChqMSA+IDApKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxzaGlm
dChiLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgajEgPSBjbXAoYiwgUyk7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIEZvciBJRUVFLTc1NCByb3VuZC10by1ldmVuLCB0aGlzIGNoZWNrIHNob3Vs
ZCBiZSAoajEgPiAwIHx8ICghajEgJiYgKGRpZyAmIDEpKSksCi0gICAgICAgICAgICAgICAgICAg
IC8vIGJ1dCBFQ01BLTI2MiBzcGVjaWZpZXMgdGhhdCBlcXVpZGlzdGFudCB2YWx1ZXMgKGUuZy4g
KC41KS50b0ZpeGVkKCkpIHNob3VsZAotICAgICAgICAgICAgICAgICAgICAvLyBiZSByb3VuZGVk
IGF3YXkgZnJvbSB6ZXJvLgotICAgICAgICAgICAgICAgICAgICBpZiAoajEgPj0gMCkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGRpZyA9PSAnOScpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ290byByb3VuZDl1cDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpZysrOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICpzKysgPSBkaWc7Ci0gICAgICAgICAgICAgICAgZ290byByZXQ7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAoajEgPiAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGRpZyA9PSAnOScp
IHsgLyogcG9zc2libGUgaWYgaSA9PSAxICovCi1yb3VuZDl1cDoKLSAgICAgICAgICAgICAgICAg
ICAgKnMrKyA9ICc5JzsKLSAgICAgICAgICAgICAgICAgICAgZ290byByb3VuZG9mZjsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgKnMrKyA9IGRpZyArIDE7Ci0gICAgICAgICAg
ICAgICAgZ290byByZXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAqcysrID0gZGlnOwot
ICAgICAgICAgICAgaWYgKGkgPT0gaWxpbSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIG11bHRhZGQoYiwgMTAsIDApOwotICAgICAgICAgICAgbXVsdGFkZChtbG8sIDEwLCAw
KTsKLSAgICAgICAgICAgIG11bHRhZGQobWhpLCAxMCwgMCk7Ci0gICAgICAgIH0KLSAgICB9IGVs
c2UgewotICAgICAgICBmb3IgKGkgPSAxOzsgaSsrKSB7Ci0gICAgICAgICAgICAqcysrID0gZGln
ID0gcXVvcmVtKGIsIFMpICsgJzAnOwotICAgICAgICAgICAgaWYgKCFiLndvcmRzKClbMF0gJiYg
Yi5zaXplKCkgPD0gMSkKLSAgICAgICAgICAgICAgICBnb3RvIHJldDsKLSAgICAgICAgICAgIGlm
IChpID49IGlsaW0pCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBtdWx0YWRk
KGIsIDEwLCAwKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIFJvdW5kIG9mZiBsYXN0IGRp
Z2l0ICovCi0KLSAgICBsc2hpZnQoYiwgMSk7Ci0gICAgaiA9IGNtcChiLCBTKTsKLSAgICAvLyBG
b3IgSUVFRS03NTQgcm91bmQtdG8tZXZlbiwgdGhpcyBjaGVjayBzaG91bGQgYmUgKGogPiAwIHx8
ICghaiAmJiAoZGlnICYgMSkpKSwKLSAgICAvLyBidXQgRUNNQS0yNjIgc3BlY2lmaWVzIHRoYXQg
ZXF1aWRpc3RhbnQgdmFsdWVzIChlLmcuICguNSkudG9GaXhlZCgpKSBzaG91bGQKLSAgICAvLyBi
ZSByb3VuZGVkIGF3YXkgZnJvbSB6ZXJvLgotICAgIGlmIChqID49IDApIHsKLXJvdW5kb2ZmOgot
ICAgICAgICB3aGlsZSAoKi0tcyA9PSAnOScpCi0gICAgICAgICAgICBpZiAocyA9PSBzMCkgewot
ICAgICAgICAgICAgICAgIGsrKzsKLSAgICAgICAgICAgICAgICAqcysrID0gJzEnOwotICAgICAg
ICAgICAgICAgIGdvdG8gcmV0OwotICAgICAgICAgICAgfQotICAgICAgICArKypzKys7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgd2hpbGUgKCotLXMgPT0gJzAnKSB7IH0KLSAgICAgICAgcysrOwot
ICAgIH0KLSAgICBnb3RvIHJldDsKLW5vRGlnaXRzOgotICAgIGV4cG9uZW50T3V0ID0gMDsKLSAg
ICBwcmVjaXNpb25PdXQgPSAxOwotICAgIHJlc3VsdFswXSA9ICcwJzsKLSAgICByZXN1bHRbMV0g
PSAnXDAnOwotICAgIHJldHVybjsKLW9uZURpZ2l0OgotICAgICpzKysgPSAnMSc7Ci0gICAgaysr
OwotICAgIGdvdG8gcmV0OwotcmV0OgotICAgIEFTU0VSVChzID4gcmVzdWx0KTsKLSAgICAqcyA9
IDA7Ci0gICAgZXhwb25lbnRPdXQgPSBrOwotICAgIHByZWNpc2lvbk91dCA9IHMgLSByZXN1bHQ7
Ci19Ci0KLXZvaWQgZHRvYShEdG9hQnVmZmVyIHJlc3VsdCwgZG91YmxlIGRkLCBib29sJiBzaWdu
LCBpbnQmIGV4cG9uZW50LCB1bnNpZ25lZCYgcHJlY2lzaW9uKQotewotICAgIC8vIGZsYWdzIGFy
ZSByb3VuZGluZ05vbmUsIGxlZnRyaWdodC4KLSAgICBkdG9hPHRydWUsIGZhbHNlLCBmYWxzZSwg
dHJ1ZT4ocmVzdWx0LCBkZCwgMCwgc2lnbiwgZXhwb25lbnQsIHByZWNpc2lvbik7Ci19Ci0KLXZv
aWQgZHRvYVJvdW5kU0YoRHRvYUJ1ZmZlciByZXN1bHQsIGRvdWJsZSBkZCwgaW50IG5kaWdpdHMs
IGJvb2wmIHNpZ24sIGludCYgZXhwb25lbnQsIHVuc2lnbmVkJiBwcmVjaXNpb24pCi17Ci0gICAg
Ly8gZmxhZyBpcyByb3VuZGluZ1NpZ25pZmljYW50RmlndXJlcy4KLSAgICBkdG9hPGZhbHNlLCB0
cnVlLCBmYWxzZSwgZmFsc2U+KHJlc3VsdCwgZGQsIG5kaWdpdHMsIHNpZ24sIGV4cG9uZW50LCBw
cmVjaXNpb24pOwotfQotCi12b2lkIGR0b2FSb3VuZERQKER0b2FCdWZmZXIgcmVzdWx0LCBkb3Vi
bGUgZGQsIGludCBuZGlnaXRzLCBib29sJiBzaWduLCBpbnQmIGV4cG9uZW50LCB1bnNpZ25lZCYg
cHJlY2lzaW9uKQotewotICAgIC8vIGZsYWcgaXMgcm91bmRpbmdEZWNpbWFsUGxhY2VzLgotICAg
IGR0b2E8ZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZT4ocmVzdWx0LCBkZCwgbmRpZ2l0cywgc2ln
biwgZXhwb25lbnQsIHByZWNpc2lvbik7Ci19Ci0KLXN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQg
Y29weUFzY2lpVG9VVEYxNihVQ2hhciogbmV4dCwgY29uc3QgY2hhciogc3JjLCB1bnNpZ25lZCBz
aXplKQorY29uc3QgY2hhciAqbnVtYmVyVG9TdHJpbmcoZG91YmxlIGQsIE51bWJlclRvU3RyaW5n
QnVmZmVyIGJ1ZmZlcikKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytp
KQotICAgICAgICAqbmV4dCsrID0gKnNyYysrOwotfQotCi11bnNpZ25lZCBudW1iZXJUb1N0cmlu
Zyhkb3VibGUgZCwgTnVtYmVyVG9TdHJpbmdCdWZmZXIgYnVmZmVyKQotewotICAgIC8vIEhhbmRs
ZSBOYU4gYW5kIEluZmluaXR5LgotICAgIGlmICghaXNmaW5pdGUoZCkpIHsKLSAgICAgICAgaWYg
KGlzbmFuKGQpKSB7Ci0gICAgICAgICAgICBjb3B5QXNjaWlUb1VURjE2KGJ1ZmZlciwgIk5hTiIs
IDMpOwotICAgICAgICAgICAgcmV0dXJuIDM7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGQgPiAw
KSB7Ci0gICAgICAgICAgICBjb3B5QXNjaWlUb1VURjE2KGJ1ZmZlciwgIkluZmluaXR5IiwgOCk7
Ci0gICAgICAgICAgICByZXR1cm4gODsKLSAgICAgICAgfQotICAgICAgICBjb3B5QXNjaWlUb1VU
RjE2KGJ1ZmZlciwgIi1JbmZpbml0eSIsIDkpOwotICAgICAgICByZXR1cm4gOTsKLSAgICB9Ci0K
LSAgICAvLyBDb252ZXJ0IHRvIGRlY2ltYWwgd2l0aCByb3VuZGluZy4KLSAgICBEZWNpbWFsTnVt
YmVyIG51bWJlcihkKTsKLSAgICByZXR1cm4gbnVtYmVyLmV4cG9uZW50KCkgPj0gLTYgJiYgbnVt
YmVyLmV4cG9uZW50KCkgPCAyMQotICAgICAgICA/IG51bWJlci50b1N0cmluZ0RlY2ltYWwoYnVm
ZmVyLCBOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCkKLSAgICAgICAgOiBudW1iZXIudG9TdHJp
bmdFeHBvbmVudGlhbChidWZmZXIsIE51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoKTsKKyAgICBk
b3VibGVfY29udmVyc2lvbjo6U3RyaW5nQnVpbGRlciBidWlsZGVyKGJ1ZmZlciwgTnVtYmVyVG9T
dHJpbmdCdWZmZXJMZW5ndGgpOworICAgIGNvbnN0IGRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGVU
b1N0cmluZ0NvbnZlcnRlciYgY29udmVydGVyID0gZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZVRv
U3RyaW5nQ29udmVydGVyOjpFY21hU2NyaXB0Q29udmVydGVyKCk7CisgICAgY29udmVydGVyLlRv
U2hvcnRlc3QoZCwgJmJ1aWxkZXIpOworICAgIHJldHVybiBidWlsZGVyLkZpbmFsaXplKCk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9kdG9hLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EuaAppbmRleCAzOTI0
YTFjYzQwNWRiMjkzYjAxZjZkNGJkYWU2NTc1OTUyNTgxNzJjLi43MGVlYzEyZTQzNTVjM2I3YjQ1
MGNlNzkyOTIxYjgyZmE1ZTJlYmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL2R0b2EuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EuaApAQCAtMjEs
NyArMjEsNyBAQAogI2lmbmRlZiBXVEZfZHRvYV9oCiAjZGVmaW5lIFdURl9kdG9hX2gKIAotI2lu
Y2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KKyNpbmNsdWRlIDx3dGYvZHRvYS9kb3VibGUt
Y29udmVyc2lvbi5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIGNsYXNzIE11dGV4OwpAQCAtMzIsMTYg
KzMyLDEwIEBAIGV4dGVybiBXVEY6Ok11dGV4KiBzX2R0b2FQNU11dGV4OwogLy8gc2U6ICpzZSB3
aWxsIGhhdmUgdGhlIGxhc3QgY29uc3VtZWQgY2hhcmFjdGVyIHBvc2l0aW9uICsgMS4KIGRvdWJs
ZSBzdHJ0b2QoY29uc3QgY2hhciogczAwLCBjaGFyKiogc2UpOwogCi10eXBlZGVmIGNoYXIgRHRv
YUJ1ZmZlcls4MF07Ci0KLXZvaWQgZHRvYShEdG9hQnVmZmVyIHJlc3VsdCwgZG91YmxlIGRkLCBi
b29sJiBzaWduLCBpbnQmIGV4cG9uZW50LCB1bnNpZ25lZCYgcHJlY2lzaW9uKTsKLXZvaWQgZHRv
YVJvdW5kU0YoRHRvYUJ1ZmZlciByZXN1bHQsIGRvdWJsZSBkZCwgaW50IG5kaWdpdHMsIGJvb2wm
IHNpZ24sIGludCYgZXhwb25lbnQsIHVuc2lnbmVkJiBwcmVjaXNpb24pOwotdm9pZCBkdG9hUm91
bmREUChEdG9hQnVmZmVyIHJlc3VsdCwgZG91YmxlIGRkLCBpbnQgbmRpZ2l0cywgYm9vbCYgc2ln
biwgaW50JiBleHBvbmVudCwgdW5zaWduZWQmIHByZWNpc2lvbik7Ci0KIC8vIFNpemUgPSA4MCBm
b3Igc2l6ZW9mKER0b2FCdWZmZXIpICsgc29tZSBzaWduIGJpdHMsIGRlY2ltYWwgcG9pbnQsICdl
JywgZXhwb25lbnQgZGlnaXRzLgogY29uc3QgdW5zaWduZWQgTnVtYmVyVG9TdHJpbmdCdWZmZXJM
ZW5ndGggPSA5NjsKLXR5cGVkZWYgVUNoYXIgTnVtYmVyVG9TdHJpbmdCdWZmZXJbTnVtYmVyVG9T
dHJpbmdCdWZmZXJMZW5ndGhdOwotdW5zaWduZWQgbnVtYmVyVG9TdHJpbmcoZG91YmxlLCBOdW1i
ZXJUb1N0cmluZ0J1ZmZlcik7Cit0eXBlZGVmIGNoYXIgTnVtYmVyVG9TdHJpbmdCdWZmZXJbTnVt
YmVyVG9TdHJpbmdCdWZmZXJMZW5ndGhdOworY29uc3QgY2hhciAqbnVtYmVyVG9TdHJpbmcoZG91
YmxlLCBOdW1iZXJUb1N0cmluZ0J1ZmZlcik7CiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvQ09QWUlORyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvZHRvYS9DT1BZSU5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkzMzcxOGE5ZWY5ZGFl
NGNiNGFmYTU2ZTQ5MDIxMTc2MGQ4YTk0OWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL2R0b2EvQ09QWUlORwpAQCAtMCwwICsxLDI2IEBACitDb3B5cmlnaHQg
MjAwNi0yMDExLCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCittZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZworICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgICAgICB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
K0xJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKK09XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCitEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKK1RIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9MSUNFTlNFIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL0xJQ0VOU0UKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTMzNzE4
YTllZjlkYWU0Y2I0YWZhNTZlNDkwMjExNzYwZDhhOTQ5ZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9MSUNFTlNFCkBAIC0wLDAgKzEsMjYgQEAKK0Nv
cHlyaWdodCAyMDA2LTIwMTEsIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKK21ldDoKKworICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAgICAgIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCitBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCitTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CitMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKK0RBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCitP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL1JF
QURNRSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9SRUFETUUKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZjE4NmI0MjBmNDJiYzE0YzdkNTc2NWVhNDNmNmIyOGQzYzI5YjkyMQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9SRUFETUUKQEAgLTAsMCArMSwxMSBA
QAoraHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2RvdWJsZS1jb252ZXJzaW9uCisKK1RoaXMgcHJv
amVjdCAoZG91YmxlLWNvbnZlcnNpb24pIHByb3ZpZGVzIGJpbmFyeS1kZWNpbWFsIGFuZCBkZWNp
bWFsLWJpbmFyeQorcm91dGluZXMgZm9yIElFRUUgZG91Ymxlcy4KKworVGhlIGxpYnJhcnkgY29u
c2lzdHMgb2YgZWZmaWNpZW50IGNvbnZlcnNpb24gcm91dGluZXMgdGhhdCBoYXZlIGJlZW4gZXh0
cmFjdGVkCitmcm9tIHRoZSBWOCBKYXZhU2NyaXB0IGVuZ2luZS4gVGhlIGNvZGUgaGFzIGJlZW4g
cmVmYWN0b3JlZCBhbmQgaW1wcm92ZWQgc28gdGhhdAoraXQgY2FuIGJlIHVzZWQgbW9yZSBlYXNp
bHkgaW4gb3RoZXIgcHJvamVjdHMuCisKK1RoZXJlIGlzIGV4dGVuc2l2ZSBkb2N1bWVudGF0aW9u
IGluIHNyYy9kb3VibGUtY29udmVyc2lvbi5oLiBPdGhlciBleGFtcGxlcyBjYW4KK2JlIGZvdW5k
IGluIHRlc3QvY2N0ZXN0L3Rlc3QtY29udmVyc2lvbnMuY2MuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvYmlnbnVtLWR0b2EuY2MgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL2R0b2EvYmlnbnVtLWR0b2EuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTQ5YjBhMGRiNDVmZWFm
OWVkMDg2YTc2OWQ4NDE5MTljYjNlZjIzMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvZHRvYS9iaWdudW0tZHRvYS5jYwpAQCAtMCwwICsxLDY1MyBAQAorLy8g
Q29weXJpZ2h0IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlz
Y2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkCisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKy8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisv
LyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSAi
YmlnbnVtLWR0b2EuaCIKKworI2luY2x1ZGUgImJpZ251bS5oIgorI2luY2x1ZGUgImRvdWJsZS5o
IgorCituYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIHN0YXRpYyBpbnQg
Tm9ybWFsaXplZEV4cG9uZW50KHVpbnQ2NF90IHNpZ25pZmljYW5kLCBpbnQgZXhwb25lbnQpIHsK
KyAgICAgICAgQVNTRVJUKHNpZ25pZmljYW5kICE9IDApOworICAgICAgICB3aGlsZSAoKHNpZ25p
ZmljYW5kICYgRG91YmxlOjprSGlkZGVuQml0KSA9PSAwKSB7CisgICAgICAgICAgICBzaWduaWZp
Y2FuZCA9IHNpZ25pZmljYW5kIDw8IDE7CisgICAgICAgICAgICBleHBvbmVudCA9IGV4cG9uZW50
IC0gMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZXhwb25lbnQ7CisgICAgfQorICAgIAor
ICAgIAorICAgIC8vIEZvcndhcmQgZGVjbGFyYXRpb25zOgorICAgIC8vIFJldHVybnMgYW4gZXN0
aW1hdGlvbiBvZiBrIHN1Y2ggdGhhdCAxMF4oay0xKSA8PSB2IDwgMTBeay4KKyAgICBzdGF0aWMg
aW50IEVzdGltYXRlUG93ZXIoaW50IGV4cG9uZW50KTsKKyAgICAvLyBDb21wdXRlcyB2IC8gMTBe
ZXN0aW1hdGVkX3Bvd2VyIGV4YWN0bHksIGFzIGEgcmF0aW8gb2YgdHdvIGJpZ251bXMsIG51bWVy
YXRvcgorICAgIC8vIGFuZCBkZW5vbWluYXRvci4KKyAgICBzdGF0aWMgdm9pZCBJbml0aWFsU2Nh
bGVkU3RhcnRWYWx1ZXMoZG91YmxlIHYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBlc3RpbWF0ZWRfcG93ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgbmVlZF9ib3VuZGFyeV9kZWx0YXMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogbnVtZXJhdG9yLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIGRlbm9taW5hdG9yLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIGRlbHRhX21pbnVz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIGRlbHRh
X3BsdXMpOworICAgIC8vIE11bHRpcGxpZXMgbnVtZXJhdG9yL2Rlbm9taW5hdG9yIHNvIHRoYXQg
aXRzIHZhbHVlcyBsaWVzIGluIHRoZSByYW5nZSAxLTEwLgorICAgIC8vIFJldHVybnMgZGVjaW1h
bF9wb2ludCBzLnQuCisgICAgLy8gIHYgPSBudW1lcmF0b3InL2Rlbm9taW5hdG9yJyAqIDEwXihk
ZWNpbWFsX3BvaW50LTEpCisgICAgLy8gICAgIHdoZXJlIG51bWVyYXRvcicgYW5kIGRlbm9taW5h
dG9yJyBhcmUgdGhlIHZhbHVlcyBvZiBudW1lcmF0b3IgYW5kCisgICAgLy8gICAgIGRlbm9taW5h
dG9yIGFmdGVyIHRoZSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24uCisgICAgc3RhdGljIHZvaWQgRml4
dXBNdWx0aXBseTEwKGludCBlc3RpbWF0ZWRfcG93ZXIsIGJvb2wgaXNfZXZlbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBkZWNpbWFsX3BvaW50LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBCaWdudW0qIG51bWVyYXRvciwgQmlnbnVtKiBkZW5vbWluYXRv
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBkZWx0YV9taW51cywg
QmlnbnVtKiBkZWx0YV9wbHVzKTsKKyAgICAvLyBHZW5lcmF0ZXMgZGlnaXRzIGZyb20gdGhlIGxl
ZnQgdG8gdGhlIHJpZ2h0IGFuZCBzdG9wcyB3aGVuIHRoZSBnZW5lcmF0ZWQKKyAgICAvLyBkaWdp
dHMgeWllbGQgdGhlIHNob3J0ZXN0IGRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2Ygdi4KKyAgICBz
dGF0aWMgdm9pZCBHZW5lcmF0ZVNob3J0ZXN0RGlnaXRzKEJpZ251bSogbnVtZXJhdG9yLCBCaWdu
dW0qIGRlbm9taW5hdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QmlnbnVtKiBkZWx0YV9taW51cywgQmlnbnVtKiBkZWx0YV9wbHVzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc19ldmVuLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwgaW50KiBsZW5ndGgpOwor
ICAgIC8vIEdlbmVyYXRlcyAncmVxdWVzdGVkX2RpZ2l0cycgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9p
bnQuCisgICAgc3RhdGljIHZvaWQgQmlnbnVtVG9GaXhlZChpbnQgcmVxdWVzdGVkX2RpZ2l0cywg
aW50KiBkZWNpbWFsX3BvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVt
KiBudW1lcmF0b3IsIEJpZ251bSogZGVub21pbmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBWZWN0b3I8Y2hhcj4oYnVmZmVyKSwgaW50KiBsZW5ndGgpOworICAgIC8vIEdlbmVy
YXRlcyAnY291bnQnIGRpZ2l0cyBvZiBudW1lcmF0b3IvZGVub21pbmF0b3IuCisgICAgLy8gT25j
ZSAnY291bnQnIGRpZ2l0cyBoYXZlIGJlZW4gcHJvZHVjZWQgcm91bmRzIHRoZSByZXN1bHQgZGVw
ZW5kaW5nIG9uIHRoZQorICAgIC8vIHJlbWFpbmRlciAocmVtYWluZGVycyBvZiBleGFjdGx5IC41
IHJvdW5kIHVwd2FyZHMpLiBNaWdodCB1cGRhdGUgdGhlCisgICAgLy8gZGVjaW1hbF9wb2ludCB3
aGVuIHJvdW5kaW5nIHVwIChmb3IgZXhhbXBsZSBmb3IgMC45OTk5KS4KKyAgICBzdGF0aWMgdm9p
ZCBHZW5lcmF0ZUNvdW50ZWREaWdpdHMoaW50IGNvdW50LCBpbnQqIGRlY2ltYWxfcG9pbnQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogbnVtZXJhdG9yLCBC
aWdudW0qIGRlbm9taW5hdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBWZWN0b3I8Y2hhcj4oYnVmZmVyKSwgaW50KiBsZW5ndGgpOworICAgIAorICAgIAorICAgIHZv
aWQgQmlnbnVtRHRvYShkb3VibGUgdiwgQmlnbnVtRHRvYU1vZGUgbW9kZSwgaW50IHJlcXVlc3Rl
ZF9kaWdpdHMsCisgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXIsIGludCog
bGVuZ3RoLCBpbnQqIGRlY2ltYWxfcG9pbnQpIHsKKyAgICAgICAgQVNTRVJUKHYgPiAwKTsKKyAg
ICAgICAgQVNTRVJUKCFEb3VibGUodikuSXNTcGVjaWFsKCkpOworICAgICAgICB1aW50NjRfdCBz
aWduaWZpY2FuZCA9IERvdWJsZSh2KS5TaWduaWZpY2FuZCgpOworICAgICAgICBib29sIGlzX2V2
ZW4gPSAoc2lnbmlmaWNhbmQgJiAxKSA9PSAwOworICAgICAgICBpbnQgZXhwb25lbnQgPSBEb3Vi
bGUodikuRXhwb25lbnQoKTsKKyAgICAgICAgaW50IG5vcm1hbGl6ZWRfZXhwb25lbnQgPSBOb3Jt
YWxpemVkRXhwb25lbnQoc2lnbmlmaWNhbmQsIGV4cG9uZW50KTsKKyAgICAgICAgLy8gZXN0aW1h
dGVkX3Bvd2VyIG1pZ2h0IGJlIHRvbyBsb3cgYnkgMS4KKyAgICAgICAgaW50IGVzdGltYXRlZF9w
b3dlciA9IEVzdGltYXRlUG93ZXIobm9ybWFsaXplZF9leHBvbmVudCk7CisgICAgICAgIAorICAg
ICAgICAvLyBTaG9ydGN1dCBmb3IgRml4ZWQuCisgICAgICAgIC8vIFRoZSByZXF1ZXN0ZWQgZGln
aXRzIGNvcnJlc3BvbmQgdG8gdGhlIGRpZ2l0cyBhZnRlciB0aGUgcG9pbnQuIElmIHRoZQorICAg
ICAgICAvLyBudW1iZXIgaXMgbXVjaCB0b28gc21hbGwsIHRoZW4gdGhlcmUgaXMgbm8gbmVlZCBp
biB0cnlpbmcgdG8gZ2V0IGFueQorICAgICAgICAvLyBkaWdpdHMuCisgICAgICAgIGlmIChtb2Rl
ID09IEJJR05VTV9EVE9BX0ZJWEVEICYmIC1lc3RpbWF0ZWRfcG93ZXIgLSAxID4gcmVxdWVzdGVk
X2RpZ2l0cykgeworICAgICAgICAgICAgYnVmZmVyWzBdID0gJ1wwJzsKKyAgICAgICAgICAgICps
ZW5ndGggPSAwOworICAgICAgICAgICAgLy8gU2V0IGRlY2ltYWwtcG9pbnQgdG8gLXJlcXVlc3Rl
ZF9kaWdpdHMuIFRoaXMgaXMgd2hhdCBHYXkgZG9lcy4KKyAgICAgICAgICAgIC8vIE5vdGUgdGhh
dCBpdCBzaG91bGQgbm90IGhhdmUgYW55IGVmZmVjdCBhbnl3YXlzIHNpbmNlIHRoZSBzdHJpbmcg
aXMKKyAgICAgICAgICAgIC8vIGVtcHR5LgorICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSAt
cmVxdWVzdGVkX2RpZ2l0czsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgQmlnbnVtIG51bWVyYXRvcjsKKyAgICAgICAgQmlnbnVtIGRlbm9taW5hdG9y
OworICAgICAgICBCaWdudW0gZGVsdGFfbWludXM7CisgICAgICAgIEJpZ251bSBkZWx0YV9wbHVz
OworICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGJpZ251bSBjYW4gZ3JvdyBsYXJnZSBlbm91Z2gu
IFRoZSBzbWFsbGVzdCBkb3VibGUgZXF1YWxzCisgICAgICAgIC8vIDRlLTMyNC4gSW4gdGhpcyBj
YXNlIHRoZSBkZW5vbWluYXRvciBuZWVkcyBmZXdlciB0aGFuIDMyNCo0IGJpbmFyeSBkaWdpdHMu
CisgICAgICAgIC8vIFRoZSBtYXhpbXVtIGRvdWJsZSBpcyAxLjc5NzY5MzEzNDg2MjMxNTdlMzA4
IHdoaWNoIG5lZWRzIGZld2VyIHRoYW4KKyAgICAgICAgLy8gMzA4KjQgYmluYXJ5IGRpZ2l0cy4K
KyAgICAgICAgQVNTRVJUKEJpZ251bTo6a01heFNpZ25pZmljYW50Qml0cyA+PSAzMjQqNCk7Cisg
ICAgICAgIGJvb2wgbmVlZF9ib3VuZGFyeV9kZWx0YXMgPSAobW9kZSA9PSBCSUdOVU1fRFRPQV9T
SE9SVEVTVCk7CisgICAgICAgIEluaXRpYWxTY2FsZWRTdGFydFZhbHVlcyh2LCBlc3RpbWF0ZWRf
cG93ZXIsIG5lZWRfYm91bmRhcnlfZGVsdGFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJm51bWVyYXRvciwgJmRlbm9taW5hdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJmRlbHRhX21pbnVzLCAmZGVsdGFfcGx1cyk7CisgICAgICAgIC8vIFdlIG5vdyBo
YXZlIHYgPSAobnVtZXJhdG9yIC8gZGVub21pbmF0b3IpICogMTBeZXN0aW1hdGVkX3Bvd2VyLgor
ICAgICAgICBGaXh1cE11bHRpcGx5MTAoZXN0aW1hdGVkX3Bvd2VyLCBpc19ldmVuLCBkZWNpbWFs
X3BvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgJm51bWVyYXRvciwgJmRlbm9taW5hdG9y
LAorICAgICAgICAgICAgICAgICAgICAgICAgJmRlbHRhX21pbnVzLCAmZGVsdGFfcGx1cyk7Cisg
ICAgICAgIC8vIFdlIG5vdyBoYXZlIHYgPSAobnVtZXJhdG9yIC8gZGVub21pbmF0b3IpICogMTBe
KGRlY2ltYWxfcG9pbnQtMSksIGFuZAorICAgICAgICAvLyAgMSA8PSAobnVtZXJhdG9yICsgZGVs
dGFfcGx1cykgLyBkZW5vbWluYXRvciA8IDEwCisgICAgICAgIHN3aXRjaCAobW9kZSkgeworICAg
ICAgICAgICAgY2FzZSBCSUdOVU1fRFRPQV9TSE9SVEVTVDoKKyAgICAgICAgICAgICAgICBHZW5l
cmF0ZVNob3J0ZXN0RGlnaXRzKCZudW1lcmF0b3IsICZkZW5vbWluYXRvciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkZWx0YV9taW51cywgJmRlbHRhX3BsdXMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19ldmVuLCBidWZmZXIsIGxl
bmd0aCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJJR05VTV9E
VE9BX0ZJWEVEOgorICAgICAgICAgICAgICAgIEJpZ251bVRvRml4ZWQocmVxdWVzdGVkX2RpZ2l0
cywgZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZudW1lcmF0
b3IsICZkZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwg
bGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQklHTlVN
X0RUT0FfUFJFQ0lTSU9OOgorICAgICAgICAgICAgICAgIEdlbmVyYXRlQ291bnRlZERpZ2l0cyhy
ZXF1ZXN0ZWRfZGlnaXRzLCBkZWNpbWFsX3BvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmbnVtZXJhdG9yLCAmZGVub21pbmF0b3IsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgfQorICAgICAgICBidWZmZXJbKmxlbmd0aF0gPSAnXDAnOworICAgIH0KKyAg
ICAKKyAgICAKKyAgICAvLyBUaGUgcHJvY2VkdXJlIHN0YXJ0cyBnZW5lcmF0aW5nIGRpZ2l0cyBm
cm9tIHRoZSBsZWZ0IHRvIHRoZSByaWdodCBhbmQgc3RvcHMKKyAgICAvLyB3aGVuIHRoZSBnZW5l
cmF0ZWQgZGlnaXRzIHlpZWxkIHRoZSBzaG9ydGVzdCBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9m
IHYuIEEKKyAgICAvLyBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIHYgaXMgYSBudW1iZXIgbHlp
bmcgY2xvc2VyIHRvIHYgdGhhbiB0byBhbnkgb3RoZXIKKyAgICAvLyBkb3VibGUsIHNvIGl0IGNv
bnZlcnRzIHRvIHYgd2hlbiByZWFkLgorICAgIC8vCisgICAgLy8gVGhpcyBpcyB0cnVlIGlmIGQs
IHRoZSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uLCBpcyBiZXR3ZWVuIG0tIGFuZCBtKywgdGhlCisg
ICAgLy8gdXBwZXIgYW5kIGxvd2VyIGJvdW5kYXJpZXMuIGQgbXVzdCBiZSBzdHJpY3RseSBiZXR3
ZWVuIHRoZW0gaWYgIWlzX2V2ZW4uCisgICAgLy8gICAgICAgICAgIG0tIDo9IChudW1lcmF0b3Ig
LSBkZWx0YV9taW51cykgLyBkZW5vbWluYXRvcgorICAgIC8vICAgICAgICAgICBtKyA6PSAobnVt
ZXJhdG9yICsgZGVsdGFfcGx1cykgLyBkZW5vbWluYXRvcgorICAgIC8vCisgICAgLy8gUHJlY29u
ZGl0aW9uOiAwIDw9IChudW1lcmF0b3IrZGVsdGFfcGx1cykgLyBkZW5vbWluYXRvciA8IDEwLgor
ICAgIC8vICAgSWYgMSA8PSAobnVtZXJhdG9yK2RlbHRhX3BsdXMpIC8gZGVub21pbmF0b3IgPCAx
MCB0aGVuIG5vIGxlYWRpbmcgMCBkaWdpdAorICAgIC8vICAgd2lsbCBiZSBwcm9kdWNlZC4gVGhp
cyBzaG91bGQgYmUgdGhlIHN0YW5kYXJkIHByZWNvbmRpdGlvbi4KKyAgICBzdGF0aWMgdm9pZCBH
ZW5lcmF0ZVNob3J0ZXN0RGlnaXRzKEJpZ251bSogbnVtZXJhdG9yLCBCaWdudW0qIGRlbm9taW5h
dG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBkZWx0
YV9taW51cywgQmlnbnVtKiBkZWx0YV9wbHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBpc19ldmVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwgaW50KiBsZW5ndGgpIHsKKyAgICAgICAgLy8g
U21hbGwgb3B0aW1pemF0aW9uOiBpZiBkZWx0YV9taW51cyBhbmQgZGVsdGFfcGx1cyBhcmUgdGhl
IHNhbWUganVzdCByZXVzZQorICAgICAgICAvLyBvbmUgb2YgdGhlIHR3byBiaWdudW1zLgorICAg
ICAgICBpZiAoQmlnbnVtOjpFcXVhbCgqZGVsdGFfbWludXMsICpkZWx0YV9wbHVzKSkgeworICAg
ICAgICAgICAgZGVsdGFfcGx1cyA9IGRlbHRhX21pbnVzOworICAgICAgICB9CisgICAgICAgICps
ZW5ndGggPSAwOworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgdWludDE2X3Qg
ZGlnaXQ7CisgICAgICAgICAgICBkaWdpdCA9IG51bWVyYXRvci0+RGl2aWRlTW9kdWxvSW50Qmln
bnVtKCpkZW5vbWluYXRvcik7CisgICAgICAgICAgICBBU1NFUlQoZGlnaXQgPD0gOSk7ICAvLyBk
aWdpdCBpcyBhIHVpbnQxNl90IGFuZCB0aGVyZWZvcmUgYWx3YXlzIHBvc2l0aXZlLgorICAgICAg
ICAgICAgLy8gZGlnaXQgPSBudW1lcmF0b3IgLyBkZW5vbWluYXRvciAoaW50ZWdlciBkaXZpc2lv
bikuCisgICAgICAgICAgICAvLyBudW1lcmF0b3IgPSBudW1lcmF0b3IgJSBkZW5vbWluYXRvci4K
KyAgICAgICAgICAgIGJ1ZmZlclsoKmxlbmd0aCkrK10gPSBkaWdpdCArICcwJzsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgLy8gQ2FuIHdlIHN0b3AgYWxyZWFkeT8KKyAgICAgICAgICAgIC8v
IElmIHRoZSByZW1haW5kZXIgb2YgdGhlIGRpdmlzaW9uIGlzIGxlc3MgdGhhbiB0aGUgZGlzdGFu
Y2UgdG8gdGhlIGxvd2VyCisgICAgICAgICAgICAvLyBib3VuZGFyeSB3ZSBjYW4gc3RvcC4gSW4g
dGhpcyBjYXNlIHdlIHNpbXBseSByb3VuZCBkb3duIChkaXNjYXJkaW5nIHRoZQorICAgICAgICAg
ICAgLy8gcmVtYWluZGVyKS4KKyAgICAgICAgICAgIC8vIFNpbWlsYXJseSB3ZSB0ZXN0IGlmIHdl
IGNhbiByb3VuZCB1cCAodXNpbmcgdGhlIHVwcGVyIGJvdW5kYXJ5KS4KKyAgICAgICAgICAgIGJv
b2wgaW5fZGVsdGFfcm9vbV9taW51czsKKyAgICAgICAgICAgIGJvb2wgaW5fZGVsdGFfcm9vbV9w
bHVzOworICAgICAgICAgICAgaWYgKGlzX2V2ZW4pIHsKKyAgICAgICAgICAgICAgICBpbl9kZWx0
YV9yb29tX21pbnVzID0gQmlnbnVtOjpMZXNzRXF1YWwoKm51bWVyYXRvciwgKmRlbHRhX21pbnVz
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaW5fZGVsdGFfcm9vbV9t
aW51cyA9IEJpZ251bTo6TGVzcygqbnVtZXJhdG9yLCAqZGVsdGFfbWludXMpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKGlzX2V2ZW4pIHsKKyAgICAgICAgICAgICAgICBpbl9kZWx0
YV9yb29tX3BsdXMgPQorICAgICAgICAgICAgICAgIEJpZ251bTo6UGx1c0NvbXBhcmUoKm51bWVy
YXRvciwgKmRlbHRhX3BsdXMsICpkZW5vbWluYXRvcikgPj0gMDsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgaW5fZGVsdGFfcm9vbV9wbHVzID0KKyAgICAgICAgICAgICAg
ICBCaWdudW06OlBsdXNDb21wYXJlKCpudW1lcmF0b3IsICpkZWx0YV9wbHVzLCAqZGVub21pbmF0
b3IpID4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghaW5fZGVsdGFfcm9vbV9t
aW51cyAmJiAhaW5fZGVsdGFfcm9vbV9wbHVzKSB7CisgICAgICAgICAgICAgICAgLy8gUHJlcGFy
ZSBmb3IgbmV4dCBpdGVyYXRpb24uCisgICAgICAgICAgICAgICAgbnVtZXJhdG9yLT5UaW1lczEw
KCk7CisgICAgICAgICAgICAgICAgZGVsdGFfbWludXMtPlRpbWVzMTAoKTsKKyAgICAgICAgICAg
ICAgICAvLyBXZSBvcHRpbWl6ZWQgZGVsdGFfcGx1cyB0byBiZSBlcXVhbCB0byBkZWx0YV9taW51
cyAoaWYgdGhleSBzaGFyZSB0aGUKKyAgICAgICAgICAgICAgICAvLyBzYW1lIHZhbHVlKS4gU28g
ZG9uJ3QgbXVsdGlwbHkgZGVsdGFfcGx1cyBpZiB0aGV5IHBvaW50IHRvIHRoZSBzYW1lCisgICAg
ICAgICAgICAgICAgLy8gb2JqZWN0LgorICAgICAgICAgICAgICAgIGlmIChkZWx0YV9taW51cyAh
PSBkZWx0YV9wbHVzKSB7CisgICAgICAgICAgICAgICAgICAgIGRlbHRhX3BsdXMtPlRpbWVzMTAo
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGluX2RlbHRhX3Jv
b21fbWludXMgJiYgaW5fZGVsdGFfcm9vbV9wbHVzKSB7CisgICAgICAgICAgICAgICAgLy8gTGV0
J3Mgc2VlIGlmIDIqbnVtZXJhdG9yIDwgZGVub21pbmF0b3IuCisgICAgICAgICAgICAgICAgLy8g
SWYgeWVzLCB0aGVuIHRoZSBuZXh0IGRpZ2l0IHdvdWxkIGJlIDwgNSBhbmQgd2UgY2FuIHJvdW5k
IGRvd24uCisgICAgICAgICAgICAgICAgaW50IGNvbXBhcmUgPSBCaWdudW06OlBsdXNDb21wYXJl
KCpudW1lcmF0b3IsICpudW1lcmF0b3IsICpkZW5vbWluYXRvcik7CisgICAgICAgICAgICAgICAg
aWYgKGNvbXBhcmUgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFJlbWFpbmluZyBkaWdp
dHMgYXJlIGxlc3MgdGhhbiAuNS4gLT4gUm91bmQgZG93biAoPT0gZG8gbm90aGluZykuCisgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChjb21wYXJlID4gMCkgeworICAgICAgICAgICAgICAgICAg
ICAvLyBSZW1haW5pbmcgZGlnaXRzIGFyZSBtb3JlIHRoYW4gLjUgb2YgZGVub21pbmF0b3IuIC0+
IFJvdW5kIHVwLgorICAgICAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGhlIGxhc3QgZGln
aXQgY291bGQgbm90IGJlIGEgJzknIGFzIG90aGVyd2lzZSB0aGUgd2hvbGUKKyAgICAgICAgICAg
ICAgICAgICAgLy8gbG9vcCB3b3VsZCBoYXZlIHN0b3BwZWQgZWFybGllci4KKyAgICAgICAgICAg
ICAgICAgICAgLy8gV2Ugc3RpbGwgaGF2ZSBhbiBhc3NlcnQgaGVyZSBpbiBjYXNlIHRoZSBwcmVj
b25kaXRpb25zIHdlcmUgbm90CisgICAgICAgICAgICAgICAgICAgIC8vIHNhdGlzZmllZC4KKyAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKGJ1ZmZlclsoKmxlbmd0aCkgLSAxXSAhPSAnOScpOwor
ICAgICAgICAgICAgICAgICAgICBidWZmZXJbKCpsZW5ndGgpIC0gMV0rKzsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBIYWxmd2F5IGNhc2UuCisgICAg
ICAgICAgICAgICAgICAgIC8vIFRPRE8oZmxvaXRzY2gpOiBuZWVkIGEgd2F5IHRvIHNvbHZlIGhh
bGYtd2F5IGNhc2VzLgorICAgICAgICAgICAgICAgICAgICAvLyAgIEZvciBub3cgbGV0J3Mgcm91
bmQgdG93YXJkcyBldmVuIChzaW5jZSB0aGlzIGlzIHdoYXQgR2F5IHNlZW1zIHRvCisgICAgICAg
ICAgICAgICAgICAgIC8vICAgZG8pLgorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKChidWZmZXJbKCpsZW5ndGgpIC0gMV0gLSAnMCcpICUgMiA9PSAwKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBSb3VuZCBkb3duID0+IERvIG5vdGhpbmcuCisgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
YnVmZmVyWygqbGVuZ3RoKSAtIDFdICE9ICc5Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICBi
dWZmZXJbKCpsZW5ndGgpIC0gMV0rKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9IGVsc2UgaWYg
KGluX2RlbHRhX3Jvb21fbWludXMpIHsKKyAgICAgICAgICAgICAgICAvLyBSb3VuZCBkb3duICg9
PSBkbyBub3RoaW5nKS4KKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9IGVs
c2UgeyAgLy8gaW5fZGVsdGFfcm9vbV9wbHVzCisgICAgICAgICAgICAgICAgLy8gUm91bmQgdXAu
CisgICAgICAgICAgICAgICAgLy8gTm90ZSBhZ2FpbiB0aGF0IHRoZSBsYXN0IGRpZ2l0IGNvdWxk
IG5vdCBiZSAnOScgc2luY2UgdGhpcyB3b3VsZCBoYXZlCisgICAgICAgICAgICAgICAgLy8gc3Rv
cHBlZCB0aGUgbG9vcCBlYXJsaWVyLgorICAgICAgICAgICAgICAgIC8vIFdlIHN0aWxsIGhhdmUg
YW4gQVNTRVJUIGhlcmUsIGluIGNhc2UgdGhlIHByZWNvbmRpdGlvbnMgd2VyZSBub3QKKyAgICAg
ICAgICAgICAgICAvLyBzYXRpc2ZpZWQuCisgICAgICAgICAgICAgICAgQVNTRVJUKGJ1ZmZlclso
Kmxlbmd0aCkgLTFdICE9ICc5Jyk7CisgICAgICAgICAgICAgICAgYnVmZmVyWygqbGVuZ3RoKSAt
IDFdKys7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIAorICAgIAorICAgIC8vIExldCB2ID0gbnVtZXJhdG9yIC8gZGVub21pbmF0
b3IgPCAxMC4KKyAgICAvLyBUaGVuIHdlIGdlbmVyYXRlICdjb3VudCcgZGlnaXRzIG9mIGQgPSB4
Lnh4eHh4Li4uICh3aXRob3V0IHRoZSBkZWNpbWFsIHBvaW50KQorICAgIC8vIGZyb20gbGVmdCB0
byByaWdodC4gT25jZSAnY291bnQnIGRpZ2l0cyBoYXZlIGJlZW4gcHJvZHVjZWQgd2UgZGVjaWRl
IHdldGhlcgorICAgIC8vIHRvIHJvdW5kIHVwIG9yIGRvd24uIFJlbWFpbmRlcnMgb2YgZXhhY3Rs
eSAuNSByb3VuZCB1cHdhcmRzLiBOdW1iZXJzIHN1Y2gKKyAgICAvLyBhcyA5Ljk5OTk5OSBwcm9w
YWdhdGUgYSBjYXJyeSBhbGwgdGhlIHdheSwgYW5kIGNoYW5nZSB0aGUKKyAgICAvLyBleHBvbmVu
dCAoZGVjaW1hbF9wb2ludCksIHdoZW4gcm91bmRpbmcgdXB3YXJkcy4KKyAgICBzdGF0aWMgdm9p
ZCBHZW5lcmF0ZUNvdW50ZWREaWdpdHMoaW50IGNvdW50LCBpbnQqIGRlY2ltYWxfcG9pbnQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogbnVtZXJhdG9yLCBC
aWdudW0qIGRlbm9taW5hdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBWZWN0b3I8Y2hhcj4oYnVmZmVyKSwgaW50KiBsZW5ndGgpIHsKKyAgICAgICAgQVNTRVJUKGNv
dW50ID49IDApOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50IC0gMTsgKytpKSB7
CisgICAgICAgICAgICB1aW50MTZfdCBkaWdpdDsKKyAgICAgICAgICAgIGRpZ2l0ID0gbnVtZXJh
dG9yLT5EaXZpZGVNb2R1bG9JbnRCaWdudW0oKmRlbm9taW5hdG9yKTsKKyAgICAgICAgICAgIEFT
U0VSVChkaWdpdCA8PSA5KTsgIC8vIGRpZ2l0IGlzIGEgdWludDE2X3QgYW5kIHRoZXJlZm9yZSBh
bHdheXMgcG9zaXRpdmUuCisgICAgICAgICAgICAvLyBkaWdpdCA9IG51bWVyYXRvciAvIGRlbm9t
aW5hdG9yIChpbnRlZ2VyIGRpdmlzaW9uKS4KKyAgICAgICAgICAgIC8vIG51bWVyYXRvciA9IG51
bWVyYXRvciAlIGRlbm9taW5hdG9yLgorICAgICAgICAgICAgYnVmZmVyW2ldID0gZGlnaXQgKyAn
MCc7CisgICAgICAgICAgICAvLyBQcmVwYXJlIGZvciBuZXh0IGl0ZXJhdGlvbi4KKyAgICAgICAg
ICAgIG51bWVyYXRvci0+VGltZXMxMCgpOworICAgICAgICB9CisgICAgICAgIC8vIEdlbmVyYXRl
IHRoZSBsYXN0IGRpZ2l0LgorICAgICAgICB1aW50MTZfdCBkaWdpdDsKKyAgICAgICAgZGlnaXQg
PSBudW1lcmF0b3ItPkRpdmlkZU1vZHVsb0ludEJpZ251bSgqZGVub21pbmF0b3IpOworICAgICAg
ICBpZiAoQmlnbnVtOjpQbHVzQ29tcGFyZSgqbnVtZXJhdG9yLCAqbnVtZXJhdG9yLCAqZGVub21p
bmF0b3IpID49IDApIHsKKyAgICAgICAgICAgIGRpZ2l0Kys7CisgICAgICAgIH0KKyAgICAgICAg
YnVmZmVyW2NvdW50IC0gMV0gPSBkaWdpdCArICcwJzsKKyAgICAgICAgLy8gQ29ycmVjdCBiYWQg
ZGlnaXRzIChpbiBjYXNlIHdlIGhhZCBhIHNlcXVlbmNlIG9mICc5J3MpLiBQcm9wYWdhdGUgdGhl
CisgICAgICAgIC8vIGNhcnJ5IHVudGlsIHdlIGhhdCBhIG5vbi0nOScgb3IgdGlsIHdlIHJlYWNo
IHRoZSBmaXJzdCBkaWdpdC4KKyAgICAgICAgZm9yIChpbnQgaSA9IGNvdW50IC0gMTsgaSA+IDA7
IC0taSkgeworICAgICAgICAgICAgaWYgKGJ1ZmZlcltpXSAhPSAnMCcgKyAxMCkgYnJlYWs7Cisg
ICAgICAgICAgICBidWZmZXJbaV0gPSAnMCc7CisgICAgICAgICAgICBidWZmZXJbaSAtIDFdKys7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJ1ZmZlclswXSA9PSAnMCcgKyAxMCkgeworICAgICAg
ICAgICAgLy8gUHJvcGFnYXRlIGEgY2FycnkgcGFzdCB0aGUgdG9wIHBsYWNlLgorICAgICAgICAg
ICAgYnVmZmVyWzBdID0gJzEnOworICAgICAgICAgICAgKCpkZWNpbWFsX3BvaW50KSsrOworICAg
ICAgICB9CisgICAgICAgICpsZW5ndGggPSBjb3VudDsKKyAgICB9CisgICAgCisgICAgCisgICAg
Ly8gR2VuZXJhdGVzICdyZXF1ZXN0ZWRfZGlnaXRzJyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludC4g
SXQgbWlnaHQgb21pdAorICAgIC8vIHRyYWlsaW5nICcwJ3MuIElmIHRoZSBpbnB1dCBudW1iZXIg
aXMgdG9vIHNtYWxsIHRoZW4gbm8gZGlnaXRzIGF0IGFsbCBhcmUKKyAgICAvLyBnZW5lcmF0ZWQg
KGV4LjogMiBmaXhlZCBkaWdpdHMgZm9yIDAuMDAwMDEpLgorICAgIC8vCisgICAgLy8gSW5wdXQg
dmVyaWZpZXM6ICAxIDw9IChudW1lcmF0b3IgKyBkZWx0YSkgLyBkZW5vbWluYXRvciA8IDEwLgor
ICAgIHN0YXRpYyB2b2lkIEJpZ251bVRvRml4ZWQoaW50IHJlcXVlc3RlZF9kaWdpdHMsIGludCog
ZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogbnVt
ZXJhdG9yLCBCaWdudW0qIGRlbm9taW5hdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVmVjdG9yPGNoYXI+KGJ1ZmZlciksIGludCogbGVuZ3RoKSB7CisgICAgICAgIC8vIE5vdGUg
dGhhdCB3ZSBoYXZlIHRvIGxvb2sgYXQgbW9yZSB0aGFuIGp1c3QgdGhlIHJlcXVlc3RlZF9kaWdp
dHMsIHNpbmNlCisgICAgICAgIC8vIGEgbnVtYmVyIGNvdWxkIGJlIHJvdW5kZWQgdXAuIEV4YW1w
bGU6IHY9MC41IHdpdGggcmVxdWVzdGVkX2RpZ2l0cz0wLgorICAgICAgICAvLyBFdmVuIHRob3Vn
aCB0aGUgcG93ZXIgb2YgdiBlcXVhbHMgMCB3ZSBjYW4ndCBqdXN0IHN0b3AgaGVyZS4KKyAgICAg
ICAgaWYgKC0oKmRlY2ltYWxfcG9pbnQpID4gcmVxdWVzdGVkX2RpZ2l0cykgeworICAgICAgICAg
ICAgLy8gVGhlIG51bWJlciBpcyBkZWZpbml0aXZlbHkgdG9vIHNtYWxsLgorICAgICAgICAgICAg
Ly8gRXg6IDAuMDAxIHdpdGggcmVxdWVzdGVkX2RpZ2l0cyA9PSAxLgorICAgICAgICAgICAgLy8g
U2V0IGRlY2ltYWwtcG9pbnQgdG8gLXJlcXVlc3RlZF9kaWdpdHMuIFRoaXMgaXMgd2hhdCBHYXkg
ZG9lcy4KKyAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBpdCBzaG91bGQgbm90IGhhdmUgYW55IGVm
ZmVjdCBhbnl3YXlzIHNpbmNlIHRoZSBzdHJpbmcgaXMKKyAgICAgICAgICAgIC8vIGVtcHR5Lgor
ICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSAtcmVxdWVzdGVkX2RpZ2l0czsKKyAgICAgICAg
ICAgICpsZW5ndGggPSAwOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgaWYg
KC0oKmRlY2ltYWxfcG9pbnQpID09IHJlcXVlc3RlZF9kaWdpdHMpIHsKKyAgICAgICAgICAgIC8v
IFdlIG9ubHkgbmVlZCB0byB2ZXJpZnkgaWYgdGhlIG51bWJlciByb3VuZHMgZG93biBvciB1cC4K
KyAgICAgICAgICAgIC8vIEV4OiAwLjA0IGFuZCAwLjA2IHdpdGggcmVxdWVzdGVkX2RpZ2l0cyA9
PSAxLgorICAgICAgICAgICAgQVNTRVJUKCpkZWNpbWFsX3BvaW50ID09IC1yZXF1ZXN0ZWRfZGln
aXRzKTsKKyAgICAgICAgICAgIC8vIEluaXRpYWxseSB0aGUgZnJhY3Rpb24gbGllcyBpbiByYW5n
ZSAoMSwgMTBdLiBNdWx0aXBseSB0aGUgZGVub21pbmF0b3IKKyAgICAgICAgICAgIC8vIGJ5IDEw
IHNvIHRoYXQgd2UgY2FuIGNvbXBhcmUgbW9yZSBlYXNpbHkuCisgICAgICAgICAgICBkZW5vbWlu
YXRvci0+VGltZXMxMCgpOworICAgICAgICAgICAgaWYgKEJpZ251bTo6UGx1c0NvbXBhcmUoKm51
bWVyYXRvciwgKm51bWVyYXRvciwgKmRlbm9taW5hdG9yKSA+PSAwKSB7CisgICAgICAgICAgICAg
ICAgLy8gSWYgdGhlIGZyYWN0aW9uIGlzID49IDAuNSB0aGVuIHdlIGhhdmUgdG8gaW5jbHVkZSB0
aGUgcm91bmRlZAorICAgICAgICAgICAgICAgIC8vIGRpZ2l0LgorICAgICAgICAgICAgICAgIGJ1
ZmZlclswXSA9ICcxJzsKKyAgICAgICAgICAgICAgICAqbGVuZ3RoID0gMTsKKyAgICAgICAgICAg
ICAgICAoKmRlY2ltYWxfcG9pbnQpKys7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBjYXVnaHQgbW9zdCBvZiBzaW1pbGFyIGNhc2VzIGVhcmxp
ZXIuCisgICAgICAgICAgICAgICAgKmxlbmd0aCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBUaGUgcmVxdWVz
dGVkIGRpZ2l0cyBjb3JyZXNwb25kIHRvIHRoZSBkaWdpdHMgYWZ0ZXIgdGhlIHBvaW50LgorICAg
ICAgICAgICAgLy8gVGhlIHZhcmlhYmxlICduZWVkZWRfZGlnaXRzJyBpbmNsdWRlcyB0aGUgZGln
aXRzIGJlZm9yZSB0aGUgcG9pbnQuCisgICAgICAgICAgICBpbnQgbmVlZGVkX2RpZ2l0cyA9ICgq
ZGVjaW1hbF9wb2ludCkgKyByZXF1ZXN0ZWRfZGlnaXRzOworICAgICAgICAgICAgR2VuZXJhdGVD
b3VudGVkRGlnaXRzKG5lZWRlZF9kaWdpdHMsIGRlY2ltYWxfcG9pbnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnVtZXJhdG9yLCBkZW5vbWluYXRvciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgCisgICAgLy8gUmV0dXJucyBhbiBlc3RpbWF0aW9uIG9mIGsgc3VjaCB0aGF0
IDEwXihrLTEpIDw9IHYgPCAxMF5rIHdoZXJlCisgICAgLy8gdiA9IGYgKiAyXmV4cG9uZW50IGFu
ZCAyXjUyIDw9IGYgPCAyXjUzLgorICAgIC8vIHYgaXMgaGVuY2UgYSBub3JtYWxpemVkIGRvdWJs
ZSB3aXRoIHRoZSBnaXZlbiBleHBvbmVudC4gVGhlIG91dHB1dCBpcyBhbgorICAgIC8vIGFwcHJv
eGltYXRpb24gZm9yIHRoZSBleHBvbmVudCBvZiB0aGUgZGVjaW1hbCBhcHByb2ltYXRpb24gLmRp
Z2l0cyAqIDEwXmsuCisgICAgLy8KKyAgICAvLyBUaGUgcmVzdWx0IG1pZ2h0IHVuZGVyc2hvb3Qg
YnkgMSBpbiB3aGljaCBjYXNlIDEwXmsgPD0gdiA8IDEwXmsrMS4KKyAgICAvLyBOb3RlOiB0aGlz
IHByb3BlcnR5IGhvbGRzIGZvciB2J3MgdXBwZXIgYm91bmRhcnkgbSsgdG9vLgorICAgIC8vICAg
IDEwXmsgPD0gbSsgPCAxMF5rKzEuCisgICAgLy8gICAoc2VlIGV4cGxhbmF0aW9uIGJlbG93KS4K
KyAgICAvLworICAgIC8vIEV4YW1wbGVzOgorICAgIC8vICBFc3RpbWF0ZVBvd2VyKDApICAgPT4g
MTYKKyAgICAvLyAgRXN0aW1hdGVQb3dlcigtNTIpID0+IDAKKyAgICAvLworICAgIC8vIE5vdGU6
IGUgPj0gMCA9PiBFc3RpbWF0ZWRQb3dlcihlKSA+IDAuIE5vIHNpbWlsYXIgY2xhaW0gY2FuIGJl
IG1hZGUgZm9yIGU8MC4KKyAgICBzdGF0aWMgaW50IEVzdGltYXRlUG93ZXIoaW50IGV4cG9uZW50
KSB7CisgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gZXN0aW1hdGVzIGxvZzEwIG9mIHYgd2hlcmUg
diA9IGYqMl5lICh3aXRoIGUgPT0gZXhwb25lbnQpLgorICAgICAgICAvLyBOb3RlIHRoYXQgMTBe
Zmxvb3IobG9nMTAodikpIDw9IHYsIGJ1dCB2IDw9IDEwXmNlaWwobG9nMTAodikpLgorICAgICAg
ICAvLyBOb3RlIHRoYXQgZiBpcyBib3VuZGVkIGJ5IGl0cyBjb250YWluZXIgc2l6ZS4gTGV0IHAg
PSA1MyAodGhlIGRvdWJsZSdzCisgICAgICAgIC8vIHNpZ25pZmljYW5kIHNpemUpLiBUaGVuIDJe
KHAtMSkgPD0gZiA8IDJecC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gR2l2ZW4gdGhhdCBsb2cx
MCh2KSA9PSBsb2cyKHYpL2xvZzIoMTApIGFuZCBlKyhsZW4oZiktMSkgaXMgcXVpdGUgY2xvc2UK
KyAgICAgICAgLy8gdG8gbG9nMih2KSB0aGUgZnVuY3Rpb24gaXMgc2ltcGxpZmllZCB0byAoZSso
bGVuKGYpLTEpL2xvZzIoMTApKS4KKyAgICAgICAgLy8gVGhlIGNvbXB1dGVkIG51bWJlciB1bmRl
cnNob290cyBieSBsZXNzIHRoYW4gMC42MzEgKHdoZW4gd2UgY29tcHV0ZSBsb2czCisgICAgICAg
IC8vIGFuZCBub3QgbG9nMTApLgorICAgICAgICAvLworICAgICAgICAvLyBPcHRpbWl6YXRpb246
IHNpbmNlIHdlIG9ubHkgbmVlZCBhbiBhcHByb3hpbWF0ZWQgcmVzdWx0IHRoaXMgY29tcHV0YXRp
b24KKyAgICAgICAgLy8gY2FuIGJlIHBlcmZvcm1lZCBvbiA2NCBiaXQgaW50ZWdlcnMuIE9uIHg4
Ni94NjQgYXJjaGl0ZWN0dXJlIHRoZSBzcGVlZHVwIGlzCisgICAgICAgIC8vIG5vdCByZWFsbHkg
bWVhc3VyYWJsZSwgdGhvdWdoLgorICAgICAgICAvLworICAgICAgICAvLyBTaW5jZSB3ZSB3YW50
IHRvIGF2b2lkIG92ZXJzaG9vdGluZyB3ZSBkZWNyZW1lbnQgYnkgMWUxMCBzbyB0aGF0CisgICAg
ICAgIC8vIGZsb2F0aW5nLXBvaW50IGltcHJlY2lzaW9ucyBkb24ndCBhZmZlY3QgdXMuCisgICAg
ICAgIC8vCisgICAgICAgIC8vIEV4cGxhbmF0aW9uIGZvciB2J3MgYm91bmRhcnkgbSs6IHRoZSBj
b21wdXRhdGlvbiB0YWtlcyBhZHZhbnRhZ2Ugb2YKKyAgICAgICAgLy8gdGhlIGZhY3QgdGhhdCAy
XihwLTEpIDw9IGYgPCAyXnAuIEJvdW5kYXJpZXMgc3RpbGwgc2F0aXNmeSB0aGlzIHJlcXVpcmVt
ZW50CisgICAgICAgIC8vIChldmVuIGZvciBkZW5vcm1hbHMgd2hlcmUgdGhlIGRlbHRhIGNhbiBi
ZSBtdWNoIG1vcmUgaW1wb3J0YW50KS4KKyAgICAgICAgCisgICAgICAgIGNvbnN0IGRvdWJsZSBr
MUxvZzEwID0gMC4zMDEwMjk5OTU2NjM5ODExNDsgIC8vIDEvbGcoMTApCisgICAgICAgIAorICAg
ICAgICAvLyBGb3IgZG91YmxlcyBsZW4oZikgPT0gNTMgKGRvbid0IGZvcmdldCB0aGUgaGlkZGVu
IGJpdCkuCisgICAgICAgIGNvbnN0IGludCBrU2lnbmlmaWNhbmRTaXplID0gNTM7CisgICAgICAg
IGRvdWJsZSBlc3RpbWF0ZSA9IGNlaWwoKGV4cG9uZW50ICsga1NpZ25pZmljYW5kU2l6ZSAtIDEp
ICogazFMb2cxMCAtIDFlLTEwKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oZXN0
aW1hdGUpOworICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBTZWUgY29tbWVudHMgZm9yIEluaXRp
YWxTY2FsZWRTdGFydFZhbHVlcy4KKyAgICBzdGF0aWMgdm9pZCBJbml0aWFsU2NhbGVkU3RhcnRW
YWx1ZXNQb3NpdGl2ZUV4cG9uZW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHYsIGludCBlc3RpbWF0ZWRfcG93ZXIsIGJv
b2wgbmVlZF9ib3VuZGFyeV9kZWx0YXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIG51bWVyYXRvciwgQmlnbnVtKiBkZW5v
bWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEJpZ251bSogZGVsdGFfbWludXMsIEJpZ251bSogZGVsdGFfcGx1cykgeworICAg
ICAgICAvLyBBIHBvc2l0aXZlIGV4cG9uZW50IGltcGxpZXMgYSBwb3NpdGl2ZSBwb3dlci4KKyAg
ICAgICAgQVNTRVJUKGVzdGltYXRlZF9wb3dlciA+PSAwKTsKKyAgICAgICAgLy8gU2luY2UgdGhl
IGVzdGltYXRlZF9wb3dlciBpcyBwb3NpdGl2ZSB3ZSBzaW1wbHkgbXVsdGlwbHkgdGhlIGRlbm9t
aW5hdG9yCisgICAgICAgIC8vIGJ5IDEwXmVzdGltYXRlZF9wb3dlci4KKyAgICAgICAgCisgICAg
ICAgIC8vIG51bWVyYXRvciA9IHYuCisgICAgICAgIG51bWVyYXRvci0+QXNzaWduVUludDY0KERv
dWJsZSh2KS5TaWduaWZpY2FuZCgpKTsKKyAgICAgICAgbnVtZXJhdG9yLT5TaGlmdExlZnQoRG91
YmxlKHYpLkV4cG9uZW50KCkpOworICAgICAgICAvLyBkZW5vbWluYXRvciA9IDEwXmVzdGltYXRl
ZF9wb3dlci4KKyAgICAgICAgZGVub21pbmF0b3ItPkFzc2lnblBvd2VyVUludDE2KDEwLCBlc3Rp
bWF0ZWRfcG93ZXIpOworICAgICAgICAKKyAgICAgICAgaWYgKG5lZWRfYm91bmRhcnlfZGVsdGFz
KSB7CisgICAgICAgICAgICAvLyBJbnRyb2R1Y2UgYSBjb21tb24gZGVub21pbmF0b3Igc28gdGhh
dCB0aGUgZGVsdGFzIHRvIHRoZSBib3VuZGFyaWVzIGFyZQorICAgICAgICAgICAgLy8gaW50ZWdl
cnMuCisgICAgICAgICAgICBkZW5vbWluYXRvci0+U2hpZnRMZWZ0KDEpOworICAgICAgICAgICAg
bnVtZXJhdG9yLT5TaGlmdExlZnQoMSk7CisgICAgICAgICAgICAvLyBMZXQgdiA9IGYgKiAyXmUs
IHRoZW4gbSsgLSB2ID0gMS8yICogMl5lOyBXaXRoIHRoZSBjb21tb24KKyAgICAgICAgICAgIC8v
IGRlbm9taW5hdG9yIChvZiAyKSBkZWx0YV9wbHVzIGVxdWFscyAyXmUuCisgICAgICAgICAgICBk
ZWx0YV9wbHVzLT5Bc3NpZ25VSW50MTYoMSk7CisgICAgICAgICAgICBkZWx0YV9wbHVzLT5TaGlm
dExlZnQoRG91YmxlKHYpLkV4cG9uZW50KCkpOworICAgICAgICAgICAgLy8gU2FtZSBmb3IgZGVs
dGFfbWludXMgKHdpdGggYWRqdXN0bWVudHMgYmVsb3cgaWYgZiA9PSAyXnAtMSkuCisgICAgICAg
ICAgICBkZWx0YV9taW51cy0+QXNzaWduVUludDE2KDEpOworICAgICAgICAgICAgZGVsdGFfbWlu
dXMtPlNoaWZ0TGVmdChEb3VibGUodikuRXhwb25lbnQoKSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vIElmIHRoZSBzaWduaWZpY2FuZCAod2l0aG91dCB0aGUgaGlkZGVuIGJpdCkgaXMg
MCwgdGhlbiB0aGUgbG93ZXIKKyAgICAgICAgICAgIC8vIGJvdW5kYXJ5IGlzIGNsb3NlciB0aGFu
IGp1c3QgaGFsZiBhIHVscCAodW5pdCBpbiB0aGUgbGFzdCBwbGFjZSkuCisgICAgICAgICAgICAv
LyBUaGVyZSBpcyBvbmx5IG9uZSBleGNlcHRpb246IGlmIHRoZSBuZXh0IGxvd2VyIG51bWJlciBp
cyBhIGRlbm9ybWFsIHRoZW4KKyAgICAgICAgICAgIC8vIHRoZSBkaXN0YW5jZSBpcyAxIHVscC4g
VGhpcyBjYW5ub3QgYmUgdGhlIGNhc2UgZm9yIGV4cG9uZW50ID49IDAgKGJ1dCB3ZQorICAgICAg
ICAgICAgLy8gaGF2ZSB0byB0ZXN0IGl0IGluIHRoZSBvdGhlciBmdW5jdGlvbiB3aGVyZSBleHBv
bmVudCA8IDApLgorICAgICAgICAgICAgdWludDY0X3Qgdl9iaXRzID0gRG91YmxlKHYpLkFzVWlu
dDY0KCk7CisgICAgICAgICAgICBpZiAoKHZfYml0cyAmIERvdWJsZTo6a1NpZ25pZmljYW5kTWFz
aykgPT0gMCkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBsb3dlciBib3VuZGFyeSBpcyBjbG9z
ZXIgYXQgaGFsZiB0aGUgZGlzdGFuY2Ugb2YgIm5vcm1hbCIgbnVtYmVycy4KKyAgICAgICAgICAg
ICAgICAvLyBJbmNyZWFzZSB0aGUgY29tbW9uIGRlbm9taW5hdG9yIGFuZCBhZGFwdCBhbGwgYnV0
IHRoZSBkZWx0YV9taW51cy4KKyAgICAgICAgICAgICAgICBkZW5vbWluYXRvci0+U2hpZnRMZWZ0
KDEpOyAgLy8gKjIKKyAgICAgICAgICAgICAgICBudW1lcmF0b3ItPlNoaWZ0TGVmdCgxKTsgICAg
Ly8gKjIKKyAgICAgICAgICAgICAgICBkZWx0YV9wbHVzLT5TaGlmdExlZnQoMSk7ICAgLy8gKjIK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBTZWUg
Y29tbWVudHMgZm9yIEluaXRpYWxTY2FsZWRTdGFydFZhbHVlcworICAgIHN0YXRpYyB2b2lkIElu
aXRpYWxTY2FsZWRTdGFydFZhbHVlc05lZ2F0aXZlRXhwb25lbnRQb3NpdGl2ZVBvd2VyKAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRvdWJsZSB2LCBpbnQgZXN0aW1hdGVkX3Bvd2VyLCBib29sIG5lZWRfYm91bmRh
cnlfZGVsdGFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogbnVtZXJhdG9yLCBCaWdudW0qIGRlbm9t
aW5hdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogZGVsdGFfbWludXMsIEJpZ251bSogZGVsdGFf
cGx1cykgeworICAgICAgICB1aW50NjRfdCBzaWduaWZpY2FuZCA9IERvdWJsZSh2KS5TaWduaWZp
Y2FuZCgpOworICAgICAgICBpbnQgZXhwb25lbnQgPSBEb3VibGUodikuRXhwb25lbnQoKTsKKyAg
ICAgICAgLy8gdiA9IGYgKiAyXmUgd2l0aCBlIDwgMCwgYW5kIHdpdGggZXN0aW1hdGVkX3Bvd2Vy
ID49IDAuCisgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBlIGlzIGNsb3NlIHRvIDAgKGhhdmUg
YSBsb29rIGF0IGhvdyBlc3RpbWF0ZWRfcG93ZXIgaXMKKyAgICAgICAgLy8gY29tcHV0ZWQpLgor
ICAgICAgICAKKyAgICAgICAgLy8gbnVtZXJhdG9yID0gc2lnbmlmaWNhbmQKKyAgICAgICAgLy8g
IHNpbmNlIHYgPSBzaWduaWZpY2FuZCAqIDJeZXhwb25lbnQgdGhpcyBpcyBlcXVpdmFsZW50IHRv
CisgICAgICAgIC8vICBudW1lcmF0b3IgPSB2ICogLyAyXi1leHBvbmVudAorICAgICAgICBudW1l
cmF0b3ItPkFzc2lnblVJbnQ2NChzaWduaWZpY2FuZCk7CisgICAgICAgIC8vIGRlbm9taW5hdG9y
ID0gMTBeZXN0aW1hdGVkX3Bvd2VyICogMl4tZXhwb25lbnQgKHdpdGggZXhwb25lbnQgPCAwKQor
ICAgICAgICBkZW5vbWluYXRvci0+QXNzaWduUG93ZXJVSW50MTYoMTAsIGVzdGltYXRlZF9wb3dl
cik7CisgICAgICAgIGRlbm9taW5hdG9yLT5TaGlmdExlZnQoLWV4cG9uZW50KTsKKyAgICAgICAg
CisgICAgICAgIGlmIChuZWVkX2JvdW5kYXJ5X2RlbHRhcykgeworICAgICAgICAgICAgLy8gSW50
cm9kdWNlIGEgY29tbW9uIGRlbm9taW5hdG9yIHNvIHRoYXQgdGhlIGRlbHRhcyB0byB0aGUgYm91
bmRhcmllcyBhcmUKKyAgICAgICAgICAgIC8vIGludGVnZXJzLgorICAgICAgICAgICAgZGVub21p
bmF0b3ItPlNoaWZ0TGVmdCgxKTsKKyAgICAgICAgICAgIG51bWVyYXRvci0+U2hpZnRMZWZ0KDEp
OworICAgICAgICAgICAgLy8gTGV0IHYgPSBmICogMl5lLCB0aGVuIG0rIC0gdiA9IDEvMiAqIDJe
ZTsgV2l0aCB0aGUgY29tbW9uCisgICAgICAgICAgICAvLyBkZW5vbWluYXRvciAob2YgMikgZGVs
dGFfcGx1cyBlcXVhbHMgMl5lLgorICAgICAgICAgICAgLy8gR2l2ZW4gdGhhdCB0aGUgZGVub21p
bmF0b3IgYWxyZWFkeSBpbmNsdWRlcyB2J3MgZXhwb25lbnQgdGhlIGRpc3RhbmNlCisgICAgICAg
ICAgICAvLyB0byB0aGUgYm91bmRhcmllcyBpcyBzaW1wbHkgMS4KKyAgICAgICAgICAgIGRlbHRh
X3BsdXMtPkFzc2lnblVJbnQxNigxKTsKKyAgICAgICAgICAgIC8vIFNhbWUgZm9yIGRlbHRhX21p
bnVzICh3aXRoIGFkanVzdG1lbnRzIGJlbG93IGlmIGYgPT0gMl5wLTEpLgorICAgICAgICAgICAg
ZGVsdGFfbWludXMtPkFzc2lnblVJbnQxNigxKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Ly8gSWYgdGhlIHNpZ25pZmljYW5kICh3aXRob3V0IHRoZSBoaWRkZW4gYml0KSBpcyAwLCB0aGVu
IHRoZSBsb3dlcgorICAgICAgICAgICAgLy8gYm91bmRhcnkgaXMgY2xvc2VyIHRoYW4ganVzdCBv
bmUgdWxwICh1bml0IGluIHRoZSBsYXN0IHBsYWNlKS4KKyAgICAgICAgICAgIC8vIFRoZXJlIGlz
IG9ubHkgb25lIGV4Y2VwdGlvbjogaWYgdGhlIG5leHQgbG93ZXIgbnVtYmVyIGlzIGEgZGVub3Jt
YWwKKyAgICAgICAgICAgIC8vIHRoZW4gdGhlIGRpc3RhbmNlIGlzIDEgdWxwLiBTaW5jZSB0aGUg
ZXhwb25lbnQgaXMgY2xvc2UgdG8gemVybworICAgICAgICAgICAgLy8gKG90aGVyd2lzZSBlc3Rp
bWF0ZWRfcG93ZXIgd291bGQgaGF2ZSBiZWVuIG5lZ2F0aXZlKSB0aGlzIGNhbm5vdCBoYXBwZW4K
KyAgICAgICAgICAgIC8vIGhlcmUgZWl0aGVyLgorICAgICAgICAgICAgdWludDY0X3Qgdl9iaXRz
ID0gRG91YmxlKHYpLkFzVWludDY0KCk7CisgICAgICAgICAgICBpZiAoKHZfYml0cyAmIERvdWJs
ZTo6a1NpZ25pZmljYW5kTWFzaykgPT0gMCkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBsb3dl
ciBib3VuZGFyeSBpcyBjbG9zZXIgYXQgaGFsZiB0aGUgZGlzdGFuY2Ugb2YgIm5vcm1hbCIgbnVt
YmVycy4KKyAgICAgICAgICAgICAgICAvLyBJbmNyZWFzZSB0aGUgZGVub21pbmF0b3IgYW5kIGFk
YXB0IGFsbCBidXQgdGhlIGRlbHRhX21pbnVzLgorICAgICAgICAgICAgICAgIGRlbm9taW5hdG9y
LT5TaGlmdExlZnQoMSk7ICAvLyAqMgorICAgICAgICAgICAgICAgIG51bWVyYXRvci0+U2hpZnRM
ZWZ0KDEpOyAgICAvLyAqMgorICAgICAgICAgICAgICAgIGRlbHRhX3BsdXMtPlNoaWZ0TGVmdCgx
KTsgICAvLyAqMgorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIAor
ICAgIC8vIFNlZSBjb21tZW50cyBmb3IgSW5pdGlhbFNjYWxlZFN0YXJ0VmFsdWVzCisgICAgc3Rh
dGljIHZvaWQgSW5pdGlhbFNjYWxlZFN0YXJ0VmFsdWVzTmVnYXRpdmVFeHBvbmVudE5lZ2F0aXZl
UG93ZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHYsIGludCBlc3RpbWF0ZWRfcG93ZXIsIGJvb2wg
bmVlZF9ib3VuZGFyeV9kZWx0YXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBudW1lcmF0b3IsIEJp
Z251bSogZGVub21pbmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBkZWx0YV9taW51cywgQmln
bnVtKiBkZWx0YV9wbHVzKSB7CisgICAgICAgIGNvbnN0IHVpbnQ2NF90IGtNaW5pbWFsTm9ybWFs
aXplZEV4cG9uZW50ID0KKyAgICAgICAgVUlOVDY0XzJQQVJUX0MoMHgwMDEwMDAwMCwgMDAwMDAw
MDApOworICAgICAgICB1aW50NjRfdCBzaWduaWZpY2FuZCA9IERvdWJsZSh2KS5TaWduaWZpY2Fu
ZCgpOworICAgICAgICBpbnQgZXhwb25lbnQgPSBEb3VibGUodikuRXhwb25lbnQoKTsKKyAgICAg
ICAgLy8gSW5zdGVhZCBvZiBtdWx0aXBseWluZyB0aGUgZGVub21pbmF0b3Igd2l0aCAxMF5lc3Rp
bWF0ZWRfcG93ZXIgd2UKKyAgICAgICAgLy8gbXVsdGlwbHkgYWxsIHZhbHVlcyAobnVtZXJhdG9y
IGFuZCBkZWx0YXMpIGJ5IDEwXi1lc3RpbWF0ZWRfcG93ZXIuCisgICAgICAgIAorICAgICAgICAv
LyBVc2UgbnVtZXJhdG9yIGFzIHRlbXBvcmFyeSBjb250YWluZXIgZm9yIHBvd2VyX3Rlbi4KKyAg
ICAgICAgQmlnbnVtKiBwb3dlcl90ZW4gPSBudW1lcmF0b3I7CisgICAgICAgIHBvd2VyX3Rlbi0+
QXNzaWduUG93ZXJVSW50MTYoMTAsIC1lc3RpbWF0ZWRfcG93ZXIpOworICAgICAgICAKKyAgICAg
ICAgaWYgKG5lZWRfYm91bmRhcnlfZGVsdGFzKSB7CisgICAgICAgICAgICAvLyBTaW5jZSBwb3dl
cl90ZW4gPT0gbnVtZXJhdG9yIHdlIG11c3QgbWFrZSBhIGNvcHkgb2YgMTBeZXN0aW1hdGVkX3Bv
d2VyCisgICAgICAgICAgICAvLyBiZWZvcmUgd2UgY29tcGxldGUgdGhlIGNvbXB1dGF0aW9uIG9m
IHRoZSBudW1lcmF0b3IuCisgICAgICAgICAgICAvLyBkZWx0YV9wbHVzID0gZGVsdGFfbWludXMg
PSAxMF5lc3RpbWF0ZWRfcG93ZXIKKyAgICAgICAgICAgIGRlbHRhX3BsdXMtPkFzc2lnbkJpZ251
bSgqcG93ZXJfdGVuKTsKKyAgICAgICAgICAgIGRlbHRhX21pbnVzLT5Bc3NpZ25CaWdudW0oKnBv
d2VyX3Rlbik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIG51bWVyYXRvciA9IHNp
Z25pZmljYW5kICogMiAqIDEwXi1lc3RpbWF0ZWRfcG93ZXIKKyAgICAgICAgLy8gIHNpbmNlIHYg
PSBzaWduaWZpY2FuZCAqIDJeZXhwb25lbnQgdGhpcyBpcyBlcXVpdmFsZW50IHRvCisgICAgICAg
IC8vIG51bWVyYXRvciA9IHYgKiAxMF4tZXN0aW1hdGVkX3Bvd2VyICogMiAqIDJeLWV4cG9uZW50
LgorICAgICAgICAvLyBSZW1lbWJlcjogbnVtZXJhdG9yIGhhcyBiZWVuIGFidXNlZCBhcyBwb3dl
cl90ZW4uIFNvIG5vIG5lZWQgdG8gYXNzaWduIGl0CisgICAgICAgIC8vICB0byBpdHNlbGYuCisg
ICAgICAgIEFTU0VSVChudW1lcmF0b3IgPT0gcG93ZXJfdGVuKTsKKyAgICAgICAgbnVtZXJhdG9y
LT5NdWx0aXBseUJ5VUludDY0KHNpZ25pZmljYW5kKTsKKyAgICAgICAgCisgICAgICAgIC8vIGRl
bm9taW5hdG9yID0gMiAqIDJeLWV4cG9uZW50IHdpdGggZXhwb25lbnQgPCAwLgorICAgICAgICBk
ZW5vbWluYXRvci0+QXNzaWduVUludDE2KDEpOworICAgICAgICBkZW5vbWluYXRvci0+U2hpZnRM
ZWZ0KC1leHBvbmVudCk7CisgICAgICAgIAorICAgICAgICBpZiAobmVlZF9ib3VuZGFyeV9kZWx0
YXMpIHsKKyAgICAgICAgICAgIC8vIEludHJvZHVjZSBhIGNvbW1vbiBkZW5vbWluYXRvciBzbyB0
aGF0IHRoZSBkZWx0YXMgdG8gdGhlIGJvdW5kYXJpZXMgYXJlCisgICAgICAgICAgICAvLyBpbnRl
Z2Vycy4KKyAgICAgICAgICAgIG51bWVyYXRvci0+U2hpZnRMZWZ0KDEpOworICAgICAgICAgICAg
ZGVub21pbmF0b3ItPlNoaWZ0TGVmdCgxKTsKKyAgICAgICAgICAgIC8vIFdpdGggdGhpcyBzaGlm
dCB0aGUgYm91bmRhcmllcyBoYXZlIHRoZWlyIGNvcnJlY3QgdmFsdWUsIHNpbmNlCisgICAgICAg
ICAgICAvLyBkZWx0YV9wbHVzID0gMTBeLWVzdGltYXRlZF9wb3dlciwgYW5kCisgICAgICAgICAg
ICAvLyBkZWx0YV9taW51cyA9IDEwXi1lc3RpbWF0ZWRfcG93ZXIuCisgICAgICAgICAgICAvLyBU
aGVzZSBhc3NpZ25tZW50cyBoYXZlIGJlZW4gZG9uZSBlYXJsaWVyLgorICAgICAgICAgICAgCisg
ICAgICAgICAgICAvLyBUaGUgc3BlY2lhbCBjYXNlIHdoZXJlIHRoZSBsb3dlciBib3VuZGFyeSBp
cyB0d2ljZSBhcyBjbG9zZS4KKyAgICAgICAgICAgIC8vIFRoaXMgdGltZSB3ZSBoYXZlIHRvIGxv
b2sgb3V0IGZvciB0aGUgZXhjZXB0aW9uIHRvby4KKyAgICAgICAgICAgIHVpbnQ2NF90IHZfYml0
cyA9IERvdWJsZSh2KS5Bc1VpbnQ2NCgpOworICAgICAgICAgICAgaWYgKCh2X2JpdHMgJiBEb3Vi
bGU6OmtTaWduaWZpY2FuZE1hc2spID09IDAgJiYKKyAgICAgICAgICAgICAgICAvLyBUaGUgb25s
eSBleGNlcHRpb24gd2hlcmUgYSBzaWduaWZpY2FuZCA9PSAwIGhhcyBpdHMgYm91bmRhcmllcyBh
dAorICAgICAgICAgICAgICAgIC8vICJub3JtYWwiIGRpc3RhbmNlczoKKyAgICAgICAgICAgICAg
ICAodl9iaXRzICYgRG91YmxlOjprRXhwb25lbnRNYXNrKSAhPSBrTWluaW1hbE5vcm1hbGl6ZWRF
eHBvbmVudCkgeworICAgICAgICAgICAgICAgIG51bWVyYXRvci0+U2hpZnRMZWZ0KDEpOyAgICAv
LyAqMgorICAgICAgICAgICAgICAgIGRlbm9taW5hdG9yLT5TaGlmdExlZnQoMSk7ICAvLyAqMgor
ICAgICAgICAgICAgICAgIGRlbHRhX3BsdXMtPlNoaWZ0TGVmdCgxKTsgICAvLyAqMgorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIC8vIExldCB2ID0gc2ln
bmlmaWNhbmQgKiAyXmV4cG9uZW50LgorICAgIC8vIENvbXB1dGVzIHYgLyAxMF5lc3RpbWF0ZWRf
cG93ZXIgZXhhY3RseSwgYXMgYSByYXRpbyBvZiB0d28gYmlnbnVtcywgbnVtZXJhdG9yCisgICAg
Ly8gYW5kIGRlbm9taW5hdG9yLiBUaGUgZnVuY3Rpb25zIEdlbmVyYXRlU2hvcnRlc3REaWdpdHMg
YW5kCisgICAgLy8gR2VuZXJhdGVDb3VudGVkRGlnaXRzIHdpbGwgdGhlbiBjb252ZXJ0IHRoaXMg
cmF0aW8gdG8gaXRzIGRlY2ltYWwKKyAgICAvLyByZXByZXNlbnRhdGlvbiBkLCB3aXRoIHRoZSBy
ZXF1aXJlZCBhY2N1cmFjeS4KKyAgICAvLyBUaGVuIGQgKiAxMF5lc3RpbWF0ZWRfcG93ZXIgaXMg
dGhlIHJlcHJlc2VudGF0aW9uIG9mIHYuCisgICAgLy8gKE5vdGU6IHRoZSBmcmFjdGlvbiBhbmQg
dGhlIGVzdGltYXRlZF9wb3dlciBtaWdodCBnZXQgYWRqdXN0ZWQgYmVmb3JlCisgICAgLy8gZ2Vu
ZXJhdGluZyB0aGUgZGVjaW1hbCByZXByZXNlbnRhdGlvbi4pCisgICAgLy8KKyAgICAvLyBUaGUg
aW5pdGlhbCBzdGFydCB2YWx1ZXMgY29uc2lzdCBvZjoKKyAgICAvLyAgLSBhIHNjYWxlZCBudW1l
cmF0b3I6IHMudC4gbnVtZXJhdG9yL2Rlbm9taW5hdG9yID09IHYgLyAxMF5lc3RpbWF0ZWRfcG93
ZXIuCisgICAgLy8gIC0gYSBzY2FsZWQgKGNvbW1vbikgZGVub21pbmF0b3IuCisgICAgLy8gIG9w
dGlvbmFsbHkgKHVzZWQgYnkgR2VuZXJhdGVTaG9ydGVzdERpZ2l0cyB0byBkZWNpZGUgaWYgaXQg
aGFzIHRoZSBzaG9ydGVzdAorICAgIC8vICBkZWNpbWFsIGNvbnZlcnRpbmcgYmFjayB0byB2KToK
KyAgICAvLyAgLSB2IC0gbS06IHRoZSBkaXN0YW5jZSB0byB0aGUgbG93ZXIgYm91bmRhcnkuCisg
ICAgLy8gIC0gbSsgLSB2OiB0aGUgZGlzdGFuY2UgdG8gdGhlIHVwcGVyIGJvdW5kYXJ5LgorICAg
IC8vCisgICAgLy8gdiwgbSssIG0tLCBhbmQgdGhlcmVmb3JlIHYgLSBtLSBhbmQgbSsgLSB2IGFs
bCBzaGFyZSB0aGUgc2FtZSBkZW5vbWluYXRvci4KKyAgICAvLworICAgIC8vIExldCBlcCA9PSBl
c3RpbWF0ZWRfcG93ZXIsIHRoZW4gdGhlIHJldHVybmVkIHZhbHVlcyB3aWxsIHNhdGlzZnk6Cisg
ICAgLy8gIHYgLyAxMF5lcCA9IG51bWVyYXRvciAvIGRlbm9taW5hdG9yLgorICAgIC8vICB2J3Mg
Ym91bmRhcnlzIG0tIGFuZCBtKzoKKyAgICAvLyAgICBtLSAvIDEwXmVwID09IHYgLyAxMF5lcCAt
IGRlbHRhX21pbnVzIC8gZGVub21pbmF0b3IKKyAgICAvLyAgICBtKyAvIDEwXmVwID09IHYgLyAx
MF5lcCArIGRlbHRhX3BsdXMgLyBkZW5vbWluYXRvcgorICAgIC8vICBPciBpbiBvdGhlciB3b3Jk
czoKKyAgICAvLyAgICBtLSA9PSB2IC0gZGVsdGFfbWludXMgKiAxMF5lcCAvIGRlbm9taW5hdG9y
OworICAgIC8vICAgIG0rID09IHYgKyBkZWx0YV9wbHVzICogMTBeZXAgLyBkZW5vbWluYXRvcjsK
KyAgICAvLworICAgIC8vIFNpbmNlIDEwXihrLTEpIDw9IHYgPCAxMF5rICAgICh3aXRoIGsgPT0g
ZXN0aW1hdGVkX3Bvd2VyKQorICAgIC8vICBvciAgICAgICAxMF5rIDw9IHYgPCAxMF4oaysxKQor
ICAgIC8vICB3ZSB0aGVuIGhhdmUgMC4xIDw9IG51bWVyYXRvci9kZW5vbWluYXRvciA8IDEKKyAg
ICAvLyAgICAgICAgICAgb3IgICAgMSA8PSBudW1lcmF0b3IvZGVub21pbmF0b3IgPCAxMAorICAg
IC8vCisgICAgLy8gSXQgaXMgdGhlbiBlYXN5IHRvIGtpY2tzdGFydCB0aGUgZGlnaXQtZ2VuZXJh
dGlvbiByb3V0aW5lLgorICAgIC8vCisgICAgLy8gVGhlIGJvdW5kYXJ5LWRlbHRhcyBhcmUgb25s
eSBmaWxsZWQgaWYgbmVlZF9ib3VuZGFyeV9kZWx0YXMgaXMgc2V0LgorICAgIHN0YXRpYyB2b2lk
IEluaXRpYWxTY2FsZWRTdGFydFZhbHVlcyhkb3VibGUgdiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGVzdGltYXRlZF9wb3dlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBuZWVkX2JvdW5kYXJ5X2RlbHRhcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBudW1lcmF0b3Is
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogZGVub21p
bmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSog
ZGVsdGFfbWludXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJp
Z251bSogZGVsdGFfcGx1cykgeworICAgICAgICBpZiAoRG91YmxlKHYpLkV4cG9uZW50KCkgPj0g
MCkgeworICAgICAgICAgICAgSW5pdGlhbFNjYWxlZFN0YXJ0VmFsdWVzUG9zaXRpdmVFeHBvbmVu
dCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
diwgZXN0aW1hdGVkX3Bvd2VyLCBuZWVkX2JvdW5kYXJ5X2RlbHRhcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJhdG9yLCBkZW5vbWlu
YXRvciwgZGVsdGFfbWludXMsIGRlbHRhX3BsdXMpOworICAgICAgICB9IGVsc2UgaWYgKGVzdGlt
YXRlZF9wb3dlciA+PSAwKSB7CisgICAgICAgICAgICBJbml0aWFsU2NhbGVkU3RhcnRWYWx1ZXNO
ZWdhdGl2ZUV4cG9uZW50UG9zaXRpdmVQb3dlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYsIGVzdGltYXRlZF9wb3dl
ciwgbmVlZF9ib3VuZGFyeV9kZWx0YXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmF0b3IsIGRlbm9taW5hdG9y
LCBkZWx0YV9taW51cywgZGVsdGFfcGx1cyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBJbml0aWFsU2NhbGVkU3RhcnRWYWx1ZXNOZWdhdGl2ZUV4cG9uZW50TmVnYXRpdmVQb3dlcigK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHYsIGVzdGltYXRlZF9wb3dlciwgbmVlZF9ib3VuZGFyeV9kZWx0YXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBudW1lcmF0b3IsIGRlbm9taW5hdG9yLCBkZWx0YV9taW51cywgZGVsdGFfcGx1cyk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgLy8gVGhpcyByb3V0aW5lIG11bHRpcGxp
ZXMgbnVtZXJhdG9yL2Rlbm9taW5hdG9yIHNvIHRoYXQgaXRzIHZhbHVlcyBsaWVzIGluIHRoZQor
ICAgIC8vIHJhbmdlIDEtMTAuIFRoYXQgaXMgYWZ0ZXIgYSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24g
d2UgaGF2ZToKKyAgICAvLyAgICAxIDw9IChudW1lcmF0b3IgKyBkZWx0YV9wbHVzKSAvZGVub21p
bmF0b3IgPCAxMC4KKyAgICAvLyBMZXQgbnVtZXJhdG9yIHRoZSBpbnB1dCBiZWZvcmUgbW9kaWZp
Y2F0aW9uIGFuZCBudW1lcmF0b3InIHRoZSBhcmd1bWVudAorICAgIC8vIGFmdGVyIG1vZGlmaWNh
dGlvbiwgdGhlbiB0aGUgb3V0cHV0LXBhcmFtZXRlciBkZWNpbWFsX3BvaW50IGlzIHN1Y2ggdGhh
dAorICAgIC8vICBudW1lcmF0b3IgLyBkZW5vbWluYXRvciAqIDEwXmVzdGltYXRlZF9wb3dlciA9
PQorICAgIC8vICAgIG51bWVyYXRvcicgLyBkZW5vbWluYXRvcicgKiAxMF4oZGVjaW1hbF9wb2lu
dCAtIDEpCisgICAgLy8gSW4gc29tZSBjYXNlcyBlc3RpbWF0ZWRfcG93ZXIgd2FzIHRvbyBsb3cs
IGFuZCB0aGlzIGlzIGFscmVhZHkgdGhlIGNhc2UuIFdlCisgICAgLy8gdGhlbiBzaW1wbHkgYWRq
dXN0IHRoZSBwb3dlciBzbyB0aGF0IDEwXihrLTEpIDw9IHYgPCAxMF5rICh3aXRoIGsgPT0KKyAg
ICAvLyBlc3RpbWF0ZWRfcG93ZXIpIGJ1dCBkbyBub3QgdG91Y2ggdGhlIG51bWVyYXRvciBvciBk
ZW5vbWluYXRvci4KKyAgICAvLyBPdGhlcndpc2UgdGhlIHJvdXRpbmUgbXVsdGlwbGllcyB0aGUg
bnVtZXJhdG9yIGFuZCB0aGUgZGVsdGFzIGJ5IDEwLgorICAgIHN0YXRpYyB2b2lkIEZpeHVwTXVs
dGlwbHkxMChpbnQgZXN0aW1hdGVkX3Bvd2VyLCBib29sIGlzX2V2ZW4sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCogZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQmlnbnVtKiBudW1lcmF0b3IsIEJpZ251bSogZGVub21pbmF0b3IsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogZGVsdGFfbWludXMsIEJpZ251
bSogZGVsdGFfcGx1cykgeworICAgICAgICBib29sIGluX3JhbmdlOworICAgICAgICBpZiAoaXNf
ZXZlbikgeworICAgICAgICAgICAgLy8gRm9yIElFRUUgZG91YmxlcyBoYWxmLXdheSBjYXNlcyAo
aW4gZGVjaW1hbCBzeXN0ZW0gbnVtYmVycyBlbmRpbmcgd2l0aCA1KQorICAgICAgICAgICAgLy8g
YXJlIHJvdW5kZWQgdG8gdGhlIGNsb3Nlc3QgZmxvYXRpbmctcG9pbnQgbnVtYmVyIHdpdGggZXZl
biBzaWduaWZpY2FuZC4KKyAgICAgICAgICAgIGluX3JhbmdlID0gQmlnbnVtOjpQbHVzQ29tcGFy
ZSgqbnVtZXJhdG9yLCAqZGVsdGFfcGx1cywgKmRlbm9taW5hdG9yKSA+PSAwOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgaW5fcmFuZ2UgPSBCaWdudW06OlBsdXNDb21wYXJlKCpudW1l
cmF0b3IsICpkZWx0YV9wbHVzLCAqZGVub21pbmF0b3IpID4gMDsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoaW5fcmFuZ2UpIHsKKyAgICAgICAgICAgIC8vIFNpbmNlIG51bWVyYXRvciArIGRlbHRh
X3BsdXMgPj0gZGVub21pbmF0b3Igd2UgYWxyZWFkeSBoYXZlCisgICAgICAgICAgICAvLyAxIDw9
IG51bWVyYXRvci9kZW5vbWluYXRvciA8IDEwLiBTaW1wbHkgdXBkYXRlIHRoZSBlc3RpbWF0ZWRf
cG93ZXIuCisgICAgICAgICAgICAqZGVjaW1hbF9wb2ludCA9IGVzdGltYXRlZF9wb3dlciArIDE7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAqZGVjaW1hbF9wb2ludCA9IGVzdGltYXRl
ZF9wb3dlcjsKKyAgICAgICAgICAgIG51bWVyYXRvci0+VGltZXMxMCgpOworICAgICAgICAgICAg
aWYgKEJpZ251bTo6RXF1YWwoKmRlbHRhX21pbnVzLCAqZGVsdGFfcGx1cykpIHsKKyAgICAgICAg
ICAgICAgICBkZWx0YV9taW51cy0+VGltZXMxMCgpOworICAgICAgICAgICAgICAgIGRlbHRhX3Bs
dXMtPkFzc2lnbkJpZ251bSgqZGVsdGFfbWludXMpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBkZWx0YV9taW51cy0+VGltZXMxMCgpOworICAgICAgICAgICAgICAgIGRl
bHRhX3BsdXMtPlRpbWVzMTAoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAg
ICAKK30gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS1kdG9hLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL2R0b2EvYmlnbnVtLWR0b2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wM2ZiYWFiYjdhNTYzODU2
ZjBmYTRjZjU0ZWI3ZjdlNjI5NjBlNjc5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS1kdG9hLmgKQEAgLTAsMCArMSw4MiBAQAorLy8gQ29w
eXJpZ2h0IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xh
aW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
CisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
Ky8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWZuZGVmIERPVUJMRV9DT05WRVJTSU9OX0JJR05VTV9E
VE9BX0hfCisjZGVmaW5lIERPVUJMRV9DT05WRVJTSU9OX0JJR05VTV9EVE9BX0hfCisKKyNpbmNs
dWRlICJ1dGlscy5oIgorCituYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAg
IGVudW0gQmlnbnVtRHRvYU1vZGUgeworICAgICAgICAvLyBSZXR1cm4gdGhlIHNob3J0ZXN0IGNv
cnJlY3QgcmVwcmVzZW50YXRpb24uCisgICAgICAgIC8vIEZvciBleGFtcGxlIHRoZSBvdXRwdXQg
b2YgMC4yOTk5OTk5OTk5OTk5OTk5ODg4OTcgaXMgKHRoZSBsZXNzIGFjY3VyYXRlIGJ1dAorICAg
ICAgICAvLyBjb3JyZWN0KSAwLjMuCisgICAgICAgIEJJR05VTV9EVE9BX1NIT1JURVNULAorICAg
ICAgICAvLyBSZXR1cm4gYSBmaXhlZCBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFs
IHBvaW50LgorICAgICAgICAvLyBGb3IgaW5zdGFuY2UgZml4ZWQoMC4xLCA0KSBiZWNvbWVzIDAu
MTAwMAorICAgICAgICAvLyBJZiB0aGUgaW5wdXQgbnVtYmVyIGlzIGJpZywgdGhlIG91dHB1dCB3
aWxsIGJlIGJpZy4KKyAgICAgICAgQklHTlVNX0RUT0FfRklYRUQsCisgICAgICAgIC8vIFJldHVy
biBhIGZpeGVkIG51bWJlciBvZiBkaWdpdHMsIG5vIG1hdHRlciB3aGF0IHRoZSBleHBvbmVudCBp
cy4KKyAgICAgICAgQklHTlVNX0RUT0FfUFJFQ0lTSU9OCisgICAgfTsKKyAgICAKKyAgICAvLyBD
b252ZXJ0cyB0aGUgZ2l2ZW4gZG91YmxlICd2JyB0byBhc2NpaS4KKyAgICAvLyBUaGUgcmVzdWx0
IHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBidWZmZXIgKiAxMF4ocG9pbnQtbGVuZ3RoKS4KKyAg
ICAvLyBUaGUgYnVmZmVyIHdpbGwgYmUgbnVsbC10ZXJtaW5hdGVkLgorICAgIC8vCisgICAgLy8g
VGhlIGlucHV0IHYgbXVzdCBiZSA+IDAgYW5kIGRpZmZlcmVudCBmcm9tIE5hTiwgYW5kIEluZmlu
aXR5LgorICAgIC8vCisgICAgLy8gVGhlIG91dHB1dCBkZXBlbmRzIG9uIHRoZSBnaXZlbiBtb2Rl
OgorICAgIC8vICAtIFNIT1JURVNUOiBwcm9kdWNlIHRoZSBsZWFzdCBhbW91bnQgb2YgZGlnaXRz
IGZvciB3aGljaCB0aGUgaW50ZXJuYWwKKyAgICAvLyAgIGlkZW50aXR5IHJlcXVpcmVtZW50IGlz
IHN0aWxsIHNhdGlzZmllZC4gSWYgdGhlIGRpZ2l0cyBhcmUgcHJpbnRlZAorICAgIC8vICAgKHRv
Z2V0aGVyIHdpdGggdGhlIGNvcnJlY3QgZXhwb25lbnQpIHRoZW4gcmVhZGluZyB0aGlzIG51bWJl
ciB3aWxsIGdpdmUKKyAgICAvLyAgICd2JyBhZ2Fpbi4gVGhlIGJ1ZmZlciB3aWxsIGNob29zZSB0
aGUgcmVwcmVzZW50YXRpb24gdGhhdCBpcyBjbG9zZXN0IHRvCisgICAgLy8gICAndicuIElmIHRo
ZXJlIGFyZSB0d28gYXQgdGhlIHNhbWUgZGlzdGFuY2UsIHRoYW4gdGhlIG51bWJlciBpcyByb3Vu
ZCB1cC4KKyAgICAvLyAgIEluIHRoaXMgbW9kZSB0aGUgJ3JlcXVlc3RlZF9kaWdpdHMnIHBhcmFt
ZXRlciBpcyBpZ25vcmVkLgorICAgIC8vICAtIEZJWEVEOiBwcm9kdWNlcyBkaWdpdHMgbmVjZXNz
YXJ5IHRvIHByaW50IGEgZ2l2ZW4gbnVtYmVyIHdpdGgKKyAgICAvLyAgICdyZXF1ZXN0ZWRfZGln
aXRzJyBkaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQuIFRoZSBwcm9kdWNlZCBkaWdpdHMK
KyAgICAvLyAgIG1pZ2h0IGJlIHRvbyBzaG9ydCBpbiB3aGljaCBjYXNlIHRoZSBjYWxsZXIgaGFz
IHRvIGZpbGwgdGhlIGdhcHMgd2l0aCAnMCdzLgorICAgIC8vICAgRXhhbXBsZTogdG9GaXhlZCgw
LjAwMSwgNSkgaXMgYWxsb3dlZCB0byByZXR1cm4gYnVmZmVyPSIxIiwgcG9pbnQ9LTIuCisgICAg
Ly8gICBIYWxmd2F5IGNhc2VzIGFyZSByb3VuZGVkIHVwLiBUaGUgY2FsbCB0b0ZpeGVkKDAuMTUs
IDIpIHRodXMgcmV0dXJucworICAgIC8vICAgICBidWZmZXI9IjIiLCBwb2ludD0wLgorICAgIC8v
ICAgTm90ZTogdGhlIGxlbmd0aCBvZiB0aGUgcmV0dXJuZWQgYnVmZmVyIGhhcyBubyBtZWFuaW5n
IHdydCB0aGUgc2lnbmlmaWNhbmNlCisgICAgLy8gICBvZiBpdHMgZGlnaXRzLiBUaGF0IGlzLCBq
dXN0IGJlY2F1c2UgaXQgY29udGFpbnMgJzAncyBkb2VzIG5vdCBtZWFuIHRoYXQKKyAgICAvLyAg
IGFueSBvdGhlciBkaWdpdCB3b3VsZCBub3Qgc2F0aXNmeSB0aGUgaW50ZXJuYWwgaWRlbnRpdHkg
cmVxdWlyZW1lbnQuCisgICAgLy8gIC0gUFJFQ0lTSU9OOiBwcm9kdWNlcyAncmVxdWVzdGVkX2Rp
Z2l0cycgd2hlcmUgdGhlIGZpcnN0IGRpZ2l0IGlzIG5vdCAnMCcuCisgICAgLy8gICBFdmVuIHRo
b3VnaCB0aGUgbGVuZ3RoIG9mIHByb2R1Y2VkIGRpZ2l0cyB1c3VhbGx5IGVxdWFscworICAgIC8v
ICAgJ3JlcXVlc3RlZF9kaWdpdHMnLCB0aGUgZnVuY3Rpb24gaXMgYWxsb3dlZCB0byByZXR1cm4g
ZmV3ZXIgZGlnaXRzLCBpbgorICAgIC8vICAgd2hpY2ggY2FzZSB0aGUgY2FsbGVyIGhhcyB0byBm
aWxsIHRoZSBtaXNzaW5nIGRpZ2l0cyB3aXRoICcwJ3MuCisgICAgLy8gICBIYWxmd2F5IGNhc2Vz
IGFyZSBhZ2FpbiByb3VuZGVkIHVwLgorICAgIC8vICdCaWdudW1EdG9hJyBleHBlY3RzIHRoZSBn
aXZlbiBidWZmZXIgdG8gYmUgYmlnIGVub3VnaCB0byBob2xkIGFsbCBkaWdpdHMKKyAgICAvLyBh
bmQgYSB0ZXJtaW5hdGluZyBudWxsLWNoYXJhY3Rlci4KKyAgICB2b2lkIEJpZ251bUR0b2EoZG91
YmxlIHYsIEJpZ251bUR0b2FNb2RlIG1vZGUsIGludCByZXF1ZXN0ZWRfZGlnaXRzLAorICAgICAg
ICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLCBpbnQqIGxlbmd0aCwgaW50KiBwb2lu
dCk7CisgICAgCit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KKworI2VuZGlmICAv
LyBET1VCTEVfQ09OVkVSU0lPTl9CSUdOVU1fRFRPQV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS5jYyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvZHRvYS9iaWdudW0uY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGYwMTU0NjYyNWVkOTM3YWY4ZjE0MGYxNGQx
MDU3ZjU5MTE1MmI2NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvZHRvYS9iaWdudW0uY2MKQEAgLTAsMCArMSw3NjQgQEAKKy8vIENvcHlyaWdodCAyMDEwIHRo
ZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
Ky8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisv
LyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworI2luY2x1ZGUgImJpZ251bS5oIgorI2luY2x1ZGUgInV0aWxzLmgiCisKK25hbWVz
cGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgQmlnbnVtOjpCaWdudW0oKQorICAg
IDogYmlnaXRzXyhiaWdpdHNfYnVmZmVyXywga0JpZ2l0Q2FwYWNpdHkpLCB1c2VkX2RpZ2l0c18o
MCksIGV4cG9uZW50XygwKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwga0JpZ2l0Q2Fw
YWNpdHk7ICsraSkgeworICAgICAgICAgICAgYmlnaXRzX1tpXSA9IDA7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUz4KKyAgICBzdGF0aWMgaW50
IEJpdFNpemUoUyB2YWx1ZSkgeworICAgICAgICByZXR1cm4gOCAqIHNpemVvZih2YWx1ZSk7Cisg
ICAgfQorICAgIAorICAgIC8vIEd1YXJhbnRlZWQgdG8gbGllIGluIG9uZSBCaWdpdC4KKyAgICB2
b2lkIEJpZ251bTo6QXNzaWduVUludDE2KHVpbnQxNl90IHZhbHVlKSB7CisgICAgICAgIEFTU0VS
VChrQmlnaXRTaXplID49IEJpdFNpemUodmFsdWUpKTsKKyAgICAgICAgWmVybygpOworICAgICAg
ICBpZiAodmFsdWUgPT0gMCkgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgRW5zdXJlQ2FwYWNp
dHkoMSk7CisgICAgICAgIGJpZ2l0c19bMF0gPSB2YWx1ZTsKKyAgICAgICAgdXNlZF9kaWdpdHNf
ID0gMTsKKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06OkFzc2lnblVJbnQ2NCh1
aW50NjRfdCB2YWx1ZSkgeworICAgICAgICBjb25zdCBpbnQga1VJbnQ2NFNpemUgPSA2NDsKKyAg
ICAgICAgCisgICAgICAgIFplcm8oKTsKKyAgICAgICAgaWYgKHZhbHVlID09IDApIHJldHVybjsK
KyAgICAgICAgCisgICAgICAgIGludCBuZWVkZWRfYmlnaXRzID0ga1VJbnQ2NFNpemUgLyBrQmln
aXRTaXplICsgMTsKKyAgICAgICAgRW5zdXJlQ2FwYWNpdHkobmVlZGVkX2JpZ2l0cyk7CisgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmVlZGVkX2JpZ2l0czsgKytpKSB7CisgICAgICAgICAg
ICBiaWdpdHNfW2ldID0gdmFsdWUgJiBrQmlnaXRNYXNrOworICAgICAgICAgICAgdmFsdWUgPSB2
YWx1ZSA+PiBrQmlnaXRTaXplOworICAgICAgICB9CisgICAgICAgIHVzZWRfZGlnaXRzXyA9IG5l
ZWRlZF9iaWdpdHM7CisgICAgICAgIENsYW1wKCk7CisgICAgfQorICAgIAorICAgIAorICAgIHZv
aWQgQmlnbnVtOjpBc3NpZ25CaWdudW0oY29uc3QgQmlnbnVtJiBvdGhlcikgeworICAgICAgICBl
eHBvbmVudF8gPSBvdGhlci5leHBvbmVudF87CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
b3RoZXIudXNlZF9kaWdpdHNfOyArK2kpIHsKKyAgICAgICAgICAgIGJpZ2l0c19baV0gPSBvdGhl
ci5iaWdpdHNfW2ldOworICAgICAgICB9CisgICAgICAgIC8vIENsZWFyIHRoZSBleGNlc3MgZGln
aXRzIChpZiB0aGVyZSB3ZXJlIGFueSkuCisgICAgICAgIGZvciAoaW50IGkgPSBvdGhlci51c2Vk
X2RpZ2l0c187IGkgPCB1c2VkX2RpZ2l0c187ICsraSkgeworICAgICAgICAgICAgYmlnaXRzX1tp
XSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgdXNlZF9kaWdpdHNfID0gb3RoZXIudXNlZF9kaWdp
dHNfOworICAgIH0KKyAgICAKKyAgICAKKyAgICBzdGF0aWMgdWludDY0X3QgUmVhZFVJbnQ2NChW
ZWN0b3I8Y29uc3QgY2hhcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBmcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkaWdpdHNfdG9f
cmVhZCkgeworICAgICAgICB1aW50NjRfdCByZXN1bHQgPSAwOworICAgICAgICBmb3IgKGludCBp
ID0gZnJvbTsgaSA8IGZyb20gKyBkaWdpdHNfdG9fcmVhZDsgKytpKSB7CisgICAgICAgICAgICBp
bnQgZGlnaXQgPSBidWZmZXJbaV0gLSAnMCc7CisgICAgICAgICAgICBBU1NFUlQoMCA8PSBkaWdp
dCAmJiBkaWdpdCA8PSA5KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAqIDEwICsgZGln
aXQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAg
CisgICAgdm9pZCBCaWdudW06OkFzc2lnbkRlY2ltYWxTdHJpbmcoVmVjdG9yPGNvbnN0IGNoYXI+
IHZhbHVlKSB7CisgICAgICAgIC8vIDJeNjQgPSAxODQ0Njc0NDA3MzcwOTU1MTYxNiA+IDEwXjE5
CisgICAgICAgIGNvbnN0IGludCBrTWF4VWludDY0RGVjaW1hbERpZ2l0cyA9IDE5OworICAgICAg
ICBaZXJvKCk7CisgICAgICAgIGludCBsZW5ndGggPSB2YWx1ZS5sZW5ndGgoKTsKKyAgICAgICAg
aW50IHBvcyA9IDA7CisgICAgICAgIC8vIExldCdzIGp1c3Qgc2F5IHRoYXQgZWFjaCBkaWdpdCBu
ZWVkcyA0IGJpdHMuCisgICAgICAgIHdoaWxlIChsZW5ndGggPj0ga01heFVpbnQ2NERlY2ltYWxE
aWdpdHMpIHsKKyAgICAgICAgICAgIHVpbnQ2NF90IGRpZ2l0cyA9IFJlYWRVSW50NjQodmFsdWUs
IHBvcywga01heFVpbnQ2NERlY2ltYWxEaWdpdHMpOworICAgICAgICAgICAgcG9zICs9IGtNYXhV
aW50NjREZWNpbWFsRGlnaXRzOworICAgICAgICAgICAgbGVuZ3RoIC09IGtNYXhVaW50NjREZWNp
bWFsRGlnaXRzOworICAgICAgICAgICAgTXVsdGlwbHlCeVBvd2VyT2ZUZW4oa01heFVpbnQ2NERl
Y2ltYWxEaWdpdHMpOworICAgICAgICAgICAgQWRkVUludDY0KGRpZ2l0cyk7CisgICAgICAgIH0K
KyAgICAgICAgdWludDY0X3QgZGlnaXRzID0gUmVhZFVJbnQ2NCh2YWx1ZSwgcG9zLCBsZW5ndGgp
OworICAgICAgICBNdWx0aXBseUJ5UG93ZXJPZlRlbihsZW5ndGgpOworICAgICAgICBBZGRVSW50
NjQoZGlnaXRzKTsKKyAgICAgICAgQ2xhbXAoKTsKKyAgICB9CisgICAgCisgICAgCisgICAgc3Rh
dGljIGludCBIZXhDaGFyVmFsdWUoY2hhciBjKSB7CisgICAgICAgIGlmICgnMCcgPD0gYyAmJiBj
IDw9ICc5JykgcmV0dXJuIGMgLSAnMCc7CisgICAgICAgIGlmICgnYScgPD0gYyAmJiBjIDw9ICdm
JykgcmV0dXJuIDEwICsgYyAtICdhJzsKKyAgICAgICAgaWYgKCdBJyA8PSBjICYmIGMgPD0gJ0Yn
KSByZXR1cm4gMTAgKyBjIC0gJ0EnOworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICBy
ZXR1cm4gMDsgIC8vIFRvIG1ha2UgY29tcGlsZXIgaGFwcHkuCisgICAgfQorICAgIAorICAgIAor
ICAgIHZvaWQgQmlnbnVtOjpBc3NpZ25IZXhTdHJpbmcoVmVjdG9yPGNvbnN0IGNoYXI+IHZhbHVl
KSB7CisgICAgICAgIFplcm8oKTsKKyAgICAgICAgaW50IGxlbmd0aCA9IHZhbHVlLmxlbmd0aCgp
OworICAgICAgICAKKyAgICAgICAgaW50IG5lZWRlZF9iaWdpdHMgPSBsZW5ndGggKiA0IC8ga0Jp
Z2l0U2l6ZSArIDE7CisgICAgICAgIEVuc3VyZUNhcGFjaXR5KG5lZWRlZF9iaWdpdHMpOworICAg
ICAgICBpbnQgc3RyaW5nX2luZGV4ID0gbGVuZ3RoIC0gMTsKKyAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBuZWVkZWRfYmlnaXRzIC0gMTsgKytpKSB7CisgICAgICAgICAgICAvLyBUaGVzZSBi
aWdpdHMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgImZ1bGwiLgorICAgICAgICAgICAgQ2h1bmsgY3Vy
cmVudF9iaWdpdCA9IDA7CisgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGtCaWdpdFNp
emUgLyA0OyBqKyspIHsKKyAgICAgICAgICAgICAgICBjdXJyZW50X2JpZ2l0ICs9IEhleENoYXJW
YWx1ZSh2YWx1ZVtzdHJpbmdfaW5kZXgtLV0pIDw8IChqICogNCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBiaWdpdHNfW2ldID0gY3VycmVudF9iaWdpdDsKKyAgICAgICAgfQorICAgICAg
ICB1c2VkX2RpZ2l0c18gPSBuZWVkZWRfYmlnaXRzIC0gMTsKKyAgICAgICAgCisgICAgICAgIENo
dW5rIG1vc3Rfc2lnbmlmaWNhbnRfYmlnaXQgPSAwOyAgLy8gQ291bGQgYmUgPSAwOworICAgICAg
ICBmb3IgKGludCBqID0gMDsgaiA8PSBzdHJpbmdfaW5kZXg7ICsraikgeworICAgICAgICAgICAg
bW9zdF9zaWduaWZpY2FudF9iaWdpdCA8PD0gNDsKKyAgICAgICAgICAgIG1vc3Rfc2lnbmlmaWNh
bnRfYmlnaXQgKz0gSGV4Q2hhclZhbHVlKHZhbHVlW2pdKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAobW9zdF9zaWduaWZpY2FudF9iaWdpdCAhPSAwKSB7CisgICAgICAgICAgICBiaWdpdHNfW3Vz
ZWRfZGlnaXRzX10gPSBtb3N0X3NpZ25pZmljYW50X2JpZ2l0OworICAgICAgICAgICAgdXNlZF9k
aWdpdHNfKys7CisgICAgICAgIH0KKyAgICAgICAgQ2xhbXAoKTsKKyAgICB9CisgICAgCisgICAg
CisgICAgdm9pZCBCaWdudW06OkFkZFVJbnQ2NCh1aW50NjRfdCBvcGVyYW5kKSB7CisgICAgICAg
IGlmIChvcGVyYW5kID09IDApIHJldHVybjsKKyAgICAgICAgQmlnbnVtIG90aGVyOworICAgICAg
ICBvdGhlci5Bc3NpZ25VSW50NjQob3BlcmFuZCk7CisgICAgICAgIEFkZEJpZ251bShvdGhlcik7
CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpBZGRCaWdudW0oY29uc3QgQmln
bnVtJiBvdGhlcikgeworICAgICAgICBBU1NFUlQoSXNDbGFtcGVkKCkpOworICAgICAgICBBU1NF
UlQob3RoZXIuSXNDbGFtcGVkKCkpOworICAgICAgICAKKyAgICAgICAgLy8gSWYgdGhpcyBoYXMg
YSBncmVhdGVyIGV4cG9uZW50IHRoYW4gb3RoZXIgYXBwZW5kIHplcm8tYmlnaXRzIHRvIHRoaXMu
CisgICAgICAgIC8vIEFmdGVyIHRoaXMgY2FsbCBleHBvbmVudF8gPD0gb3RoZXIuZXhwb25lbnRf
LgorICAgICAgICBBbGlnbihvdGhlcik7CisgICAgICAgIAorICAgICAgICAvLyBUaGVyZSBhcmUg
dHdvIHBvc3NpYmlsaXRpZXM6CisgICAgICAgIC8vICAgYWFhYWFhYWFhYWEgMDAwMCAgKHdoZXJl
IHRoZSAwcyByZXByZXNlbnQgYSdzIGV4cG9uZW50KQorICAgICAgICAvLyAgICAgYmJiYmIgMDAw
MDAwMDAKKyAgICAgICAgLy8gICAtLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIC8vICAgY2NjY2Nj
Y2NjY2MgMDAwMAorICAgICAgICAvLyBvcgorICAgICAgICAvLyAgICBhYWFhYWFhYWFhIDAwMDAK
KyAgICAgICAgLy8gIGJiYmJiYmJiYiAwMDAwMDAwCisgICAgICAgIC8vICAtLS0tLS0tLS0tLS0t
LS0tLQorICAgICAgICAvLyAgY2NjY2NjY2NjY2NjIDAwMDAKKyAgICAgICAgLy8gSW4gYm90aCBj
YXNlcyB3ZSBtaWdodCBuZWVkIGEgY2FycnkgYmlnaXQuCisgICAgICAgIAorICAgICAgICBFbnN1
cmVDYXBhY2l0eSgxICsgTWF4KEJpZ2l0TGVuZ3RoKCksIG90aGVyLkJpZ2l0TGVuZ3RoKCkpIC0g
ZXhwb25lbnRfKTsKKyAgICAgICAgQ2h1bmsgY2FycnkgPSAwOworICAgICAgICBpbnQgYmlnaXRf
cG9zID0gb3RoZXIuZXhwb25lbnRfIC0gZXhwb25lbnRfOworICAgICAgICBBU1NFUlQoYmlnaXRf
cG9zID49IDApOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG90aGVyLnVzZWRfZGlnaXRz
XzsgKytpKSB7CisgICAgICAgICAgICBDaHVuayBzdW0gPSBiaWdpdHNfW2JpZ2l0X3Bvc10gKyBv
dGhlci5iaWdpdHNfW2ldICsgY2Fycnk7CisgICAgICAgICAgICBiaWdpdHNfW2JpZ2l0X3Bvc10g
PSBzdW0gJiBrQmlnaXRNYXNrOworICAgICAgICAgICAgY2FycnkgPSBzdW0gPj4ga0JpZ2l0U2l6
ZTsKKyAgICAgICAgICAgIGJpZ2l0X3BvcysrOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICB3aGlsZSAoY2FycnkgIT0gMCkgeworICAgICAgICAgICAgQ2h1bmsgc3VtID0gYmlnaXRzX1ti
aWdpdF9wb3NdICsgY2Fycnk7CisgICAgICAgICAgICBiaWdpdHNfW2JpZ2l0X3Bvc10gPSBzdW0g
JiBrQmlnaXRNYXNrOworICAgICAgICAgICAgY2FycnkgPSBzdW0gPj4ga0JpZ2l0U2l6ZTsKKyAg
ICAgICAgICAgIGJpZ2l0X3BvcysrOworICAgICAgICB9CisgICAgICAgIHVzZWRfZGlnaXRzXyA9
IE1heChiaWdpdF9wb3MsIHVzZWRfZGlnaXRzXyk7CisgICAgICAgIEFTU0VSVChJc0NsYW1wZWQo
KSk7CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpTdWJ0cmFjdEJpZ251bShj
b25zdCBCaWdudW0mIG90aGVyKSB7CisgICAgICAgIEFTU0VSVChJc0NsYW1wZWQoKSk7CisgICAg
ICAgIEFTU0VSVChvdGhlci5Jc0NsYW1wZWQoKSk7CisgICAgICAgIC8vIFdlIHJlcXVpcmUgdGhp
cyB0byBiZSBiaWdnZXIgdGhhbiBvdGhlci4KKyAgICAgICAgQVNTRVJUKExlc3NFcXVhbChvdGhl
ciwgKnRoaXMpKTsKKyAgICAgICAgCisgICAgICAgIEFsaWduKG90aGVyKTsKKyAgICAgICAgCisg
ICAgICAgIGludCBvZmZzZXQgPSBvdGhlci5leHBvbmVudF8gLSBleHBvbmVudF87CisgICAgICAg
IENodW5rIGJvcnJvdyA9IDA7CisgICAgICAgIGludCBpOworICAgICAgICBmb3IgKGkgPSAwOyBp
IDwgb3RoZXIudXNlZF9kaWdpdHNfOyArK2kpIHsKKyAgICAgICAgICAgIEFTU0VSVCgoYm9ycm93
ID09IDApIHx8IChib3Jyb3cgPT0gMSkpOworICAgICAgICAgICAgQ2h1bmsgZGlmZmVyZW5jZSA9
IGJpZ2l0c19baSArIG9mZnNldF0gLSBvdGhlci5iaWdpdHNfW2ldIC0gYm9ycm93OworICAgICAg
ICAgICAgYmlnaXRzX1tpICsgb2Zmc2V0XSA9IGRpZmZlcmVuY2UgJiBrQmlnaXRNYXNrOworICAg
ICAgICAgICAgYm9ycm93ID0gZGlmZmVyZW5jZSA+PiAoa0NodW5rU2l6ZSAtIDEpOworICAgICAg
ICB9CisgICAgICAgIHdoaWxlIChib3Jyb3cgIT0gMCkgeworICAgICAgICAgICAgQ2h1bmsgZGlm
ZmVyZW5jZSA9IGJpZ2l0c19baSArIG9mZnNldF0gLSBib3Jyb3c7CisgICAgICAgICAgICBiaWdp
dHNfW2kgKyBvZmZzZXRdID0gZGlmZmVyZW5jZSAmIGtCaWdpdE1hc2s7CisgICAgICAgICAgICBi
b3Jyb3cgPSBkaWZmZXJlbmNlID4+IChrQ2h1bmtTaXplIC0gMSk7CisgICAgICAgICAgICArK2k7
CisgICAgICAgIH0KKyAgICAgICAgQ2xhbXAoKTsKKyAgICB9CisgICAgCisgICAgCisgICAgdm9p
ZCBCaWdudW06OlNoaWZ0TGVmdChpbnQgc2hpZnRfYW1vdW50KSB7CisgICAgICAgIGlmICh1c2Vk
X2RpZ2l0c18gPT0gMCkgcmV0dXJuOworICAgICAgICBleHBvbmVudF8gKz0gc2hpZnRfYW1vdW50
IC8ga0JpZ2l0U2l6ZTsKKyAgICAgICAgaW50IGxvY2FsX3NoaWZ0ID0gc2hpZnRfYW1vdW50ICUg
a0JpZ2l0U2l6ZTsKKyAgICAgICAgRW5zdXJlQ2FwYWNpdHkodXNlZF9kaWdpdHNfICsgMSk7Cisg
ICAgICAgIEJpZ2l0c1NoaWZ0TGVmdChsb2NhbF9zaGlmdCk7CisgICAgfQorICAgIAorICAgIAor
ICAgIHZvaWQgQmlnbnVtOjpNdWx0aXBseUJ5VUludDMyKHVpbnQzMl90IGZhY3RvcikgeworICAg
ICAgICBpZiAoZmFjdG9yID09IDEpIHJldHVybjsKKyAgICAgICAgaWYgKGZhY3RvciA9PSAwKSB7
CisgICAgICAgICAgICBaZXJvKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHVzZWRfZGlnaXRzXyA9PSAwKSByZXR1cm47CisgICAgICAgIAorICAgICAgICAv
LyBUaGUgcHJvZHVjdCBvZiBhIGJpZ2l0IHdpdGggdGhlIGZhY3RvciBpcyBvZiBzaXplIGtCaWdp
dFNpemUgKyAzMi4KKyAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhpcyBudW1iZXIgKyAxIChmb3Ig
dGhlIGNhcnJ5KSBmaXRzIGludG8gZG91YmxlIGNodW5rLgorICAgICAgICBBU1NFUlQoa0RvdWJs
ZUNodW5rU2l6ZSA+PSBrQmlnaXRTaXplICsgMzIgKyAxKTsKKyAgICAgICAgRG91YmxlQ2h1bmsg
Y2FycnkgPSAwOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHVzZWRfZGlnaXRzXzsgKytp
KSB7CisgICAgICAgICAgICBEb3VibGVDaHVuayBwcm9kdWN0ID0gc3RhdGljX2Nhc3Q8RG91Ymxl
Q2h1bms+KGZhY3RvcikgKiBiaWdpdHNfW2ldICsgY2Fycnk7CisgICAgICAgICAgICBiaWdpdHNf
W2ldID0gc3RhdGljX2Nhc3Q8Q2h1bms+KHByb2R1Y3QgJiBrQmlnaXRNYXNrKTsKKyAgICAgICAg
ICAgIGNhcnJ5ID0gKHByb2R1Y3QgPj4ga0JpZ2l0U2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAg
d2hpbGUgKGNhcnJ5ICE9IDApIHsKKyAgICAgICAgICAgIEVuc3VyZUNhcGFjaXR5KHVzZWRfZGln
aXRzXyArIDEpOworICAgICAgICAgICAgYmlnaXRzX1t1c2VkX2RpZ2l0c19dID0gY2FycnkgJiBr
QmlnaXRNYXNrOworICAgICAgICAgICAgdXNlZF9kaWdpdHNfKys7CisgICAgICAgICAgICBjYXJy
eSA+Pj0ga0JpZ2l0U2l6ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICB2b2lk
IEJpZ251bTo6TXVsdGlwbHlCeVVJbnQ2NCh1aW50NjRfdCBmYWN0b3IpIHsKKyAgICAgICAgaWYg
KGZhY3RvciA9PSAxKSByZXR1cm47CisgICAgICAgIGlmIChmYWN0b3IgPT0gMCkgeworICAgICAg
ICAgICAgWmVybygpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIEFT
U0VSVChrQmlnaXRTaXplIDwgMzIpOworICAgICAgICB1aW50NjRfdCBjYXJyeSA9IDA7CisgICAg
ICAgIHVpbnQ2NF90IGxvdyA9IGZhY3RvciAmIDB4RkZGRkZGRkY7CisgICAgICAgIHVpbnQ2NF90
IGhpZ2ggPSBmYWN0b3IgPj4gMzI7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdXNlZF9k
aWdpdHNfOyArK2kpIHsKKyAgICAgICAgICAgIHVpbnQ2NF90IHByb2R1Y3RfbG93ID0gbG93ICog
YmlnaXRzX1tpXTsKKyAgICAgICAgICAgIHVpbnQ2NF90IHByb2R1Y3RfaGlnaCA9IGhpZ2ggKiBi
aWdpdHNfW2ldOworICAgICAgICAgICAgdWludDY0X3QgdG1wID0gKGNhcnJ5ICYga0JpZ2l0TWFz
aykgKyBwcm9kdWN0X2xvdzsKKyAgICAgICAgICAgIGJpZ2l0c19baV0gPSB0bXAgJiBrQmlnaXRN
YXNrOworICAgICAgICAgICAgY2FycnkgPSAoY2FycnkgPj4ga0JpZ2l0U2l6ZSkgKyAodG1wID4+
IGtCaWdpdFNpemUpICsKKyAgICAgICAgICAgIChwcm9kdWN0X2hpZ2ggPDwgKDMyIC0ga0JpZ2l0
U2l6ZSkpOworICAgICAgICB9CisgICAgICAgIHdoaWxlIChjYXJyeSAhPSAwKSB7CisgICAgICAg
ICAgICBFbnN1cmVDYXBhY2l0eSh1c2VkX2RpZ2l0c18gKyAxKTsKKyAgICAgICAgICAgIGJpZ2l0
c19bdXNlZF9kaWdpdHNfXSA9IGNhcnJ5ICYga0JpZ2l0TWFzazsKKyAgICAgICAgICAgIHVzZWRf
ZGlnaXRzXysrOworICAgICAgICAgICAgY2FycnkgPj49IGtCaWdpdFNpemU7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06Ok11bHRpcGx5QnlQb3dlck9mVGVu
KGludCBleHBvbmVudCkgeworICAgICAgICBjb25zdCB1aW50NjRfdCBrRml2ZTI3ID0gVUlOVDY0
XzJQQVJUX0MoMHg2NzY1Yzc5MywgZmExMDA3OWQpOworICAgICAgICBjb25zdCB1aW50MTZfdCBr
Rml2ZTEgPSA1OworICAgICAgICBjb25zdCB1aW50MTZfdCBrRml2ZTIgPSBrRml2ZTEgKiA1Owor
ICAgICAgICBjb25zdCB1aW50MTZfdCBrRml2ZTMgPSBrRml2ZTIgKiA1OworICAgICAgICBjb25z
dCB1aW50MTZfdCBrRml2ZTQgPSBrRml2ZTMgKiA1OworICAgICAgICBjb25zdCB1aW50MTZfdCBr
Rml2ZTUgPSBrRml2ZTQgKiA1OworICAgICAgICBjb25zdCB1aW50MTZfdCBrRml2ZTYgPSBrRml2
ZTUgKiA1OworICAgICAgICBjb25zdCB1aW50MzJfdCBrRml2ZTcgPSBrRml2ZTYgKiA1OworICAg
ICAgICBjb25zdCB1aW50MzJfdCBrRml2ZTggPSBrRml2ZTcgKiA1OworICAgICAgICBjb25zdCB1
aW50MzJfdCBrRml2ZTkgPSBrRml2ZTggKiA1OworICAgICAgICBjb25zdCB1aW50MzJfdCBrRml2
ZTEwID0ga0ZpdmU5ICogNTsKKyAgICAgICAgY29uc3QgdWludDMyX3Qga0ZpdmUxMSA9IGtGaXZl
MTAgKiA1OworICAgICAgICBjb25zdCB1aW50MzJfdCBrRml2ZTEyID0ga0ZpdmUxMSAqIDU7Cisg
ICAgICAgIGNvbnN0IHVpbnQzMl90IGtGaXZlMTMgPSBrRml2ZTEyICogNTsKKyAgICAgICAgY29u
c3QgdWludDMyX3Qga0ZpdmUxX3RvXzEyW10gPQorICAgICAgICB7IGtGaXZlMSwga0ZpdmUyLCBr
Rml2ZTMsIGtGaXZlNCwga0ZpdmU1LCBrRml2ZTYsCisgICAgICAgICAgICBrRml2ZTcsIGtGaXZl
OCwga0ZpdmU5LCBrRml2ZTEwLCBrRml2ZTExLCBrRml2ZTEyIH07CisgICAgICAgIAorICAgICAg
ICBBU1NFUlQoZXhwb25lbnQgPj0gMCk7CisgICAgICAgIGlmIChleHBvbmVudCA9PSAwKSByZXR1
cm47CisgICAgICAgIGlmICh1c2VkX2RpZ2l0c18gPT0gMCkgcmV0dXJuOworICAgICAgICAKKyAg
ICAgICAgLy8gV2Ugc2hpZnQgYnkgZXhwb25lbnQgYXQgdGhlIGVuZCBqdXN0IGJlZm9yZSByZXR1
cm5pbmcuCisgICAgICAgIGludCByZW1haW5pbmdfZXhwb25lbnQgPSBleHBvbmVudDsKKyAgICAg
ICAgd2hpbGUgKHJlbWFpbmluZ19leHBvbmVudCA+PSAyNykgeworICAgICAgICAgICAgTXVsdGlw
bHlCeVVJbnQ2NChrRml2ZTI3KTsKKyAgICAgICAgICAgIHJlbWFpbmluZ19leHBvbmVudCAtPSAy
NzsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAocmVtYWluaW5nX2V4cG9uZW50ID49IDEzKSB7
CisgICAgICAgICAgICBNdWx0aXBseUJ5VUludDMyKGtGaXZlMTMpOworICAgICAgICAgICAgcmVt
YWluaW5nX2V4cG9uZW50IC09IDEzOworICAgICAgICB9CisgICAgICAgIGlmIChyZW1haW5pbmdf
ZXhwb25lbnQgPiAwKSB7CisgICAgICAgICAgICBNdWx0aXBseUJ5VUludDMyKGtGaXZlMV90b18x
MltyZW1haW5pbmdfZXhwb25lbnQgLSAxXSk7CisgICAgICAgIH0KKyAgICAgICAgU2hpZnRMZWZ0
KGV4cG9uZW50KTsKKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06OlNxdWFyZSgp
IHsKKyAgICAgICAgQVNTRVJUKElzQ2xhbXBlZCgpKTsKKyAgICAgICAgaW50IHByb2R1Y3RfbGVu
Z3RoID0gMiAqIHVzZWRfZGlnaXRzXzsKKyAgICAgICAgRW5zdXJlQ2FwYWNpdHkocHJvZHVjdF9s
ZW5ndGgpOworICAgICAgICAKKyAgICAgICAgLy8gQ29tYmEgbXVsdGlwbGljYXRpb246IGNvbXB1
dGUgZWFjaCBjb2x1bW4gc2VwYXJhdGVseS4KKyAgICAgICAgLy8gRXhhbXBsZTogciA9IGEyYTFh
MCAqIGIyYjFiMC4KKyAgICAgICAgLy8gICAgciA9ICAxICAgICogYTBiMCArCisgICAgICAgIC8v
ICAgICAgICAxMCAgICAqIChhMWIwICsgYTBiMSkgKworICAgICAgICAvLyAgICAgICAgMTAwICAg
KiAoYTJiMCArIGExYjEgKyBhMGIyKSArCisgICAgICAgIC8vICAgICAgICAxMDAwICAqIChhMmIx
ICsgYTFiMikgKworICAgICAgICAvLyAgICAgICAgMTAwMDAgKiBhMmIyCisgICAgICAgIC8vCisg
ICAgICAgIC8vIEluIHRoZSB3b3JzdCBjYXNlIHdlIGhhdmUgdG8gYWNjdW11bGF0ZSBuYi1kaWdp
dHMgcHJvZHVjdHMgb2YgZGlnaXQqZGlnaXQuCisgICAgICAgIC8vCisgICAgICAgIC8vIEFzc2Vy
dCB0aGF0IHRoZSBhZGRpdGlvbmFsIG51bWJlciBvZiBiaXRzIGluIGEgRG91YmxlQ2h1bmsgYXJl
IGVub3VnaCB0bworICAgICAgICAvLyBzdW0gdXAgdXNlZF9kaWdpdHMgb2YgQmlnaXQqQmlnaXQu
CisgICAgICAgIGlmICgoMSA8PCAoMiAqIChrQ2h1bmtTaXplIC0ga0JpZ2l0U2l6ZSkpKSA8PSB1
c2VkX2RpZ2l0c18pIHsKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICAgICAgfQor
ICAgICAgICBEb3VibGVDaHVuayBhY2N1bXVsYXRvciA9IDA7CisgICAgICAgIC8vIEZpcnN0IHNo
aWZ0IHRoZSBkaWdpdHMgc28gd2UgZG9uJ3Qgb3ZlcndyaXRlIHRoZW0uCisgICAgICAgIGludCBj
b3B5X29mZnNldCA9IHVzZWRfZGlnaXRzXzsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1
c2VkX2RpZ2l0c187ICsraSkgeworICAgICAgICAgICAgYmlnaXRzX1tjb3B5X29mZnNldCArIGld
ID0gYmlnaXRzX1tpXTsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBoYXZlIHR3byBsb29wcyB0
byBhdm9pZCBzb21lICdpZidzIGluIHRoZSBsb29wLgorICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IHVzZWRfZGlnaXRzXzsgKytpKSB7CisgICAgICAgICAgICAvLyBQcm9jZXNzIHRlbXBvcmFy
eSBkaWdpdCBpIHdpdGggcG93ZXIgaS4KKyAgICAgICAgICAgIC8vIFRoZSBzdW0gb2YgdGhlIHR3
byBpbmRpY2VzIG11c3QgYmUgZXF1YWwgdG8gaS4KKyAgICAgICAgICAgIGludCBiaWdpdF9pbmRl
eDEgPSBpOworICAgICAgICAgICAgaW50IGJpZ2l0X2luZGV4MiA9IDA7CisgICAgICAgICAgICAv
LyBTdW0gYWxsIG9mIHRoZSBzdWItcHJvZHVjdHMuCisgICAgICAgICAgICB3aGlsZSAoYmlnaXRf
aW5kZXgxID49IDApIHsKKyAgICAgICAgICAgICAgICBDaHVuayBjaHVuazEgPSBiaWdpdHNfW2Nv
cHlfb2Zmc2V0ICsgYmlnaXRfaW5kZXgxXTsKKyAgICAgICAgICAgICAgICBDaHVuayBjaHVuazIg
PSBiaWdpdHNfW2NvcHlfb2Zmc2V0ICsgYmlnaXRfaW5kZXgyXTsKKyAgICAgICAgICAgICAgICBh
Y2N1bXVsYXRvciArPSBzdGF0aWNfY2FzdDxEb3VibGVDaHVuaz4oY2h1bmsxKSAqIGNodW5rMjsK
KyAgICAgICAgICAgICAgICBiaWdpdF9pbmRleDEtLTsKKyAgICAgICAgICAgICAgICBiaWdpdF9p
bmRleDIrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJpZ2l0c19baV0gPSBzdGF0aWNf
Y2FzdDxDaHVuaz4oYWNjdW11bGF0b3IpICYga0JpZ2l0TWFzazsKKyAgICAgICAgICAgIGFjY3Vt
dWxhdG9yID4+PSBrQmlnaXRTaXplOworICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGkgPSB1
c2VkX2RpZ2l0c187IGkgPCBwcm9kdWN0X2xlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpbnQg
YmlnaXRfaW5kZXgxID0gdXNlZF9kaWdpdHNfIC0gMTsKKyAgICAgICAgICAgIGludCBiaWdpdF9p
bmRleDIgPSBpIC0gYmlnaXRfaW5kZXgxOworICAgICAgICAgICAgLy8gSW52YXJpYW50OiBzdW0g
b2YgYm90aCBpbmRpY2VzIGlzIGFnYWluIGVxdWFsIHRvIGkuCisgICAgICAgICAgICAvLyBJbm5l
ciBsb29wIHJ1bnMgMCB0aW1lcyBvbiBsYXN0IGl0ZXJhdGlvbiwgZW1wdHlpbmcgYWNjdW11bGF0
b3IuCisgICAgICAgICAgICB3aGlsZSAoYmlnaXRfaW5kZXgyIDwgdXNlZF9kaWdpdHNfKSB7Cisg
ICAgICAgICAgICAgICAgQ2h1bmsgY2h1bmsxID0gYmlnaXRzX1tjb3B5X29mZnNldCArIGJpZ2l0
X2luZGV4MV07CisgICAgICAgICAgICAgICAgQ2h1bmsgY2h1bmsyID0gYmlnaXRzX1tjb3B5X29m
ZnNldCArIGJpZ2l0X2luZGV4Ml07CisgICAgICAgICAgICAgICAgYWNjdW11bGF0b3IgKz0gc3Rh
dGljX2Nhc3Q8RG91YmxlQ2h1bms+KGNodW5rMSkgKiBjaHVuazI7CisgICAgICAgICAgICAgICAg
YmlnaXRfaW5kZXgxLS07CisgICAgICAgICAgICAgICAgYmlnaXRfaW5kZXgyKys7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAvLyBUaGUgb3ZlcndyaXR0ZW4gYmlnaXRzX1tpXSB3aWxsIG5l
dmVyIGJlIHJlYWQgaW4gZnVydGhlciBsb29wIGl0ZXJhdGlvbnMsCisgICAgICAgICAgICAvLyBi
ZWNhdXNlIGJpZ2l0X2luZGV4MSBhbmQgYmlnaXRfaW5kZXgyIGFyZSBhbHdheXMgZ3JlYXRlcgor
ICAgICAgICAgICAgLy8gdGhhbiBpIC0gdXNlZF9kaWdpdHNfLgorICAgICAgICAgICAgYmlnaXRz
X1tpXSA9IHN0YXRpY19jYXN0PENodW5rPihhY2N1bXVsYXRvcikgJiBrQmlnaXRNYXNrOworICAg
ICAgICAgICAgYWNjdW11bGF0b3IgPj49IGtCaWdpdFNpemU7CisgICAgICAgIH0KKyAgICAgICAg
Ly8gU2luY2UgdGhlIHJlc3VsdCB3YXMgZ3VhcmFudGVlZCB0byBsaWUgaW5zaWRlIHRoZSBudW1i
ZXIgdGhlCisgICAgICAgIC8vIGFjY3VtdWxhdG9yIG11c3QgYmUgMCBub3cuCisgICAgICAgIEFT
U0VSVChhY2N1bXVsYXRvciA9PSAwKTsKKyAgICAgICAgCisgICAgICAgIC8vIERvbid0IGZvcmdl
dCB0byB1cGRhdGUgdGhlIHVzZWRfZGlnaXRzIGFuZCB0aGUgZXhwb25lbnQuCisgICAgICAgIHVz
ZWRfZGlnaXRzXyA9IHByb2R1Y3RfbGVuZ3RoOworICAgICAgICBleHBvbmVudF8gKj0gMjsKKyAg
ICAgICAgQ2xhbXAoKTsKKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06OkFzc2ln
blBvd2VyVUludDE2KHVpbnQxNl90IGJhc2UsIGludCBwb3dlcl9leHBvbmVudCkgeworICAgICAg
ICBBU1NFUlQoYmFzZSAhPSAwKTsKKyAgICAgICAgQVNTRVJUKHBvd2VyX2V4cG9uZW50ID49IDAp
OworICAgICAgICBpZiAocG93ZXJfZXhwb25lbnQgPT0gMCkgeworICAgICAgICAgICAgQXNzaWdu
VUludDE2KDEpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIFplcm8o
KTsKKyAgICAgICAgaW50IHNoaWZ0cyA9IDA7CisgICAgICAgIC8vIFdlIGV4cGVjdCBiYXNlIHRv
IGJlIGluIHJhbmdlIDItMzIsIGFuZCBtb3N0IG9mdGVuIHRvIGJlIDEwLgorICAgICAgICAvLyBJ
dCBkb2VzIG5vdCBtYWtlIG11Y2ggc2Vuc2UgdG8gaW1wbGVtZW50IGRpZmZlcmVudCBhbGdvcml0
aG1zIGZvciBjb3VudGluZworICAgICAgICAvLyB0aGUgYml0cy4KKyAgICAgICAgd2hpbGUgKChi
YXNlICYgMSkgPT0gMCkgeworICAgICAgICAgICAgYmFzZSA+Pj0gMTsKKyAgICAgICAgICAgIHNo
aWZ0cysrOworICAgICAgICB9CisgICAgICAgIGludCBiaXRfc2l6ZSA9IDA7CisgICAgICAgIGlu
dCB0bXBfYmFzZSA9IGJhc2U7CisgICAgICAgIHdoaWxlICh0bXBfYmFzZSAhPSAwKSB7CisgICAg
ICAgICAgICB0bXBfYmFzZSA+Pj0gMTsKKyAgICAgICAgICAgIGJpdF9zaXplKys7CisgICAgICAg
IH0KKyAgICAgICAgaW50IGZpbmFsX3NpemUgPSBiaXRfc2l6ZSAqIHBvd2VyX2V4cG9uZW50Owor
ICAgICAgICAvLyAxIGV4dHJhIGJpZ2l0IGZvciB0aGUgc2hpZnRpbmcsIGFuZCBvbmUgZm9yIHJv
dW5kZWQgZmluYWxfc2l6ZS4KKyAgICAgICAgRW5zdXJlQ2FwYWNpdHkoZmluYWxfc2l6ZSAvIGtC
aWdpdFNpemUgKyAyKTsKKyAgICAgICAgCisgICAgICAgIC8vIExlZnQgdG8gUmlnaHQgZXhwb25l
bnRpYXRpb24uCisgICAgICAgIGludCBtYXNrID0gMTsKKyAgICAgICAgd2hpbGUgKHBvd2VyX2V4
cG9uZW50ID49IG1hc2spIG1hc2sgPDw9IDE7CisgICAgICAgIAorICAgICAgICAvLyBUaGUgbWFz
ayBpcyBub3cgcG9pbnRpbmcgdG8gdGhlIGJpdCBhYm92ZSB0aGUgbW9zdCBzaWduaWZpY2FudCAx
LWJpdCBvZgorICAgICAgICAvLyBwb3dlcl9leHBvbmVudC4KKyAgICAgICAgLy8gR2V0IHJpZCBv
ZiBmaXJzdCAxLWJpdDsKKyAgICAgICAgbWFzayA+Pj0gMjsKKyAgICAgICAgdWludDY0X3QgdGhp
c192YWx1ZSA9IGJhc2U7CisgICAgICAgIAorICAgICAgICBib29sIGRlbGF5ZWRfbXVsdGlwbGlj
aWF0aW9uID0gZmFsc2U7CisgICAgICAgIGNvbnN0IHVpbnQ2NF90IG1heF8zMmJpdHMgPSAweEZG
RkZGRkZGOworICAgICAgICB3aGlsZSAobWFzayAhPSAwICYmIHRoaXNfdmFsdWUgPD0gbWF4XzMy
Yml0cykgeworICAgICAgICAgICAgdGhpc192YWx1ZSA9IHRoaXNfdmFsdWUgKiB0aGlzX3ZhbHVl
OworICAgICAgICAgICAgLy8gVmVyaWZ5IHRoYXQgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGluIHRo
aXNfdmFsdWUgdG8gcGVyZm9ybSB0aGUKKyAgICAgICAgICAgIC8vIG11bHRpcGxpY2F0aW9uLiAg
VGhlIGZpcnN0IGJpdF9zaXplIGJpdHMgbXVzdCBiZSAwLgorICAgICAgICAgICAgaWYgKChwb3dl
cl9leHBvbmVudCAmIG1hc2spICE9IDApIHsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBiYXNl
X2JpdHNfbWFzayA9CisgICAgICAgICAgICAgICAgfigoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDEp
IDw8ICg2NCAtIGJpdF9zaXplKSkgLSAxKTsKKyAgICAgICAgICAgICAgICBib29sIGhpZ2hfYml0
c196ZXJvID0gKHRoaXNfdmFsdWUgJiBiYXNlX2JpdHNfbWFzaykgPT0gMDsKKyAgICAgICAgICAg
ICAgICBpZiAoaGlnaF9iaXRzX3plcm8pIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpc192YWx1
ZSAqPSBiYXNlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IGRlbGF5ZWRfbXVsdGlwbGljaWF0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBtYXNrID4+PSAxOworICAgICAgICB9CisgICAgICAgIEFz
c2lnblVJbnQ2NCh0aGlzX3ZhbHVlKTsKKyAgICAgICAgaWYgKGRlbGF5ZWRfbXVsdGlwbGljaWF0
aW9uKSB7CisgICAgICAgICAgICBNdWx0aXBseUJ5VUludDMyKGJhc2UpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICAvLyBOb3cgZG8gdGhlIHNhbWUgdGhpbmcgYXMgYSBiaWdudW0uCisg
ICAgICAgIHdoaWxlIChtYXNrICE9IDApIHsKKyAgICAgICAgICAgIFNxdWFyZSgpOworICAgICAg
ICAgICAgaWYgKChwb3dlcl9leHBvbmVudCAmIG1hc2spICE9IDApIHsKKyAgICAgICAgICAgICAg
ICBNdWx0aXBseUJ5VUludDMyKGJhc2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWFz
ayA+Pj0gMTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQW5kIGZpbmFsbHkgYWRk
IHRoZSBzYXZlZCBzaGlmdHMuCisgICAgICAgIFNoaWZ0TGVmdChzaGlmdHMgKiBwb3dlcl9leHBv
bmVudCk7CisgICAgfQorICAgIAorICAgIAorICAgIC8vIFByZWNvbmRpdGlvbjogdGhpcy9vdGhl
ciA8IDE2Yml0LgorICAgIHVpbnQxNl90IEJpZ251bTo6RGl2aWRlTW9kdWxvSW50QmlnbnVtKGNv
bnN0IEJpZ251bSYgb3RoZXIpIHsKKyAgICAgICAgQVNTRVJUKElzQ2xhbXBlZCgpKTsKKyAgICAg
ICAgQVNTRVJUKG90aGVyLklzQ2xhbXBlZCgpKTsKKyAgICAgICAgQVNTRVJUKG90aGVyLnVzZWRf
ZGlnaXRzXyA+IDApOworICAgICAgICAKKyAgICAgICAgLy8gRWFzeSBjYXNlOiBpZiB3ZSBoYXZl
IGxlc3MgZGlnaXRzIHRoYW4gdGhlIGRpdmlzb3IgdGhhbiB0aGUgcmVzdWx0IGlzIDAuCisgICAg
ICAgIC8vIE5vdGU6IHRoaXMgaGFuZGxlcyB0aGUgY2FzZSB3aGVyZSB0aGlzID09IDAsIHRvby4K
KyAgICAgICAgaWYgKEJpZ2l0TGVuZ3RoKCkgPCBvdGhlci5CaWdpdExlbmd0aCgpKSB7CisgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQWxpZ24ob3Ro
ZXIpOworICAgICAgICAKKyAgICAgICAgdWludDE2X3QgcmVzdWx0ID0gMDsKKyAgICAgICAgCisg
ICAgICAgIC8vIFN0YXJ0IGJ5IHJlbW92aW5nIG11bHRpcGxlcyBvZiAnb3RoZXInIHVudGlsIGJv
dGggbnVtYmVycyBoYXZlIHRoZSBzYW1lCisgICAgICAgIC8vIG51bWJlciBvZiBkaWdpdHMuCisg
ICAgICAgIHdoaWxlIChCaWdpdExlbmd0aCgpID4gb3RoZXIuQmlnaXRMZW5ndGgoKSkgeworICAg
ICAgICAgICAgLy8gVGhpcyBuYWl2ZSBhcHByb2FjaCBpcyBleHRyZW1lbHkgaW5lZmZpY2llbnQg
aWYgdGhlIHRoaXMgZGl2aWRlZCBvdGhlcgorICAgICAgICAgICAgLy8gbWlnaHQgYmUgYmlnLiBU
aGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGZvciBkb3VibGVUb1N0cmluZyB3aGVyZQorICAg
ICAgICAgICAgLy8gdGhlIHJlc3VsdCBzaG91bGQgYmUgc21hbGwgKGxlc3MgdGhhbiAxMCkuCisg
ICAgICAgICAgICBBU1NFUlQob3RoZXIuYmlnaXRzX1tvdGhlci51c2VkX2RpZ2l0c18gLSAxXSA+
PSAoKDEgPDwga0JpZ2l0U2l6ZSkgLyAxNikpOworICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBt
dWx0aXBsZXMgb2YgdGhlIGZpcnN0IGRpZ2l0LgorICAgICAgICAgICAgLy8gRXhhbXBsZSB0aGlz
ID0gMjMgYW5kIG90aGVyIGVxdWFscyA5LiAtPiBSZW1vdmUgMiBtdWx0aXBsZXMuCisgICAgICAg
ICAgICByZXN1bHQgKz0gYmlnaXRzX1t1c2VkX2RpZ2l0c18gLSAxXTsKKyAgICAgICAgICAgIFN1
YnRyYWN0VGltZXMob3RoZXIsIGJpZ2l0c19bdXNlZF9kaWdpdHNfIC0gMV0pOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBBU1NFUlQoQmlnaXRMZW5ndGgoKSA9PSBvdGhlci5CaWdpdExl
bmd0aCgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIEJvdGggYmlnbnVtcyBhcmUgYXQgdGhlIHNh
bWUgbGVuZ3RoIG5vdy4KKyAgICAgICAgLy8gU2luY2Ugb3RoZXIgaGFzIG1vcmUgdGhhbiAwIGRp
Z2l0cyB3ZSBrbm93IHRoYXQgdGhlIGFjY2VzcyB0bworICAgICAgICAvLyBiaWdpdHNfW3VzZWRf
ZGlnaXRzXyAtIDFdIGlzIHNhZmUuCisgICAgICAgIENodW5rIHRoaXNfYmlnaXQgPSBiaWdpdHNf
W3VzZWRfZGlnaXRzXyAtIDFdOworICAgICAgICBDaHVuayBvdGhlcl9iaWdpdCA9IG90aGVyLmJp
Z2l0c19bb3RoZXIudXNlZF9kaWdpdHNfIC0gMV07CisgICAgICAgIAorICAgICAgICBpZiAob3Ro
ZXIudXNlZF9kaWdpdHNfID09IDEpIHsKKyAgICAgICAgICAgIC8vIFNob3J0Y3V0IGZvciBlYXN5
IChhbmQgY29tbW9uKSBjYXNlLgorICAgICAgICAgICAgaW50IHF1b3RpZW50ID0gdGhpc19iaWdp
dCAvIG90aGVyX2JpZ2l0OworICAgICAgICAgICAgYmlnaXRzX1t1c2VkX2RpZ2l0c18gLSAxXSA9
IHRoaXNfYmlnaXQgLSBvdGhlcl9iaWdpdCAqIHF1b3RpZW50OworICAgICAgICAgICAgcmVzdWx0
ICs9IHF1b3RpZW50OworICAgICAgICAgICAgQ2xhbXAoKTsKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludCBkaXZpc2lvbl9lc3RpbWF0
ZSA9IHRoaXNfYmlnaXQgLyAob3RoZXJfYmlnaXQgKyAxKTsKKyAgICAgICAgcmVzdWx0ICs9IGRp
dmlzaW9uX2VzdGltYXRlOworICAgICAgICBTdWJ0cmFjdFRpbWVzKG90aGVyLCBkaXZpc2lvbl9l
c3RpbWF0ZSk7CisgICAgICAgIAorICAgICAgICBpZiAob3RoZXJfYmlnaXQgKiAoZGl2aXNpb25f
ZXN0aW1hdGUgKyAxKSA+IHRoaXNfYmlnaXQpIHsKKyAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8g
ZXZlbiB0cnkgdG8gc3VidHJhY3QuIEV2ZW4gaWYgb3RoZXIncyByZW1haW5pbmcgZGlnaXRzIHdl
cmUgMAorICAgICAgICAgICAgLy8gYW5vdGhlciBzdWJ0cmFjdGlvbiB3b3VsZCBiZSB0b28gbXVj
aC4KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHdoaWxlIChMZXNzRXF1YWwob3RoZXIsICp0aGlzKSkgeworICAgICAgICAgICAgU3VidHJh
Y3RCaWdudW0ob3RoZXIpOworICAgICAgICAgICAgcmVzdWx0Kys7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgUz4KKyAgICBzdGF0aWMgaW50IFNpemVJbkhleENoYXJzKFMgbnVtYmVyKSB7CisgICAgICAg
IEFTU0VSVChudW1iZXIgPiAwKTsKKyAgICAgICAgaW50IHJlc3VsdCA9IDA7CisgICAgICAgIHdo
aWxlIChudW1iZXIgIT0gMCkgeworICAgICAgICAgICAgbnVtYmVyID4+PSA0OworICAgICAgICAg
ICAgcmVzdWx0Kys7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cisg
ICAgCisgICAgCisgICAgc3RhdGljIGNoYXIgSGV4Q2hhck9mVmFsdWUoaW50IHZhbHVlKSB7Cisg
ICAgICAgIEFTU0VSVCgwIDw9IHZhbHVlICYmIHZhbHVlIDw9IDE2KTsKKyAgICAgICAgaWYgKHZh
bHVlIDwgMTApIHJldHVybiB2YWx1ZSArICcwJzsKKyAgICAgICAgcmV0dXJuIHZhbHVlIC0gMTAg
KyAnQSc7CisgICAgfQorICAgIAorICAgIAorICAgIGJvb2wgQmlnbnVtOjpUb0hleFN0cmluZyhj
aGFyKiBidWZmZXIsIGludCBidWZmZXJfc2l6ZSkgY29uc3QgeworICAgICAgICBBU1NFUlQoSXND
bGFtcGVkKCkpOworICAgICAgICAvLyBFYWNoIGJpZ2l0IG11c3QgYmUgcHJpbnRhYmxlIGFzIHNl
cGFyYXRlIGhleC1jaGFyYWN0ZXIuCisgICAgICAgIEFTU0VSVChrQmlnaXRTaXplICUgNCA9PSAw
KTsKKyAgICAgICAgY29uc3QgaW50IGtIZXhDaGFyc1BlckJpZ2l0ID0ga0JpZ2l0U2l6ZSAvIDQ7
CisgICAgICAgIAorICAgICAgICBpZiAodXNlZF9kaWdpdHNfID09IDApIHsKKyAgICAgICAgICAg
IGlmIChidWZmZXJfc2l6ZSA8IDIpIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJ1ZmZlclsw
XSA9ICcwJzsKKyAgICAgICAgICAgIGJ1ZmZlclsxXSA9ICdcMCc7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBhZGQgMSBmb3IgdGhlIHRlcm1pbmF0
aW5nICdcMCcgY2hhcmFjdGVyLgorICAgICAgICBpbnQgbmVlZGVkX2NoYXJzID0gKEJpZ2l0TGVu
Z3RoKCkgLSAxKSAqIGtIZXhDaGFyc1BlckJpZ2l0ICsKKyAgICAgICAgU2l6ZUluSGV4Q2hhcnMo
YmlnaXRzX1t1c2VkX2RpZ2l0c18gLSAxXSkgKyAxOworICAgICAgICBpZiAobmVlZGVkX2NoYXJz
ID4gYnVmZmVyX3NpemUpIHJldHVybiBmYWxzZTsKKyAgICAgICAgaW50IHN0cmluZ19pbmRleCA9
IG5lZWRlZF9jaGFycyAtIDE7CisgICAgICAgIGJ1ZmZlcltzdHJpbmdfaW5kZXgtLV0gPSAnXDAn
OworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4cG9uZW50XzsgKytpKSB7CisgICAgICAg
ICAgICBmb3IgKGludCBqID0gMDsgaiA8IGtIZXhDaGFyc1BlckJpZ2l0OyArK2opIHsKKyAgICAg
ICAgICAgICAgICBidWZmZXJbc3RyaW5nX2luZGV4LS1dID0gJzAnOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdXNlZF9kaWdpdHNfIC0gMTsg
KytpKSB7CisgICAgICAgICAgICBDaHVuayBjdXJyZW50X2JpZ2l0ID0gYmlnaXRzX1tpXTsKKyAg
ICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwga0hleENoYXJzUGVyQmlnaXQ7ICsraikgewor
ICAgICAgICAgICAgICAgIGJ1ZmZlcltzdHJpbmdfaW5kZXgtLV0gPSBIZXhDaGFyT2ZWYWx1ZShj
dXJyZW50X2JpZ2l0ICYgMHhGKTsKKyAgICAgICAgICAgICAgICBjdXJyZW50X2JpZ2l0ID4+PSA0
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIEFuZCBmaW5hbGx5IHRoZSBs
YXN0IGJpZ2l0LgorICAgICAgICBDaHVuayBtb3N0X3NpZ25pZmljYW50X2JpZ2l0ID0gYmlnaXRz
X1t1c2VkX2RpZ2l0c18gLSAxXTsKKyAgICAgICAgd2hpbGUgKG1vc3Rfc2lnbmlmaWNhbnRfYmln
aXQgIT0gMCkgeworICAgICAgICAgICAgYnVmZmVyW3N0cmluZ19pbmRleC0tXSA9IEhleENoYXJP
ZlZhbHVlKG1vc3Rfc2lnbmlmaWNhbnRfYmlnaXQgJiAweEYpOworICAgICAgICAgICAgbW9zdF9z
aWduaWZpY2FudF9iaWdpdCA+Pj0gNDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgCisgICAgCisgICAgQmlnbnVtOjpDaHVuayBCaWdudW06OkJpZ2l0QXQoaW50
IGluZGV4KSBjb25zdCB7CisgICAgICAgIGlmIChpbmRleCA+PSBCaWdpdExlbmd0aCgpKSByZXR1
cm4gMDsKKyAgICAgICAgaWYgKGluZGV4IDwgZXhwb25lbnRfKSByZXR1cm4gMDsKKyAgICAgICAg
cmV0dXJuIGJpZ2l0c19baW5kZXggLSBleHBvbmVudF9dOworICAgIH0KKyAgICAKKyAgICAKKyAg
ICBpbnQgQmlnbnVtOjpDb21wYXJlKGNvbnN0IEJpZ251bSYgYSwgY29uc3QgQmlnbnVtJiBiKSB7
CisgICAgICAgIEFTU0VSVChhLklzQ2xhbXBlZCgpKTsKKyAgICAgICAgQVNTRVJUKGIuSXNDbGFt
cGVkKCkpOworICAgICAgICBpbnQgYmlnaXRfbGVuZ3RoX2EgPSBhLkJpZ2l0TGVuZ3RoKCk7Cisg
ICAgICAgIGludCBiaWdpdF9sZW5ndGhfYiA9IGIuQmlnaXRMZW5ndGgoKTsKKyAgICAgICAgaWYg
KGJpZ2l0X2xlbmd0aF9hIDwgYmlnaXRfbGVuZ3RoX2IpIHJldHVybiAtMTsKKyAgICAgICAgaWYg
KGJpZ2l0X2xlbmd0aF9hID4gYmlnaXRfbGVuZ3RoX2IpIHJldHVybiArMTsKKyAgICAgICAgZm9y
IChpbnQgaSA9IGJpZ2l0X2xlbmd0aF9hIC0gMTsgaSA+PSBNaW4oYS5leHBvbmVudF8sIGIuZXhw
b25lbnRfKTsgLS1pKSB7CisgICAgICAgICAgICBDaHVuayBiaWdpdF9hID0gYS5CaWdpdEF0KGkp
OworICAgICAgICAgICAgQ2h1bmsgYmlnaXRfYiA9IGIuQmlnaXRBdChpKTsKKyAgICAgICAgICAg
IGlmIChiaWdpdF9hIDwgYmlnaXRfYikgcmV0dXJuIC0xOworICAgICAgICAgICAgaWYgKGJpZ2l0
X2EgPiBiaWdpdF9iKSByZXR1cm4gKzE7CisgICAgICAgICAgICAvLyBPdGhlcndpc2UgdGhleSBh
cmUgZXF1YWwgdXAgdG8gdGhpcyBkaWdpdC4gVHJ5IHRoZSBuZXh0IGRpZ2l0LgorICAgICAgICB9
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICAKKyAgICBpbnQgQmlnbnVtOjpQ
bHVzQ29tcGFyZShjb25zdCBCaWdudW0mIGEsIGNvbnN0IEJpZ251bSYgYiwgY29uc3QgQmlnbnVt
JiBjKSB7CisgICAgICAgIEFTU0VSVChhLklzQ2xhbXBlZCgpKTsKKyAgICAgICAgQVNTRVJUKGIu
SXNDbGFtcGVkKCkpOworICAgICAgICBBU1NFUlQoYy5Jc0NsYW1wZWQoKSk7CisgICAgICAgIGlm
IChhLkJpZ2l0TGVuZ3RoKCkgPCBiLkJpZ2l0TGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIHJldHVy
biBQbHVzQ29tcGFyZShiLCBhLCBjKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYS5CaWdpdExl
bmd0aCgpICsgMSA8IGMuQmlnaXRMZW5ndGgoKSkgcmV0dXJuIC0xOworICAgICAgICBpZiAoYS5C
aWdpdExlbmd0aCgpID4gYy5CaWdpdExlbmd0aCgpKSByZXR1cm4gKzE7CisgICAgICAgIC8vIFRo
ZSBleHBvbmVudCBlbmNvZGVzIDAtYmlnaXRzLiBTbyBpZiB0aGVyZSBhcmUgbW9yZSAwLWRpZ2l0
cyBpbiAnYScgdGhhbgorICAgICAgICAvLyAnYicgaGFzIGRpZ2l0cywgdGhlbiB0aGUgYmlnaXQt
bGVuZ3RoIG9mICdhJysnYicgbXVzdCBiZSBlcXVhbCB0byB0aGUgb25lCisgICAgICAgIC8vIG9m
ICdhJy4KKyAgICAgICAgaWYgKGEuZXhwb25lbnRfID49IGIuQmlnaXRMZW5ndGgoKSAmJiBhLkJp
Z2l0TGVuZ3RoKCkgPCBjLkJpZ2l0TGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQ2h1bmsgYm9ycm93ID0gMDsKKyAgICAgICAg
Ly8gU3RhcnRpbmcgYXQgbWluX2V4cG9uZW50IGFsbCBkaWdpdHMgYXJlID09IDAuIFNvIG5vIG5l
ZWQgdG8gY29tcGFyZSB0aGVtLgorICAgICAgICBpbnQgbWluX2V4cG9uZW50ID0gTWluKE1pbihh
LmV4cG9uZW50XywgYi5leHBvbmVudF8pLCBjLmV4cG9uZW50Xyk7CisgICAgICAgIGZvciAoaW50
IGkgPSBjLkJpZ2l0TGVuZ3RoKCkgLSAxOyBpID49IG1pbl9leHBvbmVudDsgLS1pKSB7CisgICAg
ICAgICAgICBDaHVuayBjaHVua19hID0gYS5CaWdpdEF0KGkpOworICAgICAgICAgICAgQ2h1bmsg
Y2h1bmtfYiA9IGIuQmlnaXRBdChpKTsKKyAgICAgICAgICAgIENodW5rIGNodW5rX2MgPSBjLkJp
Z2l0QXQoaSk7CisgICAgICAgICAgICBDaHVuayBzdW0gPSBjaHVua19hICsgY2h1bmtfYjsKKyAg
ICAgICAgICAgIGlmIChzdW0gPiBjaHVua19jICsgYm9ycm93KSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuICsxOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBib3Jyb3cg
PSBjaHVua19jICsgYm9ycm93IC0gc3VtOworICAgICAgICAgICAgICAgIGlmIChib3Jyb3cgPiAx
KSByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgYm9ycm93IDw8PSBrQmlnaXRTaXplOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChib3Jyb3cgPT0gMCkgcmV0dXJuIDA7
CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06
OkNsYW1wKCkgeworICAgICAgICB3aGlsZSAodXNlZF9kaWdpdHNfID4gMCAmJiBiaWdpdHNfW3Vz
ZWRfZGlnaXRzXyAtIDFdID09IDApIHsKKyAgICAgICAgICAgIHVzZWRfZGlnaXRzXy0tOworICAg
ICAgICB9CisgICAgICAgIGlmICh1c2VkX2RpZ2l0c18gPT0gMCkgeworICAgICAgICAgICAgLy8g
WmVyby4KKyAgICAgICAgICAgIGV4cG9uZW50XyA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgCisgICAgYm9vbCBCaWdudW06OklzQ2xhbXBlZCgpIGNvbnN0IHsKKyAgICAgICAgcmV0
dXJuIHVzZWRfZGlnaXRzXyA9PSAwIHx8IGJpZ2l0c19bdXNlZF9kaWdpdHNfIC0gMV0gIT0gMDsK
KyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06Olplcm8oKSB7CisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgdXNlZF9kaWdpdHNfOyArK2kpIHsKKyAgICAgICAgICAgIGJpZ2l0
c19baV0gPSAwOworICAgICAgICB9CisgICAgICAgIHVzZWRfZGlnaXRzXyA9IDA7CisgICAgICAg
IGV4cG9uZW50XyA9IDA7CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpBbGln
bihjb25zdCBCaWdudW0mIG90aGVyKSB7CisgICAgICAgIGlmIChleHBvbmVudF8gPiBvdGhlci5l
eHBvbmVudF8pIHsKKyAgICAgICAgICAgIC8vIElmICJYIiByZXByZXNlbnRzIGEgImhpZGRlbiIg
ZGlnaXQgKGJ5IHRoZSBleHBvbmVudCkgdGhlbiB3ZSBhcmUgaW4gdGhlCisgICAgICAgICAgICAv
LyBmb2xsb3dpbmcgY2FzZSAoYSA9PSB0aGlzLCBiID09IG90aGVyKToKKyAgICAgICAgICAgIC8v
IGE6ICBhYWFhYWFYWFhYICAgb3IgYTogICBhYWFhYVhYWAorICAgICAgICAgICAgLy8gYjogICAg
IGJiYmJiYlggICAgICBiOiBiYmJiYmJiYlhYCisgICAgICAgICAgICAvLyBXZSByZXBsYWNlIHNv
bWUgb2YgdGhlIGhpZGRlbiBkaWdpdHMgKFgpIG9mIGEgd2l0aCAwIGRpZ2l0cy4KKyAgICAgICAg
ICAgIC8vIGE6ICBhYWFhYWEwMDBYICAgb3IgYTogICBhYWFhYTBYWAorICAgICAgICAgICAgaW50
IHplcm9fZGlnaXRzID0gZXhwb25lbnRfIC0gb3RoZXIuZXhwb25lbnRfOworICAgICAgICAgICAg
RW5zdXJlQ2FwYWNpdHkodXNlZF9kaWdpdHNfICsgemVyb19kaWdpdHMpOworICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IHVzZWRfZGlnaXRzXyAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgICAg
ICAgICAgYmlnaXRzX1tpICsgemVyb19kaWdpdHNdID0gYmlnaXRzX1tpXTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgemVyb19kaWdpdHM7ICsraSkgewor
ICAgICAgICAgICAgICAgIGJpZ2l0c19baV0gPSAwOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdXNlZF9kaWdpdHNfICs9IHplcm9fZGlnaXRzOworICAgICAgICAgICAgZXhwb25lbnRfIC09
IHplcm9fZGlnaXRzOworICAgICAgICAgICAgQVNTRVJUKHVzZWRfZGlnaXRzXyA+PSAwKTsKKyAg
ICAgICAgICAgIEFTU0VSVChleHBvbmVudF8gPj0gMCk7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgCisgICAgdm9pZCBCaWdudW06OkJpZ2l0c1NoaWZ0TGVmdChpbnQgc2hpZnRfYW1vdW50
KSB7CisgICAgICAgIEFTU0VSVChzaGlmdF9hbW91bnQgPCBrQmlnaXRTaXplKTsKKyAgICAgICAg
QVNTRVJUKHNoaWZ0X2Ftb3VudCA+PSAwKTsKKyAgICAgICAgQ2h1bmsgY2FycnkgPSAwOworICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IHVzZWRfZGlnaXRzXzsgKytpKSB7CisgICAgICAgICAg
ICBDaHVuayBuZXdfY2FycnkgPSBiaWdpdHNfW2ldID4+IChrQmlnaXRTaXplIC0gc2hpZnRfYW1v
dW50KTsKKyAgICAgICAgICAgIGJpZ2l0c19baV0gPSAoKGJpZ2l0c19baV0gPDwgc2hpZnRfYW1v
dW50KSArIGNhcnJ5KSAmIGtCaWdpdE1hc2s7CisgICAgICAgICAgICBjYXJyeSA9IG5ld19jYXJy
eTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2FycnkgIT0gMCkgeworICAgICAgICAgICAgYmln
aXRzX1t1c2VkX2RpZ2l0c19dID0gY2Fycnk7CisgICAgICAgICAgICB1c2VkX2RpZ2l0c18rKzsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICB2b2lkIEJpZ251bTo6U3VidHJhY3RU
aW1lcyhjb25zdCBCaWdudW0mIG90aGVyLCBpbnQgZmFjdG9yKSB7CisgICAgICAgIEFTU0VSVChl
eHBvbmVudF8gPD0gb3RoZXIuZXhwb25lbnRfKTsKKyAgICAgICAgaWYgKGZhY3RvciA8IDMpIHsK
KyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmFjdG9yOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBTdWJ0cmFjdEJpZ251bShvdGhlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgQ2h1bmsgYm9ycm93ID0gMDsKKyAgICAgICAg
aW50IGV4cG9uZW50X2RpZmYgPSBvdGhlci5leHBvbmVudF8gLSBleHBvbmVudF87CisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgb3RoZXIudXNlZF9kaWdpdHNfOyArK2kpIHsKKyAgICAgICAg
ICAgIERvdWJsZUNodW5rIHByb2R1Y3QgPSBzdGF0aWNfY2FzdDxEb3VibGVDaHVuaz4oZmFjdG9y
KSAqIG90aGVyLmJpZ2l0c19baV07CisgICAgICAgICAgICBEb3VibGVDaHVuayByZW1vdmUgPSBi
b3Jyb3cgKyBwcm9kdWN0OworICAgICAgICAgICAgQ2h1bmsgZGlmZmVyZW5jZSA9IGJpZ2l0c19b
aSArIGV4cG9uZW50X2RpZmZdIC0gKHJlbW92ZSAmIGtCaWdpdE1hc2spOworICAgICAgICAgICAg
YmlnaXRzX1tpICsgZXhwb25lbnRfZGlmZl0gPSBkaWZmZXJlbmNlICYga0JpZ2l0TWFzazsKKyAg
ICAgICAgICAgIGJvcnJvdyA9IHN0YXRpY19jYXN0PENodW5rPigoZGlmZmVyZW5jZSA+PiAoa0No
dW5rU2l6ZSAtIDEpKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHJlbW92ZSA+PiBrQmlnaXRTaXplKSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgaSA9
IG90aGVyLnVzZWRfZGlnaXRzXyArIGV4cG9uZW50X2RpZmY7IGkgPCB1c2VkX2RpZ2l0c187ICsr
aSkgeworICAgICAgICAgICAgaWYgKGJvcnJvdyA9PSAwKSByZXR1cm47CisgICAgICAgICAgICBD
aHVuayBkaWZmZXJlbmNlID0gYmlnaXRzX1tpXSAtIGJvcnJvdzsKKyAgICAgICAgICAgIGJpZ2l0
c19baV0gPSBkaWZmZXJlbmNlICYga0JpZ2l0TWFzazsKKyAgICAgICAgICAgIGJvcnJvdyA9IGRp
ZmZlcmVuY2UgPj4gKGtDaHVua1NpemUgLSAxKTsKKyAgICAgICAgICAgICsraTsKKyAgICAgICAg
fQorICAgICAgICBDbGFtcCgpOworICAgIH0KKyAgICAKKyAgICAKK30gIC8vIG5hbWVzcGFjZSBk
b3VibGVfY29udmVyc2lvbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9k
dG9hL2JpZ251bS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjg1NjQyMTBiMmY4NjQ4NWE2ZDI2YjlhNjliN2UxNWNlNTdmYWQwMzAKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvYmlnbnVtLmgKQEAg
LTAsMCArMSwxNDEgQEAKKy8vIENvcHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8v
IG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAg
ICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
Ly8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
Ly8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmbmRlZiBET1VC
TEVfQ09OVkVSU0lPTl9CSUdOVU1fSF8KKyNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05fQklHTlVN
X0hfCisKKyNpbmNsdWRlICJ1dGlscy5oIgorCituYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24g
eworICAgIAorICAgIGNsYXNzIEJpZ251bSB7CisgICAgcHVibGljOgorICAgICAgICAvLyAzNTg0
ID0gMTI4ICogMjguIFdlIGNhbiByZXByZXNlbnQgMl4zNTg0ID4gMTBeMTAwMCBhY2N1cmF0ZWx5
LgorICAgICAgICAvLyBUaGlzIGJpZ251bSBjYW4gZW5jb2RlIG11Y2ggYmlnZ2VyIG51bWJlcnMs
IHNpbmNlIGl0IGNvbnRhaW5zIGFuCisgICAgICAgIC8vIGV4cG9uZW50LgorICAgICAgICBzdGF0
aWMgY29uc3QgaW50IGtNYXhTaWduaWZpY2FudEJpdHMgPSAzNTg0OworICAgICAgICAKKyAgICAg
ICAgQmlnbnVtKCk7CisgICAgICAgIHZvaWQgQXNzaWduVUludDE2KHVpbnQxNl90IHZhbHVlKTsK
KyAgICAgICAgdm9pZCBBc3NpZ25VSW50NjQodWludDY0X3QgdmFsdWUpOworICAgICAgICB2b2lk
IEFzc2lnbkJpZ251bShjb25zdCBCaWdudW0mIG90aGVyKTsKKyAgICAgICAgCisgICAgICAgIHZv
aWQgQXNzaWduRGVjaW1hbFN0cmluZyhWZWN0b3I8Y29uc3QgY2hhcj4gdmFsdWUpOworICAgICAg
ICB2b2lkIEFzc2lnbkhleFN0cmluZyhWZWN0b3I8Y29uc3QgY2hhcj4gdmFsdWUpOworICAgICAg
ICAKKyAgICAgICAgdm9pZCBBc3NpZ25Qb3dlclVJbnQxNih1aW50MTZfdCBiYXNlLCBpbnQgZXhw
b25lbnQpOworICAgICAgICAKKyAgICAgICAgdm9pZCBBZGRVSW50MTYodWludDE2X3Qgb3BlcmFu
ZCk7CisgICAgICAgIHZvaWQgQWRkVUludDY0KHVpbnQ2NF90IG9wZXJhbmQpOworICAgICAgICB2
b2lkIEFkZEJpZ251bShjb25zdCBCaWdudW0mIG90aGVyKTsKKyAgICAgICAgLy8gUHJlY29uZGl0
aW9uOiB0aGlzID49IG90aGVyLgorICAgICAgICB2b2lkIFN1YnRyYWN0QmlnbnVtKGNvbnN0IEJp
Z251bSYgb3RoZXIpOworICAgICAgICAKKyAgICAgICAgdm9pZCBTcXVhcmUoKTsKKyAgICAgICAg
dm9pZCBTaGlmdExlZnQoaW50IHNoaWZ0X2Ftb3VudCk7CisgICAgICAgIHZvaWQgTXVsdGlwbHlC
eVVJbnQzMih1aW50MzJfdCBmYWN0b3IpOworICAgICAgICB2b2lkIE11bHRpcGx5QnlVSW50NjQo
dWludDY0X3QgZmFjdG9yKTsKKyAgICAgICAgdm9pZCBNdWx0aXBseUJ5UG93ZXJPZlRlbihpbnQg
ZXhwb25lbnQpOworICAgICAgICB2b2lkIFRpbWVzMTAoKSB7IHJldHVybiBNdWx0aXBseUJ5VUlu
dDMyKDEwKTsgfQorICAgICAgICAvLyBQc2V1ZG9jb2RlOgorICAgICAgICAvLyAgaW50IHJlc3Vs
dCA9IHRoaXMgLyBvdGhlcjsKKyAgICAgICAgLy8gIHRoaXMgPSB0aGlzICUgb3RoZXI7CisgICAg
ICAgIC8vIEluIHRoZSB3b3JzdCBjYXNlIHRoaXMgZnVuY3Rpb24gaXMgaW4gTyh0aGlzL290aGVy
KS4KKyAgICAgICAgdWludDE2X3QgRGl2aWRlTW9kdWxvSW50QmlnbnVtKGNvbnN0IEJpZ251bSYg
b3RoZXIpOworICAgICAgICAKKyAgICAgICAgYm9vbCBUb0hleFN0cmluZyhjaGFyKiBidWZmZXIs
IGludCBidWZmZXJfc2l6ZSkgY29uc3Q7CisgICAgICAgIAorICAgICAgICBzdGF0aWMgaW50IENv
bXBhcmUoY29uc3QgQmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIpOworICAgICAgICBzdGF0aWMg
Ym9vbCBFcXVhbChjb25zdCBCaWdudW0mIGEsIGNvbnN0IEJpZ251bSYgYikgeworICAgICAgICAg
ICAgcmV0dXJuIENvbXBhcmUoYSwgYikgPT0gMDsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMg
Ym9vbCBMZXNzRXF1YWwoY29uc3QgQmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIpIHsKKyAgICAg
ICAgICAgIHJldHVybiBDb21wYXJlKGEsIGIpIDw9IDA7CisgICAgICAgIH0KKyAgICAgICAgc3Rh
dGljIGJvb2wgTGVzcyhjb25zdCBCaWdudW0mIGEsIGNvbnN0IEJpZ251bSYgYikgeworICAgICAg
ICAgICAgcmV0dXJuIENvbXBhcmUoYSwgYikgPCAwOworICAgICAgICB9CisgICAgICAgIC8vIFJl
dHVybnMgQ29tcGFyZShhICsgYiwgYyk7CisgICAgICAgIHN0YXRpYyBpbnQgUGx1c0NvbXBhcmUo
Y29uc3QgQmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIsIGNvbnN0IEJpZ251bSYgYyk7CisgICAg
ICAgIC8vIFJldHVybnMgYSArIGIgPT0gYworICAgICAgICBzdGF0aWMgYm9vbCBQbHVzRXF1YWwo
Y29uc3QgQmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIsIGNvbnN0IEJpZ251bSYgYykgeworICAg
ICAgICAgICAgcmV0dXJuIFBsdXNDb21wYXJlKGEsIGIsIGMpID09IDA7CisgICAgICAgIH0KKyAg
ICAgICAgLy8gUmV0dXJucyBhICsgYiA8PSBjCisgICAgICAgIHN0YXRpYyBib29sIFBsdXNMZXNz
RXF1YWwoY29uc3QgQmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIsIGNvbnN0IEJpZ251bSYgYykg
eworICAgICAgICAgICAgcmV0dXJuIFBsdXNDb21wYXJlKGEsIGIsIGMpIDw9IDA7CisgICAgICAg
IH0KKyAgICAgICAgLy8gUmV0dXJucyBhICsgYiA8IGMKKyAgICAgICAgc3RhdGljIGJvb2wgUGx1
c0xlc3MoY29uc3QgQmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIsIGNvbnN0IEJpZ251bSYgYykg
eworICAgICAgICAgICAgcmV0dXJuIFBsdXNDb21wYXJlKGEsIGIsIGMpIDwgMDsKKyAgICAgICAg
fQorICAgIHByaXZhdGU6CisgICAgICAgIHR5cGVkZWYgdWludDMyX3QgQ2h1bms7CisgICAgICAg
IHR5cGVkZWYgdWludDY0X3QgRG91YmxlQ2h1bms7CisgICAgICAgIAorICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IGtDaHVua1NpemUgPSBzaXplb2YoQ2h1bmspICogODsKKyAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBrRG91YmxlQ2h1bmtTaXplID0gc2l6ZW9mKERvdWJsZUNodW5rKSAqIDg7Cisg
ICAgICAgIC8vIFdpdGggYmlnaXQgc2l6ZSBvZiAyOCB3ZSBsb29zZSBzb21lIGJpdHMsIGJ1dCBh
IGRvdWJsZSBzdGlsbCBmaXRzIGVhc2lseQorICAgICAgICAvLyBpbnRvIHR3byBjaHVua3MsIGFu
ZCBtb3JlIGltcG9ydGFudGx5IHdlIGNhbiB1c2UgdGhlIENvbWJhIG11bHRpcGxpY2F0aW9uLgor
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtCaWdpdFNpemUgPSAyODsKKyAgICAgICAgc3RhdGlj
IGNvbnN0IENodW5rIGtCaWdpdE1hc2sgPSAoMSA8PCBrQmlnaXRTaXplKSAtIDE7CisgICAgICAg
IC8vIEV2ZXJ5IGluc3RhbmNlIGFsbG9jYXRlcyBrQmlnaXRMZW5ndGggY2h1bmtzIG9uIHRoZSBz
dGFjay4gQmlnbnVtcyBjYW5ub3QKKyAgICAgICAgLy8gZ3Jvdy4gVGhlcmUgYXJlIG5vIGNoZWNr
cyBpZiB0aGUgc3RhY2stYWxsb2NhdGVkIHNwYWNlIGlzIHN1ZmZpY2llbnQuCisgICAgICAgIHN0
YXRpYyBjb25zdCBpbnQga0JpZ2l0Q2FwYWNpdHkgPSBrTWF4U2lnbmlmaWNhbnRCaXRzIC8ga0Jp
Z2l0U2l6ZTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgRW5zdXJlQ2FwYWNpdHkoaW50IHNpemUp
IHsKKyAgICAgICAgICAgIGlmIChzaXplID4ga0JpZ2l0Q2FwYWNpdHkpIHsKKyAgICAgICAgICAg
ICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHZv
aWQgQWxpZ24oY29uc3QgQmlnbnVtJiBvdGhlcik7CisgICAgICAgIHZvaWQgQ2xhbXAoKTsKKyAg
ICAgICAgYm9vbCBJc0NsYW1wZWQoKSBjb25zdDsKKyAgICAgICAgdm9pZCBaZXJvKCk7CisgICAg
ICAgIC8vIFJlcXVpcmVzIHRoaXMgdG8gaGF2ZSBlbm91Z2ggY2FwYWNpdHkgKG5vIHRlc3RzIGRv
bmUpLgorICAgICAgICAvLyBVcGRhdGVzIHVzZWRfZGlnaXRzXyBpZiBuZWNlc3NhcnkuCisgICAg
ICAgIC8vIHNoaWZ0X2Ftb3VudCBtdXN0IGJlIDwga0JpZ2l0U2l6ZS4KKyAgICAgICAgdm9pZCBC
aWdpdHNTaGlmdExlZnQoaW50IHNoaWZ0X2Ftb3VudCk7CisgICAgICAgIC8vIEJpZ2l0TGVuZ3Ro
IGluY2x1ZGVzIHRoZSAiaGlkZGVuIiBkaWdpdHMgZW5jb2RlZCBpbiB0aGUgZXhwb25lbnQuCisg
ICAgICAgIGludCBCaWdpdExlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIHVzZWRfZGlnaXRzXyArIGV4
cG9uZW50XzsgfQorICAgICAgICBDaHVuayBCaWdpdEF0KGludCBpbmRleCkgY29uc3Q7CisgICAg
ICAgIHZvaWQgU3VidHJhY3RUaW1lcyhjb25zdCBCaWdudW0mIG90aGVyLCBpbnQgZmFjdG9yKTsK
KyAgICAgICAgCisgICAgICAgIENodW5rIGJpZ2l0c19idWZmZXJfW2tCaWdpdENhcGFjaXR5XTsK
KyAgICAgICAgLy8gQSB2ZWN0b3IgYmFja2VkIGJ5IGJpZ2l0c19idWZmZXJfLiBUaGlzIHdheSBh
Y2Nlc3NlcyB0byB0aGUgYXJyYXkgYXJlCisgICAgICAgIC8vIGNoZWNrZWQgZm9yIG91dC1vZi1i
b3VuZHMgZXJyb3JzLgorICAgICAgICBWZWN0b3I8Q2h1bms+IGJpZ2l0c187CisgICAgICAgIGlu
dCB1c2VkX2RpZ2l0c187CisgICAgICAgIC8vIFRoZSBCaWdudW0ncyB2YWx1ZSBlcXVhbHMgdmFs
dWUoYmlnaXRzXykgKiAyXihleHBvbmVudF8gKiBrQmlnaXRTaXplKS4KKyAgICAgICAgaW50IGV4
cG9uZW50XzsKKyAgICAgICAgCisgICAgICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihCaWdu
dW0pOworICAgIH07CisgICAgCit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KKwor
I2VuZGlmICAvLyBET1VCTEVfQ09OVkVSU0lPTl9CSUdOVU1fSF8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmNjIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9kdG9hL2NhY2hlZC1wb3dlcnMuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2YzY2I4Y2M4
ZjQzNGUxOGJlM2I3MDU2NjFjY2Q1Y2Y1NDliNjIzZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmNjCkBAIC0wLDAgKzEsMTg1
IEBACisvLyBDb3B5cmlnaHQgMjAwNi0yMDA4IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoK
Ky8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcK
Ky8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
Ly8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
Ly8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2luY2x1ZGUgPHN0ZGFyZy5o
PgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgIlVu
dXNlZFBhcmFtLmgiCisjaW5jbHVkZSAidXRpbHMuaCIKKyNpbmNsdWRlICJjYWNoZWQtcG93ZXJz
LmgiCisKK25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgc3RydWN0IENh
Y2hlZFBvd2VyIHsKKyAgICAgICAgdWludDY0X3Qgc2lnbmlmaWNhbmQ7CisgICAgICAgIGludDE2
X3QgYmluYXJ5X2V4cG9uZW50OworICAgICAgICBpbnQxNl90IGRlY2ltYWxfZXhwb25lbnQ7Cisg
ICAgfTsKKyAgICAKKyAgICBzdGF0aWMgaW50IGtDYWNoZWRQb3dlcnNMZW5ndGggPSAxOworICAg
IHN0YXRpYyBpbnQga0NhY2hlZFBvd2Vyc09mZnNldCA9IDE7CisgICAgc3RhdGljIGNvbnN0IGRv
dWJsZSBrRF8xX0xPRzJfMTAgPSAwLjMwMTAyOTk5NTY2Mzk4MTE0OyAgLy8gIDEgLyBsZygxMCkK
KyAgICBzdGF0aWMgQ2FjaGVkUG93ZXIqIGtDYWNoZWRQb3dlcnMgPSAwOworICAgIAorICAgIGlu
dCBQb3dlcnNPZlRlbkNhY2hlOjprRGVjaW1hbEV4cG9uZW50RGlzdGFuY2UgPSAxOworICAgIGlu
dCBQb3dlcnNPZlRlbkNhY2hlOjprTWluRGVjaW1hbEV4cG9uZW50ID0gMTsKKyAgICBpbnQgUG93
ZXJzT2ZUZW5DYWNoZTo6a01heERlY2ltYWxFeHBvbmVudCA9IDE7CisgICAgCisgICAgdm9pZCBp
bml0aWFsaXplKCkgeworICAgICAgICBzdGF0aWMgQ2FjaGVkUG93ZXIgY2FjaGVkUG93ZXJzW10g
PSB7CisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhmYThmZDVhMCwgMDgxYzAyODgpLCAt
MTIyMCwgLTM0OH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhiYWFlZTE3ZiwgYTIz
ZWJmNzYpLCAtMTE5MywgLTM0MH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg4YjE2
ZmIyMCwgMzA1NWFjNzYpLCAtMTE2NiwgLTMzMn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJU
X0MoMHhjZjQyODk0YSwgNWRjZTM1ZWEpLCAtMTE0MCwgLTMyNH0sCisgICAgICAgICAgICB7VUlO
VDY0XzJQQVJUX0MoMHg5YTZiYjBhYSwgNTU2NTNiMmQpLCAtMTExMywgLTMxNn0sCisgICAgICAg
ICAgICB7VUlOVDY0XzJQQVJUX0MoMHhlNjFhY2YwMywgM2QxYTQ1ZGYpLCAtMTA4NywgLTMwOH0s
CisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhhYjcwZmUxNywgYzc5YWM2Y2EpLCAtMTA2
MCwgLTMwMH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhmZjc3YjFmYywgYmViY2Rj
NGYpLCAtMTAzNCwgLTI5Mn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhiZTU2OTFl
ZiwgNDE2YmQ2MGMpLCAtMTAwNywgLTI4NH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0Mo
MHg4ZGQwMWZhZCwgOTA3ZmZjM2MpLCAtOTgwLCAtMjc2fSwKKyAgICAgICAgICAgIHtVSU5UNjRf
MlBBUlRfQygweGQzNTE1YzI4LCAzMTU1OWE4MyksIC05NTQsIC0yNjh9LAorICAgICAgICAgICAg
e1VJTlQ2NF8yUEFSVF9DKDB4OWQ3MWFjOGYsIGFkYTZjOWI1KSwgLTkyNywgLTI2MH0sCisgICAg
ICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhlYTljMjI3NywgMjNlZThiY2IpLCAtOTAxLCAtMjUy
fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGFlY2M0OTkxLCA0MDc4NTM2ZCksIC04
NzQsIC0yNDR9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ODIzYzEyNzksIDVkYjZj
ZTU3KSwgLTg0NywgLTIzNn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhjMjEwOTQz
NiwgNGRmYjU2MzcpLCAtODIxLCAtMjI4fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygw
eDkwOTZlYTZmLCAzODQ4OTg0ZiksIC03OTQsIC0yMjB9LAorICAgICAgICAgICAge1VJTlQ2NF8y
UEFSVF9DKDB4ZDc3NDg1Y2IsIDI1ODIzYWM3KSwgLTc2OCwgLTIxMn0sCisgICAgICAgICAgICB7
VUlOVDY0XzJQQVJUX0MoMHhhMDg2Y2ZjZCwgOTdiZjk3ZjQpLCAtNzQxLCAtMjA0fSwKKyAgICAg
ICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGVmMzQwYTk4LCAxNzJhYWNlNSksIC03MTUsIC0xOTZ9
LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YjIzODY3ZmIsIDJhMzViMjhlKSwgLTY4
OCwgLTE4OH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg4NGM4ZDRkZiwgZDJjNjNm
M2IpLCAtNjYxLCAtMTgwfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGM1ZGQ0NDI3
LCAxYWQzY2RiYSksIC02MzUsIC0xNzJ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4
OTM2YjlmY2UsIGJiMjVjOTk2KSwgLTYwOCwgLTE2NH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQ
QVJUX0MoMHhkYmFjNmMyNCwgN2Q2MmE1ODQpLCAtNTgyLCAtMTU2fSwKKyAgICAgICAgICAgIHtV
SU5UNjRfMlBBUlRfQygweGEzYWI2NjU4LCAwZDVmZGFmNiksIC01NTUsIC0xNDh9LAorICAgICAg
ICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZjNlMmY4OTMsIGRlYzNmMTI2KSwgLTUyOSwgLTE0MH0s
CisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhiNWI1YWRhOCwgYWFmZjgwYjgpLCAtNTAy
LCAtMTMyfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDg3NjI1ZjA1LCA2YzdjNGE4
YiksIC00NzUsIC0xMjR9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YzliY2ZmNjAs
IDM0YzEzMDUzKSwgLTQ0OSwgLTExNn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg5
NjRlODU4YywgOTFiYTI2NTUpLCAtNDIyLCAtMTA4fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBB
UlRfQygweGRmZjk3NzI0LCA3MDI5N2ViZCksIC0zOTYsIC0xMDB9LAorICAgICAgICAgICAge1VJ
TlQ2NF8yUEFSVF9DKDB4YTZkZmJkOWYsIGI4ZTViODhmKSwgLTM2OSwgLTkyfSwKKyAgICAgICAg
ICAgIHtVSU5UNjRfMlBBUlRfQygweGY4YTk1ZmNmLCA4ODc0N2Q5NCksIC0zNDMsIC04NH0sCisg
ICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhiOTQ0NzA5MywgOGZhODliY2YpLCAtMzE2LCAt
NzZ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4OGEwOGYwZjgsIGJmMGYxNTZiKSwg
LTI4OSwgLTY4fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGNkYjAyNTU1LCA2NTMx
MzFiNiksIC0yNjMsIC02MH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg5OTNmZTJj
NiwgZDA3YjdmYWMpLCAtMjM2LCAtNTJ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4
ZTQ1YzEwYzQsIDJhMmIzYjA2KSwgLTIxMCwgLTQ0fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBB
UlRfQygweGFhMjQyNDk5LCA2OTczOTJkMyksIC0xODMsIC0zNn0sCisgICAgICAgICAgICB7VUlO
VDY0XzJQQVJUX0MoMHhmZDg3YjVmMiwgODMwMGNhMGUpLCAtMTU3LCAtMjh9LAorICAgICAgICAg
ICAge1VJTlQ2NF8yUEFSVF9DKDB4YmNlNTA4NjQsIDkyMTExYWViKSwgLTEzMCwgLTIwfSwKKyAg
ICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDhjYmNjYzA5LCA2ZjUwODhjYyksIC0xMDMsIC0x
Mn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhkMWI3MTc1OCwgZTIxOTY1MmMpLCAt
NzcsIC00fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDljNDAwMDAwLCAwMDAwMDAw
MCksIC01MCwgNH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhlOGQ0YTUxMCwgMDAw
MDAwMDApLCAtMjQsIDEyfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGFkNzhlYmM1
LCBhYzYyMDAwMCksIDMsIDIwfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDgxM2Yz
OTc4LCBmODk0MDk4NCksIDMwLCAyOH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhj
MDk3Y2U3YiwgYzkwNzE1YjMpLCA1NiwgMzZ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9D
KDB4OGY3ZTMyY2UsIDdiZWE1YzcwKSwgODMsIDQ0fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBB
UlRfQygweGQ1ZDIzOGE0LCBhYmU5ODA2OCksIDEwOSwgNTJ9LAorICAgICAgICAgICAge1VJTlQ2
NF8yUEFSVF9DKDB4OWY0ZjI3MjYsIDE3OWEyMjQ1KSwgMTM2LCA2MH0sCisgICAgICAgICAgICB7
VUlOVDY0XzJQQVJUX0MoMHhlZDYzYTIzMSwgZDRjNGZiMjcpLCAxNjIsIDY4fSwKKyAgICAgICAg
ICAgIHtVSU5UNjRfMlBBUlRfQygweGIwZGU2NTM4LCA4Y2M4YWRhOCksIDE4OSwgNzZ9LAorICAg
ICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ODNjNzA4OGUsIDFhYWI2NWRiKSwgMjE2LCA4NH0s
CisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhjNDVkMWRmOSwgNDI3MTFkOWEpLCAyNDIs
IDkyfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDkyNGQ2OTJjLCBhNjFiZTc1OCks
IDI2OSwgMTAwfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGRhMDFlZTY0LCAxYTcw
OGRlYSksIDI5NSwgMTA4fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGEyNmRhMzk5
LCA5YWVmNzc0YSksIDMyMiwgMTE2fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGYy
MDk3ODdiLCBiNDdkNmI4NSksIDM0OCwgMTI0fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRf
QygweGI0NTRlNGExLCA3OWRkMTg3NyksIDM3NSwgMTMyfSwKKyAgICAgICAgICAgIHtVSU5UNjRf
MlBBUlRfQygweDg2NWI4NjkyLCA1YjliYzVjMiksIDQwMiwgMTQwfSwKKyAgICAgICAgICAgIHtV
SU5UNjRfMlBBUlRfQygweGM4MzU1M2M1LCBjODk2NWQzZCksIDQyOCwgMTQ4fSwKKyAgICAgICAg
ICAgIHtVSU5UNjRfMlBBUlRfQygweDk1MmFiNDVjLCBmYTk3YTBiMyksIDQ1NSwgMTU2fSwKKyAg
ICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGRlNDY5ZmJkLCA5OWEwNWZlMyksIDQ4MSwgMTY0
fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGE1OWJjMjM0LCBkYjM5OGMyNSksIDUw
OCwgMTcyfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGY2YzY5YTcyLCBhMzk4OWY1
YyksIDUzNCwgMTgwfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGI3ZGNiZjUzLCA1
NGU5YmVjZSksIDU2MSwgMTg4fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDg4ZmNm
MzE3LCBmMjIyNDFlMiksIDU4OCwgMTk2fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygw
eGNjMjBjZTliLCBkMzVjNzhhNSksIDYxNCwgMjA0fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBB
UlRfQygweDk4MTY1YWYzLCA3YjIxNTNkZiksIDY0MSwgMjEyfSwKKyAgICAgICAgICAgIHtVSU5U
NjRfMlBBUlRfQygweGUyYTBiNWRjLCA5NzFmMzAzYSksIDY2NywgMjIwfSwKKyAgICAgICAgICAg
IHtVSU5UNjRfMlBBUlRfQygweGE4ZDlkMTUzLCA1Y2UzYjM5NiksIDY5NCwgMjI4fSwKKyAgICAg
ICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGZiOWI3Y2Q5LCBhNGE3NDQzYyksIDcyMCwgMjM2fSwK
KyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGJiNzY0YzRjLCBhN2E0NDQxMCksIDc0Nywg
MjQ0fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDhiYWI4ZWVmLCBiNjQwOWMxYSks
IDc3NCwgMjUyfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGQwMWZlZjEwLCBhNjU3
ODQyYyksIDgwMCwgMjYwfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDliMTBhNGU1
LCBlOTkxMzEyOSksIDgyNywgMjY4fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGU3
MTA5YmZiLCBhMTljMGM5ZCksIDg1MywgMjc2fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRf
QygweGFjMjgyMGQ5LCA2MjNiZjQyOSksIDg4MCwgMjg0fSwKKyAgICAgICAgICAgIHtVSU5UNjRf
MlBBUlRfQygweDgwNDQ0YjVlLCA3YWE3Y2Y4NSksIDkwNywgMjkyfSwKKyAgICAgICAgICAgIHtV
SU5UNjRfMlBBUlRfQygweGJmMjFlNDQwLCAwM2FjZGQyZCksIDkzMywgMzAwfSwKKyAgICAgICAg
ICAgIHtVSU5UNjRfMlBBUlRfQygweDhlNjc5YzJmLCA1ZTQ0ZmY4ZiksIDk2MCwgMzA4fSwKKyAg
ICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGQ0MzMxNzlkLCA5YzhjYjg0MSksIDk4NiwgMzE2
fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDllMTlkYjkyLCBiNGUzMWJhOSksIDEw
MTMsIDMyNH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhlYjk2YmY2ZSwgYmFkZjc3
ZDkpLCAxMDM5LCAzMzJ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YWY4NzAyM2Is
IDliZjBlZTZiKSwgMTA2NiwgMzQwfSwKKyAgICAgICAgfTsKKyAgICAgICAga0NhY2hlZFBvd2Vy
cyA9IGNhY2hlZFBvd2VyczsKKyAgICAgICAga0NhY2hlZFBvd2Vyc0xlbmd0aCA9IEFSUkFZX1NJ
WkUoY2FjaGVkUG93ZXJzKTsKKyAgICAgICAga0NhY2hlZFBvd2Vyc09mZnNldCA9IC1jYWNoZWRQ
b3dlcnNbMF0uZGVjaW1hbF9leHBvbmVudDsKKyAgICAgICAgUG93ZXJzT2ZUZW5DYWNoZTo6a0Rl
Y2ltYWxFeHBvbmVudERpc3RhbmNlID0ga0NhY2hlZFBvd2Vyc1sxXS5kZWNpbWFsX2V4cG9uZW50
IC0ga0NhY2hlZFBvd2Vyc1swXS5kZWNpbWFsX2V4cG9uZW50OworICAgICAgICBQb3dlcnNPZlRl
bkNhY2hlOjprTWluRGVjaW1hbEV4cG9uZW50ID0ga0NhY2hlZFBvd2Vyc1swXS5kZWNpbWFsX2V4
cG9uZW50OworICAgICAgICBQb3dlcnNPZlRlbkNhY2hlOjprTWF4RGVjaW1hbEV4cG9uZW50ID0g
a0NhY2hlZFBvd2Vyc1trQ2FjaGVkUG93ZXJzTGVuZ3RoIC0gMV0uZGVjaW1hbF9leHBvbmVudDsK
KyAgICB9CisgICAgCisgICAgdm9pZCBQb3dlcnNPZlRlbkNhY2hlOjpHZXRDYWNoZWRQb3dlckZv
ckJpbmFyeUV4cG9uZW50UmFuZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1pbl9leHBvbmVudCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgbWF4X2V4cG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIERpeUZwKiBwb3dlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGRlY2lt
YWxfZXhwb25lbnQpIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKG1heF9leHBvbmVudCk7CisgICAg
ICAgIGludCBrUSA9IERpeUZwOjprU2lnbmlmaWNhbmRTaXplOworICAgICAgICBkb3VibGUgayA9
IGNlaWwoKG1pbl9leHBvbmVudCArIGtRIC0gMSkgKiBrRF8xX0xPRzJfMTApOworICAgICAgICBp
bnQgZm9vID0ga0NhY2hlZFBvd2Vyc09mZnNldDsKKyAgICAgICAgaW50IGluZGV4ID0KKyAgICAg
ICAgKGZvbyArIHN0YXRpY19jYXN0PGludD4oaykgLSAxKSAvIGtEZWNpbWFsRXhwb25lbnREaXN0
YW5jZSArIDE7CisgICAgICAgIEFTU0VSVCgwIDw9IGluZGV4ICYmIGluZGV4IDwga0NhY2hlZFBv
d2Vyc0xlbmd0aCk7CisgICAgICAgIENhY2hlZFBvd2VyIGNhY2hlZF9wb3dlciA9IGtDYWNoZWRQ
b3dlcnNbaW5kZXhdOworICAgICAgICBBU1NFUlQobWluX2V4cG9uZW50IDw9IGNhY2hlZF9wb3dl
ci5iaW5hcnlfZXhwb25lbnQpOworICAgICAgICBBU1NFUlQoY2FjaGVkX3Bvd2VyLmJpbmFyeV9l
eHBvbmVudCA8PSBtYXhfZXhwb25lbnQpOworICAgICAgICAqZGVjaW1hbF9leHBvbmVudCA9IGNh
Y2hlZF9wb3dlci5kZWNpbWFsX2V4cG9uZW50OworICAgICAgICAqcG93ZXIgPSBEaXlGcChjYWNo
ZWRfcG93ZXIuc2lnbmlmaWNhbmQsIGNhY2hlZF9wb3dlci5iaW5hcnlfZXhwb25lbnQpOworICAg
IH0KKyAgICAKKyAgICAKKyAgICB2b2lkIFBvd2Vyc09mVGVuQ2FjaGU6OkdldENhY2hlZFBvd2Vy
Rm9yRGVjaW1hbEV4cG9uZW50KGludCByZXF1ZXN0ZWRfZXhwb25lbnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXlGcCogcG93
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQqIGZvdW5kX2V4cG9uZW50KSB7CisgICAgICAgIEFTU0VSVChrTWluRGVjaW1h
bEV4cG9uZW50IDw9IHJlcXVlc3RlZF9leHBvbmVudCk7CisgICAgICAgIEFTU0VSVChyZXF1ZXN0
ZWRfZXhwb25lbnQgPCBrTWF4RGVjaW1hbEV4cG9uZW50ICsga0RlY2ltYWxFeHBvbmVudERpc3Rh
bmNlKTsKKyAgICAgICAgaW50IGluZGV4ID0KKyAgICAgICAgKHJlcXVlc3RlZF9leHBvbmVudCAr
IGtDYWNoZWRQb3dlcnNPZmZzZXQpIC8ga0RlY2ltYWxFeHBvbmVudERpc3RhbmNlOworICAgICAg
ICBDYWNoZWRQb3dlciBjYWNoZWRfcG93ZXIgPSBrQ2FjaGVkUG93ZXJzW2luZGV4XTsKKyAgICAg
ICAgKnBvd2VyID0gRGl5RnAoY2FjaGVkX3Bvd2VyLnNpZ25pZmljYW5kLCBjYWNoZWRfcG93ZXIu
YmluYXJ5X2V4cG9uZW50KTsKKyAgICAgICAgKmZvdW5kX2V4cG9uZW50ID0gY2FjaGVkX3Bvd2Vy
LmRlY2ltYWxfZXhwb25lbnQ7CisgICAgICAgIEFTU0VSVCgqZm91bmRfZXhwb25lbnQgPD0gcmVx
dWVzdGVkX2V4cG9uZW50KTsKKyAgICAgICAgQVNTRVJUKHJlcXVlc3RlZF9leHBvbmVudCA8ICpm
b3VuZF9leHBvbmVudCArIGtEZWNpbWFsRXhwb25lbnREaXN0YW5jZSk7CisgICAgfQorICAgIAor
fSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL2R0b2EvY2FjaGVkLXBvd2Vycy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9kdG9hL2NhY2hlZC1wb3dlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYTFkYzI1OWUxZGNlNDg5
OTMwMGZkZTJjZjdmZmI4MjAzMDcwNmYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9kdG9hL2NhY2hlZC1wb3dlcnMuaApAQCAtMCwwICsxLDY4IEBACisvLyBD
b3B5cmlnaHQgMjAxMCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNj
bGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8v
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZm5kZWYgRE9VQkxFX0NPTlZFUlNJT05fQ0FDSEVE
X1BPV0VSU19IXworI2RlZmluZSBET1VCTEVfQ09OVkVSU0lPTl9DQUNIRURfUE9XRVJTX0hfCisK
KyNpbmNsdWRlICJkaXktZnAuaCIKKworbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKKyAg
ICAKKyAgICBjbGFzcyBQb3dlcnNPZlRlbkNhY2hlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIAor
ICAgICAgICAvLyBOb3QgYWxsIHBvd2VycyBvZiB0ZW4gYXJlIGNhY2hlZC4gVGhlIGRlY2ltYWwg
ZXhwb25lbnQgb2YgdHdvIG5laWdoYm9yaW5nCisgICAgICAgIC8vIGNhY2hlZCBudW1iZXJzIHdp
bGwgZGlmZmVyIGJ5IGtEZWNpbWFsRXhwb25lbnREaXN0YW5jZS4KKyAgICAgICAgc3RhdGljIGlu
dCBrRGVjaW1hbEV4cG9uZW50RGlzdGFuY2U7CisgICAgICAgIAorICAgICAgICBzdGF0aWMgaW50
IGtNaW5EZWNpbWFsRXhwb25lbnQ7CisgICAgICAgIHN0YXRpYyBpbnQga01heERlY2ltYWxFeHBv
bmVudDsKKyAgICAgICAgCisgICAgICAgIC8vIFJldHVybnMgYSBjYWNoZWQgcG93ZXItb2YtdGVu
IHdpdGggYSBiaW5hcnkgZXhwb25lbnQgaW4gdGhlIHJhbmdlCisgICAgICAgIC8vIFttaW5fZXhw
b25lbnQ7IG1heF9leHBvbmVudF0gKGJvdW5kYXJpZXMgaW5jbHVkZWQpLgorICAgICAgICBzdGF0
aWMgdm9pZCBHZXRDYWNoZWRQb3dlckZvckJpbmFyeUV4cG9uZW50UmFuZ2UoaW50IG1pbl9leHBv
bmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBtYXhfZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBEaXlGcCogcG93ZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGRlY2ltYWxfZXhw
b25lbnQpOworICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJucyBhIGNhY2hlZCBwb3dlciBvZiB0
ZW4geCB+PSAxMF5rIHN1Y2ggdGhhdAorICAgICAgICAvLyAgIGsgPD0gZGVjaW1hbF9leHBvbmVu
dCA8IGsgKyBrQ2FjaGVkUG93ZXJzRGVjaW1hbERpc3RhbmNlLgorICAgICAgICAvLyBUaGUgZ2l2
ZW4gZGVjaW1hbF9leHBvbmVudCBtdXN0IHNhdGlzZnkKKyAgICAgICAgLy8gICBrTWluRGVjaW1h
bEV4cG9uZW50IDw9IHJlcXVlc3RlZF9leHBvbmVudCwgYW5kCisgICAgICAgIC8vICAgcmVxdWVz
dGVkX2V4cG9uZW50IDwga01heERlY2ltYWxFeHBvbmVudCArIGtEZWNpbWFsRXhwb25lbnREaXN0
YW5jZS4KKyAgICAgICAgc3RhdGljIHZvaWQgR2V0Q2FjaGVkUG93ZXJGb3JEZWNpbWFsRXhwb25l
bnQoaW50IHJlcXVlc3RlZF9leHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRGl5RnAqIHBvd2VyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGZvdW5kX2V4cG9uZW50KTsK
KyAgICB9OworICAgIAorICAgIC8vIEluaXRpYWxpemVzIHRoZSB0YWJsZSBvZiBjYWNoZWQgcG93
ZXJzIHVzZWQgYnkgdGhlIGR0b2EgYWxnb3JpdGhtLgorICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUg
Y2FsbGVkIHdoZW4gSlNDIGlzIGJlaW5nIGluaXRpYWxpemVkLgorICAgIHZvaWQgaW5pdGlhbGl6
ZSgpOworICAgIAorfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCisKKyNlbmRpZiAg
Ly8gRE9VQkxFX0NPTlZFUlNJT05fQ0FDSEVEX1BPV0VSU19IXwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2RpeS1mcC5jYyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvZHRvYS9kaXktZnAuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWIxZjdlZTM1YjljZDFjMGIwZDQxY2Rm
MTc3ZWE4ODhlZTlhY2I0NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvZHRvYS9kaXktZnAuY2MKQEAgLTAsMCArMSw1NyBAQAorLy8gQ29weXJpZ2h0IDIwMTAg
dGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
Ky8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisKKyNpbmNsdWRlICJkaXktZnAuaCIKKyNpbmNsdWRlICJ1dGlscy5oIgorCitu
YW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIHZvaWQgRGl5RnA6Ok11bHRp
cGx5KGNvbnN0IERpeUZwJiBvdGhlcikgeworICAgICAgICAvLyBTaW1wbHkgImVtdWxhdGVzIiBh
IDEyOCBiaXQgbXVsdGlwbGljYXRpb24uCisgICAgICAgIC8vIEhvd2V2ZXI6IHRoZSByZXN1bHRp
bmcgbnVtYmVyIG9ubHkgY29udGFpbnMgNjQgYml0cy4gVGhlIGxlYXN0CisgICAgICAgIC8vIHNp
Z25pZmljYW50IDY0IGJpdHMgYXJlIG9ubHkgdXNlZCBmb3Igcm91bmRpbmcgdGhlIG1vc3Qgc2ln
bmlmaWNhbnQgNjQKKyAgICAgICAgLy8gYml0cy4KKyAgICAgICAgY29uc3QgdWludDY0X3Qga00z
MiA9IDB4RkZGRkZGRkZVOworICAgICAgICB1aW50NjRfdCBhID0gZl8gPj4gMzI7CisgICAgICAg
IHVpbnQ2NF90IGIgPSBmXyAmIGtNMzI7CisgICAgICAgIHVpbnQ2NF90IGMgPSBvdGhlci5mXyA+
PiAzMjsKKyAgICAgICAgdWludDY0X3QgZCA9IG90aGVyLmZfICYga00zMjsKKyAgICAgICAgdWlu
dDY0X3QgYWMgPSBhICogYzsKKyAgICAgICAgdWludDY0X3QgYmMgPSBiICogYzsKKyAgICAgICAg
dWludDY0X3QgYWQgPSBhICogZDsKKyAgICAgICAgdWludDY0X3QgYmQgPSBiICogZDsKKyAgICAg
ICAgdWludDY0X3QgdG1wID0gKGJkID4+IDMyKSArIChhZCAmIGtNMzIpICsgKGJjICYga00zMik7
CisgICAgICAgIC8vIEJ5IGFkZGluZyAxVSA8PCAzMSB0byB0bXAgd2Ugcm91bmQgdGhlIGZpbmFs
IHJlc3VsdC4KKyAgICAgICAgLy8gSGFsZndheSBjYXNlcyB3aWxsIGJlIHJvdW5kIHVwLgorICAg
ICAgICB0bXAgKz0gMVUgPDwgMzE7CisgICAgICAgIHVpbnQ2NF90IHJlc3VsdF9mID0gYWMgKyAo
YWQgPj4gMzIpICsgKGJjID4+IDMyKSArICh0bXAgPj4gMzIpOworICAgICAgICBlXyArPSBvdGhl
ci5lXyArIDY0OworICAgICAgICBmXyA9IHJlc3VsdF9mOworICAgIH0KKyAgICAKK30gIC8vIG5h
bWVzcGFjZSBkb3VibGVfY29udmVyc2lvbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9kdG9hL2RpeS1mcC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2Rp
eS1mcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjlmYWRiMzdiYmQ2N2EzMmQyZmI4YWQwMTNkMzU1YmU3MGQyYmUw
N2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZGl5
LWZwLmgKQEAgLTAsMCArMSwxMTggQEAKKy8vIENvcHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0
IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8v
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lm
bmRlZiBET1VCTEVfQ09OVkVSU0lPTl9ESVlfRlBfSF8KKyNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJ
T05fRElZX0ZQX0hfCisKKyNpbmNsdWRlICJ1dGlscy5oIgorCituYW1lc3BhY2UgZG91YmxlX2Nv
bnZlcnNpb24geworICAgIAorICAgIC8vIFRoaXMgIkRvIEl0IFlvdXJzZWxmIEZsb2F0aW5nIFBv
aW50IiBjbGFzcyBpbXBsZW1lbnRzIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyCisgICAgLy8gd2l0
aCBhIHVpbnQ2NCBzaWduaWZpY2FuZCBhbmQgYW4gaW50IGV4cG9uZW50LiBOb3JtYWxpemVkIERp
eUZwIG51bWJlcnMgd2lsbAorICAgIC8vIGhhdmUgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IG9m
IHRoZSBzaWduaWZpY2FuZCBzZXQuCisgICAgLy8gTXVsdGlwbGljYXRpb24gYW5kIFN1YnRyYWN0
aW9uIGRvIG5vdCBub3JtYWxpemUgdGhlaXIgcmVzdWx0cy4KKyAgICAvLyBEaXlGcCBhcmUgbm90
IGRlc2lnbmVkIHRvIGNvbnRhaW4gc3BlY2lhbCBkb3VibGVzIChOYU4gYW5kIEluZmluaXR5KS4K
KyAgICBjbGFzcyBEaXlGcCB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgY29uc3QgaW50
IGtTaWduaWZpY2FuZFNpemUgPSA2NDsKKyAgICAgICAgCisgICAgICAgIERpeUZwKCkgOiBmXygw
KSwgZV8oMCkge30KKyAgICAgICAgRGl5RnAodWludDY0X3QgZiwgaW50IGUpIDogZl8oZiksIGVf
KGUpIHt9CisgICAgICAgIAorICAgICAgICAvLyB0aGlzID0gdGhpcyAtIG90aGVyLgorICAgICAg
ICAvLyBUaGUgZXhwb25lbnRzIG9mIGJvdGggbnVtYmVycyBtdXN0IGJlIHRoZSBzYW1lIGFuZCB0
aGUgc2lnbmlmaWNhbmQgb2YgdGhpcworICAgICAgICAvLyBtdXN0IGJlIGJpZ2dlciB0aGFuIHRo
ZSBzaWduaWZpY2FuZCBvZiBvdGhlci4KKyAgICAgICAgLy8gVGhlIHJlc3VsdCB3aWxsIG5vdCBi
ZSBub3JtYWxpemVkLgorICAgICAgICB2b2lkIFN1YnRyYWN0KGNvbnN0IERpeUZwJiBvdGhlcikg
eworICAgICAgICAgICAgQVNTRVJUKGVfID09IG90aGVyLmVfKTsKKyAgICAgICAgICAgIEFTU0VS
VChmXyA+PSBvdGhlci5mXyk7CisgICAgICAgICAgICBmXyAtPSBvdGhlci5mXzsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJucyBhIC0gYi4KKyAgICAgICAgLy8gVGhlIGV4
cG9uZW50cyBvZiBib3RoIG51bWJlcnMgbXVzdCBiZSB0aGUgc2FtZSBhbmQgdGhpcyBtdXN0IGJl
IGJpZ2dlcgorICAgICAgICAvLyB0aGFuIG90aGVyLiBUaGUgcmVzdWx0IHdpbGwgbm90IGJlIG5v
cm1hbGl6ZWQuCisgICAgICAgIHN0YXRpYyBEaXlGcCBNaW51cyhjb25zdCBEaXlGcCYgYSwgY29u
c3QgRGl5RnAmIGIpIHsKKyAgICAgICAgICAgIERpeUZwIHJlc3VsdCA9IGE7CisgICAgICAgICAg
ICByZXN1bHQuU3VidHJhY3QoYik7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICAKKyAgICAgICAgLy8gdGhpcyA9IHRoaXMgKiBvdGhlci4K
KyAgICAgICAgdm9pZCBNdWx0aXBseShjb25zdCBEaXlGcCYgb3RoZXIpOworICAgICAgICAKKyAg
ICAgICAgLy8gcmV0dXJucyBhICogYjsKKyAgICAgICAgc3RhdGljIERpeUZwIFRpbWVzKGNvbnN0
IERpeUZwJiBhLCBjb25zdCBEaXlGcCYgYikgeworICAgICAgICAgICAgRGl5RnAgcmVzdWx0ID0g
YTsKKyAgICAgICAgICAgIHJlc3VsdC5NdWx0aXBseShiKTsKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgTm9ybWFsaXplKCkgewor
ICAgICAgICAgICAgQVNTRVJUKGZfICE9IDApOworICAgICAgICAgICAgdWludDY0X3QgZiA9IGZf
OworICAgICAgICAgICAgaW50IGUgPSBlXzsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8g
VGhpcyBtZXRob2QgaXMgbWFpbmx5IGNhbGxlZCBmb3Igbm9ybWFsaXppbmcgYm91bmRhcmllcy4g
SW4gZ2VuZXJhbAorICAgICAgICAgICAgLy8gYm91bmRhcmllcyBuZWVkIHRvIGJlIHNoaWZ0ZWQg
YnkgMTAgYml0cy4gV2UgdGh1cyBvcHRpbWl6ZSBmb3IgdGhpcyBjYXNlLgorICAgICAgICAgICAg
Y29uc3QgdWludDY0X3QgazEwTVNCaXRzID0gVUlOVDY0XzJQQVJUX0MoMHhGRkMwMDAwMCwgMDAw
MDAwMDApOworICAgICAgICAgICAgd2hpbGUgKChmICYgazEwTVNCaXRzKSA9PSAwKSB7CisgICAg
ICAgICAgICAgICAgZiA8PD0gMTA7CisgICAgICAgICAgICAgICAgZSAtPSAxMDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHdoaWxlICgoZiAmIGtVaW50NjRNU0IpID09IDApIHsKKyAgICAg
ICAgICAgICAgICBmIDw8PSAxOworICAgICAgICAgICAgICAgIGUtLTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGZfID0gZjsKKyAgICAgICAgICAgIGVfID0gZTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgc3RhdGljIERpeUZwIE5vcm1hbGl6ZShjb25zdCBEaXlGcCYgYSkgewor
ICAgICAgICAgICAgRGl5RnAgcmVzdWx0ID0gYTsKKyAgICAgICAgICAgIHJlc3VsdC5Ob3JtYWxp
emUoKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHVpbnQ2NF90IGYoKSBjb25zdCB7IHJldHVybiBmXzsgfQorICAgICAgICBpbnQgZSgp
IGNvbnN0IHsgcmV0dXJuIGVfOyB9CisgICAgICAgIAorICAgICAgICB2b2lkIHNldF9mKHVpbnQ2
NF90IG5ld192YWx1ZSkgeyBmXyA9IG5ld192YWx1ZTsgfQorICAgICAgICB2b2lkIHNldF9lKGlu
dCBuZXdfdmFsdWUpIHsgZV8gPSBuZXdfdmFsdWU7IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToK
KyAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGtVaW50NjRNU0IgPSBVSU5UNjRfMlBBUlRf
QygweDgwMDAwMDAwLCAwMDAwMDAwMCk7CisgICAgICAgIAorICAgICAgICB1aW50NjRfdCBmXzsK
KyAgICAgICAgaW50IGVfOworICAgIH07CisgICAgCit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2Nv
bnZlcnNpb24KKworI2VuZGlmICAvLyBET1VCTEVfQ09OVkVSU0lPTl9ESVlfRlBfSF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5j
YyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5jYwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4zMTdkZjE0MmU5YTRjMjMwM2JhNGIyY2QwMTMyYTE2YTRlMjhmMmZiCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2RvdWJsZS1jb252
ZXJzaW9uLmNjCkBAIC0wLDAgKzEsODY5IEBACisvLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJv
amVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8v
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
KyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlICJkb3Vi
bGUtY29udmVyc2lvbi5oIgorCisjaW5jbHVkZSAiYmlnbnVtLWR0b2EuaCIKKyNpbmNsdWRlICJk
b3VibGUuaCIKKyNpbmNsdWRlICJmYXN0LWR0b2EuaCIKKyNpbmNsdWRlICJmaXhlZC1kdG9hLmgi
CisjaW5jbHVkZSAic3RydG9kLmgiCisjaW5jbHVkZSAidXRpbHMuaCIKKworbmFtZXNwYWNlIGRv
dWJsZV9jb252ZXJzaW9uIHsKKyAgICAKKyAgICBjb25zdCBEb3VibGVUb1N0cmluZ0NvbnZlcnRl
ciYgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6OkVjbWFTY3JpcHRDb252ZXJ0ZXIoKSB7CisgICAg
ICAgIGludCBmbGFncyA9IFVOSVFVRV9aRVJPIHwgRU1JVF9QT1NJVElWRV9FWFBPTkVOVF9TSUdO
OworICAgICAgICBzdGF0aWMgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXIgY29udmVydGVyKGZsYWdz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmZp
bml0eSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ik5hTiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC02
LCAyMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2
LCAwKTsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRlcjsKKyAgICB9CisgICAgCisgICAgCisgICAg
Ym9vbCBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6SGFuZGxlU3BlY2lhbFZhbHVlcygKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB2
YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25zdCB7CisgICAgICAgIERvdWJs
ZSBkb3VibGVfaW5zcGVjdCh2YWx1ZSk7CisgICAgICAgIGlmIChkb3VibGVfaW5zcGVjdC5Jc0lu
ZmluaXRlKCkpIHsKKyAgICAgICAgICAgIGlmIChpbmZpbml0eV9zeW1ib2xfID09IE5VTEwpIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA8IDApIHsKKyAgICAgICAgICAgICAg
ICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKCctJyk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkU3RyaW5nKGluZmluaXR5X3N5bWJvbF8pOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRvdWJsZV9pbnNw
ZWN0LklzTmFuKCkpIHsKKyAgICAgICAgICAgIGlmIChuYW5fc3ltYm9sXyA9PSBOVUxMKSByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkU3RyaW5nKG5hbl9zeW1i
b2xfKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBEb3VibGVUb1N0cmluZ0NvbnZl
cnRlcjo6Q3JlYXRlRXhwb25lbnRpYWxSZXByZXNlbnRhdGlvbigKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIqIGRlY2ltYWxfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBl
eHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25zdCB7
CisgICAgICAgIEFTU0VSVChsZW5ndGggIT0gMCk7CisgICAgICAgIHJlc3VsdF9idWlsZGVyLT5B
ZGRDaGFyYWN0ZXIoZGVjaW1hbF9kaWdpdHNbMF0pOworICAgICAgICBpZiAobGVuZ3RoICE9IDEp
IHsKKyAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRDaGFyYWN0ZXIoJy4nKTsKKyAgICAg
ICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRTdWJzdHJpbmcoJmRlY2ltYWxfZGlnaXRzWzFdLCBs
ZW5ndGgtMSk7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3Rl
cihleHBvbmVudF9jaGFyYWN0ZXJfKTsKKyAgICAgICAgaWYgKGV4cG9uZW50IDwgMCkgeworICAg
ICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcignLScpOworICAgICAgICAgICAg
ZXhwb25lbnQgPSAtZXhwb25lbnQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAo
KGZsYWdzXyAmIEVNSVRfUE9TSVRJVkVfRVhQT05FTlRfU0lHTikgIT0gMCkgeworICAgICAgICAg
ICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRDaGFyYWN0ZXIoJysnKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBpZiAoZXhwb25lbnQgPT0gMCkgeworICAgICAgICAgICAgcmVz
dWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcignMCcpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIEFTU0VSVChleHBvbmVudCA8IDFlNCk7CisgICAgICAgIGNvbnN0IGlu
dCBrTWF4RXhwb25lbnRMZW5ndGggPSA1OworICAgICAgICBjaGFyIGJ1ZmZlcltrTWF4RXhwb25l
bnRMZW5ndGhdOworICAgICAgICBpbnQgZmlyc3RfY2hhcl9wb3MgPSBrTWF4RXhwb25lbnRMZW5n
dGg7CisgICAgICAgIHdoaWxlIChleHBvbmVudCA+IDApIHsKKyAgICAgICAgICAgIGJ1ZmZlclst
LWZpcnN0X2NoYXJfcG9zXSA9ICcwJyArIChleHBvbmVudCAlIDEwKTsKKyAgICAgICAgICAgIGV4
cG9uZW50IC89IDEwOworICAgICAgICB9CisgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRTdWJz
dHJpbmcoJmJ1ZmZlcltmaXJzdF9jaGFyX3Bvc10sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAga01heEV4cG9uZW50TGVuZ3RoIC0gZmlyc3RfY2hhcl9wb3MpOworICAgIH0K
KyAgICAKKyAgICAKKyAgICB2b2lkIERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpDcmVhdGVEZWNp
bWFsUmVwcmVzZW50YXRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGRlY2ltYWxfZGlnaXRzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRpZ2l0c19h
ZnRlcl9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU3RyaW5nQnVpbGRlciogcmVzdWx0X2J1aWxkZXIpIGNvbnN0IHsK
KyAgICAgICAgLy8gQ3JlYXRlIGEgcmVwcmVzZW50YXRpb24gdGhhdCBpcyBwYWRkZWQgd2l0aCB6
ZXJvcyBpZiBuZWVkZWQuCisgICAgICAgIGlmIChkZWNpbWFsX3BvaW50IDw9IDApIHsKKyAgICAg
ICAgICAgIC8vICIwLjAwMDAwZGVjaW1hbF9yZXAiLgorICAgICAgICAgICAgcmVzdWx0X2J1aWxk
ZXItPkFkZENoYXJhY3RlcignMCcpOworICAgICAgICAgICAgaWYgKGRpZ2l0c19hZnRlcl9wb2lu
dCA+IDApIHsKKyAgICAgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKCcu
Jyk7CisgICAgICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZFBhZGRpbmcoJzAnLCAtZGVj
aW1hbF9wb2ludCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGxlbmd0aCA8PSBkaWdpdHNfYWZ0
ZXJfcG9pbnQgLSAoLWRlY2ltYWxfcG9pbnQpKTsKKyAgICAgICAgICAgICAgICByZXN1bHRfYnVp
bGRlci0+QWRkU3Vic3RyaW5nKGRlY2ltYWxfZGlnaXRzLCBsZW5ndGgpOworICAgICAgICAgICAg
ICAgIGludCByZW1haW5pbmdfZGlnaXRzID0gZGlnaXRzX2FmdGVyX3BvaW50IC0gKC1kZWNpbWFs
X3BvaW50KSAtIGxlbmd0aDsKKyAgICAgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkUGFk
ZGluZygnMCcsIHJlbWFpbmluZ19kaWdpdHMpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgaWYgKGRlY2ltYWxfcG9pbnQgPj0gbGVuZ3RoKSB7CisgICAgICAgICAgICAvLyAiZGVjaW1h
bF9yZXAwMDAwLjAwMDAwIiBvciAiZGVjaW1hbF9yZXAuMDAwMCIKKyAgICAgICAgICAgIHJlc3Vs
dF9idWlsZGVyLT5BZGRTdWJzdHJpbmcoZGVjaW1hbF9kaWdpdHMsIGxlbmd0aCk7CisgICAgICAg
ICAgICByZXN1bHRfYnVpbGRlci0+QWRkUGFkZGluZygnMCcsIGRlY2ltYWxfcG9pbnQgLSBsZW5n
dGgpOworICAgICAgICAgICAgaWYgKGRpZ2l0c19hZnRlcl9wb2ludCA+IDApIHsKKyAgICAgICAg
ICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKCcuJyk7CisgICAgICAgICAgICAg
ICAgcmVzdWx0X2J1aWxkZXItPkFkZFBhZGRpbmcoJzAnLCBkaWdpdHNfYWZ0ZXJfcG9pbnQpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gImRlY2ltYS5s
X3JlcDAwMCIKKyAgICAgICAgICAgIEFTU0VSVChkaWdpdHNfYWZ0ZXJfcG9pbnQgPiAwKTsKKyAg
ICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRTdWJzdHJpbmcoZGVjaW1hbF9kaWdpdHMsIGRl
Y2ltYWxfcG9pbnQpOworICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3Rlcign
LicpOworICAgICAgICAgICAgQVNTRVJUKGxlbmd0aCAtIGRlY2ltYWxfcG9pbnQgPD0gZGlnaXRz
X2FmdGVyX3BvaW50KTsKKyAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRTdWJzdHJpbmco
JmRlY2ltYWxfZGlnaXRzW2RlY2ltYWxfcG9pbnRdLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsZW5ndGggLSBkZWNpbWFsX3BvaW50KTsKKyAgICAgICAgICAgIGlu
dCByZW1haW5pbmdfZGlnaXRzID0gZGlnaXRzX2FmdGVyX3BvaW50IC0gKGxlbmd0aCAtIGRlY2lt
YWxfcG9pbnQpOworICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZFBhZGRpbmcoJzAnLCBy
ZW1haW5pbmdfZGlnaXRzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGlnaXRzX2FmdGVyX3Bv
aW50ID09IDApIHsKKyAgICAgICAgICAgIGlmICgoZmxhZ3NfICYgRU1JVF9UUkFJTElOR19ERUNJ
TUFMX1BPSU5UKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENo
YXJhY3RlcignLicpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChmbGFnc18gJiBF
TUlUX1RSQUlMSU5HX1pFUk9fQUZURVJfUE9JTlQpICE9IDApIHsKKyAgICAgICAgICAgICAgICBy
ZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKCcwJyk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgCisgICAgYm9vbCBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6
VG9TaG9ydGVzdChkb3VibGUgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyKiByZXN1bHRfYnVpbGRlcikgY29uc3QgeworICAg
ICAgICBpZiAoRG91YmxlKHZhbHVlKS5Jc1NwZWNpYWwoKSkgeworICAgICAgICAgICAgcmV0dXJu
IEhhbmRsZVNwZWNpYWxWYWx1ZXModmFsdWUsIHJlc3VsdF9idWlsZGVyKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgaW50IGRlY2ltYWxfcG9pbnQ7CisgICAgICAgIGJvb2wgc2lnbjsK
KyAgICAgICAgY29uc3QgaW50IGtEZWNpbWFsUmVwQ2FwYWNpdHkgPSBrQmFzZTEwTWF4aW1hbExl
bmd0aCArIDE7CisgICAgICAgIGNoYXIgZGVjaW1hbF9yZXBba0RlY2ltYWxSZXBDYXBhY2l0eV07
CisgICAgICAgIGludCBkZWNpbWFsX3JlcF9sZW5ndGg7CisgICAgICAgIAorICAgICAgICBEb3Vi
bGVUb0FzY2lpKHZhbHVlLCBTSE9SVEVTVCwgMCwgZGVjaW1hbF9yZXAsIGtEZWNpbWFsUmVwQ2Fw
YWNpdHksCisgICAgICAgICAgICAgICAgICAgICAgJnNpZ24sICZkZWNpbWFsX3JlcF9sZW5ndGgs
ICZkZWNpbWFsX3BvaW50KTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgdW5pcXVlX3plcm8gPSAo
ZmxhZ3NfICYgVU5JUVVFX1pFUk8pICE9IDA7CisgICAgICAgIGlmIChzaWduICYmICh2YWx1ZSAh
PSAwLjAgfHwgIXVuaXF1ZV96ZXJvKSkgeworICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFk
ZENoYXJhY3RlcignLScpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpbnQgZXhwb25l
bnQgPSBkZWNpbWFsX3BvaW50IC0gMTsKKyAgICAgICAgaWYgKChkZWNpbWFsX2luX3Nob3J0ZXN0
X2xvd18gPD0gZXhwb25lbnQpICYmCisgICAgICAgICAgICAoZXhwb25lbnQgPCBkZWNpbWFsX2lu
X3Nob3J0ZXN0X2hpZ2hfKSkgeworICAgICAgICAgICAgQ3JlYXRlRGVjaW1hbFJlcHJlc2VudGF0
aW9uKGRlY2ltYWxfcmVwLCBkZWNpbWFsX3JlcF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBNYXgoMCwgZGVjaW1hbF9yZXBfbGVuZ3RoIC0gZGVjaW1hbF9w
b2ludCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2J1
aWxkZXIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQ3JlYXRlRXhwb25lbnRpYWxS
ZXByZXNlbnRhdGlvbihkZWNpbWFsX3JlcCwgZGVjaW1hbF9yZXBfbGVuZ3RoLCBleHBvbmVudCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2J1aWxk
ZXIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAK
KyAgICBib29sIERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpUb0ZpeGVkKGRvdWJsZSB2YWx1ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXF1ZXN0ZWRf
ZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5n
QnVpbGRlciogcmVzdWx0X2J1aWxkZXIpIGNvbnN0IHsKKyAgICAgICAgQVNTRVJUKGtNYXhGaXhl
ZERpZ2l0c0JlZm9yZVBvaW50ID09IDYwKTsKKyAgICAgICAgY29uc3QgZG91YmxlIGtGaXJzdE5v
bkZpeGVkID0gMWU2MDsKKyAgICAgICAgCisgICAgICAgIGlmIChEb3VibGUodmFsdWUpLklzU3Bl
Y2lhbCgpKSB7CisgICAgICAgICAgICByZXR1cm4gSGFuZGxlU3BlY2lhbFZhbHVlcyh2YWx1ZSwg
cmVzdWx0X2J1aWxkZXIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAocmVxdWVz
dGVkX2RpZ2l0cyA+IGtNYXhGaXhlZERpZ2l0c0FmdGVyUG9pbnQpIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgaWYgKHZhbHVlID49IGtGaXJzdE5vbkZpeGVkIHx8IHZhbHVlIDw9IC1rRmlyc3ROb25G
aXhlZCkgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgLy8gRmluZCBhIHN1ZmZpY2ll
bnRseSBwcmVjaXNlIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2Ygbi4KKyAgICAgICAgaW50IGRl
Y2ltYWxfcG9pbnQ7CisgICAgICAgIGJvb2wgc2lnbjsKKyAgICAgICAgLy8gQWRkIHNwYWNlIGZv
ciB0aGUgJ1wwJyBieXRlLgorICAgICAgICBjb25zdCBpbnQga0RlY2ltYWxSZXBDYXBhY2l0eSA9
CisgICAgICAgIGtNYXhGaXhlZERpZ2l0c0JlZm9yZVBvaW50ICsga01heEZpeGVkRGlnaXRzQWZ0
ZXJQb2ludCArIDE7CisgICAgICAgIGNoYXIgZGVjaW1hbF9yZXBba0RlY2ltYWxSZXBDYXBhY2l0
eV07CisgICAgICAgIGludCBkZWNpbWFsX3JlcF9sZW5ndGg7CisgICAgICAgIERvdWJsZVRvQXNj
aWkodmFsdWUsIEZJWEVELCByZXF1ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAg
IGRlY2ltYWxfcmVwLCBrRGVjaW1hbFJlcENhcGFjaXR5LAorICAgICAgICAgICAgICAgICAgICAg
ICZzaWduLCAmZGVjaW1hbF9yZXBfbGVuZ3RoLCAmZGVjaW1hbF9wb2ludCk7CisgICAgICAgIAor
ICAgICAgICBib29sIHVuaXF1ZV96ZXJvID0gKChmbGFnc18gJiBVTklRVUVfWkVSTykgIT0gMCk7
CisgICAgICAgIGlmIChzaWduICYmICh2YWx1ZSAhPSAwLjAgfHwgIXVuaXF1ZV96ZXJvKSkgewor
ICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcignLScpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBDcmVhdGVEZWNpbWFsUmVwcmVzZW50YXRpb24oZGVjaW1hbF9y
ZXAsIGRlY2ltYWxfcmVwX2xlbmd0aCwgZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlcXVlc3RlZF9kaWdpdHMsIHJlc3VsdF9idWlsZGVyKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIAorICAgIGJvb2wgRG91YmxlVG9T
dHJpbmdDb252ZXJ0ZXI6OlRvRXhwb25lbnRpYWwoCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdmFsdWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIq
IHJlc3VsdF9idWlsZGVyKSBjb25zdCB7CisgICAgICAgIGlmIChEb3VibGUodmFsdWUpLklzU3Bl
Y2lhbCgpKSB7CisgICAgICAgICAgICByZXR1cm4gSGFuZGxlU3BlY2lhbFZhbHVlcyh2YWx1ZSwg
cmVzdWx0X2J1aWxkZXIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAocmVxdWVz
dGVkX2RpZ2l0cyA8IC0xKSByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChyZXF1ZXN0ZWRfZGln
aXRzID4ga01heEV4cG9uZW50aWFsRGlnaXRzKSByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAg
ICAgICBpbnQgZGVjaW1hbF9wb2ludDsKKyAgICAgICAgYm9vbCBzaWduOworICAgICAgICAvLyBB
ZGQgc3BhY2UgZm9yIGRpZ2l0IGJlZm9yZSB0aGUgZGVjaW1hbCBwb2ludCBhbmQgdGhlICdcMCcg
Y2hhcmFjdGVyLgorICAgICAgICBjb25zdCBpbnQga0RlY2ltYWxSZXBDYXBhY2l0eSA9IGtNYXhF
eHBvbmVudGlhbERpZ2l0cyArIDI7CisgICAgICAgIEFTU0VSVChrRGVjaW1hbFJlcENhcGFjaXR5
ID4ga0Jhc2UxME1heGltYWxMZW5ndGgpOworICAgICAgICBjaGFyIGRlY2ltYWxfcmVwW2tEZWNp
bWFsUmVwQ2FwYWNpdHldOworICAgICAgICBpbnQgZGVjaW1hbF9yZXBfbGVuZ3RoOworICAgICAg
ICAKKyAgICAgICAgaWYgKHJlcXVlc3RlZF9kaWdpdHMgPT0gLTEpIHsKKyAgICAgICAgICAgIERv
dWJsZVRvQXNjaWkodmFsdWUsIFNIT1JURVNULCAwLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWNpbWFsX3JlcCwga0RlY2ltYWxSZXBDYXBhY2l0eSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgJnNpZ24sICZkZWNpbWFsX3JlcF9sZW5ndGgsICZkZWNpbWFsX3BvaW50KTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIERvdWJsZVRvQXNjaWkodmFsdWUsIFBSRUNJU0lPTiwg
cmVxdWVzdGVkX2RpZ2l0cyArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2ltYWxf
cmVwLCBrRGVjaW1hbFJlcENhcGFjaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAmc2ln
biwgJmRlY2ltYWxfcmVwX2xlbmd0aCwgJmRlY2ltYWxfcG9pbnQpOworICAgICAgICAgICAgQVNT
RVJUKGRlY2ltYWxfcmVwX2xlbmd0aCA8PSByZXF1ZXN0ZWRfZGlnaXRzICsgMSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSBkZWNpbWFsX3JlcF9sZW5ndGg7IGkgPCBy
ZXF1ZXN0ZWRfZGlnaXRzICsgMTsgKytpKSB7CisgICAgICAgICAgICAgICAgZGVjaW1hbF9yZXBb
aV0gPSAnMCc7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWNpbWFsX3JlcF9sZW5ndGgg
PSByZXF1ZXN0ZWRfZGlnaXRzICsgMTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9v
bCB1bmlxdWVfemVybyA9ICgoZmxhZ3NfICYgVU5JUVVFX1pFUk8pICE9IDApOworICAgICAgICBp
ZiAoc2lnbiAmJiAodmFsdWUgIT0gMC4wIHx8ICF1bmlxdWVfemVybykpIHsKKyAgICAgICAgICAg
IHJlc3VsdF9idWlsZGVyLT5BZGRDaGFyYWN0ZXIoJy0nKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaW50IGV4cG9uZW50ID0gZGVjaW1hbF9wb2ludCAtIDE7CisgICAgICAgIENyZWF0
ZUV4cG9uZW50aWFsUmVwcmVzZW50YXRpb24oZGVjaW1hbF9yZXAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVjaW1hbF9yZXBfbGVuZ3RoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9uZW50LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIAorICAgIAorICAgIGJvb2wgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6
OlRvUHJlY2lzaW9uKGRvdWJsZSB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgcHJlY2lzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25z
dCB7CisgICAgICAgIGlmIChEb3VibGUodmFsdWUpLklzU3BlY2lhbCgpKSB7CisgICAgICAgICAg
ICByZXR1cm4gSGFuZGxlU3BlY2lhbFZhbHVlcyh2YWx1ZSwgcmVzdWx0X2J1aWxkZXIpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAocHJlY2lzaW9uIDwga01pblByZWNpc2lvbkRp
Z2l0cyB8fCBwcmVjaXNpb24gPiBrTWF4UHJlY2lzaW9uRGlnaXRzKSB7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZpbmQgYSBzdWZm
aWNpZW50bHkgcHJlY2lzZSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIG4uCisgICAgICAgIGlu
dCBkZWNpbWFsX3BvaW50OworICAgICAgICBib29sIHNpZ247CisgICAgICAgIC8vIEFkZCBvbmUg
Zm9yIHRoZSB0ZXJtaW5hdGluZyBudWxsIGNoYXJhY3Rlci4KKyAgICAgICAgY29uc3QgaW50IGtE
ZWNpbWFsUmVwQ2FwYWNpdHkgPSBrTWF4UHJlY2lzaW9uRGlnaXRzICsgMTsKKyAgICAgICAgY2hh
ciBkZWNpbWFsX3JlcFtrRGVjaW1hbFJlcENhcGFjaXR5XTsKKyAgICAgICAgaW50IGRlY2ltYWxf
cmVwX2xlbmd0aDsKKyAgICAgICAgCisgICAgICAgIERvdWJsZVRvQXNjaWkodmFsdWUsIFBSRUNJ
U0lPTiwgcHJlY2lzaW9uLAorICAgICAgICAgICAgICAgICAgICAgIGRlY2ltYWxfcmVwLCBrRGVj
aW1hbFJlcENhcGFjaXR5LAorICAgICAgICAgICAgICAgICAgICAgICZzaWduLCAmZGVjaW1hbF9y
ZXBfbGVuZ3RoLCAmZGVjaW1hbF9wb2ludCk7CisgICAgICAgIEFTU0VSVChkZWNpbWFsX3JlcF9s
ZW5ndGggPD0gcHJlY2lzaW9uKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgdW5pcXVlX3plcm8g
PSAoKGZsYWdzXyAmIFVOSVFVRV9aRVJPKSAhPSAwKTsKKyAgICAgICAgaWYgKHNpZ24gJiYgKHZh
bHVlICE9IDAuMCB8fCAhdW5pcXVlX3plcm8pKSB7CisgICAgICAgICAgICByZXN1bHRfYnVpbGRl
ci0+QWRkQ2hhcmFjdGVyKCctJyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFRo
ZSBleHBvbmVudCBpZiB3ZSBwcmludCB0aGUgbnVtYmVyIGFzIHgueHhleXl5LiBUaGF0IGlzIHdp
dGggdGhlCisgICAgICAgIC8vIGRlY2ltYWwgcG9pbnQgYWZ0ZXIgdGhlIGZpcnN0IGRpZ2l0Lgor
ICAgICAgICBpbnQgZXhwb25lbnQgPSBkZWNpbWFsX3BvaW50IC0gMTsKKyAgICAgICAgCisgICAg
ICAgIGludCBleHRyYV96ZXJvID0gKChmbGFnc18gJiBFTUlUX1RSQUlMSU5HX1pFUk9fQUZURVJf
UE9JTlQpICE9IDApID8gMSA6IDA7CisgICAgICAgIGlmICgoLWRlY2ltYWxfcG9pbnQgKyAxID4g
bWF4X2xlYWRpbmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGVfKSB8fAorICAgICAg
ICAgICAgKGRlY2ltYWxfcG9pbnQgLSBwcmVjaXNpb24gKyBleHRyYV96ZXJvID4KKyAgICAgICAg
ICAgICBtYXhfdHJhaWxpbmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGVfKSkgewor
ICAgICAgICAgICAgICAgIC8vIEZpbGwgYnVmZmVyIHRvIGNvbnRhaW4gJ3ByZWNpc2lvbicgZGln
aXRzLgorICAgICAgICAgICAgICAgIC8vIFVzdWFsbHkgdGhlIGJ1ZmZlciBpcyBhbHJlYWR5IGF0
IHRoZSBjb3JyZWN0IGxlbmd0aCwgYnV0ICdEb3VibGVUb0FzY2lpJworICAgICAgICAgICAgICAg
IC8vIGlzIGFsbG93ZWQgdG8gcmV0dXJuIGxlc3MgY2hhcmFjdGVycy4KKyAgICAgICAgICAgICAg
ICBmb3IgKGludCBpID0gZGVjaW1hbF9yZXBfbGVuZ3RoOyBpIDwgcHJlY2lzaW9uOyArK2kpIHsK
KyAgICAgICAgICAgICAgICAgICAgZGVjaW1hbF9yZXBbaV0gPSAnMCc7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENyZWF0ZUV4cG9uZW50aWFs
UmVwcmVzZW50YXRpb24oZGVjaW1hbF9yZXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBleHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgQ3JlYXRlRGVjaW1hbFJlcHJlc2VudGF0aW9uKGRlY2lt
YWxfcmVwLCBkZWNpbWFsX3JlcF9sZW5ndGgsIGRlY2ltYWxfcG9pbnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heCgwLCBwcmVjaXNpb24gLSBkZWNpbWFs
X3BvaW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0X2J1aWxkZXIpOworICAgICAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgCisgICAgCisgICAgc3RhdGljIEJpZ251bUR0b2FNb2RlIER0b2FUb0JpZ251bUR0b2FN
b2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb3Vi
bGVUb1N0cmluZ0NvbnZlcnRlcjo6RHRvYU1vZGUgZHRvYV9tb2RlKSB7CisgICAgICAgIHN3aXRj
aCAoZHRvYV9tb2RlKSB7CisgICAgICAgICAgICBjYXNlIERvdWJsZVRvU3RyaW5nQ29udmVydGVy
OjpTSE9SVEVTVDogIHJldHVybiBCSUdOVU1fRFRPQV9TSE9SVEVTVDsKKyAgICAgICAgICAgIGNh
c2UgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6OkZJWEVEOiAgICAgcmV0dXJuIEJJR05VTV9EVE9B
X0ZJWEVEOworICAgICAgICAgICAgY2FzZSBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6UFJFQ0lT
SU9OOiByZXR1cm4gQklHTlVNX0RUT0FfUFJFQ0lTSU9OOworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIHJldHVybiBC
SUdOVU1fRFRPQV9TSE9SVEVTVDsgIC8vIFRvIHNpbGVuY2UgY29tcGlsZXIuCisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6RG91
YmxlVG9Bc2NpaShkb3VibGUgdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIER0b2FNb2RlIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIGJ1ZmZlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBidWZmZXJfbGVuZ3Ro
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCog
c2lnbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCogbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50KiBwb2ludCkgeworICAgICAgICBWZWN0b3I8Y2hhcj4gdmVjdG9yKGJ1ZmZlciwgYnVm
ZmVyX2xlbmd0aCk7CisgICAgICAgIEFTU0VSVCghRG91YmxlKHYpLklzU3BlY2lhbCgpKTsKKyAg
ICAgICAgQVNTRVJUKG1vZGUgPT0gU0hPUlRFU1QgfHwgcmVxdWVzdGVkX2RpZ2l0cyA+PSAwKTsK
KyAgICAgICAgCisgICAgICAgIGlmIChEb3VibGUodikuU2lnbigpIDwgMCkgeworICAgICAgICAg
ICAgKnNpZ24gPSB0cnVlOworICAgICAgICAgICAgdiA9IC12OworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgKnNpZ24gPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aWYgKG1vZGUgPT0gUFJFQ0lTSU9OICYmIHJlcXVlc3RlZF9kaWdpdHMgPT0gMCkgeworICAgICAg
ICAgICAgdmVjdG9yWzBdID0gJ1wwJzsKKyAgICAgICAgICAgICpsZW5ndGggPSAwOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAodiA9PSAwKSB7
CisgICAgICAgICAgICB2ZWN0b3JbMF0gPSAnMCc7CisgICAgICAgICAgICB2ZWN0b3JbMV0gPSAn
XDAnOworICAgICAgICAgICAgKmxlbmd0aCA9IDE7CisgICAgICAgICAgICAqcG9pbnQgPSAxOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGZh
c3Rfd29ya2VkOworICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgU0hP
UlRFU1Q6CisgICAgICAgICAgICAgICAgZmFzdF93b3JrZWQgPSBGYXN0RHRvYSh2LCBGQVNUX0RU
T0FfU0hPUlRFU1QsIDAsIHZlY3RvciwgbGVuZ3RoLCBwb2ludCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIEZJWEVEOgorICAgICAgICAgICAgICAgIGZhc3Rfd29y
a2VkID0gRmFzdEZpeGVkRHRvYSh2LCByZXF1ZXN0ZWRfZGlnaXRzLCB2ZWN0b3IsIGxlbmd0aCwg
cG9pbnQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBQUkVDSVNJ
T046CisgICAgICAgICAgICAgICAgZmFzdF93b3JrZWQgPSBGYXN0RHRvYSh2LCBGQVNUX0RUT0Ff
UFJFQ0lTSU9OLCByZXF1ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmVjdG9yLCBsZW5ndGgsIHBvaW50KTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgICAgICAgICBmYXN0X3dvcmtlZCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAg
IGlmIChmYXN0X3dvcmtlZCkgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgLy8gSWYgdGhlIGZh
c3QgZHRvYSBkaWRuJ3Qgc3VjY2VlZCB1c2UgdGhlIHNsb3dlciBiaWdudW0gdmVyc2lvbi4KKyAg
ICAgICAgQmlnbnVtRHRvYU1vZGUgYmlnbnVtX21vZGUgPSBEdG9hVG9CaWdudW1EdG9hTW9kZSht
b2RlKTsKKyAgICAgICAgQmlnbnVtRHRvYSh2LCBiaWdudW1fbW9kZSwgcmVxdWVzdGVkX2RpZ2l0
cywgdmVjdG9yLCBsZW5ndGgsIHBvaW50KTsKKyAgICAgICAgdmVjdG9yWypsZW5ndGhdID0gJ1ww
JzsKKyAgICB9CisgICAgCisgICAgCisgICAgLy8gQ29uc3VtZXMgdGhlIGdpdmVuIHN1YnN0cmlu
ZyBmcm9tIHRoZSBpdGVyYXRvci4KKyAgICAvLyBSZXR1cm5zIGZhbHNlLCBpZiB0aGUgc3Vic3Ry
aW5nIGRvZXMgbm90IG1hdGNoLgorICAgIHN0YXRpYyBib29sIENvbnN1bWVTdWJTdHJpbmcoY29u
c3QgY2hhcioqIGN1cnJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiBlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
KiBzdWJzdHJpbmcpIHsKKyAgICAgICAgQVNTRVJUKCoqY3VycmVudCA9PSAqc3Vic3RyaW5nKTsK
KyAgICAgICAgZm9yIChzdWJzdHJpbmcrKzsgKnN1YnN0cmluZyAhPSAnXDAnOyBzdWJzdHJpbmcr
KykgeworICAgICAgICAgICAgKysqY3VycmVudDsKKyAgICAgICAgICAgIGlmICgqY3VycmVudCA9
PSBlbmQgfHwgKipjdXJyZW50ICE9ICpzdWJzdHJpbmcpIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICArKypjdXJyZW50OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgCisgICAgLy8gTWF4aW11bSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIGluIGRl
Y2ltYWwgcmVwcmVzZW50YXRpb24uCisgICAgLy8gVGhlIGxvbmdlc3QgcG9zc2libGUgZG91Ymxl
IGluIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gaXMKKyAgICAvLyAoMl41MyAtIDEpICogMiBeIC0x
MDc0IHRoYXQgaXMgKDIgXiA1MyAtIDEpICogNSBeIDEwNzQgLyAxMCBeIDEwNzQKKyAgICAvLyAo
NzY4IGRpZ2l0cykuIElmIHdlIHBhcnNlIGEgbnVtYmVyIHdob3NlIGZpcnN0IGRpZ2l0cyBhcmUg
ZXF1YWwgdG8gYQorICAgIC8vIG1lYW4gb2YgMiBhZGphY2VudCBkb3VibGVzICh0aGF0IGNvdWxk
IGhhdmUgdXAgdG8gNzY5IGRpZ2l0cykgdGhlIHJlc3VsdAorICAgIC8vIG11c3QgYmUgcm91bmRl
ZCB0byB0aGUgYmlnZ2VyIG9uZSB1bmxlc3MgdGhlIHRhaWwgY29uc2lzdHMgb2YgemVyb3MsIHNv
CisgICAgLy8gd2UgZG9uJ3QgbmVlZCB0byBwcmVzZXJ2ZSBhbGwgdGhlIGRpZ2l0cy4KKyAgICBj
b25zdCBpbnQga01heFNpZ25pZmljYW50RGlnaXRzID0gNzcyOworICAgIAorICAgIAorICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiBhIG5vbnNwYWNlIGZvdW5kIGFuZCBmYWxzZSBpZiB0aGUgZW5kIGhh
cyByZWFjaGVkLgorICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBBZHZhbmNlVG9Ob25zcGFjZShjb25z
dCBjaGFyKiogY3VycmVudCwgY29uc3QgY2hhciogZW5kKSB7CisgICAgICAgIHdoaWxlICgqY3Vy
cmVudCAhPSBlbmQpIHsKKyAgICAgICAgICAgIGlmICgqKmN1cnJlbnQgIT0gJyAnKSByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgICsrKmN1cnJlbnQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICAKKyAgICAKKyAgICBzdGF0aWMgYm9vbCBpc0RpZ2l0KGludCB4
LCBpbnQgcmFkaXgpIHsKKyAgICAgICAgcmV0dXJuICh4ID49ICcwJyAmJiB4IDw9ICc5JyAmJiB4
IDwgJzAnICsgcmFkaXgpCisgICAgICAgIHx8IChyYWRpeCA+IDEwICYmIHggPj0gJ2EnICYmIHgg
PCAnYScgKyByYWRpeCAtIDEwKQorICAgICAgICB8fCAocmFkaXggPiAxMCAmJiB4ID49ICdBJyAm
JiB4IDwgJ0EnICsgcmFkaXggLSAxMCk7CisgICAgfQorICAgIAorICAgIAorICAgIHN0YXRpYyBk
b3VibGUgU2lnbmVkWmVybyhib29sIHNpZ24pIHsKKyAgICAgICAgcmV0dXJuIHNpZ24gPyAtMC4w
IDogMC4wOworICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBQYXJzaW5nIGludGVnZXJzIHdpdGgg
cmFkaXggMiwgNCwgOCwgMTYsIDMyLiBBc3N1bWVzIGN1cnJlbnQgIT0gZW5kLgorICAgIHRlbXBs
YXRlIDxpbnQgcmFkaXhfbG9nXzI+CisgICAgc3RhdGljIGRvdWJsZSBSYWRpeFN0cmluZ1RvRG91
YmxlKGNvbnN0IGNoYXIqIGN1cnJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIGVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBzaWduLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGFsbG93X3RyYWlsaW5nX2p1bmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRvdWJsZSBqdW5rX3N0cmluZ192YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhcioqIHRyYWlsaW5nX3BvaW50ZXIpIHsKKyAgICAgICAg
QVNTRVJUKGN1cnJlbnQgIT0gZW5kKTsKKyAgICAgICAgCisgICAgICAgIC8vIFNraXAgbGVhZGlu
ZyAwcy4KKyAgICAgICAgd2hpbGUgKCpjdXJyZW50ID09ICcwJykgeworICAgICAgICAgICAgKytj
dXJyZW50OworICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gZW5kKSB7CisgICAgICAgICAgICAg
ICAgKnRyYWlsaW5nX3BvaW50ZXIgPSBlbmQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNpZ25l
ZFplcm8oc2lnbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGludDY0X3QgbnVtYmVyID0gMDsKKyAgICAgICAgaW50IGV4cG9uZW50ID0gMDsKKyAgICAgICAg
Y29uc3QgaW50IHJhZGl4ID0gKDEgPDwgcmFkaXhfbG9nXzIpOworICAgICAgICAKKyAgICAgICAg
ZG8geworICAgICAgICAgICAgaW50IGRpZ2l0OworICAgICAgICAgICAgaWYgKCpjdXJyZW50ID49
ICcwJyAmJiAqY3VycmVudCA8PSAnOScgJiYgKmN1cnJlbnQgPCAnMCcgKyByYWRpeCkgeworICAg
ICAgICAgICAgICAgIGRpZ2l0ID0gc3RhdGljX2Nhc3Q8Y2hhcj4oKmN1cnJlbnQpIC0gJzAnOwor
ICAgICAgICAgICAgfSBlbHNlIGlmIChyYWRpeCA+IDEwICYmICpjdXJyZW50ID49ICdhJyAmJiAq
Y3VycmVudCA8ICdhJyArIHJhZGl4IC0gMTApIHsKKyAgICAgICAgICAgICAgICBkaWdpdCA9IHN0
YXRpY19jYXN0PGNoYXI+KCpjdXJyZW50KSAtICdhJyArIDEwOworICAgICAgICAgICAgfSBlbHNl
IGlmIChyYWRpeCA+IDEwICYmICpjdXJyZW50ID49ICdBJyAmJiAqY3VycmVudCA8ICdBJyArIHJh
ZGl4IC0gMTApIHsKKyAgICAgICAgICAgICAgICBkaWdpdCA9IHN0YXRpY19jYXN0PGNoYXI+KCpj
dXJyZW50KSAtICdBJyArIDEwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBpZiAoYWxsb3dfdHJhaWxpbmdfanVuayB8fCAhQWR2YW5jZVRvTm9uc3BhY2UoJmN1cnJlbnQs
IGVuZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
bnVtYmVyID0gbnVtYmVyICogcmFkaXggKyBkaWdpdDsKKyAgICAgICAgICAgIGludCBvdmVyZmxv
dyA9IHN0YXRpY19jYXN0PGludD4obnVtYmVyID4+IDUzKTsKKyAgICAgICAgICAgIGlmIChvdmVy
ZmxvdyAhPSAwKSB7CisgICAgICAgICAgICAgICAgLy8gT3ZlcmZsb3cgb2NjdXJyZWQuIE5lZWQg
dG8gZGV0ZXJtaW5lIHdoaWNoIGRpcmVjdGlvbiB0byByb3VuZCB0aGUKKyAgICAgICAgICAgICAg
ICAvLyByZXN1bHQuCisgICAgICAgICAgICAgICAgaW50IG92ZXJmbG93X2JpdHNfY291bnQgPSAx
OworICAgICAgICAgICAgICAgIHdoaWxlIChvdmVyZmxvdyA+IDEpIHsKKyAgICAgICAgICAgICAg
ICAgICAgb3ZlcmZsb3dfYml0c19jb3VudCsrOworICAgICAgICAgICAgICAgICAgICBvdmVyZmxv
dyA+Pj0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgaW50IGRyb3BwZWRfYml0c19tYXNrID0gKCgxIDw8IG92ZXJmbG93X2JpdHNfY291bnQp
IC0gMSk7CisgICAgICAgICAgICAgICAgaW50IGRyb3BwZWRfYml0cyA9IHN0YXRpY19jYXN0PGlu
dD4obnVtYmVyKSAmIGRyb3BwZWRfYml0c19tYXNrOworICAgICAgICAgICAgICAgIG51bWJlciA+
Pj0gb3ZlcmZsb3dfYml0c19jb3VudDsKKyAgICAgICAgICAgICAgICBleHBvbmVudCA9IG92ZXJm
bG93X2JpdHNfY291bnQ7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYm9vbCB6
ZXJvX3RhaWwgPSB0cnVlOworICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAg
ICAgICAgICAgICAgICsrY3VycmVudDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQg
PT0gZW5kIHx8ICFpc0RpZ2l0KCpjdXJyZW50LCByYWRpeCkpIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICB6ZXJvX3RhaWwgPSB6ZXJvX3RhaWwgJiYgKmN1cnJlbnQgPT0gJzAnOworICAgICAg
ICAgICAgICAgICAgICBleHBvbmVudCArPSByYWRpeF9sb2dfMjsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFhbGxvd190cmFpbGluZ19q
dW5rICYmIEFkdmFuY2VUb05vbnNwYWNlKCZjdXJyZW50LCBlbmQpKSB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaW50IG1pZGRsZV92YWx1ZSA9ICgxIDw8IChv
dmVyZmxvd19iaXRzX2NvdW50IC0gMSkpOworICAgICAgICAgICAgICAgIGlmIChkcm9wcGVkX2Jp
dHMgPiBtaWRkbGVfdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyKys7ICAvLyBS
b3VuZGluZyB1cC4KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRyb3BwZWRfYml0cyA9PSBt
aWRkbGVfdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUm91bmRpbmcgdG8gZXZlbiB0
byBjb25zaXN0ZW5jeSB3aXRoIGRlY2ltYWxzOiBoYWxmLXdheSBjYXNlIHJvdW5kcworICAgICAg
ICAgICAgICAgICAgICAvLyB1cCBpZiBzaWduaWZpY2FudCBwYXJ0IGlzIG9kZCBhbmQgZG93biBv
dGhlcndpc2UuCisgICAgICAgICAgICAgICAgICAgIGlmICgobnVtYmVyICYgMSkgIT0gMCB8fCAh
emVyb190YWlsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIrKzsgIC8vIFJvdW5k
aW5nIHVwLgorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFJvdW5kaW5nIHVwIG1heSBjYXVzZSBvdmVy
Zmxvdy4KKyAgICAgICAgICAgICAgICBpZiAoKG51bWJlciAmICgoaW50NjRfdCkxIDw8IDUzKSkg
IT0gMCkgeworICAgICAgICAgICAgICAgICAgICBleHBvbmVudCsrOworICAgICAgICAgICAgICAg
ICAgICBudW1iZXIgPj49IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKytjdXJyZW50OworICAgICAgICB9IHdo
aWxlIChjdXJyZW50ICE9IGVuZCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQobnVtYmVyIDwg
KChpbnQ2NF90KTEgPDwgNTMpKTsKKyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludDY0X3Q+
KHN0YXRpY19jYXN0PGRvdWJsZT4obnVtYmVyKSkgPT0gbnVtYmVyKTsKKyAgICAgICAgCisgICAg
ICAgICp0cmFpbGluZ19wb2ludGVyID0gY3VycmVudDsKKyAgICAgICAgCisgICAgICAgIGlmIChl
eHBvbmVudCA9PSAwKSB7CisgICAgICAgICAgICBpZiAoc2lnbikgeworICAgICAgICAgICAgICAg
IGlmIChudW1iZXIgPT0gMCkgcmV0dXJuIC0wLjA7CisgICAgICAgICAgICAgICAgbnVtYmVyID0g
LW51bWJlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxk
b3VibGU+KG51bWJlcik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFTU0VSVChudW1i
ZXIgIT0gMCk7CisgICAgICAgIHJldHVybiBEb3VibGUoRGl5RnAobnVtYmVyLCBleHBvbmVudCkp
LnZhbHVlKCk7CisgICAgfQorICAgIAorICAgIAorICAgIGRvdWJsZSBTdHJpbmdUb0RvdWJsZUNv
bnZlcnRlcjo6U3RyaW5nVG9Eb3VibGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBpbnB1dCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGgsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHByb2Nlc3NlZF9j
aGFyYWN0ZXJzX2NvdW50KSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGN1cnJlbnQgPSBpbnB1dDsK
KyAgICAgICAgY29uc3QgY2hhciogZW5kID0gaW5wdXQgKyBsZW5ndGg7CisgICAgICAgIAorICAg
ICAgICAqcHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291bnQgPSAwOworICAgICAgICAKKyAgICAgICAg
Y29uc3QgYm9vbCBhbGxvd190cmFpbGluZ19qdW5rID0gKGZsYWdzXyAmIEFMTE9XX1RSQUlMSU5H
X0pVTkspICE9IDA7CisgICAgICAgIGNvbnN0IGJvb2wgYWxsb3dfbGVhZGluZ19zcGFjZXMgPSAo
ZmxhZ3NfICYgQUxMT1dfTEVBRElOR19TUEFDRVMpICE9IDA7CisgICAgICAgIGNvbnN0IGJvb2wg
YWxsb3dfdHJhaWxpbmdfc3BhY2VzID0gKGZsYWdzXyAmIEFMTE9XX1RSQUlMSU5HX1NQQUNFUykg
IT0gMDsKKyAgICAgICAgY29uc3QgYm9vbCBhbGxvd19zcGFjZXNfYWZ0ZXJfc2lnbiA9IChmbGFn
c18gJiBBTExPV19TUEFDRVNfQUZURVJfU0lHTikgIT0gMDsKKyAgICAgICAgCisgICAgICAgIC8v
IFRvIG1ha2Ugc3VyZSB0aGF0IGl0ZXJhdG9yIGRlcmVmZXJlbmNpbmcgaXMgdmFsaWQgdGhlIGZv
bGxvd2luZworICAgICAgICAvLyBjb252ZW50aW9uIGlzIHVzZWQ6CisgICAgICAgIC8vIDEuIEVh
Y2ggJysrY3VycmVudCcgc3RhdGVtZW50IGlzIGZvbGxvd2VkIGJ5IGNoZWNrIGZvciBlcXVhbGl0
eSB0byAnZW5kJy4KKyAgICAgICAgLy8gMi4gSWYgQWR2YW5jZVRvTm9uc3BhY2UgcmV0dXJuZWQg
ZmFsc2UgdGhlbiBjdXJyZW50ID09IGVuZC4KKyAgICAgICAgLy8gMy4gSWYgJ2N1cnJlbnQnIGJl
Y29tZXMgZXF1YWwgdG8gJ2VuZCcgdGhlIGZ1bmN0aW9uIHJldHVybnMgb3IgZ29lcyB0bworICAg
ICAgICAvLyAncGFyc2luZ19kb25lJy4KKyAgICAgICAgLy8gNC4gJ2N1cnJlbnQnIGlzIG5vdCBk
ZXJlZmVyZW5jZWQgYWZ0ZXIgdGhlICdwYXJzaW5nX2RvbmUnIGxhYmVsLgorICAgICAgICAvLyA1
LiBDb2RlIGJlZm9yZSAncGFyc2luZ19kb25lJyBtYXkgcmVseSBvbiAnY3VycmVudCAhPSBlbmQn
LgorICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQpIHJldHVybiBlbXB0eV9zdHJpbmdfdmFsdWVf
OworICAgICAgICAKKyAgICAgICAgaWYgKGFsbG93X2xlYWRpbmdfc3BhY2VzIHx8IGFsbG93X3Ry
YWlsaW5nX3NwYWNlcykgeworICAgICAgICAgICAgaWYgKCFBZHZhbmNlVG9Ob25zcGFjZSgmY3Vy
cmVudCwgZW5kKSkgeworICAgICAgICAgICAgICAgICpwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3Vu
dCA9IGN1cnJlbnQgLSBpbnB1dDsKKyAgICAgICAgICAgICAgICByZXR1cm4gZW1wdHlfc3RyaW5n
X3ZhbHVlXzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghYWxsb3dfbGVhZGluZ19z
cGFjZXMgJiYgKGlucHV0ICE9IGN1cnJlbnQpKSB7CisgICAgICAgICAgICAgICAgLy8gTm8gbGVh
ZGluZyBzcGFjZXMgYWxsb3dlZCwgYnV0IEFkdmFuY2VUb05vbnNwYWNlIG1vdmVkIGZvcndhcmQu
CisgICAgICAgICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gVGhlIGxvbmdlc3QgZm9ybSBvZiBz
aW1wbGlmaWVkIG51bWJlciBpczogIi08c2lnbmlmaWNhbnQgZGlnaXRzPi4xZVhYWFwwIi4KKyAg
ICAgICAgY29uc3QgaW50IGtCdWZmZXJTaXplID0ga01heFNpZ25pZmljYW50RGlnaXRzICsgMTA7
CisgICAgICAgIGNoYXIgYnVmZmVyW2tCdWZmZXJTaXplXTsgIC8vIE5PTElOVDogc2l6ZSBpcyBr
bm93biBhdCBjb21waWxlIHRpbWUuCisgICAgICAgIGludCBidWZmZXJfcG9zID0gMDsKKyAgICAg
ICAgCisgICAgICAgIC8vIEV4cG9uZW50IHdpbGwgYmUgYWRqdXN0ZWQgaWYgaW5zaWduaWZpY2Fu
dCBkaWdpdHMgb2YgdGhlIGludGVnZXIgcGFydAorICAgICAgICAvLyBvciBpbnNpZ25pZmljYW50
IGxlYWRpbmcgemVyb3Mgb2YgdGhlIGZyYWN0aW9uYWwgcGFydCBhcmUgZHJvcHBlZC4KKyAgICAg
ICAgaW50IGV4cG9uZW50ID0gMDsKKyAgICAgICAgaW50IHNpZ25pZmljYW50X2RpZ2l0cyA9IDA7
CisgICAgICAgIGludCBpbnNpZ25pZmljYW50X2RpZ2l0cyA9IDA7CisgICAgICAgIGJvb2wgbm9u
emVyb19kaWdpdF9kcm9wcGVkID0gZmFsc2U7CisgICAgICAgIGJvb2wgZnJhY3Rpb25hbF9wYXJ0
ID0gZmFsc2U7CisgICAgICAgIAorICAgICAgICBib29sIHNpZ24gPSBmYWxzZTsKKyAgICAgICAg
CisgICAgICAgIGlmICgqY3VycmVudCA9PSAnKycgfHwgKmN1cnJlbnQgPT0gJy0nKSB7CisgICAg
ICAgICAgICBzaWduID0gKCpjdXJyZW50ID09ICctJyk7CisgICAgICAgICAgICArK2N1cnJlbnQ7
CisgICAgICAgICAgICBjb25zdCBjaGFyKiBuZXh0X25vbl9zcGFjZSA9IGN1cnJlbnQ7CisgICAg
ICAgICAgICAvLyBTa2lwIGZvbGxvd2luZyBzcGFjZXMgKGlmIGFsbG93ZWQpLgorICAgICAgICAg
ICAgaWYgKCFBZHZhbmNlVG9Ob25zcGFjZSgmbmV4dF9ub25fc3BhY2UsIGVuZCkpIHJldHVybiBq
dW5rX3N0cmluZ192YWx1ZV87CisgICAgICAgICAgICBpZiAoIWFsbG93X3NwYWNlc19hZnRlcl9z
aWduICYmIChjdXJyZW50ICE9IG5leHRfbm9uX3NwYWNlKSkgeworICAgICAgICAgICAgICAgIHJl
dHVybiBqdW5rX3N0cmluZ192YWx1ZV87CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjdXJy
ZW50ID0gbmV4dF9ub25fc3BhY2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChp
bmZpbml0eV9zeW1ib2xfICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGlmICgqY3VycmVudCA9PSBp
bmZpbml0eV9zeW1ib2xfWzBdKSB7CisgICAgICAgICAgICAgICAgaWYgKCFDb25zdW1lU3ViU3Ry
aW5nKCZjdXJyZW50LCBlbmQsIGluZmluaXR5X3N5bWJvbF8pKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghKGFsbG93X3RyYWlsaW5nX3NwYWNlcyB8
fCBhbGxvd190cmFpbGluZ19qdW5rKSAmJiAoY3VycmVudCAhPSBlbmQpKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGlmICghYWxsb3dfdHJhaWxpbmdfanVuayAmJiBBZHZhbmNlVG9Ob25z
cGFjZSgmY3VycmVudCwgZW5kKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4ganVua19z
dHJpbmdfdmFsdWVfOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoYnVmZmVyX3BvcyA9PSAwKTsKKyAgICAgICAgICAgICAgICAqcHJv
Y2Vzc2VkX2NoYXJhY3RlcnNfY291bnQgPSBjdXJyZW50IC0gaW5wdXQ7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHNpZ24gPyAtRG91YmxlOjpJbmZpbml0eSgpIDogRG91YmxlOjpJbmZpbml0eSgp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobmFuX3N5
bWJvbF8gIT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKCpjdXJyZW50ID09IG5hbl9zeW1ib2xf
WzBdKSB7CisgICAgICAgICAgICAgICAgaWYgKCFDb25zdW1lU3ViU3RyaW5nKCZjdXJyZW50LCBl
bmQsIG5hbl9zeW1ib2xfKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJp
bmdfdmFsdWVfOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBpZiAoIShhbGxvd190cmFpbGluZ19zcGFjZXMgfHwgYWxsb3dfdHJhaWxpbmdfanVu
aykgJiYgKGN1cnJlbnQgIT0gZW5kKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4ganVu
a19zdHJpbmdfdmFsdWVfOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
IWFsbG93X3RyYWlsaW5nX2p1bmsgJiYgQWR2YW5jZVRvTm9uc3BhY2UoJmN1cnJlbnQsIGVuZCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQVNTRVJUKGJ1
ZmZlcl9wb3MgPT0gMCk7CisgICAgICAgICAgICAgICAgKnByb2Nlc3NlZF9jaGFyYWN0ZXJzX2Nv
dW50ID0gY3VycmVudCAtIGlucHV0OworICAgICAgICAgICAgICAgIHJldHVybiBzaWduID8gLURv
dWJsZTo6TmFOKCkgOiBEb3VibGU6Ok5hTigpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBib29sIGxlYWRpbmdfemVybyA9IGZhbHNlOworICAgICAgICBpZiAo
KmN1cnJlbnQgPT0gJzAnKSB7CisgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgICAgICBp
ZiAoY3VycmVudCA9PSBlbmQpIHsKKyAgICAgICAgICAgICAgICAqcHJvY2Vzc2VkX2NoYXJhY3Rl
cnNfY291bnQgPSBjdXJyZW50IC0gaW5wdXQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNpZ25l
ZFplcm8oc2lnbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGxl
YWRpbmdfemVybyA9IHRydWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEl0IGNvdWxk
IGJlIGhleGFkZWNpbWFsIHZhbHVlLgorICAgICAgICAgICAgaWYgKChmbGFnc18gJiBBTExPV19I
RVgpICYmICgqY3VycmVudCA9PSAneCcgfHwgKmN1cnJlbnQgPT0gJ1gnKSkgeworICAgICAgICAg
ICAgICAgICsrY3VycmVudDsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQgfHwg
IWlzRGlnaXQoKmN1cnJlbnQsIDE2KSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4ganVu
a19zdHJpbmdfdmFsdWVfOyAgLy8gIjB4Ii4KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgY29uc3QgY2hhciogdGFpbF9wb2ludGVyID0gTlVMTDsK
KyAgICAgICAgICAgICAgICBkb3VibGUgcmVzdWx0ID0gUmFkaXhTdHJpbmdUb0RvdWJsZTw0Pihj
dXJyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaWduLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFsbG93X3RyYWlsaW5nX2p1bmssCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVua19zdHJpbmdfdmFsdWVfLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0
YWlsX3BvaW50ZXIpOworICAgICAgICAgICAgICAgIGlmICh0YWlsX3BvaW50ZXIgIT0gTlVMTCkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoYWxsb3dfdHJhaWxpbmdfc3BhY2VzKSBBZHZhbmNl
VG9Ob25zcGFjZSgmdGFpbF9wb2ludGVyLCBlbmQpOworICAgICAgICAgICAgICAgICAgICAqcHJv
Y2Vzc2VkX2NoYXJhY3RlcnNfY291bnQgPSB0YWlsX3BvaW50ZXIgLSBpbnB1dDsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSWdub3JlIGxlYWRpbmcgemVyb3MgaW4gdGhl
IGludGVnZXIgcGFydC4KKyAgICAgICAgICAgIHdoaWxlICgqY3VycmVudCA9PSAnMCcpIHsKKyAg
ICAgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0g
ZW5kKSB7CisgICAgICAgICAgICAgICAgICAgICpwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCA9
IGN1cnJlbnQgLSBpbnB1dDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNpZ25lZFplcm8o
c2lnbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBib29sIG9jdGFsID0gbGVhZGluZ196ZXJvICYmIChmbGFnc18gJiBBTExP
V19PQ1RBTFMpICE9IDA7CisgICAgICAgIAorICAgICAgICAvLyBDb3B5IHNpZ25pZmljYW50IGRp
Z2l0cyBvZiB0aGUgaW50ZWdlciBwYXJ0IChpZiBhbnkpIHRvIHRoZSBidWZmZXIuCisgICAgICAg
IHdoaWxlICgqY3VycmVudCA+PSAnMCcgJiYgKmN1cnJlbnQgPD0gJzknKSB7CisgICAgICAgICAg
ICBpZiAoc2lnbmlmaWNhbnRfZGlnaXRzIDwga01heFNpZ25pZmljYW50RGlnaXRzKSB7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKGJ1ZmZlcl9wb3MgPCBrQnVmZmVyU2l6ZSk7CisgICAgICAgICAg
ICAgICAgYnVmZmVyW2J1ZmZlcl9wb3MrK10gPSBzdGF0aWNfY2FzdDxjaGFyPigqY3VycmVudCk7
CisgICAgICAgICAgICAgICAgc2lnbmlmaWNhbnRfZGlnaXRzKys7CisgICAgICAgICAgICAgICAg
Ly8gV2lsbCBsYXRlciBjaGVjayBpZiBpdCdzIGFuIG9jdGFsIGluIHRoZSBidWZmZXIuCisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGluc2lnbmlmaWNhbnRfZGlnaXRzKys7
ICAvLyBNb3ZlIHRoZSBkaWdpdCBpbnRvIHRoZSBleHBvbmVudGlhbCBwYXJ0LgorICAgICAgICAg
ICAgICAgIG5vbnplcm9fZGlnaXRfZHJvcHBlZCA9IG5vbnplcm9fZGlnaXRfZHJvcHBlZCB8fCAq
Y3VycmVudCAhPSAnMCc7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvY3RhbCA9IG9jdGFs
ICYmICpjdXJyZW50IDwgJzgnOworICAgICAgICAgICAgKytjdXJyZW50OworICAgICAgICAgICAg
aWYgKGN1cnJlbnQgPT0gZW5kKSBnb3RvIHBhcnNpbmdfZG9uZTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgaWYgKHNpZ25pZmljYW50X2RpZ2l0cyA9PSAwKSB7CisgICAgICAgICAgICBv
Y3RhbCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoKmN1cnJlbnQg
PT0gJy4nKSB7CisgICAgICAgICAgICBpZiAob2N0YWwgJiYgIWFsbG93X3RyYWlsaW5nX2p1bmsp
IHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87CisgICAgICAgICAgICBpZiAob2N0YWwpIGdvdG8g
cGFyc2luZ19kb25lOworICAgICAgICAgICAgCisgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAg
ICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2lnbmlm
aWNhbnRfZGlnaXRzID09IDAgJiYgIWxlYWRpbmdfemVybykgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIGdvdG8gcGFyc2luZ19kb25lOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHNpZ25pZmljYW50
X2RpZ2l0cyA9PSAwKSB7CisgICAgICAgICAgICAgICAgLy8gb2N0YWwgPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAvLyBJbnRlZ2VyIHBhcnQgY29uc2lzdHMgb2YgMCBvciBpcyBhYnNlbnQuIFNp
Z25pZmljYW50IGRpZ2l0cyBzdGFydCBhZnRlcgorICAgICAgICAgICAgICAgIC8vIGxlYWRpbmcg
emVyb3MgKGlmIGFueSkuCisgICAgICAgICAgICAgICAgd2hpbGUgKCpjdXJyZW50ID09ICcwJykg
eworICAgICAgICAgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgICAgICAgICAgICAgIGlm
IChjdXJyZW50ID09IGVuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgKnByb2Nlc3NlZF9j
aGFyYWN0ZXJzX2NvdW50ID0gY3VycmVudCAtIGlucHV0OworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFNpZ25lZFplcm8oc2lnbik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgZXhwb25lbnQtLTsgIC8vIE1vdmUgdGhpcyAwIGludG8gdGhlIGV4cG9u
ZW50LgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgLy8gV2UgZG9uJ3QgZW1pdCBhICcuJywgYnV0IGFkanVzdCB0aGUgZXhwb25lbnQg
aW5zdGVhZC4KKyAgICAgICAgICAgIGZyYWN0aW9uYWxfcGFydCA9IHRydWU7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgZnJhY3Rpb25hbCBwYXJ0LgorICAgICAgICAg
ICAgd2hpbGUgKCpjdXJyZW50ID49ICcwJyAmJiAqY3VycmVudCA8PSAnOScpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoc2lnbmlmaWNhbnRfZGlnaXRzIDwga01heFNpZ25pZmljYW50RGlnaXRzKSB7
CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChidWZmZXJfcG9zIDwga0J1ZmZlclNpemUpOwor
ICAgICAgICAgICAgICAgICAgICBidWZmZXJbYnVmZmVyX3BvcysrXSA9IHN0YXRpY19jYXN0PGNo
YXI+KCpjdXJyZW50KTsKKyAgICAgICAgICAgICAgICAgICAgc2lnbmlmaWNhbnRfZGlnaXRzKys7
CisgICAgICAgICAgICAgICAgICAgIGV4cG9uZW50LS07CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlIGluc2lnbmlmaWNhbnQgZGlnaXRzIGlu
IHRoZSBmcmFjdGlvbmFsIHBhcnQuCisgICAgICAgICAgICAgICAgICAgIG5vbnplcm9fZGlnaXRf
ZHJvcHBlZCA9IG5vbnplcm9fZGlnaXRfZHJvcHBlZCB8fCAqY3VycmVudCAhPSAnMCc7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICsrY3VycmVudDsKKyAgICAgICAgICAgICAg
ICBpZiAoY3VycmVudCA9PSBlbmQpIGdvdG8gcGFyc2luZ19kb25lOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWxlYWRpbmdfemVybyAmJiBleHBvbmVu
dCA9PSAwICYmIHNpZ25pZmljYW50X2RpZ2l0cyA9PSAwKSB7CisgICAgICAgICAgICAvLyBJZiBs
ZWFkaW5nX3plcm9zIGlzIHRydWUgdGhlbiB0aGUgc3RyaW5nIGNvbnRhaW5zIHplcm9zLgorICAg
ICAgICAgICAgLy8gSWYgZXhwb25lbnQgPCAwIHRoZW4gc3RyaW5nIHdhcyBbKy1dXC4wKi4uLgor
ICAgICAgICAgICAgLy8gSWYgc2lnbmlmaWNhbnRfZGlnaXRzICE9IDAgdGhlIHN0cmluZyBpcyBu
b3QgZXF1YWwgdG8gMC4KKyAgICAgICAgICAgIC8vIE90aGVyd2lzZSB0aGVyZSBhcmUgbm8gZGln
aXRzIGluIHRoZSBzdHJpbmcuCisgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVf
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBQYXJzZSBleHBvbmVudGlhbCBwYXJ0
LgorICAgICAgICBpZiAoKmN1cnJlbnQgPT0gJ2UnIHx8ICpjdXJyZW50ID09ICdFJykgeworICAg
ICAgICAgICAgaWYgKG9jdGFsICYmICFhbGxvd190cmFpbGluZ19qdW5rKSByZXR1cm4ganVua19z
dHJpbmdfdmFsdWVfOworICAgICAgICAgICAgaWYgKG9jdGFsKSBnb3RvIHBhcnNpbmdfZG9uZTsK
KyAgICAgICAgICAgICsrY3VycmVudDsKKyAgICAgICAgICAgIGlmIChjdXJyZW50ID09IGVuZCkg
eworICAgICAgICAgICAgICAgIGlmIChhbGxvd190cmFpbGluZ19qdW5rKSB7CisgICAgICAgICAg
ICAgICAgICAgIGdvdG8gcGFyc2luZ19kb25lOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgY2hhciBzaWduID0gJysnOworICAg
ICAgICAgICAgaWYgKCpjdXJyZW50ID09ICcrJyB8fCAqY3VycmVudCA9PSAnLScpIHsKKyAgICAg
ICAgICAgICAgICBzaWduID0gc3RhdGljX2Nhc3Q8Y2hhcj4oKmN1cnJlbnQpOworICAgICAgICAg
ICAgICAgICsrY3VycmVudDsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGFsbG93X3RyYWlsaW5nX2p1bmspIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGdvdG8gcGFyc2luZ19kb25lOworICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVl
XzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gZW5kIHx8ICpjdXJy
ZW50IDwgJzAnIHx8ICpjdXJyZW50ID4gJzknKSB7CisgICAgICAgICAgICAgICAgaWYgKGFsbG93
X3RyYWlsaW5nX2p1bmspIHsKKyAgICAgICAgICAgICAgICAgICAgZ290byBwYXJzaW5nX2RvbmU7
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGp1
bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSBJTlRfTUFYIC8g
MjsKKyAgICAgICAgICAgIEFTU0VSVCgtbWF4X2V4cG9uZW50IC8gMiA8PSBleHBvbmVudCAmJiBl
eHBvbmVudCA8PSBtYXhfZXhwb25lbnQgLyAyKTsKKyAgICAgICAgICAgIGludCBudW0gPSAwOwor
ICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIC8vIENoZWNrIG92ZXJmbG93LgorICAg
ICAgICAgICAgICAgIGludCBkaWdpdCA9ICpjdXJyZW50IC0gJzAnOworICAgICAgICAgICAgICAg
IGlmIChudW0gPj0gbWF4X2V4cG9uZW50IC8gMTAKKyAgICAgICAgICAgICAgICAgICAgJiYgIShu
dW0gPT0gbWF4X2V4cG9uZW50IC8gMTAgJiYgZGlnaXQgPD0gbWF4X2V4cG9uZW50ICUgMTApKSB7
CisgICAgICAgICAgICAgICAgICAgIG51bSA9IG1heF9leHBvbmVudDsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBudW0gPSBudW0gKiAxMCArIGRpZ2l0Owor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgICAg
ICB9IHdoaWxlIChjdXJyZW50ICE9IGVuZCAmJiAqY3VycmVudCA+PSAnMCcgJiYgKmN1cnJlbnQg
PD0gJzknKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZXhwb25lbnQgKz0gKHNpZ24gPT0g
Jy0nID8gLW51bSA6IG51bSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghKGFs
bG93X3RyYWlsaW5nX3NwYWNlcyB8fCBhbGxvd190cmFpbGluZ19qdW5rKSAmJiAoY3VycmVudCAh
PSBlbmQpKSB7CisgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAg
ICB9CisgICAgICAgIGlmICghYWxsb3dfdHJhaWxpbmdfanVuayAmJiBBZHZhbmNlVG9Ob25zcGFj
ZSgmY3VycmVudCwgZW5kKSkgeworICAgICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVl
XzsKKyAgICAgICAgfQorICAgICAgICBpZiAoYWxsb3dfdHJhaWxpbmdfc3BhY2VzKSB7CisgICAg
ICAgICAgICBBZHZhbmNlVG9Ob25zcGFjZSgmY3VycmVudCwgZW5kKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICBwYXJzaW5nX2RvbmU6CisgICAgICAgIGV4cG9uZW50ICs9IGluc2lnbmlmaWNh
bnRfZGlnaXRzOworICAgICAgICAKKyAgICAgICAgaWYgKG9jdGFsKSB7CisgICAgICAgICAgICBk
b3VibGUgcmVzdWx0OworICAgICAgICAgICAgY29uc3QgY2hhciogdGFpbF9wb2ludGVyID0gTlVM
TDsKKyAgICAgICAgICAgIHJlc3VsdCA9IFJhZGl4U3RyaW5nVG9Eb3VibGU8Mz4oYnVmZmVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKyBidWZm
ZXJfcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWdu
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd190cmFp
bGluZ19qdW5rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
dW5rX3N0cmluZ192YWx1ZV8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZ0YWlsX3BvaW50ZXIpOworICAgICAgICAgICAgQVNTRVJUKHRhaWxfcG9pbnRlciAh
PSBOVUxMKTsKKyAgICAgICAgICAgICpwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCA9IGN1cnJl
bnQgLSBpbnB1dDsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGlmIChub256ZXJvX2RpZ2l0X2Ryb3BwZWQpIHsKKyAgICAgICAgICAgIGJ1
ZmZlcltidWZmZXJfcG9zKytdID0gJzEnOworICAgICAgICAgICAgZXhwb25lbnQtLTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJUKGJ1ZmZlcl9wb3MgPCBrQnVmZmVyU2l6ZSk7
CisgICAgICAgIGJ1ZmZlcltidWZmZXJfcG9zXSA9ICdcMCc7CisgICAgICAgIAorICAgICAgICBk
b3VibGUgY29udmVydGVkID0gU3RydG9kKFZlY3Rvcjxjb25zdCBjaGFyPihidWZmZXIsIGJ1ZmZl
cl9wb3MpLCBleHBvbmVudCk7CisgICAgICAgICpwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCA9
IGN1cnJlbnQgLSBpbnB1dDsKKyAgICAgICAgcmV0dXJuIHNpZ24/IC1jb252ZXJ0ZWQ6IGNvbnZl
cnRlZDsKKyAgICB9CisgICAgCit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kb3VibGUtY29udmVyc2lv
bi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNDVjMzBkNzkwYzZmNGQ2ODNmOTYzMjdiN2I1MTdmOWU2ZmIwNTBlNwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kb3VibGUtY29u
dmVyc2lvbi5oCkBAIC0wLDAgKzEsNDk4IEBACisvLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJv
amVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8v
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
KyNpZm5kZWYgRE9VQkxFX0NPTlZFUlNJT05fRE9VQkxFX0NPTlZFUlNJT05fSF8KKyNkZWZpbmUg
RE9VQkxFX0NPTlZFUlNJT05fRE9VQkxFX0NPTlZFUlNJT05fSF8KKworI2luY2x1ZGUgInV0aWxz
LmgiCisKK25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgY2xhc3MgRG91
YmxlVG9TdHJpbmdDb252ZXJ0ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgLy8gV2hlbiBjYWxs
aW5nIFRvRml4ZWQgd2l0aCBhIGRvdWJsZSA+IDEwXmtNYXhGaXhlZERpZ2l0c0JlZm9yZVBvaW50
CisgICAgICAgIC8vIG9yIGEgcmVxdWVzdGVkX2RpZ2l0cyBwYXJhbWV0ZXIgPiBrTWF4Rml4ZWRE
aWdpdHNBZnRlclBvaW50IHRoZW4gdGhlCisgICAgICAgIC8vIGZ1bmN0aW9uIHJldHVybnMgZmFs
c2UuCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQga01heEZpeGVkRGlnaXRzQmVmb3JlUG9pbnQg
PSA2MDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBrTWF4Rml4ZWREaWdpdHNBZnRlclBvaW50
ID0gNjA7CisgICAgICAgIAorICAgICAgICAvLyBXaGVuIGNhbGxpbmcgVG9FeHBvbmVudGlhbCB3
aXRoIGEgcmVxdWVzdGVkX2RpZ2l0cworICAgICAgICAvLyBwYXJhbWV0ZXIgPiBrTWF4RXhwb25l
bnRpYWxEaWdpdHMgdGhlbiB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZS4KKyAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBrTWF4RXhwb25lbnRpYWxEaWdpdHMgPSAxMjA7CisgICAgICAgIAorICAg
ICAgICAvLyBXaGVuIGNhbGxpbmcgVG9QcmVjaXNpb24gd2l0aCBhIHJlcXVlc3RlZF9kaWdpdHMK
KyAgICAgICAgLy8gcGFyYW1ldGVyIDwga01pblByZWNpc2lvbkRpZ2l0cyBvciByZXF1ZXN0ZWRf
ZGlnaXRzID4ga01heFByZWNpc2lvbkRpZ2l0cworICAgICAgICAvLyB0aGVuIHRoZSBmdW5jdGlv
biByZXR1cm5zIGZhbHNlLgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtNaW5QcmVjaXNpb25E
aWdpdHMgPSAxOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtNYXhQcmVjaXNpb25EaWdpdHMg
PSAxMjA7CisgICAgICAgIAorICAgICAgICBlbnVtIEZsYWdzIHsKKyAgICAgICAgICAgIE5PX0ZM
QUdTID0gMCwKKyAgICAgICAgICAgIEVNSVRfUE9TSVRJVkVfRVhQT05FTlRfU0lHTiA9IDEsCisg
ICAgICAgICAgICBFTUlUX1RSQUlMSU5HX0RFQ0lNQUxfUE9JTlQgPSAyLAorICAgICAgICAgICAg
RU1JVF9UUkFJTElOR19aRVJPX0FGVEVSX1BPSU5UID0gNCwKKyAgICAgICAgICAgIFVOSVFVRV9a
RVJPID0gOAorICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgLy8gRmxhZ3Mgc2hvdWxkIGJl
IGEgYml0LW9yIGNvbWJpbmF0aW9uIG9mIHRoZSBwb3NzaWJsZSBGbGFncy1lbnVtLgorICAgICAg
ICAvLyAgLSBOT19GTEFHUzogbm8gc3BlY2lhbCBmbGFncy4KKyAgICAgICAgLy8gIC0gRU1JVF9Q
T1NJVElWRV9FWFBPTkVOVF9TSUdOOiB3aGVuIHRoZSBudW1iZXIgaXMgY29udmVydGVkIGludG8g
ZXhwb25lbnQKKyAgICAgICAgLy8gICAgZm9ybSwgZW1pdHMgYSAnKycgZm9yIHBvc2l0aXZlIGV4
cG9uZW50cy4gRXhhbXBsZTogMS4yZSsyLgorICAgICAgICAvLyAgLSBFTUlUX1RSQUlMSU5HX0RF
Q0lNQUxfUE9JTlQ6IHdoZW4gdGhlIGlucHV0IG51bWJlciBpcyBhbiBpbnRlZ2VyIGFuZCBpcwor
ICAgICAgICAvLyAgICBjb252ZXJ0ZWQgaW50byBkZWNpbWFsIGZvcm1hdCB0aGVuIGEgdHJhaWxp
bmcgZGVjaW1hbCBwb2ludCBpcyBhcHBlbmRlZC4KKyAgICAgICAgLy8gICAgRXhhbXBsZTogMjM0
NS4wIGlzIGNvbnZlcnRlZCB0byAiMjM0NS4iLgorICAgICAgICAvLyAgLSBFTUlUX1RSQUlMSU5H
X1pFUk9fQUZURVJfUE9JTlQ6IGluIGFkZGl0aW9uIHRvIGEgdHJhaWxpbmcgZGVjaW1hbCBwb2lu
dAorICAgICAgICAvLyAgICBlbWl0cyBhIHRyYWlsaW5nICcwJy1jaGFyYWN0ZXIuIFRoaXMgZmxh
ZyByZXF1aXJlcyB0aGUKKyAgICAgICAgLy8gICAgRVhNSVRfVFJBSUxJTkdfREVDSU1BTF9QT0lO
VCBmbGFnLgorICAgICAgICAvLyAgICBFeGFtcGxlOiAyMzQ1LjAgaXMgY29udmVydGVkIHRvICIy
MzQ1LjAiLgorICAgICAgICAvLyAgLSBVTklRVUVfWkVSTzogIi0wLjAiIGlzIGNvbnZlcnRlZCB0
byAiMC4wIi4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSW5maW5pdHkgc3ltYm9sIGFuZCBuYW5f
c3ltYm9sIHByb3ZpZGUgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3IgdGhlc2UKKyAgICAg
ICAgLy8gc3BlY2lhbCB2YWx1ZXMuIElmIHRoZSBzdHJpbmcgaXMgTlVMTCBhbmQgdGhlIHNwZWNp
YWwgdmFsdWUgaXMgZW5jb3VudGVyZWQKKyAgICAgICAgLy8gdGhlbiB0aGUgY29udmVyc2lvbiBm
dW5jdGlvbnMgcmV0dXJuIGZhbHNlLgorICAgICAgICAvLworICAgICAgICAvLyBUaGUgZXhwb25l
bnRfY2hhcmFjdGVyIGlzIHVzZWQgaW4gZXhwb25lbnRpYWwgcmVwcmVzZW50YXRpb25zLiBJdCBp
cworICAgICAgICAvLyB1c3VhbGx5ICdlJyBvciAnRScuCisgICAgICAgIC8vCisgICAgICAgIC8v
IFdoZW4gY29udmVydGluZyB0byB0aGUgc2hvcnRlc3QgcmVwcmVzZW50YXRpb24gdGhlIGNvbnZl
cnRlciB3aWxsCisgICAgICAgIC8vIHJlcHJlc2VudCBpbnB1dCBudW1iZXJzIGluIGRlY2ltYWwg
Zm9ybWF0IGlmIHRoZXkgYXJlIGluIHRoZSBpbnRlcnZhbAorICAgICAgICAvLyBbMTBeZGVjaW1h
bF9pbl9zaG9ydGVzdF9sb3c7IDEwXmRlY2ltYWxfaW5fc2hvcnRlc3RfaGlnaFsKKyAgICAgICAg
Ly8gICAgKGxvd2VyIGJvdW5kYXJ5IGluY2x1ZGVkLCBncmVhdGVyIGJvdW5kYXJ5IGV4Y2x1ZGVk
KS4KKyAgICAgICAgLy8gRXhhbXBsZTogd2l0aCBkZWNpbWFsX2luX3Nob3J0ZXN0X2xvdyA9IC02
IGFuZAorICAgICAgICAvLyAgICAgICAgICAgICAgIGRlY2ltYWxfaW5fc2hvcnRlc3RfaGlnaCA9
IDIxOgorICAgICAgICAvLyAgIFRvU2hvcnRlc3QoMC4wMDAwMDEpICAtPiAiMC4wMDAwMDEiCisg
ICAgICAgIC8vICAgVG9TaG9ydGVzdCgwLjAwMDAwMDEpIC0+ICIxZS03IgorICAgICAgICAvLyAg
IFRvU2hvcnRlc3QoMTExMTExMTExMTExMTExMTExMTExLjApICAtPiAiMTExMTExMTExMTExMTEx
MTEwMDAwIgorICAgICAgICAvLyAgIFRvU2hvcnRlc3QoMTAwMDAwMDAwMDAwMDAwMDAwMDAwLjAp
ICAtPiAiMTAwMDAwMDAwMDAwMDAwMDAwMDAwIgorICAgICAgICAvLyAgIFRvU2hvcnRlc3QoMTEx
MTExMTExMTExMTExMTExMTExMS4wKSAtPiAiMS4xMTExMTExMTExMTExMTExZSsyMSIKKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gV2hlbiBjb252ZXJ0aW5nIHRvIHByZWNpc2lvbiBtb2RlIHRoZSBj
b252ZXJ0ZXIgbWF5IGFkZAorICAgICAgICAvLyBtYXhfbGVhZGluZ19wYWRkaW5nX3plcm9lcyBi
ZWZvcmUgcmV0dXJuaW5nIHRoZSBudW1iZXIgaW4gZXhwb25lbnRpYWwKKyAgICAgICAgLy8gZm9y
bWF0LgorICAgICAgICAvLyBFeGFtcGxlIHdpdGggbWF4X2xlYWRpbmdfcGFkZGluZ196ZXJvZXNf
aW5fcHJlY2lzaW9uX21vZGUgPSA2LgorICAgICAgICAvLyAgIFRvUHJlY2lzaW9uKDAuMDAwMDAx
MjM0NSwgMikgLT4gIjAuMDAwMDAxMiIKKyAgICAgICAgLy8gICBUb1ByZWNpc2lvbigwLjAwMDAw
MDEyMzQ1LCAyKSAtPiAiMS4yZS03IgorICAgICAgICAvLyBTaW1pbGFyaWx5IHRoZSBjb252ZXJ0
ZXIgbWF5IGFkZCB1cCB0bworICAgICAgICAvLyBtYXhfdHJhaWxpbmdfcGFkZGluZ196ZXJvZXNf
aW5fcHJlY2lzaW9uX21vZGUgaW4gcHJlY2lzaW9uIG1vZGUgdG8gYXZvaWQKKyAgICAgICAgLy8g
cmV0dXJuaW5nIGFuIGV4cG9uZW50aWFsIHJlcHJlc2VudGF0aW9uLiBBIHplcm8gYWRkZWQgYnkg
dGhlCisgICAgICAgIC8vIEVNSVRfVFJBSUxJTkdfWkVST19BRlRFUl9QT0lOVCBmbGFnIGlzIGNv
dW50ZWQgZm9yIHRoaXMgbGltaXQuCisgICAgICAgIC8vIEV4YW1wbGVzIGZvciBtYXhfdHJhaWxp
bmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGUgPSAxOgorICAgICAgICAvLyAgIFRv
UHJlY2lzaW9uKDIzMC4wLCAyKSAtPiAiMjMwIgorICAgICAgICAvLyAgIFRvUHJlY2lzaW9uKDIz
MC4wLCAyKSAtPiAiMjMwLiIgIHdpdGggRU1JVF9UUkFJTElOR19ERUNJTUFMX1BPSU5ULgorICAg
ICAgICAvLyAgIFRvUHJlY2lzaW9uKDIzMC4wLCAyKSAtPiAiMi4zZTIiIHdpdGggRU1JVF9UUkFJ
TElOR19aRVJPX0FGVEVSX1BPSU5ULgorICAgICAgICBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcihp
bnQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGlu
ZmluaXR5X3N5bWJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciogbmFuX3N5bWJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBleHBv
bmVudF9jaGFyYWN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZWNp
bWFsX2luX3Nob3J0ZXN0X2xvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGRlY2ltYWxfaW5fc2hvcnRlc3RfaGlnaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IG1heF9sZWFkaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2RlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWF4X3RyYWlsaW5nX3BhZGRpbmdfemVy
b2VzX2luX3ByZWNpc2lvbl9tb2RlKQorICAgICAgICA6IGZsYWdzXyhmbGFncyksCisgICAgICAg
IGluZmluaXR5X3N5bWJvbF8oaW5maW5pdHlfc3ltYm9sKSwKKyAgICAgICAgbmFuX3N5bWJvbF8o
bmFuX3N5bWJvbCksCisgICAgICAgIGV4cG9uZW50X2NoYXJhY3Rlcl8oZXhwb25lbnRfY2hhcmFj
dGVyKSwKKyAgICAgICAgZGVjaW1hbF9pbl9zaG9ydGVzdF9sb3dfKGRlY2ltYWxfaW5fc2hvcnRl
c3RfbG93KSwKKyAgICAgICAgZGVjaW1hbF9pbl9zaG9ydGVzdF9oaWdoXyhkZWNpbWFsX2luX3No
b3J0ZXN0X2hpZ2gpLAorICAgICAgICBtYXhfbGVhZGluZ19wYWRkaW5nX3plcm9lc19pbl9wcmVj
aXNpb25fbW9kZV8oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYXhfbGVhZGluZ19wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZSks
CisgICAgICAgIG1heF90cmFpbGluZ19wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZV8o
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWF4X3RyYWlsaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2RlKSB7CisgICAgICAg
ICAgICAvLyBXaGVuICd0cmFpbGluZyB6ZXJvIGFmdGVyIHRoZSBwb2ludCcgaXMgc2V0LCB0aGVu
ICd0cmFpbGluZyBwb2ludCcKKyAgICAgICAgICAgIC8vIG11c3QgYmUgc2V0IHRvby4KKyAgICAg
ICAgICAgIEFTU0VSVCgoKGZsYWdzICYgRU1JVF9UUkFJTElOR19ERUNJTUFMX1BPSU5UKSAhPSAw
KSB8fAorICAgICAgICAgICAgICAgICAgICEoKGZsYWdzICYgRU1JVF9UUkFJTElOR19aRVJPX0FG
VEVSX1BPSU5UKSAhPSAwKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFJldHVy
bnMgYSBjb252ZXJ0ZXIgZm9sbG93aW5nIHRoZSBFY21hU2NyaXB0IHNwZWNpZmljYXRpb24uCisg
ICAgICAgIHN0YXRpYyBjb25zdCBEb3VibGVUb1N0cmluZ0NvbnZlcnRlciYgRWNtYVNjcmlwdENv
bnZlcnRlcigpOworICAgICAgICAKKyAgICAgICAgLy8gQ29tcHV0ZXMgdGhlIHNob3J0ZXN0IHN0
cmluZyBvZiBkaWdpdHMgdGhhdCBjb3JyZWN0bHkgcmVwcmVzZW50IHRoZSBpbnB1dAorICAgICAg
ICAvLyBudW1iZXIuIERlcGVuZGluZyBvbiBkZWNpbWFsX2luX3Nob3J0ZXN0X2xvdyBhbmQgZGVj
aW1hbF9pbl9zaG9ydGVzdF9oaWdoCisgICAgICAgIC8vIChzZWUgY29uc3RydWN0b3IpIGl0IHRo
ZW4gZWl0aGVyIHJldHVybnMgYSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uLCBvciBhbgorICAgICAg
ICAvLyBleHBvbmVudGlhbCByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgLy8gRXhhbXBsZSB3aXRo
IGRlY2ltYWxfaW5fc2hvcnRlc3RfbG93ID0gLTYsCisgICAgICAgIC8vICAgICAgICAgICAgICBk
ZWNpbWFsX2luX3Nob3J0ZXN0X2hpZ2ggPSAyMSwKKyAgICAgICAgLy8gICAgICAgICAgICAgIEVN
SVRfUE9TSVRJVkVfRVhQT05FTlRfU0lHTiBhY3RpdmF0ZWQsIGFuZAorICAgICAgICAvLyAgICAg
ICAgICAgICAgRU1JVF9UUkFJTElOR19ERUNJTUFMX1BPSU5UIGRlYWN0aXZlZDoKKyAgICAgICAg
Ly8gICBUb1Nob3J0ZXN0KDAuMDAwMDAxKSAgLT4gIjAuMDAwMDAxIgorICAgICAgICAvLyAgIFRv
U2hvcnRlc3QoMC4wMDAwMDAxKSAtPiAiMWUtNyIKKyAgICAgICAgLy8gICBUb1Nob3J0ZXN0KDEx
MTExMTExMTExMTExMTExMTExMS4wKSAgLT4gIjExMTExMTExMTExMTExMTExMDAwMCIKKyAgICAg
ICAgLy8gICBUb1Nob3J0ZXN0KDEwMDAwMDAwMDAwMDAwMDAwMDAwMC4wKSAgLT4gIjEwMDAwMDAw
MDAwMDAwMDAwMDAwMCIKKyAgICAgICAgLy8gICBUb1Nob3J0ZXN0KDExMTExMTExMTExMTExMTEx
MTExMTEuMCkgLT4gIjEuMTExMTExMTExMTExMTExMWUrMjEiCisgICAgICAgIC8vCisgICAgICAg
IC8vIE5vdGU6IHRoZSBjb252ZXJzaW9uIG1heSByb3VuZCB0aGUgb3V0cHV0IGlmIHRoZSByZXR1
cm5lZCBzdHJpbmcKKyAgICAgICAgLy8gaXMgYWNjdXJhdGUgZW5vdWdoIHRvIHVuaXF1ZWx5IGlk
ZW50aWZ5IHRoZSBpbnB1dC1udW1iZXIuCisgICAgICAgIC8vIEZvciBleGFtcGxlIHRoZSBtb3N0
IHByZWNpc2UgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRvdWJsZSA5ZTU5IGVxdWFscworICAgICAg
ICAvLyAiODk5OTk5OTk5OTk5OTk5OTE4NzY3MjI5NDQ5NzE3NjE5OTUzODEwMTMxMjczNjc0Njkw
NjU2MjA2ODQ4IiwgYnV0CisgICAgICAgIC8vIHRoZSBjb252ZXJ0ZXIgd2lsbCByZXR1cm4gdGhl
IHNob3J0ZXIgKGJ1dCBzdGlsbCBjb3JyZWN0KSAiOWU1OSIuCisgICAgICAgIC8vCisgICAgICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29udmVyc2lvbiBzdWNjZWVkcy4gVGhlIGNvbnZlcnNp
b24gYWx3YXlzIHN1Y2NlZWRzCisgICAgICAgIC8vIGV4Y2VwdCB3aGVuIHRoZSBpbnB1dCB2YWx1
ZSBpcyBzcGVjaWFsIGFuZCBubyBpbmZpbml0eV9zeW1ib2wgb3IKKyAgICAgICAgLy8gbmFuX3N5
bWJvbCBoYXMgYmVlbiBnaXZlbiB0byB0aGUgY29uc3RydWN0b3IuCisgICAgICAgIGJvb2wgVG9T
aG9ydGVzdChkb3VibGUgdmFsdWUsIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25z
dDsKKyAgICAgICAgCisgICAgICAgIAorICAgICAgICAvLyBDb21wdXRlcyBhIGRlY2ltYWwgcmVw
cmVzZW50YXRpb24gd2l0aCBhIGZpeGVkIG51bWJlciBvZiBkaWdpdHMgYWZ0ZXIgdGhlCisgICAg
ICAgIC8vIGRlY2ltYWwgcG9pbnQuIFRoZSBsYXN0IGVtaXR0ZWQgZGlnaXQgaXMgcm91bmRlZC4K
KyAgICAgICAgLy8KKyAgICAgICAgLy8gRXhhbXBsZXM6CisgICAgICAgIC8vICAgVG9GaXhlZCgz
LjEyLCAxKSAtPiAiMy4xIgorICAgICAgICAvLyAgIFRvRml4ZWQoMy4xNDE1LCAzKSAtPiAiMy4x
NDIiCisgICAgICAgIC8vICAgVG9GaXhlZCgxMjM0LjU2Nzg5LCA0KSAtPiAiMTIzNC41Njc5Igor
ICAgICAgICAvLyAgIFRvRml4ZWQoMS4yMywgNSkgLT4gIjEuMjMwMDAiCisgICAgICAgIC8vICAg
VG9GaXhlZCgwLjEsIDQpIC0+ICIwLjEwMDAiCisgICAgICAgIC8vICAgVG9GaXhlZCgxZTMwLCAy
KSAtPiAiMTAwMDAwMDAwMDAwMDAwMDAxOTg4NDYyNDgzODY1Ni4wMCIKKyAgICAgICAgLy8gICBU
b0ZpeGVkKDAuMSwgMzApIC0+ICIwLjEwMDAwMDAwMDAwMDAwMDAwNTU1MTExNTEyMzEyNiIKKyAg
ICAgICAgLy8gICBUb0ZpeGVkKDAuMSwgMTcpIC0+ICIwLjEwMDAwMDAwMDAwMDAwMDAxIgorICAg
ICAgICAvLworICAgICAgICAvLyBJZiByZXF1ZXN0ZWRfZGlnaXRzIGVxdWFscyAwLCB0aGVuIHRo
ZSB0YWlsIG9mIHRoZSByZXN1bHQgZGVwZW5kcyBvbgorICAgICAgICAvLyB0aGUgRU1JVF9UUkFJ
TElOR19ERUNJTUFMX1BPSU5UIGFuZCBFTUlUX1RSQUlMSU5HX1pFUk9fQUZURVJfUE9JTlQuCisg
ICAgICAgIC8vIEV4YW1wbGVzLCBmb3IgcmVxdWVzdGVkX2RpZ2l0cyA9PSAwLAorICAgICAgICAv
LyAgIGxldCBFTUlUX1RSQUlMSU5HX0RFQ0lNQUxfUE9JTlQgYW5kIEVNSVRfVFJBSUxJTkdfWkVS
T19BRlRFUl9QT0lOVCBiZQorICAgICAgICAvLyAgICAtIGZhbHNlIGFuZCBmYWxzZTogdGhlbiAx
MjMuNDUgLT4gMTIzCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjY3
OCAtPiAxCisgICAgICAgIC8vICAgIC0gdHJ1ZSBhbmQgZmFsc2U6IHRoZW4gMTIzLjQ1IC0+IDEy
My4KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgMC42NzggLT4gMS4KKyAg
ICAgICAgLy8gICAgLSB0cnVlIGFuZCB0cnVlOiB0aGVuIDEyMy40NSAtPiAxMjMuMAorICAgICAg
ICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNjc4IC0+IDEuMAorICAgICAgICAvLwor
ICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbnZlcnNpb24gc3VjY2VlZHMuIFRoZSBj
b252ZXJzaW9uIGFsd2F5cyBzdWNjZWVkcworICAgICAgICAvLyBleGNlcHQgZm9yIHRoZSBmb2xs
b3dpbmcgY2FzZXM6CisgICAgICAgIC8vICAgLSB0aGUgaW5wdXQgdmFsdWUgaXMgc3BlY2lhbCBh
bmQgbm8gaW5maW5pdHlfc3ltYm9sIG9yIG5hbl9zeW1ib2wgaGFzCisgICAgICAgIC8vICAgICBi
ZWVuIHByb3ZpZGVkIHRvIHRoZSBjb25zdHJ1Y3RvciwKKyAgICAgICAgLy8gICAtICd2YWx1ZScg
PiAxMF5rTWF4Rml4ZWREaWdpdHNCZWZvcmVQb2ludCwgb3IKKyAgICAgICAgLy8gICAtICdyZXF1
ZXN0ZWRfZGlnaXRzJyA+IGtNYXhGaXhlZERpZ2l0c0FmdGVyUG9pbnQuCisgICAgICAgIC8vIFRo
ZSBsYXN0IHR3byBjb25kaXRpb25zIGltcGx5IHRoYXQgdGhlIHJlc3VsdCB3aWxsIG5ldmVyIGNv
bnRhaW4gbW9yZSB0aGFuCisgICAgICAgIC8vIDEgKyBrTWF4Rml4ZWREaWdpdHNCZWZvcmVQb2lu
dCArIDEgKyBrTWF4Rml4ZWREaWdpdHNBZnRlclBvaW50IGNoYXJhY3RlcnMKKyAgICAgICAgLy8g
KG9uZSBhZGRpdGlvbmFsIGNoYXJhY3RlciBmb3IgdGhlIHNpZ24sIGFuZCBvbmUgZm9yIHRoZSBk
ZWNpbWFsIHBvaW50KS4KKyAgICAgICAgYm9vbCBUb0ZpeGVkKGRvdWJsZSB2YWx1ZSwKKyAgICAg
ICAgICAgICAgICAgICAgIGludCByZXF1ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAg
ICAgU3RyaW5nQnVpbGRlciogcmVzdWx0X2J1aWxkZXIpIGNvbnN0OworICAgICAgICAKKyAgICAg
ICAgLy8gQ29tcHV0ZXMgYSByZXByZXNlbnRhdGlvbiBpbiBleHBvbmVudGlhbCBmb3JtYXQgd2l0
aCByZXF1ZXN0ZWRfZGlnaXRzCisgICAgICAgIC8vIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50LiBU
aGUgbGFzdCBlbWl0dGVkIGRpZ2l0IGlzIHJvdW5kZWQuCisgICAgICAgIC8vIElmIHJlcXVlc3Rl
ZF9kaWdpdHMgZXF1YWxzIC0xLCB0aGVuIHRoZSBzaG9ydGVzdCBleHBvbmVudGlhbCByZXByZXNl
bnRhdGlvbgorICAgICAgICAvLyBpcyBjb21wdXRlZC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8g
RXhhbXBsZXMgd2l0aCBFTUlUX1BPU0lUSVZFX0VYUE9ORU5UX1NJR04gZGVhY3RpdmF0ZWQsIGFu
ZAorICAgICAgICAvLyAgICAgICAgICAgICAgIGV4cG9uZW50X2NoYXJhY3RlciBzZXQgdG8gJ2Un
LgorICAgICAgICAvLyAgIFRvRXhwb25lbnRpYWwoMy4xMiwgMSkgLT4gIjMuMWUwIgorICAgICAg
ICAvLyAgIFRvRXhwb25lbnRpYWwoNS4wLCAzKSAtPiAiNS4wMDBlMCIKKyAgICAgICAgLy8gICBU
b0V4cG9uZW50aWFsKDAuMDAxLCAyKSAtPiAiMS4wMGUtMyIKKyAgICAgICAgLy8gICBUb0V4cG9u
ZW50aWFsKDMuMTQxNSwgLTEpIC0+ICIzLjE0MTVlMCIKKyAgICAgICAgLy8gICBUb0V4cG9uZW50
aWFsKDMuMTQxNSwgNCkgLT4gIjMuMTQxNWUwIgorICAgICAgICAvLyAgIFRvRXhwb25lbnRpYWwo
My4xNDE1LCAzKSAtPiAiMy4xNDJlMCIKKyAgICAgICAgLy8gICBUb0V4cG9uZW50aWFsKDEyMzQ1
Njc4OTAwMDAwMCwgMykgLT4gIjEuMjM1ZTE0IgorICAgICAgICAvLyAgIFRvRXhwb25lbnRpYWwo
MTAwMDAwMDAwMDAwMDAwMDAxOTg4NDYyNDgzODY1Ni4wLCAtMSkgLT4gIjFlMzAiCisgICAgICAg
IC8vICAgVG9FeHBvbmVudGlhbCgxMDAwMDAwMDAwMDAwMDAwMDE5ODg0NjI0ODM4NjU2LjAsIDMy
KSAtPgorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICIxLjAwMDAwMDAwMDAwMDAwMDAx
OTg4NDYyNDgzODY1NjAwZTMwIgorICAgICAgICAvLyAgIFRvRXhwb25lbnRpYWwoMTIzNCwgMCkg
LT4gIjFlMyIKKyAgICAgICAgLy8KKyAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb252
ZXJzaW9uIHN1Y2NlZWRzLiBUaGUgY29udmVyc2lvbiBhbHdheXMgc3VjY2VlZHMKKyAgICAgICAg
Ly8gZXhjZXB0IGZvciB0aGUgZm9sbG93aW5nIGNhc2VzOgorICAgICAgICAvLyAgIC0gdGhlIGlu
cHV0IHZhbHVlIGlzIHNwZWNpYWwgYW5kIG5vIGluZmluaXR5X3N5bWJvbCBvciBuYW5fc3ltYm9s
IGhhcworICAgICAgICAvLyAgICAgYmVlbiBwcm92aWRlZCB0byB0aGUgY29uc3RydWN0b3IsCisg
ICAgICAgIC8vICAgLSAncmVxdWVzdGVkX2RpZ2l0cycgPiBrTWF4RXhwb25lbnRpYWxEaWdpdHMu
CisgICAgICAgIC8vIFRoZSBsYXN0IGNvbmRpdGlvbiBpbXBsaWVzIHRoYXQgdGhlIHJlc3VsdCB3
aWxsIG5ldmVyIGNvbnRhaW4gbW9yZSB0aGFuCisgICAgICAgIC8vIGtNYXhFeHBvbmVudGlhbERp
Z2l0cyArIDggY2hhcmFjdGVycyAodGhlIHNpZ24sIHRoZSBkaWdpdCBiZWZvcmUgdGhlCisgICAg
ICAgIC8vIGRlY2ltYWwgcG9pbnQsIHRoZSBkZWNpbWFsIHBvaW50LCB0aGUgZXhwb25lbnQgY2hh
cmFjdGVyLCB0aGUKKyAgICAgICAgLy8gZXhwb25lbnQncyBzaWduLCBhbmQgYXQgbW9zdCAzIGV4
cG9uZW50IGRpZ2l0cykuCisgICAgICAgIGJvb2wgVG9FeHBvbmVudGlhbChkb3VibGUgdmFsdWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25z
dDsKKyAgICAgICAgCisgICAgICAgIC8vIENvbXB1dGVzICdwcmVjaXNpb24nIGxlYWRpbmcgZGln
aXRzIG9mIHRoZSBnaXZlbiAndmFsdWUnIGFuZCByZXR1cm5zIHRoZW0KKyAgICAgICAgLy8gZWl0
aGVyIGluIGV4cG9uZW50aWFsIG9yIGRlY2ltYWwgZm9ybWF0LCBkZXBlbmRpbmcgb24KKyAgICAg
ICAgLy8gbWF4X3tsZWFkaW5nfHRyYWlsaW5nfV9wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25f
bW9kZSAoZ2l2ZW4gdG8gdGhlCisgICAgICAgIC8vIGNvbnN0cnVjdG9yKS4KKyAgICAgICAgLy8g
VGhlIGxhc3QgY29tcHV0ZWQgZGlnaXQgaXMgcm91bmRlZC4KKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gRXhhbXBsZSB3aXRoIG1heF9sZWFkaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9t
b2RlID0gNi4KKyAgICAgICAgLy8gICBUb1ByZWNpc2lvbigwLjAwMDAwMTIzNDUsIDIpIC0+ICIw
LjAwMDAwMTIiCisgICAgICAgIC8vICAgVG9QcmVjaXNpb24oMC4wMDAwMDAxMjM0NSwgMikgLT4g
IjEuMmUtNyIKKyAgICAgICAgLy8gU2ltaWxhcmlseSB0aGUgY29udmVydGVyIG1heSBhZGQgdXAg
dG8KKyAgICAgICAgLy8gbWF4X3RyYWlsaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9t
b2RlIGluIHByZWNpc2lvbiBtb2RlIHRvIGF2b2lkCisgICAgICAgIC8vIHJldHVybmluZyBhbiBl
eHBvbmVudGlhbCByZXByZXNlbnRhdGlvbi4gQSB6ZXJvIGFkZGVkIGJ5IHRoZQorICAgICAgICAv
LyBFTUlUX1RSQUlMSU5HX1pFUk9fQUZURVJfUE9JTlQgZmxhZyBpcyBjb3VudGVkIGZvciB0aGlz
IGxpbWl0LgorICAgICAgICAvLyBFeGFtcGxlcyBmb3IgbWF4X3RyYWlsaW5nX3BhZGRpbmdfemVy
b2VzX2luX3ByZWNpc2lvbl9tb2RlID0gMToKKyAgICAgICAgLy8gICBUb1ByZWNpc2lvbigyMzAu
MCwgMikgLT4gIjIzMCIKKyAgICAgICAgLy8gICBUb1ByZWNpc2lvbigyMzAuMCwgMikgLT4gIjIz
MC4iICB3aXRoIEVNSVRfVFJBSUxJTkdfREVDSU1BTF9QT0lOVC4KKyAgICAgICAgLy8gICBUb1By
ZWNpc2lvbigyMzAuMCwgMikgLT4gIjIuM2UyIiB3aXRoIEVNSVRfVFJBSUxJTkdfWkVST19BRlRF
Ul9QT0lOVC4KKyAgICAgICAgLy8gRXhhbXBsZXMgZm9yIG1heF90cmFpbGluZ19wYWRkaW5nX3pl
cm9lc19pbl9wcmVjaXNpb25fbW9kZSA9IDMsIGFuZCBubworICAgICAgICAvLyAgICBFTUlUX1RS
QUlMSU5HX1pFUk9fQUZURVJfUE9JTlQ6CisgICAgICAgIC8vICAgVG9QcmVjaXNpb24oMTIzNDUw
LjAsIDYpIC0+ICIxMjM0NTAiCisgICAgICAgIC8vICAgVG9QcmVjaXNpb24oMTIzNDUwLjAsIDUp
IC0+ICIxMjM0NTAiCisgICAgICAgIC8vICAgVG9QcmVjaXNpb24oMTIzNDUwLjAsIDQpIC0+ICIx
MjM1MDAiCisgICAgICAgIC8vICAgVG9QcmVjaXNpb24oMTIzNDUwLjAsIDMpIC0+ICIxMjMwMDAi
CisgICAgICAgIC8vICAgVG9QcmVjaXNpb24oMTIzNDUwLjAsIDIpIC0+ICIxLjJlNSIKKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb252ZXJzaW9uIHN1Y2NlZWRz
LiBUaGUgY29udmVyc2lvbiBhbHdheXMgc3VjY2VlZHMKKyAgICAgICAgLy8gZXhjZXB0IGZvciB0
aGUgZm9sbG93aW5nIGNhc2VzOgorICAgICAgICAvLyAgIC0gdGhlIGlucHV0IHZhbHVlIGlzIHNw
ZWNpYWwgYW5kIG5vIGluZmluaXR5X3N5bWJvbCBvciBuYW5fc3ltYm9sIGhhcworICAgICAgICAv
LyAgICAgYmVlbiBwcm92aWRlZCB0byB0aGUgY29uc3RydWN0b3IsCisgICAgICAgIC8vICAgLSBw
cmVjaXNpb24gPCBrTWluUGVyaWNpc2lvbkRpZ2l0cworICAgICAgICAvLyAgIC0gcHJlY2lzaW9u
ID4ga01heFByZWNpc2lvbkRpZ2l0cworICAgICAgICAvLyBUaGUgbGFzdCBjb25kaXRpb24gaW1w
bGllcyB0aGF0IHRoZSByZXN1bHQgd2lsbCBuZXZlciBjb250YWluIG1vcmUgdGhhbgorICAgICAg
ICAvLyBrTWF4UHJlY2lzaW9uRGlnaXRzICsgNyBjaGFyYWN0ZXJzICh0aGUgc2lnbiwgdGhlIGRl
Y2ltYWwgcG9pbnQsIHRoZQorICAgICAgICAvLyBleHBvbmVudCBjaGFyYWN0ZXIsIHRoZSBleHBv
bmVudCdzIHNpZ24sIGFuZCBhdCBtb3N0IDMgZXhwb25lbnQgZGlnaXRzKS4KKyAgICAgICAgYm9v
bCBUb1ByZWNpc2lvbihkb3VibGUgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IHByZWNpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyKiByZXN1
bHRfYnVpbGRlcikgY29uc3Q7CisgICAgICAgIAorICAgICAgICBlbnVtIER0b2FNb2RlIHsKKyAg
ICAgICAgICAgIC8vIFByb2R1Y2UgdGhlIHNob3J0ZXN0IGNvcnJlY3QgcmVwcmVzZW50YXRpb24u
CisgICAgICAgICAgICAvLyBGb3IgZXhhbXBsZSB0aGUgb3V0cHV0IG9mIDAuMjk5OTk5OTk5OTk5
OTk5OTg4ODk3IGlzICh0aGUgbGVzcyBhY2N1cmF0ZQorICAgICAgICAgICAgLy8gYnV0IGNvcnJl
Y3QpIDAuMy4KKyAgICAgICAgICAgIFNIT1JURVNULAorICAgICAgICAgICAgLy8gUHJvZHVjZSBh
IGZpeGVkIG51bWJlciBvZiBkaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQuCisgICAgICAg
ICAgICAvLyBGb3IgaW5zdGFuY2UgZml4ZWQoMC4xLCA0KSBiZWNvbWVzIDAuMTAwMAorICAgICAg
ICAgICAgLy8gSWYgdGhlIGlucHV0IG51bWJlciBpcyBiaWcsIHRoZSBvdXRwdXQgd2lsbCBiZSBi
aWcuCisgICAgICAgICAgICBGSVhFRCwKKyAgICAgICAgICAgIC8vIEZpeGVkIG51bWJlciBvZiBk
aWdpdHMgKGluZGVwZW5kZW50IG9mIHRoZSBkZWNpbWFsIHBvaW50KS4KKyAgICAgICAgICAgIFBS
RUNJU0lPTgorICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgLy8gVGhlIG1heGltYWwgbnVt
YmVyIG9mIGRpZ2l0cyB0aGF0IGFyZSBuZWVkZWQgdG8gZW1pdCBhIGRvdWJsZSBpbiBiYXNlIDEw
LgorICAgICAgICAvLyBBIGhpZ2hlciBwcmVjaXNpb24gY2FuIGJlIGFjaGlldmVkIGJ5IHVzaW5n
IG1vcmUgZGlnaXRzLCBidXQgdGhlIHNob3J0ZXN0CisgICAgICAgIC8vIGFjY3VyYXRlIHJlcHJl
c2VudGF0aW9uIG9mIGFueSBkb3VibGUgd2lsbCBuZXZlciB1c2UgbW9yZSBkaWdpdHMgdGhhbgor
ICAgICAgICAvLyBrQmFzZTEwTWF4aW1hbExlbmd0aC4KKyAgICAgICAgLy8gTm90ZSB0aGF0IERv
dWJsZVRvQXNjaWkgbnVsbC10ZXJtaW5hdGVzIGl0cyBpbnB1dC4gU28gdGhlIGdpdmVuIGJ1ZmZl
cgorICAgICAgICAvLyBzaG91bGQgYmUgYXQgbGVhc3Qga0Jhc2UxME1heGltYWxMZW5ndGggKyAx
IGNoYXJhY3RlcnMgbG9uZy4KKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBrQmFzZTEwTWF4aW1h
bExlbmd0aCA9IDE3OworICAgICAgICAKKyAgICAgICAgLy8gQ29udmVydHMgdGhlIGdpdmVuIGRv
dWJsZSAndicgdG8gYXNjaWkuCisgICAgICAgIC8vIFRoZSByZXN1bHQgc2hvdWxkIGJlIGludGVy
cHJldGVkIGFzIGJ1ZmZlciAqIDEwXihwb2ludC1sZW5ndGgpLgorICAgICAgICAvLworICAgICAg
ICAvLyBUaGUgb3V0cHV0IGRlcGVuZHMgb24gdGhlIGdpdmVuIG1vZGU6CisgICAgICAgIC8vICAt
IFNIT1JURVNUOiBwcm9kdWNlIHRoZSBsZWFzdCBhbW91bnQgb2YgZGlnaXRzIGZvciB3aGljaCB0
aGUgaW50ZXJuYWwKKyAgICAgICAgLy8gICBpZGVudGl0eSByZXF1aXJlbWVudCBpcyBzdGlsbCBz
YXRpc2ZpZWQuIElmIHRoZSBkaWdpdHMgYXJlIHByaW50ZWQKKyAgICAgICAgLy8gICAodG9nZXRo
ZXIgd2l0aCB0aGUgY29ycmVjdCBleHBvbmVudCkgdGhlbiByZWFkaW5nIHRoaXMgbnVtYmVyIHdp
bGwgZ2l2ZQorICAgICAgICAvLyAgICd2JyBhZ2Fpbi4gVGhlIGJ1ZmZlciB3aWxsIGNob29zZSB0
aGUgcmVwcmVzZW50YXRpb24gdGhhdCBpcyBjbG9zZXN0IHRvCisgICAgICAgIC8vICAgJ3YnLiBJ
ZiB0aGVyZSBhcmUgdHdvIGF0IHRoZSBzYW1lIGRpc3RhbmNlLCB0aGFuIHRoZSBvbmUgZmFydGhl
ciBhd2F5CisgICAgICAgIC8vICAgZnJvbSAwIGlzIGNob3NlbiAoaGFsZndheSBjYXNlcyAtIGVu
ZGluZyB3aXRoIDUgLSBhcmUgcm91bmRlZCB1cCkuCisgICAgICAgIC8vICAgSW4gdGhpcyBtb2Rl
IHRoZSAncmVxdWVzdGVkX2RpZ2l0cycgcGFyYW1ldGVyIGlzIGlnbm9yZWQuCisgICAgICAgIC8v
ICAtIEZJWEVEOiBwcm9kdWNlcyBkaWdpdHMgbmVjZXNzYXJ5IHRvIHByaW50IGEgZ2l2ZW4gbnVt
YmVyIHdpdGgKKyAgICAgICAgLy8gICAncmVxdWVzdGVkX2RpZ2l0cycgZGlnaXRzIGFmdGVyIHRo
ZSBkZWNpbWFsIHBvaW50LiBUaGUgcHJvZHVjZWQgZGlnaXRzCisgICAgICAgIC8vICAgbWlnaHQg
YmUgdG9vIHNob3J0IGluIHdoaWNoIGNhc2UgdGhlIGNhbGxlciBoYXMgdG8gZmlsbCB0aGUgcmVt
YWluZGVyCisgICAgICAgIC8vICAgd2l0aCAnMCdzLgorICAgICAgICAvLyAgIEV4YW1wbGU6IHRv
Rml4ZWQoMC4wMDEsIDUpIGlzIGFsbG93ZWQgdG8gcmV0dXJuIGJ1ZmZlcj0iMSIsIHBvaW50PS0y
LgorICAgICAgICAvLyAgIEhhbGZ3YXkgY2FzZXMgYXJlIHJvdW5kZWQgdG93YXJkcyArLy1JbmZp
bml0eSAoYXdheSBmcm9tIDApLiBUaGUgY2FsbAorICAgICAgICAvLyAgIHRvRml4ZWQoMC4xNSwg
MikgdGh1cyByZXR1cm5zIGJ1ZmZlcj0iMiIsIHBvaW50PTAuCisgICAgICAgIC8vICAgVGhlIHJl
dHVybmVkIGJ1ZmZlciBtYXkgY29udGFpbiBkaWdpdHMgdGhhdCB3b3VsZCBiZSB0cnVuY2F0ZWQg
ZnJvbSB0aGUKKyAgICAgICAgLy8gICBzaG9ydGVzdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW5w
dXQuCisgICAgICAgIC8vICAtIFBSRUNJU0lPTjogcHJvZHVjZXMgJ3JlcXVlc3RlZF9kaWdpdHMn
IHdoZXJlIHRoZSBmaXJzdCBkaWdpdCBpcyBub3QgJzAnLgorICAgICAgICAvLyAgIEV2ZW4gdGhv
dWdoIHRoZSBsZW5ndGggb2YgcHJvZHVjZWQgZGlnaXRzIHVzdWFsbHkgZXF1YWxzCisgICAgICAg
IC8vICAgJ3JlcXVlc3RlZF9kaWdpdHMnLCB0aGUgZnVuY3Rpb24gaXMgYWxsb3dlZCB0byByZXR1
cm4gZmV3ZXIgZGlnaXRzLCBpbgorICAgICAgICAvLyAgIHdoaWNoIGNhc2UgdGhlIGNhbGxlciBo
YXMgdG8gZmlsbCB0aGUgbWlzc2luZyBkaWdpdHMgd2l0aCAnMCdzLgorICAgICAgICAvLyAgIEhh
bGZ3YXkgY2FzZXMgYXJlIGFnYWluIHJvdW5kZWQgYXdheSBmcm9tIDAuCisgICAgICAgIC8vIERv
dWJsZVRvQXNjaWkgZXhwZWN0cyB0aGUgZ2l2ZW4gYnVmZmVyIHRvIGJlIGJpZyBlbm91Z2ggdG8g
aG9sZCBhbGwKKyAgICAgICAgLy8gZGlnaXRzIGFuZCBhIHRlcm1pbmF0aW5nIG51bGwtY2hhcmFj
dGVyLiBJbiBTSE9SVEVTVC1tb2RlIGl0IGV4cGVjdHMgYQorICAgICAgICAvLyBidWZmZXIgb2Yg
YXQgbGVhc3Qga0Jhc2UxME1heGltYWxMZW5ndGggKyAxLiBJbiBhbGwgb3RoZXIgbW9kZXMgdGhl
CisgICAgICAgIC8vIHJlcXVlc3RlZF9kaWdpdHMgcGFyYW1ldGVyICgrIDEgZm9yIHRoZSBudWxs
LWNoYXJhY3RlcikgbGltaXRzIHRoZSBzaXplIG9mCisgICAgICAgIC8vIHRoZSBvdXRwdXQuIFRo
ZSBnaXZlbiBsZW5ndGggaXMgb25seSB1c2VkIGluIGRlYnVnIG1vZGUgdG8gZW5zdXJlIHRoZQor
ICAgICAgICAvLyBidWZmZXIgaXMgYmlnIGVub3VnaC4KKyAgICAgICAgc3RhdGljIHZvaWQgRG91
YmxlVG9Bc2NpaShkb3VibGUgdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
dG9hTW9kZSBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXF1
ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIGJ1
ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnVmZmVyX2xlbmd0
aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sKiBzaWduLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogbGVuZ3RoLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCogcG9pbnQpOworICAgICAgICAKKyAgICBwcml2YXRlOgor
ICAgICAgICAvLyBJZiB0aGUgdmFsdWUgaXMgYSBzcGVjaWFsIHZhbHVlIChOYU4gb3IgSW5maW5p
dHkpIGNvbnN0cnVjdHMgdGhlCisgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgc3RyaW5nIHVzaW5n
IHRoZSBjb25maWd1cmVkIGluZmluaXR5L25hbi1zeW1ib2wuCisgICAgICAgIC8vIElmIGVpdGhl
ciBvZiB0aGVtIGlzIE5VTEwgb3IgdGhlIHZhbHVlIGlzIG5vdCBzcGVjaWFsIHRoZW4gdGhlCisg
ICAgICAgIC8vIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UuCisgICAgICAgIGJvb2wgSGFuZGxlU3Bl
Y2lhbFZhbHVlcyhkb3VibGUgdmFsdWUsIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBj
b25zdDsKKyAgICAgICAgLy8gQ29uc3RydWN0cyBhbiBleHBvbmVudGlhbCByZXByZXNlbnRhdGlv
biAoaS5lLiAxLjIzNGU1NikuCisgICAgICAgIC8vIFRoZSBnaXZlbiBleHBvbmVudCBhc3N1bWVz
IGEgZGVjaW1hbCBwb2ludCBhZnRlciB0aGUgZmlyc3QgZGVjaW1hbCBkaWdpdC4KKyAgICAgICAg
dm9pZCBDcmVhdGVFeHBvbmVudGlhbFJlcHJlc2VudGF0aW9uKGNvbnN0IGNoYXIqIGRlY2ltYWxf
ZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBleHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25zdDsKKyAgICAgICAgLy8gQ3JlYXRl
cyBhIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gKGkuZSAxMjM0LjU2NzgpLgorICAgICAgICB2b2lk
IENyZWF0ZURlY2ltYWxSZXByZXNlbnRhdGlvbihjb25zdCBjaGFyKiBkZWNpbWFsX2RpZ2l0cywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlY2ltYWxfcG9pbnQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkaWdpdHNfYWZ0
ZXJfcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmlu
Z0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25zdDsKKyAgICAgICAgCisgICAgICAgIGNvbnN0
IGludCBmbGFnc187CisgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IGluZmluaXR5X3N5bWJvbF87
CisgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IG5hbl9zeW1ib2xfOworICAgICAgICBjb25zdCBj
aGFyIGV4cG9uZW50X2NoYXJhY3Rlcl87CisgICAgICAgIGNvbnN0IGludCBkZWNpbWFsX2luX3No
b3J0ZXN0X2xvd187CisgICAgICAgIGNvbnN0IGludCBkZWNpbWFsX2luX3Nob3J0ZXN0X2hpZ2hf
OworICAgICAgICBjb25zdCBpbnQgbWF4X2xlYWRpbmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lz
aW9uX21vZGVfOworICAgICAgICBjb25zdCBpbnQgbWF4X3RyYWlsaW5nX3BhZGRpbmdfemVyb2Vz
X2luX3ByZWNpc2lvbl9tb2RlXzsKKyAgICAgICAgCisgICAgICAgIERJU0FMTE9XX0lNUExJQ0lU
X0NPTlNUUlVDVE9SUyhEb3VibGVUb1N0cmluZ0NvbnZlcnRlcik7CisgICAgfTsKKyAgICAKKyAg
ICAKKyAgICBjbGFzcyBTdHJpbmdUb0RvdWJsZUNvbnZlcnRlciB7CisgICAgcHVibGljOgorICAg
ICAgICAvLyBFbnVtZXJhdGlvbiBmb3IgYWxsb3dpbmcgb2N0YWxzIGFuZCBpZ25vcmluZyBqdW5r
IHdoZW4gY29udmVydGluZworICAgICAgICAvLyBzdHJpbmdzIHRvIG51bWJlcnMuCisgICAgICAg
IGVudW0gRmxhZ3MgeworICAgICAgICAgICAgTk9fRkxBR1MgPSAwLAorICAgICAgICAgICAgQUxM
T1dfSEVYID0gMSwKKyAgICAgICAgICAgIEFMTE9XX09DVEFMUyA9IDIsCisgICAgICAgICAgICBB
TExPV19UUkFJTElOR19KVU5LID0gNCwKKyAgICAgICAgICAgIEFMTE9XX0xFQURJTkdfU1BBQ0VT
ID0gOCwKKyAgICAgICAgICAgIEFMTE9XX1RSQUlMSU5HX1NQQUNFUyA9IDE2LAorICAgICAgICAg
ICAgQUxMT1dfU1BBQ0VTX0FGVEVSX1NJR04gPSAzMgorICAgICAgICB9OworICAgICAgICAKKyAg
ICAgICAgLy8gRmxhZ3Mgc2hvdWxkIGJlIGEgYml0LW9yIGNvbWJpbmF0aW9uIG9mIHRoZSBwb3Nz
aWJsZSBGbGFncy1lbnVtLgorICAgICAgICAvLyAgLSBOT19GTEFHUzogbm8gc3BlY2lhbCBmbGFn
cy4KKyAgICAgICAgLy8gIC0gQUxMT1dfSEVYOiByZWNvZ25pemVzIHRoZSBwcmVmaXggIjB4Ii4g
SGV4IG51bWJlcnMgbWF5IG9ubHkgYmUgaW50ZWdlcnMuCisgICAgICAgIC8vICAgICAgRXg6IFN0
cmluZ1RvRG91YmxlKCIweDEyMzQiKSAtPiA0NjYwLjAKKyAgICAgICAgLy8gICAgICAgICAgSW4g
U3RyaW5nVG9Eb3VibGUoIjB4MTIzNC41NiIpIHRoZSBjaGFyYWN0ZXJzICIuNTYiIGFyZSB0cmFp
bGluZworICAgICAgICAvLyAgICAgICAgICBqdW5rLiBUaGUgcmVzdWx0IG9mIHRoZSBjYWxsIGlz
IGhlbmNlIGRlcGVuZGVudCBvbgorICAgICAgICAvLyAgICAgICAgICB0aGUgQUxMT1dfVFJBSUxJ
TkdfSlVOSyBmbGFnIGFuZC9vciB0aGUganVuayB2YWx1ZS4KKyAgICAgICAgLy8gICAgICBXaXRo
IHRoaXMgZmxhZyAiMHgiIGlzIGEganVuay1zdHJpbmcuIEV2ZW4gd2l0aCBBTExPV19UUkFJTElO
R19KVU5LLAorICAgICAgICAvLyAgICAgIHRoZSBzdHJpbmcgd2lsbCBub3QgYmUgcGFyc2VkIGFz
ICIwIiBmb2xsb3dlZCBieSBqdW5rLgorICAgICAgICAvLworICAgICAgICAvLyAgLSBBTExPV19P
Q1RBTFM6IHJlY29nbml6ZXMgdGhlIHByZWZpeCAiMCIgZm9yIG9jdGFsczoKKyAgICAgICAgLy8g
ICAgICBJZiBhIHNlcXVlbmNlIG9mIG9jdGFsIGRpZ2l0cyBzdGFydHMgd2l0aCAnMCcsIHRoZW4g
dGhlIG51bWJlciBpcworICAgICAgICAvLyAgICAgIHJlYWQgYXMgb2N0YWwgaW50ZWdlci4gT2N0
YWwgbnVtYmVycyBtYXkgb25seSBiZSBpbnRlZ2Vycy4KKyAgICAgICAgLy8gICAgICBFeDogU3Ry
aW5nVG9Eb3VibGUoIjAxMjM0IikgLT4gNjY4LjAKKyAgICAgICAgLy8gICAgICAgICAgU3RyaW5n
VG9Eb3VibGUoIjAxMjM0OSIpIC0+IDEyMzQ5LjAgIC8vIE5vdCBhIHNlcXVlbmNlIG9mIG9jdGFs
CisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBkaWdpdHMuCisgICAgICAgIC8vICAgICAgICAgIEluIFN0cmluZ1RvRG91YmxlKCIwMTIz
NC41NiIpIHRoZSBjaGFyYWN0ZXJzICIuNTYiIGFyZSB0cmFpbGluZworICAgICAgICAvLyAgICAg
ICAgICBqdW5rLiBUaGUgcmVzdWx0IG9mIHRoZSBjYWxsIGlzIGhlbmNlIGRlcGVuZGVudCBvbgor
ICAgICAgICAvLyAgICAgICAgICB0aGUgQUxMT1dfVFJBSUxJTkdfSlVOSyBmbGFnIGFuZC9vciB0
aGUganVuayB2YWx1ZS4KKyAgICAgICAgLy8gICAgICAgICAgSW4gU3RyaW5nVG9Eb3VibGUoIjAx
MjM0ZTU2IikgdGhlIGNoYXJhY3RlcnMgImU1NiIgYXJlIHRyYWlsaW5nCisgICAgICAgIC8vICAg
ICAgICAgIGp1bmssIHRvby4KKyAgICAgICAgLy8gIC0gQUxMT1dfVFJBSUxJTkdfSlVOSzogaWdu
b3JlIHRyYWlsaW5nIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IHBhcnQgb2YKKyAgICAgICAgLy8g
ICAgICBhIGRvdWJsZSBsaXRlcmFsLgorICAgICAgICAvLyAgLSBBTExPV19MRUFESU5HX1NQQUNF
Uzogc2tpcCBvdmVyIGxlYWRpbmcgc3BhY2VzLgorICAgICAgICAvLyAgLSBBTExPV19UUkFJTElO
R19TUEFDRVM6IGlnbm9yZSB0cmFpbGluZyBzcGFjZXMuCisgICAgICAgIC8vICAtIEFMTE9XX1NQ
QUNFU19BRlRFUl9TSUdOOiBpZ25vcmUgc3BhY2VzIGFmdGVyIHRoZSBzaWduLgorICAgICAgICAv
LyAgICAgICBFeDogU3RyaW5nVG9Eb3VibGUoIi0gICAxMjMuMiIpIC0+IC0xMjMuMi4KKyAgICAg
ICAgLy8gICAgICAgICAgIFN0cmluZ1RvRG91YmxlKCIrICAgMTIzLjIiKSAtPiAxMjMuMgorICAg
ICAgICAvLworICAgICAgICAvLyBlbXB0eV9zdHJpbmdfdmFsdWUgaXMgcmV0dXJuZWQgd2hlbiBh
biBlbXB0eSBzdHJpbmcgaXMgZ2l2ZW4gYXMgaW5wdXQuCisgICAgICAgIC8vIElmIEFMTE9XX0xF
QURJTkdfU1BBQ0VTIG9yIEFMTE9XX1RSQUlMSU5HX1NQQUNFUyBhcmUgc2V0LCB0aGVuIGEgc3Ry
aW5nCisgICAgICAgIC8vIGNvbnRhaW5pbmcgb25seSBzcGFjZXMgaXMgY29udmVydGVkIHRvIHRo
ZSAnZW1wdHlfc3RyaW5nX3ZhbHVlJywgdG9vLgorICAgICAgICAvLworICAgICAgICAvLyBqdW5r
X3N0cmluZ192YWx1ZSBpcyByZXR1cm5lZCB3aGVuCisgICAgICAgIC8vICBhKSBBTExPV19UUkFJ
TElOR19KVU5LIGlzIG5vdCBzZXQsIGFuZCBhIGp1bmsgY2hhcmFjdGVyIChhIGNoYXJhY3RlciBu
b3QKKyAgICAgICAgLy8gICAgIHBhcnQgb2YgYSBkb3VibGUtbGl0ZXJhbCkgaXMgZm91bmQuCisg
ICAgICAgIC8vICBiKSBBTExPV19UUkFJTElOR19KVU5LIGlzIHNldCwgYnV0IHRoZSBzdHJpbmcg
ZG9lcyBub3Qgc3RhcnQgd2l0aCBhCisgICAgICAgIC8vICAgICBkb3VibGUgbGl0ZXJhbC4KKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gaW5maW5pdHlfc3ltYm9sIGFuZCBuYW5fc3ltYm9sIGFyZSBz
dHJpbmdzIHRoYXQgYXJlIHVzZWQgdG8gZGV0ZWN0CisgICAgICAgIC8vIGlucHV0cyB0aGF0IHJl
cHJlc2VudCBpbmZpbml0eSBhbmQgTmFOLiBUaGV5IGNhbiBiZSBudWxsLCBpbiB3aGljaCBjYXNl
CisgICAgICAgIC8vIHRoZXkgYXJlIGlnbm9yZWQuCisgICAgICAgIC8vIFRoZSBjb252ZXJzaW9u
IHJvdXRpbmUgZmlyc3QgcmVhZHMgYW55IHBvc3NpYmxlIHNpZ25zLiBUaGVuIGl0IGNvbXBhcmVz
IHRoZQorICAgICAgICAvLyBmb2xsb3dpbmcgY2hhcmFjdGVyIG9mIHRoZSBpbnB1dC1zdHJpbmcg
d2l0aCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mCisgICAgICAgIC8vIHRoZSBpbmZpbml0eSwgYW5k
IG5hbi1zeW1ib2wuIElmIGVpdGhlciBtYXRjaGVzLCB0aGUgZnVuY3Rpb24gYXNzdW1lcywgdGhh
dAorICAgICAgICAvLyBhIG1hdGNoIGhhcyBiZWVuIGZvdW5kLCBhbmQgZXhwZWN0cyB0aGUgZm9s
bG93aW5nIGlucHV0IGNoYXJhY3RlcnMgdG8gbWF0Y2gKKyAgICAgICAgLy8gdGhlIHJlbWFpbmlu
ZyBjaGFyYWN0ZXJzIG9mIHRoZSBzcGVjaWFsLXZhbHVlIHN5bWJvbC4KKyAgICAgICAgLy8gVGhp
cyBtZWFucyB0aGF0IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zIGFwcGx5IHRvIHNwZWNpYWwt
dmFsdWUgc3ltYm9sczoKKyAgICAgICAgLy8gIC0gdGhleSBtdXN0IG5vdCBzdGFydCB3aXRoIHNp
Z25zICgnKycsIG9yICctJyksCisgICAgICAgIC8vICAtIHRoZXkgbXVzdCBub3QgaGF2ZSB0aGUg
c2FtZSBmaXJzdCBjaGFyYWN0ZXIuCisgICAgICAgIC8vICAtIHRoZXkgbXVzdCBub3Qgc3RhcnQg
d2l0aCBkaWdpdHMuCisgICAgICAgIC8vCisgICAgICAgIC8vIEV4YW1wbGVzOgorICAgICAgICAv
LyAgZmxhZ3MgPSBBTExPV19IRVggfCBBTExPV19UUkFJTElOR19KVU5LLAorICAgICAgICAvLyAg
ZW1wdHlfc3RyaW5nX3ZhbHVlID0gMC4wLAorICAgICAgICAvLyAganVua19zdHJpbmdfdmFsdWUg
PSBOYU4sCisgICAgICAgIC8vICBpbmZpbml0eV9zeW1ib2wgPSAiaW5maW5pdHkiLAorICAgICAg
ICAvLyAgbmFuX3N5bWJvbCA9ICJuYW4iOgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgi
MHgxMjM0IikgLT4gNDY2MC4wLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMHgxMjM0
SyIpIC0+IDQ2NjAuMC4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIiIpIC0+IDAuMCAg
Ly8gZW1wdHlfc3RyaW5nX3ZhbHVlLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiICIp
IC0+IE5hTiAgLy8ganVua19zdHJpbmdfdmFsdWUuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91
YmxlKCIgMSIpIC0+IE5hTiAgLy8ganVua19zdHJpbmdfdmFsdWUuCisgICAgICAgIC8vICAgIFN0
cmluZ1RvRG91YmxlKCIweCIpIC0+IE5hTiAgLy8ganVua19zdHJpbmdfdmFsdWUuCisgICAgICAg
IC8vICAgIFN0cmluZ1RvRG91YmxlKCItMTIzLjQ1IikgLT4gLTEyMy40NS4KKyAgICAgICAgLy8g
ICAgU3RyaW5nVG9Eb3VibGUoIi0tMTIzLjQ1IikgLT4gTmFOICAvLyBqdW5rX3N0cmluZ192YWx1
ZS4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjEyM2U0NSIpIC0+IDEyM2U0NS4KKyAg
ICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjEyM0U0NSIpIC0+IDEyM2U0NS4KKyAgICAgICAg
Ly8gICAgU3RyaW5nVG9Eb3VibGUoIjEyM2UrNDUiKSAtPiAxMjNlNDUuCisgICAgICAgIC8vICAg
IFN0cmluZ1RvRG91YmxlKCIxMjNFLTQ1IikgLT4gMTIzZS00NS4KKyAgICAgICAgLy8gICAgU3Ry
aW5nVG9Eb3VibGUoIjEyM2UiKSAtPiAxMjMuMCAgLy8gdHJhaWxpbmcganVuayBpZ25vcmVkLgor
ICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMTIzZS0iKSAtPiAxMjMuMCAgLy8gdHJhaWxp
bmcganVuayBpZ25vcmVkLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiK05hTiIpIC0+
IE5hTiAgLy8gTmFOIHN0cmluZyBsaXRlcmFsLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJs
ZSgiLWluZmluaXR5IikgLT4gLWluZi4gIC8vIGluZmluaXR5IGxpdGVyYWwuCisgICAgICAgIC8v
ICAgIFN0cmluZ1RvRG91YmxlKCJJbmZpbml0eSIpIC0+IE5hTiAgLy8ganVua19zdHJpbmdfdmFs
dWUuCisgICAgICAgIC8vCisgICAgICAgIC8vICBmbGFncyA9IEFMTE9XX09DVEFMIHwgQUxMT1df
TEVBRElOR19TUEFDRVMsCisgICAgICAgIC8vICBlbXB0eV9zdHJpbmdfdmFsdWUgPSAwLjAsCisg
ICAgICAgIC8vICBqdW5rX3N0cmluZ192YWx1ZSA9IE5hTiwKKyAgICAgICAgLy8gIGluZmluaXR5
X3N5bWJvbCA9IE5VTEwsCisgICAgICAgIC8vICBuYW5fc3ltYm9sID0gTlVMTDoKKyAgICAgICAg
Ly8gICAgU3RyaW5nVG9Eb3VibGUoIjB4MTIzNCIpIC0+IE5hTiAgLy8ganVua19zdHJpbmdfdmFs
dWUuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIwMTIzNCIpIC0+IDY2OC4wLgorICAg
ICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiIikgLT4gMC4wICAvLyBlbXB0eV9zdHJpbmdfdmFs
dWUuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIgIikgLT4gMC4wICAvLyBlbXB0eV9z
dHJpbmdfdmFsdWUuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIgMSIpIC0+IDEuMAor
ICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMHgiKSAtPiBOYU4gIC8vIGp1bmtfc3RyaW5n
X3ZhbHVlLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMDEyM2U0NSIpIC0+IE5hTiAg
Ly8ganVua19zdHJpbmdfdmFsdWUuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIwMTIz
OUU0NSIpIC0+IDEyMzllNDUuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCItaW5maW5p
dHkiKSAtPiBOYU4gIC8vIGp1bmtfc3RyaW5nX3ZhbHVlLgorICAgICAgICAvLyAgICBTdHJpbmdU
b0RvdWJsZSgiTmFOIikgLT4gTmFOICAvLyBqdW5rX3N0cmluZ192YWx1ZS4KKyAgICAgICAgU3Ry
aW5nVG9Eb3VibGVDb252ZXJ0ZXIoaW50IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkb3VibGUgZW1wdHlfc3RyaW5nX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkb3VibGUganVua19zdHJpbmdfdmFsdWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGluZmluaXR5X3N5bWJvbCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogbmFuX3N5bWJvbCkKKyAgICAgICAgOiBmbGFn
c18oZmxhZ3MpLAorICAgICAgICBlbXB0eV9zdHJpbmdfdmFsdWVfKGVtcHR5X3N0cmluZ192YWx1
ZSksCisgICAgICAgIGp1bmtfc3RyaW5nX3ZhbHVlXyhqdW5rX3N0cmluZ192YWx1ZSksCisgICAg
ICAgIGluZmluaXR5X3N5bWJvbF8oaW5maW5pdHlfc3ltYm9sKSwKKyAgICAgICAgbmFuX3N5bWJv
bF8obmFuX3N5bWJvbCkgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBQZXJmb3Jt
cyB0aGUgY29udmVyc2lvbi4KKyAgICAgICAgLy8gVGhlIG91dHB1dCBwYXJhbWV0ZXIgJ3Byb2Nl
c3NlZF9jaGFyYWN0ZXJzX2NvdW50JyBpcyBzZXQgdG8gdGhlIG51bWJlcgorICAgICAgICAvLyBv
ZiBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSBiZWVuIHByb2Nlc3NlZCB0byByZWFkIHRoZSBudW1iZXIu
CisgICAgICAgIC8vIFNwYWNlcyB0aGFuIGFyZSBwcm9jZXNzZWQgd2l0aCBBTExPV197TEVBRElO
R3xUUkFJTElOR31fU1BBQ0VTIGFyZSBpbmNsdWRlZAorICAgICAgICAvLyBpbiB0aGUgJ3Byb2Nl
c3NlZF9jaGFyYWN0ZXJzX2NvdW50Jy4gVHJhaWxpbmcganVuayBpcyBuZXZlciBpbmNsdWRlZC4K
KyAgICAgICAgZG91YmxlIFN0cmluZ1RvRG91YmxlKGNvbnN0IGNoYXIqIGJ1ZmZlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQqIHByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50KTsKKyAgICAgICAgCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgaW50IGZsYWdzXzsKKyAgICAgICAgY29uc3QgZG91
YmxlIGVtcHR5X3N0cmluZ192YWx1ZV87CisgICAgICAgIGNvbnN0IGRvdWJsZSBqdW5rX3N0cmlu
Z192YWx1ZV87CisgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IGluZmluaXR5X3N5bWJvbF87Cisg
ICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IG5hbl9zeW1ib2xfOworICAgICAgICAKKyAgICAgICAg
RElTQUxMT1dfSU1QTElDSVRfQ09OU1RSVUNUT1JTKFN0cmluZ1RvRG91YmxlQ29udmVydGVyKTsK
KyAgICB9OworICAgIAorfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCisKKyNlbmRp
ZiAgLy8gRE9VQkxFX0NPTlZFUlNJT05fRE9VQkxFX0NPTlZFUlNJT05fSF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kb3VibGUuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvZHRvYS9kb3VibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mM2QzYjRmMDkxYmVhMDA0NDE4
ZGY0NmQyNmNmNjlkMzU2M2JjNzU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9kdG9hL2RvdWJsZS5oCkBAIC0wLDAgKzEsMjQ1IEBACisvLyBDb3B5cmlnaHQg
MjAxMCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8v
ICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAg
ICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
Ky8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKKyNpZm5kZWYgRE9VQkxFX0NPTlZFUlNJT05fRE9VQkxFX0hfCisjZGVm
aW5lIERPVUJMRV9DT05WRVJTSU9OX0RPVUJMRV9IXworCisjaW5jbHVkZSAiZGl5LWZwLmgiCisK
K25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgLy8gV2UgYXNzdW1lIHRo
YXQgZG91YmxlcyBhbmQgdWludDY0X3QgaGF2ZSB0aGUgc2FtZSBlbmRpYW5uZXNzLgorICAgIHN0
YXRpYyB1aW50NjRfdCBkb3VibGVfdG9fdWludDY0KGRvdWJsZSBkKSB7IHJldHVybiBCaXRDYXN0
PHVpbnQ2NF90PihkKTsgfQorICAgIHN0YXRpYyBkb3VibGUgdWludDY0X3RvX2RvdWJsZSh1aW50
NjRfdCBkNjQpIHsgcmV0dXJuIEJpdENhc3Q8ZG91YmxlPihkNjQpOyB9CisgICAgCisgICAgLy8g
SGVscGVyIGZ1bmN0aW9ucyBmb3IgZG91Ymxlcy4KKyAgICBjbGFzcyBEb3VibGUgeworICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGtTaWduTWFzayA9IFVJTlQ2NF8y
UEFSVF9DKDB4ODAwMDAwMDAsIDAwMDAwMDAwKTsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQ2
NF90IGtFeHBvbmVudE1hc2sgPSBVSU5UNjRfMlBBUlRfQygweDdGRjAwMDAwLCAwMDAwMDAwMCk7
CisgICAgICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBrU2lnbmlmaWNhbmRNYXNrID0gVUlOVDY0
XzJQQVJUX0MoMHgwMDBGRkZGRiwgRkZGRkZGRkYpOworICAgICAgICBzdGF0aWMgY29uc3QgdWlu
dDY0X3Qga0hpZGRlbkJpdCA9IFVJTlQ2NF8yUEFSVF9DKDB4MDAxMDAwMDAsIDAwMDAwMDAwKTsK
KyAgICAgICAgc3RhdGljIGNvbnN0IGludCBrUGh5c2ljYWxTaWduaWZpY2FuZFNpemUgPSA1Mjsg
IC8vIEV4Y2x1ZGVzIHRoZSBoaWRkZW4gYml0LgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtT
aWduaWZpY2FuZFNpemUgPSA1MzsKKyAgICAgICAgCisgICAgICAgIERvdWJsZSgpIDogZDY0Xygw
KSB7fQorICAgICAgICBleHBsaWNpdCBEb3VibGUoZG91YmxlIGQpIDogZDY0Xyhkb3VibGVfdG9f
dWludDY0KGQpKSB7fQorICAgICAgICBleHBsaWNpdCBEb3VibGUodWludDY0X3QgZDY0KSA6IGQ2
NF8oZDY0KSB7fQorICAgICAgICBleHBsaWNpdCBEb3VibGUoRGl5RnAgZGl5X2ZwKQorICAgICAg
ICA6IGQ2NF8oRGl5RnBUb1VpbnQ2NChkaXlfZnApKSB7fQorICAgICAgICAKKyAgICAgICAgLy8g
VGhlIHZhbHVlIGVuY29kZWQgYnkgdGhpcyBEb3VibGUgbXVzdCBiZSBncmVhdGVyIG9yIGVxdWFs
IHRvICswLjAuCisgICAgICAgIC8vIEl0IG11c3Qgbm90IGJlIHNwZWNpYWwgKGluZmluaXR5LCBv
ciBOYU4pLgorICAgICAgICBEaXlGcCBBc0RpeUZwKCkgY29uc3QgeworICAgICAgICAgICAgQVNT
RVJUKFNpZ24oKSA+IDApOworICAgICAgICAgICAgQVNTRVJUKCFJc1NwZWNpYWwoKSk7CisgICAg
ICAgICAgICByZXR1cm4gRGl5RnAoU2lnbmlmaWNhbmQoKSwgRXhwb25lbnQoKSk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSB2YWx1ZSBlbmNvZGVkIGJ5IHRoaXMgRG91Ymxl
IG11c3QgYmUgc3RyaWN0bHkgZ3JlYXRlciB0aGFuIDAuCisgICAgICAgIERpeUZwIEFzTm9ybWFs
aXplZERpeUZwKCkgY29uc3QgeworICAgICAgICAgICAgQVNTRVJUKHZhbHVlKCkgPiAwLjApOwor
ICAgICAgICAgICAgdWludDY0X3QgZiA9IFNpZ25pZmljYW5kKCk7CisgICAgICAgICAgICBpbnQg
ZSA9IEV4cG9uZW50KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoZSBjdXJyZW50
IGRvdWJsZSBjb3VsZCBiZSBhIGRlbm9ybWFsLgorICAgICAgICAgICAgd2hpbGUgKChmICYga0hp
ZGRlbkJpdCkgPT0gMCkgeworICAgICAgICAgICAgICAgIGYgPDw9IDE7CisgICAgICAgICAgICAg
ICAgZS0tOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gRG8gdGhlIGZpbmFsIHNoaWZ0
cyBpbiBvbmUgZ28uCisgICAgICAgICAgICBmIDw8PSBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSAt
IGtTaWduaWZpY2FuZFNpemU7CisgICAgICAgICAgICBlIC09IERpeUZwOjprU2lnbmlmaWNhbmRT
aXplIC0ga1NpZ25pZmljYW5kU2l6ZTsKKyAgICAgICAgICAgIHJldHVybiBEaXlGcChmLCBlKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJucyB0aGUgZG91YmxlJ3MgYml0
IGFzIHVpbnQ2NC4KKyAgICAgICAgdWludDY0X3QgQXNVaW50NjQoKSBjb25zdCB7CisgICAgICAg
ICAgICByZXR1cm4gZDY0XzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJu
cyB0aGUgbmV4dCBncmVhdGVyIGRvdWJsZS4gUmV0dXJucyAraW5maW5pdHkgb24gaW5wdXQgK2lu
ZmluaXR5LgorICAgICAgICBkb3VibGUgTmV4dERvdWJsZSgpIGNvbnN0IHsKKyAgICAgICAgICAg
IGlmIChkNjRfID09IGtJbmZpbml0eSkgcmV0dXJuIERvdWJsZShrSW5maW5pdHkpLnZhbHVlKCk7
CisgICAgICAgICAgICBpZiAoU2lnbigpIDwgMCAmJiBTaWduaWZpY2FuZCgpID09IDApIHsKKyAg
ICAgICAgICAgICAgICAvLyAtMC4wCisgICAgICAgICAgICAgICAgcmV0dXJuIDAuMDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChTaWduKCkgPCAwKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIERvdWJsZShkNjRfIC0gMSkudmFsdWUoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIERvdWJsZShkNjRfICsgMSkudmFsdWUoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaW50IEV4cG9uZW50KCkgY29uc3Qg
eworICAgICAgICAgICAgaWYgKElzRGVub3JtYWwoKSkgcmV0dXJuIGtEZW5vcm1hbEV4cG9uZW50
OworICAgICAgICAgICAgCisgICAgICAgICAgICB1aW50NjRfdCBkNjQgPSBBc1VpbnQ2NCgpOwor
ICAgICAgICAgICAgaW50IGJpYXNlZF9lID0KKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4o
KGQ2NCAmIGtFeHBvbmVudE1hc2spID4+IGtQaHlzaWNhbFNpZ25pZmljYW5kU2l6ZSk7CisgICAg
ICAgICAgICByZXR1cm4gYmlhc2VkX2UgLSBrRXhwb25lbnRCaWFzOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICB1aW50NjRfdCBTaWduaWZpY2FuZCgpIGNvbnN0IHsKKyAgICAgICAgICAg
IHVpbnQ2NF90IGQ2NCA9IEFzVWludDY0KCk7CisgICAgICAgICAgICB1aW50NjRfdCBzaWduaWZp
Y2FuZCA9IGQ2NCAmIGtTaWduaWZpY2FuZE1hc2s7CisgICAgICAgICAgICBpZiAoIUlzRGVub3Jt
YWwoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBzaWduaWZpY2FuZCArIGtIaWRkZW5CaXQ7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBzaWduaWZpY2Fu
ZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZSBkb3VibGUgaXMgYSBkZW5vcm1hbC4KKyAgICAgICAgYm9vbCBJc0Rlbm9y
bWFsKCkgY29uc3QgeworICAgICAgICAgICAgdWludDY0X3QgZDY0ID0gQXNVaW50NjQoKTsKKyAg
ICAgICAgICAgIHJldHVybiAoZDY0ICYga0V4cG9uZW50TWFzaykgPT0gMDsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgLy8gV2UgY29uc2lkZXIgZGVub3JtYWxzIG5vdCB0byBiZSBzcGVj
aWFsLgorICAgICAgICAvLyBIZW5jZSBvbmx5IEluZmluaXR5IGFuZCBOYU4gYXJlIHNwZWNpYWwu
CisgICAgICAgIGJvb2wgSXNTcGVjaWFsKCkgY29uc3QgeworICAgICAgICAgICAgdWludDY0X3Qg
ZDY0ID0gQXNVaW50NjQoKTsKKyAgICAgICAgICAgIHJldHVybiAoZDY0ICYga0V4cG9uZW50TWFz
aykgPT0ga0V4cG9uZW50TWFzazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBJ
c05hbigpIGNvbnN0IHsKKyAgICAgICAgICAgIHVpbnQ2NF90IGQ2NCA9IEFzVWludDY0KCk7Cisg
ICAgICAgICAgICByZXR1cm4gKChkNjQgJiBrRXhwb25lbnRNYXNrKSA9PSBrRXhwb25lbnRNYXNr
KSAmJgorICAgICAgICAgICAgKChkNjQgJiBrU2lnbmlmaWNhbmRNYXNrKSAhPSAwKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBJc0luZmluaXRlKCkgY29uc3QgeworICAgICAg
ICAgICAgdWludDY0X3QgZDY0ID0gQXNVaW50NjQoKTsKKyAgICAgICAgICAgIHJldHVybiAoKGQ2
NCAmIGtFeHBvbmVudE1hc2spID09IGtFeHBvbmVudE1hc2spICYmCisgICAgICAgICAgICAoKGQ2
NCAmIGtTaWduaWZpY2FuZE1hc2spID09IDApOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpbnQgU2lnbigpIGNvbnN0IHsKKyAgICAgICAgICAgIHVpbnQ2NF90IGQ2NCA9IEFzVWludDY0
KCk7CisgICAgICAgICAgICByZXR1cm4gKGQ2NCAmIGtTaWduTWFzaykgPT0gMD8gMTogLTE7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFByZWNvbmRpdGlvbjogdGhlIHZhbHVlIGVu
Y29kZWQgYnkgdGhpcyBEb3VibGUgbXVzdCBiZSBncmVhdGVyIG9yIGVxdWFsCisgICAgICAgIC8v
IHRoYW4gKzAuMC4KKyAgICAgICAgRGl5RnAgVXBwZXJCb3VuZGFyeSgpIGNvbnN0IHsKKyAgICAg
ICAgICAgIEFTU0VSVChTaWduKCkgPiAwKTsKKyAgICAgICAgICAgIHJldHVybiBEaXlGcChTaWdu
aWZpY2FuZCgpICogMiArIDEsIEV4cG9uZW50KCkgLSAxKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgLy8gQ29tcHV0ZXMgdGhlIHR3byBib3VuZGFyaWVzIG9mIHRoaXMuCisgICAgICAg
IC8vIFRoZSBiaWdnZXIgYm91bmRhcnkgKG1fcGx1cykgaXMgbm9ybWFsaXplZC4gVGhlIGxvd2Vy
IGJvdW5kYXJ5IGhhcyB0aGUgc2FtZQorICAgICAgICAvLyBleHBvbmVudCBhcyBtX3BsdXMuCisg
ICAgICAgIC8vIFByZWNvbmRpdGlvbjogdGhlIHZhbHVlIGVuY29kZWQgYnkgdGhpcyBEb3VibGUg
bXVzdCBiZSBncmVhdGVyIHRoYW4gMC4KKyAgICAgICAgdm9pZCBOb3JtYWxpemVkQm91bmRhcmll
cyhEaXlGcCogb3V0X21fbWludXMsIERpeUZwKiBvdXRfbV9wbHVzKSBjb25zdCB7CisgICAgICAg
ICAgICBBU1NFUlQodmFsdWUoKSA+IDAuMCk7CisgICAgICAgICAgICBEaXlGcCB2ID0gdGhpcy0+
QXNEaXlGcCgpOworICAgICAgICAgICAgYm9vbCBzaWduaWZpY2FuZF9pc196ZXJvID0gKHYuZigp
ID09IGtIaWRkZW5CaXQpOworICAgICAgICAgICAgRGl5RnAgbV9wbHVzID0gRGl5RnA6Ok5vcm1h
bGl6ZShEaXlGcCgodi5mKCkgPDwgMSkgKyAxLCB2LmUoKSAtIDEpKTsKKyAgICAgICAgICAgIERp
eUZwIG1fbWludXM7CisgICAgICAgICAgICBpZiAoc2lnbmlmaWNhbmRfaXNfemVybyAmJiB2LmUo
KSAhPSBrRGVub3JtYWxFeHBvbmVudCkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBib3VuZGFy
eSBpcyBjbG9zZXIuIFRoaW5rIG9mIHYgPSAxMDAwZTEwIGFuZCB2LSA9IDk5OTllOS4KKyAgICAg
ICAgICAgICAgICAvLyBUaGVuIHRoZSBib3VuZGFyeSAoPT0gKHYgLSB2LSkvMikgaXMgbm90IGp1
c3QgYXQgYSBkaXN0YW5jZSBvZiAxZTkgYnV0CisgICAgICAgICAgICAgICAgLy8gYXQgYSBkaXN0
YW5jZSBvZiAxZTguCisgICAgICAgICAgICAgICAgLy8gVGhlIG9ubHkgZXhjZXB0aW9uIGlzIGZv
ciB0aGUgc21hbGxlc3Qgbm9ybWFsOiB0aGUgbGFyZ2VzdCBkZW5vcm1hbCBpcworICAgICAgICAg
ICAgICAgIC8vIGF0IHRoZSBzYW1lIGRpc3RhbmNlIGFzIGl0cyBzdWNjZXNzb3IuCisgICAgICAg
ICAgICAgICAgLy8gTm90ZTogZGVub3JtYWxzIGhhdmUgdGhlIHNhbWUgZXhwb25lbnQgYXMgdGhl
IHNtYWxsZXN0IG5vcm1hbHMuCisgICAgICAgICAgICAgICAgbV9taW51cyA9IERpeUZwKCh2LmYo
KSA8PCAyKSAtIDEsIHYuZSgpIC0gMik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIG1fbWludXMgPSBEaXlGcCgodi5mKCkgPDwgMSkgLSAxLCB2LmUoKSAtIDEpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgbV9taW51cy5zZXRfZihtX21pbnVzLmYoKSA8PCAobV9t
aW51cy5lKCkgLSBtX3BsdXMuZSgpKSk7CisgICAgICAgICAgICBtX21pbnVzLnNldF9lKG1fcGx1
cy5lKCkpOworICAgICAgICAgICAgKm91dF9tX3BsdXMgPSBtX3BsdXM7CisgICAgICAgICAgICAq
b3V0X21fbWludXMgPSBtX21pbnVzOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBkb3Vi
bGUgdmFsdWUoKSBjb25zdCB7IHJldHVybiB1aW50NjRfdG9fZG91YmxlKGQ2NF8pOyB9CisgICAg
ICAgIAorICAgICAgICAvLyBSZXR1cm5zIHRoZSBzaWduaWZpY2FuZCBzaXplIGZvciBhIGdpdmVu
IG9yZGVyIG9mIG1hZ25pdHVkZS4KKyAgICAgICAgLy8gSWYgdiA9IGYqMl5lIHdpdGggMl5wLTEg
PD0gZiA8PSAyXnAgdGhlbiBwK2UgaXMgdidzIG9yZGVyIG9mIG1hZ25pdHVkZS4KKyAgICAgICAg
Ly8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgYmluYXJ5
IGRpZ2l0cyB2IHdpbGwgaGF2ZQorICAgICAgICAvLyBvbmNlIGl0J3MgZW5jb2RlZCBpbnRvIGEg
ZG91YmxlLiBJbiBhbG1vc3QgYWxsIGNhc2VzIHRoaXMgaXMgZXF1YWwgdG8KKyAgICAgICAgLy8g
a1NpZ25pZmljYW5kU2l6ZS4gVGhlIG9ubHkgZXhjZXB0aW9ucyBhcmUgZGVub3JtYWxzLiBUaGV5
IHN0YXJ0IHdpdGgKKyAgICAgICAgLy8gbGVhZGluZyB6ZXJvZXMgYW5kIHRoZWlyIGVmZmVjdGl2
ZSBzaWduaWZpY2FuZC1zaXplIGlzIGhlbmNlIHNtYWxsZXIuCisgICAgICAgIHN0YXRpYyBpbnQg
U2lnbmlmaWNhbmRTaXplRm9yT3JkZXJPZk1hZ25pdHVkZShpbnQgb3JkZXIpIHsKKyAgICAgICAg
ICAgIGlmIChvcmRlciA+PSAoa0Rlbm9ybWFsRXhwb25lbnQgKyBrU2lnbmlmaWNhbmRTaXplKSkg
eworICAgICAgICAgICAgICAgIHJldHVybiBrU2lnbmlmaWNhbmRTaXplOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKG9yZGVyIDw9IGtEZW5vcm1hbEV4cG9uZW50KSByZXR1cm4gMDsK
KyAgICAgICAgICAgIHJldHVybiBvcmRlciAtIGtEZW5vcm1hbEV4cG9uZW50OworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBzdGF0aWMgZG91YmxlIEluZmluaXR5KCkgeworICAgICAgICAg
ICAgcmV0dXJuIERvdWJsZShrSW5maW5pdHkpLnZhbHVlKCk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHN0YXRpYyBkb3VibGUgTmFOKCkgeworICAgICAgICAgICAgcmV0dXJuIERvdWJs
ZShrTmFOKS52YWx1ZSgpOworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQga0V4cG9uZW50QmlhcyA9IDB4M0ZGICsga1BoeXNpY2FsU2ln
bmlmaWNhbmRTaXplOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtEZW5vcm1hbEV4cG9uZW50
ID0gLWtFeHBvbmVudEJpYXMgKyAxOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtNYXhFeHBv
bmVudCA9IDB4N0ZGIC0ga0V4cG9uZW50QmlhczsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQ2
NF90IGtJbmZpbml0eSA9IFVJTlQ2NF8yUEFSVF9DKDB4N0ZGMDAwMDAsIDAwMDAwMDAwKTsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGtOYU4gPSBVSU5UNjRfMlBBUlRfQygweDdGRjgw
MDAwLCAwMDAwMDAwMCk7CisgICAgICAgIAorICAgICAgICBjb25zdCB1aW50NjRfdCBkNjRfOwor
ICAgICAgICAKKyAgICAgICAgc3RhdGljIHVpbnQ2NF90IERpeUZwVG9VaW50NjQoRGl5RnAgZGl5
X2ZwKSB7CisgICAgICAgICAgICB1aW50NjRfdCBzaWduaWZpY2FuZCA9IGRpeV9mcC5mKCk7Cisg
ICAgICAgICAgICBpbnQgZXhwb25lbnQgPSBkaXlfZnAuZSgpOworICAgICAgICAgICAgd2hpbGUg
KHNpZ25pZmljYW5kID4ga0hpZGRlbkJpdCArIGtTaWduaWZpY2FuZE1hc2spIHsKKyAgICAgICAg
ICAgICAgICBzaWduaWZpY2FuZCA+Pj0gMTsKKyAgICAgICAgICAgICAgICBleHBvbmVudCsrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGV4cG9uZW50ID49IGtNYXhFeHBvbmVudCkg
eworICAgICAgICAgICAgICAgIHJldHVybiBrSW5maW5pdHk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoZXhwb25lbnQgPCBrRGVub3JtYWxFeHBvbmVudCkgeworICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hpbGUgKGV4cG9uZW50
ID4ga0Rlbm9ybWFsRXhwb25lbnQgJiYgKHNpZ25pZmljYW5kICYga0hpZGRlbkJpdCkgPT0gMCkg
eworICAgICAgICAgICAgICAgIHNpZ25pZmljYW5kIDw8PSAxOworICAgICAgICAgICAgICAgIGV4
cG9uZW50LS07CisgICAgICAgICAgICB9CisgICAgICAgICAgICB1aW50NjRfdCBiaWFzZWRfZXhw
b25lbnQ7CisgICAgICAgICAgICBpZiAoZXhwb25lbnQgPT0ga0Rlbm9ybWFsRXhwb25lbnQgJiYg
KHNpZ25pZmljYW5kICYga0hpZGRlbkJpdCkgPT0gMCkgeworICAgICAgICAgICAgICAgIGJpYXNl
ZF9leHBvbmVudCA9IDA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJp
YXNlZF9leHBvbmVudCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihleHBvbmVudCArIGtFeHBvbmVu
dEJpYXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIChzaWduaWZpY2FuZCAm
IGtTaWduaWZpY2FuZE1hc2spIHwKKyAgICAgICAgICAgIChiaWFzZWRfZXhwb25lbnQgPDwga1Bo
eXNpY2FsU2lnbmlmaWNhbmRTaXplKTsKKyAgICAgICAgfQorICAgIH07CisgICAgCit9ICAvLyBu
YW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KKworI2VuZGlmICAvLyBET1VCTEVfQ09OVkVSU0lP
Tl9ET1VCTEVfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9m
YXN0LWR0b2EuY2MgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZmFzdC1kdG9hLmNj
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmRkODY4ZTBiMzhhNzUzOGU1ZjlkYTcwNWE5OWQwYWVlMjAyNDg4MDAKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZmFzdC1kdG9h
LmNjCkBAIC0wLDAgKzEsNzM1IEBACisvLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJvamVjdCBh
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
Ky8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpbmNs
dWRlICJmYXN0LWR0b2EuaCIKKworI2luY2x1ZGUgImNhY2hlZC1wb3dlcnMuaCIKKyNpbmNsdWRl
ICJkaXktZnAuaCIKKyNpbmNsdWRlICJkb3VibGUuaCIKKworbmFtZXNwYWNlIGRvdWJsZV9jb252
ZXJzaW9uIHsKKyAgICAKKyAgICAvLyBUaGUgbWluaW1hbCBhbmQgbWF4aW1hbCB0YXJnZXQgZXhw
b25lbnQgZGVmaW5lIHRoZSByYW5nZSBvZiB3J3MgYmluYXJ5CisgICAgLy8gZXhwb25lbnQsIHdo
ZXJlICd3JyBpcyB0aGUgcmVzdWx0IG9mIG11bHRpcGx5aW5nIHRoZSBpbnB1dCBieSBhIGNhY2hl
ZCBwb3dlcgorICAgIC8vIG9mIHRlbi4KKyAgICAvLworICAgIC8vIEEgZGlmZmVyZW50IHJhbmdl
IG1pZ2h0IGJlIGNob3NlbiBvbiBhIGRpZmZlcmVudCBwbGF0Zm9ybSwgdG8gb3B0aW1pemUgZGln
aXQKKyAgICAvLyBnZW5lcmF0aW9uLCBidXQgYSBzbWFsbGVyIHJhbmdlIHJlcXVpcmVzIG1vcmUg
cG93ZXJzIG9mIHRlbiB0byBiZSBjYWNoZWQuCisgICAgc3RhdGljIGNvbnN0IGludCBrTWluaW1h
bFRhcmdldEV4cG9uZW50ID0gLTYwOworICAgIHN0YXRpYyBjb25zdCBpbnQga01heGltYWxUYXJn
ZXRFeHBvbmVudCA9IC0zMjsKKyAgICAKKyAgICAKKyAgICAvLyBBZGp1c3RzIHRoZSBsYXN0IGRp
Z2l0IG9mIHRoZSBnZW5lcmF0ZWQgbnVtYmVyLCBhbmQgc2NyZWVucyBvdXQgZ2VuZXJhdGVkCisg
ICAgLy8gc29sdXRpb25zIHRoYXQgbWF5IGJlIGluYWNjdXJhdGUuIEEgc29sdXRpb24gbWF5IGJl
IGluYWNjdXJhdGUgaWYgaXQgaXMKKyAgICAvLyBvdXRzaWRlIHRoZSBzYWZlIGludGVydmFsLCBv
ciBpZiB3ZSBjYW5ub3QgcHJvdmUgdGhhdCBpdCBpcyBjbG9zZXIgdG8gdGhlCisgICAgLy8gaW5w
dXQgdGhhbiBhIG5laWdoYm9yaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzYW1lIGxlbmd0aC4K
KyAgICAvLworICAgIC8vIElucHV0OiAqIGJ1ZmZlciBjb250YWluaW5nIHRoZSBkaWdpdHMgb2Yg
dG9vX2hpZ2ggLyAxMF5rYXBwYQorICAgIC8vICAgICAgICAqIHRoZSBidWZmZXIncyBsZW5ndGgK
KyAgICAvLyAgICAgICAgKiBkaXN0YW5jZV90b29faGlnaF93ID09ICh0b29faGlnaCAtIHcpLmYo
KSAqIHVuaXQKKyAgICAvLyAgICAgICAgKiB1bnNhZmVfaW50ZXJ2YWwgPT0gKHRvb19oaWdoIC0g
dG9vX2xvdykuZigpICogdW5pdAorICAgIC8vICAgICAgICAqIHJlc3QgPSAodG9vX2hpZ2ggLSBi
dWZmZXIgKiAxMF5rYXBwYSkuZigpICogdW5pdAorICAgIC8vICAgICAgICAqIHRlbl9rYXBwYSA9
IDEwXmthcHBhICogdW5pdAorICAgIC8vICAgICAgICAqIHVuaXQgPSB0aGUgY29tbW9uIG11bHRp
cGxpZXIKKyAgICAvLyBPdXRwdXQ6IHJldHVybnMgdHJ1ZSBpZiB0aGUgYnVmZmVyIGlzIGd1YXJh
bnRlZWQgdG8gY29udGFpbiB0aGUgY2xvc2VzdAorICAgIC8vICAgIHJlcHJlc2VudGFibGUgbnVt
YmVyIHRvIHRoZSBpbnB1dC4KKyAgICAvLyAgTW9kaWZpZXMgdGhlIGdlbmVyYXRlZCBkaWdpdHMg
aW4gdGhlIGJ1ZmZlciB0byBhcHByb2FjaCAocm91bmQgdG93YXJkcykgdy4KKyAgICBzdGF0aWMg
Ym9vbCBSb3VuZFdlZWQoVmVjdG9yPGNoYXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgZGlz
dGFuY2VfdG9vX2hpZ2hfdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgdW5z
YWZlX2ludGVydmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCByZXN0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCB0ZW5fa2FwcGEsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVpbnQ2NF90IHVuaXQpIHsKKyAgICAgICAgdWludDY0X3Qgc21hbGxf
ZGlzdGFuY2UgPSBkaXN0YW5jZV90b29faGlnaF93IC0gdW5pdDsKKyAgICAgICAgdWludDY0X3Qg
YmlnX2Rpc3RhbmNlID0gZGlzdGFuY2VfdG9vX2hpZ2hfdyArIHVuaXQ7CisgICAgICAgIC8vIExl
dCB3X2xvdyAgPSB0b29faGlnaCAtIGJpZ19kaXN0YW5jZSwgYW5kCisgICAgICAgIC8vICAgICB3
X2hpZ2ggPSB0b29faGlnaCAtIHNtYWxsX2Rpc3RhbmNlLgorICAgICAgICAvLyBOb3RlOiB3X2xv
dyA8IHcgPCB3X2hpZ2gKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhlIHJlYWwgdyAoKiB1bml0
KSBtdXN0IGxpZSBzb21ld2hlcmUgaW5zaWRlIHRoZSBpbnRlcnZhbAorICAgICAgICAvLyBdd19s
b3c7IHdfaGlnaFsgKG9mdGVuIHdyaXR0ZW4gYXMgIih3X2xvdzsgd19oaWdoKSIpCisgICAgICAg
IAorICAgICAgICAvLyBCYXNpY2FsbHkgdGhlIGJ1ZmZlciBjdXJyZW50bHkgY29udGFpbnMgYSBu
dW1iZXIgaW4gdGhlIHVuc2FmZSBpbnRlcnZhbAorICAgICAgICAvLyBddG9vX2xvdzsgdG9vX2hp
Z2hbIHdpdGggdG9vX2xvdyA8IHcgPCB0b29faGlnaAorICAgICAgICAvLworICAgICAgICAvLyAg
dG9vX2hpZ2ggLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g
LSAtIC0gLSAtIC0gLSAtIC0KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBediAxIHVu
aXQgICAgICAgICAgICBeICAgICAgXiAgICAgICAgICAgICAgICAgXiAgICAgIF4KKyAgICAgICAg
Ly8gIGJvdW5kYXJ5X2hpZ2ggLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAuICAgICAgLiAgICAg
ICAgICAgICAgICAgLiAgICAgIC4KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBediAx
IHVuaXQgICAgICAgICAgICAuICAgICAgLiAgICAgICAgICAgICAgICAgLiAgICAgIC4KKyAgICAg
ICAgLy8gICAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICArICAtIC0gKyAt
IC0gLSAtIC0gLSAgICAgLiAgICAgIC4KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAuICAgICAgLiAgICAgICAgIF4gICAgICAgLiAgICAgIC4KKyAg
ICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICBiaWdf
ZGlzdGFuY2UgIC4gICAgICAgLiAgICAgIC4KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAuICAgICAgLiAgICAgICAgIC4gICAgICAgLiAgICByZXN0
CisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21hbGxfZGlzdGFuY2Ug
ICAgIC4gICAgICAgICAuICAgICAgIC4gICAgICAuCisgICAgICAgIC8vICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdiAgICAgIC4gICAgICAgICAuICAgICAgIC4gICAg
ICAuCisgICAgICAgIC8vICB3X2hpZ2ggLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAt
IC0gICAgIC4gICAgICAgICAuICAgICAgIC4gICAgICAuCisgICAgICAgIC8vICAgICAgICAgICAg
ICAgICAgICAgXnYgMSB1bml0ICAgICAgICAgICAgICAgICAgIC4gICAgICAgICAuICAgICAgIC4g
ICAgICAuCisgICAgICAgIC8vICB3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0gICAgIC4gICAgICAgICAuICAgICAgIC4gICAgICAuCisgICAgICAgIC8vICAgICAgICAg
ICAgICAgICAgICAgXnYgMSB1bml0ICAgICAgICAgICAgICAgICAgIHYgICAgICAgICAuICAgICAg
IC4gICAgICAuCisgICAgICAgIC8vICB3X2xvdyAgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAt
IC0gLSAtIC0gLSAtIC0gICAgICAgICAuICAgICAgIC4gICAgICAuCisgICAgICAgIC8vICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICAg
ICAgIC4gICAgICB2CisgICAgICAgIC8vICBidWZmZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLQorICAgICAgICAvLyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LiAgICAgICAuCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzYWZlX2ludGVydmFsICAgIC4KKyAgICAgICAgLy8gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgICAgICAgLgor
ICAgICAgICAvLyAgIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g
LSAtIC0gLSAtIC0gLSAtICAgICAuCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXnYg
MSB1bml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4KKyAgICAgICAgLy8g
IGJvdW5kYXJ5X2xvdyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAg
ICAgdW5zYWZlX2ludGVydmFsCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXnYgMSB1
bml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYKKyAgICAgICAgLy8gIHRv
b19sb3cgIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g
LSAtIC0gLSAtIC0gLSAtCisgICAgICAgIC8vCisgICAgICAgIC8vCisgICAgICAgIC8vIE5vdGUg
dGhhdCB0aGUgdmFsdWUgb2YgYnVmZmVyIGNvdWxkIGxpZSBhbnl3aGVyZSBpbnNpZGUgdGhlIHJh
bmdlIHRvb19sb3cKKyAgICAgICAgLy8gdG8gdG9vX2hpZ2guCisgICAgICAgIC8vCisgICAgICAg
IC8vIGJvdW5kYXJ5X2xvdywgYm91bmRhcnlfaGlnaCBhbmQgdyBhcmUgYXBwcm94aW1hdGlvbnMg
b2YgdGhlIHJlYWwgYm91bmRhcmllcworICAgICAgICAvLyBhbmQgdiAodGhlIGlucHV0IG51bWJl
cikuIFRoZXkgYXJlIGd1YXJhbnRlZWQgdG8gYmUgcHJlY2lzZSB1cCB0byBvbmUgdW5pdC4KKyAg
ICAgICAgLy8gSW4gZmFjdCB0aGUgZXJyb3IgaXMgZ3VhcmFudGVlZCB0byBiZSBzdHJpY3RseSBs
ZXNzIHRoYW4gb25lIHVuaXQuCisgICAgICAgIC8vCisgICAgICAgIC8vIEFueXRoaW5nIHRoYXQg
bGllcyBvdXRzaWRlIHRoZSB1bnNhZmUgaW50ZXJ2YWwgaXMgZ3VhcmFudGVlZCBub3QgdG8gcm91
bmQKKyAgICAgICAgLy8gdG8gdiB3aGVuIHJlYWQgYWdhaW4uCisgICAgICAgIC8vIEFueXRoaW5n
IHRoYXQgbGllcyBpbnNpZGUgdGhlIHNhZmUgaW50ZXJ2YWwgaXMgZ3VhcmFudGVlZCB0byByb3Vu
ZCB0byB2CisgICAgICAgIC8vIHdoZW4gcmVhZCBhZ2Fpbi4KKyAgICAgICAgLy8gSWYgdGhlIG51
bWJlciBpbnNpZGUgdGhlIGJ1ZmZlciBsaWVzIGluc2lkZSB0aGUgdW5zYWZlIGludGVydmFsIGJ1
dCBub3QKKyAgICAgICAgLy8gaW5zaWRlIHRoZSBzYWZlIGludGVydmFsIHRoZW4gd2Ugc2ltcGx5
IGRvIG5vdCBrbm93IGFuZCBiYWlsIG91dCAocmV0dXJuaW5nCisgICAgICAgIC8vIGZhbHNlKS4K
KyAgICAgICAgLy8KKyAgICAgICAgLy8gU2ltaWxhcmx5IHdlIGhhdmUgdG8gdGFrZSBpbnRvIGFj
Y291bnQgdGhlIGltcHJlY2lzaW9uIG9mICd3JyB3aGVuIGZpbmRpbmcKKyAgICAgICAgLy8gdGhl
IGNsb3Nlc3QgcmVwcmVzZW50YXRpb24gb2YgJ3cnLiBJZiB3ZSBoYXZlIHR3byBwb3RlbnRpYWwK
KyAgICAgICAgLy8gcmVwcmVzZW50YXRpb25zLCBhbmQgb25lIGlzIGNsb3NlciB0byBib3RoIHdf
bG93IGFuZCB3X2hpZ2gsIHRoZW4gd2Uga25vdworICAgICAgICAvLyBpdCBpcyBjbG9zZXIgdG8g
dGhlIGFjdHVhbCB2YWx1ZSB2LgorICAgICAgICAvLworICAgICAgICAvLyBCeSBnZW5lcmF0aW5n
IHRoZSBkaWdpdHMgb2YgdG9vX2hpZ2ggd2UgZ290IHRoZSBsYXJnZXN0IChjbG9zZXN0IHRvCisg
ICAgICAgIC8vIHRvb19oaWdoKSBidWZmZXIgdGhhdCBpcyBzdGlsbCBpbiB0aGUgdW5zYWZlIGlu
dGVydmFsLiBJbiB0aGUgY2FzZSB3aGVyZQorICAgICAgICAvLyB3X2hpZ2ggPCBidWZmZXIgPCB0
b29faGlnaCB3ZSB0cnkgdG8gZGVjcmVtZW50IHRoZSBidWZmZXIuCisgICAgICAgIC8vIFRoaXMg
d2F5IHRoZSBidWZmZXIgYXBwcm9hY2hlcyAocm91bmRzIHRvd2FyZHMpIHcuCisgICAgICAgIC8v
IFRoZXJlIGFyZSAzIGNvbmRpdGlvbnMgdGhhdCBzdG9wIHRoZSBkZWNyZW1lbnRhdGlvbiBwcm9j
ZXNzOgorICAgICAgICAvLyAgIDEpIHRoZSBidWZmZXIgaXMgYWxyZWFkeSBiZWxvdyB3X2hpZ2gK
KyAgICAgICAgLy8gICAyKSBkZWNyZW1lbnRpbmcgdGhlIGJ1ZmZlciB3b3VsZCBtYWtlIGl0IGxl
YXZlIHRoZSB1bnNhZmUgaW50ZXJ2YWwKKyAgICAgICAgLy8gICAzKSBkZWNyZW1lbnRpbmcgdGhl
IGJ1ZmZlciB3b3VsZCB5aWVsZCBhIG51bWJlciBiZWxvdyB3X2hpZ2ggYW5kIGZhcnRoZXIKKyAg
ICAgICAgLy8gICAgICBhd2F5IHRoYW4gdGhlIGN1cnJlbnQgbnVtYmVyLiBJbiBvdGhlciB3b3Jk
czoKKyAgICAgICAgLy8gICAgICAgICAgICAgIChidWZmZXJ7LTF9IDwgd19oaWdoKSAmJiB3X2hp
Z2ggLSBidWZmZXJ7LTF9ID4gYnVmZmVyIC0gd19oaWdoCisgICAgICAgIC8vIEluc3RlYWQgb2Yg
dXNpbmcgdGhlIGJ1ZmZlciBkaXJlY3RseSB3ZSB1c2UgaXRzIGRpc3RhbmNlIHRvIHRvb19oaWdo
LgorICAgICAgICAvLyBDb25jZXB0dWFsbHkgcmVzdCB+PSB0b29faGlnaCAtIGJ1ZmZlcgorICAg
ICAgICAvLyBXZSBuZWVkIHRvIGRvIHRoZSBmb2xsb3dpbmcgdGVzdHMgaW4gdGhpcyBvcmRlciB0
byBhdm9pZCBvdmVyLSBhbmQKKyAgICAgICAgLy8gdW5kZXJmbG93cy4KKyAgICAgICAgQVNTRVJU
KHJlc3QgPD0gdW5zYWZlX2ludGVydmFsKTsKKyAgICAgICAgd2hpbGUgKHJlc3QgPCBzbWFsbF9k
aXN0YW5jZSAmJiAgLy8gTmVnYXRlZCBjb25kaXRpb24gMQorICAgICAgICAgICAgICAgdW5zYWZl
X2ludGVydmFsIC0gcmVzdCA+PSB0ZW5fa2FwcGEgJiYgIC8vIE5lZ2F0ZWQgY29uZGl0aW9uIDIK
KyAgICAgICAgICAgICAgIChyZXN0ICsgdGVuX2thcHBhIDwgc21hbGxfZGlzdGFuY2UgfHwgIC8v
IGJ1ZmZlcnstMX0gPiB3X2hpZ2gKKyAgICAgICAgICAgICAgICBzbWFsbF9kaXN0YW5jZSAtIHJl
c3QgPj0gcmVzdCArIHRlbl9rYXBwYSAtIHNtYWxsX2Rpc3RhbmNlKSkgeworICAgICAgICAgICAg
ICAgICAgIGJ1ZmZlcltsZW5ndGggLSAxXS0tOworICAgICAgICAgICAgICAgICAgIHJlc3QgKz0g
dGVuX2thcHBhOworICAgICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gV2UgaGF2
ZSBhcHByb2FjaGVkIHcrIGFzIG11Y2ggYXMgcG9zc2libGUuIFdlIG5vdyB0ZXN0IGlmIGFwcHJv
YWNoaW5nIHctCisgICAgICAgIC8vIHdvdWxkIHJlcXVpcmUgY2hhbmdpbmcgdGhlIGJ1ZmZlci4g
SWYgeWVzLCB0aGVuIHdlIGhhdmUgdHdvIHBvc3NpYmxlCisgICAgICAgIC8vIHJlcHJlc2VudGF0
aW9ucyBjbG9zZSB0byB3LCBidXQgd2UgY2Fubm90IGRlY2lkZSB3aGljaCBvbmUgaXMgY2xvc2Vy
LgorICAgICAgICBpZiAocmVzdCA8IGJpZ19kaXN0YW5jZSAmJgorICAgICAgICAgICAgdW5zYWZl
X2ludGVydmFsIC0gcmVzdCA+PSB0ZW5fa2FwcGEgJiYKKyAgICAgICAgICAgIChyZXN0ICsgdGVu
X2thcHBhIDwgYmlnX2Rpc3RhbmNlIHx8CisgICAgICAgICAgICAgYmlnX2Rpc3RhbmNlIC0gcmVz
dCA+IHJlc3QgKyB0ZW5fa2FwcGEgLSBiaWdfZGlzdGFuY2UpKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gV2VlZGlu
ZyB0ZXN0LgorICAgICAgICAvLyAgIFRoZSBzYWZlIGludGVydmFsIGlzIFt0b29fbG93ICsgMiB1
bHA7IHRvb19oaWdoIC0gMiB1bHBdCisgICAgICAgIC8vICAgU2luY2UgdG9vX2xvdyA9IHRvb19o
aWdoIC0gdW5zYWZlX2ludGVydmFsIHRoaXMgaXMgZXF1aXZhbGVudCB0bworICAgICAgICAvLyAg
ICAgIFt0b29faGlnaCAtIHVuc2FmZV9pbnRlcnZhbCArIDQgdWxwOyB0b29faGlnaCAtIDIgdWxw
XQorICAgICAgICAvLyAgIENvbmNlcHR1YWxseSB3ZSBoYXZlOiByZXN0IH49IHRvb19oaWdoIC0g
YnVmZmVyCisgICAgICAgIHJldHVybiAoMiAqIHVuaXQgPD0gcmVzdCkgJiYgKHJlc3QgPD0gdW5z
YWZlX2ludGVydmFsIC0gNCAqIHVuaXQpOworICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBSb3Vu
ZHMgdGhlIGJ1ZmZlciB1cHdhcmRzIGlmIHRoZSByZXN1bHQgaXMgY2xvc2VyIHRvIHYgYnkgcG9z
c2libHkgYWRkaW5nCisgICAgLy8gMSB0byB0aGUgYnVmZmVyLiBJZiB0aGUgcHJlY2lzaW9uIG9m
IHRoZSBjYWxjdWxhdGlvbiBpcyBub3Qgc3VmZmljaWVudCB0bworICAgIC8vIHJvdW5kIGNvcnJl
Y3RseSwgcmV0dXJuIGZhbHNlLgorICAgIC8vIFRoZSByb3VuZGluZyBtaWdodCBzaGlmdCB0aGUg
d2hvbGUgYnVmZmVyIGluIHdoaWNoIGNhc2UgdGhlIGthcHBhIGlzCisgICAgLy8gYWRqdXN0ZWQu
IEZvciBleGFtcGxlICI5OSIsIGthcHBhID0gMyBtaWdodCBiZWNvbWUgIjEwIiwga2FwcGEgPSA0
LgorICAgIC8vCisgICAgLy8gSWYgMipyZXN0ID4gdGVuX2thcHBhIHRoZW4gdGhlIGJ1ZmZlciBu
ZWVkcyB0byBiZSByb3VuZCB1cC4KKyAgICAvLyByZXN0IGNhbiBoYXZlIGFuIGVycm9yIG9mICsv
LSAxIHVuaXQuIFRoaXMgZnVuY3Rpb24gYWNjb3VudHMgZm9yIHRoZQorICAgIC8vIGltcHJlY2lz
aW9uIGFuZCByZXR1cm5zIGZhbHNlLCBpZiB0aGUgcm91bmRpbmcgZGlyZWN0aW9uIGNhbm5vdCBi
ZQorICAgIC8vIHVuYW1iaWd1b3VzbHkgZGV0ZXJtaW5lZC4KKyAgICAvLworICAgIC8vIFByZWNv
bmRpdGlvbjogcmVzdCA8IHRlbl9rYXBwYS4KKyAgICBzdGF0aWMgYm9vbCBSb3VuZFdlZWRDb3Vu
dGVkKFZlY3RvcjxjaGFyPiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3Qg
cmVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHRlbl9rYXBw
YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHVuaXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGthcHBhKSB7CisgICAgICAgIEFTU0VS
VChyZXN0IDwgdGVuX2thcHBhKTsKKyAgICAgICAgLy8gVGhlIGZvbGxvd2luZyB0ZXN0cyBhcmUg
ZG9uZSBpbiBhIHNwZWNpZmljIG9yZGVyIHRvIGF2b2lkIG92ZXJmbG93cy4gVGhleQorICAgICAg
ICAvLyB3aWxsIHdvcmsgY29ycmVjdGx5IHdpdGggYW55IHVpbnQ2NCB2YWx1ZXMgb2YgcmVzdCA8
IHRlbl9rYXBwYSBhbmQgdW5pdC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgdGhlIHVuaXQg
aXMgdG9vIGJpZywgdGhlbiB3ZSBkb24ndCBrbm93IHdoaWNoIHdheSB0byByb3VuZC4gRm9yIGV4
YW1wbGUKKyAgICAgICAgLy8gYSB1bml0IG9mIDUwIG1lYW5zIHRoYXQgdGhlIHJlYWwgbnVtYmVy
IGxpZXMgd2l0aGluIHJlc3QgKy8tIDUwLiBJZgorICAgICAgICAvLyAxMF5rYXBwYSA9PSA0MCB0
aGVuIHRoZXJlIGlzIG5vIHdheSB0byB0ZWxsIHdoaWNoIHdheSB0byByb3VuZC4KKyAgICAgICAg
aWYgKHVuaXQgPj0gdGVuX2thcHBhKSByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIEV2ZW4gaWYg
dW5pdCBpcyBqdXN0IGhhbGYgdGhlIHNpemUgb2YgMTBea2FwcGEgd2UgYXJlIGFscmVhZHkgY29t
cGxldGVseQorICAgICAgICAvLyBsb3N0LiAoQW5kIGFmdGVyIHRoZSBwcmV2aW91cyB0ZXN0IHdl
IGtub3cgdGhhdCB0aGUgZXhwcmVzc2lvbiB3aWxsIG5vdAorICAgICAgICAvLyBvdmVyL3VuZGVy
Zmxvdy4pCisgICAgICAgIGlmICh0ZW5fa2FwcGEgLSB1bml0IDw9IHVuaXQpIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgLy8gSWYgMiAqIChyZXN0ICsgdW5pdCkgPD0gMTBea2FwcGEgd2UgY2FuIHNh
ZmVseSByb3VuZCBkb3duLgorICAgICAgICBpZiAoKHRlbl9rYXBwYSAtIHJlc3QgPiByZXN0KSAm
JiAodGVuX2thcHBhIC0gMiAqIHJlc3QgPj0gMiAqIHVuaXQpKSB7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBJZiAyICogKHJlc3QgLSB1bml0KSA+PSAx
MF5rYXBwYSwgdGhlbiB3ZSBjYW4gc2FmZWx5IHJvdW5kIHVwLgorICAgICAgICBpZiAoKHJlc3Qg
PiB1bml0KSAmJiAodGVuX2thcHBhIC0gKHJlc3QgLSB1bml0KSA8PSAocmVzdCAtIHVuaXQpKSkg
eworICAgICAgICAgICAgLy8gSW5jcmVtZW50IHRoZSBsYXN0IGRpZ2l0IHJlY3Vyc2l2ZWx5IHVu
dGlsIHdlIGZpbmQgYSBub24gJzknIGRpZ2l0LgorICAgICAgICAgICAgYnVmZmVyW2xlbmd0aCAt
IDFdKys7CisgICAgICAgICAgICBmb3IgKGludCBpID0gbGVuZ3RoIC0gMTsgaSA+IDA7IC0taSkg
eworICAgICAgICAgICAgICAgIGlmIChidWZmZXJbaV0gIT0gJzAnICsgMTApIGJyZWFrOworICAg
ICAgICAgICAgICAgIGJ1ZmZlcltpXSA9ICcwJzsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSAt
IDFdKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBJZiB0aGUgZmlyc3QgZGlnaXQg
aXMgbm93ICcwJysgMTAgd2UgaGFkIGEgYnVmZmVyIHdpdGggYWxsICc5J3MuIFdpdGggdGhlCisg
ICAgICAgICAgICAvLyBleGNlcHRpb24gb2YgdGhlIGZpcnN0IGRpZ2l0IGFsbCBkaWdpdHMgYXJl
IG5vdyAnMCcuIFNpbXBseSBzd2l0Y2ggdGhlCisgICAgICAgICAgICAvLyBmaXJzdCBkaWdpdCB0
byAnMScgYW5kIGFkanVzdCB0aGUga2FwcGEuIEV4YW1wbGU6ICI5OSIgYmVjb21lcyAiMTAiIGFu
ZAorICAgICAgICAgICAgLy8gdGhlIHBvd2VyICh0aGUga2FwcGEpIGlzIGluY3JlYXNlZC4KKyAg
ICAgICAgICAgIGlmIChidWZmZXJbMF0gPT0gJzAnICsgMTApIHsKKyAgICAgICAgICAgICAgICBi
dWZmZXJbMF0gPSAnMSc7CisgICAgICAgICAgICAgICAgKCprYXBwYSkgKz0gMTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgCisgICAgCisgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IGtU
ZW40ID0gMTAwMDA7CisgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IGtUZW41ID0gMTAwMDAwOwor
ICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBrVGVuNiA9IDEwMDAwMDA7CisgICAgc3RhdGljIGNv
bnN0IHVpbnQzMl90IGtUZW43ID0gMTAwMDAwMDA7CisgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90
IGtUZW44ID0gMTAwMDAwMDAwOworICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBrVGVuOSA9IDEw
MDAwMDAwMDA7CisgICAgCisgICAgLy8gUmV0dXJucyB0aGUgYmlnZ2VzdCBwb3dlciBvZiB0ZW4g
dGhhdCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuCisgICAgLy8gbnVtYmVyLiBX
ZSBmdXJ0aGVybW9yZSByZWNlaXZlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBiaXRzICdudW1iZXIn
IGhhcy4KKyAgICAvLyBJZiBudW1iZXJfYml0cyA9PSAwIHRoZW4gMF4tMSBpcyByZXR1cm5lZAor
ICAgIC8vIFRoZSBudW1iZXIgb2YgYml0cyBtdXN0IGJlIDw9IDMyLgorICAgIC8vIFByZWNvbmRp
dGlvbjogbnVtYmVyIDwgKDEgPDwgKG51bWJlcl9iaXRzICsgMSkpLgorICAgIHN0YXRpYyB2b2lk
IEJpZ2dlc3RQb3dlclRlbih1aW50MzJfdCBudW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBudW1iZXJfYml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdWludDMyX3QqIHBvd2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQq
IGV4cG9uZW50KSB7CisgICAgICAgIEFTU0VSVChudW1iZXIgPCAoMSA8PCAobnVtYmVyX2JpdHMg
KyAxKSkpOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChudW1iZXJfYml0cykgeworICAgICAg
ICAgICAgY2FzZSAzMjoKKyAgICAgICAgICAgIGNhc2UgMzE6CisgICAgICAgICAgICBjYXNlIDMw
OgorICAgICAgICAgICAgICAgIGlmIChrVGVuOSA8PSBudW1iZXIpIHsKKyAgICAgICAgICAgICAg
ICAgICAgKnBvd2VyID0ga1Rlbjk7CisgICAgICAgICAgICAgICAgICAgICpleHBvbmVudCA9IDk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gIC8vIGVsc2Ug
ZmFsbHRocm91Z2gKKyAgICAgICAgICAgIGNhc2UgMjk6CisgICAgICAgICAgICBjYXNlIDI4Ogor
ICAgICAgICAgICAgY2FzZSAyNzoKKyAgICAgICAgICAgICAgICBpZiAoa1RlbjggPD0gbnVtYmVy
KSB7CisgICAgICAgICAgICAgICAgICAgICpwb3dlciA9IGtUZW44OworICAgICAgICAgICAgICAg
ICAgICAqZXhwb25lbnQgPSA4OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9ICAvLyBlbHNlIGZhbGx0aHJvdWdoCisgICAgICAgICAgICBjYXNlIDI2OgorICAg
ICAgICAgICAgY2FzZSAyNToKKyAgICAgICAgICAgIGNhc2UgMjQ6CisgICAgICAgICAgICAgICAg
aWYgKGtUZW43IDw9IG51bWJlcikgeworICAgICAgICAgICAgICAgICAgICAqcG93ZXIgPSBrVGVu
NzsKKyAgICAgICAgICAgICAgICAgICAgKmV4cG9uZW50ID0gNzsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSAgLy8gZWxzZSBmYWxsdGhyb3VnaAorICAgICAg
ICAgICAgY2FzZSAyMzoKKyAgICAgICAgICAgIGNhc2UgMjI6CisgICAgICAgICAgICBjYXNlIDIx
OgorICAgICAgICAgICAgY2FzZSAyMDoKKyAgICAgICAgICAgICAgICBpZiAoa1RlbjYgPD0gbnVt
YmVyKSB7CisgICAgICAgICAgICAgICAgICAgICpwb3dlciA9IGtUZW42OworICAgICAgICAgICAg
ICAgICAgICAqZXhwb25lbnQgPSA2OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9ICAvLyBlbHNlIGZhbGx0aHJvdWdoCisgICAgICAgICAgICBjYXNlIDE5Ogor
ICAgICAgICAgICAgY2FzZSAxODoKKyAgICAgICAgICAgIGNhc2UgMTc6CisgICAgICAgICAgICAg
ICAgaWYgKGtUZW41IDw9IG51bWJlcikgeworICAgICAgICAgICAgICAgICAgICAqcG93ZXIgPSBr
VGVuNTsKKyAgICAgICAgICAgICAgICAgICAgKmV4cG9uZW50ID0gNTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSAgLy8gZWxzZSBmYWxsdGhyb3VnaAorICAg
ICAgICAgICAgY2FzZSAxNjoKKyAgICAgICAgICAgIGNhc2UgMTU6CisgICAgICAgICAgICBjYXNl
IDE0OgorICAgICAgICAgICAgICAgIGlmIChrVGVuNCA8PSBudW1iZXIpIHsKKyAgICAgICAgICAg
ICAgICAgICAgKnBvd2VyID0ga1RlbjQ7CisgICAgICAgICAgICAgICAgICAgICpleHBvbmVudCA9
IDQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gIC8vIGVs
c2UgZmFsbHRocm91Z2gKKyAgICAgICAgICAgIGNhc2UgMTM6CisgICAgICAgICAgICBjYXNlIDEy
OgorICAgICAgICAgICAgY2FzZSAxMToKKyAgICAgICAgICAgIGNhc2UgMTA6CisgICAgICAgICAg
ICAgICAgaWYgKDEwMDAgPD0gbnVtYmVyKSB7CisgICAgICAgICAgICAgICAgICAgICpwb3dlciA9
IDEwMDA7CisgICAgICAgICAgICAgICAgICAgICpleHBvbmVudCA9IDM7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gIC8vIGVsc2UgZmFsbHRocm91Z2gKKyAg
ICAgICAgICAgIGNhc2UgOToKKyAgICAgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIGNhc2Ug
NzoKKyAgICAgICAgICAgICAgICBpZiAoMTAwIDw9IG51bWJlcikgeworICAgICAgICAgICAgICAg
ICAgICAqcG93ZXIgPSAxMDA7CisgICAgICAgICAgICAgICAgICAgICpleHBvbmVudCA9IDI7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gIC8vIGVsc2UgZmFs
bHRocm91Z2gKKyAgICAgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgIGNhc2UgNToKKyAgICAg
ICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICBpZiAoMTAgPD0gbnVtYmVyKSB7CisgICAg
ICAgICAgICAgICAgICAgICpwb3dlciA9IDEwOworICAgICAgICAgICAgICAgICAgICAqZXhwb25l
bnQgPSAxOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9ICAv
LyBlbHNlIGZhbGx0aHJvdWdoCisgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICBjYXNl
IDI6CisgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgaWYgKDEgPD0gbnVtYmVy
KSB7CisgICAgICAgICAgICAgICAgICAgICpwb3dlciA9IDE7CisgICAgICAgICAgICAgICAgICAg
ICpleHBvbmVudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0gIC8vIGVsc2UgZmFsbHRocm91Z2gKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAg
ICAgICAgICAqcG93ZXIgPSAwOworICAgICAgICAgICAgICAgICpleHBvbmVudCA9IC0xOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAvLyBGb2xsb3dpbmcgYXNzaWdubWVudHMgYXJlIGhlcmUgdG8gc2lsZW5jZSBjb21waWxlciB3
YXJuaW5ncy4KKyAgICAgICAgICAgICAgICAqcG93ZXIgPSAwOworICAgICAgICAgICAgICAgICpl
eHBvbmVudCA9IDA7CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBHZW5lcmF0ZXMgdGhlIGRpZ2l0cyBvZiBpbnB1dCBu
dW1iZXIgdy4KKyAgICAvLyB3IGlzIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIChEaXlGcCksIGNv
bnNpc3Rpbmcgb2YgYSBzaWduaWZpY2FuZCBhbmQgYW4KKyAgICAvLyBleHBvbmVudC4gSXRzIGV4
cG9uZW50IGlzIGJvdW5kZWQgYnkga01pbmltYWxUYXJnZXRFeHBvbmVudCBhbmQKKyAgICAvLyBr
TWF4aW1hbFRhcmdldEV4cG9uZW50LgorICAgIC8vICAgICAgIEhlbmNlIC02MCA8PSB3LmUoKSA8
PSAtMzIuCisgICAgLy8KKyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIGl0IGZhaWxzLCBpbiB3aGlj
aCBjYXNlIHRoZSBnZW5lcmF0ZWQgZGlnaXRzIGluIHRoZSBidWZmZXIKKyAgICAvLyBzaG91bGQg
bm90IGJlIHVzZWQuCisgICAgLy8gUHJlY29uZGl0aW9uczoKKyAgICAvLyAgKiBsb3csIHcgYW5k
IGhpZ2ggYXJlIGNvcnJlY3QgdXAgdG8gMSB1bHAgKHVuaXQgaW4gdGhlIGxhc3QgcGxhY2UpLiBU
aGF0CisgICAgLy8gICAgaXMsIHRoZWlyIGVycm9yIG11c3QgYmUgbGVzcyB0aGFuIGEgdW5pdCBv
ZiB0aGVpciBsYXN0IGRpZ2l0cy4KKyAgICAvLyAgKiBsb3cuZSgpID09IHcuZSgpID09IGhpZ2gu
ZSgpCisgICAgLy8gICogbG93IDwgdyA8IGhpZ2gsIGFuZCB0YWtpbmcgaW50byBhY2NvdW50IHRo
ZWlyIGVycm9yOiBsb3d+IDw9IGhpZ2h+CisgICAgLy8gICoga01pbmltYWxUYXJnZXRFeHBvbmVu
dCA8PSB3LmUoKSA8PSBrTWF4aW1hbFRhcmdldEV4cG9uZW50CisgICAgLy8gUG9zdGNvbmRpdGlv
bnM6IHJldHVybnMgZmFsc2UgaWYgcHJvY2VkdXJlIGZhaWxzLgorICAgIC8vICAgb3RoZXJ3aXNl
OgorICAgIC8vICAgICAqIGJ1ZmZlciBpcyBub3QgbnVsbC10ZXJtaW5hdGVkLCBidXQgbGVuIGNv
bnRhaW5zIHRoZSBudW1iZXIgb2YgZGlnaXRzLgorICAgIC8vICAgICAqIGJ1ZmZlciBjb250YWlu
cyB0aGUgc2hvcnRlc3QgcG9zc2libGUgZGVjaW1hbCBkaWdpdC1zZXF1ZW5jZQorICAgIC8vICAg
ICAgIHN1Y2ggdGhhdCBMT1cgPCBidWZmZXIgKiAxMF5rYXBwYSA8IEhJR0gsIHdoZXJlIExPVyBh
bmQgSElHSCBhcmUgdGhlCisgICAgLy8gICAgICAgY29ycmVjdCB2YWx1ZXMgb2YgbG93IGFuZCBo
aWdoICh3aXRob3V0IHRoZWlyIGVycm9yKS4KKyAgICAvLyAgICAgKiBpZiBtb3JlIHRoYW4gb25l
IGRlY2ltYWwgcmVwcmVzZW50YXRpb24gZ2l2ZXMgdGhlIG1pbmltYWwgbnVtYmVyIG9mCisgICAg
Ly8gICAgICAgZGVjaW1hbCBkaWdpdHMgdGhlbiB0aGUgb25lIGNsb3Nlc3QgdG8gVyAod2hlcmUg
VyBpcyB0aGUgY29ycmVjdCB2YWx1ZQorICAgIC8vICAgICAgIG9mIHcpIGlzIGNob3Nlbi4KKyAg
ICAvLyBSZW1hcms6IHRoaXMgcHJvY2VkdXJlIHRha2VzIGludG8gYWNjb3VudCB0aGUgaW1wcmVj
aXNpb24gb2YgaXRzIGlucHV0CisgICAgLy8gICBudW1iZXJzLiBJZiB0aGUgcHJlY2lzaW9uIGlz
IG5vdCBlbm91Z2ggdG8gZ3VhcmFudGVlIGFsbCB0aGUgcG9zdGNvbmRpdGlvbnMKKyAgICAvLyAg
IHRoZW4gZmFsc2UgaXMgcmV0dXJuZWQuIFRoaXMgdXN1YWxseSBoYXBwZW5zIHJhcmVseSAofjAu
NSUpLgorICAgIC8vCisgICAgLy8gU2F5LCBmb3IgdGhlIHNha2Ugb2YgZXhhbXBsZSwgdGhhdAor
ICAgIC8vICAgdy5lKCkgPT0gLTQ4LCBhbmQgdy5mKCkgPT0gMHgxMjM0NTY3ODkwYWJjZGVmCisg
ICAgLy8gdydzIHZhbHVlIGNhbiBiZSBjb21wdXRlZCBieSB3LmYoKSAqIDJedy5lKCkKKyAgICAv
LyBXZSBjYW4gb2J0YWluIHcncyBpbnRlZ3JhbCBkaWdpdHMgYnkgc2ltcGx5IHNoaWZ0aW5nIHcu
ZigpIGJ5IC13LmUoKS4KKyAgICAvLyAgLT4gdydzIGludGVncmFsIHBhcnQgaXMgMHgxMjM0Cisg
ICAgLy8gIHcncyBmcmFjdGlvbmFsIHBhcnQgaXMgdGhlcmVmb3JlIDB4NTY3ODkwYWJjZGVmLgor
ICAgIC8vIFByaW50aW5nIHcncyBpbnRlZ3JhbCBwYXJ0IGlzIGVhc3kgKHNpbXBseSBwcmludCAw
eDEyMzQgaW4gZGVjaW1hbCkuCisgICAgLy8gSW4gb3JkZXIgdG8gcHJpbnQgaXRzIGZyYWN0aW9u
IHdlIHJlcGVhdGVkbHkgbXVsdGlwbHkgdGhlIGZyYWN0aW9uIGJ5IDEwIGFuZAorICAgIC8vIGdl
dCBlYWNoIGRpZ2l0LiBFeGFtcGxlIHRoZSBmaXJzdCBkaWdpdCBhZnRlciB0aGUgcG9pbnQgd291
bGQgYmUgY29tcHV0ZWQgYnkKKyAgICAvLyAgICgweDU2Nzg5MGFiY2RlZiAqIDEwKSA+PiA0OC4g
LT4gMworICAgIC8vIFRoZSB3aG9sZSB0aGluZyBiZWNvbWVzIHNsaWdodGx5IG1vcmUgY29tcGxp
Y2F0ZWQgYmVjYXVzZSB3ZSB3YW50IHRvIHN0b3AKKyAgICAvLyBvbmNlIHdlIGhhdmUgZW5vdWdo
IGRpZ2l0cy4gVGhhdCBpcywgb25jZSB0aGUgZGlnaXRzIGluc2lkZSB0aGUgYnVmZmVyCisgICAg
Ly8gcmVwcmVzZW50ICd3JyB3ZSBjYW4gc3RvcC4gRXZlcnl0aGluZyBpbnNpZGUgdGhlIGludGVy
dmFsIGxvdyAtIGhpZ2gKKyAgICAvLyByZXByZXNlbnRzIHcuIEhvd2V2ZXIgd2UgaGF2ZSB0byBw
YXkgYXR0ZW50aW9uIHRvIGxvdywgaGlnaCBhbmQgdydzCisgICAgLy8gaW1wcmVjaXNpb24uCisg
ICAgc3RhdGljIGJvb2wgRGlnaXRHZW4oRGl5RnAgbG93LAorICAgICAgICAgICAgICAgICAgICAg
ICAgIERpeUZwIHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgRGl5RnAgaGlnaCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCogbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCoga2Fw
cGEpIHsKKyAgICAgICAgQVNTRVJUKGxvdy5lKCkgPT0gdy5lKCkgJiYgdy5lKCkgPT0gaGlnaC5l
KCkpOworICAgICAgICBBU1NFUlQobG93LmYoKSArIDEgPD0gaGlnaC5mKCkgLSAxKTsKKyAgICAg
ICAgQVNTRVJUKGtNaW5pbWFsVGFyZ2V0RXhwb25lbnQgPD0gdy5lKCkgJiYgdy5lKCkgPD0ga01h
eGltYWxUYXJnZXRFeHBvbmVudCk7CisgICAgICAgIC8vIGxvdywgdyBhbmQgaGlnaCBhcmUgaW1w
cmVjaXNlLCBidXQgYnkgbGVzcyB0aGFuIG9uZSB1bHAgKHVuaXQgaW4gdGhlIGxhc3QKKyAgICAg
ICAgLy8gcGxhY2UpLgorICAgICAgICAvLyBJZiB3ZSByZW1vdmUgKHJlc3AuIGFkZCkgMSB1bHAg
ZnJvbSBsb3cgKHJlc3AuIGhpZ2gpIHdlIGFyZSBjZXJ0YWluIHRoYXQKKyAgICAgICAgLy8gdGhl
IG5ldyBudW1iZXJzIGFyZSBvdXRzaWRlIG9mIHRoZSBpbnRlcnZhbCB3ZSB3YW50IHRoZSBmaW5h
bAorICAgICAgICAvLyByZXByZXNlbnRhdGlvbiB0byBsaWUgaW4uCisgICAgICAgIC8vIEludmVy
c2VseSBhZGRpbmcgKHJlc3AuIHJlbW92aW5nKSAxIHVscCBmcm9tIGxvdyAocmVzcC4gaGlnaCkg
d291bGQgeWllbGQKKyAgICAgICAgLy8gbnVtYmVycyB0aGF0IGFyZSBjZXJ0YWluIHRvIGxpZSBp
biB0aGUgaW50ZXJ2YWwuIFdlIHdpbGwgdXNlIHRoaXMgZmFjdAorICAgICAgICAvLyBsYXRlciBv
bi4KKyAgICAgICAgLy8gV2Ugd2lsbCBub3cgc3RhcnQgYnkgZ2VuZXJhdGluZyB0aGUgZGlnaXRz
IHdpdGhpbiB0aGUgdW5jZXJ0YWluCisgICAgICAgIC8vIGludGVydmFsLiBMYXRlciB3ZSB3aWxs
IHdlZWQgb3V0IHJlcHJlc2VudGF0aW9ucyB0aGF0IGxpZSBvdXRzaWRlIHRoZSBzYWZlCisgICAg
ICAgIC8vIGludGVydmFsIGFuZCB0aHVzIF9taWdodF8gbGllIG91dHNpZGUgdGhlIGNvcnJlY3Qg
aW50ZXJ2YWwuCisgICAgICAgIHVpbnQ2NF90IHVuaXQgPSAxOworICAgICAgICBEaXlGcCB0b29f
bG93ID0gRGl5RnAobG93LmYoKSAtIHVuaXQsIGxvdy5lKCkpOworICAgICAgICBEaXlGcCB0b29f
aGlnaCA9IERpeUZwKGhpZ2guZigpICsgdW5pdCwgaGlnaC5lKCkpOworICAgICAgICAvLyB0b29f
bG93IGFuZCB0b29faGlnaCBhcmUgZ3VhcmFudGVlZCB0byBsaWUgb3V0c2lkZSB0aGUgaW50ZXJ2
YWwgd2Ugd2FudCB0aGUKKyAgICAgICAgLy8gZ2VuZXJhdGVkIG51bWJlciBpbi4KKyAgICAgICAg
RGl5RnAgdW5zYWZlX2ludGVydmFsID0gRGl5RnA6Ok1pbnVzKHRvb19oaWdoLCB0b29fbG93KTsK
KyAgICAgICAgLy8gV2Ugbm93IGN1dCB0aGUgaW5wdXQgbnVtYmVyIGludG8gdHdvIHBhcnRzOiB0
aGUgaW50ZWdyYWwgZGlnaXRzIGFuZCB0aGUKKyAgICAgICAgLy8gZnJhY3Rpb25hbHMuIFdlIHdp
bGwgbm90IHdyaXRlIGFueSBkZWNpbWFsIHNlcGFyYXRvciB0aG91Z2gsIGJ1dCBhZGFwdAorICAg
ICAgICAvLyBrYXBwYSBpbnN0ZWFkLgorICAgICAgICAvLyBSZW1pbmRlcjogd2UgYXJlIGN1cnJl
bnRseSBjb21wdXRpbmcgdGhlIGRpZ2l0cyAoc3RvcmVkIGluc2lkZSB0aGUgYnVmZmVyKQorICAg
ICAgICAvLyBzdWNoIHRoYXQ6ICAgdG9vX2xvdyA8IGJ1ZmZlciAqIDEwXmthcHBhIDwgdG9vX2hp
Z2gKKyAgICAgICAgLy8gV2UgdXNlIHRvb19oaWdoIGZvciB0aGUgZGlnaXRfZ2VuZXJhdGlvbiBh
bmQgc3RvcCBhcyBzb29uIGFzIHBvc3NpYmxlLgorICAgICAgICAvLyBJZiB3ZSBzdG9wIGVhcmx5
IHdlIGVmZmVjdGl2ZWx5IHJvdW5kIGRvd24uCisgICAgICAgIERpeUZwIG9uZSA9IERpeUZwKHN0
YXRpY19jYXN0PHVpbnQ2NF90PigxKSA8PCAtdy5lKCksIHcuZSgpKTsKKyAgICAgICAgLy8gRGl2
aXNpb24gYnkgb25lIGlzIGEgc2hpZnQuCisgICAgICAgIHVpbnQzMl90IGludGVncmFscyA9IHN0
YXRpY19jYXN0PHVpbnQzMl90Pih0b29faGlnaC5mKCkgPj4gLW9uZS5lKCkpOworICAgICAgICAv
LyBNb2R1bG8gYnkgb25lIGlzIGFuIGFuZC4KKyAgICAgICAgdWludDY0X3QgZnJhY3Rpb25hbHMg
PSB0b29faGlnaC5mKCkgJiAob25lLmYoKSAtIDEpOworICAgICAgICB1aW50MzJfdCBkaXZpc29y
OworICAgICAgICBpbnQgZGl2aXNvcl9leHBvbmVudDsKKyAgICAgICAgQmlnZ2VzdFBvd2VyVGVu
KGludGVncmFscywgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUgLSAoLW9uZS5lKCkpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgJmRpdmlzb3IsICZkaXZpc29yX2V4cG9uZW50KTsKKyAgICAgICAg
KmthcHBhID0gZGl2aXNvcl9leHBvbmVudCArIDE7CisgICAgICAgICpsZW5ndGggPSAwOworICAg
ICAgICAvLyBMb29wIGludmFyaWFudDogYnVmZmVyID0gdG9vX2hpZ2ggLyAxMF5rYXBwYSAgKGlu
dGVnZXIgZGl2aXNpb24pCisgICAgICAgIC8vIFRoZSBpbnZhcmlhbnQgaG9sZHMgZm9yIHRoZSBm
aXJzdCBpdGVyYXRpb246IGthcHBhIGhhcyBiZWVuIGluaXRpYWxpemVkCisgICAgICAgIC8vIHdp
dGggdGhlIGRpdmlzb3IgZXhwb25lbnQgKyAxLiBBbmQgdGhlIGRpdmlzb3IgaXMgdGhlIGJpZ2dl
c3QgcG93ZXIgb2YgdGVuCisgICAgICAgIC8vIHRoYXQgaXMgc21hbGxlciB0aGFuIGludGVncmFs
cy4KKyAgICAgICAgd2hpbGUgKCprYXBwYSA+IDApIHsKKyAgICAgICAgICAgIGludCBkaWdpdCA9
IGludGVncmFscyAvIGRpdmlzb3I7CisgICAgICAgICAgICBidWZmZXJbKmxlbmd0aF0gPSAnMCcg
KyBkaWdpdDsKKyAgICAgICAgICAgICgqbGVuZ3RoKSsrOworICAgICAgICAgICAgaW50ZWdyYWxz
ICU9IGRpdmlzb3I7CisgICAgICAgICAgICAoKmthcHBhKS0tOworICAgICAgICAgICAgLy8gTm90
ZSB0aGF0IGthcHBhIG5vdyBlcXVhbHMgdGhlIGV4cG9uZW50IG9mIHRoZSBkaXZpc29yIGFuZCB0
aGF0IHRoZQorICAgICAgICAgICAgLy8gaW52YXJpYW50IHRodXMgaG9sZHMgYWdhaW4uCisgICAg
ICAgICAgICB1aW50NjRfdCByZXN0ID0KKyAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1aW50NjRf
dD4oaW50ZWdyYWxzKSA8PCAtb25lLmUoKSkgKyBmcmFjdGlvbmFsczsKKyAgICAgICAgICAgIC8v
IEludmFyaWFudDogdG9vX2hpZ2ggPSBidWZmZXIgKiAxMF5rYXBwYSArIERpeUZwKHJlc3QsIG9u
ZS5lKCkpCisgICAgICAgICAgICAvLyBSZW1pbmRlcjogdW5zYWZlX2ludGVydmFsLmUoKSA9PSBv
bmUuZSgpCisgICAgICAgICAgICBpZiAocmVzdCA8IHVuc2FmZV9pbnRlcnZhbC5mKCkpIHsKKyAg
ICAgICAgICAgICAgICAvLyBSb3VuZGluZyBkb3duIChieSBub3QgZW1pdHRpbmcgdGhlIHJlbWFp
bmluZyBkaWdpdHMpIHlpZWxkcyBhIG51bWJlcgorICAgICAgICAgICAgICAgIC8vIHRoYXQgbGll
cyB3aXRoaW4gdGhlIHVuc2FmZSBpbnRlcnZhbC4KKyAgICAgICAgICAgICAgICByZXR1cm4gUm91
bmRXZWVkKGJ1ZmZlciwgKmxlbmd0aCwgRGl5RnA6Ok1pbnVzKHRvb19oaWdoLCB3KS5mKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNhZmVfaW50ZXJ2YWwuZigpLCByZXN0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KGRpdmlzb3IpIDw8IC1vbmUuZSgpLCB1bml0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGRpdmlzb3IgLz0gMTA7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBpbnRl
Z3JhbHMgaGF2ZSBiZWVuIGdlbmVyYXRlZC4gV2UgYXJlIGF0IHRoZSBwb2ludCBvZiB0aGUgZGVj
aW1hbAorICAgICAgICAvLyBzZXBhcmF0b3IuIEluIHRoZSBmb2xsb3dpbmcgbG9vcCB3ZSBzaW1w
bHkgbXVsdGlwbHkgdGhlIHJlbWFpbmluZyBkaWdpdHMgYnkKKyAgICAgICAgLy8gMTAgYW5kIGRp
dmlkZSBieSBvbmUuIFdlIGp1c3QgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRvIG11bHRpcGx5IGFz
c29jaWF0ZWQKKyAgICAgICAgLy8gZGF0YSAobGlrZSB0aGUgaW50ZXJ2YWwgb3IgJ3VuaXQnKSwg
dG9vLgorICAgICAgICAvLyBOb3RlIHRoYXQgdGhlIG11bHRpcGxpY2F0aW9uIGJ5IDEwIGRvZXMg
bm90IG92ZXJmbG93LCBiZWNhdXNlIHcuZSA+PSAtNjAKKyAgICAgICAgLy8gYW5kIHRodXMgb25l
LmUgPj0gLTYwLgorICAgICAgICBBU1NFUlQob25lLmUoKSA+PSAtNjApOworICAgICAgICBBU1NF
UlQoZnJhY3Rpb25hbHMgPCBvbmUuZigpKTsKKyAgICAgICAgQVNTRVJUKFVJTlQ2NF8yUEFSVF9D
KDB4RkZGRkZGRkYsIEZGRkZGRkZGKSAvIDEwID49IG9uZS5mKCkpOworICAgICAgICB3aGlsZSAo
dHJ1ZSkgeworICAgICAgICAgICAgZnJhY3Rpb25hbHMgKj0gMTA7CisgICAgICAgICAgICB1bml0
ICo9IDEwOworICAgICAgICAgICAgdW5zYWZlX2ludGVydmFsLnNldF9mKHVuc2FmZV9pbnRlcnZh
bC5mKCkgKiAxMCk7CisgICAgICAgICAgICAvLyBJbnRlZ2VyIGRpdmlzaW9uIGJ5IG9uZS4KKyAg
ICAgICAgICAgIGludCBkaWdpdCA9IHN0YXRpY19jYXN0PGludD4oZnJhY3Rpb25hbHMgPj4gLW9u
ZS5lKCkpOworICAgICAgICAgICAgYnVmZmVyWypsZW5ndGhdID0gJzAnICsgZGlnaXQ7CisgICAg
ICAgICAgICAoKmxlbmd0aCkrKzsKKyAgICAgICAgICAgIGZyYWN0aW9uYWxzICY9IG9uZS5mKCkg
LSAxOyAgLy8gTW9kdWxvIGJ5IG9uZS4KKyAgICAgICAgICAgICgqa2FwcGEpLS07CisgICAgICAg
ICAgICBpZiAoZnJhY3Rpb25hbHMgPCB1bnNhZmVfaW50ZXJ2YWwuZigpKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIFJvdW5kV2VlZChidWZmZXIsICpsZW5ndGgsIERpeUZwOjpNaW51cyh0b29f
aGlnaCwgdykuZigpICogdW5pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2FmZV9pbnRlcnZhbC5mKCksIGZyYWN0aW9uYWxzLCBvbmUuZigpLCB1bml0KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICAKKyAgICAvLyBHZW5lcmF0
ZXMgKGF0IG1vc3QpIHJlcXVlc3RlZF9kaWdpdHMgZGlnaXRzIG9mIGlucHV0IG51bWJlciB3Lgor
ICAgIC8vIHcgaXMgYSBmbG9hdGluZy1wb2ludCBudW1iZXIgKERpeUZwKSwgY29uc2lzdGluZyBv
ZiBhIHNpZ25pZmljYW5kIGFuZCBhbgorICAgIC8vIGV4cG9uZW50LiBJdHMgZXhwb25lbnQgaXMg
Ym91bmRlZCBieSBrTWluaW1hbFRhcmdldEV4cG9uZW50IGFuZAorICAgIC8vIGtNYXhpbWFsVGFy
Z2V0RXhwb25lbnQuCisgICAgLy8gICAgICAgSGVuY2UgLTYwIDw9IHcuZSgpIDw9IC0zMi4KKyAg
ICAvLworICAgIC8vIFJldHVybnMgZmFsc2UgaWYgaXQgZmFpbHMsIGluIHdoaWNoIGNhc2UgdGhl
IGdlbmVyYXRlZCBkaWdpdHMgaW4gdGhlIGJ1ZmZlcgorICAgIC8vIHNob3VsZCBub3QgYmUgdXNl
ZC4KKyAgICAvLyBQcmVjb25kaXRpb25zOgorICAgIC8vICAqIHcgaXMgY29ycmVjdCB1cCB0byAx
IHVscCAodW5pdCBpbiB0aGUgbGFzdCBwbGFjZSkuIFRoYXQKKyAgICAvLyAgICBpcywgaXRzIGVy
cm9yIG11c3QgYmUgc3RyaWN0bHkgbGVzcyB0aGFuIGEgdW5pdCBvZiBpdHMgbGFzdCBkaWdpdC4K
KyAgICAvLyAgKiBrTWluaW1hbFRhcmdldEV4cG9uZW50IDw9IHcuZSgpIDw9IGtNYXhpbWFsVGFy
Z2V0RXhwb25lbnQKKyAgICAvLworICAgIC8vIFBvc3Rjb25kaXRpb25zOiByZXR1cm5zIGZhbHNl
IGlmIHByb2NlZHVyZSBmYWlscy4KKyAgICAvLyAgIG90aGVyd2lzZToKKyAgICAvLyAgICAgKiBi
dWZmZXIgaXMgbm90IG51bGwtdGVybWluYXRlZCwgYnV0IGxlbmd0aCBjb250YWlucyB0aGUgbnVt
YmVyIG9mCisgICAgLy8gICAgICAgZGlnaXRzLgorICAgIC8vICAgICAqIHRoZSByZXByZXNlbnRh
dGlvbiBpbiBidWZmZXIgaXMgdGhlIG1vc3QgcHJlY2lzZSByZXByZXNlbnRhdGlvbiBvZgorICAg
IC8vICAgICAgIHJlcXVlc3RlZF9kaWdpdHMgZGlnaXRzLgorICAgIC8vICAgICAqIGJ1ZmZlciBj
b250YWlucyBhdCBtb3N0IHJlcXVlc3RlZF9kaWdpdHMgZGlnaXRzIG9mIHcuIElmIHRoZXJlIGFy
ZSBsZXNzCisgICAgLy8gICAgICAgdGhhbiByZXF1ZXN0ZWRfZGlnaXRzIGRpZ2l0cyB0aGVuIHNv
bWUgdHJhaWxpbmcgJzAncyBoYXZlIGJlZW4gcmVtb3ZlZC4KKyAgICAvLyAgICAgKiBrYXBwYSBp
cyBzdWNoIHRoYXQKKyAgICAvLyAgICAgICAgICAgIHcgPSBidWZmZXIgKiAxMF5rYXBwYSArIGVw
cyB3aXRoIHxlcHN8IDwgMTBea2FwcGEgLyAyLgorICAgIC8vCisgICAgLy8gUmVtYXJrOiBUaGlz
IHByb2NlZHVyZSB0YWtlcyBpbnRvIGFjY291bnQgdGhlIGltcHJlY2lzaW9uIG9mIGl0cyBpbnB1
dAorICAgIC8vICAgbnVtYmVycy4gSWYgdGhlIHByZWNpc2lvbiBpcyBub3QgZW5vdWdoIHRvIGd1
YXJhbnRlZSBhbGwgdGhlIHBvc3Rjb25kaXRpb25zCisgICAgLy8gICB0aGVuIGZhbHNlIGlzIHJl
dHVybmVkLiBUaGlzIHVzdWFsbHkgaGFwcGVucyByYXJlbHksIGJ1dCB0aGUgZmFpbHVyZS1yYXRl
CisgICAgLy8gICBpbmNyZWFzZXMgd2l0aCBoaWdoZXIgcmVxdWVzdGVkX2RpZ2l0cy4KKyAgICBz
dGF0aWMgYm9vbCBEaWdpdEdlbkNvdW50ZWQoRGl5RnAgdywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IHJlcXVlc3RlZF9kaWdpdHMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCogbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQq
IGthcHBhKSB7CisgICAgICAgIEFTU0VSVChrTWluaW1hbFRhcmdldEV4cG9uZW50IDw9IHcuZSgp
ICYmIHcuZSgpIDw9IGtNYXhpbWFsVGFyZ2V0RXhwb25lbnQpOworICAgICAgICBBU1NFUlQoa01p
bmltYWxUYXJnZXRFeHBvbmVudCA+PSAtNjApOworICAgICAgICBBU1NFUlQoa01heGltYWxUYXJn
ZXRFeHBvbmVudCA8PSAtMzIpOworICAgICAgICAvLyB3IGlzIGFzc3VtZWQgdG8gaGF2ZSBhbiBl
cnJvciBsZXNzIHRoYW4gMSB1bml0LiBXaGVuZXZlciB3IGlzIHNjYWxlZCB3ZQorICAgICAgICAv
LyBhbHNvIHNjYWxlIGl0cyBlcnJvci4KKyAgICAgICAgdWludDY0X3Qgd19lcnJvciA9IDE7Cisg
ICAgICAgIC8vIFdlIGN1dCB0aGUgaW5wdXQgbnVtYmVyIGludG8gdHdvIHBhcnRzOiB0aGUgaW50
ZWdyYWwgZGlnaXRzIGFuZCB0aGUKKyAgICAgICAgLy8gZnJhY3Rpb25hbCBkaWdpdHMuIFdlIGRv
bid0IGVtaXQgYW55IGRlY2ltYWwgc2VwYXJhdG9yLCBidXQgYWRhcHQga2FwcGEKKyAgICAgICAg
Ly8gaW5zdGVhZC4gRXhhbXBsZTogaW5zdGVhZCBvZiB3cml0aW5nICIxLjIiIHdlIHB1dCAiMTIi
IGludG8gdGhlIGJ1ZmZlciBhbmQKKyAgICAgICAgLy8gaW5jcmVhc2Uga2FwcGEgYnkgMS4KKyAg
ICAgICAgRGl5RnAgb25lID0gRGl5RnAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDEpIDw8IC13LmUo
KSwgdy5lKCkpOworICAgICAgICAvLyBEaXZpc2lvbiBieSBvbmUgaXMgYSBzaGlmdC4KKyAgICAg
ICAgdWludDMyX3QgaW50ZWdyYWxzID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHcuZigpID4+IC1v
bmUuZSgpKTsKKyAgICAgICAgLy8gTW9kdWxvIGJ5IG9uZSBpcyBhbiBhbmQuCisgICAgICAgIHVp
bnQ2NF90IGZyYWN0aW9uYWxzID0gdy5mKCkgJiAob25lLmYoKSAtIDEpOworICAgICAgICB1aW50
MzJfdCBkaXZpc29yOworICAgICAgICBpbnQgZGl2aXNvcl9leHBvbmVudDsKKyAgICAgICAgQmln
Z2VzdFBvd2VyVGVuKGludGVncmFscywgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUgLSAoLW9uZS5l
KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgJmRpdmlzb3IsICZkaXZpc29yX2V4cG9uZW50
KTsKKyAgICAgICAgKmthcHBhID0gZGl2aXNvcl9leHBvbmVudCArIDE7CisgICAgICAgICpsZW5n
dGggPSAwOworICAgICAgICAKKyAgICAgICAgLy8gTG9vcCBpbnZhcmlhbnQ6IGJ1ZmZlciA9IHcg
LyAxMF5rYXBwYSAgKGludGVnZXIgZGl2aXNpb24pCisgICAgICAgIC8vIFRoZSBpbnZhcmlhbnQg
aG9sZHMgZm9yIHRoZSBmaXJzdCBpdGVyYXRpb246IGthcHBhIGhhcyBiZWVuIGluaXRpYWxpemVk
CisgICAgICAgIC8vIHdpdGggdGhlIGRpdmlzb3IgZXhwb25lbnQgKyAxLiBBbmQgdGhlIGRpdmlz
b3IgaXMgdGhlIGJpZ2dlc3QgcG93ZXIgb2YgdGVuCisgICAgICAgIC8vIHRoYXQgaXMgc21hbGxl
ciB0aGFuICdpbnRlZ3JhbHMnLgorICAgICAgICB3aGlsZSAoKmthcHBhID4gMCkgeworICAgICAg
ICAgICAgaW50IGRpZ2l0ID0gaW50ZWdyYWxzIC8gZGl2aXNvcjsKKyAgICAgICAgICAgIGJ1ZmZl
clsqbGVuZ3RoXSA9ICcwJyArIGRpZ2l0OworICAgICAgICAgICAgKCpsZW5ndGgpKys7CisgICAg
ICAgICAgICByZXF1ZXN0ZWRfZGlnaXRzLS07CisgICAgICAgICAgICBpbnRlZ3JhbHMgJT0gZGl2
aXNvcjsKKyAgICAgICAgICAgICgqa2FwcGEpLS07CisgICAgICAgICAgICAvLyBOb3RlIHRoYXQg
a2FwcGEgbm93IGVxdWFscyB0aGUgZXhwb25lbnQgb2YgdGhlIGRpdmlzb3IgYW5kIHRoYXQgdGhl
CisgICAgICAgICAgICAvLyBpbnZhcmlhbnQgdGh1cyBob2xkcyBhZ2Fpbi4KKyAgICAgICAgICAg
IGlmIChyZXF1ZXN0ZWRfZGlnaXRzID09IDApIGJyZWFrOworICAgICAgICAgICAgZGl2aXNvciAv
PSAxMDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHJlcXVlc3RlZF9kaWdpdHMg
PT0gMCkgeworICAgICAgICAgICAgdWludDY0X3QgcmVzdCA9CisgICAgICAgICAgICAoc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KGludGVncmFscykgPDwgLW9uZS5lKCkpICsgZnJhY3Rpb25hbHM7Cisg
ICAgICAgICAgICByZXR1cm4gUm91bmRXZWVkQ291bnRlZChidWZmZXIsICpsZW5ndGgsIHJlc3Qs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50NjRf
dD4oZGl2aXNvcikgPDwgLW9uZS5lKCksIHdfZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBrYXBwYSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFRo
ZSBpbnRlZ3JhbHMgaGF2ZSBiZWVuIGdlbmVyYXRlZC4gV2UgYXJlIGF0IHRoZSBwb2ludCBvZiB0
aGUgZGVjaW1hbAorICAgICAgICAvLyBzZXBhcmF0b3IuIEluIHRoZSBmb2xsb3dpbmcgbG9vcCB3
ZSBzaW1wbHkgbXVsdGlwbHkgdGhlIHJlbWFpbmluZyBkaWdpdHMgYnkKKyAgICAgICAgLy8gMTAg
YW5kIGRpdmlkZSBieSBvbmUuIFdlIGp1c3QgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRvIG11bHRp
cGx5IGFzc29jaWF0ZWQKKyAgICAgICAgLy8gZGF0YSAodGhlICd1bml0JyksIHRvby4KKyAgICAg
ICAgLy8gTm90ZSB0aGF0IHRoZSBtdWx0aXBsaWNhdGlvbiBieSAxMCBkb2VzIG5vdCBvdmVyZmxv
dywgYmVjYXVzZSB3LmUgPj0gLTYwCisgICAgICAgIC8vIGFuZCB0aHVzIG9uZS5lID49IC02MC4K
KyAgICAgICAgQVNTRVJUKG9uZS5lKCkgPj0gLTYwKTsKKyAgICAgICAgQVNTRVJUKGZyYWN0aW9u
YWxzIDwgb25lLmYoKSk7CisgICAgICAgIEFTU0VSVChVSU5UNjRfMlBBUlRfQygweEZGRkZGRkZG
LCBGRkZGRkZGRikgLyAxMCA+PSBvbmUuZigpKTsKKyAgICAgICAgd2hpbGUgKHJlcXVlc3RlZF9k
aWdpdHMgPiAwICYmIGZyYWN0aW9uYWxzID4gd19lcnJvcikgeworICAgICAgICAgICAgZnJhY3Rp
b25hbHMgKj0gMTA7CisgICAgICAgICAgICB3X2Vycm9yICo9IDEwOworICAgICAgICAgICAgLy8g
SW50ZWdlciBkaXZpc2lvbiBieSBvbmUuCisgICAgICAgICAgICBpbnQgZGlnaXQgPSBzdGF0aWNf
Y2FzdDxpbnQ+KGZyYWN0aW9uYWxzID4+IC1vbmUuZSgpKTsKKyAgICAgICAgICAgIGJ1ZmZlclsq
bGVuZ3RoXSA9ICcwJyArIGRpZ2l0OworICAgICAgICAgICAgKCpsZW5ndGgpKys7CisgICAgICAg
ICAgICByZXF1ZXN0ZWRfZGlnaXRzLS07CisgICAgICAgICAgICBmcmFjdGlvbmFscyAmPSBvbmUu
ZigpIC0gMTsgIC8vIE1vZHVsbyBieSBvbmUuCisgICAgICAgICAgICAoKmthcHBhKS0tOworICAg
ICAgICB9CisgICAgICAgIGlmIChyZXF1ZXN0ZWRfZGlnaXRzICE9IDApIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIFJvdW5kV2VlZENvdW50ZWQoYnVmZmVyLCAqbGVuZ3RoLCBmcmFjdGlv
bmFscywgb25lLmYoKSwgd19lcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
a2FwcGEpOworICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBQcm92aWRlcyBhIGRlY2ltYWwgcmVw
cmVzZW50YXRpb24gb2Ygdi4KKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgaXQgc3VjY2VlZHMsIG90
aGVyd2lzZSB0aGUgcmVzdWx0IGNhbm5vdCBiZSB0cnVzdGVkLgorICAgIC8vIFRoZXJlIHdpbGwg
YmUgKmxlbmd0aCBkaWdpdHMgaW5zaWRlIHRoZSBidWZmZXIgKG5vdCBudWxsLXRlcm1pbmF0ZWQp
LgorICAgIC8vIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgdGhlbgorICAgIC8vICAgICAg
ICB2ID09IChkb3VibGUpIChidWZmZXIgKiAxMF5kZWNpbWFsX2V4cG9uZW50KS4KKyAgICAvLyBU
aGUgZGlnaXRzIGluIHRoZSBidWZmZXIgYXJlIHRoZSBzaG9ydGVzdCByZXByZXNlbnRhdGlvbiBw
b3NzaWJsZTogbm8KKyAgICAvLyAwLjA5OTk5OTk5OTk5OTk5OTk5IGluc3RlYWQgb2YgMC4xLiBU
aGUgc2hvcnRlciByZXByZXNlbnRhdGlvbiB3aWxsIGV2ZW4gYmUKKyAgICAvLyBjaG9zZW4gZXZl
biBpZiB0aGUgbG9uZ2VyIG9uZSB3b3VsZCBiZSBjbG9zZXIgdG8gdi4KKyAgICAvLyBUaGUgbGFz
dCBkaWdpdCB3aWxsIGJlIGNsb3Nlc3QgdG8gdGhlIGFjdHVhbCB2LiBUaGF0IGlzLCBldmVuIGlm
IHNldmVyYWwKKyAgICAvLyBkaWdpdHMgbWlnaHQgY29ycmVjdGx5IHlpZWxkICd2JyB3aGVuIHJl
YWQgYWdhaW4sIHRoZSBjbG9zZXN0IHdpbGwgYmUKKyAgICAvLyBjb21wdXRlZC4KKyAgICBzdGF0
aWMgYm9vbCBHcmlzdTMoZG91YmxlIHYsCisgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjxj
aGFyPiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgIGludCogbGVuZ3RoLAorICAgICAg
ICAgICAgICAgICAgICAgICBpbnQqIGRlY2ltYWxfZXhwb25lbnQpIHsKKyAgICAgICAgRGl5RnAg
dyA9IERvdWJsZSh2KS5Bc05vcm1hbGl6ZWREaXlGcCgpOworICAgICAgICAvLyBib3VuZGFyeV9t
aW51cyBhbmQgYm91bmRhcnlfcGx1cyBhcmUgdGhlIGJvdW5kYXJpZXMgYmV0d2VlbiB2IGFuZCBp
dHMKKyAgICAgICAgLy8gY2xvc2VzdCBmbG9hdGluZy1wb2ludCBuZWlnaGJvcnMuIEFueSBudW1i
ZXIgc3RyaWN0bHkgYmV0d2VlbgorICAgICAgICAvLyBib3VuZGFyeV9taW51cyBhbmQgYm91bmRh
cnlfcGx1cyB3aWxsIHJvdW5kIHRvIHYgd2hlbiBjb252ZXJ0IHRvIGEgZG91YmxlLgorICAgICAg
ICAvLyBHcmlzdTMgd2lsbCBuZXZlciBvdXRwdXQgcmVwcmVzZW50YXRpb25zIHRoYXQgbGllIGV4
YWN0bHkgb24gYSBib3VuZGFyeS4KKyAgICAgICAgRGl5RnAgYm91bmRhcnlfbWludXMsIGJvdW5k
YXJ5X3BsdXM7CisgICAgICAgIERvdWJsZSh2KS5Ob3JtYWxpemVkQm91bmRhcmllcygmYm91bmRh
cnlfbWludXMsICZib3VuZGFyeV9wbHVzKTsKKyAgICAgICAgQVNTRVJUKGJvdW5kYXJ5X3BsdXMu
ZSgpID09IHcuZSgpKTsKKyAgICAgICAgRGl5RnAgdGVuX21rOyAgLy8gQ2FjaGVkIHBvd2VyIG9m
IHRlbjogMTBeLWsKKyAgICAgICAgaW50IG1rOyAgICAgICAgLy8gLWsKKyAgICAgICAgaW50IHRl
bl9ta19taW5pbWFsX2JpbmFyeV9leHBvbmVudCA9CisgICAgICAgIGtNaW5pbWFsVGFyZ2V0RXhw
b25lbnQgLSAody5lKCkgKyBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSk7CisgICAgICAgIGludCB0
ZW5fbWtfbWF4aW1hbF9iaW5hcnlfZXhwb25lbnQgPQorICAgICAgICBrTWF4aW1hbFRhcmdldEV4
cG9uZW50IC0gKHcuZSgpICsgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUpOworICAgICAgICBQb3dl
cnNPZlRlbkNhY2hlOjpHZXRDYWNoZWRQb3dlckZvckJpbmFyeUV4cG9uZW50UmFuZ2UoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0ZW5fbWtfbWluaW1hbF9iaW5hcnlfZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW5fbWtfbWF4aW1hbF9i
aW5hcnlfZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmdGVuX21rLCAmbWspOworICAgICAgICBBU1NFUlQoKGtN
aW5pbWFsVGFyZ2V0RXhwb25lbnQgPD0gdy5lKCkgKyB0ZW5fbWsuZSgpICsKKyAgICAgICAgICAg
ICAgICBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSkgJiYKKyAgICAgICAgICAgICAgIChrTWF4aW1h
bFRhcmdldEV4cG9uZW50ID49IHcuZSgpICsgdGVuX21rLmUoKSArCisgICAgICAgICAgICAgICAg
RGl5RnA6OmtTaWduaWZpY2FuZFNpemUpKTsKKyAgICAgICAgLy8gTm90ZSB0aGF0IHRlbl9tayBp
cyBvbmx5IGFuIGFwcHJveGltYXRpb24gb2YgMTBeLWsuIEEgRGl5RnAgb25seSBjb250YWlucyBh
CisgICAgICAgIC8vIDY0IGJpdCBzaWduaWZpY2FuZCBhbmQgdGVuX21rIGlzIHRodXMgb25seSBw
cmVjaXNlIHVwIHRvIDY0IGJpdHMuCisgICAgICAgIAorICAgICAgICAvLyBUaGUgRGl5RnA6OlRp
bWVzIHByb2NlZHVyZSByb3VuZHMgaXRzIHJlc3VsdCwgYW5kIHRlbl9tayBpcyBhcHByb3hpbWF0
ZWQKKyAgICAgICAgLy8gdG9vLiBUaGUgdmFyaWFibGUgc2NhbGVkX3cgKGFzIHdlbGwgYXMgc2Nh
bGVkX2JvdW5kYXJ5X21pbnVzL3BsdXMpIGFyZSBub3cKKyAgICAgICAgLy8gb2ZmIGJ5IGEgc21h
bGwgYW1vdW50LgorICAgICAgICAvLyBJbiBmYWN0OiBzY2FsZWRfdyAtIHcqMTBeayA8IDF1bHAg
KHVuaXQgaW4gdGhlIGxhc3QgcGxhY2UpIG9mIHNjYWxlZF93LgorICAgICAgICAvLyBJbiBvdGhl
ciB3b3JkczogbGV0IGYgPSBzY2FsZWRfdy5mKCkgYW5kIGUgPSBzY2FsZWRfdy5lKCksIHRoZW4K
KyAgICAgICAgLy8gICAgICAgICAgIChmLTEpICogMl5lIDwgdyoxMF5rIDwgKGYrMSkgKiAyXmUK
KyAgICAgICAgRGl5RnAgc2NhbGVkX3cgPSBEaXlGcDo6VGltZXModywgdGVuX21rKTsKKyAgICAg
ICAgQVNTRVJUKHNjYWxlZF93LmUoKSA9PQorICAgICAgICAgICAgICAgYm91bmRhcnlfcGx1cy5l
KCkgKyB0ZW5fbWsuZSgpICsgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUpOworICAgICAgICAvLyBJ
biB0aGVvcnkgaXQgd291bGQgYmUgcG9zc2libGUgdG8gYXZvaWQgc29tZSByZWNvbXB1dGF0aW9u
cyBieSBjb21wdXRpbmcKKyAgICAgICAgLy8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB3IGFuZCBi
b3VuZGFyeV9taW51cy9wbHVzIChhIHBvd2VyIG9mIDIpIGFuZCB0bworICAgICAgICAvLyBjb21w
dXRlIHNjYWxlZF9ib3VuZGFyeV9taW51cy9wbHVzIGJ5IHN1YnRyYWN0aW5nL2FkZGluZyBmcm9t
CisgICAgICAgIC8vIHNjYWxlZF93LiBIb3dldmVyIHRoZSBjb2RlIGJlY29tZXMgbXVjaCBsZXNz
IHJlYWRhYmxlIGFuZCB0aGUgc3BlZWQKKyAgICAgICAgLy8gZW5oYW5jZW1lbnRzIGFyZSBub3Qg
dGVycmlmZmljLgorICAgICAgICBEaXlGcCBzY2FsZWRfYm91bmRhcnlfbWludXMgPSBEaXlGcDo6
VGltZXMoYm91bmRhcnlfbWludXMsIHRlbl9tayk7CisgICAgICAgIERpeUZwIHNjYWxlZF9ib3Vu
ZGFyeV9wbHVzICA9IERpeUZwOjpUaW1lcyhib3VuZGFyeV9wbHVzLCAgdGVuX21rKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIERpZ2l0R2VuIHdpbGwgZ2VuZXJhdGUgdGhlIGRpZ2l0cyBvZiBzY2Fs
ZWRfdy4gVGhlcmVmb3JlIHdlIGhhdmUKKyAgICAgICAgLy8gdiA9PSAoZG91YmxlKSAoc2NhbGVk
X3cgKiAxMF4tbWspLgorICAgICAgICAvLyBTZXQgZGVjaW1hbF9leHBvbmVudCA9PSAtbWsgYW5k
IHBhc3MgaXQgdG8gRGlnaXRHZW4uIElmIHNjYWxlZF93IGlzIG5vdCBhbgorICAgICAgICAvLyBp
bnRlZ2VyIHRoYW4gaXQgd2lsbCBiZSB1cGRhdGVkLiBGb3IgaW5zdGFuY2UgaWYgc2NhbGVkX3cg
PT0gMS4yMyB0aGVuCisgICAgICAgIC8vIHRoZSBidWZmZXIgd2lsbCBiZSBmaWxsZWQgd2l0aCAi
MTIzIiB1bmQgdGhlIGRlY2ltYWxfZXhwb25lbnQgd2lsbCBiZQorICAgICAgICAvLyBkZWNyZWFz
ZWQgYnkgMi4KKyAgICAgICAgaW50IGthcHBhOworICAgICAgICBib29sIHJlc3VsdCA9IERpZ2l0
R2VuKHNjYWxlZF9ib3VuZGFyeV9taW51cywgc2NhbGVkX3csIHNjYWxlZF9ib3VuZGFyeV9wbHVz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgbGVuZ3RoLCAma2FwcGEp
OworICAgICAgICAqZGVjaW1hbF9leHBvbmVudCA9IC1tayArIGthcHBhOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBUaGUgImNvdW50ZWQiIHZlcnNp
b24gb2YgZ3Jpc3UzIChzZWUgYWJvdmUpIG9ubHkgZ2VuZXJhdGVzIHJlcXVlc3RlZF9kaWdpdHMK
KyAgICAvLyBudW1iZXIgb2YgZGlnaXRzLiBUaGlzIHZlcnNpb24gZG9lcyBub3QgZ2VuZXJhdGUg
dGhlIHNob3J0ZXN0IHJlcHJlc2VudGF0aW9uLAorICAgIC8vIGFuZCB3aXRoIGVub3VnaCByZXF1
ZXN0ZWQgZGlnaXRzIDAuMSB3aWxsIGF0IHNvbWUgcG9pbnQgcHJpbnQgYXMgMC45OTk5OTk5Li4u
CisgICAgLy8gR3Jpc3UzIGlzIHRvbyBpbXByZWNpc2UgZm9yIHJlYWwgaGFsZndheSBjYXNlcyAo
MS41IHdpbGwgbm90IHdvcmspIGFuZAorICAgIC8vIHRoZXJlZm9yZSB0aGUgcm91bmRpbmcgc3Ry
YXRlZ3kgZm9yIGhhbGZ3YXkgY2FzZXMgaXMgaXJyZWxldmFudC4KKyAgICBzdGF0aWMgYm9vbCBH
cmlzdTNDb3VudGVkKGRvdWJsZSB2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IHJlcXVlc3RlZF9kaWdpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8
Y2hhcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBsZW5ndGgs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGRlY2ltYWxfZXhwb25lbnQpIHsK
KyAgICAgICAgRGl5RnAgdyA9IERvdWJsZSh2KS5Bc05vcm1hbGl6ZWREaXlGcCgpOworICAgICAg
ICBEaXlGcCB0ZW5fbWs7ICAvLyBDYWNoZWQgcG93ZXIgb2YgdGVuOiAxMF4taworICAgICAgICBp
bnQgbWs7ICAgICAgICAvLyAtaworICAgICAgICBpbnQgdGVuX21rX21pbmltYWxfYmluYXJ5X2V4
cG9uZW50ID0KKyAgICAgICAga01pbmltYWxUYXJnZXRFeHBvbmVudCAtICh3LmUoKSArIERpeUZw
OjprU2lnbmlmaWNhbmRTaXplKTsKKyAgICAgICAgaW50IHRlbl9ta19tYXhpbWFsX2JpbmFyeV9l
eHBvbmVudCA9CisgICAgICAgIGtNYXhpbWFsVGFyZ2V0RXhwb25lbnQgLSAody5lKCkgKyBEaXlG
cDo6a1NpZ25pZmljYW5kU2l6ZSk7CisgICAgICAgIFBvd2Vyc09mVGVuQ2FjaGU6OkdldENhY2hl
ZFBvd2VyRm9yQmluYXJ5RXhwb25lbnRSYW5nZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbl9ta19taW5pbWFsX2JpbmFy
eV9leHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRlbl9ta19tYXhpbWFsX2JpbmFyeV9leHBvbmVudCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZ0ZW5fbWssICZtayk7CisgICAgICAgIEFTU0VSVCgoa01pbmltYWxUYXJnZXRFeHBvbmVudCA8
PSB3LmUoKSArIHRlbl9tay5lKCkgKworICAgICAgICAgICAgICAgIERpeUZwOjprU2lnbmlmaWNh
bmRTaXplKSAmJgorICAgICAgICAgICAgICAgKGtNYXhpbWFsVGFyZ2V0RXhwb25lbnQgPj0gdy5l
KCkgKyB0ZW5fbWsuZSgpICsKKyAgICAgICAgICAgICAgICBEaXlGcDo6a1NpZ25pZmljYW5kU2l6
ZSkpOworICAgICAgICAvLyBOb3RlIHRoYXQgdGVuX21rIGlzIG9ubHkgYW4gYXBwcm94aW1hdGlv
biBvZiAxMF4tay4gQSBEaXlGcCBvbmx5IGNvbnRhaW5zIGEKKyAgICAgICAgLy8gNjQgYml0IHNp
Z25pZmljYW5kIGFuZCB0ZW5fbWsgaXMgdGh1cyBvbmx5IHByZWNpc2UgdXAgdG8gNjQgYml0cy4K
KyAgICAgICAgCisgICAgICAgIC8vIFRoZSBEaXlGcDo6VGltZXMgcHJvY2VkdXJlIHJvdW5kcyBp
dHMgcmVzdWx0LCBhbmQgdGVuX21rIGlzIGFwcHJveGltYXRlZAorICAgICAgICAvLyB0b28uIFRo
ZSB2YXJpYWJsZSBzY2FsZWRfdyAoYXMgd2VsbCBhcyBzY2FsZWRfYm91bmRhcnlfbWludXMvcGx1
cykgYXJlIG5vdworICAgICAgICAvLyBvZmYgYnkgYSBzbWFsbCBhbW91bnQuCisgICAgICAgIC8v
IEluIGZhY3Q6IHNjYWxlZF93IC0gdyoxMF5rIDwgMXVscCAodW5pdCBpbiB0aGUgbGFzdCBwbGFj
ZSkgb2Ygc2NhbGVkX3cuCisgICAgICAgIC8vIEluIG90aGVyIHdvcmRzOiBsZXQgZiA9IHNjYWxl
ZF93LmYoKSBhbmQgZSA9IHNjYWxlZF93LmUoKSwgdGhlbgorICAgICAgICAvLyAgICAgICAgICAg
KGYtMSkgKiAyXmUgPCB3KjEwXmsgPCAoZisxKSAqIDJeZQorICAgICAgICBEaXlGcCBzY2FsZWRf
dyA9IERpeUZwOjpUaW1lcyh3LCB0ZW5fbWspOworICAgICAgICAKKyAgICAgICAgLy8gV2Ugbm93
IGhhdmUgKGRvdWJsZSkgKHNjYWxlZF93ICogMTBeLW1rKS4KKyAgICAgICAgLy8gRGlnaXRHZW4g
d2lsbCBnZW5lcmF0ZSB0aGUgZmlyc3QgcmVxdWVzdGVkX2RpZ2l0cyBkaWdpdHMgb2Ygc2NhbGVk
X3cgYW5kCisgICAgICAgIC8vIHJldHVybiB0b2dldGhlciB3aXRoIGEga2FwcGEgc3VjaCB0aGF0
IHNjYWxlZF93IH49IGJ1ZmZlciAqIDEwXmthcHBhLiAoSXQKKyAgICAgICAgLy8gd2lsbCBub3Qg
YWx3YXlzIGJlIGV4YWN0bHkgdGhlIHNhbWUgc2luY2UgRGlnaXRHZW5Db3VudGVkIG9ubHkgcHJv
ZHVjZXMgYQorICAgICAgICAvLyBsaW1pdGVkIG51bWJlciBvZiBkaWdpdHMuKQorICAgICAgICBp
bnQga2FwcGE7CisgICAgICAgIGJvb2wgcmVzdWx0ID0gRGlnaXRHZW5Db3VudGVkKHNjYWxlZF93
LCByZXF1ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBidWZmZXIsIGxlbmd0aCwgJmthcHBhKTsKKyAgICAgICAgKmRlY2ltYWxfZXhwb25lbnQgPSAt
bWsgKyBrYXBwYTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgCisg
ICAgYm9vbCBGYXN0RHRvYShkb3VibGUgdiwKKyAgICAgICAgICAgICAgICAgIEZhc3REdG9hTW9k
ZSBtb2RlLAorICAgICAgICAgICAgICAgICAgaW50IHJlcXVlc3RlZF9kaWdpdHMsCisgICAgICAg
ICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAgaW50KiBs
ZW5ndGgsCisgICAgICAgICAgICAgICAgICBpbnQqIGRlY2ltYWxfcG9pbnQpIHsKKyAgICAgICAg
QVNTRVJUKHYgPiAwKTsKKyAgICAgICAgQVNTRVJUKCFEb3VibGUodikuSXNTcGVjaWFsKCkpOwor
ICAgICAgICAKKyAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgaW50IGRlY2lt
YWxfZXhwb25lbnQgPSAwOworICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgICAgIGNh
c2UgRkFTVF9EVE9BX1NIT1JURVNUOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IEdyaXN1Myh2
LCBidWZmZXIsIGxlbmd0aCwgJmRlY2ltYWxfZXhwb25lbnQpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBGQVNUX0RUT0FfUFJFQ0lTSU9OOgorICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IEdyaXN1M0NvdW50ZWQodiwgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgbGVuZ3RoLCAmZGVjaW1hbF9l
eHBvbmVudCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJl
c3VsdCkgeworICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSAqbGVuZ3RoICsgZGVjaW1hbF9l
eHBvbmVudDsKKyAgICAgICAgICAgIGJ1ZmZlclsqbGVuZ3RoXSA9ICdcMCc7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCit9ICAvLyBuYW1lc3BhY2UgZG91
YmxlX2NvbnZlcnNpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRv
YS9mYXN0LWR0b2EuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9mYXN0LWR0b2Eu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44ODQzNmZkNTViYmY0MGMxNWE0YTM1ODRhYzhhNTNiMzA5MTQ3MzAyCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2Zhc3QtZHRv
YS5oCkBAIC0wLDAgKzEsODQgQEAKKy8vIENvcHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
Ly8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
Ky8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmbmRl
ZiBET1VCTEVfQ09OVkVSU0lPTl9GQVNUX0RUT0FfSF8KKyNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJ
T05fRkFTVF9EVE9BX0hfCisKKyNpbmNsdWRlICJ1dGlscy5oIgorCituYW1lc3BhY2UgZG91Ymxl
X2NvbnZlcnNpb24geworICAgIAorICAgIGVudW0gRmFzdER0b2FNb2RlIHsKKyAgICAgICAgLy8g
Q29tcHV0ZXMgdGhlIHNob3J0ZXN0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBpbnB1dC4g
VGhlIHJldHVybmVkCisgICAgICAgIC8vIHJlc3VsdCB3aWxsIGJlIHRoZSBtb3N0IGFjY3VyYXRl
IG51bWJlciBvZiB0aGlzIGxlbmd0aC4gTG9uZ2VyCisgICAgICAgIC8vIHJlcHJlc2VudGF0aW9u
cyBtaWdodCBiZSBtb3JlIGFjY3VyYXRlLgorICAgICAgICBGQVNUX0RUT0FfU0hPUlRFU1QsCisg
ICAgICAgIC8vIENvbXB1dGVzIGEgcmVwcmVzZW50YXRpb24gd2hlcmUgdGhlIHByZWNpc2lvbiAo
bnVtYmVyIG9mIGRpZ2l0cykgaXMKKyAgICAgICAgLy8gZ2l2ZW4gYXMgaW5wdXQuIFRoZSBwcmVj
aXNpb24gaXMgaW5kZXBlbmRlbnQgb2YgdGhlIGRlY2ltYWwgcG9pbnQuCisgICAgICAgIEZBU1Rf
RFRPQV9QUkVDSVNJT04KKyAgICB9OworICAgIAorICAgIC8vIEZhc3REdG9hIHdpbGwgcHJvZHVj
ZSBhdCBtb3N0IGtGYXN0RHRvYU1heGltYWxMZW5ndGggZGlnaXRzLiBUaGlzIGRvZXMgbm90Cisg
ICAgLy8gaW5jbHVkZSB0aGUgdGVybWluYXRpbmcgJ1wwJyBjaGFyYWN0ZXIuCisgICAgc3RhdGlj
IGNvbnN0IGludCBrRmFzdER0b2FNYXhpbWFsTGVuZ3RoID0gMTc7CisgICAgCisgICAgLy8gUHJv
dmlkZXMgYSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIHYuCisgICAgLy8gVGhlIHJlc3VsdCBz
aG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgYnVmZmVyICogMTBeKHBvaW50IC0gbGVuZ3RoKS4KKyAg
ICAvLworICAgIC8vIFByZWNvbmRpdGlvbjoKKyAgICAvLyAgICogdiBtdXN0IGJlIGEgc3RyaWN0
bHkgcG9zaXRpdmUgZmluaXRlIGRvdWJsZS4KKyAgICAvLworICAgIC8vIFJldHVybnMgdHJ1ZSBp
ZiBpdCBzdWNjZWVkcywgb3RoZXJ3aXNlIHRoZSByZXN1bHQgY2FuIG5vdCBiZSB0cnVzdGVkLgor
ICAgIC8vIFRoZXJlIHdpbGwgYmUgKmxlbmd0aCBkaWdpdHMgaW5zaWRlIHRoZSBidWZmZXIgZm9s
bG93ZWQgYnkgYSBudWxsIHRlcm1pbmF0b3IuCisgICAgLy8gSWYgdGhlIGZ1bmN0aW9uIHJldHVy
bnMgdHJ1ZSBhbmQgbW9kZSBlcXVhbHMKKyAgICAvLyAgIC0gRkFTVF9EVE9BX1NIT1JURVNULCB0
aGVuCisgICAgLy8gICAgIHRoZSBwYXJhbWV0ZXIgcmVxdWVzdGVkX2RpZ2l0cyBpcyBpZ25vcmVk
LgorICAgIC8vICAgICBUaGUgcmVzdWx0IHNhdGlzZmllcworICAgIC8vICAgICAgICAgdiA9PSAo
ZG91YmxlKSAoYnVmZmVyICogMTBeKHBvaW50IC0gbGVuZ3RoKSkuCisgICAgLy8gICAgIFRoZSBk
aWdpdHMgaW4gdGhlIGJ1ZmZlciBhcmUgdGhlIHNob3J0ZXN0IHJlcHJlc2VudGF0aW9uIHBvc3Np
YmxlLiBFLmcuCisgICAgLy8gICAgIGlmIDAuMDk5OTk5OTk5OTk5IGFuZCAwLjEgcmVwcmVzZW50
IHRoZSBzYW1lIGRvdWJsZSB0aGVuICIxIiBpcyByZXR1cm5lZAorICAgIC8vICAgICB3aXRoIHBv
aW50ID0gMC4KKyAgICAvLyAgICAgVGhlIGxhc3QgZGlnaXQgd2lsbCBiZSBjbG9zZXN0IHRvIHRo
ZSBhY3R1YWwgdi4gVGhhdCBpcywgZXZlbiBpZiBzZXZlcmFsCisgICAgLy8gICAgIGRpZ2l0cyBt
aWdodCBjb3JyZWN0bHkgeWllbGQgJ3YnIHdoZW4gcmVhZCBhZ2FpbiwgdGhlIGJ1ZmZlciB3aWxs
IGNvbnRhaW4KKyAgICAvLyAgICAgdGhlIG9uZSBjbG9zZXN0IHRvIHYuCisgICAgLy8gICAtIEZB
U1RfRFRPQV9QUkVDSVNJT04sIHRoZW4KKyAgICAvLyAgICAgdGhlIGJ1ZmZlciBjb250YWlucyBy
ZXF1ZXN0ZWRfZGlnaXRzIGRpZ2l0cy4KKyAgICAvLyAgICAgdGhlIGRpZmZlcmVuY2UgdiAtIChi
dWZmZXIgKiAxMF4ocG9pbnQtbGVuZ3RoKSkgaXMgY2xvc2VzdCB0byB6ZXJvIGZvcgorICAgIC8v
ICAgICBhbGwgcG9zc2libGUgcmVwcmVzZW50YXRpb25zIG9mIHJlcXVlc3RlZF9kaWdpdHMgZGln
aXRzLgorICAgIC8vICAgICBJZiB0aGVyZSBhcmUgdHdvIHZhbHVlcyB0aGF0IGFyZSBlcXVhbGx5
IGNsb3NlLCB0aGVuIEZhc3REdG9hIHJldHVybnMKKyAgICAvLyAgICAgZmFsc2UuCisgICAgLy8g
Rm9yIGJvdGggbW9kZXMgdGhlIGJ1ZmZlciBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIHRo
ZSByZXN1bHQuCisgICAgYm9vbCBGYXN0RHRvYShkb3VibGUgZCwKKyAgICAgICAgICAgICAgICAg
IEZhc3REdG9hTW9kZSBtb2RlLAorICAgICAgICAgICAgICAgICAgaW50IHJlcXVlc3RlZF9kaWdp
dHMsCisgICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLAorICAgICAgICAgICAg
ICAgICAgaW50KiBsZW5ndGgsCisgICAgICAgICAgICAgICAgICBpbnQqIGRlY2ltYWxfcG9pbnQp
OworICAgIAorfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCisKKyNlbmRpZiAgLy8g
RE9VQkxFX0NPTlZFUlNJT05fRkFTVF9EVE9BX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL2R0b2EvZml4ZWQtZHRvYS5jYyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvZHRvYS9maXhlZC1kdG9hLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk0ZDMyMjllYzZjNDc0NDlhZGY1ZDAx
NDljNzQxMGJiMjBmMDIwYWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL2R0b2EvZml4ZWQtZHRvYS5jYwpAQCAtMCwwICsxLDQwNCBAQAorLy8gQ29weXJpZ2h0
IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisv
LyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1lciBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAg
ICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAg
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisv
LyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorCisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSAiVW51c2VkUGFy
YW0uaCIKKyNpbmNsdWRlICJmaXhlZC1kdG9hLmgiCisjaW5jbHVkZSAiZG91YmxlLmgiCisKK25h
bWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgLy8gUmVwcmVzZW50cyBhIDEy
OGJpdCB0eXBlLiBUaGlzIGNsYXNzIHNob3VsZCBiZSByZXBsYWNlZCBieSBhIG5hdGl2ZSB0eXBl
IG9uCisgICAgLy8gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCAxMjhiaXQgaW50ZWdlcnMuCisgICAg
Y2xhc3MgVUludDEyOCB7CisgICAgcHVibGljOgorICAgICAgICBVSW50MTI4KCkgOiBoaWdoX2Jp
dHNfKDApLCBsb3dfYml0c18oMCkgeyB9CisgICAgICAgIFVJbnQxMjgodWludDY0X3QgaGlnaCwg
dWludDY0X3QgbG93KSA6IGhpZ2hfYml0c18oaGlnaCksIGxvd19iaXRzXyhsb3cpIHsgfQorICAg
ICAgICAKKyAgICAgICAgdm9pZCBNdWx0aXBseSh1aW50MzJfdCBtdWx0aXBsaWNhbmQpIHsKKyAg
ICAgICAgICAgIHVpbnQ2NF90IGFjY3VtdWxhdG9yOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBhY2N1bXVsYXRvciA9IChsb3dfYml0c18gJiBrTWFzazMyKSAqIG11bHRpcGxpY2FuZDsKKyAg
ICAgICAgICAgIHVpbnQzMl90IHBhcnQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYWNjdW11bGF0
b3IgJiBrTWFzazMyKTsKKyAgICAgICAgICAgIGFjY3VtdWxhdG9yID4+PSAzMjsKKyAgICAgICAg
ICAgIGFjY3VtdWxhdG9yID0gYWNjdW11bGF0b3IgKyAobG93X2JpdHNfID4+IDMyKSAqIG11bHRp
cGxpY2FuZDsKKyAgICAgICAgICAgIGxvd19iaXRzXyA9IChhY2N1bXVsYXRvciA8PCAzMikgKyBw
YXJ0OworICAgICAgICAgICAgYWNjdW11bGF0b3IgPj49IDMyOworICAgICAgICAgICAgYWNjdW11
bGF0b3IgPSBhY2N1bXVsYXRvciArIChoaWdoX2JpdHNfICYga01hc2szMikgKiBtdWx0aXBsaWNh
bmQ7CisgICAgICAgICAgICBwYXJ0ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFjY3VtdWxhdG9y
ICYga01hc2szMik7CisgICAgICAgICAgICBhY2N1bXVsYXRvciA+Pj0gMzI7CisgICAgICAgICAg
ICBhY2N1bXVsYXRvciA9IGFjY3VtdWxhdG9yICsgKGhpZ2hfYml0c18gPj4gMzIpICogbXVsdGlw
bGljYW5kOworICAgICAgICAgICAgaGlnaF9iaXRzXyA9IChhY2N1bXVsYXRvciA8PCAzMikgKyBw
YXJ0OworICAgICAgICAgICAgQVNTRVJUKChhY2N1bXVsYXRvciA+PiAzMikgPT0gMCk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgU2hpZnQoaW50IHNoaWZ0X2Ftb3VudCkgewor
ICAgICAgICAgICAgQVNTRVJUKC02NCA8PSBzaGlmdF9hbW91bnQgJiYgc2hpZnRfYW1vdW50IDw9
IDY0KTsKKyAgICAgICAgICAgIGlmIChzaGlmdF9hbW91bnQgPT0gMCkgeworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hpZnRfYW1vdW50ID09IC02NCkg
eworICAgICAgICAgICAgICAgIGhpZ2hfYml0c18gPSBsb3dfYml0c187CisgICAgICAgICAgICAg
ICAgbG93X2JpdHNfID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hpZnRfYW1vdW50ID09
IDY0KSB7CisgICAgICAgICAgICAgICAgbG93X2JpdHNfID0gaGlnaF9iaXRzXzsKKyAgICAgICAg
ICAgICAgICBoaWdoX2JpdHNfID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hpZnRfYW1v
dW50IDw9IDApIHsKKyAgICAgICAgICAgICAgICBoaWdoX2JpdHNfIDw8PSAtc2hpZnRfYW1vdW50
OworICAgICAgICAgICAgICAgIGhpZ2hfYml0c18gKz0gbG93X2JpdHNfID4+ICg2NCArIHNoaWZ0
X2Ftb3VudCk7CisgICAgICAgICAgICAgICAgbG93X2JpdHNfIDw8PSAtc2hpZnRfYW1vdW50Owor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBsb3dfYml0c18gPj49IHNoaWZ0
X2Ftb3VudDsKKyAgICAgICAgICAgICAgICBsb3dfYml0c18gKz0gaGlnaF9iaXRzXyA8PCAoNjQg
LSBzaGlmdF9hbW91bnQpOworICAgICAgICAgICAgICAgIGhpZ2hfYml0c18gPj49IHNoaWZ0X2Ft
b3VudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gTW9k
aWZpZXMgKnRoaXMgdG8gKnRoaXMgTU9EICgyXnBvd2VyKS4KKyAgICAgICAgLy8gUmV0dXJucyAq
dGhpcyBESVYgKDJecG93ZXIpLgorICAgICAgICBpbnQgRGl2TW9kUG93ZXJPZjIoaW50IHBvd2Vy
KSB7CisgICAgICAgICAgICBpZiAocG93ZXIgPj0gNjQpIHsKKyAgICAgICAgICAgICAgICBpbnQg
cmVzdWx0ID0gc3RhdGljX2Nhc3Q8aW50PihoaWdoX2JpdHNfID4+IChwb3dlciAtIDY0KSk7Cisg
ICAgICAgICAgICAgICAgaGlnaF9iaXRzXyAtPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4ocmVzdWx0
KSA8PCAocG93ZXIgLSA2NCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdWludDY0X3QgcGFydF9sb3cgPSBsb3df
Yml0c18gPj4gcG93ZXI7CisgICAgICAgICAgICAgICAgdWludDY0X3QgcGFydF9oaWdoID0gaGln
aF9iaXRzXyA8PCAoNjQgLSBwb3dlcik7CisgICAgICAgICAgICAgICAgaW50IHJlc3VsdCA9IHN0
YXRpY19jYXN0PGludD4ocGFydF9sb3cgKyBwYXJ0X2hpZ2gpOworICAgICAgICAgICAgICAgIGhp
Z2hfYml0c18gPSAwOworICAgICAgICAgICAgICAgIGxvd19iaXRzXyAtPSBwYXJ0X2xvdyA8PCBw
b3dlcjsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIElzWmVybygpIGNvbnN0IHsKKyAgICAgICAg
ICAgIHJldHVybiBoaWdoX2JpdHNfID09IDAgJiYgbG93X2JpdHNfID09IDA7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGludCBCaXRBdChpbnQgcG9zaXRpb24pIHsKKyAgICAgICAgICAg
IGlmIChwb3NpdGlvbiA+PSA2NCkgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxpbnQ+KGhpZ2hfYml0c18gPj4gKHBvc2l0aW9uIC0gNjQpKSAmIDE7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxvd19iaXRz
XyA+PiBwb3NpdGlvbikgJiAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAor
ICAgIHByaXZhdGU6CisgICAgICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBrTWFzazMyID0gMHhG
RkZGRkZGRjsKKyAgICAgICAgLy8gVmFsdWUgPT0gKGhpZ2hfYml0c18gPDwgNjQpICsgbG93X2Jp
dHNfCisgICAgICAgIHVpbnQ2NF90IGhpZ2hfYml0c187CisgICAgICAgIHVpbnQ2NF90IGxvd19i
aXRzXzsKKyAgICB9OworICAgIAorICAgIAorICAgIHN0YXRpYyBjb25zdCBpbnQga0RvdWJsZVNp
Z25pZmljYW5kU2l6ZSA9IDUzOyAgLy8gSW5jbHVkZXMgdGhlIGhpZGRlbiBiaXQuCisgICAgCisg
ICAgCisgICAgc3RhdGljIHZvaWQgRmlsbERpZ2l0czMyRml4ZWRMZW5ndGgodWludDMyX3QgbnVt
YmVyLCBpbnQgcmVxdWVzdGVkX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLCBpbnQqIGxlbmd0aCkgeworICAgICAgICBm
b3IgKGludCBpID0gcmVxdWVzdGVkX2xlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAg
ICAgICBidWZmZXJbKCpsZW5ndGgpICsgaV0gPSAnMCcgKyBudW1iZXIgJSAxMDsKKyAgICAgICAg
ICAgIG51bWJlciAvPSAxMDsKKyAgICAgICAgfQorICAgICAgICAqbGVuZ3RoICs9IHJlcXVlc3Rl
ZF9sZW5ndGg7CisgICAgfQorICAgIAorICAgIAorICAgIHN0YXRpYyB2b2lkIEZpbGxEaWdpdHMz
Mih1aW50MzJfdCBudW1iZXIsIFZlY3RvcjxjaGFyPiBidWZmZXIsIGludCogbGVuZ3RoKSB7Cisg
ICAgICAgIGludCBudW1iZXJfbGVuZ3RoID0gMDsKKyAgICAgICAgLy8gV2UgZmlsbCB0aGUgZGln
aXRzIGluIHJldmVyc2Ugb3JkZXIgYW5kIGV4Y2hhbmdlIHRoZW0gYWZ0ZXJ3YXJkcy4KKyAgICAg
ICAgd2hpbGUgKG51bWJlciAhPSAwKSB7CisgICAgICAgICAgICBpbnQgZGlnaXQgPSBudW1iZXIg
JSAxMDsKKyAgICAgICAgICAgIG51bWJlciAvPSAxMDsKKyAgICAgICAgICAgIGJ1ZmZlclsoKmxl
bmd0aCkgKyBudW1iZXJfbGVuZ3RoXSA9ICcwJyArIGRpZ2l0OworICAgICAgICAgICAgbnVtYmVy
X2xlbmd0aCsrOworICAgICAgICB9CisgICAgICAgIC8vIEV4Y2hhbmdlIHRoZSBkaWdpdHMuCisg
ICAgICAgIGludCBpID0gKmxlbmd0aDsKKyAgICAgICAgaW50IGogPSAqbGVuZ3RoICsgbnVtYmVy
X2xlbmd0aCAtIDE7CisgICAgICAgIHdoaWxlIChpIDwgaikgeworICAgICAgICAgICAgY2hhciB0
bXAgPSBidWZmZXJbaV07CisgICAgICAgICAgICBidWZmZXJbaV0gPSBidWZmZXJbal07CisgICAg
ICAgICAgICBidWZmZXJbal0gPSB0bXA7CisgICAgICAgICAgICBpKys7CisgICAgICAgICAgICBq
LS07CisgICAgICAgIH0KKyAgICAgICAgKmxlbmd0aCArPSBudW1iZXJfbGVuZ3RoOworICAgIH0K
KyAgICAKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBGaWxsRGlnaXRzNjRGaXhlZExlbmd0aCh1aW50
NjRfdCBudW1iZXIsIGludCByZXF1ZXN0ZWRfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXIsIGludCogbGVuZ3RoKSB7Cisg
ICAgICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0ZWRfbGVuZ3RoKTsKKyAgICAgICAgY29uc3QgdWlu
dDMyX3Qga1RlbjcgPSAxMDAwMDAwMDsKKyAgICAgICAgLy8gRm9yIGVmZmljaWVuY3kgY3V0IHRo
ZSBudW1iZXIgaW50byAzIHVpbnQzMl90IHBhcnRzLCBhbmQgcHJpbnQgdGhvc2UuCisgICAgICAg
IHVpbnQzMl90IHBhcnQyID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG51bWJlciAlIGtUZW43KTsK
KyAgICAgICAgbnVtYmVyIC89IGtUZW43OworICAgICAgICB1aW50MzJfdCBwYXJ0MSA9IHN0YXRp
Y19jYXN0PHVpbnQzMl90PihudW1iZXIgJSBrVGVuNyk7CisgICAgICAgIHVpbnQzMl90IHBhcnQw
ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG51bWJlciAvIGtUZW43KTsKKyAgICAgICAgCisgICAg
ICAgIEZpbGxEaWdpdHMzMkZpeGVkTGVuZ3RoKHBhcnQwLCAzLCBidWZmZXIsIGxlbmd0aCk7Cisg
ICAgICAgIEZpbGxEaWdpdHMzMkZpeGVkTGVuZ3RoKHBhcnQxLCA3LCBidWZmZXIsIGxlbmd0aCk7
CisgICAgICAgIEZpbGxEaWdpdHMzMkZpeGVkTGVuZ3RoKHBhcnQyLCA3LCBidWZmZXIsIGxlbmd0
aCk7CisgICAgfQorICAgIAorICAgIAorICAgIHN0YXRpYyB2b2lkIEZpbGxEaWdpdHM2NCh1aW50
NjRfdCBudW1iZXIsIFZlY3RvcjxjaGFyPiBidWZmZXIsIGludCogbGVuZ3RoKSB7CisgICAgICAg
IGNvbnN0IHVpbnQzMl90IGtUZW43ID0gMTAwMDAwMDA7CisgICAgICAgIC8vIEZvciBlZmZpY2ll
bmN5IGN1dCB0aGUgbnVtYmVyIGludG8gMyB1aW50MzJfdCBwYXJ0cywgYW5kIHByaW50IHRob3Nl
LgorICAgICAgICB1aW50MzJfdCBwYXJ0MiA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihudW1iZXIg
JSBrVGVuNyk7CisgICAgICAgIG51bWJlciAvPSBrVGVuNzsKKyAgICAgICAgdWludDMyX3QgcGFy
dDEgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4obnVtYmVyICUga1RlbjcpOworICAgICAgICB1aW50
MzJfdCBwYXJ0MCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihudW1iZXIgLyBrVGVuNyk7CisgICAg
ICAgIAorICAgICAgICBpZiAocGFydDAgIT0gMCkgeworICAgICAgICAgICAgRmlsbERpZ2l0czMy
KHBhcnQwLCBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgICAgICBGaWxsRGlnaXRzMzJGaXhlZExl
bmd0aChwYXJ0MSwgNywgYnVmZmVyLCBsZW5ndGgpOworICAgICAgICAgICAgRmlsbERpZ2l0czMy
Rml4ZWRMZW5ndGgocGFydDIsIDcsIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAgfSBlbHNlIGlm
IChwYXJ0MSAhPSAwKSB7CisgICAgICAgICAgICBGaWxsRGlnaXRzMzIocGFydDEsIGJ1ZmZlciwg
bGVuZ3RoKTsKKyAgICAgICAgICAgIEZpbGxEaWdpdHMzMkZpeGVkTGVuZ3RoKHBhcnQyLCA3LCBi
dWZmZXIsIGxlbmd0aCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBGaWxsRGlnaXRz
MzIocGFydDIsIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAK
KyAgICBzdGF0aWMgdm9pZCBSb3VuZFVwKFZlY3RvcjxjaGFyPiBidWZmZXIsIGludCogbGVuZ3Ro
LCBpbnQqIGRlY2ltYWxfcG9pbnQpIHsKKyAgICAgICAgLy8gQW4gZW1wdHkgYnVmZmVyIHJlcHJl
c2VudHMgMC4KKyAgICAgICAgaWYgKCpsZW5ndGggPT0gMCkgeworICAgICAgICAgICAgYnVmZmVy
WzBdID0gJzEnOworICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSAxOworICAgICAgICAgICAg
Kmxlbmd0aCA9IDE7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8g
Um91bmQgdGhlIGxhc3QgZGlnaXQgdW50aWwgd2UgZWl0aGVyIGhhdmUgYSBkaWdpdCB0aGF0IHdh
cyBub3QgJzknIG9yIHVudGlsCisgICAgICAgIC8vIHdlIHJlYWNoZWQgdGhlIGZpcnN0IGRpZ2l0
LgorICAgICAgICBidWZmZXJbKCpsZW5ndGgpIC0gMV0rKzsKKyAgICAgICAgZm9yIChpbnQgaSA9
ICgqbGVuZ3RoKSAtIDE7IGkgPiAwOyAtLWkpIHsKKyAgICAgICAgICAgIGlmIChidWZmZXJbaV0g
IT0gJzAnICsgMTApIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBidWZmZXJbaV0gPSAnMCc7CisgICAgICAgICAgICBidWZmZXJbaSAtIDFdKys7
CisgICAgICAgIH0KKyAgICAgICAgLy8gSWYgdGhlIGZpcnN0IGRpZ2l0IGlzIG5vdyAnMCcgKyAx
MCwgd2Ugd291bGQgbmVlZCB0byBzZXQgaXQgdG8gJzAnIGFuZCBhZGQKKyAgICAgICAgLy8gYSAn
MScgaW4gZnJvbnQuIEhvd2V2ZXIgd2UgcmVhY2ggdGhlIGZpcnN0IGRpZ2l0IG9ubHkgaWYgYWxs
IGZvbGxvd2luZworICAgICAgICAvLyBkaWdpdHMgaGFkIGJlZW4gJzknIGJlZm9yZSByb3VuZGlu
ZyB1cC4gTm93IGFsbCB0cmFpbGluZyBkaWdpdHMgYXJlICcwJyBhbmQKKyAgICAgICAgLy8gd2Ug
c2ltcGx5IHN3aXRjaCB0aGUgZmlyc3QgZGlnaXQgdG8gJzEnIGFuZCB1cGRhdGUgdGhlIGRlY2lt
YWwtcG9pbnQKKyAgICAgICAgLy8gKGluZGljYXRpbmcgdGhhdCB0aGUgcG9pbnQgaXMgbm93IG9u
ZSBkaWdpdCB0byB0aGUgcmlnaHQpLgorICAgICAgICBpZiAoYnVmZmVyWzBdID09ICcwJyArIDEw
KSB7CisgICAgICAgICAgICBidWZmZXJbMF0gPSAnMSc7CisgICAgICAgICAgICAoKmRlY2ltYWxf
cG9pbnQpKys7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgLy8gVGhlIGdpdmVu
IGZyYWN0aW9uYWxzIG51bWJlciByZXByZXNlbnRzIGEgZml4ZWQtcG9pbnQgbnVtYmVyIHdpdGgg
YmluYXJ5CisgICAgLy8gcG9pbnQgYXQgYml0ICgtZXhwb25lbnQpLgorICAgIC8vIFByZWNvbmRp
dGlvbnM6CisgICAgLy8gICAtMTI4IDw9IGV4cG9uZW50IDw9IDAuCisgICAgLy8gICAwIDw9IGZy
YWN0aW9uYWxzICogMl5leHBvbmVudCA8IDEKKyAgICAvLyAgIFRoZSBidWZmZXIgaG9sZHMgdGhl
IHJlc3VsdC4KKyAgICAvLyBUaGUgZnVuY3Rpb24gd2lsbCByb3VuZCBpdHMgcmVzdWx0LiBEdXJp
bmcgdGhlIHJvdW5kaW5nLXByb2Nlc3MgZGlnaXRzIG5vdAorICAgIC8vIGdlbmVyYXRlZCBieSB0
aGlzIGZ1bmN0aW9uIG1pZ2h0IGJlIHVwZGF0ZWQsIGFuZCB0aGUgZGVjaW1hbC1wb2ludCB2YXJp
YWJsZQorICAgIC8vIG1pZ2h0IGJlIHVwZGF0ZWQuIElmIHRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVz
IHRoZSBkaWdpdHMgOTkgYW5kIHRoZSBidWZmZXIKKyAgICAvLyBhbHJlYWR5IGNvbnRhaW5lZCAi
MTk5IiAodGh1cyB5aWVsZGluZyBhIGJ1ZmZlciBvZiAiMTk5OTkiKSB0aGVuIGEKKyAgICAvLyBy
b3VuZGluZy11cCB3aWxsIGNoYW5nZSB0aGUgY29udGVudHMgb2YgdGhlIGJ1ZmZlciB0byAiMjAw
MDAiLgorICAgIHN0YXRpYyB2b2lkIEZpbGxGcmFjdGlvbmFscyh1aW50NjRfdCBmcmFjdGlvbmFs
cywgaW50IGV4cG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJh
Y3Rpb25hbF9jb3VudCwgVmVjdG9yPGNoYXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50KiBsZW5ndGgsIGludCogZGVjaW1hbF9wb2ludCkgeworICAgICAgICBB
U1NFUlQoLTEyOCA8PSBleHBvbmVudCAmJiBleHBvbmVudCA8PSAwKTsKKyAgICAgICAgLy8gJ2Zy
YWN0aW9uYWxzJyBpcyBhIGZpeGVkLXBvaW50IG51bWJlciwgd2l0aCBiaW5hcnkgcG9pbnQgYXQg
Yml0CisgICAgICAgIC8vICgtZXhwb25lbnQpLiBJbnNpZGUgdGhlIGZ1bmN0aW9uIHRoZSBub24t
Y29udmVydGVkIHJlbWFpbmRlciBvZiBmcmFjdGlvbmFscworICAgICAgICAvLyBpcyBhIGZpeGVk
LXBvaW50IG51bWJlciwgd2l0aCBiaW5hcnkgcG9pbnQgYXQgYml0ICdwb2ludCcuCisgICAgICAg
IGlmICgtZXhwb25lbnQgPD0gNjQpIHsKKyAgICAgICAgICAgIC8vIE9uZSA2NCBiaXQgbnVtYmVy
IGlzIHN1ZmZpY2llbnQuCisgICAgICAgICAgICBBU1NFUlQoZnJhY3Rpb25hbHMgPj4gNTYgPT0g
MCk7CisgICAgICAgICAgICBpbnQgcG9pbnQgPSAtZXhwb25lbnQ7CisgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGZyYWN0aW9uYWxfY291bnQ7ICsraSkgeworICAgICAgICAgICAgICAg
IGlmIChmcmFjdGlvbmFscyA9PSAwKSBicmVhazsKKyAgICAgICAgICAgICAgICAvLyBJbnN0ZWFk
IG9mIG11bHRpcGx5aW5nIGJ5IDEwIHdlIG11bHRpcGx5IGJ5IDUgYW5kIGFkanVzdCB0aGUgcG9p
bnQKKyAgICAgICAgICAgICAgICAvLyBsb2NhdGlvbi4gVGhpcyB3YXkgdGhlIGZyYWN0aW9uYWxz
IHZhcmlhYmxlIHdpbGwgbm90IG92ZXJmbG93LgorICAgICAgICAgICAgICAgIC8vIEludmFyaWFu
dCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wOiBmcmFjdGlvbmFscyA8IDJecG9pbnQuCisg
ICAgICAgICAgICAgICAgLy8gSW5pdGlhbGx5IHdlIGhhdmU6IHBvaW50IDw9IDY0IGFuZCBmcmFj
dGlvbmFscyA8IDJeNTYKKyAgICAgICAgICAgICAgICAvLyBBZnRlciBlYWNoIGl0ZXJhdGlvbiB0
aGUgcG9pbnQgaXMgZGVjcmVtZW50ZWQgYnkgb25lLgorICAgICAgICAgICAgICAgIC8vIE5vdGUg
dGhhdCA1XjMgPSAxMjUgPCAxMjggPSAyXjcuCisgICAgICAgICAgICAgICAgLy8gVGhlcmVmb3Jl
IHRocmVlIGl0ZXJhdGlvbnMgb2YgdGhpcyBsb29wIHdpbGwgbm90IG92ZXJmbG93IGZyYWN0aW9u
YWxzCisgICAgICAgICAgICAgICAgLy8gKGV2ZW4gd2l0aG91dCB0aGUgc3VidHJhY3Rpb24gYXQg
dGhlIGVuZCBvZiB0aGUgbG9vcCBib2R5KS4gQXQgdGhpcworICAgICAgICAgICAgICAgIC8vIHRp
bWUgcG9pbnQgd2lsbCBzYXRpc2Z5IHBvaW50IDw9IDYxIGFuZCB0aGVyZWZvcmUgZnJhY3Rpb25h
bHMgPCAyXnBvaW50CisgICAgICAgICAgICAgICAgLy8gYW5kIGFueSBmdXJ0aGVyIG11bHRpcGxp
Y2F0aW9uIG9mIGZyYWN0aW9uYWxzIGJ5IDUgd2lsbCBub3Qgb3ZlcmZsb3cuCisgICAgICAgICAg
ICAgICAgZnJhY3Rpb25hbHMgKj0gNTsKKyAgICAgICAgICAgICAgICBwb2ludC0tOworICAgICAg
ICAgICAgICAgIGludCBkaWdpdCA9IHN0YXRpY19jYXN0PGludD4oZnJhY3Rpb25hbHMgPj4gcG9p
bnQpOworICAgICAgICAgICAgICAgIGJ1ZmZlclsqbGVuZ3RoXSA9ICcwJyArIGRpZ2l0OworICAg
ICAgICAgICAgICAgICgqbGVuZ3RoKSsrOworICAgICAgICAgICAgICAgIGZyYWN0aW9uYWxzIC09
IHN0YXRpY19jYXN0PHVpbnQ2NF90PihkaWdpdCkgPDwgcG9pbnQ7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAvLyBJZiB0aGUgZmlyc3QgYml0IGFmdGVyIHRoZSBwb2ludCBpcyBzZXQgd2Ug
aGF2ZSB0byByb3VuZCB1cC4KKyAgICAgICAgICAgIGlmICgoKGZyYWN0aW9uYWxzID4+IChwb2lu
dCAtIDEpKSAmIDEpID09IDEpIHsKKyAgICAgICAgICAgICAgICBSb3VuZFVwKGJ1ZmZlciwgbGVu
Z3RoLCBkZWNpbWFsX3BvaW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsgIC8v
IFdlIG5lZWQgMTI4IGJpdHMuCisgICAgICAgICAgICBBU1NFUlQoNjQgPCAtZXhwb25lbnQgJiYg
LWV4cG9uZW50IDw9IDEyOCk7CisgICAgICAgICAgICBVSW50MTI4IGZyYWN0aW9uYWxzMTI4ID0g
VUludDEyOChmcmFjdGlvbmFscywgMCk7CisgICAgICAgICAgICBmcmFjdGlvbmFsczEyOC5TaGlm
dCgtZXhwb25lbnQgLSA2NCk7CisgICAgICAgICAgICBpbnQgcG9pbnQgPSAxMjg7CisgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYWN0aW9uYWxfY291bnQ7ICsraSkgeworICAgICAg
ICAgICAgICAgIGlmIChmcmFjdGlvbmFsczEyOC5Jc1plcm8oKSkgYnJlYWs7CisgICAgICAgICAg
ICAgICAgLy8gQXMgYmVmb3JlOiBpbnN0ZWFkIG9mIG11bHRpcGx5aW5nIGJ5IDEwIHdlIG11bHRp
cGx5IGJ5IDUgYW5kIGFkanVzdCB0aGUKKyAgICAgICAgICAgICAgICAvLyBwb2ludCBsb2NhdGlv
bi4KKyAgICAgICAgICAgICAgICAvLyBUaGlzIG11bHRpcGxpY2F0aW9uIHdpbGwgbm90IG92ZXJm
bG93IGZvciB0aGUgc2FtZSByZWFzb25zIGFzIGJlZm9yZS4KKyAgICAgICAgICAgICAgICBmcmFj
dGlvbmFsczEyOC5NdWx0aXBseSg1KTsKKyAgICAgICAgICAgICAgICBwb2ludC0tOworICAgICAg
ICAgICAgICAgIGludCBkaWdpdCA9IGZyYWN0aW9uYWxzMTI4LkRpdk1vZFBvd2VyT2YyKHBvaW50
KTsKKyAgICAgICAgICAgICAgICBidWZmZXJbKmxlbmd0aF0gPSAnMCcgKyBkaWdpdDsKKyAgICAg
ICAgICAgICAgICAoKmxlbmd0aCkrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChm
cmFjdGlvbmFsczEyOC5CaXRBdChwb2ludCAtIDEpID09IDEpIHsKKyAgICAgICAgICAgICAgICBS
b3VuZFVwKGJ1ZmZlciwgbGVuZ3RoLCBkZWNpbWFsX3BvaW50KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBSZW1vdmVzIGxlYWRpbmcgYW5kIHRy
YWlsaW5nIHplcm9zLgorICAgIC8vIElmIGxlYWRpbmcgemVyb3MgYXJlIHJlbW92ZWQgdGhlbiB0
aGUgZGVjaW1hbCBwb2ludCBwb3NpdGlvbiBpcyBhZGp1c3RlZC4KKyAgICBzdGF0aWMgdm9pZCBU
cmltWmVyb3MoVmVjdG9yPGNoYXI+IGJ1ZmZlciwgaW50KiBsZW5ndGgsIGludCogZGVjaW1hbF9w
b2ludCkgeworICAgICAgICB3aGlsZSAoKmxlbmd0aCA+IDAgJiYgYnVmZmVyWygqbGVuZ3RoKSAt
IDFdID09ICcwJykgeworICAgICAgICAgICAgKCpsZW5ndGgpLS07CisgICAgICAgIH0KKyAgICAg
ICAgaW50IGZpcnN0X25vbl96ZXJvID0gMDsKKyAgICAgICAgd2hpbGUgKGZpcnN0X25vbl96ZXJv
IDwgKmxlbmd0aCAmJiBidWZmZXJbZmlyc3Rfbm9uX3plcm9dID09ICcwJykgeworICAgICAgICAg
ICAgZmlyc3Rfbm9uX3plcm8rKzsKKyAgICAgICAgfQorICAgICAgICBpZiAoZmlyc3Rfbm9uX3pl
cm8gIT0gMCkgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IGZpcnN0X25vbl96ZXJvOyBpIDwg
Kmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgLSBmaXJzdF9ub25femVy
b10gPSBidWZmZXJbaV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICAqbGVuZ3RoIC09IGZp
cnN0X25vbl96ZXJvOworICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgLT0gZmlyc3Rfbm9uX3pl
cm87CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgYm9vbCBGYXN0Rml4ZWREdG9h
KGRvdWJsZSB2LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJhY3Rpb25hbF9jb3VudCwK
KyAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgaW50KiBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgIGludCogZGVj
aW1hbF9wb2ludCkgeworICAgICAgICBjb25zdCB1aW50MzJfdCBrTWF4VUludDMyID0gMHhGRkZG
RkZGRjsKKyAgICAgICAgdWludDY0X3Qgc2lnbmlmaWNhbmQgPSBEb3VibGUodikuU2lnbmlmaWNh
bmQoKTsKKyAgICAgICAgaW50IGV4cG9uZW50ID0gRG91YmxlKHYpLkV4cG9uZW50KCk7CisgICAg
ICAgIC8vIHYgPSBzaWduaWZpY2FuZCAqIDJeZXhwb25lbnQgKHdpdGggc2lnbmlmaWNhbmQgYSA1
M2JpdCBpbnRlZ2VyKS4KKyAgICAgICAgLy8gSWYgdGhlIGV4cG9uZW50IGlzIGxhcmdlciB0aGFu
IDIwIChpLmUuIHdlIG1heSBoYXZlIGEgNzNiaXQgbnVtYmVyKSB0aGVuIHdlCisgICAgICAgIC8v
IGRvbid0IGtub3cgaG93IHRvIGNvbXB1dGUgdGhlIHJlcHJlc2VudGF0aW9uLiAyXjczIH49IDku
NSoxMF4yMS4KKyAgICAgICAgLy8gSWYgbmVjZXNzYXJ5IHRoaXMgbGltaXQgY291bGQgcHJvYmFi
bHkgYmUgaW5jcmVhc2VkLCBidXQgd2UgZG9uJ3QgbmVlZAorICAgICAgICAvLyBtb3JlLgorICAg
ICAgICBpZiAoZXhwb25lbnQgPiAyMCkgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoZnJhY3Rp
b25hbF9jb3VudCA+IDIwKSByZXR1cm4gZmFsc2U7CisgICAgICAgICpsZW5ndGggPSAwOworICAg
ICAgICAvLyBBdCBtb3N0IGtEb3VibGVTaWduaWZpY2FuZFNpemUgYml0cyBvZiB0aGUgc2lnbmlm
aWNhbmQgYXJlIG5vbi16ZXJvLgorICAgICAgICAvLyBHaXZlbiBhIDY0IGJpdCBpbnRlZ2VyIHdl
IGhhdmUgMTEgMHMgZm9sbG93ZWQgYnkgNTMgcG90ZW50aWFsbHkgbm9uLXplcm8KKyAgICAgICAg
Ly8gYml0czogIDAuLjExKi4uMHh4eC4uNTMqLi54eAorICAgICAgICBpZiAoZXhwb25lbnQgKyBr
RG91YmxlU2lnbmlmaWNhbmRTaXplID4gNjQpIHsKKyAgICAgICAgICAgIC8vIFRoZSBleHBvbmVu
dCBtdXN0IGJlID4gMTEuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gV2Uga25vdyB0
aGF0IHYgPSBzaWduaWZpY2FuZCAqIDJeZXhwb25lbnQuCisgICAgICAgICAgICAvLyBBbmQgdGhl
IGV4cG9uZW50ID4gMTEuCisgICAgICAgICAgICAvLyBXZSBzaW1wbGlmeSB0aGUgdGFzayBieSBk
aXZpZGluZyB2IGJ5IDEwXjE3LgorICAgICAgICAgICAgLy8gVGhlIHF1b3RpZW50IGRlbGl2ZXJz
IHRoZSBmaXJzdCBkaWdpdHMsIGFuZCB0aGUgcmVtYWluZGVyIGZpdHMgaW50byBhIDY0CisgICAg
ICAgICAgICAvLyBiaXQgbnVtYmVyLgorICAgICAgICAgICAgLy8gRGl2aWRpbmcgYnkgMTBeMTcg
aXMgZXF1aXZhbGVudCB0byBkaXZpZGluZyBieSA1XjE3KjJeMTcuCisgICAgICAgICAgICBjb25z
dCB1aW50NjRfdCBrRml2ZTE3ID0gVUlOVDY0XzJQQVJUX0MoMHhCMSwgQTJCQzJFQzUpOyAgLy8g
NV4xNworICAgICAgICAgICAgdWludDY0X3QgZGl2aXNvciA9IGtGaXZlMTc7CisgICAgICAgICAg
ICBpbnQgZGl2aXNvcl9wb3dlciA9IDE3OworICAgICAgICAgICAgdWludDY0X3QgZGl2aWRlbmQg
PSBzaWduaWZpY2FuZDsKKyAgICAgICAgICAgIHVpbnQzMl90IHF1b3RpZW50OworICAgICAgICAg
ICAgdWludDY0X3QgcmVtYWluZGVyOworICAgICAgICAgICAgLy8gTGV0IHYgPSBmICogMl5lIHdp
dGggZiA9PSBzaWduaWZpY2FuZCBhbmQgZSA9PSBleHBvbmVudC4KKyAgICAgICAgICAgIC8vIFRo
ZW4gbmVlZCBxIChxdW90aWVudCkgYW5kIHIgKHJlbWFpbmRlcikgYXMgZm9sbG93czoKKyAgICAg
ICAgICAgIC8vICAgdiAgICAgICAgICAgID0gcSAqIDEwXjE3ICAgICAgICsgcgorICAgICAgICAg
ICAgLy8gICBmICogMl5lICAgICAgPSBxICogMTBeMTcgICAgICAgKyByCisgICAgICAgICAgICAv
LyAgIGYgKiAyXmUgICAgICA9IHEgKiA1XjE3ICogMl4xNyArIHIKKyAgICAgICAgICAgIC8vIElm
IGUgPiAxNyB0aGVuCisgICAgICAgICAgICAvLyAgIGYgKiAyXihlLTE3KSA9IHEgKiA1XjE3ICAg
ICAgICArIHIvMl4xNworICAgICAgICAgICAgLy8gZWxzZQorICAgICAgICAgICAgLy8gICBmICA9
IHEgKiA1XjE3ICogMl4oMTctZSkgKyByLzJeZQorICAgICAgICAgICAgaWYgKGV4cG9uZW50ID4g
ZGl2aXNvcl9wb3dlcikgeworICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgYWxsb3cgZXhwb25l
bnRzIG9mIHVwIHRvIDIwIGFuZCB0aGVyZWZvcmUgKDE3IC0gZSkgPD0gMworICAgICAgICAgICAg
ICAgIGRpdmlkZW5kIDw8PSBleHBvbmVudCAtIGRpdmlzb3JfcG93ZXI7CisgICAgICAgICAgICAg
ICAgcXVvdGllbnQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZGl2aWRlbmQgLyBkaXZpc29yKTsK
KyAgICAgICAgICAgICAgICByZW1haW5kZXIgPSAoZGl2aWRlbmQgJSBkaXZpc29yKSA8PCBkaXZp
c29yX3Bvd2VyOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkaXZpc29y
IDw8PSBkaXZpc29yX3Bvd2VyIC0gZXhwb25lbnQ7CisgICAgICAgICAgICAgICAgcXVvdGllbnQg
PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZGl2aWRlbmQgLyBkaXZpc29yKTsKKyAgICAgICAgICAg
ICAgICByZW1haW5kZXIgPSAoZGl2aWRlbmQgJSBkaXZpc29yKSA8PCBleHBvbmVudDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIEZpbGxEaWdpdHMzMihxdW90aWVudCwgYnVmZmVyLCBsZW5n
dGgpOworICAgICAgICAgICAgRmlsbERpZ2l0czY0Rml4ZWRMZW5ndGgocmVtYWluZGVyLCBkaXZp
c29yX3Bvd2VyLCBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgICAgICAqZGVjaW1hbF9wb2ludCA9
ICpsZW5ndGg7CisgICAgICAgIH0gZWxzZSBpZiAoZXhwb25lbnQgPj0gMCkgeworICAgICAgICAg
ICAgLy8gMCA8PSBleHBvbmVudCA8PSAxMQorICAgICAgICAgICAgc2lnbmlmaWNhbmQgPDw9IGV4
cG9uZW50OworICAgICAgICAgICAgRmlsbERpZ2l0czY0KHNpZ25pZmljYW5kLCBidWZmZXIsIGxl
bmd0aCk7CisgICAgICAgICAgICAqZGVjaW1hbF9wb2ludCA9ICpsZW5ndGg7CisgICAgICAgIH0g
ZWxzZSBpZiAoZXhwb25lbnQgPiAta0RvdWJsZVNpZ25pZmljYW5kU2l6ZSkgeworICAgICAgICAg
ICAgLy8gV2UgaGF2ZSB0byBjdXQgdGhlIG51bWJlci4KKyAgICAgICAgICAgIHVpbnQ2NF90IGlu
dGVncmFscyA9IHNpZ25pZmljYW5kID4+IC1leHBvbmVudDsKKyAgICAgICAgICAgIHVpbnQ2NF90
IGZyYWN0aW9uYWxzID0gc2lnbmlmaWNhbmQgLSAoaW50ZWdyYWxzIDw8IC1leHBvbmVudCk7Cisg
ICAgICAgICAgICBpZiAoaW50ZWdyYWxzID4ga01heFVJbnQzMikgeworICAgICAgICAgICAgICAg
IEZpbGxEaWdpdHM2NChpbnRlZ3JhbHMsIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgRmlsbERpZ2l0czMyKHN0YXRpY19jYXN0PHVpbnQzMl90
PihpbnRlZ3JhbHMpLCBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAqZGVjaW1hbF9wb2ludCA9ICpsZW5ndGg7CisgICAgICAgICAgICBGaWxsRnJhY3Rpb25hbHMo
ZnJhY3Rpb25hbHMsIGV4cG9uZW50LCBmcmFjdGlvbmFsX2NvdW50LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJ1ZmZlciwgbGVuZ3RoLCBkZWNpbWFsX3BvaW50KTsKKyAgICAgICAgfSBl
bHNlIGlmIChleHBvbmVudCA8IC0xMjgpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgY29uZmlndXJh
dGlvbiAod2l0aCBhdCBtb3N0IDIwIGRpZ2l0cykgbWVhbnMgdGhhdCBhbGwgZGlnaXRzIG11c3Qg
YmUKKyAgICAgICAgICAgIC8vIDAuCisgICAgICAgICAgICBBU1NFUlQoZnJhY3Rpb25hbF9jb3Vu
dCA8PSAyMCk7CisgICAgICAgICAgICBidWZmZXJbMF0gPSAnXDAnOworICAgICAgICAgICAgKmxl
bmd0aCA9IDA7CisgICAgICAgICAgICAqZGVjaW1hbF9wb2ludCA9IC1mcmFjdGlvbmFsX2NvdW50
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSAwOworICAg
ICAgICAgICAgRmlsbEZyYWN0aW9uYWxzKHNpZ25pZmljYW5kLCBleHBvbmVudCwgZnJhY3Rpb25h
bF9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGxlbmd0aCwgZGVj
aW1hbF9wb2ludCk7CisgICAgICAgIH0KKyAgICAgICAgVHJpbVplcm9zKGJ1ZmZlciwgbGVuZ3Ro
LCBkZWNpbWFsX3BvaW50KTsKKyAgICAgICAgYnVmZmVyWypsZW5ndGhdID0gJ1wwJzsKKyAgICAg
ICAgaWYgKCgqbGVuZ3RoKSA9PSAwKSB7CisgICAgICAgICAgICAvLyBUaGUgc3RyaW5nIGlzIGVt
cHR5IGFuZCB0aGUgZGVjaW1hbF9wb2ludCB0aHVzIGhhcyBubyBpbXBvcnRhbmNlLiBNaW1pY2sK
KyAgICAgICAgICAgIC8vIEdheSdzIGR0b2EgYW5kIGFuZCBzZXQgaXQgdG8gLWZyYWN0aW9uYWxf
Y291bnQuCisgICAgICAgICAgICAqZGVjaW1hbF9wb2ludCA9IC1mcmFjdGlvbmFsX2NvdW50Owor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKK30gIC8vIG5hbWVz
cGFjZSBkb3VibGVfY29udmVyc2lvbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9kdG9hL2ZpeGVkLWR0b2EuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9m
aXhlZC1kdG9hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmQ4MmFlM2YzMDUyYTRlNjRmM2U1ZGViOThlNzkzMDAx
ZGUzMDJlMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRv
YS9maXhlZC1kdG9hLmgKQEAgLTAsMCArMSw1NiBAQAorLy8gQ29weXJpZ2h0IDIwMTAgdGhlIFY4
IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8v
CisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisjaWZuZGVmIERPVUJMRV9DT05WRVJTSU9OX0ZJWEVEX0RUT0FfSF8KKyNkZWZpbmUgRE9V
QkxFX0NPTlZFUlNJT05fRklYRURfRFRPQV9IXworCisjaW5jbHVkZSAidXRpbHMuaCIKKworbmFt
ZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKKyAgICAKKyAgICAvLyBQcm9kdWNlcyBkaWdpdHMg
bmVjZXNzYXJ5IHRvIHByaW50IGEgZ2l2ZW4gbnVtYmVyIHdpdGgKKyAgICAvLyAnZnJhY3Rpb25h
bF9jb3VudCcgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50LgorICAgIC8vIFRoZSBidWZm
ZXIgbXVzdCBiZSBiaWcgZW5vdWdoIHRvIGhvbGQgdGhlIHJlc3VsdCBwbHVzIG9uZSB0ZXJtaW5h
dGluZyBudWxsCisgICAgLy8gY2hhcmFjdGVyLgorICAgIC8vCisgICAgLy8gVGhlIHByb2R1Y2Vk
IGRpZ2l0cyBtaWdodCBiZSB0b28gc2hvcnQgaW4gd2hpY2ggY2FzZSB0aGUgY2FsbGVyIGhhcyB0
byBmaWxsCisgICAgLy8gdGhlIGdhcHMgd2l0aCAnMCdzLgorICAgIC8vIEV4YW1wbGU6IEZhc3RG
aXhlZER0b2EoMC4wMDEsIDUsIC4uLikgaXMgYWxsb3dlZCB0byByZXR1cm4gYnVmZmVyID0gIjEi
LCBhbmQKKyAgICAvLyBkZWNpbWFsX3BvaW50ID0gLTIuCisgICAgLy8gSGFsZndheSBjYXNlcyBh
cmUgcm91bmRlZCB0b3dhcmRzICsvLUluZmluaXR5IChhd2F5IGZyb20gMCkuIFRoZSBjYWxsCisg
ICAgLy8gRmFzdEZpeGVkRHRvYSgwLjE1LCAyLCAuLi4pIHRodXMgcmV0dXJucyBidWZmZXIgPSAi
MiIsIGRlY2ltYWxfcG9pbnQgPSAwLgorICAgIC8vIFRoZSByZXR1cm5lZCBidWZmZXIgbWF5IGNv
bnRhaW4gZGlnaXRzIHRoYXQgd291bGQgYmUgdHJ1bmNhdGVkIGZyb20gdGhlCisgICAgLy8gc2hv
cnRlc3QgcmVwcmVzZW50YXRpb24gb2YgdGhlIGlucHV0LgorICAgIC8vCisgICAgLy8gVGhpcyBt
ZXRob2Qgb25seSB3b3JrcyBmb3Igc29tZSBwYXJhbWV0ZXJzLiBJZiBpdCBjYW4ndCBoYW5kbGUg
dGhlIGlucHV0IGl0CisgICAgLy8gcmV0dXJucyBmYWxzZS4gVGhlIG91dHB1dCBpcyBudWxsLXRl
cm1pbmF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gc3VjY2VlZHMuCisgICAgYm9vbCBGYXN0Rml4ZWRE
dG9hKGRvdWJsZSB2LCBpbnQgZnJhY3Rpb25hbF9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwgaW50KiBsZW5ndGgsIGludCogZGVjaW1hbF9wb2ludCk7
CisgICAgCit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KKworI2VuZGlmICAvLyBE
T1VCTEVfQ09OVkVSU0lPTl9GSVhFRF9EVE9BX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL2R0b2Evc3RydG9kLmNjIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9k
dG9hL3N0cnRvZC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNGZlMTExYTBhMTU4ZmQwMGMyMzAxZWE3Yjc4Yzkx
MDU1NzcyZWExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9k
dG9hL3N0cnRvZC5jYwpAQCAtMCwwICsxLDQ0MSBAQAorLy8gQ29weXJpZ2h0IDIwMTAgdGhlIFY4
IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8v
CisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNpbmNsdWRl
ICJzdHJ0b2QuaCIKKyNpbmNsdWRlICJiaWdudW0uaCIKKyNpbmNsdWRlICJjYWNoZWQtcG93ZXJz
LmgiCisjaW5jbHVkZSAiZG91YmxlLmgiCisKK25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7
CisgICAgCisgICAgLy8gMl41MyA9IDkwMDcxOTkyNTQ3NDA5OTIuCisgICAgLy8gQW55IGludGVn
ZXIgd2l0aCBhdCBtb3N0IDE1IGRlY2ltYWwgZGlnaXRzIHdpbGwgaGVuY2UgZml0IGludG8gYSBk
b3VibGUKKyAgICAvLyAod2hpY2ggaGFzIGEgNTNiaXQgc2lnbmlmaWNhbmQpIHdpdGhvdXQgbG9z
cyBvZiBwcmVjaXNpb24uCisgICAgc3RhdGljIGNvbnN0IGludCBrTWF4RXhhY3REb3VibGVJbnRl
Z2VyRGVjaW1hbERpZ2l0cyA9IDE1OworICAgIC8vIDJeNjQgPSAxODQ0Njc0NDA3MzcwOTU1MTYx
NiA+IDEwXjE5CisgICAgc3RhdGljIGNvbnN0IGludCBrTWF4VWludDY0RGVjaW1hbERpZ2l0cyA9
IDE5OworICAgIAorICAgIC8vIE1heCBkb3VibGU6IDEuNzk3NjkzMTM0ODYyMzE1NyB4IDEwXjMw
OAorICAgIC8vIE1pbiBub24temVybyBkb3VibGU6IDQuOTQwNjU2NDU4NDEyNDY1NCB4IDEwXi0z
MjQKKyAgICAvLyBBbnkgeCA+PSAxMF4zMDkgaXMgaW50ZXJwcmV0ZWQgYXMgK2luZmluaXR5Lgor
ICAgIC8vIEFueSB4IDw9IDEwXi0zMjQgaXMgaW50ZXJwcmV0ZWQgYXMgMC4KKyAgICAvLyBOb3Rl
IHRoYXQgMi41ZS0zMjQgKGRlc3BpdGUgYmVpbmcgc21hbGxlciB0aGFuIHRoZSBtaW4gZG91Ymxl
KSB3aWxsIGJlIHJlYWQKKyAgICAvLyBhcyBub24temVybyAoZXF1YWwgdG8gdGhlIG1pbiBub24t
emVybyBkb3VibGUpLgorICAgIHN0YXRpYyBjb25zdCBpbnQga01heERlY2ltYWxQb3dlciA9IDMw
OTsKKyAgICBzdGF0aWMgY29uc3QgaW50IGtNaW5EZWNpbWFsUG93ZXIgPSAtMzI0OworICAgIAor
ICAgIC8vIDJeNjQgPSAxODQ0Njc0NDA3MzcwOTU1MTYxNgorICAgIHN0YXRpYyBjb25zdCB1aW50
NjRfdCBrTWF4VWludDY0ID0gVUlOVDY0XzJQQVJUX0MoMHhGRkZGRkZGRiwgRkZGRkZGRkYpOwor
ICAgIAorICAgIAorICAgIHN0YXRpYyBjb25zdCBkb3VibGUgZXhhY3RfcG93ZXJzX29mX3Rlbltd
ID0geworICAgICAgICAxLjAsICAvLyAxMF4wCisgICAgICAgIDEwLjAsCisgICAgICAgIDEwMC4w
LAorICAgICAgICAxMDAwLjAsCisgICAgICAgIDEwMDAwLjAsCisgICAgICAgIDEwMDAwMC4wLAor
ICAgICAgICAxMDAwMDAwLjAsCisgICAgICAgIDEwMDAwMDAwLjAsCisgICAgICAgIDEwMDAwMDAw
MC4wLAorICAgICAgICAxMDAwMDAwMDAwLjAsCisgICAgICAgIDEwMDAwMDAwMDAwLjAsICAvLyAx
MF4xMAorICAgICAgICAxMDAwMDAwMDAwMDAuMCwKKyAgICAgICAgMTAwMDAwMDAwMDAwMC4wLAor
ICAgICAgICAxMDAwMDAwMDAwMDAwMC4wLAorICAgICAgICAxMDAwMDAwMDAwMDAwMDAuMCwKKyAg
ICAgICAgMTAwMDAwMDAwMDAwMDAwMC4wLAorICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMC4wLAor
ICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAuMCwKKyAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAw
MC4wLAorICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMC4wLAorICAgICAgICAxMDAwMDAwMDAw
MDAwMDAwMDAwMDAuMCwgIC8vIDEwXjIwCisgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
MCwKKyAgICAgICAgLy8gMTBeMjIgPSAweDIxZTE5ZTBjOWJhYjI0MDAwMDAgPSAweDg3ODY3ODMy
NmVhYzkgKiAyXjIyCisgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLjAKKyAgICB9Owor
ICAgIHN0YXRpYyBjb25zdCBpbnQga0V4YWN0UG93ZXJzT2ZUZW5TaXplID0gQVJSQVlfU0laRShl
eGFjdF9wb3dlcnNfb2ZfdGVuKTsKKyAgICAKKyAgICAvLyBNYXhpbXVtIG51bWJlciBvZiBzaWdu
aWZpY2FudCBkaWdpdHMgaW4gdGhlIGRlY2ltYWwgcmVwcmVzZW50YXRpb24uCisgICAgLy8gSW4g
ZmFjdCB0aGUgdmFsdWUgaXMgNzcyIChzZWUgY29udmVyc2lvbnMuY2MpLCBidXQgdG8gZ2l2ZSB1
cyBzb21lIG1hcmdpbgorICAgIC8vIHdlIHJvdW5kIHVwIHRvIDc4MC4KKyAgICBzdGF0aWMgY29u
c3QgaW50IGtNYXhTaWduaWZpY2FudERlY2ltYWxEaWdpdHMgPSA3ODA7CisgICAgCisgICAgc3Rh
dGljIFZlY3Rvcjxjb25zdCBjaGFyPiBUcmltTGVhZGluZ1plcm9zKFZlY3Rvcjxjb25zdCBjaGFy
PiBidWZmZXIpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBidWZmZXIubGVuZ3RoKCk7
IGkrKykgeworICAgICAgICAgICAgaWYgKGJ1ZmZlcltpXSAhPSAnMCcpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gYnVmZmVyLlN1YlZlY3RvcihpLCBidWZmZXIubGVuZ3RoKCkpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBWZWN0b3I8Y29uc3QgY2hhcj4oYnVm
ZmVyLnN0YXJ0KCksIDApOworICAgIH0KKyAgICAKKyAgICAKKyAgICBzdGF0aWMgVmVjdG9yPGNv
bnN0IGNoYXI+IFRyaW1UcmFpbGluZ1plcm9zKFZlY3Rvcjxjb25zdCBjaGFyPiBidWZmZXIpIHsK
KyAgICAgICAgZm9yIChpbnQgaSA9IGJ1ZmZlci5sZW5ndGgoKSAtIDE7IGkgPj0gMDsgLS1pKSB7
CisgICAgICAgICAgICBpZiAoYnVmZmVyW2ldICE9ICcwJykgeworICAgICAgICAgICAgICAgIHJl
dHVybiBidWZmZXIuU3ViVmVjdG9yKDAsIGkgKyAxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gVmVjdG9yPGNvbnN0IGNoYXI+KGJ1ZmZlci5zdGFydCgpLCAwKTsK
KyAgICB9CisgICAgCisgICAgCisgICAgc3RhdGljIHZvaWQgVHJpbVRvTWF4U2lnbmlmaWNhbnRE
aWdpdHMoVmVjdG9yPGNvbnN0IGNoYXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciogc2lnbmlmaWNhbnRfYnVmZmVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogc2lnbmlmaWNhbnRfZXhwb25l
bnQpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrTWF4U2lnbmlmaWNhbnREZWNpbWFs
RGlnaXRzIC0gMTsgKytpKSB7CisgICAgICAgICAgICBzaWduaWZpY2FudF9idWZmZXJbaV0gPSBi
dWZmZXJbaV07CisgICAgICAgIH0KKyAgICAgICAgLy8gVGhlIGlucHV0IGJ1ZmZlciBoYXMgYmVl
biB0cmltbWVkLiBUaGVyZWZvcmUgdGhlIGxhc3QgZGlnaXQgbXVzdCBiZQorICAgICAgICAvLyBk
aWZmZXJlbnQgZnJvbSAnMCcuCisgICAgICAgIEFTU0VSVChidWZmZXJbYnVmZmVyLmxlbmd0aCgp
IC0gMV0gIT0gJzAnKTsKKyAgICAgICAgLy8gU2V0IHRoZSBsYXN0IGRpZ2l0IHRvIGJlIG5vbi16
ZXJvLiBUaGlzIGlzIHN1ZmZpY2llbnQgdG8gZ3VhcmFudGVlCisgICAgICAgIC8vIGNvcnJlY3Qg
cm91bmRpbmcuCisgICAgICAgIHNpZ25pZmljYW50X2J1ZmZlcltrTWF4U2lnbmlmaWNhbnREZWNp
bWFsRGlnaXRzIC0gMV0gPSAnMSc7CisgICAgICAgICpzaWduaWZpY2FudF9leHBvbmVudCA9Cisg
ICAgICAgIGV4cG9uZW50ICsgKGJ1ZmZlci5sZW5ndGgoKSAtIGtNYXhTaWduaWZpY2FudERlY2lt
YWxEaWdpdHMpOworICAgIH0KKyAgICAKKyAgICAvLyBSZWFkcyBkaWdpdHMgZnJvbSB0aGUgYnVm
ZmVyIGFuZCBjb252ZXJ0cyB0aGVtIHRvIGEgdWludDY0LgorICAgIC8vIFJlYWRzIGluIGFzIG1h
bnkgZGlnaXRzIGFzIGZpdCBpbnRvIGEgdWludDY0LgorICAgIC8vIFdoZW4gdGhlIHN0cmluZyBz
dGFydHMgd2l0aCAiMTg0NDY3NDQwNzM3MDk1NTE2MSIgbm8gZnVydGhlciBkaWdpdCBpcyByZWFk
LgorICAgIC8vIFNpbmNlIDJeNjQgPSAxODQ0Njc0NDA3MzcwOTU1MTYxNiBpdCB3b3VsZCBzdGls
bCBiZSBwb3NzaWJsZSByZWFkIGFub3RoZXIKKyAgICAvLyBkaWdpdCBpZiBpdCB3YXMgbGVzcyBv
ciBlcXVhbCB0aGFuIDYsIGJ1dCB0aGlzIHdvdWxkIGNvbXBsaWNhdGUgdGhlIGNvZGUuCisgICAg
c3RhdGljIHVpbnQ2NF90IFJlYWRVaW50NjQoVmVjdG9yPGNvbnN0IGNoYXI+IGJ1ZmZlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIG51bWJlcl9vZl9yZWFkX2RpZ2l0cykg
eworICAgICAgICB1aW50NjRfdCByZXN1bHQgPSAwOworICAgICAgICBpbnQgaSA9IDA7CisgICAg
ICAgIHdoaWxlIChpIDwgYnVmZmVyLmxlbmd0aCgpICYmIHJlc3VsdCA8PSAoa01heFVpbnQ2NCAv
IDEwIC0gMSkpIHsKKyAgICAgICAgICAgIGludCBkaWdpdCA9IGJ1ZmZlcltpKytdIC0gJzAnOwor
ICAgICAgICAgICAgQVNTRVJUKDAgPD0gZGlnaXQgJiYgZGlnaXQgPD0gOSk7CisgICAgICAgICAg
ICByZXN1bHQgPSAxMCAqIHJlc3VsdCArIGRpZ2l0OworICAgICAgICB9CisgICAgICAgICpudW1i
ZXJfb2ZfcmVhZF9kaWdpdHMgPSBpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICAKKyAgICAKKyAgICAvLyBSZWFkcyBhIERpeUZwIGZyb20gdGhlIGJ1ZmZlci4KKyAgICAvLyBU
aGUgcmV0dXJuZWQgRGl5RnAgaXMgbm90IG5lY2Vzc2FyaWx5IG5vcm1hbGl6ZWQuCisgICAgLy8g
SWYgcmVtYWluaW5nX2RlY2ltYWxzIGlzIHplcm8gdGhlbiB0aGUgcmV0dXJuZWQgRGl5RnAgaXMg
YWNjdXJhdGUuCisgICAgLy8gT3RoZXJ3aXNlIGl0IGhhcyBiZWVuIHJvdW5kZWQgYW5kIGhhcyBl
cnJvciBvZiBhdCBtb3N0IDEvMiB1bHAuCisgICAgc3RhdGljIHZvaWQgUmVhZERpeUZwKFZlY3Rv
cjxjb25zdCBjaGFyPiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIERpeUZwKiBy
ZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogcmVtYWluaW5nX2RlY2ltYWxz
KSB7CisgICAgICAgIGludCByZWFkX2RpZ2l0czsKKyAgICAgICAgdWludDY0X3Qgc2lnbmlmaWNh
bmQgPSBSZWFkVWludDY0KGJ1ZmZlciwgJnJlYWRfZGlnaXRzKTsKKyAgICAgICAgaWYgKGJ1ZmZl
ci5sZW5ndGgoKSA9PSByZWFkX2RpZ2l0cykgeworICAgICAgICAgICAgKnJlc3VsdCA9IERpeUZw
KHNpZ25pZmljYW5kLCAwKTsKKyAgICAgICAgICAgICpyZW1haW5pbmdfZGVjaW1hbHMgPSAwOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gUm91bmQgdGhlIHNpZ25pZmljYW5kLgor
ICAgICAgICAgICAgaWYgKGJ1ZmZlcltyZWFkX2RpZ2l0c10gPj0gJzUnKSB7CisgICAgICAgICAg
ICAgICAgc2lnbmlmaWNhbmQrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIENvbXB1
dGUgdGhlIGJpbmFyeSBleHBvbmVudC4KKyAgICAgICAgICAgIGludCBleHBvbmVudCA9IDA7Cisg
ICAgICAgICAgICAqcmVzdWx0ID0gRGl5RnAoc2lnbmlmaWNhbmQsIGV4cG9uZW50KTsKKyAgICAg
ICAgICAgICpyZW1haW5pbmdfZGVjaW1hbHMgPSBidWZmZXIubGVuZ3RoKCkgLSByZWFkX2RpZ2l0
czsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICBzdGF0aWMgYm9vbCBEb3VibGVT
dHJ0b2QoVmVjdG9yPGNvbnN0IGNoYXI+IHRyaW1tZWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBleHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91Ymxl
KiByZXN1bHQpIHsKKyNpZiAhZGVmaW5lZChET1VCTEVfQ09OVkVSU0lPTl9DT1JSRUNUX0RPVUJM
RV9PUEVSQVRJT05TKQorICAgICAgICAvLyBPbiB4ODYgdGhlIGZsb2F0aW5nLXBvaW50IHN0YWNr
IGNhbiBiZSA2NCBvciA4MCBiaXRzIHdpZGUuIElmIGl0IGlzCisgICAgICAgIC8vIDgwIGJpdHMg
d2lkZSAoYXMgaXMgdGhlIGNhc2Ugb24gTGludXgpIHRoZW4gZG91YmxlLXJvdW5kaW5nIG9jY3Vy
cyBhbmQgdGhlCisgICAgICAgIC8vIHJlc3VsdCBpcyBub3QgYWNjdXJhdGUuCisgICAgICAgIC8v
IFdlIGtub3cgdGhhdCBXaW5kb3dzMzIgdXNlcyA2NCBiaXRzIGFuZCBpcyB0aGVyZWZvcmUgYWNj
dXJhdGUuCisgICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgQVJNIHNpbXVsYXRvciBpcyBjb21waWxl
ZCBmb3IgMzJiaXRzLiBJdCB0aGVyZWZvcmUgZXhoaWJpdHMKKyAgICAgICAgLy8gdGhlIHNhbWUg
cHJvYmxlbS4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisgICAgICAgIGlmICh0cmlt
bWVkLmxlbmd0aCgpIDw9IGtNYXhFeGFjdERvdWJsZUludGVnZXJEZWNpbWFsRGlnaXRzKSB7Cisg
ICAgICAgICAgICBpbnQgcmVhZF9kaWdpdHM7CisgICAgICAgICAgICAvLyBUaGUgdHJpbW1lZCBp
bnB1dCBmaXRzIGludG8gYSBkb3VibGUuCisgICAgICAgICAgICAvLyBJZiB0aGUgMTBeZXhwb25l
bnQgKHJlc3AuIDEwXi1leHBvbmVudCkgZml0cyBpbnRvIGEgZG91YmxlIHRvbyB0aGVuIHdlCisg
ICAgICAgICAgICAvLyBjYW4gY29tcHV0ZSB0aGUgcmVzdWx0LWRvdWJsZSBzaW1wbHkgYnkgbXVs
dGlwbHlpbmcgKHJlc3AuIGRpdmlkaW5nKSB0aGUKKyAgICAgICAgICAgIC8vIHR3byBudW1iZXJz
LgorICAgICAgICAgICAgLy8gVGhpcyBpcyBwb3NzaWJsZSBiZWNhdXNlIElFRUUgZ3VhcmFudGVl
cyB0aGF0IGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMKKyAgICAgICAgICAgIC8vIHJldHVybiB0
aGUgYmVzdCBwb3NzaWJsZSBhcHByb3hpbWF0aW9uLgorICAgICAgICAgICAgaWYgKGV4cG9uZW50
IDwgMCAmJiAtZXhwb25lbnQgPCBrRXhhY3RQb3dlcnNPZlRlblNpemUpIHsKKyAgICAgICAgICAg
ICAgICAvLyAxMF4tZXhwb25lbnQgZml0cyBpbnRvIGEgZG91YmxlLgorICAgICAgICAgICAgICAg
ICpyZXN1bHQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KFJlYWRVaW50NjQodHJpbW1lZCwgJnJlYWRf
ZGlnaXRzKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHJlYWRfZGlnaXRzID09IHRyaW1tZWQu
bGVuZ3RoKCkpOworICAgICAgICAgICAgICAgICpyZXN1bHQgLz0gZXhhY3RfcG93ZXJzX29mX3Rl
blstZXhwb25lbnRdOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKDAgPD0gZXhwb25lbnQgJiYgZXhwb25lbnQgPCBrRXhhY3RQb3dl
cnNPZlRlblNpemUpIHsKKyAgICAgICAgICAgICAgICAvLyAxMF5leHBvbmVudCBmaXRzIGludG8g
YSBkb3VibGUuCisgICAgICAgICAgICAgICAgKnJlc3VsdCA9IHN0YXRpY19jYXN0PGRvdWJsZT4o
UmVhZFVpbnQ2NCh0cmltbWVkLCAmcmVhZF9kaWdpdHMpKTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQocmVhZF9kaWdpdHMgPT0gdHJpbW1lZC5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgKnJl
c3VsdCAqPSBleGFjdF9wb3dlcnNfb2ZfdGVuW2V4cG9uZW50XTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCByZW1haW5pbmdfZGln
aXRzID0KKyAgICAgICAgICAgIGtNYXhFeGFjdERvdWJsZUludGVnZXJEZWNpbWFsRGlnaXRzIC0g
dHJpbW1lZC5sZW5ndGgoKTsKKyAgICAgICAgICAgIGlmICgoMCA8PSBleHBvbmVudCkgJiYKKyAg
ICAgICAgICAgICAgICAoZXhwb25lbnQgLSByZW1haW5pbmdfZGlnaXRzIDwga0V4YWN0UG93ZXJz
T2ZUZW5TaXplKSkgeworICAgICAgICAgICAgICAgIC8vIFRoZSB0cmltbWVkIHN0cmluZyB3YXMg
c2hvcnQgYW5kIHdlIGNhbiBtdWx0aXBseSBpdCB3aXRoCisgICAgICAgICAgICAgICAgLy8gMTBe
cmVtYWluaW5nX2RpZ2l0cy4gQXMgYSByZXN1bHQgdGhlIHJlbWFpbmluZyBleHBvbmVudCBub3cg
Zml0cworICAgICAgICAgICAgICAgIC8vIGludG8gYSBkb3VibGUgdG9vLgorICAgICAgICAgICAg
ICAgICpyZXN1bHQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KFJlYWRVaW50NjQodHJpbW1lZCwgJnJl
YWRfZGlnaXRzKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHJlYWRfZGlnaXRzID09IHRyaW1t
ZWQubGVuZ3RoKCkpOworICAgICAgICAgICAgICAgICpyZXN1bHQgKj0gZXhhY3RfcG93ZXJzX29m
X3RlbltyZW1haW5pbmdfZGlnaXRzXTsKKyAgICAgICAgICAgICAgICAqcmVzdWx0ICo9IGV4YWN0
X3Bvd2Vyc19vZl90ZW5bZXhwb25lbnQgLSByZW1haW5pbmdfZGlnaXRzXTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIAorICAgIC8vIFJldHVybnMgMTBeZXhwb25lbnQg
YXMgYW4gZXhhY3QgRGl5RnAuCisgICAgLy8gVGhlIGdpdmVuIGV4cG9uZW50IG11c3QgYmUgaW4g
dGhlIHJhbmdlIFsxOyBrRGVjaW1hbEV4cG9uZW50RGlzdGFuY2VbLgorICAgIHN0YXRpYyBEaXlG
cCBBZGp1c3RtZW50UG93ZXJPZlRlbihpbnQgZXhwb25lbnQpIHsKKyAgICAgICAgQVNTRVJUKDAg
PCBleHBvbmVudCk7CisgICAgICAgIEFTU0VSVChleHBvbmVudCA8IFBvd2Vyc09mVGVuQ2FjaGU6
OmtEZWNpbWFsRXhwb25lbnREaXN0YW5jZSk7CisgICAgICAgIC8vIFNpbXBseSBoYXJkY29kZSB0
aGUgcmVtYWluaW5nIHBvd2VycyBmb3IgdGhlIGdpdmVuIGRlY2ltYWwgZXhwb25lbnQKKyAgICAg
ICAgLy8gZGlzdGFuY2UuCisgICAgICAgIEFTU0VSVChQb3dlcnNPZlRlbkNhY2hlOjprRGVjaW1h
bEV4cG9uZW50RGlzdGFuY2UgPT0gOCk7CisgICAgICAgIHN3aXRjaCAoZXhwb25lbnQpIHsKKyAg
ICAgICAgICAgIGNhc2UgMTogcmV0dXJuIERpeUZwKFVJTlQ2NF8yUEFSVF9DKDB4YTAwMDAwMDAs
IDAwMDAwMDAwKSwgLTYwKTsKKyAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIERpeUZwKFVJTlQ2
NF8yUEFSVF9DKDB4YzgwMDAwMDAsIDAwMDAwMDAwKSwgLTU3KTsKKyAgICAgICAgICAgIGNhc2Ug
MzogcmV0dXJuIERpeUZwKFVJTlQ2NF8yUEFSVF9DKDB4ZmEwMDAwMDAsIDAwMDAwMDAwKSwgLTU0
KTsKKyAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIERpeUZwKFVJTlQ2NF8yUEFSVF9DKDB4OWM0
MDAwMDAsIDAwMDAwMDAwKSwgLTUwKTsKKyAgICAgICAgICAgIGNhc2UgNTogcmV0dXJuIERpeUZw
KFVJTlQ2NF8yUEFSVF9DKDB4YzM1MDAwMDAsIDAwMDAwMDAwKSwgLTQ3KTsKKyAgICAgICAgICAg
IGNhc2UgNjogcmV0dXJuIERpeUZwKFVJTlQ2NF8yUEFSVF9DKDB4ZjQyNDAwMDAsIDAwMDAwMDAw
KSwgLTQ0KTsKKyAgICAgICAgICAgIGNhc2UgNzogcmV0dXJuIERpeUZwKFVJTlQ2NF8yUEFSVF9D
KDB4OTg5NjgwMDAsIDAwMDAwMDAwKSwgLTQwKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gRGl5RnAo
MCwgMCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgLy8gSWYgdGhlIGZ1bmN0
aW9uIHJldHVybnMgdHJ1ZSB0aGVuIHRoZSByZXN1bHQgaXMgdGhlIGNvcnJlY3QgZG91YmxlLgor
ICAgIC8vIE90aGVyd2lzZSBpdCBpcyBlaXRoZXIgdGhlIGNvcnJlY3QgZG91YmxlIG9yIHRoZSBk
b3VibGUgdGhhdCBpcyBqdXN0IGJlbG93CisgICAgLy8gdGhlIGNvcnJlY3QgZG91YmxlLgorICAg
IHN0YXRpYyBib29sIERpeUZwU3RydG9kKFZlY3Rvcjxjb25zdCBjaGFyPiBidWZmZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV4cG9uZW50LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRvdWJsZSogcmVzdWx0KSB7CisgICAgICAgIERpeUZwIGlucHV0OworICAgICAg
ICBpbnQgcmVtYWluaW5nX2RlY2ltYWxzOworICAgICAgICBSZWFkRGl5RnAoYnVmZmVyLCAmaW5w
dXQsICZyZW1haW5pbmdfZGVjaW1hbHMpOworICAgICAgICAvLyBTaW5jZSB3ZSBtYXkgaGF2ZSBk
cm9wcGVkIHNvbWUgZGlnaXRzIHRoZSBpbnB1dCBpcyBub3QgYWNjdXJhdGUuCisgICAgICAgIC8v
IElmIHJlbWFpbmluZ19kZWNpbWFscyBpcyBkaWZmZXJlbnQgdGhhbiAwIHRoYW4gdGhlIGVycm9y
IGlzIGF0IG1vc3QKKyAgICAgICAgLy8gLjUgdWxwICh1bml0IGluIHRoZSBsYXN0IHBsYWNlKS4K
KyAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBkZWFsIHdpdGggZnJhY3Rpb25zIGFuZCB0aGVy
ZWZvcmUga2VlcCBhIGNvbW1vbgorICAgICAgICAvLyBkZW5vbWluYXRvci4KKyAgICAgICAgY29u
c3QgaW50IGtEZW5vbWluYXRvckxvZyA9IDM7CisgICAgICAgIGNvbnN0IGludCBrRGVub21pbmF0
b3IgPSAxIDw8IGtEZW5vbWluYXRvckxvZzsKKyAgICAgICAgLy8gTW92ZSB0aGUgcmVtYWluaW5n
IGRlY2ltYWxzIGludG8gdGhlIGV4cG9uZW50LgorICAgICAgICBleHBvbmVudCArPSByZW1haW5p
bmdfZGVjaW1hbHM7CisgICAgICAgIGludCBlcnJvciA9IChyZW1haW5pbmdfZGVjaW1hbHMgPT0g
MCA/IDAgOiBrRGVub21pbmF0b3IgLyAyKTsKKyAgICAgICAgCisgICAgICAgIGludCBvbGRfZSA9
IGlucHV0LmUoKTsKKyAgICAgICAgaW5wdXQuTm9ybWFsaXplKCk7CisgICAgICAgIGVycm9yIDw8
PSBvbGRfZSAtIGlucHV0LmUoKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChleHBvbmVudCA8
PSBQb3dlcnNPZlRlbkNhY2hlOjprTWF4RGVjaW1hbEV4cG9uZW50KTsKKyAgICAgICAgaWYgKGV4
cG9uZW50IDwgUG93ZXJzT2ZUZW5DYWNoZTo6a01pbkRlY2ltYWxFeHBvbmVudCkgeworICAgICAg
ICAgICAgKnJlc3VsdCA9IDAuMDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgICAgIERpeUZwIGNhY2hlZF9wb3dlcjsKKyAgICAgICAgaW50IGNhY2hlZF9kZWNpbWFs
X2V4cG9uZW50OworICAgICAgICBQb3dlcnNPZlRlbkNhY2hlOjpHZXRDYWNoZWRQb3dlckZvckRl
Y2ltYWxFeHBvbmVudChleHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhY2hlZF9wb3dlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhY2hlZF9kZWNp
bWFsX2V4cG9uZW50KTsKKyAgICAgICAgCisgICAgICAgIGlmIChjYWNoZWRfZGVjaW1hbF9leHBv
bmVudCAhPSBleHBvbmVudCkgeworICAgICAgICAgICAgaW50IGFkanVzdG1lbnRfZXhwb25lbnQg
PSBleHBvbmVudCAtIGNhY2hlZF9kZWNpbWFsX2V4cG9uZW50OworICAgICAgICAgICAgRGl5RnAg
YWRqdXN0bWVudF9wb3dlciA9IEFkanVzdG1lbnRQb3dlck9mVGVuKGFkanVzdG1lbnRfZXhwb25l
bnQpOworICAgICAgICAgICAgaW5wdXQuTXVsdGlwbHkoYWRqdXN0bWVudF9wb3dlcik7CisgICAg
ICAgICAgICBpZiAoa01heFVpbnQ2NERlY2ltYWxEaWdpdHMgLSBidWZmZXIubGVuZ3RoKCkgPj0g
YWRqdXN0bWVudF9leHBvbmVudCkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBwcm9kdWN0IG9m
IGlucHV0IHdpdGggdGhlIGFkanVzdG1lbnQgcG93ZXIgZml0cyBpbnRvIGEgNjQgYml0CisgICAg
ICAgICAgICAgICAgLy8gaW50ZWdlci4KKyAgICAgICAgICAgICAgICBBU1NFUlQoRGl5RnA6OmtT
aWduaWZpY2FuZFNpemUgPT0gNjQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAvLyBUaGUgYWRqdXN0bWVudCBwb3dlciBpcyBleGFjdC4gVGhlcmUgaXMgaGVuY2Ugb25s
eSBhbiBlcnJvciBvZiAwLjUuCisgICAgICAgICAgICAgICAgZXJyb3IgKz0ga0Rlbm9taW5hdG9y
IC8gMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaW5wdXQu
TXVsdGlwbHkoY2FjaGVkX3Bvd2VyKTsKKyAgICAgICAgLy8gVGhlIGVycm9yIGludHJvZHVjZWQg
YnkgYSBtdWx0aXBsaWNhdGlvbiBvZiBhKmIgZXF1YWxzCisgICAgICAgIC8vICAgZXJyb3JfYSAr
IGVycm9yX2IgKyBlcnJvcl9hKmVycm9yX2IvMl42NCArIDAuNQorICAgICAgICAvLyBTdWJzdGl0
dXRpbmcgYSB3aXRoICdpbnB1dCcgYW5kIGIgd2l0aCAnY2FjaGVkX3Bvd2VyJyB3ZSBoYXZlCisg
ICAgICAgIC8vICAgZXJyb3JfYiA9IDAuNSAgKGFsbCBjYWNoZWQgcG93ZXJzIGhhdmUgYW4gZXJy
b3Igb2YgbGVzcyB0aGFuIDAuNSB1bHApLAorICAgICAgICAvLyAgIGVycm9yX2FiID0gMCBvciAx
IC8ga0Rlbm9taW5hdG9yID4gZXJyb3JfYSplcnJvcl9iLyAyXjY0CisgICAgICAgIGludCBlcnJv
cl9iID0ga0Rlbm9taW5hdG9yIC8gMjsKKyAgICAgICAgaW50IGVycm9yX2FiID0gKGVycm9yID09
IDAgPyAwIDogMSk7ICAvLyBXZSByb3VuZCB1cCB0byAxLgorICAgICAgICBpbnQgZml4ZWRfZXJy
b3IgPSBrRGVub21pbmF0b3IgLyAyOworICAgICAgICBlcnJvciArPSBlcnJvcl9iICsgZXJyb3Jf
YWIgKyBmaXhlZF9lcnJvcjsKKyAgICAgICAgCisgICAgICAgIG9sZF9lID0gaW5wdXQuZSgpOwor
ICAgICAgICBpbnB1dC5Ob3JtYWxpemUoKTsKKyAgICAgICAgZXJyb3IgPDw9IG9sZF9lIC0gaW5w
dXQuZSgpOworICAgICAgICAKKyAgICAgICAgLy8gU2VlIGlmIHRoZSBkb3VibGUncyBzaWduaWZp
Y2FuZCBjaGFuZ2VzIGlmIHdlIGFkZC9zdWJ0cmFjdCB0aGUgZXJyb3IuCisgICAgICAgIGludCBv
cmRlcl9vZl9tYWduaXR1ZGUgPSBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSArIGlucHV0LmUoKTsK
KyAgICAgICAgaW50IGVmZmVjdGl2ZV9zaWduaWZpY2FuZF9zaXplID0KKyAgICAgICAgRG91Ymxl
OjpTaWduaWZpY2FuZFNpemVGb3JPcmRlck9mTWFnbml0dWRlKG9yZGVyX29mX21hZ25pdHVkZSk7
CisgICAgICAgIGludCBwcmVjaXNpb25fZGlnaXRzX2NvdW50ID0KKyAgICAgICAgRGl5RnA6OmtT
aWduaWZpY2FuZFNpemUgLSBlZmZlY3RpdmVfc2lnbmlmaWNhbmRfc2l6ZTsKKyAgICAgICAgaWYg
KHByZWNpc2lvbl9kaWdpdHNfY291bnQgKyBrRGVub21pbmF0b3JMb2cgPj0gRGl5RnA6OmtTaWdu
aWZpY2FuZFNpemUpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgY2FuIG9ubHkgaGFwcGVuIGZvciB2
ZXJ5IHNtYWxsIGRlbm9ybWFscy4gSW4gdGhpcyBjYXNlIHRoZQorICAgICAgICAgICAgLy8gaGFs
Zi13YXkgbXVsdGlwbGllZCBieSB0aGUgZGVub21pbmF0b3IgZXhjZWVkcyB0aGUgcmFuZ2Ugb2Yg
YW4gdWludDY0LgorICAgICAgICAgICAgLy8gU2ltcGx5IHNoaWZ0IGV2ZXJ5dGhpbmcgdG8gdGhl
IHJpZ2h0LgorICAgICAgICAgICAgaW50IHNoaWZ0X2Ftb3VudCA9IChwcmVjaXNpb25fZGlnaXRz
X2NvdW50ICsga0Rlbm9taW5hdG9yTG9nKSAtCisgICAgICAgICAgICBEaXlGcDo6a1NpZ25pZmlj
YW5kU2l6ZSArIDE7CisgICAgICAgICAgICBpbnB1dC5zZXRfZihpbnB1dC5mKCkgPj4gc2hpZnRf
YW1vdW50KTsKKyAgICAgICAgICAgIGlucHV0LnNldF9lKGlucHV0LmUoKSArIHNoaWZ0X2Ftb3Vu
dCk7CisgICAgICAgICAgICAvLyBXZSBhZGQgMSBmb3IgdGhlIGxvc3QgcHJlY2lzaW9uIG9mIGVy
cm9yLCBhbmQga0Rlbm9taW5hdG9yIGZvcgorICAgICAgICAgICAgLy8gdGhlIGxvc3QgcHJlY2lz
aW9uIG9mIGlucHV0LmYoKS4KKyAgICAgICAgICAgIGVycm9yID0gKGVycm9yID4+IHNoaWZ0X2Ft
b3VudCkgKyAxICsga0Rlbm9taW5hdG9yOworICAgICAgICAgICAgcHJlY2lzaW9uX2RpZ2l0c19j
b3VudCAtPSBzaGlmdF9hbW91bnQ7CisgICAgICAgIH0KKyAgICAgICAgLy8gV2UgdXNlIHVpbnQ2
NF90cyBub3cuIFRoaXMgb25seSB3b3JrcyBpZiB0aGUgRGl5RnAgdXNlcyB1aW50NjRfdHMgdG9v
LgorICAgICAgICBBU1NFUlQoRGl5RnA6OmtTaWduaWZpY2FuZFNpemUgPT0gNjQpOworICAgICAg
ICBBU1NFUlQocHJlY2lzaW9uX2RpZ2l0c19jb3VudCA8IDY0KTsKKyAgICAgICAgdWludDY0X3Qg
b25lNjQgPSAxOworICAgICAgICB1aW50NjRfdCBwcmVjaXNpb25fYml0c19tYXNrID0gKG9uZTY0
IDw8IHByZWNpc2lvbl9kaWdpdHNfY291bnQpIC0gMTsKKyAgICAgICAgdWludDY0X3QgcHJlY2lz
aW9uX2JpdHMgPSBpbnB1dC5mKCkgJiBwcmVjaXNpb25fYml0c19tYXNrOworICAgICAgICB1aW50
NjRfdCBoYWxmX3dheSA9IG9uZTY0IDw8IChwcmVjaXNpb25fZGlnaXRzX2NvdW50IC0gMSk7Cisg
ICAgICAgIHByZWNpc2lvbl9iaXRzICo9IGtEZW5vbWluYXRvcjsKKyAgICAgICAgaGFsZl93YXkg
Kj0ga0Rlbm9taW5hdG9yOworICAgICAgICBEaXlGcCByb3VuZGVkX2lucHV0KGlucHV0LmYoKSA+
PiBwcmVjaXNpb25fZGlnaXRzX2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
cHV0LmUoKSArIHByZWNpc2lvbl9kaWdpdHNfY291bnQpOworICAgICAgICBpZiAocHJlY2lzaW9u
X2JpdHMgPj0gaGFsZl93YXkgKyBlcnJvcikgeworICAgICAgICAgICAgcm91bmRlZF9pbnB1dC5z
ZXRfZihyb3VuZGVkX2lucHV0LmYoKSArIDEpOworICAgICAgICB9CisgICAgICAgIC8vIElmIHRo
ZSBsYXN0X2JpdHMgYXJlIHRvbyBjbG9zZSB0byB0aGUgaGFsZi13YXkgY2FzZSB0aGFuIHdlIGFy
ZSB0b28KKyAgICAgICAgLy8gaW5hY2N1cmF0ZSBhbmQgcm91bmQgZG93bi4gSW4gdGhpcyBjYXNl
IHdlIHJldHVybiBmYWxzZSBzbyB0aGF0IHdlIGNhbgorICAgICAgICAvLyBmYWxsIGJhY2sgdG8g
YSBtb3JlIHByZWNpc2UgYWxnb3JpdGhtLgorICAgICAgICAKKyAgICAgICAgKnJlc3VsdCA9IERv
dWJsZShyb3VuZGVkX2lucHV0KS52YWx1ZSgpOworICAgICAgICBpZiAoaGFsZl93YXkgLSBlcnJv
ciA8IHByZWNpc2lvbl9iaXRzICYmIHByZWNpc2lvbl9iaXRzIDwgaGFsZl93YXkgKyBlcnJvcikg
eworICAgICAgICAgICAgLy8gVG9vIGltcHJlY2lzZS4gVGhlIGNhbGxlciB3aWxsIGhhdmUgdG8g
ZmFsbCBiYWNrIHRvIGEgc2xvd2VyIHZlcnNpb24uCisgICAgICAgICAgICAvLyBIb3dldmVyIHRo
ZSByZXR1cm5lZCBudW1iZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBlaXRoZXIgdGhlIGNvcnJlY3QK
KyAgICAgICAgICAgIC8vIGRvdWJsZSwgb3IgdGhlIG5leHQtbG93ZXIgZG91YmxlLgorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgLy8gUmV0dXJucyB0aGUg
Y29ycmVjdCBkb3VibGUgZm9yIHRoZSBidWZmZXIqMTBeZXhwb25lbnQuCisgICAgLy8gVGhlIHZh
cmlhYmxlIGd1ZXNzIHNob3VsZCBiZSBhIGNsb3NlIGd1ZXNzIHRoYXQgaXMgZWl0aGVyIHRoZSBj
b3JyZWN0IGRvdWJsZQorICAgIC8vIG9yIGl0cyBsb3dlciBuZWlnaGJvciAodGhlIG5lYXJlc3Qg
ZG91YmxlIGxlc3MgdGhhbiB0aGUgY29ycmVjdCBvbmUpLgorICAgIC8vIFByZWNvbmRpdGlvbnM6
CisgICAgLy8gICBidWZmZXIubGVuZ3RoKCkgKyBleHBvbmVudCA8PSBrTWF4RGVjaW1hbFBvd2Vy
ICsgMQorICAgIC8vICAgYnVmZmVyLmxlbmd0aCgpICsgZXhwb25lbnQgPiBrTWluRGVjaW1hbFBv
d2VyCisgICAgLy8gICBidWZmZXIubGVuZ3RoKCkgPD0ga01heERlY2ltYWxTaWduaWZpY2FudERp
Z2l0cworICAgIHN0YXRpYyBkb3VibGUgQmlnbnVtU3RydG9kKFZlY3Rvcjxjb25zdCBjaGFyPiBi
dWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV4cG9uZW50LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBndWVzcykgeworICAgICAgICBpZiAo
Z3Vlc3MgPT0gRG91YmxlOjpJbmZpbml0eSgpKSB7CisgICAgICAgICAgICByZXR1cm4gZ3Vlc3M7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIERpeUZwIHVwcGVyX2JvdW5kYXJ5ID0gRG91
YmxlKGd1ZXNzKS5VcHBlckJvdW5kYXJ5KCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoYnVm
ZmVyLmxlbmd0aCgpICsgZXhwb25lbnQgPD0ga01heERlY2ltYWxQb3dlciArIDEpOworICAgICAg
ICBBU1NFUlQoYnVmZmVyLmxlbmd0aCgpICsgZXhwb25lbnQgPiBrTWluRGVjaW1hbFBvd2VyKTsK
KyAgICAgICAgQVNTRVJUKGJ1ZmZlci5sZW5ndGgoKSA8PSBrTWF4U2lnbmlmaWNhbnREZWNpbWFs
RGlnaXRzKTsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIEJpZ251bSB3aWxsIGJlIGFi
bGUgdG8gaG9sZCBhbGwgb3VyIG51bWJlcnMuCisgICAgICAgIC8vIE91ciBCaWdudW0gaW1wbGVt
ZW50YXRpb24gaGFzIGEgc2VwYXJhdGUgZmllbGQgZm9yIGV4cG9uZW50cy4gU2hpZnRzIHdpbGwK
KyAgICAgICAgLy8gY29uc3VtZSBhdCBtb3N0IG9uZSBiaWdpdCAoPCA2NCBiaXRzKS4KKyAgICAg
ICAgLy8gbG4oMTApID09IDMuMzIxOS4uLgorICAgICAgICBBU1NFUlQoKChrTWF4RGVjaW1hbFBv
d2VyICsgMSkgKiAzMzMgLyAxMDApIDwgQmlnbnVtOjprTWF4U2lnbmlmaWNhbnRCaXRzKTsKKyAg
ICAgICAgQmlnbnVtIGlucHV0OworICAgICAgICBCaWdudW0gYm91bmRhcnk7CisgICAgICAgIGlu
cHV0LkFzc2lnbkRlY2ltYWxTdHJpbmcoYnVmZmVyKTsKKyAgICAgICAgYm91bmRhcnkuQXNzaWdu
VUludDY0KHVwcGVyX2JvdW5kYXJ5LmYoKSk7CisgICAgICAgIGlmIChleHBvbmVudCA+PSAwKSB7
CisgICAgICAgICAgICBpbnB1dC5NdWx0aXBseUJ5UG93ZXJPZlRlbihleHBvbmVudCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBib3VuZGFyeS5NdWx0aXBseUJ5UG93ZXJPZlRlbigt
ZXhwb25lbnQpOworICAgICAgICB9CisgICAgICAgIGlmICh1cHBlcl9ib3VuZGFyeS5lKCkgPiAw
KSB7CisgICAgICAgICAgICBib3VuZGFyeS5TaGlmdExlZnQodXBwZXJfYm91bmRhcnkuZSgpKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlucHV0LlNoaWZ0TGVmdCgtdXBwZXJfYm91
bmRhcnkuZSgpKTsKKyAgICAgICAgfQorICAgICAgICBpbnQgY29tcGFyaXNvbiA9IEJpZ251bTo6
Q29tcGFyZShpbnB1dCwgYm91bmRhcnkpOworICAgICAgICBpZiAoY29tcGFyaXNvbiA8IDApIHsK
KyAgICAgICAgICAgIHJldHVybiBndWVzczsKKyAgICAgICAgfSBlbHNlIGlmIChjb21wYXJpc29u
ID4gMCkgeworICAgICAgICAgICAgcmV0dXJuIERvdWJsZShndWVzcykuTmV4dERvdWJsZSgpOwor
ICAgICAgICB9IGVsc2UgaWYgKChEb3VibGUoZ3Vlc3MpLlNpZ25pZmljYW5kKCkgJiAxKSA9PSAw
KSB7CisgICAgICAgICAgICAvLyBSb3VuZCB0b3dhcmRzIGV2ZW4uCisgICAgICAgICAgICByZXR1
cm4gZ3Vlc3M7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gRG91YmxlKGd1
ZXNzKS5OZXh0RG91YmxlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgZG91
YmxlIFN0cnRvZChWZWN0b3I8Y29uc3QgY2hhcj4gYnVmZmVyLCBpbnQgZXhwb25lbnQpIHsKKyAg
ICAgICAgVmVjdG9yPGNvbnN0IGNoYXI+IGxlZnRfdHJpbW1lZCA9IFRyaW1MZWFkaW5nWmVyb3Mo
YnVmZmVyKTsKKyAgICAgICAgVmVjdG9yPGNvbnN0IGNoYXI+IHRyaW1tZWQgPSBUcmltVHJhaWxp
bmdaZXJvcyhsZWZ0X3RyaW1tZWQpOworICAgICAgICBleHBvbmVudCArPSBsZWZ0X3RyaW1tZWQu
bGVuZ3RoKCkgLSB0cmltbWVkLmxlbmd0aCgpOworICAgICAgICBpZiAodHJpbW1lZC5sZW5ndGgo
KSA9PSAwKSByZXR1cm4gMC4wOworICAgICAgICBpZiAodHJpbW1lZC5sZW5ndGgoKSA+IGtNYXhT
aWduaWZpY2FudERlY2ltYWxEaWdpdHMpIHsKKyAgICAgICAgICAgIGNoYXIgc2lnbmlmaWNhbnRf
YnVmZmVyW2tNYXhTaWduaWZpY2FudERlY2ltYWxEaWdpdHNdOworICAgICAgICAgICAgaW50IHNp
Z25pZmljYW50X2V4cG9uZW50OworICAgICAgICAgICAgVHJpbVRvTWF4U2lnbmlmaWNhbnREaWdp
dHModHJpbW1lZCwgZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaWduaWZpY2FudF9idWZmZXIsICZzaWduaWZpY2FudF9leHBvbmVudCk7CisgICAgICAg
ICAgICByZXR1cm4gU3RydG9kKFZlY3Rvcjxjb25zdCBjaGFyPihzaWduaWZpY2FudF9idWZmZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrTWF4U2lnbmlm
aWNhbnREZWNpbWFsRGlnaXRzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmlmaWNh
bnRfZXhwb25lbnQpOworICAgICAgICB9CisgICAgICAgIGlmIChleHBvbmVudCArIHRyaW1tZWQu
bGVuZ3RoKCkgLSAxID49IGtNYXhEZWNpbWFsUG93ZXIpIHsKKyAgICAgICAgICAgIHJldHVybiBE
b3VibGU6OkluZmluaXR5KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGV4cG9uZW50ICsgdHJp
bW1lZC5sZW5ndGgoKSA8PSBrTWluRGVjaW1hbFBvd2VyKSB7CisgICAgICAgICAgICByZXR1cm4g
MC4wOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBkb3VibGUgZ3Vlc3M7CisgICAgICAg
IGlmIChEb3VibGVTdHJ0b2QodHJpbW1lZCwgZXhwb25lbnQsICZndWVzcykgfHwKKyAgICAgICAg
ICAgIERpeUZwU3RydG9kKHRyaW1tZWQsIGV4cG9uZW50LCAmZ3Vlc3MpKSB7CisgICAgICAgICAg
ICByZXR1cm4gZ3Vlc3M7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEJpZ251bVN0cnRvZCh0
cmltbWVkLCBleHBvbmVudCwgZ3Vlc3MpOworICAgIH0KKyAgICAKK30gIC8vIG5hbWVzcGFjZSBk
b3VibGVfY29udmVyc2lvbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9k
dG9hL3N0cnRvZC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL3N0cnRvZC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjA5NzlmNDRkZWI5NTg1YTBkOWQ1OTg2MTAyODU3MzlhY2EyMTY5MzQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2Evc3RydG9kLmgKQEAg
LTAsMCArMSw0MSBAQAorLy8gQ29weXJpZ2h0IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8g
bWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAg
ICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisv
LyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisv
LyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWZuZGVmIERPVUJM
RV9DT05WRVJTSU9OX1NUUlRPRF9IXworI2RlZmluZSBET1VCTEVfQ09OVkVSU0lPTl9TVFJUT0Rf
SF8KKworI2luY2x1ZGUgInV0aWxzLmgiCisKK25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7
CisgICAgCisgICAgLy8gVGhlIGJ1ZmZlciBtdXN0IG9ubHkgY29udGFpbiBkaWdpdHMgaW4gdGhl
IHJhbmdlIFswLTldLiBJdCBtdXN0IG5vdAorICAgIC8vIGNvbnRhaW4gYSBkb3Qgb3IgYSBzaWdu
LiBJdCBtdXN0IG5vdCBzdGFydCB3aXRoICcwJywgYW5kIG11c3Qgbm90IGJlIGVtcHR5LgorICAg
IGRvdWJsZSBTdHJ0b2QoVmVjdG9yPGNvbnN0IGNoYXI+IGJ1ZmZlciwgaW50IGV4cG9uZW50KTsK
KyAgICAKK30gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbgorCisjZW5kaWYgIC8vIERP
VUJMRV9DT05WRVJTSU9OX1NUUlRPRF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9kdG9hL3V0aWxzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvdXRp
bHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5kMjMyMGJlZDc3ZjUzZDkyNWU1ZTZjMmE1NDQ2OTM5YjE2M2Y0MjQw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL3V0aWxz
LmgKQEAgLTAsMCArMSwyOTkgQEAKKy8vIENvcHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
Ly8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
Ky8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmbmRl
ZiBET1VCTEVfQ09OVkVSU0lPTl9VVElMU19IXworI2RlZmluZSBET1VCTEVfQ09OVkVSU0lPTl9V
VElMU19IXworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNp
Zm5kZWYgQVNTRVJUCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZGVmaW5lIEFTU0VSVChjb25kaXRp
b24pICAgICAgKGFzc2VydChjb25kaXRpb24pKQorI2RlZmluZSBVTklNUExFTUVOVEVEKCkgKGFi
b3J0KCkpCisjZGVmaW5lIFVOUkVBQ0hBQkxFKCkgICAoYWJvcnQoKSkKKyNlbmRpZgorCisvLyBE
b3VibGUgb3BlcmF0aW9ucyBkZXRlY3Rpb24gYmFzZWQgb24gdGFyZ2V0IGFyY2hpdGVjdHVyZS4K
Ky8vIExpbnV4IHVzZXMgYSA4MGJpdCB3aWRlIGZsb2F0aW5nIHBvaW50IHN0YWNrIG9uIHg4Ni4g
VGhpcyBpbmR1Y2VzIGRvdWJsZQorLy8gcm91bmRpbmcsIHdoaWNoIGluIHR1cm4gbGVhZHMgdG8g
d3JvbmcgcmVzdWx0cy4KKy8vIEFuIGVhc3kgd2F5IHRvIHRlc3QgaWYgdGhlIGZsb2F0aW5nLXBv
aW50IG9wZXJhdGlvbnMgYXJlIGNvcnJlY3QgaXMgdG8KKy8vIGV2YWx1YXRlOiA4OTI1NS4wLzFl
MjIuIElmIHRoZSBmbG9hdGluZy1wb2ludCBzdGFjayBpcyA2NCBiaXRzIHdpZGUgdGhlbgorLy8g
dGhlIHJlc3VsdCBpcyBlcXVhbCB0byA4OTI1NWUtMjIuCisvLyBUaGUgYmVzdCB3YXkgdG8gdGVz
dCB0aGlzLCBpcyB0byBjcmVhdGUgYSBkaXZpc2lvbi1mdW5jdGlvbiBhbmQgdG8gY29tcGFyZQor
Ly8gdGhlIG91dHB1dCBvZiB0aGUgZGl2aXNpb24gd2l0aCB0aGUgZXhwZWN0ZWQgcmVzdWx0LiAo
SW5saW5pbmcgbXVzdCBiZQorLy8gZGlzYWJsZWQuKQorLy8gT24gTGludXgseDg2IDg5MjU1ZS0y
MiAhPSBEaXZfZG91YmxlKDg5MjU1LjAvMWUyMikKKyNpZiBkZWZpbmVkKF9NX1g2NCkgfHwgZGVm
aW5lZChfX3g4Nl82NF9fKSB8fCBcCitkZWZpbmVkKF9fQVJNRUxfXykgfHwgXAorZGVmaW5lZChf
TUlQU19BUkNIX01JUFMzMlIyKQorI2RlZmluZSBET1VCTEVfQ09OVkVSU0lPTl9DT1JSRUNUX0RP
VUJMRV9PUEVSQVRJT05TIDEKKyNlbGlmIGRlZmluZWQoX01fSVg4NikgfHwgZGVmaW5lZChfX2kz
ODZfXykKKyNpZiBkZWZpbmVkKF9XSU4zMikKKy8vIFdpbmRvd3MgdXNlcyBhIDY0Yml0IHdpZGUg
ZmxvYXRpbmcgcG9pbnQgc3RhY2suCisjZGVmaW5lIERPVUJMRV9DT05WRVJTSU9OX0NPUlJFQ1Rf
RE9VQkxFX09QRVJBVElPTlMgMQorI2Vsc2UKKyN1bmRlZiBET1VCTEVfQ09OVkVSU0lPTl9DT1JS
RUNUX0RPVUJMRV9PUEVSQVRJT05TCisjZW5kaWYgIC8vIF9XSU4zMgorI2Vsc2UKKyNlcnJvciBU
YXJnZXQgYXJjaGl0ZWN0dXJlIHdhcyBub3QgZGV0ZWN0ZWQgYXMgc3VwcG9ydGVkIGJ5IERvdWJs
ZS1Db252ZXJzaW9uLgorI2VuZGlmCisKKworI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5l
ZChfX01JTkdXMzJfXykKKwordHlwZWRlZiBzaWduZWQgY2hhciBpbnQ4X3Q7Cit0eXBlZGVmIHVu
c2lnbmVkIGNoYXIgdWludDhfdDsKK3R5cGVkZWYgc2hvcnQgaW50MTZfdDsgIC8vIE5PTElOVAor
dHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1aW50MTZfdDsgIC8vIE5PTElOVAordHlwZWRlZiBpbnQg
aW50MzJfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQzMl90OwordHlwZWRlZiBfX2ludDY0
IGludDY0X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgdWludDY0X3Q7CisvLyBpbnRwdHJf
dCBhbmQgZnJpZW5kcyBhcmUgZGVmaW5lZCBpbiBjcnRkZWZzLmggdGhyb3VnaCBzdGRpby5oLgor
CisjZWxzZQorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNlbmRpZgorCisvLyBUaGUgZm9sbG93
aW5nIG1hY3JvIHdvcmtzIG9uIGJvdGggMzIgYW5kIDY0LWJpdCBwbGF0Zm9ybXMuCisvLyBVc2Fn
ZTogaW5zdGVhZCBvZiB3cml0aW5nIDB4MTIzNDU2Nzg5MDEyMzQ1NgorLy8gICAgICB3cml0ZSBV
SU5UNjRfMlBBUlRfQygweDEyMzQ1Njc4LDkwMTIzNDU2KTsKKyNkZWZpbmUgVUlOVDY0XzJQQVJU
X0MoYSwgYikgKCgoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGEpIDw8IDMyKSArIDB4IyNiIyN1KSkK
KworCisvLyBUaGUgZXhwcmVzc2lvbiBBUlJBWV9TSVpFKGEpIGlzIGEgY29tcGlsZS10aW1lIGNv
bnN0YW50IG9mIHR5cGUKKy8vIHNpemVfdCB3aGljaCByZXByZXNlbnRzIHRoZSBudW1iZXIgb2Yg
ZWxlbWVudHMgb2YgdGhlIGdpdmVuCisvLyBhcnJheS4gWW91IHNob3VsZCBvbmx5IHVzZSBBUlJB
WV9TSVpFIG9uIHN0YXRpY2FsbHkgYWxsb2NhdGVkCisvLyBhcnJheXMuCisjZGVmaW5lIEFSUkFZ
X1NJWkUoYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKygoc2l6ZW9mKGEp
IC8gc2l6ZW9mKCooYSkpKSAvICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3N0YXRpY19jYXN0
PHNpemVfdD4oIShzaXplb2YoYSkgJSBzaXplb2YoKihhKSkpKSkKKworLy8gQSBtYWNybyB0byBk
aXNhbGxvdyB0aGUgZXZpbCBjb3B5IGNvbnN0cnVjdG9yIGFuZCBvcGVyYXRvcj0gZnVuY3Rpb25z
CisvLyBUaGlzIHNob3VsZCBiZSB1c2VkIGluIHRoZSBwcml2YXRlOiBkZWNsYXJhdGlvbnMgZm9y
IGEgY2xhc3MKKyNkZWZpbmUgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFR5cGVOYW1lKSAgICAg
IFwKK1R5cGVOYW1lKGNvbnN0IFR5cGVOYW1lJik7ICAgICAgICAgICAgICAgICAgICBcCit2b2lk
IG9wZXJhdG9yPShjb25zdCBUeXBlTmFtZSYpCisKKy8vIEEgbWFjcm8gdG8gZGlzYWxsb3cgYWxs
IHRoZSBpbXBsaWNpdCBjb25zdHJ1Y3RvcnMsIG5hbWVseSB0aGUKKy8vIGRlZmF1bHQgY29uc3Ry
dWN0b3IsIGNvcHkgY29uc3RydWN0b3IgYW5kIG9wZXJhdG9yPSBmdW5jdGlvbnMuCisvLworLy8g
VGhpcyBzaG91bGQgYmUgdXNlZCBpbiB0aGUgcHJpdmF0ZTogZGVjbGFyYXRpb25zIGZvciBhIGNs
YXNzCisvLyB0aGF0IHdhbnRzIHRvIHByZXZlbnQgYW55b25lIGZyb20gaW5zdGFudGlhdGluZyBp
dC4gVGhpcyBpcworLy8gZXNwZWNpYWxseSB1c2VmdWwgZm9yIGNsYXNzZXMgY29udGFpbmluZyBv
bmx5IHN0YXRpYyBtZXRob2RzLgorI2RlZmluZSBESVNBTExPV19JTVBMSUNJVF9DT05TVFJVQ1RP
UlMoVHlwZU5hbWUpIFwKK1R5cGVOYW1lKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFR5cGVOYW1lKQorCituYW1lc3BhY2Ug
ZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIHN0YXRpYyBjb25zdCBpbnQga0NoYXJTaXpl
ID0gc2l6ZW9mKGNoYXIpOworICAgIAorICAgIC8vIFJldHVybnMgdGhlIG1heGltdW0gb2YgdGhl
IHR3byBwYXJhbWV0ZXJzLgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHN0YXRpYyBU
IE1heChUIGEsIFQgYikgeworICAgICAgICByZXR1cm4gYSA8IGIgPyBiIDogYTsKKyAgICB9Cisg
ICAgCisgICAgCisgICAgLy8gUmV0dXJucyB0aGUgbWluaW11bSBvZiB0aGUgdHdvIHBhcmFtZXRl
cnMuCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3RhdGljIFQgTWluKFQgYSwgVCBi
KSB7CisgICAgICAgIHJldHVybiBhIDwgYiA/IGEgOiBiOworICAgIH0KKyAgICAKKyAgICAKKyAg
ICBpbmxpbmUgaW50IFN0ckxlbmd0aChjb25zdCBjaGFyKiBzdHJpbmcpIHsKKyAgICAgICAgc2l6
ZV90IGxlbmd0aCA9IHN0cmxlbihzdHJpbmcpOworICAgICAgICBBU1NFUlQobGVuZ3RoID09IHN0
YXRpY19jYXN0PHNpemVfdD4oc3RhdGljX2Nhc3Q8aW50PihsZW5ndGgpKSk7CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxlbmd0aCk7CisgICAgfQorICAgIAorICAgIC8vIFRoaXMg
aXMgYSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgVjgncyBWZWN0b3IgY2xhc3MuCisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CisgICAgY2xhc3MgVmVjdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IFZlY3RvcigpIDogc3RhcnRfKE5VTEwpLCBsZW5ndGhfKDApIHt9CisgICAgICAgIFZlY3RvcihU
KiBkYXRhLCBpbnQgbGVuZ3RoKSA6IHN0YXJ0XyhkYXRhKSwgbGVuZ3RoXyhsZW5ndGgpIHsKKyAg
ICAgICAgICAgIEFTU0VSVChsZW5ndGggPT0gMCB8fCAobGVuZ3RoID4gMCAmJiBkYXRhICE9IE5V
TEwpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJucyBhIHZlY3RvciB1
c2luZyB0aGUgc2FtZSBiYWNraW5nIHN0b3JhZ2UgYXMgdGhpcyBvbmUsCisgICAgICAgIC8vIHNw
YW5uaW5nIGZyb20gYW5kIGluY2x1ZGluZyAnZnJvbScsIHRvIGJ1dCBub3QgaW5jbHVkaW5nICd0
bycuCisgICAgICAgIFZlY3RvcjxUPiBTdWJWZWN0b3IoaW50IGZyb20sIGludCB0bykgeworICAg
ICAgICAgICAgQVNTRVJUKHRvIDw9IGxlbmd0aF8pOworICAgICAgICAgICAgQVNTRVJUKGZyb20g
PCB0byk7CisgICAgICAgICAgICBBU1NFUlQoMCA8PSBmcm9tKTsKKyAgICAgICAgICAgIHJldHVy
biBWZWN0b3I8VD4oc3RhcnQoKSArIGZyb20sIHRvIC0gZnJvbSk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIC8vIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgdmVjdG9yLgorICAgICAg
ICBpbnQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbGVuZ3RoXzsgfQorICAgICAgICAKKyAgICAg
ICAgLy8gUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgdmVjdG9yIGlzIGVtcHR5LgorICAgICAg
ICBib29sIGlzX2VtcHR5KCkgY29uc3QgeyByZXR1cm4gbGVuZ3RoXyA9PSAwOyB9CisgICAgICAg
IAorICAgICAgICAvLyBSZXR1cm5zIHRoZSBwb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgZGF0
YSBpbiB0aGUgdmVjdG9yLgorICAgICAgICBUKiBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIHN0YXJ0
XzsgfQorICAgICAgICAKKyAgICAgICAgLy8gQWNjZXNzIGluZGl2aWR1YWwgdmVjdG9yIGVsZW1l
bnRzIC0gY2hlY2tzIGJvdW5kcyBpbiBkZWJ1ZyBtb2RlLgorICAgICAgICBUJiBvcGVyYXRvcltd
KGludCBpbmRleCkgY29uc3QgeworICAgICAgICAgICAgQVNTRVJUKDAgPD0gaW5kZXggJiYgaW5k
ZXggPCBsZW5ndGhfKTsKKyAgICAgICAgICAgIHJldHVybiBzdGFydF9baW5kZXhdOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBUJiBmaXJzdCgpIHsgcmV0dXJuIHN0YXJ0X1swXTsgfQor
ICAgICAgICAKKyAgICAgICAgVCYgbGFzdCgpIHsgcmV0dXJuIHN0YXJ0X1tsZW5ndGhfIC0gMV07
IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgVCogc3RhcnRfOworICAgICAgICBp
bnQgbGVuZ3RoXzsKKyAgICB9OworICAgIAorICAgIAorICAgIC8vIEhlbHBlciBjbGFzcyBmb3Ig
YnVpbGRpbmcgcmVzdWx0IHN0cmluZ3MgaW4gYSBjaGFyYWN0ZXIgYnVmZmVyLiBUaGUKKyAgICAv
LyBwdXJwb3NlIG9mIHRoZSBjbGFzcyBpcyB0byB1c2Ugc2FmZSBvcGVyYXRpb25zIHRoYXQgY2hl
Y2tzIHRoZQorICAgIC8vIGJ1ZmZlciBib3VuZHMgb24gYWxsIG9wZXJhdGlvbnMgaW4gZGVidWcg
bW9kZS4KKyAgICBjbGFzcyBTdHJpbmdCdWlsZGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFN0
cmluZ0J1aWxkZXIoY2hhciogYnVmZmVyLCBpbnQgc2l6ZSkKKyAgICAgICAgOiBidWZmZXJfKGJ1
ZmZlciwgc2l6ZSksIHBvc2l0aW9uXygwKSB7IH0KKyAgICAgICAgCisgICAgICAgIH5TdHJpbmdC
dWlsZGVyKCkgeyBpZiAoIWlzX2ZpbmFsaXplZCgpKSBGaW5hbGl6ZSgpOyB9CisgICAgICAgIAor
ICAgICAgICBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGJ1ZmZlcl8ubGVuZ3RoKCk7IH0KKyAg
ICAgICAgCisgICAgICAgIC8vIEdldCB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgYnVpbGRl
ci4KKyAgICAgICAgaW50IHBvc2l0aW9uKCkgY29uc3QgeworICAgICAgICAgICAgQVNTRVJUKCFp
c19maW5hbGl6ZWQoKSk7CisgICAgICAgICAgICByZXR1cm4gcG9zaXRpb25fOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAvLyBSZXNldCB0aGUgcG9zaXRpb24uCisgICAgICAgIHZvaWQg
UmVzZXQoKSB7IHBvc2l0aW9uXyA9IDA7IH0KKyAgICAgICAgCisgICAgICAgIC8vIEFkZCBhIHNp
bmdsZSBjaGFyYWN0ZXIgdG8gdGhlIGJ1aWxkZXIuIEl0IGlzIG5vdCBhbGxvd2VkIHRvIGFkZAor
ICAgICAgICAvLyAwLWNoYXJhY3RlcnM7IHVzZSB0aGUgRmluYWxpemUoKSBtZXRob2QgdG8gdGVy
bWluYXRlIHRoZSBzdHJpbmcKKyAgICAgICAgLy8gaW5zdGVhZC4KKyAgICAgICAgdm9pZCBBZGRD
aGFyYWN0ZXIoY2hhciBjKSB7CisgICAgICAgICAgICBBU1NFUlQoYyAhPSAnXDAnKTsKKyAgICAg
ICAgICAgIEFTU0VSVCghaXNfZmluYWxpemVkKCkgJiYgcG9zaXRpb25fIDwgYnVmZmVyXy5sZW5n
dGgoKSk7CisgICAgICAgICAgICBidWZmZXJfW3Bvc2l0aW9uXysrXSA9IGM7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIC8vIEFkZCBhbiBlbnRpcmUgc3RyaW5nIHRvIHRoZSBidWlsZGVy
LiBVc2VzIHN0cmxlbigpIGludGVybmFsbHkgdG8KKyAgICAgICAgLy8gY29tcHV0ZSB0aGUgbGVu
Z3RoIG9mIHRoZSBpbnB1dCBzdHJpbmcuCisgICAgICAgIHZvaWQgQWRkU3RyaW5nKGNvbnN0IGNo
YXIqIHMpIHsKKyAgICAgICAgICAgIEFkZFN1YnN0cmluZyhzLCBTdHJMZW5ndGgocykpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBBZGQgdGhlIGZpcnN0ICduJyBjaGFyYWN0ZXJz
IG9mIHRoZSBnaXZlbiBzdHJpbmcgJ3MnIHRvIHRoZQorICAgICAgICAvLyBidWlsZGVyLiBUaGUg
aW5wdXQgc3RyaW5nIG11c3QgaGF2ZSBlbm91Z2ggY2hhcmFjdGVycy4KKyAgICAgICAgdm9pZCBB
ZGRTdWJzdHJpbmcoY29uc3QgY2hhciogcywgaW50IG4pIHsKKyAgICAgICAgICAgIEFTU0VSVCgh
aXNfZmluYWxpemVkKCkgJiYgcG9zaXRpb25fICsgbiA8IGJ1ZmZlcl8ubGVuZ3RoKCkpOworICAg
ICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHNpemVfdD4obikgPD0gc3RybGVuKHMpKTsKKyAg
ICAgICAgICAgIG1lbWNweSgmYnVmZmVyX1twb3NpdGlvbl9dLCBzLCBuICoga0NoYXJTaXplKTsK
KyAgICAgICAgICAgIHBvc2l0aW9uXyArPSBuOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICAKKyAgICAgICAgLy8gQWRkIGNoYXJhY3RlciBwYWRkaW5nIHRvIHRoZSBidWlsZGVyLiBJZiBj
b3VudCBpcyBub24tcG9zaXRpdmUsCisgICAgICAgIC8vIG5vdGhpbmcgaXMgYWRkZWQgdG8gdGhl
IGJ1aWxkZXIuCisgICAgICAgIHZvaWQgQWRkUGFkZGluZyhjaGFyIGMsIGludCBjb3VudCkgewor
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgQWRkQ2hhcmFjdGVyKGMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICAvLyBGaW5hbGl6ZSB0aGUgc3RyaW5nIGJ5IDAtdGVybWluYXRpbmcgaXQgYW5k
IHJldHVybmluZyB0aGUgYnVmZmVyLgorICAgICAgICBjaGFyKiBGaW5hbGl6ZSgpIHsKKyAgICAg
ICAgICAgIEFTU0VSVCghaXNfZmluYWxpemVkKCkgJiYgcG9zaXRpb25fIDwgYnVmZmVyXy5sZW5n
dGgoKSk7CisgICAgICAgICAgICBidWZmZXJfW3Bvc2l0aW9uX10gPSAnXDAnOworICAgICAgICAg
ICAgLy8gTWFrZSBzdXJlIG5vYm9keSBtYW5hZ2VkIHRvIGFkZCBhIDAtY2hhcmFjdGVyIHRvIHRo
ZQorICAgICAgICAgICAgLy8gYnVmZmVyIHdoaWxlIGJ1aWxkaW5nIHRoZSBzdHJpbmcuCisgICAg
ICAgICAgICBBU1NFUlQoc3RybGVuKGJ1ZmZlcl8uc3RhcnQoKSkgPT0gc3RhdGljX2Nhc3Q8c2l6
ZV90Pihwb3NpdGlvbl8pKTsKKyAgICAgICAgICAgIHBvc2l0aW9uXyA9IC0xOworICAgICAgICAg
ICAgQVNTRVJUKGlzX2ZpbmFsaXplZCgpKTsKKyAgICAgICAgICAgIHJldHVybiBidWZmZXJfLnN0
YXJ0KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgVmVjdG9y
PGNoYXI+IGJ1ZmZlcl87CisgICAgICAgIGludCBwb3NpdGlvbl87CisgICAgICAgIAorICAgICAg
ICBib29sIGlzX2ZpbmFsaXplZCgpIGNvbnN0IHsgcmV0dXJuIHBvc2l0aW9uXyA8IDA7IH0KKyAg
ICAgICAgCisgICAgICAgIERJU0FMTE9XX0lNUExJQ0lUX0NPTlNUUlVDVE9SUyhTdHJpbmdCdWls
ZGVyKTsKKyAgICB9OworICAgIAorICAgIC8vIFRoZSB0eXBlLWJhc2VkIGFsaWFzaW5nIHJ1bGUg
YWxsb3dzIHRoZSBjb21waWxlciB0byBhc3N1bWUgdGhhdCBwb2ludGVycyBvZgorICAgIC8vIGRp
ZmZlcmVudCB0eXBlcyAoZm9yIHNvbWUgZGVmaW5pdGlvbiBvZiBkaWZmZXJlbnQpIG5ldmVyIGFs
aWFzIGVhY2ggb3RoZXIuCisgICAgLy8gVGh1cyB0aGUgZm9sbG93aW5nIGNvZGUgZG9lcyBub3Qg
d29yazoKKyAgICAvLworICAgIC8vIGZsb2F0IGYgPSBmb28oKTsKKyAgICAvLyBpbnQgZmJpdHMg
PSAqKGludCopKCZmKTsKKyAgICAvLworICAgIC8vIFRoZSBjb21waWxlciAna25vd3MnIHRoYXQg
dGhlIGludCBwb2ludGVyIGNhbid0IHJlZmVyIHRvIGYgc2luY2UgdGhlIHR5cGVzCisgICAgLy8g
ZG9uJ3QgbWF0Y2gsIHNvIHRoZSBjb21waWxlciBtYXkgY2FjaGUgZiBpbiBhIHJlZ2lzdGVyLCBs
ZWF2aW5nIHJhbmRvbSBkYXRhCisgICAgLy8gaW4gZmJpdHMuICBVc2luZyBDKysgc3R5bGUgY2Fz
dHMgbWFrZXMgbm8gZGlmZmVyZW5jZSwgaG93ZXZlciBhIHBvaW50ZXIgdG8KKyAgICAvLyBjaGFy
IGRhdGEgaXMgYXNzdW1lZCB0byBhbGlhcyBhbnkgb3RoZXIgcG9pbnRlci4gIFRoaXMgaXMgdGhl
ICdtZW1jcHkKKyAgICAvLyBleGNlcHRpb24nLgorICAgIC8vCisgICAgLy8gQml0X2Nhc3QgdXNl
cyB0aGUgbWVtY3B5IGV4Y2VwdGlvbiB0byBtb3ZlIHRoZSBiaXRzIGZyb20gYSB2YXJpYWJsZSBv
ZiBvbmUKKyAgICAvLyB0eXBlIG9mIGEgdmFyaWFibGUgb2YgYW5vdGhlciB0eXBlLiAgT2YgY291
cnNlIHRoZSBlbmQgcmVzdWx0IGlzIGxpa2VseSB0bworICAgIC8vIGJlIGltcGxlbWVudGF0aW9u
IGRlcGVuZGVudC4gIE1vc3QgY29tcGlsZXJzIChnY2MtNC4yIGFuZCBNU1ZDIDIwMDUpCisgICAg
Ly8gd2lsbCBjb21wbGV0ZWx5IG9wdGltaXplIEJpdENhc3QgYXdheS4KKyAgICAvLworICAgIC8v
IFRoZXJlIGlzIGFuIGFkZGl0aW9uYWwgdXNlIGZvciBCaXRDYXN0LgorICAgIC8vIFJlY2VudCBn
Y2NzIHdpbGwgd2FybiB3aGVuIHRoZXkgc2VlIGNhc3RzIHRoYXQgbWF5IHJlc3VsdCBpbiBicmVh
a2FnZSBkdWUgdG8KKyAgICAvLyB0aGUgdHlwZS1iYXNlZCBhbGlhc2luZyBydWxlLiAgSWYgeW91
IGhhdmUgY2hlY2tlZCB0aGF0IHRoZXJlIGlzIG5vIGJyZWFrYWdlCisgICAgLy8geW91IGNhbiB1
c2UgQml0Q2FzdCB0byBjYXN0IG9uZSBwb2ludGVyIHR5cGUgdG8gYW5vdGhlci4gIFRoaXMgY29u
ZnVzZXMgZ2NjCisgICAgLy8gZW5vdWdoIHRoYXQgaXQgY2FuIG5vIGxvbmdlciBzZWUgdGhhdCB5
b3UgaGF2ZSBjYXN0IG9uZSBwb2ludGVyIHR5cGUgdG8KKyAgICAvLyBhbm90aGVyIHRodXMgYXZv
aWRpbmcgdGhlIHdhcm5pbmcuCisgICAgdGVtcGxhdGUgPGNsYXNzIERlc3QsIGNsYXNzIFNvdXJj
ZT4KKyAgICBpbmxpbmUgRGVzdCBCaXRDYXN0KGNvbnN0IFNvdXJjZSYgc291cmNlKSB7CisgICAg
ICAgIC8vIENvbXBpbGUgdGltZSBhc3NlcnRpb246IHNpemVvZihEZXN0KSA9PSBzaXplb2YoU291
cmNlKQorICAgICAgICAvLyBBIGNvbXBpbGUgZXJyb3IgaGVyZSBtZWFucyB5b3VyIERlc3QgYW5k
IFNvdXJjZSBoYXZlIGRpZmZlcmVudCBzaXplcy4KKyAgICAgICAgdHlwZWRlZiBjaGFyIFZlcmlm
eVNpemVzQXJlRXF1YWxbc2l6ZW9mKERlc3QpID09IHNpemVvZihTb3VyY2UpID8gMSA6IC0xXTsK
KyAgICAgICAgCisgICAgICAgIERlc3QgZGVzdDsKKyAgICAgICAgbWVtY3B5KCZkZXN0LCAmc291
cmNlLCBzaXplb2YoZGVzdCkpOworICAgICAgICByZXR1cm4gZGVzdDsKKyAgICB9CisgICAgCisg
ICAgdGVtcGxhdGUgPGNsYXNzIERlc3QsIGNsYXNzIFNvdXJjZT4KKyAgICBpbmxpbmUgRGVzdCBC
aXRDYXN0KFNvdXJjZSogc291cmNlKSB7CisgICAgICAgIHJldHVybiBCaXRDYXN0PERlc3Q+KHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihzb3VyY2UpKTsKKyAgICB9CisgICAgCit9ICAvLyBu
YW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KKworI2VuZGlmICAvLyBET1VCTEVfQ09OVkVSU0lP
Tl9VVElMU19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi93dGYucHJp
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi93dGYucHJpCmluZGV4IDVlNDhmOWE1MDFkYzM5
ZTFmNWFjNjI4Yjk1MTM5OWU2ODZiMzU0NzAuLmVkNWE2MzRiOGRjMzI1YjIxODJlYWYxYThjNjMy
YmNiYWNkNTdmNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvd3RmLnBy
aQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3d0Zi5wcmkKQEAgLTcsNyArNywxNCBA
QCBTT1VSQ0VTICs9IFwKICAgICB3dGYvQ3VycmVudFRpbWUuY3BwIFwKICAgICB3dGYvRGF0ZU1h
dGguY3BwIFwKICAgICB3dGYvZHRvYS5jcHAgXAotICAgIHd0Zi9EZWNpbWFsTnVtYmVyLmNwcCBc
CisgICAgd3RmL2R0b2EvYmlnbnVtLWR0b2EuY2MgXAorICAgIHd0Zi9kdG9hL2JpZ251bS5jYyBc
CisgICAgd3RmL2R0b2EvY2FjaGVkLXBvd2Vycy5jYyBcCisgICAgd3RmL2R0b2EvZGl5LWZwLmNj
IFwKKyAgICB3dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5jYyBcCisgICAgd3RmL2R0b2EvZmFz
dC1kdG9hLmNjIFwKKyAgICB3dGYvZHRvYS9maXhlZC1kdG9hLmNjIFwKKyAgICB3dGYvZHRvYS9z
dHJ0b2QuY2MgXAogICAgIHd0Zi9GYXN0TWFsbG9jLmNwcCBcCiAgICAgd3RmL2dvYmplY3QvR093
blB0ci5jcHAgXAogICAgIHd0Zi9nb2JqZWN0L0dSZWZQdHIuY3BwIFwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBh
ODI4Y2VjMDAzMjMxNzQ3MWE3YThiMTg3MWU1M2JlMWM1ZmIxNjNmLi5hYzdkM2M0NDYxNzY1MDYx
NGQ0YzA2MWNmNzc4YTA5YTNiNjcxODhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIw
MTEtMDgtMTcgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KKworICAg
ICAgICBJbmNvcnBvcmF0ZSBuZXdlciwgZmFzdGVyIGR0b2EgbGlicmFyeQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYzNDYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAg
ICAgQWRkZWQgbmV3IGR0b2EgbGlicmFyeSBhdCBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZG91
YmxlLWNvbnZlcnNpb24vLgorICAgICAgICBSZXBsYWNlZCBvbGQgY2FsbCB0byBkdG9hLiAgVGhl
IG5ldyBsaWJyYXJ5IGlzIG11Y2ggZmFzdGVyIHRoYW4gdGhlIG9sZCBvbmUuCisgICAgICAgIFdl
IHN0aWxsIHVzZSB0aGUgb2xkIHN0cnRvZCwgYnV0IHdlIGNhbiBwaGFzZSB0aGF0IG91dCBldmVu
dHVhbGx5IGFzIHdlbGwuCisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYvRGVjaW1h
bE51bWJlci5oOiBSZW1vdmVkLgorICAgICAgICAqIGNzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpmb3JtYXROdW1iZXIpOgorICAgICAgICAqIGh0bWwvcGFyc2Vy
L0hUTUxQYXJzZXJJZGlvbXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXplRm9yTnVt
YmVyVHlwZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYXNpY1ZhbHVlOjp3cml0ZUpTT04pOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpz
ZXJpYWxpemVkKToKKwogMjAxMS0wOC0xNiAgSm9zZXBoIFBlY29yYXJvICA8am9lcGVja0B3ZWJr
aXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgQ2hyb21pdW0gV2luZG93cyBidWlsZCBmaXgg
YWZ0ZXIgcjkzMTQwLiBUYWtlIDQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJk
aW5nSGVhZGVycy93dGYvRGVjaW1hbE51bWJlci5oIGIvU291cmNlL1dlYkNvcmUvRm9yd2FyZGlu
Z0hlYWRlcnMvd3RmL0RlY2ltYWxOdW1iZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMzMzMTc0ZDU4YWNmN2QwN2M2NDVhZWU4YzM2NjgxM2FiMzE0MjM5Zi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJk
aW5nSGVhZGVycy93dGYvRGVjaW1hbE51bWJlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCww
IEBACi0jaWZuZGVmIFdlYkNvcmVfRldEX0RlY2ltYWxOdW1iZXJfaAotI2RlZmluZSBXZWJDb3Jl
X0ZXRF9EZWNpbWFsTnVtYmVyX2gKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9EZWNpbWFsTnVt
YmVyLmg+Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRp
dmVWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCmlu
ZGV4IGJhZDJlM2NkMzBjZWY0N2ExZmQyYThhNDI4MDA5MmNjN2RmNDExMmEuLjY4YjBjMWM3ZWE0
Y2E2NjJiMmQ5NzNlNDc2NjNkYmFhZTMxNDZmZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1By
aW1pdGl2ZVZhbHVlLmNwcApAQCAtMzYsOCArMzYsOSBAQAogI2luY2x1ZGUgIlJlY3QuaCIKICNp
bmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+Ci0jaW5j
bHVkZSA8d3RmL0RlY2ltYWxOdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
CisjaW5jbHVkZSA8d3RmL2R0b2EuaD4KKyNpbmNsdWRlIDx3dGYvZHRvYS9kb3VibGUtY29udmVy
c2lvbi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1ZmZlci5oPgogCiAjaWYgRU5BQkxF
KERBU0hCT0FSRF9TVVBQT1JUKQpAQCAtNjA5LDEzICs2MTAsOCBAQCBpbnQgQ1NTUHJpbWl0aXZl
VmFsdWU6OmdldElkZW50KCkgY29uc3QKIAogc3RhdGljIFN0cmluZyBmb3JtYXROdW1iZXIoZG91
YmxlIG51bWJlcikKIHsKLSAgICBEZWNpbWFsTnVtYmVyIGRlY2ltYWwobnVtYmVyKTsKLSAgICAK
LSAgICBTdHJpbmdCdWZmZXIgYnVmZmVyKGRlY2ltYWwuYnVmZmVyTGVuZ3RoRm9yU3RyaW5nRGVj
aW1hbCgpKTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBkZWNpbWFsLnRvU3RyaW5nRGVjaW1hbChi
dWZmZXIuY2hhcmFjdGVycygpLCBidWZmZXIubGVuZ3RoKCkpOwotICAgIEFTU0VSVF9VTlVTRUQo
bGVuZ3RoLCBsZW5ndGggPT0gYnVmZmVyLmxlbmd0aCgpKTsKLQotICAgIHJldHVybiBTdHJpbmc6
OmFkb3B0KGJ1ZmZlcik7CisgICAgTnVtYmVyVG9TdHJpbmdCdWZmZXIgYnVmZmVyOworICAgIHJl
dHVybiBTdHJpbmcobnVtYmVyVG9TdHJpbmcobnVtYmVyLCBidWZmZXIpKTsKIH0KIAogU3RyaW5n
IENTU1ByaW1pdGl2ZVZhbHVlOjpjc3NUZXh0KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5jcHAKaW5kZXggMDU4YmI5MzM5Y2ZmZjVkMTgz
ZTQ5ZjdkMjU4ODI1ODczMDIwY2ExMi4uMDM2MjIxYjIxYjE2ZjhmNTJhZTI1NzJmYmQzNDYwOTg5
NmI3YWEyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNl
cklkaW9tcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklk
aW9tcy5jcHAKQEAgLTYzLDggKzYzLDcgQEAgU3RyaW5nIHNlcmlhbGl6ZUZvck51bWJlclR5cGUo
ZG91YmxlIG51bWJlcikKICAgICAvLyBBY2NvcmRpbmcgdG8gSFRNTDUsICJ0aGUgYmVzdCByZXBy
ZXNlbnRhdGlvbiBvZiB0aGUgbnVtYmVyIG4gYXMgYSBmbG9hdGluZwogICAgIC8vIHBvaW50IG51
bWJlciIgaXMgYSBzdHJpbmcgcHJvZHVjZWQgYnkgYXBwbHlpbmcgVG9TdHJpbmcoKSB0byBuLgog
ICAgIE51bWJlclRvU3RyaW5nQnVmZmVyIGJ1ZmZlcjsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBu
dW1iZXJUb1N0cmluZyhudW1iZXIsIGJ1ZmZlcik7Ci0gICAgcmV0dXJuIFN0cmluZyhidWZmZXIs
IGxlbmd0aCk7CisgICAgcmV0dXJuIFN0cmluZyhudW1iZXJUb1N0cmluZyhudW1iZXIsIGJ1ZmZl
cikpOwogfQogCiBib29sIHBhcnNlVG9Eb3VibGVGb3JOdW1iZXJUeXBlKGNvbnN0IFN0cmluZyYg
c3RyaW5nLCBkb3VibGUqIHJlc3VsdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclZhbHVlcy5jcHAKaW5kZXggOTJiYWJkNjdlOThkNGFjNTkwYzM1NTFiYTRhZjg2YWY5OTc0
OGJmNi4uNmE0ZGE5M2E4MWY4NzNhMmIyOGRmNmYwNGViMmUwYjcwNjBlYjkwNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKQEAgLTMzLDcgKzMzLDcg
QEAKIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAKLSNpbmNsdWRlIDx3dGYvRGVjaW1hbE51bWJl
ci5oPgorI2luY2x1ZGUgPHd0Zi9kdG9hLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NjI2LDIzICs2MjYsMTEgQEAgdm9pZCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjp3cml0ZUpTT04oVmVj
dG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdAogICAgICAgICAgICAgb3V0cHV0LT5hcHBlbmQoZmFs
c2VTdHJpbmcsIDUpOwogICAgIH0gZWxzZSBpZiAodHlwZSgpID09IFR5cGVOdW1iZXIpIHsKICAg
ICAgICAgTnVtYmVyVG9TdHJpbmdCdWZmZXIgYnVmZmVyOwotICAgICAgICBpZiAoIWlzZmluaXRl
KG1fZG91YmxlVmFsdWUpKSB7Ci0gICAgICAgICAgICBvdXRwdXQtPmFwcGVuZChudWxsU3RyaW5n
LCA0KTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY29uc3QgY2hhciogZG91YmxlU3Ry
aW5nID0gbnVtYmVyVG9TdHJpbmcobV9kb3VibGVWYWx1ZSwgYnVmZmVyKTsKKyAgICAgICAgd2hp
bGUgKCpkb3VibGVTdHJpbmcpIHsKKyAgICAgICAgICAgIG91dHB1dC0+YXBwZW5kKFVDaGFyKCpk
b3VibGVTdHJpbmcpKTsKKyAgICAgICAgICAgIGRvdWJsZVN0cmluZysrOwogICAgICAgICB9Ci0g
ICAgICAgIERlY2ltYWxOdW1iZXIgZGVjaW1hbCA9IG1fZG91YmxlVmFsdWU7Ci0gICAgICAgIHVu
c2lnbmVkIGxlbmd0aCA9IDA7Ci0gICAgICAgIGlmIChkZWNpbWFsLmJ1ZmZlckxlbmd0aEZvclN0
cmluZ0RlY2ltYWwoKSA+IFdURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgpIHsKLSAgICAg
ICAgICAgIC8vIE5vdCBlbm91Z2ggcm9vbSBmb3IgZGVjaW1hbC4gVXNlIGV4cG9uZW50aWFsIGZv
cm1hdC4KLSAgICAgICAgICAgIGlmIChkZWNpbWFsLmJ1ZmZlckxlbmd0aEZvclN0cmluZ0V4cG9u
ZW50aWFsKCkgPiBXVEY6Ok51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gRmFsbGJhY2sgZm9yIGFuIGFibm9ybWFsIGNhc2UgaWYgaXQncyB0b28gbGl0dGxl
IGV2ZW4gZm9yIGV4cG9uZW50aWFsLgotICAgICAgICAgICAgICAgIG91dHB1dC0+YXBwZW5kKCJO
YU4iLCAzKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBsZW5ndGggPSBkZWNpbWFsLnRvU3RyaW5nRXhwb25lbnRpYWwoYnVmZmVyLCBXVEY6Ok51
bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBs
ZW5ndGggPSBkZWNpbWFsLnRvU3RyaW5nRGVjaW1hbChidWZmZXIsIFdURjo6TnVtYmVyVG9TdHJp
bmdCdWZmZXJMZW5ndGgpOwotICAgICAgICBvdXRwdXQtPmFwcGVuZChidWZmZXIsIGxlbmd0aCk7
CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAK
aW5kZXggNDhmNzUyMDMwMTZiZjdmNTA2YzgxOGU0YzQxYTg3M2RmZjNjZWI4Yi4uNWVjZGMwZWU5
YWZhNWUxNTJjMTIxZGQ3NjdjYTMzY2Y4MDVkMGUxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yLmNwcApAQCAtMjgsOSArMjgsMTAgQEAKIAogI2luY2x1ZGUgIkhh
c2hUb29scy5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0Rl
Y2ltYWxOdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvSGV4TnVtYmVyLmg+CiAjaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvZHRvYS5oPgorI2luY2x1ZGUgPHd0Zi9kdG9h
L2RvdWJsZS1jb252ZXJzaW9uLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAtMjEwLDggKzIxMSwxMSBAQCBTdHJpbmcgQ29s
b3I6OnNlcmlhbGl6ZWQoKSBjb25zdAogICAgICAgICByZXN1bHQuYXBwZW5kKCcwJyk7CiAgICAg
ZWxzZSB7CiAgICAgICAgIE51bWJlclRvU3RyaW5nQnVmZmVyIGJ1ZmZlcjsKLSAgICAgICAgdW5z
aWduZWQgbGVuZ3RoID0gRGVjaW1hbE51bWJlcihhbHBoYSgpIC8gMjU1LjApLnRvU3RyaW5nRGVj
aW1hbChidWZmZXIsIFdURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgpOwotICAgICAgICBy
ZXN1bHQuYXBwZW5kKGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAgY29uc3QgY2hhciAqZG91Ymxl
U3RyaW5nID0gbnVtYmVyVG9TdHJpbmcoYWxwaGEoKSAvIDI1NS4wLCBidWZmZXIpOworICAgICAg
ICB3aGlsZSAoKmRvdWJsZVN0cmluZykgeworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChVQ2hh
cigqZG91YmxlU3RyaW5nKSk7CisgICAgICAgICAgICBkb3VibGVTdHJpbmcrKzsKKyAgICAgICAg
fQogICAgIH0KIAogICAgIHJlc3VsdC5hcHBlbmQoJyknKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105065</attachid>
            <date>2011-08-24 14:10:29 -0700</date>
            <delta_ts>2011-08-24 14:59:37 -0700</delta_ts>
            <desc>Fixing windows build</desc>
            <filename>bug-66346-20110824141029.patch</filename>
            <type>text/plain</type>
            <size>329026</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM3MTQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGJi
YTQ4NzJjZWJiNmNmMTJjZTFjZjkyMmVmYmQyZDkwM2M5M2I5ZTUuLjAwZjgzZWUxZDY2MTA3Mzc1
NDc1OTI2YWJiM2RhNDAxZmVhZjZlMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDEyMCBAQAorMjAxMS0wOC0yNCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBw
bGUuY29tPgorCisgICAgICAgIEluY29ycG9yYXRlIG5ld2VyLCBmYXN0ZXIgZHRvYSBsaWJyYXJ5
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM0Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIG5l
dyBkdG9hIGxpYnJhcnkgYXQgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2RvdWJsZS1jb252ZXJz
aW9uLy4KKyAgICAgICAgUmVwbGFjZWQgb2xkIGNhbGwgdG8gZHRvYS4gIFRoZSBuZXcgbGlicmFy
eSBpcyBtdWNoIGZhc3RlciB0aGFuIHRoZSBvbGQgb25lLgorICAgICAgICBXZSBzdGlsbCB1c2Ug
dGhlIG9sZCBkdG9hIGZvciBzb21lIHN0dWZmIGluIFdlYkNvcmUgYXMgd2VsbCBhcyB0aGUgb2xk
IHN0cnRvZCwgCisgICAgICAgIGJ1dCB3ZSBjYW4gcGhhc2UgdGhlc2Ugb3V0IGV2ZW50dWFsbHkg
YXMgd2VsbC4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2
YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmd5cGk6CisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRl
ZjoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvY29weS1m
aWxlcy5jbWQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwOgorICAgICAg
ICAoSlNDOjppbml0aWFsaXplVGhyZWFkaW5nT25jZSk6CisgICAgICAgICogcnVudGltZS9OdW1i
ZXJQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1bmNUb0V4cG9uZW50
aWFsKToKKyAgICAgICAgKEpTQzo6bnVtYmVyUHJvdG9GdW5jVG9GaXhlZCk6CisgICAgICAgIChK
U0M6Om51bWJlclByb3RvRnVuY1RvUHJlY2lzaW9uKToKKyAgICAgICAgKiBydW50aW1lL1VTdHJp
bmcuY3BwOgorICAgICAgICAoSlNDOjpVU3RyaW5nOjpudW1iZXIpOgorICAgICAgICAqIHd0Zi9D
TWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvZHRvYS5jcHA6CisgICAgICAgIChXVEY6OmR0
b2EpOgorICAgICAgICAqIHd0Zi9kdG9hLmg6CisgICAgICAgICogd3RmL2R0b2EvQ09QWUlORzog
QWRkZWQuCisgICAgICAgICogd3RmL2R0b2EvTElDRU5TRTogQWRkZWQuCisgICAgICAgICogd3Rm
L2R0b2EvUkVBRE1FOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9iaWdudW0tZHRvYS5jYzog
QWRkZWQuCisgICAgICAgICogd3RmL2R0b2EvYmlnbnVtLWR0b2EuaDogQWRkZWQuCisgICAgICAg
ICogd3RmL2R0b2EvYmlnbnVtLmNjOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9iaWdudW0u
aDogQWRkZWQuCisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpCaWdudW06OlRpbWVz
MTApOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6QmlnbnVtOjpFcXVhbCk6Cisg
ICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpCaWdudW06Okxlc3NFcXVhbCk6CisgICAg
ICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpCaWdudW06Okxlc3MpOgorICAgICAgICAoV1RG
Ojpkb3VibGVfY29udmVyc2lvbjo6QmlnbnVtOjpQbHVzRXF1YWwpOgorICAgICAgICAoV1RGOjpk
b3VibGVfY29udmVyc2lvbjo6QmlnbnVtOjpQbHVzTGVzc0VxdWFsKToKKyAgICAgICAgKFdURjo6
ZG91YmxlX2NvbnZlcnNpb246OkJpZ251bTo6UGx1c0xlc3MpOgorICAgICAgICAoV1RGOjpkb3Vi
bGVfY29udmVyc2lvbjo6QmlnbnVtOjpFbnN1cmVDYXBhY2l0eSk6CisgICAgICAgIChXVEY6OmRv
dWJsZV9jb252ZXJzaW9uOjpCaWdudW06OkJpZ2l0TGVuZ3RoKToKKyAgICAgICAgKiB3dGYvZHRv
YS9jYWNoZWQtcG93ZXJzLmNjOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9jYWNoZWQtcG93
ZXJzLmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9kdG9hL2RpeS1mcC5jYzogQWRkZWQuCisgICAg
ICAgICogd3RmL2R0b2EvZGl5LWZwLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpkb3VibGVfY29u
dmVyc2lvbjo6RGl5RnA6OkRpeUZwKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246
OkRpeUZwOjpTdWJ0cmFjdCk6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpEaXlG
cDo6TWludXMpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RGl5RnA6OlRpbWVz
KToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246OkRpeUZwOjpOb3JtYWxpemUpOgor
ICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RGl5RnA6OmYpOgorICAgICAgICAoV1RG
Ojpkb3VibGVfY29udmVyc2lvbjo6RGl5RnA6OmUpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29u
dmVyc2lvbjo6RGl5RnA6OnNldF9mKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246
OkRpeUZwOjpzZXRfZSk6CisgICAgICAgICogd3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uY2M6
IEFkZGVkLgorICAgICAgICAqIHd0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmg6IEFkZGVkLgor
ICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6
OkRvdWJsZVRvU3RyaW5nQ29udmVydGVyKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNp
b246OlN0cmluZ1RvRG91YmxlQ29udmVydGVyOjpTdHJpbmdUb0RvdWJsZUNvbnZlcnRlcik6Cisg
ICAgICAgICogd3RmL2R0b2EvZG91YmxlLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpkb3VibGVf
Y29udmVyc2lvbjo6ZG91YmxlX3RvX3VpbnQ2NCk6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252
ZXJzaW9uOjp1aW50NjRfdG9fZG91YmxlKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNp
b246OkRvdWJsZTo6RG91YmxlKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246OkRv
dWJsZTo6QXNEaXlGcCk6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGU6
OkFzTm9ybWFsaXplZERpeUZwKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246OkRv
dWJsZTo6QXNVaW50NjQpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91Ymxl
OjpOZXh0RG91YmxlKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZTo6
RXhwb25lbnQpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpTaWdu
aWZpY2FuZCk6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGU6OklzRGVu
b3JtYWwpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpJc1NwZWNp
YWwpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpJc05hbik6Cisg
ICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGU6OklzSW5maW5pdGUpOgorICAg
ICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpTaWduKToKKyAgICAgICAgKFdU
Rjo6ZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZTo6VXBwZXJCb3VuZGFyeSk6CisgICAgICAgIChX
VEY6OmRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGU6Ok5vcm1hbGl6ZWRCb3VuZGFyaWVzKToKKyAg
ICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZTo6dmFsdWUpOgorICAgICAgICAo
V1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpTaWduaWZpY2FuZFNpemVGb3JPcmRlck9m
TWFnbml0dWRlKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZTo6SW5m
aW5pdHkpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpOYU4pOgor
ICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpEaXlGcFRvVWludDY0KToK
KyAgICAgICAgKiB3dGYvZHRvYS9mYXN0LWR0b2EuY2M6IEFkZGVkLgorICAgICAgICAqIHd0Zi9k
dG9hL2Zhc3QtZHRvYS5oOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9maXhlZC1kdG9hLmNj
OiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9maXhlZC1kdG9hLmg6IEFkZGVkLgorICAgICAg
ICAqIHd0Zi9kdG9hL3N0cnRvZC5jYzogQWRkZWQuCisgICAgICAgICogd3RmL2R0b2Evc3RydG9k
Lmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9kdG9hL3V0aWxzLmg6IEFkZGVkLgorICAgICAgICAo
V1RGOjpkb3VibGVfY29udmVyc2lvbjo6TWF4KToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZl
cnNpb246Ok1pbik6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpTdHJMZW5ndGgp
OgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6VmVjdG9yOjpWZWN0b3IpOgorICAg
ICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6VmVjdG9yOjpTdWJWZWN0b3IpOgorICAgICAg
ICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6VmVjdG9yOjpsZW5ndGgpOgorICAgICAgICAoV1RG
Ojpkb3VibGVfY29udmVyc2lvbjo6VmVjdG9yOjppc19lbXB0eSk6CisgICAgICAgIChXVEY6OmRv
dWJsZV9jb252ZXJzaW9uOjpWZWN0b3I6OnN0YXJ0KToKKyAgICAgICAgKFdURjo6ZG91YmxlX2Nv
bnZlcnNpb246OlZlY3Rvcjo6b3BlcmF0b3JbXSk6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252
ZXJzaW9uOjpWZWN0b3I6OmZpcnN0KToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246
OlZlY3Rvcjo6bGFzdCk6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdC
dWlsZGVyOjpTdHJpbmdCdWlsZGVyKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246
OlN0cmluZ0J1aWxkZXI6On5TdHJpbmdCdWlsZGVyKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2Nv
bnZlcnNpb246OlN0cmluZ0J1aWxkZXI6OnNpemUpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29u
dmVyc2lvbjo6U3RyaW5nQnVpbGRlcjo6cG9zaXRpb24pOgorICAgICAgICAoV1RGOjpkb3VibGVf
Y29udmVyc2lvbjo6U3RyaW5nQnVpbGRlcjo6UmVzZXQpOgorICAgICAgICAoV1RGOjpkb3VibGVf
Y29udmVyc2lvbjo6U3RyaW5nQnVpbGRlcjo6QWRkQ2hhcmFjdGVyKToKKyAgICAgICAgKFdURjo6
ZG91YmxlX2NvbnZlcnNpb246OlN0cmluZ0J1aWxkZXI6OkFkZFN0cmluZyk6CisgICAgICAgIChX
VEY6OmRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdCdWlsZGVyOjpBZGRTdWJzdHJpbmcpOgorICAg
ICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6U3RyaW5nQnVpbGRlcjo6QWRkUGFkZGluZyk6
CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdCdWlsZGVyOjpGaW5hbGl6
ZSk6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdCdWlsZGVyOjppc19m
aW5hbGl6ZWQpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6Qml0Q2FzdCk6Cisg
ICAgICAgICogd3RmL3d0Zi5wcmk6CisKIDIwMTEtMDgtMjQgIEZpbGlwIFBpemxvICA8ZnBpemxv
QGFwcGxlLmNvbT4KIAogICAgICAgICBFcnJvckluc3RhbmNlOjpjcmVhdGUgc29tZXRpbWVzIGhh
cyB0d28gaGVhcCBvYmplY3QgY29uc3RydWN0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQppbmRleCA5NDE0MzU0ODllOGJlYmUzYmMxMWM0ZGVjNmU4Nzc1YjE4
MjBlZDU4Li5iYzE5MTBhODM3ZmFkOTg3Nzg1OGFmZWVkNTY4YzNhOWIyOWVmNzlhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNDY1LDkgKzQ2NSwyNyBA
QCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L0N1cnJlbnRUaW1lLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGF0ZU1hdGguY3Bw
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RhdGVNYXRoLmggXAotCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvRGVjaW1hbE51bWJlci5oIFwKLQlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL0RlY2ltYWxOdW1iZXIuY3BwIFwKLQlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RlY29k
ZXIuaCBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EZWNpbWFsTnVtYmVyLmNwcCBc
CisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EZWNpbWFsTnVtYmVyLmggXAorICAgIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9iaWdudW0tZHRvYS5jYyBcCisgICAgU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS5jYyBcCisgICAgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9kdG9hL2NhY2hlZC1wb3dlcnMuY2MgXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvZHRvYS9kaXktZnAuY2MgXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
ZHRvYS9kb3VibGUtY29udmVyc2lvbi5jYyBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9kdG9hL2Zhc3QtZHRvYS5jYyBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9h
L2ZpeGVkLWR0b2EuY2MgXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9zdHJ0
b2QuY2MgXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9iaWdudW0tZHRvYS5o
IFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvYmlnbnVtLmggXAorICAgIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmggXAorICAgIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kaXktZnAuaCBcCisgICAgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmggXAorICAgIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvZHRvYS9kb3VibGUuaCBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9kdG9hL2Zhc3QtZHRvYS5oIFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2Ev
Zml4ZWQtZHRvYS5oIFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2Evc3RydG9k
LmggXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS91dGlscy5oIFwKKyAgICBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RlY29kZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9EZXF1ZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Rpc2FsbG93Q1R5
cGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Eb3VibHlMaW5rZWRMaXN0LmggXApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKaW5kZXggM2QwZWQ5N2NiODg2
NzQzZDgzNTE0MDAyNmIwNmM2ZDUzMTNlMzA3Yi4uYWE3NGEyOGFlMWQ5MmViMjViN2ZiZDEyYWNm
MTlhNGQ4MzBjNDE5ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLmV4cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhw
CkBAIC0zODUsOCArMzg1LDYgQEAgX19aTjNXVEYxMU9TQWxsb2NhdG9yMTZyZXNlcnZlQW5kQ29t
bWl0RW1OUzBfNVVzYWdlRWJiYgogX19aTjNXVEYxMU9TQWxsb2NhdG9yMThyZWxlYXNlRGVjb21t
aXR0ZWRFUHZtCiBfX1pOM1dURjExY29tbWVudEF0b21FCiBfX1pOM1dURjExY3VycmVudFRpbWVF
dgotX19aTjNXVEYxMWR0b2FSb3VuZERQRVBjZGlSYlJpUmoKLV9fWk4zV1RGMTFkdG9hUm91bmRT
RkVQY2RpUmJSaVJqCiBfX1pOM1dURjExZW1wdHlTdHJpbmdFdgogX19aTjNXVEYxMWZhc3RSZWFs
bG9jRVB2bQogX19aTjNXVEYxMkF0b21pY1N0cmluZzExYWRkU2xvd0Nhc2VFUE5TXzEwU3RyaW5n
SW1wbEUKQEAgLTQxNSw3ICs0MTMsNyBAQCBfX1pOM1dURjEzY3VycmVudFRocmVhZEV2CiBfX1pO
M1dURjEzdHJ5RmFzdENhbGxvY0VtbQogX19aTjNXVEYxM3RyeUZhc3RNYWxsb2NFbQogX19aTjNX
VEYxNGZhc3RNYWxsb2NTaXplRVBLdgotX19aTjNXVEYxNG51bWJlclRvU3RyaW5nRWRQdAorX19a
TjNXVEYxNG51bWJlclRvU3RyaW5nRWRQYwogX19aTjNXVEYxNHRyeUZhc3RSZWFsbG9jRVB2bQog
X19aTjNXVEYxNVRocmVhZENvbmRpdGlvbjR3YWl0RVJOU181TXV0ZXhFCiBfX1pOM1dURjE1VGhy
ZWFkQ29uZGl0aW9uNnNpZ25hbEV2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUuZ3lwaSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5neXBpCmluZGV4IDYxMjA0OTJlMjkyODQ2MjkzYjI1MzgxM2MyOThkNDFhOGJmZmIzNGQuLjM5
ZDQ1OWZiZWE5OGRmMGQwNTQ1ZGYxZGU3MGRjNTM4OTJjMjVjMTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCkBAIC0xNDYsNyArMTQ2LDE2IEBACiAgICAgICAg
ICAgICAnd3RmL0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmgnLAogICAgICAgICAgICAg
J3d0Zi9DdXJyZW50VGltZS5oJywKICAgICAgICAgICAgICd3dGYvRGF0ZU1hdGguaCcsCi0gICAg
ICAgICAgICAnd3RmL0RlY2ltYWxOdW1iZXIuaCcsCisgICAgICAgICAgICAnd3RmL2R0b2EvYmln
bnVtLWR0b2EuaCcsCisgICAgICAgICAgICAnd3RmL2R0b2EvYmlnbnVtLmgnLAorICAgICAgICAg
ICAgJ3d0Zi9kdG9hL2NhY2hlZC1wb3dlcnMuaCcsCisgICAgICAgICAgICAnd3RmL2R0b2EvZGl5
LWZwLmgnLAorICAgICAgICAgICAgJ3d0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmgnLAorICAg
ICAgICAgICAgJ3d0Zi9kdG9hL2RvdWJsZS5oJywKKyAgICAgICAgICAgICd3dGYvZHRvYS9mYXN0
LWR0b2EuaCcsCisgICAgICAgICAgICAnd3RmL2R0b2EvZml4ZWQtZHRvYS5oJywKKyAgICAgICAg
ICAgICd3dGYvZHRvYS9zdHJ0b2QuaCcsCisgICAgICAgICAgICAnd3RmL2R0b2EvdXRpbHMuaCcs
CiAgICAgICAgICAgICAnd3RmL0RlY29kZXIuaCcsCiAgICAgICAgICAgICAnd3RmL0RlcXVlLmgn
LAogICAgICAgICAgICAgJ3d0Zi9EaXNhbGxvd0NUeXBlLmgnLApAQCAtNTgxLDcgKzU5MCwxNCBA
QAogICAgICAgICAgICAgJ3d0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5jcHAnLAog
ICAgICAgICAgICAgJ3d0Zi9DdXJyZW50VGltZS5jcHAnLAogICAgICAgICAgICAgJ3d0Zi9EYXRl
TWF0aC5jcHAnLAotICAgICAgICAgICAgJ3d0Zi9EZWNpbWFsTnVtYmVyLmNwcCcsCisgICAgICAg
ICAgICAnd3RmL2R0b2EvYmlnbnVtLWR0b2EuY2MnLAorICAgICAgICAgICAgJ3d0Zi9kdG9hL2Jp
Z251bS5jYycsCisgICAgICAgICAgICAnd3RmL2R0b2EvY2FjaGVkLXBvd2Vycy5jYycsCisgICAg
ICAgICAgICAnd3RmL2R0b2EvZGl5LWZwLmNjJywKKyAgICAgICAgICAgICd3dGYvZHRvYS9kb3Vi
bGUtY29udmVyc2lvbi5jYycsCisgICAgICAgICAgICAnd3RmL2R0b2EvZmFzdC1kdG9hLmNjJywK
KyAgICAgICAgICAgICd3dGYvZHRvYS9maXhlZC1kdG9hLmNjJywKKyAgICAgICAgICAgICd3dGYv
ZHRvYS9zdHJ0b2QuY2MnLAogICAgICAgICAgICAgJ3d0Zi9EeW5hbWljQW5ub3RhdGlvbnMuY3Bw
JywKICAgICAgICAgICAgICd3dGYvRHluYW1pY0Fubm90YXRpb25zLmgnLAogICAgICAgICAgICAg
J3d0Zi9GYXN0TWFsbG9jLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUuZGVmCmluZGV4IGFkMWYyNDQ3ZGE5MzcyYzlkNjBiMGJlODI3OWUz
ZGE1YjRiMzcyNGYuLjYwMGE2MWE5NDFkNDBiNjIwMDk0Njg1MTQ2MTEzODU5NTg2NTkzYmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVm
CkBAIC00MSw2ICs0MSwxMSBAQCBFWFBPUlRTCiAgICAgPz8xV2Vha0hhbmRsZU93bmVyQEpTQ0BA
VUFFQFhaCiAgICAgPz84SlNDQEBZQV9OQUJWVVN0cmluZ0AwQDBAWgogICAgID8/OFdURkBAWUFf
TkFCVkNTdHJpbmdAMEAwQFoKKyAgICA/RWNtYVNjcmlwdENvbnZlcnRlckBEb3VibGVUb1N0cmlu
Z0NvbnZlcnRlckBkb3VibGVfY29udmVyc2lvbkBXVEZAQFNBQUJWMTIzQFhaCisgICAgP1RvRXhw
b25lbnRpYWxARG91YmxlVG9TdHJpbmdDb252ZXJ0ZXJAZG91YmxlX2NvbnZlcnNpb25AV1RGQEBR
QkVfTk5IUEFWU3RyaW5nQnVpbGRlckAyM0BAWgorICAgID9Ub0ZpeGVkQERvdWJsZVRvU3RyaW5n
Q29udmVydGVyQGRvdWJsZV9jb252ZXJzaW9uQFdURkBAUUJFX05OSFBBVlN0cmluZ0J1aWxkZXJA
MjNAQFoKKyAgICA/VG9QcmVjaXNpb25ARG91YmxlVG9TdHJpbmdDb252ZXJ0ZXJAZG91YmxlX2Nv
bnZlcnNpb25AV1RGQEBRQkVfTk5IUEFWU3RyaW5nQnVpbGRlckAyM0BAWgorICAgID9Ub1Nob3J0
ZXN0QERvdWJsZVRvU3RyaW5nQ29udmVydGVyQGRvdWJsZV9jb252ZXJzaW9uQFdURkBAUUJFX05O
UEFWU3RyaW5nQnVpbGRlckAyM0BAWgogICAgID9hYnNvbHV0ZVRpbWVUb1dhaXRUaW1lb3V0SW50
ZXJ2YWxAV1RGQEBZQUtOQFoKICAgICA/YWN0aXZpdHlDYWxsYmFja0BIZWFwQEpTQ0BAUUFFUEFW
R0NBY3Rpdml0eUNhbGxiYWNrQDJAWFoKICAgICA/YWRkQElkZW50aWZpZXJASlNDQEBTQT9BVj8k
UGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBXVEZAQEBXVEZAQFBBVkV4ZWNTdGF0ZUAyQFBCREBaCkBA
IC0yMTUsNiArMjIwLDcgQEAgRVhQT1JUUwogICAgID9pbmNyZW1lbnRAUmVmQ291bnRlZExlYWtD
b3VudGVyQFdURkBAUUFFWFhaCiAgICAgP2luaXRAQXRvbWljU3RyaW5nQFdURkBAU0FYWFoKICAg
ICA/aW5pdEBKU0dsb2JhbE9iamVjdEBKU0NAQEFBRVhQQVZKU09iamVjdEAyQEBaCisgICAgP2lu
aXRpYWxpemVAZG91YmxlX2NvbnZlcnNpb25AV1RGQEBZQVhYWgogICAgID9pbml0aWFsaXplTWFp
blRocmVhZEBXVEZAQFlBWFhaCiAgICAgP2luaXRpYWxpemVUaHJlYWRpbmdASlNDQEBZQVhYWgog
ICAgID9pbml0aWFsaXplVGhyZWFkaW5nQFdURkBAWUFYWFoKQEAgLTI1MCw3ICsyNTYsNyBAQCBF
WFBPUlRTCiAgICAgP251bWJlckBVU3RyaW5nQEpTQ0BAU0E/QVYxMkBIQFoKICAgICA/bnVtYmVy
QFVTdHJpbmdASlNDQEBTQT9BVjEyQElAWgogICAgID9udW1iZXJAVVN0cmluZ0BKU0NAQFNBP0FW
MTJATkBaCi0gICAgP251bWJlclRvU3RyaW5nQFdURkBAWUFJTlFBX1dAWgorICAgID9udW1iZXJU
b1N0cmluZ0BXVEZAQFlBUEJETlFBREBaCiAgICAgP29iamVjdENvdW50QEhlYXBASlNDQEBRQUVJ
WFoKICAgICA/b2JqZWN0UHJvdG9GdW5jVG9TdHJpbmdASlNDQEBZSV9KUEFWRXhlY1N0YXRlQDFA
QFoKICAgICA/cGFyc2VEYXRlRnJvbU51bGxUZXJtaW5hdGVkQ2hhcmFjdGVyc0BXVEZAQFlBTlBC
REBaCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNw
cm9qL0phdmFTY3JpcHRDb3JlL2NvcHktZmlsZXMuY21kIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9jb3B5LWZpbGVzLmNtZAppbmRl
eCBlNDA3NWE0NWQ3NWFmOTA1ZjRhNDAzMDFmZjFjNjJmNWY3ZDliZDg4Li41NTEwMjFhZGU1MzFk
NTRkMTY5M2ViOTBkZjNmMjFiZDU1MjIyNTNlIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL2NvcHktZmlsZXMuY21k
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNj
cmlwdENvcmUvY29weS1maWxlcy5jbWQKQEAgLTQ2LDYgKzQ2LDcgQEAgZm9yICUlZCBpbiAoCiAg
ICAgcHJvZmlsZXIKICAgICBydW50aW1lCiAgICAgd3RmCisgICAgd3RmXGR0b2EKICAgICB3dGZc
dGV4dAogICAgIHd0Zlx1bmljb2RlCiAgICAgd3RmXHVuaWNvZGVcaWN1CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGRmOGU4M2RiM2M4NGUyNzRmZTVlZGM3ZTQ2MjU5MzVhYWVlNjI1
ZjguLmE2NjAxNjFmMTUwMGYxYjYyYWE5MGJhZTA3NWQzNDY0YmQzYzI5NGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC00OCw4ICs0OCw2IEBACiAJCTBCREZGQUUwMEZDNjE5Mjkw
MEQ2OUVGNCAvKiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBCREZGQUQ0MEZDNjE3MTAwMEQ2OUVGNCAvKiBDcm9z
c1RocmVhZFJlZkNvdW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwQkRGRkFFMTBGQzYxOTMxMDBENjlFRjQgLyogT3duRmFzdE1hbGxvY1B0
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEJERkZB
RDEwRkM2MTZFQzAwRDY5RUY0IC8qIE93bkZhc3RNYWxsb2NQdHIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwQkYyOEEyOTExQTMzREMzMDA2MzhG
ODQgLyogU2l6ZUxpbWl0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwQkYyOEEyODExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgKi87
IH07Ci0JCTBGMjk0NzlDMTI2RTY5OEMwMEIzQUJGNSAvKiBEZWNpbWFsTnVtYmVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjk0NzlCMTI2RTY5
OEMwMEIzQUJGNSAvKiBEZWNpbWFsTnVtYmVyLmNwcCAqLzsgfTsKLQkJMEY3NzAwOTAxNDAyRkRF
NDAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8qIFNhbXBsaW5n
Q291bnRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGNzcwMDkyMTQwMkZGM0MwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NzAwOTExNDAyRkYy
ODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi87IH07CiAJCTBGOTYzQjM4MTNGQzZG
RTkwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzQjM2MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2Zp
bGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RkM4MTUwQTE0MDQzQkY1MDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDODE1MDkxNDA0M0JEMjAw
Q0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjUzLDcgKzI1MSw2IEBACiAJCTg2MDE2MUU2MEYz
QTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODYwMTYxRTIwRjNBODNDMTAwRjg0NzEw
IC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggKi87IH07CiAJCTg2MjZCRUNGMTE5MjhFMzkw
MDc4MkZBQiAvKiBTdHJpbmdTdGF0aWNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg2MjZCRUNFMTE5MjhFMzkwMDc4MkZBQiAvKiBTdHJpbmdTdGF0
aWNzLmNwcCAqLzsgfTsKIAkJODYyN0U1RUMxMUYxMjgxOTAwQTMxM0I1IC8qIFBhZ2VBbGxvY2F0
aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjI3
RTVFQTExRjEyODE5MDBBMzEzQjUgLyogUGFnZUFsbG9jYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk4NjJBRjRCNjEyMjM5QzdCMDAyNEU1
QjggLyogRGVjaW1hbE51bWJlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODYyQUY0QjUxMjIzOUM3QjAwMjRFNUI4IC8qIERlY2ltYWxOdW1iZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NjNCMjNF
MDBGQzYxMTg5MDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjNCMjNERjBGQzYwRTYyMDA3MDNB
QTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODY0MzhGQzQxMjY1NTAzRTAwRTBERkNBIC8qIFN0cmlu
Z0J1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODY0MzhGQzMxMjY1NTAzRTAwRTBERkNBIC8qIFN0cmluZ0J1aWxkZXIuY3BwICovOyB9Owog
CQk4NjU2NTc0MjExNUJFM0RBMDAyOTFGNDAgLyogQ1N0cmluZy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjU2NTc0MDExNUJFM0RBMDAyOTFGNDAg
LyogQ1N0cmluZy5jcHAgKi87IH07CkBAIC01OTgsNiArNTk1LDI3IEBACiAJCUJDRkQ4QzkyMEVF
QjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGRDhDOTAwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJs
ZS5jcHAgKi87IH07CiAJCUJDRkQ4QzkzMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkQ4QzkxMEVF
QjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuaCAqLzsgfTsKIAkJQzBBMjcyNjMwRTUwQTA2MzAw
RTk2RTE1IC8qIE5vdEZvdW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDMEEyNzIzRjBFNTA5RjFFMDBFOTZFMTUgLyogTm90Rm91bmQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDMjJCMzFCOTE0MDU3
N0Q3MDBEQjQ3NUEgLyogU2FtcGxpbmdDb3VudGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc3MDA4RTE0MDJGREQ2MDA3OEVCMzkgLyogU2FtcGxp
bmdDb3VudGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJQzIyQzUyRjExM0ZBRjZFRjAwQjdEQzBEIC8qIGJpZ251bS1kdG9hLmNjIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyQzUyOTAxM0ZBRjZFRjAw
QjdEQzBEIC8qIGJpZ251bS1kdG9hLmNjICovOyB9OworCQlDMjJDNTJGMjEzRkFGNkVGMDBCN0RD
MEQgLyogYmlnbnVtLWR0b2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEMyMkM1MjkxMTNGQUY2RUYwMEI3REMwRCAvKiBiaWdudW0tZHRvYS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUMyMkM1MkYzMTNG
QUY2RUYwMEI3REMwRCAvKiBiaWdudW0uY2MgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTI5MjEzRkFGNkVGMDBCN0RDMEQgLyogYmlnbnVtLmNjICov
OyB9OworCQlDMjJDNTJGNDEzRkFGNkVGMDBCN0RDMEQgLyogYmlnbnVtLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTI5MzEzRkFGNkVGMDBCN0RD
MEQgLyogYmlnbnVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJQzIyQzUyRjUxM0ZBRjZFRjAwQjdEQzBEIC8qIGNhY2hlZC1wb3dlcnMuY2MgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTI5NDEzRkFG
NkVGMDBCN0RDMEQgLyogY2FjaGVkLXBvd2Vycy5jYyAqLzsgfTsKKwkJQzIyQzUyRjYxM0ZBRjZF
RjAwQjdEQzBEIC8qIGNhY2hlZC1wb3dlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1Mjk1MTNGQUY2RUYwMEI3REMwRCAvKiBjYWNoZWQtcG93
ZXJzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
QzIyQzUyRjcxM0ZBRjZFRjAwQjdEQzBEIC8qIGRpeS1mcC5jYyBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1Mjk3MTNGQUY2RUYwMEI3REMwRCAvKiBk
aXktZnAuY2MgKi87IH07CisJCUMyMkM1MkY4MTNGQUY2RUYwMEI3REMwRCAvKiBkaXktZnAuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1Mjk4MTNG
QUY2RUYwMEI3REMwRCAvKiBkaXktZnAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQlDMjJDNTJGOTEzRkFGNkVGMDBCN0RDMEQgLyogZG91YmxlLWNv
bnZlcnNpb24uY2MgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDMjJDNTI5OTEzRkFGNkVGMDBCN0RDMEQgLyogZG91YmxlLWNvbnZlcnNpb24uY2MgKi87IH07
CisJCUMyMkM1MkZBMTNGQUY2RUYwMEI3REMwRCAvKiBkb3VibGUtY29udmVyc2lvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyQzUyOUExM0ZBRjZF
RjAwQjdEQzBEIC8qIGRvdWJsZS1jb252ZXJzaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIyQzUyRkIxM0ZBRjZFRjAwQjdEQzBEIC8qIGRv
dWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIy
QzUyOUIxM0ZBRjZFRjAwQjdEQzBEIC8qIGRvdWJsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUMyMkM1MkZDMTNGQUY2RUYwMEI3REMwRCAvKiBm
YXN0LWR0b2EuY2MgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDMjJDNTI5QzEzRkFGNkVGMDBCN0RDMEQgLyogZmFzdC1kdG9hLmNjICovOyB9OworCQlDMjJD
NTJGRDEzRkFGNkVGMDBCN0RDMEQgLyogZmFzdC1kdG9hLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTI5RDEzRkFGNkVGMDBCN0RDMEQgLyogZmFz
dC1kdG9hLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJQzIyQzUyRkUxM0ZBRjZFRjAwQjdEQzBEIC8qIGZpeGVkLWR0b2EuY2MgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTI5RTEzRkFGNkVGMDBCN0RD
MEQgLyogZml4ZWQtZHRvYS5jYyAqLzsgfTsKKwkJQzIyQzUyRkYxM0ZBRjZFRjAwQjdEQzBEIC8q
IGZpeGVkLWR0b2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEMyMkM1MjlGMTNGQUY2RUYwMEI3REMwRCAvKiBmaXhlZC1kdG9hLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIyQzUzMTMxM0ZBRjZFRjAw
QjdEQzBEIC8qIHN0cnRvZC5jYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEMyMkM1MkI5MTNGQUY2RUYwMEI3REMwRCAvKiBzdHJ0b2QuY2MgKi87IH07CisJ
CUMyMkM1MzE0MTNGQUY2RUYwMEI3REMwRCAvKiBzdHJ0b2QuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1MkJBMTNGQUY2RUYwMEI3REMwRCAvKiBz
dHJ0b2QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQlDMjJDNTMxNTEzRkFGNkVGMDBCN0RDMEQgLyogdXRpbHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1MkJCMTNGQUY2RUYwMEI3REMwRCAvKiB1
dGlscy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CUMyRUU1OUEwMTNGQzk3M0YwMDlDRUFGRSAvKiBEZWNpbWFsTnVtYmVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkVFNTk5RTEzRkM5NzJBMDA5Q0VB
RkUgLyogRGVjaW1hbE51bWJlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCUMyRUU1OUExMTNGQzk3NjgwMDlDRUFGRSAvKiBEZWNpbWFsTnVtYmVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRUU1
OTlEMTNGQzk3MkEwMDlDRUFGRSAvKiBEZWNpbWFsTnVtYmVyLmNwcCAqLzsgfTsKIAkJRDdBNDZB
NEYxMzM4RkZFQTAwRUQ2OTVDIC8qIER5bmFtaWNBbm5vdGF0aW9ucy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDc1QUY1OTYxMkY4Q0I5NTAwRkMwQURG
IC8qIER5bmFtaWNBbm5vdGF0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUREMzc3Q0JDMTIwNzJDMTgwMDZBMjUxNyAvKiBCaXRtYXAuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEREMzc3Q0JCMTIw
NzJDMTgwMDZBMjUxNyAvKiBCaXRtYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlEREY3QUJENDExRjYwRUQyMDAxMDhFMzYgLyogR0NBY3Rpdml0
eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBEREY3QUJEMjExRjYwRUQyMDAxMDhFMzYgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTczMyw3ICs3NTEs
NiBAQAogCQkwQkRGRkFEMTBGQzYxNkVDMDBENjlFRjQgLyogT3duRmFzdE1hbGxvY1B0ci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPd25GYXN0TWFsbG9jUHRyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBCREZGQUQ0MEZDNjE3MTAwMEQ2OUVGNCAvKiBDcm9z
c1RocmVhZFJlZkNvdW50ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3Jv
c3NUaHJlYWRSZWZDb3VudGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBCRjI4
QTI4MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNpemVMaW1pdHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkwRjI5NDc5QjEyNkU2OThDMDBCM0FCRjUgLyogRGVjaW1hbE51bWJlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZWNpbWFsTnVtYmVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8qIFNh
bXBsaW5nQ291bnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTYW1wbGlu
Z0NvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NzAwOTExNDAyRkYy
ODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjk2M0IzNjEzRkM2RkRFMDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhbHVlUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtOTQ3LDcgKzk2NCw2IEBACiAJCTg2MDE2MUUyMEYzQTgzQzEwMEY4
NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4NjI2QkVDRTExOTI4RTM5MDA3ODJGQUIgLyogU3RyaW5nU3RhdGljcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTdHJpbmdTdGF0aWNzLmNwcDsg
cGF0aCA9IHRleHQvU3RyaW5nU3RhdGljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTg2MjdFNUVBMTFGMTI4MTkwMEEzMTNCNSAvKiBQYWdlQWxsb2NhdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWdlQWxsb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk4NjJBRjRCNTEyMjM5QzdCMDAyNEU1QjggLyogRGVjaW1hbE51bWJl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWNpbWFsTnVtYmVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2M0IyM0RGMEZDNjBFNjIwMDcwM0FBNCAvKiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2
NDM4RkMzMTI2NTUwM0UwMEUwREZDQSAvKiBTdHJpbmdCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFN0cmluZ0J1aWxkZXIuY3BwOyBwYXRoID0gdGV4dC9T
dHJpbmdCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY1NjU3NDAx
MTVCRTNEQTAwMjkxRjQwIC8qIENTdHJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQ1N0cmluZy5jcHA7IHBhdGggPSB0ZXh0L0NTdHJpbmcuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI2Myw2ICsxMjc5LDMyIEBACiAJCUJDRkQ4QzkwMEVF
QjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSnVtcFRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QkNGRDhDOTEwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKdW1wVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQzBBMjcyM0YwRTUwOUYxRTAwRTk2RTE1IC8qIE5vdEZvdW5kLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE5vdEZvdW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUMyMkM1MjkwMTNGQUY2RUYwMEI3REMwRCAvKiBiaWdudW0tZHRvYS5jYyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9ICJiaWdudW0tZHRvYS5jYyI7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUMyMkM1MjkxMTNGQUY2RUYwMEI3REMwRCAvKiBiaWdudW0tZHRv
YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSAiYmlnbnVtLWR0b2EuaCI7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMkM1MjkyMTNGQUY2RUYwMEI3REMwRCAvKiBi
aWdudW0uY2MgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBiaWdudW0uY2M7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMkM1MjkzMTNGQUY2RUYwMEI3REMwRCAv
KiBiaWdudW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gYmlnbnVtLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMkM1Mjk0MTNGQUY2RUYwMEI3REMwRCAvKiBj
YWNoZWQtcG93ZXJzLmNjICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gImNh
Y2hlZC1wb3dlcnMuY2MiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTI5NTEz
RkFGNkVGMDBCN0RDMEQgLyogY2FjaGVkLXBvd2Vycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSAiY2FjaGVkLXBvd2Vycy5oIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQzIyQzUyOTYxM0ZBRjZFRjAwQjdEQzBEIC8qIENPUFlJTkcgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gQ09QWUlORzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyOTcxM0ZB
RjZFRjAwQjdEQzBEIC8qIGRpeS1mcC5jYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9ICJkaXktZnAuY2MiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTI5
ODEzRkFGNkVGMDBCN0RDMEQgLyogZGl5LWZwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9ICJkaXktZnAuaCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMkM1Mjk5
MTNGQUY2RUYwMEI3REMwRCAvKiBkb3VibGUtY29udmVyc2lvbi5jYyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9ICJkb3VibGUtY29udmVyc2lvbi5jYyI7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUMyMkM1MjlBMTNGQUY2RUYwMEI3REMwRCAvKiBkb3VibGUtY29u
dmVyc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSAiZG91YmxlLWNvbnZl
cnNpb24uaCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMkM1MjlCMTNGQUY2RUYw
MEI3REMwRCAvKiBkb3VibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZG91
YmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMkM1MjlDMTNGQUY2RUYwMEI3
REMwRCAvKiBmYXN0LWR0b2EuY2MgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSAiZmFzdC1kdG9hLmNjIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyOUQx
M0ZBRjZFRjAwQjdEQzBEIC8qIGZhc3QtZHRvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSAiZmFzdC1kdG9hLmgiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJD
NTI5RTEzRkFGNkVGMDBCN0RDMEQgLyogZml4ZWQtZHRvYS5jYyAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9ICJmaXhlZC1kdG9hLmNjIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQzIyQzUyOUYxM0ZBRjZFRjAwQjdEQzBEIC8qIGZpeGVkLWR0b2EuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gImZpeGVkLWR0b2EuaCI7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUMyMkM1MkEwMTNGQUY2RUYwMEI3REMwRCAvKiBMSUNFTlNFICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgcGF0aCA9IExJQ0VOU0U7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUMyMkM1MkExMTNGQUY2RUYwMEI3REMwRCAvKiBNYWtlZmlsZSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUubWFrZTsgcGF0aCA9IE1ha2VmaWxlOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
MjJDNTJBMjEzRkFGNkVGMDBCN0RDMEQgLyogUkVBRE1FICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IFJFQURNRTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyQTMxM0ZBRjZFRjAw
QjdEQzBEIC8qIFNDb25zY3JpcHQgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU0NvbnNjcmlwdDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyQTQxM0ZBRjZFRjAwQjdEQzBEIC8q
IFNDb25zdHJ1Y3QgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU0NvbnN0cnVjdDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyQjkxM0ZBRjZFRjAwQjdEQzBEIC8qIHN0cnRvZC5j
YyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHN0cnRvZC5jYzsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyQkExM0ZBRjZFRjAwQjdEQzBEIC8qIHN0cnRv
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBzdHJ0b2QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyQkIxM0ZBRjZFRjAwQjdEQzBEIC8qIHV0aWxzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHV0aWxzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUMyRUU1OTlEMTNGQzk3MkEwMDlDRUFGRSAvKiBEZWNpbWFsTnVtYmVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlY2ltYWxOdW1iZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMkVFNTk5RTEzRkM5NzJBMDA5Q0VB
RkUgLyogRGVjaW1hbE51bWJlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBE
ZWNpbWFsTnVtYmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQyMTIwMjI4MEFE
NDMxMEMwMEVENzlCNiAvKiBEYXRlQ29udmVyc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRGF0ZUNvbnZlcnNpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlEMjEyMDIyOTBBRDQzMTBDMDBFRDc5QjYgLyogRGF0ZUNvbnZlcnNpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGVDb252ZXJzaW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQ3NUFGNTk1MTJGOENCOTUwMEZDMEFERiAvKiBEeW5h
bWljQW5ub3RhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RHluYW1pY0Fubm90YXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2
NjQsNiArMTcwNiw5IEBACiAJCTY1MTYyRUYxMDhFNkEyMUMwMDc1NTZDRCAvKiB3dGYgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUMyRUU1OTlEMTNGQzk3
MkEwMDlDRUFGRSAvKiBEZWNpbWFsTnVtYmVyLmNwcCAqLywKKwkJCQlDMkVFNTk5RTEzRkM5NzJB
MDA5Q0VBRkUgLyogRGVjaW1hbE51bWJlci5oICovLAorCQkJCUMyMkM1MjQ4MTNGQUY2RUYwMEI3
REMwRCAvKiBkdG9hICovLAogCQkJCTA2RDM1OEEwMERBQUQ5QzQwMDNCMTc0RSAvKiBtYWMgKi8s
CiAJCQkJODY1NjU3M0UxMTVCRTM1MjAwMjkxRjQwIC8qIHRleHQgKi8sCiAJCQkJRTE5NTY3OEQw
OUU3Q0YxMjAwQjg5RDEzIC8qIHVuaWNvZGUgKi8sCkBAIC0xNjg5LDggKzE3MzQsNiBAQAogCQkJ
CTE4MEI5QUYwMEYxNkM1NjkwMDlCREJDNSAvKiBDdXJyZW50VGltZS5oICovLAogCQkJCTQxMzU5
Q0Y0MEZERDg5Q0IwMDIwNjE4MCAvKiBEYXRlTWF0aC5jcHAgKi8sCiAJCQkJNDEzNTlDRjUwRkRE
ODlDQjAwMjA2MTgwIC8qIERhdGVNYXRoLmggKi8sCi0JCQkJMEYyOTQ3OUIxMjZFNjk4QzAwQjNB
QkY1IC8qIERlY2ltYWxOdW1iZXIuY3BwICovLAotCQkJCTg2MkFGNEI1MTIyMzlDN0IwMDI0RTVC
OCAvKiBEZWNpbWFsTnVtYmVyLmggKi8sCiAJCQkJNTEzNUZBRDUxMkQyNjg1NjAwM0MwODNCIC8q
IERlY29kZXIuaCAqLywKIAkJCQk1MTg2MTExRDBDQzgyNDgzMDA4MTQxMkIgLyogRGVxdWUuaCAq
LywKIAkJCQk5MzhDNEY2QjBDQTA2QkNFMDBEOTMxMEEgLyogRGlzYWxsb3dDVHlwZS5oICovLApA
QCAtMjE5NCw2ICsyMjM3LDM3IEBACiAJCQlwYXRoID0gYnl0ZWNvZGU7CiAJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwogCQl9OworCQlDMjJDNTI0ODEzRkFGNkVGMDBCN0RDMEQgLyogZHRvYSAq
LyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQzIyQzUyOTAx
M0ZBRjZFRjAwQjdEQzBEIC8qIGJpZ251bS1kdG9hLmNjICovLAorCQkJCUMyMkM1MjkxMTNGQUY2
RUYwMEI3REMwRCAvKiBiaWdudW0tZHRvYS5oICovLAorCQkJCUMyMkM1MjkyMTNGQUY2RUYwMEI3
REMwRCAvKiBiaWdudW0uY2MgKi8sCisJCQkJQzIyQzUyOTMxM0ZBRjZFRjAwQjdEQzBEIC8qIGJp
Z251bS5oICovLAorCQkJCUMyMkM1Mjk0MTNGQUY2RUYwMEI3REMwRCAvKiBjYWNoZWQtcG93ZXJz
LmNjICovLAorCQkJCUMyMkM1Mjk1MTNGQUY2RUYwMEI3REMwRCAvKiBjYWNoZWQtcG93ZXJzLmgg
Ki8sCisJCQkJQzIyQzUyOTYxM0ZBRjZFRjAwQjdEQzBEIC8qIENPUFlJTkcgKi8sCisJCQkJQzIy
QzUyOTcxM0ZBRjZFRjAwQjdEQzBEIC8qIGRpeS1mcC5jYyAqLywKKwkJCQlDMjJDNTI5ODEzRkFG
NkVGMDBCN0RDMEQgLyogZGl5LWZwLmggKi8sCisJCQkJQzIyQzUyOTkxM0ZBRjZFRjAwQjdEQzBE
IC8qIGRvdWJsZS1jb252ZXJzaW9uLmNjICovLAorCQkJCUMyMkM1MjlBMTNGQUY2RUYwMEI3REMw
RCAvKiBkb3VibGUtY29udmVyc2lvbi5oICovLAorCQkJCUMyMkM1MjlCMTNGQUY2RUYwMEI3REMw
RCAvKiBkb3VibGUuaCAqLywKKwkJCQlDMjJDNTI5QzEzRkFGNkVGMDBCN0RDMEQgLyogZmFzdC1k
dG9hLmNjICovLAorCQkJCUMyMkM1MjlEMTNGQUY2RUYwMEI3REMwRCAvKiBmYXN0LWR0b2EuaCAq
LywKKwkJCQlDMjJDNTI5RTEzRkFGNkVGMDBCN0RDMEQgLyogZml4ZWQtZHRvYS5jYyAqLywKKwkJ
CQlDMjJDNTI5RjEzRkFGNkVGMDBCN0RDMEQgLyogZml4ZWQtZHRvYS5oICovLAorCQkJCUMyMkM1
MkEwMTNGQUY2RUYwMEI3REMwRCAvKiBMSUNFTlNFICovLAorCQkJCUMyMkM1MkExMTNGQUY2RUYw
MEI3REMwRCAvKiBNYWtlZmlsZSAqLywKKwkJCQlDMjJDNTJBMjEzRkFGNkVGMDBCN0RDMEQgLyog
UkVBRE1FICovLAorCQkJCUMyMkM1MkEzMTNGQUY2RUYwMEI3REMwRCAvKiBTQ29uc2NyaXB0ICov
LAorCQkJCUMyMkM1MkE0MTNGQUY2RUYwMEI3REMwRCAvKiBTQ29uc3RydWN0ICovLAorCQkJCUMy
MkM1MkI5MTNGQUY2RUYwMEI3REMwRCAvKiBzdHJ0b2QuY2MgKi8sCisJCQkJQzIyQzUyQkExM0ZB
RjZFRjAwQjdEQzBEIC8qIHN0cnRvZC5oICovLAorCQkJCUMyMkM1MkJCMTNGQUY2RUYwMEI3REMw
RCAvKiB1dGlscy5oICovLAorCQkJKTsKKwkJCXBhdGggPSBkdG9hOworCQkJc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsKKwkJfTsKIAkJRTE5NTY3OEQwOUU3Q0YxMjAwQjg5RDEzIC8qIHVuaWNvZGUg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMjI0NSw4ICsy
MzE5LDEwIEBACiAJCQkJODZEM0IyQzQxMDE1NkJERTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODZBREQxNDUwRkRERUE5ODAwMDZFRUMyIC8qIEFSTXY3QXNz
ZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFNjBFMTZGNUNEMDBCMzQ0NjAgLyog
QXJyYXlDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzIyQjMxQjkxNDA1NzdENzAw
REI0NzVBIC8qIFNhbXBsaW5nQ291bnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDODE1MEEx
NDA0M0JGNTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGOTYzQjM4MTNGQzZGRTkwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUMyRUU1OUEwMTNGQzk3M0YwMDlDRUFGRSAvKiBEZWNpbWFsTnVtYmVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzNFNzBFMTZGNUNEMDBCMzQ0NjAgLyogQXJyYXlQcm90b3R5
cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNTI0MEUxNkZDOEEwMEIzNDQ2MCAvKiBBcnJh
eVByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U5MEUxNkY1Q0QwMEIz
NDQ2MCAvKiBBU0NJSUNUeXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTIyOTYsNyArMjM3Miw2IEBA
CiAJCQkJQkMxOEMzRkEwRTE2RjVDRDAwQjM0NDYwIC8qIERlYnVnZ2VyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzMxMzU2NDBGMzAyRkEzMDAzREZEM0EgLyogRGVidWdnZXJBY3RpdmF0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNGQjBFMTZGNUNEMDBCMzQ0NjAgLyogRGVidWdnZXJD
YWxsRnJhbWUuaCBpbiBIZWFkZXJzICovLAotCQkJCTg2MkFGNEI2MTIyMzlDN0IwMDI0RTVCOCAv
KiBEZWNpbWFsTnVtYmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTM1RkFGMjEyRDI2QUNFMDAz
QzA4M0IgLyogRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRkMwRTE2RjVDRDAw
QjM0NDYwIC8qIERlcXVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDQTRGMTEzMkVBQTZEMDAy
QjJBRDcgLyogREZHQWxpYXNUcmFja2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTI0ODEsNyArMjU1
NiwxNiBAQAogCQkJCTkwRDM0NjlDMEUyODUyODAwMDk0OTJFRSAvKiBSZWZDb3VudGVkTGVha0Nv
dW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDU4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBS
ZWZQdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDU5MEUxNkY1Q0QwMEIzNDQ2MCAvKiBS
ZWZQdHJIYXNoTWFwLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjc3MDA5MDE0MDJGREU0MDA3OEVC
MzkgLyogU2FtcGxpbmdDb3VudGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlDMjJDNTJGMjEzRkFG
NkVGMDBCN0RDMEQgLyogYmlnbnVtLWR0b2EuaCBpbiBIZWFkZXJzICovLAorCQkJCUMyMkM1MkY0
MTNGQUY2RUYwMEI3REMwRCAvKiBiaWdudW0uaCBpbiBIZWFkZXJzICovLAorCQkJCUMyMkM1MkY2
MTNGQUY2RUYwMEI3REMwRCAvKiBjYWNoZWQtcG93ZXJzLmggaW4gSGVhZGVycyAqLywKKwkJCQlD
MjJDNTJGODEzRkFGNkVGMDBCN0RDMEQgLyogZGl5LWZwLmggaW4gSGVhZGVycyAqLywKKwkJCQlD
MjJDNTJGQTEzRkFGNkVGMDBCN0RDMEQgLyogZG91YmxlLWNvbnZlcnNpb24uaCBpbiBIZWFkZXJz
ICovLAorCQkJCUMyMkM1MkZCMTNGQUY2RUYwMEI3REMwRCAvKiBkb3VibGUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUMyMkM1MkZEMTNGQUY2RUYwMEI3REMwRCAvKiBmYXN0LWR0b2EuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUMyMkM1MkZGMTNGQUY2RUYwMEI3REMwRCAvKiBmaXhlZC1kdG9hLmggaW4g
SGVhZGVycyAqLywKKwkJCQlDMjJDNTMxNDEzRkFGNkVGMDBCN0RDMEQgLyogc3RydG9kLmggaW4g
SGVhZGVycyAqLywKKwkJCQlDMjJDNTMxNTEzRkFGNkVGMDBCN0RDMEQgLyogdXRpbHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMThDNDVBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWdFeHAuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUExNzEyQjNGMTFDN0IyMjgwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyQzIwRTE3MDZBNzAwMkM3RTgyIC8qIFJlZ0V4cENv
bnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTI4NTcsNiArMjk0MSw3IEBACiAJCQlmaWxl
cyA9ICgKIAkJCQkwRkM4MTUwQjE0MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9y
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc3MDA5MjE0MDJGRjNDMDA3OEVCMzkgLyogU2Ft
cGxpbmdDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUMyRUU1OUExMTNGQzk3NjgwMDlD
RUFGRSAvKiBEZWNpbWFsTnVtYmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUJEMTA3
RUMzNzYwMDQyN0E0OCAvKiBBcmdMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUJF
MTA3RUMzNzYwMDQyN0E0OCAvKiBBcmd1bWVudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZE
M0IyQzMxMDE1NkJERTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTI4OTAsNyArMjk3NSw2IEBACiAJCQkJMTQyODA4MjMxMDdFQzAyQzAwMTNFN0IyIC8qIERl
YnVnZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMzEzNTY1MEYzMDJGQTMwMDNERkQzQSAv
KiBEZWJ1Z2dlckFjdGl2YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ5NTU5RUUwRERD
RERGNzAwNjQ4MDg3IC8qIERlYnVnZ2VyQ2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CTBGMjk0NzlDMTI2RTY5OEMwMEIzQUJGNSAvKiBEZWNpbWFsTnVtYmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTg2RUM5REM0MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkVDOURDNzEzMjhERjgyMDAyQjJBRDcgLyogREZHR3Jh
cGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQzkxMzI4REY4MjAwMkIyQUQ3IC8qIERG
R0pJVENvZGVHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMDUwLDYgKzMxMzQsMTQg
QEAKIAkJCQkxNEQyRjNEQTEzOUY0QkUyMDA0OTEwMzEgLyogTmV3U3BhY2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQyQTFEODMxM0ExOUM4NDAwOURBNUZFIC8qIE9sZFNwYWNlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0QkE3QTk3MTNBQURGRjgwMDVCN0MyQyAvKiBIZWFwLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUMyMkM1MkYxMTNGQUY2RUYwMEI3REMwRCAvKiBiaWdudW0tZHRvYS5j
YyBpbiBTb3VyY2VzICovLAorCQkJCUMyMkM1MkYzMTNGQUY2RUYwMEI3REMwRCAvKiBiaWdudW0u
Y2MgaW4gU291cmNlcyAqLywKKwkJCQlDMjJDNTJGNTEzRkFGNkVGMDBCN0RDMEQgLyogY2FjaGVk
LXBvd2Vycy5jYyBpbiBTb3VyY2VzICovLAorCQkJCUMyMkM1MkY3MTNGQUY2RUYwMEI3REMwRCAv
KiBkaXktZnAuY2MgaW4gU291cmNlcyAqLywKKwkJCQlDMjJDNTJGOTEzRkFGNkVGMDBCN0RDMEQg
LyogZG91YmxlLWNvbnZlcnNpb24uY2MgaW4gU291cmNlcyAqLywKKwkJCQlDMjJDNTJGQzEzRkFG
NkVGMDBCN0RDMEQgLyogZmFzdC1kdG9hLmNjIGluIFNvdXJjZXMgKi8sCisJCQkJQzIyQzUyRkUx
M0ZBRjZFRjAwQjdEQzBEIC8qIGZpeGVkLWR0b2EuY2MgaW4gU291cmNlcyAqLywKKwkJCQlDMjJD
NTMxMzEzRkFGNkVGMDBCN0RDMEQgLyogc3RydG9kLmNjIGluIFNvdXJjZXMgKi8sCiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3Bw
CmluZGV4IDI2NTM5NmYzYmRkZmVhMjMyNmZkZjk2MjBhY2FkZDdmOTQxM2Y0MGYuLjQ0OWU3ZGI3
ODgxYjY1OWY1NzZkMzQ0Zjk4NmFlNTIxNzUxZDM0MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCkBAIC0zMCw3ICsz
MCw3IEBACiAjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgogCiAjaW5jbHVkZSAiSGVh
cC5oIgotI2luY2x1ZGUgImR0b2EuaCIKKyNpbmNsdWRlIDx3dGYvZHRvYS9jYWNoZWQtcG93ZXJz
Lmg+CiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiVVN0cmluZy5oIgpAQCAtNDgsNiArNDgsNyBAQCBzdGF0aWMgcHRocmVhZF9v
bmNlX3QgaW5pdGlhbGl6ZVRocmVhZGluZ0tleU9uY2UgPSBQVEhSRUFEX09OQ0VfSU5JVDsKIAog
c3RhdGljIHZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZ09uY2UoKQogeworICAgIGRvdWJsZV9jb252
ZXJzaW9uOjppbml0aWFsaXplKCk7CiAgICAgV1RGOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CiAj
aWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQogICAgIFdyaXRlQmFycmllckNvdW50
ZXJzOjppbml0aWFsaXplKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9OdW1iZXJQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TnVtYmVyUHJvdG90eXBlLmNwcAppbmRleCA2NzlmNzQ3OWRlYzdlZWI1NDNlZTllNjIzMzNmMDZm
ODNkNDllZjRkLi5kNzQ0MTYyNmUxMTFhMmJjYzFkM2ExNjA2YzgxNTRhYmEwYTBjYzA2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5jcHAK
QEAgLTMwLDkgKzMwLDExIEBACiAjaW5jbHVkZSAiVWludDE2V2l0aEZyYWN0aW9uLmgiCiAjaW5j
bHVkZSAiZHRvYS5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3Rm
L0RlY2ltYWxOdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5oPgor
Cit1c2luZyBuYW1lc3BhY2UgV1RGOjpkb3VibGVfY29udmVyc2lvbjsKIAogbmFtZXNwYWNlIEpT
QyB7CiAKQEAgLTMzOSwxMiArMzQxLDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
bnVtYmVyUHJvdG9GdW5jVG9FeHBvbmVudGlhbChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgVVN0cmluZzo6bnVtYmVyKHgpKSk7
CiAKICAgICAvLyBSb3VuZCBpZiB0aGUgYXJndW1lbnQgaXMgbm90IHVuZGVmaW5lZCwgYWx3YXlz
IGZvcm1hdCBhcyBleHBvbmVudGlhbC4KLSAgICBOdW1iZXJUb1N0cmluZ0J1ZmZlciBidWZmZXI7
Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaXNVbmRlZmluZWQKLSAgICAgICAgPyBEZWNpbWFsTnVt
YmVyKHgpLnRvU3RyaW5nRXhwb25lbnRpYWwoYnVmZmVyLCBXVEY6Ok51bWJlclRvU3RyaW5nQnVm
ZmVyTGVuZ3RoKQotICAgICAgICA6IERlY2ltYWxOdW1iZXIoeCwgUm91bmRpbmdTaWduaWZpY2Fu
dEZpZ3VyZXMsIGRlY2ltYWxQbGFjZXNJbkV4cG9uZW50ICsgMSkudG9TdHJpbmdFeHBvbmVudGlh
bChidWZmZXIsIFdURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgpOwotCi0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBVU3RyaW5nKGJ1ZmZlciwgbGVuZ3RoKSkp
OworICAgIGNoYXIgYnVmZmVyW1dURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGhdOworICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcihidWZmZXIsIFdURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJM
ZW5ndGgpOworICAgIGNvbnN0IERvdWJsZVRvU3RyaW5nQ29udmVydGVyJiBjb252ZXJ0ZXIgPSBE
b3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6RWNtYVNjcmlwdENvbnZlcnRlcigpOworICAgIGJ1aWxk
ZXIuUmVzZXQoKTsKKyAgICBpc1VuZGVmaW5lZAorICAgICAgICA/IGNvbnZlcnRlci5Ub0V4cG9u
ZW50aWFsKHgsIC0xLCAmYnVpbGRlcikKKyAgICAgICAgOiBjb252ZXJ0ZXIuVG9FeHBvbmVudGlh
bCh4LCBkZWNpbWFsUGxhY2VzSW5FeHBvbmVudCwgJmJ1aWxkZXIpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgVVN0cmluZyhidWlsZGVyLkZpbmFsaXplKCkpKSk7
CiB9CiAKIC8vIHRvRml4ZWQgY29udmVydHMgYSBudW1iZXIgdG8gYSBzdHJpbmcsIGFsd2F5cyBm
b3JtYXR0aW5nIGFzIGFuIGEgZGVjaW1hbCBmcmFjdGlvbi4KQEAgLTM3NiwxMCArMzgwLDEyIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9GaXhlZChFeGVj
U3RhdGUqIGV4ZWMpCiAgICAgLy8gaGFuZGxlZCBieSBudW1iZXJUb1N0cmluZy4KICAgICBBU1NF
UlQoaXNmaW5pdGUoeCkpOwogCi0gICAgLy8gQ29udmVydCB0byBkZWNpbWFsIHdpdGggcm91bmRp
bmcsIGFuZCBmb3JtYXQgYXMgZGVjaW1hbC4KLSAgICBOdW1iZXJUb1N0cmluZ0J1ZmZlciBidWZm
ZXI7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gRGVjaW1hbE51bWJlcih4LCBSb3VuZGluZ0RlY2lt
YWxQbGFjZXMsIGRlY2ltYWxQbGFjZXMpLnRvU3RyaW5nRGVjaW1hbChidWZmZXIsIFdURjo6TnVt
YmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNT
dHJpbmcoZXhlYywgVVN0cmluZyhidWZmZXIsIGxlbmd0aCkpKTsKKyAgICBjaGFyIGJ1ZmZlcltX
VEY6Ok51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoXTsKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxk
ZXIoYnVmZmVyLCBXVEY6Ok51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoKTsKKyAgICBjb25zdCBE
b3VibGVUb1N0cmluZ0NvbnZlcnRlciYgY29udmVydGVyID0gRG91YmxlVG9TdHJpbmdDb252ZXJ0
ZXI6OkVjbWFTY3JpcHRDb252ZXJ0ZXIoKTsKKyAgICBidWlsZGVyLlJlc2V0KCk7CisgICAgY29u
dmVydGVyLlRvRml4ZWQoeCwgZGVjaW1hbFBsYWNlcywgJmJ1aWxkZXIpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgVVN0cmluZyhidWlsZGVyLkZpbmFsaXplKCkp
KSk7CiB9CiAKIC8vIHRvUHJlY2lzaW9uIGNvbnZlcnRzIGEgbnVtYmVyIHRvIGEgc3RyaW5nLCB0
YWtlaW5nIGFuIGFyZ3VtZW50IHNwZWNpZnlpbmcgYQpAQCAtNDEyLDE3ICs0MTgsMTIgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb1ByZWNpc2lvbihFeGVj
U3RhdGUqIGV4ZWMpCiAgICAgaWYgKCFpc2Zpbml0ZSh4KSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBVU3RyaW5nOjpudW1iZXIoeCkpKTsKIAotICAgIC8v
IENvbnZlcnQgdG8gZGVjaW1hbCB3aXRoIHJvdW5kaW5nLgotICAgIERlY2ltYWxOdW1iZXIgbnVt
YmVyKHgsIFJvdW5kaW5nU2lnbmlmaWNhbnRGaWd1cmVzLCBzaWduaWZpY2FudEZpZ3VyZXMpOwot
ICAgIC8vIElmIG51bWJlciBpcyBpbiB0aGUgcmFuZ2UgMWUtNiA8PSB4IDwgcG93KDEwLCBzaWdu
aWZpY2FudEZpZ3VyZXMpIHRoZW4gZm9ybWF0Ci0gICAgLy8gYXMgZGVjaW1hbC4gT3RoZXJ3aXNl
LCBmb3JtYXQgdGhlIG51bWJlciBhcyBhbiBleHBvbmVudGlhbC4gRGVjaW1hbCBmb3JtYXQKLSAg
ICAvLyBkZW1hbmRzIGEgbWluaW11bSBvZiAoZXhwb25lbnQgKyAxKSBkaWdpdHMgdG8gcmVwcmVz
ZW50IGEgbnVtYmVyLCBmb3IgZXhhbXBsZQotICAgIC8vIDEyMzQgKDEuMjM0ZSszKSByZXF1aXJl
cyA0IGRpZ2l0cy4gKFNlZSBFQ01BLTI2MiAxNS43LjQuNy4xMC5jKQotICAgIE51bWJlclRvU3Ry
aW5nQnVmZmVyIGJ1ZmZlcjsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBudW1iZXIuZXhwb25lbnQo
KSA+PSAtNiAmJiBudW1iZXIuZXhwb25lbnQoKSA8IHNpZ25pZmljYW50RmlndXJlcwotICAgICAg
ICA/IG51bWJlci50b1N0cmluZ0RlY2ltYWwoYnVmZmVyLCBXVEY6Ok51bWJlclRvU3RyaW5nQnVm
ZmVyTGVuZ3RoKQotICAgICAgICA6IG51bWJlci50b1N0cmluZ0V4cG9uZW50aWFsKGJ1ZmZlciwg
V1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1N0cmluZyhleGVjLCBVU3RyaW5nKGJ1ZmZlciwgbGVuZ3RoKSkpOworICAgIGNoYXIg
YnVmZmVyW1dURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGhdOworICAgIFN0cmluZ0J1aWxk
ZXIgYnVpbGRlcihidWZmZXIsIFdURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgpOworICAg
IGNvbnN0IERvdWJsZVRvU3RyaW5nQ29udmVydGVyJiBjb252ZXJ0ZXIgPSBEb3VibGVUb1N0cmlu
Z0NvbnZlcnRlcjo6RWNtYVNjcmlwdENvbnZlcnRlcigpOworICAgIGJ1aWxkZXIuUmVzZXQoKTsK
KyAgICBjb252ZXJ0ZXIuVG9QcmVjaXNpb24oeCwgc2lnbmlmaWNhbnRGaWd1cmVzLCAmYnVpbGRl
cik7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBVU3RyaW5nKGJ1
aWxkZXIuRmluYWxpemUoKSkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBu
dW1iZXJQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5nLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1VTdHJpbmcuY3BwCmluZGV4IGMxNGYzMTk5ZjQwN2Y0N2Y3OTVmNTFiYjky
MGU2YzA5ZjNjM2E2ZmQuLmI3OGU2ZjFhY2M3ODEwY2IyNmU4OTg0OGFhNTQ3ZDhmZGEyYmJmNjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuY3BwCkBAIC0zNSwxMCAr
MzUsMTAgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5o
PgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0RlY2ltYWxOdW1i
ZXIuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdF
eHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL2R0b2EuaD4K
ICNpbmNsdWRlIDx3dGYvdW5pY29kZS9VVEY4Lmg+CiAKICNpZiBIQVZFKFNUUklOR1NfSCkKQEAg
LTE5Niw4ICsxOTYsNyBAQCBVU3RyaW5nIFVTdHJpbmc6Om51bWJlcihsb25nIGwpCiBVU3RyaW5n
IFVTdHJpbmc6Om51bWJlcihkb3VibGUgZCkKIHsKICAgICBOdW1iZXJUb1N0cmluZ0J1ZmZlciBi
dWZmZXI7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gbnVtYmVyVG9TdHJpbmcoZCwgYnVmZmVyKTsK
LSAgICByZXR1cm4gVVN0cmluZyhidWZmZXIsIGxlbmd0aCk7CisgICAgcmV0dXJuIFVTdHJpbmco
bnVtYmVyVG9TdHJpbmcoZCwgYnVmZmVyKSk7CiB9CiAKIFVTdHJpbmcgVVN0cmluZzo6c3Vic3Ry
aW5nU2hhcmluZ0ltcGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMudHh0IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3RzLnR4dAppbmRleCBjNmRkYTEzOWM0ZWMz
NDRjOTdjM2IzZTczZmYwNDFlZjg5MzIyZDJkLi5jMDA0NDQwMGJmMGI3NDIyM2YzNDhjMDIxMjcz
MjQ5M2QzZmYwZGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NNYWtl
TGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQK
QEAgLTk5LDYgKzk5LDI4IEBAIFNFVChXVEZfSEVBREVSUwogICAgIFdURlRocmVhZERhdGEuaAog
ICAgIGR0b2EuaAogCisgICAgZHRvYS9iaWdudW0tZHRvYS5oCisgICAgZHRvYS9iaWdudW0uaAor
ICAgIGR0b2EvY2FjaGVkLXBvd2Vycy5oCisgICAgZHRvYS9kaXktZnAuaAorICAgIGR0b2EvZG91
YmxlLWNvbnZlcnNpb24uaAorICAgIGR0b2EvZG91YmxlLmgKKyAgICBkdG9hL2Zhc3QtZHRvYS5o
CisgICAgZHRvYS9maXhlZC1kdG9hLmgKKyAgICBkdG9hL3N0cnRvZC5oCisgICAgZHRvYS91dGls
cy5oCisKKyAgICBkdG9hL2JpZ251bS1kdG9hLmgKKyAgICBkdG9hL2JpZ251bS5oCisgICAgZHRv
YS9jYWNoZWQtcG93ZXJzLmgKKyAgICBkdG9hL2RpeS1mcC5oCisgICAgZHRvYS9kb3VibGUtY29u
dmVyc2lvbi5oCisgICAgZHRvYS9kb3VibGUuaAorICAgIGR0b2EvZmFzdC1kdG9hLmgKKyAgICBk
dG9hL2ZpeGVkLWR0b2EuaAorICAgIGR0b2Evc3RydG9kLmgKKyAgICBkdG9hL3V0aWxzLmgKKwog
ICAgIHRleHQvQXRvbWljU3RyaW5nLmgKICAgICB0ZXh0L0F0b21pY1N0cmluZ0ltcGwuaAogICAg
IHRleHQvQ1N0cmluZy5oCkBAIC0xNDAsNiArMTYyLDI0IEBAIFNFVChXVEZfU09VUkNFUwogICAg
IFdURlRocmVhZERhdGEuY3BwCiAgICAgZHRvYS5jcHAKIAorICAgIGR0b2EvYmlnbnVtLWR0b2Eu
Y2MKKyAgICBkdG9hL2JpZ251bS5jYworICAgIGR0b2EvY2FjaGVkLXBvd2Vycy5jYworICAgIGR0
b2EvZGl5LWZwLmNjCisgICAgZHRvYS9kb3VibGUtY29udmVyc2lvbi5jYworICAgIGR0b2EvZmFz
dC1kdG9hLmNjCisgICAgZHRvYS9maXhlZC1kdG9hLmNjCisgICAgZHRvYS9zdHJ0b2QuY2MKKwor
ICAgIGR0b2EvYmlnbnVtLWR0b2EuY2MKKyAgICBkdG9hL2JpZ251bS5jYworICAgIGR0b2EvY2Fj
aGVkLXBvd2Vycy5jYworICAgIGR0b2EvZGl5LWZwLmNjCisgICAgZHRvYS9kb3VibGUtY29udmVy
c2lvbi5jYworICAgIGR0b2EvZmFzdC1kdG9hLmNjCisgICAgZHRvYS9maXhlZC1kdG9hLmNjCisg
ICAgZHRvYS9zdHJ0b2QuY2MKKwogICAgIHRleHQvQXRvbWljU3RyaW5nLmNwcAogICAgIHRleHQv
Q1N0cmluZy5jcHAKICAgICB0ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCkBAIC0xNTQsNiArMTk0LDcg
QEAgU0VUKFdURl9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7SkFWQVNDUklQVENPUkVfRElS
fSIKICAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L3d0ZiIKICAgICAiJHtKQVZBU0NSSVBUQ09S
RV9ESVJ9L3d0Zi91bmljb2RlIgorICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vd3RmL2R0b2Ei
CiAgICAgIiR7SmF2YVNjcmlwdENvcmVfSU5DTFVERV9ESVJFQ1RPUklFU30iCiApCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL2R0b2EuY3BwCmluZGV4IDE0NjZkZjczNjgwODk1ZmI3ZDY3MmY2NzhhNzQy
OTUzZDljNmQ1YWQuLjk3ZDU3ZjMxYzllM2MzNDIxN2Q5NGYwNGQ4MjQxNjRlY2M5MjM5OTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hLmNwcApAQCAtNzUsMTIgKzc1LDEyIEBACiAjaW5jbHVk
ZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL0Fsd2F5c0lubGluZS5oPgogI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0RlY2ltYWxOdW1iZXIuaD4KICNpbmNsdWRl
IDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5o
PgogCiAjaWYgQ09NUElMRVIoTVNWQykKICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MjQ0KQpA
QCAtMTgwMiwzMyArMTgwMiwxMyBAQCB2b2lkIGR0b2FSb3VuZERQKER0b2FCdWZmZXIgcmVzdWx0
LCBkb3VibGUgZGQsIGludCBuZGlnaXRzLCBib29sJiBzaWduLCBpbnQmIGV4cAogICAgIGR0b2E8
ZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZT4ocmVzdWx0LCBkZCwgbmRpZ2l0cywgc2lnbiwgZXhw
b25lbnQsIHByZWNpc2lvbik7CiB9CiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgY29weUFz
Y2lpVG9VVEYxNihVQ2hhciogbmV4dCwgY29uc3QgY2hhciogc3JjLCB1bnNpZ25lZCBzaXplKQot
ewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgICpuZXh0
KysgPSAqc3JjKys7Ci19CiAKLXVuc2lnbmVkIG51bWJlclRvU3RyaW5nKGRvdWJsZSBkLCBOdW1i
ZXJUb1N0cmluZ0J1ZmZlciBidWZmZXIpCitjb25zdCBjaGFyICpudW1iZXJUb1N0cmluZyhkb3Vi
bGUgZCwgTnVtYmVyVG9TdHJpbmdCdWZmZXIgYnVmZmVyKQogewotICAgIC8vIEhhbmRsZSBOYU4g
YW5kIEluZmluaXR5LgotICAgIGlmICghaXNmaW5pdGUoZCkpIHsKLSAgICAgICAgaWYgKGlzbmFu
KGQpKSB7Ci0gICAgICAgICAgICBjb3B5QXNjaWlUb1VURjE2KGJ1ZmZlciwgIk5hTiIsIDMpOwot
ICAgICAgICAgICAgcmV0dXJuIDM7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGQgPiAwKSB7Ci0g
ICAgICAgICAgICBjb3B5QXNjaWlUb1VURjE2KGJ1ZmZlciwgIkluZmluaXR5IiwgOCk7Ci0gICAg
ICAgICAgICByZXR1cm4gODsKLSAgICAgICAgfQotICAgICAgICBjb3B5QXNjaWlUb1VURjE2KGJ1
ZmZlciwgIi1JbmZpbml0eSIsIDkpOwotICAgICAgICByZXR1cm4gOTsKLSAgICB9Ci0KLSAgICAv
LyBDb252ZXJ0IHRvIGRlY2ltYWwgd2l0aCByb3VuZGluZy4KLSAgICBEZWNpbWFsTnVtYmVyIG51
bWJlcihkKTsKLSAgICByZXR1cm4gbnVtYmVyLmV4cG9uZW50KCkgPj0gLTYgJiYgbnVtYmVyLmV4
cG9uZW50KCkgPCAyMQotICAgICAgICA/IG51bWJlci50b1N0cmluZ0RlY2ltYWwoYnVmZmVyLCBO
dW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCkKLSAgICAgICAgOiBudW1iZXIudG9TdHJpbmdFeHBv
bmVudGlhbChidWZmZXIsIE51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoKTsKKyAgICBkb3VibGVf
Y29udmVyc2lvbjo6U3RyaW5nQnVpbGRlciBidWlsZGVyKGJ1ZmZlciwgTnVtYmVyVG9TdHJpbmdC
dWZmZXJMZW5ndGgpOworICAgIGNvbnN0IGRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGVUb1N0cmlu
Z0NvbnZlcnRlciYgY29udmVydGVyID0gZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZVRvU3RyaW5n
Q29udmVydGVyOjpFY21hU2NyaXB0Q29udmVydGVyKCk7CisgICAgY29udmVydGVyLlRvU2hvcnRl
c3QoZCwgJmJ1aWxkZXIpOworICAgIHJldHVybiBidWlsZGVyLkZpbmFsaXplKCk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9k
dG9hLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EuaAppbmRleCAzOTI0YTFjYzQw
NWRiMjkzYjAxZjZkNGJkYWU2NTc1OTUyNTgxNzJjLi43MTk5MTIxMTExZDkzZWRlOTAxYmNhNzhl
YzEyZmJjMjMzYWFhMjNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0
b2EuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EuaApAQCAtMjEsNiArMjEs
NyBAQAogI2lmbmRlZiBXVEZfZHRvYV9oCiAjZGVmaW5lIFdURl9kdG9hX2gKIAorI2luY2x1ZGUg
PHd0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5p
Y29kZS5oPgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTI4LDI0ICsyOSwyNiBAQCBjbGFzcyBNdXRl
eDsKIAogZXh0ZXJuIFdURjo6TXV0ZXgqIHNfZHRvYVA1TXV0ZXg7CiAKLS8vIHMwMDogaW5wdXQg
c3RyaW5nLiBNdXN0IG5vdCBiZSAwIGFuZCBtdXN0IGJlIHRlcm1pbmF0ZWQgYnkgMC4KLS8vIHNl
OiAqc2Ugd2lsbCBoYXZlIHRoZSBsYXN0IGNvbnN1bWVkIGNoYXJhY3RlciBwb3NpdGlvbiArIDEu
Ci1kb3VibGUgc3RydG9kKGNvbnN0IGNoYXIqIHMwMCwgY2hhcioqIHNlKTsKLQogdHlwZWRlZiBj
aGFyIER0b2FCdWZmZXJbODBdOwogCiB2b2lkIGR0b2EoRHRvYUJ1ZmZlciByZXN1bHQsIGRvdWJs
ZSBkZCwgYm9vbCYgc2lnbiwgaW50JiBleHBvbmVudCwgdW5zaWduZWQmIHByZWNpc2lvbik7CiB2
b2lkIGR0b2FSb3VuZFNGKER0b2FCdWZmZXIgcmVzdWx0LCBkb3VibGUgZGQsIGludCBuZGlnaXRz
LCBib29sJiBzaWduLCBpbnQmIGV4cG9uZW50LCB1bnNpZ25lZCYgcHJlY2lzaW9uKTsKIHZvaWQg
ZHRvYVJvdW5kRFAoRHRvYUJ1ZmZlciByZXN1bHQsIGRvdWJsZSBkZCwgaW50IG5kaWdpdHMsIGJv
b2wmIHNpZ24sIGludCYgZXhwb25lbnQsIHVuc2lnbmVkJiBwcmVjaXNpb24pOwogCisvLyBzMDA6
IGlucHV0IHN0cmluZy4gTXVzdCBub3QgYmUgMCBhbmQgbXVzdCBiZSB0ZXJtaW5hdGVkIGJ5IDAu
CisvLyBzZTogKnNlIHdpbGwgaGF2ZSB0aGUgbGFzdCBjb25zdW1lZCBjaGFyYWN0ZXIgcG9zaXRp
b24gKyAxLgorZG91YmxlIHN0cnRvZChjb25zdCBjaGFyKiBzMDAsIGNoYXIqKiBzZSk7CisKIC8v
IFNpemUgPSA4MCBmb3Igc2l6ZW9mKER0b2FCdWZmZXIpICsgc29tZSBzaWduIGJpdHMsIGRlY2lt
YWwgcG9pbnQsICdlJywgZXhwb25lbnQgZGlnaXRzLgogY29uc3QgdW5zaWduZWQgTnVtYmVyVG9T
dHJpbmdCdWZmZXJMZW5ndGggPSA5NjsKLXR5cGVkZWYgVUNoYXIgTnVtYmVyVG9TdHJpbmdCdWZm
ZXJbTnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGhdOwotdW5zaWduZWQgbnVtYmVyVG9TdHJpbmco
ZG91YmxlLCBOdW1iZXJUb1N0cmluZ0J1ZmZlcik7Cit0eXBlZGVmIGNoYXIgTnVtYmVyVG9TdHJp
bmdCdWZmZXJbTnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGhdOwordHlwZWRlZiBVQ2hhciBOdW1i
ZXJUb1VTdHJpbmdCdWZmZXJbTnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGhdOworY29uc3QgY2hh
ciAqbnVtYmVyVG9TdHJpbmcoZG91YmxlLCBOdW1iZXJUb1N0cmluZ0J1ZmZlcik7CiAKIH0gLy8g
bmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6Ok51bWJlclRvU3RyaW5nQnVmZmVyOwordXNpbmcg
V1RGOjpOdW1iZXJUb1VTdHJpbmdCdWZmZXI7CiB1c2luZyBXVEY6Om51bWJlclRvU3RyaW5nOwog
CiAjZW5kaWYgLy8gV1RGX2R0b2FfaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9kdG9hL0NPUFlJTkcgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvQ09QWUlO
RwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45MzM3MThhOWVmOWRhZTRjYjRhZmE1NmU0OTAyMTE3NjBkOGE5NDlmCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL0NPUFlJTkcK
QEAgLTAsMCArMSwyNiBAQAorQ29weXJpZ2h0IDIwMDYtMjAxMSwgdGhlIFY4IHByb2plY3QgYXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorbWV0
OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICAgICAgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAgICAgIGRpc2Ns
YWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZAorICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgICAgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKK0EgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCitP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKK1NQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCitUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKK09GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL2R0b2EvTElDRU5TRSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRv
YS9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkzMzcxOGE5ZWY5ZGFlNGNiNGFmYTU2ZTQ5MDIxMTc2MGQ4
YTk0OWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2Ev
TElDRU5TRQpAQCAtMCwwICsxLDI2IEBACitDb3B5cmlnaHQgMjAwNi0yMDExLCB0aGUgVjggcHJv
amVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCittZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgICAgICBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICAg
ICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkCisgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAgICBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
KyAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKK09XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCitEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
K1RIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9SRUFETUUgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL2R0b2EvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYxODZiNDIwZjQyYmMxNGM3ZDU3NjVlYTQzZjZi
MjhkM2MyOWI5MjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L2R0b2EvUkVBRE1FCkBAIC0wLDAgKzEsMTEgQEAKK2h0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9k
b3VibGUtY29udmVyc2lvbgorCitUaGlzIHByb2plY3QgKGRvdWJsZS1jb252ZXJzaW9uKSBwcm92
aWRlcyBiaW5hcnktZGVjaW1hbCBhbmQgZGVjaW1hbC1iaW5hcnkKK3JvdXRpbmVzIGZvciBJRUVF
IGRvdWJsZXMuCisKK1RoZSBsaWJyYXJ5IGNvbnNpc3RzIG9mIGVmZmljaWVudCBjb252ZXJzaW9u
IHJvdXRpbmVzIHRoYXQgaGF2ZSBiZWVuIGV4dHJhY3RlZAorZnJvbSB0aGUgVjggSmF2YVNjcmlw
dCBlbmdpbmUuIFRoZSBjb2RlIGhhcyBiZWVuIHJlZmFjdG9yZWQgYW5kIGltcHJvdmVkIHNvIHRo
YXQKK2l0IGNhbiBiZSB1c2VkIG1vcmUgZWFzaWx5IGluIG90aGVyIHByb2plY3RzLgorCitUaGVy
ZSBpcyBleHRlbnNpdmUgZG9jdW1lbnRhdGlvbiBpbiBzcmMvZG91YmxlLWNvbnZlcnNpb24uaC4g
T3RoZXIgZXhhbXBsZXMgY2FuCitiZSBmb3VuZCBpbiB0ZXN0L2NjdGVzdC90ZXN0LWNvbnZlcnNp
b25zLmNjLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251
bS1kdG9hLmNjIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS1kdG9hLmNj
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmRlOTg3MWUzYWNhNGRiNGU5ZGQyNjNhZjZjMTFhNDFkNzkwMTk1NTcKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvYmlnbnVtLWR0
b2EuY2MKQEAgLTAsMCArMSw2NTcgQEAKKy8vIENvcHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0
IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8v
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lu
Y2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgImJpZ251bS1kdG9hLmgiCisKKyNpbmNsdWRlICJi
aWdudW0uaCIKKyNpbmNsdWRlICJkb3VibGUuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK25hbWVz
cGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgc3RhdGljIGludCBOb3JtYWxpemVk
RXhwb25lbnQodWludDY0X3Qgc2lnbmlmaWNhbmQsIGludCBleHBvbmVudCkgeworICAgICAgICBB
U1NFUlQoc2lnbmlmaWNhbmQgIT0gMCk7CisgICAgICAgIHdoaWxlICgoc2lnbmlmaWNhbmQgJiBE
b3VibGU6OmtIaWRkZW5CaXQpID09IDApIHsKKyAgICAgICAgICAgIHNpZ25pZmljYW5kID0gc2ln
bmlmaWNhbmQgPDwgMTsKKyAgICAgICAgICAgIGV4cG9uZW50ID0gZXhwb25lbnQgLSAxOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBleHBvbmVudDsKKyAgICB9CisgICAgCisgICAgCisgICAg
Ly8gRm9yd2FyZCBkZWNsYXJhdGlvbnM6CisgICAgLy8gUmV0dXJucyBhbiBlc3RpbWF0aW9uIG9m
IGsgc3VjaCB0aGF0IDEwXihrLTEpIDw9IHYgPCAxMF5rLgorICAgIHN0YXRpYyBpbnQgRXN0aW1h
dGVQb3dlcihpbnQgZXhwb25lbnQpOworICAgIC8vIENvbXB1dGVzIHYgLyAxMF5lc3RpbWF0ZWRf
cG93ZXIgZXhhY3RseSwgYXMgYSByYXRpbyBvZiB0d28gYmlnbnVtcywgbnVtZXJhdG9yCisgICAg
Ly8gYW5kIGRlbm9taW5hdG9yLgorICAgIHN0YXRpYyB2b2lkIEluaXRpYWxTY2FsZWRTdGFydFZh
bHVlcyhkb3VibGUgdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGVzdGltYXRlZF9wb3dlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBuZWVkX2JvdW5kYXJ5X2RlbHRhcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQmlnbnVtKiBudW1lcmF0b3IsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogZGVub21pbmF0b3IsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogZGVsdGFfbWludXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogZGVsdGFfcGx1cyk7Cisg
ICAgLy8gTXVsdGlwbGllcyBudW1lcmF0b3IvZGVub21pbmF0b3Igc28gdGhhdCBpdHMgdmFsdWVz
IGxpZXMgaW4gdGhlIHJhbmdlIDEtMTAuCisgICAgLy8gUmV0dXJucyBkZWNpbWFsX3BvaW50IHMu
dC4KKyAgICAvLyAgdiA9IG51bWVyYXRvcicvZGVub21pbmF0b3InICogMTBeKGRlY2ltYWxfcG9p
bnQtMSkKKyAgICAvLyAgICAgd2hlcmUgbnVtZXJhdG9yJyBhbmQgZGVub21pbmF0b3InIGFyZSB0
aGUgdmFsdWVzIG9mIG51bWVyYXRvciBhbmQKKyAgICAvLyAgICAgZGVub21pbmF0b3IgYWZ0ZXIg
dGhlIGNhbGwgdG8gdGhpcyBmdW5jdGlvbi4KKyAgICBzdGF0aWMgdm9pZCBGaXh1cE11bHRpcGx5
MTAoaW50IGVzdGltYXRlZF9wb3dlciwgYm9vbCBpc19ldmVuLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQqIGRlY2ltYWxfcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEJpZ251bSogbnVtZXJhdG9yLCBCaWdudW0qIGRlbm9taW5hdG9yLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIGRlbHRhX21pbnVzLCBCaWdudW0qIGRl
bHRhX3BsdXMpOworICAgIC8vIEdlbmVyYXRlcyBkaWdpdHMgZnJvbSB0aGUgbGVmdCB0byB0aGUg
cmlnaHQgYW5kIHN0b3BzIHdoZW4gdGhlIGdlbmVyYXRlZAorICAgIC8vIGRpZ2l0cyB5aWVsZCB0
aGUgc2hvcnRlc3QgZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiB2LgorICAgIHN0YXRpYyB2b2lk
IEdlbmVyYXRlU2hvcnRlc3REaWdpdHMoQmlnbnVtKiBudW1lcmF0b3IsIEJpZ251bSogZGVub21p
bmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIGRl
bHRhX21pbnVzLCBCaWdudW0qIGRlbHRhX3BsdXMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIGlzX2V2ZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLCBpbnQqIGxlbmd0aCk7CisgICAgLy8gR2Vu
ZXJhdGVzICdyZXF1ZXN0ZWRfZGlnaXRzJyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludC4KKyAgICBz
dGF0aWMgdm9pZCBCaWdudW1Ub0ZpeGVkKGludCByZXF1ZXN0ZWRfZGlnaXRzLCBpbnQqIGRlY2lt
YWxfcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIG51bWVyYXRv
ciwgQmlnbnVtKiBkZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZl
Y3RvcjxjaGFyPihidWZmZXIpLCBpbnQqIGxlbmd0aCk7CisgICAgLy8gR2VuZXJhdGVzICdjb3Vu
dCcgZGlnaXRzIG9mIG51bWVyYXRvci9kZW5vbWluYXRvci4KKyAgICAvLyBPbmNlICdjb3VudCcg
ZGlnaXRzIGhhdmUgYmVlbiBwcm9kdWNlZCByb3VuZHMgdGhlIHJlc3VsdCBkZXBlbmRpbmcgb24g
dGhlCisgICAgLy8gcmVtYWluZGVyIChyZW1haW5kZXJzIG9mIGV4YWN0bHkgLjUgcm91bmQgdXB3
YXJkcykuIE1pZ2h0IHVwZGF0ZSB0aGUKKyAgICAvLyBkZWNpbWFsX3BvaW50IHdoZW4gcm91bmRp
bmcgdXAgKGZvciBleGFtcGxlIGZvciAwLjk5OTkpLgorICAgIHN0YXRpYyB2b2lkIEdlbmVyYXRl
Q291bnRlZERpZ2l0cyhpbnQgY291bnQsIGludCogZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBudW1lcmF0b3IsIEJpZ251bSogZGVu
b21pbmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjxj
aGFyPihidWZmZXIpLCBpbnQqIGxlbmd0aCk7CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW1E
dG9hKGRvdWJsZSB2LCBCaWdudW1EdG9hTW9kZSBtb2RlLCBpbnQgcmVxdWVzdGVkX2RpZ2l0cywK
KyAgICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwgaW50KiBsZW5ndGgsIGlu
dCogZGVjaW1hbF9wb2ludCkgeworICAgICAgICBBU1NFUlQodiA+IDApOworICAgICAgICBBU1NF
UlQoIURvdWJsZSh2KS5Jc1NwZWNpYWwoKSk7CisgICAgICAgIHVpbnQ2NF90IHNpZ25pZmljYW5k
ID0gRG91YmxlKHYpLlNpZ25pZmljYW5kKCk7CisgICAgICAgIGJvb2wgaXNfZXZlbiA9IChzaWdu
aWZpY2FuZCAmIDEpID09IDA7CisgICAgICAgIGludCBleHBvbmVudCA9IERvdWJsZSh2KS5FeHBv
bmVudCgpOworICAgICAgICBpbnQgbm9ybWFsaXplZF9leHBvbmVudCA9IE5vcm1hbGl6ZWRFeHBv
bmVudChzaWduaWZpY2FuZCwgZXhwb25lbnQpOworICAgICAgICAvLyBlc3RpbWF0ZWRfcG93ZXIg
bWlnaHQgYmUgdG9vIGxvdyBieSAxLgorICAgICAgICBpbnQgZXN0aW1hdGVkX3Bvd2VyID0gRXN0
aW1hdGVQb3dlcihub3JtYWxpemVkX2V4cG9uZW50KTsKKyAgICAgICAgCisgICAgICAgIC8vIFNo
b3J0Y3V0IGZvciBGaXhlZC4KKyAgICAgICAgLy8gVGhlIHJlcXVlc3RlZCBkaWdpdHMgY29ycmVz
cG9uZCB0byB0aGUgZGlnaXRzIGFmdGVyIHRoZSBwb2ludC4gSWYgdGhlCisgICAgICAgIC8vIG51
bWJlciBpcyBtdWNoIHRvbyBzbWFsbCwgdGhlbiB0aGVyZSBpcyBubyBuZWVkIGluIHRyeWluZyB0
byBnZXQgYW55CisgICAgICAgIC8vIGRpZ2l0cy4KKyAgICAgICAgaWYgKG1vZGUgPT0gQklHTlVN
X0RUT0FfRklYRUQgJiYgLWVzdGltYXRlZF9wb3dlciAtIDEgPiByZXF1ZXN0ZWRfZGlnaXRzKSB7
CisgICAgICAgICAgICBidWZmZXJbMF0gPSAnXDAnOworICAgICAgICAgICAgKmxlbmd0aCA9IDA7
CisgICAgICAgICAgICAvLyBTZXQgZGVjaW1hbC1wb2ludCB0byAtcmVxdWVzdGVkX2RpZ2l0cy4g
VGhpcyBpcyB3aGF0IEdheSBkb2VzLgorICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGl0IHNob3Vs
ZCBub3QgaGF2ZSBhbnkgZWZmZWN0IGFueXdheXMgc2luY2UgdGhlIHN0cmluZyBpcworICAgICAg
ICAgICAgLy8gZW1wdHkuCisgICAgICAgICAgICAqZGVjaW1hbF9wb2ludCA9IC1yZXF1ZXN0ZWRf
ZGlnaXRzOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBCaWdudW0gbnVtZXJhdG9yOworICAgICAgICBCaWdudW0gZGVub21pbmF0b3I7CisgICAgICAg
IEJpZ251bSBkZWx0YV9taW51czsKKyAgICAgICAgQmlnbnVtIGRlbHRhX3BsdXM7CisgICAgICAg
IC8vIE1ha2Ugc3VyZSB0aGUgYmlnbnVtIGNhbiBncm93IGxhcmdlIGVub3VnaC4gVGhlIHNtYWxs
ZXN0IGRvdWJsZSBlcXVhbHMKKyAgICAgICAgLy8gNGUtMzI0LiBJbiB0aGlzIGNhc2UgdGhlIGRl
bm9taW5hdG9yIG5lZWRzIGZld2VyIHRoYW4gMzI0KjQgYmluYXJ5IGRpZ2l0cy4KKyAgICAgICAg
Ly8gVGhlIG1heGltdW0gZG91YmxlIGlzIDEuNzk3NjkzMTM0ODYyMzE1N2UzMDggd2hpY2ggbmVl
ZHMgZmV3ZXIgdGhhbgorICAgICAgICAvLyAzMDgqNCBiaW5hcnkgZGlnaXRzLgorICAgICAgICBB
U1NFUlQoQmlnbnVtOjprTWF4U2lnbmlmaWNhbnRCaXRzID49IDMyNCo0KTsKKyAgICAgICAgYm9v
bCBuZWVkX2JvdW5kYXJ5X2RlbHRhcyA9IChtb2RlID09IEJJR05VTV9EVE9BX1NIT1JURVNUKTsK
KyAgICAgICAgSW5pdGlhbFNjYWxlZFN0YXJ0VmFsdWVzKHYsIGVzdGltYXRlZF9wb3dlciwgbmVl
ZF9ib3VuZGFyeV9kZWx0YXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbnVt
ZXJhdG9yLCAmZGVub21pbmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
ZGVsdGFfbWludXMsICZkZWx0YV9wbHVzKTsKKyAgICAgICAgLy8gV2Ugbm93IGhhdmUgdiA9IChu
dW1lcmF0b3IgLyBkZW5vbWluYXRvcikgKiAxMF5lc3RpbWF0ZWRfcG93ZXIuCisgICAgICAgIEZp
eHVwTXVsdGlwbHkxMChlc3RpbWF0ZWRfcG93ZXIsIGlzX2V2ZW4sIGRlY2ltYWxfcG9pbnQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAmbnVtZXJhdG9yLCAmZGVub21pbmF0b3IsCisgICAgICAg
ICAgICAgICAgICAgICAgICAmZGVsdGFfbWludXMsICZkZWx0YV9wbHVzKTsKKyAgICAgICAgLy8g
V2Ugbm93IGhhdmUgdiA9IChudW1lcmF0b3IgLyBkZW5vbWluYXRvcikgKiAxMF4oZGVjaW1hbF9w
b2ludC0xKSwgYW5kCisgICAgICAgIC8vICAxIDw9IChudW1lcmF0b3IgKyBkZWx0YV9wbHVzKSAv
IGRlbm9taW5hdG9yIDwgMTAKKyAgICAgICAgc3dpdGNoIChtb2RlKSB7CisgICAgICAgICAgICBj
YXNlIEJJR05VTV9EVE9BX1NIT1JURVNUOgorICAgICAgICAgICAgICAgIEdlbmVyYXRlU2hvcnRl
c3REaWdpdHMoJm51bWVyYXRvciwgJmRlbm9taW5hdG9yLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJmRlbHRhX21pbnVzLCAmZGVsdGFfcGx1cywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX2V2ZW4sIGJ1ZmZlciwgbGVuZ3RoKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQklHTlVNX0RUT0FfRklYRUQ6
CisgICAgICAgICAgICAgICAgQmlnbnVtVG9GaXhlZChyZXF1ZXN0ZWRfZGlnaXRzLCBkZWNpbWFs
X3BvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm51bWVyYXRvciwgJmRlbm9t
aW5hdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBsZW5ndGgpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCSUdOVU1fRFRPQV9QUkVD
SVNJT046CisgICAgICAgICAgICAgICAgR2VuZXJhdGVDb3VudGVkRGlnaXRzKHJlcXVlc3RlZF9k
aWdpdHMsIGRlY2ltYWxfcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZudW1lcmF0b3IsICZkZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnVmZmVyLCBsZW5ndGgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAg
ICB9CisgICAgICAgIGJ1ZmZlclsqbGVuZ3RoXSA9ICdcMCc7CisgICAgfQorICAgIAorICAgIAor
ICAgIC8vIFRoZSBwcm9jZWR1cmUgc3RhcnRzIGdlbmVyYXRpbmcgZGlnaXRzIGZyb20gdGhlIGxl
ZnQgdG8gdGhlIHJpZ2h0IGFuZCBzdG9wcworICAgIC8vIHdoZW4gdGhlIGdlbmVyYXRlZCBkaWdp
dHMgeWllbGQgdGhlIHNob3J0ZXN0IGRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2Ygdi4gQQorICAg
IC8vIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgdiBpcyBhIG51bWJlciBseWluZyBjbG9zZXIg
dG8gdiB0aGFuIHRvIGFueSBvdGhlcgorICAgIC8vIGRvdWJsZSwgc28gaXQgY29udmVydHMgdG8g
diB3aGVuIHJlYWQuCisgICAgLy8KKyAgICAvLyBUaGlzIGlzIHRydWUgaWYgZCwgdGhlIGRlY2lt
YWwgcmVwcmVzZW50YXRpb24sIGlzIGJldHdlZW4gbS0gYW5kIG0rLCB0aGUKKyAgICAvLyB1cHBl
ciBhbmQgbG93ZXIgYm91bmRhcmllcy4gZCBtdXN0IGJlIHN0cmljdGx5IGJldHdlZW4gdGhlbSBp
ZiAhaXNfZXZlbi4KKyAgICAvLyAgICAgICAgICAgbS0gOj0gKG51bWVyYXRvciAtIGRlbHRhX21p
bnVzKSAvIGRlbm9taW5hdG9yCisgICAgLy8gICAgICAgICAgIG0rIDo9IChudW1lcmF0b3IgKyBk
ZWx0YV9wbHVzKSAvIGRlbm9taW5hdG9yCisgICAgLy8KKyAgICAvLyBQcmVjb25kaXRpb246IDAg
PD0gKG51bWVyYXRvcitkZWx0YV9wbHVzKSAvIGRlbm9taW5hdG9yIDwgMTAuCisgICAgLy8gICBJ
ZiAxIDw9IChudW1lcmF0b3IrZGVsdGFfcGx1cykgLyBkZW5vbWluYXRvciA8IDEwIHRoZW4gbm8g
bGVhZGluZyAwIGRpZ2l0CisgICAgLy8gICB3aWxsIGJlIHByb2R1Y2VkLiBUaGlzIHNob3VsZCBi
ZSB0aGUgc3RhbmRhcmQgcHJlY29uZGl0aW9uLgorICAgIHN0YXRpYyB2b2lkIEdlbmVyYXRlU2hv
cnRlc3REaWdpdHMoQmlnbnVtKiBudW1lcmF0b3IsIEJpZ251bSogZGVub21pbmF0b3IsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIGRlbHRhX21pbnVzLCBC
aWdudW0qIGRlbHRhX3BsdXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGlzX2V2ZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBW
ZWN0b3I8Y2hhcj4gYnVmZmVyLCBpbnQqIGxlbmd0aCkgeworICAgICAgICAvLyBTbWFsbCBvcHRp
bWl6YXRpb246IGlmIGRlbHRhX21pbnVzIGFuZCBkZWx0YV9wbHVzIGFyZSB0aGUgc2FtZSBqdXN0
IHJldXNlCisgICAgICAgIC8vIG9uZSBvZiB0aGUgdHdvIGJpZ251bXMuCisgICAgICAgIGlmIChC
aWdudW06OkVxdWFsKCpkZWx0YV9taW51cywgKmRlbHRhX3BsdXMpKSB7CisgICAgICAgICAgICBk
ZWx0YV9wbHVzID0gZGVsdGFfbWludXM7CisgICAgICAgIH0KKyAgICAgICAgKmxlbmd0aCA9IDA7
CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICB1aW50MTZfdCBkaWdpdDsKKyAg
ICAgICAgICAgIGRpZ2l0ID0gbnVtZXJhdG9yLT5EaXZpZGVNb2R1bG9JbnRCaWdudW0oKmRlbm9t
aW5hdG9yKTsKKyAgICAgICAgICAgIEFTU0VSVChkaWdpdCA8PSA5KTsgIC8vIGRpZ2l0IGlzIGEg
dWludDE2X3QgYW5kIHRoZXJlZm9yZSBhbHdheXMgcG9zaXRpdmUuCisgICAgICAgICAgICAvLyBk
aWdpdCA9IG51bWVyYXRvciAvIGRlbm9taW5hdG9yIChpbnRlZ2VyIGRpdmlzaW9uKS4KKyAgICAg
ICAgICAgIC8vIG51bWVyYXRvciA9IG51bWVyYXRvciAlIGRlbm9taW5hdG9yLgorICAgICAgICAg
ICAgYnVmZmVyWygqbGVuZ3RoKSsrXSA9IGRpZ2l0ICsgJzAnOworICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBDYW4gd2Ugc3RvcCBhbHJlYWR5PworICAgICAgICAgICAgLy8gSWYgdGhlIHJl
bWFpbmRlciBvZiB0aGUgZGl2aXNpb24gaXMgbGVzcyB0aGFuIHRoZSBkaXN0YW5jZSB0byB0aGUg
bG93ZXIKKyAgICAgICAgICAgIC8vIGJvdW5kYXJ5IHdlIGNhbiBzdG9wLiBJbiB0aGlzIGNhc2Ug
d2Ugc2ltcGx5IHJvdW5kIGRvd24gKGRpc2NhcmRpbmcgdGhlCisgICAgICAgICAgICAvLyByZW1h
aW5kZXIpLgorICAgICAgICAgICAgLy8gU2ltaWxhcmx5IHdlIHRlc3QgaWYgd2UgY2FuIHJvdW5k
IHVwICh1c2luZyB0aGUgdXBwZXIgYm91bmRhcnkpLgorICAgICAgICAgICAgYm9vbCBpbl9kZWx0
YV9yb29tX21pbnVzOworICAgICAgICAgICAgYm9vbCBpbl9kZWx0YV9yb29tX3BsdXM7CisgICAg
ICAgICAgICBpZiAoaXNfZXZlbikgeworICAgICAgICAgICAgICAgIGluX2RlbHRhX3Jvb21fbWlu
dXMgPSBCaWdudW06Okxlc3NFcXVhbCgqbnVtZXJhdG9yLCAqZGVsdGFfbWludXMpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbl9kZWx0YV9yb29tX21pbnVzID0gQmln
bnVtOjpMZXNzKCpudW1lcmF0b3IsICpkZWx0YV9taW51cyk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoaXNfZXZlbikgeworICAgICAgICAgICAgICAgIGluX2RlbHRhX3Jvb21fcGx1
cyA9CisgICAgICAgICAgICAgICAgQmlnbnVtOjpQbHVzQ29tcGFyZSgqbnVtZXJhdG9yLCAqZGVs
dGFfcGx1cywgKmRlbm9taW5hdG9yKSA+PSAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBpbl9kZWx0YV9yb29tX3BsdXMgPQorICAgICAgICAgICAgICAgIEJpZ251bTo6
UGx1c0NvbXBhcmUoKm51bWVyYXRvciwgKmRlbHRhX3BsdXMsICpkZW5vbWluYXRvcikgPiAwOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFpbl9kZWx0YV9yb29tX21pbnVzICYmICFp
bl9kZWx0YV9yb29tX3BsdXMpIHsKKyAgICAgICAgICAgICAgICAvLyBQcmVwYXJlIGZvciBuZXh0
IGl0ZXJhdGlvbi4KKyAgICAgICAgICAgICAgICBudW1lcmF0b3ItPlRpbWVzMTAoKTsKKyAgICAg
ICAgICAgICAgICBkZWx0YV9taW51cy0+VGltZXMxMCgpOworICAgICAgICAgICAgICAgIC8vIFdl
IG9wdGltaXplZCBkZWx0YV9wbHVzIHRvIGJlIGVxdWFsIHRvIGRlbHRhX21pbnVzIChpZiB0aGV5
IHNoYXJlIHRoZQorICAgICAgICAgICAgICAgIC8vIHNhbWUgdmFsdWUpLiBTbyBkb24ndCBtdWx0
aXBseSBkZWx0YV9wbHVzIGlmIHRoZXkgcG9pbnQgdG8gdGhlIHNhbWUKKyAgICAgICAgICAgICAg
ICAvLyBvYmplY3QuCisgICAgICAgICAgICAgICAgaWYgKGRlbHRhX21pbnVzICE9IGRlbHRhX3Bs
dXMpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsdGFfcGx1cy0+VGltZXMxMCgpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5fZGVsdGFfcm9vbV9taW51cyAm
JiBpbl9kZWx0YV9yb29tX3BsdXMpIHsKKyAgICAgICAgICAgICAgICAvLyBMZXQncyBzZWUgaWYg
MipudW1lcmF0b3IgPCBkZW5vbWluYXRvci4KKyAgICAgICAgICAgICAgICAvLyBJZiB5ZXMsIHRo
ZW4gdGhlIG5leHQgZGlnaXQgd291bGQgYmUgPCA1IGFuZCB3ZSBjYW4gcm91bmQgZG93bi4KKyAg
ICAgICAgICAgICAgICBpbnQgY29tcGFyZSA9IEJpZ251bTo6UGx1c0NvbXBhcmUoKm51bWVyYXRv
ciwgKm51bWVyYXRvciwgKmRlbm9taW5hdG9yKTsKKyAgICAgICAgICAgICAgICBpZiAoY29tcGFy
ZSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUmVtYWluaW5nIGRpZ2l0cyBhcmUgbGVz
cyB0aGFuIC41LiAtPiBSb3VuZCBkb3duICg9PSBkbyBub3RoaW5nKS4KKyAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKGNvbXBhcmUgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFJlbWFp
bmluZyBkaWdpdHMgYXJlIG1vcmUgdGhhbiAuNSBvZiBkZW5vbWluYXRvci4gLT4gUm91bmQgdXAu
CisgICAgICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgbGFzdCBkaWdpdCBjb3VsZCBu
b3QgYmUgYSAnOScgYXMgb3RoZXJ3aXNlIHRoZSB3aG9sZQorICAgICAgICAgICAgICAgICAgICAv
LyBsb29wIHdvdWxkIGhhdmUgc3RvcHBlZCBlYXJsaWVyLgorICAgICAgICAgICAgICAgICAgICAv
LyBXZSBzdGlsbCBoYXZlIGFuIGFzc2VydCBoZXJlIGluIGNhc2UgdGhlIHByZWNvbmRpdGlvbnMg
d2VyZSBub3QKKyAgICAgICAgICAgICAgICAgICAgLy8gc2F0aXNmaWVkLgorICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoYnVmZmVyWygqbGVuZ3RoKSAtIDFdICE9ICc5Jyk7CisgICAgICAgICAg
ICAgICAgICAgIGJ1ZmZlclsoKmxlbmd0aCkgLSAxXSsrOworICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEhhbGZ3YXkgY2FzZS4KKyAgICAgICAgICAgICAg
ICAgICAgLy8gVE9ETyhmbG9pdHNjaCk6IG5lZWQgYSB3YXkgdG8gc29sdmUgaGFsZi13YXkgY2Fz
ZXMuCisgICAgICAgICAgICAgICAgICAgIC8vICAgRm9yIG5vdyBsZXQncyByb3VuZCB0b3dhcmRz
IGV2ZW4gKHNpbmNlIHRoaXMgaXMgd2hhdCBHYXkgc2VlbXMgdG8KKyAgICAgICAgICAgICAgICAg
ICAgLy8gICBkbykuCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBp
ZiAoKGJ1ZmZlclsoKmxlbmd0aCkgLSAxXSAtICcwJykgJSAyID09IDApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFJvdW5kIGRvd24gPT4gRG8gbm90aGluZy4KKyAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChidWZmZXJbKCps
ZW5ndGgpIC0gMV0gIT0gJzknKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlclsoKmxl
bmd0aCkgLSAxXSsrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5fZGVsdGFf
cm9vbV9taW51cykgeworICAgICAgICAgICAgICAgIC8vIFJvdW5kIGRvd24gKD09IGRvIG5vdGhp
bmcpLgorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0gZWxzZSB7ICAvLyBp
bl9kZWx0YV9yb29tX3BsdXMKKyAgICAgICAgICAgICAgICAvLyBSb3VuZCB1cC4KKyAgICAgICAg
ICAgICAgICAvLyBOb3RlIGFnYWluIHRoYXQgdGhlIGxhc3QgZGlnaXQgY291bGQgbm90IGJlICc5
JyBzaW5jZSB0aGlzIHdvdWxkIGhhdmUKKyAgICAgICAgICAgICAgICAvLyBzdG9wcGVkIHRoZSBs
b29wIGVhcmxpZXIuCisgICAgICAgICAgICAgICAgLy8gV2Ugc3RpbGwgaGF2ZSBhbiBBU1NFUlQg
aGVyZSwgaW4gY2FzZSB0aGUgcHJlY29uZGl0aW9ucyB3ZXJlIG5vdAorICAgICAgICAgICAgICAg
IC8vIHNhdGlzZmllZC4KKyAgICAgICAgICAgICAgICBBU1NFUlQoYnVmZmVyWygqbGVuZ3RoKSAt
MV0gIT0gJzknKTsKKyAgICAgICAgICAgICAgICBidWZmZXJbKCpsZW5ndGgpIC0gMV0rKzsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgCisgICAgLy8gTGV0IHYgPSBudW1lcmF0b3IgLyBkZW5vbWluYXRvciA8IDEwLgor
ICAgIC8vIFRoZW4gd2UgZ2VuZXJhdGUgJ2NvdW50JyBkaWdpdHMgb2YgZCA9IHgueHh4eHguLi4g
KHdpdGhvdXQgdGhlIGRlY2ltYWwgcG9pbnQpCisgICAgLy8gZnJvbSBsZWZ0IHRvIHJpZ2h0LiBP
bmNlICdjb3VudCcgZGlnaXRzIGhhdmUgYmVlbiBwcm9kdWNlZCB3ZSBkZWNpZGUgd2V0aGVyCisg
ICAgLy8gdG8gcm91bmQgdXAgb3IgZG93bi4gUmVtYWluZGVycyBvZiBleGFjdGx5IC41IHJvdW5k
IHVwd2FyZHMuIE51bWJlcnMgc3VjaAorICAgIC8vIGFzIDkuOTk5OTk5IHByb3BhZ2F0ZSBhIGNh
cnJ5IGFsbCB0aGUgd2F5LCBhbmQgY2hhbmdlIHRoZQorICAgIC8vIGV4cG9uZW50IChkZWNpbWFs
X3BvaW50KSwgd2hlbiByb3VuZGluZyB1cHdhcmRzLgorICAgIHN0YXRpYyB2b2lkIEdlbmVyYXRl
Q291bnRlZERpZ2l0cyhpbnQgY291bnQsIGludCogZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBudW1lcmF0b3IsIEJpZ251bSogZGVu
b21pbmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjxj
aGFyPihidWZmZXIpLCBpbnQqIGxlbmd0aCkgeworICAgICAgICBBU1NFUlQoY291bnQgPj0gMCk7
CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgLSAxOyArK2kpIHsKKyAgICAgICAg
ICAgIHVpbnQxNl90IGRpZ2l0OworICAgICAgICAgICAgZGlnaXQgPSBudW1lcmF0b3ItPkRpdmlk
ZU1vZHVsb0ludEJpZ251bSgqZGVub21pbmF0b3IpOworICAgICAgICAgICAgQVNTRVJUKGRpZ2l0
IDw9IDkpOyAgLy8gZGlnaXQgaXMgYSB1aW50MTZfdCBhbmQgdGhlcmVmb3JlIGFsd2F5cyBwb3Np
dGl2ZS4KKyAgICAgICAgICAgIC8vIGRpZ2l0ID0gbnVtZXJhdG9yIC8gZGVub21pbmF0b3IgKGlu
dGVnZXIgZGl2aXNpb24pLgorICAgICAgICAgICAgLy8gbnVtZXJhdG9yID0gbnVtZXJhdG9yICUg
ZGVub21pbmF0b3IuCisgICAgICAgICAgICBidWZmZXJbaV0gPSBkaWdpdCArICcwJzsKKyAgICAg
ICAgICAgIC8vIFByZXBhcmUgZm9yIG5leHQgaXRlcmF0aW9uLgorICAgICAgICAgICAgbnVtZXJh
dG9yLT5UaW1lczEwKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gR2VuZXJhdGUgdGhlIGxhc3Qg
ZGlnaXQuCisgICAgICAgIHVpbnQxNl90IGRpZ2l0OworICAgICAgICBkaWdpdCA9IG51bWVyYXRv
ci0+RGl2aWRlTW9kdWxvSW50QmlnbnVtKCpkZW5vbWluYXRvcik7CisgICAgICAgIGlmIChCaWdu
dW06OlBsdXNDb21wYXJlKCpudW1lcmF0b3IsICpudW1lcmF0b3IsICpkZW5vbWluYXRvcikgPj0g
MCkgeworICAgICAgICAgICAgZGlnaXQrKzsKKyAgICAgICAgfQorICAgICAgICBidWZmZXJbY291
bnQgLSAxXSA9IGRpZ2l0ICsgJzAnOworICAgICAgICAvLyBDb3JyZWN0IGJhZCBkaWdpdHMgKGlu
IGNhc2Ugd2UgaGFkIGEgc2VxdWVuY2Ugb2YgJzkncykuIFByb3BhZ2F0ZSB0aGUKKyAgICAgICAg
Ly8gY2FycnkgdW50aWwgd2UgaGF0IGEgbm9uLSc5JyBvciB0aWwgd2UgcmVhY2ggdGhlIGZpcnN0
IGRpZ2l0LgorICAgICAgICBmb3IgKGludCBpID0gY291bnQgLSAxOyBpID4gMDsgLS1pKSB7Cisg
ICAgICAgICAgICBpZiAoYnVmZmVyW2ldICE9ICcwJyArIDEwKSBicmVhazsKKyAgICAgICAgICAg
IGJ1ZmZlcltpXSA9ICcwJzsKKyAgICAgICAgICAgIGJ1ZmZlcltpIC0gMV0rKzsKKyAgICAgICAg
fQorICAgICAgICBpZiAoYnVmZmVyWzBdID09ICcwJyArIDEwKSB7CisgICAgICAgICAgICAvLyBQ
cm9wYWdhdGUgYSBjYXJyeSBwYXN0IHRoZSB0b3AgcGxhY2UuCisgICAgICAgICAgICBidWZmZXJb
MF0gPSAnMSc7CisgICAgICAgICAgICAoKmRlY2ltYWxfcG9pbnQpKys7CisgICAgICAgIH0KKyAg
ICAgICAgKmxlbmd0aCA9IGNvdW50OworICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBHZW5lcmF0
ZXMgJ3JlcXVlc3RlZF9kaWdpdHMnIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50LiBJdCBtaWdodCBv
bWl0CisgICAgLy8gdHJhaWxpbmcgJzAncy4gSWYgdGhlIGlucHV0IG51bWJlciBpcyB0b28gc21h
bGwgdGhlbiBubyBkaWdpdHMgYXQgYWxsIGFyZQorICAgIC8vIGdlbmVyYXRlZCAoZXguOiAyIGZp
eGVkIGRpZ2l0cyBmb3IgMC4wMDAwMSkuCisgICAgLy8KKyAgICAvLyBJbnB1dCB2ZXJpZmllczog
IDEgPD0gKG51bWVyYXRvciArIGRlbHRhKSAvIGRlbm9taW5hdG9yIDwgMTAuCisgICAgc3RhdGlj
IHZvaWQgQmlnbnVtVG9GaXhlZChpbnQgcmVxdWVzdGVkX2RpZ2l0cywgaW50KiBkZWNpbWFsX3Bv
aW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBudW1lcmF0b3IsIEJp
Z251bSogZGVub21pbmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8
Y2hhcj4oYnVmZmVyKSwgaW50KiBsZW5ndGgpIHsKKyAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGhh
dmUgdG8gbG9vayBhdCBtb3JlIHRoYW4ganVzdCB0aGUgcmVxdWVzdGVkX2RpZ2l0cywgc2luY2UK
KyAgICAgICAgLy8gYSBudW1iZXIgY291bGQgYmUgcm91bmRlZCB1cC4gRXhhbXBsZTogdj0wLjUg
d2l0aCByZXF1ZXN0ZWRfZGlnaXRzPTAuCisgICAgICAgIC8vIEV2ZW4gdGhvdWdoIHRoZSBwb3dl
ciBvZiB2IGVxdWFscyAwIHdlIGNhbid0IGp1c3Qgc3RvcCBoZXJlLgorICAgICAgICBpZiAoLSgq
ZGVjaW1hbF9wb2ludCkgPiByZXF1ZXN0ZWRfZGlnaXRzKSB7CisgICAgICAgICAgICAvLyBUaGUg
bnVtYmVyIGlzIGRlZmluaXRpdmVseSB0b28gc21hbGwuCisgICAgICAgICAgICAvLyBFeDogMC4w
MDEgd2l0aCByZXF1ZXN0ZWRfZGlnaXRzID09IDEuCisgICAgICAgICAgICAvLyBTZXQgZGVjaW1h
bC1wb2ludCB0byAtcmVxdWVzdGVkX2RpZ2l0cy4gVGhpcyBpcyB3aGF0IEdheSBkb2VzLgorICAg
ICAgICAgICAgLy8gTm90ZSB0aGF0IGl0IHNob3VsZCBub3QgaGF2ZSBhbnkgZWZmZWN0IGFueXdh
eXMgc2luY2UgdGhlIHN0cmluZyBpcworICAgICAgICAgICAgLy8gZW1wdHkuCisgICAgICAgICAg
ICAqZGVjaW1hbF9wb2ludCA9IC1yZXF1ZXN0ZWRfZGlnaXRzOworICAgICAgICAgICAgKmxlbmd0
aCA9IDA7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAoLSgqZGVjaW1h
bF9wb2ludCkgPT0gcmVxdWVzdGVkX2RpZ2l0cykgeworICAgICAgICAgICAgLy8gV2Ugb25seSBu
ZWVkIHRvIHZlcmlmeSBpZiB0aGUgbnVtYmVyIHJvdW5kcyBkb3duIG9yIHVwLgorICAgICAgICAg
ICAgLy8gRXg6IDAuMDQgYW5kIDAuMDYgd2l0aCByZXF1ZXN0ZWRfZGlnaXRzID09IDEuCisgICAg
ICAgICAgICBBU1NFUlQoKmRlY2ltYWxfcG9pbnQgPT0gLXJlcXVlc3RlZF9kaWdpdHMpOworICAg
ICAgICAgICAgLy8gSW5pdGlhbGx5IHRoZSBmcmFjdGlvbiBsaWVzIGluIHJhbmdlICgxLCAxMF0u
IE11bHRpcGx5IHRoZSBkZW5vbWluYXRvcgorICAgICAgICAgICAgLy8gYnkgMTAgc28gdGhhdCB3
ZSBjYW4gY29tcGFyZSBtb3JlIGVhc2lseS4KKyAgICAgICAgICAgIGRlbm9taW5hdG9yLT5UaW1l
czEwKCk7CisgICAgICAgICAgICBpZiAoQmlnbnVtOjpQbHVzQ29tcGFyZSgqbnVtZXJhdG9yLCAq
bnVtZXJhdG9yLCAqZGVub21pbmF0b3IpID49IDApIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0
aGUgZnJhY3Rpb24gaXMgPj0gMC41IHRoZW4gd2UgaGF2ZSB0byBpbmNsdWRlIHRoZSByb3VuZGVk
CisgICAgICAgICAgICAgICAgLy8gZGlnaXQuCisgICAgICAgICAgICAgICAgYnVmZmVyWzBdID0g
JzEnOworICAgICAgICAgICAgICAgICpsZW5ndGggPSAxOworICAgICAgICAgICAgICAgICgqZGVj
aW1hbF9wb2ludCkrKzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8g
Tm90ZSB0aGF0IHdlIGNhdWdodCBtb3N0IG9mIHNpbWlsYXIgY2FzZXMgZWFybGllci4KKyAgICAg
ICAgICAgICAgICAqbGVuZ3RoID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFRoZSByZXF1ZXN0ZWQgZGlnaXRz
IGNvcnJlc3BvbmQgdG8gdGhlIGRpZ2l0cyBhZnRlciB0aGUgcG9pbnQuCisgICAgICAgICAgICAv
LyBUaGUgdmFyaWFibGUgJ25lZWRlZF9kaWdpdHMnIGluY2x1ZGVzIHRoZSBkaWdpdHMgYmVmb3Jl
IHRoZSBwb2ludC4KKyAgICAgICAgICAgIGludCBuZWVkZWRfZGlnaXRzID0gKCpkZWNpbWFsX3Bv
aW50KSArIHJlcXVlc3RlZF9kaWdpdHM7CisgICAgICAgICAgICBHZW5lcmF0ZUNvdW50ZWREaWdp
dHMobmVlZGVkX2RpZ2l0cywgZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBudW1lcmF0b3IsIGRlbm9taW5hdG9yLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICAKKyAgICAvLyBSZXR1cm5zIGFuIGVzdGltYXRpb24gb2YgayBzdWNoIHRoYXQgMTBeKGstMSkg
PD0gdiA8IDEwXmsgd2hlcmUKKyAgICAvLyB2ID0gZiAqIDJeZXhwb25lbnQgYW5kIDJeNTIgPD0g
ZiA8IDJeNTMuCisgICAgLy8gdiBpcyBoZW5jZSBhIG5vcm1hbGl6ZWQgZG91YmxlIHdpdGggdGhl
IGdpdmVuIGV4cG9uZW50LiBUaGUgb3V0cHV0IGlzIGFuCisgICAgLy8gYXBwcm94aW1hdGlvbiBm
b3IgdGhlIGV4cG9uZW50IG9mIHRoZSBkZWNpbWFsIGFwcHJvaW1hdGlvbiAuZGlnaXRzICogMTBe
ay4KKyAgICAvLworICAgIC8vIFRoZSByZXN1bHQgbWlnaHQgdW5kZXJzaG9vdCBieSAxIGluIHdo
aWNoIGNhc2UgMTBeayA8PSB2IDwgMTBeaysxLgorICAgIC8vIE5vdGU6IHRoaXMgcHJvcGVydHkg
aG9sZHMgZm9yIHYncyB1cHBlciBib3VuZGFyeSBtKyB0b28uCisgICAgLy8gICAgMTBeayA8PSBt
KyA8IDEwXmsrMS4KKyAgICAvLyAgIChzZWUgZXhwbGFuYXRpb24gYmVsb3cpLgorICAgIC8vCisg
ICAgLy8gRXhhbXBsZXM6CisgICAgLy8gIEVzdGltYXRlUG93ZXIoMCkgICA9PiAxNgorICAgIC8v
ICBFc3RpbWF0ZVBvd2VyKC01MikgPT4gMAorICAgIC8vCisgICAgLy8gTm90ZTogZSA+PSAwID0+
IEVzdGltYXRlZFBvd2VyKGUpID4gMC4gTm8gc2ltaWxhciBjbGFpbSBjYW4gYmUgbWFkZSBmb3Ig
ZTwwLgorICAgIHN0YXRpYyBpbnQgRXN0aW1hdGVQb3dlcihpbnQgZXhwb25lbnQpIHsKKyAgICAg
ICAgLy8gVGhpcyBmdW5jdGlvbiBlc3RpbWF0ZXMgbG9nMTAgb2YgdiB3aGVyZSB2ID0gZioyXmUg
KHdpdGggZSA9PSBleHBvbmVudCkuCisgICAgICAgIC8vIE5vdGUgdGhhdCAxMF5mbG9vcihsb2cx
MCh2KSkgPD0gdiwgYnV0IHYgPD0gMTBeY2VpbChsb2cxMCh2KSkuCisgICAgICAgIC8vIE5vdGUg
dGhhdCBmIGlzIGJvdW5kZWQgYnkgaXRzIGNvbnRhaW5lciBzaXplLiBMZXQgcCA9IDUzICh0aGUg
ZG91YmxlJ3MKKyAgICAgICAgLy8gc2lnbmlmaWNhbmQgc2l6ZSkuIFRoZW4gMl4ocC0xKSA8PSBm
IDwgMl5wLgorICAgICAgICAvLworICAgICAgICAvLyBHaXZlbiB0aGF0IGxvZzEwKHYpID09IGxv
ZzIodikvbG9nMigxMCkgYW5kIGUrKGxlbihmKS0xKSBpcyBxdWl0ZSBjbG9zZQorICAgICAgICAv
LyB0byBsb2cyKHYpIHRoZSBmdW5jdGlvbiBpcyBzaW1wbGlmaWVkIHRvIChlKyhsZW4oZiktMSkv
bG9nMigxMCkpLgorICAgICAgICAvLyBUaGUgY29tcHV0ZWQgbnVtYmVyIHVuZGVyc2hvb3RzIGJ5
IGxlc3MgdGhhbiAwLjYzMSAod2hlbiB3ZSBjb21wdXRlIGxvZzMKKyAgICAgICAgLy8gYW5kIG5v
dCBsb2cxMCkuCisgICAgICAgIC8vCisgICAgICAgIC8vIE9wdGltaXphdGlvbjogc2luY2Ugd2Ug
b25seSBuZWVkIGFuIGFwcHJveGltYXRlZCByZXN1bHQgdGhpcyBjb21wdXRhdGlvbgorICAgICAg
ICAvLyBjYW4gYmUgcGVyZm9ybWVkIG9uIDY0IGJpdCBpbnRlZ2Vycy4gT24geDg2L3g2NCBhcmNo
aXRlY3R1cmUgdGhlIHNwZWVkdXAgaXMKKyAgICAgICAgLy8gbm90IHJlYWxseSBtZWFzdXJhYmxl
LCB0aG91Z2guCisgICAgICAgIC8vCisgICAgICAgIC8vIFNpbmNlIHdlIHdhbnQgdG8gYXZvaWQg
b3ZlcnNob290aW5nIHdlIGRlY3JlbWVudCBieSAxZTEwIHNvIHRoYXQKKyAgICAgICAgLy8gZmxv
YXRpbmctcG9pbnQgaW1wcmVjaXNpb25zIGRvbid0IGFmZmVjdCB1cy4KKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gRXhwbGFuYXRpb24gZm9yIHYncyBib3VuZGFyeSBtKzogdGhlIGNvbXB1dGF0aW9u
IHRha2VzIGFkdmFudGFnZSBvZgorICAgICAgICAvLyB0aGUgZmFjdCB0aGF0IDJeKHAtMSkgPD0g
ZiA8IDJecC4gQm91bmRhcmllcyBzdGlsbCBzYXRpc2Z5IHRoaXMgcmVxdWlyZW1lbnQKKyAgICAg
ICAgLy8gKGV2ZW4gZm9yIGRlbm9ybWFscyB3aGVyZSB0aGUgZGVsdGEgY2FuIGJlIG11Y2ggbW9y
ZSBpbXBvcnRhbnQpLgorICAgICAgICAKKyAgICAgICAgY29uc3QgZG91YmxlIGsxTG9nMTAgPSAw
LjMwMTAyOTk5NTY2Mzk4MTE0OyAgLy8gMS9sZygxMCkKKyAgICAgICAgCisgICAgICAgIC8vIEZv
ciBkb3VibGVzIGxlbihmKSA9PSA1MyAoZG9uJ3QgZm9yZ2V0IHRoZSBoaWRkZW4gYml0KS4KKyAg
ICAgICAgY29uc3QgaW50IGtTaWduaWZpY2FuZFNpemUgPSA1MzsKKyAgICAgICAgZG91YmxlIGVz
dGltYXRlID0gY2VpbCgoZXhwb25lbnQgKyBrU2lnbmlmaWNhbmRTaXplIC0gMSkgKiBrMUxvZzEw
IC0gMWUtMTApOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihlc3RpbWF0ZSk7Cisg
ICAgfQorICAgIAorICAgIAorICAgIC8vIFNlZSBjb21tZW50cyBmb3IgSW5pdGlhbFNjYWxlZFN0
YXJ0VmFsdWVzLgorICAgIHN0YXRpYyB2b2lkIEluaXRpYWxTY2FsZWRTdGFydFZhbHVlc1Bvc2l0
aXZlRXhwb25lbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkb3VibGUgdiwgaW50IGVzdGltYXRlZF9wb3dlciwgYm9vbCBuZWVkX2Jv
dW5kYXJ5X2RlbHRhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEJpZ251bSogbnVtZXJhdG9yLCBCaWdudW0qIGRlbm9taW5hdG9yLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QmlnbnVtKiBkZWx0YV9taW51cywgQmlnbnVtKiBkZWx0YV9wbHVzKSB7CisgICAgICAgIC8vIEEg
cG9zaXRpdmUgZXhwb25lbnQgaW1wbGllcyBhIHBvc2l0aXZlIHBvd2VyLgorICAgICAgICBBU1NF
UlQoZXN0aW1hdGVkX3Bvd2VyID49IDApOworICAgICAgICAvLyBTaW5jZSB0aGUgZXN0aW1hdGVk
X3Bvd2VyIGlzIHBvc2l0aXZlIHdlIHNpbXBseSBtdWx0aXBseSB0aGUgZGVub21pbmF0b3IKKyAg
ICAgICAgLy8gYnkgMTBeZXN0aW1hdGVkX3Bvd2VyLgorICAgICAgICAKKyAgICAgICAgLy8gbnVt
ZXJhdG9yID0gdi4KKyAgICAgICAgbnVtZXJhdG9yLT5Bc3NpZ25VSW50NjQoRG91YmxlKHYpLlNp
Z25pZmljYW5kKCkpOworICAgICAgICBudW1lcmF0b3ItPlNoaWZ0TGVmdChEb3VibGUodikuRXhw
b25lbnQoKSk7CisgICAgICAgIC8vIGRlbm9taW5hdG9yID0gMTBeZXN0aW1hdGVkX3Bvd2VyLgor
ICAgICAgICBkZW5vbWluYXRvci0+QXNzaWduUG93ZXJVSW50MTYoMTAsIGVzdGltYXRlZF9wb3dl
cik7CisgICAgICAgIAorICAgICAgICBpZiAobmVlZF9ib3VuZGFyeV9kZWx0YXMpIHsKKyAgICAg
ICAgICAgIC8vIEludHJvZHVjZSBhIGNvbW1vbiBkZW5vbWluYXRvciBzbyB0aGF0IHRoZSBkZWx0
YXMgdG8gdGhlIGJvdW5kYXJpZXMgYXJlCisgICAgICAgICAgICAvLyBpbnRlZ2Vycy4KKyAgICAg
ICAgICAgIGRlbm9taW5hdG9yLT5TaGlmdExlZnQoMSk7CisgICAgICAgICAgICBudW1lcmF0b3It
PlNoaWZ0TGVmdCgxKTsKKyAgICAgICAgICAgIC8vIExldCB2ID0gZiAqIDJeZSwgdGhlbiBtKyAt
IHYgPSAxLzIgKiAyXmU7IFdpdGggdGhlIGNvbW1vbgorICAgICAgICAgICAgLy8gZGVub21pbmF0
b3IgKG9mIDIpIGRlbHRhX3BsdXMgZXF1YWxzIDJeZS4KKyAgICAgICAgICAgIGRlbHRhX3BsdXMt
PkFzc2lnblVJbnQxNigxKTsKKyAgICAgICAgICAgIGRlbHRhX3BsdXMtPlNoaWZ0TGVmdChEb3Vi
bGUodikuRXhwb25lbnQoKSk7CisgICAgICAgICAgICAvLyBTYW1lIGZvciBkZWx0YV9taW51cyAo
d2l0aCBhZGp1c3RtZW50cyBiZWxvdyBpZiBmID09IDJecC0xKS4KKyAgICAgICAgICAgIGRlbHRh
X21pbnVzLT5Bc3NpZ25VSW50MTYoMSk7CisgICAgICAgICAgICBkZWx0YV9taW51cy0+U2hpZnRM
ZWZ0KERvdWJsZSh2KS5FeHBvbmVudCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8g
SWYgdGhlIHNpZ25pZmljYW5kICh3aXRob3V0IHRoZSBoaWRkZW4gYml0KSBpcyAwLCB0aGVuIHRo
ZSBsb3dlcgorICAgICAgICAgICAgLy8gYm91bmRhcnkgaXMgY2xvc2VyIHRoYW4ganVzdCBoYWxm
IGEgdWxwICh1bml0IGluIHRoZSBsYXN0IHBsYWNlKS4KKyAgICAgICAgICAgIC8vIFRoZXJlIGlz
IG9ubHkgb25lIGV4Y2VwdGlvbjogaWYgdGhlIG5leHQgbG93ZXIgbnVtYmVyIGlzIGEgZGVub3Jt
YWwgdGhlbgorICAgICAgICAgICAgLy8gdGhlIGRpc3RhbmNlIGlzIDEgdWxwLiBUaGlzIGNhbm5v
dCBiZSB0aGUgY2FzZSBmb3IgZXhwb25lbnQgPj0gMCAoYnV0IHdlCisgICAgICAgICAgICAvLyBo
YXZlIHRvIHRlc3QgaXQgaW4gdGhlIG90aGVyIGZ1bmN0aW9uIHdoZXJlIGV4cG9uZW50IDwgMCku
CisgICAgICAgICAgICB1aW50NjRfdCB2X2JpdHMgPSBEb3VibGUodikuQXNVaW50NjQoKTsKKyAg
ICAgICAgICAgIGlmICgodl9iaXRzICYgRG91YmxlOjprU2lnbmlmaWNhbmRNYXNrKSA9PSAwKSB7
CisgICAgICAgICAgICAgICAgLy8gVGhlIGxvd2VyIGJvdW5kYXJ5IGlzIGNsb3NlciBhdCBoYWxm
IHRoZSBkaXN0YW5jZSBvZiAibm9ybWFsIiBudW1iZXJzLgorICAgICAgICAgICAgICAgIC8vIElu
Y3JlYXNlIHRoZSBjb21tb24gZGVub21pbmF0b3IgYW5kIGFkYXB0IGFsbCBidXQgdGhlIGRlbHRh
X21pbnVzLgorICAgICAgICAgICAgICAgIGRlbm9taW5hdG9yLT5TaGlmdExlZnQoMSk7ICAvLyAq
MgorICAgICAgICAgICAgICAgIG51bWVyYXRvci0+U2hpZnRMZWZ0KDEpOyAgICAvLyAqMgorICAg
ICAgICAgICAgICAgIGRlbHRhX3BsdXMtPlNoaWZ0TGVmdCgxKTsgICAvLyAqMgorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIC8vIFNlZSBjb21tZW50cyBm
b3IgSW5pdGlhbFNjYWxlZFN0YXJ0VmFsdWVzCisgICAgc3RhdGljIHZvaWQgSW5pdGlhbFNjYWxl
ZFN0YXJ0VmFsdWVzTmVnYXRpdmVFeHBvbmVudFBvc2l0aXZlUG93ZXIoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZG91YmxlIHYsIGludCBlc3RpbWF0ZWRfcG93ZXIsIGJvb2wgbmVlZF9ib3VuZGFyeV9kZWx0YXMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQmlnbnVtKiBudW1lcmF0b3IsIEJpZ251bSogZGVub21pbmF0b3IsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQmlnbnVtKiBkZWx0YV9taW51cywgQmlnbnVtKiBkZWx0YV9wbHVzKSB7Cisg
ICAgICAgIHVpbnQ2NF90IHNpZ25pZmljYW5kID0gRG91YmxlKHYpLlNpZ25pZmljYW5kKCk7Cisg
ICAgICAgIGludCBleHBvbmVudCA9IERvdWJsZSh2KS5FeHBvbmVudCgpOworICAgICAgICAvLyB2
ID0gZiAqIDJeZSB3aXRoIGUgPCAwLCBhbmQgd2l0aCBlc3RpbWF0ZWRfcG93ZXIgPj0gMC4KKyAg
ICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IGUgaXMgY2xvc2UgdG8gMCAoaGF2ZSBhIGxvb2sgYXQg
aG93IGVzdGltYXRlZF9wb3dlciBpcworICAgICAgICAvLyBjb21wdXRlZCkuCisgICAgICAgIAor
ICAgICAgICAvLyBudW1lcmF0b3IgPSBzaWduaWZpY2FuZAorICAgICAgICAvLyAgc2luY2UgdiA9
IHNpZ25pZmljYW5kICogMl5leHBvbmVudCB0aGlzIGlzIGVxdWl2YWxlbnQgdG8KKyAgICAgICAg
Ly8gIG51bWVyYXRvciA9IHYgKiAvIDJeLWV4cG9uZW50CisgICAgICAgIG51bWVyYXRvci0+QXNz
aWduVUludDY0KHNpZ25pZmljYW5kKTsKKyAgICAgICAgLy8gZGVub21pbmF0b3IgPSAxMF5lc3Rp
bWF0ZWRfcG93ZXIgKiAyXi1leHBvbmVudCAod2l0aCBleHBvbmVudCA8IDApCisgICAgICAgIGRl
bm9taW5hdG9yLT5Bc3NpZ25Qb3dlclVJbnQxNigxMCwgZXN0aW1hdGVkX3Bvd2VyKTsKKyAgICAg
ICAgZGVub21pbmF0b3ItPlNoaWZ0TGVmdCgtZXhwb25lbnQpOworICAgICAgICAKKyAgICAgICAg
aWYgKG5lZWRfYm91bmRhcnlfZGVsdGFzKSB7CisgICAgICAgICAgICAvLyBJbnRyb2R1Y2UgYSBj
b21tb24gZGVub21pbmF0b3Igc28gdGhhdCB0aGUgZGVsdGFzIHRvIHRoZSBib3VuZGFyaWVzIGFy
ZQorICAgICAgICAgICAgLy8gaW50ZWdlcnMuCisgICAgICAgICAgICBkZW5vbWluYXRvci0+U2hp
ZnRMZWZ0KDEpOworICAgICAgICAgICAgbnVtZXJhdG9yLT5TaGlmdExlZnQoMSk7CisgICAgICAg
ICAgICAvLyBMZXQgdiA9IGYgKiAyXmUsIHRoZW4gbSsgLSB2ID0gMS8yICogMl5lOyBXaXRoIHRo
ZSBjb21tb24KKyAgICAgICAgICAgIC8vIGRlbm9taW5hdG9yIChvZiAyKSBkZWx0YV9wbHVzIGVx
dWFscyAyXmUuCisgICAgICAgICAgICAvLyBHaXZlbiB0aGF0IHRoZSBkZW5vbWluYXRvciBhbHJl
YWR5IGluY2x1ZGVzIHYncyBleHBvbmVudCB0aGUgZGlzdGFuY2UKKyAgICAgICAgICAgIC8vIHRv
IHRoZSBib3VuZGFyaWVzIGlzIHNpbXBseSAxLgorICAgICAgICAgICAgZGVsdGFfcGx1cy0+QXNz
aWduVUludDE2KDEpOworICAgICAgICAgICAgLy8gU2FtZSBmb3IgZGVsdGFfbWludXMgKHdpdGgg
YWRqdXN0bWVudHMgYmVsb3cgaWYgZiA9PSAyXnAtMSkuCisgICAgICAgICAgICBkZWx0YV9taW51
cy0+QXNzaWduVUludDE2KDEpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBJZiB0aGUg
c2lnbmlmaWNhbmQgKHdpdGhvdXQgdGhlIGhpZGRlbiBiaXQpIGlzIDAsIHRoZW4gdGhlIGxvd2Vy
CisgICAgICAgICAgICAvLyBib3VuZGFyeSBpcyBjbG9zZXIgdGhhbiBqdXN0IG9uZSB1bHAgKHVu
aXQgaW4gdGhlIGxhc3QgcGxhY2UpLgorICAgICAgICAgICAgLy8gVGhlcmUgaXMgb25seSBvbmUg
ZXhjZXB0aW9uOiBpZiB0aGUgbmV4dCBsb3dlciBudW1iZXIgaXMgYSBkZW5vcm1hbAorICAgICAg
ICAgICAgLy8gdGhlbiB0aGUgZGlzdGFuY2UgaXMgMSB1bHAuIFNpbmNlIHRoZSBleHBvbmVudCBp
cyBjbG9zZSB0byB6ZXJvCisgICAgICAgICAgICAvLyAob3RoZXJ3aXNlIGVzdGltYXRlZF9wb3dl
ciB3b3VsZCBoYXZlIGJlZW4gbmVnYXRpdmUpIHRoaXMgY2Fubm90IGhhcHBlbgorICAgICAgICAg
ICAgLy8gaGVyZSBlaXRoZXIuCisgICAgICAgICAgICB1aW50NjRfdCB2X2JpdHMgPSBEb3VibGUo
dikuQXNVaW50NjQoKTsKKyAgICAgICAgICAgIGlmICgodl9iaXRzICYgRG91YmxlOjprU2lnbmlm
aWNhbmRNYXNrKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIGxvd2VyIGJvdW5kYXJ5
IGlzIGNsb3NlciBhdCBoYWxmIHRoZSBkaXN0YW5jZSBvZiAibm9ybWFsIiBudW1iZXJzLgorICAg
ICAgICAgICAgICAgIC8vIEluY3JlYXNlIHRoZSBkZW5vbWluYXRvciBhbmQgYWRhcHQgYWxsIGJ1
dCB0aGUgZGVsdGFfbWludXMuCisgICAgICAgICAgICAgICAgZGVub21pbmF0b3ItPlNoaWZ0TGVm
dCgxKTsgIC8vICoyCisgICAgICAgICAgICAgICAgbnVtZXJhdG9yLT5TaGlmdExlZnQoMSk7ICAg
IC8vICoyCisgICAgICAgICAgICAgICAgZGVsdGFfcGx1cy0+U2hpZnRMZWZ0KDEpOyAgIC8vICoy
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgLy8gU2Vl
IGNvbW1lbnRzIGZvciBJbml0aWFsU2NhbGVkU3RhcnRWYWx1ZXMKKyAgICBzdGF0aWMgdm9pZCBJ
bml0aWFsU2NhbGVkU3RhcnRWYWx1ZXNOZWdhdGl2ZUV4cG9uZW50TmVnYXRpdmVQb3dlcigKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkb3VibGUgdiwgaW50IGVzdGltYXRlZF9wb3dlciwgYm9vbCBuZWVkX2JvdW5k
YXJ5X2RlbHRhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIG51bWVyYXRvciwgQmlnbnVtKiBkZW5v
bWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIGRlbHRhX21pbnVzLCBCaWdudW0qIGRlbHRh
X3BsdXMpIHsKKyAgICAgICAgY29uc3QgdWludDY0X3Qga01pbmltYWxOb3JtYWxpemVkRXhwb25l
bnQgPQorICAgICAgICBVSU5UNjRfMlBBUlRfQygweDAwMTAwMDAwLCAwMDAwMDAwMCk7CisgICAg
ICAgIHVpbnQ2NF90IHNpZ25pZmljYW5kID0gRG91YmxlKHYpLlNpZ25pZmljYW5kKCk7CisgICAg
ICAgIGludCBleHBvbmVudCA9IERvdWJsZSh2KS5FeHBvbmVudCgpOworICAgICAgICAvLyBJbnN0
ZWFkIG9mIG11bHRpcGx5aW5nIHRoZSBkZW5vbWluYXRvciB3aXRoIDEwXmVzdGltYXRlZF9wb3dl
ciB3ZQorICAgICAgICAvLyBtdWx0aXBseSBhbGwgdmFsdWVzIChudW1lcmF0b3IgYW5kIGRlbHRh
cykgYnkgMTBeLWVzdGltYXRlZF9wb3dlci4KKyAgICAgICAgCisgICAgICAgIC8vIFVzZSBudW1l
cmF0b3IgYXMgdGVtcG9yYXJ5IGNvbnRhaW5lciBmb3IgcG93ZXJfdGVuLgorICAgICAgICBCaWdu
dW0qIHBvd2VyX3RlbiA9IG51bWVyYXRvcjsKKyAgICAgICAgcG93ZXJfdGVuLT5Bc3NpZ25Qb3dl
clVJbnQxNigxMCwgLWVzdGltYXRlZF9wb3dlcik7CisgICAgICAgIAorICAgICAgICBpZiAobmVl
ZF9ib3VuZGFyeV9kZWx0YXMpIHsKKyAgICAgICAgICAgIC8vIFNpbmNlIHBvd2VyX3RlbiA9PSBu
dW1lcmF0b3Igd2UgbXVzdCBtYWtlIGEgY29weSBvZiAxMF5lc3RpbWF0ZWRfcG93ZXIKKyAgICAg
ICAgICAgIC8vIGJlZm9yZSB3ZSBjb21wbGV0ZSB0aGUgY29tcHV0YXRpb24gb2YgdGhlIG51bWVy
YXRvci4KKyAgICAgICAgICAgIC8vIGRlbHRhX3BsdXMgPSBkZWx0YV9taW51cyA9IDEwXmVzdGlt
YXRlZF9wb3dlcgorICAgICAgICAgICAgZGVsdGFfcGx1cy0+QXNzaWduQmlnbnVtKCpwb3dlcl90
ZW4pOworICAgICAgICAgICAgZGVsdGFfbWludXMtPkFzc2lnbkJpZ251bSgqcG93ZXJfdGVuKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gbnVtZXJhdG9yID0gc2lnbmlmaWNhbmQg
KiAyICogMTBeLWVzdGltYXRlZF9wb3dlcgorICAgICAgICAvLyAgc2luY2UgdiA9IHNpZ25pZmlj
YW5kICogMl5leHBvbmVudCB0aGlzIGlzIGVxdWl2YWxlbnQgdG8KKyAgICAgICAgLy8gbnVtZXJh
dG9yID0gdiAqIDEwXi1lc3RpbWF0ZWRfcG93ZXIgKiAyICogMl4tZXhwb25lbnQuCisgICAgICAg
IC8vIFJlbWVtYmVyOiBudW1lcmF0b3IgaGFzIGJlZW4gYWJ1c2VkIGFzIHBvd2VyX3Rlbi4gU28g
bm8gbmVlZCB0byBhc3NpZ24gaXQKKyAgICAgICAgLy8gIHRvIGl0c2VsZi4KKyAgICAgICAgQVNT
RVJUKG51bWVyYXRvciA9PSBwb3dlcl90ZW4pOworICAgICAgICBudW1lcmF0b3ItPk11bHRpcGx5
QnlVSW50NjQoc2lnbmlmaWNhbmQpOworICAgICAgICAKKyAgICAgICAgLy8gZGVub21pbmF0b3Ig
PSAyICogMl4tZXhwb25lbnQgd2l0aCBleHBvbmVudCA8IDAuCisgICAgICAgIGRlbm9taW5hdG9y
LT5Bc3NpZ25VSW50MTYoMSk7CisgICAgICAgIGRlbm9taW5hdG9yLT5TaGlmdExlZnQoLWV4cG9u
ZW50KTsKKyAgICAgICAgCisgICAgICAgIGlmIChuZWVkX2JvdW5kYXJ5X2RlbHRhcykgeworICAg
ICAgICAgICAgLy8gSW50cm9kdWNlIGEgY29tbW9uIGRlbm9taW5hdG9yIHNvIHRoYXQgdGhlIGRl
bHRhcyB0byB0aGUgYm91bmRhcmllcyBhcmUKKyAgICAgICAgICAgIC8vIGludGVnZXJzLgorICAg
ICAgICAgICAgbnVtZXJhdG9yLT5TaGlmdExlZnQoMSk7CisgICAgICAgICAgICBkZW5vbWluYXRv
ci0+U2hpZnRMZWZ0KDEpOworICAgICAgICAgICAgLy8gV2l0aCB0aGlzIHNoaWZ0IHRoZSBib3Vu
ZGFyaWVzIGhhdmUgdGhlaXIgY29ycmVjdCB2YWx1ZSwgc2luY2UKKyAgICAgICAgICAgIC8vIGRl
bHRhX3BsdXMgPSAxMF4tZXN0aW1hdGVkX3Bvd2VyLCBhbmQKKyAgICAgICAgICAgIC8vIGRlbHRh
X21pbnVzID0gMTBeLWVzdGltYXRlZF9wb3dlci4KKyAgICAgICAgICAgIC8vIFRoZXNlIGFzc2ln
bm1lbnRzIGhhdmUgYmVlbiBkb25lIGVhcmxpZXIuCisgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIFRoZSBzcGVjaWFsIGNhc2Ugd2hlcmUgdGhlIGxvd2VyIGJvdW5kYXJ5IGlzIHR3aWNlIGFz
IGNsb3NlLgorICAgICAgICAgICAgLy8gVGhpcyB0aW1lIHdlIGhhdmUgdG8gbG9vayBvdXQgZm9y
IHRoZSBleGNlcHRpb24gdG9vLgorICAgICAgICAgICAgdWludDY0X3Qgdl9iaXRzID0gRG91Ymxl
KHYpLkFzVWludDY0KCk7CisgICAgICAgICAgICBpZiAoKHZfYml0cyAmIERvdWJsZTo6a1NpZ25p
ZmljYW5kTWFzaykgPT0gMCAmJgorICAgICAgICAgICAgICAgIC8vIFRoZSBvbmx5IGV4Y2VwdGlv
biB3aGVyZSBhIHNpZ25pZmljYW5kID09IDAgaGFzIGl0cyBib3VuZGFyaWVzIGF0CisgICAgICAg
ICAgICAgICAgLy8gIm5vcm1hbCIgZGlzdGFuY2VzOgorICAgICAgICAgICAgICAgICh2X2JpdHMg
JiBEb3VibGU6OmtFeHBvbmVudE1hc2spICE9IGtNaW5pbWFsTm9ybWFsaXplZEV4cG9uZW50KSB7
CisgICAgICAgICAgICAgICAgbnVtZXJhdG9yLT5TaGlmdExlZnQoMSk7ICAgIC8vICoyCisgICAg
ICAgICAgICAgICAgZGVub21pbmF0b3ItPlNoaWZ0TGVmdCgxKTsgIC8vICoyCisgICAgICAgICAg
ICAgICAgZGVsdGFfcGx1cy0+U2hpZnRMZWZ0KDEpOyAgIC8vICoyCisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgLy8gTGV0IHYgPSBzaWduaWZpY2FuZCAq
IDJeZXhwb25lbnQuCisgICAgLy8gQ29tcHV0ZXMgdiAvIDEwXmVzdGltYXRlZF9wb3dlciBleGFj
dGx5LCBhcyBhIHJhdGlvIG9mIHR3byBiaWdudW1zLCBudW1lcmF0b3IKKyAgICAvLyBhbmQgZGVu
b21pbmF0b3IuIFRoZSBmdW5jdGlvbnMgR2VuZXJhdGVTaG9ydGVzdERpZ2l0cyBhbmQKKyAgICAv
LyBHZW5lcmF0ZUNvdW50ZWREaWdpdHMgd2lsbCB0aGVuIGNvbnZlcnQgdGhpcyByYXRpbyB0byBp
dHMgZGVjaW1hbAorICAgIC8vIHJlcHJlc2VudGF0aW9uIGQsIHdpdGggdGhlIHJlcXVpcmVkIGFj
Y3VyYWN5LgorICAgIC8vIFRoZW4gZCAqIDEwXmVzdGltYXRlZF9wb3dlciBpcyB0aGUgcmVwcmVz
ZW50YXRpb24gb2Ygdi4KKyAgICAvLyAoTm90ZTogdGhlIGZyYWN0aW9uIGFuZCB0aGUgZXN0aW1h
dGVkX3Bvd2VyIG1pZ2h0IGdldCBhZGp1c3RlZCBiZWZvcmUKKyAgICAvLyBnZW5lcmF0aW5nIHRo
ZSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uLikKKyAgICAvLworICAgIC8vIFRoZSBpbml0aWFsIHN0
YXJ0IHZhbHVlcyBjb25zaXN0IG9mOgorICAgIC8vICAtIGEgc2NhbGVkIG51bWVyYXRvcjogcy50
LiBudW1lcmF0b3IvZGVub21pbmF0b3IgPT0gdiAvIDEwXmVzdGltYXRlZF9wb3dlci4KKyAgICAv
LyAgLSBhIHNjYWxlZCAoY29tbW9uKSBkZW5vbWluYXRvci4KKyAgICAvLyAgb3B0aW9uYWxseSAo
dXNlZCBieSBHZW5lcmF0ZVNob3J0ZXN0RGlnaXRzIHRvIGRlY2lkZSBpZiBpdCBoYXMgdGhlIHNo
b3J0ZXN0CisgICAgLy8gIGRlY2ltYWwgY29udmVydGluZyBiYWNrIHRvIHYpOgorICAgIC8vICAt
IHYgLSBtLTogdGhlIGRpc3RhbmNlIHRvIHRoZSBsb3dlciBib3VuZGFyeS4KKyAgICAvLyAgLSBt
KyAtIHY6IHRoZSBkaXN0YW5jZSB0byB0aGUgdXBwZXIgYm91bmRhcnkuCisgICAgLy8KKyAgICAv
LyB2LCBtKywgbS0sIGFuZCB0aGVyZWZvcmUgdiAtIG0tIGFuZCBtKyAtIHYgYWxsIHNoYXJlIHRo
ZSBzYW1lIGRlbm9taW5hdG9yLgorICAgIC8vCisgICAgLy8gTGV0IGVwID09IGVzdGltYXRlZF9w
b3dlciwgdGhlbiB0aGUgcmV0dXJuZWQgdmFsdWVzIHdpbGwgc2F0aXNmeToKKyAgICAvLyAgdiAv
IDEwXmVwID0gbnVtZXJhdG9yIC8gZGVub21pbmF0b3IuCisgICAgLy8gIHYncyBib3VuZGFyeXMg
bS0gYW5kIG0rOgorICAgIC8vICAgIG0tIC8gMTBeZXAgPT0gdiAvIDEwXmVwIC0gZGVsdGFfbWlu
dXMgLyBkZW5vbWluYXRvcgorICAgIC8vICAgIG0rIC8gMTBeZXAgPT0gdiAvIDEwXmVwICsgZGVs
dGFfcGx1cyAvIGRlbm9taW5hdG9yCisgICAgLy8gIE9yIGluIG90aGVyIHdvcmRzOgorICAgIC8v
ICAgIG0tID09IHYgLSBkZWx0YV9taW51cyAqIDEwXmVwIC8gZGVub21pbmF0b3I7CisgICAgLy8g
ICAgbSsgPT0gdiArIGRlbHRhX3BsdXMgKiAxMF5lcCAvIGRlbm9taW5hdG9yOworICAgIC8vCisg
ICAgLy8gU2luY2UgMTBeKGstMSkgPD0gdiA8IDEwXmsgICAgKHdpdGggayA9PSBlc3RpbWF0ZWRf
cG93ZXIpCisgICAgLy8gIG9yICAgICAgIDEwXmsgPD0gdiA8IDEwXihrKzEpCisgICAgLy8gIHdl
IHRoZW4gaGF2ZSAwLjEgPD0gbnVtZXJhdG9yL2Rlbm9taW5hdG9yIDwgMQorICAgIC8vICAgICAg
ICAgICBvciAgICAxIDw9IG51bWVyYXRvci9kZW5vbWluYXRvciA8IDEwCisgICAgLy8KKyAgICAv
LyBJdCBpcyB0aGVuIGVhc3kgdG8ga2lja3N0YXJ0IHRoZSBkaWdpdC1nZW5lcmF0aW9uIHJvdXRp
bmUuCisgICAgLy8KKyAgICAvLyBUaGUgYm91bmRhcnktZGVsdGFzIGFyZSBvbmx5IGZpbGxlZCBp
ZiBuZWVkX2JvdW5kYXJ5X2RlbHRhcyBpcyBzZXQuCisgICAgc3RhdGljIHZvaWQgSW5pdGlhbFNj
YWxlZFN0YXJ0VmFsdWVzKGRvdWJsZSB2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgZXN0aW1hdGVkX3Bvd2VyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIG5lZWRfYm91bmRhcnlfZGVsdGFzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIG51bWVyYXRvciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBkZW5vbWluYXRvciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBkZWx0YV9taW51
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBkZWx0
YV9wbHVzKSB7CisgICAgICAgIGlmIChEb3VibGUodikuRXhwb25lbnQoKSA+PSAwKSB7CisgICAg
ICAgICAgICBJbml0aWFsU2NhbGVkU3RhcnRWYWx1ZXNQb3NpdGl2ZUV4cG9uZW50KAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LCBlc3RpbWF0
ZWRfcG93ZXIsIG5lZWRfYm91bmRhcnlfZGVsdGFzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmF0b3IsIGRlbm9taW5hdG9yLCBkZWx0
YV9taW51cywgZGVsdGFfcGx1cyk7CisgICAgICAgIH0gZWxzZSBpZiAoZXN0aW1hdGVkX3Bvd2Vy
ID49IDApIHsKKyAgICAgICAgICAgIEluaXRpYWxTY2FsZWRTdGFydFZhbHVlc05lZ2F0aXZlRXhw
b25lbnRQb3NpdGl2ZVBvd2VyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiwgZXN0aW1hdGVkX3Bvd2VyLCBuZWVkX2Jv
dW5kYXJ5X2RlbHRhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyYXRvciwgZGVub21pbmF0b3IsIGRlbHRhX21p
bnVzLCBkZWx0YV9wbHVzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEluaXRpYWxT
Y2FsZWRTdGFydFZhbHVlc05lZ2F0aXZlRXhwb25lbnROZWdhdGl2ZVBvd2VyKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
diwgZXN0aW1hdGVkX3Bvd2VyLCBuZWVkX2JvdW5kYXJ5X2RlbHRhcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVy
YXRvciwgZGVub21pbmF0b3IsIGRlbHRhX21pbnVzLCBkZWx0YV9wbHVzKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBUaGlzIHJvdXRpbmUgbXVsdGlwbGllcyBudW1lcmF0
b3IvZGVub21pbmF0b3Igc28gdGhhdCBpdHMgdmFsdWVzIGxpZXMgaW4gdGhlCisgICAgLy8gcmFu
Z2UgMS0xMC4gVGhhdCBpcyBhZnRlciBhIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiB3ZSBoYXZlOgor
ICAgIC8vICAgIDEgPD0gKG51bWVyYXRvciArIGRlbHRhX3BsdXMpIC9kZW5vbWluYXRvciA8IDEw
LgorICAgIC8vIExldCBudW1lcmF0b3IgdGhlIGlucHV0IGJlZm9yZSBtb2RpZmljYXRpb24gYW5k
IG51bWVyYXRvcicgdGhlIGFyZ3VtZW50CisgICAgLy8gYWZ0ZXIgbW9kaWZpY2F0aW9uLCB0aGVu
IHRoZSBvdXRwdXQtcGFyYW1ldGVyIGRlY2ltYWxfcG9pbnQgaXMgc3VjaCB0aGF0CisgICAgLy8g
IG51bWVyYXRvciAvIGRlbm9taW5hdG9yICogMTBeZXN0aW1hdGVkX3Bvd2VyID09CisgICAgLy8g
ICAgbnVtZXJhdG9yJyAvIGRlbm9taW5hdG9yJyAqIDEwXihkZWNpbWFsX3BvaW50IC0gMSkKKyAg
ICAvLyBJbiBzb21lIGNhc2VzIGVzdGltYXRlZF9wb3dlciB3YXMgdG9vIGxvdywgYW5kIHRoaXMg
aXMgYWxyZWFkeSB0aGUgY2FzZS4gV2UKKyAgICAvLyB0aGVuIHNpbXBseSBhZGp1c3QgdGhlIHBv
d2VyIHNvIHRoYXQgMTBeKGstMSkgPD0gdiA8IDEwXmsgKHdpdGggayA9PQorICAgIC8vIGVzdGlt
YXRlZF9wb3dlcikgYnV0IGRvIG5vdCB0b3VjaCB0aGUgbnVtZXJhdG9yIG9yIGRlbm9taW5hdG9y
LgorICAgIC8vIE90aGVyd2lzZSB0aGUgcm91dGluZSBtdWx0aXBsaWVzIHRoZSBudW1lcmF0b3Ig
YW5kIHRoZSBkZWx0YXMgYnkgMTAuCisgICAgc3RhdGljIHZvaWQgRml4dXBNdWx0aXBseTEwKGlu
dCBlc3RpbWF0ZWRfcG93ZXIsIGJvb2wgaXNfZXZlbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50KiBkZWNpbWFsX3BvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBCaWdudW0qIG51bWVyYXRvciwgQmlnbnVtKiBkZW5vbWluYXRvciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBkZWx0YV9taW51cywgQmlnbnVtKiBkZWx0YV9w
bHVzKSB7CisgICAgICAgIGJvb2wgaW5fcmFuZ2U7CisgICAgICAgIGlmIChpc19ldmVuKSB7Cisg
ICAgICAgICAgICAvLyBGb3IgSUVFRSBkb3VibGVzIGhhbGYtd2F5IGNhc2VzIChpbiBkZWNpbWFs
IHN5c3RlbSBudW1iZXJzIGVuZGluZyB3aXRoIDUpCisgICAgICAgICAgICAvLyBhcmUgcm91bmRl
ZCB0byB0aGUgY2xvc2VzdCBmbG9hdGluZy1wb2ludCBudW1iZXIgd2l0aCBldmVuIHNpZ25pZmlj
YW5kLgorICAgICAgICAgICAgaW5fcmFuZ2UgPSBCaWdudW06OlBsdXNDb21wYXJlKCpudW1lcmF0
b3IsICpkZWx0YV9wbHVzLCAqZGVub21pbmF0b3IpID49IDA7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBpbl9yYW5nZSA9IEJpZ251bTo6UGx1c0NvbXBhcmUoKm51bWVyYXRvciwgKmRl
bHRhX3BsdXMsICpkZW5vbWluYXRvcikgPiAwOworICAgICAgICB9CisgICAgICAgIGlmIChpbl9y
YW5nZSkgeworICAgICAgICAgICAgLy8gU2luY2UgbnVtZXJhdG9yICsgZGVsdGFfcGx1cyA+PSBk
ZW5vbWluYXRvciB3ZSBhbHJlYWR5IGhhdmUKKyAgICAgICAgICAgIC8vIDEgPD0gbnVtZXJhdG9y
L2Rlbm9taW5hdG9yIDwgMTAuIFNpbXBseSB1cGRhdGUgdGhlIGVzdGltYXRlZF9wb3dlci4KKyAg
ICAgICAgICAgICpkZWNpbWFsX3BvaW50ID0gZXN0aW1hdGVkX3Bvd2VyICsgMTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICpkZWNpbWFsX3BvaW50ID0gZXN0aW1hdGVkX3Bvd2VyOwor
ICAgICAgICAgICAgbnVtZXJhdG9yLT5UaW1lczEwKCk7CisgICAgICAgICAgICBpZiAoQmlnbnVt
OjpFcXVhbCgqZGVsdGFfbWludXMsICpkZWx0YV9wbHVzKSkgeworICAgICAgICAgICAgICAgIGRl
bHRhX21pbnVzLT5UaW1lczEwKCk7CisgICAgICAgICAgICAgICAgZGVsdGFfcGx1cy0+QXNzaWdu
QmlnbnVtKCpkZWx0YV9taW51cyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIGRlbHRhX21pbnVzLT5UaW1lczEwKCk7CisgICAgICAgICAgICAgICAgZGVsdGFfcGx1cy0+
VGltZXMxMCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorfSAgLy8g
bmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS1kdG9hLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvYmlnbnVtLWR0b2EuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNzYx
Njg3MDkxYzAwYjkzZjA4NzY0MDM1OGUzOTg5MDdkMGQ0YTk1Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS1kdG9hLmgKQEAgLTAsMCArMSw4
NiBAQAorLy8gQ29weXJpZ2h0IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8K
Ky8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8g
ICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAg
ICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
Ly8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWZuZGVmIERPVUJMRV9DT05WRVJT
SU9OX0JJR05VTV9EVE9BX0hfCisjZGVmaW5lIERPVUJMRV9DT05WRVJTSU9OX0JJR05VTV9EVE9B
X0hfCisKKyNpbmNsdWRlICJ1dGlscy5oIgorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNl
IGRvdWJsZV9jb252ZXJzaW9uIHsKKyAgICAKKyAgICBlbnVtIEJpZ251bUR0b2FNb2RlIHsKKyAg
ICAgICAgLy8gUmV0dXJuIHRoZSBzaG9ydGVzdCBjb3JyZWN0IHJlcHJlc2VudGF0aW9uLgorICAg
ICAgICAvLyBGb3IgZXhhbXBsZSB0aGUgb3V0cHV0IG9mIDAuMjk5OTk5OTk5OTk5OTk5OTg4ODk3
IGlzICh0aGUgbGVzcyBhY2N1cmF0ZSBidXQKKyAgICAgICAgLy8gY29ycmVjdCkgMC4zLgorICAg
ICAgICBCSUdOVU1fRFRPQV9TSE9SVEVTVCwKKyAgICAgICAgLy8gUmV0dXJuIGEgZml4ZWQgbnVt
YmVyIG9mIGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludC4KKyAgICAgICAgLy8gRm9yIGlu
c3RhbmNlIGZpeGVkKDAuMSwgNCkgYmVjb21lcyAwLjEwMDAKKyAgICAgICAgLy8gSWYgdGhlIGlu
cHV0IG51bWJlciBpcyBiaWcsIHRoZSBvdXRwdXQgd2lsbCBiZSBiaWcuCisgICAgICAgIEJJR05V
TV9EVE9BX0ZJWEVELAorICAgICAgICAvLyBSZXR1cm4gYSBmaXhlZCBudW1iZXIgb2YgZGlnaXRz
LCBubyBtYXR0ZXIgd2hhdCB0aGUgZXhwb25lbnQgaXMuCisgICAgICAgIEJJR05VTV9EVE9BX1BS
RUNJU0lPTgorICAgIH07CisgICAgCisgICAgLy8gQ29udmVydHMgdGhlIGdpdmVuIGRvdWJsZSAn
dicgdG8gYXNjaWkuCisgICAgLy8gVGhlIHJlc3VsdCBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMg
YnVmZmVyICogMTBeKHBvaW50LWxlbmd0aCkuCisgICAgLy8gVGhlIGJ1ZmZlciB3aWxsIGJlIG51
bGwtdGVybWluYXRlZC4KKyAgICAvLworICAgIC8vIFRoZSBpbnB1dCB2IG11c3QgYmUgPiAwIGFu
ZCBkaWZmZXJlbnQgZnJvbSBOYU4sIGFuZCBJbmZpbml0eS4KKyAgICAvLworICAgIC8vIFRoZSBv
dXRwdXQgZGVwZW5kcyBvbiB0aGUgZ2l2ZW4gbW9kZToKKyAgICAvLyAgLSBTSE9SVEVTVDogcHJv
ZHVjZSB0aGUgbGVhc3QgYW1vdW50IG9mIGRpZ2l0cyBmb3Igd2hpY2ggdGhlIGludGVybmFsCisg
ICAgLy8gICBpZGVudGl0eSByZXF1aXJlbWVudCBpcyBzdGlsbCBzYXRpc2ZpZWQuIElmIHRoZSBk
aWdpdHMgYXJlIHByaW50ZWQKKyAgICAvLyAgICh0b2dldGhlciB3aXRoIHRoZSBjb3JyZWN0IGV4
cG9uZW50KSB0aGVuIHJlYWRpbmcgdGhpcyBudW1iZXIgd2lsbCBnaXZlCisgICAgLy8gICAndicg
YWdhaW4uIFRoZSBidWZmZXIgd2lsbCBjaG9vc2UgdGhlIHJlcHJlc2VudGF0aW9uIHRoYXQgaXMg
Y2xvc2VzdCB0bworICAgIC8vICAgJ3YnLiBJZiB0aGVyZSBhcmUgdHdvIGF0IHRoZSBzYW1lIGRp
c3RhbmNlLCB0aGFuIHRoZSBudW1iZXIgaXMgcm91bmQgdXAuCisgICAgLy8gICBJbiB0aGlzIG1v
ZGUgdGhlICdyZXF1ZXN0ZWRfZGlnaXRzJyBwYXJhbWV0ZXIgaXMgaWdub3JlZC4KKyAgICAvLyAg
LSBGSVhFRDogcHJvZHVjZXMgZGlnaXRzIG5lY2Vzc2FyeSB0byBwcmludCBhIGdpdmVuIG51bWJl
ciB3aXRoCisgICAgLy8gICAncmVxdWVzdGVkX2RpZ2l0cycgZGlnaXRzIGFmdGVyIHRoZSBkZWNp
bWFsIHBvaW50LiBUaGUgcHJvZHVjZWQgZGlnaXRzCisgICAgLy8gICBtaWdodCBiZSB0b28gc2hv
cnQgaW4gd2hpY2ggY2FzZSB0aGUgY2FsbGVyIGhhcyB0byBmaWxsIHRoZSBnYXBzIHdpdGggJzAn
cy4KKyAgICAvLyAgIEV4YW1wbGU6IHRvRml4ZWQoMC4wMDEsIDUpIGlzIGFsbG93ZWQgdG8gcmV0
dXJuIGJ1ZmZlcj0iMSIsIHBvaW50PS0yLgorICAgIC8vICAgSGFsZndheSBjYXNlcyBhcmUgcm91
bmRlZCB1cC4gVGhlIGNhbGwgdG9GaXhlZCgwLjE1LCAyKSB0aHVzIHJldHVybnMKKyAgICAvLyAg
ICAgYnVmZmVyPSIyIiwgcG9pbnQ9MC4KKyAgICAvLyAgIE5vdGU6IHRoZSBsZW5ndGggb2YgdGhl
IHJldHVybmVkIGJ1ZmZlciBoYXMgbm8gbWVhbmluZyB3cnQgdGhlIHNpZ25pZmljYW5jZQorICAg
IC8vICAgb2YgaXRzIGRpZ2l0cy4gVGhhdCBpcywganVzdCBiZWNhdXNlIGl0IGNvbnRhaW5zICcw
J3MgZG9lcyBub3QgbWVhbiB0aGF0CisgICAgLy8gICBhbnkgb3RoZXIgZGlnaXQgd291bGQgbm90
IHNhdGlzZnkgdGhlIGludGVybmFsIGlkZW50aXR5IHJlcXVpcmVtZW50LgorICAgIC8vICAtIFBS
RUNJU0lPTjogcHJvZHVjZXMgJ3JlcXVlc3RlZF9kaWdpdHMnIHdoZXJlIHRoZSBmaXJzdCBkaWdp
dCBpcyBub3QgJzAnLgorICAgIC8vICAgRXZlbiB0aG91Z2ggdGhlIGxlbmd0aCBvZiBwcm9kdWNl
ZCBkaWdpdHMgdXN1YWxseSBlcXVhbHMKKyAgICAvLyAgICdyZXF1ZXN0ZWRfZGlnaXRzJywgdGhl
IGZ1bmN0aW9uIGlzIGFsbG93ZWQgdG8gcmV0dXJuIGZld2VyIGRpZ2l0cywgaW4KKyAgICAvLyAg
IHdoaWNoIGNhc2UgdGhlIGNhbGxlciBoYXMgdG8gZmlsbCB0aGUgbWlzc2luZyBkaWdpdHMgd2l0
aCAnMCdzLgorICAgIC8vICAgSGFsZndheSBjYXNlcyBhcmUgYWdhaW4gcm91bmRlZCB1cC4KKyAg
ICAvLyAnQmlnbnVtRHRvYScgZXhwZWN0cyB0aGUgZ2l2ZW4gYnVmZmVyIHRvIGJlIGJpZyBlbm91
Z2ggdG8gaG9sZCBhbGwgZGlnaXRzCisgICAgLy8gYW5kIGEgdGVybWluYXRpbmcgbnVsbC1jaGFy
YWN0ZXIuCisgICAgdm9pZCBCaWdudW1EdG9hKGRvdWJsZSB2LCBCaWdudW1EdG9hTW9kZSBtb2Rl
LCBpbnQgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+
IGJ1ZmZlciwgaW50KiBsZW5ndGgsIGludCogcG9pbnQpOworICAgIAorfSAgLy8gbmFtZXNwYWNl
IGRvdWJsZV9jb252ZXJzaW9uCisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgIC8vIERP
VUJMRV9DT05WRVJTSU9OX0JJR05VTV9EVE9BX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL2R0b2EvYmlnbnVtLmNjIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9k
dG9hL2JpZ251bS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MjdhMmY4ODI2NGJlNWE5ZTZjMzg4NmY4NzkwZWQ2
YjE4NzVlMmNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9k
dG9hL2JpZ251bS5jYwpAQCAtMCwwICsxLDc2OCBAQAorLy8gQ29weXJpZ2h0IDIwMTAgdGhlIFY4
IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8v
CisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisjaW5jbHVkZSAiYmlnbnVtLmgiCisjaW5jbHVkZSAidXRpbHMuaCIKKworbmFtZXNwYWNl
IFdURiB7CisKK25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgQmlnbnVt
OjpCaWdudW0oKQorICAgIDogYmlnaXRzXyhiaWdpdHNfYnVmZmVyXywga0JpZ2l0Q2FwYWNpdHkp
LCB1c2VkX2RpZ2l0c18oMCksIGV4cG9uZW50XygwKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwga0JpZ2l0Q2FwYWNpdHk7ICsraSkgeworICAgICAgICAgICAgYmlnaXRzX1tpXSA9IDA7
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUz4K
KyAgICBzdGF0aWMgaW50IEJpdFNpemUoUyB2YWx1ZSkgeworICAgICAgICByZXR1cm4gOCAqIHNp
emVvZih2YWx1ZSk7CisgICAgfQorICAgIAorICAgIC8vIEd1YXJhbnRlZWQgdG8gbGllIGluIG9u
ZSBCaWdpdC4KKyAgICB2b2lkIEJpZ251bTo6QXNzaWduVUludDE2KHVpbnQxNl90IHZhbHVlKSB7
CisgICAgICAgIEFTU0VSVChrQmlnaXRTaXplID49IEJpdFNpemUodmFsdWUpKTsKKyAgICAgICAg
WmVybygpOworICAgICAgICBpZiAodmFsdWUgPT0gMCkgcmV0dXJuOworICAgICAgICAKKyAgICAg
ICAgRW5zdXJlQ2FwYWNpdHkoMSk7CisgICAgICAgIGJpZ2l0c19bMF0gPSB2YWx1ZTsKKyAgICAg
ICAgdXNlZF9kaWdpdHNfID0gMTsKKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06
OkFzc2lnblVJbnQ2NCh1aW50NjRfdCB2YWx1ZSkgeworICAgICAgICBjb25zdCBpbnQga1VJbnQ2
NFNpemUgPSA2NDsKKyAgICAgICAgCisgICAgICAgIFplcm8oKTsKKyAgICAgICAgaWYgKHZhbHVl
ID09IDApIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGludCBuZWVkZWRfYmlnaXRzID0ga1VJ
bnQ2NFNpemUgLyBrQmlnaXRTaXplICsgMTsKKyAgICAgICAgRW5zdXJlQ2FwYWNpdHkobmVlZGVk
X2JpZ2l0cyk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmVlZGVkX2JpZ2l0czsgKytp
KSB7CisgICAgICAgICAgICBiaWdpdHNfW2ldID0gdmFsdWUgJiBrQmlnaXRNYXNrOworICAgICAg
ICAgICAgdmFsdWUgPSB2YWx1ZSA+PiBrQmlnaXRTaXplOworICAgICAgICB9CisgICAgICAgIHVz
ZWRfZGlnaXRzXyA9IG5lZWRlZF9iaWdpdHM7CisgICAgICAgIENsYW1wKCk7CisgICAgfQorICAg
IAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpBc3NpZ25CaWdudW0oY29uc3QgQmlnbnVtJiBvdGhl
cikgeworICAgICAgICBleHBvbmVudF8gPSBvdGhlci5leHBvbmVudF87CisgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgb3RoZXIudXNlZF9kaWdpdHNfOyArK2kpIHsKKyAgICAgICAgICAgIGJp
Z2l0c19baV0gPSBvdGhlci5iaWdpdHNfW2ldOworICAgICAgICB9CisgICAgICAgIC8vIENsZWFy
IHRoZSBleGNlc3MgZGlnaXRzIChpZiB0aGVyZSB3ZXJlIGFueSkuCisgICAgICAgIGZvciAoaW50
IGkgPSBvdGhlci51c2VkX2RpZ2l0c187IGkgPCB1c2VkX2RpZ2l0c187ICsraSkgeworICAgICAg
ICAgICAgYmlnaXRzX1tpXSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgdXNlZF9kaWdpdHNfID0g
b3RoZXIudXNlZF9kaWdpdHNfOworICAgIH0KKyAgICAKKyAgICAKKyAgICBzdGF0aWMgdWludDY0
X3QgUmVhZFVJbnQ2NChWZWN0b3I8Y29uc3QgY2hhcj4gYnVmZmVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBmcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBkaWdpdHNfdG9fcmVhZCkgeworICAgICAgICB1aW50NjRfdCByZXN1bHQgPSAwOworICAg
ICAgICBmb3IgKGludCBpID0gZnJvbTsgaSA8IGZyb20gKyBkaWdpdHNfdG9fcmVhZDsgKytpKSB7
CisgICAgICAgICAgICBpbnQgZGlnaXQgPSBidWZmZXJbaV0gLSAnMCc7CisgICAgICAgICAgICBB
U1NFUlQoMCA8PSBkaWdpdCAmJiBkaWdpdCA8PSA5KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHJl
c3VsdCAqIDEwICsgZGlnaXQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06OkFzc2lnbkRlY2ltYWxTdHJpbmcoVmVj
dG9yPGNvbnN0IGNoYXI+IHZhbHVlKSB7CisgICAgICAgIC8vIDJeNjQgPSAxODQ0Njc0NDA3Mzcw
OTU1MTYxNiA+IDEwXjE5CisgICAgICAgIGNvbnN0IGludCBrTWF4VWludDY0RGVjaW1hbERpZ2l0
cyA9IDE5OworICAgICAgICBaZXJvKCk7CisgICAgICAgIGludCBsZW5ndGggPSB2YWx1ZS5sZW5n
dGgoKTsKKyAgICAgICAgaW50IHBvcyA9IDA7CisgICAgICAgIC8vIExldCdzIGp1c3Qgc2F5IHRo
YXQgZWFjaCBkaWdpdCBuZWVkcyA0IGJpdHMuCisgICAgICAgIHdoaWxlIChsZW5ndGggPj0ga01h
eFVpbnQ2NERlY2ltYWxEaWdpdHMpIHsKKyAgICAgICAgICAgIHVpbnQ2NF90IGRpZ2l0cyA9IFJl
YWRVSW50NjQodmFsdWUsIHBvcywga01heFVpbnQ2NERlY2ltYWxEaWdpdHMpOworICAgICAgICAg
ICAgcG9zICs9IGtNYXhVaW50NjREZWNpbWFsRGlnaXRzOworICAgICAgICAgICAgbGVuZ3RoIC09
IGtNYXhVaW50NjREZWNpbWFsRGlnaXRzOworICAgICAgICAgICAgTXVsdGlwbHlCeVBvd2VyT2ZU
ZW4oa01heFVpbnQ2NERlY2ltYWxEaWdpdHMpOworICAgICAgICAgICAgQWRkVUludDY0KGRpZ2l0
cyk7CisgICAgICAgIH0KKyAgICAgICAgdWludDY0X3QgZGlnaXRzID0gUmVhZFVJbnQ2NCh2YWx1
ZSwgcG9zLCBsZW5ndGgpOworICAgICAgICBNdWx0aXBseUJ5UG93ZXJPZlRlbihsZW5ndGgpOwor
ICAgICAgICBBZGRVSW50NjQoZGlnaXRzKTsKKyAgICAgICAgQ2xhbXAoKTsKKyAgICB9CisgICAg
CisgICAgCisgICAgc3RhdGljIGludCBIZXhDaGFyVmFsdWUoY2hhciBjKSB7CisgICAgICAgIGlm
ICgnMCcgPD0gYyAmJiBjIDw9ICc5JykgcmV0dXJuIGMgLSAnMCc7CisgICAgICAgIGlmICgnYScg
PD0gYyAmJiBjIDw9ICdmJykgcmV0dXJuIDEwICsgYyAtICdhJzsKKyAgICAgICAgaWYgKCdBJyA8
PSBjICYmIGMgPD0gJ0YnKSByZXR1cm4gMTAgKyBjIC0gJ0EnOworICAgICAgICBVTlJFQUNIQUJM
RSgpOworICAgICAgICByZXR1cm4gMDsgIC8vIFRvIG1ha2UgY29tcGlsZXIgaGFwcHkuCisgICAg
fQorICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpBc3NpZ25IZXhTdHJpbmcoVmVjdG9yPGNv
bnN0IGNoYXI+IHZhbHVlKSB7CisgICAgICAgIFplcm8oKTsKKyAgICAgICAgaW50IGxlbmd0aCA9
IHZhbHVlLmxlbmd0aCgpOworICAgICAgICAKKyAgICAgICAgaW50IG5lZWRlZF9iaWdpdHMgPSBs
ZW5ndGggKiA0IC8ga0JpZ2l0U2l6ZSArIDE7CisgICAgICAgIEVuc3VyZUNhcGFjaXR5KG5lZWRl
ZF9iaWdpdHMpOworICAgICAgICBpbnQgc3RyaW5nX2luZGV4ID0gbGVuZ3RoIC0gMTsKKyAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuZWVkZWRfYmlnaXRzIC0gMTsgKytpKSB7CisgICAgICAg
ICAgICAvLyBUaGVzZSBiaWdpdHMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgImZ1bGwiLgorICAgICAg
ICAgICAgQ2h1bmsgY3VycmVudF9iaWdpdCA9IDA7CisgICAgICAgICAgICBmb3IgKGludCBqID0g
MDsgaiA8IGtCaWdpdFNpemUgLyA0OyBqKyspIHsKKyAgICAgICAgICAgICAgICBjdXJyZW50X2Jp
Z2l0ICs9IEhleENoYXJWYWx1ZSh2YWx1ZVtzdHJpbmdfaW5kZXgtLV0pIDw8IChqICogNCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBiaWdpdHNfW2ldID0gY3VycmVudF9iaWdpdDsKKyAg
ICAgICAgfQorICAgICAgICB1c2VkX2RpZ2l0c18gPSBuZWVkZWRfYmlnaXRzIC0gMTsKKyAgICAg
ICAgCisgICAgICAgIENodW5rIG1vc3Rfc2lnbmlmaWNhbnRfYmlnaXQgPSAwOyAgLy8gQ291bGQg
YmUgPSAwOworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8PSBzdHJpbmdfaW5kZXg7ICsraikg
eworICAgICAgICAgICAgbW9zdF9zaWduaWZpY2FudF9iaWdpdCA8PD0gNDsKKyAgICAgICAgICAg
IG1vc3Rfc2lnbmlmaWNhbnRfYmlnaXQgKz0gSGV4Q2hhclZhbHVlKHZhbHVlW2pdKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAobW9zdF9zaWduaWZpY2FudF9iaWdpdCAhPSAwKSB7CisgICAgICAg
ICAgICBiaWdpdHNfW3VzZWRfZGlnaXRzX10gPSBtb3N0X3NpZ25pZmljYW50X2JpZ2l0OworICAg
ICAgICAgICAgdXNlZF9kaWdpdHNfKys7CisgICAgICAgIH0KKyAgICAgICAgQ2xhbXAoKTsKKyAg
ICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06OkFkZFVJbnQ2NCh1aW50NjRfdCBvcGVy
YW5kKSB7CisgICAgICAgIGlmIChvcGVyYW5kID09IDApIHJldHVybjsKKyAgICAgICAgQmlnbnVt
IG90aGVyOworICAgICAgICBvdGhlci5Bc3NpZ25VSW50NjQob3BlcmFuZCk7CisgICAgICAgIEFk
ZEJpZ251bShvdGhlcik7CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpBZGRC
aWdudW0oY29uc3QgQmlnbnVtJiBvdGhlcikgeworICAgICAgICBBU1NFUlQoSXNDbGFtcGVkKCkp
OworICAgICAgICBBU1NFUlQob3RoZXIuSXNDbGFtcGVkKCkpOworICAgICAgICAKKyAgICAgICAg
Ly8gSWYgdGhpcyBoYXMgYSBncmVhdGVyIGV4cG9uZW50IHRoYW4gb3RoZXIgYXBwZW5kIHplcm8t
YmlnaXRzIHRvIHRoaXMuCisgICAgICAgIC8vIEFmdGVyIHRoaXMgY2FsbCBleHBvbmVudF8gPD0g
b3RoZXIuZXhwb25lbnRfLgorICAgICAgICBBbGlnbihvdGhlcik7CisgICAgICAgIAorICAgICAg
ICAvLyBUaGVyZSBhcmUgdHdvIHBvc3NpYmlsaXRpZXM6CisgICAgICAgIC8vICAgYWFhYWFhYWFh
YWEgMDAwMCAgKHdoZXJlIHRoZSAwcyByZXByZXNlbnQgYSdzIGV4cG9uZW50KQorICAgICAgICAv
LyAgICAgYmJiYmIgMDAwMDAwMDAKKyAgICAgICAgLy8gICAtLS0tLS0tLS0tLS0tLS0tCisgICAg
ICAgIC8vICAgY2NjY2NjY2NjY2MgMDAwMAorICAgICAgICAvLyBvcgorICAgICAgICAvLyAgICBh
YWFhYWFhYWFhIDAwMDAKKyAgICAgICAgLy8gIGJiYmJiYmJiYiAwMDAwMDAwCisgICAgICAgIC8v
ICAtLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAvLyAgY2NjY2NjY2NjY2NjIDAwMDAKKyAgICAg
ICAgLy8gSW4gYm90aCBjYXNlcyB3ZSBtaWdodCBuZWVkIGEgY2FycnkgYmlnaXQuCisgICAgICAg
IAorICAgICAgICBFbnN1cmVDYXBhY2l0eSgxICsgTWF4KEJpZ2l0TGVuZ3RoKCksIG90aGVyLkJp
Z2l0TGVuZ3RoKCkpIC0gZXhwb25lbnRfKTsKKyAgICAgICAgQ2h1bmsgY2FycnkgPSAwOworICAg
ICAgICBpbnQgYmlnaXRfcG9zID0gb3RoZXIuZXhwb25lbnRfIC0gZXhwb25lbnRfOworICAgICAg
ICBBU1NFUlQoYmlnaXRfcG9zID49IDApOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG90
aGVyLnVzZWRfZGlnaXRzXzsgKytpKSB7CisgICAgICAgICAgICBDaHVuayBzdW0gPSBiaWdpdHNf
W2JpZ2l0X3Bvc10gKyBvdGhlci5iaWdpdHNfW2ldICsgY2Fycnk7CisgICAgICAgICAgICBiaWdp
dHNfW2JpZ2l0X3Bvc10gPSBzdW0gJiBrQmlnaXRNYXNrOworICAgICAgICAgICAgY2FycnkgPSBz
dW0gPj4ga0JpZ2l0U2l6ZTsKKyAgICAgICAgICAgIGJpZ2l0X3BvcysrOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICB3aGlsZSAoY2FycnkgIT0gMCkgeworICAgICAgICAgICAgQ2h1bmsg
c3VtID0gYmlnaXRzX1tiaWdpdF9wb3NdICsgY2Fycnk7CisgICAgICAgICAgICBiaWdpdHNfW2Jp
Z2l0X3Bvc10gPSBzdW0gJiBrQmlnaXRNYXNrOworICAgICAgICAgICAgY2FycnkgPSBzdW0gPj4g
a0JpZ2l0U2l6ZTsKKyAgICAgICAgICAgIGJpZ2l0X3BvcysrOworICAgICAgICB9CisgICAgICAg
IHVzZWRfZGlnaXRzXyA9IE1heChiaWdpdF9wb3MsIHVzZWRfZGlnaXRzXyk7CisgICAgICAgIEFT
U0VSVChJc0NsYW1wZWQoKSk7CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpT
dWJ0cmFjdEJpZ251bShjb25zdCBCaWdudW0mIG90aGVyKSB7CisgICAgICAgIEFTU0VSVChJc0Ns
YW1wZWQoKSk7CisgICAgICAgIEFTU0VSVChvdGhlci5Jc0NsYW1wZWQoKSk7CisgICAgICAgIC8v
IFdlIHJlcXVpcmUgdGhpcyB0byBiZSBiaWdnZXIgdGhhbiBvdGhlci4KKyAgICAgICAgQVNTRVJU
KExlc3NFcXVhbChvdGhlciwgKnRoaXMpKTsKKyAgICAgICAgCisgICAgICAgIEFsaWduKG90aGVy
KTsKKyAgICAgICAgCisgICAgICAgIGludCBvZmZzZXQgPSBvdGhlci5leHBvbmVudF8gLSBleHBv
bmVudF87CisgICAgICAgIENodW5rIGJvcnJvdyA9IDA7CisgICAgICAgIGludCBpOworICAgICAg
ICBmb3IgKGkgPSAwOyBpIDwgb3RoZXIudXNlZF9kaWdpdHNfOyArK2kpIHsKKyAgICAgICAgICAg
IEFTU0VSVCgoYm9ycm93ID09IDApIHx8IChib3Jyb3cgPT0gMSkpOworICAgICAgICAgICAgQ2h1
bmsgZGlmZmVyZW5jZSA9IGJpZ2l0c19baSArIG9mZnNldF0gLSBvdGhlci5iaWdpdHNfW2ldIC0g
Ym9ycm93OworICAgICAgICAgICAgYmlnaXRzX1tpICsgb2Zmc2V0XSA9IGRpZmZlcmVuY2UgJiBr
QmlnaXRNYXNrOworICAgICAgICAgICAgYm9ycm93ID0gZGlmZmVyZW5jZSA+PiAoa0NodW5rU2l6
ZSAtIDEpOworICAgICAgICB9CisgICAgICAgIHdoaWxlIChib3Jyb3cgIT0gMCkgeworICAgICAg
ICAgICAgQ2h1bmsgZGlmZmVyZW5jZSA9IGJpZ2l0c19baSArIG9mZnNldF0gLSBib3Jyb3c7Cisg
ICAgICAgICAgICBiaWdpdHNfW2kgKyBvZmZzZXRdID0gZGlmZmVyZW5jZSAmIGtCaWdpdE1hc2s7
CisgICAgICAgICAgICBib3Jyb3cgPSBkaWZmZXJlbmNlID4+IChrQ2h1bmtTaXplIC0gMSk7Cisg
ICAgICAgICAgICArK2k7CisgICAgICAgIH0KKyAgICAgICAgQ2xhbXAoKTsKKyAgICB9CisgICAg
CisgICAgCisgICAgdm9pZCBCaWdudW06OlNoaWZ0TGVmdChpbnQgc2hpZnRfYW1vdW50KSB7Cisg
ICAgICAgIGlmICh1c2VkX2RpZ2l0c18gPT0gMCkgcmV0dXJuOworICAgICAgICBleHBvbmVudF8g
Kz0gc2hpZnRfYW1vdW50IC8ga0JpZ2l0U2l6ZTsKKyAgICAgICAgaW50IGxvY2FsX3NoaWZ0ID0g
c2hpZnRfYW1vdW50ICUga0JpZ2l0U2l6ZTsKKyAgICAgICAgRW5zdXJlQ2FwYWNpdHkodXNlZF9k
aWdpdHNfICsgMSk7CisgICAgICAgIEJpZ2l0c1NoaWZ0TGVmdChsb2NhbF9zaGlmdCk7CisgICAg
fQorICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpNdWx0aXBseUJ5VUludDMyKHVpbnQzMl90
IGZhY3RvcikgeworICAgICAgICBpZiAoZmFjdG9yID09IDEpIHJldHVybjsKKyAgICAgICAgaWYg
KGZhY3RvciA9PSAwKSB7CisgICAgICAgICAgICBaZXJvKCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHVzZWRfZGlnaXRzXyA9PSAwKSByZXR1cm47CisgICAg
ICAgIAorICAgICAgICAvLyBUaGUgcHJvZHVjdCBvZiBhIGJpZ2l0IHdpdGggdGhlIGZhY3RvciBp
cyBvZiBzaXplIGtCaWdpdFNpemUgKyAzMi4KKyAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhpcyBu
dW1iZXIgKyAxIChmb3IgdGhlIGNhcnJ5KSBmaXRzIGludG8gZG91YmxlIGNodW5rLgorICAgICAg
ICBBU1NFUlQoa0RvdWJsZUNodW5rU2l6ZSA+PSBrQmlnaXRTaXplICsgMzIgKyAxKTsKKyAgICAg
ICAgRG91YmxlQ2h1bmsgY2FycnkgPSAwOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHVz
ZWRfZGlnaXRzXzsgKytpKSB7CisgICAgICAgICAgICBEb3VibGVDaHVuayBwcm9kdWN0ID0gc3Rh
dGljX2Nhc3Q8RG91YmxlQ2h1bms+KGZhY3RvcikgKiBiaWdpdHNfW2ldICsgY2Fycnk7CisgICAg
ICAgICAgICBiaWdpdHNfW2ldID0gc3RhdGljX2Nhc3Q8Q2h1bms+KHByb2R1Y3QgJiBrQmlnaXRN
YXNrKTsKKyAgICAgICAgICAgIGNhcnJ5ID0gKHByb2R1Y3QgPj4ga0JpZ2l0U2l6ZSk7CisgICAg
ICAgIH0KKyAgICAgICAgd2hpbGUgKGNhcnJ5ICE9IDApIHsKKyAgICAgICAgICAgIEVuc3VyZUNh
cGFjaXR5KHVzZWRfZGlnaXRzXyArIDEpOworICAgICAgICAgICAgYmlnaXRzX1t1c2VkX2RpZ2l0
c19dID0gY2FycnkgJiBrQmlnaXRNYXNrOworICAgICAgICAgICAgdXNlZF9kaWdpdHNfKys7Cisg
ICAgICAgICAgICBjYXJyeSA+Pj0ga0JpZ2l0U2l6ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICAKKyAgICB2b2lkIEJpZ251bTo6TXVsdGlwbHlCeVVJbnQ2NCh1aW50NjRfdCBmYWN0b3Ip
IHsKKyAgICAgICAgaWYgKGZhY3RvciA9PSAxKSByZXR1cm47CisgICAgICAgIGlmIChmYWN0b3Ig
PT0gMCkgeworICAgICAgICAgICAgWmVybygpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIEFTU0VSVChrQmlnaXRTaXplIDwgMzIpOworICAgICAgICB1aW50NjRfdCBj
YXJyeSA9IDA7CisgICAgICAgIHVpbnQ2NF90IGxvdyA9IGZhY3RvciAmIDB4RkZGRkZGRkY7Cisg
ICAgICAgIHVpbnQ2NF90IGhpZ2ggPSBmYWN0b3IgPj4gMzI7CisgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgdXNlZF9kaWdpdHNfOyArK2kpIHsKKyAgICAgICAgICAgIHVpbnQ2NF90IHByb2R1
Y3RfbG93ID0gbG93ICogYmlnaXRzX1tpXTsKKyAgICAgICAgICAgIHVpbnQ2NF90IHByb2R1Y3Rf
aGlnaCA9IGhpZ2ggKiBiaWdpdHNfW2ldOworICAgICAgICAgICAgdWludDY0X3QgdG1wID0gKGNh
cnJ5ICYga0JpZ2l0TWFzaykgKyBwcm9kdWN0X2xvdzsKKyAgICAgICAgICAgIGJpZ2l0c19baV0g
PSB0bXAgJiBrQmlnaXRNYXNrOworICAgICAgICAgICAgY2FycnkgPSAoY2FycnkgPj4ga0JpZ2l0
U2l6ZSkgKyAodG1wID4+IGtCaWdpdFNpemUpICsKKyAgICAgICAgICAgIChwcm9kdWN0X2hpZ2gg
PDwgKDMyIC0ga0JpZ2l0U2l6ZSkpOworICAgICAgICB9CisgICAgICAgIHdoaWxlIChjYXJyeSAh
PSAwKSB7CisgICAgICAgICAgICBFbnN1cmVDYXBhY2l0eSh1c2VkX2RpZ2l0c18gKyAxKTsKKyAg
ICAgICAgICAgIGJpZ2l0c19bdXNlZF9kaWdpdHNfXSA9IGNhcnJ5ICYga0JpZ2l0TWFzazsKKyAg
ICAgICAgICAgIHVzZWRfZGlnaXRzXysrOworICAgICAgICAgICAgY2FycnkgPj49IGtCaWdpdFNp
emU7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06Ok11bHRp
cGx5QnlQb3dlck9mVGVuKGludCBleHBvbmVudCkgeworICAgICAgICBjb25zdCB1aW50NjRfdCBr
Rml2ZTI3ID0gVUlOVDY0XzJQQVJUX0MoMHg2NzY1Yzc5MywgZmExMDA3OWQpOworICAgICAgICBj
b25zdCB1aW50MTZfdCBrRml2ZTEgPSA1OworICAgICAgICBjb25zdCB1aW50MTZfdCBrRml2ZTIg
PSBrRml2ZTEgKiA1OworICAgICAgICBjb25zdCB1aW50MTZfdCBrRml2ZTMgPSBrRml2ZTIgKiA1
OworICAgICAgICBjb25zdCB1aW50MTZfdCBrRml2ZTQgPSBrRml2ZTMgKiA1OworICAgICAgICBj
b25zdCB1aW50MTZfdCBrRml2ZTUgPSBrRml2ZTQgKiA1OworICAgICAgICBjb25zdCB1aW50MTZf
dCBrRml2ZTYgPSBrRml2ZTUgKiA1OworICAgICAgICBjb25zdCB1aW50MzJfdCBrRml2ZTcgPSBr
Rml2ZTYgKiA1OworICAgICAgICBjb25zdCB1aW50MzJfdCBrRml2ZTggPSBrRml2ZTcgKiA1Owor
ICAgICAgICBjb25zdCB1aW50MzJfdCBrRml2ZTkgPSBrRml2ZTggKiA1OworICAgICAgICBjb25z
dCB1aW50MzJfdCBrRml2ZTEwID0ga0ZpdmU5ICogNTsKKyAgICAgICAgY29uc3QgdWludDMyX3Qg
a0ZpdmUxMSA9IGtGaXZlMTAgKiA1OworICAgICAgICBjb25zdCB1aW50MzJfdCBrRml2ZTEyID0g
a0ZpdmUxMSAqIDU7CisgICAgICAgIGNvbnN0IHVpbnQzMl90IGtGaXZlMTMgPSBrRml2ZTEyICog
NTsKKyAgICAgICAgY29uc3QgdWludDMyX3Qga0ZpdmUxX3RvXzEyW10gPQorICAgICAgICB7IGtG
aXZlMSwga0ZpdmUyLCBrRml2ZTMsIGtGaXZlNCwga0ZpdmU1LCBrRml2ZTYsCisgICAgICAgICAg
ICBrRml2ZTcsIGtGaXZlOCwga0ZpdmU5LCBrRml2ZTEwLCBrRml2ZTExLCBrRml2ZTEyIH07Cisg
ICAgICAgIAorICAgICAgICBBU1NFUlQoZXhwb25lbnQgPj0gMCk7CisgICAgICAgIGlmIChleHBv
bmVudCA9PSAwKSByZXR1cm47CisgICAgICAgIGlmICh1c2VkX2RpZ2l0c18gPT0gMCkgcmV0dXJu
OworICAgICAgICAKKyAgICAgICAgLy8gV2Ugc2hpZnQgYnkgZXhwb25lbnQgYXQgdGhlIGVuZCBq
dXN0IGJlZm9yZSByZXR1cm5pbmcuCisgICAgICAgIGludCByZW1haW5pbmdfZXhwb25lbnQgPSBl
eHBvbmVudDsKKyAgICAgICAgd2hpbGUgKHJlbWFpbmluZ19leHBvbmVudCA+PSAyNykgeworICAg
ICAgICAgICAgTXVsdGlwbHlCeVVJbnQ2NChrRml2ZTI3KTsKKyAgICAgICAgICAgIHJlbWFpbmlu
Z19leHBvbmVudCAtPSAyNzsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAocmVtYWluaW5nX2V4
cG9uZW50ID49IDEzKSB7CisgICAgICAgICAgICBNdWx0aXBseUJ5VUludDMyKGtGaXZlMTMpOwor
ICAgICAgICAgICAgcmVtYWluaW5nX2V4cG9uZW50IC09IDEzOworICAgICAgICB9CisgICAgICAg
IGlmIChyZW1haW5pbmdfZXhwb25lbnQgPiAwKSB7CisgICAgICAgICAgICBNdWx0aXBseUJ5VUlu
dDMyKGtGaXZlMV90b18xMltyZW1haW5pbmdfZXhwb25lbnQgLSAxXSk7CisgICAgICAgIH0KKyAg
ICAgICAgU2hpZnRMZWZ0KGV4cG9uZW50KTsKKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBC
aWdudW06OlNxdWFyZSgpIHsKKyAgICAgICAgQVNTRVJUKElzQ2xhbXBlZCgpKTsKKyAgICAgICAg
aW50IHByb2R1Y3RfbGVuZ3RoID0gMiAqIHVzZWRfZGlnaXRzXzsKKyAgICAgICAgRW5zdXJlQ2Fw
YWNpdHkocHJvZHVjdF9sZW5ndGgpOworICAgICAgICAKKyAgICAgICAgLy8gQ29tYmEgbXVsdGlw
bGljYXRpb246IGNvbXB1dGUgZWFjaCBjb2x1bW4gc2VwYXJhdGVseS4KKyAgICAgICAgLy8gRXhh
bXBsZTogciA9IGEyYTFhMCAqIGIyYjFiMC4KKyAgICAgICAgLy8gICAgciA9ICAxICAgICogYTBi
MCArCisgICAgICAgIC8vICAgICAgICAxMCAgICAqIChhMWIwICsgYTBiMSkgKworICAgICAgICAv
LyAgICAgICAgMTAwICAgKiAoYTJiMCArIGExYjEgKyBhMGIyKSArCisgICAgICAgIC8vICAgICAg
ICAxMDAwICAqIChhMmIxICsgYTFiMikgKworICAgICAgICAvLyAgICAgICAgMTAwMDAgKiBhMmIy
CisgICAgICAgIC8vCisgICAgICAgIC8vIEluIHRoZSB3b3JzdCBjYXNlIHdlIGhhdmUgdG8gYWNj
dW11bGF0ZSBuYi1kaWdpdHMgcHJvZHVjdHMgb2YgZGlnaXQqZGlnaXQuCisgICAgICAgIC8vCisg
ICAgICAgIC8vIEFzc2VydCB0aGF0IHRoZSBhZGRpdGlvbmFsIG51bWJlciBvZiBiaXRzIGluIGEg
RG91YmxlQ2h1bmsgYXJlIGVub3VnaCB0bworICAgICAgICAvLyBzdW0gdXAgdXNlZF9kaWdpdHMg
b2YgQmlnaXQqQmlnaXQuCisgICAgICAgIGlmICgoMSA8PCAoMiAqIChrQ2h1bmtTaXplIC0ga0Jp
Z2l0U2l6ZSkpKSA8PSB1c2VkX2RpZ2l0c18pIHsKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQo
KTsKKyAgICAgICAgfQorICAgICAgICBEb3VibGVDaHVuayBhY2N1bXVsYXRvciA9IDA7CisgICAg
ICAgIC8vIEZpcnN0IHNoaWZ0IHRoZSBkaWdpdHMgc28gd2UgZG9uJ3Qgb3ZlcndyaXRlIHRoZW0u
CisgICAgICAgIGludCBjb3B5X29mZnNldCA9IHVzZWRfZGlnaXRzXzsKKyAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCB1c2VkX2RpZ2l0c187ICsraSkgeworICAgICAgICAgICAgYmlnaXRzX1tj
b3B5X29mZnNldCArIGldID0gYmlnaXRzX1tpXTsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBo
YXZlIHR3byBsb29wcyB0byBhdm9pZCBzb21lICdpZidzIGluIHRoZSBsb29wLgorICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IHVzZWRfZGlnaXRzXzsgKytpKSB7CisgICAgICAgICAgICAvLyBQ
cm9jZXNzIHRlbXBvcmFyeSBkaWdpdCBpIHdpdGggcG93ZXIgaS4KKyAgICAgICAgICAgIC8vIFRo
ZSBzdW0gb2YgdGhlIHR3byBpbmRpY2VzIG11c3QgYmUgZXF1YWwgdG8gaS4KKyAgICAgICAgICAg
IGludCBiaWdpdF9pbmRleDEgPSBpOworICAgICAgICAgICAgaW50IGJpZ2l0X2luZGV4MiA9IDA7
CisgICAgICAgICAgICAvLyBTdW0gYWxsIG9mIHRoZSBzdWItcHJvZHVjdHMuCisgICAgICAgICAg
ICB3aGlsZSAoYmlnaXRfaW5kZXgxID49IDApIHsKKyAgICAgICAgICAgICAgICBDaHVuayBjaHVu
azEgPSBiaWdpdHNfW2NvcHlfb2Zmc2V0ICsgYmlnaXRfaW5kZXgxXTsKKyAgICAgICAgICAgICAg
ICBDaHVuayBjaHVuazIgPSBiaWdpdHNfW2NvcHlfb2Zmc2V0ICsgYmlnaXRfaW5kZXgyXTsKKyAg
ICAgICAgICAgICAgICBhY2N1bXVsYXRvciArPSBzdGF0aWNfY2FzdDxEb3VibGVDaHVuaz4oY2h1
bmsxKSAqIGNodW5rMjsKKyAgICAgICAgICAgICAgICBiaWdpdF9pbmRleDEtLTsKKyAgICAgICAg
ICAgICAgICBiaWdpdF9pbmRleDIrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJpZ2l0
c19baV0gPSBzdGF0aWNfY2FzdDxDaHVuaz4oYWNjdW11bGF0b3IpICYga0JpZ2l0TWFzazsKKyAg
ICAgICAgICAgIGFjY3VtdWxhdG9yID4+PSBrQmlnaXRTaXplOworICAgICAgICB9CisgICAgICAg
IGZvciAoaW50IGkgPSB1c2VkX2RpZ2l0c187IGkgPCBwcm9kdWN0X2xlbmd0aDsgKytpKSB7Cisg
ICAgICAgICAgICBpbnQgYmlnaXRfaW5kZXgxID0gdXNlZF9kaWdpdHNfIC0gMTsKKyAgICAgICAg
ICAgIGludCBiaWdpdF9pbmRleDIgPSBpIC0gYmlnaXRfaW5kZXgxOworICAgICAgICAgICAgLy8g
SW52YXJpYW50OiBzdW0gb2YgYm90aCBpbmRpY2VzIGlzIGFnYWluIGVxdWFsIHRvIGkuCisgICAg
ICAgICAgICAvLyBJbm5lciBsb29wIHJ1bnMgMCB0aW1lcyBvbiBsYXN0IGl0ZXJhdGlvbiwgZW1w
dHlpbmcgYWNjdW11bGF0b3IuCisgICAgICAgICAgICB3aGlsZSAoYmlnaXRfaW5kZXgyIDwgdXNl
ZF9kaWdpdHNfKSB7CisgICAgICAgICAgICAgICAgQ2h1bmsgY2h1bmsxID0gYmlnaXRzX1tjb3B5
X29mZnNldCArIGJpZ2l0X2luZGV4MV07CisgICAgICAgICAgICAgICAgQ2h1bmsgY2h1bmsyID0g
YmlnaXRzX1tjb3B5X29mZnNldCArIGJpZ2l0X2luZGV4Ml07CisgICAgICAgICAgICAgICAgYWNj
dW11bGF0b3IgKz0gc3RhdGljX2Nhc3Q8RG91YmxlQ2h1bms+KGNodW5rMSkgKiBjaHVuazI7Cisg
ICAgICAgICAgICAgICAgYmlnaXRfaW5kZXgxLS07CisgICAgICAgICAgICAgICAgYmlnaXRfaW5k
ZXgyKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBUaGUgb3ZlcndyaXR0ZW4gYmln
aXRzX1tpXSB3aWxsIG5ldmVyIGJlIHJlYWQgaW4gZnVydGhlciBsb29wIGl0ZXJhdGlvbnMsCisg
ICAgICAgICAgICAvLyBiZWNhdXNlIGJpZ2l0X2luZGV4MSBhbmQgYmlnaXRfaW5kZXgyIGFyZSBh
bHdheXMgZ3JlYXRlcgorICAgICAgICAgICAgLy8gdGhhbiBpIC0gdXNlZF9kaWdpdHNfLgorICAg
ICAgICAgICAgYmlnaXRzX1tpXSA9IHN0YXRpY19jYXN0PENodW5rPihhY2N1bXVsYXRvcikgJiBr
QmlnaXRNYXNrOworICAgICAgICAgICAgYWNjdW11bGF0b3IgPj49IGtCaWdpdFNpemU7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gU2luY2UgdGhlIHJlc3VsdCB3YXMgZ3VhcmFudGVlZCB0byBsaWUg
aW5zaWRlIHRoZSBudW1iZXIgdGhlCisgICAgICAgIC8vIGFjY3VtdWxhdG9yIG11c3QgYmUgMCBu
b3cuCisgICAgICAgIEFTU0VSVChhY2N1bXVsYXRvciA9PSAwKTsKKyAgICAgICAgCisgICAgICAg
IC8vIERvbid0IGZvcmdldCB0byB1cGRhdGUgdGhlIHVzZWRfZGlnaXRzIGFuZCB0aGUgZXhwb25l
bnQuCisgICAgICAgIHVzZWRfZGlnaXRzXyA9IHByb2R1Y3RfbGVuZ3RoOworICAgICAgICBleHBv
bmVudF8gKj0gMjsKKyAgICAgICAgQ2xhbXAoKTsKKyAgICB9CisgICAgCisgICAgCisgICAgdm9p
ZCBCaWdudW06OkFzc2lnblBvd2VyVUludDE2KHVpbnQxNl90IGJhc2UsIGludCBwb3dlcl9leHBv
bmVudCkgeworICAgICAgICBBU1NFUlQoYmFzZSAhPSAwKTsKKyAgICAgICAgQVNTRVJUKHBvd2Vy
X2V4cG9uZW50ID49IDApOworICAgICAgICBpZiAocG93ZXJfZXhwb25lbnQgPT0gMCkgeworICAg
ICAgICAgICAgQXNzaWduVUludDE2KDEpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIFplcm8oKTsKKyAgICAgICAgaW50IHNoaWZ0cyA9IDA7CisgICAgICAgIC8vIFdl
IGV4cGVjdCBiYXNlIHRvIGJlIGluIHJhbmdlIDItMzIsIGFuZCBtb3N0IG9mdGVuIHRvIGJlIDEw
LgorICAgICAgICAvLyBJdCBkb2VzIG5vdCBtYWtlIG11Y2ggc2Vuc2UgdG8gaW1wbGVtZW50IGRp
ZmZlcmVudCBhbGdvcml0aG1zIGZvciBjb3VudGluZworICAgICAgICAvLyB0aGUgYml0cy4KKyAg
ICAgICAgd2hpbGUgKChiYXNlICYgMSkgPT0gMCkgeworICAgICAgICAgICAgYmFzZSA+Pj0gMTsK
KyAgICAgICAgICAgIHNoaWZ0cysrOworICAgICAgICB9CisgICAgICAgIGludCBiaXRfc2l6ZSA9
IDA7CisgICAgICAgIGludCB0bXBfYmFzZSA9IGJhc2U7CisgICAgICAgIHdoaWxlICh0bXBfYmFz
ZSAhPSAwKSB7CisgICAgICAgICAgICB0bXBfYmFzZSA+Pj0gMTsKKyAgICAgICAgICAgIGJpdF9z
aXplKys7CisgICAgICAgIH0KKyAgICAgICAgaW50IGZpbmFsX3NpemUgPSBiaXRfc2l6ZSAqIHBv
d2VyX2V4cG9uZW50OworICAgICAgICAvLyAxIGV4dHJhIGJpZ2l0IGZvciB0aGUgc2hpZnRpbmcs
IGFuZCBvbmUgZm9yIHJvdW5kZWQgZmluYWxfc2l6ZS4KKyAgICAgICAgRW5zdXJlQ2FwYWNpdHko
ZmluYWxfc2l6ZSAvIGtCaWdpdFNpemUgKyAyKTsKKyAgICAgICAgCisgICAgICAgIC8vIExlZnQg
dG8gUmlnaHQgZXhwb25lbnRpYXRpb24uCisgICAgICAgIGludCBtYXNrID0gMTsKKyAgICAgICAg
d2hpbGUgKHBvd2VyX2V4cG9uZW50ID49IG1hc2spIG1hc2sgPDw9IDE7CisgICAgICAgIAorICAg
ICAgICAvLyBUaGUgbWFzayBpcyBub3cgcG9pbnRpbmcgdG8gdGhlIGJpdCBhYm92ZSB0aGUgbW9z
dCBzaWduaWZpY2FudCAxLWJpdCBvZgorICAgICAgICAvLyBwb3dlcl9leHBvbmVudC4KKyAgICAg
ICAgLy8gR2V0IHJpZCBvZiBmaXJzdCAxLWJpdDsKKyAgICAgICAgbWFzayA+Pj0gMjsKKyAgICAg
ICAgdWludDY0X3QgdGhpc192YWx1ZSA9IGJhc2U7CisgICAgICAgIAorICAgICAgICBib29sIGRl
bGF5ZWRfbXVsdGlwbGljaWF0aW9uID0gZmFsc2U7CisgICAgICAgIGNvbnN0IHVpbnQ2NF90IG1h
eF8zMmJpdHMgPSAweEZGRkZGRkZGOworICAgICAgICB3aGlsZSAobWFzayAhPSAwICYmIHRoaXNf
dmFsdWUgPD0gbWF4XzMyYml0cykgeworICAgICAgICAgICAgdGhpc192YWx1ZSA9IHRoaXNfdmFs
dWUgKiB0aGlzX3ZhbHVlOworICAgICAgICAgICAgLy8gVmVyaWZ5IHRoYXQgdGhlcmUgaXMgZW5v
dWdoIHNwYWNlIGluIHRoaXNfdmFsdWUgdG8gcGVyZm9ybSB0aGUKKyAgICAgICAgICAgIC8vIG11
bHRpcGxpY2F0aW9uLiAgVGhlIGZpcnN0IGJpdF9zaXplIGJpdHMgbXVzdCBiZSAwLgorICAgICAg
ICAgICAgaWYgKChwb3dlcl9leHBvbmVudCAmIG1hc2spICE9IDApIHsKKyAgICAgICAgICAgICAg
ICB1aW50NjRfdCBiYXNlX2JpdHNfbWFzayA9CisgICAgICAgICAgICAgICAgfigoc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KDEpIDw8ICg2NCAtIGJpdF9zaXplKSkgLSAxKTsKKyAgICAgICAgICAgICAg
ICBib29sIGhpZ2hfYml0c196ZXJvID0gKHRoaXNfdmFsdWUgJiBiYXNlX2JpdHNfbWFzaykgPT0g
MDsKKyAgICAgICAgICAgICAgICBpZiAoaGlnaF9iaXRzX3plcm8pIHsKKyAgICAgICAgICAgICAg
ICAgICAgdGhpc192YWx1ZSAqPSBiYXNlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIGRlbGF5ZWRfbXVsdGlwbGljaWF0aW9uID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtYXNrID4+PSAxOworICAgICAg
ICB9CisgICAgICAgIEFzc2lnblVJbnQ2NCh0aGlzX3ZhbHVlKTsKKyAgICAgICAgaWYgKGRlbGF5
ZWRfbXVsdGlwbGljaWF0aW9uKSB7CisgICAgICAgICAgICBNdWx0aXBseUJ5VUludDMyKGJhc2Up
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBOb3cgZG8gdGhlIHNhbWUgdGhpbmcg
YXMgYSBiaWdudW0uCisgICAgICAgIHdoaWxlIChtYXNrICE9IDApIHsKKyAgICAgICAgICAgIFNx
dWFyZSgpOworICAgICAgICAgICAgaWYgKChwb3dlcl9leHBvbmVudCAmIG1hc2spICE9IDApIHsK
KyAgICAgICAgICAgICAgICBNdWx0aXBseUJ5VUludDMyKGJhc2UpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgbWFzayA+Pj0gMTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8g
QW5kIGZpbmFsbHkgYWRkIHRoZSBzYXZlZCBzaGlmdHMuCisgICAgICAgIFNoaWZ0TGVmdChzaGlm
dHMgKiBwb3dlcl9leHBvbmVudCk7CisgICAgfQorICAgIAorICAgIAorICAgIC8vIFByZWNvbmRp
dGlvbjogdGhpcy9vdGhlciA8IDE2Yml0LgorICAgIHVpbnQxNl90IEJpZ251bTo6RGl2aWRlTW9k
dWxvSW50QmlnbnVtKGNvbnN0IEJpZ251bSYgb3RoZXIpIHsKKyAgICAgICAgQVNTRVJUKElzQ2xh
bXBlZCgpKTsKKyAgICAgICAgQVNTRVJUKG90aGVyLklzQ2xhbXBlZCgpKTsKKyAgICAgICAgQVNT
RVJUKG90aGVyLnVzZWRfZGlnaXRzXyA+IDApOworICAgICAgICAKKyAgICAgICAgLy8gRWFzeSBj
YXNlOiBpZiB3ZSBoYXZlIGxlc3MgZGlnaXRzIHRoYW4gdGhlIGRpdmlzb3IgdGhhbiB0aGUgcmVz
dWx0IGlzIDAuCisgICAgICAgIC8vIE5vdGU6IHRoaXMgaGFuZGxlcyB0aGUgY2FzZSB3aGVyZSB0
aGlzID09IDAsIHRvby4KKyAgICAgICAgaWYgKEJpZ2l0TGVuZ3RoKCkgPCBvdGhlci5CaWdpdExl
bmd0aCgpKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgQWxpZ24ob3RoZXIpOworICAgICAgICAKKyAgICAgICAgdWludDE2X3QgcmVzdWx0ID0g
MDsKKyAgICAgICAgCisgICAgICAgIC8vIFN0YXJ0IGJ5IHJlbW92aW5nIG11bHRpcGxlcyBvZiAn
b3RoZXInIHVudGlsIGJvdGggbnVtYmVycyBoYXZlIHRoZSBzYW1lCisgICAgICAgIC8vIG51bWJl
ciBvZiBkaWdpdHMuCisgICAgICAgIHdoaWxlIChCaWdpdExlbmd0aCgpID4gb3RoZXIuQmlnaXRM
ZW5ndGgoKSkgeworICAgICAgICAgICAgLy8gVGhpcyBuYWl2ZSBhcHByb2FjaCBpcyBleHRyZW1l
bHkgaW5lZmZpY2llbnQgaWYgdGhlIHRoaXMgZGl2aWRlZCBvdGhlcgorICAgICAgICAgICAgLy8g
bWlnaHQgYmUgYmlnLiBUaGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGZvciBkb3VibGVUb1N0
cmluZyB3aGVyZQorICAgICAgICAgICAgLy8gdGhlIHJlc3VsdCBzaG91bGQgYmUgc21hbGwgKGxl
c3MgdGhhbiAxMCkuCisgICAgICAgICAgICBBU1NFUlQob3RoZXIuYmlnaXRzX1tvdGhlci51c2Vk
X2RpZ2l0c18gLSAxXSA+PSAoKDEgPDwga0JpZ2l0U2l6ZSkgLyAxNikpOworICAgICAgICAgICAg
Ly8gUmVtb3ZlIHRoZSBtdWx0aXBsZXMgb2YgdGhlIGZpcnN0IGRpZ2l0LgorICAgICAgICAgICAg
Ly8gRXhhbXBsZSB0aGlzID0gMjMgYW5kIG90aGVyIGVxdWFscyA5LiAtPiBSZW1vdmUgMiBtdWx0
aXBsZXMuCisgICAgICAgICAgICByZXN1bHQgKz0gYmlnaXRzX1t1c2VkX2RpZ2l0c18gLSAxXTsK
KyAgICAgICAgICAgIFN1YnRyYWN0VGltZXMob3RoZXIsIGJpZ2l0c19bdXNlZF9kaWdpdHNfIC0g
MV0pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBU1NFUlQoQmlnaXRMZW5ndGgoKSA9
PSBvdGhlci5CaWdpdExlbmd0aCgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIEJvdGggYmlnbnVt
cyBhcmUgYXQgdGhlIHNhbWUgbGVuZ3RoIG5vdy4KKyAgICAgICAgLy8gU2luY2Ugb3RoZXIgaGFz
IG1vcmUgdGhhbiAwIGRpZ2l0cyB3ZSBrbm93IHRoYXQgdGhlIGFjY2VzcyB0bworICAgICAgICAv
LyBiaWdpdHNfW3VzZWRfZGlnaXRzXyAtIDFdIGlzIHNhZmUuCisgICAgICAgIENodW5rIHRoaXNf
YmlnaXQgPSBiaWdpdHNfW3VzZWRfZGlnaXRzXyAtIDFdOworICAgICAgICBDaHVuayBvdGhlcl9i
aWdpdCA9IG90aGVyLmJpZ2l0c19bb3RoZXIudXNlZF9kaWdpdHNfIC0gMV07CisgICAgICAgIAor
ICAgICAgICBpZiAob3RoZXIudXNlZF9kaWdpdHNfID09IDEpIHsKKyAgICAgICAgICAgIC8vIFNo
b3J0Y3V0IGZvciBlYXN5IChhbmQgY29tbW9uKSBjYXNlLgorICAgICAgICAgICAgaW50IHF1b3Rp
ZW50ID0gdGhpc19iaWdpdCAvIG90aGVyX2JpZ2l0OworICAgICAgICAgICAgYmlnaXRzX1t1c2Vk
X2RpZ2l0c18gLSAxXSA9IHRoaXNfYmlnaXQgLSBvdGhlcl9iaWdpdCAqIHF1b3RpZW50OworICAg
ICAgICAgICAgcmVzdWx0ICs9IHF1b3RpZW50OworICAgICAgICAgICAgQ2xhbXAoKTsKKyAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludCBk
aXZpc2lvbl9lc3RpbWF0ZSA9IHRoaXNfYmlnaXQgLyAob3RoZXJfYmlnaXQgKyAxKTsKKyAgICAg
ICAgcmVzdWx0ICs9IGRpdmlzaW9uX2VzdGltYXRlOworICAgICAgICBTdWJ0cmFjdFRpbWVzKG90
aGVyLCBkaXZpc2lvbl9lc3RpbWF0ZSk7CisgICAgICAgIAorICAgICAgICBpZiAob3RoZXJfYmln
aXQgKiAoZGl2aXNpb25fZXN0aW1hdGUgKyAxKSA+IHRoaXNfYmlnaXQpIHsKKyAgICAgICAgICAg
IC8vIE5vIG5lZWQgdG8gZXZlbiB0cnkgdG8gc3VidHJhY3QuIEV2ZW4gaWYgb3RoZXIncyByZW1h
aW5pbmcgZGlnaXRzIHdlcmUgMAorICAgICAgICAgICAgLy8gYW5vdGhlciBzdWJ0cmFjdGlvbiB3
b3VsZCBiZSB0b28gbXVjaC4KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHdoaWxlIChMZXNzRXF1YWwob3RoZXIsICp0aGlzKSkgeworICAg
ICAgICAgICAgU3VidHJhY3RCaWdudW0ob3RoZXIpOworICAgICAgICAgICAgcmVzdWx0Kys7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgUz4KKyAgICBzdGF0aWMgaW50IFNpemVJbkhleENoYXJzKFMgbnVt
YmVyKSB7CisgICAgICAgIEFTU0VSVChudW1iZXIgPiAwKTsKKyAgICAgICAgaW50IHJlc3VsdCA9
IDA7CisgICAgICAgIHdoaWxlIChudW1iZXIgIT0gMCkgeworICAgICAgICAgICAgbnVtYmVyID4+
PSA0OworICAgICAgICAgICAgcmVzdWx0Kys7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisgICAgCisgICAgCisgICAgc3RhdGljIGNoYXIgSGV4Q2hhck9mVmFsdWUo
aW50IHZhbHVlKSB7CisgICAgICAgIEFTU0VSVCgwIDw9IHZhbHVlICYmIHZhbHVlIDw9IDE2KTsK
KyAgICAgICAgaWYgKHZhbHVlIDwgMTApIHJldHVybiB2YWx1ZSArICcwJzsKKyAgICAgICAgcmV0
dXJuIHZhbHVlIC0gMTAgKyAnQSc7CisgICAgfQorICAgIAorICAgIAorICAgIGJvb2wgQmlnbnVt
OjpUb0hleFN0cmluZyhjaGFyKiBidWZmZXIsIGludCBidWZmZXJfc2l6ZSkgY29uc3QgeworICAg
ICAgICBBU1NFUlQoSXNDbGFtcGVkKCkpOworICAgICAgICAvLyBFYWNoIGJpZ2l0IG11c3QgYmUg
cHJpbnRhYmxlIGFzIHNlcGFyYXRlIGhleC1jaGFyYWN0ZXIuCisgICAgICAgIEFTU0VSVChrQmln
aXRTaXplICUgNCA9PSAwKTsKKyAgICAgICAgY29uc3QgaW50IGtIZXhDaGFyc1BlckJpZ2l0ID0g
a0JpZ2l0U2l6ZSAvIDQ7CisgICAgICAgIAorICAgICAgICBpZiAodXNlZF9kaWdpdHNfID09IDAp
IHsKKyAgICAgICAgICAgIGlmIChidWZmZXJfc2l6ZSA8IDIpIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIGJ1ZmZlclswXSA9ICcwJzsKKyAgICAgICAgICAgIGJ1ZmZlclsxXSA9ICdcMCc7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBhZGQgMSBm
b3IgdGhlIHRlcm1pbmF0aW5nICdcMCcgY2hhcmFjdGVyLgorICAgICAgICBpbnQgbmVlZGVkX2No
YXJzID0gKEJpZ2l0TGVuZ3RoKCkgLSAxKSAqIGtIZXhDaGFyc1BlckJpZ2l0ICsKKyAgICAgICAg
U2l6ZUluSGV4Q2hhcnMoYmlnaXRzX1t1c2VkX2RpZ2l0c18gLSAxXSkgKyAxOworICAgICAgICBp
ZiAobmVlZGVkX2NoYXJzID4gYnVmZmVyX3NpemUpIHJldHVybiBmYWxzZTsKKyAgICAgICAgaW50
IHN0cmluZ19pbmRleCA9IG5lZWRlZF9jaGFycyAtIDE7CisgICAgICAgIGJ1ZmZlcltzdHJpbmdf
aW5kZXgtLV0gPSAnXDAnOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4cG9uZW50Xzsg
KytpKSB7CisgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGtIZXhDaGFyc1BlckJpZ2l0
OyArK2opIHsKKyAgICAgICAgICAgICAgICBidWZmZXJbc3RyaW5nX2luZGV4LS1dID0gJzAnOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdXNl
ZF9kaWdpdHNfIC0gMTsgKytpKSB7CisgICAgICAgICAgICBDaHVuayBjdXJyZW50X2JpZ2l0ID0g
YmlnaXRzX1tpXTsKKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwga0hleENoYXJzUGVy
QmlnaXQ7ICsraikgeworICAgICAgICAgICAgICAgIGJ1ZmZlcltzdHJpbmdfaW5kZXgtLV0gPSBI
ZXhDaGFyT2ZWYWx1ZShjdXJyZW50X2JpZ2l0ICYgMHhGKTsKKyAgICAgICAgICAgICAgICBjdXJy
ZW50X2JpZ2l0ID4+PSA0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIEFu
ZCBmaW5hbGx5IHRoZSBsYXN0IGJpZ2l0LgorICAgICAgICBDaHVuayBtb3N0X3NpZ25pZmljYW50
X2JpZ2l0ID0gYmlnaXRzX1t1c2VkX2RpZ2l0c18gLSAxXTsKKyAgICAgICAgd2hpbGUgKG1vc3Rf
c2lnbmlmaWNhbnRfYmlnaXQgIT0gMCkgeworICAgICAgICAgICAgYnVmZmVyW3N0cmluZ19pbmRl
eC0tXSA9IEhleENoYXJPZlZhbHVlKG1vc3Rfc2lnbmlmaWNhbnRfYmlnaXQgJiAweEYpOworICAg
ICAgICAgICAgbW9zdF9zaWduaWZpY2FudF9iaWdpdCA+Pj0gNDsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgCisgICAgQmlnbnVtOjpDaHVuayBCaWdu
dW06OkJpZ2l0QXQoaW50IGluZGV4KSBjb25zdCB7CisgICAgICAgIGlmIChpbmRleCA+PSBCaWdp
dExlbmd0aCgpKSByZXR1cm4gMDsKKyAgICAgICAgaWYgKGluZGV4IDwgZXhwb25lbnRfKSByZXR1
cm4gMDsKKyAgICAgICAgcmV0dXJuIGJpZ2l0c19baW5kZXggLSBleHBvbmVudF9dOworICAgIH0K
KyAgICAKKyAgICAKKyAgICBpbnQgQmlnbnVtOjpDb21wYXJlKGNvbnN0IEJpZ251bSYgYSwgY29u
c3QgQmlnbnVtJiBiKSB7CisgICAgICAgIEFTU0VSVChhLklzQ2xhbXBlZCgpKTsKKyAgICAgICAg
QVNTRVJUKGIuSXNDbGFtcGVkKCkpOworICAgICAgICBpbnQgYmlnaXRfbGVuZ3RoX2EgPSBhLkJp
Z2l0TGVuZ3RoKCk7CisgICAgICAgIGludCBiaWdpdF9sZW5ndGhfYiA9IGIuQmlnaXRMZW5ndGgo
KTsKKyAgICAgICAgaWYgKGJpZ2l0X2xlbmd0aF9hIDwgYmlnaXRfbGVuZ3RoX2IpIHJldHVybiAt
MTsKKyAgICAgICAgaWYgKGJpZ2l0X2xlbmd0aF9hID4gYmlnaXRfbGVuZ3RoX2IpIHJldHVybiAr
MTsKKyAgICAgICAgZm9yIChpbnQgaSA9IGJpZ2l0X2xlbmd0aF9hIC0gMTsgaSA+PSBNaW4oYS5l
eHBvbmVudF8sIGIuZXhwb25lbnRfKTsgLS1pKSB7CisgICAgICAgICAgICBDaHVuayBiaWdpdF9h
ID0gYS5CaWdpdEF0KGkpOworICAgICAgICAgICAgQ2h1bmsgYmlnaXRfYiA9IGIuQmlnaXRBdChp
KTsKKyAgICAgICAgICAgIGlmIChiaWdpdF9hIDwgYmlnaXRfYikgcmV0dXJuIC0xOworICAgICAg
ICAgICAgaWYgKGJpZ2l0X2EgPiBiaWdpdF9iKSByZXR1cm4gKzE7CisgICAgICAgICAgICAvLyBP
dGhlcndpc2UgdGhleSBhcmUgZXF1YWwgdXAgdG8gdGhpcyBkaWdpdC4gVHJ5IHRoZSBuZXh0IGRp
Z2l0LgorICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICAKKyAg
ICBpbnQgQmlnbnVtOjpQbHVzQ29tcGFyZShjb25zdCBCaWdudW0mIGEsIGNvbnN0IEJpZ251bSYg
YiwgY29uc3QgQmlnbnVtJiBjKSB7CisgICAgICAgIEFTU0VSVChhLklzQ2xhbXBlZCgpKTsKKyAg
ICAgICAgQVNTRVJUKGIuSXNDbGFtcGVkKCkpOworICAgICAgICBBU1NFUlQoYy5Jc0NsYW1wZWQo
KSk7CisgICAgICAgIGlmIChhLkJpZ2l0TGVuZ3RoKCkgPCBiLkJpZ2l0TGVuZ3RoKCkpIHsKKyAg
ICAgICAgICAgIHJldHVybiBQbHVzQ29tcGFyZShiLCBhLCBjKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoYS5CaWdpdExlbmd0aCgpICsgMSA8IGMuQmlnaXRMZW5ndGgoKSkgcmV0dXJuIC0xOwor
ICAgICAgICBpZiAoYS5CaWdpdExlbmd0aCgpID4gYy5CaWdpdExlbmd0aCgpKSByZXR1cm4gKzE7
CisgICAgICAgIC8vIFRoZSBleHBvbmVudCBlbmNvZGVzIDAtYmlnaXRzLiBTbyBpZiB0aGVyZSBh
cmUgbW9yZSAwLWRpZ2l0cyBpbiAnYScgdGhhbgorICAgICAgICAvLyAnYicgaGFzIGRpZ2l0cywg
dGhlbiB0aGUgYmlnaXQtbGVuZ3RoIG9mICdhJysnYicgbXVzdCBiZSBlcXVhbCB0byB0aGUgb25l
CisgICAgICAgIC8vIG9mICdhJy4KKyAgICAgICAgaWYgKGEuZXhwb25lbnRfID49IGIuQmlnaXRM
ZW5ndGgoKSAmJiBhLkJpZ2l0TGVuZ3RoKCkgPCBjLkJpZ2l0TGVuZ3RoKCkpIHsKKyAgICAgICAg
ICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQ2h1bmsgYm9ycm93
ID0gMDsKKyAgICAgICAgLy8gU3RhcnRpbmcgYXQgbWluX2V4cG9uZW50IGFsbCBkaWdpdHMgYXJl
ID09IDAuIFNvIG5vIG5lZWQgdG8gY29tcGFyZSB0aGVtLgorICAgICAgICBpbnQgbWluX2V4cG9u
ZW50ID0gTWluKE1pbihhLmV4cG9uZW50XywgYi5leHBvbmVudF8pLCBjLmV4cG9uZW50Xyk7Cisg
ICAgICAgIGZvciAoaW50IGkgPSBjLkJpZ2l0TGVuZ3RoKCkgLSAxOyBpID49IG1pbl9leHBvbmVu
dDsgLS1pKSB7CisgICAgICAgICAgICBDaHVuayBjaHVua19hID0gYS5CaWdpdEF0KGkpOworICAg
ICAgICAgICAgQ2h1bmsgY2h1bmtfYiA9IGIuQmlnaXRBdChpKTsKKyAgICAgICAgICAgIENodW5r
IGNodW5rX2MgPSBjLkJpZ2l0QXQoaSk7CisgICAgICAgICAgICBDaHVuayBzdW0gPSBjaHVua19h
ICsgY2h1bmtfYjsKKyAgICAgICAgICAgIGlmIChzdW0gPiBjaHVua19jICsgYm9ycm93KSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuICsxOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBib3Jyb3cgPSBjaHVua19jICsgYm9ycm93IC0gc3VtOworICAgICAgICAgICAgICAg
IGlmIChib3Jyb3cgPiAxKSByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgYm9ycm93IDw8PSBr
QmlnaXRTaXplOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChib3Jyb3cg
PT0gMCkgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgCisgICAgCisg
ICAgdm9pZCBCaWdudW06OkNsYW1wKCkgeworICAgICAgICB3aGlsZSAodXNlZF9kaWdpdHNfID4g
MCAmJiBiaWdpdHNfW3VzZWRfZGlnaXRzXyAtIDFdID09IDApIHsKKyAgICAgICAgICAgIHVzZWRf
ZGlnaXRzXy0tOworICAgICAgICB9CisgICAgICAgIGlmICh1c2VkX2RpZ2l0c18gPT0gMCkgewor
ICAgICAgICAgICAgLy8gWmVyby4KKyAgICAgICAgICAgIGV4cG9uZW50XyA9IDA7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgCisgICAgYm9vbCBCaWdudW06OklzQ2xhbXBlZCgpIGNvbnN0
IHsKKyAgICAgICAgcmV0dXJuIHVzZWRfZGlnaXRzXyA9PSAwIHx8IGJpZ2l0c19bdXNlZF9kaWdp
dHNfIC0gMV0gIT0gMDsKKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06Olplcm8o
KSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdXNlZF9kaWdpdHNfOyArK2kpIHsKKyAg
ICAgICAgICAgIGJpZ2l0c19baV0gPSAwOworICAgICAgICB9CisgICAgICAgIHVzZWRfZGlnaXRz
XyA9IDA7CisgICAgICAgIGV4cG9uZW50XyA9IDA7CisgICAgfQorICAgIAorICAgIAorICAgIHZv
aWQgQmlnbnVtOjpBbGlnbihjb25zdCBCaWdudW0mIG90aGVyKSB7CisgICAgICAgIGlmIChleHBv
bmVudF8gPiBvdGhlci5leHBvbmVudF8pIHsKKyAgICAgICAgICAgIC8vIElmICJYIiByZXByZXNl
bnRzIGEgImhpZGRlbiIgZGlnaXQgKGJ5IHRoZSBleHBvbmVudCkgdGhlbiB3ZSBhcmUgaW4gdGhl
CisgICAgICAgICAgICAvLyBmb2xsb3dpbmcgY2FzZSAoYSA9PSB0aGlzLCBiID09IG90aGVyKToK
KyAgICAgICAgICAgIC8vIGE6ICBhYWFhYWFYWFhYICAgb3IgYTogICBhYWFhYVhYWAorICAgICAg
ICAgICAgLy8gYjogICAgIGJiYmJiYlggICAgICBiOiBiYmJiYmJiYlhYCisgICAgICAgICAgICAv
LyBXZSByZXBsYWNlIHNvbWUgb2YgdGhlIGhpZGRlbiBkaWdpdHMgKFgpIG9mIGEgd2l0aCAwIGRp
Z2l0cy4KKyAgICAgICAgICAgIC8vIGE6ICBhYWFhYWEwMDBYICAgb3IgYTogICBhYWFhYTBYWAor
ICAgICAgICAgICAgaW50IHplcm9fZGlnaXRzID0gZXhwb25lbnRfIC0gb3RoZXIuZXhwb25lbnRf
OworICAgICAgICAgICAgRW5zdXJlQ2FwYWNpdHkodXNlZF9kaWdpdHNfICsgemVyb19kaWdpdHMp
OworICAgICAgICAgICAgZm9yIChpbnQgaSA9IHVzZWRfZGlnaXRzXyAtIDE7IGkgPj0gMDsgLS1p
KSB7CisgICAgICAgICAgICAgICAgYmlnaXRzX1tpICsgemVyb19kaWdpdHNdID0gYmlnaXRzX1tp
XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgemVyb19k
aWdpdHM7ICsraSkgeworICAgICAgICAgICAgICAgIGJpZ2l0c19baV0gPSAwOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdXNlZF9kaWdpdHNfICs9IHplcm9fZGlnaXRzOworICAgICAgICAg
ICAgZXhwb25lbnRfIC09IHplcm9fZGlnaXRzOworICAgICAgICAgICAgQVNTRVJUKHVzZWRfZGln
aXRzXyA+PSAwKTsKKyAgICAgICAgICAgIEFTU0VSVChleHBvbmVudF8gPj0gMCk7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06OkJpZ2l0c1NoaWZ0TGVmdChp
bnQgc2hpZnRfYW1vdW50KSB7CisgICAgICAgIEFTU0VSVChzaGlmdF9hbW91bnQgPCBrQmlnaXRT
aXplKTsKKyAgICAgICAgQVNTRVJUKHNoaWZ0X2Ftb3VudCA+PSAwKTsKKyAgICAgICAgQ2h1bmsg
Y2FycnkgPSAwOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHVzZWRfZGlnaXRzXzsgKytp
KSB7CisgICAgICAgICAgICBDaHVuayBuZXdfY2FycnkgPSBiaWdpdHNfW2ldID4+IChrQmlnaXRT
aXplIC0gc2hpZnRfYW1vdW50KTsKKyAgICAgICAgICAgIGJpZ2l0c19baV0gPSAoKGJpZ2l0c19b
aV0gPDwgc2hpZnRfYW1vdW50KSArIGNhcnJ5KSAmIGtCaWdpdE1hc2s7CisgICAgICAgICAgICBj
YXJyeSA9IG5ld19jYXJyeTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2FycnkgIT0gMCkgewor
ICAgICAgICAgICAgYmlnaXRzX1t1c2VkX2RpZ2l0c19dID0gY2Fycnk7CisgICAgICAgICAgICB1
c2VkX2RpZ2l0c18rKzsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICB2b2lkIEJp
Z251bTo6U3VidHJhY3RUaW1lcyhjb25zdCBCaWdudW0mIG90aGVyLCBpbnQgZmFjdG9yKSB7Cisg
ICAgICAgIEFTU0VSVChleHBvbmVudF8gPD0gb3RoZXIuZXhwb25lbnRfKTsKKyAgICAgICAgaWYg
KGZhY3RvciA8IDMpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmFjdG9yOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICBTdWJ0cmFjdEJpZ251bShvdGhlcik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgQ2h1bmsgYm9ycm93
ID0gMDsKKyAgICAgICAgaW50IGV4cG9uZW50X2RpZmYgPSBvdGhlci5leHBvbmVudF8gLSBleHBv
bmVudF87CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3RoZXIudXNlZF9kaWdpdHNfOyAr
K2kpIHsKKyAgICAgICAgICAgIERvdWJsZUNodW5rIHByb2R1Y3QgPSBzdGF0aWNfY2FzdDxEb3Vi
bGVDaHVuaz4oZmFjdG9yKSAqIG90aGVyLmJpZ2l0c19baV07CisgICAgICAgICAgICBEb3VibGVD
aHVuayByZW1vdmUgPSBib3Jyb3cgKyBwcm9kdWN0OworICAgICAgICAgICAgQ2h1bmsgZGlmZmVy
ZW5jZSA9IGJpZ2l0c19baSArIGV4cG9uZW50X2RpZmZdIC0gKHJlbW92ZSAmIGtCaWdpdE1hc2sp
OworICAgICAgICAgICAgYmlnaXRzX1tpICsgZXhwb25lbnRfZGlmZl0gPSBkaWZmZXJlbmNlICYg
a0JpZ2l0TWFzazsKKyAgICAgICAgICAgIGJvcnJvdyA9IHN0YXRpY19jYXN0PENodW5rPigoZGlm
ZmVyZW5jZSA+PiAoa0NodW5rU2l6ZSAtIDEpKSArCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKHJlbW92ZSA+PiBrQmlnaXRTaXplKSk7CisgICAgICAgIH0KKyAgICAg
ICAgZm9yIChpbnQgaSA9IG90aGVyLnVzZWRfZGlnaXRzXyArIGV4cG9uZW50X2RpZmY7IGkgPCB1
c2VkX2RpZ2l0c187ICsraSkgeworICAgICAgICAgICAgaWYgKGJvcnJvdyA9PSAwKSByZXR1cm47
CisgICAgICAgICAgICBDaHVuayBkaWZmZXJlbmNlID0gYmlnaXRzX1tpXSAtIGJvcnJvdzsKKyAg
ICAgICAgICAgIGJpZ2l0c19baV0gPSBkaWZmZXJlbmNlICYga0JpZ2l0TWFzazsKKyAgICAgICAg
ICAgIGJvcnJvdyA9IGRpZmZlcmVuY2UgPj4gKGtDaHVua1NpemUgLSAxKTsKKyAgICAgICAgICAg
ICsraTsKKyAgICAgICAgfQorICAgICAgICBDbGFtcCgpOworICAgIH0KKyAgICAKKyAgICAKK30g
IC8vIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbgorCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9iaWdudW0uaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9iaWdudW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYTc1MDU4MWFh
Nzk3MjI5ZTc4ODc5OWEyYjBiMjViOWZkMjQ4ZGIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS5oCkBAIC0wLDAgKzEsMTQ1IEBACisvLyBD
b3B5cmlnaHQgMjAxMCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNj
bGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8v
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZm5kZWYgRE9VQkxFX0NPTlZFUlNJT05fQklHTlVN
X0hfCisjZGVmaW5lIERPVUJMRV9DT05WRVJTSU9OX0JJR05VTV9IXworCisjaW5jbHVkZSAidXRp
bHMuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7
CisgICAgCisgICAgY2xhc3MgQmlnbnVtIHsKKyAgICBwdWJsaWM6CisgICAgICAgIC8vIDM1ODQg
PSAxMjggKiAyOC4gV2UgY2FuIHJlcHJlc2VudCAyXjM1ODQgPiAxMF4xMDAwIGFjY3VyYXRlbHku
CisgICAgICAgIC8vIFRoaXMgYmlnbnVtIGNhbiBlbmNvZGUgbXVjaCBiaWdnZXIgbnVtYmVycywg
c2luY2UgaXQgY29udGFpbnMgYW4KKyAgICAgICAgLy8gZXhwb25lbnQuCisgICAgICAgIHN0YXRp
YyBjb25zdCBpbnQga01heFNpZ25pZmljYW50Qml0cyA9IDM1ODQ7CisgICAgICAgIAorICAgICAg
ICBCaWdudW0oKTsKKyAgICAgICAgdm9pZCBBc3NpZ25VSW50MTYodWludDE2X3QgdmFsdWUpOwor
ICAgICAgICB2b2lkIEFzc2lnblVJbnQ2NCh1aW50NjRfdCB2YWx1ZSk7CisgICAgICAgIHZvaWQg
QXNzaWduQmlnbnVtKGNvbnN0IEJpZ251bSYgb3RoZXIpOworICAgICAgICAKKyAgICAgICAgdm9p
ZCBBc3NpZ25EZWNpbWFsU3RyaW5nKFZlY3Rvcjxjb25zdCBjaGFyPiB2YWx1ZSk7CisgICAgICAg
IHZvaWQgQXNzaWduSGV4U3RyaW5nKFZlY3Rvcjxjb25zdCBjaGFyPiB2YWx1ZSk7CisgICAgICAg
IAorICAgICAgICB2b2lkIEFzc2lnblBvd2VyVUludDE2KHVpbnQxNl90IGJhc2UsIGludCBleHBv
bmVudCk7CisgICAgICAgIAorICAgICAgICB2b2lkIEFkZFVJbnQxNih1aW50MTZfdCBvcGVyYW5k
KTsKKyAgICAgICAgdm9pZCBBZGRVSW50NjQodWludDY0X3Qgb3BlcmFuZCk7CisgICAgICAgIHZv
aWQgQWRkQmlnbnVtKGNvbnN0IEJpZ251bSYgb3RoZXIpOworICAgICAgICAvLyBQcmVjb25kaXRp
b246IHRoaXMgPj0gb3RoZXIuCisgICAgICAgIHZvaWQgU3VidHJhY3RCaWdudW0oY29uc3QgQmln
bnVtJiBvdGhlcik7CisgICAgICAgIAorICAgICAgICB2b2lkIFNxdWFyZSgpOworICAgICAgICB2
b2lkIFNoaWZ0TGVmdChpbnQgc2hpZnRfYW1vdW50KTsKKyAgICAgICAgdm9pZCBNdWx0aXBseUJ5
VUludDMyKHVpbnQzMl90IGZhY3Rvcik7CisgICAgICAgIHZvaWQgTXVsdGlwbHlCeVVJbnQ2NCh1
aW50NjRfdCBmYWN0b3IpOworICAgICAgICB2b2lkIE11bHRpcGx5QnlQb3dlck9mVGVuKGludCBl
eHBvbmVudCk7CisgICAgICAgIHZvaWQgVGltZXMxMCgpIHsgcmV0dXJuIE11bHRpcGx5QnlVSW50
MzIoMTApOyB9CisgICAgICAgIC8vIFBzZXVkb2NvZGU6CisgICAgICAgIC8vICBpbnQgcmVzdWx0
ID0gdGhpcyAvIG90aGVyOworICAgICAgICAvLyAgdGhpcyA9IHRoaXMgJSBvdGhlcjsKKyAgICAg
ICAgLy8gSW4gdGhlIHdvcnN0IGNhc2UgdGhpcyBmdW5jdGlvbiBpcyBpbiBPKHRoaXMvb3RoZXIp
LgorICAgICAgICB1aW50MTZfdCBEaXZpZGVNb2R1bG9JbnRCaWdudW0oY29uc3QgQmlnbnVtJiBv
dGhlcik7CisgICAgICAgIAorICAgICAgICBib29sIFRvSGV4U3RyaW5nKGNoYXIqIGJ1ZmZlciwg
aW50IGJ1ZmZlcl9zaXplKSBjb25zdDsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBpbnQgQ29t
cGFyZShjb25zdCBCaWdudW0mIGEsIGNvbnN0IEJpZ251bSYgYik7CisgICAgICAgIHN0YXRpYyBi
b29sIEVxdWFsKGNvbnN0IEJpZ251bSYgYSwgY29uc3QgQmlnbnVtJiBiKSB7CisgICAgICAgICAg
ICByZXR1cm4gQ29tcGFyZShhLCBiKSA9PSAwOworICAgICAgICB9CisgICAgICAgIHN0YXRpYyBi
b29sIExlc3NFcXVhbChjb25zdCBCaWdudW0mIGEsIGNvbnN0IEJpZ251bSYgYikgeworICAgICAg
ICAgICAgcmV0dXJuIENvbXBhcmUoYSwgYikgPD0gMDsKKyAgICAgICAgfQorICAgICAgICBzdGF0
aWMgYm9vbCBMZXNzKGNvbnN0IEJpZ251bSYgYSwgY29uc3QgQmlnbnVtJiBiKSB7CisgICAgICAg
ICAgICByZXR1cm4gQ29tcGFyZShhLCBiKSA8IDA7CisgICAgICAgIH0KKyAgICAgICAgLy8gUmV0
dXJucyBDb21wYXJlKGEgKyBiLCBjKTsKKyAgICAgICAgc3RhdGljIGludCBQbHVzQ29tcGFyZShj
b25zdCBCaWdudW0mIGEsIGNvbnN0IEJpZ251bSYgYiwgY29uc3QgQmlnbnVtJiBjKTsKKyAgICAg
ICAgLy8gUmV0dXJucyBhICsgYiA9PSBjCisgICAgICAgIHN0YXRpYyBib29sIFBsdXNFcXVhbChj
b25zdCBCaWdudW0mIGEsIGNvbnN0IEJpZ251bSYgYiwgY29uc3QgQmlnbnVtJiBjKSB7CisgICAg
ICAgICAgICByZXR1cm4gUGx1c0NvbXBhcmUoYSwgYiwgYykgPT0gMDsKKyAgICAgICAgfQorICAg
ICAgICAvLyBSZXR1cm5zIGEgKyBiIDw9IGMKKyAgICAgICAgc3RhdGljIGJvb2wgUGx1c0xlc3NF
cXVhbChjb25zdCBCaWdudW0mIGEsIGNvbnN0IEJpZ251bSYgYiwgY29uc3QgQmlnbnVtJiBjKSB7
CisgICAgICAgICAgICByZXR1cm4gUGx1c0NvbXBhcmUoYSwgYiwgYykgPD0gMDsKKyAgICAgICAg
fQorICAgICAgICAvLyBSZXR1cm5zIGEgKyBiIDwgYworICAgICAgICBzdGF0aWMgYm9vbCBQbHVz
TGVzcyhjb25zdCBCaWdudW0mIGEsIGNvbnN0IEJpZ251bSYgYiwgY29uc3QgQmlnbnVtJiBjKSB7
CisgICAgICAgICAgICByZXR1cm4gUGx1c0NvbXBhcmUoYSwgYiwgYykgPCAwOworICAgICAgICB9
CisgICAgcHJpdmF0ZToKKyAgICAgICAgdHlwZWRlZiB1aW50MzJfdCBDaHVuazsKKyAgICAgICAg
dHlwZWRlZiB1aW50NjRfdCBEb3VibGVDaHVuazsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBj
b25zdCBpbnQga0NodW5rU2l6ZSA9IHNpemVvZihDaHVuaykgKiA4OworICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IGtEb3VibGVDaHVua1NpemUgPSBzaXplb2YoRG91YmxlQ2h1bmspICogODsKKyAg
ICAgICAgLy8gV2l0aCBiaWdpdCBzaXplIG9mIDI4IHdlIGxvb3NlIHNvbWUgYml0cywgYnV0IGEg
ZG91YmxlIHN0aWxsIGZpdHMgZWFzaWx5CisgICAgICAgIC8vIGludG8gdHdvIGNodW5rcywgYW5k
IG1vcmUgaW1wb3J0YW50bHkgd2UgY2FuIHVzZSB0aGUgQ29tYmEgbXVsdGlwbGljYXRpb24uCisg
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQga0JpZ2l0U2l6ZSA9IDI4OworICAgICAgICBzdGF0aWMg
Y29uc3QgQ2h1bmsga0JpZ2l0TWFzayA9ICgxIDw8IGtCaWdpdFNpemUpIC0gMTsKKyAgICAgICAg
Ly8gRXZlcnkgaW5zdGFuY2UgYWxsb2NhdGVzIGtCaWdpdExlbmd0aCBjaHVua3Mgb24gdGhlIHN0
YWNrLiBCaWdudW1zIGNhbm5vdAorICAgICAgICAvLyBncm93LiBUaGVyZSBhcmUgbm8gY2hlY2tz
IGlmIHRoZSBzdGFjay1hbGxvY2F0ZWQgc3BhY2UgaXMgc3VmZmljaWVudC4KKyAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBrQmlnaXRDYXBhY2l0eSA9IGtNYXhTaWduaWZpY2FudEJpdHMgLyBrQmln
aXRTaXplOworICAgICAgICAKKyAgICAgICAgdm9pZCBFbnN1cmVDYXBhY2l0eShpbnQgc2l6ZSkg
eworICAgICAgICAgICAgaWYgKHNpemUgPiBrQmlnaXRDYXBhY2l0eSkgeworICAgICAgICAgICAg
ICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdm9p
ZCBBbGlnbihjb25zdCBCaWdudW0mIG90aGVyKTsKKyAgICAgICAgdm9pZCBDbGFtcCgpOworICAg
ICAgICBib29sIElzQ2xhbXBlZCgpIGNvbnN0OworICAgICAgICB2b2lkIFplcm8oKTsKKyAgICAg
ICAgLy8gUmVxdWlyZXMgdGhpcyB0byBoYXZlIGVub3VnaCBjYXBhY2l0eSAobm8gdGVzdHMgZG9u
ZSkuCisgICAgICAgIC8vIFVwZGF0ZXMgdXNlZF9kaWdpdHNfIGlmIG5lY2Vzc2FyeS4KKyAgICAg
ICAgLy8gc2hpZnRfYW1vdW50IG11c3QgYmUgPCBrQmlnaXRTaXplLgorICAgICAgICB2b2lkIEJp
Z2l0c1NoaWZ0TGVmdChpbnQgc2hpZnRfYW1vdW50KTsKKyAgICAgICAgLy8gQmlnaXRMZW5ndGgg
aW5jbHVkZXMgdGhlICJoaWRkZW4iIGRpZ2l0cyBlbmNvZGVkIGluIHRoZSBleHBvbmVudC4KKyAg
ICAgICAgaW50IEJpZ2l0TGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gdXNlZF9kaWdpdHNfICsgZXhw
b25lbnRfOyB9CisgICAgICAgIENodW5rIEJpZ2l0QXQoaW50IGluZGV4KSBjb25zdDsKKyAgICAg
ICAgdm9pZCBTdWJ0cmFjdFRpbWVzKGNvbnN0IEJpZ251bSYgb3RoZXIsIGludCBmYWN0b3IpOwor
ICAgICAgICAKKyAgICAgICAgQ2h1bmsgYmlnaXRzX2J1ZmZlcl9ba0JpZ2l0Q2FwYWNpdHldOwor
ICAgICAgICAvLyBBIHZlY3RvciBiYWNrZWQgYnkgYmlnaXRzX2J1ZmZlcl8uIFRoaXMgd2F5IGFj
Y2Vzc2VzIHRvIHRoZSBhcnJheSBhcmUKKyAgICAgICAgLy8gY2hlY2tlZCBmb3Igb3V0LW9mLWJv
dW5kcyBlcnJvcnMuCisgICAgICAgIFZlY3RvcjxDaHVuaz4gYmlnaXRzXzsKKyAgICAgICAgaW50
IHVzZWRfZGlnaXRzXzsKKyAgICAgICAgLy8gVGhlIEJpZ251bSdzIHZhbHVlIGVxdWFscyB2YWx1
ZShiaWdpdHNfKSAqIDJeKGV4cG9uZW50XyAqIGtCaWdpdFNpemUpLgorICAgICAgICBpbnQgZXhw
b25lbnRfOworICAgICAgICAKKyAgICAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEJpZ251
bSk7CisgICAgfTsKKyAgICAKK30gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbgorCit9
IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmICAvLyBET1VCTEVfQ09OVkVSU0lPTl9CSUdOVU1f
SF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9jYWNoZWQtcG93
ZXJzLmNjIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2NhY2hlZC1wb3dlcnMuY2MK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYThlNzAwNDdkOWVlMTc1MDM4MmZiNjdkOGQ0YzgzYWQ3YTFhYjg3MAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9jYWNoZWQtcG93
ZXJzLmNjCkBAIC0wLDAgKzEsMTg5IEBACisvLyBDb3B5cmlnaHQgMjAwNi0yMDA4IHRoZSBWOCBw
cm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLwor
Ly8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPG1h
dGguaD4KKworI2luY2x1ZGUgIlVudXNlZFBhcmFtLmgiCisjaW5jbHVkZSAidXRpbHMuaCIKKyNp
bmNsdWRlICJjYWNoZWQtcG93ZXJzLmgiCisKK25hbWVzcGFjZSBXVEYgeworCituYW1lc3BhY2Ug
ZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIHN0cnVjdCBDYWNoZWRQb3dlciB7CisgICAg
ICAgIHVpbnQ2NF90IHNpZ25pZmljYW5kOworICAgICAgICBpbnQxNl90IGJpbmFyeV9leHBvbmVu
dDsKKyAgICAgICAgaW50MTZfdCBkZWNpbWFsX2V4cG9uZW50OworICAgIH07CisgICAgCisgICAg
c3RhdGljIGludCBrQ2FjaGVkUG93ZXJzTGVuZ3RoID0gMTsKKyAgICBzdGF0aWMgaW50IGtDYWNo
ZWRQb3dlcnNPZmZzZXQgPSAxOworICAgIHN0YXRpYyBjb25zdCBkb3VibGUga0RfMV9MT0cyXzEw
ID0gMC4zMDEwMjk5OTU2NjM5ODExNDsgIC8vICAxIC8gbGcoMTApCisgICAgc3RhdGljIENhY2hl
ZFBvd2VyKiBrQ2FjaGVkUG93ZXJzID0gMDsKKyAgICAKKyAgICBpbnQgUG93ZXJzT2ZUZW5DYWNo
ZTo6a0RlY2ltYWxFeHBvbmVudERpc3RhbmNlID0gMTsKKyAgICBpbnQgUG93ZXJzT2ZUZW5DYWNo
ZTo6a01pbkRlY2ltYWxFeHBvbmVudCA9IDE7CisgICAgaW50IFBvd2Vyc09mVGVuQ2FjaGU6OmtN
YXhEZWNpbWFsRXhwb25lbnQgPSAxOworICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZSgpIHsKKyAg
ICAgICAgc3RhdGljIENhY2hlZFBvd2VyIGNhY2hlZFBvd2Vyc1tdID0geworICAgICAgICAgICAg
e1VJTlQ2NF8yUEFSVF9DKDB4ZmE4ZmQ1YTAsIDA4MWMwMjg4KSwgLTEyMjAsIC0zNDh9LAorICAg
ICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YmFhZWUxN2YsIGEyM2ViZjc2KSwgLTExOTMsIC0z
NDB9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4OGIxNmZiMjAsIDMwNTVhYzc2KSwg
LTExNjYsIC0zMzJ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4Y2Y0Mjg5NGEsIDVk
Y2UzNWVhKSwgLTExNDAsIC0zMjR9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4OWE2
YmIwYWEsIDU1NjUzYjJkKSwgLTExMTMsIC0zMTZ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFS
VF9DKDB4ZTYxYWNmMDMsIDNkMWE0NWRmKSwgLTEwODcsIC0zMDh9LAorICAgICAgICAgICAge1VJ
TlQ2NF8yUEFSVF9DKDB4YWI3MGZlMTcsIGM3OWFjNmNhKSwgLTEwNjAsIC0zMDB9LAorICAgICAg
ICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZmY3N2IxZmMsIGJlYmNkYzRmKSwgLTEwMzQsIC0yOTJ9
LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YmU1NjkxZWYsIDQxNmJkNjBjKSwgLTEw
MDcsIC0yODR9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4OGRkMDFmYWQsIDkwN2Zm
YzNjKSwgLTk4MCwgLTI3Nn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhkMzUxNWMy
OCwgMzE1NTlhODMpLCAtOTU0LCAtMjY4fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygw
eDlkNzFhYzhmLCBhZGE2YzliNSksIC05MjcsIC0yNjB9LAorICAgICAgICAgICAge1VJTlQ2NF8y
UEFSVF9DKDB4ZWE5YzIyNzcsIDIzZWU4YmNiKSwgLTkwMSwgLTI1Mn0sCisgICAgICAgICAgICB7
VUlOVDY0XzJQQVJUX0MoMHhhZWNjNDk5MSwgNDA3ODUzNmQpLCAtODc0LCAtMjQ0fSwKKyAgICAg
ICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDgyM2MxMjc5LCA1ZGI2Y2U1NyksIC04NDcsIC0yMzZ9
LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YzIxMDk0MzYsIDRkZmI1NjM3KSwgLTgy
MSwgLTIyOH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg5MDk2ZWE2ZiwgMzg0ODk4
NGYpLCAtNzk0LCAtMjIwfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGQ3NzQ4NWNi
LCAyNTgyM2FjNyksIC03NjgsIC0yMTJ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4
YTA4NmNmY2QsIDk3YmY5N2Y0KSwgLTc0MSwgLTIwNH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQ
QVJUX0MoMHhlZjM0MGE5OCwgMTcyYWFjZTUpLCAtNzE1LCAtMTk2fSwKKyAgICAgICAgICAgIHtV
SU5UNjRfMlBBUlRfQygweGIyMzg2N2ZiLCAyYTM1YjI4ZSksIC02ODgsIC0xODh9LAorICAgICAg
ICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ODRjOGQ0ZGYsIGQyYzYzZjNiKSwgLTY2MSwgLTE4MH0s
CisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhjNWRkNDQyNywgMWFkM2NkYmEpLCAtNjM1
LCAtMTcyfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDkzNmI5ZmNlLCBiYjI1Yzk5
NiksIC02MDgsIC0xNjR9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZGJhYzZjMjQs
IDdkNjJhNTg0KSwgLTU4MiwgLTE1Nn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhh
M2FiNjY1OCwgMGQ1ZmRhZjYpLCAtNTU1LCAtMTQ4fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBB
UlRfQygweGYzZTJmODkzLCBkZWMzZjEyNiksIC01MjksIC0xNDB9LAorICAgICAgICAgICAge1VJ
TlQ2NF8yUEFSVF9DKDB4YjViNWFkYTgsIGFhZmY4MGI4KSwgLTUwMiwgLTEzMn0sCisgICAgICAg
ICAgICB7VUlOVDY0XzJQQVJUX0MoMHg4NzYyNWYwNSwgNmM3YzRhOGIpLCAtNDc1LCAtMTI0fSwK
KyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGM5YmNmZjYwLCAzNGMxMzA1MyksIC00NDks
IC0xMTZ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4OTY0ZTg1OGMsIDkxYmEyNjU1
KSwgLTQyMiwgLTEwOH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhkZmY5NzcyNCwg
NzAyOTdlYmQpLCAtMzk2LCAtMTAwfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGE2
ZGZiZDlmLCBiOGU1Yjg4ZiksIC0zNjksIC05Mn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJU
X0MoMHhmOGE5NWZjZiwgODg3NDdkOTQpLCAtMzQzLCAtODR9LAorICAgICAgICAgICAge1VJTlQ2
NF8yUEFSVF9DKDB4Yjk0NDcwOTMsIDhmYTg5YmNmKSwgLTMxNiwgLTc2fSwKKyAgICAgICAgICAg
IHtVSU5UNjRfMlBBUlRfQygweDhhMDhmMGY4LCBiZjBmMTU2YiksIC0yODksIC02OH0sCisgICAg
ICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhjZGIwMjU1NSwgNjUzMTMxYjYpLCAtMjYzLCAtNjB9
LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4OTkzZmUyYzYsIGQwN2I3ZmFjKSwgLTIz
NiwgLTUyfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGU0NWMxMGM0LCAyYTJiM2Iw
NiksIC0yMTAsIC00NH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhhYTI0MjQ5OSwg
Njk3MzkyZDMpLCAtMTgzLCAtMzZ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZmQ4
N2I1ZjIsIDgzMDBjYTBlKSwgLTE1NywgLTI4fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRf
QygweGJjZTUwODY0LCA5MjExMWFlYiksIC0xMzAsIC0yMH0sCisgICAgICAgICAgICB7VUlOVDY0
XzJQQVJUX0MoMHg4Y2JjY2MwOSwgNmY1MDg4Y2MpLCAtMTAzLCAtMTJ9LAorICAgICAgICAgICAg
e1VJTlQ2NF8yUEFSVF9DKDB4ZDFiNzE3NTgsIGUyMTk2NTJjKSwgLTc3LCAtNH0sCisgICAgICAg
ICAgICB7VUlOVDY0XzJQQVJUX0MoMHg5YzQwMDAwMCwgMDAwMDAwMDApLCAtNTAsIDR9LAorICAg
ICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZThkNGE1MTAsIDAwMDAwMDAwKSwgLTI0LCAxMn0s
CisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhhZDc4ZWJjNSwgYWM2MjAwMDApLCAzLCAy
MH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg4MTNmMzk3OCwgZjg5NDA5ODQpLCAz
MCwgMjh9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YzA5N2NlN2IsIGM5MDcxNWIz
KSwgNTYsIDM2fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDhmN2UzMmNlLCA3YmVh
NWM3MCksIDgzLCA0NH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhkNWQyMzhhNCwg
YWJlOTgwNjgpLCAxMDksIDUyfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDlmNGYy
NzI2LCAxNzlhMjI0NSksIDEzNiwgNjB9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4
ZWQ2M2EyMzEsIGQ0YzRmYjI3KSwgMTYyLCA2OH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJU
X0MoMHhiMGRlNjUzOCwgOGNjOGFkYTgpLCAxODksIDc2fSwKKyAgICAgICAgICAgIHtVSU5UNjRf
MlBBUlRfQygweDgzYzcwODhlLCAxYWFiNjVkYiksIDIxNiwgODR9LAorICAgICAgICAgICAge1VJ
TlQ2NF8yUEFSVF9DKDB4YzQ1ZDFkZjksIDQyNzExZDlhKSwgMjQyLCA5Mn0sCisgICAgICAgICAg
ICB7VUlOVDY0XzJQQVJUX0MoMHg5MjRkNjkyYywgYTYxYmU3NTgpLCAyNjksIDEwMH0sCisgICAg
ICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhkYTAxZWU2NCwgMWE3MDhkZWEpLCAyOTUsIDEwOH0s
CisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhhMjZkYTM5OSwgOWFlZjc3NGEpLCAzMjIs
IDExNn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhmMjA5Nzg3YiwgYjQ3ZDZiODUp
LCAzNDgsIDEyNH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhiNDU0ZTRhMSwgNzlk
ZDE4NzcpLCAzNzUsIDEzMn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg4NjViODY5
MiwgNWI5YmM1YzIpLCA0MDIsIDE0MH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhj
ODM1NTNjNSwgYzg5NjVkM2QpLCA0MjgsIDE0OH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJU
X0MoMHg5NTJhYjQ1YywgZmE5N2EwYjMpLCA0NTUsIDE1Nn0sCisgICAgICAgICAgICB7VUlOVDY0
XzJQQVJUX0MoMHhkZTQ2OWZiZCwgOTlhMDVmZTMpLCA0ODEsIDE2NH0sCisgICAgICAgICAgICB7
VUlOVDY0XzJQQVJUX0MoMHhhNTliYzIzNCwgZGIzOThjMjUpLCA1MDgsIDE3Mn0sCisgICAgICAg
ICAgICB7VUlOVDY0XzJQQVJUX0MoMHhmNmM2OWE3MiwgYTM5ODlmNWMpLCA1MzQsIDE4MH0sCisg
ICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhiN2RjYmY1MywgNTRlOWJlY2UpLCA1NjEsIDE4
OH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg4OGZjZjMxNywgZjIyMjQxZTIpLCA1
ODgsIDE5Nn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhjYzIwY2U5YiwgZDM1Yzc4
YTUpLCA2MTQsIDIwNH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg5ODE2NWFmMywg
N2IyMTUzZGYpLCA2NDEsIDIxMn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhlMmEw
YjVkYywgOTcxZjMwM2EpLCA2NjcsIDIyMH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0Mo
MHhhOGQ5ZDE1MywgNWNlM2IzOTYpLCA2OTQsIDIyOH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQ
QVJUX0MoMHhmYjliN2NkOSwgYTRhNzQ0M2MpLCA3MjAsIDIzNn0sCisgICAgICAgICAgICB7VUlO
VDY0XzJQQVJUX0MoMHhiYjc2NGM0YywgYTdhNDQ0MTApLCA3NDcsIDI0NH0sCisgICAgICAgICAg
ICB7VUlOVDY0XzJQQVJUX0MoMHg4YmFiOGVlZiwgYjY0MDljMWEpLCA3NzQsIDI1Mn0sCisgICAg
ICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhkMDFmZWYxMCwgYTY1Nzg0MmMpLCA4MDAsIDI2MH0s
CisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg5YjEwYTRlNSwgZTk5MTMxMjkpLCA4Mjcs
IDI2OH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhlNzEwOWJmYiwgYTE5YzBjOWQp
LCA4NTMsIDI3Nn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhhYzI4MjBkOSwgNjIz
YmY0MjkpLCA4ODAsIDI4NH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg4MDQ0NGI1
ZSwgN2FhN2NmODUpLCA5MDcsIDI5Mn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhi
ZjIxZTQ0MCwgMDNhY2RkMmQpLCA5MzMsIDMwMH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJU
X0MoMHg4ZTY3OWMyZiwgNWU0NGZmOGYpLCA5NjAsIDMwOH0sCisgICAgICAgICAgICB7VUlOVDY0
XzJQQVJUX0MoMHhkNDMzMTc5ZCwgOWM4Y2I4NDEpLCA5ODYsIDMxNn0sCisgICAgICAgICAgICB7
VUlOVDY0XzJQQVJUX0MoMHg5ZTE5ZGI5MiwgYjRlMzFiYTkpLCAxMDEzLCAzMjR9LAorICAgICAg
ICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZWI5NmJmNmUsIGJhZGY3N2Q5KSwgMTAzOSwgMzMyfSwK
KyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGFmODcwMjNiLCA5YmYwZWU2YiksIDEwNjYs
IDM0MH0sCisgICAgICAgIH07CisgICAgICAgIGtDYWNoZWRQb3dlcnMgPSBjYWNoZWRQb3dlcnM7
CisgICAgICAgIGtDYWNoZWRQb3dlcnNMZW5ndGggPSBBUlJBWV9TSVpFKGNhY2hlZFBvd2Vycyk7
CisgICAgICAgIGtDYWNoZWRQb3dlcnNPZmZzZXQgPSAtY2FjaGVkUG93ZXJzWzBdLmRlY2ltYWxf
ZXhwb25lbnQ7CisgICAgICAgIFBvd2Vyc09mVGVuQ2FjaGU6OmtEZWNpbWFsRXhwb25lbnREaXN0
YW5jZSA9IGtDYWNoZWRQb3dlcnNbMV0uZGVjaW1hbF9leHBvbmVudCAtIGtDYWNoZWRQb3dlcnNb
MF0uZGVjaW1hbF9leHBvbmVudDsKKyAgICAgICAgUG93ZXJzT2ZUZW5DYWNoZTo6a01pbkRlY2lt
YWxFeHBvbmVudCA9IGtDYWNoZWRQb3dlcnNbMF0uZGVjaW1hbF9leHBvbmVudDsKKyAgICAgICAg
UG93ZXJzT2ZUZW5DYWNoZTo6a01heERlY2ltYWxFeHBvbmVudCA9IGtDYWNoZWRQb3dlcnNba0Nh
Y2hlZFBvd2Vyc0xlbmd0aCAtIDFdLmRlY2ltYWxfZXhwb25lbnQ7CisgICAgfQorICAgIAorICAg
IHZvaWQgUG93ZXJzT2ZUZW5DYWNoZTo6R2V0Q2FjaGVkUG93ZXJGb3JCaW5hcnlFeHBvbmVudFJh
bmdlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBtaW5fZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1heF9leHBvbmVudCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBEaXlGcCogcG93ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBkZWNpbWFsX2V4cG9uZW50KSB7Cisg
ICAgICAgIFVOVVNFRF9QQVJBTShtYXhfZXhwb25lbnQpOworICAgICAgICBpbnQga1EgPSBEaXlG
cDo6a1NpZ25pZmljYW5kU2l6ZTsKKyAgICAgICAgZG91YmxlIGsgPSBjZWlsKChtaW5fZXhwb25l
bnQgKyBrUSAtIDEpICoga0RfMV9MT0cyXzEwKTsKKyAgICAgICAgaW50IGZvbyA9IGtDYWNoZWRQ
b3dlcnNPZmZzZXQ7CisgICAgICAgIGludCBpbmRleCA9CisgICAgICAgIChmb28gKyBzdGF0aWNf
Y2FzdDxpbnQ+KGspIC0gMSkgLyBrRGVjaW1hbEV4cG9uZW50RGlzdGFuY2UgKyAxOworICAgICAg
ICBBU1NFUlQoMCA8PSBpbmRleCAmJiBpbmRleCA8IGtDYWNoZWRQb3dlcnNMZW5ndGgpOworICAg
ICAgICBDYWNoZWRQb3dlciBjYWNoZWRfcG93ZXIgPSBrQ2FjaGVkUG93ZXJzW2luZGV4XTsKKyAg
ICAgICAgQVNTRVJUKG1pbl9leHBvbmVudCA8PSBjYWNoZWRfcG93ZXIuYmluYXJ5X2V4cG9uZW50
KTsKKyAgICAgICAgQVNTRVJUKGNhY2hlZF9wb3dlci5iaW5hcnlfZXhwb25lbnQgPD0gbWF4X2V4
cG9uZW50KTsKKyAgICAgICAgKmRlY2ltYWxfZXhwb25lbnQgPSBjYWNoZWRfcG93ZXIuZGVjaW1h
bF9leHBvbmVudDsKKyAgICAgICAgKnBvd2VyID0gRGl5RnAoY2FjaGVkX3Bvd2VyLnNpZ25pZmlj
YW5kLCBjYWNoZWRfcG93ZXIuYmluYXJ5X2V4cG9uZW50KTsKKyAgICB9CisgICAgCisgICAgCisg
ICAgdm9pZCBQb3dlcnNPZlRlbkNhY2hlOjpHZXRDYWNoZWRQb3dlckZvckRlY2ltYWxFeHBvbmVu
dChpbnQgcmVxdWVzdGVkX2V4cG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGl5RnAqIHBvd2VyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBmb3Vu
ZF9leHBvbmVudCkgeworICAgICAgICBBU1NFUlQoa01pbkRlY2ltYWxFeHBvbmVudCA8PSByZXF1
ZXN0ZWRfZXhwb25lbnQpOworICAgICAgICBBU1NFUlQocmVxdWVzdGVkX2V4cG9uZW50IDwga01h
eERlY2ltYWxFeHBvbmVudCArIGtEZWNpbWFsRXhwb25lbnREaXN0YW5jZSk7CisgICAgICAgIGlu
dCBpbmRleCA9CisgICAgICAgIChyZXF1ZXN0ZWRfZXhwb25lbnQgKyBrQ2FjaGVkUG93ZXJzT2Zm
c2V0KSAvIGtEZWNpbWFsRXhwb25lbnREaXN0YW5jZTsKKyAgICAgICAgQ2FjaGVkUG93ZXIgY2Fj
aGVkX3Bvd2VyID0ga0NhY2hlZFBvd2Vyc1tpbmRleF07CisgICAgICAgICpwb3dlciA9IERpeUZw
KGNhY2hlZF9wb3dlci5zaWduaWZpY2FuZCwgY2FjaGVkX3Bvd2VyLmJpbmFyeV9leHBvbmVudCk7
CisgICAgICAgICpmb3VuZF9leHBvbmVudCA9IGNhY2hlZF9wb3dlci5kZWNpbWFsX2V4cG9uZW50
OworICAgICAgICBBU1NFUlQoKmZvdW5kX2V4cG9uZW50IDw9IHJlcXVlc3RlZF9leHBvbmVudCk7
CisgICAgICAgIEFTU0VSVChyZXF1ZXN0ZWRfZXhwb25lbnQgPCAqZm91bmRfZXhwb25lbnQgKyBr
RGVjaW1hbEV4cG9uZW50RGlzdGFuY2UpOworICAgIH0KKyAgICAKK30gIC8vIG5hbWVzcGFjZSBk
b3VibGVfY29udmVyc2lvbgorCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL2R0b2EvY2FjaGVkLXBvd2Vycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNiYzA0ZDQzZDY4
Y2MwODYwYTIyYjI4Nzg2ZDMxNzRjOGQyNmNiMzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvY2FjaGVkLXBvd2Vycy5oCkBAIC0wLDAgKzEsNzIgQEAK
Ky8vIENvcHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAg
IGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8v
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmbmRlZiBET1VCTEVfQ09OVkVSU0lPTl9D
QUNIRURfUE9XRVJTX0hfCisjZGVmaW5lIERPVUJMRV9DT05WRVJTSU9OX0NBQ0hFRF9QT1dFUlNf
SF8KKworI2luY2x1ZGUgImRpeS1mcC5oIgorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNl
IGRvdWJsZV9jb252ZXJzaW9uIHsKKyAgICAKKyAgICBjbGFzcyBQb3dlcnNPZlRlbkNhY2hlIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIAorICAgICAgICAvLyBOb3QgYWxsIHBvd2VycyBvZiB0ZW4g
YXJlIGNhY2hlZC4gVGhlIGRlY2ltYWwgZXhwb25lbnQgb2YgdHdvIG5laWdoYm9yaW5nCisgICAg
ICAgIC8vIGNhY2hlZCBudW1iZXJzIHdpbGwgZGlmZmVyIGJ5IGtEZWNpbWFsRXhwb25lbnREaXN0
YW5jZS4KKyAgICAgICAgc3RhdGljIGludCBrRGVjaW1hbEV4cG9uZW50RGlzdGFuY2U7CisgICAg
ICAgIAorICAgICAgICBzdGF0aWMgaW50IGtNaW5EZWNpbWFsRXhwb25lbnQ7CisgICAgICAgIHN0
YXRpYyBpbnQga01heERlY2ltYWxFeHBvbmVudDsKKyAgICAgICAgCisgICAgICAgIC8vIFJldHVy
bnMgYSBjYWNoZWQgcG93ZXItb2YtdGVuIHdpdGggYSBiaW5hcnkgZXhwb25lbnQgaW4gdGhlIHJh
bmdlCisgICAgICAgIC8vIFttaW5fZXhwb25lbnQ7IG1heF9leHBvbmVudF0gKGJvdW5kYXJpZXMg
aW5jbHVkZWQpLgorICAgICAgICBzdGF0aWMgdm9pZCBHZXRDYWNoZWRQb3dlckZvckJpbmFyeUV4
cG9uZW50UmFuZ2UoaW50IG1pbl9leHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXhfZXhwb25lbnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXlGcCog
cG93ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQqIGRlY2ltYWxfZXhwb25lbnQpOworICAgICAgICAKKyAgICAgICAgLy8gUmV0
dXJucyBhIGNhY2hlZCBwb3dlciBvZiB0ZW4geCB+PSAxMF5rIHN1Y2ggdGhhdAorICAgICAgICAv
LyAgIGsgPD0gZGVjaW1hbF9leHBvbmVudCA8IGsgKyBrQ2FjaGVkUG93ZXJzRGVjaW1hbERpc3Rh
bmNlLgorICAgICAgICAvLyBUaGUgZ2l2ZW4gZGVjaW1hbF9leHBvbmVudCBtdXN0IHNhdGlzZnkK
KyAgICAgICAgLy8gICBrTWluRGVjaW1hbEV4cG9uZW50IDw9IHJlcXVlc3RlZF9leHBvbmVudCwg
YW5kCisgICAgICAgIC8vICAgcmVxdWVzdGVkX2V4cG9uZW50IDwga01heERlY2ltYWxFeHBvbmVu
dCArIGtEZWNpbWFsRXhwb25lbnREaXN0YW5jZS4KKyAgICAgICAgc3RhdGljIHZvaWQgR2V0Q2Fj
aGVkUG93ZXJGb3JEZWNpbWFsRXhwb25lbnQoaW50IHJlcXVlc3RlZF9leHBvbmVudCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGl5RnAqIHBv
d2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQqIGZvdW5kX2V4cG9uZW50KTsKKyAgICB9OworICAgIAorICAgIC8vIEluaXRpYWxpemVz
IHRoZSB0YWJsZSBvZiBjYWNoZWQgcG93ZXJzIHVzZWQgYnkgdGhlIGR0b2EgYWxnb3JpdGhtLgor
ICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgY2FsbGVkIHdoZW4gSlNDIGlzIGJlaW5nIGluaXRpYWxp
emVkLgorICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIAorfSAgLy8gbmFtZXNwYWNlIGRvdWJs
ZV9jb252ZXJzaW9uCisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgIC8vIERPVUJMRV9D
T05WRVJTSU9OX0NBQ0hFRF9QT1dFUlNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvZHRvYS9kaXktZnAuY2MgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2Ev
ZGl5LWZwLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdjYWQ1ZDQzYzVmNjM5NmFlOTQxZGFkMzhhNGViMGVkYWMy
NTU5ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2Ev
ZGl5LWZwLmNjCkBAIC0wLDAgKzEsNjEgQEAKKy8vIENvcHlyaWdodCAyMDEwIHRoZSBWOCBwcm9q
ZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8g
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
Ky8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
CisjaW5jbHVkZSAiZGl5LWZwLmgiCisjaW5jbHVkZSAidXRpbHMuaCIKKworbmFtZXNwYWNlIFdU
RiB7CisKK25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgdm9pZCBEaXlG
cDo6TXVsdGlwbHkoY29uc3QgRGl5RnAmIG90aGVyKSB7CisgICAgICAgIC8vIFNpbXBseSAiZW11
bGF0ZXMiIGEgMTI4IGJpdCBtdWx0aXBsaWNhdGlvbi4KKyAgICAgICAgLy8gSG93ZXZlcjogdGhl
IHJlc3VsdGluZyBudW1iZXIgb25seSBjb250YWlucyA2NCBiaXRzLiBUaGUgbGVhc3QKKyAgICAg
ICAgLy8gc2lnbmlmaWNhbnQgNjQgYml0cyBhcmUgb25seSB1c2VkIGZvciByb3VuZGluZyB0aGUg
bW9zdCBzaWduaWZpY2FudCA2NAorICAgICAgICAvLyBiaXRzLgorICAgICAgICBjb25zdCB1aW50
NjRfdCBrTTMyID0gMHhGRkZGRkZGRlU7CisgICAgICAgIHVpbnQ2NF90IGEgPSBmXyA+PiAzMjsK
KyAgICAgICAgdWludDY0X3QgYiA9IGZfICYga00zMjsKKyAgICAgICAgdWludDY0X3QgYyA9IG90
aGVyLmZfID4+IDMyOworICAgICAgICB1aW50NjRfdCBkID0gb3RoZXIuZl8gJiBrTTMyOworICAg
ICAgICB1aW50NjRfdCBhYyA9IGEgKiBjOworICAgICAgICB1aW50NjRfdCBiYyA9IGIgKiBjOwor
ICAgICAgICB1aW50NjRfdCBhZCA9IGEgKiBkOworICAgICAgICB1aW50NjRfdCBiZCA9IGIgKiBk
OworICAgICAgICB1aW50NjRfdCB0bXAgPSAoYmQgPj4gMzIpICsgKGFkICYga00zMikgKyAoYmMg
JiBrTTMyKTsKKyAgICAgICAgLy8gQnkgYWRkaW5nIDFVIDw8IDMxIHRvIHRtcCB3ZSByb3VuZCB0
aGUgZmluYWwgcmVzdWx0LgorICAgICAgICAvLyBIYWxmd2F5IGNhc2VzIHdpbGwgYmUgcm91bmQg
dXAuCisgICAgICAgIHRtcCArPSAxVSA8PCAzMTsKKyAgICAgICAgdWludDY0X3QgcmVzdWx0X2Yg
PSBhYyArIChhZCA+PiAzMikgKyAoYmMgPj4gMzIpICsgKHRtcCA+PiAzMik7CisgICAgICAgIGVf
ICs9IG90aGVyLmVfICsgNjQ7CisgICAgICAgIGZfID0gcmVzdWx0X2Y7CisgICAgfQorICAgIAor
fSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCisKK30gLy8gbmFtZXNwYWNlIFdURgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2RpeS1mcC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2RpeS1mcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU4NDMxMDBh
ODJhYTM0YTYyOGRjZWU4YzI3MTFmOWFjNTBlZjllNjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZGl5LWZwLmgKQEAgLTAsMCArMSwxMjIgQEAKKy8v
IENvcHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRp
c2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
Ly8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmbmRlZiBET1VCTEVfQ09OVkVSU0lPTl9ESVlf
RlBfSF8KKyNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05fRElZX0ZQX0hfCisKKyNpbmNsdWRlICJ1
dGlscy5oIgorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9u
IHsKKyAgICAKKyAgICAvLyBUaGlzICJEbyBJdCBZb3Vyc2VsZiBGbG9hdGluZyBQb2ludCIgY2xh
c3MgaW1wbGVtZW50cyBhIGZsb2F0aW5nLXBvaW50IG51bWJlcgorICAgIC8vIHdpdGggYSB1aW50
NjQgc2lnbmlmaWNhbmQgYW5kIGFuIGludCBleHBvbmVudC4gTm9ybWFsaXplZCBEaXlGcCBudW1i
ZXJzIHdpbGwKKyAgICAvLyBoYXZlIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBvZiB0aGUgc2ln
bmlmaWNhbmQgc2V0LgorICAgIC8vIE11bHRpcGxpY2F0aW9uIGFuZCBTdWJ0cmFjdGlvbiBkbyBu
b3Qgbm9ybWFsaXplIHRoZWlyIHJlc3VsdHMuCisgICAgLy8gRGl5RnAgYXJlIG5vdCBkZXNpZ25l
ZCB0byBjb250YWluIHNwZWNpYWwgZG91YmxlcyAoTmFOIGFuZCBJbmZpbml0eSkuCisgICAgY2xh
c3MgRGl5RnAgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBrU2lnbmlm
aWNhbmRTaXplID0gNjQ7CisgICAgICAgIAorICAgICAgICBEaXlGcCgpIDogZl8oMCksIGVfKDAp
IHt9CisgICAgICAgIERpeUZwKHVpbnQ2NF90IGYsIGludCBlKSA6IGZfKGYpLCBlXyhlKSB7fQor
ICAgICAgICAKKyAgICAgICAgLy8gdGhpcyA9IHRoaXMgLSBvdGhlci4KKyAgICAgICAgLy8gVGhl
IGV4cG9uZW50cyBvZiBib3RoIG51bWJlcnMgbXVzdCBiZSB0aGUgc2FtZSBhbmQgdGhlIHNpZ25p
ZmljYW5kIG9mIHRoaXMKKyAgICAgICAgLy8gbXVzdCBiZSBiaWdnZXIgdGhhbiB0aGUgc2lnbmlm
aWNhbmQgb2Ygb3RoZXIuCisgICAgICAgIC8vIFRoZSByZXN1bHQgd2lsbCBub3QgYmUgbm9ybWFs
aXplZC4KKyAgICAgICAgdm9pZCBTdWJ0cmFjdChjb25zdCBEaXlGcCYgb3RoZXIpIHsKKyAgICAg
ICAgICAgIEFTU0VSVChlXyA9PSBvdGhlci5lXyk7CisgICAgICAgICAgICBBU1NFUlQoZl8gPj0g
b3RoZXIuZl8pOworICAgICAgICAgICAgZl8gLT0gb3RoZXIuZl87CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIC8vIFJldHVybnMgYSAtIGIuCisgICAgICAgIC8vIFRoZSBleHBvbmVudHMg
b2YgYm90aCBudW1iZXJzIG11c3QgYmUgdGhlIHNhbWUgYW5kIHRoaXMgbXVzdCBiZSBiaWdnZXIK
KyAgICAgICAgLy8gdGhhbiBvdGhlci4gVGhlIHJlc3VsdCB3aWxsIG5vdCBiZSBub3JtYWxpemVk
LgorICAgICAgICBzdGF0aWMgRGl5RnAgTWludXMoY29uc3QgRGl5RnAmIGEsIGNvbnN0IERpeUZw
JiBiKSB7CisgICAgICAgICAgICBEaXlGcCByZXN1bHQgPSBhOworICAgICAgICAgICAgcmVzdWx0
LlN1YnRyYWN0KGIpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgCisgICAgICAgIC8vIHRoaXMgPSB0aGlzICogb3RoZXIuCisgICAgICAg
IHZvaWQgTXVsdGlwbHkoY29uc3QgRGl5RnAmIG90aGVyKTsKKyAgICAgICAgCisgICAgICAgIC8v
IHJldHVybnMgYSAqIGI7CisgICAgICAgIHN0YXRpYyBEaXlGcCBUaW1lcyhjb25zdCBEaXlGcCYg
YSwgY29uc3QgRGl5RnAmIGIpIHsKKyAgICAgICAgICAgIERpeUZwIHJlc3VsdCA9IGE7CisgICAg
ICAgICAgICByZXN1bHQuTXVsdGlwbHkoYik7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIE5vcm1hbGl6ZSgpIHsKKyAgICAgICAg
ICAgIEFTU0VSVChmXyAhPSAwKTsKKyAgICAgICAgICAgIHVpbnQ2NF90IGYgPSBmXzsKKyAgICAg
ICAgICAgIGludCBlID0gZV87CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoaXMgbWV0
aG9kIGlzIG1haW5seSBjYWxsZWQgZm9yIG5vcm1hbGl6aW5nIGJvdW5kYXJpZXMuIEluIGdlbmVy
YWwKKyAgICAgICAgICAgIC8vIGJvdW5kYXJpZXMgbmVlZCB0byBiZSBzaGlmdGVkIGJ5IDEwIGJp
dHMuIFdlIHRodXMgb3B0aW1pemUgZm9yIHRoaXMgY2FzZS4KKyAgICAgICAgICAgIGNvbnN0IHVp
bnQ2NF90IGsxME1TQml0cyA9IFVJTlQ2NF8yUEFSVF9DKDB4RkZDMDAwMDAsIDAwMDAwMDAwKTsK
KyAgICAgICAgICAgIHdoaWxlICgoZiAmIGsxME1TQml0cykgPT0gMCkgeworICAgICAgICAgICAg
ICAgIGYgPDw9IDEwOworICAgICAgICAgICAgICAgIGUgLT0gMTA7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB3aGlsZSAoKGYgJiBrVWludDY0TVNCKSA9PSAwKSB7CisgICAgICAgICAgICAg
ICAgZiA8PD0gMTsKKyAgICAgICAgICAgICAgICBlLS07CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBmXyA9IGY7CisgICAgICAgICAgICBlXyA9IGU7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHN0YXRpYyBEaXlGcCBOb3JtYWxpemUoY29uc3QgRGl5RnAmIGEpIHsKKyAgICAgICAg
ICAgIERpeUZwIHJlc3VsdCA9IGE7CisgICAgICAgICAgICByZXN1bHQuTm9ybWFsaXplKCk7Cisg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB1
aW50NjRfdCBmKCkgY29uc3QgeyByZXR1cm4gZl87IH0KKyAgICAgICAgaW50IGUoKSBjb25zdCB7
IHJldHVybiBlXzsgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBzZXRfZih1aW50NjRfdCBuZXdf
dmFsdWUpIHsgZl8gPSBuZXdfdmFsdWU7IH0KKyAgICAgICAgdm9pZCBzZXRfZShpbnQgbmV3X3Zh
bHVlKSB7IGVfID0gbmV3X3ZhbHVlOyB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAg
IHN0YXRpYyBjb25zdCB1aW50NjRfdCBrVWludDY0TVNCID0gVUlOVDY0XzJQQVJUX0MoMHg4MDAw
MDAwMCwgMDAwMDAwMDApOworICAgICAgICAKKyAgICAgICAgdWludDY0X3QgZl87CisgICAgICAg
IGludCBlXzsKKyAgICB9OworICAgIAorfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9u
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgIC8vIERPVUJMRV9DT05WRVJTSU9OX0RJ
WV9GUF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2RvdWJs
ZS1jb252ZXJzaW9uLmNjIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2RvdWJsZS1j
b252ZXJzaW9uLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVmMTg4MjUxNTM0ZmMwZTNjNjkxZjAzOTVmOTNiNDRk
NmEyOGRjNmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0
b2EvZG91YmxlLWNvbnZlcnNpb24uY2MKQEAgLTAsMCArMSw4NzMgQEAKKy8vIENvcHlyaWdodCAy
MDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8g
ICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAg
ICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
Ly8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8g
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPG1hdGguaD4KKwor
I2luY2x1ZGUgImRvdWJsZS1jb252ZXJzaW9uLmgiCisKKyNpbmNsdWRlICJiaWdudW0tZHRvYS5o
IgorI2luY2x1ZGUgImRvdWJsZS5oIgorI2luY2x1ZGUgImZhc3QtZHRvYS5oIgorI2luY2x1ZGUg
ImZpeGVkLWR0b2EuaCIKKyNpbmNsdWRlICJzdHJ0b2QuaCIKKyNpbmNsdWRlICJ1dGlscy5oIgor
CituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKKyAgICAK
KyAgICBjb25zdCBEb3VibGVUb1N0cmluZ0NvbnZlcnRlciYgRG91YmxlVG9TdHJpbmdDb252ZXJ0
ZXI6OkVjbWFTY3JpcHRDb252ZXJ0ZXIoKSB7CisgICAgICAgIGludCBmbGFncyA9IFVOSVFVRV9a
RVJPIHwgRU1JVF9QT1NJVElWRV9FWFBPTkVOVF9TSUdOOworICAgICAgICBzdGF0aWMgRG91Ymxl
VG9TdHJpbmdDb252ZXJ0ZXIgY29udmVydGVyKGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmZpbml0eSIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5hTiIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2UnLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC02LCAyMSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2LCAwKTsKKyAgICAgICAgcmV0dXJuIGNv
bnZlcnRlcjsKKyAgICB9CisgICAgCisgICAgCisgICAgYm9vbCBEb3VibGVUb1N0cmluZ0NvbnZl
cnRlcjo6SGFuZGxlU3BlY2lhbFZhbHVlcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB2YWx1ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIqIHJlc3Vs
dF9idWlsZGVyKSBjb25zdCB7CisgICAgICAgIERvdWJsZSBkb3VibGVfaW5zcGVjdCh2YWx1ZSk7
CisgICAgICAgIGlmIChkb3VibGVfaW5zcGVjdC5Jc0luZmluaXRlKCkpIHsKKyAgICAgICAgICAg
IGlmIChpbmZpbml0eV9zeW1ib2xfID09IE5VTEwpIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IGlmICh2YWx1ZSA8IDApIHsKKyAgICAgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hh
cmFjdGVyKCctJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+
QWRkU3RyaW5nKGluZmluaXR5X3N5bWJvbF8pOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGRvdWJsZV9pbnNwZWN0LklzTmFuKCkpIHsKKyAgICAgICAg
ICAgIGlmIChuYW5fc3ltYm9sXyA9PSBOVUxMKSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBy
ZXN1bHRfYnVpbGRlci0+QWRkU3RyaW5nKG5hbl9zeW1ib2xfKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisg
ICAgCisgICAgdm9pZCBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6Q3JlYXRlRXhwb25lbnRpYWxS
ZXByZXNlbnRhdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGRlY2ltYWxfZGlnaXRzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBvbmVudCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmlu
Z0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25zdCB7CisgICAgICAgIEFTU0VSVChsZW5ndGgg
IT0gMCk7CisgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRDaGFyYWN0ZXIoZGVjaW1hbF9kaWdp
dHNbMF0pOworICAgICAgICBpZiAobGVuZ3RoICE9IDEpIHsKKyAgICAgICAgICAgIHJlc3VsdF9i
dWlsZGVyLT5BZGRDaGFyYWN0ZXIoJy4nKTsKKyAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5B
ZGRTdWJzdHJpbmcoJmRlY2ltYWxfZGlnaXRzWzFdLCBsZW5ndGgtMSk7CisgICAgICAgIH0KKyAg
ICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcihleHBvbmVudF9jaGFyYWN0ZXJfKTsK
KyAgICAgICAgaWYgKGV4cG9uZW50IDwgMCkgeworICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXIt
PkFkZENoYXJhY3RlcignLScpOworICAgICAgICAgICAgZXhwb25lbnQgPSAtZXhwb25lbnQ7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoKGZsYWdzXyAmIEVNSVRfUE9TSVRJVkVf
RVhQT05FTlRfU0lHTikgIT0gMCkgeworICAgICAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5B
ZGRDaGFyYWN0ZXIoJysnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAo
ZXhwb25lbnQgPT0gMCkgeworICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3Rl
cignMCcpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChl
eHBvbmVudCA8IDFlNCk7CisgICAgICAgIGNvbnN0IGludCBrTWF4RXhwb25lbnRMZW5ndGggPSA1
OworICAgICAgICBjaGFyIGJ1ZmZlcltrTWF4RXhwb25lbnRMZW5ndGhdOworICAgICAgICBpbnQg
Zmlyc3RfY2hhcl9wb3MgPSBrTWF4RXhwb25lbnRMZW5ndGg7CisgICAgICAgIHdoaWxlIChleHBv
bmVudCA+IDApIHsKKyAgICAgICAgICAgIGJ1ZmZlclstLWZpcnN0X2NoYXJfcG9zXSA9ICcwJyAr
IChleHBvbmVudCAlIDEwKTsKKyAgICAgICAgICAgIGV4cG9uZW50IC89IDEwOworICAgICAgICB9
CisgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRTdWJzdHJpbmcoJmJ1ZmZlcltmaXJzdF9jaGFy
X3Bvc10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga01heEV4cG9uZW50
TGVuZ3RoIC0gZmlyc3RfY2hhcl9wb3MpOworICAgIH0KKyAgICAKKyAgICAKKyAgICB2b2lkIERv
dWJsZVRvU3RyaW5nQ29udmVydGVyOjpDcmVhdGVEZWNpbWFsUmVwcmVzZW50YXRpb24oCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIqIGRlY2ltYWxfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
ZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGRpZ2l0c19hZnRlcl9wb2ludCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5n
QnVpbGRlciogcmVzdWx0X2J1aWxkZXIpIGNvbnN0IHsKKyAgICAgICAgLy8gQ3JlYXRlIGEgcmVw
cmVzZW50YXRpb24gdGhhdCBpcyBwYWRkZWQgd2l0aCB6ZXJvcyBpZiBuZWVkZWQuCisgICAgICAg
IGlmIChkZWNpbWFsX3BvaW50IDw9IDApIHsKKyAgICAgICAgICAgIC8vICIwLjAwMDAwZGVjaW1h
bF9yZXAiLgorICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcignMCcpOwor
ICAgICAgICAgICAgaWYgKGRpZ2l0c19hZnRlcl9wb2ludCA+IDApIHsKKyAgICAgICAgICAgICAg
ICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKCcuJyk7CisgICAgICAgICAgICAgICAgcmVz
dWx0X2J1aWxkZXItPkFkZFBhZGRpbmcoJzAnLCAtZGVjaW1hbF9wb2ludCk7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKGxlbmd0aCA8PSBkaWdpdHNfYWZ0ZXJfcG9pbnQgLSAoLWRlY2ltYWxfcG9p
bnQpKTsKKyAgICAgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkU3Vic3RyaW5nKGRlY2lt
YWxfZGlnaXRzLCBsZW5ndGgpOworICAgICAgICAgICAgICAgIGludCByZW1haW5pbmdfZGlnaXRz
ID0gZGlnaXRzX2FmdGVyX3BvaW50IC0gKC1kZWNpbWFsX3BvaW50KSAtIGxlbmd0aDsKKyAgICAg
ICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkUGFkZGluZygnMCcsIHJlbWFpbmluZ19kaWdp
dHMpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGRlY2ltYWxfcG9pbnQgPj0g
bGVuZ3RoKSB7CisgICAgICAgICAgICAvLyAiZGVjaW1hbF9yZXAwMDAwLjAwMDAwIiBvciAiZGVj
aW1hbF9yZXAuMDAwMCIKKyAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRTdWJzdHJpbmco
ZGVjaW1hbF9kaWdpdHMsIGxlbmd0aCk7CisgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRk
UGFkZGluZygnMCcsIGRlY2ltYWxfcG9pbnQgLSBsZW5ndGgpOworICAgICAgICAgICAgaWYgKGRp
Z2l0c19hZnRlcl9wb2ludCA+IDApIHsKKyAgICAgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+
QWRkQ2hhcmFjdGVyKCcuJyk7CisgICAgICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZFBh
ZGRpbmcoJzAnLCBkaWdpdHNfYWZ0ZXJfcG9pbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgLy8gImRlY2ltYS5sX3JlcDAwMCIKKyAgICAgICAgICAgIEFT
U0VSVChkaWdpdHNfYWZ0ZXJfcG9pbnQgPiAwKTsKKyAgICAgICAgICAgIHJlc3VsdF9idWlsZGVy
LT5BZGRTdWJzdHJpbmcoZGVjaW1hbF9kaWdpdHMsIGRlY2ltYWxfcG9pbnQpOworICAgICAgICAg
ICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcignLicpOworICAgICAgICAgICAgQVNTRVJU
KGxlbmd0aCAtIGRlY2ltYWxfcG9pbnQgPD0gZGlnaXRzX2FmdGVyX3BvaW50KTsKKyAgICAgICAg
ICAgIHJlc3VsdF9idWlsZGVyLT5BZGRTdWJzdHJpbmcoJmRlY2ltYWxfZGlnaXRzW2RlY2ltYWxf
cG9pbnRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgg
LSBkZWNpbWFsX3BvaW50KTsKKyAgICAgICAgICAgIGludCByZW1haW5pbmdfZGlnaXRzID0gZGln
aXRzX2FmdGVyX3BvaW50IC0gKGxlbmd0aCAtIGRlY2ltYWxfcG9pbnQpOworICAgICAgICAgICAg
cmVzdWx0X2J1aWxkZXItPkFkZFBhZGRpbmcoJzAnLCByZW1haW5pbmdfZGlnaXRzKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoZGlnaXRzX2FmdGVyX3BvaW50ID09IDApIHsKKyAgICAgICAgICAg
IGlmICgoZmxhZ3NfICYgRU1JVF9UUkFJTElOR19ERUNJTUFMX1BPSU5UKSAhPSAwKSB7CisgICAg
ICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcignLicpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKChmbGFnc18gJiBFTUlUX1RSQUlMSU5HX1pFUk9fQUZURVJf
UE9JTlQpICE9IDApIHsKKyAgICAgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFj
dGVyKCcwJyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisg
ICAgYm9vbCBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6VG9TaG9ydGVzdChkb3VibGUgdmFsdWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWls
ZGVyKiByZXN1bHRfYnVpbGRlcikgY29uc3QgeworICAgICAgICBpZiAoRG91YmxlKHZhbHVlKS5J
c1NwZWNpYWwoKSkgeworICAgICAgICAgICAgcmV0dXJuIEhhbmRsZVNwZWNpYWxWYWx1ZXModmFs
dWUsIHJlc3VsdF9idWlsZGVyKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaW50IGRl
Y2ltYWxfcG9pbnQ7CisgICAgICAgIGJvb2wgc2lnbjsKKyAgICAgICAgY29uc3QgaW50IGtEZWNp
bWFsUmVwQ2FwYWNpdHkgPSBrQmFzZTEwTWF4aW1hbExlbmd0aCArIDE7CisgICAgICAgIGNoYXIg
ZGVjaW1hbF9yZXBba0RlY2ltYWxSZXBDYXBhY2l0eV07CisgICAgICAgIGludCBkZWNpbWFsX3Jl
cF9sZW5ndGg7CisgICAgICAgIAorICAgICAgICBEb3VibGVUb0FzY2lpKHZhbHVlLCBTSE9SVEVT
VCwgMCwgZGVjaW1hbF9yZXAsIGtEZWNpbWFsUmVwQ2FwYWNpdHksCisgICAgICAgICAgICAgICAg
ICAgICAgJnNpZ24sICZkZWNpbWFsX3JlcF9sZW5ndGgsICZkZWNpbWFsX3BvaW50KTsKKyAgICAg
ICAgCisgICAgICAgIGJvb2wgdW5pcXVlX3plcm8gPSAoZmxhZ3NfICYgVU5JUVVFX1pFUk8pICE9
IDA7CisgICAgICAgIGlmIChzaWduICYmICh2YWx1ZSAhPSAwLjAgfHwgIXVuaXF1ZV96ZXJvKSkg
eworICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcignLScpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBpbnQgZXhwb25lbnQgPSBkZWNpbWFsX3BvaW50IC0gMTsK
KyAgICAgICAgaWYgKChkZWNpbWFsX2luX3Nob3J0ZXN0X2xvd18gPD0gZXhwb25lbnQpICYmCisg
ICAgICAgICAgICAoZXhwb25lbnQgPCBkZWNpbWFsX2luX3Nob3J0ZXN0X2hpZ2hfKSkgeworICAg
ICAgICAgICAgQ3JlYXRlRGVjaW1hbFJlcHJlc2VudGF0aW9uKGRlY2ltYWxfcmVwLCBkZWNpbWFs
X3JlcF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVj
aW1hbF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXgo
MCwgZGVjaW1hbF9yZXBfbGVuZ3RoIC0gZGVjaW1hbF9wb2ludCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXIpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgQ3JlYXRlRXhwb25lbnRpYWxSZXByZXNlbnRhdGlvbihkZWNpbWFsX3Jl
cCwgZGVjaW1hbF9yZXBfbGVuZ3RoLCBleHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXIpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAKKyAgICBib29sIERvdWJsZVRvU3RyaW5n
Q29udmVydGVyOjpUb0ZpeGVkKGRvdWJsZSB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCByZXF1ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVpbGRlciogcmVzdWx0X2J1aWxkZXIp
IGNvbnN0IHsKKyAgICAgICAgQVNTRVJUKGtNYXhGaXhlZERpZ2l0c0JlZm9yZVBvaW50ID09IDYw
KTsKKyAgICAgICAgY29uc3QgZG91YmxlIGtGaXJzdE5vbkZpeGVkID0gMWU2MDsKKyAgICAgICAg
CisgICAgICAgIGlmIChEb3VibGUodmFsdWUpLklzU3BlY2lhbCgpKSB7CisgICAgICAgICAgICBy
ZXR1cm4gSGFuZGxlU3BlY2lhbFZhbHVlcyh2YWx1ZSwgcmVzdWx0X2J1aWxkZXIpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBpZiAocmVxdWVzdGVkX2RpZ2l0cyA+IGtNYXhGaXhlZERp
Z2l0c0FmdGVyUG9pbnQpIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKHZhbHVlID49IGtGaXJz
dE5vbkZpeGVkIHx8IHZhbHVlIDw9IC1rRmlyc3ROb25GaXhlZCkgcmV0dXJuIGZhbHNlOworICAg
ICAgICAKKyAgICAgICAgLy8gRmluZCBhIHN1ZmZpY2llbnRseSBwcmVjaXNlIGRlY2ltYWwgcmVw
cmVzZW50YXRpb24gb2Ygbi4KKyAgICAgICAgaW50IGRlY2ltYWxfcG9pbnQ7CisgICAgICAgIGJv
b2wgc2lnbjsKKyAgICAgICAgLy8gQWRkIHNwYWNlIGZvciB0aGUgJ1wwJyBieXRlLgorICAgICAg
ICBjb25zdCBpbnQga0RlY2ltYWxSZXBDYXBhY2l0eSA9CisgICAgICAgIGtNYXhGaXhlZERpZ2l0
c0JlZm9yZVBvaW50ICsga01heEZpeGVkRGlnaXRzQWZ0ZXJQb2ludCArIDE7CisgICAgICAgIGNo
YXIgZGVjaW1hbF9yZXBba0RlY2ltYWxSZXBDYXBhY2l0eV07CisgICAgICAgIGludCBkZWNpbWFs
X3JlcF9sZW5ndGg7CisgICAgICAgIERvdWJsZVRvQXNjaWkodmFsdWUsIEZJWEVELCByZXF1ZXN0
ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgIGRlY2ltYWxfcmVwLCBrRGVjaW1hbFJl
cENhcGFjaXR5LAorICAgICAgICAgICAgICAgICAgICAgICZzaWduLCAmZGVjaW1hbF9yZXBfbGVu
Z3RoLCAmZGVjaW1hbF9wb2ludCk7CisgICAgICAgIAorICAgICAgICBib29sIHVuaXF1ZV96ZXJv
ID0gKChmbGFnc18gJiBVTklRVUVfWkVSTykgIT0gMCk7CisgICAgICAgIGlmIChzaWduICYmICh2
YWx1ZSAhPSAwLjAgfHwgIXVuaXF1ZV96ZXJvKSkgeworICAgICAgICAgICAgcmVzdWx0X2J1aWxk
ZXItPkFkZENoYXJhY3RlcignLScpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBDcmVh
dGVEZWNpbWFsUmVwcmVzZW50YXRpb24oZGVjaW1hbF9yZXAsIGRlY2ltYWxfcmVwX2xlbmd0aCwg
ZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVl
c3RlZF9kaWdpdHMsIHJlc3VsdF9idWlsZGVyKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIAorICAgIAorICAgIGJvb2wgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6OlRvRXhwb25l
bnRpYWwoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
b3VibGUgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25zdCB7
CisgICAgICAgIGlmIChEb3VibGUodmFsdWUpLklzU3BlY2lhbCgpKSB7CisgICAgICAgICAgICBy
ZXR1cm4gSGFuZGxlU3BlY2lhbFZhbHVlcyh2YWx1ZSwgcmVzdWx0X2J1aWxkZXIpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBpZiAocmVxdWVzdGVkX2RpZ2l0cyA8IC0xKSByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGlmIChyZXF1ZXN0ZWRfZGlnaXRzID4ga01heEV4cG9uZW50aWFsRGln
aXRzKSByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpbnQgZGVjaW1hbF9wb2ludDsK
KyAgICAgICAgYm9vbCBzaWduOworICAgICAgICAvLyBBZGQgc3BhY2UgZm9yIGRpZ2l0IGJlZm9y
ZSB0aGUgZGVjaW1hbCBwb2ludCBhbmQgdGhlICdcMCcgY2hhcmFjdGVyLgorICAgICAgICBjb25z
dCBpbnQga0RlY2ltYWxSZXBDYXBhY2l0eSA9IGtNYXhFeHBvbmVudGlhbERpZ2l0cyArIDI7Cisg
ICAgICAgIEFTU0VSVChrRGVjaW1hbFJlcENhcGFjaXR5ID4ga0Jhc2UxME1heGltYWxMZW5ndGgp
OworICAgICAgICBjaGFyIGRlY2ltYWxfcmVwW2tEZWNpbWFsUmVwQ2FwYWNpdHldOworICAgICAg
ICBpbnQgZGVjaW1hbF9yZXBfbGVuZ3RoOworICAgICAgICAKKyAgICAgICAgaWYgKHJlcXVlc3Rl
ZF9kaWdpdHMgPT0gLTEpIHsKKyAgICAgICAgICAgIERvdWJsZVRvQXNjaWkodmFsdWUsIFNIT1JU
RVNULCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNpbWFsX3JlcCwga0RlY2ltYWxS
ZXBDYXBhY2l0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnNpZ24sICZkZWNpbWFsX3Jl
cF9sZW5ndGgsICZkZWNpbWFsX3BvaW50KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IERvdWJsZVRvQXNjaWkodmFsdWUsIFBSRUNJU0lPTiwgcmVxdWVzdGVkX2RpZ2l0cyArIDEsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2ltYWxfcmVwLCBrRGVjaW1hbFJlcENhcGFjaXR5
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAmc2lnbiwgJmRlY2ltYWxfcmVwX2xlbmd0aCwg
JmRlY2ltYWxfcG9pbnQpOworICAgICAgICAgICAgQVNTRVJUKGRlY2ltYWxfcmVwX2xlbmd0aCA8
PSByZXF1ZXN0ZWRfZGlnaXRzICsgMSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAo
aW50IGkgPSBkZWNpbWFsX3JlcF9sZW5ndGg7IGkgPCByZXF1ZXN0ZWRfZGlnaXRzICsgMTsgKytp
KSB7CisgICAgICAgICAgICAgICAgZGVjaW1hbF9yZXBbaV0gPSAnMCc7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBkZWNpbWFsX3JlcF9sZW5ndGggPSByZXF1ZXN0ZWRfZGlnaXRzICsgMTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCB1bmlxdWVfemVybyA9ICgoZmxhZ3Nf
ICYgVU5JUVVFX1pFUk8pICE9IDApOworICAgICAgICBpZiAoc2lnbiAmJiAodmFsdWUgIT0gMC4w
IHx8ICF1bmlxdWVfemVybykpIHsKKyAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRDaGFy
YWN0ZXIoJy0nKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaW50IGV4cG9uZW50ID0g
ZGVjaW1hbF9wb2ludCAtIDE7CisgICAgICAgIENyZWF0ZUV4cG9uZW50aWFsUmVwcmVzZW50YXRp
b24oZGVjaW1hbF9yZXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVjaW1hbF9yZXBfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGV4cG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdF9idWlsZGVyKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIAor
ICAgIGJvb2wgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6OlRvUHJlY2lzaW9uKGRvdWJsZSB2YWx1
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJl
Y2lzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0
cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25zdCB7CisgICAgICAgIGlmIChEb3VibGUo
dmFsdWUpLklzU3BlY2lhbCgpKSB7CisgICAgICAgICAgICByZXR1cm4gSGFuZGxlU3BlY2lhbFZh
bHVlcyh2YWx1ZSwgcmVzdWx0X2J1aWxkZXIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpZiAocHJlY2lzaW9uIDwga01pblByZWNpc2lvbkRpZ2l0cyB8fCBwcmVjaXNpb24gPiBrTWF4
UHJlY2lzaW9uRGlnaXRzKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIC8vIEZpbmQgYSBzdWZmaWNpZW50bHkgcHJlY2lzZSBkZWNpbWFs
IHJlcHJlc2VudGF0aW9uIG9mIG4uCisgICAgICAgIGludCBkZWNpbWFsX3BvaW50OworICAgICAg
ICBib29sIHNpZ247CisgICAgICAgIC8vIEFkZCBvbmUgZm9yIHRoZSB0ZXJtaW5hdGluZyBudWxs
IGNoYXJhY3Rlci4KKyAgICAgICAgY29uc3QgaW50IGtEZWNpbWFsUmVwQ2FwYWNpdHkgPSBrTWF4
UHJlY2lzaW9uRGlnaXRzICsgMTsKKyAgICAgICAgY2hhciBkZWNpbWFsX3JlcFtrRGVjaW1hbFJl
cENhcGFjaXR5XTsKKyAgICAgICAgaW50IGRlY2ltYWxfcmVwX2xlbmd0aDsKKyAgICAgICAgCisg
ICAgICAgIERvdWJsZVRvQXNjaWkodmFsdWUsIFBSRUNJU0lPTiwgcHJlY2lzaW9uLAorICAgICAg
ICAgICAgICAgICAgICAgIGRlY2ltYWxfcmVwLCBrRGVjaW1hbFJlcENhcGFjaXR5LAorICAgICAg
ICAgICAgICAgICAgICAgICZzaWduLCAmZGVjaW1hbF9yZXBfbGVuZ3RoLCAmZGVjaW1hbF9wb2lu
dCk7CisgICAgICAgIEFTU0VSVChkZWNpbWFsX3JlcF9sZW5ndGggPD0gcHJlY2lzaW9uKTsKKyAg
ICAgICAgCisgICAgICAgIGJvb2wgdW5pcXVlX3plcm8gPSAoKGZsYWdzXyAmIFVOSVFVRV9aRVJP
KSAhPSAwKTsKKyAgICAgICAgaWYgKHNpZ24gJiYgKHZhbHVlICE9IDAuMCB8fCAhdW5pcXVlX3pl
cm8pKSB7CisgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKCctJyk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBleHBvbmVudCBpZiB3ZSBwcmludCB0
aGUgbnVtYmVyIGFzIHgueHhleXl5LiBUaGF0IGlzIHdpdGggdGhlCisgICAgICAgIC8vIGRlY2lt
YWwgcG9pbnQgYWZ0ZXIgdGhlIGZpcnN0IGRpZ2l0LgorICAgICAgICBpbnQgZXhwb25lbnQgPSBk
ZWNpbWFsX3BvaW50IC0gMTsKKyAgICAgICAgCisgICAgICAgIGludCBleHRyYV96ZXJvID0gKChm
bGFnc18gJiBFTUlUX1RSQUlMSU5HX1pFUk9fQUZURVJfUE9JTlQpICE9IDApID8gMSA6IDA7Cisg
ICAgICAgIGlmICgoLWRlY2ltYWxfcG9pbnQgKyAxID4gbWF4X2xlYWRpbmdfcGFkZGluZ196ZXJv
ZXNfaW5fcHJlY2lzaW9uX21vZGVfKSB8fAorICAgICAgICAgICAgKGRlY2ltYWxfcG9pbnQgLSBw
cmVjaXNpb24gKyBleHRyYV96ZXJvID4KKyAgICAgICAgICAgICBtYXhfdHJhaWxpbmdfcGFkZGlu
Z196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGVfKSkgeworICAgICAgICAgICAgICAgIC8vIEZpbGwg
YnVmZmVyIHRvIGNvbnRhaW4gJ3ByZWNpc2lvbicgZGlnaXRzLgorICAgICAgICAgICAgICAgIC8v
IFVzdWFsbHkgdGhlIGJ1ZmZlciBpcyBhbHJlYWR5IGF0IHRoZSBjb3JyZWN0IGxlbmd0aCwgYnV0
ICdEb3VibGVUb0FzY2lpJworICAgICAgICAgICAgICAgIC8vIGlzIGFsbG93ZWQgdG8gcmV0dXJu
IGxlc3MgY2hhcmFjdGVycy4KKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gZGVjaW1hbF9y
ZXBfbGVuZ3RoOyBpIDwgcHJlY2lzaW9uOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVj
aW1hbF9yZXBbaV0gPSAnMCc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIENyZWF0ZUV4cG9uZW50aWFsUmVwcmVzZW50YXRpb24oZGVjaW1hbF9y
ZXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVj
aXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
eHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdF9idWlsZGVyKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
Q3JlYXRlRGVjaW1hbFJlcHJlc2VudGF0aW9uKGRlY2ltYWxfcmVwLCBkZWNpbWFsX3JlcF9sZW5n
dGgsIGRlY2ltYWxfcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE1heCgwLCBwcmVjaXNpb24gLSBkZWNpbWFsX3BvaW50KSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXIpOworICAgICAgICAg
ICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgCisgICAgc3RhdGlj
IEJpZ251bUR0b2FNb2RlIER0b2FUb0JpZ251bUR0b2FNb2RlKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6RHRv
YU1vZGUgZHRvYV9tb2RlKSB7CisgICAgICAgIHN3aXRjaCAoZHRvYV9tb2RlKSB7CisgICAgICAg
ICAgICBjYXNlIERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpTSE9SVEVTVDogIHJldHVybiBCSUdO
VU1fRFRPQV9TSE9SVEVTVDsKKyAgICAgICAgICAgIGNhc2UgRG91YmxlVG9TdHJpbmdDb252ZXJ0
ZXI6OkZJWEVEOiAgICAgcmV0dXJuIEJJR05VTV9EVE9BX0ZJWEVEOworICAgICAgICAgICAgY2Fz
ZSBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6UFJFQ0lTSU9OOiByZXR1cm4gQklHTlVNX0RUT0Ff
UFJFQ0lTSU9OOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNI
QUJMRSgpOworICAgICAgICAgICAgICAgIHJldHVybiBCSUdOVU1fRFRPQV9TSE9SVEVTVDsgIC8v
IFRvIHNpbGVuY2UgY29tcGlsZXIuCisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAg
dm9pZCBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6RG91YmxlVG9Bc2NpaShkb3VibGUgdiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIER0b2FNb2RlIG1v
ZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
cmVxdWVzdGVkX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIqIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBidWZmZXJfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCogc2lnbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogbGVuZ3RoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBwb2ludCkgeworICAgICAg
ICBWZWN0b3I8Y2hhcj4gdmVjdG9yKGJ1ZmZlciwgYnVmZmVyX2xlbmd0aCk7CisgICAgICAgIEFT
U0VSVCghRG91YmxlKHYpLklzU3BlY2lhbCgpKTsKKyAgICAgICAgQVNTRVJUKG1vZGUgPT0gU0hP
UlRFU1QgfHwgcmVxdWVzdGVkX2RpZ2l0cyA+PSAwKTsKKyAgICAgICAgCisgICAgICAgIGlmIChE
b3VibGUodikuU2lnbigpIDwgMCkgeworICAgICAgICAgICAgKnNpZ24gPSB0cnVlOworICAgICAg
ICAgICAgdiA9IC12OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgKnNpZ24gPSBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1vZGUgPT0gUFJFQ0lTSU9OICYm
IHJlcXVlc3RlZF9kaWdpdHMgPT0gMCkgeworICAgICAgICAgICAgdmVjdG9yWzBdID0gJ1wwJzsK
KyAgICAgICAgICAgICpsZW5ndGggPSAwOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBpZiAodiA9PSAwKSB7CisgICAgICAgICAgICB2ZWN0b3JbMF0g
PSAnMCc7CisgICAgICAgICAgICB2ZWN0b3JbMV0gPSAnXDAnOworICAgICAgICAgICAgKmxlbmd0
aCA9IDE7CisgICAgICAgICAgICAqcG9pbnQgPSAxOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGZhc3Rfd29ya2VkOworICAgICAgICBzd2l0
Y2ggKG1vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgU0hPUlRFU1Q6CisgICAgICAgICAgICAgICAg
ZmFzdF93b3JrZWQgPSBGYXN0RHRvYSh2LCBGQVNUX0RUT0FfU0hPUlRFU1QsIDAsIHZlY3Rvciwg
bGVuZ3RoLCBwb2ludCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IEZJWEVEOgorICAgICAgICAgICAgICAgIGZhc3Rfd29ya2VkID0gRmFzdEZpeGVkRHRvYSh2LCBy
ZXF1ZXN0ZWRfZGlnaXRzLCB2ZWN0b3IsIGxlbmd0aCwgcG9pbnQpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBQUkVDSVNJT046CisgICAgICAgICAgICAgICAgZmFz
dF93b3JrZWQgPSBGYXN0RHRvYSh2LCBGQVNUX0RUT0FfUFJFQ0lTSU9OLCByZXF1ZXN0ZWRfZGln
aXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9yLCBsZW5n
dGgsIHBvaW50KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICBmYXN0X3dv
cmtlZCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChmYXN0X3dvcmtlZCkgcmV0dXJu
OworICAgICAgICAKKyAgICAgICAgLy8gSWYgdGhlIGZhc3QgZHRvYSBkaWRuJ3Qgc3VjY2VlZCB1
c2UgdGhlIHNsb3dlciBiaWdudW0gdmVyc2lvbi4KKyAgICAgICAgQmlnbnVtRHRvYU1vZGUgYmln
bnVtX21vZGUgPSBEdG9hVG9CaWdudW1EdG9hTW9kZShtb2RlKTsKKyAgICAgICAgQmlnbnVtRHRv
YSh2LCBiaWdudW1fbW9kZSwgcmVxdWVzdGVkX2RpZ2l0cywgdmVjdG9yLCBsZW5ndGgsIHBvaW50
KTsKKyAgICAgICAgdmVjdG9yWypsZW5ndGhdID0gJ1wwJzsKKyAgICB9CisgICAgCisgICAgCisg
ICAgLy8gQ29uc3VtZXMgdGhlIGdpdmVuIHN1YnN0cmluZyBmcm9tIHRoZSBpdGVyYXRvci4KKyAg
ICAvLyBSZXR1cm5zIGZhbHNlLCBpZiB0aGUgc3Vic3RyaW5nIGRvZXMgbm90IG1hdGNoLgorICAg
IHN0YXRpYyBib29sIENvbnN1bWVTdWJTdHJpbmcoY29uc3QgY2hhcioqIGN1cnJlbnQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBlbmQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBzdWJzdHJpbmcpIHsKKyAgICAgICAg
QVNTRVJUKCoqY3VycmVudCA9PSAqc3Vic3RyaW5nKTsKKyAgICAgICAgZm9yIChzdWJzdHJpbmcr
KzsgKnN1YnN0cmluZyAhPSAnXDAnOyBzdWJzdHJpbmcrKykgeworICAgICAgICAgICAgKysqY3Vy
cmVudDsKKyAgICAgICAgICAgIGlmICgqY3VycmVudCA9PSBlbmQgfHwgKipjdXJyZW50ICE9ICpz
dWJzdHJpbmcpIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICArKypjdXJyZW50Owor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgCisgICAgLy8gTWF4aW11bSBu
dW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIGluIGRlY2ltYWwgcmVwcmVzZW50YXRpb24uCisg
ICAgLy8gVGhlIGxvbmdlc3QgcG9zc2libGUgZG91YmxlIGluIGRlY2ltYWwgcmVwcmVzZW50YXRp
b24gaXMKKyAgICAvLyAoMl41MyAtIDEpICogMiBeIC0xMDc0IHRoYXQgaXMgKDIgXiA1MyAtIDEp
ICogNSBeIDEwNzQgLyAxMCBeIDEwNzQKKyAgICAvLyAoNzY4IGRpZ2l0cykuIElmIHdlIHBhcnNl
IGEgbnVtYmVyIHdob3NlIGZpcnN0IGRpZ2l0cyBhcmUgZXF1YWwgdG8gYQorICAgIC8vIG1lYW4g
b2YgMiBhZGphY2VudCBkb3VibGVzICh0aGF0IGNvdWxkIGhhdmUgdXAgdG8gNzY5IGRpZ2l0cykg
dGhlIHJlc3VsdAorICAgIC8vIG11c3QgYmUgcm91bmRlZCB0byB0aGUgYmlnZ2VyIG9uZSB1bmxl
c3MgdGhlIHRhaWwgY29uc2lzdHMgb2YgemVyb3MsIHNvCisgICAgLy8gd2UgZG9uJ3QgbmVlZCB0
byBwcmVzZXJ2ZSBhbGwgdGhlIGRpZ2l0cy4KKyAgICBjb25zdCBpbnQga01heFNpZ25pZmljYW50
RGlnaXRzID0gNzcyOworICAgIAorICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhIG5vbnNw
YWNlIGZvdW5kIGFuZCBmYWxzZSBpZiB0aGUgZW5kIGhhcyByZWFjaGVkLgorICAgIHN0YXRpYyBp
bmxpbmUgYm9vbCBBZHZhbmNlVG9Ob25zcGFjZShjb25zdCBjaGFyKiogY3VycmVudCwgY29uc3Qg
Y2hhciogZW5kKSB7CisgICAgICAgIHdoaWxlICgqY3VycmVudCAhPSBlbmQpIHsKKyAgICAgICAg
ICAgIGlmICgqKmN1cnJlbnQgIT0gJyAnKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICsrKmN1
cnJlbnQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAg
ICAKKyAgICBzdGF0aWMgYm9vbCBpc0RpZ2l0KGludCB4LCBpbnQgcmFkaXgpIHsKKyAgICAgICAg
cmV0dXJuICh4ID49ICcwJyAmJiB4IDw9ICc5JyAmJiB4IDwgJzAnICsgcmFkaXgpCisgICAgICAg
IHx8IChyYWRpeCA+IDEwICYmIHggPj0gJ2EnICYmIHggPCAnYScgKyByYWRpeCAtIDEwKQorICAg
ICAgICB8fCAocmFkaXggPiAxMCAmJiB4ID49ICdBJyAmJiB4IDwgJ0EnICsgcmFkaXggLSAxMCk7
CisgICAgfQorICAgIAorICAgIAorICAgIHN0YXRpYyBkb3VibGUgU2lnbmVkWmVybyhib29sIHNp
Z24pIHsKKyAgICAgICAgcmV0dXJuIHNpZ24gPyAtMC4wIDogMC4wOworICAgIH0KKyAgICAKKyAg
ICAKKyAgICAvLyBQYXJzaW5nIGludGVnZXJzIHdpdGggcmFkaXggMiwgNCwgOCwgMTYsIDMyLiBB
c3N1bWVzIGN1cnJlbnQgIT0gZW5kLgorICAgIHRlbXBsYXRlIDxpbnQgcmFkaXhfbG9nXzI+Cisg
ICAgc3RhdGljIGRvdWJsZSBSYWRpeFN0cmluZ1RvRG91YmxlKGNvbnN0IGNoYXIqIGN1cnJlbnQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVuZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzaWduLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsbG93X3RyYWlsaW5nX2p1bmss
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBqdW5rX3N0cmlu
Z192YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
cioqIHRyYWlsaW5nX3BvaW50ZXIpIHsKKyAgICAgICAgQVNTRVJUKGN1cnJlbnQgIT0gZW5kKTsK
KyAgICAgICAgCisgICAgICAgIC8vIFNraXAgbGVhZGluZyAwcy4KKyAgICAgICAgd2hpbGUgKCpj
dXJyZW50ID09ICcwJykgeworICAgICAgICAgICAgKytjdXJyZW50OworICAgICAgICAgICAgaWYg
KGN1cnJlbnQgPT0gZW5kKSB7CisgICAgICAgICAgICAgICAgKnRyYWlsaW5nX3BvaW50ZXIgPSBl
bmQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNpZ25lZFplcm8oc2lnbik7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludDY0X3QgbnVtYmVyID0gMDsKKyAg
ICAgICAgaW50IGV4cG9uZW50ID0gMDsKKyAgICAgICAgY29uc3QgaW50IHJhZGl4ID0gKDEgPDwg
cmFkaXhfbG9nXzIpOworICAgICAgICAKKyAgICAgICAgZG8geworICAgICAgICAgICAgaW50IGRp
Z2l0OworICAgICAgICAgICAgaWYgKCpjdXJyZW50ID49ICcwJyAmJiAqY3VycmVudCA8PSAnOScg
JiYgKmN1cnJlbnQgPCAnMCcgKyByYWRpeCkgeworICAgICAgICAgICAgICAgIGRpZ2l0ID0gc3Rh
dGljX2Nhc3Q8Y2hhcj4oKmN1cnJlbnQpIC0gJzAnOworICAgICAgICAgICAgfSBlbHNlIGlmIChy
YWRpeCA+IDEwICYmICpjdXJyZW50ID49ICdhJyAmJiAqY3VycmVudCA8ICdhJyArIHJhZGl4IC0g
MTApIHsKKyAgICAgICAgICAgICAgICBkaWdpdCA9IHN0YXRpY19jYXN0PGNoYXI+KCpjdXJyZW50
KSAtICdhJyArIDEwOworICAgICAgICAgICAgfSBlbHNlIGlmIChyYWRpeCA+IDEwICYmICpjdXJy
ZW50ID49ICdBJyAmJiAqY3VycmVudCA8ICdBJyArIHJhZGl4IC0gMTApIHsKKyAgICAgICAgICAg
ICAgICBkaWdpdCA9IHN0YXRpY19jYXN0PGNoYXI+KCpjdXJyZW50KSAtICdBJyArIDEwOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoYWxsb3dfdHJhaWxpbmdfanVu
ayB8fCAhQWR2YW5jZVRvTm9uc3BhY2UoJmN1cnJlbnQsIGVuZCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbnVtYmVyID0gbnVtYmVyICogcmFkaXgg
KyBkaWdpdDsKKyAgICAgICAgICAgIGludCBvdmVyZmxvdyA9IHN0YXRpY19jYXN0PGludD4obnVt
YmVyID4+IDUzKTsKKyAgICAgICAgICAgIGlmIChvdmVyZmxvdyAhPSAwKSB7CisgICAgICAgICAg
ICAgICAgLy8gT3ZlcmZsb3cgb2NjdXJyZWQuIE5lZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGRpcmVj
dGlvbiB0byByb3VuZCB0aGUKKyAgICAgICAgICAgICAgICAvLyByZXN1bHQuCisgICAgICAgICAg
ICAgICAgaW50IG92ZXJmbG93X2JpdHNfY291bnQgPSAxOworICAgICAgICAgICAgICAgIHdoaWxl
IChvdmVyZmxvdyA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dfYml0c19jb3Vu
dCsrOworICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdyA+Pj0gMTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaW50IGRyb3BwZWRfYml0c19t
YXNrID0gKCgxIDw8IG92ZXJmbG93X2JpdHNfY291bnQpIC0gMSk7CisgICAgICAgICAgICAgICAg
aW50IGRyb3BwZWRfYml0cyA9IHN0YXRpY19jYXN0PGludD4obnVtYmVyKSAmIGRyb3BwZWRfYml0
c19tYXNrOworICAgICAgICAgICAgICAgIG51bWJlciA+Pj0gb3ZlcmZsb3dfYml0c19jb3VudDsK
KyAgICAgICAgICAgICAgICBleHBvbmVudCA9IG92ZXJmbG93X2JpdHNfY291bnQ7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgYm9vbCB6ZXJvX3RhaWwgPSB0cnVlOworICAgICAg
ICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgICAgICsrY3VycmVudDsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gZW5kIHx8ICFpc0RpZ2l0KCpjdXJy
ZW50LCByYWRpeCkpIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB6ZXJvX3RhaWwgPSB6ZXJv
X3RhaWwgJiYgKmN1cnJlbnQgPT0gJzAnOworICAgICAgICAgICAgICAgICAgICBleHBvbmVudCAr
PSByYWRpeF9sb2dfMjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgaWYgKCFhbGxvd190cmFpbGluZ19qdW5rICYmIEFkdmFuY2VUb05vbnNwYWNl
KCZjdXJyZW50LCBlbmQpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0cmlu
Z192YWx1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgaW50IG1pZGRsZV92YWx1ZSA9ICgxIDw8IChvdmVyZmxvd19iaXRzX2NvdW50IC0gMSkp
OworICAgICAgICAgICAgICAgIGlmIChkcm9wcGVkX2JpdHMgPiBtaWRkbGVfdmFsdWUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgbnVtYmVyKys7ICAvLyBSb3VuZGluZyB1cC4KKyAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKGRyb3BwZWRfYml0cyA9PSBtaWRkbGVfdmFsdWUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gUm91bmRpbmcgdG8gZXZlbiB0byBjb25zaXN0ZW5jeSB3aXRoIGRlY2lt
YWxzOiBoYWxmLXdheSBjYXNlIHJvdW5kcworICAgICAgICAgICAgICAgICAgICAvLyB1cCBpZiBz
aWduaWZpY2FudCBwYXJ0IGlzIG9kZCBhbmQgZG93biBvdGhlcndpc2UuCisgICAgICAgICAgICAg
ICAgICAgIGlmICgobnVtYmVyICYgMSkgIT0gMCB8fCAhemVyb190YWlsKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBudW1iZXIrKzsgIC8vIFJvdW5kaW5nIHVwLgorICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIC8vIFJvdW5kaW5nIHVwIG1heSBjYXVzZSBvdmVyZmxvdy4KKyAgICAgICAgICAgICAgICBp
ZiAoKG51bWJlciAmICgoaW50NjRfdCkxIDw8IDUzKSkgIT0gMCkgeworICAgICAgICAgICAgICAg
ICAgICBleHBvbmVudCsrOworICAgICAgICAgICAgICAgICAgICBudW1iZXIgPj49IDE7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgKytjdXJyZW50OworICAgICAgICB9IHdoaWxlIChjdXJyZW50ICE9IGVuZCk7Cisg
ICAgICAgIAorICAgICAgICBBU1NFUlQobnVtYmVyIDwgKChpbnQ2NF90KTEgPDwgNTMpKTsKKyAg
ICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJsZT4obnVt
YmVyKSkgPT0gbnVtYmVyKTsKKyAgICAgICAgCisgICAgICAgICp0cmFpbGluZ19wb2ludGVyID0g
Y3VycmVudDsKKyAgICAgICAgCisgICAgICAgIGlmIChleHBvbmVudCA9PSAwKSB7CisgICAgICAg
ICAgICBpZiAoc2lnbikgeworICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT0gMCkgcmV0dXJu
IC0wLjA7CisgICAgICAgICAgICAgICAgbnVtYmVyID0gLW51bWJlcjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KG51bWJlcik7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIEFTU0VSVChudW1iZXIgIT0gMCk7CisgICAgICAgIHJldHVy
biBEb3VibGUoRGl5RnAobnVtYmVyLCBleHBvbmVudCkpLnZhbHVlKCk7CisgICAgfQorICAgIAor
ICAgIAorICAgIGRvdWJsZSBTdHJpbmdUb0RvdWJsZUNvbnZlcnRlcjo6U3RyaW5nVG9Eb3VibGUo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiBpbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQqIHByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50KSB7CisgICAg
ICAgIGNvbnN0IGNoYXIqIGN1cnJlbnQgPSBpbnB1dDsKKyAgICAgICAgY29uc3QgY2hhciogZW5k
ID0gaW5wdXQgKyBsZW5ndGg7CisgICAgICAgIAorICAgICAgICAqcHJvY2Vzc2VkX2NoYXJhY3Rl
cnNfY291bnQgPSAwOworICAgICAgICAKKyAgICAgICAgY29uc3QgYm9vbCBhbGxvd190cmFpbGlu
Z19qdW5rID0gKGZsYWdzXyAmIEFMTE9XX1RSQUlMSU5HX0pVTkspICE9IDA7CisgICAgICAgIGNv
bnN0IGJvb2wgYWxsb3dfbGVhZGluZ19zcGFjZXMgPSAoZmxhZ3NfICYgQUxMT1dfTEVBRElOR19T
UEFDRVMpICE9IDA7CisgICAgICAgIGNvbnN0IGJvb2wgYWxsb3dfdHJhaWxpbmdfc3BhY2VzID0g
KGZsYWdzXyAmIEFMTE9XX1RSQUlMSU5HX1NQQUNFUykgIT0gMDsKKyAgICAgICAgY29uc3QgYm9v
bCBhbGxvd19zcGFjZXNfYWZ0ZXJfc2lnbiA9IChmbGFnc18gJiBBTExPV19TUEFDRVNfQUZURVJf
U0lHTikgIT0gMDsKKyAgICAgICAgCisgICAgICAgIC8vIFRvIG1ha2Ugc3VyZSB0aGF0IGl0ZXJh
dG9yIGRlcmVmZXJlbmNpbmcgaXMgdmFsaWQgdGhlIGZvbGxvd2luZworICAgICAgICAvLyBjb252
ZW50aW9uIGlzIHVzZWQ6CisgICAgICAgIC8vIDEuIEVhY2ggJysrY3VycmVudCcgc3RhdGVtZW50
IGlzIGZvbGxvd2VkIGJ5IGNoZWNrIGZvciBlcXVhbGl0eSB0byAnZW5kJy4KKyAgICAgICAgLy8g
Mi4gSWYgQWR2YW5jZVRvTm9uc3BhY2UgcmV0dXJuZWQgZmFsc2UgdGhlbiBjdXJyZW50ID09IGVu
ZC4KKyAgICAgICAgLy8gMy4gSWYgJ2N1cnJlbnQnIGJlY29tZXMgZXF1YWwgdG8gJ2VuZCcgdGhl
IGZ1bmN0aW9uIHJldHVybnMgb3IgZ29lcyB0bworICAgICAgICAvLyAncGFyc2luZ19kb25lJy4K
KyAgICAgICAgLy8gNC4gJ2N1cnJlbnQnIGlzIG5vdCBkZXJlZmVyZW5jZWQgYWZ0ZXIgdGhlICdw
YXJzaW5nX2RvbmUnIGxhYmVsLgorICAgICAgICAvLyA1LiBDb2RlIGJlZm9yZSAncGFyc2luZ19k
b25lJyBtYXkgcmVseSBvbiAnY3VycmVudCAhPSBlbmQnLgorICAgICAgICBpZiAoY3VycmVudCA9
PSBlbmQpIHJldHVybiBlbXB0eV9zdHJpbmdfdmFsdWVfOworICAgICAgICAKKyAgICAgICAgaWYg
KGFsbG93X2xlYWRpbmdfc3BhY2VzIHx8IGFsbG93X3RyYWlsaW5nX3NwYWNlcykgeworICAgICAg
ICAgICAgaWYgKCFBZHZhbmNlVG9Ob25zcGFjZSgmY3VycmVudCwgZW5kKSkgeworICAgICAgICAg
ICAgICAgICpwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCA9IGN1cnJlbnQgLSBpbnB1dDsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZW1wdHlfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmICghYWxsb3dfbGVhZGluZ19zcGFjZXMgJiYgKGlucHV0ICE9IGN1cnJl
bnQpKSB7CisgICAgICAgICAgICAgICAgLy8gTm8gbGVhZGluZyBzcGFjZXMgYWxsb3dlZCwgYnV0
IEFkdmFuY2VUb05vbnNwYWNlIG1vdmVkIGZvcndhcmQuCisgICAgICAgICAgICAgICAgcmV0dXJu
IGp1bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgLy8gVGhlIGxvbmdlc3QgZm9ybSBvZiBzaW1wbGlmaWVkIG51bWJlciBpczogIi08
c2lnbmlmaWNhbnQgZGlnaXRzPi4xZVhYWFwwIi4KKyAgICAgICAgY29uc3QgaW50IGtCdWZmZXJT
aXplID0ga01heFNpZ25pZmljYW50RGlnaXRzICsgMTA7CisgICAgICAgIGNoYXIgYnVmZmVyW2tC
dWZmZXJTaXplXTsgIC8vIE5PTElOVDogc2l6ZSBpcyBrbm93biBhdCBjb21waWxlIHRpbWUuCisg
ICAgICAgIGludCBidWZmZXJfcG9zID0gMDsKKyAgICAgICAgCisgICAgICAgIC8vIEV4cG9uZW50
IHdpbGwgYmUgYWRqdXN0ZWQgaWYgaW5zaWduaWZpY2FudCBkaWdpdHMgb2YgdGhlIGludGVnZXIg
cGFydAorICAgICAgICAvLyBvciBpbnNpZ25pZmljYW50IGxlYWRpbmcgemVyb3Mgb2YgdGhlIGZy
YWN0aW9uYWwgcGFydCBhcmUgZHJvcHBlZC4KKyAgICAgICAgaW50IGV4cG9uZW50ID0gMDsKKyAg
ICAgICAgaW50IHNpZ25pZmljYW50X2RpZ2l0cyA9IDA7CisgICAgICAgIGludCBpbnNpZ25pZmlj
YW50X2RpZ2l0cyA9IDA7CisgICAgICAgIGJvb2wgbm9uemVyb19kaWdpdF9kcm9wcGVkID0gZmFs
c2U7CisgICAgICAgIGJvb2wgZnJhY3Rpb25hbF9wYXJ0ID0gZmFsc2U7CisgICAgICAgIAorICAg
ICAgICBib29sIHNpZ24gPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmICgqY3VycmVudCA9
PSAnKycgfHwgKmN1cnJlbnQgPT0gJy0nKSB7CisgICAgICAgICAgICBzaWduID0gKCpjdXJyZW50
ID09ICctJyk7CisgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgICAgICBjb25zdCBjaGFy
KiBuZXh0X25vbl9zcGFjZSA9IGN1cnJlbnQ7CisgICAgICAgICAgICAvLyBTa2lwIGZvbGxvd2lu
ZyBzcGFjZXMgKGlmIGFsbG93ZWQpLgorICAgICAgICAgICAgaWYgKCFBZHZhbmNlVG9Ob25zcGFj
ZSgmbmV4dF9ub25fc3BhY2UsIGVuZCkpIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87CisgICAg
ICAgICAgICBpZiAoIWFsbG93X3NwYWNlc19hZnRlcl9zaWduICYmIChjdXJyZW50ICE9IG5leHRf
bm9uX3NwYWNlKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjdXJyZW50ID0gbmV4dF9ub25fc3BhY2U7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChpbmZpbml0eV9zeW1ib2xfICE9IE5VTEwp
IHsKKyAgICAgICAgICAgIGlmICgqY3VycmVudCA9PSBpbmZpbml0eV9zeW1ib2xfWzBdKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCFDb25zdW1lU3ViU3RyaW5nKCZjdXJyZW50LCBlbmQsIGluZmlu
aXR5X3N5bWJvbF8pKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192
YWx1ZV87CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGlmICghKGFsbG93X3RyYWlsaW5nX3NwYWNlcyB8fCBhbGxvd190cmFpbGluZ19qdW5rKSAm
JiAoY3VycmVudCAhPSBlbmQpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0
cmluZ192YWx1ZV87CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghYWxs
b3dfdHJhaWxpbmdfanVuayAmJiBBZHZhbmNlVG9Ob25zcGFjZSgmY3VycmVudCwgZW5kKSkgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBBU1NFUlQoYnVmZmVy
X3BvcyA9PSAwKTsKKyAgICAgICAgICAgICAgICAqcHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291bnQg
PSBjdXJyZW50IC0gaW5wdXQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNpZ24gPyAtRG91Ymxl
OjpJbmZpbml0eSgpIDogRG91YmxlOjpJbmZpbml0eSgpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBpZiAobmFuX3N5bWJvbF8gIT0gTlVMTCkgeworICAgICAg
ICAgICAgaWYgKCpjdXJyZW50ID09IG5hbl9zeW1ib2xfWzBdKSB7CisgICAgICAgICAgICAgICAg
aWYgKCFDb25zdW1lU3ViU3RyaW5nKCZjdXJyZW50LCBlbmQsIG5hbl9zeW1ib2xfKSkgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIShhbGxvd190cmFp
bGluZ19zcGFjZXMgfHwgYWxsb3dfdHJhaWxpbmdfanVuaykgJiYgKGN1cnJlbnQgIT0gZW5kKSkg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWFsbG93X3RyYWlsaW5nX2p1bmsgJiYg
QWR2YW5jZVRvTm9uc3BhY2UoJmN1cnJlbnQsIGVuZCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgQVNTRVJUKGJ1ZmZlcl9wb3MgPT0gMCk7CisgICAgICAg
ICAgICAgICAgKnByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50ID0gY3VycmVudCAtIGlucHV0Owor
ICAgICAgICAgICAgICAgIHJldHVybiBzaWduID8gLURvdWJsZTo6TmFOKCkgOiBEb3VibGU6Ok5h
TigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGxl
YWRpbmdfemVybyA9IGZhbHNlOworICAgICAgICBpZiAoKmN1cnJlbnQgPT0gJzAnKSB7CisgICAg
ICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQpIHsKKyAg
ICAgICAgICAgICAgICAqcHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291bnQgPSBjdXJyZW50IC0gaW5w
dXQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNpZ25lZFplcm8oc2lnbik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGxlYWRpbmdfemVybyA9IHRydWU7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIC8vIEl0IGNvdWxkIGJlIGhleGFkZWNpbWFsIHZhbHVlLgor
ICAgICAgICAgICAgaWYgKChmbGFnc18gJiBBTExPV19IRVgpICYmICgqY3VycmVudCA9PSAneCcg
fHwgKmN1cnJlbnQgPT0gJ1gnKSkgeworICAgICAgICAgICAgICAgICsrY3VycmVudDsKKyAgICAg
ICAgICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQgfHwgIWlzRGlnaXQoKmN1cnJlbnQsIDE2KSkg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOyAgLy8gIjB4
Ii4KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogdGFpbF9wb2ludGVyID0gTlVMTDsKKyAgICAgICAgICAgICAgICBkb3VibGUg
cmVzdWx0ID0gUmFkaXhTdHJpbmdUb0RvdWJsZTw0PihjdXJyZW50LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93X3Ry
YWlsaW5nX2p1bmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAganVua19zdHJpbmdfdmFsdWVfLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0YWlsX3BvaW50ZXIpOworICAgICAgICAg
ICAgICAgIGlmICh0YWlsX3BvaW50ZXIgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoYWxsb3dfdHJhaWxpbmdfc3BhY2VzKSBBZHZhbmNlVG9Ob25zcGFjZSgmdGFpbF9wb2ludGVy
LCBlbmQpOworICAgICAgICAgICAgICAgICAgICAqcHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291bnQg
PSB0YWlsX3BvaW50ZXIgLSBpbnB1dDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgLy8gSWdub3JlIGxlYWRpbmcgemVyb3MgaW4gdGhlIGludGVnZXIgcGFydC4KKyAgICAgICAg
ICAgIHdoaWxlICgqY3VycmVudCA9PSAnMCcpIHsKKyAgICAgICAgICAgICAgICArK2N1cnJlbnQ7
CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gZW5kKSB7CisgICAgICAgICAgICAgICAg
ICAgICpwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCA9IGN1cnJlbnQgLSBpbnB1dDsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFNpZ25lZFplcm8oc2lnbik7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIG9jdGFs
ID0gbGVhZGluZ196ZXJvICYmIChmbGFnc18gJiBBTExPV19PQ1RBTFMpICE9IDA7CisgICAgICAg
IAorICAgICAgICAvLyBDb3B5IHNpZ25pZmljYW50IGRpZ2l0cyBvZiB0aGUgaW50ZWdlciBwYXJ0
IChpZiBhbnkpIHRvIHRoZSBidWZmZXIuCisgICAgICAgIHdoaWxlICgqY3VycmVudCA+PSAnMCcg
JiYgKmN1cnJlbnQgPD0gJzknKSB7CisgICAgICAgICAgICBpZiAoc2lnbmlmaWNhbnRfZGlnaXRz
IDwga01heFNpZ25pZmljYW50RGlnaXRzKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGJ1ZmZl
cl9wb3MgPCBrQnVmZmVyU2l6ZSk7CisgICAgICAgICAgICAgICAgYnVmZmVyW2J1ZmZlcl9wb3Mr
K10gPSBzdGF0aWNfY2FzdDxjaGFyPigqY3VycmVudCk7CisgICAgICAgICAgICAgICAgc2lnbmlm
aWNhbnRfZGlnaXRzKys7CisgICAgICAgICAgICAgICAgLy8gV2lsbCBsYXRlciBjaGVjayBpZiBp
dCdzIGFuIG9jdGFsIGluIHRoZSBidWZmZXIuCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIGluc2lnbmlmaWNhbnRfZGlnaXRzKys7ICAvLyBNb3ZlIHRoZSBkaWdpdCBpbnRv
IHRoZSBleHBvbmVudGlhbCBwYXJ0LgorICAgICAgICAgICAgICAgIG5vbnplcm9fZGlnaXRfZHJv
cHBlZCA9IG5vbnplcm9fZGlnaXRfZHJvcHBlZCB8fCAqY3VycmVudCAhPSAnMCc7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBvY3RhbCA9IG9jdGFsICYmICpjdXJyZW50IDwgJzgnOworICAg
ICAgICAgICAgKytjdXJyZW50OworICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gZW5kKSBnb3Rv
IHBhcnNpbmdfZG9uZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHNpZ25pZmlj
YW50X2RpZ2l0cyA9PSAwKSB7CisgICAgICAgICAgICBvY3RhbCA9IGZhbHNlOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBpZiAoKmN1cnJlbnQgPT0gJy4nKSB7CisgICAgICAgICAgICBp
ZiAob2N0YWwgJiYgIWFsbG93X3RyYWlsaW5nX2p1bmspIHJldHVybiBqdW5rX3N0cmluZ192YWx1
ZV87CisgICAgICAgICAgICBpZiAob2N0YWwpIGdvdG8gcGFyc2luZ19kb25lOworICAgICAgICAg
ICAgCisgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBl
bmQpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2lnbmlmaWNhbnRfZGlnaXRzID09IDAgJiYgIWxl
YWRpbmdfemVybykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFs
dWVfOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGdvdG8g
cGFyc2luZ19kb25lOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKHNpZ25pZmljYW50X2RpZ2l0cyA9PSAwKSB7CisgICAgICAg
ICAgICAgICAgLy8gb2N0YWwgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAvLyBJbnRlZ2VyIHBh
cnQgY29uc2lzdHMgb2YgMCBvciBpcyBhYnNlbnQuIFNpZ25pZmljYW50IGRpZ2l0cyBzdGFydCBh
ZnRlcgorICAgICAgICAgICAgICAgIC8vIGxlYWRpbmcgemVyb3MgKGlmIGFueSkuCisgICAgICAg
ICAgICAgICAgd2hpbGUgKCpjdXJyZW50ID09ICcwJykgeworICAgICAgICAgICAgICAgICAgICAr
K2N1cnJlbnQ7CisgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ID09IGVuZCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgKnByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50ID0gY3VycmVu
dCAtIGlucHV0OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNpZ25lZFplcm8oc2ln
bik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZXhwb25lbnQt
LTsgIC8vIE1vdmUgdGhpcyAwIGludG8gdGhlIGV4cG9uZW50LgorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gV2UgZG9uJ3QgZW1p
dCBhICcuJywgYnV0IGFkanVzdCB0aGUgZXhwb25lbnQgaW5zdGVhZC4KKyAgICAgICAgICAgIGZy
YWN0aW9uYWxfcGFydCA9IHRydWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoZXJl
IGlzIGEgZnJhY3Rpb25hbCBwYXJ0LgorICAgICAgICAgICAgd2hpbGUgKCpjdXJyZW50ID49ICcw
JyAmJiAqY3VycmVudCA8PSAnOScpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2lnbmlmaWNhbnRf
ZGlnaXRzIDwga01heFNpZ25pZmljYW50RGlnaXRzKSB7CisgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChidWZmZXJfcG9zIDwga0J1ZmZlclNpemUpOworICAgICAgICAgICAgICAgICAgICBidWZm
ZXJbYnVmZmVyX3BvcysrXSA9IHN0YXRpY19jYXN0PGNoYXI+KCpjdXJyZW50KTsKKyAgICAgICAg
ICAgICAgICAgICAgc2lnbmlmaWNhbnRfZGlnaXRzKys7CisgICAgICAgICAgICAgICAgICAgIGV4
cG9uZW50LS07CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gSWdub3JlIGluc2lnbmlmaWNhbnQgZGlnaXRzIGluIHRoZSBmcmFjdGlvbmFsIHBhcnQuCisg
ICAgICAgICAgICAgICAgICAgIG5vbnplcm9fZGlnaXRfZHJvcHBlZCA9IG5vbnplcm9fZGlnaXRf
ZHJvcHBlZCB8fCAqY3VycmVudCAhPSAnMCc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICsrY3VycmVudDsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQpIGdv
dG8gcGFyc2luZ19kb25lOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBpZiAoIWxlYWRpbmdfemVybyAmJiBleHBvbmVudCA9PSAwICYmIHNpZ25pZmljYW50X2Rp
Z2l0cyA9PSAwKSB7CisgICAgICAgICAgICAvLyBJZiBsZWFkaW5nX3plcm9zIGlzIHRydWUgdGhl
biB0aGUgc3RyaW5nIGNvbnRhaW5zIHplcm9zLgorICAgICAgICAgICAgLy8gSWYgZXhwb25lbnQg
PCAwIHRoZW4gc3RyaW5nIHdhcyBbKy1dXC4wKi4uLgorICAgICAgICAgICAgLy8gSWYgc2lnbmlm
aWNhbnRfZGlnaXRzICE9IDAgdGhlIHN0cmluZyBpcyBub3QgZXF1YWwgdG8gMC4KKyAgICAgICAg
ICAgIC8vIE90aGVyd2lzZSB0aGVyZSBhcmUgbm8gZGlnaXRzIGluIHRoZSBzdHJpbmcuCisgICAg
ICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICAvLyBQYXJzZSBleHBvbmVudGlhbCBwYXJ0LgorICAgICAgICBpZiAoKmN1cnJlbnQg
PT0gJ2UnIHx8ICpjdXJyZW50ID09ICdFJykgeworICAgICAgICAgICAgaWYgKG9jdGFsICYmICFh
bGxvd190cmFpbGluZ19qdW5rKSByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAgICAg
ICAgaWYgKG9jdGFsKSBnb3RvIHBhcnNpbmdfZG9uZTsKKyAgICAgICAgICAgICsrY3VycmVudDsK
KyAgICAgICAgICAgIGlmIChjdXJyZW50ID09IGVuZCkgeworICAgICAgICAgICAgICAgIGlmIChh
bGxvd190cmFpbGluZ19qdW5rKSB7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gcGFyc2luZ19k
b25lOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBqdW5rX3N0cmluZ192YWx1ZV87CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgY2hhciBzaWduID0gJysnOworICAgICAgICAgICAgaWYgKCpjdXJyZW50ID09
ICcrJyB8fCAqY3VycmVudCA9PSAnLScpIHsKKyAgICAgICAgICAgICAgICBzaWduID0gc3RhdGlj
X2Nhc3Q8Y2hhcj4oKmN1cnJlbnQpOworICAgICAgICAgICAgICAgICsrY3VycmVudDsKKyAgICAg
ICAgICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGFsbG93X3RyYWlsaW5nX2p1bmspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcGFy
c2luZ19kb25lOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKGN1cnJlbnQgPT0gZW5kIHx8ICpjdXJyZW50IDwgJzAnIHx8ICpjdXJyZW50ID4g
JzknKSB7CisgICAgICAgICAgICAgICAgaWYgKGFsbG93X3RyYWlsaW5nX2p1bmspIHsKKyAgICAg
ICAgICAgICAgICAgICAgZ290byBwYXJzaW5nX2RvbmU7CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNv
bnN0IGludCBtYXhfZXhwb25lbnQgPSBJTlRfTUFYIC8gMjsKKyAgICAgICAgICAgIEFTU0VSVCgt
bWF4X2V4cG9uZW50IC8gMiA8PSBleHBvbmVudCAmJiBleHBvbmVudCA8PSBtYXhfZXhwb25lbnQg
LyAyKTsKKyAgICAgICAgICAgIGludCBudW0gPSAwOworICAgICAgICAgICAgZG8geworICAgICAg
ICAgICAgICAgIC8vIENoZWNrIG92ZXJmbG93LgorICAgICAgICAgICAgICAgIGludCBkaWdpdCA9
ICpjdXJyZW50IC0gJzAnOworICAgICAgICAgICAgICAgIGlmIChudW0gPj0gbWF4X2V4cG9uZW50
IC8gMTAKKyAgICAgICAgICAgICAgICAgICAgJiYgIShudW0gPT0gbWF4X2V4cG9uZW50IC8gMTAg
JiYgZGlnaXQgPD0gbWF4X2V4cG9uZW50ICUgMTApKSB7CisgICAgICAgICAgICAgICAgICAgIG51
bSA9IG1heF9leHBvbmVudDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICBudW0gPSBudW0gKiAxMCArIGRpZ2l0OworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgICAgICB9IHdoaWxlIChjdXJyZW50ICE9IGVu
ZCAmJiAqY3VycmVudCA+PSAnMCcgJiYgKmN1cnJlbnQgPD0gJzknKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgZXhwb25lbnQgKz0gKHNpZ24gPT0gJy0nID8gLW51bSA6IG51bSk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghKGFsbG93X3RyYWlsaW5nX3NwYWNlcyB8fCBh
bGxvd190cmFpbGluZ19qdW5rKSAmJiAoY3VycmVudCAhPSBlbmQpKSB7CisgICAgICAgICAgICBy
ZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAgICB9CisgICAgICAgIGlmICghYWxsb3df
dHJhaWxpbmdfanVuayAmJiBBZHZhbmNlVG9Ob25zcGFjZSgmY3VycmVudCwgZW5kKSkgeworICAg
ICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoYWxsb3dfdHJhaWxpbmdfc3BhY2VzKSB7CisgICAgICAgICAgICBBZHZhbmNlVG9Ob25zcGFj
ZSgmY3VycmVudCwgZW5kKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBwYXJzaW5nX2RvbmU6
CisgICAgICAgIGV4cG9uZW50ICs9IGluc2lnbmlmaWNhbnRfZGlnaXRzOworICAgICAgICAKKyAg
ICAgICAgaWYgKG9jdGFsKSB7CisgICAgICAgICAgICBkb3VibGUgcmVzdWx0OworICAgICAgICAg
ICAgY29uc3QgY2hhciogdGFpbF9wb2ludGVyID0gTlVMTDsKKyAgICAgICAgICAgIHJlc3VsdCA9
IFJhZGl4U3RyaW5nVG9Eb3VibGU8Mz4oYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBidWZmZXIgKyBidWZmZXJfcG9zLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhbGxvd190cmFpbGluZ19qdW5rLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdW5rX3N0cmluZ192YWx1ZV8sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0YWlsX3BvaW50ZXIpOwor
ICAgICAgICAgICAgQVNTRVJUKHRhaWxfcG9pbnRlciAhPSBOVUxMKTsKKyAgICAgICAgICAgICpw
cm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCA9IGN1cnJlbnQgLSBpbnB1dDsKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChub256ZXJv
X2RpZ2l0X2Ryb3BwZWQpIHsKKyAgICAgICAgICAgIGJ1ZmZlcltidWZmZXJfcG9zKytdID0gJzEn
OworICAgICAgICAgICAgZXhwb25lbnQtLTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
QVNTRVJUKGJ1ZmZlcl9wb3MgPCBrQnVmZmVyU2l6ZSk7CisgICAgICAgIGJ1ZmZlcltidWZmZXJf
cG9zXSA9ICdcMCc7CisgICAgICAgIAorICAgICAgICBkb3VibGUgY29udmVydGVkID0gU3RydG9k
KFZlY3Rvcjxjb25zdCBjaGFyPihidWZmZXIsIGJ1ZmZlcl9wb3MpLCBleHBvbmVudCk7CisgICAg
ICAgICpwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCA9IGN1cnJlbnQgLSBpbnB1dDsKKyAgICAg
ICAgcmV0dXJuIHNpZ24/IC1jb252ZXJ0ZWQ6IGNvbnZlcnRlZDsKKyAgICB9CisgICAgCit9ICAv
LyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24u
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjRkNmZjMmY1NzQzNmJmYzA3ZTcyYmY2MDU2MzI5ZDE4ZjdmNjdiZWMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZG91YmxlLWNvbnZl
cnNpb24uaApAQCAtMCwwICsxLDUwMiBAQAorLy8gQ29weXJpZ2h0IDIwMTAgdGhlIFY4IHByb2pl
Y3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
Ly8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisj
aWZuZGVmIERPVUJMRV9DT05WRVJTSU9OX0RPVUJMRV9DT05WRVJTSU9OX0hfCisjZGVmaW5lIERP
VUJMRV9DT05WRVJTSU9OX0RPVUJMRV9DT05WRVJTSU9OX0hfCisKKyNpbmNsdWRlICJ1dGlscy5o
IgorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKKyAg
ICAKKyAgICBjbGFzcyBEb3VibGVUb1N0cmluZ0NvbnZlcnRlciB7CisgICAgcHVibGljOgorICAg
ICAgICAvLyBXaGVuIGNhbGxpbmcgVG9GaXhlZCB3aXRoIGEgZG91YmxlID4gMTBea01heEZpeGVk
RGlnaXRzQmVmb3JlUG9pbnQKKyAgICAgICAgLy8gb3IgYSByZXF1ZXN0ZWRfZGlnaXRzIHBhcmFt
ZXRlciA+IGtNYXhGaXhlZERpZ2l0c0FmdGVyUG9pbnQgdGhlbiB0aGUKKyAgICAgICAgLy8gZnVu
Y3Rpb24gcmV0dXJucyBmYWxzZS4KKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBrTWF4Rml4ZWRE
aWdpdHNCZWZvcmVQb2ludCA9IDYwOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtNYXhGaXhl
ZERpZ2l0c0FmdGVyUG9pbnQgPSA2MDsKKyAgICAgICAgCisgICAgICAgIC8vIFdoZW4gY2FsbGlu
ZyBUb0V4cG9uZW50aWFsIHdpdGggYSByZXF1ZXN0ZWRfZGlnaXRzCisgICAgICAgIC8vIHBhcmFt
ZXRlciA+IGtNYXhFeHBvbmVudGlhbERpZ2l0cyB0aGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zIGZh
bHNlLgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtNYXhFeHBvbmVudGlhbERpZ2l0cyA9IDEy
MDsKKyAgICAgICAgCisgICAgICAgIC8vIFdoZW4gY2FsbGluZyBUb1ByZWNpc2lvbiB3aXRoIGEg
cmVxdWVzdGVkX2RpZ2l0cworICAgICAgICAvLyBwYXJhbWV0ZXIgPCBrTWluUHJlY2lzaW9uRGln
aXRzIG9yIHJlcXVlc3RlZF9kaWdpdHMgPiBrTWF4UHJlY2lzaW9uRGlnaXRzCisgICAgICAgIC8v
IHRoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UuCisgICAgICAgIHN0YXRpYyBjb25zdCBp
bnQga01pblByZWNpc2lvbkRpZ2l0cyA9IDE7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQga01h
eFByZWNpc2lvbkRpZ2l0cyA9IDEyMDsKKyAgICAgICAgCisgICAgICAgIGVudW0gRmxhZ3Mgewor
ICAgICAgICAgICAgTk9fRkxBR1MgPSAwLAorICAgICAgICAgICAgRU1JVF9QT1NJVElWRV9FWFBP
TkVOVF9TSUdOID0gMSwKKyAgICAgICAgICAgIEVNSVRfVFJBSUxJTkdfREVDSU1BTF9QT0lOVCA9
IDIsCisgICAgICAgICAgICBFTUlUX1RSQUlMSU5HX1pFUk9fQUZURVJfUE9JTlQgPSA0LAorICAg
ICAgICAgICAgVU5JUVVFX1pFUk8gPSA4CisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICAv
LyBGbGFncyBzaG91bGQgYmUgYSBiaXQtb3IgY29tYmluYXRpb24gb2YgdGhlIHBvc3NpYmxlIEZs
YWdzLWVudW0uCisgICAgICAgIC8vICAtIE5PX0ZMQUdTOiBubyBzcGVjaWFsIGZsYWdzLgorICAg
ICAgICAvLyAgLSBFTUlUX1BPU0lUSVZFX0VYUE9ORU5UX1NJR046IHdoZW4gdGhlIG51bWJlciBp
cyBjb252ZXJ0ZWQgaW50byBleHBvbmVudAorICAgICAgICAvLyAgICBmb3JtLCBlbWl0cyBhICcr
JyBmb3IgcG9zaXRpdmUgZXhwb25lbnRzLiBFeGFtcGxlOiAxLjJlKzIuCisgICAgICAgIC8vICAt
IEVNSVRfVFJBSUxJTkdfREVDSU1BTF9QT0lOVDogd2hlbiB0aGUgaW5wdXQgbnVtYmVyIGlzIGFu
IGludGVnZXIgYW5kIGlzCisgICAgICAgIC8vICAgIGNvbnZlcnRlZCBpbnRvIGRlY2ltYWwgZm9y
bWF0IHRoZW4gYSB0cmFpbGluZyBkZWNpbWFsIHBvaW50IGlzIGFwcGVuZGVkLgorICAgICAgICAv
LyAgICBFeGFtcGxlOiAyMzQ1LjAgaXMgY29udmVydGVkIHRvICIyMzQ1LiIuCisgICAgICAgIC8v
ICAtIEVNSVRfVFJBSUxJTkdfWkVST19BRlRFUl9QT0lOVDogaW4gYWRkaXRpb24gdG8gYSB0cmFp
bGluZyBkZWNpbWFsIHBvaW50CisgICAgICAgIC8vICAgIGVtaXRzIGEgdHJhaWxpbmcgJzAnLWNo
YXJhY3Rlci4gVGhpcyBmbGFnIHJlcXVpcmVzIHRoZQorICAgICAgICAvLyAgICBFWE1JVF9UUkFJ
TElOR19ERUNJTUFMX1BPSU5UIGZsYWcuCisgICAgICAgIC8vICAgIEV4YW1wbGU6IDIzNDUuMCBp
cyBjb252ZXJ0ZWQgdG8gIjIzNDUuMCIuCisgICAgICAgIC8vICAtIFVOSVFVRV9aRVJPOiAiLTAu
MCIgaXMgY29udmVydGVkIHRvICIwLjAiLgorICAgICAgICAvLworICAgICAgICAvLyBJbmZpbml0
eSBzeW1ib2wgYW5kIG5hbl9zeW1ib2wgcHJvdmlkZSB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9u
IGZvciB0aGVzZQorICAgICAgICAvLyBzcGVjaWFsIHZhbHVlcy4gSWYgdGhlIHN0cmluZyBpcyBO
VUxMIGFuZCB0aGUgc3BlY2lhbCB2YWx1ZSBpcyBlbmNvdW50ZXJlZAorICAgICAgICAvLyB0aGVu
IHRoZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyByZXR1cm4gZmFsc2UuCisgICAgICAgIC8vCisgICAg
ICAgIC8vIFRoZSBleHBvbmVudF9jaGFyYWN0ZXIgaXMgdXNlZCBpbiBleHBvbmVudGlhbCByZXBy
ZXNlbnRhdGlvbnMuIEl0IGlzCisgICAgICAgIC8vIHVzdWFsbHkgJ2UnIG9yICdFJy4KKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gV2hlbiBjb252ZXJ0aW5nIHRvIHRoZSBzaG9ydGVzdCByZXByZXNl
bnRhdGlvbiB0aGUgY29udmVydGVyIHdpbGwKKyAgICAgICAgLy8gcmVwcmVzZW50IGlucHV0IG51
bWJlcnMgaW4gZGVjaW1hbCBmb3JtYXQgaWYgdGhleSBhcmUgaW4gdGhlIGludGVydmFsCisgICAg
ICAgIC8vIFsxMF5kZWNpbWFsX2luX3Nob3J0ZXN0X2xvdzsgMTBeZGVjaW1hbF9pbl9zaG9ydGVz
dF9oaWdoWworICAgICAgICAvLyAgICAobG93ZXIgYm91bmRhcnkgaW5jbHVkZWQsIGdyZWF0ZXIg
Ym91bmRhcnkgZXhjbHVkZWQpLgorICAgICAgICAvLyBFeGFtcGxlOiB3aXRoIGRlY2ltYWxfaW5f
c2hvcnRlc3RfbG93ID0gLTYgYW5kCisgICAgICAgIC8vICAgICAgICAgICAgICAgZGVjaW1hbF9p
bl9zaG9ydGVzdF9oaWdoID0gMjE6CisgICAgICAgIC8vICAgVG9TaG9ydGVzdCgwLjAwMDAwMSkg
IC0+ICIwLjAwMDAwMSIKKyAgICAgICAgLy8gICBUb1Nob3J0ZXN0KDAuMDAwMDAwMSkgLT4gIjFl
LTciCisgICAgICAgIC8vICAgVG9TaG9ydGVzdCgxMTExMTExMTExMTExMTExMTExMTEuMCkgIC0+
ICIxMTExMTExMTExMTExMTExMTAwMDAiCisgICAgICAgIC8vICAgVG9TaG9ydGVzdCgxMDAwMDAw
MDAwMDAwMDAwMDAwMDAuMCkgIC0+ICIxMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisgICAgICAgIC8v
ICAgVG9TaG9ydGVzdCgxMTExMTExMTExMTExMTExMTExMTExLjApIC0+ICIxLjExMTExMTExMTEx
MTExMTFlKzIxIgorICAgICAgICAvLworICAgICAgICAvLyBXaGVuIGNvbnZlcnRpbmcgdG8gcHJl
Y2lzaW9uIG1vZGUgdGhlIGNvbnZlcnRlciBtYXkgYWRkCisgICAgICAgIC8vIG1heF9sZWFkaW5n
X3BhZGRpbmdfemVyb2VzIGJlZm9yZSByZXR1cm5pbmcgdGhlIG51bWJlciBpbiBleHBvbmVudGlh
bAorICAgICAgICAvLyBmb3JtYXQuCisgICAgICAgIC8vIEV4YW1wbGUgd2l0aCBtYXhfbGVhZGlu
Z19wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZSA9IDYuCisgICAgICAgIC8vICAgVG9Q
cmVjaXNpb24oMC4wMDAwMDEyMzQ1LCAyKSAtPiAiMC4wMDAwMDEyIgorICAgICAgICAvLyAgIFRv
UHJlY2lzaW9uKDAuMDAwMDAwMTIzNDUsIDIpIC0+ICIxLjJlLTciCisgICAgICAgIC8vIFNpbWls
YXJpbHkgdGhlIGNvbnZlcnRlciBtYXkgYWRkIHVwIHRvCisgICAgICAgIC8vIG1heF90cmFpbGlu
Z19wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZSBpbiBwcmVjaXNpb24gbW9kZSB0byBh
dm9pZAorICAgICAgICAvLyByZXR1cm5pbmcgYW4gZXhwb25lbnRpYWwgcmVwcmVzZW50YXRpb24u
IEEgemVybyBhZGRlZCBieSB0aGUKKyAgICAgICAgLy8gRU1JVF9UUkFJTElOR19aRVJPX0FGVEVS
X1BPSU5UIGZsYWcgaXMgY291bnRlZCBmb3IgdGhpcyBsaW1pdC4KKyAgICAgICAgLy8gRXhhbXBs
ZXMgZm9yIG1heF90cmFpbGluZ19wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZSA9IDE6
CisgICAgICAgIC8vICAgVG9QcmVjaXNpb24oMjMwLjAsIDIpIC0+ICIyMzAiCisgICAgICAgIC8v
ICAgVG9QcmVjaXNpb24oMjMwLjAsIDIpIC0+ICIyMzAuIiAgd2l0aCBFTUlUX1RSQUlMSU5HX0RF
Q0lNQUxfUE9JTlQuCisgICAgICAgIC8vICAgVG9QcmVjaXNpb24oMjMwLjAsIDIpIC0+ICIyLjNl
MiIgd2l0aCBFTUlUX1RSQUlMSU5HX1pFUk9fQUZURVJfUE9JTlQuCisgICAgICAgIERvdWJsZVRv
U3RyaW5nQ29udmVydGVyKGludCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciogaW5maW5pdHlfc3ltYm9sLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKiBuYW5fc3ltYm9sLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGFyIGV4cG9uZW50X2NoYXJhY3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGRlY2ltYWxfaW5fc2hvcnRlc3RfbG93LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgZGVjaW1hbF9pbl9zaG9ydGVzdF9oaWdoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgbWF4X2xlYWRpbmdfcGFkZGluZ196ZXJvZXNfaW5fcHJl
Y2lzaW9uX21vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXhfdHJh
aWxpbmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGUpCisgICAgICAgIDogZmxhZ3Nf
KGZsYWdzKSwKKyAgICAgICAgaW5maW5pdHlfc3ltYm9sXyhpbmZpbml0eV9zeW1ib2wpLAorICAg
ICAgICBuYW5fc3ltYm9sXyhuYW5fc3ltYm9sKSwKKyAgICAgICAgZXhwb25lbnRfY2hhcmFjdGVy
XyhleHBvbmVudF9jaGFyYWN0ZXIpLAorICAgICAgICBkZWNpbWFsX2luX3Nob3J0ZXN0X2xvd18o
ZGVjaW1hbF9pbl9zaG9ydGVzdF9sb3cpLAorICAgICAgICBkZWNpbWFsX2luX3Nob3J0ZXN0X2hp
Z2hfKGRlY2ltYWxfaW5fc2hvcnRlc3RfaGlnaCksCisgICAgICAgIG1heF9sZWFkaW5nX3BhZGRp
bmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2RlXygKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9sZWFkaW5nX3BhZGRpbmdfemVyb2VzX2lu
X3ByZWNpc2lvbl9tb2RlKSwKKyAgICAgICAgbWF4X3RyYWlsaW5nX3BhZGRpbmdfemVyb2VzX2lu
X3ByZWNpc2lvbl9tb2RlXygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtYXhfdHJhaWxpbmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9u
X21vZGUpIHsKKyAgICAgICAgICAgIC8vIFdoZW4gJ3RyYWlsaW5nIHplcm8gYWZ0ZXIgdGhlIHBv
aW50JyBpcyBzZXQsIHRoZW4gJ3RyYWlsaW5nIHBvaW50JworICAgICAgICAgICAgLy8gbXVzdCBi
ZSBzZXQgdG9vLgorICAgICAgICAgICAgQVNTRVJUKCgoZmxhZ3MgJiBFTUlUX1RSQUlMSU5HX0RF
Q0lNQUxfUE9JTlQpICE9IDApIHx8CisgICAgICAgICAgICAgICAgICAgISgoZmxhZ3MgJiBFTUlU
X1RSQUlMSU5HX1pFUk9fQUZURVJfUE9JTlQpICE9IDApKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgLy8gUmV0dXJucyBhIGNvbnZlcnRlciBmb2xsb3dpbmcgdGhlIEVjbWFTY3JpcHQg
c3BlY2lmaWNhdGlvbi4KKyAgICAgICAgc3RhdGljIGNvbnN0IERvdWJsZVRvU3RyaW5nQ29udmVy
dGVyJiBFY21hU2NyaXB0Q29udmVydGVyKCk7CisgICAgICAgIAorICAgICAgICAvLyBDb21wdXRl
cyB0aGUgc2hvcnRlc3Qgc3RyaW5nIG9mIGRpZ2l0cyB0aGF0IGNvcnJlY3RseSByZXByZXNlbnQg
dGhlIGlucHV0CisgICAgICAgIC8vIG51bWJlci4gRGVwZW5kaW5nIG9uIGRlY2ltYWxfaW5fc2hv
cnRlc3RfbG93IGFuZCBkZWNpbWFsX2luX3Nob3J0ZXN0X2hpZ2gKKyAgICAgICAgLy8gKHNlZSBj
b25zdHJ1Y3RvcikgaXQgdGhlbiBlaXRoZXIgcmV0dXJucyBhIGRlY2ltYWwgcmVwcmVzZW50YXRp
b24sIG9yIGFuCisgICAgICAgIC8vIGV4cG9uZW50aWFsIHJlcHJlc2VudGF0aW9uLgorICAgICAg
ICAvLyBFeGFtcGxlIHdpdGggZGVjaW1hbF9pbl9zaG9ydGVzdF9sb3cgPSAtNiwKKyAgICAgICAg
Ly8gICAgICAgICAgICAgIGRlY2ltYWxfaW5fc2hvcnRlc3RfaGlnaCA9IDIxLAorICAgICAgICAv
LyAgICAgICAgICAgICAgRU1JVF9QT1NJVElWRV9FWFBPTkVOVF9TSUdOIGFjdGl2YXRlZCwgYW5k
CisgICAgICAgIC8vICAgICAgICAgICAgICBFTUlUX1RSQUlMSU5HX0RFQ0lNQUxfUE9JTlQgZGVh
Y3RpdmVkOgorICAgICAgICAvLyAgIFRvU2hvcnRlc3QoMC4wMDAwMDEpICAtPiAiMC4wMDAwMDEi
CisgICAgICAgIC8vICAgVG9TaG9ydGVzdCgwLjAwMDAwMDEpIC0+ICIxZS03IgorICAgICAgICAv
LyAgIFRvU2hvcnRlc3QoMTExMTExMTExMTExMTExMTExMTExLjApICAtPiAiMTExMTExMTExMTEx
MTExMTEwMDAwIgorICAgICAgICAvLyAgIFRvU2hvcnRlc3QoMTAwMDAwMDAwMDAwMDAwMDAwMDAw
LjApICAtPiAiMTAwMDAwMDAwMDAwMDAwMDAwMDAwIgorICAgICAgICAvLyAgIFRvU2hvcnRlc3Qo
MTExMTExMTExMTExMTExMTExMTExMS4wKSAtPiAiMS4xMTExMTExMTExMTExMTExZSsyMSIKKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gTm90ZTogdGhlIGNvbnZlcnNpb24gbWF5IHJvdW5kIHRoZSBv
dXRwdXQgaWYgdGhlIHJldHVybmVkIHN0cmluZworICAgICAgICAvLyBpcyBhY2N1cmF0ZSBlbm91
Z2ggdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhlIGlucHV0LW51bWJlci4KKyAgICAgICAgLy8gRm9y
IGV4YW1wbGUgdGhlIG1vc3QgcHJlY2lzZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZG91YmxlIDll
NTkgZXF1YWxzCisgICAgICAgIC8vICI4OTk5OTk5OTk5OTk5OTk5MTg3NjcyMjk0NDk3MTc2MTk5
NTM4MTAxMzEyNzM2NzQ2OTA2NTYyMDY4NDgiLCBidXQKKyAgICAgICAgLy8gdGhlIGNvbnZlcnRl
ciB3aWxsIHJldHVybiB0aGUgc2hvcnRlciAoYnV0IHN0aWxsIGNvcnJlY3QpICI5ZTU5Ii4KKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb252ZXJzaW9uIHN1Y2Nl
ZWRzLiBUaGUgY29udmVyc2lvbiBhbHdheXMgc3VjY2VlZHMKKyAgICAgICAgLy8gZXhjZXB0IHdo
ZW4gdGhlIGlucHV0IHZhbHVlIGlzIHNwZWNpYWwgYW5kIG5vIGluZmluaXR5X3N5bWJvbCBvcgor
ICAgICAgICAvLyBuYW5fc3ltYm9sIGhhcyBiZWVuIGdpdmVuIHRvIHRoZSBjb25zdHJ1Y3Rvci4K
KyAgICAgICAgYm9vbCBUb1Nob3J0ZXN0KGRvdWJsZSB2YWx1ZSwgU3RyaW5nQnVpbGRlciogcmVz
dWx0X2J1aWxkZXIpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgCisgICAgICAgIC8vIENvbXB1
dGVzIGEgZGVjaW1hbCByZXByZXNlbnRhdGlvbiB3aXRoIGEgZml4ZWQgbnVtYmVyIG9mIGRpZ2l0
cyBhZnRlciB0aGUKKyAgICAgICAgLy8gZGVjaW1hbCBwb2ludC4gVGhlIGxhc3QgZW1pdHRlZCBk
aWdpdCBpcyByb3VuZGVkLgorICAgICAgICAvLworICAgICAgICAvLyBFeGFtcGxlczoKKyAgICAg
ICAgLy8gICBUb0ZpeGVkKDMuMTIsIDEpIC0+ICIzLjEiCisgICAgICAgIC8vICAgVG9GaXhlZCgz
LjE0MTUsIDMpIC0+ICIzLjE0MiIKKyAgICAgICAgLy8gICBUb0ZpeGVkKDEyMzQuNTY3ODksIDQp
IC0+ICIxMjM0LjU2NzkiCisgICAgICAgIC8vICAgVG9GaXhlZCgxLjIzLCA1KSAtPiAiMS4yMzAw
MCIKKyAgICAgICAgLy8gICBUb0ZpeGVkKDAuMSwgNCkgLT4gIjAuMTAwMCIKKyAgICAgICAgLy8g
ICBUb0ZpeGVkKDFlMzAsIDIpIC0+ICIxMDAwMDAwMDAwMDAwMDAwMDE5ODg0NjI0ODM4NjU2LjAw
IgorICAgICAgICAvLyAgIFRvRml4ZWQoMC4xLCAzMCkgLT4gIjAuMTAwMDAwMDAwMDAwMDAwMDA1
NTUxMTE1MTIzMTI2IgorICAgICAgICAvLyAgIFRvRml4ZWQoMC4xLCAxNykgLT4gIjAuMTAwMDAw
MDAwMDAwMDAwMDEiCisgICAgICAgIC8vCisgICAgICAgIC8vIElmIHJlcXVlc3RlZF9kaWdpdHMg
ZXF1YWxzIDAsIHRoZW4gdGhlIHRhaWwgb2YgdGhlIHJlc3VsdCBkZXBlbmRzIG9uCisgICAgICAg
IC8vIHRoZSBFTUlUX1RSQUlMSU5HX0RFQ0lNQUxfUE9JTlQgYW5kIEVNSVRfVFJBSUxJTkdfWkVS
T19BRlRFUl9QT0lOVC4KKyAgICAgICAgLy8gRXhhbXBsZXMsIGZvciByZXF1ZXN0ZWRfZGlnaXRz
ID09IDAsCisgICAgICAgIC8vICAgbGV0IEVNSVRfVFJBSUxJTkdfREVDSU1BTF9QT0lOVCBhbmQg
RU1JVF9UUkFJTElOR19aRVJPX0FGVEVSX1BPSU5UIGJlCisgICAgICAgIC8vICAgIC0gZmFsc2Ug
YW5kIGZhbHNlOiB0aGVuIDEyMy40NSAtPiAxMjMKKyAgICAgICAgLy8gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAuNjc4IC0+IDEKKyAgICAgICAgLy8gICAgLSB0cnVlIGFuZCBmYWxzZTog
dGhlbiAxMjMuNDUgLT4gMTIzLgorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLjY3OCAtPiAxLgorICAgICAgICAvLyAgICAtIHRydWUgYW5kIHRydWU6IHRoZW4gMTIzLjQ1
IC0+IDEyMy4wCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgMC42NzggLT4g
MS4wCisgICAgICAgIC8vCisgICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29udmVyc2lv
biBzdWNjZWVkcy4gVGhlIGNvbnZlcnNpb24gYWx3YXlzIHN1Y2NlZWRzCisgICAgICAgIC8vIGV4
Y2VwdCBmb3IgdGhlIGZvbGxvd2luZyBjYXNlczoKKyAgICAgICAgLy8gICAtIHRoZSBpbnB1dCB2
YWx1ZSBpcyBzcGVjaWFsIGFuZCBubyBpbmZpbml0eV9zeW1ib2wgb3IgbmFuX3N5bWJvbCBoYXMK
KyAgICAgICAgLy8gICAgIGJlZW4gcHJvdmlkZWQgdG8gdGhlIGNvbnN0cnVjdG9yLAorICAgICAg
ICAvLyAgIC0gJ3ZhbHVlJyA+IDEwXmtNYXhGaXhlZERpZ2l0c0JlZm9yZVBvaW50LCBvcgorICAg
ICAgICAvLyAgIC0gJ3JlcXVlc3RlZF9kaWdpdHMnID4ga01heEZpeGVkRGlnaXRzQWZ0ZXJQb2lu
dC4KKyAgICAgICAgLy8gVGhlIGxhc3QgdHdvIGNvbmRpdGlvbnMgaW1wbHkgdGhhdCB0aGUgcmVz
dWx0IHdpbGwgbmV2ZXIgY29udGFpbiBtb3JlIHRoYW4KKyAgICAgICAgLy8gMSArIGtNYXhGaXhl
ZERpZ2l0c0JlZm9yZVBvaW50ICsgMSArIGtNYXhGaXhlZERpZ2l0c0FmdGVyUG9pbnQgY2hhcmFj
dGVycworICAgICAgICAvLyAob25lIGFkZGl0aW9uYWwgY2hhcmFjdGVyIGZvciB0aGUgc2lnbiwg
YW5kIG9uZSBmb3IgdGhlIGRlY2ltYWwgcG9pbnQpLgorICAgICAgICBib29sIFRvRml4ZWQoZG91
YmxlIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgaW50IHJlcXVlc3RlZF9kaWdpdHMsCisg
ICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyKiByZXN1bHRfYnVpbGRlcikgY29uc3Q7
CisgICAgICAgIAorICAgICAgICAvLyBDb21wdXRlcyBhIHJlcHJlc2VudGF0aW9uIGluIGV4cG9u
ZW50aWFsIGZvcm1hdCB3aXRoIHJlcXVlc3RlZF9kaWdpdHMKKyAgICAgICAgLy8gYWZ0ZXIgdGhl
IGRlY2ltYWwgcG9pbnQuIFRoZSBsYXN0IGVtaXR0ZWQgZGlnaXQgaXMgcm91bmRlZC4KKyAgICAg
ICAgLy8gSWYgcmVxdWVzdGVkX2RpZ2l0cyBlcXVhbHMgLTEsIHRoZW4gdGhlIHNob3J0ZXN0IGV4
cG9uZW50aWFsIHJlcHJlc2VudGF0aW9uCisgICAgICAgIC8vIGlzIGNvbXB1dGVkLgorICAgICAg
ICAvLworICAgICAgICAvLyBFeGFtcGxlcyB3aXRoIEVNSVRfUE9TSVRJVkVfRVhQT05FTlRfU0lH
TiBkZWFjdGl2YXRlZCwgYW5kCisgICAgICAgIC8vICAgICAgICAgICAgICAgZXhwb25lbnRfY2hh
cmFjdGVyIHNldCB0byAnZScuCisgICAgICAgIC8vICAgVG9FeHBvbmVudGlhbCgzLjEyLCAxKSAt
PiAiMy4xZTAiCisgICAgICAgIC8vICAgVG9FeHBvbmVudGlhbCg1LjAsIDMpIC0+ICI1LjAwMGUw
IgorICAgICAgICAvLyAgIFRvRXhwb25lbnRpYWwoMC4wMDEsIDIpIC0+ICIxLjAwZS0zIgorICAg
ICAgICAvLyAgIFRvRXhwb25lbnRpYWwoMy4xNDE1LCAtMSkgLT4gIjMuMTQxNWUwIgorICAgICAg
ICAvLyAgIFRvRXhwb25lbnRpYWwoMy4xNDE1LCA0KSAtPiAiMy4xNDE1ZTAiCisgICAgICAgIC8v
ICAgVG9FeHBvbmVudGlhbCgzLjE0MTUsIDMpIC0+ICIzLjE0MmUwIgorICAgICAgICAvLyAgIFRv
RXhwb25lbnRpYWwoMTIzNDU2Nzg5MDAwMDAwLCAzKSAtPiAiMS4yMzVlMTQiCisgICAgICAgIC8v
ICAgVG9FeHBvbmVudGlhbCgxMDAwMDAwMDAwMDAwMDAwMDE5ODg0NjI0ODM4NjU2LjAsIC0xKSAt
PiAiMWUzMCIKKyAgICAgICAgLy8gICBUb0V4cG9uZW50aWFsKDEwMDAwMDAwMDAwMDAwMDAwMTk4
ODQ2MjQ4Mzg2NTYuMCwgMzIpIC0+CisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgIjEu
MDAwMDAwMDAwMDAwMDAwMDE5ODg0NjI0ODM4NjU2MDBlMzAiCisgICAgICAgIC8vICAgVG9FeHBv
bmVudGlhbCgxMjM0LCAwKSAtPiAiMWUzIgorICAgICAgICAvLworICAgICAgICAvLyBSZXR1cm5z
IHRydWUgaWYgdGhlIGNvbnZlcnNpb24gc3VjY2VlZHMuIFRoZSBjb252ZXJzaW9uIGFsd2F5cyBz
dWNjZWVkcworICAgICAgICAvLyBleGNlcHQgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXM6CisgICAg
ICAgIC8vICAgLSB0aGUgaW5wdXQgdmFsdWUgaXMgc3BlY2lhbCBhbmQgbm8gaW5maW5pdHlfc3lt
Ym9sIG9yIG5hbl9zeW1ib2wgaGFzCisgICAgICAgIC8vICAgICBiZWVuIHByb3ZpZGVkIHRvIHRo
ZSBjb25zdHJ1Y3RvciwKKyAgICAgICAgLy8gICAtICdyZXF1ZXN0ZWRfZGlnaXRzJyA+IGtNYXhF
eHBvbmVudGlhbERpZ2l0cy4KKyAgICAgICAgLy8gVGhlIGxhc3QgY29uZGl0aW9uIGltcGxpZXMg
dGhhdCB0aGUgcmVzdWx0IHdpbGwgbmV2ZXIgY29udGFpbiBtb3JlIHRoYW4KKyAgICAgICAgLy8g
a01heEV4cG9uZW50aWFsRGlnaXRzICsgOCBjaGFyYWN0ZXJzICh0aGUgc2lnbiwgdGhlIGRpZ2l0
IGJlZm9yZSB0aGUKKyAgICAgICAgLy8gZGVjaW1hbCBwb2ludCwgdGhlIGRlY2ltYWwgcG9pbnQs
IHRoZSBleHBvbmVudCBjaGFyYWN0ZXIsIHRoZQorICAgICAgICAvLyBleHBvbmVudCdzIHNpZ24s
IGFuZCBhdCBtb3N0IDMgZXhwb25lbnQgZGlnaXRzKS4KKyAgICAgICAgYm9vbCBUb0V4cG9uZW50
aWFsKGRvdWJsZSB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXF1ZXN0
ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVpbGRlciogcmVz
dWx0X2J1aWxkZXIpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgLy8gQ29tcHV0ZXMgJ3ByZWNp
c2lvbicgbGVhZGluZyBkaWdpdHMgb2YgdGhlIGdpdmVuICd2YWx1ZScgYW5kIHJldHVybnMgdGhl
bQorICAgICAgICAvLyBlaXRoZXIgaW4gZXhwb25lbnRpYWwgb3IgZGVjaW1hbCBmb3JtYXQsIGRl
cGVuZGluZyBvbgorICAgICAgICAvLyBtYXhfe2xlYWRpbmd8dHJhaWxpbmd9X3BhZGRpbmdfemVy
b2VzX2luX3ByZWNpc2lvbl9tb2RlIChnaXZlbiB0byB0aGUKKyAgICAgICAgLy8gY29uc3RydWN0
b3IpLgorICAgICAgICAvLyBUaGUgbGFzdCBjb21wdXRlZCBkaWdpdCBpcyByb3VuZGVkLgorICAg
ICAgICAvLworICAgICAgICAvLyBFeGFtcGxlIHdpdGggbWF4X2xlYWRpbmdfcGFkZGluZ196ZXJv
ZXNfaW5fcHJlY2lzaW9uX21vZGUgPSA2LgorICAgICAgICAvLyAgIFRvUHJlY2lzaW9uKDAuMDAw
MDAxMjM0NSwgMikgLT4gIjAuMDAwMDAxMiIKKyAgICAgICAgLy8gICBUb1ByZWNpc2lvbigwLjAw
MDAwMDEyMzQ1LCAyKSAtPiAiMS4yZS03IgorICAgICAgICAvLyBTaW1pbGFyaWx5IHRoZSBjb252
ZXJ0ZXIgbWF5IGFkZCB1cCB0bworICAgICAgICAvLyBtYXhfdHJhaWxpbmdfcGFkZGluZ196ZXJv
ZXNfaW5fcHJlY2lzaW9uX21vZGUgaW4gcHJlY2lzaW9uIG1vZGUgdG8gYXZvaWQKKyAgICAgICAg
Ly8gcmV0dXJuaW5nIGFuIGV4cG9uZW50aWFsIHJlcHJlc2VudGF0aW9uLiBBIHplcm8gYWRkZWQg
YnkgdGhlCisgICAgICAgIC8vIEVNSVRfVFJBSUxJTkdfWkVST19BRlRFUl9QT0lOVCBmbGFnIGlz
IGNvdW50ZWQgZm9yIHRoaXMgbGltaXQuCisgICAgICAgIC8vIEV4YW1wbGVzIGZvciBtYXhfdHJh
aWxpbmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGUgPSAxOgorICAgICAgICAvLyAg
IFRvUHJlY2lzaW9uKDIzMC4wLCAyKSAtPiAiMjMwIgorICAgICAgICAvLyAgIFRvUHJlY2lzaW9u
KDIzMC4wLCAyKSAtPiAiMjMwLiIgIHdpdGggRU1JVF9UUkFJTElOR19ERUNJTUFMX1BPSU5ULgor
ICAgICAgICAvLyAgIFRvUHJlY2lzaW9uKDIzMC4wLCAyKSAtPiAiMi4zZTIiIHdpdGggRU1JVF9U
UkFJTElOR19aRVJPX0FGVEVSX1BPSU5ULgorICAgICAgICAvLyBFeGFtcGxlcyBmb3IgbWF4X3Ry
YWlsaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2RlID0gMywgYW5kIG5vCisgICAg
ICAgIC8vICAgIEVNSVRfVFJBSUxJTkdfWkVST19BRlRFUl9QT0lOVDoKKyAgICAgICAgLy8gICBU
b1ByZWNpc2lvbigxMjM0NTAuMCwgNikgLT4gIjEyMzQ1MCIKKyAgICAgICAgLy8gICBUb1ByZWNp
c2lvbigxMjM0NTAuMCwgNSkgLT4gIjEyMzQ1MCIKKyAgICAgICAgLy8gICBUb1ByZWNpc2lvbigx
MjM0NTAuMCwgNCkgLT4gIjEyMzUwMCIKKyAgICAgICAgLy8gICBUb1ByZWNpc2lvbigxMjM0NTAu
MCwgMykgLT4gIjEyMzAwMCIKKyAgICAgICAgLy8gICBUb1ByZWNpc2lvbigxMjM0NTAuMCwgMikg
LT4gIjEuMmU1IgorICAgICAgICAvLworICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNv
bnZlcnNpb24gc3VjY2VlZHMuIFRoZSBjb252ZXJzaW9uIGFsd2F5cyBzdWNjZWVkcworICAgICAg
ICAvLyBleGNlcHQgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXM6CisgICAgICAgIC8vICAgLSB0aGUg
aW5wdXQgdmFsdWUgaXMgc3BlY2lhbCBhbmQgbm8gaW5maW5pdHlfc3ltYm9sIG9yIG5hbl9zeW1i
b2wgaGFzCisgICAgICAgIC8vICAgICBiZWVuIHByb3ZpZGVkIHRvIHRoZSBjb25zdHJ1Y3RvciwK
KyAgICAgICAgLy8gICAtIHByZWNpc2lvbiA8IGtNaW5QZXJpY2lzaW9uRGlnaXRzCisgICAgICAg
IC8vICAgLSBwcmVjaXNpb24gPiBrTWF4UHJlY2lzaW9uRGlnaXRzCisgICAgICAgIC8vIFRoZSBs
YXN0IGNvbmRpdGlvbiBpbXBsaWVzIHRoYXQgdGhlIHJlc3VsdCB3aWxsIG5ldmVyIGNvbnRhaW4g
bW9yZSB0aGFuCisgICAgICAgIC8vIGtNYXhQcmVjaXNpb25EaWdpdHMgKyA3IGNoYXJhY3RlcnMg
KHRoZSBzaWduLCB0aGUgZGVjaW1hbCBwb2ludCwgdGhlCisgICAgICAgIC8vIGV4cG9uZW50IGNo
YXJhY3RlciwgdGhlIGV4cG9uZW50J3Mgc2lnbiwgYW5kIGF0IG1vc3QgMyBleHBvbmVudCBkaWdp
dHMpLgorICAgICAgICBib29sIFRvUHJlY2lzaW9uKGRvdWJsZSB2YWx1ZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgcHJlY2lzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgIFN0
cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25zdDsKKyAgICAgICAgCisgICAgICAgIGVu
dW0gRHRvYU1vZGUgeworICAgICAgICAgICAgLy8gUHJvZHVjZSB0aGUgc2hvcnRlc3QgY29ycmVj
dCByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgICAgIC8vIEZvciBleGFtcGxlIHRoZSBvdXRwdXQg
b2YgMC4yOTk5OTk5OTk5OTk5OTk5ODg4OTcgaXMgKHRoZSBsZXNzIGFjY3VyYXRlCisgICAgICAg
ICAgICAvLyBidXQgY29ycmVjdCkgMC4zLgorICAgICAgICAgICAgU0hPUlRFU1QsCisgICAgICAg
ICAgICAvLyBQcm9kdWNlIGEgZml4ZWQgbnVtYmVyIG9mIGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1h
bCBwb2ludC4KKyAgICAgICAgICAgIC8vIEZvciBpbnN0YW5jZSBmaXhlZCgwLjEsIDQpIGJlY29t
ZXMgMC4xMDAwCisgICAgICAgICAgICAvLyBJZiB0aGUgaW5wdXQgbnVtYmVyIGlzIGJpZywgdGhl
IG91dHB1dCB3aWxsIGJlIGJpZy4KKyAgICAgICAgICAgIEZJWEVELAorICAgICAgICAgICAgLy8g
Rml4ZWQgbnVtYmVyIG9mIGRpZ2l0cyAoaW5kZXBlbmRlbnQgb2YgdGhlIGRlY2ltYWwgcG9pbnQp
LgorICAgICAgICAgICAgUFJFQ0lTSU9OCisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICAv
LyBUaGUgbWF4aW1hbCBudW1iZXIgb2YgZGlnaXRzIHRoYXQgYXJlIG5lZWRlZCB0byBlbWl0IGEg
ZG91YmxlIGluIGJhc2UgMTAuCisgICAgICAgIC8vIEEgaGlnaGVyIHByZWNpc2lvbiBjYW4gYmUg
YWNoaWV2ZWQgYnkgdXNpbmcgbW9yZSBkaWdpdHMsIGJ1dCB0aGUgc2hvcnRlc3QKKyAgICAgICAg
Ly8gYWNjdXJhdGUgcmVwcmVzZW50YXRpb24gb2YgYW55IGRvdWJsZSB3aWxsIG5ldmVyIHVzZSBt
b3JlIGRpZ2l0cyB0aGFuCisgICAgICAgIC8vIGtCYXNlMTBNYXhpbWFsTGVuZ3RoLgorICAgICAg
ICAvLyBOb3RlIHRoYXQgRG91YmxlVG9Bc2NpaSBudWxsLXRlcm1pbmF0ZXMgaXRzIGlucHV0LiBT
byB0aGUgZ2l2ZW4gYnVmZmVyCisgICAgICAgIC8vIHNob3VsZCBiZSBhdCBsZWFzdCBrQmFzZTEw
TWF4aW1hbExlbmd0aCArIDEgY2hhcmFjdGVycyBsb25nLgorICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IGtCYXNlMTBNYXhpbWFsTGVuZ3RoID0gMTc7CisgICAgICAgIAorICAgICAgICAvLyBDb252
ZXJ0cyB0aGUgZ2l2ZW4gZG91YmxlICd2JyB0byBhc2NpaS4KKyAgICAgICAgLy8gVGhlIHJlc3Vs
dCBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgYnVmZmVyICogMTBeKHBvaW50LWxlbmd0aCkuCisg
ICAgICAgIC8vCisgICAgICAgIC8vIFRoZSBvdXRwdXQgZGVwZW5kcyBvbiB0aGUgZ2l2ZW4gbW9k
ZToKKyAgICAgICAgLy8gIC0gU0hPUlRFU1Q6IHByb2R1Y2UgdGhlIGxlYXN0IGFtb3VudCBvZiBk
aWdpdHMgZm9yIHdoaWNoIHRoZSBpbnRlcm5hbAorICAgICAgICAvLyAgIGlkZW50aXR5IHJlcXVp
cmVtZW50IGlzIHN0aWxsIHNhdGlzZmllZC4gSWYgdGhlIGRpZ2l0cyBhcmUgcHJpbnRlZAorICAg
ICAgICAvLyAgICh0b2dldGhlciB3aXRoIHRoZSBjb3JyZWN0IGV4cG9uZW50KSB0aGVuIHJlYWRp
bmcgdGhpcyBudW1iZXIgd2lsbCBnaXZlCisgICAgICAgIC8vICAgJ3YnIGFnYWluLiBUaGUgYnVm
ZmVyIHdpbGwgY2hvb3NlIHRoZSByZXByZXNlbnRhdGlvbiB0aGF0IGlzIGNsb3Nlc3QgdG8KKyAg
ICAgICAgLy8gICAndicuIElmIHRoZXJlIGFyZSB0d28gYXQgdGhlIHNhbWUgZGlzdGFuY2UsIHRo
YW4gdGhlIG9uZSBmYXJ0aGVyIGF3YXkKKyAgICAgICAgLy8gICBmcm9tIDAgaXMgY2hvc2VuICho
YWxmd2F5IGNhc2VzIC0gZW5kaW5nIHdpdGggNSAtIGFyZSByb3VuZGVkIHVwKS4KKyAgICAgICAg
Ly8gICBJbiB0aGlzIG1vZGUgdGhlICdyZXF1ZXN0ZWRfZGlnaXRzJyBwYXJhbWV0ZXIgaXMgaWdu
b3JlZC4KKyAgICAgICAgLy8gIC0gRklYRUQ6IHByb2R1Y2VzIGRpZ2l0cyBuZWNlc3NhcnkgdG8g
cHJpbnQgYSBnaXZlbiBudW1iZXIgd2l0aAorICAgICAgICAvLyAgICdyZXF1ZXN0ZWRfZGlnaXRz
JyBkaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQuIFRoZSBwcm9kdWNlZCBkaWdpdHMKKyAg
ICAgICAgLy8gICBtaWdodCBiZSB0b28gc2hvcnQgaW4gd2hpY2ggY2FzZSB0aGUgY2FsbGVyIGhh
cyB0byBmaWxsIHRoZSByZW1haW5kZXIKKyAgICAgICAgLy8gICB3aXRoICcwJ3MuCisgICAgICAg
IC8vICAgRXhhbXBsZTogdG9GaXhlZCgwLjAwMSwgNSkgaXMgYWxsb3dlZCB0byByZXR1cm4gYnVm
ZmVyPSIxIiwgcG9pbnQ9LTIuCisgICAgICAgIC8vICAgSGFsZndheSBjYXNlcyBhcmUgcm91bmRl
ZCB0b3dhcmRzICsvLUluZmluaXR5IChhd2F5IGZyb20gMCkuIFRoZSBjYWxsCisgICAgICAgIC8v
ICAgdG9GaXhlZCgwLjE1LCAyKSB0aHVzIHJldHVybnMgYnVmZmVyPSIyIiwgcG9pbnQ9MC4KKyAg
ICAgICAgLy8gICBUaGUgcmV0dXJuZWQgYnVmZmVyIG1heSBjb250YWluIGRpZ2l0cyB0aGF0IHdv
dWxkIGJlIHRydW5jYXRlZCBmcm9tIHRoZQorICAgICAgICAvLyAgIHNob3J0ZXN0IHJlcHJlc2Vu
dGF0aW9uIG9mIHRoZSBpbnB1dC4KKyAgICAgICAgLy8gIC0gUFJFQ0lTSU9OOiBwcm9kdWNlcyAn
cmVxdWVzdGVkX2RpZ2l0cycgd2hlcmUgdGhlIGZpcnN0IGRpZ2l0IGlzIG5vdCAnMCcuCisgICAg
ICAgIC8vICAgRXZlbiB0aG91Z2ggdGhlIGxlbmd0aCBvZiBwcm9kdWNlZCBkaWdpdHMgdXN1YWxs
eSBlcXVhbHMKKyAgICAgICAgLy8gICAncmVxdWVzdGVkX2RpZ2l0cycsIHRoZSBmdW5jdGlvbiBp
cyBhbGxvd2VkIHRvIHJldHVybiBmZXdlciBkaWdpdHMsIGluCisgICAgICAgIC8vICAgd2hpY2gg
Y2FzZSB0aGUgY2FsbGVyIGhhcyB0byBmaWxsIHRoZSBtaXNzaW5nIGRpZ2l0cyB3aXRoICcwJ3Mu
CisgICAgICAgIC8vICAgSGFsZndheSBjYXNlcyBhcmUgYWdhaW4gcm91bmRlZCBhd2F5IGZyb20g
MC4KKyAgICAgICAgLy8gRG91YmxlVG9Bc2NpaSBleHBlY3RzIHRoZSBnaXZlbiBidWZmZXIgdG8g
YmUgYmlnIGVub3VnaCB0byBob2xkIGFsbAorICAgICAgICAvLyBkaWdpdHMgYW5kIGEgdGVybWlu
YXRpbmcgbnVsbC1jaGFyYWN0ZXIuIEluIFNIT1JURVNULW1vZGUgaXQgZXhwZWN0cyBhCisgICAg
ICAgIC8vIGJ1ZmZlciBvZiBhdCBsZWFzdCBrQmFzZTEwTWF4aW1hbExlbmd0aCArIDEuIEluIGFs
bCBvdGhlciBtb2RlcyB0aGUKKyAgICAgICAgLy8gcmVxdWVzdGVkX2RpZ2l0cyBwYXJhbWV0ZXIg
KCsgMSBmb3IgdGhlIG51bGwtY2hhcmFjdGVyKSBsaW1pdHMgdGhlIHNpemUgb2YKKyAgICAgICAg
Ly8gdGhlIG91dHB1dC4gVGhlIGdpdmVuIGxlbmd0aCBpcyBvbmx5IHVzZWQgaW4gZGVidWcgbW9k
ZSB0byBlbnN1cmUgdGhlCisgICAgICAgIC8vIGJ1ZmZlciBpcyBiaWcgZW5vdWdoLgorICAgICAg
ICBzdGF0aWMgdm9pZCBEb3VibGVUb0FzY2lpKGRvdWJsZSB2LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIER0b2FNb2RlIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IHJlcXVlc3RlZF9kaWdpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciogYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBidWZmZXJfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wqIHNpZ24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBsZW5ndGgs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBwb2ludCk7CisgICAgICAg
IAorICAgIHByaXZhdGU6CisgICAgICAgIC8vIElmIHRoZSB2YWx1ZSBpcyBhIHNwZWNpYWwgdmFs
dWUgKE5hTiBvciBJbmZpbml0eSkgY29uc3RydWN0cyB0aGUKKyAgICAgICAgLy8gY29ycmVzcG9u
ZGluZyBzdHJpbmcgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgaW5maW5pdHkvbmFuLXN5bWJvbC4KKyAg
ICAgICAgLy8gSWYgZWl0aGVyIG9mIHRoZW0gaXMgTlVMTCBvciB0aGUgdmFsdWUgaXMgbm90IHNw
ZWNpYWwgdGhlbiB0aGUKKyAgICAgICAgLy8gZnVuY3Rpb24gcmV0dXJucyBmYWxzZS4KKyAgICAg
ICAgYm9vbCBIYW5kbGVTcGVjaWFsVmFsdWVzKGRvdWJsZSB2YWx1ZSwgU3RyaW5nQnVpbGRlciog
cmVzdWx0X2J1aWxkZXIpIGNvbnN0OworICAgICAgICAvLyBDb25zdHJ1Y3RzIGFuIGV4cG9uZW50
aWFsIHJlcHJlc2VudGF0aW9uIChpLmUuIDEuMjM0ZTU2KS4KKyAgICAgICAgLy8gVGhlIGdpdmVu
IGV4cG9uZW50IGFzc3VtZXMgYSBkZWNpbWFsIHBvaW50IGFmdGVyIHRoZSBmaXJzdCBkZWNpbWFs
IGRpZ2l0LgorICAgICAgICB2b2lkIENyZWF0ZUV4cG9uZW50aWFsUmVwcmVzZW50YXRpb24oY29u
c3QgY2hhciogZGVjaW1hbF9kaWdpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGV4cG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU3RyaW5nQnVpbGRlciogcmVzdWx0X2J1aWxkZXIpIGNvbnN0Owor
ICAgICAgICAvLyBDcmVhdGVzIGEgZGVjaW1hbCByZXByZXNlbnRhdGlvbiAoaS5lIDEyMzQuNTY3
OCkuCisgICAgICAgIHZvaWQgQ3JlYXRlRGVjaW1hbFJlcHJlc2VudGF0aW9uKGNvbnN0IGNoYXIq
IGRlY2ltYWxfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGRpZ2l0c19hZnRlcl9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU3RyaW5nQnVpbGRlciogcmVzdWx0X2J1aWxkZXIpIGNvbnN0OworICAgICAg
ICAKKyAgICAgICAgY29uc3QgaW50IGZsYWdzXzsKKyAgICAgICAgY29uc3QgY2hhciogY29uc3Qg
aW5maW5pdHlfc3ltYm9sXzsKKyAgICAgICAgY29uc3QgY2hhciogY29uc3QgbmFuX3N5bWJvbF87
CisgICAgICAgIGNvbnN0IGNoYXIgZXhwb25lbnRfY2hhcmFjdGVyXzsKKyAgICAgICAgY29uc3Qg
aW50IGRlY2ltYWxfaW5fc2hvcnRlc3RfbG93XzsKKyAgICAgICAgY29uc3QgaW50IGRlY2ltYWxf
aW5fc2hvcnRlc3RfaGlnaF87CisgICAgICAgIGNvbnN0IGludCBtYXhfbGVhZGluZ19wYWRkaW5n
X3plcm9lc19pbl9wcmVjaXNpb25fbW9kZV87CisgICAgICAgIGNvbnN0IGludCBtYXhfdHJhaWxp
bmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGVfOworICAgICAgICAKKyAgICAgICAg
RElTQUxMT1dfSU1QTElDSVRfQ09OU1RSVUNUT1JTKERvdWJsZVRvU3RyaW5nQ29udmVydGVyKTsK
KyAgICB9OworICAgIAorICAgIAorICAgIGNsYXNzIFN0cmluZ1RvRG91YmxlQ29udmVydGVyIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIC8vIEVudW1lcmF0aW9uIGZvciBhbGxvd2luZyBvY3RhbHMg
YW5kIGlnbm9yaW5nIGp1bmsgd2hlbiBjb252ZXJ0aW5nCisgICAgICAgIC8vIHN0cmluZ3MgdG8g
bnVtYmVycy4KKyAgICAgICAgZW51bSBGbGFncyB7CisgICAgICAgICAgICBOT19GTEFHUyA9IDAs
CisgICAgICAgICAgICBBTExPV19IRVggPSAxLAorICAgICAgICAgICAgQUxMT1dfT0NUQUxTID0g
MiwKKyAgICAgICAgICAgIEFMTE9XX1RSQUlMSU5HX0pVTksgPSA0LAorICAgICAgICAgICAgQUxM
T1dfTEVBRElOR19TUEFDRVMgPSA4LAorICAgICAgICAgICAgQUxMT1dfVFJBSUxJTkdfU1BBQ0VT
ID0gMTYsCisgICAgICAgICAgICBBTExPV19TUEFDRVNfQUZURVJfU0lHTiA9IDMyCisgICAgICAg
IH07CisgICAgICAgIAorICAgICAgICAvLyBGbGFncyBzaG91bGQgYmUgYSBiaXQtb3IgY29tYmlu
YXRpb24gb2YgdGhlIHBvc3NpYmxlIEZsYWdzLWVudW0uCisgICAgICAgIC8vICAtIE5PX0ZMQUdT
OiBubyBzcGVjaWFsIGZsYWdzLgorICAgICAgICAvLyAgLSBBTExPV19IRVg6IHJlY29nbml6ZXMg
dGhlIHByZWZpeCAiMHgiLiBIZXggbnVtYmVycyBtYXkgb25seSBiZSBpbnRlZ2Vycy4KKyAgICAg
ICAgLy8gICAgICBFeDogU3RyaW5nVG9Eb3VibGUoIjB4MTIzNCIpIC0+IDQ2NjAuMAorICAgICAg
ICAvLyAgICAgICAgICBJbiBTdHJpbmdUb0RvdWJsZSgiMHgxMjM0LjU2IikgdGhlIGNoYXJhY3Rl
cnMgIi41NiIgYXJlIHRyYWlsaW5nCisgICAgICAgIC8vICAgICAgICAgIGp1bmsuIFRoZSByZXN1
bHQgb2YgdGhlIGNhbGwgaXMgaGVuY2UgZGVwZW5kZW50IG9uCisgICAgICAgIC8vICAgICAgICAg
IHRoZSBBTExPV19UUkFJTElOR19KVU5LIGZsYWcgYW5kL29yIHRoZSBqdW5rIHZhbHVlLgorICAg
ICAgICAvLyAgICAgIFdpdGggdGhpcyBmbGFnICIweCIgaXMgYSBqdW5rLXN0cmluZy4gRXZlbiB3
aXRoIEFMTE9XX1RSQUlMSU5HX0pVTkssCisgICAgICAgIC8vICAgICAgdGhlIHN0cmluZyB3aWxs
IG5vdCBiZSBwYXJzZWQgYXMgIjAiIGZvbGxvd2VkIGJ5IGp1bmsuCisgICAgICAgIC8vCisgICAg
ICAgIC8vICAtIEFMTE9XX09DVEFMUzogcmVjb2duaXplcyB0aGUgcHJlZml4ICIwIiBmb3Igb2N0
YWxzOgorICAgICAgICAvLyAgICAgIElmIGEgc2VxdWVuY2Ugb2Ygb2N0YWwgZGlnaXRzIHN0YXJ0
cyB3aXRoICcwJywgdGhlbiB0aGUgbnVtYmVyIGlzCisgICAgICAgIC8vICAgICAgcmVhZCBhcyBv
Y3RhbCBpbnRlZ2VyLiBPY3RhbCBudW1iZXJzIG1heSBvbmx5IGJlIGludGVnZXJzLgorICAgICAg
ICAvLyAgICAgIEV4OiBTdHJpbmdUb0RvdWJsZSgiMDEyMzQiKSAtPiA2NjguMAorICAgICAgICAv
LyAgICAgICAgICBTdHJpbmdUb0RvdWJsZSgiMDEyMzQ5IikgLT4gMTIzNDkuMCAgLy8gTm90IGEg
c2VxdWVuY2Ugb2Ygb2N0YWwKKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGRpZ2l0cy4KKyAgICAgICAgLy8gICAgICAgICAgSW4gU3Ry
aW5nVG9Eb3VibGUoIjAxMjM0LjU2IikgdGhlIGNoYXJhY3RlcnMgIi41NiIgYXJlIHRyYWlsaW5n
CisgICAgICAgIC8vICAgICAgICAgIGp1bmsuIFRoZSByZXN1bHQgb2YgdGhlIGNhbGwgaXMgaGVu
Y2UgZGVwZW5kZW50IG9uCisgICAgICAgIC8vICAgICAgICAgIHRoZSBBTExPV19UUkFJTElOR19K
VU5LIGZsYWcgYW5kL29yIHRoZSBqdW5rIHZhbHVlLgorICAgICAgICAvLyAgICAgICAgICBJbiBT
dHJpbmdUb0RvdWJsZSgiMDEyMzRlNTYiKSB0aGUgY2hhcmFjdGVycyAiZTU2IiBhcmUgdHJhaWxp
bmcKKyAgICAgICAgLy8gICAgICAgICAganVuaywgdG9vLgorICAgICAgICAvLyAgLSBBTExPV19U
UkFJTElOR19KVU5LOiBpZ25vcmUgdHJhaWxpbmcgY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgcGFy
dCBvZgorICAgICAgICAvLyAgICAgIGEgZG91YmxlIGxpdGVyYWwuCisgICAgICAgIC8vICAtIEFM
TE9XX0xFQURJTkdfU1BBQ0VTOiBza2lwIG92ZXIgbGVhZGluZyBzcGFjZXMuCisgICAgICAgIC8v
ICAtIEFMTE9XX1RSQUlMSU5HX1NQQUNFUzogaWdub3JlIHRyYWlsaW5nIHNwYWNlcy4KKyAgICAg
ICAgLy8gIC0gQUxMT1dfU1BBQ0VTX0FGVEVSX1NJR046IGlnbm9yZSBzcGFjZXMgYWZ0ZXIgdGhl
IHNpZ24uCisgICAgICAgIC8vICAgICAgIEV4OiBTdHJpbmdUb0RvdWJsZSgiLSAgIDEyMy4yIikg
LT4gLTEyMy4yLgorICAgICAgICAvLyAgICAgICAgICAgU3RyaW5nVG9Eb3VibGUoIisgICAxMjMu
MiIpIC0+IDEyMy4yCisgICAgICAgIC8vCisgICAgICAgIC8vIGVtcHR5X3N0cmluZ192YWx1ZSBp
cyByZXR1cm5lZCB3aGVuIGFuIGVtcHR5IHN0cmluZyBpcyBnaXZlbiBhcyBpbnB1dC4KKyAgICAg
ICAgLy8gSWYgQUxMT1dfTEVBRElOR19TUEFDRVMgb3IgQUxMT1dfVFJBSUxJTkdfU1BBQ0VTIGFy
ZSBzZXQsIHRoZW4gYSBzdHJpbmcKKyAgICAgICAgLy8gY29udGFpbmluZyBvbmx5IHNwYWNlcyBp
cyBjb252ZXJ0ZWQgdG8gdGhlICdlbXB0eV9zdHJpbmdfdmFsdWUnLCB0b28uCisgICAgICAgIC8v
CisgICAgICAgIC8vIGp1bmtfc3RyaW5nX3ZhbHVlIGlzIHJldHVybmVkIHdoZW4KKyAgICAgICAg
Ly8gIGEpIEFMTE9XX1RSQUlMSU5HX0pVTksgaXMgbm90IHNldCwgYW5kIGEganVuayBjaGFyYWN0
ZXIgKGEgY2hhcmFjdGVyIG5vdAorICAgICAgICAvLyAgICAgcGFydCBvZiBhIGRvdWJsZS1saXRl
cmFsKSBpcyBmb3VuZC4KKyAgICAgICAgLy8gIGIpIEFMTE9XX1RSQUlMSU5HX0pVTksgaXMgc2V0
LCBidXQgdGhlIHN0cmluZyBkb2VzIG5vdCBzdGFydCB3aXRoIGEKKyAgICAgICAgLy8gICAgIGRv
dWJsZSBsaXRlcmFsLgorICAgICAgICAvLworICAgICAgICAvLyBpbmZpbml0eV9zeW1ib2wgYW5k
IG5hbl9zeW1ib2wgYXJlIHN0cmluZ3MgdGhhdCBhcmUgdXNlZCB0byBkZXRlY3QKKyAgICAgICAg
Ly8gaW5wdXRzIHRoYXQgcmVwcmVzZW50IGluZmluaXR5IGFuZCBOYU4uIFRoZXkgY2FuIGJlIG51
bGwsIGluIHdoaWNoIGNhc2UKKyAgICAgICAgLy8gdGhleSBhcmUgaWdub3JlZC4KKyAgICAgICAg
Ly8gVGhlIGNvbnZlcnNpb24gcm91dGluZSBmaXJzdCByZWFkcyBhbnkgcG9zc2libGUgc2lnbnMu
IFRoZW4gaXQgY29tcGFyZXMgdGhlCisgICAgICAgIC8vIGZvbGxvd2luZyBjaGFyYWN0ZXIgb2Yg
dGhlIGlucHV0LXN0cmluZyB3aXRoIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YKKyAgICAgICAgLy8g
dGhlIGluZmluaXR5LCBhbmQgbmFuLXN5bWJvbC4gSWYgZWl0aGVyIG1hdGNoZXMsIHRoZSBmdW5j
dGlvbiBhc3N1bWVzLCB0aGF0CisgICAgICAgIC8vIGEgbWF0Y2ggaGFzIGJlZW4gZm91bmQsIGFu
ZCBleHBlY3RzIHRoZSBmb2xsb3dpbmcgaW5wdXQgY2hhcmFjdGVycyB0byBtYXRjaAorICAgICAg
ICAvLyB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnMgb2YgdGhlIHNwZWNpYWwtdmFsdWUgc3ltYm9s
LgorICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnMg
YXBwbHkgdG8gc3BlY2lhbC12YWx1ZSBzeW1ib2xzOgorICAgICAgICAvLyAgLSB0aGV5IG11c3Qg
bm90IHN0YXJ0IHdpdGggc2lnbnMgKCcrJywgb3IgJy0nKSwKKyAgICAgICAgLy8gIC0gdGhleSBt
dXN0IG5vdCBoYXZlIHRoZSBzYW1lIGZpcnN0IGNoYXJhY3Rlci4KKyAgICAgICAgLy8gIC0gdGhl
eSBtdXN0IG5vdCBzdGFydCB3aXRoIGRpZ2l0cy4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gRXhh
bXBsZXM6CisgICAgICAgIC8vICBmbGFncyA9IEFMTE9XX0hFWCB8IEFMTE9XX1RSQUlMSU5HX0pV
TkssCisgICAgICAgIC8vICBlbXB0eV9zdHJpbmdfdmFsdWUgPSAwLjAsCisgICAgICAgIC8vICBq
dW5rX3N0cmluZ192YWx1ZSA9IE5hTiwKKyAgICAgICAgLy8gIGluZmluaXR5X3N5bWJvbCA9ICJp
bmZpbml0eSIsCisgICAgICAgIC8vICBuYW5fc3ltYm9sID0gIm5hbiI6CisgICAgICAgIC8vICAg
IFN0cmluZ1RvRG91YmxlKCIweDEyMzQiKSAtPiA0NjYwLjAuCisgICAgICAgIC8vICAgIFN0cmlu
Z1RvRG91YmxlKCIweDEyMzRLIikgLT4gNDY2MC4wLgorICAgICAgICAvLyAgICBTdHJpbmdUb0Rv
dWJsZSgiIikgLT4gMC4wICAvLyBlbXB0eV9zdHJpbmdfdmFsdWUuCisgICAgICAgIC8vICAgIFN0
cmluZ1RvRG91YmxlKCIgIikgLT4gTmFOICAvLyBqdW5rX3N0cmluZ192YWx1ZS4KKyAgICAgICAg
Ly8gICAgU3RyaW5nVG9Eb3VibGUoIiAxIikgLT4gTmFOICAvLyBqdW5rX3N0cmluZ192YWx1ZS4K
KyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjB4IikgLT4gTmFOICAvLyBqdW5rX3N0cmlu
Z192YWx1ZS4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIi0xMjMuNDUiKSAtPiAtMTIz
LjQ1LgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiLS0xMjMuNDUiKSAtPiBOYU4gIC8v
IGp1bmtfc3RyaW5nX3ZhbHVlLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMTIzZTQ1
IikgLT4gMTIzZTQ1LgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMTIzRTQ1IikgLT4g
MTIzZTQ1LgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMTIzZSs0NSIpIC0+IDEyM2U0
NS4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjEyM0UtNDUiKSAtPiAxMjNlLTQ1Lgor
ICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMTIzZSIpIC0+IDEyMy4wICAvLyB0cmFpbGlu
ZyBqdW5rIGlnbm9yZWQuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIxMjNlLSIpIC0+
IDEyMy4wICAvLyB0cmFpbGluZyBqdW5rIGlnbm9yZWQuCisgICAgICAgIC8vICAgIFN0cmluZ1Rv
RG91YmxlKCIrTmFOIikgLT4gTmFOICAvLyBOYU4gc3RyaW5nIGxpdGVyYWwuCisgICAgICAgIC8v
ICAgIFN0cmluZ1RvRG91YmxlKCItaW5maW5pdHkiKSAtPiAtaW5mLiAgLy8gaW5maW5pdHkgbGl0
ZXJhbC4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIkluZmluaXR5IikgLT4gTmFOICAv
LyBqdW5rX3N0cmluZ192YWx1ZS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gIGZsYWdzID0gQUxM
T1dfT0NUQUwgfCBBTExPV19MRUFESU5HX1NQQUNFUywKKyAgICAgICAgLy8gIGVtcHR5X3N0cmlu
Z192YWx1ZSA9IDAuMCwKKyAgICAgICAgLy8gIGp1bmtfc3RyaW5nX3ZhbHVlID0gTmFOLAorICAg
ICAgICAvLyAgaW5maW5pdHlfc3ltYm9sID0gTlVMTCwKKyAgICAgICAgLy8gIG5hbl9zeW1ib2wg
PSBOVUxMOgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMHgxMjM0IikgLT4gTmFOICAv
LyBqdW5rX3N0cmluZ192YWx1ZS4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjAxMjM0
IikgLT4gNjY4LjAuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIiKSAtPiAwLjAgIC8v
IGVtcHR5X3N0cmluZ192YWx1ZS4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIiAiKSAt
PiAwLjAgIC8vIGVtcHR5X3N0cmluZ192YWx1ZS4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3Vi
bGUoIiAxIikgLT4gMS4wCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIweCIpIC0+IE5h
TiAgLy8ganVua19zdHJpbmdfdmFsdWUuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIw
MTIzZTQ1IikgLT4gTmFOICAvLyBqdW5rX3N0cmluZ192YWx1ZS4KKyAgICAgICAgLy8gICAgU3Ry
aW5nVG9Eb3VibGUoIjAxMjM5RTQ1IikgLT4gMTIzOWU0NS4KKyAgICAgICAgLy8gICAgU3RyaW5n
VG9Eb3VibGUoIi1pbmZpbml0eSIpIC0+IE5hTiAgLy8ganVua19zdHJpbmdfdmFsdWUuCisgICAg
ICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCJOYU4iKSAtPiBOYU4gIC8vIGp1bmtfc3RyaW5nX3Zh
bHVlLgorICAgICAgICBTdHJpbmdUb0RvdWJsZUNvbnZlcnRlcihpbnQgZmxhZ3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBlbXB0eV9zdHJpbmdfdmFsdWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBqdW5rX3N0cmluZ192YWx1ZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogaW5maW5pdHlfc3ltYm9s
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBuYW5fc3ltYm9s
KQorICAgICAgICA6IGZsYWdzXyhmbGFncyksCisgICAgICAgIGVtcHR5X3N0cmluZ192YWx1ZV8o
ZW1wdHlfc3RyaW5nX3ZhbHVlKSwKKyAgICAgICAganVua19zdHJpbmdfdmFsdWVfKGp1bmtfc3Ry
aW5nX3ZhbHVlKSwKKyAgICAgICAgaW5maW5pdHlfc3ltYm9sXyhpbmZpbml0eV9zeW1ib2wpLAor
ICAgICAgICBuYW5fc3ltYm9sXyhuYW5fc3ltYm9sKSB7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIC8vIFBlcmZvcm1zIHRoZSBjb252ZXJzaW9uLgorICAgICAgICAvLyBUaGUgb3V0cHV0
IHBhcmFtZXRlciAncHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291bnQnIGlzIHNldCB0byB0aGUgbnVt
YmVyCisgICAgICAgIC8vIG9mIGNoYXJhY3RlcnMgdGhhdCBoYXZlIGJlZW4gcHJvY2Vzc2VkIHRv
IHJlYWQgdGhlIG51bWJlci4KKyAgICAgICAgLy8gU3BhY2VzIHRoYW4gYXJlIHByb2Nlc3NlZCB3
aXRoIEFMTE9XX3tMRUFESU5HfFRSQUlMSU5HfV9TUEFDRVMgYXJlIGluY2x1ZGVkCisgICAgICAg
IC8vIGluIHRoZSAncHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291bnQnLiBUcmFpbGluZyBqdW5rIGlz
IG5ldmVyIGluY2x1ZGVkLgorICAgICAgICBkb3VibGUgU3RyaW5nVG9Eb3VibGUoY29uc3QgY2hh
ciogYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogcHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291
bnQpOworICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBpbnQgZmxhZ3NfOwor
ICAgICAgICBjb25zdCBkb3VibGUgZW1wdHlfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgY29uc3Qg
ZG91YmxlIGp1bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgY29uc3QgY2hhciogY29uc3QgaW5m
aW5pdHlfc3ltYm9sXzsKKyAgICAgICAgY29uc3QgY2hhciogY29uc3QgbmFuX3N5bWJvbF87Cisg
ICAgICAgIAorICAgICAgICBESVNBTExPV19JTVBMSUNJVF9DT05TVFJVQ1RPUlMoU3RyaW5nVG9E
b3VibGVDb252ZXJ0ZXIpOworICAgIH07CisgICAgCit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2Nv
bnZlcnNpb24KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAgLy8gRE9VQkxFX0NPTlZF
UlNJT05fRE9VQkxFX0NPTlZFUlNJT05fSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvZHRvYS9kb3VibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9k
b3VibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4wNTQ0ZmRiNWE4MTdmYTgyMTZiM2UzMWU2NWEzMTkxMmYwNzg3
MjI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2Rv
dWJsZS5oCkBAIC0wLDAgKzEsMjQ5IEBACisvLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJvamVj
dCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisv
LyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNp
Zm5kZWYgRE9VQkxFX0NPTlZFUlNJT05fRE9VQkxFX0hfCisjZGVmaW5lIERPVUJMRV9DT05WRVJT
SU9OX0RPVUJMRV9IXworCisjaW5jbHVkZSAiZGl5LWZwLmgiCisKK25hbWVzcGFjZSBXVEYgewor
CituYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIC8vIFdlIGFzc3VtZSB0
aGF0IGRvdWJsZXMgYW5kIHVpbnQ2NF90IGhhdmUgdGhlIHNhbWUgZW5kaWFubmVzcy4KKyAgICBz
dGF0aWMgdWludDY0X3QgZG91YmxlX3RvX3VpbnQ2NChkb3VibGUgZCkgeyByZXR1cm4gQml0Q2Fz
dDx1aW50NjRfdD4oZCk7IH0KKyAgICBzdGF0aWMgZG91YmxlIHVpbnQ2NF90b19kb3VibGUodWlu
dDY0X3QgZDY0KSB7IHJldHVybiBCaXRDYXN0PGRvdWJsZT4oZDY0KTsgfQorICAgIAorICAgIC8v
IEhlbHBlciBmdW5jdGlvbnMgZm9yIGRvdWJsZXMuCisgICAgY2xhc3MgRG91YmxlIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBrU2lnbk1hc2sgPSBVSU5UNjRf
MlBBUlRfQygweDgwMDAwMDAwLCAwMDAwMDAwMCk7CisgICAgICAgIHN0YXRpYyBjb25zdCB1aW50
NjRfdCBrRXhwb25lbnRNYXNrID0gVUlOVDY0XzJQQVJUX0MoMHg3RkYwMDAwMCwgMDAwMDAwMDAp
OworICAgICAgICBzdGF0aWMgY29uc3QgdWludDY0X3Qga1NpZ25pZmljYW5kTWFzayA9IFVJTlQ2
NF8yUEFSVF9DKDB4MDAwRkZGRkYsIEZGRkZGRkZGKTsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVp
bnQ2NF90IGtIaWRkZW5CaXQgPSBVSU5UNjRfMlBBUlRfQygweDAwMTAwMDAwLCAwMDAwMDAwMCk7
CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQga1BoeXNpY2FsU2lnbmlmaWNhbmRTaXplID0gNTI7
ICAvLyBFeGNsdWRlcyB0aGUgaGlkZGVuIGJpdC4KKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBr
U2lnbmlmaWNhbmRTaXplID0gNTM7CisgICAgICAgIAorICAgICAgICBEb3VibGUoKSA6IGQ2NF8o
MCkge30KKyAgICAgICAgZXhwbGljaXQgRG91YmxlKGRvdWJsZSBkKSA6IGQ2NF8oZG91YmxlX3Rv
X3VpbnQ2NChkKSkge30KKyAgICAgICAgZXhwbGljaXQgRG91YmxlKHVpbnQ2NF90IGQ2NCkgOiBk
NjRfKGQ2NCkge30KKyAgICAgICAgZXhwbGljaXQgRG91YmxlKERpeUZwIGRpeV9mcCkKKyAgICAg
ICAgOiBkNjRfKERpeUZwVG9VaW50NjQoZGl5X2ZwKSkge30KKyAgICAgICAgCisgICAgICAgIC8v
IFRoZSB2YWx1ZSBlbmNvZGVkIGJ5IHRoaXMgRG91YmxlIG11c3QgYmUgZ3JlYXRlciBvciBlcXVh
bCB0byArMC4wLgorICAgICAgICAvLyBJdCBtdXN0IG5vdCBiZSBzcGVjaWFsIChpbmZpbml0eSwg
b3IgTmFOKS4KKyAgICAgICAgRGl5RnAgQXNEaXlGcCgpIGNvbnN0IHsKKyAgICAgICAgICAgIEFT
U0VSVChTaWduKCkgPiAwKTsKKyAgICAgICAgICAgIEFTU0VSVCghSXNTcGVjaWFsKCkpOworICAg
ICAgICAgICAgcmV0dXJuIERpeUZwKFNpZ25pZmljYW5kKCksIEV4cG9uZW50KCkpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICAvLyBUaGUgdmFsdWUgZW5jb2RlZCBieSB0aGlzIERvdWJs
ZSBtdXN0IGJlIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiAwLgorICAgICAgICBEaXlGcCBBc05vcm1h
bGl6ZWREaXlGcCgpIGNvbnN0IHsKKyAgICAgICAgICAgIEFTU0VSVCh2YWx1ZSgpID4gMC4wKTsK
KyAgICAgICAgICAgIHVpbnQ2NF90IGYgPSBTaWduaWZpY2FuZCgpOworICAgICAgICAgICAgaW50
IGUgPSBFeHBvbmVudCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGUgY3VycmVu
dCBkb3VibGUgY291bGQgYmUgYSBkZW5vcm1hbC4KKyAgICAgICAgICAgIHdoaWxlICgoZiAmIGtI
aWRkZW5CaXQpID09IDApIHsKKyAgICAgICAgICAgICAgICBmIDw8PSAxOworICAgICAgICAgICAg
ICAgIGUtLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIERvIHRoZSBmaW5hbCBzaGlm
dHMgaW4gb25lIGdvLgorICAgICAgICAgICAgZiA8PD0gRGl5RnA6OmtTaWduaWZpY2FuZFNpemUg
LSBrU2lnbmlmaWNhbmRTaXplOworICAgICAgICAgICAgZSAtPSBEaXlGcDo6a1NpZ25pZmljYW5k
U2l6ZSAtIGtTaWduaWZpY2FuZFNpemU7CisgICAgICAgICAgICByZXR1cm4gRGl5RnAoZiwgZSk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFJldHVybnMgdGhlIGRvdWJsZSdzIGJp
dCBhcyB1aW50NjQuCisgICAgICAgIHVpbnQ2NF90IEFzVWludDY0KCkgY29uc3QgeworICAgICAg
ICAgICAgcmV0dXJuIGQ2NF87CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFJldHVy
bnMgdGhlIG5leHQgZ3JlYXRlciBkb3VibGUuIFJldHVybnMgK2luZmluaXR5IG9uIGlucHV0ICtp
bmZpbml0eS4KKyAgICAgICAgZG91YmxlIE5leHREb3VibGUoKSBjb25zdCB7CisgICAgICAgICAg
ICBpZiAoZDY0XyA9PSBrSW5maW5pdHkpIHJldHVybiBEb3VibGUoa0luZmluaXR5KS52YWx1ZSgp
OworICAgICAgICAgICAgaWYgKFNpZ24oKSA8IDAgJiYgU2lnbmlmaWNhbmQoKSA9PSAwKSB7Cisg
ICAgICAgICAgICAgICAgLy8gLTAuMAorICAgICAgICAgICAgICAgIHJldHVybiAwLjA7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoU2lnbigpIDwgMCkgeworICAgICAgICAgICAgICAg
IHJldHVybiBEb3VibGUoZDY0XyAtIDEpLnZhbHVlKCk7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIHJldHVybiBEb3VibGUoZDY0XyArIDEpLnZhbHVlKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludCBFeHBvbmVudCgpIGNvbnN0
IHsKKyAgICAgICAgICAgIGlmIChJc0Rlbm9ybWFsKCkpIHJldHVybiBrRGVub3JtYWxFeHBvbmVu
dDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdWludDY0X3QgZDY0ID0gQXNVaW50NjQoKTsK
KyAgICAgICAgICAgIGludCBiaWFzZWRfZSA9CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+
KChkNjQgJiBrRXhwb25lbnRNYXNrKSA+PiBrUGh5c2ljYWxTaWduaWZpY2FuZFNpemUpOworICAg
ICAgICAgICAgcmV0dXJuIGJpYXNlZF9lIC0ga0V4cG9uZW50QmlhczsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgdWludDY0X3QgU2lnbmlmaWNhbmQoKSBjb25zdCB7CisgICAgICAgICAg
ICB1aW50NjRfdCBkNjQgPSBBc1VpbnQ2NCgpOworICAgICAgICAgICAgdWludDY0X3Qgc2lnbmlm
aWNhbmQgPSBkNjQgJiBrU2lnbmlmaWNhbmRNYXNrOworICAgICAgICAgICAgaWYgKCFJc0Rlbm9y
bWFsKCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2lnbmlmaWNhbmQgKyBrSGlkZGVuQml0
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2lnbmlmaWNh
bmQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgZG91YmxlIGlzIGEgZGVub3JtYWwuCisgICAgICAgIGJvb2wgSXNEZW5v
cm1hbCgpIGNvbnN0IHsKKyAgICAgICAgICAgIHVpbnQ2NF90IGQ2NCA9IEFzVWludDY0KCk7Cisg
ICAgICAgICAgICByZXR1cm4gKGQ2NCAmIGtFeHBvbmVudE1hc2spID09IDA7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIC8vIFdlIGNvbnNpZGVyIGRlbm9ybWFscyBub3QgdG8gYmUgc3Bl
Y2lhbC4KKyAgICAgICAgLy8gSGVuY2Ugb25seSBJbmZpbml0eSBhbmQgTmFOIGFyZSBzcGVjaWFs
LgorICAgICAgICBib29sIElzU3BlY2lhbCgpIGNvbnN0IHsKKyAgICAgICAgICAgIHVpbnQ2NF90
IGQ2NCA9IEFzVWludDY0KCk7CisgICAgICAgICAgICByZXR1cm4gKGQ2NCAmIGtFeHBvbmVudE1h
c2spID09IGtFeHBvbmVudE1hc2s7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wg
SXNOYW4oKSBjb25zdCB7CisgICAgICAgICAgICB1aW50NjRfdCBkNjQgPSBBc1VpbnQ2NCgpOwor
ICAgICAgICAgICAgcmV0dXJuICgoZDY0ICYga0V4cG9uZW50TWFzaykgPT0ga0V4cG9uZW50TWFz
aykgJiYKKyAgICAgICAgICAgICgoZDY0ICYga1NpZ25pZmljYW5kTWFzaykgIT0gMCk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgSXNJbmZpbml0ZSgpIGNvbnN0IHsKKyAgICAg
ICAgICAgIHVpbnQ2NF90IGQ2NCA9IEFzVWludDY0KCk7CisgICAgICAgICAgICByZXR1cm4gKChk
NjQgJiBrRXhwb25lbnRNYXNrKSA9PSBrRXhwb25lbnRNYXNrKSAmJgorICAgICAgICAgICAgKChk
NjQgJiBrU2lnbmlmaWNhbmRNYXNrKSA9PSAwKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgaW50IFNpZ24oKSBjb25zdCB7CisgICAgICAgICAgICB1aW50NjRfdCBkNjQgPSBBc1VpbnQ2
NCgpOworICAgICAgICAgICAgcmV0dXJuIChkNjQgJiBrU2lnbk1hc2spID09IDA/IDE6IC0xOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBQcmVjb25kaXRpb246IHRoZSB2YWx1ZSBl
bmNvZGVkIGJ5IHRoaXMgRG91YmxlIG11c3QgYmUgZ3JlYXRlciBvciBlcXVhbAorICAgICAgICAv
LyB0aGFuICswLjAuCisgICAgICAgIERpeUZwIFVwcGVyQm91bmRhcnkoKSBjb25zdCB7CisgICAg
ICAgICAgICBBU1NFUlQoU2lnbigpID4gMCk7CisgICAgICAgICAgICByZXR1cm4gRGl5RnAoU2ln
bmlmaWNhbmQoKSAqIDIgKyAxLCBFeHBvbmVudCgpIC0gMSk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIC8vIENvbXB1dGVzIHRoZSB0d28gYm91bmRhcmllcyBvZiB0aGlzLgorICAgICAg
ICAvLyBUaGUgYmlnZ2VyIGJvdW5kYXJ5IChtX3BsdXMpIGlzIG5vcm1hbGl6ZWQuIFRoZSBsb3dl
ciBib3VuZGFyeSBoYXMgdGhlIHNhbWUKKyAgICAgICAgLy8gZXhwb25lbnQgYXMgbV9wbHVzLgor
ICAgICAgICAvLyBQcmVjb25kaXRpb246IHRoZSB2YWx1ZSBlbmNvZGVkIGJ5IHRoaXMgRG91Ymxl
IG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuCisgICAgICAgIHZvaWQgTm9ybWFsaXplZEJvdW5kYXJp
ZXMoRGl5RnAqIG91dF9tX21pbnVzLCBEaXlGcCogb3V0X21fcGx1cykgY29uc3QgeworICAgICAg
ICAgICAgQVNTRVJUKHZhbHVlKCkgPiAwLjApOworICAgICAgICAgICAgRGl5RnAgdiA9IHRoaXMt
PkFzRGl5RnAoKTsKKyAgICAgICAgICAgIGJvb2wgc2lnbmlmaWNhbmRfaXNfemVybyA9ICh2LmYo
KSA9PSBrSGlkZGVuQml0KTsKKyAgICAgICAgICAgIERpeUZwIG1fcGx1cyA9IERpeUZwOjpOb3Jt
YWxpemUoRGl5RnAoKHYuZigpIDw8IDEpICsgMSwgdi5lKCkgLSAxKSk7CisgICAgICAgICAgICBE
aXlGcCBtX21pbnVzOworICAgICAgICAgICAgaWYgKHNpZ25pZmljYW5kX2lzX3plcm8gJiYgdi5l
KCkgIT0ga0Rlbm9ybWFsRXhwb25lbnQpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgYm91bmRh
cnkgaXMgY2xvc2VyLiBUaGluayBvZiB2ID0gMTAwMGUxMCBhbmQgdi0gPSA5OTk5ZTkuCisgICAg
ICAgICAgICAgICAgLy8gVGhlbiB0aGUgYm91bmRhcnkgKD09ICh2IC0gdi0pLzIpIGlzIG5vdCBq
dXN0IGF0IGEgZGlzdGFuY2Ugb2YgMWU5IGJ1dAorICAgICAgICAgICAgICAgIC8vIGF0IGEgZGlz
dGFuY2Ugb2YgMWU4LgorICAgICAgICAgICAgICAgIC8vIFRoZSBvbmx5IGV4Y2VwdGlvbiBpcyBm
b3IgdGhlIHNtYWxsZXN0IG5vcm1hbDogdGhlIGxhcmdlc3QgZGVub3JtYWwgaXMKKyAgICAgICAg
ICAgICAgICAvLyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBhcyBpdHMgc3VjY2Vzc29yLgorICAgICAg
ICAgICAgICAgIC8vIE5vdGU6IGRlbm9ybWFscyBoYXZlIHRoZSBzYW1lIGV4cG9uZW50IGFzIHRo
ZSBzbWFsbGVzdCBub3JtYWxzLgorICAgICAgICAgICAgICAgIG1fbWludXMgPSBEaXlGcCgodi5m
KCkgPDwgMikgLSAxLCB2LmUoKSAtIDIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBtX21pbnVzID0gRGl5RnAoKHYuZigpIDw8IDEpIC0gMSwgdi5lKCkgLSAxKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fbWludXMuc2V0X2YobV9taW51cy5mKCkgPDwgKG1f
bWludXMuZSgpIC0gbV9wbHVzLmUoKSkpOworICAgICAgICAgICAgbV9taW51cy5zZXRfZShtX3Bs
dXMuZSgpKTsKKyAgICAgICAgICAgICpvdXRfbV9wbHVzID0gbV9wbHVzOworICAgICAgICAgICAg
Km91dF9tX21pbnVzID0gbV9taW51czsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZG91
YmxlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gdWludDY0X3RvX2RvdWJsZShkNjRfKTsgfQorICAg
ICAgICAKKyAgICAgICAgLy8gUmV0dXJucyB0aGUgc2lnbmlmaWNhbmQgc2l6ZSBmb3IgYSBnaXZl
biBvcmRlciBvZiBtYWduaXR1ZGUuCisgICAgICAgIC8vIElmIHYgPSBmKjJeZSB3aXRoIDJecC0x
IDw9IGYgPD0gMl5wIHRoZW4gcCtlIGlzIHYncyBvcmRlciBvZiBtYWduaXR1ZGUuCisgICAgICAg
IC8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGJpbmFy
eSBkaWdpdHMgdiB3aWxsIGhhdmUKKyAgICAgICAgLy8gb25jZSBpdCdzIGVuY29kZWQgaW50byBh
IGRvdWJsZS4gSW4gYWxtb3N0IGFsbCBjYXNlcyB0aGlzIGlzIGVxdWFsIHRvCisgICAgICAgIC8v
IGtTaWduaWZpY2FuZFNpemUuIFRoZSBvbmx5IGV4Y2VwdGlvbnMgYXJlIGRlbm9ybWFscy4gVGhl
eSBzdGFydCB3aXRoCisgICAgICAgIC8vIGxlYWRpbmcgemVyb2VzIGFuZCB0aGVpciBlZmZlY3Rp
dmUgc2lnbmlmaWNhbmQtc2l6ZSBpcyBoZW5jZSBzbWFsbGVyLgorICAgICAgICBzdGF0aWMgaW50
IFNpZ25pZmljYW5kU2l6ZUZvck9yZGVyT2ZNYWduaXR1ZGUoaW50IG9yZGVyKSB7CisgICAgICAg
ICAgICBpZiAob3JkZXIgPj0gKGtEZW5vcm1hbEV4cG9uZW50ICsga1NpZ25pZmljYW5kU2l6ZSkp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4ga1NpZ25pZmljYW5kU2l6ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChvcmRlciA8PSBrRGVub3JtYWxFeHBvbmVudCkgcmV0dXJuIDA7
CisgICAgICAgICAgICByZXR1cm4gb3JkZXIgLSBrRGVub3JtYWxFeHBvbmVudDsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgc3RhdGljIGRvdWJsZSBJbmZpbml0eSgpIHsKKyAgICAgICAg
ICAgIHJldHVybiBEb3VibGUoa0luZmluaXR5KS52YWx1ZSgpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBzdGF0aWMgZG91YmxlIE5hTigpIHsKKyAgICAgICAgICAgIHJldHVybiBEb3Vi
bGUoa05hTikudmFsdWUoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IGtFeHBvbmVudEJpYXMgPSAweDNGRiArIGtQaHlzaWNhbFNp
Z25pZmljYW5kU2l6ZTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBrRGVub3JtYWxFeHBvbmVu
dCA9IC1rRXhwb25lbnRCaWFzICsgMTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBrTWF4RXhw
b25lbnQgPSAweDdGRiAtIGtFeHBvbmVudEJpYXM7CisgICAgICAgIHN0YXRpYyBjb25zdCB1aW50
NjRfdCBrSW5maW5pdHkgPSBVSU5UNjRfMlBBUlRfQygweDdGRjAwMDAwLCAwMDAwMDAwMCk7Cisg
ICAgICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBrTmFOID0gVUlOVDY0XzJQQVJUX0MoMHg3RkY4
MDAwMCwgMDAwMDAwMDApOworICAgICAgICAKKyAgICAgICAgY29uc3QgdWludDY0X3QgZDY0XzsK
KyAgICAgICAgCisgICAgICAgIHN0YXRpYyB1aW50NjRfdCBEaXlGcFRvVWludDY0KERpeUZwIGRp
eV9mcCkgeworICAgICAgICAgICAgdWludDY0X3Qgc2lnbmlmaWNhbmQgPSBkaXlfZnAuZigpOwor
ICAgICAgICAgICAgaW50IGV4cG9uZW50ID0gZGl5X2ZwLmUoKTsKKyAgICAgICAgICAgIHdoaWxl
IChzaWduaWZpY2FuZCA+IGtIaWRkZW5CaXQgKyBrU2lnbmlmaWNhbmRNYXNrKSB7CisgICAgICAg
ICAgICAgICAgc2lnbmlmaWNhbmQgPj49IDE7CisgICAgICAgICAgICAgICAgZXhwb25lbnQrKzsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChleHBvbmVudCA+PSBrTWF4RXhwb25lbnQp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4ga0luZmluaXR5OworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKGV4cG9uZW50IDwga0Rlbm9ybWFsRXhwb25lbnQpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdoaWxlIChleHBvbmVu
dCA+IGtEZW5vcm1hbEV4cG9uZW50ICYmIChzaWduaWZpY2FuZCAmIGtIaWRkZW5CaXQpID09IDAp
IHsKKyAgICAgICAgICAgICAgICBzaWduaWZpY2FuZCA8PD0gMTsKKyAgICAgICAgICAgICAgICBl
eHBvbmVudC0tOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdWludDY0X3QgYmlhc2VkX2V4
cG9uZW50OworICAgICAgICAgICAgaWYgKGV4cG9uZW50ID09IGtEZW5vcm1hbEV4cG9uZW50ICYm
IChzaWduaWZpY2FuZCAmIGtIaWRkZW5CaXQpID09IDApIHsKKyAgICAgICAgICAgICAgICBiaWFz
ZWRfZXhwb25lbnQgPSAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBi
aWFzZWRfZXhwb25lbnQgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oZXhwb25lbnQgKyBrRXhwb25l
bnRCaWFzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAoc2lnbmlmaWNhbmQg
JiBrU2lnbmlmaWNhbmRNYXNrKSB8CisgICAgICAgICAgICAoYmlhc2VkX2V4cG9uZW50IDw8IGtQ
aHlzaWNhbFNpZ25pZmljYW5kU2l6ZSk7CisgICAgICAgIH0KKyAgICB9OworICAgIAorfSAgLy8g
bmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5k
aWYgIC8vIERPVUJMRV9DT05WRVJTSU9OX0RPVUJMRV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2Zhc3QtZHRvYS5jYyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvZHRvYS9mYXN0LWR0b2EuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmZjMmU3ODFiZmRlMDU5YWNkYTk5
MjE4MThhZWFjNWI3Yzk5NmZhYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvZHRvYS9mYXN0LWR0b2EuY2MKQEAgLTAsMCArMSw3MzkgQEAKKy8vIENvcHlyaWdo
dCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
Ly8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8g
ICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAg
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
Ly8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworI2luY2x1ZGUgImZhc3QtZHRvYS5oIgorCisjaW5jbHVkZSAiY2Fj
aGVkLXBvd2Vycy5oIgorI2luY2x1ZGUgImRpeS1mcC5oIgorI2luY2x1ZGUgImRvdWJsZS5oIgor
CituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKKyAgICAK
KyAgICAvLyBUaGUgbWluaW1hbCBhbmQgbWF4aW1hbCB0YXJnZXQgZXhwb25lbnQgZGVmaW5lIHRo
ZSByYW5nZSBvZiB3J3MgYmluYXJ5CisgICAgLy8gZXhwb25lbnQsIHdoZXJlICd3JyBpcyB0aGUg
cmVzdWx0IG9mIG11bHRpcGx5aW5nIHRoZSBpbnB1dCBieSBhIGNhY2hlZCBwb3dlcgorICAgIC8v
IG9mIHRlbi4KKyAgICAvLworICAgIC8vIEEgZGlmZmVyZW50IHJhbmdlIG1pZ2h0IGJlIGNob3Nl
biBvbiBhIGRpZmZlcmVudCBwbGF0Zm9ybSwgdG8gb3B0aW1pemUgZGlnaXQKKyAgICAvLyBnZW5l
cmF0aW9uLCBidXQgYSBzbWFsbGVyIHJhbmdlIHJlcXVpcmVzIG1vcmUgcG93ZXJzIG9mIHRlbiB0
byBiZSBjYWNoZWQuCisgICAgc3RhdGljIGNvbnN0IGludCBrTWluaW1hbFRhcmdldEV4cG9uZW50
ID0gLTYwOworICAgIHN0YXRpYyBjb25zdCBpbnQga01heGltYWxUYXJnZXRFeHBvbmVudCA9IC0z
MjsKKyAgICAKKyAgICAKKyAgICAvLyBBZGp1c3RzIHRoZSBsYXN0IGRpZ2l0IG9mIHRoZSBnZW5l
cmF0ZWQgbnVtYmVyLCBhbmQgc2NyZWVucyBvdXQgZ2VuZXJhdGVkCisgICAgLy8gc29sdXRpb25z
IHRoYXQgbWF5IGJlIGluYWNjdXJhdGUuIEEgc29sdXRpb24gbWF5IGJlIGluYWNjdXJhdGUgaWYg
aXQgaXMKKyAgICAvLyBvdXRzaWRlIHRoZSBzYWZlIGludGVydmFsLCBvciBpZiB3ZSBjYW5ub3Qg
cHJvdmUgdGhhdCBpdCBpcyBjbG9zZXIgdG8gdGhlCisgICAgLy8gaW5wdXQgdGhhbiBhIG5laWdo
Ym9yaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzYW1lIGxlbmd0aC4KKyAgICAvLworICAgIC8v
IElucHV0OiAqIGJ1ZmZlciBjb250YWluaW5nIHRoZSBkaWdpdHMgb2YgdG9vX2hpZ2ggLyAxMF5r
YXBwYQorICAgIC8vICAgICAgICAqIHRoZSBidWZmZXIncyBsZW5ndGgKKyAgICAvLyAgICAgICAg
KiBkaXN0YW5jZV90b29faGlnaF93ID09ICh0b29faGlnaCAtIHcpLmYoKSAqIHVuaXQKKyAgICAv
LyAgICAgICAgKiB1bnNhZmVfaW50ZXJ2YWwgPT0gKHRvb19oaWdoIC0gdG9vX2xvdykuZigpICog
dW5pdAorICAgIC8vICAgICAgICAqIHJlc3QgPSAodG9vX2hpZ2ggLSBidWZmZXIgKiAxMF5rYXBw
YSkuZigpICogdW5pdAorICAgIC8vICAgICAgICAqIHRlbl9rYXBwYSA9IDEwXmthcHBhICogdW5p
dAorICAgIC8vICAgICAgICAqIHVuaXQgPSB0aGUgY29tbW9uIG11bHRpcGxpZXIKKyAgICAvLyBP
dXRwdXQ6IHJldHVybnMgdHJ1ZSBpZiB0aGUgYnVmZmVyIGlzIGd1YXJhbnRlZWQgdG8gY29udGFp
biB0aGUgY2xvc2VzdAorICAgIC8vICAgIHJlcHJlc2VudGFibGUgbnVtYmVyIHRvIHRoZSBpbnB1
dC4KKyAgICAvLyAgTW9kaWZpZXMgdGhlIGdlbmVyYXRlZCBkaWdpdHMgaW4gdGhlIGJ1ZmZlciB0
byBhcHByb2FjaCAocm91bmQgdG93YXJkcykgdy4KKyAgICBzdGF0aWMgYm9vbCBSb3VuZFdlZWQo
VmVjdG9yPGNoYXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0
aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgZGlzdGFuY2VfdG9vX2hpZ2hf
dywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgdW5zYWZlX2ludGVydmFsLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCByZXN0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICB1aW50NjRfdCB0ZW5fa2FwcGEsCisgICAgICAgICAgICAgICAgICAgICAgICAg
IHVpbnQ2NF90IHVuaXQpIHsKKyAgICAgICAgdWludDY0X3Qgc21hbGxfZGlzdGFuY2UgPSBkaXN0
YW5jZV90b29faGlnaF93IC0gdW5pdDsKKyAgICAgICAgdWludDY0X3QgYmlnX2Rpc3RhbmNlID0g
ZGlzdGFuY2VfdG9vX2hpZ2hfdyArIHVuaXQ7CisgICAgICAgIC8vIExldCB3X2xvdyAgPSB0b29f
aGlnaCAtIGJpZ19kaXN0YW5jZSwgYW5kCisgICAgICAgIC8vICAgICB3X2hpZ2ggPSB0b29faGln
aCAtIHNtYWxsX2Rpc3RhbmNlLgorICAgICAgICAvLyBOb3RlOiB3X2xvdyA8IHcgPCB3X2hpZ2gK
KyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhlIHJlYWwgdyAoKiB1bml0KSBtdXN0IGxpZSBzb21l
d2hlcmUgaW5zaWRlIHRoZSBpbnRlcnZhbAorICAgICAgICAvLyBdd19sb3c7IHdfaGlnaFsgKG9m
dGVuIHdyaXR0ZW4gYXMgIih3X2xvdzsgd19oaWdoKSIpCisgICAgICAgIAorICAgICAgICAvLyBC
YXNpY2FsbHkgdGhlIGJ1ZmZlciBjdXJyZW50bHkgY29udGFpbnMgYSBudW1iZXIgaW4gdGhlIHVu
c2FmZSBpbnRlcnZhbAorICAgICAgICAvLyBddG9vX2xvdzsgdG9vX2hpZ2hbIHdpdGggdG9vX2xv
dyA8IHcgPCB0b29faGlnaAorICAgICAgICAvLworICAgICAgICAvLyAgdG9vX2hpZ2ggLSAtIC0g
LSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAt
IC0KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBediAxIHVuaXQgICAgICAgICAgICBe
ICAgICAgXiAgICAgICAgICAgICAgICAgXiAgICAgIF4KKyAgICAgICAgLy8gIGJvdW5kYXJ5X2hp
Z2ggLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAuICAgICAgLiAgICAgICAgICAgICAgICAgLiAg
ICAgIC4KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBediAxIHVuaXQgICAgICAgICAg
ICAuICAgICAgLiAgICAgICAgICAgICAgICAgLiAgICAgIC4KKyAgICAgICAgLy8gICAtIC0gLSAt
IC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICArICAtIC0gKyAtIC0gLSAtIC0gLSAgICAg
LiAgICAgIC4KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAuICAgICAgLiAgICAgICAgIF4gICAgICAgLiAgICAgIC4KKyAgICAgICAgLy8gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICBiaWdfZGlzdGFuY2UgIC4gICAg
ICAgLiAgICAgIC4KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAuICAgICAgLiAgICAgICAgIC4gICAgICAgLiAgICByZXN0CisgICAgICAgIC8vICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc21hbGxfZGlzdGFuY2UgICAgIC4gICAgICAgICAu
ICAgICAgIC4gICAgICAuCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdiAgICAgIC4gICAgICAgICAuICAgICAgIC4gICAgICAuCisgICAgICAgIC8v
ICB3X2hpZ2ggLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gICAgIC4gICAgICAg
ICAuICAgICAgIC4gICAgICAuCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXnYgMSB1
bml0ICAgICAgICAgICAgICAgICAgIC4gICAgICAgICAuICAgICAgIC4gICAgICAuCisgICAgICAg
IC8vICB3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgIC4gICAg
ICAgICAuICAgICAgIC4gICAgICAuCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXnYg
MSB1bml0ICAgICAgICAgICAgICAgICAgIHYgICAgICAgICAuICAgICAgIC4gICAgICAuCisgICAg
ICAgIC8vICB3X2xvdyAgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g
ICAgICAgICAuICAgICAgIC4gICAgICAuCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICAgICAgIC4gICAgICB2Cisg
ICAgICAgIC8vICBidWZmZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLQorICAgICAgICAvLyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAgICAgICAuCisgICAg
ICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
YWZlX2ludGVydmFsICAgIC4KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgICAgICAgLgorICAgICAgICAvLyAgIC0g
LSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAt
ICAgICAuCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXnYgMSB1bml0ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4KKyAgICAgICAgLy8gIGJvdW5kYXJ5X2xvdyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgdW5zYWZlX2ludGVy
dmFsCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXnYgMSB1bml0ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHYKKyAgICAgICAgLy8gIHRvb19sb3cgIC0gLSAtIC0g
LSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAt
CisgICAgICAgIC8vCisgICAgICAgIC8vCisgICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgdmFsdWUg
b2YgYnVmZmVyIGNvdWxkIGxpZSBhbnl3aGVyZSBpbnNpZGUgdGhlIHJhbmdlIHRvb19sb3cKKyAg
ICAgICAgLy8gdG8gdG9vX2hpZ2guCisgICAgICAgIC8vCisgICAgICAgIC8vIGJvdW5kYXJ5X2xv
dywgYm91bmRhcnlfaGlnaCBhbmQgdyBhcmUgYXBwcm94aW1hdGlvbnMgb2YgdGhlIHJlYWwgYm91
bmRhcmllcworICAgICAgICAvLyBhbmQgdiAodGhlIGlucHV0IG51bWJlcikuIFRoZXkgYXJlIGd1
YXJhbnRlZWQgdG8gYmUgcHJlY2lzZSB1cCB0byBvbmUgdW5pdC4KKyAgICAgICAgLy8gSW4gZmFj
dCB0aGUgZXJyb3IgaXMgZ3VhcmFudGVlZCB0byBiZSBzdHJpY3RseSBsZXNzIHRoYW4gb25lIHVu
aXQuCisgICAgICAgIC8vCisgICAgICAgIC8vIEFueXRoaW5nIHRoYXQgbGllcyBvdXRzaWRlIHRo
ZSB1bnNhZmUgaW50ZXJ2YWwgaXMgZ3VhcmFudGVlZCBub3QgdG8gcm91bmQKKyAgICAgICAgLy8g
dG8gdiB3aGVuIHJlYWQgYWdhaW4uCisgICAgICAgIC8vIEFueXRoaW5nIHRoYXQgbGllcyBpbnNp
ZGUgdGhlIHNhZmUgaW50ZXJ2YWwgaXMgZ3VhcmFudGVlZCB0byByb3VuZCB0byB2CisgICAgICAg
IC8vIHdoZW4gcmVhZCBhZ2Fpbi4KKyAgICAgICAgLy8gSWYgdGhlIG51bWJlciBpbnNpZGUgdGhl
IGJ1ZmZlciBsaWVzIGluc2lkZSB0aGUgdW5zYWZlIGludGVydmFsIGJ1dCBub3QKKyAgICAgICAg
Ly8gaW5zaWRlIHRoZSBzYWZlIGludGVydmFsIHRoZW4gd2Ugc2ltcGx5IGRvIG5vdCBrbm93IGFu
ZCBiYWlsIG91dCAocmV0dXJuaW5nCisgICAgICAgIC8vIGZhbHNlKS4KKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gU2ltaWxhcmx5IHdlIGhhdmUgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhlIGltcHJl
Y2lzaW9uIG9mICd3JyB3aGVuIGZpbmRpbmcKKyAgICAgICAgLy8gdGhlIGNsb3Nlc3QgcmVwcmVz
ZW50YXRpb24gb2YgJ3cnLiBJZiB3ZSBoYXZlIHR3byBwb3RlbnRpYWwKKyAgICAgICAgLy8gcmVw
cmVzZW50YXRpb25zLCBhbmQgb25lIGlzIGNsb3NlciB0byBib3RoIHdfbG93IGFuZCB3X2hpZ2gs
IHRoZW4gd2Uga25vdworICAgICAgICAvLyBpdCBpcyBjbG9zZXIgdG8gdGhlIGFjdHVhbCB2YWx1
ZSB2LgorICAgICAgICAvLworICAgICAgICAvLyBCeSBnZW5lcmF0aW5nIHRoZSBkaWdpdHMgb2Yg
dG9vX2hpZ2ggd2UgZ290IHRoZSBsYXJnZXN0IChjbG9zZXN0IHRvCisgICAgICAgIC8vIHRvb19o
aWdoKSBidWZmZXIgdGhhdCBpcyBzdGlsbCBpbiB0aGUgdW5zYWZlIGludGVydmFsLiBJbiB0aGUg
Y2FzZSB3aGVyZQorICAgICAgICAvLyB3X2hpZ2ggPCBidWZmZXIgPCB0b29faGlnaCB3ZSB0cnkg
dG8gZGVjcmVtZW50IHRoZSBidWZmZXIuCisgICAgICAgIC8vIFRoaXMgd2F5IHRoZSBidWZmZXIg
YXBwcm9hY2hlcyAocm91bmRzIHRvd2FyZHMpIHcuCisgICAgICAgIC8vIFRoZXJlIGFyZSAzIGNv
bmRpdGlvbnMgdGhhdCBzdG9wIHRoZSBkZWNyZW1lbnRhdGlvbiBwcm9jZXNzOgorICAgICAgICAv
LyAgIDEpIHRoZSBidWZmZXIgaXMgYWxyZWFkeSBiZWxvdyB3X2hpZ2gKKyAgICAgICAgLy8gICAy
KSBkZWNyZW1lbnRpbmcgdGhlIGJ1ZmZlciB3b3VsZCBtYWtlIGl0IGxlYXZlIHRoZSB1bnNhZmUg
aW50ZXJ2YWwKKyAgICAgICAgLy8gICAzKSBkZWNyZW1lbnRpbmcgdGhlIGJ1ZmZlciB3b3VsZCB5
aWVsZCBhIG51bWJlciBiZWxvdyB3X2hpZ2ggYW5kIGZhcnRoZXIKKyAgICAgICAgLy8gICAgICBh
d2F5IHRoYW4gdGhlIGN1cnJlbnQgbnVtYmVyLiBJbiBvdGhlciB3b3JkczoKKyAgICAgICAgLy8g
ICAgICAgICAgICAgIChidWZmZXJ7LTF9IDwgd19oaWdoKSAmJiB3X2hpZ2ggLSBidWZmZXJ7LTF9
ID4gYnVmZmVyIC0gd19oaWdoCisgICAgICAgIC8vIEluc3RlYWQgb2YgdXNpbmcgdGhlIGJ1ZmZl
ciBkaXJlY3RseSB3ZSB1c2UgaXRzIGRpc3RhbmNlIHRvIHRvb19oaWdoLgorICAgICAgICAvLyBD
b25jZXB0dWFsbHkgcmVzdCB+PSB0b29faGlnaCAtIGJ1ZmZlcgorICAgICAgICAvLyBXZSBuZWVk
IHRvIGRvIHRoZSBmb2xsb3dpbmcgdGVzdHMgaW4gdGhpcyBvcmRlciB0byBhdm9pZCBvdmVyLSBh
bmQKKyAgICAgICAgLy8gdW5kZXJmbG93cy4KKyAgICAgICAgQVNTRVJUKHJlc3QgPD0gdW5zYWZl
X2ludGVydmFsKTsKKyAgICAgICAgd2hpbGUgKHJlc3QgPCBzbWFsbF9kaXN0YW5jZSAmJiAgLy8g
TmVnYXRlZCBjb25kaXRpb24gMQorICAgICAgICAgICAgICAgdW5zYWZlX2ludGVydmFsIC0gcmVz
dCA+PSB0ZW5fa2FwcGEgJiYgIC8vIE5lZ2F0ZWQgY29uZGl0aW9uIDIKKyAgICAgICAgICAgICAg
IChyZXN0ICsgdGVuX2thcHBhIDwgc21hbGxfZGlzdGFuY2UgfHwgIC8vIGJ1ZmZlcnstMX0gPiB3
X2hpZ2gKKyAgICAgICAgICAgICAgICBzbWFsbF9kaXN0YW5jZSAtIHJlc3QgPj0gcmVzdCArIHRl
bl9rYXBwYSAtIHNtYWxsX2Rpc3RhbmNlKSkgeworICAgICAgICAgICAgICAgICAgIGJ1ZmZlclts
ZW5ndGggLSAxXS0tOworICAgICAgICAgICAgICAgICAgIHJlc3QgKz0gdGVuX2thcHBhOworICAg
ICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gV2UgaGF2ZSBhcHByb2FjaGVkIHcr
IGFzIG11Y2ggYXMgcG9zc2libGUuIFdlIG5vdyB0ZXN0IGlmIGFwcHJvYWNoaW5nIHctCisgICAg
ICAgIC8vIHdvdWxkIHJlcXVpcmUgY2hhbmdpbmcgdGhlIGJ1ZmZlci4gSWYgeWVzLCB0aGVuIHdl
IGhhdmUgdHdvIHBvc3NpYmxlCisgICAgICAgIC8vIHJlcHJlc2VudGF0aW9ucyBjbG9zZSB0byB3
LCBidXQgd2UgY2Fubm90IGRlY2lkZSB3aGljaCBvbmUgaXMgY2xvc2VyLgorICAgICAgICBpZiAo
cmVzdCA8IGJpZ19kaXN0YW5jZSAmJgorICAgICAgICAgICAgdW5zYWZlX2ludGVydmFsIC0gcmVz
dCA+PSB0ZW5fa2FwcGEgJiYKKyAgICAgICAgICAgIChyZXN0ICsgdGVuX2thcHBhIDwgYmlnX2Rp
c3RhbmNlIHx8CisgICAgICAgICAgICAgYmlnX2Rpc3RhbmNlIC0gcmVzdCA+IHJlc3QgKyB0ZW5f
a2FwcGEgLSBiaWdfZGlzdGFuY2UpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gV2VlZGluZyB0ZXN0LgorICAgICAg
ICAvLyAgIFRoZSBzYWZlIGludGVydmFsIGlzIFt0b29fbG93ICsgMiB1bHA7IHRvb19oaWdoIC0g
MiB1bHBdCisgICAgICAgIC8vICAgU2luY2UgdG9vX2xvdyA9IHRvb19oaWdoIC0gdW5zYWZlX2lu
dGVydmFsIHRoaXMgaXMgZXF1aXZhbGVudCB0bworICAgICAgICAvLyAgICAgIFt0b29faGlnaCAt
IHVuc2FmZV9pbnRlcnZhbCArIDQgdWxwOyB0b29faGlnaCAtIDIgdWxwXQorICAgICAgICAvLyAg
IENvbmNlcHR1YWxseSB3ZSBoYXZlOiByZXN0IH49IHRvb19oaWdoIC0gYnVmZmVyCisgICAgICAg
IHJldHVybiAoMiAqIHVuaXQgPD0gcmVzdCkgJiYgKHJlc3QgPD0gdW5zYWZlX2ludGVydmFsIC0g
NCAqIHVuaXQpOworICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBSb3VuZHMgdGhlIGJ1ZmZlciB1
cHdhcmRzIGlmIHRoZSByZXN1bHQgaXMgY2xvc2VyIHRvIHYgYnkgcG9zc2libHkgYWRkaW5nCisg
ICAgLy8gMSB0byB0aGUgYnVmZmVyLiBJZiB0aGUgcHJlY2lzaW9uIG9mIHRoZSBjYWxjdWxhdGlv
biBpcyBub3Qgc3VmZmljaWVudCB0bworICAgIC8vIHJvdW5kIGNvcnJlY3RseSwgcmV0dXJuIGZh
bHNlLgorICAgIC8vIFRoZSByb3VuZGluZyBtaWdodCBzaGlmdCB0aGUgd2hvbGUgYnVmZmVyIGlu
IHdoaWNoIGNhc2UgdGhlIGthcHBhIGlzCisgICAgLy8gYWRqdXN0ZWQuIEZvciBleGFtcGxlICI5
OSIsIGthcHBhID0gMyBtaWdodCBiZWNvbWUgIjEwIiwga2FwcGEgPSA0LgorICAgIC8vCisgICAg
Ly8gSWYgMipyZXN0ID4gdGVuX2thcHBhIHRoZW4gdGhlIGJ1ZmZlciBuZWVkcyB0byBiZSByb3Vu
ZCB1cC4KKyAgICAvLyByZXN0IGNhbiBoYXZlIGFuIGVycm9yIG9mICsvLSAxIHVuaXQuIFRoaXMg
ZnVuY3Rpb24gYWNjb3VudHMgZm9yIHRoZQorICAgIC8vIGltcHJlY2lzaW9uIGFuZCByZXR1cm5z
IGZhbHNlLCBpZiB0aGUgcm91bmRpbmcgZGlyZWN0aW9uIGNhbm5vdCBiZQorICAgIC8vIHVuYW1i
aWd1b3VzbHkgZGV0ZXJtaW5lZC4KKyAgICAvLworICAgIC8vIFByZWNvbmRpdGlvbjogcmVzdCA8
IHRlbl9rYXBwYS4KKyAgICBzdGF0aWMgYm9vbCBSb3VuZFdlZWRDb3VudGVkKFZlY3RvcjxjaGFy
PiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgcmVzdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHRlbl9rYXBwYSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHVuaXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQqIGthcHBhKSB7CisgICAgICAgIEFTU0VSVChyZXN0IDwgdGVuX2th
cHBhKTsKKyAgICAgICAgLy8gVGhlIGZvbGxvd2luZyB0ZXN0cyBhcmUgZG9uZSBpbiBhIHNwZWNp
ZmljIG9yZGVyIHRvIGF2b2lkIG92ZXJmbG93cy4gVGhleQorICAgICAgICAvLyB3aWxsIHdvcmsg
Y29ycmVjdGx5IHdpdGggYW55IHVpbnQ2NCB2YWx1ZXMgb2YgcmVzdCA8IHRlbl9rYXBwYSBhbmQg
dW5pdC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgdGhlIHVuaXQgaXMgdG9vIGJpZywgdGhl
biB3ZSBkb24ndCBrbm93IHdoaWNoIHdheSB0byByb3VuZC4gRm9yIGV4YW1wbGUKKyAgICAgICAg
Ly8gYSB1bml0IG9mIDUwIG1lYW5zIHRoYXQgdGhlIHJlYWwgbnVtYmVyIGxpZXMgd2l0aGluIHJl
c3QgKy8tIDUwLiBJZgorICAgICAgICAvLyAxMF5rYXBwYSA9PSA0MCB0aGVuIHRoZXJlIGlzIG5v
IHdheSB0byB0ZWxsIHdoaWNoIHdheSB0byByb3VuZC4KKyAgICAgICAgaWYgKHVuaXQgPj0gdGVu
X2thcHBhKSByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIEV2ZW4gaWYgdW5pdCBpcyBqdXN0IGhh
bGYgdGhlIHNpemUgb2YgMTBea2FwcGEgd2UgYXJlIGFscmVhZHkgY29tcGxldGVseQorICAgICAg
ICAvLyBsb3N0LiAoQW5kIGFmdGVyIHRoZSBwcmV2aW91cyB0ZXN0IHdlIGtub3cgdGhhdCB0aGUg
ZXhwcmVzc2lvbiB3aWxsIG5vdAorICAgICAgICAvLyBvdmVyL3VuZGVyZmxvdy4pCisgICAgICAg
IGlmICh0ZW5fa2FwcGEgLSB1bml0IDw9IHVuaXQpIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8g
SWYgMiAqIChyZXN0ICsgdW5pdCkgPD0gMTBea2FwcGEgd2UgY2FuIHNhZmVseSByb3VuZCBkb3du
LgorICAgICAgICBpZiAoKHRlbl9rYXBwYSAtIHJlc3QgPiByZXN0KSAmJiAodGVuX2thcHBhIC0g
MiAqIHJlc3QgPj0gMiAqIHVuaXQpKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICAvLyBJZiAyICogKHJlc3QgLSB1bml0KSA+PSAxMF5rYXBwYSwgdGhlbiB3
ZSBjYW4gc2FmZWx5IHJvdW5kIHVwLgorICAgICAgICBpZiAoKHJlc3QgPiB1bml0KSAmJiAodGVu
X2thcHBhIC0gKHJlc3QgLSB1bml0KSA8PSAocmVzdCAtIHVuaXQpKSkgeworICAgICAgICAgICAg
Ly8gSW5jcmVtZW50IHRoZSBsYXN0IGRpZ2l0IHJlY3Vyc2l2ZWx5IHVudGlsIHdlIGZpbmQgYSBu
b24gJzknIGRpZ2l0LgorICAgICAgICAgICAgYnVmZmVyW2xlbmd0aCAtIDFdKys7CisgICAgICAg
ICAgICBmb3IgKGludCBpID0gbGVuZ3RoIC0gMTsgaSA+IDA7IC0taSkgeworICAgICAgICAgICAg
ICAgIGlmIChidWZmZXJbaV0gIT0gJzAnICsgMTApIGJyZWFrOworICAgICAgICAgICAgICAgIGJ1
ZmZlcltpXSA9ICcwJzsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSAtIDFdKys7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAvLyBJZiB0aGUgZmlyc3QgZGlnaXQgaXMgbm93ICcwJysgMTAg
d2UgaGFkIGEgYnVmZmVyIHdpdGggYWxsICc5J3MuIFdpdGggdGhlCisgICAgICAgICAgICAvLyBl
eGNlcHRpb24gb2YgdGhlIGZpcnN0IGRpZ2l0IGFsbCBkaWdpdHMgYXJlIG5vdyAnMCcuIFNpbXBs
eSBzd2l0Y2ggdGhlCisgICAgICAgICAgICAvLyBmaXJzdCBkaWdpdCB0byAnMScgYW5kIGFkanVz
dCB0aGUga2FwcGEuIEV4YW1wbGU6ICI5OSIgYmVjb21lcyAiMTAiIGFuZAorICAgICAgICAgICAg
Ly8gdGhlIHBvd2VyICh0aGUga2FwcGEpIGlzIGluY3JlYXNlZC4KKyAgICAgICAgICAgIGlmIChi
dWZmZXJbMF0gPT0gJzAnICsgMTApIHsKKyAgICAgICAgICAgICAgICBidWZmZXJbMF0gPSAnMSc7
CisgICAgICAgICAgICAgICAgKCprYXBwYSkgKz0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgCisgICAgCisgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IGtUZW40ID0gMTAwMDA7Cisg
ICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IGtUZW41ID0gMTAwMDAwOworICAgIHN0YXRpYyBjb25z
dCB1aW50MzJfdCBrVGVuNiA9IDEwMDAwMDA7CisgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IGtU
ZW43ID0gMTAwMDAwMDA7CisgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IGtUZW44ID0gMTAwMDAw
MDAwOworICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBrVGVuOSA9IDEwMDAwMDAwMDA7CisgICAg
CisgICAgLy8gUmV0dXJucyB0aGUgYmlnZ2VzdCBwb3dlciBvZiB0ZW4gdGhhdCBpcyBsZXNzIHRo
YW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuCisgICAgLy8gbnVtYmVyLiBXZSBmdXJ0aGVybW9yZSBy
ZWNlaXZlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBiaXRzICdudW1iZXInIGhhcy4KKyAgICAvLyBJ
ZiBudW1iZXJfYml0cyA9PSAwIHRoZW4gMF4tMSBpcyByZXR1cm5lZAorICAgIC8vIFRoZSBudW1i
ZXIgb2YgYml0cyBtdXN0IGJlIDw9IDMyLgorICAgIC8vIFByZWNvbmRpdGlvbjogbnVtYmVyIDwg
KDEgPDwgKG51bWJlcl9iaXRzICsgMSkpLgorICAgIHN0YXRpYyB2b2lkIEJpZ2dlc3RQb3dlclRl
bih1aW50MzJfdCBudW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBu
dW1iZXJfYml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QqIHBv
d2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGV4cG9uZW50KSB7Cisg
ICAgICAgIEFTU0VSVChudW1iZXIgPCAoMSA8PCAobnVtYmVyX2JpdHMgKyAxKSkpOworICAgICAg
ICAKKyAgICAgICAgc3dpdGNoIChudW1iZXJfYml0cykgeworICAgICAgICAgICAgY2FzZSAzMjoK
KyAgICAgICAgICAgIGNhc2UgMzE6CisgICAgICAgICAgICBjYXNlIDMwOgorICAgICAgICAgICAg
ICAgIGlmIChrVGVuOSA8PSBudW1iZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgKnBvd2VyID0g
a1Rlbjk7CisgICAgICAgICAgICAgICAgICAgICpleHBvbmVudCA9IDk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gIC8vIGVsc2UgZmFsbHRocm91Z2gKKyAg
ICAgICAgICAgIGNhc2UgMjk6CisgICAgICAgICAgICBjYXNlIDI4OgorICAgICAgICAgICAgY2Fz
ZSAyNzoKKyAgICAgICAgICAgICAgICBpZiAoa1RlbjggPD0gbnVtYmVyKSB7CisgICAgICAgICAg
ICAgICAgICAgICpwb3dlciA9IGtUZW44OworICAgICAgICAgICAgICAgICAgICAqZXhwb25lbnQg
PSA4OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9ICAvLyBl
bHNlIGZhbGx0aHJvdWdoCisgICAgICAgICAgICBjYXNlIDI2OgorICAgICAgICAgICAgY2FzZSAy
NToKKyAgICAgICAgICAgIGNhc2UgMjQ6CisgICAgICAgICAgICAgICAgaWYgKGtUZW43IDw9IG51
bWJlcikgeworICAgICAgICAgICAgICAgICAgICAqcG93ZXIgPSBrVGVuNzsKKyAgICAgICAgICAg
ICAgICAgICAgKmV4cG9uZW50ID0gNzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfSAgLy8gZWxzZSBmYWxsdGhyb3VnaAorICAgICAgICAgICAgY2FzZSAyMzoK
KyAgICAgICAgICAgIGNhc2UgMjI6CisgICAgICAgICAgICBjYXNlIDIxOgorICAgICAgICAgICAg
Y2FzZSAyMDoKKyAgICAgICAgICAgICAgICBpZiAoa1RlbjYgPD0gbnVtYmVyKSB7CisgICAgICAg
ICAgICAgICAgICAgICpwb3dlciA9IGtUZW42OworICAgICAgICAgICAgICAgICAgICAqZXhwb25l
bnQgPSA2OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9ICAv
LyBlbHNlIGZhbGx0aHJvdWdoCisgICAgICAgICAgICBjYXNlIDE5OgorICAgICAgICAgICAgY2Fz
ZSAxODoKKyAgICAgICAgICAgIGNhc2UgMTc6CisgICAgICAgICAgICAgICAgaWYgKGtUZW41IDw9
IG51bWJlcikgeworICAgICAgICAgICAgICAgICAgICAqcG93ZXIgPSBrVGVuNTsKKyAgICAgICAg
ICAgICAgICAgICAgKmV4cG9uZW50ID0gNTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfSAgLy8gZWxzZSBmYWxsdGhyb3VnaAorICAgICAgICAgICAgY2FzZSAx
NjoKKyAgICAgICAgICAgIGNhc2UgMTU6CisgICAgICAgICAgICBjYXNlIDE0OgorICAgICAgICAg
ICAgICAgIGlmIChrVGVuNCA8PSBudW1iZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgKnBvd2Vy
ID0ga1RlbjQ7CisgICAgICAgICAgICAgICAgICAgICpleHBvbmVudCA9IDQ7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gIC8vIGVsc2UgZmFsbHRocm91Z2gK
KyAgICAgICAgICAgIGNhc2UgMTM6CisgICAgICAgICAgICBjYXNlIDEyOgorICAgICAgICAgICAg
Y2FzZSAxMToKKyAgICAgICAgICAgIGNhc2UgMTA6CisgICAgICAgICAgICAgICAgaWYgKDEwMDAg
PD0gbnVtYmVyKSB7CisgICAgICAgICAgICAgICAgICAgICpwb3dlciA9IDEwMDA7CisgICAgICAg
ICAgICAgICAgICAgICpleHBvbmVudCA9IDM7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0gIC8vIGVsc2UgZmFsbHRocm91Z2gKKyAgICAgICAgICAgIGNhc2Ug
OToKKyAgICAgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICAg
ICAgICBpZiAoMTAwIDw9IG51bWJlcikgeworICAgICAgICAgICAgICAgICAgICAqcG93ZXIgPSAx
MDA7CisgICAgICAgICAgICAgICAgICAgICpleHBvbmVudCA9IDI7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gIC8vIGVsc2UgZmFsbHRocm91Z2gKKyAgICAg
ICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgIGNhc2UgNDoK
KyAgICAgICAgICAgICAgICBpZiAoMTAgPD0gbnVtYmVyKSB7CisgICAgICAgICAgICAgICAgICAg
ICpwb3dlciA9IDEwOworICAgICAgICAgICAgICAgICAgICAqZXhwb25lbnQgPSAxOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9ICAvLyBlbHNlIGZhbGx0aHJv
dWdoCisgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAg
ICBjYXNlIDE6CisgICAgICAgICAgICAgICAgaWYgKDEgPD0gbnVtYmVyKSB7CisgICAgICAgICAg
ICAgICAgICAgICpwb3dlciA9IDE7CisgICAgICAgICAgICAgICAgICAgICpleHBvbmVudCA9IDA7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gIC8vIGVsc2Ug
ZmFsbHRocm91Z2gKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAqcG93ZXIg
PSAwOworICAgICAgICAgICAgICAgICpleHBvbmVudCA9IC0xOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAvLyBGb2xsb3dpbmcg
YXNzaWdubWVudHMgYXJlIGhlcmUgdG8gc2lsZW5jZSBjb21waWxlciB3YXJuaW5ncy4KKyAgICAg
ICAgICAgICAgICAqcG93ZXIgPSAwOworICAgICAgICAgICAgICAgICpleHBvbmVudCA9IDA7Cisg
ICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICAKKyAgICAvLyBHZW5lcmF0ZXMgdGhlIGRpZ2l0cyBvZiBpbnB1dCBudW1iZXIgdy4KKyAgICAv
LyB3IGlzIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIChEaXlGcCksIGNvbnNpc3Rpbmcgb2YgYSBz
aWduaWZpY2FuZCBhbmQgYW4KKyAgICAvLyBleHBvbmVudC4gSXRzIGV4cG9uZW50IGlzIGJvdW5k
ZWQgYnkga01pbmltYWxUYXJnZXRFeHBvbmVudCBhbmQKKyAgICAvLyBrTWF4aW1hbFRhcmdldEV4
cG9uZW50LgorICAgIC8vICAgICAgIEhlbmNlIC02MCA8PSB3LmUoKSA8PSAtMzIuCisgICAgLy8K
KyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIGl0IGZhaWxzLCBpbiB3aGljaCBjYXNlIHRoZSBnZW5l
cmF0ZWQgZGlnaXRzIGluIHRoZSBidWZmZXIKKyAgICAvLyBzaG91bGQgbm90IGJlIHVzZWQuCisg
ICAgLy8gUHJlY29uZGl0aW9uczoKKyAgICAvLyAgKiBsb3csIHcgYW5kIGhpZ2ggYXJlIGNvcnJl
Y3QgdXAgdG8gMSB1bHAgKHVuaXQgaW4gdGhlIGxhc3QgcGxhY2UpLiBUaGF0CisgICAgLy8gICAg
aXMsIHRoZWlyIGVycm9yIG11c3QgYmUgbGVzcyB0aGFuIGEgdW5pdCBvZiB0aGVpciBsYXN0IGRp
Z2l0cy4KKyAgICAvLyAgKiBsb3cuZSgpID09IHcuZSgpID09IGhpZ2guZSgpCisgICAgLy8gICog
bG93IDwgdyA8IGhpZ2gsIGFuZCB0YWtpbmcgaW50byBhY2NvdW50IHRoZWlyIGVycm9yOiBsb3d+
IDw9IGhpZ2h+CisgICAgLy8gICoga01pbmltYWxUYXJnZXRFeHBvbmVudCA8PSB3LmUoKSA8PSBr
TWF4aW1hbFRhcmdldEV4cG9uZW50CisgICAgLy8gUG9zdGNvbmRpdGlvbnM6IHJldHVybnMgZmFs
c2UgaWYgcHJvY2VkdXJlIGZhaWxzLgorICAgIC8vICAgb3RoZXJ3aXNlOgorICAgIC8vICAgICAq
IGJ1ZmZlciBpcyBub3QgbnVsbC10ZXJtaW5hdGVkLCBidXQgbGVuIGNvbnRhaW5zIHRoZSBudW1i
ZXIgb2YgZGlnaXRzLgorICAgIC8vICAgICAqIGJ1ZmZlciBjb250YWlucyB0aGUgc2hvcnRlc3Qg
cG9zc2libGUgZGVjaW1hbCBkaWdpdC1zZXF1ZW5jZQorICAgIC8vICAgICAgIHN1Y2ggdGhhdCBM
T1cgPCBidWZmZXIgKiAxMF5rYXBwYSA8IEhJR0gsIHdoZXJlIExPVyBhbmQgSElHSCBhcmUgdGhl
CisgICAgLy8gICAgICAgY29ycmVjdCB2YWx1ZXMgb2YgbG93IGFuZCBoaWdoICh3aXRob3V0IHRo
ZWlyIGVycm9yKS4KKyAgICAvLyAgICAgKiBpZiBtb3JlIHRoYW4gb25lIGRlY2ltYWwgcmVwcmVz
ZW50YXRpb24gZ2l2ZXMgdGhlIG1pbmltYWwgbnVtYmVyIG9mCisgICAgLy8gICAgICAgZGVjaW1h
bCBkaWdpdHMgdGhlbiB0aGUgb25lIGNsb3Nlc3QgdG8gVyAod2hlcmUgVyBpcyB0aGUgY29ycmVj
dCB2YWx1ZQorICAgIC8vICAgICAgIG9mIHcpIGlzIGNob3Nlbi4KKyAgICAvLyBSZW1hcms6IHRo
aXMgcHJvY2VkdXJlIHRha2VzIGludG8gYWNjb3VudCB0aGUgaW1wcmVjaXNpb24gb2YgaXRzIGlu
cHV0CisgICAgLy8gICBudW1iZXJzLiBJZiB0aGUgcHJlY2lzaW9uIGlzIG5vdCBlbm91Z2ggdG8g
Z3VhcmFudGVlIGFsbCB0aGUgcG9zdGNvbmRpdGlvbnMKKyAgICAvLyAgIHRoZW4gZmFsc2UgaXMg
cmV0dXJuZWQuIFRoaXMgdXN1YWxseSBoYXBwZW5zIHJhcmVseSAofjAuNSUpLgorICAgIC8vCisg
ICAgLy8gU2F5LCBmb3IgdGhlIHNha2Ugb2YgZXhhbXBsZSwgdGhhdAorICAgIC8vICAgdy5lKCkg
PT0gLTQ4LCBhbmQgdy5mKCkgPT0gMHgxMjM0NTY3ODkwYWJjZGVmCisgICAgLy8gdydzIHZhbHVl
IGNhbiBiZSBjb21wdXRlZCBieSB3LmYoKSAqIDJedy5lKCkKKyAgICAvLyBXZSBjYW4gb2J0YWlu
IHcncyBpbnRlZ3JhbCBkaWdpdHMgYnkgc2ltcGx5IHNoaWZ0aW5nIHcuZigpIGJ5IC13LmUoKS4K
KyAgICAvLyAgLT4gdydzIGludGVncmFsIHBhcnQgaXMgMHgxMjM0CisgICAgLy8gIHcncyBmcmFj
dGlvbmFsIHBhcnQgaXMgdGhlcmVmb3JlIDB4NTY3ODkwYWJjZGVmLgorICAgIC8vIFByaW50aW5n
IHcncyBpbnRlZ3JhbCBwYXJ0IGlzIGVhc3kgKHNpbXBseSBwcmludCAweDEyMzQgaW4gZGVjaW1h
bCkuCisgICAgLy8gSW4gb3JkZXIgdG8gcHJpbnQgaXRzIGZyYWN0aW9uIHdlIHJlcGVhdGVkbHkg
bXVsdGlwbHkgdGhlIGZyYWN0aW9uIGJ5IDEwIGFuZAorICAgIC8vIGdldCBlYWNoIGRpZ2l0LiBF
eGFtcGxlIHRoZSBmaXJzdCBkaWdpdCBhZnRlciB0aGUgcG9pbnQgd291bGQgYmUgY29tcHV0ZWQg
YnkKKyAgICAvLyAgICgweDU2Nzg5MGFiY2RlZiAqIDEwKSA+PiA0OC4gLT4gMworICAgIC8vIFRo
ZSB3aG9sZSB0aGluZyBiZWNvbWVzIHNsaWdodGx5IG1vcmUgY29tcGxpY2F0ZWQgYmVjYXVzZSB3
ZSB3YW50IHRvIHN0b3AKKyAgICAvLyBvbmNlIHdlIGhhdmUgZW5vdWdoIGRpZ2l0cy4gVGhhdCBp
cywgb25jZSB0aGUgZGlnaXRzIGluc2lkZSB0aGUgYnVmZmVyCisgICAgLy8gcmVwcmVzZW50ICd3
JyB3ZSBjYW4gc3RvcC4gRXZlcnl0aGluZyBpbnNpZGUgdGhlIGludGVydmFsIGxvdyAtIGhpZ2gK
KyAgICAvLyByZXByZXNlbnRzIHcuIEhvd2V2ZXIgd2UgaGF2ZSB0byBwYXkgYXR0ZW50aW9uIHRv
IGxvdywgaGlnaCBhbmQgdydzCisgICAgLy8gaW1wcmVjaXNpb24uCisgICAgc3RhdGljIGJvb2wg
RGlnaXRHZW4oRGl5RnAgbG93LAorICAgICAgICAgICAgICAgICAgICAgICAgIERpeUZwIHcsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgRGl5RnAgaGlnaCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCog
bGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCoga2FwcGEpIHsKKyAgICAgICAg
QVNTRVJUKGxvdy5lKCkgPT0gdy5lKCkgJiYgdy5lKCkgPT0gaGlnaC5lKCkpOworICAgICAgICBB
U1NFUlQobG93LmYoKSArIDEgPD0gaGlnaC5mKCkgLSAxKTsKKyAgICAgICAgQVNTRVJUKGtNaW5p
bWFsVGFyZ2V0RXhwb25lbnQgPD0gdy5lKCkgJiYgdy5lKCkgPD0ga01heGltYWxUYXJnZXRFeHBv
bmVudCk7CisgICAgICAgIC8vIGxvdywgdyBhbmQgaGlnaCBhcmUgaW1wcmVjaXNlLCBidXQgYnkg
bGVzcyB0aGFuIG9uZSB1bHAgKHVuaXQgaW4gdGhlIGxhc3QKKyAgICAgICAgLy8gcGxhY2UpLgor
ICAgICAgICAvLyBJZiB3ZSByZW1vdmUgKHJlc3AuIGFkZCkgMSB1bHAgZnJvbSBsb3cgKHJlc3Au
IGhpZ2gpIHdlIGFyZSBjZXJ0YWluIHRoYXQKKyAgICAgICAgLy8gdGhlIG5ldyBudW1iZXJzIGFy
ZSBvdXRzaWRlIG9mIHRoZSBpbnRlcnZhbCB3ZSB3YW50IHRoZSBmaW5hbAorICAgICAgICAvLyBy
ZXByZXNlbnRhdGlvbiB0byBsaWUgaW4uCisgICAgICAgIC8vIEludmVyc2VseSBhZGRpbmcgKHJl
c3AuIHJlbW92aW5nKSAxIHVscCBmcm9tIGxvdyAocmVzcC4gaGlnaCkgd291bGQgeWllbGQKKyAg
ICAgICAgLy8gbnVtYmVycyB0aGF0IGFyZSBjZXJ0YWluIHRvIGxpZSBpbiB0aGUgaW50ZXJ2YWwu
IFdlIHdpbGwgdXNlIHRoaXMgZmFjdAorICAgICAgICAvLyBsYXRlciBvbi4KKyAgICAgICAgLy8g
V2Ugd2lsbCBub3cgc3RhcnQgYnkgZ2VuZXJhdGluZyB0aGUgZGlnaXRzIHdpdGhpbiB0aGUgdW5j
ZXJ0YWluCisgICAgICAgIC8vIGludGVydmFsLiBMYXRlciB3ZSB3aWxsIHdlZWQgb3V0IHJlcHJl
c2VudGF0aW9ucyB0aGF0IGxpZSBvdXRzaWRlIHRoZSBzYWZlCisgICAgICAgIC8vIGludGVydmFs
IGFuZCB0aHVzIF9taWdodF8gbGllIG91dHNpZGUgdGhlIGNvcnJlY3QgaW50ZXJ2YWwuCisgICAg
ICAgIHVpbnQ2NF90IHVuaXQgPSAxOworICAgICAgICBEaXlGcCB0b29fbG93ID0gRGl5RnAobG93
LmYoKSAtIHVuaXQsIGxvdy5lKCkpOworICAgICAgICBEaXlGcCB0b29faGlnaCA9IERpeUZwKGhp
Z2guZigpICsgdW5pdCwgaGlnaC5lKCkpOworICAgICAgICAvLyB0b29fbG93IGFuZCB0b29faGln
aCBhcmUgZ3VhcmFudGVlZCB0byBsaWUgb3V0c2lkZSB0aGUgaW50ZXJ2YWwgd2Ugd2FudCB0aGUK
KyAgICAgICAgLy8gZ2VuZXJhdGVkIG51bWJlciBpbi4KKyAgICAgICAgRGl5RnAgdW5zYWZlX2lu
dGVydmFsID0gRGl5RnA6Ok1pbnVzKHRvb19oaWdoLCB0b29fbG93KTsKKyAgICAgICAgLy8gV2Ug
bm93IGN1dCB0aGUgaW5wdXQgbnVtYmVyIGludG8gdHdvIHBhcnRzOiB0aGUgaW50ZWdyYWwgZGln
aXRzIGFuZCB0aGUKKyAgICAgICAgLy8gZnJhY3Rpb25hbHMuIFdlIHdpbGwgbm90IHdyaXRlIGFu
eSBkZWNpbWFsIHNlcGFyYXRvciB0aG91Z2gsIGJ1dCBhZGFwdAorICAgICAgICAvLyBrYXBwYSBp
bnN0ZWFkLgorICAgICAgICAvLyBSZW1pbmRlcjogd2UgYXJlIGN1cnJlbnRseSBjb21wdXRpbmcg
dGhlIGRpZ2l0cyAoc3RvcmVkIGluc2lkZSB0aGUgYnVmZmVyKQorICAgICAgICAvLyBzdWNoIHRo
YXQ6ICAgdG9vX2xvdyA8IGJ1ZmZlciAqIDEwXmthcHBhIDwgdG9vX2hpZ2gKKyAgICAgICAgLy8g
V2UgdXNlIHRvb19oaWdoIGZvciB0aGUgZGlnaXRfZ2VuZXJhdGlvbiBhbmQgc3RvcCBhcyBzb29u
IGFzIHBvc3NpYmxlLgorICAgICAgICAvLyBJZiB3ZSBzdG9wIGVhcmx5IHdlIGVmZmVjdGl2ZWx5
IHJvdW5kIGRvd24uCisgICAgICAgIERpeUZwIG9uZSA9IERpeUZwKHN0YXRpY19jYXN0PHVpbnQ2
NF90PigxKSA8PCAtdy5lKCksIHcuZSgpKTsKKyAgICAgICAgLy8gRGl2aXNpb24gYnkgb25lIGlz
IGEgc2hpZnQuCisgICAgICAgIHVpbnQzMl90IGludGVncmFscyA9IHN0YXRpY19jYXN0PHVpbnQz
Ml90Pih0b29faGlnaC5mKCkgPj4gLW9uZS5lKCkpOworICAgICAgICAvLyBNb2R1bG8gYnkgb25l
IGlzIGFuIGFuZC4KKyAgICAgICAgdWludDY0X3QgZnJhY3Rpb25hbHMgPSB0b29faGlnaC5mKCkg
JiAob25lLmYoKSAtIDEpOworICAgICAgICB1aW50MzJfdCBkaXZpc29yOworICAgICAgICBpbnQg
ZGl2aXNvcl9leHBvbmVudDsKKyAgICAgICAgQmlnZ2VzdFBvd2VyVGVuKGludGVncmFscywgRGl5
RnA6OmtTaWduaWZpY2FuZFNpemUgLSAoLW9uZS5lKCkpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgJmRpdmlzb3IsICZkaXZpc29yX2V4cG9uZW50KTsKKyAgICAgICAgKmthcHBhID0gZGl2aXNv
cl9leHBvbmVudCArIDE7CisgICAgICAgICpsZW5ndGggPSAwOworICAgICAgICAvLyBMb29wIGlu
dmFyaWFudDogYnVmZmVyID0gdG9vX2hpZ2ggLyAxMF5rYXBwYSAgKGludGVnZXIgZGl2aXNpb24p
CisgICAgICAgIC8vIFRoZSBpbnZhcmlhbnQgaG9sZHMgZm9yIHRoZSBmaXJzdCBpdGVyYXRpb246
IGthcHBhIGhhcyBiZWVuIGluaXRpYWxpemVkCisgICAgICAgIC8vIHdpdGggdGhlIGRpdmlzb3Ig
ZXhwb25lbnQgKyAxLiBBbmQgdGhlIGRpdmlzb3IgaXMgdGhlIGJpZ2dlc3QgcG93ZXIgb2YgdGVu
CisgICAgICAgIC8vIHRoYXQgaXMgc21hbGxlciB0aGFuIGludGVncmFscy4KKyAgICAgICAgd2hp
bGUgKCprYXBwYSA+IDApIHsKKyAgICAgICAgICAgIGludCBkaWdpdCA9IGludGVncmFscyAvIGRp
dmlzb3I7CisgICAgICAgICAgICBidWZmZXJbKmxlbmd0aF0gPSAnMCcgKyBkaWdpdDsKKyAgICAg
ICAgICAgICgqbGVuZ3RoKSsrOworICAgICAgICAgICAgaW50ZWdyYWxzICU9IGRpdmlzb3I7Cisg
ICAgICAgICAgICAoKmthcHBhKS0tOworICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGthcHBhIG5v
dyBlcXVhbHMgdGhlIGV4cG9uZW50IG9mIHRoZSBkaXZpc29yIGFuZCB0aGF0IHRoZQorICAgICAg
ICAgICAgLy8gaW52YXJpYW50IHRodXMgaG9sZHMgYWdhaW4uCisgICAgICAgICAgICB1aW50NjRf
dCByZXN0ID0KKyAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1aW50NjRfdD4oaW50ZWdyYWxzKSA8
PCAtb25lLmUoKSkgKyBmcmFjdGlvbmFsczsKKyAgICAgICAgICAgIC8vIEludmFyaWFudDogdG9v
X2hpZ2ggPSBidWZmZXIgKiAxMF5rYXBwYSArIERpeUZwKHJlc3QsIG9uZS5lKCkpCisgICAgICAg
ICAgICAvLyBSZW1pbmRlcjogdW5zYWZlX2ludGVydmFsLmUoKSA9PSBvbmUuZSgpCisgICAgICAg
ICAgICBpZiAocmVzdCA8IHVuc2FmZV9pbnRlcnZhbC5mKCkpIHsKKyAgICAgICAgICAgICAgICAv
LyBSb3VuZGluZyBkb3duIChieSBub3QgZW1pdHRpbmcgdGhlIHJlbWFpbmluZyBkaWdpdHMpIHlp
ZWxkcyBhIG51bWJlcgorICAgICAgICAgICAgICAgIC8vIHRoYXQgbGllcyB3aXRoaW4gdGhlIHVu
c2FmZSBpbnRlcnZhbC4KKyAgICAgICAgICAgICAgICByZXR1cm4gUm91bmRXZWVkKGJ1ZmZlciwg
Kmxlbmd0aCwgRGl5RnA6Ok1pbnVzKHRvb19oaWdoLCB3KS5mKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNhZmVfaW50ZXJ2YWwuZigpLCByZXN0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGRpdmlzb3IpIDw8IC1v
bmUuZSgpLCB1bml0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRpdmlzb3IgLz0gMTA7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBpbnRlZ3JhbHMgaGF2ZSBiZWVu
IGdlbmVyYXRlZC4gV2UgYXJlIGF0IHRoZSBwb2ludCBvZiB0aGUgZGVjaW1hbAorICAgICAgICAv
LyBzZXBhcmF0b3IuIEluIHRoZSBmb2xsb3dpbmcgbG9vcCB3ZSBzaW1wbHkgbXVsdGlwbHkgdGhl
IHJlbWFpbmluZyBkaWdpdHMgYnkKKyAgICAgICAgLy8gMTAgYW5kIGRpdmlkZSBieSBvbmUuIFdl
IGp1c3QgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRvIG11bHRpcGx5IGFzc29jaWF0ZWQKKyAgICAg
ICAgLy8gZGF0YSAobGlrZSB0aGUgaW50ZXJ2YWwgb3IgJ3VuaXQnKSwgdG9vLgorICAgICAgICAv
LyBOb3RlIHRoYXQgdGhlIG11bHRpcGxpY2F0aW9uIGJ5IDEwIGRvZXMgbm90IG92ZXJmbG93LCBi
ZWNhdXNlIHcuZSA+PSAtNjAKKyAgICAgICAgLy8gYW5kIHRodXMgb25lLmUgPj0gLTYwLgorICAg
ICAgICBBU1NFUlQob25lLmUoKSA+PSAtNjApOworICAgICAgICBBU1NFUlQoZnJhY3Rpb25hbHMg
PCBvbmUuZigpKTsKKyAgICAgICAgQVNTRVJUKFVJTlQ2NF8yUEFSVF9DKDB4RkZGRkZGRkYsIEZG
RkZGRkZGKSAvIDEwID49IG9uZS5mKCkpOworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAg
ICAgICAgZnJhY3Rpb25hbHMgKj0gMTA7CisgICAgICAgICAgICB1bml0ICo9IDEwOworICAgICAg
ICAgICAgdW5zYWZlX2ludGVydmFsLnNldF9mKHVuc2FmZV9pbnRlcnZhbC5mKCkgKiAxMCk7Cisg
ICAgICAgICAgICAvLyBJbnRlZ2VyIGRpdmlzaW9uIGJ5IG9uZS4KKyAgICAgICAgICAgIGludCBk
aWdpdCA9IHN0YXRpY19jYXN0PGludD4oZnJhY3Rpb25hbHMgPj4gLW9uZS5lKCkpOworICAgICAg
ICAgICAgYnVmZmVyWypsZW5ndGhdID0gJzAnICsgZGlnaXQ7CisgICAgICAgICAgICAoKmxlbmd0
aCkrKzsKKyAgICAgICAgICAgIGZyYWN0aW9uYWxzICY9IG9uZS5mKCkgLSAxOyAgLy8gTW9kdWxv
IGJ5IG9uZS4KKyAgICAgICAgICAgICgqa2FwcGEpLS07CisgICAgICAgICAgICBpZiAoZnJhY3Rp
b25hbHMgPCB1bnNhZmVfaW50ZXJ2YWwuZigpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFJv
dW5kV2VlZChidWZmZXIsICpsZW5ndGgsIERpeUZwOjpNaW51cyh0b29faGlnaCwgdykuZigpICog
dW5pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2FmZV9pbnRlcnZhbC5m
KCksIGZyYWN0aW9uYWxzLCBvbmUuZigpLCB1bml0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICAKKyAgICAKKyAgICAvLyBHZW5lcmF0ZXMgKGF0IG1vc3QpIHJl
cXVlc3RlZF9kaWdpdHMgZGlnaXRzIG9mIGlucHV0IG51bWJlciB3LgorICAgIC8vIHcgaXMgYSBm
bG9hdGluZy1wb2ludCBudW1iZXIgKERpeUZwKSwgY29uc2lzdGluZyBvZiBhIHNpZ25pZmljYW5k
IGFuZCBhbgorICAgIC8vIGV4cG9uZW50LiBJdHMgZXhwb25lbnQgaXMgYm91bmRlZCBieSBrTWlu
aW1hbFRhcmdldEV4cG9uZW50IGFuZAorICAgIC8vIGtNYXhpbWFsVGFyZ2V0RXhwb25lbnQuCisg
ICAgLy8gICAgICAgSGVuY2UgLTYwIDw9IHcuZSgpIDw9IC0zMi4KKyAgICAvLworICAgIC8vIFJl
dHVybnMgZmFsc2UgaWYgaXQgZmFpbHMsIGluIHdoaWNoIGNhc2UgdGhlIGdlbmVyYXRlZCBkaWdp
dHMgaW4gdGhlIGJ1ZmZlcgorICAgIC8vIHNob3VsZCBub3QgYmUgdXNlZC4KKyAgICAvLyBQcmVj
b25kaXRpb25zOgorICAgIC8vICAqIHcgaXMgY29ycmVjdCB1cCB0byAxIHVscCAodW5pdCBpbiB0
aGUgbGFzdCBwbGFjZSkuIFRoYXQKKyAgICAvLyAgICBpcywgaXRzIGVycm9yIG11c3QgYmUgc3Ry
aWN0bHkgbGVzcyB0aGFuIGEgdW5pdCBvZiBpdHMgbGFzdCBkaWdpdC4KKyAgICAvLyAgKiBrTWlu
aW1hbFRhcmdldEV4cG9uZW50IDw9IHcuZSgpIDw9IGtNYXhpbWFsVGFyZ2V0RXhwb25lbnQKKyAg
ICAvLworICAgIC8vIFBvc3Rjb25kaXRpb25zOiByZXR1cm5zIGZhbHNlIGlmIHByb2NlZHVyZSBm
YWlscy4KKyAgICAvLyAgIG90aGVyd2lzZToKKyAgICAvLyAgICAgKiBidWZmZXIgaXMgbm90IG51
bGwtdGVybWluYXRlZCwgYnV0IGxlbmd0aCBjb250YWlucyB0aGUgbnVtYmVyIG9mCisgICAgLy8g
ICAgICAgZGlnaXRzLgorICAgIC8vICAgICAqIHRoZSByZXByZXNlbnRhdGlvbiBpbiBidWZmZXIg
aXMgdGhlIG1vc3QgcHJlY2lzZSByZXByZXNlbnRhdGlvbiBvZgorICAgIC8vICAgICAgIHJlcXVl
c3RlZF9kaWdpdHMgZGlnaXRzLgorICAgIC8vICAgICAqIGJ1ZmZlciBjb250YWlucyBhdCBtb3N0
IHJlcXVlc3RlZF9kaWdpdHMgZGlnaXRzIG9mIHcuIElmIHRoZXJlIGFyZSBsZXNzCisgICAgLy8g
ICAgICAgdGhhbiByZXF1ZXN0ZWRfZGlnaXRzIGRpZ2l0cyB0aGVuIHNvbWUgdHJhaWxpbmcgJzAn
cyBoYXZlIGJlZW4gcmVtb3ZlZC4KKyAgICAvLyAgICAgKiBrYXBwYSBpcyBzdWNoIHRoYXQKKyAg
ICAvLyAgICAgICAgICAgIHcgPSBidWZmZXIgKiAxMF5rYXBwYSArIGVwcyB3aXRoIHxlcHN8IDwg
MTBea2FwcGEgLyAyLgorICAgIC8vCisgICAgLy8gUmVtYXJrOiBUaGlzIHByb2NlZHVyZSB0YWtl
cyBpbnRvIGFjY291bnQgdGhlIGltcHJlY2lzaW9uIG9mIGl0cyBpbnB1dAorICAgIC8vICAgbnVt
YmVycy4gSWYgdGhlIHByZWNpc2lvbiBpcyBub3QgZW5vdWdoIHRvIGd1YXJhbnRlZSBhbGwgdGhl
IHBvc3Rjb25kaXRpb25zCisgICAgLy8gICB0aGVuIGZhbHNlIGlzIHJldHVybmVkLiBUaGlzIHVz
dWFsbHkgaGFwcGVucyByYXJlbHksIGJ1dCB0aGUgZmFpbHVyZS1yYXRlCisgICAgLy8gICBpbmNy
ZWFzZXMgd2l0aCBoaWdoZXIgcmVxdWVzdGVkX2RpZ2l0cy4KKyAgICBzdGF0aWMgYm9vbCBEaWdp
dEdlbkNvdW50ZWQoRGl5RnAgdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IHJlcXVlc3RlZF9kaWdpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rv
cjxjaGFyPiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogbGVu
Z3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGthcHBhKSB7CisgICAg
ICAgIEFTU0VSVChrTWluaW1hbFRhcmdldEV4cG9uZW50IDw9IHcuZSgpICYmIHcuZSgpIDw9IGtN
YXhpbWFsVGFyZ2V0RXhwb25lbnQpOworICAgICAgICBBU1NFUlQoa01pbmltYWxUYXJnZXRFeHBv
bmVudCA+PSAtNjApOworICAgICAgICBBU1NFUlQoa01heGltYWxUYXJnZXRFeHBvbmVudCA8PSAt
MzIpOworICAgICAgICAvLyB3IGlzIGFzc3VtZWQgdG8gaGF2ZSBhbiBlcnJvciBsZXNzIHRoYW4g
MSB1bml0LiBXaGVuZXZlciB3IGlzIHNjYWxlZCB3ZQorICAgICAgICAvLyBhbHNvIHNjYWxlIGl0
cyBlcnJvci4KKyAgICAgICAgdWludDY0X3Qgd19lcnJvciA9IDE7CisgICAgICAgIC8vIFdlIGN1
dCB0aGUgaW5wdXQgbnVtYmVyIGludG8gdHdvIHBhcnRzOiB0aGUgaW50ZWdyYWwgZGlnaXRzIGFu
ZCB0aGUKKyAgICAgICAgLy8gZnJhY3Rpb25hbCBkaWdpdHMuIFdlIGRvbid0IGVtaXQgYW55IGRl
Y2ltYWwgc2VwYXJhdG9yLCBidXQgYWRhcHQga2FwcGEKKyAgICAgICAgLy8gaW5zdGVhZC4gRXhh
bXBsZTogaW5zdGVhZCBvZiB3cml0aW5nICIxLjIiIHdlIHB1dCAiMTIiIGludG8gdGhlIGJ1ZmZl
ciBhbmQKKyAgICAgICAgLy8gaW5jcmVhc2Uga2FwcGEgYnkgMS4KKyAgICAgICAgRGl5RnAgb25l
ID0gRGl5RnAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDEpIDw8IC13LmUoKSwgdy5lKCkpOworICAg
ICAgICAvLyBEaXZpc2lvbiBieSBvbmUgaXMgYSBzaGlmdC4KKyAgICAgICAgdWludDMyX3QgaW50
ZWdyYWxzID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHcuZigpID4+IC1vbmUuZSgpKTsKKyAgICAg
ICAgLy8gTW9kdWxvIGJ5IG9uZSBpcyBhbiBhbmQuCisgICAgICAgIHVpbnQ2NF90IGZyYWN0aW9u
YWxzID0gdy5mKCkgJiAob25lLmYoKSAtIDEpOworICAgICAgICB1aW50MzJfdCBkaXZpc29yOwor
ICAgICAgICBpbnQgZGl2aXNvcl9leHBvbmVudDsKKyAgICAgICAgQmlnZ2VzdFBvd2VyVGVuKGlu
dGVncmFscywgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUgLSAoLW9uZS5lKCkpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgJmRpdmlzb3IsICZkaXZpc29yX2V4cG9uZW50KTsKKyAgICAgICAgKmth
cHBhID0gZGl2aXNvcl9leHBvbmVudCArIDE7CisgICAgICAgICpsZW5ndGggPSAwOworICAgICAg
ICAKKyAgICAgICAgLy8gTG9vcCBpbnZhcmlhbnQ6IGJ1ZmZlciA9IHcgLyAxMF5rYXBwYSAgKGlu
dGVnZXIgZGl2aXNpb24pCisgICAgICAgIC8vIFRoZSBpbnZhcmlhbnQgaG9sZHMgZm9yIHRoZSBm
aXJzdCBpdGVyYXRpb246IGthcHBhIGhhcyBiZWVuIGluaXRpYWxpemVkCisgICAgICAgIC8vIHdp
dGggdGhlIGRpdmlzb3IgZXhwb25lbnQgKyAxLiBBbmQgdGhlIGRpdmlzb3IgaXMgdGhlIGJpZ2dl
c3QgcG93ZXIgb2YgdGVuCisgICAgICAgIC8vIHRoYXQgaXMgc21hbGxlciB0aGFuICdpbnRlZ3Jh
bHMnLgorICAgICAgICB3aGlsZSAoKmthcHBhID4gMCkgeworICAgICAgICAgICAgaW50IGRpZ2l0
ID0gaW50ZWdyYWxzIC8gZGl2aXNvcjsKKyAgICAgICAgICAgIGJ1ZmZlclsqbGVuZ3RoXSA9ICcw
JyArIGRpZ2l0OworICAgICAgICAgICAgKCpsZW5ndGgpKys7CisgICAgICAgICAgICByZXF1ZXN0
ZWRfZGlnaXRzLS07CisgICAgICAgICAgICBpbnRlZ3JhbHMgJT0gZGl2aXNvcjsKKyAgICAgICAg
ICAgICgqa2FwcGEpLS07CisgICAgICAgICAgICAvLyBOb3RlIHRoYXQga2FwcGEgbm93IGVxdWFs
cyB0aGUgZXhwb25lbnQgb2YgdGhlIGRpdmlzb3IgYW5kIHRoYXQgdGhlCisgICAgICAgICAgICAv
LyBpbnZhcmlhbnQgdGh1cyBob2xkcyBhZ2Fpbi4KKyAgICAgICAgICAgIGlmIChyZXF1ZXN0ZWRf
ZGlnaXRzID09IDApIGJyZWFrOworICAgICAgICAgICAgZGl2aXNvciAvPSAxMDsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgaWYgKHJlcXVlc3RlZF9kaWdpdHMgPT0gMCkgeworICAgICAg
ICAgICAgdWludDY0X3QgcmVzdCA9CisgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KGludGVncmFscykgPDwgLW9uZS5lKCkpICsgZnJhY3Rpb25hbHM7CisgICAgICAgICAgICByZXR1
cm4gUm91bmRXZWVkQ291bnRlZChidWZmZXIsICpsZW5ndGgsIHJlc3QsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50NjRfdD4oZGl2aXNvcikgPDwg
LW9uZS5lKCksIHdfZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBr
YXBwYSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBpbnRlZ3JhbHMgaGF2
ZSBiZWVuIGdlbmVyYXRlZC4gV2UgYXJlIGF0IHRoZSBwb2ludCBvZiB0aGUgZGVjaW1hbAorICAg
ICAgICAvLyBzZXBhcmF0b3IuIEluIHRoZSBmb2xsb3dpbmcgbG9vcCB3ZSBzaW1wbHkgbXVsdGlw
bHkgdGhlIHJlbWFpbmluZyBkaWdpdHMgYnkKKyAgICAgICAgLy8gMTAgYW5kIGRpdmlkZSBieSBv
bmUuIFdlIGp1c3QgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRvIG11bHRpcGx5IGFzc29jaWF0ZWQK
KyAgICAgICAgLy8gZGF0YSAodGhlICd1bml0JyksIHRvby4KKyAgICAgICAgLy8gTm90ZSB0aGF0
IHRoZSBtdWx0aXBsaWNhdGlvbiBieSAxMCBkb2VzIG5vdCBvdmVyZmxvdywgYmVjYXVzZSB3LmUg
Pj0gLTYwCisgICAgICAgIC8vIGFuZCB0aHVzIG9uZS5lID49IC02MC4KKyAgICAgICAgQVNTRVJU
KG9uZS5lKCkgPj0gLTYwKTsKKyAgICAgICAgQVNTRVJUKGZyYWN0aW9uYWxzIDwgb25lLmYoKSk7
CisgICAgICAgIEFTU0VSVChVSU5UNjRfMlBBUlRfQygweEZGRkZGRkZGLCBGRkZGRkZGRikgLyAx
MCA+PSBvbmUuZigpKTsKKyAgICAgICAgd2hpbGUgKHJlcXVlc3RlZF9kaWdpdHMgPiAwICYmIGZy
YWN0aW9uYWxzID4gd19lcnJvcikgeworICAgICAgICAgICAgZnJhY3Rpb25hbHMgKj0gMTA7Cisg
ICAgICAgICAgICB3X2Vycm9yICo9IDEwOworICAgICAgICAgICAgLy8gSW50ZWdlciBkaXZpc2lv
biBieSBvbmUuCisgICAgICAgICAgICBpbnQgZGlnaXQgPSBzdGF0aWNfY2FzdDxpbnQ+KGZyYWN0
aW9uYWxzID4+IC1vbmUuZSgpKTsKKyAgICAgICAgICAgIGJ1ZmZlclsqbGVuZ3RoXSA9ICcwJyAr
IGRpZ2l0OworICAgICAgICAgICAgKCpsZW5ndGgpKys7CisgICAgICAgICAgICByZXF1ZXN0ZWRf
ZGlnaXRzLS07CisgICAgICAgICAgICBmcmFjdGlvbmFscyAmPSBvbmUuZigpIC0gMTsgIC8vIE1v
ZHVsbyBieSBvbmUuCisgICAgICAgICAgICAoKmthcHBhKS0tOworICAgICAgICB9CisgICAgICAg
IGlmIChyZXF1ZXN0ZWRfZGlnaXRzICE9IDApIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJu
IFJvdW5kV2VlZENvdW50ZWQoYnVmZmVyLCAqbGVuZ3RoLCBmcmFjdGlvbmFscywgb25lLmYoKSwg
d19lcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FwcGEpOworICAgIH0K
KyAgICAKKyAgICAKKyAgICAvLyBQcm92aWRlcyBhIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2Yg
di4KKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgaXQgc3VjY2VlZHMsIG90aGVyd2lzZSB0aGUgcmVz
dWx0IGNhbm5vdCBiZSB0cnVzdGVkLgorICAgIC8vIFRoZXJlIHdpbGwgYmUgKmxlbmd0aCBkaWdp
dHMgaW5zaWRlIHRoZSBidWZmZXIgKG5vdCBudWxsLXRlcm1pbmF0ZWQpLgorICAgIC8vIElmIHRo
ZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgdGhlbgorICAgIC8vICAgICAgICB2ID09IChkb3VibGUp
IChidWZmZXIgKiAxMF5kZWNpbWFsX2V4cG9uZW50KS4KKyAgICAvLyBUaGUgZGlnaXRzIGluIHRo
ZSBidWZmZXIgYXJlIHRoZSBzaG9ydGVzdCByZXByZXNlbnRhdGlvbiBwb3NzaWJsZTogbm8KKyAg
ICAvLyAwLjA5OTk5OTk5OTk5OTk5OTk5IGluc3RlYWQgb2YgMC4xLiBUaGUgc2hvcnRlciByZXBy
ZXNlbnRhdGlvbiB3aWxsIGV2ZW4gYmUKKyAgICAvLyBjaG9zZW4gZXZlbiBpZiB0aGUgbG9uZ2Vy
IG9uZSB3b3VsZCBiZSBjbG9zZXIgdG8gdi4KKyAgICAvLyBUaGUgbGFzdCBkaWdpdCB3aWxsIGJl
IGNsb3Nlc3QgdG8gdGhlIGFjdHVhbCB2LiBUaGF0IGlzLCBldmVuIGlmIHNldmVyYWwKKyAgICAv
LyBkaWdpdHMgbWlnaHQgY29ycmVjdGx5IHlpZWxkICd2JyB3aGVuIHJlYWQgYWdhaW4sIHRoZSBj
bG9zZXN0IHdpbGwgYmUKKyAgICAvLyBjb21wdXRlZC4KKyAgICBzdGF0aWMgYm9vbCBHcmlzdTMo
ZG91YmxlIHYsCisgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgIGludCogbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAg
ICBpbnQqIGRlY2ltYWxfZXhwb25lbnQpIHsKKyAgICAgICAgRGl5RnAgdyA9IERvdWJsZSh2KS5B
c05vcm1hbGl6ZWREaXlGcCgpOworICAgICAgICAvLyBib3VuZGFyeV9taW51cyBhbmQgYm91bmRh
cnlfcGx1cyBhcmUgdGhlIGJvdW5kYXJpZXMgYmV0d2VlbiB2IGFuZCBpdHMKKyAgICAgICAgLy8g
Y2xvc2VzdCBmbG9hdGluZy1wb2ludCBuZWlnaGJvcnMuIEFueSBudW1iZXIgc3RyaWN0bHkgYmV0
d2VlbgorICAgICAgICAvLyBib3VuZGFyeV9taW51cyBhbmQgYm91bmRhcnlfcGx1cyB3aWxsIHJv
dW5kIHRvIHYgd2hlbiBjb252ZXJ0IHRvIGEgZG91YmxlLgorICAgICAgICAvLyBHcmlzdTMgd2ls
bCBuZXZlciBvdXRwdXQgcmVwcmVzZW50YXRpb25zIHRoYXQgbGllIGV4YWN0bHkgb24gYSBib3Vu
ZGFyeS4KKyAgICAgICAgRGl5RnAgYm91bmRhcnlfbWludXMsIGJvdW5kYXJ5X3BsdXM7CisgICAg
ICAgIERvdWJsZSh2KS5Ob3JtYWxpemVkQm91bmRhcmllcygmYm91bmRhcnlfbWludXMsICZib3Vu
ZGFyeV9wbHVzKTsKKyAgICAgICAgQVNTRVJUKGJvdW5kYXJ5X3BsdXMuZSgpID09IHcuZSgpKTsK
KyAgICAgICAgRGl5RnAgdGVuX21rOyAgLy8gQ2FjaGVkIHBvd2VyIG9mIHRlbjogMTBeLWsKKyAg
ICAgICAgaW50IG1rOyAgICAgICAgLy8gLWsKKyAgICAgICAgaW50IHRlbl9ta19taW5pbWFsX2Jp
bmFyeV9leHBvbmVudCA9CisgICAgICAgIGtNaW5pbWFsVGFyZ2V0RXhwb25lbnQgLSAody5lKCkg
KyBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSk7CisgICAgICAgIGludCB0ZW5fbWtfbWF4aW1hbF9i
aW5hcnlfZXhwb25lbnQgPQorICAgICAgICBrTWF4aW1hbFRhcmdldEV4cG9uZW50IC0gKHcuZSgp
ICsgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUpOworICAgICAgICBQb3dlcnNPZlRlbkNhY2hlOjpH
ZXRDYWNoZWRQb3dlckZvckJpbmFyeUV4cG9uZW50UmFuZ2UoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW5fbWtfbWluaW1h
bF9iaW5hcnlfZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW5fbWtfbWF4aW1hbF9iaW5hcnlfZXhwb25lbnQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmdGVuX21rLCAmbWspOworICAgICAgICBBU1NFUlQoKGtNaW5pbWFsVGFyZ2V0RXhw
b25lbnQgPD0gdy5lKCkgKyB0ZW5fbWsuZSgpICsKKyAgICAgICAgICAgICAgICBEaXlGcDo6a1Np
Z25pZmljYW5kU2l6ZSkgJiYKKyAgICAgICAgICAgICAgIChrTWF4aW1hbFRhcmdldEV4cG9uZW50
ID49IHcuZSgpICsgdGVuX21rLmUoKSArCisgICAgICAgICAgICAgICAgRGl5RnA6OmtTaWduaWZp
Y2FuZFNpemUpKTsKKyAgICAgICAgLy8gTm90ZSB0aGF0IHRlbl9tayBpcyBvbmx5IGFuIGFwcHJv
eGltYXRpb24gb2YgMTBeLWsuIEEgRGl5RnAgb25seSBjb250YWlucyBhCisgICAgICAgIC8vIDY0
IGJpdCBzaWduaWZpY2FuZCBhbmQgdGVuX21rIGlzIHRodXMgb25seSBwcmVjaXNlIHVwIHRvIDY0
IGJpdHMuCisgICAgICAgIAorICAgICAgICAvLyBUaGUgRGl5RnA6OlRpbWVzIHByb2NlZHVyZSBy
b3VuZHMgaXRzIHJlc3VsdCwgYW5kIHRlbl9tayBpcyBhcHByb3hpbWF0ZWQKKyAgICAgICAgLy8g
dG9vLiBUaGUgdmFyaWFibGUgc2NhbGVkX3cgKGFzIHdlbGwgYXMgc2NhbGVkX2JvdW5kYXJ5X21p
bnVzL3BsdXMpIGFyZSBub3cKKyAgICAgICAgLy8gb2ZmIGJ5IGEgc21hbGwgYW1vdW50LgorICAg
ICAgICAvLyBJbiBmYWN0OiBzY2FsZWRfdyAtIHcqMTBeayA8IDF1bHAgKHVuaXQgaW4gdGhlIGxh
c3QgcGxhY2UpIG9mIHNjYWxlZF93LgorICAgICAgICAvLyBJbiBvdGhlciB3b3JkczogbGV0IGYg
PSBzY2FsZWRfdy5mKCkgYW5kIGUgPSBzY2FsZWRfdy5lKCksIHRoZW4KKyAgICAgICAgLy8gICAg
ICAgICAgIChmLTEpICogMl5lIDwgdyoxMF5rIDwgKGYrMSkgKiAyXmUKKyAgICAgICAgRGl5RnAg
c2NhbGVkX3cgPSBEaXlGcDo6VGltZXModywgdGVuX21rKTsKKyAgICAgICAgQVNTRVJUKHNjYWxl
ZF93LmUoKSA9PQorICAgICAgICAgICAgICAgYm91bmRhcnlfcGx1cy5lKCkgKyB0ZW5fbWsuZSgp
ICsgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUpOworICAgICAgICAvLyBJbiB0aGVvcnkgaXQgd291
bGQgYmUgcG9zc2libGUgdG8gYXZvaWQgc29tZSByZWNvbXB1dGF0aW9ucyBieSBjb21wdXRpbmcK
KyAgICAgICAgLy8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB3IGFuZCBib3VuZGFyeV9taW51cy9w
bHVzIChhIHBvd2VyIG9mIDIpIGFuZCB0bworICAgICAgICAvLyBjb21wdXRlIHNjYWxlZF9ib3Vu
ZGFyeV9taW51cy9wbHVzIGJ5IHN1YnRyYWN0aW5nL2FkZGluZyBmcm9tCisgICAgICAgIC8vIHNj
YWxlZF93LiBIb3dldmVyIHRoZSBjb2RlIGJlY29tZXMgbXVjaCBsZXNzIHJlYWRhYmxlIGFuZCB0
aGUgc3BlZWQKKyAgICAgICAgLy8gZW5oYW5jZW1lbnRzIGFyZSBub3QgdGVycmlmZmljLgorICAg
ICAgICBEaXlGcCBzY2FsZWRfYm91bmRhcnlfbWludXMgPSBEaXlGcDo6VGltZXMoYm91bmRhcnlf
bWludXMsIHRlbl9tayk7CisgICAgICAgIERpeUZwIHNjYWxlZF9ib3VuZGFyeV9wbHVzICA9IERp
eUZwOjpUaW1lcyhib3VuZGFyeV9wbHVzLCAgdGVuX21rKTsKKyAgICAgICAgCisgICAgICAgIC8v
IERpZ2l0R2VuIHdpbGwgZ2VuZXJhdGUgdGhlIGRpZ2l0cyBvZiBzY2FsZWRfdy4gVGhlcmVmb3Jl
IHdlIGhhdmUKKyAgICAgICAgLy8gdiA9PSAoZG91YmxlKSAoc2NhbGVkX3cgKiAxMF4tbWspLgor
ICAgICAgICAvLyBTZXQgZGVjaW1hbF9leHBvbmVudCA9PSAtbWsgYW5kIHBhc3MgaXQgdG8gRGln
aXRHZW4uIElmIHNjYWxlZF93IGlzIG5vdCBhbgorICAgICAgICAvLyBpbnRlZ2VyIHRoYW4gaXQg
d2lsbCBiZSB1cGRhdGVkLiBGb3IgaW5zdGFuY2UgaWYgc2NhbGVkX3cgPT0gMS4yMyB0aGVuCisg
ICAgICAgIC8vIHRoZSBidWZmZXIgd2lsbCBiZSBmaWxsZWQgd2l0aCAiMTIzIiB1bmQgdGhlIGRl
Y2ltYWxfZXhwb25lbnQgd2lsbCBiZQorICAgICAgICAvLyBkZWNyZWFzZWQgYnkgMi4KKyAgICAg
ICAgaW50IGthcHBhOworICAgICAgICBib29sIHJlc3VsdCA9IERpZ2l0R2VuKHNjYWxlZF9ib3Vu
ZGFyeV9taW51cywgc2NhbGVkX3csIHNjYWxlZF9ib3VuZGFyeV9wbHVzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgbGVuZ3RoLCAma2FwcGEpOworICAgICAgICAqZGVj
aW1hbF9leHBvbmVudCA9IC1tayArIGthcHBhOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKyAgICAKKyAgICAKKyAgICAvLyBUaGUgImNvdW50ZWQiIHZlcnNpb24gb2YgZ3Jpc3UzIChz
ZWUgYWJvdmUpIG9ubHkgZ2VuZXJhdGVzIHJlcXVlc3RlZF9kaWdpdHMKKyAgICAvLyBudW1iZXIg
b2YgZGlnaXRzLiBUaGlzIHZlcnNpb24gZG9lcyBub3QgZ2VuZXJhdGUgdGhlIHNob3J0ZXN0IHJl
cHJlc2VudGF0aW9uLAorICAgIC8vIGFuZCB3aXRoIGVub3VnaCByZXF1ZXN0ZWQgZGlnaXRzIDAu
MSB3aWxsIGF0IHNvbWUgcG9pbnQgcHJpbnQgYXMgMC45OTk5OTk5Li4uCisgICAgLy8gR3Jpc3Uz
IGlzIHRvbyBpbXByZWNpc2UgZm9yIHJlYWwgaGFsZndheSBjYXNlcyAoMS41IHdpbGwgbm90IHdv
cmspIGFuZAorICAgIC8vIHRoZXJlZm9yZSB0aGUgcm91bmRpbmcgc3RyYXRlZ3kgZm9yIGhhbGZ3
YXkgY2FzZXMgaXMgaXJyZWxldmFudC4KKyAgICBzdGF0aWMgYm9vbCBHcmlzdTNDb3VudGVkKGRv
dWJsZSB2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlcXVlc3RlZF9kaWdp
dHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBsZW5ndGgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQqIGRlY2ltYWxfZXhwb25lbnQpIHsKKyAgICAgICAgRGl5RnAg
dyA9IERvdWJsZSh2KS5Bc05vcm1hbGl6ZWREaXlGcCgpOworICAgICAgICBEaXlGcCB0ZW5fbWs7
ICAvLyBDYWNoZWQgcG93ZXIgb2YgdGVuOiAxMF4taworICAgICAgICBpbnQgbWs7ICAgICAgICAv
LyAtaworICAgICAgICBpbnQgdGVuX21rX21pbmltYWxfYmluYXJ5X2V4cG9uZW50ID0KKyAgICAg
ICAga01pbmltYWxUYXJnZXRFeHBvbmVudCAtICh3LmUoKSArIERpeUZwOjprU2lnbmlmaWNhbmRT
aXplKTsKKyAgICAgICAgaW50IHRlbl9ta19tYXhpbWFsX2JpbmFyeV9leHBvbmVudCA9CisgICAg
ICAgIGtNYXhpbWFsVGFyZ2V0RXhwb25lbnQgLSAody5lKCkgKyBEaXlGcDo6a1NpZ25pZmljYW5k
U2l6ZSk7CisgICAgICAgIFBvd2Vyc09mVGVuQ2FjaGU6OkdldENhY2hlZFBvd2VyRm9yQmluYXJ5
RXhwb25lbnRSYW5nZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRlbl9ta19taW5pbWFsX2JpbmFyeV9leHBvbmVudCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRlbl9ta19tYXhpbWFsX2JpbmFyeV9leHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0ZW5fbWssICZtayk7
CisgICAgICAgIEFTU0VSVCgoa01pbmltYWxUYXJnZXRFeHBvbmVudCA8PSB3LmUoKSArIHRlbl9t
ay5lKCkgKworICAgICAgICAgICAgICAgIERpeUZwOjprU2lnbmlmaWNhbmRTaXplKSAmJgorICAg
ICAgICAgICAgICAgKGtNYXhpbWFsVGFyZ2V0RXhwb25lbnQgPj0gdy5lKCkgKyB0ZW5fbWsuZSgp
ICsKKyAgICAgICAgICAgICAgICBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSkpOworICAgICAgICAv
LyBOb3RlIHRoYXQgdGVuX21rIGlzIG9ubHkgYW4gYXBwcm94aW1hdGlvbiBvZiAxMF4tay4gQSBE
aXlGcCBvbmx5IGNvbnRhaW5zIGEKKyAgICAgICAgLy8gNjQgYml0IHNpZ25pZmljYW5kIGFuZCB0
ZW5fbWsgaXMgdGh1cyBvbmx5IHByZWNpc2UgdXAgdG8gNjQgYml0cy4KKyAgICAgICAgCisgICAg
ICAgIC8vIFRoZSBEaXlGcDo6VGltZXMgcHJvY2VkdXJlIHJvdW5kcyBpdHMgcmVzdWx0LCBhbmQg
dGVuX21rIGlzIGFwcHJveGltYXRlZAorICAgICAgICAvLyB0b28uIFRoZSB2YXJpYWJsZSBzY2Fs
ZWRfdyAoYXMgd2VsbCBhcyBzY2FsZWRfYm91bmRhcnlfbWludXMvcGx1cykgYXJlIG5vdworICAg
ICAgICAvLyBvZmYgYnkgYSBzbWFsbCBhbW91bnQuCisgICAgICAgIC8vIEluIGZhY3Q6IHNjYWxl
ZF93IC0gdyoxMF5rIDwgMXVscCAodW5pdCBpbiB0aGUgbGFzdCBwbGFjZSkgb2Ygc2NhbGVkX3cu
CisgICAgICAgIC8vIEluIG90aGVyIHdvcmRzOiBsZXQgZiA9IHNjYWxlZF93LmYoKSBhbmQgZSA9
IHNjYWxlZF93LmUoKSwgdGhlbgorICAgICAgICAvLyAgICAgICAgICAgKGYtMSkgKiAyXmUgPCB3
KjEwXmsgPCAoZisxKSAqIDJeZQorICAgICAgICBEaXlGcCBzY2FsZWRfdyA9IERpeUZwOjpUaW1l
cyh3LCB0ZW5fbWspOworICAgICAgICAKKyAgICAgICAgLy8gV2Ugbm93IGhhdmUgKGRvdWJsZSkg
KHNjYWxlZF93ICogMTBeLW1rKS4KKyAgICAgICAgLy8gRGlnaXRHZW4gd2lsbCBnZW5lcmF0ZSB0
aGUgZmlyc3QgcmVxdWVzdGVkX2RpZ2l0cyBkaWdpdHMgb2Ygc2NhbGVkX3cgYW5kCisgICAgICAg
IC8vIHJldHVybiB0b2dldGhlciB3aXRoIGEga2FwcGEgc3VjaCB0aGF0IHNjYWxlZF93IH49IGJ1
ZmZlciAqIDEwXmthcHBhLiAoSXQKKyAgICAgICAgLy8gd2lsbCBub3QgYWx3YXlzIGJlIGV4YWN0
bHkgdGhlIHNhbWUgc2luY2UgRGlnaXRHZW5Db3VudGVkIG9ubHkgcHJvZHVjZXMgYQorICAgICAg
ICAvLyBsaW1pdGVkIG51bWJlciBvZiBkaWdpdHMuKQorICAgICAgICBpbnQga2FwcGE7CisgICAg
ICAgIGJvb2wgcmVzdWx0ID0gRGlnaXRHZW5Db3VudGVkKHNjYWxlZF93LCByZXF1ZXN0ZWRfZGln
aXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGxlbmd0
aCwgJmthcHBhKTsKKyAgICAgICAgKmRlY2ltYWxfZXhwb25lbnQgPSAtbWsgKyBrYXBwYTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgCisgICAgYm9vbCBGYXN0RHRv
YShkb3VibGUgdiwKKyAgICAgICAgICAgICAgICAgIEZhc3REdG9hTW9kZSBtb2RlLAorICAgICAg
ICAgICAgICAgICAgaW50IHJlcXVlc3RlZF9kaWdpdHMsCisgICAgICAgICAgICAgICAgICBWZWN0
b3I8Y2hhcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAgaW50KiBsZW5ndGgsCisgICAgICAg
ICAgICAgICAgICBpbnQqIGRlY2ltYWxfcG9pbnQpIHsKKyAgICAgICAgQVNTRVJUKHYgPiAwKTsK
KyAgICAgICAgQVNTRVJUKCFEb3VibGUodikuSXNTcGVjaWFsKCkpOworICAgICAgICAKKyAgICAg
ICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgaW50IGRlY2ltYWxfZXhwb25lbnQgPSAw
OworICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgRkFTVF9EVE9BX1NI
T1JURVNUOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IEdyaXN1Myh2LCBidWZmZXIsIGxlbmd0
aCwgJmRlY2ltYWxfZXhwb25lbnQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBGQVNUX0RUT0FfUFJFQ0lTSU9OOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IEdy
aXN1M0NvdW50ZWQodiwgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJ1ZmZlciwgbGVuZ3RoLCAmZGVjaW1hbF9leHBvbmVudCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdCkgeworICAgICAg
ICAgICAgKmRlY2ltYWxfcG9pbnQgPSAqbGVuZ3RoICsgZGVjaW1hbF9leHBvbmVudDsKKyAgICAg
ICAgICAgIGJ1ZmZlclsqbGVuZ3RoXSA9ICdcMCc7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisgICAgCit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24K
KworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL2R0b2EvZmFzdC1kdG9hLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZmFz
dC1kdG9hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uODc2YTlmMzgyNTZkMmZiMDAyM2Y4ZTA4ZGI1ODFhODkwMzhi
MjcxMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9m
YXN0LWR0b2EuaApAQCAtMCwwICsxLDg4IEBACisvLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJv
amVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8v
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
KyNpZm5kZWYgRE9VQkxFX0NPTlZFUlNJT05fRkFTVF9EVE9BX0hfCisjZGVmaW5lIERPVUJMRV9D
T05WRVJTSU9OX0ZBU1RfRFRPQV9IXworCisjaW5jbHVkZSAidXRpbHMuaCIKKworbmFtZXNwYWNl
IFdURiB7CisKK25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgZW51bSBG
YXN0RHRvYU1vZGUgeworICAgICAgICAvLyBDb21wdXRlcyB0aGUgc2hvcnRlc3QgcmVwcmVzZW50
YXRpb24gb2YgdGhlIGdpdmVuIGlucHV0LiBUaGUgcmV0dXJuZWQKKyAgICAgICAgLy8gcmVzdWx0
IHdpbGwgYmUgdGhlIG1vc3QgYWNjdXJhdGUgbnVtYmVyIG9mIHRoaXMgbGVuZ3RoLiBMb25nZXIK
KyAgICAgICAgLy8gcmVwcmVzZW50YXRpb25zIG1pZ2h0IGJlIG1vcmUgYWNjdXJhdGUuCisgICAg
ICAgIEZBU1RfRFRPQV9TSE9SVEVTVCwKKyAgICAgICAgLy8gQ29tcHV0ZXMgYSByZXByZXNlbnRh
dGlvbiB3aGVyZSB0aGUgcHJlY2lzaW9uIChudW1iZXIgb2YgZGlnaXRzKSBpcworICAgICAgICAv
LyBnaXZlbiBhcyBpbnB1dC4gVGhlIHByZWNpc2lvbiBpcyBpbmRlcGVuZGVudCBvZiB0aGUgZGVj
aW1hbCBwb2ludC4KKyAgICAgICAgRkFTVF9EVE9BX1BSRUNJU0lPTgorICAgIH07CisgICAgCisg
ICAgLy8gRmFzdER0b2Egd2lsbCBwcm9kdWNlIGF0IG1vc3Qga0Zhc3REdG9hTWF4aW1hbExlbmd0
aCBkaWdpdHMuIFRoaXMgZG9lcyBub3QKKyAgICAvLyBpbmNsdWRlIHRoZSB0ZXJtaW5hdGluZyAn
XDAnIGNoYXJhY3Rlci4KKyAgICBzdGF0aWMgY29uc3QgaW50IGtGYXN0RHRvYU1heGltYWxMZW5n
dGggPSAxNzsKKyAgICAKKyAgICAvLyBQcm92aWRlcyBhIGRlY2ltYWwgcmVwcmVzZW50YXRpb24g
b2Ygdi4KKyAgICAvLyBUaGUgcmVzdWx0IHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBidWZmZXIg
KiAxMF4ocG9pbnQgLSBsZW5ndGgpLgorICAgIC8vCisgICAgLy8gUHJlY29uZGl0aW9uOgorICAg
IC8vICAgKiB2IG11c3QgYmUgYSBzdHJpY3RseSBwb3NpdGl2ZSBmaW5pdGUgZG91YmxlLgorICAg
IC8vCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIGl0IHN1Y2NlZWRzLCBvdGhlcndpc2UgdGhlIHJl
c3VsdCBjYW4gbm90IGJlIHRydXN0ZWQuCisgICAgLy8gVGhlcmUgd2lsbCBiZSAqbGVuZ3RoIGRp
Z2l0cyBpbnNpZGUgdGhlIGJ1ZmZlciBmb2xsb3dlZCBieSBhIG51bGwgdGVybWluYXRvci4KKyAg
ICAvLyBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGFuZCBtb2RlIGVxdWFscworICAgIC8v
ICAgLSBGQVNUX0RUT0FfU0hPUlRFU1QsIHRoZW4KKyAgICAvLyAgICAgdGhlIHBhcmFtZXRlciBy
ZXF1ZXN0ZWRfZGlnaXRzIGlzIGlnbm9yZWQuCisgICAgLy8gICAgIFRoZSByZXN1bHQgc2F0aXNm
aWVzCisgICAgLy8gICAgICAgICB2ID09IChkb3VibGUpIChidWZmZXIgKiAxMF4ocG9pbnQgLSBs
ZW5ndGgpKS4KKyAgICAvLyAgICAgVGhlIGRpZ2l0cyBpbiB0aGUgYnVmZmVyIGFyZSB0aGUgc2hv
cnRlc3QgcmVwcmVzZW50YXRpb24gcG9zc2libGUuIEUuZy4KKyAgICAvLyAgICAgaWYgMC4wOTk5
OTk5OTk5OTkgYW5kIDAuMSByZXByZXNlbnQgdGhlIHNhbWUgZG91YmxlIHRoZW4gIjEiIGlzIHJl
dHVybmVkCisgICAgLy8gICAgIHdpdGggcG9pbnQgPSAwLgorICAgIC8vICAgICBUaGUgbGFzdCBk
aWdpdCB3aWxsIGJlIGNsb3Nlc3QgdG8gdGhlIGFjdHVhbCB2LiBUaGF0IGlzLCBldmVuIGlmIHNl
dmVyYWwKKyAgICAvLyAgICAgZGlnaXRzIG1pZ2h0IGNvcnJlY3RseSB5aWVsZCAndicgd2hlbiBy
ZWFkIGFnYWluLCB0aGUgYnVmZmVyIHdpbGwgY29udGFpbgorICAgIC8vICAgICB0aGUgb25lIGNs
b3Nlc3QgdG8gdi4KKyAgICAvLyAgIC0gRkFTVF9EVE9BX1BSRUNJU0lPTiwgdGhlbgorICAgIC8v
ICAgICB0aGUgYnVmZmVyIGNvbnRhaW5zIHJlcXVlc3RlZF9kaWdpdHMgZGlnaXRzLgorICAgIC8v
ICAgICB0aGUgZGlmZmVyZW5jZSB2IC0gKGJ1ZmZlciAqIDEwXihwb2ludC1sZW5ndGgpKSBpcyBj
bG9zZXN0IHRvIHplcm8gZm9yCisgICAgLy8gICAgIGFsbCBwb3NzaWJsZSByZXByZXNlbnRhdGlv
bnMgb2YgcmVxdWVzdGVkX2RpZ2l0cyBkaWdpdHMuCisgICAgLy8gICAgIElmIHRoZXJlIGFyZSB0
d28gdmFsdWVzIHRoYXQgYXJlIGVxdWFsbHkgY2xvc2UsIHRoZW4gRmFzdER0b2EgcmV0dXJucwor
ICAgIC8vICAgICBmYWxzZS4KKyAgICAvLyBGb3IgYm90aCBtb2RlcyB0aGUgYnVmZmVyIG11c3Qg
YmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIHJlc3VsdC4KKyAgICBib29sIEZhc3REdG9hKGRv
dWJsZSBkLAorICAgICAgICAgICAgICAgICAgRmFzdER0b2FNb2RlIG1vZGUsCisgICAgICAgICAg
ICAgICAgICBpbnQgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAgIFZlY3Rvcjxj
aGFyPiBidWZmZXIsCisgICAgICAgICAgICAgICAgICBpbnQqIGxlbmd0aCwKKyAgICAgICAgICAg
ICAgICAgIGludCogZGVjaW1hbF9wb2ludCk7CisgICAgCit9ICAvLyBuYW1lc3BhY2UgZG91Ymxl
X2NvbnZlcnNpb24KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAgLy8gRE9VQkxFX0NP
TlZFUlNJT05fRkFTVF9EVE9BX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL2R0b2EvZml4ZWQtZHRvYS5jYyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9m
aXhlZC1kdG9hLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRjMzkxMWVhMTQ2NmVkYTM4N2IwMTU3YzJkMjdlNTg0
NjE2OWMyMmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0
b2EvZml4ZWQtZHRvYS5jYwpAQCAtMCwwICsxLDQwOCBAQAorLy8gQ29weXJpZ2h0IDIwMTAgdGhl
IFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
Ly8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
Ky8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8v
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSAiVW51c2VkUGFyYW0uaCIKKyNp
bmNsdWRlICJmaXhlZC1kdG9hLmgiCisjaW5jbHVkZSAiZG91YmxlLmgiCisKK25hbWVzcGFjZSBX
VEYgeworCituYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIC8vIFJlcHJl
c2VudHMgYSAxMjhiaXQgdHlwZS4gVGhpcyBjbGFzcyBzaG91bGQgYmUgcmVwbGFjZWQgYnkgYSBu
YXRpdmUgdHlwZSBvbgorICAgIC8vIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgMTI4Yml0IGludGVn
ZXJzLgorICAgIGNsYXNzIFVJbnQxMjggeworICAgIHB1YmxpYzoKKyAgICAgICAgVUludDEyOCgp
IDogaGlnaF9iaXRzXygwKSwgbG93X2JpdHNfKDApIHsgfQorICAgICAgICBVSW50MTI4KHVpbnQ2
NF90IGhpZ2gsIHVpbnQ2NF90IGxvdykgOiBoaWdoX2JpdHNfKGhpZ2gpLCBsb3dfYml0c18obG93
KSB7IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgTXVsdGlwbHkodWludDMyX3QgbXVsdGlwbGlj
YW5kKSB7CisgICAgICAgICAgICB1aW50NjRfdCBhY2N1bXVsYXRvcjsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgYWNjdW11bGF0b3IgPSAobG93X2JpdHNfICYga01hc2szMikgKiBtdWx0aXBs
aWNhbmQ7CisgICAgICAgICAgICB1aW50MzJfdCBwYXJ0ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KGFjY3VtdWxhdG9yICYga01hc2szMik7CisgICAgICAgICAgICBhY2N1bXVsYXRvciA+Pj0gMzI7
CisgICAgICAgICAgICBhY2N1bXVsYXRvciA9IGFjY3VtdWxhdG9yICsgKGxvd19iaXRzXyA+PiAz
MikgKiBtdWx0aXBsaWNhbmQ7CisgICAgICAgICAgICBsb3dfYml0c18gPSAoYWNjdW11bGF0b3Ig
PDwgMzIpICsgcGFydDsKKyAgICAgICAgICAgIGFjY3VtdWxhdG9yID4+PSAzMjsKKyAgICAgICAg
ICAgIGFjY3VtdWxhdG9yID0gYWNjdW11bGF0b3IgKyAoaGlnaF9iaXRzXyAmIGtNYXNrMzIpICog
bXVsdGlwbGljYW5kOworICAgICAgICAgICAgcGFydCA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pihh
Y2N1bXVsYXRvciAmIGtNYXNrMzIpOworICAgICAgICAgICAgYWNjdW11bGF0b3IgPj49IDMyOwor
ICAgICAgICAgICAgYWNjdW11bGF0b3IgPSBhY2N1bXVsYXRvciArIChoaWdoX2JpdHNfID4+IDMy
KSAqIG11bHRpcGxpY2FuZDsKKyAgICAgICAgICAgIGhpZ2hfYml0c18gPSAoYWNjdW11bGF0b3Ig
PDwgMzIpICsgcGFydDsKKyAgICAgICAgICAgIEFTU0VSVCgoYWNjdW11bGF0b3IgPj4gMzIpID09
IDApOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIFNoaWZ0KGludCBzaGlmdF9h
bW91bnQpIHsKKyAgICAgICAgICAgIEFTU0VSVCgtNjQgPD0gc2hpZnRfYW1vdW50ICYmIHNoaWZ0
X2Ftb3VudCA8PSA2NCk7CisgICAgICAgICAgICBpZiAoc2hpZnRfYW1vdW50ID09IDApIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNoaWZ0X2Ftb3Vu
dCA9PSAtNjQpIHsKKyAgICAgICAgICAgICAgICBoaWdoX2JpdHNfID0gbG93X2JpdHNfOworICAg
ICAgICAgICAgICAgIGxvd19iaXRzXyA9IDA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNoaWZ0
X2Ftb3VudCA9PSA2NCkgeworICAgICAgICAgICAgICAgIGxvd19iaXRzXyA9IGhpZ2hfYml0c187
CisgICAgICAgICAgICAgICAgaGlnaF9iaXRzXyA9IDA7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KHNoaWZ0X2Ftb3VudCA8PSAwKSB7CisgICAgICAgICAgICAgICAgaGlnaF9iaXRzXyA8PD0gLXNo
aWZ0X2Ftb3VudDsKKyAgICAgICAgICAgICAgICBoaWdoX2JpdHNfICs9IGxvd19iaXRzXyA+PiAo
NjQgKyBzaGlmdF9hbW91bnQpOworICAgICAgICAgICAgICAgIGxvd19iaXRzXyA8PD0gLXNoaWZ0
X2Ftb3VudDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbG93X2JpdHNf
ID4+PSBzaGlmdF9hbW91bnQ7CisgICAgICAgICAgICAgICAgbG93X2JpdHNfICs9IGhpZ2hfYml0
c18gPDwgKDY0IC0gc2hpZnRfYW1vdW50KTsKKyAgICAgICAgICAgICAgICBoaWdoX2JpdHNfID4+
PSBzaGlmdF9hbW91bnQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIC8vIE1vZGlmaWVzICp0aGlzIHRvICp0aGlzIE1PRCAoMl5wb3dlcikuCisgICAgICAgIC8v
IFJldHVybnMgKnRoaXMgRElWICgyXnBvd2VyKS4KKyAgICAgICAgaW50IERpdk1vZFBvd2VyT2Yy
KGludCBwb3dlcikgeworICAgICAgICAgICAgaWYgKHBvd2VyID49IDY0KSB7CisgICAgICAgICAg
ICAgICAgaW50IHJlc3VsdCA9IHN0YXRpY19jYXN0PGludD4oaGlnaF9iaXRzXyA+PiAocG93ZXIg
LSA2NCkpOworICAgICAgICAgICAgICAgIGhpZ2hfYml0c18gLT0gc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KHJlc3VsdCkgPDwgKHBvd2VyIC0gNjQpOworICAgICAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHVpbnQ2NF90IHBhcnRf
bG93ID0gbG93X2JpdHNfID4+IHBvd2VyOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IHBhcnRf
aGlnaCA9IGhpZ2hfYml0c18gPDwgKDY0IC0gcG93ZXIpOworICAgICAgICAgICAgICAgIGludCBy
ZXN1bHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBhcnRfbG93ICsgcGFydF9oaWdoKTsKKyAgICAgICAg
ICAgICAgICBoaWdoX2JpdHNfID0gMDsKKyAgICAgICAgICAgICAgICBsb3dfYml0c18gLT0gcGFy
dF9sb3cgPDwgcG93ZXI7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBJc1plcm8oKSBjb25zdCB7
CisgICAgICAgICAgICByZXR1cm4gaGlnaF9iaXRzXyA9PSAwICYmIGxvd19iaXRzXyA9PSAwOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpbnQgQml0QXQoaW50IHBvc2l0aW9uKSB7Cisg
ICAgICAgICAgICBpZiAocG9zaXRpb24gPj0gNjQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8aW50PihoaWdoX2JpdHNfID4+IChwb3NpdGlvbiAtIDY0KSkgJiAxOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50
Pihsb3dfYml0c18gPj4gcG9zaXRpb24pICYgMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBzdGF0aWMgY29uc3QgdWludDY0X3Qga01h
c2szMiA9IDB4RkZGRkZGRkY7CisgICAgICAgIC8vIFZhbHVlID09IChoaWdoX2JpdHNfIDw8IDY0
KSArIGxvd19iaXRzXworICAgICAgICB1aW50NjRfdCBoaWdoX2JpdHNfOworICAgICAgICB1aW50
NjRfdCBsb3dfYml0c187CisgICAgfTsKKyAgICAKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgaW50
IGtEb3VibGVTaWduaWZpY2FuZFNpemUgPSA1MzsgIC8vIEluY2x1ZGVzIHRoZSBoaWRkZW4gYml0
LgorICAgIAorICAgIAorICAgIHN0YXRpYyB2b2lkIEZpbGxEaWdpdHMzMkZpeGVkTGVuZ3RoKHVp
bnQzMl90IG51bWJlciwgaW50IHJlcXVlc3RlZF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwgaW50KiBsZW5ndGgpIHsK
KyAgICAgICAgZm9yIChpbnQgaSA9IHJlcXVlc3RlZF9sZW5ndGggLSAxOyBpID49IDA7IC0taSkg
eworICAgICAgICAgICAgYnVmZmVyWygqbGVuZ3RoKSArIGldID0gJzAnICsgbnVtYmVyICUgMTA7
CisgICAgICAgICAgICBudW1iZXIgLz0gMTA7CisgICAgICAgIH0KKyAgICAgICAgKmxlbmd0aCAr
PSByZXF1ZXN0ZWRfbGVuZ3RoOworICAgIH0KKyAgICAKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBG
aWxsRGlnaXRzMzIodWludDMyX3QgbnVtYmVyLCBWZWN0b3I8Y2hhcj4gYnVmZmVyLCBpbnQqIGxl
bmd0aCkgeworICAgICAgICBpbnQgbnVtYmVyX2xlbmd0aCA9IDA7CisgICAgICAgIC8vIFdlIGZp
bGwgdGhlIGRpZ2l0cyBpbiByZXZlcnNlIG9yZGVyIGFuZCBleGNoYW5nZSB0aGVtIGFmdGVyd2Fy
ZHMuCisgICAgICAgIHdoaWxlIChudW1iZXIgIT0gMCkgeworICAgICAgICAgICAgaW50IGRpZ2l0
ID0gbnVtYmVyICUgMTA7CisgICAgICAgICAgICBudW1iZXIgLz0gMTA7CisgICAgICAgICAgICBi
dWZmZXJbKCpsZW5ndGgpICsgbnVtYmVyX2xlbmd0aF0gPSAnMCcgKyBkaWdpdDsKKyAgICAgICAg
ICAgIG51bWJlcl9sZW5ndGgrKzsKKyAgICAgICAgfQorICAgICAgICAvLyBFeGNoYW5nZSB0aGUg
ZGlnaXRzLgorICAgICAgICBpbnQgaSA9ICpsZW5ndGg7CisgICAgICAgIGludCBqID0gKmxlbmd0
aCArIG51bWJlcl9sZW5ndGggLSAxOworICAgICAgICB3aGlsZSAoaSA8IGopIHsKKyAgICAgICAg
ICAgIGNoYXIgdG1wID0gYnVmZmVyW2ldOworICAgICAgICAgICAgYnVmZmVyW2ldID0gYnVmZmVy
W2pdOworICAgICAgICAgICAgYnVmZmVyW2pdID0gdG1wOworICAgICAgICAgICAgaSsrOworICAg
ICAgICAgICAgai0tOworICAgICAgICB9CisgICAgICAgICpsZW5ndGggKz0gbnVtYmVyX2xlbmd0
aDsKKyAgICB9CisgICAgCisgICAgCisgICAgc3RhdGljIHZvaWQgRmlsbERpZ2l0czY0Rml4ZWRM
ZW5ndGgodWludDY0X3QgbnVtYmVyLCBpbnQgcmVxdWVzdGVkX2xlbmd0aCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLCBpbnQqIGxl
bmd0aCkgeworICAgICAgICBVTlVTRURfUEFSQU0ocmVxdWVzdGVkX2xlbmd0aCk7CisgICAgICAg
IGNvbnN0IHVpbnQzMl90IGtUZW43ID0gMTAwMDAwMDA7CisgICAgICAgIC8vIEZvciBlZmZpY2ll
bmN5IGN1dCB0aGUgbnVtYmVyIGludG8gMyB1aW50MzJfdCBwYXJ0cywgYW5kIHByaW50IHRob3Nl
LgorICAgICAgICB1aW50MzJfdCBwYXJ0MiA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihudW1iZXIg
JSBrVGVuNyk7CisgICAgICAgIG51bWJlciAvPSBrVGVuNzsKKyAgICAgICAgdWludDMyX3QgcGFy
dDEgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4obnVtYmVyICUga1RlbjcpOworICAgICAgICB1aW50
MzJfdCBwYXJ0MCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihudW1iZXIgLyBrVGVuNyk7CisgICAg
ICAgIAorICAgICAgICBGaWxsRGlnaXRzMzJGaXhlZExlbmd0aChwYXJ0MCwgMywgYnVmZmVyLCBs
ZW5ndGgpOworICAgICAgICBGaWxsRGlnaXRzMzJGaXhlZExlbmd0aChwYXJ0MSwgNywgYnVmZmVy
LCBsZW5ndGgpOworICAgICAgICBGaWxsRGlnaXRzMzJGaXhlZExlbmd0aChwYXJ0MiwgNywgYnVm
ZmVyLCBsZW5ndGgpOworICAgIH0KKyAgICAKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBGaWxsRGln
aXRzNjQodWludDY0X3QgbnVtYmVyLCBWZWN0b3I8Y2hhcj4gYnVmZmVyLCBpbnQqIGxlbmd0aCkg
eworICAgICAgICBjb25zdCB1aW50MzJfdCBrVGVuNyA9IDEwMDAwMDAwOworICAgICAgICAvLyBG
b3IgZWZmaWNpZW5jeSBjdXQgdGhlIG51bWJlciBpbnRvIDMgdWludDMyX3QgcGFydHMsIGFuZCBw
cmludCB0aG9zZS4KKyAgICAgICAgdWludDMyX3QgcGFydDIgPSBzdGF0aWNfY2FzdDx1aW50MzJf
dD4obnVtYmVyICUga1RlbjcpOworICAgICAgICBudW1iZXIgLz0ga1Rlbjc7CisgICAgICAgIHVp
bnQzMl90IHBhcnQxID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG51bWJlciAlIGtUZW43KTsKKyAg
ICAgICAgdWludDMyX3QgcGFydDAgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4obnVtYmVyIC8ga1Rl
bjcpOworICAgICAgICAKKyAgICAgICAgaWYgKHBhcnQwICE9IDApIHsKKyAgICAgICAgICAgIEZp
bGxEaWdpdHMzMihwYXJ0MCwgYnVmZmVyLCBsZW5ndGgpOworICAgICAgICAgICAgRmlsbERpZ2l0
czMyRml4ZWRMZW5ndGgocGFydDEsIDcsIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAgICAgIEZp
bGxEaWdpdHMzMkZpeGVkTGVuZ3RoKHBhcnQyLCA3LCBidWZmZXIsIGxlbmd0aCk7CisgICAgICAg
IH0gZWxzZSBpZiAocGFydDEgIT0gMCkgeworICAgICAgICAgICAgRmlsbERpZ2l0czMyKHBhcnQx
LCBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgICAgICBGaWxsRGlnaXRzMzJGaXhlZExlbmd0aChw
YXJ0MiwgNywgYnVmZmVyLCBsZW5ndGgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
RmlsbERpZ2l0czMyKHBhcnQyLCBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgCisgICAgc3RhdGljIHZvaWQgUm91bmRVcChWZWN0b3I8Y2hhcj4gYnVmZmVyLCBp
bnQqIGxlbmd0aCwgaW50KiBkZWNpbWFsX3BvaW50KSB7CisgICAgICAgIC8vIEFuIGVtcHR5IGJ1
ZmZlciByZXByZXNlbnRzIDAuCisgICAgICAgIGlmICgqbGVuZ3RoID09IDApIHsKKyAgICAgICAg
ICAgIGJ1ZmZlclswXSA9ICcxJzsKKyAgICAgICAgICAgICpkZWNpbWFsX3BvaW50ID0gMTsKKyAg
ICAgICAgICAgICpsZW5ndGggPSAxOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIC8vIFJvdW5kIHRoZSBsYXN0IGRpZ2l0IHVudGlsIHdlIGVpdGhlciBoYXZlIGEgZGln
aXQgdGhhdCB3YXMgbm90ICc5JyBvciB1bnRpbAorICAgICAgICAvLyB3ZSByZWFjaGVkIHRoZSBm
aXJzdCBkaWdpdC4KKyAgICAgICAgYnVmZmVyWygqbGVuZ3RoKSAtIDFdKys7CisgICAgICAgIGZv
ciAoaW50IGkgPSAoKmxlbmd0aCkgLSAxOyBpID4gMDsgLS1pKSB7CisgICAgICAgICAgICBpZiAo
YnVmZmVyW2ldICE9ICcwJyArIDEwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnVmZmVyW2ldID0gJzAnOworICAgICAgICAgICAgYnVmZmVy
W2kgLSAxXSsrOworICAgICAgICB9CisgICAgICAgIC8vIElmIHRoZSBmaXJzdCBkaWdpdCBpcyBu
b3cgJzAnICsgMTAsIHdlIHdvdWxkIG5lZWQgdG8gc2V0IGl0IHRvICcwJyBhbmQgYWRkCisgICAg
ICAgIC8vIGEgJzEnIGluIGZyb250LiBIb3dldmVyIHdlIHJlYWNoIHRoZSBmaXJzdCBkaWdpdCBv
bmx5IGlmIGFsbCBmb2xsb3dpbmcKKyAgICAgICAgLy8gZGlnaXRzIGhhZCBiZWVuICc5JyBiZWZv
cmUgcm91bmRpbmcgdXAuIE5vdyBhbGwgdHJhaWxpbmcgZGlnaXRzIGFyZSAnMCcgYW5kCisgICAg
ICAgIC8vIHdlIHNpbXBseSBzd2l0Y2ggdGhlIGZpcnN0IGRpZ2l0IHRvICcxJyBhbmQgdXBkYXRl
IHRoZSBkZWNpbWFsLXBvaW50CisgICAgICAgIC8vIChpbmRpY2F0aW5nIHRoYXQgdGhlIHBvaW50
IGlzIG5vdyBvbmUgZGlnaXQgdG8gdGhlIHJpZ2h0KS4KKyAgICAgICAgaWYgKGJ1ZmZlclswXSA9
PSAnMCcgKyAxMCkgeworICAgICAgICAgICAgYnVmZmVyWzBdID0gJzEnOworICAgICAgICAgICAg
KCpkZWNpbWFsX3BvaW50KSsrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIC8v
IFRoZSBnaXZlbiBmcmFjdGlvbmFscyBudW1iZXIgcmVwcmVzZW50cyBhIGZpeGVkLXBvaW50IG51
bWJlciB3aXRoIGJpbmFyeQorICAgIC8vIHBvaW50IGF0IGJpdCAoLWV4cG9uZW50KS4KKyAgICAv
LyBQcmVjb25kaXRpb25zOgorICAgIC8vICAgLTEyOCA8PSBleHBvbmVudCA8PSAwLgorICAgIC8v
ICAgMCA8PSBmcmFjdGlvbmFscyAqIDJeZXhwb25lbnQgPCAxCisgICAgLy8gICBUaGUgYnVmZmVy
IGhvbGRzIHRoZSByZXN1bHQuCisgICAgLy8gVGhlIGZ1bmN0aW9uIHdpbGwgcm91bmQgaXRzIHJl
c3VsdC4gRHVyaW5nIHRoZSByb3VuZGluZy1wcm9jZXNzIGRpZ2l0cyBub3QKKyAgICAvLyBnZW5l
cmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBtaWdodCBiZSB1cGRhdGVkLCBhbmQgdGhlIGRlY2ltYWwt
cG9pbnQgdmFyaWFibGUKKyAgICAvLyBtaWdodCBiZSB1cGRhdGVkLiBJZiB0aGlzIGZ1bmN0aW9u
IGdlbmVyYXRlcyB0aGUgZGlnaXRzIDk5IGFuZCB0aGUgYnVmZmVyCisgICAgLy8gYWxyZWFkeSBj
b250YWluZWQgIjE5OSIgKHRodXMgeWllbGRpbmcgYSBidWZmZXIgb2YgIjE5OTk5IikgdGhlbiBh
CisgICAgLy8gcm91bmRpbmctdXAgd2lsbCBjaGFuZ2UgdGhlIGNvbnRlbnRzIG9mIHRoZSBidWZm
ZXIgdG8gIjIwMDAwIi4KKyAgICBzdGF0aWMgdm9pZCBGaWxsRnJhY3Rpb25hbHModWludDY0X3Qg
ZnJhY3Rpb25hbHMsIGludCBleHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGZyYWN0aW9uYWxfY291bnQsIFZlY3RvcjxjaGFyPiBidWZmZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCogbGVuZ3RoLCBpbnQqIGRlY2ltYWxfcG9pbnQpIHsK
KyAgICAgICAgQVNTRVJUKC0xMjggPD0gZXhwb25lbnQgJiYgZXhwb25lbnQgPD0gMCk7CisgICAg
ICAgIC8vICdmcmFjdGlvbmFscycgaXMgYSBmaXhlZC1wb2ludCBudW1iZXIsIHdpdGggYmluYXJ5
IHBvaW50IGF0IGJpdAorICAgICAgICAvLyAoLWV4cG9uZW50KS4gSW5zaWRlIHRoZSBmdW5jdGlv
biB0aGUgbm9uLWNvbnZlcnRlZCByZW1haW5kZXIgb2YgZnJhY3Rpb25hbHMKKyAgICAgICAgLy8g
aXMgYSBmaXhlZC1wb2ludCBudW1iZXIsIHdpdGggYmluYXJ5IHBvaW50IGF0IGJpdCAncG9pbnQn
LgorICAgICAgICBpZiAoLWV4cG9uZW50IDw9IDY0KSB7CisgICAgICAgICAgICAvLyBPbmUgNjQg
Yml0IG51bWJlciBpcyBzdWZmaWNpZW50LgorICAgICAgICAgICAgQVNTRVJUKGZyYWN0aW9uYWxz
ID4+IDU2ID09IDApOworICAgICAgICAgICAgaW50IHBvaW50ID0gLWV4cG9uZW50OworICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFjdGlvbmFsX2NvdW50OyArK2kpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoZnJhY3Rpb25hbHMgPT0gMCkgYnJlYWs7CisgICAgICAgICAgICAgICAg
Ly8gSW5zdGVhZCBvZiBtdWx0aXBseWluZyBieSAxMCB3ZSBtdWx0aXBseSBieSA1IGFuZCBhZGp1
c3QgdGhlIHBvaW50CisgICAgICAgICAgICAgICAgLy8gbG9jYXRpb24uIFRoaXMgd2F5IHRoZSBm
cmFjdGlvbmFscyB2YXJpYWJsZSB3aWxsIG5vdCBvdmVyZmxvdy4KKyAgICAgICAgICAgICAgICAv
LyBJbnZhcmlhbnQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbG9vcDogZnJhY3Rpb25hbHMgPCAy
XnBvaW50LgorICAgICAgICAgICAgICAgIC8vIEluaXRpYWxseSB3ZSBoYXZlOiBwb2ludCA8PSA2
NCBhbmQgZnJhY3Rpb25hbHMgPCAyXjU2CisgICAgICAgICAgICAgICAgLy8gQWZ0ZXIgZWFjaCBp
dGVyYXRpb24gdGhlIHBvaW50IGlzIGRlY3JlbWVudGVkIGJ5IG9uZS4KKyAgICAgICAgICAgICAg
ICAvLyBOb3RlIHRoYXQgNV4zID0gMTI1IDwgMTI4ID0gMl43LgorICAgICAgICAgICAgICAgIC8v
IFRoZXJlZm9yZSB0aHJlZSBpdGVyYXRpb25zIG9mIHRoaXMgbG9vcCB3aWxsIG5vdCBvdmVyZmxv
dyBmcmFjdGlvbmFscworICAgICAgICAgICAgICAgIC8vIChldmVuIHdpdGhvdXQgdGhlIHN1YnRy
YWN0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIGxvb3AgYm9keSkuIEF0IHRoaXMKKyAgICAgICAgICAg
ICAgICAvLyB0aW1lIHBvaW50IHdpbGwgc2F0aXNmeSBwb2ludCA8PSA2MSBhbmQgdGhlcmVmb3Jl
IGZyYWN0aW9uYWxzIDwgMl5wb2ludAorICAgICAgICAgICAgICAgIC8vIGFuZCBhbnkgZnVydGhl
ciBtdWx0aXBsaWNhdGlvbiBvZiBmcmFjdGlvbmFscyBieSA1IHdpbGwgbm90IG92ZXJmbG93Lgor
ICAgICAgICAgICAgICAgIGZyYWN0aW9uYWxzICo9IDU7CisgICAgICAgICAgICAgICAgcG9pbnQt
LTsKKyAgICAgICAgICAgICAgICBpbnQgZGlnaXQgPSBzdGF0aWNfY2FzdDxpbnQ+KGZyYWN0aW9u
YWxzID4+IHBvaW50KTsKKyAgICAgICAgICAgICAgICBidWZmZXJbKmxlbmd0aF0gPSAnMCcgKyBk
aWdpdDsKKyAgICAgICAgICAgICAgICAoKmxlbmd0aCkrKzsKKyAgICAgICAgICAgICAgICBmcmFj
dGlvbmFscyAtPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oZGlnaXQpIDw8IHBvaW50OworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgLy8gSWYgdGhlIGZpcnN0IGJpdCBhZnRlciB0aGUgcG9pbnQg
aXMgc2V0IHdlIGhhdmUgdG8gcm91bmQgdXAuCisgICAgICAgICAgICBpZiAoKChmcmFjdGlvbmFs
cyA+PiAocG9pbnQgLSAxKSkgJiAxKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgUm91bmRVcChi
dWZmZXIsIGxlbmd0aCwgZGVjaW1hbF9wb2ludCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSB7ICAvLyBXZSBuZWVkIDEyOCBiaXRzLgorICAgICAgICAgICAgQVNTRVJUKDY0IDwgLWV4
cG9uZW50ICYmIC1leHBvbmVudCA8PSAxMjgpOworICAgICAgICAgICAgVUludDEyOCBmcmFjdGlv
bmFsczEyOCA9IFVJbnQxMjgoZnJhY3Rpb25hbHMsIDApOworICAgICAgICAgICAgZnJhY3Rpb25h
bHMxMjguU2hpZnQoLWV4cG9uZW50IC0gNjQpOworICAgICAgICAgICAgaW50IHBvaW50ID0gMTI4
OworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFjdGlvbmFsX2NvdW50OyArK2kp
IHsKKyAgICAgICAgICAgICAgICBpZiAoZnJhY3Rpb25hbHMxMjguSXNaZXJvKCkpIGJyZWFrOwor
ICAgICAgICAgICAgICAgIC8vIEFzIGJlZm9yZTogaW5zdGVhZCBvZiBtdWx0aXBseWluZyBieSAx
MCB3ZSBtdWx0aXBseSBieSA1IGFuZCBhZGp1c3QgdGhlCisgICAgICAgICAgICAgICAgLy8gcG9p
bnQgbG9jYXRpb24uCisgICAgICAgICAgICAgICAgLy8gVGhpcyBtdWx0aXBsaWNhdGlvbiB3aWxs
IG5vdCBvdmVyZmxvdyBmb3IgdGhlIHNhbWUgcmVhc29ucyBhcyBiZWZvcmUuCisgICAgICAgICAg
ICAgICAgZnJhY3Rpb25hbHMxMjguTXVsdGlwbHkoNSk7CisgICAgICAgICAgICAgICAgcG9pbnQt
LTsKKyAgICAgICAgICAgICAgICBpbnQgZGlnaXQgPSBmcmFjdGlvbmFsczEyOC5EaXZNb2RQb3dl
ck9mMihwb2ludCk7CisgICAgICAgICAgICAgICAgYnVmZmVyWypsZW5ndGhdID0gJzAnICsgZGln
aXQ7CisgICAgICAgICAgICAgICAgKCpsZW5ndGgpKys7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoZnJhY3Rpb25hbHMxMjguQml0QXQocG9pbnQgLSAxKSA9PSAxKSB7CisgICAgICAg
ICAgICAgICAgUm91bmRVcChidWZmZXIsIGxlbmd0aCwgZGVjaW1hbF9wb2ludCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgLy8gUmVtb3ZlcyBsZWFk
aW5nIGFuZCB0cmFpbGluZyB6ZXJvcy4KKyAgICAvLyBJZiBsZWFkaW5nIHplcm9zIGFyZSByZW1v
dmVkIHRoZW4gdGhlIGRlY2ltYWwgcG9pbnQgcG9zaXRpb24gaXMgYWRqdXN0ZWQuCisgICAgc3Rh
dGljIHZvaWQgVHJpbVplcm9zKFZlY3RvcjxjaGFyPiBidWZmZXIsIGludCogbGVuZ3RoLCBpbnQq
IGRlY2ltYWxfcG9pbnQpIHsKKyAgICAgICAgd2hpbGUgKCpsZW5ndGggPiAwICYmIGJ1ZmZlclso
Kmxlbmd0aCkgLSAxXSA9PSAnMCcpIHsKKyAgICAgICAgICAgICgqbGVuZ3RoKS0tOworICAgICAg
ICB9CisgICAgICAgIGludCBmaXJzdF9ub25femVybyA9IDA7CisgICAgICAgIHdoaWxlIChmaXJz
dF9ub25femVybyA8ICpsZW5ndGggJiYgYnVmZmVyW2ZpcnN0X25vbl96ZXJvXSA9PSAnMCcpIHsK
KyAgICAgICAgICAgIGZpcnN0X25vbl96ZXJvKys7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZp
cnN0X25vbl96ZXJvICE9IDApIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSBmaXJzdF9ub25f
emVybzsgaSA8ICpsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIGJ1ZmZlcltpIC0gZmly
c3Rfbm9uX3plcm9dID0gYnVmZmVyW2ldOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKmxl
bmd0aCAtPSBmaXJzdF9ub25femVybzsKKyAgICAgICAgICAgICpkZWNpbWFsX3BvaW50IC09IGZp
cnN0X25vbl96ZXJvOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIGJvb2wgRmFz
dEZpeGVkRHRvYShkb3VibGUgdiwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IGZyYWN0aW9u
YWxfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgIGludCogbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAg
ICBpbnQqIGRlY2ltYWxfcG9pbnQpIHsKKyAgICAgICAgY29uc3QgdWludDMyX3Qga01heFVJbnQz
MiA9IDB4RkZGRkZGRkY7CisgICAgICAgIHVpbnQ2NF90IHNpZ25pZmljYW5kID0gRG91YmxlKHYp
LlNpZ25pZmljYW5kKCk7CisgICAgICAgIGludCBleHBvbmVudCA9IERvdWJsZSh2KS5FeHBvbmVu
dCgpOworICAgICAgICAvLyB2ID0gc2lnbmlmaWNhbmQgKiAyXmV4cG9uZW50ICh3aXRoIHNpZ25p
ZmljYW5kIGEgNTNiaXQgaW50ZWdlcikuCisgICAgICAgIC8vIElmIHRoZSBleHBvbmVudCBpcyBs
YXJnZXIgdGhhbiAyMCAoaS5lLiB3ZSBtYXkgaGF2ZSBhIDczYml0IG51bWJlcikgdGhlbiB3ZQor
ICAgICAgICAvLyBkb24ndCBrbm93IGhvdyB0byBjb21wdXRlIHRoZSByZXByZXNlbnRhdGlvbi4g
Ml43MyB+PSA5LjUqMTBeMjEuCisgICAgICAgIC8vIElmIG5lY2Vzc2FyeSB0aGlzIGxpbWl0IGNv
dWxkIHByb2JhYmx5IGJlIGluY3JlYXNlZCwgYnV0IHdlIGRvbid0IG5lZWQKKyAgICAgICAgLy8g
bW9yZS4KKyAgICAgICAgaWYgKGV4cG9uZW50ID4gMjApIHJldHVybiBmYWxzZTsKKyAgICAgICAg
aWYgKGZyYWN0aW9uYWxfY291bnQgPiAyMCkgcmV0dXJuIGZhbHNlOworICAgICAgICAqbGVuZ3Ro
ID0gMDsKKyAgICAgICAgLy8gQXQgbW9zdCBrRG91YmxlU2lnbmlmaWNhbmRTaXplIGJpdHMgb2Yg
dGhlIHNpZ25pZmljYW5kIGFyZSBub24temVyby4KKyAgICAgICAgLy8gR2l2ZW4gYSA2NCBiaXQg
aW50ZWdlciB3ZSBoYXZlIDExIDBzIGZvbGxvd2VkIGJ5IDUzIHBvdGVudGlhbGx5IG5vbi16ZXJv
CisgICAgICAgIC8vIGJpdHM6ICAwLi4xMSouLjB4eHguLjUzKi4ueHgKKyAgICAgICAgaWYgKGV4
cG9uZW50ICsga0RvdWJsZVNpZ25pZmljYW5kU2l6ZSA+IDY0KSB7CisgICAgICAgICAgICAvLyBU
aGUgZXhwb25lbnQgbXVzdCBiZSA+IDExLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8v
IFdlIGtub3cgdGhhdCB2ID0gc2lnbmlmaWNhbmQgKiAyXmV4cG9uZW50LgorICAgICAgICAgICAg
Ly8gQW5kIHRoZSBleHBvbmVudCA+IDExLgorICAgICAgICAgICAgLy8gV2Ugc2ltcGxpZnkgdGhl
IHRhc2sgYnkgZGl2aWRpbmcgdiBieSAxMF4xNy4KKyAgICAgICAgICAgIC8vIFRoZSBxdW90aWVu
dCBkZWxpdmVycyB0aGUgZmlyc3QgZGlnaXRzLCBhbmQgdGhlIHJlbWFpbmRlciBmaXRzIGludG8g
YSA2NAorICAgICAgICAgICAgLy8gYml0IG51bWJlci4KKyAgICAgICAgICAgIC8vIERpdmlkaW5n
IGJ5IDEwXjE3IGlzIGVxdWl2YWxlbnQgdG8gZGl2aWRpbmcgYnkgNV4xNyoyXjE3LgorICAgICAg
ICAgICAgY29uc3QgdWludDY0X3Qga0ZpdmUxNyA9IFVJTlQ2NF8yUEFSVF9DKDB4QjEsIEEyQkMy
RUM1KTsgIC8vIDVeMTcKKyAgICAgICAgICAgIHVpbnQ2NF90IGRpdmlzb3IgPSBrRml2ZTE3Owor
ICAgICAgICAgICAgaW50IGRpdmlzb3JfcG93ZXIgPSAxNzsKKyAgICAgICAgICAgIHVpbnQ2NF90
IGRpdmlkZW5kID0gc2lnbmlmaWNhbmQ7CisgICAgICAgICAgICB1aW50MzJfdCBxdW90aWVudDsK
KyAgICAgICAgICAgIHVpbnQ2NF90IHJlbWFpbmRlcjsKKyAgICAgICAgICAgIC8vIExldCB2ID0g
ZiAqIDJeZSB3aXRoIGYgPT0gc2lnbmlmaWNhbmQgYW5kIGUgPT0gZXhwb25lbnQuCisgICAgICAg
ICAgICAvLyBUaGVuIG5lZWQgcSAocXVvdGllbnQpIGFuZCByIChyZW1haW5kZXIpIGFzIGZvbGxv
d3M6CisgICAgICAgICAgICAvLyAgIHYgICAgICAgICAgICA9IHEgKiAxMF4xNyAgICAgICArIHIK
KyAgICAgICAgICAgIC8vICAgZiAqIDJeZSAgICAgID0gcSAqIDEwXjE3ICAgICAgICsgcgorICAg
ICAgICAgICAgLy8gICBmICogMl5lICAgICAgPSBxICogNV4xNyAqIDJeMTcgKyByCisgICAgICAg
ICAgICAvLyBJZiBlID4gMTcgdGhlbgorICAgICAgICAgICAgLy8gICBmICogMl4oZS0xNykgPSBx
ICogNV4xNyAgICAgICAgKyByLzJeMTcKKyAgICAgICAgICAgIC8vIGVsc2UKKyAgICAgICAgICAg
IC8vICAgZiAgPSBxICogNV4xNyAqIDJeKDE3LWUpICsgci8yXmUKKyAgICAgICAgICAgIGlmIChl
eHBvbmVudCA+IGRpdmlzb3JfcG93ZXIpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBvbmx5IGFs
bG93IGV4cG9uZW50cyBvZiB1cCB0byAyMCBhbmQgdGhlcmVmb3JlICgxNyAtIGUpIDw9IDMKKyAg
ICAgICAgICAgICAgICBkaXZpZGVuZCA8PD0gZXhwb25lbnQgLSBkaXZpc29yX3Bvd2VyOworICAg
ICAgICAgICAgICAgIHF1b3RpZW50ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGRpdmlkZW5kIC8g
ZGl2aXNvcik7CisgICAgICAgICAgICAgICAgcmVtYWluZGVyID0gKGRpdmlkZW5kICUgZGl2aXNv
cikgPDwgZGl2aXNvcl9wb3dlcjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgZGl2aXNvciA8PD0gZGl2aXNvcl9wb3dlciAtIGV4cG9uZW50OworICAgICAgICAgICAgICAg
IHF1b3RpZW50ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGRpdmlkZW5kIC8gZGl2aXNvcik7Cisg
ICAgICAgICAgICAgICAgcmVtYWluZGVyID0gKGRpdmlkZW5kICUgZGl2aXNvcikgPDwgZXhwb25l
bnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGaWxsRGlnaXRzMzIocXVvdGllbnQsIGJ1
ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAgICAgIEZpbGxEaWdpdHM2NEZpeGVkTGVuZ3RoKHJlbWFp
bmRlciwgZGl2aXNvcl9wb3dlciwgYnVmZmVyLCBsZW5ndGgpOworICAgICAgICAgICAgKmRlY2lt
YWxfcG9pbnQgPSAqbGVuZ3RoOworICAgICAgICB9IGVsc2UgaWYgKGV4cG9uZW50ID49IDApIHsK
KyAgICAgICAgICAgIC8vIDAgPD0gZXhwb25lbnQgPD0gMTEKKyAgICAgICAgICAgIHNpZ25pZmlj
YW5kIDw8PSBleHBvbmVudDsKKyAgICAgICAgICAgIEZpbGxEaWdpdHM2NChzaWduaWZpY2FuZCwg
YnVmZmVyLCBsZW5ndGgpOworICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSAqbGVuZ3RoOwor
ICAgICAgICB9IGVsc2UgaWYgKGV4cG9uZW50ID4gLWtEb3VibGVTaWduaWZpY2FuZFNpemUpIHsK
KyAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gY3V0IHRoZSBudW1iZXIuCisgICAgICAgICAgICB1
aW50NjRfdCBpbnRlZ3JhbHMgPSBzaWduaWZpY2FuZCA+PiAtZXhwb25lbnQ7CisgICAgICAgICAg
ICB1aW50NjRfdCBmcmFjdGlvbmFscyA9IHNpZ25pZmljYW5kIC0gKGludGVncmFscyA8PCAtZXhw
b25lbnQpOworICAgICAgICAgICAgaWYgKGludGVncmFscyA+IGtNYXhVSW50MzIpIHsKKyAgICAg
ICAgICAgICAgICBGaWxsRGlnaXRzNjQoaW50ZWdyYWxzLCBidWZmZXIsIGxlbmd0aCk7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEZpbGxEaWdpdHMzMihzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oaW50ZWdyYWxzKSwgYnVmZmVyLCBsZW5ndGgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSAqbGVuZ3RoOworICAgICAgICAgICAgRmlsbEZy
YWN0aW9uYWxzKGZyYWN0aW9uYWxzLCBleHBvbmVudCwgZnJhY3Rpb25hbF9jb3VudCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGxlbmd0aCwgZGVjaW1hbF9wb2ludCk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoZXhwb25lbnQgPCAtMTI4KSB7CisgICAgICAgICAgICAvLyBUaGlz
IGNvbmZpZ3VyYXRpb24gKHdpdGggYXQgbW9zdCAyMCBkaWdpdHMpIG1lYW5zIHRoYXQgYWxsIGRp
Z2l0cyBtdXN0IGJlCisgICAgICAgICAgICAvLyAwLgorICAgICAgICAgICAgQVNTRVJUKGZyYWN0
aW9uYWxfY291bnQgPD0gMjApOworICAgICAgICAgICAgYnVmZmVyWzBdID0gJ1wwJzsKKyAgICAg
ICAgICAgICpsZW5ndGggPSAwOworICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSAtZnJhY3Rp
b25hbF9jb3VudDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICpkZWNpbWFsX3BvaW50
ID0gMDsKKyAgICAgICAgICAgIEZpbGxGcmFjdGlvbmFscyhzaWduaWZpY2FuZCwgZXhwb25lbnQs
IGZyYWN0aW9uYWxfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBs
ZW5ndGgsIGRlY2ltYWxfcG9pbnQpOworICAgICAgICB9CisgICAgICAgIFRyaW1aZXJvcyhidWZm
ZXIsIGxlbmd0aCwgZGVjaW1hbF9wb2ludCk7CisgICAgICAgIGJ1ZmZlclsqbGVuZ3RoXSA9ICdc
MCc7CisgICAgICAgIGlmICgoKmxlbmd0aCkgPT0gMCkgeworICAgICAgICAgICAgLy8gVGhlIHN0
cmluZyBpcyBlbXB0eSBhbmQgdGhlIGRlY2ltYWxfcG9pbnQgdGh1cyBoYXMgbm8gaW1wb3J0YW5j
ZS4gTWltaWNrCisgICAgICAgICAgICAvLyBHYXkncyBkdG9hIGFuZCBhbmQgc2V0IGl0IHRvIC1m
cmFjdGlvbmFsX2NvdW50LgorICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSAtZnJhY3Rpb25h
bF9jb3VudDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCit9
ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KKworfSAvLyBuYW1lc3BhY2UgV1RGCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZml4ZWQtZHRvYS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2ZpeGVkLWR0b2EuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44
YzBhZGI3NThiMzc3OTdjNTI3YjkxZjUyNjE5MjY0NTlkOTM2N2JlCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2ZpeGVkLWR0b2EuaApAQCAtMCwwICsx
LDYwIEBACisvLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6Cisv
LworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisv
LyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8v
ICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8v
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZm5kZWYgRE9VQkxFX0NPTlZF
UlNJT05fRklYRURfRFRPQV9IXworI2RlZmluZSBET1VCTEVfQ09OVkVSU0lPTl9GSVhFRF9EVE9B
X0hfCisKKyNpbmNsdWRlICJ1dGlscy5oIgorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNl
IGRvdWJsZV9jb252ZXJzaW9uIHsKKyAgICAKKyAgICAvLyBQcm9kdWNlcyBkaWdpdHMgbmVjZXNz
YXJ5IHRvIHByaW50IGEgZ2l2ZW4gbnVtYmVyIHdpdGgKKyAgICAvLyAnZnJhY3Rpb25hbF9jb3Vu
dCcgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50LgorICAgIC8vIFRoZSBidWZmZXIgbXVz
dCBiZSBiaWcgZW5vdWdoIHRvIGhvbGQgdGhlIHJlc3VsdCBwbHVzIG9uZSB0ZXJtaW5hdGluZyBu
dWxsCisgICAgLy8gY2hhcmFjdGVyLgorICAgIC8vCisgICAgLy8gVGhlIHByb2R1Y2VkIGRpZ2l0
cyBtaWdodCBiZSB0b28gc2hvcnQgaW4gd2hpY2ggY2FzZSB0aGUgY2FsbGVyIGhhcyB0byBmaWxs
CisgICAgLy8gdGhlIGdhcHMgd2l0aCAnMCdzLgorICAgIC8vIEV4YW1wbGU6IEZhc3RGaXhlZER0
b2EoMC4wMDEsIDUsIC4uLikgaXMgYWxsb3dlZCB0byByZXR1cm4gYnVmZmVyID0gIjEiLCBhbmQK
KyAgICAvLyBkZWNpbWFsX3BvaW50ID0gLTIuCisgICAgLy8gSGFsZndheSBjYXNlcyBhcmUgcm91
bmRlZCB0b3dhcmRzICsvLUluZmluaXR5IChhd2F5IGZyb20gMCkuIFRoZSBjYWxsCisgICAgLy8g
RmFzdEZpeGVkRHRvYSgwLjE1LCAyLCAuLi4pIHRodXMgcmV0dXJucyBidWZmZXIgPSAiMiIsIGRl
Y2ltYWxfcG9pbnQgPSAwLgorICAgIC8vIFRoZSByZXR1cm5lZCBidWZmZXIgbWF5IGNvbnRhaW4g
ZGlnaXRzIHRoYXQgd291bGQgYmUgdHJ1bmNhdGVkIGZyb20gdGhlCisgICAgLy8gc2hvcnRlc3Qg
cmVwcmVzZW50YXRpb24gb2YgdGhlIGlucHV0LgorICAgIC8vCisgICAgLy8gVGhpcyBtZXRob2Qg
b25seSB3b3JrcyBmb3Igc29tZSBwYXJhbWV0ZXJzLiBJZiBpdCBjYW4ndCBoYW5kbGUgdGhlIGlu
cHV0IGl0CisgICAgLy8gcmV0dXJucyBmYWxzZS4gVGhlIG91dHB1dCBpcyBudWxsLXRlcm1pbmF0
ZWQgd2hlbiB0aGUgZnVuY3Rpb24gc3VjY2VlZHMuCisgICAgYm9vbCBGYXN0Rml4ZWREdG9hKGRv
dWJsZSB2LCBpbnQgZnJhY3Rpb25hbF9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgVmVj
dG9yPGNoYXI+IGJ1ZmZlciwgaW50KiBsZW5ndGgsIGludCogZGVjaW1hbF9wb2ludCk7CisgICAg
Cit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKKyNlbmRpZiAgLy8gRE9VQkxFX0NPTlZFUlNJT05fRklYRURfRFRPQV9IXwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL3N0cnRvZC5jYyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvZHRvYS9zdHJ0b2QuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGQ0M2Q2OWZhNzJmMmRk
NmVjNmNlN2I5NDQzNTZhMTI5ZDI3YzUzMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvZHRvYS9zdHJ0b2QuY2MKQEAgLTAsMCArMSw0NDUgQEAKKy8vIENvcHly
aWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWlt
ZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAor
Ly8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisv
LyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPGxpbWl0
cy5oPgorCisjaW5jbHVkZSAic3RydG9kLmgiCisjaW5jbHVkZSAiYmlnbnVtLmgiCisjaW5jbHVk
ZSAiY2FjaGVkLXBvd2Vycy5oIgorI2luY2x1ZGUgImRvdWJsZS5oIgorCituYW1lc3BhY2UgV1RG
IHsKKworbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKKyAgICAKKyAgICAvLyAyXjUzID0g
OTAwNzE5OTI1NDc0MDk5Mi4KKyAgICAvLyBBbnkgaW50ZWdlciB3aXRoIGF0IG1vc3QgMTUgZGVj
aW1hbCBkaWdpdHMgd2lsbCBoZW5jZSBmaXQgaW50byBhIGRvdWJsZQorICAgIC8vICh3aGljaCBo
YXMgYSA1M2JpdCBzaWduaWZpY2FuZCkgd2l0aG91dCBsb3NzIG9mIHByZWNpc2lvbi4KKyAgICBz
dGF0aWMgY29uc3QgaW50IGtNYXhFeGFjdERvdWJsZUludGVnZXJEZWNpbWFsRGlnaXRzID0gMTU7
CisgICAgLy8gMl42NCA9IDE4NDQ2NzQ0MDczNzA5NTUxNjE2ID4gMTBeMTkKKyAgICBzdGF0aWMg
Y29uc3QgaW50IGtNYXhVaW50NjREZWNpbWFsRGlnaXRzID0gMTk7CisgICAgCisgICAgLy8gTWF4
IGRvdWJsZTogMS43OTc2OTMxMzQ4NjIzMTU3IHggMTBeMzA4CisgICAgLy8gTWluIG5vbi16ZXJv
IGRvdWJsZTogNC45NDA2NTY0NTg0MTI0NjU0IHggMTBeLTMyNAorICAgIC8vIEFueSB4ID49IDEw
XjMwOSBpcyBpbnRlcnByZXRlZCBhcyAraW5maW5pdHkuCisgICAgLy8gQW55IHggPD0gMTBeLTMy
NCBpcyBpbnRlcnByZXRlZCBhcyAwLgorICAgIC8vIE5vdGUgdGhhdCAyLjVlLTMyNCAoZGVzcGl0
ZSBiZWluZyBzbWFsbGVyIHRoYW4gdGhlIG1pbiBkb3VibGUpIHdpbGwgYmUgcmVhZAorICAgIC8v
IGFzIG5vbi16ZXJvIChlcXVhbCB0byB0aGUgbWluIG5vbi16ZXJvIGRvdWJsZSkuCisgICAgc3Rh
dGljIGNvbnN0IGludCBrTWF4RGVjaW1hbFBvd2VyID0gMzA5OworICAgIHN0YXRpYyBjb25zdCBp
bnQga01pbkRlY2ltYWxQb3dlciA9IC0zMjQ7CisgICAgCisgICAgLy8gMl42NCA9IDE4NDQ2NzQ0
MDczNzA5NTUxNjE2CisgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGtNYXhVaW50NjQgPSBVSU5U
NjRfMlBBUlRfQygweEZGRkZGRkZGLCBGRkZGRkZGRik7CisgICAgCisgICAgCisgICAgc3RhdGlj
IGNvbnN0IGRvdWJsZSBleGFjdF9wb3dlcnNfb2ZfdGVuW10gPSB7CisgICAgICAgIDEuMCwgIC8v
IDEwXjAKKyAgICAgICAgMTAuMCwKKyAgICAgICAgMTAwLjAsCisgICAgICAgIDEwMDAuMCwKKyAg
ICAgICAgMTAwMDAuMCwKKyAgICAgICAgMTAwMDAwLjAsCisgICAgICAgIDEwMDAwMDAuMCwKKyAg
ICAgICAgMTAwMDAwMDAuMCwKKyAgICAgICAgMTAwMDAwMDAwLjAsCisgICAgICAgIDEwMDAwMDAw
MDAuMCwKKyAgICAgICAgMTAwMDAwMDAwMDAuMCwgIC8vIDEwXjEwCisgICAgICAgIDEwMDAwMDAw
MDAwMC4wLAorICAgICAgICAxMDAwMDAwMDAwMDAwLjAsCisgICAgICAgIDEwMDAwMDAwMDAwMDAw
LjAsCisgICAgICAgIDEwMDAwMDAwMDAwMDAwMC4wLAorICAgICAgICAxMDAwMDAwMDAwMDAwMDAw
LjAsCisgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwLjAsCisgICAgICAgIDEwMDAwMDAwMDAwMDAw
MDAwMC4wLAorICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwLjAsCisgICAgICAgIDEwMDAwMDAw
MDAwMDAwMDAwMDAwLjAsCisgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMC4wLCAgLy8gMTBe
MjAKKyAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMC4wLAorICAgICAgICAvLyAxMF4yMiA9
IDB4MjFlMTllMGM5YmFiMjQwMDAwMCA9IDB4ODc4Njc4MzI2ZWFjOSAqIDJeMjIKKyAgICAgICAg
MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuMAorICAgIH07CisgICAgc3RhdGljIGNvbnN0IGludCBr
RXhhY3RQb3dlcnNPZlRlblNpemUgPSBBUlJBWV9TSVpFKGV4YWN0X3Bvd2Vyc19vZl90ZW4pOwor
ICAgIAorICAgIC8vIE1heGltdW0gbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBpbiB0aGUg
ZGVjaW1hbCByZXByZXNlbnRhdGlvbi4KKyAgICAvLyBJbiBmYWN0IHRoZSB2YWx1ZSBpcyA3NzIg
KHNlZSBjb252ZXJzaW9ucy5jYyksIGJ1dCB0byBnaXZlIHVzIHNvbWUgbWFyZ2luCisgICAgLy8g
d2Ugcm91bmQgdXAgdG8gNzgwLgorICAgIHN0YXRpYyBjb25zdCBpbnQga01heFNpZ25pZmljYW50
RGVjaW1hbERpZ2l0cyA9IDc4MDsKKyAgICAKKyAgICBzdGF0aWMgVmVjdG9yPGNvbnN0IGNoYXI+
IFRyaW1MZWFkaW5nWmVyb3MoVmVjdG9yPGNvbnN0IGNoYXI+IGJ1ZmZlcikgeworICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGJ1ZmZlci5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgICAgICBp
ZiAoYnVmZmVyW2ldICE9ICcwJykgeworICAgICAgICAgICAgICAgIHJldHVybiBidWZmZXIuU3Vi
VmVjdG9yKGksIGJ1ZmZlci5sZW5ndGgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIFZlY3Rvcjxjb25zdCBjaGFyPihidWZmZXIuc3RhcnQoKSwgMCk7CisgICAg
fQorICAgIAorICAgIAorICAgIHN0YXRpYyBWZWN0b3I8Y29uc3QgY2hhcj4gVHJpbVRyYWlsaW5n
WmVyb3MoVmVjdG9yPGNvbnN0IGNoYXI+IGJ1ZmZlcikgeworICAgICAgICBmb3IgKGludCBpID0g
YnVmZmVyLmxlbmd0aCgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgICAgIGlmIChidWZm
ZXJbaV0gIT0gJzAnKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlci5TdWJWZWN0b3Io
MCwgaSArIDEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBWZWN0
b3I8Y29uc3QgY2hhcj4oYnVmZmVyLnN0YXJ0KCksIDApOworICAgIH0KKyAgICAKKyAgICAKKyAg
ICBzdGF0aWMgdm9pZCBUcmltVG9NYXhTaWduaWZpY2FudERpZ2l0cyhWZWN0b3I8Y29uc3QgY2hh
cj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBleHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFyKiBzaWduaWZpY2FudF9idWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50KiBzaWduaWZpY2FudF9leHBvbmVudCkgeworICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGtNYXhTaWduaWZpY2FudERlY2ltYWxEaWdpdHMgLSAxOyArK2kpIHsKKyAg
ICAgICAgICAgIHNpZ25pZmljYW50X2J1ZmZlcltpXSA9IGJ1ZmZlcltpXTsKKyAgICAgICAgfQor
ICAgICAgICAvLyBUaGUgaW5wdXQgYnVmZmVyIGhhcyBiZWVuIHRyaW1tZWQuIFRoZXJlZm9yZSB0
aGUgbGFzdCBkaWdpdCBtdXN0IGJlCisgICAgICAgIC8vIGRpZmZlcmVudCBmcm9tICcwJy4KKyAg
ICAgICAgQVNTRVJUKGJ1ZmZlcltidWZmZXIubGVuZ3RoKCkgLSAxXSAhPSAnMCcpOworICAgICAg
ICAvLyBTZXQgdGhlIGxhc3QgZGlnaXQgdG8gYmUgbm9uLXplcm8uIFRoaXMgaXMgc3VmZmljaWVu
dCB0byBndWFyYW50ZWUKKyAgICAgICAgLy8gY29ycmVjdCByb3VuZGluZy4KKyAgICAgICAgc2ln
bmlmaWNhbnRfYnVmZmVyW2tNYXhTaWduaWZpY2FudERlY2ltYWxEaWdpdHMgLSAxXSA9ICcxJzsK
KyAgICAgICAgKnNpZ25pZmljYW50X2V4cG9uZW50ID0KKyAgICAgICAgZXhwb25lbnQgKyAoYnVm
ZmVyLmxlbmd0aCgpIC0ga01heFNpZ25pZmljYW50RGVjaW1hbERpZ2l0cyk7CisgICAgfQorICAg
IAorICAgIC8vIFJlYWRzIGRpZ2l0cyBmcm9tIHRoZSBidWZmZXIgYW5kIGNvbnZlcnRzIHRoZW0g
dG8gYSB1aW50NjQuCisgICAgLy8gUmVhZHMgaW4gYXMgbWFueSBkaWdpdHMgYXMgZml0IGludG8g
YSB1aW50NjQuCisgICAgLy8gV2hlbiB0aGUgc3RyaW5nIHN0YXJ0cyB3aXRoICIxODQ0Njc0NDA3
MzcwOTU1MTYxIiBubyBmdXJ0aGVyIGRpZ2l0IGlzIHJlYWQuCisgICAgLy8gU2luY2UgMl42NCA9
IDE4NDQ2NzQ0MDczNzA5NTUxNjE2IGl0IHdvdWxkIHN0aWxsIGJlIHBvc3NpYmxlIHJlYWQgYW5v
dGhlcgorICAgIC8vIGRpZ2l0IGlmIGl0IHdhcyBsZXNzIG9yIGVxdWFsIHRoYW4gNiwgYnV0IHRo
aXMgd291bGQgY29tcGxpY2F0ZSB0aGUgY29kZS4KKyAgICBzdGF0aWMgdWludDY0X3QgUmVhZFVp
bnQ2NChWZWN0b3I8Y29uc3QgY2hhcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCogbnVtYmVyX29mX3JlYWRfZGlnaXRzKSB7CisgICAgICAgIHVpbnQ2NF90IHJl
c3VsdCA9IDA7CisgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgd2hpbGUgKGkgPCBidWZmZXIu
bGVuZ3RoKCkgJiYgcmVzdWx0IDw9IChrTWF4VWludDY0IC8gMTAgLSAxKSkgeworICAgICAgICAg
ICAgaW50IGRpZ2l0ID0gYnVmZmVyW2krK10gLSAnMCc7CisgICAgICAgICAgICBBU1NFUlQoMCA8
PSBkaWdpdCAmJiBkaWdpdCA8PSA5KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IDEwICogcmVzdWx0
ICsgZGlnaXQ7CisgICAgICAgIH0KKyAgICAgICAgKm51bWJlcl9vZl9yZWFkX2RpZ2l0cyA9IGk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIAorICAgIC8vIFJlYWRz
IGEgRGl5RnAgZnJvbSB0aGUgYnVmZmVyLgorICAgIC8vIFRoZSByZXR1cm5lZCBEaXlGcCBpcyBu
b3QgbmVjZXNzYXJpbHkgbm9ybWFsaXplZC4KKyAgICAvLyBJZiByZW1haW5pbmdfZGVjaW1hbHMg
aXMgemVybyB0aGVuIHRoZSByZXR1cm5lZCBEaXlGcCBpcyBhY2N1cmF0ZS4KKyAgICAvLyBPdGhl
cndpc2UgaXQgaGFzIGJlZW4gcm91bmRlZCBhbmQgaGFzIGVycm9yIG9mIGF0IG1vc3QgMS8yIHVs
cC4KKyAgICBzdGF0aWMgdm9pZCBSZWFkRGl5RnAoVmVjdG9yPGNvbnN0IGNoYXI+IGJ1ZmZlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgRGl5RnAqIHJlc3VsdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50KiByZW1haW5pbmdfZGVjaW1hbHMpIHsKKyAgICAgICAgaW50IHJlYWRf
ZGlnaXRzOworICAgICAgICB1aW50NjRfdCBzaWduaWZpY2FuZCA9IFJlYWRVaW50NjQoYnVmZmVy
LCAmcmVhZF9kaWdpdHMpOworICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCgpID09IHJlYWRfZGln
aXRzKSB7CisgICAgICAgICAgICAqcmVzdWx0ID0gRGl5RnAoc2lnbmlmaWNhbmQsIDApOworICAg
ICAgICAgICAgKnJlbWFpbmluZ19kZWNpbWFscyA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAvLyBSb3VuZCB0aGUgc2lnbmlmaWNhbmQuCisgICAgICAgICAgICBpZiAoYnVmZmVy
W3JlYWRfZGlnaXRzXSA+PSAnNScpIHsKKyAgICAgICAgICAgICAgICBzaWduaWZpY2FuZCsrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgYmluYXJ5IGV4cG9uZW50
LgorICAgICAgICAgICAgaW50IGV4cG9uZW50ID0gMDsKKyAgICAgICAgICAgICpyZXN1bHQgPSBE
aXlGcChzaWduaWZpY2FuZCwgZXhwb25lbnQpOworICAgICAgICAgICAgKnJlbWFpbmluZ19kZWNp
bWFscyA9IGJ1ZmZlci5sZW5ndGgoKSAtIHJlYWRfZGlnaXRzOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIAorICAgIHN0YXRpYyBib29sIERvdWJsZVN0cnRvZChWZWN0b3I8Y29uc3QgY2hh
cj4gdHJpbW1lZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV4cG9uZW50LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUqIHJlc3VsdCkgeworI2lmICFkZWZp
bmVkKERPVUJMRV9DT05WRVJTSU9OX0NPUlJFQ1RfRE9VQkxFX09QRVJBVElPTlMpCisgICAgICAg
IC8vIE9uIHg4NiB0aGUgZmxvYXRpbmctcG9pbnQgc3RhY2sgY2FuIGJlIDY0IG9yIDgwIGJpdHMg
d2lkZS4gSWYgaXQgaXMKKyAgICAgICAgLy8gODAgYml0cyB3aWRlIChhcyBpcyB0aGUgY2FzZSBv
biBMaW51eCkgdGhlbiBkb3VibGUtcm91bmRpbmcgb2NjdXJzIGFuZCB0aGUKKyAgICAgICAgLy8g
cmVzdWx0IGlzIG5vdCBhY2N1cmF0ZS4KKyAgICAgICAgLy8gV2Uga25vdyB0aGF0IFdpbmRvd3Mz
MiB1c2VzIDY0IGJpdHMgYW5kIGlzIHRoZXJlZm9yZSBhY2N1cmF0ZS4KKyAgICAgICAgLy8gTm90
ZSB0aGF0IHRoZSBBUk0gc2ltdWxhdG9yIGlzIGNvbXBpbGVkIGZvciAzMmJpdHMuIEl0IHRoZXJl
Zm9yZSBleGhpYml0cworICAgICAgICAvLyB0aGUgc2FtZSBwcm9ibGVtLgorICAgICAgICByZXR1
cm4gZmFsc2U7CisjZW5kaWYKKyAgICAgICAgaWYgKHRyaW1tZWQubGVuZ3RoKCkgPD0ga01heEV4
YWN0RG91YmxlSW50ZWdlckRlY2ltYWxEaWdpdHMpIHsKKyAgICAgICAgICAgIGludCByZWFkX2Rp
Z2l0czsKKyAgICAgICAgICAgIC8vIFRoZSB0cmltbWVkIGlucHV0IGZpdHMgaW50byBhIGRvdWJs
ZS4KKyAgICAgICAgICAgIC8vIElmIHRoZSAxMF5leHBvbmVudCAocmVzcC4gMTBeLWV4cG9uZW50
KSBmaXRzIGludG8gYSBkb3VibGUgdG9vIHRoZW4gd2UKKyAgICAgICAgICAgIC8vIGNhbiBjb21w
dXRlIHRoZSByZXN1bHQtZG91YmxlIHNpbXBseSBieSBtdWx0aXBseWluZyAocmVzcC4gZGl2aWRp
bmcpIHRoZQorICAgICAgICAgICAgLy8gdHdvIG51bWJlcnMuCisgICAgICAgICAgICAvLyBUaGlz
IGlzIHBvc3NpYmxlIGJlY2F1c2UgSUVFRSBndWFyYW50ZWVzIHRoYXQgZmxvYXRpbmctcG9pbnQg
b3BlcmF0aW9ucworICAgICAgICAgICAgLy8gcmV0dXJuIHRoZSBiZXN0IHBvc3NpYmxlIGFwcHJv
eGltYXRpb24uCisgICAgICAgICAgICBpZiAoZXhwb25lbnQgPCAwICYmIC1leHBvbmVudCA8IGtF
eGFjdFBvd2Vyc09mVGVuU2l6ZSkgeworICAgICAgICAgICAgICAgIC8vIDEwXi1leHBvbmVudCBm
aXRzIGludG8gYSBkb3VibGUuCisgICAgICAgICAgICAgICAgKnJlc3VsdCA9IHN0YXRpY19jYXN0
PGRvdWJsZT4oUmVhZFVpbnQ2NCh0cmltbWVkLCAmcmVhZF9kaWdpdHMpKTsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQocmVhZF9kaWdpdHMgPT0gdHJpbW1lZC5sZW5ndGgoKSk7CisgICAgICAgICAg
ICAgICAgKnJlc3VsdCAvPSBleGFjdF9wb3dlcnNfb2ZfdGVuWy1leHBvbmVudF07CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoMCA8
PSBleHBvbmVudCAmJiBleHBvbmVudCA8IGtFeGFjdFBvd2Vyc09mVGVuU2l6ZSkgeworICAgICAg
ICAgICAgICAgIC8vIDEwXmV4cG9uZW50IGZpdHMgaW50byBhIGRvdWJsZS4KKyAgICAgICAgICAg
ICAgICAqcmVzdWx0ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihSZWFkVWludDY0KHRyaW1tZWQsICZy
ZWFkX2RpZ2l0cykpOworICAgICAgICAgICAgICAgIEFTU0VSVChyZWFkX2RpZ2l0cyA9PSB0cmlt
bWVkLmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICAqcmVzdWx0ICo9IGV4YWN0X3Bvd2Vyc19v
Zl90ZW5bZXhwb25lbnRdOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaW50IHJlbWFpbmluZ19kaWdpdHMgPQorICAgICAgICAgICAga01h
eEV4YWN0RG91YmxlSW50ZWdlckRlY2ltYWxEaWdpdHMgLSB0cmltbWVkLmxlbmd0aCgpOworICAg
ICAgICAgICAgaWYgKCgwIDw9IGV4cG9uZW50KSAmJgorICAgICAgICAgICAgICAgIChleHBvbmVu
dCAtIHJlbWFpbmluZ19kaWdpdHMgPCBrRXhhY3RQb3dlcnNPZlRlblNpemUpKSB7CisgICAgICAg
ICAgICAgICAgLy8gVGhlIHRyaW1tZWQgc3RyaW5nIHdhcyBzaG9ydCBhbmQgd2UgY2FuIG11bHRp
cGx5IGl0IHdpdGgKKyAgICAgICAgICAgICAgICAvLyAxMF5yZW1haW5pbmdfZGlnaXRzLiBBcyBh
IHJlc3VsdCB0aGUgcmVtYWluaW5nIGV4cG9uZW50IG5vdyBmaXRzCisgICAgICAgICAgICAgICAg
Ly8gaW50byBhIGRvdWJsZSB0b28uCisgICAgICAgICAgICAgICAgKnJlc3VsdCA9IHN0YXRpY19j
YXN0PGRvdWJsZT4oUmVhZFVpbnQ2NCh0cmltbWVkLCAmcmVhZF9kaWdpdHMpKTsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQocmVhZF9kaWdpdHMgPT0gdHJpbW1lZC5sZW5ndGgoKSk7CisgICAgICAg
ICAgICAgICAgKnJlc3VsdCAqPSBleGFjdF9wb3dlcnNfb2ZfdGVuW3JlbWFpbmluZ19kaWdpdHNd
OworICAgICAgICAgICAgICAgICpyZXN1bHQgKj0gZXhhY3RfcG93ZXJzX29mX3RlbltleHBvbmVu
dCAtIHJlbWFpbmluZ19kaWdpdHNdOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
CisgICAgCisgICAgLy8gUmV0dXJucyAxMF5leHBvbmVudCBhcyBhbiBleGFjdCBEaXlGcC4KKyAg
ICAvLyBUaGUgZ2l2ZW4gZXhwb25lbnQgbXVzdCBiZSBpbiB0aGUgcmFuZ2UgWzE7IGtEZWNpbWFs
RXhwb25lbnREaXN0YW5jZVsuCisgICAgc3RhdGljIERpeUZwIEFkanVzdG1lbnRQb3dlck9mVGVu
KGludCBleHBvbmVudCkgeworICAgICAgICBBU1NFUlQoMCA8IGV4cG9uZW50KTsKKyAgICAgICAg
QVNTRVJUKGV4cG9uZW50IDwgUG93ZXJzT2ZUZW5DYWNoZTo6a0RlY2ltYWxFeHBvbmVudERpc3Rh
bmNlKTsKKyAgICAgICAgLy8gU2ltcGx5IGhhcmRjb2RlIHRoZSByZW1haW5pbmcgcG93ZXJzIGZv
ciB0aGUgZ2l2ZW4gZGVjaW1hbCBleHBvbmVudAorICAgICAgICAvLyBkaXN0YW5jZS4KKyAgICAg
ICAgQVNTRVJUKFBvd2Vyc09mVGVuQ2FjaGU6OmtEZWNpbWFsRXhwb25lbnREaXN0YW5jZSA9PSA4
KTsKKyAgICAgICAgc3dpdGNoIChleHBvbmVudCkgeworICAgICAgICAgICAgY2FzZSAxOiByZXR1
cm4gRGl5RnAoVUlOVDY0XzJQQVJUX0MoMHhhMDAwMDAwMCwgMDAwMDAwMDApLCAtNjApOworICAg
ICAgICAgICAgY2FzZSAyOiByZXR1cm4gRGl5RnAoVUlOVDY0XzJQQVJUX0MoMHhjODAwMDAwMCwg
MDAwMDAwMDApLCAtNTcpOworICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gRGl5RnAoVUlOVDY0
XzJQQVJUX0MoMHhmYTAwMDAwMCwgMDAwMDAwMDApLCAtNTQpOworICAgICAgICAgICAgY2FzZSA0
OiByZXR1cm4gRGl5RnAoVUlOVDY0XzJQQVJUX0MoMHg5YzQwMDAwMCwgMDAwMDAwMDApLCAtNTAp
OworICAgICAgICAgICAgY2FzZSA1OiByZXR1cm4gRGl5RnAoVUlOVDY0XzJQQVJUX0MoMHhjMzUw
MDAwMCwgMDAwMDAwMDApLCAtNDcpOworICAgICAgICAgICAgY2FzZSA2OiByZXR1cm4gRGl5RnAo
VUlOVDY0XzJQQVJUX0MoMHhmNDI0MDAwMCwgMDAwMDAwMDApLCAtNDQpOworICAgICAgICAgICAg
Y2FzZSA3OiByZXR1cm4gRGl5RnAoVUlOVDY0XzJQQVJUX0MoMHg5ODk2ODAwMCwgMDAwMDAwMDAp
LCAtNDApOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgICAgIHJldHVybiBEaXlGcCgwLCAwKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICAKKyAgICAvLyBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHRoZW4g
dGhlIHJlc3VsdCBpcyB0aGUgY29ycmVjdCBkb3VibGUuCisgICAgLy8gT3RoZXJ3aXNlIGl0IGlz
IGVpdGhlciB0aGUgY29ycmVjdCBkb3VibGUgb3IgdGhlIGRvdWJsZSB0aGF0IGlzIGp1c3QgYmVs
b3cKKyAgICAvLyB0aGUgY29ycmVjdCBkb3VibGUuCisgICAgc3RhdGljIGJvb2wgRGl5RnBTdHJ0
b2QoVmVjdG9yPGNvbnN0IGNoYXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlKiByZXN1
bHQpIHsKKyAgICAgICAgRGl5RnAgaW5wdXQ7CisgICAgICAgIGludCByZW1haW5pbmdfZGVjaW1h
bHM7CisgICAgICAgIFJlYWREaXlGcChidWZmZXIsICZpbnB1dCwgJnJlbWFpbmluZ19kZWNpbWFs
cyk7CisgICAgICAgIC8vIFNpbmNlIHdlIG1heSBoYXZlIGRyb3BwZWQgc29tZSBkaWdpdHMgdGhl
IGlucHV0IGlzIG5vdCBhY2N1cmF0ZS4KKyAgICAgICAgLy8gSWYgcmVtYWluaW5nX2RlY2ltYWxz
IGlzIGRpZmZlcmVudCB0aGFuIDAgdGhhbiB0aGUgZXJyb3IgaXMgYXQgbW9zdAorICAgICAgICAv
LyAuNSB1bHAgKHVuaXQgaW4gdGhlIGxhc3QgcGxhY2UpLgorICAgICAgICAvLyBXZSBkb24ndCB3
YW50IHRvIGRlYWwgd2l0aCBmcmFjdGlvbnMgYW5kIHRoZXJlZm9yZSBrZWVwIGEgY29tbW9uCisg
ICAgICAgIC8vIGRlbm9taW5hdG9yLgorICAgICAgICBjb25zdCBpbnQga0Rlbm9taW5hdG9yTG9n
ID0gMzsKKyAgICAgICAgY29uc3QgaW50IGtEZW5vbWluYXRvciA9IDEgPDwga0Rlbm9taW5hdG9y
TG9nOworICAgICAgICAvLyBNb3ZlIHRoZSByZW1haW5pbmcgZGVjaW1hbHMgaW50byB0aGUgZXhw
b25lbnQuCisgICAgICAgIGV4cG9uZW50ICs9IHJlbWFpbmluZ19kZWNpbWFsczsKKyAgICAgICAg
aW50IGVycm9yID0gKHJlbWFpbmluZ19kZWNpbWFscyA9PSAwID8gMCA6IGtEZW5vbWluYXRvciAv
IDIpOworICAgICAgICAKKyAgICAgICAgaW50IG9sZF9lID0gaW5wdXQuZSgpOworICAgICAgICBp
bnB1dC5Ob3JtYWxpemUoKTsKKyAgICAgICAgZXJyb3IgPDw9IG9sZF9lIC0gaW5wdXQuZSgpOwor
ICAgICAgICAKKyAgICAgICAgQVNTRVJUKGV4cG9uZW50IDw9IFBvd2Vyc09mVGVuQ2FjaGU6OmtN
YXhEZWNpbWFsRXhwb25lbnQpOworICAgICAgICBpZiAoZXhwb25lbnQgPCBQb3dlcnNPZlRlbkNh
Y2hlOjprTWluRGVjaW1hbEV4cG9uZW50KSB7CisgICAgICAgICAgICAqcmVzdWx0ID0gMC4wOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgRGl5RnAgY2FjaGVk
X3Bvd2VyOworICAgICAgICBpbnQgY2FjaGVkX2RlY2ltYWxfZXhwb25lbnQ7CisgICAgICAgIFBv
d2Vyc09mVGVuQ2FjaGU6OkdldENhY2hlZFBvd2VyRm9yRGVjaW1hbEV4cG9uZW50KGV4cG9uZW50
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmY2FjaGVkX3Bvd2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmY2FjaGVkX2RlY2ltYWxfZXhwb25lbnQpOworICAgICAg
ICAKKyAgICAgICAgaWYgKGNhY2hlZF9kZWNpbWFsX2V4cG9uZW50ICE9IGV4cG9uZW50KSB7Cisg
ICAgICAgICAgICBpbnQgYWRqdXN0bWVudF9leHBvbmVudCA9IGV4cG9uZW50IC0gY2FjaGVkX2Rl
Y2ltYWxfZXhwb25lbnQ7CisgICAgICAgICAgICBEaXlGcCBhZGp1c3RtZW50X3Bvd2VyID0gQWRq
dXN0bWVudFBvd2VyT2ZUZW4oYWRqdXN0bWVudF9leHBvbmVudCk7CisgICAgICAgICAgICBpbnB1
dC5NdWx0aXBseShhZGp1c3RtZW50X3Bvd2VyKTsKKyAgICAgICAgICAgIGlmIChrTWF4VWludDY0
RGVjaW1hbERpZ2l0cyAtIGJ1ZmZlci5sZW5ndGgoKSA+PSBhZGp1c3RtZW50X2V4cG9uZW50KSB7
CisgICAgICAgICAgICAgICAgLy8gVGhlIHByb2R1Y3Qgb2YgaW5wdXQgd2l0aCB0aGUgYWRqdXN0
bWVudCBwb3dlciBmaXRzIGludG8gYSA2NCBiaXQKKyAgICAgICAgICAgICAgICAvLyBpbnRlZ2Vy
LgorICAgICAgICAgICAgICAgIEFTU0VSVChEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSA9PSA2NCk7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFRoZSBhZGp1c3RtZW50
IHBvd2VyIGlzIGV4YWN0LiBUaGVyZSBpcyBoZW5jZSBvbmx5IGFuIGVycm9yIG9mIDAuNS4KKyAg
ICAgICAgICAgICAgICBlcnJvciArPSBrRGVub21pbmF0b3IgLyAyOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpbnB1dC5NdWx0aXBseShjYWNoZWRfcG93ZXIp
OworICAgICAgICAvLyBUaGUgZXJyb3IgaW50cm9kdWNlZCBieSBhIG11bHRpcGxpY2F0aW9uIG9m
IGEqYiBlcXVhbHMKKyAgICAgICAgLy8gICBlcnJvcl9hICsgZXJyb3JfYiArIGVycm9yX2EqZXJy
b3JfYi8yXjY0ICsgMC41CisgICAgICAgIC8vIFN1YnN0aXR1dGluZyBhIHdpdGggJ2lucHV0JyBh
bmQgYiB3aXRoICdjYWNoZWRfcG93ZXInIHdlIGhhdmUKKyAgICAgICAgLy8gICBlcnJvcl9iID0g
MC41ICAoYWxsIGNhY2hlZCBwb3dlcnMgaGF2ZSBhbiBlcnJvciBvZiBsZXNzIHRoYW4gMC41IHVs
cCksCisgICAgICAgIC8vICAgZXJyb3JfYWIgPSAwIG9yIDEgLyBrRGVub21pbmF0b3IgPiBlcnJv
cl9hKmVycm9yX2IvIDJeNjQKKyAgICAgICAgaW50IGVycm9yX2IgPSBrRGVub21pbmF0b3IgLyAy
OworICAgICAgICBpbnQgZXJyb3JfYWIgPSAoZXJyb3IgPT0gMCA/IDAgOiAxKTsgIC8vIFdlIHJv
dW5kIHVwIHRvIDEuCisgICAgICAgIGludCBmaXhlZF9lcnJvciA9IGtEZW5vbWluYXRvciAvIDI7
CisgICAgICAgIGVycm9yICs9IGVycm9yX2IgKyBlcnJvcl9hYiArIGZpeGVkX2Vycm9yOworICAg
ICAgICAKKyAgICAgICAgb2xkX2UgPSBpbnB1dC5lKCk7CisgICAgICAgIGlucHV0Lk5vcm1hbGl6
ZSgpOworICAgICAgICBlcnJvciA8PD0gb2xkX2UgLSBpbnB1dC5lKCk7CisgICAgICAgIAorICAg
ICAgICAvLyBTZWUgaWYgdGhlIGRvdWJsZSdzIHNpZ25pZmljYW5kIGNoYW5nZXMgaWYgd2UgYWRk
L3N1YnRyYWN0IHRoZSBlcnJvci4KKyAgICAgICAgaW50IG9yZGVyX29mX21hZ25pdHVkZSA9IERp
eUZwOjprU2lnbmlmaWNhbmRTaXplICsgaW5wdXQuZSgpOworICAgICAgICBpbnQgZWZmZWN0aXZl
X3NpZ25pZmljYW5kX3NpemUgPQorICAgICAgICBEb3VibGU6OlNpZ25pZmljYW5kU2l6ZUZvck9y
ZGVyT2ZNYWduaXR1ZGUob3JkZXJfb2ZfbWFnbml0dWRlKTsKKyAgICAgICAgaW50IHByZWNpc2lv
bl9kaWdpdHNfY291bnQgPQorICAgICAgICBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSAtIGVmZmVj
dGl2ZV9zaWduaWZpY2FuZF9zaXplOworICAgICAgICBpZiAocHJlY2lzaW9uX2RpZ2l0c19jb3Vu
dCArIGtEZW5vbWluYXRvckxvZyA+PSBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSkgeworICAgICAg
ICAgICAgLy8gVGhpcyBjYW4gb25seSBoYXBwZW4gZm9yIHZlcnkgc21hbGwgZGVub3JtYWxzLiBJ
biB0aGlzIGNhc2UgdGhlCisgICAgICAgICAgICAvLyBoYWxmLXdheSBtdWx0aXBsaWVkIGJ5IHRo
ZSBkZW5vbWluYXRvciBleGNlZWRzIHRoZSByYW5nZSBvZiBhbiB1aW50NjQuCisgICAgICAgICAg
ICAvLyBTaW1wbHkgc2hpZnQgZXZlcnl0aGluZyB0byB0aGUgcmlnaHQuCisgICAgICAgICAgICBp
bnQgc2hpZnRfYW1vdW50ID0gKHByZWNpc2lvbl9kaWdpdHNfY291bnQgKyBrRGVub21pbmF0b3JM
b2cpIC0KKyAgICAgICAgICAgIERpeUZwOjprU2lnbmlmaWNhbmRTaXplICsgMTsKKyAgICAgICAg
ICAgIGlucHV0LnNldF9mKGlucHV0LmYoKSA+PiBzaGlmdF9hbW91bnQpOworICAgICAgICAgICAg
aW5wdXQuc2V0X2UoaW5wdXQuZSgpICsgc2hpZnRfYW1vdW50KTsKKyAgICAgICAgICAgIC8vIFdl
IGFkZCAxIGZvciB0aGUgbG9zdCBwcmVjaXNpb24gb2YgZXJyb3IsIGFuZCBrRGVub21pbmF0b3Ig
Zm9yCisgICAgICAgICAgICAvLyB0aGUgbG9zdCBwcmVjaXNpb24gb2YgaW5wdXQuZigpLgorICAg
ICAgICAgICAgZXJyb3IgPSAoZXJyb3IgPj4gc2hpZnRfYW1vdW50KSArIDEgKyBrRGVub21pbmF0
b3I7CisgICAgICAgICAgICBwcmVjaXNpb25fZGlnaXRzX2NvdW50IC09IHNoaWZ0X2Ftb3VudDsK
KyAgICAgICAgfQorICAgICAgICAvLyBXZSB1c2UgdWludDY0X3RzIG5vdy4gVGhpcyBvbmx5IHdv
cmtzIGlmIHRoZSBEaXlGcCB1c2VzIHVpbnQ2NF90cyB0b28uCisgICAgICAgIEFTU0VSVChEaXlG
cDo6a1NpZ25pZmljYW5kU2l6ZSA9PSA2NCk7CisgICAgICAgIEFTU0VSVChwcmVjaXNpb25fZGln
aXRzX2NvdW50IDwgNjQpOworICAgICAgICB1aW50NjRfdCBvbmU2NCA9IDE7CisgICAgICAgIHVp
bnQ2NF90IHByZWNpc2lvbl9iaXRzX21hc2sgPSAob25lNjQgPDwgcHJlY2lzaW9uX2RpZ2l0c19j
b3VudCkgLSAxOworICAgICAgICB1aW50NjRfdCBwcmVjaXNpb25fYml0cyA9IGlucHV0LmYoKSAm
IHByZWNpc2lvbl9iaXRzX21hc2s7CisgICAgICAgIHVpbnQ2NF90IGhhbGZfd2F5ID0gb25lNjQg
PDwgKHByZWNpc2lvbl9kaWdpdHNfY291bnQgLSAxKTsKKyAgICAgICAgcHJlY2lzaW9uX2JpdHMg
Kj0ga0Rlbm9taW5hdG9yOworICAgICAgICBoYWxmX3dheSAqPSBrRGVub21pbmF0b3I7CisgICAg
ICAgIERpeUZwIHJvdW5kZWRfaW5wdXQoaW5wdXQuZigpID4+IHByZWNpc2lvbl9kaWdpdHNfY291
bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQuZSgpICsgcHJlY2lzaW9uX2Rp
Z2l0c19jb3VudCk7CisgICAgICAgIGlmIChwcmVjaXNpb25fYml0cyA+PSBoYWxmX3dheSArIGVy
cm9yKSB7CisgICAgICAgICAgICByb3VuZGVkX2lucHV0LnNldF9mKHJvdW5kZWRfaW5wdXQuZigp
ICsgMSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gSWYgdGhlIGxhc3RfYml0cyBhcmUgdG9vIGNs
b3NlIHRvIHRoZSBoYWxmLXdheSBjYXNlIHRoYW4gd2UgYXJlIHRvbworICAgICAgICAvLyBpbmFj
Y3VyYXRlIGFuZCByb3VuZCBkb3duLiBJbiB0aGlzIGNhc2Ugd2UgcmV0dXJuIGZhbHNlIHNvIHRo
YXQgd2UgY2FuCisgICAgICAgIC8vIGZhbGwgYmFjayB0byBhIG1vcmUgcHJlY2lzZSBhbGdvcml0
aG0uCisgICAgICAgIAorICAgICAgICAqcmVzdWx0ID0gRG91YmxlKHJvdW5kZWRfaW5wdXQpLnZh
bHVlKCk7CisgICAgICAgIGlmIChoYWxmX3dheSAtIGVycm9yIDwgcHJlY2lzaW9uX2JpdHMgJiYg
cHJlY2lzaW9uX2JpdHMgPCBoYWxmX3dheSArIGVycm9yKSB7CisgICAgICAgICAgICAvLyBUb28g
aW1wcmVjaXNlLiBUaGUgY2FsbGVyIHdpbGwgaGF2ZSB0byBmYWxsIGJhY2sgdG8gYSBzbG93ZXIg
dmVyc2lvbi4KKyAgICAgICAgICAgIC8vIEhvd2V2ZXIgdGhlIHJldHVybmVkIG51bWJlciBpcyBn
dWFyYW50ZWVkIHRvIGJlIGVpdGhlciB0aGUgY29ycmVjdAorICAgICAgICAgICAgLy8gZG91Ymxl
LCBvciB0aGUgbmV4dC1sb3dlciBkb3VibGUuCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRoZSBjb3JyZWN0IGRvdWJsZSBmb3IgdGhl
IGJ1ZmZlcioxMF5leHBvbmVudC4KKyAgICAvLyBUaGUgdmFyaWFibGUgZ3Vlc3Mgc2hvdWxkIGJl
IGEgY2xvc2UgZ3Vlc3MgdGhhdCBpcyBlaXRoZXIgdGhlIGNvcnJlY3QgZG91YmxlCisgICAgLy8g
b3IgaXRzIGxvd2VyIG5laWdoYm9yICh0aGUgbmVhcmVzdCBkb3VibGUgbGVzcyB0aGFuIHRoZSBj
b3JyZWN0IG9uZSkuCisgICAgLy8gUHJlY29uZGl0aW9uczoKKyAgICAvLyAgIGJ1ZmZlci5sZW5n
dGgoKSArIGV4cG9uZW50IDw9IGtNYXhEZWNpbWFsUG93ZXIgKyAxCisgICAgLy8gICBidWZmZXIu
bGVuZ3RoKCkgKyBleHBvbmVudCA+IGtNaW5EZWNpbWFsUG93ZXIKKyAgICAvLyAgIGJ1ZmZlci5s
ZW5ndGgoKSA8PSBrTWF4RGVjaW1hbFNpZ25pZmljYW50RGlnaXRzCisgICAgc3RhdGljIGRvdWJs
ZSBCaWdudW1TdHJ0b2QoVmVjdG9yPGNvbnN0IGNoYXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZG91YmxlIGd1ZXNzKSB7CisgICAgICAgIGlmIChndWVzcyA9PSBEb3VibGU6OkluZmlu
aXR5KCkpIHsKKyAgICAgICAgICAgIHJldHVybiBndWVzczsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgRGl5RnAgdXBwZXJfYm91bmRhcnkgPSBEb3VibGUoZ3Vlc3MpLlVwcGVyQm91bmRh
cnkoKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChidWZmZXIubGVuZ3RoKCkgKyBleHBvbmVu
dCA8PSBrTWF4RGVjaW1hbFBvd2VyICsgMSk7CisgICAgICAgIEFTU0VSVChidWZmZXIubGVuZ3Ro
KCkgKyBleHBvbmVudCA+IGtNaW5EZWNpbWFsUG93ZXIpOworICAgICAgICBBU1NFUlQoYnVmZmVy
Lmxlbmd0aCgpIDw9IGtNYXhTaWduaWZpY2FudERlY2ltYWxEaWdpdHMpOworICAgICAgICAvLyBN
YWtlIHN1cmUgdGhhdCB0aGUgQmlnbnVtIHdpbGwgYmUgYWJsZSB0byBob2xkIGFsbCBvdXIgbnVt
YmVycy4KKyAgICAgICAgLy8gT3VyIEJpZ251bSBpbXBsZW1lbnRhdGlvbiBoYXMgYSBzZXBhcmF0
ZSBmaWVsZCBmb3IgZXhwb25lbnRzLiBTaGlmdHMgd2lsbAorICAgICAgICAvLyBjb25zdW1lIGF0
IG1vc3Qgb25lIGJpZ2l0ICg8IDY0IGJpdHMpLgorICAgICAgICAvLyBsbigxMCkgPT0gMy4zMjE5
Li4uCisgICAgICAgIEFTU0VSVCgoKGtNYXhEZWNpbWFsUG93ZXIgKyAxKSAqIDMzMyAvIDEwMCkg
PCBCaWdudW06OmtNYXhTaWduaWZpY2FudEJpdHMpOworICAgICAgICBCaWdudW0gaW5wdXQ7Cisg
ICAgICAgIEJpZ251bSBib3VuZGFyeTsKKyAgICAgICAgaW5wdXQuQXNzaWduRGVjaW1hbFN0cmlu
ZyhidWZmZXIpOworICAgICAgICBib3VuZGFyeS5Bc3NpZ25VSW50NjQodXBwZXJfYm91bmRhcnku
ZigpKTsKKyAgICAgICAgaWYgKGV4cG9uZW50ID49IDApIHsKKyAgICAgICAgICAgIGlucHV0Lk11
bHRpcGx5QnlQb3dlck9mVGVuKGV4cG9uZW50KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGJvdW5kYXJ5Lk11bHRpcGx5QnlQb3dlck9mVGVuKC1leHBvbmVudCk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHVwcGVyX2JvdW5kYXJ5LmUoKSA+IDApIHsKKyAgICAgICAgICAgIGJvdW5k
YXJ5LlNoaWZ0TGVmdCh1cHBlcl9ib3VuZGFyeS5lKCkpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgaW5wdXQuU2hpZnRMZWZ0KC11cHBlcl9ib3VuZGFyeS5lKCkpOworICAgICAgICB9
CisgICAgICAgIGludCBjb21wYXJpc29uID0gQmlnbnVtOjpDb21wYXJlKGlucHV0LCBib3VuZGFy
eSk7CisgICAgICAgIGlmIChjb21wYXJpc29uIDwgMCkgeworICAgICAgICAgICAgcmV0dXJuIGd1
ZXNzOworICAgICAgICB9IGVsc2UgaWYgKGNvbXBhcmlzb24gPiAwKSB7CisgICAgICAgICAgICBy
ZXR1cm4gRG91YmxlKGd1ZXNzKS5OZXh0RG91YmxlKCk7CisgICAgICAgIH0gZWxzZSBpZiAoKERv
dWJsZShndWVzcykuU2lnbmlmaWNhbmQoKSAmIDEpID09IDApIHsKKyAgICAgICAgICAgIC8vIFJv
dW5kIHRvd2FyZHMgZXZlbi4KKyAgICAgICAgICAgIHJldHVybiBndWVzczsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHJldHVybiBEb3VibGUoZ3Vlc3MpLk5leHREb3VibGUoKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICBkb3VibGUgU3RydG9kKFZlY3Rvcjxjb25z
dCBjaGFyPiBidWZmZXIsIGludCBleHBvbmVudCkgeworICAgICAgICBWZWN0b3I8Y29uc3QgY2hh
cj4gbGVmdF90cmltbWVkID0gVHJpbUxlYWRpbmdaZXJvcyhidWZmZXIpOworICAgICAgICBWZWN0
b3I8Y29uc3QgY2hhcj4gdHJpbW1lZCA9IFRyaW1UcmFpbGluZ1plcm9zKGxlZnRfdHJpbW1lZCk7
CisgICAgICAgIGV4cG9uZW50ICs9IGxlZnRfdHJpbW1lZC5sZW5ndGgoKSAtIHRyaW1tZWQubGVu
Z3RoKCk7CisgICAgICAgIGlmICh0cmltbWVkLmxlbmd0aCgpID09IDApIHJldHVybiAwLjA7Cisg
ICAgICAgIGlmICh0cmltbWVkLmxlbmd0aCgpID4ga01heFNpZ25pZmljYW50RGVjaW1hbERpZ2l0
cykgeworICAgICAgICAgICAgY2hhciBzaWduaWZpY2FudF9idWZmZXJba01heFNpZ25pZmljYW50
RGVjaW1hbERpZ2l0c107CisgICAgICAgICAgICBpbnQgc2lnbmlmaWNhbnRfZXhwb25lbnQ7Cisg
ICAgICAgICAgICBUcmltVG9NYXhTaWduaWZpY2FudERpZ2l0cyh0cmltbWVkLCBleHBvbmVudCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25pZmljYW50X2J1ZmZl
ciwgJnNpZ25pZmljYW50X2V4cG9uZW50KTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ0b2QoVmVj
dG9yPGNvbnN0IGNoYXI+KHNpZ25pZmljYW50X2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGtNYXhTaWduaWZpY2FudERlY2ltYWxEaWdpdHMpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduaWZpY2FudF9leHBvbmVudCk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGV4cG9uZW50ICsgdHJpbW1lZC5sZW5ndGgoKSAtIDEgPj0ga01heERl
Y2ltYWxQb3dlcikgeworICAgICAgICAgICAgcmV0dXJuIERvdWJsZTo6SW5maW5pdHkoKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoZXhwb25lbnQgKyB0cmltbWVkLmxlbmd0aCgpIDw9IGtNaW5E
ZWNpbWFsUG93ZXIpIHsKKyAgICAgICAgICAgIHJldHVybiAwLjA7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGRvdWJsZSBndWVzczsKKyAgICAgICAgaWYgKERvdWJsZVN0cnRvZCh0cmlt
bWVkLCBleHBvbmVudCwgJmd1ZXNzKSB8fAorICAgICAgICAgICAgRGl5RnBTdHJ0b2QodHJpbW1l
ZCwgZXhwb25lbnQsICZndWVzcykpIHsKKyAgICAgICAgICAgIHJldHVybiBndWVzczsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gQmlnbnVtU3RydG9kKHRyaW1tZWQsIGV4cG9uZW50LCBndWVz
cyk7CisgICAgfQorICAgIAorfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCisKK30g
Ly8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9k
dG9hL3N0cnRvZC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL3N0cnRvZC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjhlZDM1MGFkOGFjOGY3ODI1ZjA4NDE1OTI3Y2E2MGFlOTdmMzgyNWMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2Evc3RydG9kLmgKQEAg
LTAsMCArMSw0NSBAQAorLy8gQ29weXJpZ2h0IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8g
bWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAg
ICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisv
LyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisv
LyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWZuZGVmIERPVUJM
RV9DT05WRVJTSU9OX1NUUlRPRF9IXworI2RlZmluZSBET1VCTEVfQ09OVkVSU0lPTl9TVFJUT0Rf
SF8KKworI2luY2x1ZGUgInV0aWxzLmgiCisKK25hbWVzcGFjZSBXVEYgeworCituYW1lc3BhY2Ug
ZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIC8vIFRoZSBidWZmZXIgbXVzdCBvbmx5IGNv
bnRhaW4gZGlnaXRzIGluIHRoZSByYW5nZSBbMC05XS4gSXQgbXVzdCBub3QKKyAgICAvLyBjb250
YWluIGEgZG90IG9yIGEgc2lnbi4gSXQgbXVzdCBub3Qgc3RhcnQgd2l0aCAnMCcsIGFuZCBtdXN0
IG5vdCBiZSBlbXB0eS4KKyAgICBkb3VibGUgU3RydG9kKFZlY3Rvcjxjb25zdCBjaGFyPiBidWZm
ZXIsIGludCBleHBvbmVudCk7CisgICAgCit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNp
b24KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAgLy8gRE9VQkxFX0NPTlZFUlNJT05f
U1RSVE9EX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvdXRp
bHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS91dGlscy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmRlZmI1ZjEyYjcxNTUyMGE2NTVhY2FkMTY3YTE5MGNhNmQ5MTk2MmMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvdXRpbHMuaApAQCAtMCwwICsxLDMw
MyBAQAorLy8gQ29weXJpZ2h0IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8K
Ky8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8g
ICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAg
ICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
Ly8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWZuZGVmIERPVUJMRV9DT05WRVJT
SU9OX1VUSUxTX0hfCisjZGVmaW5lIERPVUJMRV9DT05WRVJTSU9OX1VUSUxTX0hfCisKKyNpbmNs
dWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmbmRlZiBBU1NFUlQKKyNp
bmNsdWRlIDxhc3NlcnQuaD4KKyNkZWZpbmUgQVNTRVJUKGNvbmRpdGlvbikgICAgICAoYXNzZXJ0
KGNvbmRpdGlvbikpCisjZGVmaW5lIFVOSU1QTEVNRU5URUQoKSAoYWJvcnQoKSkKKyNkZWZpbmUg
VU5SRUFDSEFCTEUoKSAgIChhYm9ydCgpKQorI2VuZGlmCisKKy8vIERvdWJsZSBvcGVyYXRpb25z
IGRldGVjdGlvbiBiYXNlZCBvbiB0YXJnZXQgYXJjaGl0ZWN0dXJlLgorLy8gTGludXggdXNlcyBh
IDgwYml0IHdpZGUgZmxvYXRpbmcgcG9pbnQgc3RhY2sgb24geDg2LiBUaGlzIGluZHVjZXMgZG91
YmxlCisvLyByb3VuZGluZywgd2hpY2ggaW4gdHVybiBsZWFkcyB0byB3cm9uZyByZXN1bHRzLgor
Ly8gQW4gZWFzeSB3YXkgdG8gdGVzdCBpZiB0aGUgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucyBh
cmUgY29ycmVjdCBpcyB0bworLy8gZXZhbHVhdGU6IDg5MjU1LjAvMWUyMi4gSWYgdGhlIGZsb2F0
aW5nLXBvaW50IHN0YWNrIGlzIDY0IGJpdHMgd2lkZSB0aGVuCisvLyB0aGUgcmVzdWx0IGlzIGVx
dWFsIHRvIDg5MjU1ZS0yMi4KKy8vIFRoZSBiZXN0IHdheSB0byB0ZXN0IHRoaXMsIGlzIHRvIGNy
ZWF0ZSBhIGRpdmlzaW9uLWZ1bmN0aW9uIGFuZCB0byBjb21wYXJlCisvLyB0aGUgb3V0cHV0IG9m
IHRoZSBkaXZpc2lvbiB3aXRoIHRoZSBleHBlY3RlZCByZXN1bHQuIChJbmxpbmluZyBtdXN0IGJl
CisvLyBkaXNhYmxlZC4pCisvLyBPbiBMaW51eCx4ODYgODkyNTVlLTIyICE9IERpdl9kb3VibGUo
ODkyNTUuMC8xZTIyKQorI2lmIGRlZmluZWQoX01fWDY0KSB8fCBkZWZpbmVkKF9feDg2XzY0X18p
IHx8IFwKK2RlZmluZWQoX19BUk1FTF9fKSB8fCBcCitkZWZpbmVkKF9NSVBTX0FSQ0hfTUlQUzMy
UjIpCisjZGVmaW5lIERPVUJMRV9DT05WRVJTSU9OX0NPUlJFQ1RfRE9VQkxFX09QRVJBVElPTlMg
MQorI2VsaWYgZGVmaW5lZChfTV9JWDg2KSB8fCBkZWZpbmVkKF9faTM4Nl9fKQorI2lmIGRlZmlu
ZWQoX1dJTjMyKQorLy8gV2luZG93cyB1c2VzIGEgNjRiaXQgd2lkZSBmbG9hdGluZyBwb2ludCBz
dGFjay4KKyNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05fQ09SUkVDVF9ET1VCTEVfT1BFUkFUSU9O
UyAxCisjZWxzZQorI3VuZGVmIERPVUJMRV9DT05WRVJTSU9OX0NPUlJFQ1RfRE9VQkxFX09QRVJB
VElPTlMKKyNlbmRpZiAgLy8gX1dJTjMyCisjZWxzZQorI2Vycm9yIFRhcmdldCBhcmNoaXRlY3R1
cmUgd2FzIG5vdCBkZXRlY3RlZCBhcyBzdXBwb3J0ZWQgYnkgRG91YmxlLUNvbnZlcnNpb24uCisj
ZW5kaWYKKworCisjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fTUlOR1czMl9fKQor
Cit0eXBlZGVmIHNpZ25lZCBjaGFyIGludDhfdDsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50
OF90OwordHlwZWRlZiBzaG9ydCBpbnQxNl90OyAgLy8gTk9MSU5UCit0eXBlZGVmIHVuc2lnbmVk
IHNob3J0IHVpbnQxNl90OyAgLy8gTk9MSU5UCit0eXBlZGVmIGludCBpbnQzMl90OwordHlwZWRl
ZiB1bnNpZ25lZCBpbnQgdWludDMyX3Q7Cit0eXBlZGVmIF9faW50NjQgaW50NjRfdDsKK3R5cGVk
ZWYgdW5zaWduZWQgX19pbnQ2NCB1aW50NjRfdDsKKy8vIGludHB0cl90IGFuZCBmcmllbmRzIGFy
ZSBkZWZpbmVkIGluIGNydGRlZnMuaCB0aHJvdWdoIHN0ZGlvLmguCisKKyNlbHNlCisKKyNpbmNs
dWRlIDxzdGRpbnQuaD4KKworI2VuZGlmCisKKy8vIFRoZSBmb2xsb3dpbmcgbWFjcm8gd29ya3Mg
b24gYm90aCAzMiBhbmQgNjQtYml0IHBsYXRmb3Jtcy4KKy8vIFVzYWdlOiBpbnN0ZWFkIG9mIHdy
aXRpbmcgMHgxMjM0NTY3ODkwMTIzNDU2CisvLyAgICAgIHdyaXRlIFVJTlQ2NF8yUEFSVF9DKDB4
MTIzNDU2NzgsOTAxMjM0NTYpOworI2RlZmluZSBVSU5UNjRfMlBBUlRfQyhhLCBiKSAoKChzdGF0
aWNfY2FzdDx1aW50NjRfdD4oYSkgPDwgMzIpICsgMHgjI2IjI3UpKQorCisKKy8vIFRoZSBleHBy
ZXNzaW9uIEFSUkFZX1NJWkUoYSkgaXMgYSBjb21waWxlLXRpbWUgY29uc3RhbnQgb2YgdHlwZQor
Ly8gc2l6ZV90IHdoaWNoIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBvZiB0aGUg
Z2l2ZW4KKy8vIGFycmF5LiBZb3Ugc2hvdWxkIG9ubHkgdXNlIEFSUkFZX1NJWkUgb24gc3RhdGlj
YWxseSBhbGxvY2F0ZWQKKy8vIGFycmF5cy4KKyNkZWZpbmUgQVJSQVlfU0laRShhKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKChzaXplb2YoYSkgLyBzaXplb2YoKihhKSkp
IC8gICAgICAgICAgICAgICAgICAgICAgICAgXAorc3RhdGljX2Nhc3Q8c2l6ZV90PighKHNpemVv
ZihhKSAlIHNpemVvZigqKGEpKSkpKQorCisvLyBBIG1hY3JvIHRvIGRpc2FsbG93IHRoZSBldmls
IGNvcHkgY29uc3RydWN0b3IgYW5kIG9wZXJhdG9yPSBmdW5jdGlvbnMKKy8vIFRoaXMgc2hvdWxk
IGJlIHVzZWQgaW4gdGhlIHByaXZhdGU6IGRlY2xhcmF0aW9ucyBmb3IgYSBjbGFzcworI2RlZmlu
ZSBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVHlwZU5hbWUpICAgICAgXAorVHlwZU5hbWUoY29u
c3QgVHlwZU5hbWUmKTsgICAgICAgICAgICAgICAgICAgIFwKK3ZvaWQgb3BlcmF0b3I9KGNvbnN0
IFR5cGVOYW1lJikKKworLy8gQSBtYWNybyB0byBkaXNhbGxvdyBhbGwgdGhlIGltcGxpY2l0IGNv
bnN0cnVjdG9ycywgbmFtZWx5IHRoZQorLy8gZGVmYXVsdCBjb25zdHJ1Y3RvciwgY29weSBjb25z
dHJ1Y3RvciBhbmQgb3BlcmF0b3I9IGZ1bmN0aW9ucy4KKy8vCisvLyBUaGlzIHNob3VsZCBiZSB1
c2VkIGluIHRoZSBwcml2YXRlOiBkZWNsYXJhdGlvbnMgZm9yIGEgY2xhc3MKKy8vIHRoYXQgd2Fu
dHMgdG8gcHJldmVudCBhbnlvbmUgZnJvbSBpbnN0YW50aWF0aW5nIGl0LiBUaGlzIGlzCisvLyBl
c3BlY2lhbGx5IHVzZWZ1bCBmb3IgY2xhc3NlcyBjb250YWluaW5nIG9ubHkgc3RhdGljIG1ldGhv
ZHMuCisjZGVmaW5lIERJU0FMTE9XX0lNUExJQ0lUX0NPTlNUUlVDVE9SUyhUeXBlTmFtZSkgXAor
VHlwZU5hbWUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitESVNBTExP
V19DT1BZX0FORF9BU1NJR04oVHlwZU5hbWUpCisKK25hbWVzcGFjZSBXVEYgeworCituYW1lc3Bh
Y2UgZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIHN0YXRpYyBjb25zdCBpbnQga0NoYXJT
aXplID0gc2l6ZW9mKGNoYXIpOworICAgIAorICAgIC8vIFJldHVybnMgdGhlIG1heGltdW0gb2Yg
dGhlIHR3byBwYXJhbWV0ZXJzLgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHN0YXRp
YyBUIE1heChUIGEsIFQgYikgeworICAgICAgICByZXR1cm4gYSA8IGIgPyBiIDogYTsKKyAgICB9
CisgICAgCisgICAgCisgICAgLy8gUmV0dXJucyB0aGUgbWluaW11bSBvZiB0aGUgdHdvIHBhcmFt
ZXRlcnMuCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3RhdGljIFQgTWluKFQgYSwg
VCBiKSB7CisgICAgICAgIHJldHVybiBhIDwgYiA/IGEgOiBiOworICAgIH0KKyAgICAKKyAgICAK
KyAgICBpbmxpbmUgaW50IFN0ckxlbmd0aChjb25zdCBjaGFyKiBzdHJpbmcpIHsKKyAgICAgICAg
c2l6ZV90IGxlbmd0aCA9IHN0cmxlbihzdHJpbmcpOworICAgICAgICBBU1NFUlQobGVuZ3RoID09
IHN0YXRpY19jYXN0PHNpemVfdD4oc3RhdGljX2Nhc3Q8aW50PihsZW5ndGgpKSk7CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxlbmd0aCk7CisgICAgfQorICAgIAorICAgIC8vIFRo
aXMgaXMgYSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgVjgncyBWZWN0b3IgY2xhc3MuCisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgY2xhc3MgVmVjdG9yIHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIFZlY3RvcigpIDogc3RhcnRfKE5VTEwpLCBsZW5ndGhfKDApIHt9CisgICAgICAgIFZlY3Rv
cihUKiBkYXRhLCBpbnQgbGVuZ3RoKSA6IHN0YXJ0XyhkYXRhKSwgbGVuZ3RoXyhsZW5ndGgpIHsK
KyAgICAgICAgICAgIEFTU0VSVChsZW5ndGggPT0gMCB8fCAobGVuZ3RoID4gMCAmJiBkYXRhICE9
IE5VTEwpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJucyBhIHZlY3Rv
ciB1c2luZyB0aGUgc2FtZSBiYWNraW5nIHN0b3JhZ2UgYXMgdGhpcyBvbmUsCisgICAgICAgIC8v
IHNwYW5uaW5nIGZyb20gYW5kIGluY2x1ZGluZyAnZnJvbScsIHRvIGJ1dCBub3QgaW5jbHVkaW5n
ICd0bycuCisgICAgICAgIFZlY3RvcjxUPiBTdWJWZWN0b3IoaW50IGZyb20sIGludCB0bykgewor
ICAgICAgICAgICAgQVNTRVJUKHRvIDw9IGxlbmd0aF8pOworICAgICAgICAgICAgQVNTRVJUKGZy
b20gPCB0byk7CisgICAgICAgICAgICBBU1NFUlQoMCA8PSBmcm9tKTsKKyAgICAgICAgICAgIHJl
dHVybiBWZWN0b3I8VD4oc3RhcnQoKSArIGZyb20sIHRvIC0gZnJvbSk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIC8vIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgdmVjdG9yLgorICAg
ICAgICBpbnQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbGVuZ3RoXzsgfQorICAgICAgICAKKyAg
ICAgICAgLy8gUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgdmVjdG9yIGlzIGVtcHR5LgorICAg
ICAgICBib29sIGlzX2VtcHR5KCkgY29uc3QgeyByZXR1cm4gbGVuZ3RoXyA9PSAwOyB9CisgICAg
ICAgIAorICAgICAgICAvLyBSZXR1cm5zIHRoZSBwb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUg
ZGF0YSBpbiB0aGUgdmVjdG9yLgorICAgICAgICBUKiBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIHN0
YXJ0XzsgfQorICAgICAgICAKKyAgICAgICAgLy8gQWNjZXNzIGluZGl2aWR1YWwgdmVjdG9yIGVs
ZW1lbnRzIC0gY2hlY2tzIGJvdW5kcyBpbiBkZWJ1ZyBtb2RlLgorICAgICAgICBUJiBvcGVyYXRv
cltdKGludCBpbmRleCkgY29uc3QgeworICAgICAgICAgICAgQVNTRVJUKDAgPD0gaW5kZXggJiYg
aW5kZXggPCBsZW5ndGhfKTsKKyAgICAgICAgICAgIHJldHVybiBzdGFydF9baW5kZXhdOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBUJiBmaXJzdCgpIHsgcmV0dXJuIHN0YXJ0X1swXTsg
fQorICAgICAgICAKKyAgICAgICAgVCYgbGFzdCgpIHsgcmV0dXJuIHN0YXJ0X1tsZW5ndGhfIC0g
MV07IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgVCogc3RhcnRfOworICAgICAg
ICBpbnQgbGVuZ3RoXzsKKyAgICB9OworICAgIAorICAgIAorICAgIC8vIEhlbHBlciBjbGFzcyBm
b3IgYnVpbGRpbmcgcmVzdWx0IHN0cmluZ3MgaW4gYSBjaGFyYWN0ZXIgYnVmZmVyLiBUaGUKKyAg
ICAvLyBwdXJwb3NlIG9mIHRoZSBjbGFzcyBpcyB0byB1c2Ugc2FmZSBvcGVyYXRpb25zIHRoYXQg
Y2hlY2tzIHRoZQorICAgIC8vIGJ1ZmZlciBib3VuZHMgb24gYWxsIG9wZXJhdGlvbnMgaW4gZGVi
dWcgbW9kZS4KKyAgICBjbGFzcyBTdHJpbmdCdWlsZGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IFN0cmluZ0J1aWxkZXIoY2hhciogYnVmZmVyLCBpbnQgc2l6ZSkKKyAgICAgICAgOiBidWZmZXJf
KGJ1ZmZlciwgc2l6ZSksIHBvc2l0aW9uXygwKSB7IH0KKyAgICAgICAgCisgICAgICAgIH5TdHJp
bmdCdWlsZGVyKCkgeyBpZiAoIWlzX2ZpbmFsaXplZCgpKSBGaW5hbGl6ZSgpOyB9CisgICAgICAg
IAorICAgICAgICBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGJ1ZmZlcl8ubGVuZ3RoKCk7IH0K
KyAgICAgICAgCisgICAgICAgIC8vIEdldCB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgYnVp
bGRlci4KKyAgICAgICAgaW50IHBvc2l0aW9uKCkgY29uc3QgeworICAgICAgICAgICAgQVNTRVJU
KCFpc19maW5hbGl6ZWQoKSk7CisgICAgICAgICAgICByZXR1cm4gcG9zaXRpb25fOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICAvLyBSZXNldCB0aGUgcG9zaXRpb24uCisgICAgICAgIHZv
aWQgUmVzZXQoKSB7IHBvc2l0aW9uXyA9IDA7IH0KKyAgICAgICAgCisgICAgICAgIC8vIEFkZCBh
IHNpbmdsZSBjaGFyYWN0ZXIgdG8gdGhlIGJ1aWxkZXIuIEl0IGlzIG5vdCBhbGxvd2VkIHRvIGFk
ZAorICAgICAgICAvLyAwLWNoYXJhY3RlcnM7IHVzZSB0aGUgRmluYWxpemUoKSBtZXRob2QgdG8g
dGVybWluYXRlIHRoZSBzdHJpbmcKKyAgICAgICAgLy8gaW5zdGVhZC4KKyAgICAgICAgdm9pZCBB
ZGRDaGFyYWN0ZXIoY2hhciBjKSB7CisgICAgICAgICAgICBBU1NFUlQoYyAhPSAnXDAnKTsKKyAg
ICAgICAgICAgIEFTU0VSVCghaXNfZmluYWxpemVkKCkgJiYgcG9zaXRpb25fIDwgYnVmZmVyXy5s
ZW5ndGgoKSk7CisgICAgICAgICAgICBidWZmZXJfW3Bvc2l0aW9uXysrXSA9IGM7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIC8vIEFkZCBhbiBlbnRpcmUgc3RyaW5nIHRvIHRoZSBidWls
ZGVyLiBVc2VzIHN0cmxlbigpIGludGVybmFsbHkgdG8KKyAgICAgICAgLy8gY29tcHV0ZSB0aGUg
bGVuZ3RoIG9mIHRoZSBpbnB1dCBzdHJpbmcuCisgICAgICAgIHZvaWQgQWRkU3RyaW5nKGNvbnN0
IGNoYXIqIHMpIHsKKyAgICAgICAgICAgIEFkZFN1YnN0cmluZyhzLCBTdHJMZW5ndGgocykpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBBZGQgdGhlIGZpcnN0ICduJyBjaGFyYWN0
ZXJzIG9mIHRoZSBnaXZlbiBzdHJpbmcgJ3MnIHRvIHRoZQorICAgICAgICAvLyBidWlsZGVyLiBU
aGUgaW5wdXQgc3RyaW5nIG11c3QgaGF2ZSBlbm91Z2ggY2hhcmFjdGVycy4KKyAgICAgICAgdm9p
ZCBBZGRTdWJzdHJpbmcoY29uc3QgY2hhciogcywgaW50IG4pIHsKKyAgICAgICAgICAgIEFTU0VS
VCghaXNfZmluYWxpemVkKCkgJiYgcG9zaXRpb25fICsgbiA8IGJ1ZmZlcl8ubGVuZ3RoKCkpOwor
ICAgICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHNpemVfdD4obikgPD0gc3RybGVuKHMpKTsK
KyAgICAgICAgICAgIG1lbWNweSgmYnVmZmVyX1twb3NpdGlvbl9dLCBzLCBuICoga0NoYXJTaXpl
KTsKKyAgICAgICAgICAgIHBvc2l0aW9uXyArPSBuOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICAKKyAgICAgICAgLy8gQWRkIGNoYXJhY3RlciBwYWRkaW5nIHRvIHRoZSBidWlsZGVyLiBJ
ZiBjb3VudCBpcyBub24tcG9zaXRpdmUsCisgICAgICAgIC8vIG5vdGhpbmcgaXMgYWRkZWQgdG8g
dGhlIGJ1aWxkZXIuCisgICAgICAgIHZvaWQgQWRkUGFkZGluZyhjaGFyIGMsIGludCBjb3VudCkg
eworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAg
ICAgICAgICAgQWRkQ2hhcmFjdGVyKGMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICAvLyBGaW5hbGl6ZSB0aGUgc3RyaW5nIGJ5IDAtdGVybWluYXRpbmcgaXQg
YW5kIHJldHVybmluZyB0aGUgYnVmZmVyLgorICAgICAgICBjaGFyKiBGaW5hbGl6ZSgpIHsKKyAg
ICAgICAgICAgIEFTU0VSVCghaXNfZmluYWxpemVkKCkgJiYgcG9zaXRpb25fIDwgYnVmZmVyXy5s
ZW5ndGgoKSk7CisgICAgICAgICAgICBidWZmZXJfW3Bvc2l0aW9uX10gPSAnXDAnOworICAgICAg
ICAgICAgLy8gTWFrZSBzdXJlIG5vYm9keSBtYW5hZ2VkIHRvIGFkZCBhIDAtY2hhcmFjdGVyIHRv
IHRoZQorICAgICAgICAgICAgLy8gYnVmZmVyIHdoaWxlIGJ1aWxkaW5nIHRoZSBzdHJpbmcuCisg
ICAgICAgICAgICBBU1NFUlQoc3RybGVuKGJ1ZmZlcl8uc3RhcnQoKSkgPT0gc3RhdGljX2Nhc3Q8
c2l6ZV90Pihwb3NpdGlvbl8pKTsKKyAgICAgICAgICAgIHBvc2l0aW9uXyA9IC0xOworICAgICAg
ICAgICAgQVNTRVJUKGlzX2ZpbmFsaXplZCgpKTsKKyAgICAgICAgICAgIHJldHVybiBidWZmZXJf
LnN0YXJ0KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgVmVj
dG9yPGNoYXI+IGJ1ZmZlcl87CisgICAgICAgIGludCBwb3NpdGlvbl87CisgICAgICAgIAorICAg
ICAgICBib29sIGlzX2ZpbmFsaXplZCgpIGNvbnN0IHsgcmV0dXJuIHBvc2l0aW9uXyA8IDA7IH0K
KyAgICAgICAgCisgICAgICAgIERJU0FMTE9XX0lNUExJQ0lUX0NPTlNUUlVDVE9SUyhTdHJpbmdC
dWlsZGVyKTsKKyAgICB9OworICAgIAorICAgIC8vIFRoZSB0eXBlLWJhc2VkIGFsaWFzaW5nIHJ1
bGUgYWxsb3dzIHRoZSBjb21waWxlciB0byBhc3N1bWUgdGhhdCBwb2ludGVycyBvZgorICAgIC8v
IGRpZmZlcmVudCB0eXBlcyAoZm9yIHNvbWUgZGVmaW5pdGlvbiBvZiBkaWZmZXJlbnQpIG5ldmVy
IGFsaWFzIGVhY2ggb3RoZXIuCisgICAgLy8gVGh1cyB0aGUgZm9sbG93aW5nIGNvZGUgZG9lcyBu
b3Qgd29yazoKKyAgICAvLworICAgIC8vIGZsb2F0IGYgPSBmb28oKTsKKyAgICAvLyBpbnQgZmJp
dHMgPSAqKGludCopKCZmKTsKKyAgICAvLworICAgIC8vIFRoZSBjb21waWxlciAna25vd3MnIHRo
YXQgdGhlIGludCBwb2ludGVyIGNhbid0IHJlZmVyIHRvIGYgc2luY2UgdGhlIHR5cGVzCisgICAg
Ly8gZG9uJ3QgbWF0Y2gsIHNvIHRoZSBjb21waWxlciBtYXkgY2FjaGUgZiBpbiBhIHJlZ2lzdGVy
LCBsZWF2aW5nIHJhbmRvbSBkYXRhCisgICAgLy8gaW4gZmJpdHMuICBVc2luZyBDKysgc3R5bGUg
Y2FzdHMgbWFrZXMgbm8gZGlmZmVyZW5jZSwgaG93ZXZlciBhIHBvaW50ZXIgdG8KKyAgICAvLyBj
aGFyIGRhdGEgaXMgYXNzdW1lZCB0byBhbGlhcyBhbnkgb3RoZXIgcG9pbnRlci4gIFRoaXMgaXMg
dGhlICdtZW1jcHkKKyAgICAvLyBleGNlcHRpb24nLgorICAgIC8vCisgICAgLy8gQml0X2Nhc3Qg
dXNlcyB0aGUgbWVtY3B5IGV4Y2VwdGlvbiB0byBtb3ZlIHRoZSBiaXRzIGZyb20gYSB2YXJpYWJs
ZSBvZiBvbmUKKyAgICAvLyB0eXBlIG9mIGEgdmFyaWFibGUgb2YgYW5vdGhlciB0eXBlLiAgT2Yg
Y291cnNlIHRoZSBlbmQgcmVzdWx0IGlzIGxpa2VseSB0bworICAgIC8vIGJlIGltcGxlbWVudGF0
aW9uIGRlcGVuZGVudC4gIE1vc3QgY29tcGlsZXJzIChnY2MtNC4yIGFuZCBNU1ZDIDIwMDUpCisg
ICAgLy8gd2lsbCBjb21wbGV0ZWx5IG9wdGltaXplIEJpdENhc3QgYXdheS4KKyAgICAvLworICAg
IC8vIFRoZXJlIGlzIGFuIGFkZGl0aW9uYWwgdXNlIGZvciBCaXRDYXN0LgorICAgIC8vIFJlY2Vu
dCBnY2NzIHdpbGwgd2FybiB3aGVuIHRoZXkgc2VlIGNhc3RzIHRoYXQgbWF5IHJlc3VsdCBpbiBi
cmVha2FnZSBkdWUgdG8KKyAgICAvLyB0aGUgdHlwZS1iYXNlZCBhbGlhc2luZyBydWxlLiAgSWYg
eW91IGhhdmUgY2hlY2tlZCB0aGF0IHRoZXJlIGlzIG5vIGJyZWFrYWdlCisgICAgLy8geW91IGNh
biB1c2UgQml0Q2FzdCB0byBjYXN0IG9uZSBwb2ludGVyIHR5cGUgdG8gYW5vdGhlci4gIFRoaXMg
Y29uZnVzZXMgZ2NjCisgICAgLy8gZW5vdWdoIHRoYXQgaXQgY2FuIG5vIGxvbmdlciBzZWUgdGhh
dCB5b3UgaGF2ZSBjYXN0IG9uZSBwb2ludGVyIHR5cGUgdG8KKyAgICAvLyBhbm90aGVyIHRodXMg
YXZvaWRpbmcgdGhlIHdhcm5pbmcuCisgICAgdGVtcGxhdGUgPGNsYXNzIERlc3QsIGNsYXNzIFNv
dXJjZT4KKyAgICBpbmxpbmUgRGVzdCBCaXRDYXN0KGNvbnN0IFNvdXJjZSYgc291cmNlKSB7Cisg
ICAgICAgIC8vIENvbXBpbGUgdGltZSBhc3NlcnRpb246IHNpemVvZihEZXN0KSA9PSBzaXplb2Yo
U291cmNlKQorICAgICAgICAvLyBBIGNvbXBpbGUgZXJyb3IgaGVyZSBtZWFucyB5b3VyIERlc3Qg
YW5kIFNvdXJjZSBoYXZlIGRpZmZlcmVudCBzaXplcy4KKyAgICAgICAgdHlwZWRlZiBjaGFyIFZl
cmlmeVNpemVzQXJlRXF1YWxbc2l6ZW9mKERlc3QpID09IHNpemVvZihTb3VyY2UpID8gMSA6IC0x
XTsKKyAgICAgICAgCisgICAgICAgIERlc3QgZGVzdDsKKyAgICAgICAgbWVtY3B5KCZkZXN0LCAm
c291cmNlLCBzaXplb2YoZGVzdCkpOworICAgICAgICByZXR1cm4gZGVzdDsKKyAgICB9CisgICAg
CisgICAgdGVtcGxhdGUgPGNsYXNzIERlc3QsIGNsYXNzIFNvdXJjZT4KKyAgICBpbmxpbmUgRGVz
dCBCaXRDYXN0KFNvdXJjZSogc291cmNlKSB7CisgICAgICAgIHJldHVybiBCaXRDYXN0PERlc3Q+
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihzb3VyY2UpKTsKKyAgICB9CisgICAgCit9ICAv
LyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNl
bmRpZiAgLy8gRE9VQkxFX0NPTlZFUlNJT05fVVRJTFNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvd3RmLnByaSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvd3Rm
LnByaQppbmRleCA1ZTQ4ZjlhNTAxZGMzOWUxZjVhYzYyOGI5NTEzOTllNjg2YjM1NDcwLi42NjA2
MTgyNDViMmYzZjNkNmNkMmE0OWRhNDYzYTRhNjVkOGRhODMwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL3d0Zi5wcmkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi93dGYucHJpCkBAIC02LDggKzYsMTYgQEAgU09VUkNFUyArPSBcCiAgICAgd3RmL0NyeXB0b2dy
YXBoaWNhbGx5UmFuZG9tTnVtYmVyLmNwcCBcCiAgICAgd3RmL0N1cnJlbnRUaW1lLmNwcCBcCiAg
ICAgd3RmL0RhdGVNYXRoLmNwcCBcCi0gICAgd3RmL2R0b2EuY3BwIFwKICAgICB3dGYvRGVjaW1h
bE51bWJlci5jcHAgXAorICAgIHd0Zi9kdG9hLmNwcCBcCisgICAgd3RmL2R0b2EvYmlnbnVtLWR0
b2EuY2MgXAorICAgIHd0Zi9kdG9hL2JpZ251bS5jYyBcCisgICAgd3RmL2R0b2EvY2FjaGVkLXBv
d2Vycy5jYyBcCisgICAgd3RmL2R0b2EvZGl5LWZwLmNjIFwKKyAgICB3dGYvZHRvYS9kb3VibGUt
Y29udmVyc2lvbi5jYyBcCisgICAgd3RmL2R0b2EvZmFzdC1kdG9hLmNjIFwKKyAgICB3dGYvZHRv
YS9maXhlZC1kdG9hLmNjIFwKKyAgICB3dGYvZHRvYS9zdHJ0b2QuY2MgXAogICAgIHd0Zi9GYXN0
TWFsbG9jLmNwcCBcCiAgICAgd3RmL2dvYmplY3QvR093blB0ci5jcHAgXAogICAgIHd0Zi9nb2Jq
ZWN0L0dSZWZQdHIuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2NTg1YzU0ZjM0ZjE1Zjg5YmVlZTI2ODQ2
NzIwMmJkOGI2MDZlZjUzLi43OGE4ODQ5MzkwYTI2ZDRhNTEwYWEyODFjMjVjNGQ3YWJhMDY0ZWY0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTEtMDgtMjQgIE1hcmsgSGFobmVuYmVy
ZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KKworICAgICAgICBJbmNvcnBvcmF0ZSBuZXdlciwg
ZmFzdGVyIGR0b2EgbGlicmFyeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjYzNDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgQWRkZWQgbmV3IGR0b2EgbGlicmFy
eSBhdCBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZG91YmxlLWNvbnZlcnNpb24vLgorICAgICAg
ICBSZXBsYWNlZCBvbGQgY2FsbCB0byBkdG9hLiAgVGhlIG5ldyBsaWJyYXJ5IGlzIG11Y2ggZmFz
dGVyIHRoYW4gdGhlIG9sZCBvbmUuCisgICAgICAgIFdlIHN0aWxsIHVzZSB0aGUgb2xkIGR0b2Eg
Zm9yIHNvbWUgc3R1ZmYgaW4gV2ViQ29yZSBhcyB3ZWxsIGFzIHRoZSBvbGQgc3RydG9kLCAKKyAg
ICAgICAgYnV0IHdlIGNhbiBwaGFzZSB0aGVzZSBvdXQgZXZlbnR1YWxseSBhcyB3ZWxsLgorCisg
ICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvd3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uaDog
QWRkZWQuCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovY29weUZvcndhcmRpbmdIZWFkZXJzLmNt
ZDoKKyAgICAgICAgKiBjc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Zm9ybWF0TnVtYmVyKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21z
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6ZUZvck51bWJlclR5cGUpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQmFzaWNWYWx1ZTo6d3JpdGVKU09OKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6c2VyaWFsaXplZCk6CisKIDIw
MTEtMDgtMjQgIFRvbW15IFdpZGVuZmx5Y2h0ICA8dG9tbXl3QGdvb2dsZS5jb20+CiAKICAgICAg
ICAgTWVkaWFTdHJlYW0gQVBJOiBhZGQgY3JlYXRlT2JqZWN0VVJMIGZ1bmN0aW9uYWxpdHkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9kdG9hL2RvdWJs
ZS1jb252ZXJzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvZHRv
YS9kb3VibGUtY29udmVyc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg2ZmIxMjc4OTM0ZGIwN2RjMzNmZjUy
MTkyM2UxY2EzOWZlNjQ1MDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Gb3J3
YXJkaW5nSGVhZGVycy93dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5oCkBAIC0wLDAgKzEsNCBA
QAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9kb3VibGVfY29udmVyc2lvbl9oCisjZGVmaW5lIFdlYkNv
cmVfRldEX2RvdWJsZV9jb252ZXJzaW9uX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9kb3Vi
bGUtY29udmVyc2lvbi5oPgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9jb3B5Rm9yd2FyZGluZ0hlYWRlcnMuY21kIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovY29weUZvcndhcmRpbmdIZWFkZXJzLmNtZAppbmRleCBkYWQ1YWRmMzkyYjZh
N2Q3NDdlOTgxNjcxYmYzMjkzYTM5ZTg5ZmYwLi4yMjRjZTAzMjg2MWYwMGFmOTUwYzFiNWUyZTJh
ODhjM2U4OWM2ZGE5IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9j
b3B5Rm9yd2FyZGluZ0hlYWRlcnMuY21kCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL2NvcHlGb3J3YXJkaW5nSGVhZGVycy5jbWQKQEAgLTEwLDYgKzEwLDcgQEAgbWtkaXIgMj5O
VUwgIiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGluY2x1ZGVcV2ViQ29yZVxGb3J3YXJkaW5nSGVh
ZGVyc1xtYXNtIgogbWtkaXIgMj5OVUwgIiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGluY2x1ZGVc
V2ViQ29yZVxGb3J3YXJkaW5nSGVhZGVyc1xwcm9maWxlciIKIG1rZGlyIDI+TlVMICIlQ09ORklH
VVJBVElPTkJVSUxERElSJVxpbmNsdWRlXFdlYkNvcmVcRm9yd2FyZGluZ0hlYWRlcnNcaGVhcCIK
IG1rZGlyIDI+TlVMICIlQ09ORklHVVJBVElPTkJVSUxERElSJVxpbmNsdWRlXFdlYkNvcmVcRm9y
d2FyZGluZ0hlYWRlcnNcd3RmIgorbWtkaXIgMj5OVUwgIiVDT05GSUdVUkFUSU9OQlVJTERESVIl
XGluY2x1ZGVcV2ViQ29yZVxGb3J3YXJkaW5nSGVhZGVyc1x3dGZcZHRvYSIKIG1rZGlyIDI+TlVM
ICIlQ09ORklHVVJBVElPTkJVSUxERElSJVxpbmNsdWRlXFdlYkNvcmVcRm9yd2FyZGluZ0hlYWRl
cnNcd3RmXHRleHQiCiBta2RpciAyPk5VTCAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVcaW5jbHVk
ZVxXZWJDb3JlXEZvcndhcmRpbmdIZWFkZXJzXHd0Zlx1bmljb2RlIgogbWtkaXIgMj5OVUwgIiVD
T05GSUdVUkFUSU9OQlVJTERESVIlXGluY2x1ZGVcV2ViQ29yZVxGb3J3YXJkaW5nSGVhZGVyc1x3
dGZcdW5pY29kZVxpY3UiCkBAIC04MSw2ICs4Miw3IEBAIHhjb3B5IC95IC9kICIlUHJvamVjdERp
ciUuLlxGb3J3YXJkaW5nSGVhZGVyc1xtYXNtXCouaCIgIiVDT05GSUdVUkFUSU9OQlVJTERESVIl
CiB4Y29weSAveSAvZCAiJVByb2plY3REaXIlLi5cRm9yd2FyZGluZ0hlYWRlcnNccHJvZmlsZXJc
Ki5oIiAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVcaW5jbHVkZVxXZWJDb3JlXEZvcndhcmRpbmdI
ZWFkZXJzXHByb2ZpbGVyIgogeGNvcHkgL3kgL2QgIiVQcm9qZWN0RGlyJS4uXEZvcndhcmRpbmdI
ZWFkZXJzXGhlYXBcKi5oIiAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVcaW5jbHVkZVxXZWJDb3Jl
XEZvcndhcmRpbmdIZWFkZXJzXGhlYXAiCiB4Y29weSAveSAvZCAiJVByb2plY3REaXIlLi5cRm9y
d2FyZGluZ0hlYWRlcnNcd3RmXCouaCIgIiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGluY2x1ZGVc
V2ViQ29yZVxGb3J3YXJkaW5nSGVhZGVyc1x3dGYiCit4Y29weSAveSAvZCAiJVByb2plY3REaXIl
Li5cRm9yd2FyZGluZ0hlYWRlcnNcd3RmXGR0b2FcKi5oIiAiJUNPTkZJR1VSQVRJT05CVUlMRERJ
UiVcaW5jbHVkZVxXZWJDb3JlXEZvcndhcmRpbmdIZWFkZXJzXHd0ZlxkdG9hIgogeGNvcHkgL3kg
L2QgIiVQcm9qZWN0RGlyJS4uXEZvcndhcmRpbmdIZWFkZXJzXHd0Zlx0ZXh0XCouaCIgIiVDT05G
SUdVUkFUSU9OQlVJTERESVIlXGluY2x1ZGVcV2ViQ29yZVxGb3J3YXJkaW5nSGVhZGVyc1x3dGZc
dGV4dCIKIHhjb3B5IC95IC9kICIlUHJvamVjdERpciUuLlxGb3J3YXJkaW5nSGVhZGVyc1x3dGZc
dW5pY29kZVwqLmgiICIlQ09ORklHVVJBVElPTkJVSUxERElSJVxpbmNsdWRlXFdlYkNvcmVcRm9y
d2FyZGluZ0hlYWRlcnNcd3RmXHVuaWNvZGUiCiB4Y29weSAveSAvZCAiJVByb2plY3REaXIlLi5c
Rm9yd2FyZGluZ0hlYWRlcnNcd3RmXHVuaWNvZGVcaWN1XCouaCIgIiVDT05GSUdVUkFUSU9OQlVJ
TERESVIlXGluY2x1ZGVcV2ViQ29yZVxGb3J3YXJkaW5nSGVhZGVyc1x3dGZcdW5pY29kZVxpY3Ui
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAppbmRleCA5ODE2ZGE1Nzcw
NzFlMjc0NjBiYjM0OGEyNmEyOTBlNTdhOWM0NjQ4Li5iNzAxMzgzYzk2MjJmYjY2MzY0MmZiMDli
MDM2ZDdlMzRmMGNjMWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0
aXZlVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5j
cHAKQEAgLTYwOSw3ICs2MDksNyBAQCBpbnQgQ1NTUHJpbWl0aXZlVmFsdWU6OmdldElkZW50KCkg
Y29uc3QKIHN0YXRpYyBTdHJpbmcgZm9ybWF0TnVtYmVyKGRvdWJsZSBudW1iZXIpCiB7CiAgICAg
RGVjaW1hbE51bWJlciBkZWNpbWFsKG51bWJlcik7Ci0gICAgCisKICAgICBTdHJpbmdCdWZmZXIg
YnVmZmVyKGRlY2ltYWwuYnVmZmVyTGVuZ3RoRm9yU3RyaW5nRGVjaW1hbCgpKTsKICAgICB1bnNp
Z25lZCBsZW5ndGggPSBkZWNpbWFsLnRvU3RyaW5nRGVjaW1hbChidWZmZXIuY2hhcmFjdGVycygp
LCBidWZmZXIubGVuZ3RoKCkpOwogICAgIEFTU0VSVF9VTlVTRUQobGVuZ3RoLCBsZW5ndGggPT0g
YnVmZmVyLmxlbmd0aCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxQYXJzZXJJZGlvbXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBh
cnNlcklkaW9tcy5jcHAKaW5kZXggMDU4YmI5MzM5Y2ZmZjVkMTgzZTQ5ZjdkMjU4ODI1ODczMDIw
Y2ExMi4uMDM2MjIxYjIxYjE2ZjhmNTJhZTI1NzJmYmQzNDYwOTg5NmI3YWEyNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5jcHAKQEAgLTYzLDgg
KzYzLDcgQEAgU3RyaW5nIHNlcmlhbGl6ZUZvck51bWJlclR5cGUoZG91YmxlIG51bWJlcikKICAg
ICAvLyBBY2NvcmRpbmcgdG8gSFRNTDUsICJ0aGUgYmVzdCByZXByZXNlbnRhdGlvbiBvZiB0aGUg
bnVtYmVyIG4gYXMgYSBmbG9hdGluZwogICAgIC8vIHBvaW50IG51bWJlciIgaXMgYSBzdHJpbmcg
cHJvZHVjZWQgYnkgYXBwbHlpbmcgVG9TdHJpbmcoKSB0byBuLgogICAgIE51bWJlclRvU3RyaW5n
QnVmZmVyIGJ1ZmZlcjsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBudW1iZXJUb1N0cmluZyhudW1i
ZXIsIGJ1ZmZlcik7Ci0gICAgcmV0dXJuIFN0cmluZyhidWZmZXIsIGxlbmd0aCk7CisgICAgcmV0
dXJuIFN0cmluZyhudW1iZXJUb1N0cmluZyhudW1iZXIsIGJ1ZmZlcikpOwogfQogCiBib29sIHBh
cnNlVG9Eb3VibGVGb3JOdW1iZXJUeXBlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBkb3VibGUqIHJl
c3VsdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1
ZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKaW5k
ZXggOTJiYWJkNjdlOThkNGFjNTkwYzM1NTFiYTRhZjg2YWY5OTc0OGJmNi4uMWJkODdlY2I4YWRh
MmIyNjJkNGM3ZGQ1NjJiM2E2YjRkODEwZTEwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclZhbHVlcy5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpZiBFTkFCTEUoSU5T
UEVDVE9SKQogCiAjaW5jbHVkZSA8d3RmL0RlY2ltYWxOdW1iZXIuaD4KKyNpbmNsdWRlIDx3dGYv
ZHRvYS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTYyNSw3ICs2MjYsNyBAQCB2b2lk
IEluc3BlY3RvckJhc2ljVmFsdWU6OndyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNv
bnN0CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG91dHB1dC0+YXBwZW5kKGZhbHNlU3RyaW5n
LCA1KTsKICAgICB9IGVsc2UgaWYgKHR5cGUoKSA9PSBUeXBlTnVtYmVyKSB7Ci0gICAgICAgIE51
bWJlclRvU3RyaW5nQnVmZmVyIGJ1ZmZlcjsKKyAgICAgICAgTnVtYmVyVG9VU3RyaW5nQnVmZmVy
IGJ1ZmZlcjsKICAgICAgICAgaWYgKCFpc2Zpbml0ZShtX2RvdWJsZVZhbHVlKSkgewogICAgICAg
ICAgICAgb3V0cHV0LT5hcHBlbmQobnVsbFN0cmluZywgNCk7CiAgICAgICAgICAgICByZXR1cm47
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKaW5kZXggNDhmNzUy
MDMwMTZiZjdmNTA2YzgxOGU0YzQxYTg3M2RmZjNjZWI4Yi4uMjJmODE2ODVhMDBkODM2NDIzNWMz
NGQyYzdkZjUyNTFhNjdiMDc2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yLmNwcApAQCAtMjA5LDcgKzIwOSw3IEBAIFN0cmluZyBDb2xvcjo6c2VyaWFsaXplZCgp
IGNvbnN0CiAgICAgaWYgKCFhbHBoYSgpKQogICAgICAgICByZXN1bHQuYXBwZW5kKCcwJyk7CiAg
ICAgZWxzZSB7Ci0gICAgICAgIE51bWJlclRvU3RyaW5nQnVmZmVyIGJ1ZmZlcjsKKyAgICAgICAg
TnVtYmVyVG9VU3RyaW5nQnVmZmVyIGJ1ZmZlcjsKICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0g
RGVjaW1hbE51bWJlcihhbHBoYSgpIC8gMjU1LjApLnRvU3RyaW5nRGVjaW1hbChidWZmZXIsIFdU
Rjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgpOwogICAgICAgICByZXN1bHQuYXBwZW5kKGJ1
ZmZlciwgbGVuZ3RoKTsKICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105077</attachid>
            <date>2011-08-24 14:59:42 -0700</date>
            <delta_ts>2011-08-25 11:40:31 -0700</delta_ts>
            <desc>Fixing chromium build</desc>
            <filename>bug-66346-20110824145941.patch</filename>
            <type>text/plain</type>
            <size>328920</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM3MTQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGJi
YTQ4NzJjZWJiNmNmMTJjZTFjZjkyMmVmYmQyZDkwM2M5M2I5ZTUuLjAwZjgzZWUxZDY2MTA3Mzc1
NDc1OTI2YWJiM2RhNDAxZmVhZjZlMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDEyMCBAQAorMjAxMS0wOC0yNCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBw
bGUuY29tPgorCisgICAgICAgIEluY29ycG9yYXRlIG5ld2VyLCBmYXN0ZXIgZHRvYSBsaWJyYXJ5
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM0Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIG5l
dyBkdG9hIGxpYnJhcnkgYXQgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2RvdWJsZS1jb252ZXJz
aW9uLy4KKyAgICAgICAgUmVwbGFjZWQgb2xkIGNhbGwgdG8gZHRvYS4gIFRoZSBuZXcgbGlicmFy
eSBpcyBtdWNoIGZhc3RlciB0aGFuIHRoZSBvbGQgb25lLgorICAgICAgICBXZSBzdGlsbCB1c2Ug
dGhlIG9sZCBkdG9hIGZvciBzb21lIHN0dWZmIGluIFdlYkNvcmUgYXMgd2VsbCBhcyB0aGUgb2xk
IHN0cnRvZCwgCisgICAgICAgIGJ1dCB3ZSBjYW4gcGhhc2UgdGhlc2Ugb3V0IGV2ZW50dWFsbHkg
YXMgd2VsbC4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2
YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmd5cGk6CisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRl
ZjoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvY29weS1m
aWxlcy5jbWQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwOgorICAgICAg
ICAoSlNDOjppbml0aWFsaXplVGhyZWFkaW5nT25jZSk6CisgICAgICAgICogcnVudGltZS9OdW1i
ZXJQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1bmNUb0V4cG9uZW50
aWFsKToKKyAgICAgICAgKEpTQzo6bnVtYmVyUHJvdG9GdW5jVG9GaXhlZCk6CisgICAgICAgIChK
U0M6Om51bWJlclByb3RvRnVuY1RvUHJlY2lzaW9uKToKKyAgICAgICAgKiBydW50aW1lL1VTdHJp
bmcuY3BwOgorICAgICAgICAoSlNDOjpVU3RyaW5nOjpudW1iZXIpOgorICAgICAgICAqIHd0Zi9D
TWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvZHRvYS5jcHA6CisgICAgICAgIChXVEY6OmR0
b2EpOgorICAgICAgICAqIHd0Zi9kdG9hLmg6CisgICAgICAgICogd3RmL2R0b2EvQ09QWUlORzog
QWRkZWQuCisgICAgICAgICogd3RmL2R0b2EvTElDRU5TRTogQWRkZWQuCisgICAgICAgICogd3Rm
L2R0b2EvUkVBRE1FOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9iaWdudW0tZHRvYS5jYzog
QWRkZWQuCisgICAgICAgICogd3RmL2R0b2EvYmlnbnVtLWR0b2EuaDogQWRkZWQuCisgICAgICAg
ICogd3RmL2R0b2EvYmlnbnVtLmNjOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9iaWdudW0u
aDogQWRkZWQuCisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpCaWdudW06OlRpbWVz
MTApOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6QmlnbnVtOjpFcXVhbCk6Cisg
ICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpCaWdudW06Okxlc3NFcXVhbCk6CisgICAg
ICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpCaWdudW06Okxlc3MpOgorICAgICAgICAoV1RG
Ojpkb3VibGVfY29udmVyc2lvbjo6QmlnbnVtOjpQbHVzRXF1YWwpOgorICAgICAgICAoV1RGOjpk
b3VibGVfY29udmVyc2lvbjo6QmlnbnVtOjpQbHVzTGVzc0VxdWFsKToKKyAgICAgICAgKFdURjo6
ZG91YmxlX2NvbnZlcnNpb246OkJpZ251bTo6UGx1c0xlc3MpOgorICAgICAgICAoV1RGOjpkb3Vi
bGVfY29udmVyc2lvbjo6QmlnbnVtOjpFbnN1cmVDYXBhY2l0eSk6CisgICAgICAgIChXVEY6OmRv
dWJsZV9jb252ZXJzaW9uOjpCaWdudW06OkJpZ2l0TGVuZ3RoKToKKyAgICAgICAgKiB3dGYvZHRv
YS9jYWNoZWQtcG93ZXJzLmNjOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9jYWNoZWQtcG93
ZXJzLmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9kdG9hL2RpeS1mcC5jYzogQWRkZWQuCisgICAg
ICAgICogd3RmL2R0b2EvZGl5LWZwLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpkb3VibGVfY29u
dmVyc2lvbjo6RGl5RnA6OkRpeUZwKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246
OkRpeUZwOjpTdWJ0cmFjdCk6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpEaXlG
cDo6TWludXMpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RGl5RnA6OlRpbWVz
KToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246OkRpeUZwOjpOb3JtYWxpemUpOgor
ICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RGl5RnA6OmYpOgorICAgICAgICAoV1RG
Ojpkb3VibGVfY29udmVyc2lvbjo6RGl5RnA6OmUpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29u
dmVyc2lvbjo6RGl5RnA6OnNldF9mKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246
OkRpeUZwOjpzZXRfZSk6CisgICAgICAgICogd3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uY2M6
IEFkZGVkLgorICAgICAgICAqIHd0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmg6IEFkZGVkLgor
ICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6
OkRvdWJsZVRvU3RyaW5nQ29udmVydGVyKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNp
b246OlN0cmluZ1RvRG91YmxlQ29udmVydGVyOjpTdHJpbmdUb0RvdWJsZUNvbnZlcnRlcik6Cisg
ICAgICAgICogd3RmL2R0b2EvZG91YmxlLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpkb3VibGVf
Y29udmVyc2lvbjo6ZG91YmxlX3RvX3VpbnQ2NCk6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252
ZXJzaW9uOjp1aW50NjRfdG9fZG91YmxlKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNp
b246OkRvdWJsZTo6RG91YmxlKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246OkRv
dWJsZTo6QXNEaXlGcCk6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGU6
OkFzTm9ybWFsaXplZERpeUZwKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246OkRv
dWJsZTo6QXNVaW50NjQpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91Ymxl
OjpOZXh0RG91YmxlKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZTo6
RXhwb25lbnQpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpTaWdu
aWZpY2FuZCk6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGU6OklzRGVu
b3JtYWwpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpJc1NwZWNp
YWwpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpJc05hbik6Cisg
ICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGU6OklzSW5maW5pdGUpOgorICAg
ICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpTaWduKToKKyAgICAgICAgKFdU
Rjo6ZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZTo6VXBwZXJCb3VuZGFyeSk6CisgICAgICAgIChX
VEY6OmRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGU6Ok5vcm1hbGl6ZWRCb3VuZGFyaWVzKToKKyAg
ICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZTo6dmFsdWUpOgorICAgICAgICAo
V1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpTaWduaWZpY2FuZFNpemVGb3JPcmRlck9m
TWFnbml0dWRlKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZTo6SW5m
aW5pdHkpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpOYU4pOgor
ICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpEaXlGcFRvVWludDY0KToK
KyAgICAgICAgKiB3dGYvZHRvYS9mYXN0LWR0b2EuY2M6IEFkZGVkLgorICAgICAgICAqIHd0Zi9k
dG9hL2Zhc3QtZHRvYS5oOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9maXhlZC1kdG9hLmNj
OiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9maXhlZC1kdG9hLmg6IEFkZGVkLgorICAgICAg
ICAqIHd0Zi9kdG9hL3N0cnRvZC5jYzogQWRkZWQuCisgICAgICAgICogd3RmL2R0b2Evc3RydG9k
Lmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9kdG9hL3V0aWxzLmg6IEFkZGVkLgorICAgICAgICAo
V1RGOjpkb3VibGVfY29udmVyc2lvbjo6TWF4KToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZl
cnNpb246Ok1pbik6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpTdHJMZW5ndGgp
OgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6VmVjdG9yOjpWZWN0b3IpOgorICAg
ICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6VmVjdG9yOjpTdWJWZWN0b3IpOgorICAgICAg
ICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6VmVjdG9yOjpsZW5ndGgpOgorICAgICAgICAoV1RG
Ojpkb3VibGVfY29udmVyc2lvbjo6VmVjdG9yOjppc19lbXB0eSk6CisgICAgICAgIChXVEY6OmRv
dWJsZV9jb252ZXJzaW9uOjpWZWN0b3I6OnN0YXJ0KToKKyAgICAgICAgKFdURjo6ZG91YmxlX2Nv
bnZlcnNpb246OlZlY3Rvcjo6b3BlcmF0b3JbXSk6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252
ZXJzaW9uOjpWZWN0b3I6OmZpcnN0KToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246
OlZlY3Rvcjo6bGFzdCk6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdC
dWlsZGVyOjpTdHJpbmdCdWlsZGVyKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246
OlN0cmluZ0J1aWxkZXI6On5TdHJpbmdCdWlsZGVyKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2Nv
bnZlcnNpb246OlN0cmluZ0J1aWxkZXI6OnNpemUpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29u
dmVyc2lvbjo6U3RyaW5nQnVpbGRlcjo6cG9zaXRpb24pOgorICAgICAgICAoV1RGOjpkb3VibGVf
Y29udmVyc2lvbjo6U3RyaW5nQnVpbGRlcjo6UmVzZXQpOgorICAgICAgICAoV1RGOjpkb3VibGVf
Y29udmVyc2lvbjo6U3RyaW5nQnVpbGRlcjo6QWRkQ2hhcmFjdGVyKToKKyAgICAgICAgKFdURjo6
ZG91YmxlX2NvbnZlcnNpb246OlN0cmluZ0J1aWxkZXI6OkFkZFN0cmluZyk6CisgICAgICAgIChX
VEY6OmRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdCdWlsZGVyOjpBZGRTdWJzdHJpbmcpOgorICAg
ICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6U3RyaW5nQnVpbGRlcjo6QWRkUGFkZGluZyk6
CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdCdWlsZGVyOjpGaW5hbGl6
ZSk6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdCdWlsZGVyOjppc19m
aW5hbGl6ZWQpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6Qml0Q2FzdCk6Cisg
ICAgICAgICogd3RmL3d0Zi5wcmk6CisKIDIwMTEtMDgtMjQgIEZpbGlwIFBpemxvICA8ZnBpemxv
QGFwcGxlLmNvbT4KIAogICAgICAgICBFcnJvckluc3RhbmNlOjpjcmVhdGUgc29tZXRpbWVzIGhh
cyB0d28gaGVhcCBvYmplY3QgY29uc3RydWN0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQppbmRleCA5NDE0MzU0ODllOGJlYmUzYmMxMWM0ZGVjNmU4Nzc1YjE4
MjBlZDU4Li5iYzE5MTBhODM3ZmFkOTg3Nzg1OGFmZWVkNTY4YzNhOWIyOWVmNzlhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNDY1LDkgKzQ2NSwyNyBA
QCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L0N1cnJlbnRUaW1lLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGF0ZU1hdGguY3Bw
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RhdGVNYXRoLmggXAotCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvRGVjaW1hbE51bWJlci5oIFwKLQlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL0RlY2ltYWxOdW1iZXIuY3BwIFwKLQlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RlY29k
ZXIuaCBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EZWNpbWFsTnVtYmVyLmNwcCBc
CisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EZWNpbWFsTnVtYmVyLmggXAorICAgIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9iaWdudW0tZHRvYS5jYyBcCisgICAgU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS5jYyBcCisgICAgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9kdG9hL2NhY2hlZC1wb3dlcnMuY2MgXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvZHRvYS9kaXktZnAuY2MgXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
ZHRvYS9kb3VibGUtY29udmVyc2lvbi5jYyBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9kdG9hL2Zhc3QtZHRvYS5jYyBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9h
L2ZpeGVkLWR0b2EuY2MgXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9zdHJ0
b2QuY2MgXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9iaWdudW0tZHRvYS5o
IFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvYmlnbnVtLmggXAorICAgIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmggXAorICAgIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kaXktZnAuaCBcCisgICAgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmggXAorICAgIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvZHRvYS9kb3VibGUuaCBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9kdG9hL2Zhc3QtZHRvYS5oIFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2Ev
Zml4ZWQtZHRvYS5oIFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2Evc3RydG9k
LmggXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS91dGlscy5oIFwKKyAgICBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RlY29kZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9EZXF1ZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Rpc2FsbG93Q1R5
cGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Eb3VibHlMaW5rZWRMaXN0LmggXApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKaW5kZXggM2QwZWQ5N2NiODg2
NzQzZDgzNTE0MDAyNmIwNmM2ZDUzMTNlMzA3Yi4uYWE3NGEyOGFlMWQ5MmViMjViN2ZiZDEyYWNm
MTlhNGQ4MzBjNDE5ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLmV4cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhw
CkBAIC0zODUsOCArMzg1LDYgQEAgX19aTjNXVEYxMU9TQWxsb2NhdG9yMTZyZXNlcnZlQW5kQ29t
bWl0RW1OUzBfNVVzYWdlRWJiYgogX19aTjNXVEYxMU9TQWxsb2NhdG9yMThyZWxlYXNlRGVjb21t
aXR0ZWRFUHZtCiBfX1pOM1dURjExY29tbWVudEF0b21FCiBfX1pOM1dURjExY3VycmVudFRpbWVF
dgotX19aTjNXVEYxMWR0b2FSb3VuZERQRVBjZGlSYlJpUmoKLV9fWk4zV1RGMTFkdG9hUm91bmRT
RkVQY2RpUmJSaVJqCiBfX1pOM1dURjExZW1wdHlTdHJpbmdFdgogX19aTjNXVEYxMWZhc3RSZWFs
bG9jRVB2bQogX19aTjNXVEYxMkF0b21pY1N0cmluZzExYWRkU2xvd0Nhc2VFUE5TXzEwU3RyaW5n
SW1wbEUKQEAgLTQxNSw3ICs0MTMsNyBAQCBfX1pOM1dURjEzY3VycmVudFRocmVhZEV2CiBfX1pO
M1dURjEzdHJ5RmFzdENhbGxvY0VtbQogX19aTjNXVEYxM3RyeUZhc3RNYWxsb2NFbQogX19aTjNX
VEYxNGZhc3RNYWxsb2NTaXplRVBLdgotX19aTjNXVEYxNG51bWJlclRvU3RyaW5nRWRQdAorX19a
TjNXVEYxNG51bWJlclRvU3RyaW5nRWRQYwogX19aTjNXVEYxNHRyeUZhc3RSZWFsbG9jRVB2bQog
X19aTjNXVEYxNVRocmVhZENvbmRpdGlvbjR3YWl0RVJOU181TXV0ZXhFCiBfX1pOM1dURjE1VGhy
ZWFkQ29uZGl0aW9uNnNpZ25hbEV2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUuZ3lwaSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5neXBpCmluZGV4IDYxMjA0OTJlMjkyODQ2MjkzYjI1MzgxM2MyOThkNDFhOGJmZmIzNGQuLjQz
MGVkN2EzNDg0MGI5NDM4ZTEwM2MzYTZlZjUwM2YxYzRjYzM5YWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCkBAIC0xNDcsNiArMTQ3LDE2IEBACiAgICAgICAg
ICAgICAnd3RmL0N1cnJlbnRUaW1lLmgnLAogICAgICAgICAgICAgJ3d0Zi9EYXRlTWF0aC5oJywK
ICAgICAgICAgICAgICd3dGYvRGVjaW1hbE51bWJlci5oJywKKyAgICAgICAgICAgICd3dGYvZHRv
YS9iaWdudW0tZHRvYS5oJywKKyAgICAgICAgICAgICd3dGYvZHRvYS9iaWdudW0uaCcsCisgICAg
ICAgICAgICAnd3RmL2R0b2EvY2FjaGVkLXBvd2Vycy5oJywKKyAgICAgICAgICAgICd3dGYvZHRv
YS9kaXktZnAuaCcsCisgICAgICAgICAgICAnd3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uaCcs
CisgICAgICAgICAgICAnd3RmL2R0b2EvZG91YmxlLmgnLAorICAgICAgICAgICAgJ3d0Zi9kdG9h
L2Zhc3QtZHRvYS5oJywKKyAgICAgICAgICAgICd3dGYvZHRvYS9maXhlZC1kdG9hLmgnLAorICAg
ICAgICAgICAgJ3d0Zi9kdG9hL3N0cnRvZC5oJywKKyAgICAgICAgICAgICd3dGYvZHRvYS91dGls
cy5oJywKICAgICAgICAgICAgICd3dGYvRGVjb2Rlci5oJywKICAgICAgICAgICAgICd3dGYvRGVx
dWUuaCcsCiAgICAgICAgICAgICAnd3RmL0Rpc2FsbG93Q1R5cGUuaCcsCkBAIC01ODIsNiArNTky
LDE0IEBACiAgICAgICAgICAgICAnd3RmL0N1cnJlbnRUaW1lLmNwcCcsCiAgICAgICAgICAgICAn
d3RmL0RhdGVNYXRoLmNwcCcsCiAgICAgICAgICAgICAnd3RmL0RlY2ltYWxOdW1iZXIuY3BwJywK
KyAgICAgICAgICAgICd3dGYvZHRvYS9iaWdudW0tZHRvYS5jYycsCisgICAgICAgICAgICAnd3Rm
L2R0b2EvYmlnbnVtLmNjJywKKyAgICAgICAgICAgICd3dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmNj
JywKKyAgICAgICAgICAgICd3dGYvZHRvYS9kaXktZnAuY2MnLAorICAgICAgICAgICAgJ3d0Zi9k
dG9hL2RvdWJsZS1jb252ZXJzaW9uLmNjJywKKyAgICAgICAgICAgICd3dGYvZHRvYS9mYXN0LWR0
b2EuY2MnLAorICAgICAgICAgICAgJ3d0Zi9kdG9hL2ZpeGVkLWR0b2EuY2MnLAorICAgICAgICAg
ICAgJ3d0Zi9kdG9hL3N0cnRvZC5jYycsCiAgICAgICAgICAgICAnd3RmL0R5bmFtaWNBbm5vdGF0
aW9ucy5jcHAnLAogICAgICAgICAgICAgJ3d0Zi9EeW5hbWljQW5ub3RhdGlvbnMuaCcsCiAgICAg
ICAgICAgICAnd3RmL0Zhc3RNYWxsb2MuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUuZGVmIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYKaW5kZXggYWQxZjI0NDdkYTkzNzJjOWQ2MGIw
YmU4Mjc5ZTNkYTViNGIzNzI0Zi4uNjAwYTYxYTk0MWQ0MGI2MjAwOTQ2ODUxNDYxMTM4NTk1ODY1
OTNiZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
cHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS5kZWYKQEAgLTQxLDYgKzQxLDExIEBAIEVYUE9SVFMKICAgICA/PzFXZWFrSGFuZGxlT3du
ZXJASlNDQEBVQUVAWFoKICAgICA/PzhKU0NAQFlBX05BQlZVU3RyaW5nQDBAMEBaCiAgICAgPz84
V1RGQEBZQV9OQUJWQ1N0cmluZ0AwQDBAWgorICAgID9FY21hU2NyaXB0Q29udmVydGVyQERvdWJs
ZVRvU3RyaW5nQ29udmVydGVyQGRvdWJsZV9jb252ZXJzaW9uQFdURkBAU0FBQlYxMjNAWFoKKyAg
ICA/VG9FeHBvbmVudGlhbEBEb3VibGVUb1N0cmluZ0NvbnZlcnRlckBkb3VibGVfY29udmVyc2lv
bkBXVEZAQFFCRV9OTkhQQVZTdHJpbmdCdWlsZGVyQDIzQEBaCisgICAgP1RvRml4ZWRARG91Ymxl
VG9TdHJpbmdDb252ZXJ0ZXJAZG91YmxlX2NvbnZlcnNpb25AV1RGQEBRQkVfTk5IUEFWU3RyaW5n
QnVpbGRlckAyM0BAWgorICAgID9Ub1ByZWNpc2lvbkBEb3VibGVUb1N0cmluZ0NvbnZlcnRlckBk
b3VibGVfY29udmVyc2lvbkBXVEZAQFFCRV9OTkhQQVZTdHJpbmdCdWlsZGVyQDIzQEBaCisgICAg
P1RvU2hvcnRlc3RARG91YmxlVG9TdHJpbmdDb252ZXJ0ZXJAZG91YmxlX2NvbnZlcnNpb25AV1RG
QEBRQkVfTk5QQVZTdHJpbmdCdWlsZGVyQDIzQEBaCiAgICAgP2Fic29sdXRlVGltZVRvV2FpdFRp
bWVvdXRJbnRlcnZhbEBXVEZAQFlBS05AWgogICAgID9hY3Rpdml0eUNhbGxiYWNrQEhlYXBASlND
QEBRQUVQQVZHQ0FjdGl2aXR5Q2FsbGJhY2tAMkBYWgogICAgID9hZGRASWRlbnRpZmllckBKU0NA
QFNBP0FWPyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBsQFdURkBAQFdURkBAUEFWRXhlY1N0YXRlQDJA
UEJEQFoKQEAgLTIxNSw2ICsyMjAsNyBAQCBFWFBPUlRTCiAgICAgP2luY3JlbWVudEBSZWZDb3Vu
dGVkTGVha0NvdW50ZXJAV1RGQEBRQUVYWFoKICAgICA/aW5pdEBBdG9taWNTdHJpbmdAV1RGQEBT
QVhYWgogICAgID9pbml0QEpTR2xvYmFsT2JqZWN0QEpTQ0BAQUFFWFBBVkpTT2JqZWN0QDJAQFoK
KyAgICA/aW5pdGlhbGl6ZUBkb3VibGVfY29udmVyc2lvbkBXVEZAQFlBWFhaCiAgICAgP2luaXRp
YWxpemVNYWluVGhyZWFkQFdURkBAWUFYWFoKICAgICA/aW5pdGlhbGl6ZVRocmVhZGluZ0BKU0NA
QFlBWFhaCiAgICAgP2luaXRpYWxpemVUaHJlYWRpbmdAV1RGQEBZQVhYWgpAQCAtMjUwLDcgKzI1
Niw3IEBAIEVYUE9SVFMKICAgICA/bnVtYmVyQFVTdHJpbmdASlNDQEBTQT9BVjEyQEhAWgogICAg
ID9udW1iZXJAVVN0cmluZ0BKU0NAQFNBP0FWMTJASUBaCiAgICAgP251bWJlckBVU3RyaW5nQEpT
Q0BAU0E/QVYxMkBOQFoKLSAgICA/bnVtYmVyVG9TdHJpbmdAV1RGQEBZQUlOUUFfV0BaCisgICAg
P251bWJlclRvU3RyaW5nQFdURkBAWUFQQkROUUFEQFoKICAgICA/b2JqZWN0Q291bnRASGVhcEBK
U0NAQFFBRUlYWgogICAgID9vYmplY3RQcm90b0Z1bmNUb1N0cmluZ0BKU0NAQFlJX0pQQVZFeGVj
U3RhdGVAMUBAWgogICAgID9wYXJzZURhdGVGcm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWN0ZXJzQFdU
RkBAWUFOUEJEQFoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvY29weS1maWxlcy5jbWQgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL2NvcHktZmlsZXMu
Y21kCmluZGV4IGU0MDc1YTQ1ZDc1YWY5MDVmNGE0MDMwMWZmMWM2MmY1ZjdkOWJkODguLjU1MTAy
MWFkZTUzMWQ1NGQxNjkzZWI5MGRmM2YyMWJkNTUyMjI1M2UgMTAwNzU1Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvY29weS1m
aWxlcy5jbWQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
ai9KYXZhU2NyaXB0Q29yZS9jb3B5LWZpbGVzLmNtZApAQCAtNDYsNiArNDYsNyBAQCBmb3IgJSVk
IGluICgKICAgICBwcm9maWxlcgogICAgIHJ1bnRpbWUKICAgICB3dGYKKyAgICB3dGZcZHRvYQog
ICAgIHd0Zlx0ZXh0CiAgICAgd3RmXHVuaWNvZGUKICAgICB3dGZcdW5pY29kZVxpY3UKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZGY4ZTgzZGIzYzg0ZTI3NGZlNWVkYzdlNDYyNTkz
NWFhZWU2MjVmOC4uYTY2MDE2MWYxNTAwZjFiNjJhYTkwYmFlMDc1ZDM0NjRiZDNjMjk0ZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ4LDggKzQ4LDYgQEAKIAkJMEJERkZBRTAw
RkM2MTkyOTAwRDY5RUY0IC8qIENyb3NzVGhyZWFkUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEJERkZBRDQwRkM2MTcxMDAwRDY5RUY0
IC8qIENyb3NzVGhyZWFkUmVmQ291bnRlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBCREZGQUUxMEZDNjE5MzEwMEQ2OUVGNCAvKiBPd25GYXN0
TWFsbG9jUHRyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwQkRGRkFEMTBGQzYxNkVDMDBENjlFRjQgLyogT3duRmFzdE1hbGxvY1B0ci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBCRjI4QTI5MTFBMzNE
QzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRz
LmNwcCAqLzsgfTsKLQkJMEYyOTQ3OUMxMjZFNjk4QzAwQjNBQkY1IC8qIERlY2ltYWxOdW1iZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyOTQ3
OUIxMjZFNjk4QzAwQjNBQkY1IC8qIERlY2ltYWxOdW1iZXIuY3BwICovOyB9OwotCQkwRjc3MDA5
MDE0MDJGREU0MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc3MDA4RTE0MDJGREQ2MDA3OEVCMzkgLyog
U2FtcGxpbmdDb3VudGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc3MDA5
MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLzsgfTsKIAkJMEY5NjNC
MzgxM0ZDNkZFOTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjNCMzYxM0ZDNkZERTAwMDJEOUIyIC8qIFZh
bHVlUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGQzgxNTBBMTQwNDNCRjUwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUwOTE0
MDQzQkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yNTMsNyArMjUxLDYgQEAKIAkJODYw
MTYxRTYwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjAxNjFFMjBGM0E4M0Mx
MDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaCAqLzsgfTsKIAkJODYyNkJFQ0Yx
MTkyOEUzOTAwNzgyRkFCIC8qIFN0cmluZ1N0YXRpY3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODYyNkJFQ0UxMTkyOEUzOTAwNzgyRkFCIC8qIFN0
cmluZ1N0YXRpY3MuY3BwICovOyB9OwogCQk4NjI3RTVFQzExRjEyODE5MDBBMzEzQjUgLyogUGFn
ZUFsbG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg2MjdFNUVBMTFGMTI4MTkwMEEzMTNCNSAvKiBQYWdlQWxsb2NhdGlvbi5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTg2MkFGNEI2MTIyMzlD
N0IwMDI0RTVCOCAvKiBEZWNpbWFsTnVtYmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NjJBRjRCNTEyMjM5QzdCMDAyNEU1QjggLyogRGVjaW1hbE51
bWJlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTg2M0IyM0UwMEZDNjExODkwMDcwM0FBNCAvKiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2M0IyM0RGMEZDNjBF
NjIwMDcwM0FBNCAvKiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NjQzOEZDNDEyNjU1MDNFMDBFMERGQ0Eg
LyogU3RyaW5nQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4NjQzOEZDMzEyNjU1MDNFMDBFMERGQ0EgLyogU3RyaW5nQnVpbGRlci5jcHAg
Ki87IH07CiAJCTg2NTY1NzQyMTE1QkUzREEwMDI5MUY0MCAvKiBDU3RyaW5nLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2NTY1NzQwMTE1QkUzREEw
MDI5MUY0MCAvKiBDU3RyaW5nLmNwcCAqLzsgfTsKQEAgLTU5OCw2ICs1OTUsMjcgQEAKIAkJQkNG
RDhDOTIwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ZEOEM5MDBFRUIyRUU3MDAyODM4NDggLyog
SnVtcFRhYmxlLmNwcCAqLzsgfTsKIAkJQkNGRDhDOTMwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBU
YWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNG
RDhDOTEwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5oICovOyB9OwogCQlDMEEyNzI2MzBF
NTBBMDYzMDBFOTZFMTUgLyogTm90Rm91bmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEMwQTI3MjNGMEU1MDlGMUUwMEU5NkUxNSAvKiBOb3RGb3VuZC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUMyMkIz
MUI5MTQwNTc3RDcwMERCNDc1QSAvKiBTYW1wbGluZ0NvdW50ZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzcwMDhFMTQwMkZERDYwMDc4RUIzOSAv
KiBTYW1wbGluZ0NvdW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQlDMjJDNTJGMTEzRkFGNkVGMDBCN0RDMEQgLyogYmlnbnVtLWR0b2EuY2Mg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTI5MDEz
RkFGNkVGMDBCN0RDMEQgLyogYmlnbnVtLWR0b2EuY2MgKi87IH07CisJCUMyMkM1MkYyMTNGQUY2
RUYwMEI3REMwRCAvKiBiaWdudW0tZHRvYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQzIyQzUyOTExM0ZBRjZFRjAwQjdEQzBEIC8qIGJpZ251bS1kdG9h
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIy
QzUyRjMxM0ZBRjZFRjAwQjdEQzBEIC8qIGJpZ251bS5jYyBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1MjkyMTNGQUY2RUYwMEI3REMwRCAvKiBiaWdu
dW0uY2MgKi87IH07CisJCUMyMkM1MkY0MTNGQUY2RUYwMEI3REMwRCAvKiBiaWdudW0uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1MjkzMTNGQUY2
RUYwMEI3REMwRCAvKiBiaWdudW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQlDMjJDNTJGNTEzRkFGNkVGMDBCN0RDMEQgLyogY2FjaGVkLXBvd2Vy
cy5jYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1
Mjk0MTNGQUY2RUYwMEI3REMwRCAvKiBjYWNoZWQtcG93ZXJzLmNjICovOyB9OworCQlDMjJDNTJG
NjEzRkFGNkVGMDBCN0RDMEQgLyogY2FjaGVkLXBvd2Vycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyQzUyOTUxM0ZBRjZFRjAwQjdEQzBEIC8qIGNh
Y2hlZC1wb3dlcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQlDMjJDNTJGNzEzRkFGNkVGMDBCN0RDMEQgLyogZGl5LWZwLmNjIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyQzUyOTcxM0ZBRjZFRjAwQjdE
QzBEIC8qIGRpeS1mcC5jYyAqLzsgfTsKKwkJQzIyQzUyRjgxM0ZBRjZFRjAwQjdEQzBEIC8qIGRp
eS1mcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIy
QzUyOTgxM0ZBRjZFRjAwQjdEQzBEIC8qIGRpeS1mcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUMyMkM1MkY5MTNGQUY2RUYwMEI3REMwRCAvKiBk
b3VibGUtY29udmVyc2lvbi5jYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEMyMkM1Mjk5MTNGQUY2RUYwMEI3REMwRCAvKiBkb3VibGUtY29udmVyc2lvbi5j
YyAqLzsgfTsKKwkJQzIyQzUyRkExM0ZBRjZFRjAwQjdEQzBEIC8qIGRvdWJsZS1jb252ZXJzaW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTI5
QTEzRkFGNkVGMDBCN0RDMEQgLyogZG91YmxlLWNvbnZlcnNpb24uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDMjJDNTJGQjEzRkFGNkVGMDBCN0RD
MEQgLyogZG91YmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDMjJDNTI5QjEzRkFGNkVGMDBCN0RDMEQgLyogZG91YmxlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIyQzUyRkMxM0ZBRjZFRjAwQjdE
QzBEIC8qIGZhc3QtZHRvYS5jYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEMyMkM1MjlDMTNGQUY2RUYwMEI3REMwRCAvKiBmYXN0LWR0b2EuY2MgKi87IH07
CisJCUMyMkM1MkZEMTNGQUY2RUYwMEI3REMwRCAvKiBmYXN0LWR0b2EuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1MjlEMTNGQUY2RUYwMEI3REMw
RCAvKiBmYXN0LWR0b2EuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQlDMjJDNTJGRTEzRkFGNkVGMDBCN0RDMEQgLyogZml4ZWQtZHRvYS5jYyBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1MjlFMTNGQUY2
RUYwMEI3REMwRCAvKiBmaXhlZC1kdG9hLmNjICovOyB9OworCQlDMjJDNTJGRjEzRkFGNkVGMDBC
N0RDMEQgLyogZml4ZWQtZHRvYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzIyQzUyOUYxM0ZBRjZFRjAwQjdEQzBEIC8qIGZpeGVkLWR0b2EuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDMjJDNTMxMzEz
RkFGNkVGMDBCN0RDMEQgLyogc3RydG9kLmNjIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQzIyQzUyQjkxM0ZBRjZFRjAwQjdEQzBEIC8qIHN0cnRvZC5jYyAq
LzsgfTsKKwkJQzIyQzUzMTQxM0ZBRjZFRjAwQjdEQzBEIC8qIHN0cnRvZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyQzUyQkExM0ZBRjZFRjAwQjdE
QzBEIC8qIHN0cnRvZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCUMyMkM1MzE1MTNGQUY2RUYwMEI3REMwRCAvKiB1dGlscy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyQzUyQkIxM0ZBRjZFRjAwQjdE
QzBEIC8qIHV0aWxzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJQzJFRTU5QTAxM0ZDOTczRjAwOUNFQUZFIC8qIERlY2ltYWxOdW1iZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRUU1OTlFMTNGQzk3
MkEwMDlDRUFGRSAvKiBEZWNpbWFsTnVtYmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzJFRTU5QTExM0ZDOTc2ODAwOUNFQUZFIC8qIERlY2lt
YWxOdW1iZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzJFRTU5OUQxM0ZDOTcyQTAwOUNFQUZFIC8qIERlY2ltYWxOdW1iZXIuY3BwICovOyB9Owog
CQlEN0E0NkE0RjEzMzhGRkVBMDBFRDY5NUMgLyogRHluYW1pY0Fubm90YXRpb25zLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBENzVBRjU5NjEyRjhDQjk1
MDBGQzBBREYgLyogRHluYW1pY0Fubm90YXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJREQzNzdDQkMxMjA3MkMxODAwNkEyNTE3IC8qIEJp
dG1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREQz
NzdDQkIxMjA3MkMxODAwNkEyNTE3IC8qIEJpdG1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCURERjdBQkQ0MTFGNjBFRDIwMDEwOEUzNiAvKiBH
Q0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IERERjdBQkQyMTFGNjBFRDIwMDEwOEUzNiAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2su
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzMz
LDcgKzc1MSw2IEBACiAJCTBCREZGQUQxMEZDNjE2RUMwMEQ2OUVGNCAvKiBPd25GYXN0TWFsbG9j
UHRyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE93bkZhc3RNYWxsb2NQdHIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEJERkZBRDQwRkM2MTcxMDAwRDY5RUY0
IC8qIENyb3NzVGhyZWFkUmVmQ291bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2l6ZUxpbWl0cy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTBGMjk0NzlCMTI2RTY5OEMwMEIzQUJGNSAvKiBEZWNpbWFsTnVtYmVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlY2ltYWxOdW1iZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA4RTE0MDJGREQ2MDA3OEVC
MzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNhbXBsaW5nQ291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA5
MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGOTYzQjM2MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFsdWVQcm9maWxlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NDcsNyArOTY0LDYgQEAKIAkJODYwMTYxRTIwRjNB
ODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTg2MjZCRUNFMTE5MjhFMzkwMDc4MkZBQiAvKiBTdHJpbmdTdGF0
aWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFN0cmluZ1N0YXRp
Y3MuY3BwOyBwYXRoID0gdGV4dC9TdHJpbmdTdGF0aWNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODYyN0U1RUExMUYxMjgxOTAwQTMxM0I1IC8qIFBhZ2VBbGxvY2F0aW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VBbGxvY2F0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg2MkFGNEI1MTIyMzlDN0IwMDI0RTVCOCAvKiBEZWNp
bWFsTnVtYmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlY2ltYWxOdW1i
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYzQjIzREYwRkM2MEU2MjAwNzAz
QUE0IC8qIE1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODY0MzhGQzMxMjY1NTAzRTAwRTBERkNBIC8qIFN0cmluZ0J1aWxkZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU3RyaW5nQnVpbGRlci5jcHA7IHBhdGgg
PSB0ZXh0L1N0cmluZ0J1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4
NjU2NTc0MDExNUJFM0RBMDAyOTFGNDAgLyogQ1N0cmluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBDU3RyaW5nLmNwcDsgcGF0aCA9IHRleHQvQ1N0cmluZy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjYzLDYgKzEyNzksMzIgQEAKIAkJQkNG
RDhDOTAwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKdW1wVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCQ0ZEOEM5MTBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEp1bXBUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDMEEyNzIzRjBFNTA5RjFFMDBFOTZFMTUgLyogTm90Rm91bmQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm90Rm91bmQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQzIyQzUyOTAxM0ZBRjZFRjAwQjdEQzBEIC8qIGJpZ251bS1kdG9hLmNjICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gImJpZ251bS1kdG9hLmNjIjsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyOTExM0ZBRjZFRjAwQjdEQzBEIC8qIGJp
Z251bS1kdG9hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9ICJiaWdudW0tZHRv
YS5oIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyOTIxM0ZBRjZFRjAwQjdE
QzBEIC8qIGJpZ251bS5jYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGJp
Z251bS5jYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyOTMxM0ZBRjZFRjAw
QjdEQzBEIC8qIGJpZ251bS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBiaWdu
dW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyOTQxM0ZBRjZFRjAwQjdE
QzBEIC8qIGNhY2hlZC1wb3dlcnMuY2MgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSAiY2FjaGVkLXBvd2Vycy5jYyI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMy
MkM1Mjk1MTNGQUY2RUYwMEI3REMwRCAvKiBjYWNoZWQtcG93ZXJzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9ICJjYWNoZWQtcG93ZXJzLmgiOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlDMjJDNTI5NjEzRkFGNkVGMDBCN0RDMEQgLyogQ09QWUlORyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBDT1BZSU5HOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJD
NTI5NzEzRkFGNkVGMDBCN0RDMEQgLyogZGl5LWZwLmNjICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gImRpeS1mcC5jYyI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUMyMkM1Mjk4MTNGQUY2RUYwMEI3REMwRCAvKiBkaXktZnAuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gImRpeS1mcC5oIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QzIyQzUyOTkxM0ZBRjZFRjAwQjdEQzBEIC8qIGRvdWJsZS1jb252ZXJzaW9uLmNjICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gImRvdWJsZS1jb252ZXJzaW9uLmNjIjsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyOUExM0ZBRjZFRjAwQjdEQzBEIC8qIGRv
dWJsZS1jb252ZXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9ICJkb3Vi
bGUtY29udmVyc2lvbi5oIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyOUIx
M0ZBRjZFRjAwQjdEQzBEIC8qIGRvdWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBkb3VibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyOUMxM0ZB
RjZFRjAwQjdEQzBEIC8qIGZhc3QtZHRvYS5jYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9ICJmYXN0LWR0b2EuY2MiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
MjJDNTI5RDEzRkFGNkVGMDBCN0RDMEQgLyogZmFzdC1kdG9hLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9ICJmYXN0LWR0b2EuaCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUMyMkM1MjlFMTNGQUY2RUYwMEI3REMwRCAvKiBmaXhlZC1kdG9hLmNjICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gImZpeGVkLWR0b2EuY2MiOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDMjJDNTI5RjEzRkFGNkVGMDBCN0RDMEQgLyogZml4ZWQtZHRvYS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSAiZml4ZWQtZHRvYS5oIjsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyQTAxM0ZBRjZFRjAwQjdEQzBEIC8qIExJQ0VO
U0UgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTElDRU5TRTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQzIyQzUyQTExM0ZBRjZFRjAwQjdEQzBEIC8qIE1ha2VmaWxlICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5tYWtlOyBwYXRoID0gTWFrZWZpbGU7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUMyMkM1MkEyMTNGQUY2RUYwMEI3REMwRCAvKiBSRUFETUUgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gUkVBRE1FOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTJBMzEz
RkFGNkVGMDBCN0RDMEQgLyogU0NvbnNjcmlwdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTQ29u
c2NyaXB0OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTJBNDEzRkFGNkVGMDBC
N0RDMEQgLyogU0NvbnN0cnVjdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTQ29uc3RydWN0OyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTJCOTEzRkFGNkVGMDBCN0RDMEQgLyog
c3RydG9kLmNjICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gc3RydG9kLmNj
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTJCQTEzRkFGNkVGMDBCN0RDMEQg
Lyogc3RydG9kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHN0cnRvZC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTJCQjEzRkFGNkVGMDBCN0RDMEQgLyog
dXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gdXRpbHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJFRTU5OUQxM0ZDOTcyQTAwOUNFQUZFIC8qIERlY2lt
YWxOdW1iZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVjaW1h
bE51bWJlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyRUU1OTlFMTNGQzk3
MkEwMDlDRUFGRSAvKiBEZWNpbWFsTnVtYmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERlY2ltYWxOdW1iZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDIx
MjAyMjgwQUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252ZXJzaW9uLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEYXRlQ29udmVyc2lvbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUQyMTIwMjI5MEFENDMxMEMwMEVENzlCNiAvKiBEYXRlQ29udmVy
c2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0ZUNvbnZlcnNpb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDc1QUY1OTUxMkY4Q0I5NTAwRkMwQURG
IC8qIER5bmFtaWNBbm5vdGF0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEeW5hbWljQW5ub3RhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTY2NCw2ICsxNzA2LDkgQEAKIAkJNjUxNjJFRjEwOEU2QTIxQzAwNzU1NkNEIC8qIHd0
ZiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQzJFRTU5
OUQxM0ZDOTcyQTAwOUNFQUZFIC8qIERlY2ltYWxOdW1iZXIuY3BwICovLAorCQkJCUMyRUU1OTlF
MTNGQzk3MkEwMDlDRUFGRSAvKiBEZWNpbWFsTnVtYmVyLmggKi8sCisJCQkJQzIyQzUyNDgxM0ZB
RjZFRjAwQjdEQzBEIC8qIGR0b2EgKi8sCiAJCQkJMDZEMzU4QTAwREFBRDlDNDAwM0IxNzRFIC8q
IG1hYyAqLywKIAkJCQk4NjU2NTczRTExNUJFMzUyMDAyOTFGNDAgLyogdGV4dCAqLywKIAkJCQlF
MTk1Njc4RDA5RTdDRjEyMDBCODlEMTMgLyogdW5pY29kZSAqLywKQEAgLTE2ODksOCArMTczNCw2
IEBACiAJCQkJMTgwQjlBRjAwRjE2QzU2OTAwOUJEQkM1IC8qIEN1cnJlbnRUaW1lLmggKi8sCiAJ
CQkJNDEzNTlDRjQwRkREODlDQjAwMjA2MTgwIC8qIERhdGVNYXRoLmNwcCAqLywKIAkJCQk0MTM1
OUNGNTBGREQ4OUNCMDAyMDYxODAgLyogRGF0ZU1hdGguaCAqLywKLQkJCQkwRjI5NDc5QjEyNkU2
OThDMDBCM0FCRjUgLyogRGVjaW1hbE51bWJlci5jcHAgKi8sCi0JCQkJODYyQUY0QjUxMjIzOUM3
QjAwMjRFNUI4IC8qIERlY2ltYWxOdW1iZXIuaCAqLywKIAkJCQk1MTM1RkFENTEyRDI2ODU2MDAz
QzA4M0IgLyogRGVjb2Rlci5oICovLAogCQkJCTUxODYxMTFEMENDODI0ODMwMDgxNDEyQiAvKiBE
ZXF1ZS5oICovLAogCQkJCTkzOEM0RjZCMENBMDZCQ0UwMEQ5MzEwQSAvKiBEaXNhbGxvd0NUeXBl
LmggKi8sCkBAIC0yMTk0LDYgKzIyMzcsMzcgQEAKIAkJCXBhdGggPSBieXRlY29kZTsKIAkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCUMyMkM1MjQ4MTNGQUY2RUYwMEI3REMwRCAv
KiBkdG9hICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlD
MjJDNTI5MDEzRkFGNkVGMDBCN0RDMEQgLyogYmlnbnVtLWR0b2EuY2MgKi8sCisJCQkJQzIyQzUy
OTExM0ZBRjZFRjAwQjdEQzBEIC8qIGJpZ251bS1kdG9hLmggKi8sCisJCQkJQzIyQzUyOTIxM0ZB
RjZFRjAwQjdEQzBEIC8qIGJpZ251bS5jYyAqLywKKwkJCQlDMjJDNTI5MzEzRkFGNkVGMDBCN0RD
MEQgLyogYmlnbnVtLmggKi8sCisJCQkJQzIyQzUyOTQxM0ZBRjZFRjAwQjdEQzBEIC8qIGNhY2hl
ZC1wb3dlcnMuY2MgKi8sCisJCQkJQzIyQzUyOTUxM0ZBRjZFRjAwQjdEQzBEIC8qIGNhY2hlZC1w
b3dlcnMuaCAqLywKKwkJCQlDMjJDNTI5NjEzRkFGNkVGMDBCN0RDMEQgLyogQ09QWUlORyAqLywK
KwkJCQlDMjJDNTI5NzEzRkFGNkVGMDBCN0RDMEQgLyogZGl5LWZwLmNjICovLAorCQkJCUMyMkM1
Mjk4MTNGQUY2RUYwMEI3REMwRCAvKiBkaXktZnAuaCAqLywKKwkJCQlDMjJDNTI5OTEzRkFGNkVG
MDBCN0RDMEQgLyogZG91YmxlLWNvbnZlcnNpb24uY2MgKi8sCisJCQkJQzIyQzUyOUExM0ZBRjZF
RjAwQjdEQzBEIC8qIGRvdWJsZS1jb252ZXJzaW9uLmggKi8sCisJCQkJQzIyQzUyOUIxM0ZBRjZF
RjAwQjdEQzBEIC8qIGRvdWJsZS5oICovLAorCQkJCUMyMkM1MjlDMTNGQUY2RUYwMEI3REMwRCAv
KiBmYXN0LWR0b2EuY2MgKi8sCisJCQkJQzIyQzUyOUQxM0ZBRjZFRjAwQjdEQzBEIC8qIGZhc3Qt
ZHRvYS5oICovLAorCQkJCUMyMkM1MjlFMTNGQUY2RUYwMEI3REMwRCAvKiBmaXhlZC1kdG9hLmNj
ICovLAorCQkJCUMyMkM1MjlGMTNGQUY2RUYwMEI3REMwRCAvKiBmaXhlZC1kdG9hLmggKi8sCisJ
CQkJQzIyQzUyQTAxM0ZBRjZFRjAwQjdEQzBEIC8qIExJQ0VOU0UgKi8sCisJCQkJQzIyQzUyQTEx
M0ZBRjZFRjAwQjdEQzBEIC8qIE1ha2VmaWxlICovLAorCQkJCUMyMkM1MkEyMTNGQUY2RUYwMEI3
REMwRCAvKiBSRUFETUUgKi8sCisJCQkJQzIyQzUyQTMxM0ZBRjZFRjAwQjdEQzBEIC8qIFNDb25z
Y3JpcHQgKi8sCisJCQkJQzIyQzUyQTQxM0ZBRjZFRjAwQjdEQzBEIC8qIFNDb25zdHJ1Y3QgKi8s
CisJCQkJQzIyQzUyQjkxM0ZBRjZFRjAwQjdEQzBEIC8qIHN0cnRvZC5jYyAqLywKKwkJCQlDMjJD
NTJCQTEzRkFGNkVGMDBCN0RDMEQgLyogc3RydG9kLmggKi8sCisJCQkJQzIyQzUyQkIxM0ZBRjZF
RjAwQjdEQzBEIC8qIHV0aWxzLmggKi8sCisJCQkpOworCQkJcGF0aCA9IGR0b2E7CisJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlFMTk1Njc4RDA5RTdDRjEyMDBCODlEMTMgLyog
dW5pY29kZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0y
MjQ1LDggKzIzMTksMTAgQEAKIAkJCQk4NkQzQjJDNDEwMTU2QkRFMDAyODY1RTcgLyogQVJNQXNz
ZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFERDE0NTBGRERFQTk4MDAwNkVFQzIgLyog
QVJNdjdBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U2MEUxNkY1Q0QwMEIz
NDQ2MCAvKiBBcnJheUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQlDMjJCMzFCOTE0
MDU3N0Q3MDBEQjQ3NUEgLyogU2FtcGxpbmdDb3VudGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkM4MTUwQTE0MDQzQkY1MDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY5NjNCMzgxM0ZDNkZFOTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJQzJFRTU5QTAxM0ZDOTczRjAwOUNFQUZFIC8qIERlY2ltYWxOdW1i
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U3MEUxNkY1Q0QwMEIzNDQ2MCAvKiBBcnJh
eVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM1MjQwRTE2RkM4QTAwQjM0NDYw
IC8qIEFycmF5UHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRTkwRTE2
RjVDRDAwQjM0NDYwIC8qIEFTQ0lJQ1R5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtMjI5Niw3ICsy
MzcyLDYgQEAKIAkJCQlCQzE4QzNGQTBFMTZGNUNEMDBCMzQ0NjAgLyogRGVidWdnZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMzEzNTY0MEYzMDJGQTMwMDNERkQzQSAvKiBEZWJ1Z2dlckFjdGl2
YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0ZCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBE
ZWJ1Z2dlckNhbGxGcmFtZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJODYyQUY0QjYxMjIzOUM3QjAw
MjRFNUI4IC8qIERlY2ltYWxOdW1iZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMzVGQUYyMTJE
MjZBQ0UwMDNDMDgzQiAvKiBEZWNvZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNGQzBF
MTZGNUNEMDBCMzQ0NjAgLyogRGVxdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUNBNEYxMTMy
RUFBNkQwMDJCMkFENyAvKiBERkdBbGlhc1RyYWNrZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjQ4
MSw3ICsyNTU2LDE2IEBACiAJCQkJOTBEMzQ2OUMwRTI4NTI4MDAwOTQ5MkVFIC8qIFJlZkNvdW50
ZWRMZWFrQ291bnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTgwRTE2RjVDRDAwQjM0
NDYwIC8qIFJlZlB0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTkwRTE2RjVDRDAwQjM0
NDYwIC8qIFJlZlB0ckhhc2hNYXAuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGNzcwMDkwMTQwMkZE
RTQwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUMyMkM1
MkYyMTNGQUY2RUYwMEI3REMwRCAvKiBiaWdudW0tZHRvYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QzIyQzUyRjQxM0ZBRjZFRjAwQjdEQzBEIC8qIGJpZ251bS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QzIyQzUyRjYxM0ZBRjZFRjAwQjdEQzBEIC8qIGNhY2hlZC1wb3dlcnMuaCBpbiBIZWFkZXJzICov
LAorCQkJCUMyMkM1MkY4MTNGQUY2RUYwMEI3REMwRCAvKiBkaXktZnAuaCBpbiBIZWFkZXJzICov
LAorCQkJCUMyMkM1MkZBMTNGQUY2RUYwMEI3REMwRCAvKiBkb3VibGUtY29udmVyc2lvbi5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJQzIyQzUyRkIxM0ZBRjZFRjAwQjdEQzBEIC8qIGRvdWJsZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJQzIyQzUyRkQxM0ZBRjZFRjAwQjdEQzBEIC8qIGZhc3QtZHRvYS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQzIyQzUyRkYxM0ZBRjZFRjAwQjdEQzBEIC8qIGZpeGVkLWR0
b2EuaCBpbiBIZWFkZXJzICovLAorCQkJCUMyMkM1MzE0MTNGQUY2RUYwMEI3REMwRCAvKiBzdHJ0
b2QuaCBpbiBIZWFkZXJzICovLAorCQkJCUMyMkM1MzE1MTNGQUY2RUYwMEI3REMwRCAvKiB1dGls
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NUEwRTE2RjVDRDAwQjM0NDYwIC8qIFJlZ0V4
cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE3MTJCM0YxMUM3QjIyODAwN0E1MzE1IC8qIFJlZ0V4
cENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0QyMDJDMjBFMTcwNkE3MDAyQzdFODIgLyog
UmVnRXhwQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtMjg1Nyw2ICsyOTQxLDcgQEAK
IAkJCWZpbGVzID0gKAogCQkJCTBGQzgxNTBCMTQwNDNDMEUwMENGQTYwMyAvKiBXcml0ZUJhcnJp
ZXJTdXBwb3J0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzcwMDkyMTQwMkZGM0MwMDc4RUIz
OSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQzJFRTU5QTExM0ZD
OTc2ODAwOUNFQUZFIC8qIERlY2ltYWxOdW1iZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3
RjM5QkQxMDdFQzM3NjAwNDI3QTQ4IC8qIEFyZ0xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ3RjM5QkUxMDdFQzM3NjAwNDI3QTQ4IC8qIEFyZ3VtZW50cy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk4NkQzQjJDMzEwMTU2QkRFMDAyODY1RTcgLyogQVJNQXNzZW1ibGVyLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtMjg5MCw3ICsyOTc1LDYgQEAKIAkJCQkxNDI4MDgyMzEwN0VDMDJDMDAxM0U3
QjIgLyogRGVidWdnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMzMTM1NjUwRjMwMkZBMzAw
M0RGRDNBIC8qIERlYnVnZ2VyQWN0aXZhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDk1
NTlFRTBERENEREY3MDA2NDgwODcgLyogRGVidWdnZXJDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJMEYyOTQ3OUMxMjZFNjk4QzAwQjNBQkY1IC8qIERlY2ltYWxOdW1iZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQzQxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2Rl
UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5REM3MTMyOERGODIwMDJCMkFENyAv
KiBERkdHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkVDOURDOTEzMjhERjgyMDAyQjJB
RDcgLyogREZHSklUQ29kZUdlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMwNTAsNiAr
MzEzNCwxNCBAQAogCQkJCTE0RDJGM0RBMTM5RjRCRTIwMDQ5MTAzMSAvKiBOZXdTcGFjZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDJBMUQ4MzEzQTE5Qzg0MDA5REE1RkUgLyogT2xkU3BhY2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCQTdBOTcxM0FBREZGODAwNUI3QzJDIC8qIEhlYXAu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQzIyQzUyRjExM0ZBRjZFRjAwQjdEQzBEIC8qIGJpZ251
bS1kdG9hLmNjIGluIFNvdXJjZXMgKi8sCisJCQkJQzIyQzUyRjMxM0ZBRjZFRjAwQjdEQzBEIC8q
IGJpZ251bS5jYyBpbiBTb3VyY2VzICovLAorCQkJCUMyMkM1MkY1MTNGQUY2RUYwMEI3REMwRCAv
KiBjYWNoZWQtcG93ZXJzLmNjIGluIFNvdXJjZXMgKi8sCisJCQkJQzIyQzUyRjcxM0ZBRjZFRjAw
QjdEQzBEIC8qIGRpeS1mcC5jYyBpbiBTb3VyY2VzICovLAorCQkJCUMyMkM1MkY5MTNGQUY2RUYw
MEI3REMwRCAvKiBkb3VibGUtY29udmVyc2lvbi5jYyBpbiBTb3VyY2VzICovLAorCQkJCUMyMkM1
MkZDMTNGQUY2RUYwMEI3REMwRCAvKiBmYXN0LWR0b2EuY2MgaW4gU291cmNlcyAqLywKKwkJCQlD
MjJDNTJGRTEzRkFGNkVGMDBCN0RDMEQgLyogZml4ZWQtZHRvYS5jYyBpbiBTb3VyY2VzICovLAor
CQkJCUMyMkM1MzEzMTNGQUY2RUYwMEI3REMwRCAvKiBzdHJ0b2QuY2MgaW4gU291cmNlcyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJl
YWRpbmcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVh
ZGluZy5jcHAKaW5kZXggMjY1Mzk2ZjNiZGRmZWEyMzI2ZmRmOTYyMGFjYWRkN2Y5NDEzZjQwZi4u
NDQ5ZTdkYjc4ODFiNjU5ZjU3NmQzNDRmOTg2YWU1MjE3NTFkMzQxYiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAKQEAg
LTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCiAKICNpbmNs
dWRlICJIZWFwLmgiCi0jaW5jbHVkZSAiZHRvYS5oIgorI2luY2x1ZGUgPHd0Zi9kdG9hL2NhY2hl
ZC1wb3dlcnMuaD4KICNpbmNsdWRlICJJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxP
YmplY3QuaCIKICNpbmNsdWRlICJVU3RyaW5nLmgiCkBAIC00OCw2ICs0OCw3IEBAIHN0YXRpYyBw
dGhyZWFkX29uY2VfdCBpbml0aWFsaXplVGhyZWFkaW5nS2V5T25jZSA9IFBUSFJFQURfT05DRV9J
TklUOwogCiBzdGF0aWMgdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nT25jZSgpCiB7CisgICAgZG91
YmxlX2NvbnZlcnNpb246OmluaXRpYWxpemUoKTsKICAgICBXVEY6OmluaXRpYWxpemVUaHJlYWRp
bmcoKTsKICNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCiAgICAgV3JpdGVCYXJy
aWVyQ291bnRlcnM6OmluaXRpYWxpemUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwCmluZGV4IDY3OWY3NDc5ZGVjN2VlYjU0M2VlOWU2
MjMzM2YwNmY4M2Q0OWVmNGQuLmQ3NDQxNjI2ZTExMWEyYmNjMWQzYTE2MDZjODE1NGFiYTBhMGNj
MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclByb3Rv
dHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90
eXBlLmNwcApAQCAtMzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJVaW50MTZXaXRoRnJhY3Rpb24u
aCIKICNpbmNsdWRlICJkdG9hLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNs
dWRlIDx3dGYvRGVjaW1hbE51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9kdG9hL2RvdWJsZS1jb252ZXJz
aW9uLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY6OmRvdWJsZV9jb252ZXJzaW9uOwogCiBuYW1l
c3BhY2UgSlNDIHsKIApAQCAtMzM5LDEyICszNDEsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb0V4cG9uZW50aWFsKEV4ZWNTdGF0ZSogZXhlYykKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBVU3RyaW5nOjpudW1i
ZXIoeCkpKTsKIAogICAgIC8vIFJvdW5kIGlmIHRoZSBhcmd1bWVudCBpcyBub3QgdW5kZWZpbmVk
LCBhbHdheXMgZm9ybWF0IGFzIGV4cG9uZW50aWFsLgotICAgIE51bWJlclRvU3RyaW5nQnVmZmVy
IGJ1ZmZlcjsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBpc1VuZGVmaW5lZAotICAgICAgICA/IERl
Y2ltYWxOdW1iZXIoeCkudG9TdHJpbmdFeHBvbmVudGlhbChidWZmZXIsIFdURjo6TnVtYmVyVG9T
dHJpbmdCdWZmZXJMZW5ndGgpCi0gICAgICAgIDogRGVjaW1hbE51bWJlcih4LCBSb3VuZGluZ1Np
Z25pZmljYW50RmlndXJlcywgZGVjaW1hbFBsYWNlc0luRXhwb25lbnQgKyAxKS50b1N0cmluZ0V4
cG9uZW50aWFsKGJ1ZmZlciwgV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCk7Ci0KLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmcoYnVmZmVyLCBs
ZW5ndGgpKSk7CisgICAgY2hhciBidWZmZXJbV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0
aF07CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyKGJ1ZmZlciwgV1RGOjpOdW1iZXJUb1N0cmlu
Z0J1ZmZlckxlbmd0aCk7CisgICAgY29uc3QgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXImIGNvbnZl
cnRlciA9IERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpFY21hU2NyaXB0Q29udmVydGVyKCk7Cisg
ICAgYnVpbGRlci5SZXNldCgpOworICAgIGlzVW5kZWZpbmVkCisgICAgICAgID8gY29udmVydGVy
LlRvRXhwb25lbnRpYWwoeCwgLTEsICZidWlsZGVyKQorICAgICAgICA6IGNvbnZlcnRlci5Ub0V4
cG9uZW50aWFsKHgsIGRlY2ltYWxQbGFjZXNJbkV4cG9uZW50LCAmYnVpbGRlcik7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBVU3RyaW5nKGJ1aWxkZXIuRmluYWxp
emUoKSkpKTsKIH0KIAogLy8gdG9GaXhlZCBjb252ZXJ0cyBhIG51bWJlciB0byBhIHN0cmluZywg
YWx3YXlzIGZvcm1hdHRpbmcgYXMgYW4gYSBkZWNpbWFsIGZyYWN0aW9uLgpAQCAtMzc2LDEwICsz
ODAsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb0Zp
eGVkKEV4ZWNTdGF0ZSogZXhlYykKICAgICAvLyBoYW5kbGVkIGJ5IG51bWJlclRvU3RyaW5nLgog
ICAgIEFTU0VSVChpc2Zpbml0ZSh4KSk7CiAKLSAgICAvLyBDb252ZXJ0IHRvIGRlY2ltYWwgd2l0
aCByb3VuZGluZywgYW5kIGZvcm1hdCBhcyBkZWNpbWFsLgotICAgIE51bWJlclRvU3RyaW5nQnVm
ZmVyIGJ1ZmZlcjsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBEZWNpbWFsTnVtYmVyKHgsIFJvdW5k
aW5nRGVjaW1hbFBsYWNlcywgZGVjaW1hbFBsYWNlcykudG9TdHJpbmdEZWNpbWFsKGJ1ZmZlciwg
V1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1N0cmluZyhleGVjLCBVU3RyaW5nKGJ1ZmZlciwgbGVuZ3RoKSkpOworICAgIGNoYXIg
YnVmZmVyW1dURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGhdOworICAgIFN0cmluZ0J1aWxk
ZXIgYnVpbGRlcihidWZmZXIsIFdURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgpOworICAg
IGNvbnN0IERvdWJsZVRvU3RyaW5nQ29udmVydGVyJiBjb252ZXJ0ZXIgPSBEb3VibGVUb1N0cmlu
Z0NvbnZlcnRlcjo6RWNtYVNjcmlwdENvbnZlcnRlcigpOworICAgIGJ1aWxkZXIuUmVzZXQoKTsK
KyAgICBjb252ZXJ0ZXIuVG9GaXhlZCh4LCBkZWNpbWFsUGxhY2VzLCAmYnVpbGRlcik7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBVU3RyaW5nKGJ1aWxkZXIuRmlu
YWxpemUoKSkpKTsKIH0KIAogLy8gdG9QcmVjaXNpb24gY29udmVydHMgYSBudW1iZXIgdG8gYSBz
dHJpbmcsIHRha2VpbmcgYW4gYXJndW1lbnQgc3BlY2lmeWluZyBhCkBAIC00MTIsMTcgKzQxOCwx
MiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1RvUHJlY2lz
aW9uKEV4ZWNTdGF0ZSogZXhlYykKICAgICBpZiAoIWlzZmluaXRlKHgpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmc6Om51bWJlcih4KSkpOwog
Ci0gICAgLy8gQ29udmVydCB0byBkZWNpbWFsIHdpdGggcm91bmRpbmcuCi0gICAgRGVjaW1hbE51
bWJlciBudW1iZXIoeCwgUm91bmRpbmdTaWduaWZpY2FudEZpZ3VyZXMsIHNpZ25pZmljYW50Rmln
dXJlcyk7Ci0gICAgLy8gSWYgbnVtYmVyIGlzIGluIHRoZSByYW5nZSAxZS02IDw9IHggPCBwb3co
MTAsIHNpZ25pZmljYW50RmlndXJlcykgdGhlbiBmb3JtYXQKLSAgICAvLyBhcyBkZWNpbWFsLiBP
dGhlcndpc2UsIGZvcm1hdCB0aGUgbnVtYmVyIGFzIGFuIGV4cG9uZW50aWFsLiBEZWNpbWFsIGZv
cm1hdAotICAgIC8vIGRlbWFuZHMgYSBtaW5pbXVtIG9mIChleHBvbmVudCArIDEpIGRpZ2l0cyB0
byByZXByZXNlbnQgYSBudW1iZXIsIGZvciBleGFtcGxlCi0gICAgLy8gMTIzNCAoMS4yMzRlKzMp
IHJlcXVpcmVzIDQgZGlnaXRzLiAoU2VlIEVDTUEtMjYyIDE1LjcuNC43LjEwLmMpCi0gICAgTnVt
YmVyVG9TdHJpbmdCdWZmZXIgYnVmZmVyOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IG51bWJlci5l
eHBvbmVudCgpID49IC02ICYmIG51bWJlci5leHBvbmVudCgpIDwgc2lnbmlmaWNhbnRGaWd1cmVz
Ci0gICAgICAgID8gbnVtYmVyLnRvU3RyaW5nRGVjaW1hbChidWZmZXIsIFdURjo6TnVtYmVyVG9T
dHJpbmdCdWZmZXJMZW5ndGgpCi0gICAgICAgIDogbnVtYmVyLnRvU3RyaW5nRXhwb25lbnRpYWwo
YnVmZmVyLCBXVEY6Ok51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmcoYnVmZmVyLCBsZW5ndGgpKSk7Cisg
ICAgY2hhciBidWZmZXJbV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aF07CisgICAgU3Ry
aW5nQnVpbGRlciBidWlsZGVyKGJ1ZmZlciwgV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0
aCk7CisgICAgY29uc3QgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXImIGNvbnZlcnRlciA9IERvdWJs
ZVRvU3RyaW5nQ29udmVydGVyOjpFY21hU2NyaXB0Q29udmVydGVyKCk7CisgICAgYnVpbGRlci5S
ZXNldCgpOworICAgIGNvbnZlcnRlci5Ub1ByZWNpc2lvbih4LCBzaWduaWZpY2FudEZpZ3VyZXMs
ICZidWlsZGVyKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIFVT
dHJpbmcoYnVpbGRlci5GaW5hbGl6ZSgpKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG51bWJlclByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5jcHAKaW5kZXggYzE0ZjMxOTlmNDA3ZjQ3Zjc5
NWY1MWJiOTIwZTZjMDlmM2MzYTZmZC4uYjc4ZTZmMWFjYzc4MTBjYjI2ZTg5ODQ4YWE1NDdkOGZk
YTJiYmY2NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmlu
Zy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5jcHAKQEAg
LTM1LDEwICszNSwxMCBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHd0Zi9BU0NJ
SUNUeXBlLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvRGVj
aW1hbE51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3Rm
L1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYv
ZHRvYS5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VURjguaD4KIAogI2lmIEhBVkUoU1RSSU5H
U19IKQpAQCAtMTk2LDggKzE5Niw3IEBAIFVTdHJpbmcgVVN0cmluZzo6bnVtYmVyKGxvbmcgbCkK
IFVTdHJpbmcgVVN0cmluZzo6bnVtYmVyKGRvdWJsZSBkKQogewogICAgIE51bWJlclRvU3RyaW5n
QnVmZmVyIGJ1ZmZlcjsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBudW1iZXJUb1N0cmluZyhkLCBi
dWZmZXIpOwotICAgIHJldHVybiBVU3RyaW5nKGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICByZXR1cm4g
VVN0cmluZyhudW1iZXJUb1N0cmluZyhkLCBidWZmZXIpKTsKIH0KIAogVVN0cmluZyBVU3RyaW5n
OjpzdWJzdHJpbmdTaGFyaW5nSW1wbCh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50
eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IGM2ZGRh
MTM5YzRlYzM0NGM5N2MzYjNlNzNmZjA0MWVmODkzMjJkMmQuLmMwMDQ0NDAwYmYwYjc0MjIzZjM0
OGMwMjEyNzMyNDkzZDNmZjBkYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxp
c3RzLnR4dApAQCAtOTksNiArOTksMjggQEAgU0VUKFdURl9IRUFERVJTCiAgICAgV1RGVGhyZWFk
RGF0YS5oCiAgICAgZHRvYS5oCiAKKyAgICBkdG9hL2JpZ251bS1kdG9hLmgKKyAgICBkdG9hL2Jp
Z251bS5oCisgICAgZHRvYS9jYWNoZWQtcG93ZXJzLmgKKyAgICBkdG9hL2RpeS1mcC5oCisgICAg
ZHRvYS9kb3VibGUtY29udmVyc2lvbi5oCisgICAgZHRvYS9kb3VibGUuaAorICAgIGR0b2EvZmFz
dC1kdG9hLmgKKyAgICBkdG9hL2ZpeGVkLWR0b2EuaAorICAgIGR0b2Evc3RydG9kLmgKKyAgICBk
dG9hL3V0aWxzLmgKKworICAgIGR0b2EvYmlnbnVtLWR0b2EuaAorICAgIGR0b2EvYmlnbnVtLmgK
KyAgICBkdG9hL2NhY2hlZC1wb3dlcnMuaAorICAgIGR0b2EvZGl5LWZwLmgKKyAgICBkdG9hL2Rv
dWJsZS1jb252ZXJzaW9uLmgKKyAgICBkdG9hL2RvdWJsZS5oCisgICAgZHRvYS9mYXN0LWR0b2Eu
aAorICAgIGR0b2EvZml4ZWQtZHRvYS5oCisgICAgZHRvYS9zdHJ0b2QuaAorICAgIGR0b2EvdXRp
bHMuaAorCiAgICAgdGV4dC9BdG9taWNTdHJpbmcuaAogICAgIHRleHQvQXRvbWljU3RyaW5nSW1w
bC5oCiAgICAgdGV4dC9DU3RyaW5nLmgKQEAgLTE0MCw2ICsxNjIsMjQgQEAgU0VUKFdURl9TT1VS
Q0VTCiAgICAgV1RGVGhyZWFkRGF0YS5jcHAKICAgICBkdG9hLmNwcAogCisgICAgZHRvYS9iaWdu
dW0tZHRvYS5jYworICAgIGR0b2EvYmlnbnVtLmNjCisgICAgZHRvYS9jYWNoZWQtcG93ZXJzLmNj
CisgICAgZHRvYS9kaXktZnAuY2MKKyAgICBkdG9hL2RvdWJsZS1jb252ZXJzaW9uLmNjCisgICAg
ZHRvYS9mYXN0LWR0b2EuY2MKKyAgICBkdG9hL2ZpeGVkLWR0b2EuY2MKKyAgICBkdG9hL3N0cnRv
ZC5jYworCisgICAgZHRvYS9iaWdudW0tZHRvYS5jYworICAgIGR0b2EvYmlnbnVtLmNjCisgICAg
ZHRvYS9jYWNoZWQtcG93ZXJzLmNjCisgICAgZHRvYS9kaXktZnAuY2MKKyAgICBkdG9hL2RvdWJs
ZS1jb252ZXJzaW9uLmNjCisgICAgZHRvYS9mYXN0LWR0b2EuY2MKKyAgICBkdG9hL2ZpeGVkLWR0
b2EuY2MKKyAgICBkdG9hL3N0cnRvZC5jYworCiAgICAgdGV4dC9BdG9taWNTdHJpbmcuY3BwCiAg
ICAgdGV4dC9DU3RyaW5nLmNwcAogICAgIHRleHQvU3RyaW5nQnVpbGRlci5jcHAKQEAgLTE1NCw2
ICsxOTQsNyBAQCBTRVQoV1RGX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtKQVZBU0NSSVBU
Q09SRV9ESVJ9IgogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vd3RmIgogICAgICIke0pBVkFT
Q1JJUFRDT1JFX0RJUn0vd3RmL3VuaWNvZGUiCisgICAgIiR7SkFWQVNDUklQVENPUkVfRElSfS93
dGYvZHRvYSIKICAgICAiJHtKYXZhU2NyaXB0Q29yZV9JTkNMVURFX0RJUkVDVE9SSUVTfSIKICkK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS5jcHAKaW5kZXggMTQ2NmRmNzM2ODA4OTVmYjdkNjcy
ZjY3OGE3NDI5NTNkOWM2ZDVhZC4uOTdkNTdmMzFjOWUzYzM0MjE3ZDk0ZjA0ZDgyNDE2NGVjYzky
Mzk5NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EuY3BwCkBAIC03NSwxMiArNzUsMTIgQEAK
ICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvQWx3YXlzSW5saW5lLmg+CiAjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvRGVjaW1hbE51bWJlci5oPgog
I2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
ICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9kdG9hL2RvdWJsZS1jb252
ZXJzaW9uLmg+CiAKICNpZiBDT01QSUxFUihNU1ZDKQogI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6
IDQyNDQpCkBAIC0xODAyLDMzICsxODAyLDEzIEBAIHZvaWQgZHRvYVJvdW5kRFAoRHRvYUJ1ZmZl
ciByZXN1bHQsIGRvdWJsZSBkZCwgaW50IG5kaWdpdHMsIGJvb2wmIHNpZ24sIGludCYgZXhwCiAg
ICAgZHRvYTxmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlPihyZXN1bHQsIGRkLCBuZGlnaXRzLCBz
aWduLCBleHBvbmVudCwgcHJlY2lzaW9uKTsKIH0KIAotc3RhdGljIEFMV0FZU19JTkxJTkUgdm9p
ZCBjb3B5QXNjaWlUb1VURjE2KFVDaGFyKiBuZXh0LCBjb25zdCBjaGFyKiBzcmMsIHVuc2lnbmVk
IHNpemUpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAg
ICAgKm5leHQrKyA9ICpzcmMrKzsKLX0KIAotdW5zaWduZWQgbnVtYmVyVG9TdHJpbmcoZG91Ymxl
IGQsIE51bWJlclRvU3RyaW5nQnVmZmVyIGJ1ZmZlcikKK2NvbnN0IGNoYXIgKm51bWJlclRvU3Ry
aW5nKGRvdWJsZSBkLCBOdW1iZXJUb1N0cmluZ0J1ZmZlciBidWZmZXIpCiB7Ci0gICAgLy8gSGFu
ZGxlIE5hTiBhbmQgSW5maW5pdHkuCi0gICAgaWYgKCFpc2Zpbml0ZShkKSkgewotICAgICAgICBp
ZiAoaXNuYW4oZCkpIHsKLSAgICAgICAgICAgIGNvcHlBc2NpaVRvVVRGMTYoYnVmZmVyLCAiTmFO
IiwgMyk7Ci0gICAgICAgICAgICByZXR1cm4gMzsKLSAgICAgICAgfQotICAgICAgICBpZiAoZCA+
IDApIHsKLSAgICAgICAgICAgIGNvcHlBc2NpaVRvVVRGMTYoYnVmZmVyLCAiSW5maW5pdHkiLCA4
KTsKLSAgICAgICAgICAgIHJldHVybiA4OwotICAgICAgICB9Ci0gICAgICAgIGNvcHlBc2NpaVRv
VVRGMTYoYnVmZmVyLCAiLUluZmluaXR5IiwgOSk7Ci0gICAgICAgIHJldHVybiA5OwotICAgIH0K
LQotICAgIC8vIENvbnZlcnQgdG8gZGVjaW1hbCB3aXRoIHJvdW5kaW5nLgotICAgIERlY2ltYWxO
dW1iZXIgbnVtYmVyKGQpOwotICAgIHJldHVybiBudW1iZXIuZXhwb25lbnQoKSA+PSAtNiAmJiBu
dW1iZXIuZXhwb25lbnQoKSA8IDIxCi0gICAgICAgID8gbnVtYmVyLnRvU3RyaW5nRGVjaW1hbChi
dWZmZXIsIE51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoKQotICAgICAgICA6IG51bWJlci50b1N0
cmluZ0V4cG9uZW50aWFsKGJ1ZmZlciwgTnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgpOworICAg
IGRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdCdWlsZGVyIGJ1aWxkZXIoYnVmZmVyLCBOdW1iZXJU
b1N0cmluZ0J1ZmZlckxlbmd0aCk7CisgICAgY29uc3QgZG91YmxlX2NvbnZlcnNpb246OkRvdWJs
ZVRvU3RyaW5nQ29udmVydGVyJiBjb252ZXJ0ZXIgPSBkb3VibGVfY29udmVyc2lvbjo6RG91Ymxl
VG9TdHJpbmdDb252ZXJ0ZXI6OkVjbWFTY3JpcHRDb252ZXJ0ZXIoKTsKKyAgICBjb252ZXJ0ZXIu
VG9TaG9ydGVzdChkLCAmYnVpbGRlcik7CisgICAgcmV0dXJuIGJ1aWxkZXIuRmluYWxpemUoKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL2R0b2EuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS5oCmluZGV4IDM5
MjRhMWNjNDA1ZGIyOTNiMDFmNmQ0YmRhZTY1NzU5NTI1ODE3MmMuLjcxOTkxMjExMTFkOTNlZGU5
MDFiY2E3OGVjMTJmYmMyMzNhYWEyM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvZHRvYS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS5oCkBAIC0y
MSw2ICsyMSw3IEBACiAjaWZuZGVmIFdURl9kdG9hX2gKICNkZWZpbmUgV1RGX2R0b2FfaAogCisj
aW5jbHVkZSA8d3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uaD4KICNpbmNsdWRlIDx3dGYvdW5p
Y29kZS9Vbmljb2RlLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMjgsMjQgKzI5LDI2IEBAIGNs
YXNzIE11dGV4OwogCiBleHRlcm4gV1RGOjpNdXRleCogc19kdG9hUDVNdXRleDsKIAotLy8gczAw
OiBpbnB1dCBzdHJpbmcuIE11c3Qgbm90IGJlIDAgYW5kIG11c3QgYmUgdGVybWluYXRlZCBieSAw
LgotLy8gc2U6ICpzZSB3aWxsIGhhdmUgdGhlIGxhc3QgY29uc3VtZWQgY2hhcmFjdGVyIHBvc2l0
aW9uICsgMS4KLWRvdWJsZSBzdHJ0b2QoY29uc3QgY2hhciogczAwLCBjaGFyKiogc2UpOwotCiB0
eXBlZGVmIGNoYXIgRHRvYUJ1ZmZlcls4MF07CiAKIHZvaWQgZHRvYShEdG9hQnVmZmVyIHJlc3Vs
dCwgZG91YmxlIGRkLCBib29sJiBzaWduLCBpbnQmIGV4cG9uZW50LCB1bnNpZ25lZCYgcHJlY2lz
aW9uKTsKIHZvaWQgZHRvYVJvdW5kU0YoRHRvYUJ1ZmZlciByZXN1bHQsIGRvdWJsZSBkZCwgaW50
IG5kaWdpdHMsIGJvb2wmIHNpZ24sIGludCYgZXhwb25lbnQsIHVuc2lnbmVkJiBwcmVjaXNpb24p
Owogdm9pZCBkdG9hUm91bmREUChEdG9hQnVmZmVyIHJlc3VsdCwgZG91YmxlIGRkLCBpbnQgbmRp
Z2l0cywgYm9vbCYgc2lnbiwgaW50JiBleHBvbmVudCwgdW5zaWduZWQmIHByZWNpc2lvbik7CiAK
Ky8vIHMwMDogaW5wdXQgc3RyaW5nLiBNdXN0IG5vdCBiZSAwIGFuZCBtdXN0IGJlIHRlcm1pbmF0
ZWQgYnkgMC4KKy8vIHNlOiAqc2Ugd2lsbCBoYXZlIHRoZSBsYXN0IGNvbnN1bWVkIGNoYXJhY3Rl
ciBwb3NpdGlvbiArIDEuCitkb3VibGUgc3RydG9kKGNvbnN0IGNoYXIqIHMwMCwgY2hhcioqIHNl
KTsKKwogLy8gU2l6ZSA9IDgwIGZvciBzaXplb2YoRHRvYUJ1ZmZlcikgKyBzb21lIHNpZ24gYml0
cywgZGVjaW1hbCBwb2ludCwgJ2UnLCBleHBvbmVudCBkaWdpdHMuCiBjb25zdCB1bnNpZ25lZCBO
dW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCA9IDk2OwotdHlwZWRlZiBVQ2hhciBOdW1iZXJUb1N0
cmluZ0J1ZmZlcltOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aF07Ci11bnNpZ25lZCBudW1iZXJU
b1N0cmluZyhkb3VibGUsIE51bWJlclRvU3RyaW5nQnVmZmVyKTsKK3R5cGVkZWYgY2hhciBOdW1i
ZXJUb1N0cmluZ0J1ZmZlcltOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aF07Cit0eXBlZGVmIFVD
aGFyIE51bWJlclRvVVN0cmluZ0J1ZmZlcltOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aF07Citj
b25zdCBjaGFyICpudW1iZXJUb1N0cmluZyhkb3VibGUsIE51bWJlclRvU3RyaW5nQnVmZmVyKTsK
IAogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXI7
Cit1c2luZyBXVEY6Ok51bWJlclRvVVN0cmluZ0J1ZmZlcjsKIHVzaW5nIFdURjo6bnVtYmVyVG9T
dHJpbmc7CiAKICNlbmRpZiAvLyBXVEZfZHRvYV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL2R0b2EvQ09QWUlORyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRv
YS9DT1BZSU5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkzMzcxOGE5ZWY5ZGFlNGNiNGFmYTU2ZTQ5MDIxMTc2MGQ4
YTk0OWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2Ev
Q09QWUlORwpAQCAtMCwwICsxLDI2IEBACitDb3B5cmlnaHQgMjAwNi0yMDExLCB0aGUgVjggcHJv
amVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCittZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgICAgICBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICAg
ICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkCisgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAgICBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
KyAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKK09XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCitEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
K1RIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9MSUNFTlNFIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9kdG9hL0xJQ0VOU0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTMzNzE4YTllZjlkYWU0Y2I0YWZhNTZlNDkw
MjExNzYwZDhhOTQ5ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvZHRvYS9MSUNFTlNFCkBAIC0wLDAgKzEsMjYgQEAKK0NvcHlyaWdodCAyMDA2LTIwMTEsIHRo
ZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKK21ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAgICAg
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nCisgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQKKyAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgICAg
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CitBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCitTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKK0RBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCitPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL1JFQURNRSBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvZHRvYS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjE4NmI0MjBmNDJiYzE0YzdkNTc2
NWVhNDNmNmIyOGQzYzI5YjkyMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvZHRvYS9SRUFETUUKQEAgLTAsMCArMSwxMSBAQAoraHR0cDovL2NvZGUuZ29vZ2xl
LmNvbS9wL2RvdWJsZS1jb252ZXJzaW9uCisKK1RoaXMgcHJvamVjdCAoZG91YmxlLWNvbnZlcnNp
b24pIHByb3ZpZGVzIGJpbmFyeS1kZWNpbWFsIGFuZCBkZWNpbWFsLWJpbmFyeQorcm91dGluZXMg
Zm9yIElFRUUgZG91Ymxlcy4KKworVGhlIGxpYnJhcnkgY29uc2lzdHMgb2YgZWZmaWNpZW50IGNv
bnZlcnNpb24gcm91dGluZXMgdGhhdCBoYXZlIGJlZW4gZXh0cmFjdGVkCitmcm9tIHRoZSBWOCBK
YXZhU2NyaXB0IGVuZ2luZS4gVGhlIGNvZGUgaGFzIGJlZW4gcmVmYWN0b3JlZCBhbmQgaW1wcm92
ZWQgc28gdGhhdAoraXQgY2FuIGJlIHVzZWQgbW9yZSBlYXNpbHkgaW4gb3RoZXIgcHJvamVjdHMu
CisKK1RoZXJlIGlzIGV4dGVuc2l2ZSBkb2N1bWVudGF0aW9uIGluIHNyYy9kb3VibGUtY29udmVy
c2lvbi5oLiBPdGhlciBleGFtcGxlcyBjYW4KK2JlIGZvdW5kIGluIHRlc3QvY2N0ZXN0L3Rlc3Qt
Y29udmVyc2lvbnMuY2MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0
b2EvYmlnbnVtLWR0b2EuY2MgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvYmlnbnVt
LWR0b2EuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZGU5ODcxZTNhY2E0ZGI0ZTlkZDI2M2FmNmMxMWE0MWQ3OTAx
OTU1NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9i
aWdudW0tZHRvYS5jYwpAQCAtMCwwICsxLDY1NyBAQAorLy8gQ29weXJpZ2h0IDIwMTAgdGhlIFY4
IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8v
CisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSAiYmlnbnVtLWR0b2EuaCIKKworI2lu
Y2x1ZGUgImJpZ251bS5oIgorI2luY2x1ZGUgImRvdWJsZS5oIgorCituYW1lc3BhY2UgV1RGIHsK
KworbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKKyAgICAKKyAgICBzdGF0aWMgaW50IE5v
cm1hbGl6ZWRFeHBvbmVudCh1aW50NjRfdCBzaWduaWZpY2FuZCwgaW50IGV4cG9uZW50KSB7Cisg
ICAgICAgIEFTU0VSVChzaWduaWZpY2FuZCAhPSAwKTsKKyAgICAgICAgd2hpbGUgKChzaWduaWZp
Y2FuZCAmIERvdWJsZTo6a0hpZGRlbkJpdCkgPT0gMCkgeworICAgICAgICAgICAgc2lnbmlmaWNh
bmQgPSBzaWduaWZpY2FuZCA8PCAxOworICAgICAgICAgICAgZXhwb25lbnQgPSBleHBvbmVudCAt
IDE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGV4cG9uZW50OworICAgIH0KKyAgICAKKyAg
ICAKKyAgICAvLyBGb3J3YXJkIGRlY2xhcmF0aW9uczoKKyAgICAvLyBSZXR1cm5zIGFuIGVzdGlt
YXRpb24gb2YgayBzdWNoIHRoYXQgMTBeKGstMSkgPD0gdiA8IDEwXmsuCisgICAgc3RhdGljIGlu
dCBFc3RpbWF0ZVBvd2VyKGludCBleHBvbmVudCk7CisgICAgLy8gQ29tcHV0ZXMgdiAvIDEwXmVz
dGltYXRlZF9wb3dlciBleGFjdGx5LCBhcyBhIHJhdGlvIG9mIHR3byBiaWdudW1zLCBudW1lcmF0
b3IKKyAgICAvLyBhbmQgZGVub21pbmF0b3IuCisgICAgc3RhdGljIHZvaWQgSW5pdGlhbFNjYWxl
ZFN0YXJ0VmFsdWVzKGRvdWJsZSB2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgZXN0aW1hdGVkX3Bvd2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIG5lZWRfYm91bmRhcnlfZGVsdGFzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIG51bWVyYXRvciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBkZW5vbWluYXRvciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBkZWx0YV9taW51cywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBkZWx0YV9w
bHVzKTsKKyAgICAvLyBNdWx0aXBsaWVzIG51bWVyYXRvci9kZW5vbWluYXRvciBzbyB0aGF0IGl0
cyB2YWx1ZXMgbGllcyBpbiB0aGUgcmFuZ2UgMS0xMC4KKyAgICAvLyBSZXR1cm5zIGRlY2ltYWxf
cG9pbnQgcy50LgorICAgIC8vICB2ID0gbnVtZXJhdG9yJy9kZW5vbWluYXRvcicgKiAxMF4oZGVj
aW1hbF9wb2ludC0xKQorICAgIC8vICAgICB3aGVyZSBudW1lcmF0b3InIGFuZCBkZW5vbWluYXRv
cicgYXJlIHRoZSB2YWx1ZXMgb2YgbnVtZXJhdG9yIGFuZAorICAgIC8vICAgICBkZW5vbWluYXRv
ciBhZnRlciB0aGUgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLgorICAgIHN0YXRpYyB2b2lkIEZpeHVw
TXVsdGlwbHkxMChpbnQgZXN0aW1hdGVkX3Bvd2VyLCBib29sIGlzX2V2ZW4sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCogZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQmlnbnVtKiBudW1lcmF0b3IsIEJpZ251bSogZGVub21pbmF0b3Is
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogZGVsdGFfbWludXMsIEJp
Z251bSogZGVsdGFfcGx1cyk7CisgICAgLy8gR2VuZXJhdGVzIGRpZ2l0cyBmcm9tIHRoZSBsZWZ0
IHRvIHRoZSByaWdodCBhbmQgc3RvcHMgd2hlbiB0aGUgZ2VuZXJhdGVkCisgICAgLy8gZGlnaXRz
IHlpZWxkIHRoZSBzaG9ydGVzdCBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIHYuCisgICAgc3Rh
dGljIHZvaWQgR2VuZXJhdGVTaG9ydGVzdERpZ2l0cyhCaWdudW0qIG51bWVyYXRvciwgQmlnbnVt
KiBkZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJp
Z251bSogZGVsdGFfbWludXMsIEJpZ251bSogZGVsdGFfcGx1cywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfZXZlbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXIsIGludCogbGVuZ3RoKTsKKyAg
ICAvLyBHZW5lcmF0ZXMgJ3JlcXVlc3RlZF9kaWdpdHMnIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50
LgorICAgIHN0YXRpYyB2b2lkIEJpZ251bVRvRml4ZWQoaW50IHJlcXVlc3RlZF9kaWdpdHMsIGlu
dCogZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSog
bnVtZXJhdG9yLCBCaWdudW0qIGRlbm9taW5hdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVmVjdG9yPGNoYXI+KGJ1ZmZlciksIGludCogbGVuZ3RoKTsKKyAgICAvLyBHZW5lcmF0
ZXMgJ2NvdW50JyBkaWdpdHMgb2YgbnVtZXJhdG9yL2Rlbm9taW5hdG9yLgorICAgIC8vIE9uY2Ug
J2NvdW50JyBkaWdpdHMgaGF2ZSBiZWVuIHByb2R1Y2VkIHJvdW5kcyB0aGUgcmVzdWx0IGRlcGVu
ZGluZyBvbiB0aGUKKyAgICAvLyByZW1haW5kZXIgKHJlbWFpbmRlcnMgb2YgZXhhY3RseSAuNSBy
b3VuZCB1cHdhcmRzKS4gTWlnaHQgdXBkYXRlIHRoZQorICAgIC8vIGRlY2ltYWxfcG9pbnQgd2hl
biByb3VuZGluZyB1cCAoZm9yIGV4YW1wbGUgZm9yIDAuOTk5OSkuCisgICAgc3RhdGljIHZvaWQg
R2VuZXJhdGVDb3VudGVkRGlnaXRzKGludCBjb3VudCwgaW50KiBkZWNpbWFsX3BvaW50LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIG51bWVyYXRvciwgQmln
bnVtKiBkZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VmVjdG9yPGNoYXI+KGJ1ZmZlciksIGludCogbGVuZ3RoKTsKKyAgICAKKyAgICAKKyAgICB2b2lk
IEJpZ251bUR0b2EoZG91YmxlIHYsIEJpZ251bUR0b2FNb2RlIG1vZGUsIGludCByZXF1ZXN0ZWRf
ZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLCBpbnQqIGxl
bmd0aCwgaW50KiBkZWNpbWFsX3BvaW50KSB7CisgICAgICAgIEFTU0VSVCh2ID4gMCk7CisgICAg
ICAgIEFTU0VSVCghRG91YmxlKHYpLklzU3BlY2lhbCgpKTsKKyAgICAgICAgdWludDY0X3Qgc2ln
bmlmaWNhbmQgPSBEb3VibGUodikuU2lnbmlmaWNhbmQoKTsKKyAgICAgICAgYm9vbCBpc19ldmVu
ID0gKHNpZ25pZmljYW5kICYgMSkgPT0gMDsKKyAgICAgICAgaW50IGV4cG9uZW50ID0gRG91Ymxl
KHYpLkV4cG9uZW50KCk7CisgICAgICAgIGludCBub3JtYWxpemVkX2V4cG9uZW50ID0gTm9ybWFs
aXplZEV4cG9uZW50KHNpZ25pZmljYW5kLCBleHBvbmVudCk7CisgICAgICAgIC8vIGVzdGltYXRl
ZF9wb3dlciBtaWdodCBiZSB0b28gbG93IGJ5IDEuCisgICAgICAgIGludCBlc3RpbWF0ZWRfcG93
ZXIgPSBFc3RpbWF0ZVBvd2VyKG5vcm1hbGl6ZWRfZXhwb25lbnQpOworICAgICAgICAKKyAgICAg
ICAgLy8gU2hvcnRjdXQgZm9yIEZpeGVkLgorICAgICAgICAvLyBUaGUgcmVxdWVzdGVkIGRpZ2l0
cyBjb3JyZXNwb25kIHRvIHRoZSBkaWdpdHMgYWZ0ZXIgdGhlIHBvaW50LiBJZiB0aGUKKyAgICAg
ICAgLy8gbnVtYmVyIGlzIG11Y2ggdG9vIHNtYWxsLCB0aGVuIHRoZXJlIGlzIG5vIG5lZWQgaW4g
dHJ5aW5nIHRvIGdldCBhbnkKKyAgICAgICAgLy8gZGlnaXRzLgorICAgICAgICBpZiAobW9kZSA9
PSBCSUdOVU1fRFRPQV9GSVhFRCAmJiAtZXN0aW1hdGVkX3Bvd2VyIC0gMSA+IHJlcXVlc3RlZF9k
aWdpdHMpIHsKKyAgICAgICAgICAgIGJ1ZmZlclswXSA9ICdcMCc7CisgICAgICAgICAgICAqbGVu
Z3RoID0gMDsKKyAgICAgICAgICAgIC8vIFNldCBkZWNpbWFsLXBvaW50IHRvIC1yZXF1ZXN0ZWRf
ZGlnaXRzLiBUaGlzIGlzIHdoYXQgR2F5IGRvZXMuCisgICAgICAgICAgICAvLyBOb3RlIHRoYXQg
aXQgc2hvdWxkIG5vdCBoYXZlIGFueSBlZmZlY3QgYW55d2F5cyBzaW5jZSB0aGUgc3RyaW5nIGlz
CisgICAgICAgICAgICAvLyBlbXB0eS4KKyAgICAgICAgICAgICpkZWNpbWFsX3BvaW50ID0gLXJl
cXVlc3RlZF9kaWdpdHM7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIEJpZ251bSBudW1lcmF0b3I7CisgICAgICAgIEJpZ251bSBkZW5vbWluYXRvcjsK
KyAgICAgICAgQmlnbnVtIGRlbHRhX21pbnVzOworICAgICAgICBCaWdudW0gZGVsdGFfcGx1czsK
KyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBiaWdudW0gY2FuIGdyb3cgbGFyZ2UgZW5vdWdoLiBU
aGUgc21hbGxlc3QgZG91YmxlIGVxdWFscworICAgICAgICAvLyA0ZS0zMjQuIEluIHRoaXMgY2Fz
ZSB0aGUgZGVub21pbmF0b3IgbmVlZHMgZmV3ZXIgdGhhbiAzMjQqNCBiaW5hcnkgZGlnaXRzLgor
ICAgICAgICAvLyBUaGUgbWF4aW11bSBkb3VibGUgaXMgMS43OTc2OTMxMzQ4NjIzMTU3ZTMwOCB3
aGljaCBuZWVkcyBmZXdlciB0aGFuCisgICAgICAgIC8vIDMwOCo0IGJpbmFyeSBkaWdpdHMuCisg
ICAgICAgIEFTU0VSVChCaWdudW06OmtNYXhTaWduaWZpY2FudEJpdHMgPj0gMzI0KjQpOworICAg
ICAgICBib29sIG5lZWRfYm91bmRhcnlfZGVsdGFzID0gKG1vZGUgPT0gQklHTlVNX0RUT0FfU0hP
UlRFU1QpOworICAgICAgICBJbml0aWFsU2NhbGVkU3RhcnRWYWx1ZXModiwgZXN0aW1hdGVkX3Bv
d2VyLCBuZWVkX2JvdW5kYXJ5X2RlbHRhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZudW1lcmF0b3IsICZkZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZkZWx0YV9taW51cywgJmRlbHRhX3BsdXMpOworICAgICAgICAvLyBXZSBub3cgaGF2
ZSB2ID0gKG51bWVyYXRvciAvIGRlbm9taW5hdG9yKSAqIDEwXmVzdGltYXRlZF9wb3dlci4KKyAg
ICAgICAgRml4dXBNdWx0aXBseTEwKGVzdGltYXRlZF9wb3dlciwgaXNfZXZlbiwgZGVjaW1hbF9w
b2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICZudW1lcmF0b3IsICZkZW5vbWluYXRvciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICZkZWx0YV9taW51cywgJmRlbHRhX3BsdXMpOworICAg
ICAgICAvLyBXZSBub3cgaGF2ZSB2ID0gKG51bWVyYXRvciAvIGRlbm9taW5hdG9yKSAqIDEwXihk
ZWNpbWFsX3BvaW50LTEpLCBhbmQKKyAgICAgICAgLy8gIDEgPD0gKG51bWVyYXRvciArIGRlbHRh
X3BsdXMpIC8gZGVub21pbmF0b3IgPCAxMAorICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAg
ICAgICAgIGNhc2UgQklHTlVNX0RUT0FfU0hPUlRFU1Q6CisgICAgICAgICAgICAgICAgR2VuZXJh
dGVTaG9ydGVzdERpZ2l0cygmbnVtZXJhdG9yLCAmZGVub21pbmF0b3IsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmZGVsdGFfbWludXMsICZkZWx0YV9wbHVzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfZXZlbiwgYnVmZmVyLCBsZW5n
dGgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCSUdOVU1fRFRP
QV9GSVhFRDoKKyAgICAgICAgICAgICAgICBCaWdudW1Ub0ZpeGVkKHJlcXVlc3RlZF9kaWdpdHMs
IGRlY2ltYWxfcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbnVtZXJhdG9y
LCAmZGVub21pbmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGxl
bmd0aCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJJR05VTV9E
VE9BX1BSRUNJU0lPTjoKKyAgICAgICAgICAgICAgICBHZW5lcmF0ZUNvdW50ZWREaWdpdHMocmVx
dWVzdGVkX2RpZ2l0cywgZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJm51bWVyYXRvciwgJmRlbm9taW5hdG9yLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgIH0KKyAgICAgICAgYnVmZmVyWypsZW5ndGhdID0gJ1wwJzsKKyAgICB9CisgICAg
CisgICAgCisgICAgLy8gVGhlIHByb2NlZHVyZSBzdGFydHMgZ2VuZXJhdGluZyBkaWdpdHMgZnJv
bSB0aGUgbGVmdCB0byB0aGUgcmlnaHQgYW5kIHN0b3BzCisgICAgLy8gd2hlbiB0aGUgZ2VuZXJh
dGVkIGRpZ2l0cyB5aWVsZCB0aGUgc2hvcnRlc3QgZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiB2
LiBBCisgICAgLy8gZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiB2IGlzIGEgbnVtYmVyIGx5aW5n
IGNsb3NlciB0byB2IHRoYW4gdG8gYW55IG90aGVyCisgICAgLy8gZG91YmxlLCBzbyBpdCBjb252
ZXJ0cyB0byB2IHdoZW4gcmVhZC4KKyAgICAvLworICAgIC8vIFRoaXMgaXMgdHJ1ZSBpZiBkLCB0
aGUgZGVjaW1hbCByZXByZXNlbnRhdGlvbiwgaXMgYmV0d2VlbiBtLSBhbmQgbSssIHRoZQorICAg
IC8vIHVwcGVyIGFuZCBsb3dlciBib3VuZGFyaWVzLiBkIG11c3QgYmUgc3RyaWN0bHkgYmV0d2Vl
biB0aGVtIGlmICFpc19ldmVuLgorICAgIC8vICAgICAgICAgICBtLSA6PSAobnVtZXJhdG9yIC0g
ZGVsdGFfbWludXMpIC8gZGVub21pbmF0b3IKKyAgICAvLyAgICAgICAgICAgbSsgOj0gKG51bWVy
YXRvciArIGRlbHRhX3BsdXMpIC8gZGVub21pbmF0b3IKKyAgICAvLworICAgIC8vIFByZWNvbmRp
dGlvbjogMCA8PSAobnVtZXJhdG9yK2RlbHRhX3BsdXMpIC8gZGVub21pbmF0b3IgPCAxMC4KKyAg
ICAvLyAgIElmIDEgPD0gKG51bWVyYXRvcitkZWx0YV9wbHVzKSAvIGRlbm9taW5hdG9yIDwgMTAg
dGhlbiBubyBsZWFkaW5nIDAgZGlnaXQKKyAgICAvLyAgIHdpbGwgYmUgcHJvZHVjZWQuIFRoaXMg
c2hvdWxkIGJlIHRoZSBzdGFuZGFyZCBwcmVjb25kaXRpb24uCisgICAgc3RhdGljIHZvaWQgR2Vu
ZXJhdGVTaG9ydGVzdERpZ2l0cyhCaWdudW0qIG51bWVyYXRvciwgQmlnbnVtKiBkZW5vbWluYXRv
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogZGVsdGFf
bWludXMsIEJpZ251bSogZGVsdGFfcGx1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgaXNfZXZlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXIsIGludCogbGVuZ3RoKSB7CisgICAgICAgIC8vIFNt
YWxsIG9wdGltaXphdGlvbjogaWYgZGVsdGFfbWludXMgYW5kIGRlbHRhX3BsdXMgYXJlIHRoZSBz
YW1lIGp1c3QgcmV1c2UKKyAgICAgICAgLy8gb25lIG9mIHRoZSB0d28gYmlnbnVtcy4KKyAgICAg
ICAgaWYgKEJpZ251bTo6RXF1YWwoKmRlbHRhX21pbnVzLCAqZGVsdGFfcGx1cykpIHsKKyAgICAg
ICAgICAgIGRlbHRhX3BsdXMgPSBkZWx0YV9taW51czsKKyAgICAgICAgfQorICAgICAgICAqbGVu
Z3RoID0gMDsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIHVpbnQxNl90IGRp
Z2l0OworICAgICAgICAgICAgZGlnaXQgPSBudW1lcmF0b3ItPkRpdmlkZU1vZHVsb0ludEJpZ251
bSgqZGVub21pbmF0b3IpOworICAgICAgICAgICAgQVNTRVJUKGRpZ2l0IDw9IDkpOyAgLy8gZGln
aXQgaXMgYSB1aW50MTZfdCBhbmQgdGhlcmVmb3JlIGFsd2F5cyBwb3NpdGl2ZS4KKyAgICAgICAg
ICAgIC8vIGRpZ2l0ID0gbnVtZXJhdG9yIC8gZGVub21pbmF0b3IgKGludGVnZXIgZGl2aXNpb24p
LgorICAgICAgICAgICAgLy8gbnVtZXJhdG9yID0gbnVtZXJhdG9yICUgZGVub21pbmF0b3IuCisg
ICAgICAgICAgICBidWZmZXJbKCpsZW5ndGgpKytdID0gZGlnaXQgKyAnMCc7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIC8vIENhbiB3ZSBzdG9wIGFscmVhZHk/CisgICAgICAgICAgICAvLyBJ
ZiB0aGUgcmVtYWluZGVyIG9mIHRoZSBkaXZpc2lvbiBpcyBsZXNzIHRoYW4gdGhlIGRpc3RhbmNl
IHRvIHRoZSBsb3dlcgorICAgICAgICAgICAgLy8gYm91bmRhcnkgd2UgY2FuIHN0b3AuIEluIHRo
aXMgY2FzZSB3ZSBzaW1wbHkgcm91bmQgZG93biAoZGlzY2FyZGluZyB0aGUKKyAgICAgICAgICAg
IC8vIHJlbWFpbmRlcikuCisgICAgICAgICAgICAvLyBTaW1pbGFybHkgd2UgdGVzdCBpZiB3ZSBj
YW4gcm91bmQgdXAgKHVzaW5nIHRoZSB1cHBlciBib3VuZGFyeSkuCisgICAgICAgICAgICBib29s
IGluX2RlbHRhX3Jvb21fbWludXM7CisgICAgICAgICAgICBib29sIGluX2RlbHRhX3Jvb21fcGx1
czsKKyAgICAgICAgICAgIGlmIChpc19ldmVuKSB7CisgICAgICAgICAgICAgICAgaW5fZGVsdGFf
cm9vbV9taW51cyA9IEJpZ251bTo6TGVzc0VxdWFsKCpudW1lcmF0b3IsICpkZWx0YV9taW51cyk7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGluX2RlbHRhX3Jvb21fbWlu
dXMgPSBCaWdudW06Okxlc3MoKm51bWVyYXRvciwgKmRlbHRhX21pbnVzKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChpc19ldmVuKSB7CisgICAgICAgICAgICAgICAgaW5fZGVsdGFf
cm9vbV9wbHVzID0KKyAgICAgICAgICAgICAgICBCaWdudW06OlBsdXNDb21wYXJlKCpudW1lcmF0
b3IsICpkZWx0YV9wbHVzLCAqZGVub21pbmF0b3IpID49IDA7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGluX2RlbHRhX3Jvb21fcGx1cyA9CisgICAgICAgICAgICAgICAg
QmlnbnVtOjpQbHVzQ29tcGFyZSgqbnVtZXJhdG9yLCAqZGVsdGFfcGx1cywgKmRlbm9taW5hdG9y
KSA+IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWluX2RlbHRhX3Jvb21fbWlu
dXMgJiYgIWluX2RlbHRhX3Jvb21fcGx1cykgeworICAgICAgICAgICAgICAgIC8vIFByZXBhcmUg
Zm9yIG5leHQgaXRlcmF0aW9uLgorICAgICAgICAgICAgICAgIG51bWVyYXRvci0+VGltZXMxMCgp
OworICAgICAgICAgICAgICAgIGRlbHRhX21pbnVzLT5UaW1lczEwKCk7CisgICAgICAgICAgICAg
ICAgLy8gV2Ugb3B0aW1pemVkIGRlbHRhX3BsdXMgdG8gYmUgZXF1YWwgdG8gZGVsdGFfbWludXMg
KGlmIHRoZXkgc2hhcmUgdGhlCisgICAgICAgICAgICAgICAgLy8gc2FtZSB2YWx1ZSkuIFNvIGRv
bid0IG11bHRpcGx5IGRlbHRhX3BsdXMgaWYgdGhleSBwb2ludCB0byB0aGUgc2FtZQorICAgICAg
ICAgICAgICAgIC8vIG9iamVjdC4KKyAgICAgICAgICAgICAgICBpZiAoZGVsdGFfbWludXMgIT0g
ZGVsdGFfcGx1cykgeworICAgICAgICAgICAgICAgICAgICBkZWx0YV9wbHVzLT5UaW1lczEwKCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChpbl9kZWx0YV9yb29t
X21pbnVzICYmIGluX2RlbHRhX3Jvb21fcGx1cykgeworICAgICAgICAgICAgICAgIC8vIExldCdz
IHNlZSBpZiAyKm51bWVyYXRvciA8IGRlbm9taW5hdG9yLgorICAgICAgICAgICAgICAgIC8vIElm
IHllcywgdGhlbiB0aGUgbmV4dCBkaWdpdCB3b3VsZCBiZSA8IDUgYW5kIHdlIGNhbiByb3VuZCBk
b3duLgorICAgICAgICAgICAgICAgIGludCBjb21wYXJlID0gQmlnbnVtOjpQbHVzQ29tcGFyZSgq
bnVtZXJhdG9yLCAqbnVtZXJhdG9yLCAqZGVub21pbmF0b3IpOworICAgICAgICAgICAgICAgIGlm
IChjb21wYXJlIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAvLyBSZW1haW5pbmcgZGlnaXRz
IGFyZSBsZXNzIHRoYW4gLjUuIC0+IFJvdW5kIGRvd24gKD09IGRvIG5vdGhpbmcpLgorICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoY29tcGFyZSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gUmVtYWluaW5nIGRpZ2l0cyBhcmUgbW9yZSB0aGFuIC41IG9mIGRlbm9taW5hdG9yLiAtPiBS
b3VuZCB1cC4KKyAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRoZSBsYXN0IGRpZ2l0
IGNvdWxkIG5vdCBiZSBhICc5JyBhcyBvdGhlcndpc2UgdGhlIHdob2xlCisgICAgICAgICAgICAg
ICAgICAgIC8vIGxvb3Agd291bGQgaGF2ZSBzdG9wcGVkIGVhcmxpZXIuCisgICAgICAgICAgICAg
ICAgICAgIC8vIFdlIHN0aWxsIGhhdmUgYW4gYXNzZXJ0IGhlcmUgaW4gY2FzZSB0aGUgcHJlY29u
ZGl0aW9ucyB3ZXJlIG5vdAorICAgICAgICAgICAgICAgICAgICAvLyBzYXRpc2ZpZWQuCisgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChidWZmZXJbKCpsZW5ndGgpIC0gMV0gIT0gJzknKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnVmZmVyWygqbGVuZ3RoKSAtIDFdKys7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSGFsZndheSBjYXNlLgorICAgICAg
ICAgICAgICAgICAgICAvLyBUT0RPKGZsb2l0c2NoKTogbmVlZCBhIHdheSB0byBzb2x2ZSBoYWxm
LXdheSBjYXNlcy4KKyAgICAgICAgICAgICAgICAgICAgLy8gICBGb3Igbm93IGxldCdzIHJvdW5k
IHRvd2FyZHMgZXZlbiAoc2luY2UgdGhpcyBpcyB3aGF0IEdheSBzZWVtcyB0bworICAgICAgICAg
ICAgICAgICAgICAvLyAgIGRvKS4KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgIGlmICgoYnVmZmVyWygqbGVuZ3RoKSAtIDFdIC0gJzAnKSAlIDIgPT0gMCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gUm91bmQgZG93biA9PiBEbyBub3RoaW5nLgorICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJ1
ZmZlclsoKmxlbmd0aCkgLSAxXSAhPSAnOScpOworICAgICAgICAgICAgICAgICAgICAgICAgYnVm
ZmVyWygqbGVuZ3RoKSAtIDFdKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfSBlbHNlIGlmIChp
bl9kZWx0YV9yb29tX21pbnVzKSB7CisgICAgICAgICAgICAgICAgLy8gUm91bmQgZG93biAoPT0g
ZG8gbm90aGluZykuCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfSBlbHNl
IHsgIC8vIGluX2RlbHRhX3Jvb21fcGx1cworICAgICAgICAgICAgICAgIC8vIFJvdW5kIHVwLgor
ICAgICAgICAgICAgICAgIC8vIE5vdGUgYWdhaW4gdGhhdCB0aGUgbGFzdCBkaWdpdCBjb3VsZCBu
b3QgYmUgJzknIHNpbmNlIHRoaXMgd291bGQgaGF2ZQorICAgICAgICAgICAgICAgIC8vIHN0b3Bw
ZWQgdGhlIGxvb3AgZWFybGllci4KKyAgICAgICAgICAgICAgICAvLyBXZSBzdGlsbCBoYXZlIGFu
IEFTU0VSVCBoZXJlLCBpbiBjYXNlIHRoZSBwcmVjb25kaXRpb25zIHdlcmUgbm90CisgICAgICAg
ICAgICAgICAgLy8gc2F0aXNmaWVkLgorICAgICAgICAgICAgICAgIEFTU0VSVChidWZmZXJbKCps
ZW5ndGgpIC0xXSAhPSAnOScpOworICAgICAgICAgICAgICAgIGJ1ZmZlclsoKmxlbmd0aCkgLSAx
XSsrOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBMZXQgdiA9IG51bWVyYXRvciAvIGRlbm9taW5hdG9y
IDwgMTAuCisgICAgLy8gVGhlbiB3ZSBnZW5lcmF0ZSAnY291bnQnIGRpZ2l0cyBvZiBkID0geC54
eHh4eC4uLiAod2l0aG91dCB0aGUgZGVjaW1hbCBwb2ludCkKKyAgICAvLyBmcm9tIGxlZnQgdG8g
cmlnaHQuIE9uY2UgJ2NvdW50JyBkaWdpdHMgaGF2ZSBiZWVuIHByb2R1Y2VkIHdlIGRlY2lkZSB3
ZXRoZXIKKyAgICAvLyB0byByb3VuZCB1cCBvciBkb3duLiBSZW1haW5kZXJzIG9mIGV4YWN0bHkg
LjUgcm91bmQgdXB3YXJkcy4gTnVtYmVycyBzdWNoCisgICAgLy8gYXMgOS45OTk5OTkgcHJvcGFn
YXRlIGEgY2FycnkgYWxsIHRoZSB3YXksIGFuZCBjaGFuZ2UgdGhlCisgICAgLy8gZXhwb25lbnQg
KGRlY2ltYWxfcG9pbnQpLCB3aGVuIHJvdW5kaW5nIHVwd2FyZHMuCisgICAgc3RhdGljIHZvaWQg
R2VuZXJhdGVDb3VudGVkRGlnaXRzKGludCBjb3VudCwgaW50KiBkZWNpbWFsX3BvaW50LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIG51bWVyYXRvciwgQmln
bnVtKiBkZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VmVjdG9yPGNoYXI+KGJ1ZmZlciksIGludCogbGVuZ3RoKSB7CisgICAgICAgIEFTU0VSVChjb3Vu
dCA+PSAwKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAtIDE7ICsraSkgewor
ICAgICAgICAgICAgdWludDE2X3QgZGlnaXQ7CisgICAgICAgICAgICBkaWdpdCA9IG51bWVyYXRv
ci0+RGl2aWRlTW9kdWxvSW50QmlnbnVtKCpkZW5vbWluYXRvcik7CisgICAgICAgICAgICBBU1NF
UlQoZGlnaXQgPD0gOSk7ICAvLyBkaWdpdCBpcyBhIHVpbnQxNl90IGFuZCB0aGVyZWZvcmUgYWx3
YXlzIHBvc2l0aXZlLgorICAgICAgICAgICAgLy8gZGlnaXQgPSBudW1lcmF0b3IgLyBkZW5vbWlu
YXRvciAoaW50ZWdlciBkaXZpc2lvbikuCisgICAgICAgICAgICAvLyBudW1lcmF0b3IgPSBudW1l
cmF0b3IgJSBkZW5vbWluYXRvci4KKyAgICAgICAgICAgIGJ1ZmZlcltpXSA9IGRpZ2l0ICsgJzAn
OworICAgICAgICAgICAgLy8gUHJlcGFyZSBmb3IgbmV4dCBpdGVyYXRpb24uCisgICAgICAgICAg
ICBudW1lcmF0b3ItPlRpbWVzMTAoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBHZW5lcmF0ZSB0
aGUgbGFzdCBkaWdpdC4KKyAgICAgICAgdWludDE2X3QgZGlnaXQ7CisgICAgICAgIGRpZ2l0ID0g
bnVtZXJhdG9yLT5EaXZpZGVNb2R1bG9JbnRCaWdudW0oKmRlbm9taW5hdG9yKTsKKyAgICAgICAg
aWYgKEJpZ251bTo6UGx1c0NvbXBhcmUoKm51bWVyYXRvciwgKm51bWVyYXRvciwgKmRlbm9taW5h
dG9yKSA+PSAwKSB7CisgICAgICAgICAgICBkaWdpdCsrOworICAgICAgICB9CisgICAgICAgIGJ1
ZmZlcltjb3VudCAtIDFdID0gZGlnaXQgKyAnMCc7CisgICAgICAgIC8vIENvcnJlY3QgYmFkIGRp
Z2l0cyAoaW4gY2FzZSB3ZSBoYWQgYSBzZXF1ZW5jZSBvZiAnOSdzKS4gUHJvcGFnYXRlIHRoZQor
ICAgICAgICAvLyBjYXJyeSB1bnRpbCB3ZSBoYXQgYSBub24tJzknIG9yIHRpbCB3ZSByZWFjaCB0
aGUgZmlyc3QgZGlnaXQuCisgICAgICAgIGZvciAoaW50IGkgPSBjb3VudCAtIDE7IGkgPiAwOyAt
LWkpIHsKKyAgICAgICAgICAgIGlmIChidWZmZXJbaV0gIT0gJzAnICsgMTApIGJyZWFrOworICAg
ICAgICAgICAgYnVmZmVyW2ldID0gJzAnOworICAgICAgICAgICAgYnVmZmVyW2kgLSAxXSsrOwor
ICAgICAgICB9CisgICAgICAgIGlmIChidWZmZXJbMF0gPT0gJzAnICsgMTApIHsKKyAgICAgICAg
ICAgIC8vIFByb3BhZ2F0ZSBhIGNhcnJ5IHBhc3QgdGhlIHRvcCBwbGFjZS4KKyAgICAgICAgICAg
IGJ1ZmZlclswXSA9ICcxJzsKKyAgICAgICAgICAgICgqZGVjaW1hbF9wb2ludCkrKzsKKyAgICAg
ICAgfQorICAgICAgICAqbGVuZ3RoID0gY291bnQ7CisgICAgfQorICAgIAorICAgIAorICAgIC8v
IEdlbmVyYXRlcyAncmVxdWVzdGVkX2RpZ2l0cycgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQuIEl0
IG1pZ2h0IG9taXQKKyAgICAvLyB0cmFpbGluZyAnMCdzLiBJZiB0aGUgaW5wdXQgbnVtYmVyIGlz
IHRvbyBzbWFsbCB0aGVuIG5vIGRpZ2l0cyBhdCBhbGwgYXJlCisgICAgLy8gZ2VuZXJhdGVkIChl
eC46IDIgZml4ZWQgZGlnaXRzIGZvciAwLjAwMDAxKS4KKyAgICAvLworICAgIC8vIElucHV0IHZl
cmlmaWVzOiAgMSA8PSAobnVtZXJhdG9yICsgZGVsdGEpIC8gZGVub21pbmF0b3IgPCAxMC4KKyAg
ICBzdGF0aWMgdm9pZCBCaWdudW1Ub0ZpeGVkKGludCByZXF1ZXN0ZWRfZGlnaXRzLCBpbnQqIGRl
Y2ltYWxfcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIG51bWVy
YXRvciwgQmlnbnVtKiBkZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFZlY3RvcjxjaGFyPihidWZmZXIpLCBpbnQqIGxlbmd0aCkgeworICAgICAgICAvLyBOb3RlIHRo
YXQgd2UgaGF2ZSB0byBsb29rIGF0IG1vcmUgdGhhbiBqdXN0IHRoZSByZXF1ZXN0ZWRfZGlnaXRz
LCBzaW5jZQorICAgICAgICAvLyBhIG51bWJlciBjb3VsZCBiZSByb3VuZGVkIHVwLiBFeGFtcGxl
OiB2PTAuNSB3aXRoIHJlcXVlc3RlZF9kaWdpdHM9MC4KKyAgICAgICAgLy8gRXZlbiB0aG91Z2gg
dGhlIHBvd2VyIG9mIHYgZXF1YWxzIDAgd2UgY2FuJ3QganVzdCBzdG9wIGhlcmUuCisgICAgICAg
IGlmICgtKCpkZWNpbWFsX3BvaW50KSA+IHJlcXVlc3RlZF9kaWdpdHMpIHsKKyAgICAgICAgICAg
IC8vIFRoZSBudW1iZXIgaXMgZGVmaW5pdGl2ZWx5IHRvbyBzbWFsbC4KKyAgICAgICAgICAgIC8v
IEV4OiAwLjAwMSB3aXRoIHJlcXVlc3RlZF9kaWdpdHMgPT0gMS4KKyAgICAgICAgICAgIC8vIFNl
dCBkZWNpbWFsLXBvaW50IHRvIC1yZXF1ZXN0ZWRfZGlnaXRzLiBUaGlzIGlzIHdoYXQgR2F5IGRv
ZXMuCisgICAgICAgICAgICAvLyBOb3RlIHRoYXQgaXQgc2hvdWxkIG5vdCBoYXZlIGFueSBlZmZl
Y3QgYW55d2F5cyBzaW5jZSB0aGUgc3RyaW5nIGlzCisgICAgICAgICAgICAvLyBlbXB0eS4KKyAg
ICAgICAgICAgICpkZWNpbWFsX3BvaW50ID0gLXJlcXVlc3RlZF9kaWdpdHM7CisgICAgICAgICAg
ICAqbGVuZ3RoID0gMDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIGlmICgt
KCpkZWNpbWFsX3BvaW50KSA9PSByZXF1ZXN0ZWRfZGlnaXRzKSB7CisgICAgICAgICAgICAvLyBX
ZSBvbmx5IG5lZWQgdG8gdmVyaWZ5IGlmIHRoZSBudW1iZXIgcm91bmRzIGRvd24gb3IgdXAuCisg
ICAgICAgICAgICAvLyBFeDogMC4wNCBhbmQgMC4wNiB3aXRoIHJlcXVlc3RlZF9kaWdpdHMgPT0g
MS4KKyAgICAgICAgICAgIEFTU0VSVCgqZGVjaW1hbF9wb2ludCA9PSAtcmVxdWVzdGVkX2RpZ2l0
cyk7CisgICAgICAgICAgICAvLyBJbml0aWFsbHkgdGhlIGZyYWN0aW9uIGxpZXMgaW4gcmFuZ2Ug
KDEsIDEwXS4gTXVsdGlwbHkgdGhlIGRlbm9taW5hdG9yCisgICAgICAgICAgICAvLyBieSAxMCBz
byB0aGF0IHdlIGNhbiBjb21wYXJlIG1vcmUgZWFzaWx5LgorICAgICAgICAgICAgZGVub21pbmF0
b3ItPlRpbWVzMTAoKTsKKyAgICAgICAgICAgIGlmIChCaWdudW06OlBsdXNDb21wYXJlKCpudW1l
cmF0b3IsICpudW1lcmF0b3IsICpkZW5vbWluYXRvcikgPj0gMCkgeworICAgICAgICAgICAgICAg
IC8vIElmIHRoZSBmcmFjdGlvbiBpcyA+PSAwLjUgdGhlbiB3ZSBoYXZlIHRvIGluY2x1ZGUgdGhl
IHJvdW5kZWQKKyAgICAgICAgICAgICAgICAvLyBkaWdpdC4KKyAgICAgICAgICAgICAgICBidWZm
ZXJbMF0gPSAnMSc7CisgICAgICAgICAgICAgICAgKmxlbmd0aCA9IDE7CisgICAgICAgICAgICAg
ICAgKCpkZWNpbWFsX3BvaW50KSsrOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAvLyBOb3RlIHRoYXQgd2UgY2F1Z2h0IG1vc3Qgb2Ygc2ltaWxhciBjYXNlcyBlYXJsaWVy
LgorICAgICAgICAgICAgICAgICpsZW5ndGggPSAwOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gVGhlIHJlcXVlc3Rl
ZCBkaWdpdHMgY29ycmVzcG9uZCB0byB0aGUgZGlnaXRzIGFmdGVyIHRoZSBwb2ludC4KKyAgICAg
ICAgICAgIC8vIFRoZSB2YXJpYWJsZSAnbmVlZGVkX2RpZ2l0cycgaW5jbHVkZXMgdGhlIGRpZ2l0
cyBiZWZvcmUgdGhlIHBvaW50LgorICAgICAgICAgICAgaW50IG5lZWRlZF9kaWdpdHMgPSAoKmRl
Y2ltYWxfcG9pbnQpICsgcmVxdWVzdGVkX2RpZ2l0czsKKyAgICAgICAgICAgIEdlbmVyYXRlQ291
bnRlZERpZ2l0cyhuZWVkZWRfZGlnaXRzLCBkZWNpbWFsX3BvaW50LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG51bWVyYXRvciwgZGVub21pbmF0b3IsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBsZW5ndGgpOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIAorICAgIC8vIFJldHVybnMgYW4gZXN0aW1hdGlvbiBvZiBrIHN1Y2ggdGhhdCAx
MF4oay0xKSA8PSB2IDwgMTBeayB3aGVyZQorICAgIC8vIHYgPSBmICogMl5leHBvbmVudCBhbmQg
Ml41MiA8PSBmIDwgMl41My4KKyAgICAvLyB2IGlzIGhlbmNlIGEgbm9ybWFsaXplZCBkb3VibGUg
d2l0aCB0aGUgZ2l2ZW4gZXhwb25lbnQuIFRoZSBvdXRwdXQgaXMgYW4KKyAgICAvLyBhcHByb3hp
bWF0aW9uIGZvciB0aGUgZXhwb25lbnQgb2YgdGhlIGRlY2ltYWwgYXBwcm9pbWF0aW9uIC5kaWdp
dHMgKiAxMF5rLgorICAgIC8vCisgICAgLy8gVGhlIHJlc3VsdCBtaWdodCB1bmRlcnNob290IGJ5
IDEgaW4gd2hpY2ggY2FzZSAxMF5rIDw9IHYgPCAxMF5rKzEuCisgICAgLy8gTm90ZTogdGhpcyBw
cm9wZXJ0eSBob2xkcyBmb3IgdidzIHVwcGVyIGJvdW5kYXJ5IG0rIHRvby4KKyAgICAvLyAgICAx
MF5rIDw9IG0rIDwgMTBeaysxLgorICAgIC8vICAgKHNlZSBleHBsYW5hdGlvbiBiZWxvdykuCisg
ICAgLy8KKyAgICAvLyBFeGFtcGxlczoKKyAgICAvLyAgRXN0aW1hdGVQb3dlcigwKSAgID0+IDE2
CisgICAgLy8gIEVzdGltYXRlUG93ZXIoLTUyKSA9PiAwCisgICAgLy8KKyAgICAvLyBOb3RlOiBl
ID49IDAgPT4gRXN0aW1hdGVkUG93ZXIoZSkgPiAwLiBObyBzaW1pbGFyIGNsYWltIGNhbiBiZSBt
YWRlIGZvciBlPDAuCisgICAgc3RhdGljIGludCBFc3RpbWF0ZVBvd2VyKGludCBleHBvbmVudCkg
eworICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGVzdGltYXRlcyBsb2cxMCBvZiB2IHdoZXJlIHYg
PSBmKjJeZSAod2l0aCBlID09IGV4cG9uZW50KS4KKyAgICAgICAgLy8gTm90ZSB0aGF0IDEwXmZs
b29yKGxvZzEwKHYpKSA8PSB2LCBidXQgdiA8PSAxMF5jZWlsKGxvZzEwKHYpKS4KKyAgICAgICAg
Ly8gTm90ZSB0aGF0IGYgaXMgYm91bmRlZCBieSBpdHMgY29udGFpbmVyIHNpemUuIExldCBwID0g
NTMgKHRoZSBkb3VibGUncworICAgICAgICAvLyBzaWduaWZpY2FuZCBzaXplKS4gVGhlbiAyXihw
LTEpIDw9IGYgPCAyXnAuCisgICAgICAgIC8vCisgICAgICAgIC8vIEdpdmVuIHRoYXQgbG9nMTAo
dikgPT0gbG9nMih2KS9sb2cyKDEwKSBhbmQgZSsobGVuKGYpLTEpIGlzIHF1aXRlIGNsb3NlCisg
ICAgICAgIC8vIHRvIGxvZzIodikgdGhlIGZ1bmN0aW9uIGlzIHNpbXBsaWZpZWQgdG8gKGUrKGxl
bihmKS0xKS9sb2cyKDEwKSkuCisgICAgICAgIC8vIFRoZSBjb21wdXRlZCBudW1iZXIgdW5kZXJz
aG9vdHMgYnkgbGVzcyB0aGFuIDAuNjMxICh3aGVuIHdlIGNvbXB1dGUgbG9nMworICAgICAgICAv
LyBhbmQgbm90IGxvZzEwKS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gT3B0aW1pemF0aW9uOiBz
aW5jZSB3ZSBvbmx5IG5lZWQgYW4gYXBwcm94aW1hdGVkIHJlc3VsdCB0aGlzIGNvbXB1dGF0aW9u
CisgICAgICAgIC8vIGNhbiBiZSBwZXJmb3JtZWQgb24gNjQgYml0IGludGVnZXJzLiBPbiB4ODYv
eDY0IGFyY2hpdGVjdHVyZSB0aGUgc3BlZWR1cCBpcworICAgICAgICAvLyBub3QgcmVhbGx5IG1l
YXN1cmFibGUsIHRob3VnaC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gU2luY2Ugd2Ugd2FudCB0
byBhdm9pZCBvdmVyc2hvb3Rpbmcgd2UgZGVjcmVtZW50IGJ5IDFlMTAgc28gdGhhdAorICAgICAg
ICAvLyBmbG9hdGluZy1wb2ludCBpbXByZWNpc2lvbnMgZG9uJ3QgYWZmZWN0IHVzLgorICAgICAg
ICAvLworICAgICAgICAvLyBFeHBsYW5hdGlvbiBmb3IgdidzIGJvdW5kYXJ5IG0rOiB0aGUgY29t
cHV0YXRpb24gdGFrZXMgYWR2YW50YWdlIG9mCisgICAgICAgIC8vIHRoZSBmYWN0IHRoYXQgMl4o
cC0xKSA8PSBmIDwgMl5wLiBCb3VuZGFyaWVzIHN0aWxsIHNhdGlzZnkgdGhpcyByZXF1aXJlbWVu
dAorICAgICAgICAvLyAoZXZlbiBmb3IgZGVub3JtYWxzIHdoZXJlIHRoZSBkZWx0YSBjYW4gYmUg
bXVjaCBtb3JlIGltcG9ydGFudCkuCisgICAgICAgIAorICAgICAgICBjb25zdCBkb3VibGUgazFM
b2cxMCA9IDAuMzAxMDI5OTk1NjYzOTgxMTQ7ICAvLyAxL2xnKDEwKQorICAgICAgICAKKyAgICAg
ICAgLy8gRm9yIGRvdWJsZXMgbGVuKGYpID09IDUzIChkb24ndCBmb3JnZXQgdGhlIGhpZGRlbiBi
aXQpLgorICAgICAgICBjb25zdCBpbnQga1NpZ25pZmljYW5kU2l6ZSA9IDUzOworICAgICAgICBk
b3VibGUgZXN0aW1hdGUgPSBjZWlsKChleHBvbmVudCArIGtTaWduaWZpY2FuZFNpemUgLSAxKSAq
IGsxTG9nMTAgLSAxZS0xMCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGVzdGlt
YXRlKTsKKyAgICB9CisgICAgCisgICAgCisgICAgLy8gU2VlIGNvbW1lbnRzIGZvciBJbml0aWFs
U2NhbGVkU3RhcnRWYWx1ZXMuCisgICAgc3RhdGljIHZvaWQgSW5pdGlhbFNjYWxlZFN0YXJ0VmFs
dWVzUG9zaXRpdmVFeHBvbmVudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB2LCBpbnQgZXN0aW1hdGVkX3Bvd2VyLCBib29s
IG5lZWRfYm91bmRhcnlfZGVsdGFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBudW1lcmF0b3IsIEJpZ251bSogZGVub21p
bmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBCaWdudW0qIGRlbHRhX21pbnVzLCBCaWdudW0qIGRlbHRhX3BsdXMpIHsKKyAgICAg
ICAgLy8gQSBwb3NpdGl2ZSBleHBvbmVudCBpbXBsaWVzIGEgcG9zaXRpdmUgcG93ZXIuCisgICAg
ICAgIEFTU0VSVChlc3RpbWF0ZWRfcG93ZXIgPj0gMCk7CisgICAgICAgIC8vIFNpbmNlIHRoZSBl
c3RpbWF0ZWRfcG93ZXIgaXMgcG9zaXRpdmUgd2Ugc2ltcGx5IG11bHRpcGx5IHRoZSBkZW5vbWlu
YXRvcgorICAgICAgICAvLyBieSAxMF5lc3RpbWF0ZWRfcG93ZXIuCisgICAgICAgIAorICAgICAg
ICAvLyBudW1lcmF0b3IgPSB2LgorICAgICAgICBudW1lcmF0b3ItPkFzc2lnblVJbnQ2NChEb3Vi
bGUodikuU2lnbmlmaWNhbmQoKSk7CisgICAgICAgIG51bWVyYXRvci0+U2hpZnRMZWZ0KERvdWJs
ZSh2KS5FeHBvbmVudCgpKTsKKyAgICAgICAgLy8gZGVub21pbmF0b3IgPSAxMF5lc3RpbWF0ZWRf
cG93ZXIuCisgICAgICAgIGRlbm9taW5hdG9yLT5Bc3NpZ25Qb3dlclVJbnQxNigxMCwgZXN0aW1h
dGVkX3Bvd2VyKTsKKyAgICAgICAgCisgICAgICAgIGlmIChuZWVkX2JvdW5kYXJ5X2RlbHRhcykg
eworICAgICAgICAgICAgLy8gSW50cm9kdWNlIGEgY29tbW9uIGRlbm9taW5hdG9yIHNvIHRoYXQg
dGhlIGRlbHRhcyB0byB0aGUgYm91bmRhcmllcyBhcmUKKyAgICAgICAgICAgIC8vIGludGVnZXJz
LgorICAgICAgICAgICAgZGVub21pbmF0b3ItPlNoaWZ0TGVmdCgxKTsKKyAgICAgICAgICAgIG51
bWVyYXRvci0+U2hpZnRMZWZ0KDEpOworICAgICAgICAgICAgLy8gTGV0IHYgPSBmICogMl5lLCB0
aGVuIG0rIC0gdiA9IDEvMiAqIDJeZTsgV2l0aCB0aGUgY29tbW9uCisgICAgICAgICAgICAvLyBk
ZW5vbWluYXRvciAob2YgMikgZGVsdGFfcGx1cyBlcXVhbHMgMl5lLgorICAgICAgICAgICAgZGVs
dGFfcGx1cy0+QXNzaWduVUludDE2KDEpOworICAgICAgICAgICAgZGVsdGFfcGx1cy0+U2hpZnRM
ZWZ0KERvdWJsZSh2KS5FeHBvbmVudCgpKTsKKyAgICAgICAgICAgIC8vIFNhbWUgZm9yIGRlbHRh
X21pbnVzICh3aXRoIGFkanVzdG1lbnRzIGJlbG93IGlmIGYgPT0gMl5wLTEpLgorICAgICAgICAg
ICAgZGVsdGFfbWludXMtPkFzc2lnblVJbnQxNigxKTsKKyAgICAgICAgICAgIGRlbHRhX21pbnVz
LT5TaGlmdExlZnQoRG91YmxlKHYpLkV4cG9uZW50KCkpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICAvLyBJZiB0aGUgc2lnbmlmaWNhbmQgKHdpdGhvdXQgdGhlIGhpZGRlbiBiaXQpIGlzIDAs
IHRoZW4gdGhlIGxvd2VyCisgICAgICAgICAgICAvLyBib3VuZGFyeSBpcyBjbG9zZXIgdGhhbiBq
dXN0IGhhbGYgYSB1bHAgKHVuaXQgaW4gdGhlIGxhc3QgcGxhY2UpLgorICAgICAgICAgICAgLy8g
VGhlcmUgaXMgb25seSBvbmUgZXhjZXB0aW9uOiBpZiB0aGUgbmV4dCBsb3dlciBudW1iZXIgaXMg
YSBkZW5vcm1hbCB0aGVuCisgICAgICAgICAgICAvLyB0aGUgZGlzdGFuY2UgaXMgMSB1bHAuIFRo
aXMgY2Fubm90IGJlIHRoZSBjYXNlIGZvciBleHBvbmVudCA+PSAwIChidXQgd2UKKyAgICAgICAg
ICAgIC8vIGhhdmUgdG8gdGVzdCBpdCBpbiB0aGUgb3RoZXIgZnVuY3Rpb24gd2hlcmUgZXhwb25l
bnQgPCAwKS4KKyAgICAgICAgICAgIHVpbnQ2NF90IHZfYml0cyA9IERvdWJsZSh2KS5Bc1VpbnQ2
NCgpOworICAgICAgICAgICAgaWYgKCh2X2JpdHMgJiBEb3VibGU6OmtTaWduaWZpY2FuZE1hc2sp
ID09IDApIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgbG93ZXIgYm91bmRhcnkgaXMgY2xvc2Vy
IGF0IGhhbGYgdGhlIGRpc3RhbmNlIG9mICJub3JtYWwiIG51bWJlcnMuCisgICAgICAgICAgICAg
ICAgLy8gSW5jcmVhc2UgdGhlIGNvbW1vbiBkZW5vbWluYXRvciBhbmQgYWRhcHQgYWxsIGJ1dCB0
aGUgZGVsdGFfbWludXMuCisgICAgICAgICAgICAgICAgZGVub21pbmF0b3ItPlNoaWZ0TGVmdCgx
KTsgIC8vICoyCisgICAgICAgICAgICAgICAgbnVtZXJhdG9yLT5TaGlmdExlZnQoMSk7ICAgIC8v
ICoyCisgICAgICAgICAgICAgICAgZGVsdGFfcGx1cy0+U2hpZnRMZWZ0KDEpOyAgIC8vICoyCisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgLy8gU2VlIGNv
bW1lbnRzIGZvciBJbml0aWFsU2NhbGVkU3RhcnRWYWx1ZXMKKyAgICBzdGF0aWMgdm9pZCBJbml0
aWFsU2NhbGVkU3RhcnRWYWx1ZXNOZWdhdGl2ZUV4cG9uZW50UG9zaXRpdmVQb3dlcigKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkb3VibGUgdiwgaW50IGVzdGltYXRlZF9wb3dlciwgYm9vbCBuZWVkX2JvdW5kYXJ5
X2RlbHRhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIG51bWVyYXRvciwgQmlnbnVtKiBkZW5vbWlu
YXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBCaWdudW0qIGRlbHRhX21pbnVzLCBCaWdudW0qIGRlbHRhX3Bs
dXMpIHsKKyAgICAgICAgdWludDY0X3Qgc2lnbmlmaWNhbmQgPSBEb3VibGUodikuU2lnbmlmaWNh
bmQoKTsKKyAgICAgICAgaW50IGV4cG9uZW50ID0gRG91YmxlKHYpLkV4cG9uZW50KCk7CisgICAg
ICAgIC8vIHYgPSBmICogMl5lIHdpdGggZSA8IDAsIGFuZCB3aXRoIGVzdGltYXRlZF9wb3dlciA+
PSAwLgorICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgZSBpcyBjbG9zZSB0byAwIChoYXZlIGEg
bG9vayBhdCBob3cgZXN0aW1hdGVkX3Bvd2VyIGlzCisgICAgICAgIC8vIGNvbXB1dGVkKS4KKyAg
ICAgICAgCisgICAgICAgIC8vIG51bWVyYXRvciA9IHNpZ25pZmljYW5kCisgICAgICAgIC8vICBz
aW5jZSB2ID0gc2lnbmlmaWNhbmQgKiAyXmV4cG9uZW50IHRoaXMgaXMgZXF1aXZhbGVudCB0bwor
ICAgICAgICAvLyAgbnVtZXJhdG9yID0gdiAqIC8gMl4tZXhwb25lbnQKKyAgICAgICAgbnVtZXJh
dG9yLT5Bc3NpZ25VSW50NjQoc2lnbmlmaWNhbmQpOworICAgICAgICAvLyBkZW5vbWluYXRvciA9
IDEwXmVzdGltYXRlZF9wb3dlciAqIDJeLWV4cG9uZW50ICh3aXRoIGV4cG9uZW50IDwgMCkKKyAg
ICAgICAgZGVub21pbmF0b3ItPkFzc2lnblBvd2VyVUludDE2KDEwLCBlc3RpbWF0ZWRfcG93ZXIp
OworICAgICAgICBkZW5vbWluYXRvci0+U2hpZnRMZWZ0KC1leHBvbmVudCk7CisgICAgICAgIAor
ICAgICAgICBpZiAobmVlZF9ib3VuZGFyeV9kZWx0YXMpIHsKKyAgICAgICAgICAgIC8vIEludHJv
ZHVjZSBhIGNvbW1vbiBkZW5vbWluYXRvciBzbyB0aGF0IHRoZSBkZWx0YXMgdG8gdGhlIGJvdW5k
YXJpZXMgYXJlCisgICAgICAgICAgICAvLyBpbnRlZ2Vycy4KKyAgICAgICAgICAgIGRlbm9taW5h
dG9yLT5TaGlmdExlZnQoMSk7CisgICAgICAgICAgICBudW1lcmF0b3ItPlNoaWZ0TGVmdCgxKTsK
KyAgICAgICAgICAgIC8vIExldCB2ID0gZiAqIDJeZSwgdGhlbiBtKyAtIHYgPSAxLzIgKiAyXmU7
IFdpdGggdGhlIGNvbW1vbgorICAgICAgICAgICAgLy8gZGVub21pbmF0b3IgKG9mIDIpIGRlbHRh
X3BsdXMgZXF1YWxzIDJeZS4KKyAgICAgICAgICAgIC8vIEdpdmVuIHRoYXQgdGhlIGRlbm9taW5h
dG9yIGFscmVhZHkgaW5jbHVkZXMgdidzIGV4cG9uZW50IHRoZSBkaXN0YW5jZQorICAgICAgICAg
ICAgLy8gdG8gdGhlIGJvdW5kYXJpZXMgaXMgc2ltcGx5IDEuCisgICAgICAgICAgICBkZWx0YV9w
bHVzLT5Bc3NpZ25VSW50MTYoMSk7CisgICAgICAgICAgICAvLyBTYW1lIGZvciBkZWx0YV9taW51
cyAod2l0aCBhZGp1c3RtZW50cyBiZWxvdyBpZiBmID09IDJecC0xKS4KKyAgICAgICAgICAgIGRl
bHRhX21pbnVzLT5Bc3NpZ25VSW50MTYoMSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8v
IElmIHRoZSBzaWduaWZpY2FuZCAod2l0aG91dCB0aGUgaGlkZGVuIGJpdCkgaXMgMCwgdGhlbiB0
aGUgbG93ZXIKKyAgICAgICAgICAgIC8vIGJvdW5kYXJ5IGlzIGNsb3NlciB0aGFuIGp1c3Qgb25l
IHVscCAodW5pdCBpbiB0aGUgbGFzdCBwbGFjZSkuCisgICAgICAgICAgICAvLyBUaGVyZSBpcyBv
bmx5IG9uZSBleGNlcHRpb246IGlmIHRoZSBuZXh0IGxvd2VyIG51bWJlciBpcyBhIGRlbm9ybWFs
CisgICAgICAgICAgICAvLyB0aGVuIHRoZSBkaXN0YW5jZSBpcyAxIHVscC4gU2luY2UgdGhlIGV4
cG9uZW50IGlzIGNsb3NlIHRvIHplcm8KKyAgICAgICAgICAgIC8vIChvdGhlcndpc2UgZXN0aW1h
dGVkX3Bvd2VyIHdvdWxkIGhhdmUgYmVlbiBuZWdhdGl2ZSkgdGhpcyBjYW5ub3QgaGFwcGVuCisg
ICAgICAgICAgICAvLyBoZXJlIGVpdGhlci4KKyAgICAgICAgICAgIHVpbnQ2NF90IHZfYml0cyA9
IERvdWJsZSh2KS5Bc1VpbnQ2NCgpOworICAgICAgICAgICAgaWYgKCh2X2JpdHMgJiBEb3VibGU6
OmtTaWduaWZpY2FuZE1hc2spID09IDApIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgbG93ZXIg
Ym91bmRhcnkgaXMgY2xvc2VyIGF0IGhhbGYgdGhlIGRpc3RhbmNlIG9mICJub3JtYWwiIG51bWJl
cnMuCisgICAgICAgICAgICAgICAgLy8gSW5jcmVhc2UgdGhlIGRlbm9taW5hdG9yIGFuZCBhZGFw
dCBhbGwgYnV0IHRoZSBkZWx0YV9taW51cy4KKyAgICAgICAgICAgICAgICBkZW5vbWluYXRvci0+
U2hpZnRMZWZ0KDEpOyAgLy8gKjIKKyAgICAgICAgICAgICAgICBudW1lcmF0b3ItPlNoaWZ0TGVm
dCgxKTsgICAgLy8gKjIKKyAgICAgICAgICAgICAgICBkZWx0YV9wbHVzLT5TaGlmdExlZnQoMSk7
ICAgLy8gKjIKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAg
ICAvLyBTZWUgY29tbWVudHMgZm9yIEluaXRpYWxTY2FsZWRTdGFydFZhbHVlcworICAgIHN0YXRp
YyB2b2lkIEluaXRpYWxTY2FsZWRTdGFydFZhbHVlc05lZ2F0aXZlRXhwb25lbnROZWdhdGl2ZVBv
d2VyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRvdWJsZSB2LCBpbnQgZXN0aW1hdGVkX3Bvd2VyLCBib29sIG5l
ZWRfYm91bmRhcnlfZGVsdGFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogbnVtZXJhdG9yLCBCaWdu
dW0qIGRlbm9taW5hdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogZGVsdGFfbWludXMsIEJpZ251
bSogZGVsdGFfcGx1cykgeworICAgICAgICBjb25zdCB1aW50NjRfdCBrTWluaW1hbE5vcm1hbGl6
ZWRFeHBvbmVudCA9CisgICAgICAgIFVJTlQ2NF8yUEFSVF9DKDB4MDAxMDAwMDAsIDAwMDAwMDAw
KTsKKyAgICAgICAgdWludDY0X3Qgc2lnbmlmaWNhbmQgPSBEb3VibGUodikuU2lnbmlmaWNhbmQo
KTsKKyAgICAgICAgaW50IGV4cG9uZW50ID0gRG91YmxlKHYpLkV4cG9uZW50KCk7CisgICAgICAg
IC8vIEluc3RlYWQgb2YgbXVsdGlwbHlpbmcgdGhlIGRlbm9taW5hdG9yIHdpdGggMTBeZXN0aW1h
dGVkX3Bvd2VyIHdlCisgICAgICAgIC8vIG11bHRpcGx5IGFsbCB2YWx1ZXMgKG51bWVyYXRvciBh
bmQgZGVsdGFzKSBieSAxMF4tZXN0aW1hdGVkX3Bvd2VyLgorICAgICAgICAKKyAgICAgICAgLy8g
VXNlIG51bWVyYXRvciBhcyB0ZW1wb3JhcnkgY29udGFpbmVyIGZvciBwb3dlcl90ZW4uCisgICAg
ICAgIEJpZ251bSogcG93ZXJfdGVuID0gbnVtZXJhdG9yOworICAgICAgICBwb3dlcl90ZW4tPkFz
c2lnblBvd2VyVUludDE2KDEwLCAtZXN0aW1hdGVkX3Bvd2VyKTsKKyAgICAgICAgCisgICAgICAg
IGlmIChuZWVkX2JvdW5kYXJ5X2RlbHRhcykgeworICAgICAgICAgICAgLy8gU2luY2UgcG93ZXJf
dGVuID09IG51bWVyYXRvciB3ZSBtdXN0IG1ha2UgYSBjb3B5IG9mIDEwXmVzdGltYXRlZF9wb3dl
cgorICAgICAgICAgICAgLy8gYmVmb3JlIHdlIGNvbXBsZXRlIHRoZSBjb21wdXRhdGlvbiBvZiB0
aGUgbnVtZXJhdG9yLgorICAgICAgICAgICAgLy8gZGVsdGFfcGx1cyA9IGRlbHRhX21pbnVzID0g
MTBeZXN0aW1hdGVkX3Bvd2VyCisgICAgICAgICAgICBkZWx0YV9wbHVzLT5Bc3NpZ25CaWdudW0o
KnBvd2VyX3Rlbik7CisgICAgICAgICAgICBkZWx0YV9taW51cy0+QXNzaWduQmlnbnVtKCpwb3dl
cl90ZW4pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBudW1lcmF0b3IgPSBzaWdu
aWZpY2FuZCAqIDIgKiAxMF4tZXN0aW1hdGVkX3Bvd2VyCisgICAgICAgIC8vICBzaW5jZSB2ID0g
c2lnbmlmaWNhbmQgKiAyXmV4cG9uZW50IHRoaXMgaXMgZXF1aXZhbGVudCB0bworICAgICAgICAv
LyBudW1lcmF0b3IgPSB2ICogMTBeLWVzdGltYXRlZF9wb3dlciAqIDIgKiAyXi1leHBvbmVudC4K
KyAgICAgICAgLy8gUmVtZW1iZXI6IG51bWVyYXRvciBoYXMgYmVlbiBhYnVzZWQgYXMgcG93ZXJf
dGVuLiBTbyBubyBuZWVkIHRvIGFzc2lnbiBpdAorICAgICAgICAvLyAgdG8gaXRzZWxmLgorICAg
ICAgICBBU1NFUlQobnVtZXJhdG9yID09IHBvd2VyX3Rlbik7CisgICAgICAgIG51bWVyYXRvci0+
TXVsdGlwbHlCeVVJbnQ2NChzaWduaWZpY2FuZCk7CisgICAgICAgIAorICAgICAgICAvLyBkZW5v
bWluYXRvciA9IDIgKiAyXi1leHBvbmVudCB3aXRoIGV4cG9uZW50IDwgMC4KKyAgICAgICAgZGVu
b21pbmF0b3ItPkFzc2lnblVJbnQxNigxKTsKKyAgICAgICAgZGVub21pbmF0b3ItPlNoaWZ0TGVm
dCgtZXhwb25lbnQpOworICAgICAgICAKKyAgICAgICAgaWYgKG5lZWRfYm91bmRhcnlfZGVsdGFz
KSB7CisgICAgICAgICAgICAvLyBJbnRyb2R1Y2UgYSBjb21tb24gZGVub21pbmF0b3Igc28gdGhh
dCB0aGUgZGVsdGFzIHRvIHRoZSBib3VuZGFyaWVzIGFyZQorICAgICAgICAgICAgLy8gaW50ZWdl
cnMuCisgICAgICAgICAgICBudW1lcmF0b3ItPlNoaWZ0TGVmdCgxKTsKKyAgICAgICAgICAgIGRl
bm9taW5hdG9yLT5TaGlmdExlZnQoMSk7CisgICAgICAgICAgICAvLyBXaXRoIHRoaXMgc2hpZnQg
dGhlIGJvdW5kYXJpZXMgaGF2ZSB0aGVpciBjb3JyZWN0IHZhbHVlLCBzaW5jZQorICAgICAgICAg
ICAgLy8gZGVsdGFfcGx1cyA9IDEwXi1lc3RpbWF0ZWRfcG93ZXIsIGFuZAorICAgICAgICAgICAg
Ly8gZGVsdGFfbWludXMgPSAxMF4tZXN0aW1hdGVkX3Bvd2VyLgorICAgICAgICAgICAgLy8gVGhl
c2UgYXNzaWdubWVudHMgaGF2ZSBiZWVuIGRvbmUgZWFybGllci4KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgLy8gVGhlIHNwZWNpYWwgY2FzZSB3aGVyZSB0aGUgbG93ZXIgYm91bmRhcnkgaXMg
dHdpY2UgYXMgY2xvc2UuCisgICAgICAgICAgICAvLyBUaGlzIHRpbWUgd2UgaGF2ZSB0byBsb29r
IG91dCBmb3IgdGhlIGV4Y2VwdGlvbiB0b28uCisgICAgICAgICAgICB1aW50NjRfdCB2X2JpdHMg
PSBEb3VibGUodikuQXNVaW50NjQoKTsKKyAgICAgICAgICAgIGlmICgodl9iaXRzICYgRG91Ymxl
OjprU2lnbmlmaWNhbmRNYXNrKSA9PSAwICYmCisgICAgICAgICAgICAgICAgLy8gVGhlIG9ubHkg
ZXhjZXB0aW9uIHdoZXJlIGEgc2lnbmlmaWNhbmQgPT0gMCBoYXMgaXRzIGJvdW5kYXJpZXMgYXQK
KyAgICAgICAgICAgICAgICAvLyAibm9ybWFsIiBkaXN0YW5jZXM6CisgICAgICAgICAgICAgICAg
KHZfYml0cyAmIERvdWJsZTo6a0V4cG9uZW50TWFzaykgIT0ga01pbmltYWxOb3JtYWxpemVkRXhw
b25lbnQpIHsKKyAgICAgICAgICAgICAgICBudW1lcmF0b3ItPlNoaWZ0TGVmdCgxKTsgICAgLy8g
KjIKKyAgICAgICAgICAgICAgICBkZW5vbWluYXRvci0+U2hpZnRMZWZ0KDEpOyAgLy8gKjIKKyAg
ICAgICAgICAgICAgICBkZWx0YV9wbHVzLT5TaGlmdExlZnQoMSk7ICAgLy8gKjIKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBMZXQgdiA9IHNpZ25p
ZmljYW5kICogMl5leHBvbmVudC4KKyAgICAvLyBDb21wdXRlcyB2IC8gMTBeZXN0aW1hdGVkX3Bv
d2VyIGV4YWN0bHksIGFzIGEgcmF0aW8gb2YgdHdvIGJpZ251bXMsIG51bWVyYXRvcgorICAgIC8v
IGFuZCBkZW5vbWluYXRvci4gVGhlIGZ1bmN0aW9ucyBHZW5lcmF0ZVNob3J0ZXN0RGlnaXRzIGFu
ZAorICAgIC8vIEdlbmVyYXRlQ291bnRlZERpZ2l0cyB3aWxsIHRoZW4gY29udmVydCB0aGlzIHJh
dGlvIHRvIGl0cyBkZWNpbWFsCisgICAgLy8gcmVwcmVzZW50YXRpb24gZCwgd2l0aCB0aGUgcmVx
dWlyZWQgYWNjdXJhY3kuCisgICAgLy8gVGhlbiBkICogMTBeZXN0aW1hdGVkX3Bvd2VyIGlzIHRo
ZSByZXByZXNlbnRhdGlvbiBvZiB2LgorICAgIC8vIChOb3RlOiB0aGUgZnJhY3Rpb24gYW5kIHRo
ZSBlc3RpbWF0ZWRfcG93ZXIgbWlnaHQgZ2V0IGFkanVzdGVkIGJlZm9yZQorICAgIC8vIGdlbmVy
YXRpbmcgdGhlIGRlY2ltYWwgcmVwcmVzZW50YXRpb24uKQorICAgIC8vCisgICAgLy8gVGhlIGlu
aXRpYWwgc3RhcnQgdmFsdWVzIGNvbnNpc3Qgb2Y6CisgICAgLy8gIC0gYSBzY2FsZWQgbnVtZXJh
dG9yOiBzLnQuIG51bWVyYXRvci9kZW5vbWluYXRvciA9PSB2IC8gMTBeZXN0aW1hdGVkX3Bvd2Vy
LgorICAgIC8vICAtIGEgc2NhbGVkIChjb21tb24pIGRlbm9taW5hdG9yLgorICAgIC8vICBvcHRp
b25hbGx5ICh1c2VkIGJ5IEdlbmVyYXRlU2hvcnRlc3REaWdpdHMgdG8gZGVjaWRlIGlmIGl0IGhh
cyB0aGUgc2hvcnRlc3QKKyAgICAvLyAgZGVjaW1hbCBjb252ZXJ0aW5nIGJhY2sgdG8gdik6Cisg
ICAgLy8gIC0gdiAtIG0tOiB0aGUgZGlzdGFuY2UgdG8gdGhlIGxvd2VyIGJvdW5kYXJ5LgorICAg
IC8vICAtIG0rIC0gdjogdGhlIGRpc3RhbmNlIHRvIHRoZSB1cHBlciBib3VuZGFyeS4KKyAgICAv
LworICAgIC8vIHYsIG0rLCBtLSwgYW5kIHRoZXJlZm9yZSB2IC0gbS0gYW5kIG0rIC0gdiBhbGwg
c2hhcmUgdGhlIHNhbWUgZGVub21pbmF0b3IuCisgICAgLy8KKyAgICAvLyBMZXQgZXAgPT0gZXN0
aW1hdGVkX3Bvd2VyLCB0aGVuIHRoZSByZXR1cm5lZCB2YWx1ZXMgd2lsbCBzYXRpc2Z5OgorICAg
IC8vICB2IC8gMTBeZXAgPSBudW1lcmF0b3IgLyBkZW5vbWluYXRvci4KKyAgICAvLyAgdidzIGJv
dW5kYXJ5cyBtLSBhbmQgbSs6CisgICAgLy8gICAgbS0gLyAxMF5lcCA9PSB2IC8gMTBeZXAgLSBk
ZWx0YV9taW51cyAvIGRlbm9taW5hdG9yCisgICAgLy8gICAgbSsgLyAxMF5lcCA9PSB2IC8gMTBe
ZXAgKyBkZWx0YV9wbHVzIC8gZGVub21pbmF0b3IKKyAgICAvLyAgT3IgaW4gb3RoZXIgd29yZHM6
CisgICAgLy8gICAgbS0gPT0gdiAtIGRlbHRhX21pbnVzICogMTBeZXAgLyBkZW5vbWluYXRvcjsK
KyAgICAvLyAgICBtKyA9PSB2ICsgZGVsdGFfcGx1cyAqIDEwXmVwIC8gZGVub21pbmF0b3I7Cisg
ICAgLy8KKyAgICAvLyBTaW5jZSAxMF4oay0xKSA8PSB2IDwgMTBeayAgICAod2l0aCBrID09IGVz
dGltYXRlZF9wb3dlcikKKyAgICAvLyAgb3IgICAgICAgMTBeayA8PSB2IDwgMTBeKGsrMSkKKyAg
ICAvLyAgd2UgdGhlbiBoYXZlIDAuMSA8PSBudW1lcmF0b3IvZGVub21pbmF0b3IgPCAxCisgICAg
Ly8gICAgICAgICAgIG9yICAgIDEgPD0gbnVtZXJhdG9yL2Rlbm9taW5hdG9yIDwgMTAKKyAgICAv
LworICAgIC8vIEl0IGlzIHRoZW4gZWFzeSB0byBraWNrc3RhcnQgdGhlIGRpZ2l0LWdlbmVyYXRp
b24gcm91dGluZS4KKyAgICAvLworICAgIC8vIFRoZSBib3VuZGFyeS1kZWx0YXMgYXJlIG9ubHkg
ZmlsbGVkIGlmIG5lZWRfYm91bmRhcnlfZGVsdGFzIGlzIHNldC4KKyAgICBzdGF0aWMgdm9pZCBJ
bml0aWFsU2NhbGVkU3RhcnRWYWx1ZXMoZG91YmxlIHYsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBlc3RpbWF0ZWRfcG93ZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbmVlZF9ib3VuZGFyeV9kZWx0YXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogbnVtZXJhdG9yLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIGRlbm9taW5h
dG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIGRl
bHRhX21pbnVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdu
dW0qIGRlbHRhX3BsdXMpIHsKKyAgICAgICAgaWYgKERvdWJsZSh2KS5FeHBvbmVudCgpID49IDAp
IHsKKyAgICAgICAgICAgIEluaXRpYWxTY2FsZWRTdGFydFZhbHVlc1Bvc2l0aXZlRXhwb25lbnQo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYs
IGVzdGltYXRlZF9wb3dlciwgbmVlZF9ib3VuZGFyeV9kZWx0YXMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyYXRvciwgZGVub21pbmF0
b3IsIGRlbHRhX21pbnVzLCBkZWx0YV9wbHVzKTsKKyAgICAgICAgfSBlbHNlIGlmIChlc3RpbWF0
ZWRfcG93ZXIgPj0gMCkgeworICAgICAgICAgICAgSW5pdGlhbFNjYWxlZFN0YXJ0VmFsdWVzTmVn
YXRpdmVFeHBvbmVudFBvc2l0aXZlUG93ZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LCBlc3RpbWF0ZWRfcG93ZXIs
IG5lZWRfYm91bmRhcnlfZGVsdGFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJhdG9yLCBkZW5vbWluYXRvciwg
ZGVsdGFfbWludXMsIGRlbHRhX3BsdXMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
SW5pdGlhbFNjYWxlZFN0YXJ0VmFsdWVzTmVnYXRpdmVFeHBvbmVudE5lZ2F0aXZlUG93ZXIoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2LCBlc3RpbWF0ZWRfcG93ZXIsIG5lZWRfYm91bmRhcnlfZGVsdGFzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnVtZXJhdG9yLCBkZW5vbWluYXRvciwgZGVsdGFfbWludXMsIGRlbHRhX3BsdXMpOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIC8vIFRoaXMgcm91dGluZSBtdWx0aXBsaWVz
IG51bWVyYXRvci9kZW5vbWluYXRvciBzbyB0aGF0IGl0cyB2YWx1ZXMgbGllcyBpbiB0aGUKKyAg
ICAvLyByYW5nZSAxLTEwLiBUaGF0IGlzIGFmdGVyIGEgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIHdl
IGhhdmU6CisgICAgLy8gICAgMSA8PSAobnVtZXJhdG9yICsgZGVsdGFfcGx1cykgL2Rlbm9taW5h
dG9yIDwgMTAuCisgICAgLy8gTGV0IG51bWVyYXRvciB0aGUgaW5wdXQgYmVmb3JlIG1vZGlmaWNh
dGlvbiBhbmQgbnVtZXJhdG9yJyB0aGUgYXJndW1lbnQKKyAgICAvLyBhZnRlciBtb2RpZmljYXRp
b24sIHRoZW4gdGhlIG91dHB1dC1wYXJhbWV0ZXIgZGVjaW1hbF9wb2ludCBpcyBzdWNoIHRoYXQK
KyAgICAvLyAgbnVtZXJhdG9yIC8gZGVub21pbmF0b3IgKiAxMF5lc3RpbWF0ZWRfcG93ZXIgPT0K
KyAgICAvLyAgICBudW1lcmF0b3InIC8gZGVub21pbmF0b3InICogMTBeKGRlY2ltYWxfcG9pbnQg
LSAxKQorICAgIC8vIEluIHNvbWUgY2FzZXMgZXN0aW1hdGVkX3Bvd2VyIHdhcyB0b28gbG93LCBh
bmQgdGhpcyBpcyBhbHJlYWR5IHRoZSBjYXNlLiBXZQorICAgIC8vIHRoZW4gc2ltcGx5IGFkanVz
dCB0aGUgcG93ZXIgc28gdGhhdCAxMF4oay0xKSA8PSB2IDwgMTBeayAod2l0aCBrID09CisgICAg
Ly8gZXN0aW1hdGVkX3Bvd2VyKSBidXQgZG8gbm90IHRvdWNoIHRoZSBudW1lcmF0b3Igb3IgZGVu
b21pbmF0b3IuCisgICAgLy8gT3RoZXJ3aXNlIHRoZSByb3V0aW5lIG11bHRpcGxpZXMgdGhlIG51
bWVyYXRvciBhbmQgdGhlIGRlbHRhcyBieSAxMC4KKyAgICBzdGF0aWMgdm9pZCBGaXh1cE11bHRp
cGx5MTAoaW50IGVzdGltYXRlZF9wb3dlciwgYm9vbCBpc19ldmVuLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQqIGRlY2ltYWxfcG9pbnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEJpZ251bSogbnVtZXJhdG9yLCBCaWdudW0qIGRlbm9taW5hdG9yLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIGRlbHRhX21pbnVzLCBCaWdudW0q
IGRlbHRhX3BsdXMpIHsKKyAgICAgICAgYm9vbCBpbl9yYW5nZTsKKyAgICAgICAgaWYgKGlzX2V2
ZW4pIHsKKyAgICAgICAgICAgIC8vIEZvciBJRUVFIGRvdWJsZXMgaGFsZi13YXkgY2FzZXMgKGlu
IGRlY2ltYWwgc3lzdGVtIG51bWJlcnMgZW5kaW5nIHdpdGggNSkKKyAgICAgICAgICAgIC8vIGFy
ZSByb3VuZGVkIHRvIHRoZSBjbG9zZXN0IGZsb2F0aW5nLXBvaW50IG51bWJlciB3aXRoIGV2ZW4g
c2lnbmlmaWNhbmQuCisgICAgICAgICAgICBpbl9yYW5nZSA9IEJpZ251bTo6UGx1c0NvbXBhcmUo
Km51bWVyYXRvciwgKmRlbHRhX3BsdXMsICpkZW5vbWluYXRvcikgPj0gMDsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGluX3JhbmdlID0gQmlnbnVtOjpQbHVzQ29tcGFyZSgqbnVtZXJh
dG9yLCAqZGVsdGFfcGx1cywgKmRlbm9taW5hdG9yKSA+IDA7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGluX3JhbmdlKSB7CisgICAgICAgICAgICAvLyBTaW5jZSBudW1lcmF0b3IgKyBkZWx0YV9w
bHVzID49IGRlbm9taW5hdG9yIHdlIGFscmVhZHkgaGF2ZQorICAgICAgICAgICAgLy8gMSA8PSBu
dW1lcmF0b3IvZGVub21pbmF0b3IgPCAxMC4gU2ltcGx5IHVwZGF0ZSB0aGUgZXN0aW1hdGVkX3Bv
d2VyLgorICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSBlc3RpbWF0ZWRfcG93ZXIgKyAxOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSBlc3RpbWF0ZWRf
cG93ZXI7CisgICAgICAgICAgICBudW1lcmF0b3ItPlRpbWVzMTAoKTsKKyAgICAgICAgICAgIGlm
IChCaWdudW06OkVxdWFsKCpkZWx0YV9taW51cywgKmRlbHRhX3BsdXMpKSB7CisgICAgICAgICAg
ICAgICAgZGVsdGFfbWludXMtPlRpbWVzMTAoKTsKKyAgICAgICAgICAgICAgICBkZWx0YV9wbHVz
LT5Bc3NpZ25CaWdudW0oKmRlbHRhX21pbnVzKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgZGVsdGFfbWludXMtPlRpbWVzMTAoKTsKKyAgICAgICAgICAgICAgICBkZWx0
YV9wbHVzLT5UaW1lczEwKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
Cit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KKworfSAvLyBuYW1lc3BhY2UgV1RG
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvYmlnbnVtLWR0b2Eu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9iaWdudW0tZHRvYS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjA3NjE2ODcwOTFjMDBiOTNmMDg3NjQwMzU4ZTM5ODkwN2QwZDRhOTUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvYmlnbnVtLWR0b2EuaApAQCAt
MCwwICsxLDg2IEBACisvLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBt
ZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAg
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8v
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8v
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZm5kZWYgRE9VQkxF
X0NPTlZFUlNJT05fQklHTlVNX0RUT0FfSF8KKyNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05fQklH
TlVNX0RUT0FfSF8KKworI2luY2x1ZGUgInV0aWxzLmgiCisKK25hbWVzcGFjZSBXVEYgeworCitu
YW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIGVudW0gQmlnbnVtRHRvYU1v
ZGUgeworICAgICAgICAvLyBSZXR1cm4gdGhlIHNob3J0ZXN0IGNvcnJlY3QgcmVwcmVzZW50YXRp
b24uCisgICAgICAgIC8vIEZvciBleGFtcGxlIHRoZSBvdXRwdXQgb2YgMC4yOTk5OTk5OTk5OTk5
OTk5ODg4OTcgaXMgKHRoZSBsZXNzIGFjY3VyYXRlIGJ1dAorICAgICAgICAvLyBjb3JyZWN0KSAw
LjMuCisgICAgICAgIEJJR05VTV9EVE9BX1NIT1JURVNULAorICAgICAgICAvLyBSZXR1cm4gYSBm
aXhlZCBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50LgorICAgICAgICAv
LyBGb3IgaW5zdGFuY2UgZml4ZWQoMC4xLCA0KSBiZWNvbWVzIDAuMTAwMAorICAgICAgICAvLyBJ
ZiB0aGUgaW5wdXQgbnVtYmVyIGlzIGJpZywgdGhlIG91dHB1dCB3aWxsIGJlIGJpZy4KKyAgICAg
ICAgQklHTlVNX0RUT0FfRklYRUQsCisgICAgICAgIC8vIFJldHVybiBhIGZpeGVkIG51bWJlciBv
ZiBkaWdpdHMsIG5vIG1hdHRlciB3aGF0IHRoZSBleHBvbmVudCBpcy4KKyAgICAgICAgQklHTlVN
X0RUT0FfUFJFQ0lTSU9OCisgICAgfTsKKyAgICAKKyAgICAvLyBDb252ZXJ0cyB0aGUgZ2l2ZW4g
ZG91YmxlICd2JyB0byBhc2NpaS4KKyAgICAvLyBUaGUgcmVzdWx0IHNob3VsZCBiZSBpbnRlcnBy
ZXRlZCBhcyBidWZmZXIgKiAxMF4ocG9pbnQtbGVuZ3RoKS4KKyAgICAvLyBUaGUgYnVmZmVyIHdp
bGwgYmUgbnVsbC10ZXJtaW5hdGVkLgorICAgIC8vCisgICAgLy8gVGhlIGlucHV0IHYgbXVzdCBi
ZSA+IDAgYW5kIGRpZmZlcmVudCBmcm9tIE5hTiwgYW5kIEluZmluaXR5LgorICAgIC8vCisgICAg
Ly8gVGhlIG91dHB1dCBkZXBlbmRzIG9uIHRoZSBnaXZlbiBtb2RlOgorICAgIC8vICAtIFNIT1JU
RVNUOiBwcm9kdWNlIHRoZSBsZWFzdCBhbW91bnQgb2YgZGlnaXRzIGZvciB3aGljaCB0aGUgaW50
ZXJuYWwKKyAgICAvLyAgIGlkZW50aXR5IHJlcXVpcmVtZW50IGlzIHN0aWxsIHNhdGlzZmllZC4g
SWYgdGhlIGRpZ2l0cyBhcmUgcHJpbnRlZAorICAgIC8vICAgKHRvZ2V0aGVyIHdpdGggdGhlIGNv
cnJlY3QgZXhwb25lbnQpIHRoZW4gcmVhZGluZyB0aGlzIG51bWJlciB3aWxsIGdpdmUKKyAgICAv
LyAgICd2JyBhZ2Fpbi4gVGhlIGJ1ZmZlciB3aWxsIGNob29zZSB0aGUgcmVwcmVzZW50YXRpb24g
dGhhdCBpcyBjbG9zZXN0IHRvCisgICAgLy8gICAndicuIElmIHRoZXJlIGFyZSB0d28gYXQgdGhl
IHNhbWUgZGlzdGFuY2UsIHRoYW4gdGhlIG51bWJlciBpcyByb3VuZCB1cC4KKyAgICAvLyAgIElu
IHRoaXMgbW9kZSB0aGUgJ3JlcXVlc3RlZF9kaWdpdHMnIHBhcmFtZXRlciBpcyBpZ25vcmVkLgor
ICAgIC8vICAtIEZJWEVEOiBwcm9kdWNlcyBkaWdpdHMgbmVjZXNzYXJ5IHRvIHByaW50IGEgZ2l2
ZW4gbnVtYmVyIHdpdGgKKyAgICAvLyAgICdyZXF1ZXN0ZWRfZGlnaXRzJyBkaWdpdHMgYWZ0ZXIg
dGhlIGRlY2ltYWwgcG9pbnQuIFRoZSBwcm9kdWNlZCBkaWdpdHMKKyAgICAvLyAgIG1pZ2h0IGJl
IHRvbyBzaG9ydCBpbiB3aGljaCBjYXNlIHRoZSBjYWxsZXIgaGFzIHRvIGZpbGwgdGhlIGdhcHMg
d2l0aCAnMCdzLgorICAgIC8vICAgRXhhbXBsZTogdG9GaXhlZCgwLjAwMSwgNSkgaXMgYWxsb3dl
ZCB0byByZXR1cm4gYnVmZmVyPSIxIiwgcG9pbnQ9LTIuCisgICAgLy8gICBIYWxmd2F5IGNhc2Vz
IGFyZSByb3VuZGVkIHVwLiBUaGUgY2FsbCB0b0ZpeGVkKDAuMTUsIDIpIHRodXMgcmV0dXJucwor
ICAgIC8vICAgICBidWZmZXI9IjIiLCBwb2ludD0wLgorICAgIC8vICAgTm90ZTogdGhlIGxlbmd0
aCBvZiB0aGUgcmV0dXJuZWQgYnVmZmVyIGhhcyBubyBtZWFuaW5nIHdydCB0aGUgc2lnbmlmaWNh
bmNlCisgICAgLy8gICBvZiBpdHMgZGlnaXRzLiBUaGF0IGlzLCBqdXN0IGJlY2F1c2UgaXQgY29u
dGFpbnMgJzAncyBkb2VzIG5vdCBtZWFuIHRoYXQKKyAgICAvLyAgIGFueSBvdGhlciBkaWdpdCB3
b3VsZCBub3Qgc2F0aXNmeSB0aGUgaW50ZXJuYWwgaWRlbnRpdHkgcmVxdWlyZW1lbnQuCisgICAg
Ly8gIC0gUFJFQ0lTSU9OOiBwcm9kdWNlcyAncmVxdWVzdGVkX2RpZ2l0cycgd2hlcmUgdGhlIGZp
cnN0IGRpZ2l0IGlzIG5vdCAnMCcuCisgICAgLy8gICBFdmVuIHRob3VnaCB0aGUgbGVuZ3RoIG9m
IHByb2R1Y2VkIGRpZ2l0cyB1c3VhbGx5IGVxdWFscworICAgIC8vICAgJ3JlcXVlc3RlZF9kaWdp
dHMnLCB0aGUgZnVuY3Rpb24gaXMgYWxsb3dlZCB0byByZXR1cm4gZmV3ZXIgZGlnaXRzLCBpbgor
ICAgIC8vICAgd2hpY2ggY2FzZSB0aGUgY2FsbGVyIGhhcyB0byBmaWxsIHRoZSBtaXNzaW5nIGRp
Z2l0cyB3aXRoICcwJ3MuCisgICAgLy8gICBIYWxmd2F5IGNhc2VzIGFyZSBhZ2FpbiByb3VuZGVk
IHVwLgorICAgIC8vICdCaWdudW1EdG9hJyBleHBlY3RzIHRoZSBnaXZlbiBidWZmZXIgdG8gYmUg
YmlnIGVub3VnaCB0byBob2xkIGFsbCBkaWdpdHMKKyAgICAvLyBhbmQgYSB0ZXJtaW5hdGluZyBu
dWxsLWNoYXJhY3Rlci4KKyAgICB2b2lkIEJpZ251bUR0b2EoZG91YmxlIHYsIEJpZ251bUR0b2FN
b2RlIG1vZGUsIGludCByZXF1ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICBWZWN0
b3I8Y2hhcj4gYnVmZmVyLCBpbnQqIGxlbmd0aCwgaW50KiBwb2ludCk7CisgICAgCit9ICAvLyBu
YW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRp
ZiAgLy8gRE9VQkxFX0NPTlZFUlNJT05fQklHTlVNX0RUT0FfSF8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9iaWdudW0uY2MgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL2R0b2EvYmlnbnVtLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgyN2EyZjg4MjY0YmU1YTllNmMzODg2
Zjg3OTBlZDZiMTg3NWUyY2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL2R0b2EvYmlnbnVtLmNjCkBAIC0wLDAgKzEsNzY4IEBACisvLyBDb3B5cmlnaHQgMjAx
MCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAg
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8v
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKKyNpbmNsdWRlICJiaWdudW0uaCIKKyNpbmNsdWRlICJ1dGlscy5oIgorCitu
YW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKKyAgICAKKyAg
ICBCaWdudW06OkJpZ251bSgpCisgICAgOiBiaWdpdHNfKGJpZ2l0c19idWZmZXJfLCBrQmlnaXRD
YXBhY2l0eSksIHVzZWRfZGlnaXRzXygwKSwgZXhwb25lbnRfKDApIHsKKyAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBrQmlnaXRDYXBhY2l0eTsgKytpKSB7CisgICAgICAgICAgICBiaWdpdHNf
W2ldID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBTPgorICAgIHN0YXRpYyBpbnQgQml0U2l6ZShTIHZhbHVlKSB7CisgICAgICAgIHJldHVy
biA4ICogc2l6ZW9mKHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgLy8gR3VhcmFudGVlZCB0byBs
aWUgaW4gb25lIEJpZ2l0LgorICAgIHZvaWQgQmlnbnVtOjpBc3NpZ25VSW50MTYodWludDE2X3Qg
dmFsdWUpIHsKKyAgICAgICAgQVNTRVJUKGtCaWdpdFNpemUgPj0gQml0U2l6ZSh2YWx1ZSkpOwor
ICAgICAgICBaZXJvKCk7CisgICAgICAgIGlmICh2YWx1ZSA9PSAwKSByZXR1cm47CisgICAgICAg
IAorICAgICAgICBFbnN1cmVDYXBhY2l0eSgxKTsKKyAgICAgICAgYmlnaXRzX1swXSA9IHZhbHVl
OworICAgICAgICB1c2VkX2RpZ2l0c18gPSAxOworICAgIH0KKyAgICAKKyAgICAKKyAgICB2b2lk
IEJpZ251bTo6QXNzaWduVUludDY0KHVpbnQ2NF90IHZhbHVlKSB7CisgICAgICAgIGNvbnN0IGlu
dCBrVUludDY0U2l6ZSA9IDY0OworICAgICAgICAKKyAgICAgICAgWmVybygpOworICAgICAgICBp
ZiAodmFsdWUgPT0gMCkgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaW50IG5lZWRlZF9iaWdp
dHMgPSBrVUludDY0U2l6ZSAvIGtCaWdpdFNpemUgKyAxOworICAgICAgICBFbnN1cmVDYXBhY2l0
eShuZWVkZWRfYmlnaXRzKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuZWVkZWRfYmln
aXRzOyArK2kpIHsKKyAgICAgICAgICAgIGJpZ2l0c19baV0gPSB2YWx1ZSAmIGtCaWdpdE1hc2s7
CisgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlID4+IGtCaWdpdFNpemU7CisgICAgICAgIH0KKyAg
ICAgICAgdXNlZF9kaWdpdHNfID0gbmVlZGVkX2JpZ2l0czsKKyAgICAgICAgQ2xhbXAoKTsKKyAg
ICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06OkFzc2lnbkJpZ251bShjb25zdCBCaWdu
dW0mIG90aGVyKSB7CisgICAgICAgIGV4cG9uZW50XyA9IG90aGVyLmV4cG9uZW50XzsKKyAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvdGhlci51c2VkX2RpZ2l0c187ICsraSkgeworICAgICAg
ICAgICAgYmlnaXRzX1tpXSA9IG90aGVyLmJpZ2l0c19baV07CisgICAgICAgIH0KKyAgICAgICAg
Ly8gQ2xlYXIgdGhlIGV4Y2VzcyBkaWdpdHMgKGlmIHRoZXJlIHdlcmUgYW55KS4KKyAgICAgICAg
Zm9yIChpbnQgaSA9IG90aGVyLnVzZWRfZGlnaXRzXzsgaSA8IHVzZWRfZGlnaXRzXzsgKytpKSB7
CisgICAgICAgICAgICBiaWdpdHNfW2ldID0gMDsKKyAgICAgICAgfQorICAgICAgICB1c2VkX2Rp
Z2l0c18gPSBvdGhlci51c2VkX2RpZ2l0c187CisgICAgfQorICAgIAorICAgIAorICAgIHN0YXRp
YyB1aW50NjRfdCBSZWFkVUludDY0KFZlY3Rvcjxjb25zdCBjaGFyPiBidWZmZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZyb20sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGRpZ2l0c190b19yZWFkKSB7CisgICAgICAgIHVpbnQ2NF90IHJlc3VsdCA9
IDA7CisgICAgICAgIGZvciAoaW50IGkgPSBmcm9tOyBpIDwgZnJvbSArIGRpZ2l0c190b19yZWFk
OyArK2kpIHsKKyAgICAgICAgICAgIGludCBkaWdpdCA9IGJ1ZmZlcltpXSAtICcwJzsKKyAgICAg
ICAgICAgIEFTU0VSVCgwIDw9IGRpZ2l0ICYmIGRpZ2l0IDw9IDkpOworICAgICAgICAgICAgcmVz
dWx0ID0gcmVzdWx0ICogMTAgKyBkaWdpdDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKyAgICAKKyAgICAKKyAgICB2b2lkIEJpZ251bTo6QXNzaWduRGVjaW1hbFN0
cmluZyhWZWN0b3I8Y29uc3QgY2hhcj4gdmFsdWUpIHsKKyAgICAgICAgLy8gMl42NCA9IDE4NDQ2
NzQ0MDczNzA5NTUxNjE2ID4gMTBeMTkKKyAgICAgICAgY29uc3QgaW50IGtNYXhVaW50NjREZWNp
bWFsRGlnaXRzID0gMTk7CisgICAgICAgIFplcm8oKTsKKyAgICAgICAgaW50IGxlbmd0aCA9IHZh
bHVlLmxlbmd0aCgpOworICAgICAgICBpbnQgcG9zID0gMDsKKyAgICAgICAgLy8gTGV0J3MganVz
dCBzYXkgdGhhdCBlYWNoIGRpZ2l0IG5lZWRzIDQgYml0cy4KKyAgICAgICAgd2hpbGUgKGxlbmd0
aCA+PSBrTWF4VWludDY0RGVjaW1hbERpZ2l0cykgeworICAgICAgICAgICAgdWludDY0X3QgZGln
aXRzID0gUmVhZFVJbnQ2NCh2YWx1ZSwgcG9zLCBrTWF4VWludDY0RGVjaW1hbERpZ2l0cyk7Cisg
ICAgICAgICAgICBwb3MgKz0ga01heFVpbnQ2NERlY2ltYWxEaWdpdHM7CisgICAgICAgICAgICBs
ZW5ndGggLT0ga01heFVpbnQ2NERlY2ltYWxEaWdpdHM7CisgICAgICAgICAgICBNdWx0aXBseUJ5
UG93ZXJPZlRlbihrTWF4VWludDY0RGVjaW1hbERpZ2l0cyk7CisgICAgICAgICAgICBBZGRVSW50
NjQoZGlnaXRzKTsKKyAgICAgICAgfQorICAgICAgICB1aW50NjRfdCBkaWdpdHMgPSBSZWFkVUlu
dDY0KHZhbHVlLCBwb3MsIGxlbmd0aCk7CisgICAgICAgIE11bHRpcGx5QnlQb3dlck9mVGVuKGxl
bmd0aCk7CisgICAgICAgIEFkZFVJbnQ2NChkaWdpdHMpOworICAgICAgICBDbGFtcCgpOworICAg
IH0KKyAgICAKKyAgICAKKyAgICBzdGF0aWMgaW50IEhleENoYXJWYWx1ZShjaGFyIGMpIHsKKyAg
ICAgICAgaWYgKCcwJyA8PSBjICYmIGMgPD0gJzknKSByZXR1cm4gYyAtICcwJzsKKyAgICAgICAg
aWYgKCdhJyA8PSBjICYmIGMgPD0gJ2YnKSByZXR1cm4gMTAgKyBjIC0gJ2EnOworICAgICAgICBp
ZiAoJ0EnIDw9IGMgJiYgYyA8PSAnRicpIHJldHVybiAxMCArIGMgLSAnQSc7CisgICAgICAgIFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOyAgLy8gVG8gbWFrZSBjb21waWxlciBoYXBw
eS4KKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06OkFzc2lnbkhleFN0cmluZyhW
ZWN0b3I8Y29uc3QgY2hhcj4gdmFsdWUpIHsKKyAgICAgICAgWmVybygpOworICAgICAgICBpbnQg
bGVuZ3RoID0gdmFsdWUubGVuZ3RoKCk7CisgICAgICAgIAorICAgICAgICBpbnQgbmVlZGVkX2Jp
Z2l0cyA9IGxlbmd0aCAqIDQgLyBrQmlnaXRTaXplICsgMTsKKyAgICAgICAgRW5zdXJlQ2FwYWNp
dHkobmVlZGVkX2JpZ2l0cyk7CisgICAgICAgIGludCBzdHJpbmdfaW5kZXggPSBsZW5ndGggLSAx
OworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5lZWRlZF9iaWdpdHMgLSAxOyArK2kpIHsK
KyAgICAgICAgICAgIC8vIFRoZXNlIGJpZ2l0cyBhcmUgZ3VhcmFudGVlZCB0byBiZSAiZnVsbCIu
CisgICAgICAgICAgICBDaHVuayBjdXJyZW50X2JpZ2l0ID0gMDsKKyAgICAgICAgICAgIGZvciAo
aW50IGogPSAwOyBqIDwga0JpZ2l0U2l6ZSAvIDQ7IGorKykgeworICAgICAgICAgICAgICAgIGN1
cnJlbnRfYmlnaXQgKz0gSGV4Q2hhclZhbHVlKHZhbHVlW3N0cmluZ19pbmRleC0tXSkgPDwgKGog
KiA0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJpZ2l0c19baV0gPSBjdXJyZW50X2Jp
Z2l0OworICAgICAgICB9CisgICAgICAgIHVzZWRfZGlnaXRzXyA9IG5lZWRlZF9iaWdpdHMgLSAx
OworICAgICAgICAKKyAgICAgICAgQ2h1bmsgbW9zdF9zaWduaWZpY2FudF9iaWdpdCA9IDA7ICAv
LyBDb3VsZCBiZSA9IDA7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDw9IHN0cmluZ19pbmRl
eDsgKytqKSB7CisgICAgICAgICAgICBtb3N0X3NpZ25pZmljYW50X2JpZ2l0IDw8PSA0OworICAg
ICAgICAgICAgbW9zdF9zaWduaWZpY2FudF9iaWdpdCArPSBIZXhDaGFyVmFsdWUodmFsdWVbal0p
OworICAgICAgICB9CisgICAgICAgIGlmIChtb3N0X3NpZ25pZmljYW50X2JpZ2l0ICE9IDApIHsK
KyAgICAgICAgICAgIGJpZ2l0c19bdXNlZF9kaWdpdHNfXSA9IG1vc3Rfc2lnbmlmaWNhbnRfYmln
aXQ7CisgICAgICAgICAgICB1c2VkX2RpZ2l0c18rKzsKKyAgICAgICAgfQorICAgICAgICBDbGFt
cCgpOworICAgIH0KKyAgICAKKyAgICAKKyAgICB2b2lkIEJpZ251bTo6QWRkVUludDY0KHVpbnQ2
NF90IG9wZXJhbmQpIHsKKyAgICAgICAgaWYgKG9wZXJhbmQgPT0gMCkgcmV0dXJuOworICAgICAg
ICBCaWdudW0gb3RoZXI7CisgICAgICAgIG90aGVyLkFzc2lnblVJbnQ2NChvcGVyYW5kKTsKKyAg
ICAgICAgQWRkQmlnbnVtKG90aGVyKTsKKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdu
dW06OkFkZEJpZ251bShjb25zdCBCaWdudW0mIG90aGVyKSB7CisgICAgICAgIEFTU0VSVChJc0Ns
YW1wZWQoKSk7CisgICAgICAgIEFTU0VSVChvdGhlci5Jc0NsYW1wZWQoKSk7CisgICAgICAgIAor
ICAgICAgICAvLyBJZiB0aGlzIGhhcyBhIGdyZWF0ZXIgZXhwb25lbnQgdGhhbiBvdGhlciBhcHBl
bmQgemVyby1iaWdpdHMgdG8gdGhpcy4KKyAgICAgICAgLy8gQWZ0ZXIgdGhpcyBjYWxsIGV4cG9u
ZW50XyA8PSBvdGhlci5leHBvbmVudF8uCisgICAgICAgIEFsaWduKG90aGVyKTsKKyAgICAgICAg
CisgICAgICAgIC8vIFRoZXJlIGFyZSB0d28gcG9zc2liaWxpdGllczoKKyAgICAgICAgLy8gICBh
YWFhYWFhYWFhYSAwMDAwICAod2hlcmUgdGhlIDBzIHJlcHJlc2VudCBhJ3MgZXhwb25lbnQpCisg
ICAgICAgIC8vICAgICBiYmJiYiAwMDAwMDAwMAorICAgICAgICAvLyAgIC0tLS0tLS0tLS0tLS0t
LS0KKyAgICAgICAgLy8gICBjY2NjY2NjY2NjYyAwMDAwCisgICAgICAgIC8vIG9yCisgICAgICAg
IC8vICAgIGFhYWFhYWFhYWEgMDAwMAorICAgICAgICAvLyAgYmJiYmJiYmJiIDAwMDAwMDAKKyAg
ICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIC8vICBjY2NjY2NjY2NjY2MgMDAw
MAorICAgICAgICAvLyBJbiBib3RoIGNhc2VzIHdlIG1pZ2h0IG5lZWQgYSBjYXJyeSBiaWdpdC4K
KyAgICAgICAgCisgICAgICAgIEVuc3VyZUNhcGFjaXR5KDEgKyBNYXgoQmlnaXRMZW5ndGgoKSwg
b3RoZXIuQmlnaXRMZW5ndGgoKSkgLSBleHBvbmVudF8pOworICAgICAgICBDaHVuayBjYXJyeSA9
IDA7CisgICAgICAgIGludCBiaWdpdF9wb3MgPSBvdGhlci5leHBvbmVudF8gLSBleHBvbmVudF87
CisgICAgICAgIEFTU0VSVChiaWdpdF9wb3MgPj0gMCk7CisgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgb3RoZXIudXNlZF9kaWdpdHNfOyArK2kpIHsKKyAgICAgICAgICAgIENodW5rIHN1bSA9
IGJpZ2l0c19bYmlnaXRfcG9zXSArIG90aGVyLmJpZ2l0c19baV0gKyBjYXJyeTsKKyAgICAgICAg
ICAgIGJpZ2l0c19bYmlnaXRfcG9zXSA9IHN1bSAmIGtCaWdpdE1hc2s7CisgICAgICAgICAgICBj
YXJyeSA9IHN1bSA+PiBrQmlnaXRTaXplOworICAgICAgICAgICAgYmlnaXRfcG9zKys7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHdoaWxlIChjYXJyeSAhPSAwKSB7CisgICAgICAgICAg
ICBDaHVuayBzdW0gPSBiaWdpdHNfW2JpZ2l0X3Bvc10gKyBjYXJyeTsKKyAgICAgICAgICAgIGJp
Z2l0c19bYmlnaXRfcG9zXSA9IHN1bSAmIGtCaWdpdE1hc2s7CisgICAgICAgICAgICBjYXJyeSA9
IHN1bSA+PiBrQmlnaXRTaXplOworICAgICAgICAgICAgYmlnaXRfcG9zKys7CisgICAgICAgIH0K
KyAgICAgICAgdXNlZF9kaWdpdHNfID0gTWF4KGJpZ2l0X3BvcywgdXNlZF9kaWdpdHNfKTsKKyAg
ICAgICAgQVNTRVJUKElzQ2xhbXBlZCgpKTsKKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBC
aWdudW06OlN1YnRyYWN0QmlnbnVtKGNvbnN0IEJpZ251bSYgb3RoZXIpIHsKKyAgICAgICAgQVNT
RVJUKElzQ2xhbXBlZCgpKTsKKyAgICAgICAgQVNTRVJUKG90aGVyLklzQ2xhbXBlZCgpKTsKKyAg
ICAgICAgLy8gV2UgcmVxdWlyZSB0aGlzIHRvIGJlIGJpZ2dlciB0aGFuIG90aGVyLgorICAgICAg
ICBBU1NFUlQoTGVzc0VxdWFsKG90aGVyLCAqdGhpcykpOworICAgICAgICAKKyAgICAgICAgQWxp
Z24ob3RoZXIpOworICAgICAgICAKKyAgICAgICAgaW50IG9mZnNldCA9IG90aGVyLmV4cG9uZW50
XyAtIGV4cG9uZW50XzsKKyAgICAgICAgQ2h1bmsgYm9ycm93ID0gMDsKKyAgICAgICAgaW50IGk7
CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBvdGhlci51c2VkX2RpZ2l0c187ICsraSkgeworICAg
ICAgICAgICAgQVNTRVJUKChib3Jyb3cgPT0gMCkgfHwgKGJvcnJvdyA9PSAxKSk7CisgICAgICAg
ICAgICBDaHVuayBkaWZmZXJlbmNlID0gYmlnaXRzX1tpICsgb2Zmc2V0XSAtIG90aGVyLmJpZ2l0
c19baV0gLSBib3Jyb3c7CisgICAgICAgICAgICBiaWdpdHNfW2kgKyBvZmZzZXRdID0gZGlmZmVy
ZW5jZSAmIGtCaWdpdE1hc2s7CisgICAgICAgICAgICBib3Jyb3cgPSBkaWZmZXJlbmNlID4+IChr
Q2h1bmtTaXplIC0gMSk7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKGJvcnJvdyAhPSAwKSB7
CisgICAgICAgICAgICBDaHVuayBkaWZmZXJlbmNlID0gYmlnaXRzX1tpICsgb2Zmc2V0XSAtIGJv
cnJvdzsKKyAgICAgICAgICAgIGJpZ2l0c19baSArIG9mZnNldF0gPSBkaWZmZXJlbmNlICYga0Jp
Z2l0TWFzazsKKyAgICAgICAgICAgIGJvcnJvdyA9IGRpZmZlcmVuY2UgPj4gKGtDaHVua1NpemUg
LSAxKTsKKyAgICAgICAgICAgICsraTsKKyAgICAgICAgfQorICAgICAgICBDbGFtcCgpOworICAg
IH0KKyAgICAKKyAgICAKKyAgICB2b2lkIEJpZ251bTo6U2hpZnRMZWZ0KGludCBzaGlmdF9hbW91
bnQpIHsKKyAgICAgICAgaWYgKHVzZWRfZGlnaXRzXyA9PSAwKSByZXR1cm47CisgICAgICAgIGV4
cG9uZW50XyArPSBzaGlmdF9hbW91bnQgLyBrQmlnaXRTaXplOworICAgICAgICBpbnQgbG9jYWxf
c2hpZnQgPSBzaGlmdF9hbW91bnQgJSBrQmlnaXRTaXplOworICAgICAgICBFbnN1cmVDYXBhY2l0
eSh1c2VkX2RpZ2l0c18gKyAxKTsKKyAgICAgICAgQmlnaXRzU2hpZnRMZWZ0KGxvY2FsX3NoaWZ0
KTsKKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06Ok11bHRpcGx5QnlVSW50MzIo
dWludDMyX3QgZmFjdG9yKSB7CisgICAgICAgIGlmIChmYWN0b3IgPT0gMSkgcmV0dXJuOworICAg
ICAgICBpZiAoZmFjdG9yID09IDApIHsKKyAgICAgICAgICAgIFplcm8oKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAodXNlZF9kaWdpdHNfID09IDApIHJldHVy
bjsKKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBwcm9kdWN0IG9mIGEgYmlnaXQgd2l0aCB0aGUg
ZmFjdG9yIGlzIG9mIHNpemUga0JpZ2l0U2l6ZSArIDMyLgorICAgICAgICAvLyBBc3NlcnQgdGhh
dCB0aGlzIG51bWJlciArIDEgKGZvciB0aGUgY2FycnkpIGZpdHMgaW50byBkb3VibGUgY2h1bmsu
CisgICAgICAgIEFTU0VSVChrRG91YmxlQ2h1bmtTaXplID49IGtCaWdpdFNpemUgKyAzMiArIDEp
OworICAgICAgICBEb3VibGVDaHVuayBjYXJyeSA9IDA7CisgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgdXNlZF9kaWdpdHNfOyArK2kpIHsKKyAgICAgICAgICAgIERvdWJsZUNodW5rIHByb2R1
Y3QgPSBzdGF0aWNfY2FzdDxEb3VibGVDaHVuaz4oZmFjdG9yKSAqIGJpZ2l0c19baV0gKyBjYXJy
eTsKKyAgICAgICAgICAgIGJpZ2l0c19baV0gPSBzdGF0aWNfY2FzdDxDaHVuaz4ocHJvZHVjdCAm
IGtCaWdpdE1hc2spOworICAgICAgICAgICAgY2FycnkgPSAocHJvZHVjdCA+PiBrQmlnaXRTaXpl
KTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoY2FycnkgIT0gMCkgeworICAgICAgICAgICAg
RW5zdXJlQ2FwYWNpdHkodXNlZF9kaWdpdHNfICsgMSk7CisgICAgICAgICAgICBiaWdpdHNfW3Vz
ZWRfZGlnaXRzX10gPSBjYXJyeSAmIGtCaWdpdE1hc2s7CisgICAgICAgICAgICB1c2VkX2RpZ2l0
c18rKzsKKyAgICAgICAgICAgIGNhcnJ5ID4+PSBrQmlnaXRTaXplOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpNdWx0aXBseUJ5VUludDY0KHVpbnQ2NF90
IGZhY3RvcikgeworICAgICAgICBpZiAoZmFjdG9yID09IDEpIHJldHVybjsKKyAgICAgICAgaWYg
KGZhY3RvciA9PSAwKSB7CisgICAgICAgICAgICBaZXJvKCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKGtCaWdpdFNpemUgPCAzMik7CisgICAgICAgIHVp
bnQ2NF90IGNhcnJ5ID0gMDsKKyAgICAgICAgdWludDY0X3QgbG93ID0gZmFjdG9yICYgMHhGRkZG
RkZGRjsKKyAgICAgICAgdWludDY0X3QgaGlnaCA9IGZhY3RvciA+PiAzMjsKKyAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCB1c2VkX2RpZ2l0c187ICsraSkgeworICAgICAgICAgICAgdWludDY0
X3QgcHJvZHVjdF9sb3cgPSBsb3cgKiBiaWdpdHNfW2ldOworICAgICAgICAgICAgdWludDY0X3Qg
cHJvZHVjdF9oaWdoID0gaGlnaCAqIGJpZ2l0c19baV07CisgICAgICAgICAgICB1aW50NjRfdCB0
bXAgPSAoY2FycnkgJiBrQmlnaXRNYXNrKSArIHByb2R1Y3RfbG93OworICAgICAgICAgICAgYmln
aXRzX1tpXSA9IHRtcCAmIGtCaWdpdE1hc2s7CisgICAgICAgICAgICBjYXJyeSA9IChjYXJyeSA+
PiBrQmlnaXRTaXplKSArICh0bXAgPj4ga0JpZ2l0U2l6ZSkgKworICAgICAgICAgICAgKHByb2R1
Y3RfaGlnaCA8PCAoMzIgLSBrQmlnaXRTaXplKSk7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUg
KGNhcnJ5ICE9IDApIHsKKyAgICAgICAgICAgIEVuc3VyZUNhcGFjaXR5KHVzZWRfZGlnaXRzXyAr
IDEpOworICAgICAgICAgICAgYmlnaXRzX1t1c2VkX2RpZ2l0c19dID0gY2FycnkgJiBrQmlnaXRN
YXNrOworICAgICAgICAgICAgdXNlZF9kaWdpdHNfKys7CisgICAgICAgICAgICBjYXJyeSA+Pj0g
a0JpZ2l0U2l6ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICB2b2lkIEJpZ251
bTo6TXVsdGlwbHlCeVBvd2VyT2ZUZW4oaW50IGV4cG9uZW50KSB7CisgICAgICAgIGNvbnN0IHVp
bnQ2NF90IGtGaXZlMjcgPSBVSU5UNjRfMlBBUlRfQygweDY3NjVjNzkzLCBmYTEwMDc5ZCk7Cisg
ICAgICAgIGNvbnN0IHVpbnQxNl90IGtGaXZlMSA9IDU7CisgICAgICAgIGNvbnN0IHVpbnQxNl90
IGtGaXZlMiA9IGtGaXZlMSAqIDU7CisgICAgICAgIGNvbnN0IHVpbnQxNl90IGtGaXZlMyA9IGtG
aXZlMiAqIDU7CisgICAgICAgIGNvbnN0IHVpbnQxNl90IGtGaXZlNCA9IGtGaXZlMyAqIDU7Cisg
ICAgICAgIGNvbnN0IHVpbnQxNl90IGtGaXZlNSA9IGtGaXZlNCAqIDU7CisgICAgICAgIGNvbnN0
IHVpbnQxNl90IGtGaXZlNiA9IGtGaXZlNSAqIDU7CisgICAgICAgIGNvbnN0IHVpbnQzMl90IGtG
aXZlNyA9IGtGaXZlNiAqIDU7CisgICAgICAgIGNvbnN0IHVpbnQzMl90IGtGaXZlOCA9IGtGaXZl
NyAqIDU7CisgICAgICAgIGNvbnN0IHVpbnQzMl90IGtGaXZlOSA9IGtGaXZlOCAqIDU7CisgICAg
ICAgIGNvbnN0IHVpbnQzMl90IGtGaXZlMTAgPSBrRml2ZTkgKiA1OworICAgICAgICBjb25zdCB1
aW50MzJfdCBrRml2ZTExID0ga0ZpdmUxMCAqIDU7CisgICAgICAgIGNvbnN0IHVpbnQzMl90IGtG
aXZlMTIgPSBrRml2ZTExICogNTsKKyAgICAgICAgY29uc3QgdWludDMyX3Qga0ZpdmUxMyA9IGtG
aXZlMTIgKiA1OworICAgICAgICBjb25zdCB1aW50MzJfdCBrRml2ZTFfdG9fMTJbXSA9CisgICAg
ICAgIHsga0ZpdmUxLCBrRml2ZTIsIGtGaXZlMywga0ZpdmU0LCBrRml2ZTUsIGtGaXZlNiwKKyAg
ICAgICAgICAgIGtGaXZlNywga0ZpdmU4LCBrRml2ZTksIGtGaXZlMTAsIGtGaXZlMTEsIGtGaXZl
MTIgfTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChleHBvbmVudCA+PSAwKTsKKyAgICAgICAg
aWYgKGV4cG9uZW50ID09IDApIHJldHVybjsKKyAgICAgICAgaWYgKHVzZWRfZGlnaXRzXyA9PSAw
KSByZXR1cm47CisgICAgICAgIAorICAgICAgICAvLyBXZSBzaGlmdCBieSBleHBvbmVudCBhdCB0
aGUgZW5kIGp1c3QgYmVmb3JlIHJldHVybmluZy4KKyAgICAgICAgaW50IHJlbWFpbmluZ19leHBv
bmVudCA9IGV4cG9uZW50OworICAgICAgICB3aGlsZSAocmVtYWluaW5nX2V4cG9uZW50ID49IDI3
KSB7CisgICAgICAgICAgICBNdWx0aXBseUJ5VUludDY0KGtGaXZlMjcpOworICAgICAgICAgICAg
cmVtYWluaW5nX2V4cG9uZW50IC09IDI3OworICAgICAgICB9CisgICAgICAgIHdoaWxlIChyZW1h
aW5pbmdfZXhwb25lbnQgPj0gMTMpIHsKKyAgICAgICAgICAgIE11bHRpcGx5QnlVSW50MzIoa0Zp
dmUxMyk7CisgICAgICAgICAgICByZW1haW5pbmdfZXhwb25lbnQgLT0gMTM7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHJlbWFpbmluZ19leHBvbmVudCA+IDApIHsKKyAgICAgICAgICAgIE11bHRp
cGx5QnlVSW50MzIoa0ZpdmUxX3RvXzEyW3JlbWFpbmluZ19leHBvbmVudCAtIDFdKTsKKyAgICAg
ICAgfQorICAgICAgICBTaGlmdExlZnQoZXhwb25lbnQpOworICAgIH0KKyAgICAKKyAgICAKKyAg
ICB2b2lkIEJpZ251bTo6U3F1YXJlKCkgeworICAgICAgICBBU1NFUlQoSXNDbGFtcGVkKCkpOwor
ICAgICAgICBpbnQgcHJvZHVjdF9sZW5ndGggPSAyICogdXNlZF9kaWdpdHNfOworICAgICAgICBF
bnN1cmVDYXBhY2l0eShwcm9kdWN0X2xlbmd0aCk7CisgICAgICAgIAorICAgICAgICAvLyBDb21i
YSBtdWx0aXBsaWNhdGlvbjogY29tcHV0ZSBlYWNoIGNvbHVtbiBzZXBhcmF0ZWx5LgorICAgICAg
ICAvLyBFeGFtcGxlOiByID0gYTJhMWEwICogYjJiMWIwLgorICAgICAgICAvLyAgICByID0gIDEg
ICAgKiBhMGIwICsKKyAgICAgICAgLy8gICAgICAgIDEwICAgICogKGExYjAgKyBhMGIxKSArCisg
ICAgICAgIC8vICAgICAgICAxMDAgICAqIChhMmIwICsgYTFiMSArIGEwYjIpICsKKyAgICAgICAg
Ly8gICAgICAgIDEwMDAgICogKGEyYjEgKyBhMWIyKSArCisgICAgICAgIC8vICAgICAgICAxMDAw
MCAqIGEyYjIKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSW4gdGhlIHdvcnN0IGNhc2Ugd2UgaGF2
ZSB0byBhY2N1bXVsYXRlIG5iLWRpZ2l0cyBwcm9kdWN0cyBvZiBkaWdpdCpkaWdpdC4KKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIGFkZGl0aW9uYWwgbnVtYmVyIG9mIGJp
dHMgaW4gYSBEb3VibGVDaHVuayBhcmUgZW5vdWdoIHRvCisgICAgICAgIC8vIHN1bSB1cCB1c2Vk
X2RpZ2l0cyBvZiBCaWdpdCpCaWdpdC4KKyAgICAgICAgaWYgKCgxIDw8ICgyICogKGtDaHVua1Np
emUgLSBrQmlnaXRTaXplKSkpIDw9IHVzZWRfZGlnaXRzXykgeworICAgICAgICAgICAgVU5JTVBM
RU1FTlRFRCgpOworICAgICAgICB9CisgICAgICAgIERvdWJsZUNodW5rIGFjY3VtdWxhdG9yID0g
MDsKKyAgICAgICAgLy8gRmlyc3Qgc2hpZnQgdGhlIGRpZ2l0cyBzbyB3ZSBkb24ndCBvdmVyd3Jp
dGUgdGhlbS4KKyAgICAgICAgaW50IGNvcHlfb2Zmc2V0ID0gdXNlZF9kaWdpdHNfOworICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHVzZWRfZGlnaXRzXzsgKytpKSB7CisgICAgICAgICAgICBi
aWdpdHNfW2NvcHlfb2Zmc2V0ICsgaV0gPSBiaWdpdHNfW2ldOworICAgICAgICB9CisgICAgICAg
IC8vIFdlIGhhdmUgdHdvIGxvb3BzIHRvIGF2b2lkIHNvbWUgJ2lmJ3MgaW4gdGhlIGxvb3AuCisg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdXNlZF9kaWdpdHNfOyArK2kpIHsKKyAgICAgICAg
ICAgIC8vIFByb2Nlc3MgdGVtcG9yYXJ5IGRpZ2l0IGkgd2l0aCBwb3dlciBpLgorICAgICAgICAg
ICAgLy8gVGhlIHN1bSBvZiB0aGUgdHdvIGluZGljZXMgbXVzdCBiZSBlcXVhbCB0byBpLgorICAg
ICAgICAgICAgaW50IGJpZ2l0X2luZGV4MSA9IGk7CisgICAgICAgICAgICBpbnQgYmlnaXRfaW5k
ZXgyID0gMDsKKyAgICAgICAgICAgIC8vIFN1bSBhbGwgb2YgdGhlIHN1Yi1wcm9kdWN0cy4KKyAg
ICAgICAgICAgIHdoaWxlIChiaWdpdF9pbmRleDEgPj0gMCkgeworICAgICAgICAgICAgICAgIENo
dW5rIGNodW5rMSA9IGJpZ2l0c19bY29weV9vZmZzZXQgKyBiaWdpdF9pbmRleDFdOworICAgICAg
ICAgICAgICAgIENodW5rIGNodW5rMiA9IGJpZ2l0c19bY29weV9vZmZzZXQgKyBiaWdpdF9pbmRl
eDJdOworICAgICAgICAgICAgICAgIGFjY3VtdWxhdG9yICs9IHN0YXRpY19jYXN0PERvdWJsZUNo
dW5rPihjaHVuazEpICogY2h1bmsyOworICAgICAgICAgICAgICAgIGJpZ2l0X2luZGV4MS0tOwor
ICAgICAgICAgICAgICAgIGJpZ2l0X2luZGV4MisrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYmlnaXRzX1tpXSA9IHN0YXRpY19jYXN0PENodW5rPihhY2N1bXVsYXRvcikgJiBrQmlnaXRN
YXNrOworICAgICAgICAgICAgYWNjdW11bGF0b3IgPj49IGtCaWdpdFNpemU7CisgICAgICAgIH0K
KyAgICAgICAgZm9yIChpbnQgaSA9IHVzZWRfZGlnaXRzXzsgaSA8IHByb2R1Y3RfbGVuZ3RoOyAr
K2kpIHsKKyAgICAgICAgICAgIGludCBiaWdpdF9pbmRleDEgPSB1c2VkX2RpZ2l0c18gLSAxOwor
ICAgICAgICAgICAgaW50IGJpZ2l0X2luZGV4MiA9IGkgLSBiaWdpdF9pbmRleDE7CisgICAgICAg
ICAgICAvLyBJbnZhcmlhbnQ6IHN1bSBvZiBib3RoIGluZGljZXMgaXMgYWdhaW4gZXF1YWwgdG8g
aS4KKyAgICAgICAgICAgIC8vIElubmVyIGxvb3AgcnVucyAwIHRpbWVzIG9uIGxhc3QgaXRlcmF0
aW9uLCBlbXB0eWluZyBhY2N1bXVsYXRvci4KKyAgICAgICAgICAgIHdoaWxlIChiaWdpdF9pbmRl
eDIgPCB1c2VkX2RpZ2l0c18pIHsKKyAgICAgICAgICAgICAgICBDaHVuayBjaHVuazEgPSBiaWdp
dHNfW2NvcHlfb2Zmc2V0ICsgYmlnaXRfaW5kZXgxXTsKKyAgICAgICAgICAgICAgICBDaHVuayBj
aHVuazIgPSBiaWdpdHNfW2NvcHlfb2Zmc2V0ICsgYmlnaXRfaW5kZXgyXTsKKyAgICAgICAgICAg
ICAgICBhY2N1bXVsYXRvciArPSBzdGF0aWNfY2FzdDxEb3VibGVDaHVuaz4oY2h1bmsxKSAqIGNo
dW5rMjsKKyAgICAgICAgICAgICAgICBiaWdpdF9pbmRleDEtLTsKKyAgICAgICAgICAgICAgICBi
aWdpdF9pbmRleDIrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFRoZSBvdmVyd3Jp
dHRlbiBiaWdpdHNfW2ldIHdpbGwgbmV2ZXIgYmUgcmVhZCBpbiBmdXJ0aGVyIGxvb3AgaXRlcmF0
aW9ucywKKyAgICAgICAgICAgIC8vIGJlY2F1c2UgYmlnaXRfaW5kZXgxIGFuZCBiaWdpdF9pbmRl
eDIgYXJlIGFsd2F5cyBncmVhdGVyCisgICAgICAgICAgICAvLyB0aGFuIGkgLSB1c2VkX2RpZ2l0
c18uCisgICAgICAgICAgICBiaWdpdHNfW2ldID0gc3RhdGljX2Nhc3Q8Q2h1bms+KGFjY3VtdWxh
dG9yKSAmIGtCaWdpdE1hc2s7CisgICAgICAgICAgICBhY2N1bXVsYXRvciA+Pj0ga0JpZ2l0U2l6
ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBTaW5jZSB0aGUgcmVzdWx0IHdhcyBndWFyYW50ZWVk
IHRvIGxpZSBpbnNpZGUgdGhlIG51bWJlciB0aGUKKyAgICAgICAgLy8gYWNjdW11bGF0b3IgbXVz
dCBiZSAwIG5vdy4KKyAgICAgICAgQVNTRVJUKGFjY3VtdWxhdG9yID09IDApOworICAgICAgICAK
KyAgICAgICAgLy8gRG9uJ3QgZm9yZ2V0IHRvIHVwZGF0ZSB0aGUgdXNlZF9kaWdpdHMgYW5kIHRo
ZSBleHBvbmVudC4KKyAgICAgICAgdXNlZF9kaWdpdHNfID0gcHJvZHVjdF9sZW5ndGg7CisgICAg
ICAgIGV4cG9uZW50XyAqPSAyOworICAgICAgICBDbGFtcCgpOworICAgIH0KKyAgICAKKyAgICAK
KyAgICB2b2lkIEJpZ251bTo6QXNzaWduUG93ZXJVSW50MTYodWludDE2X3QgYmFzZSwgaW50IHBv
d2VyX2V4cG9uZW50KSB7CisgICAgICAgIEFTU0VSVChiYXNlICE9IDApOworICAgICAgICBBU1NF
UlQocG93ZXJfZXhwb25lbnQgPj0gMCk7CisgICAgICAgIGlmIChwb3dlcl9leHBvbmVudCA9PSAw
KSB7CisgICAgICAgICAgICBBc3NpZ25VSW50MTYoMSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgWmVybygpOworICAgICAgICBpbnQgc2hpZnRzID0gMDsKKyAgICAg
ICAgLy8gV2UgZXhwZWN0IGJhc2UgdG8gYmUgaW4gcmFuZ2UgMi0zMiwgYW5kIG1vc3Qgb2Z0ZW4g
dG8gYmUgMTAuCisgICAgICAgIC8vIEl0IGRvZXMgbm90IG1ha2UgbXVjaCBzZW5zZSB0byBpbXBs
ZW1lbnQgZGlmZmVyZW50IGFsZ29yaXRobXMgZm9yIGNvdW50aW5nCisgICAgICAgIC8vIHRoZSBi
aXRzLgorICAgICAgICB3aGlsZSAoKGJhc2UgJiAxKSA9PSAwKSB7CisgICAgICAgICAgICBiYXNl
ID4+PSAxOworICAgICAgICAgICAgc2hpZnRzKys7CisgICAgICAgIH0KKyAgICAgICAgaW50IGJp
dF9zaXplID0gMDsKKyAgICAgICAgaW50IHRtcF9iYXNlID0gYmFzZTsKKyAgICAgICAgd2hpbGUg
KHRtcF9iYXNlICE9IDApIHsKKyAgICAgICAgICAgIHRtcF9iYXNlID4+PSAxOworICAgICAgICAg
ICAgYml0X3NpemUrKzsKKyAgICAgICAgfQorICAgICAgICBpbnQgZmluYWxfc2l6ZSA9IGJpdF9z
aXplICogcG93ZXJfZXhwb25lbnQ7CisgICAgICAgIC8vIDEgZXh0cmEgYmlnaXQgZm9yIHRoZSBz
aGlmdGluZywgYW5kIG9uZSBmb3Igcm91bmRlZCBmaW5hbF9zaXplLgorICAgICAgICBFbnN1cmVD
YXBhY2l0eShmaW5hbF9zaXplIC8ga0JpZ2l0U2l6ZSArIDIpOworICAgICAgICAKKyAgICAgICAg
Ly8gTGVmdCB0byBSaWdodCBleHBvbmVudGlhdGlvbi4KKyAgICAgICAgaW50IG1hc2sgPSAxOwor
ICAgICAgICB3aGlsZSAocG93ZXJfZXhwb25lbnQgPj0gbWFzaykgbWFzayA8PD0gMTsKKyAgICAg
ICAgCisgICAgICAgIC8vIFRoZSBtYXNrIGlzIG5vdyBwb2ludGluZyB0byB0aGUgYml0IGFib3Zl
IHRoZSBtb3N0IHNpZ25pZmljYW50IDEtYml0IG9mCisgICAgICAgIC8vIHBvd2VyX2V4cG9uZW50
LgorICAgICAgICAvLyBHZXQgcmlkIG9mIGZpcnN0IDEtYml0OworICAgICAgICBtYXNrID4+PSAy
OworICAgICAgICB1aW50NjRfdCB0aGlzX3ZhbHVlID0gYmFzZTsKKyAgICAgICAgCisgICAgICAg
IGJvb2wgZGVsYXllZF9tdWx0aXBsaWNpYXRpb24gPSBmYWxzZTsKKyAgICAgICAgY29uc3QgdWlu
dDY0X3QgbWF4XzMyYml0cyA9IDB4RkZGRkZGRkY7CisgICAgICAgIHdoaWxlIChtYXNrICE9IDAg
JiYgdGhpc192YWx1ZSA8PSBtYXhfMzJiaXRzKSB7CisgICAgICAgICAgICB0aGlzX3ZhbHVlID0g
dGhpc192YWx1ZSAqIHRoaXNfdmFsdWU7CisgICAgICAgICAgICAvLyBWZXJpZnkgdGhhdCB0aGVy
ZSBpcyBlbm91Z2ggc3BhY2UgaW4gdGhpc192YWx1ZSB0byBwZXJmb3JtIHRoZQorICAgICAgICAg
ICAgLy8gbXVsdGlwbGljYXRpb24uICBUaGUgZmlyc3QgYml0X3NpemUgYml0cyBtdXN0IGJlIDAu
CisgICAgICAgICAgICBpZiAoKHBvd2VyX2V4cG9uZW50ICYgbWFzaykgIT0gMCkgeworICAgICAg
ICAgICAgICAgIHVpbnQ2NF90IGJhc2VfYml0c19tYXNrID0KKyAgICAgICAgICAgICAgICB+KChz
dGF0aWNfY2FzdDx1aW50NjRfdD4oMSkgPDwgKDY0IC0gYml0X3NpemUpKSAtIDEpOworICAgICAg
ICAgICAgICAgIGJvb2wgaGlnaF9iaXRzX3plcm8gPSAodGhpc192YWx1ZSAmIGJhc2VfYml0c19t
YXNrKSA9PSAwOworICAgICAgICAgICAgICAgIGlmIChoaWdoX2JpdHNfemVybykgeworICAgICAg
ICAgICAgICAgICAgICB0aGlzX3ZhbHVlICo9IGJhc2U7CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgZGVsYXllZF9tdWx0aXBsaWNpYXRpb24gPSB0cnVlOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1hc2sgPj49IDE7
CisgICAgICAgIH0KKyAgICAgICAgQXNzaWduVUludDY0KHRoaXNfdmFsdWUpOworICAgICAgICBp
ZiAoZGVsYXllZF9tdWx0aXBsaWNpYXRpb24pIHsKKyAgICAgICAgICAgIE11bHRpcGx5QnlVSW50
MzIoYmFzZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIE5vdyBkbyB0aGUgc2Ft
ZSB0aGluZyBhcyBhIGJpZ251bS4KKyAgICAgICAgd2hpbGUgKG1hc2sgIT0gMCkgeworICAgICAg
ICAgICAgU3F1YXJlKCk7CisgICAgICAgICAgICBpZiAoKHBvd2VyX2V4cG9uZW50ICYgbWFzaykg
IT0gMCkgeworICAgICAgICAgICAgICAgIE11bHRpcGx5QnlVSW50MzIoYmFzZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBtYXNrID4+PSAxOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICAvLyBBbmQgZmluYWxseSBhZGQgdGhlIHNhdmVkIHNoaWZ0cy4KKyAgICAgICAgU2hpZnRM
ZWZ0KHNoaWZ0cyAqIHBvd2VyX2V4cG9uZW50KTsKKyAgICB9CisgICAgCisgICAgCisgICAgLy8g
UHJlY29uZGl0aW9uOiB0aGlzL290aGVyIDwgMTZiaXQuCisgICAgdWludDE2X3QgQmlnbnVtOjpE
aXZpZGVNb2R1bG9JbnRCaWdudW0oY29uc3QgQmlnbnVtJiBvdGhlcikgeworICAgICAgICBBU1NF
UlQoSXNDbGFtcGVkKCkpOworICAgICAgICBBU1NFUlQob3RoZXIuSXNDbGFtcGVkKCkpOworICAg
ICAgICBBU1NFUlQob3RoZXIudXNlZF9kaWdpdHNfID4gMCk7CisgICAgICAgIAorICAgICAgICAv
LyBFYXN5IGNhc2U6IGlmIHdlIGhhdmUgbGVzcyBkaWdpdHMgdGhhbiB0aGUgZGl2aXNvciB0aGFu
IHRoZSByZXN1bHQgaXMgMC4KKyAgICAgICAgLy8gTm90ZTogdGhpcyBoYW5kbGVzIHRoZSBjYXNl
IHdoZXJlIHRoaXMgPT0gMCwgdG9vLgorICAgICAgICBpZiAoQmlnaXRMZW5ndGgoKSA8IG90aGVy
LkJpZ2l0TGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBBbGlnbihvdGhlcik7CisgICAgICAgIAorICAgICAgICB1aW50MTZfdCBy
ZXN1bHQgPSAwOworICAgICAgICAKKyAgICAgICAgLy8gU3RhcnQgYnkgcmVtb3ZpbmcgbXVsdGlw
bGVzIG9mICdvdGhlcicgdW50aWwgYm90aCBudW1iZXJzIGhhdmUgdGhlIHNhbWUKKyAgICAgICAg
Ly8gbnVtYmVyIG9mIGRpZ2l0cy4KKyAgICAgICAgd2hpbGUgKEJpZ2l0TGVuZ3RoKCkgPiBvdGhl
ci5CaWdpdExlbmd0aCgpKSB7CisgICAgICAgICAgICAvLyBUaGlzIG5haXZlIGFwcHJvYWNoIGlz
IGV4dHJlbWVseSBpbmVmZmljaWVudCBpZiB0aGUgdGhpcyBkaXZpZGVkIG90aGVyCisgICAgICAg
ICAgICAvLyBtaWdodCBiZSBiaWcuIFRoaXMgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgZm9yIGRv
dWJsZVRvU3RyaW5nIHdoZXJlCisgICAgICAgICAgICAvLyB0aGUgcmVzdWx0IHNob3VsZCBiZSBz
bWFsbCAobGVzcyB0aGFuIDEwKS4KKyAgICAgICAgICAgIEFTU0VSVChvdGhlci5iaWdpdHNfW290
aGVyLnVzZWRfZGlnaXRzXyAtIDFdID49ICgoMSA8PCBrQmlnaXRTaXplKSAvIDE2KSk7CisgICAg
ICAgICAgICAvLyBSZW1vdmUgdGhlIG11bHRpcGxlcyBvZiB0aGUgZmlyc3QgZGlnaXQuCisgICAg
ICAgICAgICAvLyBFeGFtcGxlIHRoaXMgPSAyMyBhbmQgb3RoZXIgZXF1YWxzIDkuIC0+IFJlbW92
ZSAyIG11bHRpcGxlcy4KKyAgICAgICAgICAgIHJlc3VsdCArPSBiaWdpdHNfW3VzZWRfZGlnaXRz
XyAtIDFdOworICAgICAgICAgICAgU3VidHJhY3RUaW1lcyhvdGhlciwgYmlnaXRzX1t1c2VkX2Rp
Z2l0c18gLSAxXSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFTU0VSVChCaWdpdExl
bmd0aCgpID09IG90aGVyLkJpZ2l0TGVuZ3RoKCkpOworICAgICAgICAKKyAgICAgICAgLy8gQm90
aCBiaWdudW1zIGFyZSBhdCB0aGUgc2FtZSBsZW5ndGggbm93LgorICAgICAgICAvLyBTaW5jZSBv
dGhlciBoYXMgbW9yZSB0aGFuIDAgZGlnaXRzIHdlIGtub3cgdGhhdCB0aGUgYWNjZXNzIHRvCisg
ICAgICAgIC8vIGJpZ2l0c19bdXNlZF9kaWdpdHNfIC0gMV0gaXMgc2FmZS4KKyAgICAgICAgQ2h1
bmsgdGhpc19iaWdpdCA9IGJpZ2l0c19bdXNlZF9kaWdpdHNfIC0gMV07CisgICAgICAgIENodW5r
IG90aGVyX2JpZ2l0ID0gb3RoZXIuYmlnaXRzX1tvdGhlci51c2VkX2RpZ2l0c18gLSAxXTsKKyAg
ICAgICAgCisgICAgICAgIGlmIChvdGhlci51c2VkX2RpZ2l0c18gPT0gMSkgeworICAgICAgICAg
ICAgLy8gU2hvcnRjdXQgZm9yIGVhc3kgKGFuZCBjb21tb24pIGNhc2UuCisgICAgICAgICAgICBp
bnQgcXVvdGllbnQgPSB0aGlzX2JpZ2l0IC8gb3RoZXJfYmlnaXQ7CisgICAgICAgICAgICBiaWdp
dHNfW3VzZWRfZGlnaXRzXyAtIDFdID0gdGhpc19iaWdpdCAtIG90aGVyX2JpZ2l0ICogcXVvdGll
bnQ7CisgICAgICAgICAgICByZXN1bHQgKz0gcXVvdGllbnQ7CisgICAgICAgICAgICBDbGFtcCgp
OworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgaW50IGRpdmlzaW9uX2VzdGltYXRlID0gdGhpc19iaWdpdCAvIChvdGhlcl9iaWdpdCArIDEp
OworICAgICAgICByZXN1bHQgKz0gZGl2aXNpb25fZXN0aW1hdGU7CisgICAgICAgIFN1YnRyYWN0
VGltZXMob3RoZXIsIGRpdmlzaW9uX2VzdGltYXRlKTsKKyAgICAgICAgCisgICAgICAgIGlmIChv
dGhlcl9iaWdpdCAqIChkaXZpc2lvbl9lc3RpbWF0ZSArIDEpID4gdGhpc19iaWdpdCkgeworICAg
ICAgICAgICAgLy8gTm8gbmVlZCB0byBldmVuIHRyeSB0byBzdWJ0cmFjdC4gRXZlbiBpZiBvdGhl
cidzIHJlbWFpbmluZyBkaWdpdHMgd2VyZSAwCisgICAgICAgICAgICAvLyBhbm90aGVyIHN1YnRy
YWN0aW9uIHdvdWxkIGJlIHRvbyBtdWNoLgorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgd2hpbGUgKExlc3NFcXVhbChvdGhlciwgKnRoaXMp
KSB7CisgICAgICAgICAgICBTdWJ0cmFjdEJpZ251bShvdGhlcik7CisgICAgICAgICAgICByZXN1
bHQrKzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAg
ICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTPgorICAgIHN0YXRpYyBpbnQgU2l6ZUluSGV4Q2hh
cnMoUyBudW1iZXIpIHsKKyAgICAgICAgQVNTRVJUKG51bWJlciA+IDApOworICAgICAgICBpbnQg
cmVzdWx0ID0gMDsKKyAgICAgICAgd2hpbGUgKG51bWJlciAhPSAwKSB7CisgICAgICAgICAgICBu
dW1iZXIgPj49IDQ7CisgICAgICAgICAgICByZXN1bHQrKzsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICAKKyAgICBzdGF0aWMgY2hhciBIZXhDaGFy
T2ZWYWx1ZShpbnQgdmFsdWUpIHsKKyAgICAgICAgQVNTRVJUKDAgPD0gdmFsdWUgJiYgdmFsdWUg
PD0gMTYpOworICAgICAgICBpZiAodmFsdWUgPCAxMCkgcmV0dXJuIHZhbHVlICsgJzAnOworICAg
ICAgICByZXR1cm4gdmFsdWUgLSAxMCArICdBJzsKKyAgICB9CisgICAgCisgICAgCisgICAgYm9v
bCBCaWdudW06OlRvSGV4U3RyaW5nKGNoYXIqIGJ1ZmZlciwgaW50IGJ1ZmZlcl9zaXplKSBjb25z
dCB7CisgICAgICAgIEFTU0VSVChJc0NsYW1wZWQoKSk7CisgICAgICAgIC8vIEVhY2ggYmlnaXQg
bXVzdCBiZSBwcmludGFibGUgYXMgc2VwYXJhdGUgaGV4LWNoYXJhY3Rlci4KKyAgICAgICAgQVNT
RVJUKGtCaWdpdFNpemUgJSA0ID09IDApOworICAgICAgICBjb25zdCBpbnQga0hleENoYXJzUGVy
QmlnaXQgPSBrQmlnaXRTaXplIC8gNDsKKyAgICAgICAgCisgICAgICAgIGlmICh1c2VkX2RpZ2l0
c18gPT0gMCkgeworICAgICAgICAgICAgaWYgKGJ1ZmZlcl9zaXplIDwgMikgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgYnVmZmVyWzBdID0gJzAnOworICAgICAgICAgICAgYnVmZmVyWzFdID0g
J1wwJzsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIC8vIFdl
IGFkZCAxIGZvciB0aGUgdGVybWluYXRpbmcgJ1wwJyBjaGFyYWN0ZXIuCisgICAgICAgIGludCBu
ZWVkZWRfY2hhcnMgPSAoQmlnaXRMZW5ndGgoKSAtIDEpICoga0hleENoYXJzUGVyQmlnaXQgKwor
ICAgICAgICBTaXplSW5IZXhDaGFycyhiaWdpdHNfW3VzZWRfZGlnaXRzXyAtIDFdKSArIDE7Cisg
ICAgICAgIGlmIChuZWVkZWRfY2hhcnMgPiBidWZmZXJfc2l6ZSkgcmV0dXJuIGZhbHNlOworICAg
ICAgICBpbnQgc3RyaW5nX2luZGV4ID0gbmVlZGVkX2NoYXJzIC0gMTsKKyAgICAgICAgYnVmZmVy
W3N0cmluZ19pbmRleC0tXSA9ICdcMCc7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXhw
b25lbnRfOyArK2kpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwga0hleENoYXJz
UGVyQmlnaXQ7ICsraikgeworICAgICAgICAgICAgICAgIGJ1ZmZlcltzdHJpbmdfaW5kZXgtLV0g
PSAnMCc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCB1c2VkX2RpZ2l0c18gLSAxOyArK2kpIHsKKyAgICAgICAgICAgIENodW5rIGN1cnJlbnRf
YmlnaXQgPSBiaWdpdHNfW2ldOworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBrSGV4
Q2hhcnNQZXJCaWdpdDsgKytqKSB7CisgICAgICAgICAgICAgICAgYnVmZmVyW3N0cmluZ19pbmRl
eC0tXSA9IEhleENoYXJPZlZhbHVlKGN1cnJlbnRfYmlnaXQgJiAweEYpOworICAgICAgICAgICAg
ICAgIGN1cnJlbnRfYmlnaXQgPj49IDQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgLy8gQW5kIGZpbmFsbHkgdGhlIGxhc3QgYmlnaXQuCisgICAgICAgIENodW5rIG1vc3Rfc2ln
bmlmaWNhbnRfYmlnaXQgPSBiaWdpdHNfW3VzZWRfZGlnaXRzXyAtIDFdOworICAgICAgICB3aGls
ZSAobW9zdF9zaWduaWZpY2FudF9iaWdpdCAhPSAwKSB7CisgICAgICAgICAgICBidWZmZXJbc3Ry
aW5nX2luZGV4LS1dID0gSGV4Q2hhck9mVmFsdWUobW9zdF9zaWduaWZpY2FudF9iaWdpdCAmIDB4
Rik7CisgICAgICAgICAgICBtb3N0X3NpZ25pZmljYW50X2JpZ2l0ID4+PSA0OworICAgICAgICB9
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAKKyAgICBCaWdudW06OkNo
dW5rIEJpZ251bTo6QmlnaXRBdChpbnQgaW5kZXgpIGNvbnN0IHsKKyAgICAgICAgaWYgKGluZGV4
ID49IEJpZ2l0TGVuZ3RoKCkpIHJldHVybiAwOworICAgICAgICBpZiAoaW5kZXggPCBleHBvbmVu
dF8pIHJldHVybiAwOworICAgICAgICByZXR1cm4gYmlnaXRzX1tpbmRleCAtIGV4cG9uZW50X107
CisgICAgfQorICAgIAorICAgIAorICAgIGludCBCaWdudW06OkNvbXBhcmUoY29uc3QgQmlnbnVt
JiBhLCBjb25zdCBCaWdudW0mIGIpIHsKKyAgICAgICAgQVNTRVJUKGEuSXNDbGFtcGVkKCkpOwor
ICAgICAgICBBU1NFUlQoYi5Jc0NsYW1wZWQoKSk7CisgICAgICAgIGludCBiaWdpdF9sZW5ndGhf
YSA9IGEuQmlnaXRMZW5ndGgoKTsKKyAgICAgICAgaW50IGJpZ2l0X2xlbmd0aF9iID0gYi5CaWdp
dExlbmd0aCgpOworICAgICAgICBpZiAoYmlnaXRfbGVuZ3RoX2EgPCBiaWdpdF9sZW5ndGhfYikg
cmV0dXJuIC0xOworICAgICAgICBpZiAoYmlnaXRfbGVuZ3RoX2EgPiBiaWdpdF9sZW5ndGhfYikg
cmV0dXJuICsxOworICAgICAgICBmb3IgKGludCBpID0gYmlnaXRfbGVuZ3RoX2EgLSAxOyBpID49
IE1pbihhLmV4cG9uZW50XywgYi5leHBvbmVudF8pOyAtLWkpIHsKKyAgICAgICAgICAgIENodW5r
IGJpZ2l0X2EgPSBhLkJpZ2l0QXQoaSk7CisgICAgICAgICAgICBDaHVuayBiaWdpdF9iID0gYi5C
aWdpdEF0KGkpOworICAgICAgICAgICAgaWYgKGJpZ2l0X2EgPCBiaWdpdF9iKSByZXR1cm4gLTE7
CisgICAgICAgICAgICBpZiAoYmlnaXRfYSA+IGJpZ2l0X2IpIHJldHVybiArMTsKKyAgICAgICAg
ICAgIC8vIE90aGVyd2lzZSB0aGV5IGFyZSBlcXVhbCB1cCB0byB0aGlzIGRpZ2l0LiBUcnkgdGhl
IG5leHQgZGlnaXQuCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAor
ICAgIAorICAgIGludCBCaWdudW06OlBsdXNDb21wYXJlKGNvbnN0IEJpZ251bSYgYSwgY29uc3Qg
QmlnbnVtJiBiLCBjb25zdCBCaWdudW0mIGMpIHsKKyAgICAgICAgQVNTRVJUKGEuSXNDbGFtcGVk
KCkpOworICAgICAgICBBU1NFUlQoYi5Jc0NsYW1wZWQoKSk7CisgICAgICAgIEFTU0VSVChjLklz
Q2xhbXBlZCgpKTsKKyAgICAgICAgaWYgKGEuQmlnaXRMZW5ndGgoKSA8IGIuQmlnaXRMZW5ndGgo
KSkgeworICAgICAgICAgICAgcmV0dXJuIFBsdXNDb21wYXJlKGIsIGEsIGMpOworICAgICAgICB9
CisgICAgICAgIGlmIChhLkJpZ2l0TGVuZ3RoKCkgKyAxIDwgYy5CaWdpdExlbmd0aCgpKSByZXR1
cm4gLTE7CisgICAgICAgIGlmIChhLkJpZ2l0TGVuZ3RoKCkgPiBjLkJpZ2l0TGVuZ3RoKCkpIHJl
dHVybiArMTsKKyAgICAgICAgLy8gVGhlIGV4cG9uZW50IGVuY29kZXMgMC1iaWdpdHMuIFNvIGlm
IHRoZXJlIGFyZSBtb3JlIDAtZGlnaXRzIGluICdhJyB0aGFuCisgICAgICAgIC8vICdiJyBoYXMg
ZGlnaXRzLCB0aGVuIHRoZSBiaWdpdC1sZW5ndGggb2YgJ2EnKydiJyBtdXN0IGJlIGVxdWFsIHRv
IHRoZSBvbmUKKyAgICAgICAgLy8gb2YgJ2EnLgorICAgICAgICBpZiAoYS5leHBvbmVudF8gPj0g
Yi5CaWdpdExlbmd0aCgpICYmIGEuQmlnaXRMZW5ndGgoKSA8IGMuQmlnaXRMZW5ndGgoKSkgewor
ICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBDaHVu
ayBib3Jyb3cgPSAwOworICAgICAgICAvLyBTdGFydGluZyBhdCBtaW5fZXhwb25lbnQgYWxsIGRp
Z2l0cyBhcmUgPT0gMC4gU28gbm8gbmVlZCB0byBjb21wYXJlIHRoZW0uCisgICAgICAgIGludCBt
aW5fZXhwb25lbnQgPSBNaW4oTWluKGEuZXhwb25lbnRfLCBiLmV4cG9uZW50XyksIGMuZXhwb25l
bnRfKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IGMuQmlnaXRMZW5ndGgoKSAtIDE7IGkgPj0gbWlu
X2V4cG9uZW50OyAtLWkpIHsKKyAgICAgICAgICAgIENodW5rIGNodW5rX2EgPSBhLkJpZ2l0QXQo
aSk7CisgICAgICAgICAgICBDaHVuayBjaHVua19iID0gYi5CaWdpdEF0KGkpOworICAgICAgICAg
ICAgQ2h1bmsgY2h1bmtfYyA9IGMuQmlnaXRBdChpKTsKKyAgICAgICAgICAgIENodW5rIHN1bSA9
IGNodW5rX2EgKyBjaHVua19iOworICAgICAgICAgICAgaWYgKHN1bSA+IGNodW5rX2MgKyBib3Jy
b3cpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKzE7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIGJvcnJvdyA9IGNodW5rX2MgKyBib3Jyb3cgLSBzdW07CisgICAgICAg
ICAgICAgICAgaWYgKGJvcnJvdyA+IDEpIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICBib3Jy
b3cgPDw9IGtCaWdpdFNpemU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGJvcnJvdyA9PSAwKSByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICAK
KyAgICAKKyAgICB2b2lkIEJpZ251bTo6Q2xhbXAoKSB7CisgICAgICAgIHdoaWxlICh1c2VkX2Rp
Z2l0c18gPiAwICYmIGJpZ2l0c19bdXNlZF9kaWdpdHNfIC0gMV0gPT0gMCkgeworICAgICAgICAg
ICAgdXNlZF9kaWdpdHNfLS07CisgICAgICAgIH0KKyAgICAgICAgaWYgKHVzZWRfZGlnaXRzXyA9
PSAwKSB7CisgICAgICAgICAgICAvLyBaZXJvLgorICAgICAgICAgICAgZXhwb25lbnRfID0gMDsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICBib29sIEJpZ251bTo6SXNDbGFtcGVk
KCkgY29uc3QgeworICAgICAgICByZXR1cm4gdXNlZF9kaWdpdHNfID09IDAgfHwgYmlnaXRzX1t1
c2VkX2RpZ2l0c18gLSAxXSAhPSAwOworICAgIH0KKyAgICAKKyAgICAKKyAgICB2b2lkIEJpZ251
bTo6WmVybygpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1c2VkX2RpZ2l0c187ICsr
aSkgeworICAgICAgICAgICAgYmlnaXRzX1tpXSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgdXNl
ZF9kaWdpdHNfID0gMDsKKyAgICAgICAgZXhwb25lbnRfID0gMDsKKyAgICB9CisgICAgCisgICAg
CisgICAgdm9pZCBCaWdudW06OkFsaWduKGNvbnN0IEJpZ251bSYgb3RoZXIpIHsKKyAgICAgICAg
aWYgKGV4cG9uZW50XyA+IG90aGVyLmV4cG9uZW50XykgeworICAgICAgICAgICAgLy8gSWYgIlgi
IHJlcHJlc2VudHMgYSAiaGlkZGVuIiBkaWdpdCAoYnkgdGhlIGV4cG9uZW50KSB0aGVuIHdlIGFy
ZSBpbiB0aGUKKyAgICAgICAgICAgIC8vIGZvbGxvd2luZyBjYXNlIChhID09IHRoaXMsIGIgPT0g
b3RoZXIpOgorICAgICAgICAgICAgLy8gYTogIGFhYWFhYVhYWFggICBvciBhOiAgIGFhYWFhWFhY
CisgICAgICAgICAgICAvLyBiOiAgICAgYmJiYmJiWCAgICAgIGI6IGJiYmJiYmJiWFgKKyAgICAg
ICAgICAgIC8vIFdlIHJlcGxhY2Ugc29tZSBvZiB0aGUgaGlkZGVuIGRpZ2l0cyAoWCkgb2YgYSB3
aXRoIDAgZGlnaXRzLgorICAgICAgICAgICAgLy8gYTogIGFhYWFhYTAwMFggICBvciBhOiAgIGFh
YWFhMFhYCisgICAgICAgICAgICBpbnQgemVyb19kaWdpdHMgPSBleHBvbmVudF8gLSBvdGhlci5l
eHBvbmVudF87CisgICAgICAgICAgICBFbnN1cmVDYXBhY2l0eSh1c2VkX2RpZ2l0c18gKyB6ZXJv
X2RpZ2l0cyk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gdXNlZF9kaWdpdHNfIC0gMTsgaSA+
PSAwOyAtLWkpIHsKKyAgICAgICAgICAgICAgICBiaWdpdHNfW2kgKyB6ZXJvX2RpZ2l0c10gPSBi
aWdpdHNfW2ldOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCB6ZXJvX2RpZ2l0czsgKytpKSB7CisgICAgICAgICAgICAgICAgYmlnaXRzX1tpXSA9IDA7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB1c2VkX2RpZ2l0c18gKz0gemVyb19kaWdpdHM7Cisg
ICAgICAgICAgICBleHBvbmVudF8gLT0gemVyb19kaWdpdHM7CisgICAgICAgICAgICBBU1NFUlQo
dXNlZF9kaWdpdHNfID49IDApOworICAgICAgICAgICAgQVNTRVJUKGV4cG9uZW50XyA+PSAwKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICB2b2lkIEJpZ251bTo6QmlnaXRzU2hp
ZnRMZWZ0KGludCBzaGlmdF9hbW91bnQpIHsKKyAgICAgICAgQVNTRVJUKHNoaWZ0X2Ftb3VudCA8
IGtCaWdpdFNpemUpOworICAgICAgICBBU1NFUlQoc2hpZnRfYW1vdW50ID49IDApOworICAgICAg
ICBDaHVuayBjYXJyeSA9IDA7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdXNlZF9kaWdp
dHNfOyArK2kpIHsKKyAgICAgICAgICAgIENodW5rIG5ld19jYXJyeSA9IGJpZ2l0c19baV0gPj4g
KGtCaWdpdFNpemUgLSBzaGlmdF9hbW91bnQpOworICAgICAgICAgICAgYmlnaXRzX1tpXSA9ICgo
YmlnaXRzX1tpXSA8PCBzaGlmdF9hbW91bnQpICsgY2FycnkpICYga0JpZ2l0TWFzazsKKyAgICAg
ICAgICAgIGNhcnJ5ID0gbmV3X2NhcnJ5OworICAgICAgICB9CisgICAgICAgIGlmIChjYXJyeSAh
PSAwKSB7CisgICAgICAgICAgICBiaWdpdHNfW3VzZWRfZGlnaXRzX10gPSBjYXJyeTsKKyAgICAg
ICAgICAgIHVzZWRfZGlnaXRzXysrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIAorICAg
IHZvaWQgQmlnbnVtOjpTdWJ0cmFjdFRpbWVzKGNvbnN0IEJpZ251bSYgb3RoZXIsIGludCBmYWN0
b3IpIHsKKyAgICAgICAgQVNTRVJUKGV4cG9uZW50XyA8PSBvdGhlci5leHBvbmVudF8pOworICAg
ICAgICBpZiAoZmFjdG9yIDwgMykgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBm
YWN0b3I7ICsraSkgeworICAgICAgICAgICAgICAgIFN1YnRyYWN0QmlnbnVtKG90aGVyKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBDaHVu
ayBib3Jyb3cgPSAwOworICAgICAgICBpbnQgZXhwb25lbnRfZGlmZiA9IG90aGVyLmV4cG9uZW50
XyAtIGV4cG9uZW50XzsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvdGhlci51c2VkX2Rp
Z2l0c187ICsraSkgeworICAgICAgICAgICAgRG91YmxlQ2h1bmsgcHJvZHVjdCA9IHN0YXRpY19j
YXN0PERvdWJsZUNodW5rPihmYWN0b3IpICogb3RoZXIuYmlnaXRzX1tpXTsKKyAgICAgICAgICAg
IERvdWJsZUNodW5rIHJlbW92ZSA9IGJvcnJvdyArIHByb2R1Y3Q7CisgICAgICAgICAgICBDaHVu
ayBkaWZmZXJlbmNlID0gYmlnaXRzX1tpICsgZXhwb25lbnRfZGlmZl0gLSAocmVtb3ZlICYga0Jp
Z2l0TWFzayk7CisgICAgICAgICAgICBiaWdpdHNfW2kgKyBleHBvbmVudF9kaWZmXSA9IGRpZmZl
cmVuY2UgJiBrQmlnaXRNYXNrOworICAgICAgICAgICAgYm9ycm93ID0gc3RhdGljX2Nhc3Q8Q2h1
bms+KChkaWZmZXJlbmNlID4+IChrQ2h1bmtTaXplIC0gMSkpICsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAocmVtb3ZlID4+IGtCaWdpdFNpemUpKTsKKyAgICAgICAg
fQorICAgICAgICBmb3IgKGludCBpID0gb3RoZXIudXNlZF9kaWdpdHNfICsgZXhwb25lbnRfZGlm
ZjsgaSA8IHVzZWRfZGlnaXRzXzsgKytpKSB7CisgICAgICAgICAgICBpZiAoYm9ycm93ID09IDAp
IHJldHVybjsKKyAgICAgICAgICAgIENodW5rIGRpZmZlcmVuY2UgPSBiaWdpdHNfW2ldIC0gYm9y
cm93OworICAgICAgICAgICAgYmlnaXRzX1tpXSA9IGRpZmZlcmVuY2UgJiBrQmlnaXRNYXNrOwor
ICAgICAgICAgICAgYm9ycm93ID0gZGlmZmVyZW5jZSA+PiAoa0NodW5rU2l6ZSAtIDEpOworICAg
ICAgICAgICAgKytpOworICAgICAgICB9CisgICAgICAgIENsYW1wKCk7CisgICAgfQorICAgIAor
ICAgIAorfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCisKK30gLy8gbmFtZXNwYWNl
IFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFh
NzUwNTgxYWE3OTcyMjllNzg4Nzk5YTJiMGIyNWI5ZmQyNDhkYjMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvYmlnbnVtLmgKQEAgLTAsMCArMSwxNDUg
QEAKKy8vIENvcHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisv
LyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAg
ICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAg
ICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
Ky8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8v
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmbmRlZiBET1VCTEVfQ09OVkVSU0lP
Tl9CSUdOVU1fSF8KKyNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05fQklHTlVNX0hfCisKKyNpbmNs
dWRlICJ1dGlscy5oIgorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIGRvdWJsZV9jb252
ZXJzaW9uIHsKKyAgICAKKyAgICBjbGFzcyBCaWdudW0geworICAgIHB1YmxpYzoKKyAgICAgICAg
Ly8gMzU4NCA9IDEyOCAqIDI4LiBXZSBjYW4gcmVwcmVzZW50IDJeMzU4NCA+IDEwXjEwMDAgYWNj
dXJhdGVseS4KKyAgICAgICAgLy8gVGhpcyBiaWdudW0gY2FuIGVuY29kZSBtdWNoIGJpZ2dlciBu
dW1iZXJzLCBzaW5jZSBpdCBjb250YWlucyBhbgorICAgICAgICAvLyBleHBvbmVudC4KKyAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBrTWF4U2lnbmlmaWNhbnRCaXRzID0gMzU4NDsKKyAgICAgICAg
CisgICAgICAgIEJpZ251bSgpOworICAgICAgICB2b2lkIEFzc2lnblVJbnQxNih1aW50MTZfdCB2
YWx1ZSk7CisgICAgICAgIHZvaWQgQXNzaWduVUludDY0KHVpbnQ2NF90IHZhbHVlKTsKKyAgICAg
ICAgdm9pZCBBc3NpZ25CaWdudW0oY29uc3QgQmlnbnVtJiBvdGhlcik7CisgICAgICAgIAorICAg
ICAgICB2b2lkIEFzc2lnbkRlY2ltYWxTdHJpbmcoVmVjdG9yPGNvbnN0IGNoYXI+IHZhbHVlKTsK
KyAgICAgICAgdm9pZCBBc3NpZ25IZXhTdHJpbmcoVmVjdG9yPGNvbnN0IGNoYXI+IHZhbHVlKTsK
KyAgICAgICAgCisgICAgICAgIHZvaWQgQXNzaWduUG93ZXJVSW50MTYodWludDE2X3QgYmFzZSwg
aW50IGV4cG9uZW50KTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgQWRkVUludDE2KHVpbnQxNl90
IG9wZXJhbmQpOworICAgICAgICB2b2lkIEFkZFVJbnQ2NCh1aW50NjRfdCBvcGVyYW5kKTsKKyAg
ICAgICAgdm9pZCBBZGRCaWdudW0oY29uc3QgQmlnbnVtJiBvdGhlcik7CisgICAgICAgIC8vIFBy
ZWNvbmRpdGlvbjogdGhpcyA+PSBvdGhlci4KKyAgICAgICAgdm9pZCBTdWJ0cmFjdEJpZ251bShj
b25zdCBCaWdudW0mIG90aGVyKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgU3F1YXJlKCk7Cisg
ICAgICAgIHZvaWQgU2hpZnRMZWZ0KGludCBzaGlmdF9hbW91bnQpOworICAgICAgICB2b2lkIE11
bHRpcGx5QnlVSW50MzIodWludDMyX3QgZmFjdG9yKTsKKyAgICAgICAgdm9pZCBNdWx0aXBseUJ5
VUludDY0KHVpbnQ2NF90IGZhY3Rvcik7CisgICAgICAgIHZvaWQgTXVsdGlwbHlCeVBvd2VyT2ZU
ZW4oaW50IGV4cG9uZW50KTsKKyAgICAgICAgdm9pZCBUaW1lczEwKCkgeyByZXR1cm4gTXVsdGlw
bHlCeVVJbnQzMigxMCk7IH0KKyAgICAgICAgLy8gUHNldWRvY29kZToKKyAgICAgICAgLy8gIGlu
dCByZXN1bHQgPSB0aGlzIC8gb3RoZXI7CisgICAgICAgIC8vICB0aGlzID0gdGhpcyAlIG90aGVy
OworICAgICAgICAvLyBJbiB0aGUgd29yc3QgY2FzZSB0aGlzIGZ1bmN0aW9uIGlzIGluIE8odGhp
cy9vdGhlcikuCisgICAgICAgIHVpbnQxNl90IERpdmlkZU1vZHVsb0ludEJpZ251bShjb25zdCBC
aWdudW0mIG90aGVyKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgVG9IZXhTdHJpbmcoY2hhciog
YnVmZmVyLCBpbnQgYnVmZmVyX3NpemUpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgc3RhdGlj
IGludCBDb21wYXJlKGNvbnN0IEJpZ251bSYgYSwgY29uc3QgQmlnbnVtJiBiKTsKKyAgICAgICAg
c3RhdGljIGJvb2wgRXF1YWwoY29uc3QgQmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIpIHsKKyAg
ICAgICAgICAgIHJldHVybiBDb21wYXJlKGEsIGIpID09IDA7CisgICAgICAgIH0KKyAgICAgICAg
c3RhdGljIGJvb2wgTGVzc0VxdWFsKGNvbnN0IEJpZ251bSYgYSwgY29uc3QgQmlnbnVtJiBiKSB7
CisgICAgICAgICAgICByZXR1cm4gQ29tcGFyZShhLCBiKSA8PSAwOworICAgICAgICB9CisgICAg
ICAgIHN0YXRpYyBib29sIExlc3MoY29uc3QgQmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIpIHsK
KyAgICAgICAgICAgIHJldHVybiBDb21wYXJlKGEsIGIpIDwgMDsKKyAgICAgICAgfQorICAgICAg
ICAvLyBSZXR1cm5zIENvbXBhcmUoYSArIGIsIGMpOworICAgICAgICBzdGF0aWMgaW50IFBsdXND
b21wYXJlKGNvbnN0IEJpZ251bSYgYSwgY29uc3QgQmlnbnVtJiBiLCBjb25zdCBCaWdudW0mIGMp
OworICAgICAgICAvLyBSZXR1cm5zIGEgKyBiID09IGMKKyAgICAgICAgc3RhdGljIGJvb2wgUGx1
c0VxdWFsKGNvbnN0IEJpZ251bSYgYSwgY29uc3QgQmlnbnVtJiBiLCBjb25zdCBCaWdudW0mIGMp
IHsKKyAgICAgICAgICAgIHJldHVybiBQbHVzQ29tcGFyZShhLCBiLCBjKSA9PSAwOworICAgICAg
ICB9CisgICAgICAgIC8vIFJldHVybnMgYSArIGIgPD0gYworICAgICAgICBzdGF0aWMgYm9vbCBQ
bHVzTGVzc0VxdWFsKGNvbnN0IEJpZ251bSYgYSwgY29uc3QgQmlnbnVtJiBiLCBjb25zdCBCaWdu
dW0mIGMpIHsKKyAgICAgICAgICAgIHJldHVybiBQbHVzQ29tcGFyZShhLCBiLCBjKSA8PSAwOwor
ICAgICAgICB9CisgICAgICAgIC8vIFJldHVybnMgYSArIGIgPCBjCisgICAgICAgIHN0YXRpYyBi
b29sIFBsdXNMZXNzKGNvbnN0IEJpZ251bSYgYSwgY29uc3QgQmlnbnVtJiBiLCBjb25zdCBCaWdu
dW0mIGMpIHsKKyAgICAgICAgICAgIHJldHVybiBQbHVzQ29tcGFyZShhLCBiLCBjKSA8IDA7Cisg
ICAgICAgIH0KKyAgICBwcml2YXRlOgorICAgICAgICB0eXBlZGVmIHVpbnQzMl90IENodW5rOwor
ICAgICAgICB0eXBlZGVmIHVpbnQ2NF90IERvdWJsZUNodW5rOworICAgICAgICAKKyAgICAgICAg
c3RhdGljIGNvbnN0IGludCBrQ2h1bmtTaXplID0gc2l6ZW9mKENodW5rKSAqIDg7CisgICAgICAg
IHN0YXRpYyBjb25zdCBpbnQga0RvdWJsZUNodW5rU2l6ZSA9IHNpemVvZihEb3VibGVDaHVuaykg
KiA4OworICAgICAgICAvLyBXaXRoIGJpZ2l0IHNpemUgb2YgMjggd2UgbG9vc2Ugc29tZSBiaXRz
LCBidXQgYSBkb3VibGUgc3RpbGwgZml0cyBlYXNpbHkKKyAgICAgICAgLy8gaW50byB0d28gY2h1
bmtzLCBhbmQgbW9yZSBpbXBvcnRhbnRseSB3ZSBjYW4gdXNlIHRoZSBDb21iYSBtdWx0aXBsaWNh
dGlvbi4KKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBrQmlnaXRTaXplID0gMjg7CisgICAgICAg
IHN0YXRpYyBjb25zdCBDaHVuayBrQmlnaXRNYXNrID0gKDEgPDwga0JpZ2l0U2l6ZSkgLSAxOwor
ICAgICAgICAvLyBFdmVyeSBpbnN0YW5jZSBhbGxvY2F0ZXMga0JpZ2l0TGVuZ3RoIGNodW5rcyBv
biB0aGUgc3RhY2suIEJpZ251bXMgY2Fubm90CisgICAgICAgIC8vIGdyb3cuIFRoZXJlIGFyZSBu
byBjaGVja3MgaWYgdGhlIHN0YWNrLWFsbG9jYXRlZCBzcGFjZSBpcyBzdWZmaWNpZW50LgorICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IGtCaWdpdENhcGFjaXR5ID0ga01heFNpZ25pZmljYW50Qml0
cyAvIGtCaWdpdFNpemU7CisgICAgICAgIAorICAgICAgICB2b2lkIEVuc3VyZUNhcGFjaXR5KGlu
dCBzaXplKSB7CisgICAgICAgICAgICBpZiAoc2l6ZSA+IGtCaWdpdENhcGFjaXR5KSB7CisgICAg
ICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICB2b2lkIEFsaWduKGNvbnN0IEJpZ251bSYgb3RoZXIpOworICAgICAgICB2b2lkIENsYW1w
KCk7CisgICAgICAgIGJvb2wgSXNDbGFtcGVkKCkgY29uc3Q7CisgICAgICAgIHZvaWQgWmVybygp
OworICAgICAgICAvLyBSZXF1aXJlcyB0aGlzIHRvIGhhdmUgZW5vdWdoIGNhcGFjaXR5IChubyB0
ZXN0cyBkb25lKS4KKyAgICAgICAgLy8gVXBkYXRlcyB1c2VkX2RpZ2l0c18gaWYgbmVjZXNzYXJ5
LgorICAgICAgICAvLyBzaGlmdF9hbW91bnQgbXVzdCBiZSA8IGtCaWdpdFNpemUuCisgICAgICAg
IHZvaWQgQmlnaXRzU2hpZnRMZWZ0KGludCBzaGlmdF9hbW91bnQpOworICAgICAgICAvLyBCaWdp
dExlbmd0aCBpbmNsdWRlcyB0aGUgImhpZGRlbiIgZGlnaXRzIGVuY29kZWQgaW4gdGhlIGV4cG9u
ZW50LgorICAgICAgICBpbnQgQmlnaXRMZW5ndGgoKSBjb25zdCB7IHJldHVybiB1c2VkX2RpZ2l0
c18gKyBleHBvbmVudF87IH0KKyAgICAgICAgQ2h1bmsgQmlnaXRBdChpbnQgaW5kZXgpIGNvbnN0
OworICAgICAgICB2b2lkIFN1YnRyYWN0VGltZXMoY29uc3QgQmlnbnVtJiBvdGhlciwgaW50IGZh
Y3Rvcik7CisgICAgICAgIAorICAgICAgICBDaHVuayBiaWdpdHNfYnVmZmVyX1trQmlnaXRDYXBh
Y2l0eV07CisgICAgICAgIC8vIEEgdmVjdG9yIGJhY2tlZCBieSBiaWdpdHNfYnVmZmVyXy4gVGhp
cyB3YXkgYWNjZXNzZXMgdG8gdGhlIGFycmF5IGFyZQorICAgICAgICAvLyBjaGVja2VkIGZvciBv
dXQtb2YtYm91bmRzIGVycm9ycy4KKyAgICAgICAgVmVjdG9yPENodW5rPiBiaWdpdHNfOworICAg
ICAgICBpbnQgdXNlZF9kaWdpdHNfOworICAgICAgICAvLyBUaGUgQmlnbnVtJ3MgdmFsdWUgZXF1
YWxzIHZhbHVlKGJpZ2l0c18pICogMl4oZXhwb25lbnRfICoga0JpZ2l0U2l6ZSkuCisgICAgICAg
IGludCBleHBvbmVudF87CisgICAgICAgIAorICAgICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oQmlnbnVtKTsKKyAgICB9OworICAgIAorfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJz
aW9uCisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgIC8vIERPVUJMRV9DT05WRVJTSU9O
X0JJR05VTV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2Nh
Y2hlZC1wb3dlcnMuY2MgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvY2FjaGVkLXBv
d2Vycy5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hOGU3MDA0N2Q5ZWUxNzUwMzgyZmI2N2Q4ZDRjODNhZDdhMWFi
ODcwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2Nh
Y2hlZC1wb3dlcnMuY2MKQEAgLTAsMCArMSwxODkgQEAKKy8vIENvcHlyaWdodCAyMDA2LTIwMDgg
dGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
Ky8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5j
bHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSAiVW51c2VkUGFyYW0uaCIKKyNpbmNsdWRlICJ1dGls
cy5oIgorI2luY2x1ZGUgImNhY2hlZC1wb3dlcnMuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK25h
bWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgc3RydWN0IENhY2hlZFBvd2Vy
IHsKKyAgICAgICAgdWludDY0X3Qgc2lnbmlmaWNhbmQ7CisgICAgICAgIGludDE2X3QgYmluYXJ5
X2V4cG9uZW50OworICAgICAgICBpbnQxNl90IGRlY2ltYWxfZXhwb25lbnQ7CisgICAgfTsKKyAg
ICAKKyAgICBzdGF0aWMgaW50IGtDYWNoZWRQb3dlcnNMZW5ndGggPSAxOworICAgIHN0YXRpYyBp
bnQga0NhY2hlZFBvd2Vyc09mZnNldCA9IDE7CisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBrRF8x
X0xPRzJfMTAgPSAwLjMwMTAyOTk5NTY2Mzk4MTE0OyAgLy8gIDEgLyBsZygxMCkKKyAgICBzdGF0
aWMgQ2FjaGVkUG93ZXIqIGtDYWNoZWRQb3dlcnMgPSAwOworICAgIAorICAgIGludCBQb3dlcnNP
ZlRlbkNhY2hlOjprRGVjaW1hbEV4cG9uZW50RGlzdGFuY2UgPSAxOworICAgIGludCBQb3dlcnNP
ZlRlbkNhY2hlOjprTWluRGVjaW1hbEV4cG9uZW50ID0gMTsKKyAgICBpbnQgUG93ZXJzT2ZUZW5D
YWNoZTo6a01heERlY2ltYWxFeHBvbmVudCA9IDE7CisgICAgCisgICAgdm9pZCBpbml0aWFsaXpl
KCkgeworICAgICAgICBzdGF0aWMgQ2FjaGVkUG93ZXIgY2FjaGVkUG93ZXJzW10gPSB7CisgICAg
ICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhmYThmZDVhMCwgMDgxYzAyODgpLCAtMTIyMCwgLTM0
OH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhiYWFlZTE3ZiwgYTIzZWJmNzYpLCAt
MTE5MywgLTM0MH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg4YjE2ZmIyMCwgMzA1
NWFjNzYpLCAtMTE2NiwgLTMzMn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhjZjQy
ODk0YSwgNWRjZTM1ZWEpLCAtMTE0MCwgLTMyNH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJU
X0MoMHg5YTZiYjBhYSwgNTU2NTNiMmQpLCAtMTExMywgLTMxNn0sCisgICAgICAgICAgICB7VUlO
VDY0XzJQQVJUX0MoMHhlNjFhY2YwMywgM2QxYTQ1ZGYpLCAtMTA4NywgLTMwOH0sCisgICAgICAg
ICAgICB7VUlOVDY0XzJQQVJUX0MoMHhhYjcwZmUxNywgYzc5YWM2Y2EpLCAtMTA2MCwgLTMwMH0s
CisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhmZjc3YjFmYywgYmViY2RjNGYpLCAtMTAz
NCwgLTI5Mn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhiZTU2OTFlZiwgNDE2YmQ2
MGMpLCAtMTAwNywgLTI4NH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg4ZGQwMWZh
ZCwgOTA3ZmZjM2MpLCAtOTgwLCAtMjc2fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygw
eGQzNTE1YzI4LCAzMTU1OWE4MyksIC05NTQsIC0yNjh9LAorICAgICAgICAgICAge1VJTlQ2NF8y
UEFSVF9DKDB4OWQ3MWFjOGYsIGFkYTZjOWI1KSwgLTkyNywgLTI2MH0sCisgICAgICAgICAgICB7
VUlOVDY0XzJQQVJUX0MoMHhlYTljMjI3NywgMjNlZThiY2IpLCAtOTAxLCAtMjUyfSwKKyAgICAg
ICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGFlY2M0OTkxLCA0MDc4NTM2ZCksIC04NzQsIC0yNDR9
LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ODIzYzEyNzksIDVkYjZjZTU3KSwgLTg0
NywgLTIzNn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhjMjEwOTQzNiwgNGRmYjU2
MzcpLCAtODIxLCAtMjI4fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDkwOTZlYTZm
LCAzODQ4OTg0ZiksIC03OTQsIC0yMjB9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4
ZDc3NDg1Y2IsIDI1ODIzYWM3KSwgLTc2OCwgLTIxMn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQ
QVJUX0MoMHhhMDg2Y2ZjZCwgOTdiZjk3ZjQpLCAtNzQxLCAtMjA0fSwKKyAgICAgICAgICAgIHtV
SU5UNjRfMlBBUlRfQygweGVmMzQwYTk4LCAxNzJhYWNlNSksIC03MTUsIC0xOTZ9LAorICAgICAg
ICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YjIzODY3ZmIsIDJhMzViMjhlKSwgLTY4OCwgLTE4OH0s
CisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg4NGM4ZDRkZiwgZDJjNjNmM2IpLCAtNjYx
LCAtMTgwfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGM1ZGQ0NDI3LCAxYWQzY2Ri
YSksIC02MzUsIC0xNzJ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4OTM2YjlmY2Us
IGJiMjVjOTk2KSwgLTYwOCwgLTE2NH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhk
YmFjNmMyNCwgN2Q2MmE1ODQpLCAtNTgyLCAtMTU2fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBB
UlRfQygweGEzYWI2NjU4LCAwZDVmZGFmNiksIC01NTUsIC0xNDh9LAorICAgICAgICAgICAge1VJ
TlQ2NF8yUEFSVF9DKDB4ZjNlMmY4OTMsIGRlYzNmMTI2KSwgLTUyOSwgLTE0MH0sCisgICAgICAg
ICAgICB7VUlOVDY0XzJQQVJUX0MoMHhiNWI1YWRhOCwgYWFmZjgwYjgpLCAtNTAyLCAtMTMyfSwK
KyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDg3NjI1ZjA1LCA2YzdjNGE4YiksIC00NzUs
IC0xMjR9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YzliY2ZmNjAsIDM0YzEzMDUz
KSwgLTQ0OSwgLTExNn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg5NjRlODU4Yywg
OTFiYTI2NTUpLCAtNDIyLCAtMTA4fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGRm
Zjk3NzI0LCA3MDI5N2ViZCksIC0zOTYsIC0xMDB9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFS
VF9DKDB4YTZkZmJkOWYsIGI4ZTViODhmKSwgLTM2OSwgLTkyfSwKKyAgICAgICAgICAgIHtVSU5U
NjRfMlBBUlRfQygweGY4YTk1ZmNmLCA4ODc0N2Q5NCksIC0zNDMsIC04NH0sCisgICAgICAgICAg
ICB7VUlOVDY0XzJQQVJUX0MoMHhiOTQ0NzA5MywgOGZhODliY2YpLCAtMzE2LCAtNzZ9LAorICAg
ICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4OGEwOGYwZjgsIGJmMGYxNTZiKSwgLTI4OSwgLTY4
fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGNkYjAyNTU1LCA2NTMxMzFiNiksIC0y
NjMsIC02MH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg5OTNmZTJjNiwgZDA3Yjdm
YWMpLCAtMjM2LCAtNTJ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZTQ1YzEwYzQs
IDJhMmIzYjA2KSwgLTIxMCwgLTQ0fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGFh
MjQyNDk5LCA2OTczOTJkMyksIC0xODMsIC0zNn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJU
X0MoMHhmZDg3YjVmMiwgODMwMGNhMGUpLCAtMTU3LCAtMjh9LAorICAgICAgICAgICAge1VJTlQ2
NF8yUEFSVF9DKDB4YmNlNTA4NjQsIDkyMTExYWViKSwgLTEzMCwgLTIwfSwKKyAgICAgICAgICAg
IHtVSU5UNjRfMlBBUlRfQygweDhjYmNjYzA5LCA2ZjUwODhjYyksIC0xMDMsIC0xMn0sCisgICAg
ICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhkMWI3MTc1OCwgZTIxOTY1MmMpLCAtNzcsIC00fSwK
KyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDljNDAwMDAwLCAwMDAwMDAwMCksIC01MCwg
NH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhlOGQ0YTUxMCwgMDAwMDAwMDApLCAt
MjQsIDEyfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGFkNzhlYmM1LCBhYzYyMDAw
MCksIDMsIDIwfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDgxM2YzOTc4LCBmODk0
MDk4NCksIDMwLCAyOH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhjMDk3Y2U3Yiwg
YzkwNzE1YjMpLCA1NiwgMzZ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4OGY3ZTMy
Y2UsIDdiZWE1YzcwKSwgODMsIDQ0fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGQ1
ZDIzOGE0LCBhYmU5ODA2OCksIDEwOSwgNTJ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9D
KDB4OWY0ZjI3MjYsIDE3OWEyMjQ1KSwgMTM2LCA2MH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQ
QVJUX0MoMHhlZDYzYTIzMSwgZDRjNGZiMjcpLCAxNjIsIDY4fSwKKyAgICAgICAgICAgIHtVSU5U
NjRfMlBBUlRfQygweGIwZGU2NTM4LCA4Y2M4YWRhOCksIDE4OSwgNzZ9LAorICAgICAgICAgICAg
e1VJTlQ2NF8yUEFSVF9DKDB4ODNjNzA4OGUsIDFhYWI2NWRiKSwgMjE2LCA4NH0sCisgICAgICAg
ICAgICB7VUlOVDY0XzJQQVJUX0MoMHhjNDVkMWRmOSwgNDI3MTFkOWEpLCAyNDIsIDkyfSwKKyAg
ICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDkyNGQ2OTJjLCBhNjFiZTc1OCksIDI2OSwgMTAw
fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGRhMDFlZTY0LCAxYTcwOGRlYSksIDI5
NSwgMTA4fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGEyNmRhMzk5LCA5YWVmNzc0
YSksIDMyMiwgMTE2fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGYyMDk3ODdiLCBi
NDdkNmI4NSksIDM0OCwgMTI0fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGI0NTRl
NGExLCA3OWRkMTg3NyksIDM3NSwgMTMyfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygw
eDg2NWI4NjkyLCA1YjliYzVjMiksIDQwMiwgMTQwfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBB
UlRfQygweGM4MzU1M2M1LCBjODk2NWQzZCksIDQyOCwgMTQ4fSwKKyAgICAgICAgICAgIHtVSU5U
NjRfMlBBUlRfQygweDk1MmFiNDVjLCBmYTk3YTBiMyksIDQ1NSwgMTU2fSwKKyAgICAgICAgICAg
IHtVSU5UNjRfMlBBUlRfQygweGRlNDY5ZmJkLCA5OWEwNWZlMyksIDQ4MSwgMTY0fSwKKyAgICAg
ICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGE1OWJjMjM0LCBkYjM5OGMyNSksIDUwOCwgMTcyfSwK
KyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGY2YzY5YTcyLCBhMzk4OWY1YyksIDUzNCwg
MTgwfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGI3ZGNiZjUzLCA1NGU5YmVjZSks
IDU2MSwgMTg4fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDg4ZmNmMzE3LCBmMjIy
NDFlMiksIDU4OCwgMTk2fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGNjMjBjZTli
LCBkMzVjNzhhNSksIDYxNCwgMjA0fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDk4
MTY1YWYzLCA3YjIxNTNkZiksIDY0MSwgMjEyfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRf
QygweGUyYTBiNWRjLCA5NzFmMzAzYSksIDY2NywgMjIwfSwKKyAgICAgICAgICAgIHtVSU5UNjRf
MlBBUlRfQygweGE4ZDlkMTUzLCA1Y2UzYjM5NiksIDY5NCwgMjI4fSwKKyAgICAgICAgICAgIHtV
SU5UNjRfMlBBUlRfQygweGZiOWI3Y2Q5LCBhNGE3NDQzYyksIDcyMCwgMjM2fSwKKyAgICAgICAg
ICAgIHtVSU5UNjRfMlBBUlRfQygweGJiNzY0YzRjLCBhN2E0NDQxMCksIDc0NywgMjQ0fSwKKyAg
ICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDhiYWI4ZWVmLCBiNjQwOWMxYSksIDc3NCwgMjUy
fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGQwMWZlZjEwLCBhNjU3ODQyYyksIDgw
MCwgMjYwfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDliMTBhNGU1LCBlOTkxMzEy
OSksIDgyNywgMjY4fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGU3MTA5YmZiLCBh
MTljMGM5ZCksIDg1MywgMjc2fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGFjMjgy
MGQ5LCA2MjNiZjQyOSksIDg4MCwgMjg0fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygw
eDgwNDQ0YjVlLCA3YWE3Y2Y4NSksIDkwNywgMjkyfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBB
UlRfQygweGJmMjFlNDQwLCAwM2FjZGQyZCksIDkzMywgMzAwfSwKKyAgICAgICAgICAgIHtVSU5U
NjRfMlBBUlRfQygweDhlNjc5YzJmLCA1ZTQ0ZmY4ZiksIDk2MCwgMzA4fSwKKyAgICAgICAgICAg
IHtVSU5UNjRfMlBBUlRfQygweGQ0MzMxNzlkLCA5YzhjYjg0MSksIDk4NiwgMzE2fSwKKyAgICAg
ICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDllMTlkYjkyLCBiNGUzMWJhOSksIDEwMTMsIDMyNH0s
CisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhlYjk2YmY2ZSwgYmFkZjc3ZDkpLCAxMDM5
LCAzMzJ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YWY4NzAyM2IsIDliZjBlZTZi
KSwgMTA2NiwgMzQwfSwKKyAgICAgICAgfTsKKyAgICAgICAga0NhY2hlZFBvd2VycyA9IGNhY2hl
ZFBvd2VyczsKKyAgICAgICAga0NhY2hlZFBvd2Vyc0xlbmd0aCA9IEFSUkFZX1NJWkUoY2FjaGVk
UG93ZXJzKTsKKyAgICAgICAga0NhY2hlZFBvd2Vyc09mZnNldCA9IC1jYWNoZWRQb3dlcnNbMF0u
ZGVjaW1hbF9leHBvbmVudDsKKyAgICAgICAgUG93ZXJzT2ZUZW5DYWNoZTo6a0RlY2ltYWxFeHBv
bmVudERpc3RhbmNlID0ga0NhY2hlZFBvd2Vyc1sxXS5kZWNpbWFsX2V4cG9uZW50IC0ga0NhY2hl
ZFBvd2Vyc1swXS5kZWNpbWFsX2V4cG9uZW50OworICAgICAgICBQb3dlcnNPZlRlbkNhY2hlOjpr
TWluRGVjaW1hbEV4cG9uZW50ID0ga0NhY2hlZFBvd2Vyc1swXS5kZWNpbWFsX2V4cG9uZW50Owor
ICAgICAgICBQb3dlcnNPZlRlbkNhY2hlOjprTWF4RGVjaW1hbEV4cG9uZW50ID0ga0NhY2hlZFBv
d2Vyc1trQ2FjaGVkUG93ZXJzTGVuZ3RoIC0gMV0uZGVjaW1hbF9leHBvbmVudDsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBQb3dlcnNPZlRlbkNhY2hlOjpHZXRDYWNoZWRQb3dlckZvckJpbmFyeUV4
cG9uZW50UmFuZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IG1pbl9leHBvbmVudCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWF4X2V4
cG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIERpeUZwKiBwb3dlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGRlY2ltYWxfZXhwb25l
bnQpIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKG1heF9leHBvbmVudCk7CisgICAgICAgIGludCBr
USA9IERpeUZwOjprU2lnbmlmaWNhbmRTaXplOworICAgICAgICBkb3VibGUgayA9IGNlaWwoKG1p
bl9leHBvbmVudCArIGtRIC0gMSkgKiBrRF8xX0xPRzJfMTApOworICAgICAgICBpbnQgZm9vID0g
a0NhY2hlZFBvd2Vyc09mZnNldDsKKyAgICAgICAgaW50IGluZGV4ID0KKyAgICAgICAgKGZvbyAr
IHN0YXRpY19jYXN0PGludD4oaykgLSAxKSAvIGtEZWNpbWFsRXhwb25lbnREaXN0YW5jZSArIDE7
CisgICAgICAgIEFTU0VSVCgwIDw9IGluZGV4ICYmIGluZGV4IDwga0NhY2hlZFBvd2Vyc0xlbmd0
aCk7CisgICAgICAgIENhY2hlZFBvd2VyIGNhY2hlZF9wb3dlciA9IGtDYWNoZWRQb3dlcnNbaW5k
ZXhdOworICAgICAgICBBU1NFUlQobWluX2V4cG9uZW50IDw9IGNhY2hlZF9wb3dlci5iaW5hcnlf
ZXhwb25lbnQpOworICAgICAgICBBU1NFUlQoY2FjaGVkX3Bvd2VyLmJpbmFyeV9leHBvbmVudCA8
PSBtYXhfZXhwb25lbnQpOworICAgICAgICAqZGVjaW1hbF9leHBvbmVudCA9IGNhY2hlZF9wb3dl
ci5kZWNpbWFsX2V4cG9uZW50OworICAgICAgICAqcG93ZXIgPSBEaXlGcChjYWNoZWRfcG93ZXIu
c2lnbmlmaWNhbmQsIGNhY2hlZF9wb3dlci5iaW5hcnlfZXhwb25lbnQpOworICAgIH0KKyAgICAK
KyAgICAKKyAgICB2b2lkIFBvd2Vyc09mVGVuQ2FjaGU6OkdldENhY2hlZFBvd2VyRm9yRGVjaW1h
bEV4cG9uZW50KGludCByZXF1ZXN0ZWRfZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXlGcCogcG93ZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQqIGZvdW5kX2V4cG9uZW50KSB7CisgICAgICAgIEFTU0VSVChrTWluRGVjaW1hbEV4cG9uZW50
IDw9IHJlcXVlc3RlZF9leHBvbmVudCk7CisgICAgICAgIEFTU0VSVChyZXF1ZXN0ZWRfZXhwb25l
bnQgPCBrTWF4RGVjaW1hbEV4cG9uZW50ICsga0RlY2ltYWxFeHBvbmVudERpc3RhbmNlKTsKKyAg
ICAgICAgaW50IGluZGV4ID0KKyAgICAgICAgKHJlcXVlc3RlZF9leHBvbmVudCArIGtDYWNoZWRQ
b3dlcnNPZmZzZXQpIC8ga0RlY2ltYWxFeHBvbmVudERpc3RhbmNlOworICAgICAgICBDYWNoZWRQ
b3dlciBjYWNoZWRfcG93ZXIgPSBrQ2FjaGVkUG93ZXJzW2luZGV4XTsKKyAgICAgICAgKnBvd2Vy
ID0gRGl5RnAoY2FjaGVkX3Bvd2VyLnNpZ25pZmljYW5kLCBjYWNoZWRfcG93ZXIuYmluYXJ5X2V4
cG9uZW50KTsKKyAgICAgICAgKmZvdW5kX2V4cG9uZW50ID0gY2FjaGVkX3Bvd2VyLmRlY2ltYWxf
ZXhwb25lbnQ7CisgICAgICAgIEFTU0VSVCgqZm91bmRfZXhwb25lbnQgPD0gcmVxdWVzdGVkX2V4
cG9uZW50KTsKKyAgICAgICAgQVNTRVJUKHJlcXVlc3RlZF9leHBvbmVudCA8ICpmb3VuZF9leHBv
bmVudCArIGtEZWNpbWFsRXhwb25lbnREaXN0YW5jZSk7CisgICAgfQorICAgIAorfSAgLy8gbmFt
ZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2NhY2hlZC1wb3dlcnMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2Jj
MDRkNDNkNjhjYzA4NjBhMjJiMjg3ODZkMzE3NGM4ZDI2Y2IzMwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmgKQEAgLTAsMCAr
MSw3MiBAQAorLy8gQ29weXJpZ2h0IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0Ogor
Ly8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwor
Ly8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisv
LyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisv
LyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWZuZGVmIERPVUJMRV9DT05W
RVJTSU9OX0NBQ0hFRF9QT1dFUlNfSF8KKyNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05fQ0FDSEVE
X1BPV0VSU19IXworCisjaW5jbHVkZSAiZGl5LWZwLmgiCisKK25hbWVzcGFjZSBXVEYgeworCitu
YW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIGNsYXNzIFBvd2Vyc09mVGVu
Q2FjaGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgCisgICAgICAgIC8vIE5vdCBhbGwgcG93ZXJz
IG9mIHRlbiBhcmUgY2FjaGVkLiBUaGUgZGVjaW1hbCBleHBvbmVudCBvZiB0d28gbmVpZ2hib3Jp
bmcKKyAgICAgICAgLy8gY2FjaGVkIG51bWJlcnMgd2lsbCBkaWZmZXIgYnkga0RlY2ltYWxFeHBv
bmVudERpc3RhbmNlLgorICAgICAgICBzdGF0aWMgaW50IGtEZWNpbWFsRXhwb25lbnREaXN0YW5j
ZTsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBpbnQga01pbkRlY2ltYWxFeHBvbmVudDsKKyAg
ICAgICAgc3RhdGljIGludCBrTWF4RGVjaW1hbEV4cG9uZW50OworICAgICAgICAKKyAgICAgICAg
Ly8gUmV0dXJucyBhIGNhY2hlZCBwb3dlci1vZi10ZW4gd2l0aCBhIGJpbmFyeSBleHBvbmVudCBp
biB0aGUgcmFuZ2UKKyAgICAgICAgLy8gW21pbl9leHBvbmVudDsgbWF4X2V4cG9uZW50XSAoYm91
bmRhcmllcyBpbmNsdWRlZCkuCisgICAgICAgIHN0YXRpYyB2b2lkIEdldENhY2hlZFBvd2VyRm9y
QmluYXJ5RXhwb25lbnRSYW5nZShpbnQgbWluX2V4cG9uZW50LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1heF9leHBvbmVudCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IERpeUZwKiBwb3dlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCogZGVjaW1hbF9leHBvbmVudCk7CisgICAgICAgIAorICAgICAg
ICAvLyBSZXR1cm5zIGEgY2FjaGVkIHBvd2VyIG9mIHRlbiB4IH49IDEwXmsgc3VjaCB0aGF0Cisg
ICAgICAgIC8vICAgayA8PSBkZWNpbWFsX2V4cG9uZW50IDwgayArIGtDYWNoZWRQb3dlcnNEZWNp
bWFsRGlzdGFuY2UuCisgICAgICAgIC8vIFRoZSBnaXZlbiBkZWNpbWFsX2V4cG9uZW50IG11c3Qg
c2F0aXNmeQorICAgICAgICAvLyAgIGtNaW5EZWNpbWFsRXhwb25lbnQgPD0gcmVxdWVzdGVkX2V4
cG9uZW50LCBhbmQKKyAgICAgICAgLy8gICByZXF1ZXN0ZWRfZXhwb25lbnQgPCBrTWF4RGVjaW1h
bEV4cG9uZW50ICsga0RlY2ltYWxFeHBvbmVudERpc3RhbmNlLgorICAgICAgICBzdGF0aWMgdm9p
ZCBHZXRDYWNoZWRQb3dlckZvckRlY2ltYWxFeHBvbmVudChpbnQgcmVxdWVzdGVkX2V4cG9uZW50
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
aXlGcCogcG93ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCogZm91bmRfZXhwb25lbnQpOworICAgIH07CisgICAgCisgICAgLy8gSW5p
dGlhbGl6ZXMgdGhlIHRhYmxlIG9mIGNhY2hlZCBwb3dlcnMgdXNlZCBieSB0aGUgZHRvYSBhbGdv
cml0aG0uCisgICAgLy8gVGhpcyBuZWVkcyB0byBiZSBjYWxsZWQgd2hlbiBKU0MgaXMgYmVpbmcg
aW5pdGlhbGl6ZWQuCisgICAgdm9pZCBpbml0aWFsaXplKCk7CisgICAgCit9ICAvLyBuYW1lc3Bh
Y2UgZG91YmxlX2NvbnZlcnNpb24KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAgLy8g
RE9VQkxFX0NPTlZFUlNJT05fQ0FDSEVEX1BPV0VSU19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2RpeS1mcC5jYyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvZHRvYS9kaXktZnAuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2NhZDVkNDNjNWY2Mzk2YWU5NDFkYWQzOGE0
ZWIwZWRhYzI1NTlmMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvZHRvYS9kaXktZnAuY2MKQEAgLTAsMCArMSw2MSBAQAorLy8gQ29weXJpZ2h0IDIwMTAgdGhl
IFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
Ly8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
Ky8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8v
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCisKKyNpbmNsdWRlICJkaXktZnAuaCIKKyNpbmNsdWRlICJ1dGlscy5oIgorCituYW1l
c3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKKyAgICAKKyAgICB2
b2lkIERpeUZwOjpNdWx0aXBseShjb25zdCBEaXlGcCYgb3RoZXIpIHsKKyAgICAgICAgLy8gU2lt
cGx5ICJlbXVsYXRlcyIgYSAxMjggYml0IG11bHRpcGxpY2F0aW9uLgorICAgICAgICAvLyBIb3dl
dmVyOiB0aGUgcmVzdWx0aW5nIG51bWJlciBvbmx5IGNvbnRhaW5zIDY0IGJpdHMuIFRoZSBsZWFz
dAorICAgICAgICAvLyBzaWduaWZpY2FudCA2NCBiaXRzIGFyZSBvbmx5IHVzZWQgZm9yIHJvdW5k
aW5nIHRoZSBtb3N0IHNpZ25pZmljYW50IDY0CisgICAgICAgIC8vIGJpdHMuCisgICAgICAgIGNv
bnN0IHVpbnQ2NF90IGtNMzIgPSAweEZGRkZGRkZGVTsKKyAgICAgICAgdWludDY0X3QgYSA9IGZf
ID4+IDMyOworICAgICAgICB1aW50NjRfdCBiID0gZl8gJiBrTTMyOworICAgICAgICB1aW50NjRf
dCBjID0gb3RoZXIuZl8gPj4gMzI7CisgICAgICAgIHVpbnQ2NF90IGQgPSBvdGhlci5mXyAmIGtN
MzI7CisgICAgICAgIHVpbnQ2NF90IGFjID0gYSAqIGM7CisgICAgICAgIHVpbnQ2NF90IGJjID0g
YiAqIGM7CisgICAgICAgIHVpbnQ2NF90IGFkID0gYSAqIGQ7CisgICAgICAgIHVpbnQ2NF90IGJk
ID0gYiAqIGQ7CisgICAgICAgIHVpbnQ2NF90IHRtcCA9IChiZCA+PiAzMikgKyAoYWQgJiBrTTMy
KSArIChiYyAmIGtNMzIpOworICAgICAgICAvLyBCeSBhZGRpbmcgMVUgPDwgMzEgdG8gdG1wIHdl
IHJvdW5kIHRoZSBmaW5hbCByZXN1bHQuCisgICAgICAgIC8vIEhhbGZ3YXkgY2FzZXMgd2lsbCBi
ZSByb3VuZCB1cC4KKyAgICAgICAgdG1wICs9IDFVIDw8IDMxOworICAgICAgICB1aW50NjRfdCBy
ZXN1bHRfZiA9IGFjICsgKGFkID4+IDMyKSArIChiYyA+PiAzMikgKyAodG1wID4+IDMyKTsKKyAg
ICAgICAgZV8gKz0gb3RoZXIuZV8gKyA2NDsKKyAgICAgICAgZl8gPSByZXN1bHRfZjsKKyAgICB9
CisgICAgCit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZGl5LWZw
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZGl5LWZwLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZTg0MzEwMGE4MmFhMzRhNjI4ZGNlZThjMjcxMWY5YWM1MGVmOWU2OQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kaXktZnAuaApAQCAtMCwwICsxLDEy
MiBAQAorLy8gQ29weXJpZ2h0IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8K
Ky8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8g
ICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAg
ICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
Ly8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWZuZGVmIERPVUJMRV9DT05WRVJT
SU9OX0RJWV9GUF9IXworI2RlZmluZSBET1VCTEVfQ09OVkVSU0lPTl9ESVlfRlBfSF8KKworI2lu
Y2x1ZGUgInV0aWxzLmgiCisKK25hbWVzcGFjZSBXVEYgeworCituYW1lc3BhY2UgZG91YmxlX2Nv
bnZlcnNpb24geworICAgIAorICAgIC8vIFRoaXMgIkRvIEl0IFlvdXJzZWxmIEZsb2F0aW5nIFBv
aW50IiBjbGFzcyBpbXBsZW1lbnRzIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyCisgICAgLy8gd2l0
aCBhIHVpbnQ2NCBzaWduaWZpY2FuZCBhbmQgYW4gaW50IGV4cG9uZW50LiBOb3JtYWxpemVkIERp
eUZwIG51bWJlcnMgd2lsbAorICAgIC8vIGhhdmUgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IG9m
IHRoZSBzaWduaWZpY2FuZCBzZXQuCisgICAgLy8gTXVsdGlwbGljYXRpb24gYW5kIFN1YnRyYWN0
aW9uIGRvIG5vdCBub3JtYWxpemUgdGhlaXIgcmVzdWx0cy4KKyAgICAvLyBEaXlGcCBhcmUgbm90
IGRlc2lnbmVkIHRvIGNvbnRhaW4gc3BlY2lhbCBkb3VibGVzIChOYU4gYW5kIEluZmluaXR5KS4K
KyAgICBjbGFzcyBEaXlGcCB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgY29uc3QgaW50
IGtTaWduaWZpY2FuZFNpemUgPSA2NDsKKyAgICAgICAgCisgICAgICAgIERpeUZwKCkgOiBmXygw
KSwgZV8oMCkge30KKyAgICAgICAgRGl5RnAodWludDY0X3QgZiwgaW50IGUpIDogZl8oZiksIGVf
KGUpIHt9CisgICAgICAgIAorICAgICAgICAvLyB0aGlzID0gdGhpcyAtIG90aGVyLgorICAgICAg
ICAvLyBUaGUgZXhwb25lbnRzIG9mIGJvdGggbnVtYmVycyBtdXN0IGJlIHRoZSBzYW1lIGFuZCB0
aGUgc2lnbmlmaWNhbmQgb2YgdGhpcworICAgICAgICAvLyBtdXN0IGJlIGJpZ2dlciB0aGFuIHRo
ZSBzaWduaWZpY2FuZCBvZiBvdGhlci4KKyAgICAgICAgLy8gVGhlIHJlc3VsdCB3aWxsIG5vdCBi
ZSBub3JtYWxpemVkLgorICAgICAgICB2b2lkIFN1YnRyYWN0KGNvbnN0IERpeUZwJiBvdGhlcikg
eworICAgICAgICAgICAgQVNTRVJUKGVfID09IG90aGVyLmVfKTsKKyAgICAgICAgICAgIEFTU0VS
VChmXyA+PSBvdGhlci5mXyk7CisgICAgICAgICAgICBmXyAtPSBvdGhlci5mXzsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJucyBhIC0gYi4KKyAgICAgICAgLy8gVGhlIGV4
cG9uZW50cyBvZiBib3RoIG51bWJlcnMgbXVzdCBiZSB0aGUgc2FtZSBhbmQgdGhpcyBtdXN0IGJl
IGJpZ2dlcgorICAgICAgICAvLyB0aGFuIG90aGVyLiBUaGUgcmVzdWx0IHdpbGwgbm90IGJlIG5v
cm1hbGl6ZWQuCisgICAgICAgIHN0YXRpYyBEaXlGcCBNaW51cyhjb25zdCBEaXlGcCYgYSwgY29u
c3QgRGl5RnAmIGIpIHsKKyAgICAgICAgICAgIERpeUZwIHJlc3VsdCA9IGE7CisgICAgICAgICAg
ICByZXN1bHQuU3VidHJhY3QoYik7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICAKKyAgICAgICAgLy8gdGhpcyA9IHRoaXMgKiBvdGhlci4K
KyAgICAgICAgdm9pZCBNdWx0aXBseShjb25zdCBEaXlGcCYgb3RoZXIpOworICAgICAgICAKKyAg
ICAgICAgLy8gcmV0dXJucyBhICogYjsKKyAgICAgICAgc3RhdGljIERpeUZwIFRpbWVzKGNvbnN0
IERpeUZwJiBhLCBjb25zdCBEaXlGcCYgYikgeworICAgICAgICAgICAgRGl5RnAgcmVzdWx0ID0g
YTsKKyAgICAgICAgICAgIHJlc3VsdC5NdWx0aXBseShiKTsKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgTm9ybWFsaXplKCkgewor
ICAgICAgICAgICAgQVNTRVJUKGZfICE9IDApOworICAgICAgICAgICAgdWludDY0X3QgZiA9IGZf
OworICAgICAgICAgICAgaW50IGUgPSBlXzsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8g
VGhpcyBtZXRob2QgaXMgbWFpbmx5IGNhbGxlZCBmb3Igbm9ybWFsaXppbmcgYm91bmRhcmllcy4g
SW4gZ2VuZXJhbAorICAgICAgICAgICAgLy8gYm91bmRhcmllcyBuZWVkIHRvIGJlIHNoaWZ0ZWQg
YnkgMTAgYml0cy4gV2UgdGh1cyBvcHRpbWl6ZSBmb3IgdGhpcyBjYXNlLgorICAgICAgICAgICAg
Y29uc3QgdWludDY0X3QgazEwTVNCaXRzID0gVUlOVDY0XzJQQVJUX0MoMHhGRkMwMDAwMCwgMDAw
MDAwMDApOworICAgICAgICAgICAgd2hpbGUgKChmICYgazEwTVNCaXRzKSA9PSAwKSB7CisgICAg
ICAgICAgICAgICAgZiA8PD0gMTA7CisgICAgICAgICAgICAgICAgZSAtPSAxMDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHdoaWxlICgoZiAmIGtVaW50NjRNU0IpID09IDApIHsKKyAgICAg
ICAgICAgICAgICBmIDw8PSAxOworICAgICAgICAgICAgICAgIGUtLTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGZfID0gZjsKKyAgICAgICAgICAgIGVfID0gZTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgc3RhdGljIERpeUZwIE5vcm1hbGl6ZShjb25zdCBEaXlGcCYgYSkgewor
ICAgICAgICAgICAgRGl5RnAgcmVzdWx0ID0gYTsKKyAgICAgICAgICAgIHJlc3VsdC5Ob3JtYWxp
emUoKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHVpbnQ2NF90IGYoKSBjb25zdCB7IHJldHVybiBmXzsgfQorICAgICAgICBpbnQgZSgp
IGNvbnN0IHsgcmV0dXJuIGVfOyB9CisgICAgICAgIAorICAgICAgICB2b2lkIHNldF9mKHVpbnQ2
NF90IG5ld192YWx1ZSkgeyBmXyA9IG5ld192YWx1ZTsgfQorICAgICAgICB2b2lkIHNldF9lKGlu
dCBuZXdfdmFsdWUpIHsgZV8gPSBuZXdfdmFsdWU7IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToK
KyAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGtVaW50NjRNU0IgPSBVSU5UNjRfMlBBUlRf
QygweDgwMDAwMDAwLCAwMDAwMDAwMCk7CisgICAgICAgIAorICAgICAgICB1aW50NjRfdCBmXzsK
KyAgICAgICAgaW50IGVfOworICAgIH07CisgICAgCit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2Nv
bnZlcnNpb24KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAgLy8gRE9VQkxFX0NPTlZF
UlNJT05fRElZX0ZQX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0
b2EvZG91YmxlLWNvbnZlcnNpb24uY2MgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2Ev
ZG91YmxlLWNvbnZlcnNpb24uY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWYxODgyNTE1MzRmYzBlM2M2OTFmMDM5
NWY5M2I0NGQ2YTI4ZGM2YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5jYwpAQCAtMCwwICsxLDg3MyBAQAorLy8gQ29w
eXJpZ2h0IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xh
aW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
CisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
Ky8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8bWF0
aC5oPgorCisjaW5jbHVkZSAiZG91YmxlLWNvbnZlcnNpb24uaCIKKworI2luY2x1ZGUgImJpZ251
bS1kdG9hLmgiCisjaW5jbHVkZSAiZG91YmxlLmgiCisjaW5jbHVkZSAiZmFzdC1kdG9hLmgiCisj
aW5jbHVkZSAiZml4ZWQtZHRvYS5oIgorI2luY2x1ZGUgInN0cnRvZC5oIgorI2luY2x1ZGUgInV0
aWxzLmgiCisKK25hbWVzcGFjZSBXVEYgeworCituYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24g
eworICAgIAorICAgIGNvbnN0IERvdWJsZVRvU3RyaW5nQ29udmVydGVyJiBEb3VibGVUb1N0cmlu
Z0NvbnZlcnRlcjo6RWNtYVNjcmlwdENvbnZlcnRlcigpIHsKKyAgICAgICAgaW50IGZsYWdzID0g
VU5JUVVFX1pFUk8gfCBFTUlUX1BPU0lUSVZFX0VYUE9ORU5UX1NJR047CisgICAgICAgIHN0YXRp
YyBEb3VibGVUb1N0cmluZ0NvbnZlcnRlciBjb252ZXJ0ZXIoZmxhZ3MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZmluaXR5IiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTmFOIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZScsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTYsIDIxLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYsIDApOworICAgICAgICBy
ZXR1cm4gY29udmVydGVyOworICAgIH0KKyAgICAKKyAgICAKKyAgICBib29sIERvdWJsZVRvU3Ry
aW5nQ29udmVydGVyOjpIYW5kbGVTcGVjaWFsVmFsdWVzKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHZhbHVlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVpbGRl
ciogcmVzdWx0X2J1aWxkZXIpIGNvbnN0IHsKKyAgICAgICAgRG91YmxlIGRvdWJsZV9pbnNwZWN0
KHZhbHVlKTsKKyAgICAgICAgaWYgKGRvdWJsZV9pbnNwZWN0LklzSW5maW5pdGUoKSkgeworICAg
ICAgICAgICAgaWYgKGluZmluaXR5X3N5bWJvbF8gPT0gTlVMTCkgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgaWYgKHZhbHVlIDwgMCkgeworICAgICAgICAgICAgICAgIHJlc3VsdF9idWlsZGVy
LT5BZGRDaGFyYWN0ZXIoJy0nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlc3VsdF9i
dWlsZGVyLT5BZGRTdHJpbmcoaW5maW5pdHlfc3ltYm9sXyk7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZG91YmxlX2luc3BlY3QuSXNOYW4oKSkgewor
ICAgICAgICAgICAgaWYgKG5hbl9zeW1ib2xfID09IE5VTEwpIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRTdHJpbmcobmFuX3N5bWJvbF8pOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICAKKyAgICAKKyAgICB2b2lkIERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpDcmVhdGVFeHBv
bmVudGlhbFJlcHJlc2VudGF0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZGVjaW1hbF9kaWdp
dHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV4cG9uZW50LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgU3RyaW5nQnVpbGRlciogcmVzdWx0X2J1aWxkZXIpIGNvbnN0IHsKKyAgICAgICAgQVNTRVJU
KGxlbmd0aCAhPSAwKTsKKyAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcihkZWNp
bWFsX2RpZ2l0c1swXSk7CisgICAgICAgIGlmIChsZW5ndGggIT0gMSkgeworICAgICAgICAgICAg
cmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcignLicpOworICAgICAgICAgICAgcmVzdWx0X2J1
aWxkZXItPkFkZFN1YnN0cmluZygmZGVjaW1hbF9kaWdpdHNbMV0sIGxlbmd0aC0xKTsKKyAgICAg
ICAgfQorICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKGV4cG9uZW50X2NoYXJh
Y3Rlcl8pOworICAgICAgICBpZiAoZXhwb25lbnQgPCAwKSB7CisgICAgICAgICAgICByZXN1bHRf
YnVpbGRlci0+QWRkQ2hhcmFjdGVyKCctJyk7CisgICAgICAgICAgICBleHBvbmVudCA9IC1leHBv
bmVudDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICgoZmxhZ3NfICYgRU1JVF9Q
T1NJVElWRV9FWFBPTkVOVF9TSUdOKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0X2J1
aWxkZXItPkFkZENoYXJhY3RlcignKycpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGlmIChleHBvbmVudCA9PSAwKSB7CisgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRk
Q2hhcmFjdGVyKCcwJyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
QVNTRVJUKGV4cG9uZW50IDwgMWU0KTsKKyAgICAgICAgY29uc3QgaW50IGtNYXhFeHBvbmVudExl
bmd0aCA9IDU7CisgICAgICAgIGNoYXIgYnVmZmVyW2tNYXhFeHBvbmVudExlbmd0aF07CisgICAg
ICAgIGludCBmaXJzdF9jaGFyX3BvcyA9IGtNYXhFeHBvbmVudExlbmd0aDsKKyAgICAgICAgd2hp
bGUgKGV4cG9uZW50ID4gMCkgeworICAgICAgICAgICAgYnVmZmVyWy0tZmlyc3RfY2hhcl9wb3Nd
ID0gJzAnICsgKGV4cG9uZW50ICUgMTApOworICAgICAgICAgICAgZXhwb25lbnQgLz0gMTA7Cisg
ICAgICAgIH0KKyAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZFN1YnN0cmluZygmYnVmZmVyW2Zp
cnN0X2NoYXJfcG9zXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrTWF4
RXhwb25lbnRMZW5ndGggLSBmaXJzdF9jaGFyX3Bvcyk7CisgICAgfQorICAgIAorICAgIAorICAg
IHZvaWQgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6OkNyZWF0ZURlY2ltYWxSZXByZXNlbnRhdGlv
bigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciogZGVjaW1hbF9kaWdpdHMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBkZWNpbWFsX3BvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGlnaXRzX2FmdGVyX3BvaW50LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTdHJpbmdCdWlsZGVyKiByZXN1bHRfYnVpbGRlcikgY29uc3QgeworICAgICAgICAvLyBDcmVh
dGUgYSByZXByZXNlbnRhdGlvbiB0aGF0IGlzIHBhZGRlZCB3aXRoIHplcm9zIGlmIG5lZWRlZC4K
KyAgICAgICAgaWYgKGRlY2ltYWxfcG9pbnQgPD0gMCkgeworICAgICAgICAgICAgLy8gIjAuMDAw
MDBkZWNpbWFsX3JlcCIuCisgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVy
KCcwJyk7CisgICAgICAgICAgICBpZiAoZGlnaXRzX2FmdGVyX3BvaW50ID4gMCkgeworICAgICAg
ICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRDaGFyYWN0ZXIoJy4nKTsKKyAgICAgICAgICAg
ICAgICByZXN1bHRfYnVpbGRlci0+QWRkUGFkZGluZygnMCcsIC1kZWNpbWFsX3BvaW50KTsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IGRpZ2l0c19hZnRlcl9wb2ludCAtICgtZGVj
aW1hbF9wb2ludCkpOworICAgICAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRTdWJzdHJp
bmcoZGVjaW1hbF9kaWdpdHMsIGxlbmd0aCk7CisgICAgICAgICAgICAgICAgaW50IHJlbWFpbmlu
Z19kaWdpdHMgPSBkaWdpdHNfYWZ0ZXJfcG9pbnQgLSAoLWRlY2ltYWxfcG9pbnQpIC0gbGVuZ3Ro
OworICAgICAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRQYWRkaW5nKCcwJywgcmVtYWlu
aW5nX2RpZ2l0cyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoZGVjaW1hbF9w
b2ludCA+PSBsZW5ndGgpIHsKKyAgICAgICAgICAgIC8vICJkZWNpbWFsX3JlcDAwMDAuMDAwMDAi
IG9yICJkZWNpbWFsX3JlcC4wMDAwIgorICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZFN1
YnN0cmluZyhkZWNpbWFsX2RpZ2l0cywgbGVuZ3RoKTsKKyAgICAgICAgICAgIHJlc3VsdF9idWls
ZGVyLT5BZGRQYWRkaW5nKCcwJywgZGVjaW1hbF9wb2ludCAtIGxlbmd0aCk7CisgICAgICAgICAg
ICBpZiAoZGlnaXRzX2FmdGVyX3BvaW50ID4gMCkgeworICAgICAgICAgICAgICAgIHJlc3VsdF9i
dWlsZGVyLT5BZGRDaGFyYWN0ZXIoJy4nKTsKKyAgICAgICAgICAgICAgICByZXN1bHRfYnVpbGRl
ci0+QWRkUGFkZGluZygnMCcsIGRpZ2l0c19hZnRlcl9wb2ludCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyAiZGVjaW1hLmxfcmVwMDAwIgorICAgICAg
ICAgICAgQVNTRVJUKGRpZ2l0c19hZnRlcl9wb2ludCA+IDApOworICAgICAgICAgICAgcmVzdWx0
X2J1aWxkZXItPkFkZFN1YnN0cmluZyhkZWNpbWFsX2RpZ2l0cywgZGVjaW1hbF9wb2ludCk7Cisg
ICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKCcuJyk7CisgICAgICAgICAg
ICBBU1NFUlQobGVuZ3RoIC0gZGVjaW1hbF9wb2ludCA8PSBkaWdpdHNfYWZ0ZXJfcG9pbnQpOwor
ICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZFN1YnN0cmluZygmZGVjaW1hbF9kaWdpdHNb
ZGVjaW1hbF9wb2ludF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxlbmd0aCAtIGRlY2ltYWxfcG9pbnQpOworICAgICAgICAgICAgaW50IHJlbWFpbmluZ19kaWdp
dHMgPSBkaWdpdHNfYWZ0ZXJfcG9pbnQgLSAobGVuZ3RoIC0gZGVjaW1hbF9wb2ludCk7CisgICAg
ICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkUGFkZGluZygnMCcsIHJlbWFpbmluZ19kaWdpdHMp
OworICAgICAgICB9CisgICAgICAgIGlmIChkaWdpdHNfYWZ0ZXJfcG9pbnQgPT0gMCkgeworICAg
ICAgICAgICAgaWYgKChmbGFnc18gJiBFTUlUX1RSQUlMSU5HX0RFQ0lNQUxfUE9JTlQpICE9IDAp
IHsKKyAgICAgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKCcuJyk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKGZsYWdzXyAmIEVNSVRfVFJBSUxJTkdfWkVS
T19BRlRFUl9QT0lOVCkgIT0gMCkgeworICAgICAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5B
ZGRDaGFyYWN0ZXIoJzAnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICAKKyAgICBib29sIERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpUb1Nob3J0ZXN0KGRvdWJs
ZSB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0
cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25zdCB7CisgICAgICAgIGlmIChEb3VibGUo
dmFsdWUpLklzU3BlY2lhbCgpKSB7CisgICAgICAgICAgICByZXR1cm4gSGFuZGxlU3BlY2lhbFZh
bHVlcyh2YWx1ZSwgcmVzdWx0X2J1aWxkZXIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpbnQgZGVjaW1hbF9wb2ludDsKKyAgICAgICAgYm9vbCBzaWduOworICAgICAgICBjb25zdCBp
bnQga0RlY2ltYWxSZXBDYXBhY2l0eSA9IGtCYXNlMTBNYXhpbWFsTGVuZ3RoICsgMTsKKyAgICAg
ICAgY2hhciBkZWNpbWFsX3JlcFtrRGVjaW1hbFJlcENhcGFjaXR5XTsKKyAgICAgICAgaW50IGRl
Y2ltYWxfcmVwX2xlbmd0aDsKKyAgICAgICAgCisgICAgICAgIERvdWJsZVRvQXNjaWkodmFsdWUs
IFNIT1JURVNULCAwLCBkZWNpbWFsX3JlcCwga0RlY2ltYWxSZXBDYXBhY2l0eSwKKyAgICAgICAg
ICAgICAgICAgICAgICAmc2lnbiwgJmRlY2ltYWxfcmVwX2xlbmd0aCwgJmRlY2ltYWxfcG9pbnQp
OworICAgICAgICAKKyAgICAgICAgYm9vbCB1bmlxdWVfemVybyA9IChmbGFnc18gJiBVTklRVUVf
WkVSTykgIT0gMDsKKyAgICAgICAgaWYgKHNpZ24gJiYgKHZhbHVlICE9IDAuMCB8fCAhdW5pcXVl
X3plcm8pKSB7CisgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKCctJyk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludCBleHBvbmVudCA9IGRlY2ltYWxfcG9p
bnQgLSAxOworICAgICAgICBpZiAoKGRlY2ltYWxfaW5fc2hvcnRlc3RfbG93XyA8PSBleHBvbmVu
dCkgJiYKKyAgICAgICAgICAgIChleHBvbmVudCA8IGRlY2ltYWxfaW5fc2hvcnRlc3RfaGlnaF8p
KSB7CisgICAgICAgICAgICBDcmVhdGVEZWNpbWFsUmVwcmVzZW50YXRpb24oZGVjaW1hbF9yZXAs
IGRlY2ltYWxfcmVwX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWNpbWFsX3BvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE1heCgwLCBkZWNpbWFsX3JlcF9sZW5ndGggLSBkZWNpbWFsX3BvaW50KSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfYnVpbGRlcik7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBDcmVhdGVFeHBvbmVudGlhbFJlcHJlc2VudGF0aW9uKGRl
Y2ltYWxfcmVwLCBkZWNpbWFsX3JlcF9sZW5ndGgsIGV4cG9uZW50LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfYnVpbGRlcik7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIAorICAgIGJvb2wgRG91Ymxl
VG9TdHJpbmdDb252ZXJ0ZXI6OlRvRml4ZWQoZG91YmxlIHZhbHVlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlcXVlc3RlZF9kaWdpdHMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyKiByZXN1bHRf
YnVpbGRlcikgY29uc3QgeworICAgICAgICBBU1NFUlQoa01heEZpeGVkRGlnaXRzQmVmb3JlUG9p
bnQgPT0gNjApOworICAgICAgICBjb25zdCBkb3VibGUga0ZpcnN0Tm9uRml4ZWQgPSAxZTYwOwor
ICAgICAgICAKKyAgICAgICAgaWYgKERvdWJsZSh2YWx1ZSkuSXNTcGVjaWFsKCkpIHsKKyAgICAg
ICAgICAgIHJldHVybiBIYW5kbGVTcGVjaWFsVmFsdWVzKHZhbHVlLCByZXN1bHRfYnVpbGRlcik7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChyZXF1ZXN0ZWRfZGlnaXRzID4ga01h
eEZpeGVkRGlnaXRzQWZ0ZXJQb2ludCkgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAodmFsdWUg
Pj0ga0ZpcnN0Tm9uRml4ZWQgfHwgdmFsdWUgPD0gLWtGaXJzdE5vbkZpeGVkKSByZXR1cm4gZmFs
c2U7CisgICAgICAgIAorICAgICAgICAvLyBGaW5kIGEgc3VmZmljaWVudGx5IHByZWNpc2UgZGVj
aW1hbCByZXByZXNlbnRhdGlvbiBvZiBuLgorICAgICAgICBpbnQgZGVjaW1hbF9wb2ludDsKKyAg
ICAgICAgYm9vbCBzaWduOworICAgICAgICAvLyBBZGQgc3BhY2UgZm9yIHRoZSAnXDAnIGJ5dGUu
CisgICAgICAgIGNvbnN0IGludCBrRGVjaW1hbFJlcENhcGFjaXR5ID0KKyAgICAgICAga01heEZp
eGVkRGlnaXRzQmVmb3JlUG9pbnQgKyBrTWF4Rml4ZWREaWdpdHNBZnRlclBvaW50ICsgMTsKKyAg
ICAgICAgY2hhciBkZWNpbWFsX3JlcFtrRGVjaW1hbFJlcENhcGFjaXR5XTsKKyAgICAgICAgaW50
IGRlY2ltYWxfcmVwX2xlbmd0aDsKKyAgICAgICAgRG91YmxlVG9Bc2NpaSh2YWx1ZSwgRklYRUQs
IHJlcXVlc3RlZF9kaWdpdHMsCisgICAgICAgICAgICAgICAgICAgICAgZGVjaW1hbF9yZXAsIGtE
ZWNpbWFsUmVwQ2FwYWNpdHksCisgICAgICAgICAgICAgICAgICAgICAgJnNpZ24sICZkZWNpbWFs
X3JlcF9sZW5ndGgsICZkZWNpbWFsX3BvaW50KTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgdW5p
cXVlX3plcm8gPSAoKGZsYWdzXyAmIFVOSVFVRV9aRVJPKSAhPSAwKTsKKyAgICAgICAgaWYgKHNp
Z24gJiYgKHZhbHVlICE9IDAuMCB8fCAhdW5pcXVlX3plcm8pKSB7CisgICAgICAgICAgICByZXN1
bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKCctJyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIENyZWF0ZURlY2ltYWxSZXByZXNlbnRhdGlvbihkZWNpbWFsX3JlcCwgZGVjaW1hbF9yZXBf
bGVuZ3RoLCBkZWNpbWFsX3BvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVxdWVzdGVkX2RpZ2l0cywgcmVzdWx0X2J1aWxkZXIpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgCisgICAgCisgICAgYm9vbCBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6
VG9FeHBvbmVudGlhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRvdWJsZSB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCByZXF1ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVpbGRlciogcmVzdWx0X2J1aWxkZXIp
IGNvbnN0IHsKKyAgICAgICAgaWYgKERvdWJsZSh2YWx1ZSkuSXNTcGVjaWFsKCkpIHsKKyAgICAg
ICAgICAgIHJldHVybiBIYW5kbGVTcGVjaWFsVmFsdWVzKHZhbHVlLCByZXN1bHRfYnVpbGRlcik7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChyZXF1ZXN0ZWRfZGlnaXRzIDwgLTEp
IHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKHJlcXVlc3RlZF9kaWdpdHMgPiBrTWF4RXhwb25l
bnRpYWxEaWdpdHMpIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGludCBkZWNpbWFs
X3BvaW50OworICAgICAgICBib29sIHNpZ247CisgICAgICAgIC8vIEFkZCBzcGFjZSBmb3IgZGln
aXQgYmVmb3JlIHRoZSBkZWNpbWFsIHBvaW50IGFuZCB0aGUgJ1wwJyBjaGFyYWN0ZXIuCisgICAg
ICAgIGNvbnN0IGludCBrRGVjaW1hbFJlcENhcGFjaXR5ID0ga01heEV4cG9uZW50aWFsRGlnaXRz
ICsgMjsKKyAgICAgICAgQVNTRVJUKGtEZWNpbWFsUmVwQ2FwYWNpdHkgPiBrQmFzZTEwTWF4aW1h
bExlbmd0aCk7CisgICAgICAgIGNoYXIgZGVjaW1hbF9yZXBba0RlY2ltYWxSZXBDYXBhY2l0eV07
CisgICAgICAgIGludCBkZWNpbWFsX3JlcF9sZW5ndGg7CisgICAgICAgIAorICAgICAgICBpZiAo
cmVxdWVzdGVkX2RpZ2l0cyA9PSAtMSkgeworICAgICAgICAgICAgRG91YmxlVG9Bc2NpaSh2YWx1
ZSwgU0hPUlRFU1QsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2ltYWxfcmVwLCBr
RGVjaW1hbFJlcENhcGFjaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAmc2lnbiwgJmRl
Y2ltYWxfcmVwX2xlbmd0aCwgJmRlY2ltYWxfcG9pbnQpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgRG91YmxlVG9Bc2NpaSh2YWx1ZSwgUFJFQ0lTSU9OLCByZXF1ZXN0ZWRfZGlnaXRz
ICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjaW1hbF9yZXAsIGtEZWNpbWFsUmVw
Q2FwYWNpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICZzaWduLCAmZGVjaW1hbF9yZXBf
bGVuZ3RoLCAmZGVjaW1hbF9wb2ludCk7CisgICAgICAgICAgICBBU1NFUlQoZGVjaW1hbF9yZXBf
bGVuZ3RoIDw9IHJlcXVlc3RlZF9kaWdpdHMgKyAxKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IGRlY2ltYWxfcmVwX2xlbmd0aDsgaSA8IHJlcXVlc3RlZF9kaWdpdHMg
KyAxOyArK2kpIHsKKyAgICAgICAgICAgICAgICBkZWNpbWFsX3JlcFtpXSA9ICcwJzsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGRlY2ltYWxfcmVwX2xlbmd0aCA9IHJlcXVlc3RlZF9kaWdp
dHMgKyAxOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIHVuaXF1ZV96ZXJvID0g
KChmbGFnc18gJiBVTklRVUVfWkVSTykgIT0gMCk7CisgICAgICAgIGlmIChzaWduICYmICh2YWx1
ZSAhPSAwLjAgfHwgIXVuaXF1ZV96ZXJvKSkgeworICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXIt
PkFkZENoYXJhY3RlcignLScpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpbnQgZXhw
b25lbnQgPSBkZWNpbWFsX3BvaW50IC0gMTsKKyAgICAgICAgQ3JlYXRlRXhwb25lbnRpYWxSZXBy
ZXNlbnRhdGlvbihkZWNpbWFsX3JlcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZWNpbWFsX3JlcF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0X2J1aWxkZXIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgCisgICAgYm9vbCBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6VG9QcmVjaXNpb24oZG91
YmxlIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBwcmVjaXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU3RyaW5nQnVpbGRlciogcmVzdWx0X2J1aWxkZXIpIGNvbnN0IHsKKyAgICAgICAgaWYg
KERvdWJsZSh2YWx1ZSkuSXNTcGVjaWFsKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBIYW5kbGVT
cGVjaWFsVmFsdWVzKHZhbHVlLCByZXN1bHRfYnVpbGRlcik7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGlmIChwcmVjaXNpb24gPCBrTWluUHJlY2lzaW9uRGlnaXRzIHx8IHByZWNpc2lv
biA+IGtNYXhQcmVjaXNpb25EaWdpdHMpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRmluZCBhIHN1ZmZpY2llbnRseSBwcmVjaXNl
IGRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2Ygbi4KKyAgICAgICAgaW50IGRlY2ltYWxfcG9pbnQ7
CisgICAgICAgIGJvb2wgc2lnbjsKKyAgICAgICAgLy8gQWRkIG9uZSBmb3IgdGhlIHRlcm1pbmF0
aW5nIG51bGwgY2hhcmFjdGVyLgorICAgICAgICBjb25zdCBpbnQga0RlY2ltYWxSZXBDYXBhY2l0
eSA9IGtNYXhQcmVjaXNpb25EaWdpdHMgKyAxOworICAgICAgICBjaGFyIGRlY2ltYWxfcmVwW2tE
ZWNpbWFsUmVwQ2FwYWNpdHldOworICAgICAgICBpbnQgZGVjaW1hbF9yZXBfbGVuZ3RoOworICAg
ICAgICAKKyAgICAgICAgRG91YmxlVG9Bc2NpaSh2YWx1ZSwgUFJFQ0lTSU9OLCBwcmVjaXNpb24s
CisgICAgICAgICAgICAgICAgICAgICAgZGVjaW1hbF9yZXAsIGtEZWNpbWFsUmVwQ2FwYWNpdHks
CisgICAgICAgICAgICAgICAgICAgICAgJnNpZ24sICZkZWNpbWFsX3JlcF9sZW5ndGgsICZkZWNp
bWFsX3BvaW50KTsKKyAgICAgICAgQVNTRVJUKGRlY2ltYWxfcmVwX2xlbmd0aCA8PSBwcmVjaXNp
b24pOworICAgICAgICAKKyAgICAgICAgYm9vbCB1bmlxdWVfemVybyA9ICgoZmxhZ3NfICYgVU5J
UVVFX1pFUk8pICE9IDApOworICAgICAgICBpZiAoc2lnbiAmJiAodmFsdWUgIT0gMC4wIHx8ICF1
bmlxdWVfemVybykpIHsKKyAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRDaGFyYWN0ZXIo
Jy0nKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gVGhlIGV4cG9uZW50IGlmIHdl
IHByaW50IHRoZSBudW1iZXIgYXMgeC54eGV5eXkuIFRoYXQgaXMgd2l0aCB0aGUKKyAgICAgICAg
Ly8gZGVjaW1hbCBwb2ludCBhZnRlciB0aGUgZmlyc3QgZGlnaXQuCisgICAgICAgIGludCBleHBv
bmVudCA9IGRlY2ltYWxfcG9pbnQgLSAxOworICAgICAgICAKKyAgICAgICAgaW50IGV4dHJhX3pl
cm8gPSAoKGZsYWdzXyAmIEVNSVRfVFJBSUxJTkdfWkVST19BRlRFUl9QT0lOVCkgIT0gMCkgPyAx
IDogMDsKKyAgICAgICAgaWYgKCgtZGVjaW1hbF9wb2ludCArIDEgPiBtYXhfbGVhZGluZ19wYWRk
aW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZV8pIHx8CisgICAgICAgICAgICAoZGVjaW1hbF9w
b2ludCAtIHByZWNpc2lvbiArIGV4dHJhX3plcm8gPgorICAgICAgICAgICAgIG1heF90cmFpbGlu
Z19wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZV8pKSB7CisgICAgICAgICAgICAgICAg
Ly8gRmlsbCBidWZmZXIgdG8gY29udGFpbiAncHJlY2lzaW9uJyBkaWdpdHMuCisgICAgICAgICAg
ICAgICAgLy8gVXN1YWxseSB0aGUgYnVmZmVyIGlzIGFscmVhZHkgYXQgdGhlIGNvcnJlY3QgbGVu
Z3RoLCBidXQgJ0RvdWJsZVRvQXNjaWknCisgICAgICAgICAgICAgICAgLy8gaXMgYWxsb3dlZCB0
byByZXR1cm4gbGVzcyBjaGFyYWN0ZXJzLgorICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBk
ZWNpbWFsX3JlcF9sZW5ndGg7IGkgPCBwcmVjaXNpb247ICsraSkgeworICAgICAgICAgICAgICAg
ICAgICBkZWNpbWFsX3JlcFtpXSA9ICcwJzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgQ3JlYXRlRXhwb25lbnRpYWxSZXByZXNlbnRhdGlvbihk
ZWNpbWFsX3JlcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHByZWNpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGV4cG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0X2J1aWxkZXIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBDcmVhdGVEZWNpbWFsUmVwcmVzZW50YXRpb24oZGVjaW1hbF9yZXAsIGRlY2ltYWxf
cmVwX2xlbmd0aCwgZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTWF4KDAsIHByZWNpc2lvbiAtIGRlY2ltYWxfcG9pbnQpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfYnVpbGRlcik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAKKyAg
ICBzdGF0aWMgQmlnbnVtRHRvYU1vZGUgRHRvYVRvQmlnbnVtRHRvYU1vZGUoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvdWJsZVRvU3RyaW5nQ29udmVy
dGVyOjpEdG9hTW9kZSBkdG9hX21vZGUpIHsKKyAgICAgICAgc3dpdGNoIChkdG9hX21vZGUpIHsK
KyAgICAgICAgICAgIGNhc2UgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6OlNIT1JURVNUOiAgcmV0
dXJuIEJJR05VTV9EVE9BX1NIT1JURVNUOworICAgICAgICAgICAgY2FzZSBEb3VibGVUb1N0cmlu
Z0NvbnZlcnRlcjo6RklYRUQ6ICAgICByZXR1cm4gQklHTlVNX0RUT0FfRklYRUQ7CisgICAgICAg
ICAgICBjYXNlIERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpQUkVDSVNJT046IHJldHVybiBCSUdO
VU1fRFRPQV9QUkVDSVNJT047CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEJJR05VTV9EVE9BX1NIT1JU
RVNUOyAgLy8gVG8gc2lsZW5jZSBjb21waWxlci4KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICAKKyAgICB2b2lkIERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpEb3VibGVUb0FzY2lpKGRvdWJs
ZSB2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHRv
YU1vZGUgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCByZXF1ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhciogYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ1ZmZlcl9sZW5ndGgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sKiBzaWduLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBsZW5ndGgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHBvaW50KSB7
CisgICAgICAgIFZlY3RvcjxjaGFyPiB2ZWN0b3IoYnVmZmVyLCBidWZmZXJfbGVuZ3RoKTsKKyAg
ICAgICAgQVNTRVJUKCFEb3VibGUodikuSXNTcGVjaWFsKCkpOworICAgICAgICBBU1NFUlQobW9k
ZSA9PSBTSE9SVEVTVCB8fCByZXF1ZXN0ZWRfZGlnaXRzID49IDApOworICAgICAgICAKKyAgICAg
ICAgaWYgKERvdWJsZSh2KS5TaWduKCkgPCAwKSB7CisgICAgICAgICAgICAqc2lnbiA9IHRydWU7
CisgICAgICAgICAgICB2ID0gLXY7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAqc2ln
biA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobW9kZSA9PSBQUkVD
SVNJT04gJiYgcmVxdWVzdGVkX2RpZ2l0cyA9PSAwKSB7CisgICAgICAgICAgICB2ZWN0b3JbMF0g
PSAnXDAnOworICAgICAgICAgICAgKmxlbmd0aCA9IDA7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICh2ID09IDApIHsKKyAgICAgICAgICAgIHZl
Y3RvclswXSA9ICcwJzsKKyAgICAgICAgICAgIHZlY3RvclsxXSA9ICdcMCc7CisgICAgICAgICAg
ICAqbGVuZ3RoID0gMTsKKyAgICAgICAgICAgICpwb2ludCA9IDE7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgZmFzdF93b3JrZWQ7CisgICAg
ICAgIHN3aXRjaCAobW9kZSkgeworICAgICAgICAgICAgY2FzZSBTSE9SVEVTVDoKKyAgICAgICAg
ICAgICAgICBmYXN0X3dvcmtlZCA9IEZhc3REdG9hKHYsIEZBU1RfRFRPQV9TSE9SVEVTVCwgMCwg
dmVjdG9yLCBsZW5ndGgsIHBvaW50KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgRklYRUQ6CisgICAgICAgICAgICAgICAgZmFzdF93b3JrZWQgPSBGYXN0Rml4ZWRE
dG9hKHYsIHJlcXVlc3RlZF9kaWdpdHMsIHZlY3RvciwgbGVuZ3RoLCBwb2ludCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFBSRUNJU0lPTjoKKyAgICAgICAgICAg
ICAgICBmYXN0X3dvcmtlZCA9IEZhc3REdG9hKHYsIEZBU1RfRFRPQV9QUkVDSVNJT04sIHJlcXVl
c3RlZF9kaWdpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0
b3IsIGxlbmd0aCwgcG9pbnQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAg
IGZhc3Rfd29ya2VkID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZhc3Rfd29ya2Vk
KSByZXR1cm47CisgICAgICAgIAorICAgICAgICAvLyBJZiB0aGUgZmFzdCBkdG9hIGRpZG4ndCBz
dWNjZWVkIHVzZSB0aGUgc2xvd2VyIGJpZ251bSB2ZXJzaW9uLgorICAgICAgICBCaWdudW1EdG9h
TW9kZSBiaWdudW1fbW9kZSA9IER0b2FUb0JpZ251bUR0b2FNb2RlKG1vZGUpOworICAgICAgICBC
aWdudW1EdG9hKHYsIGJpZ251bV9tb2RlLCByZXF1ZXN0ZWRfZGlnaXRzLCB2ZWN0b3IsIGxlbmd0
aCwgcG9pbnQpOworICAgICAgICB2ZWN0b3JbKmxlbmd0aF0gPSAnXDAnOworICAgIH0KKyAgICAK
KyAgICAKKyAgICAvLyBDb25zdW1lcyB0aGUgZ2l2ZW4gc3Vic3RyaW5nIGZyb20gdGhlIGl0ZXJh
dG9yLgorICAgIC8vIFJldHVybnMgZmFsc2UsIGlmIHRoZSBzdWJzdHJpbmcgZG9lcyBub3QgbWF0
Y2guCisgICAgc3RhdGljIGJvb2wgQ29uc3VtZVN1YlN0cmluZyhjb25zdCBjaGFyKiogY3VycmVu
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVuZCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHN1YnN0cmluZykgewor
ICAgICAgICBBU1NFUlQoKipjdXJyZW50ID09ICpzdWJzdHJpbmcpOworICAgICAgICBmb3IgKHN1
YnN0cmluZysrOyAqc3Vic3RyaW5nICE9ICdcMCc7IHN1YnN0cmluZysrKSB7CisgICAgICAgICAg
ICArKypjdXJyZW50OworICAgICAgICAgICAgaWYgKCpjdXJyZW50ID09IGVuZCB8fCAqKmN1cnJl
bnQgIT0gKnN1YnN0cmluZykgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgICsrKmN1
cnJlbnQ7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBN
YXhpbXVtIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgaW4gZGVjaW1hbCByZXByZXNlbnRh
dGlvbi4KKyAgICAvLyBUaGUgbG9uZ2VzdCBwb3NzaWJsZSBkb3VibGUgaW4gZGVjaW1hbCByZXBy
ZXNlbnRhdGlvbiBpcworICAgIC8vICgyXjUzIC0gMSkgKiAyIF4gLTEwNzQgdGhhdCBpcyAoMiBe
IDUzIC0gMSkgKiA1IF4gMTA3NCAvIDEwIF4gMTA3NAorICAgIC8vICg3NjggZGlnaXRzKS4gSWYg
d2UgcGFyc2UgYSBudW1iZXIgd2hvc2UgZmlyc3QgZGlnaXRzIGFyZSBlcXVhbCB0byBhCisgICAg
Ly8gbWVhbiBvZiAyIGFkamFjZW50IGRvdWJsZXMgKHRoYXQgY291bGQgaGF2ZSB1cCB0byA3Njkg
ZGlnaXRzKSB0aGUgcmVzdWx0CisgICAgLy8gbXVzdCBiZSByb3VuZGVkIHRvIHRoZSBiaWdnZXIg
b25lIHVubGVzcyB0aGUgdGFpbCBjb25zaXN0cyBvZiB6ZXJvcywgc28KKyAgICAvLyB3ZSBkb24n
dCBuZWVkIHRvIHByZXNlcnZlIGFsbCB0aGUgZGlnaXRzLgorICAgIGNvbnN0IGludCBrTWF4U2ln
bmlmaWNhbnREaWdpdHMgPSA3NzI7CisgICAgCisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlm
IGEgbm9uc3BhY2UgZm91bmQgYW5kIGZhbHNlIGlmIHRoZSBlbmQgaGFzIHJlYWNoZWQuCisgICAg
c3RhdGljIGlubGluZSBib29sIEFkdmFuY2VUb05vbnNwYWNlKGNvbnN0IGNoYXIqKiBjdXJyZW50
LCBjb25zdCBjaGFyKiBlbmQpIHsKKyAgICAgICAgd2hpbGUgKCpjdXJyZW50ICE9IGVuZCkgewor
ICAgICAgICAgICAgaWYgKCoqY3VycmVudCAhPSAnICcpIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgKysqY3VycmVudDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIAorICAgIAorICAgIHN0YXRpYyBib29sIGlzRGlnaXQoaW50IHgsIGludCByYWRpeCkgewor
ICAgICAgICByZXR1cm4gKHggPj0gJzAnICYmIHggPD0gJzknICYmIHggPCAnMCcgKyByYWRpeCkK
KyAgICAgICAgfHwgKHJhZGl4ID4gMTAgJiYgeCA+PSAnYScgJiYgeCA8ICdhJyArIHJhZGl4IC0g
MTApCisgICAgICAgIHx8IChyYWRpeCA+IDEwICYmIHggPj0gJ0EnICYmIHggPCAnQScgKyByYWRp
eCAtIDEwKTsKKyAgICB9CisgICAgCisgICAgCisgICAgc3RhdGljIGRvdWJsZSBTaWduZWRaZXJv
KGJvb2wgc2lnbikgeworICAgICAgICByZXR1cm4gc2lnbiA/IC0wLjAgOiAwLjA7CisgICAgfQor
ICAgIAorICAgIAorICAgIC8vIFBhcnNpbmcgaW50ZWdlcnMgd2l0aCByYWRpeCAyLCA0LCA4LCAx
NiwgMzIuIEFzc3VtZXMgY3VycmVudCAhPSBlbmQuCisgICAgdGVtcGxhdGUgPGludCByYWRpeF9s
b2dfMj4KKyAgICBzdGF0aWMgZG91YmxlIFJhZGl4U3RyaW5nVG9Eb3VibGUoY29uc3QgY2hhciog
Y3VycmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciogZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNpZ24s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsb3dfdHJhaWxp
bmdfanVuaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGp1
bmtfc3RyaW5nX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyKiogdHJhaWxpbmdfcG9pbnRlcikgeworICAgICAgICBBU1NFUlQoY3VycmVudCAh
PSBlbmQpOworICAgICAgICAKKyAgICAgICAgLy8gU2tpcCBsZWFkaW5nIDBzLgorICAgICAgICB3
aGlsZSAoKmN1cnJlbnQgPT0gJzAnKSB7CisgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAg
ICAgICBpZiAoY3VycmVudCA9PSBlbmQpIHsKKyAgICAgICAgICAgICAgICAqdHJhaWxpbmdfcG9p
bnRlciA9IGVuZDsKKyAgICAgICAgICAgICAgICByZXR1cm4gU2lnbmVkWmVybyhzaWduKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaW50NjRfdCBudW1iZXIg
PSAwOworICAgICAgICBpbnQgZXhwb25lbnQgPSAwOworICAgICAgICBjb25zdCBpbnQgcmFkaXgg
PSAoMSA8PCByYWRpeF9sb2dfMik7CisgICAgICAgIAorICAgICAgICBkbyB7CisgICAgICAgICAg
ICBpbnQgZGlnaXQ7CisgICAgICAgICAgICBpZiAoKmN1cnJlbnQgPj0gJzAnICYmICpjdXJyZW50
IDw9ICc5JyAmJiAqY3VycmVudCA8ICcwJyArIHJhZGl4KSB7CisgICAgICAgICAgICAgICAgZGln
aXQgPSBzdGF0aWNfY2FzdDxjaGFyPigqY3VycmVudCkgLSAnMCc7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKHJhZGl4ID4gMTAgJiYgKmN1cnJlbnQgPj0gJ2EnICYmICpjdXJyZW50IDwgJ2EnICsg
cmFkaXggLSAxMCkgeworICAgICAgICAgICAgICAgIGRpZ2l0ID0gc3RhdGljX2Nhc3Q8Y2hhcj4o
KmN1cnJlbnQpIC0gJ2EnICsgMTA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHJhZGl4ID4gMTAg
JiYgKmN1cnJlbnQgPj0gJ0EnICYmICpjdXJyZW50IDwgJ0EnICsgcmFkaXggLSAxMCkgeworICAg
ICAgICAgICAgICAgIGRpZ2l0ID0gc3RhdGljX2Nhc3Q8Y2hhcj4oKmN1cnJlbnQpIC0gJ0EnICsg
MTA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChhbGxvd190cmFp
bGluZ19qdW5rIHx8ICFBZHZhbmNlVG9Ob25zcGFjZSgmY3VycmVudCwgZW5kKSkgeworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWU7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBudW1iZXIgPSBudW1iZXIg
KiByYWRpeCArIGRpZ2l0OworICAgICAgICAgICAgaW50IG92ZXJmbG93ID0gc3RhdGljX2Nhc3Q8
aW50PihudW1iZXIgPj4gNTMpOworICAgICAgICAgICAgaWYgKG92ZXJmbG93ICE9IDApIHsKKyAg
ICAgICAgICAgICAgICAvLyBPdmVyZmxvdyBvY2N1cnJlZC4gTmVlZCB0byBkZXRlcm1pbmUgd2hp
Y2ggZGlyZWN0aW9uIHRvIHJvdW5kIHRoZQorICAgICAgICAgICAgICAgIC8vIHJlc3VsdC4KKyAg
ICAgICAgICAgICAgICBpbnQgb3ZlcmZsb3dfYml0c19jb3VudCA9IDE7CisgICAgICAgICAgICAg
ICAgd2hpbGUgKG92ZXJmbG93ID4gMSkgeworICAgICAgICAgICAgICAgICAgICBvdmVyZmxvd19i
aXRzX2NvdW50Kys7CisgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93ID4+PSAxOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpbnQgZHJvcHBl
ZF9iaXRzX21hc2sgPSAoKDEgPDwgb3ZlcmZsb3dfYml0c19jb3VudCkgLSAxKTsKKyAgICAgICAg
ICAgICAgICBpbnQgZHJvcHBlZF9iaXRzID0gc3RhdGljX2Nhc3Q8aW50PihudW1iZXIpICYgZHJv
cHBlZF9iaXRzX21hc2s7CisgICAgICAgICAgICAgICAgbnVtYmVyID4+PSBvdmVyZmxvd19iaXRz
X2NvdW50OworICAgICAgICAgICAgICAgIGV4cG9uZW50ID0gb3ZlcmZsb3dfYml0c19jb3VudDsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBib29sIHplcm9fdGFpbCA9IHRydWU7
CisgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICAgICAgKytj
dXJyZW50OworICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQgfHwgIWlzRGln
aXQoKmN1cnJlbnQsIHJhZGl4KSkgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIHplcm9fdGFp
bCA9IHplcm9fdGFpbCAmJiAqY3VycmVudCA9PSAnMCc7CisgICAgICAgICAgICAgICAgICAgIGV4
cG9uZW50ICs9IHJhZGl4X2xvZ18yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBpZiAoIWFsbG93X3RyYWlsaW5nX2p1bmsgJiYgQWR2YW5jZVRv
Tm9uc3BhY2UoJmN1cnJlbnQsIGVuZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGp1
bmtfc3RyaW5nX3ZhbHVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBpbnQgbWlkZGxlX3ZhbHVlID0gKDEgPDwgKG92ZXJmbG93X2JpdHNfY291
bnQgLSAxKSk7CisgICAgICAgICAgICAgICAgaWYgKGRyb3BwZWRfYml0cyA+IG1pZGRsZV92YWx1
ZSkgeworICAgICAgICAgICAgICAgICAgICBudW1iZXIrKzsgIC8vIFJvdW5kaW5nIHVwLgorICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoZHJvcHBlZF9iaXRzID09IG1pZGRsZV92YWx1ZSkgewor
ICAgICAgICAgICAgICAgICAgICAvLyBSb3VuZGluZyB0byBldmVuIHRvIGNvbnNpc3RlbmN5IHdp
dGggZGVjaW1hbHM6IGhhbGYtd2F5IGNhc2Ugcm91bmRzCisgICAgICAgICAgICAgICAgICAgIC8v
IHVwIGlmIHNpZ25pZmljYW50IHBhcnQgaXMgb2RkIGFuZCBkb3duIG90aGVyd2lzZS4KKyAgICAg
ICAgICAgICAgICAgICAgaWYgKChudW1iZXIgJiAxKSAhPSAwIHx8ICF6ZXJvX3RhaWwpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG51bWJlcisrOyAgLy8gUm91bmRpbmcgdXAuCisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgLy8gUm91bmRpbmcgdXAgbWF5IGNhdXNlIG92ZXJmbG93LgorICAgICAgICAg
ICAgICAgIGlmICgobnVtYmVyICYgKChpbnQ2NF90KTEgPDwgNTMpKSAhPSAwKSB7CisgICAgICAg
ICAgICAgICAgICAgIGV4cG9uZW50Kys7CisgICAgICAgICAgICAgICAgICAgIG51bWJlciA+Pj0g
MTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgIH0gd2hpbGUgKGN1cnJlbnQgIT0g
ZW5kKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChudW1iZXIgPCAoKGludDY0X3QpMSA8PCA1
MykpOworICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91
YmxlPihudW1iZXIpKSA9PSBudW1iZXIpOworICAgICAgICAKKyAgICAgICAgKnRyYWlsaW5nX3Bv
aW50ZXIgPSBjdXJyZW50OworICAgICAgICAKKyAgICAgICAgaWYgKGV4cG9uZW50ID09IDApIHsK
KyAgICAgICAgICAgIGlmIChzaWduKSB7CisgICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PSAw
KSByZXR1cm4gLTAuMDsKKyAgICAgICAgICAgICAgICBudW1iZXIgPSAtbnVtYmVyOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obnVtYmVyKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJUKG51bWJlciAhPSAwKTsKKyAgICAg
ICAgcmV0dXJuIERvdWJsZShEaXlGcChudW1iZXIsIGV4cG9uZW50KSkudmFsdWUoKTsKKyAgICB9
CisgICAgCisgICAgCisgICAgZG91YmxlIFN0cmluZ1RvRG91YmxlQ29udmVydGVyOjpTdHJpbmdU
b0RvdWJsZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIGlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCogcHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291bnQp
IHsKKyAgICAgICAgY29uc3QgY2hhciogY3VycmVudCA9IGlucHV0OworICAgICAgICBjb25zdCBj
aGFyKiBlbmQgPSBpbnB1dCArIGxlbmd0aDsKKyAgICAgICAgCisgICAgICAgICpwcm9jZXNzZWRf
Y2hhcmFjdGVyc19jb3VudCA9IDA7CisgICAgICAgIAorICAgICAgICBjb25zdCBib29sIGFsbG93
X3RyYWlsaW5nX2p1bmsgPSAoZmxhZ3NfICYgQUxMT1dfVFJBSUxJTkdfSlVOSykgIT0gMDsKKyAg
ICAgICAgY29uc3QgYm9vbCBhbGxvd19sZWFkaW5nX3NwYWNlcyA9IChmbGFnc18gJiBBTExPV19M
RUFESU5HX1NQQUNFUykgIT0gMDsKKyAgICAgICAgY29uc3QgYm9vbCBhbGxvd190cmFpbGluZ19z
cGFjZXMgPSAoZmxhZ3NfICYgQUxMT1dfVFJBSUxJTkdfU1BBQ0VTKSAhPSAwOworICAgICAgICBj
b25zdCBib29sIGFsbG93X3NwYWNlc19hZnRlcl9zaWduID0gKGZsYWdzXyAmIEFMTE9XX1NQQUNF
U19BRlRFUl9TSUdOKSAhPSAwOworICAgICAgICAKKyAgICAgICAgLy8gVG8gbWFrZSBzdXJlIHRo
YXQgaXRlcmF0b3IgZGVyZWZlcmVuY2luZyBpcyB2YWxpZCB0aGUgZm9sbG93aW5nCisgICAgICAg
IC8vIGNvbnZlbnRpb24gaXMgdXNlZDoKKyAgICAgICAgLy8gMS4gRWFjaCAnKytjdXJyZW50JyBz
dGF0ZW1lbnQgaXMgZm9sbG93ZWQgYnkgY2hlY2sgZm9yIGVxdWFsaXR5IHRvICdlbmQnLgorICAg
ICAgICAvLyAyLiBJZiBBZHZhbmNlVG9Ob25zcGFjZSByZXR1cm5lZCBmYWxzZSB0aGVuIGN1cnJl
bnQgPT0gZW5kLgorICAgICAgICAvLyAzLiBJZiAnY3VycmVudCcgYmVjb21lcyBlcXVhbCB0byAn
ZW5kJyB0aGUgZnVuY3Rpb24gcmV0dXJucyBvciBnb2VzIHRvCisgICAgICAgIC8vICdwYXJzaW5n
X2RvbmUnLgorICAgICAgICAvLyA0LiAnY3VycmVudCcgaXMgbm90IGRlcmVmZXJlbmNlZCBhZnRl
ciB0aGUgJ3BhcnNpbmdfZG9uZScgbGFiZWwuCisgICAgICAgIC8vIDUuIENvZGUgYmVmb3JlICdw
YXJzaW5nX2RvbmUnIG1heSByZWx5IG9uICdjdXJyZW50ICE9IGVuZCcuCisgICAgICAgIGlmIChj
dXJyZW50ID09IGVuZCkgcmV0dXJuIGVtcHR5X3N0cmluZ192YWx1ZV87CisgICAgICAgIAorICAg
ICAgICBpZiAoYWxsb3dfbGVhZGluZ19zcGFjZXMgfHwgYWxsb3dfdHJhaWxpbmdfc3BhY2VzKSB7
CisgICAgICAgICAgICBpZiAoIUFkdmFuY2VUb05vbnNwYWNlKCZjdXJyZW50LCBlbmQpKSB7Cisg
ICAgICAgICAgICAgICAgKnByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50ID0gY3VycmVudCAtIGlu
cHV0OworICAgICAgICAgICAgICAgIHJldHVybiBlbXB0eV9zdHJpbmdfdmFsdWVfOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKCFhbGxvd19sZWFkaW5nX3NwYWNlcyAmJiAoaW5wdXQg
IT0gY3VycmVudCkpIHsKKyAgICAgICAgICAgICAgICAvLyBObyBsZWFkaW5nIHNwYWNlcyBhbGxv
d2VkLCBidXQgQWR2YW5jZVRvTm9uc3BhY2UgbW92ZWQgZm9yd2FyZC4KKyAgICAgICAgICAgICAg
ICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICAvLyBUaGUgbG9uZ2VzdCBmb3JtIG9mIHNpbXBsaWZpZWQgbnVtYmVy
IGlzOiAiLTxzaWduaWZpY2FudCBkaWdpdHM+LjFlWFhYXDAiLgorICAgICAgICBjb25zdCBpbnQg
a0J1ZmZlclNpemUgPSBrTWF4U2lnbmlmaWNhbnREaWdpdHMgKyAxMDsKKyAgICAgICAgY2hhciBi
dWZmZXJba0J1ZmZlclNpemVdOyAgLy8gTk9MSU5UOiBzaXplIGlzIGtub3duIGF0IGNvbXBpbGUg
dGltZS4KKyAgICAgICAgaW50IGJ1ZmZlcl9wb3MgPSAwOworICAgICAgICAKKyAgICAgICAgLy8g
RXhwb25lbnQgd2lsbCBiZSBhZGp1c3RlZCBpZiBpbnNpZ25pZmljYW50IGRpZ2l0cyBvZiB0aGUg
aW50ZWdlciBwYXJ0CisgICAgICAgIC8vIG9yIGluc2lnbmlmaWNhbnQgbGVhZGluZyB6ZXJvcyBv
ZiB0aGUgZnJhY3Rpb25hbCBwYXJ0IGFyZSBkcm9wcGVkLgorICAgICAgICBpbnQgZXhwb25lbnQg
PSAwOworICAgICAgICBpbnQgc2lnbmlmaWNhbnRfZGlnaXRzID0gMDsKKyAgICAgICAgaW50IGlu
c2lnbmlmaWNhbnRfZGlnaXRzID0gMDsKKyAgICAgICAgYm9vbCBub256ZXJvX2RpZ2l0X2Ryb3Bw
ZWQgPSBmYWxzZTsKKyAgICAgICAgYm9vbCBmcmFjdGlvbmFsX3BhcnQgPSBmYWxzZTsKKyAgICAg
ICAgCisgICAgICAgIGJvb2wgc2lnbiA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKCpj
dXJyZW50ID09ICcrJyB8fCAqY3VycmVudCA9PSAnLScpIHsKKyAgICAgICAgICAgIHNpZ24gPSAo
KmN1cnJlbnQgPT0gJy0nKTsKKyAgICAgICAgICAgICsrY3VycmVudDsKKyAgICAgICAgICAgIGNv
bnN0IGNoYXIqIG5leHRfbm9uX3NwYWNlID0gY3VycmVudDsKKyAgICAgICAgICAgIC8vIFNraXAg
Zm9sbG93aW5nIHNwYWNlcyAoaWYgYWxsb3dlZCkuCisgICAgICAgICAgICBpZiAoIUFkdmFuY2VU
b05vbnNwYWNlKCZuZXh0X25vbl9zcGFjZSwgZW5kKSkgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVl
XzsKKyAgICAgICAgICAgIGlmICghYWxsb3dfc3BhY2VzX2FmdGVyX3NpZ24gJiYgKGN1cnJlbnQg
IT0gbmV4dF9ub25fc3BhY2UpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5n
X3ZhbHVlXzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGN1cnJlbnQgPSBuZXh0X25vbl9z
cGFjZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGluZmluaXR5X3N5bWJvbF8g
IT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKCpjdXJyZW50ID09IGluZmluaXR5X3N5bWJvbF9b
MF0pIHsKKyAgICAgICAgICAgICAgICBpZiAoIUNvbnN1bWVTdWJTdHJpbmcoJmN1cnJlbnQsIGVu
ZCwgaW5maW5pdHlfc3ltYm9sXykpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGp1bmtf
c3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgaWYgKCEoYWxsb3dfdHJhaWxpbmdfc3BhY2VzIHx8IGFsbG93X3RyYWlsaW5n
X2p1bmspICYmIChjdXJyZW50ICE9IGVuZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGp1bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
aWYgKCFhbGxvd190cmFpbGluZ19qdW5rICYmIEFkdmFuY2VUb05vbnNwYWNlKCZjdXJyZW50LCBl
bmQpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEFTU0VS
VChidWZmZXJfcG9zID09IDApOworICAgICAgICAgICAgICAgICpwcm9jZXNzZWRfY2hhcmFjdGVy
c19jb3VudCA9IGN1cnJlbnQgLSBpbnB1dDsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2lnbiA/
IC1Eb3VibGU6OkluZmluaXR5KCkgOiBEb3VibGU6OkluZmluaXR5KCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChuYW5fc3ltYm9sXyAhPSBOVUxMKSB7
CisgICAgICAgICAgICBpZiAoKmN1cnJlbnQgPT0gbmFuX3N5bWJvbF9bMF0pIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIUNvbnN1bWVTdWJTdHJpbmcoJmN1cnJlbnQsIGVuZCwgbmFuX3N5bWJvbF8p
KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghKGFs
bG93X3RyYWlsaW5nX3NwYWNlcyB8fCBhbGxvd190cmFpbGluZ19qdW5rKSAmJiAoY3VycmVudCAh
PSBlbmQpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghYWxsb3dfdHJhaWxpbmdf
anVuayAmJiBBZHZhbmNlVG9Ob25zcGFjZSgmY3VycmVudCwgZW5kKSkgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBBU1NFUlQoYnVmZmVyX3BvcyA9PSAwKTsK
KyAgICAgICAgICAgICAgICAqcHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291bnQgPSBjdXJyZW50IC0g
aW5wdXQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNpZ24gPyAtRG91YmxlOjpOYU4oKSA6IERv
dWJsZTo6TmFOKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGJvb2wgbGVhZGluZ196ZXJvID0gZmFsc2U7CisgICAgICAgIGlmICgqY3VycmVudCA9PSAnMCcp
IHsKKyAgICAgICAgICAgICsrY3VycmVudDsKKyAgICAgICAgICAgIGlmIChjdXJyZW50ID09IGVu
ZCkgeworICAgICAgICAgICAgICAgICpwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCA9IGN1cnJl
bnQgLSBpbnB1dDsKKyAgICAgICAgICAgICAgICByZXR1cm4gU2lnbmVkWmVybyhzaWduKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbGVhZGluZ196ZXJvID0gdHJ1
ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSXQgY291bGQgYmUgaGV4YWRlY2ltYWwg
dmFsdWUuCisgICAgICAgICAgICBpZiAoKGZsYWdzXyAmIEFMTE9XX0hFWCkgJiYgKCpjdXJyZW50
ID09ICd4JyB8fCAqY3VycmVudCA9PSAnWCcpKSB7CisgICAgICAgICAgICAgICAgKytjdXJyZW50
OworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ID09IGVuZCB8fCAhaXNEaWdpdCgqY3VycmVu
dCwgMTYpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87
ICAvLyAiMHgiLgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKiB0YWlsX3BvaW50ZXIgPSBOVUxMOworICAgICAgICAgICAgICAg
IGRvdWJsZSByZXN1bHQgPSBSYWRpeFN0cmluZ1RvRG91YmxlPDQ+KGN1cnJlbnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ24s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YWxsb3dfdHJhaWxpbmdfanVuaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqdW5rX3N0cmluZ192YWx1ZV8sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRhaWxfcG9pbnRlcik7Cisg
ICAgICAgICAgICAgICAgaWYgKHRhaWxfcG9pbnRlciAhPSBOVUxMKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChhbGxvd190cmFpbGluZ19zcGFjZXMpIEFkdmFuY2VUb05vbnNwYWNlKCZ0YWls
X3BvaW50ZXIsIGVuZCk7CisgICAgICAgICAgICAgICAgICAgICpwcm9jZXNzZWRfY2hhcmFjdGVy
c19jb3VudCA9IHRhaWxfcG9pbnRlciAtIGlucHV0OworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICAvLyBJZ25vcmUgbGVhZGluZyB6ZXJvcyBpbiB0aGUgaW50ZWdlciBwYXJ0Lgor
ICAgICAgICAgICAgd2hpbGUgKCpjdXJyZW50ID09ICcwJykgeworICAgICAgICAgICAgICAgICsr
Y3VycmVudDsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgKnByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50ID0gY3VycmVudCAtIGlucHV0
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2lnbmVkWmVybyhzaWduKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJv
b2wgb2N0YWwgPSBsZWFkaW5nX3plcm8gJiYgKGZsYWdzXyAmIEFMTE9XX09DVEFMUykgIT0gMDsK
KyAgICAgICAgCisgICAgICAgIC8vIENvcHkgc2lnbmlmaWNhbnQgZGlnaXRzIG9mIHRoZSBpbnRl
Z2VyIHBhcnQgKGlmIGFueSkgdG8gdGhlIGJ1ZmZlci4KKyAgICAgICAgd2hpbGUgKCpjdXJyZW50
ID49ICcwJyAmJiAqY3VycmVudCA8PSAnOScpIHsKKyAgICAgICAgICAgIGlmIChzaWduaWZpY2Fu
dF9kaWdpdHMgPCBrTWF4U2lnbmlmaWNhbnREaWdpdHMpIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoYnVmZmVyX3BvcyA8IGtCdWZmZXJTaXplKTsKKyAgICAgICAgICAgICAgICBidWZmZXJbYnVm
ZmVyX3BvcysrXSA9IHN0YXRpY19jYXN0PGNoYXI+KCpjdXJyZW50KTsKKyAgICAgICAgICAgICAg
ICBzaWduaWZpY2FudF9kaWdpdHMrKzsKKyAgICAgICAgICAgICAgICAvLyBXaWxsIGxhdGVyIGNo
ZWNrIGlmIGl0J3MgYW4gb2N0YWwgaW4gdGhlIGJ1ZmZlci4KKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgaW5zaWduaWZpY2FudF9kaWdpdHMrKzsgIC8vIE1vdmUgdGhlIGRp
Z2l0IGludG8gdGhlIGV4cG9uZW50aWFsIHBhcnQuCisgICAgICAgICAgICAgICAgbm9uemVyb19k
aWdpdF9kcm9wcGVkID0gbm9uemVyb19kaWdpdF9kcm9wcGVkIHx8ICpjdXJyZW50ICE9ICcwJzsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9jdGFsID0gb2N0YWwgJiYgKmN1cnJlbnQgPCAn
OCc7CisgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBl
bmQpIGdvdG8gcGFyc2luZ19kb25lOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAo
c2lnbmlmaWNhbnRfZGlnaXRzID09IDApIHsKKyAgICAgICAgICAgIG9jdGFsID0gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICgqY3VycmVudCA9PSAnLicpIHsKKyAgICAg
ICAgICAgIGlmIChvY3RhbCAmJiAhYWxsb3dfdHJhaWxpbmdfanVuaykgcmV0dXJuIGp1bmtfc3Ry
aW5nX3ZhbHVlXzsKKyAgICAgICAgICAgIGlmIChvY3RhbCkgZ290byBwYXJzaW5nX2RvbmU7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgICsrY3VycmVudDsKKyAgICAgICAgICAgIGlmIChjdXJy
ZW50ID09IGVuZCkgeworICAgICAgICAgICAgICAgIGlmIChzaWduaWZpY2FudF9kaWdpdHMgPT0g
MCAmJiAhbGVhZGluZ196ZXJvKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0
cmluZ192YWx1ZV87CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgZ290byBwYXJzaW5nX2RvbmU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoc2lnbmlmaWNhbnRfZGlnaXRzID09IDApIHsK
KyAgICAgICAgICAgICAgICAvLyBvY3RhbCA9IGZhbHNlOworICAgICAgICAgICAgICAgIC8vIElu
dGVnZXIgcGFydCBjb25zaXN0cyBvZiAwIG9yIGlzIGFic2VudC4gU2lnbmlmaWNhbnQgZGlnaXRz
IHN0YXJ0IGFmdGVyCisgICAgICAgICAgICAgICAgLy8gbGVhZGluZyB6ZXJvcyAoaWYgYW55KS4K
KyAgICAgICAgICAgICAgICB3aGlsZSAoKmN1cnJlbnQgPT0gJzAnKSB7CisgICAgICAgICAgICAg
ICAgICAgICsrY3VycmVudDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gZW5k
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAqcHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291bnQg
PSBjdXJyZW50IC0gaW5wdXQ7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2lnbmVk
WmVybyhzaWduKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBl
eHBvbmVudC0tOyAgLy8gTW92ZSB0aGlzIDAgaW50byB0aGUgZXhwb25lbnQuCisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBXZSBk
b24ndCBlbWl0IGEgJy4nLCBidXQgYWRqdXN0IHRoZSBleHBvbmVudCBpbnN0ZWFkLgorICAgICAg
ICAgICAgZnJhY3Rpb25hbF9wYXJ0ID0gdHJ1ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Ly8gVGhlcmUgaXMgYSBmcmFjdGlvbmFsIHBhcnQuCisgICAgICAgICAgICB3aGlsZSAoKmN1cnJl
bnQgPj0gJzAnICYmICpjdXJyZW50IDw9ICc5JykgeworICAgICAgICAgICAgICAgIGlmIChzaWdu
aWZpY2FudF9kaWdpdHMgPCBrTWF4U2lnbmlmaWNhbnREaWdpdHMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKGJ1ZmZlcl9wb3MgPCBrQnVmZmVyU2l6ZSk7CisgICAgICAgICAgICAgICAg
ICAgIGJ1ZmZlcltidWZmZXJfcG9zKytdID0gc3RhdGljX2Nhc3Q8Y2hhcj4oKmN1cnJlbnQpOwor
ICAgICAgICAgICAgICAgICAgICBzaWduaWZpY2FudF9kaWdpdHMrKzsKKyAgICAgICAgICAgICAg
ICAgICAgZXhwb25lbnQtLTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAvLyBJZ25vcmUgaW5zaWduaWZpY2FudCBkaWdpdHMgaW4gdGhlIGZyYWN0aW9uYWwg
cGFydC4KKyAgICAgICAgICAgICAgICAgICAgbm9uemVyb19kaWdpdF9kcm9wcGVkID0gbm9uemVy
b19kaWdpdF9kcm9wcGVkIHx8ICpjdXJyZW50ICE9ICcwJzsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgKytjdXJyZW50OworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ID09
IGVuZCkgZ290byBwYXJzaW5nX2RvbmU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGlmICghbGVhZGluZ196ZXJvICYmIGV4cG9uZW50ID09IDAgJiYgc2lnbmlm
aWNhbnRfZGlnaXRzID09IDApIHsKKyAgICAgICAgICAgIC8vIElmIGxlYWRpbmdfemVyb3MgaXMg
dHJ1ZSB0aGVuIHRoZSBzdHJpbmcgY29udGFpbnMgemVyb3MuCisgICAgICAgICAgICAvLyBJZiBl
eHBvbmVudCA8IDAgdGhlbiBzdHJpbmcgd2FzIFsrLV1cLjAqLi4uCisgICAgICAgICAgICAvLyBJ
ZiBzaWduaWZpY2FudF9kaWdpdHMgIT0gMCB0aGUgc3RyaW5nIGlzIG5vdCBlcXVhbCB0byAwLgor
ICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHRoZXJlIGFyZSBubyBkaWdpdHMgaW4gdGhlIHN0cmlu
Zy4KKyAgICAgICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIC8vIFBhcnNlIGV4cG9uZW50aWFsIHBhcnQuCisgICAgICAgIGlmICgq
Y3VycmVudCA9PSAnZScgfHwgKmN1cnJlbnQgPT0gJ0UnKSB7CisgICAgICAgICAgICBpZiAob2N0
YWwgJiYgIWFsbG93X3RyYWlsaW5nX2p1bmspIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87Cisg
ICAgICAgICAgICBpZiAob2N0YWwpIGdvdG8gcGFyc2luZ19kb25lOworICAgICAgICAgICAgKytj
dXJyZW50OworICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gZW5kKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGFsbG93X3RyYWlsaW5nX2p1bmspIHsKKyAgICAgICAgICAgICAgICAgICAgZ290byBw
YXJzaW5nX2RvbmU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjaGFyIHNpZ24gPSAnKyc7CisgICAgICAgICAgICBpZiAoKmN1
cnJlbnQgPT0gJysnIHx8ICpjdXJyZW50ID09ICctJykgeworICAgICAgICAgICAgICAgIHNpZ24g
PSBzdGF0aWNfY2FzdDxjaGFyPigqY3VycmVudCk7CisgICAgICAgICAgICAgICAgKytjdXJyZW50
OworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ID09IGVuZCkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoYWxsb3dfdHJhaWxpbmdfanVuaykgeworICAgICAgICAgICAgICAgICAgICAgICAg
Z290byBwYXJzaW5nX2RvbmU7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQgfHwgKmN1cnJlbnQgPCAnMCcgfHwgKmN1
cnJlbnQgPiAnOScpIHsKKyAgICAgICAgICAgICAgICBpZiAoYWxsb3dfdHJhaWxpbmdfanVuaykg
eworICAgICAgICAgICAgICAgICAgICBnb3RvIHBhcnNpbmdfZG9uZTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVf
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgY29uc3QgaW50IG1heF9leHBvbmVudCA9IElOVF9NQVggLyAyOworICAgICAgICAgICAg
QVNTRVJUKC1tYXhfZXhwb25lbnQgLyAyIDw9IGV4cG9uZW50ICYmIGV4cG9uZW50IDw9IG1heF9l
eHBvbmVudCAvIDIpOworICAgICAgICAgICAgaW50IG51bSA9IDA7CisgICAgICAgICAgICBkbyB7
CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgb3ZlcmZsb3cuCisgICAgICAgICAgICAgICAgaW50
IGRpZ2l0ID0gKmN1cnJlbnQgLSAnMCc7CisgICAgICAgICAgICAgICAgaWYgKG51bSA+PSBtYXhf
ZXhwb25lbnQgLyAxMAorICAgICAgICAgICAgICAgICAgICAmJiAhKG51bSA9PSBtYXhfZXhwb25l
bnQgLyAxMCAmJiBkaWdpdCA8PSBtYXhfZXhwb25lbnQgJSAxMCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgbnVtID0gbWF4X2V4cG9uZW50OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIG51bSA9IG51bSAqIDEwICsgZGlnaXQ7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICsrY3VycmVudDsKKyAgICAgICAgICAgIH0gd2hpbGUgKGN1cnJl
bnQgIT0gZW5kICYmICpjdXJyZW50ID49ICcwJyAmJiAqY3VycmVudCA8PSAnOScpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBleHBvbmVudCArPSAoc2lnbiA9PSAnLScgPyAtbnVtIDogbnVt
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCEoYWxsb3dfdHJhaWxpbmdfc3Bh
Y2VzIHx8IGFsbG93X3RyYWlsaW5nX2p1bmspICYmIChjdXJyZW50ICE9IGVuZCkpIHsKKyAgICAg
ICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCFhbGxvd190cmFpbGluZ19qdW5rICYmIEFkdmFuY2VUb05vbnNwYWNlKCZjdXJyZW50LCBlbmQp
KSB7CisgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAgICB9Cisg
ICAgICAgIGlmIChhbGxvd190cmFpbGluZ19zcGFjZXMpIHsKKyAgICAgICAgICAgIEFkdmFuY2VU
b05vbnNwYWNlKCZjdXJyZW50LCBlbmQpOworICAgICAgICB9CisgICAgICAgIAorICAgIHBhcnNp
bmdfZG9uZToKKyAgICAgICAgZXhwb25lbnQgKz0gaW5zaWduaWZpY2FudF9kaWdpdHM7CisgICAg
ICAgIAorICAgICAgICBpZiAob2N0YWwpIHsKKyAgICAgICAgICAgIGRvdWJsZSByZXN1bHQ7Cisg
ICAgICAgICAgICBjb25zdCBjaGFyKiB0YWlsX3BvaW50ZXIgPSBOVUxMOworICAgICAgICAgICAg
cmVzdWx0ID0gUmFkaXhTdHJpbmdUb0RvdWJsZTwzPihidWZmZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciArIGJ1ZmZlcl9wb3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ24sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93X3RyYWlsaW5nX2p1bmssCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1bmtfc3RyaW5nX3ZhbHVl
XywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRhaWxfcG9p
bnRlcik7CisgICAgICAgICAgICBBU1NFUlQodGFpbF9wb2ludGVyICE9IE5VTEwpOworICAgICAg
ICAgICAgKnByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50ID0gY3VycmVudCAtIGlucHV0OworICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYg
KG5vbnplcm9fZGlnaXRfZHJvcHBlZCkgeworICAgICAgICAgICAgYnVmZmVyW2J1ZmZlcl9wb3Mr
K10gPSAnMSc7CisgICAgICAgICAgICBleHBvbmVudC0tOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBBU1NFUlQoYnVmZmVyX3BvcyA8IGtCdWZmZXJTaXplKTsKKyAgICAgICAgYnVmZmVy
W2J1ZmZlcl9wb3NdID0gJ1wwJzsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZSBjb252ZXJ0ZWQg
PSBTdHJ0b2QoVmVjdG9yPGNvbnN0IGNoYXI+KGJ1ZmZlciwgYnVmZmVyX3BvcyksIGV4cG9uZW50
KTsKKyAgICAgICAgKnByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50ID0gY3VycmVudCAtIGlucHV0
OworICAgICAgICByZXR1cm4gc2lnbj8gLWNvbnZlcnRlZDogY29udmVydGVkOworICAgIH0KKyAg
ICAKK30gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbgorCit9IC8vIG5hbWVzcGFjZSBX
VEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kb3VibGUtY29u
dmVyc2lvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2RvdWJsZS1jb252ZXJz
aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNGQ2ZmMyZjU3NDM2YmZjMDdlNzJiZjYwNTYzMjlkMThmN2Y2N2Jl
YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kb3Vi
bGUtY29udmVyc2lvbi5oCkBAIC0wLDAgKzEsNTAyIEBACisvLyBDb3B5cmlnaHQgMjAxMCB0aGUg
VjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisv
LyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
Ly8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8g
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKKyNpZm5kZWYgRE9VQkxFX0NPTlZFUlNJT05fRE9VQkxFX0NPTlZFUlNJT05fSF8KKyNk
ZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05fRE9VQkxFX0NPTlZFUlNJT05fSF8KKworI2luY2x1ZGUg
InV0aWxzLmgiCisKK25hbWVzcGFjZSBXVEYgeworCituYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNp
b24geworICAgIAorICAgIGNsYXNzIERvdWJsZVRvU3RyaW5nQ29udmVydGVyIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIC8vIFdoZW4gY2FsbGluZyBUb0ZpeGVkIHdpdGggYSBkb3VibGUgPiAxMF5r
TWF4Rml4ZWREaWdpdHNCZWZvcmVQb2ludAorICAgICAgICAvLyBvciBhIHJlcXVlc3RlZF9kaWdp
dHMgcGFyYW1ldGVyID4ga01heEZpeGVkRGlnaXRzQWZ0ZXJQb2ludCB0aGVuIHRoZQorICAgICAg
ICAvLyBmdW5jdGlvbiByZXR1cm5zIGZhbHNlLgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtN
YXhGaXhlZERpZ2l0c0JlZm9yZVBvaW50ID0gNjA7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
a01heEZpeGVkRGlnaXRzQWZ0ZXJQb2ludCA9IDYwOworICAgICAgICAKKyAgICAgICAgLy8gV2hl
biBjYWxsaW5nIFRvRXhwb25lbnRpYWwgd2l0aCBhIHJlcXVlc3RlZF9kaWdpdHMKKyAgICAgICAg
Ly8gcGFyYW1ldGVyID4ga01heEV4cG9uZW50aWFsRGlnaXRzIHRoZW4gdGhlIGZ1bmN0aW9uIHJl
dHVybnMgZmFsc2UuCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQga01heEV4cG9uZW50aWFsRGln
aXRzID0gMTIwOworICAgICAgICAKKyAgICAgICAgLy8gV2hlbiBjYWxsaW5nIFRvUHJlY2lzaW9u
IHdpdGggYSByZXF1ZXN0ZWRfZGlnaXRzCisgICAgICAgIC8vIHBhcmFtZXRlciA8IGtNaW5QcmVj
aXNpb25EaWdpdHMgb3IgcmVxdWVzdGVkX2RpZ2l0cyA+IGtNYXhQcmVjaXNpb25EaWdpdHMKKyAg
ICAgICAgLy8gdGhlbiB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZS4KKyAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBrTWluUHJlY2lzaW9uRGlnaXRzID0gMTsKKyAgICAgICAgc3RhdGljIGNvbnN0
IGludCBrTWF4UHJlY2lzaW9uRGlnaXRzID0gMTIwOworICAgICAgICAKKyAgICAgICAgZW51bSBG
bGFncyB7CisgICAgICAgICAgICBOT19GTEFHUyA9IDAsCisgICAgICAgICAgICBFTUlUX1BPU0lU
SVZFX0VYUE9ORU5UX1NJR04gPSAxLAorICAgICAgICAgICAgRU1JVF9UUkFJTElOR19ERUNJTUFM
X1BPSU5UID0gMiwKKyAgICAgICAgICAgIEVNSVRfVFJBSUxJTkdfWkVST19BRlRFUl9QT0lOVCA9
IDQsCisgICAgICAgICAgICBVTklRVUVfWkVSTyA9IDgKKyAgICAgICAgfTsKKyAgICAgICAgCisg
ICAgICAgIC8vIEZsYWdzIHNob3VsZCBiZSBhIGJpdC1vciBjb21iaW5hdGlvbiBvZiB0aGUgcG9z
c2libGUgRmxhZ3MtZW51bS4KKyAgICAgICAgLy8gIC0gTk9fRkxBR1M6IG5vIHNwZWNpYWwgZmxh
Z3MuCisgICAgICAgIC8vICAtIEVNSVRfUE9TSVRJVkVfRVhQT05FTlRfU0lHTjogd2hlbiB0aGUg
bnVtYmVyIGlzIGNvbnZlcnRlZCBpbnRvIGV4cG9uZW50CisgICAgICAgIC8vICAgIGZvcm0sIGVt
aXRzIGEgJysnIGZvciBwb3NpdGl2ZSBleHBvbmVudHMuIEV4YW1wbGU6IDEuMmUrMi4KKyAgICAg
ICAgLy8gIC0gRU1JVF9UUkFJTElOR19ERUNJTUFMX1BPSU5UOiB3aGVuIHRoZSBpbnB1dCBudW1i
ZXIgaXMgYW4gaW50ZWdlciBhbmQgaXMKKyAgICAgICAgLy8gICAgY29udmVydGVkIGludG8gZGVj
aW1hbCBmb3JtYXQgdGhlbiBhIHRyYWlsaW5nIGRlY2ltYWwgcG9pbnQgaXMgYXBwZW5kZWQuCisg
ICAgICAgIC8vICAgIEV4YW1wbGU6IDIzNDUuMCBpcyBjb252ZXJ0ZWQgdG8gIjIzNDUuIi4KKyAg
ICAgICAgLy8gIC0gRU1JVF9UUkFJTElOR19aRVJPX0FGVEVSX1BPSU5UOiBpbiBhZGRpdGlvbiB0
byBhIHRyYWlsaW5nIGRlY2ltYWwgcG9pbnQKKyAgICAgICAgLy8gICAgZW1pdHMgYSB0cmFpbGlu
ZyAnMCctY2hhcmFjdGVyLiBUaGlzIGZsYWcgcmVxdWlyZXMgdGhlCisgICAgICAgIC8vICAgIEVY
TUlUX1RSQUlMSU5HX0RFQ0lNQUxfUE9JTlQgZmxhZy4KKyAgICAgICAgLy8gICAgRXhhbXBsZTog
MjM0NS4wIGlzIGNvbnZlcnRlZCB0byAiMjM0NS4wIi4KKyAgICAgICAgLy8gIC0gVU5JUVVFX1pF
Uk86ICItMC4wIiBpcyBjb252ZXJ0ZWQgdG8gIjAuMCIuCisgICAgICAgIC8vCisgICAgICAgIC8v
IEluZmluaXR5IHN5bWJvbCBhbmQgbmFuX3N5bWJvbCBwcm92aWRlIHRoZSBzdHJpbmcgcmVwcmVz
ZW50YXRpb24gZm9yIHRoZXNlCisgICAgICAgIC8vIHNwZWNpYWwgdmFsdWVzLiBJZiB0aGUgc3Ry
aW5nIGlzIE5VTEwgYW5kIHRoZSBzcGVjaWFsIHZhbHVlIGlzIGVuY291bnRlcmVkCisgICAgICAg
IC8vIHRoZW4gdGhlIGNvbnZlcnNpb24gZnVuY3Rpb25zIHJldHVybiBmYWxzZS4KKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gVGhlIGV4cG9uZW50X2NoYXJhY3RlciBpcyB1c2VkIGluIGV4cG9uZW50
aWFsIHJlcHJlc2VudGF0aW9ucy4gSXQgaXMKKyAgICAgICAgLy8gdXN1YWxseSAnZScgb3IgJ0Un
LgorICAgICAgICAvLworICAgICAgICAvLyBXaGVuIGNvbnZlcnRpbmcgdG8gdGhlIHNob3J0ZXN0
IHJlcHJlc2VudGF0aW9uIHRoZSBjb252ZXJ0ZXIgd2lsbAorICAgICAgICAvLyByZXByZXNlbnQg
aW5wdXQgbnVtYmVycyBpbiBkZWNpbWFsIGZvcm1hdCBpZiB0aGV5IGFyZSBpbiB0aGUgaW50ZXJ2
YWwKKyAgICAgICAgLy8gWzEwXmRlY2ltYWxfaW5fc2hvcnRlc3RfbG93OyAxMF5kZWNpbWFsX2lu
X3Nob3J0ZXN0X2hpZ2hbCisgICAgICAgIC8vICAgIChsb3dlciBib3VuZGFyeSBpbmNsdWRlZCwg
Z3JlYXRlciBib3VuZGFyeSBleGNsdWRlZCkuCisgICAgICAgIC8vIEV4YW1wbGU6IHdpdGggZGVj
aW1hbF9pbl9zaG9ydGVzdF9sb3cgPSAtNiBhbmQKKyAgICAgICAgLy8gICAgICAgICAgICAgICBk
ZWNpbWFsX2luX3Nob3J0ZXN0X2hpZ2ggPSAyMToKKyAgICAgICAgLy8gICBUb1Nob3J0ZXN0KDAu
MDAwMDAxKSAgLT4gIjAuMDAwMDAxIgorICAgICAgICAvLyAgIFRvU2hvcnRlc3QoMC4wMDAwMDAx
KSAtPiAiMWUtNyIKKyAgICAgICAgLy8gICBUb1Nob3J0ZXN0KDExMTExMTExMTExMTExMTExMTEx
MS4wKSAgLT4gIjExMTExMTExMTExMTExMTExMDAwMCIKKyAgICAgICAgLy8gICBUb1Nob3J0ZXN0
KDEwMDAwMDAwMDAwMDAwMDAwMDAwMC4wKSAgLT4gIjEwMDAwMDAwMDAwMDAwMDAwMDAwMCIKKyAg
ICAgICAgLy8gICBUb1Nob3J0ZXN0KDExMTExMTExMTExMTExMTExMTExMTEuMCkgLT4gIjEuMTEx
MTExMTExMTExMTExMWUrMjEiCisgICAgICAgIC8vCisgICAgICAgIC8vIFdoZW4gY29udmVydGlu
ZyB0byBwcmVjaXNpb24gbW9kZSB0aGUgY29udmVydGVyIG1heSBhZGQKKyAgICAgICAgLy8gbWF4
X2xlYWRpbmdfcGFkZGluZ196ZXJvZXMgYmVmb3JlIHJldHVybmluZyB0aGUgbnVtYmVyIGluIGV4
cG9uZW50aWFsCisgICAgICAgIC8vIGZvcm1hdC4KKyAgICAgICAgLy8gRXhhbXBsZSB3aXRoIG1h
eF9sZWFkaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2RlID0gNi4KKyAgICAgICAg
Ly8gICBUb1ByZWNpc2lvbigwLjAwMDAwMTIzNDUsIDIpIC0+ICIwLjAwMDAwMTIiCisgICAgICAg
IC8vICAgVG9QcmVjaXNpb24oMC4wMDAwMDAxMjM0NSwgMikgLT4gIjEuMmUtNyIKKyAgICAgICAg
Ly8gU2ltaWxhcmlseSB0aGUgY29udmVydGVyIG1heSBhZGQgdXAgdG8KKyAgICAgICAgLy8gbWF4
X3RyYWlsaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2RlIGluIHByZWNpc2lvbiBt
b2RlIHRvIGF2b2lkCisgICAgICAgIC8vIHJldHVybmluZyBhbiBleHBvbmVudGlhbCByZXByZXNl
bnRhdGlvbi4gQSB6ZXJvIGFkZGVkIGJ5IHRoZQorICAgICAgICAvLyBFTUlUX1RSQUlMSU5HX1pF
Uk9fQUZURVJfUE9JTlQgZmxhZyBpcyBjb3VudGVkIGZvciB0aGlzIGxpbWl0LgorICAgICAgICAv
LyBFeGFtcGxlcyBmb3IgbWF4X3RyYWlsaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9t
b2RlID0gMToKKyAgICAgICAgLy8gICBUb1ByZWNpc2lvbigyMzAuMCwgMikgLT4gIjIzMCIKKyAg
ICAgICAgLy8gICBUb1ByZWNpc2lvbigyMzAuMCwgMikgLT4gIjIzMC4iICB3aXRoIEVNSVRfVFJB
SUxJTkdfREVDSU1BTF9QT0lOVC4KKyAgICAgICAgLy8gICBUb1ByZWNpc2lvbigyMzAuMCwgMikg
LT4gIjIuM2UyIiB3aXRoIEVNSVRfVFJBSUxJTkdfWkVST19BRlRFUl9QT0lOVC4KKyAgICAgICAg
RG91YmxlVG9TdHJpbmdDb252ZXJ0ZXIoaW50IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiBpbmZpbml0eV9zeW1ib2wsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbl9zeW1ib2wsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoYXIgZXhwb25lbnRfY2hhcmFjdGVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgZGVjaW1hbF9pbl9zaG9ydGVzdF9sb3csCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBkZWNpbWFsX2luX3Nob3J0ZXN0X2hpZ2gsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXhfbGVhZGluZ19wYWRkaW5nX3plcm9l
c19pbl9wcmVjaXNpb25fbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IG1heF90cmFpbGluZ19wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZSkKKyAgICAgICAg
OiBmbGFnc18oZmxhZ3MpLAorICAgICAgICBpbmZpbml0eV9zeW1ib2xfKGluZmluaXR5X3N5bWJv
bCksCisgICAgICAgIG5hbl9zeW1ib2xfKG5hbl9zeW1ib2wpLAorICAgICAgICBleHBvbmVudF9j
aGFyYWN0ZXJfKGV4cG9uZW50X2NoYXJhY3RlciksCisgICAgICAgIGRlY2ltYWxfaW5fc2hvcnRl
c3RfbG93XyhkZWNpbWFsX2luX3Nob3J0ZXN0X2xvdyksCisgICAgICAgIGRlY2ltYWxfaW5fc2hv
cnRlc3RfaGlnaF8oZGVjaW1hbF9pbl9zaG9ydGVzdF9oaWdoKSwKKyAgICAgICAgbWF4X2xlYWRp
bmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGVfKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xlYWRpbmdfcGFkZGluZ196
ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGUpLAorICAgICAgICBtYXhfdHJhaWxpbmdfcGFkZGluZ196
ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGVfKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1heF90cmFpbGluZ19wYWRkaW5nX3plcm9lc19pbl9w
cmVjaXNpb25fbW9kZSkgeworICAgICAgICAgICAgLy8gV2hlbiAndHJhaWxpbmcgemVybyBhZnRl
ciB0aGUgcG9pbnQnIGlzIHNldCwgdGhlbiAndHJhaWxpbmcgcG9pbnQnCisgICAgICAgICAgICAv
LyBtdXN0IGJlIHNldCB0b28uCisgICAgICAgICAgICBBU1NFUlQoKChmbGFncyAmIEVNSVRfVFJB
SUxJTkdfREVDSU1BTF9QT0lOVCkgIT0gMCkgfHwKKyAgICAgICAgICAgICAgICAgICAhKChmbGFn
cyAmIEVNSVRfVFJBSUxJTkdfWkVST19BRlRFUl9QT0lOVCkgIT0gMCkpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICAvLyBSZXR1cm5zIGEgY29udmVydGVyIGZvbGxvd2luZyB0aGUgRWNt
YVNjcmlwdCBzcGVjaWZpY2F0aW9uLgorICAgICAgICBzdGF0aWMgY29uc3QgRG91YmxlVG9TdHJp
bmdDb252ZXJ0ZXImIEVjbWFTY3JpcHRDb252ZXJ0ZXIoKTsKKyAgICAgICAgCisgICAgICAgIC8v
IENvbXB1dGVzIHRoZSBzaG9ydGVzdCBzdHJpbmcgb2YgZGlnaXRzIHRoYXQgY29ycmVjdGx5IHJl
cHJlc2VudCB0aGUgaW5wdXQKKyAgICAgICAgLy8gbnVtYmVyLiBEZXBlbmRpbmcgb24gZGVjaW1h
bF9pbl9zaG9ydGVzdF9sb3cgYW5kIGRlY2ltYWxfaW5fc2hvcnRlc3RfaGlnaAorICAgICAgICAv
LyAoc2VlIGNvbnN0cnVjdG9yKSBpdCB0aGVuIGVpdGhlciByZXR1cm5zIGEgZGVjaW1hbCByZXBy
ZXNlbnRhdGlvbiwgb3IgYW4KKyAgICAgICAgLy8gZXhwb25lbnRpYWwgcmVwcmVzZW50YXRpb24u
CisgICAgICAgIC8vIEV4YW1wbGUgd2l0aCBkZWNpbWFsX2luX3Nob3J0ZXN0X2xvdyA9IC02LAor
ICAgICAgICAvLyAgICAgICAgICAgICAgZGVjaW1hbF9pbl9zaG9ydGVzdF9oaWdoID0gMjEsCisg
ICAgICAgIC8vICAgICAgICAgICAgICBFTUlUX1BPU0lUSVZFX0VYUE9ORU5UX1NJR04gYWN0aXZh
dGVkLCBhbmQKKyAgICAgICAgLy8gICAgICAgICAgICAgIEVNSVRfVFJBSUxJTkdfREVDSU1BTF9Q
T0lOVCBkZWFjdGl2ZWQ6CisgICAgICAgIC8vICAgVG9TaG9ydGVzdCgwLjAwMDAwMSkgIC0+ICIw
LjAwMDAwMSIKKyAgICAgICAgLy8gICBUb1Nob3J0ZXN0KDAuMDAwMDAwMSkgLT4gIjFlLTciCisg
ICAgICAgIC8vICAgVG9TaG9ydGVzdCgxMTExMTExMTExMTExMTExMTExMTEuMCkgIC0+ICIxMTEx
MTExMTExMTExMTExMTAwMDAiCisgICAgICAgIC8vICAgVG9TaG9ydGVzdCgxMDAwMDAwMDAwMDAw
MDAwMDAwMDAuMCkgIC0+ICIxMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisgICAgICAgIC8vICAgVG9T
aG9ydGVzdCgxMTExMTExMTExMTExMTExMTExMTExLjApIC0+ICIxLjExMTExMTExMTExMTExMTFl
KzIxIgorICAgICAgICAvLworICAgICAgICAvLyBOb3RlOiB0aGUgY29udmVyc2lvbiBtYXkgcm91
bmQgdGhlIG91dHB1dCBpZiB0aGUgcmV0dXJuZWQgc3RyaW5nCisgICAgICAgIC8vIGlzIGFjY3Vy
YXRlIGVub3VnaCB0byB1bmlxdWVseSBpZGVudGlmeSB0aGUgaW5wdXQtbnVtYmVyLgorICAgICAg
ICAvLyBGb3IgZXhhbXBsZSB0aGUgbW9zdCBwcmVjaXNlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBk
b3VibGUgOWU1OSBlcXVhbHMKKyAgICAgICAgLy8gIjg5OTk5OTk5OTk5OTk5OTkxODc2NzIyOTQ0
OTcxNzYxOTk1MzgxMDEzMTI3MzY3NDY5MDY1NjIwNjg0OCIsIGJ1dAorICAgICAgICAvLyB0aGUg
Y29udmVydGVyIHdpbGwgcmV0dXJuIHRoZSBzaG9ydGVyIChidXQgc3RpbGwgY29ycmVjdCkgIjll
NTkiLgorICAgICAgICAvLworICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbnZlcnNp
b24gc3VjY2VlZHMuIFRoZSBjb252ZXJzaW9uIGFsd2F5cyBzdWNjZWVkcworICAgICAgICAvLyBl
eGNlcHQgd2hlbiB0aGUgaW5wdXQgdmFsdWUgaXMgc3BlY2lhbCBhbmQgbm8gaW5maW5pdHlfc3lt
Ym9sIG9yCisgICAgICAgIC8vIG5hbl9zeW1ib2wgaGFzIGJlZW4gZ2l2ZW4gdG8gdGhlIGNvbnN0
cnVjdG9yLgorICAgICAgICBib29sIFRvU2hvcnRlc3QoZG91YmxlIHZhbHVlLCBTdHJpbmdCdWls
ZGVyKiByZXN1bHRfYnVpbGRlcikgY29uc3Q7CisgICAgICAgIAorICAgICAgICAKKyAgICAgICAg
Ly8gQ29tcHV0ZXMgYSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIHdpdGggYSBmaXhlZCBudW1iZXIg
b2YgZGlnaXRzIGFmdGVyIHRoZQorICAgICAgICAvLyBkZWNpbWFsIHBvaW50LiBUaGUgbGFzdCBl
bWl0dGVkIGRpZ2l0IGlzIHJvdW5kZWQuCisgICAgICAgIC8vCisgICAgICAgIC8vIEV4YW1wbGVz
OgorICAgICAgICAvLyAgIFRvRml4ZWQoMy4xMiwgMSkgLT4gIjMuMSIKKyAgICAgICAgLy8gICBU
b0ZpeGVkKDMuMTQxNSwgMykgLT4gIjMuMTQyIgorICAgICAgICAvLyAgIFRvRml4ZWQoMTIzNC41
Njc4OSwgNCkgLT4gIjEyMzQuNTY3OSIKKyAgICAgICAgLy8gICBUb0ZpeGVkKDEuMjMsIDUpIC0+
ICIxLjIzMDAwIgorICAgICAgICAvLyAgIFRvRml4ZWQoMC4xLCA0KSAtPiAiMC4xMDAwIgorICAg
ICAgICAvLyAgIFRvRml4ZWQoMWUzMCwgMikgLT4gIjEwMDAwMDAwMDAwMDAwMDAwMTk4ODQ2MjQ4
Mzg2NTYuMDAiCisgICAgICAgIC8vICAgVG9GaXhlZCgwLjEsIDMwKSAtPiAiMC4xMDAwMDAwMDAw
MDAwMDAwMDU1NTExMTUxMjMxMjYiCisgICAgICAgIC8vICAgVG9GaXhlZCgwLjEsIDE3KSAtPiAi
MC4xMDAwMDAwMDAwMDAwMDAwMSIKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgcmVxdWVzdGVk
X2RpZ2l0cyBlcXVhbHMgMCwgdGhlbiB0aGUgdGFpbCBvZiB0aGUgcmVzdWx0IGRlcGVuZHMgb24K
KyAgICAgICAgLy8gdGhlIEVNSVRfVFJBSUxJTkdfREVDSU1BTF9QT0lOVCBhbmQgRU1JVF9UUkFJ
TElOR19aRVJPX0FGVEVSX1BPSU5ULgorICAgICAgICAvLyBFeGFtcGxlcywgZm9yIHJlcXVlc3Rl
ZF9kaWdpdHMgPT0gMCwKKyAgICAgICAgLy8gICBsZXQgRU1JVF9UUkFJTElOR19ERUNJTUFMX1BP
SU5UIGFuZCBFTUlUX1RSQUlMSU5HX1pFUk9fQUZURVJfUE9JTlQgYmUKKyAgICAgICAgLy8gICAg
LSBmYWxzZSBhbmQgZmFsc2U6IHRoZW4gMTIzLjQ1IC0+IDEyMworICAgICAgICAvLyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMC42NzggLT4gMQorICAgICAgICAvLyAgICAtIHRydWUgYW5k
IGZhbHNlOiB0aGVuIDEyMy40NSAtPiAxMjMuCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAuNjc4IC0+IDEuCisgICAgICAgIC8vICAgIC0gdHJ1ZSBhbmQgdHJ1ZTogdGhl
biAxMjMuNDUgLT4gMTIzLjAKKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAw
LjY3OCAtPiAxLjAKKyAgICAgICAgLy8KKyAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBj
b252ZXJzaW9uIHN1Y2NlZWRzLiBUaGUgY29udmVyc2lvbiBhbHdheXMgc3VjY2VlZHMKKyAgICAg
ICAgLy8gZXhjZXB0IGZvciB0aGUgZm9sbG93aW5nIGNhc2VzOgorICAgICAgICAvLyAgIC0gdGhl
IGlucHV0IHZhbHVlIGlzIHNwZWNpYWwgYW5kIG5vIGluZmluaXR5X3N5bWJvbCBvciBuYW5fc3lt
Ym9sIGhhcworICAgICAgICAvLyAgICAgYmVlbiBwcm92aWRlZCB0byB0aGUgY29uc3RydWN0b3Is
CisgICAgICAgIC8vICAgLSAndmFsdWUnID4gMTBea01heEZpeGVkRGlnaXRzQmVmb3JlUG9pbnQs
IG9yCisgICAgICAgIC8vICAgLSAncmVxdWVzdGVkX2RpZ2l0cycgPiBrTWF4Rml4ZWREaWdpdHNB
ZnRlclBvaW50LgorICAgICAgICAvLyBUaGUgbGFzdCB0d28gY29uZGl0aW9ucyBpbXBseSB0aGF0
IHRoZSByZXN1bHQgd2lsbCBuZXZlciBjb250YWluIG1vcmUgdGhhbgorICAgICAgICAvLyAxICsg
a01heEZpeGVkRGlnaXRzQmVmb3JlUG9pbnQgKyAxICsga01heEZpeGVkRGlnaXRzQWZ0ZXJQb2lu
dCBjaGFyYWN0ZXJzCisgICAgICAgIC8vIChvbmUgYWRkaXRpb25hbCBjaGFyYWN0ZXIgZm9yIHRo
ZSBzaWduLCBhbmQgb25lIGZvciB0aGUgZGVjaW1hbCBwb2ludCkuCisgICAgICAgIGJvb2wgVG9G
aXhlZChkb3VibGUgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICBpbnQgcmVxdWVzdGVkX2Rp
Z2l0cywKKyAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVy
KSBjb25zdDsKKyAgICAgICAgCisgICAgICAgIC8vIENvbXB1dGVzIGEgcmVwcmVzZW50YXRpb24g
aW4gZXhwb25lbnRpYWwgZm9ybWF0IHdpdGggcmVxdWVzdGVkX2RpZ2l0cworICAgICAgICAvLyBh
ZnRlciB0aGUgZGVjaW1hbCBwb2ludC4gVGhlIGxhc3QgZW1pdHRlZCBkaWdpdCBpcyByb3VuZGVk
LgorICAgICAgICAvLyBJZiByZXF1ZXN0ZWRfZGlnaXRzIGVxdWFscyAtMSwgdGhlbiB0aGUgc2hv
cnRlc3QgZXhwb25lbnRpYWwgcmVwcmVzZW50YXRpb24KKyAgICAgICAgLy8gaXMgY29tcHV0ZWQu
CisgICAgICAgIC8vCisgICAgICAgIC8vIEV4YW1wbGVzIHdpdGggRU1JVF9QT1NJVElWRV9FWFBP
TkVOVF9TSUdOIGRlYWN0aXZhdGVkLCBhbmQKKyAgICAgICAgLy8gICAgICAgICAgICAgICBleHBv
bmVudF9jaGFyYWN0ZXIgc2V0IHRvICdlJy4KKyAgICAgICAgLy8gICBUb0V4cG9uZW50aWFsKDMu
MTIsIDEpIC0+ICIzLjFlMCIKKyAgICAgICAgLy8gICBUb0V4cG9uZW50aWFsKDUuMCwgMykgLT4g
IjUuMDAwZTAiCisgICAgICAgIC8vICAgVG9FeHBvbmVudGlhbCgwLjAwMSwgMikgLT4gIjEuMDBl
LTMiCisgICAgICAgIC8vICAgVG9FeHBvbmVudGlhbCgzLjE0MTUsIC0xKSAtPiAiMy4xNDE1ZTAi
CisgICAgICAgIC8vICAgVG9FeHBvbmVudGlhbCgzLjE0MTUsIDQpIC0+ICIzLjE0MTVlMCIKKyAg
ICAgICAgLy8gICBUb0V4cG9uZW50aWFsKDMuMTQxNSwgMykgLT4gIjMuMTQyZTAiCisgICAgICAg
IC8vICAgVG9FeHBvbmVudGlhbCgxMjM0NTY3ODkwMDAwMDAsIDMpIC0+ICIxLjIzNWUxNCIKKyAg
ICAgICAgLy8gICBUb0V4cG9uZW50aWFsKDEwMDAwMDAwMDAwMDAwMDAwMTk4ODQ2MjQ4Mzg2NTYu
MCwgLTEpIC0+ICIxZTMwIgorICAgICAgICAvLyAgIFRvRXhwb25lbnRpYWwoMTAwMDAwMDAwMDAw
MDAwMDAxOTg4NDYyNDgzODY1Ni4wLCAzMikgLT4KKyAgICAgICAgLy8gICAgICAgICAgICAgICAg
ICAgICAiMS4wMDAwMDAwMDAwMDAwMDAwMTk4ODQ2MjQ4Mzg2NTYwMGUzMCIKKyAgICAgICAgLy8g
ICBUb0V4cG9uZW50aWFsKDEyMzQsIDApIC0+ICIxZTMiCisgICAgICAgIC8vCisgICAgICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgY29udmVyc2lvbiBzdWNjZWVkcy4gVGhlIGNvbnZlcnNpb24g
YWx3YXlzIHN1Y2NlZWRzCisgICAgICAgIC8vIGV4Y2VwdCBmb3IgdGhlIGZvbGxvd2luZyBjYXNl
czoKKyAgICAgICAgLy8gICAtIHRoZSBpbnB1dCB2YWx1ZSBpcyBzcGVjaWFsIGFuZCBubyBpbmZp
bml0eV9zeW1ib2wgb3IgbmFuX3N5bWJvbCBoYXMKKyAgICAgICAgLy8gICAgIGJlZW4gcHJvdmlk
ZWQgdG8gdGhlIGNvbnN0cnVjdG9yLAorICAgICAgICAvLyAgIC0gJ3JlcXVlc3RlZF9kaWdpdHMn
ID4ga01heEV4cG9uZW50aWFsRGlnaXRzLgorICAgICAgICAvLyBUaGUgbGFzdCBjb25kaXRpb24g
aW1wbGllcyB0aGF0IHRoZSByZXN1bHQgd2lsbCBuZXZlciBjb250YWluIG1vcmUgdGhhbgorICAg
ICAgICAvLyBrTWF4RXhwb25lbnRpYWxEaWdpdHMgKyA4IGNoYXJhY3RlcnMgKHRoZSBzaWduLCB0
aGUgZGlnaXQgYmVmb3JlIHRoZQorICAgICAgICAvLyBkZWNpbWFsIHBvaW50LCB0aGUgZGVjaW1h
bCBwb2ludCwgdGhlIGV4cG9uZW50IGNoYXJhY3RlciwgdGhlCisgICAgICAgIC8vIGV4cG9uZW50
J3Mgc2lnbiwgYW5kIGF0IG1vc3QgMyBleHBvbmVudCBkaWdpdHMpLgorICAgICAgICBib29sIFRv
RXhwb25lbnRpYWwoZG91YmxlIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IHJlcXVlc3RlZF9kaWdpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWls
ZGVyKiByZXN1bHRfYnVpbGRlcikgY29uc3Q7CisgICAgICAgIAorICAgICAgICAvLyBDb21wdXRl
cyAncHJlY2lzaW9uJyBsZWFkaW5nIGRpZ2l0cyBvZiB0aGUgZ2l2ZW4gJ3ZhbHVlJyBhbmQgcmV0
dXJucyB0aGVtCisgICAgICAgIC8vIGVpdGhlciBpbiBleHBvbmVudGlhbCBvciBkZWNpbWFsIGZv
cm1hdCwgZGVwZW5kaW5nIG9uCisgICAgICAgIC8vIG1heF97bGVhZGluZ3x0cmFpbGluZ31fcGFk
ZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGUgKGdpdmVuIHRvIHRoZQorICAgICAgICAvLyBj
b25zdHJ1Y3RvcikuCisgICAgICAgIC8vIFRoZSBsYXN0IGNvbXB1dGVkIGRpZ2l0IGlzIHJvdW5k
ZWQuCisgICAgICAgIC8vCisgICAgICAgIC8vIEV4YW1wbGUgd2l0aCBtYXhfbGVhZGluZ19wYWRk
aW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZSA9IDYuCisgICAgICAgIC8vICAgVG9QcmVjaXNp
b24oMC4wMDAwMDEyMzQ1LCAyKSAtPiAiMC4wMDAwMDEyIgorICAgICAgICAvLyAgIFRvUHJlY2lz
aW9uKDAuMDAwMDAwMTIzNDUsIDIpIC0+ICIxLjJlLTciCisgICAgICAgIC8vIFNpbWlsYXJpbHkg
dGhlIGNvbnZlcnRlciBtYXkgYWRkIHVwIHRvCisgICAgICAgIC8vIG1heF90cmFpbGluZ19wYWRk
aW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZSBpbiBwcmVjaXNpb24gbW9kZSB0byBhdm9pZAor
ICAgICAgICAvLyByZXR1cm5pbmcgYW4gZXhwb25lbnRpYWwgcmVwcmVzZW50YXRpb24uIEEgemVy
byBhZGRlZCBieSB0aGUKKyAgICAgICAgLy8gRU1JVF9UUkFJTElOR19aRVJPX0FGVEVSX1BPSU5U
IGZsYWcgaXMgY291bnRlZCBmb3IgdGhpcyBsaW1pdC4KKyAgICAgICAgLy8gRXhhbXBsZXMgZm9y
IG1heF90cmFpbGluZ19wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZSA9IDE6CisgICAg
ICAgIC8vICAgVG9QcmVjaXNpb24oMjMwLjAsIDIpIC0+ICIyMzAiCisgICAgICAgIC8vICAgVG9Q
cmVjaXNpb24oMjMwLjAsIDIpIC0+ICIyMzAuIiAgd2l0aCBFTUlUX1RSQUlMSU5HX0RFQ0lNQUxf
UE9JTlQuCisgICAgICAgIC8vICAgVG9QcmVjaXNpb24oMjMwLjAsIDIpIC0+ICIyLjNlMiIgd2l0
aCBFTUlUX1RSQUlMSU5HX1pFUk9fQUZURVJfUE9JTlQuCisgICAgICAgIC8vIEV4YW1wbGVzIGZv
ciBtYXhfdHJhaWxpbmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGUgPSAzLCBhbmQg
bm8KKyAgICAgICAgLy8gICAgRU1JVF9UUkFJTElOR19aRVJPX0FGVEVSX1BPSU5UOgorICAgICAg
ICAvLyAgIFRvUHJlY2lzaW9uKDEyMzQ1MC4wLCA2KSAtPiAiMTIzNDUwIgorICAgICAgICAvLyAg
IFRvUHJlY2lzaW9uKDEyMzQ1MC4wLCA1KSAtPiAiMTIzNDUwIgorICAgICAgICAvLyAgIFRvUHJl
Y2lzaW9uKDEyMzQ1MC4wLCA0KSAtPiAiMTIzNTAwIgorICAgICAgICAvLyAgIFRvUHJlY2lzaW9u
KDEyMzQ1MC4wLCAzKSAtPiAiMTIzMDAwIgorICAgICAgICAvLyAgIFRvUHJlY2lzaW9uKDEyMzQ1
MC4wLCAyKSAtPiAiMS4yZTUiCisgICAgICAgIC8vCisgICAgICAgIC8vIFJldHVybnMgdHJ1ZSBp
ZiB0aGUgY29udmVyc2lvbiBzdWNjZWVkcy4gVGhlIGNvbnZlcnNpb24gYWx3YXlzIHN1Y2NlZWRz
CisgICAgICAgIC8vIGV4Y2VwdCBmb3IgdGhlIGZvbGxvd2luZyBjYXNlczoKKyAgICAgICAgLy8g
ICAtIHRoZSBpbnB1dCB2YWx1ZSBpcyBzcGVjaWFsIGFuZCBubyBpbmZpbml0eV9zeW1ib2wgb3Ig
bmFuX3N5bWJvbCBoYXMKKyAgICAgICAgLy8gICAgIGJlZW4gcHJvdmlkZWQgdG8gdGhlIGNvbnN0
cnVjdG9yLAorICAgICAgICAvLyAgIC0gcHJlY2lzaW9uIDwga01pblBlcmljaXNpb25EaWdpdHMK
KyAgICAgICAgLy8gICAtIHByZWNpc2lvbiA+IGtNYXhQcmVjaXNpb25EaWdpdHMKKyAgICAgICAg
Ly8gVGhlIGxhc3QgY29uZGl0aW9uIGltcGxpZXMgdGhhdCB0aGUgcmVzdWx0IHdpbGwgbmV2ZXIg
Y29udGFpbiBtb3JlIHRoYW4KKyAgICAgICAgLy8ga01heFByZWNpc2lvbkRpZ2l0cyArIDcgY2hh
cmFjdGVycyAodGhlIHNpZ24sIHRoZSBkZWNpbWFsIHBvaW50LCB0aGUKKyAgICAgICAgLy8gZXhw
b25lbnQgY2hhcmFjdGVyLCB0aGUgZXhwb25lbnQncyBzaWduLCBhbmQgYXQgbW9zdCAzIGV4cG9u
ZW50IGRpZ2l0cykuCisgICAgICAgIGJvb2wgVG9QcmVjaXNpb24oZG91YmxlIHZhbHVlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBwcmVjaXNpb24sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgU3RyaW5nQnVpbGRlciogcmVzdWx0X2J1aWxkZXIpIGNvbnN0OworICAgICAgICAKKyAg
ICAgICAgZW51bSBEdG9hTW9kZSB7CisgICAgICAgICAgICAvLyBQcm9kdWNlIHRoZSBzaG9ydGVz
dCBjb3JyZWN0IHJlcHJlc2VudGF0aW9uLgorICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGUgdGhl
IG91dHB1dCBvZiAwLjI5OTk5OTk5OTk5OTk5OTk4ODg5NyBpcyAodGhlIGxlc3MgYWNjdXJhdGUK
KyAgICAgICAgICAgIC8vIGJ1dCBjb3JyZWN0KSAwLjMuCisgICAgICAgICAgICBTSE9SVEVTVCwK
KyAgICAgICAgICAgIC8vIFByb2R1Y2UgYSBmaXhlZCBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIHRo
ZSBkZWNpbWFsIHBvaW50LgorICAgICAgICAgICAgLy8gRm9yIGluc3RhbmNlIGZpeGVkKDAuMSwg
NCkgYmVjb21lcyAwLjEwMDAKKyAgICAgICAgICAgIC8vIElmIHRoZSBpbnB1dCBudW1iZXIgaXMg
YmlnLCB0aGUgb3V0cHV0IHdpbGwgYmUgYmlnLgorICAgICAgICAgICAgRklYRUQsCisgICAgICAg
ICAgICAvLyBGaXhlZCBudW1iZXIgb2YgZGlnaXRzIChpbmRlcGVuZGVudCBvZiB0aGUgZGVjaW1h
bCBwb2ludCkuCisgICAgICAgICAgICBQUkVDSVNJT04KKyAgICAgICAgfTsKKyAgICAgICAgCisg
ICAgICAgIC8vIFRoZSBtYXhpbWFsIG51bWJlciBvZiBkaWdpdHMgdGhhdCBhcmUgbmVlZGVkIHRv
IGVtaXQgYSBkb3VibGUgaW4gYmFzZSAxMC4KKyAgICAgICAgLy8gQSBoaWdoZXIgcHJlY2lzaW9u
IGNhbiBiZSBhY2hpZXZlZCBieSB1c2luZyBtb3JlIGRpZ2l0cywgYnV0IHRoZSBzaG9ydGVzdAor
ICAgICAgICAvLyBhY2N1cmF0ZSByZXByZXNlbnRhdGlvbiBvZiBhbnkgZG91YmxlIHdpbGwgbmV2
ZXIgdXNlIG1vcmUgZGlnaXRzIHRoYW4KKyAgICAgICAgLy8ga0Jhc2UxME1heGltYWxMZW5ndGgu
CisgICAgICAgIC8vIE5vdGUgdGhhdCBEb3VibGVUb0FzY2lpIG51bGwtdGVybWluYXRlcyBpdHMg
aW5wdXQuIFNvIHRoZSBnaXZlbiBidWZmZXIKKyAgICAgICAgLy8gc2hvdWxkIGJlIGF0IGxlYXN0
IGtCYXNlMTBNYXhpbWFsTGVuZ3RoICsgMSBjaGFyYWN0ZXJzIGxvbmcuCisgICAgICAgIHN0YXRp
YyBjb25zdCBpbnQga0Jhc2UxME1heGltYWxMZW5ndGggPSAxNzsKKyAgICAgICAgCisgICAgICAg
IC8vIENvbnZlcnRzIHRoZSBnaXZlbiBkb3VibGUgJ3YnIHRvIGFzY2lpLgorICAgICAgICAvLyBU
aGUgcmVzdWx0IHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBidWZmZXIgKiAxMF4ocG9pbnQtbGVu
Z3RoKS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhlIG91dHB1dCBkZXBlbmRzIG9uIHRoZSBn
aXZlbiBtb2RlOgorICAgICAgICAvLyAgLSBTSE9SVEVTVDogcHJvZHVjZSB0aGUgbGVhc3QgYW1v
dW50IG9mIGRpZ2l0cyBmb3Igd2hpY2ggdGhlIGludGVybmFsCisgICAgICAgIC8vICAgaWRlbnRp
dHkgcmVxdWlyZW1lbnQgaXMgc3RpbGwgc2F0aXNmaWVkLiBJZiB0aGUgZGlnaXRzIGFyZSBwcmlu
dGVkCisgICAgICAgIC8vICAgKHRvZ2V0aGVyIHdpdGggdGhlIGNvcnJlY3QgZXhwb25lbnQpIHRo
ZW4gcmVhZGluZyB0aGlzIG51bWJlciB3aWxsIGdpdmUKKyAgICAgICAgLy8gICAndicgYWdhaW4u
IFRoZSBidWZmZXIgd2lsbCBjaG9vc2UgdGhlIHJlcHJlc2VudGF0aW9uIHRoYXQgaXMgY2xvc2Vz
dCB0bworICAgICAgICAvLyAgICd2Jy4gSWYgdGhlcmUgYXJlIHR3byBhdCB0aGUgc2FtZSBkaXN0
YW5jZSwgdGhhbiB0aGUgb25lIGZhcnRoZXIgYXdheQorICAgICAgICAvLyAgIGZyb20gMCBpcyBj
aG9zZW4gKGhhbGZ3YXkgY2FzZXMgLSBlbmRpbmcgd2l0aCA1IC0gYXJlIHJvdW5kZWQgdXApLgor
ICAgICAgICAvLyAgIEluIHRoaXMgbW9kZSB0aGUgJ3JlcXVlc3RlZF9kaWdpdHMnIHBhcmFtZXRl
ciBpcyBpZ25vcmVkLgorICAgICAgICAvLyAgLSBGSVhFRDogcHJvZHVjZXMgZGlnaXRzIG5lY2Vz
c2FyeSB0byBwcmludCBhIGdpdmVuIG51bWJlciB3aXRoCisgICAgICAgIC8vICAgJ3JlcXVlc3Rl
ZF9kaWdpdHMnIGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludC4gVGhlIHByb2R1Y2VkIGRp
Z2l0cworICAgICAgICAvLyAgIG1pZ2h0IGJlIHRvbyBzaG9ydCBpbiB3aGljaCBjYXNlIHRoZSBj
YWxsZXIgaGFzIHRvIGZpbGwgdGhlIHJlbWFpbmRlcgorICAgICAgICAvLyAgIHdpdGggJzAncy4K
KyAgICAgICAgLy8gICBFeGFtcGxlOiB0b0ZpeGVkKDAuMDAxLCA1KSBpcyBhbGxvd2VkIHRvIHJl
dHVybiBidWZmZXI9IjEiLCBwb2ludD0tMi4KKyAgICAgICAgLy8gICBIYWxmd2F5IGNhc2VzIGFy
ZSByb3VuZGVkIHRvd2FyZHMgKy8tSW5maW5pdHkgKGF3YXkgZnJvbSAwKS4gVGhlIGNhbGwKKyAg
ICAgICAgLy8gICB0b0ZpeGVkKDAuMTUsIDIpIHRodXMgcmV0dXJucyBidWZmZXI9IjIiLCBwb2lu
dD0wLgorICAgICAgICAvLyAgIFRoZSByZXR1cm5lZCBidWZmZXIgbWF5IGNvbnRhaW4gZGlnaXRz
IHRoYXQgd291bGQgYmUgdHJ1bmNhdGVkIGZyb20gdGhlCisgICAgICAgIC8vICAgc2hvcnRlc3Qg
cmVwcmVzZW50YXRpb24gb2YgdGhlIGlucHV0LgorICAgICAgICAvLyAgLSBQUkVDSVNJT046IHBy
b2R1Y2VzICdyZXF1ZXN0ZWRfZGlnaXRzJyB3aGVyZSB0aGUgZmlyc3QgZGlnaXQgaXMgbm90ICcw
Jy4KKyAgICAgICAgLy8gICBFdmVuIHRob3VnaCB0aGUgbGVuZ3RoIG9mIHByb2R1Y2VkIGRpZ2l0
cyB1c3VhbGx5IGVxdWFscworICAgICAgICAvLyAgICdyZXF1ZXN0ZWRfZGlnaXRzJywgdGhlIGZ1
bmN0aW9uIGlzIGFsbG93ZWQgdG8gcmV0dXJuIGZld2VyIGRpZ2l0cywgaW4KKyAgICAgICAgLy8g
ICB3aGljaCBjYXNlIHRoZSBjYWxsZXIgaGFzIHRvIGZpbGwgdGhlIG1pc3NpbmcgZGlnaXRzIHdp
dGggJzAncy4KKyAgICAgICAgLy8gICBIYWxmd2F5IGNhc2VzIGFyZSBhZ2FpbiByb3VuZGVkIGF3
YXkgZnJvbSAwLgorICAgICAgICAvLyBEb3VibGVUb0FzY2lpIGV4cGVjdHMgdGhlIGdpdmVuIGJ1
ZmZlciB0byBiZSBiaWcgZW5vdWdoIHRvIGhvbGQgYWxsCisgICAgICAgIC8vIGRpZ2l0cyBhbmQg
YSB0ZXJtaW5hdGluZyBudWxsLWNoYXJhY3Rlci4gSW4gU0hPUlRFU1QtbW9kZSBpdCBleHBlY3Rz
IGEKKyAgICAgICAgLy8gYnVmZmVyIG9mIGF0IGxlYXN0IGtCYXNlMTBNYXhpbWFsTGVuZ3RoICsg
MS4gSW4gYWxsIG90aGVyIG1vZGVzIHRoZQorICAgICAgICAvLyByZXF1ZXN0ZWRfZGlnaXRzIHBh
cmFtZXRlciAoKyAxIGZvciB0aGUgbnVsbC1jaGFyYWN0ZXIpIGxpbWl0cyB0aGUgc2l6ZSBvZgor
ICAgICAgICAvLyB0aGUgb3V0cHV0LiBUaGUgZ2l2ZW4gbGVuZ3RoIGlzIG9ubHkgdXNlZCBpbiBk
ZWJ1ZyBtb2RlIHRvIGVuc3VyZSB0aGUKKyAgICAgICAgLy8gYnVmZmVyIGlzIGJpZyBlbm91Z2gu
CisgICAgICAgIHN0YXRpYyB2b2lkIERvdWJsZVRvQXNjaWkoZG91YmxlIHYsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRHRvYU1vZGUgbW9kZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGFyKiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGJ1ZmZlcl9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCogc2lnbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQq
IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHBvaW50KTsK
KyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgLy8gSWYgdGhlIHZhbHVlIGlzIGEgc3Bl
Y2lhbCB2YWx1ZSAoTmFOIG9yIEluZmluaXR5KSBjb25zdHJ1Y3RzIHRoZQorICAgICAgICAvLyBj
b3JyZXNwb25kaW5nIHN0cmluZyB1c2luZyB0aGUgY29uZmlndXJlZCBpbmZpbml0eS9uYW4tc3lt
Ym9sLgorICAgICAgICAvLyBJZiBlaXRoZXIgb2YgdGhlbSBpcyBOVUxMIG9yIHRoZSB2YWx1ZSBp
cyBub3Qgc3BlY2lhbCB0aGVuIHRoZQorICAgICAgICAvLyBmdW5jdGlvbiByZXR1cm5zIGZhbHNl
LgorICAgICAgICBib29sIEhhbmRsZVNwZWNpYWxWYWx1ZXMoZG91YmxlIHZhbHVlLCBTdHJpbmdC
dWlsZGVyKiByZXN1bHRfYnVpbGRlcikgY29uc3Q7CisgICAgICAgIC8vIENvbnN0cnVjdHMgYW4g
ZXhwb25lbnRpYWwgcmVwcmVzZW50YXRpb24gKGkuZS4gMS4yMzRlNTYpLgorICAgICAgICAvLyBU
aGUgZ2l2ZW4gZXhwb25lbnQgYXNzdW1lcyBhIGRlY2ltYWwgcG9pbnQgYWZ0ZXIgdGhlIGZpcnN0
IGRlY2ltYWwgZGlnaXQuCisgICAgICAgIHZvaWQgQ3JlYXRlRXhwb25lbnRpYWxSZXByZXNlbnRh
dGlvbihjb25zdCBjaGFyKiBkZWNpbWFsX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyKiByZXN1bHRfYnVpbGRlcikg
Y29uc3Q7CisgICAgICAgIC8vIENyZWF0ZXMgYSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIChpLmUg
MTIzNC41Njc4KS4KKyAgICAgICAgdm9pZCBDcmVhdGVEZWNpbWFsUmVwcmVzZW50YXRpb24oY29u
c3QgY2hhciogZGVjaW1hbF9kaWdpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBkZWNpbWFsX3BvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgZGlnaXRzX2FmdGVyX3BvaW50LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyKiByZXN1bHRfYnVpbGRlcikgY29uc3Q7
CisgICAgICAgIAorICAgICAgICBjb25zdCBpbnQgZmxhZ3NfOworICAgICAgICBjb25zdCBjaGFy
KiBjb25zdCBpbmZpbml0eV9zeW1ib2xfOworICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBuYW5f
c3ltYm9sXzsKKyAgICAgICAgY29uc3QgY2hhciBleHBvbmVudF9jaGFyYWN0ZXJfOworICAgICAg
ICBjb25zdCBpbnQgZGVjaW1hbF9pbl9zaG9ydGVzdF9sb3dfOworICAgICAgICBjb25zdCBpbnQg
ZGVjaW1hbF9pbl9zaG9ydGVzdF9oaWdoXzsKKyAgICAgICAgY29uc3QgaW50IG1heF9sZWFkaW5n
X3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2RlXzsKKyAgICAgICAgY29uc3QgaW50IG1h
eF90cmFpbGluZ19wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZV87CisgICAgICAgIAor
ICAgICAgICBESVNBTExPV19JTVBMSUNJVF9DT05TVFJVQ1RPUlMoRG91YmxlVG9TdHJpbmdDb252
ZXJ0ZXIpOworICAgIH07CisgICAgCisgICAgCisgICAgY2xhc3MgU3RyaW5nVG9Eb3VibGVDb252
ZXJ0ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgLy8gRW51bWVyYXRpb24gZm9yIGFsbG93aW5n
IG9jdGFscyBhbmQgaWdub3JpbmcganVuayB3aGVuIGNvbnZlcnRpbmcKKyAgICAgICAgLy8gc3Ry
aW5ncyB0byBudW1iZXJzLgorICAgICAgICBlbnVtIEZsYWdzIHsKKyAgICAgICAgICAgIE5PX0ZM
QUdTID0gMCwKKyAgICAgICAgICAgIEFMTE9XX0hFWCA9IDEsCisgICAgICAgICAgICBBTExPV19P
Q1RBTFMgPSAyLAorICAgICAgICAgICAgQUxMT1dfVFJBSUxJTkdfSlVOSyA9IDQsCisgICAgICAg
ICAgICBBTExPV19MRUFESU5HX1NQQUNFUyA9IDgsCisgICAgICAgICAgICBBTExPV19UUkFJTElO
R19TUEFDRVMgPSAxNiwKKyAgICAgICAgICAgIEFMTE9XX1NQQUNFU19BRlRFUl9TSUdOID0gMzIK
KyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIC8vIEZsYWdzIHNob3VsZCBiZSBhIGJpdC1v
ciBjb21iaW5hdGlvbiBvZiB0aGUgcG9zc2libGUgRmxhZ3MtZW51bS4KKyAgICAgICAgLy8gIC0g
Tk9fRkxBR1M6IG5vIHNwZWNpYWwgZmxhZ3MuCisgICAgICAgIC8vICAtIEFMTE9XX0hFWDogcmVj
b2duaXplcyB0aGUgcHJlZml4ICIweCIuIEhleCBudW1iZXJzIG1heSBvbmx5IGJlIGludGVnZXJz
LgorICAgICAgICAvLyAgICAgIEV4OiBTdHJpbmdUb0RvdWJsZSgiMHgxMjM0IikgLT4gNDY2MC4w
CisgICAgICAgIC8vICAgICAgICAgIEluIFN0cmluZ1RvRG91YmxlKCIweDEyMzQuNTYiKSB0aGUg
Y2hhcmFjdGVycyAiLjU2IiBhcmUgdHJhaWxpbmcKKyAgICAgICAgLy8gICAgICAgICAganVuay4g
VGhlIHJlc3VsdCBvZiB0aGUgY2FsbCBpcyBoZW5jZSBkZXBlbmRlbnQgb24KKyAgICAgICAgLy8g
ICAgICAgICAgdGhlIEFMTE9XX1RSQUlMSU5HX0pVTksgZmxhZyBhbmQvb3IgdGhlIGp1bmsgdmFs
dWUuCisgICAgICAgIC8vICAgICAgV2l0aCB0aGlzIGZsYWcgIjB4IiBpcyBhIGp1bmstc3RyaW5n
LiBFdmVuIHdpdGggQUxMT1dfVFJBSUxJTkdfSlVOSywKKyAgICAgICAgLy8gICAgICB0aGUgc3Ry
aW5nIHdpbGwgbm90IGJlIHBhcnNlZCBhcyAiMCIgZm9sbG93ZWQgYnkganVuay4KKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gIC0gQUxMT1dfT0NUQUxTOiByZWNvZ25pemVzIHRoZSBwcmVmaXggIjAi
IGZvciBvY3RhbHM6CisgICAgICAgIC8vICAgICAgSWYgYSBzZXF1ZW5jZSBvZiBvY3RhbCBkaWdp
dHMgc3RhcnRzIHdpdGggJzAnLCB0aGVuIHRoZSBudW1iZXIgaXMKKyAgICAgICAgLy8gICAgICBy
ZWFkIGFzIG9jdGFsIGludGVnZXIuIE9jdGFsIG51bWJlcnMgbWF5IG9ubHkgYmUgaW50ZWdlcnMu
CisgICAgICAgIC8vICAgICAgRXg6IFN0cmluZ1RvRG91YmxlKCIwMTIzNCIpIC0+IDY2OC4wCisg
ICAgICAgIC8vICAgICAgICAgIFN0cmluZ1RvRG91YmxlKCIwMTIzNDkiKSAtPiAxMjM0OS4wICAv
LyBOb3QgYSBzZXF1ZW5jZSBvZiBvY3RhbAorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGlnaXRzLgorICAgICAgICAvLyAgICAgICAg
ICBJbiBTdHJpbmdUb0RvdWJsZSgiMDEyMzQuNTYiKSB0aGUgY2hhcmFjdGVycyAiLjU2IiBhcmUg
dHJhaWxpbmcKKyAgICAgICAgLy8gICAgICAgICAganVuay4gVGhlIHJlc3VsdCBvZiB0aGUgY2Fs
bCBpcyBoZW5jZSBkZXBlbmRlbnQgb24KKyAgICAgICAgLy8gICAgICAgICAgdGhlIEFMTE9XX1RS
QUlMSU5HX0pVTksgZmxhZyBhbmQvb3IgdGhlIGp1bmsgdmFsdWUuCisgICAgICAgIC8vICAgICAg
ICAgIEluIFN0cmluZ1RvRG91YmxlKCIwMTIzNGU1NiIpIHRoZSBjaGFyYWN0ZXJzICJlNTYiIGFy
ZSB0cmFpbGluZworICAgICAgICAvLyAgICAgICAgICBqdW5rLCB0b28uCisgICAgICAgIC8vICAt
IEFMTE9XX1RSQUlMSU5HX0pVTks6IGlnbm9yZSB0cmFpbGluZyBjaGFyYWN0ZXJzIHRoYXQgYXJl
IG5vdCBwYXJ0IG9mCisgICAgICAgIC8vICAgICAgYSBkb3VibGUgbGl0ZXJhbC4KKyAgICAgICAg
Ly8gIC0gQUxMT1dfTEVBRElOR19TUEFDRVM6IHNraXAgb3ZlciBsZWFkaW5nIHNwYWNlcy4KKyAg
ICAgICAgLy8gIC0gQUxMT1dfVFJBSUxJTkdfU1BBQ0VTOiBpZ25vcmUgdHJhaWxpbmcgc3BhY2Vz
LgorICAgICAgICAvLyAgLSBBTExPV19TUEFDRVNfQUZURVJfU0lHTjogaWdub3JlIHNwYWNlcyBh
ZnRlciB0aGUgc2lnbi4KKyAgICAgICAgLy8gICAgICAgRXg6IFN0cmluZ1RvRG91YmxlKCItICAg
MTIzLjIiKSAtPiAtMTIzLjIuCisgICAgICAgIC8vICAgICAgICAgICBTdHJpbmdUb0RvdWJsZSgi
KyAgIDEyMy4yIikgLT4gMTIzLjIKKyAgICAgICAgLy8KKyAgICAgICAgLy8gZW1wdHlfc3RyaW5n
X3ZhbHVlIGlzIHJldHVybmVkIHdoZW4gYW4gZW1wdHkgc3RyaW5nIGlzIGdpdmVuIGFzIGlucHV0
LgorICAgICAgICAvLyBJZiBBTExPV19MRUFESU5HX1NQQUNFUyBvciBBTExPV19UUkFJTElOR19T
UEFDRVMgYXJlIHNldCwgdGhlbiBhIHN0cmluZworICAgICAgICAvLyBjb250YWluaW5nIG9ubHkg
c3BhY2VzIGlzIGNvbnZlcnRlZCB0byB0aGUgJ2VtcHR5X3N0cmluZ192YWx1ZScsIHRvby4KKyAg
ICAgICAgLy8KKyAgICAgICAgLy8ganVua19zdHJpbmdfdmFsdWUgaXMgcmV0dXJuZWQgd2hlbgor
ICAgICAgICAvLyAgYSkgQUxMT1dfVFJBSUxJTkdfSlVOSyBpcyBub3Qgc2V0LCBhbmQgYSBqdW5r
IGNoYXJhY3RlciAoYSBjaGFyYWN0ZXIgbm90CisgICAgICAgIC8vICAgICBwYXJ0IG9mIGEgZG91
YmxlLWxpdGVyYWwpIGlzIGZvdW5kLgorICAgICAgICAvLyAgYikgQUxMT1dfVFJBSUxJTkdfSlVO
SyBpcyBzZXQsIGJ1dCB0aGUgc3RyaW5nIGRvZXMgbm90IHN0YXJ0IHdpdGggYQorICAgICAgICAv
LyAgICAgZG91YmxlIGxpdGVyYWwuCisgICAgICAgIC8vCisgICAgICAgIC8vIGluZmluaXR5X3N5
bWJvbCBhbmQgbmFuX3N5bWJvbCBhcmUgc3RyaW5ncyB0aGF0IGFyZSB1c2VkIHRvIGRldGVjdAor
ICAgICAgICAvLyBpbnB1dHMgdGhhdCByZXByZXNlbnQgaW5maW5pdHkgYW5kIE5hTi4gVGhleSBj
YW4gYmUgbnVsbCwgaW4gd2hpY2ggY2FzZQorICAgICAgICAvLyB0aGV5IGFyZSBpZ25vcmVkLgor
ICAgICAgICAvLyBUaGUgY29udmVyc2lvbiByb3V0aW5lIGZpcnN0IHJlYWRzIGFueSBwb3NzaWJs
ZSBzaWducy4gVGhlbiBpdCBjb21wYXJlcyB0aGUKKyAgICAgICAgLy8gZm9sbG93aW5nIGNoYXJh
Y3RlciBvZiB0aGUgaW5wdXQtc3RyaW5nIHdpdGggdGhlIGZpcnN0IGNoYXJhY3RlciBvZgorICAg
ICAgICAvLyB0aGUgaW5maW5pdHksIGFuZCBuYW4tc3ltYm9sLiBJZiBlaXRoZXIgbWF0Y2hlcywg
dGhlIGZ1bmN0aW9uIGFzc3VtZXMsIHRoYXQKKyAgICAgICAgLy8gYSBtYXRjaCBoYXMgYmVlbiBm
b3VuZCwgYW5kIGV4cGVjdHMgdGhlIGZvbGxvd2luZyBpbnB1dCBjaGFyYWN0ZXJzIHRvIG1hdGNo
CisgICAgICAgIC8vIHRoZSByZW1haW5pbmcgY2hhcmFjdGVycyBvZiB0aGUgc3BlY2lhbC12YWx1
ZSBzeW1ib2wuCisgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgZm9sbG93aW5nIHJlc3Ry
aWN0aW9ucyBhcHBseSB0byBzcGVjaWFsLXZhbHVlIHN5bWJvbHM6CisgICAgICAgIC8vICAtIHRo
ZXkgbXVzdCBub3Qgc3RhcnQgd2l0aCBzaWducyAoJysnLCBvciAnLScpLAorICAgICAgICAvLyAg
LSB0aGV5IG11c3Qgbm90IGhhdmUgdGhlIHNhbWUgZmlyc3QgY2hhcmFjdGVyLgorICAgICAgICAv
LyAgLSB0aGV5IG11c3Qgbm90IHN0YXJ0IHdpdGggZGlnaXRzLgorICAgICAgICAvLworICAgICAg
ICAvLyBFeGFtcGxlczoKKyAgICAgICAgLy8gIGZsYWdzID0gQUxMT1dfSEVYIHwgQUxMT1dfVFJB
SUxJTkdfSlVOSywKKyAgICAgICAgLy8gIGVtcHR5X3N0cmluZ192YWx1ZSA9IDAuMCwKKyAgICAg
ICAgLy8gIGp1bmtfc3RyaW5nX3ZhbHVlID0gTmFOLAorICAgICAgICAvLyAgaW5maW5pdHlfc3lt
Ym9sID0gImluZmluaXR5IiwKKyAgICAgICAgLy8gIG5hbl9zeW1ib2wgPSAibmFuIjoKKyAgICAg
ICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjB4MTIzNCIpIC0+IDQ2NjAuMC4KKyAgICAgICAgLy8g
ICAgU3RyaW5nVG9Eb3VibGUoIjB4MTIzNEsiKSAtPiA0NjYwLjAuCisgICAgICAgIC8vICAgIFN0
cmluZ1RvRG91YmxlKCIiKSAtPiAwLjAgIC8vIGVtcHR5X3N0cmluZ192YWx1ZS4KKyAgICAgICAg
Ly8gICAgU3RyaW5nVG9Eb3VibGUoIiAiKSAtPiBOYU4gIC8vIGp1bmtfc3RyaW5nX3ZhbHVlLgor
ICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiIDEiKSAtPiBOYU4gIC8vIGp1bmtfc3RyaW5n
X3ZhbHVlLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMHgiKSAtPiBOYU4gIC8vIGp1
bmtfc3RyaW5nX3ZhbHVlLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiLTEyMy40NSIp
IC0+IC0xMjMuNDUuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCItLTEyMy40NSIpIC0+
IE5hTiAgLy8ganVua19zdHJpbmdfdmFsdWUuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91Ymxl
KCIxMjNlNDUiKSAtPiAxMjNlNDUuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIxMjNF
NDUiKSAtPiAxMjNlNDUuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIxMjNlKzQ1Iikg
LT4gMTIzZTQ1LgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMTIzRS00NSIpIC0+IDEy
M2UtNDUuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIxMjNlIikgLT4gMTIzLjAgIC8v
IHRyYWlsaW5nIGp1bmsgaWdub3JlZC4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjEy
M2UtIikgLT4gMTIzLjAgIC8vIHRyYWlsaW5nIGp1bmsgaWdub3JlZC4KKyAgICAgICAgLy8gICAg
U3RyaW5nVG9Eb3VibGUoIitOYU4iKSAtPiBOYU4gIC8vIE5hTiBzdHJpbmcgbGl0ZXJhbC4KKyAg
ICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIi1pbmZpbml0eSIpIC0+IC1pbmYuICAvLyBpbmZp
bml0eSBsaXRlcmFsLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiSW5maW5pdHkiKSAt
PiBOYU4gIC8vIGp1bmtfc3RyaW5nX3ZhbHVlLgorICAgICAgICAvLworICAgICAgICAvLyAgZmxh
Z3MgPSBBTExPV19PQ1RBTCB8IEFMTE9XX0xFQURJTkdfU1BBQ0VTLAorICAgICAgICAvLyAgZW1w
dHlfc3RyaW5nX3ZhbHVlID0gMC4wLAorICAgICAgICAvLyAganVua19zdHJpbmdfdmFsdWUgPSBO
YU4sCisgICAgICAgIC8vICBpbmZpbml0eV9zeW1ib2wgPSBOVUxMLAorICAgICAgICAvLyAgbmFu
X3N5bWJvbCA9IE5VTEw6CisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIweDEyMzQiKSAt
PiBOYU4gIC8vIGp1bmtfc3RyaW5nX3ZhbHVlLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJs
ZSgiMDEyMzQiKSAtPiA2NjguMC4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIiIpIC0+
IDAuMCAgLy8gZW1wdHlfc3RyaW5nX3ZhbHVlLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJs
ZSgiICIpIC0+IDAuMCAgLy8gZW1wdHlfc3RyaW5nX3ZhbHVlLgorICAgICAgICAvLyAgICBTdHJp
bmdUb0RvdWJsZSgiIDEiKSAtPiAxLjAKKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjB4
IikgLT4gTmFOICAvLyBqdW5rX3N0cmluZ192YWx1ZS4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9E
b3VibGUoIjAxMjNlNDUiKSAtPiBOYU4gIC8vIGp1bmtfc3RyaW5nX3ZhbHVlLgorICAgICAgICAv
LyAgICBTdHJpbmdUb0RvdWJsZSgiMDEyMzlFNDUiKSAtPiAxMjM5ZTQ1LgorICAgICAgICAvLyAg
ICBTdHJpbmdUb0RvdWJsZSgiLWluZmluaXR5IikgLT4gTmFOICAvLyBqdW5rX3N0cmluZ192YWx1
ZS4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIk5hTiIpIC0+IE5hTiAgLy8ganVua19z
dHJpbmdfdmFsdWUuCisgICAgICAgIFN0cmluZ1RvRG91YmxlQ29udmVydGVyKGludCBmbGFncywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGVtcHR5X3N0cmluZ192YWx1
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGp1bmtfc3RyaW5nX3Zh
bHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBpbmZpbml0
eV9zeW1ib2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5h
bl9zeW1ib2wpCisgICAgICAgIDogZmxhZ3NfKGZsYWdzKSwKKyAgICAgICAgZW1wdHlfc3RyaW5n
X3ZhbHVlXyhlbXB0eV9zdHJpbmdfdmFsdWUpLAorICAgICAgICBqdW5rX3N0cmluZ192YWx1ZV8o
anVua19zdHJpbmdfdmFsdWUpLAorICAgICAgICBpbmZpbml0eV9zeW1ib2xfKGluZmluaXR5X3N5
bWJvbCksCisgICAgICAgIG5hbl9zeW1ib2xfKG5hbl9zeW1ib2wpIHsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgLy8gUGVyZm9ybXMgdGhlIGNvbnZlcnNpb24uCisgICAgICAgIC8vIFRo
ZSBvdXRwdXQgcGFyYW1ldGVyICdwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCcgaXMgc2V0IHRv
IHRoZSBudW1iZXIKKyAgICAgICAgLy8gb2YgY2hhcmFjdGVycyB0aGF0IGhhdmUgYmVlbiBwcm9j
ZXNzZWQgdG8gcmVhZCB0aGUgbnVtYmVyLgorICAgICAgICAvLyBTcGFjZXMgdGhhbiBhcmUgcHJv
Y2Vzc2VkIHdpdGggQUxMT1dfe0xFQURJTkd8VFJBSUxJTkd9X1NQQUNFUyBhcmUgaW5jbHVkZWQK
KyAgICAgICAgLy8gaW4gdGhlICdwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCcuIFRyYWlsaW5n
IGp1bmsgaXMgbmV2ZXIgaW5jbHVkZWQuCisgICAgICAgIGRvdWJsZSBTdHJpbmdUb0RvdWJsZShj
b25zdCBjaGFyKiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVu
Z3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBwcm9jZXNzZWRfY2hhcmFj
dGVyc19jb3VudCk7CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IGludCBm
bGFnc187CisgICAgICAgIGNvbnN0IGRvdWJsZSBlbXB0eV9zdHJpbmdfdmFsdWVfOworICAgICAg
ICBjb25zdCBkb3VibGUganVua19zdHJpbmdfdmFsdWVfOworICAgICAgICBjb25zdCBjaGFyKiBj
b25zdCBpbmZpbml0eV9zeW1ib2xfOworICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBuYW5fc3lt
Ym9sXzsKKyAgICAgICAgCisgICAgICAgIERJU0FMTE9XX0lNUExJQ0lUX0NPTlNUUlVDVE9SUyhT
dHJpbmdUb0RvdWJsZUNvbnZlcnRlcik7CisgICAgfTsKKyAgICAKK30gIC8vIG5hbWVzcGFjZSBk
b3VibGVfY29udmVyc2lvbgorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmICAvLyBET1VC
TEVfQ09OVkVSU0lPTl9ET1VCTEVfQ09OVkVSU0lPTl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2RvdWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9kdG9hL2RvdWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA1NDRmZGI1YTgxN2ZhODIxNmIzZTMxZTY1YTMx
OTEyZjA3ODcyMjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L2R0b2EvZG91YmxlLmgKQEAgLTAsMCArMSwyNDkgQEAKKy8vIENvcHlyaWdodCAyMDEwIHRoZSBW
OCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisv
LworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworI2lmbmRlZiBET1VCTEVfQ09OVkVSU0lPTl9ET1VCTEVfSF8KKyNkZWZpbmUgRE9VQkxF
X0NPTlZFUlNJT05fRE9VQkxFX0hfCisKKyNpbmNsdWRlICJkaXktZnAuaCIKKworbmFtZXNwYWNl
IFdURiB7CisKK25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgLy8gV2Ug
YXNzdW1lIHRoYXQgZG91YmxlcyBhbmQgdWludDY0X3QgaGF2ZSB0aGUgc2FtZSBlbmRpYW5uZXNz
LgorICAgIHN0YXRpYyB1aW50NjRfdCBkb3VibGVfdG9fdWludDY0KGRvdWJsZSBkKSB7IHJldHVy
biBCaXRDYXN0PHVpbnQ2NF90PihkKTsgfQorICAgIHN0YXRpYyBkb3VibGUgdWludDY0X3RvX2Rv
dWJsZSh1aW50NjRfdCBkNjQpIHsgcmV0dXJuIEJpdENhc3Q8ZG91YmxlPihkNjQpOyB9CisgICAg
CisgICAgLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgZG91Ymxlcy4KKyAgICBjbGFzcyBEb3VibGUg
eworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGtTaWduTWFzayA9
IFVJTlQ2NF8yUEFSVF9DKDB4ODAwMDAwMDAsIDAwMDAwMDAwKTsKKyAgICAgICAgc3RhdGljIGNv
bnN0IHVpbnQ2NF90IGtFeHBvbmVudE1hc2sgPSBVSU5UNjRfMlBBUlRfQygweDdGRjAwMDAwLCAw
MDAwMDAwMCk7CisgICAgICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBrU2lnbmlmaWNhbmRNYXNr
ID0gVUlOVDY0XzJQQVJUX0MoMHgwMDBGRkZGRiwgRkZGRkZGRkYpOworICAgICAgICBzdGF0aWMg
Y29uc3QgdWludDY0X3Qga0hpZGRlbkJpdCA9IFVJTlQ2NF8yUEFSVF9DKDB4MDAxMDAwMDAsIDAw
MDAwMDAwKTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBrUGh5c2ljYWxTaWduaWZpY2FuZFNp
emUgPSA1MjsgIC8vIEV4Y2x1ZGVzIHRoZSBoaWRkZW4gYml0LgorICAgICAgICBzdGF0aWMgY29u
c3QgaW50IGtTaWduaWZpY2FuZFNpemUgPSA1MzsKKyAgICAgICAgCisgICAgICAgIERvdWJsZSgp
IDogZDY0XygwKSB7fQorICAgICAgICBleHBsaWNpdCBEb3VibGUoZG91YmxlIGQpIDogZDY0Xyhk
b3VibGVfdG9fdWludDY0KGQpKSB7fQorICAgICAgICBleHBsaWNpdCBEb3VibGUodWludDY0X3Qg
ZDY0KSA6IGQ2NF8oZDY0KSB7fQorICAgICAgICBleHBsaWNpdCBEb3VibGUoRGl5RnAgZGl5X2Zw
KQorICAgICAgICA6IGQ2NF8oRGl5RnBUb1VpbnQ2NChkaXlfZnApKSB7fQorICAgICAgICAKKyAg
ICAgICAgLy8gVGhlIHZhbHVlIGVuY29kZWQgYnkgdGhpcyBEb3VibGUgbXVzdCBiZSBncmVhdGVy
IG9yIGVxdWFsIHRvICswLjAuCisgICAgICAgIC8vIEl0IG11c3Qgbm90IGJlIHNwZWNpYWwgKGlu
ZmluaXR5LCBvciBOYU4pLgorICAgICAgICBEaXlGcCBBc0RpeUZwKCkgY29uc3QgeworICAgICAg
ICAgICAgQVNTRVJUKFNpZ24oKSA+IDApOworICAgICAgICAgICAgQVNTRVJUKCFJc1NwZWNpYWwo
KSk7CisgICAgICAgICAgICByZXR1cm4gRGl5RnAoU2lnbmlmaWNhbmQoKSwgRXhwb25lbnQoKSk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSB2YWx1ZSBlbmNvZGVkIGJ5IHRo
aXMgRG91YmxlIG11c3QgYmUgc3RyaWN0bHkgZ3JlYXRlciB0aGFuIDAuCisgICAgICAgIERpeUZw
IEFzTm9ybWFsaXplZERpeUZwKCkgY29uc3QgeworICAgICAgICAgICAgQVNTRVJUKHZhbHVlKCkg
PiAwLjApOworICAgICAgICAgICAgdWludDY0X3QgZiA9IFNpZ25pZmljYW5kKCk7CisgICAgICAg
ICAgICBpbnQgZSA9IEV4cG9uZW50KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRo
ZSBjdXJyZW50IGRvdWJsZSBjb3VsZCBiZSBhIGRlbm9ybWFsLgorICAgICAgICAgICAgd2hpbGUg
KChmICYga0hpZGRlbkJpdCkgPT0gMCkgeworICAgICAgICAgICAgICAgIGYgPDw9IDE7CisgICAg
ICAgICAgICAgICAgZS0tOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gRG8gdGhlIGZp
bmFsIHNoaWZ0cyBpbiBvbmUgZ28uCisgICAgICAgICAgICBmIDw8PSBEaXlGcDo6a1NpZ25pZmlj
YW5kU2l6ZSAtIGtTaWduaWZpY2FuZFNpemU7CisgICAgICAgICAgICBlIC09IERpeUZwOjprU2ln
bmlmaWNhbmRTaXplIC0ga1NpZ25pZmljYW5kU2l6ZTsKKyAgICAgICAgICAgIHJldHVybiBEaXlG
cChmLCBlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJucyB0aGUgZG91
YmxlJ3MgYml0IGFzIHVpbnQ2NC4KKyAgICAgICAgdWludDY0X3QgQXNVaW50NjQoKSBjb25zdCB7
CisgICAgICAgICAgICByZXR1cm4gZDY0XzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Ly8gUmV0dXJucyB0aGUgbmV4dCBncmVhdGVyIGRvdWJsZS4gUmV0dXJucyAraW5maW5pdHkgb24g
aW5wdXQgK2luZmluaXR5LgorICAgICAgICBkb3VibGUgTmV4dERvdWJsZSgpIGNvbnN0IHsKKyAg
ICAgICAgICAgIGlmIChkNjRfID09IGtJbmZpbml0eSkgcmV0dXJuIERvdWJsZShrSW5maW5pdHkp
LnZhbHVlKCk7CisgICAgICAgICAgICBpZiAoU2lnbigpIDwgMCAmJiBTaWduaWZpY2FuZCgpID09
IDApIHsKKyAgICAgICAgICAgICAgICAvLyAtMC4wCisgICAgICAgICAgICAgICAgcmV0dXJuIDAu
MDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChTaWduKCkgPCAwKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIERvdWJsZShkNjRfIC0gMSkudmFsdWUoKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIERvdWJsZShkNjRfICsgMSkudmFsdWUoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaW50IEV4cG9uZW50
KCkgY29uc3QgeworICAgICAgICAgICAgaWYgKElzRGVub3JtYWwoKSkgcmV0dXJuIGtEZW5vcm1h
bEV4cG9uZW50OworICAgICAgICAgICAgCisgICAgICAgICAgICB1aW50NjRfdCBkNjQgPSBBc1Vp
bnQ2NCgpOworICAgICAgICAgICAgaW50IGJpYXNlZF9lID0KKyAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludD4oKGQ2NCAmIGtFeHBvbmVudE1hc2spID4+IGtQaHlzaWNhbFNpZ25pZmljYW5kU2l6
ZSk7CisgICAgICAgICAgICByZXR1cm4gYmlhc2VkX2UgLSBrRXhwb25lbnRCaWFzOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICB1aW50NjRfdCBTaWduaWZpY2FuZCgpIGNvbnN0IHsKKyAg
ICAgICAgICAgIHVpbnQ2NF90IGQ2NCA9IEFzVWludDY0KCk7CisgICAgICAgICAgICB1aW50NjRf
dCBzaWduaWZpY2FuZCA9IGQ2NCAmIGtTaWduaWZpY2FuZE1hc2s7CisgICAgICAgICAgICBpZiAo
IUlzRGVub3JtYWwoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBzaWduaWZpY2FuZCArIGtI
aWRkZW5CaXQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBz
aWduaWZpY2FuZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHRoZSBkb3VibGUgaXMgYSBkZW5vcm1hbC4KKyAgICAgICAgYm9v
bCBJc0Rlbm9ybWFsKCkgY29uc3QgeworICAgICAgICAgICAgdWludDY0X3QgZDY0ID0gQXNVaW50
NjQoKTsKKyAgICAgICAgICAgIHJldHVybiAoZDY0ICYga0V4cG9uZW50TWFzaykgPT0gMDsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gV2UgY29uc2lkZXIgZGVub3JtYWxzIG5vdCB0
byBiZSBzcGVjaWFsLgorICAgICAgICAvLyBIZW5jZSBvbmx5IEluZmluaXR5IGFuZCBOYU4gYXJl
IHNwZWNpYWwuCisgICAgICAgIGJvb2wgSXNTcGVjaWFsKCkgY29uc3QgeworICAgICAgICAgICAg
dWludDY0X3QgZDY0ID0gQXNVaW50NjQoKTsKKyAgICAgICAgICAgIHJldHVybiAoZDY0ICYga0V4
cG9uZW50TWFzaykgPT0ga0V4cG9uZW50TWFzazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgYm9vbCBJc05hbigpIGNvbnN0IHsKKyAgICAgICAgICAgIHVpbnQ2NF90IGQ2NCA9IEFzVWlu
dDY0KCk7CisgICAgICAgICAgICByZXR1cm4gKChkNjQgJiBrRXhwb25lbnRNYXNrKSA9PSBrRXhw
b25lbnRNYXNrKSAmJgorICAgICAgICAgICAgKChkNjQgJiBrU2lnbmlmaWNhbmRNYXNrKSAhPSAw
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBJc0luZmluaXRlKCkgY29uc3Qg
eworICAgICAgICAgICAgdWludDY0X3QgZDY0ID0gQXNVaW50NjQoKTsKKyAgICAgICAgICAgIHJl
dHVybiAoKGQ2NCAmIGtFeHBvbmVudE1hc2spID09IGtFeHBvbmVudE1hc2spICYmCisgICAgICAg
ICAgICAoKGQ2NCAmIGtTaWduaWZpY2FuZE1hc2spID09IDApOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBpbnQgU2lnbigpIGNvbnN0IHsKKyAgICAgICAgICAgIHVpbnQ2NF90IGQ2NCA9
IEFzVWludDY0KCk7CisgICAgICAgICAgICByZXR1cm4gKGQ2NCAmIGtTaWduTWFzaykgPT0gMD8g
MTogLTE7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFByZWNvbmRpdGlvbjogdGhl
IHZhbHVlIGVuY29kZWQgYnkgdGhpcyBEb3VibGUgbXVzdCBiZSBncmVhdGVyIG9yIGVxdWFsCisg
ICAgICAgIC8vIHRoYW4gKzAuMC4KKyAgICAgICAgRGl5RnAgVXBwZXJCb3VuZGFyeSgpIGNvbnN0
IHsKKyAgICAgICAgICAgIEFTU0VSVChTaWduKCkgPiAwKTsKKyAgICAgICAgICAgIHJldHVybiBE
aXlGcChTaWduaWZpY2FuZCgpICogMiArIDEsIEV4cG9uZW50KCkgLSAxKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgLy8gQ29tcHV0ZXMgdGhlIHR3byBib3VuZGFyaWVzIG9mIHRoaXMu
CisgICAgICAgIC8vIFRoZSBiaWdnZXIgYm91bmRhcnkgKG1fcGx1cykgaXMgbm9ybWFsaXplZC4g
VGhlIGxvd2VyIGJvdW5kYXJ5IGhhcyB0aGUgc2FtZQorICAgICAgICAvLyBleHBvbmVudCBhcyBt
X3BsdXMuCisgICAgICAgIC8vIFByZWNvbmRpdGlvbjogdGhlIHZhbHVlIGVuY29kZWQgYnkgdGhp
cyBEb3VibGUgbXVzdCBiZSBncmVhdGVyIHRoYW4gMC4KKyAgICAgICAgdm9pZCBOb3JtYWxpemVk
Qm91bmRhcmllcyhEaXlGcCogb3V0X21fbWludXMsIERpeUZwKiBvdXRfbV9wbHVzKSBjb25zdCB7
CisgICAgICAgICAgICBBU1NFUlQodmFsdWUoKSA+IDAuMCk7CisgICAgICAgICAgICBEaXlGcCB2
ID0gdGhpcy0+QXNEaXlGcCgpOworICAgICAgICAgICAgYm9vbCBzaWduaWZpY2FuZF9pc196ZXJv
ID0gKHYuZigpID09IGtIaWRkZW5CaXQpOworICAgICAgICAgICAgRGl5RnAgbV9wbHVzID0gRGl5
RnA6Ok5vcm1hbGl6ZShEaXlGcCgodi5mKCkgPDwgMSkgKyAxLCB2LmUoKSAtIDEpKTsKKyAgICAg
ICAgICAgIERpeUZwIG1fbWludXM7CisgICAgICAgICAgICBpZiAoc2lnbmlmaWNhbmRfaXNfemVy
byAmJiB2LmUoKSAhPSBrRGVub3JtYWxFeHBvbmVudCkgeworICAgICAgICAgICAgICAgIC8vIFRo
ZSBib3VuZGFyeSBpcyBjbG9zZXIuIFRoaW5rIG9mIHYgPSAxMDAwZTEwIGFuZCB2LSA9IDk5OTll
OS4KKyAgICAgICAgICAgICAgICAvLyBUaGVuIHRoZSBib3VuZGFyeSAoPT0gKHYgLSB2LSkvMikg
aXMgbm90IGp1c3QgYXQgYSBkaXN0YW5jZSBvZiAxZTkgYnV0CisgICAgICAgICAgICAgICAgLy8g
YXQgYSBkaXN0YW5jZSBvZiAxZTguCisgICAgICAgICAgICAgICAgLy8gVGhlIG9ubHkgZXhjZXB0
aW9uIGlzIGZvciB0aGUgc21hbGxlc3Qgbm9ybWFsOiB0aGUgbGFyZ2VzdCBkZW5vcm1hbCBpcwor
ICAgICAgICAgICAgICAgIC8vIGF0IHRoZSBzYW1lIGRpc3RhbmNlIGFzIGl0cyBzdWNjZXNzb3Iu
CisgICAgICAgICAgICAgICAgLy8gTm90ZTogZGVub3JtYWxzIGhhdmUgdGhlIHNhbWUgZXhwb25l
bnQgYXMgdGhlIHNtYWxsZXN0IG5vcm1hbHMuCisgICAgICAgICAgICAgICAgbV9taW51cyA9IERp
eUZwKCh2LmYoKSA8PCAyKSAtIDEsIHYuZSgpIC0gMik7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIG1fbWludXMgPSBEaXlGcCgodi5mKCkgPDwgMSkgLSAxLCB2LmUoKSAt
IDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9taW51cy5zZXRfZihtX21pbnVzLmYo
KSA8PCAobV9taW51cy5lKCkgLSBtX3BsdXMuZSgpKSk7CisgICAgICAgICAgICBtX21pbnVzLnNl
dF9lKG1fcGx1cy5lKCkpOworICAgICAgICAgICAgKm91dF9tX3BsdXMgPSBtX3BsdXM7CisgICAg
ICAgICAgICAqb3V0X21fbWludXMgPSBtX21pbnVzOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBkb3VibGUgdmFsdWUoKSBjb25zdCB7IHJldHVybiB1aW50NjRfdG9fZG91YmxlKGQ2NF8p
OyB9CisgICAgICAgIAorICAgICAgICAvLyBSZXR1cm5zIHRoZSBzaWduaWZpY2FuZCBzaXplIGZv
ciBhIGdpdmVuIG9yZGVyIG9mIG1hZ25pdHVkZS4KKyAgICAgICAgLy8gSWYgdiA9IGYqMl5lIHdp
dGggMl5wLTEgPD0gZiA8PSAyXnAgdGhlbiBwK2UgaXMgdidzIG9yZGVyIG9mIG1hZ25pdHVkZS4K
KyAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2Ygc2lnbmlmaWNh
bnQgYmluYXJ5IGRpZ2l0cyB2IHdpbGwgaGF2ZQorICAgICAgICAvLyBvbmNlIGl0J3MgZW5jb2Rl
ZCBpbnRvIGEgZG91YmxlLiBJbiBhbG1vc3QgYWxsIGNhc2VzIHRoaXMgaXMgZXF1YWwgdG8KKyAg
ICAgICAgLy8ga1NpZ25pZmljYW5kU2l6ZS4gVGhlIG9ubHkgZXhjZXB0aW9ucyBhcmUgZGVub3Jt
YWxzLiBUaGV5IHN0YXJ0IHdpdGgKKyAgICAgICAgLy8gbGVhZGluZyB6ZXJvZXMgYW5kIHRoZWly
IGVmZmVjdGl2ZSBzaWduaWZpY2FuZC1zaXplIGlzIGhlbmNlIHNtYWxsZXIuCisgICAgICAgIHN0
YXRpYyBpbnQgU2lnbmlmaWNhbmRTaXplRm9yT3JkZXJPZk1hZ25pdHVkZShpbnQgb3JkZXIpIHsK
KyAgICAgICAgICAgIGlmIChvcmRlciA+PSAoa0Rlbm9ybWFsRXhwb25lbnQgKyBrU2lnbmlmaWNh
bmRTaXplKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBrU2lnbmlmaWNhbmRTaXplOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG9yZGVyIDw9IGtEZW5vcm1hbEV4cG9uZW50KSBy
ZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBvcmRlciAtIGtEZW5vcm1hbEV4cG9uZW50Owor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgZG91YmxlIEluZmluaXR5KCkgewor
ICAgICAgICAgICAgcmV0dXJuIERvdWJsZShrSW5maW5pdHkpLnZhbHVlKCk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHN0YXRpYyBkb3VibGUgTmFOKCkgeworICAgICAgICAgICAgcmV0
dXJuIERvdWJsZShrTmFOKS52YWx1ZSgpOworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZh
dGU6CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQga0V4cG9uZW50QmlhcyA9IDB4M0ZGICsga1Bo
eXNpY2FsU2lnbmlmaWNhbmRTaXplOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtEZW5vcm1h
bEV4cG9uZW50ID0gLWtFeHBvbmVudEJpYXMgKyAxOworICAgICAgICBzdGF0aWMgY29uc3QgaW50
IGtNYXhFeHBvbmVudCA9IDB4N0ZGIC0ga0V4cG9uZW50QmlhczsKKyAgICAgICAgc3RhdGljIGNv
bnN0IHVpbnQ2NF90IGtJbmZpbml0eSA9IFVJTlQ2NF8yUEFSVF9DKDB4N0ZGMDAwMDAsIDAwMDAw
MDAwKTsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGtOYU4gPSBVSU5UNjRfMlBBUlRf
QygweDdGRjgwMDAwLCAwMDAwMDAwMCk7CisgICAgICAgIAorICAgICAgICBjb25zdCB1aW50NjRf
dCBkNjRfOworICAgICAgICAKKyAgICAgICAgc3RhdGljIHVpbnQ2NF90IERpeUZwVG9VaW50NjQo
RGl5RnAgZGl5X2ZwKSB7CisgICAgICAgICAgICB1aW50NjRfdCBzaWduaWZpY2FuZCA9IGRpeV9m
cC5mKCk7CisgICAgICAgICAgICBpbnQgZXhwb25lbnQgPSBkaXlfZnAuZSgpOworICAgICAgICAg
ICAgd2hpbGUgKHNpZ25pZmljYW5kID4ga0hpZGRlbkJpdCArIGtTaWduaWZpY2FuZE1hc2spIHsK
KyAgICAgICAgICAgICAgICBzaWduaWZpY2FuZCA+Pj0gMTsKKyAgICAgICAgICAgICAgICBleHBv
bmVudCsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGV4cG9uZW50ID49IGtNYXhF
eHBvbmVudCkgeworICAgICAgICAgICAgICAgIHJldHVybiBrSW5maW5pdHk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoZXhwb25lbnQgPCBrRGVub3JtYWxFeHBvbmVudCkgeworICAg
ICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hpbGUg
KGV4cG9uZW50ID4ga0Rlbm9ybWFsRXhwb25lbnQgJiYgKHNpZ25pZmljYW5kICYga0hpZGRlbkJp
dCkgPT0gMCkgeworICAgICAgICAgICAgICAgIHNpZ25pZmljYW5kIDw8PSAxOworICAgICAgICAg
ICAgICAgIGV4cG9uZW50LS07CisgICAgICAgICAgICB9CisgICAgICAgICAgICB1aW50NjRfdCBi
aWFzZWRfZXhwb25lbnQ7CisgICAgICAgICAgICBpZiAoZXhwb25lbnQgPT0ga0Rlbm9ybWFsRXhw
b25lbnQgJiYgKHNpZ25pZmljYW5kICYga0hpZGRlbkJpdCkgPT0gMCkgeworICAgICAgICAgICAg
ICAgIGJpYXNlZF9leHBvbmVudCA9IDA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIGJpYXNlZF9leHBvbmVudCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihleHBvbmVudCAr
IGtFeHBvbmVudEJpYXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIChzaWdu
aWZpY2FuZCAmIGtTaWduaWZpY2FuZE1hc2spIHwKKyAgICAgICAgICAgIChiaWFzZWRfZXhwb25l
bnQgPDwga1BoeXNpY2FsU2lnbmlmaWNhbmRTaXplKTsKKyAgICAgICAgfQorICAgIH07CisgICAg
Cit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKKyNlbmRpZiAgLy8gRE9VQkxFX0NPTlZFUlNJT05fRE9VQkxFX0hfCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZmFzdC1kdG9hLmNjIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9kdG9hL2Zhc3QtZHRvYS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZmMyZTc4MWJmZGUw
NTlhY2RhOTkyMTgxOGFlYWM1YjdjOTk2ZmFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2Zhc3QtZHRvYS5jYwpAQCAtMCwwICsxLDczOSBAQAorLy8g
Q29weXJpZ2h0IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlz
Y2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkCisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKy8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisv
LyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaW5jbHVkZSAiZmFzdC1kdG9hLmgiCisKKyNpbmNs
dWRlICJjYWNoZWQtcG93ZXJzLmgiCisjaW5jbHVkZSAiZGl5LWZwLmgiCisjaW5jbHVkZSAiZG91
YmxlLmgiCisKK25hbWVzcGFjZSBXVEYgeworCituYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24g
eworICAgIAorICAgIC8vIFRoZSBtaW5pbWFsIGFuZCBtYXhpbWFsIHRhcmdldCBleHBvbmVudCBk
ZWZpbmUgdGhlIHJhbmdlIG9mIHcncyBiaW5hcnkKKyAgICAvLyBleHBvbmVudCwgd2hlcmUgJ3cn
IGlzIHRoZSByZXN1bHQgb2YgbXVsdGlwbHlpbmcgdGhlIGlucHV0IGJ5IGEgY2FjaGVkIHBvd2Vy
CisgICAgLy8gb2YgdGVuLgorICAgIC8vCisgICAgLy8gQSBkaWZmZXJlbnQgcmFuZ2UgbWlnaHQg
YmUgY2hvc2VuIG9uIGEgZGlmZmVyZW50IHBsYXRmb3JtLCB0byBvcHRpbWl6ZSBkaWdpdAorICAg
IC8vIGdlbmVyYXRpb24sIGJ1dCBhIHNtYWxsZXIgcmFuZ2UgcmVxdWlyZXMgbW9yZSBwb3dlcnMg
b2YgdGVuIHRvIGJlIGNhY2hlZC4KKyAgICBzdGF0aWMgY29uc3QgaW50IGtNaW5pbWFsVGFyZ2V0
RXhwb25lbnQgPSAtNjA7CisgICAgc3RhdGljIGNvbnN0IGludCBrTWF4aW1hbFRhcmdldEV4cG9u
ZW50ID0gLTMyOworICAgIAorICAgIAorICAgIC8vIEFkanVzdHMgdGhlIGxhc3QgZGlnaXQgb2Yg
dGhlIGdlbmVyYXRlZCBudW1iZXIsIGFuZCBzY3JlZW5zIG91dCBnZW5lcmF0ZWQKKyAgICAvLyBz
b2x1dGlvbnMgdGhhdCBtYXkgYmUgaW5hY2N1cmF0ZS4gQSBzb2x1dGlvbiBtYXkgYmUgaW5hY2N1
cmF0ZSBpZiBpdCBpcworICAgIC8vIG91dHNpZGUgdGhlIHNhZmUgaW50ZXJ2YWwsIG9yIGlmIHdl
IGNhbm5vdCBwcm92ZSB0aGF0IGl0IGlzIGNsb3NlciB0byB0aGUKKyAgICAvLyBpbnB1dCB0aGFu
IGEgbmVpZ2hib3JpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNhbWUgbGVuZ3RoLgorICAgIC8v
CisgICAgLy8gSW5wdXQ6ICogYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGRpZ2l0cyBvZiB0b29faGln
aCAvIDEwXmthcHBhCisgICAgLy8gICAgICAgICogdGhlIGJ1ZmZlcidzIGxlbmd0aAorICAgIC8v
ICAgICAgICAqIGRpc3RhbmNlX3Rvb19oaWdoX3cgPT0gKHRvb19oaWdoIC0gdykuZigpICogdW5p
dAorICAgIC8vICAgICAgICAqIHVuc2FmZV9pbnRlcnZhbCA9PSAodG9vX2hpZ2ggLSB0b29fbG93
KS5mKCkgKiB1bml0CisgICAgLy8gICAgICAgICogcmVzdCA9ICh0b29faGlnaCAtIGJ1ZmZlciAq
IDEwXmthcHBhKS5mKCkgKiB1bml0CisgICAgLy8gICAgICAgICogdGVuX2thcHBhID0gMTBea2Fw
cGEgKiB1bml0CisgICAgLy8gICAgICAgICogdW5pdCA9IHRoZSBjb21tb24gbXVsdGlwbGllcgor
ICAgIC8vIE91dHB1dDogcmV0dXJucyB0cnVlIGlmIHRoZSBidWZmZXIgaXMgZ3VhcmFudGVlZCB0
byBjb250YWluIHRoZSBjbG9zZXN0CisgICAgLy8gICAgcmVwcmVzZW50YWJsZSBudW1iZXIgdG8g
dGhlIGlucHV0LgorICAgIC8vICBNb2RpZmllcyB0aGUgZ2VuZXJhdGVkIGRpZ2l0cyBpbiB0aGUg
YnVmZmVyIHRvIGFwcHJvYWNoIChyb3VuZCB0b3dhcmRzKSB3LgorICAgIHN0YXRpYyBib29sIFJv
dW5kV2VlZChWZWN0b3I8Y2hhcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBkaXN0YW5jZV90
b29faGlnaF93LAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCB1bnNhZmVfaW50
ZXJ2YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHJlc3QsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHRlbl9rYXBwYSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludDY0X3QgdW5pdCkgeworICAgICAgICB1aW50NjRfdCBzbWFsbF9kaXN0YW5j
ZSA9IGRpc3RhbmNlX3Rvb19oaWdoX3cgLSB1bml0OworICAgICAgICB1aW50NjRfdCBiaWdfZGlz
dGFuY2UgPSBkaXN0YW5jZV90b29faGlnaF93ICsgdW5pdDsKKyAgICAgICAgLy8gTGV0IHdfbG93
ICA9IHRvb19oaWdoIC0gYmlnX2Rpc3RhbmNlLCBhbmQKKyAgICAgICAgLy8gICAgIHdfaGlnaCA9
IHRvb19oaWdoIC0gc21hbGxfZGlzdGFuY2UuCisgICAgICAgIC8vIE5vdGU6IHdfbG93IDwgdyA8
IHdfaGlnaAorICAgICAgICAvLworICAgICAgICAvLyBUaGUgcmVhbCB3ICgqIHVuaXQpIG11c3Qg
bGllIHNvbWV3aGVyZSBpbnNpZGUgdGhlIGludGVydmFsCisgICAgICAgIC8vIF13X2xvdzsgd19o
aWdoWyAob2Z0ZW4gd3JpdHRlbiBhcyAiKHdfbG93OyB3X2hpZ2gpIikKKyAgICAgICAgCisgICAg
ICAgIC8vIEJhc2ljYWxseSB0aGUgYnVmZmVyIGN1cnJlbnRseSBjb250YWlucyBhIG51bWJlciBp
biB0aGUgdW5zYWZlIGludGVydmFsCisgICAgICAgIC8vIF10b29fbG93OyB0b29faGlnaFsgd2l0
aCB0b29fbG93IDwgdyA8IHRvb19oaWdoCisgICAgICAgIC8vCisgICAgICAgIC8vICB0b29faGln
aCAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAt
IC0gLSAtIC0gLQorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIF52IDEgdW5pdCAgICAg
ICAgICAgIF4gICAgICBeICAgICAgICAgICAgICAgICBeICAgICAgXgorICAgICAgICAvLyAgYm91
bmRhcnlfaGlnaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgIC4gICAgICAuICAgICAgICAgICAg
ICAgICAuICAgICAgLgorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIF52IDEgdW5pdCAg
ICAgICAgICAgIC4gICAgICAuICAgICAgICAgICAgICAgICAuICAgICAgLgorICAgICAgICAvLyAg
IC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gICsgIC0gLSArIC0gLSAtIC0g
LSAtICAgICAuICAgICAgLgorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC4gICAgICAuICAgICAgICAgXiAgICAgICAuICAgICAgLgorICAgICAgICAv
LyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIGJpZ19kaXN0YW5j
ZSAgLiAgICAgICAuICAgICAgLgorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC4gICAgICAuICAgICAgICAgLiAgICAgICAuICAgIHJlc3QKKyAgICAg
ICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWFsbF9kaXN0YW5jZSAgICAgLiAg
ICAgICAgIC4gICAgICAgLiAgICAgIC4KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2ICAgICAgLiAgICAgICAgIC4gICAgICAgLiAgICAgIC4KKyAg
ICAgICAgLy8gIHdfaGlnaCAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAgICAg
LiAgICAgICAgIC4gICAgICAgLiAgICAgIC4KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAg
ICBediAxIHVuaXQgICAgICAgICAgICAgICAgICAgLiAgICAgICAgIC4gICAgICAgLiAgICAgIC4K
KyAgICAgICAgLy8gIHcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAg
ICAgLiAgICAgICAgIC4gICAgICAgLiAgICAgIC4KKyAgICAgICAgLy8gICAgICAgICAgICAgICAg
ICAgICBediAxIHVuaXQgICAgICAgICAgICAgICAgICAgdiAgICAgICAgIC4gICAgICAgLiAgICAg
IC4KKyAgICAgICAgLy8gIHdfbG93ICAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g
LSAtIC0gLSAgICAgICAgIC4gICAgICAgLiAgICAgIC4KKyAgICAgICAgLy8gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gICAgICAgLiAg
ICAgIHYKKyAgICAgICAgLy8gIGJ1ZmZlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tCisgICAgICAgIC8vICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICAgICAg
IC4KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNhZmVfaW50ZXJ2YWwgICAgLgorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiAgICAgICAuCisgICAgICAg
IC8vICAgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAt
IC0gLSAtIC0gICAgIC4KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBediAxIHVuaXQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLgorICAgICAgICAvLyAgYm91bmRh
cnlfbG93IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgICB1bnNh
ZmVfaW50ZXJ2YWwKKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBediAxIHVuaXQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdgorICAgICAgICAvLyAgdG9vX2xvdyAg
LSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAt
IC0gLSAtIC0KKyAgICAgICAgLy8KKyAgICAgICAgLy8KKyAgICAgICAgLy8gTm90ZSB0aGF0IHRo
ZSB2YWx1ZSBvZiBidWZmZXIgY291bGQgbGllIGFueXdoZXJlIGluc2lkZSB0aGUgcmFuZ2UgdG9v
X2xvdworICAgICAgICAvLyB0byB0b29faGlnaC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gYm91
bmRhcnlfbG93LCBib3VuZGFyeV9oaWdoIGFuZCB3IGFyZSBhcHByb3hpbWF0aW9ucyBvZiB0aGUg
cmVhbCBib3VuZGFyaWVzCisgICAgICAgIC8vIGFuZCB2ICh0aGUgaW5wdXQgbnVtYmVyKS4gVGhl
eSBhcmUgZ3VhcmFudGVlZCB0byBiZSBwcmVjaXNlIHVwIHRvIG9uZSB1bml0LgorICAgICAgICAv
LyBJbiBmYWN0IHRoZSBlcnJvciBpcyBndWFyYW50ZWVkIHRvIGJlIHN0cmljdGx5IGxlc3MgdGhh
biBvbmUgdW5pdC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gQW55dGhpbmcgdGhhdCBsaWVzIG91
dHNpZGUgdGhlIHVuc2FmZSBpbnRlcnZhbCBpcyBndWFyYW50ZWVkIG5vdCB0byByb3VuZAorICAg
ICAgICAvLyB0byB2IHdoZW4gcmVhZCBhZ2Fpbi4KKyAgICAgICAgLy8gQW55dGhpbmcgdGhhdCBs
aWVzIGluc2lkZSB0aGUgc2FmZSBpbnRlcnZhbCBpcyBndWFyYW50ZWVkIHRvIHJvdW5kIHRvIHYK
KyAgICAgICAgLy8gd2hlbiByZWFkIGFnYWluLgorICAgICAgICAvLyBJZiB0aGUgbnVtYmVyIGlu
c2lkZSB0aGUgYnVmZmVyIGxpZXMgaW5zaWRlIHRoZSB1bnNhZmUgaW50ZXJ2YWwgYnV0IG5vdAor
ICAgICAgICAvLyBpbnNpZGUgdGhlIHNhZmUgaW50ZXJ2YWwgdGhlbiB3ZSBzaW1wbHkgZG8gbm90
IGtub3cgYW5kIGJhaWwgb3V0IChyZXR1cm5pbmcKKyAgICAgICAgLy8gZmFsc2UpLgorICAgICAg
ICAvLworICAgICAgICAvLyBTaW1pbGFybHkgd2UgaGF2ZSB0byB0YWtlIGludG8gYWNjb3VudCB0
aGUgaW1wcmVjaXNpb24gb2YgJ3cnIHdoZW4gZmluZGluZworICAgICAgICAvLyB0aGUgY2xvc2Vz
dCByZXByZXNlbnRhdGlvbiBvZiAndycuIElmIHdlIGhhdmUgdHdvIHBvdGVudGlhbAorICAgICAg
ICAvLyByZXByZXNlbnRhdGlvbnMsIGFuZCBvbmUgaXMgY2xvc2VyIHRvIGJvdGggd19sb3cgYW5k
IHdfaGlnaCwgdGhlbiB3ZSBrbm93CisgICAgICAgIC8vIGl0IGlzIGNsb3NlciB0byB0aGUgYWN0
dWFsIHZhbHVlIHYuCisgICAgICAgIC8vCisgICAgICAgIC8vIEJ5IGdlbmVyYXRpbmcgdGhlIGRp
Z2l0cyBvZiB0b29faGlnaCB3ZSBnb3QgdGhlIGxhcmdlc3QgKGNsb3Nlc3QgdG8KKyAgICAgICAg
Ly8gdG9vX2hpZ2gpIGJ1ZmZlciB0aGF0IGlzIHN0aWxsIGluIHRoZSB1bnNhZmUgaW50ZXJ2YWwu
IEluIHRoZSBjYXNlIHdoZXJlCisgICAgICAgIC8vIHdfaGlnaCA8IGJ1ZmZlciA8IHRvb19oaWdo
IHdlIHRyeSB0byBkZWNyZW1lbnQgdGhlIGJ1ZmZlci4KKyAgICAgICAgLy8gVGhpcyB3YXkgdGhl
IGJ1ZmZlciBhcHByb2FjaGVzIChyb3VuZHMgdG93YXJkcykgdy4KKyAgICAgICAgLy8gVGhlcmUg
YXJlIDMgY29uZGl0aW9ucyB0aGF0IHN0b3AgdGhlIGRlY3JlbWVudGF0aW9uIHByb2Nlc3M6Cisg
ICAgICAgIC8vICAgMSkgdGhlIGJ1ZmZlciBpcyBhbHJlYWR5IGJlbG93IHdfaGlnaAorICAgICAg
ICAvLyAgIDIpIGRlY3JlbWVudGluZyB0aGUgYnVmZmVyIHdvdWxkIG1ha2UgaXQgbGVhdmUgdGhl
IHVuc2FmZSBpbnRlcnZhbAorICAgICAgICAvLyAgIDMpIGRlY3JlbWVudGluZyB0aGUgYnVmZmVy
IHdvdWxkIHlpZWxkIGEgbnVtYmVyIGJlbG93IHdfaGlnaCBhbmQgZmFydGhlcgorICAgICAgICAv
LyAgICAgIGF3YXkgdGhhbiB0aGUgY3VycmVudCBudW1iZXIuIEluIG90aGVyIHdvcmRzOgorICAg
ICAgICAvLyAgICAgICAgICAgICAgKGJ1ZmZlcnstMX0gPCB3X2hpZ2gpICYmIHdfaGlnaCAtIGJ1
ZmZlcnstMX0gPiBidWZmZXIgLSB3X2hpZ2gKKyAgICAgICAgLy8gSW5zdGVhZCBvZiB1c2luZyB0
aGUgYnVmZmVyIGRpcmVjdGx5IHdlIHVzZSBpdHMgZGlzdGFuY2UgdG8gdG9vX2hpZ2guCisgICAg
ICAgIC8vIENvbmNlcHR1YWxseSByZXN0IH49IHRvb19oaWdoIC0gYnVmZmVyCisgICAgICAgIC8v
IFdlIG5lZWQgdG8gZG8gdGhlIGZvbGxvd2luZyB0ZXN0cyBpbiB0aGlzIG9yZGVyIHRvIGF2b2lk
IG92ZXItIGFuZAorICAgICAgICAvLyB1bmRlcmZsb3dzLgorICAgICAgICBBU1NFUlQocmVzdCA8
PSB1bnNhZmVfaW50ZXJ2YWwpOworICAgICAgICB3aGlsZSAocmVzdCA8IHNtYWxsX2Rpc3RhbmNl
ICYmICAvLyBOZWdhdGVkIGNvbmRpdGlvbiAxCisgICAgICAgICAgICAgICB1bnNhZmVfaW50ZXJ2
YWwgLSByZXN0ID49IHRlbl9rYXBwYSAmJiAgLy8gTmVnYXRlZCBjb25kaXRpb24gMgorICAgICAg
ICAgICAgICAgKHJlc3QgKyB0ZW5fa2FwcGEgPCBzbWFsbF9kaXN0YW5jZSB8fCAgLy8gYnVmZmVy
ey0xfSA+IHdfaGlnaAorICAgICAgICAgICAgICAgIHNtYWxsX2Rpc3RhbmNlIC0gcmVzdCA+PSBy
ZXN0ICsgdGVuX2thcHBhIC0gc21hbGxfZGlzdGFuY2UpKSB7CisgICAgICAgICAgICAgICAgICAg
YnVmZmVyW2xlbmd0aCAtIDFdLS07CisgICAgICAgICAgICAgICAgICAgcmVzdCArPSB0ZW5fa2Fw
cGE7CisgICAgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBXZSBoYXZlIGFwcHJv
YWNoZWQgdysgYXMgbXVjaCBhcyBwb3NzaWJsZS4gV2Ugbm93IHRlc3QgaWYgYXBwcm9hY2hpbmcg
dy0KKyAgICAgICAgLy8gd291bGQgcmVxdWlyZSBjaGFuZ2luZyB0aGUgYnVmZmVyLiBJZiB5ZXMs
IHRoZW4gd2UgaGF2ZSB0d28gcG9zc2libGUKKyAgICAgICAgLy8gcmVwcmVzZW50YXRpb25zIGNs
b3NlIHRvIHcsIGJ1dCB3ZSBjYW5ub3QgZGVjaWRlIHdoaWNoIG9uZSBpcyBjbG9zZXIuCisgICAg
ICAgIGlmIChyZXN0IDwgYmlnX2Rpc3RhbmNlICYmCisgICAgICAgICAgICB1bnNhZmVfaW50ZXJ2
YWwgLSByZXN0ID49IHRlbl9rYXBwYSAmJgorICAgICAgICAgICAgKHJlc3QgKyB0ZW5fa2FwcGEg
PCBiaWdfZGlzdGFuY2UgfHwKKyAgICAgICAgICAgICBiaWdfZGlzdGFuY2UgLSByZXN0ID4gcmVz
dCArIHRlbl9rYXBwYSAtIGJpZ19kaXN0YW5jZSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBXZWVkaW5nIHRlc3Qu
CisgICAgICAgIC8vICAgVGhlIHNhZmUgaW50ZXJ2YWwgaXMgW3Rvb19sb3cgKyAyIHVscDsgdG9v
X2hpZ2ggLSAyIHVscF0KKyAgICAgICAgLy8gICBTaW5jZSB0b29fbG93ID0gdG9vX2hpZ2ggLSB1
bnNhZmVfaW50ZXJ2YWwgdGhpcyBpcyBlcXVpdmFsZW50IHRvCisgICAgICAgIC8vICAgICAgW3Rv
b19oaWdoIC0gdW5zYWZlX2ludGVydmFsICsgNCB1bHA7IHRvb19oaWdoIC0gMiB1bHBdCisgICAg
ICAgIC8vICAgQ29uY2VwdHVhbGx5IHdlIGhhdmU6IHJlc3Qgfj0gdG9vX2hpZ2ggLSBidWZmZXIK
KyAgICAgICAgcmV0dXJuICgyICogdW5pdCA8PSByZXN0KSAmJiAocmVzdCA8PSB1bnNhZmVfaW50
ZXJ2YWwgLSA0ICogdW5pdCk7CisgICAgfQorICAgIAorICAgIAorICAgIC8vIFJvdW5kcyB0aGUg
YnVmZmVyIHVwd2FyZHMgaWYgdGhlIHJlc3VsdCBpcyBjbG9zZXIgdG8gdiBieSBwb3NzaWJseSBh
ZGRpbmcKKyAgICAvLyAxIHRvIHRoZSBidWZmZXIuIElmIHRoZSBwcmVjaXNpb24gb2YgdGhlIGNh
bGN1bGF0aW9uIGlzIG5vdCBzdWZmaWNpZW50IHRvCisgICAgLy8gcm91bmQgY29ycmVjdGx5LCBy
ZXR1cm4gZmFsc2UuCisgICAgLy8gVGhlIHJvdW5kaW5nIG1pZ2h0IHNoaWZ0IHRoZSB3aG9sZSBi
dWZmZXIgaW4gd2hpY2ggY2FzZSB0aGUga2FwcGEgaXMKKyAgICAvLyBhZGp1c3RlZC4gRm9yIGV4
YW1wbGUgIjk5Iiwga2FwcGEgPSAzIG1pZ2h0IGJlY29tZSAiMTAiLCBrYXBwYSA9IDQuCisgICAg
Ly8KKyAgICAvLyBJZiAyKnJlc3QgPiB0ZW5fa2FwcGEgdGhlbiB0aGUgYnVmZmVyIG5lZWRzIHRv
IGJlIHJvdW5kIHVwLgorICAgIC8vIHJlc3QgY2FuIGhhdmUgYW4gZXJyb3Igb2YgKy8tIDEgdW5p
dC4gVGhpcyBmdW5jdGlvbiBhY2NvdW50cyBmb3IgdGhlCisgICAgLy8gaW1wcmVjaXNpb24gYW5k
IHJldHVybnMgZmFsc2UsIGlmIHRoZSByb3VuZGluZyBkaXJlY3Rpb24gY2Fubm90IGJlCisgICAg
Ly8gdW5hbWJpZ3VvdXNseSBkZXRlcm1pbmVkLgorICAgIC8vCisgICAgLy8gUHJlY29uZGl0aW9u
OiByZXN0IDwgdGVuX2thcHBhLgorICAgIHN0YXRpYyBib29sIFJvdW5kV2VlZENvdW50ZWQoVmVj
dG9yPGNoYXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBs
ZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCByZXN0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgdGVuX2thcHBhLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgdW5pdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCoga2FwcGEpIHsKKyAgICAgICAgQVNTRVJUKHJlc3Qg
PCB0ZW5fa2FwcGEpOworICAgICAgICAvLyBUaGUgZm9sbG93aW5nIHRlc3RzIGFyZSBkb25lIGlu
IGEgc3BlY2lmaWMgb3JkZXIgdG8gYXZvaWQgb3ZlcmZsb3dzLiBUaGV5CisgICAgICAgIC8vIHdp
bGwgd29yayBjb3JyZWN0bHkgd2l0aCBhbnkgdWludDY0IHZhbHVlcyBvZiByZXN0IDwgdGVuX2th
cHBhIGFuZCB1bml0LgorICAgICAgICAvLworICAgICAgICAvLyBJZiB0aGUgdW5pdCBpcyB0b28g
YmlnLCB0aGVuIHdlIGRvbid0IGtub3cgd2hpY2ggd2F5IHRvIHJvdW5kLiBGb3IgZXhhbXBsZQor
ICAgICAgICAvLyBhIHVuaXQgb2YgNTAgbWVhbnMgdGhhdCB0aGUgcmVhbCBudW1iZXIgbGllcyB3
aXRoaW4gcmVzdCArLy0gNTAuIElmCisgICAgICAgIC8vIDEwXmthcHBhID09IDQwIHRoZW4gdGhl
cmUgaXMgbm8gd2F5IHRvIHRlbGwgd2hpY2ggd2F5IHRvIHJvdW5kLgorICAgICAgICBpZiAodW5p
dCA+PSB0ZW5fa2FwcGEpIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gRXZlbiBpZiB1bml0IGlz
IGp1c3QgaGFsZiB0aGUgc2l6ZSBvZiAxMF5rYXBwYSB3ZSBhcmUgYWxyZWFkeSBjb21wbGV0ZWx5
CisgICAgICAgIC8vIGxvc3QuIChBbmQgYWZ0ZXIgdGhlIHByZXZpb3VzIHRlc3Qgd2Uga25vdyB0
aGF0IHRoZSBleHByZXNzaW9uIHdpbGwgbm90CisgICAgICAgIC8vIG92ZXIvdW5kZXJmbG93LikK
KyAgICAgICAgaWYgKHRlbl9rYXBwYSAtIHVuaXQgPD0gdW5pdCkgcmV0dXJuIGZhbHNlOworICAg
ICAgICAvLyBJZiAyICogKHJlc3QgKyB1bml0KSA8PSAxMF5rYXBwYSB3ZSBjYW4gc2FmZWx5IHJv
dW5kIGRvd24uCisgICAgICAgIGlmICgodGVuX2thcHBhIC0gcmVzdCA+IHJlc3QpICYmICh0ZW5f
a2FwcGEgLSAyICogcmVzdCA+PSAyICogdW5pdCkpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgICAgIC8vIElmIDIgKiAocmVzdCAtIHVuaXQpID49IDEwXmthcHBh
LCB0aGVuIHdlIGNhbiBzYWZlbHkgcm91bmQgdXAuCisgICAgICAgIGlmICgocmVzdCA+IHVuaXQp
ICYmICh0ZW5fa2FwcGEgLSAocmVzdCAtIHVuaXQpIDw9IChyZXN0IC0gdW5pdCkpKSB7CisgICAg
ICAgICAgICAvLyBJbmNyZW1lbnQgdGhlIGxhc3QgZGlnaXQgcmVjdXJzaXZlbHkgdW50aWwgd2Ug
ZmluZCBhIG5vbiAnOScgZGlnaXQuCisgICAgICAgICAgICBidWZmZXJbbGVuZ3RoIC0gMV0rKzsK
KyAgICAgICAgICAgIGZvciAoaW50IGkgPSBsZW5ndGggLSAxOyBpID4gMDsgLS1pKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGJ1ZmZlcltpXSAhPSAnMCcgKyAxMCkgYnJlYWs7CisgICAgICAgICAg
ICAgICAgYnVmZmVyW2ldID0gJzAnOworICAgICAgICAgICAgICAgIGJ1ZmZlcltpIC0gMV0rKzsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIElmIHRoZSBmaXJzdCBkaWdpdCBpcyBub3cg
JzAnKyAxMCB3ZSBoYWQgYSBidWZmZXIgd2l0aCBhbGwgJzkncy4gV2l0aCB0aGUKKyAgICAgICAg
ICAgIC8vIGV4Y2VwdGlvbiBvZiB0aGUgZmlyc3QgZGlnaXQgYWxsIGRpZ2l0cyBhcmUgbm93ICcw
Jy4gU2ltcGx5IHN3aXRjaCB0aGUKKyAgICAgICAgICAgIC8vIGZpcnN0IGRpZ2l0IHRvICcxJyBh
bmQgYWRqdXN0IHRoZSBrYXBwYS4gRXhhbXBsZTogIjk5IiBiZWNvbWVzICIxMCIgYW5kCisgICAg
ICAgICAgICAvLyB0aGUgcG93ZXIgKHRoZSBrYXBwYSkgaXMgaW5jcmVhc2VkLgorICAgICAgICAg
ICAgaWYgKGJ1ZmZlclswXSA9PSAnMCcgKyAxMCkgeworICAgICAgICAgICAgICAgIGJ1ZmZlclsw
XSA9ICcxJzsKKyAgICAgICAgICAgICAgICAoKmthcHBhKSArPSAxOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICAKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qga1RlbjQgPSAx
MDAwMDsKKyAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qga1RlbjUgPSAxMDAwMDA7CisgICAgc3Rh
dGljIGNvbnN0IHVpbnQzMl90IGtUZW42ID0gMTAwMDAwMDsKKyAgICBzdGF0aWMgY29uc3QgdWlu
dDMyX3Qga1RlbjcgPSAxMDAwMDAwMDsKKyAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qga1Rlbjgg
PSAxMDAwMDAwMDA7CisgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IGtUZW45ID0gMTAwMDAwMDAw
MDsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRoZSBiaWdnZXN0IHBvd2VyIG9mIHRlbiB0aGF0IGlz
IGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgZ2l2ZW4KKyAgICAvLyBudW1iZXIuIFdlIGZ1cnRo
ZXJtb3JlIHJlY2VpdmUgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJpdHMgJ251bWJlcicgaGFzLgor
ICAgIC8vIElmIG51bWJlcl9iaXRzID09IDAgdGhlbiAwXi0xIGlzIHJldHVybmVkCisgICAgLy8g
VGhlIG51bWJlciBvZiBiaXRzIG11c3QgYmUgPD0gMzIuCisgICAgLy8gUHJlY29uZGl0aW9uOiBu
dW1iZXIgPCAoMSA8PCAobnVtYmVyX2JpdHMgKyAxKSkuCisgICAgc3RhdGljIHZvaWQgQmlnZ2Vz
dFBvd2VyVGVuKHVpbnQzMl90IG51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IG51bWJlcl9iaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50
MzJfdCogcG93ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogZXhwb25l
bnQpIHsKKyAgICAgICAgQVNTRVJUKG51bWJlciA8ICgxIDw8IChudW1iZXJfYml0cyArIDEpKSk7
CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG51bWJlcl9iaXRzKSB7CisgICAgICAgICAgICBj
YXNlIDMyOgorICAgICAgICAgICAgY2FzZSAzMToKKyAgICAgICAgICAgIGNhc2UgMzA6CisgICAg
ICAgICAgICAgICAgaWYgKGtUZW45IDw9IG51bWJlcikgeworICAgICAgICAgICAgICAgICAgICAq
cG93ZXIgPSBrVGVuOTsKKyAgICAgICAgICAgICAgICAgICAgKmV4cG9uZW50ID0gOTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSAgLy8gZWxzZSBmYWxsdGhy
b3VnaAorICAgICAgICAgICAgY2FzZSAyOToKKyAgICAgICAgICAgIGNhc2UgMjg6CisgICAgICAg
ICAgICBjYXNlIDI3OgorICAgICAgICAgICAgICAgIGlmIChrVGVuOCA8PSBudW1iZXIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgKnBvd2VyID0ga1Rlbjg7CisgICAgICAgICAgICAgICAgICAgICpl
eHBvbmVudCA9IDg7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0gIC8vIGVsc2UgZmFsbHRocm91Z2gKKyAgICAgICAgICAgIGNhc2UgMjY6CisgICAgICAgICAg
ICBjYXNlIDI1OgorICAgICAgICAgICAgY2FzZSAyNDoKKyAgICAgICAgICAgICAgICBpZiAoa1Rl
bjcgPD0gbnVtYmVyKSB7CisgICAgICAgICAgICAgICAgICAgICpwb3dlciA9IGtUZW43OworICAg
ICAgICAgICAgICAgICAgICAqZXhwb25lbnQgPSA3OworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9ICAvLyBlbHNlIGZhbGx0aHJvdWdoCisgICAgICAgICAgICBj
YXNlIDIzOgorICAgICAgICAgICAgY2FzZSAyMjoKKyAgICAgICAgICAgIGNhc2UgMjE6CisgICAg
ICAgICAgICBjYXNlIDIwOgorICAgICAgICAgICAgICAgIGlmIChrVGVuNiA8PSBudW1iZXIpIHsK
KyAgICAgICAgICAgICAgICAgICAgKnBvd2VyID0ga1RlbjY7CisgICAgICAgICAgICAgICAgICAg
ICpleHBvbmVudCA9IDY7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0gIC8vIGVsc2UgZmFsbHRocm91Z2gKKyAgICAgICAgICAgIGNhc2UgMTk6CisgICAgICAg
ICAgICBjYXNlIDE4OgorICAgICAgICAgICAgY2FzZSAxNzoKKyAgICAgICAgICAgICAgICBpZiAo
a1RlbjUgPD0gbnVtYmVyKSB7CisgICAgICAgICAgICAgICAgICAgICpwb3dlciA9IGtUZW41Owor
ICAgICAgICAgICAgICAgICAgICAqZXhwb25lbnQgPSA1OworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9ICAvLyBlbHNlIGZhbGx0aHJvdWdoCisgICAgICAgICAg
ICBjYXNlIDE2OgorICAgICAgICAgICAgY2FzZSAxNToKKyAgICAgICAgICAgIGNhc2UgMTQ6Cisg
ICAgICAgICAgICAgICAgaWYgKGtUZW40IDw9IG51bWJlcikgeworICAgICAgICAgICAgICAgICAg
ICAqcG93ZXIgPSBrVGVuNDsKKyAgICAgICAgICAgICAgICAgICAgKmV4cG9uZW50ID0gNDsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSAgLy8gZWxzZSBmYWxs
dGhyb3VnaAorICAgICAgICAgICAgY2FzZSAxMzoKKyAgICAgICAgICAgIGNhc2UgMTI6CisgICAg
ICAgICAgICBjYXNlIDExOgorICAgICAgICAgICAgY2FzZSAxMDoKKyAgICAgICAgICAgICAgICBp
ZiAoMTAwMCA8PSBudW1iZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgKnBvd2VyID0gMTAwMDsK
KyAgICAgICAgICAgICAgICAgICAgKmV4cG9uZW50ID0gMzsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfSAgLy8gZWxzZSBmYWxsdGhyb3VnaAorICAgICAgICAg
ICAgY2FzZSA5OgorICAgICAgICAgICAgY2FzZSA4OgorICAgICAgICAgICAgY2FzZSA3OgorICAg
ICAgICAgICAgICAgIGlmICgxMDAgPD0gbnVtYmVyKSB7CisgICAgICAgICAgICAgICAgICAgICpw
b3dlciA9IDEwMDsKKyAgICAgICAgICAgICAgICAgICAgKmV4cG9uZW50ID0gMjsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSAgLy8gZWxzZSBmYWxsdGhyb3Vn
aAorICAgICAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAg
Y2FzZSA0OgorICAgICAgICAgICAgICAgIGlmICgxMCA8PSBudW1iZXIpIHsKKyAgICAgICAgICAg
ICAgICAgICAgKnBvd2VyID0gMTA7CisgICAgICAgICAgICAgICAgICAgICpleHBvbmVudCA9IDE7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gIC8vIGVsc2Ug
ZmFsbHRocm91Z2gKKyAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIGNhc2UgMjoKKyAg
ICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBpZiAoMSA8PSBudW1iZXIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgKnBvd2VyID0gMTsKKyAgICAgICAgICAgICAgICAgICAgKmV4cG9u
ZW50ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSAg
Ly8gZWxzZSBmYWxsdGhyb3VnaAorICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAg
ICpwb3dlciA9IDA7CisgICAgICAgICAgICAgICAgKmV4cG9uZW50ID0gLTE7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIC8vIEZv
bGxvd2luZyBhc3NpZ25tZW50cyBhcmUgaGVyZSB0byBzaWxlbmNlIGNvbXBpbGVyIHdhcm5pbmdz
LgorICAgICAgICAgICAgICAgICpwb3dlciA9IDA7CisgICAgICAgICAgICAgICAgKmV4cG9uZW50
ID0gMDsKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIAorICAgIC8vIEdlbmVyYXRlcyB0aGUgZGlnaXRzIG9mIGlucHV0IG51bWJlciB3
LgorICAgIC8vIHcgaXMgYSBmbG9hdGluZy1wb2ludCBudW1iZXIgKERpeUZwKSwgY29uc2lzdGlu
ZyBvZiBhIHNpZ25pZmljYW5kIGFuZCBhbgorICAgIC8vIGV4cG9uZW50LiBJdHMgZXhwb25lbnQg
aXMgYm91bmRlZCBieSBrTWluaW1hbFRhcmdldEV4cG9uZW50IGFuZAorICAgIC8vIGtNYXhpbWFs
VGFyZ2V0RXhwb25lbnQuCisgICAgLy8gICAgICAgSGVuY2UgLTYwIDw9IHcuZSgpIDw9IC0zMi4K
KyAgICAvLworICAgIC8vIFJldHVybnMgZmFsc2UgaWYgaXQgZmFpbHMsIGluIHdoaWNoIGNhc2Ug
dGhlIGdlbmVyYXRlZCBkaWdpdHMgaW4gdGhlIGJ1ZmZlcgorICAgIC8vIHNob3VsZCBub3QgYmUg
dXNlZC4KKyAgICAvLyBQcmVjb25kaXRpb25zOgorICAgIC8vICAqIGxvdywgdyBhbmQgaGlnaCBh
cmUgY29ycmVjdCB1cCB0byAxIHVscCAodW5pdCBpbiB0aGUgbGFzdCBwbGFjZSkuIFRoYXQKKyAg
ICAvLyAgICBpcywgdGhlaXIgZXJyb3IgbXVzdCBiZSBsZXNzIHRoYW4gYSB1bml0IG9mIHRoZWly
IGxhc3QgZGlnaXRzLgorICAgIC8vICAqIGxvdy5lKCkgPT0gdy5lKCkgPT0gaGlnaC5lKCkKKyAg
ICAvLyAgKiBsb3cgPCB3IDwgaGlnaCwgYW5kIHRha2luZyBpbnRvIGFjY291bnQgdGhlaXIgZXJy
b3I6IGxvd34gPD0gaGlnaH4KKyAgICAvLyAgKiBrTWluaW1hbFRhcmdldEV4cG9uZW50IDw9IHcu
ZSgpIDw9IGtNYXhpbWFsVGFyZ2V0RXhwb25lbnQKKyAgICAvLyBQb3N0Y29uZGl0aW9uczogcmV0
dXJucyBmYWxzZSBpZiBwcm9jZWR1cmUgZmFpbHMuCisgICAgLy8gICBvdGhlcndpc2U6CisgICAg
Ly8gICAgICogYnVmZmVyIGlzIG5vdCBudWxsLXRlcm1pbmF0ZWQsIGJ1dCBsZW4gY29udGFpbnMg
dGhlIG51bWJlciBvZiBkaWdpdHMuCisgICAgLy8gICAgICogYnVmZmVyIGNvbnRhaW5zIHRoZSBz
aG9ydGVzdCBwb3NzaWJsZSBkZWNpbWFsIGRpZ2l0LXNlcXVlbmNlCisgICAgLy8gICAgICAgc3Vj
aCB0aGF0IExPVyA8IGJ1ZmZlciAqIDEwXmthcHBhIDwgSElHSCwgd2hlcmUgTE9XIGFuZCBISUdI
IGFyZSB0aGUKKyAgICAvLyAgICAgICBjb3JyZWN0IHZhbHVlcyBvZiBsb3cgYW5kIGhpZ2ggKHdp
dGhvdXQgdGhlaXIgZXJyb3IpLgorICAgIC8vICAgICAqIGlmIG1vcmUgdGhhbiBvbmUgZGVjaW1h
bCByZXByZXNlbnRhdGlvbiBnaXZlcyB0aGUgbWluaW1hbCBudW1iZXIgb2YKKyAgICAvLyAgICAg
ICBkZWNpbWFsIGRpZ2l0cyB0aGVuIHRoZSBvbmUgY2xvc2VzdCB0byBXICh3aGVyZSBXIGlzIHRo
ZSBjb3JyZWN0IHZhbHVlCisgICAgLy8gICAgICAgb2YgdykgaXMgY2hvc2VuLgorICAgIC8vIFJl
bWFyazogdGhpcyBwcm9jZWR1cmUgdGFrZXMgaW50byBhY2NvdW50IHRoZSBpbXByZWNpc2lvbiBv
ZiBpdHMgaW5wdXQKKyAgICAvLyAgIG51bWJlcnMuIElmIHRoZSBwcmVjaXNpb24gaXMgbm90IGVu
b3VnaCB0byBndWFyYW50ZWUgYWxsIHRoZSBwb3N0Y29uZGl0aW9ucworICAgIC8vICAgdGhlbiBm
YWxzZSBpcyByZXR1cm5lZC4gVGhpcyB1c3VhbGx5IGhhcHBlbnMgcmFyZWx5ICh+MC41JSkuCisg
ICAgLy8KKyAgICAvLyBTYXksIGZvciB0aGUgc2FrZSBvZiBleGFtcGxlLCB0aGF0CisgICAgLy8g
ICB3LmUoKSA9PSAtNDgsIGFuZCB3LmYoKSA9PSAweDEyMzQ1Njc4OTBhYmNkZWYKKyAgICAvLyB3
J3MgdmFsdWUgY2FuIGJlIGNvbXB1dGVkIGJ5IHcuZigpICogMl53LmUoKQorICAgIC8vIFdlIGNh
biBvYnRhaW4gdydzIGludGVncmFsIGRpZ2l0cyBieSBzaW1wbHkgc2hpZnRpbmcgdy5mKCkgYnkg
LXcuZSgpLgorICAgIC8vICAtPiB3J3MgaW50ZWdyYWwgcGFydCBpcyAweDEyMzQKKyAgICAvLyAg
dydzIGZyYWN0aW9uYWwgcGFydCBpcyB0aGVyZWZvcmUgMHg1Njc4OTBhYmNkZWYuCisgICAgLy8g
UHJpbnRpbmcgdydzIGludGVncmFsIHBhcnQgaXMgZWFzeSAoc2ltcGx5IHByaW50IDB4MTIzNCBp
biBkZWNpbWFsKS4KKyAgICAvLyBJbiBvcmRlciB0byBwcmludCBpdHMgZnJhY3Rpb24gd2UgcmVw
ZWF0ZWRseSBtdWx0aXBseSB0aGUgZnJhY3Rpb24gYnkgMTAgYW5kCisgICAgLy8gZ2V0IGVhY2gg
ZGlnaXQuIEV4YW1wbGUgdGhlIGZpcnN0IGRpZ2l0IGFmdGVyIHRoZSBwb2ludCB3b3VsZCBiZSBj
b21wdXRlZCBieQorICAgIC8vICAgKDB4NTY3ODkwYWJjZGVmICogMTApID4+IDQ4LiAtPiAzCisg
ICAgLy8gVGhlIHdob2xlIHRoaW5nIGJlY29tZXMgc2xpZ2h0bHkgbW9yZSBjb21wbGljYXRlZCBi
ZWNhdXNlIHdlIHdhbnQgdG8gc3RvcAorICAgIC8vIG9uY2Ugd2UgaGF2ZSBlbm91Z2ggZGlnaXRz
LiBUaGF0IGlzLCBvbmNlIHRoZSBkaWdpdHMgaW5zaWRlIHRoZSBidWZmZXIKKyAgICAvLyByZXBy
ZXNlbnQgJ3cnIHdlIGNhbiBzdG9wLiBFdmVyeXRoaW5nIGluc2lkZSB0aGUgaW50ZXJ2YWwgbG93
IC0gaGlnaAorICAgIC8vIHJlcHJlc2VudHMgdy4gSG93ZXZlciB3ZSBoYXZlIHRvIHBheSBhdHRl
bnRpb24gdG8gbG93LCBoaWdoIGFuZCB3J3MKKyAgICAvLyBpbXByZWNpc2lvbi4KKyAgICBzdGF0
aWMgYm9vbCBEaWdpdEdlbihEaXlGcCBsb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgRGl5
RnAgdywKKyAgICAgICAgICAgICAgICAgICAgICAgICBEaXlGcCBoaWdoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50KiBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBrYXBwYSkgewor
ICAgICAgICBBU1NFUlQobG93LmUoKSA9PSB3LmUoKSAmJiB3LmUoKSA9PSBoaWdoLmUoKSk7Cisg
ICAgICAgIEFTU0VSVChsb3cuZigpICsgMSA8PSBoaWdoLmYoKSAtIDEpOworICAgICAgICBBU1NF
UlQoa01pbmltYWxUYXJnZXRFeHBvbmVudCA8PSB3LmUoKSAmJiB3LmUoKSA8PSBrTWF4aW1hbFRh
cmdldEV4cG9uZW50KTsKKyAgICAgICAgLy8gbG93LCB3IGFuZCBoaWdoIGFyZSBpbXByZWNpc2Us
IGJ1dCBieSBsZXNzIHRoYW4gb25lIHVscCAodW5pdCBpbiB0aGUgbGFzdAorICAgICAgICAvLyBw
bGFjZSkuCisgICAgICAgIC8vIElmIHdlIHJlbW92ZSAocmVzcC4gYWRkKSAxIHVscCBmcm9tIGxv
dyAocmVzcC4gaGlnaCkgd2UgYXJlIGNlcnRhaW4gdGhhdAorICAgICAgICAvLyB0aGUgbmV3IG51
bWJlcnMgYXJlIG91dHNpZGUgb2YgdGhlIGludGVydmFsIHdlIHdhbnQgdGhlIGZpbmFsCisgICAg
ICAgIC8vIHJlcHJlc2VudGF0aW9uIHRvIGxpZSBpbi4KKyAgICAgICAgLy8gSW52ZXJzZWx5IGFk
ZGluZyAocmVzcC4gcmVtb3ZpbmcpIDEgdWxwIGZyb20gbG93IChyZXNwLiBoaWdoKSB3b3VsZCB5
aWVsZAorICAgICAgICAvLyBudW1iZXJzIHRoYXQgYXJlIGNlcnRhaW4gdG8gbGllIGluIHRoZSBp
bnRlcnZhbC4gV2Ugd2lsbCB1c2UgdGhpcyBmYWN0CisgICAgICAgIC8vIGxhdGVyIG9uLgorICAg
ICAgICAvLyBXZSB3aWxsIG5vdyBzdGFydCBieSBnZW5lcmF0aW5nIHRoZSBkaWdpdHMgd2l0aGlu
IHRoZSB1bmNlcnRhaW4KKyAgICAgICAgLy8gaW50ZXJ2YWwuIExhdGVyIHdlIHdpbGwgd2VlZCBv
dXQgcmVwcmVzZW50YXRpb25zIHRoYXQgbGllIG91dHNpZGUgdGhlIHNhZmUKKyAgICAgICAgLy8g
aW50ZXJ2YWwgYW5kIHRodXMgX21pZ2h0XyBsaWUgb3V0c2lkZSB0aGUgY29ycmVjdCBpbnRlcnZh
bC4KKyAgICAgICAgdWludDY0X3QgdW5pdCA9IDE7CisgICAgICAgIERpeUZwIHRvb19sb3cgPSBE
aXlGcChsb3cuZigpIC0gdW5pdCwgbG93LmUoKSk7CisgICAgICAgIERpeUZwIHRvb19oaWdoID0g
RGl5RnAoaGlnaC5mKCkgKyB1bml0LCBoaWdoLmUoKSk7CisgICAgICAgIC8vIHRvb19sb3cgYW5k
IHRvb19oaWdoIGFyZSBndWFyYW50ZWVkIHRvIGxpZSBvdXRzaWRlIHRoZSBpbnRlcnZhbCB3ZSB3
YW50IHRoZQorICAgICAgICAvLyBnZW5lcmF0ZWQgbnVtYmVyIGluLgorICAgICAgICBEaXlGcCB1
bnNhZmVfaW50ZXJ2YWwgPSBEaXlGcDo6TWludXModG9vX2hpZ2gsIHRvb19sb3cpOworICAgICAg
ICAvLyBXZSBub3cgY3V0IHRoZSBpbnB1dCBudW1iZXIgaW50byB0d28gcGFydHM6IHRoZSBpbnRl
Z3JhbCBkaWdpdHMgYW5kIHRoZQorICAgICAgICAvLyBmcmFjdGlvbmFscy4gV2Ugd2lsbCBub3Qg
d3JpdGUgYW55IGRlY2ltYWwgc2VwYXJhdG9yIHRob3VnaCwgYnV0IGFkYXB0CisgICAgICAgIC8v
IGthcHBhIGluc3RlYWQuCisgICAgICAgIC8vIFJlbWluZGVyOiB3ZSBhcmUgY3VycmVudGx5IGNv
bXB1dGluZyB0aGUgZGlnaXRzIChzdG9yZWQgaW5zaWRlIHRoZSBidWZmZXIpCisgICAgICAgIC8v
IHN1Y2ggdGhhdDogICB0b29fbG93IDwgYnVmZmVyICogMTBea2FwcGEgPCB0b29faGlnaAorICAg
ICAgICAvLyBXZSB1c2UgdG9vX2hpZ2ggZm9yIHRoZSBkaWdpdF9nZW5lcmF0aW9uIGFuZCBzdG9w
IGFzIHNvb24gYXMgcG9zc2libGUuCisgICAgICAgIC8vIElmIHdlIHN0b3AgZWFybHkgd2UgZWZm
ZWN0aXZlbHkgcm91bmQgZG93bi4KKyAgICAgICAgRGl5RnAgb25lID0gRGl5RnAoc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KDEpIDw8IC13LmUoKSwgdy5lKCkpOworICAgICAgICAvLyBEaXZpc2lvbiBi
eSBvbmUgaXMgYSBzaGlmdC4KKyAgICAgICAgdWludDMyX3QgaW50ZWdyYWxzID0gc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KHRvb19oaWdoLmYoKSA+PiAtb25lLmUoKSk7CisgICAgICAgIC8vIE1vZHVs
byBieSBvbmUgaXMgYW4gYW5kLgorICAgICAgICB1aW50NjRfdCBmcmFjdGlvbmFscyA9IHRvb19o
aWdoLmYoKSAmIChvbmUuZigpIC0gMSk7CisgICAgICAgIHVpbnQzMl90IGRpdmlzb3I7CisgICAg
ICAgIGludCBkaXZpc29yX2V4cG9uZW50OworICAgICAgICBCaWdnZXN0UG93ZXJUZW4oaW50ZWdy
YWxzLCBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSAtICgtb25lLmUoKSksCisgICAgICAgICAgICAg
ICAgICAgICAgICAmZGl2aXNvciwgJmRpdmlzb3JfZXhwb25lbnQpOworICAgICAgICAqa2FwcGEg
PSBkaXZpc29yX2V4cG9uZW50ICsgMTsKKyAgICAgICAgKmxlbmd0aCA9IDA7CisgICAgICAgIC8v
IExvb3AgaW52YXJpYW50OiBidWZmZXIgPSB0b29faGlnaCAvIDEwXmthcHBhICAoaW50ZWdlciBk
aXZpc2lvbikKKyAgICAgICAgLy8gVGhlIGludmFyaWFudCBob2xkcyBmb3IgdGhlIGZpcnN0IGl0
ZXJhdGlvbjoga2FwcGEgaGFzIGJlZW4gaW5pdGlhbGl6ZWQKKyAgICAgICAgLy8gd2l0aCB0aGUg
ZGl2aXNvciBleHBvbmVudCArIDEuIEFuZCB0aGUgZGl2aXNvciBpcyB0aGUgYmlnZ2VzdCBwb3dl
ciBvZiB0ZW4KKyAgICAgICAgLy8gdGhhdCBpcyBzbWFsbGVyIHRoYW4gaW50ZWdyYWxzLgorICAg
ICAgICB3aGlsZSAoKmthcHBhID4gMCkgeworICAgICAgICAgICAgaW50IGRpZ2l0ID0gaW50ZWdy
YWxzIC8gZGl2aXNvcjsKKyAgICAgICAgICAgIGJ1ZmZlclsqbGVuZ3RoXSA9ICcwJyArIGRpZ2l0
OworICAgICAgICAgICAgKCpsZW5ndGgpKys7CisgICAgICAgICAgICBpbnRlZ3JhbHMgJT0gZGl2
aXNvcjsKKyAgICAgICAgICAgICgqa2FwcGEpLS07CisgICAgICAgICAgICAvLyBOb3RlIHRoYXQg
a2FwcGEgbm93IGVxdWFscyB0aGUgZXhwb25lbnQgb2YgdGhlIGRpdmlzb3IgYW5kIHRoYXQgdGhl
CisgICAgICAgICAgICAvLyBpbnZhcmlhbnQgdGh1cyBob2xkcyBhZ2Fpbi4KKyAgICAgICAgICAg
IHVpbnQ2NF90IHJlc3QgPQorICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVpbnQ2NF90PihpbnRl
Z3JhbHMpIDw8IC1vbmUuZSgpKSArIGZyYWN0aW9uYWxzOworICAgICAgICAgICAgLy8gSW52YXJp
YW50OiB0b29faGlnaCA9IGJ1ZmZlciAqIDEwXmthcHBhICsgRGl5RnAocmVzdCwgb25lLmUoKSkK
KyAgICAgICAgICAgIC8vIFJlbWluZGVyOiB1bnNhZmVfaW50ZXJ2YWwuZSgpID09IG9uZS5lKCkK
KyAgICAgICAgICAgIGlmIChyZXN0IDwgdW5zYWZlX2ludGVydmFsLmYoKSkgeworICAgICAgICAg
ICAgICAgIC8vIFJvdW5kaW5nIGRvd24gKGJ5IG5vdCBlbWl0dGluZyB0aGUgcmVtYWluaW5nIGRp
Z2l0cykgeWllbGRzIGEgbnVtYmVyCisgICAgICAgICAgICAgICAgLy8gdGhhdCBsaWVzIHdpdGhp
biB0aGUgdW5zYWZlIGludGVydmFsLgorICAgICAgICAgICAgICAgIHJldHVybiBSb3VuZFdlZWQo
YnVmZmVyLCAqbGVuZ3RoLCBEaXlGcDo6TWludXModG9vX2hpZ2gsIHcpLmYoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2FmZV9pbnRlcnZhbC5mKCksIHJlc3QsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50NjRfdD4oZGl2aXNv
cikgPDwgLW9uZS5lKCksIHVuaXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGl2aXNv
ciAvPSAxMDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gVGhlIGludGVncmFscyBo
YXZlIGJlZW4gZ2VuZXJhdGVkLiBXZSBhcmUgYXQgdGhlIHBvaW50IG9mIHRoZSBkZWNpbWFsCisg
ICAgICAgIC8vIHNlcGFyYXRvci4gSW4gdGhlIGZvbGxvd2luZyBsb29wIHdlIHNpbXBseSBtdWx0
aXBseSB0aGUgcmVtYWluaW5nIGRpZ2l0cyBieQorICAgICAgICAvLyAxMCBhbmQgZGl2aWRlIGJ5
IG9uZS4gV2UganVzdCBuZWVkIHRvIHBheSBhdHRlbnRpb24gdG8gbXVsdGlwbHkgYXNzb2NpYXRl
ZAorICAgICAgICAvLyBkYXRhIChsaWtlIHRoZSBpbnRlcnZhbCBvciAndW5pdCcpLCB0b28uCisg
ICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgbXVsdGlwbGljYXRpb24gYnkgMTAgZG9lcyBub3Qgb3Zl
cmZsb3csIGJlY2F1c2Ugdy5lID49IC02MAorICAgICAgICAvLyBhbmQgdGh1cyBvbmUuZSA+PSAt
NjAuCisgICAgICAgIEFTU0VSVChvbmUuZSgpID49IC02MCk7CisgICAgICAgIEFTU0VSVChmcmFj
dGlvbmFscyA8IG9uZS5mKCkpOworICAgICAgICBBU1NFUlQoVUlOVDY0XzJQQVJUX0MoMHhGRkZG
RkZGRiwgRkZGRkZGRkYpIC8gMTAgPj0gb25lLmYoKSk7CisgICAgICAgIHdoaWxlICh0cnVlKSB7
CisgICAgICAgICAgICBmcmFjdGlvbmFscyAqPSAxMDsKKyAgICAgICAgICAgIHVuaXQgKj0gMTA7
CisgICAgICAgICAgICB1bnNhZmVfaW50ZXJ2YWwuc2V0X2YodW5zYWZlX2ludGVydmFsLmYoKSAq
IDEwKTsKKyAgICAgICAgICAgIC8vIEludGVnZXIgZGl2aXNpb24gYnkgb25lLgorICAgICAgICAg
ICAgaW50IGRpZ2l0ID0gc3RhdGljX2Nhc3Q8aW50PihmcmFjdGlvbmFscyA+PiAtb25lLmUoKSk7
CisgICAgICAgICAgICBidWZmZXJbKmxlbmd0aF0gPSAnMCcgKyBkaWdpdDsKKyAgICAgICAgICAg
ICgqbGVuZ3RoKSsrOworICAgICAgICAgICAgZnJhY3Rpb25hbHMgJj0gb25lLmYoKSAtIDE7ICAv
LyBNb2R1bG8gYnkgb25lLgorICAgICAgICAgICAgKCprYXBwYSktLTsKKyAgICAgICAgICAgIGlm
IChmcmFjdGlvbmFscyA8IHVuc2FmZV9pbnRlcnZhbC5mKCkpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gUm91bmRXZWVkKGJ1ZmZlciwgKmxlbmd0aCwgRGl5RnA6Ok1pbnVzKHRvb19oaWdoLCB3
KS5mKCkgKiB1bml0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zYWZlX2lu
dGVydmFsLmYoKSwgZnJhY3Rpb25hbHMsIG9uZS5mKCksIHVuaXQpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIAorICAgIC8vIEdlbmVyYXRlcyAoYXQg
bW9zdCkgcmVxdWVzdGVkX2RpZ2l0cyBkaWdpdHMgb2YgaW5wdXQgbnVtYmVyIHcuCisgICAgLy8g
dyBpcyBhIGZsb2F0aW5nLXBvaW50IG51bWJlciAoRGl5RnApLCBjb25zaXN0aW5nIG9mIGEgc2ln
bmlmaWNhbmQgYW5kIGFuCisgICAgLy8gZXhwb25lbnQuIEl0cyBleHBvbmVudCBpcyBib3VuZGVk
IGJ5IGtNaW5pbWFsVGFyZ2V0RXhwb25lbnQgYW5kCisgICAgLy8ga01heGltYWxUYXJnZXRFeHBv
bmVudC4KKyAgICAvLyAgICAgICBIZW5jZSAtNjAgPD0gdy5lKCkgPD0gLTMyLgorICAgIC8vCisg
ICAgLy8gUmV0dXJucyBmYWxzZSBpZiBpdCBmYWlscywgaW4gd2hpY2ggY2FzZSB0aGUgZ2VuZXJh
dGVkIGRpZ2l0cyBpbiB0aGUgYnVmZmVyCisgICAgLy8gc2hvdWxkIG5vdCBiZSB1c2VkLgorICAg
IC8vIFByZWNvbmRpdGlvbnM6CisgICAgLy8gICogdyBpcyBjb3JyZWN0IHVwIHRvIDEgdWxwICh1
bml0IGluIHRoZSBsYXN0IHBsYWNlKS4gVGhhdAorICAgIC8vICAgIGlzLCBpdHMgZXJyb3IgbXVz
dCBiZSBzdHJpY3RseSBsZXNzIHRoYW4gYSB1bml0IG9mIGl0cyBsYXN0IGRpZ2l0LgorICAgIC8v
ICAqIGtNaW5pbWFsVGFyZ2V0RXhwb25lbnQgPD0gdy5lKCkgPD0ga01heGltYWxUYXJnZXRFeHBv
bmVudAorICAgIC8vCisgICAgLy8gUG9zdGNvbmRpdGlvbnM6IHJldHVybnMgZmFsc2UgaWYgcHJv
Y2VkdXJlIGZhaWxzLgorICAgIC8vICAgb3RoZXJ3aXNlOgorICAgIC8vICAgICAqIGJ1ZmZlciBp
cyBub3QgbnVsbC10ZXJtaW5hdGVkLCBidXQgbGVuZ3RoIGNvbnRhaW5zIHRoZSBudW1iZXIgb2YK
KyAgICAvLyAgICAgICBkaWdpdHMuCisgICAgLy8gICAgICogdGhlIHJlcHJlc2VudGF0aW9uIGlu
IGJ1ZmZlciBpcyB0aGUgbW9zdCBwcmVjaXNlIHJlcHJlc2VudGF0aW9uIG9mCisgICAgLy8gICAg
ICAgcmVxdWVzdGVkX2RpZ2l0cyBkaWdpdHMuCisgICAgLy8gICAgICogYnVmZmVyIGNvbnRhaW5z
IGF0IG1vc3QgcmVxdWVzdGVkX2RpZ2l0cyBkaWdpdHMgb2Ygdy4gSWYgdGhlcmUgYXJlIGxlc3MK
KyAgICAvLyAgICAgICB0aGFuIHJlcXVlc3RlZF9kaWdpdHMgZGlnaXRzIHRoZW4gc29tZSB0cmFp
bGluZyAnMCdzIGhhdmUgYmVlbiByZW1vdmVkLgorICAgIC8vICAgICAqIGthcHBhIGlzIHN1Y2gg
dGhhdAorICAgIC8vICAgICAgICAgICAgdyA9IGJ1ZmZlciAqIDEwXmthcHBhICsgZXBzIHdpdGgg
fGVwc3wgPCAxMF5rYXBwYSAvIDIuCisgICAgLy8KKyAgICAvLyBSZW1hcms6IFRoaXMgcHJvY2Vk
dXJlIHRha2VzIGludG8gYWNjb3VudCB0aGUgaW1wcmVjaXNpb24gb2YgaXRzIGlucHV0CisgICAg
Ly8gICBudW1iZXJzLiBJZiB0aGUgcHJlY2lzaW9uIGlzIG5vdCBlbm91Z2ggdG8gZ3VhcmFudGVl
IGFsbCB0aGUgcG9zdGNvbmRpdGlvbnMKKyAgICAvLyAgIHRoZW4gZmFsc2UgaXMgcmV0dXJuZWQu
IFRoaXMgdXN1YWxseSBoYXBwZW5zIHJhcmVseSwgYnV0IHRoZSBmYWlsdXJlLXJhdGUKKyAgICAv
LyAgIGluY3JlYXNlcyB3aXRoIGhpZ2hlciByZXF1ZXN0ZWRfZGlnaXRzLgorICAgIHN0YXRpYyBi
b29sIERpZ2l0R2VuQ291bnRlZChEaXlGcCB3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50KiBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCoga2FwcGEp
IHsKKyAgICAgICAgQVNTRVJUKGtNaW5pbWFsVGFyZ2V0RXhwb25lbnQgPD0gdy5lKCkgJiYgdy5l
KCkgPD0ga01heGltYWxUYXJnZXRFeHBvbmVudCk7CisgICAgICAgIEFTU0VSVChrTWluaW1hbFRh
cmdldEV4cG9uZW50ID49IC02MCk7CisgICAgICAgIEFTU0VSVChrTWF4aW1hbFRhcmdldEV4cG9u
ZW50IDw9IC0zMik7CisgICAgICAgIC8vIHcgaXMgYXNzdW1lZCB0byBoYXZlIGFuIGVycm9yIGxl
c3MgdGhhbiAxIHVuaXQuIFdoZW5ldmVyIHcgaXMgc2NhbGVkIHdlCisgICAgICAgIC8vIGFsc28g
c2NhbGUgaXRzIGVycm9yLgorICAgICAgICB1aW50NjRfdCB3X2Vycm9yID0gMTsKKyAgICAgICAg
Ly8gV2UgY3V0IHRoZSBpbnB1dCBudW1iZXIgaW50byB0d28gcGFydHM6IHRoZSBpbnRlZ3JhbCBk
aWdpdHMgYW5kIHRoZQorICAgICAgICAvLyBmcmFjdGlvbmFsIGRpZ2l0cy4gV2UgZG9uJ3QgZW1p
dCBhbnkgZGVjaW1hbCBzZXBhcmF0b3IsIGJ1dCBhZGFwdCBrYXBwYQorICAgICAgICAvLyBpbnN0
ZWFkLiBFeGFtcGxlOiBpbnN0ZWFkIG9mIHdyaXRpbmcgIjEuMiIgd2UgcHV0ICIxMiIgaW50byB0
aGUgYnVmZmVyIGFuZAorICAgICAgICAvLyBpbmNyZWFzZSBrYXBwYSBieSAxLgorICAgICAgICBE
aXlGcCBvbmUgPSBEaXlGcChzdGF0aWNfY2FzdDx1aW50NjRfdD4oMSkgPDwgLXcuZSgpLCB3LmUo
KSk7CisgICAgICAgIC8vIERpdmlzaW9uIGJ5IG9uZSBpcyBhIHNoaWZ0LgorICAgICAgICB1aW50
MzJfdCBpbnRlZ3JhbHMgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4ody5mKCkgPj4gLW9uZS5lKCkp
OworICAgICAgICAvLyBNb2R1bG8gYnkgb25lIGlzIGFuIGFuZC4KKyAgICAgICAgdWludDY0X3Qg
ZnJhY3Rpb25hbHMgPSB3LmYoKSAmIChvbmUuZigpIC0gMSk7CisgICAgICAgIHVpbnQzMl90IGRp
dmlzb3I7CisgICAgICAgIGludCBkaXZpc29yX2V4cG9uZW50OworICAgICAgICBCaWdnZXN0UG93
ZXJUZW4oaW50ZWdyYWxzLCBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSAtICgtb25lLmUoKSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAmZGl2aXNvciwgJmRpdmlzb3JfZXhwb25lbnQpOworICAg
ICAgICAqa2FwcGEgPSBkaXZpc29yX2V4cG9uZW50ICsgMTsKKyAgICAgICAgKmxlbmd0aCA9IDA7
CisgICAgICAgIAorICAgICAgICAvLyBMb29wIGludmFyaWFudDogYnVmZmVyID0gdyAvIDEwXmth
cHBhICAoaW50ZWdlciBkaXZpc2lvbikKKyAgICAgICAgLy8gVGhlIGludmFyaWFudCBob2xkcyBm
b3IgdGhlIGZpcnN0IGl0ZXJhdGlvbjoga2FwcGEgaGFzIGJlZW4gaW5pdGlhbGl6ZWQKKyAgICAg
ICAgLy8gd2l0aCB0aGUgZGl2aXNvciBleHBvbmVudCArIDEuIEFuZCB0aGUgZGl2aXNvciBpcyB0
aGUgYmlnZ2VzdCBwb3dlciBvZiB0ZW4KKyAgICAgICAgLy8gdGhhdCBpcyBzbWFsbGVyIHRoYW4g
J2ludGVncmFscycuCisgICAgICAgIHdoaWxlICgqa2FwcGEgPiAwKSB7CisgICAgICAgICAgICBp
bnQgZGlnaXQgPSBpbnRlZ3JhbHMgLyBkaXZpc29yOworICAgICAgICAgICAgYnVmZmVyWypsZW5n
dGhdID0gJzAnICsgZGlnaXQ7CisgICAgICAgICAgICAoKmxlbmd0aCkrKzsKKyAgICAgICAgICAg
IHJlcXVlc3RlZF9kaWdpdHMtLTsKKyAgICAgICAgICAgIGludGVncmFscyAlPSBkaXZpc29yOwor
ICAgICAgICAgICAgKCprYXBwYSktLTsKKyAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBrYXBwYSBu
b3cgZXF1YWxzIHRoZSBleHBvbmVudCBvZiB0aGUgZGl2aXNvciBhbmQgdGhhdCB0aGUKKyAgICAg
ICAgICAgIC8vIGludmFyaWFudCB0aHVzIGhvbGRzIGFnYWluLgorICAgICAgICAgICAgaWYgKHJl
cXVlc3RlZF9kaWdpdHMgPT0gMCkgYnJlYWs7CisgICAgICAgICAgICBkaXZpc29yIC89IDEwOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAocmVxdWVzdGVkX2RpZ2l0cyA9PSAwKSB7
CisgICAgICAgICAgICB1aW50NjRfdCByZXN0ID0KKyAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1
aW50NjRfdD4oaW50ZWdyYWxzKSA8PCAtb25lLmUoKSkgKyBmcmFjdGlvbmFsczsKKyAgICAgICAg
ICAgIHJldHVybiBSb3VuZFdlZWRDb3VudGVkKGJ1ZmZlciwgKmxlbmd0aCwgcmVzdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQ2NF90PihkaXZp
c29yKSA8PCAtb25lLmUoKSwgd19lcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGthcHBhKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gVGhlIGludGVn
cmFscyBoYXZlIGJlZW4gZ2VuZXJhdGVkLiBXZSBhcmUgYXQgdGhlIHBvaW50IG9mIHRoZSBkZWNp
bWFsCisgICAgICAgIC8vIHNlcGFyYXRvci4gSW4gdGhlIGZvbGxvd2luZyBsb29wIHdlIHNpbXBs
eSBtdWx0aXBseSB0aGUgcmVtYWluaW5nIGRpZ2l0cyBieQorICAgICAgICAvLyAxMCBhbmQgZGl2
aWRlIGJ5IG9uZS4gV2UganVzdCBuZWVkIHRvIHBheSBhdHRlbnRpb24gdG8gbXVsdGlwbHkgYXNz
b2NpYXRlZAorICAgICAgICAvLyBkYXRhICh0aGUgJ3VuaXQnKSwgdG9vLgorICAgICAgICAvLyBO
b3RlIHRoYXQgdGhlIG11bHRpcGxpY2F0aW9uIGJ5IDEwIGRvZXMgbm90IG92ZXJmbG93LCBiZWNh
dXNlIHcuZSA+PSAtNjAKKyAgICAgICAgLy8gYW5kIHRodXMgb25lLmUgPj0gLTYwLgorICAgICAg
ICBBU1NFUlQob25lLmUoKSA+PSAtNjApOworICAgICAgICBBU1NFUlQoZnJhY3Rpb25hbHMgPCBv
bmUuZigpKTsKKyAgICAgICAgQVNTRVJUKFVJTlQ2NF8yUEFSVF9DKDB4RkZGRkZGRkYsIEZGRkZG
RkZGKSAvIDEwID49IG9uZS5mKCkpOworICAgICAgICB3aGlsZSAocmVxdWVzdGVkX2RpZ2l0cyA+
IDAgJiYgZnJhY3Rpb25hbHMgPiB3X2Vycm9yKSB7CisgICAgICAgICAgICBmcmFjdGlvbmFscyAq
PSAxMDsKKyAgICAgICAgICAgIHdfZXJyb3IgKj0gMTA7CisgICAgICAgICAgICAvLyBJbnRlZ2Vy
IGRpdmlzaW9uIGJ5IG9uZS4KKyAgICAgICAgICAgIGludCBkaWdpdCA9IHN0YXRpY19jYXN0PGlu
dD4oZnJhY3Rpb25hbHMgPj4gLW9uZS5lKCkpOworICAgICAgICAgICAgYnVmZmVyWypsZW5ndGhd
ID0gJzAnICsgZGlnaXQ7CisgICAgICAgICAgICAoKmxlbmd0aCkrKzsKKyAgICAgICAgICAgIHJl
cXVlc3RlZF9kaWdpdHMtLTsKKyAgICAgICAgICAgIGZyYWN0aW9uYWxzICY9IG9uZS5mKCkgLSAx
OyAgLy8gTW9kdWxvIGJ5IG9uZS4KKyAgICAgICAgICAgICgqa2FwcGEpLS07CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHJlcXVlc3RlZF9kaWdpdHMgIT0gMCkgcmV0dXJuIGZhbHNlOworICAgICAg
ICByZXR1cm4gUm91bmRXZWVkQ291bnRlZChidWZmZXIsICpsZW5ndGgsIGZyYWN0aW9uYWxzLCBv
bmUuZigpLCB3X2Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYXBwYSk7
CisgICAgfQorICAgIAorICAgIAorICAgIC8vIFByb3ZpZGVzIGEgZGVjaW1hbCByZXByZXNlbnRh
dGlvbiBvZiB2LgorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBpdCBzdWNjZWVkcywgb3RoZXJ3aXNl
IHRoZSByZXN1bHQgY2Fubm90IGJlIHRydXN0ZWQuCisgICAgLy8gVGhlcmUgd2lsbCBiZSAqbGVu
Z3RoIGRpZ2l0cyBpbnNpZGUgdGhlIGJ1ZmZlciAobm90IG51bGwtdGVybWluYXRlZCkuCisgICAg
Ly8gSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB0aGVuCisgICAgLy8gICAgICAgIHYgPT0g
KGRvdWJsZSkgKGJ1ZmZlciAqIDEwXmRlY2ltYWxfZXhwb25lbnQpLgorICAgIC8vIFRoZSBkaWdp
dHMgaW4gdGhlIGJ1ZmZlciBhcmUgdGhlIHNob3J0ZXN0IHJlcHJlc2VudGF0aW9uIHBvc3NpYmxl
OiBubworICAgIC8vIDAuMDk5OTk5OTk5OTk5OTk5OTkgaW5zdGVhZCBvZiAwLjEuIFRoZSBzaG9y
dGVyIHJlcHJlc2VudGF0aW9uIHdpbGwgZXZlbiBiZQorICAgIC8vIGNob3NlbiBldmVuIGlmIHRo
ZSBsb25nZXIgb25lIHdvdWxkIGJlIGNsb3NlciB0byB2LgorICAgIC8vIFRoZSBsYXN0IGRpZ2l0
IHdpbGwgYmUgY2xvc2VzdCB0byB0aGUgYWN0dWFsIHYuIFRoYXQgaXMsIGV2ZW4gaWYgc2V2ZXJh
bAorICAgIC8vIGRpZ2l0cyBtaWdodCBjb3JyZWN0bHkgeWllbGQgJ3YnIHdoZW4gcmVhZCBhZ2Fp
biwgdGhlIGNsb3Nlc3Qgd2lsbCBiZQorICAgIC8vIGNvbXB1dGVkLgorICAgIHN0YXRpYyBib29s
IEdyaXN1Myhkb3VibGUgdiwKKyAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1
ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50KiBsZW5ndGgsCisgICAgICAgICAgICAg
ICAgICAgICAgIGludCogZGVjaW1hbF9leHBvbmVudCkgeworICAgICAgICBEaXlGcCB3ID0gRG91
YmxlKHYpLkFzTm9ybWFsaXplZERpeUZwKCk7CisgICAgICAgIC8vIGJvdW5kYXJ5X21pbnVzIGFu
ZCBib3VuZGFyeV9wbHVzIGFyZSB0aGUgYm91bmRhcmllcyBiZXR3ZWVuIHYgYW5kIGl0cworICAg
ICAgICAvLyBjbG9zZXN0IGZsb2F0aW5nLXBvaW50IG5laWdoYm9ycy4gQW55IG51bWJlciBzdHJp
Y3RseSBiZXR3ZWVuCisgICAgICAgIC8vIGJvdW5kYXJ5X21pbnVzIGFuZCBib3VuZGFyeV9wbHVz
IHdpbGwgcm91bmQgdG8gdiB3aGVuIGNvbnZlcnQgdG8gYSBkb3VibGUuCisgICAgICAgIC8vIEdy
aXN1MyB3aWxsIG5ldmVyIG91dHB1dCByZXByZXNlbnRhdGlvbnMgdGhhdCBsaWUgZXhhY3RseSBv
biBhIGJvdW5kYXJ5LgorICAgICAgICBEaXlGcCBib3VuZGFyeV9taW51cywgYm91bmRhcnlfcGx1
czsKKyAgICAgICAgRG91YmxlKHYpLk5vcm1hbGl6ZWRCb3VuZGFyaWVzKCZib3VuZGFyeV9taW51
cywgJmJvdW5kYXJ5X3BsdXMpOworICAgICAgICBBU1NFUlQoYm91bmRhcnlfcGx1cy5lKCkgPT0g
dy5lKCkpOworICAgICAgICBEaXlGcCB0ZW5fbWs7ICAvLyBDYWNoZWQgcG93ZXIgb2YgdGVuOiAx
MF4taworICAgICAgICBpbnQgbWs7ICAgICAgICAvLyAtaworICAgICAgICBpbnQgdGVuX21rX21p
bmltYWxfYmluYXJ5X2V4cG9uZW50ID0KKyAgICAgICAga01pbmltYWxUYXJnZXRFeHBvbmVudCAt
ICh3LmUoKSArIERpeUZwOjprU2lnbmlmaWNhbmRTaXplKTsKKyAgICAgICAgaW50IHRlbl9ta19t
YXhpbWFsX2JpbmFyeV9leHBvbmVudCA9CisgICAgICAgIGtNYXhpbWFsVGFyZ2V0RXhwb25lbnQg
LSAody5lKCkgKyBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSk7CisgICAgICAgIFBvd2Vyc09mVGVu
Q2FjaGU6OkdldENhY2hlZFBvd2VyRm9yQmluYXJ5RXhwb25lbnRSYW5nZSgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbl9t
a19taW5pbWFsX2JpbmFyeV9leHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbl9ta19tYXhpbWFsX2JpbmFyeV9l
eHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZ0ZW5fbWssICZtayk7CisgICAgICAgIEFTU0VSVCgoa01pbmltYWxU
YXJnZXRFeHBvbmVudCA8PSB3LmUoKSArIHRlbl9tay5lKCkgKworICAgICAgICAgICAgICAgIERp
eUZwOjprU2lnbmlmaWNhbmRTaXplKSAmJgorICAgICAgICAgICAgICAgKGtNYXhpbWFsVGFyZ2V0
RXhwb25lbnQgPj0gdy5lKCkgKyB0ZW5fbWsuZSgpICsKKyAgICAgICAgICAgICAgICBEaXlGcDo6
a1NpZ25pZmljYW5kU2l6ZSkpOworICAgICAgICAvLyBOb3RlIHRoYXQgdGVuX21rIGlzIG9ubHkg
YW4gYXBwcm94aW1hdGlvbiBvZiAxMF4tay4gQSBEaXlGcCBvbmx5IGNvbnRhaW5zIGEKKyAgICAg
ICAgLy8gNjQgYml0IHNpZ25pZmljYW5kIGFuZCB0ZW5fbWsgaXMgdGh1cyBvbmx5IHByZWNpc2Ug
dXAgdG8gNjQgYml0cy4KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBEaXlGcDo6VGltZXMgcHJv
Y2VkdXJlIHJvdW5kcyBpdHMgcmVzdWx0LCBhbmQgdGVuX21rIGlzIGFwcHJveGltYXRlZAorICAg
ICAgICAvLyB0b28uIFRoZSB2YXJpYWJsZSBzY2FsZWRfdyAoYXMgd2VsbCBhcyBzY2FsZWRfYm91
bmRhcnlfbWludXMvcGx1cykgYXJlIG5vdworICAgICAgICAvLyBvZmYgYnkgYSBzbWFsbCBhbW91
bnQuCisgICAgICAgIC8vIEluIGZhY3Q6IHNjYWxlZF93IC0gdyoxMF5rIDwgMXVscCAodW5pdCBp
biB0aGUgbGFzdCBwbGFjZSkgb2Ygc2NhbGVkX3cuCisgICAgICAgIC8vIEluIG90aGVyIHdvcmRz
OiBsZXQgZiA9IHNjYWxlZF93LmYoKSBhbmQgZSA9IHNjYWxlZF93LmUoKSwgdGhlbgorICAgICAg
ICAvLyAgICAgICAgICAgKGYtMSkgKiAyXmUgPCB3KjEwXmsgPCAoZisxKSAqIDJeZQorICAgICAg
ICBEaXlGcCBzY2FsZWRfdyA9IERpeUZwOjpUaW1lcyh3LCB0ZW5fbWspOworICAgICAgICBBU1NF
UlQoc2NhbGVkX3cuZSgpID09CisgICAgICAgICAgICAgICBib3VuZGFyeV9wbHVzLmUoKSArIHRl
bl9tay5lKCkgKyBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSk7CisgICAgICAgIC8vIEluIHRoZW9y
eSBpdCB3b3VsZCBiZSBwb3NzaWJsZSB0byBhdm9pZCBzb21lIHJlY29tcHV0YXRpb25zIGJ5IGNv
bXB1dGluZworICAgICAgICAvLyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHcgYW5kIGJvdW5kYXJ5
X21pbnVzL3BsdXMgKGEgcG93ZXIgb2YgMikgYW5kIHRvCisgICAgICAgIC8vIGNvbXB1dGUgc2Nh
bGVkX2JvdW5kYXJ5X21pbnVzL3BsdXMgYnkgc3VidHJhY3RpbmcvYWRkaW5nIGZyb20KKyAgICAg
ICAgLy8gc2NhbGVkX3cuIEhvd2V2ZXIgdGhlIGNvZGUgYmVjb21lcyBtdWNoIGxlc3MgcmVhZGFi
bGUgYW5kIHRoZSBzcGVlZAorICAgICAgICAvLyBlbmhhbmNlbWVudHMgYXJlIG5vdCB0ZXJyaWZm
aWMuCisgICAgICAgIERpeUZwIHNjYWxlZF9ib3VuZGFyeV9taW51cyA9IERpeUZwOjpUaW1lcyhi
b3VuZGFyeV9taW51cywgdGVuX21rKTsKKyAgICAgICAgRGl5RnAgc2NhbGVkX2JvdW5kYXJ5X3Bs
dXMgID0gRGl5RnA6OlRpbWVzKGJvdW5kYXJ5X3BsdXMsICB0ZW5fbWspOworICAgICAgICAKKyAg
ICAgICAgLy8gRGlnaXRHZW4gd2lsbCBnZW5lcmF0ZSB0aGUgZGlnaXRzIG9mIHNjYWxlZF93LiBU
aGVyZWZvcmUgd2UgaGF2ZQorICAgICAgICAvLyB2ID09IChkb3VibGUpIChzY2FsZWRfdyAqIDEw
Xi1taykuCisgICAgICAgIC8vIFNldCBkZWNpbWFsX2V4cG9uZW50ID09IC1tayBhbmQgcGFzcyBp
dCB0byBEaWdpdEdlbi4gSWYgc2NhbGVkX3cgaXMgbm90IGFuCisgICAgICAgIC8vIGludGVnZXIg
dGhhbiBpdCB3aWxsIGJlIHVwZGF0ZWQuIEZvciBpbnN0YW5jZSBpZiBzY2FsZWRfdyA9PSAxLjIz
IHRoZW4KKyAgICAgICAgLy8gdGhlIGJ1ZmZlciB3aWxsIGJlIGZpbGxlZCB3aXRoICIxMjMiIHVu
ZCB0aGUgZGVjaW1hbF9leHBvbmVudCB3aWxsIGJlCisgICAgICAgIC8vIGRlY3JlYXNlZCBieSAy
LgorICAgICAgICBpbnQga2FwcGE7CisgICAgICAgIGJvb2wgcmVzdWx0ID0gRGlnaXRHZW4oc2Nh
bGVkX2JvdW5kYXJ5X21pbnVzLCBzY2FsZWRfdywgc2NhbGVkX2JvdW5kYXJ5X3BsdXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBsZW5ndGgsICZrYXBwYSk7CisgICAg
ICAgICpkZWNpbWFsX2V4cG9uZW50ID0gLW1rICsga2FwcGE7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIAorICAgIC8vIFRoZSAiY291bnRlZCIgdmVyc2lvbiBvZiBn
cmlzdTMgKHNlZSBhYm92ZSkgb25seSBnZW5lcmF0ZXMgcmVxdWVzdGVkX2RpZ2l0cworICAgIC8v
IG51bWJlciBvZiBkaWdpdHMuIFRoaXMgdmVyc2lvbiBkb2VzIG5vdCBnZW5lcmF0ZSB0aGUgc2hv
cnRlc3QgcmVwcmVzZW50YXRpb24sCisgICAgLy8gYW5kIHdpdGggZW5vdWdoIHJlcXVlc3RlZCBk
aWdpdHMgMC4xIHdpbGwgYXQgc29tZSBwb2ludCBwcmludCBhcyAwLjk5OTk5OTkuLi4KKyAgICAv
LyBHcmlzdTMgaXMgdG9vIGltcHJlY2lzZSBmb3IgcmVhbCBoYWxmd2F5IGNhc2VzICgxLjUgd2ls
bCBub3Qgd29yaykgYW5kCisgICAgLy8gdGhlcmVmb3JlIHRoZSByb3VuZGluZyBzdHJhdGVneSBm
b3IgaGFsZndheSBjYXNlcyBpcyBpcnJlbGV2YW50LgorICAgIHN0YXRpYyBib29sIEdyaXN1M0Nv
dW50ZWQoZG91YmxlIHYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVxdWVz
dGVkX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBi
dWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGxlbmd0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCogZGVjaW1hbF9leHBvbmVudCkgeworICAgICAg
ICBEaXlGcCB3ID0gRG91YmxlKHYpLkFzTm9ybWFsaXplZERpeUZwKCk7CisgICAgICAgIERpeUZw
IHRlbl9tazsgIC8vIENhY2hlZCBwb3dlciBvZiB0ZW46IDEwXi1rCisgICAgICAgIGludCBtazsg
ICAgICAgIC8vIC1rCisgICAgICAgIGludCB0ZW5fbWtfbWluaW1hbF9iaW5hcnlfZXhwb25lbnQg
PQorICAgICAgICBrTWluaW1hbFRhcmdldEV4cG9uZW50IC0gKHcuZSgpICsgRGl5RnA6OmtTaWdu
aWZpY2FuZFNpemUpOworICAgICAgICBpbnQgdGVuX21rX21heGltYWxfYmluYXJ5X2V4cG9uZW50
ID0KKyAgICAgICAga01heGltYWxUYXJnZXRFeHBvbmVudCAtICh3LmUoKSArIERpeUZwOjprU2ln
bmlmaWNhbmRTaXplKTsKKyAgICAgICAgUG93ZXJzT2ZUZW5DYWNoZTo6R2V0Q2FjaGVkUG93ZXJG
b3JCaW5hcnlFeHBvbmVudFJhbmdlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVuX21rX21pbmltYWxfYmluYXJ5X2V4cG9u
ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGVuX21rX21heGltYWxfYmluYXJ5X2V4cG9uZW50LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRlbl9t
aywgJm1rKTsKKyAgICAgICAgQVNTRVJUKChrTWluaW1hbFRhcmdldEV4cG9uZW50IDw9IHcuZSgp
ICsgdGVuX21rLmUoKSArCisgICAgICAgICAgICAgICAgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUp
ICYmCisgICAgICAgICAgICAgICAoa01heGltYWxUYXJnZXRFeHBvbmVudCA+PSB3LmUoKSArIHRl
bl9tay5lKCkgKworICAgICAgICAgICAgICAgIERpeUZwOjprU2lnbmlmaWNhbmRTaXplKSk7Cisg
ICAgICAgIC8vIE5vdGUgdGhhdCB0ZW5fbWsgaXMgb25seSBhbiBhcHByb3hpbWF0aW9uIG9mIDEw
Xi1rLiBBIERpeUZwIG9ubHkgY29udGFpbnMgYQorICAgICAgICAvLyA2NCBiaXQgc2lnbmlmaWNh
bmQgYW5kIHRlbl9tayBpcyB0aHVzIG9ubHkgcHJlY2lzZSB1cCB0byA2NCBiaXRzLgorICAgICAg
ICAKKyAgICAgICAgLy8gVGhlIERpeUZwOjpUaW1lcyBwcm9jZWR1cmUgcm91bmRzIGl0cyByZXN1
bHQsIGFuZCB0ZW5fbWsgaXMgYXBwcm94aW1hdGVkCisgICAgICAgIC8vIHRvby4gVGhlIHZhcmlh
YmxlIHNjYWxlZF93IChhcyB3ZWxsIGFzIHNjYWxlZF9ib3VuZGFyeV9taW51cy9wbHVzKSBhcmUg
bm93CisgICAgICAgIC8vIG9mZiBieSBhIHNtYWxsIGFtb3VudC4KKyAgICAgICAgLy8gSW4gZmFj
dDogc2NhbGVkX3cgLSB3KjEwXmsgPCAxdWxwICh1bml0IGluIHRoZSBsYXN0IHBsYWNlKSBvZiBz
Y2FsZWRfdy4KKyAgICAgICAgLy8gSW4gb3RoZXIgd29yZHM6IGxldCBmID0gc2NhbGVkX3cuZigp
IGFuZCBlID0gc2NhbGVkX3cuZSgpLCB0aGVuCisgICAgICAgIC8vICAgICAgICAgICAoZi0xKSAq
IDJeZSA8IHcqMTBeayA8IChmKzEpICogMl5lCisgICAgICAgIERpeUZwIHNjYWxlZF93ID0gRGl5
RnA6OlRpbWVzKHcsIHRlbl9tayk7CisgICAgICAgIAorICAgICAgICAvLyBXZSBub3cgaGF2ZSAo
ZG91YmxlKSAoc2NhbGVkX3cgKiAxMF4tbWspLgorICAgICAgICAvLyBEaWdpdEdlbiB3aWxsIGdl
bmVyYXRlIHRoZSBmaXJzdCByZXF1ZXN0ZWRfZGlnaXRzIGRpZ2l0cyBvZiBzY2FsZWRfdyBhbmQK
KyAgICAgICAgLy8gcmV0dXJuIHRvZ2V0aGVyIHdpdGggYSBrYXBwYSBzdWNoIHRoYXQgc2NhbGVk
X3cgfj0gYnVmZmVyICogMTBea2FwcGEuIChJdAorICAgICAgICAvLyB3aWxsIG5vdCBhbHdheXMg
YmUgZXhhY3RseSB0aGUgc2FtZSBzaW5jZSBEaWdpdEdlbkNvdW50ZWQgb25seSBwcm9kdWNlcyBh
CisgICAgICAgIC8vIGxpbWl0ZWQgbnVtYmVyIG9mIGRpZ2l0cy4pCisgICAgICAgIGludCBrYXBw
YTsKKyAgICAgICAgYm9vbCByZXN1bHQgPSBEaWdpdEdlbkNvdW50ZWQoc2NhbGVkX3csIHJlcXVl
c3RlZF9kaWdpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZl
ciwgbGVuZ3RoLCAma2FwcGEpOworICAgICAgICAqZGVjaW1hbF9leHBvbmVudCA9IC1tayArIGth
cHBhOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICAKKyAgICBib29s
IEZhc3REdG9hKGRvdWJsZSB2LAorICAgICAgICAgICAgICAgICAgRmFzdER0b2FNb2RlIG1vZGUs
CisgICAgICAgICAgICAgICAgICBpbnQgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAgICAgICAgICAg
ICAgIFZlY3RvcjxjaGFyPiBidWZmZXIsCisgICAgICAgICAgICAgICAgICBpbnQqIGxlbmd0aCwK
KyAgICAgICAgICAgICAgICAgIGludCogZGVjaW1hbF9wb2ludCkgeworICAgICAgICBBU1NFUlQo
diA+IDApOworICAgICAgICBBU1NFUlQoIURvdWJsZSh2KS5Jc1NwZWNpYWwoKSk7CisgICAgICAg
IAorICAgICAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgICAgICBpbnQgZGVjaW1hbF9leHBv
bmVudCA9IDA7CisgICAgICAgIHN3aXRjaCAobW9kZSkgeworICAgICAgICAgICAgY2FzZSBGQVNU
X0RUT0FfU0hPUlRFU1Q6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gR3Jpc3UzKHYsIGJ1ZmZl
ciwgbGVuZ3RoLCAmZGVjaW1hbF9leHBvbmVudCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIEZBU1RfRFRPQV9QUkVDSVNJT046CisgICAgICAgICAgICAgICAgcmVz
dWx0ID0gR3Jpc3UzQ291bnRlZCh2LCByZXF1ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBsZW5ndGgsICZkZWNpbWFsX2V4cG9uZW50
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVzdWx0KSB7
CisgICAgICAgICAgICAqZGVjaW1hbF9wb2ludCA9ICpsZW5ndGggKyBkZWNpbWFsX2V4cG9uZW50
OworICAgICAgICAgICAgYnVmZmVyWypsZW5ndGhdID0gJ1wwJzsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKK30gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29u
dmVyc2lvbgorCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvZHRvYS9mYXN0LWR0b2EuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
ZHRvYS9mYXN0LWR0b2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NzZhOWYzODI1NmQyZmIwMDIzZjhlMDhkYjU4
MWE4OTAzOGIyNzEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9kdG9hL2Zhc3QtZHRvYS5oCkBAIC0wLDAgKzEsODggQEAKKy8vIENvcHlyaWdodCAyMDEwIHRo
ZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
Ky8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisv
LyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworI2lmbmRlZiBET1VCTEVfQ09OVkVSU0lPTl9GQVNUX0RUT0FfSF8KKyNkZWZpbmUg
RE9VQkxFX0NPTlZFUlNJT05fRkFTVF9EVE9BX0hfCisKKyNpbmNsdWRlICJ1dGlscy5oIgorCitu
YW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKKyAgICAKKyAg
ICBlbnVtIEZhc3REdG9hTW9kZSB7CisgICAgICAgIC8vIENvbXB1dGVzIHRoZSBzaG9ydGVzdCBy
ZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gaW5wdXQuIFRoZSByZXR1cm5lZAorICAgICAgICAv
LyByZXN1bHQgd2lsbCBiZSB0aGUgbW9zdCBhY2N1cmF0ZSBudW1iZXIgb2YgdGhpcyBsZW5ndGgu
IExvbmdlcgorICAgICAgICAvLyByZXByZXNlbnRhdGlvbnMgbWlnaHQgYmUgbW9yZSBhY2N1cmF0
ZS4KKyAgICAgICAgRkFTVF9EVE9BX1NIT1JURVNULAorICAgICAgICAvLyBDb21wdXRlcyBhIHJl
cHJlc2VudGF0aW9uIHdoZXJlIHRoZSBwcmVjaXNpb24gKG51bWJlciBvZiBkaWdpdHMpIGlzCisg
ICAgICAgIC8vIGdpdmVuIGFzIGlucHV0LiBUaGUgcHJlY2lzaW9uIGlzIGluZGVwZW5kZW50IG9m
IHRoZSBkZWNpbWFsIHBvaW50LgorICAgICAgICBGQVNUX0RUT0FfUFJFQ0lTSU9OCisgICAgfTsK
KyAgICAKKyAgICAvLyBGYXN0RHRvYSB3aWxsIHByb2R1Y2UgYXQgbW9zdCBrRmFzdER0b2FNYXhp
bWFsTGVuZ3RoIGRpZ2l0cy4gVGhpcyBkb2VzIG5vdAorICAgIC8vIGluY2x1ZGUgdGhlIHRlcm1p
bmF0aW5nICdcMCcgY2hhcmFjdGVyLgorICAgIHN0YXRpYyBjb25zdCBpbnQga0Zhc3REdG9hTWF4
aW1hbExlbmd0aCA9IDE3OworICAgIAorICAgIC8vIFByb3ZpZGVzIGEgZGVjaW1hbCByZXByZXNl
bnRhdGlvbiBvZiB2LgorICAgIC8vIFRoZSByZXN1bHQgc2hvdWxkIGJlIGludGVycHJldGVkIGFz
IGJ1ZmZlciAqIDEwXihwb2ludCAtIGxlbmd0aCkuCisgICAgLy8KKyAgICAvLyBQcmVjb25kaXRp
b246CisgICAgLy8gICAqIHYgbXVzdCBiZSBhIHN0cmljdGx5IHBvc2l0aXZlIGZpbml0ZSBkb3Vi
bGUuCisgICAgLy8KKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgaXQgc3VjY2VlZHMsIG90aGVyd2lz
ZSB0aGUgcmVzdWx0IGNhbiBub3QgYmUgdHJ1c3RlZC4KKyAgICAvLyBUaGVyZSB3aWxsIGJlICps
ZW5ndGggZGlnaXRzIGluc2lkZSB0aGUgYnVmZmVyIGZvbGxvd2VkIGJ5IGEgbnVsbCB0ZXJtaW5h
dG9yLgorICAgIC8vIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgYW5kIG1vZGUgZXF1YWxz
CisgICAgLy8gICAtIEZBU1RfRFRPQV9TSE9SVEVTVCwgdGhlbgorICAgIC8vICAgICB0aGUgcGFy
YW1ldGVyIHJlcXVlc3RlZF9kaWdpdHMgaXMgaWdub3JlZC4KKyAgICAvLyAgICAgVGhlIHJlc3Vs
dCBzYXRpc2ZpZXMKKyAgICAvLyAgICAgICAgIHYgPT0gKGRvdWJsZSkgKGJ1ZmZlciAqIDEwXihw
b2ludCAtIGxlbmd0aCkpLgorICAgIC8vICAgICBUaGUgZGlnaXRzIGluIHRoZSBidWZmZXIgYXJl
IHRoZSBzaG9ydGVzdCByZXByZXNlbnRhdGlvbiBwb3NzaWJsZS4gRS5nLgorICAgIC8vICAgICBp
ZiAwLjA5OTk5OTk5OTk5OSBhbmQgMC4xIHJlcHJlc2VudCB0aGUgc2FtZSBkb3VibGUgdGhlbiAi
MSIgaXMgcmV0dXJuZWQKKyAgICAvLyAgICAgd2l0aCBwb2ludCA9IDAuCisgICAgLy8gICAgIFRo
ZSBsYXN0IGRpZ2l0IHdpbGwgYmUgY2xvc2VzdCB0byB0aGUgYWN0dWFsIHYuIFRoYXQgaXMsIGV2
ZW4gaWYgc2V2ZXJhbAorICAgIC8vICAgICBkaWdpdHMgbWlnaHQgY29ycmVjdGx5IHlpZWxkICd2
JyB3aGVuIHJlYWQgYWdhaW4sIHRoZSBidWZmZXIgd2lsbCBjb250YWluCisgICAgLy8gICAgIHRo
ZSBvbmUgY2xvc2VzdCB0byB2LgorICAgIC8vICAgLSBGQVNUX0RUT0FfUFJFQ0lTSU9OLCB0aGVu
CisgICAgLy8gICAgIHRoZSBidWZmZXIgY29udGFpbnMgcmVxdWVzdGVkX2RpZ2l0cyBkaWdpdHMu
CisgICAgLy8gICAgIHRoZSBkaWZmZXJlbmNlIHYgLSAoYnVmZmVyICogMTBeKHBvaW50LWxlbmd0
aCkpIGlzIGNsb3Nlc3QgdG8gemVybyBmb3IKKyAgICAvLyAgICAgYWxsIHBvc3NpYmxlIHJlcHJl
c2VudGF0aW9ucyBvZiByZXF1ZXN0ZWRfZGlnaXRzIGRpZ2l0cy4KKyAgICAvLyAgICAgSWYgdGhl
cmUgYXJlIHR3byB2YWx1ZXMgdGhhdCBhcmUgZXF1YWxseSBjbG9zZSwgdGhlbiBGYXN0RHRvYSBy
ZXR1cm5zCisgICAgLy8gICAgIGZhbHNlLgorICAgIC8vIEZvciBib3RoIG1vZGVzIHRoZSBidWZm
ZXIgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUgcmVzdWx0LgorICAgIGJvb2wgRmFz
dER0b2EoZG91YmxlIGQsCisgICAgICAgICAgICAgICAgICBGYXN0RHRvYU1vZGUgbW9kZSwKKyAg
ICAgICAgICAgICAgICAgIGludCByZXF1ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAg
VmVjdG9yPGNoYXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgIGludCogbGVuZ3RoLAorICAg
ICAgICAgICAgICAgICAgaW50KiBkZWNpbWFsX3BvaW50KTsKKyAgICAKK30gIC8vIG5hbWVzcGFj
ZSBkb3VibGVfY29udmVyc2lvbgorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmICAvLyBE
T1VCTEVfQ09OVkVSU0lPTl9GQVNUX0RUT0FfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvZHRvYS9maXhlZC1kdG9hLmNjIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9kdG9hL2ZpeGVkLWR0b2EuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGMzOTExZWExNDY2ZWRhMzg3YjAxNTdj
MmQyN2U1ODQ2MTY5YzIyYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvZHRvYS9maXhlZC1kdG9hLmNjCkBAIC0wLDAgKzEsNDA4IEBACisvLyBDb3B5cmlnaHQg
MjAxMCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8v
ICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAg
ICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
Ky8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlICJVbnVzZWRQYXJh
bS5oIgorI2luY2x1ZGUgImZpeGVkLWR0b2EuaCIKKyNpbmNsdWRlICJkb3VibGUuaCIKKworbmFt
ZXNwYWNlIFdURiB7CisKK25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAg
Ly8gUmVwcmVzZW50cyBhIDEyOGJpdCB0eXBlLiBUaGlzIGNsYXNzIHNob3VsZCBiZSByZXBsYWNl
ZCBieSBhIG5hdGl2ZSB0eXBlIG9uCisgICAgLy8gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCAxMjhi
aXQgaW50ZWdlcnMuCisgICAgY2xhc3MgVUludDEyOCB7CisgICAgcHVibGljOgorICAgICAgICBV
SW50MTI4KCkgOiBoaWdoX2JpdHNfKDApLCBsb3dfYml0c18oMCkgeyB9CisgICAgICAgIFVJbnQx
MjgodWludDY0X3QgaGlnaCwgdWludDY0X3QgbG93KSA6IGhpZ2hfYml0c18oaGlnaCksIGxvd19i
aXRzXyhsb3cpIHsgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBNdWx0aXBseSh1aW50MzJfdCBt
dWx0aXBsaWNhbmQpIHsKKyAgICAgICAgICAgIHVpbnQ2NF90IGFjY3VtdWxhdG9yOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBhY2N1bXVsYXRvciA9IChsb3dfYml0c18gJiBrTWFzazMyKSAq
IG11bHRpcGxpY2FuZDsKKyAgICAgICAgICAgIHVpbnQzMl90IHBhcnQgPSBzdGF0aWNfY2FzdDx1
aW50MzJfdD4oYWNjdW11bGF0b3IgJiBrTWFzazMyKTsKKyAgICAgICAgICAgIGFjY3VtdWxhdG9y
ID4+PSAzMjsKKyAgICAgICAgICAgIGFjY3VtdWxhdG9yID0gYWNjdW11bGF0b3IgKyAobG93X2Jp
dHNfID4+IDMyKSAqIG11bHRpcGxpY2FuZDsKKyAgICAgICAgICAgIGxvd19iaXRzXyA9IChhY2N1
bXVsYXRvciA8PCAzMikgKyBwYXJ0OworICAgICAgICAgICAgYWNjdW11bGF0b3IgPj49IDMyOwor
ICAgICAgICAgICAgYWNjdW11bGF0b3IgPSBhY2N1bXVsYXRvciArIChoaWdoX2JpdHNfICYga01h
c2szMikgKiBtdWx0aXBsaWNhbmQ7CisgICAgICAgICAgICBwYXJ0ID0gc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KGFjY3VtdWxhdG9yICYga01hc2szMik7CisgICAgICAgICAgICBhY2N1bXVsYXRvciA+
Pj0gMzI7CisgICAgICAgICAgICBhY2N1bXVsYXRvciA9IGFjY3VtdWxhdG9yICsgKGhpZ2hfYml0
c18gPj4gMzIpICogbXVsdGlwbGljYW5kOworICAgICAgICAgICAgaGlnaF9iaXRzXyA9IChhY2N1
bXVsYXRvciA8PCAzMikgKyBwYXJ0OworICAgICAgICAgICAgQVNTRVJUKChhY2N1bXVsYXRvciA+
PiAzMikgPT0gMCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgU2hpZnQoaW50
IHNoaWZ0X2Ftb3VudCkgeworICAgICAgICAgICAgQVNTRVJUKC02NCA8PSBzaGlmdF9hbW91bnQg
JiYgc2hpZnRfYW1vdW50IDw9IDY0KTsKKyAgICAgICAgICAgIGlmIChzaGlmdF9hbW91bnQgPT0g
MCkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hp
ZnRfYW1vdW50ID09IC02NCkgeworICAgICAgICAgICAgICAgIGhpZ2hfYml0c18gPSBsb3dfYml0
c187CisgICAgICAgICAgICAgICAgbG93X2JpdHNfID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAoc2hpZnRfYW1vdW50ID09IDY0KSB7CisgICAgICAgICAgICAgICAgbG93X2JpdHNfID0gaGln
aF9iaXRzXzsKKyAgICAgICAgICAgICAgICBoaWdoX2JpdHNfID0gMDsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoc2hpZnRfYW1vdW50IDw9IDApIHsKKyAgICAgICAgICAgICAgICBoaWdoX2JpdHNf
IDw8PSAtc2hpZnRfYW1vdW50OworICAgICAgICAgICAgICAgIGhpZ2hfYml0c18gKz0gbG93X2Jp
dHNfID4+ICg2NCArIHNoaWZ0X2Ftb3VudCk7CisgICAgICAgICAgICAgICAgbG93X2JpdHNfIDw8
PSAtc2hpZnRfYW1vdW50OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBs
b3dfYml0c18gPj49IHNoaWZ0X2Ftb3VudDsKKyAgICAgICAgICAgICAgICBsb3dfYml0c18gKz0g
aGlnaF9iaXRzXyA8PCAoNjQgLSBzaGlmdF9hbW91bnQpOworICAgICAgICAgICAgICAgIGhpZ2hf
Yml0c18gPj49IHNoaWZ0X2Ftb3VudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgLy8gTW9kaWZpZXMgKnRoaXMgdG8gKnRoaXMgTU9EICgyXnBvd2VyKS4KKyAg
ICAgICAgLy8gUmV0dXJucyAqdGhpcyBESVYgKDJecG93ZXIpLgorICAgICAgICBpbnQgRGl2TW9k
UG93ZXJPZjIoaW50IHBvd2VyKSB7CisgICAgICAgICAgICBpZiAocG93ZXIgPj0gNjQpIHsKKyAg
ICAgICAgICAgICAgICBpbnQgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8aW50PihoaWdoX2JpdHNfID4+
IChwb3dlciAtIDY0KSk7CisgICAgICAgICAgICAgICAgaGlnaF9iaXRzXyAtPSBzdGF0aWNfY2Fz
dDx1aW50NjRfdD4ocmVzdWx0KSA8PCAocG93ZXIgLSA2NCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdWludDY0
X3QgcGFydF9sb3cgPSBsb3dfYml0c18gPj4gcG93ZXI7CisgICAgICAgICAgICAgICAgdWludDY0
X3QgcGFydF9oaWdoID0gaGlnaF9iaXRzXyA8PCAoNjQgLSBwb3dlcik7CisgICAgICAgICAgICAg
ICAgaW50IHJlc3VsdCA9IHN0YXRpY19jYXN0PGludD4ocGFydF9sb3cgKyBwYXJ0X2hpZ2gpOwor
ICAgICAgICAgICAgICAgIGhpZ2hfYml0c18gPSAwOworICAgICAgICAgICAgICAgIGxvd19iaXRz
XyAtPSBwYXJ0X2xvdyA8PCBwb3dlcjsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIElzWmVybygp
IGNvbnN0IHsKKyAgICAgICAgICAgIHJldHVybiBoaWdoX2JpdHNfID09IDAgJiYgbG93X2JpdHNf
ID09IDA7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludCBCaXRBdChpbnQgcG9zaXRp
b24pIHsKKyAgICAgICAgICAgIGlmIChwb3NpdGlvbiA+PSA2NCkgeworICAgICAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGhpZ2hfYml0c18gPj4gKHBvc2l0aW9uIC0gNjQpKSAm
IDE7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxpbnQ+KGxvd19iaXRzXyA+PiBwb3NpdGlvbikgJiAxOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIHN0YXRpYyBjb25zdCB1aW50
NjRfdCBrTWFzazMyID0gMHhGRkZGRkZGRjsKKyAgICAgICAgLy8gVmFsdWUgPT0gKGhpZ2hfYml0
c18gPDwgNjQpICsgbG93X2JpdHNfCisgICAgICAgIHVpbnQ2NF90IGhpZ2hfYml0c187CisgICAg
ICAgIHVpbnQ2NF90IGxvd19iaXRzXzsKKyAgICB9OworICAgIAorICAgIAorICAgIHN0YXRpYyBj
b25zdCBpbnQga0RvdWJsZVNpZ25pZmljYW5kU2l6ZSA9IDUzOyAgLy8gSW5jbHVkZXMgdGhlIGhp
ZGRlbiBiaXQuCisgICAgCisgICAgCisgICAgc3RhdGljIHZvaWQgRmlsbERpZ2l0czMyRml4ZWRM
ZW5ndGgodWludDMyX3QgbnVtYmVyLCBpbnQgcmVxdWVzdGVkX2xlbmd0aCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLCBpbnQqIGxl
bmd0aCkgeworICAgICAgICBmb3IgKGludCBpID0gcmVxdWVzdGVkX2xlbmd0aCAtIDE7IGkgPj0g
MDsgLS1pKSB7CisgICAgICAgICAgICBidWZmZXJbKCpsZW5ndGgpICsgaV0gPSAnMCcgKyBudW1i
ZXIgJSAxMDsKKyAgICAgICAgICAgIG51bWJlciAvPSAxMDsKKyAgICAgICAgfQorICAgICAgICAq
bGVuZ3RoICs9IHJlcXVlc3RlZF9sZW5ndGg7CisgICAgfQorICAgIAorICAgIAorICAgIHN0YXRp
YyB2b2lkIEZpbGxEaWdpdHMzMih1aW50MzJfdCBudW1iZXIsIFZlY3RvcjxjaGFyPiBidWZmZXIs
IGludCogbGVuZ3RoKSB7CisgICAgICAgIGludCBudW1iZXJfbGVuZ3RoID0gMDsKKyAgICAgICAg
Ly8gV2UgZmlsbCB0aGUgZGlnaXRzIGluIHJldmVyc2Ugb3JkZXIgYW5kIGV4Y2hhbmdlIHRoZW0g
YWZ0ZXJ3YXJkcy4KKyAgICAgICAgd2hpbGUgKG51bWJlciAhPSAwKSB7CisgICAgICAgICAgICBp
bnQgZGlnaXQgPSBudW1iZXIgJSAxMDsKKyAgICAgICAgICAgIG51bWJlciAvPSAxMDsKKyAgICAg
ICAgICAgIGJ1ZmZlclsoKmxlbmd0aCkgKyBudW1iZXJfbGVuZ3RoXSA9ICcwJyArIGRpZ2l0Owor
ICAgICAgICAgICAgbnVtYmVyX2xlbmd0aCsrOworICAgICAgICB9CisgICAgICAgIC8vIEV4Y2hh
bmdlIHRoZSBkaWdpdHMuCisgICAgICAgIGludCBpID0gKmxlbmd0aDsKKyAgICAgICAgaW50IGog
PSAqbGVuZ3RoICsgbnVtYmVyX2xlbmd0aCAtIDE7CisgICAgICAgIHdoaWxlIChpIDwgaikgewor
ICAgICAgICAgICAgY2hhciB0bXAgPSBidWZmZXJbaV07CisgICAgICAgICAgICBidWZmZXJbaV0g
PSBidWZmZXJbal07CisgICAgICAgICAgICBidWZmZXJbal0gPSB0bXA7CisgICAgICAgICAgICBp
Kys7CisgICAgICAgICAgICBqLS07CisgICAgICAgIH0KKyAgICAgICAgKmxlbmd0aCArPSBudW1i
ZXJfbGVuZ3RoOworICAgIH0KKyAgICAKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBGaWxsRGlnaXRz
NjRGaXhlZExlbmd0aCh1aW50NjRfdCBudW1iZXIsIGludCByZXF1ZXN0ZWRfbGVuZ3RoLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXIs
IGludCogbGVuZ3RoKSB7CisgICAgICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0ZWRfbGVuZ3RoKTsK
KyAgICAgICAgY29uc3QgdWludDMyX3Qga1RlbjcgPSAxMDAwMDAwMDsKKyAgICAgICAgLy8gRm9y
IGVmZmljaWVuY3kgY3V0IHRoZSBudW1iZXIgaW50byAzIHVpbnQzMl90IHBhcnRzLCBhbmQgcHJp
bnQgdGhvc2UuCisgICAgICAgIHVpbnQzMl90IHBhcnQyID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KG51bWJlciAlIGtUZW43KTsKKyAgICAgICAgbnVtYmVyIC89IGtUZW43OworICAgICAgICB1aW50
MzJfdCBwYXJ0MSA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihudW1iZXIgJSBrVGVuNyk7CisgICAg
ICAgIHVpbnQzMl90IHBhcnQwID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG51bWJlciAvIGtUZW43
KTsKKyAgICAgICAgCisgICAgICAgIEZpbGxEaWdpdHMzMkZpeGVkTGVuZ3RoKHBhcnQwLCAzLCBi
dWZmZXIsIGxlbmd0aCk7CisgICAgICAgIEZpbGxEaWdpdHMzMkZpeGVkTGVuZ3RoKHBhcnQxLCA3
LCBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgIEZpbGxEaWdpdHMzMkZpeGVkTGVuZ3RoKHBhcnQy
LCA3LCBidWZmZXIsIGxlbmd0aCk7CisgICAgfQorICAgIAorICAgIAorICAgIHN0YXRpYyB2b2lk
IEZpbGxEaWdpdHM2NCh1aW50NjRfdCBudW1iZXIsIFZlY3RvcjxjaGFyPiBidWZmZXIsIGludCog
bGVuZ3RoKSB7CisgICAgICAgIGNvbnN0IHVpbnQzMl90IGtUZW43ID0gMTAwMDAwMDA7CisgICAg
ICAgIC8vIEZvciBlZmZpY2llbmN5IGN1dCB0aGUgbnVtYmVyIGludG8gMyB1aW50MzJfdCBwYXJ0
cywgYW5kIHByaW50IHRob3NlLgorICAgICAgICB1aW50MzJfdCBwYXJ0MiA9IHN0YXRpY19jYXN0
PHVpbnQzMl90PihudW1iZXIgJSBrVGVuNyk7CisgICAgICAgIG51bWJlciAvPSBrVGVuNzsKKyAg
ICAgICAgdWludDMyX3QgcGFydDEgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4obnVtYmVyICUga1Rl
bjcpOworICAgICAgICB1aW50MzJfdCBwYXJ0MCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihudW1i
ZXIgLyBrVGVuNyk7CisgICAgICAgIAorICAgICAgICBpZiAocGFydDAgIT0gMCkgeworICAgICAg
ICAgICAgRmlsbERpZ2l0czMyKHBhcnQwLCBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgICAgICBG
aWxsRGlnaXRzMzJGaXhlZExlbmd0aChwYXJ0MSwgNywgYnVmZmVyLCBsZW5ndGgpOworICAgICAg
ICAgICAgRmlsbERpZ2l0czMyRml4ZWRMZW5ndGgocGFydDIsIDcsIGJ1ZmZlciwgbGVuZ3RoKTsK
KyAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSAhPSAwKSB7CisgICAgICAgICAgICBGaWxsRGlnaXRz
MzIocGFydDEsIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAgICAgIEZpbGxEaWdpdHMzMkZpeGVk
TGVuZ3RoKHBhcnQyLCA3LCBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBGaWxsRGlnaXRzMzIocGFydDIsIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBSb3VuZFVwKFZlY3RvcjxjaGFyPiBi
dWZmZXIsIGludCogbGVuZ3RoLCBpbnQqIGRlY2ltYWxfcG9pbnQpIHsKKyAgICAgICAgLy8gQW4g
ZW1wdHkgYnVmZmVyIHJlcHJlc2VudHMgMC4KKyAgICAgICAgaWYgKCpsZW5ndGggPT0gMCkgewor
ICAgICAgICAgICAgYnVmZmVyWzBdID0gJzEnOworICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQg
PSAxOworICAgICAgICAgICAgKmxlbmd0aCA9IDE7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgLy8gUm91bmQgdGhlIGxhc3QgZGlnaXQgdW50aWwgd2UgZWl0aGVyIGhh
dmUgYSBkaWdpdCB0aGF0IHdhcyBub3QgJzknIG9yIHVudGlsCisgICAgICAgIC8vIHdlIHJlYWNo
ZWQgdGhlIGZpcnN0IGRpZ2l0LgorICAgICAgICBidWZmZXJbKCpsZW5ndGgpIC0gMV0rKzsKKyAg
ICAgICAgZm9yIChpbnQgaSA9ICgqbGVuZ3RoKSAtIDE7IGkgPiAwOyAtLWkpIHsKKyAgICAgICAg
ICAgIGlmIChidWZmZXJbaV0gIT0gJzAnICsgMTApIHsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBidWZmZXJbaV0gPSAnMCc7CisgICAgICAgICAg
ICBidWZmZXJbaSAtIDFdKys7CisgICAgICAgIH0KKyAgICAgICAgLy8gSWYgdGhlIGZpcnN0IGRp
Z2l0IGlzIG5vdyAnMCcgKyAxMCwgd2Ugd291bGQgbmVlZCB0byBzZXQgaXQgdG8gJzAnIGFuZCBh
ZGQKKyAgICAgICAgLy8gYSAnMScgaW4gZnJvbnQuIEhvd2V2ZXIgd2UgcmVhY2ggdGhlIGZpcnN0
IGRpZ2l0IG9ubHkgaWYgYWxsIGZvbGxvd2luZworICAgICAgICAvLyBkaWdpdHMgaGFkIGJlZW4g
JzknIGJlZm9yZSByb3VuZGluZyB1cC4gTm93IGFsbCB0cmFpbGluZyBkaWdpdHMgYXJlICcwJyBh
bmQKKyAgICAgICAgLy8gd2Ugc2ltcGx5IHN3aXRjaCB0aGUgZmlyc3QgZGlnaXQgdG8gJzEnIGFu
ZCB1cGRhdGUgdGhlIGRlY2ltYWwtcG9pbnQKKyAgICAgICAgLy8gKGluZGljYXRpbmcgdGhhdCB0
aGUgcG9pbnQgaXMgbm93IG9uZSBkaWdpdCB0byB0aGUgcmlnaHQpLgorICAgICAgICBpZiAoYnVm
ZmVyWzBdID09ICcwJyArIDEwKSB7CisgICAgICAgICAgICBidWZmZXJbMF0gPSAnMSc7CisgICAg
ICAgICAgICAoKmRlY2ltYWxfcG9pbnQpKys7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
CisgICAgLy8gVGhlIGdpdmVuIGZyYWN0aW9uYWxzIG51bWJlciByZXByZXNlbnRzIGEgZml4ZWQt
cG9pbnQgbnVtYmVyIHdpdGggYmluYXJ5CisgICAgLy8gcG9pbnQgYXQgYml0ICgtZXhwb25lbnQp
LgorICAgIC8vIFByZWNvbmRpdGlvbnM6CisgICAgLy8gICAtMTI4IDw9IGV4cG9uZW50IDw9IDAu
CisgICAgLy8gICAwIDw9IGZyYWN0aW9uYWxzICogMl5leHBvbmVudCA8IDEKKyAgICAvLyAgIFRo
ZSBidWZmZXIgaG9sZHMgdGhlIHJlc3VsdC4KKyAgICAvLyBUaGUgZnVuY3Rpb24gd2lsbCByb3Vu
ZCBpdHMgcmVzdWx0LiBEdXJpbmcgdGhlIHJvdW5kaW5nLXByb2Nlc3MgZGlnaXRzIG5vdAorICAg
IC8vIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIG1pZ2h0IGJlIHVwZGF0ZWQsIGFuZCB0aGUg
ZGVjaW1hbC1wb2ludCB2YXJpYWJsZQorICAgIC8vIG1pZ2h0IGJlIHVwZGF0ZWQuIElmIHRoaXMg
ZnVuY3Rpb24gZ2VuZXJhdGVzIHRoZSBkaWdpdHMgOTkgYW5kIHRoZSBidWZmZXIKKyAgICAvLyBh
bHJlYWR5IGNvbnRhaW5lZCAiMTk5IiAodGh1cyB5aWVsZGluZyBhIGJ1ZmZlciBvZiAiMTk5OTki
KSB0aGVuIGEKKyAgICAvLyByb3VuZGluZy11cCB3aWxsIGNoYW5nZSB0aGUgY29udGVudHMgb2Yg
dGhlIGJ1ZmZlciB0byAiMjAwMDAiLgorICAgIHN0YXRpYyB2b2lkIEZpbGxGcmFjdGlvbmFscyh1
aW50NjRfdCBmcmFjdGlvbmFscywgaW50IGV4cG9uZW50LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgZnJhY3Rpb25hbF9jb3VudCwgVmVjdG9yPGNoYXI+IGJ1ZmZlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBsZW5ndGgsIGludCogZGVjaW1hbF9w
b2ludCkgeworICAgICAgICBBU1NFUlQoLTEyOCA8PSBleHBvbmVudCAmJiBleHBvbmVudCA8PSAw
KTsKKyAgICAgICAgLy8gJ2ZyYWN0aW9uYWxzJyBpcyBhIGZpeGVkLXBvaW50IG51bWJlciwgd2l0
aCBiaW5hcnkgcG9pbnQgYXQgYml0CisgICAgICAgIC8vICgtZXhwb25lbnQpLiBJbnNpZGUgdGhl
IGZ1bmN0aW9uIHRoZSBub24tY29udmVydGVkIHJlbWFpbmRlciBvZiBmcmFjdGlvbmFscworICAg
ICAgICAvLyBpcyBhIGZpeGVkLXBvaW50IG51bWJlciwgd2l0aCBiaW5hcnkgcG9pbnQgYXQgYml0
ICdwb2ludCcuCisgICAgICAgIGlmICgtZXhwb25lbnQgPD0gNjQpIHsKKyAgICAgICAgICAgIC8v
IE9uZSA2NCBiaXQgbnVtYmVyIGlzIHN1ZmZpY2llbnQuCisgICAgICAgICAgICBBU1NFUlQoZnJh
Y3Rpb25hbHMgPj4gNTYgPT0gMCk7CisgICAgICAgICAgICBpbnQgcG9pbnQgPSAtZXhwb25lbnQ7
CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYWN0aW9uYWxfY291bnQ7ICsraSkg
eworICAgICAgICAgICAgICAgIGlmIChmcmFjdGlvbmFscyA9PSAwKSBicmVhazsKKyAgICAgICAg
ICAgICAgICAvLyBJbnN0ZWFkIG9mIG11bHRpcGx5aW5nIGJ5IDEwIHdlIG11bHRpcGx5IGJ5IDUg
YW5kIGFkanVzdCB0aGUgcG9pbnQKKyAgICAgICAgICAgICAgICAvLyBsb2NhdGlvbi4gVGhpcyB3
YXkgdGhlIGZyYWN0aW9uYWxzIHZhcmlhYmxlIHdpbGwgbm90IG92ZXJmbG93LgorICAgICAgICAg
ICAgICAgIC8vIEludmFyaWFudCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wOiBmcmFjdGlv
bmFscyA8IDJecG9pbnQuCisgICAgICAgICAgICAgICAgLy8gSW5pdGlhbGx5IHdlIGhhdmU6IHBv
aW50IDw9IDY0IGFuZCBmcmFjdGlvbmFscyA8IDJeNTYKKyAgICAgICAgICAgICAgICAvLyBBZnRl
ciBlYWNoIGl0ZXJhdGlvbiB0aGUgcG9pbnQgaXMgZGVjcmVtZW50ZWQgYnkgb25lLgorICAgICAg
ICAgICAgICAgIC8vIE5vdGUgdGhhdCA1XjMgPSAxMjUgPCAxMjggPSAyXjcuCisgICAgICAgICAg
ICAgICAgLy8gVGhlcmVmb3JlIHRocmVlIGl0ZXJhdGlvbnMgb2YgdGhpcyBsb29wIHdpbGwgbm90
IG92ZXJmbG93IGZyYWN0aW9uYWxzCisgICAgICAgICAgICAgICAgLy8gKGV2ZW4gd2l0aG91dCB0
aGUgc3VidHJhY3Rpb24gYXQgdGhlIGVuZCBvZiB0aGUgbG9vcCBib2R5KS4gQXQgdGhpcworICAg
ICAgICAgICAgICAgIC8vIHRpbWUgcG9pbnQgd2lsbCBzYXRpc2Z5IHBvaW50IDw9IDYxIGFuZCB0
aGVyZWZvcmUgZnJhY3Rpb25hbHMgPCAyXnBvaW50CisgICAgICAgICAgICAgICAgLy8gYW5kIGFu
eSBmdXJ0aGVyIG11bHRpcGxpY2F0aW9uIG9mIGZyYWN0aW9uYWxzIGJ5IDUgd2lsbCBub3Qgb3Zl
cmZsb3cuCisgICAgICAgICAgICAgICAgZnJhY3Rpb25hbHMgKj0gNTsKKyAgICAgICAgICAgICAg
ICBwb2ludC0tOworICAgICAgICAgICAgICAgIGludCBkaWdpdCA9IHN0YXRpY19jYXN0PGludD4o
ZnJhY3Rpb25hbHMgPj4gcG9pbnQpOworICAgICAgICAgICAgICAgIGJ1ZmZlclsqbGVuZ3RoXSA9
ICcwJyArIGRpZ2l0OworICAgICAgICAgICAgICAgICgqbGVuZ3RoKSsrOworICAgICAgICAgICAg
ICAgIGZyYWN0aW9uYWxzIC09IHN0YXRpY19jYXN0PHVpbnQ2NF90PihkaWdpdCkgPDwgcG9pbnQ7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBJZiB0aGUgZmlyc3QgYml0IGFmdGVyIHRo
ZSBwb2ludCBpcyBzZXQgd2UgaGF2ZSB0byByb3VuZCB1cC4KKyAgICAgICAgICAgIGlmICgoKGZy
YWN0aW9uYWxzID4+IChwb2ludCAtIDEpKSAmIDEpID09IDEpIHsKKyAgICAgICAgICAgICAgICBS
b3VuZFVwKGJ1ZmZlciwgbGVuZ3RoLCBkZWNpbWFsX3BvaW50KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIHsgIC8vIFdlIG5lZWQgMTI4IGJpdHMuCisgICAgICAgICAgICBBU1NFUlQo
NjQgPCAtZXhwb25lbnQgJiYgLWV4cG9uZW50IDw9IDEyOCk7CisgICAgICAgICAgICBVSW50MTI4
IGZyYWN0aW9uYWxzMTI4ID0gVUludDEyOChmcmFjdGlvbmFscywgMCk7CisgICAgICAgICAgICBm
cmFjdGlvbmFsczEyOC5TaGlmdCgtZXhwb25lbnQgLSA2NCk7CisgICAgICAgICAgICBpbnQgcG9p
bnQgPSAxMjg7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYWN0aW9uYWxfY291
bnQ7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChmcmFjdGlvbmFsczEyOC5Jc1plcm8oKSkg
YnJlYWs7CisgICAgICAgICAgICAgICAgLy8gQXMgYmVmb3JlOiBpbnN0ZWFkIG9mIG11bHRpcGx5
aW5nIGJ5IDEwIHdlIG11bHRpcGx5IGJ5IDUgYW5kIGFkanVzdCB0aGUKKyAgICAgICAgICAgICAg
ICAvLyBwb2ludCBsb2NhdGlvbi4KKyAgICAgICAgICAgICAgICAvLyBUaGlzIG11bHRpcGxpY2F0
aW9uIHdpbGwgbm90IG92ZXJmbG93IGZvciB0aGUgc2FtZSByZWFzb25zIGFzIGJlZm9yZS4KKyAg
ICAgICAgICAgICAgICBmcmFjdGlvbmFsczEyOC5NdWx0aXBseSg1KTsKKyAgICAgICAgICAgICAg
ICBwb2ludC0tOworICAgICAgICAgICAgICAgIGludCBkaWdpdCA9IGZyYWN0aW9uYWxzMTI4LkRp
dk1vZFBvd2VyT2YyKHBvaW50KTsKKyAgICAgICAgICAgICAgICBidWZmZXJbKmxlbmd0aF0gPSAn
MCcgKyBkaWdpdDsKKyAgICAgICAgICAgICAgICAoKmxlbmd0aCkrKzsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChmcmFjdGlvbmFsczEyOC5CaXRBdChwb2ludCAtIDEpID09IDEpIHsK
KyAgICAgICAgICAgICAgICBSb3VuZFVwKGJ1ZmZlciwgbGVuZ3RoLCBkZWNpbWFsX3BvaW50KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBSZW1v
dmVzIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHplcm9zLgorICAgIC8vIElmIGxlYWRpbmcgemVyb3Mg
YXJlIHJlbW92ZWQgdGhlbiB0aGUgZGVjaW1hbCBwb2ludCBwb3NpdGlvbiBpcyBhZGp1c3RlZC4K
KyAgICBzdGF0aWMgdm9pZCBUcmltWmVyb3MoVmVjdG9yPGNoYXI+IGJ1ZmZlciwgaW50KiBsZW5n
dGgsIGludCogZGVjaW1hbF9wb2ludCkgeworICAgICAgICB3aGlsZSAoKmxlbmd0aCA+IDAgJiYg
YnVmZmVyWygqbGVuZ3RoKSAtIDFdID09ICcwJykgeworICAgICAgICAgICAgKCpsZW5ndGgpLS07
CisgICAgICAgIH0KKyAgICAgICAgaW50IGZpcnN0X25vbl96ZXJvID0gMDsKKyAgICAgICAgd2hp
bGUgKGZpcnN0X25vbl96ZXJvIDwgKmxlbmd0aCAmJiBidWZmZXJbZmlyc3Rfbm9uX3plcm9dID09
ICcwJykgeworICAgICAgICAgICAgZmlyc3Rfbm9uX3plcm8rKzsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoZmlyc3Rfbm9uX3plcm8gIT0gMCkgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IGZp
cnN0X25vbl96ZXJvOyBpIDwgKmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgYnVmZmVy
W2kgLSBmaXJzdF9ub25femVyb10gPSBidWZmZXJbaV07CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAqbGVuZ3RoIC09IGZpcnN0X25vbl96ZXJvOworICAgICAgICAgICAgKmRlY2ltYWxfcG9p
bnQgLT0gZmlyc3Rfbm9uX3plcm87CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAg
Ym9vbCBGYXN0Rml4ZWREdG9hKGRvdWJsZSB2LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQg
ZnJhY3Rpb25hbF9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1
ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50KiBsZW5ndGgsCisgICAgICAgICAgICAg
ICAgICAgICAgIGludCogZGVjaW1hbF9wb2ludCkgeworICAgICAgICBjb25zdCB1aW50MzJfdCBr
TWF4VUludDMyID0gMHhGRkZGRkZGRjsKKyAgICAgICAgdWludDY0X3Qgc2lnbmlmaWNhbmQgPSBE
b3VibGUodikuU2lnbmlmaWNhbmQoKTsKKyAgICAgICAgaW50IGV4cG9uZW50ID0gRG91YmxlKHYp
LkV4cG9uZW50KCk7CisgICAgICAgIC8vIHYgPSBzaWduaWZpY2FuZCAqIDJeZXhwb25lbnQgKHdp
dGggc2lnbmlmaWNhbmQgYSA1M2JpdCBpbnRlZ2VyKS4KKyAgICAgICAgLy8gSWYgdGhlIGV4cG9u
ZW50IGlzIGxhcmdlciB0aGFuIDIwIChpLmUuIHdlIG1heSBoYXZlIGEgNzNiaXQgbnVtYmVyKSB0
aGVuIHdlCisgICAgICAgIC8vIGRvbid0IGtub3cgaG93IHRvIGNvbXB1dGUgdGhlIHJlcHJlc2Vu
dGF0aW9uLiAyXjczIH49IDkuNSoxMF4yMS4KKyAgICAgICAgLy8gSWYgbmVjZXNzYXJ5IHRoaXMg
bGltaXQgY291bGQgcHJvYmFibHkgYmUgaW5jcmVhc2VkLCBidXQgd2UgZG9uJ3QgbmVlZAorICAg
ICAgICAvLyBtb3JlLgorICAgICAgICBpZiAoZXhwb25lbnQgPiAyMCkgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBpZiAoZnJhY3Rpb25hbF9jb3VudCA+IDIwKSByZXR1cm4gZmFsc2U7CisgICAgICAg
ICpsZW5ndGggPSAwOworICAgICAgICAvLyBBdCBtb3N0IGtEb3VibGVTaWduaWZpY2FuZFNpemUg
Yml0cyBvZiB0aGUgc2lnbmlmaWNhbmQgYXJlIG5vbi16ZXJvLgorICAgICAgICAvLyBHaXZlbiBh
IDY0IGJpdCBpbnRlZ2VyIHdlIGhhdmUgMTEgMHMgZm9sbG93ZWQgYnkgNTMgcG90ZW50aWFsbHkg
bm9uLXplcm8KKyAgICAgICAgLy8gYml0czogIDAuLjExKi4uMHh4eC4uNTMqLi54eAorICAgICAg
ICBpZiAoZXhwb25lbnQgKyBrRG91YmxlU2lnbmlmaWNhbmRTaXplID4gNjQpIHsKKyAgICAgICAg
ICAgIC8vIFRoZSBleHBvbmVudCBtdXN0IGJlID4gMTEuCisgICAgICAgICAgICAvLworICAgICAg
ICAgICAgLy8gV2Uga25vdyB0aGF0IHYgPSBzaWduaWZpY2FuZCAqIDJeZXhwb25lbnQuCisgICAg
ICAgICAgICAvLyBBbmQgdGhlIGV4cG9uZW50ID4gMTEuCisgICAgICAgICAgICAvLyBXZSBzaW1w
bGlmeSB0aGUgdGFzayBieSBkaXZpZGluZyB2IGJ5IDEwXjE3LgorICAgICAgICAgICAgLy8gVGhl
IHF1b3RpZW50IGRlbGl2ZXJzIHRoZSBmaXJzdCBkaWdpdHMsIGFuZCB0aGUgcmVtYWluZGVyIGZp
dHMgaW50byBhIDY0CisgICAgICAgICAgICAvLyBiaXQgbnVtYmVyLgorICAgICAgICAgICAgLy8g
RGl2aWRpbmcgYnkgMTBeMTcgaXMgZXF1aXZhbGVudCB0byBkaXZpZGluZyBieSA1XjE3KjJeMTcu
CisgICAgICAgICAgICBjb25zdCB1aW50NjRfdCBrRml2ZTE3ID0gVUlOVDY0XzJQQVJUX0MoMHhC
MSwgQTJCQzJFQzUpOyAgLy8gNV4xNworICAgICAgICAgICAgdWludDY0X3QgZGl2aXNvciA9IGtG
aXZlMTc7CisgICAgICAgICAgICBpbnQgZGl2aXNvcl9wb3dlciA9IDE3OworICAgICAgICAgICAg
dWludDY0X3QgZGl2aWRlbmQgPSBzaWduaWZpY2FuZDsKKyAgICAgICAgICAgIHVpbnQzMl90IHF1
b3RpZW50OworICAgICAgICAgICAgdWludDY0X3QgcmVtYWluZGVyOworICAgICAgICAgICAgLy8g
TGV0IHYgPSBmICogMl5lIHdpdGggZiA9PSBzaWduaWZpY2FuZCBhbmQgZSA9PSBleHBvbmVudC4K
KyAgICAgICAgICAgIC8vIFRoZW4gbmVlZCBxIChxdW90aWVudCkgYW5kIHIgKHJlbWFpbmRlcikg
YXMgZm9sbG93czoKKyAgICAgICAgICAgIC8vICAgdiAgICAgICAgICAgID0gcSAqIDEwXjE3ICAg
ICAgICsgcgorICAgICAgICAgICAgLy8gICBmICogMl5lICAgICAgPSBxICogMTBeMTcgICAgICAg
KyByCisgICAgICAgICAgICAvLyAgIGYgKiAyXmUgICAgICA9IHEgKiA1XjE3ICogMl4xNyArIHIK
KyAgICAgICAgICAgIC8vIElmIGUgPiAxNyB0aGVuCisgICAgICAgICAgICAvLyAgIGYgKiAyXihl
LTE3KSA9IHEgKiA1XjE3ICAgICAgICArIHIvMl4xNworICAgICAgICAgICAgLy8gZWxzZQorICAg
ICAgICAgICAgLy8gICBmICA9IHEgKiA1XjE3ICogMl4oMTctZSkgKyByLzJeZQorICAgICAgICAg
ICAgaWYgKGV4cG9uZW50ID4gZGl2aXNvcl9wb3dlcikgeworICAgICAgICAgICAgICAgIC8vIFdl
IG9ubHkgYWxsb3cgZXhwb25lbnRzIG9mIHVwIHRvIDIwIGFuZCB0aGVyZWZvcmUgKDE3IC0gZSkg
PD0gMworICAgICAgICAgICAgICAgIGRpdmlkZW5kIDw8PSBleHBvbmVudCAtIGRpdmlzb3JfcG93
ZXI7CisgICAgICAgICAgICAgICAgcXVvdGllbnQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZGl2
aWRlbmQgLyBkaXZpc29yKTsKKyAgICAgICAgICAgICAgICByZW1haW5kZXIgPSAoZGl2aWRlbmQg
JSBkaXZpc29yKSA8PCBkaXZpc29yX3Bvd2VyOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBkaXZpc29yIDw8PSBkaXZpc29yX3Bvd2VyIC0gZXhwb25lbnQ7CisgICAgICAg
ICAgICAgICAgcXVvdGllbnQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZGl2aWRlbmQgLyBkaXZp
c29yKTsKKyAgICAgICAgICAgICAgICByZW1haW5kZXIgPSAoZGl2aWRlbmQgJSBkaXZpc29yKSA8
PCBleHBvbmVudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEZpbGxEaWdpdHMzMihxdW90
aWVudCwgYnVmZmVyLCBsZW5ndGgpOworICAgICAgICAgICAgRmlsbERpZ2l0czY0Rml4ZWRMZW5n
dGgocmVtYWluZGVyLCBkaXZpc29yX3Bvd2VyLCBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgICAg
ICAqZGVjaW1hbF9wb2ludCA9ICpsZW5ndGg7CisgICAgICAgIH0gZWxzZSBpZiAoZXhwb25lbnQg
Pj0gMCkgeworICAgICAgICAgICAgLy8gMCA8PSBleHBvbmVudCA8PSAxMQorICAgICAgICAgICAg
c2lnbmlmaWNhbmQgPDw9IGV4cG9uZW50OworICAgICAgICAgICAgRmlsbERpZ2l0czY0KHNpZ25p
ZmljYW5kLCBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgICAgICAqZGVjaW1hbF9wb2ludCA9ICps
ZW5ndGg7CisgICAgICAgIH0gZWxzZSBpZiAoZXhwb25lbnQgPiAta0RvdWJsZVNpZ25pZmljYW5k
U2l6ZSkgeworICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBjdXQgdGhlIG51bWJlci4KKyAgICAg
ICAgICAgIHVpbnQ2NF90IGludGVncmFscyA9IHNpZ25pZmljYW5kID4+IC1leHBvbmVudDsKKyAg
ICAgICAgICAgIHVpbnQ2NF90IGZyYWN0aW9uYWxzID0gc2lnbmlmaWNhbmQgLSAoaW50ZWdyYWxz
IDw8IC1leHBvbmVudCk7CisgICAgICAgICAgICBpZiAoaW50ZWdyYWxzID4ga01heFVJbnQzMikg
eworICAgICAgICAgICAgICAgIEZpbGxEaWdpdHM2NChpbnRlZ3JhbHMsIGJ1ZmZlciwgbGVuZ3Ro
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgRmlsbERpZ2l0czMyKHN0
YXRpY19jYXN0PHVpbnQzMl90PihpbnRlZ3JhbHMpLCBidWZmZXIsIGxlbmd0aCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAqZGVjaW1hbF9wb2ludCA9ICpsZW5ndGg7CisgICAgICAgICAg
ICBGaWxsRnJhY3Rpb25hbHMoZnJhY3Rpb25hbHMsIGV4cG9uZW50LCBmcmFjdGlvbmFsX2NvdW50
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgbGVuZ3RoLCBkZWNpbWFsX3Bv
aW50KTsKKyAgICAgICAgfSBlbHNlIGlmIChleHBvbmVudCA8IC0xMjgpIHsKKyAgICAgICAgICAg
IC8vIFRoaXMgY29uZmlndXJhdGlvbiAod2l0aCBhdCBtb3N0IDIwIGRpZ2l0cykgbWVhbnMgdGhh
dCBhbGwgZGlnaXRzIG11c3QgYmUKKyAgICAgICAgICAgIC8vIDAuCisgICAgICAgICAgICBBU1NF
UlQoZnJhY3Rpb25hbF9jb3VudCA8PSAyMCk7CisgICAgICAgICAgICBidWZmZXJbMF0gPSAnXDAn
OworICAgICAgICAgICAgKmxlbmd0aCA9IDA7CisgICAgICAgICAgICAqZGVjaW1hbF9wb2ludCA9
IC1mcmFjdGlvbmFsX2NvdW50OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgKmRlY2lt
YWxfcG9pbnQgPSAwOworICAgICAgICAgICAgRmlsbEZyYWN0aW9uYWxzKHNpZ25pZmljYW5kLCBl
eHBvbmVudCwgZnJhY3Rpb25hbF9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
dWZmZXIsIGxlbmd0aCwgZGVjaW1hbF9wb2ludCk7CisgICAgICAgIH0KKyAgICAgICAgVHJpbVpl
cm9zKGJ1ZmZlciwgbGVuZ3RoLCBkZWNpbWFsX3BvaW50KTsKKyAgICAgICAgYnVmZmVyWypsZW5n
dGhdID0gJ1wwJzsKKyAgICAgICAgaWYgKCgqbGVuZ3RoKSA9PSAwKSB7CisgICAgICAgICAgICAv
LyBUaGUgc3RyaW5nIGlzIGVtcHR5IGFuZCB0aGUgZGVjaW1hbF9wb2ludCB0aHVzIGhhcyBubyBp
bXBvcnRhbmNlLiBNaW1pY2sKKyAgICAgICAgICAgIC8vIEdheSdzIGR0b2EgYW5kIGFuZCBzZXQg
aXQgdG8gLWZyYWN0aW9uYWxfY291bnQuCisgICAgICAgICAgICAqZGVjaW1hbF9wb2ludCA9IC1m
cmFjdGlvbmFsX2NvdW50OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICAKK30gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbgorCit9IC8vIG5hbWVzcGFj
ZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9maXhlZC1k
dG9hLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZml4ZWQtZHRvYS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjhjMGFkYjc1OGIzNzc5N2M1MjdiOTFmNTI2MTkyNjQ1OWQ5MzY3YmUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZml4ZWQtZHRvYS5oCkBA
IC0wLDAgKzEsNjAgQEAKKy8vIENvcHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8v
IG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAg
ICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
Ly8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
Ly8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmbmRlZiBET1VC
TEVfQ09OVkVSU0lPTl9GSVhFRF9EVE9BX0hfCisjZGVmaW5lIERPVUJMRV9DT05WRVJTSU9OX0ZJ
WEVEX0RUT0FfSF8KKworI2luY2x1ZGUgInV0aWxzLmgiCisKK25hbWVzcGFjZSBXVEYgeworCitu
YW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIC8vIFByb2R1Y2VzIGRpZ2l0
cyBuZWNlc3NhcnkgdG8gcHJpbnQgYSBnaXZlbiBudW1iZXIgd2l0aAorICAgIC8vICdmcmFjdGlv
bmFsX2NvdW50JyBkaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQuCisgICAgLy8gVGhlIGJ1
ZmZlciBtdXN0IGJlIGJpZyBlbm91Z2ggdG8gaG9sZCB0aGUgcmVzdWx0IHBsdXMgb25lIHRlcm1p
bmF0aW5nIG51bGwKKyAgICAvLyBjaGFyYWN0ZXIuCisgICAgLy8KKyAgICAvLyBUaGUgcHJvZHVj
ZWQgZGlnaXRzIG1pZ2h0IGJlIHRvbyBzaG9ydCBpbiB3aGljaCBjYXNlIHRoZSBjYWxsZXIgaGFz
IHRvIGZpbGwKKyAgICAvLyB0aGUgZ2FwcyB3aXRoICcwJ3MuCisgICAgLy8gRXhhbXBsZTogRmFz
dEZpeGVkRHRvYSgwLjAwMSwgNSwgLi4uKSBpcyBhbGxvd2VkIHRvIHJldHVybiBidWZmZXIgPSAi
MSIsIGFuZAorICAgIC8vIGRlY2ltYWxfcG9pbnQgPSAtMi4KKyAgICAvLyBIYWxmd2F5IGNhc2Vz
IGFyZSByb3VuZGVkIHRvd2FyZHMgKy8tSW5maW5pdHkgKGF3YXkgZnJvbSAwKS4gVGhlIGNhbGwK
KyAgICAvLyBGYXN0Rml4ZWREdG9hKDAuMTUsIDIsIC4uLikgdGh1cyByZXR1cm5zIGJ1ZmZlciA9
ICIyIiwgZGVjaW1hbF9wb2ludCA9IDAuCisgICAgLy8gVGhlIHJldHVybmVkIGJ1ZmZlciBtYXkg
Y29udGFpbiBkaWdpdHMgdGhhdCB3b3VsZCBiZSB0cnVuY2F0ZWQgZnJvbSB0aGUKKyAgICAvLyBz
aG9ydGVzdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW5wdXQuCisgICAgLy8KKyAgICAvLyBUaGlz
IG1ldGhvZCBvbmx5IHdvcmtzIGZvciBzb21lIHBhcmFtZXRlcnMuIElmIGl0IGNhbid0IGhhbmRs
ZSB0aGUgaW5wdXQgaXQKKyAgICAvLyByZXR1cm5zIGZhbHNlLiBUaGUgb3V0cHV0IGlzIG51bGwt
dGVybWluYXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBzdWNjZWVkcy4KKyAgICBib29sIEZhc3RGaXhl
ZER0b2EoZG91YmxlIHYsIGludCBmcmFjdGlvbmFsX2NvdW50LAorICAgICAgICAgICAgICAgICAg
ICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLCBpbnQqIGxlbmd0aCwgaW50KiBkZWNpbWFsX3BvaW50
KTsKKyAgICAKK30gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbgorCit9IC8vIG5hbWVz
cGFjZSBXVEYKKworI2VuZGlmICAvLyBET1VCTEVfQ09OVkVSU0lPTl9GSVhFRF9EVE9BX0hfCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2Evc3RydG9kLmNjIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL3N0cnRvZC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZDQzZDY5
ZmE3MmYyZGQ2ZWM2Y2U3Yjk0NDM1NmExMjlkMjdjNTMwCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL3N0cnRvZC5jYwpAQCAtMCwwICsxLDQ0NSBAQAor
Ly8gQ29weXJpZ2h0IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAg
ZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkCisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKKy8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8g
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVk
ZSA8bGltaXRzLmg+CisKKyNpbmNsdWRlICJzdHJ0b2QuaCIKKyNpbmNsdWRlICJiaWdudW0uaCIK
KyNpbmNsdWRlICJjYWNoZWQtcG93ZXJzLmgiCisjaW5jbHVkZSAiZG91YmxlLmgiCisKK25hbWVz
cGFjZSBXVEYgeworCituYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIC8v
IDJeNTMgPSA5MDA3MTk5MjU0NzQwOTkyLgorICAgIC8vIEFueSBpbnRlZ2VyIHdpdGggYXQgbW9z
dCAxNSBkZWNpbWFsIGRpZ2l0cyB3aWxsIGhlbmNlIGZpdCBpbnRvIGEgZG91YmxlCisgICAgLy8g
KHdoaWNoIGhhcyBhIDUzYml0IHNpZ25pZmljYW5kKSB3aXRob3V0IGxvc3Mgb2YgcHJlY2lzaW9u
LgorICAgIHN0YXRpYyBjb25zdCBpbnQga01heEV4YWN0RG91YmxlSW50ZWdlckRlY2ltYWxEaWdp
dHMgPSAxNTsKKyAgICAvLyAyXjY0ID0gMTg0NDY3NDQwNzM3MDk1NTE2MTYgPiAxMF4xOQorICAg
IHN0YXRpYyBjb25zdCBpbnQga01heFVpbnQ2NERlY2ltYWxEaWdpdHMgPSAxOTsKKyAgICAKKyAg
ICAvLyBNYXggZG91YmxlOiAxLjc5NzY5MzEzNDg2MjMxNTcgeCAxMF4zMDgKKyAgICAvLyBNaW4g
bm9uLXplcm8gZG91YmxlOiA0Ljk0MDY1NjQ1ODQxMjQ2NTQgeCAxMF4tMzI0CisgICAgLy8gQW55
IHggPj0gMTBeMzA5IGlzIGludGVycHJldGVkIGFzICtpbmZpbml0eS4KKyAgICAvLyBBbnkgeCA8
PSAxMF4tMzI0IGlzIGludGVycHJldGVkIGFzIDAuCisgICAgLy8gTm90ZSB0aGF0IDIuNWUtMzI0
IChkZXNwaXRlIGJlaW5nIHNtYWxsZXIgdGhhbiB0aGUgbWluIGRvdWJsZSkgd2lsbCBiZSByZWFk
CisgICAgLy8gYXMgbm9uLXplcm8gKGVxdWFsIHRvIHRoZSBtaW4gbm9uLXplcm8gZG91YmxlKS4K
KyAgICBzdGF0aWMgY29uc3QgaW50IGtNYXhEZWNpbWFsUG93ZXIgPSAzMDk7CisgICAgc3RhdGlj
IGNvbnN0IGludCBrTWluRGVjaW1hbFBvd2VyID0gLTMyNDsKKyAgICAKKyAgICAvLyAyXjY0ID0g
MTg0NDY3NDQwNzM3MDk1NTE2MTYKKyAgICBzdGF0aWMgY29uc3QgdWludDY0X3Qga01heFVpbnQ2
NCA9IFVJTlQ2NF8yUEFSVF9DKDB4RkZGRkZGRkYsIEZGRkZGRkZGKTsKKyAgICAKKyAgICAKKyAg
ICBzdGF0aWMgY29uc3QgZG91YmxlIGV4YWN0X3Bvd2Vyc19vZl90ZW5bXSA9IHsKKyAgICAgICAg
MS4wLCAgLy8gMTBeMAorICAgICAgICAxMC4wLAorICAgICAgICAxMDAuMCwKKyAgICAgICAgMTAw
MC4wLAorICAgICAgICAxMDAwMC4wLAorICAgICAgICAxMDAwMDAuMCwKKyAgICAgICAgMTAwMDAw
MC4wLAorICAgICAgICAxMDAwMDAwMC4wLAorICAgICAgICAxMDAwMDAwMDAuMCwKKyAgICAgICAg
MTAwMDAwMDAwMC4wLAorICAgICAgICAxMDAwMDAwMDAwMC4wLCAgLy8gMTBeMTAKKyAgICAgICAg
MTAwMDAwMDAwMDAwLjAsCisgICAgICAgIDEwMDAwMDAwMDAwMDAuMCwKKyAgICAgICAgMTAwMDAw
MDAwMDAwMDAuMCwKKyAgICAgICAgMTAwMDAwMDAwMDAwMDAwLjAsCisgICAgICAgIDEwMDAwMDAw
MDAwMDAwMDAuMCwKKyAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAuMCwKKyAgICAgICAgMTAwMDAw
MDAwMDAwMDAwMDAwLjAsCisgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAuMCwKKyAgICAgICAg
MTAwMDAwMDAwMDAwMDAwMDAwMDAuMCwKKyAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwLjAs
ICAvLyAxMF4yMAorICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwLjAsCisgICAgICAgIC8v
IDEwXjIyID0gMHgyMWUxOWUwYzliYWIyNDAwMDAwID0gMHg4Nzg2NzgzMjZlYWM5ICogMl4yMgor
ICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4wCisgICAgfTsKKyAgICBzdGF0aWMgY29u
c3QgaW50IGtFeGFjdFBvd2Vyc09mVGVuU2l6ZSA9IEFSUkFZX1NJWkUoZXhhY3RfcG93ZXJzX29m
X3Rlbik7CisgICAgCisgICAgLy8gTWF4aW11bSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRz
IGluIHRoZSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uLgorICAgIC8vIEluIGZhY3QgdGhlIHZhbHVl
IGlzIDc3MiAoc2VlIGNvbnZlcnNpb25zLmNjKSwgYnV0IHRvIGdpdmUgdXMgc29tZSBtYXJnaW4K
KyAgICAvLyB3ZSByb3VuZCB1cCB0byA3ODAuCisgICAgc3RhdGljIGNvbnN0IGludCBrTWF4U2ln
bmlmaWNhbnREZWNpbWFsRGlnaXRzID0gNzgwOworICAgIAorICAgIHN0YXRpYyBWZWN0b3I8Y29u
c3QgY2hhcj4gVHJpbUxlYWRpbmdaZXJvcyhWZWN0b3I8Y29uc3QgY2hhcj4gYnVmZmVyKSB7Cisg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYnVmZmVyLmxlbmd0aCgpOyBpKyspIHsKKyAgICAg
ICAgICAgIGlmIChidWZmZXJbaV0gIT0gJzAnKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1
ZmZlci5TdWJWZWN0b3IoaSwgYnVmZmVyLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gVmVjdG9yPGNvbnN0IGNoYXI+KGJ1ZmZlci5zdGFydCgpLCAw
KTsKKyAgICB9CisgICAgCisgICAgCisgICAgc3RhdGljIFZlY3Rvcjxjb25zdCBjaGFyPiBUcmlt
VHJhaWxpbmdaZXJvcyhWZWN0b3I8Y29uc3QgY2hhcj4gYnVmZmVyKSB7CisgICAgICAgIGZvciAo
aW50IGkgPSBidWZmZXIubGVuZ3RoKCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICAgICAg
aWYgKGJ1ZmZlcltpXSAhPSAnMCcpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyLlN1
YlZlY3RvcigwLCBpICsgMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIFZlY3Rvcjxjb25zdCBjaGFyPihidWZmZXIuc3RhcnQoKSwgMCk7CisgICAgfQorICAgIAor
ICAgIAorICAgIHN0YXRpYyB2b2lkIFRyaW1Ub01heFNpZ25pZmljYW50RGlnaXRzKFZlY3Rvcjxj
b25zdCBjaGFyPiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGV4cG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYXIqIHNpZ25pZmljYW50X2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQqIHNpZ25pZmljYW50X2V4cG9uZW50KSB7CisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwga01heFNpZ25pZmljYW50RGVjaW1hbERpZ2l0cyAtIDE7ICsr
aSkgeworICAgICAgICAgICAgc2lnbmlmaWNhbnRfYnVmZmVyW2ldID0gYnVmZmVyW2ldOworICAg
ICAgICB9CisgICAgICAgIC8vIFRoZSBpbnB1dCBidWZmZXIgaGFzIGJlZW4gdHJpbW1lZC4gVGhl
cmVmb3JlIHRoZSBsYXN0IGRpZ2l0IG11c3QgYmUKKyAgICAgICAgLy8gZGlmZmVyZW50IGZyb20g
JzAnLgorICAgICAgICBBU1NFUlQoYnVmZmVyW2J1ZmZlci5sZW5ndGgoKSAtIDFdICE9ICcwJyk7
CisgICAgICAgIC8vIFNldCB0aGUgbGFzdCBkaWdpdCB0byBiZSBub24temVyby4gVGhpcyBpcyBz
dWZmaWNpZW50IHRvIGd1YXJhbnRlZQorICAgICAgICAvLyBjb3JyZWN0IHJvdW5kaW5nLgorICAg
ICAgICBzaWduaWZpY2FudF9idWZmZXJba01heFNpZ25pZmljYW50RGVjaW1hbERpZ2l0cyAtIDFd
ID0gJzEnOworICAgICAgICAqc2lnbmlmaWNhbnRfZXhwb25lbnQgPQorICAgICAgICBleHBvbmVu
dCArIChidWZmZXIubGVuZ3RoKCkgLSBrTWF4U2lnbmlmaWNhbnREZWNpbWFsRGlnaXRzKTsKKyAg
ICB9CisgICAgCisgICAgLy8gUmVhZHMgZGlnaXRzIGZyb20gdGhlIGJ1ZmZlciBhbmQgY29udmVy
dHMgdGhlbSB0byBhIHVpbnQ2NC4KKyAgICAvLyBSZWFkcyBpbiBhcyBtYW55IGRpZ2l0cyBhcyBm
aXQgaW50byBhIHVpbnQ2NC4KKyAgICAvLyBXaGVuIHRoZSBzdHJpbmcgc3RhcnRzIHdpdGggIjE4
NDQ2NzQ0MDczNzA5NTUxNjEiIG5vIGZ1cnRoZXIgZGlnaXQgaXMgcmVhZC4KKyAgICAvLyBTaW5j
ZSAyXjY0ID0gMTg0NDY3NDQwNzM3MDk1NTE2MTYgaXQgd291bGQgc3RpbGwgYmUgcG9zc2libGUg
cmVhZCBhbm90aGVyCisgICAgLy8gZGlnaXQgaWYgaXQgd2FzIGxlc3Mgb3IgZXF1YWwgdGhhbiA2
LCBidXQgdGhpcyB3b3VsZCBjb21wbGljYXRlIHRoZSBjb2RlLgorICAgIHN0YXRpYyB1aW50NjRf
dCBSZWFkVWludDY0KFZlY3Rvcjxjb25zdCBjaGFyPiBidWZmZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50KiBudW1iZXJfb2ZfcmVhZF9kaWdpdHMpIHsKKyAgICAgICAgdWlu
dDY0X3QgcmVzdWx0ID0gMDsKKyAgICAgICAgaW50IGkgPSAwOworICAgICAgICB3aGlsZSAoaSA8
IGJ1ZmZlci5sZW5ndGgoKSAmJiByZXN1bHQgPD0gKGtNYXhVaW50NjQgLyAxMCAtIDEpKSB7Cisg
ICAgICAgICAgICBpbnQgZGlnaXQgPSBidWZmZXJbaSsrXSAtICcwJzsKKyAgICAgICAgICAgIEFT
U0VSVCgwIDw9IGRpZ2l0ICYmIGRpZ2l0IDw9IDkpOworICAgICAgICAgICAgcmVzdWx0ID0gMTAg
KiByZXN1bHQgKyBkaWdpdDsKKyAgICAgICAgfQorICAgICAgICAqbnVtYmVyX29mX3JlYWRfZGln
aXRzID0gaTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgCisgICAg
Ly8gUmVhZHMgYSBEaXlGcCBmcm9tIHRoZSBidWZmZXIuCisgICAgLy8gVGhlIHJldHVybmVkIERp
eUZwIGlzIG5vdCBuZWNlc3NhcmlseSBub3JtYWxpemVkLgorICAgIC8vIElmIHJlbWFpbmluZ19k
ZWNpbWFscyBpcyB6ZXJvIHRoZW4gdGhlIHJldHVybmVkIERpeUZwIGlzIGFjY3VyYXRlLgorICAg
IC8vIE90aGVyd2lzZSBpdCBoYXMgYmVlbiByb3VuZGVkIGFuZCBoYXMgZXJyb3Igb2YgYXQgbW9z
dCAxLzIgdWxwLgorICAgIHN0YXRpYyB2b2lkIFJlYWREaXlGcChWZWN0b3I8Y29uc3QgY2hhcj4g
YnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBEaXlGcCogcmVzdWx0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQqIHJlbWFpbmluZ19kZWNpbWFscykgeworICAgICAgICBp
bnQgcmVhZF9kaWdpdHM7CisgICAgICAgIHVpbnQ2NF90IHNpZ25pZmljYW5kID0gUmVhZFVpbnQ2
NChidWZmZXIsICZyZWFkX2RpZ2l0cyk7CisgICAgICAgIGlmIChidWZmZXIubGVuZ3RoKCkgPT0g
cmVhZF9kaWdpdHMpIHsKKyAgICAgICAgICAgICpyZXN1bHQgPSBEaXlGcChzaWduaWZpY2FuZCwg
MCk7CisgICAgICAgICAgICAqcmVtYWluaW5nX2RlY2ltYWxzID0gMDsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIC8vIFJvdW5kIHRoZSBzaWduaWZpY2FuZC4KKyAgICAgICAgICAgIGlm
IChidWZmZXJbcmVhZF9kaWdpdHNdID49ICc1JykgeworICAgICAgICAgICAgICAgIHNpZ25pZmlj
YW5kKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBDb21wdXRlIHRoZSBiaW5hcnkg
ZXhwb25lbnQuCisgICAgICAgICAgICBpbnQgZXhwb25lbnQgPSAwOworICAgICAgICAgICAgKnJl
c3VsdCA9IERpeUZwKHNpZ25pZmljYW5kLCBleHBvbmVudCk7CisgICAgICAgICAgICAqcmVtYWlu
aW5nX2RlY2ltYWxzID0gYnVmZmVyLmxlbmd0aCgpIC0gcmVhZF9kaWdpdHM7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgCisgICAgc3RhdGljIGJvb2wgRG91YmxlU3RydG9kKFZlY3Rvcjxj
b25zdCBjaGFyPiB0cmltbWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZXhw
b25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSogcmVzdWx0KSB7Cisj
aWYgIWRlZmluZWQoRE9VQkxFX0NPTlZFUlNJT05fQ09SUkVDVF9ET1VCTEVfT1BFUkFUSU9OUykK
KyAgICAgICAgLy8gT24geDg2IHRoZSBmbG9hdGluZy1wb2ludCBzdGFjayBjYW4gYmUgNjQgb3Ig
ODAgYml0cyB3aWRlLiBJZiBpdCBpcworICAgICAgICAvLyA4MCBiaXRzIHdpZGUgKGFzIGlzIHRo
ZSBjYXNlIG9uIExpbnV4KSB0aGVuIGRvdWJsZS1yb3VuZGluZyBvY2N1cnMgYW5kIHRoZQorICAg
ICAgICAvLyByZXN1bHQgaXMgbm90IGFjY3VyYXRlLgorICAgICAgICAvLyBXZSBrbm93IHRoYXQg
V2luZG93czMyIHVzZXMgNjQgYml0cyBhbmQgaXMgdGhlcmVmb3JlIGFjY3VyYXRlLgorICAgICAg
ICAvLyBOb3RlIHRoYXQgdGhlIEFSTSBzaW11bGF0b3IgaXMgY29tcGlsZWQgZm9yIDMyYml0cy4g
SXQgdGhlcmVmb3JlIGV4aGliaXRzCisgICAgICAgIC8vIHRoZSBzYW1lIHByb2JsZW0uCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorICAgICAgICBpZiAodHJpbW1lZC5sZW5ndGgoKSA8
PSBrTWF4RXhhY3REb3VibGVJbnRlZ2VyRGVjaW1hbERpZ2l0cykgeworICAgICAgICAgICAgaW50
IHJlYWRfZGlnaXRzOworICAgICAgICAgICAgLy8gVGhlIHRyaW1tZWQgaW5wdXQgZml0cyBpbnRv
IGEgZG91YmxlLgorICAgICAgICAgICAgLy8gSWYgdGhlIDEwXmV4cG9uZW50IChyZXNwLiAxMF4t
ZXhwb25lbnQpIGZpdHMgaW50byBhIGRvdWJsZSB0b28gdGhlbiB3ZQorICAgICAgICAgICAgLy8g
Y2FuIGNvbXB1dGUgdGhlIHJlc3VsdC1kb3VibGUgc2ltcGx5IGJ5IG11bHRpcGx5aW5nIChyZXNw
LiBkaXZpZGluZykgdGhlCisgICAgICAgICAgICAvLyB0d28gbnVtYmVycy4KKyAgICAgICAgICAg
IC8vIFRoaXMgaXMgcG9zc2libGUgYmVjYXVzZSBJRUVFIGd1YXJhbnRlZXMgdGhhdCBmbG9hdGlu
Zy1wb2ludCBvcGVyYXRpb25zCisgICAgICAgICAgICAvLyByZXR1cm4gdGhlIGJlc3QgcG9zc2li
bGUgYXBwcm94aW1hdGlvbi4KKyAgICAgICAgICAgIGlmIChleHBvbmVudCA8IDAgJiYgLWV4cG9u
ZW50IDwga0V4YWN0UG93ZXJzT2ZUZW5TaXplKSB7CisgICAgICAgICAgICAgICAgLy8gMTBeLWV4
cG9uZW50IGZpdHMgaW50byBhIGRvdWJsZS4KKyAgICAgICAgICAgICAgICAqcmVzdWx0ID0gc3Rh
dGljX2Nhc3Q8ZG91YmxlPihSZWFkVWludDY0KHRyaW1tZWQsICZyZWFkX2RpZ2l0cykpOworICAg
ICAgICAgICAgICAgIEFTU0VSVChyZWFkX2RpZ2l0cyA9PSB0cmltbWVkLmxlbmd0aCgpKTsKKyAg
ICAgICAgICAgICAgICAqcmVzdWx0IC89IGV4YWN0X3Bvd2Vyc19vZl90ZW5bLWV4cG9uZW50XTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmICgwIDw9IGV4cG9uZW50ICYmIGV4cG9uZW50IDwga0V4YWN0UG93ZXJzT2ZUZW5TaXplKSB7
CisgICAgICAgICAgICAgICAgLy8gMTBeZXhwb25lbnQgZml0cyBpbnRvIGEgZG91YmxlLgorICAg
ICAgICAgICAgICAgICpyZXN1bHQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KFJlYWRVaW50NjQodHJp
bW1lZCwgJnJlYWRfZGlnaXRzKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHJlYWRfZGlnaXRz
ID09IHRyaW1tZWQubGVuZ3RoKCkpOworICAgICAgICAgICAgICAgICpyZXN1bHQgKj0gZXhhY3Rf
cG93ZXJzX29mX3RlbltleHBvbmVudF07CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgcmVtYWluaW5nX2RpZ2l0cyA9CisgICAgICAg
ICAgICBrTWF4RXhhY3REb3VibGVJbnRlZ2VyRGVjaW1hbERpZ2l0cyAtIHRyaW1tZWQubGVuZ3Ro
KCk7CisgICAgICAgICAgICBpZiAoKDAgPD0gZXhwb25lbnQpICYmCisgICAgICAgICAgICAgICAg
KGV4cG9uZW50IC0gcmVtYWluaW5nX2RpZ2l0cyA8IGtFeGFjdFBvd2Vyc09mVGVuU2l6ZSkpIHsK
KyAgICAgICAgICAgICAgICAvLyBUaGUgdHJpbW1lZCBzdHJpbmcgd2FzIHNob3J0IGFuZCB3ZSBj
YW4gbXVsdGlwbHkgaXQgd2l0aAorICAgICAgICAgICAgICAgIC8vIDEwXnJlbWFpbmluZ19kaWdp
dHMuIEFzIGEgcmVzdWx0IHRoZSByZW1haW5pbmcgZXhwb25lbnQgbm93IGZpdHMKKyAgICAgICAg
ICAgICAgICAvLyBpbnRvIGEgZG91YmxlIHRvby4KKyAgICAgICAgICAgICAgICAqcmVzdWx0ID0g
c3RhdGljX2Nhc3Q8ZG91YmxlPihSZWFkVWludDY0KHRyaW1tZWQsICZyZWFkX2RpZ2l0cykpOwor
ICAgICAgICAgICAgICAgIEFTU0VSVChyZWFkX2RpZ2l0cyA9PSB0cmltbWVkLmxlbmd0aCgpKTsK
KyAgICAgICAgICAgICAgICAqcmVzdWx0ICo9IGV4YWN0X3Bvd2Vyc19vZl90ZW5bcmVtYWluaW5n
X2RpZ2l0c107CisgICAgICAgICAgICAgICAgKnJlc3VsdCAqPSBleGFjdF9wb3dlcnNfb2ZfdGVu
W2V4cG9uZW50IC0gcmVtYWluaW5nX2RpZ2l0c107CisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICAKKyAgICAKKyAgICAvLyBSZXR1cm5zIDEwXmV4cG9uZW50IGFzIGFuIGV4YWN0IERp
eUZwLgorICAgIC8vIFRoZSBnaXZlbiBleHBvbmVudCBtdXN0IGJlIGluIHRoZSByYW5nZSBbMTsg
a0RlY2ltYWxFeHBvbmVudERpc3RhbmNlWy4KKyAgICBzdGF0aWMgRGl5RnAgQWRqdXN0bWVudFBv
d2VyT2ZUZW4oaW50IGV4cG9uZW50KSB7CisgICAgICAgIEFTU0VSVCgwIDwgZXhwb25lbnQpOwor
ICAgICAgICBBU1NFUlQoZXhwb25lbnQgPCBQb3dlcnNPZlRlbkNhY2hlOjprRGVjaW1hbEV4cG9u
ZW50RGlzdGFuY2UpOworICAgICAgICAvLyBTaW1wbHkgaGFyZGNvZGUgdGhlIHJlbWFpbmluZyBw
b3dlcnMgZm9yIHRoZSBnaXZlbiBkZWNpbWFsIGV4cG9uZW50CisgICAgICAgIC8vIGRpc3RhbmNl
LgorICAgICAgICBBU1NFUlQoUG93ZXJzT2ZUZW5DYWNoZTo6a0RlY2ltYWxFeHBvbmVudERpc3Rh
bmNlID09IDgpOworICAgICAgICBzd2l0Y2ggKGV4cG9uZW50KSB7CisgICAgICAgICAgICBjYXNl
IDE6IHJldHVybiBEaXlGcChVSU5UNjRfMlBBUlRfQygweGEwMDAwMDAwLCAwMDAwMDAwMCksIC02
MCk7CisgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBEaXlGcChVSU5UNjRfMlBBUlRfQygweGM4
MDAwMDAwLCAwMDAwMDAwMCksIC01Nyk7CisgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBEaXlG
cChVSU5UNjRfMlBBUlRfQygweGZhMDAwMDAwLCAwMDAwMDAwMCksIC01NCk7CisgICAgICAgICAg
ICBjYXNlIDQ6IHJldHVybiBEaXlGcChVSU5UNjRfMlBBUlRfQygweDljNDAwMDAwLCAwMDAwMDAw
MCksIC01MCk7CisgICAgICAgICAgICBjYXNlIDU6IHJldHVybiBEaXlGcChVSU5UNjRfMlBBUlRf
QygweGMzNTAwMDAwLCAwMDAwMDAwMCksIC00Nyk7CisgICAgICAgICAgICBjYXNlIDY6IHJldHVy
biBEaXlGcChVSU5UNjRfMlBBUlRfQygweGY0MjQwMDAwLCAwMDAwMDAwMCksIC00NCk7CisgICAg
ICAgICAgICBjYXNlIDc6IHJldHVybiBEaXlGcChVSU5UNjRfMlBBUlRfQygweDk4OTY4MDAwLCAw
MDAwMDAwMCksIC00MCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIERpeUZwKDAsIDApOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIAorICAgIC8vIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRy
dWUgdGhlbiB0aGUgcmVzdWx0IGlzIHRoZSBjb3JyZWN0IGRvdWJsZS4KKyAgICAvLyBPdGhlcndp
c2UgaXQgaXMgZWl0aGVyIHRoZSBjb3JyZWN0IGRvdWJsZSBvciB0aGUgZG91YmxlIHRoYXQgaXMg
anVzdCBiZWxvdworICAgIC8vIHRoZSBjb3JyZWN0IGRvdWJsZS4KKyAgICBzdGF0aWMgYm9vbCBE
aXlGcFN0cnRvZChWZWN0b3I8Y29uc3QgY2hhcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBleHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3Vi
bGUqIHJlc3VsdCkgeworICAgICAgICBEaXlGcCBpbnB1dDsKKyAgICAgICAgaW50IHJlbWFpbmlu
Z19kZWNpbWFsczsKKyAgICAgICAgUmVhZERpeUZwKGJ1ZmZlciwgJmlucHV0LCAmcmVtYWluaW5n
X2RlY2ltYWxzKTsKKyAgICAgICAgLy8gU2luY2Ugd2UgbWF5IGhhdmUgZHJvcHBlZCBzb21lIGRp
Z2l0cyB0aGUgaW5wdXQgaXMgbm90IGFjY3VyYXRlLgorICAgICAgICAvLyBJZiByZW1haW5pbmdf
ZGVjaW1hbHMgaXMgZGlmZmVyZW50IHRoYW4gMCB0aGFuIHRoZSBlcnJvciBpcyBhdCBtb3N0Cisg
ICAgICAgIC8vIC41IHVscCAodW5pdCBpbiB0aGUgbGFzdCBwbGFjZSkuCisgICAgICAgIC8vIFdl
IGRvbid0IHdhbnQgdG8gZGVhbCB3aXRoIGZyYWN0aW9ucyBhbmQgdGhlcmVmb3JlIGtlZXAgYSBj
b21tb24KKyAgICAgICAgLy8gZGVub21pbmF0b3IuCisgICAgICAgIGNvbnN0IGludCBrRGVub21p
bmF0b3JMb2cgPSAzOworICAgICAgICBjb25zdCBpbnQga0Rlbm9taW5hdG9yID0gMSA8PCBrRGVu
b21pbmF0b3JMb2c7CisgICAgICAgIC8vIE1vdmUgdGhlIHJlbWFpbmluZyBkZWNpbWFscyBpbnRv
IHRoZSBleHBvbmVudC4KKyAgICAgICAgZXhwb25lbnQgKz0gcmVtYWluaW5nX2RlY2ltYWxzOwor
ICAgICAgICBpbnQgZXJyb3IgPSAocmVtYWluaW5nX2RlY2ltYWxzID09IDAgPyAwIDoga0Rlbm9t
aW5hdG9yIC8gMik7CisgICAgICAgIAorICAgICAgICBpbnQgb2xkX2UgPSBpbnB1dC5lKCk7Cisg
ICAgICAgIGlucHV0Lk5vcm1hbGl6ZSgpOworICAgICAgICBlcnJvciA8PD0gb2xkX2UgLSBpbnB1
dC5lKCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoZXhwb25lbnQgPD0gUG93ZXJzT2ZUZW5D
YWNoZTo6a01heERlY2ltYWxFeHBvbmVudCk7CisgICAgICAgIGlmIChleHBvbmVudCA8IFBvd2Vy
c09mVGVuQ2FjaGU6OmtNaW5EZWNpbWFsRXhwb25lbnQpIHsKKyAgICAgICAgICAgICpyZXN1bHQg
PSAwLjA7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBEaXlG
cCBjYWNoZWRfcG93ZXI7CisgICAgICAgIGludCBjYWNoZWRfZGVjaW1hbF9leHBvbmVudDsKKyAg
ICAgICAgUG93ZXJzT2ZUZW5DYWNoZTo6R2V0Q2FjaGVkUG93ZXJGb3JEZWNpbWFsRXhwb25lbnQo
ZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZjYWNoZWRfcG93ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjYWNoZWRfZGVjaW1hbF9leHBvbmVudCk7
CisgICAgICAgIAorICAgICAgICBpZiAoY2FjaGVkX2RlY2ltYWxfZXhwb25lbnQgIT0gZXhwb25l
bnQpIHsKKyAgICAgICAgICAgIGludCBhZGp1c3RtZW50X2V4cG9uZW50ID0gZXhwb25lbnQgLSBj
YWNoZWRfZGVjaW1hbF9leHBvbmVudDsKKyAgICAgICAgICAgIERpeUZwIGFkanVzdG1lbnRfcG93
ZXIgPSBBZGp1c3RtZW50UG93ZXJPZlRlbihhZGp1c3RtZW50X2V4cG9uZW50KTsKKyAgICAgICAg
ICAgIGlucHV0Lk11bHRpcGx5KGFkanVzdG1lbnRfcG93ZXIpOworICAgICAgICAgICAgaWYgKGtN
YXhVaW50NjREZWNpbWFsRGlnaXRzIC0gYnVmZmVyLmxlbmd0aCgpID49IGFkanVzdG1lbnRfZXhw
b25lbnQpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgcHJvZHVjdCBvZiBpbnB1dCB3aXRoIHRo
ZSBhZGp1c3RtZW50IHBvd2VyIGZpdHMgaW50byBhIDY0IGJpdAorICAgICAgICAgICAgICAgIC8v
IGludGVnZXIuCisgICAgICAgICAgICAgICAgQVNTRVJUKERpeUZwOjprU2lnbmlmaWNhbmRTaXpl
ID09IDY0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIGFk
anVzdG1lbnQgcG93ZXIgaXMgZXhhY3QuIFRoZXJlIGlzIGhlbmNlIG9ubHkgYW4gZXJyb3Igb2Yg
MC41LgorICAgICAgICAgICAgICAgIGVycm9yICs9IGtEZW5vbWluYXRvciAvIDI7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlucHV0Lk11bHRpcGx5KGNhY2hl
ZF9wb3dlcik7CisgICAgICAgIC8vIFRoZSBlcnJvciBpbnRyb2R1Y2VkIGJ5IGEgbXVsdGlwbGlj
YXRpb24gb2YgYSpiIGVxdWFscworICAgICAgICAvLyAgIGVycm9yX2EgKyBlcnJvcl9iICsgZXJy
b3JfYSplcnJvcl9iLzJeNjQgKyAwLjUKKyAgICAgICAgLy8gU3Vic3RpdHV0aW5nIGEgd2l0aCAn
aW5wdXQnIGFuZCBiIHdpdGggJ2NhY2hlZF9wb3dlcicgd2UgaGF2ZQorICAgICAgICAvLyAgIGVy
cm9yX2IgPSAwLjUgIChhbGwgY2FjaGVkIHBvd2VycyBoYXZlIGFuIGVycm9yIG9mIGxlc3MgdGhh
biAwLjUgdWxwKSwKKyAgICAgICAgLy8gICBlcnJvcl9hYiA9IDAgb3IgMSAvIGtEZW5vbWluYXRv
ciA+IGVycm9yX2EqZXJyb3JfYi8gMl42NAorICAgICAgICBpbnQgZXJyb3JfYiA9IGtEZW5vbWlu
YXRvciAvIDI7CisgICAgICAgIGludCBlcnJvcl9hYiA9IChlcnJvciA9PSAwID8gMCA6IDEpOyAg
Ly8gV2Ugcm91bmQgdXAgdG8gMS4KKyAgICAgICAgaW50IGZpeGVkX2Vycm9yID0ga0Rlbm9taW5h
dG9yIC8gMjsKKyAgICAgICAgZXJyb3IgKz0gZXJyb3JfYiArIGVycm9yX2FiICsgZml4ZWRfZXJy
b3I7CisgICAgICAgIAorICAgICAgICBvbGRfZSA9IGlucHV0LmUoKTsKKyAgICAgICAgaW5wdXQu
Tm9ybWFsaXplKCk7CisgICAgICAgIGVycm9yIDw8PSBvbGRfZSAtIGlucHV0LmUoKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIFNlZSBpZiB0aGUgZG91YmxlJ3Mgc2lnbmlmaWNhbmQgY2hhbmdlcyBp
ZiB3ZSBhZGQvc3VidHJhY3QgdGhlIGVycm9yLgorICAgICAgICBpbnQgb3JkZXJfb2ZfbWFnbml0
dWRlID0gRGl5RnA6OmtTaWduaWZpY2FuZFNpemUgKyBpbnB1dC5lKCk7CisgICAgICAgIGludCBl
ZmZlY3RpdmVfc2lnbmlmaWNhbmRfc2l6ZSA9CisgICAgICAgIERvdWJsZTo6U2lnbmlmaWNhbmRT
aXplRm9yT3JkZXJPZk1hZ25pdHVkZShvcmRlcl9vZl9tYWduaXR1ZGUpOworICAgICAgICBpbnQg
cHJlY2lzaW9uX2RpZ2l0c19jb3VudCA9CisgICAgICAgIERpeUZwOjprU2lnbmlmaWNhbmRTaXpl
IC0gZWZmZWN0aXZlX3NpZ25pZmljYW5kX3NpemU7CisgICAgICAgIGlmIChwcmVjaXNpb25fZGln
aXRzX2NvdW50ICsga0Rlbm9taW5hdG9yTG9nID49IERpeUZwOjprU2lnbmlmaWNhbmRTaXplKSB7
CisgICAgICAgICAgICAvLyBUaGlzIGNhbiBvbmx5IGhhcHBlbiBmb3IgdmVyeSBzbWFsbCBkZW5v
cm1hbHMuIEluIHRoaXMgY2FzZSB0aGUKKyAgICAgICAgICAgIC8vIGhhbGYtd2F5IG11bHRpcGxp
ZWQgYnkgdGhlIGRlbm9taW5hdG9yIGV4Y2VlZHMgdGhlIHJhbmdlIG9mIGFuIHVpbnQ2NC4KKyAg
ICAgICAgICAgIC8vIFNpbXBseSBzaGlmdCBldmVyeXRoaW5nIHRvIHRoZSByaWdodC4KKyAgICAg
ICAgICAgIGludCBzaGlmdF9hbW91bnQgPSAocHJlY2lzaW9uX2RpZ2l0c19jb3VudCArIGtEZW5v
bWluYXRvckxvZykgLQorICAgICAgICAgICAgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUgKyAxOwor
ICAgICAgICAgICAgaW5wdXQuc2V0X2YoaW5wdXQuZigpID4+IHNoaWZ0X2Ftb3VudCk7CisgICAg
ICAgICAgICBpbnB1dC5zZXRfZShpbnB1dC5lKCkgKyBzaGlmdF9hbW91bnQpOworICAgICAgICAg
ICAgLy8gV2UgYWRkIDEgZm9yIHRoZSBsb3N0IHByZWNpc2lvbiBvZiBlcnJvciwgYW5kIGtEZW5v
bWluYXRvciBmb3IKKyAgICAgICAgICAgIC8vIHRoZSBsb3N0IHByZWNpc2lvbiBvZiBpbnB1dC5m
KCkuCisgICAgICAgICAgICBlcnJvciA9IChlcnJvciA+PiBzaGlmdF9hbW91bnQpICsgMSArIGtE
ZW5vbWluYXRvcjsKKyAgICAgICAgICAgIHByZWNpc2lvbl9kaWdpdHNfY291bnQgLT0gc2hpZnRf
YW1vdW50OworICAgICAgICB9CisgICAgICAgIC8vIFdlIHVzZSB1aW50NjRfdHMgbm93LiBUaGlz
IG9ubHkgd29ya3MgaWYgdGhlIERpeUZwIHVzZXMgdWludDY0X3RzIHRvby4KKyAgICAgICAgQVNT
RVJUKERpeUZwOjprU2lnbmlmaWNhbmRTaXplID09IDY0KTsKKyAgICAgICAgQVNTRVJUKHByZWNp
c2lvbl9kaWdpdHNfY291bnQgPCA2NCk7CisgICAgICAgIHVpbnQ2NF90IG9uZTY0ID0gMTsKKyAg
ICAgICAgdWludDY0X3QgcHJlY2lzaW9uX2JpdHNfbWFzayA9IChvbmU2NCA8PCBwcmVjaXNpb25f
ZGlnaXRzX2NvdW50KSAtIDE7CisgICAgICAgIHVpbnQ2NF90IHByZWNpc2lvbl9iaXRzID0gaW5w
dXQuZigpICYgcHJlY2lzaW9uX2JpdHNfbWFzazsKKyAgICAgICAgdWludDY0X3QgaGFsZl93YXkg
PSBvbmU2NCA8PCAocHJlY2lzaW9uX2RpZ2l0c19jb3VudCAtIDEpOworICAgICAgICBwcmVjaXNp
b25fYml0cyAqPSBrRGVub21pbmF0b3I7CisgICAgICAgIGhhbGZfd2F5ICo9IGtEZW5vbWluYXRv
cjsKKyAgICAgICAgRGl5RnAgcm91bmRlZF9pbnB1dChpbnB1dC5mKCkgPj4gcHJlY2lzaW9uX2Rp
Z2l0c19jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC5lKCkgKyBwcmVj
aXNpb25fZGlnaXRzX2NvdW50KTsKKyAgICAgICAgaWYgKHByZWNpc2lvbl9iaXRzID49IGhhbGZf
d2F5ICsgZXJyb3IpIHsKKyAgICAgICAgICAgIHJvdW5kZWRfaW5wdXQuc2V0X2Yocm91bmRlZF9p
bnB1dC5mKCkgKyAxKTsKKyAgICAgICAgfQorICAgICAgICAvLyBJZiB0aGUgbGFzdF9iaXRzIGFy
ZSB0b28gY2xvc2UgdG8gdGhlIGhhbGYtd2F5IGNhc2UgdGhhbiB3ZSBhcmUgdG9vCisgICAgICAg
IC8vIGluYWNjdXJhdGUgYW5kIHJvdW5kIGRvd24uIEluIHRoaXMgY2FzZSB3ZSByZXR1cm4gZmFs
c2Ugc28gdGhhdCB3ZSBjYW4KKyAgICAgICAgLy8gZmFsbCBiYWNrIHRvIGEgbW9yZSBwcmVjaXNl
IGFsZ29yaXRobS4KKyAgICAgICAgCisgICAgICAgICpyZXN1bHQgPSBEb3VibGUocm91bmRlZF9p
bnB1dCkudmFsdWUoKTsKKyAgICAgICAgaWYgKGhhbGZfd2F5IC0gZXJyb3IgPCBwcmVjaXNpb25f
Yml0cyAmJiBwcmVjaXNpb25fYml0cyA8IGhhbGZfd2F5ICsgZXJyb3IpIHsKKyAgICAgICAgICAg
IC8vIFRvbyBpbXByZWNpc2UuIFRoZSBjYWxsZXIgd2lsbCBoYXZlIHRvIGZhbGwgYmFjayB0byBh
IHNsb3dlciB2ZXJzaW9uLgorICAgICAgICAgICAgLy8gSG93ZXZlciB0aGUgcmV0dXJuZWQgbnVt
YmVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgZWl0aGVyIHRoZSBjb3JyZWN0CisgICAgICAgICAgICAv
LyBkb3VibGUsIG9yIHRoZSBuZXh0LWxvd2VyIGRvdWJsZS4KKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIAorICAgIC8vIFJldHVybnMgdGhlIGNvcnJlY3QgZG91Ymxl
IGZvciB0aGUgYnVmZmVyKjEwXmV4cG9uZW50LgorICAgIC8vIFRoZSB2YXJpYWJsZSBndWVzcyBz
aG91bGQgYmUgYSBjbG9zZSBndWVzcyB0aGF0IGlzIGVpdGhlciB0aGUgY29ycmVjdCBkb3VibGUK
KyAgICAvLyBvciBpdHMgbG93ZXIgbmVpZ2hib3IgKHRoZSBuZWFyZXN0IGRvdWJsZSBsZXNzIHRo
YW4gdGhlIGNvcnJlY3Qgb25lKS4KKyAgICAvLyBQcmVjb25kaXRpb25zOgorICAgIC8vICAgYnVm
ZmVyLmxlbmd0aCgpICsgZXhwb25lbnQgPD0ga01heERlY2ltYWxQb3dlciArIDEKKyAgICAvLyAg
IGJ1ZmZlci5sZW5ndGgoKSArIGV4cG9uZW50ID4ga01pbkRlY2ltYWxQb3dlcgorICAgIC8vICAg
YnVmZmVyLmxlbmd0aCgpIDw9IGtNYXhEZWNpbWFsU2lnbmlmaWNhbnREaWdpdHMKKyAgICBzdGF0
aWMgZG91YmxlIEJpZ251bVN0cnRvZChWZWN0b3I8Y29uc3QgY2hhcj4gYnVmZmVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBvbmVudCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkb3VibGUgZ3Vlc3MpIHsKKyAgICAgICAgaWYgKGd1ZXNzID09IERvdWJs
ZTo6SW5maW5pdHkoKSkgeworICAgICAgICAgICAgcmV0dXJuIGd1ZXNzOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBEaXlGcCB1cHBlcl9ib3VuZGFyeSA9IERvdWJsZShndWVzcykuVXBw
ZXJCb3VuZGFyeSgpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKGJ1ZmZlci5sZW5ndGgoKSAr
IGV4cG9uZW50IDw9IGtNYXhEZWNpbWFsUG93ZXIgKyAxKTsKKyAgICAgICAgQVNTRVJUKGJ1ZmZl
ci5sZW5ndGgoKSArIGV4cG9uZW50ID4ga01pbkRlY2ltYWxQb3dlcik7CisgICAgICAgIEFTU0VS
VChidWZmZXIubGVuZ3RoKCkgPD0ga01heFNpZ25pZmljYW50RGVjaW1hbERpZ2l0cyk7CisgICAg
ICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBCaWdudW0gd2lsbCBiZSBhYmxlIHRvIGhvbGQgYWxs
IG91ciBudW1iZXJzLgorICAgICAgICAvLyBPdXIgQmlnbnVtIGltcGxlbWVudGF0aW9uIGhhcyBh
IHNlcGFyYXRlIGZpZWxkIGZvciBleHBvbmVudHMuIFNoaWZ0cyB3aWxsCisgICAgICAgIC8vIGNv
bnN1bWUgYXQgbW9zdCBvbmUgYmlnaXQgKDwgNjQgYml0cykuCisgICAgICAgIC8vIGxuKDEwKSA9
PSAzLjMyMTkuLi4KKyAgICAgICAgQVNTRVJUKCgoa01heERlY2ltYWxQb3dlciArIDEpICogMzMz
IC8gMTAwKSA8IEJpZ251bTo6a01heFNpZ25pZmljYW50Qml0cyk7CisgICAgICAgIEJpZ251bSBp
bnB1dDsKKyAgICAgICAgQmlnbnVtIGJvdW5kYXJ5OworICAgICAgICBpbnB1dC5Bc3NpZ25EZWNp
bWFsU3RyaW5nKGJ1ZmZlcik7CisgICAgICAgIGJvdW5kYXJ5LkFzc2lnblVJbnQ2NCh1cHBlcl9i
b3VuZGFyeS5mKCkpOworICAgICAgICBpZiAoZXhwb25lbnQgPj0gMCkgeworICAgICAgICAgICAg
aW5wdXQuTXVsdGlwbHlCeVBvd2VyT2ZUZW4oZXhwb25lbnQpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgYm91bmRhcnkuTXVsdGlwbHlCeVBvd2VyT2ZUZW4oLWV4cG9uZW50KTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAodXBwZXJfYm91bmRhcnkuZSgpID4gMCkgeworICAgICAgICAg
ICAgYm91bmRhcnkuU2hpZnRMZWZ0KHVwcGVyX2JvdW5kYXJ5LmUoKSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBpbnB1dC5TaGlmdExlZnQoLXVwcGVyX2JvdW5kYXJ5LmUoKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgaW50IGNvbXBhcmlzb24gPSBCaWdudW06OkNvbXBhcmUoaW5wdXQs
IGJvdW5kYXJ5KTsKKyAgICAgICAgaWYgKGNvbXBhcmlzb24gPCAwKSB7CisgICAgICAgICAgICBy
ZXR1cm4gZ3Vlc3M7CisgICAgICAgIH0gZWxzZSBpZiAoY29tcGFyaXNvbiA+IDApIHsKKyAgICAg
ICAgICAgIHJldHVybiBEb3VibGUoZ3Vlc3MpLk5leHREb3VibGUoKTsKKyAgICAgICAgfSBlbHNl
IGlmICgoRG91YmxlKGd1ZXNzKS5TaWduaWZpY2FuZCgpICYgMSkgPT0gMCkgeworICAgICAgICAg
ICAgLy8gUm91bmQgdG93YXJkcyBldmVuLgorICAgICAgICAgICAgcmV0dXJuIGd1ZXNzOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIERvdWJsZShndWVzcykuTmV4dERvdWJs
ZSgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIGRvdWJsZSBTdHJ0b2QoVmVj
dG9yPGNvbnN0IGNoYXI+IGJ1ZmZlciwgaW50IGV4cG9uZW50KSB7CisgICAgICAgIFZlY3Rvcjxj
b25zdCBjaGFyPiBsZWZ0X3RyaW1tZWQgPSBUcmltTGVhZGluZ1plcm9zKGJ1ZmZlcik7CisgICAg
ICAgIFZlY3Rvcjxjb25zdCBjaGFyPiB0cmltbWVkID0gVHJpbVRyYWlsaW5nWmVyb3MobGVmdF90
cmltbWVkKTsKKyAgICAgICAgZXhwb25lbnQgKz0gbGVmdF90cmltbWVkLmxlbmd0aCgpIC0gdHJp
bW1lZC5sZW5ndGgoKTsKKyAgICAgICAgaWYgKHRyaW1tZWQubGVuZ3RoKCkgPT0gMCkgcmV0dXJu
IDAuMDsKKyAgICAgICAgaWYgKHRyaW1tZWQubGVuZ3RoKCkgPiBrTWF4U2lnbmlmaWNhbnREZWNp
bWFsRGlnaXRzKSB7CisgICAgICAgICAgICBjaGFyIHNpZ25pZmljYW50X2J1ZmZlcltrTWF4U2ln
bmlmaWNhbnREZWNpbWFsRGlnaXRzXTsKKyAgICAgICAgICAgIGludCBzaWduaWZpY2FudF9leHBv
bmVudDsKKyAgICAgICAgICAgIFRyaW1Ub01heFNpZ25pZmljYW50RGlnaXRzKHRyaW1tZWQsIGV4
cG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmlmaWNh
bnRfYnVmZmVyLCAmc2lnbmlmaWNhbnRfZXhwb25lbnQpOworICAgICAgICAgICAgcmV0dXJuIFN0
cnRvZChWZWN0b3I8Y29uc3QgY2hhcj4oc2lnbmlmaWNhbnRfYnVmZmVyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga01heFNpZ25pZmljYW50RGVjaW1hbERp
Z2l0cyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25pZmljYW50X2V4cG9uZW50KTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoZXhwb25lbnQgKyB0cmltbWVkLmxlbmd0aCgpIC0gMSA+
PSBrTWF4RGVjaW1hbFBvd2VyKSB7CisgICAgICAgICAgICByZXR1cm4gRG91YmxlOjpJbmZpbml0
eSgpOworICAgICAgICB9CisgICAgICAgIGlmIChleHBvbmVudCArIHRyaW1tZWQubGVuZ3RoKCkg
PD0ga01pbkRlY2ltYWxQb3dlcikgeworICAgICAgICAgICAgcmV0dXJuIDAuMDsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgZG91YmxlIGd1ZXNzOworICAgICAgICBpZiAoRG91YmxlU3Ry
dG9kKHRyaW1tZWQsIGV4cG9uZW50LCAmZ3Vlc3MpIHx8CisgICAgICAgICAgICBEaXlGcFN0cnRv
ZCh0cmltbWVkLCBleHBvbmVudCwgJmd1ZXNzKSkgeworICAgICAgICAgICAgcmV0dXJuIGd1ZXNz
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBCaWdudW1TdHJ0b2QodHJpbW1lZCwgZXhwb25l
bnQsIGd1ZXNzKTsKKyAgICB9CisgICAgCit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNp
b24KKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL2R0b2Evc3RydG9kLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2Evc3Ry
dG9kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOGVkMzUwYWQ4YWM4Zjc4MjVmMDg0MTU5MjdjYTYwYWU5N2YzODI1
YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9zdHJ0
b2QuaApAQCAtMCwwICsxLDQ1IEBACisvLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJvamVjdCBh
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
Ky8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZm5k
ZWYgRE9VQkxFX0NPTlZFUlNJT05fU1RSVE9EX0hfCisjZGVmaW5lIERPVUJMRV9DT05WRVJTSU9O
X1NUUlRPRF9IXworCisjaW5jbHVkZSAidXRpbHMuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK25h
bWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgLy8gVGhlIGJ1ZmZlciBtdXN0
IG9ubHkgY29udGFpbiBkaWdpdHMgaW4gdGhlIHJhbmdlIFswLTldLiBJdCBtdXN0IG5vdAorICAg
IC8vIGNvbnRhaW4gYSBkb3Qgb3IgYSBzaWduLiBJdCBtdXN0IG5vdCBzdGFydCB3aXRoICcwJywg
YW5kIG11c3Qgbm90IGJlIGVtcHR5LgorICAgIGRvdWJsZSBTdHJ0b2QoVmVjdG9yPGNvbnN0IGNo
YXI+IGJ1ZmZlciwgaW50IGV4cG9uZW50KTsKKyAgICAKK30gIC8vIG5hbWVzcGFjZSBkb3VibGVf
Y29udmVyc2lvbgorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmICAvLyBET1VCTEVfQ09O
VkVSU0lPTl9TVFJUT0RfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
ZHRvYS91dGlscy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL3V0aWxzLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZGVmYjVmMTJiNzE1NTIwYTY1NWFjYWQxNjdhMTkwY2E2ZDkxOTYyYwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS91dGlscy5oCkBAIC0w
LDAgKzEsMzAzIEBACisvLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBt
ZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAg
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8v
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8v
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZm5kZWYgRE9VQkxF
X0NPTlZFUlNJT05fVVRJTFNfSF8KKyNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05fVVRJTFNfSF8K
KworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWZuZGVmIEFT
U0VSVAorI2luY2x1ZGUgPGFzc2VydC5oPgorI2RlZmluZSBBU1NFUlQoY29uZGl0aW9uKSAgICAg
IChhc3NlcnQoY29uZGl0aW9uKSkKKyNkZWZpbmUgVU5JTVBMRU1FTlRFRCgpIChhYm9ydCgpKQor
I2RlZmluZSBVTlJFQUNIQUJMRSgpICAgKGFib3J0KCkpCisjZW5kaWYKKworLy8gRG91YmxlIG9w
ZXJhdGlvbnMgZGV0ZWN0aW9uIGJhc2VkIG9uIHRhcmdldCBhcmNoaXRlY3R1cmUuCisvLyBMaW51
eCB1c2VzIGEgODBiaXQgd2lkZSBmbG9hdGluZyBwb2ludCBzdGFjayBvbiB4ODYuIFRoaXMgaW5k
dWNlcyBkb3VibGUKKy8vIHJvdW5kaW5nLCB3aGljaCBpbiB0dXJuIGxlYWRzIHRvIHdyb25nIHJl
c3VsdHMuCisvLyBBbiBlYXN5IHdheSB0byB0ZXN0IGlmIHRoZSBmbG9hdGluZy1wb2ludCBvcGVy
YXRpb25zIGFyZSBjb3JyZWN0IGlzIHRvCisvLyBldmFsdWF0ZTogODkyNTUuMC8xZTIyLiBJZiB0
aGUgZmxvYXRpbmctcG9pbnQgc3RhY2sgaXMgNjQgYml0cyB3aWRlIHRoZW4KKy8vIHRoZSByZXN1
bHQgaXMgZXF1YWwgdG8gODkyNTVlLTIyLgorLy8gVGhlIGJlc3Qgd2F5IHRvIHRlc3QgdGhpcywg
aXMgdG8gY3JlYXRlIGEgZGl2aXNpb24tZnVuY3Rpb24gYW5kIHRvIGNvbXBhcmUKKy8vIHRoZSBv
dXRwdXQgb2YgdGhlIGRpdmlzaW9uIHdpdGggdGhlIGV4cGVjdGVkIHJlc3VsdC4gKElubGluaW5n
IG11c3QgYmUKKy8vIGRpc2FibGVkLikKKy8vIE9uIExpbnV4LHg4NiA4OTI1NWUtMjIgIT0gRGl2
X2RvdWJsZSg4OTI1NS4wLzFlMjIpCisjaWYgZGVmaW5lZChfTV9YNjQpIHx8IGRlZmluZWQoX194
ODZfNjRfXykgfHwgXAorZGVmaW5lZChfX0FSTUVMX18pIHx8IFwKK2RlZmluZWQoX01JUFNfQVJD
SF9NSVBTMzJSMikKKyNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05fQ09SUkVDVF9ET1VCTEVfT1BF
UkFUSU9OUyAxCisjZWxpZiBkZWZpbmVkKF9NX0lYODYpIHx8IGRlZmluZWQoX19pMzg2X18pCisj
aWYgZGVmaW5lZChfV0lOMzIpCisvLyBXaW5kb3dzIHVzZXMgYSA2NGJpdCB3aWRlIGZsb2F0aW5n
IHBvaW50IHN0YWNrLgorI2RlZmluZSBET1VCTEVfQ09OVkVSU0lPTl9DT1JSRUNUX0RPVUJMRV9P
UEVSQVRJT05TIDEKKyNlbHNlCisjdW5kZWYgRE9VQkxFX0NPTlZFUlNJT05fQ09SUkVDVF9ET1VC
TEVfT1BFUkFUSU9OUworI2VuZGlmICAvLyBfV0lOMzIKKyNlbHNlCisjZXJyb3IgVGFyZ2V0IGFy
Y2hpdGVjdHVyZSB3YXMgbm90IGRldGVjdGVkIGFzIHN1cHBvcnRlZCBieSBEb3VibGUtQ29udmVy
c2lvbi4KKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19NSU5H
VzMyX18pCisKK3R5cGVkZWYgc2lnbmVkIGNoYXIgaW50OF90OwordHlwZWRlZiB1bnNpZ25lZCBj
aGFyIHVpbnQ4X3Q7Cit0eXBlZGVmIHNob3J0IGludDE2X3Q7ICAvLyBOT0xJTlQKK3R5cGVkZWYg
dW5zaWduZWQgc2hvcnQgdWludDE2X3Q7ICAvLyBOT0xJTlQKK3R5cGVkZWYgaW50IGludDMyX3Q7
Cit0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50MzJfdDsKK3R5cGVkZWYgX19pbnQ2NCBpbnQ2NF90
OwordHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0IHVpbnQ2NF90OworLy8gaW50cHRyX3QgYW5kIGZy
aWVuZHMgYXJlIGRlZmluZWQgaW4gY3J0ZGVmcy5oIHRocm91Z2ggc3RkaW8uaC4KKworI2Vsc2UK
KworI2luY2x1ZGUgPHN0ZGludC5oPgorCisjZW5kaWYKKworLy8gVGhlIGZvbGxvd2luZyBtYWNy
byB3b3JrcyBvbiBib3RoIDMyIGFuZCA2NC1iaXQgcGxhdGZvcm1zLgorLy8gVXNhZ2U6IGluc3Rl
YWQgb2Ygd3JpdGluZyAweDEyMzQ1Njc4OTAxMjM0NTYKKy8vICAgICAgd3JpdGUgVUlOVDY0XzJQ
QVJUX0MoMHgxMjM0NTY3OCw5MDEyMzQ1Nik7CisjZGVmaW5lIFVJTlQ2NF8yUEFSVF9DKGEsIGIp
ICgoKHN0YXRpY19jYXN0PHVpbnQ2NF90PihhKSA8PCAzMikgKyAweCMjYiMjdSkpCisKKworLy8g
VGhlIGV4cHJlc3Npb24gQVJSQVlfU0laRShhKSBpcyBhIGNvbXBpbGUtdGltZSBjb25zdGFudCBv
ZiB0eXBlCisvLyBzaXplX3Qgd2hpY2ggcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRz
IG9mIHRoZSBnaXZlbgorLy8gYXJyYXkuIFlvdSBzaG91bGQgb25seSB1c2UgQVJSQVlfU0laRSBv
biBzdGF0aWNhbGx5IGFsbG9jYXRlZAorLy8gYXJyYXlzLgorI2RlZmluZSBBUlJBWV9TSVpFKGEp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisoKHNpemVvZihhKSAvIHNpemVv
ZigqKGEpKSkgLyAgICAgICAgICAgICAgICAgICAgICAgICBcCitzdGF0aWNfY2FzdDxzaXplX3Q+
KCEoc2l6ZW9mKGEpICUgc2l6ZW9mKCooYSkpKSkpCisKKy8vIEEgbWFjcm8gdG8gZGlzYWxsb3cg
dGhlIGV2aWwgY29weSBjb25zdHJ1Y3RvciBhbmQgb3BlcmF0b3I9IGZ1bmN0aW9ucworLy8gVGhp
cyBzaG91bGQgYmUgdXNlZCBpbiB0aGUgcHJpdmF0ZTogZGVjbGFyYXRpb25zIGZvciBhIGNsYXNz
CisjZGVmaW5lIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUeXBlTmFtZSkgICAgICBcCitUeXBl
TmFtZShjb25zdCBUeXBlTmFtZSYpOyAgICAgICAgICAgICAgICAgICAgXAordm9pZCBvcGVyYXRv
cj0oY29uc3QgVHlwZU5hbWUmKQorCisvLyBBIG1hY3JvIHRvIGRpc2FsbG93IGFsbCB0aGUgaW1w
bGljaXQgY29uc3RydWN0b3JzLCBuYW1lbHkgdGhlCisvLyBkZWZhdWx0IGNvbnN0cnVjdG9yLCBj
b3B5IGNvbnN0cnVjdG9yIGFuZCBvcGVyYXRvcj0gZnVuY3Rpb25zLgorLy8KKy8vIFRoaXMgc2hv
dWxkIGJlIHVzZWQgaW4gdGhlIHByaXZhdGU6IGRlY2xhcmF0aW9ucyBmb3IgYSBjbGFzcworLy8g
dGhhdCB3YW50cyB0byBwcmV2ZW50IGFueW9uZSBmcm9tIGluc3RhbnRpYXRpbmcgaXQuIFRoaXMg
aXMKKy8vIGVzcGVjaWFsbHkgdXNlZnVsIGZvciBjbGFzc2VzIGNvbnRhaW5pbmcgb25seSBzdGF0
aWMgbWV0aG9kcy4KKyNkZWZpbmUgRElTQUxMT1dfSU1QTElDSVRfQ09OU1RSVUNUT1JTKFR5cGVO
YW1lKSBcCitUeXBlTmFtZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
K0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUeXBlTmFtZSkKKworbmFtZXNwYWNlIFdURiB7CisK
K25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgc3RhdGljIGNvbnN0IGlu
dCBrQ2hhclNpemUgPSBzaXplb2YoY2hhcik7CisgICAgCisgICAgLy8gUmV0dXJucyB0aGUgbWF4
aW11bSBvZiB0aGUgdHdvIHBhcmFtZXRlcnMuCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisg
ICAgc3RhdGljIFQgTWF4KFQgYSwgVCBiKSB7CisgICAgICAgIHJldHVybiBhIDwgYiA/IGIgOiBh
OworICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRoZSBtaW5pbXVtIG9mIHRoZSB0
d28gcGFyYW1ldGVycy4KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgVCBN
aW4oVCBhLCBUIGIpIHsKKyAgICAgICAgcmV0dXJuIGEgPCBiID8gYSA6IGI7CisgICAgfQorICAg
IAorICAgIAorICAgIGlubGluZSBpbnQgU3RyTGVuZ3RoKGNvbnN0IGNoYXIqIHN0cmluZykgewor
ICAgICAgICBzaXplX3QgbGVuZ3RoID0gc3RybGVuKHN0cmluZyk7CisgICAgICAgIEFTU0VSVChs
ZW5ndGggPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihzdGF0aWNfY2FzdDxpbnQ+KGxlbmd0aCkpKTsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obGVuZ3RoKTsKKyAgICB9CisgICAgCisg
ICAgLy8gVGhpcyBpcyBhIHNpbXBsaWZpZWQgdmVyc2lvbiBvZiBWOCdzIFZlY3RvciBjbGFzcy4K
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBjbGFzcyBWZWN0b3IgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgVmVjdG9yKCkgOiBzdGFydF8oTlVMTCksIGxlbmd0aF8oMCkge30KKyAgICAg
ICAgVmVjdG9yKFQqIGRhdGEsIGludCBsZW5ndGgpIDogc3RhcnRfKGRhdGEpLCBsZW5ndGhfKGxl
bmd0aCkgeworICAgICAgICAgICAgQVNTRVJUKGxlbmd0aCA9PSAwIHx8IChsZW5ndGggPiAwICYm
IGRhdGEgIT0gTlVMTCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBSZXR1cm5z
IGEgdmVjdG9yIHVzaW5nIHRoZSBzYW1lIGJhY2tpbmcgc3RvcmFnZSBhcyB0aGlzIG9uZSwKKyAg
ICAgICAgLy8gc3Bhbm5pbmcgZnJvbSBhbmQgaW5jbHVkaW5nICdmcm9tJywgdG8gYnV0IG5vdCBp
bmNsdWRpbmcgJ3RvJy4KKyAgICAgICAgVmVjdG9yPFQ+IFN1YlZlY3RvcihpbnQgZnJvbSwgaW50
IHRvKSB7CisgICAgICAgICAgICBBU1NFUlQodG8gPD0gbGVuZ3RoXyk7CisgICAgICAgICAgICBB
U1NFUlQoZnJvbSA8IHRvKTsKKyAgICAgICAgICAgIEFTU0VSVCgwIDw9IGZyb20pOworICAgICAg
ICAgICAgcmV0dXJuIFZlY3RvcjxUPihzdGFydCgpICsgZnJvbSwgdG8gLSBmcm9tKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSB2ZWN0
b3IuCisgICAgICAgIGludCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBsZW5ndGhfOyB9CisgICAg
ICAgIAorICAgICAgICAvLyBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSB2ZWN0b3IgaXMgZW1w
dHkuCisgICAgICAgIGJvb2wgaXNfZW1wdHkoKSBjb25zdCB7IHJldHVybiBsZW5ndGhfID09IDA7
IH0KKyAgICAgICAgCisgICAgICAgIC8vIFJldHVybnMgdGhlIHBvaW50ZXIgdG8gdGhlIHN0YXJ0
IG9mIHRoZSBkYXRhIGluIHRoZSB2ZWN0b3IuCisgICAgICAgIFQqIHN0YXJ0KCkgY29uc3QgeyBy
ZXR1cm4gc3RhcnRfOyB9CisgICAgICAgIAorICAgICAgICAvLyBBY2Nlc3MgaW5kaXZpZHVhbCB2
ZWN0b3IgZWxlbWVudHMgLSBjaGVja3MgYm91bmRzIGluIGRlYnVnIG1vZGUuCisgICAgICAgIFQm
IG9wZXJhdG9yW10oaW50IGluZGV4KSBjb25zdCB7CisgICAgICAgICAgICBBU1NFUlQoMCA8PSBp
bmRleCAmJiBpbmRleCA8IGxlbmd0aF8pOworICAgICAgICAgICAgcmV0dXJuIHN0YXJ0X1tpbmRl
eF07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFQmIGZpcnN0KCkgeyByZXR1cm4gc3Rh
cnRfWzBdOyB9CisgICAgICAgIAorICAgICAgICBUJiBsYXN0KCkgeyByZXR1cm4gc3RhcnRfW2xl
bmd0aF8gLSAxXTsgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBUKiBzdGFydF87
CisgICAgICAgIGludCBsZW5ndGhfOworICAgIH07CisgICAgCisgICAgCisgICAgLy8gSGVscGVy
IGNsYXNzIGZvciBidWlsZGluZyByZXN1bHQgc3RyaW5ncyBpbiBhIGNoYXJhY3RlciBidWZmZXIu
IFRoZQorICAgIC8vIHB1cnBvc2Ugb2YgdGhlIGNsYXNzIGlzIHRvIHVzZSBzYWZlIG9wZXJhdGlv
bnMgdGhhdCBjaGVja3MgdGhlCisgICAgLy8gYnVmZmVyIGJvdW5kcyBvbiBhbGwgb3BlcmF0aW9u
cyBpbiBkZWJ1ZyBtb2RlLgorICAgIGNsYXNzIFN0cmluZ0J1aWxkZXIgeworICAgIHB1YmxpYzoK
KyAgICAgICAgU3RyaW5nQnVpbGRlcihjaGFyKiBidWZmZXIsIGludCBzaXplKQorICAgICAgICA6
IGJ1ZmZlcl8oYnVmZmVyLCBzaXplKSwgcG9zaXRpb25fKDApIHsgfQorICAgICAgICAKKyAgICAg
ICAgflN0cmluZ0J1aWxkZXIoKSB7IGlmICghaXNfZmluYWxpemVkKCkpIEZpbmFsaXplKCk7IH0K
KyAgICAgICAgCisgICAgICAgIGludCBzaXplKCkgY29uc3QgeyByZXR1cm4gYnVmZmVyXy5sZW5n
dGgoKTsgfQorICAgICAgICAKKyAgICAgICAgLy8gR2V0IHRoZSBjdXJyZW50IHBvc2l0aW9uIGlu
IHRoZSBidWlsZGVyLgorICAgICAgICBpbnQgcG9zaXRpb24oKSBjb25zdCB7CisgICAgICAgICAg
ICBBU1NFUlQoIWlzX2ZpbmFsaXplZCgpKTsKKyAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbl87
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFJlc2V0IHRoZSBwb3NpdGlvbi4KKyAg
ICAgICAgdm9pZCBSZXNldCgpIHsgcG9zaXRpb25fID0gMDsgfQorICAgICAgICAKKyAgICAgICAg
Ly8gQWRkIGEgc2luZ2xlIGNoYXJhY3RlciB0byB0aGUgYnVpbGRlci4gSXQgaXMgbm90IGFsbG93
ZWQgdG8gYWRkCisgICAgICAgIC8vIDAtY2hhcmFjdGVyczsgdXNlIHRoZSBGaW5hbGl6ZSgpIG1l
dGhvZCB0byB0ZXJtaW5hdGUgdGhlIHN0cmluZworICAgICAgICAvLyBpbnN0ZWFkLgorICAgICAg
ICB2b2lkIEFkZENoYXJhY3RlcihjaGFyIGMpIHsKKyAgICAgICAgICAgIEFTU0VSVChjICE9ICdc
MCcpOworICAgICAgICAgICAgQVNTRVJUKCFpc19maW5hbGl6ZWQoKSAmJiBwb3NpdGlvbl8gPCBi
dWZmZXJfLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGJ1ZmZlcl9bcG9zaXRpb25fKytdID0gYzsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQWRkIGFuIGVudGlyZSBzdHJpbmcgdG8g
dGhlIGJ1aWxkZXIuIFVzZXMgc3RybGVuKCkgaW50ZXJuYWxseSB0bworICAgICAgICAvLyBjb21w
dXRlIHRoZSBsZW5ndGggb2YgdGhlIGlucHV0IHN0cmluZy4KKyAgICAgICAgdm9pZCBBZGRTdHJp
bmcoY29uc3QgY2hhciogcykgeworICAgICAgICAgICAgQWRkU3Vic3RyaW5nKHMsIFN0ckxlbmd0
aChzKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEFkZCB0aGUgZmlyc3QgJ24n
IGNoYXJhY3RlcnMgb2YgdGhlIGdpdmVuIHN0cmluZyAncycgdG8gdGhlCisgICAgICAgIC8vIGJ1
aWxkZXIuIFRoZSBpbnB1dCBzdHJpbmcgbXVzdCBoYXZlIGVub3VnaCBjaGFyYWN0ZXJzLgorICAg
ICAgICB2b2lkIEFkZFN1YnN0cmluZyhjb25zdCBjaGFyKiBzLCBpbnQgbikgeworICAgICAgICAg
ICAgQVNTRVJUKCFpc19maW5hbGl6ZWQoKSAmJiBwb3NpdGlvbl8gKyBuIDwgYnVmZmVyXy5sZW5n
dGgoKSk7CisgICAgICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihuKSA8PSBzdHJs
ZW4ocykpOworICAgICAgICAgICAgbWVtY3B5KCZidWZmZXJfW3Bvc2l0aW9uX10sIHMsIG4gKiBr
Q2hhclNpemUpOworICAgICAgICAgICAgcG9zaXRpb25fICs9IG47CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIAorICAgICAgICAvLyBBZGQgY2hhcmFjdGVyIHBhZGRpbmcgdG8gdGhlIGJ1
aWxkZXIuIElmIGNvdW50IGlzIG5vbi1wb3NpdGl2ZSwKKyAgICAgICAgLy8gbm90aGluZyBpcyBh
ZGRlZCB0byB0aGUgYnVpbGRlci4KKyAgICAgICAgdm9pZCBBZGRQYWRkaW5nKGNoYXIgYywgaW50
IGNvdW50KSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsK
KyAgICAgICAgICAgICAgICBBZGRDaGFyYWN0ZXIoYyk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIC8vIEZpbmFsaXplIHRoZSBzdHJpbmcgYnkgMC10ZXJtaW5h
dGluZyBpdCBhbmQgcmV0dXJuaW5nIHRoZSBidWZmZXIuCisgICAgICAgIGNoYXIqIEZpbmFsaXpl
KCkgeworICAgICAgICAgICAgQVNTRVJUKCFpc19maW5hbGl6ZWQoKSAmJiBwb3NpdGlvbl8gPCBi
dWZmZXJfLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGJ1ZmZlcl9bcG9zaXRpb25fXSA9ICdcMCc7
CisgICAgICAgICAgICAvLyBNYWtlIHN1cmUgbm9ib2R5IG1hbmFnZWQgdG8gYWRkIGEgMC1jaGFy
YWN0ZXIgdG8gdGhlCisgICAgICAgICAgICAvLyBidWZmZXIgd2hpbGUgYnVpbGRpbmcgdGhlIHN0
cmluZy4KKyAgICAgICAgICAgIEFTU0VSVChzdHJsZW4oYnVmZmVyXy5zdGFydCgpKSA9PSBzdGF0
aWNfY2FzdDxzaXplX3Q+KHBvc2l0aW9uXykpOworICAgICAgICAgICAgcG9zaXRpb25fID0gLTE7
CisgICAgICAgICAgICBBU1NFUlQoaXNfZmluYWxpemVkKCkpOworICAgICAgICAgICAgcmV0dXJu
IGJ1ZmZlcl8uc3RhcnQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAg
ICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyXzsKKyAgICAgICAgaW50IHBvc2l0aW9uXzsKKyAgICAg
ICAgCisgICAgICAgIGJvb2wgaXNfZmluYWxpemVkKCkgY29uc3QgeyByZXR1cm4gcG9zaXRpb25f
IDwgMDsgfQorICAgICAgICAKKyAgICAgICAgRElTQUxMT1dfSU1QTElDSVRfQ09OU1RSVUNUT1JT
KFN0cmluZ0J1aWxkZXIpOworICAgIH07CisgICAgCisgICAgLy8gVGhlIHR5cGUtYmFzZWQgYWxp
YXNpbmcgcnVsZSBhbGxvd3MgdGhlIGNvbXBpbGVyIHRvIGFzc3VtZSB0aGF0IHBvaW50ZXJzIG9m
CisgICAgLy8gZGlmZmVyZW50IHR5cGVzIChmb3Igc29tZSBkZWZpbml0aW9uIG9mIGRpZmZlcmVu
dCkgbmV2ZXIgYWxpYXMgZWFjaCBvdGhlci4KKyAgICAvLyBUaHVzIHRoZSBmb2xsb3dpbmcgY29k
ZSBkb2VzIG5vdCB3b3JrOgorICAgIC8vCisgICAgLy8gZmxvYXQgZiA9IGZvbygpOworICAgIC8v
IGludCBmYml0cyA9ICooaW50KikoJmYpOworICAgIC8vCisgICAgLy8gVGhlIGNvbXBpbGVyICdr
bm93cycgdGhhdCB0aGUgaW50IHBvaW50ZXIgY2FuJ3QgcmVmZXIgdG8gZiBzaW5jZSB0aGUgdHlw
ZXMKKyAgICAvLyBkb24ndCBtYXRjaCwgc28gdGhlIGNvbXBpbGVyIG1heSBjYWNoZSBmIGluIGEg
cmVnaXN0ZXIsIGxlYXZpbmcgcmFuZG9tIGRhdGEKKyAgICAvLyBpbiBmYml0cy4gIFVzaW5nIEMr
KyBzdHlsZSBjYXN0cyBtYWtlcyBubyBkaWZmZXJlbmNlLCBob3dldmVyIGEgcG9pbnRlciB0bwor
ICAgIC8vIGNoYXIgZGF0YSBpcyBhc3N1bWVkIHRvIGFsaWFzIGFueSBvdGhlciBwb2ludGVyLiAg
VGhpcyBpcyB0aGUgJ21lbWNweQorICAgIC8vIGV4Y2VwdGlvbicuCisgICAgLy8KKyAgICAvLyBC
aXRfY2FzdCB1c2VzIHRoZSBtZW1jcHkgZXhjZXB0aW9uIHRvIG1vdmUgdGhlIGJpdHMgZnJvbSBh
IHZhcmlhYmxlIG9mIG9uZQorICAgIC8vIHR5cGUgb2YgYSB2YXJpYWJsZSBvZiBhbm90aGVyIHR5
cGUuICBPZiBjb3Vyc2UgdGhlIGVuZCByZXN1bHQgaXMgbGlrZWx5IHRvCisgICAgLy8gYmUgaW1w
bGVtZW50YXRpb24gZGVwZW5kZW50LiAgTW9zdCBjb21waWxlcnMgKGdjYy00LjIgYW5kIE1TVkMg
MjAwNSkKKyAgICAvLyB3aWxsIGNvbXBsZXRlbHkgb3B0aW1pemUgQml0Q2FzdCBhd2F5LgorICAg
IC8vCisgICAgLy8gVGhlcmUgaXMgYW4gYWRkaXRpb25hbCB1c2UgZm9yIEJpdENhc3QuCisgICAg
Ly8gUmVjZW50IGdjY3Mgd2lsbCB3YXJuIHdoZW4gdGhleSBzZWUgY2FzdHMgdGhhdCBtYXkgcmVz
dWx0IGluIGJyZWFrYWdlIGR1ZSB0bworICAgIC8vIHRoZSB0eXBlLWJhc2VkIGFsaWFzaW5nIHJ1
bGUuICBJZiB5b3UgaGF2ZSBjaGVja2VkIHRoYXQgdGhlcmUgaXMgbm8gYnJlYWthZ2UKKyAgICAv
LyB5b3UgY2FuIHVzZSBCaXRDYXN0IHRvIGNhc3Qgb25lIHBvaW50ZXIgdHlwZSB0byBhbm90aGVy
LiAgVGhpcyBjb25mdXNlcyBnY2MKKyAgICAvLyBlbm91Z2ggdGhhdCBpdCBjYW4gbm8gbG9uZ2Vy
IHNlZSB0aGF0IHlvdSBoYXZlIGNhc3Qgb25lIHBvaW50ZXIgdHlwZSB0bworICAgIC8vIGFub3Ro
ZXIgdGh1cyBhdm9pZGluZyB0aGUgd2FybmluZy4KKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgRGVzdCwg
Y2xhc3MgU291cmNlPgorICAgIGlubGluZSBEZXN0IEJpdENhc3QoY29uc3QgU291cmNlJiBzb3Vy
Y2UpIHsKKyAgICAgICAgLy8gQ29tcGlsZSB0aW1lIGFzc2VydGlvbjogc2l6ZW9mKERlc3QpID09
IHNpemVvZihTb3VyY2UpCisgICAgICAgIC8vIEEgY29tcGlsZSBlcnJvciBoZXJlIG1lYW5zIHlv
dXIgRGVzdCBhbmQgU291cmNlIGhhdmUgZGlmZmVyZW50IHNpemVzLgorICAgICAgICB0eXBlZGVm
IGNoYXIgVmVyaWZ5U2l6ZXNBcmVFcXVhbFtzaXplb2YoRGVzdCkgPT0gc2l6ZW9mKFNvdXJjZSkg
PyAxIDogLTFdOworICAgICAgICAKKyAgICAgICAgRGVzdCBkZXN0OworICAgICAgICBtZW1jcHko
JmRlc3QsICZzb3VyY2UsIHNpemVvZihkZXN0KSk7CisgICAgICAgIHJldHVybiBkZXN0OworICAg
IH0KKyAgICAKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgRGVzdCwgY2xhc3MgU291cmNlPgorICAgIGlu
bGluZSBEZXN0IEJpdENhc3QoU291cmNlKiBzb3VyY2UpIHsKKyAgICAgICAgcmV0dXJuIEJpdENh
c3Q8RGVzdD4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHNvdXJjZSkpOworICAgIH0KKyAg
ICAKK30gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbgorCit9IC8vIG5hbWVzcGFjZSBX
VEYKKworI2VuZGlmICAvLyBET1VCTEVfQ09OVkVSU0lPTl9VVElMU19IXwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi93dGYucHJpIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi93dGYucHJpCmluZGV4IDVlNDhmOWE1MDFkYzM5ZTFmNWFjNjI4Yjk1MTM5OWU2ODZiMzU0
NzAuLjY2MDYxODI0NWIyZjNmM2Q2Y2QyYTQ5ZGE0NjNhNGE2NWQ4ZGE4MzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvd3RmLnByaQorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL3d0Zi5wcmkKQEAgLTYsOCArNiwxNiBAQCBTT1VSQ0VTICs9IFwKICAgICB3dGYv
Q3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuY3BwIFwKICAgICB3dGYvQ3VycmVudFRpbWUu
Y3BwIFwKICAgICB3dGYvRGF0ZU1hdGguY3BwIFwKLSAgICB3dGYvZHRvYS5jcHAgXAogICAgIHd0
Zi9EZWNpbWFsTnVtYmVyLmNwcCBcCisgICAgd3RmL2R0b2EuY3BwIFwKKyAgICB3dGYvZHRvYS9i
aWdudW0tZHRvYS5jYyBcCisgICAgd3RmL2R0b2EvYmlnbnVtLmNjIFwKKyAgICB3dGYvZHRvYS9j
YWNoZWQtcG93ZXJzLmNjIFwKKyAgICB3dGYvZHRvYS9kaXktZnAuY2MgXAorICAgIHd0Zi9kdG9h
L2RvdWJsZS1jb252ZXJzaW9uLmNjIFwKKyAgICB3dGYvZHRvYS9mYXN0LWR0b2EuY2MgXAorICAg
IHd0Zi9kdG9hL2ZpeGVkLWR0b2EuY2MgXAorICAgIHd0Zi9kdG9hL3N0cnRvZC5jYyBcCiAgICAg
d3RmL0Zhc3RNYWxsb2MuY3BwIFwKICAgICB3dGYvZ29iamVjdC9HT3duUHRyLmNwcCBcCiAgICAg
d3RmL2dvYmplY3QvR1JlZlB0ci5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDY1ODVjNTRmMzRmMTVmODli
ZWVlMjY4NDY3MjAyYmQ4YjYwNmVmNTMuLjc4YTg4NDkzOTBhMjZkNGE1MTBhYTI4MWMyNWM0ZDdh
YmEwNjRlZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAxMS0wOC0yNCAgTWFyayBI
YWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIEluY29ycG9yYXRl
IG5ld2VyLCBmYXN0ZXIgZHRvYSBsaWJyYXJ5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02NjM0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAgICBBZGRlZCBuZXcgZHRv
YSBsaWJyYXJ5IGF0IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9kb3VibGUtY29udmVyc2lvbi8u
CisgICAgICAgIFJlcGxhY2VkIG9sZCBjYWxsIHRvIGR0b2EuICBUaGUgbmV3IGxpYnJhcnkgaXMg
bXVjaCBmYXN0ZXIgdGhhbiB0aGUgb2xkIG9uZS4KKyAgICAgICAgV2Ugc3RpbGwgdXNlIHRoZSBv
bGQgZHRvYSBmb3Igc29tZSBzdHVmZiBpbiBXZWJDb3JlIGFzIHdlbGwgYXMgdGhlIG9sZCBzdHJ0
b2QsIAorICAgICAgICBidXQgd2UgY2FuIHBoYXNlIHRoZXNlIG91dCBldmVudHVhbGx5IGFzIHdl
bGwuCisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYvZHRvYS9kb3VibGUtY29udmVy
c2lvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9jb3B5Rm9yd2FyZGluZ0hl
YWRlcnMuY21kOgorICAgICAgICAqIGNzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpmb3JtYXROdW1iZXIpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxQYXJz
ZXJJZGlvbXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXplRm9yTnVtYmVyVHlwZSk6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JCYXNpY1ZhbHVlOjp3cml0ZUpTT04pOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpzZXJpYWxpemVk
KToKKwogMjAxMS0wOC0yNCAgVG9tbXkgV2lkZW5mbHljaHQgIDx0b21teXdAZ29vZ2xlLmNvbT4K
IAogICAgICAgICBNZWRpYVN0cmVhbSBBUEk6IGFkZCBjcmVhdGVPYmplY3RVUkwgZnVuY3Rpb25h
bGl0eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL2R0
b2EvZG91YmxlLWNvbnZlcnNpb24uaCBiL1NvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJz
L3d0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODZmYjEyNzg5MzRkYjA3
ZGMzM2ZmNTIxOTIzZTFjYTM5ZmU2NDUwMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmgKQEAgLTAs
MCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX2RvdWJsZV9jb252ZXJzaW9uX2gKKyNkZWZp
bmUgV2ViQ29yZV9GV0RfZG91YmxlX2NvbnZlcnNpb25faAorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL2RvdWJsZS1jb252ZXJzaW9uLmg+CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL2NvcHlGb3J3YXJkaW5nSGVhZGVycy5jbWQgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9jb3B5Rm9yd2FyZGluZ0hlYWRlcnMuY21kCmluZGV4IGRhZDVh
ZGYzOTJiNmE3ZDc0N2U5ODE2NzFiZjMyOTNhMzllODlmZjAuLjIyNGNlMDMyODYxZjAwYWY5NTBj
MWI1ZTJlMmE4OGMzZTg5YzZkYTkgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL2NvcHlGb3J3YXJkaW5nSGVhZGVycy5jbWQKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovY29weUZvcndhcmRpbmdIZWFkZXJzLmNtZApAQCAtMTAsNiArMTAsNyBAQCBt
a2RpciAyPk5VTCAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVcaW5jbHVkZVxXZWJDb3JlXEZvcndh
cmRpbmdIZWFkZXJzXG1hc20iCiBta2RpciAyPk5VTCAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVc
aW5jbHVkZVxXZWJDb3JlXEZvcndhcmRpbmdIZWFkZXJzXHByb2ZpbGVyIgogbWtkaXIgMj5OVUwg
IiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGluY2x1ZGVcV2ViQ29yZVxGb3J3YXJkaW5nSGVhZGVy
c1xoZWFwIgogbWtkaXIgMj5OVUwgIiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGluY2x1ZGVcV2Vi
Q29yZVxGb3J3YXJkaW5nSGVhZGVyc1x3dGYiCitta2RpciAyPk5VTCAiJUNPTkZJR1VSQVRJT05C
VUlMRERJUiVcaW5jbHVkZVxXZWJDb3JlXEZvcndhcmRpbmdIZWFkZXJzXHd0ZlxkdG9hIgogbWtk
aXIgMj5OVUwgIiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGluY2x1ZGVcV2ViQ29yZVxGb3J3YXJk
aW5nSGVhZGVyc1x3dGZcdGV4dCIKIG1rZGlyIDI+TlVMICIlQ09ORklHVVJBVElPTkJVSUxERElS
JVxpbmNsdWRlXFdlYkNvcmVcRm9yd2FyZGluZ0hlYWRlcnNcd3RmXHVuaWNvZGUiCiBta2RpciAy
Pk5VTCAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVcaW5jbHVkZVxXZWJDb3JlXEZvcndhcmRpbmdI
ZWFkZXJzXHd0Zlx1bmljb2RlXGljdSIKQEAgLTgxLDYgKzgyLDcgQEAgeGNvcHkgL3kgL2QgIiVQ
cm9qZWN0RGlyJS4uXEZvcndhcmRpbmdIZWFkZXJzXG1hc21cKi5oIiAiJUNPTkZJR1VSQVRJT05C
VUlMRERJUiUKIHhjb3B5IC95IC9kICIlUHJvamVjdERpciUuLlxGb3J3YXJkaW5nSGVhZGVyc1xw
cm9maWxlclwqLmgiICIlQ09ORklHVVJBVElPTkJVSUxERElSJVxpbmNsdWRlXFdlYkNvcmVcRm9y
d2FyZGluZ0hlYWRlcnNccHJvZmlsZXIiCiB4Y29weSAveSAvZCAiJVByb2plY3REaXIlLi5cRm9y
d2FyZGluZ0hlYWRlcnNcaGVhcFwqLmgiICIlQ09ORklHVVJBVElPTkJVSUxERElSJVxpbmNsdWRl
XFdlYkNvcmVcRm9yd2FyZGluZ0hlYWRlcnNcaGVhcCIKIHhjb3B5IC95IC9kICIlUHJvamVjdERp
ciUuLlxGb3J3YXJkaW5nSGVhZGVyc1x3dGZcKi5oIiAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVc
aW5jbHVkZVxXZWJDb3JlXEZvcndhcmRpbmdIZWFkZXJzXHd0ZiIKK3hjb3B5IC95IC9kICIlUHJv
amVjdERpciUuLlxGb3J3YXJkaW5nSGVhZGVyc1x3dGZcZHRvYVwqLmgiICIlQ09ORklHVVJBVElP
TkJVSUxERElSJVxpbmNsdWRlXFdlYkNvcmVcRm9yd2FyZGluZ0hlYWRlcnNcd3RmXGR0b2EiCiB4
Y29weSAveSAvZCAiJVByb2plY3REaXIlLi5cRm9yd2FyZGluZ0hlYWRlcnNcd3RmXHRleHRcKi5o
IiAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVcaW5jbHVkZVxXZWJDb3JlXEZvcndhcmRpbmdIZWFk
ZXJzXHd0Zlx0ZXh0IgogeGNvcHkgL3kgL2QgIiVQcm9qZWN0RGlyJS4uXEZvcndhcmRpbmdIZWFk
ZXJzXHd0Zlx1bmljb2RlXCouaCIgIiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGluY2x1ZGVcV2Vi
Q29yZVxGb3J3YXJkaW5nSGVhZGVyc1x3dGZcdW5pY29kZSIKIHhjb3B5IC95IC9kICIlUHJvamVj
dERpciUuLlxGb3J3YXJkaW5nSGVhZGVyc1x3dGZcdW5pY29kZVxpY3VcKi5oIiAiJUNPTkZJR1VS
QVRJT05CVUlMRERJUiVcaW5jbHVkZVxXZWJDb3JlXEZvcndhcmRpbmdIZWFkZXJzXHd0Zlx1bmlj
b2RlXGljdSIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCmluZGV4IDk4
MTZkYTU3NzA3MWUyNzQ2MGJiMzQ4YTI2YTI5MGU1N2E5YzQ2NDguLmI3MDEzODNjOTYyMmZiNjYz
NjQyZmIwOWIwMzZkN2UzNGYwY2MxYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQcmltaXRpdmVWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2
ZVZhbHVlLmNwcApAQCAtNjA5LDcgKzYwOSw3IEBAIGludCBDU1NQcmltaXRpdmVWYWx1ZTo6Z2V0
SWRlbnQoKSBjb25zdAogc3RhdGljIFN0cmluZyBmb3JtYXROdW1iZXIoZG91YmxlIG51bWJlcikK
IHsKICAgICBEZWNpbWFsTnVtYmVyIGRlY2ltYWwobnVtYmVyKTsKLSAgICAKKwogICAgIFN0cmlu
Z0J1ZmZlciBidWZmZXIoZGVjaW1hbC5idWZmZXJMZW5ndGhGb3JTdHJpbmdEZWNpbWFsKCkpOwog
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGRlY2ltYWwudG9TdHJpbmdEZWNpbWFsKGJ1ZmZlci5jaGFy
YWN0ZXJzKCksIGJ1ZmZlci5sZW5ndGgoKSk7CiAgICAgQVNTRVJUX1VOVVNFRChsZW5ndGgsIGxl
bmd0aCA9PSBidWZmZXIubGVuZ3RoKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MUGFyc2VySWRpb21zLmNwcAppbmRleCAwNThiYjkzMzljZmZmNWQxODNlNDlmN2QyNTg4
MjU4NzMwMjBjYTEyLi4wMzYyMjFiMjFiMTZmOGY1MmFlMjU3MmZiZDM0NjA5ODk2YjdhYTI2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcApA
QCAtNjMsOCArNjMsNyBAQCBTdHJpbmcgc2VyaWFsaXplRm9yTnVtYmVyVHlwZShkb3VibGUgbnVt
YmVyKQogICAgIC8vIEFjY29yZGluZyB0byBIVE1MNSwgInRoZSBiZXN0IHJlcHJlc2VudGF0aW9u
IG9mIHRoZSBudW1iZXIgbiBhcyBhIGZsb2F0aW5nCiAgICAgLy8gcG9pbnQgbnVtYmVyIiBpcyBh
IHN0cmluZyBwcm9kdWNlZCBieSBhcHBseWluZyBUb1N0cmluZygpIHRvIG4uCiAgICAgTnVtYmVy
VG9TdHJpbmdCdWZmZXIgYnVmZmVyOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IG51bWJlclRvU3Ry
aW5nKG51bWJlciwgYnVmZmVyKTsKLSAgICByZXR1cm4gU3RyaW5nKGJ1ZmZlciwgbGVuZ3RoKTsK
KyAgICByZXR1cm4gU3RyaW5nKG51bWJlclRvU3RyaW5nKG51bWJlciwgYnVmZmVyKSk7CiB9CiAK
IGJvb2wgcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGRv
dWJsZSogcmVzdWx0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclZhbHVlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVz
LmNwcAppbmRleCA5MmJhYmQ2N2U5OGQ0YWM1OTBjMzU1MWJhNGFmODZhZjk5NzQ4YmY2Li4xYmQ4
N2VjYjhhZGEyYjI2MmQ0YzdkZDU2MmIzYTZiNGQ4MTBlMTAyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2lmIEVO
QUJMRShJTlNQRUNUT1IpCiAKICNpbmNsdWRlIDx3dGYvRGVjaW1hbE51bWJlci5oPgorI2luY2x1
ZGUgPHd0Zi9kdG9hLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjI1LDcgKzYyNiw3
IEBAIHZvaWQgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6d3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91
dHB1dCkgY29uc3QKICAgICAgICAgZWxzZQogICAgICAgICAgICAgb3V0cHV0LT5hcHBlbmQoZmFs
c2VTdHJpbmcsIDUpOwogICAgIH0gZWxzZSBpZiAodHlwZSgpID09IFR5cGVOdW1iZXIpIHsKLSAg
ICAgICAgTnVtYmVyVG9TdHJpbmdCdWZmZXIgYnVmZmVyOworICAgICAgICBOdW1iZXJUb1VTdHJp
bmdCdWZmZXIgYnVmZmVyOwogICAgICAgICBpZiAoIWlzZmluaXRlKG1fZG91YmxlVmFsdWUpKSB7
CiAgICAgICAgICAgICBvdXRwdXQtPmFwcGVuZChudWxsU3RyaW5nLCA0KTsKICAgICAgICAgICAg
IHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAppbmRl
eCA0OGY3NTIwMzAxNmJmN2Y1MDZjODE4ZTRjNDFhODczZGZmM2NlYjhiLi4yMmY4MTY4NWEwMGQ4
MzY0MjM1YzM0ZDJjN2RmNTI1MWE2N2IwNzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3IuY3BwCkBAIC0yMDksNyArMjA5LDcgQEAgU3RyaW5nIENvbG9yOjpzZXJp
YWxpemVkKCkgY29uc3QKICAgICBpZiAoIWFscGhhKCkpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQo
JzAnKTsKICAgICBlbHNlIHsKLSAgICAgICAgTnVtYmVyVG9TdHJpbmdCdWZmZXIgYnVmZmVyOwor
ICAgICAgICBOdW1iZXJUb1VTdHJpbmdCdWZmZXIgYnVmZmVyOwogICAgICAgICB1bnNpZ25lZCBs
ZW5ndGggPSBEZWNpbWFsTnVtYmVyKGFscGhhKCkgLyAyNTUuMCkudG9TdHJpbmdEZWNpbWFsKGJ1
ZmZlciwgV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCk7CiAgICAgICAgIHJlc3VsdC5h
cHBlbmQoYnVmZmVyLCBsZW5ndGgpOwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105227</attachid>
            <date>2011-08-25 11:40:37 -0700</date>
            <delta_ts>2011-08-25 15:40:53 -0700</delta_ts>
            <desc>Fixing chromium again</desc>
            <filename>bug-66346-20110825114037.patch</filename>
            <type>text/plain</type>
            <size>328975</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM3MTQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGJi
YTQ4NzJjZWJiNmNmMTJjZTFjZjkyMmVmYmQyZDkwM2M5M2I5ZTUuLjAwZjgzZWUxZDY2MTA3Mzc1
NDc1OTI2YWJiM2RhNDAxZmVhZjZlMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDEyMCBAQAorMjAxMS0wOC0yNCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBw
bGUuY29tPgorCisgICAgICAgIEluY29ycG9yYXRlIG5ld2VyLCBmYXN0ZXIgZHRvYSBsaWJyYXJ5
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM0Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIG5l
dyBkdG9hIGxpYnJhcnkgYXQgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2RvdWJsZS1jb252ZXJz
aW9uLy4KKyAgICAgICAgUmVwbGFjZWQgb2xkIGNhbGwgdG8gZHRvYS4gIFRoZSBuZXcgbGlicmFy
eSBpcyBtdWNoIGZhc3RlciB0aGFuIHRoZSBvbGQgb25lLgorICAgICAgICBXZSBzdGlsbCB1c2Ug
dGhlIG9sZCBkdG9hIGZvciBzb21lIHN0dWZmIGluIFdlYkNvcmUgYXMgd2VsbCBhcyB0aGUgb2xk
IHN0cnRvZCwgCisgICAgICAgIGJ1dCB3ZSBjYW4gcGhhc2UgdGhlc2Ugb3V0IGV2ZW50dWFsbHkg
YXMgd2VsbC4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2
YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmd5cGk6CisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRl
ZjoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvY29weS1m
aWxlcy5jbWQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwOgorICAgICAg
ICAoSlNDOjppbml0aWFsaXplVGhyZWFkaW5nT25jZSk6CisgICAgICAgICogcnVudGltZS9OdW1i
ZXJQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1bmNUb0V4cG9uZW50
aWFsKToKKyAgICAgICAgKEpTQzo6bnVtYmVyUHJvdG9GdW5jVG9GaXhlZCk6CisgICAgICAgIChK
U0M6Om51bWJlclByb3RvRnVuY1RvUHJlY2lzaW9uKToKKyAgICAgICAgKiBydW50aW1lL1VTdHJp
bmcuY3BwOgorICAgICAgICAoSlNDOjpVU3RyaW5nOjpudW1iZXIpOgorICAgICAgICAqIHd0Zi9D
TWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvZHRvYS5jcHA6CisgICAgICAgIChXVEY6OmR0
b2EpOgorICAgICAgICAqIHd0Zi9kdG9hLmg6CisgICAgICAgICogd3RmL2R0b2EvQ09QWUlORzog
QWRkZWQuCisgICAgICAgICogd3RmL2R0b2EvTElDRU5TRTogQWRkZWQuCisgICAgICAgICogd3Rm
L2R0b2EvUkVBRE1FOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9iaWdudW0tZHRvYS5jYzog
QWRkZWQuCisgICAgICAgICogd3RmL2R0b2EvYmlnbnVtLWR0b2EuaDogQWRkZWQuCisgICAgICAg
ICogd3RmL2R0b2EvYmlnbnVtLmNjOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9iaWdudW0u
aDogQWRkZWQuCisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpCaWdudW06OlRpbWVz
MTApOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6QmlnbnVtOjpFcXVhbCk6Cisg
ICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpCaWdudW06Okxlc3NFcXVhbCk6CisgICAg
ICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpCaWdudW06Okxlc3MpOgorICAgICAgICAoV1RG
Ojpkb3VibGVfY29udmVyc2lvbjo6QmlnbnVtOjpQbHVzRXF1YWwpOgorICAgICAgICAoV1RGOjpk
b3VibGVfY29udmVyc2lvbjo6QmlnbnVtOjpQbHVzTGVzc0VxdWFsKToKKyAgICAgICAgKFdURjo6
ZG91YmxlX2NvbnZlcnNpb246OkJpZ251bTo6UGx1c0xlc3MpOgorICAgICAgICAoV1RGOjpkb3Vi
bGVfY29udmVyc2lvbjo6QmlnbnVtOjpFbnN1cmVDYXBhY2l0eSk6CisgICAgICAgIChXVEY6OmRv
dWJsZV9jb252ZXJzaW9uOjpCaWdudW06OkJpZ2l0TGVuZ3RoKToKKyAgICAgICAgKiB3dGYvZHRv
YS9jYWNoZWQtcG93ZXJzLmNjOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9jYWNoZWQtcG93
ZXJzLmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9kdG9hL2RpeS1mcC5jYzogQWRkZWQuCisgICAg
ICAgICogd3RmL2R0b2EvZGl5LWZwLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpkb3VibGVfY29u
dmVyc2lvbjo6RGl5RnA6OkRpeUZwKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246
OkRpeUZwOjpTdWJ0cmFjdCk6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpEaXlG
cDo6TWludXMpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RGl5RnA6OlRpbWVz
KToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246OkRpeUZwOjpOb3JtYWxpemUpOgor
ICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RGl5RnA6OmYpOgorICAgICAgICAoV1RG
Ojpkb3VibGVfY29udmVyc2lvbjo6RGl5RnA6OmUpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29u
dmVyc2lvbjo6RGl5RnA6OnNldF9mKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246
OkRpeUZwOjpzZXRfZSk6CisgICAgICAgICogd3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uY2M6
IEFkZGVkLgorICAgICAgICAqIHd0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmg6IEFkZGVkLgor
ICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6
OkRvdWJsZVRvU3RyaW5nQ29udmVydGVyKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNp
b246OlN0cmluZ1RvRG91YmxlQ29udmVydGVyOjpTdHJpbmdUb0RvdWJsZUNvbnZlcnRlcik6Cisg
ICAgICAgICogd3RmL2R0b2EvZG91YmxlLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpkb3VibGVf
Y29udmVyc2lvbjo6ZG91YmxlX3RvX3VpbnQ2NCk6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252
ZXJzaW9uOjp1aW50NjRfdG9fZG91YmxlKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNp
b246OkRvdWJsZTo6RG91YmxlKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246OkRv
dWJsZTo6QXNEaXlGcCk6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGU6
OkFzTm9ybWFsaXplZERpeUZwKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246OkRv
dWJsZTo6QXNVaW50NjQpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91Ymxl
OjpOZXh0RG91YmxlKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZTo6
RXhwb25lbnQpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpTaWdu
aWZpY2FuZCk6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGU6OklzRGVu
b3JtYWwpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpJc1NwZWNp
YWwpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpJc05hbik6Cisg
ICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGU6OklzSW5maW5pdGUpOgorICAg
ICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpTaWduKToKKyAgICAgICAgKFdU
Rjo6ZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZTo6VXBwZXJCb3VuZGFyeSk6CisgICAgICAgIChX
VEY6OmRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGU6Ok5vcm1hbGl6ZWRCb3VuZGFyaWVzKToKKyAg
ICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZTo6dmFsdWUpOgorICAgICAgICAo
V1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpTaWduaWZpY2FuZFNpemVGb3JPcmRlck9m
TWFnbml0dWRlKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZTo6SW5m
aW5pdHkpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpOYU4pOgor
ICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpEaXlGcFRvVWludDY0KToK
KyAgICAgICAgKiB3dGYvZHRvYS9mYXN0LWR0b2EuY2M6IEFkZGVkLgorICAgICAgICAqIHd0Zi9k
dG9hL2Zhc3QtZHRvYS5oOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9maXhlZC1kdG9hLmNj
OiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9maXhlZC1kdG9hLmg6IEFkZGVkLgorICAgICAg
ICAqIHd0Zi9kdG9hL3N0cnRvZC5jYzogQWRkZWQuCisgICAgICAgICogd3RmL2R0b2Evc3RydG9k
Lmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9kdG9hL3V0aWxzLmg6IEFkZGVkLgorICAgICAgICAo
V1RGOjpkb3VibGVfY29udmVyc2lvbjo6TWF4KToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZl
cnNpb246Ok1pbik6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpTdHJMZW5ndGgp
OgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6VmVjdG9yOjpWZWN0b3IpOgorICAg
ICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6VmVjdG9yOjpTdWJWZWN0b3IpOgorICAgICAg
ICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6VmVjdG9yOjpsZW5ndGgpOgorICAgICAgICAoV1RG
Ojpkb3VibGVfY29udmVyc2lvbjo6VmVjdG9yOjppc19lbXB0eSk6CisgICAgICAgIChXVEY6OmRv
dWJsZV9jb252ZXJzaW9uOjpWZWN0b3I6OnN0YXJ0KToKKyAgICAgICAgKFdURjo6ZG91YmxlX2Nv
bnZlcnNpb246OlZlY3Rvcjo6b3BlcmF0b3JbXSk6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252
ZXJzaW9uOjpWZWN0b3I6OmZpcnN0KToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246
OlZlY3Rvcjo6bGFzdCk6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdC
dWlsZGVyOjpTdHJpbmdCdWlsZGVyKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246
OlN0cmluZ0J1aWxkZXI6On5TdHJpbmdCdWlsZGVyKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2Nv
bnZlcnNpb246OlN0cmluZ0J1aWxkZXI6OnNpemUpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29u
dmVyc2lvbjo6U3RyaW5nQnVpbGRlcjo6cG9zaXRpb24pOgorICAgICAgICAoV1RGOjpkb3VibGVf
Y29udmVyc2lvbjo6U3RyaW5nQnVpbGRlcjo6UmVzZXQpOgorICAgICAgICAoV1RGOjpkb3VibGVf
Y29udmVyc2lvbjo6U3RyaW5nQnVpbGRlcjo6QWRkQ2hhcmFjdGVyKToKKyAgICAgICAgKFdURjo6
ZG91YmxlX2NvbnZlcnNpb246OlN0cmluZ0J1aWxkZXI6OkFkZFN0cmluZyk6CisgICAgICAgIChX
VEY6OmRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdCdWlsZGVyOjpBZGRTdWJzdHJpbmcpOgorICAg
ICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6U3RyaW5nQnVpbGRlcjo6QWRkUGFkZGluZyk6
CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdCdWlsZGVyOjpGaW5hbGl6
ZSk6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdCdWlsZGVyOjppc19m
aW5hbGl6ZWQpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6Qml0Q2FzdCk6Cisg
ICAgICAgICogd3RmL3d0Zi5wcmk6CisKIDIwMTEtMDgtMjQgIEZpbGlwIFBpemxvICA8ZnBpemxv
QGFwcGxlLmNvbT4KIAogICAgICAgICBFcnJvckluc3RhbmNlOjpjcmVhdGUgc29tZXRpbWVzIGhh
cyB0d28gaGVhcCBvYmplY3QgY29uc3RydWN0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQppbmRleCA5NDE0MzU0ODllOGJlYmUzYmMxMWM0ZGVjNmU4Nzc1YjE4
MjBlZDU4Li5iYzE5MTBhODM3ZmFkOTg3Nzg1OGFmZWVkNTY4YzNhOWIyOWVmNzlhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNDY1LDkgKzQ2NSwyNyBA
QCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L0N1cnJlbnRUaW1lLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGF0ZU1hdGguY3Bw
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RhdGVNYXRoLmggXAotCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvRGVjaW1hbE51bWJlci5oIFwKLQlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL0RlY2ltYWxOdW1iZXIuY3BwIFwKLQlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RlY29k
ZXIuaCBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EZWNpbWFsTnVtYmVyLmNwcCBc
CisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EZWNpbWFsTnVtYmVyLmggXAorICAgIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9iaWdudW0tZHRvYS5jYyBcCisgICAgU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS5jYyBcCisgICAgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9kdG9hL2NhY2hlZC1wb3dlcnMuY2MgXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvZHRvYS9kaXktZnAuY2MgXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
ZHRvYS9kb3VibGUtY29udmVyc2lvbi5jYyBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9kdG9hL2Zhc3QtZHRvYS5jYyBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9h
L2ZpeGVkLWR0b2EuY2MgXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9zdHJ0
b2QuY2MgXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9iaWdudW0tZHRvYS5o
IFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvYmlnbnVtLmggXAorICAgIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmggXAorICAgIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kaXktZnAuaCBcCisgICAgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmggXAorICAgIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvZHRvYS9kb3VibGUuaCBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9kdG9hL2Zhc3QtZHRvYS5oIFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2Ev
Zml4ZWQtZHRvYS5oIFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2Evc3RydG9k
LmggXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS91dGlscy5oIFwKKyAgICBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RlY29kZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9EZXF1ZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Rpc2FsbG93Q1R5
cGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Eb3VibHlMaW5rZWRMaXN0LmggXApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKaW5kZXggM2QwZWQ5N2NiODg2
NzQzZDgzNTE0MDAyNmIwNmM2ZDUzMTNlMzA3Yi4uYWE3NGEyOGFlMWQ5MmViMjViN2ZiZDEyYWNm
MTlhNGQ4MzBjNDE5ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLmV4cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhw
CkBAIC0zODUsOCArMzg1LDYgQEAgX19aTjNXVEYxMU9TQWxsb2NhdG9yMTZyZXNlcnZlQW5kQ29t
bWl0RW1OUzBfNVVzYWdlRWJiYgogX19aTjNXVEYxMU9TQWxsb2NhdG9yMThyZWxlYXNlRGVjb21t
aXR0ZWRFUHZtCiBfX1pOM1dURjExY29tbWVudEF0b21FCiBfX1pOM1dURjExY3VycmVudFRpbWVF
dgotX19aTjNXVEYxMWR0b2FSb3VuZERQRVBjZGlSYlJpUmoKLV9fWk4zV1RGMTFkdG9hUm91bmRT
RkVQY2RpUmJSaVJqCiBfX1pOM1dURjExZW1wdHlTdHJpbmdFdgogX19aTjNXVEYxMWZhc3RSZWFs
bG9jRVB2bQogX19aTjNXVEYxMkF0b21pY1N0cmluZzExYWRkU2xvd0Nhc2VFUE5TXzEwU3RyaW5n
SW1wbEUKQEAgLTQxNSw3ICs0MTMsNyBAQCBfX1pOM1dURjEzY3VycmVudFRocmVhZEV2CiBfX1pO
M1dURjEzdHJ5RmFzdENhbGxvY0VtbQogX19aTjNXVEYxM3RyeUZhc3RNYWxsb2NFbQogX19aTjNX
VEYxNGZhc3RNYWxsb2NTaXplRVBLdgotX19aTjNXVEYxNG51bWJlclRvU3RyaW5nRWRQdAorX19a
TjNXVEYxNG51bWJlclRvU3RyaW5nRWRQYwogX19aTjNXVEYxNHRyeUZhc3RSZWFsbG9jRVB2bQog
X19aTjNXVEYxNVRocmVhZENvbmRpdGlvbjR3YWl0RVJOU181TXV0ZXhFCiBfX1pOM1dURjE1VGhy
ZWFkQ29uZGl0aW9uNnNpZ25hbEV2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUuZ3lwaSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5neXBpCmluZGV4IDYxMjA0OTJlMjkyODQ2MjkzYjI1MzgxM2MyOThkNDFhOGJmZmIzNGQuLmZh
OWQzMWUyYmRlMDliZmYwMDM0YjM2YzNhNGQ5NWEyYTFiODhkMzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCkBAIC0yMTcsNiArMjE3LDE2IEBACiAgICAgICAg
ICAgICAnd3RmL1ZlY3RvclRyYWl0cy5oJywKICAgICAgICAgICAgICd3dGYvV1RGVGhyZWFkRGF0
YS5oJywKICAgICAgICAgICAgICd3dGYvZHRvYS5oJywKKyAgICAgICAgICAgICd3dGYvZHRvYS9i
aWdudW0tZHRvYS5oJywKKyAgICAgICAgICAgICd3dGYvZHRvYS9iaWdudW0uaCcsCisgICAgICAg
ICAgICAnd3RmL2R0b2EvY2FjaGVkLXBvd2Vycy5oJywKKyAgICAgICAgICAgICd3dGYvZHRvYS9k
aXktZnAuaCcsCisgICAgICAgICAgICAnd3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uaCcsCisg
ICAgICAgICAgICAnd3RmL2R0b2EvZG91YmxlLmgnLAorICAgICAgICAgICAgJ3d0Zi9kdG9hL2Zh
c3QtZHRvYS5oJywKKyAgICAgICAgICAgICd3dGYvZHRvYS9maXhlZC1kdG9hLmgnLAorICAgICAg
ICAgICAgJ3d0Zi9kdG9hL3N0cnRvZC5oJywKKyAgICAgICAgICAgICd3dGYvZHRvYS91dGlscy5o
JywKICAgICAgICAgICAgICd3dGYvdGV4dC9BdG9taWNTdHJpbmcuaCcsCiAgICAgICAgICAgICAn
d3RmL3RleHQvQXRvbWljU3RyaW5nSGFzaC5oJywKICAgICAgICAgICAgICd3dGYvdGV4dC9BdG9t
aWNTdHJpbmdJbXBsLmgnLApAQCAtNjMxLDYgKzY0MSwxNCBAQAogICAgICAgICAgICAgJ3d0Zi9j
aHJvbWl1bS9DaHJvbWl1bVRocmVhZGluZy5oJywKICAgICAgICAgICAgICd3dGYvY2hyb21pdW0v
TWFpblRocmVhZENocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAnd3RmL2R0b2EuY3BwJywKKyAg
ICAgICAgICAgICd3dGYvZHRvYS9iaWdudW0tZHRvYS5jYycsCisgICAgICAgICAgICAnd3RmL2R0
b2EvYmlnbnVtLmNjJywKKyAgICAgICAgICAgICd3dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmNjJywK
KyAgICAgICAgICAgICd3dGYvZHRvYS9kaXktZnAuY2MnLAorICAgICAgICAgICAgJ3d0Zi9kdG9h
L2RvdWJsZS1jb252ZXJzaW9uLmNjJywKKyAgICAgICAgICAgICd3dGYvZHRvYS9mYXN0LWR0b2Eu
Y2MnLAorICAgICAgICAgICAgJ3d0Zi9kdG9hL2ZpeGVkLWR0b2EuY2MnLAorICAgICAgICAgICAg
J3d0Zi9kdG9hL3N0cnRvZC5jYycsCiAgICAgICAgICAgICAnd3RmL2VmbC9NYWluVGhyZWFkRWZs
LmNwcCcsCiAgICAgICAgICAgICAnd3RmL2dvYmplY3QvR093blB0ci5jcHAnLAogICAgICAgICAg
ICAgJ3d0Zi9nb2JqZWN0L0dPd25QdHIuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LmRlZiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCmluZGV4IGFkMWYyNDQ3ZGE5MzcyYzlkNjBiMGJl
ODI3OWUzZGE1YjRiMzcyNGYuLjYwMGE2MWE5NDFkNDBiNjIwMDk0Njg1MTQ2MTEzODU5NTg2NTkz
YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUuZGVmCkBAIC00MSw2ICs0MSwxMSBAQCBFWFBPUlRTCiAgICAgPz8xV2Vha0hhbmRsZU93bmVy
QEpTQ0BAVUFFQFhaCiAgICAgPz84SlNDQEBZQV9OQUJWVVN0cmluZ0AwQDBAWgogICAgID8/OFdU
RkBAWUFfTkFCVkNTdHJpbmdAMEAwQFoKKyAgICA/RWNtYVNjcmlwdENvbnZlcnRlckBEb3VibGVU
b1N0cmluZ0NvbnZlcnRlckBkb3VibGVfY29udmVyc2lvbkBXVEZAQFNBQUJWMTIzQFhaCisgICAg
P1RvRXhwb25lbnRpYWxARG91YmxlVG9TdHJpbmdDb252ZXJ0ZXJAZG91YmxlX2NvbnZlcnNpb25A
V1RGQEBRQkVfTk5IUEFWU3RyaW5nQnVpbGRlckAyM0BAWgorICAgID9Ub0ZpeGVkQERvdWJsZVRv
U3RyaW5nQ29udmVydGVyQGRvdWJsZV9jb252ZXJzaW9uQFdURkBAUUJFX05OSFBBVlN0cmluZ0J1
aWxkZXJAMjNAQFoKKyAgICA/VG9QcmVjaXNpb25ARG91YmxlVG9TdHJpbmdDb252ZXJ0ZXJAZG91
YmxlX2NvbnZlcnNpb25AV1RGQEBRQkVfTk5IUEFWU3RyaW5nQnVpbGRlckAyM0BAWgorICAgID9U
b1Nob3J0ZXN0QERvdWJsZVRvU3RyaW5nQ29udmVydGVyQGRvdWJsZV9jb252ZXJzaW9uQFdURkBA
UUJFX05OUEFWU3RyaW5nQnVpbGRlckAyM0BAWgogICAgID9hYnNvbHV0ZVRpbWVUb1dhaXRUaW1l
b3V0SW50ZXJ2YWxAV1RGQEBZQUtOQFoKICAgICA/YWN0aXZpdHlDYWxsYmFja0BIZWFwQEpTQ0BA
UUFFUEFWR0NBY3Rpdml0eUNhbGxiYWNrQDJAWFoKICAgICA/YWRkQElkZW50aWZpZXJASlNDQEBT
QT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBXVEZAQEBXVEZAQFBBVkV4ZWNTdGF0ZUAyQFBC
REBaCkBAIC0yMTUsNiArMjIwLDcgQEAgRVhQT1JUUwogICAgID9pbmNyZW1lbnRAUmVmQ291bnRl
ZExlYWtDb3VudGVyQFdURkBAUUFFWFhaCiAgICAgP2luaXRAQXRvbWljU3RyaW5nQFdURkBAU0FY
WFoKICAgICA/aW5pdEBKU0dsb2JhbE9iamVjdEBKU0NAQEFBRVhQQVZKU09iamVjdEAyQEBaCisg
ICAgP2luaXRpYWxpemVAZG91YmxlX2NvbnZlcnNpb25AV1RGQEBZQVhYWgogICAgID9pbml0aWFs
aXplTWFpblRocmVhZEBXVEZAQFlBWFhaCiAgICAgP2luaXRpYWxpemVUaHJlYWRpbmdASlNDQEBZ
QVhYWgogICAgID9pbml0aWFsaXplVGhyZWFkaW5nQFdURkBAWUFYWFoKQEAgLTI1MCw3ICsyNTYs
NyBAQCBFWFBPUlRTCiAgICAgP251bWJlckBVU3RyaW5nQEpTQ0BAU0E/QVYxMkBIQFoKICAgICA/
bnVtYmVyQFVTdHJpbmdASlNDQEBTQT9BVjEyQElAWgogICAgID9udW1iZXJAVVN0cmluZ0BKU0NA
QFNBP0FWMTJATkBaCi0gICAgP251bWJlclRvU3RyaW5nQFdURkBAWUFJTlFBX1dAWgorICAgID9u
dW1iZXJUb1N0cmluZ0BXVEZAQFlBUEJETlFBREBaCiAgICAgP29iamVjdENvdW50QEhlYXBASlND
QEBRQUVJWFoKICAgICA/b2JqZWN0UHJvdG9GdW5jVG9TdHJpbmdASlNDQEBZSV9KUEFWRXhlY1N0
YXRlQDFAQFoKICAgICA/cGFyc2VEYXRlRnJvbU51bGxUZXJtaW5hdGVkQ2hhcmFjdGVyc0BXVEZA
QFlBTlBCREBaCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL2NvcHktZmlsZXMuY21kIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9jb3B5LWZpbGVzLmNt
ZAppbmRleCBlNDA3NWE0NWQ3NWFmOTA1ZjRhNDAzMDFmZjFjNjJmNWY3ZDliZDg4Li41NTEwMjFh
ZGU1MzFkNTRkMTY5M2ViOTBkZjNmMjFiZDU1MjIyNTNlIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL2NvcHktZmls
ZXMuY21kCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ov
SmF2YVNjcmlwdENvcmUvY29weS1maWxlcy5jbWQKQEAgLTQ2LDYgKzQ2LDcgQEAgZm9yICUlZCBp
biAoCiAgICAgcHJvZmlsZXIKICAgICBydW50aW1lCiAgICAgd3RmCisgICAgd3RmXGR0b2EKICAg
ICB3dGZcdGV4dAogICAgIHd0Zlx1bmljb2RlCiAgICAgd3RmXHVuaWNvZGVcaWN1CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGRmOGU4M2RiM2M4NGUyNzRmZTVlZGM3ZTQ2MjU5MzVh
YWVlNjI1ZjguLmE2NjAxNjFmMTUwMGYxYjYyYWE5MGJhZTA3NWQzNDY0YmQzYzI5NGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00OCw4ICs0OCw2IEBACiAJCTBCREZGQUUwMEZD
NjE5MjkwMEQ2OUVGNCAvKiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBCREZGQUQ0MEZDNjE3MTAwMEQ2OUVGNCAv
KiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwQkRGRkFFMTBGQzYxOTMxMDBENjlFRjQgLyogT3duRmFzdE1h
bGxvY1B0ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEJERkZBRDEwRkM2MTZFQzAwRDY5RUY0IC8qIE93bkZhc3RNYWxsb2NQdHIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwQkYyOEEyOTExQTMzREMz
MDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwQkYyOEEyODExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5j
cHAgKi87IH07Ci0JCTBGMjk0NzlDMTI2RTY5OEMwMEIzQUJGNSAvKiBEZWNpbWFsTnVtYmVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjk0NzlC
MTI2RTY5OEMwMEIzQUJGNSAvKiBEZWNpbWFsTnVtYmVyLmNwcCAqLzsgfTsKLQkJMEY3NzAwOTAx
NDAyRkRFNDAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8qIFNh
bXBsaW5nQ291bnRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGNzcwMDkyMTQwMkZGM0MwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NzAwOTEx
NDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi87IH07CiAJCTBGOTYzQjM4
MTNGQzZGRTkwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzQjM2MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1
ZVByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRkM4MTUwQTE0MDQzQkY1MDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDODE1MDkxNDA0
M0JEMjAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjUzLDcgKzI1MSw2IEBACiAJCTg2MDE2
MUU2MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODYwMTYxRTIwRjNBODNDMTAw
Rjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggKi87IH07CiAJCTg2MjZCRUNGMTE5
MjhFMzkwMDc4MkZBQiAvKiBTdHJpbmdTdGF0aWNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2MjZCRUNFMTE5MjhFMzkwMDc4MkZBQiAvKiBTdHJp
bmdTdGF0aWNzLmNwcCAqLzsgfTsKIAkJODYyN0U1RUMxMUYxMjgxOTAwQTMxM0I1IC8qIFBhZ2VB
bGxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4NjI3RTVFQTExRjEyODE5MDBBMzEzQjUgLyogUGFnZUFsbG9jYXRpb24uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk4NjJBRjRCNjEyMjM5QzdC
MDAyNEU1QjggLyogRGVjaW1hbE51bWJlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODYyQUY0QjUxMjIzOUM3QjAwMjRFNUI4IC8qIERlY2ltYWxOdW1i
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4
NjNCMjNFMDBGQzYxMTg5MDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjNCMjNERjBGQzYwRTYy
MDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODY0MzhGQzQxMjY1NTAzRTAwRTBERkNBIC8q
IFN0cmluZ0J1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODY0MzhGQzMxMjY1NTAzRTAwRTBERkNBIC8qIFN0cmluZ0J1aWxkZXIuY3BwICov
OyB9OwogCQk4NjU2NTc0MjExNUJFM0RBMDAyOTFGNDAgLyogQ1N0cmluZy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjU2NTc0MDExNUJFM0RBMDAy
OTFGNDAgLyogQ1N0cmluZy5jcHAgKi87IH07CkBAIC01OTgsNiArNTk1LDI3IEBACiAJCUJDRkQ4
QzkyMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGRDhDOTAwRUVCMkVFNzAwMjgzODQ4IC8qIEp1
bXBUYWJsZS5jcHAgKi87IH07CiAJCUJDRkQ4QzkzMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFi
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkQ4
QzkxMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuaCAqLzsgfTsKIAkJQzBBMjcyNjMwRTUw
QTA2MzAwRTk2RTE1IC8qIE5vdEZvdW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDMEEyNzIzRjBFNTA5RjFFMDBFOTZFMTUgLyogTm90Rm91bmQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDMjJCMzFC
OTE0MDU3N0Q3MDBEQjQ3NUEgLyogU2FtcGxpbmdDb3VudGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc3MDA4RTE0MDJGREQ2MDA3OEVCMzkgLyog
U2FtcGxpbmdDb3VudGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJQzIyQzUyRjExM0ZBRjZFRjAwQjdEQzBEIC8qIGJpZ251bS1kdG9hLmNjIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyQzUyOTAxM0ZB
RjZFRjAwQjdEQzBEIC8qIGJpZ251bS1kdG9hLmNjICovOyB9OworCQlDMjJDNTJGMjEzRkFGNkVG
MDBCN0RDMEQgLyogYmlnbnVtLWR0b2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEMyMkM1MjkxMTNGQUY2RUYwMEI3REMwRCAvKiBiaWdudW0tZHRvYS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUMyMkM1
MkYzMTNGQUY2RUYwMEI3REMwRCAvKiBiaWdudW0uY2MgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTI5MjEzRkFGNkVGMDBCN0RDMEQgLyogYmlnbnVt
LmNjICovOyB9OworCQlDMjJDNTJGNDEzRkFGNkVGMDBCN0RDMEQgLyogYmlnbnVtLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTI5MzEzRkFGNkVG
MDBCN0RDMEQgLyogYmlnbnVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJQzIyQzUyRjUxM0ZBRjZFRjAwQjdEQzBEIC8qIGNhY2hlZC1wb3dlcnMu
Y2MgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTI5
NDEzRkFGNkVGMDBCN0RDMEQgLyogY2FjaGVkLXBvd2Vycy5jYyAqLzsgfTsKKwkJQzIyQzUyRjYx
M0ZBRjZFRjAwQjdEQzBEIC8qIGNhY2hlZC1wb3dlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1Mjk1MTNGQUY2RUYwMEI3REMwRCAvKiBjYWNo
ZWQtcG93ZXJzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJQzIyQzUyRjcxM0ZBRjZFRjAwQjdEQzBEIC8qIGRpeS1mcC5jYyBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1Mjk3MTNGQUY2RUYwMEI3REMw
RCAvKiBkaXktZnAuY2MgKi87IH07CisJCUMyMkM1MkY4MTNGQUY2RUYwMEI3REMwRCAvKiBkaXkt
ZnAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1
Mjk4MTNGQUY2RUYwMEI3REMwRCAvKiBkaXktZnAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDMjJDNTJGOTEzRkFGNkVGMDBCN0RDMEQgLyogZG91
YmxlLWNvbnZlcnNpb24uY2MgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDMjJDNTI5OTEzRkFGNkVGMDBCN0RDMEQgLyogZG91YmxlLWNvbnZlcnNpb24uY2Mg
Ki87IH07CisJCUMyMkM1MkZBMTNGQUY2RUYwMEI3REMwRCAvKiBkb3VibGUtY29udmVyc2lvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyQzUyOUEx
M0ZBRjZFRjAwQjdEQzBEIC8qIGRvdWJsZS1jb252ZXJzaW9uLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIyQzUyRkIxM0ZBRjZFRjAwQjdEQzBE
IC8qIGRvdWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzIyQzUyOUIxM0ZBRjZFRjAwQjdEQzBEIC8qIGRvdWJsZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUMyMkM1MkZDMTNGQUY2RUYwMEI3REMw
RCAvKiBmYXN0LWR0b2EuY2MgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDMjJDNTI5QzEzRkFGNkVGMDBCN0RDMEQgLyogZmFzdC1kdG9hLmNjICovOyB9Owor
CQlDMjJDNTJGRDEzRkFGNkVGMDBCN0RDMEQgLyogZmFzdC1kdG9hLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTI5RDEzRkFGNkVGMDBCN0RDMEQg
LyogZmFzdC1kdG9hLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJQzIyQzUyRkUxM0ZBRjZFRjAwQjdEQzBEIC8qIGZpeGVkLWR0b2EuY2MgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTI5RTEzRkFGNkVG
MDBCN0RDMEQgLyogZml4ZWQtZHRvYS5jYyAqLzsgfTsKKwkJQzIyQzUyRkYxM0ZBRjZFRjAwQjdE
QzBEIC8qIGZpeGVkLWR0b2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEMyMkM1MjlGMTNGQUY2RUYwMEI3REMwRCAvKiBmaXhlZC1kdG9hLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIyQzUzMTMxM0ZB
RjZFRjAwQjdEQzBEIC8qIHN0cnRvZC5jYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEMyMkM1MkI5MTNGQUY2RUYwMEI3REMwRCAvKiBzdHJ0b2QuY2MgKi87
IH07CisJCUMyMkM1MzE0MTNGQUY2RUYwMEI3REMwRCAvKiBzdHJ0b2QuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1MkJBMTNGQUY2RUYwMEI3REMw
RCAvKiBzdHJ0b2QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQlDMjJDNTMxNTEzRkFGNkVGMDBCN0RDMEQgLyogdXRpbHMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1MkJCMTNGQUY2RUYwMEI3REMw
RCAvKiB1dGlscy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCUMyRUU1OUEwMTNGQzk3M0YwMDlDRUFGRSAvKiBEZWNpbWFsTnVtYmVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkVFNTk5RTEzRkM5NzJB
MDA5Q0VBRkUgLyogRGVjaW1hbE51bWJlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCUMyRUU1OUExMTNGQzk3NjgwMDlDRUFGRSAvKiBEZWNpbWFs
TnVtYmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEMyRUU1OTlEMTNGQzk3MkEwMDlDRUFGRSAvKiBEZWNpbWFsTnVtYmVyLmNwcCAqLzsgfTsKIAkJ
RDdBNDZBNEYxMzM4RkZFQTAwRUQ2OTVDIC8qIER5bmFtaWNBbm5vdGF0aW9ucy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDc1QUY1OTYxMkY4Q0I5NTAw
RkMwQURGIC8qIER5bmFtaWNBbm5vdGF0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUREMzc3Q0JDMTIwNzJDMTgwMDZBMjUxNyAvKiBCaXRt
YXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEREMzc3
Q0JCMTIwNzJDMTgwMDZBMjUxNyAvKiBCaXRtYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlEREY3QUJENDExRjYwRUQyMDAxMDhFMzYgLyogR0NB
Y3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBEREY3QUJEMjExRjYwRUQyMDAxMDhFMzYgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTczMyw3
ICs3NTEsNiBAQAogCQkwQkRGRkFEMTBGQzYxNkVDMDBENjlFRjQgLyogT3duRmFzdE1hbGxvY1B0
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPd25GYXN0TWFsbG9jUHRyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBCREZGQUQ0MEZDNjE3MTAwMEQ2OUVGNCAv
KiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpemVMaW1pdHMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkwRjI5NDc5QjEyNkU2OThDMDBCM0FCRjUgLyogRGVjaW1hbE51bWJlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZWNpbWFsTnVtYmVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NzAwOEUxNDAyRkRENjAwNzhFQjM5
IC8qIFNhbXBsaW5nQ291bnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
YW1wbGluZ0NvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NzAwOTEx
NDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjk2M0IzNjEzRkM2RkRFMDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhbHVlUHJvZmlsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTQ3LDcgKzk2NCw2IEBACiAJCTg2MDE2MUUyMEYzQTgz
QzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4NjI2QkVDRTExOTI4RTM5MDA3ODJGQUIgLyogU3RyaW5nU3RhdGlj
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTdHJpbmdTdGF0aWNz
LmNwcDsgcGF0aCA9IHRleHQvU3RyaW5nU3RhdGljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTg2MjdFNUVBMTFGMTI4MTkwMEEzMTNCNSAvKiBQYWdlQWxsb2NhdGlvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWdlQWxsb2NhdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk4NjJBRjRCNTEyMjM5QzdCMDAyNEU1QjggLyogRGVjaW1h
bE51bWJlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWNpbWFsTnVtYmVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2M0IyM0RGMEZDNjBFNjIwMDcwM0FB
NCAvKiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTg2NDM4RkMzMTI2NTUwM0UwMEUwREZDQSAvKiBTdHJpbmdCdWlsZGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFN0cmluZ0J1aWxkZXIuY3BwOyBwYXRoID0g
dGV4dC9TdHJpbmdCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY1
NjU3NDAxMTVCRTNEQTAwMjkxRjQwIC8qIENTdHJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQ1N0cmluZy5jcHA7IHBhdGggPSB0ZXh0L0NTdHJpbmcuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI2Myw2ICsxMjc5LDMyIEBACiAJCUJDRkQ4
QzkwMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSnVtcFRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQkNGRDhDOTEwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKdW1wVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQzBBMjcyM0YwRTUwOUYxRTAwRTk2RTE1IC8qIE5vdEZvdW5kLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vdEZvdW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUMyMkM1MjkwMTNGQUY2RUYwMEI3REMwRCAvKiBiaWdudW0tZHRvYS5jYyAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9ICJiaWdudW0tZHRvYS5jYyI7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMkM1MjkxMTNGQUY2RUYwMEI3REMwRCAvKiBiaWdu
dW0tZHRvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSAiYmlnbnVtLWR0b2Eu
aCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMkM1MjkyMTNGQUY2RUYwMEI3REMw
RCAvKiBiaWdudW0uY2MgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBiaWdu
dW0uY2M7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMkM1MjkzMTNGQUY2RUYwMEI3
REMwRCAvKiBiaWdudW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gYmlnbnVt
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMkM1Mjk0MTNGQUY2RUYwMEI3REMw
RCAvKiBjYWNoZWQtcG93ZXJzLmNjICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gImNhY2hlZC1wb3dlcnMuY2MiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJD
NTI5NTEzRkFGNkVGMDBCN0RDMEQgLyogY2FjaGVkLXBvd2Vycy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSAiY2FjaGVkLXBvd2Vycy5oIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQzIyQzUyOTYxM0ZBRjZFRjAwQjdEQzBEIC8qIENPUFlJTkcgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gQ09QWUlORzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUy
OTcxM0ZBRjZFRjAwQjdEQzBEIC8qIGRpeS1mcC5jYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9ICJkaXktZnAuY2MiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
MjJDNTI5ODEzRkFGNkVGMDBCN0RDMEQgLyogZGl5LWZwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9ICJkaXktZnAuaCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMy
MkM1Mjk5MTNGQUY2RUYwMEI3REMwRCAvKiBkb3VibGUtY29udmVyc2lvbi5jYyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9ICJkb3VibGUtY29udmVyc2lvbi5jYyI7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMkM1MjlBMTNGQUY2RUYwMEI3REMwRCAvKiBkb3Vi
bGUtY29udmVyc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSAiZG91Ymxl
LWNvbnZlcnNpb24uaCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMkM1MjlCMTNG
QUY2RUYwMEI3REMwRCAvKiBkb3VibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gZG91YmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMkM1MjlDMTNGQUY2
RUYwMEI3REMwRCAvKiBmYXN0LWR0b2EuY2MgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSAiZmFzdC1kdG9hLmNjIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIy
QzUyOUQxM0ZBRjZFRjAwQjdEQzBEIC8qIGZhc3QtZHRvYS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSAiZmFzdC1kdG9hLmgiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlDMjJDNTI5RTEzRkFGNkVGMDBCN0RDMEQgLyogZml4ZWQtZHRvYS5jYyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9ICJmaXhlZC1kdG9hLmNjIjsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQzIyQzUyOUYxM0ZBRjZFRjAwQjdEQzBEIC8qIGZpeGVkLWR0b2EuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gImZpeGVkLWR0b2EuaCI7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMkM1MkEwMTNGQUY2RUYwMEI3REMwRCAvKiBMSUNFTlNF
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IExJQ0VOU0U7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUMyMkM1MkExMTNGQUY2RUYwMEI3REMwRCAvKiBNYWtlZmlsZSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUubWFrZTsgcGF0aCA9IE1ha2VmaWxlOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDMjJDNTJBMjEzRkFGNkVGMDBCN0RDMEQgLyogUkVBRE1FICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IFJFQURNRTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyQTMxM0ZB
RjZFRjAwQjdEQzBEIC8qIFNDb25zY3JpcHQgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU0NvbnNj
cmlwdDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyQTQxM0ZBRjZFRjAwQjdE
QzBEIC8qIFNDb25zdHJ1Y3QgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU0NvbnN0cnVjdDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyQjkxM0ZBRjZFRjAwQjdEQzBEIC8qIHN0
cnRvZC5jYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHN0cnRvZC5jYzsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyQkExM0ZBRjZFRjAwQjdEQzBEIC8q
IHN0cnRvZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBzdHJ0b2QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyQkIxM0ZBRjZFRjAwQjdEQzBEIC8qIHV0
aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHV0aWxzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyRUU1OTlEMTNGQzk3MkEwMDlDRUFGRSAvKiBEZWNpbWFs
TnVtYmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlY2ltYWxO
dW1iZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMkVFNTk5RTEzRkM5NzJB
MDA5Q0VBRkUgLyogRGVjaW1hbE51bWJlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEZWNpbWFsTnVtYmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQyMTIw
MjI4MEFENDMxMEMwMEVENzlCNiAvKiBEYXRlQ29udmVyc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGF0ZUNvbnZlcnNpb24uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlEMjEyMDIyOTBBRDQzMTBDMDBFRDc5QjYgLyogRGF0ZUNvbnZlcnNp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGVDb252ZXJzaW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQ3NUFGNTk1MTJGOENCOTUwMEZDMEFERiAv
KiBEeW5hbWljQW5ub3RhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRHluYW1pY0Fubm90YXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTE2NjQsNiArMTcwNiw5IEBACiAJCTY1MTYyRUYxMDhFNkEyMUMwMDc1NTZDRCAvKiB3dGYg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUMyRUU1OTlE
MTNGQzk3MkEwMDlDRUFGRSAvKiBEZWNpbWFsTnVtYmVyLmNwcCAqLywKKwkJCQlDMkVFNTk5RTEz
RkM5NzJBMDA5Q0VBRkUgLyogRGVjaW1hbE51bWJlci5oICovLAorCQkJCUMyMkM1MjQ4MTNGQUY2
RUYwMEI3REMwRCAvKiBkdG9hICovLAogCQkJCTA2RDM1OEEwMERBQUQ5QzQwMDNCMTc0RSAvKiBt
YWMgKi8sCiAJCQkJODY1NjU3M0UxMTVCRTM1MjAwMjkxRjQwIC8qIHRleHQgKi8sCiAJCQkJRTE5
NTY3OEQwOUU3Q0YxMjAwQjg5RDEzIC8qIHVuaWNvZGUgKi8sCkBAIC0xNjg5LDggKzE3MzQsNiBA
QAogCQkJCTE4MEI5QUYwMEYxNkM1NjkwMDlCREJDNSAvKiBDdXJyZW50VGltZS5oICovLAogCQkJ
CTQxMzU5Q0Y0MEZERDg5Q0IwMDIwNjE4MCAvKiBEYXRlTWF0aC5jcHAgKi8sCiAJCQkJNDEzNTlD
RjUwRkREODlDQjAwMjA2MTgwIC8qIERhdGVNYXRoLmggKi8sCi0JCQkJMEYyOTQ3OUIxMjZFNjk4
QzAwQjNBQkY1IC8qIERlY2ltYWxOdW1iZXIuY3BwICovLAotCQkJCTg2MkFGNEI1MTIyMzlDN0Iw
MDI0RTVCOCAvKiBEZWNpbWFsTnVtYmVyLmggKi8sCiAJCQkJNTEzNUZBRDUxMkQyNjg1NjAwM0Mw
ODNCIC8qIERlY29kZXIuaCAqLywKIAkJCQk1MTg2MTExRDBDQzgyNDgzMDA4MTQxMkIgLyogRGVx
dWUuaCAqLywKIAkJCQk5MzhDNEY2QjBDQTA2QkNFMDBEOTMxMEEgLyogRGlzYWxsb3dDVHlwZS5o
ICovLApAQCAtMjE5NCw2ICsyMjM3LDM3IEBACiAJCQlwYXRoID0gYnl0ZWNvZGU7CiAJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQlDMjJDNTI0ODEzRkFGNkVGMDBCN0RDMEQgLyog
ZHRvYSAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQzIy
QzUyOTAxM0ZBRjZFRjAwQjdEQzBEIC8qIGJpZ251bS1kdG9hLmNjICovLAorCQkJCUMyMkM1Mjkx
MTNGQUY2RUYwMEI3REMwRCAvKiBiaWdudW0tZHRvYS5oICovLAorCQkJCUMyMkM1MjkyMTNGQUY2
RUYwMEI3REMwRCAvKiBiaWdudW0uY2MgKi8sCisJCQkJQzIyQzUyOTMxM0ZBRjZFRjAwQjdEQzBE
IC8qIGJpZ251bS5oICovLAorCQkJCUMyMkM1Mjk0MTNGQUY2RUYwMEI3REMwRCAvKiBjYWNoZWQt
cG93ZXJzLmNjICovLAorCQkJCUMyMkM1Mjk1MTNGQUY2RUYwMEI3REMwRCAvKiBjYWNoZWQtcG93
ZXJzLmggKi8sCisJCQkJQzIyQzUyOTYxM0ZBRjZFRjAwQjdEQzBEIC8qIENPUFlJTkcgKi8sCisJ
CQkJQzIyQzUyOTcxM0ZBRjZFRjAwQjdEQzBEIC8qIGRpeS1mcC5jYyAqLywKKwkJCQlDMjJDNTI5
ODEzRkFGNkVGMDBCN0RDMEQgLyogZGl5LWZwLmggKi8sCisJCQkJQzIyQzUyOTkxM0ZBRjZFRjAw
QjdEQzBEIC8qIGRvdWJsZS1jb252ZXJzaW9uLmNjICovLAorCQkJCUMyMkM1MjlBMTNGQUY2RUYw
MEI3REMwRCAvKiBkb3VibGUtY29udmVyc2lvbi5oICovLAorCQkJCUMyMkM1MjlCMTNGQUY2RUYw
MEI3REMwRCAvKiBkb3VibGUuaCAqLywKKwkJCQlDMjJDNTI5QzEzRkFGNkVGMDBCN0RDMEQgLyog
ZmFzdC1kdG9hLmNjICovLAorCQkJCUMyMkM1MjlEMTNGQUY2RUYwMEI3REMwRCAvKiBmYXN0LWR0
b2EuaCAqLywKKwkJCQlDMjJDNTI5RTEzRkFGNkVGMDBCN0RDMEQgLyogZml4ZWQtZHRvYS5jYyAq
LywKKwkJCQlDMjJDNTI5RjEzRkFGNkVGMDBCN0RDMEQgLyogZml4ZWQtZHRvYS5oICovLAorCQkJ
CUMyMkM1MkEwMTNGQUY2RUYwMEI3REMwRCAvKiBMSUNFTlNFICovLAorCQkJCUMyMkM1MkExMTNG
QUY2RUYwMEI3REMwRCAvKiBNYWtlZmlsZSAqLywKKwkJCQlDMjJDNTJBMjEzRkFGNkVGMDBCN0RD
MEQgLyogUkVBRE1FICovLAorCQkJCUMyMkM1MkEzMTNGQUY2RUYwMEI3REMwRCAvKiBTQ29uc2Ny
aXB0ICovLAorCQkJCUMyMkM1MkE0MTNGQUY2RUYwMEI3REMwRCAvKiBTQ29uc3RydWN0ICovLAor
CQkJCUMyMkM1MkI5MTNGQUY2RUYwMEI3REMwRCAvKiBzdHJ0b2QuY2MgKi8sCisJCQkJQzIyQzUy
QkExM0ZBRjZFRjAwQjdEQzBEIC8qIHN0cnRvZC5oICovLAorCQkJCUMyMkM1MkJCMTNGQUY2RUYw
MEI3REMwRCAvKiB1dGlscy5oICovLAorCQkJKTsKKwkJCXBhdGggPSBkdG9hOworCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJRTE5NTY3OEQwOUU3Q0YxMjAwQjg5RDEzIC8qIHVu
aWNvZGUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMjI0
NSw4ICsyMzE5LDEwIEBACiAJCQkJODZEM0IyQzQxMDE1NkJERTAwMjg2NUU3IC8qIEFSTUFzc2Vt
Ymxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBREQxNDUwRkRERUE5ODAwMDZFRUMyIC8qIEFS
TXY3QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFNjBFMTZGNUNEMDBCMzQ0
NjAgLyogQXJyYXlDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzIyQjMxQjkxNDA1
NzdENzAwREI0NzVBIC8qIFNhbXBsaW5nQ291bnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZD
ODE1MEExNDA0M0JGNTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGOTYzQjM4MTNGQzZGRTkwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUMyRUU1OUEwMTNGQzk3M0YwMDlDRUFGRSAvKiBEZWNpbWFsTnVtYmVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFNzBFMTZGNUNEMDBCMzQ0NjAgLyogQXJyYXlQ
cm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNTI0MEUxNkZDOEEwMEIzNDQ2MCAv
KiBBcnJheVByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U5MEUxNkY1
Q0QwMEIzNDQ2MCAvKiBBU0NJSUNUeXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTIyOTYsNyArMjM3
Miw2IEBACiAJCQkJQkMxOEMzRkEwRTE2RjVDRDAwQjM0NDYwIC8qIERlYnVnZ2VyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzMxMzU2NDBGMzAyRkEzMDAzREZEM0EgLyogRGVidWdnZXJBY3RpdmF0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNGQjBFMTZGNUNEMDBCMzQ0NjAgLyogRGVi
dWdnZXJDYWxsRnJhbWUuaCBpbiBIZWFkZXJzICovLAotCQkJCTg2MkFGNEI2MTIyMzlDN0IwMDI0
RTVCOCAvKiBEZWNpbWFsTnVtYmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTM1RkFGMjEyRDI2
QUNFMDAzQzA4M0IgLyogRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRkMwRTE2
RjVDRDAwQjM0NDYwIC8qIERlcXVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDQTRGMTEzMkVB
QTZEMDAyQjJBRDcgLyogREZHQWxpYXNUcmFja2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTI0ODEs
NyArMjU1NiwxNiBAQAogCQkJCTkwRDM0NjlDMEUyODUyODAwMDk0OTJFRSAvKiBSZWZDb3VudGVk
TGVha0NvdW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDU4MEUxNkY1Q0QwMEIzNDQ2
MCAvKiBSZWZQdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDU5MEUxNkY1Q0QwMEIzNDQ2
MCAvKiBSZWZQdHJIYXNoTWFwLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjc3MDA5MDE0MDJGREU0
MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlDMjJDNTJG
MjEzRkFGNkVGMDBCN0RDMEQgLyogYmlnbnVtLWR0b2EuaCBpbiBIZWFkZXJzICovLAorCQkJCUMy
MkM1MkY0MTNGQUY2RUYwMEI3REMwRCAvKiBiaWdudW0uaCBpbiBIZWFkZXJzICovLAorCQkJCUMy
MkM1MkY2MTNGQUY2RUYwMEI3REMwRCAvKiBjYWNoZWQtcG93ZXJzLmggaW4gSGVhZGVycyAqLywK
KwkJCQlDMjJDNTJGODEzRkFGNkVGMDBCN0RDMEQgLyogZGl5LWZwLmggaW4gSGVhZGVycyAqLywK
KwkJCQlDMjJDNTJGQTEzRkFGNkVGMDBCN0RDMEQgLyogZG91YmxlLWNvbnZlcnNpb24uaCBpbiBI
ZWFkZXJzICovLAorCQkJCUMyMkM1MkZCMTNGQUY2RUYwMEI3REMwRCAvKiBkb3VibGUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUMyMkM1MkZEMTNGQUY2RUYwMEI3REMwRCAvKiBmYXN0LWR0b2EuaCBp
biBIZWFkZXJzICovLAorCQkJCUMyMkM1MkZGMTNGQUY2RUYwMEI3REMwRCAvKiBmaXhlZC1kdG9h
LmggaW4gSGVhZGVycyAqLywKKwkJCQlDMjJDNTMxNDEzRkFGNkVGMDBCN0RDMEQgLyogc3RydG9k
LmggaW4gSGVhZGVycyAqLywKKwkJCQlDMjJDNTMxNTEzRkFGNkVGMDBCN0RDMEQgLyogdXRpbHMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDVBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBSZWdFeHAu
aCBpbiBIZWFkZXJzICovLAogCQkJCUExNzEyQjNGMTFDN0IyMjgwMDdBNTMxNSAvKiBSZWdFeHBD
YWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAyQzIwRTE3MDZBNzAwMkM3RTgyIC8qIFJl
Z0V4cENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTI4NTcsNiArMjk0MSw3IEBACiAJ
CQlmaWxlcyA9ICgKIAkJCQkwRkM4MTUwQjE0MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVy
U3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc3MDA5MjE0MDJGRjNDMDA3OEVCMzkg
LyogU2FtcGxpbmdDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUMyRUU1OUExMTNGQzk3
NjgwMDlDRUFGRSAvKiBEZWNpbWFsTnVtYmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0Yz
OUJEMTA3RUMzNzYwMDQyN0E0OCAvKiBBcmdMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
N0YzOUJFMTA3RUMzNzYwMDQyN0E0OCAvKiBBcmd1bWVudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJODZEM0IyQzMxMDE1NkJERTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxlci5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTI4OTAsNyArMjk3NSw2IEBACiAJCQkJMTQyODA4MjMxMDdFQzAyQzAwMTNFN0Iy
IC8qIERlYnVnZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMzEzNTY1MEYzMDJGQTMwMDNE
RkQzQSAvKiBEZWJ1Z2dlckFjdGl2YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ5NTU5
RUUwRERDRERGNzAwNjQ4MDg3IC8qIERlYnVnZ2VyQ2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTBGMjk0NzlDMTI2RTY5OEMwMEIzQUJGNSAvKiBEZWNpbWFsTnVtYmVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTg2RUM5REM0MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBh
cnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkVDOURDNzEzMjhERjgyMDAyQjJBRDcgLyog
REZHR3JhcGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQzkxMzI4REY4MjAwMkIyQUQ3
IC8qIERGR0pJVENvZGVHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMDUwLDYgKzMx
MzQsMTQgQEAKIAkJCQkxNEQyRjNEQTEzOUY0QkUyMDA0OTEwMzEgLyogTmV3U3BhY2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTQyQTFEODMxM0ExOUM4NDAwOURBNUZFIC8qIE9sZFNwYWNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0QkE3QTk3MTNBQURGRjgwMDVCN0MyQyAvKiBIZWFwLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUMyMkM1MkYxMTNGQUY2RUYwMEI3REMwRCAvKiBiaWdudW0t
ZHRvYS5jYyBpbiBTb3VyY2VzICovLAorCQkJCUMyMkM1MkYzMTNGQUY2RUYwMEI3REMwRCAvKiBi
aWdudW0uY2MgaW4gU291cmNlcyAqLywKKwkJCQlDMjJDNTJGNTEzRkFGNkVGMDBCN0RDMEQgLyog
Y2FjaGVkLXBvd2Vycy5jYyBpbiBTb3VyY2VzICovLAorCQkJCUMyMkM1MkY3MTNGQUY2RUYwMEI3
REMwRCAvKiBkaXktZnAuY2MgaW4gU291cmNlcyAqLywKKwkJCQlDMjJDNTJGOTEzRkFGNkVGMDBC
N0RDMEQgLyogZG91YmxlLWNvbnZlcnNpb24uY2MgaW4gU291cmNlcyAqLywKKwkJCQlDMjJDNTJG
QzEzRkFGNkVGMDBCN0RDMEQgLyogZmFzdC1kdG9hLmNjIGluIFNvdXJjZXMgKi8sCisJCQkJQzIy
QzUyRkUxM0ZBRjZFRjAwQjdEQzBEIC8qIGZpeGVkLWR0b2EuY2MgaW4gU291cmNlcyAqLywKKwkJ
CQlDMjJDNTMxMzEzRkFGNkVGMDBCN0RDMEQgLyogc3RydG9kLmNjIGluIFNvdXJjZXMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFk
aW5nLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRp
bmcuY3BwCmluZGV4IDI2NTM5NmYzYmRkZmVhMjMyNmZkZjk2MjBhY2FkZDdmOTQxM2Y0MGYuLjQ0
OWU3ZGI3ODgxYjY1OWY1NzZkMzQ0Zjk4NmFlNTIxNzUxZDM0MWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCkBAIC0z
MCw3ICszMCw3IEBACiAjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgogCiAjaW5jbHVk
ZSAiSGVhcC5oIgotI2luY2x1ZGUgImR0b2EuaCIKKyNpbmNsdWRlIDx3dGYvZHRvYS9jYWNoZWQt
cG93ZXJzLmg+CiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiVVN0cmluZy5oIgpAQCAtNDgsNiArNDgsNyBAQCBzdGF0aWMgcHRo
cmVhZF9vbmNlX3QgaW5pdGlhbGl6ZVRocmVhZGluZ0tleU9uY2UgPSBQVEhSRUFEX09OQ0VfSU5J
VDsKIAogc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZ09uY2UoKQogeworICAgIGRvdWJs
ZV9jb252ZXJzaW9uOjppbml0aWFsaXplKCk7CiAgICAgV1RGOjppbml0aWFsaXplVGhyZWFkaW5n
KCk7CiAjaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQogICAgIFdyaXRlQmFycmll
ckNvdW50ZXJzOjppbml0aWFsaXplKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcAppbmRleCA2NzlmNzQ3OWRlYzdlZWI1NDNlZTllNjIz
MzNmMDZmODNkNDllZjRkLi5kNzQ0MTYyNmUxMTFhMmJjYzFkM2ExNjA2YzgxNTRhYmEwYTBjYzA2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5
cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlw
ZS5jcHAKQEAgLTMwLDkgKzMwLDExIEBACiAjaW5jbHVkZSAiVWludDE2V2l0aEZyYWN0aW9uLmgi
CiAjaW5jbHVkZSAiZHRvYS5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVk
ZSA8d3RmL0RlY2ltYWxOdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvZHRvYS9kb3VibGUtY29udmVyc2lv
bi5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOjpkb3VibGVfY29udmVyc2lvbjsKIAogbmFtZXNw
YWNlIEpTQyB7CiAKQEAgLTMzOSwxMiArMzQxLDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9FeHBvbmVudGlhbChFeGVjU3RhdGUqIGV4ZWMpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgVVN0cmluZzo6bnVtYmVy
KHgpKSk7CiAKICAgICAvLyBSb3VuZCBpZiB0aGUgYXJndW1lbnQgaXMgbm90IHVuZGVmaW5lZCwg
YWx3YXlzIGZvcm1hdCBhcyBleHBvbmVudGlhbC4KLSAgICBOdW1iZXJUb1N0cmluZ0J1ZmZlciBi
dWZmZXI7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gaXNVbmRlZmluZWQKLSAgICAgICAgPyBEZWNp
bWFsTnVtYmVyKHgpLnRvU3RyaW5nRXhwb25lbnRpYWwoYnVmZmVyLCBXVEY6Ok51bWJlclRvU3Ry
aW5nQnVmZmVyTGVuZ3RoKQotICAgICAgICA6IERlY2ltYWxOdW1iZXIoeCwgUm91bmRpbmdTaWdu
aWZpY2FudEZpZ3VyZXMsIGRlY2ltYWxQbGFjZXNJbkV4cG9uZW50ICsgMSkudG9TdHJpbmdFeHBv
bmVudGlhbChidWZmZXIsIFdURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgpOwotCi0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBVU3RyaW5nKGJ1ZmZlciwgbGVu
Z3RoKSkpOworICAgIGNoYXIgYnVmZmVyW1dURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGhd
OworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcihidWZmZXIsIFdURjo6TnVtYmVyVG9TdHJpbmdC
dWZmZXJMZW5ndGgpOworICAgIGNvbnN0IERvdWJsZVRvU3RyaW5nQ29udmVydGVyJiBjb252ZXJ0
ZXIgPSBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6RWNtYVNjcmlwdENvbnZlcnRlcigpOworICAg
IGJ1aWxkZXIuUmVzZXQoKTsKKyAgICBpc1VuZGVmaW5lZAorICAgICAgICA/IGNvbnZlcnRlci5U
b0V4cG9uZW50aWFsKHgsIC0xLCAmYnVpbGRlcikKKyAgICAgICAgOiBjb252ZXJ0ZXIuVG9FeHBv
bmVudGlhbCh4LCBkZWNpbWFsUGxhY2VzSW5FeHBvbmVudCwgJmJ1aWxkZXIpOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgVVN0cmluZyhidWlsZGVyLkZpbmFsaXpl
KCkpKSk7CiB9CiAKIC8vIHRvRml4ZWQgY29udmVydHMgYSBudW1iZXIgdG8gYSBzdHJpbmcsIGFs
d2F5cyBmb3JtYXR0aW5nIGFzIGFuIGEgZGVjaW1hbCBmcmFjdGlvbi4KQEAgLTM3NiwxMCArMzgw
LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9GaXhl
ZChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgLy8gaGFuZGxlZCBieSBudW1iZXJUb1N0cmluZy4KICAg
ICBBU1NFUlQoaXNmaW5pdGUoeCkpOwogCi0gICAgLy8gQ29udmVydCB0byBkZWNpbWFsIHdpdGgg
cm91bmRpbmcsIGFuZCBmb3JtYXQgYXMgZGVjaW1hbC4KLSAgICBOdW1iZXJUb1N0cmluZ0J1ZmZl
ciBidWZmZXI7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gRGVjaW1hbE51bWJlcih4LCBSb3VuZGlu
Z0RlY2ltYWxQbGFjZXMsIGRlY2ltYWxQbGFjZXMpLnRvU3RyaW5nRGVjaW1hbChidWZmZXIsIFdU
Rjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNTdHJpbmcoZXhlYywgVVN0cmluZyhidWZmZXIsIGxlbmd0aCkpKTsKKyAgICBjaGFyIGJ1
ZmZlcltXVEY6Ok51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoXTsKKyAgICBTdHJpbmdCdWlsZGVy
IGJ1aWxkZXIoYnVmZmVyLCBXVEY6Ok51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoKTsKKyAgICBj
b25zdCBEb3VibGVUb1N0cmluZ0NvbnZlcnRlciYgY29udmVydGVyID0gRG91YmxlVG9TdHJpbmdD
b252ZXJ0ZXI6OkVjbWFTY3JpcHRDb252ZXJ0ZXIoKTsKKyAgICBidWlsZGVyLlJlc2V0KCk7Cisg
ICAgY29udmVydGVyLlRvRml4ZWQoeCwgZGVjaW1hbFBsYWNlcywgJmJ1aWxkZXIpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgVVN0cmluZyhidWlsZGVyLkZpbmFs
aXplKCkpKSk7CiB9CiAKIC8vIHRvUHJlY2lzaW9uIGNvbnZlcnRzIGEgbnVtYmVyIHRvIGEgc3Ry
aW5nLCB0YWtlaW5nIGFuIGFyZ3VtZW50IHNwZWNpZnlpbmcgYQpAQCAtNDEyLDE3ICs0MTgsMTIg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb1ByZWNpc2lv
bihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgaWYgKCFpc2Zpbml0ZSh4KSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBVU3RyaW5nOjpudW1iZXIoeCkpKTsKIAot
ICAgIC8vIENvbnZlcnQgdG8gZGVjaW1hbCB3aXRoIHJvdW5kaW5nLgotICAgIERlY2ltYWxOdW1i
ZXIgbnVtYmVyKHgsIFJvdW5kaW5nU2lnbmlmaWNhbnRGaWd1cmVzLCBzaWduaWZpY2FudEZpZ3Vy
ZXMpOwotICAgIC8vIElmIG51bWJlciBpcyBpbiB0aGUgcmFuZ2UgMWUtNiA8PSB4IDwgcG93KDEw
LCBzaWduaWZpY2FudEZpZ3VyZXMpIHRoZW4gZm9ybWF0Ci0gICAgLy8gYXMgZGVjaW1hbC4gT3Ro
ZXJ3aXNlLCBmb3JtYXQgdGhlIG51bWJlciBhcyBhbiBleHBvbmVudGlhbC4gRGVjaW1hbCBmb3Jt
YXQKLSAgICAvLyBkZW1hbmRzIGEgbWluaW11bSBvZiAoZXhwb25lbnQgKyAxKSBkaWdpdHMgdG8g
cmVwcmVzZW50IGEgbnVtYmVyLCBmb3IgZXhhbXBsZQotICAgIC8vIDEyMzQgKDEuMjM0ZSszKSBy
ZXF1aXJlcyA0IGRpZ2l0cy4gKFNlZSBFQ01BLTI2MiAxNS43LjQuNy4xMC5jKQotICAgIE51bWJl
clRvU3RyaW5nQnVmZmVyIGJ1ZmZlcjsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBudW1iZXIuZXhw
b25lbnQoKSA+PSAtNiAmJiBudW1iZXIuZXhwb25lbnQoKSA8IHNpZ25pZmljYW50RmlndXJlcwot
ICAgICAgICA/IG51bWJlci50b1N0cmluZ0RlY2ltYWwoYnVmZmVyLCBXVEY6Ok51bWJlclRvU3Ry
aW5nQnVmZmVyTGVuZ3RoKQotICAgICAgICA6IG51bWJlci50b1N0cmluZ0V4cG9uZW50aWFsKGJ1
ZmZlciwgV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBVU3RyaW5nKGJ1ZmZlciwgbGVuZ3RoKSkpOworICAg
IGNoYXIgYnVmZmVyW1dURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGhdOworICAgIFN0cmlu
Z0J1aWxkZXIgYnVpbGRlcihidWZmZXIsIFdURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgp
OworICAgIGNvbnN0IERvdWJsZVRvU3RyaW5nQ29udmVydGVyJiBjb252ZXJ0ZXIgPSBEb3VibGVU
b1N0cmluZ0NvbnZlcnRlcjo6RWNtYVNjcmlwdENvbnZlcnRlcigpOworICAgIGJ1aWxkZXIuUmVz
ZXQoKTsKKyAgICBjb252ZXJ0ZXIuVG9QcmVjaXNpb24oeCwgc2lnbmlmaWNhbnRGaWd1cmVzLCAm
YnVpbGRlcik7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBVU3Ry
aW5nKGJ1aWxkZXIuRmluYWxpemUoKSkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBudW1iZXJQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5nLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuY3BwCmluZGV4IGMxNGYzMTk5ZjQwN2Y0N2Y3OTVm
NTFiYjkyMGU2YzA5ZjNjM2E2ZmQuLmI3OGU2ZjFhY2M3ODEwY2IyNmU4OTg0OGFhNTQ3ZDhmZGEy
YmJmNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuY3BwCkBAIC0z
NSwxMCArMzUsMTAgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDx3dGYvQVNDSUlD
VHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0RlY2lt
YWxOdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9T
dHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL2R0
b2EuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9VVEY4Lmg+CiAKICNpZiBIQVZFKFNUUklOR1Nf
SCkKQEAgLTE5Niw4ICsxOTYsNyBAQCBVU3RyaW5nIFVTdHJpbmc6Om51bWJlcihsb25nIGwpCiBV
U3RyaW5nIFVTdHJpbmc6Om51bWJlcihkb3VibGUgZCkKIHsKICAgICBOdW1iZXJUb1N0cmluZ0J1
ZmZlciBidWZmZXI7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gbnVtYmVyVG9TdHJpbmcoZCwgYnVm
ZmVyKTsKLSAgICByZXR1cm4gVVN0cmluZyhidWZmZXIsIGxlbmd0aCk7CisgICAgcmV0dXJuIFVT
dHJpbmcobnVtYmVyVG9TdHJpbmcoZCwgYnVmZmVyKSk7CiB9CiAKIFVTdHJpbmcgVVN0cmluZzo6
c3Vic3RyaW5nU2hhcmluZ0ltcGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMudHh0
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3RzLnR4dAppbmRleCBjNmRkYTEz
OWM0ZWMzNDRjOTdjM2IzZTczZmYwNDFlZjg5MzIyZDJkLi5jMDA0NDQwMGJmMGI3NDIyM2YzNDhj
MDIxMjczMjQ5M2QzZmYwZGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0
cy50eHQKQEAgLTk5LDYgKzk5LDI4IEBAIFNFVChXVEZfSEVBREVSUwogICAgIFdURlRocmVhZERh
dGEuaAogICAgIGR0b2EuaAogCisgICAgZHRvYS9iaWdudW0tZHRvYS5oCisgICAgZHRvYS9iaWdu
dW0uaAorICAgIGR0b2EvY2FjaGVkLXBvd2Vycy5oCisgICAgZHRvYS9kaXktZnAuaAorICAgIGR0
b2EvZG91YmxlLWNvbnZlcnNpb24uaAorICAgIGR0b2EvZG91YmxlLmgKKyAgICBkdG9hL2Zhc3Qt
ZHRvYS5oCisgICAgZHRvYS9maXhlZC1kdG9hLmgKKyAgICBkdG9hL3N0cnRvZC5oCisgICAgZHRv
YS91dGlscy5oCisKKyAgICBkdG9hL2JpZ251bS1kdG9hLmgKKyAgICBkdG9hL2JpZ251bS5oCisg
ICAgZHRvYS9jYWNoZWQtcG93ZXJzLmgKKyAgICBkdG9hL2RpeS1mcC5oCisgICAgZHRvYS9kb3Vi
bGUtY29udmVyc2lvbi5oCisgICAgZHRvYS9kb3VibGUuaAorICAgIGR0b2EvZmFzdC1kdG9hLmgK
KyAgICBkdG9hL2ZpeGVkLWR0b2EuaAorICAgIGR0b2Evc3RydG9kLmgKKyAgICBkdG9hL3V0aWxz
LmgKKwogICAgIHRleHQvQXRvbWljU3RyaW5nLmgKICAgICB0ZXh0L0F0b21pY1N0cmluZ0ltcGwu
aAogICAgIHRleHQvQ1N0cmluZy5oCkBAIC0xNDAsNiArMTYyLDI0IEBAIFNFVChXVEZfU09VUkNF
UwogICAgIFdURlRocmVhZERhdGEuY3BwCiAgICAgZHRvYS5jcHAKIAorICAgIGR0b2EvYmlnbnVt
LWR0b2EuY2MKKyAgICBkdG9hL2JpZ251bS5jYworICAgIGR0b2EvY2FjaGVkLXBvd2Vycy5jYwor
ICAgIGR0b2EvZGl5LWZwLmNjCisgICAgZHRvYS9kb3VibGUtY29udmVyc2lvbi5jYworICAgIGR0
b2EvZmFzdC1kdG9hLmNjCisgICAgZHRvYS9maXhlZC1kdG9hLmNjCisgICAgZHRvYS9zdHJ0b2Qu
Y2MKKworICAgIGR0b2EvYmlnbnVtLWR0b2EuY2MKKyAgICBkdG9hL2JpZ251bS5jYworICAgIGR0
b2EvY2FjaGVkLXBvd2Vycy5jYworICAgIGR0b2EvZGl5LWZwLmNjCisgICAgZHRvYS9kb3VibGUt
Y29udmVyc2lvbi5jYworICAgIGR0b2EvZmFzdC1kdG9hLmNjCisgICAgZHRvYS9maXhlZC1kdG9h
LmNjCisgICAgZHRvYS9zdHJ0b2QuY2MKKwogICAgIHRleHQvQXRvbWljU3RyaW5nLmNwcAogICAg
IHRleHQvQ1N0cmluZy5jcHAKICAgICB0ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCkBAIC0xNTQsNiAr
MTk0LDcgQEAgU0VUKFdURl9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7SkFWQVNDUklQVENP
UkVfRElSfSIKICAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L3d0ZiIKICAgICAiJHtKQVZBU0NS
SVBUQ09SRV9ESVJ9L3d0Zi91bmljb2RlIgorICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vd3Rm
L2R0b2EiCiAgICAgIiR7SmF2YVNjcmlwdENvcmVfSU5DTFVERV9ESVJFQ1RPUklFU30iCiApCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL2R0b2EuY3BwCmluZGV4IDE0NjZkZjczNjgwODk1ZmI3ZDY3MmY2
NzhhNzQyOTUzZDljNmQ1YWQuLjk3ZDU3ZjMxYzllM2MzNDIxN2Q5NGYwNGQ4MjQxNjRlY2M5MjM5
OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hLmNwcApAQCAtNzUsMTIgKzc1LDEyIEBACiAj
aW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL0Fsd2F5c0lubGluZS5oPgogI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0RlY2ltYWxOdW1iZXIuaD4KICNp
bmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAj
aW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvZHRvYS9kb3VibGUtY29udmVy
c2lvbi5oPgogCiAjaWYgQ09NUElMRVIoTVNWQykKICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0
MjQ0KQpAQCAtMTgwMiwzMyArMTgwMiwxMyBAQCB2b2lkIGR0b2FSb3VuZERQKER0b2FCdWZmZXIg
cmVzdWx0LCBkb3VibGUgZGQsIGludCBuZGlnaXRzLCBib29sJiBzaWduLCBpbnQmIGV4cAogICAg
IGR0b2E8ZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZT4ocmVzdWx0LCBkZCwgbmRpZ2l0cywgc2ln
biwgZXhwb25lbnQsIHByZWNpc2lvbik7CiB9CiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQg
Y29weUFzY2lpVG9VVEYxNihVQ2hhciogbmV4dCwgY29uc3QgY2hhciogc3JjLCB1bnNpZ25lZCBz
aXplKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAg
ICpuZXh0KysgPSAqc3JjKys7Ci19CiAKLXVuc2lnbmVkIG51bWJlclRvU3RyaW5nKGRvdWJsZSBk
LCBOdW1iZXJUb1N0cmluZ0J1ZmZlciBidWZmZXIpCitjb25zdCBjaGFyICpudW1iZXJUb1N0cmlu
Zyhkb3VibGUgZCwgTnVtYmVyVG9TdHJpbmdCdWZmZXIgYnVmZmVyKQogewotICAgIC8vIEhhbmRs
ZSBOYU4gYW5kIEluZmluaXR5LgotICAgIGlmICghaXNmaW5pdGUoZCkpIHsKLSAgICAgICAgaWYg
KGlzbmFuKGQpKSB7Ci0gICAgICAgICAgICBjb3B5QXNjaWlUb1VURjE2KGJ1ZmZlciwgIk5hTiIs
IDMpOwotICAgICAgICAgICAgcmV0dXJuIDM7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGQgPiAw
KSB7Ci0gICAgICAgICAgICBjb3B5QXNjaWlUb1VURjE2KGJ1ZmZlciwgIkluZmluaXR5IiwgOCk7
Ci0gICAgICAgICAgICByZXR1cm4gODsKLSAgICAgICAgfQotICAgICAgICBjb3B5QXNjaWlUb1VU
RjE2KGJ1ZmZlciwgIi1JbmZpbml0eSIsIDkpOwotICAgICAgICByZXR1cm4gOTsKLSAgICB9Ci0K
LSAgICAvLyBDb252ZXJ0IHRvIGRlY2ltYWwgd2l0aCByb3VuZGluZy4KLSAgICBEZWNpbWFsTnVt
YmVyIG51bWJlcihkKTsKLSAgICByZXR1cm4gbnVtYmVyLmV4cG9uZW50KCkgPj0gLTYgJiYgbnVt
YmVyLmV4cG9uZW50KCkgPCAyMQotICAgICAgICA/IG51bWJlci50b1N0cmluZ0RlY2ltYWwoYnVm
ZmVyLCBOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCkKLSAgICAgICAgOiBudW1iZXIudG9TdHJp
bmdFeHBvbmVudGlhbChidWZmZXIsIE51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoKTsKKyAgICBk
b3VibGVfY29udmVyc2lvbjo6U3RyaW5nQnVpbGRlciBidWlsZGVyKGJ1ZmZlciwgTnVtYmVyVG9T
dHJpbmdCdWZmZXJMZW5ndGgpOworICAgIGNvbnN0IGRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGVU
b1N0cmluZ0NvbnZlcnRlciYgY29udmVydGVyID0gZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZVRv
U3RyaW5nQ29udmVydGVyOjpFY21hU2NyaXB0Q29udmVydGVyKCk7CisgICAgY29udmVydGVyLlRv
U2hvcnRlc3QoZCwgJmJ1aWxkZXIpOworICAgIHJldHVybiBidWlsZGVyLkZpbmFsaXplKCk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9kdG9hLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EuaAppbmRleCAzOTI0
YTFjYzQwNWRiMjkzYjAxZjZkNGJkYWU2NTc1OTUyNTgxNzJjLi43MTk5MTIxMTExZDkzZWRlOTAx
YmNhNzhlYzEyZmJjMjMzYWFhMjNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL2R0b2EuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EuaApAQCAtMjEs
NiArMjEsNyBAQAogI2lmbmRlZiBXVEZfZHRvYV9oCiAjZGVmaW5lIFdURl9kdG9hX2gKIAorI2lu
Y2x1ZGUgPHd0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNv
ZGUvVW5pY29kZS5oPgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTI4LDI0ICsyOSwyNiBAQCBjbGFz
cyBNdXRleDsKIAogZXh0ZXJuIFdURjo6TXV0ZXgqIHNfZHRvYVA1TXV0ZXg7CiAKLS8vIHMwMDog
aW5wdXQgc3RyaW5nLiBNdXN0IG5vdCBiZSAwIGFuZCBtdXN0IGJlIHRlcm1pbmF0ZWQgYnkgMC4K
LS8vIHNlOiAqc2Ugd2lsbCBoYXZlIHRoZSBsYXN0IGNvbnN1bWVkIGNoYXJhY3RlciBwb3NpdGlv
biArIDEuCi1kb3VibGUgc3RydG9kKGNvbnN0IGNoYXIqIHMwMCwgY2hhcioqIHNlKTsKLQogdHlw
ZWRlZiBjaGFyIER0b2FCdWZmZXJbODBdOwogCiB2b2lkIGR0b2EoRHRvYUJ1ZmZlciByZXN1bHQs
IGRvdWJsZSBkZCwgYm9vbCYgc2lnbiwgaW50JiBleHBvbmVudCwgdW5zaWduZWQmIHByZWNpc2lv
bik7CiB2b2lkIGR0b2FSb3VuZFNGKER0b2FCdWZmZXIgcmVzdWx0LCBkb3VibGUgZGQsIGludCBu
ZGlnaXRzLCBib29sJiBzaWduLCBpbnQmIGV4cG9uZW50LCB1bnNpZ25lZCYgcHJlY2lzaW9uKTsK
IHZvaWQgZHRvYVJvdW5kRFAoRHRvYUJ1ZmZlciByZXN1bHQsIGRvdWJsZSBkZCwgaW50IG5kaWdp
dHMsIGJvb2wmIHNpZ24sIGludCYgZXhwb25lbnQsIHVuc2lnbmVkJiBwcmVjaXNpb24pOwogCisv
LyBzMDA6IGlucHV0IHN0cmluZy4gTXVzdCBub3QgYmUgMCBhbmQgbXVzdCBiZSB0ZXJtaW5hdGVk
IGJ5IDAuCisvLyBzZTogKnNlIHdpbGwgaGF2ZSB0aGUgbGFzdCBjb25zdW1lZCBjaGFyYWN0ZXIg
cG9zaXRpb24gKyAxLgorZG91YmxlIHN0cnRvZChjb25zdCBjaGFyKiBzMDAsIGNoYXIqKiBzZSk7
CisKIC8vIFNpemUgPSA4MCBmb3Igc2l6ZW9mKER0b2FCdWZmZXIpICsgc29tZSBzaWduIGJpdHMs
IGRlY2ltYWwgcG9pbnQsICdlJywgZXhwb25lbnQgZGlnaXRzLgogY29uc3QgdW5zaWduZWQgTnVt
YmVyVG9TdHJpbmdCdWZmZXJMZW5ndGggPSA5NjsKLXR5cGVkZWYgVUNoYXIgTnVtYmVyVG9TdHJp
bmdCdWZmZXJbTnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGhdOwotdW5zaWduZWQgbnVtYmVyVG9T
dHJpbmcoZG91YmxlLCBOdW1iZXJUb1N0cmluZ0J1ZmZlcik7Cit0eXBlZGVmIGNoYXIgTnVtYmVy
VG9TdHJpbmdCdWZmZXJbTnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGhdOwordHlwZWRlZiBVQ2hh
ciBOdW1iZXJUb1VTdHJpbmdCdWZmZXJbTnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGhdOworY29u
c3QgY2hhciAqbnVtYmVyVG9TdHJpbmcoZG91YmxlLCBOdW1iZXJUb1N0cmluZ0J1ZmZlcik7CiAK
IH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6Ok51bWJlclRvU3RyaW5nQnVmZmVyOwor
dXNpbmcgV1RGOjpOdW1iZXJUb1VTdHJpbmdCdWZmZXI7CiB1c2luZyBXVEY6Om51bWJlclRvU3Ry
aW5nOwogCiAjZW5kaWYgLy8gV1RGX2R0b2FfaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9kdG9hL0NPUFlJTkcgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2Ev
Q09QWUlORwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45MzM3MThhOWVmOWRhZTRjYjRhZmE1NmU0OTAyMTE3NjBkOGE5
NDlmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL0NP
UFlJTkcKQEAgLTAsMCArMSwyNiBAQAorQ29weXJpZ2h0IDIwMDYtMjAxMSwgdGhlIFY4IHByb2pl
Y3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICAgICAgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAgICAg
IGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZAorICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgICAgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKK0EgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCitPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKK1NQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCitU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKK09GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvTElDRU5TRSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvZHRvYS9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkzMzcxOGE5ZWY5ZGFlNGNiNGFmYTU2ZTQ5MDIx
MTc2MGQ4YTk0OWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L2R0b2EvTElDRU5TRQpAQCAtMCwwICsxLDI2IEBACitDb3B5cmlnaHQgMjAwNi0yMDExLCB0aGUg
VjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCittZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgICAgICBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZworICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkCisgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAgICBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKKyAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKK09XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCitEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKK1RIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9SRUFETUUgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL2R0b2EvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYxODZiNDIwZjQyYmMxNGM3ZDU3NjVl
YTQzZjZiMjhkM2MyOWI5MjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL2R0b2EvUkVBRE1FCkBAIC0wLDAgKzEsMTEgQEAKK2h0dHA6Ly9jb2RlLmdvb2dsZS5j
b20vcC9kb3VibGUtY29udmVyc2lvbgorCitUaGlzIHByb2plY3QgKGRvdWJsZS1jb252ZXJzaW9u
KSBwcm92aWRlcyBiaW5hcnktZGVjaW1hbCBhbmQgZGVjaW1hbC1iaW5hcnkKK3JvdXRpbmVzIGZv
ciBJRUVFIGRvdWJsZXMuCisKK1RoZSBsaWJyYXJ5IGNvbnNpc3RzIG9mIGVmZmljaWVudCBjb252
ZXJzaW9uIHJvdXRpbmVzIHRoYXQgaGF2ZSBiZWVuIGV4dHJhY3RlZAorZnJvbSB0aGUgVjggSmF2
YVNjcmlwdCBlbmdpbmUuIFRoZSBjb2RlIGhhcyBiZWVuIHJlZmFjdG9yZWQgYW5kIGltcHJvdmVk
IHNvIHRoYXQKK2l0IGNhbiBiZSB1c2VkIG1vcmUgZWFzaWx5IGluIG90aGVyIHByb2plY3RzLgor
CitUaGVyZSBpcyBleHRlbnNpdmUgZG9jdW1lbnRhdGlvbiBpbiBzcmMvZG91YmxlLWNvbnZlcnNp
b24uaC4gT3RoZXIgZXhhbXBsZXMgY2FuCitiZSBmb3VuZCBpbiB0ZXN0L2NjdGVzdC90ZXN0LWNv
bnZlcnNpb25zLmNjLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9h
L2JpZ251bS1kdG9hLmNjIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS1k
dG9hLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmRlOTg3MWUzYWNhNGRiNGU5ZGQyNjNhZjZjMTFhNDFkNzkwMTk1
NTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvYmln
bnVtLWR0b2EuY2MKQEAgLTAsMCArMSw2NTcgQEAKKy8vIENvcHlyaWdodCAyMDEwIHRoZSBWOCBw
cm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLwor
Ly8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgImJpZ251bS1kdG9hLmgiCisKKyNpbmNs
dWRlICJiaWdudW0uaCIKKyNpbmNsdWRlICJkb3VibGUuaCIKKworbmFtZXNwYWNlIFdURiB7CisK
K25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgc3RhdGljIGludCBOb3Jt
YWxpemVkRXhwb25lbnQodWludDY0X3Qgc2lnbmlmaWNhbmQsIGludCBleHBvbmVudCkgeworICAg
ICAgICBBU1NFUlQoc2lnbmlmaWNhbmQgIT0gMCk7CisgICAgICAgIHdoaWxlICgoc2lnbmlmaWNh
bmQgJiBEb3VibGU6OmtIaWRkZW5CaXQpID09IDApIHsKKyAgICAgICAgICAgIHNpZ25pZmljYW5k
ID0gc2lnbmlmaWNhbmQgPDwgMTsKKyAgICAgICAgICAgIGV4cG9uZW50ID0gZXhwb25lbnQgLSAx
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBleHBvbmVudDsKKyAgICB9CisgICAgCisgICAg
CisgICAgLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnM6CisgICAgLy8gUmV0dXJucyBhbiBlc3RpbWF0
aW9uIG9mIGsgc3VjaCB0aGF0IDEwXihrLTEpIDw9IHYgPCAxMF5rLgorICAgIHN0YXRpYyBpbnQg
RXN0aW1hdGVQb3dlcihpbnQgZXhwb25lbnQpOworICAgIC8vIENvbXB1dGVzIHYgLyAxMF5lc3Rp
bWF0ZWRfcG93ZXIgZXhhY3RseSwgYXMgYSByYXRpbyBvZiB0d28gYmlnbnVtcywgbnVtZXJhdG9y
CisgICAgLy8gYW5kIGRlbm9taW5hdG9yLgorICAgIHN0YXRpYyB2b2lkIEluaXRpYWxTY2FsZWRT
dGFydFZhbHVlcyhkb3VibGUgdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGVzdGltYXRlZF9wb3dlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBuZWVkX2JvdW5kYXJ5X2RlbHRhcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBudW1lcmF0b3IsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogZGVub21pbmF0b3IsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogZGVsdGFfbWludXMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogZGVsdGFfcGx1
cyk7CisgICAgLy8gTXVsdGlwbGllcyBudW1lcmF0b3IvZGVub21pbmF0b3Igc28gdGhhdCBpdHMg
dmFsdWVzIGxpZXMgaW4gdGhlIHJhbmdlIDEtMTAuCisgICAgLy8gUmV0dXJucyBkZWNpbWFsX3Bv
aW50IHMudC4KKyAgICAvLyAgdiA9IG51bWVyYXRvcicvZGVub21pbmF0b3InICogMTBeKGRlY2lt
YWxfcG9pbnQtMSkKKyAgICAvLyAgICAgd2hlcmUgbnVtZXJhdG9yJyBhbmQgZGVub21pbmF0b3In
IGFyZSB0aGUgdmFsdWVzIG9mIG51bWVyYXRvciBhbmQKKyAgICAvLyAgICAgZGVub21pbmF0b3Ig
YWZ0ZXIgdGhlIGNhbGwgdG8gdGhpcyBmdW5jdGlvbi4KKyAgICBzdGF0aWMgdm9pZCBGaXh1cE11
bHRpcGx5MTAoaW50IGVzdGltYXRlZF9wb3dlciwgYm9vbCBpc19ldmVuLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQqIGRlY2ltYWxfcG9pbnQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEJpZ251bSogbnVtZXJhdG9yLCBCaWdudW0qIGRlbm9taW5hdG9yLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIGRlbHRhX21pbnVzLCBCaWdu
dW0qIGRlbHRhX3BsdXMpOworICAgIC8vIEdlbmVyYXRlcyBkaWdpdHMgZnJvbSB0aGUgbGVmdCB0
byB0aGUgcmlnaHQgYW5kIHN0b3BzIHdoZW4gdGhlIGdlbmVyYXRlZAorICAgIC8vIGRpZ2l0cyB5
aWVsZCB0aGUgc2hvcnRlc3QgZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiB2LgorICAgIHN0YXRp
YyB2b2lkIEdlbmVyYXRlU2hvcnRlc3REaWdpdHMoQmlnbnVtKiBudW1lcmF0b3IsIEJpZ251bSog
ZGVub21pbmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdu
dW0qIGRlbHRhX21pbnVzLCBCaWdudW0qIGRlbHRhX3BsdXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGlzX2V2ZW4sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLCBpbnQqIGxlbmd0aCk7CisgICAg
Ly8gR2VuZXJhdGVzICdyZXF1ZXN0ZWRfZGlnaXRzJyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludC4K
KyAgICBzdGF0aWMgdm9pZCBCaWdudW1Ub0ZpeGVkKGludCByZXF1ZXN0ZWRfZGlnaXRzLCBpbnQq
IGRlY2ltYWxfcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIG51
bWVyYXRvciwgQmlnbnVtKiBkZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFZlY3RvcjxjaGFyPihidWZmZXIpLCBpbnQqIGxlbmd0aCk7CisgICAgLy8gR2VuZXJhdGVz
ICdjb3VudCcgZGlnaXRzIG9mIG51bWVyYXRvci9kZW5vbWluYXRvci4KKyAgICAvLyBPbmNlICdj
b3VudCcgZGlnaXRzIGhhdmUgYmVlbiBwcm9kdWNlZCByb3VuZHMgdGhlIHJlc3VsdCBkZXBlbmRp
bmcgb24gdGhlCisgICAgLy8gcmVtYWluZGVyIChyZW1haW5kZXJzIG9mIGV4YWN0bHkgLjUgcm91
bmQgdXB3YXJkcykuIE1pZ2h0IHVwZGF0ZSB0aGUKKyAgICAvLyBkZWNpbWFsX3BvaW50IHdoZW4g
cm91bmRpbmcgdXAgKGZvciBleGFtcGxlIGZvciAwLjk5OTkpLgorICAgIHN0YXRpYyB2b2lkIEdl
bmVyYXRlQ291bnRlZERpZ2l0cyhpbnQgY291bnQsIGludCogZGVjaW1hbF9wb2ludCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBudW1lcmF0b3IsIEJpZ251
bSogZGVub21pbmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZl
Y3RvcjxjaGFyPihidWZmZXIpLCBpbnQqIGxlbmd0aCk7CisgICAgCisgICAgCisgICAgdm9pZCBC
aWdudW1EdG9hKGRvdWJsZSB2LCBCaWdudW1EdG9hTW9kZSBtb2RlLCBpbnQgcmVxdWVzdGVkX2Rp
Z2l0cywKKyAgICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwgaW50KiBsZW5n
dGgsIGludCogZGVjaW1hbF9wb2ludCkgeworICAgICAgICBBU1NFUlQodiA+IDApOworICAgICAg
ICBBU1NFUlQoIURvdWJsZSh2KS5Jc1NwZWNpYWwoKSk7CisgICAgICAgIHVpbnQ2NF90IHNpZ25p
ZmljYW5kID0gRG91YmxlKHYpLlNpZ25pZmljYW5kKCk7CisgICAgICAgIGJvb2wgaXNfZXZlbiA9
IChzaWduaWZpY2FuZCAmIDEpID09IDA7CisgICAgICAgIGludCBleHBvbmVudCA9IERvdWJsZSh2
KS5FeHBvbmVudCgpOworICAgICAgICBpbnQgbm9ybWFsaXplZF9leHBvbmVudCA9IE5vcm1hbGl6
ZWRFeHBvbmVudChzaWduaWZpY2FuZCwgZXhwb25lbnQpOworICAgICAgICAvLyBlc3RpbWF0ZWRf
cG93ZXIgbWlnaHQgYmUgdG9vIGxvdyBieSAxLgorICAgICAgICBpbnQgZXN0aW1hdGVkX3Bvd2Vy
ID0gRXN0aW1hdGVQb3dlcihub3JtYWxpemVkX2V4cG9uZW50KTsKKyAgICAgICAgCisgICAgICAg
IC8vIFNob3J0Y3V0IGZvciBGaXhlZC4KKyAgICAgICAgLy8gVGhlIHJlcXVlc3RlZCBkaWdpdHMg
Y29ycmVzcG9uZCB0byB0aGUgZGlnaXRzIGFmdGVyIHRoZSBwb2ludC4gSWYgdGhlCisgICAgICAg
IC8vIG51bWJlciBpcyBtdWNoIHRvbyBzbWFsbCwgdGhlbiB0aGVyZSBpcyBubyBuZWVkIGluIHRy
eWluZyB0byBnZXQgYW55CisgICAgICAgIC8vIGRpZ2l0cy4KKyAgICAgICAgaWYgKG1vZGUgPT0g
QklHTlVNX0RUT0FfRklYRUQgJiYgLWVzdGltYXRlZF9wb3dlciAtIDEgPiByZXF1ZXN0ZWRfZGln
aXRzKSB7CisgICAgICAgICAgICBidWZmZXJbMF0gPSAnXDAnOworICAgICAgICAgICAgKmxlbmd0
aCA9IDA7CisgICAgICAgICAgICAvLyBTZXQgZGVjaW1hbC1wb2ludCB0byAtcmVxdWVzdGVkX2Rp
Z2l0cy4gVGhpcyBpcyB3aGF0IEdheSBkb2VzLgorICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGl0
IHNob3VsZCBub3QgaGF2ZSBhbnkgZWZmZWN0IGFueXdheXMgc2luY2UgdGhlIHN0cmluZyBpcwor
ICAgICAgICAgICAgLy8gZW1wdHkuCisgICAgICAgICAgICAqZGVjaW1hbF9wb2ludCA9IC1yZXF1
ZXN0ZWRfZGlnaXRzOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBCaWdudW0gbnVtZXJhdG9yOworICAgICAgICBCaWdudW0gZGVub21pbmF0b3I7Cisg
ICAgICAgIEJpZ251bSBkZWx0YV9taW51czsKKyAgICAgICAgQmlnbnVtIGRlbHRhX3BsdXM7Cisg
ICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgYmlnbnVtIGNhbiBncm93IGxhcmdlIGVub3VnaC4gVGhl
IHNtYWxsZXN0IGRvdWJsZSBlcXVhbHMKKyAgICAgICAgLy8gNGUtMzI0LiBJbiB0aGlzIGNhc2Ug
dGhlIGRlbm9taW5hdG9yIG5lZWRzIGZld2VyIHRoYW4gMzI0KjQgYmluYXJ5IGRpZ2l0cy4KKyAg
ICAgICAgLy8gVGhlIG1heGltdW0gZG91YmxlIGlzIDEuNzk3NjkzMTM0ODYyMzE1N2UzMDggd2hp
Y2ggbmVlZHMgZmV3ZXIgdGhhbgorICAgICAgICAvLyAzMDgqNCBiaW5hcnkgZGlnaXRzLgorICAg
ICAgICBBU1NFUlQoQmlnbnVtOjprTWF4U2lnbmlmaWNhbnRCaXRzID49IDMyNCo0KTsKKyAgICAg
ICAgYm9vbCBuZWVkX2JvdW5kYXJ5X2RlbHRhcyA9IChtb2RlID09IEJJR05VTV9EVE9BX1NIT1JU
RVNUKTsKKyAgICAgICAgSW5pdGlhbFNjYWxlZFN0YXJ0VmFsdWVzKHYsIGVzdGltYXRlZF9wb3dl
ciwgbmVlZF9ib3VuZGFyeV9kZWx0YXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmbnVtZXJhdG9yLCAmZGVub21pbmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmZGVsdGFfbWludXMsICZkZWx0YV9wbHVzKTsKKyAgICAgICAgLy8gV2Ugbm93IGhhdmUg
diA9IChudW1lcmF0b3IgLyBkZW5vbWluYXRvcikgKiAxMF5lc3RpbWF0ZWRfcG93ZXIuCisgICAg
ICAgIEZpeHVwTXVsdGlwbHkxMChlc3RpbWF0ZWRfcG93ZXIsIGlzX2V2ZW4sIGRlY2ltYWxfcG9p
bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAmbnVtZXJhdG9yLCAmZGVub21pbmF0b3IsCisg
ICAgICAgICAgICAgICAgICAgICAgICAmZGVsdGFfbWludXMsICZkZWx0YV9wbHVzKTsKKyAgICAg
ICAgLy8gV2Ugbm93IGhhdmUgdiA9IChudW1lcmF0b3IgLyBkZW5vbWluYXRvcikgKiAxMF4oZGVj
aW1hbF9wb2ludC0xKSwgYW5kCisgICAgICAgIC8vICAxIDw9IChudW1lcmF0b3IgKyBkZWx0YV9w
bHVzKSAvIGRlbm9taW5hdG9yIDwgMTAKKyAgICAgICAgc3dpdGNoIChtb2RlKSB7CisgICAgICAg
ICAgICBjYXNlIEJJR05VTV9EVE9BX1NIT1JURVNUOgorICAgICAgICAgICAgICAgIEdlbmVyYXRl
U2hvcnRlc3REaWdpdHMoJm51bWVyYXRvciwgJmRlbm9taW5hdG9yLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJmRlbHRhX21pbnVzLCAmZGVsdGFfcGx1cywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX2V2ZW4sIGJ1ZmZlciwgbGVuZ3Ro
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQklHTlVNX0RUT0Ff
RklYRUQ6CisgICAgICAgICAgICAgICAgQmlnbnVtVG9GaXhlZChyZXF1ZXN0ZWRfZGlnaXRzLCBk
ZWNpbWFsX3BvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm51bWVyYXRvciwg
JmRlbm9taW5hdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBsZW5n
dGgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCSUdOVU1fRFRP
QV9QUkVDSVNJT046CisgICAgICAgICAgICAgICAgR2VuZXJhdGVDb3VudGVkRGlnaXRzKHJlcXVl
c3RlZF9kaWdpdHMsIGRlY2ltYWxfcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZudW1lcmF0b3IsICZkZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnVmZmVyLCBsZW5ndGgpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICB9CisgICAgICAgIGJ1ZmZlclsqbGVuZ3RoXSA9ICdcMCc7CisgICAgfQorICAgIAor
ICAgIAorICAgIC8vIFRoZSBwcm9jZWR1cmUgc3RhcnRzIGdlbmVyYXRpbmcgZGlnaXRzIGZyb20g
dGhlIGxlZnQgdG8gdGhlIHJpZ2h0IGFuZCBzdG9wcworICAgIC8vIHdoZW4gdGhlIGdlbmVyYXRl
ZCBkaWdpdHMgeWllbGQgdGhlIHNob3J0ZXN0IGRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2Ygdi4g
QQorICAgIC8vIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgdiBpcyBhIG51bWJlciBseWluZyBj
bG9zZXIgdG8gdiB0aGFuIHRvIGFueSBvdGhlcgorICAgIC8vIGRvdWJsZSwgc28gaXQgY29udmVy
dHMgdG8gdiB3aGVuIHJlYWQuCisgICAgLy8KKyAgICAvLyBUaGlzIGlzIHRydWUgaWYgZCwgdGhl
IGRlY2ltYWwgcmVwcmVzZW50YXRpb24sIGlzIGJldHdlZW4gbS0gYW5kIG0rLCB0aGUKKyAgICAv
LyB1cHBlciBhbmQgbG93ZXIgYm91bmRhcmllcy4gZCBtdXN0IGJlIHN0cmljdGx5IGJldHdlZW4g
dGhlbSBpZiAhaXNfZXZlbi4KKyAgICAvLyAgICAgICAgICAgbS0gOj0gKG51bWVyYXRvciAtIGRl
bHRhX21pbnVzKSAvIGRlbm9taW5hdG9yCisgICAgLy8gICAgICAgICAgIG0rIDo9IChudW1lcmF0
b3IgKyBkZWx0YV9wbHVzKSAvIGRlbm9taW5hdG9yCisgICAgLy8KKyAgICAvLyBQcmVjb25kaXRp
b246IDAgPD0gKG51bWVyYXRvcitkZWx0YV9wbHVzKSAvIGRlbm9taW5hdG9yIDwgMTAuCisgICAg
Ly8gICBJZiAxIDw9IChudW1lcmF0b3IrZGVsdGFfcGx1cykgLyBkZW5vbWluYXRvciA8IDEwIHRo
ZW4gbm8gbGVhZGluZyAwIGRpZ2l0CisgICAgLy8gICB3aWxsIGJlIHByb2R1Y2VkLiBUaGlzIHNo
b3VsZCBiZSB0aGUgc3RhbmRhcmQgcHJlY29uZGl0aW9uLgorICAgIHN0YXRpYyB2b2lkIEdlbmVy
YXRlU2hvcnRlc3REaWdpdHMoQmlnbnVtKiBudW1lcmF0b3IsIEJpZ251bSogZGVub21pbmF0b3Is
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIGRlbHRhX21p
bnVzLCBCaWdudW0qIGRlbHRhX3BsdXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGlzX2V2ZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLCBpbnQqIGxlbmd0aCkgeworICAgICAgICAvLyBTbWFs
bCBvcHRpbWl6YXRpb246IGlmIGRlbHRhX21pbnVzIGFuZCBkZWx0YV9wbHVzIGFyZSB0aGUgc2Ft
ZSBqdXN0IHJldXNlCisgICAgICAgIC8vIG9uZSBvZiB0aGUgdHdvIGJpZ251bXMuCisgICAgICAg
IGlmIChCaWdudW06OkVxdWFsKCpkZWx0YV9taW51cywgKmRlbHRhX3BsdXMpKSB7CisgICAgICAg
ICAgICBkZWx0YV9wbHVzID0gZGVsdGFfbWludXM7CisgICAgICAgIH0KKyAgICAgICAgKmxlbmd0
aCA9IDA7CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICB1aW50MTZfdCBkaWdp
dDsKKyAgICAgICAgICAgIGRpZ2l0ID0gbnVtZXJhdG9yLT5EaXZpZGVNb2R1bG9JbnRCaWdudW0o
KmRlbm9taW5hdG9yKTsKKyAgICAgICAgICAgIEFTU0VSVChkaWdpdCA8PSA5KTsgIC8vIGRpZ2l0
IGlzIGEgdWludDE2X3QgYW5kIHRoZXJlZm9yZSBhbHdheXMgcG9zaXRpdmUuCisgICAgICAgICAg
ICAvLyBkaWdpdCA9IG51bWVyYXRvciAvIGRlbm9taW5hdG9yIChpbnRlZ2VyIGRpdmlzaW9uKS4K
KyAgICAgICAgICAgIC8vIG51bWVyYXRvciA9IG51bWVyYXRvciAlIGRlbm9taW5hdG9yLgorICAg
ICAgICAgICAgYnVmZmVyWygqbGVuZ3RoKSsrXSA9IGRpZ2l0ICsgJzAnOworICAgICAgICAgICAg
CisgICAgICAgICAgICAvLyBDYW4gd2Ugc3RvcCBhbHJlYWR5PworICAgICAgICAgICAgLy8gSWYg
dGhlIHJlbWFpbmRlciBvZiB0aGUgZGl2aXNpb24gaXMgbGVzcyB0aGFuIHRoZSBkaXN0YW5jZSB0
byB0aGUgbG93ZXIKKyAgICAgICAgICAgIC8vIGJvdW5kYXJ5IHdlIGNhbiBzdG9wLiBJbiB0aGlz
IGNhc2Ugd2Ugc2ltcGx5IHJvdW5kIGRvd24gKGRpc2NhcmRpbmcgdGhlCisgICAgICAgICAgICAv
LyByZW1haW5kZXIpLgorICAgICAgICAgICAgLy8gU2ltaWxhcmx5IHdlIHRlc3QgaWYgd2UgY2Fu
IHJvdW5kIHVwICh1c2luZyB0aGUgdXBwZXIgYm91bmRhcnkpLgorICAgICAgICAgICAgYm9vbCBp
bl9kZWx0YV9yb29tX21pbnVzOworICAgICAgICAgICAgYm9vbCBpbl9kZWx0YV9yb29tX3BsdXM7
CisgICAgICAgICAgICBpZiAoaXNfZXZlbikgeworICAgICAgICAgICAgICAgIGluX2RlbHRhX3Jv
b21fbWludXMgPSBCaWdudW06Okxlc3NFcXVhbCgqbnVtZXJhdG9yLCAqZGVsdGFfbWludXMpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbl9kZWx0YV9yb29tX21pbnVz
ID0gQmlnbnVtOjpMZXNzKCpudW1lcmF0b3IsICpkZWx0YV9taW51cyk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoaXNfZXZlbikgeworICAgICAgICAgICAgICAgIGluX2RlbHRhX3Jv
b21fcGx1cyA9CisgICAgICAgICAgICAgICAgQmlnbnVtOjpQbHVzQ29tcGFyZSgqbnVtZXJhdG9y
LCAqZGVsdGFfcGx1cywgKmRlbm9taW5hdG9yKSA+PSAwOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBpbl9kZWx0YV9yb29tX3BsdXMgPQorICAgICAgICAgICAgICAgIEJp
Z251bTo6UGx1c0NvbXBhcmUoKm51bWVyYXRvciwgKmRlbHRhX3BsdXMsICpkZW5vbWluYXRvcikg
PiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFpbl9kZWx0YV9yb29tX21pbnVz
ICYmICFpbl9kZWx0YV9yb29tX3BsdXMpIHsKKyAgICAgICAgICAgICAgICAvLyBQcmVwYXJlIGZv
ciBuZXh0IGl0ZXJhdGlvbi4KKyAgICAgICAgICAgICAgICBudW1lcmF0b3ItPlRpbWVzMTAoKTsK
KyAgICAgICAgICAgICAgICBkZWx0YV9taW51cy0+VGltZXMxMCgpOworICAgICAgICAgICAgICAg
IC8vIFdlIG9wdGltaXplZCBkZWx0YV9wbHVzIHRvIGJlIGVxdWFsIHRvIGRlbHRhX21pbnVzIChp
ZiB0aGV5IHNoYXJlIHRoZQorICAgICAgICAgICAgICAgIC8vIHNhbWUgdmFsdWUpLiBTbyBkb24n
dCBtdWx0aXBseSBkZWx0YV9wbHVzIGlmIHRoZXkgcG9pbnQgdG8gdGhlIHNhbWUKKyAgICAgICAg
ICAgICAgICAvLyBvYmplY3QuCisgICAgICAgICAgICAgICAgaWYgKGRlbHRhX21pbnVzICE9IGRl
bHRhX3BsdXMpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsdGFfcGx1cy0+VGltZXMxMCgpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5fZGVsdGFfcm9vbV9t
aW51cyAmJiBpbl9kZWx0YV9yb29tX3BsdXMpIHsKKyAgICAgICAgICAgICAgICAvLyBMZXQncyBz
ZWUgaWYgMipudW1lcmF0b3IgPCBkZW5vbWluYXRvci4KKyAgICAgICAgICAgICAgICAvLyBJZiB5
ZXMsIHRoZW4gdGhlIG5leHQgZGlnaXQgd291bGQgYmUgPCA1IGFuZCB3ZSBjYW4gcm91bmQgZG93
bi4KKyAgICAgICAgICAgICAgICBpbnQgY29tcGFyZSA9IEJpZ251bTo6UGx1c0NvbXBhcmUoKm51
bWVyYXRvciwgKm51bWVyYXRvciwgKmRlbm9taW5hdG9yKTsKKyAgICAgICAgICAgICAgICBpZiAo
Y29tcGFyZSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUmVtYWluaW5nIGRpZ2l0cyBh
cmUgbGVzcyB0aGFuIC41LiAtPiBSb3VuZCBkb3duICg9PSBkbyBub3RoaW5nKS4KKyAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGNvbXBhcmUgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IFJlbWFpbmluZyBkaWdpdHMgYXJlIG1vcmUgdGhhbiAuNSBvZiBkZW5vbWluYXRvci4gLT4gUm91
bmQgdXAuCisgICAgICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgbGFzdCBkaWdpdCBj
b3VsZCBub3QgYmUgYSAnOScgYXMgb3RoZXJ3aXNlIHRoZSB3aG9sZQorICAgICAgICAgICAgICAg
ICAgICAvLyBsb29wIHdvdWxkIGhhdmUgc3RvcHBlZCBlYXJsaWVyLgorICAgICAgICAgICAgICAg
ICAgICAvLyBXZSBzdGlsbCBoYXZlIGFuIGFzc2VydCBoZXJlIGluIGNhc2UgdGhlIHByZWNvbmRp
dGlvbnMgd2VyZSBub3QKKyAgICAgICAgICAgICAgICAgICAgLy8gc2F0aXNmaWVkLgorICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoYnVmZmVyWygqbGVuZ3RoKSAtIDFdICE9ICc5Jyk7CisgICAg
ICAgICAgICAgICAgICAgIGJ1ZmZlclsoKmxlbmd0aCkgLSAxXSsrOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEhhbGZ3YXkgY2FzZS4KKyAgICAgICAg
ICAgICAgICAgICAgLy8gVE9ETyhmbG9pdHNjaCk6IG5lZWQgYSB3YXkgdG8gc29sdmUgaGFsZi13
YXkgY2FzZXMuCisgICAgICAgICAgICAgICAgICAgIC8vICAgRm9yIG5vdyBsZXQncyByb3VuZCB0
b3dhcmRzIGV2ZW4gKHNpbmNlIHRoaXMgaXMgd2hhdCBHYXkgc2VlbXMgdG8KKyAgICAgICAgICAg
ICAgICAgICAgLy8gICBkbykuCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICBpZiAoKGJ1ZmZlclsoKmxlbmd0aCkgLSAxXSAtICcwJykgJSAyID09IDApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFJvdW5kIGRvd24gPT4gRG8gbm90aGluZy4KKyAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChidWZm
ZXJbKCpsZW5ndGgpIC0gMV0gIT0gJzknKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZl
clsoKmxlbmd0aCkgLSAxXSsrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5f
ZGVsdGFfcm9vbV9taW51cykgeworICAgICAgICAgICAgICAgIC8vIFJvdW5kIGRvd24gKD09IGRv
IG5vdGhpbmcpLgorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0gZWxzZSB7
ICAvLyBpbl9kZWx0YV9yb29tX3BsdXMKKyAgICAgICAgICAgICAgICAvLyBSb3VuZCB1cC4KKyAg
ICAgICAgICAgICAgICAvLyBOb3RlIGFnYWluIHRoYXQgdGhlIGxhc3QgZGlnaXQgY291bGQgbm90
IGJlICc5JyBzaW5jZSB0aGlzIHdvdWxkIGhhdmUKKyAgICAgICAgICAgICAgICAvLyBzdG9wcGVk
IHRoZSBsb29wIGVhcmxpZXIuCisgICAgICAgICAgICAgICAgLy8gV2Ugc3RpbGwgaGF2ZSBhbiBB
U1NFUlQgaGVyZSwgaW4gY2FzZSB0aGUgcHJlY29uZGl0aW9ucyB3ZXJlIG5vdAorICAgICAgICAg
ICAgICAgIC8vIHNhdGlzZmllZC4KKyAgICAgICAgICAgICAgICBBU1NFUlQoYnVmZmVyWygqbGVu
Z3RoKSAtMV0gIT0gJzknKTsKKyAgICAgICAgICAgICAgICBidWZmZXJbKCpsZW5ndGgpIC0gMV0r
KzsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgCisgICAgLy8gTGV0IHYgPSBudW1lcmF0b3IgLyBkZW5vbWluYXRvciA8
IDEwLgorICAgIC8vIFRoZW4gd2UgZ2VuZXJhdGUgJ2NvdW50JyBkaWdpdHMgb2YgZCA9IHgueHh4
eHguLi4gKHdpdGhvdXQgdGhlIGRlY2ltYWwgcG9pbnQpCisgICAgLy8gZnJvbSBsZWZ0IHRvIHJp
Z2h0LiBPbmNlICdjb3VudCcgZGlnaXRzIGhhdmUgYmVlbiBwcm9kdWNlZCB3ZSBkZWNpZGUgd2V0
aGVyCisgICAgLy8gdG8gcm91bmQgdXAgb3IgZG93bi4gUmVtYWluZGVycyBvZiBleGFjdGx5IC41
IHJvdW5kIHVwd2FyZHMuIE51bWJlcnMgc3VjaAorICAgIC8vIGFzIDkuOTk5OTk5IHByb3BhZ2F0
ZSBhIGNhcnJ5IGFsbCB0aGUgd2F5LCBhbmQgY2hhbmdlIHRoZQorICAgIC8vIGV4cG9uZW50IChk
ZWNpbWFsX3BvaW50KSwgd2hlbiByb3VuZGluZyB1cHdhcmRzLgorICAgIHN0YXRpYyB2b2lkIEdl
bmVyYXRlQ291bnRlZERpZ2l0cyhpbnQgY291bnQsIGludCogZGVjaW1hbF9wb2ludCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBudW1lcmF0b3IsIEJpZ251
bSogZGVub21pbmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZl
Y3RvcjxjaGFyPihidWZmZXIpLCBpbnQqIGxlbmd0aCkgeworICAgICAgICBBU1NFUlQoY291bnQg
Pj0gMCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgLSAxOyArK2kpIHsKKyAg
ICAgICAgICAgIHVpbnQxNl90IGRpZ2l0OworICAgICAgICAgICAgZGlnaXQgPSBudW1lcmF0b3It
PkRpdmlkZU1vZHVsb0ludEJpZ251bSgqZGVub21pbmF0b3IpOworICAgICAgICAgICAgQVNTRVJU
KGRpZ2l0IDw9IDkpOyAgLy8gZGlnaXQgaXMgYSB1aW50MTZfdCBhbmQgdGhlcmVmb3JlIGFsd2F5
cyBwb3NpdGl2ZS4KKyAgICAgICAgICAgIC8vIGRpZ2l0ID0gbnVtZXJhdG9yIC8gZGVub21pbmF0
b3IgKGludGVnZXIgZGl2aXNpb24pLgorICAgICAgICAgICAgLy8gbnVtZXJhdG9yID0gbnVtZXJh
dG9yICUgZGVub21pbmF0b3IuCisgICAgICAgICAgICBidWZmZXJbaV0gPSBkaWdpdCArICcwJzsK
KyAgICAgICAgICAgIC8vIFByZXBhcmUgZm9yIG5leHQgaXRlcmF0aW9uLgorICAgICAgICAgICAg
bnVtZXJhdG9yLT5UaW1lczEwKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gR2VuZXJhdGUgdGhl
IGxhc3QgZGlnaXQuCisgICAgICAgIHVpbnQxNl90IGRpZ2l0OworICAgICAgICBkaWdpdCA9IG51
bWVyYXRvci0+RGl2aWRlTW9kdWxvSW50QmlnbnVtKCpkZW5vbWluYXRvcik7CisgICAgICAgIGlm
IChCaWdudW06OlBsdXNDb21wYXJlKCpudW1lcmF0b3IsICpudW1lcmF0b3IsICpkZW5vbWluYXRv
cikgPj0gMCkgeworICAgICAgICAgICAgZGlnaXQrKzsKKyAgICAgICAgfQorICAgICAgICBidWZm
ZXJbY291bnQgLSAxXSA9IGRpZ2l0ICsgJzAnOworICAgICAgICAvLyBDb3JyZWN0IGJhZCBkaWdp
dHMgKGluIGNhc2Ugd2UgaGFkIGEgc2VxdWVuY2Ugb2YgJzkncykuIFByb3BhZ2F0ZSB0aGUKKyAg
ICAgICAgLy8gY2FycnkgdW50aWwgd2UgaGF0IGEgbm9uLSc5JyBvciB0aWwgd2UgcmVhY2ggdGhl
IGZpcnN0IGRpZ2l0LgorICAgICAgICBmb3IgKGludCBpID0gY291bnQgLSAxOyBpID4gMDsgLS1p
KSB7CisgICAgICAgICAgICBpZiAoYnVmZmVyW2ldICE9ICcwJyArIDEwKSBicmVhazsKKyAgICAg
ICAgICAgIGJ1ZmZlcltpXSA9ICcwJzsKKyAgICAgICAgICAgIGJ1ZmZlcltpIC0gMV0rKzsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoYnVmZmVyWzBdID09ICcwJyArIDEwKSB7CisgICAgICAgICAg
ICAvLyBQcm9wYWdhdGUgYSBjYXJyeSBwYXN0IHRoZSB0b3AgcGxhY2UuCisgICAgICAgICAgICBi
dWZmZXJbMF0gPSAnMSc7CisgICAgICAgICAgICAoKmRlY2ltYWxfcG9pbnQpKys7CisgICAgICAg
IH0KKyAgICAgICAgKmxlbmd0aCA9IGNvdW50OworICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBH
ZW5lcmF0ZXMgJ3JlcXVlc3RlZF9kaWdpdHMnIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50LiBJdCBt
aWdodCBvbWl0CisgICAgLy8gdHJhaWxpbmcgJzAncy4gSWYgdGhlIGlucHV0IG51bWJlciBpcyB0
b28gc21hbGwgdGhlbiBubyBkaWdpdHMgYXQgYWxsIGFyZQorICAgIC8vIGdlbmVyYXRlZCAoZXgu
OiAyIGZpeGVkIGRpZ2l0cyBmb3IgMC4wMDAwMSkuCisgICAgLy8KKyAgICAvLyBJbnB1dCB2ZXJp
ZmllczogIDEgPD0gKG51bWVyYXRvciArIGRlbHRhKSAvIGRlbm9taW5hdG9yIDwgMTAuCisgICAg
c3RhdGljIHZvaWQgQmlnbnVtVG9GaXhlZChpbnQgcmVxdWVzdGVkX2RpZ2l0cywgaW50KiBkZWNp
bWFsX3BvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBudW1lcmF0
b3IsIEJpZ251bSogZGVub21pbmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBW
ZWN0b3I8Y2hhcj4oYnVmZmVyKSwgaW50KiBsZW5ndGgpIHsKKyAgICAgICAgLy8gTm90ZSB0aGF0
IHdlIGhhdmUgdG8gbG9vayBhdCBtb3JlIHRoYW4ganVzdCB0aGUgcmVxdWVzdGVkX2RpZ2l0cywg
c2luY2UKKyAgICAgICAgLy8gYSBudW1iZXIgY291bGQgYmUgcm91bmRlZCB1cC4gRXhhbXBsZTog
dj0wLjUgd2l0aCByZXF1ZXN0ZWRfZGlnaXRzPTAuCisgICAgICAgIC8vIEV2ZW4gdGhvdWdoIHRo
ZSBwb3dlciBvZiB2IGVxdWFscyAwIHdlIGNhbid0IGp1c3Qgc3RvcCBoZXJlLgorICAgICAgICBp
ZiAoLSgqZGVjaW1hbF9wb2ludCkgPiByZXF1ZXN0ZWRfZGlnaXRzKSB7CisgICAgICAgICAgICAv
LyBUaGUgbnVtYmVyIGlzIGRlZmluaXRpdmVseSB0b28gc21hbGwuCisgICAgICAgICAgICAvLyBF
eDogMC4wMDEgd2l0aCByZXF1ZXN0ZWRfZGlnaXRzID09IDEuCisgICAgICAgICAgICAvLyBTZXQg
ZGVjaW1hbC1wb2ludCB0byAtcmVxdWVzdGVkX2RpZ2l0cy4gVGhpcyBpcyB3aGF0IEdheSBkb2Vz
LgorICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGl0IHNob3VsZCBub3QgaGF2ZSBhbnkgZWZmZWN0
IGFueXdheXMgc2luY2UgdGhlIHN0cmluZyBpcworICAgICAgICAgICAgLy8gZW1wdHkuCisgICAg
ICAgICAgICAqZGVjaW1hbF9wb2ludCA9IC1yZXF1ZXN0ZWRfZGlnaXRzOworICAgICAgICAgICAg
Kmxlbmd0aCA9IDA7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAoLSgq
ZGVjaW1hbF9wb2ludCkgPT0gcmVxdWVzdGVkX2RpZ2l0cykgeworICAgICAgICAgICAgLy8gV2Ug
b25seSBuZWVkIHRvIHZlcmlmeSBpZiB0aGUgbnVtYmVyIHJvdW5kcyBkb3duIG9yIHVwLgorICAg
ICAgICAgICAgLy8gRXg6IDAuMDQgYW5kIDAuMDYgd2l0aCByZXF1ZXN0ZWRfZGlnaXRzID09IDEu
CisgICAgICAgICAgICBBU1NFUlQoKmRlY2ltYWxfcG9pbnQgPT0gLXJlcXVlc3RlZF9kaWdpdHMp
OworICAgICAgICAgICAgLy8gSW5pdGlhbGx5IHRoZSBmcmFjdGlvbiBsaWVzIGluIHJhbmdlICgx
LCAxMF0uIE11bHRpcGx5IHRoZSBkZW5vbWluYXRvcgorICAgICAgICAgICAgLy8gYnkgMTAgc28g
dGhhdCB3ZSBjYW4gY29tcGFyZSBtb3JlIGVhc2lseS4KKyAgICAgICAgICAgIGRlbm9taW5hdG9y
LT5UaW1lczEwKCk7CisgICAgICAgICAgICBpZiAoQmlnbnVtOjpQbHVzQ29tcGFyZSgqbnVtZXJh
dG9yLCAqbnVtZXJhdG9yLCAqZGVub21pbmF0b3IpID49IDApIHsKKyAgICAgICAgICAgICAgICAv
LyBJZiB0aGUgZnJhY3Rpb24gaXMgPj0gMC41IHRoZW4gd2UgaGF2ZSB0byBpbmNsdWRlIHRoZSBy
b3VuZGVkCisgICAgICAgICAgICAgICAgLy8gZGlnaXQuCisgICAgICAgICAgICAgICAgYnVmZmVy
WzBdID0gJzEnOworICAgICAgICAgICAgICAgICpsZW5ndGggPSAxOworICAgICAgICAgICAgICAg
ICgqZGVjaW1hbF9wb2ludCkrKzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgLy8gTm90ZSB0aGF0IHdlIGNhdWdodCBtb3N0IG9mIHNpbWlsYXIgY2FzZXMgZWFybGllci4K
KyAgICAgICAgICAgICAgICAqbGVuZ3RoID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFRoZSByZXF1ZXN0ZWQg
ZGlnaXRzIGNvcnJlc3BvbmQgdG8gdGhlIGRpZ2l0cyBhZnRlciB0aGUgcG9pbnQuCisgICAgICAg
ICAgICAvLyBUaGUgdmFyaWFibGUgJ25lZWRlZF9kaWdpdHMnIGluY2x1ZGVzIHRoZSBkaWdpdHMg
YmVmb3JlIHRoZSBwb2ludC4KKyAgICAgICAgICAgIGludCBuZWVkZWRfZGlnaXRzID0gKCpkZWNp
bWFsX3BvaW50KSArIHJlcXVlc3RlZF9kaWdpdHM7CisgICAgICAgICAgICBHZW5lcmF0ZUNvdW50
ZWREaWdpdHMobmVlZGVkX2RpZ2l0cywgZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBudW1lcmF0b3IsIGRlbm9taW5hdG9yLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICAKKyAgICAvLyBSZXR1cm5zIGFuIGVzdGltYXRpb24gb2YgayBzdWNoIHRoYXQgMTBe
KGstMSkgPD0gdiA8IDEwXmsgd2hlcmUKKyAgICAvLyB2ID0gZiAqIDJeZXhwb25lbnQgYW5kIDJe
NTIgPD0gZiA8IDJeNTMuCisgICAgLy8gdiBpcyBoZW5jZSBhIG5vcm1hbGl6ZWQgZG91YmxlIHdp
dGggdGhlIGdpdmVuIGV4cG9uZW50LiBUaGUgb3V0cHV0IGlzIGFuCisgICAgLy8gYXBwcm94aW1h
dGlvbiBmb3IgdGhlIGV4cG9uZW50IG9mIHRoZSBkZWNpbWFsIGFwcHJvaW1hdGlvbiAuZGlnaXRz
ICogMTBeay4KKyAgICAvLworICAgIC8vIFRoZSByZXN1bHQgbWlnaHQgdW5kZXJzaG9vdCBieSAx
IGluIHdoaWNoIGNhc2UgMTBeayA8PSB2IDwgMTBeaysxLgorICAgIC8vIE5vdGU6IHRoaXMgcHJv
cGVydHkgaG9sZHMgZm9yIHYncyB1cHBlciBib3VuZGFyeSBtKyB0b28uCisgICAgLy8gICAgMTBe
ayA8PSBtKyA8IDEwXmsrMS4KKyAgICAvLyAgIChzZWUgZXhwbGFuYXRpb24gYmVsb3cpLgorICAg
IC8vCisgICAgLy8gRXhhbXBsZXM6CisgICAgLy8gIEVzdGltYXRlUG93ZXIoMCkgICA9PiAxNgor
ICAgIC8vICBFc3RpbWF0ZVBvd2VyKC01MikgPT4gMAorICAgIC8vCisgICAgLy8gTm90ZTogZSA+
PSAwID0+IEVzdGltYXRlZFBvd2VyKGUpID4gMC4gTm8gc2ltaWxhciBjbGFpbSBjYW4gYmUgbWFk
ZSBmb3IgZTwwLgorICAgIHN0YXRpYyBpbnQgRXN0aW1hdGVQb3dlcihpbnQgZXhwb25lbnQpIHsK
KyAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBlc3RpbWF0ZXMgbG9nMTAgb2YgdiB3aGVyZSB2ID0g
ZioyXmUgKHdpdGggZSA9PSBleHBvbmVudCkuCisgICAgICAgIC8vIE5vdGUgdGhhdCAxMF5mbG9v
cihsb2cxMCh2KSkgPD0gdiwgYnV0IHYgPD0gMTBeY2VpbChsb2cxMCh2KSkuCisgICAgICAgIC8v
IE5vdGUgdGhhdCBmIGlzIGJvdW5kZWQgYnkgaXRzIGNvbnRhaW5lciBzaXplLiBMZXQgcCA9IDUz
ICh0aGUgZG91YmxlJ3MKKyAgICAgICAgLy8gc2lnbmlmaWNhbmQgc2l6ZSkuIFRoZW4gMl4ocC0x
KSA8PSBmIDwgMl5wLgorICAgICAgICAvLworICAgICAgICAvLyBHaXZlbiB0aGF0IGxvZzEwKHYp
ID09IGxvZzIodikvbG9nMigxMCkgYW5kIGUrKGxlbihmKS0xKSBpcyBxdWl0ZSBjbG9zZQorICAg
ICAgICAvLyB0byBsb2cyKHYpIHRoZSBmdW5jdGlvbiBpcyBzaW1wbGlmaWVkIHRvIChlKyhsZW4o
ZiktMSkvbG9nMigxMCkpLgorICAgICAgICAvLyBUaGUgY29tcHV0ZWQgbnVtYmVyIHVuZGVyc2hv
b3RzIGJ5IGxlc3MgdGhhbiAwLjYzMSAod2hlbiB3ZSBjb21wdXRlIGxvZzMKKyAgICAgICAgLy8g
YW5kIG5vdCBsb2cxMCkuCisgICAgICAgIC8vCisgICAgICAgIC8vIE9wdGltaXphdGlvbjogc2lu
Y2Ugd2Ugb25seSBuZWVkIGFuIGFwcHJveGltYXRlZCByZXN1bHQgdGhpcyBjb21wdXRhdGlvbgor
ICAgICAgICAvLyBjYW4gYmUgcGVyZm9ybWVkIG9uIDY0IGJpdCBpbnRlZ2Vycy4gT24geDg2L3g2
NCBhcmNoaXRlY3R1cmUgdGhlIHNwZWVkdXAgaXMKKyAgICAgICAgLy8gbm90IHJlYWxseSBtZWFz
dXJhYmxlLCB0aG91Z2guCisgICAgICAgIC8vCisgICAgICAgIC8vIFNpbmNlIHdlIHdhbnQgdG8g
YXZvaWQgb3ZlcnNob290aW5nIHdlIGRlY3JlbWVudCBieSAxZTEwIHNvIHRoYXQKKyAgICAgICAg
Ly8gZmxvYXRpbmctcG9pbnQgaW1wcmVjaXNpb25zIGRvbid0IGFmZmVjdCB1cy4KKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gRXhwbGFuYXRpb24gZm9yIHYncyBib3VuZGFyeSBtKzogdGhlIGNvbXB1
dGF0aW9uIHRha2VzIGFkdmFudGFnZSBvZgorICAgICAgICAvLyB0aGUgZmFjdCB0aGF0IDJeKHAt
MSkgPD0gZiA8IDJecC4gQm91bmRhcmllcyBzdGlsbCBzYXRpc2Z5IHRoaXMgcmVxdWlyZW1lbnQK
KyAgICAgICAgLy8gKGV2ZW4gZm9yIGRlbm9ybWFscyB3aGVyZSB0aGUgZGVsdGEgY2FuIGJlIG11
Y2ggbW9yZSBpbXBvcnRhbnQpLgorICAgICAgICAKKyAgICAgICAgY29uc3QgZG91YmxlIGsxTG9n
MTAgPSAwLjMwMTAyOTk5NTY2Mzk4MTE0OyAgLy8gMS9sZygxMCkKKyAgICAgICAgCisgICAgICAg
IC8vIEZvciBkb3VibGVzIGxlbihmKSA9PSA1MyAoZG9uJ3QgZm9yZ2V0IHRoZSBoaWRkZW4gYml0
KS4KKyAgICAgICAgY29uc3QgaW50IGtTaWduaWZpY2FuZFNpemUgPSA1MzsKKyAgICAgICAgZG91
YmxlIGVzdGltYXRlID0gY2VpbCgoZXhwb25lbnQgKyBrU2lnbmlmaWNhbmRTaXplIC0gMSkgKiBr
MUxvZzEwIC0gMWUtMTApOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihlc3RpbWF0
ZSk7CisgICAgfQorICAgIAorICAgIAorICAgIC8vIFNlZSBjb21tZW50cyBmb3IgSW5pdGlhbFNj
YWxlZFN0YXJ0VmFsdWVzLgorICAgIHN0YXRpYyB2b2lkIEluaXRpYWxTY2FsZWRTdGFydFZhbHVl
c1Bvc2l0aXZlRXhwb25lbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkb3VibGUgdiwgaW50IGVzdGltYXRlZF9wb3dlciwgYm9vbCBu
ZWVkX2JvdW5kYXJ5X2RlbHRhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogbnVtZXJhdG9yLCBCaWdudW0qIGRlbm9taW5h
dG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQmlnbnVtKiBkZWx0YV9taW51cywgQmlnbnVtKiBkZWx0YV9wbHVzKSB7CisgICAgICAg
IC8vIEEgcG9zaXRpdmUgZXhwb25lbnQgaW1wbGllcyBhIHBvc2l0aXZlIHBvd2VyLgorICAgICAg
ICBBU1NFUlQoZXN0aW1hdGVkX3Bvd2VyID49IDApOworICAgICAgICAvLyBTaW5jZSB0aGUgZXN0
aW1hdGVkX3Bvd2VyIGlzIHBvc2l0aXZlIHdlIHNpbXBseSBtdWx0aXBseSB0aGUgZGVub21pbmF0
b3IKKyAgICAgICAgLy8gYnkgMTBeZXN0aW1hdGVkX3Bvd2VyLgorICAgICAgICAKKyAgICAgICAg
Ly8gbnVtZXJhdG9yID0gdi4KKyAgICAgICAgbnVtZXJhdG9yLT5Bc3NpZ25VSW50NjQoRG91Ymxl
KHYpLlNpZ25pZmljYW5kKCkpOworICAgICAgICBudW1lcmF0b3ItPlNoaWZ0TGVmdChEb3VibGUo
dikuRXhwb25lbnQoKSk7CisgICAgICAgIC8vIGRlbm9taW5hdG9yID0gMTBeZXN0aW1hdGVkX3Bv
d2VyLgorICAgICAgICBkZW5vbWluYXRvci0+QXNzaWduUG93ZXJVSW50MTYoMTAsIGVzdGltYXRl
ZF9wb3dlcik7CisgICAgICAgIAorICAgICAgICBpZiAobmVlZF9ib3VuZGFyeV9kZWx0YXMpIHsK
KyAgICAgICAgICAgIC8vIEludHJvZHVjZSBhIGNvbW1vbiBkZW5vbWluYXRvciBzbyB0aGF0IHRo
ZSBkZWx0YXMgdG8gdGhlIGJvdW5kYXJpZXMgYXJlCisgICAgICAgICAgICAvLyBpbnRlZ2Vycy4K
KyAgICAgICAgICAgIGRlbm9taW5hdG9yLT5TaGlmdExlZnQoMSk7CisgICAgICAgICAgICBudW1l
cmF0b3ItPlNoaWZ0TGVmdCgxKTsKKyAgICAgICAgICAgIC8vIExldCB2ID0gZiAqIDJeZSwgdGhl
biBtKyAtIHYgPSAxLzIgKiAyXmU7IFdpdGggdGhlIGNvbW1vbgorICAgICAgICAgICAgLy8gZGVu
b21pbmF0b3IgKG9mIDIpIGRlbHRhX3BsdXMgZXF1YWxzIDJeZS4KKyAgICAgICAgICAgIGRlbHRh
X3BsdXMtPkFzc2lnblVJbnQxNigxKTsKKyAgICAgICAgICAgIGRlbHRhX3BsdXMtPlNoaWZ0TGVm
dChEb3VibGUodikuRXhwb25lbnQoKSk7CisgICAgICAgICAgICAvLyBTYW1lIGZvciBkZWx0YV9t
aW51cyAod2l0aCBhZGp1c3RtZW50cyBiZWxvdyBpZiBmID09IDJecC0xKS4KKyAgICAgICAgICAg
IGRlbHRhX21pbnVzLT5Bc3NpZ25VSW50MTYoMSk7CisgICAgICAgICAgICBkZWx0YV9taW51cy0+
U2hpZnRMZWZ0KERvdWJsZSh2KS5FeHBvbmVudCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgLy8gSWYgdGhlIHNpZ25pZmljYW5kICh3aXRob3V0IHRoZSBoaWRkZW4gYml0KSBpcyAwLCB0
aGVuIHRoZSBsb3dlcgorICAgICAgICAgICAgLy8gYm91bmRhcnkgaXMgY2xvc2VyIHRoYW4ganVz
dCBoYWxmIGEgdWxwICh1bml0IGluIHRoZSBsYXN0IHBsYWNlKS4KKyAgICAgICAgICAgIC8vIFRo
ZXJlIGlzIG9ubHkgb25lIGV4Y2VwdGlvbjogaWYgdGhlIG5leHQgbG93ZXIgbnVtYmVyIGlzIGEg
ZGVub3JtYWwgdGhlbgorICAgICAgICAgICAgLy8gdGhlIGRpc3RhbmNlIGlzIDEgdWxwLiBUaGlz
IGNhbm5vdCBiZSB0aGUgY2FzZSBmb3IgZXhwb25lbnQgPj0gMCAoYnV0IHdlCisgICAgICAgICAg
ICAvLyBoYXZlIHRvIHRlc3QgaXQgaW4gdGhlIG90aGVyIGZ1bmN0aW9uIHdoZXJlIGV4cG9uZW50
IDwgMCkuCisgICAgICAgICAgICB1aW50NjRfdCB2X2JpdHMgPSBEb3VibGUodikuQXNVaW50NjQo
KTsKKyAgICAgICAgICAgIGlmICgodl9iaXRzICYgRG91YmxlOjprU2lnbmlmaWNhbmRNYXNrKSA9
PSAwKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIGxvd2VyIGJvdW5kYXJ5IGlzIGNsb3NlciBh
dCBoYWxmIHRoZSBkaXN0YW5jZSBvZiAibm9ybWFsIiBudW1iZXJzLgorICAgICAgICAgICAgICAg
IC8vIEluY3JlYXNlIHRoZSBjb21tb24gZGVub21pbmF0b3IgYW5kIGFkYXB0IGFsbCBidXQgdGhl
IGRlbHRhX21pbnVzLgorICAgICAgICAgICAgICAgIGRlbm9taW5hdG9yLT5TaGlmdExlZnQoMSk7
ICAvLyAqMgorICAgICAgICAgICAgICAgIG51bWVyYXRvci0+U2hpZnRMZWZ0KDEpOyAgICAvLyAq
MgorICAgICAgICAgICAgICAgIGRlbHRhX3BsdXMtPlNoaWZ0TGVmdCgxKTsgICAvLyAqMgorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIC8vIFNlZSBjb21t
ZW50cyBmb3IgSW5pdGlhbFNjYWxlZFN0YXJ0VmFsdWVzCisgICAgc3RhdGljIHZvaWQgSW5pdGlh
bFNjYWxlZFN0YXJ0VmFsdWVzTmVnYXRpdmVFeHBvbmVudFBvc2l0aXZlUG93ZXIoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZG91YmxlIHYsIGludCBlc3RpbWF0ZWRfcG93ZXIsIGJvb2wgbmVlZF9ib3VuZGFyeV9k
ZWx0YXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBudW1lcmF0b3IsIEJpZ251bSogZGVub21pbmF0
b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQmlnbnVtKiBkZWx0YV9taW51cywgQmlnbnVtKiBkZWx0YV9wbHVz
KSB7CisgICAgICAgIHVpbnQ2NF90IHNpZ25pZmljYW5kID0gRG91YmxlKHYpLlNpZ25pZmljYW5k
KCk7CisgICAgICAgIGludCBleHBvbmVudCA9IERvdWJsZSh2KS5FeHBvbmVudCgpOworICAgICAg
ICAvLyB2ID0gZiAqIDJeZSB3aXRoIGUgPCAwLCBhbmQgd2l0aCBlc3RpbWF0ZWRfcG93ZXIgPj0g
MC4KKyAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IGUgaXMgY2xvc2UgdG8gMCAoaGF2ZSBhIGxv
b2sgYXQgaG93IGVzdGltYXRlZF9wb3dlciBpcworICAgICAgICAvLyBjb21wdXRlZCkuCisgICAg
ICAgIAorICAgICAgICAvLyBudW1lcmF0b3IgPSBzaWduaWZpY2FuZAorICAgICAgICAvLyAgc2lu
Y2UgdiA9IHNpZ25pZmljYW5kICogMl5leHBvbmVudCB0aGlzIGlzIGVxdWl2YWxlbnQgdG8KKyAg
ICAgICAgLy8gIG51bWVyYXRvciA9IHYgKiAvIDJeLWV4cG9uZW50CisgICAgICAgIG51bWVyYXRv
ci0+QXNzaWduVUludDY0KHNpZ25pZmljYW5kKTsKKyAgICAgICAgLy8gZGVub21pbmF0b3IgPSAx
MF5lc3RpbWF0ZWRfcG93ZXIgKiAyXi1leHBvbmVudCAod2l0aCBleHBvbmVudCA8IDApCisgICAg
ICAgIGRlbm9taW5hdG9yLT5Bc3NpZ25Qb3dlclVJbnQxNigxMCwgZXN0aW1hdGVkX3Bvd2VyKTsK
KyAgICAgICAgZGVub21pbmF0b3ItPlNoaWZ0TGVmdCgtZXhwb25lbnQpOworICAgICAgICAKKyAg
ICAgICAgaWYgKG5lZWRfYm91bmRhcnlfZGVsdGFzKSB7CisgICAgICAgICAgICAvLyBJbnRyb2R1
Y2UgYSBjb21tb24gZGVub21pbmF0b3Igc28gdGhhdCB0aGUgZGVsdGFzIHRvIHRoZSBib3VuZGFy
aWVzIGFyZQorICAgICAgICAgICAgLy8gaW50ZWdlcnMuCisgICAgICAgICAgICBkZW5vbWluYXRv
ci0+U2hpZnRMZWZ0KDEpOworICAgICAgICAgICAgbnVtZXJhdG9yLT5TaGlmdExlZnQoMSk7Cisg
ICAgICAgICAgICAvLyBMZXQgdiA9IGYgKiAyXmUsIHRoZW4gbSsgLSB2ID0gMS8yICogMl5lOyBX
aXRoIHRoZSBjb21tb24KKyAgICAgICAgICAgIC8vIGRlbm9taW5hdG9yIChvZiAyKSBkZWx0YV9w
bHVzIGVxdWFscyAyXmUuCisgICAgICAgICAgICAvLyBHaXZlbiB0aGF0IHRoZSBkZW5vbWluYXRv
ciBhbHJlYWR5IGluY2x1ZGVzIHYncyBleHBvbmVudCB0aGUgZGlzdGFuY2UKKyAgICAgICAgICAg
IC8vIHRvIHRoZSBib3VuZGFyaWVzIGlzIHNpbXBseSAxLgorICAgICAgICAgICAgZGVsdGFfcGx1
cy0+QXNzaWduVUludDE2KDEpOworICAgICAgICAgICAgLy8gU2FtZSBmb3IgZGVsdGFfbWludXMg
KHdpdGggYWRqdXN0bWVudHMgYmVsb3cgaWYgZiA9PSAyXnAtMSkuCisgICAgICAgICAgICBkZWx0
YV9taW51cy0+QXNzaWduVUludDE2KDEpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBJ
ZiB0aGUgc2lnbmlmaWNhbmQgKHdpdGhvdXQgdGhlIGhpZGRlbiBiaXQpIGlzIDAsIHRoZW4gdGhl
IGxvd2VyCisgICAgICAgICAgICAvLyBib3VuZGFyeSBpcyBjbG9zZXIgdGhhbiBqdXN0IG9uZSB1
bHAgKHVuaXQgaW4gdGhlIGxhc3QgcGxhY2UpLgorICAgICAgICAgICAgLy8gVGhlcmUgaXMgb25s
eSBvbmUgZXhjZXB0aW9uOiBpZiB0aGUgbmV4dCBsb3dlciBudW1iZXIgaXMgYSBkZW5vcm1hbAor
ICAgICAgICAgICAgLy8gdGhlbiB0aGUgZGlzdGFuY2UgaXMgMSB1bHAuIFNpbmNlIHRoZSBleHBv
bmVudCBpcyBjbG9zZSB0byB6ZXJvCisgICAgICAgICAgICAvLyAob3RoZXJ3aXNlIGVzdGltYXRl
ZF9wb3dlciB3b3VsZCBoYXZlIGJlZW4gbmVnYXRpdmUpIHRoaXMgY2Fubm90IGhhcHBlbgorICAg
ICAgICAgICAgLy8gaGVyZSBlaXRoZXIuCisgICAgICAgICAgICB1aW50NjRfdCB2X2JpdHMgPSBE
b3VibGUodikuQXNVaW50NjQoKTsKKyAgICAgICAgICAgIGlmICgodl9iaXRzICYgRG91YmxlOjpr
U2lnbmlmaWNhbmRNYXNrKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIGxvd2VyIGJv
dW5kYXJ5IGlzIGNsb3NlciBhdCBoYWxmIHRoZSBkaXN0YW5jZSBvZiAibm9ybWFsIiBudW1iZXJz
LgorICAgICAgICAgICAgICAgIC8vIEluY3JlYXNlIHRoZSBkZW5vbWluYXRvciBhbmQgYWRhcHQg
YWxsIGJ1dCB0aGUgZGVsdGFfbWludXMuCisgICAgICAgICAgICAgICAgZGVub21pbmF0b3ItPlNo
aWZ0TGVmdCgxKTsgIC8vICoyCisgICAgICAgICAgICAgICAgbnVtZXJhdG9yLT5TaGlmdExlZnQo
MSk7ICAgIC8vICoyCisgICAgICAgICAgICAgICAgZGVsdGFfcGx1cy0+U2hpZnRMZWZ0KDEpOyAg
IC8vICoyCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAg
Ly8gU2VlIGNvbW1lbnRzIGZvciBJbml0aWFsU2NhbGVkU3RhcnRWYWx1ZXMKKyAgICBzdGF0aWMg
dm9pZCBJbml0aWFsU2NhbGVkU3RhcnRWYWx1ZXNOZWdhdGl2ZUV4cG9uZW50TmVnYXRpdmVQb3dl
cigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkb3VibGUgdiwgaW50IGVzdGltYXRlZF9wb3dlciwgYm9vbCBuZWVk
X2JvdW5kYXJ5X2RlbHRhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIG51bWVyYXRvciwgQmlnbnVt
KiBkZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIGRlbHRhX21pbnVzLCBCaWdudW0q
IGRlbHRhX3BsdXMpIHsKKyAgICAgICAgY29uc3QgdWludDY0X3Qga01pbmltYWxOb3JtYWxpemVk
RXhwb25lbnQgPQorICAgICAgICBVSU5UNjRfMlBBUlRfQygweDAwMTAwMDAwLCAwMDAwMDAwMCk7
CisgICAgICAgIHVpbnQ2NF90IHNpZ25pZmljYW5kID0gRG91YmxlKHYpLlNpZ25pZmljYW5kKCk7
CisgICAgICAgIGludCBleHBvbmVudCA9IERvdWJsZSh2KS5FeHBvbmVudCgpOworICAgICAgICAv
LyBJbnN0ZWFkIG9mIG11bHRpcGx5aW5nIHRoZSBkZW5vbWluYXRvciB3aXRoIDEwXmVzdGltYXRl
ZF9wb3dlciB3ZQorICAgICAgICAvLyBtdWx0aXBseSBhbGwgdmFsdWVzIChudW1lcmF0b3IgYW5k
IGRlbHRhcykgYnkgMTBeLWVzdGltYXRlZF9wb3dlci4KKyAgICAgICAgCisgICAgICAgIC8vIFVz
ZSBudW1lcmF0b3IgYXMgdGVtcG9yYXJ5IGNvbnRhaW5lciBmb3IgcG93ZXJfdGVuLgorICAgICAg
ICBCaWdudW0qIHBvd2VyX3RlbiA9IG51bWVyYXRvcjsKKyAgICAgICAgcG93ZXJfdGVuLT5Bc3Np
Z25Qb3dlclVJbnQxNigxMCwgLWVzdGltYXRlZF9wb3dlcik7CisgICAgICAgIAorICAgICAgICBp
ZiAobmVlZF9ib3VuZGFyeV9kZWx0YXMpIHsKKyAgICAgICAgICAgIC8vIFNpbmNlIHBvd2VyX3Rl
biA9PSBudW1lcmF0b3Igd2UgbXVzdCBtYWtlIGEgY29weSBvZiAxMF5lc3RpbWF0ZWRfcG93ZXIK
KyAgICAgICAgICAgIC8vIGJlZm9yZSB3ZSBjb21wbGV0ZSB0aGUgY29tcHV0YXRpb24gb2YgdGhl
IG51bWVyYXRvci4KKyAgICAgICAgICAgIC8vIGRlbHRhX3BsdXMgPSBkZWx0YV9taW51cyA9IDEw
XmVzdGltYXRlZF9wb3dlcgorICAgICAgICAgICAgZGVsdGFfcGx1cy0+QXNzaWduQmlnbnVtKCpw
b3dlcl90ZW4pOworICAgICAgICAgICAgZGVsdGFfbWludXMtPkFzc2lnbkJpZ251bSgqcG93ZXJf
dGVuKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gbnVtZXJhdG9yID0gc2lnbmlm
aWNhbmQgKiAyICogMTBeLWVzdGltYXRlZF9wb3dlcgorICAgICAgICAvLyAgc2luY2UgdiA9IHNp
Z25pZmljYW5kICogMl5leHBvbmVudCB0aGlzIGlzIGVxdWl2YWxlbnQgdG8KKyAgICAgICAgLy8g
bnVtZXJhdG9yID0gdiAqIDEwXi1lc3RpbWF0ZWRfcG93ZXIgKiAyICogMl4tZXhwb25lbnQuCisg
ICAgICAgIC8vIFJlbWVtYmVyOiBudW1lcmF0b3IgaGFzIGJlZW4gYWJ1c2VkIGFzIHBvd2VyX3Rl
bi4gU28gbm8gbmVlZCB0byBhc3NpZ24gaXQKKyAgICAgICAgLy8gIHRvIGl0c2VsZi4KKyAgICAg
ICAgQVNTRVJUKG51bWVyYXRvciA9PSBwb3dlcl90ZW4pOworICAgICAgICBudW1lcmF0b3ItPk11
bHRpcGx5QnlVSW50NjQoc2lnbmlmaWNhbmQpOworICAgICAgICAKKyAgICAgICAgLy8gZGVub21p
bmF0b3IgPSAyICogMl4tZXhwb25lbnQgd2l0aCBleHBvbmVudCA8IDAuCisgICAgICAgIGRlbm9t
aW5hdG9yLT5Bc3NpZ25VSW50MTYoMSk7CisgICAgICAgIGRlbm9taW5hdG9yLT5TaGlmdExlZnQo
LWV4cG9uZW50KTsKKyAgICAgICAgCisgICAgICAgIGlmIChuZWVkX2JvdW5kYXJ5X2RlbHRhcykg
eworICAgICAgICAgICAgLy8gSW50cm9kdWNlIGEgY29tbW9uIGRlbm9taW5hdG9yIHNvIHRoYXQg
dGhlIGRlbHRhcyB0byB0aGUgYm91bmRhcmllcyBhcmUKKyAgICAgICAgICAgIC8vIGludGVnZXJz
LgorICAgICAgICAgICAgbnVtZXJhdG9yLT5TaGlmdExlZnQoMSk7CisgICAgICAgICAgICBkZW5v
bWluYXRvci0+U2hpZnRMZWZ0KDEpOworICAgICAgICAgICAgLy8gV2l0aCB0aGlzIHNoaWZ0IHRo
ZSBib3VuZGFyaWVzIGhhdmUgdGhlaXIgY29ycmVjdCB2YWx1ZSwgc2luY2UKKyAgICAgICAgICAg
IC8vIGRlbHRhX3BsdXMgPSAxMF4tZXN0aW1hdGVkX3Bvd2VyLCBhbmQKKyAgICAgICAgICAgIC8v
IGRlbHRhX21pbnVzID0gMTBeLWVzdGltYXRlZF9wb3dlci4KKyAgICAgICAgICAgIC8vIFRoZXNl
IGFzc2lnbm1lbnRzIGhhdmUgYmVlbiBkb25lIGVhcmxpZXIuCisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vIFRoZSBzcGVjaWFsIGNhc2Ugd2hlcmUgdGhlIGxvd2VyIGJvdW5kYXJ5IGlzIHR3
aWNlIGFzIGNsb3NlLgorICAgICAgICAgICAgLy8gVGhpcyB0aW1lIHdlIGhhdmUgdG8gbG9vayBv
dXQgZm9yIHRoZSBleGNlcHRpb24gdG9vLgorICAgICAgICAgICAgdWludDY0X3Qgdl9iaXRzID0g
RG91YmxlKHYpLkFzVWludDY0KCk7CisgICAgICAgICAgICBpZiAoKHZfYml0cyAmIERvdWJsZTo6
a1NpZ25pZmljYW5kTWFzaykgPT0gMCAmJgorICAgICAgICAgICAgICAgIC8vIFRoZSBvbmx5IGV4
Y2VwdGlvbiB3aGVyZSBhIHNpZ25pZmljYW5kID09IDAgaGFzIGl0cyBib3VuZGFyaWVzIGF0Cisg
ICAgICAgICAgICAgICAgLy8gIm5vcm1hbCIgZGlzdGFuY2VzOgorICAgICAgICAgICAgICAgICh2
X2JpdHMgJiBEb3VibGU6OmtFeHBvbmVudE1hc2spICE9IGtNaW5pbWFsTm9ybWFsaXplZEV4cG9u
ZW50KSB7CisgICAgICAgICAgICAgICAgbnVtZXJhdG9yLT5TaGlmdExlZnQoMSk7ICAgIC8vICoy
CisgICAgICAgICAgICAgICAgZGVub21pbmF0b3ItPlNoaWZ0TGVmdCgxKTsgIC8vICoyCisgICAg
ICAgICAgICAgICAgZGVsdGFfcGx1cy0+U2hpZnRMZWZ0KDEpOyAgIC8vICoyCisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgLy8gTGV0IHYgPSBzaWduaWZp
Y2FuZCAqIDJeZXhwb25lbnQuCisgICAgLy8gQ29tcHV0ZXMgdiAvIDEwXmVzdGltYXRlZF9wb3dl
ciBleGFjdGx5LCBhcyBhIHJhdGlvIG9mIHR3byBiaWdudW1zLCBudW1lcmF0b3IKKyAgICAvLyBh
bmQgZGVub21pbmF0b3IuIFRoZSBmdW5jdGlvbnMgR2VuZXJhdGVTaG9ydGVzdERpZ2l0cyBhbmQK
KyAgICAvLyBHZW5lcmF0ZUNvdW50ZWREaWdpdHMgd2lsbCB0aGVuIGNvbnZlcnQgdGhpcyByYXRp
byB0byBpdHMgZGVjaW1hbAorICAgIC8vIHJlcHJlc2VudGF0aW9uIGQsIHdpdGggdGhlIHJlcXVp
cmVkIGFjY3VyYWN5LgorICAgIC8vIFRoZW4gZCAqIDEwXmVzdGltYXRlZF9wb3dlciBpcyB0aGUg
cmVwcmVzZW50YXRpb24gb2Ygdi4KKyAgICAvLyAoTm90ZTogdGhlIGZyYWN0aW9uIGFuZCB0aGUg
ZXN0aW1hdGVkX3Bvd2VyIG1pZ2h0IGdldCBhZGp1c3RlZCBiZWZvcmUKKyAgICAvLyBnZW5lcmF0
aW5nIHRoZSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uLikKKyAgICAvLworICAgIC8vIFRoZSBpbml0
aWFsIHN0YXJ0IHZhbHVlcyBjb25zaXN0IG9mOgorICAgIC8vICAtIGEgc2NhbGVkIG51bWVyYXRv
cjogcy50LiBudW1lcmF0b3IvZGVub21pbmF0b3IgPT0gdiAvIDEwXmVzdGltYXRlZF9wb3dlci4K
KyAgICAvLyAgLSBhIHNjYWxlZCAoY29tbW9uKSBkZW5vbWluYXRvci4KKyAgICAvLyAgb3B0aW9u
YWxseSAodXNlZCBieSBHZW5lcmF0ZVNob3J0ZXN0RGlnaXRzIHRvIGRlY2lkZSBpZiBpdCBoYXMg
dGhlIHNob3J0ZXN0CisgICAgLy8gIGRlY2ltYWwgY29udmVydGluZyBiYWNrIHRvIHYpOgorICAg
IC8vICAtIHYgLSBtLTogdGhlIGRpc3RhbmNlIHRvIHRoZSBsb3dlciBib3VuZGFyeS4KKyAgICAv
LyAgLSBtKyAtIHY6IHRoZSBkaXN0YW5jZSB0byB0aGUgdXBwZXIgYm91bmRhcnkuCisgICAgLy8K
KyAgICAvLyB2LCBtKywgbS0sIGFuZCB0aGVyZWZvcmUgdiAtIG0tIGFuZCBtKyAtIHYgYWxsIHNo
YXJlIHRoZSBzYW1lIGRlbm9taW5hdG9yLgorICAgIC8vCisgICAgLy8gTGV0IGVwID09IGVzdGlt
YXRlZF9wb3dlciwgdGhlbiB0aGUgcmV0dXJuZWQgdmFsdWVzIHdpbGwgc2F0aXNmeToKKyAgICAv
LyAgdiAvIDEwXmVwID0gbnVtZXJhdG9yIC8gZGVub21pbmF0b3IuCisgICAgLy8gIHYncyBib3Vu
ZGFyeXMgbS0gYW5kIG0rOgorICAgIC8vICAgIG0tIC8gMTBeZXAgPT0gdiAvIDEwXmVwIC0gZGVs
dGFfbWludXMgLyBkZW5vbWluYXRvcgorICAgIC8vICAgIG0rIC8gMTBeZXAgPT0gdiAvIDEwXmVw
ICsgZGVsdGFfcGx1cyAvIGRlbm9taW5hdG9yCisgICAgLy8gIE9yIGluIG90aGVyIHdvcmRzOgor
ICAgIC8vICAgIG0tID09IHYgLSBkZWx0YV9taW51cyAqIDEwXmVwIC8gZGVub21pbmF0b3I7Cisg
ICAgLy8gICAgbSsgPT0gdiArIGRlbHRhX3BsdXMgKiAxMF5lcCAvIGRlbm9taW5hdG9yOworICAg
IC8vCisgICAgLy8gU2luY2UgMTBeKGstMSkgPD0gdiA8IDEwXmsgICAgKHdpdGggayA9PSBlc3Rp
bWF0ZWRfcG93ZXIpCisgICAgLy8gIG9yICAgICAgIDEwXmsgPD0gdiA8IDEwXihrKzEpCisgICAg
Ly8gIHdlIHRoZW4gaGF2ZSAwLjEgPD0gbnVtZXJhdG9yL2Rlbm9taW5hdG9yIDwgMQorICAgIC8v
ICAgICAgICAgICBvciAgICAxIDw9IG51bWVyYXRvci9kZW5vbWluYXRvciA8IDEwCisgICAgLy8K
KyAgICAvLyBJdCBpcyB0aGVuIGVhc3kgdG8ga2lja3N0YXJ0IHRoZSBkaWdpdC1nZW5lcmF0aW9u
IHJvdXRpbmUuCisgICAgLy8KKyAgICAvLyBUaGUgYm91bmRhcnktZGVsdGFzIGFyZSBvbmx5IGZp
bGxlZCBpZiBuZWVkX2JvdW5kYXJ5X2RlbHRhcyBpcyBzZXQuCisgICAgc3RhdGljIHZvaWQgSW5p
dGlhbFNjYWxlZFN0YXJ0VmFsdWVzKGRvdWJsZSB2LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgZXN0aW1hdGVkX3Bvd2VyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIG5lZWRfYm91bmRhcnlfZGVsdGFzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIG51bWVyYXRvciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBkZW5vbWluYXRv
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBkZWx0
YV9taW51cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVt
KiBkZWx0YV9wbHVzKSB7CisgICAgICAgIGlmIChEb3VibGUodikuRXhwb25lbnQoKSA+PSAwKSB7
CisgICAgICAgICAgICBJbml0aWFsU2NhbGVkU3RhcnRWYWx1ZXNQb3NpdGl2ZUV4cG9uZW50KAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LCBl
c3RpbWF0ZWRfcG93ZXIsIG5lZWRfYm91bmRhcnlfZGVsdGFzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmF0b3IsIGRlbm9taW5hdG9y
LCBkZWx0YV9taW51cywgZGVsdGFfcGx1cyk7CisgICAgICAgIH0gZWxzZSBpZiAoZXN0aW1hdGVk
X3Bvd2VyID49IDApIHsKKyAgICAgICAgICAgIEluaXRpYWxTY2FsZWRTdGFydFZhbHVlc05lZ2F0
aXZlRXhwb25lbnRQb3NpdGl2ZVBvd2VyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiwgZXN0aW1hdGVkX3Bvd2VyLCBu
ZWVkX2JvdW5kYXJ5X2RlbHRhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyYXRvciwgZGVub21pbmF0b3IsIGRl
bHRhX21pbnVzLCBkZWx0YV9wbHVzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIElu
aXRpYWxTY2FsZWRTdGFydFZhbHVlc05lZ2F0aXZlRXhwb25lbnROZWdhdGl2ZVBvd2VyKAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdiwgZXN0aW1hdGVkX3Bvd2VyLCBuZWVkX2JvdW5kYXJ5X2RlbHRhcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG51bWVyYXRvciwgZGVub21pbmF0b3IsIGRlbHRhX21pbnVzLCBkZWx0YV9wbHVzKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBUaGlzIHJvdXRpbmUgbXVsdGlwbGllcyBu
dW1lcmF0b3IvZGVub21pbmF0b3Igc28gdGhhdCBpdHMgdmFsdWVzIGxpZXMgaW4gdGhlCisgICAg
Ly8gcmFuZ2UgMS0xMC4gVGhhdCBpcyBhZnRlciBhIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiB3ZSBo
YXZlOgorICAgIC8vICAgIDEgPD0gKG51bWVyYXRvciArIGRlbHRhX3BsdXMpIC9kZW5vbWluYXRv
ciA8IDEwLgorICAgIC8vIExldCBudW1lcmF0b3IgdGhlIGlucHV0IGJlZm9yZSBtb2RpZmljYXRp
b24gYW5kIG51bWVyYXRvcicgdGhlIGFyZ3VtZW50CisgICAgLy8gYWZ0ZXIgbW9kaWZpY2F0aW9u
LCB0aGVuIHRoZSBvdXRwdXQtcGFyYW1ldGVyIGRlY2ltYWxfcG9pbnQgaXMgc3VjaCB0aGF0Cisg
ICAgLy8gIG51bWVyYXRvciAvIGRlbm9taW5hdG9yICogMTBeZXN0aW1hdGVkX3Bvd2VyID09Cisg
ICAgLy8gICAgbnVtZXJhdG9yJyAvIGRlbm9taW5hdG9yJyAqIDEwXihkZWNpbWFsX3BvaW50IC0g
MSkKKyAgICAvLyBJbiBzb21lIGNhc2VzIGVzdGltYXRlZF9wb3dlciB3YXMgdG9vIGxvdywgYW5k
IHRoaXMgaXMgYWxyZWFkeSB0aGUgY2FzZS4gV2UKKyAgICAvLyB0aGVuIHNpbXBseSBhZGp1c3Qg
dGhlIHBvd2VyIHNvIHRoYXQgMTBeKGstMSkgPD0gdiA8IDEwXmsgKHdpdGggayA9PQorICAgIC8v
IGVzdGltYXRlZF9wb3dlcikgYnV0IGRvIG5vdCB0b3VjaCB0aGUgbnVtZXJhdG9yIG9yIGRlbm9t
aW5hdG9yLgorICAgIC8vIE90aGVyd2lzZSB0aGUgcm91dGluZSBtdWx0aXBsaWVzIHRoZSBudW1l
cmF0b3IgYW5kIHRoZSBkZWx0YXMgYnkgMTAuCisgICAgc3RhdGljIHZvaWQgRml4dXBNdWx0aXBs
eTEwKGludCBlc3RpbWF0ZWRfcG93ZXIsIGJvb2wgaXNfZXZlbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50KiBkZWNpbWFsX3BvaW50LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBCaWdudW0qIG51bWVyYXRvciwgQmlnbnVtKiBkZW5vbWluYXRvciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBkZWx0YV9taW51cywgQmlnbnVtKiBk
ZWx0YV9wbHVzKSB7CisgICAgICAgIGJvb2wgaW5fcmFuZ2U7CisgICAgICAgIGlmIChpc19ldmVu
KSB7CisgICAgICAgICAgICAvLyBGb3IgSUVFRSBkb3VibGVzIGhhbGYtd2F5IGNhc2VzIChpbiBk
ZWNpbWFsIHN5c3RlbSBudW1iZXJzIGVuZGluZyB3aXRoIDUpCisgICAgICAgICAgICAvLyBhcmUg
cm91bmRlZCB0byB0aGUgY2xvc2VzdCBmbG9hdGluZy1wb2ludCBudW1iZXIgd2l0aCBldmVuIHNp
Z25pZmljYW5kLgorICAgICAgICAgICAgaW5fcmFuZ2UgPSBCaWdudW06OlBsdXNDb21wYXJlKCpu
dW1lcmF0b3IsICpkZWx0YV9wbHVzLCAqZGVub21pbmF0b3IpID49IDA7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBpbl9yYW5nZSA9IEJpZ251bTo6UGx1c0NvbXBhcmUoKm51bWVyYXRv
ciwgKmRlbHRhX3BsdXMsICpkZW5vbWluYXRvcikgPiAwOworICAgICAgICB9CisgICAgICAgIGlm
IChpbl9yYW5nZSkgeworICAgICAgICAgICAgLy8gU2luY2UgbnVtZXJhdG9yICsgZGVsdGFfcGx1
cyA+PSBkZW5vbWluYXRvciB3ZSBhbHJlYWR5IGhhdmUKKyAgICAgICAgICAgIC8vIDEgPD0gbnVt
ZXJhdG9yL2Rlbm9taW5hdG9yIDwgMTAuIFNpbXBseSB1cGRhdGUgdGhlIGVzdGltYXRlZF9wb3dl
ci4KKyAgICAgICAgICAgICpkZWNpbWFsX3BvaW50ID0gZXN0aW1hdGVkX3Bvd2VyICsgMTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICpkZWNpbWFsX3BvaW50ID0gZXN0aW1hdGVkX3Bv
d2VyOworICAgICAgICAgICAgbnVtZXJhdG9yLT5UaW1lczEwKCk7CisgICAgICAgICAgICBpZiAo
QmlnbnVtOjpFcXVhbCgqZGVsdGFfbWludXMsICpkZWx0YV9wbHVzKSkgeworICAgICAgICAgICAg
ICAgIGRlbHRhX21pbnVzLT5UaW1lczEwKCk7CisgICAgICAgICAgICAgICAgZGVsdGFfcGx1cy0+
QXNzaWduQmlnbnVtKCpkZWx0YV9taW51cyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIGRlbHRhX21pbnVzLT5UaW1lczEwKCk7CisgICAgICAgICAgICAgICAgZGVsdGFf
cGx1cy0+VGltZXMxMCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAor
fSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCisKK30gLy8gbmFtZXNwYWNlIFdURgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS1kdG9hLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvYmlnbnVtLWR0b2EuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4wNzYxNjg3MDkxYzAwYjkzZjA4NzY0MDM1OGUzOTg5MDdkMGQ0YTk1Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS1kdG9hLmgKQEAgLTAs
MCArMSw4NiBAQAorLy8gQ29weXJpZ2h0IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0
OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWZuZGVmIERPVUJMRV9D
T05WRVJTSU9OX0JJR05VTV9EVE9BX0hfCisjZGVmaW5lIERPVUJMRV9DT05WRVJTSU9OX0JJR05V
TV9EVE9BX0hfCisKKyNpbmNsdWRlICJ1dGlscy5oIgorCituYW1lc3BhY2UgV1RGIHsKKworbmFt
ZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKKyAgICAKKyAgICBlbnVtIEJpZ251bUR0b2FNb2Rl
IHsKKyAgICAgICAgLy8gUmV0dXJuIHRoZSBzaG9ydGVzdCBjb3JyZWN0IHJlcHJlc2VudGF0aW9u
LgorICAgICAgICAvLyBGb3IgZXhhbXBsZSB0aGUgb3V0cHV0IG9mIDAuMjk5OTk5OTk5OTk5OTk5
OTg4ODk3IGlzICh0aGUgbGVzcyBhY2N1cmF0ZSBidXQKKyAgICAgICAgLy8gY29ycmVjdCkgMC4z
LgorICAgICAgICBCSUdOVU1fRFRPQV9TSE9SVEVTVCwKKyAgICAgICAgLy8gUmV0dXJuIGEgZml4
ZWQgbnVtYmVyIG9mIGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludC4KKyAgICAgICAgLy8g
Rm9yIGluc3RhbmNlIGZpeGVkKDAuMSwgNCkgYmVjb21lcyAwLjEwMDAKKyAgICAgICAgLy8gSWYg
dGhlIGlucHV0IG51bWJlciBpcyBiaWcsIHRoZSBvdXRwdXQgd2lsbCBiZSBiaWcuCisgICAgICAg
IEJJR05VTV9EVE9BX0ZJWEVELAorICAgICAgICAvLyBSZXR1cm4gYSBmaXhlZCBudW1iZXIgb2Yg
ZGlnaXRzLCBubyBtYXR0ZXIgd2hhdCB0aGUgZXhwb25lbnQgaXMuCisgICAgICAgIEJJR05VTV9E
VE9BX1BSRUNJU0lPTgorICAgIH07CisgICAgCisgICAgLy8gQ29udmVydHMgdGhlIGdpdmVuIGRv
dWJsZSAndicgdG8gYXNjaWkuCisgICAgLy8gVGhlIHJlc3VsdCBzaG91bGQgYmUgaW50ZXJwcmV0
ZWQgYXMgYnVmZmVyICogMTBeKHBvaW50LWxlbmd0aCkuCisgICAgLy8gVGhlIGJ1ZmZlciB3aWxs
IGJlIG51bGwtdGVybWluYXRlZC4KKyAgICAvLworICAgIC8vIFRoZSBpbnB1dCB2IG11c3QgYmUg
PiAwIGFuZCBkaWZmZXJlbnQgZnJvbSBOYU4sIGFuZCBJbmZpbml0eS4KKyAgICAvLworICAgIC8v
IFRoZSBvdXRwdXQgZGVwZW5kcyBvbiB0aGUgZ2l2ZW4gbW9kZToKKyAgICAvLyAgLSBTSE9SVEVT
VDogcHJvZHVjZSB0aGUgbGVhc3QgYW1vdW50IG9mIGRpZ2l0cyBmb3Igd2hpY2ggdGhlIGludGVy
bmFsCisgICAgLy8gICBpZGVudGl0eSByZXF1aXJlbWVudCBpcyBzdGlsbCBzYXRpc2ZpZWQuIElm
IHRoZSBkaWdpdHMgYXJlIHByaW50ZWQKKyAgICAvLyAgICh0b2dldGhlciB3aXRoIHRoZSBjb3Jy
ZWN0IGV4cG9uZW50KSB0aGVuIHJlYWRpbmcgdGhpcyBudW1iZXIgd2lsbCBnaXZlCisgICAgLy8g
ICAndicgYWdhaW4uIFRoZSBidWZmZXIgd2lsbCBjaG9vc2UgdGhlIHJlcHJlc2VudGF0aW9uIHRo
YXQgaXMgY2xvc2VzdCB0bworICAgIC8vICAgJ3YnLiBJZiB0aGVyZSBhcmUgdHdvIGF0IHRoZSBz
YW1lIGRpc3RhbmNlLCB0aGFuIHRoZSBudW1iZXIgaXMgcm91bmQgdXAuCisgICAgLy8gICBJbiB0
aGlzIG1vZGUgdGhlICdyZXF1ZXN0ZWRfZGlnaXRzJyBwYXJhbWV0ZXIgaXMgaWdub3JlZC4KKyAg
ICAvLyAgLSBGSVhFRDogcHJvZHVjZXMgZGlnaXRzIG5lY2Vzc2FyeSB0byBwcmludCBhIGdpdmVu
IG51bWJlciB3aXRoCisgICAgLy8gICAncmVxdWVzdGVkX2RpZ2l0cycgZGlnaXRzIGFmdGVyIHRo
ZSBkZWNpbWFsIHBvaW50LiBUaGUgcHJvZHVjZWQgZGlnaXRzCisgICAgLy8gICBtaWdodCBiZSB0
b28gc2hvcnQgaW4gd2hpY2ggY2FzZSB0aGUgY2FsbGVyIGhhcyB0byBmaWxsIHRoZSBnYXBzIHdp
dGggJzAncy4KKyAgICAvLyAgIEV4YW1wbGU6IHRvRml4ZWQoMC4wMDEsIDUpIGlzIGFsbG93ZWQg
dG8gcmV0dXJuIGJ1ZmZlcj0iMSIsIHBvaW50PS0yLgorICAgIC8vICAgSGFsZndheSBjYXNlcyBh
cmUgcm91bmRlZCB1cC4gVGhlIGNhbGwgdG9GaXhlZCgwLjE1LCAyKSB0aHVzIHJldHVybnMKKyAg
ICAvLyAgICAgYnVmZmVyPSIyIiwgcG9pbnQ9MC4KKyAgICAvLyAgIE5vdGU6IHRoZSBsZW5ndGgg
b2YgdGhlIHJldHVybmVkIGJ1ZmZlciBoYXMgbm8gbWVhbmluZyB3cnQgdGhlIHNpZ25pZmljYW5j
ZQorICAgIC8vICAgb2YgaXRzIGRpZ2l0cy4gVGhhdCBpcywganVzdCBiZWNhdXNlIGl0IGNvbnRh
aW5zICcwJ3MgZG9lcyBub3QgbWVhbiB0aGF0CisgICAgLy8gICBhbnkgb3RoZXIgZGlnaXQgd291
bGQgbm90IHNhdGlzZnkgdGhlIGludGVybmFsIGlkZW50aXR5IHJlcXVpcmVtZW50LgorICAgIC8v
ICAtIFBSRUNJU0lPTjogcHJvZHVjZXMgJ3JlcXVlc3RlZF9kaWdpdHMnIHdoZXJlIHRoZSBmaXJz
dCBkaWdpdCBpcyBub3QgJzAnLgorICAgIC8vICAgRXZlbiB0aG91Z2ggdGhlIGxlbmd0aCBvZiBw
cm9kdWNlZCBkaWdpdHMgdXN1YWxseSBlcXVhbHMKKyAgICAvLyAgICdyZXF1ZXN0ZWRfZGlnaXRz
JywgdGhlIGZ1bmN0aW9uIGlzIGFsbG93ZWQgdG8gcmV0dXJuIGZld2VyIGRpZ2l0cywgaW4KKyAg
ICAvLyAgIHdoaWNoIGNhc2UgdGhlIGNhbGxlciBoYXMgdG8gZmlsbCB0aGUgbWlzc2luZyBkaWdp
dHMgd2l0aCAnMCdzLgorICAgIC8vICAgSGFsZndheSBjYXNlcyBhcmUgYWdhaW4gcm91bmRlZCB1
cC4KKyAgICAvLyAnQmlnbnVtRHRvYScgZXhwZWN0cyB0aGUgZ2l2ZW4gYnVmZmVyIHRvIGJlIGJp
ZyBlbm91Z2ggdG8gaG9sZCBhbGwgZGlnaXRzCisgICAgLy8gYW5kIGEgdGVybWluYXRpbmcgbnVs
bC1jaGFyYWN0ZXIuCisgICAgdm9pZCBCaWdudW1EdG9hKGRvdWJsZSB2LCBCaWdudW1EdG9hTW9k
ZSBtb2RlLCBpbnQgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgVmVjdG9y
PGNoYXI+IGJ1ZmZlciwgaW50KiBsZW5ndGgsIGludCogcG9pbnQpOworICAgIAorfSAgLy8gbmFt
ZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYg
IC8vIERPVUJMRV9DT05WRVJTSU9OX0JJR05VTV9EVE9BX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvYmlnbnVtLmNjIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9kdG9hL2JpZ251bS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MjdhMmY4ODI2NGJlNWE5ZTZjMzg4NmY4
NzkwZWQ2YjE4NzVlMmNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9kdG9hL2JpZ251bS5jYwpAQCAtMCwwICsxLDc2OCBAQAorLy8gQ29weXJpZ2h0IDIwMTAg
dGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
Ky8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisjaW5jbHVkZSAiYmlnbnVtLmgiCisjaW5jbHVkZSAidXRpbHMuaCIKKworbmFt
ZXNwYWNlIFdURiB7CisKK25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAg
QmlnbnVtOjpCaWdudW0oKQorICAgIDogYmlnaXRzXyhiaWdpdHNfYnVmZmVyXywga0JpZ2l0Q2Fw
YWNpdHkpLCB1c2VkX2RpZ2l0c18oMCksIGV4cG9uZW50XygwKSB7CisgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwga0JpZ2l0Q2FwYWNpdHk7ICsraSkgeworICAgICAgICAgICAgYmlnaXRzX1tp
XSA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgUz4KKyAgICBzdGF0aWMgaW50IEJpdFNpemUoUyB2YWx1ZSkgeworICAgICAgICByZXR1cm4g
OCAqIHNpemVvZih2YWx1ZSk7CisgICAgfQorICAgIAorICAgIC8vIEd1YXJhbnRlZWQgdG8gbGll
IGluIG9uZSBCaWdpdC4KKyAgICB2b2lkIEJpZ251bTo6QXNzaWduVUludDE2KHVpbnQxNl90IHZh
bHVlKSB7CisgICAgICAgIEFTU0VSVChrQmlnaXRTaXplID49IEJpdFNpemUodmFsdWUpKTsKKyAg
ICAgICAgWmVybygpOworICAgICAgICBpZiAodmFsdWUgPT0gMCkgcmV0dXJuOworICAgICAgICAK
KyAgICAgICAgRW5zdXJlQ2FwYWNpdHkoMSk7CisgICAgICAgIGJpZ2l0c19bMF0gPSB2YWx1ZTsK
KyAgICAgICAgdXNlZF9kaWdpdHNfID0gMTsKKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBC
aWdudW06OkFzc2lnblVJbnQ2NCh1aW50NjRfdCB2YWx1ZSkgeworICAgICAgICBjb25zdCBpbnQg
a1VJbnQ2NFNpemUgPSA2NDsKKyAgICAgICAgCisgICAgICAgIFplcm8oKTsKKyAgICAgICAgaWYg
KHZhbHVlID09IDApIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGludCBuZWVkZWRfYmlnaXRz
ID0ga1VJbnQ2NFNpemUgLyBrQmlnaXRTaXplICsgMTsKKyAgICAgICAgRW5zdXJlQ2FwYWNpdHko
bmVlZGVkX2JpZ2l0cyk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmVlZGVkX2JpZ2l0
czsgKytpKSB7CisgICAgICAgICAgICBiaWdpdHNfW2ldID0gdmFsdWUgJiBrQmlnaXRNYXNrOwor
ICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSA+PiBrQmlnaXRTaXplOworICAgICAgICB9CisgICAg
ICAgIHVzZWRfZGlnaXRzXyA9IG5lZWRlZF9iaWdpdHM7CisgICAgICAgIENsYW1wKCk7CisgICAg
fQorICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpBc3NpZ25CaWdudW0oY29uc3QgQmlnbnVt
JiBvdGhlcikgeworICAgICAgICBleHBvbmVudF8gPSBvdGhlci5leHBvbmVudF87CisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgb3RoZXIudXNlZF9kaWdpdHNfOyArK2kpIHsKKyAgICAgICAg
ICAgIGJpZ2l0c19baV0gPSBvdGhlci5iaWdpdHNfW2ldOworICAgICAgICB9CisgICAgICAgIC8v
IENsZWFyIHRoZSBleGNlc3MgZGlnaXRzIChpZiB0aGVyZSB3ZXJlIGFueSkuCisgICAgICAgIGZv
ciAoaW50IGkgPSBvdGhlci51c2VkX2RpZ2l0c187IGkgPCB1c2VkX2RpZ2l0c187ICsraSkgewor
ICAgICAgICAgICAgYmlnaXRzX1tpXSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgdXNlZF9kaWdp
dHNfID0gb3RoZXIudXNlZF9kaWdpdHNfOworICAgIH0KKyAgICAKKyAgICAKKyAgICBzdGF0aWMg
dWludDY0X3QgUmVhZFVJbnQ2NChWZWN0b3I8Y29uc3QgY2hhcj4gYnVmZmVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBmcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBkaWdpdHNfdG9fcmVhZCkgeworICAgICAgICB1aW50NjRfdCByZXN1bHQgPSAw
OworICAgICAgICBmb3IgKGludCBpID0gZnJvbTsgaSA8IGZyb20gKyBkaWdpdHNfdG9fcmVhZDsg
KytpKSB7CisgICAgICAgICAgICBpbnQgZGlnaXQgPSBidWZmZXJbaV0gLSAnMCc7CisgICAgICAg
ICAgICBBU1NFUlQoMCA8PSBkaWdpdCAmJiBkaWdpdCA8PSA5KTsKKyAgICAgICAgICAgIHJlc3Vs
dCA9IHJlc3VsdCAqIDEwICsgZGlnaXQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06OkFzc2lnbkRlY2ltYWxTdHJp
bmcoVmVjdG9yPGNvbnN0IGNoYXI+IHZhbHVlKSB7CisgICAgICAgIC8vIDJeNjQgPSAxODQ0Njc0
NDA3MzcwOTU1MTYxNiA+IDEwXjE5CisgICAgICAgIGNvbnN0IGludCBrTWF4VWludDY0RGVjaW1h
bERpZ2l0cyA9IDE5OworICAgICAgICBaZXJvKCk7CisgICAgICAgIGludCBsZW5ndGggPSB2YWx1
ZS5sZW5ndGgoKTsKKyAgICAgICAgaW50IHBvcyA9IDA7CisgICAgICAgIC8vIExldCdzIGp1c3Qg
c2F5IHRoYXQgZWFjaCBkaWdpdCBuZWVkcyA0IGJpdHMuCisgICAgICAgIHdoaWxlIChsZW5ndGgg
Pj0ga01heFVpbnQ2NERlY2ltYWxEaWdpdHMpIHsKKyAgICAgICAgICAgIHVpbnQ2NF90IGRpZ2l0
cyA9IFJlYWRVSW50NjQodmFsdWUsIHBvcywga01heFVpbnQ2NERlY2ltYWxEaWdpdHMpOworICAg
ICAgICAgICAgcG9zICs9IGtNYXhVaW50NjREZWNpbWFsRGlnaXRzOworICAgICAgICAgICAgbGVu
Z3RoIC09IGtNYXhVaW50NjREZWNpbWFsRGlnaXRzOworICAgICAgICAgICAgTXVsdGlwbHlCeVBv
d2VyT2ZUZW4oa01heFVpbnQ2NERlY2ltYWxEaWdpdHMpOworICAgICAgICAgICAgQWRkVUludDY0
KGRpZ2l0cyk7CisgICAgICAgIH0KKyAgICAgICAgdWludDY0X3QgZGlnaXRzID0gUmVhZFVJbnQ2
NCh2YWx1ZSwgcG9zLCBsZW5ndGgpOworICAgICAgICBNdWx0aXBseUJ5UG93ZXJPZlRlbihsZW5n
dGgpOworICAgICAgICBBZGRVSW50NjQoZGlnaXRzKTsKKyAgICAgICAgQ2xhbXAoKTsKKyAgICB9
CisgICAgCisgICAgCisgICAgc3RhdGljIGludCBIZXhDaGFyVmFsdWUoY2hhciBjKSB7CisgICAg
ICAgIGlmICgnMCcgPD0gYyAmJiBjIDw9ICc5JykgcmV0dXJuIGMgLSAnMCc7CisgICAgICAgIGlm
ICgnYScgPD0gYyAmJiBjIDw9ICdmJykgcmV0dXJuIDEwICsgYyAtICdhJzsKKyAgICAgICAgaWYg
KCdBJyA8PSBjICYmIGMgPD0gJ0YnKSByZXR1cm4gMTAgKyBjIC0gJ0EnOworICAgICAgICBVTlJF
QUNIQUJMRSgpOworICAgICAgICByZXR1cm4gMDsgIC8vIFRvIG1ha2UgY29tcGlsZXIgaGFwcHku
CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpBc3NpZ25IZXhTdHJpbmcoVmVj
dG9yPGNvbnN0IGNoYXI+IHZhbHVlKSB7CisgICAgICAgIFplcm8oKTsKKyAgICAgICAgaW50IGxl
bmd0aCA9IHZhbHVlLmxlbmd0aCgpOworICAgICAgICAKKyAgICAgICAgaW50IG5lZWRlZF9iaWdp
dHMgPSBsZW5ndGggKiA0IC8ga0JpZ2l0U2l6ZSArIDE7CisgICAgICAgIEVuc3VyZUNhcGFjaXR5
KG5lZWRlZF9iaWdpdHMpOworICAgICAgICBpbnQgc3RyaW5nX2luZGV4ID0gbGVuZ3RoIC0gMTsK
KyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuZWVkZWRfYmlnaXRzIC0gMTsgKytpKSB7Cisg
ICAgICAgICAgICAvLyBUaGVzZSBiaWdpdHMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgImZ1bGwiLgor
ICAgICAgICAgICAgQ2h1bmsgY3VycmVudF9iaWdpdCA9IDA7CisgICAgICAgICAgICBmb3IgKGlu
dCBqID0gMDsgaiA8IGtCaWdpdFNpemUgLyA0OyBqKyspIHsKKyAgICAgICAgICAgICAgICBjdXJy
ZW50X2JpZ2l0ICs9IEhleENoYXJWYWx1ZSh2YWx1ZVtzdHJpbmdfaW5kZXgtLV0pIDw8IChqICog
NCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBiaWdpdHNfW2ldID0gY3VycmVudF9iaWdp
dDsKKyAgICAgICAgfQorICAgICAgICB1c2VkX2RpZ2l0c18gPSBuZWVkZWRfYmlnaXRzIC0gMTsK
KyAgICAgICAgCisgICAgICAgIENodW5rIG1vc3Rfc2lnbmlmaWNhbnRfYmlnaXQgPSAwOyAgLy8g
Q291bGQgYmUgPSAwOworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8PSBzdHJpbmdfaW5kZXg7
ICsraikgeworICAgICAgICAgICAgbW9zdF9zaWduaWZpY2FudF9iaWdpdCA8PD0gNDsKKyAgICAg
ICAgICAgIG1vc3Rfc2lnbmlmaWNhbnRfYmlnaXQgKz0gSGV4Q2hhclZhbHVlKHZhbHVlW2pdKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAobW9zdF9zaWduaWZpY2FudF9iaWdpdCAhPSAwKSB7Cisg
ICAgICAgICAgICBiaWdpdHNfW3VzZWRfZGlnaXRzX10gPSBtb3N0X3NpZ25pZmljYW50X2JpZ2l0
OworICAgICAgICAgICAgdXNlZF9kaWdpdHNfKys7CisgICAgICAgIH0KKyAgICAgICAgQ2xhbXAo
KTsKKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06OkFkZFVJbnQ2NCh1aW50NjRf
dCBvcGVyYW5kKSB7CisgICAgICAgIGlmIChvcGVyYW5kID09IDApIHJldHVybjsKKyAgICAgICAg
QmlnbnVtIG90aGVyOworICAgICAgICBvdGhlci5Bc3NpZ25VSW50NjQob3BlcmFuZCk7CisgICAg
ICAgIEFkZEJpZ251bShvdGhlcik7CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVt
OjpBZGRCaWdudW0oY29uc3QgQmlnbnVtJiBvdGhlcikgeworICAgICAgICBBU1NFUlQoSXNDbGFt
cGVkKCkpOworICAgICAgICBBU1NFUlQob3RoZXIuSXNDbGFtcGVkKCkpOworICAgICAgICAKKyAg
ICAgICAgLy8gSWYgdGhpcyBoYXMgYSBncmVhdGVyIGV4cG9uZW50IHRoYW4gb3RoZXIgYXBwZW5k
IHplcm8tYmlnaXRzIHRvIHRoaXMuCisgICAgICAgIC8vIEFmdGVyIHRoaXMgY2FsbCBleHBvbmVu
dF8gPD0gb3RoZXIuZXhwb25lbnRfLgorICAgICAgICBBbGlnbihvdGhlcik7CisgICAgICAgIAor
ICAgICAgICAvLyBUaGVyZSBhcmUgdHdvIHBvc3NpYmlsaXRpZXM6CisgICAgICAgIC8vICAgYWFh
YWFhYWFhYWEgMDAwMCAgKHdoZXJlIHRoZSAwcyByZXByZXNlbnQgYSdzIGV4cG9uZW50KQorICAg
ICAgICAvLyAgICAgYmJiYmIgMDAwMDAwMDAKKyAgICAgICAgLy8gICAtLS0tLS0tLS0tLS0tLS0t
CisgICAgICAgIC8vICAgY2NjY2NjY2NjY2MgMDAwMAorICAgICAgICAvLyBvcgorICAgICAgICAv
LyAgICBhYWFhYWFhYWFhIDAwMDAKKyAgICAgICAgLy8gIGJiYmJiYmJiYiAwMDAwMDAwCisgICAg
ICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAvLyAgY2NjY2NjY2NjY2NjIDAwMDAK
KyAgICAgICAgLy8gSW4gYm90aCBjYXNlcyB3ZSBtaWdodCBuZWVkIGEgY2FycnkgYmlnaXQuCisg
ICAgICAgIAorICAgICAgICBFbnN1cmVDYXBhY2l0eSgxICsgTWF4KEJpZ2l0TGVuZ3RoKCksIG90
aGVyLkJpZ2l0TGVuZ3RoKCkpIC0gZXhwb25lbnRfKTsKKyAgICAgICAgQ2h1bmsgY2FycnkgPSAw
OworICAgICAgICBpbnQgYmlnaXRfcG9zID0gb3RoZXIuZXhwb25lbnRfIC0gZXhwb25lbnRfOwor
ICAgICAgICBBU1NFUlQoYmlnaXRfcG9zID49IDApOworICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IG90aGVyLnVzZWRfZGlnaXRzXzsgKytpKSB7CisgICAgICAgICAgICBDaHVuayBzdW0gPSBi
aWdpdHNfW2JpZ2l0X3Bvc10gKyBvdGhlci5iaWdpdHNfW2ldICsgY2Fycnk7CisgICAgICAgICAg
ICBiaWdpdHNfW2JpZ2l0X3Bvc10gPSBzdW0gJiBrQmlnaXRNYXNrOworICAgICAgICAgICAgY2Fy
cnkgPSBzdW0gPj4ga0JpZ2l0U2l6ZTsKKyAgICAgICAgICAgIGJpZ2l0X3BvcysrOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICB3aGlsZSAoY2FycnkgIT0gMCkgeworICAgICAgICAgICAg
Q2h1bmsgc3VtID0gYmlnaXRzX1tiaWdpdF9wb3NdICsgY2Fycnk7CisgICAgICAgICAgICBiaWdp
dHNfW2JpZ2l0X3Bvc10gPSBzdW0gJiBrQmlnaXRNYXNrOworICAgICAgICAgICAgY2FycnkgPSBz
dW0gPj4ga0JpZ2l0U2l6ZTsKKyAgICAgICAgICAgIGJpZ2l0X3BvcysrOworICAgICAgICB9Cisg
ICAgICAgIHVzZWRfZGlnaXRzXyA9IE1heChiaWdpdF9wb3MsIHVzZWRfZGlnaXRzXyk7CisgICAg
ICAgIEFTU0VSVChJc0NsYW1wZWQoKSk7CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgQmln
bnVtOjpTdWJ0cmFjdEJpZ251bShjb25zdCBCaWdudW0mIG90aGVyKSB7CisgICAgICAgIEFTU0VS
VChJc0NsYW1wZWQoKSk7CisgICAgICAgIEFTU0VSVChvdGhlci5Jc0NsYW1wZWQoKSk7CisgICAg
ICAgIC8vIFdlIHJlcXVpcmUgdGhpcyB0byBiZSBiaWdnZXIgdGhhbiBvdGhlci4KKyAgICAgICAg
QVNTRVJUKExlc3NFcXVhbChvdGhlciwgKnRoaXMpKTsKKyAgICAgICAgCisgICAgICAgIEFsaWdu
KG90aGVyKTsKKyAgICAgICAgCisgICAgICAgIGludCBvZmZzZXQgPSBvdGhlci5leHBvbmVudF8g
LSBleHBvbmVudF87CisgICAgICAgIENodW5rIGJvcnJvdyA9IDA7CisgICAgICAgIGludCBpOwor
ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgb3RoZXIudXNlZF9kaWdpdHNfOyArK2kpIHsKKyAgICAg
ICAgICAgIEFTU0VSVCgoYm9ycm93ID09IDApIHx8IChib3Jyb3cgPT0gMSkpOworICAgICAgICAg
ICAgQ2h1bmsgZGlmZmVyZW5jZSA9IGJpZ2l0c19baSArIG9mZnNldF0gLSBvdGhlci5iaWdpdHNf
W2ldIC0gYm9ycm93OworICAgICAgICAgICAgYmlnaXRzX1tpICsgb2Zmc2V0XSA9IGRpZmZlcmVu
Y2UgJiBrQmlnaXRNYXNrOworICAgICAgICAgICAgYm9ycm93ID0gZGlmZmVyZW5jZSA+PiAoa0No
dW5rU2l6ZSAtIDEpOworICAgICAgICB9CisgICAgICAgIHdoaWxlIChib3Jyb3cgIT0gMCkgewor
ICAgICAgICAgICAgQ2h1bmsgZGlmZmVyZW5jZSA9IGJpZ2l0c19baSArIG9mZnNldF0gLSBib3Jy
b3c7CisgICAgICAgICAgICBiaWdpdHNfW2kgKyBvZmZzZXRdID0gZGlmZmVyZW5jZSAmIGtCaWdp
dE1hc2s7CisgICAgICAgICAgICBib3Jyb3cgPSBkaWZmZXJlbmNlID4+IChrQ2h1bmtTaXplIC0g
MSk7CisgICAgICAgICAgICArK2k7CisgICAgICAgIH0KKyAgICAgICAgQ2xhbXAoKTsKKyAgICB9
CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06OlNoaWZ0TGVmdChpbnQgc2hpZnRfYW1vdW50
KSB7CisgICAgICAgIGlmICh1c2VkX2RpZ2l0c18gPT0gMCkgcmV0dXJuOworICAgICAgICBleHBv
bmVudF8gKz0gc2hpZnRfYW1vdW50IC8ga0JpZ2l0U2l6ZTsKKyAgICAgICAgaW50IGxvY2FsX3No
aWZ0ID0gc2hpZnRfYW1vdW50ICUga0JpZ2l0U2l6ZTsKKyAgICAgICAgRW5zdXJlQ2FwYWNpdHko
dXNlZF9kaWdpdHNfICsgMSk7CisgICAgICAgIEJpZ2l0c1NoaWZ0TGVmdChsb2NhbF9zaGlmdCk7
CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpNdWx0aXBseUJ5VUludDMyKHVp
bnQzMl90IGZhY3RvcikgeworICAgICAgICBpZiAoZmFjdG9yID09IDEpIHJldHVybjsKKyAgICAg
ICAgaWYgKGZhY3RvciA9PSAwKSB7CisgICAgICAgICAgICBaZXJvKCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHVzZWRfZGlnaXRzXyA9PSAwKSByZXR1cm47
CisgICAgICAgIAorICAgICAgICAvLyBUaGUgcHJvZHVjdCBvZiBhIGJpZ2l0IHdpdGggdGhlIGZh
Y3RvciBpcyBvZiBzaXplIGtCaWdpdFNpemUgKyAzMi4KKyAgICAgICAgLy8gQXNzZXJ0IHRoYXQg
dGhpcyBudW1iZXIgKyAxIChmb3IgdGhlIGNhcnJ5KSBmaXRzIGludG8gZG91YmxlIGNodW5rLgor
ICAgICAgICBBU1NFUlQoa0RvdWJsZUNodW5rU2l6ZSA+PSBrQmlnaXRTaXplICsgMzIgKyAxKTsK
KyAgICAgICAgRG91YmxlQ2h1bmsgY2FycnkgPSAwOworICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IHVzZWRfZGlnaXRzXzsgKytpKSB7CisgICAgICAgICAgICBEb3VibGVDaHVuayBwcm9kdWN0
ID0gc3RhdGljX2Nhc3Q8RG91YmxlQ2h1bms+KGZhY3RvcikgKiBiaWdpdHNfW2ldICsgY2Fycnk7
CisgICAgICAgICAgICBiaWdpdHNfW2ldID0gc3RhdGljX2Nhc3Q8Q2h1bms+KHByb2R1Y3QgJiBr
QmlnaXRNYXNrKTsKKyAgICAgICAgICAgIGNhcnJ5ID0gKHByb2R1Y3QgPj4ga0JpZ2l0U2l6ZSk7
CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKGNhcnJ5ICE9IDApIHsKKyAgICAgICAgICAgIEVu
c3VyZUNhcGFjaXR5KHVzZWRfZGlnaXRzXyArIDEpOworICAgICAgICAgICAgYmlnaXRzX1t1c2Vk
X2RpZ2l0c19dID0gY2FycnkgJiBrQmlnaXRNYXNrOworICAgICAgICAgICAgdXNlZF9kaWdpdHNf
Kys7CisgICAgICAgICAgICBjYXJyeSA+Pj0ga0JpZ2l0U2l6ZTsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICAKKyAgICB2b2lkIEJpZ251bTo6TXVsdGlwbHlCeVVJbnQ2NCh1aW50NjRfdCBm
YWN0b3IpIHsKKyAgICAgICAgaWYgKGZhY3RvciA9PSAxKSByZXR1cm47CisgICAgICAgIGlmIChm
YWN0b3IgPT0gMCkgeworICAgICAgICAgICAgWmVybygpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIEFTU0VSVChrQmlnaXRTaXplIDwgMzIpOworICAgICAgICB1aW50
NjRfdCBjYXJyeSA9IDA7CisgICAgICAgIHVpbnQ2NF90IGxvdyA9IGZhY3RvciAmIDB4RkZGRkZG
RkY7CisgICAgICAgIHVpbnQ2NF90IGhpZ2ggPSBmYWN0b3IgPj4gMzI7CisgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgdXNlZF9kaWdpdHNfOyArK2kpIHsKKyAgICAgICAgICAgIHVpbnQ2NF90
IHByb2R1Y3RfbG93ID0gbG93ICogYmlnaXRzX1tpXTsKKyAgICAgICAgICAgIHVpbnQ2NF90IHBy
b2R1Y3RfaGlnaCA9IGhpZ2ggKiBiaWdpdHNfW2ldOworICAgICAgICAgICAgdWludDY0X3QgdG1w
ID0gKGNhcnJ5ICYga0JpZ2l0TWFzaykgKyBwcm9kdWN0X2xvdzsKKyAgICAgICAgICAgIGJpZ2l0
c19baV0gPSB0bXAgJiBrQmlnaXRNYXNrOworICAgICAgICAgICAgY2FycnkgPSAoY2FycnkgPj4g
a0JpZ2l0U2l6ZSkgKyAodG1wID4+IGtCaWdpdFNpemUpICsKKyAgICAgICAgICAgIChwcm9kdWN0
X2hpZ2ggPDwgKDMyIC0ga0JpZ2l0U2l6ZSkpOworICAgICAgICB9CisgICAgICAgIHdoaWxlIChj
YXJyeSAhPSAwKSB7CisgICAgICAgICAgICBFbnN1cmVDYXBhY2l0eSh1c2VkX2RpZ2l0c18gKyAx
KTsKKyAgICAgICAgICAgIGJpZ2l0c19bdXNlZF9kaWdpdHNfXSA9IGNhcnJ5ICYga0JpZ2l0TWFz
azsKKyAgICAgICAgICAgIHVzZWRfZGlnaXRzXysrOworICAgICAgICAgICAgY2FycnkgPj49IGtC
aWdpdFNpemU7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06
Ok11bHRpcGx5QnlQb3dlck9mVGVuKGludCBleHBvbmVudCkgeworICAgICAgICBjb25zdCB1aW50
NjRfdCBrRml2ZTI3ID0gVUlOVDY0XzJQQVJUX0MoMHg2NzY1Yzc5MywgZmExMDA3OWQpOworICAg
ICAgICBjb25zdCB1aW50MTZfdCBrRml2ZTEgPSA1OworICAgICAgICBjb25zdCB1aW50MTZfdCBr
Rml2ZTIgPSBrRml2ZTEgKiA1OworICAgICAgICBjb25zdCB1aW50MTZfdCBrRml2ZTMgPSBrRml2
ZTIgKiA1OworICAgICAgICBjb25zdCB1aW50MTZfdCBrRml2ZTQgPSBrRml2ZTMgKiA1OworICAg
ICAgICBjb25zdCB1aW50MTZfdCBrRml2ZTUgPSBrRml2ZTQgKiA1OworICAgICAgICBjb25zdCB1
aW50MTZfdCBrRml2ZTYgPSBrRml2ZTUgKiA1OworICAgICAgICBjb25zdCB1aW50MzJfdCBrRml2
ZTcgPSBrRml2ZTYgKiA1OworICAgICAgICBjb25zdCB1aW50MzJfdCBrRml2ZTggPSBrRml2ZTcg
KiA1OworICAgICAgICBjb25zdCB1aW50MzJfdCBrRml2ZTkgPSBrRml2ZTggKiA1OworICAgICAg
ICBjb25zdCB1aW50MzJfdCBrRml2ZTEwID0ga0ZpdmU5ICogNTsKKyAgICAgICAgY29uc3QgdWlu
dDMyX3Qga0ZpdmUxMSA9IGtGaXZlMTAgKiA1OworICAgICAgICBjb25zdCB1aW50MzJfdCBrRml2
ZTEyID0ga0ZpdmUxMSAqIDU7CisgICAgICAgIGNvbnN0IHVpbnQzMl90IGtGaXZlMTMgPSBrRml2
ZTEyICogNTsKKyAgICAgICAgY29uc3QgdWludDMyX3Qga0ZpdmUxX3RvXzEyW10gPQorICAgICAg
ICB7IGtGaXZlMSwga0ZpdmUyLCBrRml2ZTMsIGtGaXZlNCwga0ZpdmU1LCBrRml2ZTYsCisgICAg
ICAgICAgICBrRml2ZTcsIGtGaXZlOCwga0ZpdmU5LCBrRml2ZTEwLCBrRml2ZTExLCBrRml2ZTEy
IH07CisgICAgICAgIAorICAgICAgICBBU1NFUlQoZXhwb25lbnQgPj0gMCk7CisgICAgICAgIGlm
IChleHBvbmVudCA9PSAwKSByZXR1cm47CisgICAgICAgIGlmICh1c2VkX2RpZ2l0c18gPT0gMCkg
cmV0dXJuOworICAgICAgICAKKyAgICAgICAgLy8gV2Ugc2hpZnQgYnkgZXhwb25lbnQgYXQgdGhl
IGVuZCBqdXN0IGJlZm9yZSByZXR1cm5pbmcuCisgICAgICAgIGludCByZW1haW5pbmdfZXhwb25l
bnQgPSBleHBvbmVudDsKKyAgICAgICAgd2hpbGUgKHJlbWFpbmluZ19leHBvbmVudCA+PSAyNykg
eworICAgICAgICAgICAgTXVsdGlwbHlCeVVJbnQ2NChrRml2ZTI3KTsKKyAgICAgICAgICAgIHJl
bWFpbmluZ19leHBvbmVudCAtPSAyNzsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAocmVtYWlu
aW5nX2V4cG9uZW50ID49IDEzKSB7CisgICAgICAgICAgICBNdWx0aXBseUJ5VUludDMyKGtGaXZl
MTMpOworICAgICAgICAgICAgcmVtYWluaW5nX2V4cG9uZW50IC09IDEzOworICAgICAgICB9Cisg
ICAgICAgIGlmIChyZW1haW5pbmdfZXhwb25lbnQgPiAwKSB7CisgICAgICAgICAgICBNdWx0aXBs
eUJ5VUludDMyKGtGaXZlMV90b18xMltyZW1haW5pbmdfZXhwb25lbnQgLSAxXSk7CisgICAgICAg
IH0KKyAgICAgICAgU2hpZnRMZWZ0KGV4cG9uZW50KTsKKyAgICB9CisgICAgCisgICAgCisgICAg
dm9pZCBCaWdudW06OlNxdWFyZSgpIHsKKyAgICAgICAgQVNTRVJUKElzQ2xhbXBlZCgpKTsKKyAg
ICAgICAgaW50IHByb2R1Y3RfbGVuZ3RoID0gMiAqIHVzZWRfZGlnaXRzXzsKKyAgICAgICAgRW5z
dXJlQ2FwYWNpdHkocHJvZHVjdF9sZW5ndGgpOworICAgICAgICAKKyAgICAgICAgLy8gQ29tYmEg
bXVsdGlwbGljYXRpb246IGNvbXB1dGUgZWFjaCBjb2x1bW4gc2VwYXJhdGVseS4KKyAgICAgICAg
Ly8gRXhhbXBsZTogciA9IGEyYTFhMCAqIGIyYjFiMC4KKyAgICAgICAgLy8gICAgciA9ICAxICAg
ICogYTBiMCArCisgICAgICAgIC8vICAgICAgICAxMCAgICAqIChhMWIwICsgYTBiMSkgKworICAg
ICAgICAvLyAgICAgICAgMTAwICAgKiAoYTJiMCArIGExYjEgKyBhMGIyKSArCisgICAgICAgIC8v
ICAgICAgICAxMDAwICAqIChhMmIxICsgYTFiMikgKworICAgICAgICAvLyAgICAgICAgMTAwMDAg
KiBhMmIyCisgICAgICAgIC8vCisgICAgICAgIC8vIEluIHRoZSB3b3JzdCBjYXNlIHdlIGhhdmUg
dG8gYWNjdW11bGF0ZSBuYi1kaWdpdHMgcHJvZHVjdHMgb2YgZGlnaXQqZGlnaXQuCisgICAgICAg
IC8vCisgICAgICAgIC8vIEFzc2VydCB0aGF0IHRoZSBhZGRpdGlvbmFsIG51bWJlciBvZiBiaXRz
IGluIGEgRG91YmxlQ2h1bmsgYXJlIGVub3VnaCB0bworICAgICAgICAvLyBzdW0gdXAgdXNlZF9k
aWdpdHMgb2YgQmlnaXQqQmlnaXQuCisgICAgICAgIGlmICgoMSA8PCAoMiAqIChrQ2h1bmtTaXpl
IC0ga0JpZ2l0U2l6ZSkpKSA8PSB1c2VkX2RpZ2l0c18pIHsKKyAgICAgICAgICAgIFVOSU1QTEVN
RU5URUQoKTsKKyAgICAgICAgfQorICAgICAgICBEb3VibGVDaHVuayBhY2N1bXVsYXRvciA9IDA7
CisgICAgICAgIC8vIEZpcnN0IHNoaWZ0IHRoZSBkaWdpdHMgc28gd2UgZG9uJ3Qgb3ZlcndyaXRl
IHRoZW0uCisgICAgICAgIGludCBjb3B5X29mZnNldCA9IHVzZWRfZGlnaXRzXzsKKyAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCB1c2VkX2RpZ2l0c187ICsraSkgeworICAgICAgICAgICAgYmln
aXRzX1tjb3B5X29mZnNldCArIGldID0gYmlnaXRzX1tpXTsKKyAgICAgICAgfQorICAgICAgICAv
LyBXZSBoYXZlIHR3byBsb29wcyB0byBhdm9pZCBzb21lICdpZidzIGluIHRoZSBsb29wLgorICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IHVzZWRfZGlnaXRzXzsgKytpKSB7CisgICAgICAgICAg
ICAvLyBQcm9jZXNzIHRlbXBvcmFyeSBkaWdpdCBpIHdpdGggcG93ZXIgaS4KKyAgICAgICAgICAg
IC8vIFRoZSBzdW0gb2YgdGhlIHR3byBpbmRpY2VzIG11c3QgYmUgZXF1YWwgdG8gaS4KKyAgICAg
ICAgICAgIGludCBiaWdpdF9pbmRleDEgPSBpOworICAgICAgICAgICAgaW50IGJpZ2l0X2luZGV4
MiA9IDA7CisgICAgICAgICAgICAvLyBTdW0gYWxsIG9mIHRoZSBzdWItcHJvZHVjdHMuCisgICAg
ICAgICAgICB3aGlsZSAoYmlnaXRfaW5kZXgxID49IDApIHsKKyAgICAgICAgICAgICAgICBDaHVu
ayBjaHVuazEgPSBiaWdpdHNfW2NvcHlfb2Zmc2V0ICsgYmlnaXRfaW5kZXgxXTsKKyAgICAgICAg
ICAgICAgICBDaHVuayBjaHVuazIgPSBiaWdpdHNfW2NvcHlfb2Zmc2V0ICsgYmlnaXRfaW5kZXgy
XTsKKyAgICAgICAgICAgICAgICBhY2N1bXVsYXRvciArPSBzdGF0aWNfY2FzdDxEb3VibGVDaHVu
az4oY2h1bmsxKSAqIGNodW5rMjsKKyAgICAgICAgICAgICAgICBiaWdpdF9pbmRleDEtLTsKKyAg
ICAgICAgICAgICAgICBiaWdpdF9pbmRleDIrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJpZ2l0c19baV0gPSBzdGF0aWNfY2FzdDxDaHVuaz4oYWNjdW11bGF0b3IpICYga0JpZ2l0TWFz
azsKKyAgICAgICAgICAgIGFjY3VtdWxhdG9yID4+PSBrQmlnaXRTaXplOworICAgICAgICB9Cisg
ICAgICAgIGZvciAoaW50IGkgPSB1c2VkX2RpZ2l0c187IGkgPCBwcm9kdWN0X2xlbmd0aDsgKytp
KSB7CisgICAgICAgICAgICBpbnQgYmlnaXRfaW5kZXgxID0gdXNlZF9kaWdpdHNfIC0gMTsKKyAg
ICAgICAgICAgIGludCBiaWdpdF9pbmRleDIgPSBpIC0gYmlnaXRfaW5kZXgxOworICAgICAgICAg
ICAgLy8gSW52YXJpYW50OiBzdW0gb2YgYm90aCBpbmRpY2VzIGlzIGFnYWluIGVxdWFsIHRvIGku
CisgICAgICAgICAgICAvLyBJbm5lciBsb29wIHJ1bnMgMCB0aW1lcyBvbiBsYXN0IGl0ZXJhdGlv
biwgZW1wdHlpbmcgYWNjdW11bGF0b3IuCisgICAgICAgICAgICB3aGlsZSAoYmlnaXRfaW5kZXgy
IDwgdXNlZF9kaWdpdHNfKSB7CisgICAgICAgICAgICAgICAgQ2h1bmsgY2h1bmsxID0gYmlnaXRz
X1tjb3B5X29mZnNldCArIGJpZ2l0X2luZGV4MV07CisgICAgICAgICAgICAgICAgQ2h1bmsgY2h1
bmsyID0gYmlnaXRzX1tjb3B5X29mZnNldCArIGJpZ2l0X2luZGV4Ml07CisgICAgICAgICAgICAg
ICAgYWNjdW11bGF0b3IgKz0gc3RhdGljX2Nhc3Q8RG91YmxlQ2h1bms+KGNodW5rMSkgKiBjaHVu
azI7CisgICAgICAgICAgICAgICAgYmlnaXRfaW5kZXgxLS07CisgICAgICAgICAgICAgICAgYmln
aXRfaW5kZXgyKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBUaGUgb3ZlcndyaXR0
ZW4gYmlnaXRzX1tpXSB3aWxsIG5ldmVyIGJlIHJlYWQgaW4gZnVydGhlciBsb29wIGl0ZXJhdGlv
bnMsCisgICAgICAgICAgICAvLyBiZWNhdXNlIGJpZ2l0X2luZGV4MSBhbmQgYmlnaXRfaW5kZXgy
IGFyZSBhbHdheXMgZ3JlYXRlcgorICAgICAgICAgICAgLy8gdGhhbiBpIC0gdXNlZF9kaWdpdHNf
LgorICAgICAgICAgICAgYmlnaXRzX1tpXSA9IHN0YXRpY19jYXN0PENodW5rPihhY2N1bXVsYXRv
cikgJiBrQmlnaXRNYXNrOworICAgICAgICAgICAgYWNjdW11bGF0b3IgPj49IGtCaWdpdFNpemU7
CisgICAgICAgIH0KKyAgICAgICAgLy8gU2luY2UgdGhlIHJlc3VsdCB3YXMgZ3VhcmFudGVlZCB0
byBsaWUgaW5zaWRlIHRoZSBudW1iZXIgdGhlCisgICAgICAgIC8vIGFjY3VtdWxhdG9yIG11c3Qg
YmUgMCBub3cuCisgICAgICAgIEFTU0VSVChhY2N1bXVsYXRvciA9PSAwKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIERvbid0IGZvcmdldCB0byB1cGRhdGUgdGhlIHVzZWRfZGlnaXRzIGFuZCB0aGUg
ZXhwb25lbnQuCisgICAgICAgIHVzZWRfZGlnaXRzXyA9IHByb2R1Y3RfbGVuZ3RoOworICAgICAg
ICBleHBvbmVudF8gKj0gMjsKKyAgICAgICAgQ2xhbXAoKTsKKyAgICB9CisgICAgCisgICAgCisg
ICAgdm9pZCBCaWdudW06OkFzc2lnblBvd2VyVUludDE2KHVpbnQxNl90IGJhc2UsIGludCBwb3dl
cl9leHBvbmVudCkgeworICAgICAgICBBU1NFUlQoYmFzZSAhPSAwKTsKKyAgICAgICAgQVNTRVJU
KHBvd2VyX2V4cG9uZW50ID49IDApOworICAgICAgICBpZiAocG93ZXJfZXhwb25lbnQgPT0gMCkg
eworICAgICAgICAgICAgQXNzaWduVUludDE2KDEpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIFplcm8oKTsKKyAgICAgICAgaW50IHNoaWZ0cyA9IDA7CisgICAgICAg
IC8vIFdlIGV4cGVjdCBiYXNlIHRvIGJlIGluIHJhbmdlIDItMzIsIGFuZCBtb3N0IG9mdGVuIHRv
IGJlIDEwLgorICAgICAgICAvLyBJdCBkb2VzIG5vdCBtYWtlIG11Y2ggc2Vuc2UgdG8gaW1wbGVt
ZW50IGRpZmZlcmVudCBhbGdvcml0aG1zIGZvciBjb3VudGluZworICAgICAgICAvLyB0aGUgYml0
cy4KKyAgICAgICAgd2hpbGUgKChiYXNlICYgMSkgPT0gMCkgeworICAgICAgICAgICAgYmFzZSA+
Pj0gMTsKKyAgICAgICAgICAgIHNoaWZ0cysrOworICAgICAgICB9CisgICAgICAgIGludCBiaXRf
c2l6ZSA9IDA7CisgICAgICAgIGludCB0bXBfYmFzZSA9IGJhc2U7CisgICAgICAgIHdoaWxlICh0
bXBfYmFzZSAhPSAwKSB7CisgICAgICAgICAgICB0bXBfYmFzZSA+Pj0gMTsKKyAgICAgICAgICAg
IGJpdF9zaXplKys7CisgICAgICAgIH0KKyAgICAgICAgaW50IGZpbmFsX3NpemUgPSBiaXRfc2l6
ZSAqIHBvd2VyX2V4cG9uZW50OworICAgICAgICAvLyAxIGV4dHJhIGJpZ2l0IGZvciB0aGUgc2hp
ZnRpbmcsIGFuZCBvbmUgZm9yIHJvdW5kZWQgZmluYWxfc2l6ZS4KKyAgICAgICAgRW5zdXJlQ2Fw
YWNpdHkoZmluYWxfc2l6ZSAvIGtCaWdpdFNpemUgKyAyKTsKKyAgICAgICAgCisgICAgICAgIC8v
IExlZnQgdG8gUmlnaHQgZXhwb25lbnRpYXRpb24uCisgICAgICAgIGludCBtYXNrID0gMTsKKyAg
ICAgICAgd2hpbGUgKHBvd2VyX2V4cG9uZW50ID49IG1hc2spIG1hc2sgPDw9IDE7CisgICAgICAg
IAorICAgICAgICAvLyBUaGUgbWFzayBpcyBub3cgcG9pbnRpbmcgdG8gdGhlIGJpdCBhYm92ZSB0
aGUgbW9zdCBzaWduaWZpY2FudCAxLWJpdCBvZgorICAgICAgICAvLyBwb3dlcl9leHBvbmVudC4K
KyAgICAgICAgLy8gR2V0IHJpZCBvZiBmaXJzdCAxLWJpdDsKKyAgICAgICAgbWFzayA+Pj0gMjsK
KyAgICAgICAgdWludDY0X3QgdGhpc192YWx1ZSA9IGJhc2U7CisgICAgICAgIAorICAgICAgICBi
b29sIGRlbGF5ZWRfbXVsdGlwbGljaWF0aW9uID0gZmFsc2U7CisgICAgICAgIGNvbnN0IHVpbnQ2
NF90IG1heF8zMmJpdHMgPSAweEZGRkZGRkZGOworICAgICAgICB3aGlsZSAobWFzayAhPSAwICYm
IHRoaXNfdmFsdWUgPD0gbWF4XzMyYml0cykgeworICAgICAgICAgICAgdGhpc192YWx1ZSA9IHRo
aXNfdmFsdWUgKiB0aGlzX3ZhbHVlOworICAgICAgICAgICAgLy8gVmVyaWZ5IHRoYXQgdGhlcmUg
aXMgZW5vdWdoIHNwYWNlIGluIHRoaXNfdmFsdWUgdG8gcGVyZm9ybSB0aGUKKyAgICAgICAgICAg
IC8vIG11bHRpcGxpY2F0aW9uLiAgVGhlIGZpcnN0IGJpdF9zaXplIGJpdHMgbXVzdCBiZSAwLgor
ICAgICAgICAgICAgaWYgKChwb3dlcl9leHBvbmVudCAmIG1hc2spICE9IDApIHsKKyAgICAgICAg
ICAgICAgICB1aW50NjRfdCBiYXNlX2JpdHNfbWFzayA9CisgICAgICAgICAgICAgICAgfigoc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KDEpIDw8ICg2NCAtIGJpdF9zaXplKSkgLSAxKTsKKyAgICAgICAg
ICAgICAgICBib29sIGhpZ2hfYml0c196ZXJvID0gKHRoaXNfdmFsdWUgJiBiYXNlX2JpdHNfbWFz
aykgPT0gMDsKKyAgICAgICAgICAgICAgICBpZiAoaGlnaF9iaXRzX3plcm8pIHsKKyAgICAgICAg
ICAgICAgICAgICAgdGhpc192YWx1ZSAqPSBiYXNlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIGRlbGF5ZWRfbXVsdGlwbGljaWF0aW9uID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtYXNrID4+PSAxOwor
ICAgICAgICB9CisgICAgICAgIEFzc2lnblVJbnQ2NCh0aGlzX3ZhbHVlKTsKKyAgICAgICAgaWYg
KGRlbGF5ZWRfbXVsdGlwbGljaWF0aW9uKSB7CisgICAgICAgICAgICBNdWx0aXBseUJ5VUludDMy
KGJhc2UpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBOb3cgZG8gdGhlIHNhbWUg
dGhpbmcgYXMgYSBiaWdudW0uCisgICAgICAgIHdoaWxlIChtYXNrICE9IDApIHsKKyAgICAgICAg
ICAgIFNxdWFyZSgpOworICAgICAgICAgICAgaWYgKChwb3dlcl9leHBvbmVudCAmIG1hc2spICE9
IDApIHsKKyAgICAgICAgICAgICAgICBNdWx0aXBseUJ5VUludDMyKGJhc2UpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgbWFzayA+Pj0gMTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgLy8gQW5kIGZpbmFsbHkgYWRkIHRoZSBzYXZlZCBzaGlmdHMuCisgICAgICAgIFNoaWZ0TGVm
dChzaGlmdHMgKiBwb3dlcl9leHBvbmVudCk7CisgICAgfQorICAgIAorICAgIAorICAgIC8vIFBy
ZWNvbmRpdGlvbjogdGhpcy9vdGhlciA8IDE2Yml0LgorICAgIHVpbnQxNl90IEJpZ251bTo6RGl2
aWRlTW9kdWxvSW50QmlnbnVtKGNvbnN0IEJpZ251bSYgb3RoZXIpIHsKKyAgICAgICAgQVNTRVJU
KElzQ2xhbXBlZCgpKTsKKyAgICAgICAgQVNTRVJUKG90aGVyLklzQ2xhbXBlZCgpKTsKKyAgICAg
ICAgQVNTRVJUKG90aGVyLnVzZWRfZGlnaXRzXyA+IDApOworICAgICAgICAKKyAgICAgICAgLy8g
RWFzeSBjYXNlOiBpZiB3ZSBoYXZlIGxlc3MgZGlnaXRzIHRoYW4gdGhlIGRpdmlzb3IgdGhhbiB0
aGUgcmVzdWx0IGlzIDAuCisgICAgICAgIC8vIE5vdGU6IHRoaXMgaGFuZGxlcyB0aGUgY2FzZSB3
aGVyZSB0aGlzID09IDAsIHRvby4KKyAgICAgICAgaWYgKEJpZ2l0TGVuZ3RoKCkgPCBvdGhlci5C
aWdpdExlbmd0aCgpKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgQWxpZ24ob3RoZXIpOworICAgICAgICAKKyAgICAgICAgdWludDE2X3QgcmVz
dWx0ID0gMDsKKyAgICAgICAgCisgICAgICAgIC8vIFN0YXJ0IGJ5IHJlbW92aW5nIG11bHRpcGxl
cyBvZiAnb3RoZXInIHVudGlsIGJvdGggbnVtYmVycyBoYXZlIHRoZSBzYW1lCisgICAgICAgIC8v
IG51bWJlciBvZiBkaWdpdHMuCisgICAgICAgIHdoaWxlIChCaWdpdExlbmd0aCgpID4gb3RoZXIu
QmlnaXRMZW5ndGgoKSkgeworICAgICAgICAgICAgLy8gVGhpcyBuYWl2ZSBhcHByb2FjaCBpcyBl
eHRyZW1lbHkgaW5lZmZpY2llbnQgaWYgdGhlIHRoaXMgZGl2aWRlZCBvdGhlcgorICAgICAgICAg
ICAgLy8gbWlnaHQgYmUgYmlnLiBUaGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGZvciBkb3Vi
bGVUb1N0cmluZyB3aGVyZQorICAgICAgICAgICAgLy8gdGhlIHJlc3VsdCBzaG91bGQgYmUgc21h
bGwgKGxlc3MgdGhhbiAxMCkuCisgICAgICAgICAgICBBU1NFUlQob3RoZXIuYmlnaXRzX1tvdGhl
ci51c2VkX2RpZ2l0c18gLSAxXSA+PSAoKDEgPDwga0JpZ2l0U2l6ZSkgLyAxNikpOworICAgICAg
ICAgICAgLy8gUmVtb3ZlIHRoZSBtdWx0aXBsZXMgb2YgdGhlIGZpcnN0IGRpZ2l0LgorICAgICAg
ICAgICAgLy8gRXhhbXBsZSB0aGlzID0gMjMgYW5kIG90aGVyIGVxdWFscyA5LiAtPiBSZW1vdmUg
MiBtdWx0aXBsZXMuCisgICAgICAgICAgICByZXN1bHQgKz0gYmlnaXRzX1t1c2VkX2RpZ2l0c18g
LSAxXTsKKyAgICAgICAgICAgIFN1YnRyYWN0VGltZXMob3RoZXIsIGJpZ2l0c19bdXNlZF9kaWdp
dHNfIC0gMV0pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBU1NFUlQoQmlnaXRMZW5n
dGgoKSA9PSBvdGhlci5CaWdpdExlbmd0aCgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIEJvdGgg
YmlnbnVtcyBhcmUgYXQgdGhlIHNhbWUgbGVuZ3RoIG5vdy4KKyAgICAgICAgLy8gU2luY2Ugb3Ro
ZXIgaGFzIG1vcmUgdGhhbiAwIGRpZ2l0cyB3ZSBrbm93IHRoYXQgdGhlIGFjY2VzcyB0bworICAg
ICAgICAvLyBiaWdpdHNfW3VzZWRfZGlnaXRzXyAtIDFdIGlzIHNhZmUuCisgICAgICAgIENodW5r
IHRoaXNfYmlnaXQgPSBiaWdpdHNfW3VzZWRfZGlnaXRzXyAtIDFdOworICAgICAgICBDaHVuayBv
dGhlcl9iaWdpdCA9IG90aGVyLmJpZ2l0c19bb3RoZXIudXNlZF9kaWdpdHNfIC0gMV07CisgICAg
ICAgIAorICAgICAgICBpZiAob3RoZXIudXNlZF9kaWdpdHNfID09IDEpIHsKKyAgICAgICAgICAg
IC8vIFNob3J0Y3V0IGZvciBlYXN5IChhbmQgY29tbW9uKSBjYXNlLgorICAgICAgICAgICAgaW50
IHF1b3RpZW50ID0gdGhpc19iaWdpdCAvIG90aGVyX2JpZ2l0OworICAgICAgICAgICAgYmlnaXRz
X1t1c2VkX2RpZ2l0c18gLSAxXSA9IHRoaXNfYmlnaXQgLSBvdGhlcl9iaWdpdCAqIHF1b3RpZW50
OworICAgICAgICAgICAgcmVzdWx0ICs9IHF1b3RpZW50OworICAgICAgICAgICAgQ2xhbXAoKTsK
KyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGludCBkaXZpc2lvbl9lc3RpbWF0ZSA9IHRoaXNfYmlnaXQgLyAob3RoZXJfYmlnaXQgKyAxKTsK
KyAgICAgICAgcmVzdWx0ICs9IGRpdmlzaW9uX2VzdGltYXRlOworICAgICAgICBTdWJ0cmFjdFRp
bWVzKG90aGVyLCBkaXZpc2lvbl9lc3RpbWF0ZSk7CisgICAgICAgIAorICAgICAgICBpZiAob3Ro
ZXJfYmlnaXQgKiAoZGl2aXNpb25fZXN0aW1hdGUgKyAxKSA+IHRoaXNfYmlnaXQpIHsKKyAgICAg
ICAgICAgIC8vIE5vIG5lZWQgdG8gZXZlbiB0cnkgdG8gc3VidHJhY3QuIEV2ZW4gaWYgb3RoZXIn
cyByZW1haW5pbmcgZGlnaXRzIHdlcmUgMAorICAgICAgICAgICAgLy8gYW5vdGhlciBzdWJ0cmFj
dGlvbiB3b3VsZCBiZSB0b28gbXVjaC4KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHdoaWxlIChMZXNzRXF1YWwob3RoZXIsICp0aGlzKSkg
eworICAgICAgICAgICAgU3VidHJhY3RCaWdudW0ob3RoZXIpOworICAgICAgICAgICAgcmVzdWx0
Kys7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAg
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUz4KKyAgICBzdGF0aWMgaW50IFNpemVJbkhleENoYXJz
KFMgbnVtYmVyKSB7CisgICAgICAgIEFTU0VSVChudW1iZXIgPiAwKTsKKyAgICAgICAgaW50IHJl
c3VsdCA9IDA7CisgICAgICAgIHdoaWxlIChudW1iZXIgIT0gMCkgeworICAgICAgICAgICAgbnVt
YmVyID4+PSA0OworICAgICAgICAgICAgcmVzdWx0Kys7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgCisgICAgc3RhdGljIGNoYXIgSGV4Q2hhck9m
VmFsdWUoaW50IHZhbHVlKSB7CisgICAgICAgIEFTU0VSVCgwIDw9IHZhbHVlICYmIHZhbHVlIDw9
IDE2KTsKKyAgICAgICAgaWYgKHZhbHVlIDwgMTApIHJldHVybiB2YWx1ZSArICcwJzsKKyAgICAg
ICAgcmV0dXJuIHZhbHVlIC0gMTAgKyAnQSc7CisgICAgfQorICAgIAorICAgIAorICAgIGJvb2wg
QmlnbnVtOjpUb0hleFN0cmluZyhjaGFyKiBidWZmZXIsIGludCBidWZmZXJfc2l6ZSkgY29uc3Qg
eworICAgICAgICBBU1NFUlQoSXNDbGFtcGVkKCkpOworICAgICAgICAvLyBFYWNoIGJpZ2l0IG11
c3QgYmUgcHJpbnRhYmxlIGFzIHNlcGFyYXRlIGhleC1jaGFyYWN0ZXIuCisgICAgICAgIEFTU0VS
VChrQmlnaXRTaXplICUgNCA9PSAwKTsKKyAgICAgICAgY29uc3QgaW50IGtIZXhDaGFyc1BlckJp
Z2l0ID0ga0JpZ2l0U2l6ZSAvIDQ7CisgICAgICAgIAorICAgICAgICBpZiAodXNlZF9kaWdpdHNf
ID09IDApIHsKKyAgICAgICAgICAgIGlmIChidWZmZXJfc2l6ZSA8IDIpIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIGJ1ZmZlclswXSA9ICcwJzsKKyAgICAgICAgICAgIGJ1ZmZlclsxXSA9ICdc
MCc7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBh
ZGQgMSBmb3IgdGhlIHRlcm1pbmF0aW5nICdcMCcgY2hhcmFjdGVyLgorICAgICAgICBpbnQgbmVl
ZGVkX2NoYXJzID0gKEJpZ2l0TGVuZ3RoKCkgLSAxKSAqIGtIZXhDaGFyc1BlckJpZ2l0ICsKKyAg
ICAgICAgU2l6ZUluSGV4Q2hhcnMoYmlnaXRzX1t1c2VkX2RpZ2l0c18gLSAxXSkgKyAxOworICAg
ICAgICBpZiAobmVlZGVkX2NoYXJzID4gYnVmZmVyX3NpemUpIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgaW50IHN0cmluZ19pbmRleCA9IG5lZWRlZF9jaGFycyAtIDE7CisgICAgICAgIGJ1ZmZlcltz
dHJpbmdfaW5kZXgtLV0gPSAnXDAnOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4cG9u
ZW50XzsgKytpKSB7CisgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGtIZXhDaGFyc1Bl
ckJpZ2l0OyArK2opIHsKKyAgICAgICAgICAgICAgICBidWZmZXJbc3RyaW5nX2luZGV4LS1dID0g
JzAnOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgdXNlZF9kaWdpdHNfIC0gMTsgKytpKSB7CisgICAgICAgICAgICBDaHVuayBjdXJyZW50X2Jp
Z2l0ID0gYmlnaXRzX1tpXTsKKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwga0hleENo
YXJzUGVyQmlnaXQ7ICsraikgeworICAgICAgICAgICAgICAgIGJ1ZmZlcltzdHJpbmdfaW5kZXgt
LV0gPSBIZXhDaGFyT2ZWYWx1ZShjdXJyZW50X2JpZ2l0ICYgMHhGKTsKKyAgICAgICAgICAgICAg
ICBjdXJyZW50X2JpZ2l0ID4+PSA0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IC8vIEFuZCBmaW5hbGx5IHRoZSBsYXN0IGJpZ2l0LgorICAgICAgICBDaHVuayBtb3N0X3NpZ25p
ZmljYW50X2JpZ2l0ID0gYmlnaXRzX1t1c2VkX2RpZ2l0c18gLSAxXTsKKyAgICAgICAgd2hpbGUg
KG1vc3Rfc2lnbmlmaWNhbnRfYmlnaXQgIT0gMCkgeworICAgICAgICAgICAgYnVmZmVyW3N0cmlu
Z19pbmRleC0tXSA9IEhleENoYXJPZlZhbHVlKG1vc3Rfc2lnbmlmaWNhbnRfYmlnaXQgJiAweEYp
OworICAgICAgICAgICAgbW9zdF9zaWduaWZpY2FudF9iaWdpdCA+Pj0gNDsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgCisgICAgQmlnbnVtOjpDaHVu
ayBCaWdudW06OkJpZ2l0QXQoaW50IGluZGV4KSBjb25zdCB7CisgICAgICAgIGlmIChpbmRleCA+
PSBCaWdpdExlbmd0aCgpKSByZXR1cm4gMDsKKyAgICAgICAgaWYgKGluZGV4IDwgZXhwb25lbnRf
KSByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIGJpZ2l0c19baW5kZXggLSBleHBvbmVudF9dOwor
ICAgIH0KKyAgICAKKyAgICAKKyAgICBpbnQgQmlnbnVtOjpDb21wYXJlKGNvbnN0IEJpZ251bSYg
YSwgY29uc3QgQmlnbnVtJiBiKSB7CisgICAgICAgIEFTU0VSVChhLklzQ2xhbXBlZCgpKTsKKyAg
ICAgICAgQVNTRVJUKGIuSXNDbGFtcGVkKCkpOworICAgICAgICBpbnQgYmlnaXRfbGVuZ3RoX2Eg
PSBhLkJpZ2l0TGVuZ3RoKCk7CisgICAgICAgIGludCBiaWdpdF9sZW5ndGhfYiA9IGIuQmlnaXRM
ZW5ndGgoKTsKKyAgICAgICAgaWYgKGJpZ2l0X2xlbmd0aF9hIDwgYmlnaXRfbGVuZ3RoX2IpIHJl
dHVybiAtMTsKKyAgICAgICAgaWYgKGJpZ2l0X2xlbmd0aF9hID4gYmlnaXRfbGVuZ3RoX2IpIHJl
dHVybiArMTsKKyAgICAgICAgZm9yIChpbnQgaSA9IGJpZ2l0X2xlbmd0aF9hIC0gMTsgaSA+PSBN
aW4oYS5leHBvbmVudF8sIGIuZXhwb25lbnRfKTsgLS1pKSB7CisgICAgICAgICAgICBDaHVuayBi
aWdpdF9hID0gYS5CaWdpdEF0KGkpOworICAgICAgICAgICAgQ2h1bmsgYmlnaXRfYiA9IGIuQmln
aXRBdChpKTsKKyAgICAgICAgICAgIGlmIChiaWdpdF9hIDwgYmlnaXRfYikgcmV0dXJuIC0xOwor
ICAgICAgICAgICAgaWYgKGJpZ2l0X2EgPiBiaWdpdF9iKSByZXR1cm4gKzE7CisgICAgICAgICAg
ICAvLyBPdGhlcndpc2UgdGhleSBhcmUgZXF1YWwgdXAgdG8gdGhpcyBkaWdpdC4gVHJ5IHRoZSBu
ZXh0IGRpZ2l0LgorICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAg
ICAKKyAgICBpbnQgQmlnbnVtOjpQbHVzQ29tcGFyZShjb25zdCBCaWdudW0mIGEsIGNvbnN0IEJp
Z251bSYgYiwgY29uc3QgQmlnbnVtJiBjKSB7CisgICAgICAgIEFTU0VSVChhLklzQ2xhbXBlZCgp
KTsKKyAgICAgICAgQVNTRVJUKGIuSXNDbGFtcGVkKCkpOworICAgICAgICBBU1NFUlQoYy5Jc0Ns
YW1wZWQoKSk7CisgICAgICAgIGlmIChhLkJpZ2l0TGVuZ3RoKCkgPCBiLkJpZ2l0TGVuZ3RoKCkp
IHsKKyAgICAgICAgICAgIHJldHVybiBQbHVzQ29tcGFyZShiLCBhLCBjKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoYS5CaWdpdExlbmd0aCgpICsgMSA8IGMuQmlnaXRMZW5ndGgoKSkgcmV0dXJu
IC0xOworICAgICAgICBpZiAoYS5CaWdpdExlbmd0aCgpID4gYy5CaWdpdExlbmd0aCgpKSByZXR1
cm4gKzE7CisgICAgICAgIC8vIFRoZSBleHBvbmVudCBlbmNvZGVzIDAtYmlnaXRzLiBTbyBpZiB0
aGVyZSBhcmUgbW9yZSAwLWRpZ2l0cyBpbiAnYScgdGhhbgorICAgICAgICAvLyAnYicgaGFzIGRp
Z2l0cywgdGhlbiB0aGUgYmlnaXQtbGVuZ3RoIG9mICdhJysnYicgbXVzdCBiZSBlcXVhbCB0byB0
aGUgb25lCisgICAgICAgIC8vIG9mICdhJy4KKyAgICAgICAgaWYgKGEuZXhwb25lbnRfID49IGIu
QmlnaXRMZW5ndGgoKSAmJiBhLkJpZ2l0TGVuZ3RoKCkgPCBjLkJpZ2l0TGVuZ3RoKCkpIHsKKyAg
ICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQ2h1bmsg
Ym9ycm93ID0gMDsKKyAgICAgICAgLy8gU3RhcnRpbmcgYXQgbWluX2V4cG9uZW50IGFsbCBkaWdp
dHMgYXJlID09IDAuIFNvIG5vIG5lZWQgdG8gY29tcGFyZSB0aGVtLgorICAgICAgICBpbnQgbWlu
X2V4cG9uZW50ID0gTWluKE1pbihhLmV4cG9uZW50XywgYi5leHBvbmVudF8pLCBjLmV4cG9uZW50
Xyk7CisgICAgICAgIGZvciAoaW50IGkgPSBjLkJpZ2l0TGVuZ3RoKCkgLSAxOyBpID49IG1pbl9l
eHBvbmVudDsgLS1pKSB7CisgICAgICAgICAgICBDaHVuayBjaHVua19hID0gYS5CaWdpdEF0KGkp
OworICAgICAgICAgICAgQ2h1bmsgY2h1bmtfYiA9IGIuQmlnaXRBdChpKTsKKyAgICAgICAgICAg
IENodW5rIGNodW5rX2MgPSBjLkJpZ2l0QXQoaSk7CisgICAgICAgICAgICBDaHVuayBzdW0gPSBj
aHVua19hICsgY2h1bmtfYjsKKyAgICAgICAgICAgIGlmIChzdW0gPiBjaHVua19jICsgYm9ycm93
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICsxOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBib3Jyb3cgPSBjaHVua19jICsgYm9ycm93IC0gc3VtOworICAgICAgICAg
ICAgICAgIGlmIChib3Jyb3cgPiAxKSByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgYm9ycm93
IDw8PSBrQmlnaXRTaXplOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChi
b3Jyb3cgPT0gMCkgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgCisg
ICAgCisgICAgdm9pZCBCaWdudW06OkNsYW1wKCkgeworICAgICAgICB3aGlsZSAodXNlZF9kaWdp
dHNfID4gMCAmJiBiaWdpdHNfW3VzZWRfZGlnaXRzXyAtIDFdID09IDApIHsKKyAgICAgICAgICAg
IHVzZWRfZGlnaXRzXy0tOworICAgICAgICB9CisgICAgICAgIGlmICh1c2VkX2RpZ2l0c18gPT0g
MCkgeworICAgICAgICAgICAgLy8gWmVyby4KKyAgICAgICAgICAgIGV4cG9uZW50XyA9IDA7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgYm9vbCBCaWdudW06OklzQ2xhbXBlZCgp
IGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIHVzZWRfZGlnaXRzXyA9PSAwIHx8IGJpZ2l0c19bdXNl
ZF9kaWdpdHNfIC0gMV0gIT0gMDsKKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06
Olplcm8oKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdXNlZF9kaWdpdHNfOyArK2kp
IHsKKyAgICAgICAgICAgIGJpZ2l0c19baV0gPSAwOworICAgICAgICB9CisgICAgICAgIHVzZWRf
ZGlnaXRzXyA9IDA7CisgICAgICAgIGV4cG9uZW50XyA9IDA7CisgICAgfQorICAgIAorICAgIAor
ICAgIHZvaWQgQmlnbnVtOjpBbGlnbihjb25zdCBCaWdudW0mIG90aGVyKSB7CisgICAgICAgIGlm
IChleHBvbmVudF8gPiBvdGhlci5leHBvbmVudF8pIHsKKyAgICAgICAgICAgIC8vIElmICJYIiBy
ZXByZXNlbnRzIGEgImhpZGRlbiIgZGlnaXQgKGJ5IHRoZSBleHBvbmVudCkgdGhlbiB3ZSBhcmUg
aW4gdGhlCisgICAgICAgICAgICAvLyBmb2xsb3dpbmcgY2FzZSAoYSA9PSB0aGlzLCBiID09IG90
aGVyKToKKyAgICAgICAgICAgIC8vIGE6ICBhYWFhYWFYWFhYICAgb3IgYTogICBhYWFhYVhYWAor
ICAgICAgICAgICAgLy8gYjogICAgIGJiYmJiYlggICAgICBiOiBiYmJiYmJiYlhYCisgICAgICAg
ICAgICAvLyBXZSByZXBsYWNlIHNvbWUgb2YgdGhlIGhpZGRlbiBkaWdpdHMgKFgpIG9mIGEgd2l0
aCAwIGRpZ2l0cy4KKyAgICAgICAgICAgIC8vIGE6ICBhYWFhYWEwMDBYICAgb3IgYTogICBhYWFh
YTBYWAorICAgICAgICAgICAgaW50IHplcm9fZGlnaXRzID0gZXhwb25lbnRfIC0gb3RoZXIuZXhw
b25lbnRfOworICAgICAgICAgICAgRW5zdXJlQ2FwYWNpdHkodXNlZF9kaWdpdHNfICsgemVyb19k
aWdpdHMpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IHVzZWRfZGlnaXRzXyAtIDE7IGkgPj0g
MDsgLS1pKSB7CisgICAgICAgICAgICAgICAgYmlnaXRzX1tpICsgemVyb19kaWdpdHNdID0gYmln
aXRzX1tpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
emVyb19kaWdpdHM7ICsraSkgeworICAgICAgICAgICAgICAgIGJpZ2l0c19baV0gPSAwOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgdXNlZF9kaWdpdHNfICs9IHplcm9fZGlnaXRzOworICAg
ICAgICAgICAgZXhwb25lbnRfIC09IHplcm9fZGlnaXRzOworICAgICAgICAgICAgQVNTRVJUKHVz
ZWRfZGlnaXRzXyA+PSAwKTsKKyAgICAgICAgICAgIEFTU0VSVChleHBvbmVudF8gPj0gMCk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06OkJpZ2l0c1NoaWZ0
TGVmdChpbnQgc2hpZnRfYW1vdW50KSB7CisgICAgICAgIEFTU0VSVChzaGlmdF9hbW91bnQgPCBr
QmlnaXRTaXplKTsKKyAgICAgICAgQVNTRVJUKHNoaWZ0X2Ftb3VudCA+PSAwKTsKKyAgICAgICAg
Q2h1bmsgY2FycnkgPSAwOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHVzZWRfZGlnaXRz
XzsgKytpKSB7CisgICAgICAgICAgICBDaHVuayBuZXdfY2FycnkgPSBiaWdpdHNfW2ldID4+IChr
QmlnaXRTaXplIC0gc2hpZnRfYW1vdW50KTsKKyAgICAgICAgICAgIGJpZ2l0c19baV0gPSAoKGJp
Z2l0c19baV0gPDwgc2hpZnRfYW1vdW50KSArIGNhcnJ5KSAmIGtCaWdpdE1hc2s7CisgICAgICAg
ICAgICBjYXJyeSA9IG5ld19jYXJyeTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2FycnkgIT0g
MCkgeworICAgICAgICAgICAgYmlnaXRzX1t1c2VkX2RpZ2l0c19dID0gY2Fycnk7CisgICAgICAg
ICAgICB1c2VkX2RpZ2l0c18rKzsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICB2
b2lkIEJpZ251bTo6U3VidHJhY3RUaW1lcyhjb25zdCBCaWdudW0mIG90aGVyLCBpbnQgZmFjdG9y
KSB7CisgICAgICAgIEFTU0VSVChleHBvbmVudF8gPD0gb3RoZXIuZXhwb25lbnRfKTsKKyAgICAg
ICAgaWYgKGZhY3RvciA8IDMpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmFj
dG9yOyArK2kpIHsKKyAgICAgICAgICAgICAgICBTdWJ0cmFjdEJpZ251bShvdGhlcik7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgQ2h1bmsg
Ym9ycm93ID0gMDsKKyAgICAgICAgaW50IGV4cG9uZW50X2RpZmYgPSBvdGhlci5leHBvbmVudF8g
LSBleHBvbmVudF87CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3RoZXIudXNlZF9kaWdp
dHNfOyArK2kpIHsKKyAgICAgICAgICAgIERvdWJsZUNodW5rIHByb2R1Y3QgPSBzdGF0aWNfY2Fz
dDxEb3VibGVDaHVuaz4oZmFjdG9yKSAqIG90aGVyLmJpZ2l0c19baV07CisgICAgICAgICAgICBE
b3VibGVDaHVuayByZW1vdmUgPSBib3Jyb3cgKyBwcm9kdWN0OworICAgICAgICAgICAgQ2h1bmsg
ZGlmZmVyZW5jZSA9IGJpZ2l0c19baSArIGV4cG9uZW50X2RpZmZdIC0gKHJlbW92ZSAmIGtCaWdp
dE1hc2spOworICAgICAgICAgICAgYmlnaXRzX1tpICsgZXhwb25lbnRfZGlmZl0gPSBkaWZmZXJl
bmNlICYga0JpZ2l0TWFzazsKKyAgICAgICAgICAgIGJvcnJvdyA9IHN0YXRpY19jYXN0PENodW5r
PigoZGlmZmVyZW5jZSA+PiAoa0NodW5rU2l6ZSAtIDEpKSArCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKHJlbW92ZSA+PiBrQmlnaXRTaXplKSk7CisgICAgICAgIH0K
KyAgICAgICAgZm9yIChpbnQgaSA9IG90aGVyLnVzZWRfZGlnaXRzXyArIGV4cG9uZW50X2RpZmY7
IGkgPCB1c2VkX2RpZ2l0c187ICsraSkgeworICAgICAgICAgICAgaWYgKGJvcnJvdyA9PSAwKSBy
ZXR1cm47CisgICAgICAgICAgICBDaHVuayBkaWZmZXJlbmNlID0gYmlnaXRzX1tpXSAtIGJvcnJv
dzsKKyAgICAgICAgICAgIGJpZ2l0c19baV0gPSBkaWZmZXJlbmNlICYga0JpZ2l0TWFzazsKKyAg
ICAgICAgICAgIGJvcnJvdyA9IGRpZmZlcmVuY2UgPj4gKGtDaHVua1NpemUgLSAxKTsKKyAgICAg
ICAgICAgICsraTsKKyAgICAgICAgfQorICAgICAgICBDbGFtcCgpOworICAgIH0KKyAgICAKKyAg
ICAKK30gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbgorCit9IC8vIG5hbWVzcGFjZSBX
VEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9iaWdudW0uaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9iaWdudW0uaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYTc1
MDU4MWFhNzk3MjI5ZTc4ODc5OWEyYjBiMjViOWZkMjQ4ZGIzCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS5oCkBAIC0wLDAgKzEsMTQ1IEBA
CisvLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAg
ICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAg
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisv
LyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZm5kZWYgRE9VQkxFX0NPTlZFUlNJT05f
QklHTlVNX0hfCisjZGVmaW5lIERPVUJMRV9DT05WRVJTSU9OX0JJR05VTV9IXworCisjaW5jbHVk
ZSAidXRpbHMuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK25hbWVzcGFjZSBkb3VibGVfY29udmVy
c2lvbiB7CisgICAgCisgICAgY2xhc3MgQmlnbnVtIHsKKyAgICBwdWJsaWM6CisgICAgICAgIC8v
IDM1ODQgPSAxMjggKiAyOC4gV2UgY2FuIHJlcHJlc2VudCAyXjM1ODQgPiAxMF4xMDAwIGFjY3Vy
YXRlbHkuCisgICAgICAgIC8vIFRoaXMgYmlnbnVtIGNhbiBlbmNvZGUgbXVjaCBiaWdnZXIgbnVt
YmVycywgc2luY2UgaXQgY29udGFpbnMgYW4KKyAgICAgICAgLy8gZXhwb25lbnQuCisgICAgICAg
IHN0YXRpYyBjb25zdCBpbnQga01heFNpZ25pZmljYW50Qml0cyA9IDM1ODQ7CisgICAgICAgIAor
ICAgICAgICBCaWdudW0oKTsKKyAgICAgICAgdm9pZCBBc3NpZ25VSW50MTYodWludDE2X3QgdmFs
dWUpOworICAgICAgICB2b2lkIEFzc2lnblVJbnQ2NCh1aW50NjRfdCB2YWx1ZSk7CisgICAgICAg
IHZvaWQgQXNzaWduQmlnbnVtKGNvbnN0IEJpZ251bSYgb3RoZXIpOworICAgICAgICAKKyAgICAg
ICAgdm9pZCBBc3NpZ25EZWNpbWFsU3RyaW5nKFZlY3Rvcjxjb25zdCBjaGFyPiB2YWx1ZSk7Cisg
ICAgICAgIHZvaWQgQXNzaWduSGV4U3RyaW5nKFZlY3Rvcjxjb25zdCBjaGFyPiB2YWx1ZSk7Cisg
ICAgICAgIAorICAgICAgICB2b2lkIEFzc2lnblBvd2VyVUludDE2KHVpbnQxNl90IGJhc2UsIGlu
dCBleHBvbmVudCk7CisgICAgICAgIAorICAgICAgICB2b2lkIEFkZFVJbnQxNih1aW50MTZfdCBv
cGVyYW5kKTsKKyAgICAgICAgdm9pZCBBZGRVSW50NjQodWludDY0X3Qgb3BlcmFuZCk7CisgICAg
ICAgIHZvaWQgQWRkQmlnbnVtKGNvbnN0IEJpZ251bSYgb3RoZXIpOworICAgICAgICAvLyBQcmVj
b25kaXRpb246IHRoaXMgPj0gb3RoZXIuCisgICAgICAgIHZvaWQgU3VidHJhY3RCaWdudW0oY29u
c3QgQmlnbnVtJiBvdGhlcik7CisgICAgICAgIAorICAgICAgICB2b2lkIFNxdWFyZSgpOworICAg
ICAgICB2b2lkIFNoaWZ0TGVmdChpbnQgc2hpZnRfYW1vdW50KTsKKyAgICAgICAgdm9pZCBNdWx0
aXBseUJ5VUludDMyKHVpbnQzMl90IGZhY3Rvcik7CisgICAgICAgIHZvaWQgTXVsdGlwbHlCeVVJ
bnQ2NCh1aW50NjRfdCBmYWN0b3IpOworICAgICAgICB2b2lkIE11bHRpcGx5QnlQb3dlck9mVGVu
KGludCBleHBvbmVudCk7CisgICAgICAgIHZvaWQgVGltZXMxMCgpIHsgcmV0dXJuIE11bHRpcGx5
QnlVSW50MzIoMTApOyB9CisgICAgICAgIC8vIFBzZXVkb2NvZGU6CisgICAgICAgIC8vICBpbnQg
cmVzdWx0ID0gdGhpcyAvIG90aGVyOworICAgICAgICAvLyAgdGhpcyA9IHRoaXMgJSBvdGhlcjsK
KyAgICAgICAgLy8gSW4gdGhlIHdvcnN0IGNhc2UgdGhpcyBmdW5jdGlvbiBpcyBpbiBPKHRoaXMv
b3RoZXIpLgorICAgICAgICB1aW50MTZfdCBEaXZpZGVNb2R1bG9JbnRCaWdudW0oY29uc3QgQmln
bnVtJiBvdGhlcik7CisgICAgICAgIAorICAgICAgICBib29sIFRvSGV4U3RyaW5nKGNoYXIqIGJ1
ZmZlciwgaW50IGJ1ZmZlcl9zaXplKSBjb25zdDsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBp
bnQgQ29tcGFyZShjb25zdCBCaWdudW0mIGEsIGNvbnN0IEJpZ251bSYgYik7CisgICAgICAgIHN0
YXRpYyBib29sIEVxdWFsKGNvbnN0IEJpZ251bSYgYSwgY29uc3QgQmlnbnVtJiBiKSB7CisgICAg
ICAgICAgICByZXR1cm4gQ29tcGFyZShhLCBiKSA9PSAwOworICAgICAgICB9CisgICAgICAgIHN0
YXRpYyBib29sIExlc3NFcXVhbChjb25zdCBCaWdudW0mIGEsIGNvbnN0IEJpZ251bSYgYikgewor
ICAgICAgICAgICAgcmV0dXJuIENvbXBhcmUoYSwgYikgPD0gMDsKKyAgICAgICAgfQorICAgICAg
ICBzdGF0aWMgYm9vbCBMZXNzKGNvbnN0IEJpZ251bSYgYSwgY29uc3QgQmlnbnVtJiBiKSB7Cisg
ICAgICAgICAgICByZXR1cm4gQ29tcGFyZShhLCBiKSA8IDA7CisgICAgICAgIH0KKyAgICAgICAg
Ly8gUmV0dXJucyBDb21wYXJlKGEgKyBiLCBjKTsKKyAgICAgICAgc3RhdGljIGludCBQbHVzQ29t
cGFyZShjb25zdCBCaWdudW0mIGEsIGNvbnN0IEJpZ251bSYgYiwgY29uc3QgQmlnbnVtJiBjKTsK
KyAgICAgICAgLy8gUmV0dXJucyBhICsgYiA9PSBjCisgICAgICAgIHN0YXRpYyBib29sIFBsdXNF
cXVhbChjb25zdCBCaWdudW0mIGEsIGNvbnN0IEJpZ251bSYgYiwgY29uc3QgQmlnbnVtJiBjKSB7
CisgICAgICAgICAgICByZXR1cm4gUGx1c0NvbXBhcmUoYSwgYiwgYykgPT0gMDsKKyAgICAgICAg
fQorICAgICAgICAvLyBSZXR1cm5zIGEgKyBiIDw9IGMKKyAgICAgICAgc3RhdGljIGJvb2wgUGx1
c0xlc3NFcXVhbChjb25zdCBCaWdudW0mIGEsIGNvbnN0IEJpZ251bSYgYiwgY29uc3QgQmlnbnVt
JiBjKSB7CisgICAgICAgICAgICByZXR1cm4gUGx1c0NvbXBhcmUoYSwgYiwgYykgPD0gMDsKKyAg
ICAgICAgfQorICAgICAgICAvLyBSZXR1cm5zIGEgKyBiIDwgYworICAgICAgICBzdGF0aWMgYm9v
bCBQbHVzTGVzcyhjb25zdCBCaWdudW0mIGEsIGNvbnN0IEJpZ251bSYgYiwgY29uc3QgQmlnbnVt
JiBjKSB7CisgICAgICAgICAgICByZXR1cm4gUGx1c0NvbXBhcmUoYSwgYiwgYykgPCAwOworICAg
ICAgICB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgdHlwZWRlZiB1aW50MzJfdCBDaHVuazsKKyAg
ICAgICAgdHlwZWRlZiB1aW50NjRfdCBEb3VibGVDaHVuazsKKyAgICAgICAgCisgICAgICAgIHN0
YXRpYyBjb25zdCBpbnQga0NodW5rU2l6ZSA9IHNpemVvZihDaHVuaykgKiA4OworICAgICAgICBz
dGF0aWMgY29uc3QgaW50IGtEb3VibGVDaHVua1NpemUgPSBzaXplb2YoRG91YmxlQ2h1bmspICog
ODsKKyAgICAgICAgLy8gV2l0aCBiaWdpdCBzaXplIG9mIDI4IHdlIGxvb3NlIHNvbWUgYml0cywg
YnV0IGEgZG91YmxlIHN0aWxsIGZpdHMgZWFzaWx5CisgICAgICAgIC8vIGludG8gdHdvIGNodW5r
cywgYW5kIG1vcmUgaW1wb3J0YW50bHkgd2UgY2FuIHVzZSB0aGUgQ29tYmEgbXVsdGlwbGljYXRp
b24uCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQga0JpZ2l0U2l6ZSA9IDI4OworICAgICAgICBz
dGF0aWMgY29uc3QgQ2h1bmsga0JpZ2l0TWFzayA9ICgxIDw8IGtCaWdpdFNpemUpIC0gMTsKKyAg
ICAgICAgLy8gRXZlcnkgaW5zdGFuY2UgYWxsb2NhdGVzIGtCaWdpdExlbmd0aCBjaHVua3Mgb24g
dGhlIHN0YWNrLiBCaWdudW1zIGNhbm5vdAorICAgICAgICAvLyBncm93LiBUaGVyZSBhcmUgbm8g
Y2hlY2tzIGlmIHRoZSBzdGFjay1hbGxvY2F0ZWQgc3BhY2UgaXMgc3VmZmljaWVudC4KKyAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBrQmlnaXRDYXBhY2l0eSA9IGtNYXhTaWduaWZpY2FudEJpdHMg
LyBrQmlnaXRTaXplOworICAgICAgICAKKyAgICAgICAgdm9pZCBFbnN1cmVDYXBhY2l0eShpbnQg
c2l6ZSkgeworICAgICAgICAgICAgaWYgKHNpemUgPiBrQmlnaXRDYXBhY2l0eSkgeworICAgICAg
ICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgdm9pZCBBbGlnbihjb25zdCBCaWdudW0mIG90aGVyKTsKKyAgICAgICAgdm9pZCBDbGFtcCgp
OworICAgICAgICBib29sIElzQ2xhbXBlZCgpIGNvbnN0OworICAgICAgICB2b2lkIFplcm8oKTsK
KyAgICAgICAgLy8gUmVxdWlyZXMgdGhpcyB0byBoYXZlIGVub3VnaCBjYXBhY2l0eSAobm8gdGVz
dHMgZG9uZSkuCisgICAgICAgIC8vIFVwZGF0ZXMgdXNlZF9kaWdpdHNfIGlmIG5lY2Vzc2FyeS4K
KyAgICAgICAgLy8gc2hpZnRfYW1vdW50IG11c3QgYmUgPCBrQmlnaXRTaXplLgorICAgICAgICB2
b2lkIEJpZ2l0c1NoaWZ0TGVmdChpbnQgc2hpZnRfYW1vdW50KTsKKyAgICAgICAgLy8gQmlnaXRM
ZW5ndGggaW5jbHVkZXMgdGhlICJoaWRkZW4iIGRpZ2l0cyBlbmNvZGVkIGluIHRoZSBleHBvbmVu
dC4KKyAgICAgICAgaW50IEJpZ2l0TGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gdXNlZF9kaWdpdHNf
ICsgZXhwb25lbnRfOyB9CisgICAgICAgIENodW5rIEJpZ2l0QXQoaW50IGluZGV4KSBjb25zdDsK
KyAgICAgICAgdm9pZCBTdWJ0cmFjdFRpbWVzKGNvbnN0IEJpZ251bSYgb3RoZXIsIGludCBmYWN0
b3IpOworICAgICAgICAKKyAgICAgICAgQ2h1bmsgYmlnaXRzX2J1ZmZlcl9ba0JpZ2l0Q2FwYWNp
dHldOworICAgICAgICAvLyBBIHZlY3RvciBiYWNrZWQgYnkgYmlnaXRzX2J1ZmZlcl8uIFRoaXMg
d2F5IGFjY2Vzc2VzIHRvIHRoZSBhcnJheSBhcmUKKyAgICAgICAgLy8gY2hlY2tlZCBmb3Igb3V0
LW9mLWJvdW5kcyBlcnJvcnMuCisgICAgICAgIFZlY3RvcjxDaHVuaz4gYmlnaXRzXzsKKyAgICAg
ICAgaW50IHVzZWRfZGlnaXRzXzsKKyAgICAgICAgLy8gVGhlIEJpZ251bSdzIHZhbHVlIGVxdWFs
cyB2YWx1ZShiaWdpdHNfKSAqIDJeKGV4cG9uZW50XyAqIGtCaWdpdFNpemUpLgorICAgICAgICBp
bnQgZXhwb25lbnRfOworICAgICAgICAKKyAgICAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdO
KEJpZ251bSk7CisgICAgfTsKKyAgICAKK30gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lv
bgorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmICAvLyBET1VCTEVfQ09OVkVSU0lPTl9C
SUdOVU1fSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9jYWNo
ZWQtcG93ZXJzLmNjIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2NhY2hlZC1wb3dl
cnMuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYThlNzAwNDdkOWVlMTc1MDM4MmZiNjdkOGQ0YzgzYWQ3YTFhYjg3
MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9jYWNo
ZWQtcG93ZXJzLmNjCkBAIC0wLDAgKzEsMTg5IEBACisvLyBDb3B5cmlnaHQgMjAwNi0yMDA4IHRo
ZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
Ky8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisv
LyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1
ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgIlVudXNlZFBhcmFtLmgiCisjaW5jbHVkZSAidXRpbHMu
aCIKKyNpbmNsdWRlICJjYWNoZWQtcG93ZXJzLmgiCisKK25hbWVzcGFjZSBXVEYgeworCituYW1l
c3BhY2UgZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIHN0cnVjdCBDYWNoZWRQb3dlciB7
CisgICAgICAgIHVpbnQ2NF90IHNpZ25pZmljYW5kOworICAgICAgICBpbnQxNl90IGJpbmFyeV9l
eHBvbmVudDsKKyAgICAgICAgaW50MTZfdCBkZWNpbWFsX2V4cG9uZW50OworICAgIH07CisgICAg
CisgICAgc3RhdGljIGludCBrQ2FjaGVkUG93ZXJzTGVuZ3RoID0gMTsKKyAgICBzdGF0aWMgaW50
IGtDYWNoZWRQb3dlcnNPZmZzZXQgPSAxOworICAgIHN0YXRpYyBjb25zdCBkb3VibGUga0RfMV9M
T0cyXzEwID0gMC4zMDEwMjk5OTU2NjM5ODExNDsgIC8vICAxIC8gbGcoMTApCisgICAgc3RhdGlj
IENhY2hlZFBvd2VyKiBrQ2FjaGVkUG93ZXJzID0gMDsKKyAgICAKKyAgICBpbnQgUG93ZXJzT2ZU
ZW5DYWNoZTo6a0RlY2ltYWxFeHBvbmVudERpc3RhbmNlID0gMTsKKyAgICBpbnQgUG93ZXJzT2ZU
ZW5DYWNoZTo6a01pbkRlY2ltYWxFeHBvbmVudCA9IDE7CisgICAgaW50IFBvd2Vyc09mVGVuQ2Fj
aGU6OmtNYXhEZWNpbWFsRXhwb25lbnQgPSAxOworICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZSgp
IHsKKyAgICAgICAgc3RhdGljIENhY2hlZFBvd2VyIGNhY2hlZFBvd2Vyc1tdID0geworICAgICAg
ICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZmE4ZmQ1YTAsIDA4MWMwMjg4KSwgLTEyMjAsIC0zNDh9
LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YmFhZWUxN2YsIGEyM2ViZjc2KSwgLTEx
OTMsIC0zNDB9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4OGIxNmZiMjAsIDMwNTVh
Yzc2KSwgLTExNjYsIC0zMzJ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4Y2Y0Mjg5
NGEsIDVkY2UzNWVhKSwgLTExNDAsIC0zMjR9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9D
KDB4OWE2YmIwYWEsIDU1NjUzYjJkKSwgLTExMTMsIC0zMTZ9LAorICAgICAgICAgICAge1VJTlQ2
NF8yUEFSVF9DKDB4ZTYxYWNmMDMsIDNkMWE0NWRmKSwgLTEwODcsIC0zMDh9LAorICAgICAgICAg
ICAge1VJTlQ2NF8yUEFSVF9DKDB4YWI3MGZlMTcsIGM3OWFjNmNhKSwgLTEwNjAsIC0zMDB9LAor
ICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZmY3N2IxZmMsIGJlYmNkYzRmKSwgLTEwMzQs
IC0yOTJ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YmU1NjkxZWYsIDQxNmJkNjBj
KSwgLTEwMDcsIC0yODR9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4OGRkMDFmYWQs
IDkwN2ZmYzNjKSwgLTk4MCwgLTI3Nn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhk
MzUxNWMyOCwgMzE1NTlhODMpLCAtOTU0LCAtMjY4fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBB
UlRfQygweDlkNzFhYzhmLCBhZGE2YzliNSksIC05MjcsIC0yNjB9LAorICAgICAgICAgICAge1VJ
TlQ2NF8yUEFSVF9DKDB4ZWE5YzIyNzcsIDIzZWU4YmNiKSwgLTkwMSwgLTI1Mn0sCisgICAgICAg
ICAgICB7VUlOVDY0XzJQQVJUX0MoMHhhZWNjNDk5MSwgNDA3ODUzNmQpLCAtODc0LCAtMjQ0fSwK
KyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDgyM2MxMjc5LCA1ZGI2Y2U1NyksIC04NDcs
IC0yMzZ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YzIxMDk0MzYsIDRkZmI1NjM3
KSwgLTgyMSwgLTIyOH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg5MDk2ZWE2Ziwg
Mzg0ODk4NGYpLCAtNzk0LCAtMjIwfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGQ3
NzQ4NWNiLCAyNTgyM2FjNyksIC03NjgsIC0yMTJ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFS
VF9DKDB4YTA4NmNmY2QsIDk3YmY5N2Y0KSwgLTc0MSwgLTIwNH0sCisgICAgICAgICAgICB7VUlO
VDY0XzJQQVJUX0MoMHhlZjM0MGE5OCwgMTcyYWFjZTUpLCAtNzE1LCAtMTk2fSwKKyAgICAgICAg
ICAgIHtVSU5UNjRfMlBBUlRfQygweGIyMzg2N2ZiLCAyYTM1YjI4ZSksIC02ODgsIC0xODh9LAor
ICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ODRjOGQ0ZGYsIGQyYzYzZjNiKSwgLTY2MSwg
LTE4MH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhjNWRkNDQyNywgMWFkM2NkYmEp
LCAtNjM1LCAtMTcyfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDkzNmI5ZmNlLCBi
YjI1Yzk5NiksIC02MDgsIC0xNjR9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZGJh
YzZjMjQsIDdkNjJhNTg0KSwgLTU4MiwgLTE1Nn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJU
X0MoMHhhM2FiNjY1OCwgMGQ1ZmRhZjYpLCAtNTU1LCAtMTQ4fSwKKyAgICAgICAgICAgIHtVSU5U
NjRfMlBBUlRfQygweGYzZTJmODkzLCBkZWMzZjEyNiksIC01MjksIC0xNDB9LAorICAgICAgICAg
ICAge1VJTlQ2NF8yUEFSVF9DKDB4YjViNWFkYTgsIGFhZmY4MGI4KSwgLTUwMiwgLTEzMn0sCisg
ICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg4NzYyNWYwNSwgNmM3YzRhOGIpLCAtNDc1LCAt
MTI0fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGM5YmNmZjYwLCAzNGMxMzA1Myks
IC00NDksIC0xMTZ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4OTY0ZTg1OGMsIDkx
YmEyNjU1KSwgLTQyMiwgLTEwOH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhkZmY5
NzcyNCwgNzAyOTdlYmQpLCAtMzk2LCAtMTAwfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRf
QygweGE2ZGZiZDlmLCBiOGU1Yjg4ZiksIC0zNjksIC05Mn0sCisgICAgICAgICAgICB7VUlOVDY0
XzJQQVJUX0MoMHhmOGE5NWZjZiwgODg3NDdkOTQpLCAtMzQzLCAtODR9LAorICAgICAgICAgICAg
e1VJTlQ2NF8yUEFSVF9DKDB4Yjk0NDcwOTMsIDhmYTg5YmNmKSwgLTMxNiwgLTc2fSwKKyAgICAg
ICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDhhMDhmMGY4LCBiZjBmMTU2YiksIC0yODksIC02OH0s
CisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhjZGIwMjU1NSwgNjUzMTMxYjYpLCAtMjYz
LCAtNjB9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4OTkzZmUyYzYsIGQwN2I3ZmFj
KSwgLTIzNiwgLTUyfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGU0NWMxMGM0LCAy
YTJiM2IwNiksIC0yMTAsIC00NH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhhYTI0
MjQ5OSwgNjk3MzkyZDMpLCAtMTgzLCAtMzZ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9D
KDB4ZmQ4N2I1ZjIsIDgzMDBjYTBlKSwgLTE1NywgLTI4fSwKKyAgICAgICAgICAgIHtVSU5UNjRf
MlBBUlRfQygweGJjZTUwODY0LCA5MjExMWFlYiksIC0xMzAsIC0yMH0sCisgICAgICAgICAgICB7
VUlOVDY0XzJQQVJUX0MoMHg4Y2JjY2MwOSwgNmY1MDg4Y2MpLCAtMTAzLCAtMTJ9LAorICAgICAg
ICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZDFiNzE3NTgsIGUyMTk2NTJjKSwgLTc3LCAtNH0sCisg
ICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg5YzQwMDAwMCwgMDAwMDAwMDApLCAtNTAsIDR9
LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZThkNGE1MTAsIDAwMDAwMDAwKSwgLTI0
LCAxMn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhhZDc4ZWJjNSwgYWM2MjAwMDAp
LCAzLCAyMH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg4MTNmMzk3OCwgZjg5NDA5
ODQpLCAzMCwgMjh9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YzA5N2NlN2IsIGM5
MDcxNWIzKSwgNTYsIDM2fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDhmN2UzMmNl
LCA3YmVhNWM3MCksIDgzLCA0NH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhkNWQy
MzhhNCwgYWJlOTgwNjgpLCAxMDksIDUyfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygw
eDlmNGYyNzI2LCAxNzlhMjI0NSksIDEzNiwgNjB9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFS
VF9DKDB4ZWQ2M2EyMzEsIGQ0YzRmYjI3KSwgMTYyLCA2OH0sCisgICAgICAgICAgICB7VUlOVDY0
XzJQQVJUX0MoMHhiMGRlNjUzOCwgOGNjOGFkYTgpLCAxODksIDc2fSwKKyAgICAgICAgICAgIHtV
SU5UNjRfMlBBUlRfQygweDgzYzcwODhlLCAxYWFiNjVkYiksIDIxNiwgODR9LAorICAgICAgICAg
ICAge1VJTlQ2NF8yUEFSVF9DKDB4YzQ1ZDFkZjksIDQyNzExZDlhKSwgMjQyLCA5Mn0sCisgICAg
ICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg5MjRkNjkyYywgYTYxYmU3NTgpLCAyNjksIDEwMH0s
CisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhkYTAxZWU2NCwgMWE3MDhkZWEpLCAyOTUs
IDEwOH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhhMjZkYTM5OSwgOWFlZjc3NGEp
LCAzMjIsIDExNn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhmMjA5Nzg3YiwgYjQ3
ZDZiODUpLCAzNDgsIDEyNH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhiNDU0ZTRh
MSwgNzlkZDE4NzcpLCAzNzUsIDEzMn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg4
NjViODY5MiwgNWI5YmM1YzIpLCA0MDIsIDE0MH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJU
X0MoMHhjODM1NTNjNSwgYzg5NjVkM2QpLCA0MjgsIDE0OH0sCisgICAgICAgICAgICB7VUlOVDY0
XzJQQVJUX0MoMHg5NTJhYjQ1YywgZmE5N2EwYjMpLCA0NTUsIDE1Nn0sCisgICAgICAgICAgICB7
VUlOVDY0XzJQQVJUX0MoMHhkZTQ2OWZiZCwgOTlhMDVmZTMpLCA0ODEsIDE2NH0sCisgICAgICAg
ICAgICB7VUlOVDY0XzJQQVJUX0MoMHhhNTliYzIzNCwgZGIzOThjMjUpLCA1MDgsIDE3Mn0sCisg
ICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhmNmM2OWE3MiwgYTM5ODlmNWMpLCA1MzQsIDE4
MH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhiN2RjYmY1MywgNTRlOWJlY2UpLCA1
NjEsIDE4OH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg4OGZjZjMxNywgZjIyMjQx
ZTIpLCA1ODgsIDE5Nn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhjYzIwY2U5Yiwg
ZDM1Yzc4YTUpLCA2MTQsIDIwNH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg5ODE2
NWFmMywgN2IyMTUzZGYpLCA2NDEsIDIxMn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0Mo
MHhlMmEwYjVkYywgOTcxZjMwM2EpLCA2NjcsIDIyMH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQ
QVJUX0MoMHhhOGQ5ZDE1MywgNWNlM2IzOTYpLCA2OTQsIDIyOH0sCisgICAgICAgICAgICB7VUlO
VDY0XzJQQVJUX0MoMHhmYjliN2NkOSwgYTRhNzQ0M2MpLCA3MjAsIDIzNn0sCisgICAgICAgICAg
ICB7VUlOVDY0XzJQQVJUX0MoMHhiYjc2NGM0YywgYTdhNDQ0MTApLCA3NDcsIDI0NH0sCisgICAg
ICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg4YmFiOGVlZiwgYjY0MDljMWEpLCA3NzQsIDI1Mn0s
CisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhkMDFmZWYxMCwgYTY1Nzg0MmMpLCA4MDAs
IDI2MH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg5YjEwYTRlNSwgZTk5MTMxMjkp
LCA4MjcsIDI2OH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhlNzEwOWJmYiwgYTE5
YzBjOWQpLCA4NTMsIDI3Nn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhhYzI4MjBk
OSwgNjIzYmY0MjkpLCA4ODAsIDI4NH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg4
MDQ0NGI1ZSwgN2FhN2NmODUpLCA5MDcsIDI5Mn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJU
X0MoMHhiZjIxZTQ0MCwgMDNhY2RkMmQpLCA5MzMsIDMwMH0sCisgICAgICAgICAgICB7VUlOVDY0
XzJQQVJUX0MoMHg4ZTY3OWMyZiwgNWU0NGZmOGYpLCA5NjAsIDMwOH0sCisgICAgICAgICAgICB7
VUlOVDY0XzJQQVJUX0MoMHhkNDMzMTc5ZCwgOWM4Y2I4NDEpLCA5ODYsIDMxNn0sCisgICAgICAg
ICAgICB7VUlOVDY0XzJQQVJUX0MoMHg5ZTE5ZGI5MiwgYjRlMzFiYTkpLCAxMDEzLCAzMjR9LAor
ICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZWI5NmJmNmUsIGJhZGY3N2Q5KSwgMTAzOSwg
MzMyfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGFmODcwMjNiLCA5YmYwZWU2Yiks
IDEwNjYsIDM0MH0sCisgICAgICAgIH07CisgICAgICAgIGtDYWNoZWRQb3dlcnMgPSBjYWNoZWRQ
b3dlcnM7CisgICAgICAgIGtDYWNoZWRQb3dlcnNMZW5ndGggPSBBUlJBWV9TSVpFKGNhY2hlZFBv
d2Vycyk7CisgICAgICAgIGtDYWNoZWRQb3dlcnNPZmZzZXQgPSAtY2FjaGVkUG93ZXJzWzBdLmRl
Y2ltYWxfZXhwb25lbnQ7CisgICAgICAgIFBvd2Vyc09mVGVuQ2FjaGU6OmtEZWNpbWFsRXhwb25l
bnREaXN0YW5jZSA9IGtDYWNoZWRQb3dlcnNbMV0uZGVjaW1hbF9leHBvbmVudCAtIGtDYWNoZWRQ
b3dlcnNbMF0uZGVjaW1hbF9leHBvbmVudDsKKyAgICAgICAgUG93ZXJzT2ZUZW5DYWNoZTo6a01p
bkRlY2ltYWxFeHBvbmVudCA9IGtDYWNoZWRQb3dlcnNbMF0uZGVjaW1hbF9leHBvbmVudDsKKyAg
ICAgICAgUG93ZXJzT2ZUZW5DYWNoZTo6a01heERlY2ltYWxFeHBvbmVudCA9IGtDYWNoZWRQb3dl
cnNba0NhY2hlZFBvd2Vyc0xlbmd0aCAtIDFdLmRlY2ltYWxfZXhwb25lbnQ7CisgICAgfQorICAg
IAorICAgIHZvaWQgUG93ZXJzT2ZUZW5DYWNoZTo6R2V0Q2FjaGVkUG93ZXJGb3JCaW5hcnlFeHBv
bmVudFJhbmdlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBtaW5fZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1heF9leHBv
bmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBEaXlGcCogcG93ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBkZWNpbWFsX2V4cG9uZW50
KSB7CisgICAgICAgIFVOVVNFRF9QQVJBTShtYXhfZXhwb25lbnQpOworICAgICAgICBpbnQga1Eg
PSBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZTsKKyAgICAgICAgZG91YmxlIGsgPSBjZWlsKChtaW5f
ZXhwb25lbnQgKyBrUSAtIDEpICoga0RfMV9MT0cyXzEwKTsKKyAgICAgICAgaW50IGZvbyA9IGtD
YWNoZWRQb3dlcnNPZmZzZXQ7CisgICAgICAgIGludCBpbmRleCA9CisgICAgICAgIChmb28gKyBz
dGF0aWNfY2FzdDxpbnQ+KGspIC0gMSkgLyBrRGVjaW1hbEV4cG9uZW50RGlzdGFuY2UgKyAxOwor
ICAgICAgICBBU1NFUlQoMCA8PSBpbmRleCAmJiBpbmRleCA8IGtDYWNoZWRQb3dlcnNMZW5ndGgp
OworICAgICAgICBDYWNoZWRQb3dlciBjYWNoZWRfcG93ZXIgPSBrQ2FjaGVkUG93ZXJzW2luZGV4
XTsKKyAgICAgICAgQVNTRVJUKG1pbl9leHBvbmVudCA8PSBjYWNoZWRfcG93ZXIuYmluYXJ5X2V4
cG9uZW50KTsKKyAgICAgICAgQVNTRVJUKGNhY2hlZF9wb3dlci5iaW5hcnlfZXhwb25lbnQgPD0g
bWF4X2V4cG9uZW50KTsKKyAgICAgICAgKmRlY2ltYWxfZXhwb25lbnQgPSBjYWNoZWRfcG93ZXIu
ZGVjaW1hbF9leHBvbmVudDsKKyAgICAgICAgKnBvd2VyID0gRGl5RnAoY2FjaGVkX3Bvd2VyLnNp
Z25pZmljYW5kLCBjYWNoZWRfcG93ZXIuYmluYXJ5X2V4cG9uZW50KTsKKyAgICB9CisgICAgCisg
ICAgCisgICAgdm9pZCBQb3dlcnNPZlRlbkNhY2hlOjpHZXRDYWNoZWRQb3dlckZvckRlY2ltYWxF
eHBvbmVudChpbnQgcmVxdWVzdGVkX2V4cG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGl5RnAqIHBvd2VyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
KiBmb3VuZF9leHBvbmVudCkgeworICAgICAgICBBU1NFUlQoa01pbkRlY2ltYWxFeHBvbmVudCA8
PSByZXF1ZXN0ZWRfZXhwb25lbnQpOworICAgICAgICBBU1NFUlQocmVxdWVzdGVkX2V4cG9uZW50
IDwga01heERlY2ltYWxFeHBvbmVudCArIGtEZWNpbWFsRXhwb25lbnREaXN0YW5jZSk7CisgICAg
ICAgIGludCBpbmRleCA9CisgICAgICAgIChyZXF1ZXN0ZWRfZXhwb25lbnQgKyBrQ2FjaGVkUG93
ZXJzT2Zmc2V0KSAvIGtEZWNpbWFsRXhwb25lbnREaXN0YW5jZTsKKyAgICAgICAgQ2FjaGVkUG93
ZXIgY2FjaGVkX3Bvd2VyID0ga0NhY2hlZFBvd2Vyc1tpbmRleF07CisgICAgICAgICpwb3dlciA9
IERpeUZwKGNhY2hlZF9wb3dlci5zaWduaWZpY2FuZCwgY2FjaGVkX3Bvd2VyLmJpbmFyeV9leHBv
bmVudCk7CisgICAgICAgICpmb3VuZF9leHBvbmVudCA9IGNhY2hlZF9wb3dlci5kZWNpbWFsX2V4
cG9uZW50OworICAgICAgICBBU1NFUlQoKmZvdW5kX2V4cG9uZW50IDw9IHJlcXVlc3RlZF9leHBv
bmVudCk7CisgICAgICAgIEFTU0VSVChyZXF1ZXN0ZWRfZXhwb25lbnQgPCAqZm91bmRfZXhwb25l
bnQgKyBrRGVjaW1hbEV4cG9uZW50RGlzdGFuY2UpOworICAgIH0KKyAgICAKK30gIC8vIG5hbWVz
cGFjZSBkb3VibGVfY29udmVyc2lvbgorCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvY2FjaGVkLXBvd2Vycy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNiYzA0
ZDQzZDY4Y2MwODYwYTIyYjI4Nzg2ZDMxNzRjOGQyNmNiMzMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvY2FjaGVkLXBvd2Vycy5oCkBAIC0wLDAgKzEs
NzIgQEAKKy8vIENvcHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8v
CisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8v
ICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8g
ICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8g
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
Ky8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmbmRlZiBET1VCTEVfQ09OVkVS
U0lPTl9DQUNIRURfUE9XRVJTX0hfCisjZGVmaW5lIERPVUJMRV9DT05WRVJTSU9OX0NBQ0hFRF9Q
T1dFUlNfSF8KKworI2luY2x1ZGUgImRpeS1mcC5oIgorCituYW1lc3BhY2UgV1RGIHsKKworbmFt
ZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKKyAgICAKKyAgICBjbGFzcyBQb3dlcnNPZlRlbkNh
Y2hlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIAorICAgICAgICAvLyBOb3QgYWxsIHBvd2VycyBv
ZiB0ZW4gYXJlIGNhY2hlZC4gVGhlIGRlY2ltYWwgZXhwb25lbnQgb2YgdHdvIG5laWdoYm9yaW5n
CisgICAgICAgIC8vIGNhY2hlZCBudW1iZXJzIHdpbGwgZGlmZmVyIGJ5IGtEZWNpbWFsRXhwb25l
bnREaXN0YW5jZS4KKyAgICAgICAgc3RhdGljIGludCBrRGVjaW1hbEV4cG9uZW50RGlzdGFuY2U7
CisgICAgICAgIAorICAgICAgICBzdGF0aWMgaW50IGtNaW5EZWNpbWFsRXhwb25lbnQ7CisgICAg
ICAgIHN0YXRpYyBpbnQga01heERlY2ltYWxFeHBvbmVudDsKKyAgICAgICAgCisgICAgICAgIC8v
IFJldHVybnMgYSBjYWNoZWQgcG93ZXItb2YtdGVuIHdpdGggYSBiaW5hcnkgZXhwb25lbnQgaW4g
dGhlIHJhbmdlCisgICAgICAgIC8vIFttaW5fZXhwb25lbnQ7IG1heF9leHBvbmVudF0gKGJvdW5k
YXJpZXMgaW5jbHVkZWQpLgorICAgICAgICBzdGF0aWMgdm9pZCBHZXRDYWNoZWRQb3dlckZvckJp
bmFyeUV4cG9uZW50UmFuZ2UoaW50IG1pbl9leHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXhfZXhwb25lbnQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
aXlGcCogcG93ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQqIGRlY2ltYWxfZXhwb25lbnQpOworICAgICAgICAKKyAgICAgICAg
Ly8gUmV0dXJucyBhIGNhY2hlZCBwb3dlciBvZiB0ZW4geCB+PSAxMF5rIHN1Y2ggdGhhdAorICAg
ICAgICAvLyAgIGsgPD0gZGVjaW1hbF9leHBvbmVudCA8IGsgKyBrQ2FjaGVkUG93ZXJzRGVjaW1h
bERpc3RhbmNlLgorICAgICAgICAvLyBUaGUgZ2l2ZW4gZGVjaW1hbF9leHBvbmVudCBtdXN0IHNh
dGlzZnkKKyAgICAgICAgLy8gICBrTWluRGVjaW1hbEV4cG9uZW50IDw9IHJlcXVlc3RlZF9leHBv
bmVudCwgYW5kCisgICAgICAgIC8vICAgcmVxdWVzdGVkX2V4cG9uZW50IDwga01heERlY2ltYWxF
eHBvbmVudCArIGtEZWNpbWFsRXhwb25lbnREaXN0YW5jZS4KKyAgICAgICAgc3RhdGljIHZvaWQg
R2V0Q2FjaGVkUG93ZXJGb3JEZWNpbWFsRXhwb25lbnQoaW50IHJlcXVlc3RlZF9leHBvbmVudCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGl5
RnAqIHBvd2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQqIGZvdW5kX2V4cG9uZW50KTsKKyAgICB9OworICAgIAorICAgIC8vIEluaXRp
YWxpemVzIHRoZSB0YWJsZSBvZiBjYWNoZWQgcG93ZXJzIHVzZWQgYnkgdGhlIGR0b2EgYWxnb3Jp
dGhtLgorICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgY2FsbGVkIHdoZW4gSlNDIGlzIGJlaW5nIGlu
aXRpYWxpemVkLgorICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIAorfSAgLy8gbmFtZXNwYWNl
IGRvdWJsZV9jb252ZXJzaW9uCisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgIC8vIERP
VUJMRV9DT05WRVJTSU9OX0NBQ0hFRF9QT1dFUlNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvZHRvYS9kaXktZnAuY2MgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L2R0b2EvZGl5LWZwLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdjYWQ1ZDQzYzVmNjM5NmFlOTQxZGFkMzhhNGVi
MGVkYWMyNTU5ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L2R0b2EvZGl5LWZwLmNjCkBAIC0wLDAgKzEsNjEgQEAKKy8vIENvcHlyaWdodCAyMDEwIHRoZSBW
OCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisv
LworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworCisjaW5jbHVkZSAiZGl5LWZwLmgiCisjaW5jbHVkZSAidXRpbHMuaCIKKworbmFtZXNw
YWNlIFdURiB7CisKK25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgdm9p
ZCBEaXlGcDo6TXVsdGlwbHkoY29uc3QgRGl5RnAmIG90aGVyKSB7CisgICAgICAgIC8vIFNpbXBs
eSAiZW11bGF0ZXMiIGEgMTI4IGJpdCBtdWx0aXBsaWNhdGlvbi4KKyAgICAgICAgLy8gSG93ZXZl
cjogdGhlIHJlc3VsdGluZyBudW1iZXIgb25seSBjb250YWlucyA2NCBiaXRzLiBUaGUgbGVhc3QK
KyAgICAgICAgLy8gc2lnbmlmaWNhbnQgNjQgYml0cyBhcmUgb25seSB1c2VkIGZvciByb3VuZGlu
ZyB0aGUgbW9zdCBzaWduaWZpY2FudCA2NAorICAgICAgICAvLyBiaXRzLgorICAgICAgICBjb25z
dCB1aW50NjRfdCBrTTMyID0gMHhGRkZGRkZGRlU7CisgICAgICAgIHVpbnQ2NF90IGEgPSBmXyA+
PiAzMjsKKyAgICAgICAgdWludDY0X3QgYiA9IGZfICYga00zMjsKKyAgICAgICAgdWludDY0X3Qg
YyA9IG90aGVyLmZfID4+IDMyOworICAgICAgICB1aW50NjRfdCBkID0gb3RoZXIuZl8gJiBrTTMy
OworICAgICAgICB1aW50NjRfdCBhYyA9IGEgKiBjOworICAgICAgICB1aW50NjRfdCBiYyA9IGIg
KiBjOworICAgICAgICB1aW50NjRfdCBhZCA9IGEgKiBkOworICAgICAgICB1aW50NjRfdCBiZCA9
IGIgKiBkOworICAgICAgICB1aW50NjRfdCB0bXAgPSAoYmQgPj4gMzIpICsgKGFkICYga00zMikg
KyAoYmMgJiBrTTMyKTsKKyAgICAgICAgLy8gQnkgYWRkaW5nIDFVIDw8IDMxIHRvIHRtcCB3ZSBy
b3VuZCB0aGUgZmluYWwgcmVzdWx0LgorICAgICAgICAvLyBIYWxmd2F5IGNhc2VzIHdpbGwgYmUg
cm91bmQgdXAuCisgICAgICAgIHRtcCArPSAxVSA8PCAzMTsKKyAgICAgICAgdWludDY0X3QgcmVz
dWx0X2YgPSBhYyArIChhZCA+PiAzMikgKyAoYmMgPj4gMzIpICsgKHRtcCA+PiAzMik7CisgICAg
ICAgIGVfICs9IG90aGVyLmVfICsgNjQ7CisgICAgICAgIGZfID0gcmVzdWx0X2Y7CisgICAgfQor
ICAgIAorfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCisKK30gLy8gbmFtZXNwYWNl
IFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2RpeS1mcC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2RpeS1mcC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU4
NDMxMDBhODJhYTM0YTYyOGRjZWU4YzI3MTFmOWFjNTBlZjllNjkKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZGl5LWZwLmgKQEAgLTAsMCArMSwxMjIg
QEAKKy8vIENvcHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisv
LyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAg
ICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAg
ICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
Ky8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8v
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmbmRlZiBET1VCTEVfQ09OVkVSU0lP
Tl9ESVlfRlBfSF8KKyNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05fRElZX0ZQX0hfCisKKyNpbmNs
dWRlICJ1dGlscy5oIgorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIGRvdWJsZV9jb252
ZXJzaW9uIHsKKyAgICAKKyAgICAvLyBUaGlzICJEbyBJdCBZb3Vyc2VsZiBGbG9hdGluZyBQb2lu
dCIgY2xhc3MgaW1wbGVtZW50cyBhIGZsb2F0aW5nLXBvaW50IG51bWJlcgorICAgIC8vIHdpdGgg
YSB1aW50NjQgc2lnbmlmaWNhbmQgYW5kIGFuIGludCBleHBvbmVudC4gTm9ybWFsaXplZCBEaXlG
cCBudW1iZXJzIHdpbGwKKyAgICAvLyBoYXZlIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBvZiB0
aGUgc2lnbmlmaWNhbmQgc2V0LgorICAgIC8vIE11bHRpcGxpY2F0aW9uIGFuZCBTdWJ0cmFjdGlv
biBkbyBub3Qgbm9ybWFsaXplIHRoZWlyIHJlc3VsdHMuCisgICAgLy8gRGl5RnAgYXJlIG5vdCBk
ZXNpZ25lZCB0byBjb250YWluIHNwZWNpYWwgZG91YmxlcyAoTmFOIGFuZCBJbmZpbml0eSkuCisg
ICAgY2xhc3MgRGl5RnAgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBr
U2lnbmlmaWNhbmRTaXplID0gNjQ7CisgICAgICAgIAorICAgICAgICBEaXlGcCgpIDogZl8oMCks
IGVfKDApIHt9CisgICAgICAgIERpeUZwKHVpbnQ2NF90IGYsIGludCBlKSA6IGZfKGYpLCBlXyhl
KSB7fQorICAgICAgICAKKyAgICAgICAgLy8gdGhpcyA9IHRoaXMgLSBvdGhlci4KKyAgICAgICAg
Ly8gVGhlIGV4cG9uZW50cyBvZiBib3RoIG51bWJlcnMgbXVzdCBiZSB0aGUgc2FtZSBhbmQgdGhl
IHNpZ25pZmljYW5kIG9mIHRoaXMKKyAgICAgICAgLy8gbXVzdCBiZSBiaWdnZXIgdGhhbiB0aGUg
c2lnbmlmaWNhbmQgb2Ygb3RoZXIuCisgICAgICAgIC8vIFRoZSByZXN1bHQgd2lsbCBub3QgYmUg
bm9ybWFsaXplZC4KKyAgICAgICAgdm9pZCBTdWJ0cmFjdChjb25zdCBEaXlGcCYgb3RoZXIpIHsK
KyAgICAgICAgICAgIEFTU0VSVChlXyA9PSBvdGhlci5lXyk7CisgICAgICAgICAgICBBU1NFUlQo
Zl8gPj0gb3RoZXIuZl8pOworICAgICAgICAgICAgZl8gLT0gb3RoZXIuZl87CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIC8vIFJldHVybnMgYSAtIGIuCisgICAgICAgIC8vIFRoZSBleHBv
bmVudHMgb2YgYm90aCBudW1iZXJzIG11c3QgYmUgdGhlIHNhbWUgYW5kIHRoaXMgbXVzdCBiZSBi
aWdnZXIKKyAgICAgICAgLy8gdGhhbiBvdGhlci4gVGhlIHJlc3VsdCB3aWxsIG5vdCBiZSBub3Jt
YWxpemVkLgorICAgICAgICBzdGF0aWMgRGl5RnAgTWludXMoY29uc3QgRGl5RnAmIGEsIGNvbnN0
IERpeUZwJiBiKSB7CisgICAgICAgICAgICBEaXlGcCByZXN1bHQgPSBhOworICAgICAgICAgICAg
cmVzdWx0LlN1YnRyYWN0KGIpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgCisgICAgICAgIC8vIHRoaXMgPSB0aGlzICogb3RoZXIuCisg
ICAgICAgIHZvaWQgTXVsdGlwbHkoY29uc3QgRGl5RnAmIG90aGVyKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIHJldHVybnMgYSAqIGI7CisgICAgICAgIHN0YXRpYyBEaXlGcCBUaW1lcyhjb25zdCBE
aXlGcCYgYSwgY29uc3QgRGl5RnAmIGIpIHsKKyAgICAgICAgICAgIERpeUZwIHJlc3VsdCA9IGE7
CisgICAgICAgICAgICByZXN1bHQuTXVsdGlwbHkoYik7CisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIE5vcm1hbGl6ZSgpIHsKKyAg
ICAgICAgICAgIEFTU0VSVChmXyAhPSAwKTsKKyAgICAgICAgICAgIHVpbnQ2NF90IGYgPSBmXzsK
KyAgICAgICAgICAgIGludCBlID0gZV87CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRo
aXMgbWV0aG9kIGlzIG1haW5seSBjYWxsZWQgZm9yIG5vcm1hbGl6aW5nIGJvdW5kYXJpZXMuIElu
IGdlbmVyYWwKKyAgICAgICAgICAgIC8vIGJvdW5kYXJpZXMgbmVlZCB0byBiZSBzaGlmdGVkIGJ5
IDEwIGJpdHMuIFdlIHRodXMgb3B0aW1pemUgZm9yIHRoaXMgY2FzZS4KKyAgICAgICAgICAgIGNv
bnN0IHVpbnQ2NF90IGsxME1TQml0cyA9IFVJTlQ2NF8yUEFSVF9DKDB4RkZDMDAwMDAsIDAwMDAw
MDAwKTsKKyAgICAgICAgICAgIHdoaWxlICgoZiAmIGsxME1TQml0cykgPT0gMCkgeworICAgICAg
ICAgICAgICAgIGYgPDw9IDEwOworICAgICAgICAgICAgICAgIGUgLT0gMTA7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB3aGlsZSAoKGYgJiBrVWludDY0TVNCKSA9PSAwKSB7CisgICAgICAg
ICAgICAgICAgZiA8PD0gMTsKKyAgICAgICAgICAgICAgICBlLS07CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBmXyA9IGY7CisgICAgICAgICAgICBlXyA9IGU7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIHN0YXRpYyBEaXlGcCBOb3JtYWxpemUoY29uc3QgRGl5RnAmIGEpIHsKKyAg
ICAgICAgICAgIERpeUZwIHJlc3VsdCA9IGE7CisgICAgICAgICAgICByZXN1bHQuTm9ybWFsaXpl
KCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICB1aW50NjRfdCBmKCkgY29uc3QgeyByZXR1cm4gZl87IH0KKyAgICAgICAgaW50IGUoKSBj
b25zdCB7IHJldHVybiBlXzsgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBzZXRfZih1aW50NjRf
dCBuZXdfdmFsdWUpIHsgZl8gPSBuZXdfdmFsdWU7IH0KKyAgICAgICAgdm9pZCBzZXRfZShpbnQg
bmV3X3ZhbHVlKSB7IGVfID0gbmV3X3ZhbHVlOyB9CisgICAgICAgIAorICAgIHByaXZhdGU6Cisg
ICAgICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBrVWludDY0TVNCID0gVUlOVDY0XzJQQVJUX0Mo
MHg4MDAwMDAwMCwgMDAwMDAwMDApOworICAgICAgICAKKyAgICAgICAgdWludDY0X3QgZl87Cisg
ICAgICAgIGludCBlXzsKKyAgICB9OworICAgIAorfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252
ZXJzaW9uCisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgIC8vIERPVUJMRV9DT05WRVJT
SU9OX0RJWV9GUF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9h
L2RvdWJsZS1jb252ZXJzaW9uLmNjIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2Rv
dWJsZS1jb252ZXJzaW9uLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVmMTg4MjUxNTM0ZmMwZTNjNjkxZjAzOTVm
OTNiNDRkNmEyOGRjNmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uY2MKQEAgLTAsMCArMSw4NzMgQEAKKy8vIENvcHly
aWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWlt
ZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAor
Ly8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisv
LyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPG1hdGgu
aD4KKworI2luY2x1ZGUgImRvdWJsZS1jb252ZXJzaW9uLmgiCisKKyNpbmNsdWRlICJiaWdudW0t
ZHRvYS5oIgorI2luY2x1ZGUgImRvdWJsZS5oIgorI2luY2x1ZGUgImZhc3QtZHRvYS5oIgorI2lu
Y2x1ZGUgImZpeGVkLWR0b2EuaCIKKyNpbmNsdWRlICJzdHJ0b2QuaCIKKyNpbmNsdWRlICJ1dGls
cy5oIgorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsK
KyAgICAKKyAgICBjb25zdCBEb3VibGVUb1N0cmluZ0NvbnZlcnRlciYgRG91YmxlVG9TdHJpbmdD
b252ZXJ0ZXI6OkVjbWFTY3JpcHRDb252ZXJ0ZXIoKSB7CisgICAgICAgIGludCBmbGFncyA9IFVO
SVFVRV9aRVJPIHwgRU1JVF9QT1NJVElWRV9FWFBPTkVOVF9TSUdOOworICAgICAgICBzdGF0aWMg
RG91YmxlVG9TdHJpbmdDb252ZXJ0ZXIgY29udmVydGVyKGZsYWdzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmZpbml0eSIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5hTiIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2UnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC02LCAyMSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2LCAwKTsKKyAgICAgICAgcmV0
dXJuIGNvbnZlcnRlcjsKKyAgICB9CisgICAgCisgICAgCisgICAgYm9vbCBEb3VibGVUb1N0cmlu
Z0NvbnZlcnRlcjo6SGFuZGxlU3BlY2lhbFZhbHVlcygKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB2YWx1ZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIq
IHJlc3VsdF9idWlsZGVyKSBjb25zdCB7CisgICAgICAgIERvdWJsZSBkb3VibGVfaW5zcGVjdCh2
YWx1ZSk7CisgICAgICAgIGlmIChkb3VibGVfaW5zcGVjdC5Jc0luZmluaXRlKCkpIHsKKyAgICAg
ICAgICAgIGlmIChpbmZpbml0eV9zeW1ib2xfID09IE5VTEwpIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIGlmICh2YWx1ZSA8IDApIHsKKyAgICAgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+
QWRkQ2hhcmFjdGVyKCctJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXN1bHRfYnVp
bGRlci0+QWRkU3RyaW5nKGluZmluaXR5X3N5bWJvbF8pOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRvdWJsZV9pbnNwZWN0LklzTmFuKCkpIHsKKyAg
ICAgICAgICAgIGlmIChuYW5fc3ltYm9sXyA9PSBOVUxMKSByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICByZXN1bHRfYnVpbGRlci0+QWRkU3RyaW5nKG5hbl9zeW1ib2xfKTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgCisgICAgCisgICAgdm9pZCBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6Q3JlYXRlRXhwb25l
bnRpYWxSZXByZXNlbnRhdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGRlY2ltYWxfZGlnaXRz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBvbmVudCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25zdCB7CisgICAgICAgIEFTU0VSVChs
ZW5ndGggIT0gMCk7CisgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRDaGFyYWN0ZXIoZGVjaW1h
bF9kaWdpdHNbMF0pOworICAgICAgICBpZiAobGVuZ3RoICE9IDEpIHsKKyAgICAgICAgICAgIHJl
c3VsdF9idWlsZGVyLT5BZGRDaGFyYWN0ZXIoJy4nKTsKKyAgICAgICAgICAgIHJlc3VsdF9idWls
ZGVyLT5BZGRTdWJzdHJpbmcoJmRlY2ltYWxfZGlnaXRzWzFdLCBsZW5ndGgtMSk7CisgICAgICAg
IH0KKyAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcihleHBvbmVudF9jaGFyYWN0
ZXJfKTsKKyAgICAgICAgaWYgKGV4cG9uZW50IDwgMCkgeworICAgICAgICAgICAgcmVzdWx0X2J1
aWxkZXItPkFkZENoYXJhY3RlcignLScpOworICAgICAgICAgICAgZXhwb25lbnQgPSAtZXhwb25l
bnQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoKGZsYWdzXyAmIEVNSVRfUE9T
SVRJVkVfRVhQT05FTlRfU0lHTikgIT0gMCkgeworICAgICAgICAgICAgICAgIHJlc3VsdF9idWls
ZGVyLT5BZGRDaGFyYWN0ZXIoJysnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBpZiAoZXhwb25lbnQgPT0gMCkgeworICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENo
YXJhY3RlcignMCcpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIEFT
U0VSVChleHBvbmVudCA8IDFlNCk7CisgICAgICAgIGNvbnN0IGludCBrTWF4RXhwb25lbnRMZW5n
dGggPSA1OworICAgICAgICBjaGFyIGJ1ZmZlcltrTWF4RXhwb25lbnRMZW5ndGhdOworICAgICAg
ICBpbnQgZmlyc3RfY2hhcl9wb3MgPSBrTWF4RXhwb25lbnRMZW5ndGg7CisgICAgICAgIHdoaWxl
IChleHBvbmVudCA+IDApIHsKKyAgICAgICAgICAgIGJ1ZmZlclstLWZpcnN0X2NoYXJfcG9zXSA9
ICcwJyArIChleHBvbmVudCAlIDEwKTsKKyAgICAgICAgICAgIGV4cG9uZW50IC89IDEwOworICAg
ICAgICB9CisgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRTdWJzdHJpbmcoJmJ1ZmZlcltmaXJz
dF9jaGFyX3Bvc10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga01heEV4
cG9uZW50TGVuZ3RoIC0gZmlyc3RfY2hhcl9wb3MpOworICAgIH0KKyAgICAKKyAgICAKKyAgICB2
b2lkIERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpDcmVhdGVEZWNpbWFsUmVwcmVzZW50YXRpb24o
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIGRlY2ltYWxfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRpZ2l0c19hZnRlcl9wb2ludCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U3RyaW5nQnVpbGRlciogcmVzdWx0X2J1aWxkZXIpIGNvbnN0IHsKKyAgICAgICAgLy8gQ3JlYXRl
IGEgcmVwcmVzZW50YXRpb24gdGhhdCBpcyBwYWRkZWQgd2l0aCB6ZXJvcyBpZiBuZWVkZWQuCisg
ICAgICAgIGlmIChkZWNpbWFsX3BvaW50IDw9IDApIHsKKyAgICAgICAgICAgIC8vICIwLjAwMDAw
ZGVjaW1hbF9yZXAiLgorICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3Rlcign
MCcpOworICAgICAgICAgICAgaWYgKGRpZ2l0c19hZnRlcl9wb2ludCA+IDApIHsKKyAgICAgICAg
ICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKCcuJyk7CisgICAgICAgICAgICAg
ICAgcmVzdWx0X2J1aWxkZXItPkFkZFBhZGRpbmcoJzAnLCAtZGVjaW1hbF9wb2ludCk7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKGxlbmd0aCA8PSBkaWdpdHNfYWZ0ZXJfcG9pbnQgLSAoLWRlY2lt
YWxfcG9pbnQpKTsKKyAgICAgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkU3Vic3RyaW5n
KGRlY2ltYWxfZGlnaXRzLCBsZW5ndGgpOworICAgICAgICAgICAgICAgIGludCByZW1haW5pbmdf
ZGlnaXRzID0gZGlnaXRzX2FmdGVyX3BvaW50IC0gKC1kZWNpbWFsX3BvaW50KSAtIGxlbmd0aDsK
KyAgICAgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkUGFkZGluZygnMCcsIHJlbWFpbmlu
Z19kaWdpdHMpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGRlY2ltYWxfcG9p
bnQgPj0gbGVuZ3RoKSB7CisgICAgICAgICAgICAvLyAiZGVjaW1hbF9yZXAwMDAwLjAwMDAwIiBv
ciAiZGVjaW1hbF9yZXAuMDAwMCIKKyAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRTdWJz
dHJpbmcoZGVjaW1hbF9kaWdpdHMsIGxlbmd0aCk7CisgICAgICAgICAgICByZXN1bHRfYnVpbGRl
ci0+QWRkUGFkZGluZygnMCcsIGRlY2ltYWxfcG9pbnQgLSBsZW5ndGgpOworICAgICAgICAgICAg
aWYgKGRpZ2l0c19hZnRlcl9wb2ludCA+IDApIHsKKyAgICAgICAgICAgICAgICByZXN1bHRfYnVp
bGRlci0+QWRkQ2hhcmFjdGVyKCcuJyk7CisgICAgICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXIt
PkFkZFBhZGRpbmcoJzAnLCBkaWdpdHNfYWZ0ZXJfcG9pbnQpOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gImRlY2ltYS5sX3JlcDAwMCIKKyAgICAgICAg
ICAgIEFTU0VSVChkaWdpdHNfYWZ0ZXJfcG9pbnQgPiAwKTsKKyAgICAgICAgICAgIHJlc3VsdF9i
dWlsZGVyLT5BZGRTdWJzdHJpbmcoZGVjaW1hbF9kaWdpdHMsIGRlY2ltYWxfcG9pbnQpOworICAg
ICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcignLicpOworICAgICAgICAgICAg
QVNTRVJUKGxlbmd0aCAtIGRlY2ltYWxfcG9pbnQgPD0gZGlnaXRzX2FmdGVyX3BvaW50KTsKKyAg
ICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRTdWJzdHJpbmcoJmRlY2ltYWxfZGlnaXRzW2Rl
Y2ltYWxfcG9pbnRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
ZW5ndGggLSBkZWNpbWFsX3BvaW50KTsKKyAgICAgICAgICAgIGludCByZW1haW5pbmdfZGlnaXRz
ID0gZGlnaXRzX2FmdGVyX3BvaW50IC0gKGxlbmd0aCAtIGRlY2ltYWxfcG9pbnQpOworICAgICAg
ICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZFBhZGRpbmcoJzAnLCByZW1haW5pbmdfZGlnaXRzKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoZGlnaXRzX2FmdGVyX3BvaW50ID09IDApIHsKKyAgICAg
ICAgICAgIGlmICgoZmxhZ3NfICYgRU1JVF9UUkFJTElOR19ERUNJTUFMX1BPSU5UKSAhPSAwKSB7
CisgICAgICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcignLicpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChmbGFnc18gJiBFTUlUX1RSQUlMSU5HX1pFUk9f
QUZURVJfUE9JTlQpICE9IDApIHsKKyAgICAgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRk
Q2hhcmFjdGVyKCcwJyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgCisgICAgYm9vbCBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6VG9TaG9ydGVzdChkb3VibGUg
dmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJp
bmdCdWlsZGVyKiByZXN1bHRfYnVpbGRlcikgY29uc3QgeworICAgICAgICBpZiAoRG91YmxlKHZh
bHVlKS5Jc1NwZWNpYWwoKSkgeworICAgICAgICAgICAgcmV0dXJuIEhhbmRsZVNwZWNpYWxWYWx1
ZXModmFsdWUsIHJlc3VsdF9idWlsZGVyKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aW50IGRlY2ltYWxfcG9pbnQ7CisgICAgICAgIGJvb2wgc2lnbjsKKyAgICAgICAgY29uc3QgaW50
IGtEZWNpbWFsUmVwQ2FwYWNpdHkgPSBrQmFzZTEwTWF4aW1hbExlbmd0aCArIDE7CisgICAgICAg
IGNoYXIgZGVjaW1hbF9yZXBba0RlY2ltYWxSZXBDYXBhY2l0eV07CisgICAgICAgIGludCBkZWNp
bWFsX3JlcF9sZW5ndGg7CisgICAgICAgIAorICAgICAgICBEb3VibGVUb0FzY2lpKHZhbHVlLCBT
SE9SVEVTVCwgMCwgZGVjaW1hbF9yZXAsIGtEZWNpbWFsUmVwQ2FwYWNpdHksCisgICAgICAgICAg
ICAgICAgICAgICAgJnNpZ24sICZkZWNpbWFsX3JlcF9sZW5ndGgsICZkZWNpbWFsX3BvaW50KTsK
KyAgICAgICAgCisgICAgICAgIGJvb2wgdW5pcXVlX3plcm8gPSAoZmxhZ3NfICYgVU5JUVVFX1pF
Uk8pICE9IDA7CisgICAgICAgIGlmIChzaWduICYmICh2YWx1ZSAhPSAwLjAgfHwgIXVuaXF1ZV96
ZXJvKSkgeworICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcignLScpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpbnQgZXhwb25lbnQgPSBkZWNpbWFsX3BvaW50
IC0gMTsKKyAgICAgICAgaWYgKChkZWNpbWFsX2luX3Nob3J0ZXN0X2xvd18gPD0gZXhwb25lbnQp
ICYmCisgICAgICAgICAgICAoZXhwb25lbnQgPCBkZWNpbWFsX2luX3Nob3J0ZXN0X2hpZ2hfKSkg
eworICAgICAgICAgICAgQ3JlYXRlRGVjaW1hbFJlcHJlc2VudGF0aW9uKGRlY2ltYWxfcmVwLCBk
ZWNpbWFsX3JlcF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBNYXgoMCwgZGVjaW1hbF9yZXBfbGVuZ3RoIC0gZGVjaW1hbF9wb2ludCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXIpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgQ3JlYXRlRXhwb25lbnRpYWxSZXByZXNlbnRhdGlvbihkZWNp
bWFsX3JlcCwgZGVjaW1hbF9yZXBfbGVuZ3RoLCBleHBvbmVudCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXIpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAKKyAgICBib29sIERvdWJsZVRv
U3RyaW5nQ29udmVydGVyOjpUb0ZpeGVkKGRvdWJsZSB2YWx1ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXF1ZXN0ZWRfZGlnaXRzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVpbGRlciogcmVzdWx0X2J1
aWxkZXIpIGNvbnN0IHsKKyAgICAgICAgQVNTRVJUKGtNYXhGaXhlZERpZ2l0c0JlZm9yZVBvaW50
ID09IDYwKTsKKyAgICAgICAgY29uc3QgZG91YmxlIGtGaXJzdE5vbkZpeGVkID0gMWU2MDsKKyAg
ICAgICAgCisgICAgICAgIGlmIChEb3VibGUodmFsdWUpLklzU3BlY2lhbCgpKSB7CisgICAgICAg
ICAgICByZXR1cm4gSGFuZGxlU3BlY2lhbFZhbHVlcyh2YWx1ZSwgcmVzdWx0X2J1aWxkZXIpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAocmVxdWVzdGVkX2RpZ2l0cyA+IGtNYXhG
aXhlZERpZ2l0c0FmdGVyUG9pbnQpIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKHZhbHVlID49
IGtGaXJzdE5vbkZpeGVkIHx8IHZhbHVlIDw9IC1rRmlyc3ROb25GaXhlZCkgcmV0dXJuIGZhbHNl
OworICAgICAgICAKKyAgICAgICAgLy8gRmluZCBhIHN1ZmZpY2llbnRseSBwcmVjaXNlIGRlY2lt
YWwgcmVwcmVzZW50YXRpb24gb2Ygbi4KKyAgICAgICAgaW50IGRlY2ltYWxfcG9pbnQ7CisgICAg
ICAgIGJvb2wgc2lnbjsKKyAgICAgICAgLy8gQWRkIHNwYWNlIGZvciB0aGUgJ1wwJyBieXRlLgor
ICAgICAgICBjb25zdCBpbnQga0RlY2ltYWxSZXBDYXBhY2l0eSA9CisgICAgICAgIGtNYXhGaXhl
ZERpZ2l0c0JlZm9yZVBvaW50ICsga01heEZpeGVkRGlnaXRzQWZ0ZXJQb2ludCArIDE7CisgICAg
ICAgIGNoYXIgZGVjaW1hbF9yZXBba0RlY2ltYWxSZXBDYXBhY2l0eV07CisgICAgICAgIGludCBk
ZWNpbWFsX3JlcF9sZW5ndGg7CisgICAgICAgIERvdWJsZVRvQXNjaWkodmFsdWUsIEZJWEVELCBy
ZXF1ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgIGRlY2ltYWxfcmVwLCBrRGVj
aW1hbFJlcENhcGFjaXR5LAorICAgICAgICAgICAgICAgICAgICAgICZzaWduLCAmZGVjaW1hbF9y
ZXBfbGVuZ3RoLCAmZGVjaW1hbF9wb2ludCk7CisgICAgICAgIAorICAgICAgICBib29sIHVuaXF1
ZV96ZXJvID0gKChmbGFnc18gJiBVTklRVUVfWkVSTykgIT0gMCk7CisgICAgICAgIGlmIChzaWdu
ICYmICh2YWx1ZSAhPSAwLjAgfHwgIXVuaXF1ZV96ZXJvKSkgeworICAgICAgICAgICAgcmVzdWx0
X2J1aWxkZXItPkFkZENoYXJhY3RlcignLScpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBDcmVhdGVEZWNpbWFsUmVwcmVzZW50YXRpb24oZGVjaW1hbF9yZXAsIGRlY2ltYWxfcmVwX2xl
bmd0aCwgZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlcXVlc3RlZF9kaWdpdHMsIHJlc3VsdF9idWlsZGVyKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIAorICAgIAorICAgIGJvb2wgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6OlRv
RXhwb25lbnRpYWwoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkb3VibGUgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBj
b25zdCB7CisgICAgICAgIGlmIChEb3VibGUodmFsdWUpLklzU3BlY2lhbCgpKSB7CisgICAgICAg
ICAgICByZXR1cm4gSGFuZGxlU3BlY2lhbFZhbHVlcyh2YWx1ZSwgcmVzdWx0X2J1aWxkZXIpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAocmVxdWVzdGVkX2RpZ2l0cyA8IC0xKSBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChyZXF1ZXN0ZWRfZGlnaXRzID4ga01heEV4cG9uZW50
aWFsRGlnaXRzKSByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpbnQgZGVjaW1hbF9w
b2ludDsKKyAgICAgICAgYm9vbCBzaWduOworICAgICAgICAvLyBBZGQgc3BhY2UgZm9yIGRpZ2l0
IGJlZm9yZSB0aGUgZGVjaW1hbCBwb2ludCBhbmQgdGhlICdcMCcgY2hhcmFjdGVyLgorICAgICAg
ICBjb25zdCBpbnQga0RlY2ltYWxSZXBDYXBhY2l0eSA9IGtNYXhFeHBvbmVudGlhbERpZ2l0cyAr
IDI7CisgICAgICAgIEFTU0VSVChrRGVjaW1hbFJlcENhcGFjaXR5ID4ga0Jhc2UxME1heGltYWxM
ZW5ndGgpOworICAgICAgICBjaGFyIGRlY2ltYWxfcmVwW2tEZWNpbWFsUmVwQ2FwYWNpdHldOwor
ICAgICAgICBpbnQgZGVjaW1hbF9yZXBfbGVuZ3RoOworICAgICAgICAKKyAgICAgICAgaWYgKHJl
cXVlc3RlZF9kaWdpdHMgPT0gLTEpIHsKKyAgICAgICAgICAgIERvdWJsZVRvQXNjaWkodmFsdWUs
IFNIT1JURVNULCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNpbWFsX3JlcCwga0Rl
Y2ltYWxSZXBDYXBhY2l0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnNpZ24sICZkZWNp
bWFsX3JlcF9sZW5ndGgsICZkZWNpbWFsX3BvaW50KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIERvdWJsZVRvQXNjaWkodmFsdWUsIFBSRUNJU0lPTiwgcmVxdWVzdGVkX2RpZ2l0cyAr
IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2ltYWxfcmVwLCBrRGVjaW1hbFJlcENh
cGFjaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAmc2lnbiwgJmRlY2ltYWxfcmVwX2xl
bmd0aCwgJmRlY2ltYWxfcG9pbnQpOworICAgICAgICAgICAgQVNTRVJUKGRlY2ltYWxfcmVwX2xl
bmd0aCA8PSByZXF1ZXN0ZWRfZGlnaXRzICsgMSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGZvciAoaW50IGkgPSBkZWNpbWFsX3JlcF9sZW5ndGg7IGkgPCByZXF1ZXN0ZWRfZGlnaXRzICsg
MTsgKytpKSB7CisgICAgICAgICAgICAgICAgZGVjaW1hbF9yZXBbaV0gPSAnMCc7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBkZWNpbWFsX3JlcF9sZW5ndGggPSByZXF1ZXN0ZWRfZGlnaXRz
ICsgMTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCB1bmlxdWVfemVybyA9ICgo
ZmxhZ3NfICYgVU5JUVVFX1pFUk8pICE9IDApOworICAgICAgICBpZiAoc2lnbiAmJiAodmFsdWUg
IT0gMC4wIHx8ICF1bmlxdWVfemVybykpIHsKKyAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5B
ZGRDaGFyYWN0ZXIoJy0nKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaW50IGV4cG9u
ZW50ID0gZGVjaW1hbF9wb2ludCAtIDE7CisgICAgICAgIENyZWF0ZUV4cG9uZW50aWFsUmVwcmVz
ZW50YXRpb24oZGVjaW1hbF9yZXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVjaW1hbF9yZXBfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGV4cG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdF9idWlsZGVyKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAor
ICAgIAorICAgIGJvb2wgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6OlRvUHJlY2lzaW9uKGRvdWJs
ZSB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgcHJlY2lzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25zdCB7CisgICAgICAgIGlmIChE
b3VibGUodmFsdWUpLklzU3BlY2lhbCgpKSB7CisgICAgICAgICAgICByZXR1cm4gSGFuZGxlU3Bl
Y2lhbFZhbHVlcyh2YWx1ZSwgcmVzdWx0X2J1aWxkZXIpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBpZiAocHJlY2lzaW9uIDwga01pblByZWNpc2lvbkRpZ2l0cyB8fCBwcmVjaXNpb24g
PiBrTWF4UHJlY2lzaW9uRGlnaXRzKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZpbmQgYSBzdWZmaWNpZW50bHkgcHJlY2lzZSBk
ZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIG4uCisgICAgICAgIGludCBkZWNpbWFsX3BvaW50Owor
ICAgICAgICBib29sIHNpZ247CisgICAgICAgIC8vIEFkZCBvbmUgZm9yIHRoZSB0ZXJtaW5hdGlu
ZyBudWxsIGNoYXJhY3Rlci4KKyAgICAgICAgY29uc3QgaW50IGtEZWNpbWFsUmVwQ2FwYWNpdHkg
PSBrTWF4UHJlY2lzaW9uRGlnaXRzICsgMTsKKyAgICAgICAgY2hhciBkZWNpbWFsX3JlcFtrRGVj
aW1hbFJlcENhcGFjaXR5XTsKKyAgICAgICAgaW50IGRlY2ltYWxfcmVwX2xlbmd0aDsKKyAgICAg
ICAgCisgICAgICAgIERvdWJsZVRvQXNjaWkodmFsdWUsIFBSRUNJU0lPTiwgcHJlY2lzaW9uLAor
ICAgICAgICAgICAgICAgICAgICAgIGRlY2ltYWxfcmVwLCBrRGVjaW1hbFJlcENhcGFjaXR5LAor
ICAgICAgICAgICAgICAgICAgICAgICZzaWduLCAmZGVjaW1hbF9yZXBfbGVuZ3RoLCAmZGVjaW1h
bF9wb2ludCk7CisgICAgICAgIEFTU0VSVChkZWNpbWFsX3JlcF9sZW5ndGggPD0gcHJlY2lzaW9u
KTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgdW5pcXVlX3plcm8gPSAoKGZsYWdzXyAmIFVOSVFV
RV9aRVJPKSAhPSAwKTsKKyAgICAgICAgaWYgKHNpZ24gJiYgKHZhbHVlICE9IDAuMCB8fCAhdW5p
cXVlX3plcm8pKSB7CisgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKCct
Jyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBleHBvbmVudCBpZiB3ZSBw
cmludCB0aGUgbnVtYmVyIGFzIHgueHhleXl5LiBUaGF0IGlzIHdpdGggdGhlCisgICAgICAgIC8v
IGRlY2ltYWwgcG9pbnQgYWZ0ZXIgdGhlIGZpcnN0IGRpZ2l0LgorICAgICAgICBpbnQgZXhwb25l
bnQgPSBkZWNpbWFsX3BvaW50IC0gMTsKKyAgICAgICAgCisgICAgICAgIGludCBleHRyYV96ZXJv
ID0gKChmbGFnc18gJiBFTUlUX1RSQUlMSU5HX1pFUk9fQUZURVJfUE9JTlQpICE9IDApID8gMSA6
IDA7CisgICAgICAgIGlmICgoLWRlY2ltYWxfcG9pbnQgKyAxID4gbWF4X2xlYWRpbmdfcGFkZGlu
Z196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGVfKSB8fAorICAgICAgICAgICAgKGRlY2ltYWxfcG9p
bnQgLSBwcmVjaXNpb24gKyBleHRyYV96ZXJvID4KKyAgICAgICAgICAgICBtYXhfdHJhaWxpbmdf
cGFkZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGVfKSkgeworICAgICAgICAgICAgICAgIC8v
IEZpbGwgYnVmZmVyIHRvIGNvbnRhaW4gJ3ByZWNpc2lvbicgZGlnaXRzLgorICAgICAgICAgICAg
ICAgIC8vIFVzdWFsbHkgdGhlIGJ1ZmZlciBpcyBhbHJlYWR5IGF0IHRoZSBjb3JyZWN0IGxlbmd0
aCwgYnV0ICdEb3VibGVUb0FzY2lpJworICAgICAgICAgICAgICAgIC8vIGlzIGFsbG93ZWQgdG8g
cmV0dXJuIGxlc3MgY2hhcmFjdGVycy4KKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gZGVj
aW1hbF9yZXBfbGVuZ3RoOyBpIDwgcHJlY2lzaW9uOyArK2kpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZGVjaW1hbF9yZXBbaV0gPSAnMCc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIENyZWF0ZUV4cG9uZW50aWFsUmVwcmVzZW50YXRpb24oZGVj
aW1hbF9yZXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcmVjaXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBleHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdF9idWlsZGVyKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgQ3JlYXRlRGVjaW1hbFJlcHJlc2VudGF0aW9uKGRlY2ltYWxfcmVwLCBkZWNpbWFsX3Jl
cF9sZW5ndGgsIGRlY2ltYWxfcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE1heCgwLCBwcmVjaXNpb24gLSBkZWNpbWFsX3BvaW50KSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXIpOworICAg
ICAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgCisgICAg
c3RhdGljIEJpZ251bUR0b2FNb2RlIER0b2FUb0JpZ251bUR0b2FNb2RlKAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb3VibGVUb1N0cmluZ0NvbnZlcnRl
cjo6RHRvYU1vZGUgZHRvYV9tb2RlKSB7CisgICAgICAgIHN3aXRjaCAoZHRvYV9tb2RlKSB7Cisg
ICAgICAgICAgICBjYXNlIERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpTSE9SVEVTVDogIHJldHVy
biBCSUdOVU1fRFRPQV9TSE9SVEVTVDsKKyAgICAgICAgICAgIGNhc2UgRG91YmxlVG9TdHJpbmdD
b252ZXJ0ZXI6OkZJWEVEOiAgICAgcmV0dXJuIEJJR05VTV9EVE9BX0ZJWEVEOworICAgICAgICAg
ICAgY2FzZSBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6UFJFQ0lTSU9OOiByZXR1cm4gQklHTlVN
X0RUT0FfUFJFQ0lTSU9OOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBV
TlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIHJldHVybiBCSUdOVU1fRFRPQV9TSE9SVEVT
VDsgIC8vIFRvIHNpbGVuY2UgY29tcGlsZXIuCisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
CisgICAgdm9pZCBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6RG91YmxlVG9Bc2NpaShkb3VibGUg
diwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIER0b2FN
b2RlIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoYXIqIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBidWZmZXJfbGVuZ3RoLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCogc2lnbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogbGVuZ3RoLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBwb2ludCkgewor
ICAgICAgICBWZWN0b3I8Y2hhcj4gdmVjdG9yKGJ1ZmZlciwgYnVmZmVyX2xlbmd0aCk7CisgICAg
ICAgIEFTU0VSVCghRG91YmxlKHYpLklzU3BlY2lhbCgpKTsKKyAgICAgICAgQVNTRVJUKG1vZGUg
PT0gU0hPUlRFU1QgfHwgcmVxdWVzdGVkX2RpZ2l0cyA+PSAwKTsKKyAgICAgICAgCisgICAgICAg
IGlmIChEb3VibGUodikuU2lnbigpIDwgMCkgeworICAgICAgICAgICAgKnNpZ24gPSB0cnVlOwor
ICAgICAgICAgICAgdiA9IC12OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgKnNpZ24g
PSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1vZGUgPT0gUFJFQ0lT
SU9OICYmIHJlcXVlc3RlZF9kaWdpdHMgPT0gMCkgeworICAgICAgICAgICAgdmVjdG9yWzBdID0g
J1wwJzsKKyAgICAgICAgICAgICpsZW5ndGggPSAwOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAodiA9PSAwKSB7CisgICAgICAgICAgICB2ZWN0
b3JbMF0gPSAnMCc7CisgICAgICAgICAgICB2ZWN0b3JbMV0gPSAnXDAnOworICAgICAgICAgICAg
Kmxlbmd0aCA9IDE7CisgICAgICAgICAgICAqcG9pbnQgPSAxOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGZhc3Rfd29ya2VkOworICAgICAg
ICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgU0hPUlRFU1Q6CisgICAgICAgICAg
ICAgICAgZmFzdF93b3JrZWQgPSBGYXN0RHRvYSh2LCBGQVNUX0RUT0FfU0hPUlRFU1QsIDAsIHZl
Y3RvciwgbGVuZ3RoLCBwb2ludCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIEZJWEVEOgorICAgICAgICAgICAgICAgIGZhc3Rfd29ya2VkID0gRmFzdEZpeGVkRHRv
YSh2LCByZXF1ZXN0ZWRfZGlnaXRzLCB2ZWN0b3IsIGxlbmd0aCwgcG9pbnQpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBQUkVDSVNJT046CisgICAgICAgICAgICAg
ICAgZmFzdF93b3JrZWQgPSBGYXN0RHRvYSh2LCBGQVNUX0RUT0FfUFJFQ0lTSU9OLCByZXF1ZXN0
ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjdG9y
LCBsZW5ndGgsIHBvaW50KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICBm
YXN0X3dvcmtlZCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChmYXN0X3dvcmtlZCkg
cmV0dXJuOworICAgICAgICAKKyAgICAgICAgLy8gSWYgdGhlIGZhc3QgZHRvYSBkaWRuJ3Qgc3Vj
Y2VlZCB1c2UgdGhlIHNsb3dlciBiaWdudW0gdmVyc2lvbi4KKyAgICAgICAgQmlnbnVtRHRvYU1v
ZGUgYmlnbnVtX21vZGUgPSBEdG9hVG9CaWdudW1EdG9hTW9kZShtb2RlKTsKKyAgICAgICAgQmln
bnVtRHRvYSh2LCBiaWdudW1fbW9kZSwgcmVxdWVzdGVkX2RpZ2l0cywgdmVjdG9yLCBsZW5ndGgs
IHBvaW50KTsKKyAgICAgICAgdmVjdG9yWypsZW5ndGhdID0gJ1wwJzsKKyAgICB9CisgICAgCisg
ICAgCisgICAgLy8gQ29uc3VtZXMgdGhlIGdpdmVuIHN1YnN0cmluZyBmcm9tIHRoZSBpdGVyYXRv
ci4KKyAgICAvLyBSZXR1cm5zIGZhbHNlLCBpZiB0aGUgc3Vic3RyaW5nIGRvZXMgbm90IG1hdGNo
LgorICAgIHN0YXRpYyBib29sIENvbnN1bWVTdWJTdHJpbmcoY29uc3QgY2hhcioqIGN1cnJlbnQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBlbmQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBzdWJzdHJpbmcpIHsKKyAg
ICAgICAgQVNTRVJUKCoqY3VycmVudCA9PSAqc3Vic3RyaW5nKTsKKyAgICAgICAgZm9yIChzdWJz
dHJpbmcrKzsgKnN1YnN0cmluZyAhPSAnXDAnOyBzdWJzdHJpbmcrKykgeworICAgICAgICAgICAg
KysqY3VycmVudDsKKyAgICAgICAgICAgIGlmICgqY3VycmVudCA9PSBlbmQgfHwgKipjdXJyZW50
ICE9ICpzdWJzdHJpbmcpIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICArKypjdXJy
ZW50OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgCisgICAgLy8gTWF4
aW11bSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIGluIGRlY2ltYWwgcmVwcmVzZW50YXRp
b24uCisgICAgLy8gVGhlIGxvbmdlc3QgcG9zc2libGUgZG91YmxlIGluIGRlY2ltYWwgcmVwcmVz
ZW50YXRpb24gaXMKKyAgICAvLyAoMl41MyAtIDEpICogMiBeIC0xMDc0IHRoYXQgaXMgKDIgXiA1
MyAtIDEpICogNSBeIDEwNzQgLyAxMCBeIDEwNzQKKyAgICAvLyAoNzY4IGRpZ2l0cykuIElmIHdl
IHBhcnNlIGEgbnVtYmVyIHdob3NlIGZpcnN0IGRpZ2l0cyBhcmUgZXF1YWwgdG8gYQorICAgIC8v
IG1lYW4gb2YgMiBhZGphY2VudCBkb3VibGVzICh0aGF0IGNvdWxkIGhhdmUgdXAgdG8gNzY5IGRp
Z2l0cykgdGhlIHJlc3VsdAorICAgIC8vIG11c3QgYmUgcm91bmRlZCB0byB0aGUgYmlnZ2VyIG9u
ZSB1bmxlc3MgdGhlIHRhaWwgY29uc2lzdHMgb2YgemVyb3MsIHNvCisgICAgLy8gd2UgZG9uJ3Qg
bmVlZCB0byBwcmVzZXJ2ZSBhbGwgdGhlIGRpZ2l0cy4KKyAgICBjb25zdCBpbnQga01heFNpZ25p
ZmljYW50RGlnaXRzID0gNzcyOworICAgIAorICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBh
IG5vbnNwYWNlIGZvdW5kIGFuZCBmYWxzZSBpZiB0aGUgZW5kIGhhcyByZWFjaGVkLgorICAgIHN0
YXRpYyBpbmxpbmUgYm9vbCBBZHZhbmNlVG9Ob25zcGFjZShjb25zdCBjaGFyKiogY3VycmVudCwg
Y29uc3QgY2hhciogZW5kKSB7CisgICAgICAgIHdoaWxlICgqY3VycmVudCAhPSBlbmQpIHsKKyAg
ICAgICAgICAgIGlmICgqKmN1cnJlbnQgIT0gJyAnKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
ICsrKmN1cnJlbnQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICAKKyAgICAKKyAgICBzdGF0aWMgYm9vbCBpc0RpZ2l0KGludCB4LCBpbnQgcmFkaXgpIHsKKyAg
ICAgICAgcmV0dXJuICh4ID49ICcwJyAmJiB4IDw9ICc5JyAmJiB4IDwgJzAnICsgcmFkaXgpCisg
ICAgICAgIHx8IChyYWRpeCA+IDEwICYmIHggPj0gJ2EnICYmIHggPCAnYScgKyByYWRpeCAtIDEw
KQorICAgICAgICB8fCAocmFkaXggPiAxMCAmJiB4ID49ICdBJyAmJiB4IDwgJ0EnICsgcmFkaXgg
LSAxMCk7CisgICAgfQorICAgIAorICAgIAorICAgIHN0YXRpYyBkb3VibGUgU2lnbmVkWmVybyhi
b29sIHNpZ24pIHsKKyAgICAgICAgcmV0dXJuIHNpZ24gPyAtMC4wIDogMC4wOworICAgIH0KKyAg
ICAKKyAgICAKKyAgICAvLyBQYXJzaW5nIGludGVnZXJzIHdpdGggcmFkaXggMiwgNCwgOCwgMTYs
IDMyLiBBc3N1bWVzIGN1cnJlbnQgIT0gZW5kLgorICAgIHRlbXBsYXRlIDxpbnQgcmFkaXhfbG9n
XzI+CisgICAgc3RhdGljIGRvdWJsZSBSYWRpeFN0cmluZ1RvRG91YmxlKGNvbnN0IGNoYXIqIGN1
cnJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IGVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzaWduLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsbG93X3RyYWlsaW5n
X2p1bmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBqdW5r
X3N0cmluZ192YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhcioqIHRyYWlsaW5nX3BvaW50ZXIpIHsKKyAgICAgICAgQVNTRVJUKGN1cnJlbnQgIT0g
ZW5kKTsKKyAgICAgICAgCisgICAgICAgIC8vIFNraXAgbGVhZGluZyAwcy4KKyAgICAgICAgd2hp
bGUgKCpjdXJyZW50ID09ICcwJykgeworICAgICAgICAgICAgKytjdXJyZW50OworICAgICAgICAg
ICAgaWYgKGN1cnJlbnQgPT0gZW5kKSB7CisgICAgICAgICAgICAgICAgKnRyYWlsaW5nX3BvaW50
ZXIgPSBlbmQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNpZ25lZFplcm8oc2lnbik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludDY0X3QgbnVtYmVyID0g
MDsKKyAgICAgICAgaW50IGV4cG9uZW50ID0gMDsKKyAgICAgICAgY29uc3QgaW50IHJhZGl4ID0g
KDEgPDwgcmFkaXhfbG9nXzIpOworICAgICAgICAKKyAgICAgICAgZG8geworICAgICAgICAgICAg
aW50IGRpZ2l0OworICAgICAgICAgICAgaWYgKCpjdXJyZW50ID49ICcwJyAmJiAqY3VycmVudCA8
PSAnOScgJiYgKmN1cnJlbnQgPCAnMCcgKyByYWRpeCkgeworICAgICAgICAgICAgICAgIGRpZ2l0
ID0gc3RhdGljX2Nhc3Q8Y2hhcj4oKmN1cnJlbnQpIC0gJzAnOworICAgICAgICAgICAgfSBlbHNl
IGlmIChyYWRpeCA+IDEwICYmICpjdXJyZW50ID49ICdhJyAmJiAqY3VycmVudCA8ICdhJyArIHJh
ZGl4IC0gMTApIHsKKyAgICAgICAgICAgICAgICBkaWdpdCA9IHN0YXRpY19jYXN0PGNoYXI+KCpj
dXJyZW50KSAtICdhJyArIDEwOworICAgICAgICAgICAgfSBlbHNlIGlmIChyYWRpeCA+IDEwICYm
ICpjdXJyZW50ID49ICdBJyAmJiAqY3VycmVudCA8ICdBJyArIHJhZGl4IC0gMTApIHsKKyAgICAg
ICAgICAgICAgICBkaWdpdCA9IHN0YXRpY19jYXN0PGNoYXI+KCpjdXJyZW50KSAtICdBJyArIDEw
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoYWxsb3dfdHJhaWxp
bmdfanVuayB8fCAhQWR2YW5jZVRvTm9uc3BhY2UoJmN1cnJlbnQsIGVuZCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbnVtYmVyID0gbnVtYmVyICog
cmFkaXggKyBkaWdpdDsKKyAgICAgICAgICAgIGludCBvdmVyZmxvdyA9IHN0YXRpY19jYXN0PGlu
dD4obnVtYmVyID4+IDUzKTsKKyAgICAgICAgICAgIGlmIChvdmVyZmxvdyAhPSAwKSB7CisgICAg
ICAgICAgICAgICAgLy8gT3ZlcmZsb3cgb2NjdXJyZWQuIE5lZWQgdG8gZGV0ZXJtaW5lIHdoaWNo
IGRpcmVjdGlvbiB0byByb3VuZCB0aGUKKyAgICAgICAgICAgICAgICAvLyByZXN1bHQuCisgICAg
ICAgICAgICAgICAgaW50IG92ZXJmbG93X2JpdHNfY291bnQgPSAxOworICAgICAgICAgICAgICAg
IHdoaWxlIChvdmVyZmxvdyA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dfYml0
c19jb3VudCsrOworICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdyA+Pj0gMTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaW50IGRyb3BwZWRf
Yml0c19tYXNrID0gKCgxIDw8IG92ZXJmbG93X2JpdHNfY291bnQpIC0gMSk7CisgICAgICAgICAg
ICAgICAgaW50IGRyb3BwZWRfYml0cyA9IHN0YXRpY19jYXN0PGludD4obnVtYmVyKSAmIGRyb3Bw
ZWRfYml0c19tYXNrOworICAgICAgICAgICAgICAgIG51bWJlciA+Pj0gb3ZlcmZsb3dfYml0c19j
b3VudDsKKyAgICAgICAgICAgICAgICBleHBvbmVudCA9IG92ZXJmbG93X2JpdHNfY291bnQ7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYm9vbCB6ZXJvX3RhaWwgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgICAgICsrY3Vy
cmVudDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gZW5kIHx8ICFpc0RpZ2l0
KCpjdXJyZW50LCByYWRpeCkpIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB6ZXJvX3RhaWwg
PSB6ZXJvX3RhaWwgJiYgKmN1cnJlbnQgPT0gJzAnOworICAgICAgICAgICAgICAgICAgICBleHBv
bmVudCArPSByYWRpeF9sb2dfMjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgaWYgKCFhbGxvd190cmFpbGluZ19qdW5rICYmIEFkdmFuY2VUb05v
bnNwYWNlKCZjdXJyZW50LCBlbmQpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqdW5r
X3N0cmluZ192YWx1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgaW50IG1pZGRsZV92YWx1ZSA9ICgxIDw8IChvdmVyZmxvd19iaXRzX2NvdW50
IC0gMSkpOworICAgICAgICAgICAgICAgIGlmIChkcm9wcGVkX2JpdHMgPiBtaWRkbGVfdmFsdWUp
IHsKKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyKys7ICAvLyBSb3VuZGluZyB1cC4KKyAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKGRyb3BwZWRfYml0cyA9PSBtaWRkbGVfdmFsdWUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gUm91bmRpbmcgdG8gZXZlbiB0byBjb25zaXN0ZW5jeSB3aXRo
IGRlY2ltYWxzOiBoYWxmLXdheSBjYXNlIHJvdW5kcworICAgICAgICAgICAgICAgICAgICAvLyB1
cCBpZiBzaWduaWZpY2FudCBwYXJ0IGlzIG9kZCBhbmQgZG93biBvdGhlcndpc2UuCisgICAgICAg
ICAgICAgICAgICAgIGlmICgobnVtYmVyICYgMSkgIT0gMCB8fCAhemVyb190YWlsKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBudW1iZXIrKzsgIC8vIFJvdW5kaW5nIHVwLgorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIC8vIFJvdW5kaW5nIHVwIG1heSBjYXVzZSBvdmVyZmxvdy4KKyAgICAgICAgICAg
ICAgICBpZiAoKG51bWJlciAmICgoaW50NjRfdCkxIDw8IDUzKSkgIT0gMCkgeworICAgICAgICAg
ICAgICAgICAgICBleHBvbmVudCsrOworICAgICAgICAgICAgICAgICAgICBudW1iZXIgPj49IDE7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgKytjdXJyZW50OworICAgICAgICB9IHdoaWxlIChjdXJyZW50ICE9IGVu
ZCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQobnVtYmVyIDwgKChpbnQ2NF90KTEgPDwgNTMp
KTsKKyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludDY0X3Q+KHN0YXRpY19jYXN0PGRvdWJs
ZT4obnVtYmVyKSkgPT0gbnVtYmVyKTsKKyAgICAgICAgCisgICAgICAgICp0cmFpbGluZ19wb2lu
dGVyID0gY3VycmVudDsKKyAgICAgICAgCisgICAgICAgIGlmIChleHBvbmVudCA9PSAwKSB7Cisg
ICAgICAgICAgICBpZiAoc2lnbikgeworICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT0gMCkg
cmV0dXJuIC0wLjA7CisgICAgICAgICAgICAgICAgbnVtYmVyID0gLW51bWJlcjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KG51bWJlcik7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFTU0VSVChudW1iZXIgIT0gMCk7CisgICAgICAg
IHJldHVybiBEb3VibGUoRGl5RnAobnVtYmVyLCBleHBvbmVudCkpLnZhbHVlKCk7CisgICAgfQor
ICAgIAorICAgIAorICAgIGRvdWJsZSBTdHJpbmdUb0RvdWJsZUNvbnZlcnRlcjo6U3RyaW5nVG9E
b3VibGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyKiBpbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50KSB7
CisgICAgICAgIGNvbnN0IGNoYXIqIGN1cnJlbnQgPSBpbnB1dDsKKyAgICAgICAgY29uc3QgY2hh
ciogZW5kID0gaW5wdXQgKyBsZW5ndGg7CisgICAgICAgIAorICAgICAgICAqcHJvY2Vzc2VkX2No
YXJhY3RlcnNfY291bnQgPSAwOworICAgICAgICAKKyAgICAgICAgY29uc3QgYm9vbCBhbGxvd190
cmFpbGluZ19qdW5rID0gKGZsYWdzXyAmIEFMTE9XX1RSQUlMSU5HX0pVTkspICE9IDA7CisgICAg
ICAgIGNvbnN0IGJvb2wgYWxsb3dfbGVhZGluZ19zcGFjZXMgPSAoZmxhZ3NfICYgQUxMT1dfTEVB
RElOR19TUEFDRVMpICE9IDA7CisgICAgICAgIGNvbnN0IGJvb2wgYWxsb3dfdHJhaWxpbmdfc3Bh
Y2VzID0gKGZsYWdzXyAmIEFMTE9XX1RSQUlMSU5HX1NQQUNFUykgIT0gMDsKKyAgICAgICAgY29u
c3QgYm9vbCBhbGxvd19zcGFjZXNfYWZ0ZXJfc2lnbiA9IChmbGFnc18gJiBBTExPV19TUEFDRVNf
QUZURVJfU0lHTikgIT0gMDsKKyAgICAgICAgCisgICAgICAgIC8vIFRvIG1ha2Ugc3VyZSB0aGF0
IGl0ZXJhdG9yIGRlcmVmZXJlbmNpbmcgaXMgdmFsaWQgdGhlIGZvbGxvd2luZworICAgICAgICAv
LyBjb252ZW50aW9uIGlzIHVzZWQ6CisgICAgICAgIC8vIDEuIEVhY2ggJysrY3VycmVudCcgc3Rh
dGVtZW50IGlzIGZvbGxvd2VkIGJ5IGNoZWNrIGZvciBlcXVhbGl0eSB0byAnZW5kJy4KKyAgICAg
ICAgLy8gMi4gSWYgQWR2YW5jZVRvTm9uc3BhY2UgcmV0dXJuZWQgZmFsc2UgdGhlbiBjdXJyZW50
ID09IGVuZC4KKyAgICAgICAgLy8gMy4gSWYgJ2N1cnJlbnQnIGJlY29tZXMgZXF1YWwgdG8gJ2Vu
ZCcgdGhlIGZ1bmN0aW9uIHJldHVybnMgb3IgZ29lcyB0bworICAgICAgICAvLyAncGFyc2luZ19k
b25lJy4KKyAgICAgICAgLy8gNC4gJ2N1cnJlbnQnIGlzIG5vdCBkZXJlZmVyZW5jZWQgYWZ0ZXIg
dGhlICdwYXJzaW5nX2RvbmUnIGxhYmVsLgorICAgICAgICAvLyA1LiBDb2RlIGJlZm9yZSAncGFy
c2luZ19kb25lJyBtYXkgcmVseSBvbiAnY3VycmVudCAhPSBlbmQnLgorICAgICAgICBpZiAoY3Vy
cmVudCA9PSBlbmQpIHJldHVybiBlbXB0eV9zdHJpbmdfdmFsdWVfOworICAgICAgICAKKyAgICAg
ICAgaWYgKGFsbG93X2xlYWRpbmdfc3BhY2VzIHx8IGFsbG93X3RyYWlsaW5nX3NwYWNlcykgewor
ICAgICAgICAgICAgaWYgKCFBZHZhbmNlVG9Ob25zcGFjZSgmY3VycmVudCwgZW5kKSkgeworICAg
ICAgICAgICAgICAgICpwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCA9IGN1cnJlbnQgLSBpbnB1
dDsKKyAgICAgICAgICAgICAgICByZXR1cm4gZW1wdHlfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICghYWxsb3dfbGVhZGluZ19zcGFjZXMgJiYgKGlucHV0ICE9
IGN1cnJlbnQpKSB7CisgICAgICAgICAgICAgICAgLy8gTm8gbGVhZGluZyBzcGFjZXMgYWxsb3dl
ZCwgYnV0IEFkdmFuY2VUb05vbnNwYWNlIG1vdmVkIGZvcndhcmQuCisgICAgICAgICAgICAgICAg
cmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgLy8gVGhlIGxvbmdlc3QgZm9ybSBvZiBzaW1wbGlmaWVkIG51bWJlciBp
czogIi08c2lnbmlmaWNhbnQgZGlnaXRzPi4xZVhYWFwwIi4KKyAgICAgICAgY29uc3QgaW50IGtC
dWZmZXJTaXplID0ga01heFNpZ25pZmljYW50RGlnaXRzICsgMTA7CisgICAgICAgIGNoYXIgYnVm
ZmVyW2tCdWZmZXJTaXplXTsgIC8vIE5PTElOVDogc2l6ZSBpcyBrbm93biBhdCBjb21waWxlIHRp
bWUuCisgICAgICAgIGludCBidWZmZXJfcG9zID0gMDsKKyAgICAgICAgCisgICAgICAgIC8vIEV4
cG9uZW50IHdpbGwgYmUgYWRqdXN0ZWQgaWYgaW5zaWduaWZpY2FudCBkaWdpdHMgb2YgdGhlIGlu
dGVnZXIgcGFydAorICAgICAgICAvLyBvciBpbnNpZ25pZmljYW50IGxlYWRpbmcgemVyb3Mgb2Yg
dGhlIGZyYWN0aW9uYWwgcGFydCBhcmUgZHJvcHBlZC4KKyAgICAgICAgaW50IGV4cG9uZW50ID0g
MDsKKyAgICAgICAgaW50IHNpZ25pZmljYW50X2RpZ2l0cyA9IDA7CisgICAgICAgIGludCBpbnNp
Z25pZmljYW50X2RpZ2l0cyA9IDA7CisgICAgICAgIGJvb2wgbm9uemVyb19kaWdpdF9kcm9wcGVk
ID0gZmFsc2U7CisgICAgICAgIGJvb2wgZnJhY3Rpb25hbF9wYXJ0ID0gZmFsc2U7CisgICAgICAg
IAorICAgICAgICBib29sIHNpZ24gPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmICgqY3Vy
cmVudCA9PSAnKycgfHwgKmN1cnJlbnQgPT0gJy0nKSB7CisgICAgICAgICAgICBzaWduID0gKCpj
dXJyZW50ID09ICctJyk7CisgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgICAgICBjb25z
dCBjaGFyKiBuZXh0X25vbl9zcGFjZSA9IGN1cnJlbnQ7CisgICAgICAgICAgICAvLyBTa2lwIGZv
bGxvd2luZyBzcGFjZXMgKGlmIGFsbG93ZWQpLgorICAgICAgICAgICAgaWYgKCFBZHZhbmNlVG9O
b25zcGFjZSgmbmV4dF9ub25fc3BhY2UsIGVuZCkpIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87
CisgICAgICAgICAgICBpZiAoIWFsbG93X3NwYWNlc19hZnRlcl9zaWduICYmIChjdXJyZW50ICE9
IG5leHRfbm9uX3NwYWNlKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192
YWx1ZV87CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjdXJyZW50ID0gbmV4dF9ub25fc3Bh
Y2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChpbmZpbml0eV9zeW1ib2xfICE9
IE5VTEwpIHsKKyAgICAgICAgICAgIGlmICgqY3VycmVudCA9PSBpbmZpbml0eV9zeW1ib2xfWzBd
KSB7CisgICAgICAgICAgICAgICAgaWYgKCFDb25zdW1lU3ViU3RyaW5nKCZjdXJyZW50LCBlbmQs
IGluZmluaXR5X3N5bWJvbF8pKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0
cmluZ192YWx1ZV87CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGlmICghKGFsbG93X3RyYWlsaW5nX3NwYWNlcyB8fCBhbGxvd190cmFpbGluZ19q
dW5rKSAmJiAoY3VycmVudCAhPSBlbmQpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBq
dW5rX3N0cmluZ192YWx1ZV87CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm
ICghYWxsb3dfdHJhaWxpbmdfanVuayAmJiBBZHZhbmNlVG9Ob25zcGFjZSgmY3VycmVudCwgZW5k
KSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBBU1NFUlQo
YnVmZmVyX3BvcyA9PSAwKTsKKyAgICAgICAgICAgICAgICAqcHJvY2Vzc2VkX2NoYXJhY3RlcnNf
Y291bnQgPSBjdXJyZW50IC0gaW5wdXQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNpZ24gPyAt
RG91YmxlOjpJbmZpbml0eSgpIDogRG91YmxlOjpJbmZpbml0eSgpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobmFuX3N5bWJvbF8gIT0gTlVMTCkgewor
ICAgICAgICAgICAgaWYgKCpjdXJyZW50ID09IG5hbl9zeW1ib2xfWzBdKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCFDb25zdW1lU3ViU3RyaW5nKCZjdXJyZW50LCBlbmQsIG5hbl9zeW1ib2xfKSkg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIShhbGxv
d190cmFpbGluZ19zcGFjZXMgfHwgYWxsb3dfdHJhaWxpbmdfanVuaykgJiYgKGN1cnJlbnQgIT0g
ZW5kKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWFsbG93X3RyYWlsaW5nX2p1
bmsgJiYgQWR2YW5jZVRvTm9uc3BhY2UoJmN1cnJlbnQsIGVuZCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQVNTRVJUKGJ1ZmZlcl9wb3MgPT0gMCk7Cisg
ICAgICAgICAgICAgICAgKnByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50ID0gY3VycmVudCAtIGlu
cHV0OworICAgICAgICAgICAgICAgIHJldHVybiBzaWduID8gLURvdWJsZTo6TmFOKCkgOiBEb3Vi
bGU6Ok5hTigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBi
b29sIGxlYWRpbmdfemVybyA9IGZhbHNlOworICAgICAgICBpZiAoKmN1cnJlbnQgPT0gJzAnKSB7
CisgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQp
IHsKKyAgICAgICAgICAgICAgICAqcHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291bnQgPSBjdXJyZW50
IC0gaW5wdXQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNpZ25lZFplcm8oc2lnbik7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGxlYWRpbmdfemVybyA9IHRydWU7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEl0IGNvdWxkIGJlIGhleGFkZWNpbWFsIHZh
bHVlLgorICAgICAgICAgICAgaWYgKChmbGFnc18gJiBBTExPV19IRVgpICYmICgqY3VycmVudCA9
PSAneCcgfHwgKmN1cnJlbnQgPT0gJ1gnKSkgeworICAgICAgICAgICAgICAgICsrY3VycmVudDsK
KyAgICAgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQgfHwgIWlzRGlnaXQoKmN1cnJlbnQs
IDE2KSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOyAg
Ly8gIjB4Ii4KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciogdGFpbF9wb2ludGVyID0gTlVMTDsKKyAgICAgICAgICAgICAgICBk
b3VibGUgcmVzdWx0ID0gUmFkaXhTdHJpbmdUb0RvdWJsZTw0PihjdXJyZW50LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFs
bG93X3RyYWlsaW5nX2p1bmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAganVua19zdHJpbmdfdmFsdWVfLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0YWlsX3BvaW50ZXIpOworICAg
ICAgICAgICAgICAgIGlmICh0YWlsX3BvaW50ZXIgIT0gTlVMTCkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoYWxsb3dfdHJhaWxpbmdfc3BhY2VzKSBBZHZhbmNlVG9Ob25zcGFjZSgmdGFpbF9w
b2ludGVyLCBlbmQpOworICAgICAgICAgICAgICAgICAgICAqcHJvY2Vzc2VkX2NoYXJhY3RlcnNf
Y291bnQgPSB0YWlsX3BvaW50ZXIgLSBpbnB1dDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgLy8gSWdub3JlIGxlYWRpbmcgemVyb3MgaW4gdGhlIGludGVnZXIgcGFydC4KKyAg
ICAgICAgICAgIHdoaWxlICgqY3VycmVudCA9PSAnMCcpIHsKKyAgICAgICAgICAgICAgICArK2N1
cnJlbnQ7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gZW5kKSB7CisgICAgICAgICAg
ICAgICAgICAgICpwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCA9IGN1cnJlbnQgLSBpbnB1dDsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNpZ25lZFplcm8oc2lnbik7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29s
IG9jdGFsID0gbGVhZGluZ196ZXJvICYmIChmbGFnc18gJiBBTExPV19PQ1RBTFMpICE9IDA7Cisg
ICAgICAgIAorICAgICAgICAvLyBDb3B5IHNpZ25pZmljYW50IGRpZ2l0cyBvZiB0aGUgaW50ZWdl
ciBwYXJ0IChpZiBhbnkpIHRvIHRoZSBidWZmZXIuCisgICAgICAgIHdoaWxlICgqY3VycmVudCA+
PSAnMCcgJiYgKmN1cnJlbnQgPD0gJzknKSB7CisgICAgICAgICAgICBpZiAoc2lnbmlmaWNhbnRf
ZGlnaXRzIDwga01heFNpZ25pZmljYW50RGlnaXRzKSB7CisgICAgICAgICAgICAgICAgQVNTRVJU
KGJ1ZmZlcl9wb3MgPCBrQnVmZmVyU2l6ZSk7CisgICAgICAgICAgICAgICAgYnVmZmVyW2J1ZmZl
cl9wb3MrK10gPSBzdGF0aWNfY2FzdDxjaGFyPigqY3VycmVudCk7CisgICAgICAgICAgICAgICAg
c2lnbmlmaWNhbnRfZGlnaXRzKys7CisgICAgICAgICAgICAgICAgLy8gV2lsbCBsYXRlciBjaGVj
ayBpZiBpdCdzIGFuIG9jdGFsIGluIHRoZSBidWZmZXIuCisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIGluc2lnbmlmaWNhbnRfZGlnaXRzKys7ICAvLyBNb3ZlIHRoZSBkaWdp
dCBpbnRvIHRoZSBleHBvbmVudGlhbCBwYXJ0LgorICAgICAgICAgICAgICAgIG5vbnplcm9fZGln
aXRfZHJvcHBlZCA9IG5vbnplcm9fZGlnaXRfZHJvcHBlZCB8fCAqY3VycmVudCAhPSAnMCc7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBvY3RhbCA9IG9jdGFsICYmICpjdXJyZW50IDwgJzgn
OworICAgICAgICAgICAgKytjdXJyZW50OworICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gZW5k
KSBnb3RvIHBhcnNpbmdfZG9uZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHNp
Z25pZmljYW50X2RpZ2l0cyA9PSAwKSB7CisgICAgICAgICAgICBvY3RhbCA9IGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoKmN1cnJlbnQgPT0gJy4nKSB7CisgICAgICAg
ICAgICBpZiAob2N0YWwgJiYgIWFsbG93X3RyYWlsaW5nX2p1bmspIHJldHVybiBqdW5rX3N0cmlu
Z192YWx1ZV87CisgICAgICAgICAgICBpZiAob2N0YWwpIGdvdG8gcGFyc2luZ19kb25lOworICAg
ICAgICAgICAgCisgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgICAgICBpZiAoY3VycmVu
dCA9PSBlbmQpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2lnbmlmaWNhbnRfZGlnaXRzID09IDAg
JiYgIWxlYWRpbmdfemVybykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJp
bmdfdmFsdWVfOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IGdvdG8gcGFyc2luZ19kb25lOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHNpZ25pZmljYW50X2RpZ2l0cyA9PSAwKSB7Cisg
ICAgICAgICAgICAgICAgLy8gb2N0YWwgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAvLyBJbnRl
Z2VyIHBhcnQgY29uc2lzdHMgb2YgMCBvciBpcyBhYnNlbnQuIFNpZ25pZmljYW50IGRpZ2l0cyBz
dGFydCBhZnRlcgorICAgICAgICAgICAgICAgIC8vIGxlYWRpbmcgemVyb3MgKGlmIGFueSkuCisg
ICAgICAgICAgICAgICAgd2hpbGUgKCpjdXJyZW50ID09ICcwJykgeworICAgICAgICAgICAgICAg
ICAgICArK2N1cnJlbnQ7CisgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ID09IGVuZCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgKnByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50ID0g
Y3VycmVudCAtIGlucHV0OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNpZ25lZFpl
cm8oc2lnbik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZXhw
b25lbnQtLTsgIC8vIE1vdmUgdGhpcyAwIGludG8gdGhlIGV4cG9uZW50LgorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gV2UgZG9u
J3QgZW1pdCBhICcuJywgYnV0IGFkanVzdCB0aGUgZXhwb25lbnQgaW5zdGVhZC4KKyAgICAgICAg
ICAgIGZyYWN0aW9uYWxfcGFydCA9IHRydWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8v
IFRoZXJlIGlzIGEgZnJhY3Rpb25hbCBwYXJ0LgorICAgICAgICAgICAgd2hpbGUgKCpjdXJyZW50
ID49ICcwJyAmJiAqY3VycmVudCA8PSAnOScpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2lnbmlm
aWNhbnRfZGlnaXRzIDwga01heFNpZ25pZmljYW50RGlnaXRzKSB7CisgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChidWZmZXJfcG9zIDwga0J1ZmZlclNpemUpOworICAgICAgICAgICAgICAgICAg
ICBidWZmZXJbYnVmZmVyX3BvcysrXSA9IHN0YXRpY19jYXN0PGNoYXI+KCpjdXJyZW50KTsKKyAg
ICAgICAgICAgICAgICAgICAgc2lnbmlmaWNhbnRfZGlnaXRzKys7CisgICAgICAgICAgICAgICAg
ICAgIGV4cG9uZW50LS07CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gSWdub3JlIGluc2lnbmlmaWNhbnQgZGlnaXRzIGluIHRoZSBmcmFjdGlvbmFsIHBh
cnQuCisgICAgICAgICAgICAgICAgICAgIG5vbnplcm9fZGlnaXRfZHJvcHBlZCA9IG5vbnplcm9f
ZGlnaXRfZHJvcHBlZCB8fCAqY3VycmVudCAhPSAnMCc7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICsrY3VycmVudDsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBl
bmQpIGdvdG8gcGFyc2luZ19kb25lOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBpZiAoIWxlYWRpbmdfemVybyAmJiBleHBvbmVudCA9PSAwICYmIHNpZ25pZmlj
YW50X2RpZ2l0cyA9PSAwKSB7CisgICAgICAgICAgICAvLyBJZiBsZWFkaW5nX3plcm9zIGlzIHRy
dWUgdGhlbiB0aGUgc3RyaW5nIGNvbnRhaW5zIHplcm9zLgorICAgICAgICAgICAgLy8gSWYgZXhw
b25lbnQgPCAwIHRoZW4gc3RyaW5nIHdhcyBbKy1dXC4wKi4uLgorICAgICAgICAgICAgLy8gSWYg
c2lnbmlmaWNhbnRfZGlnaXRzICE9IDAgdGhlIHN0cmluZyBpcyBub3QgZXF1YWwgdG8gMC4KKyAg
ICAgICAgICAgIC8vIE90aGVyd2lzZSB0aGVyZSBhcmUgbm8gZGlnaXRzIGluIHRoZSBzdHJpbmcu
CisgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICAvLyBQYXJzZSBleHBvbmVudGlhbCBwYXJ0LgorICAgICAgICBpZiAoKmN1
cnJlbnQgPT0gJ2UnIHx8ICpjdXJyZW50ID09ICdFJykgeworICAgICAgICAgICAgaWYgKG9jdGFs
ICYmICFhbGxvd190cmFpbGluZ19qdW5rKSByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAg
ICAgICAgICAgaWYgKG9jdGFsKSBnb3RvIHBhcnNpbmdfZG9uZTsKKyAgICAgICAgICAgICsrY3Vy
cmVudDsKKyAgICAgICAgICAgIGlmIChjdXJyZW50ID09IGVuZCkgeworICAgICAgICAgICAgICAg
IGlmIChhbGxvd190cmFpbGluZ19qdW5rKSB7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gcGFy
c2luZ19kb25lOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgY2hhciBzaWduID0gJysnOworICAgICAgICAgICAgaWYgKCpjdXJy
ZW50ID09ICcrJyB8fCAqY3VycmVudCA9PSAnLScpIHsKKyAgICAgICAgICAgICAgICBzaWduID0g
c3RhdGljX2Nhc3Q8Y2hhcj4oKmN1cnJlbnQpOworICAgICAgICAgICAgICAgICsrY3VycmVudDsK
KyAgICAgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGFsbG93X3RyYWlsaW5nX2p1bmspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdv
dG8gcGFyc2luZ19kb25lOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gZW5kIHx8ICpjdXJyZW50IDwgJzAnIHx8ICpjdXJy
ZW50ID4gJzknKSB7CisgICAgICAgICAgICAgICAgaWYgKGFsbG93X3RyYWlsaW5nX2p1bmspIHsK
KyAgICAgICAgICAgICAgICAgICAgZ290byBwYXJzaW5nX2RvbmU7CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSBJTlRfTUFYIC8gMjsKKyAgICAgICAgICAgIEFT
U0VSVCgtbWF4X2V4cG9uZW50IC8gMiA8PSBleHBvbmVudCAmJiBleHBvbmVudCA8PSBtYXhfZXhw
b25lbnQgLyAyKTsKKyAgICAgICAgICAgIGludCBudW0gPSAwOworICAgICAgICAgICAgZG8gewor
ICAgICAgICAgICAgICAgIC8vIENoZWNrIG92ZXJmbG93LgorICAgICAgICAgICAgICAgIGludCBk
aWdpdCA9ICpjdXJyZW50IC0gJzAnOworICAgICAgICAgICAgICAgIGlmIChudW0gPj0gbWF4X2V4
cG9uZW50IC8gMTAKKyAgICAgICAgICAgICAgICAgICAgJiYgIShudW0gPT0gbWF4X2V4cG9uZW50
IC8gMTAgJiYgZGlnaXQgPD0gbWF4X2V4cG9uZW50ICUgMTApKSB7CisgICAgICAgICAgICAgICAg
ICAgIG51bSA9IG1heF9leHBvbmVudDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBudW0gPSBudW0gKiAxMCArIGRpZ2l0OworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgICAgICB9IHdoaWxlIChjdXJyZW50
ICE9IGVuZCAmJiAqY3VycmVudCA+PSAnMCcgJiYgKmN1cnJlbnQgPD0gJzknKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgZXhwb25lbnQgKz0gKHNpZ24gPT0gJy0nID8gLW51bSA6IG51bSk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghKGFsbG93X3RyYWlsaW5nX3NwYWNl
cyB8fCBhbGxvd190cmFpbGluZ19qdW5rKSAmJiAoY3VycmVudCAhPSBlbmQpKSB7CisgICAgICAg
ICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAgICB9CisgICAgICAgIGlmICgh
YWxsb3dfdHJhaWxpbmdfanVuayAmJiBBZHZhbmNlVG9Ob25zcGFjZSgmY3VycmVudCwgZW5kKSkg
eworICAgICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoYWxsb3dfdHJhaWxpbmdfc3BhY2VzKSB7CisgICAgICAgICAgICBBZHZhbmNlVG9O
b25zcGFjZSgmY3VycmVudCwgZW5kKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBwYXJzaW5n
X2RvbmU6CisgICAgICAgIGV4cG9uZW50ICs9IGluc2lnbmlmaWNhbnRfZGlnaXRzOworICAgICAg
ICAKKyAgICAgICAgaWYgKG9jdGFsKSB7CisgICAgICAgICAgICBkb3VibGUgcmVzdWx0OworICAg
ICAgICAgICAgY29uc3QgY2hhciogdGFpbF9wb2ludGVyID0gTlVMTDsKKyAgICAgICAgICAgIHJl
c3VsdCA9IFJhZGl4U3RyaW5nVG9Eb3VibGU8Mz4oYnVmZmVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKyBidWZmZXJfcG9zLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd190cmFpbGluZ19qdW5rLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdW5rX3N0cmluZ192YWx1ZV8s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0YWlsX3BvaW50
ZXIpOworICAgICAgICAgICAgQVNTRVJUKHRhaWxfcG9pbnRlciAhPSBOVUxMKTsKKyAgICAgICAg
ICAgICpwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCA9IGN1cnJlbnQgLSBpbnB1dDsKKyAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChu
b256ZXJvX2RpZ2l0X2Ryb3BwZWQpIHsKKyAgICAgICAgICAgIGJ1ZmZlcltidWZmZXJfcG9zKytd
ID0gJzEnOworICAgICAgICAgICAgZXhwb25lbnQtLTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgQVNTRVJUKGJ1ZmZlcl9wb3MgPCBrQnVmZmVyU2l6ZSk7CisgICAgICAgIGJ1ZmZlclti
dWZmZXJfcG9zXSA9ICdcMCc7CisgICAgICAgIAorICAgICAgICBkb3VibGUgY29udmVydGVkID0g
U3RydG9kKFZlY3Rvcjxjb25zdCBjaGFyPihidWZmZXIsIGJ1ZmZlcl9wb3MpLCBleHBvbmVudCk7
CisgICAgICAgICpwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCA9IGN1cnJlbnQgLSBpbnB1dDsK
KyAgICAgICAgcmV0dXJuIHNpZ24/IC1jb252ZXJ0ZWQ6IGNvbnZlcnRlZDsKKyAgICB9CisgICAg
Cit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KKworfSAvLyBuYW1lc3BhY2UgV1RG
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZG91YmxlLWNvbnZl
cnNpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kb3VibGUtY29udmVyc2lv
bi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjRkNmZjMmY1NzQzNmJmYzA3ZTcyYmY2MDU2MzI5ZDE4ZjdmNjdiZWMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZG91Ymxl
LWNvbnZlcnNpb24uaApAQCAtMCwwICsxLDUwMiBAQAorLy8gQ29weXJpZ2h0IDIwMTAgdGhlIFY4
IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8v
CisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisjaWZuZGVmIERPVUJMRV9DT05WRVJTSU9OX0RPVUJMRV9DT05WRVJTSU9OX0hfCisjZGVm
aW5lIERPVUJMRV9DT05WRVJTSU9OX0RPVUJMRV9DT05WRVJTSU9OX0hfCisKKyNpbmNsdWRlICJ1
dGlscy5oIgorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9u
IHsKKyAgICAKKyAgICBjbGFzcyBEb3VibGVUb1N0cmluZ0NvbnZlcnRlciB7CisgICAgcHVibGlj
OgorICAgICAgICAvLyBXaGVuIGNhbGxpbmcgVG9GaXhlZCB3aXRoIGEgZG91YmxlID4gMTBea01h
eEZpeGVkRGlnaXRzQmVmb3JlUG9pbnQKKyAgICAgICAgLy8gb3IgYSByZXF1ZXN0ZWRfZGlnaXRz
IHBhcmFtZXRlciA+IGtNYXhGaXhlZERpZ2l0c0FmdGVyUG9pbnQgdGhlbiB0aGUKKyAgICAgICAg
Ly8gZnVuY3Rpb24gcmV0dXJucyBmYWxzZS4KKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBrTWF4
Rml4ZWREaWdpdHNCZWZvcmVQb2ludCA9IDYwOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtN
YXhGaXhlZERpZ2l0c0FmdGVyUG9pbnQgPSA2MDsKKyAgICAgICAgCisgICAgICAgIC8vIFdoZW4g
Y2FsbGluZyBUb0V4cG9uZW50aWFsIHdpdGggYSByZXF1ZXN0ZWRfZGlnaXRzCisgICAgICAgIC8v
IHBhcmFtZXRlciA+IGtNYXhFeHBvbmVudGlhbERpZ2l0cyB0aGVuIHRoZSBmdW5jdGlvbiByZXR1
cm5zIGZhbHNlLgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtNYXhFeHBvbmVudGlhbERpZ2l0
cyA9IDEyMDsKKyAgICAgICAgCisgICAgICAgIC8vIFdoZW4gY2FsbGluZyBUb1ByZWNpc2lvbiB3
aXRoIGEgcmVxdWVzdGVkX2RpZ2l0cworICAgICAgICAvLyBwYXJhbWV0ZXIgPCBrTWluUHJlY2lz
aW9uRGlnaXRzIG9yIHJlcXVlc3RlZF9kaWdpdHMgPiBrTWF4UHJlY2lzaW9uRGlnaXRzCisgICAg
ICAgIC8vIHRoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UuCisgICAgICAgIHN0YXRpYyBj
b25zdCBpbnQga01pblByZWNpc2lvbkRpZ2l0cyA9IDE7CisgICAgICAgIHN0YXRpYyBjb25zdCBp
bnQga01heFByZWNpc2lvbkRpZ2l0cyA9IDEyMDsKKyAgICAgICAgCisgICAgICAgIGVudW0gRmxh
Z3MgeworICAgICAgICAgICAgTk9fRkxBR1MgPSAwLAorICAgICAgICAgICAgRU1JVF9QT1NJVElW
RV9FWFBPTkVOVF9TSUdOID0gMSwKKyAgICAgICAgICAgIEVNSVRfVFJBSUxJTkdfREVDSU1BTF9Q
T0lOVCA9IDIsCisgICAgICAgICAgICBFTUlUX1RSQUlMSU5HX1pFUk9fQUZURVJfUE9JTlQgPSA0
LAorICAgICAgICAgICAgVU5JUVVFX1pFUk8gPSA4CisgICAgICAgIH07CisgICAgICAgIAorICAg
ICAgICAvLyBGbGFncyBzaG91bGQgYmUgYSBiaXQtb3IgY29tYmluYXRpb24gb2YgdGhlIHBvc3Np
YmxlIEZsYWdzLWVudW0uCisgICAgICAgIC8vICAtIE5PX0ZMQUdTOiBubyBzcGVjaWFsIGZsYWdz
LgorICAgICAgICAvLyAgLSBFTUlUX1BPU0lUSVZFX0VYUE9ORU5UX1NJR046IHdoZW4gdGhlIG51
bWJlciBpcyBjb252ZXJ0ZWQgaW50byBleHBvbmVudAorICAgICAgICAvLyAgICBmb3JtLCBlbWl0
cyBhICcrJyBmb3IgcG9zaXRpdmUgZXhwb25lbnRzLiBFeGFtcGxlOiAxLjJlKzIuCisgICAgICAg
IC8vICAtIEVNSVRfVFJBSUxJTkdfREVDSU1BTF9QT0lOVDogd2hlbiB0aGUgaW5wdXQgbnVtYmVy
IGlzIGFuIGludGVnZXIgYW5kIGlzCisgICAgICAgIC8vICAgIGNvbnZlcnRlZCBpbnRvIGRlY2lt
YWwgZm9ybWF0IHRoZW4gYSB0cmFpbGluZyBkZWNpbWFsIHBvaW50IGlzIGFwcGVuZGVkLgorICAg
ICAgICAvLyAgICBFeGFtcGxlOiAyMzQ1LjAgaXMgY29udmVydGVkIHRvICIyMzQ1LiIuCisgICAg
ICAgIC8vICAtIEVNSVRfVFJBSUxJTkdfWkVST19BRlRFUl9QT0lOVDogaW4gYWRkaXRpb24gdG8g
YSB0cmFpbGluZyBkZWNpbWFsIHBvaW50CisgICAgICAgIC8vICAgIGVtaXRzIGEgdHJhaWxpbmcg
JzAnLWNoYXJhY3Rlci4gVGhpcyBmbGFnIHJlcXVpcmVzIHRoZQorICAgICAgICAvLyAgICBFWE1J
VF9UUkFJTElOR19ERUNJTUFMX1BPSU5UIGZsYWcuCisgICAgICAgIC8vICAgIEV4YW1wbGU6IDIz
NDUuMCBpcyBjb252ZXJ0ZWQgdG8gIjIzNDUuMCIuCisgICAgICAgIC8vICAtIFVOSVFVRV9aRVJP
OiAiLTAuMCIgaXMgY29udmVydGVkIHRvICIwLjAiLgorICAgICAgICAvLworICAgICAgICAvLyBJ
bmZpbml0eSBzeW1ib2wgYW5kIG5hbl9zeW1ib2wgcHJvdmlkZSB0aGUgc3RyaW5nIHJlcHJlc2Vu
dGF0aW9uIGZvciB0aGVzZQorICAgICAgICAvLyBzcGVjaWFsIHZhbHVlcy4gSWYgdGhlIHN0cmlu
ZyBpcyBOVUxMIGFuZCB0aGUgc3BlY2lhbCB2YWx1ZSBpcyBlbmNvdW50ZXJlZAorICAgICAgICAv
LyB0aGVuIHRoZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyByZXR1cm4gZmFsc2UuCisgICAgICAgIC8v
CisgICAgICAgIC8vIFRoZSBleHBvbmVudF9jaGFyYWN0ZXIgaXMgdXNlZCBpbiBleHBvbmVudGlh
bCByZXByZXNlbnRhdGlvbnMuIEl0IGlzCisgICAgICAgIC8vIHVzdWFsbHkgJ2UnIG9yICdFJy4K
KyAgICAgICAgLy8KKyAgICAgICAgLy8gV2hlbiBjb252ZXJ0aW5nIHRvIHRoZSBzaG9ydGVzdCBy
ZXByZXNlbnRhdGlvbiB0aGUgY29udmVydGVyIHdpbGwKKyAgICAgICAgLy8gcmVwcmVzZW50IGlu
cHV0IG51bWJlcnMgaW4gZGVjaW1hbCBmb3JtYXQgaWYgdGhleSBhcmUgaW4gdGhlIGludGVydmFs
CisgICAgICAgIC8vIFsxMF5kZWNpbWFsX2luX3Nob3J0ZXN0X2xvdzsgMTBeZGVjaW1hbF9pbl9z
aG9ydGVzdF9oaWdoWworICAgICAgICAvLyAgICAobG93ZXIgYm91bmRhcnkgaW5jbHVkZWQsIGdy
ZWF0ZXIgYm91bmRhcnkgZXhjbHVkZWQpLgorICAgICAgICAvLyBFeGFtcGxlOiB3aXRoIGRlY2lt
YWxfaW5fc2hvcnRlc3RfbG93ID0gLTYgYW5kCisgICAgICAgIC8vICAgICAgICAgICAgICAgZGVj
aW1hbF9pbl9zaG9ydGVzdF9oaWdoID0gMjE6CisgICAgICAgIC8vICAgVG9TaG9ydGVzdCgwLjAw
MDAwMSkgIC0+ICIwLjAwMDAwMSIKKyAgICAgICAgLy8gICBUb1Nob3J0ZXN0KDAuMDAwMDAwMSkg
LT4gIjFlLTciCisgICAgICAgIC8vICAgVG9TaG9ydGVzdCgxMTExMTExMTExMTExMTExMTExMTEu
MCkgIC0+ICIxMTExMTExMTExMTExMTExMTAwMDAiCisgICAgICAgIC8vICAgVG9TaG9ydGVzdCgx
MDAwMDAwMDAwMDAwMDAwMDAwMDAuMCkgIC0+ICIxMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisgICAg
ICAgIC8vICAgVG9TaG9ydGVzdCgxMTExMTExMTExMTExMTExMTExMTExLjApIC0+ICIxLjExMTEx
MTExMTExMTExMTFlKzIxIgorICAgICAgICAvLworICAgICAgICAvLyBXaGVuIGNvbnZlcnRpbmcg
dG8gcHJlY2lzaW9uIG1vZGUgdGhlIGNvbnZlcnRlciBtYXkgYWRkCisgICAgICAgIC8vIG1heF9s
ZWFkaW5nX3BhZGRpbmdfemVyb2VzIGJlZm9yZSByZXR1cm5pbmcgdGhlIG51bWJlciBpbiBleHBv
bmVudGlhbAorICAgICAgICAvLyBmb3JtYXQuCisgICAgICAgIC8vIEV4YW1wbGUgd2l0aCBtYXhf
bGVhZGluZ19wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZSA9IDYuCisgICAgICAgIC8v
ICAgVG9QcmVjaXNpb24oMC4wMDAwMDEyMzQ1LCAyKSAtPiAiMC4wMDAwMDEyIgorICAgICAgICAv
LyAgIFRvUHJlY2lzaW9uKDAuMDAwMDAwMTIzNDUsIDIpIC0+ICIxLjJlLTciCisgICAgICAgIC8v
IFNpbWlsYXJpbHkgdGhlIGNvbnZlcnRlciBtYXkgYWRkIHVwIHRvCisgICAgICAgIC8vIG1heF90
cmFpbGluZ19wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZSBpbiBwcmVjaXNpb24gbW9k
ZSB0byBhdm9pZAorICAgICAgICAvLyByZXR1cm5pbmcgYW4gZXhwb25lbnRpYWwgcmVwcmVzZW50
YXRpb24uIEEgemVybyBhZGRlZCBieSB0aGUKKyAgICAgICAgLy8gRU1JVF9UUkFJTElOR19aRVJP
X0FGVEVSX1BPSU5UIGZsYWcgaXMgY291bnRlZCBmb3IgdGhpcyBsaW1pdC4KKyAgICAgICAgLy8g
RXhhbXBsZXMgZm9yIG1heF90cmFpbGluZ19wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9k
ZSA9IDE6CisgICAgICAgIC8vICAgVG9QcmVjaXNpb24oMjMwLjAsIDIpIC0+ICIyMzAiCisgICAg
ICAgIC8vICAgVG9QcmVjaXNpb24oMjMwLjAsIDIpIC0+ICIyMzAuIiAgd2l0aCBFTUlUX1RSQUlM
SU5HX0RFQ0lNQUxfUE9JTlQuCisgICAgICAgIC8vICAgVG9QcmVjaXNpb24oMjMwLjAsIDIpIC0+
ICIyLjNlMiIgd2l0aCBFTUlUX1RSQUlMSU5HX1pFUk9fQUZURVJfUE9JTlQuCisgICAgICAgIERv
dWJsZVRvU3RyaW5nQ29udmVydGVyKGludCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciogaW5maW5pdHlfc3ltYm9sLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyKiBuYW5fc3ltYm9sLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyIGV4cG9uZW50X2NoYXJhY3RlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGRlY2ltYWxfaW5fc2hvcnRlc3RfbG93LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgZGVjaW1hbF9pbl9zaG9ydGVzdF9oaWdoLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWF4X2xlYWRpbmdfcGFkZGluZ196ZXJvZXNf
aW5fcHJlY2lzaW9uX21vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBt
YXhfdHJhaWxpbmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGUpCisgICAgICAgIDog
ZmxhZ3NfKGZsYWdzKSwKKyAgICAgICAgaW5maW5pdHlfc3ltYm9sXyhpbmZpbml0eV9zeW1ib2wp
LAorICAgICAgICBuYW5fc3ltYm9sXyhuYW5fc3ltYm9sKSwKKyAgICAgICAgZXhwb25lbnRfY2hh
cmFjdGVyXyhleHBvbmVudF9jaGFyYWN0ZXIpLAorICAgICAgICBkZWNpbWFsX2luX3Nob3J0ZXN0
X2xvd18oZGVjaW1hbF9pbl9zaG9ydGVzdF9sb3cpLAorICAgICAgICBkZWNpbWFsX2luX3Nob3J0
ZXN0X2hpZ2hfKGRlY2ltYWxfaW5fc2hvcnRlc3RfaGlnaCksCisgICAgICAgIG1heF9sZWFkaW5n
X3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2RlXygKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9sZWFkaW5nX3BhZGRpbmdfemVy
b2VzX2luX3ByZWNpc2lvbl9tb2RlKSwKKyAgICAgICAgbWF4X3RyYWlsaW5nX3BhZGRpbmdfemVy
b2VzX2luX3ByZWNpc2lvbl9tb2RlXygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtYXhfdHJhaWxpbmdfcGFkZGluZ196ZXJvZXNfaW5fcHJl
Y2lzaW9uX21vZGUpIHsKKyAgICAgICAgICAgIC8vIFdoZW4gJ3RyYWlsaW5nIHplcm8gYWZ0ZXIg
dGhlIHBvaW50JyBpcyBzZXQsIHRoZW4gJ3RyYWlsaW5nIHBvaW50JworICAgICAgICAgICAgLy8g
bXVzdCBiZSBzZXQgdG9vLgorICAgICAgICAgICAgQVNTRVJUKCgoZmxhZ3MgJiBFTUlUX1RSQUlM
SU5HX0RFQ0lNQUxfUE9JTlQpICE9IDApIHx8CisgICAgICAgICAgICAgICAgICAgISgoZmxhZ3Mg
JiBFTUlUX1RSQUlMSU5HX1pFUk9fQUZURVJfUE9JTlQpICE9IDApKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgLy8gUmV0dXJucyBhIGNvbnZlcnRlciBmb2xsb3dpbmcgdGhlIEVjbWFT
Y3JpcHQgc3BlY2lmaWNhdGlvbi4KKyAgICAgICAgc3RhdGljIGNvbnN0IERvdWJsZVRvU3RyaW5n
Q29udmVydGVyJiBFY21hU2NyaXB0Q29udmVydGVyKCk7CisgICAgICAgIAorICAgICAgICAvLyBD
b21wdXRlcyB0aGUgc2hvcnRlc3Qgc3RyaW5nIG9mIGRpZ2l0cyB0aGF0IGNvcnJlY3RseSByZXBy
ZXNlbnQgdGhlIGlucHV0CisgICAgICAgIC8vIG51bWJlci4gRGVwZW5kaW5nIG9uIGRlY2ltYWxf
aW5fc2hvcnRlc3RfbG93IGFuZCBkZWNpbWFsX2luX3Nob3J0ZXN0X2hpZ2gKKyAgICAgICAgLy8g
KHNlZSBjb25zdHJ1Y3RvcikgaXQgdGhlbiBlaXRoZXIgcmV0dXJucyBhIGRlY2ltYWwgcmVwcmVz
ZW50YXRpb24sIG9yIGFuCisgICAgICAgIC8vIGV4cG9uZW50aWFsIHJlcHJlc2VudGF0aW9uLgor
ICAgICAgICAvLyBFeGFtcGxlIHdpdGggZGVjaW1hbF9pbl9zaG9ydGVzdF9sb3cgPSAtNiwKKyAg
ICAgICAgLy8gICAgICAgICAgICAgIGRlY2ltYWxfaW5fc2hvcnRlc3RfaGlnaCA9IDIxLAorICAg
ICAgICAvLyAgICAgICAgICAgICAgRU1JVF9QT1NJVElWRV9FWFBPTkVOVF9TSUdOIGFjdGl2YXRl
ZCwgYW5kCisgICAgICAgIC8vICAgICAgICAgICAgICBFTUlUX1RSQUlMSU5HX0RFQ0lNQUxfUE9J
TlQgZGVhY3RpdmVkOgorICAgICAgICAvLyAgIFRvU2hvcnRlc3QoMC4wMDAwMDEpICAtPiAiMC4w
MDAwMDEiCisgICAgICAgIC8vICAgVG9TaG9ydGVzdCgwLjAwMDAwMDEpIC0+ICIxZS03IgorICAg
ICAgICAvLyAgIFRvU2hvcnRlc3QoMTExMTExMTExMTExMTExMTExMTExLjApICAtPiAiMTExMTEx
MTExMTExMTExMTEwMDAwIgorICAgICAgICAvLyAgIFRvU2hvcnRlc3QoMTAwMDAwMDAwMDAwMDAw
MDAwMDAwLjApICAtPiAiMTAwMDAwMDAwMDAwMDAwMDAwMDAwIgorICAgICAgICAvLyAgIFRvU2hv
cnRlc3QoMTExMTExMTExMTExMTExMTExMTExMS4wKSAtPiAiMS4xMTExMTExMTExMTExMTExZSsy
MSIKKyAgICAgICAgLy8KKyAgICAgICAgLy8gTm90ZTogdGhlIGNvbnZlcnNpb24gbWF5IHJvdW5k
IHRoZSBvdXRwdXQgaWYgdGhlIHJldHVybmVkIHN0cmluZworICAgICAgICAvLyBpcyBhY2N1cmF0
ZSBlbm91Z2ggdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhlIGlucHV0LW51bWJlci4KKyAgICAgICAg
Ly8gRm9yIGV4YW1wbGUgdGhlIG1vc3QgcHJlY2lzZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZG91
YmxlIDllNTkgZXF1YWxzCisgICAgICAgIC8vICI4OTk5OTk5OTk5OTk5OTk5MTg3NjcyMjk0NDk3
MTc2MTk5NTM4MTAxMzEyNzM2NzQ2OTA2NTYyMDY4NDgiLCBidXQKKyAgICAgICAgLy8gdGhlIGNv
bnZlcnRlciB3aWxsIHJldHVybiB0aGUgc2hvcnRlciAoYnV0IHN0aWxsIGNvcnJlY3QpICI5ZTU5
Ii4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb252ZXJzaW9u
IHN1Y2NlZWRzLiBUaGUgY29udmVyc2lvbiBhbHdheXMgc3VjY2VlZHMKKyAgICAgICAgLy8gZXhj
ZXB0IHdoZW4gdGhlIGlucHV0IHZhbHVlIGlzIHNwZWNpYWwgYW5kIG5vIGluZmluaXR5X3N5bWJv
bCBvcgorICAgICAgICAvLyBuYW5fc3ltYm9sIGhhcyBiZWVuIGdpdmVuIHRvIHRoZSBjb25zdHJ1
Y3Rvci4KKyAgICAgICAgYm9vbCBUb1Nob3J0ZXN0KGRvdWJsZSB2YWx1ZSwgU3RyaW5nQnVpbGRl
ciogcmVzdWx0X2J1aWxkZXIpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgCisgICAgICAgIC8v
IENvbXB1dGVzIGEgZGVjaW1hbCByZXByZXNlbnRhdGlvbiB3aXRoIGEgZml4ZWQgbnVtYmVyIG9m
IGRpZ2l0cyBhZnRlciB0aGUKKyAgICAgICAgLy8gZGVjaW1hbCBwb2ludC4gVGhlIGxhc3QgZW1p
dHRlZCBkaWdpdCBpcyByb3VuZGVkLgorICAgICAgICAvLworICAgICAgICAvLyBFeGFtcGxlczoK
KyAgICAgICAgLy8gICBUb0ZpeGVkKDMuMTIsIDEpIC0+ICIzLjEiCisgICAgICAgIC8vICAgVG9G
aXhlZCgzLjE0MTUsIDMpIC0+ICIzLjE0MiIKKyAgICAgICAgLy8gICBUb0ZpeGVkKDEyMzQuNTY3
ODksIDQpIC0+ICIxMjM0LjU2NzkiCisgICAgICAgIC8vICAgVG9GaXhlZCgxLjIzLCA1KSAtPiAi
MS4yMzAwMCIKKyAgICAgICAgLy8gICBUb0ZpeGVkKDAuMSwgNCkgLT4gIjAuMTAwMCIKKyAgICAg
ICAgLy8gICBUb0ZpeGVkKDFlMzAsIDIpIC0+ICIxMDAwMDAwMDAwMDAwMDAwMDE5ODg0NjI0ODM4
NjU2LjAwIgorICAgICAgICAvLyAgIFRvRml4ZWQoMC4xLCAzMCkgLT4gIjAuMTAwMDAwMDAwMDAw
MDAwMDA1NTUxMTE1MTIzMTI2IgorICAgICAgICAvLyAgIFRvRml4ZWQoMC4xLCAxNykgLT4gIjAu
MTAwMDAwMDAwMDAwMDAwMDEiCisgICAgICAgIC8vCisgICAgICAgIC8vIElmIHJlcXVlc3RlZF9k
aWdpdHMgZXF1YWxzIDAsIHRoZW4gdGhlIHRhaWwgb2YgdGhlIHJlc3VsdCBkZXBlbmRzIG9uCisg
ICAgICAgIC8vIHRoZSBFTUlUX1RSQUlMSU5HX0RFQ0lNQUxfUE9JTlQgYW5kIEVNSVRfVFJBSUxJ
TkdfWkVST19BRlRFUl9QT0lOVC4KKyAgICAgICAgLy8gRXhhbXBsZXMsIGZvciByZXF1ZXN0ZWRf
ZGlnaXRzID09IDAsCisgICAgICAgIC8vICAgbGV0IEVNSVRfVFJBSUxJTkdfREVDSU1BTF9QT0lO
VCBhbmQgRU1JVF9UUkFJTElOR19aRVJPX0FGVEVSX1BPSU5UIGJlCisgICAgICAgIC8vICAgIC0g
ZmFsc2UgYW5kIGZhbHNlOiB0aGVuIDEyMy40NSAtPiAxMjMKKyAgICAgICAgLy8gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDAuNjc4IC0+IDEKKyAgICAgICAgLy8gICAgLSB0cnVlIGFuZCBm
YWxzZTogdGhlbiAxMjMuNDUgLT4gMTIzLgorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLjY3OCAtPiAxLgorICAgICAgICAvLyAgICAtIHRydWUgYW5kIHRydWU6IHRoZW4g
MTIzLjQ1IC0+IDEyMy4wCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgMC42
NzggLT4gMS4wCisgICAgICAgIC8vCisgICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29u
dmVyc2lvbiBzdWNjZWVkcy4gVGhlIGNvbnZlcnNpb24gYWx3YXlzIHN1Y2NlZWRzCisgICAgICAg
IC8vIGV4Y2VwdCBmb3IgdGhlIGZvbGxvd2luZyBjYXNlczoKKyAgICAgICAgLy8gICAtIHRoZSBp
bnB1dCB2YWx1ZSBpcyBzcGVjaWFsIGFuZCBubyBpbmZpbml0eV9zeW1ib2wgb3IgbmFuX3N5bWJv
bCBoYXMKKyAgICAgICAgLy8gICAgIGJlZW4gcHJvdmlkZWQgdG8gdGhlIGNvbnN0cnVjdG9yLAor
ICAgICAgICAvLyAgIC0gJ3ZhbHVlJyA+IDEwXmtNYXhGaXhlZERpZ2l0c0JlZm9yZVBvaW50LCBv
cgorICAgICAgICAvLyAgIC0gJ3JlcXVlc3RlZF9kaWdpdHMnID4ga01heEZpeGVkRGlnaXRzQWZ0
ZXJQb2ludC4KKyAgICAgICAgLy8gVGhlIGxhc3QgdHdvIGNvbmRpdGlvbnMgaW1wbHkgdGhhdCB0
aGUgcmVzdWx0IHdpbGwgbmV2ZXIgY29udGFpbiBtb3JlIHRoYW4KKyAgICAgICAgLy8gMSArIGtN
YXhGaXhlZERpZ2l0c0JlZm9yZVBvaW50ICsgMSArIGtNYXhGaXhlZERpZ2l0c0FmdGVyUG9pbnQg
Y2hhcmFjdGVycworICAgICAgICAvLyAob25lIGFkZGl0aW9uYWwgY2hhcmFjdGVyIGZvciB0aGUg
c2lnbiwgYW5kIG9uZSBmb3IgdGhlIGRlY2ltYWwgcG9pbnQpLgorICAgICAgICBib29sIFRvRml4
ZWQoZG91YmxlIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgaW50IHJlcXVlc3RlZF9kaWdp
dHMsCisgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyKiByZXN1bHRfYnVpbGRlcikg
Y29uc3Q7CisgICAgICAgIAorICAgICAgICAvLyBDb21wdXRlcyBhIHJlcHJlc2VudGF0aW9uIGlu
IGV4cG9uZW50aWFsIGZvcm1hdCB3aXRoIHJlcXVlc3RlZF9kaWdpdHMKKyAgICAgICAgLy8gYWZ0
ZXIgdGhlIGRlY2ltYWwgcG9pbnQuIFRoZSBsYXN0IGVtaXR0ZWQgZGlnaXQgaXMgcm91bmRlZC4K
KyAgICAgICAgLy8gSWYgcmVxdWVzdGVkX2RpZ2l0cyBlcXVhbHMgLTEsIHRoZW4gdGhlIHNob3J0
ZXN0IGV4cG9uZW50aWFsIHJlcHJlc2VudGF0aW9uCisgICAgICAgIC8vIGlzIGNvbXB1dGVkLgor
ICAgICAgICAvLworICAgICAgICAvLyBFeGFtcGxlcyB3aXRoIEVNSVRfUE9TSVRJVkVfRVhQT05F
TlRfU0lHTiBkZWFjdGl2YXRlZCwgYW5kCisgICAgICAgIC8vICAgICAgICAgICAgICAgZXhwb25l
bnRfY2hhcmFjdGVyIHNldCB0byAnZScuCisgICAgICAgIC8vICAgVG9FeHBvbmVudGlhbCgzLjEy
LCAxKSAtPiAiMy4xZTAiCisgICAgICAgIC8vICAgVG9FeHBvbmVudGlhbCg1LjAsIDMpIC0+ICI1
LjAwMGUwIgorICAgICAgICAvLyAgIFRvRXhwb25lbnRpYWwoMC4wMDEsIDIpIC0+ICIxLjAwZS0z
IgorICAgICAgICAvLyAgIFRvRXhwb25lbnRpYWwoMy4xNDE1LCAtMSkgLT4gIjMuMTQxNWUwIgor
ICAgICAgICAvLyAgIFRvRXhwb25lbnRpYWwoMy4xNDE1LCA0KSAtPiAiMy4xNDE1ZTAiCisgICAg
ICAgIC8vICAgVG9FeHBvbmVudGlhbCgzLjE0MTUsIDMpIC0+ICIzLjE0MmUwIgorICAgICAgICAv
LyAgIFRvRXhwb25lbnRpYWwoMTIzNDU2Nzg5MDAwMDAwLCAzKSAtPiAiMS4yMzVlMTQiCisgICAg
ICAgIC8vICAgVG9FeHBvbmVudGlhbCgxMDAwMDAwMDAwMDAwMDAwMDE5ODg0NjI0ODM4NjU2LjAs
IC0xKSAtPiAiMWUzMCIKKyAgICAgICAgLy8gICBUb0V4cG9uZW50aWFsKDEwMDAwMDAwMDAwMDAw
MDAwMTk4ODQ2MjQ4Mzg2NTYuMCwgMzIpIC0+CisgICAgICAgIC8vICAgICAgICAgICAgICAgICAg
ICAgIjEuMDAwMDAwMDAwMDAwMDAwMDE5ODg0NjI0ODM4NjU2MDBlMzAiCisgICAgICAgIC8vICAg
VG9FeHBvbmVudGlhbCgxMjM0LCAwKSAtPiAiMWUzIgorICAgICAgICAvLworICAgICAgICAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlIGNvbnZlcnNpb24gc3VjY2VlZHMuIFRoZSBjb252ZXJzaW9uIGFs
d2F5cyBzdWNjZWVkcworICAgICAgICAvLyBleGNlcHQgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXM6
CisgICAgICAgIC8vICAgLSB0aGUgaW5wdXQgdmFsdWUgaXMgc3BlY2lhbCBhbmQgbm8gaW5maW5p
dHlfc3ltYm9sIG9yIG5hbl9zeW1ib2wgaGFzCisgICAgICAgIC8vICAgICBiZWVuIHByb3ZpZGVk
IHRvIHRoZSBjb25zdHJ1Y3RvciwKKyAgICAgICAgLy8gICAtICdyZXF1ZXN0ZWRfZGlnaXRzJyA+
IGtNYXhFeHBvbmVudGlhbERpZ2l0cy4KKyAgICAgICAgLy8gVGhlIGxhc3QgY29uZGl0aW9uIGlt
cGxpZXMgdGhhdCB0aGUgcmVzdWx0IHdpbGwgbmV2ZXIgY29udGFpbiBtb3JlIHRoYW4KKyAgICAg
ICAgLy8ga01heEV4cG9uZW50aWFsRGlnaXRzICsgOCBjaGFyYWN0ZXJzICh0aGUgc2lnbiwgdGhl
IGRpZ2l0IGJlZm9yZSB0aGUKKyAgICAgICAgLy8gZGVjaW1hbCBwb2ludCwgdGhlIGRlY2ltYWwg
cG9pbnQsIHRoZSBleHBvbmVudCBjaGFyYWN0ZXIsIHRoZQorICAgICAgICAvLyBleHBvbmVudCdz
IHNpZ24sIGFuZCBhdCBtb3N0IDMgZXhwb25lbnQgZGlnaXRzKS4KKyAgICAgICAgYm9vbCBUb0V4
cG9uZW50aWFsKGRvdWJsZSB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBy
ZXF1ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVpbGRl
ciogcmVzdWx0X2J1aWxkZXIpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgLy8gQ29tcHV0ZXMg
J3ByZWNpc2lvbicgbGVhZGluZyBkaWdpdHMgb2YgdGhlIGdpdmVuICd2YWx1ZScgYW5kIHJldHVy
bnMgdGhlbQorICAgICAgICAvLyBlaXRoZXIgaW4gZXhwb25lbnRpYWwgb3IgZGVjaW1hbCBmb3Jt
YXQsIGRlcGVuZGluZyBvbgorICAgICAgICAvLyBtYXhfe2xlYWRpbmd8dHJhaWxpbmd9X3BhZGRp
bmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2RlIChnaXZlbiB0byB0aGUKKyAgICAgICAgLy8gY29u
c3RydWN0b3IpLgorICAgICAgICAvLyBUaGUgbGFzdCBjb21wdXRlZCBkaWdpdCBpcyByb3VuZGVk
LgorICAgICAgICAvLworICAgICAgICAvLyBFeGFtcGxlIHdpdGggbWF4X2xlYWRpbmdfcGFkZGlu
Z196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGUgPSA2LgorICAgICAgICAvLyAgIFRvUHJlY2lzaW9u
KDAuMDAwMDAxMjM0NSwgMikgLT4gIjAuMDAwMDAxMiIKKyAgICAgICAgLy8gICBUb1ByZWNpc2lv
bigwLjAwMDAwMDEyMzQ1LCAyKSAtPiAiMS4yZS03IgorICAgICAgICAvLyBTaW1pbGFyaWx5IHRo
ZSBjb252ZXJ0ZXIgbWF5IGFkZCB1cCB0bworICAgICAgICAvLyBtYXhfdHJhaWxpbmdfcGFkZGlu
Z196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGUgaW4gcHJlY2lzaW9uIG1vZGUgdG8gYXZvaWQKKyAg
ICAgICAgLy8gcmV0dXJuaW5nIGFuIGV4cG9uZW50aWFsIHJlcHJlc2VudGF0aW9uLiBBIHplcm8g
YWRkZWQgYnkgdGhlCisgICAgICAgIC8vIEVNSVRfVFJBSUxJTkdfWkVST19BRlRFUl9QT0lOVCBm
bGFnIGlzIGNvdW50ZWQgZm9yIHRoaXMgbGltaXQuCisgICAgICAgIC8vIEV4YW1wbGVzIGZvciBt
YXhfdHJhaWxpbmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGUgPSAxOgorICAgICAg
ICAvLyAgIFRvUHJlY2lzaW9uKDIzMC4wLCAyKSAtPiAiMjMwIgorICAgICAgICAvLyAgIFRvUHJl
Y2lzaW9uKDIzMC4wLCAyKSAtPiAiMjMwLiIgIHdpdGggRU1JVF9UUkFJTElOR19ERUNJTUFMX1BP
SU5ULgorICAgICAgICAvLyAgIFRvUHJlY2lzaW9uKDIzMC4wLCAyKSAtPiAiMi4zZTIiIHdpdGgg
RU1JVF9UUkFJTElOR19aRVJPX0FGVEVSX1BPSU5ULgorICAgICAgICAvLyBFeGFtcGxlcyBmb3Ig
bWF4X3RyYWlsaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2RlID0gMywgYW5kIG5v
CisgICAgICAgIC8vICAgIEVNSVRfVFJBSUxJTkdfWkVST19BRlRFUl9QT0lOVDoKKyAgICAgICAg
Ly8gICBUb1ByZWNpc2lvbigxMjM0NTAuMCwgNikgLT4gIjEyMzQ1MCIKKyAgICAgICAgLy8gICBU
b1ByZWNpc2lvbigxMjM0NTAuMCwgNSkgLT4gIjEyMzQ1MCIKKyAgICAgICAgLy8gICBUb1ByZWNp
c2lvbigxMjM0NTAuMCwgNCkgLT4gIjEyMzUwMCIKKyAgICAgICAgLy8gICBUb1ByZWNpc2lvbigx
MjM0NTAuMCwgMykgLT4gIjEyMzAwMCIKKyAgICAgICAgLy8gICBUb1ByZWNpc2lvbigxMjM0NTAu
MCwgMikgLT4gIjEuMmU1IgorICAgICAgICAvLworICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYg
dGhlIGNvbnZlcnNpb24gc3VjY2VlZHMuIFRoZSBjb252ZXJzaW9uIGFsd2F5cyBzdWNjZWVkcwor
ICAgICAgICAvLyBleGNlcHQgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXM6CisgICAgICAgIC8vICAg
LSB0aGUgaW5wdXQgdmFsdWUgaXMgc3BlY2lhbCBhbmQgbm8gaW5maW5pdHlfc3ltYm9sIG9yIG5h
bl9zeW1ib2wgaGFzCisgICAgICAgIC8vICAgICBiZWVuIHByb3ZpZGVkIHRvIHRoZSBjb25zdHJ1
Y3RvciwKKyAgICAgICAgLy8gICAtIHByZWNpc2lvbiA8IGtNaW5QZXJpY2lzaW9uRGlnaXRzCisg
ICAgICAgIC8vICAgLSBwcmVjaXNpb24gPiBrTWF4UHJlY2lzaW9uRGlnaXRzCisgICAgICAgIC8v
IFRoZSBsYXN0IGNvbmRpdGlvbiBpbXBsaWVzIHRoYXQgdGhlIHJlc3VsdCB3aWxsIG5ldmVyIGNv
bnRhaW4gbW9yZSB0aGFuCisgICAgICAgIC8vIGtNYXhQcmVjaXNpb25EaWdpdHMgKyA3IGNoYXJh
Y3RlcnMgKHRoZSBzaWduLCB0aGUgZGVjaW1hbCBwb2ludCwgdGhlCisgICAgICAgIC8vIGV4cG9u
ZW50IGNoYXJhY3RlciwgdGhlIGV4cG9uZW50J3Mgc2lnbiwgYW5kIGF0IG1vc3QgMyBleHBvbmVu
dCBkaWdpdHMpLgorICAgICAgICBib29sIFRvUHJlY2lzaW9uKGRvdWJsZSB2YWx1ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgcHJlY2lzaW9uLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25zdDsKKyAgICAgICAgCisgICAg
ICAgIGVudW0gRHRvYU1vZGUgeworICAgICAgICAgICAgLy8gUHJvZHVjZSB0aGUgc2hvcnRlc3Qg
Y29ycmVjdCByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgICAgIC8vIEZvciBleGFtcGxlIHRoZSBv
dXRwdXQgb2YgMC4yOTk5OTk5OTk5OTk5OTk5ODg4OTcgaXMgKHRoZSBsZXNzIGFjY3VyYXRlCisg
ICAgICAgICAgICAvLyBidXQgY29ycmVjdCkgMC4zLgorICAgICAgICAgICAgU0hPUlRFU1QsCisg
ICAgICAgICAgICAvLyBQcm9kdWNlIGEgZml4ZWQgbnVtYmVyIG9mIGRpZ2l0cyBhZnRlciB0aGUg
ZGVjaW1hbCBwb2ludC4KKyAgICAgICAgICAgIC8vIEZvciBpbnN0YW5jZSBmaXhlZCgwLjEsIDQp
IGJlY29tZXMgMC4xMDAwCisgICAgICAgICAgICAvLyBJZiB0aGUgaW5wdXQgbnVtYmVyIGlzIGJp
ZywgdGhlIG91dHB1dCB3aWxsIGJlIGJpZy4KKyAgICAgICAgICAgIEZJWEVELAorICAgICAgICAg
ICAgLy8gRml4ZWQgbnVtYmVyIG9mIGRpZ2l0cyAoaW5kZXBlbmRlbnQgb2YgdGhlIGRlY2ltYWwg
cG9pbnQpLgorICAgICAgICAgICAgUFJFQ0lTSU9OCisgICAgICAgIH07CisgICAgICAgIAorICAg
ICAgICAvLyBUaGUgbWF4aW1hbCBudW1iZXIgb2YgZGlnaXRzIHRoYXQgYXJlIG5lZWRlZCB0byBl
bWl0IGEgZG91YmxlIGluIGJhc2UgMTAuCisgICAgICAgIC8vIEEgaGlnaGVyIHByZWNpc2lvbiBj
YW4gYmUgYWNoaWV2ZWQgYnkgdXNpbmcgbW9yZSBkaWdpdHMsIGJ1dCB0aGUgc2hvcnRlc3QKKyAg
ICAgICAgLy8gYWNjdXJhdGUgcmVwcmVzZW50YXRpb24gb2YgYW55IGRvdWJsZSB3aWxsIG5ldmVy
IHVzZSBtb3JlIGRpZ2l0cyB0aGFuCisgICAgICAgIC8vIGtCYXNlMTBNYXhpbWFsTGVuZ3RoLgor
ICAgICAgICAvLyBOb3RlIHRoYXQgRG91YmxlVG9Bc2NpaSBudWxsLXRlcm1pbmF0ZXMgaXRzIGlu
cHV0LiBTbyB0aGUgZ2l2ZW4gYnVmZmVyCisgICAgICAgIC8vIHNob3VsZCBiZSBhdCBsZWFzdCBr
QmFzZTEwTWF4aW1hbExlbmd0aCArIDEgY2hhcmFjdGVycyBsb25nLgorICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IGtCYXNlMTBNYXhpbWFsTGVuZ3RoID0gMTc7CisgICAgICAgIAorICAgICAgICAv
LyBDb252ZXJ0cyB0aGUgZ2l2ZW4gZG91YmxlICd2JyB0byBhc2NpaS4KKyAgICAgICAgLy8gVGhl
IHJlc3VsdCBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgYnVmZmVyICogMTBeKHBvaW50LWxlbmd0
aCkuCisgICAgICAgIC8vCisgICAgICAgIC8vIFRoZSBvdXRwdXQgZGVwZW5kcyBvbiB0aGUgZ2l2
ZW4gbW9kZToKKyAgICAgICAgLy8gIC0gU0hPUlRFU1Q6IHByb2R1Y2UgdGhlIGxlYXN0IGFtb3Vu
dCBvZiBkaWdpdHMgZm9yIHdoaWNoIHRoZSBpbnRlcm5hbAorICAgICAgICAvLyAgIGlkZW50aXR5
IHJlcXVpcmVtZW50IGlzIHN0aWxsIHNhdGlzZmllZC4gSWYgdGhlIGRpZ2l0cyBhcmUgcHJpbnRl
ZAorICAgICAgICAvLyAgICh0b2dldGhlciB3aXRoIHRoZSBjb3JyZWN0IGV4cG9uZW50KSB0aGVu
IHJlYWRpbmcgdGhpcyBudW1iZXIgd2lsbCBnaXZlCisgICAgICAgIC8vICAgJ3YnIGFnYWluLiBU
aGUgYnVmZmVyIHdpbGwgY2hvb3NlIHRoZSByZXByZXNlbnRhdGlvbiB0aGF0IGlzIGNsb3Nlc3Qg
dG8KKyAgICAgICAgLy8gICAndicuIElmIHRoZXJlIGFyZSB0d28gYXQgdGhlIHNhbWUgZGlzdGFu
Y2UsIHRoYW4gdGhlIG9uZSBmYXJ0aGVyIGF3YXkKKyAgICAgICAgLy8gICBmcm9tIDAgaXMgY2hv
c2VuIChoYWxmd2F5IGNhc2VzIC0gZW5kaW5nIHdpdGggNSAtIGFyZSByb3VuZGVkIHVwKS4KKyAg
ICAgICAgLy8gICBJbiB0aGlzIG1vZGUgdGhlICdyZXF1ZXN0ZWRfZGlnaXRzJyBwYXJhbWV0ZXIg
aXMgaWdub3JlZC4KKyAgICAgICAgLy8gIC0gRklYRUQ6IHByb2R1Y2VzIGRpZ2l0cyBuZWNlc3Nh
cnkgdG8gcHJpbnQgYSBnaXZlbiBudW1iZXIgd2l0aAorICAgICAgICAvLyAgICdyZXF1ZXN0ZWRf
ZGlnaXRzJyBkaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQuIFRoZSBwcm9kdWNlZCBkaWdp
dHMKKyAgICAgICAgLy8gICBtaWdodCBiZSB0b28gc2hvcnQgaW4gd2hpY2ggY2FzZSB0aGUgY2Fs
bGVyIGhhcyB0byBmaWxsIHRoZSByZW1haW5kZXIKKyAgICAgICAgLy8gICB3aXRoICcwJ3MuCisg
ICAgICAgIC8vICAgRXhhbXBsZTogdG9GaXhlZCgwLjAwMSwgNSkgaXMgYWxsb3dlZCB0byByZXR1
cm4gYnVmZmVyPSIxIiwgcG9pbnQ9LTIuCisgICAgICAgIC8vICAgSGFsZndheSBjYXNlcyBhcmUg
cm91bmRlZCB0b3dhcmRzICsvLUluZmluaXR5IChhd2F5IGZyb20gMCkuIFRoZSBjYWxsCisgICAg
ICAgIC8vICAgdG9GaXhlZCgwLjE1LCAyKSB0aHVzIHJldHVybnMgYnVmZmVyPSIyIiwgcG9pbnQ9
MC4KKyAgICAgICAgLy8gICBUaGUgcmV0dXJuZWQgYnVmZmVyIG1heSBjb250YWluIGRpZ2l0cyB0
aGF0IHdvdWxkIGJlIHRydW5jYXRlZCBmcm9tIHRoZQorICAgICAgICAvLyAgIHNob3J0ZXN0IHJl
cHJlc2VudGF0aW9uIG9mIHRoZSBpbnB1dC4KKyAgICAgICAgLy8gIC0gUFJFQ0lTSU9OOiBwcm9k
dWNlcyAncmVxdWVzdGVkX2RpZ2l0cycgd2hlcmUgdGhlIGZpcnN0IGRpZ2l0IGlzIG5vdCAnMCcu
CisgICAgICAgIC8vICAgRXZlbiB0aG91Z2ggdGhlIGxlbmd0aCBvZiBwcm9kdWNlZCBkaWdpdHMg
dXN1YWxseSBlcXVhbHMKKyAgICAgICAgLy8gICAncmVxdWVzdGVkX2RpZ2l0cycsIHRoZSBmdW5j
dGlvbiBpcyBhbGxvd2VkIHRvIHJldHVybiBmZXdlciBkaWdpdHMsIGluCisgICAgICAgIC8vICAg
d2hpY2ggY2FzZSB0aGUgY2FsbGVyIGhhcyB0byBmaWxsIHRoZSBtaXNzaW5nIGRpZ2l0cyB3aXRo
ICcwJ3MuCisgICAgICAgIC8vICAgSGFsZndheSBjYXNlcyBhcmUgYWdhaW4gcm91bmRlZCBhd2F5
IGZyb20gMC4KKyAgICAgICAgLy8gRG91YmxlVG9Bc2NpaSBleHBlY3RzIHRoZSBnaXZlbiBidWZm
ZXIgdG8gYmUgYmlnIGVub3VnaCB0byBob2xkIGFsbAorICAgICAgICAvLyBkaWdpdHMgYW5kIGEg
dGVybWluYXRpbmcgbnVsbC1jaGFyYWN0ZXIuIEluIFNIT1JURVNULW1vZGUgaXQgZXhwZWN0cyBh
CisgICAgICAgIC8vIGJ1ZmZlciBvZiBhdCBsZWFzdCBrQmFzZTEwTWF4aW1hbExlbmd0aCArIDEu
IEluIGFsbCBvdGhlciBtb2RlcyB0aGUKKyAgICAgICAgLy8gcmVxdWVzdGVkX2RpZ2l0cyBwYXJh
bWV0ZXIgKCsgMSBmb3IgdGhlIG51bGwtY2hhcmFjdGVyKSBsaW1pdHMgdGhlIHNpemUgb2YKKyAg
ICAgICAgLy8gdGhlIG91dHB1dC4gVGhlIGdpdmVuIGxlbmd0aCBpcyBvbmx5IHVzZWQgaW4gZGVi
dWcgbW9kZSB0byBlbnN1cmUgdGhlCisgICAgICAgIC8vIGJ1ZmZlciBpcyBiaWcgZW5vdWdoLgor
ICAgICAgICBzdGF0aWMgdm9pZCBEb3VibGVUb0FzY2lpKGRvdWJsZSB2LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIER0b2FNb2RlIG1vZGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IHJlcXVlc3RlZF9kaWdpdHMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhciogYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBidWZmZXJfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wqIHNpZ24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBs
ZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBwb2ludCk7Cisg
ICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIC8vIElmIHRoZSB2YWx1ZSBpcyBhIHNwZWNp
YWwgdmFsdWUgKE5hTiBvciBJbmZpbml0eSkgY29uc3RydWN0cyB0aGUKKyAgICAgICAgLy8gY29y
cmVzcG9uZGluZyBzdHJpbmcgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgaW5maW5pdHkvbmFuLXN5bWJv
bC4KKyAgICAgICAgLy8gSWYgZWl0aGVyIG9mIHRoZW0gaXMgTlVMTCBvciB0aGUgdmFsdWUgaXMg
bm90IHNwZWNpYWwgdGhlbiB0aGUKKyAgICAgICAgLy8gZnVuY3Rpb24gcmV0dXJucyBmYWxzZS4K
KyAgICAgICAgYm9vbCBIYW5kbGVTcGVjaWFsVmFsdWVzKGRvdWJsZSB2YWx1ZSwgU3RyaW5nQnVp
bGRlciogcmVzdWx0X2J1aWxkZXIpIGNvbnN0OworICAgICAgICAvLyBDb25zdHJ1Y3RzIGFuIGV4
cG9uZW50aWFsIHJlcHJlc2VudGF0aW9uIChpLmUuIDEuMjM0ZTU2KS4KKyAgICAgICAgLy8gVGhl
IGdpdmVuIGV4cG9uZW50IGFzc3VtZXMgYSBkZWNpbWFsIHBvaW50IGFmdGVyIHRoZSBmaXJzdCBk
ZWNpbWFsIGRpZ2l0LgorICAgICAgICB2b2lkIENyZWF0ZUV4cG9uZW50aWFsUmVwcmVzZW50YXRp
b24oY29uc3QgY2hhciogZGVjaW1hbF9kaWdpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGV4cG9uZW50LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVpbGRlciogcmVzdWx0X2J1aWxkZXIpIGNv
bnN0OworICAgICAgICAvLyBDcmVhdGVzIGEgZGVjaW1hbCByZXByZXNlbnRhdGlvbiAoaS5lIDEy
MzQuNTY3OCkuCisgICAgICAgIHZvaWQgQ3JlYXRlRGVjaW1hbFJlcHJlc2VudGF0aW9uKGNvbnN0
IGNoYXIqIGRlY2ltYWxfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGRpZ2l0c19hZnRlcl9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU3RyaW5nQnVpbGRlciogcmVzdWx0X2J1aWxkZXIpIGNvbnN0Owor
ICAgICAgICAKKyAgICAgICAgY29uc3QgaW50IGZsYWdzXzsKKyAgICAgICAgY29uc3QgY2hhciog
Y29uc3QgaW5maW5pdHlfc3ltYm9sXzsKKyAgICAgICAgY29uc3QgY2hhciogY29uc3QgbmFuX3N5
bWJvbF87CisgICAgICAgIGNvbnN0IGNoYXIgZXhwb25lbnRfY2hhcmFjdGVyXzsKKyAgICAgICAg
Y29uc3QgaW50IGRlY2ltYWxfaW5fc2hvcnRlc3RfbG93XzsKKyAgICAgICAgY29uc3QgaW50IGRl
Y2ltYWxfaW5fc2hvcnRlc3RfaGlnaF87CisgICAgICAgIGNvbnN0IGludCBtYXhfbGVhZGluZ19w
YWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZV87CisgICAgICAgIGNvbnN0IGludCBtYXhf
dHJhaWxpbmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGVfOworICAgICAgICAKKyAg
ICAgICAgRElTQUxMT1dfSU1QTElDSVRfQ09OU1RSVUNUT1JTKERvdWJsZVRvU3RyaW5nQ29udmVy
dGVyKTsKKyAgICB9OworICAgIAorICAgIAorICAgIGNsYXNzIFN0cmluZ1RvRG91YmxlQ29udmVy
dGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIC8vIEVudW1lcmF0aW9uIGZvciBhbGxvd2luZyBv
Y3RhbHMgYW5kIGlnbm9yaW5nIGp1bmsgd2hlbiBjb252ZXJ0aW5nCisgICAgICAgIC8vIHN0cmlu
Z3MgdG8gbnVtYmVycy4KKyAgICAgICAgZW51bSBGbGFncyB7CisgICAgICAgICAgICBOT19GTEFH
UyA9IDAsCisgICAgICAgICAgICBBTExPV19IRVggPSAxLAorICAgICAgICAgICAgQUxMT1dfT0NU
QUxTID0gMiwKKyAgICAgICAgICAgIEFMTE9XX1RSQUlMSU5HX0pVTksgPSA0LAorICAgICAgICAg
ICAgQUxMT1dfTEVBRElOR19TUEFDRVMgPSA4LAorICAgICAgICAgICAgQUxMT1dfVFJBSUxJTkdf
U1BBQ0VTID0gMTYsCisgICAgICAgICAgICBBTExPV19TUEFDRVNfQUZURVJfU0lHTiA9IDMyCisg
ICAgICAgIH07CisgICAgICAgIAorICAgICAgICAvLyBGbGFncyBzaG91bGQgYmUgYSBiaXQtb3Ig
Y29tYmluYXRpb24gb2YgdGhlIHBvc3NpYmxlIEZsYWdzLWVudW0uCisgICAgICAgIC8vICAtIE5P
X0ZMQUdTOiBubyBzcGVjaWFsIGZsYWdzLgorICAgICAgICAvLyAgLSBBTExPV19IRVg6IHJlY29n
bml6ZXMgdGhlIHByZWZpeCAiMHgiLiBIZXggbnVtYmVycyBtYXkgb25seSBiZSBpbnRlZ2Vycy4K
KyAgICAgICAgLy8gICAgICBFeDogU3RyaW5nVG9Eb3VibGUoIjB4MTIzNCIpIC0+IDQ2NjAuMAor
ICAgICAgICAvLyAgICAgICAgICBJbiBTdHJpbmdUb0RvdWJsZSgiMHgxMjM0LjU2IikgdGhlIGNo
YXJhY3RlcnMgIi41NiIgYXJlIHRyYWlsaW5nCisgICAgICAgIC8vICAgICAgICAgIGp1bmsuIFRo
ZSByZXN1bHQgb2YgdGhlIGNhbGwgaXMgaGVuY2UgZGVwZW5kZW50IG9uCisgICAgICAgIC8vICAg
ICAgICAgIHRoZSBBTExPV19UUkFJTElOR19KVU5LIGZsYWcgYW5kL29yIHRoZSBqdW5rIHZhbHVl
LgorICAgICAgICAvLyAgICAgIFdpdGggdGhpcyBmbGFnICIweCIgaXMgYSBqdW5rLXN0cmluZy4g
RXZlbiB3aXRoIEFMTE9XX1RSQUlMSU5HX0pVTkssCisgICAgICAgIC8vICAgICAgdGhlIHN0cmlu
ZyB3aWxsIG5vdCBiZSBwYXJzZWQgYXMgIjAiIGZvbGxvd2VkIGJ5IGp1bmsuCisgICAgICAgIC8v
CisgICAgICAgIC8vICAtIEFMTE9XX09DVEFMUzogcmVjb2duaXplcyB0aGUgcHJlZml4ICIwIiBm
b3Igb2N0YWxzOgorICAgICAgICAvLyAgICAgIElmIGEgc2VxdWVuY2Ugb2Ygb2N0YWwgZGlnaXRz
IHN0YXJ0cyB3aXRoICcwJywgdGhlbiB0aGUgbnVtYmVyIGlzCisgICAgICAgIC8vICAgICAgcmVh
ZCBhcyBvY3RhbCBpbnRlZ2VyLiBPY3RhbCBudW1iZXJzIG1heSBvbmx5IGJlIGludGVnZXJzLgor
ICAgICAgICAvLyAgICAgIEV4OiBTdHJpbmdUb0RvdWJsZSgiMDEyMzQiKSAtPiA2NjguMAorICAg
ICAgICAvLyAgICAgICAgICBTdHJpbmdUb0RvdWJsZSgiMDEyMzQ5IikgLT4gMTIzNDkuMCAgLy8g
Tm90IGEgc2VxdWVuY2Ugb2Ygb2N0YWwKKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRpZ2l0cy4KKyAgICAgICAgLy8gICAgICAgICAg
SW4gU3RyaW5nVG9Eb3VibGUoIjAxMjM0LjU2IikgdGhlIGNoYXJhY3RlcnMgIi41NiIgYXJlIHRy
YWlsaW5nCisgICAgICAgIC8vICAgICAgICAgIGp1bmsuIFRoZSByZXN1bHQgb2YgdGhlIGNhbGwg
aXMgaGVuY2UgZGVwZW5kZW50IG9uCisgICAgICAgIC8vICAgICAgICAgIHRoZSBBTExPV19UUkFJ
TElOR19KVU5LIGZsYWcgYW5kL29yIHRoZSBqdW5rIHZhbHVlLgorICAgICAgICAvLyAgICAgICAg
ICBJbiBTdHJpbmdUb0RvdWJsZSgiMDEyMzRlNTYiKSB0aGUgY2hhcmFjdGVycyAiZTU2IiBhcmUg
dHJhaWxpbmcKKyAgICAgICAgLy8gICAgICAgICAganVuaywgdG9vLgorICAgICAgICAvLyAgLSBB
TExPV19UUkFJTElOR19KVU5LOiBpZ25vcmUgdHJhaWxpbmcgY2hhcmFjdGVycyB0aGF0IGFyZSBu
b3QgcGFydCBvZgorICAgICAgICAvLyAgICAgIGEgZG91YmxlIGxpdGVyYWwuCisgICAgICAgIC8v
ICAtIEFMTE9XX0xFQURJTkdfU1BBQ0VTOiBza2lwIG92ZXIgbGVhZGluZyBzcGFjZXMuCisgICAg
ICAgIC8vICAtIEFMTE9XX1RSQUlMSU5HX1NQQUNFUzogaWdub3JlIHRyYWlsaW5nIHNwYWNlcy4K
KyAgICAgICAgLy8gIC0gQUxMT1dfU1BBQ0VTX0FGVEVSX1NJR046IGlnbm9yZSBzcGFjZXMgYWZ0
ZXIgdGhlIHNpZ24uCisgICAgICAgIC8vICAgICAgIEV4OiBTdHJpbmdUb0RvdWJsZSgiLSAgIDEy
My4yIikgLT4gLTEyMy4yLgorICAgICAgICAvLyAgICAgICAgICAgU3RyaW5nVG9Eb3VibGUoIisg
ICAxMjMuMiIpIC0+IDEyMy4yCisgICAgICAgIC8vCisgICAgICAgIC8vIGVtcHR5X3N0cmluZ192
YWx1ZSBpcyByZXR1cm5lZCB3aGVuIGFuIGVtcHR5IHN0cmluZyBpcyBnaXZlbiBhcyBpbnB1dC4K
KyAgICAgICAgLy8gSWYgQUxMT1dfTEVBRElOR19TUEFDRVMgb3IgQUxMT1dfVFJBSUxJTkdfU1BB
Q0VTIGFyZSBzZXQsIHRoZW4gYSBzdHJpbmcKKyAgICAgICAgLy8gY29udGFpbmluZyBvbmx5IHNw
YWNlcyBpcyBjb252ZXJ0ZWQgdG8gdGhlICdlbXB0eV9zdHJpbmdfdmFsdWUnLCB0b28uCisgICAg
ICAgIC8vCisgICAgICAgIC8vIGp1bmtfc3RyaW5nX3ZhbHVlIGlzIHJldHVybmVkIHdoZW4KKyAg
ICAgICAgLy8gIGEpIEFMTE9XX1RSQUlMSU5HX0pVTksgaXMgbm90IHNldCwgYW5kIGEganVuayBj
aGFyYWN0ZXIgKGEgY2hhcmFjdGVyIG5vdAorICAgICAgICAvLyAgICAgcGFydCBvZiBhIGRvdWJs
ZS1saXRlcmFsKSBpcyBmb3VuZC4KKyAgICAgICAgLy8gIGIpIEFMTE9XX1RSQUlMSU5HX0pVTksg
aXMgc2V0LCBidXQgdGhlIHN0cmluZyBkb2VzIG5vdCBzdGFydCB3aXRoIGEKKyAgICAgICAgLy8g
ICAgIGRvdWJsZSBsaXRlcmFsLgorICAgICAgICAvLworICAgICAgICAvLyBpbmZpbml0eV9zeW1i
b2wgYW5kIG5hbl9zeW1ib2wgYXJlIHN0cmluZ3MgdGhhdCBhcmUgdXNlZCB0byBkZXRlY3QKKyAg
ICAgICAgLy8gaW5wdXRzIHRoYXQgcmVwcmVzZW50IGluZmluaXR5IGFuZCBOYU4uIFRoZXkgY2Fu
IGJlIG51bGwsIGluIHdoaWNoIGNhc2UKKyAgICAgICAgLy8gdGhleSBhcmUgaWdub3JlZC4KKyAg
ICAgICAgLy8gVGhlIGNvbnZlcnNpb24gcm91dGluZSBmaXJzdCByZWFkcyBhbnkgcG9zc2libGUg
c2lnbnMuIFRoZW4gaXQgY29tcGFyZXMgdGhlCisgICAgICAgIC8vIGZvbGxvd2luZyBjaGFyYWN0
ZXIgb2YgdGhlIGlucHV0LXN0cmluZyB3aXRoIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YKKyAgICAg
ICAgLy8gdGhlIGluZmluaXR5LCBhbmQgbmFuLXN5bWJvbC4gSWYgZWl0aGVyIG1hdGNoZXMsIHRo
ZSBmdW5jdGlvbiBhc3N1bWVzLCB0aGF0CisgICAgICAgIC8vIGEgbWF0Y2ggaGFzIGJlZW4gZm91
bmQsIGFuZCBleHBlY3RzIHRoZSBmb2xsb3dpbmcgaW5wdXQgY2hhcmFjdGVycyB0byBtYXRjaAor
ICAgICAgICAvLyB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnMgb2YgdGhlIHNwZWNpYWwtdmFsdWUg
c3ltYm9sLgorICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIGZvbGxvd2luZyByZXN0cmlj
dGlvbnMgYXBwbHkgdG8gc3BlY2lhbC12YWx1ZSBzeW1ib2xzOgorICAgICAgICAvLyAgLSB0aGV5
IG11c3Qgbm90IHN0YXJ0IHdpdGggc2lnbnMgKCcrJywgb3IgJy0nKSwKKyAgICAgICAgLy8gIC0g
dGhleSBtdXN0IG5vdCBoYXZlIHRoZSBzYW1lIGZpcnN0IGNoYXJhY3Rlci4KKyAgICAgICAgLy8g
IC0gdGhleSBtdXN0IG5vdCBzdGFydCB3aXRoIGRpZ2l0cy4KKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gRXhhbXBsZXM6CisgICAgICAgIC8vICBmbGFncyA9IEFMTE9XX0hFWCB8IEFMTE9XX1RSQUlM
SU5HX0pVTkssCisgICAgICAgIC8vICBlbXB0eV9zdHJpbmdfdmFsdWUgPSAwLjAsCisgICAgICAg
IC8vICBqdW5rX3N0cmluZ192YWx1ZSA9IE5hTiwKKyAgICAgICAgLy8gIGluZmluaXR5X3N5bWJv
bCA9ICJpbmZpbml0eSIsCisgICAgICAgIC8vICBuYW5fc3ltYm9sID0gIm5hbiI6CisgICAgICAg
IC8vICAgIFN0cmluZ1RvRG91YmxlKCIweDEyMzQiKSAtPiA0NjYwLjAuCisgICAgICAgIC8vICAg
IFN0cmluZ1RvRG91YmxlKCIweDEyMzRLIikgLT4gNDY2MC4wLgorICAgICAgICAvLyAgICBTdHJp
bmdUb0RvdWJsZSgiIikgLT4gMC4wICAvLyBlbXB0eV9zdHJpbmdfdmFsdWUuCisgICAgICAgIC8v
ICAgIFN0cmluZ1RvRG91YmxlKCIgIikgLT4gTmFOICAvLyBqdW5rX3N0cmluZ192YWx1ZS4KKyAg
ICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIiAxIikgLT4gTmFOICAvLyBqdW5rX3N0cmluZ192
YWx1ZS4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjB4IikgLT4gTmFOICAvLyBqdW5r
X3N0cmluZ192YWx1ZS4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIi0xMjMuNDUiKSAt
PiAtMTIzLjQ1LgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiLS0xMjMuNDUiKSAtPiBO
YU4gIC8vIGp1bmtfc3RyaW5nX3ZhbHVlLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgi
MTIzZTQ1IikgLT4gMTIzZTQ1LgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMTIzRTQ1
IikgLT4gMTIzZTQ1LgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMTIzZSs0NSIpIC0+
IDEyM2U0NS4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjEyM0UtNDUiKSAtPiAxMjNl
LTQ1LgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMTIzZSIpIC0+IDEyMy4wICAvLyB0
cmFpbGluZyBqdW5rIGlnbm9yZWQuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIxMjNl
LSIpIC0+IDEyMy4wICAvLyB0cmFpbGluZyBqdW5rIGlnbm9yZWQuCisgICAgICAgIC8vICAgIFN0
cmluZ1RvRG91YmxlKCIrTmFOIikgLT4gTmFOICAvLyBOYU4gc3RyaW5nIGxpdGVyYWwuCisgICAg
ICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCItaW5maW5pdHkiKSAtPiAtaW5mLiAgLy8gaW5maW5p
dHkgbGl0ZXJhbC4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIkluZmluaXR5IikgLT4g
TmFOICAvLyBqdW5rX3N0cmluZ192YWx1ZS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gIGZsYWdz
ID0gQUxMT1dfT0NUQUwgfCBBTExPV19MRUFESU5HX1NQQUNFUywKKyAgICAgICAgLy8gIGVtcHR5
X3N0cmluZ192YWx1ZSA9IDAuMCwKKyAgICAgICAgLy8gIGp1bmtfc3RyaW5nX3ZhbHVlID0gTmFO
LAorICAgICAgICAvLyAgaW5maW5pdHlfc3ltYm9sID0gTlVMTCwKKyAgICAgICAgLy8gIG5hbl9z
eW1ib2wgPSBOVUxMOgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMHgxMjM0IikgLT4g
TmFOICAvLyBqdW5rX3N0cmluZ192YWx1ZS4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUo
IjAxMjM0IikgLT4gNjY4LjAuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIiKSAtPiAw
LjAgIC8vIGVtcHR5X3N0cmluZ192YWx1ZS4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUo
IiAiKSAtPiAwLjAgIC8vIGVtcHR5X3N0cmluZ192YWx1ZS4KKyAgICAgICAgLy8gICAgU3RyaW5n
VG9Eb3VibGUoIiAxIikgLT4gMS4wCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIweCIp
IC0+IE5hTiAgLy8ganVua19zdHJpbmdfdmFsdWUuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91
YmxlKCIwMTIzZTQ1IikgLT4gTmFOICAvLyBqdW5rX3N0cmluZ192YWx1ZS4KKyAgICAgICAgLy8g
ICAgU3RyaW5nVG9Eb3VibGUoIjAxMjM5RTQ1IikgLT4gMTIzOWU0NS4KKyAgICAgICAgLy8gICAg
U3RyaW5nVG9Eb3VibGUoIi1pbmZpbml0eSIpIC0+IE5hTiAgLy8ganVua19zdHJpbmdfdmFsdWUu
CisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCJOYU4iKSAtPiBOYU4gIC8vIGp1bmtfc3Ry
aW5nX3ZhbHVlLgorICAgICAgICBTdHJpbmdUb0RvdWJsZUNvbnZlcnRlcihpbnQgZmxhZ3MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBlbXB0eV9zdHJpbmdfdmFsdWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBqdW5rX3N0cmluZ192YWx1
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogaW5maW5pdHlf
c3ltYm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBuYW5f
c3ltYm9sKQorICAgICAgICA6IGZsYWdzXyhmbGFncyksCisgICAgICAgIGVtcHR5X3N0cmluZ192
YWx1ZV8oZW1wdHlfc3RyaW5nX3ZhbHVlKSwKKyAgICAgICAganVua19zdHJpbmdfdmFsdWVfKGp1
bmtfc3RyaW5nX3ZhbHVlKSwKKyAgICAgICAgaW5maW5pdHlfc3ltYm9sXyhpbmZpbml0eV9zeW1i
b2wpLAorICAgICAgICBuYW5fc3ltYm9sXyhuYW5fc3ltYm9sKSB7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIC8vIFBlcmZvcm1zIHRoZSBjb252ZXJzaW9uLgorICAgICAgICAvLyBUaGUg
b3V0cHV0IHBhcmFtZXRlciAncHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291bnQnIGlzIHNldCB0byB0
aGUgbnVtYmVyCisgICAgICAgIC8vIG9mIGNoYXJhY3RlcnMgdGhhdCBoYXZlIGJlZW4gcHJvY2Vz
c2VkIHRvIHJlYWQgdGhlIG51bWJlci4KKyAgICAgICAgLy8gU3BhY2VzIHRoYW4gYXJlIHByb2Nl
c3NlZCB3aXRoIEFMTE9XX3tMRUFESU5HfFRSQUlMSU5HfV9TUEFDRVMgYXJlIGluY2x1ZGVkCisg
ICAgICAgIC8vIGluIHRoZSAncHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291bnQnLiBUcmFpbGluZyBq
dW5rIGlzIG5ldmVyIGluY2x1ZGVkLgorICAgICAgICBkb3VibGUgU3RyaW5nVG9Eb3VibGUoY29u
c3QgY2hhciogYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0
aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogcHJvY2Vzc2VkX2NoYXJhY3Rl
cnNfY291bnQpOworICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBpbnQgZmxh
Z3NfOworICAgICAgICBjb25zdCBkb3VibGUgZW1wdHlfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAg
Y29uc3QgZG91YmxlIGp1bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgY29uc3QgY2hhciogY29u
c3QgaW5maW5pdHlfc3ltYm9sXzsKKyAgICAgICAgY29uc3QgY2hhciogY29uc3QgbmFuX3N5bWJv
bF87CisgICAgICAgIAorICAgICAgICBESVNBTExPV19JTVBMSUNJVF9DT05TVFJVQ1RPUlMoU3Ry
aW5nVG9Eb3VibGVDb252ZXJ0ZXIpOworICAgIH07CisgICAgCit9ICAvLyBuYW1lc3BhY2UgZG91
YmxlX2NvbnZlcnNpb24KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAgLy8gRE9VQkxF
X0NPTlZFUlNJT05fRE9VQkxFX0NPTlZFUlNJT05fSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvZHRvYS9kb3VibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
ZHRvYS9kb3VibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNTQ0ZmRiNWE4MTdmYTgyMTZiM2UzMWU2NWEzMTkx
MmYwNzg3MjI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9k
dG9hL2RvdWJsZS5oCkBAIC0wLDAgKzEsMjQ5IEBACisvLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjgg
cHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
Ky8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8K
Ky8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKKyNpZm5kZWYgRE9VQkxFX0NPTlZFUlNJT05fRE9VQkxFX0hfCisjZGVmaW5lIERPVUJMRV9D
T05WRVJTSU9OX0RPVUJMRV9IXworCisjaW5jbHVkZSAiZGl5LWZwLmgiCisKK25hbWVzcGFjZSBX
VEYgeworCituYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIC8vIFdlIGFz
c3VtZSB0aGF0IGRvdWJsZXMgYW5kIHVpbnQ2NF90IGhhdmUgdGhlIHNhbWUgZW5kaWFubmVzcy4K
KyAgICBzdGF0aWMgdWludDY0X3QgZG91YmxlX3RvX3VpbnQ2NChkb3VibGUgZCkgeyByZXR1cm4g
Qml0Q2FzdDx1aW50NjRfdD4oZCk7IH0KKyAgICBzdGF0aWMgZG91YmxlIHVpbnQ2NF90b19kb3Vi
bGUodWludDY0X3QgZDY0KSB7IHJldHVybiBCaXRDYXN0PGRvdWJsZT4oZDY0KTsgfQorICAgIAor
ICAgIC8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIGRvdWJsZXMuCisgICAgY2xhc3MgRG91YmxlIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBrU2lnbk1hc2sgPSBV
SU5UNjRfMlBBUlRfQygweDgwMDAwMDAwLCAwMDAwMDAwMCk7CisgICAgICAgIHN0YXRpYyBjb25z
dCB1aW50NjRfdCBrRXhwb25lbnRNYXNrID0gVUlOVDY0XzJQQVJUX0MoMHg3RkYwMDAwMCwgMDAw
MDAwMDApOworICAgICAgICBzdGF0aWMgY29uc3QgdWludDY0X3Qga1NpZ25pZmljYW5kTWFzayA9
IFVJTlQ2NF8yUEFSVF9DKDB4MDAwRkZGRkYsIEZGRkZGRkZGKTsKKyAgICAgICAgc3RhdGljIGNv
bnN0IHVpbnQ2NF90IGtIaWRkZW5CaXQgPSBVSU5UNjRfMlBBUlRfQygweDAwMTAwMDAwLCAwMDAw
MDAwMCk7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQga1BoeXNpY2FsU2lnbmlmaWNhbmRTaXpl
ID0gNTI7ICAvLyBFeGNsdWRlcyB0aGUgaGlkZGVuIGJpdC4KKyAgICAgICAgc3RhdGljIGNvbnN0
IGludCBrU2lnbmlmaWNhbmRTaXplID0gNTM7CisgICAgICAgIAorICAgICAgICBEb3VibGUoKSA6
IGQ2NF8oMCkge30KKyAgICAgICAgZXhwbGljaXQgRG91YmxlKGRvdWJsZSBkKSA6IGQ2NF8oZG91
YmxlX3RvX3VpbnQ2NChkKSkge30KKyAgICAgICAgZXhwbGljaXQgRG91YmxlKHVpbnQ2NF90IGQ2
NCkgOiBkNjRfKGQ2NCkge30KKyAgICAgICAgZXhwbGljaXQgRG91YmxlKERpeUZwIGRpeV9mcCkK
KyAgICAgICAgOiBkNjRfKERpeUZwVG9VaW50NjQoZGl5X2ZwKSkge30KKyAgICAgICAgCisgICAg
ICAgIC8vIFRoZSB2YWx1ZSBlbmNvZGVkIGJ5IHRoaXMgRG91YmxlIG11c3QgYmUgZ3JlYXRlciBv
ciBlcXVhbCB0byArMC4wLgorICAgICAgICAvLyBJdCBtdXN0IG5vdCBiZSBzcGVjaWFsIChpbmZp
bml0eSwgb3IgTmFOKS4KKyAgICAgICAgRGl5RnAgQXNEaXlGcCgpIGNvbnN0IHsKKyAgICAgICAg
ICAgIEFTU0VSVChTaWduKCkgPiAwKTsKKyAgICAgICAgICAgIEFTU0VSVCghSXNTcGVjaWFsKCkp
OworICAgICAgICAgICAgcmV0dXJuIERpeUZwKFNpZ25pZmljYW5kKCksIEV4cG9uZW50KCkpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBUaGUgdmFsdWUgZW5jb2RlZCBieSB0aGlz
IERvdWJsZSBtdXN0IGJlIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiAwLgorICAgICAgICBEaXlGcCBB
c05vcm1hbGl6ZWREaXlGcCgpIGNvbnN0IHsKKyAgICAgICAgICAgIEFTU0VSVCh2YWx1ZSgpID4g
MC4wKTsKKyAgICAgICAgICAgIHVpbnQ2NF90IGYgPSBTaWduaWZpY2FuZCgpOworICAgICAgICAg
ICAgaW50IGUgPSBFeHBvbmVudCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGUg
Y3VycmVudCBkb3VibGUgY291bGQgYmUgYSBkZW5vcm1hbC4KKyAgICAgICAgICAgIHdoaWxlICgo
ZiAmIGtIaWRkZW5CaXQpID09IDApIHsKKyAgICAgICAgICAgICAgICBmIDw8PSAxOworICAgICAg
ICAgICAgICAgIGUtLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIERvIHRoZSBmaW5h
bCBzaGlmdHMgaW4gb25lIGdvLgorICAgICAgICAgICAgZiA8PD0gRGl5RnA6OmtTaWduaWZpY2Fu
ZFNpemUgLSBrU2lnbmlmaWNhbmRTaXplOworICAgICAgICAgICAgZSAtPSBEaXlGcDo6a1NpZ25p
ZmljYW5kU2l6ZSAtIGtTaWduaWZpY2FuZFNpemU7CisgICAgICAgICAgICByZXR1cm4gRGl5RnAo
ZiwgZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFJldHVybnMgdGhlIGRvdWJs
ZSdzIGJpdCBhcyB1aW50NjQuCisgICAgICAgIHVpbnQ2NF90IEFzVWludDY0KCkgY29uc3Qgewor
ICAgICAgICAgICAgcmV0dXJuIGQ2NF87CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8v
IFJldHVybnMgdGhlIG5leHQgZ3JlYXRlciBkb3VibGUuIFJldHVybnMgK2luZmluaXR5IG9uIGlu
cHV0ICtpbmZpbml0eS4KKyAgICAgICAgZG91YmxlIE5leHREb3VibGUoKSBjb25zdCB7CisgICAg
ICAgICAgICBpZiAoZDY0XyA9PSBrSW5maW5pdHkpIHJldHVybiBEb3VibGUoa0luZmluaXR5KS52
YWx1ZSgpOworICAgICAgICAgICAgaWYgKFNpZ24oKSA8IDAgJiYgU2lnbmlmaWNhbmQoKSA9PSAw
KSB7CisgICAgICAgICAgICAgICAgLy8gLTAuMAorICAgICAgICAgICAgICAgIHJldHVybiAwLjA7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoU2lnbigpIDwgMCkgeworICAgICAgICAg
ICAgICAgIHJldHVybiBEb3VibGUoZDY0XyAtIDEpLnZhbHVlKCk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIHJldHVybiBEb3VibGUoZDY0XyArIDEpLnZhbHVlKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludCBFeHBvbmVudCgp
IGNvbnN0IHsKKyAgICAgICAgICAgIGlmIChJc0Rlbm9ybWFsKCkpIHJldHVybiBrRGVub3JtYWxF
eHBvbmVudDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdWludDY0X3QgZDY0ID0gQXNVaW50
NjQoKTsKKyAgICAgICAgICAgIGludCBiaWFzZWRfZSA9CisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQ+KChkNjQgJiBrRXhwb25lbnRNYXNrKSA+PiBrUGh5c2ljYWxTaWduaWZpY2FuZFNpemUp
OworICAgICAgICAgICAgcmV0dXJuIGJpYXNlZF9lIC0ga0V4cG9uZW50QmlhczsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgdWludDY0X3QgU2lnbmlmaWNhbmQoKSBjb25zdCB7CisgICAg
ICAgICAgICB1aW50NjRfdCBkNjQgPSBBc1VpbnQ2NCgpOworICAgICAgICAgICAgdWludDY0X3Qg
c2lnbmlmaWNhbmQgPSBkNjQgJiBrU2lnbmlmaWNhbmRNYXNrOworICAgICAgICAgICAgaWYgKCFJ
c0Rlbm9ybWFsKCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2lnbmlmaWNhbmQgKyBrSGlk
ZGVuQml0OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2ln
bmlmaWNhbmQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgZG91YmxlIGlzIGEgZGVub3JtYWwuCisgICAgICAgIGJvb2wg
SXNEZW5vcm1hbCgpIGNvbnN0IHsKKyAgICAgICAgICAgIHVpbnQ2NF90IGQ2NCA9IEFzVWludDY0
KCk7CisgICAgICAgICAgICByZXR1cm4gKGQ2NCAmIGtFeHBvbmVudE1hc2spID09IDA7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFdlIGNvbnNpZGVyIGRlbm9ybWFscyBub3QgdG8g
YmUgc3BlY2lhbC4KKyAgICAgICAgLy8gSGVuY2Ugb25seSBJbmZpbml0eSBhbmQgTmFOIGFyZSBz
cGVjaWFsLgorICAgICAgICBib29sIElzU3BlY2lhbCgpIGNvbnN0IHsKKyAgICAgICAgICAgIHVp
bnQ2NF90IGQ2NCA9IEFzVWludDY0KCk7CisgICAgICAgICAgICByZXR1cm4gKGQ2NCAmIGtFeHBv
bmVudE1hc2spID09IGtFeHBvbmVudE1hc2s7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGJvb2wgSXNOYW4oKSBjb25zdCB7CisgICAgICAgICAgICB1aW50NjRfdCBkNjQgPSBBc1VpbnQ2
NCgpOworICAgICAgICAgICAgcmV0dXJuICgoZDY0ICYga0V4cG9uZW50TWFzaykgPT0ga0V4cG9u
ZW50TWFzaykgJiYKKyAgICAgICAgICAgICgoZDY0ICYga1NpZ25pZmljYW5kTWFzaykgIT0gMCk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgSXNJbmZpbml0ZSgpIGNvbnN0IHsK
KyAgICAgICAgICAgIHVpbnQ2NF90IGQ2NCA9IEFzVWludDY0KCk7CisgICAgICAgICAgICByZXR1
cm4gKChkNjQgJiBrRXhwb25lbnRNYXNrKSA9PSBrRXhwb25lbnRNYXNrKSAmJgorICAgICAgICAg
ICAgKChkNjQgJiBrU2lnbmlmaWNhbmRNYXNrKSA9PSAwKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaW50IFNpZ24oKSBjb25zdCB7CisgICAgICAgICAgICB1aW50NjRfdCBkNjQgPSBB
c1VpbnQ2NCgpOworICAgICAgICAgICAgcmV0dXJuIChkNjQgJiBrU2lnbk1hc2spID09IDA/IDE6
IC0xOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBQcmVjb25kaXRpb246IHRoZSB2
YWx1ZSBlbmNvZGVkIGJ5IHRoaXMgRG91YmxlIG11c3QgYmUgZ3JlYXRlciBvciBlcXVhbAorICAg
ICAgICAvLyB0aGFuICswLjAuCisgICAgICAgIERpeUZwIFVwcGVyQm91bmRhcnkoKSBjb25zdCB7
CisgICAgICAgICAgICBBU1NFUlQoU2lnbigpID4gMCk7CisgICAgICAgICAgICByZXR1cm4gRGl5
RnAoU2lnbmlmaWNhbmQoKSAqIDIgKyAxLCBFeHBvbmVudCgpIC0gMSk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIC8vIENvbXB1dGVzIHRoZSB0d28gYm91bmRhcmllcyBvZiB0aGlzLgor
ICAgICAgICAvLyBUaGUgYmlnZ2VyIGJvdW5kYXJ5IChtX3BsdXMpIGlzIG5vcm1hbGl6ZWQuIFRo
ZSBsb3dlciBib3VuZGFyeSBoYXMgdGhlIHNhbWUKKyAgICAgICAgLy8gZXhwb25lbnQgYXMgbV9w
bHVzLgorICAgICAgICAvLyBQcmVjb25kaXRpb246IHRoZSB2YWx1ZSBlbmNvZGVkIGJ5IHRoaXMg
RG91YmxlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuCisgICAgICAgIHZvaWQgTm9ybWFsaXplZEJv
dW5kYXJpZXMoRGl5RnAqIG91dF9tX21pbnVzLCBEaXlGcCogb3V0X21fcGx1cykgY29uc3Qgewor
ICAgICAgICAgICAgQVNTRVJUKHZhbHVlKCkgPiAwLjApOworICAgICAgICAgICAgRGl5RnAgdiA9
IHRoaXMtPkFzRGl5RnAoKTsKKyAgICAgICAgICAgIGJvb2wgc2lnbmlmaWNhbmRfaXNfemVybyA9
ICh2LmYoKSA9PSBrSGlkZGVuQml0KTsKKyAgICAgICAgICAgIERpeUZwIG1fcGx1cyA9IERpeUZw
OjpOb3JtYWxpemUoRGl5RnAoKHYuZigpIDw8IDEpICsgMSwgdi5lKCkgLSAxKSk7CisgICAgICAg
ICAgICBEaXlGcCBtX21pbnVzOworICAgICAgICAgICAgaWYgKHNpZ25pZmljYW5kX2lzX3plcm8g
JiYgdi5lKCkgIT0ga0Rlbm9ybWFsRXhwb25lbnQpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUg
Ym91bmRhcnkgaXMgY2xvc2VyLiBUaGluayBvZiB2ID0gMTAwMGUxMCBhbmQgdi0gPSA5OTk5ZTku
CisgICAgICAgICAgICAgICAgLy8gVGhlbiB0aGUgYm91bmRhcnkgKD09ICh2IC0gdi0pLzIpIGlz
IG5vdCBqdXN0IGF0IGEgZGlzdGFuY2Ugb2YgMWU5IGJ1dAorICAgICAgICAgICAgICAgIC8vIGF0
IGEgZGlzdGFuY2Ugb2YgMWU4LgorICAgICAgICAgICAgICAgIC8vIFRoZSBvbmx5IGV4Y2VwdGlv
biBpcyBmb3IgdGhlIHNtYWxsZXN0IG5vcm1hbDogdGhlIGxhcmdlc3QgZGVub3JtYWwgaXMKKyAg
ICAgICAgICAgICAgICAvLyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBhcyBpdHMgc3VjY2Vzc29yLgor
ICAgICAgICAgICAgICAgIC8vIE5vdGU6IGRlbm9ybWFscyBoYXZlIHRoZSBzYW1lIGV4cG9uZW50
IGFzIHRoZSBzbWFsbGVzdCBub3JtYWxzLgorICAgICAgICAgICAgICAgIG1fbWludXMgPSBEaXlG
cCgodi5mKCkgPDwgMikgLSAxLCB2LmUoKSAtIDIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBtX21pbnVzID0gRGl5RnAoKHYuZigpIDw8IDEpIC0gMSwgdi5lKCkgLSAx
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fbWludXMuc2V0X2YobV9taW51cy5mKCkg
PDwgKG1fbWludXMuZSgpIC0gbV9wbHVzLmUoKSkpOworICAgICAgICAgICAgbV9taW51cy5zZXRf
ZShtX3BsdXMuZSgpKTsKKyAgICAgICAgICAgICpvdXRfbV9wbHVzID0gbV9wbHVzOworICAgICAg
ICAgICAgKm91dF9tX21pbnVzID0gbV9taW51czsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgZG91YmxlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gdWludDY0X3RvX2RvdWJsZShkNjRfKTsg
fQorICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJucyB0aGUgc2lnbmlmaWNhbmQgc2l6ZSBmb3Ig
YSBnaXZlbiBvcmRlciBvZiBtYWduaXR1ZGUuCisgICAgICAgIC8vIElmIHYgPSBmKjJeZSB3aXRo
IDJecC0xIDw9IGYgPD0gMl5wIHRoZW4gcCtlIGlzIHYncyBvcmRlciBvZiBtYWduaXR1ZGUuCisg
ICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIHNpZ25pZmljYW50
IGJpbmFyeSBkaWdpdHMgdiB3aWxsIGhhdmUKKyAgICAgICAgLy8gb25jZSBpdCdzIGVuY29kZWQg
aW50byBhIGRvdWJsZS4gSW4gYWxtb3N0IGFsbCBjYXNlcyB0aGlzIGlzIGVxdWFsIHRvCisgICAg
ICAgIC8vIGtTaWduaWZpY2FuZFNpemUuIFRoZSBvbmx5IGV4Y2VwdGlvbnMgYXJlIGRlbm9ybWFs
cy4gVGhleSBzdGFydCB3aXRoCisgICAgICAgIC8vIGxlYWRpbmcgemVyb2VzIGFuZCB0aGVpciBl
ZmZlY3RpdmUgc2lnbmlmaWNhbmQtc2l6ZSBpcyBoZW5jZSBzbWFsbGVyLgorICAgICAgICBzdGF0
aWMgaW50IFNpZ25pZmljYW5kU2l6ZUZvck9yZGVyT2ZNYWduaXR1ZGUoaW50IG9yZGVyKSB7Cisg
ICAgICAgICAgICBpZiAob3JkZXIgPj0gKGtEZW5vcm1hbEV4cG9uZW50ICsga1NpZ25pZmljYW5k
U2l6ZSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4ga1NpZ25pZmljYW5kU2l6ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvcmRlciA8PSBrRGVub3JtYWxFeHBvbmVudCkgcmV0
dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gb3JkZXIgLSBrRGVub3JtYWxFeHBvbmVudDsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIGRvdWJsZSBJbmZpbml0eSgpIHsKKyAg
ICAgICAgICAgIHJldHVybiBEb3VibGUoa0luZmluaXR5KS52YWx1ZSgpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBzdGF0aWMgZG91YmxlIE5hTigpIHsKKyAgICAgICAgICAgIHJldHVy
biBEb3VibGUoa05hTikudmFsdWUoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2YXRl
OgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtFeHBvbmVudEJpYXMgPSAweDNGRiArIGtQaHlz
aWNhbFNpZ25pZmljYW5kU2l6ZTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBrRGVub3JtYWxF
eHBvbmVudCA9IC1rRXhwb25lbnRCaWFzICsgMTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBr
TWF4RXhwb25lbnQgPSAweDdGRiAtIGtFeHBvbmVudEJpYXM7CisgICAgICAgIHN0YXRpYyBjb25z
dCB1aW50NjRfdCBrSW5maW5pdHkgPSBVSU5UNjRfMlBBUlRfQygweDdGRjAwMDAwLCAwMDAwMDAw
MCk7CisgICAgICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBrTmFOID0gVUlOVDY0XzJQQVJUX0Mo
MHg3RkY4MDAwMCwgMDAwMDAwMDApOworICAgICAgICAKKyAgICAgICAgY29uc3QgdWludDY0X3Qg
ZDY0XzsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyB1aW50NjRfdCBEaXlGcFRvVWludDY0KERp
eUZwIGRpeV9mcCkgeworICAgICAgICAgICAgdWludDY0X3Qgc2lnbmlmaWNhbmQgPSBkaXlfZnAu
ZigpOworICAgICAgICAgICAgaW50IGV4cG9uZW50ID0gZGl5X2ZwLmUoKTsKKyAgICAgICAgICAg
IHdoaWxlIChzaWduaWZpY2FuZCA+IGtIaWRkZW5CaXQgKyBrU2lnbmlmaWNhbmRNYXNrKSB7Cisg
ICAgICAgICAgICAgICAgc2lnbmlmaWNhbmQgPj49IDE7CisgICAgICAgICAgICAgICAgZXhwb25l
bnQrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChleHBvbmVudCA+PSBrTWF4RXhw
b25lbnQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4ga0luZmluaXR5OworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKGV4cG9uZW50IDwga0Rlbm9ybWFsRXhwb25lbnQpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdoaWxlIChl
eHBvbmVudCA+IGtEZW5vcm1hbEV4cG9uZW50ICYmIChzaWduaWZpY2FuZCAmIGtIaWRkZW5CaXQp
ID09IDApIHsKKyAgICAgICAgICAgICAgICBzaWduaWZpY2FuZCA8PD0gMTsKKyAgICAgICAgICAg
ICAgICBleHBvbmVudC0tOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdWludDY0X3QgYmlh
c2VkX2V4cG9uZW50OworICAgICAgICAgICAgaWYgKGV4cG9uZW50ID09IGtEZW5vcm1hbEV4cG9u
ZW50ICYmIChzaWduaWZpY2FuZCAmIGtIaWRkZW5CaXQpID09IDApIHsKKyAgICAgICAgICAgICAg
ICBiaWFzZWRfZXhwb25lbnQgPSAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBiaWFzZWRfZXhwb25lbnQgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oZXhwb25lbnQgKyBr
RXhwb25lbnRCaWFzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAoc2lnbmlm
aWNhbmQgJiBrU2lnbmlmaWNhbmRNYXNrKSB8CisgICAgICAgICAgICAoYmlhc2VkX2V4cG9uZW50
IDw8IGtQaHlzaWNhbFNpZ25pZmljYW5kU2l6ZSk7CisgICAgICAgIH0KKyAgICB9OworICAgIAor
fSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCisKK30gLy8gbmFtZXNwYWNlIFdURgor
CisjZW5kaWYgIC8vIERPVUJMRV9DT05WRVJTSU9OX0RPVUJMRV9IXwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2Zhc3QtZHRvYS5jYyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvZHRvYS9mYXN0LWR0b2EuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmZjMmU3ODFiZmRlMDU5
YWNkYTk5MjE4MThhZWFjNWI3Yzk5NmZhYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvZHRvYS9mYXN0LWR0b2EuY2MKQEAgLTAsMCArMSw3MzkgQEAKKy8vIENv
cHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2Ns
YWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
CisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8g
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworI2luY2x1ZGUgImZhc3QtZHRvYS5oIgorCisjaW5jbHVk
ZSAiY2FjaGVkLXBvd2Vycy5oIgorI2luY2x1ZGUgImRpeS1mcC5oIgorI2luY2x1ZGUgImRvdWJs
ZS5oIgorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsK
KyAgICAKKyAgICAvLyBUaGUgbWluaW1hbCBhbmQgbWF4aW1hbCB0YXJnZXQgZXhwb25lbnQgZGVm
aW5lIHRoZSByYW5nZSBvZiB3J3MgYmluYXJ5CisgICAgLy8gZXhwb25lbnQsIHdoZXJlICd3JyBp
cyB0aGUgcmVzdWx0IG9mIG11bHRpcGx5aW5nIHRoZSBpbnB1dCBieSBhIGNhY2hlZCBwb3dlcgor
ICAgIC8vIG9mIHRlbi4KKyAgICAvLworICAgIC8vIEEgZGlmZmVyZW50IHJhbmdlIG1pZ2h0IGJl
IGNob3NlbiBvbiBhIGRpZmZlcmVudCBwbGF0Zm9ybSwgdG8gb3B0aW1pemUgZGlnaXQKKyAgICAv
LyBnZW5lcmF0aW9uLCBidXQgYSBzbWFsbGVyIHJhbmdlIHJlcXVpcmVzIG1vcmUgcG93ZXJzIG9m
IHRlbiB0byBiZSBjYWNoZWQuCisgICAgc3RhdGljIGNvbnN0IGludCBrTWluaW1hbFRhcmdldEV4
cG9uZW50ID0gLTYwOworICAgIHN0YXRpYyBjb25zdCBpbnQga01heGltYWxUYXJnZXRFeHBvbmVu
dCA9IC0zMjsKKyAgICAKKyAgICAKKyAgICAvLyBBZGp1c3RzIHRoZSBsYXN0IGRpZ2l0IG9mIHRo
ZSBnZW5lcmF0ZWQgbnVtYmVyLCBhbmQgc2NyZWVucyBvdXQgZ2VuZXJhdGVkCisgICAgLy8gc29s
dXRpb25zIHRoYXQgbWF5IGJlIGluYWNjdXJhdGUuIEEgc29sdXRpb24gbWF5IGJlIGluYWNjdXJh
dGUgaWYgaXQgaXMKKyAgICAvLyBvdXRzaWRlIHRoZSBzYWZlIGludGVydmFsLCBvciBpZiB3ZSBj
YW5ub3QgcHJvdmUgdGhhdCBpdCBpcyBjbG9zZXIgdG8gdGhlCisgICAgLy8gaW5wdXQgdGhhbiBh
IG5laWdoYm9yaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzYW1lIGxlbmd0aC4KKyAgICAvLwor
ICAgIC8vIElucHV0OiAqIGJ1ZmZlciBjb250YWluaW5nIHRoZSBkaWdpdHMgb2YgdG9vX2hpZ2gg
LyAxMF5rYXBwYQorICAgIC8vICAgICAgICAqIHRoZSBidWZmZXIncyBsZW5ndGgKKyAgICAvLyAg
ICAgICAgKiBkaXN0YW5jZV90b29faGlnaF93ID09ICh0b29faGlnaCAtIHcpLmYoKSAqIHVuaXQK
KyAgICAvLyAgICAgICAgKiB1bnNhZmVfaW50ZXJ2YWwgPT0gKHRvb19oaWdoIC0gdG9vX2xvdyku
ZigpICogdW5pdAorICAgIC8vICAgICAgICAqIHJlc3QgPSAodG9vX2hpZ2ggLSBidWZmZXIgKiAx
MF5rYXBwYSkuZigpICogdW5pdAorICAgIC8vICAgICAgICAqIHRlbl9rYXBwYSA9IDEwXmthcHBh
ICogdW5pdAorICAgIC8vICAgICAgICAqIHVuaXQgPSB0aGUgY29tbW9uIG11bHRpcGxpZXIKKyAg
ICAvLyBPdXRwdXQ6IHJldHVybnMgdHJ1ZSBpZiB0aGUgYnVmZmVyIGlzIGd1YXJhbnRlZWQgdG8g
Y29udGFpbiB0aGUgY2xvc2VzdAorICAgIC8vICAgIHJlcHJlc2VudGFibGUgbnVtYmVyIHRvIHRo
ZSBpbnB1dC4KKyAgICAvLyAgTW9kaWZpZXMgdGhlIGdlbmVyYXRlZCBkaWdpdHMgaW4gdGhlIGJ1
ZmZlciB0byBhcHByb2FjaCAocm91bmQgdG93YXJkcykgdy4KKyAgICBzdGF0aWMgYm9vbCBSb3Vu
ZFdlZWQoVmVjdG9yPGNoYXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgZGlzdGFuY2VfdG9v
X2hpZ2hfdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgdW5zYWZlX2ludGVy
dmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCByZXN0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICB1aW50NjRfdCB0ZW5fa2FwcGEsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQ2NF90IHVuaXQpIHsKKyAgICAgICAgdWludDY0X3Qgc21hbGxfZGlzdGFuY2Ug
PSBkaXN0YW5jZV90b29faGlnaF93IC0gdW5pdDsKKyAgICAgICAgdWludDY0X3QgYmlnX2Rpc3Rh
bmNlID0gZGlzdGFuY2VfdG9vX2hpZ2hfdyArIHVuaXQ7CisgICAgICAgIC8vIExldCB3X2xvdyAg
PSB0b29faGlnaCAtIGJpZ19kaXN0YW5jZSwgYW5kCisgICAgICAgIC8vICAgICB3X2hpZ2ggPSB0
b29faGlnaCAtIHNtYWxsX2Rpc3RhbmNlLgorICAgICAgICAvLyBOb3RlOiB3X2xvdyA8IHcgPCB3
X2hpZ2gKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhlIHJlYWwgdyAoKiB1bml0KSBtdXN0IGxp
ZSBzb21ld2hlcmUgaW5zaWRlIHRoZSBpbnRlcnZhbAorICAgICAgICAvLyBdd19sb3c7IHdfaGln
aFsgKG9mdGVuIHdyaXR0ZW4gYXMgIih3X2xvdzsgd19oaWdoKSIpCisgICAgICAgIAorICAgICAg
ICAvLyBCYXNpY2FsbHkgdGhlIGJ1ZmZlciBjdXJyZW50bHkgY29udGFpbnMgYSBudW1iZXIgaW4g
dGhlIHVuc2FmZSBpbnRlcnZhbAorICAgICAgICAvLyBddG9vX2xvdzsgdG9vX2hpZ2hbIHdpdGgg
dG9vX2xvdyA8IHcgPCB0b29faGlnaAorICAgICAgICAvLworICAgICAgICAvLyAgdG9vX2hpZ2gg
LSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAt
IC0gLSAtIC0KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBediAxIHVuaXQgICAgICAg
ICAgICBeICAgICAgXiAgICAgICAgICAgICAgICAgXiAgICAgIF4KKyAgICAgICAgLy8gIGJvdW5k
YXJ5X2hpZ2ggLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAuICAgICAgLiAgICAgICAgICAgICAg
ICAgLiAgICAgIC4KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBediAxIHVuaXQgICAg
ICAgICAgICAuICAgICAgLiAgICAgICAgICAgICAgICAgLiAgICAgIC4KKyAgICAgICAgLy8gICAt
IC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICArICAtIC0gKyAtIC0gLSAtIC0g
LSAgICAgLiAgICAgIC4KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAuICAgICAgLiAgICAgICAgIF4gICAgICAgLiAgICAgIC4KKyAgICAgICAgLy8g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICBiaWdfZGlzdGFuY2Ug
IC4gICAgICAgLiAgICAgIC4KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAuICAgICAgLiAgICAgICAgIC4gICAgICAgLiAgICByZXN0CisgICAgICAg
IC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21hbGxfZGlzdGFuY2UgICAgIC4gICAg
ICAgICAuICAgICAgIC4gICAgICAuCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdiAgICAgIC4gICAgICAgICAuICAgICAgIC4gICAgICAuCisgICAg
ICAgIC8vICB3X2hpZ2ggLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gICAgIC4g
ICAgICAgICAuICAgICAgIC4gICAgICAuCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAg
XnYgMSB1bml0ICAgICAgICAgICAgICAgICAgIC4gICAgICAgICAuICAgICAgIC4gICAgICAuCisg
ICAgICAgIC8vICB3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAg
IC4gICAgICAgICAuICAgICAgIC4gICAgICAuCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAg
ICAgXnYgMSB1bml0ICAgICAgICAgICAgICAgICAgIHYgICAgICAgICAuICAgICAgIC4gICAgICAu
CisgICAgICAgIC8vICB3X2xvdyAgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g
LSAtIC0gICAgICAgICAuICAgICAgIC4gICAgICAuCisgICAgICAgIC8vICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICAgICAgIC4gICAg
ICB2CisgICAgICAgIC8vICBidWZmZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLQorICAgICAgICAvLyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAgICAgICAu
CisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzYWZlX2ludGVydmFsICAgIC4KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgICAgICAgLgorICAgICAgICAv
LyAgIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAt
IC0gLSAtICAgICAuCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXnYgMSB1bml0ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4KKyAgICAgICAgLy8gIGJvdW5kYXJ5
X2xvdyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgdW5zYWZl
X2ludGVydmFsCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXnYgMSB1bml0ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYKKyAgICAgICAgLy8gIHRvb19sb3cgIC0g
LSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAt
IC0gLSAtCisgICAgICAgIC8vCisgICAgICAgIC8vCisgICAgICAgIC8vIE5vdGUgdGhhdCB0aGUg
dmFsdWUgb2YgYnVmZmVyIGNvdWxkIGxpZSBhbnl3aGVyZSBpbnNpZGUgdGhlIHJhbmdlIHRvb19s
b3cKKyAgICAgICAgLy8gdG8gdG9vX2hpZ2guCisgICAgICAgIC8vCisgICAgICAgIC8vIGJvdW5k
YXJ5X2xvdywgYm91bmRhcnlfaGlnaCBhbmQgdyBhcmUgYXBwcm94aW1hdGlvbnMgb2YgdGhlIHJl
YWwgYm91bmRhcmllcworICAgICAgICAvLyBhbmQgdiAodGhlIGlucHV0IG51bWJlcikuIFRoZXkg
YXJlIGd1YXJhbnRlZWQgdG8gYmUgcHJlY2lzZSB1cCB0byBvbmUgdW5pdC4KKyAgICAgICAgLy8g
SW4gZmFjdCB0aGUgZXJyb3IgaXMgZ3VhcmFudGVlZCB0byBiZSBzdHJpY3RseSBsZXNzIHRoYW4g
b25lIHVuaXQuCisgICAgICAgIC8vCisgICAgICAgIC8vIEFueXRoaW5nIHRoYXQgbGllcyBvdXRz
aWRlIHRoZSB1bnNhZmUgaW50ZXJ2YWwgaXMgZ3VhcmFudGVlZCBub3QgdG8gcm91bmQKKyAgICAg
ICAgLy8gdG8gdiB3aGVuIHJlYWQgYWdhaW4uCisgICAgICAgIC8vIEFueXRoaW5nIHRoYXQgbGll
cyBpbnNpZGUgdGhlIHNhZmUgaW50ZXJ2YWwgaXMgZ3VhcmFudGVlZCB0byByb3VuZCB0byB2Cisg
ICAgICAgIC8vIHdoZW4gcmVhZCBhZ2Fpbi4KKyAgICAgICAgLy8gSWYgdGhlIG51bWJlciBpbnNp
ZGUgdGhlIGJ1ZmZlciBsaWVzIGluc2lkZSB0aGUgdW5zYWZlIGludGVydmFsIGJ1dCBub3QKKyAg
ICAgICAgLy8gaW5zaWRlIHRoZSBzYWZlIGludGVydmFsIHRoZW4gd2Ugc2ltcGx5IGRvIG5vdCBr
bm93IGFuZCBiYWlsIG91dCAocmV0dXJuaW5nCisgICAgICAgIC8vIGZhbHNlKS4KKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gU2ltaWxhcmx5IHdlIGhhdmUgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhl
IGltcHJlY2lzaW9uIG9mICd3JyB3aGVuIGZpbmRpbmcKKyAgICAgICAgLy8gdGhlIGNsb3Nlc3Qg
cmVwcmVzZW50YXRpb24gb2YgJ3cnLiBJZiB3ZSBoYXZlIHR3byBwb3RlbnRpYWwKKyAgICAgICAg
Ly8gcmVwcmVzZW50YXRpb25zLCBhbmQgb25lIGlzIGNsb3NlciB0byBib3RoIHdfbG93IGFuZCB3
X2hpZ2gsIHRoZW4gd2Uga25vdworICAgICAgICAvLyBpdCBpcyBjbG9zZXIgdG8gdGhlIGFjdHVh
bCB2YWx1ZSB2LgorICAgICAgICAvLworICAgICAgICAvLyBCeSBnZW5lcmF0aW5nIHRoZSBkaWdp
dHMgb2YgdG9vX2hpZ2ggd2UgZ290IHRoZSBsYXJnZXN0IChjbG9zZXN0IHRvCisgICAgICAgIC8v
IHRvb19oaWdoKSBidWZmZXIgdGhhdCBpcyBzdGlsbCBpbiB0aGUgdW5zYWZlIGludGVydmFsLiBJ
biB0aGUgY2FzZSB3aGVyZQorICAgICAgICAvLyB3X2hpZ2ggPCBidWZmZXIgPCB0b29faGlnaCB3
ZSB0cnkgdG8gZGVjcmVtZW50IHRoZSBidWZmZXIuCisgICAgICAgIC8vIFRoaXMgd2F5IHRoZSBi
dWZmZXIgYXBwcm9hY2hlcyAocm91bmRzIHRvd2FyZHMpIHcuCisgICAgICAgIC8vIFRoZXJlIGFy
ZSAzIGNvbmRpdGlvbnMgdGhhdCBzdG9wIHRoZSBkZWNyZW1lbnRhdGlvbiBwcm9jZXNzOgorICAg
ICAgICAvLyAgIDEpIHRoZSBidWZmZXIgaXMgYWxyZWFkeSBiZWxvdyB3X2hpZ2gKKyAgICAgICAg
Ly8gICAyKSBkZWNyZW1lbnRpbmcgdGhlIGJ1ZmZlciB3b3VsZCBtYWtlIGl0IGxlYXZlIHRoZSB1
bnNhZmUgaW50ZXJ2YWwKKyAgICAgICAgLy8gICAzKSBkZWNyZW1lbnRpbmcgdGhlIGJ1ZmZlciB3
b3VsZCB5aWVsZCBhIG51bWJlciBiZWxvdyB3X2hpZ2ggYW5kIGZhcnRoZXIKKyAgICAgICAgLy8g
ICAgICBhd2F5IHRoYW4gdGhlIGN1cnJlbnQgbnVtYmVyLiBJbiBvdGhlciB3b3JkczoKKyAgICAg
ICAgLy8gICAgICAgICAgICAgIChidWZmZXJ7LTF9IDwgd19oaWdoKSAmJiB3X2hpZ2ggLSBidWZm
ZXJ7LTF9ID4gYnVmZmVyIC0gd19oaWdoCisgICAgICAgIC8vIEluc3RlYWQgb2YgdXNpbmcgdGhl
IGJ1ZmZlciBkaXJlY3RseSB3ZSB1c2UgaXRzIGRpc3RhbmNlIHRvIHRvb19oaWdoLgorICAgICAg
ICAvLyBDb25jZXB0dWFsbHkgcmVzdCB+PSB0b29faGlnaCAtIGJ1ZmZlcgorICAgICAgICAvLyBX
ZSBuZWVkIHRvIGRvIHRoZSBmb2xsb3dpbmcgdGVzdHMgaW4gdGhpcyBvcmRlciB0byBhdm9pZCBv
dmVyLSBhbmQKKyAgICAgICAgLy8gdW5kZXJmbG93cy4KKyAgICAgICAgQVNTRVJUKHJlc3QgPD0g
dW5zYWZlX2ludGVydmFsKTsKKyAgICAgICAgd2hpbGUgKHJlc3QgPCBzbWFsbF9kaXN0YW5jZSAm
JiAgLy8gTmVnYXRlZCBjb25kaXRpb24gMQorICAgICAgICAgICAgICAgdW5zYWZlX2ludGVydmFs
IC0gcmVzdCA+PSB0ZW5fa2FwcGEgJiYgIC8vIE5lZ2F0ZWQgY29uZGl0aW9uIDIKKyAgICAgICAg
ICAgICAgIChyZXN0ICsgdGVuX2thcHBhIDwgc21hbGxfZGlzdGFuY2UgfHwgIC8vIGJ1ZmZlcnst
MX0gPiB3X2hpZ2gKKyAgICAgICAgICAgICAgICBzbWFsbF9kaXN0YW5jZSAtIHJlc3QgPj0gcmVz
dCArIHRlbl9rYXBwYSAtIHNtYWxsX2Rpc3RhbmNlKSkgeworICAgICAgICAgICAgICAgICAgIGJ1
ZmZlcltsZW5ndGggLSAxXS0tOworICAgICAgICAgICAgICAgICAgIHJlc3QgKz0gdGVuX2thcHBh
OworICAgICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gV2UgaGF2ZSBhcHByb2Fj
aGVkIHcrIGFzIG11Y2ggYXMgcG9zc2libGUuIFdlIG5vdyB0ZXN0IGlmIGFwcHJvYWNoaW5nIHct
CisgICAgICAgIC8vIHdvdWxkIHJlcXVpcmUgY2hhbmdpbmcgdGhlIGJ1ZmZlci4gSWYgeWVzLCB0
aGVuIHdlIGhhdmUgdHdvIHBvc3NpYmxlCisgICAgICAgIC8vIHJlcHJlc2VudGF0aW9ucyBjbG9z
ZSB0byB3LCBidXQgd2UgY2Fubm90IGRlY2lkZSB3aGljaCBvbmUgaXMgY2xvc2VyLgorICAgICAg
ICBpZiAocmVzdCA8IGJpZ19kaXN0YW5jZSAmJgorICAgICAgICAgICAgdW5zYWZlX2ludGVydmFs
IC0gcmVzdCA+PSB0ZW5fa2FwcGEgJiYKKyAgICAgICAgICAgIChyZXN0ICsgdGVuX2thcHBhIDwg
YmlnX2Rpc3RhbmNlIHx8CisgICAgICAgICAgICAgYmlnX2Rpc3RhbmNlIC0gcmVzdCA+IHJlc3Qg
KyB0ZW5fa2FwcGEgLSBiaWdfZGlzdGFuY2UpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gV2VlZGluZyB0ZXN0Lgor
ICAgICAgICAvLyAgIFRoZSBzYWZlIGludGVydmFsIGlzIFt0b29fbG93ICsgMiB1bHA7IHRvb19o
aWdoIC0gMiB1bHBdCisgICAgICAgIC8vICAgU2luY2UgdG9vX2xvdyA9IHRvb19oaWdoIC0gdW5z
YWZlX2ludGVydmFsIHRoaXMgaXMgZXF1aXZhbGVudCB0bworICAgICAgICAvLyAgICAgIFt0b29f
aGlnaCAtIHVuc2FmZV9pbnRlcnZhbCArIDQgdWxwOyB0b29faGlnaCAtIDIgdWxwXQorICAgICAg
ICAvLyAgIENvbmNlcHR1YWxseSB3ZSBoYXZlOiByZXN0IH49IHRvb19oaWdoIC0gYnVmZmVyCisg
ICAgICAgIHJldHVybiAoMiAqIHVuaXQgPD0gcmVzdCkgJiYgKHJlc3QgPD0gdW5zYWZlX2ludGVy
dmFsIC0gNCAqIHVuaXQpOworICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBSb3VuZHMgdGhlIGJ1
ZmZlciB1cHdhcmRzIGlmIHRoZSByZXN1bHQgaXMgY2xvc2VyIHRvIHYgYnkgcG9zc2libHkgYWRk
aW5nCisgICAgLy8gMSB0byB0aGUgYnVmZmVyLiBJZiB0aGUgcHJlY2lzaW9uIG9mIHRoZSBjYWxj
dWxhdGlvbiBpcyBub3Qgc3VmZmljaWVudCB0bworICAgIC8vIHJvdW5kIGNvcnJlY3RseSwgcmV0
dXJuIGZhbHNlLgorICAgIC8vIFRoZSByb3VuZGluZyBtaWdodCBzaGlmdCB0aGUgd2hvbGUgYnVm
ZmVyIGluIHdoaWNoIGNhc2UgdGhlIGthcHBhIGlzCisgICAgLy8gYWRqdXN0ZWQuIEZvciBleGFt
cGxlICI5OSIsIGthcHBhID0gMyBtaWdodCBiZWNvbWUgIjEwIiwga2FwcGEgPSA0LgorICAgIC8v
CisgICAgLy8gSWYgMipyZXN0ID4gdGVuX2thcHBhIHRoZW4gdGhlIGJ1ZmZlciBuZWVkcyB0byBi
ZSByb3VuZCB1cC4KKyAgICAvLyByZXN0IGNhbiBoYXZlIGFuIGVycm9yIG9mICsvLSAxIHVuaXQu
IFRoaXMgZnVuY3Rpb24gYWNjb3VudHMgZm9yIHRoZQorICAgIC8vIGltcHJlY2lzaW9uIGFuZCBy
ZXR1cm5zIGZhbHNlLCBpZiB0aGUgcm91bmRpbmcgZGlyZWN0aW9uIGNhbm5vdCBiZQorICAgIC8v
IHVuYW1iaWd1b3VzbHkgZGV0ZXJtaW5lZC4KKyAgICAvLworICAgIC8vIFByZWNvbmRpdGlvbjog
cmVzdCA8IHRlbl9rYXBwYS4KKyAgICBzdGF0aWMgYm9vbCBSb3VuZFdlZWRDb3VudGVkKFZlY3Rv
cjxjaGFyPiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVu
Z3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgcmVzdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHRlbl9rYXBwYSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHVuaXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQqIGthcHBhKSB7CisgICAgICAgIEFTU0VSVChyZXN0IDwg
dGVuX2thcHBhKTsKKyAgICAgICAgLy8gVGhlIGZvbGxvd2luZyB0ZXN0cyBhcmUgZG9uZSBpbiBh
IHNwZWNpZmljIG9yZGVyIHRvIGF2b2lkIG92ZXJmbG93cy4gVGhleQorICAgICAgICAvLyB3aWxs
IHdvcmsgY29ycmVjdGx5IHdpdGggYW55IHVpbnQ2NCB2YWx1ZXMgb2YgcmVzdCA8IHRlbl9rYXBw
YSBhbmQgdW5pdC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgdGhlIHVuaXQgaXMgdG9vIGJp
ZywgdGhlbiB3ZSBkb24ndCBrbm93IHdoaWNoIHdheSB0byByb3VuZC4gRm9yIGV4YW1wbGUKKyAg
ICAgICAgLy8gYSB1bml0IG9mIDUwIG1lYW5zIHRoYXQgdGhlIHJlYWwgbnVtYmVyIGxpZXMgd2l0
aGluIHJlc3QgKy8tIDUwLiBJZgorICAgICAgICAvLyAxMF5rYXBwYSA9PSA0MCB0aGVuIHRoZXJl
IGlzIG5vIHdheSB0byB0ZWxsIHdoaWNoIHdheSB0byByb3VuZC4KKyAgICAgICAgaWYgKHVuaXQg
Pj0gdGVuX2thcHBhKSByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIEV2ZW4gaWYgdW5pdCBpcyBq
dXN0IGhhbGYgdGhlIHNpemUgb2YgMTBea2FwcGEgd2UgYXJlIGFscmVhZHkgY29tcGxldGVseQor
ICAgICAgICAvLyBsb3N0LiAoQW5kIGFmdGVyIHRoZSBwcmV2aW91cyB0ZXN0IHdlIGtub3cgdGhh
dCB0aGUgZXhwcmVzc2lvbiB3aWxsIG5vdAorICAgICAgICAvLyBvdmVyL3VuZGVyZmxvdy4pCisg
ICAgICAgIGlmICh0ZW5fa2FwcGEgLSB1bml0IDw9IHVuaXQpIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgLy8gSWYgMiAqIChyZXN0ICsgdW5pdCkgPD0gMTBea2FwcGEgd2UgY2FuIHNhZmVseSByb3Vu
ZCBkb3duLgorICAgICAgICBpZiAoKHRlbl9rYXBwYSAtIHJlc3QgPiByZXN0KSAmJiAodGVuX2th
cHBhIC0gMiAqIHJlc3QgPj0gMiAqIHVuaXQpKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICAvLyBJZiAyICogKHJlc3QgLSB1bml0KSA+PSAxMF5rYXBwYSwg
dGhlbiB3ZSBjYW4gc2FmZWx5IHJvdW5kIHVwLgorICAgICAgICBpZiAoKHJlc3QgPiB1bml0KSAm
JiAodGVuX2thcHBhIC0gKHJlc3QgLSB1bml0KSA8PSAocmVzdCAtIHVuaXQpKSkgeworICAgICAg
ICAgICAgLy8gSW5jcmVtZW50IHRoZSBsYXN0IGRpZ2l0IHJlY3Vyc2l2ZWx5IHVudGlsIHdlIGZp
bmQgYSBub24gJzknIGRpZ2l0LgorICAgICAgICAgICAgYnVmZmVyW2xlbmd0aCAtIDFdKys7Cisg
ICAgICAgICAgICBmb3IgKGludCBpID0gbGVuZ3RoIC0gMTsgaSA+IDA7IC0taSkgeworICAgICAg
ICAgICAgICAgIGlmIChidWZmZXJbaV0gIT0gJzAnICsgMTApIGJyZWFrOworICAgICAgICAgICAg
ICAgIGJ1ZmZlcltpXSA9ICcwJzsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSAtIDFdKys7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBJZiB0aGUgZmlyc3QgZGlnaXQgaXMgbm93ICcw
JysgMTAgd2UgaGFkIGEgYnVmZmVyIHdpdGggYWxsICc5J3MuIFdpdGggdGhlCisgICAgICAgICAg
ICAvLyBleGNlcHRpb24gb2YgdGhlIGZpcnN0IGRpZ2l0IGFsbCBkaWdpdHMgYXJlIG5vdyAnMCcu
IFNpbXBseSBzd2l0Y2ggdGhlCisgICAgICAgICAgICAvLyBmaXJzdCBkaWdpdCB0byAnMScgYW5k
IGFkanVzdCB0aGUga2FwcGEuIEV4YW1wbGU6ICI5OSIgYmVjb21lcyAiMTAiIGFuZAorICAgICAg
ICAgICAgLy8gdGhlIHBvd2VyICh0aGUga2FwcGEpIGlzIGluY3JlYXNlZC4KKyAgICAgICAgICAg
IGlmIChidWZmZXJbMF0gPT0gJzAnICsgMTApIHsKKyAgICAgICAgICAgICAgICBidWZmZXJbMF0g
PSAnMSc7CisgICAgICAgICAgICAgICAgKCprYXBwYSkgKz0gMTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgCisgICAgCisgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IGtUZW40ID0gMTAw
MDA7CisgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IGtUZW41ID0gMTAwMDAwOworICAgIHN0YXRp
YyBjb25zdCB1aW50MzJfdCBrVGVuNiA9IDEwMDAwMDA7CisgICAgc3RhdGljIGNvbnN0IHVpbnQz
Ml90IGtUZW43ID0gMTAwMDAwMDA7CisgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IGtUZW44ID0g
MTAwMDAwMDAwOworICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBrVGVuOSA9IDEwMDAwMDAwMDA7
CisgICAgCisgICAgLy8gUmV0dXJucyB0aGUgYmlnZ2VzdCBwb3dlciBvZiB0ZW4gdGhhdCBpcyBs
ZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGdpdmVuCisgICAgLy8gbnVtYmVyLiBXZSBmdXJ0aGVy
bW9yZSByZWNlaXZlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBiaXRzICdudW1iZXInIGhhcy4KKyAg
ICAvLyBJZiBudW1iZXJfYml0cyA9PSAwIHRoZW4gMF4tMSBpcyByZXR1cm5lZAorICAgIC8vIFRo
ZSBudW1iZXIgb2YgYml0cyBtdXN0IGJlIDw9IDMyLgorICAgIC8vIFByZWNvbmRpdGlvbjogbnVt
YmVyIDwgKDEgPDwgKG51bWJlcl9iaXRzICsgMSkpLgorICAgIHN0YXRpYyB2b2lkIEJpZ2dlc3RQ
b3dlclRlbih1aW50MzJfdCBudW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBudW1iZXJfYml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMy
X3QqIHBvd2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGV4cG9uZW50
KSB7CisgICAgICAgIEFTU0VSVChudW1iZXIgPCAoMSA8PCAobnVtYmVyX2JpdHMgKyAxKSkpOwor
ICAgICAgICAKKyAgICAgICAgc3dpdGNoIChudW1iZXJfYml0cykgeworICAgICAgICAgICAgY2Fz
ZSAzMjoKKyAgICAgICAgICAgIGNhc2UgMzE6CisgICAgICAgICAgICBjYXNlIDMwOgorICAgICAg
ICAgICAgICAgIGlmIChrVGVuOSA8PSBudW1iZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgKnBv
d2VyID0ga1Rlbjk7CisgICAgICAgICAgICAgICAgICAgICpleHBvbmVudCA9IDk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gIC8vIGVsc2UgZmFsbHRocm91
Z2gKKyAgICAgICAgICAgIGNhc2UgMjk6CisgICAgICAgICAgICBjYXNlIDI4OgorICAgICAgICAg
ICAgY2FzZSAyNzoKKyAgICAgICAgICAgICAgICBpZiAoa1RlbjggPD0gbnVtYmVyKSB7CisgICAg
ICAgICAgICAgICAgICAgICpwb3dlciA9IGtUZW44OworICAgICAgICAgICAgICAgICAgICAqZXhw
b25lbnQgPSA4OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
ICAvLyBlbHNlIGZhbGx0aHJvdWdoCisgICAgICAgICAgICBjYXNlIDI2OgorICAgICAgICAgICAg
Y2FzZSAyNToKKyAgICAgICAgICAgIGNhc2UgMjQ6CisgICAgICAgICAgICAgICAgaWYgKGtUZW43
IDw9IG51bWJlcikgeworICAgICAgICAgICAgICAgICAgICAqcG93ZXIgPSBrVGVuNzsKKyAgICAg
ICAgICAgICAgICAgICAgKmV4cG9uZW50ID0gNzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfSAgLy8gZWxzZSBmYWxsdGhyb3VnaAorICAgICAgICAgICAgY2Fz
ZSAyMzoKKyAgICAgICAgICAgIGNhc2UgMjI6CisgICAgICAgICAgICBjYXNlIDIxOgorICAgICAg
ICAgICAgY2FzZSAyMDoKKyAgICAgICAgICAgICAgICBpZiAoa1RlbjYgPD0gbnVtYmVyKSB7Cisg
ICAgICAgICAgICAgICAgICAgICpwb3dlciA9IGtUZW42OworICAgICAgICAgICAgICAgICAgICAq
ZXhwb25lbnQgPSA2OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9ICAvLyBlbHNlIGZhbGx0aHJvdWdoCisgICAgICAgICAgICBjYXNlIDE5OgorICAgICAgICAg
ICAgY2FzZSAxODoKKyAgICAgICAgICAgIGNhc2UgMTc6CisgICAgICAgICAgICAgICAgaWYgKGtU
ZW41IDw9IG51bWJlcikgeworICAgICAgICAgICAgICAgICAgICAqcG93ZXIgPSBrVGVuNTsKKyAg
ICAgICAgICAgICAgICAgICAgKmV4cG9uZW50ID0gNTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfSAgLy8gZWxzZSBmYWxsdGhyb3VnaAorICAgICAgICAgICAg
Y2FzZSAxNjoKKyAgICAgICAgICAgIGNhc2UgMTU6CisgICAgICAgICAgICBjYXNlIDE0OgorICAg
ICAgICAgICAgICAgIGlmIChrVGVuNCA8PSBudW1iZXIpIHsKKyAgICAgICAgICAgICAgICAgICAg
KnBvd2VyID0ga1RlbjQ7CisgICAgICAgICAgICAgICAgICAgICpleHBvbmVudCA9IDQ7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gIC8vIGVsc2UgZmFsbHRo
cm91Z2gKKyAgICAgICAgICAgIGNhc2UgMTM6CisgICAgICAgICAgICBjYXNlIDEyOgorICAgICAg
ICAgICAgY2FzZSAxMToKKyAgICAgICAgICAgIGNhc2UgMTA6CisgICAgICAgICAgICAgICAgaWYg
KDEwMDAgPD0gbnVtYmVyKSB7CisgICAgICAgICAgICAgICAgICAgICpwb3dlciA9IDEwMDA7Cisg
ICAgICAgICAgICAgICAgICAgICpleHBvbmVudCA9IDM7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0gIC8vIGVsc2UgZmFsbHRocm91Z2gKKyAgICAgICAgICAg
IGNhc2UgOToKKyAgICAgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIGNhc2UgNzoKKyAgICAg
ICAgICAgICAgICBpZiAoMTAwIDw9IG51bWJlcikgeworICAgICAgICAgICAgICAgICAgICAqcG93
ZXIgPSAxMDA7CisgICAgICAgICAgICAgICAgICAgICpleHBvbmVudCA9IDI7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gIC8vIGVsc2UgZmFsbHRocm91Z2gK
KyAgICAgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgIGNh
c2UgNDoKKyAgICAgICAgICAgICAgICBpZiAoMTAgPD0gbnVtYmVyKSB7CisgICAgICAgICAgICAg
ICAgICAgICpwb3dlciA9IDEwOworICAgICAgICAgICAgICAgICAgICAqZXhwb25lbnQgPSAxOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9ICAvLyBlbHNlIGZh
bGx0aHJvdWdoCisgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICBjYXNlIDI6CisgICAg
ICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgaWYgKDEgPD0gbnVtYmVyKSB7CisgICAg
ICAgICAgICAgICAgICAgICpwb3dlciA9IDE7CisgICAgICAgICAgICAgICAgICAgICpleHBvbmVu
dCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gIC8v
IGVsc2UgZmFsbHRocm91Z2gKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAq
cG93ZXIgPSAwOworICAgICAgICAgICAgICAgICpleHBvbmVudCA9IC0xOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAvLyBGb2xs
b3dpbmcgYXNzaWdubWVudHMgYXJlIGhlcmUgdG8gc2lsZW5jZSBjb21waWxlciB3YXJuaW5ncy4K
KyAgICAgICAgICAgICAgICAqcG93ZXIgPSAwOworICAgICAgICAgICAgICAgICpleHBvbmVudCA9
IDA7CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICAKKyAgICAvLyBHZW5lcmF0ZXMgdGhlIGRpZ2l0cyBvZiBpbnB1dCBudW1iZXIgdy4K
KyAgICAvLyB3IGlzIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIChEaXlGcCksIGNvbnNpc3Rpbmcg
b2YgYSBzaWduaWZpY2FuZCBhbmQgYW4KKyAgICAvLyBleHBvbmVudC4gSXRzIGV4cG9uZW50IGlz
IGJvdW5kZWQgYnkga01pbmltYWxUYXJnZXRFeHBvbmVudCBhbmQKKyAgICAvLyBrTWF4aW1hbFRh
cmdldEV4cG9uZW50LgorICAgIC8vICAgICAgIEhlbmNlIC02MCA8PSB3LmUoKSA8PSAtMzIuCisg
ICAgLy8KKyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIGl0IGZhaWxzLCBpbiB3aGljaCBjYXNlIHRo
ZSBnZW5lcmF0ZWQgZGlnaXRzIGluIHRoZSBidWZmZXIKKyAgICAvLyBzaG91bGQgbm90IGJlIHVz
ZWQuCisgICAgLy8gUHJlY29uZGl0aW9uczoKKyAgICAvLyAgKiBsb3csIHcgYW5kIGhpZ2ggYXJl
IGNvcnJlY3QgdXAgdG8gMSB1bHAgKHVuaXQgaW4gdGhlIGxhc3QgcGxhY2UpLiBUaGF0CisgICAg
Ly8gICAgaXMsIHRoZWlyIGVycm9yIG11c3QgYmUgbGVzcyB0aGFuIGEgdW5pdCBvZiB0aGVpciBs
YXN0IGRpZ2l0cy4KKyAgICAvLyAgKiBsb3cuZSgpID09IHcuZSgpID09IGhpZ2guZSgpCisgICAg
Ly8gICogbG93IDwgdyA8IGhpZ2gsIGFuZCB0YWtpbmcgaW50byBhY2NvdW50IHRoZWlyIGVycm9y
OiBsb3d+IDw9IGhpZ2h+CisgICAgLy8gICoga01pbmltYWxUYXJnZXRFeHBvbmVudCA8PSB3LmUo
KSA8PSBrTWF4aW1hbFRhcmdldEV4cG9uZW50CisgICAgLy8gUG9zdGNvbmRpdGlvbnM6IHJldHVy
bnMgZmFsc2UgaWYgcHJvY2VkdXJlIGZhaWxzLgorICAgIC8vICAgb3RoZXJ3aXNlOgorICAgIC8v
ICAgICAqIGJ1ZmZlciBpcyBub3QgbnVsbC10ZXJtaW5hdGVkLCBidXQgbGVuIGNvbnRhaW5zIHRo
ZSBudW1iZXIgb2YgZGlnaXRzLgorICAgIC8vICAgICAqIGJ1ZmZlciBjb250YWlucyB0aGUgc2hv
cnRlc3QgcG9zc2libGUgZGVjaW1hbCBkaWdpdC1zZXF1ZW5jZQorICAgIC8vICAgICAgIHN1Y2gg
dGhhdCBMT1cgPCBidWZmZXIgKiAxMF5rYXBwYSA8IEhJR0gsIHdoZXJlIExPVyBhbmQgSElHSCBh
cmUgdGhlCisgICAgLy8gICAgICAgY29ycmVjdCB2YWx1ZXMgb2YgbG93IGFuZCBoaWdoICh3aXRo
b3V0IHRoZWlyIGVycm9yKS4KKyAgICAvLyAgICAgKiBpZiBtb3JlIHRoYW4gb25lIGRlY2ltYWwg
cmVwcmVzZW50YXRpb24gZ2l2ZXMgdGhlIG1pbmltYWwgbnVtYmVyIG9mCisgICAgLy8gICAgICAg
ZGVjaW1hbCBkaWdpdHMgdGhlbiB0aGUgb25lIGNsb3Nlc3QgdG8gVyAod2hlcmUgVyBpcyB0aGUg
Y29ycmVjdCB2YWx1ZQorICAgIC8vICAgICAgIG9mIHcpIGlzIGNob3Nlbi4KKyAgICAvLyBSZW1h
cms6IHRoaXMgcHJvY2VkdXJlIHRha2VzIGludG8gYWNjb3VudCB0aGUgaW1wcmVjaXNpb24gb2Yg
aXRzIGlucHV0CisgICAgLy8gICBudW1iZXJzLiBJZiB0aGUgcHJlY2lzaW9uIGlzIG5vdCBlbm91
Z2ggdG8gZ3VhcmFudGVlIGFsbCB0aGUgcG9zdGNvbmRpdGlvbnMKKyAgICAvLyAgIHRoZW4gZmFs
c2UgaXMgcmV0dXJuZWQuIFRoaXMgdXN1YWxseSBoYXBwZW5zIHJhcmVseSAofjAuNSUpLgorICAg
IC8vCisgICAgLy8gU2F5LCBmb3IgdGhlIHNha2Ugb2YgZXhhbXBsZSwgdGhhdAorICAgIC8vICAg
dy5lKCkgPT0gLTQ4LCBhbmQgdy5mKCkgPT0gMHgxMjM0NTY3ODkwYWJjZGVmCisgICAgLy8gdydz
IHZhbHVlIGNhbiBiZSBjb21wdXRlZCBieSB3LmYoKSAqIDJedy5lKCkKKyAgICAvLyBXZSBjYW4g
b2J0YWluIHcncyBpbnRlZ3JhbCBkaWdpdHMgYnkgc2ltcGx5IHNoaWZ0aW5nIHcuZigpIGJ5IC13
LmUoKS4KKyAgICAvLyAgLT4gdydzIGludGVncmFsIHBhcnQgaXMgMHgxMjM0CisgICAgLy8gIHcn
cyBmcmFjdGlvbmFsIHBhcnQgaXMgdGhlcmVmb3JlIDB4NTY3ODkwYWJjZGVmLgorICAgIC8vIFBy
aW50aW5nIHcncyBpbnRlZ3JhbCBwYXJ0IGlzIGVhc3kgKHNpbXBseSBwcmludCAweDEyMzQgaW4g
ZGVjaW1hbCkuCisgICAgLy8gSW4gb3JkZXIgdG8gcHJpbnQgaXRzIGZyYWN0aW9uIHdlIHJlcGVh
dGVkbHkgbXVsdGlwbHkgdGhlIGZyYWN0aW9uIGJ5IDEwIGFuZAorICAgIC8vIGdldCBlYWNoIGRp
Z2l0LiBFeGFtcGxlIHRoZSBmaXJzdCBkaWdpdCBhZnRlciB0aGUgcG9pbnQgd291bGQgYmUgY29t
cHV0ZWQgYnkKKyAgICAvLyAgICgweDU2Nzg5MGFiY2RlZiAqIDEwKSA+PiA0OC4gLT4gMworICAg
IC8vIFRoZSB3aG9sZSB0aGluZyBiZWNvbWVzIHNsaWdodGx5IG1vcmUgY29tcGxpY2F0ZWQgYmVj
YXVzZSB3ZSB3YW50IHRvIHN0b3AKKyAgICAvLyBvbmNlIHdlIGhhdmUgZW5vdWdoIGRpZ2l0cy4g
VGhhdCBpcywgb25jZSB0aGUgZGlnaXRzIGluc2lkZSB0aGUgYnVmZmVyCisgICAgLy8gcmVwcmVz
ZW50ICd3JyB3ZSBjYW4gc3RvcC4gRXZlcnl0aGluZyBpbnNpZGUgdGhlIGludGVydmFsIGxvdyAt
IGhpZ2gKKyAgICAvLyByZXByZXNlbnRzIHcuIEhvd2V2ZXIgd2UgaGF2ZSB0byBwYXkgYXR0ZW50
aW9uIHRvIGxvdywgaGlnaCBhbmQgdydzCisgICAgLy8gaW1wcmVjaXNpb24uCisgICAgc3RhdGlj
IGJvb2wgRGlnaXRHZW4oRGl5RnAgbG93LAorICAgICAgICAgICAgICAgICAgICAgICAgIERpeUZw
IHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgRGl5RnAgaGlnaCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
IGludCogbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCoga2FwcGEpIHsKKyAg
ICAgICAgQVNTRVJUKGxvdy5lKCkgPT0gdy5lKCkgJiYgdy5lKCkgPT0gaGlnaC5lKCkpOworICAg
ICAgICBBU1NFUlQobG93LmYoKSArIDEgPD0gaGlnaC5mKCkgLSAxKTsKKyAgICAgICAgQVNTRVJU
KGtNaW5pbWFsVGFyZ2V0RXhwb25lbnQgPD0gdy5lKCkgJiYgdy5lKCkgPD0ga01heGltYWxUYXJn
ZXRFeHBvbmVudCk7CisgICAgICAgIC8vIGxvdywgdyBhbmQgaGlnaCBhcmUgaW1wcmVjaXNlLCBi
dXQgYnkgbGVzcyB0aGFuIG9uZSB1bHAgKHVuaXQgaW4gdGhlIGxhc3QKKyAgICAgICAgLy8gcGxh
Y2UpLgorICAgICAgICAvLyBJZiB3ZSByZW1vdmUgKHJlc3AuIGFkZCkgMSB1bHAgZnJvbSBsb3cg
KHJlc3AuIGhpZ2gpIHdlIGFyZSBjZXJ0YWluIHRoYXQKKyAgICAgICAgLy8gdGhlIG5ldyBudW1i
ZXJzIGFyZSBvdXRzaWRlIG9mIHRoZSBpbnRlcnZhbCB3ZSB3YW50IHRoZSBmaW5hbAorICAgICAg
ICAvLyByZXByZXNlbnRhdGlvbiB0byBsaWUgaW4uCisgICAgICAgIC8vIEludmVyc2VseSBhZGRp
bmcgKHJlc3AuIHJlbW92aW5nKSAxIHVscCBmcm9tIGxvdyAocmVzcC4gaGlnaCkgd291bGQgeWll
bGQKKyAgICAgICAgLy8gbnVtYmVycyB0aGF0IGFyZSBjZXJ0YWluIHRvIGxpZSBpbiB0aGUgaW50
ZXJ2YWwuIFdlIHdpbGwgdXNlIHRoaXMgZmFjdAorICAgICAgICAvLyBsYXRlciBvbi4KKyAgICAg
ICAgLy8gV2Ugd2lsbCBub3cgc3RhcnQgYnkgZ2VuZXJhdGluZyB0aGUgZGlnaXRzIHdpdGhpbiB0
aGUgdW5jZXJ0YWluCisgICAgICAgIC8vIGludGVydmFsLiBMYXRlciB3ZSB3aWxsIHdlZWQgb3V0
IHJlcHJlc2VudGF0aW9ucyB0aGF0IGxpZSBvdXRzaWRlIHRoZSBzYWZlCisgICAgICAgIC8vIGlu
dGVydmFsIGFuZCB0aHVzIF9taWdodF8gbGllIG91dHNpZGUgdGhlIGNvcnJlY3QgaW50ZXJ2YWwu
CisgICAgICAgIHVpbnQ2NF90IHVuaXQgPSAxOworICAgICAgICBEaXlGcCB0b29fbG93ID0gRGl5
RnAobG93LmYoKSAtIHVuaXQsIGxvdy5lKCkpOworICAgICAgICBEaXlGcCB0b29faGlnaCA9IERp
eUZwKGhpZ2guZigpICsgdW5pdCwgaGlnaC5lKCkpOworICAgICAgICAvLyB0b29fbG93IGFuZCB0
b29faGlnaCBhcmUgZ3VhcmFudGVlZCB0byBsaWUgb3V0c2lkZSB0aGUgaW50ZXJ2YWwgd2Ugd2Fu
dCB0aGUKKyAgICAgICAgLy8gZ2VuZXJhdGVkIG51bWJlciBpbi4KKyAgICAgICAgRGl5RnAgdW5z
YWZlX2ludGVydmFsID0gRGl5RnA6Ok1pbnVzKHRvb19oaWdoLCB0b29fbG93KTsKKyAgICAgICAg
Ly8gV2Ugbm93IGN1dCB0aGUgaW5wdXQgbnVtYmVyIGludG8gdHdvIHBhcnRzOiB0aGUgaW50ZWdy
YWwgZGlnaXRzIGFuZCB0aGUKKyAgICAgICAgLy8gZnJhY3Rpb25hbHMuIFdlIHdpbGwgbm90IHdy
aXRlIGFueSBkZWNpbWFsIHNlcGFyYXRvciB0aG91Z2gsIGJ1dCBhZGFwdAorICAgICAgICAvLyBr
YXBwYSBpbnN0ZWFkLgorICAgICAgICAvLyBSZW1pbmRlcjogd2UgYXJlIGN1cnJlbnRseSBjb21w
dXRpbmcgdGhlIGRpZ2l0cyAoc3RvcmVkIGluc2lkZSB0aGUgYnVmZmVyKQorICAgICAgICAvLyBz
dWNoIHRoYXQ6ICAgdG9vX2xvdyA8IGJ1ZmZlciAqIDEwXmthcHBhIDwgdG9vX2hpZ2gKKyAgICAg
ICAgLy8gV2UgdXNlIHRvb19oaWdoIGZvciB0aGUgZGlnaXRfZ2VuZXJhdGlvbiBhbmQgc3RvcCBh
cyBzb29uIGFzIHBvc3NpYmxlLgorICAgICAgICAvLyBJZiB3ZSBzdG9wIGVhcmx5IHdlIGVmZmVj
dGl2ZWx5IHJvdW5kIGRvd24uCisgICAgICAgIERpeUZwIG9uZSA9IERpeUZwKHN0YXRpY19jYXN0
PHVpbnQ2NF90PigxKSA8PCAtdy5lKCksIHcuZSgpKTsKKyAgICAgICAgLy8gRGl2aXNpb24gYnkg
b25lIGlzIGEgc2hpZnQuCisgICAgICAgIHVpbnQzMl90IGludGVncmFscyA9IHN0YXRpY19jYXN0
PHVpbnQzMl90Pih0b29faGlnaC5mKCkgPj4gLW9uZS5lKCkpOworICAgICAgICAvLyBNb2R1bG8g
Ynkgb25lIGlzIGFuIGFuZC4KKyAgICAgICAgdWludDY0X3QgZnJhY3Rpb25hbHMgPSB0b29faGln
aC5mKCkgJiAob25lLmYoKSAtIDEpOworICAgICAgICB1aW50MzJfdCBkaXZpc29yOworICAgICAg
ICBpbnQgZGl2aXNvcl9leHBvbmVudDsKKyAgICAgICAgQmlnZ2VzdFBvd2VyVGVuKGludGVncmFs
cywgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUgLSAoLW9uZS5lKCkpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgJmRpdmlzb3IsICZkaXZpc29yX2V4cG9uZW50KTsKKyAgICAgICAgKmthcHBhID0g
ZGl2aXNvcl9leHBvbmVudCArIDE7CisgICAgICAgICpsZW5ndGggPSAwOworICAgICAgICAvLyBM
b29wIGludmFyaWFudDogYnVmZmVyID0gdG9vX2hpZ2ggLyAxMF5rYXBwYSAgKGludGVnZXIgZGl2
aXNpb24pCisgICAgICAgIC8vIFRoZSBpbnZhcmlhbnQgaG9sZHMgZm9yIHRoZSBmaXJzdCBpdGVy
YXRpb246IGthcHBhIGhhcyBiZWVuIGluaXRpYWxpemVkCisgICAgICAgIC8vIHdpdGggdGhlIGRp
dmlzb3IgZXhwb25lbnQgKyAxLiBBbmQgdGhlIGRpdmlzb3IgaXMgdGhlIGJpZ2dlc3QgcG93ZXIg
b2YgdGVuCisgICAgICAgIC8vIHRoYXQgaXMgc21hbGxlciB0aGFuIGludGVncmFscy4KKyAgICAg
ICAgd2hpbGUgKCprYXBwYSA+IDApIHsKKyAgICAgICAgICAgIGludCBkaWdpdCA9IGludGVncmFs
cyAvIGRpdmlzb3I7CisgICAgICAgICAgICBidWZmZXJbKmxlbmd0aF0gPSAnMCcgKyBkaWdpdDsK
KyAgICAgICAgICAgICgqbGVuZ3RoKSsrOworICAgICAgICAgICAgaW50ZWdyYWxzICU9IGRpdmlz
b3I7CisgICAgICAgICAgICAoKmthcHBhKS0tOworICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGth
cHBhIG5vdyBlcXVhbHMgdGhlIGV4cG9uZW50IG9mIHRoZSBkaXZpc29yIGFuZCB0aGF0IHRoZQor
ICAgICAgICAgICAgLy8gaW52YXJpYW50IHRodXMgaG9sZHMgYWdhaW4uCisgICAgICAgICAgICB1
aW50NjRfdCByZXN0ID0KKyAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1aW50NjRfdD4oaW50ZWdy
YWxzKSA8PCAtb25lLmUoKSkgKyBmcmFjdGlvbmFsczsKKyAgICAgICAgICAgIC8vIEludmFyaWFu
dDogdG9vX2hpZ2ggPSBidWZmZXIgKiAxMF5rYXBwYSArIERpeUZwKHJlc3QsIG9uZS5lKCkpCisg
ICAgICAgICAgICAvLyBSZW1pbmRlcjogdW5zYWZlX2ludGVydmFsLmUoKSA9PSBvbmUuZSgpCisg
ICAgICAgICAgICBpZiAocmVzdCA8IHVuc2FmZV9pbnRlcnZhbC5mKCkpIHsKKyAgICAgICAgICAg
ICAgICAvLyBSb3VuZGluZyBkb3duIChieSBub3QgZW1pdHRpbmcgdGhlIHJlbWFpbmluZyBkaWdp
dHMpIHlpZWxkcyBhIG51bWJlcgorICAgICAgICAgICAgICAgIC8vIHRoYXQgbGllcyB3aXRoaW4g
dGhlIHVuc2FmZSBpbnRlcnZhbC4KKyAgICAgICAgICAgICAgICByZXR1cm4gUm91bmRXZWVkKGJ1
ZmZlciwgKmxlbmd0aCwgRGl5RnA6Ok1pbnVzKHRvb19oaWdoLCB3KS5mKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNhZmVfaW50ZXJ2YWwuZigpLCByZXN0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGRpdmlzb3Ip
IDw8IC1vbmUuZSgpLCB1bml0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRpdmlzb3Ig
Lz0gMTA7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBpbnRlZ3JhbHMgaGF2
ZSBiZWVuIGdlbmVyYXRlZC4gV2UgYXJlIGF0IHRoZSBwb2ludCBvZiB0aGUgZGVjaW1hbAorICAg
ICAgICAvLyBzZXBhcmF0b3IuIEluIHRoZSBmb2xsb3dpbmcgbG9vcCB3ZSBzaW1wbHkgbXVsdGlw
bHkgdGhlIHJlbWFpbmluZyBkaWdpdHMgYnkKKyAgICAgICAgLy8gMTAgYW5kIGRpdmlkZSBieSBv
bmUuIFdlIGp1c3QgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRvIG11bHRpcGx5IGFzc29jaWF0ZWQK
KyAgICAgICAgLy8gZGF0YSAobGlrZSB0aGUgaW50ZXJ2YWwgb3IgJ3VuaXQnKSwgdG9vLgorICAg
ICAgICAvLyBOb3RlIHRoYXQgdGhlIG11bHRpcGxpY2F0aW9uIGJ5IDEwIGRvZXMgbm90IG92ZXJm
bG93LCBiZWNhdXNlIHcuZSA+PSAtNjAKKyAgICAgICAgLy8gYW5kIHRodXMgb25lLmUgPj0gLTYw
LgorICAgICAgICBBU1NFUlQob25lLmUoKSA+PSAtNjApOworICAgICAgICBBU1NFUlQoZnJhY3Rp
b25hbHMgPCBvbmUuZigpKTsKKyAgICAgICAgQVNTRVJUKFVJTlQ2NF8yUEFSVF9DKDB4RkZGRkZG
RkYsIEZGRkZGRkZGKSAvIDEwID49IG9uZS5mKCkpOworICAgICAgICB3aGlsZSAodHJ1ZSkgewor
ICAgICAgICAgICAgZnJhY3Rpb25hbHMgKj0gMTA7CisgICAgICAgICAgICB1bml0ICo9IDEwOwor
ICAgICAgICAgICAgdW5zYWZlX2ludGVydmFsLnNldF9mKHVuc2FmZV9pbnRlcnZhbC5mKCkgKiAx
MCk7CisgICAgICAgICAgICAvLyBJbnRlZ2VyIGRpdmlzaW9uIGJ5IG9uZS4KKyAgICAgICAgICAg
IGludCBkaWdpdCA9IHN0YXRpY19jYXN0PGludD4oZnJhY3Rpb25hbHMgPj4gLW9uZS5lKCkpOwor
ICAgICAgICAgICAgYnVmZmVyWypsZW5ndGhdID0gJzAnICsgZGlnaXQ7CisgICAgICAgICAgICAo
Kmxlbmd0aCkrKzsKKyAgICAgICAgICAgIGZyYWN0aW9uYWxzICY9IG9uZS5mKCkgLSAxOyAgLy8g
TW9kdWxvIGJ5IG9uZS4KKyAgICAgICAgICAgICgqa2FwcGEpLS07CisgICAgICAgICAgICBpZiAo
ZnJhY3Rpb25hbHMgPCB1bnNhZmVfaW50ZXJ2YWwuZigpKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIFJvdW5kV2VlZChidWZmZXIsICpsZW5ndGgsIERpeUZwOjpNaW51cyh0b29faGlnaCwgdyku
ZigpICogdW5pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2FmZV9pbnRl
cnZhbC5mKCksIGZyYWN0aW9uYWxzLCBvbmUuZigpLCB1bml0KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICAKKyAgICAvLyBHZW5lcmF0ZXMgKGF0IG1v
c3QpIHJlcXVlc3RlZF9kaWdpdHMgZGlnaXRzIG9mIGlucHV0IG51bWJlciB3LgorICAgIC8vIHcg
aXMgYSBmbG9hdGluZy1wb2ludCBudW1iZXIgKERpeUZwKSwgY29uc2lzdGluZyBvZiBhIHNpZ25p
ZmljYW5kIGFuZCBhbgorICAgIC8vIGV4cG9uZW50LiBJdHMgZXhwb25lbnQgaXMgYm91bmRlZCBi
eSBrTWluaW1hbFRhcmdldEV4cG9uZW50IGFuZAorICAgIC8vIGtNYXhpbWFsVGFyZ2V0RXhwb25l
bnQuCisgICAgLy8gICAgICAgSGVuY2UgLTYwIDw9IHcuZSgpIDw9IC0zMi4KKyAgICAvLworICAg
IC8vIFJldHVybnMgZmFsc2UgaWYgaXQgZmFpbHMsIGluIHdoaWNoIGNhc2UgdGhlIGdlbmVyYXRl
ZCBkaWdpdHMgaW4gdGhlIGJ1ZmZlcgorICAgIC8vIHNob3VsZCBub3QgYmUgdXNlZC4KKyAgICAv
LyBQcmVjb25kaXRpb25zOgorICAgIC8vICAqIHcgaXMgY29ycmVjdCB1cCB0byAxIHVscCAodW5p
dCBpbiB0aGUgbGFzdCBwbGFjZSkuIFRoYXQKKyAgICAvLyAgICBpcywgaXRzIGVycm9yIG11c3Qg
YmUgc3RyaWN0bHkgbGVzcyB0aGFuIGEgdW5pdCBvZiBpdHMgbGFzdCBkaWdpdC4KKyAgICAvLyAg
KiBrTWluaW1hbFRhcmdldEV4cG9uZW50IDw9IHcuZSgpIDw9IGtNYXhpbWFsVGFyZ2V0RXhwb25l
bnQKKyAgICAvLworICAgIC8vIFBvc3Rjb25kaXRpb25zOiByZXR1cm5zIGZhbHNlIGlmIHByb2Nl
ZHVyZSBmYWlscy4KKyAgICAvLyAgIG90aGVyd2lzZToKKyAgICAvLyAgICAgKiBidWZmZXIgaXMg
bm90IG51bGwtdGVybWluYXRlZCwgYnV0IGxlbmd0aCBjb250YWlucyB0aGUgbnVtYmVyIG9mCisg
ICAgLy8gICAgICAgZGlnaXRzLgorICAgIC8vICAgICAqIHRoZSByZXByZXNlbnRhdGlvbiBpbiBi
dWZmZXIgaXMgdGhlIG1vc3QgcHJlY2lzZSByZXByZXNlbnRhdGlvbiBvZgorICAgIC8vICAgICAg
IHJlcXVlc3RlZF9kaWdpdHMgZGlnaXRzLgorICAgIC8vICAgICAqIGJ1ZmZlciBjb250YWlucyBh
dCBtb3N0IHJlcXVlc3RlZF9kaWdpdHMgZGlnaXRzIG9mIHcuIElmIHRoZXJlIGFyZSBsZXNzCisg
ICAgLy8gICAgICAgdGhhbiByZXF1ZXN0ZWRfZGlnaXRzIGRpZ2l0cyB0aGVuIHNvbWUgdHJhaWxp
bmcgJzAncyBoYXZlIGJlZW4gcmVtb3ZlZC4KKyAgICAvLyAgICAgKiBrYXBwYSBpcyBzdWNoIHRo
YXQKKyAgICAvLyAgICAgICAgICAgIHcgPSBidWZmZXIgKiAxMF5rYXBwYSArIGVwcyB3aXRoIHxl
cHN8IDwgMTBea2FwcGEgLyAyLgorICAgIC8vCisgICAgLy8gUmVtYXJrOiBUaGlzIHByb2NlZHVy
ZSB0YWtlcyBpbnRvIGFjY291bnQgdGhlIGltcHJlY2lzaW9uIG9mIGl0cyBpbnB1dAorICAgIC8v
ICAgbnVtYmVycy4gSWYgdGhlIHByZWNpc2lvbiBpcyBub3QgZW5vdWdoIHRvIGd1YXJhbnRlZSBh
bGwgdGhlIHBvc3Rjb25kaXRpb25zCisgICAgLy8gICB0aGVuIGZhbHNlIGlzIHJldHVybmVkLiBU
aGlzIHVzdWFsbHkgaGFwcGVucyByYXJlbHksIGJ1dCB0aGUgZmFpbHVyZS1yYXRlCisgICAgLy8g
ICBpbmNyZWFzZXMgd2l0aCBoaWdoZXIgcmVxdWVzdGVkX2RpZ2l0cy4KKyAgICBzdGF0aWMgYm9v
bCBEaWdpdEdlbkNvdW50ZWQoRGl5RnAgdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IHJlcXVlc3RlZF9kaWdpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFZlY3RvcjxjaGFyPiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCogbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGthcHBhKSB7
CisgICAgICAgIEFTU0VSVChrTWluaW1hbFRhcmdldEV4cG9uZW50IDw9IHcuZSgpICYmIHcuZSgp
IDw9IGtNYXhpbWFsVGFyZ2V0RXhwb25lbnQpOworICAgICAgICBBU1NFUlQoa01pbmltYWxUYXJn
ZXRFeHBvbmVudCA+PSAtNjApOworICAgICAgICBBU1NFUlQoa01heGltYWxUYXJnZXRFeHBvbmVu
dCA8PSAtMzIpOworICAgICAgICAvLyB3IGlzIGFzc3VtZWQgdG8gaGF2ZSBhbiBlcnJvciBsZXNz
IHRoYW4gMSB1bml0LiBXaGVuZXZlciB3IGlzIHNjYWxlZCB3ZQorICAgICAgICAvLyBhbHNvIHNj
YWxlIGl0cyBlcnJvci4KKyAgICAgICAgdWludDY0X3Qgd19lcnJvciA9IDE7CisgICAgICAgIC8v
IFdlIGN1dCB0aGUgaW5wdXQgbnVtYmVyIGludG8gdHdvIHBhcnRzOiB0aGUgaW50ZWdyYWwgZGln
aXRzIGFuZCB0aGUKKyAgICAgICAgLy8gZnJhY3Rpb25hbCBkaWdpdHMuIFdlIGRvbid0IGVtaXQg
YW55IGRlY2ltYWwgc2VwYXJhdG9yLCBidXQgYWRhcHQga2FwcGEKKyAgICAgICAgLy8gaW5zdGVh
ZC4gRXhhbXBsZTogaW5zdGVhZCBvZiB3cml0aW5nICIxLjIiIHdlIHB1dCAiMTIiIGludG8gdGhl
IGJ1ZmZlciBhbmQKKyAgICAgICAgLy8gaW5jcmVhc2Uga2FwcGEgYnkgMS4KKyAgICAgICAgRGl5
RnAgb25lID0gRGl5RnAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDEpIDw8IC13LmUoKSwgdy5lKCkp
OworICAgICAgICAvLyBEaXZpc2lvbiBieSBvbmUgaXMgYSBzaGlmdC4KKyAgICAgICAgdWludDMy
X3QgaW50ZWdyYWxzID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHcuZigpID4+IC1vbmUuZSgpKTsK
KyAgICAgICAgLy8gTW9kdWxvIGJ5IG9uZSBpcyBhbiBhbmQuCisgICAgICAgIHVpbnQ2NF90IGZy
YWN0aW9uYWxzID0gdy5mKCkgJiAob25lLmYoKSAtIDEpOworICAgICAgICB1aW50MzJfdCBkaXZp
c29yOworICAgICAgICBpbnQgZGl2aXNvcl9leHBvbmVudDsKKyAgICAgICAgQmlnZ2VzdFBvd2Vy
VGVuKGludGVncmFscywgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUgLSAoLW9uZS5lKCkpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgJmRpdmlzb3IsICZkaXZpc29yX2V4cG9uZW50KTsKKyAgICAg
ICAgKmthcHBhID0gZGl2aXNvcl9leHBvbmVudCArIDE7CisgICAgICAgICpsZW5ndGggPSAwOwor
ICAgICAgICAKKyAgICAgICAgLy8gTG9vcCBpbnZhcmlhbnQ6IGJ1ZmZlciA9IHcgLyAxMF5rYXBw
YSAgKGludGVnZXIgZGl2aXNpb24pCisgICAgICAgIC8vIFRoZSBpbnZhcmlhbnQgaG9sZHMgZm9y
IHRoZSBmaXJzdCBpdGVyYXRpb246IGthcHBhIGhhcyBiZWVuIGluaXRpYWxpemVkCisgICAgICAg
IC8vIHdpdGggdGhlIGRpdmlzb3IgZXhwb25lbnQgKyAxLiBBbmQgdGhlIGRpdmlzb3IgaXMgdGhl
IGJpZ2dlc3QgcG93ZXIgb2YgdGVuCisgICAgICAgIC8vIHRoYXQgaXMgc21hbGxlciB0aGFuICdp
bnRlZ3JhbHMnLgorICAgICAgICB3aGlsZSAoKmthcHBhID4gMCkgeworICAgICAgICAgICAgaW50
IGRpZ2l0ID0gaW50ZWdyYWxzIC8gZGl2aXNvcjsKKyAgICAgICAgICAgIGJ1ZmZlclsqbGVuZ3Ro
XSA9ICcwJyArIGRpZ2l0OworICAgICAgICAgICAgKCpsZW5ndGgpKys7CisgICAgICAgICAgICBy
ZXF1ZXN0ZWRfZGlnaXRzLS07CisgICAgICAgICAgICBpbnRlZ3JhbHMgJT0gZGl2aXNvcjsKKyAg
ICAgICAgICAgICgqa2FwcGEpLS07CisgICAgICAgICAgICAvLyBOb3RlIHRoYXQga2FwcGEgbm93
IGVxdWFscyB0aGUgZXhwb25lbnQgb2YgdGhlIGRpdmlzb3IgYW5kIHRoYXQgdGhlCisgICAgICAg
ICAgICAvLyBpbnZhcmlhbnQgdGh1cyBob2xkcyBhZ2Fpbi4KKyAgICAgICAgICAgIGlmIChyZXF1
ZXN0ZWRfZGlnaXRzID09IDApIGJyZWFrOworICAgICAgICAgICAgZGl2aXNvciAvPSAxMDsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHJlcXVlc3RlZF9kaWdpdHMgPT0gMCkgewor
ICAgICAgICAgICAgdWludDY0X3QgcmVzdCA9CisgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KGludGVncmFscykgPDwgLW9uZS5lKCkpICsgZnJhY3Rpb25hbHM7CisgICAgICAgICAg
ICByZXR1cm4gUm91bmRXZWVkQ291bnRlZChidWZmZXIsICpsZW5ndGgsIHJlc3QsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50NjRfdD4oZGl2aXNv
cikgPDwgLW9uZS5lKCksIHdfZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBrYXBwYSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBpbnRlZ3Jh
bHMgaGF2ZSBiZWVuIGdlbmVyYXRlZC4gV2UgYXJlIGF0IHRoZSBwb2ludCBvZiB0aGUgZGVjaW1h
bAorICAgICAgICAvLyBzZXBhcmF0b3IuIEluIHRoZSBmb2xsb3dpbmcgbG9vcCB3ZSBzaW1wbHkg
bXVsdGlwbHkgdGhlIHJlbWFpbmluZyBkaWdpdHMgYnkKKyAgICAgICAgLy8gMTAgYW5kIGRpdmlk
ZSBieSBvbmUuIFdlIGp1c3QgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRvIG11bHRpcGx5IGFzc29j
aWF0ZWQKKyAgICAgICAgLy8gZGF0YSAodGhlICd1bml0JyksIHRvby4KKyAgICAgICAgLy8gTm90
ZSB0aGF0IHRoZSBtdWx0aXBsaWNhdGlvbiBieSAxMCBkb2VzIG5vdCBvdmVyZmxvdywgYmVjYXVz
ZSB3LmUgPj0gLTYwCisgICAgICAgIC8vIGFuZCB0aHVzIG9uZS5lID49IC02MC4KKyAgICAgICAg
QVNTRVJUKG9uZS5lKCkgPj0gLTYwKTsKKyAgICAgICAgQVNTRVJUKGZyYWN0aW9uYWxzIDwgb25l
LmYoKSk7CisgICAgICAgIEFTU0VSVChVSU5UNjRfMlBBUlRfQygweEZGRkZGRkZGLCBGRkZGRkZG
RikgLyAxMCA+PSBvbmUuZigpKTsKKyAgICAgICAgd2hpbGUgKHJlcXVlc3RlZF9kaWdpdHMgPiAw
ICYmIGZyYWN0aW9uYWxzID4gd19lcnJvcikgeworICAgICAgICAgICAgZnJhY3Rpb25hbHMgKj0g
MTA7CisgICAgICAgICAgICB3X2Vycm9yICo9IDEwOworICAgICAgICAgICAgLy8gSW50ZWdlciBk
aXZpc2lvbiBieSBvbmUuCisgICAgICAgICAgICBpbnQgZGlnaXQgPSBzdGF0aWNfY2FzdDxpbnQ+
KGZyYWN0aW9uYWxzID4+IC1vbmUuZSgpKTsKKyAgICAgICAgICAgIGJ1ZmZlclsqbGVuZ3RoXSA9
ICcwJyArIGRpZ2l0OworICAgICAgICAgICAgKCpsZW5ndGgpKys7CisgICAgICAgICAgICByZXF1
ZXN0ZWRfZGlnaXRzLS07CisgICAgICAgICAgICBmcmFjdGlvbmFscyAmPSBvbmUuZigpIC0gMTsg
IC8vIE1vZHVsbyBieSBvbmUuCisgICAgICAgICAgICAoKmthcHBhKS0tOworICAgICAgICB9Cisg
ICAgICAgIGlmIChyZXF1ZXN0ZWRfZGlnaXRzICE9IDApIHJldHVybiBmYWxzZTsKKyAgICAgICAg
cmV0dXJuIFJvdW5kV2VlZENvdW50ZWQoYnVmZmVyLCAqbGVuZ3RoLCBmcmFjdGlvbmFscywgb25l
LmYoKSwgd19lcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FwcGEpOwor
ICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBQcm92aWRlcyBhIGRlY2ltYWwgcmVwcmVzZW50YXRp
b24gb2Ygdi4KKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgaXQgc3VjY2VlZHMsIG90aGVyd2lzZSB0
aGUgcmVzdWx0IGNhbm5vdCBiZSB0cnVzdGVkLgorICAgIC8vIFRoZXJlIHdpbGwgYmUgKmxlbmd0
aCBkaWdpdHMgaW5zaWRlIHRoZSBidWZmZXIgKG5vdCBudWxsLXRlcm1pbmF0ZWQpLgorICAgIC8v
IElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgdGhlbgorICAgIC8vICAgICAgICB2ID09IChk
b3VibGUpIChidWZmZXIgKiAxMF5kZWNpbWFsX2V4cG9uZW50KS4KKyAgICAvLyBUaGUgZGlnaXRz
IGluIHRoZSBidWZmZXIgYXJlIHRoZSBzaG9ydGVzdCByZXByZXNlbnRhdGlvbiBwb3NzaWJsZTog
bm8KKyAgICAvLyAwLjA5OTk5OTk5OTk5OTk5OTk5IGluc3RlYWQgb2YgMC4xLiBUaGUgc2hvcnRl
ciByZXByZXNlbnRhdGlvbiB3aWxsIGV2ZW4gYmUKKyAgICAvLyBjaG9zZW4gZXZlbiBpZiB0aGUg
bG9uZ2VyIG9uZSB3b3VsZCBiZSBjbG9zZXIgdG8gdi4KKyAgICAvLyBUaGUgbGFzdCBkaWdpdCB3
aWxsIGJlIGNsb3Nlc3QgdG8gdGhlIGFjdHVhbCB2LiBUaGF0IGlzLCBldmVuIGlmIHNldmVyYWwK
KyAgICAvLyBkaWdpdHMgbWlnaHQgY29ycmVjdGx5IHlpZWxkICd2JyB3aGVuIHJlYWQgYWdhaW4s
IHRoZSBjbG9zZXN0IHdpbGwgYmUKKyAgICAvLyBjb21wdXRlZC4KKyAgICBzdGF0aWMgYm9vbCBH
cmlzdTMoZG91YmxlIHYsCisgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBidWZm
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgIGludCogbGVuZ3RoLAorICAgICAgICAgICAgICAg
ICAgICAgICBpbnQqIGRlY2ltYWxfZXhwb25lbnQpIHsKKyAgICAgICAgRGl5RnAgdyA9IERvdWJs
ZSh2KS5Bc05vcm1hbGl6ZWREaXlGcCgpOworICAgICAgICAvLyBib3VuZGFyeV9taW51cyBhbmQg
Ym91bmRhcnlfcGx1cyBhcmUgdGhlIGJvdW5kYXJpZXMgYmV0d2VlbiB2IGFuZCBpdHMKKyAgICAg
ICAgLy8gY2xvc2VzdCBmbG9hdGluZy1wb2ludCBuZWlnaGJvcnMuIEFueSBudW1iZXIgc3RyaWN0
bHkgYmV0d2VlbgorICAgICAgICAvLyBib3VuZGFyeV9taW51cyBhbmQgYm91bmRhcnlfcGx1cyB3
aWxsIHJvdW5kIHRvIHYgd2hlbiBjb252ZXJ0IHRvIGEgZG91YmxlLgorICAgICAgICAvLyBHcmlz
dTMgd2lsbCBuZXZlciBvdXRwdXQgcmVwcmVzZW50YXRpb25zIHRoYXQgbGllIGV4YWN0bHkgb24g
YSBib3VuZGFyeS4KKyAgICAgICAgRGl5RnAgYm91bmRhcnlfbWludXMsIGJvdW5kYXJ5X3BsdXM7
CisgICAgICAgIERvdWJsZSh2KS5Ob3JtYWxpemVkQm91bmRhcmllcygmYm91bmRhcnlfbWludXMs
ICZib3VuZGFyeV9wbHVzKTsKKyAgICAgICAgQVNTRVJUKGJvdW5kYXJ5X3BsdXMuZSgpID09IHcu
ZSgpKTsKKyAgICAgICAgRGl5RnAgdGVuX21rOyAgLy8gQ2FjaGVkIHBvd2VyIG9mIHRlbjogMTBe
LWsKKyAgICAgICAgaW50IG1rOyAgICAgICAgLy8gLWsKKyAgICAgICAgaW50IHRlbl9ta19taW5p
bWFsX2JpbmFyeV9leHBvbmVudCA9CisgICAgICAgIGtNaW5pbWFsVGFyZ2V0RXhwb25lbnQgLSAo
dy5lKCkgKyBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSk7CisgICAgICAgIGludCB0ZW5fbWtfbWF4
aW1hbF9iaW5hcnlfZXhwb25lbnQgPQorICAgICAgICBrTWF4aW1hbFRhcmdldEV4cG9uZW50IC0g
KHcuZSgpICsgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUpOworICAgICAgICBQb3dlcnNPZlRlbkNh
Y2hlOjpHZXRDYWNoZWRQb3dlckZvckJpbmFyeUV4cG9uZW50UmFuZ2UoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW5fbWtf
bWluaW1hbF9iaW5hcnlfZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW5fbWtfbWF4aW1hbF9iaW5hcnlfZXhw
b25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmdGVuX21rLCAmbWspOworICAgICAgICBBU1NFUlQoKGtNaW5pbWFsVGFy
Z2V0RXhwb25lbnQgPD0gdy5lKCkgKyB0ZW5fbWsuZSgpICsKKyAgICAgICAgICAgICAgICBEaXlG
cDo6a1NpZ25pZmljYW5kU2l6ZSkgJiYKKyAgICAgICAgICAgICAgIChrTWF4aW1hbFRhcmdldEV4
cG9uZW50ID49IHcuZSgpICsgdGVuX21rLmUoKSArCisgICAgICAgICAgICAgICAgRGl5RnA6OmtT
aWduaWZpY2FuZFNpemUpKTsKKyAgICAgICAgLy8gTm90ZSB0aGF0IHRlbl9tayBpcyBvbmx5IGFu
IGFwcHJveGltYXRpb24gb2YgMTBeLWsuIEEgRGl5RnAgb25seSBjb250YWlucyBhCisgICAgICAg
IC8vIDY0IGJpdCBzaWduaWZpY2FuZCBhbmQgdGVuX21rIGlzIHRodXMgb25seSBwcmVjaXNlIHVw
IHRvIDY0IGJpdHMuCisgICAgICAgIAorICAgICAgICAvLyBUaGUgRGl5RnA6OlRpbWVzIHByb2Nl
ZHVyZSByb3VuZHMgaXRzIHJlc3VsdCwgYW5kIHRlbl9tayBpcyBhcHByb3hpbWF0ZWQKKyAgICAg
ICAgLy8gdG9vLiBUaGUgdmFyaWFibGUgc2NhbGVkX3cgKGFzIHdlbGwgYXMgc2NhbGVkX2JvdW5k
YXJ5X21pbnVzL3BsdXMpIGFyZSBub3cKKyAgICAgICAgLy8gb2ZmIGJ5IGEgc21hbGwgYW1vdW50
LgorICAgICAgICAvLyBJbiBmYWN0OiBzY2FsZWRfdyAtIHcqMTBeayA8IDF1bHAgKHVuaXQgaW4g
dGhlIGxhc3QgcGxhY2UpIG9mIHNjYWxlZF93LgorICAgICAgICAvLyBJbiBvdGhlciB3b3Jkczog
bGV0IGYgPSBzY2FsZWRfdy5mKCkgYW5kIGUgPSBzY2FsZWRfdy5lKCksIHRoZW4KKyAgICAgICAg
Ly8gICAgICAgICAgIChmLTEpICogMl5lIDwgdyoxMF5rIDwgKGYrMSkgKiAyXmUKKyAgICAgICAg
RGl5RnAgc2NhbGVkX3cgPSBEaXlGcDo6VGltZXModywgdGVuX21rKTsKKyAgICAgICAgQVNTRVJU
KHNjYWxlZF93LmUoKSA9PQorICAgICAgICAgICAgICAgYm91bmRhcnlfcGx1cy5lKCkgKyB0ZW5f
bWsuZSgpICsgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUpOworICAgICAgICAvLyBJbiB0aGVvcnkg
aXQgd291bGQgYmUgcG9zc2libGUgdG8gYXZvaWQgc29tZSByZWNvbXB1dGF0aW9ucyBieSBjb21w
dXRpbmcKKyAgICAgICAgLy8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB3IGFuZCBib3VuZGFyeV9t
aW51cy9wbHVzIChhIHBvd2VyIG9mIDIpIGFuZCB0bworICAgICAgICAvLyBjb21wdXRlIHNjYWxl
ZF9ib3VuZGFyeV9taW51cy9wbHVzIGJ5IHN1YnRyYWN0aW5nL2FkZGluZyBmcm9tCisgICAgICAg
IC8vIHNjYWxlZF93LiBIb3dldmVyIHRoZSBjb2RlIGJlY29tZXMgbXVjaCBsZXNzIHJlYWRhYmxl
IGFuZCB0aGUgc3BlZWQKKyAgICAgICAgLy8gZW5oYW5jZW1lbnRzIGFyZSBub3QgdGVycmlmZmlj
LgorICAgICAgICBEaXlGcCBzY2FsZWRfYm91bmRhcnlfbWludXMgPSBEaXlGcDo6VGltZXMoYm91
bmRhcnlfbWludXMsIHRlbl9tayk7CisgICAgICAgIERpeUZwIHNjYWxlZF9ib3VuZGFyeV9wbHVz
ICA9IERpeUZwOjpUaW1lcyhib3VuZGFyeV9wbHVzLCAgdGVuX21rKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIERpZ2l0R2VuIHdpbGwgZ2VuZXJhdGUgdGhlIGRpZ2l0cyBvZiBzY2FsZWRfdy4gVGhl
cmVmb3JlIHdlIGhhdmUKKyAgICAgICAgLy8gdiA9PSAoZG91YmxlKSAoc2NhbGVkX3cgKiAxMF4t
bWspLgorICAgICAgICAvLyBTZXQgZGVjaW1hbF9leHBvbmVudCA9PSAtbWsgYW5kIHBhc3MgaXQg
dG8gRGlnaXRHZW4uIElmIHNjYWxlZF93IGlzIG5vdCBhbgorICAgICAgICAvLyBpbnRlZ2VyIHRo
YW4gaXQgd2lsbCBiZSB1cGRhdGVkLiBGb3IgaW5zdGFuY2UgaWYgc2NhbGVkX3cgPT0gMS4yMyB0
aGVuCisgICAgICAgIC8vIHRoZSBidWZmZXIgd2lsbCBiZSBmaWxsZWQgd2l0aCAiMTIzIiB1bmQg
dGhlIGRlY2ltYWxfZXhwb25lbnQgd2lsbCBiZQorICAgICAgICAvLyBkZWNyZWFzZWQgYnkgMi4K
KyAgICAgICAgaW50IGthcHBhOworICAgICAgICBib29sIHJlc3VsdCA9IERpZ2l0R2VuKHNjYWxl
ZF9ib3VuZGFyeV9taW51cywgc2NhbGVkX3csIHNjYWxlZF9ib3VuZGFyeV9wbHVzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgbGVuZ3RoLCAma2FwcGEpOworICAgICAg
ICAqZGVjaW1hbF9leHBvbmVudCA9IC1tayArIGthcHBhOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBUaGUgImNvdW50ZWQiIHZlcnNpb24gb2YgZ3Jp
c3UzIChzZWUgYWJvdmUpIG9ubHkgZ2VuZXJhdGVzIHJlcXVlc3RlZF9kaWdpdHMKKyAgICAvLyBu
dW1iZXIgb2YgZGlnaXRzLiBUaGlzIHZlcnNpb24gZG9lcyBub3QgZ2VuZXJhdGUgdGhlIHNob3J0
ZXN0IHJlcHJlc2VudGF0aW9uLAorICAgIC8vIGFuZCB3aXRoIGVub3VnaCByZXF1ZXN0ZWQgZGln
aXRzIDAuMSB3aWxsIGF0IHNvbWUgcG9pbnQgcHJpbnQgYXMgMC45OTk5OTk5Li4uCisgICAgLy8g
R3Jpc3UzIGlzIHRvbyBpbXByZWNpc2UgZm9yIHJlYWwgaGFsZndheSBjYXNlcyAoMS41IHdpbGwg
bm90IHdvcmspIGFuZAorICAgIC8vIHRoZXJlZm9yZSB0aGUgcm91bmRpbmcgc3RyYXRlZ3kgZm9y
IGhhbGZ3YXkgY2FzZXMgaXMgaXJyZWxldmFudC4KKyAgICBzdGF0aWMgYm9vbCBHcmlzdTNDb3Vu
dGVkKGRvdWJsZSB2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlcXVlc3Rl
ZF9kaWdpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVm
ZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBsZW5ndGgsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGRlY2ltYWxfZXhwb25lbnQpIHsKKyAgICAgICAg
RGl5RnAgdyA9IERvdWJsZSh2KS5Bc05vcm1hbGl6ZWREaXlGcCgpOworICAgICAgICBEaXlGcCB0
ZW5fbWs7ICAvLyBDYWNoZWQgcG93ZXIgb2YgdGVuOiAxMF4taworICAgICAgICBpbnQgbWs7ICAg
ICAgICAvLyAtaworICAgICAgICBpbnQgdGVuX21rX21pbmltYWxfYmluYXJ5X2V4cG9uZW50ID0K
KyAgICAgICAga01pbmltYWxUYXJnZXRFeHBvbmVudCAtICh3LmUoKSArIERpeUZwOjprU2lnbmlm
aWNhbmRTaXplKTsKKyAgICAgICAgaW50IHRlbl9ta19tYXhpbWFsX2JpbmFyeV9leHBvbmVudCA9
CisgICAgICAgIGtNYXhpbWFsVGFyZ2V0RXhwb25lbnQgLSAody5lKCkgKyBEaXlGcDo6a1NpZ25p
ZmljYW5kU2l6ZSk7CisgICAgICAgIFBvd2Vyc09mVGVuQ2FjaGU6OkdldENhY2hlZFBvd2VyRm9y
QmluYXJ5RXhwb25lbnRSYW5nZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbl9ta19taW5pbWFsX2JpbmFyeV9leHBvbmVu
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRlbl9ta19tYXhpbWFsX2JpbmFyeV9leHBvbmVudCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0ZW5fbWss
ICZtayk7CisgICAgICAgIEFTU0VSVCgoa01pbmltYWxUYXJnZXRFeHBvbmVudCA8PSB3LmUoKSAr
IHRlbl9tay5lKCkgKworICAgICAgICAgICAgICAgIERpeUZwOjprU2lnbmlmaWNhbmRTaXplKSAm
JgorICAgICAgICAgICAgICAgKGtNYXhpbWFsVGFyZ2V0RXhwb25lbnQgPj0gdy5lKCkgKyB0ZW5f
bWsuZSgpICsKKyAgICAgICAgICAgICAgICBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSkpOworICAg
ICAgICAvLyBOb3RlIHRoYXQgdGVuX21rIGlzIG9ubHkgYW4gYXBwcm94aW1hdGlvbiBvZiAxMF4t
ay4gQSBEaXlGcCBvbmx5IGNvbnRhaW5zIGEKKyAgICAgICAgLy8gNjQgYml0IHNpZ25pZmljYW5k
IGFuZCB0ZW5fbWsgaXMgdGh1cyBvbmx5IHByZWNpc2UgdXAgdG8gNjQgYml0cy4KKyAgICAgICAg
CisgICAgICAgIC8vIFRoZSBEaXlGcDo6VGltZXMgcHJvY2VkdXJlIHJvdW5kcyBpdHMgcmVzdWx0
LCBhbmQgdGVuX21rIGlzIGFwcHJveGltYXRlZAorICAgICAgICAvLyB0b28uIFRoZSB2YXJpYWJs
ZSBzY2FsZWRfdyAoYXMgd2VsbCBhcyBzY2FsZWRfYm91bmRhcnlfbWludXMvcGx1cykgYXJlIG5v
dworICAgICAgICAvLyBvZmYgYnkgYSBzbWFsbCBhbW91bnQuCisgICAgICAgIC8vIEluIGZhY3Q6
IHNjYWxlZF93IC0gdyoxMF5rIDwgMXVscCAodW5pdCBpbiB0aGUgbGFzdCBwbGFjZSkgb2Ygc2Nh
bGVkX3cuCisgICAgICAgIC8vIEluIG90aGVyIHdvcmRzOiBsZXQgZiA9IHNjYWxlZF93LmYoKSBh
bmQgZSA9IHNjYWxlZF93LmUoKSwgdGhlbgorICAgICAgICAvLyAgICAgICAgICAgKGYtMSkgKiAy
XmUgPCB3KjEwXmsgPCAoZisxKSAqIDJeZQorICAgICAgICBEaXlGcCBzY2FsZWRfdyA9IERpeUZw
OjpUaW1lcyh3LCB0ZW5fbWspOworICAgICAgICAKKyAgICAgICAgLy8gV2Ugbm93IGhhdmUgKGRv
dWJsZSkgKHNjYWxlZF93ICogMTBeLW1rKS4KKyAgICAgICAgLy8gRGlnaXRHZW4gd2lsbCBnZW5l
cmF0ZSB0aGUgZmlyc3QgcmVxdWVzdGVkX2RpZ2l0cyBkaWdpdHMgb2Ygc2NhbGVkX3cgYW5kCisg
ICAgICAgIC8vIHJldHVybiB0b2dldGhlciB3aXRoIGEga2FwcGEgc3VjaCB0aGF0IHNjYWxlZF93
IH49IGJ1ZmZlciAqIDEwXmthcHBhLiAoSXQKKyAgICAgICAgLy8gd2lsbCBub3QgYWx3YXlzIGJl
IGV4YWN0bHkgdGhlIHNhbWUgc2luY2UgRGlnaXRHZW5Db3VudGVkIG9ubHkgcHJvZHVjZXMgYQor
ICAgICAgICAvLyBsaW1pdGVkIG51bWJlciBvZiBkaWdpdHMuKQorICAgICAgICBpbnQga2FwcGE7
CisgICAgICAgIGJvb2wgcmVzdWx0ID0gRGlnaXRHZW5Db3VudGVkKHNjYWxlZF93LCByZXF1ZXN0
ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIs
IGxlbmd0aCwgJmthcHBhKTsKKyAgICAgICAgKmRlY2ltYWxfZXhwb25lbnQgPSAtbWsgKyBrYXBw
YTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgCisgICAgYm9vbCBG
YXN0RHRvYShkb3VibGUgdiwKKyAgICAgICAgICAgICAgICAgIEZhc3REdG9hTW9kZSBtb2RlLAor
ICAgICAgICAgICAgICAgICAgaW50IHJlcXVlc3RlZF9kaWdpdHMsCisgICAgICAgICAgICAgICAg
ICBWZWN0b3I8Y2hhcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAgaW50KiBsZW5ndGgsCisg
ICAgICAgICAgICAgICAgICBpbnQqIGRlY2ltYWxfcG9pbnQpIHsKKyAgICAgICAgQVNTRVJUKHYg
PiAwKTsKKyAgICAgICAgQVNTRVJUKCFEb3VibGUodikuSXNTcGVjaWFsKCkpOworICAgICAgICAK
KyAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgaW50IGRlY2ltYWxfZXhwb25l
bnQgPSAwOworICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgRkFTVF9E
VE9BX1NIT1JURVNUOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IEdyaXN1Myh2LCBidWZmZXIs
IGxlbmd0aCwgJmRlY2ltYWxfZXhwb25lbnQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBGQVNUX0RUT0FfUFJFQ0lTSU9OOgorICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IEdyaXN1M0NvdW50ZWQodiwgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgbGVuZ3RoLCAmZGVjaW1hbF9leHBvbmVudCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdCkgewor
ICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSAqbGVuZ3RoICsgZGVjaW1hbF9leHBvbmVudDsK
KyAgICAgICAgICAgIGJ1ZmZlclsqbGVuZ3RoXSA9ICdcMCc7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZl
cnNpb24KKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL2R0b2EvZmFzdC1kdG9hLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0
b2EvZmFzdC1kdG9hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODc2YTlmMzgyNTZkMmZiMDAyM2Y4ZTA4ZGI1ODFh
ODkwMzhiMjcxMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
ZHRvYS9mYXN0LWR0b2EuaApAQCAtMCwwICsxLDg4IEBACisvLyBDb3B5cmlnaHQgMjAxMCB0aGUg
VjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisv
LyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
Ly8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8g
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKKyNpZm5kZWYgRE9VQkxFX0NPTlZFUlNJT05fRkFTVF9EVE9BX0hfCisjZGVmaW5lIERP
VUJMRV9DT05WRVJTSU9OX0ZBU1RfRFRPQV9IXworCisjaW5jbHVkZSAidXRpbHMuaCIKKworbmFt
ZXNwYWNlIFdURiB7CisKK25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAg
ZW51bSBGYXN0RHRvYU1vZGUgeworICAgICAgICAvLyBDb21wdXRlcyB0aGUgc2hvcnRlc3QgcmVw
cmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGlucHV0LiBUaGUgcmV0dXJuZWQKKyAgICAgICAgLy8g
cmVzdWx0IHdpbGwgYmUgdGhlIG1vc3QgYWNjdXJhdGUgbnVtYmVyIG9mIHRoaXMgbGVuZ3RoLiBM
b25nZXIKKyAgICAgICAgLy8gcmVwcmVzZW50YXRpb25zIG1pZ2h0IGJlIG1vcmUgYWNjdXJhdGUu
CisgICAgICAgIEZBU1RfRFRPQV9TSE9SVEVTVCwKKyAgICAgICAgLy8gQ29tcHV0ZXMgYSByZXBy
ZXNlbnRhdGlvbiB3aGVyZSB0aGUgcHJlY2lzaW9uIChudW1iZXIgb2YgZGlnaXRzKSBpcworICAg
ICAgICAvLyBnaXZlbiBhcyBpbnB1dC4gVGhlIHByZWNpc2lvbiBpcyBpbmRlcGVuZGVudCBvZiB0
aGUgZGVjaW1hbCBwb2ludC4KKyAgICAgICAgRkFTVF9EVE9BX1BSRUNJU0lPTgorICAgIH07Cisg
ICAgCisgICAgLy8gRmFzdER0b2Egd2lsbCBwcm9kdWNlIGF0IG1vc3Qga0Zhc3REdG9hTWF4aW1h
bExlbmd0aCBkaWdpdHMuIFRoaXMgZG9lcyBub3QKKyAgICAvLyBpbmNsdWRlIHRoZSB0ZXJtaW5h
dGluZyAnXDAnIGNoYXJhY3Rlci4KKyAgICBzdGF0aWMgY29uc3QgaW50IGtGYXN0RHRvYU1heGlt
YWxMZW5ndGggPSAxNzsKKyAgICAKKyAgICAvLyBQcm92aWRlcyBhIGRlY2ltYWwgcmVwcmVzZW50
YXRpb24gb2Ygdi4KKyAgICAvLyBUaGUgcmVzdWx0IHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBi
dWZmZXIgKiAxMF4ocG9pbnQgLSBsZW5ndGgpLgorICAgIC8vCisgICAgLy8gUHJlY29uZGl0aW9u
OgorICAgIC8vICAgKiB2IG11c3QgYmUgYSBzdHJpY3RseSBwb3NpdGl2ZSBmaW5pdGUgZG91Ymxl
LgorICAgIC8vCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIGl0IHN1Y2NlZWRzLCBvdGhlcndpc2Ug
dGhlIHJlc3VsdCBjYW4gbm90IGJlIHRydXN0ZWQuCisgICAgLy8gVGhlcmUgd2lsbCBiZSAqbGVu
Z3RoIGRpZ2l0cyBpbnNpZGUgdGhlIGJ1ZmZlciBmb2xsb3dlZCBieSBhIG51bGwgdGVybWluYXRv
ci4KKyAgICAvLyBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGFuZCBtb2RlIGVxdWFscwor
ICAgIC8vICAgLSBGQVNUX0RUT0FfU0hPUlRFU1QsIHRoZW4KKyAgICAvLyAgICAgdGhlIHBhcmFt
ZXRlciByZXF1ZXN0ZWRfZGlnaXRzIGlzIGlnbm9yZWQuCisgICAgLy8gICAgIFRoZSByZXN1bHQg
c2F0aXNmaWVzCisgICAgLy8gICAgICAgICB2ID09IChkb3VibGUpIChidWZmZXIgKiAxMF4ocG9p
bnQgLSBsZW5ndGgpKS4KKyAgICAvLyAgICAgVGhlIGRpZ2l0cyBpbiB0aGUgYnVmZmVyIGFyZSB0
aGUgc2hvcnRlc3QgcmVwcmVzZW50YXRpb24gcG9zc2libGUuIEUuZy4KKyAgICAvLyAgICAgaWYg
MC4wOTk5OTk5OTk5OTkgYW5kIDAuMSByZXByZXNlbnQgdGhlIHNhbWUgZG91YmxlIHRoZW4gIjEi
IGlzIHJldHVybmVkCisgICAgLy8gICAgIHdpdGggcG9pbnQgPSAwLgorICAgIC8vICAgICBUaGUg
bGFzdCBkaWdpdCB3aWxsIGJlIGNsb3Nlc3QgdG8gdGhlIGFjdHVhbCB2LiBUaGF0IGlzLCBldmVu
IGlmIHNldmVyYWwKKyAgICAvLyAgICAgZGlnaXRzIG1pZ2h0IGNvcnJlY3RseSB5aWVsZCAndicg
d2hlbiByZWFkIGFnYWluLCB0aGUgYnVmZmVyIHdpbGwgY29udGFpbgorICAgIC8vICAgICB0aGUg
b25lIGNsb3Nlc3QgdG8gdi4KKyAgICAvLyAgIC0gRkFTVF9EVE9BX1BSRUNJU0lPTiwgdGhlbgor
ICAgIC8vICAgICB0aGUgYnVmZmVyIGNvbnRhaW5zIHJlcXVlc3RlZF9kaWdpdHMgZGlnaXRzLgor
ICAgIC8vICAgICB0aGUgZGlmZmVyZW5jZSB2IC0gKGJ1ZmZlciAqIDEwXihwb2ludC1sZW5ndGgp
KSBpcyBjbG9zZXN0IHRvIHplcm8gZm9yCisgICAgLy8gICAgIGFsbCBwb3NzaWJsZSByZXByZXNl
bnRhdGlvbnMgb2YgcmVxdWVzdGVkX2RpZ2l0cyBkaWdpdHMuCisgICAgLy8gICAgIElmIHRoZXJl
IGFyZSB0d28gdmFsdWVzIHRoYXQgYXJlIGVxdWFsbHkgY2xvc2UsIHRoZW4gRmFzdER0b2EgcmV0
dXJucworICAgIC8vICAgICBmYWxzZS4KKyAgICAvLyBGb3IgYm90aCBtb2RlcyB0aGUgYnVmZmVy
IG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIHJlc3VsdC4KKyAgICBib29sIEZhc3RE
dG9hKGRvdWJsZSBkLAorICAgICAgICAgICAgICAgICAgRmFzdER0b2FNb2RlIG1vZGUsCisgICAg
ICAgICAgICAgICAgICBpbnQgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAgIFZl
Y3RvcjxjaGFyPiBidWZmZXIsCisgICAgICAgICAgICAgICAgICBpbnQqIGxlbmd0aCwKKyAgICAg
ICAgICAgICAgICAgIGludCogZGVjaW1hbF9wb2ludCk7CisgICAgCit9ICAvLyBuYW1lc3BhY2Ug
ZG91YmxlX2NvbnZlcnNpb24KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAgLy8gRE9V
QkxFX0NPTlZFUlNJT05fRkFTVF9EVE9BX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL2R0b2EvZml4ZWQtZHRvYS5jYyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
ZHRvYS9maXhlZC1kdG9hLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRjMzkxMWVhMTQ2NmVkYTM4N2IwMTU3YzJk
MjdlNTg0NjE2OWMyMmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL2R0b2EvZml4ZWQtZHRvYS5jYwpAQCAtMCwwICsxLDQwOCBAQAorLy8gQ29weXJpZ2h0IDIw
MTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAg
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAg
ICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisv
LyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSAiVW51c2VkUGFyYW0u
aCIKKyNpbmNsdWRlICJmaXhlZC1kdG9hLmgiCisjaW5jbHVkZSAiZG91YmxlLmgiCisKK25hbWVz
cGFjZSBXVEYgeworCituYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIC8v
IFJlcHJlc2VudHMgYSAxMjhiaXQgdHlwZS4gVGhpcyBjbGFzcyBzaG91bGQgYmUgcmVwbGFjZWQg
YnkgYSBuYXRpdmUgdHlwZSBvbgorICAgIC8vIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgMTI4Yml0
IGludGVnZXJzLgorICAgIGNsYXNzIFVJbnQxMjggeworICAgIHB1YmxpYzoKKyAgICAgICAgVUlu
dDEyOCgpIDogaGlnaF9iaXRzXygwKSwgbG93X2JpdHNfKDApIHsgfQorICAgICAgICBVSW50MTI4
KHVpbnQ2NF90IGhpZ2gsIHVpbnQ2NF90IGxvdykgOiBoaWdoX2JpdHNfKGhpZ2gpLCBsb3dfYml0
c18obG93KSB7IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgTXVsdGlwbHkodWludDMyX3QgbXVs
dGlwbGljYW5kKSB7CisgICAgICAgICAgICB1aW50NjRfdCBhY2N1bXVsYXRvcjsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgYWNjdW11bGF0b3IgPSAobG93X2JpdHNfICYga01hc2szMikgKiBt
dWx0aXBsaWNhbmQ7CisgICAgICAgICAgICB1aW50MzJfdCBwYXJ0ID0gc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KGFjY3VtdWxhdG9yICYga01hc2szMik7CisgICAgICAgICAgICBhY2N1bXVsYXRvciA+
Pj0gMzI7CisgICAgICAgICAgICBhY2N1bXVsYXRvciA9IGFjY3VtdWxhdG9yICsgKGxvd19iaXRz
XyA+PiAzMikgKiBtdWx0aXBsaWNhbmQ7CisgICAgICAgICAgICBsb3dfYml0c18gPSAoYWNjdW11
bGF0b3IgPDwgMzIpICsgcGFydDsKKyAgICAgICAgICAgIGFjY3VtdWxhdG9yID4+PSAzMjsKKyAg
ICAgICAgICAgIGFjY3VtdWxhdG9yID0gYWNjdW11bGF0b3IgKyAoaGlnaF9iaXRzXyAmIGtNYXNr
MzIpICogbXVsdGlwbGljYW5kOworICAgICAgICAgICAgcGFydCA9IHN0YXRpY19jYXN0PHVpbnQz
Ml90PihhY2N1bXVsYXRvciAmIGtNYXNrMzIpOworICAgICAgICAgICAgYWNjdW11bGF0b3IgPj49
IDMyOworICAgICAgICAgICAgYWNjdW11bGF0b3IgPSBhY2N1bXVsYXRvciArIChoaWdoX2JpdHNf
ID4+IDMyKSAqIG11bHRpcGxpY2FuZDsKKyAgICAgICAgICAgIGhpZ2hfYml0c18gPSAoYWNjdW11
bGF0b3IgPDwgMzIpICsgcGFydDsKKyAgICAgICAgICAgIEFTU0VSVCgoYWNjdW11bGF0b3IgPj4g
MzIpID09IDApOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIFNoaWZ0KGludCBz
aGlmdF9hbW91bnQpIHsKKyAgICAgICAgICAgIEFTU0VSVCgtNjQgPD0gc2hpZnRfYW1vdW50ICYm
IHNoaWZ0X2Ftb3VudCA8PSA2NCk7CisgICAgICAgICAgICBpZiAoc2hpZnRfYW1vdW50ID09IDAp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNoaWZ0
X2Ftb3VudCA9PSAtNjQpIHsKKyAgICAgICAgICAgICAgICBoaWdoX2JpdHNfID0gbG93X2JpdHNf
OworICAgICAgICAgICAgICAgIGxvd19iaXRzXyA9IDA7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KHNoaWZ0X2Ftb3VudCA9PSA2NCkgeworICAgICAgICAgICAgICAgIGxvd19iaXRzXyA9IGhpZ2hf
Yml0c187CisgICAgICAgICAgICAgICAgaGlnaF9iaXRzXyA9IDA7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKHNoaWZ0X2Ftb3VudCA8PSAwKSB7CisgICAgICAgICAgICAgICAgaGlnaF9iaXRzXyA8
PD0gLXNoaWZ0X2Ftb3VudDsKKyAgICAgICAgICAgICAgICBoaWdoX2JpdHNfICs9IGxvd19iaXRz
XyA+PiAoNjQgKyBzaGlmdF9hbW91bnQpOworICAgICAgICAgICAgICAgIGxvd19iaXRzXyA8PD0g
LXNoaWZ0X2Ftb3VudDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbG93
X2JpdHNfID4+PSBzaGlmdF9hbW91bnQ7CisgICAgICAgICAgICAgICAgbG93X2JpdHNfICs9IGhp
Z2hfYml0c18gPDwgKDY0IC0gc2hpZnRfYW1vdW50KTsKKyAgICAgICAgICAgICAgICBoaWdoX2Jp
dHNfID4+PSBzaGlmdF9hbW91bnQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIC8vIE1vZGlmaWVzICp0aGlzIHRvICp0aGlzIE1PRCAoMl5wb3dlcikuCisgICAg
ICAgIC8vIFJldHVybnMgKnRoaXMgRElWICgyXnBvd2VyKS4KKyAgICAgICAgaW50IERpdk1vZFBv
d2VyT2YyKGludCBwb3dlcikgeworICAgICAgICAgICAgaWYgKHBvd2VyID49IDY0KSB7CisgICAg
ICAgICAgICAgICAgaW50IHJlc3VsdCA9IHN0YXRpY19jYXN0PGludD4oaGlnaF9iaXRzXyA+PiAo
cG93ZXIgLSA2NCkpOworICAgICAgICAgICAgICAgIGhpZ2hfYml0c18gLT0gc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KHJlc3VsdCkgPDwgKHBvd2VyIC0gNjQpOworICAgICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHVpbnQ2NF90
IHBhcnRfbG93ID0gbG93X2JpdHNfID4+IHBvd2VyOworICAgICAgICAgICAgICAgIHVpbnQ2NF90
IHBhcnRfaGlnaCA9IGhpZ2hfYml0c18gPDwgKDY0IC0gcG93ZXIpOworICAgICAgICAgICAgICAg
IGludCByZXN1bHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBhcnRfbG93ICsgcGFydF9oaWdoKTsKKyAg
ICAgICAgICAgICAgICBoaWdoX2JpdHNfID0gMDsKKyAgICAgICAgICAgICAgICBsb3dfYml0c18g
LT0gcGFydF9sb3cgPDwgcG93ZXI7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBJc1plcm8oKSBj
b25zdCB7CisgICAgICAgICAgICByZXR1cm4gaGlnaF9iaXRzXyA9PSAwICYmIGxvd19iaXRzXyA9
PSAwOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpbnQgQml0QXQoaW50IHBvc2l0aW9u
KSB7CisgICAgICAgICAgICBpZiAocG9zaXRpb24gPj0gNjQpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihoaWdoX2JpdHNfID4+IChwb3NpdGlvbiAtIDY0KSkgJiAx
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8aW50Pihsb3dfYml0c18gPj4gcG9zaXRpb24pICYgMTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBzdGF0aWMgY29uc3QgdWludDY0
X3Qga01hc2szMiA9IDB4RkZGRkZGRkY7CisgICAgICAgIC8vIFZhbHVlID09IChoaWdoX2JpdHNf
IDw8IDY0KSArIGxvd19iaXRzXworICAgICAgICB1aW50NjRfdCBoaWdoX2JpdHNfOworICAgICAg
ICB1aW50NjRfdCBsb3dfYml0c187CisgICAgfTsKKyAgICAKKyAgICAKKyAgICBzdGF0aWMgY29u
c3QgaW50IGtEb3VibGVTaWduaWZpY2FuZFNpemUgPSA1MzsgIC8vIEluY2x1ZGVzIHRoZSBoaWRk
ZW4gYml0LgorICAgIAorICAgIAorICAgIHN0YXRpYyB2b2lkIEZpbGxEaWdpdHMzMkZpeGVkTGVu
Z3RoKHVpbnQzMl90IG51bWJlciwgaW50IHJlcXVlc3RlZF9sZW5ndGgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwgaW50KiBsZW5n
dGgpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IHJlcXVlc3RlZF9sZW5ndGggLSAxOyBpID49IDA7
IC0taSkgeworICAgICAgICAgICAgYnVmZmVyWygqbGVuZ3RoKSArIGldID0gJzAnICsgbnVtYmVy
ICUgMTA7CisgICAgICAgICAgICBudW1iZXIgLz0gMTA7CisgICAgICAgIH0KKyAgICAgICAgKmxl
bmd0aCArPSByZXF1ZXN0ZWRfbGVuZ3RoOworICAgIH0KKyAgICAKKyAgICAKKyAgICBzdGF0aWMg
dm9pZCBGaWxsRGlnaXRzMzIodWludDMyX3QgbnVtYmVyLCBWZWN0b3I8Y2hhcj4gYnVmZmVyLCBp
bnQqIGxlbmd0aCkgeworICAgICAgICBpbnQgbnVtYmVyX2xlbmd0aCA9IDA7CisgICAgICAgIC8v
IFdlIGZpbGwgdGhlIGRpZ2l0cyBpbiByZXZlcnNlIG9yZGVyIGFuZCBleGNoYW5nZSB0aGVtIGFm
dGVyd2FyZHMuCisgICAgICAgIHdoaWxlIChudW1iZXIgIT0gMCkgeworICAgICAgICAgICAgaW50
IGRpZ2l0ID0gbnVtYmVyICUgMTA7CisgICAgICAgICAgICBudW1iZXIgLz0gMTA7CisgICAgICAg
ICAgICBidWZmZXJbKCpsZW5ndGgpICsgbnVtYmVyX2xlbmd0aF0gPSAnMCcgKyBkaWdpdDsKKyAg
ICAgICAgICAgIG51bWJlcl9sZW5ndGgrKzsKKyAgICAgICAgfQorICAgICAgICAvLyBFeGNoYW5n
ZSB0aGUgZGlnaXRzLgorICAgICAgICBpbnQgaSA9ICpsZW5ndGg7CisgICAgICAgIGludCBqID0g
Kmxlbmd0aCArIG51bWJlcl9sZW5ndGggLSAxOworICAgICAgICB3aGlsZSAoaSA8IGopIHsKKyAg
ICAgICAgICAgIGNoYXIgdG1wID0gYnVmZmVyW2ldOworICAgICAgICAgICAgYnVmZmVyW2ldID0g
YnVmZmVyW2pdOworICAgICAgICAgICAgYnVmZmVyW2pdID0gdG1wOworICAgICAgICAgICAgaSsr
OworICAgICAgICAgICAgai0tOworICAgICAgICB9CisgICAgICAgICpsZW5ndGggKz0gbnVtYmVy
X2xlbmd0aDsKKyAgICB9CisgICAgCisgICAgCisgICAgc3RhdGljIHZvaWQgRmlsbERpZ2l0czY0
Rml4ZWRMZW5ndGgodWludDY0X3QgbnVtYmVyLCBpbnQgcmVxdWVzdGVkX2xlbmd0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLCBp
bnQqIGxlbmd0aCkgeworICAgICAgICBVTlVTRURfUEFSQU0ocmVxdWVzdGVkX2xlbmd0aCk7Cisg
ICAgICAgIGNvbnN0IHVpbnQzMl90IGtUZW43ID0gMTAwMDAwMDA7CisgICAgICAgIC8vIEZvciBl
ZmZpY2llbmN5IGN1dCB0aGUgbnVtYmVyIGludG8gMyB1aW50MzJfdCBwYXJ0cywgYW5kIHByaW50
IHRob3NlLgorICAgICAgICB1aW50MzJfdCBwYXJ0MiA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pihu
dW1iZXIgJSBrVGVuNyk7CisgICAgICAgIG51bWJlciAvPSBrVGVuNzsKKyAgICAgICAgdWludDMy
X3QgcGFydDEgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4obnVtYmVyICUga1RlbjcpOworICAgICAg
ICB1aW50MzJfdCBwYXJ0MCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihudW1iZXIgLyBrVGVuNyk7
CisgICAgICAgIAorICAgICAgICBGaWxsRGlnaXRzMzJGaXhlZExlbmd0aChwYXJ0MCwgMywgYnVm
ZmVyLCBsZW5ndGgpOworICAgICAgICBGaWxsRGlnaXRzMzJGaXhlZExlbmd0aChwYXJ0MSwgNywg
YnVmZmVyLCBsZW5ndGgpOworICAgICAgICBGaWxsRGlnaXRzMzJGaXhlZExlbmd0aChwYXJ0Miwg
NywgYnVmZmVyLCBsZW5ndGgpOworICAgIH0KKyAgICAKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBG
aWxsRGlnaXRzNjQodWludDY0X3QgbnVtYmVyLCBWZWN0b3I8Y2hhcj4gYnVmZmVyLCBpbnQqIGxl
bmd0aCkgeworICAgICAgICBjb25zdCB1aW50MzJfdCBrVGVuNyA9IDEwMDAwMDAwOworICAgICAg
ICAvLyBGb3IgZWZmaWNpZW5jeSBjdXQgdGhlIG51bWJlciBpbnRvIDMgdWludDMyX3QgcGFydHMs
IGFuZCBwcmludCB0aG9zZS4KKyAgICAgICAgdWludDMyX3QgcGFydDIgPSBzdGF0aWNfY2FzdDx1
aW50MzJfdD4obnVtYmVyICUga1RlbjcpOworICAgICAgICBudW1iZXIgLz0ga1Rlbjc7CisgICAg
ICAgIHVpbnQzMl90IHBhcnQxID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG51bWJlciAlIGtUZW43
KTsKKyAgICAgICAgdWludDMyX3QgcGFydDAgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4obnVtYmVy
IC8ga1RlbjcpOworICAgICAgICAKKyAgICAgICAgaWYgKHBhcnQwICE9IDApIHsKKyAgICAgICAg
ICAgIEZpbGxEaWdpdHMzMihwYXJ0MCwgYnVmZmVyLCBsZW5ndGgpOworICAgICAgICAgICAgRmls
bERpZ2l0czMyRml4ZWRMZW5ndGgocGFydDEsIDcsIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAg
ICAgIEZpbGxEaWdpdHMzMkZpeGVkTGVuZ3RoKHBhcnQyLCA3LCBidWZmZXIsIGxlbmd0aCk7Cisg
ICAgICAgIH0gZWxzZSBpZiAocGFydDEgIT0gMCkgeworICAgICAgICAgICAgRmlsbERpZ2l0czMy
KHBhcnQxLCBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgICAgICBGaWxsRGlnaXRzMzJGaXhlZExl
bmd0aChwYXJ0MiwgNywgYnVmZmVyLCBsZW5ndGgpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgRmlsbERpZ2l0czMyKHBhcnQyLCBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgCisgICAgc3RhdGljIHZvaWQgUm91bmRVcChWZWN0b3I8Y2hhcj4gYnVm
ZmVyLCBpbnQqIGxlbmd0aCwgaW50KiBkZWNpbWFsX3BvaW50KSB7CisgICAgICAgIC8vIEFuIGVt
cHR5IGJ1ZmZlciByZXByZXNlbnRzIDAuCisgICAgICAgIGlmICgqbGVuZ3RoID09IDApIHsKKyAg
ICAgICAgICAgIGJ1ZmZlclswXSA9ICcxJzsKKyAgICAgICAgICAgICpkZWNpbWFsX3BvaW50ID0g
MTsKKyAgICAgICAgICAgICpsZW5ndGggPSAxOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIC8vIFJvdW5kIHRoZSBsYXN0IGRpZ2l0IHVudGlsIHdlIGVpdGhlciBoYXZl
IGEgZGlnaXQgdGhhdCB3YXMgbm90ICc5JyBvciB1bnRpbAorICAgICAgICAvLyB3ZSByZWFjaGVk
IHRoZSBmaXJzdCBkaWdpdC4KKyAgICAgICAgYnVmZmVyWygqbGVuZ3RoKSAtIDFdKys7CisgICAg
ICAgIGZvciAoaW50IGkgPSAoKmxlbmd0aCkgLSAxOyBpID4gMDsgLS1pKSB7CisgICAgICAgICAg
ICBpZiAoYnVmZmVyW2ldICE9ICcwJyArIDEwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnVmZmVyW2ldID0gJzAnOworICAgICAgICAgICAg
YnVmZmVyW2kgLSAxXSsrOworICAgICAgICB9CisgICAgICAgIC8vIElmIHRoZSBmaXJzdCBkaWdp
dCBpcyBub3cgJzAnICsgMTAsIHdlIHdvdWxkIG5lZWQgdG8gc2V0IGl0IHRvICcwJyBhbmQgYWRk
CisgICAgICAgIC8vIGEgJzEnIGluIGZyb250LiBIb3dldmVyIHdlIHJlYWNoIHRoZSBmaXJzdCBk
aWdpdCBvbmx5IGlmIGFsbCBmb2xsb3dpbmcKKyAgICAgICAgLy8gZGlnaXRzIGhhZCBiZWVuICc5
JyBiZWZvcmUgcm91bmRpbmcgdXAuIE5vdyBhbGwgdHJhaWxpbmcgZGlnaXRzIGFyZSAnMCcgYW5k
CisgICAgICAgIC8vIHdlIHNpbXBseSBzd2l0Y2ggdGhlIGZpcnN0IGRpZ2l0IHRvICcxJyBhbmQg
dXBkYXRlIHRoZSBkZWNpbWFsLXBvaW50CisgICAgICAgIC8vIChpbmRpY2F0aW5nIHRoYXQgdGhl
IHBvaW50IGlzIG5vdyBvbmUgZGlnaXQgdG8gdGhlIHJpZ2h0KS4KKyAgICAgICAgaWYgKGJ1ZmZl
clswXSA9PSAnMCcgKyAxMCkgeworICAgICAgICAgICAgYnVmZmVyWzBdID0gJzEnOworICAgICAg
ICAgICAgKCpkZWNpbWFsX3BvaW50KSsrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIAor
ICAgIC8vIFRoZSBnaXZlbiBmcmFjdGlvbmFscyBudW1iZXIgcmVwcmVzZW50cyBhIGZpeGVkLXBv
aW50IG51bWJlciB3aXRoIGJpbmFyeQorICAgIC8vIHBvaW50IGF0IGJpdCAoLWV4cG9uZW50KS4K
KyAgICAvLyBQcmVjb25kaXRpb25zOgorICAgIC8vICAgLTEyOCA8PSBleHBvbmVudCA8PSAwLgor
ICAgIC8vICAgMCA8PSBmcmFjdGlvbmFscyAqIDJeZXhwb25lbnQgPCAxCisgICAgLy8gICBUaGUg
YnVmZmVyIGhvbGRzIHRoZSByZXN1bHQuCisgICAgLy8gVGhlIGZ1bmN0aW9uIHdpbGwgcm91bmQg
aXRzIHJlc3VsdC4gRHVyaW5nIHRoZSByb3VuZGluZy1wcm9jZXNzIGRpZ2l0cyBub3QKKyAgICAv
LyBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBtaWdodCBiZSB1cGRhdGVkLCBhbmQgdGhlIGRl
Y2ltYWwtcG9pbnQgdmFyaWFibGUKKyAgICAvLyBtaWdodCBiZSB1cGRhdGVkLiBJZiB0aGlzIGZ1
bmN0aW9uIGdlbmVyYXRlcyB0aGUgZGlnaXRzIDk5IGFuZCB0aGUgYnVmZmVyCisgICAgLy8gYWxy
ZWFkeSBjb250YWluZWQgIjE5OSIgKHRodXMgeWllbGRpbmcgYSBidWZmZXIgb2YgIjE5OTk5Iikg
dGhlbiBhCisgICAgLy8gcm91bmRpbmctdXAgd2lsbCBjaGFuZ2UgdGhlIGNvbnRlbnRzIG9mIHRo
ZSBidWZmZXIgdG8gIjIwMDAwIi4KKyAgICBzdGF0aWMgdm9pZCBGaWxsRnJhY3Rpb25hbHModWlu
dDY0X3QgZnJhY3Rpb25hbHMsIGludCBleHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGZyYWN0aW9uYWxfY291bnQsIFZlY3RvcjxjaGFyPiBidWZmZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogbGVuZ3RoLCBpbnQqIGRlY2ltYWxfcG9p
bnQpIHsKKyAgICAgICAgQVNTRVJUKC0xMjggPD0gZXhwb25lbnQgJiYgZXhwb25lbnQgPD0gMCk7
CisgICAgICAgIC8vICdmcmFjdGlvbmFscycgaXMgYSBmaXhlZC1wb2ludCBudW1iZXIsIHdpdGgg
YmluYXJ5IHBvaW50IGF0IGJpdAorICAgICAgICAvLyAoLWV4cG9uZW50KS4gSW5zaWRlIHRoZSBm
dW5jdGlvbiB0aGUgbm9uLWNvbnZlcnRlZCByZW1haW5kZXIgb2YgZnJhY3Rpb25hbHMKKyAgICAg
ICAgLy8gaXMgYSBmaXhlZC1wb2ludCBudW1iZXIsIHdpdGggYmluYXJ5IHBvaW50IGF0IGJpdCAn
cG9pbnQnLgorICAgICAgICBpZiAoLWV4cG9uZW50IDw9IDY0KSB7CisgICAgICAgICAgICAvLyBP
bmUgNjQgYml0IG51bWJlciBpcyBzdWZmaWNpZW50LgorICAgICAgICAgICAgQVNTRVJUKGZyYWN0
aW9uYWxzID4+IDU2ID09IDApOworICAgICAgICAgICAgaW50IHBvaW50ID0gLWV4cG9uZW50Owor
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFjdGlvbmFsX2NvdW50OyArK2kpIHsK
KyAgICAgICAgICAgICAgICBpZiAoZnJhY3Rpb25hbHMgPT0gMCkgYnJlYWs7CisgICAgICAgICAg
ICAgICAgLy8gSW5zdGVhZCBvZiBtdWx0aXBseWluZyBieSAxMCB3ZSBtdWx0aXBseSBieSA1IGFu
ZCBhZGp1c3QgdGhlIHBvaW50CisgICAgICAgICAgICAgICAgLy8gbG9jYXRpb24uIFRoaXMgd2F5
IHRoZSBmcmFjdGlvbmFscyB2YXJpYWJsZSB3aWxsIG5vdCBvdmVyZmxvdy4KKyAgICAgICAgICAg
ICAgICAvLyBJbnZhcmlhbnQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbG9vcDogZnJhY3Rpb25h
bHMgPCAyXnBvaW50LgorICAgICAgICAgICAgICAgIC8vIEluaXRpYWxseSB3ZSBoYXZlOiBwb2lu
dCA8PSA2NCBhbmQgZnJhY3Rpb25hbHMgPCAyXjU2CisgICAgICAgICAgICAgICAgLy8gQWZ0ZXIg
ZWFjaCBpdGVyYXRpb24gdGhlIHBvaW50IGlzIGRlY3JlbWVudGVkIGJ5IG9uZS4KKyAgICAgICAg
ICAgICAgICAvLyBOb3RlIHRoYXQgNV4zID0gMTI1IDwgMTI4ID0gMl43LgorICAgICAgICAgICAg
ICAgIC8vIFRoZXJlZm9yZSB0aHJlZSBpdGVyYXRpb25zIG9mIHRoaXMgbG9vcCB3aWxsIG5vdCBv
dmVyZmxvdyBmcmFjdGlvbmFscworICAgICAgICAgICAgICAgIC8vIChldmVuIHdpdGhvdXQgdGhl
IHN1YnRyYWN0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIGxvb3AgYm9keSkuIEF0IHRoaXMKKyAgICAg
ICAgICAgICAgICAvLyB0aW1lIHBvaW50IHdpbGwgc2F0aXNmeSBwb2ludCA8PSA2MSBhbmQgdGhl
cmVmb3JlIGZyYWN0aW9uYWxzIDwgMl5wb2ludAorICAgICAgICAgICAgICAgIC8vIGFuZCBhbnkg
ZnVydGhlciBtdWx0aXBsaWNhdGlvbiBvZiBmcmFjdGlvbmFscyBieSA1IHdpbGwgbm90IG92ZXJm
bG93LgorICAgICAgICAgICAgICAgIGZyYWN0aW9uYWxzICo9IDU7CisgICAgICAgICAgICAgICAg
cG9pbnQtLTsKKyAgICAgICAgICAgICAgICBpbnQgZGlnaXQgPSBzdGF0aWNfY2FzdDxpbnQ+KGZy
YWN0aW9uYWxzID4+IHBvaW50KTsKKyAgICAgICAgICAgICAgICBidWZmZXJbKmxlbmd0aF0gPSAn
MCcgKyBkaWdpdDsKKyAgICAgICAgICAgICAgICAoKmxlbmd0aCkrKzsKKyAgICAgICAgICAgICAg
ICBmcmFjdGlvbmFscyAtPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oZGlnaXQpIDw8IHBvaW50Owor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gSWYgdGhlIGZpcnN0IGJpdCBhZnRlciB0aGUg
cG9pbnQgaXMgc2V0IHdlIGhhdmUgdG8gcm91bmQgdXAuCisgICAgICAgICAgICBpZiAoKChmcmFj
dGlvbmFscyA+PiAocG9pbnQgLSAxKSkgJiAxKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgUm91
bmRVcChidWZmZXIsIGxlbmd0aCwgZGVjaW1hbF9wb2ludCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSB7ICAvLyBXZSBuZWVkIDEyOCBiaXRzLgorICAgICAgICAgICAgQVNTRVJUKDY0
IDwgLWV4cG9uZW50ICYmIC1leHBvbmVudCA8PSAxMjgpOworICAgICAgICAgICAgVUludDEyOCBm
cmFjdGlvbmFsczEyOCA9IFVJbnQxMjgoZnJhY3Rpb25hbHMsIDApOworICAgICAgICAgICAgZnJh
Y3Rpb25hbHMxMjguU2hpZnQoLWV4cG9uZW50IC0gNjQpOworICAgICAgICAgICAgaW50IHBvaW50
ID0gMTI4OworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFjdGlvbmFsX2NvdW50
OyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoZnJhY3Rpb25hbHMxMjguSXNaZXJvKCkpIGJy
ZWFrOworICAgICAgICAgICAgICAgIC8vIEFzIGJlZm9yZTogaW5zdGVhZCBvZiBtdWx0aXBseWlu
ZyBieSAxMCB3ZSBtdWx0aXBseSBieSA1IGFuZCBhZGp1c3QgdGhlCisgICAgICAgICAgICAgICAg
Ly8gcG9pbnQgbG9jYXRpb24uCisgICAgICAgICAgICAgICAgLy8gVGhpcyBtdWx0aXBsaWNhdGlv
biB3aWxsIG5vdCBvdmVyZmxvdyBmb3IgdGhlIHNhbWUgcmVhc29ucyBhcyBiZWZvcmUuCisgICAg
ICAgICAgICAgICAgZnJhY3Rpb25hbHMxMjguTXVsdGlwbHkoNSk7CisgICAgICAgICAgICAgICAg
cG9pbnQtLTsKKyAgICAgICAgICAgICAgICBpbnQgZGlnaXQgPSBmcmFjdGlvbmFsczEyOC5EaXZN
b2RQb3dlck9mMihwb2ludCk7CisgICAgICAgICAgICAgICAgYnVmZmVyWypsZW5ndGhdID0gJzAn
ICsgZGlnaXQ7CisgICAgICAgICAgICAgICAgKCpsZW5ndGgpKys7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoZnJhY3Rpb25hbHMxMjguQml0QXQocG9pbnQgLSAxKSA9PSAxKSB7Cisg
ICAgICAgICAgICAgICAgUm91bmRVcChidWZmZXIsIGxlbmd0aCwgZGVjaW1hbF9wb2ludCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgLy8gUmVtb3Zl
cyBsZWFkaW5nIGFuZCB0cmFpbGluZyB6ZXJvcy4KKyAgICAvLyBJZiBsZWFkaW5nIHplcm9zIGFy
ZSByZW1vdmVkIHRoZW4gdGhlIGRlY2ltYWwgcG9pbnQgcG9zaXRpb24gaXMgYWRqdXN0ZWQuCisg
ICAgc3RhdGljIHZvaWQgVHJpbVplcm9zKFZlY3RvcjxjaGFyPiBidWZmZXIsIGludCogbGVuZ3Ro
LCBpbnQqIGRlY2ltYWxfcG9pbnQpIHsKKyAgICAgICAgd2hpbGUgKCpsZW5ndGggPiAwICYmIGJ1
ZmZlclsoKmxlbmd0aCkgLSAxXSA9PSAnMCcpIHsKKyAgICAgICAgICAgICgqbGVuZ3RoKS0tOwor
ICAgICAgICB9CisgICAgICAgIGludCBmaXJzdF9ub25femVybyA9IDA7CisgICAgICAgIHdoaWxl
IChmaXJzdF9ub25femVybyA8ICpsZW5ndGggJiYgYnVmZmVyW2ZpcnN0X25vbl96ZXJvXSA9PSAn
MCcpIHsKKyAgICAgICAgICAgIGZpcnN0X25vbl96ZXJvKys7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGZpcnN0X25vbl96ZXJvICE9IDApIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSBmaXJz
dF9ub25femVybzsgaSA8ICpsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIGJ1ZmZlcltp
IC0gZmlyc3Rfbm9uX3plcm9dID0gYnVmZmVyW2ldOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgKmxlbmd0aCAtPSBmaXJzdF9ub25femVybzsKKyAgICAgICAgICAgICpkZWNpbWFsX3BvaW50
IC09IGZpcnN0X25vbl96ZXJvOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIGJv
b2wgRmFzdEZpeGVkRHRvYShkb3VibGUgdiwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IGZy
YWN0aW9uYWxfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBidWZm
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgIGludCogbGVuZ3RoLAorICAgICAgICAgICAgICAg
ICAgICAgICBpbnQqIGRlY2ltYWxfcG9pbnQpIHsKKyAgICAgICAgY29uc3QgdWludDMyX3Qga01h
eFVJbnQzMiA9IDB4RkZGRkZGRkY7CisgICAgICAgIHVpbnQ2NF90IHNpZ25pZmljYW5kID0gRG91
YmxlKHYpLlNpZ25pZmljYW5kKCk7CisgICAgICAgIGludCBleHBvbmVudCA9IERvdWJsZSh2KS5F
eHBvbmVudCgpOworICAgICAgICAvLyB2ID0gc2lnbmlmaWNhbmQgKiAyXmV4cG9uZW50ICh3aXRo
IHNpZ25pZmljYW5kIGEgNTNiaXQgaW50ZWdlcikuCisgICAgICAgIC8vIElmIHRoZSBleHBvbmVu
dCBpcyBsYXJnZXIgdGhhbiAyMCAoaS5lLiB3ZSBtYXkgaGF2ZSBhIDczYml0IG51bWJlcikgdGhl
biB3ZQorICAgICAgICAvLyBkb24ndCBrbm93IGhvdyB0byBjb21wdXRlIHRoZSByZXByZXNlbnRh
dGlvbi4gMl43MyB+PSA5LjUqMTBeMjEuCisgICAgICAgIC8vIElmIG5lY2Vzc2FyeSB0aGlzIGxp
bWl0IGNvdWxkIHByb2JhYmx5IGJlIGluY3JlYXNlZCwgYnV0IHdlIGRvbid0IG5lZWQKKyAgICAg
ICAgLy8gbW9yZS4KKyAgICAgICAgaWYgKGV4cG9uZW50ID4gMjApIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgaWYgKGZyYWN0aW9uYWxfY291bnQgPiAyMCkgcmV0dXJuIGZhbHNlOworICAgICAgICAq
bGVuZ3RoID0gMDsKKyAgICAgICAgLy8gQXQgbW9zdCBrRG91YmxlU2lnbmlmaWNhbmRTaXplIGJp
dHMgb2YgdGhlIHNpZ25pZmljYW5kIGFyZSBub24temVyby4KKyAgICAgICAgLy8gR2l2ZW4gYSA2
NCBiaXQgaW50ZWdlciB3ZSBoYXZlIDExIDBzIGZvbGxvd2VkIGJ5IDUzIHBvdGVudGlhbGx5IG5v
bi16ZXJvCisgICAgICAgIC8vIGJpdHM6ICAwLi4xMSouLjB4eHguLjUzKi4ueHgKKyAgICAgICAg
aWYgKGV4cG9uZW50ICsga0RvdWJsZVNpZ25pZmljYW5kU2l6ZSA+IDY0KSB7CisgICAgICAgICAg
ICAvLyBUaGUgZXhwb25lbnQgbXVzdCBiZSA+IDExLgorICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgIC8vIFdlIGtub3cgdGhhdCB2ID0gc2lnbmlmaWNhbmQgKiAyXmV4cG9uZW50LgorICAgICAg
ICAgICAgLy8gQW5kIHRoZSBleHBvbmVudCA+IDExLgorICAgICAgICAgICAgLy8gV2Ugc2ltcGxp
ZnkgdGhlIHRhc2sgYnkgZGl2aWRpbmcgdiBieSAxMF4xNy4KKyAgICAgICAgICAgIC8vIFRoZSBx
dW90aWVudCBkZWxpdmVycyB0aGUgZmlyc3QgZGlnaXRzLCBhbmQgdGhlIHJlbWFpbmRlciBmaXRz
IGludG8gYSA2NAorICAgICAgICAgICAgLy8gYml0IG51bWJlci4KKyAgICAgICAgICAgIC8vIERp
dmlkaW5nIGJ5IDEwXjE3IGlzIGVxdWl2YWxlbnQgdG8gZGl2aWRpbmcgYnkgNV4xNyoyXjE3Lgor
ICAgICAgICAgICAgY29uc3QgdWludDY0X3Qga0ZpdmUxNyA9IFVJTlQ2NF8yUEFSVF9DKDB4QjEs
IEEyQkMyRUM1KTsgIC8vIDVeMTcKKyAgICAgICAgICAgIHVpbnQ2NF90IGRpdmlzb3IgPSBrRml2
ZTE3OworICAgICAgICAgICAgaW50IGRpdmlzb3JfcG93ZXIgPSAxNzsKKyAgICAgICAgICAgIHVp
bnQ2NF90IGRpdmlkZW5kID0gc2lnbmlmaWNhbmQ7CisgICAgICAgICAgICB1aW50MzJfdCBxdW90
aWVudDsKKyAgICAgICAgICAgIHVpbnQ2NF90IHJlbWFpbmRlcjsKKyAgICAgICAgICAgIC8vIExl
dCB2ID0gZiAqIDJeZSB3aXRoIGYgPT0gc2lnbmlmaWNhbmQgYW5kIGUgPT0gZXhwb25lbnQuCisg
ICAgICAgICAgICAvLyBUaGVuIG5lZWQgcSAocXVvdGllbnQpIGFuZCByIChyZW1haW5kZXIpIGFz
IGZvbGxvd3M6CisgICAgICAgICAgICAvLyAgIHYgICAgICAgICAgICA9IHEgKiAxMF4xNyAgICAg
ICArIHIKKyAgICAgICAgICAgIC8vICAgZiAqIDJeZSAgICAgID0gcSAqIDEwXjE3ICAgICAgICsg
cgorICAgICAgICAgICAgLy8gICBmICogMl5lICAgICAgPSBxICogNV4xNyAqIDJeMTcgKyByCisg
ICAgICAgICAgICAvLyBJZiBlID4gMTcgdGhlbgorICAgICAgICAgICAgLy8gICBmICogMl4oZS0x
NykgPSBxICogNV4xNyAgICAgICAgKyByLzJeMTcKKyAgICAgICAgICAgIC8vIGVsc2UKKyAgICAg
ICAgICAgIC8vICAgZiAgPSBxICogNV4xNyAqIDJeKDE3LWUpICsgci8yXmUKKyAgICAgICAgICAg
IGlmIChleHBvbmVudCA+IGRpdmlzb3JfcG93ZXIpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBv
bmx5IGFsbG93IGV4cG9uZW50cyBvZiB1cCB0byAyMCBhbmQgdGhlcmVmb3JlICgxNyAtIGUpIDw9
IDMKKyAgICAgICAgICAgICAgICBkaXZpZGVuZCA8PD0gZXhwb25lbnQgLSBkaXZpc29yX3Bvd2Vy
OworICAgICAgICAgICAgICAgIHF1b3RpZW50ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGRpdmlk
ZW5kIC8gZGl2aXNvcik7CisgICAgICAgICAgICAgICAgcmVtYWluZGVyID0gKGRpdmlkZW5kICUg
ZGl2aXNvcikgPDwgZGl2aXNvcl9wb3dlcjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgZGl2aXNvciA8PD0gZGl2aXNvcl9wb3dlciAtIGV4cG9uZW50OworICAgICAgICAg
ICAgICAgIHF1b3RpZW50ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGRpdmlkZW5kIC8gZGl2aXNv
cik7CisgICAgICAgICAgICAgICAgcmVtYWluZGVyID0gKGRpdmlkZW5kICUgZGl2aXNvcikgPDwg
ZXhwb25lbnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGaWxsRGlnaXRzMzIocXVvdGll
bnQsIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAgICAgIEZpbGxEaWdpdHM2NEZpeGVkTGVuZ3Ro
KHJlbWFpbmRlciwgZGl2aXNvcl9wb3dlciwgYnVmZmVyLCBsZW5ndGgpOworICAgICAgICAgICAg
KmRlY2ltYWxfcG9pbnQgPSAqbGVuZ3RoOworICAgICAgICB9IGVsc2UgaWYgKGV4cG9uZW50ID49
IDApIHsKKyAgICAgICAgICAgIC8vIDAgPD0gZXhwb25lbnQgPD0gMTEKKyAgICAgICAgICAgIHNp
Z25pZmljYW5kIDw8PSBleHBvbmVudDsKKyAgICAgICAgICAgIEZpbGxEaWdpdHM2NChzaWduaWZp
Y2FuZCwgYnVmZmVyLCBsZW5ndGgpOworICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSAqbGVu
Z3RoOworICAgICAgICB9IGVsc2UgaWYgKGV4cG9uZW50ID4gLWtEb3VibGVTaWduaWZpY2FuZFNp
emUpIHsKKyAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gY3V0IHRoZSBudW1iZXIuCisgICAgICAg
ICAgICB1aW50NjRfdCBpbnRlZ3JhbHMgPSBzaWduaWZpY2FuZCA+PiAtZXhwb25lbnQ7CisgICAg
ICAgICAgICB1aW50NjRfdCBmcmFjdGlvbmFscyA9IHNpZ25pZmljYW5kIC0gKGludGVncmFscyA8
PCAtZXhwb25lbnQpOworICAgICAgICAgICAgaWYgKGludGVncmFscyA+IGtNYXhVSW50MzIpIHsK
KyAgICAgICAgICAgICAgICBGaWxsRGlnaXRzNjQoaW50ZWdyYWxzLCBidWZmZXIsIGxlbmd0aCk7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEZpbGxEaWdpdHMzMihzdGF0
aWNfY2FzdDx1aW50MzJfdD4oaW50ZWdyYWxzKSwgYnVmZmVyLCBsZW5ndGgpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSAqbGVuZ3RoOworICAgICAgICAgICAg
RmlsbEZyYWN0aW9uYWxzKGZyYWN0aW9uYWxzLCBleHBvbmVudCwgZnJhY3Rpb25hbF9jb3VudCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGxlbmd0aCwgZGVjaW1hbF9wb2lu
dCk7CisgICAgICAgIH0gZWxzZSBpZiAoZXhwb25lbnQgPCAtMTI4KSB7CisgICAgICAgICAgICAv
LyBUaGlzIGNvbmZpZ3VyYXRpb24gKHdpdGggYXQgbW9zdCAyMCBkaWdpdHMpIG1lYW5zIHRoYXQg
YWxsIGRpZ2l0cyBtdXN0IGJlCisgICAgICAgICAgICAvLyAwLgorICAgICAgICAgICAgQVNTRVJU
KGZyYWN0aW9uYWxfY291bnQgPD0gMjApOworICAgICAgICAgICAgYnVmZmVyWzBdID0gJ1wwJzsK
KyAgICAgICAgICAgICpsZW5ndGggPSAwOworICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSAt
ZnJhY3Rpb25hbF9jb3VudDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICpkZWNpbWFs
X3BvaW50ID0gMDsKKyAgICAgICAgICAgIEZpbGxGcmFjdGlvbmFscyhzaWduaWZpY2FuZCwgZXhw
b25lbnQsIGZyYWN0aW9uYWxfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVm
ZmVyLCBsZW5ndGgsIGRlY2ltYWxfcG9pbnQpOworICAgICAgICB9CisgICAgICAgIFRyaW1aZXJv
cyhidWZmZXIsIGxlbmd0aCwgZGVjaW1hbF9wb2ludCk7CisgICAgICAgIGJ1ZmZlclsqbGVuZ3Ro
XSA9ICdcMCc7CisgICAgICAgIGlmICgoKmxlbmd0aCkgPT0gMCkgeworICAgICAgICAgICAgLy8g
VGhlIHN0cmluZyBpcyBlbXB0eSBhbmQgdGhlIGRlY2ltYWxfcG9pbnQgdGh1cyBoYXMgbm8gaW1w
b3J0YW5jZS4gTWltaWNrCisgICAgICAgICAgICAvLyBHYXkncyBkdG9hIGFuZCBhbmQgc2V0IGl0
IHRvIC1mcmFjdGlvbmFsX2NvdW50LgorICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSAtZnJh
Y3Rpb25hbF9jb3VudDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgCit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KKworfSAvLyBuYW1lc3BhY2Ug
V1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZml4ZWQtZHRv
YS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2ZpeGVkLWR0b2EuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi44YzBhZGI3NThiMzc3OTdjNTI3YjkxZjUyNjE5MjY0NTlkOTM2N2JlCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2ZpeGVkLWR0b2EuaApAQCAt
MCwwICsxLDYwIEBACisvLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBt
ZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAg
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8v
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8v
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZm5kZWYgRE9VQkxF
X0NPTlZFUlNJT05fRklYRURfRFRPQV9IXworI2RlZmluZSBET1VCTEVfQ09OVkVSU0lPTl9GSVhF
RF9EVE9BX0hfCisKKyNpbmNsdWRlICJ1dGlscy5oIgorCituYW1lc3BhY2UgV1RGIHsKKworbmFt
ZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKKyAgICAKKyAgICAvLyBQcm9kdWNlcyBkaWdpdHMg
bmVjZXNzYXJ5IHRvIHByaW50IGEgZ2l2ZW4gbnVtYmVyIHdpdGgKKyAgICAvLyAnZnJhY3Rpb25h
bF9jb3VudCcgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50LgorICAgIC8vIFRoZSBidWZm
ZXIgbXVzdCBiZSBiaWcgZW5vdWdoIHRvIGhvbGQgdGhlIHJlc3VsdCBwbHVzIG9uZSB0ZXJtaW5h
dGluZyBudWxsCisgICAgLy8gY2hhcmFjdGVyLgorICAgIC8vCisgICAgLy8gVGhlIHByb2R1Y2Vk
IGRpZ2l0cyBtaWdodCBiZSB0b28gc2hvcnQgaW4gd2hpY2ggY2FzZSB0aGUgY2FsbGVyIGhhcyB0
byBmaWxsCisgICAgLy8gdGhlIGdhcHMgd2l0aCAnMCdzLgorICAgIC8vIEV4YW1wbGU6IEZhc3RG
aXhlZER0b2EoMC4wMDEsIDUsIC4uLikgaXMgYWxsb3dlZCB0byByZXR1cm4gYnVmZmVyID0gIjEi
LCBhbmQKKyAgICAvLyBkZWNpbWFsX3BvaW50ID0gLTIuCisgICAgLy8gSGFsZndheSBjYXNlcyBh
cmUgcm91bmRlZCB0b3dhcmRzICsvLUluZmluaXR5IChhd2F5IGZyb20gMCkuIFRoZSBjYWxsCisg
ICAgLy8gRmFzdEZpeGVkRHRvYSgwLjE1LCAyLCAuLi4pIHRodXMgcmV0dXJucyBidWZmZXIgPSAi
MiIsIGRlY2ltYWxfcG9pbnQgPSAwLgorICAgIC8vIFRoZSByZXR1cm5lZCBidWZmZXIgbWF5IGNv
bnRhaW4gZGlnaXRzIHRoYXQgd291bGQgYmUgdHJ1bmNhdGVkIGZyb20gdGhlCisgICAgLy8gc2hv
cnRlc3QgcmVwcmVzZW50YXRpb24gb2YgdGhlIGlucHV0LgorICAgIC8vCisgICAgLy8gVGhpcyBt
ZXRob2Qgb25seSB3b3JrcyBmb3Igc29tZSBwYXJhbWV0ZXJzLiBJZiBpdCBjYW4ndCBoYW5kbGUg
dGhlIGlucHV0IGl0CisgICAgLy8gcmV0dXJucyBmYWxzZS4gVGhlIG91dHB1dCBpcyBudWxsLXRl
cm1pbmF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gc3VjY2VlZHMuCisgICAgYm9vbCBGYXN0Rml4ZWRE
dG9hKGRvdWJsZSB2LCBpbnQgZnJhY3Rpb25hbF9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwgaW50KiBsZW5ndGgsIGludCogZGVjaW1hbF9wb2ludCk7
CisgICAgCit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKKyNlbmRpZiAgLy8gRE9VQkxFX0NPTlZFUlNJT05fRklYRURfRFRPQV9IXwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL3N0cnRvZC5jYyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9zdHJ0b2QuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGQ0M2Q2OWZh
NzJmMmRkNmVjNmNlN2I5NDQzNTZhMTI5ZDI3YzUzMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9zdHJ0b2QuY2MKQEAgLTAsMCArMSw0NDUgQEAKKy8v
IENvcHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRp
c2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
Ly8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUg
PGxpbWl0cy5oPgorCisjaW5jbHVkZSAic3RydG9kLmgiCisjaW5jbHVkZSAiYmlnbnVtLmgiCisj
aW5jbHVkZSAiY2FjaGVkLXBvd2Vycy5oIgorI2luY2x1ZGUgImRvdWJsZS5oIgorCituYW1lc3Bh
Y2UgV1RGIHsKKworbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKKyAgICAKKyAgICAvLyAy
XjUzID0gOTAwNzE5OTI1NDc0MDk5Mi4KKyAgICAvLyBBbnkgaW50ZWdlciB3aXRoIGF0IG1vc3Qg
MTUgZGVjaW1hbCBkaWdpdHMgd2lsbCBoZW5jZSBmaXQgaW50byBhIGRvdWJsZQorICAgIC8vICh3
aGljaCBoYXMgYSA1M2JpdCBzaWduaWZpY2FuZCkgd2l0aG91dCBsb3NzIG9mIHByZWNpc2lvbi4K
KyAgICBzdGF0aWMgY29uc3QgaW50IGtNYXhFeGFjdERvdWJsZUludGVnZXJEZWNpbWFsRGlnaXRz
ID0gMTU7CisgICAgLy8gMl42NCA9IDE4NDQ2NzQ0MDczNzA5NTUxNjE2ID4gMTBeMTkKKyAgICBz
dGF0aWMgY29uc3QgaW50IGtNYXhVaW50NjREZWNpbWFsRGlnaXRzID0gMTk7CisgICAgCisgICAg
Ly8gTWF4IGRvdWJsZTogMS43OTc2OTMxMzQ4NjIzMTU3IHggMTBeMzA4CisgICAgLy8gTWluIG5v
bi16ZXJvIGRvdWJsZTogNC45NDA2NTY0NTg0MTI0NjU0IHggMTBeLTMyNAorICAgIC8vIEFueSB4
ID49IDEwXjMwOSBpcyBpbnRlcnByZXRlZCBhcyAraW5maW5pdHkuCisgICAgLy8gQW55IHggPD0g
MTBeLTMyNCBpcyBpbnRlcnByZXRlZCBhcyAwLgorICAgIC8vIE5vdGUgdGhhdCAyLjVlLTMyNCAo
ZGVzcGl0ZSBiZWluZyBzbWFsbGVyIHRoYW4gdGhlIG1pbiBkb3VibGUpIHdpbGwgYmUgcmVhZAor
ICAgIC8vIGFzIG5vbi16ZXJvIChlcXVhbCB0byB0aGUgbWluIG5vbi16ZXJvIGRvdWJsZSkuCisg
ICAgc3RhdGljIGNvbnN0IGludCBrTWF4RGVjaW1hbFBvd2VyID0gMzA5OworICAgIHN0YXRpYyBj
b25zdCBpbnQga01pbkRlY2ltYWxQb3dlciA9IC0zMjQ7CisgICAgCisgICAgLy8gMl42NCA9IDE4
NDQ2NzQ0MDczNzA5NTUxNjE2CisgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGtNYXhVaW50NjQg
PSBVSU5UNjRfMlBBUlRfQygweEZGRkZGRkZGLCBGRkZGRkZGRik7CisgICAgCisgICAgCisgICAg
c3RhdGljIGNvbnN0IGRvdWJsZSBleGFjdF9wb3dlcnNfb2ZfdGVuW10gPSB7CisgICAgICAgIDEu
MCwgIC8vIDEwXjAKKyAgICAgICAgMTAuMCwKKyAgICAgICAgMTAwLjAsCisgICAgICAgIDEwMDAu
MCwKKyAgICAgICAgMTAwMDAuMCwKKyAgICAgICAgMTAwMDAwLjAsCisgICAgICAgIDEwMDAwMDAu
MCwKKyAgICAgICAgMTAwMDAwMDAuMCwKKyAgICAgICAgMTAwMDAwMDAwLjAsCisgICAgICAgIDEw
MDAwMDAwMDAuMCwKKyAgICAgICAgMTAwMDAwMDAwMDAuMCwgIC8vIDEwXjEwCisgICAgICAgIDEw
MDAwMDAwMDAwMC4wLAorICAgICAgICAxMDAwMDAwMDAwMDAwLjAsCisgICAgICAgIDEwMDAwMDAw
MDAwMDAwLjAsCisgICAgICAgIDEwMDAwMDAwMDAwMDAwMC4wLAorICAgICAgICAxMDAwMDAwMDAw
MDAwMDAwLjAsCisgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwLjAsCisgICAgICAgIDEwMDAwMDAw
MDAwMDAwMDAwMC4wLAorICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwLjAsCisgICAgICAgIDEw
MDAwMDAwMDAwMDAwMDAwMDAwLjAsCisgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMC4wLCAg
Ly8gMTBeMjAKKyAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMC4wLAorICAgICAgICAvLyAx
MF4yMiA9IDB4MjFlMTllMGM5YmFiMjQwMDAwMCA9IDB4ODc4Njc4MzI2ZWFjOSAqIDJeMjIKKyAg
ICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuMAorICAgIH07CisgICAgc3RhdGljIGNvbnN0
IGludCBrRXhhY3RQb3dlcnNPZlRlblNpemUgPSBBUlJBWV9TSVpFKGV4YWN0X3Bvd2Vyc19vZl90
ZW4pOworICAgIAorICAgIC8vIE1heGltdW0gbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBp
biB0aGUgZGVjaW1hbCByZXByZXNlbnRhdGlvbi4KKyAgICAvLyBJbiBmYWN0IHRoZSB2YWx1ZSBp
cyA3NzIgKHNlZSBjb252ZXJzaW9ucy5jYyksIGJ1dCB0byBnaXZlIHVzIHNvbWUgbWFyZ2luCisg
ICAgLy8gd2Ugcm91bmQgdXAgdG8gNzgwLgorICAgIHN0YXRpYyBjb25zdCBpbnQga01heFNpZ25p
ZmljYW50RGVjaW1hbERpZ2l0cyA9IDc4MDsKKyAgICAKKyAgICBzdGF0aWMgVmVjdG9yPGNvbnN0
IGNoYXI+IFRyaW1MZWFkaW5nWmVyb3MoVmVjdG9yPGNvbnN0IGNoYXI+IGJ1ZmZlcikgeworICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGJ1ZmZlci5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAg
ICAgICBpZiAoYnVmZmVyW2ldICE9ICcwJykgeworICAgICAgICAgICAgICAgIHJldHVybiBidWZm
ZXIuU3ViVmVjdG9yKGksIGJ1ZmZlci5sZW5ndGgoKSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIFZlY3Rvcjxjb25zdCBjaGFyPihidWZmZXIuc3RhcnQoKSwgMCk7
CisgICAgfQorICAgIAorICAgIAorICAgIHN0YXRpYyBWZWN0b3I8Y29uc3QgY2hhcj4gVHJpbVRy
YWlsaW5nWmVyb3MoVmVjdG9yPGNvbnN0IGNoYXI+IGJ1ZmZlcikgeworICAgICAgICBmb3IgKGlu
dCBpID0gYnVmZmVyLmxlbmd0aCgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgICAgIGlm
IChidWZmZXJbaV0gIT0gJzAnKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlci5TdWJW
ZWN0b3IoMCwgaSArIDEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVy
biBWZWN0b3I8Y29uc3QgY2hhcj4oYnVmZmVyLnN0YXJ0KCksIDApOworICAgIH0KKyAgICAKKyAg
ICAKKyAgICBzdGF0aWMgdm9pZCBUcmltVG9NYXhTaWduaWZpY2FudERpZ2l0cyhWZWN0b3I8Y29u
c3QgY2hhcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBleHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGFyKiBzaWduaWZpY2FudF9idWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50KiBzaWduaWZpY2FudF9leHBvbmVudCkgeworICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGtNYXhTaWduaWZpY2FudERlY2ltYWxEaWdpdHMgLSAxOyArK2kp
IHsKKyAgICAgICAgICAgIHNpZ25pZmljYW50X2J1ZmZlcltpXSA9IGJ1ZmZlcltpXTsKKyAgICAg
ICAgfQorICAgICAgICAvLyBUaGUgaW5wdXQgYnVmZmVyIGhhcyBiZWVuIHRyaW1tZWQuIFRoZXJl
Zm9yZSB0aGUgbGFzdCBkaWdpdCBtdXN0IGJlCisgICAgICAgIC8vIGRpZmZlcmVudCBmcm9tICcw
Jy4KKyAgICAgICAgQVNTRVJUKGJ1ZmZlcltidWZmZXIubGVuZ3RoKCkgLSAxXSAhPSAnMCcpOwor
ICAgICAgICAvLyBTZXQgdGhlIGxhc3QgZGlnaXQgdG8gYmUgbm9uLXplcm8uIFRoaXMgaXMgc3Vm
ZmljaWVudCB0byBndWFyYW50ZWUKKyAgICAgICAgLy8gY29ycmVjdCByb3VuZGluZy4KKyAgICAg
ICAgc2lnbmlmaWNhbnRfYnVmZmVyW2tNYXhTaWduaWZpY2FudERlY2ltYWxEaWdpdHMgLSAxXSA9
ICcxJzsKKyAgICAgICAgKnNpZ25pZmljYW50X2V4cG9uZW50ID0KKyAgICAgICAgZXhwb25lbnQg
KyAoYnVmZmVyLmxlbmd0aCgpIC0ga01heFNpZ25pZmljYW50RGVjaW1hbERpZ2l0cyk7CisgICAg
fQorICAgIAorICAgIC8vIFJlYWRzIGRpZ2l0cyBmcm9tIHRoZSBidWZmZXIgYW5kIGNvbnZlcnRz
IHRoZW0gdG8gYSB1aW50NjQuCisgICAgLy8gUmVhZHMgaW4gYXMgbWFueSBkaWdpdHMgYXMgZml0
IGludG8gYSB1aW50NjQuCisgICAgLy8gV2hlbiB0aGUgc3RyaW5nIHN0YXJ0cyB3aXRoICIxODQ0
Njc0NDA3MzcwOTU1MTYxIiBubyBmdXJ0aGVyIGRpZ2l0IGlzIHJlYWQuCisgICAgLy8gU2luY2Ug
Ml42NCA9IDE4NDQ2NzQ0MDczNzA5NTUxNjE2IGl0IHdvdWxkIHN0aWxsIGJlIHBvc3NpYmxlIHJl
YWQgYW5vdGhlcgorICAgIC8vIGRpZ2l0IGlmIGl0IHdhcyBsZXNzIG9yIGVxdWFsIHRoYW4gNiwg
YnV0IHRoaXMgd291bGQgY29tcGxpY2F0ZSB0aGUgY29kZS4KKyAgICBzdGF0aWMgdWludDY0X3Qg
UmVhZFVpbnQ2NChWZWN0b3I8Y29uc3QgY2hhcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCogbnVtYmVyX29mX3JlYWRfZGlnaXRzKSB7CisgICAgICAgIHVpbnQ2
NF90IHJlc3VsdCA9IDA7CisgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgd2hpbGUgKGkgPCBi
dWZmZXIubGVuZ3RoKCkgJiYgcmVzdWx0IDw9IChrTWF4VWludDY0IC8gMTAgLSAxKSkgeworICAg
ICAgICAgICAgaW50IGRpZ2l0ID0gYnVmZmVyW2krK10gLSAnMCc7CisgICAgICAgICAgICBBU1NF
UlQoMCA8PSBkaWdpdCAmJiBkaWdpdCA8PSA5KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IDEwICog
cmVzdWx0ICsgZGlnaXQ7CisgICAgICAgIH0KKyAgICAgICAgKm51bWJlcl9vZl9yZWFkX2RpZ2l0
cyA9IGk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIAorICAgIC8v
IFJlYWRzIGEgRGl5RnAgZnJvbSB0aGUgYnVmZmVyLgorICAgIC8vIFRoZSByZXR1cm5lZCBEaXlG
cCBpcyBub3QgbmVjZXNzYXJpbHkgbm9ybWFsaXplZC4KKyAgICAvLyBJZiByZW1haW5pbmdfZGVj
aW1hbHMgaXMgemVybyB0aGVuIHRoZSByZXR1cm5lZCBEaXlGcCBpcyBhY2N1cmF0ZS4KKyAgICAv
LyBPdGhlcndpc2UgaXQgaGFzIGJlZW4gcm91bmRlZCBhbmQgaGFzIGVycm9yIG9mIGF0IG1vc3Qg
MS8yIHVscC4KKyAgICBzdGF0aWMgdm9pZCBSZWFkRGl5RnAoVmVjdG9yPGNvbnN0IGNoYXI+IGJ1
ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRGl5RnAqIHJlc3VsdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50KiByZW1haW5pbmdfZGVjaW1hbHMpIHsKKyAgICAgICAgaW50
IHJlYWRfZGlnaXRzOworICAgICAgICB1aW50NjRfdCBzaWduaWZpY2FuZCA9IFJlYWRVaW50NjQo
YnVmZmVyLCAmcmVhZF9kaWdpdHMpOworICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCgpID09IHJl
YWRfZGlnaXRzKSB7CisgICAgICAgICAgICAqcmVzdWx0ID0gRGl5RnAoc2lnbmlmaWNhbmQsIDAp
OworICAgICAgICAgICAgKnJlbWFpbmluZ19kZWNpbWFscyA9IDA7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAvLyBSb3VuZCB0aGUgc2lnbmlmaWNhbmQuCisgICAgICAgICAgICBpZiAo
YnVmZmVyW3JlYWRfZGlnaXRzXSA+PSAnNScpIHsKKyAgICAgICAgICAgICAgICBzaWduaWZpY2Fu
ZCsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgYmluYXJ5IGV4
cG9uZW50LgorICAgICAgICAgICAgaW50IGV4cG9uZW50ID0gMDsKKyAgICAgICAgICAgICpyZXN1
bHQgPSBEaXlGcChzaWduaWZpY2FuZCwgZXhwb25lbnQpOworICAgICAgICAgICAgKnJlbWFpbmlu
Z19kZWNpbWFscyA9IGJ1ZmZlci5sZW5ndGgoKSAtIHJlYWRfZGlnaXRzOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIAorICAgIHN0YXRpYyBib29sIERvdWJsZVN0cnRvZChWZWN0b3I8Y29u
c3QgY2hhcj4gdHJpbW1lZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV4cG9u
ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUqIHJlc3VsdCkgeworI2lm
ICFkZWZpbmVkKERPVUJMRV9DT05WRVJTSU9OX0NPUlJFQ1RfRE9VQkxFX09QRVJBVElPTlMpCisg
ICAgICAgIC8vIE9uIHg4NiB0aGUgZmxvYXRpbmctcG9pbnQgc3RhY2sgY2FuIGJlIDY0IG9yIDgw
IGJpdHMgd2lkZS4gSWYgaXQgaXMKKyAgICAgICAgLy8gODAgYml0cyB3aWRlIChhcyBpcyB0aGUg
Y2FzZSBvbiBMaW51eCkgdGhlbiBkb3VibGUtcm91bmRpbmcgb2NjdXJzIGFuZCB0aGUKKyAgICAg
ICAgLy8gcmVzdWx0IGlzIG5vdCBhY2N1cmF0ZS4KKyAgICAgICAgLy8gV2Uga25vdyB0aGF0IFdp
bmRvd3MzMiB1c2VzIDY0IGJpdHMgYW5kIGlzIHRoZXJlZm9yZSBhY2N1cmF0ZS4KKyAgICAgICAg
Ly8gTm90ZSB0aGF0IHRoZSBBUk0gc2ltdWxhdG9yIGlzIGNvbXBpbGVkIGZvciAzMmJpdHMuIEl0
IHRoZXJlZm9yZSBleGhpYml0cworICAgICAgICAvLyB0aGUgc2FtZSBwcm9ibGVtLgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKyAgICAgICAgaWYgKHRyaW1tZWQubGVuZ3RoKCkgPD0g
a01heEV4YWN0RG91YmxlSW50ZWdlckRlY2ltYWxEaWdpdHMpIHsKKyAgICAgICAgICAgIGludCBy
ZWFkX2RpZ2l0czsKKyAgICAgICAgICAgIC8vIFRoZSB0cmltbWVkIGlucHV0IGZpdHMgaW50byBh
IGRvdWJsZS4KKyAgICAgICAgICAgIC8vIElmIHRoZSAxMF5leHBvbmVudCAocmVzcC4gMTBeLWV4
cG9uZW50KSBmaXRzIGludG8gYSBkb3VibGUgdG9vIHRoZW4gd2UKKyAgICAgICAgICAgIC8vIGNh
biBjb21wdXRlIHRoZSByZXN1bHQtZG91YmxlIHNpbXBseSBieSBtdWx0aXBseWluZyAocmVzcC4g
ZGl2aWRpbmcpIHRoZQorICAgICAgICAgICAgLy8gdHdvIG51bWJlcnMuCisgICAgICAgICAgICAv
LyBUaGlzIGlzIHBvc3NpYmxlIGJlY2F1c2UgSUVFRSBndWFyYW50ZWVzIHRoYXQgZmxvYXRpbmct
cG9pbnQgb3BlcmF0aW9ucworICAgICAgICAgICAgLy8gcmV0dXJuIHRoZSBiZXN0IHBvc3NpYmxl
IGFwcHJveGltYXRpb24uCisgICAgICAgICAgICBpZiAoZXhwb25lbnQgPCAwICYmIC1leHBvbmVu
dCA8IGtFeGFjdFBvd2Vyc09mVGVuU2l6ZSkgeworICAgICAgICAgICAgICAgIC8vIDEwXi1leHBv
bmVudCBmaXRzIGludG8gYSBkb3VibGUuCisgICAgICAgICAgICAgICAgKnJlc3VsdCA9IHN0YXRp
Y19jYXN0PGRvdWJsZT4oUmVhZFVpbnQ2NCh0cmltbWVkLCAmcmVhZF9kaWdpdHMpKTsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQocmVhZF9kaWdpdHMgPT0gdHJpbW1lZC5sZW5ndGgoKSk7CisgICAg
ICAgICAgICAgICAgKnJlc3VsdCAvPSBleGFjdF9wb3dlcnNfb2ZfdGVuWy1leHBvbmVudF07Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoMCA8PSBleHBvbmVudCAmJiBleHBvbmVudCA8IGtFeGFjdFBvd2Vyc09mVGVuU2l6ZSkgewor
ICAgICAgICAgICAgICAgIC8vIDEwXmV4cG9uZW50IGZpdHMgaW50byBhIGRvdWJsZS4KKyAgICAg
ICAgICAgICAgICAqcmVzdWx0ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihSZWFkVWludDY0KHRyaW1t
ZWQsICZyZWFkX2RpZ2l0cykpOworICAgICAgICAgICAgICAgIEFTU0VSVChyZWFkX2RpZ2l0cyA9
PSB0cmltbWVkLmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICAqcmVzdWx0ICo9IGV4YWN0X3Bv
d2Vyc19vZl90ZW5bZXhwb25lbnRdOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaW50IHJlbWFpbmluZ19kaWdpdHMgPQorICAgICAgICAg
ICAga01heEV4YWN0RG91YmxlSW50ZWdlckRlY2ltYWxEaWdpdHMgLSB0cmltbWVkLmxlbmd0aCgp
OworICAgICAgICAgICAgaWYgKCgwIDw9IGV4cG9uZW50KSAmJgorICAgICAgICAgICAgICAgIChl
eHBvbmVudCAtIHJlbWFpbmluZ19kaWdpdHMgPCBrRXhhY3RQb3dlcnNPZlRlblNpemUpKSB7Cisg
ICAgICAgICAgICAgICAgLy8gVGhlIHRyaW1tZWQgc3RyaW5nIHdhcyBzaG9ydCBhbmQgd2UgY2Fu
IG11bHRpcGx5IGl0IHdpdGgKKyAgICAgICAgICAgICAgICAvLyAxMF5yZW1haW5pbmdfZGlnaXRz
LiBBcyBhIHJlc3VsdCB0aGUgcmVtYWluaW5nIGV4cG9uZW50IG5vdyBmaXRzCisgICAgICAgICAg
ICAgICAgLy8gaW50byBhIGRvdWJsZSB0b28uCisgICAgICAgICAgICAgICAgKnJlc3VsdCA9IHN0
YXRpY19jYXN0PGRvdWJsZT4oUmVhZFVpbnQ2NCh0cmltbWVkLCAmcmVhZF9kaWdpdHMpKTsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQocmVhZF9kaWdpdHMgPT0gdHJpbW1lZC5sZW5ndGgoKSk7Cisg
ICAgICAgICAgICAgICAgKnJlc3VsdCAqPSBleGFjdF9wb3dlcnNfb2ZfdGVuW3JlbWFpbmluZ19k
aWdpdHNdOworICAgICAgICAgICAgICAgICpyZXN1bHQgKj0gZXhhY3RfcG93ZXJzX29mX3Rlbltl
eHBvbmVudCAtIHJlbWFpbmluZ19kaWdpdHNdOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgCisgICAgCisgICAgLy8gUmV0dXJucyAxMF5leHBvbmVudCBhcyBhbiBleGFjdCBEaXlG
cC4KKyAgICAvLyBUaGUgZ2l2ZW4gZXhwb25lbnQgbXVzdCBiZSBpbiB0aGUgcmFuZ2UgWzE7IGtE
ZWNpbWFsRXhwb25lbnREaXN0YW5jZVsuCisgICAgc3RhdGljIERpeUZwIEFkanVzdG1lbnRQb3dl
ck9mVGVuKGludCBleHBvbmVudCkgeworICAgICAgICBBU1NFUlQoMCA8IGV4cG9uZW50KTsKKyAg
ICAgICAgQVNTRVJUKGV4cG9uZW50IDwgUG93ZXJzT2ZUZW5DYWNoZTo6a0RlY2ltYWxFeHBvbmVu
dERpc3RhbmNlKTsKKyAgICAgICAgLy8gU2ltcGx5IGhhcmRjb2RlIHRoZSByZW1haW5pbmcgcG93
ZXJzIGZvciB0aGUgZ2l2ZW4gZGVjaW1hbCBleHBvbmVudAorICAgICAgICAvLyBkaXN0YW5jZS4K
KyAgICAgICAgQVNTRVJUKFBvd2Vyc09mVGVuQ2FjaGU6OmtEZWNpbWFsRXhwb25lbnREaXN0YW5j
ZSA9PSA4KTsKKyAgICAgICAgc3dpdGNoIChleHBvbmVudCkgeworICAgICAgICAgICAgY2FzZSAx
OiByZXR1cm4gRGl5RnAoVUlOVDY0XzJQQVJUX0MoMHhhMDAwMDAwMCwgMDAwMDAwMDApLCAtNjAp
OworICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gRGl5RnAoVUlOVDY0XzJQQVJUX0MoMHhjODAw
MDAwMCwgMDAwMDAwMDApLCAtNTcpOworICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gRGl5RnAo
VUlOVDY0XzJQQVJUX0MoMHhmYTAwMDAwMCwgMDAwMDAwMDApLCAtNTQpOworICAgICAgICAgICAg
Y2FzZSA0OiByZXR1cm4gRGl5RnAoVUlOVDY0XzJQQVJUX0MoMHg5YzQwMDAwMCwgMDAwMDAwMDAp
LCAtNTApOworICAgICAgICAgICAgY2FzZSA1OiByZXR1cm4gRGl5RnAoVUlOVDY0XzJQQVJUX0Mo
MHhjMzUwMDAwMCwgMDAwMDAwMDApLCAtNDcpOworICAgICAgICAgICAgY2FzZSA2OiByZXR1cm4g
RGl5RnAoVUlOVDY0XzJQQVJUX0MoMHhmNDI0MDAwMCwgMDAwMDAwMDApLCAtNDQpOworICAgICAg
ICAgICAgY2FzZSA3OiByZXR1cm4gRGl5RnAoVUlOVDY0XzJQQVJUX0MoMHg5ODk2ODAwMCwgMDAw
MDAwMDApLCAtNDApOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJF
QUNIQUJMRSgpOworICAgICAgICAgICAgICAgIHJldHVybiBEaXlGcCgwLCAwKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVl
IHRoZW4gdGhlIHJlc3VsdCBpcyB0aGUgY29ycmVjdCBkb3VibGUuCisgICAgLy8gT3RoZXJ3aXNl
IGl0IGlzIGVpdGhlciB0aGUgY29ycmVjdCBkb3VibGUgb3IgdGhlIGRvdWJsZSB0aGF0IGlzIGp1
c3QgYmVsb3cKKyAgICAvLyB0aGUgY29ycmVjdCBkb3VibGUuCisgICAgc3RhdGljIGJvb2wgRGl5
RnBTdHJ0b2QoVmVjdG9yPGNvbnN0IGNoYXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91Ymxl
KiByZXN1bHQpIHsKKyAgICAgICAgRGl5RnAgaW5wdXQ7CisgICAgICAgIGludCByZW1haW5pbmdf
ZGVjaW1hbHM7CisgICAgICAgIFJlYWREaXlGcChidWZmZXIsICZpbnB1dCwgJnJlbWFpbmluZ19k
ZWNpbWFscyk7CisgICAgICAgIC8vIFNpbmNlIHdlIG1heSBoYXZlIGRyb3BwZWQgc29tZSBkaWdp
dHMgdGhlIGlucHV0IGlzIG5vdCBhY2N1cmF0ZS4KKyAgICAgICAgLy8gSWYgcmVtYWluaW5nX2Rl
Y2ltYWxzIGlzIGRpZmZlcmVudCB0aGFuIDAgdGhhbiB0aGUgZXJyb3IgaXMgYXQgbW9zdAorICAg
ICAgICAvLyAuNSB1bHAgKHVuaXQgaW4gdGhlIGxhc3QgcGxhY2UpLgorICAgICAgICAvLyBXZSBk
b24ndCB3YW50IHRvIGRlYWwgd2l0aCBmcmFjdGlvbnMgYW5kIHRoZXJlZm9yZSBrZWVwIGEgY29t
bW9uCisgICAgICAgIC8vIGRlbm9taW5hdG9yLgorICAgICAgICBjb25zdCBpbnQga0Rlbm9taW5h
dG9yTG9nID0gMzsKKyAgICAgICAgY29uc3QgaW50IGtEZW5vbWluYXRvciA9IDEgPDwga0Rlbm9t
aW5hdG9yTG9nOworICAgICAgICAvLyBNb3ZlIHRoZSByZW1haW5pbmcgZGVjaW1hbHMgaW50byB0
aGUgZXhwb25lbnQuCisgICAgICAgIGV4cG9uZW50ICs9IHJlbWFpbmluZ19kZWNpbWFsczsKKyAg
ICAgICAgaW50IGVycm9yID0gKHJlbWFpbmluZ19kZWNpbWFscyA9PSAwID8gMCA6IGtEZW5vbWlu
YXRvciAvIDIpOworICAgICAgICAKKyAgICAgICAgaW50IG9sZF9lID0gaW5wdXQuZSgpOworICAg
ICAgICBpbnB1dC5Ob3JtYWxpemUoKTsKKyAgICAgICAgZXJyb3IgPDw9IG9sZF9lIC0gaW5wdXQu
ZSgpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKGV4cG9uZW50IDw9IFBvd2Vyc09mVGVuQ2Fj
aGU6OmtNYXhEZWNpbWFsRXhwb25lbnQpOworICAgICAgICBpZiAoZXhwb25lbnQgPCBQb3dlcnNP
ZlRlbkNhY2hlOjprTWluRGVjaW1hbEV4cG9uZW50KSB7CisgICAgICAgICAgICAqcmVzdWx0ID0g
MC4wOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgRGl5RnAg
Y2FjaGVkX3Bvd2VyOworICAgICAgICBpbnQgY2FjaGVkX2RlY2ltYWxfZXhwb25lbnQ7CisgICAg
ICAgIFBvd2Vyc09mVGVuQ2FjaGU6OkdldENhY2hlZFBvd2VyRm9yRGVjaW1hbEV4cG9uZW50KGV4
cG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmY2FjaGVkX3Bvd2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2FjaGVkX2RlY2ltYWxfZXhwb25lbnQpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKGNhY2hlZF9kZWNpbWFsX2V4cG9uZW50ICE9IGV4cG9uZW50
KSB7CisgICAgICAgICAgICBpbnQgYWRqdXN0bWVudF9leHBvbmVudCA9IGV4cG9uZW50IC0gY2Fj
aGVkX2RlY2ltYWxfZXhwb25lbnQ7CisgICAgICAgICAgICBEaXlGcCBhZGp1c3RtZW50X3Bvd2Vy
ID0gQWRqdXN0bWVudFBvd2VyT2ZUZW4oYWRqdXN0bWVudF9leHBvbmVudCk7CisgICAgICAgICAg
ICBpbnB1dC5NdWx0aXBseShhZGp1c3RtZW50X3Bvd2VyKTsKKyAgICAgICAgICAgIGlmIChrTWF4
VWludDY0RGVjaW1hbERpZ2l0cyAtIGJ1ZmZlci5sZW5ndGgoKSA+PSBhZGp1c3RtZW50X2V4cG9u
ZW50KSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIHByb2R1Y3Qgb2YgaW5wdXQgd2l0aCB0aGUg
YWRqdXN0bWVudCBwb3dlciBmaXRzIGludG8gYSA2NCBiaXQKKyAgICAgICAgICAgICAgICAvLyBp
bnRlZ2VyLgorICAgICAgICAgICAgICAgIEFTU0VSVChEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSA9
PSA2NCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFRoZSBhZGp1
c3RtZW50IHBvd2VyIGlzIGV4YWN0LiBUaGVyZSBpcyBoZW5jZSBvbmx5IGFuIGVycm9yIG9mIDAu
NS4KKyAgICAgICAgICAgICAgICBlcnJvciArPSBrRGVub21pbmF0b3IgLyAyOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpbnB1dC5NdWx0aXBseShjYWNoZWRf
cG93ZXIpOworICAgICAgICAvLyBUaGUgZXJyb3IgaW50cm9kdWNlZCBieSBhIG11bHRpcGxpY2F0
aW9uIG9mIGEqYiBlcXVhbHMKKyAgICAgICAgLy8gICBlcnJvcl9hICsgZXJyb3JfYiArIGVycm9y
X2EqZXJyb3JfYi8yXjY0ICsgMC41CisgICAgICAgIC8vIFN1YnN0aXR1dGluZyBhIHdpdGggJ2lu
cHV0JyBhbmQgYiB3aXRoICdjYWNoZWRfcG93ZXInIHdlIGhhdmUKKyAgICAgICAgLy8gICBlcnJv
cl9iID0gMC41ICAoYWxsIGNhY2hlZCBwb3dlcnMgaGF2ZSBhbiBlcnJvciBvZiBsZXNzIHRoYW4g
MC41IHVscCksCisgICAgICAgIC8vICAgZXJyb3JfYWIgPSAwIG9yIDEgLyBrRGVub21pbmF0b3Ig
PiBlcnJvcl9hKmVycm9yX2IvIDJeNjQKKyAgICAgICAgaW50IGVycm9yX2IgPSBrRGVub21pbmF0
b3IgLyAyOworICAgICAgICBpbnQgZXJyb3JfYWIgPSAoZXJyb3IgPT0gMCA/IDAgOiAxKTsgIC8v
IFdlIHJvdW5kIHVwIHRvIDEuCisgICAgICAgIGludCBmaXhlZF9lcnJvciA9IGtEZW5vbWluYXRv
ciAvIDI7CisgICAgICAgIGVycm9yICs9IGVycm9yX2IgKyBlcnJvcl9hYiArIGZpeGVkX2Vycm9y
OworICAgICAgICAKKyAgICAgICAgb2xkX2UgPSBpbnB1dC5lKCk7CisgICAgICAgIGlucHV0Lk5v
cm1hbGl6ZSgpOworICAgICAgICBlcnJvciA8PD0gb2xkX2UgLSBpbnB1dC5lKCk7CisgICAgICAg
IAorICAgICAgICAvLyBTZWUgaWYgdGhlIGRvdWJsZSdzIHNpZ25pZmljYW5kIGNoYW5nZXMgaWYg
d2UgYWRkL3N1YnRyYWN0IHRoZSBlcnJvci4KKyAgICAgICAgaW50IG9yZGVyX29mX21hZ25pdHVk
ZSA9IERpeUZwOjprU2lnbmlmaWNhbmRTaXplICsgaW5wdXQuZSgpOworICAgICAgICBpbnQgZWZm
ZWN0aXZlX3NpZ25pZmljYW5kX3NpemUgPQorICAgICAgICBEb3VibGU6OlNpZ25pZmljYW5kU2l6
ZUZvck9yZGVyT2ZNYWduaXR1ZGUob3JkZXJfb2ZfbWFnbml0dWRlKTsKKyAgICAgICAgaW50IHBy
ZWNpc2lvbl9kaWdpdHNfY291bnQgPQorICAgICAgICBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSAt
IGVmZmVjdGl2ZV9zaWduaWZpY2FuZF9zaXplOworICAgICAgICBpZiAocHJlY2lzaW9uX2RpZ2l0
c19jb3VudCArIGtEZW5vbWluYXRvckxvZyA+PSBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSkgewor
ICAgICAgICAgICAgLy8gVGhpcyBjYW4gb25seSBoYXBwZW4gZm9yIHZlcnkgc21hbGwgZGVub3Jt
YWxzLiBJbiB0aGlzIGNhc2UgdGhlCisgICAgICAgICAgICAvLyBoYWxmLXdheSBtdWx0aXBsaWVk
IGJ5IHRoZSBkZW5vbWluYXRvciBleGNlZWRzIHRoZSByYW5nZSBvZiBhbiB1aW50NjQuCisgICAg
ICAgICAgICAvLyBTaW1wbHkgc2hpZnQgZXZlcnl0aGluZyB0byB0aGUgcmlnaHQuCisgICAgICAg
ICAgICBpbnQgc2hpZnRfYW1vdW50ID0gKHByZWNpc2lvbl9kaWdpdHNfY291bnQgKyBrRGVub21p
bmF0b3JMb2cpIC0KKyAgICAgICAgICAgIERpeUZwOjprU2lnbmlmaWNhbmRTaXplICsgMTsKKyAg
ICAgICAgICAgIGlucHV0LnNldF9mKGlucHV0LmYoKSA+PiBzaGlmdF9hbW91bnQpOworICAgICAg
ICAgICAgaW5wdXQuc2V0X2UoaW5wdXQuZSgpICsgc2hpZnRfYW1vdW50KTsKKyAgICAgICAgICAg
IC8vIFdlIGFkZCAxIGZvciB0aGUgbG9zdCBwcmVjaXNpb24gb2YgZXJyb3IsIGFuZCBrRGVub21p
bmF0b3IgZm9yCisgICAgICAgICAgICAvLyB0aGUgbG9zdCBwcmVjaXNpb24gb2YgaW5wdXQuZigp
LgorICAgICAgICAgICAgZXJyb3IgPSAoZXJyb3IgPj4gc2hpZnRfYW1vdW50KSArIDEgKyBrRGVu
b21pbmF0b3I7CisgICAgICAgICAgICBwcmVjaXNpb25fZGlnaXRzX2NvdW50IC09IHNoaWZ0X2Ft
b3VudDsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSB1c2UgdWludDY0X3RzIG5vdy4gVGhpcyBv
bmx5IHdvcmtzIGlmIHRoZSBEaXlGcCB1c2VzIHVpbnQ2NF90cyB0b28uCisgICAgICAgIEFTU0VS
VChEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSA9PSA2NCk7CisgICAgICAgIEFTU0VSVChwcmVjaXNp
b25fZGlnaXRzX2NvdW50IDwgNjQpOworICAgICAgICB1aW50NjRfdCBvbmU2NCA9IDE7CisgICAg
ICAgIHVpbnQ2NF90IHByZWNpc2lvbl9iaXRzX21hc2sgPSAob25lNjQgPDwgcHJlY2lzaW9uX2Rp
Z2l0c19jb3VudCkgLSAxOworICAgICAgICB1aW50NjRfdCBwcmVjaXNpb25fYml0cyA9IGlucHV0
LmYoKSAmIHByZWNpc2lvbl9iaXRzX21hc2s7CisgICAgICAgIHVpbnQ2NF90IGhhbGZfd2F5ID0g
b25lNjQgPDwgKHByZWNpc2lvbl9kaWdpdHNfY291bnQgLSAxKTsKKyAgICAgICAgcHJlY2lzaW9u
X2JpdHMgKj0ga0Rlbm9taW5hdG9yOworICAgICAgICBoYWxmX3dheSAqPSBrRGVub21pbmF0b3I7
CisgICAgICAgIERpeUZwIHJvdW5kZWRfaW5wdXQoaW5wdXQuZigpID4+IHByZWNpc2lvbl9kaWdp
dHNfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQuZSgpICsgcHJlY2lz
aW9uX2RpZ2l0c19jb3VudCk7CisgICAgICAgIGlmIChwcmVjaXNpb25fYml0cyA+PSBoYWxmX3dh
eSArIGVycm9yKSB7CisgICAgICAgICAgICByb3VuZGVkX2lucHV0LnNldF9mKHJvdW5kZWRfaW5w
dXQuZigpICsgMSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gSWYgdGhlIGxhc3RfYml0cyBhcmUg
dG9vIGNsb3NlIHRvIHRoZSBoYWxmLXdheSBjYXNlIHRoYW4gd2UgYXJlIHRvbworICAgICAgICAv
LyBpbmFjY3VyYXRlIGFuZCByb3VuZCBkb3duLiBJbiB0aGlzIGNhc2Ugd2UgcmV0dXJuIGZhbHNl
IHNvIHRoYXQgd2UgY2FuCisgICAgICAgIC8vIGZhbGwgYmFjayB0byBhIG1vcmUgcHJlY2lzZSBh
bGdvcml0aG0uCisgICAgICAgIAorICAgICAgICAqcmVzdWx0ID0gRG91YmxlKHJvdW5kZWRfaW5w
dXQpLnZhbHVlKCk7CisgICAgICAgIGlmIChoYWxmX3dheSAtIGVycm9yIDwgcHJlY2lzaW9uX2Jp
dHMgJiYgcHJlY2lzaW9uX2JpdHMgPCBoYWxmX3dheSArIGVycm9yKSB7CisgICAgICAgICAgICAv
LyBUb28gaW1wcmVjaXNlLiBUaGUgY2FsbGVyIHdpbGwgaGF2ZSB0byBmYWxsIGJhY2sgdG8gYSBz
bG93ZXIgdmVyc2lvbi4KKyAgICAgICAgICAgIC8vIEhvd2V2ZXIgdGhlIHJldHVybmVkIG51bWJl
ciBpcyBndWFyYW50ZWVkIHRvIGJlIGVpdGhlciB0aGUgY29ycmVjdAorICAgICAgICAgICAgLy8g
ZG91YmxlLCBvciB0aGUgbmV4dC1sb3dlciBkb3VibGUuCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRoZSBjb3JyZWN0IGRvdWJsZSBm
b3IgdGhlIGJ1ZmZlcioxMF5leHBvbmVudC4KKyAgICAvLyBUaGUgdmFyaWFibGUgZ3Vlc3Mgc2hv
dWxkIGJlIGEgY2xvc2UgZ3Vlc3MgdGhhdCBpcyBlaXRoZXIgdGhlIGNvcnJlY3QgZG91YmxlCisg
ICAgLy8gb3IgaXRzIGxvd2VyIG5laWdoYm9yICh0aGUgbmVhcmVzdCBkb3VibGUgbGVzcyB0aGFu
IHRoZSBjb3JyZWN0IG9uZSkuCisgICAgLy8gUHJlY29uZGl0aW9uczoKKyAgICAvLyAgIGJ1ZmZl
ci5sZW5ndGgoKSArIGV4cG9uZW50IDw9IGtNYXhEZWNpbWFsUG93ZXIgKyAxCisgICAgLy8gICBi
dWZmZXIubGVuZ3RoKCkgKyBleHBvbmVudCA+IGtNaW5EZWNpbWFsUG93ZXIKKyAgICAvLyAgIGJ1
ZmZlci5sZW5ndGgoKSA8PSBrTWF4RGVjaW1hbFNpZ25pZmljYW50RGlnaXRzCisgICAgc3RhdGlj
IGRvdWJsZSBCaWdudW1TdHJ0b2QoVmVjdG9yPGNvbnN0IGNoYXI+IGJ1ZmZlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZG91YmxlIGd1ZXNzKSB7CisgICAgICAgIGlmIChndWVzcyA9PSBEb3VibGU6
OkluZmluaXR5KCkpIHsKKyAgICAgICAgICAgIHJldHVybiBndWVzczsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgRGl5RnAgdXBwZXJfYm91bmRhcnkgPSBEb3VibGUoZ3Vlc3MpLlVwcGVy
Qm91bmRhcnkoKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChidWZmZXIubGVuZ3RoKCkgKyBl
eHBvbmVudCA8PSBrTWF4RGVjaW1hbFBvd2VyICsgMSk7CisgICAgICAgIEFTU0VSVChidWZmZXIu
bGVuZ3RoKCkgKyBleHBvbmVudCA+IGtNaW5EZWNpbWFsUG93ZXIpOworICAgICAgICBBU1NFUlQo
YnVmZmVyLmxlbmd0aCgpIDw9IGtNYXhTaWduaWZpY2FudERlY2ltYWxEaWdpdHMpOworICAgICAg
ICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgQmlnbnVtIHdpbGwgYmUgYWJsZSB0byBob2xkIGFsbCBv
dXIgbnVtYmVycy4KKyAgICAgICAgLy8gT3VyIEJpZ251bSBpbXBsZW1lbnRhdGlvbiBoYXMgYSBz
ZXBhcmF0ZSBmaWVsZCBmb3IgZXhwb25lbnRzLiBTaGlmdHMgd2lsbAorICAgICAgICAvLyBjb25z
dW1lIGF0IG1vc3Qgb25lIGJpZ2l0ICg8IDY0IGJpdHMpLgorICAgICAgICAvLyBsbigxMCkgPT0g
My4zMjE5Li4uCisgICAgICAgIEFTU0VSVCgoKGtNYXhEZWNpbWFsUG93ZXIgKyAxKSAqIDMzMyAv
IDEwMCkgPCBCaWdudW06OmtNYXhTaWduaWZpY2FudEJpdHMpOworICAgICAgICBCaWdudW0gaW5w
dXQ7CisgICAgICAgIEJpZ251bSBib3VuZGFyeTsKKyAgICAgICAgaW5wdXQuQXNzaWduRGVjaW1h
bFN0cmluZyhidWZmZXIpOworICAgICAgICBib3VuZGFyeS5Bc3NpZ25VSW50NjQodXBwZXJfYm91
bmRhcnkuZigpKTsKKyAgICAgICAgaWYgKGV4cG9uZW50ID49IDApIHsKKyAgICAgICAgICAgIGlu
cHV0Lk11bHRpcGx5QnlQb3dlck9mVGVuKGV4cG9uZW50KTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGJvdW5kYXJ5Lk11bHRpcGx5QnlQb3dlck9mVGVuKC1leHBvbmVudCk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHVwcGVyX2JvdW5kYXJ5LmUoKSA+IDApIHsKKyAgICAgICAgICAg
IGJvdW5kYXJ5LlNoaWZ0TGVmdCh1cHBlcl9ib3VuZGFyeS5lKCkpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgaW5wdXQuU2hpZnRMZWZ0KC11cHBlcl9ib3VuZGFyeS5lKCkpOworICAg
ICAgICB9CisgICAgICAgIGludCBjb21wYXJpc29uID0gQmlnbnVtOjpDb21wYXJlKGlucHV0LCBi
b3VuZGFyeSk7CisgICAgICAgIGlmIChjb21wYXJpc29uIDwgMCkgeworICAgICAgICAgICAgcmV0
dXJuIGd1ZXNzOworICAgICAgICB9IGVsc2UgaWYgKGNvbXBhcmlzb24gPiAwKSB7CisgICAgICAg
ICAgICByZXR1cm4gRG91YmxlKGd1ZXNzKS5OZXh0RG91YmxlKCk7CisgICAgICAgIH0gZWxzZSBp
ZiAoKERvdWJsZShndWVzcykuU2lnbmlmaWNhbmQoKSAmIDEpID09IDApIHsKKyAgICAgICAgICAg
IC8vIFJvdW5kIHRvd2FyZHMgZXZlbi4KKyAgICAgICAgICAgIHJldHVybiBndWVzczsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBEb3VibGUoZ3Vlc3MpLk5leHREb3VibGUo
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICBkb3VibGUgU3RydG9kKFZlY3Rv
cjxjb25zdCBjaGFyPiBidWZmZXIsIGludCBleHBvbmVudCkgeworICAgICAgICBWZWN0b3I8Y29u
c3QgY2hhcj4gbGVmdF90cmltbWVkID0gVHJpbUxlYWRpbmdaZXJvcyhidWZmZXIpOworICAgICAg
ICBWZWN0b3I8Y29uc3QgY2hhcj4gdHJpbW1lZCA9IFRyaW1UcmFpbGluZ1plcm9zKGxlZnRfdHJp
bW1lZCk7CisgICAgICAgIGV4cG9uZW50ICs9IGxlZnRfdHJpbW1lZC5sZW5ndGgoKSAtIHRyaW1t
ZWQubGVuZ3RoKCk7CisgICAgICAgIGlmICh0cmltbWVkLmxlbmd0aCgpID09IDApIHJldHVybiAw
LjA7CisgICAgICAgIGlmICh0cmltbWVkLmxlbmd0aCgpID4ga01heFNpZ25pZmljYW50RGVjaW1h
bERpZ2l0cykgeworICAgICAgICAgICAgY2hhciBzaWduaWZpY2FudF9idWZmZXJba01heFNpZ25p
ZmljYW50RGVjaW1hbERpZ2l0c107CisgICAgICAgICAgICBpbnQgc2lnbmlmaWNhbnRfZXhwb25l
bnQ7CisgICAgICAgICAgICBUcmltVG9NYXhTaWduaWZpY2FudERpZ2l0cyh0cmltbWVkLCBleHBv
bmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25pZmljYW50
X2J1ZmZlciwgJnNpZ25pZmljYW50X2V4cG9uZW50KTsKKyAgICAgICAgICAgIHJldHVybiBTdHJ0
b2QoVmVjdG9yPGNvbnN0IGNoYXI+KHNpZ25pZmljYW50X2J1ZmZlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtNYXhTaWduaWZpY2FudERlY2ltYWxEaWdp
dHMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduaWZpY2FudF9leHBvbmVudCk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGV4cG9uZW50ICsgdHJpbW1lZC5sZW5ndGgoKSAtIDEgPj0g
a01heERlY2ltYWxQb3dlcikgeworICAgICAgICAgICAgcmV0dXJuIERvdWJsZTo6SW5maW5pdHko
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZXhwb25lbnQgKyB0cmltbWVkLmxlbmd0aCgpIDw9
IGtNaW5EZWNpbWFsUG93ZXIpIHsKKyAgICAgICAgICAgIHJldHVybiAwLjA7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGRvdWJsZSBndWVzczsKKyAgICAgICAgaWYgKERvdWJsZVN0cnRv
ZCh0cmltbWVkLCBleHBvbmVudCwgJmd1ZXNzKSB8fAorICAgICAgICAgICAgRGl5RnBTdHJ0b2Qo
dHJpbW1lZCwgZXhwb25lbnQsICZndWVzcykpIHsKKyAgICAgICAgICAgIHJldHVybiBndWVzczsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gQmlnbnVtU3RydG9kKHRyaW1tZWQsIGV4cG9uZW50
LCBndWVzcyk7CisgICAgfQorICAgIAorfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9u
CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9kdG9hL3N0cnRvZC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL3N0cnRv
ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjhlZDM1MGFkOGFjOGY3ODI1ZjA4NDE1OTI3Y2E2MGFlOTdmMzgyNWMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2Evc3RydG9k
LmgKQEAgLTAsMCArMSw0NSBAQAorLy8gQ29weXJpZ2h0IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisv
LyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
Ly8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWZuZGVm
IERPVUJMRV9DT05WRVJTSU9OX1NUUlRPRF9IXworI2RlZmluZSBET1VCTEVfQ09OVkVSU0lPTl9T
VFJUT0RfSF8KKworI2luY2x1ZGUgInV0aWxzLmgiCisKK25hbWVzcGFjZSBXVEYgeworCituYW1l
c3BhY2UgZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIC8vIFRoZSBidWZmZXIgbXVzdCBv
bmx5IGNvbnRhaW4gZGlnaXRzIGluIHRoZSByYW5nZSBbMC05XS4gSXQgbXVzdCBub3QKKyAgICAv
LyBjb250YWluIGEgZG90IG9yIGEgc2lnbi4gSXQgbXVzdCBub3Qgc3RhcnQgd2l0aCAnMCcsIGFu
ZCBtdXN0IG5vdCBiZSBlbXB0eS4KKyAgICBkb3VibGUgU3RydG9kKFZlY3Rvcjxjb25zdCBjaGFy
PiBidWZmZXIsIGludCBleHBvbmVudCk7CisgICAgCit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2Nv
bnZlcnNpb24KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAgLy8gRE9VQkxFX0NPTlZF
UlNJT05fU1RSVE9EX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0
b2EvdXRpbHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS91dGlscy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmRlZmI1ZjEyYjcxNTUyMGE2NTVhY2FkMTY3YTE5MGNhNmQ5MTk2MmMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvdXRpbHMuaApAQCAtMCww
ICsxLDMwMyBAQAorLy8gQ29weXJpZ2h0IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0
OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWZuZGVmIERPVUJMRV9D
T05WRVJTSU9OX1VUSUxTX0hfCisjZGVmaW5lIERPVUJMRV9DT05WRVJTSU9OX1VUSUxTX0hfCisK
KyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmbmRlZiBBU1NF
UlQKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNkZWZpbmUgQVNTRVJUKGNvbmRpdGlvbikgICAgICAo
YXNzZXJ0KGNvbmRpdGlvbikpCisjZGVmaW5lIFVOSU1QTEVNRU5URUQoKSAoYWJvcnQoKSkKKyNk
ZWZpbmUgVU5SRUFDSEFCTEUoKSAgIChhYm9ydCgpKQorI2VuZGlmCisKKy8vIERvdWJsZSBvcGVy
YXRpb25zIGRldGVjdGlvbiBiYXNlZCBvbiB0YXJnZXQgYXJjaGl0ZWN0dXJlLgorLy8gTGludXgg
dXNlcyBhIDgwYml0IHdpZGUgZmxvYXRpbmcgcG9pbnQgc3RhY2sgb24geDg2LiBUaGlzIGluZHVj
ZXMgZG91YmxlCisvLyByb3VuZGluZywgd2hpY2ggaW4gdHVybiBsZWFkcyB0byB3cm9uZyByZXN1
bHRzLgorLy8gQW4gZWFzeSB3YXkgdG8gdGVzdCBpZiB0aGUgZmxvYXRpbmctcG9pbnQgb3BlcmF0
aW9ucyBhcmUgY29ycmVjdCBpcyB0bworLy8gZXZhbHVhdGU6IDg5MjU1LjAvMWUyMi4gSWYgdGhl
IGZsb2F0aW5nLXBvaW50IHN0YWNrIGlzIDY0IGJpdHMgd2lkZSB0aGVuCisvLyB0aGUgcmVzdWx0
IGlzIGVxdWFsIHRvIDg5MjU1ZS0yMi4KKy8vIFRoZSBiZXN0IHdheSB0byB0ZXN0IHRoaXMsIGlz
IHRvIGNyZWF0ZSBhIGRpdmlzaW9uLWZ1bmN0aW9uIGFuZCB0byBjb21wYXJlCisvLyB0aGUgb3V0
cHV0IG9mIHRoZSBkaXZpc2lvbiB3aXRoIHRoZSBleHBlY3RlZCByZXN1bHQuIChJbmxpbmluZyBt
dXN0IGJlCisvLyBkaXNhYmxlZC4pCisvLyBPbiBMaW51eCx4ODYgODkyNTVlLTIyICE9IERpdl9k
b3VibGUoODkyNTUuMC8xZTIyKQorI2lmIGRlZmluZWQoX01fWDY0KSB8fCBkZWZpbmVkKF9feDg2
XzY0X18pIHx8IFwKK2RlZmluZWQoX19BUk1FTF9fKSB8fCBcCitkZWZpbmVkKF9NSVBTX0FSQ0hf
TUlQUzMyUjIpCisjZGVmaW5lIERPVUJMRV9DT05WRVJTSU9OX0NPUlJFQ1RfRE9VQkxFX09QRVJB
VElPTlMgMQorI2VsaWYgZGVmaW5lZChfTV9JWDg2KSB8fCBkZWZpbmVkKF9faTM4Nl9fKQorI2lm
IGRlZmluZWQoX1dJTjMyKQorLy8gV2luZG93cyB1c2VzIGEgNjRiaXQgd2lkZSBmbG9hdGluZyBw
b2ludCBzdGFjay4KKyNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05fQ09SUkVDVF9ET1VCTEVfT1BF
UkFUSU9OUyAxCisjZWxzZQorI3VuZGVmIERPVUJMRV9DT05WRVJTSU9OX0NPUlJFQ1RfRE9VQkxF
X09QRVJBVElPTlMKKyNlbmRpZiAgLy8gX1dJTjMyCisjZWxzZQorI2Vycm9yIFRhcmdldCBhcmNo
aXRlY3R1cmUgd2FzIG5vdCBkZXRlY3RlZCBhcyBzdXBwb3J0ZWQgYnkgRG91YmxlLUNvbnZlcnNp
b24uCisjZW5kaWYKKworCisjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fTUlOR1cz
Ml9fKQorCit0eXBlZGVmIHNpZ25lZCBjaGFyIGludDhfdDsKK3R5cGVkZWYgdW5zaWduZWQgY2hh
ciB1aW50OF90OwordHlwZWRlZiBzaG9ydCBpbnQxNl90OyAgLy8gTk9MSU5UCit0eXBlZGVmIHVu
c2lnbmVkIHNob3J0IHVpbnQxNl90OyAgLy8gTk9MSU5UCit0eXBlZGVmIGludCBpbnQzMl90Owor
dHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDMyX3Q7Cit0eXBlZGVmIF9faW50NjQgaW50NjRfdDsK
K3R5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCB1aW50NjRfdDsKKy8vIGludHB0cl90IGFuZCBmcmll
bmRzIGFyZSBkZWZpbmVkIGluIGNydGRlZnMuaCB0aHJvdWdoIHN0ZGlvLmguCisKKyNlbHNlCisK
KyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2VuZGlmCisKKy8vIFRoZSBmb2xsb3dpbmcgbWFjcm8g
d29ya3Mgb24gYm90aCAzMiBhbmQgNjQtYml0IHBsYXRmb3Jtcy4KKy8vIFVzYWdlOiBpbnN0ZWFk
IG9mIHdyaXRpbmcgMHgxMjM0NTY3ODkwMTIzNDU2CisvLyAgICAgIHdyaXRlIFVJTlQ2NF8yUEFS
VF9DKDB4MTIzNDU2NzgsOTAxMjM0NTYpOworI2RlZmluZSBVSU5UNjRfMlBBUlRfQyhhLCBiKSAo
KChzdGF0aWNfY2FzdDx1aW50NjRfdD4oYSkgPDwgMzIpICsgMHgjI2IjI3UpKQorCisKKy8vIFRo
ZSBleHByZXNzaW9uIEFSUkFZX1NJWkUoYSkgaXMgYSBjb21waWxlLXRpbWUgY29uc3RhbnQgb2Yg
dHlwZQorLy8gc2l6ZV90IHdoaWNoIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBv
ZiB0aGUgZ2l2ZW4KKy8vIGFycmF5LiBZb3Ugc2hvdWxkIG9ubHkgdXNlIEFSUkFZX1NJWkUgb24g
c3RhdGljYWxseSBhbGxvY2F0ZWQKKy8vIGFycmF5cy4KKyNkZWZpbmUgQVJSQVlfU0laRShhKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKChzaXplb2YoYSkgLyBzaXplb2Yo
KihhKSkpIC8gICAgICAgICAgICAgICAgICAgICAgICAgXAorc3RhdGljX2Nhc3Q8c2l6ZV90Pigh
KHNpemVvZihhKSAlIHNpemVvZigqKGEpKSkpKQorCisvLyBBIG1hY3JvIHRvIGRpc2FsbG93IHRo
ZSBldmlsIGNvcHkgY29uc3RydWN0b3IgYW5kIG9wZXJhdG9yPSBmdW5jdGlvbnMKKy8vIFRoaXMg
c2hvdWxkIGJlIHVzZWQgaW4gdGhlIHByaXZhdGU6IGRlY2xhcmF0aW9ucyBmb3IgYSBjbGFzcwor
I2RlZmluZSBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVHlwZU5hbWUpICAgICAgXAorVHlwZU5h
bWUoY29uc3QgVHlwZU5hbWUmKTsgICAgICAgICAgICAgICAgICAgIFwKK3ZvaWQgb3BlcmF0b3I9
KGNvbnN0IFR5cGVOYW1lJikKKworLy8gQSBtYWNybyB0byBkaXNhbGxvdyBhbGwgdGhlIGltcGxp
Y2l0IGNvbnN0cnVjdG9ycywgbmFtZWx5IHRoZQorLy8gZGVmYXVsdCBjb25zdHJ1Y3RvciwgY29w
eSBjb25zdHJ1Y3RvciBhbmQgb3BlcmF0b3I9IGZ1bmN0aW9ucy4KKy8vCisvLyBUaGlzIHNob3Vs
ZCBiZSB1c2VkIGluIHRoZSBwcml2YXRlOiBkZWNsYXJhdGlvbnMgZm9yIGEgY2xhc3MKKy8vIHRo
YXQgd2FudHMgdG8gcHJldmVudCBhbnlvbmUgZnJvbSBpbnN0YW50aWF0aW5nIGl0LiBUaGlzIGlz
CisvLyBlc3BlY2lhbGx5IHVzZWZ1bCBmb3IgY2xhc3NlcyBjb250YWluaW5nIG9ubHkgc3RhdGlj
IG1ldGhvZHMuCisjZGVmaW5lIERJU0FMTE9XX0lNUExJQ0lUX0NPTlNUUlVDVE9SUyhUeXBlTmFt
ZSkgXAorVHlwZU5hbWUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitE
SVNBTExPV19DT1BZX0FORF9BU1NJR04oVHlwZU5hbWUpCisKK25hbWVzcGFjZSBXVEYgeworCitu
YW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIHN0YXRpYyBjb25zdCBpbnQg
a0NoYXJTaXplID0gc2l6ZW9mKGNoYXIpOworICAgIAorICAgIC8vIFJldHVybnMgdGhlIG1heGlt
dW0gb2YgdGhlIHR3byBwYXJhbWV0ZXJzLgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAg
IHN0YXRpYyBUIE1heChUIGEsIFQgYikgeworICAgICAgICByZXR1cm4gYSA8IGIgPyBiIDogYTsK
KyAgICB9CisgICAgCisgICAgCisgICAgLy8gUmV0dXJucyB0aGUgbWluaW11bSBvZiB0aGUgdHdv
IHBhcmFtZXRlcnMuCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3RhdGljIFQgTWlu
KFQgYSwgVCBiKSB7CisgICAgICAgIHJldHVybiBhIDwgYiA/IGEgOiBiOworICAgIH0KKyAgICAK
KyAgICAKKyAgICBpbmxpbmUgaW50IFN0ckxlbmd0aChjb25zdCBjaGFyKiBzdHJpbmcpIHsKKyAg
ICAgICAgc2l6ZV90IGxlbmd0aCA9IHN0cmxlbihzdHJpbmcpOworICAgICAgICBBU1NFUlQobGVu
Z3RoID09IHN0YXRpY19jYXN0PHNpemVfdD4oc3RhdGljX2Nhc3Q8aW50PihsZW5ndGgpKSk7Cisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxlbmd0aCk7CisgICAgfQorICAgIAorICAg
IC8vIFRoaXMgaXMgYSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgVjgncyBWZWN0b3IgY2xhc3MuCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgY2xhc3MgVmVjdG9yIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIFZlY3RvcigpIDogc3RhcnRfKE5VTEwpLCBsZW5ndGhfKDApIHt9CisgICAgICAg
IFZlY3RvcihUKiBkYXRhLCBpbnQgbGVuZ3RoKSA6IHN0YXJ0XyhkYXRhKSwgbGVuZ3RoXyhsZW5n
dGgpIHsKKyAgICAgICAgICAgIEFTU0VSVChsZW5ndGggPT0gMCB8fCAobGVuZ3RoID4gMCAmJiBk
YXRhICE9IE5VTEwpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJucyBh
IHZlY3RvciB1c2luZyB0aGUgc2FtZSBiYWNraW5nIHN0b3JhZ2UgYXMgdGhpcyBvbmUsCisgICAg
ICAgIC8vIHNwYW5uaW5nIGZyb20gYW5kIGluY2x1ZGluZyAnZnJvbScsIHRvIGJ1dCBub3QgaW5j
bHVkaW5nICd0bycuCisgICAgICAgIFZlY3RvcjxUPiBTdWJWZWN0b3IoaW50IGZyb20sIGludCB0
bykgeworICAgICAgICAgICAgQVNTRVJUKHRvIDw9IGxlbmd0aF8pOworICAgICAgICAgICAgQVNT
RVJUKGZyb20gPCB0byk7CisgICAgICAgICAgICBBU1NFUlQoMCA8PSBmcm9tKTsKKyAgICAgICAg
ICAgIHJldHVybiBWZWN0b3I8VD4oc3RhcnQoKSArIGZyb20sIHRvIC0gZnJvbSk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIC8vIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgdmVjdG9y
LgorICAgICAgICBpbnQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbGVuZ3RoXzsgfQorICAgICAg
ICAKKyAgICAgICAgLy8gUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgdmVjdG9yIGlzIGVtcHR5
LgorICAgICAgICBib29sIGlzX2VtcHR5KCkgY29uc3QgeyByZXR1cm4gbGVuZ3RoXyA9PSAwOyB9
CisgICAgICAgIAorICAgICAgICAvLyBSZXR1cm5zIHRoZSBwb2ludGVyIHRvIHRoZSBzdGFydCBv
ZiB0aGUgZGF0YSBpbiB0aGUgdmVjdG9yLgorICAgICAgICBUKiBzdGFydCgpIGNvbnN0IHsgcmV0
dXJuIHN0YXJ0XzsgfQorICAgICAgICAKKyAgICAgICAgLy8gQWNjZXNzIGluZGl2aWR1YWwgdmVj
dG9yIGVsZW1lbnRzIC0gY2hlY2tzIGJvdW5kcyBpbiBkZWJ1ZyBtb2RlLgorICAgICAgICBUJiBv
cGVyYXRvcltdKGludCBpbmRleCkgY29uc3QgeworICAgICAgICAgICAgQVNTRVJUKDAgPD0gaW5k
ZXggJiYgaW5kZXggPCBsZW5ndGhfKTsKKyAgICAgICAgICAgIHJldHVybiBzdGFydF9baW5kZXhd
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBUJiBmaXJzdCgpIHsgcmV0dXJuIHN0YXJ0
X1swXTsgfQorICAgICAgICAKKyAgICAgICAgVCYgbGFzdCgpIHsgcmV0dXJuIHN0YXJ0X1tsZW5n
dGhfIC0gMV07IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgVCogc3RhcnRfOwor
ICAgICAgICBpbnQgbGVuZ3RoXzsKKyAgICB9OworICAgIAorICAgIAorICAgIC8vIEhlbHBlciBj
bGFzcyBmb3IgYnVpbGRpbmcgcmVzdWx0IHN0cmluZ3MgaW4gYSBjaGFyYWN0ZXIgYnVmZmVyLiBU
aGUKKyAgICAvLyBwdXJwb3NlIG9mIHRoZSBjbGFzcyBpcyB0byB1c2Ugc2FmZSBvcGVyYXRpb25z
IHRoYXQgY2hlY2tzIHRoZQorICAgIC8vIGJ1ZmZlciBib3VuZHMgb24gYWxsIG9wZXJhdGlvbnMg
aW4gZGVidWcgbW9kZS4KKyAgICBjbGFzcyBTdHJpbmdCdWlsZGVyIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIFN0cmluZ0J1aWxkZXIoY2hhciogYnVmZmVyLCBpbnQgc2l6ZSkKKyAgICAgICAgOiBi
dWZmZXJfKGJ1ZmZlciwgc2l6ZSksIHBvc2l0aW9uXygwKSB7IH0KKyAgICAgICAgCisgICAgICAg
IH5TdHJpbmdCdWlsZGVyKCkgeyBpZiAoIWlzX2ZpbmFsaXplZCgpKSBGaW5hbGl6ZSgpOyB9Cisg
ICAgICAgIAorICAgICAgICBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGJ1ZmZlcl8ubGVuZ3Ro
KCk7IH0KKyAgICAgICAgCisgICAgICAgIC8vIEdldCB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0
aGUgYnVpbGRlci4KKyAgICAgICAgaW50IHBvc2l0aW9uKCkgY29uc3QgeworICAgICAgICAgICAg
QVNTRVJUKCFpc19maW5hbGl6ZWQoKSk7CisgICAgICAgICAgICByZXR1cm4gcG9zaXRpb25fOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBSZXNldCB0aGUgcG9zaXRpb24uCisgICAg
ICAgIHZvaWQgUmVzZXQoKSB7IHBvc2l0aW9uXyA9IDA7IH0KKyAgICAgICAgCisgICAgICAgIC8v
IEFkZCBhIHNpbmdsZSBjaGFyYWN0ZXIgdG8gdGhlIGJ1aWxkZXIuIEl0IGlzIG5vdCBhbGxvd2Vk
IHRvIGFkZAorICAgICAgICAvLyAwLWNoYXJhY3RlcnM7IHVzZSB0aGUgRmluYWxpemUoKSBtZXRo
b2QgdG8gdGVybWluYXRlIHRoZSBzdHJpbmcKKyAgICAgICAgLy8gaW5zdGVhZC4KKyAgICAgICAg
dm9pZCBBZGRDaGFyYWN0ZXIoY2hhciBjKSB7CisgICAgICAgICAgICBBU1NFUlQoYyAhPSAnXDAn
KTsKKyAgICAgICAgICAgIEFTU0VSVCghaXNfZmluYWxpemVkKCkgJiYgcG9zaXRpb25fIDwgYnVm
ZmVyXy5sZW5ndGgoKSk7CisgICAgICAgICAgICBidWZmZXJfW3Bvc2l0aW9uXysrXSA9IGM7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEFkZCBhbiBlbnRpcmUgc3RyaW5nIHRvIHRo
ZSBidWlsZGVyLiBVc2VzIHN0cmxlbigpIGludGVybmFsbHkgdG8KKyAgICAgICAgLy8gY29tcHV0
ZSB0aGUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBzdHJpbmcuCisgICAgICAgIHZvaWQgQWRkU3RyaW5n
KGNvbnN0IGNoYXIqIHMpIHsKKyAgICAgICAgICAgIEFkZFN1YnN0cmluZyhzLCBTdHJMZW5ndGgo
cykpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBBZGQgdGhlIGZpcnN0ICduJyBj
aGFyYWN0ZXJzIG9mIHRoZSBnaXZlbiBzdHJpbmcgJ3MnIHRvIHRoZQorICAgICAgICAvLyBidWls
ZGVyLiBUaGUgaW5wdXQgc3RyaW5nIG11c3QgaGF2ZSBlbm91Z2ggY2hhcmFjdGVycy4KKyAgICAg
ICAgdm9pZCBBZGRTdWJzdHJpbmcoY29uc3QgY2hhciogcywgaW50IG4pIHsKKyAgICAgICAgICAg
IEFTU0VSVCghaXNfZmluYWxpemVkKCkgJiYgcG9zaXRpb25fICsgbiA8IGJ1ZmZlcl8ubGVuZ3Ro
KCkpOworICAgICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHNpemVfdD4obikgPD0gc3RybGVu
KHMpKTsKKyAgICAgICAgICAgIG1lbWNweSgmYnVmZmVyX1twb3NpdGlvbl9dLCBzLCBuICoga0No
YXJTaXplKTsKKyAgICAgICAgICAgIHBvc2l0aW9uXyArPSBuOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICAKKyAgICAgICAgLy8gQWRkIGNoYXJhY3RlciBwYWRkaW5nIHRvIHRoZSBidWls
ZGVyLiBJZiBjb3VudCBpcyBub24tcG9zaXRpdmUsCisgICAgICAgIC8vIG5vdGhpbmcgaXMgYWRk
ZWQgdG8gdGhlIGJ1aWxkZXIuCisgICAgICAgIHZvaWQgQWRkUGFkZGluZyhjaGFyIGMsIGludCBj
b3VudCkgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Cisg
ICAgICAgICAgICAgICAgQWRkQ2hhcmFjdGVyKGMpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAvLyBGaW5hbGl6ZSB0aGUgc3RyaW5nIGJ5IDAtdGVybWluYXRp
bmcgaXQgYW5kIHJldHVybmluZyB0aGUgYnVmZmVyLgorICAgICAgICBjaGFyKiBGaW5hbGl6ZSgp
IHsKKyAgICAgICAgICAgIEFTU0VSVCghaXNfZmluYWxpemVkKCkgJiYgcG9zaXRpb25fIDwgYnVm
ZmVyXy5sZW5ndGgoKSk7CisgICAgICAgICAgICBidWZmZXJfW3Bvc2l0aW9uX10gPSAnXDAnOwor
ICAgICAgICAgICAgLy8gTWFrZSBzdXJlIG5vYm9keSBtYW5hZ2VkIHRvIGFkZCBhIDAtY2hhcmFj
dGVyIHRvIHRoZQorICAgICAgICAgICAgLy8gYnVmZmVyIHdoaWxlIGJ1aWxkaW5nIHRoZSBzdHJp
bmcuCisgICAgICAgICAgICBBU1NFUlQoc3RybGVuKGJ1ZmZlcl8uc3RhcnQoKSkgPT0gc3RhdGlj
X2Nhc3Q8c2l6ZV90Pihwb3NpdGlvbl8pKTsKKyAgICAgICAgICAgIHBvc2l0aW9uXyA9IC0xOwor
ICAgICAgICAgICAgQVNTRVJUKGlzX2ZpbmFsaXplZCgpKTsKKyAgICAgICAgICAgIHJldHVybiBi
dWZmZXJfLnN0YXJ0KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcl87CisgICAgICAgIGludCBwb3NpdGlvbl87CisgICAgICAg
IAorICAgICAgICBib29sIGlzX2ZpbmFsaXplZCgpIGNvbnN0IHsgcmV0dXJuIHBvc2l0aW9uXyA8
IDA7IH0KKyAgICAgICAgCisgICAgICAgIERJU0FMTE9XX0lNUExJQ0lUX0NPTlNUUlVDVE9SUyhT
dHJpbmdCdWlsZGVyKTsKKyAgICB9OworICAgIAorICAgIC8vIFRoZSB0eXBlLWJhc2VkIGFsaWFz
aW5nIHJ1bGUgYWxsb3dzIHRoZSBjb21waWxlciB0byBhc3N1bWUgdGhhdCBwb2ludGVycyBvZgor
ICAgIC8vIGRpZmZlcmVudCB0eXBlcyAoZm9yIHNvbWUgZGVmaW5pdGlvbiBvZiBkaWZmZXJlbnQp
IG5ldmVyIGFsaWFzIGVhY2ggb3RoZXIuCisgICAgLy8gVGh1cyB0aGUgZm9sbG93aW5nIGNvZGUg
ZG9lcyBub3Qgd29yazoKKyAgICAvLworICAgIC8vIGZsb2F0IGYgPSBmb28oKTsKKyAgICAvLyBp
bnQgZmJpdHMgPSAqKGludCopKCZmKTsKKyAgICAvLworICAgIC8vIFRoZSBjb21waWxlciAna25v
d3MnIHRoYXQgdGhlIGludCBwb2ludGVyIGNhbid0IHJlZmVyIHRvIGYgc2luY2UgdGhlIHR5cGVz
CisgICAgLy8gZG9uJ3QgbWF0Y2gsIHNvIHRoZSBjb21waWxlciBtYXkgY2FjaGUgZiBpbiBhIHJl
Z2lzdGVyLCBsZWF2aW5nIHJhbmRvbSBkYXRhCisgICAgLy8gaW4gZmJpdHMuICBVc2luZyBDKysg
c3R5bGUgY2FzdHMgbWFrZXMgbm8gZGlmZmVyZW5jZSwgaG93ZXZlciBhIHBvaW50ZXIgdG8KKyAg
ICAvLyBjaGFyIGRhdGEgaXMgYXNzdW1lZCB0byBhbGlhcyBhbnkgb3RoZXIgcG9pbnRlci4gIFRo
aXMgaXMgdGhlICdtZW1jcHkKKyAgICAvLyBleGNlcHRpb24nLgorICAgIC8vCisgICAgLy8gQml0
X2Nhc3QgdXNlcyB0aGUgbWVtY3B5IGV4Y2VwdGlvbiB0byBtb3ZlIHRoZSBiaXRzIGZyb20gYSB2
YXJpYWJsZSBvZiBvbmUKKyAgICAvLyB0eXBlIG9mIGEgdmFyaWFibGUgb2YgYW5vdGhlciB0eXBl
LiAgT2YgY291cnNlIHRoZSBlbmQgcmVzdWx0IGlzIGxpa2VseSB0bworICAgIC8vIGJlIGltcGxl
bWVudGF0aW9uIGRlcGVuZGVudC4gIE1vc3QgY29tcGlsZXJzIChnY2MtNC4yIGFuZCBNU1ZDIDIw
MDUpCisgICAgLy8gd2lsbCBjb21wbGV0ZWx5IG9wdGltaXplIEJpdENhc3QgYXdheS4KKyAgICAv
LworICAgIC8vIFRoZXJlIGlzIGFuIGFkZGl0aW9uYWwgdXNlIGZvciBCaXRDYXN0LgorICAgIC8v
IFJlY2VudCBnY2NzIHdpbGwgd2FybiB3aGVuIHRoZXkgc2VlIGNhc3RzIHRoYXQgbWF5IHJlc3Vs
dCBpbiBicmVha2FnZSBkdWUgdG8KKyAgICAvLyB0aGUgdHlwZS1iYXNlZCBhbGlhc2luZyBydWxl
LiAgSWYgeW91IGhhdmUgY2hlY2tlZCB0aGF0IHRoZXJlIGlzIG5vIGJyZWFrYWdlCisgICAgLy8g
eW91IGNhbiB1c2UgQml0Q2FzdCB0byBjYXN0IG9uZSBwb2ludGVyIHR5cGUgdG8gYW5vdGhlci4g
IFRoaXMgY29uZnVzZXMgZ2NjCisgICAgLy8gZW5vdWdoIHRoYXQgaXQgY2FuIG5vIGxvbmdlciBz
ZWUgdGhhdCB5b3UgaGF2ZSBjYXN0IG9uZSBwb2ludGVyIHR5cGUgdG8KKyAgICAvLyBhbm90aGVy
IHRodXMgYXZvaWRpbmcgdGhlIHdhcm5pbmcuCisgICAgdGVtcGxhdGUgPGNsYXNzIERlc3QsIGNs
YXNzIFNvdXJjZT4KKyAgICBpbmxpbmUgRGVzdCBCaXRDYXN0KGNvbnN0IFNvdXJjZSYgc291cmNl
KSB7CisgICAgICAgIC8vIENvbXBpbGUgdGltZSBhc3NlcnRpb246IHNpemVvZihEZXN0KSA9PSBz
aXplb2YoU291cmNlKQorICAgICAgICAvLyBBIGNvbXBpbGUgZXJyb3IgaGVyZSBtZWFucyB5b3Vy
IERlc3QgYW5kIFNvdXJjZSBoYXZlIGRpZmZlcmVudCBzaXplcy4KKyAgICAgICAgdHlwZWRlZiBj
aGFyIFZlcmlmeVNpemVzQXJlRXF1YWxbc2l6ZW9mKERlc3QpID09IHNpemVvZihTb3VyY2UpID8g
MSA6IC0xXTsKKyAgICAgICAgCisgICAgICAgIERlc3QgZGVzdDsKKyAgICAgICAgbWVtY3B5KCZk
ZXN0LCAmc291cmNlLCBzaXplb2YoZGVzdCkpOworICAgICAgICByZXR1cm4gZGVzdDsKKyAgICB9
CisgICAgCisgICAgdGVtcGxhdGUgPGNsYXNzIERlc3QsIGNsYXNzIFNvdXJjZT4KKyAgICBpbmxp
bmUgRGVzdCBCaXRDYXN0KFNvdXJjZSogc291cmNlKSB7CisgICAgICAgIHJldHVybiBCaXRDYXN0
PERlc3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihzb3VyY2UpKTsKKyAgICB9CisgICAg
Cit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKKyNlbmRpZiAgLy8gRE9VQkxFX0NPTlZFUlNJT05fVVRJTFNfSF8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvd3RmLnByaSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvd3RmLnByaQppbmRleCA1ZTQ4ZjlhNTAxZGMzOWUxZjVhYzYyOGI5NTEzOTllNjg2YjM1NDcw
Li42NjA2MTgyNDViMmYzZjNkNmNkMmE0OWRhNDYzYTRhNjVkOGRhODMwIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3d0Zi5wcmkKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi93dGYucHJpCkBAIC02LDggKzYsMTYgQEAgU09VUkNFUyArPSBcCiAgICAgd3RmL0Ny
eXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmNwcCBcCiAgICAgd3RmL0N1cnJlbnRUaW1lLmNw
cCBcCiAgICAgd3RmL0RhdGVNYXRoLmNwcCBcCi0gICAgd3RmL2R0b2EuY3BwIFwKICAgICB3dGYv
RGVjaW1hbE51bWJlci5jcHAgXAorICAgIHd0Zi9kdG9hLmNwcCBcCisgICAgd3RmL2R0b2EvYmln
bnVtLWR0b2EuY2MgXAorICAgIHd0Zi9kdG9hL2JpZ251bS5jYyBcCisgICAgd3RmL2R0b2EvY2Fj
aGVkLXBvd2Vycy5jYyBcCisgICAgd3RmL2R0b2EvZGl5LWZwLmNjIFwKKyAgICB3dGYvZHRvYS9k
b3VibGUtY29udmVyc2lvbi5jYyBcCisgICAgd3RmL2R0b2EvZmFzdC1kdG9hLmNjIFwKKyAgICB3
dGYvZHRvYS9maXhlZC1kdG9hLmNjIFwKKyAgICB3dGYvZHRvYS9zdHJ0b2QuY2MgXAogICAgIHd0
Zi9GYXN0TWFsbG9jLmNwcCBcCiAgICAgd3RmL2dvYmplY3QvR093blB0ci5jcHAgXAogICAgIHd0
Zi9nb2JqZWN0L0dSZWZQdHIuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2NTg1YzU0ZjM0ZjE1Zjg5YmVl
ZTI2ODQ2NzIwMmJkOGI2MDZlZjUzLi43OGE4ODQ5MzkwYTI2ZDRhNTEwYWEyODFjMjVjNGQ3YWJh
MDY0ZWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTEtMDgtMjQgIE1hcmsgSGFo
bmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KKworICAgICAgICBJbmNvcnBvcmF0ZSBu
ZXdlciwgZmFzdGVyIGR0b2EgbGlicmFyeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NjYzNDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgQWRkZWQgbmV3IGR0b2Eg
bGlicmFyeSBhdCBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZG91YmxlLWNvbnZlcnNpb24vLgor
ICAgICAgICBSZXBsYWNlZCBvbGQgY2FsbCB0byBkdG9hLiAgVGhlIG5ldyBsaWJyYXJ5IGlzIG11
Y2ggZmFzdGVyIHRoYW4gdGhlIG9sZCBvbmUuCisgICAgICAgIFdlIHN0aWxsIHVzZSB0aGUgb2xk
IGR0b2EgZm9yIHNvbWUgc3R1ZmYgaW4gV2ViQ29yZSBhcyB3ZWxsIGFzIHRoZSBvbGQgc3RydG9k
LCAKKyAgICAgICAgYnV0IHdlIGNhbiBwaGFzZSB0aGVzZSBvdXQgZXZlbnR1YWxseSBhcyB3ZWxs
LgorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvd3RmL2R0b2EvZG91YmxlLWNvbnZlcnNp
b24uaDogQWRkZWQuCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovY29weUZvcndhcmRpbmdIZWFk
ZXJzLmNtZDoKKyAgICAgICAgKiBjc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Zm9ybWF0TnVtYmVyKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MUGFyc2Vy
SWRpb21zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6ZUZvck51bWJlclR5cGUpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQmFzaWNWYWx1ZTo6d3JpdGVKU09OKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Db2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6c2VyaWFsaXplZCk6
CisKIDIwMTEtMDgtMjQgIFRvbW15IFdpZGVuZmx5Y2h0ICA8dG9tbXl3QGdvb2dsZS5jb20+CiAK
ICAgICAgICAgTWVkaWFTdHJlYW0gQVBJOiBhZGQgY3JlYXRlT2JqZWN0VVJMIGZ1bmN0aW9uYWxp
dHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9kdG9h
L2RvdWJsZS1jb252ZXJzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93
dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg2ZmIxMjc4OTM0ZGIwN2Rj
MzNmZjUyMTkyM2UxY2EzOWZlNjQ1MDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5oCkBAIC0wLDAg
KzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9kb3VibGVfY29udmVyc2lvbl9oCisjZGVmaW5l
IFdlYkNvcmVfRldEX2RvdWJsZV9jb252ZXJzaW9uX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9kb3VibGUtY29udmVyc2lvbi5oPgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9jb3B5Rm9yd2FyZGluZ0hlYWRlcnMuY21kIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovY29weUZvcndhcmRpbmdIZWFkZXJzLmNtZAppbmRleCBkYWQ1YWRm
MzkyYjZhN2Q3NDdlOTgxNjcxYmYzMjkzYTM5ZTg5ZmYwLi4yMjRjZTAzMjg2MWYwMGFmOTUwYzFi
NWUyZTJhODhjM2U4OWM2ZGE5IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9jb3B5Rm9yd2FyZGluZ0hlYWRlcnMuY21kCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL2NvcHlGb3J3YXJkaW5nSGVhZGVycy5jbWQKQEAgLTEwLDYgKzEwLDcgQEAgbWtk
aXIgMj5OVUwgIiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGluY2x1ZGVcV2ViQ29yZVxGb3J3YXJk
aW5nSGVhZGVyc1xtYXNtIgogbWtkaXIgMj5OVUwgIiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGlu
Y2x1ZGVcV2ViQ29yZVxGb3J3YXJkaW5nSGVhZGVyc1xwcm9maWxlciIKIG1rZGlyIDI+TlVMICIl
Q09ORklHVVJBVElPTkJVSUxERElSJVxpbmNsdWRlXFdlYkNvcmVcRm9yd2FyZGluZ0hlYWRlcnNc
aGVhcCIKIG1rZGlyIDI+TlVMICIlQ09ORklHVVJBVElPTkJVSUxERElSJVxpbmNsdWRlXFdlYkNv
cmVcRm9yd2FyZGluZ0hlYWRlcnNcd3RmIgorbWtkaXIgMj5OVUwgIiVDT05GSUdVUkFUSU9OQlVJ
TERESVIlXGluY2x1ZGVcV2ViQ29yZVxGb3J3YXJkaW5nSGVhZGVyc1x3dGZcZHRvYSIKIG1rZGly
IDI+TlVMICIlQ09ORklHVVJBVElPTkJVSUxERElSJVxpbmNsdWRlXFdlYkNvcmVcRm9yd2FyZGlu
Z0hlYWRlcnNcd3RmXHRleHQiCiBta2RpciAyPk5VTCAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVc
aW5jbHVkZVxXZWJDb3JlXEZvcndhcmRpbmdIZWFkZXJzXHd0Zlx1bmljb2RlIgogbWtkaXIgMj5O
VUwgIiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGluY2x1ZGVcV2ViQ29yZVxGb3J3YXJkaW5nSGVh
ZGVyc1x3dGZcdW5pY29kZVxpY3UiCkBAIC04MSw2ICs4Miw3IEBAIHhjb3B5IC95IC9kICIlUHJv
amVjdERpciUuLlxGb3J3YXJkaW5nSGVhZGVyc1xtYXNtXCouaCIgIiVDT05GSUdVUkFUSU9OQlVJ
TERESVIlCiB4Y29weSAveSAvZCAiJVByb2plY3REaXIlLi5cRm9yd2FyZGluZ0hlYWRlcnNccHJv
ZmlsZXJcKi5oIiAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVcaW5jbHVkZVxXZWJDb3JlXEZvcndh
cmRpbmdIZWFkZXJzXHByb2ZpbGVyIgogeGNvcHkgL3kgL2QgIiVQcm9qZWN0RGlyJS4uXEZvcndh
cmRpbmdIZWFkZXJzXGhlYXBcKi5oIiAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVcaW5jbHVkZVxX
ZWJDb3JlXEZvcndhcmRpbmdIZWFkZXJzXGhlYXAiCiB4Y29weSAveSAvZCAiJVByb2plY3REaXIl
Li5cRm9yd2FyZGluZ0hlYWRlcnNcd3RmXCouaCIgIiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGlu
Y2x1ZGVcV2ViQ29yZVxGb3J3YXJkaW5nSGVhZGVyc1x3dGYiCit4Y29weSAveSAvZCAiJVByb2pl
Y3REaXIlLi5cRm9yd2FyZGluZ0hlYWRlcnNcd3RmXGR0b2FcKi5oIiAiJUNPTkZJR1VSQVRJT05C
VUlMRERJUiVcaW5jbHVkZVxXZWJDb3JlXEZvcndhcmRpbmdIZWFkZXJzXHd0ZlxkdG9hIgogeGNv
cHkgL3kgL2QgIiVQcm9qZWN0RGlyJS4uXEZvcndhcmRpbmdIZWFkZXJzXHd0Zlx0ZXh0XCouaCIg
IiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGluY2x1ZGVcV2ViQ29yZVxGb3J3YXJkaW5nSGVhZGVy
c1x3dGZcdGV4dCIKIHhjb3B5IC95IC9kICIlUHJvamVjdERpciUuLlxGb3J3YXJkaW5nSGVhZGVy
c1x3dGZcdW5pY29kZVwqLmgiICIlQ09ORklHVVJBVElPTkJVSUxERElSJVxpbmNsdWRlXFdlYkNv
cmVcRm9yd2FyZGluZ0hlYWRlcnNcd3RmXHVuaWNvZGUiCiB4Y29weSAveSAvZCAiJVByb2plY3RE
aXIlLi5cRm9yd2FyZGluZ0hlYWRlcnNcd3RmXHVuaWNvZGVcaWN1XCouaCIgIiVDT05GSUdVUkFU
SU9OQlVJTERESVIlXGluY2x1ZGVcV2ViQ29yZVxGb3J3YXJkaW5nSGVhZGVyc1x3dGZcdW5pY29k
ZVxpY3UiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAppbmRleCA5ODE2
ZGE1NzcwNzFlMjc0NjBiYjM0OGEyNmEyOTBlNTdhOWM0NjQ4Li5iNzAxMzgzYzk2MjJmYjY2MzY0
MmZiMDliMDM2ZDdlMzRmMGNjMWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UHJpbWl0aXZlVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVW
YWx1ZS5jcHAKQEAgLTYwOSw3ICs2MDksNyBAQCBpbnQgQ1NTUHJpbWl0aXZlVmFsdWU6OmdldElk
ZW50KCkgY29uc3QKIHN0YXRpYyBTdHJpbmcgZm9ybWF0TnVtYmVyKGRvdWJsZSBudW1iZXIpCiB7
CiAgICAgRGVjaW1hbE51bWJlciBkZWNpbWFsKG51bWJlcik7Ci0gICAgCisKICAgICBTdHJpbmdC
dWZmZXIgYnVmZmVyKGRlY2ltYWwuYnVmZmVyTGVuZ3RoRm9yU3RyaW5nRGVjaW1hbCgpKTsKICAg
ICB1bnNpZ25lZCBsZW5ndGggPSBkZWNpbWFsLnRvU3RyaW5nRGVjaW1hbChidWZmZXIuY2hhcmFj
dGVycygpLCBidWZmZXIubGVuZ3RoKCkpOwogICAgIEFTU0VSVF9VTlVTRUQobGVuZ3RoLCBsZW5n
dGggPT0gYnVmZmVyLmxlbmd0aCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTFBhcnNlcklkaW9tcy5jcHAKaW5kZXggMDU4YmI5MzM5Y2ZmZjVkMTgzZTQ5ZjdkMjU4ODI1
ODczMDIwY2ExMi4uMDM2MjIxYjIxYjE2ZjhmNTJhZTI1NzJmYmQzNDYwOTg5NmI3YWEyNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5jcHAKQEAg
LTYzLDggKzYzLDcgQEAgU3RyaW5nIHNlcmlhbGl6ZUZvck51bWJlclR5cGUoZG91YmxlIG51bWJl
cikKICAgICAvLyBBY2NvcmRpbmcgdG8gSFRNTDUsICJ0aGUgYmVzdCByZXByZXNlbnRhdGlvbiBv
ZiB0aGUgbnVtYmVyIG4gYXMgYSBmbG9hdGluZwogICAgIC8vIHBvaW50IG51bWJlciIgaXMgYSBz
dHJpbmcgcHJvZHVjZWQgYnkgYXBwbHlpbmcgVG9TdHJpbmcoKSB0byBuLgogICAgIE51bWJlclRv
U3RyaW5nQnVmZmVyIGJ1ZmZlcjsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBudW1iZXJUb1N0cmlu
ZyhudW1iZXIsIGJ1ZmZlcik7Ci0gICAgcmV0dXJuIFN0cmluZyhidWZmZXIsIGxlbmd0aCk7Cisg
ICAgcmV0dXJuIFN0cmluZyhudW1iZXJUb1N0cmluZyhudW1iZXIsIGJ1ZmZlcikpOwogfQogCiBi
b29sIHBhcnNlVG9Eb3VibGVGb3JOdW1iZXJUeXBlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBkb3Vi
bGUqIHJlc3VsdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JWYWx1ZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5j
cHAKaW5kZXggOTJiYWJkNjdlOThkNGFjNTkwYzM1NTFiYTRhZjg2YWY5OTc0OGJmNi4uMWJkODdl
Y2I4YWRhMmIyNjJkNGM3ZGQ1NjJiM2E2YjRkODEwZTEwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpZiBFTkFC
TEUoSU5TUEVDVE9SKQogCiAjaW5jbHVkZSA8d3RmL0RlY2ltYWxOdW1iZXIuaD4KKyNpbmNsdWRl
IDx3dGYvZHRvYS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTYyNSw3ICs2MjYsNyBA
QCB2b2lkIEluc3BlY3RvckJhc2ljVmFsdWU6OndyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRw
dXQpIGNvbnN0CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG91dHB1dC0+YXBwZW5kKGZhbHNl
U3RyaW5nLCA1KTsKICAgICB9IGVsc2UgaWYgKHR5cGUoKSA9PSBUeXBlTnVtYmVyKSB7Ci0gICAg
ICAgIE51bWJlclRvU3RyaW5nQnVmZmVyIGJ1ZmZlcjsKKyAgICAgICAgTnVtYmVyVG9VU3RyaW5n
QnVmZmVyIGJ1ZmZlcjsKICAgICAgICAgaWYgKCFpc2Zpbml0ZShtX2RvdWJsZVZhbHVlKSkgewog
ICAgICAgICAgICAgb3V0cHV0LT5hcHBlbmQobnVsbFN0cmluZywgNCk7CiAgICAgICAgICAgICBy
ZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKaW5kZXgg
NDhmNzUyMDMwMTZiZjdmNTA2YzgxOGU0YzQxYTg3M2RmZjNjZWI4Yi4uMjJmODE2ODVhMDBkODM2
NDIzNWMzNGQyYzdkZjUyNTFhNjdiMDc2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yLmNwcApAQCAtMjA5LDcgKzIwOSw3IEBAIFN0cmluZyBDb2xvcjo6c2VyaWFs
aXplZCgpIGNvbnN0CiAgICAgaWYgKCFhbHBoYSgpKQogICAgICAgICByZXN1bHQuYXBwZW5kKCcw
Jyk7CiAgICAgZWxzZSB7Ci0gICAgICAgIE51bWJlclRvU3RyaW5nQnVmZmVyIGJ1ZmZlcjsKKyAg
ICAgICAgTnVtYmVyVG9VU3RyaW5nQnVmZmVyIGJ1ZmZlcjsKICAgICAgICAgdW5zaWduZWQgbGVu
Z3RoID0gRGVjaW1hbE51bWJlcihhbHBoYSgpIC8gMjU1LjApLnRvU3RyaW5nRGVjaW1hbChidWZm
ZXIsIFdURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgpOwogICAgICAgICByZXN1bHQuYXBw
ZW5kKGJ1ZmZlciwgbGVuZ3RoKTsKICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105266</attachid>
            <date>2011-08-25 15:40:59 -0700</date>
            <delta_ts>2011-08-31 11:27:04 -0700</delta_ts>
            <desc>Fixing windows build again</desc>
            <filename>bug-66346-20110825154058.patch</filename>
            <type>text/plain</type>
            <size>331656</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM3MTQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGJi
YTQ4NzJjZWJiNmNmMTJjZTFjZjkyMmVmYmQyZDkwM2M5M2I5ZTUuLjAwZjgzZWUxZDY2MTA3Mzc1
NDc1OTI2YWJiM2RhNDAxZmVhZjZlMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDEyMCBAQAorMjAxMS0wOC0yNCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBw
bGUuY29tPgorCisgICAgICAgIEluY29ycG9yYXRlIG5ld2VyLCBmYXN0ZXIgZHRvYSBsaWJyYXJ5
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM0Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIG5l
dyBkdG9hIGxpYnJhcnkgYXQgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2RvdWJsZS1jb252ZXJz
aW9uLy4KKyAgICAgICAgUmVwbGFjZWQgb2xkIGNhbGwgdG8gZHRvYS4gIFRoZSBuZXcgbGlicmFy
eSBpcyBtdWNoIGZhc3RlciB0aGFuIHRoZSBvbGQgb25lLgorICAgICAgICBXZSBzdGlsbCB1c2Ug
dGhlIG9sZCBkdG9hIGZvciBzb21lIHN0dWZmIGluIFdlYkNvcmUgYXMgd2VsbCBhcyB0aGUgb2xk
IHN0cnRvZCwgCisgICAgICAgIGJ1dCB3ZSBjYW4gcGhhc2UgdGhlc2Ugb3V0IGV2ZW50dWFsbHkg
YXMgd2VsbC4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2
YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmd5cGk6CisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRl
ZjoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvY29weS1m
aWxlcy5jbWQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwOgorICAgICAg
ICAoSlNDOjppbml0aWFsaXplVGhyZWFkaW5nT25jZSk6CisgICAgICAgICogcnVudGltZS9OdW1i
ZXJQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1bmNUb0V4cG9uZW50
aWFsKToKKyAgICAgICAgKEpTQzo6bnVtYmVyUHJvdG9GdW5jVG9GaXhlZCk6CisgICAgICAgIChK
U0M6Om51bWJlclByb3RvRnVuY1RvUHJlY2lzaW9uKToKKyAgICAgICAgKiBydW50aW1lL1VTdHJp
bmcuY3BwOgorICAgICAgICAoSlNDOjpVU3RyaW5nOjpudW1iZXIpOgorICAgICAgICAqIHd0Zi9D
TWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvZHRvYS5jcHA6CisgICAgICAgIChXVEY6OmR0
b2EpOgorICAgICAgICAqIHd0Zi9kdG9hLmg6CisgICAgICAgICogd3RmL2R0b2EvQ09QWUlORzog
QWRkZWQuCisgICAgICAgICogd3RmL2R0b2EvTElDRU5TRTogQWRkZWQuCisgICAgICAgICogd3Rm
L2R0b2EvUkVBRE1FOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9iaWdudW0tZHRvYS5jYzog
QWRkZWQuCisgICAgICAgICogd3RmL2R0b2EvYmlnbnVtLWR0b2EuaDogQWRkZWQuCisgICAgICAg
ICogd3RmL2R0b2EvYmlnbnVtLmNjOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9iaWdudW0u
aDogQWRkZWQuCisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpCaWdudW06OlRpbWVz
MTApOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6QmlnbnVtOjpFcXVhbCk6Cisg
ICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpCaWdudW06Okxlc3NFcXVhbCk6CisgICAg
ICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpCaWdudW06Okxlc3MpOgorICAgICAgICAoV1RG
Ojpkb3VibGVfY29udmVyc2lvbjo6QmlnbnVtOjpQbHVzRXF1YWwpOgorICAgICAgICAoV1RGOjpk
b3VibGVfY29udmVyc2lvbjo6QmlnbnVtOjpQbHVzTGVzc0VxdWFsKToKKyAgICAgICAgKFdURjo6
ZG91YmxlX2NvbnZlcnNpb246OkJpZ251bTo6UGx1c0xlc3MpOgorICAgICAgICAoV1RGOjpkb3Vi
bGVfY29udmVyc2lvbjo6QmlnbnVtOjpFbnN1cmVDYXBhY2l0eSk6CisgICAgICAgIChXVEY6OmRv
dWJsZV9jb252ZXJzaW9uOjpCaWdudW06OkJpZ2l0TGVuZ3RoKToKKyAgICAgICAgKiB3dGYvZHRv
YS9jYWNoZWQtcG93ZXJzLmNjOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9jYWNoZWQtcG93
ZXJzLmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9kdG9hL2RpeS1mcC5jYzogQWRkZWQuCisgICAg
ICAgICogd3RmL2R0b2EvZGl5LWZwLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpkb3VibGVfY29u
dmVyc2lvbjo6RGl5RnA6OkRpeUZwKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246
OkRpeUZwOjpTdWJ0cmFjdCk6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpEaXlG
cDo6TWludXMpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RGl5RnA6OlRpbWVz
KToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246OkRpeUZwOjpOb3JtYWxpemUpOgor
ICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RGl5RnA6OmYpOgorICAgICAgICAoV1RG
Ojpkb3VibGVfY29udmVyc2lvbjo6RGl5RnA6OmUpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29u
dmVyc2lvbjo6RGl5RnA6OnNldF9mKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246
OkRpeUZwOjpzZXRfZSk6CisgICAgICAgICogd3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uY2M6
IEFkZGVkLgorICAgICAgICAqIHd0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmg6IEFkZGVkLgor
ICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6
OkRvdWJsZVRvU3RyaW5nQ29udmVydGVyKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNp
b246OlN0cmluZ1RvRG91YmxlQ29udmVydGVyOjpTdHJpbmdUb0RvdWJsZUNvbnZlcnRlcik6Cisg
ICAgICAgICogd3RmL2R0b2EvZG91YmxlLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpkb3VibGVf
Y29udmVyc2lvbjo6ZG91YmxlX3RvX3VpbnQ2NCk6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252
ZXJzaW9uOjp1aW50NjRfdG9fZG91YmxlKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNp
b246OkRvdWJsZTo6RG91YmxlKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246OkRv
dWJsZTo6QXNEaXlGcCk6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGU6
OkFzTm9ybWFsaXplZERpeUZwKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246OkRv
dWJsZTo6QXNVaW50NjQpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91Ymxl
OjpOZXh0RG91YmxlKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZTo6
RXhwb25lbnQpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpTaWdu
aWZpY2FuZCk6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGU6OklzRGVu
b3JtYWwpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpJc1NwZWNp
YWwpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpJc05hbik6Cisg
ICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGU6OklzSW5maW5pdGUpOgorICAg
ICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpTaWduKToKKyAgICAgICAgKFdU
Rjo6ZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZTo6VXBwZXJCb3VuZGFyeSk6CisgICAgICAgIChX
VEY6OmRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGU6Ok5vcm1hbGl6ZWRCb3VuZGFyaWVzKToKKyAg
ICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZTo6dmFsdWUpOgorICAgICAgICAo
V1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpTaWduaWZpY2FuZFNpemVGb3JPcmRlck9m
TWFnbml0dWRlKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZTo6SW5m
aW5pdHkpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpOYU4pOgor
ICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpEaXlGcFRvVWludDY0KToK
KyAgICAgICAgKiB3dGYvZHRvYS9mYXN0LWR0b2EuY2M6IEFkZGVkLgorICAgICAgICAqIHd0Zi9k
dG9hL2Zhc3QtZHRvYS5oOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9maXhlZC1kdG9hLmNj
OiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9maXhlZC1kdG9hLmg6IEFkZGVkLgorICAgICAg
ICAqIHd0Zi9kdG9hL3N0cnRvZC5jYzogQWRkZWQuCisgICAgICAgICogd3RmL2R0b2Evc3RydG9k
Lmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9kdG9hL3V0aWxzLmg6IEFkZGVkLgorICAgICAgICAo
V1RGOjpkb3VibGVfY29udmVyc2lvbjo6TWF4KToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZl
cnNpb246Ok1pbik6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpTdHJMZW5ndGgp
OgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6VmVjdG9yOjpWZWN0b3IpOgorICAg
ICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6VmVjdG9yOjpTdWJWZWN0b3IpOgorICAgICAg
ICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6VmVjdG9yOjpsZW5ndGgpOgorICAgICAgICAoV1RG
Ojpkb3VibGVfY29udmVyc2lvbjo6VmVjdG9yOjppc19lbXB0eSk6CisgICAgICAgIChXVEY6OmRv
dWJsZV9jb252ZXJzaW9uOjpWZWN0b3I6OnN0YXJ0KToKKyAgICAgICAgKFdURjo6ZG91YmxlX2Nv
bnZlcnNpb246OlZlY3Rvcjo6b3BlcmF0b3JbXSk6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252
ZXJzaW9uOjpWZWN0b3I6OmZpcnN0KToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246
OlZlY3Rvcjo6bGFzdCk6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdC
dWlsZGVyOjpTdHJpbmdCdWlsZGVyKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246
OlN0cmluZ0J1aWxkZXI6On5TdHJpbmdCdWlsZGVyKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2Nv
bnZlcnNpb246OlN0cmluZ0J1aWxkZXI6OnNpemUpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29u
dmVyc2lvbjo6U3RyaW5nQnVpbGRlcjo6cG9zaXRpb24pOgorICAgICAgICAoV1RGOjpkb3VibGVf
Y29udmVyc2lvbjo6U3RyaW5nQnVpbGRlcjo6UmVzZXQpOgorICAgICAgICAoV1RGOjpkb3VibGVf
Y29udmVyc2lvbjo6U3RyaW5nQnVpbGRlcjo6QWRkQ2hhcmFjdGVyKToKKyAgICAgICAgKFdURjo6
ZG91YmxlX2NvbnZlcnNpb246OlN0cmluZ0J1aWxkZXI6OkFkZFN0cmluZyk6CisgICAgICAgIChX
VEY6OmRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdCdWlsZGVyOjpBZGRTdWJzdHJpbmcpOgorICAg
ICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6U3RyaW5nQnVpbGRlcjo6QWRkUGFkZGluZyk6
CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdCdWlsZGVyOjpGaW5hbGl6
ZSk6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdCdWlsZGVyOjppc19m
aW5hbGl6ZWQpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6Qml0Q2FzdCk6Cisg
ICAgICAgICogd3RmL3d0Zi5wcmk6CisKIDIwMTEtMDgtMjQgIEZpbGlwIFBpemxvICA8ZnBpemxv
QGFwcGxlLmNvbT4KIAogICAgICAgICBFcnJvckluc3RhbmNlOjpjcmVhdGUgc29tZXRpbWVzIGhh
cyB0d28gaGVhcCBvYmplY3QgY29uc3RydWN0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQppbmRleCA5NDE0MzU0ODllOGJlYmUzYmMxMWM0ZGVjNmU4Nzc1YjE4
MjBlZDU4Li5iYzE5MTBhODM3ZmFkOTg3Nzg1OGFmZWVkNTY4YzNhOWIyOWVmNzlhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNDY1LDkgKzQ2NSwyNyBA
QCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L0N1cnJlbnRUaW1lLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGF0ZU1hdGguY3Bw
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RhdGVNYXRoLmggXAotCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvRGVjaW1hbE51bWJlci5oIFwKLQlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL0RlY2ltYWxOdW1iZXIuY3BwIFwKLQlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RlY29k
ZXIuaCBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EZWNpbWFsTnVtYmVyLmNwcCBc
CisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EZWNpbWFsTnVtYmVyLmggXAorICAgIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9iaWdudW0tZHRvYS5jYyBcCisgICAgU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS5jYyBcCisgICAgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9kdG9hL2NhY2hlZC1wb3dlcnMuY2MgXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvZHRvYS9kaXktZnAuY2MgXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
ZHRvYS9kb3VibGUtY29udmVyc2lvbi5jYyBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9kdG9hL2Zhc3QtZHRvYS5jYyBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9h
L2ZpeGVkLWR0b2EuY2MgXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9zdHJ0
b2QuY2MgXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9iaWdudW0tZHRvYS5o
IFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvYmlnbnVtLmggXAorICAgIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmggXAorICAgIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kaXktZnAuaCBcCisgICAgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmggXAorICAgIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvZHRvYS9kb3VibGUuaCBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9kdG9hL2Zhc3QtZHRvYS5oIFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2Ev
Zml4ZWQtZHRvYS5oIFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2Evc3RydG9k
LmggXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS91dGlscy5oIFwKKyAgICBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RlY29kZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9EZXF1ZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Rpc2FsbG93Q1R5
cGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Eb3VibHlMaW5rZWRMaXN0LmggXApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKaW5kZXggM2QwZWQ5N2NiODg2
NzQzZDgzNTE0MDAyNmIwNmM2ZDUzMTNlMzA3Yi4uYWE3NGEyOGFlMWQ5MmViMjViN2ZiZDEyYWNm
MTlhNGQ4MzBjNDE5ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLmV4cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhw
CkBAIC0zODUsOCArMzg1LDYgQEAgX19aTjNXVEYxMU9TQWxsb2NhdG9yMTZyZXNlcnZlQW5kQ29t
bWl0RW1OUzBfNVVzYWdlRWJiYgogX19aTjNXVEYxMU9TQWxsb2NhdG9yMThyZWxlYXNlRGVjb21t
aXR0ZWRFUHZtCiBfX1pOM1dURjExY29tbWVudEF0b21FCiBfX1pOM1dURjExY3VycmVudFRpbWVF
dgotX19aTjNXVEYxMWR0b2FSb3VuZERQRVBjZGlSYlJpUmoKLV9fWk4zV1RGMTFkdG9hUm91bmRT
RkVQY2RpUmJSaVJqCiBfX1pOM1dURjExZW1wdHlTdHJpbmdFdgogX19aTjNXVEYxMWZhc3RSZWFs
bG9jRVB2bQogX19aTjNXVEYxMkF0b21pY1N0cmluZzExYWRkU2xvd0Nhc2VFUE5TXzEwU3RyaW5n
SW1wbEUKQEAgLTQxNSw3ICs0MTMsNyBAQCBfX1pOM1dURjEzY3VycmVudFRocmVhZEV2CiBfX1pO
M1dURjEzdHJ5RmFzdENhbGxvY0VtbQogX19aTjNXVEYxM3RyeUZhc3RNYWxsb2NFbQogX19aTjNX
VEYxNGZhc3RNYWxsb2NTaXplRVBLdgotX19aTjNXVEYxNG51bWJlclRvU3RyaW5nRWRQdAorX19a
TjNXVEYxNG51bWJlclRvU3RyaW5nRWRQYwogX19aTjNXVEYxNHRyeUZhc3RSZWFsbG9jRVB2bQog
X19aTjNXVEYxNVRocmVhZENvbmRpdGlvbjR3YWl0RVJOU181TXV0ZXhFCiBfX1pOM1dURjE1VGhy
ZWFkQ29uZGl0aW9uNnNpZ25hbEV2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUuZ3lwaSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5neXBpCmluZGV4IDYxMjA0OTJlMjkyODQ2MjkzYjI1MzgxM2MyOThkNDFhOGJmZmIzNGQuLmZh
OWQzMWUyYmRlMDliZmYwMDM0YjM2YzNhNGQ5NWEyYTFiODhkMzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCkBAIC0yMTcsNiArMjE3LDE2IEBACiAgICAgICAg
ICAgICAnd3RmL1ZlY3RvclRyYWl0cy5oJywKICAgICAgICAgICAgICd3dGYvV1RGVGhyZWFkRGF0
YS5oJywKICAgICAgICAgICAgICd3dGYvZHRvYS5oJywKKyAgICAgICAgICAgICd3dGYvZHRvYS9i
aWdudW0tZHRvYS5oJywKKyAgICAgICAgICAgICd3dGYvZHRvYS9iaWdudW0uaCcsCisgICAgICAg
ICAgICAnd3RmL2R0b2EvY2FjaGVkLXBvd2Vycy5oJywKKyAgICAgICAgICAgICd3dGYvZHRvYS9k
aXktZnAuaCcsCisgICAgICAgICAgICAnd3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uaCcsCisg
ICAgICAgICAgICAnd3RmL2R0b2EvZG91YmxlLmgnLAorICAgICAgICAgICAgJ3d0Zi9kdG9hL2Zh
c3QtZHRvYS5oJywKKyAgICAgICAgICAgICd3dGYvZHRvYS9maXhlZC1kdG9hLmgnLAorICAgICAg
ICAgICAgJ3d0Zi9kdG9hL3N0cnRvZC5oJywKKyAgICAgICAgICAgICd3dGYvZHRvYS91dGlscy5o
JywKICAgICAgICAgICAgICd3dGYvdGV4dC9BdG9taWNTdHJpbmcuaCcsCiAgICAgICAgICAgICAn
d3RmL3RleHQvQXRvbWljU3RyaW5nSGFzaC5oJywKICAgICAgICAgICAgICd3dGYvdGV4dC9BdG9t
aWNTdHJpbmdJbXBsLmgnLApAQCAtNjMxLDYgKzY0MSwxNCBAQAogICAgICAgICAgICAgJ3d0Zi9j
aHJvbWl1bS9DaHJvbWl1bVRocmVhZGluZy5oJywKICAgICAgICAgICAgICd3dGYvY2hyb21pdW0v
TWFpblRocmVhZENocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAnd3RmL2R0b2EuY3BwJywKKyAg
ICAgICAgICAgICd3dGYvZHRvYS9iaWdudW0tZHRvYS5jYycsCisgICAgICAgICAgICAnd3RmL2R0
b2EvYmlnbnVtLmNjJywKKyAgICAgICAgICAgICd3dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmNjJywK
KyAgICAgICAgICAgICd3dGYvZHRvYS9kaXktZnAuY2MnLAorICAgICAgICAgICAgJ3d0Zi9kdG9h
L2RvdWJsZS1jb252ZXJzaW9uLmNjJywKKyAgICAgICAgICAgICd3dGYvZHRvYS9mYXN0LWR0b2Eu
Y2MnLAorICAgICAgICAgICAgJ3d0Zi9kdG9hL2ZpeGVkLWR0b2EuY2MnLAorICAgICAgICAgICAg
J3d0Zi9kdG9hL3N0cnRvZC5jYycsCiAgICAgICAgICAgICAnd3RmL2VmbC9NYWluVGhyZWFkRWZs
LmNwcCcsCiAgICAgICAgICAgICAnd3RmL2dvYmplY3QvR093blB0ci5jcHAnLAogICAgICAgICAg
ICAgJ3d0Zi9nb2JqZWN0L0dPd25QdHIuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LmRlZiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCmluZGV4IGFkMWYyNDQ3ZGE5MzcyYzlkNjBiMGJl
ODI3OWUzZGE1YjRiMzcyNGYuLjYwMGE2MWE5NDFkNDBiNjIwMDk0Njg1MTQ2MTEzODU5NTg2NTkz
YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUuZGVmCkBAIC00MSw2ICs0MSwxMSBAQCBFWFBPUlRTCiAgICAgPz8xV2Vha0hhbmRsZU93bmVy
QEpTQ0BAVUFFQFhaCiAgICAgPz84SlNDQEBZQV9OQUJWVVN0cmluZ0AwQDBAWgogICAgID8/OFdU
RkBAWUFfTkFCVkNTdHJpbmdAMEAwQFoKKyAgICA/RWNtYVNjcmlwdENvbnZlcnRlckBEb3VibGVU
b1N0cmluZ0NvbnZlcnRlckBkb3VibGVfY29udmVyc2lvbkBXVEZAQFNBQUJWMTIzQFhaCisgICAg
P1RvRXhwb25lbnRpYWxARG91YmxlVG9TdHJpbmdDb252ZXJ0ZXJAZG91YmxlX2NvbnZlcnNpb25A
V1RGQEBRQkVfTk5IUEFWU3RyaW5nQnVpbGRlckAyM0BAWgorICAgID9Ub0ZpeGVkQERvdWJsZVRv
U3RyaW5nQ29udmVydGVyQGRvdWJsZV9jb252ZXJzaW9uQFdURkBAUUJFX05OSFBBVlN0cmluZ0J1
aWxkZXJAMjNAQFoKKyAgICA/VG9QcmVjaXNpb25ARG91YmxlVG9TdHJpbmdDb252ZXJ0ZXJAZG91
YmxlX2NvbnZlcnNpb25AV1RGQEBRQkVfTk5IUEFWU3RyaW5nQnVpbGRlckAyM0BAWgorICAgID9U
b1Nob3J0ZXN0QERvdWJsZVRvU3RyaW5nQ29udmVydGVyQGRvdWJsZV9jb252ZXJzaW9uQFdURkBA
UUJFX05OUEFWU3RyaW5nQnVpbGRlckAyM0BAWgogICAgID9hYnNvbHV0ZVRpbWVUb1dhaXRUaW1l
b3V0SW50ZXJ2YWxAV1RGQEBZQUtOQFoKICAgICA/YWN0aXZpdHlDYWxsYmFja0BIZWFwQEpTQ0BA
UUFFUEFWR0NBY3Rpdml0eUNhbGxiYWNrQDJAWFoKICAgICA/YWRkQElkZW50aWZpZXJASlNDQEBT
QT9BVj8kUGFzc1JlZlB0ckBWU3RyaW5nSW1wbEBXVEZAQEBXVEZAQFBBVkV4ZWNTdGF0ZUAyQFBC
REBaCkBAIC0yMTUsNiArMjIwLDcgQEAgRVhQT1JUUwogICAgID9pbmNyZW1lbnRAUmVmQ291bnRl
ZExlYWtDb3VudGVyQFdURkBAUUFFWFhaCiAgICAgP2luaXRAQXRvbWljU3RyaW5nQFdURkBAU0FY
WFoKICAgICA/aW5pdEBKU0dsb2JhbE9iamVjdEBKU0NAQEFBRVhQQVZKU09iamVjdEAyQEBaCisg
ICAgP2luaXRpYWxpemVAZG91YmxlX2NvbnZlcnNpb25AV1RGQEBZQVhYWgogICAgID9pbml0aWFs
aXplTWFpblRocmVhZEBXVEZAQFlBWFhaCiAgICAgP2luaXRpYWxpemVUaHJlYWRpbmdASlNDQEBZ
QVhYWgogICAgID9pbml0aWFsaXplVGhyZWFkaW5nQFdURkBAWUFYWFoKQEAgLTI1MCw3ICsyNTYs
NyBAQCBFWFBPUlRTCiAgICAgP251bWJlckBVU3RyaW5nQEpTQ0BAU0E/QVYxMkBIQFoKICAgICA/
bnVtYmVyQFVTdHJpbmdASlNDQEBTQT9BVjEyQElAWgogICAgID9udW1iZXJAVVN0cmluZ0BKU0NA
QFNBP0FWMTJATkBaCi0gICAgP251bWJlclRvU3RyaW5nQFdURkBAWUFJTlFBX1dAWgorICAgID9u
dW1iZXJUb1N0cmluZ0BXVEZAQFlBUEJETlFBREBaCiAgICAgP29iamVjdENvdW50QEhlYXBASlND
QEBRQUVJWFoKICAgICA/b2JqZWN0UHJvdG9GdW5jVG9TdHJpbmdASlNDQEBZSV9KUEFWRXhlY1N0
YXRlQDFAQFoKICAgICA/cGFyc2VEYXRlRnJvbU51bGxUZXJtaW5hdGVkQ2hhcmFjdGVyc0BXVEZA
QFlBTlBCREBaCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL2NvcHktZmlsZXMuY21kIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9jb3B5LWZpbGVzLmNt
ZAppbmRleCBlNDA3NWE0NWQ3NWFmOTA1ZjRhNDAzMDFmZjFjNjJmNWY3ZDliZDg4Li41NTEwMjFh
ZGU1MzFkNTRkMTY5M2ViOTBkZjNmMjFiZDU1MjIyNTNlIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL2NvcHktZmls
ZXMuY21kCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ov
SmF2YVNjcmlwdENvcmUvY29weS1maWxlcy5jbWQKQEAgLTQ2LDYgKzQ2LDcgQEAgZm9yICUlZCBp
biAoCiAgICAgcHJvZmlsZXIKICAgICBydW50aW1lCiAgICAgd3RmCisgICAgd3RmXGR0b2EKICAg
ICB3dGZcdGV4dAogICAgIHd0Zlx1bmljb2RlCiAgICAgd3RmXHVuaWNvZGVcaWN1CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYu
dmNwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYv
V1RGLnZjcHJvagppbmRleCAzNDhjMjZmMDE5ODFkMTM5NzRiNGViM2I3NTNhMmM5OTljMmY4YjJk
Li5lZjQzZGFhNDlhMTliMGQ3N2E0NTM0MDZmMWE1YTlkNmQ5YmYyMDVjIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9q
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dU
Ri52Y3Byb2oKQEAgLTUxMiw2ICs1MTIsODIgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCTwvRmls
dGVyPgorICAgICAgICA8RmlsdGVyCisgICAgICAgICAgICBOYW1lPSJkdG9hIgorICAgICAgICAg
ICAgPgorICAgICAgICAgICAgPEZpbGUKKyAgICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4u
XC4uXHd0ZlxkdG9hXGJpZ251bS1kdG9hLmNjIgorICAgICAgICAgICAgICAgID4KKyAgICAgICAg
ICAgIDwvRmlsZT4KKyAgICAgICAgICAgIDxGaWxlCisgICAgICAgICAgICAgICAgUmVsYXRpdmVQ
YXRoPSIuLlwuLlx3dGZcZHRvYVxiaWdudW0tZHRvYS5oIgorICAgICAgICAgICAgICAgID4KKyAg
ICAgICAgICAgIDwvRmlsZT4KKyAgICAgICAgICAgIDxGaWxlCisgICAgICAgICAgICAgICAgUmVs
YXRpdmVQYXRoPSIuLlwuLlx3dGZcZHRvYVxiaWdudW0uY2MiCisgICAgICAgICAgICAgICAgPgor
ICAgICAgICAgICAgPC9GaWxlPgorICAgICAgICAgICAgPEZpbGUKKyAgICAgICAgICAgICAgICBS
ZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxkdG9hXGJpZ251bS5oIgorICAgICAgICAgICAgICAgID4K
KyAgICAgICAgICAgIDwvRmlsZT4KKyAgICAgICAgICAgIDxGaWxlCisgICAgICAgICAgICAgICAg
UmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcZHRvYVxjYWNoZWQtcG93ZXJzLmNjIgorICAgICAgICAg
ICAgICAgID4KKyAgICAgICAgICAgIDwvRmlsZT4KKyAgICAgICAgICAgIDxGaWxlCisgICAgICAg
ICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcZHRvYVxjYWNoZWQtcG93ZXJzLmgiCisg
ICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgPC9GaWxlPgorICAgICAgICAgICAgPEZpbGUK
KyAgICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxkdG9hXGRpeS1mcC5jYyIK
KyAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICA8L0ZpbGU+CisgICAgICAgICAgICA8Rmls
ZQorICAgICAgICAgICAgICAgIFJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXGR0b2FcZGl5LWZwLmgi
CisgICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgPC9GaWxlPgorICAgICAgICAgICAgPEZp
bGUKKyAgICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxkdG9hXGRvdWJsZS1j
b252ZXJzaW9uLmNjIgorICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAgIDwvRmlsZT4KKyAg
ICAgICAgICAgIDxGaWxlCisgICAgICAgICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZc
ZHRvYVxkb3VibGUtY29udmVyc2lvbi5oIgorICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAg
IDwvRmlsZT4KKyAgICAgICAgICAgIDxGaWxlCisgICAgICAgICAgICAgICAgUmVsYXRpdmVQYXRo
PSIuLlwuLlx3dGZcZHRvYVxkb3VibGUuaCIKKyAgICAgICAgICAgICAgICA+CisgICAgICAgICAg
ICA8L0ZpbGU+CisgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgIFJlbGF0aXZlUGF0
aD0iLi5cLi5cd3RmXGR0b2FcZmFzdC1kdG9hLmNjIgorICAgICAgICAgICAgICAgID4KKyAgICAg
ICAgICAgIDwvRmlsZT4KKyAgICAgICAgICAgIDxGaWxlCisgICAgICAgICAgICAgICAgUmVsYXRp
dmVQYXRoPSIuLlwuLlx3dGZcZHRvYVxmYXN0LWR0b2EuaCIKKyAgICAgICAgICAgICAgICA+Cisg
ICAgICAgICAgICA8L0ZpbGU+CisgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgIFJl
bGF0aXZlUGF0aD0iLi5cLi5cd3RmXGR0b2FcZml4ZWQtZHRvYS5jYyIKKyAgICAgICAgICAgICAg
ICA+CisgICAgICAgICAgICA8L0ZpbGU+CisgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAg
ICAgIFJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXGR0b2FcZml4ZWQtZHRvYS5oIgorICAgICAgICAg
ICAgICAgID4KKyAgICAgICAgICAgIDwvRmlsZT4KKyAgICAgICAgICAgIDxGaWxlCisgICAgICAg
ICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcZHRvYVxzdHJ0b2QuY2MiCisgICAgICAg
ICAgICAgICAgPgorICAgICAgICAgICAgPC9GaWxlPgorICAgICAgICAgICAgPEZpbGUKKyAgICAg
ICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxkdG9hXHN0cnRvZC5oIgorICAgICAg
ICAgICAgICAgID4KKyAgICAgICAgICAgIDwvRmlsZT4KKyAgICAgICAgICAgIDxGaWxlCisgICAg
ICAgICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcZHRvYVx1dGlscy5oIgorICAgICAg
ICAgICAgICAgID4KKyAgICAgICAgICAgIDwvRmlsZT4KKyAgICAgICAgPC9GaWx0ZXI+CiAJCTxG
aWxlCiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxBbGlnbm1lbnQuaCIKIAkJCT4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZGY4ZTgzZGIzYzg0ZTI3NGZlNWVkYzdlNDYyNTkz
NWFhZWU2MjVmOC4uYTY2MDE2MWYxNTAwZjFiNjJhYTkwYmFlMDc1ZDM0NjRiZDNjMjk0ZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ4LDggKzQ4LDYgQEAKIAkJMEJERkZBRTAw
RkM2MTkyOTAwRDY5RUY0IC8qIENyb3NzVGhyZWFkUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEJERkZBRDQwRkM2MTcxMDAwRDY5RUY0
IC8qIENyb3NzVGhyZWFkUmVmQ291bnRlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBCREZGQUUxMEZDNjE5MzEwMEQ2OUVGNCAvKiBPd25GYXN0
TWFsbG9jUHRyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwQkRGRkFEMTBGQzYxNkVDMDBENjlFRjQgLyogT3duRmFzdE1hbGxvY1B0ci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBCRjI4QTI5MTFBMzNE
QzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRz
LmNwcCAqLzsgfTsKLQkJMEYyOTQ3OUMxMjZFNjk4QzAwQjNBQkY1IC8qIERlY2ltYWxOdW1iZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyOTQ3
OUIxMjZFNjk4QzAwQjNBQkY1IC8qIERlY2ltYWxOdW1iZXIuY3BwICovOyB9OwotCQkwRjc3MDA5
MDE0MDJGREU0MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc3MDA4RTE0MDJGREQ2MDA3OEVCMzkgLyog
U2FtcGxpbmdDb3VudGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc3MDA5
MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLzsgfTsKIAkJMEY5NjNC
MzgxM0ZDNkZFOTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjNCMzYxM0ZDNkZERTAwMDJEOUIyIC8qIFZh
bHVlUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGQzgxNTBBMTQwNDNCRjUwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUwOTE0
MDQzQkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yNTMsNyArMjUxLDYgQEAKIAkJODYw
MTYxRTYwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjAxNjFFMjBGM0E4M0Mx
MDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaCAqLzsgfTsKIAkJODYyNkJFQ0Yx
MTkyOEUzOTAwNzgyRkFCIC8qIFN0cmluZ1N0YXRpY3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODYyNkJFQ0UxMTkyOEUzOTAwNzgyRkFCIC8qIFN0
cmluZ1N0YXRpY3MuY3BwICovOyB9OwogCQk4NjI3RTVFQzExRjEyODE5MDBBMzEzQjUgLyogUGFn
ZUFsbG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg2MjdFNUVBMTFGMTI4MTkwMEEzMTNCNSAvKiBQYWdlQWxsb2NhdGlvbi5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTg2MkFGNEI2MTIyMzlD
N0IwMDI0RTVCOCAvKiBEZWNpbWFsTnVtYmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NjJBRjRCNTEyMjM5QzdCMDAyNEU1QjggLyogRGVjaW1hbE51
bWJlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTg2M0IyM0UwMEZDNjExODkwMDcwM0FBNCAvKiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2M0IyM0RGMEZDNjBF
NjIwMDcwM0FBNCAvKiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NjQzOEZDNDEyNjU1MDNFMDBFMERGQ0Eg
LyogU3RyaW5nQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4NjQzOEZDMzEyNjU1MDNFMDBFMERGQ0EgLyogU3RyaW5nQnVpbGRlci5jcHAg
Ki87IH07CiAJCTg2NTY1NzQyMTE1QkUzREEwMDI5MUY0MCAvKiBDU3RyaW5nLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2NTY1NzQwMTE1QkUzREEw
MDI5MUY0MCAvKiBDU3RyaW5nLmNwcCAqLzsgfTsKQEAgLTU5OCw2ICs1OTUsMjcgQEAKIAkJQkNG
RDhDOTIwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ZEOEM5MDBFRUIyRUU3MDAyODM4NDggLyog
SnVtcFRhYmxlLmNwcCAqLzsgfTsKIAkJQkNGRDhDOTMwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBU
YWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNG
RDhDOTEwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5oICovOyB9OwogCQlDMEEyNzI2MzBF
NTBBMDYzMDBFOTZFMTUgLyogTm90Rm91bmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEMwQTI3MjNGMEU1MDlGMUUwMEU5NkUxNSAvKiBOb3RGb3VuZC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUMyMkIz
MUI5MTQwNTc3RDcwMERCNDc1QSAvKiBTYW1wbGluZ0NvdW50ZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzcwMDhFMTQwMkZERDYwMDc4RUIzOSAv
KiBTYW1wbGluZ0NvdW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQlDMjJDNTJGMTEzRkFGNkVGMDBCN0RDMEQgLyogYmlnbnVtLWR0b2EuY2Mg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTI5MDEz
RkFGNkVGMDBCN0RDMEQgLyogYmlnbnVtLWR0b2EuY2MgKi87IH07CisJCUMyMkM1MkYyMTNGQUY2
RUYwMEI3REMwRCAvKiBiaWdudW0tZHRvYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQzIyQzUyOTExM0ZBRjZFRjAwQjdEQzBEIC8qIGJpZ251bS1kdG9h
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIy
QzUyRjMxM0ZBRjZFRjAwQjdEQzBEIC8qIGJpZ251bS5jYyBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1MjkyMTNGQUY2RUYwMEI3REMwRCAvKiBiaWdu
dW0uY2MgKi87IH07CisJCUMyMkM1MkY0MTNGQUY2RUYwMEI3REMwRCAvKiBiaWdudW0uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1MjkzMTNGQUY2
RUYwMEI3REMwRCAvKiBiaWdudW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQlDMjJDNTJGNTEzRkFGNkVGMDBCN0RDMEQgLyogY2FjaGVkLXBvd2Vy
cy5jYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1
Mjk0MTNGQUY2RUYwMEI3REMwRCAvKiBjYWNoZWQtcG93ZXJzLmNjICovOyB9OworCQlDMjJDNTJG
NjEzRkFGNkVGMDBCN0RDMEQgLyogY2FjaGVkLXBvd2Vycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyQzUyOTUxM0ZBRjZFRjAwQjdEQzBEIC8qIGNh
Y2hlZC1wb3dlcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQlDMjJDNTJGNzEzRkFGNkVGMDBCN0RDMEQgLyogZGl5LWZwLmNjIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyQzUyOTcxM0ZBRjZFRjAwQjdE
QzBEIC8qIGRpeS1mcC5jYyAqLzsgfTsKKwkJQzIyQzUyRjgxM0ZBRjZFRjAwQjdEQzBEIC8qIGRp
eS1mcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIy
QzUyOTgxM0ZBRjZFRjAwQjdEQzBEIC8qIGRpeS1mcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUMyMkM1MkY5MTNGQUY2RUYwMEI3REMwRCAvKiBk
b3VibGUtY29udmVyc2lvbi5jYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEMyMkM1Mjk5MTNGQUY2RUYwMEI3REMwRCAvKiBkb3VibGUtY29udmVyc2lvbi5j
YyAqLzsgfTsKKwkJQzIyQzUyRkExM0ZBRjZFRjAwQjdEQzBEIC8qIGRvdWJsZS1jb252ZXJzaW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTI5
QTEzRkFGNkVGMDBCN0RDMEQgLyogZG91YmxlLWNvbnZlcnNpb24uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDMjJDNTJGQjEzRkFGNkVGMDBCN0RD
MEQgLyogZG91YmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDMjJDNTI5QjEzRkFGNkVGMDBCN0RDMEQgLyogZG91YmxlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIyQzUyRkMxM0ZBRjZFRjAwQjdE
QzBEIC8qIGZhc3QtZHRvYS5jYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEMyMkM1MjlDMTNGQUY2RUYwMEI3REMwRCAvKiBmYXN0LWR0b2EuY2MgKi87IH07
CisJCUMyMkM1MkZEMTNGQUY2RUYwMEI3REMwRCAvKiBmYXN0LWR0b2EuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1MjlEMTNGQUY2RUYwMEI3REMw
RCAvKiBmYXN0LWR0b2EuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQlDMjJDNTJGRTEzRkFGNkVGMDBCN0RDMEQgLyogZml4ZWQtZHRvYS5jYyBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1MjlFMTNGQUY2
RUYwMEI3REMwRCAvKiBmaXhlZC1kdG9hLmNjICovOyB9OworCQlDMjJDNTJGRjEzRkFGNkVGMDBC
N0RDMEQgLyogZml4ZWQtZHRvYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzIyQzUyOUYxM0ZBRjZFRjAwQjdEQzBEIC8qIGZpeGVkLWR0b2EuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDMjJDNTMxMzEz
RkFGNkVGMDBCN0RDMEQgLyogc3RydG9kLmNjIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQzIyQzUyQjkxM0ZBRjZFRjAwQjdEQzBEIC8qIHN0cnRvZC5jYyAq
LzsgfTsKKwkJQzIyQzUzMTQxM0ZBRjZFRjAwQjdEQzBEIC8qIHN0cnRvZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyQzUyQkExM0ZBRjZFRjAwQjdE
QzBEIC8qIHN0cnRvZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCUMyMkM1MzE1MTNGQUY2RUYwMEI3REMwRCAvKiB1dGlscy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyQzUyQkIxM0ZBRjZFRjAwQjdE
QzBEIC8qIHV0aWxzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJQzJFRTU5QTAxM0ZDOTczRjAwOUNFQUZFIC8qIERlY2ltYWxOdW1iZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRUU1OTlFMTNGQzk3
MkEwMDlDRUFGRSAvKiBEZWNpbWFsTnVtYmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzJFRTU5QTExM0ZDOTc2ODAwOUNFQUZFIC8qIERlY2lt
YWxOdW1iZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzJFRTU5OUQxM0ZDOTcyQTAwOUNFQUZFIC8qIERlY2ltYWxOdW1iZXIuY3BwICovOyB9Owog
CQlEN0E0NkE0RjEzMzhGRkVBMDBFRDY5NUMgLyogRHluYW1pY0Fubm90YXRpb25zLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBENzVBRjU5NjEyRjhDQjk1
MDBGQzBBREYgLyogRHluYW1pY0Fubm90YXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJREQzNzdDQkMxMjA3MkMxODAwNkEyNTE3IC8qIEJp
dG1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREQz
NzdDQkIxMjA3MkMxODAwNkEyNTE3IC8qIEJpdG1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCURERjdBQkQ0MTFGNjBFRDIwMDEwOEUzNiAvKiBH
Q0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IERERjdBQkQyMTFGNjBFRDIwMDEwOEUzNiAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2su
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzMz
LDcgKzc1MSw2IEBACiAJCTBCREZGQUQxMEZDNjE2RUMwMEQ2OUVGNCAvKiBPd25GYXN0TWFsbG9j
UHRyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE93bkZhc3RNYWxsb2NQdHIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEJERkZBRDQwRkM2MTcxMDAwRDY5RUY0
IC8qIENyb3NzVGhyZWFkUmVmQ291bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2l6ZUxpbWl0cy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTBGMjk0NzlCMTI2RTY5OEMwMEIzQUJGNSAvKiBEZWNpbWFsTnVtYmVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlY2ltYWxOdW1iZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA4RTE0MDJGREQ2MDA3OEVC
MzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNhbXBsaW5nQ291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA5
MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGOTYzQjM2MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFsdWVQcm9maWxlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NDcsNyArOTY0LDYgQEAKIAkJODYwMTYxRTIwRjNB
ODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTg2MjZCRUNFMTE5MjhFMzkwMDc4MkZBQiAvKiBTdHJpbmdTdGF0
aWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFN0cmluZ1N0YXRp
Y3MuY3BwOyBwYXRoID0gdGV4dC9TdHJpbmdTdGF0aWNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODYyN0U1RUExMUYxMjgxOTAwQTMxM0I1IC8qIFBhZ2VBbGxvY2F0aW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VBbGxvY2F0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg2MkFGNEI1MTIyMzlDN0IwMDI0RTVCOCAvKiBEZWNp
bWFsTnVtYmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlY2ltYWxOdW1i
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYzQjIzREYwRkM2MEU2MjAwNzAz
QUE0IC8qIE1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODY0MzhGQzMxMjY1NTAzRTAwRTBERkNBIC8qIFN0cmluZ0J1aWxkZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU3RyaW5nQnVpbGRlci5jcHA7IHBhdGgg
PSB0ZXh0L1N0cmluZ0J1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4
NjU2NTc0MDExNUJFM0RBMDAyOTFGNDAgLyogQ1N0cmluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBDU3RyaW5nLmNwcDsgcGF0aCA9IHRleHQvQ1N0cmluZy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjYzLDYgKzEyNzksMzIgQEAKIAkJQkNG
RDhDOTAwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKdW1wVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCQ0ZEOEM5MTBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEp1bXBUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDMEEyNzIzRjBFNTA5RjFFMDBFOTZFMTUgLyogTm90Rm91bmQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm90Rm91bmQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQzIyQzUyOTAxM0ZBRjZFRjAwQjdEQzBEIC8qIGJpZ251bS1kdG9hLmNjICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gImJpZ251bS1kdG9hLmNjIjsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyOTExM0ZBRjZFRjAwQjdEQzBEIC8qIGJp
Z251bS1kdG9hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9ICJiaWdudW0tZHRv
YS5oIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyOTIxM0ZBRjZFRjAwQjdE
QzBEIC8qIGJpZ251bS5jYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGJp
Z251bS5jYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyOTMxM0ZBRjZFRjAw
QjdEQzBEIC8qIGJpZ251bS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBiaWdu
dW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyOTQxM0ZBRjZFRjAwQjdE
QzBEIC8qIGNhY2hlZC1wb3dlcnMuY2MgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSAiY2FjaGVkLXBvd2Vycy5jYyI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMy
MkM1Mjk1MTNGQUY2RUYwMEI3REMwRCAvKiBjYWNoZWQtcG93ZXJzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9ICJjYWNoZWQtcG93ZXJzLmgiOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlDMjJDNTI5NjEzRkFGNkVGMDBCN0RDMEQgLyogQ09QWUlORyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBDT1BZSU5HOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJD
NTI5NzEzRkFGNkVGMDBCN0RDMEQgLyogZGl5LWZwLmNjICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gImRpeS1mcC5jYyI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUMyMkM1Mjk4MTNGQUY2RUYwMEI3REMwRCAvKiBkaXktZnAuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gImRpeS1mcC5oIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QzIyQzUyOTkxM0ZBRjZFRjAwQjdEQzBEIC8qIGRvdWJsZS1jb252ZXJzaW9uLmNjICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gImRvdWJsZS1jb252ZXJzaW9uLmNjIjsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyOUExM0ZBRjZFRjAwQjdEQzBEIC8qIGRv
dWJsZS1jb252ZXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9ICJkb3Vi
bGUtY29udmVyc2lvbi5oIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyOUIx
M0ZBRjZFRjAwQjdEQzBEIC8qIGRvdWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBkb3VibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyOUMxM0ZB
RjZFRjAwQjdEQzBEIC8qIGZhc3QtZHRvYS5jYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9ICJmYXN0LWR0b2EuY2MiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
MjJDNTI5RDEzRkFGNkVGMDBCN0RDMEQgLyogZmFzdC1kdG9hLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9ICJmYXN0LWR0b2EuaCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUMyMkM1MjlFMTNGQUY2RUYwMEI3REMwRCAvKiBmaXhlZC1kdG9hLmNjICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gImZpeGVkLWR0b2EuY2MiOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDMjJDNTI5RjEzRkFGNkVGMDBCN0RDMEQgLyogZml4ZWQtZHRvYS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSAiZml4ZWQtZHRvYS5oIjsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyQTAxM0ZBRjZFRjAwQjdEQzBEIC8qIExJQ0VO
U0UgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTElDRU5TRTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQzIyQzUyQTExM0ZBRjZFRjAwQjdEQzBEIC8qIE1ha2VmaWxlICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5tYWtlOyBwYXRoID0gTWFrZWZpbGU7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUMyMkM1MkEyMTNGQUY2RUYwMEI3REMwRCAvKiBSRUFETUUgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gUkVBRE1FOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTJBMzEz
RkFGNkVGMDBCN0RDMEQgLyogU0NvbnNjcmlwdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTQ29u
c2NyaXB0OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTJBNDEzRkFGNkVGMDBC
N0RDMEQgLyogU0NvbnN0cnVjdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTQ29uc3RydWN0OyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTJCOTEzRkFGNkVGMDBCN0RDMEQgLyog
c3RydG9kLmNjICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gc3RydG9kLmNj
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTJCQTEzRkFGNkVGMDBCN0RDMEQg
Lyogc3RydG9kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHN0cnRvZC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTJCQjEzRkFGNkVGMDBCN0RDMEQgLyog
dXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gdXRpbHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJFRTU5OUQxM0ZDOTcyQTAwOUNFQUZFIC8qIERlY2lt
YWxOdW1iZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVjaW1h
bE51bWJlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyRUU1OTlFMTNGQzk3
MkEwMDlDRUFGRSAvKiBEZWNpbWFsTnVtYmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERlY2ltYWxOdW1iZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDIx
MjAyMjgwQUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252ZXJzaW9uLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEYXRlQ29udmVyc2lvbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUQyMTIwMjI5MEFENDMxMEMwMEVENzlCNiAvKiBEYXRlQ29udmVy
c2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0ZUNvbnZlcnNpb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDc1QUY1OTUxMkY4Q0I5NTAwRkMwQURG
IC8qIER5bmFtaWNBbm5vdGF0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEeW5hbWljQW5ub3RhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTY2NCw2ICsxNzA2LDkgQEAKIAkJNjUxNjJFRjEwOEU2QTIxQzAwNzU1NkNEIC8qIHd0
ZiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQzJFRTU5
OUQxM0ZDOTcyQTAwOUNFQUZFIC8qIERlY2ltYWxOdW1iZXIuY3BwICovLAorCQkJCUMyRUU1OTlF
MTNGQzk3MkEwMDlDRUFGRSAvKiBEZWNpbWFsTnVtYmVyLmggKi8sCisJCQkJQzIyQzUyNDgxM0ZB
RjZFRjAwQjdEQzBEIC8qIGR0b2EgKi8sCiAJCQkJMDZEMzU4QTAwREFBRDlDNDAwM0IxNzRFIC8q
IG1hYyAqLywKIAkJCQk4NjU2NTczRTExNUJFMzUyMDAyOTFGNDAgLyogdGV4dCAqLywKIAkJCQlF
MTk1Njc4RDA5RTdDRjEyMDBCODlEMTMgLyogdW5pY29kZSAqLywKQEAgLTE2ODksOCArMTczNCw2
IEBACiAJCQkJMTgwQjlBRjAwRjE2QzU2OTAwOUJEQkM1IC8qIEN1cnJlbnRUaW1lLmggKi8sCiAJ
CQkJNDEzNTlDRjQwRkREODlDQjAwMjA2MTgwIC8qIERhdGVNYXRoLmNwcCAqLywKIAkJCQk0MTM1
OUNGNTBGREQ4OUNCMDAyMDYxODAgLyogRGF0ZU1hdGguaCAqLywKLQkJCQkwRjI5NDc5QjEyNkU2
OThDMDBCM0FCRjUgLyogRGVjaW1hbE51bWJlci5jcHAgKi8sCi0JCQkJODYyQUY0QjUxMjIzOUM3
QjAwMjRFNUI4IC8qIERlY2ltYWxOdW1iZXIuaCAqLywKIAkJCQk1MTM1RkFENTEyRDI2ODU2MDAz
QzA4M0IgLyogRGVjb2Rlci5oICovLAogCQkJCTUxODYxMTFEMENDODI0ODMwMDgxNDEyQiAvKiBE
ZXF1ZS5oICovLAogCQkJCTkzOEM0RjZCMENBMDZCQ0UwMEQ5MzEwQSAvKiBEaXNhbGxvd0NUeXBl
LmggKi8sCkBAIC0yMTk0LDYgKzIyMzcsMzcgQEAKIAkJCXBhdGggPSBieXRlY29kZTsKIAkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCUMyMkM1MjQ4MTNGQUY2RUYwMEI3REMwRCAv
KiBkdG9hICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlD
MjJDNTI5MDEzRkFGNkVGMDBCN0RDMEQgLyogYmlnbnVtLWR0b2EuY2MgKi8sCisJCQkJQzIyQzUy
OTExM0ZBRjZFRjAwQjdEQzBEIC8qIGJpZ251bS1kdG9hLmggKi8sCisJCQkJQzIyQzUyOTIxM0ZB
RjZFRjAwQjdEQzBEIC8qIGJpZ251bS5jYyAqLywKKwkJCQlDMjJDNTI5MzEzRkFGNkVGMDBCN0RD
MEQgLyogYmlnbnVtLmggKi8sCisJCQkJQzIyQzUyOTQxM0ZBRjZFRjAwQjdEQzBEIC8qIGNhY2hl
ZC1wb3dlcnMuY2MgKi8sCisJCQkJQzIyQzUyOTUxM0ZBRjZFRjAwQjdEQzBEIC8qIGNhY2hlZC1w
b3dlcnMuaCAqLywKKwkJCQlDMjJDNTI5NjEzRkFGNkVGMDBCN0RDMEQgLyogQ09QWUlORyAqLywK
KwkJCQlDMjJDNTI5NzEzRkFGNkVGMDBCN0RDMEQgLyogZGl5LWZwLmNjICovLAorCQkJCUMyMkM1
Mjk4MTNGQUY2RUYwMEI3REMwRCAvKiBkaXktZnAuaCAqLywKKwkJCQlDMjJDNTI5OTEzRkFGNkVG
MDBCN0RDMEQgLyogZG91YmxlLWNvbnZlcnNpb24uY2MgKi8sCisJCQkJQzIyQzUyOUExM0ZBRjZF
RjAwQjdEQzBEIC8qIGRvdWJsZS1jb252ZXJzaW9uLmggKi8sCisJCQkJQzIyQzUyOUIxM0ZBRjZF
RjAwQjdEQzBEIC8qIGRvdWJsZS5oICovLAorCQkJCUMyMkM1MjlDMTNGQUY2RUYwMEI3REMwRCAv
KiBmYXN0LWR0b2EuY2MgKi8sCisJCQkJQzIyQzUyOUQxM0ZBRjZFRjAwQjdEQzBEIC8qIGZhc3Qt
ZHRvYS5oICovLAorCQkJCUMyMkM1MjlFMTNGQUY2RUYwMEI3REMwRCAvKiBmaXhlZC1kdG9hLmNj
ICovLAorCQkJCUMyMkM1MjlGMTNGQUY2RUYwMEI3REMwRCAvKiBmaXhlZC1kdG9hLmggKi8sCisJ
CQkJQzIyQzUyQTAxM0ZBRjZFRjAwQjdEQzBEIC8qIExJQ0VOU0UgKi8sCisJCQkJQzIyQzUyQTEx
M0ZBRjZFRjAwQjdEQzBEIC8qIE1ha2VmaWxlICovLAorCQkJCUMyMkM1MkEyMTNGQUY2RUYwMEI3
REMwRCAvKiBSRUFETUUgKi8sCisJCQkJQzIyQzUyQTMxM0ZBRjZFRjAwQjdEQzBEIC8qIFNDb25z
Y3JpcHQgKi8sCisJCQkJQzIyQzUyQTQxM0ZBRjZFRjAwQjdEQzBEIC8qIFNDb25zdHJ1Y3QgKi8s
CisJCQkJQzIyQzUyQjkxM0ZBRjZFRjAwQjdEQzBEIC8qIHN0cnRvZC5jYyAqLywKKwkJCQlDMjJD
NTJCQTEzRkFGNkVGMDBCN0RDMEQgLyogc3RydG9kLmggKi8sCisJCQkJQzIyQzUyQkIxM0ZBRjZF
RjAwQjdEQzBEIC8qIHV0aWxzLmggKi8sCisJCQkpOworCQkJcGF0aCA9IGR0b2E7CisJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlFMTk1Njc4RDA5RTdDRjEyMDBCODlEMTMgLyog
dW5pY29kZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0y
MjQ1LDggKzIzMTksMTAgQEAKIAkJCQk4NkQzQjJDNDEwMTU2QkRFMDAyODY1RTcgLyogQVJNQXNz
ZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFERDE0NTBGRERFQTk4MDAwNkVFQzIgLyog
QVJNdjdBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U2MEUxNkY1Q0QwMEIz
NDQ2MCAvKiBBcnJheUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQlDMjJCMzFCOTE0
MDU3N0Q3MDBEQjQ3NUEgLyogU2FtcGxpbmdDb3VudGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkM4MTUwQTE0MDQzQkY1MDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY5NjNCMzgxM0ZDNkZFOTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJQzJFRTU5QTAxM0ZDOTczRjAwOUNFQUZFIC8qIERlY2ltYWxOdW1i
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U3MEUxNkY1Q0QwMEIzNDQ2MCAvKiBBcnJh
eVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM1MjQwRTE2RkM4QTAwQjM0NDYw
IC8qIEFycmF5UHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRTkwRTE2
RjVDRDAwQjM0NDYwIC8qIEFTQ0lJQ1R5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtMjI5Niw3ICsy
MzcyLDYgQEAKIAkJCQlCQzE4QzNGQTBFMTZGNUNEMDBCMzQ0NjAgLyogRGVidWdnZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMzEzNTY0MEYzMDJGQTMwMDNERkQzQSAvKiBEZWJ1Z2dlckFjdGl2
YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0ZCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBE
ZWJ1Z2dlckNhbGxGcmFtZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJODYyQUY0QjYxMjIzOUM3QjAw
MjRFNUI4IC8qIERlY2ltYWxOdW1iZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMzVGQUYyMTJE
MjZBQ0UwMDNDMDgzQiAvKiBEZWNvZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNGQzBF
MTZGNUNEMDBCMzQ0NjAgLyogRGVxdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUNBNEYxMTMy
RUFBNkQwMDJCMkFENyAvKiBERkdBbGlhc1RyYWNrZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjQ4
MSw3ICsyNTU2LDE2IEBACiAJCQkJOTBEMzQ2OUMwRTI4NTI4MDAwOTQ5MkVFIC8qIFJlZkNvdW50
ZWRMZWFrQ291bnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTgwRTE2RjVDRDAwQjM0
NDYwIC8qIFJlZlB0ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTkwRTE2RjVDRDAwQjM0
NDYwIC8qIFJlZlB0ckhhc2hNYXAuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGNzcwMDkwMTQwMkZE
RTQwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUMyMkM1
MkYyMTNGQUY2RUYwMEI3REMwRCAvKiBiaWdudW0tZHRvYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QzIyQzUyRjQxM0ZBRjZFRjAwQjdEQzBEIC8qIGJpZ251bS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QzIyQzUyRjYxM0ZBRjZFRjAwQjdEQzBEIC8qIGNhY2hlZC1wb3dlcnMuaCBpbiBIZWFkZXJzICov
LAorCQkJCUMyMkM1MkY4MTNGQUY2RUYwMEI3REMwRCAvKiBkaXktZnAuaCBpbiBIZWFkZXJzICov
LAorCQkJCUMyMkM1MkZBMTNGQUY2RUYwMEI3REMwRCAvKiBkb3VibGUtY29udmVyc2lvbi5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJQzIyQzUyRkIxM0ZBRjZFRjAwQjdEQzBEIC8qIGRvdWJsZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJQzIyQzUyRkQxM0ZBRjZFRjAwQjdEQzBEIC8qIGZhc3QtZHRvYS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQzIyQzUyRkYxM0ZBRjZFRjAwQjdEQzBEIC8qIGZpeGVkLWR0
b2EuaCBpbiBIZWFkZXJzICovLAorCQkJCUMyMkM1MzE0MTNGQUY2RUYwMEI3REMwRCAvKiBzdHJ0
b2QuaCBpbiBIZWFkZXJzICovLAorCQkJCUMyMkM1MzE1MTNGQUY2RUYwMEI3REMwRCAvKiB1dGls
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NUEwRTE2RjVDRDAwQjM0NDYwIC8qIFJlZ0V4
cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE3MTJCM0YxMUM3QjIyODAwN0E1MzE1IC8qIFJlZ0V4
cENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0QyMDJDMjBFMTcwNkE3MDAyQzdFODIgLyog
UmVnRXhwQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtMjg1Nyw2ICsyOTQxLDcgQEAK
IAkJCWZpbGVzID0gKAogCQkJCTBGQzgxNTBCMTQwNDNDMEUwMENGQTYwMyAvKiBXcml0ZUJhcnJp
ZXJTdXBwb3J0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzcwMDkyMTQwMkZGM0MwMDc4RUIz
OSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQzJFRTU5QTExM0ZD
OTc2ODAwOUNFQUZFIC8qIERlY2ltYWxOdW1iZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3
RjM5QkQxMDdFQzM3NjAwNDI3QTQ4IC8qIEFyZ0xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ3RjM5QkUxMDdFQzM3NjAwNDI3QTQ4IC8qIEFyZ3VtZW50cy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk4NkQzQjJDMzEwMTU2QkRFMDAyODY1RTcgLyogQVJNQXNzZW1ibGVyLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtMjg5MCw3ICsyOTc1LDYgQEAKIAkJCQkxNDI4MDgyMzEwN0VDMDJDMDAxM0U3
QjIgLyogRGVidWdnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMzMTM1NjUwRjMwMkZBMzAw
M0RGRDNBIC8qIERlYnVnZ2VyQWN0aXZhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDk1
NTlFRTBERENEREY3MDA2NDgwODcgLyogRGVidWdnZXJDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJMEYyOTQ3OUMxMjZFNjk4QzAwQjNBQkY1IC8qIERlY2ltYWxOdW1iZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQzQxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2Rl
UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5REM3MTMyOERGODIwMDJCMkFENyAv
KiBERkdHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkVDOURDOTEzMjhERjgyMDAyQjJB
RDcgLyogREZHSklUQ29kZUdlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMwNTAsNiAr
MzEzNCwxNCBAQAogCQkJCTE0RDJGM0RBMTM5RjRCRTIwMDQ5MTAzMSAvKiBOZXdTcGFjZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDJBMUQ4MzEzQTE5Qzg0MDA5REE1RkUgLyogT2xkU3BhY2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCQTdBOTcxM0FBREZGODAwNUI3QzJDIC8qIEhlYXAu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQzIyQzUyRjExM0ZBRjZFRjAwQjdEQzBEIC8qIGJpZ251
bS1kdG9hLmNjIGluIFNvdXJjZXMgKi8sCisJCQkJQzIyQzUyRjMxM0ZBRjZFRjAwQjdEQzBEIC8q
IGJpZ251bS5jYyBpbiBTb3VyY2VzICovLAorCQkJCUMyMkM1MkY1MTNGQUY2RUYwMEI3REMwRCAv
KiBjYWNoZWQtcG93ZXJzLmNjIGluIFNvdXJjZXMgKi8sCisJCQkJQzIyQzUyRjcxM0ZBRjZFRjAw
QjdEQzBEIC8qIGRpeS1mcC5jYyBpbiBTb3VyY2VzICovLAorCQkJCUMyMkM1MkY5MTNGQUY2RUYw
MEI3REMwRCAvKiBkb3VibGUtY29udmVyc2lvbi5jYyBpbiBTb3VyY2VzICovLAorCQkJCUMyMkM1
MkZDMTNGQUY2RUYwMEI3REMwRCAvKiBmYXN0LWR0b2EuY2MgaW4gU291cmNlcyAqLywKKwkJCQlD
MjJDNTJGRTEzRkFGNkVGMDBCN0RDMEQgLyogZml4ZWQtZHRvYS5jYyBpbiBTb3VyY2VzICovLAor
CQkJCUMyMkM1MzEzMTNGQUY2RUYwMEI3REMwRCAvKiBzdHJ0b2QuY2MgaW4gU291cmNlcyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJl
YWRpbmcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVh
ZGluZy5jcHAKaW5kZXggMjY1Mzk2ZjNiZGRmZWEyMzI2ZmRmOTYyMGFjYWRkN2Y5NDEzZjQwZi4u
NDQ5ZTdkYjc4ODFiNjU5ZjU3NmQzNDRmOTg2YWU1MjE3NTFkMzQxYiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAKQEAg
LTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCiAKICNpbmNs
dWRlICJIZWFwLmgiCi0jaW5jbHVkZSAiZHRvYS5oIgorI2luY2x1ZGUgPHd0Zi9kdG9hL2NhY2hl
ZC1wb3dlcnMuaD4KICNpbmNsdWRlICJJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxP
YmplY3QuaCIKICNpbmNsdWRlICJVU3RyaW5nLmgiCkBAIC00OCw2ICs0OCw3IEBAIHN0YXRpYyBw
dGhyZWFkX29uY2VfdCBpbml0aWFsaXplVGhyZWFkaW5nS2V5T25jZSA9IFBUSFJFQURfT05DRV9J
TklUOwogCiBzdGF0aWMgdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nT25jZSgpCiB7CisgICAgZG91
YmxlX2NvbnZlcnNpb246OmluaXRpYWxpemUoKTsKICAgICBXVEY6OmluaXRpYWxpemVUaHJlYWRp
bmcoKTsKICNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCiAgICAgV3JpdGVCYXJy
aWVyQ291bnRlcnM6OmluaXRpYWxpemUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwCmluZGV4IDY3OWY3NDc5ZGVjN2VlYjU0M2VlOWU2
MjMzM2YwNmY4M2Q0OWVmNGQuLmQ3NDQxNjI2ZTExMWEyYmNjMWQzYTE2MDZjODE1NGFiYTBhMGNj
MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclByb3Rv
dHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90
eXBlLmNwcApAQCAtMzAsOSArMzAsMTEgQEAKICNpbmNsdWRlICJVaW50MTZXaXRoRnJhY3Rpb24u
aCIKICNpbmNsdWRlICJkdG9hLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNs
dWRlIDx3dGYvRGVjaW1hbE51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9kdG9hL2RvdWJsZS1jb252ZXJz
aW9uLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY6OmRvdWJsZV9jb252ZXJzaW9uOwogCiBuYW1l
c3BhY2UgSlNDIHsKIApAQCAtMzM5LDEyICszNDEsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb0V4cG9uZW50aWFsKEV4ZWNTdGF0ZSogZXhlYykKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBVU3RyaW5nOjpudW1i
ZXIoeCkpKTsKIAogICAgIC8vIFJvdW5kIGlmIHRoZSBhcmd1bWVudCBpcyBub3QgdW5kZWZpbmVk
LCBhbHdheXMgZm9ybWF0IGFzIGV4cG9uZW50aWFsLgotICAgIE51bWJlclRvU3RyaW5nQnVmZmVy
IGJ1ZmZlcjsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBpc1VuZGVmaW5lZAotICAgICAgICA/IERl
Y2ltYWxOdW1iZXIoeCkudG9TdHJpbmdFeHBvbmVudGlhbChidWZmZXIsIFdURjo6TnVtYmVyVG9T
dHJpbmdCdWZmZXJMZW5ndGgpCi0gICAgICAgIDogRGVjaW1hbE51bWJlcih4LCBSb3VuZGluZ1Np
Z25pZmljYW50RmlndXJlcywgZGVjaW1hbFBsYWNlc0luRXhwb25lbnQgKyAxKS50b1N0cmluZ0V4
cG9uZW50aWFsKGJ1ZmZlciwgV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCk7Ci0KLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmcoYnVmZmVyLCBs
ZW5ndGgpKSk7CisgICAgY2hhciBidWZmZXJbV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0
aF07CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyKGJ1ZmZlciwgV1RGOjpOdW1iZXJUb1N0cmlu
Z0J1ZmZlckxlbmd0aCk7CisgICAgY29uc3QgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXImIGNvbnZl
cnRlciA9IERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpFY21hU2NyaXB0Q29udmVydGVyKCk7Cisg
ICAgYnVpbGRlci5SZXNldCgpOworICAgIGlzVW5kZWZpbmVkCisgICAgICAgID8gY29udmVydGVy
LlRvRXhwb25lbnRpYWwoeCwgLTEsICZidWlsZGVyKQorICAgICAgICA6IGNvbnZlcnRlci5Ub0V4
cG9uZW50aWFsKHgsIGRlY2ltYWxQbGFjZXNJbkV4cG9uZW50LCAmYnVpbGRlcik7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBVU3RyaW5nKGJ1aWxkZXIuRmluYWxp
emUoKSkpKTsKIH0KIAogLy8gdG9GaXhlZCBjb252ZXJ0cyBhIG51bWJlciB0byBhIHN0cmluZywg
YWx3YXlzIGZvcm1hdHRpbmcgYXMgYW4gYSBkZWNpbWFsIGZyYWN0aW9uLgpAQCAtMzc2LDEwICsz
ODAsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb0Zp
eGVkKEV4ZWNTdGF0ZSogZXhlYykKICAgICAvLyBoYW5kbGVkIGJ5IG51bWJlclRvU3RyaW5nLgog
ICAgIEFTU0VSVChpc2Zpbml0ZSh4KSk7CiAKLSAgICAvLyBDb252ZXJ0IHRvIGRlY2ltYWwgd2l0
aCByb3VuZGluZywgYW5kIGZvcm1hdCBhcyBkZWNpbWFsLgotICAgIE51bWJlclRvU3RyaW5nQnVm
ZmVyIGJ1ZmZlcjsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBEZWNpbWFsTnVtYmVyKHgsIFJvdW5k
aW5nRGVjaW1hbFBsYWNlcywgZGVjaW1hbFBsYWNlcykudG9TdHJpbmdEZWNpbWFsKGJ1ZmZlciwg
V1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1N0cmluZyhleGVjLCBVU3RyaW5nKGJ1ZmZlciwgbGVuZ3RoKSkpOworICAgIGNoYXIg
YnVmZmVyW1dURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGhdOworICAgIFN0cmluZ0J1aWxk
ZXIgYnVpbGRlcihidWZmZXIsIFdURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgpOworICAg
IGNvbnN0IERvdWJsZVRvU3RyaW5nQ29udmVydGVyJiBjb252ZXJ0ZXIgPSBEb3VibGVUb1N0cmlu
Z0NvbnZlcnRlcjo6RWNtYVNjcmlwdENvbnZlcnRlcigpOworICAgIGJ1aWxkZXIuUmVzZXQoKTsK
KyAgICBjb252ZXJ0ZXIuVG9GaXhlZCh4LCBkZWNpbWFsUGxhY2VzLCAmYnVpbGRlcik7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBVU3RyaW5nKGJ1aWxkZXIuRmlu
YWxpemUoKSkpKTsKIH0KIAogLy8gdG9QcmVjaXNpb24gY29udmVydHMgYSBudW1iZXIgdG8gYSBz
dHJpbmcsIHRha2VpbmcgYW4gYXJndW1lbnQgc3BlY2lmeWluZyBhCkBAIC00MTIsMTcgKzQxOCwx
MiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1RvUHJlY2lz
aW9uKEV4ZWNTdGF0ZSogZXhlYykKICAgICBpZiAoIWlzZmluaXRlKHgpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmc6Om51bWJlcih4KSkpOwog
Ci0gICAgLy8gQ29udmVydCB0byBkZWNpbWFsIHdpdGggcm91bmRpbmcuCi0gICAgRGVjaW1hbE51
bWJlciBudW1iZXIoeCwgUm91bmRpbmdTaWduaWZpY2FudEZpZ3VyZXMsIHNpZ25pZmljYW50Rmln
dXJlcyk7Ci0gICAgLy8gSWYgbnVtYmVyIGlzIGluIHRoZSByYW5nZSAxZS02IDw9IHggPCBwb3co
MTAsIHNpZ25pZmljYW50RmlndXJlcykgdGhlbiBmb3JtYXQKLSAgICAvLyBhcyBkZWNpbWFsLiBP
dGhlcndpc2UsIGZvcm1hdCB0aGUgbnVtYmVyIGFzIGFuIGV4cG9uZW50aWFsLiBEZWNpbWFsIGZv
cm1hdAotICAgIC8vIGRlbWFuZHMgYSBtaW5pbXVtIG9mIChleHBvbmVudCArIDEpIGRpZ2l0cyB0
byByZXByZXNlbnQgYSBudW1iZXIsIGZvciBleGFtcGxlCi0gICAgLy8gMTIzNCAoMS4yMzRlKzMp
IHJlcXVpcmVzIDQgZGlnaXRzLiAoU2VlIEVDTUEtMjYyIDE1LjcuNC43LjEwLmMpCi0gICAgTnVt
YmVyVG9TdHJpbmdCdWZmZXIgYnVmZmVyOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IG51bWJlci5l
eHBvbmVudCgpID49IC02ICYmIG51bWJlci5leHBvbmVudCgpIDwgc2lnbmlmaWNhbnRGaWd1cmVz
Ci0gICAgICAgID8gbnVtYmVyLnRvU3RyaW5nRGVjaW1hbChidWZmZXIsIFdURjo6TnVtYmVyVG9T
dHJpbmdCdWZmZXJMZW5ndGgpCi0gICAgICAgIDogbnVtYmVyLnRvU3RyaW5nRXhwb25lbnRpYWwo
YnVmZmVyLCBXVEY6Ok51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmcoYnVmZmVyLCBsZW5ndGgpKSk7Cisg
ICAgY2hhciBidWZmZXJbV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aF07CisgICAgU3Ry
aW5nQnVpbGRlciBidWlsZGVyKGJ1ZmZlciwgV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0
aCk7CisgICAgY29uc3QgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXImIGNvbnZlcnRlciA9IERvdWJs
ZVRvU3RyaW5nQ29udmVydGVyOjpFY21hU2NyaXB0Q29udmVydGVyKCk7CisgICAgYnVpbGRlci5S
ZXNldCgpOworICAgIGNvbnZlcnRlci5Ub1ByZWNpc2lvbih4LCBzaWduaWZpY2FudEZpZ3VyZXMs
ICZidWlsZGVyKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIFVT
dHJpbmcoYnVpbGRlci5GaW5hbGl6ZSgpKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG51bWJlclByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5jcHAKaW5kZXggYzE0ZjMxOTlmNDA3ZjQ3Zjc5
NWY1MWJiOTIwZTZjMDlmM2MzYTZmZC4uYjc4ZTZmMWFjYzc4MTBjYjI2ZTg5ODQ4YWE1NDdkOGZk
YTJiYmY2NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmlu
Zy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5jcHAKQEAg
LTM1LDEwICszNSwxMCBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHd0Zi9BU0NJ
SUNUeXBlLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvRGVj
aW1hbE51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3Rm
L1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYv
ZHRvYS5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VURjguaD4KIAogI2lmIEhBVkUoU1RSSU5H
U19IKQpAQCAtMTk2LDggKzE5Niw3IEBAIFVTdHJpbmcgVVN0cmluZzo6bnVtYmVyKGxvbmcgbCkK
IFVTdHJpbmcgVVN0cmluZzo6bnVtYmVyKGRvdWJsZSBkKQogewogICAgIE51bWJlclRvU3RyaW5n
QnVmZmVyIGJ1ZmZlcjsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBudW1iZXJUb1N0cmluZyhkLCBi
dWZmZXIpOwotICAgIHJldHVybiBVU3RyaW5nKGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICByZXR1cm4g
VVN0cmluZyhudW1iZXJUb1N0cmluZyhkLCBidWZmZXIpKTsKIH0KIAogVVN0cmluZyBVU3RyaW5n
OjpzdWJzdHJpbmdTaGFyaW5nSW1wbCh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50
eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IGM2ZGRh
MTM5YzRlYzM0NGM5N2MzYjNlNzNmZjA0MWVmODkzMjJkMmQuLmMwMDQ0NDAwYmYwYjc0MjIzZjM0
OGMwMjEyNzMyNDkzZDNmZjBkYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxp
c3RzLnR4dApAQCAtOTksNiArOTksMjggQEAgU0VUKFdURl9IRUFERVJTCiAgICAgV1RGVGhyZWFk
RGF0YS5oCiAgICAgZHRvYS5oCiAKKyAgICBkdG9hL2JpZ251bS1kdG9hLmgKKyAgICBkdG9hL2Jp
Z251bS5oCisgICAgZHRvYS9jYWNoZWQtcG93ZXJzLmgKKyAgICBkdG9hL2RpeS1mcC5oCisgICAg
ZHRvYS9kb3VibGUtY29udmVyc2lvbi5oCisgICAgZHRvYS9kb3VibGUuaAorICAgIGR0b2EvZmFz
dC1kdG9hLmgKKyAgICBkdG9hL2ZpeGVkLWR0b2EuaAorICAgIGR0b2Evc3RydG9kLmgKKyAgICBk
dG9hL3V0aWxzLmgKKworICAgIGR0b2EvYmlnbnVtLWR0b2EuaAorICAgIGR0b2EvYmlnbnVtLmgK
KyAgICBkdG9hL2NhY2hlZC1wb3dlcnMuaAorICAgIGR0b2EvZGl5LWZwLmgKKyAgICBkdG9hL2Rv
dWJsZS1jb252ZXJzaW9uLmgKKyAgICBkdG9hL2RvdWJsZS5oCisgICAgZHRvYS9mYXN0LWR0b2Eu
aAorICAgIGR0b2EvZml4ZWQtZHRvYS5oCisgICAgZHRvYS9zdHJ0b2QuaAorICAgIGR0b2EvdXRp
bHMuaAorCiAgICAgdGV4dC9BdG9taWNTdHJpbmcuaAogICAgIHRleHQvQXRvbWljU3RyaW5nSW1w
bC5oCiAgICAgdGV4dC9DU3RyaW5nLmgKQEAgLTE0MCw2ICsxNjIsMjQgQEAgU0VUKFdURl9TT1VS
Q0VTCiAgICAgV1RGVGhyZWFkRGF0YS5jcHAKICAgICBkdG9hLmNwcAogCisgICAgZHRvYS9iaWdu
dW0tZHRvYS5jYworICAgIGR0b2EvYmlnbnVtLmNjCisgICAgZHRvYS9jYWNoZWQtcG93ZXJzLmNj
CisgICAgZHRvYS9kaXktZnAuY2MKKyAgICBkdG9hL2RvdWJsZS1jb252ZXJzaW9uLmNjCisgICAg
ZHRvYS9mYXN0LWR0b2EuY2MKKyAgICBkdG9hL2ZpeGVkLWR0b2EuY2MKKyAgICBkdG9hL3N0cnRv
ZC5jYworCisgICAgZHRvYS9iaWdudW0tZHRvYS5jYworICAgIGR0b2EvYmlnbnVtLmNjCisgICAg
ZHRvYS9jYWNoZWQtcG93ZXJzLmNjCisgICAgZHRvYS9kaXktZnAuY2MKKyAgICBkdG9hL2RvdWJs
ZS1jb252ZXJzaW9uLmNjCisgICAgZHRvYS9mYXN0LWR0b2EuY2MKKyAgICBkdG9hL2ZpeGVkLWR0
b2EuY2MKKyAgICBkdG9hL3N0cnRvZC5jYworCiAgICAgdGV4dC9BdG9taWNTdHJpbmcuY3BwCiAg
ICAgdGV4dC9DU3RyaW5nLmNwcAogICAgIHRleHQvU3RyaW5nQnVpbGRlci5jcHAKQEAgLTE1NCw2
ICsxOTQsNyBAQCBTRVQoV1RGX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtKQVZBU0NSSVBU
Q09SRV9ESVJ9IgogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vd3RmIgogICAgICIke0pBVkFT
Q1JJUFRDT1JFX0RJUn0vd3RmL3VuaWNvZGUiCisgICAgIiR7SkFWQVNDUklQVENPUkVfRElSfS93
dGYvZHRvYSIKICAgICAiJHtKYXZhU2NyaXB0Q29yZV9JTkNMVURFX0RJUkVDVE9SSUVTfSIKICkK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS5jcHAKaW5kZXggMTQ2NmRmNzM2ODA4OTVmYjdkNjcy
ZjY3OGE3NDI5NTNkOWM2ZDVhZC4uOTdkNTdmMzFjOWUzYzM0MjE3ZDk0ZjA0ZDgyNDE2NGVjYzky
Mzk5NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EuY3BwCkBAIC03NSwxMiArNzUsMTIgQEAK
ICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvQWx3YXlzSW5saW5lLmg+CiAjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvRGVjaW1hbE51bWJlci5oPgog
I2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
ICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9kdG9hL2RvdWJsZS1jb252
ZXJzaW9uLmg+CiAKICNpZiBDT01QSUxFUihNU1ZDKQogI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6
IDQyNDQpCkBAIC0xODAyLDMzICsxODAyLDEzIEBAIHZvaWQgZHRvYVJvdW5kRFAoRHRvYUJ1ZmZl
ciByZXN1bHQsIGRvdWJsZSBkZCwgaW50IG5kaWdpdHMsIGJvb2wmIHNpZ24sIGludCYgZXhwCiAg
ICAgZHRvYTxmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlPihyZXN1bHQsIGRkLCBuZGlnaXRzLCBz
aWduLCBleHBvbmVudCwgcHJlY2lzaW9uKTsKIH0KIAotc3RhdGljIEFMV0FZU19JTkxJTkUgdm9p
ZCBjb3B5QXNjaWlUb1VURjE2KFVDaGFyKiBuZXh0LCBjb25zdCBjaGFyKiBzcmMsIHVuc2lnbmVk
IHNpemUpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAg
ICAgKm5leHQrKyA9ICpzcmMrKzsKLX0KIAotdW5zaWduZWQgbnVtYmVyVG9TdHJpbmcoZG91Ymxl
IGQsIE51bWJlclRvU3RyaW5nQnVmZmVyIGJ1ZmZlcikKK2NvbnN0IGNoYXIgKm51bWJlclRvU3Ry
aW5nKGRvdWJsZSBkLCBOdW1iZXJUb1N0cmluZ0J1ZmZlciBidWZmZXIpCiB7Ci0gICAgLy8gSGFu
ZGxlIE5hTiBhbmQgSW5maW5pdHkuCi0gICAgaWYgKCFpc2Zpbml0ZShkKSkgewotICAgICAgICBp
ZiAoaXNuYW4oZCkpIHsKLSAgICAgICAgICAgIGNvcHlBc2NpaVRvVVRGMTYoYnVmZmVyLCAiTmFO
IiwgMyk7Ci0gICAgICAgICAgICByZXR1cm4gMzsKLSAgICAgICAgfQotICAgICAgICBpZiAoZCA+
IDApIHsKLSAgICAgICAgICAgIGNvcHlBc2NpaVRvVVRGMTYoYnVmZmVyLCAiSW5maW5pdHkiLCA4
KTsKLSAgICAgICAgICAgIHJldHVybiA4OwotICAgICAgICB9Ci0gICAgICAgIGNvcHlBc2NpaVRv
VVRGMTYoYnVmZmVyLCAiLUluZmluaXR5IiwgOSk7Ci0gICAgICAgIHJldHVybiA5OwotICAgIH0K
LQotICAgIC8vIENvbnZlcnQgdG8gZGVjaW1hbCB3aXRoIHJvdW5kaW5nLgotICAgIERlY2ltYWxO
dW1iZXIgbnVtYmVyKGQpOwotICAgIHJldHVybiBudW1iZXIuZXhwb25lbnQoKSA+PSAtNiAmJiBu
dW1iZXIuZXhwb25lbnQoKSA8IDIxCi0gICAgICAgID8gbnVtYmVyLnRvU3RyaW5nRGVjaW1hbChi
dWZmZXIsIE51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoKQotICAgICAgICA6IG51bWJlci50b1N0
cmluZ0V4cG9uZW50aWFsKGJ1ZmZlciwgTnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgpOworICAg
IGRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdCdWlsZGVyIGJ1aWxkZXIoYnVmZmVyLCBOdW1iZXJU
b1N0cmluZ0J1ZmZlckxlbmd0aCk7CisgICAgY29uc3QgZG91YmxlX2NvbnZlcnNpb246OkRvdWJs
ZVRvU3RyaW5nQ29udmVydGVyJiBjb252ZXJ0ZXIgPSBkb3VibGVfY29udmVyc2lvbjo6RG91Ymxl
VG9TdHJpbmdDb252ZXJ0ZXI6OkVjbWFTY3JpcHRDb252ZXJ0ZXIoKTsKKyAgICBjb252ZXJ0ZXIu
VG9TaG9ydGVzdChkLCAmYnVpbGRlcik7CisgICAgcmV0dXJuIGJ1aWxkZXIuRmluYWxpemUoKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL2R0b2EuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS5oCmluZGV4IDM5
MjRhMWNjNDA1ZGIyOTNiMDFmNmQ0YmRhZTY1NzU5NTI1ODE3MmMuLjcxOTkxMjExMTFkOTNlZGU5
MDFiY2E3OGVjMTJmYmMyMzNhYWEyM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvZHRvYS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS5oCkBAIC0y
MSw2ICsyMSw3IEBACiAjaWZuZGVmIFdURl9kdG9hX2gKICNkZWZpbmUgV1RGX2R0b2FfaAogCisj
aW5jbHVkZSA8d3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uaD4KICNpbmNsdWRlIDx3dGYvdW5p
Y29kZS9Vbmljb2RlLmg+CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMjgsMjQgKzI5LDI2IEBAIGNs
YXNzIE11dGV4OwogCiBleHRlcm4gV1RGOjpNdXRleCogc19kdG9hUDVNdXRleDsKIAotLy8gczAw
OiBpbnB1dCBzdHJpbmcuIE11c3Qgbm90IGJlIDAgYW5kIG11c3QgYmUgdGVybWluYXRlZCBieSAw
LgotLy8gc2U6ICpzZSB3aWxsIGhhdmUgdGhlIGxhc3QgY29uc3VtZWQgY2hhcmFjdGVyIHBvc2l0
aW9uICsgMS4KLWRvdWJsZSBzdHJ0b2QoY29uc3QgY2hhciogczAwLCBjaGFyKiogc2UpOwotCiB0
eXBlZGVmIGNoYXIgRHRvYUJ1ZmZlcls4MF07CiAKIHZvaWQgZHRvYShEdG9hQnVmZmVyIHJlc3Vs
dCwgZG91YmxlIGRkLCBib29sJiBzaWduLCBpbnQmIGV4cG9uZW50LCB1bnNpZ25lZCYgcHJlY2lz
aW9uKTsKIHZvaWQgZHRvYVJvdW5kU0YoRHRvYUJ1ZmZlciByZXN1bHQsIGRvdWJsZSBkZCwgaW50
IG5kaWdpdHMsIGJvb2wmIHNpZ24sIGludCYgZXhwb25lbnQsIHVuc2lnbmVkJiBwcmVjaXNpb24p
Owogdm9pZCBkdG9hUm91bmREUChEdG9hQnVmZmVyIHJlc3VsdCwgZG91YmxlIGRkLCBpbnQgbmRp
Z2l0cywgYm9vbCYgc2lnbiwgaW50JiBleHBvbmVudCwgdW5zaWduZWQmIHByZWNpc2lvbik7CiAK
Ky8vIHMwMDogaW5wdXQgc3RyaW5nLiBNdXN0IG5vdCBiZSAwIGFuZCBtdXN0IGJlIHRlcm1pbmF0
ZWQgYnkgMC4KKy8vIHNlOiAqc2Ugd2lsbCBoYXZlIHRoZSBsYXN0IGNvbnN1bWVkIGNoYXJhY3Rl
ciBwb3NpdGlvbiArIDEuCitkb3VibGUgc3RydG9kKGNvbnN0IGNoYXIqIHMwMCwgY2hhcioqIHNl
KTsKKwogLy8gU2l6ZSA9IDgwIGZvciBzaXplb2YoRHRvYUJ1ZmZlcikgKyBzb21lIHNpZ24gYml0
cywgZGVjaW1hbCBwb2ludCwgJ2UnLCBleHBvbmVudCBkaWdpdHMuCiBjb25zdCB1bnNpZ25lZCBO
dW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCA9IDk2OwotdHlwZWRlZiBVQ2hhciBOdW1iZXJUb1N0
cmluZ0J1ZmZlcltOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aF07Ci11bnNpZ25lZCBudW1iZXJU
b1N0cmluZyhkb3VibGUsIE51bWJlclRvU3RyaW5nQnVmZmVyKTsKK3R5cGVkZWYgY2hhciBOdW1i
ZXJUb1N0cmluZ0J1ZmZlcltOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aF07Cit0eXBlZGVmIFVD
aGFyIE51bWJlclRvVVN0cmluZ0J1ZmZlcltOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aF07Citj
b25zdCBjaGFyICpudW1iZXJUb1N0cmluZyhkb3VibGUsIE51bWJlclRvU3RyaW5nQnVmZmVyKTsK
IAogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXI7
Cit1c2luZyBXVEY6Ok51bWJlclRvVVN0cmluZ0J1ZmZlcjsKIHVzaW5nIFdURjo6bnVtYmVyVG9T
dHJpbmc7CiAKICNlbmRpZiAvLyBXVEZfZHRvYV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL2R0b2EvQ09QWUlORyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRv
YS9DT1BZSU5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkzMzcxOGE5ZWY5ZGFlNGNiNGFmYTU2ZTQ5MDIxMTc2MGQ4
YTk0OWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2Ev
Q09QWUlORwpAQCAtMCwwICsxLDI2IEBACitDb3B5cmlnaHQgMjAwNi0yMDExLCB0aGUgVjggcHJv
amVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCittZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgICAgICBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICAg
ICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkCisgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAgICBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
KyAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKK09XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCitEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
K1RIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9MSUNFTlNFIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9kdG9hL0xJQ0VOU0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTMzNzE4YTllZjlkYWU0Y2I0YWZhNTZlNDkw
MjExNzYwZDhhOTQ5ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvZHRvYS9MSUNFTlNFCkBAIC0wLDAgKzEsMjYgQEAKK0NvcHlyaWdodCAyMDA2LTIwMTEsIHRo
ZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKK21ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAgICAg
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nCisgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQKKyAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgICAg
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CitBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCitTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKK0RBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCitPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL1JFQURNRSBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvZHRvYS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjE4NmI0MjBmNDJiYzE0YzdkNTc2
NWVhNDNmNmIyOGQzYzI5YjkyMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvZHRvYS9SRUFETUUKQEAgLTAsMCArMSwxMSBAQAoraHR0cDovL2NvZGUuZ29vZ2xl
LmNvbS9wL2RvdWJsZS1jb252ZXJzaW9uCisKK1RoaXMgcHJvamVjdCAoZG91YmxlLWNvbnZlcnNp
b24pIHByb3ZpZGVzIGJpbmFyeS1kZWNpbWFsIGFuZCBkZWNpbWFsLWJpbmFyeQorcm91dGluZXMg
Zm9yIElFRUUgZG91Ymxlcy4KKworVGhlIGxpYnJhcnkgY29uc2lzdHMgb2YgZWZmaWNpZW50IGNv
bnZlcnNpb24gcm91dGluZXMgdGhhdCBoYXZlIGJlZW4gZXh0cmFjdGVkCitmcm9tIHRoZSBWOCBK
YXZhU2NyaXB0IGVuZ2luZS4gVGhlIGNvZGUgaGFzIGJlZW4gcmVmYWN0b3JlZCBhbmQgaW1wcm92
ZWQgc28gdGhhdAoraXQgY2FuIGJlIHVzZWQgbW9yZSBlYXNpbHkgaW4gb3RoZXIgcHJvamVjdHMu
CisKK1RoZXJlIGlzIGV4dGVuc2l2ZSBkb2N1bWVudGF0aW9uIGluIHNyYy9kb3VibGUtY29udmVy
c2lvbi5oLiBPdGhlciBleGFtcGxlcyBjYW4KK2JlIGZvdW5kIGluIHRlc3QvY2N0ZXN0L3Rlc3Qt
Y29udmVyc2lvbnMuY2MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0
b2EvYmlnbnVtLWR0b2EuY2MgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvYmlnbnVt
LWR0b2EuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZGU5ODcxZTNhY2E0ZGI0ZTlkZDI2M2FmNmMxMWE0MWQ3OTAx
OTU1NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9i
aWdudW0tZHRvYS5jYwpAQCAtMCwwICsxLDY1NyBAQAorLy8gQ29weXJpZ2h0IDIwMTAgdGhlIFY4
IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8v
CisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSAiYmlnbnVtLWR0b2EuaCIKKworI2lu
Y2x1ZGUgImJpZ251bS5oIgorI2luY2x1ZGUgImRvdWJsZS5oIgorCituYW1lc3BhY2UgV1RGIHsK
KworbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKKyAgICAKKyAgICBzdGF0aWMgaW50IE5v
cm1hbGl6ZWRFeHBvbmVudCh1aW50NjRfdCBzaWduaWZpY2FuZCwgaW50IGV4cG9uZW50KSB7Cisg
ICAgICAgIEFTU0VSVChzaWduaWZpY2FuZCAhPSAwKTsKKyAgICAgICAgd2hpbGUgKChzaWduaWZp
Y2FuZCAmIERvdWJsZTo6a0hpZGRlbkJpdCkgPT0gMCkgeworICAgICAgICAgICAgc2lnbmlmaWNh
bmQgPSBzaWduaWZpY2FuZCA8PCAxOworICAgICAgICAgICAgZXhwb25lbnQgPSBleHBvbmVudCAt
IDE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGV4cG9uZW50OworICAgIH0KKyAgICAKKyAg
ICAKKyAgICAvLyBGb3J3YXJkIGRlY2xhcmF0aW9uczoKKyAgICAvLyBSZXR1cm5zIGFuIGVzdGlt
YXRpb24gb2YgayBzdWNoIHRoYXQgMTBeKGstMSkgPD0gdiA8IDEwXmsuCisgICAgc3RhdGljIGlu
dCBFc3RpbWF0ZVBvd2VyKGludCBleHBvbmVudCk7CisgICAgLy8gQ29tcHV0ZXMgdiAvIDEwXmVz
dGltYXRlZF9wb3dlciBleGFjdGx5LCBhcyBhIHJhdGlvIG9mIHR3byBiaWdudW1zLCBudW1lcmF0
b3IKKyAgICAvLyBhbmQgZGVub21pbmF0b3IuCisgICAgc3RhdGljIHZvaWQgSW5pdGlhbFNjYWxl
ZFN0YXJ0VmFsdWVzKGRvdWJsZSB2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgZXN0aW1hdGVkX3Bvd2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIG5lZWRfYm91bmRhcnlfZGVsdGFzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIG51bWVyYXRvciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBkZW5vbWluYXRvciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBkZWx0YV9taW51cywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBkZWx0YV9w
bHVzKTsKKyAgICAvLyBNdWx0aXBsaWVzIG51bWVyYXRvci9kZW5vbWluYXRvciBzbyB0aGF0IGl0
cyB2YWx1ZXMgbGllcyBpbiB0aGUgcmFuZ2UgMS0xMC4KKyAgICAvLyBSZXR1cm5zIGRlY2ltYWxf
cG9pbnQgcy50LgorICAgIC8vICB2ID0gbnVtZXJhdG9yJy9kZW5vbWluYXRvcicgKiAxMF4oZGVj
aW1hbF9wb2ludC0xKQorICAgIC8vICAgICB3aGVyZSBudW1lcmF0b3InIGFuZCBkZW5vbWluYXRv
cicgYXJlIHRoZSB2YWx1ZXMgb2YgbnVtZXJhdG9yIGFuZAorICAgIC8vICAgICBkZW5vbWluYXRv
ciBhZnRlciB0aGUgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLgorICAgIHN0YXRpYyB2b2lkIEZpeHVw
TXVsdGlwbHkxMChpbnQgZXN0aW1hdGVkX3Bvd2VyLCBib29sIGlzX2V2ZW4sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCogZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQmlnbnVtKiBudW1lcmF0b3IsIEJpZ251bSogZGVub21pbmF0b3Is
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogZGVsdGFfbWludXMsIEJp
Z251bSogZGVsdGFfcGx1cyk7CisgICAgLy8gR2VuZXJhdGVzIGRpZ2l0cyBmcm9tIHRoZSBsZWZ0
IHRvIHRoZSByaWdodCBhbmQgc3RvcHMgd2hlbiB0aGUgZ2VuZXJhdGVkCisgICAgLy8gZGlnaXRz
IHlpZWxkIHRoZSBzaG9ydGVzdCBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIHYuCisgICAgc3Rh
dGljIHZvaWQgR2VuZXJhdGVTaG9ydGVzdERpZ2l0cyhCaWdudW0qIG51bWVyYXRvciwgQmlnbnVt
KiBkZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJp
Z251bSogZGVsdGFfbWludXMsIEJpZ251bSogZGVsdGFfcGx1cywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfZXZlbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXIsIGludCogbGVuZ3RoKTsKKyAg
ICAvLyBHZW5lcmF0ZXMgJ3JlcXVlc3RlZF9kaWdpdHMnIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50
LgorICAgIHN0YXRpYyB2b2lkIEJpZ251bVRvRml4ZWQoaW50IHJlcXVlc3RlZF9kaWdpdHMsIGlu
dCogZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSog
bnVtZXJhdG9yLCBCaWdudW0qIGRlbm9taW5hdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVmVjdG9yPGNoYXI+KGJ1ZmZlciksIGludCogbGVuZ3RoKTsKKyAgICAvLyBHZW5lcmF0
ZXMgJ2NvdW50JyBkaWdpdHMgb2YgbnVtZXJhdG9yL2Rlbm9taW5hdG9yLgorICAgIC8vIE9uY2Ug
J2NvdW50JyBkaWdpdHMgaGF2ZSBiZWVuIHByb2R1Y2VkIHJvdW5kcyB0aGUgcmVzdWx0IGRlcGVu
ZGluZyBvbiB0aGUKKyAgICAvLyByZW1haW5kZXIgKHJlbWFpbmRlcnMgb2YgZXhhY3RseSAuNSBy
b3VuZCB1cHdhcmRzKS4gTWlnaHQgdXBkYXRlIHRoZQorICAgIC8vIGRlY2ltYWxfcG9pbnQgd2hl
biByb3VuZGluZyB1cCAoZm9yIGV4YW1wbGUgZm9yIDAuOTk5OSkuCisgICAgc3RhdGljIHZvaWQg
R2VuZXJhdGVDb3VudGVkRGlnaXRzKGludCBjb3VudCwgaW50KiBkZWNpbWFsX3BvaW50LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIG51bWVyYXRvciwgQmln
bnVtKiBkZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VmVjdG9yPGNoYXI+KGJ1ZmZlciksIGludCogbGVuZ3RoKTsKKyAgICAKKyAgICAKKyAgICB2b2lk
IEJpZ251bUR0b2EoZG91YmxlIHYsIEJpZ251bUR0b2FNb2RlIG1vZGUsIGludCByZXF1ZXN0ZWRf
ZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLCBpbnQqIGxl
bmd0aCwgaW50KiBkZWNpbWFsX3BvaW50KSB7CisgICAgICAgIEFTU0VSVCh2ID4gMCk7CisgICAg
ICAgIEFTU0VSVCghRG91YmxlKHYpLklzU3BlY2lhbCgpKTsKKyAgICAgICAgdWludDY0X3Qgc2ln
bmlmaWNhbmQgPSBEb3VibGUodikuU2lnbmlmaWNhbmQoKTsKKyAgICAgICAgYm9vbCBpc19ldmVu
ID0gKHNpZ25pZmljYW5kICYgMSkgPT0gMDsKKyAgICAgICAgaW50IGV4cG9uZW50ID0gRG91Ymxl
KHYpLkV4cG9uZW50KCk7CisgICAgICAgIGludCBub3JtYWxpemVkX2V4cG9uZW50ID0gTm9ybWFs
aXplZEV4cG9uZW50KHNpZ25pZmljYW5kLCBleHBvbmVudCk7CisgICAgICAgIC8vIGVzdGltYXRl
ZF9wb3dlciBtaWdodCBiZSB0b28gbG93IGJ5IDEuCisgICAgICAgIGludCBlc3RpbWF0ZWRfcG93
ZXIgPSBFc3RpbWF0ZVBvd2VyKG5vcm1hbGl6ZWRfZXhwb25lbnQpOworICAgICAgICAKKyAgICAg
ICAgLy8gU2hvcnRjdXQgZm9yIEZpeGVkLgorICAgICAgICAvLyBUaGUgcmVxdWVzdGVkIGRpZ2l0
cyBjb3JyZXNwb25kIHRvIHRoZSBkaWdpdHMgYWZ0ZXIgdGhlIHBvaW50LiBJZiB0aGUKKyAgICAg
ICAgLy8gbnVtYmVyIGlzIG11Y2ggdG9vIHNtYWxsLCB0aGVuIHRoZXJlIGlzIG5vIG5lZWQgaW4g
dHJ5aW5nIHRvIGdldCBhbnkKKyAgICAgICAgLy8gZGlnaXRzLgorICAgICAgICBpZiAobW9kZSA9
PSBCSUdOVU1fRFRPQV9GSVhFRCAmJiAtZXN0aW1hdGVkX3Bvd2VyIC0gMSA+IHJlcXVlc3RlZF9k
aWdpdHMpIHsKKyAgICAgICAgICAgIGJ1ZmZlclswXSA9ICdcMCc7CisgICAgICAgICAgICAqbGVu
Z3RoID0gMDsKKyAgICAgICAgICAgIC8vIFNldCBkZWNpbWFsLXBvaW50IHRvIC1yZXF1ZXN0ZWRf
ZGlnaXRzLiBUaGlzIGlzIHdoYXQgR2F5IGRvZXMuCisgICAgICAgICAgICAvLyBOb3RlIHRoYXQg
aXQgc2hvdWxkIG5vdCBoYXZlIGFueSBlZmZlY3QgYW55d2F5cyBzaW5jZSB0aGUgc3RyaW5nIGlz
CisgICAgICAgICAgICAvLyBlbXB0eS4KKyAgICAgICAgICAgICpkZWNpbWFsX3BvaW50ID0gLXJl
cXVlc3RlZF9kaWdpdHM7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIEJpZ251bSBudW1lcmF0b3I7CisgICAgICAgIEJpZ251bSBkZW5vbWluYXRvcjsK
KyAgICAgICAgQmlnbnVtIGRlbHRhX21pbnVzOworICAgICAgICBCaWdudW0gZGVsdGFfcGx1czsK
KyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBiaWdudW0gY2FuIGdyb3cgbGFyZ2UgZW5vdWdoLiBU
aGUgc21hbGxlc3QgZG91YmxlIGVxdWFscworICAgICAgICAvLyA0ZS0zMjQuIEluIHRoaXMgY2Fz
ZSB0aGUgZGVub21pbmF0b3IgbmVlZHMgZmV3ZXIgdGhhbiAzMjQqNCBiaW5hcnkgZGlnaXRzLgor
ICAgICAgICAvLyBUaGUgbWF4aW11bSBkb3VibGUgaXMgMS43OTc2OTMxMzQ4NjIzMTU3ZTMwOCB3
aGljaCBuZWVkcyBmZXdlciB0aGFuCisgICAgICAgIC8vIDMwOCo0IGJpbmFyeSBkaWdpdHMuCisg
ICAgICAgIEFTU0VSVChCaWdudW06OmtNYXhTaWduaWZpY2FudEJpdHMgPj0gMzI0KjQpOworICAg
ICAgICBib29sIG5lZWRfYm91bmRhcnlfZGVsdGFzID0gKG1vZGUgPT0gQklHTlVNX0RUT0FfU0hP
UlRFU1QpOworICAgICAgICBJbml0aWFsU2NhbGVkU3RhcnRWYWx1ZXModiwgZXN0aW1hdGVkX3Bv
d2VyLCBuZWVkX2JvdW5kYXJ5X2RlbHRhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZudW1lcmF0b3IsICZkZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZkZWx0YV9taW51cywgJmRlbHRhX3BsdXMpOworICAgICAgICAvLyBXZSBub3cgaGF2
ZSB2ID0gKG51bWVyYXRvciAvIGRlbm9taW5hdG9yKSAqIDEwXmVzdGltYXRlZF9wb3dlci4KKyAg
ICAgICAgRml4dXBNdWx0aXBseTEwKGVzdGltYXRlZF9wb3dlciwgaXNfZXZlbiwgZGVjaW1hbF9w
b2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICZudW1lcmF0b3IsICZkZW5vbWluYXRvciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICZkZWx0YV9taW51cywgJmRlbHRhX3BsdXMpOworICAg
ICAgICAvLyBXZSBub3cgaGF2ZSB2ID0gKG51bWVyYXRvciAvIGRlbm9taW5hdG9yKSAqIDEwXihk
ZWNpbWFsX3BvaW50LTEpLCBhbmQKKyAgICAgICAgLy8gIDEgPD0gKG51bWVyYXRvciArIGRlbHRh
X3BsdXMpIC8gZGVub21pbmF0b3IgPCAxMAorICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAg
ICAgICAgIGNhc2UgQklHTlVNX0RUT0FfU0hPUlRFU1Q6CisgICAgICAgICAgICAgICAgR2VuZXJh
dGVTaG9ydGVzdERpZ2l0cygmbnVtZXJhdG9yLCAmZGVub21pbmF0b3IsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmZGVsdGFfbWludXMsICZkZWx0YV9wbHVzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfZXZlbiwgYnVmZmVyLCBsZW5n
dGgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCSUdOVU1fRFRP
QV9GSVhFRDoKKyAgICAgICAgICAgICAgICBCaWdudW1Ub0ZpeGVkKHJlcXVlc3RlZF9kaWdpdHMs
IGRlY2ltYWxfcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbnVtZXJhdG9y
LCAmZGVub21pbmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGxl
bmd0aCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJJR05VTV9E
VE9BX1BSRUNJU0lPTjoKKyAgICAgICAgICAgICAgICBHZW5lcmF0ZUNvdW50ZWREaWdpdHMocmVx
dWVzdGVkX2RpZ2l0cywgZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJm51bWVyYXRvciwgJmRlbm9taW5hdG9yLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgIH0KKyAgICAgICAgYnVmZmVyWypsZW5ndGhdID0gJ1wwJzsKKyAgICB9CisgICAg
CisgICAgCisgICAgLy8gVGhlIHByb2NlZHVyZSBzdGFydHMgZ2VuZXJhdGluZyBkaWdpdHMgZnJv
bSB0aGUgbGVmdCB0byB0aGUgcmlnaHQgYW5kIHN0b3BzCisgICAgLy8gd2hlbiB0aGUgZ2VuZXJh
dGVkIGRpZ2l0cyB5aWVsZCB0aGUgc2hvcnRlc3QgZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiB2
LiBBCisgICAgLy8gZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiB2IGlzIGEgbnVtYmVyIGx5aW5n
IGNsb3NlciB0byB2IHRoYW4gdG8gYW55IG90aGVyCisgICAgLy8gZG91YmxlLCBzbyBpdCBjb252
ZXJ0cyB0byB2IHdoZW4gcmVhZC4KKyAgICAvLworICAgIC8vIFRoaXMgaXMgdHJ1ZSBpZiBkLCB0
aGUgZGVjaW1hbCByZXByZXNlbnRhdGlvbiwgaXMgYmV0d2VlbiBtLSBhbmQgbSssIHRoZQorICAg
IC8vIHVwcGVyIGFuZCBsb3dlciBib3VuZGFyaWVzLiBkIG11c3QgYmUgc3RyaWN0bHkgYmV0d2Vl
biB0aGVtIGlmICFpc19ldmVuLgorICAgIC8vICAgICAgICAgICBtLSA6PSAobnVtZXJhdG9yIC0g
ZGVsdGFfbWludXMpIC8gZGVub21pbmF0b3IKKyAgICAvLyAgICAgICAgICAgbSsgOj0gKG51bWVy
YXRvciArIGRlbHRhX3BsdXMpIC8gZGVub21pbmF0b3IKKyAgICAvLworICAgIC8vIFByZWNvbmRp
dGlvbjogMCA8PSAobnVtZXJhdG9yK2RlbHRhX3BsdXMpIC8gZGVub21pbmF0b3IgPCAxMC4KKyAg
ICAvLyAgIElmIDEgPD0gKG51bWVyYXRvcitkZWx0YV9wbHVzKSAvIGRlbm9taW5hdG9yIDwgMTAg
dGhlbiBubyBsZWFkaW5nIDAgZGlnaXQKKyAgICAvLyAgIHdpbGwgYmUgcHJvZHVjZWQuIFRoaXMg
c2hvdWxkIGJlIHRoZSBzdGFuZGFyZCBwcmVjb25kaXRpb24uCisgICAgc3RhdGljIHZvaWQgR2Vu
ZXJhdGVTaG9ydGVzdERpZ2l0cyhCaWdudW0qIG51bWVyYXRvciwgQmlnbnVtKiBkZW5vbWluYXRv
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogZGVsdGFf
bWludXMsIEJpZ251bSogZGVsdGFfcGx1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgaXNfZXZlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXIsIGludCogbGVuZ3RoKSB7CisgICAgICAgIC8vIFNt
YWxsIG9wdGltaXphdGlvbjogaWYgZGVsdGFfbWludXMgYW5kIGRlbHRhX3BsdXMgYXJlIHRoZSBz
YW1lIGp1c3QgcmV1c2UKKyAgICAgICAgLy8gb25lIG9mIHRoZSB0d28gYmlnbnVtcy4KKyAgICAg
ICAgaWYgKEJpZ251bTo6RXF1YWwoKmRlbHRhX21pbnVzLCAqZGVsdGFfcGx1cykpIHsKKyAgICAg
ICAgICAgIGRlbHRhX3BsdXMgPSBkZWx0YV9taW51czsKKyAgICAgICAgfQorICAgICAgICAqbGVu
Z3RoID0gMDsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIHVpbnQxNl90IGRp
Z2l0OworICAgICAgICAgICAgZGlnaXQgPSBudW1lcmF0b3ItPkRpdmlkZU1vZHVsb0ludEJpZ251
bSgqZGVub21pbmF0b3IpOworICAgICAgICAgICAgQVNTRVJUKGRpZ2l0IDw9IDkpOyAgLy8gZGln
aXQgaXMgYSB1aW50MTZfdCBhbmQgdGhlcmVmb3JlIGFsd2F5cyBwb3NpdGl2ZS4KKyAgICAgICAg
ICAgIC8vIGRpZ2l0ID0gbnVtZXJhdG9yIC8gZGVub21pbmF0b3IgKGludGVnZXIgZGl2aXNpb24p
LgorICAgICAgICAgICAgLy8gbnVtZXJhdG9yID0gbnVtZXJhdG9yICUgZGVub21pbmF0b3IuCisg
ICAgICAgICAgICBidWZmZXJbKCpsZW5ndGgpKytdID0gZGlnaXQgKyAnMCc7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIC8vIENhbiB3ZSBzdG9wIGFscmVhZHk/CisgICAgICAgICAgICAvLyBJ
ZiB0aGUgcmVtYWluZGVyIG9mIHRoZSBkaXZpc2lvbiBpcyBsZXNzIHRoYW4gdGhlIGRpc3RhbmNl
IHRvIHRoZSBsb3dlcgorICAgICAgICAgICAgLy8gYm91bmRhcnkgd2UgY2FuIHN0b3AuIEluIHRo
aXMgY2FzZSB3ZSBzaW1wbHkgcm91bmQgZG93biAoZGlzY2FyZGluZyB0aGUKKyAgICAgICAgICAg
IC8vIHJlbWFpbmRlcikuCisgICAgICAgICAgICAvLyBTaW1pbGFybHkgd2UgdGVzdCBpZiB3ZSBj
YW4gcm91bmQgdXAgKHVzaW5nIHRoZSB1cHBlciBib3VuZGFyeSkuCisgICAgICAgICAgICBib29s
IGluX2RlbHRhX3Jvb21fbWludXM7CisgICAgICAgICAgICBib29sIGluX2RlbHRhX3Jvb21fcGx1
czsKKyAgICAgICAgICAgIGlmIChpc19ldmVuKSB7CisgICAgICAgICAgICAgICAgaW5fZGVsdGFf
cm9vbV9taW51cyA9IEJpZ251bTo6TGVzc0VxdWFsKCpudW1lcmF0b3IsICpkZWx0YV9taW51cyk7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGluX2RlbHRhX3Jvb21fbWlu
dXMgPSBCaWdudW06Okxlc3MoKm51bWVyYXRvciwgKmRlbHRhX21pbnVzKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChpc19ldmVuKSB7CisgICAgICAgICAgICAgICAgaW5fZGVsdGFf
cm9vbV9wbHVzID0KKyAgICAgICAgICAgICAgICBCaWdudW06OlBsdXNDb21wYXJlKCpudW1lcmF0
b3IsICpkZWx0YV9wbHVzLCAqZGVub21pbmF0b3IpID49IDA7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGluX2RlbHRhX3Jvb21fcGx1cyA9CisgICAgICAgICAgICAgICAg
QmlnbnVtOjpQbHVzQ29tcGFyZSgqbnVtZXJhdG9yLCAqZGVsdGFfcGx1cywgKmRlbm9taW5hdG9y
KSA+IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWluX2RlbHRhX3Jvb21fbWlu
dXMgJiYgIWluX2RlbHRhX3Jvb21fcGx1cykgeworICAgICAgICAgICAgICAgIC8vIFByZXBhcmUg
Zm9yIG5leHQgaXRlcmF0aW9uLgorICAgICAgICAgICAgICAgIG51bWVyYXRvci0+VGltZXMxMCgp
OworICAgICAgICAgICAgICAgIGRlbHRhX21pbnVzLT5UaW1lczEwKCk7CisgICAgICAgICAgICAg
ICAgLy8gV2Ugb3B0aW1pemVkIGRlbHRhX3BsdXMgdG8gYmUgZXF1YWwgdG8gZGVsdGFfbWludXMg
KGlmIHRoZXkgc2hhcmUgdGhlCisgICAgICAgICAgICAgICAgLy8gc2FtZSB2YWx1ZSkuIFNvIGRv
bid0IG11bHRpcGx5IGRlbHRhX3BsdXMgaWYgdGhleSBwb2ludCB0byB0aGUgc2FtZQorICAgICAg
ICAgICAgICAgIC8vIG9iamVjdC4KKyAgICAgICAgICAgICAgICBpZiAoZGVsdGFfbWludXMgIT0g
ZGVsdGFfcGx1cykgeworICAgICAgICAgICAgICAgICAgICBkZWx0YV9wbHVzLT5UaW1lczEwKCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChpbl9kZWx0YV9yb29t
X21pbnVzICYmIGluX2RlbHRhX3Jvb21fcGx1cykgeworICAgICAgICAgICAgICAgIC8vIExldCdz
IHNlZSBpZiAyKm51bWVyYXRvciA8IGRlbm9taW5hdG9yLgorICAgICAgICAgICAgICAgIC8vIElm
IHllcywgdGhlbiB0aGUgbmV4dCBkaWdpdCB3b3VsZCBiZSA8IDUgYW5kIHdlIGNhbiByb3VuZCBk
b3duLgorICAgICAgICAgICAgICAgIGludCBjb21wYXJlID0gQmlnbnVtOjpQbHVzQ29tcGFyZSgq
bnVtZXJhdG9yLCAqbnVtZXJhdG9yLCAqZGVub21pbmF0b3IpOworICAgICAgICAgICAgICAgIGlm
IChjb21wYXJlIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAvLyBSZW1haW5pbmcgZGlnaXRz
IGFyZSBsZXNzIHRoYW4gLjUuIC0+IFJvdW5kIGRvd24gKD09IGRvIG5vdGhpbmcpLgorICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoY29tcGFyZSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gUmVtYWluaW5nIGRpZ2l0cyBhcmUgbW9yZSB0aGFuIC41IG9mIGRlbm9taW5hdG9yLiAtPiBS
b3VuZCB1cC4KKyAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRoZSBsYXN0IGRpZ2l0
IGNvdWxkIG5vdCBiZSBhICc5JyBhcyBvdGhlcndpc2UgdGhlIHdob2xlCisgICAgICAgICAgICAg
ICAgICAgIC8vIGxvb3Agd291bGQgaGF2ZSBzdG9wcGVkIGVhcmxpZXIuCisgICAgICAgICAgICAg
ICAgICAgIC8vIFdlIHN0aWxsIGhhdmUgYW4gYXNzZXJ0IGhlcmUgaW4gY2FzZSB0aGUgcHJlY29u
ZGl0aW9ucyB3ZXJlIG5vdAorICAgICAgICAgICAgICAgICAgICAvLyBzYXRpc2ZpZWQuCisgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChidWZmZXJbKCpsZW5ndGgpIC0gMV0gIT0gJzknKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnVmZmVyWygqbGVuZ3RoKSAtIDFdKys7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSGFsZndheSBjYXNlLgorICAgICAg
ICAgICAgICAgICAgICAvLyBUT0RPKGZsb2l0c2NoKTogbmVlZCBhIHdheSB0byBzb2x2ZSBoYWxm
LXdheSBjYXNlcy4KKyAgICAgICAgICAgICAgICAgICAgLy8gICBGb3Igbm93IGxldCdzIHJvdW5k
IHRvd2FyZHMgZXZlbiAoc2luY2UgdGhpcyBpcyB3aGF0IEdheSBzZWVtcyB0bworICAgICAgICAg
ICAgICAgICAgICAvLyAgIGRvKS4KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgIGlmICgoYnVmZmVyWygqbGVuZ3RoKSAtIDFdIC0gJzAnKSAlIDIgPT0gMCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gUm91bmQgZG93biA9PiBEbyBub3RoaW5nLgorICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJ1
ZmZlclsoKmxlbmd0aCkgLSAxXSAhPSAnOScpOworICAgICAgICAgICAgICAgICAgICAgICAgYnVm
ZmVyWygqbGVuZ3RoKSAtIDFdKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfSBlbHNlIGlmIChp
bl9kZWx0YV9yb29tX21pbnVzKSB7CisgICAgICAgICAgICAgICAgLy8gUm91bmQgZG93biAoPT0g
ZG8gbm90aGluZykuCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfSBlbHNl
IHsgIC8vIGluX2RlbHRhX3Jvb21fcGx1cworICAgICAgICAgICAgICAgIC8vIFJvdW5kIHVwLgor
ICAgICAgICAgICAgICAgIC8vIE5vdGUgYWdhaW4gdGhhdCB0aGUgbGFzdCBkaWdpdCBjb3VsZCBu
b3QgYmUgJzknIHNpbmNlIHRoaXMgd291bGQgaGF2ZQorICAgICAgICAgICAgICAgIC8vIHN0b3Bw
ZWQgdGhlIGxvb3AgZWFybGllci4KKyAgICAgICAgICAgICAgICAvLyBXZSBzdGlsbCBoYXZlIGFu
IEFTU0VSVCBoZXJlLCBpbiBjYXNlIHRoZSBwcmVjb25kaXRpb25zIHdlcmUgbm90CisgICAgICAg
ICAgICAgICAgLy8gc2F0aXNmaWVkLgorICAgICAgICAgICAgICAgIEFTU0VSVChidWZmZXJbKCps
ZW5ndGgpIC0xXSAhPSAnOScpOworICAgICAgICAgICAgICAgIGJ1ZmZlclsoKmxlbmd0aCkgLSAx
XSsrOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBMZXQgdiA9IG51bWVyYXRvciAvIGRlbm9taW5hdG9y
IDwgMTAuCisgICAgLy8gVGhlbiB3ZSBnZW5lcmF0ZSAnY291bnQnIGRpZ2l0cyBvZiBkID0geC54
eHh4eC4uLiAod2l0aG91dCB0aGUgZGVjaW1hbCBwb2ludCkKKyAgICAvLyBmcm9tIGxlZnQgdG8g
cmlnaHQuIE9uY2UgJ2NvdW50JyBkaWdpdHMgaGF2ZSBiZWVuIHByb2R1Y2VkIHdlIGRlY2lkZSB3
ZXRoZXIKKyAgICAvLyB0byByb3VuZCB1cCBvciBkb3duLiBSZW1haW5kZXJzIG9mIGV4YWN0bHkg
LjUgcm91bmQgdXB3YXJkcy4gTnVtYmVycyBzdWNoCisgICAgLy8gYXMgOS45OTk5OTkgcHJvcGFn
YXRlIGEgY2FycnkgYWxsIHRoZSB3YXksIGFuZCBjaGFuZ2UgdGhlCisgICAgLy8gZXhwb25lbnQg
KGRlY2ltYWxfcG9pbnQpLCB3aGVuIHJvdW5kaW5nIHVwd2FyZHMuCisgICAgc3RhdGljIHZvaWQg
R2VuZXJhdGVDb3VudGVkRGlnaXRzKGludCBjb3VudCwgaW50KiBkZWNpbWFsX3BvaW50LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIG51bWVyYXRvciwgQmln
bnVtKiBkZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VmVjdG9yPGNoYXI+KGJ1ZmZlciksIGludCogbGVuZ3RoKSB7CisgICAgICAgIEFTU0VSVChjb3Vu
dCA+PSAwKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAtIDE7ICsraSkgewor
ICAgICAgICAgICAgdWludDE2X3QgZGlnaXQ7CisgICAgICAgICAgICBkaWdpdCA9IG51bWVyYXRv
ci0+RGl2aWRlTW9kdWxvSW50QmlnbnVtKCpkZW5vbWluYXRvcik7CisgICAgICAgICAgICBBU1NF
UlQoZGlnaXQgPD0gOSk7ICAvLyBkaWdpdCBpcyBhIHVpbnQxNl90IGFuZCB0aGVyZWZvcmUgYWx3
YXlzIHBvc2l0aXZlLgorICAgICAgICAgICAgLy8gZGlnaXQgPSBudW1lcmF0b3IgLyBkZW5vbWlu
YXRvciAoaW50ZWdlciBkaXZpc2lvbikuCisgICAgICAgICAgICAvLyBudW1lcmF0b3IgPSBudW1l
cmF0b3IgJSBkZW5vbWluYXRvci4KKyAgICAgICAgICAgIGJ1ZmZlcltpXSA9IGRpZ2l0ICsgJzAn
OworICAgICAgICAgICAgLy8gUHJlcGFyZSBmb3IgbmV4dCBpdGVyYXRpb24uCisgICAgICAgICAg
ICBudW1lcmF0b3ItPlRpbWVzMTAoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBHZW5lcmF0ZSB0
aGUgbGFzdCBkaWdpdC4KKyAgICAgICAgdWludDE2X3QgZGlnaXQ7CisgICAgICAgIGRpZ2l0ID0g
bnVtZXJhdG9yLT5EaXZpZGVNb2R1bG9JbnRCaWdudW0oKmRlbm9taW5hdG9yKTsKKyAgICAgICAg
aWYgKEJpZ251bTo6UGx1c0NvbXBhcmUoKm51bWVyYXRvciwgKm51bWVyYXRvciwgKmRlbm9taW5h
dG9yKSA+PSAwKSB7CisgICAgICAgICAgICBkaWdpdCsrOworICAgICAgICB9CisgICAgICAgIGJ1
ZmZlcltjb3VudCAtIDFdID0gZGlnaXQgKyAnMCc7CisgICAgICAgIC8vIENvcnJlY3QgYmFkIGRp
Z2l0cyAoaW4gY2FzZSB3ZSBoYWQgYSBzZXF1ZW5jZSBvZiAnOSdzKS4gUHJvcGFnYXRlIHRoZQor
ICAgICAgICAvLyBjYXJyeSB1bnRpbCB3ZSBoYXQgYSBub24tJzknIG9yIHRpbCB3ZSByZWFjaCB0
aGUgZmlyc3QgZGlnaXQuCisgICAgICAgIGZvciAoaW50IGkgPSBjb3VudCAtIDE7IGkgPiAwOyAt
LWkpIHsKKyAgICAgICAgICAgIGlmIChidWZmZXJbaV0gIT0gJzAnICsgMTApIGJyZWFrOworICAg
ICAgICAgICAgYnVmZmVyW2ldID0gJzAnOworICAgICAgICAgICAgYnVmZmVyW2kgLSAxXSsrOwor
ICAgICAgICB9CisgICAgICAgIGlmIChidWZmZXJbMF0gPT0gJzAnICsgMTApIHsKKyAgICAgICAg
ICAgIC8vIFByb3BhZ2F0ZSBhIGNhcnJ5IHBhc3QgdGhlIHRvcCBwbGFjZS4KKyAgICAgICAgICAg
IGJ1ZmZlclswXSA9ICcxJzsKKyAgICAgICAgICAgICgqZGVjaW1hbF9wb2ludCkrKzsKKyAgICAg
ICAgfQorICAgICAgICAqbGVuZ3RoID0gY291bnQ7CisgICAgfQorICAgIAorICAgIAorICAgIC8v
IEdlbmVyYXRlcyAncmVxdWVzdGVkX2RpZ2l0cycgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQuIEl0
IG1pZ2h0IG9taXQKKyAgICAvLyB0cmFpbGluZyAnMCdzLiBJZiB0aGUgaW5wdXQgbnVtYmVyIGlz
IHRvbyBzbWFsbCB0aGVuIG5vIGRpZ2l0cyBhdCBhbGwgYXJlCisgICAgLy8gZ2VuZXJhdGVkIChl
eC46IDIgZml4ZWQgZGlnaXRzIGZvciAwLjAwMDAxKS4KKyAgICAvLworICAgIC8vIElucHV0IHZl
cmlmaWVzOiAgMSA8PSAobnVtZXJhdG9yICsgZGVsdGEpIC8gZGVub21pbmF0b3IgPCAxMC4KKyAg
ICBzdGF0aWMgdm9pZCBCaWdudW1Ub0ZpeGVkKGludCByZXF1ZXN0ZWRfZGlnaXRzLCBpbnQqIGRl
Y2ltYWxfcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIG51bWVy
YXRvciwgQmlnbnVtKiBkZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFZlY3RvcjxjaGFyPihidWZmZXIpLCBpbnQqIGxlbmd0aCkgeworICAgICAgICAvLyBOb3RlIHRo
YXQgd2UgaGF2ZSB0byBsb29rIGF0IG1vcmUgdGhhbiBqdXN0IHRoZSByZXF1ZXN0ZWRfZGlnaXRz
LCBzaW5jZQorICAgICAgICAvLyBhIG51bWJlciBjb3VsZCBiZSByb3VuZGVkIHVwLiBFeGFtcGxl
OiB2PTAuNSB3aXRoIHJlcXVlc3RlZF9kaWdpdHM9MC4KKyAgICAgICAgLy8gRXZlbiB0aG91Z2gg
dGhlIHBvd2VyIG9mIHYgZXF1YWxzIDAgd2UgY2FuJ3QganVzdCBzdG9wIGhlcmUuCisgICAgICAg
IGlmICgtKCpkZWNpbWFsX3BvaW50KSA+IHJlcXVlc3RlZF9kaWdpdHMpIHsKKyAgICAgICAgICAg
IC8vIFRoZSBudW1iZXIgaXMgZGVmaW5pdGl2ZWx5IHRvbyBzbWFsbC4KKyAgICAgICAgICAgIC8v
IEV4OiAwLjAwMSB3aXRoIHJlcXVlc3RlZF9kaWdpdHMgPT0gMS4KKyAgICAgICAgICAgIC8vIFNl
dCBkZWNpbWFsLXBvaW50IHRvIC1yZXF1ZXN0ZWRfZGlnaXRzLiBUaGlzIGlzIHdoYXQgR2F5IGRv
ZXMuCisgICAgICAgICAgICAvLyBOb3RlIHRoYXQgaXQgc2hvdWxkIG5vdCBoYXZlIGFueSBlZmZl
Y3QgYW55d2F5cyBzaW5jZSB0aGUgc3RyaW5nIGlzCisgICAgICAgICAgICAvLyBlbXB0eS4KKyAg
ICAgICAgICAgICpkZWNpbWFsX3BvaW50ID0gLXJlcXVlc3RlZF9kaWdpdHM7CisgICAgICAgICAg
ICAqbGVuZ3RoID0gMDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIGlmICgt
KCpkZWNpbWFsX3BvaW50KSA9PSByZXF1ZXN0ZWRfZGlnaXRzKSB7CisgICAgICAgICAgICAvLyBX
ZSBvbmx5IG5lZWQgdG8gdmVyaWZ5IGlmIHRoZSBudW1iZXIgcm91bmRzIGRvd24gb3IgdXAuCisg
ICAgICAgICAgICAvLyBFeDogMC4wNCBhbmQgMC4wNiB3aXRoIHJlcXVlc3RlZF9kaWdpdHMgPT0g
MS4KKyAgICAgICAgICAgIEFTU0VSVCgqZGVjaW1hbF9wb2ludCA9PSAtcmVxdWVzdGVkX2RpZ2l0
cyk7CisgICAgICAgICAgICAvLyBJbml0aWFsbHkgdGhlIGZyYWN0aW9uIGxpZXMgaW4gcmFuZ2Ug
KDEsIDEwXS4gTXVsdGlwbHkgdGhlIGRlbm9taW5hdG9yCisgICAgICAgICAgICAvLyBieSAxMCBz
byB0aGF0IHdlIGNhbiBjb21wYXJlIG1vcmUgZWFzaWx5LgorICAgICAgICAgICAgZGVub21pbmF0
b3ItPlRpbWVzMTAoKTsKKyAgICAgICAgICAgIGlmIChCaWdudW06OlBsdXNDb21wYXJlKCpudW1l
cmF0b3IsICpudW1lcmF0b3IsICpkZW5vbWluYXRvcikgPj0gMCkgeworICAgICAgICAgICAgICAg
IC8vIElmIHRoZSBmcmFjdGlvbiBpcyA+PSAwLjUgdGhlbiB3ZSBoYXZlIHRvIGluY2x1ZGUgdGhl
IHJvdW5kZWQKKyAgICAgICAgICAgICAgICAvLyBkaWdpdC4KKyAgICAgICAgICAgICAgICBidWZm
ZXJbMF0gPSAnMSc7CisgICAgICAgICAgICAgICAgKmxlbmd0aCA9IDE7CisgICAgICAgICAgICAg
ICAgKCpkZWNpbWFsX3BvaW50KSsrOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAvLyBOb3RlIHRoYXQgd2UgY2F1Z2h0IG1vc3Qgb2Ygc2ltaWxhciBjYXNlcyBlYXJsaWVy
LgorICAgICAgICAgICAgICAgICpsZW5ndGggPSAwOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gVGhlIHJlcXVlc3Rl
ZCBkaWdpdHMgY29ycmVzcG9uZCB0byB0aGUgZGlnaXRzIGFmdGVyIHRoZSBwb2ludC4KKyAgICAg
ICAgICAgIC8vIFRoZSB2YXJpYWJsZSAnbmVlZGVkX2RpZ2l0cycgaW5jbHVkZXMgdGhlIGRpZ2l0
cyBiZWZvcmUgdGhlIHBvaW50LgorICAgICAgICAgICAgaW50IG5lZWRlZF9kaWdpdHMgPSAoKmRl
Y2ltYWxfcG9pbnQpICsgcmVxdWVzdGVkX2RpZ2l0czsKKyAgICAgICAgICAgIEdlbmVyYXRlQ291
bnRlZERpZ2l0cyhuZWVkZWRfZGlnaXRzLCBkZWNpbWFsX3BvaW50LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG51bWVyYXRvciwgZGVub21pbmF0b3IsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBsZW5ndGgpOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIAorICAgIC8vIFJldHVybnMgYW4gZXN0aW1hdGlvbiBvZiBrIHN1Y2ggdGhhdCAx
MF4oay0xKSA8PSB2IDwgMTBeayB3aGVyZQorICAgIC8vIHYgPSBmICogMl5leHBvbmVudCBhbmQg
Ml41MiA8PSBmIDwgMl41My4KKyAgICAvLyB2IGlzIGhlbmNlIGEgbm9ybWFsaXplZCBkb3VibGUg
d2l0aCB0aGUgZ2l2ZW4gZXhwb25lbnQuIFRoZSBvdXRwdXQgaXMgYW4KKyAgICAvLyBhcHByb3hp
bWF0aW9uIGZvciB0aGUgZXhwb25lbnQgb2YgdGhlIGRlY2ltYWwgYXBwcm9pbWF0aW9uIC5kaWdp
dHMgKiAxMF5rLgorICAgIC8vCisgICAgLy8gVGhlIHJlc3VsdCBtaWdodCB1bmRlcnNob290IGJ5
IDEgaW4gd2hpY2ggY2FzZSAxMF5rIDw9IHYgPCAxMF5rKzEuCisgICAgLy8gTm90ZTogdGhpcyBw
cm9wZXJ0eSBob2xkcyBmb3IgdidzIHVwcGVyIGJvdW5kYXJ5IG0rIHRvby4KKyAgICAvLyAgICAx
MF5rIDw9IG0rIDwgMTBeaysxLgorICAgIC8vICAgKHNlZSBleHBsYW5hdGlvbiBiZWxvdykuCisg
ICAgLy8KKyAgICAvLyBFeGFtcGxlczoKKyAgICAvLyAgRXN0aW1hdGVQb3dlcigwKSAgID0+IDE2
CisgICAgLy8gIEVzdGltYXRlUG93ZXIoLTUyKSA9PiAwCisgICAgLy8KKyAgICAvLyBOb3RlOiBl
ID49IDAgPT4gRXN0aW1hdGVkUG93ZXIoZSkgPiAwLiBObyBzaW1pbGFyIGNsYWltIGNhbiBiZSBt
YWRlIGZvciBlPDAuCisgICAgc3RhdGljIGludCBFc3RpbWF0ZVBvd2VyKGludCBleHBvbmVudCkg
eworICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGVzdGltYXRlcyBsb2cxMCBvZiB2IHdoZXJlIHYg
PSBmKjJeZSAod2l0aCBlID09IGV4cG9uZW50KS4KKyAgICAgICAgLy8gTm90ZSB0aGF0IDEwXmZs
b29yKGxvZzEwKHYpKSA8PSB2LCBidXQgdiA8PSAxMF5jZWlsKGxvZzEwKHYpKS4KKyAgICAgICAg
Ly8gTm90ZSB0aGF0IGYgaXMgYm91bmRlZCBieSBpdHMgY29udGFpbmVyIHNpemUuIExldCBwID0g
NTMgKHRoZSBkb3VibGUncworICAgICAgICAvLyBzaWduaWZpY2FuZCBzaXplKS4gVGhlbiAyXihw
LTEpIDw9IGYgPCAyXnAuCisgICAgICAgIC8vCisgICAgICAgIC8vIEdpdmVuIHRoYXQgbG9nMTAo
dikgPT0gbG9nMih2KS9sb2cyKDEwKSBhbmQgZSsobGVuKGYpLTEpIGlzIHF1aXRlIGNsb3NlCisg
ICAgICAgIC8vIHRvIGxvZzIodikgdGhlIGZ1bmN0aW9uIGlzIHNpbXBsaWZpZWQgdG8gKGUrKGxl
bihmKS0xKS9sb2cyKDEwKSkuCisgICAgICAgIC8vIFRoZSBjb21wdXRlZCBudW1iZXIgdW5kZXJz
aG9vdHMgYnkgbGVzcyB0aGFuIDAuNjMxICh3aGVuIHdlIGNvbXB1dGUgbG9nMworICAgICAgICAv
LyBhbmQgbm90IGxvZzEwKS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gT3B0aW1pemF0aW9uOiBz
aW5jZSB3ZSBvbmx5IG5lZWQgYW4gYXBwcm94aW1hdGVkIHJlc3VsdCB0aGlzIGNvbXB1dGF0aW9u
CisgICAgICAgIC8vIGNhbiBiZSBwZXJmb3JtZWQgb24gNjQgYml0IGludGVnZXJzLiBPbiB4ODYv
eDY0IGFyY2hpdGVjdHVyZSB0aGUgc3BlZWR1cCBpcworICAgICAgICAvLyBub3QgcmVhbGx5IG1l
YXN1cmFibGUsIHRob3VnaC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gU2luY2Ugd2Ugd2FudCB0
byBhdm9pZCBvdmVyc2hvb3Rpbmcgd2UgZGVjcmVtZW50IGJ5IDFlMTAgc28gdGhhdAorICAgICAg
ICAvLyBmbG9hdGluZy1wb2ludCBpbXByZWNpc2lvbnMgZG9uJ3QgYWZmZWN0IHVzLgorICAgICAg
ICAvLworICAgICAgICAvLyBFeHBsYW5hdGlvbiBmb3IgdidzIGJvdW5kYXJ5IG0rOiB0aGUgY29t
cHV0YXRpb24gdGFrZXMgYWR2YW50YWdlIG9mCisgICAgICAgIC8vIHRoZSBmYWN0IHRoYXQgMl4o
cC0xKSA8PSBmIDwgMl5wLiBCb3VuZGFyaWVzIHN0aWxsIHNhdGlzZnkgdGhpcyByZXF1aXJlbWVu
dAorICAgICAgICAvLyAoZXZlbiBmb3IgZGVub3JtYWxzIHdoZXJlIHRoZSBkZWx0YSBjYW4gYmUg
bXVjaCBtb3JlIGltcG9ydGFudCkuCisgICAgICAgIAorICAgICAgICBjb25zdCBkb3VibGUgazFM
b2cxMCA9IDAuMzAxMDI5OTk1NjYzOTgxMTQ7ICAvLyAxL2xnKDEwKQorICAgICAgICAKKyAgICAg
ICAgLy8gRm9yIGRvdWJsZXMgbGVuKGYpID09IDUzIChkb24ndCBmb3JnZXQgdGhlIGhpZGRlbiBi
aXQpLgorICAgICAgICBjb25zdCBpbnQga1NpZ25pZmljYW5kU2l6ZSA9IDUzOworICAgICAgICBk
b3VibGUgZXN0aW1hdGUgPSBjZWlsKChleHBvbmVudCArIGtTaWduaWZpY2FuZFNpemUgLSAxKSAq
IGsxTG9nMTAgLSAxZS0xMCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGVzdGlt
YXRlKTsKKyAgICB9CisgICAgCisgICAgCisgICAgLy8gU2VlIGNvbW1lbnRzIGZvciBJbml0aWFs
U2NhbGVkU3RhcnRWYWx1ZXMuCisgICAgc3RhdGljIHZvaWQgSW5pdGlhbFNjYWxlZFN0YXJ0VmFs
dWVzUG9zaXRpdmVFeHBvbmVudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB2LCBpbnQgZXN0aW1hdGVkX3Bvd2VyLCBib29s
IG5lZWRfYm91bmRhcnlfZGVsdGFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBudW1lcmF0b3IsIEJpZ251bSogZGVub21p
bmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBCaWdudW0qIGRlbHRhX21pbnVzLCBCaWdudW0qIGRlbHRhX3BsdXMpIHsKKyAgICAg
ICAgLy8gQSBwb3NpdGl2ZSBleHBvbmVudCBpbXBsaWVzIGEgcG9zaXRpdmUgcG93ZXIuCisgICAg
ICAgIEFTU0VSVChlc3RpbWF0ZWRfcG93ZXIgPj0gMCk7CisgICAgICAgIC8vIFNpbmNlIHRoZSBl
c3RpbWF0ZWRfcG93ZXIgaXMgcG9zaXRpdmUgd2Ugc2ltcGx5IG11bHRpcGx5IHRoZSBkZW5vbWlu
YXRvcgorICAgICAgICAvLyBieSAxMF5lc3RpbWF0ZWRfcG93ZXIuCisgICAgICAgIAorICAgICAg
ICAvLyBudW1lcmF0b3IgPSB2LgorICAgICAgICBudW1lcmF0b3ItPkFzc2lnblVJbnQ2NChEb3Vi
bGUodikuU2lnbmlmaWNhbmQoKSk7CisgICAgICAgIG51bWVyYXRvci0+U2hpZnRMZWZ0KERvdWJs
ZSh2KS5FeHBvbmVudCgpKTsKKyAgICAgICAgLy8gZGVub21pbmF0b3IgPSAxMF5lc3RpbWF0ZWRf
cG93ZXIuCisgICAgICAgIGRlbm9taW5hdG9yLT5Bc3NpZ25Qb3dlclVJbnQxNigxMCwgZXN0aW1h
dGVkX3Bvd2VyKTsKKyAgICAgICAgCisgICAgICAgIGlmIChuZWVkX2JvdW5kYXJ5X2RlbHRhcykg
eworICAgICAgICAgICAgLy8gSW50cm9kdWNlIGEgY29tbW9uIGRlbm9taW5hdG9yIHNvIHRoYXQg
dGhlIGRlbHRhcyB0byB0aGUgYm91bmRhcmllcyBhcmUKKyAgICAgICAgICAgIC8vIGludGVnZXJz
LgorICAgICAgICAgICAgZGVub21pbmF0b3ItPlNoaWZ0TGVmdCgxKTsKKyAgICAgICAgICAgIG51
bWVyYXRvci0+U2hpZnRMZWZ0KDEpOworICAgICAgICAgICAgLy8gTGV0IHYgPSBmICogMl5lLCB0
aGVuIG0rIC0gdiA9IDEvMiAqIDJeZTsgV2l0aCB0aGUgY29tbW9uCisgICAgICAgICAgICAvLyBk
ZW5vbWluYXRvciAob2YgMikgZGVsdGFfcGx1cyBlcXVhbHMgMl5lLgorICAgICAgICAgICAgZGVs
dGFfcGx1cy0+QXNzaWduVUludDE2KDEpOworICAgICAgICAgICAgZGVsdGFfcGx1cy0+U2hpZnRM
ZWZ0KERvdWJsZSh2KS5FeHBvbmVudCgpKTsKKyAgICAgICAgICAgIC8vIFNhbWUgZm9yIGRlbHRh
X21pbnVzICh3aXRoIGFkanVzdG1lbnRzIGJlbG93IGlmIGYgPT0gMl5wLTEpLgorICAgICAgICAg
ICAgZGVsdGFfbWludXMtPkFzc2lnblVJbnQxNigxKTsKKyAgICAgICAgICAgIGRlbHRhX21pbnVz
LT5TaGlmdExlZnQoRG91YmxlKHYpLkV4cG9uZW50KCkpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICAvLyBJZiB0aGUgc2lnbmlmaWNhbmQgKHdpdGhvdXQgdGhlIGhpZGRlbiBiaXQpIGlzIDAs
IHRoZW4gdGhlIGxvd2VyCisgICAgICAgICAgICAvLyBib3VuZGFyeSBpcyBjbG9zZXIgdGhhbiBq
dXN0IGhhbGYgYSB1bHAgKHVuaXQgaW4gdGhlIGxhc3QgcGxhY2UpLgorICAgICAgICAgICAgLy8g
VGhlcmUgaXMgb25seSBvbmUgZXhjZXB0aW9uOiBpZiB0aGUgbmV4dCBsb3dlciBudW1iZXIgaXMg
YSBkZW5vcm1hbCB0aGVuCisgICAgICAgICAgICAvLyB0aGUgZGlzdGFuY2UgaXMgMSB1bHAuIFRo
aXMgY2Fubm90IGJlIHRoZSBjYXNlIGZvciBleHBvbmVudCA+PSAwIChidXQgd2UKKyAgICAgICAg
ICAgIC8vIGhhdmUgdG8gdGVzdCBpdCBpbiB0aGUgb3RoZXIgZnVuY3Rpb24gd2hlcmUgZXhwb25l
bnQgPCAwKS4KKyAgICAgICAgICAgIHVpbnQ2NF90IHZfYml0cyA9IERvdWJsZSh2KS5Bc1VpbnQ2
NCgpOworICAgICAgICAgICAgaWYgKCh2X2JpdHMgJiBEb3VibGU6OmtTaWduaWZpY2FuZE1hc2sp
ID09IDApIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgbG93ZXIgYm91bmRhcnkgaXMgY2xvc2Vy
IGF0IGhhbGYgdGhlIGRpc3RhbmNlIG9mICJub3JtYWwiIG51bWJlcnMuCisgICAgICAgICAgICAg
ICAgLy8gSW5jcmVhc2UgdGhlIGNvbW1vbiBkZW5vbWluYXRvciBhbmQgYWRhcHQgYWxsIGJ1dCB0
aGUgZGVsdGFfbWludXMuCisgICAgICAgICAgICAgICAgZGVub21pbmF0b3ItPlNoaWZ0TGVmdCgx
KTsgIC8vICoyCisgICAgICAgICAgICAgICAgbnVtZXJhdG9yLT5TaGlmdExlZnQoMSk7ICAgIC8v
ICoyCisgICAgICAgICAgICAgICAgZGVsdGFfcGx1cy0+U2hpZnRMZWZ0KDEpOyAgIC8vICoyCisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgLy8gU2VlIGNv
bW1lbnRzIGZvciBJbml0aWFsU2NhbGVkU3RhcnRWYWx1ZXMKKyAgICBzdGF0aWMgdm9pZCBJbml0
aWFsU2NhbGVkU3RhcnRWYWx1ZXNOZWdhdGl2ZUV4cG9uZW50UG9zaXRpdmVQb3dlcigKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkb3VibGUgdiwgaW50IGVzdGltYXRlZF9wb3dlciwgYm9vbCBuZWVkX2JvdW5kYXJ5
X2RlbHRhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIG51bWVyYXRvciwgQmlnbnVtKiBkZW5vbWlu
YXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBCaWdudW0qIGRlbHRhX21pbnVzLCBCaWdudW0qIGRlbHRhX3Bs
dXMpIHsKKyAgICAgICAgdWludDY0X3Qgc2lnbmlmaWNhbmQgPSBEb3VibGUodikuU2lnbmlmaWNh
bmQoKTsKKyAgICAgICAgaW50IGV4cG9uZW50ID0gRG91YmxlKHYpLkV4cG9uZW50KCk7CisgICAg
ICAgIC8vIHYgPSBmICogMl5lIHdpdGggZSA8IDAsIGFuZCB3aXRoIGVzdGltYXRlZF9wb3dlciA+
PSAwLgorICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgZSBpcyBjbG9zZSB0byAwIChoYXZlIGEg
bG9vayBhdCBob3cgZXN0aW1hdGVkX3Bvd2VyIGlzCisgICAgICAgIC8vIGNvbXB1dGVkKS4KKyAg
ICAgICAgCisgICAgICAgIC8vIG51bWVyYXRvciA9IHNpZ25pZmljYW5kCisgICAgICAgIC8vICBz
aW5jZSB2ID0gc2lnbmlmaWNhbmQgKiAyXmV4cG9uZW50IHRoaXMgaXMgZXF1aXZhbGVudCB0bwor
ICAgICAgICAvLyAgbnVtZXJhdG9yID0gdiAqIC8gMl4tZXhwb25lbnQKKyAgICAgICAgbnVtZXJh
dG9yLT5Bc3NpZ25VSW50NjQoc2lnbmlmaWNhbmQpOworICAgICAgICAvLyBkZW5vbWluYXRvciA9
IDEwXmVzdGltYXRlZF9wb3dlciAqIDJeLWV4cG9uZW50ICh3aXRoIGV4cG9uZW50IDwgMCkKKyAg
ICAgICAgZGVub21pbmF0b3ItPkFzc2lnblBvd2VyVUludDE2KDEwLCBlc3RpbWF0ZWRfcG93ZXIp
OworICAgICAgICBkZW5vbWluYXRvci0+U2hpZnRMZWZ0KC1leHBvbmVudCk7CisgICAgICAgIAor
ICAgICAgICBpZiAobmVlZF9ib3VuZGFyeV9kZWx0YXMpIHsKKyAgICAgICAgICAgIC8vIEludHJv
ZHVjZSBhIGNvbW1vbiBkZW5vbWluYXRvciBzbyB0aGF0IHRoZSBkZWx0YXMgdG8gdGhlIGJvdW5k
YXJpZXMgYXJlCisgICAgICAgICAgICAvLyBpbnRlZ2Vycy4KKyAgICAgICAgICAgIGRlbm9taW5h
dG9yLT5TaGlmdExlZnQoMSk7CisgICAgICAgICAgICBudW1lcmF0b3ItPlNoaWZ0TGVmdCgxKTsK
KyAgICAgICAgICAgIC8vIExldCB2ID0gZiAqIDJeZSwgdGhlbiBtKyAtIHYgPSAxLzIgKiAyXmU7
IFdpdGggdGhlIGNvbW1vbgorICAgICAgICAgICAgLy8gZGVub21pbmF0b3IgKG9mIDIpIGRlbHRh
X3BsdXMgZXF1YWxzIDJeZS4KKyAgICAgICAgICAgIC8vIEdpdmVuIHRoYXQgdGhlIGRlbm9taW5h
dG9yIGFscmVhZHkgaW5jbHVkZXMgdidzIGV4cG9uZW50IHRoZSBkaXN0YW5jZQorICAgICAgICAg
ICAgLy8gdG8gdGhlIGJvdW5kYXJpZXMgaXMgc2ltcGx5IDEuCisgICAgICAgICAgICBkZWx0YV9w
bHVzLT5Bc3NpZ25VSW50MTYoMSk7CisgICAgICAgICAgICAvLyBTYW1lIGZvciBkZWx0YV9taW51
cyAod2l0aCBhZGp1c3RtZW50cyBiZWxvdyBpZiBmID09IDJecC0xKS4KKyAgICAgICAgICAgIGRl
bHRhX21pbnVzLT5Bc3NpZ25VSW50MTYoMSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8v
IElmIHRoZSBzaWduaWZpY2FuZCAod2l0aG91dCB0aGUgaGlkZGVuIGJpdCkgaXMgMCwgdGhlbiB0
aGUgbG93ZXIKKyAgICAgICAgICAgIC8vIGJvdW5kYXJ5IGlzIGNsb3NlciB0aGFuIGp1c3Qgb25l
IHVscCAodW5pdCBpbiB0aGUgbGFzdCBwbGFjZSkuCisgICAgICAgICAgICAvLyBUaGVyZSBpcyBv
bmx5IG9uZSBleGNlcHRpb246IGlmIHRoZSBuZXh0IGxvd2VyIG51bWJlciBpcyBhIGRlbm9ybWFs
CisgICAgICAgICAgICAvLyB0aGVuIHRoZSBkaXN0YW5jZSBpcyAxIHVscC4gU2luY2UgdGhlIGV4
cG9uZW50IGlzIGNsb3NlIHRvIHplcm8KKyAgICAgICAgICAgIC8vIChvdGhlcndpc2UgZXN0aW1h
dGVkX3Bvd2VyIHdvdWxkIGhhdmUgYmVlbiBuZWdhdGl2ZSkgdGhpcyBjYW5ub3QgaGFwcGVuCisg
ICAgICAgICAgICAvLyBoZXJlIGVpdGhlci4KKyAgICAgICAgICAgIHVpbnQ2NF90IHZfYml0cyA9
IERvdWJsZSh2KS5Bc1VpbnQ2NCgpOworICAgICAgICAgICAgaWYgKCh2X2JpdHMgJiBEb3VibGU6
OmtTaWduaWZpY2FuZE1hc2spID09IDApIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgbG93ZXIg
Ym91bmRhcnkgaXMgY2xvc2VyIGF0IGhhbGYgdGhlIGRpc3RhbmNlIG9mICJub3JtYWwiIG51bWJl
cnMuCisgICAgICAgICAgICAgICAgLy8gSW5jcmVhc2UgdGhlIGRlbm9taW5hdG9yIGFuZCBhZGFw
dCBhbGwgYnV0IHRoZSBkZWx0YV9taW51cy4KKyAgICAgICAgICAgICAgICBkZW5vbWluYXRvci0+
U2hpZnRMZWZ0KDEpOyAgLy8gKjIKKyAgICAgICAgICAgICAgICBudW1lcmF0b3ItPlNoaWZ0TGVm
dCgxKTsgICAgLy8gKjIKKyAgICAgICAgICAgICAgICBkZWx0YV9wbHVzLT5TaGlmdExlZnQoMSk7
ICAgLy8gKjIKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAg
ICAvLyBTZWUgY29tbWVudHMgZm9yIEluaXRpYWxTY2FsZWRTdGFydFZhbHVlcworICAgIHN0YXRp
YyB2b2lkIEluaXRpYWxTY2FsZWRTdGFydFZhbHVlc05lZ2F0aXZlRXhwb25lbnROZWdhdGl2ZVBv
d2VyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRvdWJsZSB2LCBpbnQgZXN0aW1hdGVkX3Bvd2VyLCBib29sIG5l
ZWRfYm91bmRhcnlfZGVsdGFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogbnVtZXJhdG9yLCBCaWdu
dW0qIGRlbm9taW5hdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogZGVsdGFfbWludXMsIEJpZ251
bSogZGVsdGFfcGx1cykgeworICAgICAgICBjb25zdCB1aW50NjRfdCBrTWluaW1hbE5vcm1hbGl6
ZWRFeHBvbmVudCA9CisgICAgICAgIFVJTlQ2NF8yUEFSVF9DKDB4MDAxMDAwMDAsIDAwMDAwMDAw
KTsKKyAgICAgICAgdWludDY0X3Qgc2lnbmlmaWNhbmQgPSBEb3VibGUodikuU2lnbmlmaWNhbmQo
KTsKKyAgICAgICAgaW50IGV4cG9uZW50ID0gRG91YmxlKHYpLkV4cG9uZW50KCk7CisgICAgICAg
IC8vIEluc3RlYWQgb2YgbXVsdGlwbHlpbmcgdGhlIGRlbm9taW5hdG9yIHdpdGggMTBeZXN0aW1h
dGVkX3Bvd2VyIHdlCisgICAgICAgIC8vIG11bHRpcGx5IGFsbCB2YWx1ZXMgKG51bWVyYXRvciBh
bmQgZGVsdGFzKSBieSAxMF4tZXN0aW1hdGVkX3Bvd2VyLgorICAgICAgICAKKyAgICAgICAgLy8g
VXNlIG51bWVyYXRvciBhcyB0ZW1wb3JhcnkgY29udGFpbmVyIGZvciBwb3dlcl90ZW4uCisgICAg
ICAgIEJpZ251bSogcG93ZXJfdGVuID0gbnVtZXJhdG9yOworICAgICAgICBwb3dlcl90ZW4tPkFz
c2lnblBvd2VyVUludDE2KDEwLCAtZXN0aW1hdGVkX3Bvd2VyKTsKKyAgICAgICAgCisgICAgICAg
IGlmIChuZWVkX2JvdW5kYXJ5X2RlbHRhcykgeworICAgICAgICAgICAgLy8gU2luY2UgcG93ZXJf
dGVuID09IG51bWVyYXRvciB3ZSBtdXN0IG1ha2UgYSBjb3B5IG9mIDEwXmVzdGltYXRlZF9wb3dl
cgorICAgICAgICAgICAgLy8gYmVmb3JlIHdlIGNvbXBsZXRlIHRoZSBjb21wdXRhdGlvbiBvZiB0
aGUgbnVtZXJhdG9yLgorICAgICAgICAgICAgLy8gZGVsdGFfcGx1cyA9IGRlbHRhX21pbnVzID0g
MTBeZXN0aW1hdGVkX3Bvd2VyCisgICAgICAgICAgICBkZWx0YV9wbHVzLT5Bc3NpZ25CaWdudW0o
KnBvd2VyX3Rlbik7CisgICAgICAgICAgICBkZWx0YV9taW51cy0+QXNzaWduQmlnbnVtKCpwb3dl
cl90ZW4pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBudW1lcmF0b3IgPSBzaWdu
aWZpY2FuZCAqIDIgKiAxMF4tZXN0aW1hdGVkX3Bvd2VyCisgICAgICAgIC8vICBzaW5jZSB2ID0g
c2lnbmlmaWNhbmQgKiAyXmV4cG9uZW50IHRoaXMgaXMgZXF1aXZhbGVudCB0bworICAgICAgICAv
LyBudW1lcmF0b3IgPSB2ICogMTBeLWVzdGltYXRlZF9wb3dlciAqIDIgKiAyXi1leHBvbmVudC4K
KyAgICAgICAgLy8gUmVtZW1iZXI6IG51bWVyYXRvciBoYXMgYmVlbiBhYnVzZWQgYXMgcG93ZXJf
dGVuLiBTbyBubyBuZWVkIHRvIGFzc2lnbiBpdAorICAgICAgICAvLyAgdG8gaXRzZWxmLgorICAg
ICAgICBBU1NFUlQobnVtZXJhdG9yID09IHBvd2VyX3Rlbik7CisgICAgICAgIG51bWVyYXRvci0+
TXVsdGlwbHlCeVVJbnQ2NChzaWduaWZpY2FuZCk7CisgICAgICAgIAorICAgICAgICAvLyBkZW5v
bWluYXRvciA9IDIgKiAyXi1leHBvbmVudCB3aXRoIGV4cG9uZW50IDwgMC4KKyAgICAgICAgZGVu
b21pbmF0b3ItPkFzc2lnblVJbnQxNigxKTsKKyAgICAgICAgZGVub21pbmF0b3ItPlNoaWZ0TGVm
dCgtZXhwb25lbnQpOworICAgICAgICAKKyAgICAgICAgaWYgKG5lZWRfYm91bmRhcnlfZGVsdGFz
KSB7CisgICAgICAgICAgICAvLyBJbnRyb2R1Y2UgYSBjb21tb24gZGVub21pbmF0b3Igc28gdGhh
dCB0aGUgZGVsdGFzIHRvIHRoZSBib3VuZGFyaWVzIGFyZQorICAgICAgICAgICAgLy8gaW50ZWdl
cnMuCisgICAgICAgICAgICBudW1lcmF0b3ItPlNoaWZ0TGVmdCgxKTsKKyAgICAgICAgICAgIGRl
bm9taW5hdG9yLT5TaGlmdExlZnQoMSk7CisgICAgICAgICAgICAvLyBXaXRoIHRoaXMgc2hpZnQg
dGhlIGJvdW5kYXJpZXMgaGF2ZSB0aGVpciBjb3JyZWN0IHZhbHVlLCBzaW5jZQorICAgICAgICAg
ICAgLy8gZGVsdGFfcGx1cyA9IDEwXi1lc3RpbWF0ZWRfcG93ZXIsIGFuZAorICAgICAgICAgICAg
Ly8gZGVsdGFfbWludXMgPSAxMF4tZXN0aW1hdGVkX3Bvd2VyLgorICAgICAgICAgICAgLy8gVGhl
c2UgYXNzaWdubWVudHMgaGF2ZSBiZWVuIGRvbmUgZWFybGllci4KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgLy8gVGhlIHNwZWNpYWwgY2FzZSB3aGVyZSB0aGUgbG93ZXIgYm91bmRhcnkgaXMg
dHdpY2UgYXMgY2xvc2UuCisgICAgICAgICAgICAvLyBUaGlzIHRpbWUgd2UgaGF2ZSB0byBsb29r
IG91dCBmb3IgdGhlIGV4Y2VwdGlvbiB0b28uCisgICAgICAgICAgICB1aW50NjRfdCB2X2JpdHMg
PSBEb3VibGUodikuQXNVaW50NjQoKTsKKyAgICAgICAgICAgIGlmICgodl9iaXRzICYgRG91Ymxl
OjprU2lnbmlmaWNhbmRNYXNrKSA9PSAwICYmCisgICAgICAgICAgICAgICAgLy8gVGhlIG9ubHkg
ZXhjZXB0aW9uIHdoZXJlIGEgc2lnbmlmaWNhbmQgPT0gMCBoYXMgaXRzIGJvdW5kYXJpZXMgYXQK
KyAgICAgICAgICAgICAgICAvLyAibm9ybWFsIiBkaXN0YW5jZXM6CisgICAgICAgICAgICAgICAg
KHZfYml0cyAmIERvdWJsZTo6a0V4cG9uZW50TWFzaykgIT0ga01pbmltYWxOb3JtYWxpemVkRXhw
b25lbnQpIHsKKyAgICAgICAgICAgICAgICBudW1lcmF0b3ItPlNoaWZ0TGVmdCgxKTsgICAgLy8g
KjIKKyAgICAgICAgICAgICAgICBkZW5vbWluYXRvci0+U2hpZnRMZWZ0KDEpOyAgLy8gKjIKKyAg
ICAgICAgICAgICAgICBkZWx0YV9wbHVzLT5TaGlmdExlZnQoMSk7ICAgLy8gKjIKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBMZXQgdiA9IHNpZ25p
ZmljYW5kICogMl5leHBvbmVudC4KKyAgICAvLyBDb21wdXRlcyB2IC8gMTBeZXN0aW1hdGVkX3Bv
d2VyIGV4YWN0bHksIGFzIGEgcmF0aW8gb2YgdHdvIGJpZ251bXMsIG51bWVyYXRvcgorICAgIC8v
IGFuZCBkZW5vbWluYXRvci4gVGhlIGZ1bmN0aW9ucyBHZW5lcmF0ZVNob3J0ZXN0RGlnaXRzIGFu
ZAorICAgIC8vIEdlbmVyYXRlQ291bnRlZERpZ2l0cyB3aWxsIHRoZW4gY29udmVydCB0aGlzIHJh
dGlvIHRvIGl0cyBkZWNpbWFsCisgICAgLy8gcmVwcmVzZW50YXRpb24gZCwgd2l0aCB0aGUgcmVx
dWlyZWQgYWNjdXJhY3kuCisgICAgLy8gVGhlbiBkICogMTBeZXN0aW1hdGVkX3Bvd2VyIGlzIHRo
ZSByZXByZXNlbnRhdGlvbiBvZiB2LgorICAgIC8vIChOb3RlOiB0aGUgZnJhY3Rpb24gYW5kIHRo
ZSBlc3RpbWF0ZWRfcG93ZXIgbWlnaHQgZ2V0IGFkanVzdGVkIGJlZm9yZQorICAgIC8vIGdlbmVy
YXRpbmcgdGhlIGRlY2ltYWwgcmVwcmVzZW50YXRpb24uKQorICAgIC8vCisgICAgLy8gVGhlIGlu
aXRpYWwgc3RhcnQgdmFsdWVzIGNvbnNpc3Qgb2Y6CisgICAgLy8gIC0gYSBzY2FsZWQgbnVtZXJh
dG9yOiBzLnQuIG51bWVyYXRvci9kZW5vbWluYXRvciA9PSB2IC8gMTBeZXN0aW1hdGVkX3Bvd2Vy
LgorICAgIC8vICAtIGEgc2NhbGVkIChjb21tb24pIGRlbm9taW5hdG9yLgorICAgIC8vICBvcHRp
b25hbGx5ICh1c2VkIGJ5IEdlbmVyYXRlU2hvcnRlc3REaWdpdHMgdG8gZGVjaWRlIGlmIGl0IGhh
cyB0aGUgc2hvcnRlc3QKKyAgICAvLyAgZGVjaW1hbCBjb252ZXJ0aW5nIGJhY2sgdG8gdik6Cisg
ICAgLy8gIC0gdiAtIG0tOiB0aGUgZGlzdGFuY2UgdG8gdGhlIGxvd2VyIGJvdW5kYXJ5LgorICAg
IC8vICAtIG0rIC0gdjogdGhlIGRpc3RhbmNlIHRvIHRoZSB1cHBlciBib3VuZGFyeS4KKyAgICAv
LworICAgIC8vIHYsIG0rLCBtLSwgYW5kIHRoZXJlZm9yZSB2IC0gbS0gYW5kIG0rIC0gdiBhbGwg
c2hhcmUgdGhlIHNhbWUgZGVub21pbmF0b3IuCisgICAgLy8KKyAgICAvLyBMZXQgZXAgPT0gZXN0
aW1hdGVkX3Bvd2VyLCB0aGVuIHRoZSByZXR1cm5lZCB2YWx1ZXMgd2lsbCBzYXRpc2Z5OgorICAg
IC8vICB2IC8gMTBeZXAgPSBudW1lcmF0b3IgLyBkZW5vbWluYXRvci4KKyAgICAvLyAgdidzIGJv
dW5kYXJ5cyBtLSBhbmQgbSs6CisgICAgLy8gICAgbS0gLyAxMF5lcCA9PSB2IC8gMTBeZXAgLSBk
ZWx0YV9taW51cyAvIGRlbm9taW5hdG9yCisgICAgLy8gICAgbSsgLyAxMF5lcCA9PSB2IC8gMTBe
ZXAgKyBkZWx0YV9wbHVzIC8gZGVub21pbmF0b3IKKyAgICAvLyAgT3IgaW4gb3RoZXIgd29yZHM6
CisgICAgLy8gICAgbS0gPT0gdiAtIGRlbHRhX21pbnVzICogMTBeZXAgLyBkZW5vbWluYXRvcjsK
KyAgICAvLyAgICBtKyA9PSB2ICsgZGVsdGFfcGx1cyAqIDEwXmVwIC8gZGVub21pbmF0b3I7Cisg
ICAgLy8KKyAgICAvLyBTaW5jZSAxMF4oay0xKSA8PSB2IDwgMTBeayAgICAod2l0aCBrID09IGVz
dGltYXRlZF9wb3dlcikKKyAgICAvLyAgb3IgICAgICAgMTBeayA8PSB2IDwgMTBeKGsrMSkKKyAg
ICAvLyAgd2UgdGhlbiBoYXZlIDAuMSA8PSBudW1lcmF0b3IvZGVub21pbmF0b3IgPCAxCisgICAg
Ly8gICAgICAgICAgIG9yICAgIDEgPD0gbnVtZXJhdG9yL2Rlbm9taW5hdG9yIDwgMTAKKyAgICAv
LworICAgIC8vIEl0IGlzIHRoZW4gZWFzeSB0byBraWNrc3RhcnQgdGhlIGRpZ2l0LWdlbmVyYXRp
b24gcm91dGluZS4KKyAgICAvLworICAgIC8vIFRoZSBib3VuZGFyeS1kZWx0YXMgYXJlIG9ubHkg
ZmlsbGVkIGlmIG5lZWRfYm91bmRhcnlfZGVsdGFzIGlzIHNldC4KKyAgICBzdGF0aWMgdm9pZCBJ
bml0aWFsU2NhbGVkU3RhcnRWYWx1ZXMoZG91YmxlIHYsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBlc3RpbWF0ZWRfcG93ZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbmVlZF9ib3VuZGFyeV9kZWx0YXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogbnVtZXJhdG9yLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIGRlbm9taW5h
dG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIGRl
bHRhX21pbnVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdu
dW0qIGRlbHRhX3BsdXMpIHsKKyAgICAgICAgaWYgKERvdWJsZSh2KS5FeHBvbmVudCgpID49IDAp
IHsKKyAgICAgICAgICAgIEluaXRpYWxTY2FsZWRTdGFydFZhbHVlc1Bvc2l0aXZlRXhwb25lbnQo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYs
IGVzdGltYXRlZF9wb3dlciwgbmVlZF9ib3VuZGFyeV9kZWx0YXMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyYXRvciwgZGVub21pbmF0
b3IsIGRlbHRhX21pbnVzLCBkZWx0YV9wbHVzKTsKKyAgICAgICAgfSBlbHNlIGlmIChlc3RpbWF0
ZWRfcG93ZXIgPj0gMCkgeworICAgICAgICAgICAgSW5pdGlhbFNjYWxlZFN0YXJ0VmFsdWVzTmVn
YXRpdmVFeHBvbmVudFBvc2l0aXZlUG93ZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LCBlc3RpbWF0ZWRfcG93ZXIs
IG5lZWRfYm91bmRhcnlfZGVsdGFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJhdG9yLCBkZW5vbWluYXRvciwg
ZGVsdGFfbWludXMsIGRlbHRhX3BsdXMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
SW5pdGlhbFNjYWxlZFN0YXJ0VmFsdWVzTmVnYXRpdmVFeHBvbmVudE5lZ2F0aXZlUG93ZXIoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2LCBlc3RpbWF0ZWRfcG93ZXIsIG5lZWRfYm91bmRhcnlfZGVsdGFzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnVtZXJhdG9yLCBkZW5vbWluYXRvciwgZGVsdGFfbWludXMsIGRlbHRhX3BsdXMpOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIC8vIFRoaXMgcm91dGluZSBtdWx0aXBsaWVz
IG51bWVyYXRvci9kZW5vbWluYXRvciBzbyB0aGF0IGl0cyB2YWx1ZXMgbGllcyBpbiB0aGUKKyAg
ICAvLyByYW5nZSAxLTEwLiBUaGF0IGlzIGFmdGVyIGEgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIHdl
IGhhdmU6CisgICAgLy8gICAgMSA8PSAobnVtZXJhdG9yICsgZGVsdGFfcGx1cykgL2Rlbm9taW5h
dG9yIDwgMTAuCisgICAgLy8gTGV0IG51bWVyYXRvciB0aGUgaW5wdXQgYmVmb3JlIG1vZGlmaWNh
dGlvbiBhbmQgbnVtZXJhdG9yJyB0aGUgYXJndW1lbnQKKyAgICAvLyBhZnRlciBtb2RpZmljYXRp
b24sIHRoZW4gdGhlIG91dHB1dC1wYXJhbWV0ZXIgZGVjaW1hbF9wb2ludCBpcyBzdWNoIHRoYXQK
KyAgICAvLyAgbnVtZXJhdG9yIC8gZGVub21pbmF0b3IgKiAxMF5lc3RpbWF0ZWRfcG93ZXIgPT0K
KyAgICAvLyAgICBudW1lcmF0b3InIC8gZGVub21pbmF0b3InICogMTBeKGRlY2ltYWxfcG9pbnQg
LSAxKQorICAgIC8vIEluIHNvbWUgY2FzZXMgZXN0aW1hdGVkX3Bvd2VyIHdhcyB0b28gbG93LCBh
bmQgdGhpcyBpcyBhbHJlYWR5IHRoZSBjYXNlLiBXZQorICAgIC8vIHRoZW4gc2ltcGx5IGFkanVz
dCB0aGUgcG93ZXIgc28gdGhhdCAxMF4oay0xKSA8PSB2IDwgMTBeayAod2l0aCBrID09CisgICAg
Ly8gZXN0aW1hdGVkX3Bvd2VyKSBidXQgZG8gbm90IHRvdWNoIHRoZSBudW1lcmF0b3Igb3IgZGVu
b21pbmF0b3IuCisgICAgLy8gT3RoZXJ3aXNlIHRoZSByb3V0aW5lIG11bHRpcGxpZXMgdGhlIG51
bWVyYXRvciBhbmQgdGhlIGRlbHRhcyBieSAxMC4KKyAgICBzdGF0aWMgdm9pZCBGaXh1cE11bHRp
cGx5MTAoaW50IGVzdGltYXRlZF9wb3dlciwgYm9vbCBpc19ldmVuLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQqIGRlY2ltYWxfcG9pbnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEJpZ251bSogbnVtZXJhdG9yLCBCaWdudW0qIGRlbm9taW5hdG9yLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIGRlbHRhX21pbnVzLCBCaWdudW0q
IGRlbHRhX3BsdXMpIHsKKyAgICAgICAgYm9vbCBpbl9yYW5nZTsKKyAgICAgICAgaWYgKGlzX2V2
ZW4pIHsKKyAgICAgICAgICAgIC8vIEZvciBJRUVFIGRvdWJsZXMgaGFsZi13YXkgY2FzZXMgKGlu
IGRlY2ltYWwgc3lzdGVtIG51bWJlcnMgZW5kaW5nIHdpdGggNSkKKyAgICAgICAgICAgIC8vIGFy
ZSByb3VuZGVkIHRvIHRoZSBjbG9zZXN0IGZsb2F0aW5nLXBvaW50IG51bWJlciB3aXRoIGV2ZW4g
c2lnbmlmaWNhbmQuCisgICAgICAgICAgICBpbl9yYW5nZSA9IEJpZ251bTo6UGx1c0NvbXBhcmUo
Km51bWVyYXRvciwgKmRlbHRhX3BsdXMsICpkZW5vbWluYXRvcikgPj0gMDsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGluX3JhbmdlID0gQmlnbnVtOjpQbHVzQ29tcGFyZSgqbnVtZXJh
dG9yLCAqZGVsdGFfcGx1cywgKmRlbm9taW5hdG9yKSA+IDA7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGluX3JhbmdlKSB7CisgICAgICAgICAgICAvLyBTaW5jZSBudW1lcmF0b3IgKyBkZWx0YV9w
bHVzID49IGRlbm9taW5hdG9yIHdlIGFscmVhZHkgaGF2ZQorICAgICAgICAgICAgLy8gMSA8PSBu
dW1lcmF0b3IvZGVub21pbmF0b3IgPCAxMC4gU2ltcGx5IHVwZGF0ZSB0aGUgZXN0aW1hdGVkX3Bv
d2VyLgorICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSBlc3RpbWF0ZWRfcG93ZXIgKyAxOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSBlc3RpbWF0ZWRf
cG93ZXI7CisgICAgICAgICAgICBudW1lcmF0b3ItPlRpbWVzMTAoKTsKKyAgICAgICAgICAgIGlm
IChCaWdudW06OkVxdWFsKCpkZWx0YV9taW51cywgKmRlbHRhX3BsdXMpKSB7CisgICAgICAgICAg
ICAgICAgZGVsdGFfbWludXMtPlRpbWVzMTAoKTsKKyAgICAgICAgICAgICAgICBkZWx0YV9wbHVz
LT5Bc3NpZ25CaWdudW0oKmRlbHRhX21pbnVzKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgZGVsdGFfbWludXMtPlRpbWVzMTAoKTsKKyAgICAgICAgICAgICAgICBkZWx0
YV9wbHVzLT5UaW1lczEwKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
Cit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KKworfSAvLyBuYW1lc3BhY2UgV1RG
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvYmlnbnVtLWR0b2Eu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9iaWdudW0tZHRvYS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjA3NjE2ODcwOTFjMDBiOTNmMDg3NjQwMzU4ZTM5ODkwN2QwZDRhOTUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvYmlnbnVtLWR0b2EuaApAQCAt
MCwwICsxLDg2IEBACisvLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBt
ZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAg
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8v
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8v
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZm5kZWYgRE9VQkxF
X0NPTlZFUlNJT05fQklHTlVNX0RUT0FfSF8KKyNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05fQklH
TlVNX0RUT0FfSF8KKworI2luY2x1ZGUgInV0aWxzLmgiCisKK25hbWVzcGFjZSBXVEYgeworCitu
YW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIGVudW0gQmlnbnVtRHRvYU1v
ZGUgeworICAgICAgICAvLyBSZXR1cm4gdGhlIHNob3J0ZXN0IGNvcnJlY3QgcmVwcmVzZW50YXRp
b24uCisgICAgICAgIC8vIEZvciBleGFtcGxlIHRoZSBvdXRwdXQgb2YgMC4yOTk5OTk5OTk5OTk5
OTk5ODg4OTcgaXMgKHRoZSBsZXNzIGFjY3VyYXRlIGJ1dAorICAgICAgICAvLyBjb3JyZWN0KSAw
LjMuCisgICAgICAgIEJJR05VTV9EVE9BX1NIT1JURVNULAorICAgICAgICAvLyBSZXR1cm4gYSBm
aXhlZCBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50LgorICAgICAgICAv
LyBGb3IgaW5zdGFuY2UgZml4ZWQoMC4xLCA0KSBiZWNvbWVzIDAuMTAwMAorICAgICAgICAvLyBJ
ZiB0aGUgaW5wdXQgbnVtYmVyIGlzIGJpZywgdGhlIG91dHB1dCB3aWxsIGJlIGJpZy4KKyAgICAg
ICAgQklHTlVNX0RUT0FfRklYRUQsCisgICAgICAgIC8vIFJldHVybiBhIGZpeGVkIG51bWJlciBv
ZiBkaWdpdHMsIG5vIG1hdHRlciB3aGF0IHRoZSBleHBvbmVudCBpcy4KKyAgICAgICAgQklHTlVN
X0RUT0FfUFJFQ0lTSU9OCisgICAgfTsKKyAgICAKKyAgICAvLyBDb252ZXJ0cyB0aGUgZ2l2ZW4g
ZG91YmxlICd2JyB0byBhc2NpaS4KKyAgICAvLyBUaGUgcmVzdWx0IHNob3VsZCBiZSBpbnRlcnBy
ZXRlZCBhcyBidWZmZXIgKiAxMF4ocG9pbnQtbGVuZ3RoKS4KKyAgICAvLyBUaGUgYnVmZmVyIHdp
bGwgYmUgbnVsbC10ZXJtaW5hdGVkLgorICAgIC8vCisgICAgLy8gVGhlIGlucHV0IHYgbXVzdCBi
ZSA+IDAgYW5kIGRpZmZlcmVudCBmcm9tIE5hTiwgYW5kIEluZmluaXR5LgorICAgIC8vCisgICAg
Ly8gVGhlIG91dHB1dCBkZXBlbmRzIG9uIHRoZSBnaXZlbiBtb2RlOgorICAgIC8vICAtIFNIT1JU
RVNUOiBwcm9kdWNlIHRoZSBsZWFzdCBhbW91bnQgb2YgZGlnaXRzIGZvciB3aGljaCB0aGUgaW50
ZXJuYWwKKyAgICAvLyAgIGlkZW50aXR5IHJlcXVpcmVtZW50IGlzIHN0aWxsIHNhdGlzZmllZC4g
SWYgdGhlIGRpZ2l0cyBhcmUgcHJpbnRlZAorICAgIC8vICAgKHRvZ2V0aGVyIHdpdGggdGhlIGNv
cnJlY3QgZXhwb25lbnQpIHRoZW4gcmVhZGluZyB0aGlzIG51bWJlciB3aWxsIGdpdmUKKyAgICAv
LyAgICd2JyBhZ2Fpbi4gVGhlIGJ1ZmZlciB3aWxsIGNob29zZSB0aGUgcmVwcmVzZW50YXRpb24g
dGhhdCBpcyBjbG9zZXN0IHRvCisgICAgLy8gICAndicuIElmIHRoZXJlIGFyZSB0d28gYXQgdGhl
IHNhbWUgZGlzdGFuY2UsIHRoYW4gdGhlIG51bWJlciBpcyByb3VuZCB1cC4KKyAgICAvLyAgIElu
IHRoaXMgbW9kZSB0aGUgJ3JlcXVlc3RlZF9kaWdpdHMnIHBhcmFtZXRlciBpcyBpZ25vcmVkLgor
ICAgIC8vICAtIEZJWEVEOiBwcm9kdWNlcyBkaWdpdHMgbmVjZXNzYXJ5IHRvIHByaW50IGEgZ2l2
ZW4gbnVtYmVyIHdpdGgKKyAgICAvLyAgICdyZXF1ZXN0ZWRfZGlnaXRzJyBkaWdpdHMgYWZ0ZXIg
dGhlIGRlY2ltYWwgcG9pbnQuIFRoZSBwcm9kdWNlZCBkaWdpdHMKKyAgICAvLyAgIG1pZ2h0IGJl
IHRvbyBzaG9ydCBpbiB3aGljaCBjYXNlIHRoZSBjYWxsZXIgaGFzIHRvIGZpbGwgdGhlIGdhcHMg
d2l0aCAnMCdzLgorICAgIC8vICAgRXhhbXBsZTogdG9GaXhlZCgwLjAwMSwgNSkgaXMgYWxsb3dl
ZCB0byByZXR1cm4gYnVmZmVyPSIxIiwgcG9pbnQ9LTIuCisgICAgLy8gICBIYWxmd2F5IGNhc2Vz
IGFyZSByb3VuZGVkIHVwLiBUaGUgY2FsbCB0b0ZpeGVkKDAuMTUsIDIpIHRodXMgcmV0dXJucwor
ICAgIC8vICAgICBidWZmZXI9IjIiLCBwb2ludD0wLgorICAgIC8vICAgTm90ZTogdGhlIGxlbmd0
aCBvZiB0aGUgcmV0dXJuZWQgYnVmZmVyIGhhcyBubyBtZWFuaW5nIHdydCB0aGUgc2lnbmlmaWNh
bmNlCisgICAgLy8gICBvZiBpdHMgZGlnaXRzLiBUaGF0IGlzLCBqdXN0IGJlY2F1c2UgaXQgY29u
dGFpbnMgJzAncyBkb2VzIG5vdCBtZWFuIHRoYXQKKyAgICAvLyAgIGFueSBvdGhlciBkaWdpdCB3
b3VsZCBub3Qgc2F0aXNmeSB0aGUgaW50ZXJuYWwgaWRlbnRpdHkgcmVxdWlyZW1lbnQuCisgICAg
Ly8gIC0gUFJFQ0lTSU9OOiBwcm9kdWNlcyAncmVxdWVzdGVkX2RpZ2l0cycgd2hlcmUgdGhlIGZp
cnN0IGRpZ2l0IGlzIG5vdCAnMCcuCisgICAgLy8gICBFdmVuIHRob3VnaCB0aGUgbGVuZ3RoIG9m
IHByb2R1Y2VkIGRpZ2l0cyB1c3VhbGx5IGVxdWFscworICAgIC8vICAgJ3JlcXVlc3RlZF9kaWdp
dHMnLCB0aGUgZnVuY3Rpb24gaXMgYWxsb3dlZCB0byByZXR1cm4gZmV3ZXIgZGlnaXRzLCBpbgor
ICAgIC8vICAgd2hpY2ggY2FzZSB0aGUgY2FsbGVyIGhhcyB0byBmaWxsIHRoZSBtaXNzaW5nIGRp
Z2l0cyB3aXRoICcwJ3MuCisgICAgLy8gICBIYWxmd2F5IGNhc2VzIGFyZSBhZ2FpbiByb3VuZGVk
IHVwLgorICAgIC8vICdCaWdudW1EdG9hJyBleHBlY3RzIHRoZSBnaXZlbiBidWZmZXIgdG8gYmUg
YmlnIGVub3VnaCB0byBob2xkIGFsbCBkaWdpdHMKKyAgICAvLyBhbmQgYSB0ZXJtaW5hdGluZyBu
dWxsLWNoYXJhY3Rlci4KKyAgICB2b2lkIEJpZ251bUR0b2EoZG91YmxlIHYsIEJpZ251bUR0b2FN
b2RlIG1vZGUsIGludCByZXF1ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICBWZWN0
b3I8Y2hhcj4gYnVmZmVyLCBpbnQqIGxlbmd0aCwgaW50KiBwb2ludCk7CisgICAgCit9ICAvLyBu
YW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRp
ZiAgLy8gRE9VQkxFX0NPTlZFUlNJT05fQklHTlVNX0RUT0FfSF8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9iaWdudW0uY2MgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL2R0b2EvYmlnbnVtLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgyN2EyZjg4MjY0YmU1YTllNmMzODg2
Zjg3OTBlZDZiMTg3NWUyY2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL2R0b2EvYmlnbnVtLmNjCkBAIC0wLDAgKzEsNzY4IEBACisvLyBDb3B5cmlnaHQgMjAx
MCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAg
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8v
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKKyNpbmNsdWRlICJiaWdudW0uaCIKKyNpbmNsdWRlICJ1dGlscy5oIgorCitu
YW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKKyAgICAKKyAg
ICBCaWdudW06OkJpZ251bSgpCisgICAgOiBiaWdpdHNfKGJpZ2l0c19idWZmZXJfLCBrQmlnaXRD
YXBhY2l0eSksIHVzZWRfZGlnaXRzXygwKSwgZXhwb25lbnRfKDApIHsKKyAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBrQmlnaXRDYXBhY2l0eTsgKytpKSB7CisgICAgICAgICAgICBiaWdpdHNf
W2ldID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBTPgorICAgIHN0YXRpYyBpbnQgQml0U2l6ZShTIHZhbHVlKSB7CisgICAgICAgIHJldHVy
biA4ICogc2l6ZW9mKHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgLy8gR3VhcmFudGVlZCB0byBs
aWUgaW4gb25lIEJpZ2l0LgorICAgIHZvaWQgQmlnbnVtOjpBc3NpZ25VSW50MTYodWludDE2X3Qg
dmFsdWUpIHsKKyAgICAgICAgQVNTRVJUKGtCaWdpdFNpemUgPj0gQml0U2l6ZSh2YWx1ZSkpOwor
ICAgICAgICBaZXJvKCk7CisgICAgICAgIGlmICh2YWx1ZSA9PSAwKSByZXR1cm47CisgICAgICAg
IAorICAgICAgICBFbnN1cmVDYXBhY2l0eSgxKTsKKyAgICAgICAgYmlnaXRzX1swXSA9IHZhbHVl
OworICAgICAgICB1c2VkX2RpZ2l0c18gPSAxOworICAgIH0KKyAgICAKKyAgICAKKyAgICB2b2lk
IEJpZ251bTo6QXNzaWduVUludDY0KHVpbnQ2NF90IHZhbHVlKSB7CisgICAgICAgIGNvbnN0IGlu
dCBrVUludDY0U2l6ZSA9IDY0OworICAgICAgICAKKyAgICAgICAgWmVybygpOworICAgICAgICBp
ZiAodmFsdWUgPT0gMCkgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaW50IG5lZWRlZF9iaWdp
dHMgPSBrVUludDY0U2l6ZSAvIGtCaWdpdFNpemUgKyAxOworICAgICAgICBFbnN1cmVDYXBhY2l0
eShuZWVkZWRfYmlnaXRzKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuZWVkZWRfYmln
aXRzOyArK2kpIHsKKyAgICAgICAgICAgIGJpZ2l0c19baV0gPSB2YWx1ZSAmIGtCaWdpdE1hc2s7
CisgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlID4+IGtCaWdpdFNpemU7CisgICAgICAgIH0KKyAg
ICAgICAgdXNlZF9kaWdpdHNfID0gbmVlZGVkX2JpZ2l0czsKKyAgICAgICAgQ2xhbXAoKTsKKyAg
ICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06OkFzc2lnbkJpZ251bShjb25zdCBCaWdu
dW0mIG90aGVyKSB7CisgICAgICAgIGV4cG9uZW50XyA9IG90aGVyLmV4cG9uZW50XzsKKyAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvdGhlci51c2VkX2RpZ2l0c187ICsraSkgeworICAgICAg
ICAgICAgYmlnaXRzX1tpXSA9IG90aGVyLmJpZ2l0c19baV07CisgICAgICAgIH0KKyAgICAgICAg
Ly8gQ2xlYXIgdGhlIGV4Y2VzcyBkaWdpdHMgKGlmIHRoZXJlIHdlcmUgYW55KS4KKyAgICAgICAg
Zm9yIChpbnQgaSA9IG90aGVyLnVzZWRfZGlnaXRzXzsgaSA8IHVzZWRfZGlnaXRzXzsgKytpKSB7
CisgICAgICAgICAgICBiaWdpdHNfW2ldID0gMDsKKyAgICAgICAgfQorICAgICAgICB1c2VkX2Rp
Z2l0c18gPSBvdGhlci51c2VkX2RpZ2l0c187CisgICAgfQorICAgIAorICAgIAorICAgIHN0YXRp
YyB1aW50NjRfdCBSZWFkVUludDY0KFZlY3Rvcjxjb25zdCBjaGFyPiBidWZmZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZyb20sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGRpZ2l0c190b19yZWFkKSB7CisgICAgICAgIHVpbnQ2NF90IHJlc3VsdCA9
IDA7CisgICAgICAgIGZvciAoaW50IGkgPSBmcm9tOyBpIDwgZnJvbSArIGRpZ2l0c190b19yZWFk
OyArK2kpIHsKKyAgICAgICAgICAgIGludCBkaWdpdCA9IGJ1ZmZlcltpXSAtICcwJzsKKyAgICAg
ICAgICAgIEFTU0VSVCgwIDw9IGRpZ2l0ICYmIGRpZ2l0IDw9IDkpOworICAgICAgICAgICAgcmVz
dWx0ID0gcmVzdWx0ICogMTAgKyBkaWdpdDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKyAgICAKKyAgICAKKyAgICB2b2lkIEJpZ251bTo6QXNzaWduRGVjaW1hbFN0
cmluZyhWZWN0b3I8Y29uc3QgY2hhcj4gdmFsdWUpIHsKKyAgICAgICAgLy8gMl42NCA9IDE4NDQ2
NzQ0MDczNzA5NTUxNjE2ID4gMTBeMTkKKyAgICAgICAgY29uc3QgaW50IGtNYXhVaW50NjREZWNp
bWFsRGlnaXRzID0gMTk7CisgICAgICAgIFplcm8oKTsKKyAgICAgICAgaW50IGxlbmd0aCA9IHZh
bHVlLmxlbmd0aCgpOworICAgICAgICBpbnQgcG9zID0gMDsKKyAgICAgICAgLy8gTGV0J3MganVz
dCBzYXkgdGhhdCBlYWNoIGRpZ2l0IG5lZWRzIDQgYml0cy4KKyAgICAgICAgd2hpbGUgKGxlbmd0
aCA+PSBrTWF4VWludDY0RGVjaW1hbERpZ2l0cykgeworICAgICAgICAgICAgdWludDY0X3QgZGln
aXRzID0gUmVhZFVJbnQ2NCh2YWx1ZSwgcG9zLCBrTWF4VWludDY0RGVjaW1hbERpZ2l0cyk7Cisg
ICAgICAgICAgICBwb3MgKz0ga01heFVpbnQ2NERlY2ltYWxEaWdpdHM7CisgICAgICAgICAgICBs
ZW5ndGggLT0ga01heFVpbnQ2NERlY2ltYWxEaWdpdHM7CisgICAgICAgICAgICBNdWx0aXBseUJ5
UG93ZXJPZlRlbihrTWF4VWludDY0RGVjaW1hbERpZ2l0cyk7CisgICAgICAgICAgICBBZGRVSW50
NjQoZGlnaXRzKTsKKyAgICAgICAgfQorICAgICAgICB1aW50NjRfdCBkaWdpdHMgPSBSZWFkVUlu
dDY0KHZhbHVlLCBwb3MsIGxlbmd0aCk7CisgICAgICAgIE11bHRpcGx5QnlQb3dlck9mVGVuKGxl
bmd0aCk7CisgICAgICAgIEFkZFVJbnQ2NChkaWdpdHMpOworICAgICAgICBDbGFtcCgpOworICAg
IH0KKyAgICAKKyAgICAKKyAgICBzdGF0aWMgaW50IEhleENoYXJWYWx1ZShjaGFyIGMpIHsKKyAg
ICAgICAgaWYgKCcwJyA8PSBjICYmIGMgPD0gJzknKSByZXR1cm4gYyAtICcwJzsKKyAgICAgICAg
aWYgKCdhJyA8PSBjICYmIGMgPD0gJ2YnKSByZXR1cm4gMTAgKyBjIC0gJ2EnOworICAgICAgICBp
ZiAoJ0EnIDw9IGMgJiYgYyA8PSAnRicpIHJldHVybiAxMCArIGMgLSAnQSc7CisgICAgICAgIFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOyAgLy8gVG8gbWFrZSBjb21waWxlciBoYXBw
eS4KKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06OkFzc2lnbkhleFN0cmluZyhW
ZWN0b3I8Y29uc3QgY2hhcj4gdmFsdWUpIHsKKyAgICAgICAgWmVybygpOworICAgICAgICBpbnQg
bGVuZ3RoID0gdmFsdWUubGVuZ3RoKCk7CisgICAgICAgIAorICAgICAgICBpbnQgbmVlZGVkX2Jp
Z2l0cyA9IGxlbmd0aCAqIDQgLyBrQmlnaXRTaXplICsgMTsKKyAgICAgICAgRW5zdXJlQ2FwYWNp
dHkobmVlZGVkX2JpZ2l0cyk7CisgICAgICAgIGludCBzdHJpbmdfaW5kZXggPSBsZW5ndGggLSAx
OworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5lZWRlZF9iaWdpdHMgLSAxOyArK2kpIHsK
KyAgICAgICAgICAgIC8vIFRoZXNlIGJpZ2l0cyBhcmUgZ3VhcmFudGVlZCB0byBiZSAiZnVsbCIu
CisgICAgICAgICAgICBDaHVuayBjdXJyZW50X2JpZ2l0ID0gMDsKKyAgICAgICAgICAgIGZvciAo
aW50IGogPSAwOyBqIDwga0JpZ2l0U2l6ZSAvIDQ7IGorKykgeworICAgICAgICAgICAgICAgIGN1
cnJlbnRfYmlnaXQgKz0gSGV4Q2hhclZhbHVlKHZhbHVlW3N0cmluZ19pbmRleC0tXSkgPDwgKGog
KiA0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJpZ2l0c19baV0gPSBjdXJyZW50X2Jp
Z2l0OworICAgICAgICB9CisgICAgICAgIHVzZWRfZGlnaXRzXyA9IG5lZWRlZF9iaWdpdHMgLSAx
OworICAgICAgICAKKyAgICAgICAgQ2h1bmsgbW9zdF9zaWduaWZpY2FudF9iaWdpdCA9IDA7ICAv
LyBDb3VsZCBiZSA9IDA7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDw9IHN0cmluZ19pbmRl
eDsgKytqKSB7CisgICAgICAgICAgICBtb3N0X3NpZ25pZmljYW50X2JpZ2l0IDw8PSA0OworICAg
ICAgICAgICAgbW9zdF9zaWduaWZpY2FudF9iaWdpdCArPSBIZXhDaGFyVmFsdWUodmFsdWVbal0p
OworICAgICAgICB9CisgICAgICAgIGlmIChtb3N0X3NpZ25pZmljYW50X2JpZ2l0ICE9IDApIHsK
KyAgICAgICAgICAgIGJpZ2l0c19bdXNlZF9kaWdpdHNfXSA9IG1vc3Rfc2lnbmlmaWNhbnRfYmln
aXQ7CisgICAgICAgICAgICB1c2VkX2RpZ2l0c18rKzsKKyAgICAgICAgfQorICAgICAgICBDbGFt
cCgpOworICAgIH0KKyAgICAKKyAgICAKKyAgICB2b2lkIEJpZ251bTo6QWRkVUludDY0KHVpbnQ2
NF90IG9wZXJhbmQpIHsKKyAgICAgICAgaWYgKG9wZXJhbmQgPT0gMCkgcmV0dXJuOworICAgICAg
ICBCaWdudW0gb3RoZXI7CisgICAgICAgIG90aGVyLkFzc2lnblVJbnQ2NChvcGVyYW5kKTsKKyAg
ICAgICAgQWRkQmlnbnVtKG90aGVyKTsKKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdu
dW06OkFkZEJpZ251bShjb25zdCBCaWdudW0mIG90aGVyKSB7CisgICAgICAgIEFTU0VSVChJc0Ns
YW1wZWQoKSk7CisgICAgICAgIEFTU0VSVChvdGhlci5Jc0NsYW1wZWQoKSk7CisgICAgICAgIAor
ICAgICAgICAvLyBJZiB0aGlzIGhhcyBhIGdyZWF0ZXIgZXhwb25lbnQgdGhhbiBvdGhlciBhcHBl
bmQgemVyby1iaWdpdHMgdG8gdGhpcy4KKyAgICAgICAgLy8gQWZ0ZXIgdGhpcyBjYWxsIGV4cG9u
ZW50XyA8PSBvdGhlci5leHBvbmVudF8uCisgICAgICAgIEFsaWduKG90aGVyKTsKKyAgICAgICAg
CisgICAgICAgIC8vIFRoZXJlIGFyZSB0d28gcG9zc2liaWxpdGllczoKKyAgICAgICAgLy8gICBh
YWFhYWFhYWFhYSAwMDAwICAod2hlcmUgdGhlIDBzIHJlcHJlc2VudCBhJ3MgZXhwb25lbnQpCisg
ICAgICAgIC8vICAgICBiYmJiYiAwMDAwMDAwMAorICAgICAgICAvLyAgIC0tLS0tLS0tLS0tLS0t
LS0KKyAgICAgICAgLy8gICBjY2NjY2NjY2NjYyAwMDAwCisgICAgICAgIC8vIG9yCisgICAgICAg
IC8vICAgIGFhYWFhYWFhYWEgMDAwMAorICAgICAgICAvLyAgYmJiYmJiYmJiIDAwMDAwMDAKKyAg
ICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIC8vICBjY2NjY2NjY2NjY2MgMDAw
MAorICAgICAgICAvLyBJbiBib3RoIGNhc2VzIHdlIG1pZ2h0IG5lZWQgYSBjYXJyeSBiaWdpdC4K
KyAgICAgICAgCisgICAgICAgIEVuc3VyZUNhcGFjaXR5KDEgKyBNYXgoQmlnaXRMZW5ndGgoKSwg
b3RoZXIuQmlnaXRMZW5ndGgoKSkgLSBleHBvbmVudF8pOworICAgICAgICBDaHVuayBjYXJyeSA9
IDA7CisgICAgICAgIGludCBiaWdpdF9wb3MgPSBvdGhlci5leHBvbmVudF8gLSBleHBvbmVudF87
CisgICAgICAgIEFTU0VSVChiaWdpdF9wb3MgPj0gMCk7CisgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgb3RoZXIudXNlZF9kaWdpdHNfOyArK2kpIHsKKyAgICAgICAgICAgIENodW5rIHN1bSA9
IGJpZ2l0c19bYmlnaXRfcG9zXSArIG90aGVyLmJpZ2l0c19baV0gKyBjYXJyeTsKKyAgICAgICAg
ICAgIGJpZ2l0c19bYmlnaXRfcG9zXSA9IHN1bSAmIGtCaWdpdE1hc2s7CisgICAgICAgICAgICBj
YXJyeSA9IHN1bSA+PiBrQmlnaXRTaXplOworICAgICAgICAgICAgYmlnaXRfcG9zKys7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHdoaWxlIChjYXJyeSAhPSAwKSB7CisgICAgICAgICAg
ICBDaHVuayBzdW0gPSBiaWdpdHNfW2JpZ2l0X3Bvc10gKyBjYXJyeTsKKyAgICAgICAgICAgIGJp
Z2l0c19bYmlnaXRfcG9zXSA9IHN1bSAmIGtCaWdpdE1hc2s7CisgICAgICAgICAgICBjYXJyeSA9
IHN1bSA+PiBrQmlnaXRTaXplOworICAgICAgICAgICAgYmlnaXRfcG9zKys7CisgICAgICAgIH0K
KyAgICAgICAgdXNlZF9kaWdpdHNfID0gTWF4KGJpZ2l0X3BvcywgdXNlZF9kaWdpdHNfKTsKKyAg
ICAgICAgQVNTRVJUKElzQ2xhbXBlZCgpKTsKKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBC
aWdudW06OlN1YnRyYWN0QmlnbnVtKGNvbnN0IEJpZ251bSYgb3RoZXIpIHsKKyAgICAgICAgQVNT
RVJUKElzQ2xhbXBlZCgpKTsKKyAgICAgICAgQVNTRVJUKG90aGVyLklzQ2xhbXBlZCgpKTsKKyAg
ICAgICAgLy8gV2UgcmVxdWlyZSB0aGlzIHRvIGJlIGJpZ2dlciB0aGFuIG90aGVyLgorICAgICAg
ICBBU1NFUlQoTGVzc0VxdWFsKG90aGVyLCAqdGhpcykpOworICAgICAgICAKKyAgICAgICAgQWxp
Z24ob3RoZXIpOworICAgICAgICAKKyAgICAgICAgaW50IG9mZnNldCA9IG90aGVyLmV4cG9uZW50
XyAtIGV4cG9uZW50XzsKKyAgICAgICAgQ2h1bmsgYm9ycm93ID0gMDsKKyAgICAgICAgaW50IGk7
CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBvdGhlci51c2VkX2RpZ2l0c187ICsraSkgeworICAg
ICAgICAgICAgQVNTRVJUKChib3Jyb3cgPT0gMCkgfHwgKGJvcnJvdyA9PSAxKSk7CisgICAgICAg
ICAgICBDaHVuayBkaWZmZXJlbmNlID0gYmlnaXRzX1tpICsgb2Zmc2V0XSAtIG90aGVyLmJpZ2l0
c19baV0gLSBib3Jyb3c7CisgICAgICAgICAgICBiaWdpdHNfW2kgKyBvZmZzZXRdID0gZGlmZmVy
ZW5jZSAmIGtCaWdpdE1hc2s7CisgICAgICAgICAgICBib3Jyb3cgPSBkaWZmZXJlbmNlID4+IChr
Q2h1bmtTaXplIC0gMSk7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKGJvcnJvdyAhPSAwKSB7
CisgICAgICAgICAgICBDaHVuayBkaWZmZXJlbmNlID0gYmlnaXRzX1tpICsgb2Zmc2V0XSAtIGJv
cnJvdzsKKyAgICAgICAgICAgIGJpZ2l0c19baSArIG9mZnNldF0gPSBkaWZmZXJlbmNlICYga0Jp
Z2l0TWFzazsKKyAgICAgICAgICAgIGJvcnJvdyA9IGRpZmZlcmVuY2UgPj4gKGtDaHVua1NpemUg
LSAxKTsKKyAgICAgICAgICAgICsraTsKKyAgICAgICAgfQorICAgICAgICBDbGFtcCgpOworICAg
IH0KKyAgICAKKyAgICAKKyAgICB2b2lkIEJpZ251bTo6U2hpZnRMZWZ0KGludCBzaGlmdF9hbW91
bnQpIHsKKyAgICAgICAgaWYgKHVzZWRfZGlnaXRzXyA9PSAwKSByZXR1cm47CisgICAgICAgIGV4
cG9uZW50XyArPSBzaGlmdF9hbW91bnQgLyBrQmlnaXRTaXplOworICAgICAgICBpbnQgbG9jYWxf
c2hpZnQgPSBzaGlmdF9hbW91bnQgJSBrQmlnaXRTaXplOworICAgICAgICBFbnN1cmVDYXBhY2l0
eSh1c2VkX2RpZ2l0c18gKyAxKTsKKyAgICAgICAgQmlnaXRzU2hpZnRMZWZ0KGxvY2FsX3NoaWZ0
KTsKKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06Ok11bHRpcGx5QnlVSW50MzIo
dWludDMyX3QgZmFjdG9yKSB7CisgICAgICAgIGlmIChmYWN0b3IgPT0gMSkgcmV0dXJuOworICAg
ICAgICBpZiAoZmFjdG9yID09IDApIHsKKyAgICAgICAgICAgIFplcm8oKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAodXNlZF9kaWdpdHNfID09IDApIHJldHVy
bjsKKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBwcm9kdWN0IG9mIGEgYmlnaXQgd2l0aCB0aGUg
ZmFjdG9yIGlzIG9mIHNpemUga0JpZ2l0U2l6ZSArIDMyLgorICAgICAgICAvLyBBc3NlcnQgdGhh
dCB0aGlzIG51bWJlciArIDEgKGZvciB0aGUgY2FycnkpIGZpdHMgaW50byBkb3VibGUgY2h1bmsu
CisgICAgICAgIEFTU0VSVChrRG91YmxlQ2h1bmtTaXplID49IGtCaWdpdFNpemUgKyAzMiArIDEp
OworICAgICAgICBEb3VibGVDaHVuayBjYXJyeSA9IDA7CisgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgdXNlZF9kaWdpdHNfOyArK2kpIHsKKyAgICAgICAgICAgIERvdWJsZUNodW5rIHByb2R1
Y3QgPSBzdGF0aWNfY2FzdDxEb3VibGVDaHVuaz4oZmFjdG9yKSAqIGJpZ2l0c19baV0gKyBjYXJy
eTsKKyAgICAgICAgICAgIGJpZ2l0c19baV0gPSBzdGF0aWNfY2FzdDxDaHVuaz4ocHJvZHVjdCAm
IGtCaWdpdE1hc2spOworICAgICAgICAgICAgY2FycnkgPSAocHJvZHVjdCA+PiBrQmlnaXRTaXpl
KTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoY2FycnkgIT0gMCkgeworICAgICAgICAgICAg
RW5zdXJlQ2FwYWNpdHkodXNlZF9kaWdpdHNfICsgMSk7CisgICAgICAgICAgICBiaWdpdHNfW3Vz
ZWRfZGlnaXRzX10gPSBjYXJyeSAmIGtCaWdpdE1hc2s7CisgICAgICAgICAgICB1c2VkX2RpZ2l0
c18rKzsKKyAgICAgICAgICAgIGNhcnJ5ID4+PSBrQmlnaXRTaXplOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpNdWx0aXBseUJ5VUludDY0KHVpbnQ2NF90
IGZhY3RvcikgeworICAgICAgICBpZiAoZmFjdG9yID09IDEpIHJldHVybjsKKyAgICAgICAgaWYg
KGZhY3RvciA9PSAwKSB7CisgICAgICAgICAgICBaZXJvKCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKGtCaWdpdFNpemUgPCAzMik7CisgICAgICAgIHVp
bnQ2NF90IGNhcnJ5ID0gMDsKKyAgICAgICAgdWludDY0X3QgbG93ID0gZmFjdG9yICYgMHhGRkZG
RkZGRjsKKyAgICAgICAgdWludDY0X3QgaGlnaCA9IGZhY3RvciA+PiAzMjsKKyAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCB1c2VkX2RpZ2l0c187ICsraSkgeworICAgICAgICAgICAgdWludDY0
X3QgcHJvZHVjdF9sb3cgPSBsb3cgKiBiaWdpdHNfW2ldOworICAgICAgICAgICAgdWludDY0X3Qg
cHJvZHVjdF9oaWdoID0gaGlnaCAqIGJpZ2l0c19baV07CisgICAgICAgICAgICB1aW50NjRfdCB0
bXAgPSAoY2FycnkgJiBrQmlnaXRNYXNrKSArIHByb2R1Y3RfbG93OworICAgICAgICAgICAgYmln
aXRzX1tpXSA9IHRtcCAmIGtCaWdpdE1hc2s7CisgICAgICAgICAgICBjYXJyeSA9IChjYXJyeSA+
PiBrQmlnaXRTaXplKSArICh0bXAgPj4ga0JpZ2l0U2l6ZSkgKworICAgICAgICAgICAgKHByb2R1
Y3RfaGlnaCA8PCAoMzIgLSBrQmlnaXRTaXplKSk7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUg
KGNhcnJ5ICE9IDApIHsKKyAgICAgICAgICAgIEVuc3VyZUNhcGFjaXR5KHVzZWRfZGlnaXRzXyAr
IDEpOworICAgICAgICAgICAgYmlnaXRzX1t1c2VkX2RpZ2l0c19dID0gY2FycnkgJiBrQmlnaXRN
YXNrOworICAgICAgICAgICAgdXNlZF9kaWdpdHNfKys7CisgICAgICAgICAgICBjYXJyeSA+Pj0g
a0JpZ2l0U2l6ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICB2b2lkIEJpZ251
bTo6TXVsdGlwbHlCeVBvd2VyT2ZUZW4oaW50IGV4cG9uZW50KSB7CisgICAgICAgIGNvbnN0IHVp
bnQ2NF90IGtGaXZlMjcgPSBVSU5UNjRfMlBBUlRfQygweDY3NjVjNzkzLCBmYTEwMDc5ZCk7Cisg
ICAgICAgIGNvbnN0IHVpbnQxNl90IGtGaXZlMSA9IDU7CisgICAgICAgIGNvbnN0IHVpbnQxNl90
IGtGaXZlMiA9IGtGaXZlMSAqIDU7CisgICAgICAgIGNvbnN0IHVpbnQxNl90IGtGaXZlMyA9IGtG
aXZlMiAqIDU7CisgICAgICAgIGNvbnN0IHVpbnQxNl90IGtGaXZlNCA9IGtGaXZlMyAqIDU7Cisg
ICAgICAgIGNvbnN0IHVpbnQxNl90IGtGaXZlNSA9IGtGaXZlNCAqIDU7CisgICAgICAgIGNvbnN0
IHVpbnQxNl90IGtGaXZlNiA9IGtGaXZlNSAqIDU7CisgICAgICAgIGNvbnN0IHVpbnQzMl90IGtG
aXZlNyA9IGtGaXZlNiAqIDU7CisgICAgICAgIGNvbnN0IHVpbnQzMl90IGtGaXZlOCA9IGtGaXZl
NyAqIDU7CisgICAgICAgIGNvbnN0IHVpbnQzMl90IGtGaXZlOSA9IGtGaXZlOCAqIDU7CisgICAg
ICAgIGNvbnN0IHVpbnQzMl90IGtGaXZlMTAgPSBrRml2ZTkgKiA1OworICAgICAgICBjb25zdCB1
aW50MzJfdCBrRml2ZTExID0ga0ZpdmUxMCAqIDU7CisgICAgICAgIGNvbnN0IHVpbnQzMl90IGtG
aXZlMTIgPSBrRml2ZTExICogNTsKKyAgICAgICAgY29uc3QgdWludDMyX3Qga0ZpdmUxMyA9IGtG
aXZlMTIgKiA1OworICAgICAgICBjb25zdCB1aW50MzJfdCBrRml2ZTFfdG9fMTJbXSA9CisgICAg
ICAgIHsga0ZpdmUxLCBrRml2ZTIsIGtGaXZlMywga0ZpdmU0LCBrRml2ZTUsIGtGaXZlNiwKKyAg
ICAgICAgICAgIGtGaXZlNywga0ZpdmU4LCBrRml2ZTksIGtGaXZlMTAsIGtGaXZlMTEsIGtGaXZl
MTIgfTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChleHBvbmVudCA+PSAwKTsKKyAgICAgICAg
aWYgKGV4cG9uZW50ID09IDApIHJldHVybjsKKyAgICAgICAgaWYgKHVzZWRfZGlnaXRzXyA9PSAw
KSByZXR1cm47CisgICAgICAgIAorICAgICAgICAvLyBXZSBzaGlmdCBieSBleHBvbmVudCBhdCB0
aGUgZW5kIGp1c3QgYmVmb3JlIHJldHVybmluZy4KKyAgICAgICAgaW50IHJlbWFpbmluZ19leHBv
bmVudCA9IGV4cG9uZW50OworICAgICAgICB3aGlsZSAocmVtYWluaW5nX2V4cG9uZW50ID49IDI3
KSB7CisgICAgICAgICAgICBNdWx0aXBseUJ5VUludDY0KGtGaXZlMjcpOworICAgICAgICAgICAg
cmVtYWluaW5nX2V4cG9uZW50IC09IDI3OworICAgICAgICB9CisgICAgICAgIHdoaWxlIChyZW1h
aW5pbmdfZXhwb25lbnQgPj0gMTMpIHsKKyAgICAgICAgICAgIE11bHRpcGx5QnlVSW50MzIoa0Zp
dmUxMyk7CisgICAgICAgICAgICByZW1haW5pbmdfZXhwb25lbnQgLT0gMTM7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHJlbWFpbmluZ19leHBvbmVudCA+IDApIHsKKyAgICAgICAgICAgIE11bHRp
cGx5QnlVSW50MzIoa0ZpdmUxX3RvXzEyW3JlbWFpbmluZ19leHBvbmVudCAtIDFdKTsKKyAgICAg
ICAgfQorICAgICAgICBTaGlmdExlZnQoZXhwb25lbnQpOworICAgIH0KKyAgICAKKyAgICAKKyAg
ICB2b2lkIEJpZ251bTo6U3F1YXJlKCkgeworICAgICAgICBBU1NFUlQoSXNDbGFtcGVkKCkpOwor
ICAgICAgICBpbnQgcHJvZHVjdF9sZW5ndGggPSAyICogdXNlZF9kaWdpdHNfOworICAgICAgICBF
bnN1cmVDYXBhY2l0eShwcm9kdWN0X2xlbmd0aCk7CisgICAgICAgIAorICAgICAgICAvLyBDb21i
YSBtdWx0aXBsaWNhdGlvbjogY29tcHV0ZSBlYWNoIGNvbHVtbiBzZXBhcmF0ZWx5LgorICAgICAg
ICAvLyBFeGFtcGxlOiByID0gYTJhMWEwICogYjJiMWIwLgorICAgICAgICAvLyAgICByID0gIDEg
ICAgKiBhMGIwICsKKyAgICAgICAgLy8gICAgICAgIDEwICAgICogKGExYjAgKyBhMGIxKSArCisg
ICAgICAgIC8vICAgICAgICAxMDAgICAqIChhMmIwICsgYTFiMSArIGEwYjIpICsKKyAgICAgICAg
Ly8gICAgICAgIDEwMDAgICogKGEyYjEgKyBhMWIyKSArCisgICAgICAgIC8vICAgICAgICAxMDAw
MCAqIGEyYjIKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSW4gdGhlIHdvcnN0IGNhc2Ugd2UgaGF2
ZSB0byBhY2N1bXVsYXRlIG5iLWRpZ2l0cyBwcm9kdWN0cyBvZiBkaWdpdCpkaWdpdC4KKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIGFkZGl0aW9uYWwgbnVtYmVyIG9mIGJp
dHMgaW4gYSBEb3VibGVDaHVuayBhcmUgZW5vdWdoIHRvCisgICAgICAgIC8vIHN1bSB1cCB1c2Vk
X2RpZ2l0cyBvZiBCaWdpdCpCaWdpdC4KKyAgICAgICAgaWYgKCgxIDw8ICgyICogKGtDaHVua1Np
emUgLSBrQmlnaXRTaXplKSkpIDw9IHVzZWRfZGlnaXRzXykgeworICAgICAgICAgICAgVU5JTVBM
RU1FTlRFRCgpOworICAgICAgICB9CisgICAgICAgIERvdWJsZUNodW5rIGFjY3VtdWxhdG9yID0g
MDsKKyAgICAgICAgLy8gRmlyc3Qgc2hpZnQgdGhlIGRpZ2l0cyBzbyB3ZSBkb24ndCBvdmVyd3Jp
dGUgdGhlbS4KKyAgICAgICAgaW50IGNvcHlfb2Zmc2V0ID0gdXNlZF9kaWdpdHNfOworICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHVzZWRfZGlnaXRzXzsgKytpKSB7CisgICAgICAgICAgICBi
aWdpdHNfW2NvcHlfb2Zmc2V0ICsgaV0gPSBiaWdpdHNfW2ldOworICAgICAgICB9CisgICAgICAg
IC8vIFdlIGhhdmUgdHdvIGxvb3BzIHRvIGF2b2lkIHNvbWUgJ2lmJ3MgaW4gdGhlIGxvb3AuCisg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdXNlZF9kaWdpdHNfOyArK2kpIHsKKyAgICAgICAg
ICAgIC8vIFByb2Nlc3MgdGVtcG9yYXJ5IGRpZ2l0IGkgd2l0aCBwb3dlciBpLgorICAgICAgICAg
ICAgLy8gVGhlIHN1bSBvZiB0aGUgdHdvIGluZGljZXMgbXVzdCBiZSBlcXVhbCB0byBpLgorICAg
ICAgICAgICAgaW50IGJpZ2l0X2luZGV4MSA9IGk7CisgICAgICAgICAgICBpbnQgYmlnaXRfaW5k
ZXgyID0gMDsKKyAgICAgICAgICAgIC8vIFN1bSBhbGwgb2YgdGhlIHN1Yi1wcm9kdWN0cy4KKyAg
ICAgICAgICAgIHdoaWxlIChiaWdpdF9pbmRleDEgPj0gMCkgeworICAgICAgICAgICAgICAgIENo
dW5rIGNodW5rMSA9IGJpZ2l0c19bY29weV9vZmZzZXQgKyBiaWdpdF9pbmRleDFdOworICAgICAg
ICAgICAgICAgIENodW5rIGNodW5rMiA9IGJpZ2l0c19bY29weV9vZmZzZXQgKyBiaWdpdF9pbmRl
eDJdOworICAgICAgICAgICAgICAgIGFjY3VtdWxhdG9yICs9IHN0YXRpY19jYXN0PERvdWJsZUNo
dW5rPihjaHVuazEpICogY2h1bmsyOworICAgICAgICAgICAgICAgIGJpZ2l0X2luZGV4MS0tOwor
ICAgICAgICAgICAgICAgIGJpZ2l0X2luZGV4MisrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYmlnaXRzX1tpXSA9IHN0YXRpY19jYXN0PENodW5rPihhY2N1bXVsYXRvcikgJiBrQmlnaXRN
YXNrOworICAgICAgICAgICAgYWNjdW11bGF0b3IgPj49IGtCaWdpdFNpemU7CisgICAgICAgIH0K
KyAgICAgICAgZm9yIChpbnQgaSA9IHVzZWRfZGlnaXRzXzsgaSA8IHByb2R1Y3RfbGVuZ3RoOyAr
K2kpIHsKKyAgICAgICAgICAgIGludCBiaWdpdF9pbmRleDEgPSB1c2VkX2RpZ2l0c18gLSAxOwor
ICAgICAgICAgICAgaW50IGJpZ2l0X2luZGV4MiA9IGkgLSBiaWdpdF9pbmRleDE7CisgICAgICAg
ICAgICAvLyBJbnZhcmlhbnQ6IHN1bSBvZiBib3RoIGluZGljZXMgaXMgYWdhaW4gZXF1YWwgdG8g
aS4KKyAgICAgICAgICAgIC8vIElubmVyIGxvb3AgcnVucyAwIHRpbWVzIG9uIGxhc3QgaXRlcmF0
aW9uLCBlbXB0eWluZyBhY2N1bXVsYXRvci4KKyAgICAgICAgICAgIHdoaWxlIChiaWdpdF9pbmRl
eDIgPCB1c2VkX2RpZ2l0c18pIHsKKyAgICAgICAgICAgICAgICBDaHVuayBjaHVuazEgPSBiaWdp
dHNfW2NvcHlfb2Zmc2V0ICsgYmlnaXRfaW5kZXgxXTsKKyAgICAgICAgICAgICAgICBDaHVuayBj
aHVuazIgPSBiaWdpdHNfW2NvcHlfb2Zmc2V0ICsgYmlnaXRfaW5kZXgyXTsKKyAgICAgICAgICAg
ICAgICBhY2N1bXVsYXRvciArPSBzdGF0aWNfY2FzdDxEb3VibGVDaHVuaz4oY2h1bmsxKSAqIGNo
dW5rMjsKKyAgICAgICAgICAgICAgICBiaWdpdF9pbmRleDEtLTsKKyAgICAgICAgICAgICAgICBi
aWdpdF9pbmRleDIrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFRoZSBvdmVyd3Jp
dHRlbiBiaWdpdHNfW2ldIHdpbGwgbmV2ZXIgYmUgcmVhZCBpbiBmdXJ0aGVyIGxvb3AgaXRlcmF0
aW9ucywKKyAgICAgICAgICAgIC8vIGJlY2F1c2UgYmlnaXRfaW5kZXgxIGFuZCBiaWdpdF9pbmRl
eDIgYXJlIGFsd2F5cyBncmVhdGVyCisgICAgICAgICAgICAvLyB0aGFuIGkgLSB1c2VkX2RpZ2l0
c18uCisgICAgICAgICAgICBiaWdpdHNfW2ldID0gc3RhdGljX2Nhc3Q8Q2h1bms+KGFjY3VtdWxh
dG9yKSAmIGtCaWdpdE1hc2s7CisgICAgICAgICAgICBhY2N1bXVsYXRvciA+Pj0ga0JpZ2l0U2l6
ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBTaW5jZSB0aGUgcmVzdWx0IHdhcyBndWFyYW50ZWVk
IHRvIGxpZSBpbnNpZGUgdGhlIG51bWJlciB0aGUKKyAgICAgICAgLy8gYWNjdW11bGF0b3IgbXVz
dCBiZSAwIG5vdy4KKyAgICAgICAgQVNTRVJUKGFjY3VtdWxhdG9yID09IDApOworICAgICAgICAK
KyAgICAgICAgLy8gRG9uJ3QgZm9yZ2V0IHRvIHVwZGF0ZSB0aGUgdXNlZF9kaWdpdHMgYW5kIHRo
ZSBleHBvbmVudC4KKyAgICAgICAgdXNlZF9kaWdpdHNfID0gcHJvZHVjdF9sZW5ndGg7CisgICAg
ICAgIGV4cG9uZW50XyAqPSAyOworICAgICAgICBDbGFtcCgpOworICAgIH0KKyAgICAKKyAgICAK
KyAgICB2b2lkIEJpZ251bTo6QXNzaWduUG93ZXJVSW50MTYodWludDE2X3QgYmFzZSwgaW50IHBv
d2VyX2V4cG9uZW50KSB7CisgICAgICAgIEFTU0VSVChiYXNlICE9IDApOworICAgICAgICBBU1NF
UlQocG93ZXJfZXhwb25lbnQgPj0gMCk7CisgICAgICAgIGlmIChwb3dlcl9leHBvbmVudCA9PSAw
KSB7CisgICAgICAgICAgICBBc3NpZ25VSW50MTYoMSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgWmVybygpOworICAgICAgICBpbnQgc2hpZnRzID0gMDsKKyAgICAg
ICAgLy8gV2UgZXhwZWN0IGJhc2UgdG8gYmUgaW4gcmFuZ2UgMi0zMiwgYW5kIG1vc3Qgb2Z0ZW4g
dG8gYmUgMTAuCisgICAgICAgIC8vIEl0IGRvZXMgbm90IG1ha2UgbXVjaCBzZW5zZSB0byBpbXBs
ZW1lbnQgZGlmZmVyZW50IGFsZ29yaXRobXMgZm9yIGNvdW50aW5nCisgICAgICAgIC8vIHRoZSBi
aXRzLgorICAgICAgICB3aGlsZSAoKGJhc2UgJiAxKSA9PSAwKSB7CisgICAgICAgICAgICBiYXNl
ID4+PSAxOworICAgICAgICAgICAgc2hpZnRzKys7CisgICAgICAgIH0KKyAgICAgICAgaW50IGJp
dF9zaXplID0gMDsKKyAgICAgICAgaW50IHRtcF9iYXNlID0gYmFzZTsKKyAgICAgICAgd2hpbGUg
KHRtcF9iYXNlICE9IDApIHsKKyAgICAgICAgICAgIHRtcF9iYXNlID4+PSAxOworICAgICAgICAg
ICAgYml0X3NpemUrKzsKKyAgICAgICAgfQorICAgICAgICBpbnQgZmluYWxfc2l6ZSA9IGJpdF9z
aXplICogcG93ZXJfZXhwb25lbnQ7CisgICAgICAgIC8vIDEgZXh0cmEgYmlnaXQgZm9yIHRoZSBz
aGlmdGluZywgYW5kIG9uZSBmb3Igcm91bmRlZCBmaW5hbF9zaXplLgorICAgICAgICBFbnN1cmVD
YXBhY2l0eShmaW5hbF9zaXplIC8ga0JpZ2l0U2l6ZSArIDIpOworICAgICAgICAKKyAgICAgICAg
Ly8gTGVmdCB0byBSaWdodCBleHBvbmVudGlhdGlvbi4KKyAgICAgICAgaW50IG1hc2sgPSAxOwor
ICAgICAgICB3aGlsZSAocG93ZXJfZXhwb25lbnQgPj0gbWFzaykgbWFzayA8PD0gMTsKKyAgICAg
ICAgCisgICAgICAgIC8vIFRoZSBtYXNrIGlzIG5vdyBwb2ludGluZyB0byB0aGUgYml0IGFib3Zl
IHRoZSBtb3N0IHNpZ25pZmljYW50IDEtYml0IG9mCisgICAgICAgIC8vIHBvd2VyX2V4cG9uZW50
LgorICAgICAgICAvLyBHZXQgcmlkIG9mIGZpcnN0IDEtYml0OworICAgICAgICBtYXNrID4+PSAy
OworICAgICAgICB1aW50NjRfdCB0aGlzX3ZhbHVlID0gYmFzZTsKKyAgICAgICAgCisgICAgICAg
IGJvb2wgZGVsYXllZF9tdWx0aXBsaWNpYXRpb24gPSBmYWxzZTsKKyAgICAgICAgY29uc3QgdWlu
dDY0X3QgbWF4XzMyYml0cyA9IDB4RkZGRkZGRkY7CisgICAgICAgIHdoaWxlIChtYXNrICE9IDAg
JiYgdGhpc192YWx1ZSA8PSBtYXhfMzJiaXRzKSB7CisgICAgICAgICAgICB0aGlzX3ZhbHVlID0g
dGhpc192YWx1ZSAqIHRoaXNfdmFsdWU7CisgICAgICAgICAgICAvLyBWZXJpZnkgdGhhdCB0aGVy
ZSBpcyBlbm91Z2ggc3BhY2UgaW4gdGhpc192YWx1ZSB0byBwZXJmb3JtIHRoZQorICAgICAgICAg
ICAgLy8gbXVsdGlwbGljYXRpb24uICBUaGUgZmlyc3QgYml0X3NpemUgYml0cyBtdXN0IGJlIDAu
CisgICAgICAgICAgICBpZiAoKHBvd2VyX2V4cG9uZW50ICYgbWFzaykgIT0gMCkgeworICAgICAg
ICAgICAgICAgIHVpbnQ2NF90IGJhc2VfYml0c19tYXNrID0KKyAgICAgICAgICAgICAgICB+KChz
dGF0aWNfY2FzdDx1aW50NjRfdD4oMSkgPDwgKDY0IC0gYml0X3NpemUpKSAtIDEpOworICAgICAg
ICAgICAgICAgIGJvb2wgaGlnaF9iaXRzX3plcm8gPSAodGhpc192YWx1ZSAmIGJhc2VfYml0c19t
YXNrKSA9PSAwOworICAgICAgICAgICAgICAgIGlmIChoaWdoX2JpdHNfemVybykgeworICAgICAg
ICAgICAgICAgICAgICB0aGlzX3ZhbHVlICo9IGJhc2U7CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgZGVsYXllZF9tdWx0aXBsaWNpYXRpb24gPSB0cnVlOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1hc2sgPj49IDE7
CisgICAgICAgIH0KKyAgICAgICAgQXNzaWduVUludDY0KHRoaXNfdmFsdWUpOworICAgICAgICBp
ZiAoZGVsYXllZF9tdWx0aXBsaWNpYXRpb24pIHsKKyAgICAgICAgICAgIE11bHRpcGx5QnlVSW50
MzIoYmFzZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIE5vdyBkbyB0aGUgc2Ft
ZSB0aGluZyBhcyBhIGJpZ251bS4KKyAgICAgICAgd2hpbGUgKG1hc2sgIT0gMCkgeworICAgICAg
ICAgICAgU3F1YXJlKCk7CisgICAgICAgICAgICBpZiAoKHBvd2VyX2V4cG9uZW50ICYgbWFzaykg
IT0gMCkgeworICAgICAgICAgICAgICAgIE11bHRpcGx5QnlVSW50MzIoYmFzZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBtYXNrID4+PSAxOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICAvLyBBbmQgZmluYWxseSBhZGQgdGhlIHNhdmVkIHNoaWZ0cy4KKyAgICAgICAgU2hpZnRM
ZWZ0KHNoaWZ0cyAqIHBvd2VyX2V4cG9uZW50KTsKKyAgICB9CisgICAgCisgICAgCisgICAgLy8g
UHJlY29uZGl0aW9uOiB0aGlzL290aGVyIDwgMTZiaXQuCisgICAgdWludDE2X3QgQmlnbnVtOjpE
aXZpZGVNb2R1bG9JbnRCaWdudW0oY29uc3QgQmlnbnVtJiBvdGhlcikgeworICAgICAgICBBU1NF
UlQoSXNDbGFtcGVkKCkpOworICAgICAgICBBU1NFUlQob3RoZXIuSXNDbGFtcGVkKCkpOworICAg
ICAgICBBU1NFUlQob3RoZXIudXNlZF9kaWdpdHNfID4gMCk7CisgICAgICAgIAorICAgICAgICAv
LyBFYXN5IGNhc2U6IGlmIHdlIGhhdmUgbGVzcyBkaWdpdHMgdGhhbiB0aGUgZGl2aXNvciB0aGFu
IHRoZSByZXN1bHQgaXMgMC4KKyAgICAgICAgLy8gTm90ZTogdGhpcyBoYW5kbGVzIHRoZSBjYXNl
IHdoZXJlIHRoaXMgPT0gMCwgdG9vLgorICAgICAgICBpZiAoQmlnaXRMZW5ndGgoKSA8IG90aGVy
LkJpZ2l0TGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBBbGlnbihvdGhlcik7CisgICAgICAgIAorICAgICAgICB1aW50MTZfdCBy
ZXN1bHQgPSAwOworICAgICAgICAKKyAgICAgICAgLy8gU3RhcnQgYnkgcmVtb3ZpbmcgbXVsdGlw
bGVzIG9mICdvdGhlcicgdW50aWwgYm90aCBudW1iZXJzIGhhdmUgdGhlIHNhbWUKKyAgICAgICAg
Ly8gbnVtYmVyIG9mIGRpZ2l0cy4KKyAgICAgICAgd2hpbGUgKEJpZ2l0TGVuZ3RoKCkgPiBvdGhl
ci5CaWdpdExlbmd0aCgpKSB7CisgICAgICAgICAgICAvLyBUaGlzIG5haXZlIGFwcHJvYWNoIGlz
IGV4dHJlbWVseSBpbmVmZmljaWVudCBpZiB0aGUgdGhpcyBkaXZpZGVkIG90aGVyCisgICAgICAg
ICAgICAvLyBtaWdodCBiZSBiaWcuIFRoaXMgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgZm9yIGRv
dWJsZVRvU3RyaW5nIHdoZXJlCisgICAgICAgICAgICAvLyB0aGUgcmVzdWx0IHNob3VsZCBiZSBz
bWFsbCAobGVzcyB0aGFuIDEwKS4KKyAgICAgICAgICAgIEFTU0VSVChvdGhlci5iaWdpdHNfW290
aGVyLnVzZWRfZGlnaXRzXyAtIDFdID49ICgoMSA8PCBrQmlnaXRTaXplKSAvIDE2KSk7CisgICAg
ICAgICAgICAvLyBSZW1vdmUgdGhlIG11bHRpcGxlcyBvZiB0aGUgZmlyc3QgZGlnaXQuCisgICAg
ICAgICAgICAvLyBFeGFtcGxlIHRoaXMgPSAyMyBhbmQgb3RoZXIgZXF1YWxzIDkuIC0+IFJlbW92
ZSAyIG11bHRpcGxlcy4KKyAgICAgICAgICAgIHJlc3VsdCArPSBiaWdpdHNfW3VzZWRfZGlnaXRz
XyAtIDFdOworICAgICAgICAgICAgU3VidHJhY3RUaW1lcyhvdGhlciwgYmlnaXRzX1t1c2VkX2Rp
Z2l0c18gLSAxXSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFTU0VSVChCaWdpdExl
bmd0aCgpID09IG90aGVyLkJpZ2l0TGVuZ3RoKCkpOworICAgICAgICAKKyAgICAgICAgLy8gQm90
aCBiaWdudW1zIGFyZSBhdCB0aGUgc2FtZSBsZW5ndGggbm93LgorICAgICAgICAvLyBTaW5jZSBv
dGhlciBoYXMgbW9yZSB0aGFuIDAgZGlnaXRzIHdlIGtub3cgdGhhdCB0aGUgYWNjZXNzIHRvCisg
ICAgICAgIC8vIGJpZ2l0c19bdXNlZF9kaWdpdHNfIC0gMV0gaXMgc2FmZS4KKyAgICAgICAgQ2h1
bmsgdGhpc19iaWdpdCA9IGJpZ2l0c19bdXNlZF9kaWdpdHNfIC0gMV07CisgICAgICAgIENodW5r
IG90aGVyX2JpZ2l0ID0gb3RoZXIuYmlnaXRzX1tvdGhlci51c2VkX2RpZ2l0c18gLSAxXTsKKyAg
ICAgICAgCisgICAgICAgIGlmIChvdGhlci51c2VkX2RpZ2l0c18gPT0gMSkgeworICAgICAgICAg
ICAgLy8gU2hvcnRjdXQgZm9yIGVhc3kgKGFuZCBjb21tb24pIGNhc2UuCisgICAgICAgICAgICBp
bnQgcXVvdGllbnQgPSB0aGlzX2JpZ2l0IC8gb3RoZXJfYmlnaXQ7CisgICAgICAgICAgICBiaWdp
dHNfW3VzZWRfZGlnaXRzXyAtIDFdID0gdGhpc19iaWdpdCAtIG90aGVyX2JpZ2l0ICogcXVvdGll
bnQ7CisgICAgICAgICAgICByZXN1bHQgKz0gcXVvdGllbnQ7CisgICAgICAgICAgICBDbGFtcCgp
OworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgaW50IGRpdmlzaW9uX2VzdGltYXRlID0gdGhpc19iaWdpdCAvIChvdGhlcl9iaWdpdCArIDEp
OworICAgICAgICByZXN1bHQgKz0gZGl2aXNpb25fZXN0aW1hdGU7CisgICAgICAgIFN1YnRyYWN0
VGltZXMob3RoZXIsIGRpdmlzaW9uX2VzdGltYXRlKTsKKyAgICAgICAgCisgICAgICAgIGlmIChv
dGhlcl9iaWdpdCAqIChkaXZpc2lvbl9lc3RpbWF0ZSArIDEpID4gdGhpc19iaWdpdCkgeworICAg
ICAgICAgICAgLy8gTm8gbmVlZCB0byBldmVuIHRyeSB0byBzdWJ0cmFjdC4gRXZlbiBpZiBvdGhl
cidzIHJlbWFpbmluZyBkaWdpdHMgd2VyZSAwCisgICAgICAgICAgICAvLyBhbm90aGVyIHN1YnRy
YWN0aW9uIHdvdWxkIGJlIHRvbyBtdWNoLgorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgd2hpbGUgKExlc3NFcXVhbChvdGhlciwgKnRoaXMp
KSB7CisgICAgICAgICAgICBTdWJ0cmFjdEJpZ251bShvdGhlcik7CisgICAgICAgICAgICByZXN1
bHQrKzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAg
ICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTPgorICAgIHN0YXRpYyBpbnQgU2l6ZUluSGV4Q2hh
cnMoUyBudW1iZXIpIHsKKyAgICAgICAgQVNTRVJUKG51bWJlciA+IDApOworICAgICAgICBpbnQg
cmVzdWx0ID0gMDsKKyAgICAgICAgd2hpbGUgKG51bWJlciAhPSAwKSB7CisgICAgICAgICAgICBu
dW1iZXIgPj49IDQ7CisgICAgICAgICAgICByZXN1bHQrKzsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICAKKyAgICBzdGF0aWMgY2hhciBIZXhDaGFy
T2ZWYWx1ZShpbnQgdmFsdWUpIHsKKyAgICAgICAgQVNTRVJUKDAgPD0gdmFsdWUgJiYgdmFsdWUg
PD0gMTYpOworICAgICAgICBpZiAodmFsdWUgPCAxMCkgcmV0dXJuIHZhbHVlICsgJzAnOworICAg
ICAgICByZXR1cm4gdmFsdWUgLSAxMCArICdBJzsKKyAgICB9CisgICAgCisgICAgCisgICAgYm9v
bCBCaWdudW06OlRvSGV4U3RyaW5nKGNoYXIqIGJ1ZmZlciwgaW50IGJ1ZmZlcl9zaXplKSBjb25z
dCB7CisgICAgICAgIEFTU0VSVChJc0NsYW1wZWQoKSk7CisgICAgICAgIC8vIEVhY2ggYmlnaXQg
bXVzdCBiZSBwcmludGFibGUgYXMgc2VwYXJhdGUgaGV4LWNoYXJhY3Rlci4KKyAgICAgICAgQVNT
RVJUKGtCaWdpdFNpemUgJSA0ID09IDApOworICAgICAgICBjb25zdCBpbnQga0hleENoYXJzUGVy
QmlnaXQgPSBrQmlnaXRTaXplIC8gNDsKKyAgICAgICAgCisgICAgICAgIGlmICh1c2VkX2RpZ2l0
c18gPT0gMCkgeworICAgICAgICAgICAgaWYgKGJ1ZmZlcl9zaXplIDwgMikgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgYnVmZmVyWzBdID0gJzAnOworICAgICAgICAgICAgYnVmZmVyWzFdID0g
J1wwJzsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIC8vIFdl
IGFkZCAxIGZvciB0aGUgdGVybWluYXRpbmcgJ1wwJyBjaGFyYWN0ZXIuCisgICAgICAgIGludCBu
ZWVkZWRfY2hhcnMgPSAoQmlnaXRMZW5ndGgoKSAtIDEpICoga0hleENoYXJzUGVyQmlnaXQgKwor
ICAgICAgICBTaXplSW5IZXhDaGFycyhiaWdpdHNfW3VzZWRfZGlnaXRzXyAtIDFdKSArIDE7Cisg
ICAgICAgIGlmIChuZWVkZWRfY2hhcnMgPiBidWZmZXJfc2l6ZSkgcmV0dXJuIGZhbHNlOworICAg
ICAgICBpbnQgc3RyaW5nX2luZGV4ID0gbmVlZGVkX2NoYXJzIC0gMTsKKyAgICAgICAgYnVmZmVy
W3N0cmluZ19pbmRleC0tXSA9ICdcMCc7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXhw
b25lbnRfOyArK2kpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwga0hleENoYXJz
UGVyQmlnaXQ7ICsraikgeworICAgICAgICAgICAgICAgIGJ1ZmZlcltzdHJpbmdfaW5kZXgtLV0g
PSAnMCc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCB1c2VkX2RpZ2l0c18gLSAxOyArK2kpIHsKKyAgICAgICAgICAgIENodW5rIGN1cnJlbnRf
YmlnaXQgPSBiaWdpdHNfW2ldOworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBrSGV4
Q2hhcnNQZXJCaWdpdDsgKytqKSB7CisgICAgICAgICAgICAgICAgYnVmZmVyW3N0cmluZ19pbmRl
eC0tXSA9IEhleENoYXJPZlZhbHVlKGN1cnJlbnRfYmlnaXQgJiAweEYpOworICAgICAgICAgICAg
ICAgIGN1cnJlbnRfYmlnaXQgPj49IDQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgLy8gQW5kIGZpbmFsbHkgdGhlIGxhc3QgYmlnaXQuCisgICAgICAgIENodW5rIG1vc3Rfc2ln
bmlmaWNhbnRfYmlnaXQgPSBiaWdpdHNfW3VzZWRfZGlnaXRzXyAtIDFdOworICAgICAgICB3aGls
ZSAobW9zdF9zaWduaWZpY2FudF9iaWdpdCAhPSAwKSB7CisgICAgICAgICAgICBidWZmZXJbc3Ry
aW5nX2luZGV4LS1dID0gSGV4Q2hhck9mVmFsdWUobW9zdF9zaWduaWZpY2FudF9iaWdpdCAmIDB4
Rik7CisgICAgICAgICAgICBtb3N0X3NpZ25pZmljYW50X2JpZ2l0ID4+PSA0OworICAgICAgICB9
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAKKyAgICBCaWdudW06OkNo
dW5rIEJpZ251bTo6QmlnaXRBdChpbnQgaW5kZXgpIGNvbnN0IHsKKyAgICAgICAgaWYgKGluZGV4
ID49IEJpZ2l0TGVuZ3RoKCkpIHJldHVybiAwOworICAgICAgICBpZiAoaW5kZXggPCBleHBvbmVu
dF8pIHJldHVybiAwOworICAgICAgICByZXR1cm4gYmlnaXRzX1tpbmRleCAtIGV4cG9uZW50X107
CisgICAgfQorICAgIAorICAgIAorICAgIGludCBCaWdudW06OkNvbXBhcmUoY29uc3QgQmlnbnVt
JiBhLCBjb25zdCBCaWdudW0mIGIpIHsKKyAgICAgICAgQVNTRVJUKGEuSXNDbGFtcGVkKCkpOwor
ICAgICAgICBBU1NFUlQoYi5Jc0NsYW1wZWQoKSk7CisgICAgICAgIGludCBiaWdpdF9sZW5ndGhf
YSA9IGEuQmlnaXRMZW5ndGgoKTsKKyAgICAgICAgaW50IGJpZ2l0X2xlbmd0aF9iID0gYi5CaWdp
dExlbmd0aCgpOworICAgICAgICBpZiAoYmlnaXRfbGVuZ3RoX2EgPCBiaWdpdF9sZW5ndGhfYikg
cmV0dXJuIC0xOworICAgICAgICBpZiAoYmlnaXRfbGVuZ3RoX2EgPiBiaWdpdF9sZW5ndGhfYikg
cmV0dXJuICsxOworICAgICAgICBmb3IgKGludCBpID0gYmlnaXRfbGVuZ3RoX2EgLSAxOyBpID49
IE1pbihhLmV4cG9uZW50XywgYi5leHBvbmVudF8pOyAtLWkpIHsKKyAgICAgICAgICAgIENodW5r
IGJpZ2l0X2EgPSBhLkJpZ2l0QXQoaSk7CisgICAgICAgICAgICBDaHVuayBiaWdpdF9iID0gYi5C
aWdpdEF0KGkpOworICAgICAgICAgICAgaWYgKGJpZ2l0X2EgPCBiaWdpdF9iKSByZXR1cm4gLTE7
CisgICAgICAgICAgICBpZiAoYmlnaXRfYSA+IGJpZ2l0X2IpIHJldHVybiArMTsKKyAgICAgICAg
ICAgIC8vIE90aGVyd2lzZSB0aGV5IGFyZSBlcXVhbCB1cCB0byB0aGlzIGRpZ2l0LiBUcnkgdGhl
IG5leHQgZGlnaXQuCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAor
ICAgIAorICAgIGludCBCaWdudW06OlBsdXNDb21wYXJlKGNvbnN0IEJpZ251bSYgYSwgY29uc3Qg
QmlnbnVtJiBiLCBjb25zdCBCaWdudW0mIGMpIHsKKyAgICAgICAgQVNTRVJUKGEuSXNDbGFtcGVk
KCkpOworICAgICAgICBBU1NFUlQoYi5Jc0NsYW1wZWQoKSk7CisgICAgICAgIEFTU0VSVChjLklz
Q2xhbXBlZCgpKTsKKyAgICAgICAgaWYgKGEuQmlnaXRMZW5ndGgoKSA8IGIuQmlnaXRMZW5ndGgo
KSkgeworICAgICAgICAgICAgcmV0dXJuIFBsdXNDb21wYXJlKGIsIGEsIGMpOworICAgICAgICB9
CisgICAgICAgIGlmIChhLkJpZ2l0TGVuZ3RoKCkgKyAxIDwgYy5CaWdpdExlbmd0aCgpKSByZXR1
cm4gLTE7CisgICAgICAgIGlmIChhLkJpZ2l0TGVuZ3RoKCkgPiBjLkJpZ2l0TGVuZ3RoKCkpIHJl
dHVybiArMTsKKyAgICAgICAgLy8gVGhlIGV4cG9uZW50IGVuY29kZXMgMC1iaWdpdHMuIFNvIGlm
IHRoZXJlIGFyZSBtb3JlIDAtZGlnaXRzIGluICdhJyB0aGFuCisgICAgICAgIC8vICdiJyBoYXMg
ZGlnaXRzLCB0aGVuIHRoZSBiaWdpdC1sZW5ndGggb2YgJ2EnKydiJyBtdXN0IGJlIGVxdWFsIHRv
IHRoZSBvbmUKKyAgICAgICAgLy8gb2YgJ2EnLgorICAgICAgICBpZiAoYS5leHBvbmVudF8gPj0g
Yi5CaWdpdExlbmd0aCgpICYmIGEuQmlnaXRMZW5ndGgoKSA8IGMuQmlnaXRMZW5ndGgoKSkgewor
ICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBDaHVu
ayBib3Jyb3cgPSAwOworICAgICAgICAvLyBTdGFydGluZyBhdCBtaW5fZXhwb25lbnQgYWxsIGRp
Z2l0cyBhcmUgPT0gMC4gU28gbm8gbmVlZCB0byBjb21wYXJlIHRoZW0uCisgICAgICAgIGludCBt
aW5fZXhwb25lbnQgPSBNaW4oTWluKGEuZXhwb25lbnRfLCBiLmV4cG9uZW50XyksIGMuZXhwb25l
bnRfKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IGMuQmlnaXRMZW5ndGgoKSAtIDE7IGkgPj0gbWlu
X2V4cG9uZW50OyAtLWkpIHsKKyAgICAgICAgICAgIENodW5rIGNodW5rX2EgPSBhLkJpZ2l0QXQo
aSk7CisgICAgICAgICAgICBDaHVuayBjaHVua19iID0gYi5CaWdpdEF0KGkpOworICAgICAgICAg
ICAgQ2h1bmsgY2h1bmtfYyA9IGMuQmlnaXRBdChpKTsKKyAgICAgICAgICAgIENodW5rIHN1bSA9
IGNodW5rX2EgKyBjaHVua19iOworICAgICAgICAgICAgaWYgKHN1bSA+IGNodW5rX2MgKyBib3Jy
b3cpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKzE7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIGJvcnJvdyA9IGNodW5rX2MgKyBib3Jyb3cgLSBzdW07CisgICAgICAg
ICAgICAgICAgaWYgKGJvcnJvdyA+IDEpIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICBib3Jy
b3cgPDw9IGtCaWdpdFNpemU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGJvcnJvdyA9PSAwKSByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICAK
KyAgICAKKyAgICB2b2lkIEJpZ251bTo6Q2xhbXAoKSB7CisgICAgICAgIHdoaWxlICh1c2VkX2Rp
Z2l0c18gPiAwICYmIGJpZ2l0c19bdXNlZF9kaWdpdHNfIC0gMV0gPT0gMCkgeworICAgICAgICAg
ICAgdXNlZF9kaWdpdHNfLS07CisgICAgICAgIH0KKyAgICAgICAgaWYgKHVzZWRfZGlnaXRzXyA9
PSAwKSB7CisgICAgICAgICAgICAvLyBaZXJvLgorICAgICAgICAgICAgZXhwb25lbnRfID0gMDsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICBib29sIEJpZ251bTo6SXNDbGFtcGVk
KCkgY29uc3QgeworICAgICAgICByZXR1cm4gdXNlZF9kaWdpdHNfID09IDAgfHwgYmlnaXRzX1t1
c2VkX2RpZ2l0c18gLSAxXSAhPSAwOworICAgIH0KKyAgICAKKyAgICAKKyAgICB2b2lkIEJpZ251
bTo6WmVybygpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1c2VkX2RpZ2l0c187ICsr
aSkgeworICAgICAgICAgICAgYmlnaXRzX1tpXSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgdXNl
ZF9kaWdpdHNfID0gMDsKKyAgICAgICAgZXhwb25lbnRfID0gMDsKKyAgICB9CisgICAgCisgICAg
CisgICAgdm9pZCBCaWdudW06OkFsaWduKGNvbnN0IEJpZ251bSYgb3RoZXIpIHsKKyAgICAgICAg
aWYgKGV4cG9uZW50XyA+IG90aGVyLmV4cG9uZW50XykgeworICAgICAgICAgICAgLy8gSWYgIlgi
IHJlcHJlc2VudHMgYSAiaGlkZGVuIiBkaWdpdCAoYnkgdGhlIGV4cG9uZW50KSB0aGVuIHdlIGFy
ZSBpbiB0aGUKKyAgICAgICAgICAgIC8vIGZvbGxvd2luZyBjYXNlIChhID09IHRoaXMsIGIgPT0g
b3RoZXIpOgorICAgICAgICAgICAgLy8gYTogIGFhYWFhYVhYWFggICBvciBhOiAgIGFhYWFhWFhY
CisgICAgICAgICAgICAvLyBiOiAgICAgYmJiYmJiWCAgICAgIGI6IGJiYmJiYmJiWFgKKyAgICAg
ICAgICAgIC8vIFdlIHJlcGxhY2Ugc29tZSBvZiB0aGUgaGlkZGVuIGRpZ2l0cyAoWCkgb2YgYSB3
aXRoIDAgZGlnaXRzLgorICAgICAgICAgICAgLy8gYTogIGFhYWFhYTAwMFggICBvciBhOiAgIGFh
YWFhMFhYCisgICAgICAgICAgICBpbnQgemVyb19kaWdpdHMgPSBleHBvbmVudF8gLSBvdGhlci5l
eHBvbmVudF87CisgICAgICAgICAgICBFbnN1cmVDYXBhY2l0eSh1c2VkX2RpZ2l0c18gKyB6ZXJv
X2RpZ2l0cyk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gdXNlZF9kaWdpdHNfIC0gMTsgaSA+
PSAwOyAtLWkpIHsKKyAgICAgICAgICAgICAgICBiaWdpdHNfW2kgKyB6ZXJvX2RpZ2l0c10gPSBi
aWdpdHNfW2ldOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCB6ZXJvX2RpZ2l0czsgKytpKSB7CisgICAgICAgICAgICAgICAgYmlnaXRzX1tpXSA9IDA7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB1c2VkX2RpZ2l0c18gKz0gemVyb19kaWdpdHM7Cisg
ICAgICAgICAgICBleHBvbmVudF8gLT0gemVyb19kaWdpdHM7CisgICAgICAgICAgICBBU1NFUlQo
dXNlZF9kaWdpdHNfID49IDApOworICAgICAgICAgICAgQVNTRVJUKGV4cG9uZW50XyA+PSAwKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICB2b2lkIEJpZ251bTo6QmlnaXRzU2hp
ZnRMZWZ0KGludCBzaGlmdF9hbW91bnQpIHsKKyAgICAgICAgQVNTRVJUKHNoaWZ0X2Ftb3VudCA8
IGtCaWdpdFNpemUpOworICAgICAgICBBU1NFUlQoc2hpZnRfYW1vdW50ID49IDApOworICAgICAg
ICBDaHVuayBjYXJyeSA9IDA7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdXNlZF9kaWdp
dHNfOyArK2kpIHsKKyAgICAgICAgICAgIENodW5rIG5ld19jYXJyeSA9IGJpZ2l0c19baV0gPj4g
KGtCaWdpdFNpemUgLSBzaGlmdF9hbW91bnQpOworICAgICAgICAgICAgYmlnaXRzX1tpXSA9ICgo
YmlnaXRzX1tpXSA8PCBzaGlmdF9hbW91bnQpICsgY2FycnkpICYga0JpZ2l0TWFzazsKKyAgICAg
ICAgICAgIGNhcnJ5ID0gbmV3X2NhcnJ5OworICAgICAgICB9CisgICAgICAgIGlmIChjYXJyeSAh
PSAwKSB7CisgICAgICAgICAgICBiaWdpdHNfW3VzZWRfZGlnaXRzX10gPSBjYXJyeTsKKyAgICAg
ICAgICAgIHVzZWRfZGlnaXRzXysrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIAorICAg
IHZvaWQgQmlnbnVtOjpTdWJ0cmFjdFRpbWVzKGNvbnN0IEJpZ251bSYgb3RoZXIsIGludCBmYWN0
b3IpIHsKKyAgICAgICAgQVNTRVJUKGV4cG9uZW50XyA8PSBvdGhlci5leHBvbmVudF8pOworICAg
ICAgICBpZiAoZmFjdG9yIDwgMykgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBm
YWN0b3I7ICsraSkgeworICAgICAgICAgICAgICAgIFN1YnRyYWN0QmlnbnVtKG90aGVyKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBDaHVu
ayBib3Jyb3cgPSAwOworICAgICAgICBpbnQgZXhwb25lbnRfZGlmZiA9IG90aGVyLmV4cG9uZW50
XyAtIGV4cG9uZW50XzsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvdGhlci51c2VkX2Rp
Z2l0c187ICsraSkgeworICAgICAgICAgICAgRG91YmxlQ2h1bmsgcHJvZHVjdCA9IHN0YXRpY19j
YXN0PERvdWJsZUNodW5rPihmYWN0b3IpICogb3RoZXIuYmlnaXRzX1tpXTsKKyAgICAgICAgICAg
IERvdWJsZUNodW5rIHJlbW92ZSA9IGJvcnJvdyArIHByb2R1Y3Q7CisgICAgICAgICAgICBDaHVu
ayBkaWZmZXJlbmNlID0gYmlnaXRzX1tpICsgZXhwb25lbnRfZGlmZl0gLSAocmVtb3ZlICYga0Jp
Z2l0TWFzayk7CisgICAgICAgICAgICBiaWdpdHNfW2kgKyBleHBvbmVudF9kaWZmXSA9IGRpZmZl
cmVuY2UgJiBrQmlnaXRNYXNrOworICAgICAgICAgICAgYm9ycm93ID0gc3RhdGljX2Nhc3Q8Q2h1
bms+KChkaWZmZXJlbmNlID4+IChrQ2h1bmtTaXplIC0gMSkpICsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAocmVtb3ZlID4+IGtCaWdpdFNpemUpKTsKKyAgICAgICAg
fQorICAgICAgICBmb3IgKGludCBpID0gb3RoZXIudXNlZF9kaWdpdHNfICsgZXhwb25lbnRfZGlm
ZjsgaSA8IHVzZWRfZGlnaXRzXzsgKytpKSB7CisgICAgICAgICAgICBpZiAoYm9ycm93ID09IDAp
IHJldHVybjsKKyAgICAgICAgICAgIENodW5rIGRpZmZlcmVuY2UgPSBiaWdpdHNfW2ldIC0gYm9y
cm93OworICAgICAgICAgICAgYmlnaXRzX1tpXSA9IGRpZmZlcmVuY2UgJiBrQmlnaXRNYXNrOwor
ICAgICAgICAgICAgYm9ycm93ID0gZGlmZmVyZW5jZSA+PiAoa0NodW5rU2l6ZSAtIDEpOworICAg
ICAgICAgICAgKytpOworICAgICAgICB9CisgICAgICAgIENsYW1wKCk7CisgICAgfQorICAgIAor
ICAgIAorfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCisKK30gLy8gbmFtZXNwYWNl
IFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFh
NzUwNTgxYWE3OTcyMjllNzg4Nzk5YTJiMGIyNWI5ZmQyNDhkYjMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvYmlnbnVtLmgKQEAgLTAsMCArMSwxNDUg
QEAKKy8vIENvcHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisv
LyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAg
ICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAg
ICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
Ky8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8v
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmbmRlZiBET1VCTEVfQ09OVkVSU0lP
Tl9CSUdOVU1fSF8KKyNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05fQklHTlVNX0hfCisKKyNpbmNs
dWRlICJ1dGlscy5oIgorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIGRvdWJsZV9jb252
ZXJzaW9uIHsKKyAgICAKKyAgICBjbGFzcyBCaWdudW0geworICAgIHB1YmxpYzoKKyAgICAgICAg
Ly8gMzU4NCA9IDEyOCAqIDI4LiBXZSBjYW4gcmVwcmVzZW50IDJeMzU4NCA+IDEwXjEwMDAgYWNj
dXJhdGVseS4KKyAgICAgICAgLy8gVGhpcyBiaWdudW0gY2FuIGVuY29kZSBtdWNoIGJpZ2dlciBu
dW1iZXJzLCBzaW5jZSBpdCBjb250YWlucyBhbgorICAgICAgICAvLyBleHBvbmVudC4KKyAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBrTWF4U2lnbmlmaWNhbnRCaXRzID0gMzU4NDsKKyAgICAgICAg
CisgICAgICAgIEJpZ251bSgpOworICAgICAgICB2b2lkIEFzc2lnblVJbnQxNih1aW50MTZfdCB2
YWx1ZSk7CisgICAgICAgIHZvaWQgQXNzaWduVUludDY0KHVpbnQ2NF90IHZhbHVlKTsKKyAgICAg
ICAgdm9pZCBBc3NpZ25CaWdudW0oY29uc3QgQmlnbnVtJiBvdGhlcik7CisgICAgICAgIAorICAg
ICAgICB2b2lkIEFzc2lnbkRlY2ltYWxTdHJpbmcoVmVjdG9yPGNvbnN0IGNoYXI+IHZhbHVlKTsK
KyAgICAgICAgdm9pZCBBc3NpZ25IZXhTdHJpbmcoVmVjdG9yPGNvbnN0IGNoYXI+IHZhbHVlKTsK
KyAgICAgICAgCisgICAgICAgIHZvaWQgQXNzaWduUG93ZXJVSW50MTYodWludDE2X3QgYmFzZSwg
aW50IGV4cG9uZW50KTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgQWRkVUludDE2KHVpbnQxNl90
IG9wZXJhbmQpOworICAgICAgICB2b2lkIEFkZFVJbnQ2NCh1aW50NjRfdCBvcGVyYW5kKTsKKyAg
ICAgICAgdm9pZCBBZGRCaWdudW0oY29uc3QgQmlnbnVtJiBvdGhlcik7CisgICAgICAgIC8vIFBy
ZWNvbmRpdGlvbjogdGhpcyA+PSBvdGhlci4KKyAgICAgICAgdm9pZCBTdWJ0cmFjdEJpZ251bShj
b25zdCBCaWdudW0mIG90aGVyKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgU3F1YXJlKCk7Cisg
ICAgICAgIHZvaWQgU2hpZnRMZWZ0KGludCBzaGlmdF9hbW91bnQpOworICAgICAgICB2b2lkIE11
bHRpcGx5QnlVSW50MzIodWludDMyX3QgZmFjdG9yKTsKKyAgICAgICAgdm9pZCBNdWx0aXBseUJ5
VUludDY0KHVpbnQ2NF90IGZhY3Rvcik7CisgICAgICAgIHZvaWQgTXVsdGlwbHlCeVBvd2VyT2ZU
ZW4oaW50IGV4cG9uZW50KTsKKyAgICAgICAgdm9pZCBUaW1lczEwKCkgeyByZXR1cm4gTXVsdGlw
bHlCeVVJbnQzMigxMCk7IH0KKyAgICAgICAgLy8gUHNldWRvY29kZToKKyAgICAgICAgLy8gIGlu
dCByZXN1bHQgPSB0aGlzIC8gb3RoZXI7CisgICAgICAgIC8vICB0aGlzID0gdGhpcyAlIG90aGVy
OworICAgICAgICAvLyBJbiB0aGUgd29yc3QgY2FzZSB0aGlzIGZ1bmN0aW9uIGlzIGluIE8odGhp
cy9vdGhlcikuCisgICAgICAgIHVpbnQxNl90IERpdmlkZU1vZHVsb0ludEJpZ251bShjb25zdCBC
aWdudW0mIG90aGVyKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgVG9IZXhTdHJpbmcoY2hhciog
YnVmZmVyLCBpbnQgYnVmZmVyX3NpemUpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgc3RhdGlj
IGludCBDb21wYXJlKGNvbnN0IEJpZ251bSYgYSwgY29uc3QgQmlnbnVtJiBiKTsKKyAgICAgICAg
c3RhdGljIGJvb2wgRXF1YWwoY29uc3QgQmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIpIHsKKyAg
ICAgICAgICAgIHJldHVybiBDb21wYXJlKGEsIGIpID09IDA7CisgICAgICAgIH0KKyAgICAgICAg
c3RhdGljIGJvb2wgTGVzc0VxdWFsKGNvbnN0IEJpZ251bSYgYSwgY29uc3QgQmlnbnVtJiBiKSB7
CisgICAgICAgICAgICByZXR1cm4gQ29tcGFyZShhLCBiKSA8PSAwOworICAgICAgICB9CisgICAg
ICAgIHN0YXRpYyBib29sIExlc3MoY29uc3QgQmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIpIHsK
KyAgICAgICAgICAgIHJldHVybiBDb21wYXJlKGEsIGIpIDwgMDsKKyAgICAgICAgfQorICAgICAg
ICAvLyBSZXR1cm5zIENvbXBhcmUoYSArIGIsIGMpOworICAgICAgICBzdGF0aWMgaW50IFBsdXND
b21wYXJlKGNvbnN0IEJpZ251bSYgYSwgY29uc3QgQmlnbnVtJiBiLCBjb25zdCBCaWdudW0mIGMp
OworICAgICAgICAvLyBSZXR1cm5zIGEgKyBiID09IGMKKyAgICAgICAgc3RhdGljIGJvb2wgUGx1
c0VxdWFsKGNvbnN0IEJpZ251bSYgYSwgY29uc3QgQmlnbnVtJiBiLCBjb25zdCBCaWdudW0mIGMp
IHsKKyAgICAgICAgICAgIHJldHVybiBQbHVzQ29tcGFyZShhLCBiLCBjKSA9PSAwOworICAgICAg
ICB9CisgICAgICAgIC8vIFJldHVybnMgYSArIGIgPD0gYworICAgICAgICBzdGF0aWMgYm9vbCBQ
bHVzTGVzc0VxdWFsKGNvbnN0IEJpZ251bSYgYSwgY29uc3QgQmlnbnVtJiBiLCBjb25zdCBCaWdu
dW0mIGMpIHsKKyAgICAgICAgICAgIHJldHVybiBQbHVzQ29tcGFyZShhLCBiLCBjKSA8PSAwOwor
ICAgICAgICB9CisgICAgICAgIC8vIFJldHVybnMgYSArIGIgPCBjCisgICAgICAgIHN0YXRpYyBi
b29sIFBsdXNMZXNzKGNvbnN0IEJpZ251bSYgYSwgY29uc3QgQmlnbnVtJiBiLCBjb25zdCBCaWdu
dW0mIGMpIHsKKyAgICAgICAgICAgIHJldHVybiBQbHVzQ29tcGFyZShhLCBiLCBjKSA8IDA7Cisg
ICAgICAgIH0KKyAgICBwcml2YXRlOgorICAgICAgICB0eXBlZGVmIHVpbnQzMl90IENodW5rOwor
ICAgICAgICB0eXBlZGVmIHVpbnQ2NF90IERvdWJsZUNodW5rOworICAgICAgICAKKyAgICAgICAg
c3RhdGljIGNvbnN0IGludCBrQ2h1bmtTaXplID0gc2l6ZW9mKENodW5rKSAqIDg7CisgICAgICAg
IHN0YXRpYyBjb25zdCBpbnQga0RvdWJsZUNodW5rU2l6ZSA9IHNpemVvZihEb3VibGVDaHVuaykg
KiA4OworICAgICAgICAvLyBXaXRoIGJpZ2l0IHNpemUgb2YgMjggd2UgbG9vc2Ugc29tZSBiaXRz
LCBidXQgYSBkb3VibGUgc3RpbGwgZml0cyBlYXNpbHkKKyAgICAgICAgLy8gaW50byB0d28gY2h1
bmtzLCBhbmQgbW9yZSBpbXBvcnRhbnRseSB3ZSBjYW4gdXNlIHRoZSBDb21iYSBtdWx0aXBsaWNh
dGlvbi4KKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBrQmlnaXRTaXplID0gMjg7CisgICAgICAg
IHN0YXRpYyBjb25zdCBDaHVuayBrQmlnaXRNYXNrID0gKDEgPDwga0JpZ2l0U2l6ZSkgLSAxOwor
ICAgICAgICAvLyBFdmVyeSBpbnN0YW5jZSBhbGxvY2F0ZXMga0JpZ2l0TGVuZ3RoIGNodW5rcyBv
biB0aGUgc3RhY2suIEJpZ251bXMgY2Fubm90CisgICAgICAgIC8vIGdyb3cuIFRoZXJlIGFyZSBu
byBjaGVja3MgaWYgdGhlIHN0YWNrLWFsbG9jYXRlZCBzcGFjZSBpcyBzdWZmaWNpZW50LgorICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IGtCaWdpdENhcGFjaXR5ID0ga01heFNpZ25pZmljYW50Qml0
cyAvIGtCaWdpdFNpemU7CisgICAgICAgIAorICAgICAgICB2b2lkIEVuc3VyZUNhcGFjaXR5KGlu
dCBzaXplKSB7CisgICAgICAgICAgICBpZiAoc2l6ZSA+IGtCaWdpdENhcGFjaXR5KSB7CisgICAg
ICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICB2b2lkIEFsaWduKGNvbnN0IEJpZ251bSYgb3RoZXIpOworICAgICAgICB2b2lkIENsYW1w
KCk7CisgICAgICAgIGJvb2wgSXNDbGFtcGVkKCkgY29uc3Q7CisgICAgICAgIHZvaWQgWmVybygp
OworICAgICAgICAvLyBSZXF1aXJlcyB0aGlzIHRvIGhhdmUgZW5vdWdoIGNhcGFjaXR5IChubyB0
ZXN0cyBkb25lKS4KKyAgICAgICAgLy8gVXBkYXRlcyB1c2VkX2RpZ2l0c18gaWYgbmVjZXNzYXJ5
LgorICAgICAgICAvLyBzaGlmdF9hbW91bnQgbXVzdCBiZSA8IGtCaWdpdFNpemUuCisgICAgICAg
IHZvaWQgQmlnaXRzU2hpZnRMZWZ0KGludCBzaGlmdF9hbW91bnQpOworICAgICAgICAvLyBCaWdp
dExlbmd0aCBpbmNsdWRlcyB0aGUgImhpZGRlbiIgZGlnaXRzIGVuY29kZWQgaW4gdGhlIGV4cG9u
ZW50LgorICAgICAgICBpbnQgQmlnaXRMZW5ndGgoKSBjb25zdCB7IHJldHVybiB1c2VkX2RpZ2l0
c18gKyBleHBvbmVudF87IH0KKyAgICAgICAgQ2h1bmsgQmlnaXRBdChpbnQgaW5kZXgpIGNvbnN0
OworICAgICAgICB2b2lkIFN1YnRyYWN0VGltZXMoY29uc3QgQmlnbnVtJiBvdGhlciwgaW50IGZh
Y3Rvcik7CisgICAgICAgIAorICAgICAgICBDaHVuayBiaWdpdHNfYnVmZmVyX1trQmlnaXRDYXBh
Y2l0eV07CisgICAgICAgIC8vIEEgdmVjdG9yIGJhY2tlZCBieSBiaWdpdHNfYnVmZmVyXy4gVGhp
cyB3YXkgYWNjZXNzZXMgdG8gdGhlIGFycmF5IGFyZQorICAgICAgICAvLyBjaGVja2VkIGZvciBv
dXQtb2YtYm91bmRzIGVycm9ycy4KKyAgICAgICAgVmVjdG9yPENodW5rPiBiaWdpdHNfOworICAg
ICAgICBpbnQgdXNlZF9kaWdpdHNfOworICAgICAgICAvLyBUaGUgQmlnbnVtJ3MgdmFsdWUgZXF1
YWxzIHZhbHVlKGJpZ2l0c18pICogMl4oZXhwb25lbnRfICoga0JpZ2l0U2l6ZSkuCisgICAgICAg
IGludCBleHBvbmVudF87CisgICAgICAgIAorICAgICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oQmlnbnVtKTsKKyAgICB9OworICAgIAorfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJz
aW9uCisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgIC8vIERPVUJMRV9DT05WRVJTSU9O
X0JJR05VTV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2Nh
Y2hlZC1wb3dlcnMuY2MgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvY2FjaGVkLXBv
d2Vycy5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hOGU3MDA0N2Q5ZWUxNzUwMzgyZmI2N2Q4ZDRjODNhZDdhMWFi
ODcwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2Nh
Y2hlZC1wb3dlcnMuY2MKQEAgLTAsMCArMSwxODkgQEAKKy8vIENvcHlyaWdodCAyMDA2LTIwMDgg
dGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
Ky8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5j
bHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSAiVW51c2VkUGFyYW0uaCIKKyNpbmNsdWRlICJ1dGls
cy5oIgorI2luY2x1ZGUgImNhY2hlZC1wb3dlcnMuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK25h
bWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgc3RydWN0IENhY2hlZFBvd2Vy
IHsKKyAgICAgICAgdWludDY0X3Qgc2lnbmlmaWNhbmQ7CisgICAgICAgIGludDE2X3QgYmluYXJ5
X2V4cG9uZW50OworICAgICAgICBpbnQxNl90IGRlY2ltYWxfZXhwb25lbnQ7CisgICAgfTsKKyAg
ICAKKyAgICBzdGF0aWMgaW50IGtDYWNoZWRQb3dlcnNMZW5ndGggPSAxOworICAgIHN0YXRpYyBp
bnQga0NhY2hlZFBvd2Vyc09mZnNldCA9IDE7CisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBrRF8x
X0xPRzJfMTAgPSAwLjMwMTAyOTk5NTY2Mzk4MTE0OyAgLy8gIDEgLyBsZygxMCkKKyAgICBzdGF0
aWMgQ2FjaGVkUG93ZXIqIGtDYWNoZWRQb3dlcnMgPSAwOworICAgIAorICAgIGludCBQb3dlcnNP
ZlRlbkNhY2hlOjprRGVjaW1hbEV4cG9uZW50RGlzdGFuY2UgPSAxOworICAgIGludCBQb3dlcnNP
ZlRlbkNhY2hlOjprTWluRGVjaW1hbEV4cG9uZW50ID0gMTsKKyAgICBpbnQgUG93ZXJzT2ZUZW5D
YWNoZTo6a01heERlY2ltYWxFeHBvbmVudCA9IDE7CisgICAgCisgICAgdm9pZCBpbml0aWFsaXpl
KCkgeworICAgICAgICBzdGF0aWMgQ2FjaGVkUG93ZXIgY2FjaGVkUG93ZXJzW10gPSB7CisgICAg
ICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhmYThmZDVhMCwgMDgxYzAyODgpLCAtMTIyMCwgLTM0
OH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhiYWFlZTE3ZiwgYTIzZWJmNzYpLCAt
MTE5MywgLTM0MH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg4YjE2ZmIyMCwgMzA1
NWFjNzYpLCAtMTE2NiwgLTMzMn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhjZjQy
ODk0YSwgNWRjZTM1ZWEpLCAtMTE0MCwgLTMyNH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJU
X0MoMHg5YTZiYjBhYSwgNTU2NTNiMmQpLCAtMTExMywgLTMxNn0sCisgICAgICAgICAgICB7VUlO
VDY0XzJQQVJUX0MoMHhlNjFhY2YwMywgM2QxYTQ1ZGYpLCAtMTA4NywgLTMwOH0sCisgICAgICAg
ICAgICB7VUlOVDY0XzJQQVJUX0MoMHhhYjcwZmUxNywgYzc5YWM2Y2EpLCAtMTA2MCwgLTMwMH0s
CisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhmZjc3YjFmYywgYmViY2RjNGYpLCAtMTAz
NCwgLTI5Mn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhiZTU2OTFlZiwgNDE2YmQ2
MGMpLCAtMTAwNywgLTI4NH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg4ZGQwMWZh
ZCwgOTA3ZmZjM2MpLCAtOTgwLCAtMjc2fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygw
eGQzNTE1YzI4LCAzMTU1OWE4MyksIC05NTQsIC0yNjh9LAorICAgICAgICAgICAge1VJTlQ2NF8y
UEFSVF9DKDB4OWQ3MWFjOGYsIGFkYTZjOWI1KSwgLTkyNywgLTI2MH0sCisgICAgICAgICAgICB7
VUlOVDY0XzJQQVJUX0MoMHhlYTljMjI3NywgMjNlZThiY2IpLCAtOTAxLCAtMjUyfSwKKyAgICAg
ICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGFlY2M0OTkxLCA0MDc4NTM2ZCksIC04NzQsIC0yNDR9
LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ODIzYzEyNzksIDVkYjZjZTU3KSwgLTg0
NywgLTIzNn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhjMjEwOTQzNiwgNGRmYjU2
MzcpLCAtODIxLCAtMjI4fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDkwOTZlYTZm
LCAzODQ4OTg0ZiksIC03OTQsIC0yMjB9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4
ZDc3NDg1Y2IsIDI1ODIzYWM3KSwgLTc2OCwgLTIxMn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQ
QVJUX0MoMHhhMDg2Y2ZjZCwgOTdiZjk3ZjQpLCAtNzQxLCAtMjA0fSwKKyAgICAgICAgICAgIHtV
SU5UNjRfMlBBUlRfQygweGVmMzQwYTk4LCAxNzJhYWNlNSksIC03MTUsIC0xOTZ9LAorICAgICAg
ICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YjIzODY3ZmIsIDJhMzViMjhlKSwgLTY4OCwgLTE4OH0s
CisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg4NGM4ZDRkZiwgZDJjNjNmM2IpLCAtNjYx
LCAtMTgwfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGM1ZGQ0NDI3LCAxYWQzY2Ri
YSksIC02MzUsIC0xNzJ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4OTM2YjlmY2Us
IGJiMjVjOTk2KSwgLTYwOCwgLTE2NH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhk
YmFjNmMyNCwgN2Q2MmE1ODQpLCAtNTgyLCAtMTU2fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBB
UlRfQygweGEzYWI2NjU4LCAwZDVmZGFmNiksIC01NTUsIC0xNDh9LAorICAgICAgICAgICAge1VJ
TlQ2NF8yUEFSVF9DKDB4ZjNlMmY4OTMsIGRlYzNmMTI2KSwgLTUyOSwgLTE0MH0sCisgICAgICAg
ICAgICB7VUlOVDY0XzJQQVJUX0MoMHhiNWI1YWRhOCwgYWFmZjgwYjgpLCAtNTAyLCAtMTMyfSwK
KyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDg3NjI1ZjA1LCA2YzdjNGE4YiksIC00NzUs
IC0xMjR9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YzliY2ZmNjAsIDM0YzEzMDUz
KSwgLTQ0OSwgLTExNn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg5NjRlODU4Yywg
OTFiYTI2NTUpLCAtNDIyLCAtMTA4fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGRm
Zjk3NzI0LCA3MDI5N2ViZCksIC0zOTYsIC0xMDB9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFS
VF9DKDB4YTZkZmJkOWYsIGI4ZTViODhmKSwgLTM2OSwgLTkyfSwKKyAgICAgICAgICAgIHtVSU5U
NjRfMlBBUlRfQygweGY4YTk1ZmNmLCA4ODc0N2Q5NCksIC0zNDMsIC04NH0sCisgICAgICAgICAg
ICB7VUlOVDY0XzJQQVJUX0MoMHhiOTQ0NzA5MywgOGZhODliY2YpLCAtMzE2LCAtNzZ9LAorICAg
ICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4OGEwOGYwZjgsIGJmMGYxNTZiKSwgLTI4OSwgLTY4
fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGNkYjAyNTU1LCA2NTMxMzFiNiksIC0y
NjMsIC02MH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg5OTNmZTJjNiwgZDA3Yjdm
YWMpLCAtMjM2LCAtNTJ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZTQ1YzEwYzQs
IDJhMmIzYjA2KSwgLTIxMCwgLTQ0fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGFh
MjQyNDk5LCA2OTczOTJkMyksIC0xODMsIC0zNn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJU
X0MoMHhmZDg3YjVmMiwgODMwMGNhMGUpLCAtMTU3LCAtMjh9LAorICAgICAgICAgICAge1VJTlQ2
NF8yUEFSVF9DKDB4YmNlNTA4NjQsIDkyMTExYWViKSwgLTEzMCwgLTIwfSwKKyAgICAgICAgICAg
IHtVSU5UNjRfMlBBUlRfQygweDhjYmNjYzA5LCA2ZjUwODhjYyksIC0xMDMsIC0xMn0sCisgICAg
ICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhkMWI3MTc1OCwgZTIxOTY1MmMpLCAtNzcsIC00fSwK
KyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDljNDAwMDAwLCAwMDAwMDAwMCksIC01MCwg
NH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhlOGQ0YTUxMCwgMDAwMDAwMDApLCAt
MjQsIDEyfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGFkNzhlYmM1LCBhYzYyMDAw
MCksIDMsIDIwfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDgxM2YzOTc4LCBmODk0
MDk4NCksIDMwLCAyOH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhjMDk3Y2U3Yiwg
YzkwNzE1YjMpLCA1NiwgMzZ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4OGY3ZTMy
Y2UsIDdiZWE1YzcwKSwgODMsIDQ0fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGQ1
ZDIzOGE0LCBhYmU5ODA2OCksIDEwOSwgNTJ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9D
KDB4OWY0ZjI3MjYsIDE3OWEyMjQ1KSwgMTM2LCA2MH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQ
QVJUX0MoMHhlZDYzYTIzMSwgZDRjNGZiMjcpLCAxNjIsIDY4fSwKKyAgICAgICAgICAgIHtVSU5U
NjRfMlBBUlRfQygweGIwZGU2NTM4LCA4Y2M4YWRhOCksIDE4OSwgNzZ9LAorICAgICAgICAgICAg
e1VJTlQ2NF8yUEFSVF9DKDB4ODNjNzA4OGUsIDFhYWI2NWRiKSwgMjE2LCA4NH0sCisgICAgICAg
ICAgICB7VUlOVDY0XzJQQVJUX0MoMHhjNDVkMWRmOSwgNDI3MTFkOWEpLCAyNDIsIDkyfSwKKyAg
ICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDkyNGQ2OTJjLCBhNjFiZTc1OCksIDI2OSwgMTAw
fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGRhMDFlZTY0LCAxYTcwOGRlYSksIDI5
NSwgMTA4fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGEyNmRhMzk5LCA5YWVmNzc0
YSksIDMyMiwgMTE2fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGYyMDk3ODdiLCBi
NDdkNmI4NSksIDM0OCwgMTI0fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGI0NTRl
NGExLCA3OWRkMTg3NyksIDM3NSwgMTMyfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygw
eDg2NWI4NjkyLCA1YjliYzVjMiksIDQwMiwgMTQwfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBB
UlRfQygweGM4MzU1M2M1LCBjODk2NWQzZCksIDQyOCwgMTQ4fSwKKyAgICAgICAgICAgIHtVSU5U
NjRfMlBBUlRfQygweDk1MmFiNDVjLCBmYTk3YTBiMyksIDQ1NSwgMTU2fSwKKyAgICAgICAgICAg
IHtVSU5UNjRfMlBBUlRfQygweGRlNDY5ZmJkLCA5OWEwNWZlMyksIDQ4MSwgMTY0fSwKKyAgICAg
ICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGE1OWJjMjM0LCBkYjM5OGMyNSksIDUwOCwgMTcyfSwK
KyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGY2YzY5YTcyLCBhMzk4OWY1YyksIDUzNCwg
MTgwfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGI3ZGNiZjUzLCA1NGU5YmVjZSks
IDU2MSwgMTg4fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDg4ZmNmMzE3LCBmMjIy
NDFlMiksIDU4OCwgMTk2fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGNjMjBjZTli
LCBkMzVjNzhhNSksIDYxNCwgMjA0fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDk4
MTY1YWYzLCA3YjIxNTNkZiksIDY0MSwgMjEyfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRf
QygweGUyYTBiNWRjLCA5NzFmMzAzYSksIDY2NywgMjIwfSwKKyAgICAgICAgICAgIHtVSU5UNjRf
MlBBUlRfQygweGE4ZDlkMTUzLCA1Y2UzYjM5NiksIDY5NCwgMjI4fSwKKyAgICAgICAgICAgIHtV
SU5UNjRfMlBBUlRfQygweGZiOWI3Y2Q5LCBhNGE3NDQzYyksIDcyMCwgMjM2fSwKKyAgICAgICAg
ICAgIHtVSU5UNjRfMlBBUlRfQygweGJiNzY0YzRjLCBhN2E0NDQxMCksIDc0NywgMjQ0fSwKKyAg
ICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDhiYWI4ZWVmLCBiNjQwOWMxYSksIDc3NCwgMjUy
fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGQwMWZlZjEwLCBhNjU3ODQyYyksIDgw
MCwgMjYwfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDliMTBhNGU1LCBlOTkxMzEy
OSksIDgyNywgMjY4fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGU3MTA5YmZiLCBh
MTljMGM5ZCksIDg1MywgMjc2fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGFjMjgy
MGQ5LCA2MjNiZjQyOSksIDg4MCwgMjg0fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygw
eDgwNDQ0YjVlLCA3YWE3Y2Y4NSksIDkwNywgMjkyfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBB
UlRfQygweGJmMjFlNDQwLCAwM2FjZGQyZCksIDkzMywgMzAwfSwKKyAgICAgICAgICAgIHtVSU5U
NjRfMlBBUlRfQygweDhlNjc5YzJmLCA1ZTQ0ZmY4ZiksIDk2MCwgMzA4fSwKKyAgICAgICAgICAg
IHtVSU5UNjRfMlBBUlRfQygweGQ0MzMxNzlkLCA5YzhjYjg0MSksIDk4NiwgMzE2fSwKKyAgICAg
ICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDllMTlkYjkyLCBiNGUzMWJhOSksIDEwMTMsIDMyNH0s
CisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhlYjk2YmY2ZSwgYmFkZjc3ZDkpLCAxMDM5
LCAzMzJ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YWY4NzAyM2IsIDliZjBlZTZi
KSwgMTA2NiwgMzQwfSwKKyAgICAgICAgfTsKKyAgICAgICAga0NhY2hlZFBvd2VycyA9IGNhY2hl
ZFBvd2VyczsKKyAgICAgICAga0NhY2hlZFBvd2Vyc0xlbmd0aCA9IEFSUkFZX1NJWkUoY2FjaGVk
UG93ZXJzKTsKKyAgICAgICAga0NhY2hlZFBvd2Vyc09mZnNldCA9IC1jYWNoZWRQb3dlcnNbMF0u
ZGVjaW1hbF9leHBvbmVudDsKKyAgICAgICAgUG93ZXJzT2ZUZW5DYWNoZTo6a0RlY2ltYWxFeHBv
bmVudERpc3RhbmNlID0ga0NhY2hlZFBvd2Vyc1sxXS5kZWNpbWFsX2V4cG9uZW50IC0ga0NhY2hl
ZFBvd2Vyc1swXS5kZWNpbWFsX2V4cG9uZW50OworICAgICAgICBQb3dlcnNPZlRlbkNhY2hlOjpr
TWluRGVjaW1hbEV4cG9uZW50ID0ga0NhY2hlZFBvd2Vyc1swXS5kZWNpbWFsX2V4cG9uZW50Owor
ICAgICAgICBQb3dlcnNPZlRlbkNhY2hlOjprTWF4RGVjaW1hbEV4cG9uZW50ID0ga0NhY2hlZFBv
d2Vyc1trQ2FjaGVkUG93ZXJzTGVuZ3RoIC0gMV0uZGVjaW1hbF9leHBvbmVudDsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBQb3dlcnNPZlRlbkNhY2hlOjpHZXRDYWNoZWRQb3dlckZvckJpbmFyeUV4
cG9uZW50UmFuZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IG1pbl9leHBvbmVudCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWF4X2V4
cG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIERpeUZwKiBwb3dlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGRlY2ltYWxfZXhwb25l
bnQpIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKG1heF9leHBvbmVudCk7CisgICAgICAgIGludCBr
USA9IERpeUZwOjprU2lnbmlmaWNhbmRTaXplOworICAgICAgICBkb3VibGUgayA9IGNlaWwoKG1p
bl9leHBvbmVudCArIGtRIC0gMSkgKiBrRF8xX0xPRzJfMTApOworICAgICAgICBpbnQgZm9vID0g
a0NhY2hlZFBvd2Vyc09mZnNldDsKKyAgICAgICAgaW50IGluZGV4ID0KKyAgICAgICAgKGZvbyAr
IHN0YXRpY19jYXN0PGludD4oaykgLSAxKSAvIGtEZWNpbWFsRXhwb25lbnREaXN0YW5jZSArIDE7
CisgICAgICAgIEFTU0VSVCgwIDw9IGluZGV4ICYmIGluZGV4IDwga0NhY2hlZFBvd2Vyc0xlbmd0
aCk7CisgICAgICAgIENhY2hlZFBvd2VyIGNhY2hlZF9wb3dlciA9IGtDYWNoZWRQb3dlcnNbaW5k
ZXhdOworICAgICAgICBBU1NFUlQobWluX2V4cG9uZW50IDw9IGNhY2hlZF9wb3dlci5iaW5hcnlf
ZXhwb25lbnQpOworICAgICAgICBBU1NFUlQoY2FjaGVkX3Bvd2VyLmJpbmFyeV9leHBvbmVudCA8
PSBtYXhfZXhwb25lbnQpOworICAgICAgICAqZGVjaW1hbF9leHBvbmVudCA9IGNhY2hlZF9wb3dl
ci5kZWNpbWFsX2V4cG9uZW50OworICAgICAgICAqcG93ZXIgPSBEaXlGcChjYWNoZWRfcG93ZXIu
c2lnbmlmaWNhbmQsIGNhY2hlZF9wb3dlci5iaW5hcnlfZXhwb25lbnQpOworICAgIH0KKyAgICAK
KyAgICAKKyAgICB2b2lkIFBvd2Vyc09mVGVuQ2FjaGU6OkdldENhY2hlZFBvd2VyRm9yRGVjaW1h
bEV4cG9uZW50KGludCByZXF1ZXN0ZWRfZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXlGcCogcG93ZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQqIGZvdW5kX2V4cG9uZW50KSB7CisgICAgICAgIEFTU0VSVChrTWluRGVjaW1hbEV4cG9uZW50
IDw9IHJlcXVlc3RlZF9leHBvbmVudCk7CisgICAgICAgIEFTU0VSVChyZXF1ZXN0ZWRfZXhwb25l
bnQgPCBrTWF4RGVjaW1hbEV4cG9uZW50ICsga0RlY2ltYWxFeHBvbmVudERpc3RhbmNlKTsKKyAg
ICAgICAgaW50IGluZGV4ID0KKyAgICAgICAgKHJlcXVlc3RlZF9leHBvbmVudCArIGtDYWNoZWRQ
b3dlcnNPZmZzZXQpIC8ga0RlY2ltYWxFeHBvbmVudERpc3RhbmNlOworICAgICAgICBDYWNoZWRQ
b3dlciBjYWNoZWRfcG93ZXIgPSBrQ2FjaGVkUG93ZXJzW2luZGV4XTsKKyAgICAgICAgKnBvd2Vy
ID0gRGl5RnAoY2FjaGVkX3Bvd2VyLnNpZ25pZmljYW5kLCBjYWNoZWRfcG93ZXIuYmluYXJ5X2V4
cG9uZW50KTsKKyAgICAgICAgKmZvdW5kX2V4cG9uZW50ID0gY2FjaGVkX3Bvd2VyLmRlY2ltYWxf
ZXhwb25lbnQ7CisgICAgICAgIEFTU0VSVCgqZm91bmRfZXhwb25lbnQgPD0gcmVxdWVzdGVkX2V4
cG9uZW50KTsKKyAgICAgICAgQVNTRVJUKHJlcXVlc3RlZF9leHBvbmVudCA8ICpmb3VuZF9leHBv
bmVudCArIGtEZWNpbWFsRXhwb25lbnREaXN0YW5jZSk7CisgICAgfQorICAgIAorfSAgLy8gbmFt
ZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2NhY2hlZC1wb3dlcnMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2Jj
MDRkNDNkNjhjYzA4NjBhMjJiMjg3ODZkMzE3NGM4ZDI2Y2IzMwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmgKQEAgLTAsMCAr
MSw3MiBAQAorLy8gQ29weXJpZ2h0IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0Ogor
Ly8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwor
Ly8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisv
LyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisv
LyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWZuZGVmIERPVUJMRV9DT05W
RVJTSU9OX0NBQ0hFRF9QT1dFUlNfSF8KKyNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05fQ0FDSEVE
X1BPV0VSU19IXworCisjaW5jbHVkZSAiZGl5LWZwLmgiCisKK25hbWVzcGFjZSBXVEYgeworCitu
YW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIGNsYXNzIFBvd2Vyc09mVGVu
Q2FjaGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgCisgICAgICAgIC8vIE5vdCBhbGwgcG93ZXJz
IG9mIHRlbiBhcmUgY2FjaGVkLiBUaGUgZGVjaW1hbCBleHBvbmVudCBvZiB0d28gbmVpZ2hib3Jp
bmcKKyAgICAgICAgLy8gY2FjaGVkIG51bWJlcnMgd2lsbCBkaWZmZXIgYnkga0RlY2ltYWxFeHBv
bmVudERpc3RhbmNlLgorICAgICAgICBzdGF0aWMgaW50IGtEZWNpbWFsRXhwb25lbnREaXN0YW5j
ZTsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBpbnQga01pbkRlY2ltYWxFeHBvbmVudDsKKyAg
ICAgICAgc3RhdGljIGludCBrTWF4RGVjaW1hbEV4cG9uZW50OworICAgICAgICAKKyAgICAgICAg
Ly8gUmV0dXJucyBhIGNhY2hlZCBwb3dlci1vZi10ZW4gd2l0aCBhIGJpbmFyeSBleHBvbmVudCBp
biB0aGUgcmFuZ2UKKyAgICAgICAgLy8gW21pbl9leHBvbmVudDsgbWF4X2V4cG9uZW50XSAoYm91
bmRhcmllcyBpbmNsdWRlZCkuCisgICAgICAgIHN0YXRpYyB2b2lkIEdldENhY2hlZFBvd2VyRm9y
QmluYXJ5RXhwb25lbnRSYW5nZShpbnQgbWluX2V4cG9uZW50LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1heF9leHBvbmVudCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IERpeUZwKiBwb3dlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCogZGVjaW1hbF9leHBvbmVudCk7CisgICAgICAgIAorICAgICAg
ICAvLyBSZXR1cm5zIGEgY2FjaGVkIHBvd2VyIG9mIHRlbiB4IH49IDEwXmsgc3VjaCB0aGF0Cisg
ICAgICAgIC8vICAgayA8PSBkZWNpbWFsX2V4cG9uZW50IDwgayArIGtDYWNoZWRQb3dlcnNEZWNp
bWFsRGlzdGFuY2UuCisgICAgICAgIC8vIFRoZSBnaXZlbiBkZWNpbWFsX2V4cG9uZW50IG11c3Qg
c2F0aXNmeQorICAgICAgICAvLyAgIGtNaW5EZWNpbWFsRXhwb25lbnQgPD0gcmVxdWVzdGVkX2V4
cG9uZW50LCBhbmQKKyAgICAgICAgLy8gICByZXF1ZXN0ZWRfZXhwb25lbnQgPCBrTWF4RGVjaW1h
bEV4cG9uZW50ICsga0RlY2ltYWxFeHBvbmVudERpc3RhbmNlLgorICAgICAgICBzdGF0aWMgdm9p
ZCBHZXRDYWNoZWRQb3dlckZvckRlY2ltYWxFeHBvbmVudChpbnQgcmVxdWVzdGVkX2V4cG9uZW50
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
aXlGcCogcG93ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCogZm91bmRfZXhwb25lbnQpOworICAgIH07CisgICAgCisgICAgLy8gSW5p
dGlhbGl6ZXMgdGhlIHRhYmxlIG9mIGNhY2hlZCBwb3dlcnMgdXNlZCBieSB0aGUgZHRvYSBhbGdv
cml0aG0uCisgICAgLy8gVGhpcyBuZWVkcyB0byBiZSBjYWxsZWQgd2hlbiBKU0MgaXMgYmVpbmcg
aW5pdGlhbGl6ZWQuCisgICAgdm9pZCBpbml0aWFsaXplKCk7CisgICAgCit9ICAvLyBuYW1lc3Bh
Y2UgZG91YmxlX2NvbnZlcnNpb24KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAgLy8g
RE9VQkxFX0NPTlZFUlNJT05fQ0FDSEVEX1BPV0VSU19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2RpeS1mcC5jYyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvZHRvYS9kaXktZnAuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2NhZDVkNDNjNWY2Mzk2YWU5NDFkYWQzOGE0
ZWIwZWRhYzI1NTlmMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvZHRvYS9kaXktZnAuY2MKQEAgLTAsMCArMSw2MSBAQAorLy8gQ29weXJpZ2h0IDIwMTAgdGhl
IFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
Ly8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
Ky8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8v
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCisKKyNpbmNsdWRlICJkaXktZnAuaCIKKyNpbmNsdWRlICJ1dGlscy5oIgorCituYW1l
c3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKKyAgICAKKyAgICB2
b2lkIERpeUZwOjpNdWx0aXBseShjb25zdCBEaXlGcCYgb3RoZXIpIHsKKyAgICAgICAgLy8gU2lt
cGx5ICJlbXVsYXRlcyIgYSAxMjggYml0IG11bHRpcGxpY2F0aW9uLgorICAgICAgICAvLyBIb3dl
dmVyOiB0aGUgcmVzdWx0aW5nIG51bWJlciBvbmx5IGNvbnRhaW5zIDY0IGJpdHMuIFRoZSBsZWFz
dAorICAgICAgICAvLyBzaWduaWZpY2FudCA2NCBiaXRzIGFyZSBvbmx5IHVzZWQgZm9yIHJvdW5k
aW5nIHRoZSBtb3N0IHNpZ25pZmljYW50IDY0CisgICAgICAgIC8vIGJpdHMuCisgICAgICAgIGNv
bnN0IHVpbnQ2NF90IGtNMzIgPSAweEZGRkZGRkZGVTsKKyAgICAgICAgdWludDY0X3QgYSA9IGZf
ID4+IDMyOworICAgICAgICB1aW50NjRfdCBiID0gZl8gJiBrTTMyOworICAgICAgICB1aW50NjRf
dCBjID0gb3RoZXIuZl8gPj4gMzI7CisgICAgICAgIHVpbnQ2NF90IGQgPSBvdGhlci5mXyAmIGtN
MzI7CisgICAgICAgIHVpbnQ2NF90IGFjID0gYSAqIGM7CisgICAgICAgIHVpbnQ2NF90IGJjID0g
YiAqIGM7CisgICAgICAgIHVpbnQ2NF90IGFkID0gYSAqIGQ7CisgICAgICAgIHVpbnQ2NF90IGJk
ID0gYiAqIGQ7CisgICAgICAgIHVpbnQ2NF90IHRtcCA9IChiZCA+PiAzMikgKyAoYWQgJiBrTTMy
KSArIChiYyAmIGtNMzIpOworICAgICAgICAvLyBCeSBhZGRpbmcgMVUgPDwgMzEgdG8gdG1wIHdl
IHJvdW5kIHRoZSBmaW5hbCByZXN1bHQuCisgICAgICAgIC8vIEhhbGZ3YXkgY2FzZXMgd2lsbCBi
ZSByb3VuZCB1cC4KKyAgICAgICAgdG1wICs9IDFVIDw8IDMxOworICAgICAgICB1aW50NjRfdCBy
ZXN1bHRfZiA9IGFjICsgKGFkID4+IDMyKSArIChiYyA+PiAzMikgKyAodG1wID4+IDMyKTsKKyAg
ICAgICAgZV8gKz0gb3RoZXIuZV8gKyA2NDsKKyAgICAgICAgZl8gPSByZXN1bHRfZjsKKyAgICB9
CisgICAgCit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZGl5LWZw
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZGl5LWZwLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZTg0MzEwMGE4MmFhMzRhNjI4ZGNlZThjMjcxMWY5YWM1MGVmOWU2OQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kaXktZnAuaApAQCAtMCwwICsxLDEy
MiBAQAorLy8gQ29weXJpZ2h0IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8K
Ky8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8g
ICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAg
ICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
Ly8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWZuZGVmIERPVUJMRV9DT05WRVJT
SU9OX0RJWV9GUF9IXworI2RlZmluZSBET1VCTEVfQ09OVkVSU0lPTl9ESVlfRlBfSF8KKworI2lu
Y2x1ZGUgInV0aWxzLmgiCisKK25hbWVzcGFjZSBXVEYgeworCituYW1lc3BhY2UgZG91YmxlX2Nv
bnZlcnNpb24geworICAgIAorICAgIC8vIFRoaXMgIkRvIEl0IFlvdXJzZWxmIEZsb2F0aW5nIFBv
aW50IiBjbGFzcyBpbXBsZW1lbnRzIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyCisgICAgLy8gd2l0
aCBhIHVpbnQ2NCBzaWduaWZpY2FuZCBhbmQgYW4gaW50IGV4cG9uZW50LiBOb3JtYWxpemVkIERp
eUZwIG51bWJlcnMgd2lsbAorICAgIC8vIGhhdmUgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IG9m
IHRoZSBzaWduaWZpY2FuZCBzZXQuCisgICAgLy8gTXVsdGlwbGljYXRpb24gYW5kIFN1YnRyYWN0
aW9uIGRvIG5vdCBub3JtYWxpemUgdGhlaXIgcmVzdWx0cy4KKyAgICAvLyBEaXlGcCBhcmUgbm90
IGRlc2lnbmVkIHRvIGNvbnRhaW4gc3BlY2lhbCBkb3VibGVzIChOYU4gYW5kIEluZmluaXR5KS4K
KyAgICBjbGFzcyBEaXlGcCB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgY29uc3QgaW50
IGtTaWduaWZpY2FuZFNpemUgPSA2NDsKKyAgICAgICAgCisgICAgICAgIERpeUZwKCkgOiBmXygw
KSwgZV8oMCkge30KKyAgICAgICAgRGl5RnAodWludDY0X3QgZiwgaW50IGUpIDogZl8oZiksIGVf
KGUpIHt9CisgICAgICAgIAorICAgICAgICAvLyB0aGlzID0gdGhpcyAtIG90aGVyLgorICAgICAg
ICAvLyBUaGUgZXhwb25lbnRzIG9mIGJvdGggbnVtYmVycyBtdXN0IGJlIHRoZSBzYW1lIGFuZCB0
aGUgc2lnbmlmaWNhbmQgb2YgdGhpcworICAgICAgICAvLyBtdXN0IGJlIGJpZ2dlciB0aGFuIHRo
ZSBzaWduaWZpY2FuZCBvZiBvdGhlci4KKyAgICAgICAgLy8gVGhlIHJlc3VsdCB3aWxsIG5vdCBi
ZSBub3JtYWxpemVkLgorICAgICAgICB2b2lkIFN1YnRyYWN0KGNvbnN0IERpeUZwJiBvdGhlcikg
eworICAgICAgICAgICAgQVNTRVJUKGVfID09IG90aGVyLmVfKTsKKyAgICAgICAgICAgIEFTU0VS
VChmXyA+PSBvdGhlci5mXyk7CisgICAgICAgICAgICBmXyAtPSBvdGhlci5mXzsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJucyBhIC0gYi4KKyAgICAgICAgLy8gVGhlIGV4
cG9uZW50cyBvZiBib3RoIG51bWJlcnMgbXVzdCBiZSB0aGUgc2FtZSBhbmQgdGhpcyBtdXN0IGJl
IGJpZ2dlcgorICAgICAgICAvLyB0aGFuIG90aGVyLiBUaGUgcmVzdWx0IHdpbGwgbm90IGJlIG5v
cm1hbGl6ZWQuCisgICAgICAgIHN0YXRpYyBEaXlGcCBNaW51cyhjb25zdCBEaXlGcCYgYSwgY29u
c3QgRGl5RnAmIGIpIHsKKyAgICAgICAgICAgIERpeUZwIHJlc3VsdCA9IGE7CisgICAgICAgICAg
ICByZXN1bHQuU3VidHJhY3QoYik7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICAKKyAgICAgICAgLy8gdGhpcyA9IHRoaXMgKiBvdGhlci4K
KyAgICAgICAgdm9pZCBNdWx0aXBseShjb25zdCBEaXlGcCYgb3RoZXIpOworICAgICAgICAKKyAg
ICAgICAgLy8gcmV0dXJucyBhICogYjsKKyAgICAgICAgc3RhdGljIERpeUZwIFRpbWVzKGNvbnN0
IERpeUZwJiBhLCBjb25zdCBEaXlGcCYgYikgeworICAgICAgICAgICAgRGl5RnAgcmVzdWx0ID0g
YTsKKyAgICAgICAgICAgIHJlc3VsdC5NdWx0aXBseShiKTsKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgTm9ybWFsaXplKCkgewor
ICAgICAgICAgICAgQVNTRVJUKGZfICE9IDApOworICAgICAgICAgICAgdWludDY0X3QgZiA9IGZf
OworICAgICAgICAgICAgaW50IGUgPSBlXzsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8g
VGhpcyBtZXRob2QgaXMgbWFpbmx5IGNhbGxlZCBmb3Igbm9ybWFsaXppbmcgYm91bmRhcmllcy4g
SW4gZ2VuZXJhbAorICAgICAgICAgICAgLy8gYm91bmRhcmllcyBuZWVkIHRvIGJlIHNoaWZ0ZWQg
YnkgMTAgYml0cy4gV2UgdGh1cyBvcHRpbWl6ZSBmb3IgdGhpcyBjYXNlLgorICAgICAgICAgICAg
Y29uc3QgdWludDY0X3QgazEwTVNCaXRzID0gVUlOVDY0XzJQQVJUX0MoMHhGRkMwMDAwMCwgMDAw
MDAwMDApOworICAgICAgICAgICAgd2hpbGUgKChmICYgazEwTVNCaXRzKSA9PSAwKSB7CisgICAg
ICAgICAgICAgICAgZiA8PD0gMTA7CisgICAgICAgICAgICAgICAgZSAtPSAxMDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHdoaWxlICgoZiAmIGtVaW50NjRNU0IpID09IDApIHsKKyAgICAg
ICAgICAgICAgICBmIDw8PSAxOworICAgICAgICAgICAgICAgIGUtLTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGZfID0gZjsKKyAgICAgICAgICAgIGVfID0gZTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgc3RhdGljIERpeUZwIE5vcm1hbGl6ZShjb25zdCBEaXlGcCYgYSkgewor
ICAgICAgICAgICAgRGl5RnAgcmVzdWx0ID0gYTsKKyAgICAgICAgICAgIHJlc3VsdC5Ob3JtYWxp
emUoKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHVpbnQ2NF90IGYoKSBjb25zdCB7IHJldHVybiBmXzsgfQorICAgICAgICBpbnQgZSgp
IGNvbnN0IHsgcmV0dXJuIGVfOyB9CisgICAgICAgIAorICAgICAgICB2b2lkIHNldF9mKHVpbnQ2
NF90IG5ld192YWx1ZSkgeyBmXyA9IG5ld192YWx1ZTsgfQorICAgICAgICB2b2lkIHNldF9lKGlu
dCBuZXdfdmFsdWUpIHsgZV8gPSBuZXdfdmFsdWU7IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToK
KyAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGtVaW50NjRNU0IgPSBVSU5UNjRfMlBBUlRf
QygweDgwMDAwMDAwLCAwMDAwMDAwMCk7CisgICAgICAgIAorICAgICAgICB1aW50NjRfdCBmXzsK
KyAgICAgICAgaW50IGVfOworICAgIH07CisgICAgCit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2Nv
bnZlcnNpb24KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAgLy8gRE9VQkxFX0NPTlZF
UlNJT05fRElZX0ZQX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0
b2EvZG91YmxlLWNvbnZlcnNpb24uY2MgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2Ev
ZG91YmxlLWNvbnZlcnNpb24uY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWYxODgyNTE1MzRmYzBlM2M2OTFmMDM5
NWY5M2I0NGQ2YTI4ZGM2YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5jYwpAQCAtMCwwICsxLDg3MyBAQAorLy8gQ29w
eXJpZ2h0IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xh
aW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
CisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
Ky8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8bWF0
aC5oPgorCisjaW5jbHVkZSAiZG91YmxlLWNvbnZlcnNpb24uaCIKKworI2luY2x1ZGUgImJpZ251
bS1kdG9hLmgiCisjaW5jbHVkZSAiZG91YmxlLmgiCisjaW5jbHVkZSAiZmFzdC1kdG9hLmgiCisj
aW5jbHVkZSAiZml4ZWQtZHRvYS5oIgorI2luY2x1ZGUgInN0cnRvZC5oIgorI2luY2x1ZGUgInV0
aWxzLmgiCisKK25hbWVzcGFjZSBXVEYgeworCituYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24g
eworICAgIAorICAgIGNvbnN0IERvdWJsZVRvU3RyaW5nQ29udmVydGVyJiBEb3VibGVUb1N0cmlu
Z0NvbnZlcnRlcjo6RWNtYVNjcmlwdENvbnZlcnRlcigpIHsKKyAgICAgICAgaW50IGZsYWdzID0g
VU5JUVVFX1pFUk8gfCBFTUlUX1BPU0lUSVZFX0VYUE9ORU5UX1NJR047CisgICAgICAgIHN0YXRp
YyBEb3VibGVUb1N0cmluZ0NvbnZlcnRlciBjb252ZXJ0ZXIoZmxhZ3MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZmluaXR5IiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTmFOIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZScsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTYsIDIxLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYsIDApOworICAgICAgICBy
ZXR1cm4gY29udmVydGVyOworICAgIH0KKyAgICAKKyAgICAKKyAgICBib29sIERvdWJsZVRvU3Ry
aW5nQ29udmVydGVyOjpIYW5kbGVTcGVjaWFsVmFsdWVzKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHZhbHVlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVpbGRl
ciogcmVzdWx0X2J1aWxkZXIpIGNvbnN0IHsKKyAgICAgICAgRG91YmxlIGRvdWJsZV9pbnNwZWN0
KHZhbHVlKTsKKyAgICAgICAgaWYgKGRvdWJsZV9pbnNwZWN0LklzSW5maW5pdGUoKSkgeworICAg
ICAgICAgICAgaWYgKGluZmluaXR5X3N5bWJvbF8gPT0gTlVMTCkgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgaWYgKHZhbHVlIDwgMCkgeworICAgICAgICAgICAgICAgIHJlc3VsdF9idWlsZGVy
LT5BZGRDaGFyYWN0ZXIoJy0nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlc3VsdF9i
dWlsZGVyLT5BZGRTdHJpbmcoaW5maW5pdHlfc3ltYm9sXyk7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZG91YmxlX2luc3BlY3QuSXNOYW4oKSkgewor
ICAgICAgICAgICAgaWYgKG5hbl9zeW1ib2xfID09IE5VTEwpIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRTdHJpbmcobmFuX3N5bWJvbF8pOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICAKKyAgICAKKyAgICB2b2lkIERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpDcmVhdGVFeHBv
bmVudGlhbFJlcHJlc2VudGF0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZGVjaW1hbF9kaWdp
dHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV4cG9uZW50LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgU3RyaW5nQnVpbGRlciogcmVzdWx0X2J1aWxkZXIpIGNvbnN0IHsKKyAgICAgICAgQVNTRVJU
KGxlbmd0aCAhPSAwKTsKKyAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcihkZWNp
bWFsX2RpZ2l0c1swXSk7CisgICAgICAgIGlmIChsZW5ndGggIT0gMSkgeworICAgICAgICAgICAg
cmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcignLicpOworICAgICAgICAgICAgcmVzdWx0X2J1
aWxkZXItPkFkZFN1YnN0cmluZygmZGVjaW1hbF9kaWdpdHNbMV0sIGxlbmd0aC0xKTsKKyAgICAg
ICAgfQorICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKGV4cG9uZW50X2NoYXJh
Y3Rlcl8pOworICAgICAgICBpZiAoZXhwb25lbnQgPCAwKSB7CisgICAgICAgICAgICByZXN1bHRf
YnVpbGRlci0+QWRkQ2hhcmFjdGVyKCctJyk7CisgICAgICAgICAgICBleHBvbmVudCA9IC1leHBv
bmVudDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICgoZmxhZ3NfICYgRU1JVF9Q
T1NJVElWRV9FWFBPTkVOVF9TSUdOKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0X2J1
aWxkZXItPkFkZENoYXJhY3RlcignKycpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGlmIChleHBvbmVudCA9PSAwKSB7CisgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRk
Q2hhcmFjdGVyKCcwJyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
QVNTRVJUKGV4cG9uZW50IDwgMWU0KTsKKyAgICAgICAgY29uc3QgaW50IGtNYXhFeHBvbmVudExl
bmd0aCA9IDU7CisgICAgICAgIGNoYXIgYnVmZmVyW2tNYXhFeHBvbmVudExlbmd0aF07CisgICAg
ICAgIGludCBmaXJzdF9jaGFyX3BvcyA9IGtNYXhFeHBvbmVudExlbmd0aDsKKyAgICAgICAgd2hp
bGUgKGV4cG9uZW50ID4gMCkgeworICAgICAgICAgICAgYnVmZmVyWy0tZmlyc3RfY2hhcl9wb3Nd
ID0gJzAnICsgKGV4cG9uZW50ICUgMTApOworICAgICAgICAgICAgZXhwb25lbnQgLz0gMTA7Cisg
ICAgICAgIH0KKyAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZFN1YnN0cmluZygmYnVmZmVyW2Zp
cnN0X2NoYXJfcG9zXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrTWF4
RXhwb25lbnRMZW5ndGggLSBmaXJzdF9jaGFyX3Bvcyk7CisgICAgfQorICAgIAorICAgIAorICAg
IHZvaWQgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6OkNyZWF0ZURlY2ltYWxSZXByZXNlbnRhdGlv
bigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciogZGVjaW1hbF9kaWdpdHMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBkZWNpbWFsX3BvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGlnaXRzX2FmdGVyX3BvaW50LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTdHJpbmdCdWlsZGVyKiByZXN1bHRfYnVpbGRlcikgY29uc3QgeworICAgICAgICAvLyBDcmVh
dGUgYSByZXByZXNlbnRhdGlvbiB0aGF0IGlzIHBhZGRlZCB3aXRoIHplcm9zIGlmIG5lZWRlZC4K
KyAgICAgICAgaWYgKGRlY2ltYWxfcG9pbnQgPD0gMCkgeworICAgICAgICAgICAgLy8gIjAuMDAw
MDBkZWNpbWFsX3JlcCIuCisgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVy
KCcwJyk7CisgICAgICAgICAgICBpZiAoZGlnaXRzX2FmdGVyX3BvaW50ID4gMCkgeworICAgICAg
ICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRDaGFyYWN0ZXIoJy4nKTsKKyAgICAgICAgICAg
ICAgICByZXN1bHRfYnVpbGRlci0+QWRkUGFkZGluZygnMCcsIC1kZWNpbWFsX3BvaW50KTsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQobGVuZ3RoIDw9IGRpZ2l0c19hZnRlcl9wb2ludCAtICgtZGVj
aW1hbF9wb2ludCkpOworICAgICAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRTdWJzdHJp
bmcoZGVjaW1hbF9kaWdpdHMsIGxlbmd0aCk7CisgICAgICAgICAgICAgICAgaW50IHJlbWFpbmlu
Z19kaWdpdHMgPSBkaWdpdHNfYWZ0ZXJfcG9pbnQgLSAoLWRlY2ltYWxfcG9pbnQpIC0gbGVuZ3Ro
OworICAgICAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRQYWRkaW5nKCcwJywgcmVtYWlu
aW5nX2RpZ2l0cyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoZGVjaW1hbF9w
b2ludCA+PSBsZW5ndGgpIHsKKyAgICAgICAgICAgIC8vICJkZWNpbWFsX3JlcDAwMDAuMDAwMDAi
IG9yICJkZWNpbWFsX3JlcC4wMDAwIgorICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZFN1
YnN0cmluZyhkZWNpbWFsX2RpZ2l0cywgbGVuZ3RoKTsKKyAgICAgICAgICAgIHJlc3VsdF9idWls
ZGVyLT5BZGRQYWRkaW5nKCcwJywgZGVjaW1hbF9wb2ludCAtIGxlbmd0aCk7CisgICAgICAgICAg
ICBpZiAoZGlnaXRzX2FmdGVyX3BvaW50ID4gMCkgeworICAgICAgICAgICAgICAgIHJlc3VsdF9i
dWlsZGVyLT5BZGRDaGFyYWN0ZXIoJy4nKTsKKyAgICAgICAgICAgICAgICByZXN1bHRfYnVpbGRl
ci0+QWRkUGFkZGluZygnMCcsIGRpZ2l0c19hZnRlcl9wb2ludCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyAiZGVjaW1hLmxfcmVwMDAwIgorICAgICAg
ICAgICAgQVNTRVJUKGRpZ2l0c19hZnRlcl9wb2ludCA+IDApOworICAgICAgICAgICAgcmVzdWx0
X2J1aWxkZXItPkFkZFN1YnN0cmluZyhkZWNpbWFsX2RpZ2l0cywgZGVjaW1hbF9wb2ludCk7Cisg
ICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKCcuJyk7CisgICAgICAgICAg
ICBBU1NFUlQobGVuZ3RoIC0gZGVjaW1hbF9wb2ludCA8PSBkaWdpdHNfYWZ0ZXJfcG9pbnQpOwor
ICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZFN1YnN0cmluZygmZGVjaW1hbF9kaWdpdHNb
ZGVjaW1hbF9wb2ludF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxlbmd0aCAtIGRlY2ltYWxfcG9pbnQpOworICAgICAgICAgICAgaW50IHJlbWFpbmluZ19kaWdp
dHMgPSBkaWdpdHNfYWZ0ZXJfcG9pbnQgLSAobGVuZ3RoIC0gZGVjaW1hbF9wb2ludCk7CisgICAg
ICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkUGFkZGluZygnMCcsIHJlbWFpbmluZ19kaWdpdHMp
OworICAgICAgICB9CisgICAgICAgIGlmIChkaWdpdHNfYWZ0ZXJfcG9pbnQgPT0gMCkgeworICAg
ICAgICAgICAgaWYgKChmbGFnc18gJiBFTUlUX1RSQUlMSU5HX0RFQ0lNQUxfUE9JTlQpICE9IDAp
IHsKKyAgICAgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKCcuJyk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKGZsYWdzXyAmIEVNSVRfVFJBSUxJTkdfWkVS
T19BRlRFUl9QT0lOVCkgIT0gMCkgeworICAgICAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5B
ZGRDaGFyYWN0ZXIoJzAnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICAKKyAgICBib29sIERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpUb1Nob3J0ZXN0KGRvdWJs
ZSB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0
cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25zdCB7CisgICAgICAgIGlmIChEb3VibGUo
dmFsdWUpLklzU3BlY2lhbCgpKSB7CisgICAgICAgICAgICByZXR1cm4gSGFuZGxlU3BlY2lhbFZh
bHVlcyh2YWx1ZSwgcmVzdWx0X2J1aWxkZXIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpbnQgZGVjaW1hbF9wb2ludDsKKyAgICAgICAgYm9vbCBzaWduOworICAgICAgICBjb25zdCBp
bnQga0RlY2ltYWxSZXBDYXBhY2l0eSA9IGtCYXNlMTBNYXhpbWFsTGVuZ3RoICsgMTsKKyAgICAg
ICAgY2hhciBkZWNpbWFsX3JlcFtrRGVjaW1hbFJlcENhcGFjaXR5XTsKKyAgICAgICAgaW50IGRl
Y2ltYWxfcmVwX2xlbmd0aDsKKyAgICAgICAgCisgICAgICAgIERvdWJsZVRvQXNjaWkodmFsdWUs
IFNIT1JURVNULCAwLCBkZWNpbWFsX3JlcCwga0RlY2ltYWxSZXBDYXBhY2l0eSwKKyAgICAgICAg
ICAgICAgICAgICAgICAmc2lnbiwgJmRlY2ltYWxfcmVwX2xlbmd0aCwgJmRlY2ltYWxfcG9pbnQp
OworICAgICAgICAKKyAgICAgICAgYm9vbCB1bmlxdWVfemVybyA9IChmbGFnc18gJiBVTklRVUVf
WkVSTykgIT0gMDsKKyAgICAgICAgaWYgKHNpZ24gJiYgKHZhbHVlICE9IDAuMCB8fCAhdW5pcXVl
X3plcm8pKSB7CisgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKCctJyk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludCBleHBvbmVudCA9IGRlY2ltYWxfcG9p
bnQgLSAxOworICAgICAgICBpZiAoKGRlY2ltYWxfaW5fc2hvcnRlc3RfbG93XyA8PSBleHBvbmVu
dCkgJiYKKyAgICAgICAgICAgIChleHBvbmVudCA8IGRlY2ltYWxfaW5fc2hvcnRlc3RfaGlnaF8p
KSB7CisgICAgICAgICAgICBDcmVhdGVEZWNpbWFsUmVwcmVzZW50YXRpb24oZGVjaW1hbF9yZXAs
IGRlY2ltYWxfcmVwX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWNpbWFsX3BvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE1heCgwLCBkZWNpbWFsX3JlcF9sZW5ndGggLSBkZWNpbWFsX3BvaW50KSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfYnVpbGRlcik7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBDcmVhdGVFeHBvbmVudGlhbFJlcHJlc2VudGF0aW9uKGRl
Y2ltYWxfcmVwLCBkZWNpbWFsX3JlcF9sZW5ndGgsIGV4cG9uZW50LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfYnVpbGRlcik7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIAorICAgIGJvb2wgRG91Ymxl
VG9TdHJpbmdDb252ZXJ0ZXI6OlRvRml4ZWQoZG91YmxlIHZhbHVlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlcXVlc3RlZF9kaWdpdHMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyKiByZXN1bHRf
YnVpbGRlcikgY29uc3QgeworICAgICAgICBBU1NFUlQoa01heEZpeGVkRGlnaXRzQmVmb3JlUG9p
bnQgPT0gNjApOworICAgICAgICBjb25zdCBkb3VibGUga0ZpcnN0Tm9uRml4ZWQgPSAxZTYwOwor
ICAgICAgICAKKyAgICAgICAgaWYgKERvdWJsZSh2YWx1ZSkuSXNTcGVjaWFsKCkpIHsKKyAgICAg
ICAgICAgIHJldHVybiBIYW5kbGVTcGVjaWFsVmFsdWVzKHZhbHVlLCByZXN1bHRfYnVpbGRlcik7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChyZXF1ZXN0ZWRfZGlnaXRzID4ga01h
eEZpeGVkRGlnaXRzQWZ0ZXJQb2ludCkgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAodmFsdWUg
Pj0ga0ZpcnN0Tm9uRml4ZWQgfHwgdmFsdWUgPD0gLWtGaXJzdE5vbkZpeGVkKSByZXR1cm4gZmFs
c2U7CisgICAgICAgIAorICAgICAgICAvLyBGaW5kIGEgc3VmZmljaWVudGx5IHByZWNpc2UgZGVj
aW1hbCByZXByZXNlbnRhdGlvbiBvZiBuLgorICAgICAgICBpbnQgZGVjaW1hbF9wb2ludDsKKyAg
ICAgICAgYm9vbCBzaWduOworICAgICAgICAvLyBBZGQgc3BhY2UgZm9yIHRoZSAnXDAnIGJ5dGUu
CisgICAgICAgIGNvbnN0IGludCBrRGVjaW1hbFJlcENhcGFjaXR5ID0KKyAgICAgICAga01heEZp
eGVkRGlnaXRzQmVmb3JlUG9pbnQgKyBrTWF4Rml4ZWREaWdpdHNBZnRlclBvaW50ICsgMTsKKyAg
ICAgICAgY2hhciBkZWNpbWFsX3JlcFtrRGVjaW1hbFJlcENhcGFjaXR5XTsKKyAgICAgICAgaW50
IGRlY2ltYWxfcmVwX2xlbmd0aDsKKyAgICAgICAgRG91YmxlVG9Bc2NpaSh2YWx1ZSwgRklYRUQs
IHJlcXVlc3RlZF9kaWdpdHMsCisgICAgICAgICAgICAgICAgICAgICAgZGVjaW1hbF9yZXAsIGtE
ZWNpbWFsUmVwQ2FwYWNpdHksCisgICAgICAgICAgICAgICAgICAgICAgJnNpZ24sICZkZWNpbWFs
X3JlcF9sZW5ndGgsICZkZWNpbWFsX3BvaW50KTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgdW5p
cXVlX3plcm8gPSAoKGZsYWdzXyAmIFVOSVFVRV9aRVJPKSAhPSAwKTsKKyAgICAgICAgaWYgKHNp
Z24gJiYgKHZhbHVlICE9IDAuMCB8fCAhdW5pcXVlX3plcm8pKSB7CisgICAgICAgICAgICByZXN1
bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKCctJyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIENyZWF0ZURlY2ltYWxSZXByZXNlbnRhdGlvbihkZWNpbWFsX3JlcCwgZGVjaW1hbF9yZXBf
bGVuZ3RoLCBkZWNpbWFsX3BvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVxdWVzdGVkX2RpZ2l0cywgcmVzdWx0X2J1aWxkZXIpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgCisgICAgCisgICAgYm9vbCBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6
VG9FeHBvbmVudGlhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRvdWJsZSB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCByZXF1ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVpbGRlciogcmVzdWx0X2J1aWxkZXIp
IGNvbnN0IHsKKyAgICAgICAgaWYgKERvdWJsZSh2YWx1ZSkuSXNTcGVjaWFsKCkpIHsKKyAgICAg
ICAgICAgIHJldHVybiBIYW5kbGVTcGVjaWFsVmFsdWVzKHZhbHVlLCByZXN1bHRfYnVpbGRlcik7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChyZXF1ZXN0ZWRfZGlnaXRzIDwgLTEp
IHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKHJlcXVlc3RlZF9kaWdpdHMgPiBrTWF4RXhwb25l
bnRpYWxEaWdpdHMpIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGludCBkZWNpbWFs
X3BvaW50OworICAgICAgICBib29sIHNpZ247CisgICAgICAgIC8vIEFkZCBzcGFjZSBmb3IgZGln
aXQgYmVmb3JlIHRoZSBkZWNpbWFsIHBvaW50IGFuZCB0aGUgJ1wwJyBjaGFyYWN0ZXIuCisgICAg
ICAgIGNvbnN0IGludCBrRGVjaW1hbFJlcENhcGFjaXR5ID0ga01heEV4cG9uZW50aWFsRGlnaXRz
ICsgMjsKKyAgICAgICAgQVNTRVJUKGtEZWNpbWFsUmVwQ2FwYWNpdHkgPiBrQmFzZTEwTWF4aW1h
bExlbmd0aCk7CisgICAgICAgIGNoYXIgZGVjaW1hbF9yZXBba0RlY2ltYWxSZXBDYXBhY2l0eV07
CisgICAgICAgIGludCBkZWNpbWFsX3JlcF9sZW5ndGg7CisgICAgICAgIAorICAgICAgICBpZiAo
cmVxdWVzdGVkX2RpZ2l0cyA9PSAtMSkgeworICAgICAgICAgICAgRG91YmxlVG9Bc2NpaSh2YWx1
ZSwgU0hPUlRFU1QsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2ltYWxfcmVwLCBr
RGVjaW1hbFJlcENhcGFjaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAmc2lnbiwgJmRl
Y2ltYWxfcmVwX2xlbmd0aCwgJmRlY2ltYWxfcG9pbnQpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgRG91YmxlVG9Bc2NpaSh2YWx1ZSwgUFJFQ0lTSU9OLCByZXF1ZXN0ZWRfZGlnaXRz
ICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjaW1hbF9yZXAsIGtEZWNpbWFsUmVw
Q2FwYWNpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICZzaWduLCAmZGVjaW1hbF9yZXBf
bGVuZ3RoLCAmZGVjaW1hbF9wb2ludCk7CisgICAgICAgICAgICBBU1NFUlQoZGVjaW1hbF9yZXBf
bGVuZ3RoIDw9IHJlcXVlc3RlZF9kaWdpdHMgKyAxKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IGRlY2ltYWxfcmVwX2xlbmd0aDsgaSA8IHJlcXVlc3RlZF9kaWdpdHMg
KyAxOyArK2kpIHsKKyAgICAgICAgICAgICAgICBkZWNpbWFsX3JlcFtpXSA9ICcwJzsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGRlY2ltYWxfcmVwX2xlbmd0aCA9IHJlcXVlc3RlZF9kaWdp
dHMgKyAxOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIHVuaXF1ZV96ZXJvID0g
KChmbGFnc18gJiBVTklRVUVfWkVSTykgIT0gMCk7CisgICAgICAgIGlmIChzaWduICYmICh2YWx1
ZSAhPSAwLjAgfHwgIXVuaXF1ZV96ZXJvKSkgeworICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXIt
PkFkZENoYXJhY3RlcignLScpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpbnQgZXhw
b25lbnQgPSBkZWNpbWFsX3BvaW50IC0gMTsKKyAgICAgICAgQ3JlYXRlRXhwb25lbnRpYWxSZXBy
ZXNlbnRhdGlvbihkZWNpbWFsX3JlcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZWNpbWFsX3JlcF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0X2J1aWxkZXIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgCisgICAgYm9vbCBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6VG9QcmVjaXNpb24oZG91
YmxlIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBwcmVjaXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU3RyaW5nQnVpbGRlciogcmVzdWx0X2J1aWxkZXIpIGNvbnN0IHsKKyAgICAgICAgaWYg
KERvdWJsZSh2YWx1ZSkuSXNTcGVjaWFsKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBIYW5kbGVT
cGVjaWFsVmFsdWVzKHZhbHVlLCByZXN1bHRfYnVpbGRlcik7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGlmIChwcmVjaXNpb24gPCBrTWluUHJlY2lzaW9uRGlnaXRzIHx8IHByZWNpc2lv
biA+IGtNYXhQcmVjaXNpb25EaWdpdHMpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRmluZCBhIHN1ZmZpY2llbnRseSBwcmVjaXNl
IGRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2Ygbi4KKyAgICAgICAgaW50IGRlY2ltYWxfcG9pbnQ7
CisgICAgICAgIGJvb2wgc2lnbjsKKyAgICAgICAgLy8gQWRkIG9uZSBmb3IgdGhlIHRlcm1pbmF0
aW5nIG51bGwgY2hhcmFjdGVyLgorICAgICAgICBjb25zdCBpbnQga0RlY2ltYWxSZXBDYXBhY2l0
eSA9IGtNYXhQcmVjaXNpb25EaWdpdHMgKyAxOworICAgICAgICBjaGFyIGRlY2ltYWxfcmVwW2tE
ZWNpbWFsUmVwQ2FwYWNpdHldOworICAgICAgICBpbnQgZGVjaW1hbF9yZXBfbGVuZ3RoOworICAg
ICAgICAKKyAgICAgICAgRG91YmxlVG9Bc2NpaSh2YWx1ZSwgUFJFQ0lTSU9OLCBwcmVjaXNpb24s
CisgICAgICAgICAgICAgICAgICAgICAgZGVjaW1hbF9yZXAsIGtEZWNpbWFsUmVwQ2FwYWNpdHks
CisgICAgICAgICAgICAgICAgICAgICAgJnNpZ24sICZkZWNpbWFsX3JlcF9sZW5ndGgsICZkZWNp
bWFsX3BvaW50KTsKKyAgICAgICAgQVNTRVJUKGRlY2ltYWxfcmVwX2xlbmd0aCA8PSBwcmVjaXNp
b24pOworICAgICAgICAKKyAgICAgICAgYm9vbCB1bmlxdWVfemVybyA9ICgoZmxhZ3NfICYgVU5J
UVVFX1pFUk8pICE9IDApOworICAgICAgICBpZiAoc2lnbiAmJiAodmFsdWUgIT0gMC4wIHx8ICF1
bmlxdWVfemVybykpIHsKKyAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRDaGFyYWN0ZXIo
Jy0nKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gVGhlIGV4cG9uZW50IGlmIHdl
IHByaW50IHRoZSBudW1iZXIgYXMgeC54eGV5eXkuIFRoYXQgaXMgd2l0aCB0aGUKKyAgICAgICAg
Ly8gZGVjaW1hbCBwb2ludCBhZnRlciB0aGUgZmlyc3QgZGlnaXQuCisgICAgICAgIGludCBleHBv
bmVudCA9IGRlY2ltYWxfcG9pbnQgLSAxOworICAgICAgICAKKyAgICAgICAgaW50IGV4dHJhX3pl
cm8gPSAoKGZsYWdzXyAmIEVNSVRfVFJBSUxJTkdfWkVST19BRlRFUl9QT0lOVCkgIT0gMCkgPyAx
IDogMDsKKyAgICAgICAgaWYgKCgtZGVjaW1hbF9wb2ludCArIDEgPiBtYXhfbGVhZGluZ19wYWRk
aW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZV8pIHx8CisgICAgICAgICAgICAoZGVjaW1hbF9w
b2ludCAtIHByZWNpc2lvbiArIGV4dHJhX3plcm8gPgorICAgICAgICAgICAgIG1heF90cmFpbGlu
Z19wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZV8pKSB7CisgICAgICAgICAgICAgICAg
Ly8gRmlsbCBidWZmZXIgdG8gY29udGFpbiAncHJlY2lzaW9uJyBkaWdpdHMuCisgICAgICAgICAg
ICAgICAgLy8gVXN1YWxseSB0aGUgYnVmZmVyIGlzIGFscmVhZHkgYXQgdGhlIGNvcnJlY3QgbGVu
Z3RoLCBidXQgJ0RvdWJsZVRvQXNjaWknCisgICAgICAgICAgICAgICAgLy8gaXMgYWxsb3dlZCB0
byByZXR1cm4gbGVzcyBjaGFyYWN0ZXJzLgorICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBk
ZWNpbWFsX3JlcF9sZW5ndGg7IGkgPCBwcmVjaXNpb247ICsraSkgeworICAgICAgICAgICAgICAg
ICAgICBkZWNpbWFsX3JlcFtpXSA9ICcwJzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgQ3JlYXRlRXhwb25lbnRpYWxSZXByZXNlbnRhdGlvbihk
ZWNpbWFsX3JlcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHByZWNpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGV4cG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0X2J1aWxkZXIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBDcmVhdGVEZWNpbWFsUmVwcmVzZW50YXRpb24oZGVjaW1hbF9yZXAsIGRlY2ltYWxf
cmVwX2xlbmd0aCwgZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTWF4KDAsIHByZWNpc2lvbiAtIGRlY2ltYWxfcG9pbnQpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfYnVpbGRlcik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAKKyAg
ICBzdGF0aWMgQmlnbnVtRHRvYU1vZGUgRHRvYVRvQmlnbnVtRHRvYU1vZGUoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvdWJsZVRvU3RyaW5nQ29udmVy
dGVyOjpEdG9hTW9kZSBkdG9hX21vZGUpIHsKKyAgICAgICAgc3dpdGNoIChkdG9hX21vZGUpIHsK
KyAgICAgICAgICAgIGNhc2UgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6OlNIT1JURVNUOiAgcmV0
dXJuIEJJR05VTV9EVE9BX1NIT1JURVNUOworICAgICAgICAgICAgY2FzZSBEb3VibGVUb1N0cmlu
Z0NvbnZlcnRlcjo6RklYRUQ6ICAgICByZXR1cm4gQklHTlVNX0RUT0FfRklYRUQ7CisgICAgICAg
ICAgICBjYXNlIERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpQUkVDSVNJT046IHJldHVybiBCSUdO
VU1fRFRPQV9QUkVDSVNJT047CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEJJR05VTV9EVE9BX1NIT1JU
RVNUOyAgLy8gVG8gc2lsZW5jZSBjb21waWxlci4KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICAKKyAgICB2b2lkIERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpEb3VibGVUb0FzY2lpKGRvdWJs
ZSB2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHRv
YU1vZGUgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCByZXF1ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhciogYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ1ZmZlcl9sZW5ndGgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sKiBzaWduLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBsZW5ndGgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHBvaW50KSB7
CisgICAgICAgIFZlY3RvcjxjaGFyPiB2ZWN0b3IoYnVmZmVyLCBidWZmZXJfbGVuZ3RoKTsKKyAg
ICAgICAgQVNTRVJUKCFEb3VibGUodikuSXNTcGVjaWFsKCkpOworICAgICAgICBBU1NFUlQobW9k
ZSA9PSBTSE9SVEVTVCB8fCByZXF1ZXN0ZWRfZGlnaXRzID49IDApOworICAgICAgICAKKyAgICAg
ICAgaWYgKERvdWJsZSh2KS5TaWduKCkgPCAwKSB7CisgICAgICAgICAgICAqc2lnbiA9IHRydWU7
CisgICAgICAgICAgICB2ID0gLXY7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAqc2ln
biA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobW9kZSA9PSBQUkVD
SVNJT04gJiYgcmVxdWVzdGVkX2RpZ2l0cyA9PSAwKSB7CisgICAgICAgICAgICB2ZWN0b3JbMF0g
PSAnXDAnOworICAgICAgICAgICAgKmxlbmd0aCA9IDA7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICh2ID09IDApIHsKKyAgICAgICAgICAgIHZl
Y3RvclswXSA9ICcwJzsKKyAgICAgICAgICAgIHZlY3RvclsxXSA9ICdcMCc7CisgICAgICAgICAg
ICAqbGVuZ3RoID0gMTsKKyAgICAgICAgICAgICpwb2ludCA9IDE7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgZmFzdF93b3JrZWQ7CisgICAg
ICAgIHN3aXRjaCAobW9kZSkgeworICAgICAgICAgICAgY2FzZSBTSE9SVEVTVDoKKyAgICAgICAg
ICAgICAgICBmYXN0X3dvcmtlZCA9IEZhc3REdG9hKHYsIEZBU1RfRFRPQV9TSE9SVEVTVCwgMCwg
dmVjdG9yLCBsZW5ndGgsIHBvaW50KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgRklYRUQ6CisgICAgICAgICAgICAgICAgZmFzdF93b3JrZWQgPSBGYXN0Rml4ZWRE
dG9hKHYsIHJlcXVlc3RlZF9kaWdpdHMsIHZlY3RvciwgbGVuZ3RoLCBwb2ludCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFBSRUNJU0lPTjoKKyAgICAgICAgICAg
ICAgICBmYXN0X3dvcmtlZCA9IEZhc3REdG9hKHYsIEZBU1RfRFRPQV9QUkVDSVNJT04sIHJlcXVl
c3RlZF9kaWdpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0
b3IsIGxlbmd0aCwgcG9pbnQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAg
IGZhc3Rfd29ya2VkID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZhc3Rfd29ya2Vk
KSByZXR1cm47CisgICAgICAgIAorICAgICAgICAvLyBJZiB0aGUgZmFzdCBkdG9hIGRpZG4ndCBz
dWNjZWVkIHVzZSB0aGUgc2xvd2VyIGJpZ251bSB2ZXJzaW9uLgorICAgICAgICBCaWdudW1EdG9h
TW9kZSBiaWdudW1fbW9kZSA9IER0b2FUb0JpZ251bUR0b2FNb2RlKG1vZGUpOworICAgICAgICBC
aWdudW1EdG9hKHYsIGJpZ251bV9tb2RlLCByZXF1ZXN0ZWRfZGlnaXRzLCB2ZWN0b3IsIGxlbmd0
aCwgcG9pbnQpOworICAgICAgICB2ZWN0b3JbKmxlbmd0aF0gPSAnXDAnOworICAgIH0KKyAgICAK
KyAgICAKKyAgICAvLyBDb25zdW1lcyB0aGUgZ2l2ZW4gc3Vic3RyaW5nIGZyb20gdGhlIGl0ZXJh
dG9yLgorICAgIC8vIFJldHVybnMgZmFsc2UsIGlmIHRoZSBzdWJzdHJpbmcgZG9lcyBub3QgbWF0
Y2guCisgICAgc3RhdGljIGJvb2wgQ29uc3VtZVN1YlN0cmluZyhjb25zdCBjaGFyKiogY3VycmVu
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVuZCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHN1YnN0cmluZykgewor
ICAgICAgICBBU1NFUlQoKipjdXJyZW50ID09ICpzdWJzdHJpbmcpOworICAgICAgICBmb3IgKHN1
YnN0cmluZysrOyAqc3Vic3RyaW5nICE9ICdcMCc7IHN1YnN0cmluZysrKSB7CisgICAgICAgICAg
ICArKypjdXJyZW50OworICAgICAgICAgICAgaWYgKCpjdXJyZW50ID09IGVuZCB8fCAqKmN1cnJl
bnQgIT0gKnN1YnN0cmluZykgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgICsrKmN1
cnJlbnQ7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBN
YXhpbXVtIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgaW4gZGVjaW1hbCByZXByZXNlbnRh
dGlvbi4KKyAgICAvLyBUaGUgbG9uZ2VzdCBwb3NzaWJsZSBkb3VibGUgaW4gZGVjaW1hbCByZXBy
ZXNlbnRhdGlvbiBpcworICAgIC8vICgyXjUzIC0gMSkgKiAyIF4gLTEwNzQgdGhhdCBpcyAoMiBe
IDUzIC0gMSkgKiA1IF4gMTA3NCAvIDEwIF4gMTA3NAorICAgIC8vICg3NjggZGlnaXRzKS4gSWYg
d2UgcGFyc2UgYSBudW1iZXIgd2hvc2UgZmlyc3QgZGlnaXRzIGFyZSBlcXVhbCB0byBhCisgICAg
Ly8gbWVhbiBvZiAyIGFkamFjZW50IGRvdWJsZXMgKHRoYXQgY291bGQgaGF2ZSB1cCB0byA3Njkg
ZGlnaXRzKSB0aGUgcmVzdWx0CisgICAgLy8gbXVzdCBiZSByb3VuZGVkIHRvIHRoZSBiaWdnZXIg
b25lIHVubGVzcyB0aGUgdGFpbCBjb25zaXN0cyBvZiB6ZXJvcywgc28KKyAgICAvLyB3ZSBkb24n
dCBuZWVkIHRvIHByZXNlcnZlIGFsbCB0aGUgZGlnaXRzLgorICAgIGNvbnN0IGludCBrTWF4U2ln
bmlmaWNhbnREaWdpdHMgPSA3NzI7CisgICAgCisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlm
IGEgbm9uc3BhY2UgZm91bmQgYW5kIGZhbHNlIGlmIHRoZSBlbmQgaGFzIHJlYWNoZWQuCisgICAg
c3RhdGljIGlubGluZSBib29sIEFkdmFuY2VUb05vbnNwYWNlKGNvbnN0IGNoYXIqKiBjdXJyZW50
LCBjb25zdCBjaGFyKiBlbmQpIHsKKyAgICAgICAgd2hpbGUgKCpjdXJyZW50ICE9IGVuZCkgewor
ICAgICAgICAgICAgaWYgKCoqY3VycmVudCAhPSAnICcpIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgKysqY3VycmVudDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIAorICAgIAorICAgIHN0YXRpYyBib29sIGlzRGlnaXQoaW50IHgsIGludCByYWRpeCkgewor
ICAgICAgICByZXR1cm4gKHggPj0gJzAnICYmIHggPD0gJzknICYmIHggPCAnMCcgKyByYWRpeCkK
KyAgICAgICAgfHwgKHJhZGl4ID4gMTAgJiYgeCA+PSAnYScgJiYgeCA8ICdhJyArIHJhZGl4IC0g
MTApCisgICAgICAgIHx8IChyYWRpeCA+IDEwICYmIHggPj0gJ0EnICYmIHggPCAnQScgKyByYWRp
eCAtIDEwKTsKKyAgICB9CisgICAgCisgICAgCisgICAgc3RhdGljIGRvdWJsZSBTaWduZWRaZXJv
KGJvb2wgc2lnbikgeworICAgICAgICByZXR1cm4gc2lnbiA/IC0wLjAgOiAwLjA7CisgICAgfQor
ICAgIAorICAgIAorICAgIC8vIFBhcnNpbmcgaW50ZWdlcnMgd2l0aCByYWRpeCAyLCA0LCA4LCAx
NiwgMzIuIEFzc3VtZXMgY3VycmVudCAhPSBlbmQuCisgICAgdGVtcGxhdGUgPGludCByYWRpeF9s
b2dfMj4KKyAgICBzdGF0aWMgZG91YmxlIFJhZGl4U3RyaW5nVG9Eb3VibGUoY29uc3QgY2hhciog
Y3VycmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciogZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNpZ24s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsb3dfdHJhaWxp
bmdfanVuaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGp1
bmtfc3RyaW5nX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyKiogdHJhaWxpbmdfcG9pbnRlcikgeworICAgICAgICBBU1NFUlQoY3VycmVudCAh
PSBlbmQpOworICAgICAgICAKKyAgICAgICAgLy8gU2tpcCBsZWFkaW5nIDBzLgorICAgICAgICB3
aGlsZSAoKmN1cnJlbnQgPT0gJzAnKSB7CisgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAg
ICAgICBpZiAoY3VycmVudCA9PSBlbmQpIHsKKyAgICAgICAgICAgICAgICAqdHJhaWxpbmdfcG9p
bnRlciA9IGVuZDsKKyAgICAgICAgICAgICAgICByZXR1cm4gU2lnbmVkWmVybyhzaWduKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaW50NjRfdCBudW1iZXIg
PSAwOworICAgICAgICBpbnQgZXhwb25lbnQgPSAwOworICAgICAgICBjb25zdCBpbnQgcmFkaXgg
PSAoMSA8PCByYWRpeF9sb2dfMik7CisgICAgICAgIAorICAgICAgICBkbyB7CisgICAgICAgICAg
ICBpbnQgZGlnaXQ7CisgICAgICAgICAgICBpZiAoKmN1cnJlbnQgPj0gJzAnICYmICpjdXJyZW50
IDw9ICc5JyAmJiAqY3VycmVudCA8ICcwJyArIHJhZGl4KSB7CisgICAgICAgICAgICAgICAgZGln
aXQgPSBzdGF0aWNfY2FzdDxjaGFyPigqY3VycmVudCkgLSAnMCc7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKHJhZGl4ID4gMTAgJiYgKmN1cnJlbnQgPj0gJ2EnICYmICpjdXJyZW50IDwgJ2EnICsg
cmFkaXggLSAxMCkgeworICAgICAgICAgICAgICAgIGRpZ2l0ID0gc3RhdGljX2Nhc3Q8Y2hhcj4o
KmN1cnJlbnQpIC0gJ2EnICsgMTA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHJhZGl4ID4gMTAg
JiYgKmN1cnJlbnQgPj0gJ0EnICYmICpjdXJyZW50IDwgJ0EnICsgcmFkaXggLSAxMCkgeworICAg
ICAgICAgICAgICAgIGRpZ2l0ID0gc3RhdGljX2Nhc3Q8Y2hhcj4oKmN1cnJlbnQpIC0gJ0EnICsg
MTA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChhbGxvd190cmFp
bGluZ19qdW5rIHx8ICFBZHZhbmNlVG9Ob25zcGFjZSgmY3VycmVudCwgZW5kKSkgeworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWU7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBudW1iZXIgPSBudW1iZXIg
KiByYWRpeCArIGRpZ2l0OworICAgICAgICAgICAgaW50IG92ZXJmbG93ID0gc3RhdGljX2Nhc3Q8
aW50PihudW1iZXIgPj4gNTMpOworICAgICAgICAgICAgaWYgKG92ZXJmbG93ICE9IDApIHsKKyAg
ICAgICAgICAgICAgICAvLyBPdmVyZmxvdyBvY2N1cnJlZC4gTmVlZCB0byBkZXRlcm1pbmUgd2hp
Y2ggZGlyZWN0aW9uIHRvIHJvdW5kIHRoZQorICAgICAgICAgICAgICAgIC8vIHJlc3VsdC4KKyAg
ICAgICAgICAgICAgICBpbnQgb3ZlcmZsb3dfYml0c19jb3VudCA9IDE7CisgICAgICAgICAgICAg
ICAgd2hpbGUgKG92ZXJmbG93ID4gMSkgeworICAgICAgICAgICAgICAgICAgICBvdmVyZmxvd19i
aXRzX2NvdW50Kys7CisgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93ID4+PSAxOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpbnQgZHJvcHBl
ZF9iaXRzX21hc2sgPSAoKDEgPDwgb3ZlcmZsb3dfYml0c19jb3VudCkgLSAxKTsKKyAgICAgICAg
ICAgICAgICBpbnQgZHJvcHBlZF9iaXRzID0gc3RhdGljX2Nhc3Q8aW50PihudW1iZXIpICYgZHJv
cHBlZF9iaXRzX21hc2s7CisgICAgICAgICAgICAgICAgbnVtYmVyID4+PSBvdmVyZmxvd19iaXRz
X2NvdW50OworICAgICAgICAgICAgICAgIGV4cG9uZW50ID0gb3ZlcmZsb3dfYml0c19jb3VudDsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBib29sIHplcm9fdGFpbCA9IHRydWU7
CisgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICAgICAgKytj
dXJyZW50OworICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQgfHwgIWlzRGln
aXQoKmN1cnJlbnQsIHJhZGl4KSkgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIHplcm9fdGFp
bCA9IHplcm9fdGFpbCAmJiAqY3VycmVudCA9PSAnMCc7CisgICAgICAgICAgICAgICAgICAgIGV4
cG9uZW50ICs9IHJhZGl4X2xvZ18yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBpZiAoIWFsbG93X3RyYWlsaW5nX2p1bmsgJiYgQWR2YW5jZVRv
Tm9uc3BhY2UoJmN1cnJlbnQsIGVuZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGp1
bmtfc3RyaW5nX3ZhbHVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBpbnQgbWlkZGxlX3ZhbHVlID0gKDEgPDwgKG92ZXJmbG93X2JpdHNfY291
bnQgLSAxKSk7CisgICAgICAgICAgICAgICAgaWYgKGRyb3BwZWRfYml0cyA+IG1pZGRsZV92YWx1
ZSkgeworICAgICAgICAgICAgICAgICAgICBudW1iZXIrKzsgIC8vIFJvdW5kaW5nIHVwLgorICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoZHJvcHBlZF9iaXRzID09IG1pZGRsZV92YWx1ZSkgewor
ICAgICAgICAgICAgICAgICAgICAvLyBSb3VuZGluZyB0byBldmVuIHRvIGNvbnNpc3RlbmN5IHdp
dGggZGVjaW1hbHM6IGhhbGYtd2F5IGNhc2Ugcm91bmRzCisgICAgICAgICAgICAgICAgICAgIC8v
IHVwIGlmIHNpZ25pZmljYW50IHBhcnQgaXMgb2RkIGFuZCBkb3duIG90aGVyd2lzZS4KKyAgICAg
ICAgICAgICAgICAgICAgaWYgKChudW1iZXIgJiAxKSAhPSAwIHx8ICF6ZXJvX3RhaWwpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG51bWJlcisrOyAgLy8gUm91bmRpbmcgdXAuCisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgLy8gUm91bmRpbmcgdXAgbWF5IGNhdXNlIG92ZXJmbG93LgorICAgICAgICAg
ICAgICAgIGlmICgobnVtYmVyICYgKChpbnQ2NF90KTEgPDwgNTMpKSAhPSAwKSB7CisgICAgICAg
ICAgICAgICAgICAgIGV4cG9uZW50Kys7CisgICAgICAgICAgICAgICAgICAgIG51bWJlciA+Pj0g
MTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgIH0gd2hpbGUgKGN1cnJlbnQgIT0g
ZW5kKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChudW1iZXIgPCAoKGludDY0X3QpMSA8PCA1
MykpOworICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91
YmxlPihudW1iZXIpKSA9PSBudW1iZXIpOworICAgICAgICAKKyAgICAgICAgKnRyYWlsaW5nX3Bv
aW50ZXIgPSBjdXJyZW50OworICAgICAgICAKKyAgICAgICAgaWYgKGV4cG9uZW50ID09IDApIHsK
KyAgICAgICAgICAgIGlmIChzaWduKSB7CisgICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PSAw
KSByZXR1cm4gLTAuMDsKKyAgICAgICAgICAgICAgICBudW1iZXIgPSAtbnVtYmVyOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obnVtYmVyKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJUKG51bWJlciAhPSAwKTsKKyAgICAg
ICAgcmV0dXJuIERvdWJsZShEaXlGcChudW1iZXIsIGV4cG9uZW50KSkudmFsdWUoKTsKKyAgICB9
CisgICAgCisgICAgCisgICAgZG91YmxlIFN0cmluZ1RvRG91YmxlQ29udmVydGVyOjpTdHJpbmdU
b0RvdWJsZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIGlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCogcHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291bnQp
IHsKKyAgICAgICAgY29uc3QgY2hhciogY3VycmVudCA9IGlucHV0OworICAgICAgICBjb25zdCBj
aGFyKiBlbmQgPSBpbnB1dCArIGxlbmd0aDsKKyAgICAgICAgCisgICAgICAgICpwcm9jZXNzZWRf
Y2hhcmFjdGVyc19jb3VudCA9IDA7CisgICAgICAgIAorICAgICAgICBjb25zdCBib29sIGFsbG93
X3RyYWlsaW5nX2p1bmsgPSAoZmxhZ3NfICYgQUxMT1dfVFJBSUxJTkdfSlVOSykgIT0gMDsKKyAg
ICAgICAgY29uc3QgYm9vbCBhbGxvd19sZWFkaW5nX3NwYWNlcyA9IChmbGFnc18gJiBBTExPV19M
RUFESU5HX1NQQUNFUykgIT0gMDsKKyAgICAgICAgY29uc3QgYm9vbCBhbGxvd190cmFpbGluZ19z
cGFjZXMgPSAoZmxhZ3NfICYgQUxMT1dfVFJBSUxJTkdfU1BBQ0VTKSAhPSAwOworICAgICAgICBj
b25zdCBib29sIGFsbG93X3NwYWNlc19hZnRlcl9zaWduID0gKGZsYWdzXyAmIEFMTE9XX1NQQUNF
U19BRlRFUl9TSUdOKSAhPSAwOworICAgICAgICAKKyAgICAgICAgLy8gVG8gbWFrZSBzdXJlIHRo
YXQgaXRlcmF0b3IgZGVyZWZlcmVuY2luZyBpcyB2YWxpZCB0aGUgZm9sbG93aW5nCisgICAgICAg
IC8vIGNvbnZlbnRpb24gaXMgdXNlZDoKKyAgICAgICAgLy8gMS4gRWFjaCAnKytjdXJyZW50JyBz
dGF0ZW1lbnQgaXMgZm9sbG93ZWQgYnkgY2hlY2sgZm9yIGVxdWFsaXR5IHRvICdlbmQnLgorICAg
ICAgICAvLyAyLiBJZiBBZHZhbmNlVG9Ob25zcGFjZSByZXR1cm5lZCBmYWxzZSB0aGVuIGN1cnJl
bnQgPT0gZW5kLgorICAgICAgICAvLyAzLiBJZiAnY3VycmVudCcgYmVjb21lcyBlcXVhbCB0byAn
ZW5kJyB0aGUgZnVuY3Rpb24gcmV0dXJucyBvciBnb2VzIHRvCisgICAgICAgIC8vICdwYXJzaW5n
X2RvbmUnLgorICAgICAgICAvLyA0LiAnY3VycmVudCcgaXMgbm90IGRlcmVmZXJlbmNlZCBhZnRl
ciB0aGUgJ3BhcnNpbmdfZG9uZScgbGFiZWwuCisgICAgICAgIC8vIDUuIENvZGUgYmVmb3JlICdw
YXJzaW5nX2RvbmUnIG1heSByZWx5IG9uICdjdXJyZW50ICE9IGVuZCcuCisgICAgICAgIGlmIChj
dXJyZW50ID09IGVuZCkgcmV0dXJuIGVtcHR5X3N0cmluZ192YWx1ZV87CisgICAgICAgIAorICAg
ICAgICBpZiAoYWxsb3dfbGVhZGluZ19zcGFjZXMgfHwgYWxsb3dfdHJhaWxpbmdfc3BhY2VzKSB7
CisgICAgICAgICAgICBpZiAoIUFkdmFuY2VUb05vbnNwYWNlKCZjdXJyZW50LCBlbmQpKSB7Cisg
ICAgICAgICAgICAgICAgKnByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50ID0gY3VycmVudCAtIGlu
cHV0OworICAgICAgICAgICAgICAgIHJldHVybiBlbXB0eV9zdHJpbmdfdmFsdWVfOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKCFhbGxvd19sZWFkaW5nX3NwYWNlcyAmJiAoaW5wdXQg
IT0gY3VycmVudCkpIHsKKyAgICAgICAgICAgICAgICAvLyBObyBsZWFkaW5nIHNwYWNlcyBhbGxv
d2VkLCBidXQgQWR2YW5jZVRvTm9uc3BhY2UgbW92ZWQgZm9yd2FyZC4KKyAgICAgICAgICAgICAg
ICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICAvLyBUaGUgbG9uZ2VzdCBmb3JtIG9mIHNpbXBsaWZpZWQgbnVtYmVy
IGlzOiAiLTxzaWduaWZpY2FudCBkaWdpdHM+LjFlWFhYXDAiLgorICAgICAgICBjb25zdCBpbnQg
a0J1ZmZlclNpemUgPSBrTWF4U2lnbmlmaWNhbnREaWdpdHMgKyAxMDsKKyAgICAgICAgY2hhciBi
dWZmZXJba0J1ZmZlclNpemVdOyAgLy8gTk9MSU5UOiBzaXplIGlzIGtub3duIGF0IGNvbXBpbGUg
dGltZS4KKyAgICAgICAgaW50IGJ1ZmZlcl9wb3MgPSAwOworICAgICAgICAKKyAgICAgICAgLy8g
RXhwb25lbnQgd2lsbCBiZSBhZGp1c3RlZCBpZiBpbnNpZ25pZmljYW50IGRpZ2l0cyBvZiB0aGUg
aW50ZWdlciBwYXJ0CisgICAgICAgIC8vIG9yIGluc2lnbmlmaWNhbnQgbGVhZGluZyB6ZXJvcyBv
ZiB0aGUgZnJhY3Rpb25hbCBwYXJ0IGFyZSBkcm9wcGVkLgorICAgICAgICBpbnQgZXhwb25lbnQg
PSAwOworICAgICAgICBpbnQgc2lnbmlmaWNhbnRfZGlnaXRzID0gMDsKKyAgICAgICAgaW50IGlu
c2lnbmlmaWNhbnRfZGlnaXRzID0gMDsKKyAgICAgICAgYm9vbCBub256ZXJvX2RpZ2l0X2Ryb3Bw
ZWQgPSBmYWxzZTsKKyAgICAgICAgYm9vbCBmcmFjdGlvbmFsX3BhcnQgPSBmYWxzZTsKKyAgICAg
ICAgCisgICAgICAgIGJvb2wgc2lnbiA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKCpj
dXJyZW50ID09ICcrJyB8fCAqY3VycmVudCA9PSAnLScpIHsKKyAgICAgICAgICAgIHNpZ24gPSAo
KmN1cnJlbnQgPT0gJy0nKTsKKyAgICAgICAgICAgICsrY3VycmVudDsKKyAgICAgICAgICAgIGNv
bnN0IGNoYXIqIG5leHRfbm9uX3NwYWNlID0gY3VycmVudDsKKyAgICAgICAgICAgIC8vIFNraXAg
Zm9sbG93aW5nIHNwYWNlcyAoaWYgYWxsb3dlZCkuCisgICAgICAgICAgICBpZiAoIUFkdmFuY2VU
b05vbnNwYWNlKCZuZXh0X25vbl9zcGFjZSwgZW5kKSkgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVl
XzsKKyAgICAgICAgICAgIGlmICghYWxsb3dfc3BhY2VzX2FmdGVyX3NpZ24gJiYgKGN1cnJlbnQg
IT0gbmV4dF9ub25fc3BhY2UpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5n
X3ZhbHVlXzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGN1cnJlbnQgPSBuZXh0X25vbl9z
cGFjZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGluZmluaXR5X3N5bWJvbF8g
IT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKCpjdXJyZW50ID09IGluZmluaXR5X3N5bWJvbF9b
MF0pIHsKKyAgICAgICAgICAgICAgICBpZiAoIUNvbnN1bWVTdWJTdHJpbmcoJmN1cnJlbnQsIGVu
ZCwgaW5maW5pdHlfc3ltYm9sXykpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGp1bmtf
c3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgaWYgKCEoYWxsb3dfdHJhaWxpbmdfc3BhY2VzIHx8IGFsbG93X3RyYWlsaW5n
X2p1bmspICYmIChjdXJyZW50ICE9IGVuZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGp1bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
aWYgKCFhbGxvd190cmFpbGluZ19qdW5rICYmIEFkdmFuY2VUb05vbnNwYWNlKCZjdXJyZW50LCBl
bmQpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEFTU0VS
VChidWZmZXJfcG9zID09IDApOworICAgICAgICAgICAgICAgICpwcm9jZXNzZWRfY2hhcmFjdGVy
c19jb3VudCA9IGN1cnJlbnQgLSBpbnB1dDsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2lnbiA/
IC1Eb3VibGU6OkluZmluaXR5KCkgOiBEb3VibGU6OkluZmluaXR5KCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChuYW5fc3ltYm9sXyAhPSBOVUxMKSB7
CisgICAgICAgICAgICBpZiAoKmN1cnJlbnQgPT0gbmFuX3N5bWJvbF9bMF0pIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIUNvbnN1bWVTdWJTdHJpbmcoJmN1cnJlbnQsIGVuZCwgbmFuX3N5bWJvbF8p
KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghKGFs
bG93X3RyYWlsaW5nX3NwYWNlcyB8fCBhbGxvd190cmFpbGluZ19qdW5rKSAmJiAoY3VycmVudCAh
PSBlbmQpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghYWxsb3dfdHJhaWxpbmdf
anVuayAmJiBBZHZhbmNlVG9Ob25zcGFjZSgmY3VycmVudCwgZW5kKSkgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBBU1NFUlQoYnVmZmVyX3BvcyA9PSAwKTsK
KyAgICAgICAgICAgICAgICAqcHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291bnQgPSBjdXJyZW50IC0g
aW5wdXQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNpZ24gPyAtRG91YmxlOjpOYU4oKSA6IERv
dWJsZTo6TmFOKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGJvb2wgbGVhZGluZ196ZXJvID0gZmFsc2U7CisgICAgICAgIGlmICgqY3VycmVudCA9PSAnMCcp
IHsKKyAgICAgICAgICAgICsrY3VycmVudDsKKyAgICAgICAgICAgIGlmIChjdXJyZW50ID09IGVu
ZCkgeworICAgICAgICAgICAgICAgICpwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCA9IGN1cnJl
bnQgLSBpbnB1dDsKKyAgICAgICAgICAgICAgICByZXR1cm4gU2lnbmVkWmVybyhzaWduKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbGVhZGluZ196ZXJvID0gdHJ1
ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSXQgY291bGQgYmUgaGV4YWRlY2ltYWwg
dmFsdWUuCisgICAgICAgICAgICBpZiAoKGZsYWdzXyAmIEFMTE9XX0hFWCkgJiYgKCpjdXJyZW50
ID09ICd4JyB8fCAqY3VycmVudCA9PSAnWCcpKSB7CisgICAgICAgICAgICAgICAgKytjdXJyZW50
OworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ID09IGVuZCB8fCAhaXNEaWdpdCgqY3VycmVu
dCwgMTYpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87
ICAvLyAiMHgiLgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKiB0YWlsX3BvaW50ZXIgPSBOVUxMOworICAgICAgICAgICAgICAg
IGRvdWJsZSByZXN1bHQgPSBSYWRpeFN0cmluZ1RvRG91YmxlPDQ+KGN1cnJlbnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ24s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YWxsb3dfdHJhaWxpbmdfanVuaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqdW5rX3N0cmluZ192YWx1ZV8sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRhaWxfcG9pbnRlcik7Cisg
ICAgICAgICAgICAgICAgaWYgKHRhaWxfcG9pbnRlciAhPSBOVUxMKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChhbGxvd190cmFpbGluZ19zcGFjZXMpIEFkdmFuY2VUb05vbnNwYWNlKCZ0YWls
X3BvaW50ZXIsIGVuZCk7CisgICAgICAgICAgICAgICAgICAgICpwcm9jZXNzZWRfY2hhcmFjdGVy
c19jb3VudCA9IHRhaWxfcG9pbnRlciAtIGlucHV0OworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICAvLyBJZ25vcmUgbGVhZGluZyB6ZXJvcyBpbiB0aGUgaW50ZWdlciBwYXJ0Lgor
ICAgICAgICAgICAgd2hpbGUgKCpjdXJyZW50ID09ICcwJykgeworICAgICAgICAgICAgICAgICsr
Y3VycmVudDsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgKnByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50ID0gY3VycmVudCAtIGlucHV0
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2lnbmVkWmVybyhzaWduKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJv
b2wgb2N0YWwgPSBsZWFkaW5nX3plcm8gJiYgKGZsYWdzXyAmIEFMTE9XX09DVEFMUykgIT0gMDsK
KyAgICAgICAgCisgICAgICAgIC8vIENvcHkgc2lnbmlmaWNhbnQgZGlnaXRzIG9mIHRoZSBpbnRl
Z2VyIHBhcnQgKGlmIGFueSkgdG8gdGhlIGJ1ZmZlci4KKyAgICAgICAgd2hpbGUgKCpjdXJyZW50
ID49ICcwJyAmJiAqY3VycmVudCA8PSAnOScpIHsKKyAgICAgICAgICAgIGlmIChzaWduaWZpY2Fu
dF9kaWdpdHMgPCBrTWF4U2lnbmlmaWNhbnREaWdpdHMpIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoYnVmZmVyX3BvcyA8IGtCdWZmZXJTaXplKTsKKyAgICAgICAgICAgICAgICBidWZmZXJbYnVm
ZmVyX3BvcysrXSA9IHN0YXRpY19jYXN0PGNoYXI+KCpjdXJyZW50KTsKKyAgICAgICAgICAgICAg
ICBzaWduaWZpY2FudF9kaWdpdHMrKzsKKyAgICAgICAgICAgICAgICAvLyBXaWxsIGxhdGVyIGNo
ZWNrIGlmIGl0J3MgYW4gb2N0YWwgaW4gdGhlIGJ1ZmZlci4KKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgaW5zaWduaWZpY2FudF9kaWdpdHMrKzsgIC8vIE1vdmUgdGhlIGRp
Z2l0IGludG8gdGhlIGV4cG9uZW50aWFsIHBhcnQuCisgICAgICAgICAgICAgICAgbm9uemVyb19k
aWdpdF9kcm9wcGVkID0gbm9uemVyb19kaWdpdF9kcm9wcGVkIHx8ICpjdXJyZW50ICE9ICcwJzsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9jdGFsID0gb2N0YWwgJiYgKmN1cnJlbnQgPCAn
OCc7CisgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBl
bmQpIGdvdG8gcGFyc2luZ19kb25lOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAo
c2lnbmlmaWNhbnRfZGlnaXRzID09IDApIHsKKyAgICAgICAgICAgIG9jdGFsID0gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICgqY3VycmVudCA9PSAnLicpIHsKKyAgICAg
ICAgICAgIGlmIChvY3RhbCAmJiAhYWxsb3dfdHJhaWxpbmdfanVuaykgcmV0dXJuIGp1bmtfc3Ry
aW5nX3ZhbHVlXzsKKyAgICAgICAgICAgIGlmIChvY3RhbCkgZ290byBwYXJzaW5nX2RvbmU7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgICsrY3VycmVudDsKKyAgICAgICAgICAgIGlmIChjdXJy
ZW50ID09IGVuZCkgeworICAgICAgICAgICAgICAgIGlmIChzaWduaWZpY2FudF9kaWdpdHMgPT0g
MCAmJiAhbGVhZGluZ196ZXJvKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0
cmluZ192YWx1ZV87CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgZ290byBwYXJzaW5nX2RvbmU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoc2lnbmlmaWNhbnRfZGlnaXRzID09IDApIHsK
KyAgICAgICAgICAgICAgICAvLyBvY3RhbCA9IGZhbHNlOworICAgICAgICAgICAgICAgIC8vIElu
dGVnZXIgcGFydCBjb25zaXN0cyBvZiAwIG9yIGlzIGFic2VudC4gU2lnbmlmaWNhbnQgZGlnaXRz
IHN0YXJ0IGFmdGVyCisgICAgICAgICAgICAgICAgLy8gbGVhZGluZyB6ZXJvcyAoaWYgYW55KS4K
KyAgICAgICAgICAgICAgICB3aGlsZSAoKmN1cnJlbnQgPT0gJzAnKSB7CisgICAgICAgICAgICAg
ICAgICAgICsrY3VycmVudDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gZW5k
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAqcHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291bnQg
PSBjdXJyZW50IC0gaW5wdXQ7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2lnbmVk
WmVybyhzaWduKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBl
eHBvbmVudC0tOyAgLy8gTW92ZSB0aGlzIDAgaW50byB0aGUgZXhwb25lbnQuCisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBXZSBk
b24ndCBlbWl0IGEgJy4nLCBidXQgYWRqdXN0IHRoZSBleHBvbmVudCBpbnN0ZWFkLgorICAgICAg
ICAgICAgZnJhY3Rpb25hbF9wYXJ0ID0gdHJ1ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Ly8gVGhlcmUgaXMgYSBmcmFjdGlvbmFsIHBhcnQuCisgICAgICAgICAgICB3aGlsZSAoKmN1cnJl
bnQgPj0gJzAnICYmICpjdXJyZW50IDw9ICc5JykgeworICAgICAgICAgICAgICAgIGlmIChzaWdu
aWZpY2FudF9kaWdpdHMgPCBrTWF4U2lnbmlmaWNhbnREaWdpdHMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKGJ1ZmZlcl9wb3MgPCBrQnVmZmVyU2l6ZSk7CisgICAgICAgICAgICAgICAg
ICAgIGJ1ZmZlcltidWZmZXJfcG9zKytdID0gc3RhdGljX2Nhc3Q8Y2hhcj4oKmN1cnJlbnQpOwor
ICAgICAgICAgICAgICAgICAgICBzaWduaWZpY2FudF9kaWdpdHMrKzsKKyAgICAgICAgICAgICAg
ICAgICAgZXhwb25lbnQtLTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAvLyBJZ25vcmUgaW5zaWduaWZpY2FudCBkaWdpdHMgaW4gdGhlIGZyYWN0aW9uYWwg
cGFydC4KKyAgICAgICAgICAgICAgICAgICAgbm9uemVyb19kaWdpdF9kcm9wcGVkID0gbm9uemVy
b19kaWdpdF9kcm9wcGVkIHx8ICpjdXJyZW50ICE9ICcwJzsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgKytjdXJyZW50OworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ID09
IGVuZCkgZ290byBwYXJzaW5nX2RvbmU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGlmICghbGVhZGluZ196ZXJvICYmIGV4cG9uZW50ID09IDAgJiYgc2lnbmlm
aWNhbnRfZGlnaXRzID09IDApIHsKKyAgICAgICAgICAgIC8vIElmIGxlYWRpbmdfemVyb3MgaXMg
dHJ1ZSB0aGVuIHRoZSBzdHJpbmcgY29udGFpbnMgemVyb3MuCisgICAgICAgICAgICAvLyBJZiBl
eHBvbmVudCA8IDAgdGhlbiBzdHJpbmcgd2FzIFsrLV1cLjAqLi4uCisgICAgICAgICAgICAvLyBJ
ZiBzaWduaWZpY2FudF9kaWdpdHMgIT0gMCB0aGUgc3RyaW5nIGlzIG5vdCBlcXVhbCB0byAwLgor
ICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHRoZXJlIGFyZSBubyBkaWdpdHMgaW4gdGhlIHN0cmlu
Zy4KKyAgICAgICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIC8vIFBhcnNlIGV4cG9uZW50aWFsIHBhcnQuCisgICAgICAgIGlmICgq
Y3VycmVudCA9PSAnZScgfHwgKmN1cnJlbnQgPT0gJ0UnKSB7CisgICAgICAgICAgICBpZiAob2N0
YWwgJiYgIWFsbG93X3RyYWlsaW5nX2p1bmspIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87Cisg
ICAgICAgICAgICBpZiAob2N0YWwpIGdvdG8gcGFyc2luZ19kb25lOworICAgICAgICAgICAgKytj
dXJyZW50OworICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gZW5kKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGFsbG93X3RyYWlsaW5nX2p1bmspIHsKKyAgICAgICAgICAgICAgICAgICAgZ290byBw
YXJzaW5nX2RvbmU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjaGFyIHNpZ24gPSAnKyc7CisgICAgICAgICAgICBpZiAoKmN1
cnJlbnQgPT0gJysnIHx8ICpjdXJyZW50ID09ICctJykgeworICAgICAgICAgICAgICAgIHNpZ24g
PSBzdGF0aWNfY2FzdDxjaGFyPigqY3VycmVudCk7CisgICAgICAgICAgICAgICAgKytjdXJyZW50
OworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ID09IGVuZCkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoYWxsb3dfdHJhaWxpbmdfanVuaykgeworICAgICAgICAgICAgICAgICAgICAgICAg
Z290byBwYXJzaW5nX2RvbmU7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQgfHwgKmN1cnJlbnQgPCAnMCcgfHwgKmN1
cnJlbnQgPiAnOScpIHsKKyAgICAgICAgICAgICAgICBpZiAoYWxsb3dfdHJhaWxpbmdfanVuaykg
eworICAgICAgICAgICAgICAgICAgICBnb3RvIHBhcnNpbmdfZG9uZTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVf
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgY29uc3QgaW50IG1heF9leHBvbmVudCA9IElOVF9NQVggLyAyOworICAgICAgICAgICAg
QVNTRVJUKC1tYXhfZXhwb25lbnQgLyAyIDw9IGV4cG9uZW50ICYmIGV4cG9uZW50IDw9IG1heF9l
eHBvbmVudCAvIDIpOworICAgICAgICAgICAgaW50IG51bSA9IDA7CisgICAgICAgICAgICBkbyB7
CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgb3ZlcmZsb3cuCisgICAgICAgICAgICAgICAgaW50
IGRpZ2l0ID0gKmN1cnJlbnQgLSAnMCc7CisgICAgICAgICAgICAgICAgaWYgKG51bSA+PSBtYXhf
ZXhwb25lbnQgLyAxMAorICAgICAgICAgICAgICAgICAgICAmJiAhKG51bSA9PSBtYXhfZXhwb25l
bnQgLyAxMCAmJiBkaWdpdCA8PSBtYXhfZXhwb25lbnQgJSAxMCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgbnVtID0gbWF4X2V4cG9uZW50OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIG51bSA9IG51bSAqIDEwICsgZGlnaXQ7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICsrY3VycmVudDsKKyAgICAgICAgICAgIH0gd2hpbGUgKGN1cnJl
bnQgIT0gZW5kICYmICpjdXJyZW50ID49ICcwJyAmJiAqY3VycmVudCA8PSAnOScpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBleHBvbmVudCArPSAoc2lnbiA9PSAnLScgPyAtbnVtIDogbnVt
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCEoYWxsb3dfdHJhaWxpbmdfc3Bh
Y2VzIHx8IGFsbG93X3RyYWlsaW5nX2p1bmspICYmIChjdXJyZW50ICE9IGVuZCkpIHsKKyAgICAg
ICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCFhbGxvd190cmFpbGluZ19qdW5rICYmIEFkdmFuY2VUb05vbnNwYWNlKCZjdXJyZW50LCBlbmQp
KSB7CisgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAgICB9Cisg
ICAgICAgIGlmIChhbGxvd190cmFpbGluZ19zcGFjZXMpIHsKKyAgICAgICAgICAgIEFkdmFuY2VU
b05vbnNwYWNlKCZjdXJyZW50LCBlbmQpOworICAgICAgICB9CisgICAgICAgIAorICAgIHBhcnNp
bmdfZG9uZToKKyAgICAgICAgZXhwb25lbnQgKz0gaW5zaWduaWZpY2FudF9kaWdpdHM7CisgICAg
ICAgIAorICAgICAgICBpZiAob2N0YWwpIHsKKyAgICAgICAgICAgIGRvdWJsZSByZXN1bHQ7Cisg
ICAgICAgICAgICBjb25zdCBjaGFyKiB0YWlsX3BvaW50ZXIgPSBOVUxMOworICAgICAgICAgICAg
cmVzdWx0ID0gUmFkaXhTdHJpbmdUb0RvdWJsZTwzPihidWZmZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciArIGJ1ZmZlcl9wb3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ24sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93X3RyYWlsaW5nX2p1bmssCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1bmtfc3RyaW5nX3ZhbHVl
XywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRhaWxfcG9p
bnRlcik7CisgICAgICAgICAgICBBU1NFUlQodGFpbF9wb2ludGVyICE9IE5VTEwpOworICAgICAg
ICAgICAgKnByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50ID0gY3VycmVudCAtIGlucHV0OworICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYg
KG5vbnplcm9fZGlnaXRfZHJvcHBlZCkgeworICAgICAgICAgICAgYnVmZmVyW2J1ZmZlcl9wb3Mr
K10gPSAnMSc7CisgICAgICAgICAgICBleHBvbmVudC0tOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBBU1NFUlQoYnVmZmVyX3BvcyA8IGtCdWZmZXJTaXplKTsKKyAgICAgICAgYnVmZmVy
W2J1ZmZlcl9wb3NdID0gJ1wwJzsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZSBjb252ZXJ0ZWQg
PSBTdHJ0b2QoVmVjdG9yPGNvbnN0IGNoYXI+KGJ1ZmZlciwgYnVmZmVyX3BvcyksIGV4cG9uZW50
KTsKKyAgICAgICAgKnByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50ID0gY3VycmVudCAtIGlucHV0
OworICAgICAgICByZXR1cm4gc2lnbj8gLWNvbnZlcnRlZDogY29udmVydGVkOworICAgIH0KKyAg
ICAKK30gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbgorCit9IC8vIG5hbWVzcGFjZSBX
VEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kb3VibGUtY29u
dmVyc2lvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2RvdWJsZS1jb252ZXJz
aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNGQ2ZmMyZjU3NDM2YmZjMDdlNzJiZjYwNTYzMjlkMThmN2Y2N2Jl
YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kb3Vi
bGUtY29udmVyc2lvbi5oCkBAIC0wLDAgKzEsNTAyIEBACisvLyBDb3B5cmlnaHQgMjAxMCB0aGUg
VjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisv
LyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
Ly8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8g
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKKyNpZm5kZWYgRE9VQkxFX0NPTlZFUlNJT05fRE9VQkxFX0NPTlZFUlNJT05fSF8KKyNk
ZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05fRE9VQkxFX0NPTlZFUlNJT05fSF8KKworI2luY2x1ZGUg
InV0aWxzLmgiCisKK25hbWVzcGFjZSBXVEYgeworCituYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNp
b24geworICAgIAorICAgIGNsYXNzIERvdWJsZVRvU3RyaW5nQ29udmVydGVyIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIC8vIFdoZW4gY2FsbGluZyBUb0ZpeGVkIHdpdGggYSBkb3VibGUgPiAxMF5r
TWF4Rml4ZWREaWdpdHNCZWZvcmVQb2ludAorICAgICAgICAvLyBvciBhIHJlcXVlc3RlZF9kaWdp
dHMgcGFyYW1ldGVyID4ga01heEZpeGVkRGlnaXRzQWZ0ZXJQb2ludCB0aGVuIHRoZQorICAgICAg
ICAvLyBmdW5jdGlvbiByZXR1cm5zIGZhbHNlLgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtN
YXhGaXhlZERpZ2l0c0JlZm9yZVBvaW50ID0gNjA7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
a01heEZpeGVkRGlnaXRzQWZ0ZXJQb2ludCA9IDYwOworICAgICAgICAKKyAgICAgICAgLy8gV2hl
biBjYWxsaW5nIFRvRXhwb25lbnRpYWwgd2l0aCBhIHJlcXVlc3RlZF9kaWdpdHMKKyAgICAgICAg
Ly8gcGFyYW1ldGVyID4ga01heEV4cG9uZW50aWFsRGlnaXRzIHRoZW4gdGhlIGZ1bmN0aW9uIHJl
dHVybnMgZmFsc2UuCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQga01heEV4cG9uZW50aWFsRGln
aXRzID0gMTIwOworICAgICAgICAKKyAgICAgICAgLy8gV2hlbiBjYWxsaW5nIFRvUHJlY2lzaW9u
IHdpdGggYSByZXF1ZXN0ZWRfZGlnaXRzCisgICAgICAgIC8vIHBhcmFtZXRlciA8IGtNaW5QcmVj
aXNpb25EaWdpdHMgb3IgcmVxdWVzdGVkX2RpZ2l0cyA+IGtNYXhQcmVjaXNpb25EaWdpdHMKKyAg
ICAgICAgLy8gdGhlbiB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZS4KKyAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBrTWluUHJlY2lzaW9uRGlnaXRzID0gMTsKKyAgICAgICAgc3RhdGljIGNvbnN0
IGludCBrTWF4UHJlY2lzaW9uRGlnaXRzID0gMTIwOworICAgICAgICAKKyAgICAgICAgZW51bSBG
bGFncyB7CisgICAgICAgICAgICBOT19GTEFHUyA9IDAsCisgICAgICAgICAgICBFTUlUX1BPU0lU
SVZFX0VYUE9ORU5UX1NJR04gPSAxLAorICAgICAgICAgICAgRU1JVF9UUkFJTElOR19ERUNJTUFM
X1BPSU5UID0gMiwKKyAgICAgICAgICAgIEVNSVRfVFJBSUxJTkdfWkVST19BRlRFUl9QT0lOVCA9
IDQsCisgICAgICAgICAgICBVTklRVUVfWkVSTyA9IDgKKyAgICAgICAgfTsKKyAgICAgICAgCisg
ICAgICAgIC8vIEZsYWdzIHNob3VsZCBiZSBhIGJpdC1vciBjb21iaW5hdGlvbiBvZiB0aGUgcG9z
c2libGUgRmxhZ3MtZW51bS4KKyAgICAgICAgLy8gIC0gTk9fRkxBR1M6IG5vIHNwZWNpYWwgZmxh
Z3MuCisgICAgICAgIC8vICAtIEVNSVRfUE9TSVRJVkVfRVhQT05FTlRfU0lHTjogd2hlbiB0aGUg
bnVtYmVyIGlzIGNvbnZlcnRlZCBpbnRvIGV4cG9uZW50CisgICAgICAgIC8vICAgIGZvcm0sIGVt
aXRzIGEgJysnIGZvciBwb3NpdGl2ZSBleHBvbmVudHMuIEV4YW1wbGU6IDEuMmUrMi4KKyAgICAg
ICAgLy8gIC0gRU1JVF9UUkFJTElOR19ERUNJTUFMX1BPSU5UOiB3aGVuIHRoZSBpbnB1dCBudW1i
ZXIgaXMgYW4gaW50ZWdlciBhbmQgaXMKKyAgICAgICAgLy8gICAgY29udmVydGVkIGludG8gZGVj
aW1hbCBmb3JtYXQgdGhlbiBhIHRyYWlsaW5nIGRlY2ltYWwgcG9pbnQgaXMgYXBwZW5kZWQuCisg
ICAgICAgIC8vICAgIEV4YW1wbGU6IDIzNDUuMCBpcyBjb252ZXJ0ZWQgdG8gIjIzNDUuIi4KKyAg
ICAgICAgLy8gIC0gRU1JVF9UUkFJTElOR19aRVJPX0FGVEVSX1BPSU5UOiBpbiBhZGRpdGlvbiB0
byBhIHRyYWlsaW5nIGRlY2ltYWwgcG9pbnQKKyAgICAgICAgLy8gICAgZW1pdHMgYSB0cmFpbGlu
ZyAnMCctY2hhcmFjdGVyLiBUaGlzIGZsYWcgcmVxdWlyZXMgdGhlCisgICAgICAgIC8vICAgIEVY
TUlUX1RSQUlMSU5HX0RFQ0lNQUxfUE9JTlQgZmxhZy4KKyAgICAgICAgLy8gICAgRXhhbXBsZTog
MjM0NS4wIGlzIGNvbnZlcnRlZCB0byAiMjM0NS4wIi4KKyAgICAgICAgLy8gIC0gVU5JUVVFX1pF
Uk86ICItMC4wIiBpcyBjb252ZXJ0ZWQgdG8gIjAuMCIuCisgICAgICAgIC8vCisgICAgICAgIC8v
IEluZmluaXR5IHN5bWJvbCBhbmQgbmFuX3N5bWJvbCBwcm92aWRlIHRoZSBzdHJpbmcgcmVwcmVz
ZW50YXRpb24gZm9yIHRoZXNlCisgICAgICAgIC8vIHNwZWNpYWwgdmFsdWVzLiBJZiB0aGUgc3Ry
aW5nIGlzIE5VTEwgYW5kIHRoZSBzcGVjaWFsIHZhbHVlIGlzIGVuY291bnRlcmVkCisgICAgICAg
IC8vIHRoZW4gdGhlIGNvbnZlcnNpb24gZnVuY3Rpb25zIHJldHVybiBmYWxzZS4KKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gVGhlIGV4cG9uZW50X2NoYXJhY3RlciBpcyB1c2VkIGluIGV4cG9uZW50
aWFsIHJlcHJlc2VudGF0aW9ucy4gSXQgaXMKKyAgICAgICAgLy8gdXN1YWxseSAnZScgb3IgJ0Un
LgorICAgICAgICAvLworICAgICAgICAvLyBXaGVuIGNvbnZlcnRpbmcgdG8gdGhlIHNob3J0ZXN0
IHJlcHJlc2VudGF0aW9uIHRoZSBjb252ZXJ0ZXIgd2lsbAorICAgICAgICAvLyByZXByZXNlbnQg
aW5wdXQgbnVtYmVycyBpbiBkZWNpbWFsIGZvcm1hdCBpZiB0aGV5IGFyZSBpbiB0aGUgaW50ZXJ2
YWwKKyAgICAgICAgLy8gWzEwXmRlY2ltYWxfaW5fc2hvcnRlc3RfbG93OyAxMF5kZWNpbWFsX2lu
X3Nob3J0ZXN0X2hpZ2hbCisgICAgICAgIC8vICAgIChsb3dlciBib3VuZGFyeSBpbmNsdWRlZCwg
Z3JlYXRlciBib3VuZGFyeSBleGNsdWRlZCkuCisgICAgICAgIC8vIEV4YW1wbGU6IHdpdGggZGVj
aW1hbF9pbl9zaG9ydGVzdF9sb3cgPSAtNiBhbmQKKyAgICAgICAgLy8gICAgICAgICAgICAgICBk
ZWNpbWFsX2luX3Nob3J0ZXN0X2hpZ2ggPSAyMToKKyAgICAgICAgLy8gICBUb1Nob3J0ZXN0KDAu
MDAwMDAxKSAgLT4gIjAuMDAwMDAxIgorICAgICAgICAvLyAgIFRvU2hvcnRlc3QoMC4wMDAwMDAx
KSAtPiAiMWUtNyIKKyAgICAgICAgLy8gICBUb1Nob3J0ZXN0KDExMTExMTExMTExMTExMTExMTEx
MS4wKSAgLT4gIjExMTExMTExMTExMTExMTExMDAwMCIKKyAgICAgICAgLy8gICBUb1Nob3J0ZXN0
KDEwMDAwMDAwMDAwMDAwMDAwMDAwMC4wKSAgLT4gIjEwMDAwMDAwMDAwMDAwMDAwMDAwMCIKKyAg
ICAgICAgLy8gICBUb1Nob3J0ZXN0KDExMTExMTExMTExMTExMTExMTExMTEuMCkgLT4gIjEuMTEx
MTExMTExMTExMTExMWUrMjEiCisgICAgICAgIC8vCisgICAgICAgIC8vIFdoZW4gY29udmVydGlu
ZyB0byBwcmVjaXNpb24gbW9kZSB0aGUgY29udmVydGVyIG1heSBhZGQKKyAgICAgICAgLy8gbWF4
X2xlYWRpbmdfcGFkZGluZ196ZXJvZXMgYmVmb3JlIHJldHVybmluZyB0aGUgbnVtYmVyIGluIGV4
cG9uZW50aWFsCisgICAgICAgIC8vIGZvcm1hdC4KKyAgICAgICAgLy8gRXhhbXBsZSB3aXRoIG1h
eF9sZWFkaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2RlID0gNi4KKyAgICAgICAg
Ly8gICBUb1ByZWNpc2lvbigwLjAwMDAwMTIzNDUsIDIpIC0+ICIwLjAwMDAwMTIiCisgICAgICAg
IC8vICAgVG9QcmVjaXNpb24oMC4wMDAwMDAxMjM0NSwgMikgLT4gIjEuMmUtNyIKKyAgICAgICAg
Ly8gU2ltaWxhcmlseSB0aGUgY29udmVydGVyIG1heSBhZGQgdXAgdG8KKyAgICAgICAgLy8gbWF4
X3RyYWlsaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2RlIGluIHByZWNpc2lvbiBt
b2RlIHRvIGF2b2lkCisgICAgICAgIC8vIHJldHVybmluZyBhbiBleHBvbmVudGlhbCByZXByZXNl
bnRhdGlvbi4gQSB6ZXJvIGFkZGVkIGJ5IHRoZQorICAgICAgICAvLyBFTUlUX1RSQUlMSU5HX1pF
Uk9fQUZURVJfUE9JTlQgZmxhZyBpcyBjb3VudGVkIGZvciB0aGlzIGxpbWl0LgorICAgICAgICAv
LyBFeGFtcGxlcyBmb3IgbWF4X3RyYWlsaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9t
b2RlID0gMToKKyAgICAgICAgLy8gICBUb1ByZWNpc2lvbigyMzAuMCwgMikgLT4gIjIzMCIKKyAg
ICAgICAgLy8gICBUb1ByZWNpc2lvbigyMzAuMCwgMikgLT4gIjIzMC4iICB3aXRoIEVNSVRfVFJB
SUxJTkdfREVDSU1BTF9QT0lOVC4KKyAgICAgICAgLy8gICBUb1ByZWNpc2lvbigyMzAuMCwgMikg
LT4gIjIuM2UyIiB3aXRoIEVNSVRfVFJBSUxJTkdfWkVST19BRlRFUl9QT0lOVC4KKyAgICAgICAg
RG91YmxlVG9TdHJpbmdDb252ZXJ0ZXIoaW50IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiBpbmZpbml0eV9zeW1ib2wsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbl9zeW1ib2wsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoYXIgZXhwb25lbnRfY2hhcmFjdGVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgZGVjaW1hbF9pbl9zaG9ydGVzdF9sb3csCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBkZWNpbWFsX2luX3Nob3J0ZXN0X2hpZ2gsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXhfbGVhZGluZ19wYWRkaW5nX3plcm9l
c19pbl9wcmVjaXNpb25fbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IG1heF90cmFpbGluZ19wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZSkKKyAgICAgICAg
OiBmbGFnc18oZmxhZ3MpLAorICAgICAgICBpbmZpbml0eV9zeW1ib2xfKGluZmluaXR5X3N5bWJv
bCksCisgICAgICAgIG5hbl9zeW1ib2xfKG5hbl9zeW1ib2wpLAorICAgICAgICBleHBvbmVudF9j
aGFyYWN0ZXJfKGV4cG9uZW50X2NoYXJhY3RlciksCisgICAgICAgIGRlY2ltYWxfaW5fc2hvcnRl
c3RfbG93XyhkZWNpbWFsX2luX3Nob3J0ZXN0X2xvdyksCisgICAgICAgIGRlY2ltYWxfaW5fc2hv
cnRlc3RfaGlnaF8oZGVjaW1hbF9pbl9zaG9ydGVzdF9oaWdoKSwKKyAgICAgICAgbWF4X2xlYWRp
bmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGVfKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xlYWRpbmdfcGFkZGluZ196
ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGUpLAorICAgICAgICBtYXhfdHJhaWxpbmdfcGFkZGluZ196
ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGVfKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1heF90cmFpbGluZ19wYWRkaW5nX3plcm9lc19pbl9w
cmVjaXNpb25fbW9kZSkgeworICAgICAgICAgICAgLy8gV2hlbiAndHJhaWxpbmcgemVybyBhZnRl
ciB0aGUgcG9pbnQnIGlzIHNldCwgdGhlbiAndHJhaWxpbmcgcG9pbnQnCisgICAgICAgICAgICAv
LyBtdXN0IGJlIHNldCB0b28uCisgICAgICAgICAgICBBU1NFUlQoKChmbGFncyAmIEVNSVRfVFJB
SUxJTkdfREVDSU1BTF9QT0lOVCkgIT0gMCkgfHwKKyAgICAgICAgICAgICAgICAgICAhKChmbGFn
cyAmIEVNSVRfVFJBSUxJTkdfWkVST19BRlRFUl9QT0lOVCkgIT0gMCkpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICAvLyBSZXR1cm5zIGEgY29udmVydGVyIGZvbGxvd2luZyB0aGUgRWNt
YVNjcmlwdCBzcGVjaWZpY2F0aW9uLgorICAgICAgICBzdGF0aWMgY29uc3QgRG91YmxlVG9TdHJp
bmdDb252ZXJ0ZXImIEVjbWFTY3JpcHRDb252ZXJ0ZXIoKTsKKyAgICAgICAgCisgICAgICAgIC8v
IENvbXB1dGVzIHRoZSBzaG9ydGVzdCBzdHJpbmcgb2YgZGlnaXRzIHRoYXQgY29ycmVjdGx5IHJl
cHJlc2VudCB0aGUgaW5wdXQKKyAgICAgICAgLy8gbnVtYmVyLiBEZXBlbmRpbmcgb24gZGVjaW1h
bF9pbl9zaG9ydGVzdF9sb3cgYW5kIGRlY2ltYWxfaW5fc2hvcnRlc3RfaGlnaAorICAgICAgICAv
LyAoc2VlIGNvbnN0cnVjdG9yKSBpdCB0aGVuIGVpdGhlciByZXR1cm5zIGEgZGVjaW1hbCByZXBy
ZXNlbnRhdGlvbiwgb3IgYW4KKyAgICAgICAgLy8gZXhwb25lbnRpYWwgcmVwcmVzZW50YXRpb24u
CisgICAgICAgIC8vIEV4YW1wbGUgd2l0aCBkZWNpbWFsX2luX3Nob3J0ZXN0X2xvdyA9IC02LAor
ICAgICAgICAvLyAgICAgICAgICAgICAgZGVjaW1hbF9pbl9zaG9ydGVzdF9oaWdoID0gMjEsCisg
ICAgICAgIC8vICAgICAgICAgICAgICBFTUlUX1BPU0lUSVZFX0VYUE9ORU5UX1NJR04gYWN0aXZh
dGVkLCBhbmQKKyAgICAgICAgLy8gICAgICAgICAgICAgIEVNSVRfVFJBSUxJTkdfREVDSU1BTF9Q
T0lOVCBkZWFjdGl2ZWQ6CisgICAgICAgIC8vICAgVG9TaG9ydGVzdCgwLjAwMDAwMSkgIC0+ICIw
LjAwMDAwMSIKKyAgICAgICAgLy8gICBUb1Nob3J0ZXN0KDAuMDAwMDAwMSkgLT4gIjFlLTciCisg
ICAgICAgIC8vICAgVG9TaG9ydGVzdCgxMTExMTExMTExMTExMTExMTExMTEuMCkgIC0+ICIxMTEx
MTExMTExMTExMTExMTAwMDAiCisgICAgICAgIC8vICAgVG9TaG9ydGVzdCgxMDAwMDAwMDAwMDAw
MDAwMDAwMDAuMCkgIC0+ICIxMDAwMDAwMDAwMDAwMDAwMDAwMDAiCisgICAgICAgIC8vICAgVG9T
aG9ydGVzdCgxMTExMTExMTExMTExMTExMTExMTExLjApIC0+ICIxLjExMTExMTExMTExMTExMTFl
KzIxIgorICAgICAgICAvLworICAgICAgICAvLyBOb3RlOiB0aGUgY29udmVyc2lvbiBtYXkgcm91
bmQgdGhlIG91dHB1dCBpZiB0aGUgcmV0dXJuZWQgc3RyaW5nCisgICAgICAgIC8vIGlzIGFjY3Vy
YXRlIGVub3VnaCB0byB1bmlxdWVseSBpZGVudGlmeSB0aGUgaW5wdXQtbnVtYmVyLgorICAgICAg
ICAvLyBGb3IgZXhhbXBsZSB0aGUgbW9zdCBwcmVjaXNlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBk
b3VibGUgOWU1OSBlcXVhbHMKKyAgICAgICAgLy8gIjg5OTk5OTk5OTk5OTk5OTkxODc2NzIyOTQ0
OTcxNzYxOTk1MzgxMDEzMTI3MzY3NDY5MDY1NjIwNjg0OCIsIGJ1dAorICAgICAgICAvLyB0aGUg
Y29udmVydGVyIHdpbGwgcmV0dXJuIHRoZSBzaG9ydGVyIChidXQgc3RpbGwgY29ycmVjdCkgIjll
NTkiLgorICAgICAgICAvLworICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbnZlcnNp
b24gc3VjY2VlZHMuIFRoZSBjb252ZXJzaW9uIGFsd2F5cyBzdWNjZWVkcworICAgICAgICAvLyBl
eGNlcHQgd2hlbiB0aGUgaW5wdXQgdmFsdWUgaXMgc3BlY2lhbCBhbmQgbm8gaW5maW5pdHlfc3lt
Ym9sIG9yCisgICAgICAgIC8vIG5hbl9zeW1ib2wgaGFzIGJlZW4gZ2l2ZW4gdG8gdGhlIGNvbnN0
cnVjdG9yLgorICAgICAgICBib29sIFRvU2hvcnRlc3QoZG91YmxlIHZhbHVlLCBTdHJpbmdCdWls
ZGVyKiByZXN1bHRfYnVpbGRlcikgY29uc3Q7CisgICAgICAgIAorICAgICAgICAKKyAgICAgICAg
Ly8gQ29tcHV0ZXMgYSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIHdpdGggYSBmaXhlZCBudW1iZXIg
b2YgZGlnaXRzIGFmdGVyIHRoZQorICAgICAgICAvLyBkZWNpbWFsIHBvaW50LiBUaGUgbGFzdCBl
bWl0dGVkIGRpZ2l0IGlzIHJvdW5kZWQuCisgICAgICAgIC8vCisgICAgICAgIC8vIEV4YW1wbGVz
OgorICAgICAgICAvLyAgIFRvRml4ZWQoMy4xMiwgMSkgLT4gIjMuMSIKKyAgICAgICAgLy8gICBU
b0ZpeGVkKDMuMTQxNSwgMykgLT4gIjMuMTQyIgorICAgICAgICAvLyAgIFRvRml4ZWQoMTIzNC41
Njc4OSwgNCkgLT4gIjEyMzQuNTY3OSIKKyAgICAgICAgLy8gICBUb0ZpeGVkKDEuMjMsIDUpIC0+
ICIxLjIzMDAwIgorICAgICAgICAvLyAgIFRvRml4ZWQoMC4xLCA0KSAtPiAiMC4xMDAwIgorICAg
ICAgICAvLyAgIFRvRml4ZWQoMWUzMCwgMikgLT4gIjEwMDAwMDAwMDAwMDAwMDAwMTk4ODQ2MjQ4
Mzg2NTYuMDAiCisgICAgICAgIC8vICAgVG9GaXhlZCgwLjEsIDMwKSAtPiAiMC4xMDAwMDAwMDAw
MDAwMDAwMDU1NTExMTUxMjMxMjYiCisgICAgICAgIC8vICAgVG9GaXhlZCgwLjEsIDE3KSAtPiAi
MC4xMDAwMDAwMDAwMDAwMDAwMSIKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgcmVxdWVzdGVk
X2RpZ2l0cyBlcXVhbHMgMCwgdGhlbiB0aGUgdGFpbCBvZiB0aGUgcmVzdWx0IGRlcGVuZHMgb24K
KyAgICAgICAgLy8gdGhlIEVNSVRfVFJBSUxJTkdfREVDSU1BTF9QT0lOVCBhbmQgRU1JVF9UUkFJ
TElOR19aRVJPX0FGVEVSX1BPSU5ULgorICAgICAgICAvLyBFeGFtcGxlcywgZm9yIHJlcXVlc3Rl
ZF9kaWdpdHMgPT0gMCwKKyAgICAgICAgLy8gICBsZXQgRU1JVF9UUkFJTElOR19ERUNJTUFMX1BP
SU5UIGFuZCBFTUlUX1RSQUlMSU5HX1pFUk9fQUZURVJfUE9JTlQgYmUKKyAgICAgICAgLy8gICAg
LSBmYWxzZSBhbmQgZmFsc2U6IHRoZW4gMTIzLjQ1IC0+IDEyMworICAgICAgICAvLyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMC42NzggLT4gMQorICAgICAgICAvLyAgICAtIHRydWUgYW5k
IGZhbHNlOiB0aGVuIDEyMy40NSAtPiAxMjMuCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAuNjc4IC0+IDEuCisgICAgICAgIC8vICAgIC0gdHJ1ZSBhbmQgdHJ1ZTogdGhl
biAxMjMuNDUgLT4gMTIzLjAKKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAw
LjY3OCAtPiAxLjAKKyAgICAgICAgLy8KKyAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBj
b252ZXJzaW9uIHN1Y2NlZWRzLiBUaGUgY29udmVyc2lvbiBhbHdheXMgc3VjY2VlZHMKKyAgICAg
ICAgLy8gZXhjZXB0IGZvciB0aGUgZm9sbG93aW5nIGNhc2VzOgorICAgICAgICAvLyAgIC0gdGhl
IGlucHV0IHZhbHVlIGlzIHNwZWNpYWwgYW5kIG5vIGluZmluaXR5X3N5bWJvbCBvciBuYW5fc3lt
Ym9sIGhhcworICAgICAgICAvLyAgICAgYmVlbiBwcm92aWRlZCB0byB0aGUgY29uc3RydWN0b3Is
CisgICAgICAgIC8vICAgLSAndmFsdWUnID4gMTBea01heEZpeGVkRGlnaXRzQmVmb3JlUG9pbnQs
IG9yCisgICAgICAgIC8vICAgLSAncmVxdWVzdGVkX2RpZ2l0cycgPiBrTWF4Rml4ZWREaWdpdHNB
ZnRlclBvaW50LgorICAgICAgICAvLyBUaGUgbGFzdCB0d28gY29uZGl0aW9ucyBpbXBseSB0aGF0
IHRoZSByZXN1bHQgd2lsbCBuZXZlciBjb250YWluIG1vcmUgdGhhbgorICAgICAgICAvLyAxICsg
a01heEZpeGVkRGlnaXRzQmVmb3JlUG9pbnQgKyAxICsga01heEZpeGVkRGlnaXRzQWZ0ZXJQb2lu
dCBjaGFyYWN0ZXJzCisgICAgICAgIC8vIChvbmUgYWRkaXRpb25hbCBjaGFyYWN0ZXIgZm9yIHRo
ZSBzaWduLCBhbmQgb25lIGZvciB0aGUgZGVjaW1hbCBwb2ludCkuCisgICAgICAgIGJvb2wgVG9G
aXhlZChkb3VibGUgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICBpbnQgcmVxdWVzdGVkX2Rp
Z2l0cywKKyAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVy
KSBjb25zdDsKKyAgICAgICAgCisgICAgICAgIC8vIENvbXB1dGVzIGEgcmVwcmVzZW50YXRpb24g
aW4gZXhwb25lbnRpYWwgZm9ybWF0IHdpdGggcmVxdWVzdGVkX2RpZ2l0cworICAgICAgICAvLyBh
ZnRlciB0aGUgZGVjaW1hbCBwb2ludC4gVGhlIGxhc3QgZW1pdHRlZCBkaWdpdCBpcyByb3VuZGVk
LgorICAgICAgICAvLyBJZiByZXF1ZXN0ZWRfZGlnaXRzIGVxdWFscyAtMSwgdGhlbiB0aGUgc2hv
cnRlc3QgZXhwb25lbnRpYWwgcmVwcmVzZW50YXRpb24KKyAgICAgICAgLy8gaXMgY29tcHV0ZWQu
CisgICAgICAgIC8vCisgICAgICAgIC8vIEV4YW1wbGVzIHdpdGggRU1JVF9QT1NJVElWRV9FWFBP
TkVOVF9TSUdOIGRlYWN0aXZhdGVkLCBhbmQKKyAgICAgICAgLy8gICAgICAgICAgICAgICBleHBv
bmVudF9jaGFyYWN0ZXIgc2V0IHRvICdlJy4KKyAgICAgICAgLy8gICBUb0V4cG9uZW50aWFsKDMu
MTIsIDEpIC0+ICIzLjFlMCIKKyAgICAgICAgLy8gICBUb0V4cG9uZW50aWFsKDUuMCwgMykgLT4g
IjUuMDAwZTAiCisgICAgICAgIC8vICAgVG9FeHBvbmVudGlhbCgwLjAwMSwgMikgLT4gIjEuMDBl
LTMiCisgICAgICAgIC8vICAgVG9FeHBvbmVudGlhbCgzLjE0MTUsIC0xKSAtPiAiMy4xNDE1ZTAi
CisgICAgICAgIC8vICAgVG9FeHBvbmVudGlhbCgzLjE0MTUsIDQpIC0+ICIzLjE0MTVlMCIKKyAg
ICAgICAgLy8gICBUb0V4cG9uZW50aWFsKDMuMTQxNSwgMykgLT4gIjMuMTQyZTAiCisgICAgICAg
IC8vICAgVG9FeHBvbmVudGlhbCgxMjM0NTY3ODkwMDAwMDAsIDMpIC0+ICIxLjIzNWUxNCIKKyAg
ICAgICAgLy8gICBUb0V4cG9uZW50aWFsKDEwMDAwMDAwMDAwMDAwMDAwMTk4ODQ2MjQ4Mzg2NTYu
MCwgLTEpIC0+ICIxZTMwIgorICAgICAgICAvLyAgIFRvRXhwb25lbnRpYWwoMTAwMDAwMDAwMDAw
MDAwMDAxOTg4NDYyNDgzODY1Ni4wLCAzMikgLT4KKyAgICAgICAgLy8gICAgICAgICAgICAgICAg
ICAgICAiMS4wMDAwMDAwMDAwMDAwMDAwMTk4ODQ2MjQ4Mzg2NTYwMGUzMCIKKyAgICAgICAgLy8g
ICBUb0V4cG9uZW50aWFsKDEyMzQsIDApIC0+ICIxZTMiCisgICAgICAgIC8vCisgICAgICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgY29udmVyc2lvbiBzdWNjZWVkcy4gVGhlIGNvbnZlcnNpb24g
YWx3YXlzIHN1Y2NlZWRzCisgICAgICAgIC8vIGV4Y2VwdCBmb3IgdGhlIGZvbGxvd2luZyBjYXNl
czoKKyAgICAgICAgLy8gICAtIHRoZSBpbnB1dCB2YWx1ZSBpcyBzcGVjaWFsIGFuZCBubyBpbmZp
bml0eV9zeW1ib2wgb3IgbmFuX3N5bWJvbCBoYXMKKyAgICAgICAgLy8gICAgIGJlZW4gcHJvdmlk
ZWQgdG8gdGhlIGNvbnN0cnVjdG9yLAorICAgICAgICAvLyAgIC0gJ3JlcXVlc3RlZF9kaWdpdHMn
ID4ga01heEV4cG9uZW50aWFsRGlnaXRzLgorICAgICAgICAvLyBUaGUgbGFzdCBjb25kaXRpb24g
aW1wbGllcyB0aGF0IHRoZSByZXN1bHQgd2lsbCBuZXZlciBjb250YWluIG1vcmUgdGhhbgorICAg
ICAgICAvLyBrTWF4RXhwb25lbnRpYWxEaWdpdHMgKyA4IGNoYXJhY3RlcnMgKHRoZSBzaWduLCB0
aGUgZGlnaXQgYmVmb3JlIHRoZQorICAgICAgICAvLyBkZWNpbWFsIHBvaW50LCB0aGUgZGVjaW1h
bCBwb2ludCwgdGhlIGV4cG9uZW50IGNoYXJhY3RlciwgdGhlCisgICAgICAgIC8vIGV4cG9uZW50
J3Mgc2lnbiwgYW5kIGF0IG1vc3QgMyBleHBvbmVudCBkaWdpdHMpLgorICAgICAgICBib29sIFRv
RXhwb25lbnRpYWwoZG91YmxlIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IHJlcXVlc3RlZF9kaWdpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWls
ZGVyKiByZXN1bHRfYnVpbGRlcikgY29uc3Q7CisgICAgICAgIAorICAgICAgICAvLyBDb21wdXRl
cyAncHJlY2lzaW9uJyBsZWFkaW5nIGRpZ2l0cyBvZiB0aGUgZ2l2ZW4gJ3ZhbHVlJyBhbmQgcmV0
dXJucyB0aGVtCisgICAgICAgIC8vIGVpdGhlciBpbiBleHBvbmVudGlhbCBvciBkZWNpbWFsIGZv
cm1hdCwgZGVwZW5kaW5nIG9uCisgICAgICAgIC8vIG1heF97bGVhZGluZ3x0cmFpbGluZ31fcGFk
ZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGUgKGdpdmVuIHRvIHRoZQorICAgICAgICAvLyBj
b25zdHJ1Y3RvcikuCisgICAgICAgIC8vIFRoZSBsYXN0IGNvbXB1dGVkIGRpZ2l0IGlzIHJvdW5k
ZWQuCisgICAgICAgIC8vCisgICAgICAgIC8vIEV4YW1wbGUgd2l0aCBtYXhfbGVhZGluZ19wYWRk
aW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZSA9IDYuCisgICAgICAgIC8vICAgVG9QcmVjaXNp
b24oMC4wMDAwMDEyMzQ1LCAyKSAtPiAiMC4wMDAwMDEyIgorICAgICAgICAvLyAgIFRvUHJlY2lz
aW9uKDAuMDAwMDAwMTIzNDUsIDIpIC0+ICIxLjJlLTciCisgICAgICAgIC8vIFNpbWlsYXJpbHkg
dGhlIGNvbnZlcnRlciBtYXkgYWRkIHVwIHRvCisgICAgICAgIC8vIG1heF90cmFpbGluZ19wYWRk
aW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZSBpbiBwcmVjaXNpb24gbW9kZSB0byBhdm9pZAor
ICAgICAgICAvLyByZXR1cm5pbmcgYW4gZXhwb25lbnRpYWwgcmVwcmVzZW50YXRpb24uIEEgemVy
byBhZGRlZCBieSB0aGUKKyAgICAgICAgLy8gRU1JVF9UUkFJTElOR19aRVJPX0FGVEVSX1BPSU5U
IGZsYWcgaXMgY291bnRlZCBmb3IgdGhpcyBsaW1pdC4KKyAgICAgICAgLy8gRXhhbXBsZXMgZm9y
IG1heF90cmFpbGluZ19wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZSA9IDE6CisgICAg
ICAgIC8vICAgVG9QcmVjaXNpb24oMjMwLjAsIDIpIC0+ICIyMzAiCisgICAgICAgIC8vICAgVG9Q
cmVjaXNpb24oMjMwLjAsIDIpIC0+ICIyMzAuIiAgd2l0aCBFTUlUX1RSQUlMSU5HX0RFQ0lNQUxf
UE9JTlQuCisgICAgICAgIC8vICAgVG9QcmVjaXNpb24oMjMwLjAsIDIpIC0+ICIyLjNlMiIgd2l0
aCBFTUlUX1RSQUlMSU5HX1pFUk9fQUZURVJfUE9JTlQuCisgICAgICAgIC8vIEV4YW1wbGVzIGZv
ciBtYXhfdHJhaWxpbmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGUgPSAzLCBhbmQg
bm8KKyAgICAgICAgLy8gICAgRU1JVF9UUkFJTElOR19aRVJPX0FGVEVSX1BPSU5UOgorICAgICAg
ICAvLyAgIFRvUHJlY2lzaW9uKDEyMzQ1MC4wLCA2KSAtPiAiMTIzNDUwIgorICAgICAgICAvLyAg
IFRvUHJlY2lzaW9uKDEyMzQ1MC4wLCA1KSAtPiAiMTIzNDUwIgorICAgICAgICAvLyAgIFRvUHJl
Y2lzaW9uKDEyMzQ1MC4wLCA0KSAtPiAiMTIzNTAwIgorICAgICAgICAvLyAgIFRvUHJlY2lzaW9u
KDEyMzQ1MC4wLCAzKSAtPiAiMTIzMDAwIgorICAgICAgICAvLyAgIFRvUHJlY2lzaW9uKDEyMzQ1
MC4wLCAyKSAtPiAiMS4yZTUiCisgICAgICAgIC8vCisgICAgICAgIC8vIFJldHVybnMgdHJ1ZSBp
ZiB0aGUgY29udmVyc2lvbiBzdWNjZWVkcy4gVGhlIGNvbnZlcnNpb24gYWx3YXlzIHN1Y2NlZWRz
CisgICAgICAgIC8vIGV4Y2VwdCBmb3IgdGhlIGZvbGxvd2luZyBjYXNlczoKKyAgICAgICAgLy8g
ICAtIHRoZSBpbnB1dCB2YWx1ZSBpcyBzcGVjaWFsIGFuZCBubyBpbmZpbml0eV9zeW1ib2wgb3Ig
bmFuX3N5bWJvbCBoYXMKKyAgICAgICAgLy8gICAgIGJlZW4gcHJvdmlkZWQgdG8gdGhlIGNvbnN0
cnVjdG9yLAorICAgICAgICAvLyAgIC0gcHJlY2lzaW9uIDwga01pblBlcmljaXNpb25EaWdpdHMK
KyAgICAgICAgLy8gICAtIHByZWNpc2lvbiA+IGtNYXhQcmVjaXNpb25EaWdpdHMKKyAgICAgICAg
Ly8gVGhlIGxhc3QgY29uZGl0aW9uIGltcGxpZXMgdGhhdCB0aGUgcmVzdWx0IHdpbGwgbmV2ZXIg
Y29udGFpbiBtb3JlIHRoYW4KKyAgICAgICAgLy8ga01heFByZWNpc2lvbkRpZ2l0cyArIDcgY2hh
cmFjdGVycyAodGhlIHNpZ24sIHRoZSBkZWNpbWFsIHBvaW50LCB0aGUKKyAgICAgICAgLy8gZXhw
b25lbnQgY2hhcmFjdGVyLCB0aGUgZXhwb25lbnQncyBzaWduLCBhbmQgYXQgbW9zdCAzIGV4cG9u
ZW50IGRpZ2l0cykuCisgICAgICAgIGJvb2wgVG9QcmVjaXNpb24oZG91YmxlIHZhbHVlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBwcmVjaXNpb24sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgU3RyaW5nQnVpbGRlciogcmVzdWx0X2J1aWxkZXIpIGNvbnN0OworICAgICAgICAKKyAg
ICAgICAgZW51bSBEdG9hTW9kZSB7CisgICAgICAgICAgICAvLyBQcm9kdWNlIHRoZSBzaG9ydGVz
dCBjb3JyZWN0IHJlcHJlc2VudGF0aW9uLgorICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGUgdGhl
IG91dHB1dCBvZiAwLjI5OTk5OTk5OTk5OTk5OTk4ODg5NyBpcyAodGhlIGxlc3MgYWNjdXJhdGUK
KyAgICAgICAgICAgIC8vIGJ1dCBjb3JyZWN0KSAwLjMuCisgICAgICAgICAgICBTSE9SVEVTVCwK
KyAgICAgICAgICAgIC8vIFByb2R1Y2UgYSBmaXhlZCBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIHRo
ZSBkZWNpbWFsIHBvaW50LgorICAgICAgICAgICAgLy8gRm9yIGluc3RhbmNlIGZpeGVkKDAuMSwg
NCkgYmVjb21lcyAwLjEwMDAKKyAgICAgICAgICAgIC8vIElmIHRoZSBpbnB1dCBudW1iZXIgaXMg
YmlnLCB0aGUgb3V0cHV0IHdpbGwgYmUgYmlnLgorICAgICAgICAgICAgRklYRUQsCisgICAgICAg
ICAgICAvLyBGaXhlZCBudW1iZXIgb2YgZGlnaXRzIChpbmRlcGVuZGVudCBvZiB0aGUgZGVjaW1h
bCBwb2ludCkuCisgICAgICAgICAgICBQUkVDSVNJT04KKyAgICAgICAgfTsKKyAgICAgICAgCisg
ICAgICAgIC8vIFRoZSBtYXhpbWFsIG51bWJlciBvZiBkaWdpdHMgdGhhdCBhcmUgbmVlZGVkIHRv
IGVtaXQgYSBkb3VibGUgaW4gYmFzZSAxMC4KKyAgICAgICAgLy8gQSBoaWdoZXIgcHJlY2lzaW9u
IGNhbiBiZSBhY2hpZXZlZCBieSB1c2luZyBtb3JlIGRpZ2l0cywgYnV0IHRoZSBzaG9ydGVzdAor
ICAgICAgICAvLyBhY2N1cmF0ZSByZXByZXNlbnRhdGlvbiBvZiBhbnkgZG91YmxlIHdpbGwgbmV2
ZXIgdXNlIG1vcmUgZGlnaXRzIHRoYW4KKyAgICAgICAgLy8ga0Jhc2UxME1heGltYWxMZW5ndGgu
CisgICAgICAgIC8vIE5vdGUgdGhhdCBEb3VibGVUb0FzY2lpIG51bGwtdGVybWluYXRlcyBpdHMg
aW5wdXQuIFNvIHRoZSBnaXZlbiBidWZmZXIKKyAgICAgICAgLy8gc2hvdWxkIGJlIGF0IGxlYXN0
IGtCYXNlMTBNYXhpbWFsTGVuZ3RoICsgMSBjaGFyYWN0ZXJzIGxvbmcuCisgICAgICAgIHN0YXRp
YyBjb25zdCBpbnQga0Jhc2UxME1heGltYWxMZW5ndGggPSAxNzsKKyAgICAgICAgCisgICAgICAg
IC8vIENvbnZlcnRzIHRoZSBnaXZlbiBkb3VibGUgJ3YnIHRvIGFzY2lpLgorICAgICAgICAvLyBU
aGUgcmVzdWx0IHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBidWZmZXIgKiAxMF4ocG9pbnQtbGVu
Z3RoKS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhlIG91dHB1dCBkZXBlbmRzIG9uIHRoZSBn
aXZlbiBtb2RlOgorICAgICAgICAvLyAgLSBTSE9SVEVTVDogcHJvZHVjZSB0aGUgbGVhc3QgYW1v
dW50IG9mIGRpZ2l0cyBmb3Igd2hpY2ggdGhlIGludGVybmFsCisgICAgICAgIC8vICAgaWRlbnRp
dHkgcmVxdWlyZW1lbnQgaXMgc3RpbGwgc2F0aXNmaWVkLiBJZiB0aGUgZGlnaXRzIGFyZSBwcmlu
dGVkCisgICAgICAgIC8vICAgKHRvZ2V0aGVyIHdpdGggdGhlIGNvcnJlY3QgZXhwb25lbnQpIHRo
ZW4gcmVhZGluZyB0aGlzIG51bWJlciB3aWxsIGdpdmUKKyAgICAgICAgLy8gICAndicgYWdhaW4u
IFRoZSBidWZmZXIgd2lsbCBjaG9vc2UgdGhlIHJlcHJlc2VudGF0aW9uIHRoYXQgaXMgY2xvc2Vz
dCB0bworICAgICAgICAvLyAgICd2Jy4gSWYgdGhlcmUgYXJlIHR3byBhdCB0aGUgc2FtZSBkaXN0
YW5jZSwgdGhhbiB0aGUgb25lIGZhcnRoZXIgYXdheQorICAgICAgICAvLyAgIGZyb20gMCBpcyBj
aG9zZW4gKGhhbGZ3YXkgY2FzZXMgLSBlbmRpbmcgd2l0aCA1IC0gYXJlIHJvdW5kZWQgdXApLgor
ICAgICAgICAvLyAgIEluIHRoaXMgbW9kZSB0aGUgJ3JlcXVlc3RlZF9kaWdpdHMnIHBhcmFtZXRl
ciBpcyBpZ25vcmVkLgorICAgICAgICAvLyAgLSBGSVhFRDogcHJvZHVjZXMgZGlnaXRzIG5lY2Vz
c2FyeSB0byBwcmludCBhIGdpdmVuIG51bWJlciB3aXRoCisgICAgICAgIC8vICAgJ3JlcXVlc3Rl
ZF9kaWdpdHMnIGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludC4gVGhlIHByb2R1Y2VkIGRp
Z2l0cworICAgICAgICAvLyAgIG1pZ2h0IGJlIHRvbyBzaG9ydCBpbiB3aGljaCBjYXNlIHRoZSBj
YWxsZXIgaGFzIHRvIGZpbGwgdGhlIHJlbWFpbmRlcgorICAgICAgICAvLyAgIHdpdGggJzAncy4K
KyAgICAgICAgLy8gICBFeGFtcGxlOiB0b0ZpeGVkKDAuMDAxLCA1KSBpcyBhbGxvd2VkIHRvIHJl
dHVybiBidWZmZXI9IjEiLCBwb2ludD0tMi4KKyAgICAgICAgLy8gICBIYWxmd2F5IGNhc2VzIGFy
ZSByb3VuZGVkIHRvd2FyZHMgKy8tSW5maW5pdHkgKGF3YXkgZnJvbSAwKS4gVGhlIGNhbGwKKyAg
ICAgICAgLy8gICB0b0ZpeGVkKDAuMTUsIDIpIHRodXMgcmV0dXJucyBidWZmZXI9IjIiLCBwb2lu
dD0wLgorICAgICAgICAvLyAgIFRoZSByZXR1cm5lZCBidWZmZXIgbWF5IGNvbnRhaW4gZGlnaXRz
IHRoYXQgd291bGQgYmUgdHJ1bmNhdGVkIGZyb20gdGhlCisgICAgICAgIC8vICAgc2hvcnRlc3Qg
cmVwcmVzZW50YXRpb24gb2YgdGhlIGlucHV0LgorICAgICAgICAvLyAgLSBQUkVDSVNJT046IHBy
b2R1Y2VzICdyZXF1ZXN0ZWRfZGlnaXRzJyB3aGVyZSB0aGUgZmlyc3QgZGlnaXQgaXMgbm90ICcw
Jy4KKyAgICAgICAgLy8gICBFdmVuIHRob3VnaCB0aGUgbGVuZ3RoIG9mIHByb2R1Y2VkIGRpZ2l0
cyB1c3VhbGx5IGVxdWFscworICAgICAgICAvLyAgICdyZXF1ZXN0ZWRfZGlnaXRzJywgdGhlIGZ1
bmN0aW9uIGlzIGFsbG93ZWQgdG8gcmV0dXJuIGZld2VyIGRpZ2l0cywgaW4KKyAgICAgICAgLy8g
ICB3aGljaCBjYXNlIHRoZSBjYWxsZXIgaGFzIHRvIGZpbGwgdGhlIG1pc3NpbmcgZGlnaXRzIHdp
dGggJzAncy4KKyAgICAgICAgLy8gICBIYWxmd2F5IGNhc2VzIGFyZSBhZ2FpbiByb3VuZGVkIGF3
YXkgZnJvbSAwLgorICAgICAgICAvLyBEb3VibGVUb0FzY2lpIGV4cGVjdHMgdGhlIGdpdmVuIGJ1
ZmZlciB0byBiZSBiaWcgZW5vdWdoIHRvIGhvbGQgYWxsCisgICAgICAgIC8vIGRpZ2l0cyBhbmQg
YSB0ZXJtaW5hdGluZyBudWxsLWNoYXJhY3Rlci4gSW4gU0hPUlRFU1QtbW9kZSBpdCBleHBlY3Rz
IGEKKyAgICAgICAgLy8gYnVmZmVyIG9mIGF0IGxlYXN0IGtCYXNlMTBNYXhpbWFsTGVuZ3RoICsg
MS4gSW4gYWxsIG90aGVyIG1vZGVzIHRoZQorICAgICAgICAvLyByZXF1ZXN0ZWRfZGlnaXRzIHBh
cmFtZXRlciAoKyAxIGZvciB0aGUgbnVsbC1jaGFyYWN0ZXIpIGxpbWl0cyB0aGUgc2l6ZSBvZgor
ICAgICAgICAvLyB0aGUgb3V0cHV0LiBUaGUgZ2l2ZW4gbGVuZ3RoIGlzIG9ubHkgdXNlZCBpbiBk
ZWJ1ZyBtb2RlIHRvIGVuc3VyZSB0aGUKKyAgICAgICAgLy8gYnVmZmVyIGlzIGJpZyBlbm91Z2gu
CisgICAgICAgIHN0YXRpYyB2b2lkIERvdWJsZVRvQXNjaWkoZG91YmxlIHYsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRHRvYU1vZGUgbW9kZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGFyKiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGJ1ZmZlcl9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCogc2lnbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQq
IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHBvaW50KTsK
KyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgLy8gSWYgdGhlIHZhbHVlIGlzIGEgc3Bl
Y2lhbCB2YWx1ZSAoTmFOIG9yIEluZmluaXR5KSBjb25zdHJ1Y3RzIHRoZQorICAgICAgICAvLyBj
b3JyZXNwb25kaW5nIHN0cmluZyB1c2luZyB0aGUgY29uZmlndXJlZCBpbmZpbml0eS9uYW4tc3lt
Ym9sLgorICAgICAgICAvLyBJZiBlaXRoZXIgb2YgdGhlbSBpcyBOVUxMIG9yIHRoZSB2YWx1ZSBp
cyBub3Qgc3BlY2lhbCB0aGVuIHRoZQorICAgICAgICAvLyBmdW5jdGlvbiByZXR1cm5zIGZhbHNl
LgorICAgICAgICBib29sIEhhbmRsZVNwZWNpYWxWYWx1ZXMoZG91YmxlIHZhbHVlLCBTdHJpbmdC
dWlsZGVyKiByZXN1bHRfYnVpbGRlcikgY29uc3Q7CisgICAgICAgIC8vIENvbnN0cnVjdHMgYW4g
ZXhwb25lbnRpYWwgcmVwcmVzZW50YXRpb24gKGkuZS4gMS4yMzRlNTYpLgorICAgICAgICAvLyBU
aGUgZ2l2ZW4gZXhwb25lbnQgYXNzdW1lcyBhIGRlY2ltYWwgcG9pbnQgYWZ0ZXIgdGhlIGZpcnN0
IGRlY2ltYWwgZGlnaXQuCisgICAgICAgIHZvaWQgQ3JlYXRlRXhwb25lbnRpYWxSZXByZXNlbnRh
dGlvbihjb25zdCBjaGFyKiBkZWNpbWFsX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyKiByZXN1bHRfYnVpbGRlcikg
Y29uc3Q7CisgICAgICAgIC8vIENyZWF0ZXMgYSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIChpLmUg
MTIzNC41Njc4KS4KKyAgICAgICAgdm9pZCBDcmVhdGVEZWNpbWFsUmVwcmVzZW50YXRpb24oY29u
c3QgY2hhciogZGVjaW1hbF9kaWdpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBkZWNpbWFsX3BvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgZGlnaXRzX2FmdGVyX3BvaW50LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyKiByZXN1bHRfYnVpbGRlcikgY29uc3Q7
CisgICAgICAgIAorICAgICAgICBjb25zdCBpbnQgZmxhZ3NfOworICAgICAgICBjb25zdCBjaGFy
KiBjb25zdCBpbmZpbml0eV9zeW1ib2xfOworICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBuYW5f
c3ltYm9sXzsKKyAgICAgICAgY29uc3QgY2hhciBleHBvbmVudF9jaGFyYWN0ZXJfOworICAgICAg
ICBjb25zdCBpbnQgZGVjaW1hbF9pbl9zaG9ydGVzdF9sb3dfOworICAgICAgICBjb25zdCBpbnQg
ZGVjaW1hbF9pbl9zaG9ydGVzdF9oaWdoXzsKKyAgICAgICAgY29uc3QgaW50IG1heF9sZWFkaW5n
X3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2RlXzsKKyAgICAgICAgY29uc3QgaW50IG1h
eF90cmFpbGluZ19wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZV87CisgICAgICAgIAor
ICAgICAgICBESVNBTExPV19JTVBMSUNJVF9DT05TVFJVQ1RPUlMoRG91YmxlVG9TdHJpbmdDb252
ZXJ0ZXIpOworICAgIH07CisgICAgCisgICAgCisgICAgY2xhc3MgU3RyaW5nVG9Eb3VibGVDb252
ZXJ0ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgLy8gRW51bWVyYXRpb24gZm9yIGFsbG93aW5n
IG9jdGFscyBhbmQgaWdub3JpbmcganVuayB3aGVuIGNvbnZlcnRpbmcKKyAgICAgICAgLy8gc3Ry
aW5ncyB0byBudW1iZXJzLgorICAgICAgICBlbnVtIEZsYWdzIHsKKyAgICAgICAgICAgIE5PX0ZM
QUdTID0gMCwKKyAgICAgICAgICAgIEFMTE9XX0hFWCA9IDEsCisgICAgICAgICAgICBBTExPV19P
Q1RBTFMgPSAyLAorICAgICAgICAgICAgQUxMT1dfVFJBSUxJTkdfSlVOSyA9IDQsCisgICAgICAg
ICAgICBBTExPV19MRUFESU5HX1NQQUNFUyA9IDgsCisgICAgICAgICAgICBBTExPV19UUkFJTElO
R19TUEFDRVMgPSAxNiwKKyAgICAgICAgICAgIEFMTE9XX1NQQUNFU19BRlRFUl9TSUdOID0gMzIK
KyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIC8vIEZsYWdzIHNob3VsZCBiZSBhIGJpdC1v
ciBjb21iaW5hdGlvbiBvZiB0aGUgcG9zc2libGUgRmxhZ3MtZW51bS4KKyAgICAgICAgLy8gIC0g
Tk9fRkxBR1M6IG5vIHNwZWNpYWwgZmxhZ3MuCisgICAgICAgIC8vICAtIEFMTE9XX0hFWDogcmVj
b2duaXplcyB0aGUgcHJlZml4ICIweCIuIEhleCBudW1iZXJzIG1heSBvbmx5IGJlIGludGVnZXJz
LgorICAgICAgICAvLyAgICAgIEV4OiBTdHJpbmdUb0RvdWJsZSgiMHgxMjM0IikgLT4gNDY2MC4w
CisgICAgICAgIC8vICAgICAgICAgIEluIFN0cmluZ1RvRG91YmxlKCIweDEyMzQuNTYiKSB0aGUg
Y2hhcmFjdGVycyAiLjU2IiBhcmUgdHJhaWxpbmcKKyAgICAgICAgLy8gICAgICAgICAganVuay4g
VGhlIHJlc3VsdCBvZiB0aGUgY2FsbCBpcyBoZW5jZSBkZXBlbmRlbnQgb24KKyAgICAgICAgLy8g
ICAgICAgICAgdGhlIEFMTE9XX1RSQUlMSU5HX0pVTksgZmxhZyBhbmQvb3IgdGhlIGp1bmsgdmFs
dWUuCisgICAgICAgIC8vICAgICAgV2l0aCB0aGlzIGZsYWcgIjB4IiBpcyBhIGp1bmstc3RyaW5n
LiBFdmVuIHdpdGggQUxMT1dfVFJBSUxJTkdfSlVOSywKKyAgICAgICAgLy8gICAgICB0aGUgc3Ry
aW5nIHdpbGwgbm90IGJlIHBhcnNlZCBhcyAiMCIgZm9sbG93ZWQgYnkganVuay4KKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gIC0gQUxMT1dfT0NUQUxTOiByZWNvZ25pemVzIHRoZSBwcmVmaXggIjAi
IGZvciBvY3RhbHM6CisgICAgICAgIC8vICAgICAgSWYgYSBzZXF1ZW5jZSBvZiBvY3RhbCBkaWdp
dHMgc3RhcnRzIHdpdGggJzAnLCB0aGVuIHRoZSBudW1iZXIgaXMKKyAgICAgICAgLy8gICAgICBy
ZWFkIGFzIG9jdGFsIGludGVnZXIuIE9jdGFsIG51bWJlcnMgbWF5IG9ubHkgYmUgaW50ZWdlcnMu
CisgICAgICAgIC8vICAgICAgRXg6IFN0cmluZ1RvRG91YmxlKCIwMTIzNCIpIC0+IDY2OC4wCisg
ICAgICAgIC8vICAgICAgICAgIFN0cmluZ1RvRG91YmxlKCIwMTIzNDkiKSAtPiAxMjM0OS4wICAv
LyBOb3QgYSBzZXF1ZW5jZSBvZiBvY3RhbAorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGlnaXRzLgorICAgICAgICAvLyAgICAgICAg
ICBJbiBTdHJpbmdUb0RvdWJsZSgiMDEyMzQuNTYiKSB0aGUgY2hhcmFjdGVycyAiLjU2IiBhcmUg
dHJhaWxpbmcKKyAgICAgICAgLy8gICAgICAgICAganVuay4gVGhlIHJlc3VsdCBvZiB0aGUgY2Fs
bCBpcyBoZW5jZSBkZXBlbmRlbnQgb24KKyAgICAgICAgLy8gICAgICAgICAgdGhlIEFMTE9XX1RS
QUlMSU5HX0pVTksgZmxhZyBhbmQvb3IgdGhlIGp1bmsgdmFsdWUuCisgICAgICAgIC8vICAgICAg
ICAgIEluIFN0cmluZ1RvRG91YmxlKCIwMTIzNGU1NiIpIHRoZSBjaGFyYWN0ZXJzICJlNTYiIGFy
ZSB0cmFpbGluZworICAgICAgICAvLyAgICAgICAgICBqdW5rLCB0b28uCisgICAgICAgIC8vICAt
IEFMTE9XX1RSQUlMSU5HX0pVTks6IGlnbm9yZSB0cmFpbGluZyBjaGFyYWN0ZXJzIHRoYXQgYXJl
IG5vdCBwYXJ0IG9mCisgICAgICAgIC8vICAgICAgYSBkb3VibGUgbGl0ZXJhbC4KKyAgICAgICAg
Ly8gIC0gQUxMT1dfTEVBRElOR19TUEFDRVM6IHNraXAgb3ZlciBsZWFkaW5nIHNwYWNlcy4KKyAg
ICAgICAgLy8gIC0gQUxMT1dfVFJBSUxJTkdfU1BBQ0VTOiBpZ25vcmUgdHJhaWxpbmcgc3BhY2Vz
LgorICAgICAgICAvLyAgLSBBTExPV19TUEFDRVNfQUZURVJfU0lHTjogaWdub3JlIHNwYWNlcyBh
ZnRlciB0aGUgc2lnbi4KKyAgICAgICAgLy8gICAgICAgRXg6IFN0cmluZ1RvRG91YmxlKCItICAg
MTIzLjIiKSAtPiAtMTIzLjIuCisgICAgICAgIC8vICAgICAgICAgICBTdHJpbmdUb0RvdWJsZSgi
KyAgIDEyMy4yIikgLT4gMTIzLjIKKyAgICAgICAgLy8KKyAgICAgICAgLy8gZW1wdHlfc3RyaW5n
X3ZhbHVlIGlzIHJldHVybmVkIHdoZW4gYW4gZW1wdHkgc3RyaW5nIGlzIGdpdmVuIGFzIGlucHV0
LgorICAgICAgICAvLyBJZiBBTExPV19MRUFESU5HX1NQQUNFUyBvciBBTExPV19UUkFJTElOR19T
UEFDRVMgYXJlIHNldCwgdGhlbiBhIHN0cmluZworICAgICAgICAvLyBjb250YWluaW5nIG9ubHkg
c3BhY2VzIGlzIGNvbnZlcnRlZCB0byB0aGUgJ2VtcHR5X3N0cmluZ192YWx1ZScsIHRvby4KKyAg
ICAgICAgLy8KKyAgICAgICAgLy8ganVua19zdHJpbmdfdmFsdWUgaXMgcmV0dXJuZWQgd2hlbgor
ICAgICAgICAvLyAgYSkgQUxMT1dfVFJBSUxJTkdfSlVOSyBpcyBub3Qgc2V0LCBhbmQgYSBqdW5r
IGNoYXJhY3RlciAoYSBjaGFyYWN0ZXIgbm90CisgICAgICAgIC8vICAgICBwYXJ0IG9mIGEgZG91
YmxlLWxpdGVyYWwpIGlzIGZvdW5kLgorICAgICAgICAvLyAgYikgQUxMT1dfVFJBSUxJTkdfSlVO
SyBpcyBzZXQsIGJ1dCB0aGUgc3RyaW5nIGRvZXMgbm90IHN0YXJ0IHdpdGggYQorICAgICAgICAv
LyAgICAgZG91YmxlIGxpdGVyYWwuCisgICAgICAgIC8vCisgICAgICAgIC8vIGluZmluaXR5X3N5
bWJvbCBhbmQgbmFuX3N5bWJvbCBhcmUgc3RyaW5ncyB0aGF0IGFyZSB1c2VkIHRvIGRldGVjdAor
ICAgICAgICAvLyBpbnB1dHMgdGhhdCByZXByZXNlbnQgaW5maW5pdHkgYW5kIE5hTi4gVGhleSBj
YW4gYmUgbnVsbCwgaW4gd2hpY2ggY2FzZQorICAgICAgICAvLyB0aGV5IGFyZSBpZ25vcmVkLgor
ICAgICAgICAvLyBUaGUgY29udmVyc2lvbiByb3V0aW5lIGZpcnN0IHJlYWRzIGFueSBwb3NzaWJs
ZSBzaWducy4gVGhlbiBpdCBjb21wYXJlcyB0aGUKKyAgICAgICAgLy8gZm9sbG93aW5nIGNoYXJh
Y3RlciBvZiB0aGUgaW5wdXQtc3RyaW5nIHdpdGggdGhlIGZpcnN0IGNoYXJhY3RlciBvZgorICAg
ICAgICAvLyB0aGUgaW5maW5pdHksIGFuZCBuYW4tc3ltYm9sLiBJZiBlaXRoZXIgbWF0Y2hlcywg
dGhlIGZ1bmN0aW9uIGFzc3VtZXMsIHRoYXQKKyAgICAgICAgLy8gYSBtYXRjaCBoYXMgYmVlbiBm
b3VuZCwgYW5kIGV4cGVjdHMgdGhlIGZvbGxvd2luZyBpbnB1dCBjaGFyYWN0ZXJzIHRvIG1hdGNo
CisgICAgICAgIC8vIHRoZSByZW1haW5pbmcgY2hhcmFjdGVycyBvZiB0aGUgc3BlY2lhbC12YWx1
ZSBzeW1ib2wuCisgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgZm9sbG93aW5nIHJlc3Ry
aWN0aW9ucyBhcHBseSB0byBzcGVjaWFsLXZhbHVlIHN5bWJvbHM6CisgICAgICAgIC8vICAtIHRo
ZXkgbXVzdCBub3Qgc3RhcnQgd2l0aCBzaWducyAoJysnLCBvciAnLScpLAorICAgICAgICAvLyAg
LSB0aGV5IG11c3Qgbm90IGhhdmUgdGhlIHNhbWUgZmlyc3QgY2hhcmFjdGVyLgorICAgICAgICAv
LyAgLSB0aGV5IG11c3Qgbm90IHN0YXJ0IHdpdGggZGlnaXRzLgorICAgICAgICAvLworICAgICAg
ICAvLyBFeGFtcGxlczoKKyAgICAgICAgLy8gIGZsYWdzID0gQUxMT1dfSEVYIHwgQUxMT1dfVFJB
SUxJTkdfSlVOSywKKyAgICAgICAgLy8gIGVtcHR5X3N0cmluZ192YWx1ZSA9IDAuMCwKKyAgICAg
ICAgLy8gIGp1bmtfc3RyaW5nX3ZhbHVlID0gTmFOLAorICAgICAgICAvLyAgaW5maW5pdHlfc3lt
Ym9sID0gImluZmluaXR5IiwKKyAgICAgICAgLy8gIG5hbl9zeW1ib2wgPSAibmFuIjoKKyAgICAg
ICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjB4MTIzNCIpIC0+IDQ2NjAuMC4KKyAgICAgICAgLy8g
ICAgU3RyaW5nVG9Eb3VibGUoIjB4MTIzNEsiKSAtPiA0NjYwLjAuCisgICAgICAgIC8vICAgIFN0
cmluZ1RvRG91YmxlKCIiKSAtPiAwLjAgIC8vIGVtcHR5X3N0cmluZ192YWx1ZS4KKyAgICAgICAg
Ly8gICAgU3RyaW5nVG9Eb3VibGUoIiAiKSAtPiBOYU4gIC8vIGp1bmtfc3RyaW5nX3ZhbHVlLgor
ICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiIDEiKSAtPiBOYU4gIC8vIGp1bmtfc3RyaW5n
X3ZhbHVlLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMHgiKSAtPiBOYU4gIC8vIGp1
bmtfc3RyaW5nX3ZhbHVlLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiLTEyMy40NSIp
IC0+IC0xMjMuNDUuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCItLTEyMy40NSIpIC0+
IE5hTiAgLy8ganVua19zdHJpbmdfdmFsdWUuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91Ymxl
KCIxMjNlNDUiKSAtPiAxMjNlNDUuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIxMjNF
NDUiKSAtPiAxMjNlNDUuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIxMjNlKzQ1Iikg
LT4gMTIzZTQ1LgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMTIzRS00NSIpIC0+IDEy
M2UtNDUuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIxMjNlIikgLT4gMTIzLjAgIC8v
IHRyYWlsaW5nIGp1bmsgaWdub3JlZC4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjEy
M2UtIikgLT4gMTIzLjAgIC8vIHRyYWlsaW5nIGp1bmsgaWdub3JlZC4KKyAgICAgICAgLy8gICAg
U3RyaW5nVG9Eb3VibGUoIitOYU4iKSAtPiBOYU4gIC8vIE5hTiBzdHJpbmcgbGl0ZXJhbC4KKyAg
ICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIi1pbmZpbml0eSIpIC0+IC1pbmYuICAvLyBpbmZp
bml0eSBsaXRlcmFsLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiSW5maW5pdHkiKSAt
PiBOYU4gIC8vIGp1bmtfc3RyaW5nX3ZhbHVlLgorICAgICAgICAvLworICAgICAgICAvLyAgZmxh
Z3MgPSBBTExPV19PQ1RBTCB8IEFMTE9XX0xFQURJTkdfU1BBQ0VTLAorICAgICAgICAvLyAgZW1w
dHlfc3RyaW5nX3ZhbHVlID0gMC4wLAorICAgICAgICAvLyAganVua19zdHJpbmdfdmFsdWUgPSBO
YU4sCisgICAgICAgIC8vICBpbmZpbml0eV9zeW1ib2wgPSBOVUxMLAorICAgICAgICAvLyAgbmFu
X3N5bWJvbCA9IE5VTEw6CisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIweDEyMzQiKSAt
PiBOYU4gIC8vIGp1bmtfc3RyaW5nX3ZhbHVlLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJs
ZSgiMDEyMzQiKSAtPiA2NjguMC4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIiIpIC0+
IDAuMCAgLy8gZW1wdHlfc3RyaW5nX3ZhbHVlLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJs
ZSgiICIpIC0+IDAuMCAgLy8gZW1wdHlfc3RyaW5nX3ZhbHVlLgorICAgICAgICAvLyAgICBTdHJp
bmdUb0RvdWJsZSgiIDEiKSAtPiAxLjAKKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjB4
IikgLT4gTmFOICAvLyBqdW5rX3N0cmluZ192YWx1ZS4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9E
b3VibGUoIjAxMjNlNDUiKSAtPiBOYU4gIC8vIGp1bmtfc3RyaW5nX3ZhbHVlLgorICAgICAgICAv
LyAgICBTdHJpbmdUb0RvdWJsZSgiMDEyMzlFNDUiKSAtPiAxMjM5ZTQ1LgorICAgICAgICAvLyAg
ICBTdHJpbmdUb0RvdWJsZSgiLWluZmluaXR5IikgLT4gTmFOICAvLyBqdW5rX3N0cmluZ192YWx1
ZS4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIk5hTiIpIC0+IE5hTiAgLy8ganVua19z
dHJpbmdfdmFsdWUuCisgICAgICAgIFN0cmluZ1RvRG91YmxlQ29udmVydGVyKGludCBmbGFncywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGVtcHR5X3N0cmluZ192YWx1
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGp1bmtfc3RyaW5nX3Zh
bHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBpbmZpbml0
eV9zeW1ib2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5h
bl9zeW1ib2wpCisgICAgICAgIDogZmxhZ3NfKGZsYWdzKSwKKyAgICAgICAgZW1wdHlfc3RyaW5n
X3ZhbHVlXyhlbXB0eV9zdHJpbmdfdmFsdWUpLAorICAgICAgICBqdW5rX3N0cmluZ192YWx1ZV8o
anVua19zdHJpbmdfdmFsdWUpLAorICAgICAgICBpbmZpbml0eV9zeW1ib2xfKGluZmluaXR5X3N5
bWJvbCksCisgICAgICAgIG5hbl9zeW1ib2xfKG5hbl9zeW1ib2wpIHsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgLy8gUGVyZm9ybXMgdGhlIGNvbnZlcnNpb24uCisgICAgICAgIC8vIFRo
ZSBvdXRwdXQgcGFyYW1ldGVyICdwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCcgaXMgc2V0IHRv
IHRoZSBudW1iZXIKKyAgICAgICAgLy8gb2YgY2hhcmFjdGVycyB0aGF0IGhhdmUgYmVlbiBwcm9j
ZXNzZWQgdG8gcmVhZCB0aGUgbnVtYmVyLgorICAgICAgICAvLyBTcGFjZXMgdGhhbiBhcmUgcHJv
Y2Vzc2VkIHdpdGggQUxMT1dfe0xFQURJTkd8VFJBSUxJTkd9X1NQQUNFUyBhcmUgaW5jbHVkZWQK
KyAgICAgICAgLy8gaW4gdGhlICdwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCcuIFRyYWlsaW5n
IGp1bmsgaXMgbmV2ZXIgaW5jbHVkZWQuCisgICAgICAgIGRvdWJsZSBTdHJpbmdUb0RvdWJsZShj
b25zdCBjaGFyKiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVu
Z3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBwcm9jZXNzZWRfY2hhcmFj
dGVyc19jb3VudCk7CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IGludCBm
bGFnc187CisgICAgICAgIGNvbnN0IGRvdWJsZSBlbXB0eV9zdHJpbmdfdmFsdWVfOworICAgICAg
ICBjb25zdCBkb3VibGUganVua19zdHJpbmdfdmFsdWVfOworICAgICAgICBjb25zdCBjaGFyKiBj
b25zdCBpbmZpbml0eV9zeW1ib2xfOworICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBuYW5fc3lt
Ym9sXzsKKyAgICAgICAgCisgICAgICAgIERJU0FMTE9XX0lNUExJQ0lUX0NPTlNUUlVDVE9SUyhT
dHJpbmdUb0RvdWJsZUNvbnZlcnRlcik7CisgICAgfTsKKyAgICAKK30gIC8vIG5hbWVzcGFjZSBk
b3VibGVfY29udmVyc2lvbgorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmICAvLyBET1VC
TEVfQ09OVkVSU0lPTl9ET1VCTEVfQ09OVkVSU0lPTl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2RvdWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9kdG9hL2RvdWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA1NDRmZGI1YTgxN2ZhODIxNmIzZTMxZTY1YTMx
OTEyZjA3ODcyMjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L2R0b2EvZG91YmxlLmgKQEAgLTAsMCArMSwyNDkgQEAKKy8vIENvcHlyaWdodCAyMDEwIHRoZSBW
OCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8v
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisv
LworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworI2lmbmRlZiBET1VCTEVfQ09OVkVSU0lPTl9ET1VCTEVfSF8KKyNkZWZpbmUgRE9VQkxF
X0NPTlZFUlNJT05fRE9VQkxFX0hfCisKKyNpbmNsdWRlICJkaXktZnAuaCIKKworbmFtZXNwYWNl
IFdURiB7CisKK25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgLy8gV2Ug
YXNzdW1lIHRoYXQgZG91YmxlcyBhbmQgdWludDY0X3QgaGF2ZSB0aGUgc2FtZSBlbmRpYW5uZXNz
LgorICAgIHN0YXRpYyB1aW50NjRfdCBkb3VibGVfdG9fdWludDY0KGRvdWJsZSBkKSB7IHJldHVy
biBCaXRDYXN0PHVpbnQ2NF90PihkKTsgfQorICAgIHN0YXRpYyBkb3VibGUgdWludDY0X3RvX2Rv
dWJsZSh1aW50NjRfdCBkNjQpIHsgcmV0dXJuIEJpdENhc3Q8ZG91YmxlPihkNjQpOyB9CisgICAg
CisgICAgLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgZG91Ymxlcy4KKyAgICBjbGFzcyBEb3VibGUg
eworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGtTaWduTWFzayA9
IFVJTlQ2NF8yUEFSVF9DKDB4ODAwMDAwMDAsIDAwMDAwMDAwKTsKKyAgICAgICAgc3RhdGljIGNv
bnN0IHVpbnQ2NF90IGtFeHBvbmVudE1hc2sgPSBVSU5UNjRfMlBBUlRfQygweDdGRjAwMDAwLCAw
MDAwMDAwMCk7CisgICAgICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBrU2lnbmlmaWNhbmRNYXNr
ID0gVUlOVDY0XzJQQVJUX0MoMHgwMDBGRkZGRiwgRkZGRkZGRkYpOworICAgICAgICBzdGF0aWMg
Y29uc3QgdWludDY0X3Qga0hpZGRlbkJpdCA9IFVJTlQ2NF8yUEFSVF9DKDB4MDAxMDAwMDAsIDAw
MDAwMDAwKTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBrUGh5c2ljYWxTaWduaWZpY2FuZFNp
emUgPSA1MjsgIC8vIEV4Y2x1ZGVzIHRoZSBoaWRkZW4gYml0LgorICAgICAgICBzdGF0aWMgY29u
c3QgaW50IGtTaWduaWZpY2FuZFNpemUgPSA1MzsKKyAgICAgICAgCisgICAgICAgIERvdWJsZSgp
IDogZDY0XygwKSB7fQorICAgICAgICBleHBsaWNpdCBEb3VibGUoZG91YmxlIGQpIDogZDY0Xyhk
b3VibGVfdG9fdWludDY0KGQpKSB7fQorICAgICAgICBleHBsaWNpdCBEb3VibGUodWludDY0X3Qg
ZDY0KSA6IGQ2NF8oZDY0KSB7fQorICAgICAgICBleHBsaWNpdCBEb3VibGUoRGl5RnAgZGl5X2Zw
KQorICAgICAgICA6IGQ2NF8oRGl5RnBUb1VpbnQ2NChkaXlfZnApKSB7fQorICAgICAgICAKKyAg
ICAgICAgLy8gVGhlIHZhbHVlIGVuY29kZWQgYnkgdGhpcyBEb3VibGUgbXVzdCBiZSBncmVhdGVy
IG9yIGVxdWFsIHRvICswLjAuCisgICAgICAgIC8vIEl0IG11c3Qgbm90IGJlIHNwZWNpYWwgKGlu
ZmluaXR5LCBvciBOYU4pLgorICAgICAgICBEaXlGcCBBc0RpeUZwKCkgY29uc3QgeworICAgICAg
ICAgICAgQVNTRVJUKFNpZ24oKSA+IDApOworICAgICAgICAgICAgQVNTRVJUKCFJc1NwZWNpYWwo
KSk7CisgICAgICAgICAgICByZXR1cm4gRGl5RnAoU2lnbmlmaWNhbmQoKSwgRXhwb25lbnQoKSk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSB2YWx1ZSBlbmNvZGVkIGJ5IHRo
aXMgRG91YmxlIG11c3QgYmUgc3RyaWN0bHkgZ3JlYXRlciB0aGFuIDAuCisgICAgICAgIERpeUZw
IEFzTm9ybWFsaXplZERpeUZwKCkgY29uc3QgeworICAgICAgICAgICAgQVNTRVJUKHZhbHVlKCkg
PiAwLjApOworICAgICAgICAgICAgdWludDY0X3QgZiA9IFNpZ25pZmljYW5kKCk7CisgICAgICAg
ICAgICBpbnQgZSA9IEV4cG9uZW50KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRo
ZSBjdXJyZW50IGRvdWJsZSBjb3VsZCBiZSBhIGRlbm9ybWFsLgorICAgICAgICAgICAgd2hpbGUg
KChmICYga0hpZGRlbkJpdCkgPT0gMCkgeworICAgICAgICAgICAgICAgIGYgPDw9IDE7CisgICAg
ICAgICAgICAgICAgZS0tOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gRG8gdGhlIGZp
bmFsIHNoaWZ0cyBpbiBvbmUgZ28uCisgICAgICAgICAgICBmIDw8PSBEaXlGcDo6a1NpZ25pZmlj
YW5kU2l6ZSAtIGtTaWduaWZpY2FuZFNpemU7CisgICAgICAgICAgICBlIC09IERpeUZwOjprU2ln
bmlmaWNhbmRTaXplIC0ga1NpZ25pZmljYW5kU2l6ZTsKKyAgICAgICAgICAgIHJldHVybiBEaXlG
cChmLCBlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJucyB0aGUgZG91
YmxlJ3MgYml0IGFzIHVpbnQ2NC4KKyAgICAgICAgdWludDY0X3QgQXNVaW50NjQoKSBjb25zdCB7
CisgICAgICAgICAgICByZXR1cm4gZDY0XzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Ly8gUmV0dXJucyB0aGUgbmV4dCBncmVhdGVyIGRvdWJsZS4gUmV0dXJucyAraW5maW5pdHkgb24g
aW5wdXQgK2luZmluaXR5LgorICAgICAgICBkb3VibGUgTmV4dERvdWJsZSgpIGNvbnN0IHsKKyAg
ICAgICAgICAgIGlmIChkNjRfID09IGtJbmZpbml0eSkgcmV0dXJuIERvdWJsZShrSW5maW5pdHkp
LnZhbHVlKCk7CisgICAgICAgICAgICBpZiAoU2lnbigpIDwgMCAmJiBTaWduaWZpY2FuZCgpID09
IDApIHsKKyAgICAgICAgICAgICAgICAvLyAtMC4wCisgICAgICAgICAgICAgICAgcmV0dXJuIDAu
MDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChTaWduKCkgPCAwKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIERvdWJsZShkNjRfIC0gMSkudmFsdWUoKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIERvdWJsZShkNjRfICsgMSkudmFsdWUoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaW50IEV4cG9uZW50
KCkgY29uc3QgeworICAgICAgICAgICAgaWYgKElzRGVub3JtYWwoKSkgcmV0dXJuIGtEZW5vcm1h
bEV4cG9uZW50OworICAgICAgICAgICAgCisgICAgICAgICAgICB1aW50NjRfdCBkNjQgPSBBc1Vp
bnQ2NCgpOworICAgICAgICAgICAgaW50IGJpYXNlZF9lID0KKyAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludD4oKGQ2NCAmIGtFeHBvbmVudE1hc2spID4+IGtQaHlzaWNhbFNpZ25pZmljYW5kU2l6
ZSk7CisgICAgICAgICAgICByZXR1cm4gYmlhc2VkX2UgLSBrRXhwb25lbnRCaWFzOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICB1aW50NjRfdCBTaWduaWZpY2FuZCgpIGNvbnN0IHsKKyAg
ICAgICAgICAgIHVpbnQ2NF90IGQ2NCA9IEFzVWludDY0KCk7CisgICAgICAgICAgICB1aW50NjRf
dCBzaWduaWZpY2FuZCA9IGQ2NCAmIGtTaWduaWZpY2FuZE1hc2s7CisgICAgICAgICAgICBpZiAo
IUlzRGVub3JtYWwoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBzaWduaWZpY2FuZCArIGtI
aWRkZW5CaXQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBz
aWduaWZpY2FuZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHRoZSBkb3VibGUgaXMgYSBkZW5vcm1hbC4KKyAgICAgICAgYm9v
bCBJc0Rlbm9ybWFsKCkgY29uc3QgeworICAgICAgICAgICAgdWludDY0X3QgZDY0ID0gQXNVaW50
NjQoKTsKKyAgICAgICAgICAgIHJldHVybiAoZDY0ICYga0V4cG9uZW50TWFzaykgPT0gMDsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gV2UgY29uc2lkZXIgZGVub3JtYWxzIG5vdCB0
byBiZSBzcGVjaWFsLgorICAgICAgICAvLyBIZW5jZSBvbmx5IEluZmluaXR5IGFuZCBOYU4gYXJl
IHNwZWNpYWwuCisgICAgICAgIGJvb2wgSXNTcGVjaWFsKCkgY29uc3QgeworICAgICAgICAgICAg
dWludDY0X3QgZDY0ID0gQXNVaW50NjQoKTsKKyAgICAgICAgICAgIHJldHVybiAoZDY0ICYga0V4
cG9uZW50TWFzaykgPT0ga0V4cG9uZW50TWFzazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgYm9vbCBJc05hbigpIGNvbnN0IHsKKyAgICAgICAgICAgIHVpbnQ2NF90IGQ2NCA9IEFzVWlu
dDY0KCk7CisgICAgICAgICAgICByZXR1cm4gKChkNjQgJiBrRXhwb25lbnRNYXNrKSA9PSBrRXhw
b25lbnRNYXNrKSAmJgorICAgICAgICAgICAgKChkNjQgJiBrU2lnbmlmaWNhbmRNYXNrKSAhPSAw
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBJc0luZmluaXRlKCkgY29uc3Qg
eworICAgICAgICAgICAgdWludDY0X3QgZDY0ID0gQXNVaW50NjQoKTsKKyAgICAgICAgICAgIHJl
dHVybiAoKGQ2NCAmIGtFeHBvbmVudE1hc2spID09IGtFeHBvbmVudE1hc2spICYmCisgICAgICAg
ICAgICAoKGQ2NCAmIGtTaWduaWZpY2FuZE1hc2spID09IDApOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBpbnQgU2lnbigpIGNvbnN0IHsKKyAgICAgICAgICAgIHVpbnQ2NF90IGQ2NCA9
IEFzVWludDY0KCk7CisgICAgICAgICAgICByZXR1cm4gKGQ2NCAmIGtTaWduTWFzaykgPT0gMD8g
MTogLTE7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFByZWNvbmRpdGlvbjogdGhl
IHZhbHVlIGVuY29kZWQgYnkgdGhpcyBEb3VibGUgbXVzdCBiZSBncmVhdGVyIG9yIGVxdWFsCisg
ICAgICAgIC8vIHRoYW4gKzAuMC4KKyAgICAgICAgRGl5RnAgVXBwZXJCb3VuZGFyeSgpIGNvbnN0
IHsKKyAgICAgICAgICAgIEFTU0VSVChTaWduKCkgPiAwKTsKKyAgICAgICAgICAgIHJldHVybiBE
aXlGcChTaWduaWZpY2FuZCgpICogMiArIDEsIEV4cG9uZW50KCkgLSAxKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgLy8gQ29tcHV0ZXMgdGhlIHR3byBib3VuZGFyaWVzIG9mIHRoaXMu
CisgICAgICAgIC8vIFRoZSBiaWdnZXIgYm91bmRhcnkgKG1fcGx1cykgaXMgbm9ybWFsaXplZC4g
VGhlIGxvd2VyIGJvdW5kYXJ5IGhhcyB0aGUgc2FtZQorICAgICAgICAvLyBleHBvbmVudCBhcyBt
X3BsdXMuCisgICAgICAgIC8vIFByZWNvbmRpdGlvbjogdGhlIHZhbHVlIGVuY29kZWQgYnkgdGhp
cyBEb3VibGUgbXVzdCBiZSBncmVhdGVyIHRoYW4gMC4KKyAgICAgICAgdm9pZCBOb3JtYWxpemVk
Qm91bmRhcmllcyhEaXlGcCogb3V0X21fbWludXMsIERpeUZwKiBvdXRfbV9wbHVzKSBjb25zdCB7
CisgICAgICAgICAgICBBU1NFUlQodmFsdWUoKSA+IDAuMCk7CisgICAgICAgICAgICBEaXlGcCB2
ID0gdGhpcy0+QXNEaXlGcCgpOworICAgICAgICAgICAgYm9vbCBzaWduaWZpY2FuZF9pc196ZXJv
ID0gKHYuZigpID09IGtIaWRkZW5CaXQpOworICAgICAgICAgICAgRGl5RnAgbV9wbHVzID0gRGl5
RnA6Ok5vcm1hbGl6ZShEaXlGcCgodi5mKCkgPDwgMSkgKyAxLCB2LmUoKSAtIDEpKTsKKyAgICAg
ICAgICAgIERpeUZwIG1fbWludXM7CisgICAgICAgICAgICBpZiAoc2lnbmlmaWNhbmRfaXNfemVy
byAmJiB2LmUoKSAhPSBrRGVub3JtYWxFeHBvbmVudCkgeworICAgICAgICAgICAgICAgIC8vIFRo
ZSBib3VuZGFyeSBpcyBjbG9zZXIuIFRoaW5rIG9mIHYgPSAxMDAwZTEwIGFuZCB2LSA9IDk5OTll
OS4KKyAgICAgICAgICAgICAgICAvLyBUaGVuIHRoZSBib3VuZGFyeSAoPT0gKHYgLSB2LSkvMikg
aXMgbm90IGp1c3QgYXQgYSBkaXN0YW5jZSBvZiAxZTkgYnV0CisgICAgICAgICAgICAgICAgLy8g
YXQgYSBkaXN0YW5jZSBvZiAxZTguCisgICAgICAgICAgICAgICAgLy8gVGhlIG9ubHkgZXhjZXB0
aW9uIGlzIGZvciB0aGUgc21hbGxlc3Qgbm9ybWFsOiB0aGUgbGFyZ2VzdCBkZW5vcm1hbCBpcwor
ICAgICAgICAgICAgICAgIC8vIGF0IHRoZSBzYW1lIGRpc3RhbmNlIGFzIGl0cyBzdWNjZXNzb3Iu
CisgICAgICAgICAgICAgICAgLy8gTm90ZTogZGVub3JtYWxzIGhhdmUgdGhlIHNhbWUgZXhwb25l
bnQgYXMgdGhlIHNtYWxsZXN0IG5vcm1hbHMuCisgICAgICAgICAgICAgICAgbV9taW51cyA9IERp
eUZwKCh2LmYoKSA8PCAyKSAtIDEsIHYuZSgpIC0gMik7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIG1fbWludXMgPSBEaXlGcCgodi5mKCkgPDwgMSkgLSAxLCB2LmUoKSAt
IDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9taW51cy5zZXRfZihtX21pbnVzLmYo
KSA8PCAobV9taW51cy5lKCkgLSBtX3BsdXMuZSgpKSk7CisgICAgICAgICAgICBtX21pbnVzLnNl
dF9lKG1fcGx1cy5lKCkpOworICAgICAgICAgICAgKm91dF9tX3BsdXMgPSBtX3BsdXM7CisgICAg
ICAgICAgICAqb3V0X21fbWludXMgPSBtX21pbnVzOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBkb3VibGUgdmFsdWUoKSBjb25zdCB7IHJldHVybiB1aW50NjRfdG9fZG91YmxlKGQ2NF8p
OyB9CisgICAgICAgIAorICAgICAgICAvLyBSZXR1cm5zIHRoZSBzaWduaWZpY2FuZCBzaXplIGZv
ciBhIGdpdmVuIG9yZGVyIG9mIG1hZ25pdHVkZS4KKyAgICAgICAgLy8gSWYgdiA9IGYqMl5lIHdp
dGggMl5wLTEgPD0gZiA8PSAyXnAgdGhlbiBwK2UgaXMgdidzIG9yZGVyIG9mIG1hZ25pdHVkZS4K
KyAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2Ygc2lnbmlmaWNh
bnQgYmluYXJ5IGRpZ2l0cyB2IHdpbGwgaGF2ZQorICAgICAgICAvLyBvbmNlIGl0J3MgZW5jb2Rl
ZCBpbnRvIGEgZG91YmxlLiBJbiBhbG1vc3QgYWxsIGNhc2VzIHRoaXMgaXMgZXF1YWwgdG8KKyAg
ICAgICAgLy8ga1NpZ25pZmljYW5kU2l6ZS4gVGhlIG9ubHkgZXhjZXB0aW9ucyBhcmUgZGVub3Jt
YWxzLiBUaGV5IHN0YXJ0IHdpdGgKKyAgICAgICAgLy8gbGVhZGluZyB6ZXJvZXMgYW5kIHRoZWly
IGVmZmVjdGl2ZSBzaWduaWZpY2FuZC1zaXplIGlzIGhlbmNlIHNtYWxsZXIuCisgICAgICAgIHN0
YXRpYyBpbnQgU2lnbmlmaWNhbmRTaXplRm9yT3JkZXJPZk1hZ25pdHVkZShpbnQgb3JkZXIpIHsK
KyAgICAgICAgICAgIGlmIChvcmRlciA+PSAoa0Rlbm9ybWFsRXhwb25lbnQgKyBrU2lnbmlmaWNh
bmRTaXplKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBrU2lnbmlmaWNhbmRTaXplOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG9yZGVyIDw9IGtEZW5vcm1hbEV4cG9uZW50KSBy
ZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBvcmRlciAtIGtEZW5vcm1hbEV4cG9uZW50Owor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgZG91YmxlIEluZmluaXR5KCkgewor
ICAgICAgICAgICAgcmV0dXJuIERvdWJsZShrSW5maW5pdHkpLnZhbHVlKCk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHN0YXRpYyBkb3VibGUgTmFOKCkgeworICAgICAgICAgICAgcmV0
dXJuIERvdWJsZShrTmFOKS52YWx1ZSgpOworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZh
dGU6CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQga0V4cG9uZW50QmlhcyA9IDB4M0ZGICsga1Bo
eXNpY2FsU2lnbmlmaWNhbmRTaXplOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtEZW5vcm1h
bEV4cG9uZW50ID0gLWtFeHBvbmVudEJpYXMgKyAxOworICAgICAgICBzdGF0aWMgY29uc3QgaW50
IGtNYXhFeHBvbmVudCA9IDB4N0ZGIC0ga0V4cG9uZW50QmlhczsKKyAgICAgICAgc3RhdGljIGNv
bnN0IHVpbnQ2NF90IGtJbmZpbml0eSA9IFVJTlQ2NF8yUEFSVF9DKDB4N0ZGMDAwMDAsIDAwMDAw
MDAwKTsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGtOYU4gPSBVSU5UNjRfMlBBUlRf
QygweDdGRjgwMDAwLCAwMDAwMDAwMCk7CisgICAgICAgIAorICAgICAgICBjb25zdCB1aW50NjRf
dCBkNjRfOworICAgICAgICAKKyAgICAgICAgc3RhdGljIHVpbnQ2NF90IERpeUZwVG9VaW50NjQo
RGl5RnAgZGl5X2ZwKSB7CisgICAgICAgICAgICB1aW50NjRfdCBzaWduaWZpY2FuZCA9IGRpeV9m
cC5mKCk7CisgICAgICAgICAgICBpbnQgZXhwb25lbnQgPSBkaXlfZnAuZSgpOworICAgICAgICAg
ICAgd2hpbGUgKHNpZ25pZmljYW5kID4ga0hpZGRlbkJpdCArIGtTaWduaWZpY2FuZE1hc2spIHsK
KyAgICAgICAgICAgICAgICBzaWduaWZpY2FuZCA+Pj0gMTsKKyAgICAgICAgICAgICAgICBleHBv
bmVudCsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGV4cG9uZW50ID49IGtNYXhF
eHBvbmVudCkgeworICAgICAgICAgICAgICAgIHJldHVybiBrSW5maW5pdHk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoZXhwb25lbnQgPCBrRGVub3JtYWxFeHBvbmVudCkgeworICAg
ICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hpbGUg
KGV4cG9uZW50ID4ga0Rlbm9ybWFsRXhwb25lbnQgJiYgKHNpZ25pZmljYW5kICYga0hpZGRlbkJp
dCkgPT0gMCkgeworICAgICAgICAgICAgICAgIHNpZ25pZmljYW5kIDw8PSAxOworICAgICAgICAg
ICAgICAgIGV4cG9uZW50LS07CisgICAgICAgICAgICB9CisgICAgICAgICAgICB1aW50NjRfdCBi
aWFzZWRfZXhwb25lbnQ7CisgICAgICAgICAgICBpZiAoZXhwb25lbnQgPT0ga0Rlbm9ybWFsRXhw
b25lbnQgJiYgKHNpZ25pZmljYW5kICYga0hpZGRlbkJpdCkgPT0gMCkgeworICAgICAgICAgICAg
ICAgIGJpYXNlZF9leHBvbmVudCA9IDA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIGJpYXNlZF9leHBvbmVudCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihleHBvbmVudCAr
IGtFeHBvbmVudEJpYXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIChzaWdu
aWZpY2FuZCAmIGtTaWduaWZpY2FuZE1hc2spIHwKKyAgICAgICAgICAgIChiaWFzZWRfZXhwb25l
bnQgPDwga1BoeXNpY2FsU2lnbmlmaWNhbmRTaXplKTsKKyAgICAgICAgfQorICAgIH07CisgICAg
Cit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKKyNlbmRpZiAgLy8gRE9VQkxFX0NPTlZFUlNJT05fRE9VQkxFX0hfCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZmFzdC1kdG9hLmNjIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9kdG9hL2Zhc3QtZHRvYS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZmMyZTc4MWJmZGUw
NTlhY2RhOTkyMTgxOGFlYWM1YjdjOTk2ZmFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2Zhc3QtZHRvYS5jYwpAQCAtMCwwICsxLDczOSBAQAorLy8g
Q29weXJpZ2h0IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlz
Y2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkCisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKy8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisv
LyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaW5jbHVkZSAiZmFzdC1kdG9hLmgiCisKKyNpbmNs
dWRlICJjYWNoZWQtcG93ZXJzLmgiCisjaW5jbHVkZSAiZGl5LWZwLmgiCisjaW5jbHVkZSAiZG91
YmxlLmgiCisKK25hbWVzcGFjZSBXVEYgeworCituYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24g
eworICAgIAorICAgIC8vIFRoZSBtaW5pbWFsIGFuZCBtYXhpbWFsIHRhcmdldCBleHBvbmVudCBk
ZWZpbmUgdGhlIHJhbmdlIG9mIHcncyBiaW5hcnkKKyAgICAvLyBleHBvbmVudCwgd2hlcmUgJ3cn
IGlzIHRoZSByZXN1bHQgb2YgbXVsdGlwbHlpbmcgdGhlIGlucHV0IGJ5IGEgY2FjaGVkIHBvd2Vy
CisgICAgLy8gb2YgdGVuLgorICAgIC8vCisgICAgLy8gQSBkaWZmZXJlbnQgcmFuZ2UgbWlnaHQg
YmUgY2hvc2VuIG9uIGEgZGlmZmVyZW50IHBsYXRmb3JtLCB0byBvcHRpbWl6ZSBkaWdpdAorICAg
IC8vIGdlbmVyYXRpb24sIGJ1dCBhIHNtYWxsZXIgcmFuZ2UgcmVxdWlyZXMgbW9yZSBwb3dlcnMg
b2YgdGVuIHRvIGJlIGNhY2hlZC4KKyAgICBzdGF0aWMgY29uc3QgaW50IGtNaW5pbWFsVGFyZ2V0
RXhwb25lbnQgPSAtNjA7CisgICAgc3RhdGljIGNvbnN0IGludCBrTWF4aW1hbFRhcmdldEV4cG9u
ZW50ID0gLTMyOworICAgIAorICAgIAorICAgIC8vIEFkanVzdHMgdGhlIGxhc3QgZGlnaXQgb2Yg
dGhlIGdlbmVyYXRlZCBudW1iZXIsIGFuZCBzY3JlZW5zIG91dCBnZW5lcmF0ZWQKKyAgICAvLyBz
b2x1dGlvbnMgdGhhdCBtYXkgYmUgaW5hY2N1cmF0ZS4gQSBzb2x1dGlvbiBtYXkgYmUgaW5hY2N1
cmF0ZSBpZiBpdCBpcworICAgIC8vIG91dHNpZGUgdGhlIHNhZmUgaW50ZXJ2YWwsIG9yIGlmIHdl
IGNhbm5vdCBwcm92ZSB0aGF0IGl0IGlzIGNsb3NlciB0byB0aGUKKyAgICAvLyBpbnB1dCB0aGFu
IGEgbmVpZ2hib3JpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNhbWUgbGVuZ3RoLgorICAgIC8v
CisgICAgLy8gSW5wdXQ6ICogYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGRpZ2l0cyBvZiB0b29faGln
aCAvIDEwXmthcHBhCisgICAgLy8gICAgICAgICogdGhlIGJ1ZmZlcidzIGxlbmd0aAorICAgIC8v
ICAgICAgICAqIGRpc3RhbmNlX3Rvb19oaWdoX3cgPT0gKHRvb19oaWdoIC0gdykuZigpICogdW5p
dAorICAgIC8vICAgICAgICAqIHVuc2FmZV9pbnRlcnZhbCA9PSAodG9vX2hpZ2ggLSB0b29fbG93
KS5mKCkgKiB1bml0CisgICAgLy8gICAgICAgICogcmVzdCA9ICh0b29faGlnaCAtIGJ1ZmZlciAq
IDEwXmthcHBhKS5mKCkgKiB1bml0CisgICAgLy8gICAgICAgICogdGVuX2thcHBhID0gMTBea2Fw
cGEgKiB1bml0CisgICAgLy8gICAgICAgICogdW5pdCA9IHRoZSBjb21tb24gbXVsdGlwbGllcgor
ICAgIC8vIE91dHB1dDogcmV0dXJucyB0cnVlIGlmIHRoZSBidWZmZXIgaXMgZ3VhcmFudGVlZCB0
byBjb250YWluIHRoZSBjbG9zZXN0CisgICAgLy8gICAgcmVwcmVzZW50YWJsZSBudW1iZXIgdG8g
dGhlIGlucHV0LgorICAgIC8vICBNb2RpZmllcyB0aGUgZ2VuZXJhdGVkIGRpZ2l0cyBpbiB0aGUg
YnVmZmVyIHRvIGFwcHJvYWNoIChyb3VuZCB0b3dhcmRzKSB3LgorICAgIHN0YXRpYyBib29sIFJv
dW5kV2VlZChWZWN0b3I8Y2hhcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBkaXN0YW5jZV90
b29faGlnaF93LAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCB1bnNhZmVfaW50
ZXJ2YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHJlc3QsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHRlbl9rYXBwYSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludDY0X3QgdW5pdCkgeworICAgICAgICB1aW50NjRfdCBzbWFsbF9kaXN0YW5j
ZSA9IGRpc3RhbmNlX3Rvb19oaWdoX3cgLSB1bml0OworICAgICAgICB1aW50NjRfdCBiaWdfZGlz
dGFuY2UgPSBkaXN0YW5jZV90b29faGlnaF93ICsgdW5pdDsKKyAgICAgICAgLy8gTGV0IHdfbG93
ICA9IHRvb19oaWdoIC0gYmlnX2Rpc3RhbmNlLCBhbmQKKyAgICAgICAgLy8gICAgIHdfaGlnaCA9
IHRvb19oaWdoIC0gc21hbGxfZGlzdGFuY2UuCisgICAgICAgIC8vIE5vdGU6IHdfbG93IDwgdyA8
IHdfaGlnaAorICAgICAgICAvLworICAgICAgICAvLyBUaGUgcmVhbCB3ICgqIHVuaXQpIG11c3Qg
bGllIHNvbWV3aGVyZSBpbnNpZGUgdGhlIGludGVydmFsCisgICAgICAgIC8vIF13X2xvdzsgd19o
aWdoWyAob2Z0ZW4gd3JpdHRlbiBhcyAiKHdfbG93OyB3X2hpZ2gpIikKKyAgICAgICAgCisgICAg
ICAgIC8vIEJhc2ljYWxseSB0aGUgYnVmZmVyIGN1cnJlbnRseSBjb250YWlucyBhIG51bWJlciBp
biB0aGUgdW5zYWZlIGludGVydmFsCisgICAgICAgIC8vIF10b29fbG93OyB0b29faGlnaFsgd2l0
aCB0b29fbG93IDwgdyA8IHRvb19oaWdoCisgICAgICAgIC8vCisgICAgICAgIC8vICB0b29faGln
aCAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAt
IC0gLSAtIC0gLQorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIF52IDEgdW5pdCAgICAg
ICAgICAgIF4gICAgICBeICAgICAgICAgICAgICAgICBeICAgICAgXgorICAgICAgICAvLyAgYm91
bmRhcnlfaGlnaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgIC4gICAgICAuICAgICAgICAgICAg
ICAgICAuICAgICAgLgorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIF52IDEgdW5pdCAg
ICAgICAgICAgIC4gICAgICAuICAgICAgICAgICAgICAgICAuICAgICAgLgorICAgICAgICAvLyAg
IC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gICsgIC0gLSArIC0gLSAtIC0g
LSAtICAgICAuICAgICAgLgorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC4gICAgICAuICAgICAgICAgXiAgICAgICAuICAgICAgLgorICAgICAgICAv
LyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIGJpZ19kaXN0YW5j
ZSAgLiAgICAgICAuICAgICAgLgorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC4gICAgICAuICAgICAgICAgLiAgICAgICAuICAgIHJlc3QKKyAgICAg
ICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWFsbF9kaXN0YW5jZSAgICAgLiAg
ICAgICAgIC4gICAgICAgLiAgICAgIC4KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2ICAgICAgLiAgICAgICAgIC4gICAgICAgLiAgICAgIC4KKyAg
ICAgICAgLy8gIHdfaGlnaCAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAgICAg
LiAgICAgICAgIC4gICAgICAgLiAgICAgIC4KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAg
ICBediAxIHVuaXQgICAgICAgICAgICAgICAgICAgLiAgICAgICAgIC4gICAgICAgLiAgICAgIC4K
KyAgICAgICAgLy8gIHcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAg
ICAgLiAgICAgICAgIC4gICAgICAgLiAgICAgIC4KKyAgICAgICAgLy8gICAgICAgICAgICAgICAg
ICAgICBediAxIHVuaXQgICAgICAgICAgICAgICAgICAgdiAgICAgICAgIC4gICAgICAgLiAgICAg
IC4KKyAgICAgICAgLy8gIHdfbG93ICAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g
LSAtIC0gLSAgICAgICAgIC4gICAgICAgLiAgICAgIC4KKyAgICAgICAgLy8gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gICAgICAgLiAg
ICAgIHYKKyAgICAgICAgLy8gIGJ1ZmZlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tCisgICAgICAgIC8vICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICAgICAg
IC4KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNhZmVfaW50ZXJ2YWwgICAgLgorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiAgICAgICAuCisgICAgICAg
IC8vICAgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAt
IC0gLSAtIC0gICAgIC4KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBediAxIHVuaXQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLgorICAgICAgICAvLyAgYm91bmRh
cnlfbG93IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgICB1bnNh
ZmVfaW50ZXJ2YWwKKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBediAxIHVuaXQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdgorICAgICAgICAvLyAgdG9vX2xvdyAg
LSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAt
IC0gLSAtIC0KKyAgICAgICAgLy8KKyAgICAgICAgLy8KKyAgICAgICAgLy8gTm90ZSB0aGF0IHRo
ZSB2YWx1ZSBvZiBidWZmZXIgY291bGQgbGllIGFueXdoZXJlIGluc2lkZSB0aGUgcmFuZ2UgdG9v
X2xvdworICAgICAgICAvLyB0byB0b29faGlnaC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gYm91
bmRhcnlfbG93LCBib3VuZGFyeV9oaWdoIGFuZCB3IGFyZSBhcHByb3hpbWF0aW9ucyBvZiB0aGUg
cmVhbCBib3VuZGFyaWVzCisgICAgICAgIC8vIGFuZCB2ICh0aGUgaW5wdXQgbnVtYmVyKS4gVGhl
eSBhcmUgZ3VhcmFudGVlZCB0byBiZSBwcmVjaXNlIHVwIHRvIG9uZSB1bml0LgorICAgICAgICAv
LyBJbiBmYWN0IHRoZSBlcnJvciBpcyBndWFyYW50ZWVkIHRvIGJlIHN0cmljdGx5IGxlc3MgdGhh
biBvbmUgdW5pdC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gQW55dGhpbmcgdGhhdCBsaWVzIG91
dHNpZGUgdGhlIHVuc2FmZSBpbnRlcnZhbCBpcyBndWFyYW50ZWVkIG5vdCB0byByb3VuZAorICAg
ICAgICAvLyB0byB2IHdoZW4gcmVhZCBhZ2Fpbi4KKyAgICAgICAgLy8gQW55dGhpbmcgdGhhdCBs
aWVzIGluc2lkZSB0aGUgc2FmZSBpbnRlcnZhbCBpcyBndWFyYW50ZWVkIHRvIHJvdW5kIHRvIHYK
KyAgICAgICAgLy8gd2hlbiByZWFkIGFnYWluLgorICAgICAgICAvLyBJZiB0aGUgbnVtYmVyIGlu
c2lkZSB0aGUgYnVmZmVyIGxpZXMgaW5zaWRlIHRoZSB1bnNhZmUgaW50ZXJ2YWwgYnV0IG5vdAor
ICAgICAgICAvLyBpbnNpZGUgdGhlIHNhZmUgaW50ZXJ2YWwgdGhlbiB3ZSBzaW1wbHkgZG8gbm90
IGtub3cgYW5kIGJhaWwgb3V0IChyZXR1cm5pbmcKKyAgICAgICAgLy8gZmFsc2UpLgorICAgICAg
ICAvLworICAgICAgICAvLyBTaW1pbGFybHkgd2UgaGF2ZSB0byB0YWtlIGludG8gYWNjb3VudCB0
aGUgaW1wcmVjaXNpb24gb2YgJ3cnIHdoZW4gZmluZGluZworICAgICAgICAvLyB0aGUgY2xvc2Vz
dCByZXByZXNlbnRhdGlvbiBvZiAndycuIElmIHdlIGhhdmUgdHdvIHBvdGVudGlhbAorICAgICAg
ICAvLyByZXByZXNlbnRhdGlvbnMsIGFuZCBvbmUgaXMgY2xvc2VyIHRvIGJvdGggd19sb3cgYW5k
IHdfaGlnaCwgdGhlbiB3ZSBrbm93CisgICAgICAgIC8vIGl0IGlzIGNsb3NlciB0byB0aGUgYWN0
dWFsIHZhbHVlIHYuCisgICAgICAgIC8vCisgICAgICAgIC8vIEJ5IGdlbmVyYXRpbmcgdGhlIGRp
Z2l0cyBvZiB0b29faGlnaCB3ZSBnb3QgdGhlIGxhcmdlc3QgKGNsb3Nlc3QgdG8KKyAgICAgICAg
Ly8gdG9vX2hpZ2gpIGJ1ZmZlciB0aGF0IGlzIHN0aWxsIGluIHRoZSB1bnNhZmUgaW50ZXJ2YWwu
IEluIHRoZSBjYXNlIHdoZXJlCisgICAgICAgIC8vIHdfaGlnaCA8IGJ1ZmZlciA8IHRvb19oaWdo
IHdlIHRyeSB0byBkZWNyZW1lbnQgdGhlIGJ1ZmZlci4KKyAgICAgICAgLy8gVGhpcyB3YXkgdGhl
IGJ1ZmZlciBhcHByb2FjaGVzIChyb3VuZHMgdG93YXJkcykgdy4KKyAgICAgICAgLy8gVGhlcmUg
YXJlIDMgY29uZGl0aW9ucyB0aGF0IHN0b3AgdGhlIGRlY3JlbWVudGF0aW9uIHByb2Nlc3M6Cisg
ICAgICAgIC8vICAgMSkgdGhlIGJ1ZmZlciBpcyBhbHJlYWR5IGJlbG93IHdfaGlnaAorICAgICAg
ICAvLyAgIDIpIGRlY3JlbWVudGluZyB0aGUgYnVmZmVyIHdvdWxkIG1ha2UgaXQgbGVhdmUgdGhl
IHVuc2FmZSBpbnRlcnZhbAorICAgICAgICAvLyAgIDMpIGRlY3JlbWVudGluZyB0aGUgYnVmZmVy
IHdvdWxkIHlpZWxkIGEgbnVtYmVyIGJlbG93IHdfaGlnaCBhbmQgZmFydGhlcgorICAgICAgICAv
LyAgICAgIGF3YXkgdGhhbiB0aGUgY3VycmVudCBudW1iZXIuIEluIG90aGVyIHdvcmRzOgorICAg
ICAgICAvLyAgICAgICAgICAgICAgKGJ1ZmZlcnstMX0gPCB3X2hpZ2gpICYmIHdfaGlnaCAtIGJ1
ZmZlcnstMX0gPiBidWZmZXIgLSB3X2hpZ2gKKyAgICAgICAgLy8gSW5zdGVhZCBvZiB1c2luZyB0
aGUgYnVmZmVyIGRpcmVjdGx5IHdlIHVzZSBpdHMgZGlzdGFuY2UgdG8gdG9vX2hpZ2guCisgICAg
ICAgIC8vIENvbmNlcHR1YWxseSByZXN0IH49IHRvb19oaWdoIC0gYnVmZmVyCisgICAgICAgIC8v
IFdlIG5lZWQgdG8gZG8gdGhlIGZvbGxvd2luZyB0ZXN0cyBpbiB0aGlzIG9yZGVyIHRvIGF2b2lk
IG92ZXItIGFuZAorICAgICAgICAvLyB1bmRlcmZsb3dzLgorICAgICAgICBBU1NFUlQocmVzdCA8
PSB1bnNhZmVfaW50ZXJ2YWwpOworICAgICAgICB3aGlsZSAocmVzdCA8IHNtYWxsX2Rpc3RhbmNl
ICYmICAvLyBOZWdhdGVkIGNvbmRpdGlvbiAxCisgICAgICAgICAgICAgICB1bnNhZmVfaW50ZXJ2
YWwgLSByZXN0ID49IHRlbl9rYXBwYSAmJiAgLy8gTmVnYXRlZCBjb25kaXRpb24gMgorICAgICAg
ICAgICAgICAgKHJlc3QgKyB0ZW5fa2FwcGEgPCBzbWFsbF9kaXN0YW5jZSB8fCAgLy8gYnVmZmVy
ey0xfSA+IHdfaGlnaAorICAgICAgICAgICAgICAgIHNtYWxsX2Rpc3RhbmNlIC0gcmVzdCA+PSBy
ZXN0ICsgdGVuX2thcHBhIC0gc21hbGxfZGlzdGFuY2UpKSB7CisgICAgICAgICAgICAgICAgICAg
YnVmZmVyW2xlbmd0aCAtIDFdLS07CisgICAgICAgICAgICAgICAgICAgcmVzdCArPSB0ZW5fa2Fw
cGE7CisgICAgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBXZSBoYXZlIGFwcHJv
YWNoZWQgdysgYXMgbXVjaCBhcyBwb3NzaWJsZS4gV2Ugbm93IHRlc3QgaWYgYXBwcm9hY2hpbmcg
dy0KKyAgICAgICAgLy8gd291bGQgcmVxdWlyZSBjaGFuZ2luZyB0aGUgYnVmZmVyLiBJZiB5ZXMs
IHRoZW4gd2UgaGF2ZSB0d28gcG9zc2libGUKKyAgICAgICAgLy8gcmVwcmVzZW50YXRpb25zIGNs
b3NlIHRvIHcsIGJ1dCB3ZSBjYW5ub3QgZGVjaWRlIHdoaWNoIG9uZSBpcyBjbG9zZXIuCisgICAg
ICAgIGlmIChyZXN0IDwgYmlnX2Rpc3RhbmNlICYmCisgICAgICAgICAgICB1bnNhZmVfaW50ZXJ2
YWwgLSByZXN0ID49IHRlbl9rYXBwYSAmJgorICAgICAgICAgICAgKHJlc3QgKyB0ZW5fa2FwcGEg
PCBiaWdfZGlzdGFuY2UgfHwKKyAgICAgICAgICAgICBiaWdfZGlzdGFuY2UgLSByZXN0ID4gcmVz
dCArIHRlbl9rYXBwYSAtIGJpZ19kaXN0YW5jZSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBXZWVkaW5nIHRlc3Qu
CisgICAgICAgIC8vICAgVGhlIHNhZmUgaW50ZXJ2YWwgaXMgW3Rvb19sb3cgKyAyIHVscDsgdG9v
X2hpZ2ggLSAyIHVscF0KKyAgICAgICAgLy8gICBTaW5jZSB0b29fbG93ID0gdG9vX2hpZ2ggLSB1
bnNhZmVfaW50ZXJ2YWwgdGhpcyBpcyBlcXVpdmFsZW50IHRvCisgICAgICAgIC8vICAgICAgW3Rv
b19oaWdoIC0gdW5zYWZlX2ludGVydmFsICsgNCB1bHA7IHRvb19oaWdoIC0gMiB1bHBdCisgICAg
ICAgIC8vICAgQ29uY2VwdHVhbGx5IHdlIGhhdmU6IHJlc3Qgfj0gdG9vX2hpZ2ggLSBidWZmZXIK
KyAgICAgICAgcmV0dXJuICgyICogdW5pdCA8PSByZXN0KSAmJiAocmVzdCA8PSB1bnNhZmVfaW50
ZXJ2YWwgLSA0ICogdW5pdCk7CisgICAgfQorICAgIAorICAgIAorICAgIC8vIFJvdW5kcyB0aGUg
YnVmZmVyIHVwd2FyZHMgaWYgdGhlIHJlc3VsdCBpcyBjbG9zZXIgdG8gdiBieSBwb3NzaWJseSBh
ZGRpbmcKKyAgICAvLyAxIHRvIHRoZSBidWZmZXIuIElmIHRoZSBwcmVjaXNpb24gb2YgdGhlIGNh
bGN1bGF0aW9uIGlzIG5vdCBzdWZmaWNpZW50IHRvCisgICAgLy8gcm91bmQgY29ycmVjdGx5LCBy
ZXR1cm4gZmFsc2UuCisgICAgLy8gVGhlIHJvdW5kaW5nIG1pZ2h0IHNoaWZ0IHRoZSB3aG9sZSBi
dWZmZXIgaW4gd2hpY2ggY2FzZSB0aGUga2FwcGEgaXMKKyAgICAvLyBhZGp1c3RlZC4gRm9yIGV4
YW1wbGUgIjk5Iiwga2FwcGEgPSAzIG1pZ2h0IGJlY29tZSAiMTAiLCBrYXBwYSA9IDQuCisgICAg
Ly8KKyAgICAvLyBJZiAyKnJlc3QgPiB0ZW5fa2FwcGEgdGhlbiB0aGUgYnVmZmVyIG5lZWRzIHRv
IGJlIHJvdW5kIHVwLgorICAgIC8vIHJlc3QgY2FuIGhhdmUgYW4gZXJyb3Igb2YgKy8tIDEgdW5p
dC4gVGhpcyBmdW5jdGlvbiBhY2NvdW50cyBmb3IgdGhlCisgICAgLy8gaW1wcmVjaXNpb24gYW5k
IHJldHVybnMgZmFsc2UsIGlmIHRoZSByb3VuZGluZyBkaXJlY3Rpb24gY2Fubm90IGJlCisgICAg
Ly8gdW5hbWJpZ3VvdXNseSBkZXRlcm1pbmVkLgorICAgIC8vCisgICAgLy8gUHJlY29uZGl0aW9u
OiByZXN0IDwgdGVuX2thcHBhLgorICAgIHN0YXRpYyBib29sIFJvdW5kV2VlZENvdW50ZWQoVmVj
dG9yPGNoYXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBs
ZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCByZXN0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgdGVuX2thcHBhLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgdW5pdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCoga2FwcGEpIHsKKyAgICAgICAgQVNTRVJUKHJlc3Qg
PCB0ZW5fa2FwcGEpOworICAgICAgICAvLyBUaGUgZm9sbG93aW5nIHRlc3RzIGFyZSBkb25lIGlu
IGEgc3BlY2lmaWMgb3JkZXIgdG8gYXZvaWQgb3ZlcmZsb3dzLiBUaGV5CisgICAgICAgIC8vIHdp
bGwgd29yayBjb3JyZWN0bHkgd2l0aCBhbnkgdWludDY0IHZhbHVlcyBvZiByZXN0IDwgdGVuX2th
cHBhIGFuZCB1bml0LgorICAgICAgICAvLworICAgICAgICAvLyBJZiB0aGUgdW5pdCBpcyB0b28g
YmlnLCB0aGVuIHdlIGRvbid0IGtub3cgd2hpY2ggd2F5IHRvIHJvdW5kLiBGb3IgZXhhbXBsZQor
ICAgICAgICAvLyBhIHVuaXQgb2YgNTAgbWVhbnMgdGhhdCB0aGUgcmVhbCBudW1iZXIgbGllcyB3
aXRoaW4gcmVzdCArLy0gNTAuIElmCisgICAgICAgIC8vIDEwXmthcHBhID09IDQwIHRoZW4gdGhl
cmUgaXMgbm8gd2F5IHRvIHRlbGwgd2hpY2ggd2F5IHRvIHJvdW5kLgorICAgICAgICBpZiAodW5p
dCA+PSB0ZW5fa2FwcGEpIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gRXZlbiBpZiB1bml0IGlz
IGp1c3QgaGFsZiB0aGUgc2l6ZSBvZiAxMF5rYXBwYSB3ZSBhcmUgYWxyZWFkeSBjb21wbGV0ZWx5
CisgICAgICAgIC8vIGxvc3QuIChBbmQgYWZ0ZXIgdGhlIHByZXZpb3VzIHRlc3Qgd2Uga25vdyB0
aGF0IHRoZSBleHByZXNzaW9uIHdpbGwgbm90CisgICAgICAgIC8vIG92ZXIvdW5kZXJmbG93LikK
KyAgICAgICAgaWYgKHRlbl9rYXBwYSAtIHVuaXQgPD0gdW5pdCkgcmV0dXJuIGZhbHNlOworICAg
ICAgICAvLyBJZiAyICogKHJlc3QgKyB1bml0KSA8PSAxMF5rYXBwYSB3ZSBjYW4gc2FmZWx5IHJv
dW5kIGRvd24uCisgICAgICAgIGlmICgodGVuX2thcHBhIC0gcmVzdCA+IHJlc3QpICYmICh0ZW5f
a2FwcGEgLSAyICogcmVzdCA+PSAyICogdW5pdCkpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgICAgIC8vIElmIDIgKiAocmVzdCAtIHVuaXQpID49IDEwXmthcHBh
LCB0aGVuIHdlIGNhbiBzYWZlbHkgcm91bmQgdXAuCisgICAgICAgIGlmICgocmVzdCA+IHVuaXQp
ICYmICh0ZW5fa2FwcGEgLSAocmVzdCAtIHVuaXQpIDw9IChyZXN0IC0gdW5pdCkpKSB7CisgICAg
ICAgICAgICAvLyBJbmNyZW1lbnQgdGhlIGxhc3QgZGlnaXQgcmVjdXJzaXZlbHkgdW50aWwgd2Ug
ZmluZCBhIG5vbiAnOScgZGlnaXQuCisgICAgICAgICAgICBidWZmZXJbbGVuZ3RoIC0gMV0rKzsK
KyAgICAgICAgICAgIGZvciAoaW50IGkgPSBsZW5ndGggLSAxOyBpID4gMDsgLS1pKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGJ1ZmZlcltpXSAhPSAnMCcgKyAxMCkgYnJlYWs7CisgICAgICAgICAg
ICAgICAgYnVmZmVyW2ldID0gJzAnOworICAgICAgICAgICAgICAgIGJ1ZmZlcltpIC0gMV0rKzsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIElmIHRoZSBmaXJzdCBkaWdpdCBpcyBub3cg
JzAnKyAxMCB3ZSBoYWQgYSBidWZmZXIgd2l0aCBhbGwgJzkncy4gV2l0aCB0aGUKKyAgICAgICAg
ICAgIC8vIGV4Y2VwdGlvbiBvZiB0aGUgZmlyc3QgZGlnaXQgYWxsIGRpZ2l0cyBhcmUgbm93ICcw
Jy4gU2ltcGx5IHN3aXRjaCB0aGUKKyAgICAgICAgICAgIC8vIGZpcnN0IGRpZ2l0IHRvICcxJyBh
bmQgYWRqdXN0IHRoZSBrYXBwYS4gRXhhbXBsZTogIjk5IiBiZWNvbWVzICIxMCIgYW5kCisgICAg
ICAgICAgICAvLyB0aGUgcG93ZXIgKHRoZSBrYXBwYSkgaXMgaW5jcmVhc2VkLgorICAgICAgICAg
ICAgaWYgKGJ1ZmZlclswXSA9PSAnMCcgKyAxMCkgeworICAgICAgICAgICAgICAgIGJ1ZmZlclsw
XSA9ICcxJzsKKyAgICAgICAgICAgICAgICAoKmthcHBhKSArPSAxOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICAKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qga1RlbjQgPSAx
MDAwMDsKKyAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qga1RlbjUgPSAxMDAwMDA7CisgICAgc3Rh
dGljIGNvbnN0IHVpbnQzMl90IGtUZW42ID0gMTAwMDAwMDsKKyAgICBzdGF0aWMgY29uc3QgdWlu
dDMyX3Qga1RlbjcgPSAxMDAwMDAwMDsKKyAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qga1Rlbjgg
PSAxMDAwMDAwMDA7CisgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IGtUZW45ID0gMTAwMDAwMDAw
MDsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRoZSBiaWdnZXN0IHBvd2VyIG9mIHRlbiB0aGF0IGlz
IGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgZ2l2ZW4KKyAgICAvLyBudW1iZXIuIFdlIGZ1cnRo
ZXJtb3JlIHJlY2VpdmUgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJpdHMgJ251bWJlcicgaGFzLgor
ICAgIC8vIElmIG51bWJlcl9iaXRzID09IDAgdGhlbiAwXi0xIGlzIHJldHVybmVkCisgICAgLy8g
VGhlIG51bWJlciBvZiBiaXRzIG11c3QgYmUgPD0gMzIuCisgICAgLy8gUHJlY29uZGl0aW9uOiBu
dW1iZXIgPCAoMSA8PCAobnVtYmVyX2JpdHMgKyAxKSkuCisgICAgc3RhdGljIHZvaWQgQmlnZ2Vz
dFBvd2VyVGVuKHVpbnQzMl90IG51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IG51bWJlcl9iaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50
MzJfdCogcG93ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogZXhwb25l
bnQpIHsKKyAgICAgICAgQVNTRVJUKG51bWJlciA8ICgxIDw8IChudW1iZXJfYml0cyArIDEpKSk7
CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG51bWJlcl9iaXRzKSB7CisgICAgICAgICAgICBj
YXNlIDMyOgorICAgICAgICAgICAgY2FzZSAzMToKKyAgICAgICAgICAgIGNhc2UgMzA6CisgICAg
ICAgICAgICAgICAgaWYgKGtUZW45IDw9IG51bWJlcikgeworICAgICAgICAgICAgICAgICAgICAq
cG93ZXIgPSBrVGVuOTsKKyAgICAgICAgICAgICAgICAgICAgKmV4cG9uZW50ID0gOTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSAgLy8gZWxzZSBmYWxsdGhy
b3VnaAorICAgICAgICAgICAgY2FzZSAyOToKKyAgICAgICAgICAgIGNhc2UgMjg6CisgICAgICAg
ICAgICBjYXNlIDI3OgorICAgICAgICAgICAgICAgIGlmIChrVGVuOCA8PSBudW1iZXIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgKnBvd2VyID0ga1Rlbjg7CisgICAgICAgICAgICAgICAgICAgICpl
eHBvbmVudCA9IDg7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0gIC8vIGVsc2UgZmFsbHRocm91Z2gKKyAgICAgICAgICAgIGNhc2UgMjY6CisgICAgICAgICAg
ICBjYXNlIDI1OgorICAgICAgICAgICAgY2FzZSAyNDoKKyAgICAgICAgICAgICAgICBpZiAoa1Rl
bjcgPD0gbnVtYmVyKSB7CisgICAgICAgICAgICAgICAgICAgICpwb3dlciA9IGtUZW43OworICAg
ICAgICAgICAgICAgICAgICAqZXhwb25lbnQgPSA3OworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9ICAvLyBlbHNlIGZhbGx0aHJvdWdoCisgICAgICAgICAgICBj
YXNlIDIzOgorICAgICAgICAgICAgY2FzZSAyMjoKKyAgICAgICAgICAgIGNhc2UgMjE6CisgICAg
ICAgICAgICBjYXNlIDIwOgorICAgICAgICAgICAgICAgIGlmIChrVGVuNiA8PSBudW1iZXIpIHsK
KyAgICAgICAgICAgICAgICAgICAgKnBvd2VyID0ga1RlbjY7CisgICAgICAgICAgICAgICAgICAg
ICpleHBvbmVudCA9IDY7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0gIC8vIGVsc2UgZmFsbHRocm91Z2gKKyAgICAgICAgICAgIGNhc2UgMTk6CisgICAgICAg
ICAgICBjYXNlIDE4OgorICAgICAgICAgICAgY2FzZSAxNzoKKyAgICAgICAgICAgICAgICBpZiAo
a1RlbjUgPD0gbnVtYmVyKSB7CisgICAgICAgICAgICAgICAgICAgICpwb3dlciA9IGtUZW41Owor
ICAgICAgICAgICAgICAgICAgICAqZXhwb25lbnQgPSA1OworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9ICAvLyBlbHNlIGZhbGx0aHJvdWdoCisgICAgICAgICAg
ICBjYXNlIDE2OgorICAgICAgICAgICAgY2FzZSAxNToKKyAgICAgICAgICAgIGNhc2UgMTQ6Cisg
ICAgICAgICAgICAgICAgaWYgKGtUZW40IDw9IG51bWJlcikgeworICAgICAgICAgICAgICAgICAg
ICAqcG93ZXIgPSBrVGVuNDsKKyAgICAgICAgICAgICAgICAgICAgKmV4cG9uZW50ID0gNDsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSAgLy8gZWxzZSBmYWxs
dGhyb3VnaAorICAgICAgICAgICAgY2FzZSAxMzoKKyAgICAgICAgICAgIGNhc2UgMTI6CisgICAg
ICAgICAgICBjYXNlIDExOgorICAgICAgICAgICAgY2FzZSAxMDoKKyAgICAgICAgICAgICAgICBp
ZiAoMTAwMCA8PSBudW1iZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgKnBvd2VyID0gMTAwMDsK
KyAgICAgICAgICAgICAgICAgICAgKmV4cG9uZW50ID0gMzsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfSAgLy8gZWxzZSBmYWxsdGhyb3VnaAorICAgICAgICAg
ICAgY2FzZSA5OgorICAgICAgICAgICAgY2FzZSA4OgorICAgICAgICAgICAgY2FzZSA3OgorICAg
ICAgICAgICAgICAgIGlmICgxMDAgPD0gbnVtYmVyKSB7CisgICAgICAgICAgICAgICAgICAgICpw
b3dlciA9IDEwMDsKKyAgICAgICAgICAgICAgICAgICAgKmV4cG9uZW50ID0gMjsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSAgLy8gZWxzZSBmYWxsdGhyb3Vn
aAorICAgICAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAg
Y2FzZSA0OgorICAgICAgICAgICAgICAgIGlmICgxMCA8PSBudW1iZXIpIHsKKyAgICAgICAgICAg
ICAgICAgICAgKnBvd2VyID0gMTA7CisgICAgICAgICAgICAgICAgICAgICpleHBvbmVudCA9IDE7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gIC8vIGVsc2Ug
ZmFsbHRocm91Z2gKKyAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIGNhc2UgMjoKKyAg
ICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBpZiAoMSA8PSBudW1iZXIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgKnBvd2VyID0gMTsKKyAgICAgICAgICAgICAgICAgICAgKmV4cG9u
ZW50ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSAg
Ly8gZWxzZSBmYWxsdGhyb3VnaAorICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAg
ICpwb3dlciA9IDA7CisgICAgICAgICAgICAgICAgKmV4cG9uZW50ID0gLTE7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIC8vIEZv
bGxvd2luZyBhc3NpZ25tZW50cyBhcmUgaGVyZSB0byBzaWxlbmNlIGNvbXBpbGVyIHdhcm5pbmdz
LgorICAgICAgICAgICAgICAgICpwb3dlciA9IDA7CisgICAgICAgICAgICAgICAgKmV4cG9uZW50
ID0gMDsKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIAorICAgIC8vIEdlbmVyYXRlcyB0aGUgZGlnaXRzIG9mIGlucHV0IG51bWJlciB3
LgorICAgIC8vIHcgaXMgYSBmbG9hdGluZy1wb2ludCBudW1iZXIgKERpeUZwKSwgY29uc2lzdGlu
ZyBvZiBhIHNpZ25pZmljYW5kIGFuZCBhbgorICAgIC8vIGV4cG9uZW50LiBJdHMgZXhwb25lbnQg
aXMgYm91bmRlZCBieSBrTWluaW1hbFRhcmdldEV4cG9uZW50IGFuZAorICAgIC8vIGtNYXhpbWFs
VGFyZ2V0RXhwb25lbnQuCisgICAgLy8gICAgICAgSGVuY2UgLTYwIDw9IHcuZSgpIDw9IC0zMi4K
KyAgICAvLworICAgIC8vIFJldHVybnMgZmFsc2UgaWYgaXQgZmFpbHMsIGluIHdoaWNoIGNhc2Ug
dGhlIGdlbmVyYXRlZCBkaWdpdHMgaW4gdGhlIGJ1ZmZlcgorICAgIC8vIHNob3VsZCBub3QgYmUg
dXNlZC4KKyAgICAvLyBQcmVjb25kaXRpb25zOgorICAgIC8vICAqIGxvdywgdyBhbmQgaGlnaCBh
cmUgY29ycmVjdCB1cCB0byAxIHVscCAodW5pdCBpbiB0aGUgbGFzdCBwbGFjZSkuIFRoYXQKKyAg
ICAvLyAgICBpcywgdGhlaXIgZXJyb3IgbXVzdCBiZSBsZXNzIHRoYW4gYSB1bml0IG9mIHRoZWly
IGxhc3QgZGlnaXRzLgorICAgIC8vICAqIGxvdy5lKCkgPT0gdy5lKCkgPT0gaGlnaC5lKCkKKyAg
ICAvLyAgKiBsb3cgPCB3IDwgaGlnaCwgYW5kIHRha2luZyBpbnRvIGFjY291bnQgdGhlaXIgZXJy
b3I6IGxvd34gPD0gaGlnaH4KKyAgICAvLyAgKiBrTWluaW1hbFRhcmdldEV4cG9uZW50IDw9IHcu
ZSgpIDw9IGtNYXhpbWFsVGFyZ2V0RXhwb25lbnQKKyAgICAvLyBQb3N0Y29uZGl0aW9uczogcmV0
dXJucyBmYWxzZSBpZiBwcm9jZWR1cmUgZmFpbHMuCisgICAgLy8gICBvdGhlcndpc2U6CisgICAg
Ly8gICAgICogYnVmZmVyIGlzIG5vdCBudWxsLXRlcm1pbmF0ZWQsIGJ1dCBsZW4gY29udGFpbnMg
dGhlIG51bWJlciBvZiBkaWdpdHMuCisgICAgLy8gICAgICogYnVmZmVyIGNvbnRhaW5zIHRoZSBz
aG9ydGVzdCBwb3NzaWJsZSBkZWNpbWFsIGRpZ2l0LXNlcXVlbmNlCisgICAgLy8gICAgICAgc3Vj
aCB0aGF0IExPVyA8IGJ1ZmZlciAqIDEwXmthcHBhIDwgSElHSCwgd2hlcmUgTE9XIGFuZCBISUdI
IGFyZSB0aGUKKyAgICAvLyAgICAgICBjb3JyZWN0IHZhbHVlcyBvZiBsb3cgYW5kIGhpZ2ggKHdp
dGhvdXQgdGhlaXIgZXJyb3IpLgorICAgIC8vICAgICAqIGlmIG1vcmUgdGhhbiBvbmUgZGVjaW1h
bCByZXByZXNlbnRhdGlvbiBnaXZlcyB0aGUgbWluaW1hbCBudW1iZXIgb2YKKyAgICAvLyAgICAg
ICBkZWNpbWFsIGRpZ2l0cyB0aGVuIHRoZSBvbmUgY2xvc2VzdCB0byBXICh3aGVyZSBXIGlzIHRo
ZSBjb3JyZWN0IHZhbHVlCisgICAgLy8gICAgICAgb2YgdykgaXMgY2hvc2VuLgorICAgIC8vIFJl
bWFyazogdGhpcyBwcm9jZWR1cmUgdGFrZXMgaW50byBhY2NvdW50IHRoZSBpbXByZWNpc2lvbiBv
ZiBpdHMgaW5wdXQKKyAgICAvLyAgIG51bWJlcnMuIElmIHRoZSBwcmVjaXNpb24gaXMgbm90IGVu
b3VnaCB0byBndWFyYW50ZWUgYWxsIHRoZSBwb3N0Y29uZGl0aW9ucworICAgIC8vICAgdGhlbiBm
YWxzZSBpcyByZXR1cm5lZC4gVGhpcyB1c3VhbGx5IGhhcHBlbnMgcmFyZWx5ICh+MC41JSkuCisg
ICAgLy8KKyAgICAvLyBTYXksIGZvciB0aGUgc2FrZSBvZiBleGFtcGxlLCB0aGF0CisgICAgLy8g
ICB3LmUoKSA9PSAtNDgsIGFuZCB3LmYoKSA9PSAweDEyMzQ1Njc4OTBhYmNkZWYKKyAgICAvLyB3
J3MgdmFsdWUgY2FuIGJlIGNvbXB1dGVkIGJ5IHcuZigpICogMl53LmUoKQorICAgIC8vIFdlIGNh
biBvYnRhaW4gdydzIGludGVncmFsIGRpZ2l0cyBieSBzaW1wbHkgc2hpZnRpbmcgdy5mKCkgYnkg
LXcuZSgpLgorICAgIC8vICAtPiB3J3MgaW50ZWdyYWwgcGFydCBpcyAweDEyMzQKKyAgICAvLyAg
dydzIGZyYWN0aW9uYWwgcGFydCBpcyB0aGVyZWZvcmUgMHg1Njc4OTBhYmNkZWYuCisgICAgLy8g
UHJpbnRpbmcgdydzIGludGVncmFsIHBhcnQgaXMgZWFzeSAoc2ltcGx5IHByaW50IDB4MTIzNCBp
biBkZWNpbWFsKS4KKyAgICAvLyBJbiBvcmRlciB0byBwcmludCBpdHMgZnJhY3Rpb24gd2UgcmVw
ZWF0ZWRseSBtdWx0aXBseSB0aGUgZnJhY3Rpb24gYnkgMTAgYW5kCisgICAgLy8gZ2V0IGVhY2gg
ZGlnaXQuIEV4YW1wbGUgdGhlIGZpcnN0IGRpZ2l0IGFmdGVyIHRoZSBwb2ludCB3b3VsZCBiZSBj
b21wdXRlZCBieQorICAgIC8vICAgKDB4NTY3ODkwYWJjZGVmICogMTApID4+IDQ4LiAtPiAzCisg
ICAgLy8gVGhlIHdob2xlIHRoaW5nIGJlY29tZXMgc2xpZ2h0bHkgbW9yZSBjb21wbGljYXRlZCBi
ZWNhdXNlIHdlIHdhbnQgdG8gc3RvcAorICAgIC8vIG9uY2Ugd2UgaGF2ZSBlbm91Z2ggZGlnaXRz
LiBUaGF0IGlzLCBvbmNlIHRoZSBkaWdpdHMgaW5zaWRlIHRoZSBidWZmZXIKKyAgICAvLyByZXBy
ZXNlbnQgJ3cnIHdlIGNhbiBzdG9wLiBFdmVyeXRoaW5nIGluc2lkZSB0aGUgaW50ZXJ2YWwgbG93
IC0gaGlnaAorICAgIC8vIHJlcHJlc2VudHMgdy4gSG93ZXZlciB3ZSBoYXZlIHRvIHBheSBhdHRl
bnRpb24gdG8gbG93LCBoaWdoIGFuZCB3J3MKKyAgICAvLyBpbXByZWNpc2lvbi4KKyAgICBzdGF0
aWMgYm9vbCBEaWdpdEdlbihEaXlGcCBsb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgRGl5
RnAgdywKKyAgICAgICAgICAgICAgICAgICAgICAgICBEaXlGcCBoaWdoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50KiBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBrYXBwYSkgewor
ICAgICAgICBBU1NFUlQobG93LmUoKSA9PSB3LmUoKSAmJiB3LmUoKSA9PSBoaWdoLmUoKSk7Cisg
ICAgICAgIEFTU0VSVChsb3cuZigpICsgMSA8PSBoaWdoLmYoKSAtIDEpOworICAgICAgICBBU1NF
UlQoa01pbmltYWxUYXJnZXRFeHBvbmVudCA8PSB3LmUoKSAmJiB3LmUoKSA8PSBrTWF4aW1hbFRh
cmdldEV4cG9uZW50KTsKKyAgICAgICAgLy8gbG93LCB3IGFuZCBoaWdoIGFyZSBpbXByZWNpc2Us
IGJ1dCBieSBsZXNzIHRoYW4gb25lIHVscCAodW5pdCBpbiB0aGUgbGFzdAorICAgICAgICAvLyBw
bGFjZSkuCisgICAgICAgIC8vIElmIHdlIHJlbW92ZSAocmVzcC4gYWRkKSAxIHVscCBmcm9tIGxv
dyAocmVzcC4gaGlnaCkgd2UgYXJlIGNlcnRhaW4gdGhhdAorICAgICAgICAvLyB0aGUgbmV3IG51
bWJlcnMgYXJlIG91dHNpZGUgb2YgdGhlIGludGVydmFsIHdlIHdhbnQgdGhlIGZpbmFsCisgICAg
ICAgIC8vIHJlcHJlc2VudGF0aW9uIHRvIGxpZSBpbi4KKyAgICAgICAgLy8gSW52ZXJzZWx5IGFk
ZGluZyAocmVzcC4gcmVtb3ZpbmcpIDEgdWxwIGZyb20gbG93IChyZXNwLiBoaWdoKSB3b3VsZCB5
aWVsZAorICAgICAgICAvLyBudW1iZXJzIHRoYXQgYXJlIGNlcnRhaW4gdG8gbGllIGluIHRoZSBp
bnRlcnZhbC4gV2Ugd2lsbCB1c2UgdGhpcyBmYWN0CisgICAgICAgIC8vIGxhdGVyIG9uLgorICAg
ICAgICAvLyBXZSB3aWxsIG5vdyBzdGFydCBieSBnZW5lcmF0aW5nIHRoZSBkaWdpdHMgd2l0aGlu
IHRoZSB1bmNlcnRhaW4KKyAgICAgICAgLy8gaW50ZXJ2YWwuIExhdGVyIHdlIHdpbGwgd2VlZCBv
dXQgcmVwcmVzZW50YXRpb25zIHRoYXQgbGllIG91dHNpZGUgdGhlIHNhZmUKKyAgICAgICAgLy8g
aW50ZXJ2YWwgYW5kIHRodXMgX21pZ2h0XyBsaWUgb3V0c2lkZSB0aGUgY29ycmVjdCBpbnRlcnZh
bC4KKyAgICAgICAgdWludDY0X3QgdW5pdCA9IDE7CisgICAgICAgIERpeUZwIHRvb19sb3cgPSBE
aXlGcChsb3cuZigpIC0gdW5pdCwgbG93LmUoKSk7CisgICAgICAgIERpeUZwIHRvb19oaWdoID0g
RGl5RnAoaGlnaC5mKCkgKyB1bml0LCBoaWdoLmUoKSk7CisgICAgICAgIC8vIHRvb19sb3cgYW5k
IHRvb19oaWdoIGFyZSBndWFyYW50ZWVkIHRvIGxpZSBvdXRzaWRlIHRoZSBpbnRlcnZhbCB3ZSB3
YW50IHRoZQorICAgICAgICAvLyBnZW5lcmF0ZWQgbnVtYmVyIGluLgorICAgICAgICBEaXlGcCB1
bnNhZmVfaW50ZXJ2YWwgPSBEaXlGcDo6TWludXModG9vX2hpZ2gsIHRvb19sb3cpOworICAgICAg
ICAvLyBXZSBub3cgY3V0IHRoZSBpbnB1dCBudW1iZXIgaW50byB0d28gcGFydHM6IHRoZSBpbnRl
Z3JhbCBkaWdpdHMgYW5kIHRoZQorICAgICAgICAvLyBmcmFjdGlvbmFscy4gV2Ugd2lsbCBub3Qg
d3JpdGUgYW55IGRlY2ltYWwgc2VwYXJhdG9yIHRob3VnaCwgYnV0IGFkYXB0CisgICAgICAgIC8v
IGthcHBhIGluc3RlYWQuCisgICAgICAgIC8vIFJlbWluZGVyOiB3ZSBhcmUgY3VycmVudGx5IGNv
bXB1dGluZyB0aGUgZGlnaXRzIChzdG9yZWQgaW5zaWRlIHRoZSBidWZmZXIpCisgICAgICAgIC8v
IHN1Y2ggdGhhdDogICB0b29fbG93IDwgYnVmZmVyICogMTBea2FwcGEgPCB0b29faGlnaAorICAg
ICAgICAvLyBXZSB1c2UgdG9vX2hpZ2ggZm9yIHRoZSBkaWdpdF9nZW5lcmF0aW9uIGFuZCBzdG9w
IGFzIHNvb24gYXMgcG9zc2libGUuCisgICAgICAgIC8vIElmIHdlIHN0b3AgZWFybHkgd2UgZWZm
ZWN0aXZlbHkgcm91bmQgZG93bi4KKyAgICAgICAgRGl5RnAgb25lID0gRGl5RnAoc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KDEpIDw8IC13LmUoKSwgdy5lKCkpOworICAgICAgICAvLyBEaXZpc2lvbiBi
eSBvbmUgaXMgYSBzaGlmdC4KKyAgICAgICAgdWludDMyX3QgaW50ZWdyYWxzID0gc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KHRvb19oaWdoLmYoKSA+PiAtb25lLmUoKSk7CisgICAgICAgIC8vIE1vZHVs
byBieSBvbmUgaXMgYW4gYW5kLgorICAgICAgICB1aW50NjRfdCBmcmFjdGlvbmFscyA9IHRvb19o
aWdoLmYoKSAmIChvbmUuZigpIC0gMSk7CisgICAgICAgIHVpbnQzMl90IGRpdmlzb3I7CisgICAg
ICAgIGludCBkaXZpc29yX2V4cG9uZW50OworICAgICAgICBCaWdnZXN0UG93ZXJUZW4oaW50ZWdy
YWxzLCBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSAtICgtb25lLmUoKSksCisgICAgICAgICAgICAg
ICAgICAgICAgICAmZGl2aXNvciwgJmRpdmlzb3JfZXhwb25lbnQpOworICAgICAgICAqa2FwcGEg
PSBkaXZpc29yX2V4cG9uZW50ICsgMTsKKyAgICAgICAgKmxlbmd0aCA9IDA7CisgICAgICAgIC8v
IExvb3AgaW52YXJpYW50OiBidWZmZXIgPSB0b29faGlnaCAvIDEwXmthcHBhICAoaW50ZWdlciBk
aXZpc2lvbikKKyAgICAgICAgLy8gVGhlIGludmFyaWFudCBob2xkcyBmb3IgdGhlIGZpcnN0IGl0
ZXJhdGlvbjoga2FwcGEgaGFzIGJlZW4gaW5pdGlhbGl6ZWQKKyAgICAgICAgLy8gd2l0aCB0aGUg
ZGl2aXNvciBleHBvbmVudCArIDEuIEFuZCB0aGUgZGl2aXNvciBpcyB0aGUgYmlnZ2VzdCBwb3dl
ciBvZiB0ZW4KKyAgICAgICAgLy8gdGhhdCBpcyBzbWFsbGVyIHRoYW4gaW50ZWdyYWxzLgorICAg
ICAgICB3aGlsZSAoKmthcHBhID4gMCkgeworICAgICAgICAgICAgaW50IGRpZ2l0ID0gaW50ZWdy
YWxzIC8gZGl2aXNvcjsKKyAgICAgICAgICAgIGJ1ZmZlclsqbGVuZ3RoXSA9ICcwJyArIGRpZ2l0
OworICAgICAgICAgICAgKCpsZW5ndGgpKys7CisgICAgICAgICAgICBpbnRlZ3JhbHMgJT0gZGl2
aXNvcjsKKyAgICAgICAgICAgICgqa2FwcGEpLS07CisgICAgICAgICAgICAvLyBOb3RlIHRoYXQg
a2FwcGEgbm93IGVxdWFscyB0aGUgZXhwb25lbnQgb2YgdGhlIGRpdmlzb3IgYW5kIHRoYXQgdGhl
CisgICAgICAgICAgICAvLyBpbnZhcmlhbnQgdGh1cyBob2xkcyBhZ2Fpbi4KKyAgICAgICAgICAg
IHVpbnQ2NF90IHJlc3QgPQorICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVpbnQ2NF90PihpbnRl
Z3JhbHMpIDw8IC1vbmUuZSgpKSArIGZyYWN0aW9uYWxzOworICAgICAgICAgICAgLy8gSW52YXJp
YW50OiB0b29faGlnaCA9IGJ1ZmZlciAqIDEwXmthcHBhICsgRGl5RnAocmVzdCwgb25lLmUoKSkK
KyAgICAgICAgICAgIC8vIFJlbWluZGVyOiB1bnNhZmVfaW50ZXJ2YWwuZSgpID09IG9uZS5lKCkK
KyAgICAgICAgICAgIGlmIChyZXN0IDwgdW5zYWZlX2ludGVydmFsLmYoKSkgeworICAgICAgICAg
ICAgICAgIC8vIFJvdW5kaW5nIGRvd24gKGJ5IG5vdCBlbWl0dGluZyB0aGUgcmVtYWluaW5nIGRp
Z2l0cykgeWllbGRzIGEgbnVtYmVyCisgICAgICAgICAgICAgICAgLy8gdGhhdCBsaWVzIHdpdGhp
biB0aGUgdW5zYWZlIGludGVydmFsLgorICAgICAgICAgICAgICAgIHJldHVybiBSb3VuZFdlZWQo
YnVmZmVyLCAqbGVuZ3RoLCBEaXlGcDo6TWludXModG9vX2hpZ2gsIHcpLmYoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2FmZV9pbnRlcnZhbC5mKCksIHJlc3QsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50NjRfdD4oZGl2aXNv
cikgPDwgLW9uZS5lKCksIHVuaXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGl2aXNv
ciAvPSAxMDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gVGhlIGludGVncmFscyBo
YXZlIGJlZW4gZ2VuZXJhdGVkLiBXZSBhcmUgYXQgdGhlIHBvaW50IG9mIHRoZSBkZWNpbWFsCisg
ICAgICAgIC8vIHNlcGFyYXRvci4gSW4gdGhlIGZvbGxvd2luZyBsb29wIHdlIHNpbXBseSBtdWx0
aXBseSB0aGUgcmVtYWluaW5nIGRpZ2l0cyBieQorICAgICAgICAvLyAxMCBhbmQgZGl2aWRlIGJ5
IG9uZS4gV2UganVzdCBuZWVkIHRvIHBheSBhdHRlbnRpb24gdG8gbXVsdGlwbHkgYXNzb2NpYXRl
ZAorICAgICAgICAvLyBkYXRhIChsaWtlIHRoZSBpbnRlcnZhbCBvciAndW5pdCcpLCB0b28uCisg
ICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgbXVsdGlwbGljYXRpb24gYnkgMTAgZG9lcyBub3Qgb3Zl
cmZsb3csIGJlY2F1c2Ugdy5lID49IC02MAorICAgICAgICAvLyBhbmQgdGh1cyBvbmUuZSA+PSAt
NjAuCisgICAgICAgIEFTU0VSVChvbmUuZSgpID49IC02MCk7CisgICAgICAgIEFTU0VSVChmcmFj
dGlvbmFscyA8IG9uZS5mKCkpOworICAgICAgICBBU1NFUlQoVUlOVDY0XzJQQVJUX0MoMHhGRkZG
RkZGRiwgRkZGRkZGRkYpIC8gMTAgPj0gb25lLmYoKSk7CisgICAgICAgIHdoaWxlICh0cnVlKSB7
CisgICAgICAgICAgICBmcmFjdGlvbmFscyAqPSAxMDsKKyAgICAgICAgICAgIHVuaXQgKj0gMTA7
CisgICAgICAgICAgICB1bnNhZmVfaW50ZXJ2YWwuc2V0X2YodW5zYWZlX2ludGVydmFsLmYoKSAq
IDEwKTsKKyAgICAgICAgICAgIC8vIEludGVnZXIgZGl2aXNpb24gYnkgb25lLgorICAgICAgICAg
ICAgaW50IGRpZ2l0ID0gc3RhdGljX2Nhc3Q8aW50PihmcmFjdGlvbmFscyA+PiAtb25lLmUoKSk7
CisgICAgICAgICAgICBidWZmZXJbKmxlbmd0aF0gPSAnMCcgKyBkaWdpdDsKKyAgICAgICAgICAg
ICgqbGVuZ3RoKSsrOworICAgICAgICAgICAgZnJhY3Rpb25hbHMgJj0gb25lLmYoKSAtIDE7ICAv
LyBNb2R1bG8gYnkgb25lLgorICAgICAgICAgICAgKCprYXBwYSktLTsKKyAgICAgICAgICAgIGlm
IChmcmFjdGlvbmFscyA8IHVuc2FmZV9pbnRlcnZhbC5mKCkpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gUm91bmRXZWVkKGJ1ZmZlciwgKmxlbmd0aCwgRGl5RnA6Ok1pbnVzKHRvb19oaWdoLCB3
KS5mKCkgKiB1bml0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zYWZlX2lu
dGVydmFsLmYoKSwgZnJhY3Rpb25hbHMsIG9uZS5mKCksIHVuaXQpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIAorICAgIC8vIEdlbmVyYXRlcyAoYXQg
bW9zdCkgcmVxdWVzdGVkX2RpZ2l0cyBkaWdpdHMgb2YgaW5wdXQgbnVtYmVyIHcuCisgICAgLy8g
dyBpcyBhIGZsb2F0aW5nLXBvaW50IG51bWJlciAoRGl5RnApLCBjb25zaXN0aW5nIG9mIGEgc2ln
bmlmaWNhbmQgYW5kIGFuCisgICAgLy8gZXhwb25lbnQuIEl0cyBleHBvbmVudCBpcyBib3VuZGVk
IGJ5IGtNaW5pbWFsVGFyZ2V0RXhwb25lbnQgYW5kCisgICAgLy8ga01heGltYWxUYXJnZXRFeHBv
bmVudC4KKyAgICAvLyAgICAgICBIZW5jZSAtNjAgPD0gdy5lKCkgPD0gLTMyLgorICAgIC8vCisg
ICAgLy8gUmV0dXJucyBmYWxzZSBpZiBpdCBmYWlscywgaW4gd2hpY2ggY2FzZSB0aGUgZ2VuZXJh
dGVkIGRpZ2l0cyBpbiB0aGUgYnVmZmVyCisgICAgLy8gc2hvdWxkIG5vdCBiZSB1c2VkLgorICAg
IC8vIFByZWNvbmRpdGlvbnM6CisgICAgLy8gICogdyBpcyBjb3JyZWN0IHVwIHRvIDEgdWxwICh1
bml0IGluIHRoZSBsYXN0IHBsYWNlKS4gVGhhdAorICAgIC8vICAgIGlzLCBpdHMgZXJyb3IgbXVz
dCBiZSBzdHJpY3RseSBsZXNzIHRoYW4gYSB1bml0IG9mIGl0cyBsYXN0IGRpZ2l0LgorICAgIC8v
ICAqIGtNaW5pbWFsVGFyZ2V0RXhwb25lbnQgPD0gdy5lKCkgPD0ga01heGltYWxUYXJnZXRFeHBv
bmVudAorICAgIC8vCisgICAgLy8gUG9zdGNvbmRpdGlvbnM6IHJldHVybnMgZmFsc2UgaWYgcHJv
Y2VkdXJlIGZhaWxzLgorICAgIC8vICAgb3RoZXJ3aXNlOgorICAgIC8vICAgICAqIGJ1ZmZlciBp
cyBub3QgbnVsbC10ZXJtaW5hdGVkLCBidXQgbGVuZ3RoIGNvbnRhaW5zIHRoZSBudW1iZXIgb2YK
KyAgICAvLyAgICAgICBkaWdpdHMuCisgICAgLy8gICAgICogdGhlIHJlcHJlc2VudGF0aW9uIGlu
IGJ1ZmZlciBpcyB0aGUgbW9zdCBwcmVjaXNlIHJlcHJlc2VudGF0aW9uIG9mCisgICAgLy8gICAg
ICAgcmVxdWVzdGVkX2RpZ2l0cyBkaWdpdHMuCisgICAgLy8gICAgICogYnVmZmVyIGNvbnRhaW5z
IGF0IG1vc3QgcmVxdWVzdGVkX2RpZ2l0cyBkaWdpdHMgb2Ygdy4gSWYgdGhlcmUgYXJlIGxlc3MK
KyAgICAvLyAgICAgICB0aGFuIHJlcXVlc3RlZF9kaWdpdHMgZGlnaXRzIHRoZW4gc29tZSB0cmFp
bGluZyAnMCdzIGhhdmUgYmVlbiByZW1vdmVkLgorICAgIC8vICAgICAqIGthcHBhIGlzIHN1Y2gg
dGhhdAorICAgIC8vICAgICAgICAgICAgdyA9IGJ1ZmZlciAqIDEwXmthcHBhICsgZXBzIHdpdGgg
fGVwc3wgPCAxMF5rYXBwYSAvIDIuCisgICAgLy8KKyAgICAvLyBSZW1hcms6IFRoaXMgcHJvY2Vk
dXJlIHRha2VzIGludG8gYWNjb3VudCB0aGUgaW1wcmVjaXNpb24gb2YgaXRzIGlucHV0CisgICAg
Ly8gICBudW1iZXJzLiBJZiB0aGUgcHJlY2lzaW9uIGlzIG5vdCBlbm91Z2ggdG8gZ3VhcmFudGVl
IGFsbCB0aGUgcG9zdGNvbmRpdGlvbnMKKyAgICAvLyAgIHRoZW4gZmFsc2UgaXMgcmV0dXJuZWQu
IFRoaXMgdXN1YWxseSBoYXBwZW5zIHJhcmVseSwgYnV0IHRoZSBmYWlsdXJlLXJhdGUKKyAgICAv
LyAgIGluY3JlYXNlcyB3aXRoIGhpZ2hlciByZXF1ZXN0ZWRfZGlnaXRzLgorICAgIHN0YXRpYyBi
b29sIERpZ2l0R2VuQ291bnRlZChEaXlGcCB3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50KiBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCoga2FwcGEp
IHsKKyAgICAgICAgQVNTRVJUKGtNaW5pbWFsVGFyZ2V0RXhwb25lbnQgPD0gdy5lKCkgJiYgdy5l
KCkgPD0ga01heGltYWxUYXJnZXRFeHBvbmVudCk7CisgICAgICAgIEFTU0VSVChrTWluaW1hbFRh
cmdldEV4cG9uZW50ID49IC02MCk7CisgICAgICAgIEFTU0VSVChrTWF4aW1hbFRhcmdldEV4cG9u
ZW50IDw9IC0zMik7CisgICAgICAgIC8vIHcgaXMgYXNzdW1lZCB0byBoYXZlIGFuIGVycm9yIGxl
c3MgdGhhbiAxIHVuaXQuIFdoZW5ldmVyIHcgaXMgc2NhbGVkIHdlCisgICAgICAgIC8vIGFsc28g
c2NhbGUgaXRzIGVycm9yLgorICAgICAgICB1aW50NjRfdCB3X2Vycm9yID0gMTsKKyAgICAgICAg
Ly8gV2UgY3V0IHRoZSBpbnB1dCBudW1iZXIgaW50byB0d28gcGFydHM6IHRoZSBpbnRlZ3JhbCBk
aWdpdHMgYW5kIHRoZQorICAgICAgICAvLyBmcmFjdGlvbmFsIGRpZ2l0cy4gV2UgZG9uJ3QgZW1p
dCBhbnkgZGVjaW1hbCBzZXBhcmF0b3IsIGJ1dCBhZGFwdCBrYXBwYQorICAgICAgICAvLyBpbnN0
ZWFkLiBFeGFtcGxlOiBpbnN0ZWFkIG9mIHdyaXRpbmcgIjEuMiIgd2UgcHV0ICIxMiIgaW50byB0
aGUgYnVmZmVyIGFuZAorICAgICAgICAvLyBpbmNyZWFzZSBrYXBwYSBieSAxLgorICAgICAgICBE
aXlGcCBvbmUgPSBEaXlGcChzdGF0aWNfY2FzdDx1aW50NjRfdD4oMSkgPDwgLXcuZSgpLCB3LmUo
KSk7CisgICAgICAgIC8vIERpdmlzaW9uIGJ5IG9uZSBpcyBhIHNoaWZ0LgorICAgICAgICB1aW50
MzJfdCBpbnRlZ3JhbHMgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4ody5mKCkgPj4gLW9uZS5lKCkp
OworICAgICAgICAvLyBNb2R1bG8gYnkgb25lIGlzIGFuIGFuZC4KKyAgICAgICAgdWludDY0X3Qg
ZnJhY3Rpb25hbHMgPSB3LmYoKSAmIChvbmUuZigpIC0gMSk7CisgICAgICAgIHVpbnQzMl90IGRp
dmlzb3I7CisgICAgICAgIGludCBkaXZpc29yX2V4cG9uZW50OworICAgICAgICBCaWdnZXN0UG93
ZXJUZW4oaW50ZWdyYWxzLCBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSAtICgtb25lLmUoKSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAmZGl2aXNvciwgJmRpdmlzb3JfZXhwb25lbnQpOworICAg
ICAgICAqa2FwcGEgPSBkaXZpc29yX2V4cG9uZW50ICsgMTsKKyAgICAgICAgKmxlbmd0aCA9IDA7
CisgICAgICAgIAorICAgICAgICAvLyBMb29wIGludmFyaWFudDogYnVmZmVyID0gdyAvIDEwXmth
cHBhICAoaW50ZWdlciBkaXZpc2lvbikKKyAgICAgICAgLy8gVGhlIGludmFyaWFudCBob2xkcyBm
b3IgdGhlIGZpcnN0IGl0ZXJhdGlvbjoga2FwcGEgaGFzIGJlZW4gaW5pdGlhbGl6ZWQKKyAgICAg
ICAgLy8gd2l0aCB0aGUgZGl2aXNvciBleHBvbmVudCArIDEuIEFuZCB0aGUgZGl2aXNvciBpcyB0
aGUgYmlnZ2VzdCBwb3dlciBvZiB0ZW4KKyAgICAgICAgLy8gdGhhdCBpcyBzbWFsbGVyIHRoYW4g
J2ludGVncmFscycuCisgICAgICAgIHdoaWxlICgqa2FwcGEgPiAwKSB7CisgICAgICAgICAgICBp
bnQgZGlnaXQgPSBpbnRlZ3JhbHMgLyBkaXZpc29yOworICAgICAgICAgICAgYnVmZmVyWypsZW5n
dGhdID0gJzAnICsgZGlnaXQ7CisgICAgICAgICAgICAoKmxlbmd0aCkrKzsKKyAgICAgICAgICAg
IHJlcXVlc3RlZF9kaWdpdHMtLTsKKyAgICAgICAgICAgIGludGVncmFscyAlPSBkaXZpc29yOwor
ICAgICAgICAgICAgKCprYXBwYSktLTsKKyAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBrYXBwYSBu
b3cgZXF1YWxzIHRoZSBleHBvbmVudCBvZiB0aGUgZGl2aXNvciBhbmQgdGhhdCB0aGUKKyAgICAg
ICAgICAgIC8vIGludmFyaWFudCB0aHVzIGhvbGRzIGFnYWluLgorICAgICAgICAgICAgaWYgKHJl
cXVlc3RlZF9kaWdpdHMgPT0gMCkgYnJlYWs7CisgICAgICAgICAgICBkaXZpc29yIC89IDEwOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAocmVxdWVzdGVkX2RpZ2l0cyA9PSAwKSB7
CisgICAgICAgICAgICB1aW50NjRfdCByZXN0ID0KKyAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1
aW50NjRfdD4oaW50ZWdyYWxzKSA8PCAtb25lLmUoKSkgKyBmcmFjdGlvbmFsczsKKyAgICAgICAg
ICAgIHJldHVybiBSb3VuZFdlZWRDb3VudGVkKGJ1ZmZlciwgKmxlbmd0aCwgcmVzdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQ2NF90PihkaXZp
c29yKSA8PCAtb25lLmUoKSwgd19lcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGthcHBhKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gVGhlIGludGVn
cmFscyBoYXZlIGJlZW4gZ2VuZXJhdGVkLiBXZSBhcmUgYXQgdGhlIHBvaW50IG9mIHRoZSBkZWNp
bWFsCisgICAgICAgIC8vIHNlcGFyYXRvci4gSW4gdGhlIGZvbGxvd2luZyBsb29wIHdlIHNpbXBs
eSBtdWx0aXBseSB0aGUgcmVtYWluaW5nIGRpZ2l0cyBieQorICAgICAgICAvLyAxMCBhbmQgZGl2
aWRlIGJ5IG9uZS4gV2UganVzdCBuZWVkIHRvIHBheSBhdHRlbnRpb24gdG8gbXVsdGlwbHkgYXNz
b2NpYXRlZAorICAgICAgICAvLyBkYXRhICh0aGUgJ3VuaXQnKSwgdG9vLgorICAgICAgICAvLyBO
b3RlIHRoYXQgdGhlIG11bHRpcGxpY2F0aW9uIGJ5IDEwIGRvZXMgbm90IG92ZXJmbG93LCBiZWNh
dXNlIHcuZSA+PSAtNjAKKyAgICAgICAgLy8gYW5kIHRodXMgb25lLmUgPj0gLTYwLgorICAgICAg
ICBBU1NFUlQob25lLmUoKSA+PSAtNjApOworICAgICAgICBBU1NFUlQoZnJhY3Rpb25hbHMgPCBv
bmUuZigpKTsKKyAgICAgICAgQVNTRVJUKFVJTlQ2NF8yUEFSVF9DKDB4RkZGRkZGRkYsIEZGRkZG
RkZGKSAvIDEwID49IG9uZS5mKCkpOworICAgICAgICB3aGlsZSAocmVxdWVzdGVkX2RpZ2l0cyA+
IDAgJiYgZnJhY3Rpb25hbHMgPiB3X2Vycm9yKSB7CisgICAgICAgICAgICBmcmFjdGlvbmFscyAq
PSAxMDsKKyAgICAgICAgICAgIHdfZXJyb3IgKj0gMTA7CisgICAgICAgICAgICAvLyBJbnRlZ2Vy
IGRpdmlzaW9uIGJ5IG9uZS4KKyAgICAgICAgICAgIGludCBkaWdpdCA9IHN0YXRpY19jYXN0PGlu
dD4oZnJhY3Rpb25hbHMgPj4gLW9uZS5lKCkpOworICAgICAgICAgICAgYnVmZmVyWypsZW5ndGhd
ID0gJzAnICsgZGlnaXQ7CisgICAgICAgICAgICAoKmxlbmd0aCkrKzsKKyAgICAgICAgICAgIHJl
cXVlc3RlZF9kaWdpdHMtLTsKKyAgICAgICAgICAgIGZyYWN0aW9uYWxzICY9IG9uZS5mKCkgLSAx
OyAgLy8gTW9kdWxvIGJ5IG9uZS4KKyAgICAgICAgICAgICgqa2FwcGEpLS07CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHJlcXVlc3RlZF9kaWdpdHMgIT0gMCkgcmV0dXJuIGZhbHNlOworICAgICAg
ICByZXR1cm4gUm91bmRXZWVkQ291bnRlZChidWZmZXIsICpsZW5ndGgsIGZyYWN0aW9uYWxzLCBv
bmUuZigpLCB3X2Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYXBwYSk7
CisgICAgfQorICAgIAorICAgIAorICAgIC8vIFByb3ZpZGVzIGEgZGVjaW1hbCByZXByZXNlbnRh
dGlvbiBvZiB2LgorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBpdCBzdWNjZWVkcywgb3RoZXJ3aXNl
IHRoZSByZXN1bHQgY2Fubm90IGJlIHRydXN0ZWQuCisgICAgLy8gVGhlcmUgd2lsbCBiZSAqbGVu
Z3RoIGRpZ2l0cyBpbnNpZGUgdGhlIGJ1ZmZlciAobm90IG51bGwtdGVybWluYXRlZCkuCisgICAg
Ly8gSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB0aGVuCisgICAgLy8gICAgICAgIHYgPT0g
KGRvdWJsZSkgKGJ1ZmZlciAqIDEwXmRlY2ltYWxfZXhwb25lbnQpLgorICAgIC8vIFRoZSBkaWdp
dHMgaW4gdGhlIGJ1ZmZlciBhcmUgdGhlIHNob3J0ZXN0IHJlcHJlc2VudGF0aW9uIHBvc3NpYmxl
OiBubworICAgIC8vIDAuMDk5OTk5OTk5OTk5OTk5OTkgaW5zdGVhZCBvZiAwLjEuIFRoZSBzaG9y
dGVyIHJlcHJlc2VudGF0aW9uIHdpbGwgZXZlbiBiZQorICAgIC8vIGNob3NlbiBldmVuIGlmIHRo
ZSBsb25nZXIgb25lIHdvdWxkIGJlIGNsb3NlciB0byB2LgorICAgIC8vIFRoZSBsYXN0IGRpZ2l0
IHdpbGwgYmUgY2xvc2VzdCB0byB0aGUgYWN0dWFsIHYuIFRoYXQgaXMsIGV2ZW4gaWYgc2V2ZXJh
bAorICAgIC8vIGRpZ2l0cyBtaWdodCBjb3JyZWN0bHkgeWllbGQgJ3YnIHdoZW4gcmVhZCBhZ2Fp
biwgdGhlIGNsb3Nlc3Qgd2lsbCBiZQorICAgIC8vIGNvbXB1dGVkLgorICAgIHN0YXRpYyBib29s
IEdyaXN1Myhkb3VibGUgdiwKKyAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1
ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50KiBsZW5ndGgsCisgICAgICAgICAgICAg
ICAgICAgICAgIGludCogZGVjaW1hbF9leHBvbmVudCkgeworICAgICAgICBEaXlGcCB3ID0gRG91
YmxlKHYpLkFzTm9ybWFsaXplZERpeUZwKCk7CisgICAgICAgIC8vIGJvdW5kYXJ5X21pbnVzIGFu
ZCBib3VuZGFyeV9wbHVzIGFyZSB0aGUgYm91bmRhcmllcyBiZXR3ZWVuIHYgYW5kIGl0cworICAg
ICAgICAvLyBjbG9zZXN0IGZsb2F0aW5nLXBvaW50IG5laWdoYm9ycy4gQW55IG51bWJlciBzdHJp
Y3RseSBiZXR3ZWVuCisgICAgICAgIC8vIGJvdW5kYXJ5X21pbnVzIGFuZCBib3VuZGFyeV9wbHVz
IHdpbGwgcm91bmQgdG8gdiB3aGVuIGNvbnZlcnQgdG8gYSBkb3VibGUuCisgICAgICAgIC8vIEdy
aXN1MyB3aWxsIG5ldmVyIG91dHB1dCByZXByZXNlbnRhdGlvbnMgdGhhdCBsaWUgZXhhY3RseSBv
biBhIGJvdW5kYXJ5LgorICAgICAgICBEaXlGcCBib3VuZGFyeV9taW51cywgYm91bmRhcnlfcGx1
czsKKyAgICAgICAgRG91YmxlKHYpLk5vcm1hbGl6ZWRCb3VuZGFyaWVzKCZib3VuZGFyeV9taW51
cywgJmJvdW5kYXJ5X3BsdXMpOworICAgICAgICBBU1NFUlQoYm91bmRhcnlfcGx1cy5lKCkgPT0g
dy5lKCkpOworICAgICAgICBEaXlGcCB0ZW5fbWs7ICAvLyBDYWNoZWQgcG93ZXIgb2YgdGVuOiAx
MF4taworICAgICAgICBpbnQgbWs7ICAgICAgICAvLyAtaworICAgICAgICBpbnQgdGVuX21rX21p
bmltYWxfYmluYXJ5X2V4cG9uZW50ID0KKyAgICAgICAga01pbmltYWxUYXJnZXRFeHBvbmVudCAt
ICh3LmUoKSArIERpeUZwOjprU2lnbmlmaWNhbmRTaXplKTsKKyAgICAgICAgaW50IHRlbl9ta19t
YXhpbWFsX2JpbmFyeV9leHBvbmVudCA9CisgICAgICAgIGtNYXhpbWFsVGFyZ2V0RXhwb25lbnQg
LSAody5lKCkgKyBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSk7CisgICAgICAgIFBvd2Vyc09mVGVu
Q2FjaGU6OkdldENhY2hlZFBvd2VyRm9yQmluYXJ5RXhwb25lbnRSYW5nZSgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbl9t
a19taW5pbWFsX2JpbmFyeV9leHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbl9ta19tYXhpbWFsX2JpbmFyeV9l
eHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZ0ZW5fbWssICZtayk7CisgICAgICAgIEFTU0VSVCgoa01pbmltYWxU
YXJnZXRFeHBvbmVudCA8PSB3LmUoKSArIHRlbl9tay5lKCkgKworICAgICAgICAgICAgICAgIERp
eUZwOjprU2lnbmlmaWNhbmRTaXplKSAmJgorICAgICAgICAgICAgICAgKGtNYXhpbWFsVGFyZ2V0
RXhwb25lbnQgPj0gdy5lKCkgKyB0ZW5fbWsuZSgpICsKKyAgICAgICAgICAgICAgICBEaXlGcDo6
a1NpZ25pZmljYW5kU2l6ZSkpOworICAgICAgICAvLyBOb3RlIHRoYXQgdGVuX21rIGlzIG9ubHkg
YW4gYXBwcm94aW1hdGlvbiBvZiAxMF4tay4gQSBEaXlGcCBvbmx5IGNvbnRhaW5zIGEKKyAgICAg
ICAgLy8gNjQgYml0IHNpZ25pZmljYW5kIGFuZCB0ZW5fbWsgaXMgdGh1cyBvbmx5IHByZWNpc2Ug
dXAgdG8gNjQgYml0cy4KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBEaXlGcDo6VGltZXMgcHJv
Y2VkdXJlIHJvdW5kcyBpdHMgcmVzdWx0LCBhbmQgdGVuX21rIGlzIGFwcHJveGltYXRlZAorICAg
ICAgICAvLyB0b28uIFRoZSB2YXJpYWJsZSBzY2FsZWRfdyAoYXMgd2VsbCBhcyBzY2FsZWRfYm91
bmRhcnlfbWludXMvcGx1cykgYXJlIG5vdworICAgICAgICAvLyBvZmYgYnkgYSBzbWFsbCBhbW91
bnQuCisgICAgICAgIC8vIEluIGZhY3Q6IHNjYWxlZF93IC0gdyoxMF5rIDwgMXVscCAodW5pdCBp
biB0aGUgbGFzdCBwbGFjZSkgb2Ygc2NhbGVkX3cuCisgICAgICAgIC8vIEluIG90aGVyIHdvcmRz
OiBsZXQgZiA9IHNjYWxlZF93LmYoKSBhbmQgZSA9IHNjYWxlZF93LmUoKSwgdGhlbgorICAgICAg
ICAvLyAgICAgICAgICAgKGYtMSkgKiAyXmUgPCB3KjEwXmsgPCAoZisxKSAqIDJeZQorICAgICAg
ICBEaXlGcCBzY2FsZWRfdyA9IERpeUZwOjpUaW1lcyh3LCB0ZW5fbWspOworICAgICAgICBBU1NF
UlQoc2NhbGVkX3cuZSgpID09CisgICAgICAgICAgICAgICBib3VuZGFyeV9wbHVzLmUoKSArIHRl
bl9tay5lKCkgKyBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSk7CisgICAgICAgIC8vIEluIHRoZW9y
eSBpdCB3b3VsZCBiZSBwb3NzaWJsZSB0byBhdm9pZCBzb21lIHJlY29tcHV0YXRpb25zIGJ5IGNv
bXB1dGluZworICAgICAgICAvLyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHcgYW5kIGJvdW5kYXJ5
X21pbnVzL3BsdXMgKGEgcG93ZXIgb2YgMikgYW5kIHRvCisgICAgICAgIC8vIGNvbXB1dGUgc2Nh
bGVkX2JvdW5kYXJ5X21pbnVzL3BsdXMgYnkgc3VidHJhY3RpbmcvYWRkaW5nIGZyb20KKyAgICAg
ICAgLy8gc2NhbGVkX3cuIEhvd2V2ZXIgdGhlIGNvZGUgYmVjb21lcyBtdWNoIGxlc3MgcmVhZGFi
bGUgYW5kIHRoZSBzcGVlZAorICAgICAgICAvLyBlbmhhbmNlbWVudHMgYXJlIG5vdCB0ZXJyaWZm
aWMuCisgICAgICAgIERpeUZwIHNjYWxlZF9ib3VuZGFyeV9taW51cyA9IERpeUZwOjpUaW1lcyhi
b3VuZGFyeV9taW51cywgdGVuX21rKTsKKyAgICAgICAgRGl5RnAgc2NhbGVkX2JvdW5kYXJ5X3Bs
dXMgID0gRGl5RnA6OlRpbWVzKGJvdW5kYXJ5X3BsdXMsICB0ZW5fbWspOworICAgICAgICAKKyAg
ICAgICAgLy8gRGlnaXRHZW4gd2lsbCBnZW5lcmF0ZSB0aGUgZGlnaXRzIG9mIHNjYWxlZF93LiBU
aGVyZWZvcmUgd2UgaGF2ZQorICAgICAgICAvLyB2ID09IChkb3VibGUpIChzY2FsZWRfdyAqIDEw
Xi1taykuCisgICAgICAgIC8vIFNldCBkZWNpbWFsX2V4cG9uZW50ID09IC1tayBhbmQgcGFzcyBp
dCB0byBEaWdpdEdlbi4gSWYgc2NhbGVkX3cgaXMgbm90IGFuCisgICAgICAgIC8vIGludGVnZXIg
dGhhbiBpdCB3aWxsIGJlIHVwZGF0ZWQuIEZvciBpbnN0YW5jZSBpZiBzY2FsZWRfdyA9PSAxLjIz
IHRoZW4KKyAgICAgICAgLy8gdGhlIGJ1ZmZlciB3aWxsIGJlIGZpbGxlZCB3aXRoICIxMjMiIHVu
ZCB0aGUgZGVjaW1hbF9leHBvbmVudCB3aWxsIGJlCisgICAgICAgIC8vIGRlY3JlYXNlZCBieSAy
LgorICAgICAgICBpbnQga2FwcGE7CisgICAgICAgIGJvb2wgcmVzdWx0ID0gRGlnaXRHZW4oc2Nh
bGVkX2JvdW5kYXJ5X21pbnVzLCBzY2FsZWRfdywgc2NhbGVkX2JvdW5kYXJ5X3BsdXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBsZW5ndGgsICZrYXBwYSk7CisgICAg
ICAgICpkZWNpbWFsX2V4cG9uZW50ID0gLW1rICsga2FwcGE7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIAorICAgIC8vIFRoZSAiY291bnRlZCIgdmVyc2lvbiBvZiBn
cmlzdTMgKHNlZSBhYm92ZSkgb25seSBnZW5lcmF0ZXMgcmVxdWVzdGVkX2RpZ2l0cworICAgIC8v
IG51bWJlciBvZiBkaWdpdHMuIFRoaXMgdmVyc2lvbiBkb2VzIG5vdCBnZW5lcmF0ZSB0aGUgc2hv
cnRlc3QgcmVwcmVzZW50YXRpb24sCisgICAgLy8gYW5kIHdpdGggZW5vdWdoIHJlcXVlc3RlZCBk
aWdpdHMgMC4xIHdpbGwgYXQgc29tZSBwb2ludCBwcmludCBhcyAwLjk5OTk5OTkuLi4KKyAgICAv
LyBHcmlzdTMgaXMgdG9vIGltcHJlY2lzZSBmb3IgcmVhbCBoYWxmd2F5IGNhc2VzICgxLjUgd2ls
bCBub3Qgd29yaykgYW5kCisgICAgLy8gdGhlcmVmb3JlIHRoZSByb3VuZGluZyBzdHJhdGVneSBm
b3IgaGFsZndheSBjYXNlcyBpcyBpcnJlbGV2YW50LgorICAgIHN0YXRpYyBib29sIEdyaXN1M0Nv
dW50ZWQoZG91YmxlIHYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVxdWVz
dGVkX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBi
dWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGxlbmd0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCogZGVjaW1hbF9leHBvbmVudCkgeworICAgICAg
ICBEaXlGcCB3ID0gRG91YmxlKHYpLkFzTm9ybWFsaXplZERpeUZwKCk7CisgICAgICAgIERpeUZw
IHRlbl9tazsgIC8vIENhY2hlZCBwb3dlciBvZiB0ZW46IDEwXi1rCisgICAgICAgIGludCBtazsg
ICAgICAgIC8vIC1rCisgICAgICAgIGludCB0ZW5fbWtfbWluaW1hbF9iaW5hcnlfZXhwb25lbnQg
PQorICAgICAgICBrTWluaW1hbFRhcmdldEV4cG9uZW50IC0gKHcuZSgpICsgRGl5RnA6OmtTaWdu
aWZpY2FuZFNpemUpOworICAgICAgICBpbnQgdGVuX21rX21heGltYWxfYmluYXJ5X2V4cG9uZW50
ID0KKyAgICAgICAga01heGltYWxUYXJnZXRFeHBvbmVudCAtICh3LmUoKSArIERpeUZwOjprU2ln
bmlmaWNhbmRTaXplKTsKKyAgICAgICAgUG93ZXJzT2ZUZW5DYWNoZTo6R2V0Q2FjaGVkUG93ZXJG
b3JCaW5hcnlFeHBvbmVudFJhbmdlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVuX21rX21pbmltYWxfYmluYXJ5X2V4cG9u
ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGVuX21rX21heGltYWxfYmluYXJ5X2V4cG9uZW50LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRlbl9t
aywgJm1rKTsKKyAgICAgICAgQVNTRVJUKChrTWluaW1hbFRhcmdldEV4cG9uZW50IDw9IHcuZSgp
ICsgdGVuX21rLmUoKSArCisgICAgICAgICAgICAgICAgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUp
ICYmCisgICAgICAgICAgICAgICAoa01heGltYWxUYXJnZXRFeHBvbmVudCA+PSB3LmUoKSArIHRl
bl9tay5lKCkgKworICAgICAgICAgICAgICAgIERpeUZwOjprU2lnbmlmaWNhbmRTaXplKSk7Cisg
ICAgICAgIC8vIE5vdGUgdGhhdCB0ZW5fbWsgaXMgb25seSBhbiBhcHByb3hpbWF0aW9uIG9mIDEw
Xi1rLiBBIERpeUZwIG9ubHkgY29udGFpbnMgYQorICAgICAgICAvLyA2NCBiaXQgc2lnbmlmaWNh
bmQgYW5kIHRlbl9tayBpcyB0aHVzIG9ubHkgcHJlY2lzZSB1cCB0byA2NCBiaXRzLgorICAgICAg
ICAKKyAgICAgICAgLy8gVGhlIERpeUZwOjpUaW1lcyBwcm9jZWR1cmUgcm91bmRzIGl0cyByZXN1
bHQsIGFuZCB0ZW5fbWsgaXMgYXBwcm94aW1hdGVkCisgICAgICAgIC8vIHRvby4gVGhlIHZhcmlh
YmxlIHNjYWxlZF93IChhcyB3ZWxsIGFzIHNjYWxlZF9ib3VuZGFyeV9taW51cy9wbHVzKSBhcmUg
bm93CisgICAgICAgIC8vIG9mZiBieSBhIHNtYWxsIGFtb3VudC4KKyAgICAgICAgLy8gSW4gZmFj
dDogc2NhbGVkX3cgLSB3KjEwXmsgPCAxdWxwICh1bml0IGluIHRoZSBsYXN0IHBsYWNlKSBvZiBz
Y2FsZWRfdy4KKyAgICAgICAgLy8gSW4gb3RoZXIgd29yZHM6IGxldCBmID0gc2NhbGVkX3cuZigp
IGFuZCBlID0gc2NhbGVkX3cuZSgpLCB0aGVuCisgICAgICAgIC8vICAgICAgICAgICAoZi0xKSAq
IDJeZSA8IHcqMTBeayA8IChmKzEpICogMl5lCisgICAgICAgIERpeUZwIHNjYWxlZF93ID0gRGl5
RnA6OlRpbWVzKHcsIHRlbl9tayk7CisgICAgICAgIAorICAgICAgICAvLyBXZSBub3cgaGF2ZSAo
ZG91YmxlKSAoc2NhbGVkX3cgKiAxMF4tbWspLgorICAgICAgICAvLyBEaWdpdEdlbiB3aWxsIGdl
bmVyYXRlIHRoZSBmaXJzdCByZXF1ZXN0ZWRfZGlnaXRzIGRpZ2l0cyBvZiBzY2FsZWRfdyBhbmQK
KyAgICAgICAgLy8gcmV0dXJuIHRvZ2V0aGVyIHdpdGggYSBrYXBwYSBzdWNoIHRoYXQgc2NhbGVk
X3cgfj0gYnVmZmVyICogMTBea2FwcGEuIChJdAorICAgICAgICAvLyB3aWxsIG5vdCBhbHdheXMg
YmUgZXhhY3RseSB0aGUgc2FtZSBzaW5jZSBEaWdpdEdlbkNvdW50ZWQgb25seSBwcm9kdWNlcyBh
CisgICAgICAgIC8vIGxpbWl0ZWQgbnVtYmVyIG9mIGRpZ2l0cy4pCisgICAgICAgIGludCBrYXBw
YTsKKyAgICAgICAgYm9vbCByZXN1bHQgPSBEaWdpdEdlbkNvdW50ZWQoc2NhbGVkX3csIHJlcXVl
c3RlZF9kaWdpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZl
ciwgbGVuZ3RoLCAma2FwcGEpOworICAgICAgICAqZGVjaW1hbF9leHBvbmVudCA9IC1tayArIGth
cHBhOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICAKKyAgICBib29s
IEZhc3REdG9hKGRvdWJsZSB2LAorICAgICAgICAgICAgICAgICAgRmFzdER0b2FNb2RlIG1vZGUs
CisgICAgICAgICAgICAgICAgICBpbnQgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAgICAgICAgICAg
ICAgIFZlY3RvcjxjaGFyPiBidWZmZXIsCisgICAgICAgICAgICAgICAgICBpbnQqIGxlbmd0aCwK
KyAgICAgICAgICAgICAgICAgIGludCogZGVjaW1hbF9wb2ludCkgeworICAgICAgICBBU1NFUlQo
diA+IDApOworICAgICAgICBBU1NFUlQoIURvdWJsZSh2KS5Jc1NwZWNpYWwoKSk7CisgICAgICAg
IAorICAgICAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgICAgICBpbnQgZGVjaW1hbF9leHBv
bmVudCA9IDA7CisgICAgICAgIHN3aXRjaCAobW9kZSkgeworICAgICAgICAgICAgY2FzZSBGQVNU
X0RUT0FfU0hPUlRFU1Q6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gR3Jpc3UzKHYsIGJ1ZmZl
ciwgbGVuZ3RoLCAmZGVjaW1hbF9leHBvbmVudCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIEZBU1RfRFRPQV9QUkVDSVNJT046CisgICAgICAgICAgICAgICAgcmVz
dWx0ID0gR3Jpc3UzQ291bnRlZCh2LCByZXF1ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBsZW5ndGgsICZkZWNpbWFsX2V4cG9uZW50
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVzdWx0KSB7
CisgICAgICAgICAgICAqZGVjaW1hbF9wb2ludCA9ICpsZW5ndGggKyBkZWNpbWFsX2V4cG9uZW50
OworICAgICAgICAgICAgYnVmZmVyWypsZW5ndGhdID0gJ1wwJzsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKK30gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29u
dmVyc2lvbgorCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvZHRvYS9mYXN0LWR0b2EuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
ZHRvYS9mYXN0LWR0b2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NzZhOWYzODI1NmQyZmIwMDIzZjhlMDhkYjU4
MWE4OTAzOGIyNzEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9kdG9hL2Zhc3QtZHRvYS5oCkBAIC0wLDAgKzEsODggQEAKKy8vIENvcHlyaWdodCAyMDEwIHRo
ZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
Ky8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisv
LyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworI2lmbmRlZiBET1VCTEVfQ09OVkVSU0lPTl9GQVNUX0RUT0FfSF8KKyNkZWZpbmUg
RE9VQkxFX0NPTlZFUlNJT05fRkFTVF9EVE9BX0hfCisKKyNpbmNsdWRlICJ1dGlscy5oIgorCitu
YW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKKyAgICAKKyAg
ICBlbnVtIEZhc3REdG9hTW9kZSB7CisgICAgICAgIC8vIENvbXB1dGVzIHRoZSBzaG9ydGVzdCBy
ZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gaW5wdXQuIFRoZSByZXR1cm5lZAorICAgICAgICAv
LyByZXN1bHQgd2lsbCBiZSB0aGUgbW9zdCBhY2N1cmF0ZSBudW1iZXIgb2YgdGhpcyBsZW5ndGgu
IExvbmdlcgorICAgICAgICAvLyByZXByZXNlbnRhdGlvbnMgbWlnaHQgYmUgbW9yZSBhY2N1cmF0
ZS4KKyAgICAgICAgRkFTVF9EVE9BX1NIT1JURVNULAorICAgICAgICAvLyBDb21wdXRlcyBhIHJl
cHJlc2VudGF0aW9uIHdoZXJlIHRoZSBwcmVjaXNpb24gKG51bWJlciBvZiBkaWdpdHMpIGlzCisg
ICAgICAgIC8vIGdpdmVuIGFzIGlucHV0LiBUaGUgcHJlY2lzaW9uIGlzIGluZGVwZW5kZW50IG9m
IHRoZSBkZWNpbWFsIHBvaW50LgorICAgICAgICBGQVNUX0RUT0FfUFJFQ0lTSU9OCisgICAgfTsK
KyAgICAKKyAgICAvLyBGYXN0RHRvYSB3aWxsIHByb2R1Y2UgYXQgbW9zdCBrRmFzdER0b2FNYXhp
bWFsTGVuZ3RoIGRpZ2l0cy4gVGhpcyBkb2VzIG5vdAorICAgIC8vIGluY2x1ZGUgdGhlIHRlcm1p
bmF0aW5nICdcMCcgY2hhcmFjdGVyLgorICAgIHN0YXRpYyBjb25zdCBpbnQga0Zhc3REdG9hTWF4
aW1hbExlbmd0aCA9IDE3OworICAgIAorICAgIC8vIFByb3ZpZGVzIGEgZGVjaW1hbCByZXByZXNl
bnRhdGlvbiBvZiB2LgorICAgIC8vIFRoZSByZXN1bHQgc2hvdWxkIGJlIGludGVycHJldGVkIGFz
IGJ1ZmZlciAqIDEwXihwb2ludCAtIGxlbmd0aCkuCisgICAgLy8KKyAgICAvLyBQcmVjb25kaXRp
b246CisgICAgLy8gICAqIHYgbXVzdCBiZSBhIHN0cmljdGx5IHBvc2l0aXZlIGZpbml0ZSBkb3Vi
bGUuCisgICAgLy8KKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgaXQgc3VjY2VlZHMsIG90aGVyd2lz
ZSB0aGUgcmVzdWx0IGNhbiBub3QgYmUgdHJ1c3RlZC4KKyAgICAvLyBUaGVyZSB3aWxsIGJlICps
ZW5ndGggZGlnaXRzIGluc2lkZSB0aGUgYnVmZmVyIGZvbGxvd2VkIGJ5IGEgbnVsbCB0ZXJtaW5h
dG9yLgorICAgIC8vIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgYW5kIG1vZGUgZXF1YWxz
CisgICAgLy8gICAtIEZBU1RfRFRPQV9TSE9SVEVTVCwgdGhlbgorICAgIC8vICAgICB0aGUgcGFy
YW1ldGVyIHJlcXVlc3RlZF9kaWdpdHMgaXMgaWdub3JlZC4KKyAgICAvLyAgICAgVGhlIHJlc3Vs
dCBzYXRpc2ZpZXMKKyAgICAvLyAgICAgICAgIHYgPT0gKGRvdWJsZSkgKGJ1ZmZlciAqIDEwXihw
b2ludCAtIGxlbmd0aCkpLgorICAgIC8vICAgICBUaGUgZGlnaXRzIGluIHRoZSBidWZmZXIgYXJl
IHRoZSBzaG9ydGVzdCByZXByZXNlbnRhdGlvbiBwb3NzaWJsZS4gRS5nLgorICAgIC8vICAgICBp
ZiAwLjA5OTk5OTk5OTk5OSBhbmQgMC4xIHJlcHJlc2VudCB0aGUgc2FtZSBkb3VibGUgdGhlbiAi
MSIgaXMgcmV0dXJuZWQKKyAgICAvLyAgICAgd2l0aCBwb2ludCA9IDAuCisgICAgLy8gICAgIFRo
ZSBsYXN0IGRpZ2l0IHdpbGwgYmUgY2xvc2VzdCB0byB0aGUgYWN0dWFsIHYuIFRoYXQgaXMsIGV2
ZW4gaWYgc2V2ZXJhbAorICAgIC8vICAgICBkaWdpdHMgbWlnaHQgY29ycmVjdGx5IHlpZWxkICd2
JyB3aGVuIHJlYWQgYWdhaW4sIHRoZSBidWZmZXIgd2lsbCBjb250YWluCisgICAgLy8gICAgIHRo
ZSBvbmUgY2xvc2VzdCB0byB2LgorICAgIC8vICAgLSBGQVNUX0RUT0FfUFJFQ0lTSU9OLCB0aGVu
CisgICAgLy8gICAgIHRoZSBidWZmZXIgY29udGFpbnMgcmVxdWVzdGVkX2RpZ2l0cyBkaWdpdHMu
CisgICAgLy8gICAgIHRoZSBkaWZmZXJlbmNlIHYgLSAoYnVmZmVyICogMTBeKHBvaW50LWxlbmd0
aCkpIGlzIGNsb3Nlc3QgdG8gemVybyBmb3IKKyAgICAvLyAgICAgYWxsIHBvc3NpYmxlIHJlcHJl
c2VudGF0aW9ucyBvZiByZXF1ZXN0ZWRfZGlnaXRzIGRpZ2l0cy4KKyAgICAvLyAgICAgSWYgdGhl
cmUgYXJlIHR3byB2YWx1ZXMgdGhhdCBhcmUgZXF1YWxseSBjbG9zZSwgdGhlbiBGYXN0RHRvYSBy
ZXR1cm5zCisgICAgLy8gICAgIGZhbHNlLgorICAgIC8vIEZvciBib3RoIG1vZGVzIHRoZSBidWZm
ZXIgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUgcmVzdWx0LgorICAgIGJvb2wgRmFz
dER0b2EoZG91YmxlIGQsCisgICAgICAgICAgICAgICAgICBGYXN0RHRvYU1vZGUgbW9kZSwKKyAg
ICAgICAgICAgICAgICAgIGludCByZXF1ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAg
VmVjdG9yPGNoYXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgIGludCogbGVuZ3RoLAorICAg
ICAgICAgICAgICAgICAgaW50KiBkZWNpbWFsX3BvaW50KTsKKyAgICAKK30gIC8vIG5hbWVzcGFj
ZSBkb3VibGVfY29udmVyc2lvbgorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmICAvLyBE
T1VCTEVfQ09OVkVSU0lPTl9GQVNUX0RUT0FfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvZHRvYS9maXhlZC1kdG9hLmNjIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9kdG9hL2ZpeGVkLWR0b2EuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGMzOTExZWExNDY2ZWRhMzg3YjAxNTdj
MmQyN2U1ODQ2MTY5YzIyYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvZHRvYS9maXhlZC1kdG9hLmNjCkBAIC0wLDAgKzEsNDA4IEBACisvLyBDb3B5cmlnaHQg
MjAxMCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8v
ICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAg
ICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
Ky8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlICJVbnVzZWRQYXJh
bS5oIgorI2luY2x1ZGUgImZpeGVkLWR0b2EuaCIKKyNpbmNsdWRlICJkb3VibGUuaCIKKworbmFt
ZXNwYWNlIFdURiB7CisKK25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAg
Ly8gUmVwcmVzZW50cyBhIDEyOGJpdCB0eXBlLiBUaGlzIGNsYXNzIHNob3VsZCBiZSByZXBsYWNl
ZCBieSBhIG5hdGl2ZSB0eXBlIG9uCisgICAgLy8gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCAxMjhi
aXQgaW50ZWdlcnMuCisgICAgY2xhc3MgVUludDEyOCB7CisgICAgcHVibGljOgorICAgICAgICBV
SW50MTI4KCkgOiBoaWdoX2JpdHNfKDApLCBsb3dfYml0c18oMCkgeyB9CisgICAgICAgIFVJbnQx
MjgodWludDY0X3QgaGlnaCwgdWludDY0X3QgbG93KSA6IGhpZ2hfYml0c18oaGlnaCksIGxvd19i
aXRzXyhsb3cpIHsgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBNdWx0aXBseSh1aW50MzJfdCBt
dWx0aXBsaWNhbmQpIHsKKyAgICAgICAgICAgIHVpbnQ2NF90IGFjY3VtdWxhdG9yOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBhY2N1bXVsYXRvciA9IChsb3dfYml0c18gJiBrTWFzazMyKSAq
IG11bHRpcGxpY2FuZDsKKyAgICAgICAgICAgIHVpbnQzMl90IHBhcnQgPSBzdGF0aWNfY2FzdDx1
aW50MzJfdD4oYWNjdW11bGF0b3IgJiBrTWFzazMyKTsKKyAgICAgICAgICAgIGFjY3VtdWxhdG9y
ID4+PSAzMjsKKyAgICAgICAgICAgIGFjY3VtdWxhdG9yID0gYWNjdW11bGF0b3IgKyAobG93X2Jp
dHNfID4+IDMyKSAqIG11bHRpcGxpY2FuZDsKKyAgICAgICAgICAgIGxvd19iaXRzXyA9IChhY2N1
bXVsYXRvciA8PCAzMikgKyBwYXJ0OworICAgICAgICAgICAgYWNjdW11bGF0b3IgPj49IDMyOwor
ICAgICAgICAgICAgYWNjdW11bGF0b3IgPSBhY2N1bXVsYXRvciArIChoaWdoX2JpdHNfICYga01h
c2szMikgKiBtdWx0aXBsaWNhbmQ7CisgICAgICAgICAgICBwYXJ0ID0gc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KGFjY3VtdWxhdG9yICYga01hc2szMik7CisgICAgICAgICAgICBhY2N1bXVsYXRvciA+
Pj0gMzI7CisgICAgICAgICAgICBhY2N1bXVsYXRvciA9IGFjY3VtdWxhdG9yICsgKGhpZ2hfYml0
c18gPj4gMzIpICogbXVsdGlwbGljYW5kOworICAgICAgICAgICAgaGlnaF9iaXRzXyA9IChhY2N1
bXVsYXRvciA8PCAzMikgKyBwYXJ0OworICAgICAgICAgICAgQVNTRVJUKChhY2N1bXVsYXRvciA+
PiAzMikgPT0gMCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgU2hpZnQoaW50
IHNoaWZ0X2Ftb3VudCkgeworICAgICAgICAgICAgQVNTRVJUKC02NCA8PSBzaGlmdF9hbW91bnQg
JiYgc2hpZnRfYW1vdW50IDw9IDY0KTsKKyAgICAgICAgICAgIGlmIChzaGlmdF9hbW91bnQgPT0g
MCkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hp
ZnRfYW1vdW50ID09IC02NCkgeworICAgICAgICAgICAgICAgIGhpZ2hfYml0c18gPSBsb3dfYml0
c187CisgICAgICAgICAgICAgICAgbG93X2JpdHNfID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAoc2hpZnRfYW1vdW50ID09IDY0KSB7CisgICAgICAgICAgICAgICAgbG93X2JpdHNfID0gaGln
aF9iaXRzXzsKKyAgICAgICAgICAgICAgICBoaWdoX2JpdHNfID0gMDsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoc2hpZnRfYW1vdW50IDw9IDApIHsKKyAgICAgICAgICAgICAgICBoaWdoX2JpdHNf
IDw8PSAtc2hpZnRfYW1vdW50OworICAgICAgICAgICAgICAgIGhpZ2hfYml0c18gKz0gbG93X2Jp
dHNfID4+ICg2NCArIHNoaWZ0X2Ftb3VudCk7CisgICAgICAgICAgICAgICAgbG93X2JpdHNfIDw8
PSAtc2hpZnRfYW1vdW50OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBs
b3dfYml0c18gPj49IHNoaWZ0X2Ftb3VudDsKKyAgICAgICAgICAgICAgICBsb3dfYml0c18gKz0g
aGlnaF9iaXRzXyA8PCAoNjQgLSBzaGlmdF9hbW91bnQpOworICAgICAgICAgICAgICAgIGhpZ2hf
Yml0c18gPj49IHNoaWZ0X2Ftb3VudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgLy8gTW9kaWZpZXMgKnRoaXMgdG8gKnRoaXMgTU9EICgyXnBvd2VyKS4KKyAg
ICAgICAgLy8gUmV0dXJucyAqdGhpcyBESVYgKDJecG93ZXIpLgorICAgICAgICBpbnQgRGl2TW9k
UG93ZXJPZjIoaW50IHBvd2VyKSB7CisgICAgICAgICAgICBpZiAocG93ZXIgPj0gNjQpIHsKKyAg
ICAgICAgICAgICAgICBpbnQgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8aW50PihoaWdoX2JpdHNfID4+
IChwb3dlciAtIDY0KSk7CisgICAgICAgICAgICAgICAgaGlnaF9iaXRzXyAtPSBzdGF0aWNfY2Fz
dDx1aW50NjRfdD4ocmVzdWx0KSA8PCAocG93ZXIgLSA2NCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdWludDY0
X3QgcGFydF9sb3cgPSBsb3dfYml0c18gPj4gcG93ZXI7CisgICAgICAgICAgICAgICAgdWludDY0
X3QgcGFydF9oaWdoID0gaGlnaF9iaXRzXyA8PCAoNjQgLSBwb3dlcik7CisgICAgICAgICAgICAg
ICAgaW50IHJlc3VsdCA9IHN0YXRpY19jYXN0PGludD4ocGFydF9sb3cgKyBwYXJ0X2hpZ2gpOwor
ICAgICAgICAgICAgICAgIGhpZ2hfYml0c18gPSAwOworICAgICAgICAgICAgICAgIGxvd19iaXRz
XyAtPSBwYXJ0X2xvdyA8PCBwb3dlcjsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIElzWmVybygp
IGNvbnN0IHsKKyAgICAgICAgICAgIHJldHVybiBoaWdoX2JpdHNfID09IDAgJiYgbG93X2JpdHNf
ID09IDA7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludCBCaXRBdChpbnQgcG9zaXRp
b24pIHsKKyAgICAgICAgICAgIGlmIChwb3NpdGlvbiA+PSA2NCkgeworICAgICAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGhpZ2hfYml0c18gPj4gKHBvc2l0aW9uIC0gNjQpKSAm
IDE7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxpbnQ+KGxvd19iaXRzXyA+PiBwb3NpdGlvbikgJiAxOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIHN0YXRpYyBjb25zdCB1aW50
NjRfdCBrTWFzazMyID0gMHhGRkZGRkZGRjsKKyAgICAgICAgLy8gVmFsdWUgPT0gKGhpZ2hfYml0
c18gPDwgNjQpICsgbG93X2JpdHNfCisgICAgICAgIHVpbnQ2NF90IGhpZ2hfYml0c187CisgICAg
ICAgIHVpbnQ2NF90IGxvd19iaXRzXzsKKyAgICB9OworICAgIAorICAgIAorICAgIHN0YXRpYyBj
b25zdCBpbnQga0RvdWJsZVNpZ25pZmljYW5kU2l6ZSA9IDUzOyAgLy8gSW5jbHVkZXMgdGhlIGhp
ZGRlbiBiaXQuCisgICAgCisgICAgCisgICAgc3RhdGljIHZvaWQgRmlsbERpZ2l0czMyRml4ZWRM
ZW5ndGgodWludDMyX3QgbnVtYmVyLCBpbnQgcmVxdWVzdGVkX2xlbmd0aCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLCBpbnQqIGxl
bmd0aCkgeworICAgICAgICBmb3IgKGludCBpID0gcmVxdWVzdGVkX2xlbmd0aCAtIDE7IGkgPj0g
MDsgLS1pKSB7CisgICAgICAgICAgICBidWZmZXJbKCpsZW5ndGgpICsgaV0gPSAnMCcgKyBudW1i
ZXIgJSAxMDsKKyAgICAgICAgICAgIG51bWJlciAvPSAxMDsKKyAgICAgICAgfQorICAgICAgICAq
bGVuZ3RoICs9IHJlcXVlc3RlZF9sZW5ndGg7CisgICAgfQorICAgIAorICAgIAorICAgIHN0YXRp
YyB2b2lkIEZpbGxEaWdpdHMzMih1aW50MzJfdCBudW1iZXIsIFZlY3RvcjxjaGFyPiBidWZmZXIs
IGludCogbGVuZ3RoKSB7CisgICAgICAgIGludCBudW1iZXJfbGVuZ3RoID0gMDsKKyAgICAgICAg
Ly8gV2UgZmlsbCB0aGUgZGlnaXRzIGluIHJldmVyc2Ugb3JkZXIgYW5kIGV4Y2hhbmdlIHRoZW0g
YWZ0ZXJ3YXJkcy4KKyAgICAgICAgd2hpbGUgKG51bWJlciAhPSAwKSB7CisgICAgICAgICAgICBp
bnQgZGlnaXQgPSBudW1iZXIgJSAxMDsKKyAgICAgICAgICAgIG51bWJlciAvPSAxMDsKKyAgICAg
ICAgICAgIGJ1ZmZlclsoKmxlbmd0aCkgKyBudW1iZXJfbGVuZ3RoXSA9ICcwJyArIGRpZ2l0Owor
ICAgICAgICAgICAgbnVtYmVyX2xlbmd0aCsrOworICAgICAgICB9CisgICAgICAgIC8vIEV4Y2hh
bmdlIHRoZSBkaWdpdHMuCisgICAgICAgIGludCBpID0gKmxlbmd0aDsKKyAgICAgICAgaW50IGog
PSAqbGVuZ3RoICsgbnVtYmVyX2xlbmd0aCAtIDE7CisgICAgICAgIHdoaWxlIChpIDwgaikgewor
ICAgICAgICAgICAgY2hhciB0bXAgPSBidWZmZXJbaV07CisgICAgICAgICAgICBidWZmZXJbaV0g
PSBidWZmZXJbal07CisgICAgICAgICAgICBidWZmZXJbal0gPSB0bXA7CisgICAgICAgICAgICBp
Kys7CisgICAgICAgICAgICBqLS07CisgICAgICAgIH0KKyAgICAgICAgKmxlbmd0aCArPSBudW1i
ZXJfbGVuZ3RoOworICAgIH0KKyAgICAKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBGaWxsRGlnaXRz
NjRGaXhlZExlbmd0aCh1aW50NjRfdCBudW1iZXIsIGludCByZXF1ZXN0ZWRfbGVuZ3RoLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXIs
IGludCogbGVuZ3RoKSB7CisgICAgICAgIFVOVVNFRF9QQVJBTShyZXF1ZXN0ZWRfbGVuZ3RoKTsK
KyAgICAgICAgY29uc3QgdWludDMyX3Qga1RlbjcgPSAxMDAwMDAwMDsKKyAgICAgICAgLy8gRm9y
IGVmZmljaWVuY3kgY3V0IHRoZSBudW1iZXIgaW50byAzIHVpbnQzMl90IHBhcnRzLCBhbmQgcHJp
bnQgdGhvc2UuCisgICAgICAgIHVpbnQzMl90IHBhcnQyID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KG51bWJlciAlIGtUZW43KTsKKyAgICAgICAgbnVtYmVyIC89IGtUZW43OworICAgICAgICB1aW50
MzJfdCBwYXJ0MSA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihudW1iZXIgJSBrVGVuNyk7CisgICAg
ICAgIHVpbnQzMl90IHBhcnQwID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG51bWJlciAvIGtUZW43
KTsKKyAgICAgICAgCisgICAgICAgIEZpbGxEaWdpdHMzMkZpeGVkTGVuZ3RoKHBhcnQwLCAzLCBi
dWZmZXIsIGxlbmd0aCk7CisgICAgICAgIEZpbGxEaWdpdHMzMkZpeGVkTGVuZ3RoKHBhcnQxLCA3
LCBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgIEZpbGxEaWdpdHMzMkZpeGVkTGVuZ3RoKHBhcnQy
LCA3LCBidWZmZXIsIGxlbmd0aCk7CisgICAgfQorICAgIAorICAgIAorICAgIHN0YXRpYyB2b2lk
IEZpbGxEaWdpdHM2NCh1aW50NjRfdCBudW1iZXIsIFZlY3RvcjxjaGFyPiBidWZmZXIsIGludCog
bGVuZ3RoKSB7CisgICAgICAgIGNvbnN0IHVpbnQzMl90IGtUZW43ID0gMTAwMDAwMDA7CisgICAg
ICAgIC8vIEZvciBlZmZpY2llbmN5IGN1dCB0aGUgbnVtYmVyIGludG8gMyB1aW50MzJfdCBwYXJ0
cywgYW5kIHByaW50IHRob3NlLgorICAgICAgICB1aW50MzJfdCBwYXJ0MiA9IHN0YXRpY19jYXN0
PHVpbnQzMl90PihudW1iZXIgJSBrVGVuNyk7CisgICAgICAgIG51bWJlciAvPSBrVGVuNzsKKyAg
ICAgICAgdWludDMyX3QgcGFydDEgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4obnVtYmVyICUga1Rl
bjcpOworICAgICAgICB1aW50MzJfdCBwYXJ0MCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihudW1i
ZXIgLyBrVGVuNyk7CisgICAgICAgIAorICAgICAgICBpZiAocGFydDAgIT0gMCkgeworICAgICAg
ICAgICAgRmlsbERpZ2l0czMyKHBhcnQwLCBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgICAgICBG
aWxsRGlnaXRzMzJGaXhlZExlbmd0aChwYXJ0MSwgNywgYnVmZmVyLCBsZW5ndGgpOworICAgICAg
ICAgICAgRmlsbERpZ2l0czMyRml4ZWRMZW5ndGgocGFydDIsIDcsIGJ1ZmZlciwgbGVuZ3RoKTsK
KyAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSAhPSAwKSB7CisgICAgICAgICAgICBGaWxsRGlnaXRz
MzIocGFydDEsIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAgICAgIEZpbGxEaWdpdHMzMkZpeGVk
TGVuZ3RoKHBhcnQyLCA3LCBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBGaWxsRGlnaXRzMzIocGFydDIsIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBSb3VuZFVwKFZlY3RvcjxjaGFyPiBi
dWZmZXIsIGludCogbGVuZ3RoLCBpbnQqIGRlY2ltYWxfcG9pbnQpIHsKKyAgICAgICAgLy8gQW4g
ZW1wdHkgYnVmZmVyIHJlcHJlc2VudHMgMC4KKyAgICAgICAgaWYgKCpsZW5ndGggPT0gMCkgewor
ICAgICAgICAgICAgYnVmZmVyWzBdID0gJzEnOworICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQg
PSAxOworICAgICAgICAgICAgKmxlbmd0aCA9IDE7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgLy8gUm91bmQgdGhlIGxhc3QgZGlnaXQgdW50aWwgd2UgZWl0aGVyIGhh
dmUgYSBkaWdpdCB0aGF0IHdhcyBub3QgJzknIG9yIHVudGlsCisgICAgICAgIC8vIHdlIHJlYWNo
ZWQgdGhlIGZpcnN0IGRpZ2l0LgorICAgICAgICBidWZmZXJbKCpsZW5ndGgpIC0gMV0rKzsKKyAg
ICAgICAgZm9yIChpbnQgaSA9ICgqbGVuZ3RoKSAtIDE7IGkgPiAwOyAtLWkpIHsKKyAgICAgICAg
ICAgIGlmIChidWZmZXJbaV0gIT0gJzAnICsgMTApIHsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBidWZmZXJbaV0gPSAnMCc7CisgICAgICAgICAg
ICBidWZmZXJbaSAtIDFdKys7CisgICAgICAgIH0KKyAgICAgICAgLy8gSWYgdGhlIGZpcnN0IGRp
Z2l0IGlzIG5vdyAnMCcgKyAxMCwgd2Ugd291bGQgbmVlZCB0byBzZXQgaXQgdG8gJzAnIGFuZCBh
ZGQKKyAgICAgICAgLy8gYSAnMScgaW4gZnJvbnQuIEhvd2V2ZXIgd2UgcmVhY2ggdGhlIGZpcnN0
IGRpZ2l0IG9ubHkgaWYgYWxsIGZvbGxvd2luZworICAgICAgICAvLyBkaWdpdHMgaGFkIGJlZW4g
JzknIGJlZm9yZSByb3VuZGluZyB1cC4gTm93IGFsbCB0cmFpbGluZyBkaWdpdHMgYXJlICcwJyBh
bmQKKyAgICAgICAgLy8gd2Ugc2ltcGx5IHN3aXRjaCB0aGUgZmlyc3QgZGlnaXQgdG8gJzEnIGFu
ZCB1cGRhdGUgdGhlIGRlY2ltYWwtcG9pbnQKKyAgICAgICAgLy8gKGluZGljYXRpbmcgdGhhdCB0
aGUgcG9pbnQgaXMgbm93IG9uZSBkaWdpdCB0byB0aGUgcmlnaHQpLgorICAgICAgICBpZiAoYnVm
ZmVyWzBdID09ICcwJyArIDEwKSB7CisgICAgICAgICAgICBidWZmZXJbMF0gPSAnMSc7CisgICAg
ICAgICAgICAoKmRlY2ltYWxfcG9pbnQpKys7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
CisgICAgLy8gVGhlIGdpdmVuIGZyYWN0aW9uYWxzIG51bWJlciByZXByZXNlbnRzIGEgZml4ZWQt
cG9pbnQgbnVtYmVyIHdpdGggYmluYXJ5CisgICAgLy8gcG9pbnQgYXQgYml0ICgtZXhwb25lbnQp
LgorICAgIC8vIFByZWNvbmRpdGlvbnM6CisgICAgLy8gICAtMTI4IDw9IGV4cG9uZW50IDw9IDAu
CisgICAgLy8gICAwIDw9IGZyYWN0aW9uYWxzICogMl5leHBvbmVudCA8IDEKKyAgICAvLyAgIFRo
ZSBidWZmZXIgaG9sZHMgdGhlIHJlc3VsdC4KKyAgICAvLyBUaGUgZnVuY3Rpb24gd2lsbCByb3Vu
ZCBpdHMgcmVzdWx0LiBEdXJpbmcgdGhlIHJvdW5kaW5nLXByb2Nlc3MgZGlnaXRzIG5vdAorICAg
IC8vIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIG1pZ2h0IGJlIHVwZGF0ZWQsIGFuZCB0aGUg
ZGVjaW1hbC1wb2ludCB2YXJpYWJsZQorICAgIC8vIG1pZ2h0IGJlIHVwZGF0ZWQuIElmIHRoaXMg
ZnVuY3Rpb24gZ2VuZXJhdGVzIHRoZSBkaWdpdHMgOTkgYW5kIHRoZSBidWZmZXIKKyAgICAvLyBh
bHJlYWR5IGNvbnRhaW5lZCAiMTk5IiAodGh1cyB5aWVsZGluZyBhIGJ1ZmZlciBvZiAiMTk5OTki
KSB0aGVuIGEKKyAgICAvLyByb3VuZGluZy11cCB3aWxsIGNoYW5nZSB0aGUgY29udGVudHMgb2Yg
dGhlIGJ1ZmZlciB0byAiMjAwMDAiLgorICAgIHN0YXRpYyB2b2lkIEZpbGxGcmFjdGlvbmFscyh1
aW50NjRfdCBmcmFjdGlvbmFscywgaW50IGV4cG9uZW50LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgZnJhY3Rpb25hbF9jb3VudCwgVmVjdG9yPGNoYXI+IGJ1ZmZlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBsZW5ndGgsIGludCogZGVjaW1hbF9w
b2ludCkgeworICAgICAgICBBU1NFUlQoLTEyOCA8PSBleHBvbmVudCAmJiBleHBvbmVudCA8PSAw
KTsKKyAgICAgICAgLy8gJ2ZyYWN0aW9uYWxzJyBpcyBhIGZpeGVkLXBvaW50IG51bWJlciwgd2l0
aCBiaW5hcnkgcG9pbnQgYXQgYml0CisgICAgICAgIC8vICgtZXhwb25lbnQpLiBJbnNpZGUgdGhl
IGZ1bmN0aW9uIHRoZSBub24tY29udmVydGVkIHJlbWFpbmRlciBvZiBmcmFjdGlvbmFscworICAg
ICAgICAvLyBpcyBhIGZpeGVkLXBvaW50IG51bWJlciwgd2l0aCBiaW5hcnkgcG9pbnQgYXQgYml0
ICdwb2ludCcuCisgICAgICAgIGlmICgtZXhwb25lbnQgPD0gNjQpIHsKKyAgICAgICAgICAgIC8v
IE9uZSA2NCBiaXQgbnVtYmVyIGlzIHN1ZmZpY2llbnQuCisgICAgICAgICAgICBBU1NFUlQoZnJh
Y3Rpb25hbHMgPj4gNTYgPT0gMCk7CisgICAgICAgICAgICBpbnQgcG9pbnQgPSAtZXhwb25lbnQ7
CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYWN0aW9uYWxfY291bnQ7ICsraSkg
eworICAgICAgICAgICAgICAgIGlmIChmcmFjdGlvbmFscyA9PSAwKSBicmVhazsKKyAgICAgICAg
ICAgICAgICAvLyBJbnN0ZWFkIG9mIG11bHRpcGx5aW5nIGJ5IDEwIHdlIG11bHRpcGx5IGJ5IDUg
YW5kIGFkanVzdCB0aGUgcG9pbnQKKyAgICAgICAgICAgICAgICAvLyBsb2NhdGlvbi4gVGhpcyB3
YXkgdGhlIGZyYWN0aW9uYWxzIHZhcmlhYmxlIHdpbGwgbm90IG92ZXJmbG93LgorICAgICAgICAg
ICAgICAgIC8vIEludmFyaWFudCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wOiBmcmFjdGlv
bmFscyA8IDJecG9pbnQuCisgICAgICAgICAgICAgICAgLy8gSW5pdGlhbGx5IHdlIGhhdmU6IHBv
aW50IDw9IDY0IGFuZCBmcmFjdGlvbmFscyA8IDJeNTYKKyAgICAgICAgICAgICAgICAvLyBBZnRl
ciBlYWNoIGl0ZXJhdGlvbiB0aGUgcG9pbnQgaXMgZGVjcmVtZW50ZWQgYnkgb25lLgorICAgICAg
ICAgICAgICAgIC8vIE5vdGUgdGhhdCA1XjMgPSAxMjUgPCAxMjggPSAyXjcuCisgICAgICAgICAg
ICAgICAgLy8gVGhlcmVmb3JlIHRocmVlIGl0ZXJhdGlvbnMgb2YgdGhpcyBsb29wIHdpbGwgbm90
IG92ZXJmbG93IGZyYWN0aW9uYWxzCisgICAgICAgICAgICAgICAgLy8gKGV2ZW4gd2l0aG91dCB0
aGUgc3VidHJhY3Rpb24gYXQgdGhlIGVuZCBvZiB0aGUgbG9vcCBib2R5KS4gQXQgdGhpcworICAg
ICAgICAgICAgICAgIC8vIHRpbWUgcG9pbnQgd2lsbCBzYXRpc2Z5IHBvaW50IDw9IDYxIGFuZCB0
aGVyZWZvcmUgZnJhY3Rpb25hbHMgPCAyXnBvaW50CisgICAgICAgICAgICAgICAgLy8gYW5kIGFu
eSBmdXJ0aGVyIG11bHRpcGxpY2F0aW9uIG9mIGZyYWN0aW9uYWxzIGJ5IDUgd2lsbCBub3Qgb3Zl
cmZsb3cuCisgICAgICAgICAgICAgICAgZnJhY3Rpb25hbHMgKj0gNTsKKyAgICAgICAgICAgICAg
ICBwb2ludC0tOworICAgICAgICAgICAgICAgIGludCBkaWdpdCA9IHN0YXRpY19jYXN0PGludD4o
ZnJhY3Rpb25hbHMgPj4gcG9pbnQpOworICAgICAgICAgICAgICAgIGJ1ZmZlclsqbGVuZ3RoXSA9
ICcwJyArIGRpZ2l0OworICAgICAgICAgICAgICAgICgqbGVuZ3RoKSsrOworICAgICAgICAgICAg
ICAgIGZyYWN0aW9uYWxzIC09IHN0YXRpY19jYXN0PHVpbnQ2NF90PihkaWdpdCkgPDwgcG9pbnQ7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBJZiB0aGUgZmlyc3QgYml0IGFmdGVyIHRo
ZSBwb2ludCBpcyBzZXQgd2UgaGF2ZSB0byByb3VuZCB1cC4KKyAgICAgICAgICAgIGlmICgoKGZy
YWN0aW9uYWxzID4+IChwb2ludCAtIDEpKSAmIDEpID09IDEpIHsKKyAgICAgICAgICAgICAgICBS
b3VuZFVwKGJ1ZmZlciwgbGVuZ3RoLCBkZWNpbWFsX3BvaW50KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIHsgIC8vIFdlIG5lZWQgMTI4IGJpdHMuCisgICAgICAgICAgICBBU1NFUlQo
NjQgPCAtZXhwb25lbnQgJiYgLWV4cG9uZW50IDw9IDEyOCk7CisgICAgICAgICAgICBVSW50MTI4
IGZyYWN0aW9uYWxzMTI4ID0gVUludDEyOChmcmFjdGlvbmFscywgMCk7CisgICAgICAgICAgICBm
cmFjdGlvbmFsczEyOC5TaGlmdCgtZXhwb25lbnQgLSA2NCk7CisgICAgICAgICAgICBpbnQgcG9p
bnQgPSAxMjg7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYWN0aW9uYWxfY291
bnQ7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChmcmFjdGlvbmFsczEyOC5Jc1plcm8oKSkg
YnJlYWs7CisgICAgICAgICAgICAgICAgLy8gQXMgYmVmb3JlOiBpbnN0ZWFkIG9mIG11bHRpcGx5
aW5nIGJ5IDEwIHdlIG11bHRpcGx5IGJ5IDUgYW5kIGFkanVzdCB0aGUKKyAgICAgICAgICAgICAg
ICAvLyBwb2ludCBsb2NhdGlvbi4KKyAgICAgICAgICAgICAgICAvLyBUaGlzIG11bHRpcGxpY2F0
aW9uIHdpbGwgbm90IG92ZXJmbG93IGZvciB0aGUgc2FtZSByZWFzb25zIGFzIGJlZm9yZS4KKyAg
ICAgICAgICAgICAgICBmcmFjdGlvbmFsczEyOC5NdWx0aXBseSg1KTsKKyAgICAgICAgICAgICAg
ICBwb2ludC0tOworICAgICAgICAgICAgICAgIGludCBkaWdpdCA9IGZyYWN0aW9uYWxzMTI4LkRp
dk1vZFBvd2VyT2YyKHBvaW50KTsKKyAgICAgICAgICAgICAgICBidWZmZXJbKmxlbmd0aF0gPSAn
MCcgKyBkaWdpdDsKKyAgICAgICAgICAgICAgICAoKmxlbmd0aCkrKzsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChmcmFjdGlvbmFsczEyOC5CaXRBdChwb2ludCAtIDEpID09IDEpIHsK
KyAgICAgICAgICAgICAgICBSb3VuZFVwKGJ1ZmZlciwgbGVuZ3RoLCBkZWNpbWFsX3BvaW50KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBSZW1v
dmVzIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHplcm9zLgorICAgIC8vIElmIGxlYWRpbmcgemVyb3Mg
YXJlIHJlbW92ZWQgdGhlbiB0aGUgZGVjaW1hbCBwb2ludCBwb3NpdGlvbiBpcyBhZGp1c3RlZC4K
KyAgICBzdGF0aWMgdm9pZCBUcmltWmVyb3MoVmVjdG9yPGNoYXI+IGJ1ZmZlciwgaW50KiBsZW5n
dGgsIGludCogZGVjaW1hbF9wb2ludCkgeworICAgICAgICB3aGlsZSAoKmxlbmd0aCA+IDAgJiYg
YnVmZmVyWygqbGVuZ3RoKSAtIDFdID09ICcwJykgeworICAgICAgICAgICAgKCpsZW5ndGgpLS07
CisgICAgICAgIH0KKyAgICAgICAgaW50IGZpcnN0X25vbl96ZXJvID0gMDsKKyAgICAgICAgd2hp
bGUgKGZpcnN0X25vbl96ZXJvIDwgKmxlbmd0aCAmJiBidWZmZXJbZmlyc3Rfbm9uX3plcm9dID09
ICcwJykgeworICAgICAgICAgICAgZmlyc3Rfbm9uX3plcm8rKzsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoZmlyc3Rfbm9uX3plcm8gIT0gMCkgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IGZp
cnN0X25vbl96ZXJvOyBpIDwgKmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgYnVmZmVy
W2kgLSBmaXJzdF9ub25femVyb10gPSBidWZmZXJbaV07CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAqbGVuZ3RoIC09IGZpcnN0X25vbl96ZXJvOworICAgICAgICAgICAgKmRlY2ltYWxfcG9p
bnQgLT0gZmlyc3Rfbm9uX3plcm87CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAg
Ym9vbCBGYXN0Rml4ZWREdG9hKGRvdWJsZSB2LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQg
ZnJhY3Rpb25hbF9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1
ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50KiBsZW5ndGgsCisgICAgICAgICAgICAg
ICAgICAgICAgIGludCogZGVjaW1hbF9wb2ludCkgeworICAgICAgICBjb25zdCB1aW50MzJfdCBr
TWF4VUludDMyID0gMHhGRkZGRkZGRjsKKyAgICAgICAgdWludDY0X3Qgc2lnbmlmaWNhbmQgPSBE
b3VibGUodikuU2lnbmlmaWNhbmQoKTsKKyAgICAgICAgaW50IGV4cG9uZW50ID0gRG91YmxlKHYp
LkV4cG9uZW50KCk7CisgICAgICAgIC8vIHYgPSBzaWduaWZpY2FuZCAqIDJeZXhwb25lbnQgKHdp
dGggc2lnbmlmaWNhbmQgYSA1M2JpdCBpbnRlZ2VyKS4KKyAgICAgICAgLy8gSWYgdGhlIGV4cG9u
ZW50IGlzIGxhcmdlciB0aGFuIDIwIChpLmUuIHdlIG1heSBoYXZlIGEgNzNiaXQgbnVtYmVyKSB0
aGVuIHdlCisgICAgICAgIC8vIGRvbid0IGtub3cgaG93IHRvIGNvbXB1dGUgdGhlIHJlcHJlc2Vu
dGF0aW9uLiAyXjczIH49IDkuNSoxMF4yMS4KKyAgICAgICAgLy8gSWYgbmVjZXNzYXJ5IHRoaXMg
bGltaXQgY291bGQgcHJvYmFibHkgYmUgaW5jcmVhc2VkLCBidXQgd2UgZG9uJ3QgbmVlZAorICAg
ICAgICAvLyBtb3JlLgorICAgICAgICBpZiAoZXhwb25lbnQgPiAyMCkgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBpZiAoZnJhY3Rpb25hbF9jb3VudCA+IDIwKSByZXR1cm4gZmFsc2U7CisgICAgICAg
ICpsZW5ndGggPSAwOworICAgICAgICAvLyBBdCBtb3N0IGtEb3VibGVTaWduaWZpY2FuZFNpemUg
Yml0cyBvZiB0aGUgc2lnbmlmaWNhbmQgYXJlIG5vbi16ZXJvLgorICAgICAgICAvLyBHaXZlbiBh
IDY0IGJpdCBpbnRlZ2VyIHdlIGhhdmUgMTEgMHMgZm9sbG93ZWQgYnkgNTMgcG90ZW50aWFsbHkg
bm9uLXplcm8KKyAgICAgICAgLy8gYml0czogIDAuLjExKi4uMHh4eC4uNTMqLi54eAorICAgICAg
ICBpZiAoZXhwb25lbnQgKyBrRG91YmxlU2lnbmlmaWNhbmRTaXplID4gNjQpIHsKKyAgICAgICAg
ICAgIC8vIFRoZSBleHBvbmVudCBtdXN0IGJlID4gMTEuCisgICAgICAgICAgICAvLworICAgICAg
ICAgICAgLy8gV2Uga25vdyB0aGF0IHYgPSBzaWduaWZpY2FuZCAqIDJeZXhwb25lbnQuCisgICAg
ICAgICAgICAvLyBBbmQgdGhlIGV4cG9uZW50ID4gMTEuCisgICAgICAgICAgICAvLyBXZSBzaW1w
bGlmeSB0aGUgdGFzayBieSBkaXZpZGluZyB2IGJ5IDEwXjE3LgorICAgICAgICAgICAgLy8gVGhl
IHF1b3RpZW50IGRlbGl2ZXJzIHRoZSBmaXJzdCBkaWdpdHMsIGFuZCB0aGUgcmVtYWluZGVyIGZp
dHMgaW50byBhIDY0CisgICAgICAgICAgICAvLyBiaXQgbnVtYmVyLgorICAgICAgICAgICAgLy8g
RGl2aWRpbmcgYnkgMTBeMTcgaXMgZXF1aXZhbGVudCB0byBkaXZpZGluZyBieSA1XjE3KjJeMTcu
CisgICAgICAgICAgICBjb25zdCB1aW50NjRfdCBrRml2ZTE3ID0gVUlOVDY0XzJQQVJUX0MoMHhC
MSwgQTJCQzJFQzUpOyAgLy8gNV4xNworICAgICAgICAgICAgdWludDY0X3QgZGl2aXNvciA9IGtG
aXZlMTc7CisgICAgICAgICAgICBpbnQgZGl2aXNvcl9wb3dlciA9IDE3OworICAgICAgICAgICAg
dWludDY0X3QgZGl2aWRlbmQgPSBzaWduaWZpY2FuZDsKKyAgICAgICAgICAgIHVpbnQzMl90IHF1
b3RpZW50OworICAgICAgICAgICAgdWludDY0X3QgcmVtYWluZGVyOworICAgICAgICAgICAgLy8g
TGV0IHYgPSBmICogMl5lIHdpdGggZiA9PSBzaWduaWZpY2FuZCBhbmQgZSA9PSBleHBvbmVudC4K
KyAgICAgICAgICAgIC8vIFRoZW4gbmVlZCBxIChxdW90aWVudCkgYW5kIHIgKHJlbWFpbmRlcikg
YXMgZm9sbG93czoKKyAgICAgICAgICAgIC8vICAgdiAgICAgICAgICAgID0gcSAqIDEwXjE3ICAg
ICAgICsgcgorICAgICAgICAgICAgLy8gICBmICogMl5lICAgICAgPSBxICogMTBeMTcgICAgICAg
KyByCisgICAgICAgICAgICAvLyAgIGYgKiAyXmUgICAgICA9IHEgKiA1XjE3ICogMl4xNyArIHIK
KyAgICAgICAgICAgIC8vIElmIGUgPiAxNyB0aGVuCisgICAgICAgICAgICAvLyAgIGYgKiAyXihl
LTE3KSA9IHEgKiA1XjE3ICAgICAgICArIHIvMl4xNworICAgICAgICAgICAgLy8gZWxzZQorICAg
ICAgICAgICAgLy8gICBmICA9IHEgKiA1XjE3ICogMl4oMTctZSkgKyByLzJeZQorICAgICAgICAg
ICAgaWYgKGV4cG9uZW50ID4gZGl2aXNvcl9wb3dlcikgeworICAgICAgICAgICAgICAgIC8vIFdl
IG9ubHkgYWxsb3cgZXhwb25lbnRzIG9mIHVwIHRvIDIwIGFuZCB0aGVyZWZvcmUgKDE3IC0gZSkg
PD0gMworICAgICAgICAgICAgICAgIGRpdmlkZW5kIDw8PSBleHBvbmVudCAtIGRpdmlzb3JfcG93
ZXI7CisgICAgICAgICAgICAgICAgcXVvdGllbnQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZGl2
aWRlbmQgLyBkaXZpc29yKTsKKyAgICAgICAgICAgICAgICByZW1haW5kZXIgPSAoZGl2aWRlbmQg
JSBkaXZpc29yKSA8PCBkaXZpc29yX3Bvd2VyOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBkaXZpc29yIDw8PSBkaXZpc29yX3Bvd2VyIC0gZXhwb25lbnQ7CisgICAgICAg
ICAgICAgICAgcXVvdGllbnQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZGl2aWRlbmQgLyBkaXZp
c29yKTsKKyAgICAgICAgICAgICAgICByZW1haW5kZXIgPSAoZGl2aWRlbmQgJSBkaXZpc29yKSA8
PCBleHBvbmVudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEZpbGxEaWdpdHMzMihxdW90
aWVudCwgYnVmZmVyLCBsZW5ndGgpOworICAgICAgICAgICAgRmlsbERpZ2l0czY0Rml4ZWRMZW5n
dGgocmVtYWluZGVyLCBkaXZpc29yX3Bvd2VyLCBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgICAg
ICAqZGVjaW1hbF9wb2ludCA9ICpsZW5ndGg7CisgICAgICAgIH0gZWxzZSBpZiAoZXhwb25lbnQg
Pj0gMCkgeworICAgICAgICAgICAgLy8gMCA8PSBleHBvbmVudCA8PSAxMQorICAgICAgICAgICAg
c2lnbmlmaWNhbmQgPDw9IGV4cG9uZW50OworICAgICAgICAgICAgRmlsbERpZ2l0czY0KHNpZ25p
ZmljYW5kLCBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgICAgICAqZGVjaW1hbF9wb2ludCA9ICps
ZW5ndGg7CisgICAgICAgIH0gZWxzZSBpZiAoZXhwb25lbnQgPiAta0RvdWJsZVNpZ25pZmljYW5k
U2l6ZSkgeworICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBjdXQgdGhlIG51bWJlci4KKyAgICAg
ICAgICAgIHVpbnQ2NF90IGludGVncmFscyA9IHNpZ25pZmljYW5kID4+IC1leHBvbmVudDsKKyAg
ICAgICAgICAgIHVpbnQ2NF90IGZyYWN0aW9uYWxzID0gc2lnbmlmaWNhbmQgLSAoaW50ZWdyYWxz
IDw8IC1leHBvbmVudCk7CisgICAgICAgICAgICBpZiAoaW50ZWdyYWxzID4ga01heFVJbnQzMikg
eworICAgICAgICAgICAgICAgIEZpbGxEaWdpdHM2NChpbnRlZ3JhbHMsIGJ1ZmZlciwgbGVuZ3Ro
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgRmlsbERpZ2l0czMyKHN0
YXRpY19jYXN0PHVpbnQzMl90PihpbnRlZ3JhbHMpLCBidWZmZXIsIGxlbmd0aCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAqZGVjaW1hbF9wb2ludCA9ICpsZW5ndGg7CisgICAgICAgICAg
ICBGaWxsRnJhY3Rpb25hbHMoZnJhY3Rpb25hbHMsIGV4cG9uZW50LCBmcmFjdGlvbmFsX2NvdW50
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgbGVuZ3RoLCBkZWNpbWFsX3Bv
aW50KTsKKyAgICAgICAgfSBlbHNlIGlmIChleHBvbmVudCA8IC0xMjgpIHsKKyAgICAgICAgICAg
IC8vIFRoaXMgY29uZmlndXJhdGlvbiAod2l0aCBhdCBtb3N0IDIwIGRpZ2l0cykgbWVhbnMgdGhh
dCBhbGwgZGlnaXRzIG11c3QgYmUKKyAgICAgICAgICAgIC8vIDAuCisgICAgICAgICAgICBBU1NF
UlQoZnJhY3Rpb25hbF9jb3VudCA8PSAyMCk7CisgICAgICAgICAgICBidWZmZXJbMF0gPSAnXDAn
OworICAgICAgICAgICAgKmxlbmd0aCA9IDA7CisgICAgICAgICAgICAqZGVjaW1hbF9wb2ludCA9
IC1mcmFjdGlvbmFsX2NvdW50OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgKmRlY2lt
YWxfcG9pbnQgPSAwOworICAgICAgICAgICAgRmlsbEZyYWN0aW9uYWxzKHNpZ25pZmljYW5kLCBl
eHBvbmVudCwgZnJhY3Rpb25hbF9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
dWZmZXIsIGxlbmd0aCwgZGVjaW1hbF9wb2ludCk7CisgICAgICAgIH0KKyAgICAgICAgVHJpbVpl
cm9zKGJ1ZmZlciwgbGVuZ3RoLCBkZWNpbWFsX3BvaW50KTsKKyAgICAgICAgYnVmZmVyWypsZW5n
dGhdID0gJ1wwJzsKKyAgICAgICAgaWYgKCgqbGVuZ3RoKSA9PSAwKSB7CisgICAgICAgICAgICAv
LyBUaGUgc3RyaW5nIGlzIGVtcHR5IGFuZCB0aGUgZGVjaW1hbF9wb2ludCB0aHVzIGhhcyBubyBp
bXBvcnRhbmNlLiBNaW1pY2sKKyAgICAgICAgICAgIC8vIEdheSdzIGR0b2EgYW5kIGFuZCBzZXQg
aXQgdG8gLWZyYWN0aW9uYWxfY291bnQuCisgICAgICAgICAgICAqZGVjaW1hbF9wb2ludCA9IC1m
cmFjdGlvbmFsX2NvdW50OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICAKK30gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbgorCit9IC8vIG5hbWVzcGFj
ZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9maXhlZC1k
dG9hLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZml4ZWQtZHRvYS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjhjMGFkYjc1OGIzNzc5N2M1MjdiOTFmNTI2MTkyNjQ1OWQ5MzY3YmUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZml4ZWQtZHRvYS5oCkBA
IC0wLDAgKzEsNjAgQEAKKy8vIENvcHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8v
IG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAg
ICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
Ly8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
Ly8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmbmRlZiBET1VC
TEVfQ09OVkVSU0lPTl9GSVhFRF9EVE9BX0hfCisjZGVmaW5lIERPVUJMRV9DT05WRVJTSU9OX0ZJ
WEVEX0RUT0FfSF8KKworI2luY2x1ZGUgInV0aWxzLmgiCisKK25hbWVzcGFjZSBXVEYgeworCitu
YW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIC8vIFByb2R1Y2VzIGRpZ2l0
cyBuZWNlc3NhcnkgdG8gcHJpbnQgYSBnaXZlbiBudW1iZXIgd2l0aAorICAgIC8vICdmcmFjdGlv
bmFsX2NvdW50JyBkaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQuCisgICAgLy8gVGhlIGJ1
ZmZlciBtdXN0IGJlIGJpZyBlbm91Z2ggdG8gaG9sZCB0aGUgcmVzdWx0IHBsdXMgb25lIHRlcm1p
bmF0aW5nIG51bGwKKyAgICAvLyBjaGFyYWN0ZXIuCisgICAgLy8KKyAgICAvLyBUaGUgcHJvZHVj
ZWQgZGlnaXRzIG1pZ2h0IGJlIHRvbyBzaG9ydCBpbiB3aGljaCBjYXNlIHRoZSBjYWxsZXIgaGFz
IHRvIGZpbGwKKyAgICAvLyB0aGUgZ2FwcyB3aXRoICcwJ3MuCisgICAgLy8gRXhhbXBsZTogRmFz
dEZpeGVkRHRvYSgwLjAwMSwgNSwgLi4uKSBpcyBhbGxvd2VkIHRvIHJldHVybiBidWZmZXIgPSAi
MSIsIGFuZAorICAgIC8vIGRlY2ltYWxfcG9pbnQgPSAtMi4KKyAgICAvLyBIYWxmd2F5IGNhc2Vz
IGFyZSByb3VuZGVkIHRvd2FyZHMgKy8tSW5maW5pdHkgKGF3YXkgZnJvbSAwKS4gVGhlIGNhbGwK
KyAgICAvLyBGYXN0Rml4ZWREdG9hKDAuMTUsIDIsIC4uLikgdGh1cyByZXR1cm5zIGJ1ZmZlciA9
ICIyIiwgZGVjaW1hbF9wb2ludCA9IDAuCisgICAgLy8gVGhlIHJldHVybmVkIGJ1ZmZlciBtYXkg
Y29udGFpbiBkaWdpdHMgdGhhdCB3b3VsZCBiZSB0cnVuY2F0ZWQgZnJvbSB0aGUKKyAgICAvLyBz
aG9ydGVzdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW5wdXQuCisgICAgLy8KKyAgICAvLyBUaGlz
IG1ldGhvZCBvbmx5IHdvcmtzIGZvciBzb21lIHBhcmFtZXRlcnMuIElmIGl0IGNhbid0IGhhbmRs
ZSB0aGUgaW5wdXQgaXQKKyAgICAvLyByZXR1cm5zIGZhbHNlLiBUaGUgb3V0cHV0IGlzIG51bGwt
dGVybWluYXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBzdWNjZWVkcy4KKyAgICBib29sIEZhc3RGaXhl
ZER0b2EoZG91YmxlIHYsIGludCBmcmFjdGlvbmFsX2NvdW50LAorICAgICAgICAgICAgICAgICAg
ICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLCBpbnQqIGxlbmd0aCwgaW50KiBkZWNpbWFsX3BvaW50
KTsKKyAgICAKK30gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbgorCit9IC8vIG5hbWVz
cGFjZSBXVEYKKworI2VuZGlmICAvLyBET1VCTEVfQ09OVkVSU0lPTl9GSVhFRF9EVE9BX0hfCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2Evc3RydG9kLmNjIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL3N0cnRvZC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZDQzZDY5
ZmE3MmYyZGQ2ZWM2Y2U3Yjk0NDM1NmExMjlkMjdjNTMwCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL3N0cnRvZC5jYwpAQCAtMCwwICsxLDQ0NSBAQAor
Ly8gQ29weXJpZ2h0IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAg
ZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkCisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKKy8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8g
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVk
ZSA8bGltaXRzLmg+CisKKyNpbmNsdWRlICJzdHJ0b2QuaCIKKyNpbmNsdWRlICJiaWdudW0uaCIK
KyNpbmNsdWRlICJjYWNoZWQtcG93ZXJzLmgiCisjaW5jbHVkZSAiZG91YmxlLmgiCisKK25hbWVz
cGFjZSBXVEYgeworCituYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIC8v
IDJeNTMgPSA5MDA3MTk5MjU0NzQwOTkyLgorICAgIC8vIEFueSBpbnRlZ2VyIHdpdGggYXQgbW9z
dCAxNSBkZWNpbWFsIGRpZ2l0cyB3aWxsIGhlbmNlIGZpdCBpbnRvIGEgZG91YmxlCisgICAgLy8g
KHdoaWNoIGhhcyBhIDUzYml0IHNpZ25pZmljYW5kKSB3aXRob3V0IGxvc3Mgb2YgcHJlY2lzaW9u
LgorICAgIHN0YXRpYyBjb25zdCBpbnQga01heEV4YWN0RG91YmxlSW50ZWdlckRlY2ltYWxEaWdp
dHMgPSAxNTsKKyAgICAvLyAyXjY0ID0gMTg0NDY3NDQwNzM3MDk1NTE2MTYgPiAxMF4xOQorICAg
IHN0YXRpYyBjb25zdCBpbnQga01heFVpbnQ2NERlY2ltYWxEaWdpdHMgPSAxOTsKKyAgICAKKyAg
ICAvLyBNYXggZG91YmxlOiAxLjc5NzY5MzEzNDg2MjMxNTcgeCAxMF4zMDgKKyAgICAvLyBNaW4g
bm9uLXplcm8gZG91YmxlOiA0Ljk0MDY1NjQ1ODQxMjQ2NTQgeCAxMF4tMzI0CisgICAgLy8gQW55
IHggPj0gMTBeMzA5IGlzIGludGVycHJldGVkIGFzICtpbmZpbml0eS4KKyAgICAvLyBBbnkgeCA8
PSAxMF4tMzI0IGlzIGludGVycHJldGVkIGFzIDAuCisgICAgLy8gTm90ZSB0aGF0IDIuNWUtMzI0
IChkZXNwaXRlIGJlaW5nIHNtYWxsZXIgdGhhbiB0aGUgbWluIGRvdWJsZSkgd2lsbCBiZSByZWFk
CisgICAgLy8gYXMgbm9uLXplcm8gKGVxdWFsIHRvIHRoZSBtaW4gbm9uLXplcm8gZG91YmxlKS4K
KyAgICBzdGF0aWMgY29uc3QgaW50IGtNYXhEZWNpbWFsUG93ZXIgPSAzMDk7CisgICAgc3RhdGlj
IGNvbnN0IGludCBrTWluRGVjaW1hbFBvd2VyID0gLTMyNDsKKyAgICAKKyAgICAvLyAyXjY0ID0g
MTg0NDY3NDQwNzM3MDk1NTE2MTYKKyAgICBzdGF0aWMgY29uc3QgdWludDY0X3Qga01heFVpbnQ2
NCA9IFVJTlQ2NF8yUEFSVF9DKDB4RkZGRkZGRkYsIEZGRkZGRkZGKTsKKyAgICAKKyAgICAKKyAg
ICBzdGF0aWMgY29uc3QgZG91YmxlIGV4YWN0X3Bvd2Vyc19vZl90ZW5bXSA9IHsKKyAgICAgICAg
MS4wLCAgLy8gMTBeMAorICAgICAgICAxMC4wLAorICAgICAgICAxMDAuMCwKKyAgICAgICAgMTAw
MC4wLAorICAgICAgICAxMDAwMC4wLAorICAgICAgICAxMDAwMDAuMCwKKyAgICAgICAgMTAwMDAw
MC4wLAorICAgICAgICAxMDAwMDAwMC4wLAorICAgICAgICAxMDAwMDAwMDAuMCwKKyAgICAgICAg
MTAwMDAwMDAwMC4wLAorICAgICAgICAxMDAwMDAwMDAwMC4wLCAgLy8gMTBeMTAKKyAgICAgICAg
MTAwMDAwMDAwMDAwLjAsCisgICAgICAgIDEwMDAwMDAwMDAwMDAuMCwKKyAgICAgICAgMTAwMDAw
MDAwMDAwMDAuMCwKKyAgICAgICAgMTAwMDAwMDAwMDAwMDAwLjAsCisgICAgICAgIDEwMDAwMDAw
MDAwMDAwMDAuMCwKKyAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAuMCwKKyAgICAgICAgMTAwMDAw
MDAwMDAwMDAwMDAwLjAsCisgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAuMCwKKyAgICAgICAg
MTAwMDAwMDAwMDAwMDAwMDAwMDAuMCwKKyAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwLjAs
ICAvLyAxMF4yMAorICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwLjAsCisgICAgICAgIC8v
IDEwXjIyID0gMHgyMWUxOWUwYzliYWIyNDAwMDAwID0gMHg4Nzg2NzgzMjZlYWM5ICogMl4yMgor
ICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4wCisgICAgfTsKKyAgICBzdGF0aWMgY29u
c3QgaW50IGtFeGFjdFBvd2Vyc09mVGVuU2l6ZSA9IEFSUkFZX1NJWkUoZXhhY3RfcG93ZXJzX29m
X3Rlbik7CisgICAgCisgICAgLy8gTWF4aW11bSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRz
IGluIHRoZSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uLgorICAgIC8vIEluIGZhY3QgdGhlIHZhbHVl
IGlzIDc3MiAoc2VlIGNvbnZlcnNpb25zLmNjKSwgYnV0IHRvIGdpdmUgdXMgc29tZSBtYXJnaW4K
KyAgICAvLyB3ZSByb3VuZCB1cCB0byA3ODAuCisgICAgc3RhdGljIGNvbnN0IGludCBrTWF4U2ln
bmlmaWNhbnREZWNpbWFsRGlnaXRzID0gNzgwOworICAgIAorICAgIHN0YXRpYyBWZWN0b3I8Y29u
c3QgY2hhcj4gVHJpbUxlYWRpbmdaZXJvcyhWZWN0b3I8Y29uc3QgY2hhcj4gYnVmZmVyKSB7Cisg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYnVmZmVyLmxlbmd0aCgpOyBpKyspIHsKKyAgICAg
ICAgICAgIGlmIChidWZmZXJbaV0gIT0gJzAnKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1
ZmZlci5TdWJWZWN0b3IoaSwgYnVmZmVyLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gVmVjdG9yPGNvbnN0IGNoYXI+KGJ1ZmZlci5zdGFydCgpLCAw
KTsKKyAgICB9CisgICAgCisgICAgCisgICAgc3RhdGljIFZlY3Rvcjxjb25zdCBjaGFyPiBUcmlt
VHJhaWxpbmdaZXJvcyhWZWN0b3I8Y29uc3QgY2hhcj4gYnVmZmVyKSB7CisgICAgICAgIGZvciAo
aW50IGkgPSBidWZmZXIubGVuZ3RoKCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICAgICAg
aWYgKGJ1ZmZlcltpXSAhPSAnMCcpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyLlN1
YlZlY3RvcigwLCBpICsgMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIFZlY3Rvcjxjb25zdCBjaGFyPihidWZmZXIuc3RhcnQoKSwgMCk7CisgICAgfQorICAgIAor
ICAgIAorICAgIHN0YXRpYyB2b2lkIFRyaW1Ub01heFNpZ25pZmljYW50RGlnaXRzKFZlY3Rvcjxj
b25zdCBjaGFyPiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGV4cG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYXIqIHNpZ25pZmljYW50X2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQqIHNpZ25pZmljYW50X2V4cG9uZW50KSB7CisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwga01heFNpZ25pZmljYW50RGVjaW1hbERpZ2l0cyAtIDE7ICsr
aSkgeworICAgICAgICAgICAgc2lnbmlmaWNhbnRfYnVmZmVyW2ldID0gYnVmZmVyW2ldOworICAg
ICAgICB9CisgICAgICAgIC8vIFRoZSBpbnB1dCBidWZmZXIgaGFzIGJlZW4gdHJpbW1lZC4gVGhl
cmVmb3JlIHRoZSBsYXN0IGRpZ2l0IG11c3QgYmUKKyAgICAgICAgLy8gZGlmZmVyZW50IGZyb20g
JzAnLgorICAgICAgICBBU1NFUlQoYnVmZmVyW2J1ZmZlci5sZW5ndGgoKSAtIDFdICE9ICcwJyk7
CisgICAgICAgIC8vIFNldCB0aGUgbGFzdCBkaWdpdCB0byBiZSBub24temVyby4gVGhpcyBpcyBz
dWZmaWNpZW50IHRvIGd1YXJhbnRlZQorICAgICAgICAvLyBjb3JyZWN0IHJvdW5kaW5nLgorICAg
ICAgICBzaWduaWZpY2FudF9idWZmZXJba01heFNpZ25pZmljYW50RGVjaW1hbERpZ2l0cyAtIDFd
ID0gJzEnOworICAgICAgICAqc2lnbmlmaWNhbnRfZXhwb25lbnQgPQorICAgICAgICBleHBvbmVu
dCArIChidWZmZXIubGVuZ3RoKCkgLSBrTWF4U2lnbmlmaWNhbnREZWNpbWFsRGlnaXRzKTsKKyAg
ICB9CisgICAgCisgICAgLy8gUmVhZHMgZGlnaXRzIGZyb20gdGhlIGJ1ZmZlciBhbmQgY29udmVy
dHMgdGhlbSB0byBhIHVpbnQ2NC4KKyAgICAvLyBSZWFkcyBpbiBhcyBtYW55IGRpZ2l0cyBhcyBm
aXQgaW50byBhIHVpbnQ2NC4KKyAgICAvLyBXaGVuIHRoZSBzdHJpbmcgc3RhcnRzIHdpdGggIjE4
NDQ2NzQ0MDczNzA5NTUxNjEiIG5vIGZ1cnRoZXIgZGlnaXQgaXMgcmVhZC4KKyAgICAvLyBTaW5j
ZSAyXjY0ID0gMTg0NDY3NDQwNzM3MDk1NTE2MTYgaXQgd291bGQgc3RpbGwgYmUgcG9zc2libGUg
cmVhZCBhbm90aGVyCisgICAgLy8gZGlnaXQgaWYgaXQgd2FzIGxlc3Mgb3IgZXF1YWwgdGhhbiA2
LCBidXQgdGhpcyB3b3VsZCBjb21wbGljYXRlIHRoZSBjb2RlLgorICAgIHN0YXRpYyB1aW50NjRf
dCBSZWFkVWludDY0KFZlY3Rvcjxjb25zdCBjaGFyPiBidWZmZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50KiBudW1iZXJfb2ZfcmVhZF9kaWdpdHMpIHsKKyAgICAgICAgdWlu
dDY0X3QgcmVzdWx0ID0gMDsKKyAgICAgICAgaW50IGkgPSAwOworICAgICAgICB3aGlsZSAoaSA8
IGJ1ZmZlci5sZW5ndGgoKSAmJiByZXN1bHQgPD0gKGtNYXhVaW50NjQgLyAxMCAtIDEpKSB7Cisg
ICAgICAgICAgICBpbnQgZGlnaXQgPSBidWZmZXJbaSsrXSAtICcwJzsKKyAgICAgICAgICAgIEFT
U0VSVCgwIDw9IGRpZ2l0ICYmIGRpZ2l0IDw9IDkpOworICAgICAgICAgICAgcmVzdWx0ID0gMTAg
KiByZXN1bHQgKyBkaWdpdDsKKyAgICAgICAgfQorICAgICAgICAqbnVtYmVyX29mX3JlYWRfZGln
aXRzID0gaTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgCisgICAg
Ly8gUmVhZHMgYSBEaXlGcCBmcm9tIHRoZSBidWZmZXIuCisgICAgLy8gVGhlIHJldHVybmVkIERp
eUZwIGlzIG5vdCBuZWNlc3NhcmlseSBub3JtYWxpemVkLgorICAgIC8vIElmIHJlbWFpbmluZ19k
ZWNpbWFscyBpcyB6ZXJvIHRoZW4gdGhlIHJldHVybmVkIERpeUZwIGlzIGFjY3VyYXRlLgorICAg
IC8vIE90aGVyd2lzZSBpdCBoYXMgYmVlbiByb3VuZGVkIGFuZCBoYXMgZXJyb3Igb2YgYXQgbW9z
dCAxLzIgdWxwLgorICAgIHN0YXRpYyB2b2lkIFJlYWREaXlGcChWZWN0b3I8Y29uc3QgY2hhcj4g
YnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBEaXlGcCogcmVzdWx0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQqIHJlbWFpbmluZ19kZWNpbWFscykgeworICAgICAgICBp
bnQgcmVhZF9kaWdpdHM7CisgICAgICAgIHVpbnQ2NF90IHNpZ25pZmljYW5kID0gUmVhZFVpbnQ2
NChidWZmZXIsICZyZWFkX2RpZ2l0cyk7CisgICAgICAgIGlmIChidWZmZXIubGVuZ3RoKCkgPT0g
cmVhZF9kaWdpdHMpIHsKKyAgICAgICAgICAgICpyZXN1bHQgPSBEaXlGcChzaWduaWZpY2FuZCwg
MCk7CisgICAgICAgICAgICAqcmVtYWluaW5nX2RlY2ltYWxzID0gMDsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIC8vIFJvdW5kIHRoZSBzaWduaWZpY2FuZC4KKyAgICAgICAgICAgIGlm
IChidWZmZXJbcmVhZF9kaWdpdHNdID49ICc1JykgeworICAgICAgICAgICAgICAgIHNpZ25pZmlj
YW5kKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBDb21wdXRlIHRoZSBiaW5hcnkg
ZXhwb25lbnQuCisgICAgICAgICAgICBpbnQgZXhwb25lbnQgPSAwOworICAgICAgICAgICAgKnJl
c3VsdCA9IERpeUZwKHNpZ25pZmljYW5kLCBleHBvbmVudCk7CisgICAgICAgICAgICAqcmVtYWlu
aW5nX2RlY2ltYWxzID0gYnVmZmVyLmxlbmd0aCgpIC0gcmVhZF9kaWdpdHM7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgCisgICAgc3RhdGljIGJvb2wgRG91YmxlU3RydG9kKFZlY3Rvcjxj
b25zdCBjaGFyPiB0cmltbWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZXhw
b25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSogcmVzdWx0KSB7Cisj
aWYgIWRlZmluZWQoRE9VQkxFX0NPTlZFUlNJT05fQ09SUkVDVF9ET1VCTEVfT1BFUkFUSU9OUykK
KyAgICAgICAgLy8gT24geDg2IHRoZSBmbG9hdGluZy1wb2ludCBzdGFjayBjYW4gYmUgNjQgb3Ig
ODAgYml0cyB3aWRlLiBJZiBpdCBpcworICAgICAgICAvLyA4MCBiaXRzIHdpZGUgKGFzIGlzIHRo
ZSBjYXNlIG9uIExpbnV4KSB0aGVuIGRvdWJsZS1yb3VuZGluZyBvY2N1cnMgYW5kIHRoZQorICAg
ICAgICAvLyByZXN1bHQgaXMgbm90IGFjY3VyYXRlLgorICAgICAgICAvLyBXZSBrbm93IHRoYXQg
V2luZG93czMyIHVzZXMgNjQgYml0cyBhbmQgaXMgdGhlcmVmb3JlIGFjY3VyYXRlLgorICAgICAg
ICAvLyBOb3RlIHRoYXQgdGhlIEFSTSBzaW11bGF0b3IgaXMgY29tcGlsZWQgZm9yIDMyYml0cy4g
SXQgdGhlcmVmb3JlIGV4aGliaXRzCisgICAgICAgIC8vIHRoZSBzYW1lIHByb2JsZW0uCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorICAgICAgICBpZiAodHJpbW1lZC5sZW5ndGgoKSA8
PSBrTWF4RXhhY3REb3VibGVJbnRlZ2VyRGVjaW1hbERpZ2l0cykgeworICAgICAgICAgICAgaW50
IHJlYWRfZGlnaXRzOworICAgICAgICAgICAgLy8gVGhlIHRyaW1tZWQgaW5wdXQgZml0cyBpbnRv
IGEgZG91YmxlLgorICAgICAgICAgICAgLy8gSWYgdGhlIDEwXmV4cG9uZW50IChyZXNwLiAxMF4t
ZXhwb25lbnQpIGZpdHMgaW50byBhIGRvdWJsZSB0b28gdGhlbiB3ZQorICAgICAgICAgICAgLy8g
Y2FuIGNvbXB1dGUgdGhlIHJlc3VsdC1kb3VibGUgc2ltcGx5IGJ5IG11bHRpcGx5aW5nIChyZXNw
LiBkaXZpZGluZykgdGhlCisgICAgICAgICAgICAvLyB0d28gbnVtYmVycy4KKyAgICAgICAgICAg
IC8vIFRoaXMgaXMgcG9zc2libGUgYmVjYXVzZSBJRUVFIGd1YXJhbnRlZXMgdGhhdCBmbG9hdGlu
Zy1wb2ludCBvcGVyYXRpb25zCisgICAgICAgICAgICAvLyByZXR1cm4gdGhlIGJlc3QgcG9zc2li
bGUgYXBwcm94aW1hdGlvbi4KKyAgICAgICAgICAgIGlmIChleHBvbmVudCA8IDAgJiYgLWV4cG9u
ZW50IDwga0V4YWN0UG93ZXJzT2ZUZW5TaXplKSB7CisgICAgICAgICAgICAgICAgLy8gMTBeLWV4
cG9uZW50IGZpdHMgaW50byBhIGRvdWJsZS4KKyAgICAgICAgICAgICAgICAqcmVzdWx0ID0gc3Rh
dGljX2Nhc3Q8ZG91YmxlPihSZWFkVWludDY0KHRyaW1tZWQsICZyZWFkX2RpZ2l0cykpOworICAg
ICAgICAgICAgICAgIEFTU0VSVChyZWFkX2RpZ2l0cyA9PSB0cmltbWVkLmxlbmd0aCgpKTsKKyAg
ICAgICAgICAgICAgICAqcmVzdWx0IC89IGV4YWN0X3Bvd2Vyc19vZl90ZW5bLWV4cG9uZW50XTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmICgwIDw9IGV4cG9uZW50ICYmIGV4cG9uZW50IDwga0V4YWN0UG93ZXJzT2ZUZW5TaXplKSB7
CisgICAgICAgICAgICAgICAgLy8gMTBeZXhwb25lbnQgZml0cyBpbnRvIGEgZG91YmxlLgorICAg
ICAgICAgICAgICAgICpyZXN1bHQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KFJlYWRVaW50NjQodHJp
bW1lZCwgJnJlYWRfZGlnaXRzKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHJlYWRfZGlnaXRz
ID09IHRyaW1tZWQubGVuZ3RoKCkpOworICAgICAgICAgICAgICAgICpyZXN1bHQgKj0gZXhhY3Rf
cG93ZXJzX29mX3RlbltleHBvbmVudF07CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgcmVtYWluaW5nX2RpZ2l0cyA9CisgICAgICAg
ICAgICBrTWF4RXhhY3REb3VibGVJbnRlZ2VyRGVjaW1hbERpZ2l0cyAtIHRyaW1tZWQubGVuZ3Ro
KCk7CisgICAgICAgICAgICBpZiAoKDAgPD0gZXhwb25lbnQpICYmCisgICAgICAgICAgICAgICAg
KGV4cG9uZW50IC0gcmVtYWluaW5nX2RpZ2l0cyA8IGtFeGFjdFBvd2Vyc09mVGVuU2l6ZSkpIHsK
KyAgICAgICAgICAgICAgICAvLyBUaGUgdHJpbW1lZCBzdHJpbmcgd2FzIHNob3J0IGFuZCB3ZSBj
YW4gbXVsdGlwbHkgaXQgd2l0aAorICAgICAgICAgICAgICAgIC8vIDEwXnJlbWFpbmluZ19kaWdp
dHMuIEFzIGEgcmVzdWx0IHRoZSByZW1haW5pbmcgZXhwb25lbnQgbm93IGZpdHMKKyAgICAgICAg
ICAgICAgICAvLyBpbnRvIGEgZG91YmxlIHRvby4KKyAgICAgICAgICAgICAgICAqcmVzdWx0ID0g
c3RhdGljX2Nhc3Q8ZG91YmxlPihSZWFkVWludDY0KHRyaW1tZWQsICZyZWFkX2RpZ2l0cykpOwor
ICAgICAgICAgICAgICAgIEFTU0VSVChyZWFkX2RpZ2l0cyA9PSB0cmltbWVkLmxlbmd0aCgpKTsK
KyAgICAgICAgICAgICAgICAqcmVzdWx0ICo9IGV4YWN0X3Bvd2Vyc19vZl90ZW5bcmVtYWluaW5n
X2RpZ2l0c107CisgICAgICAgICAgICAgICAgKnJlc3VsdCAqPSBleGFjdF9wb3dlcnNfb2ZfdGVu
W2V4cG9uZW50IC0gcmVtYWluaW5nX2RpZ2l0c107CisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICAKKyAgICAKKyAgICAvLyBSZXR1cm5zIDEwXmV4cG9uZW50IGFzIGFuIGV4YWN0IERp
eUZwLgorICAgIC8vIFRoZSBnaXZlbiBleHBvbmVudCBtdXN0IGJlIGluIHRoZSByYW5nZSBbMTsg
a0RlY2ltYWxFeHBvbmVudERpc3RhbmNlWy4KKyAgICBzdGF0aWMgRGl5RnAgQWRqdXN0bWVudFBv
d2VyT2ZUZW4oaW50IGV4cG9uZW50KSB7CisgICAgICAgIEFTU0VSVCgwIDwgZXhwb25lbnQpOwor
ICAgICAgICBBU1NFUlQoZXhwb25lbnQgPCBQb3dlcnNPZlRlbkNhY2hlOjprRGVjaW1hbEV4cG9u
ZW50RGlzdGFuY2UpOworICAgICAgICAvLyBTaW1wbHkgaGFyZGNvZGUgdGhlIHJlbWFpbmluZyBw
b3dlcnMgZm9yIHRoZSBnaXZlbiBkZWNpbWFsIGV4cG9uZW50CisgICAgICAgIC8vIGRpc3RhbmNl
LgorICAgICAgICBBU1NFUlQoUG93ZXJzT2ZUZW5DYWNoZTo6a0RlY2ltYWxFeHBvbmVudERpc3Rh
bmNlID09IDgpOworICAgICAgICBzd2l0Y2ggKGV4cG9uZW50KSB7CisgICAgICAgICAgICBjYXNl
IDE6IHJldHVybiBEaXlGcChVSU5UNjRfMlBBUlRfQygweGEwMDAwMDAwLCAwMDAwMDAwMCksIC02
MCk7CisgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBEaXlGcChVSU5UNjRfMlBBUlRfQygweGM4
MDAwMDAwLCAwMDAwMDAwMCksIC01Nyk7CisgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBEaXlG
cChVSU5UNjRfMlBBUlRfQygweGZhMDAwMDAwLCAwMDAwMDAwMCksIC01NCk7CisgICAgICAgICAg
ICBjYXNlIDQ6IHJldHVybiBEaXlGcChVSU5UNjRfMlBBUlRfQygweDljNDAwMDAwLCAwMDAwMDAw
MCksIC01MCk7CisgICAgICAgICAgICBjYXNlIDU6IHJldHVybiBEaXlGcChVSU5UNjRfMlBBUlRf
QygweGMzNTAwMDAwLCAwMDAwMDAwMCksIC00Nyk7CisgICAgICAgICAgICBjYXNlIDY6IHJldHVy
biBEaXlGcChVSU5UNjRfMlBBUlRfQygweGY0MjQwMDAwLCAwMDAwMDAwMCksIC00NCk7CisgICAg
ICAgICAgICBjYXNlIDc6IHJldHVybiBEaXlGcChVSU5UNjRfMlBBUlRfQygweDk4OTY4MDAwLCAw
MDAwMDAwMCksIC00MCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIERpeUZwKDAsIDApOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIAorICAgIC8vIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRy
dWUgdGhlbiB0aGUgcmVzdWx0IGlzIHRoZSBjb3JyZWN0IGRvdWJsZS4KKyAgICAvLyBPdGhlcndp
c2UgaXQgaXMgZWl0aGVyIHRoZSBjb3JyZWN0IGRvdWJsZSBvciB0aGUgZG91YmxlIHRoYXQgaXMg
anVzdCBiZWxvdworICAgIC8vIHRoZSBjb3JyZWN0IGRvdWJsZS4KKyAgICBzdGF0aWMgYm9vbCBE
aXlGcFN0cnRvZChWZWN0b3I8Y29uc3QgY2hhcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBleHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3Vi
bGUqIHJlc3VsdCkgeworICAgICAgICBEaXlGcCBpbnB1dDsKKyAgICAgICAgaW50IHJlbWFpbmlu
Z19kZWNpbWFsczsKKyAgICAgICAgUmVhZERpeUZwKGJ1ZmZlciwgJmlucHV0LCAmcmVtYWluaW5n
X2RlY2ltYWxzKTsKKyAgICAgICAgLy8gU2luY2Ugd2UgbWF5IGhhdmUgZHJvcHBlZCBzb21lIGRp
Z2l0cyB0aGUgaW5wdXQgaXMgbm90IGFjY3VyYXRlLgorICAgICAgICAvLyBJZiByZW1haW5pbmdf
ZGVjaW1hbHMgaXMgZGlmZmVyZW50IHRoYW4gMCB0aGFuIHRoZSBlcnJvciBpcyBhdCBtb3N0Cisg
ICAgICAgIC8vIC41IHVscCAodW5pdCBpbiB0aGUgbGFzdCBwbGFjZSkuCisgICAgICAgIC8vIFdl
IGRvbid0IHdhbnQgdG8gZGVhbCB3aXRoIGZyYWN0aW9ucyBhbmQgdGhlcmVmb3JlIGtlZXAgYSBj
b21tb24KKyAgICAgICAgLy8gZGVub21pbmF0b3IuCisgICAgICAgIGNvbnN0IGludCBrRGVub21p
bmF0b3JMb2cgPSAzOworICAgICAgICBjb25zdCBpbnQga0Rlbm9taW5hdG9yID0gMSA8PCBrRGVu
b21pbmF0b3JMb2c7CisgICAgICAgIC8vIE1vdmUgdGhlIHJlbWFpbmluZyBkZWNpbWFscyBpbnRv
IHRoZSBleHBvbmVudC4KKyAgICAgICAgZXhwb25lbnQgKz0gcmVtYWluaW5nX2RlY2ltYWxzOwor
ICAgICAgICBpbnQgZXJyb3IgPSAocmVtYWluaW5nX2RlY2ltYWxzID09IDAgPyAwIDoga0Rlbm9t
aW5hdG9yIC8gMik7CisgICAgICAgIAorICAgICAgICBpbnQgb2xkX2UgPSBpbnB1dC5lKCk7Cisg
ICAgICAgIGlucHV0Lk5vcm1hbGl6ZSgpOworICAgICAgICBlcnJvciA8PD0gb2xkX2UgLSBpbnB1
dC5lKCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoZXhwb25lbnQgPD0gUG93ZXJzT2ZUZW5D
YWNoZTo6a01heERlY2ltYWxFeHBvbmVudCk7CisgICAgICAgIGlmIChleHBvbmVudCA8IFBvd2Vy
c09mVGVuQ2FjaGU6OmtNaW5EZWNpbWFsRXhwb25lbnQpIHsKKyAgICAgICAgICAgICpyZXN1bHQg
PSAwLjA7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBEaXlG
cCBjYWNoZWRfcG93ZXI7CisgICAgICAgIGludCBjYWNoZWRfZGVjaW1hbF9leHBvbmVudDsKKyAg
ICAgICAgUG93ZXJzT2ZUZW5DYWNoZTo6R2V0Q2FjaGVkUG93ZXJGb3JEZWNpbWFsRXhwb25lbnQo
ZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZjYWNoZWRfcG93ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjYWNoZWRfZGVjaW1hbF9leHBvbmVudCk7
CisgICAgICAgIAorICAgICAgICBpZiAoY2FjaGVkX2RlY2ltYWxfZXhwb25lbnQgIT0gZXhwb25l
bnQpIHsKKyAgICAgICAgICAgIGludCBhZGp1c3RtZW50X2V4cG9uZW50ID0gZXhwb25lbnQgLSBj
YWNoZWRfZGVjaW1hbF9leHBvbmVudDsKKyAgICAgICAgICAgIERpeUZwIGFkanVzdG1lbnRfcG93
ZXIgPSBBZGp1c3RtZW50UG93ZXJPZlRlbihhZGp1c3RtZW50X2V4cG9uZW50KTsKKyAgICAgICAg
ICAgIGlucHV0Lk11bHRpcGx5KGFkanVzdG1lbnRfcG93ZXIpOworICAgICAgICAgICAgaWYgKGtN
YXhVaW50NjREZWNpbWFsRGlnaXRzIC0gYnVmZmVyLmxlbmd0aCgpID49IGFkanVzdG1lbnRfZXhw
b25lbnQpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgcHJvZHVjdCBvZiBpbnB1dCB3aXRoIHRo
ZSBhZGp1c3RtZW50IHBvd2VyIGZpdHMgaW50byBhIDY0IGJpdAorICAgICAgICAgICAgICAgIC8v
IGludGVnZXIuCisgICAgICAgICAgICAgICAgQVNTRVJUKERpeUZwOjprU2lnbmlmaWNhbmRTaXpl
ID09IDY0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIGFk
anVzdG1lbnQgcG93ZXIgaXMgZXhhY3QuIFRoZXJlIGlzIGhlbmNlIG9ubHkgYW4gZXJyb3Igb2Yg
MC41LgorICAgICAgICAgICAgICAgIGVycm9yICs9IGtEZW5vbWluYXRvciAvIDI7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlucHV0Lk11bHRpcGx5KGNhY2hl
ZF9wb3dlcik7CisgICAgICAgIC8vIFRoZSBlcnJvciBpbnRyb2R1Y2VkIGJ5IGEgbXVsdGlwbGlj
YXRpb24gb2YgYSpiIGVxdWFscworICAgICAgICAvLyAgIGVycm9yX2EgKyBlcnJvcl9iICsgZXJy
b3JfYSplcnJvcl9iLzJeNjQgKyAwLjUKKyAgICAgICAgLy8gU3Vic3RpdHV0aW5nIGEgd2l0aCAn
aW5wdXQnIGFuZCBiIHdpdGggJ2NhY2hlZF9wb3dlcicgd2UgaGF2ZQorICAgICAgICAvLyAgIGVy
cm9yX2IgPSAwLjUgIChhbGwgY2FjaGVkIHBvd2VycyBoYXZlIGFuIGVycm9yIG9mIGxlc3MgdGhh
biAwLjUgdWxwKSwKKyAgICAgICAgLy8gICBlcnJvcl9hYiA9IDAgb3IgMSAvIGtEZW5vbWluYXRv
ciA+IGVycm9yX2EqZXJyb3JfYi8gMl42NAorICAgICAgICBpbnQgZXJyb3JfYiA9IGtEZW5vbWlu
YXRvciAvIDI7CisgICAgICAgIGludCBlcnJvcl9hYiA9IChlcnJvciA9PSAwID8gMCA6IDEpOyAg
Ly8gV2Ugcm91bmQgdXAgdG8gMS4KKyAgICAgICAgaW50IGZpeGVkX2Vycm9yID0ga0Rlbm9taW5h
dG9yIC8gMjsKKyAgICAgICAgZXJyb3IgKz0gZXJyb3JfYiArIGVycm9yX2FiICsgZml4ZWRfZXJy
b3I7CisgICAgICAgIAorICAgICAgICBvbGRfZSA9IGlucHV0LmUoKTsKKyAgICAgICAgaW5wdXQu
Tm9ybWFsaXplKCk7CisgICAgICAgIGVycm9yIDw8PSBvbGRfZSAtIGlucHV0LmUoKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIFNlZSBpZiB0aGUgZG91YmxlJ3Mgc2lnbmlmaWNhbmQgY2hhbmdlcyBp
ZiB3ZSBhZGQvc3VidHJhY3QgdGhlIGVycm9yLgorICAgICAgICBpbnQgb3JkZXJfb2ZfbWFnbml0
dWRlID0gRGl5RnA6OmtTaWduaWZpY2FuZFNpemUgKyBpbnB1dC5lKCk7CisgICAgICAgIGludCBl
ZmZlY3RpdmVfc2lnbmlmaWNhbmRfc2l6ZSA9CisgICAgICAgIERvdWJsZTo6U2lnbmlmaWNhbmRT
aXplRm9yT3JkZXJPZk1hZ25pdHVkZShvcmRlcl9vZl9tYWduaXR1ZGUpOworICAgICAgICBpbnQg
cHJlY2lzaW9uX2RpZ2l0c19jb3VudCA9CisgICAgICAgIERpeUZwOjprU2lnbmlmaWNhbmRTaXpl
IC0gZWZmZWN0aXZlX3NpZ25pZmljYW5kX3NpemU7CisgICAgICAgIGlmIChwcmVjaXNpb25fZGln
aXRzX2NvdW50ICsga0Rlbm9taW5hdG9yTG9nID49IERpeUZwOjprU2lnbmlmaWNhbmRTaXplKSB7
CisgICAgICAgICAgICAvLyBUaGlzIGNhbiBvbmx5IGhhcHBlbiBmb3IgdmVyeSBzbWFsbCBkZW5v
cm1hbHMuIEluIHRoaXMgY2FzZSB0aGUKKyAgICAgICAgICAgIC8vIGhhbGYtd2F5IG11bHRpcGxp
ZWQgYnkgdGhlIGRlbm9taW5hdG9yIGV4Y2VlZHMgdGhlIHJhbmdlIG9mIGFuIHVpbnQ2NC4KKyAg
ICAgICAgICAgIC8vIFNpbXBseSBzaGlmdCBldmVyeXRoaW5nIHRvIHRoZSByaWdodC4KKyAgICAg
ICAgICAgIGludCBzaGlmdF9hbW91bnQgPSAocHJlY2lzaW9uX2RpZ2l0c19jb3VudCArIGtEZW5v
bWluYXRvckxvZykgLQorICAgICAgICAgICAgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUgKyAxOwor
ICAgICAgICAgICAgaW5wdXQuc2V0X2YoaW5wdXQuZigpID4+IHNoaWZ0X2Ftb3VudCk7CisgICAg
ICAgICAgICBpbnB1dC5zZXRfZShpbnB1dC5lKCkgKyBzaGlmdF9hbW91bnQpOworICAgICAgICAg
ICAgLy8gV2UgYWRkIDEgZm9yIHRoZSBsb3N0IHByZWNpc2lvbiBvZiBlcnJvciwgYW5kIGtEZW5v
bWluYXRvciBmb3IKKyAgICAgICAgICAgIC8vIHRoZSBsb3N0IHByZWNpc2lvbiBvZiBpbnB1dC5m
KCkuCisgICAgICAgICAgICBlcnJvciA9IChlcnJvciA+PiBzaGlmdF9hbW91bnQpICsgMSArIGtE
ZW5vbWluYXRvcjsKKyAgICAgICAgICAgIHByZWNpc2lvbl9kaWdpdHNfY291bnQgLT0gc2hpZnRf
YW1vdW50OworICAgICAgICB9CisgICAgICAgIC8vIFdlIHVzZSB1aW50NjRfdHMgbm93LiBUaGlz
IG9ubHkgd29ya3MgaWYgdGhlIERpeUZwIHVzZXMgdWludDY0X3RzIHRvby4KKyAgICAgICAgQVNT
RVJUKERpeUZwOjprU2lnbmlmaWNhbmRTaXplID09IDY0KTsKKyAgICAgICAgQVNTRVJUKHByZWNp
c2lvbl9kaWdpdHNfY291bnQgPCA2NCk7CisgICAgICAgIHVpbnQ2NF90IG9uZTY0ID0gMTsKKyAg
ICAgICAgdWludDY0X3QgcHJlY2lzaW9uX2JpdHNfbWFzayA9IChvbmU2NCA8PCBwcmVjaXNpb25f
ZGlnaXRzX2NvdW50KSAtIDE7CisgICAgICAgIHVpbnQ2NF90IHByZWNpc2lvbl9iaXRzID0gaW5w
dXQuZigpICYgcHJlY2lzaW9uX2JpdHNfbWFzazsKKyAgICAgICAgdWludDY0X3QgaGFsZl93YXkg
PSBvbmU2NCA8PCAocHJlY2lzaW9uX2RpZ2l0c19jb3VudCAtIDEpOworICAgICAgICBwcmVjaXNp
b25fYml0cyAqPSBrRGVub21pbmF0b3I7CisgICAgICAgIGhhbGZfd2F5ICo9IGtEZW5vbWluYXRv
cjsKKyAgICAgICAgRGl5RnAgcm91bmRlZF9pbnB1dChpbnB1dC5mKCkgPj4gcHJlY2lzaW9uX2Rp
Z2l0c19jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC5lKCkgKyBwcmVj
aXNpb25fZGlnaXRzX2NvdW50KTsKKyAgICAgICAgaWYgKHByZWNpc2lvbl9iaXRzID49IGhhbGZf
d2F5ICsgZXJyb3IpIHsKKyAgICAgICAgICAgIHJvdW5kZWRfaW5wdXQuc2V0X2Yocm91bmRlZF9p
bnB1dC5mKCkgKyAxKTsKKyAgICAgICAgfQorICAgICAgICAvLyBJZiB0aGUgbGFzdF9iaXRzIGFy
ZSB0b28gY2xvc2UgdG8gdGhlIGhhbGYtd2F5IGNhc2UgdGhhbiB3ZSBhcmUgdG9vCisgICAgICAg
IC8vIGluYWNjdXJhdGUgYW5kIHJvdW5kIGRvd24uIEluIHRoaXMgY2FzZSB3ZSByZXR1cm4gZmFs
c2Ugc28gdGhhdCB3ZSBjYW4KKyAgICAgICAgLy8gZmFsbCBiYWNrIHRvIGEgbW9yZSBwcmVjaXNl
IGFsZ29yaXRobS4KKyAgICAgICAgCisgICAgICAgICpyZXN1bHQgPSBEb3VibGUocm91bmRlZF9p
bnB1dCkudmFsdWUoKTsKKyAgICAgICAgaWYgKGhhbGZfd2F5IC0gZXJyb3IgPCBwcmVjaXNpb25f
Yml0cyAmJiBwcmVjaXNpb25fYml0cyA8IGhhbGZfd2F5ICsgZXJyb3IpIHsKKyAgICAgICAgICAg
IC8vIFRvbyBpbXByZWNpc2UuIFRoZSBjYWxsZXIgd2lsbCBoYXZlIHRvIGZhbGwgYmFjayB0byBh
IHNsb3dlciB2ZXJzaW9uLgorICAgICAgICAgICAgLy8gSG93ZXZlciB0aGUgcmV0dXJuZWQgbnVt
YmVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgZWl0aGVyIHRoZSBjb3JyZWN0CisgICAgICAgICAgICAv
LyBkb3VibGUsIG9yIHRoZSBuZXh0LWxvd2VyIGRvdWJsZS4KKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIAorICAgIC8vIFJldHVybnMgdGhlIGNvcnJlY3QgZG91Ymxl
IGZvciB0aGUgYnVmZmVyKjEwXmV4cG9uZW50LgorICAgIC8vIFRoZSB2YXJpYWJsZSBndWVzcyBz
aG91bGQgYmUgYSBjbG9zZSBndWVzcyB0aGF0IGlzIGVpdGhlciB0aGUgY29ycmVjdCBkb3VibGUK
KyAgICAvLyBvciBpdHMgbG93ZXIgbmVpZ2hib3IgKHRoZSBuZWFyZXN0IGRvdWJsZSBsZXNzIHRo
YW4gdGhlIGNvcnJlY3Qgb25lKS4KKyAgICAvLyBQcmVjb25kaXRpb25zOgorICAgIC8vICAgYnVm
ZmVyLmxlbmd0aCgpICsgZXhwb25lbnQgPD0ga01heERlY2ltYWxQb3dlciArIDEKKyAgICAvLyAg
IGJ1ZmZlci5sZW5ndGgoKSArIGV4cG9uZW50ID4ga01pbkRlY2ltYWxQb3dlcgorICAgIC8vICAg
YnVmZmVyLmxlbmd0aCgpIDw9IGtNYXhEZWNpbWFsU2lnbmlmaWNhbnREaWdpdHMKKyAgICBzdGF0
aWMgZG91YmxlIEJpZ251bVN0cnRvZChWZWN0b3I8Y29uc3QgY2hhcj4gYnVmZmVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBvbmVudCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkb3VibGUgZ3Vlc3MpIHsKKyAgICAgICAgaWYgKGd1ZXNzID09IERvdWJs
ZTo6SW5maW5pdHkoKSkgeworICAgICAgICAgICAgcmV0dXJuIGd1ZXNzOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBEaXlGcCB1cHBlcl9ib3VuZGFyeSA9IERvdWJsZShndWVzcykuVXBw
ZXJCb3VuZGFyeSgpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKGJ1ZmZlci5sZW5ndGgoKSAr
IGV4cG9uZW50IDw9IGtNYXhEZWNpbWFsUG93ZXIgKyAxKTsKKyAgICAgICAgQVNTRVJUKGJ1ZmZl
ci5sZW5ndGgoKSArIGV4cG9uZW50ID4ga01pbkRlY2ltYWxQb3dlcik7CisgICAgICAgIEFTU0VS
VChidWZmZXIubGVuZ3RoKCkgPD0ga01heFNpZ25pZmljYW50RGVjaW1hbERpZ2l0cyk7CisgICAg
ICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBCaWdudW0gd2lsbCBiZSBhYmxlIHRvIGhvbGQgYWxs
IG91ciBudW1iZXJzLgorICAgICAgICAvLyBPdXIgQmlnbnVtIGltcGxlbWVudGF0aW9uIGhhcyBh
IHNlcGFyYXRlIGZpZWxkIGZvciBleHBvbmVudHMuIFNoaWZ0cyB3aWxsCisgICAgICAgIC8vIGNv
bnN1bWUgYXQgbW9zdCBvbmUgYmlnaXQgKDwgNjQgYml0cykuCisgICAgICAgIC8vIGxuKDEwKSA9
PSAzLjMyMTkuLi4KKyAgICAgICAgQVNTRVJUKCgoa01heERlY2ltYWxQb3dlciArIDEpICogMzMz
IC8gMTAwKSA8IEJpZ251bTo6a01heFNpZ25pZmljYW50Qml0cyk7CisgICAgICAgIEJpZ251bSBp
bnB1dDsKKyAgICAgICAgQmlnbnVtIGJvdW5kYXJ5OworICAgICAgICBpbnB1dC5Bc3NpZ25EZWNp
bWFsU3RyaW5nKGJ1ZmZlcik7CisgICAgICAgIGJvdW5kYXJ5LkFzc2lnblVJbnQ2NCh1cHBlcl9i
b3VuZGFyeS5mKCkpOworICAgICAgICBpZiAoZXhwb25lbnQgPj0gMCkgeworICAgICAgICAgICAg
aW5wdXQuTXVsdGlwbHlCeVBvd2VyT2ZUZW4oZXhwb25lbnQpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgYm91bmRhcnkuTXVsdGlwbHlCeVBvd2VyT2ZUZW4oLWV4cG9uZW50KTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAodXBwZXJfYm91bmRhcnkuZSgpID4gMCkgeworICAgICAgICAg
ICAgYm91bmRhcnkuU2hpZnRMZWZ0KHVwcGVyX2JvdW5kYXJ5LmUoKSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBpbnB1dC5TaGlmdExlZnQoLXVwcGVyX2JvdW5kYXJ5LmUoKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgaW50IGNvbXBhcmlzb24gPSBCaWdudW06OkNvbXBhcmUoaW5wdXQs
IGJvdW5kYXJ5KTsKKyAgICAgICAgaWYgKGNvbXBhcmlzb24gPCAwKSB7CisgICAgICAgICAgICBy
ZXR1cm4gZ3Vlc3M7CisgICAgICAgIH0gZWxzZSBpZiAoY29tcGFyaXNvbiA+IDApIHsKKyAgICAg
ICAgICAgIHJldHVybiBEb3VibGUoZ3Vlc3MpLk5leHREb3VibGUoKTsKKyAgICAgICAgfSBlbHNl
IGlmICgoRG91YmxlKGd1ZXNzKS5TaWduaWZpY2FuZCgpICYgMSkgPT0gMCkgeworICAgICAgICAg
ICAgLy8gUm91bmQgdG93YXJkcyBldmVuLgorICAgICAgICAgICAgcmV0dXJuIGd1ZXNzOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIERvdWJsZShndWVzcykuTmV4dERvdWJs
ZSgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIGRvdWJsZSBTdHJ0b2QoVmVj
dG9yPGNvbnN0IGNoYXI+IGJ1ZmZlciwgaW50IGV4cG9uZW50KSB7CisgICAgICAgIFZlY3Rvcjxj
b25zdCBjaGFyPiBsZWZ0X3RyaW1tZWQgPSBUcmltTGVhZGluZ1plcm9zKGJ1ZmZlcik7CisgICAg
ICAgIFZlY3Rvcjxjb25zdCBjaGFyPiB0cmltbWVkID0gVHJpbVRyYWlsaW5nWmVyb3MobGVmdF90
cmltbWVkKTsKKyAgICAgICAgZXhwb25lbnQgKz0gbGVmdF90cmltbWVkLmxlbmd0aCgpIC0gdHJp
bW1lZC5sZW5ndGgoKTsKKyAgICAgICAgaWYgKHRyaW1tZWQubGVuZ3RoKCkgPT0gMCkgcmV0dXJu
IDAuMDsKKyAgICAgICAgaWYgKHRyaW1tZWQubGVuZ3RoKCkgPiBrTWF4U2lnbmlmaWNhbnREZWNp
bWFsRGlnaXRzKSB7CisgICAgICAgICAgICBjaGFyIHNpZ25pZmljYW50X2J1ZmZlcltrTWF4U2ln
bmlmaWNhbnREZWNpbWFsRGlnaXRzXTsKKyAgICAgICAgICAgIGludCBzaWduaWZpY2FudF9leHBv
bmVudDsKKyAgICAgICAgICAgIFRyaW1Ub01heFNpZ25pZmljYW50RGlnaXRzKHRyaW1tZWQsIGV4
cG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmlmaWNh
bnRfYnVmZmVyLCAmc2lnbmlmaWNhbnRfZXhwb25lbnQpOworICAgICAgICAgICAgcmV0dXJuIFN0
cnRvZChWZWN0b3I8Y29uc3QgY2hhcj4oc2lnbmlmaWNhbnRfYnVmZmVyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga01heFNpZ25pZmljYW50RGVjaW1hbERp
Z2l0cyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25pZmljYW50X2V4cG9uZW50KTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoZXhwb25lbnQgKyB0cmltbWVkLmxlbmd0aCgpIC0gMSA+
PSBrTWF4RGVjaW1hbFBvd2VyKSB7CisgICAgICAgICAgICByZXR1cm4gRG91YmxlOjpJbmZpbml0
eSgpOworICAgICAgICB9CisgICAgICAgIGlmIChleHBvbmVudCArIHRyaW1tZWQubGVuZ3RoKCkg
PD0ga01pbkRlY2ltYWxQb3dlcikgeworICAgICAgICAgICAgcmV0dXJuIDAuMDsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgZG91YmxlIGd1ZXNzOworICAgICAgICBpZiAoRG91YmxlU3Ry
dG9kKHRyaW1tZWQsIGV4cG9uZW50LCAmZ3Vlc3MpIHx8CisgICAgICAgICAgICBEaXlGcFN0cnRv
ZCh0cmltbWVkLCBleHBvbmVudCwgJmd1ZXNzKSkgeworICAgICAgICAgICAgcmV0dXJuIGd1ZXNz
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBCaWdudW1TdHJ0b2QodHJpbW1lZCwgZXhwb25l
bnQsIGd1ZXNzKTsKKyAgICB9CisgICAgCit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNp
b24KKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL2R0b2Evc3RydG9kLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2Evc3Ry
dG9kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOGVkMzUwYWQ4YWM4Zjc4MjVmMDg0MTU5MjdjYTYwYWU5N2YzODI1
YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9zdHJ0
b2QuaApAQCAtMCwwICsxLDQ1IEBACisvLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJvamVjdCBh
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
Ky8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZm5k
ZWYgRE9VQkxFX0NPTlZFUlNJT05fU1RSVE9EX0hfCisjZGVmaW5lIERPVUJMRV9DT05WRVJTSU9O
X1NUUlRPRF9IXworCisjaW5jbHVkZSAidXRpbHMuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK25h
bWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgLy8gVGhlIGJ1ZmZlciBtdXN0
IG9ubHkgY29udGFpbiBkaWdpdHMgaW4gdGhlIHJhbmdlIFswLTldLiBJdCBtdXN0IG5vdAorICAg
IC8vIGNvbnRhaW4gYSBkb3Qgb3IgYSBzaWduLiBJdCBtdXN0IG5vdCBzdGFydCB3aXRoICcwJywg
YW5kIG11c3Qgbm90IGJlIGVtcHR5LgorICAgIGRvdWJsZSBTdHJ0b2QoVmVjdG9yPGNvbnN0IGNo
YXI+IGJ1ZmZlciwgaW50IGV4cG9uZW50KTsKKyAgICAKK30gIC8vIG5hbWVzcGFjZSBkb3VibGVf
Y29udmVyc2lvbgorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmICAvLyBET1VCTEVfQ09O
VkVSU0lPTl9TVFJUT0RfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
ZHRvYS91dGlscy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL3V0aWxzLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZGVmYjVmMTJiNzE1NTIwYTY1NWFjYWQxNjdhMTkwY2E2ZDkxOTYyYwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS91dGlscy5oCkBAIC0w
LDAgKzEsMzAzIEBACisvLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBt
ZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAg
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8v
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8v
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZm5kZWYgRE9VQkxF
X0NPTlZFUlNJT05fVVRJTFNfSF8KKyNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05fVVRJTFNfSF8K
KworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWZuZGVmIEFT
U0VSVAorI2luY2x1ZGUgPGFzc2VydC5oPgorI2RlZmluZSBBU1NFUlQoY29uZGl0aW9uKSAgICAg
IChhc3NlcnQoY29uZGl0aW9uKSkKKyNkZWZpbmUgVU5JTVBMRU1FTlRFRCgpIChhYm9ydCgpKQor
I2RlZmluZSBVTlJFQUNIQUJMRSgpICAgKGFib3J0KCkpCisjZW5kaWYKKworLy8gRG91YmxlIG9w
ZXJhdGlvbnMgZGV0ZWN0aW9uIGJhc2VkIG9uIHRhcmdldCBhcmNoaXRlY3R1cmUuCisvLyBMaW51
eCB1c2VzIGEgODBiaXQgd2lkZSBmbG9hdGluZyBwb2ludCBzdGFjayBvbiB4ODYuIFRoaXMgaW5k
dWNlcyBkb3VibGUKKy8vIHJvdW5kaW5nLCB3aGljaCBpbiB0dXJuIGxlYWRzIHRvIHdyb25nIHJl
c3VsdHMuCisvLyBBbiBlYXN5IHdheSB0byB0ZXN0IGlmIHRoZSBmbG9hdGluZy1wb2ludCBvcGVy
YXRpb25zIGFyZSBjb3JyZWN0IGlzIHRvCisvLyBldmFsdWF0ZTogODkyNTUuMC8xZTIyLiBJZiB0
aGUgZmxvYXRpbmctcG9pbnQgc3RhY2sgaXMgNjQgYml0cyB3aWRlIHRoZW4KKy8vIHRoZSByZXN1
bHQgaXMgZXF1YWwgdG8gODkyNTVlLTIyLgorLy8gVGhlIGJlc3Qgd2F5IHRvIHRlc3QgdGhpcywg
aXMgdG8gY3JlYXRlIGEgZGl2aXNpb24tZnVuY3Rpb24gYW5kIHRvIGNvbXBhcmUKKy8vIHRoZSBv
dXRwdXQgb2YgdGhlIGRpdmlzaW9uIHdpdGggdGhlIGV4cGVjdGVkIHJlc3VsdC4gKElubGluaW5n
IG11c3QgYmUKKy8vIGRpc2FibGVkLikKKy8vIE9uIExpbnV4LHg4NiA4OTI1NWUtMjIgIT0gRGl2
X2RvdWJsZSg4OTI1NS4wLzFlMjIpCisjaWYgZGVmaW5lZChfTV9YNjQpIHx8IGRlZmluZWQoX194
ODZfNjRfXykgfHwgXAorZGVmaW5lZChfX0FSTUVMX18pIHx8IFwKK2RlZmluZWQoX01JUFNfQVJD
SF9NSVBTMzJSMikKKyNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05fQ09SUkVDVF9ET1VCTEVfT1BF
UkFUSU9OUyAxCisjZWxpZiBkZWZpbmVkKF9NX0lYODYpIHx8IGRlZmluZWQoX19pMzg2X18pCisj
aWYgZGVmaW5lZChfV0lOMzIpCisvLyBXaW5kb3dzIHVzZXMgYSA2NGJpdCB3aWRlIGZsb2F0aW5n
IHBvaW50IHN0YWNrLgorI2RlZmluZSBET1VCTEVfQ09OVkVSU0lPTl9DT1JSRUNUX0RPVUJMRV9P
UEVSQVRJT05TIDEKKyNlbHNlCisjdW5kZWYgRE9VQkxFX0NPTlZFUlNJT05fQ09SUkVDVF9ET1VC
TEVfT1BFUkFUSU9OUworI2VuZGlmICAvLyBfV0lOMzIKKyNlbHNlCisjZXJyb3IgVGFyZ2V0IGFy
Y2hpdGVjdHVyZSB3YXMgbm90IGRldGVjdGVkIGFzIHN1cHBvcnRlZCBieSBEb3VibGUtQ29udmVy
c2lvbi4KKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19NSU5H
VzMyX18pCisKK3R5cGVkZWYgc2lnbmVkIGNoYXIgaW50OF90OwordHlwZWRlZiB1bnNpZ25lZCBj
aGFyIHVpbnQ4X3Q7Cit0eXBlZGVmIHNob3J0IGludDE2X3Q7ICAvLyBOT0xJTlQKK3R5cGVkZWYg
dW5zaWduZWQgc2hvcnQgdWludDE2X3Q7ICAvLyBOT0xJTlQKK3R5cGVkZWYgaW50IGludDMyX3Q7
Cit0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50MzJfdDsKK3R5cGVkZWYgX19pbnQ2NCBpbnQ2NF90
OwordHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0IHVpbnQ2NF90OworLy8gaW50cHRyX3QgYW5kIGZy
aWVuZHMgYXJlIGRlZmluZWQgaW4gY3J0ZGVmcy5oIHRocm91Z2ggc3RkaW8uaC4KKworI2Vsc2UK
KworI2luY2x1ZGUgPHN0ZGludC5oPgorCisjZW5kaWYKKworLy8gVGhlIGZvbGxvd2luZyBtYWNy
byB3b3JrcyBvbiBib3RoIDMyIGFuZCA2NC1iaXQgcGxhdGZvcm1zLgorLy8gVXNhZ2U6IGluc3Rl
YWQgb2Ygd3JpdGluZyAweDEyMzQ1Njc4OTAxMjM0NTYKKy8vICAgICAgd3JpdGUgVUlOVDY0XzJQ
QVJUX0MoMHgxMjM0NTY3OCw5MDEyMzQ1Nik7CisjZGVmaW5lIFVJTlQ2NF8yUEFSVF9DKGEsIGIp
ICgoKHN0YXRpY19jYXN0PHVpbnQ2NF90PihhKSA8PCAzMikgKyAweCMjYiMjdSkpCisKKworLy8g
VGhlIGV4cHJlc3Npb24gQVJSQVlfU0laRShhKSBpcyBhIGNvbXBpbGUtdGltZSBjb25zdGFudCBv
ZiB0eXBlCisvLyBzaXplX3Qgd2hpY2ggcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRz
IG9mIHRoZSBnaXZlbgorLy8gYXJyYXkuIFlvdSBzaG91bGQgb25seSB1c2UgQVJSQVlfU0laRSBv
biBzdGF0aWNhbGx5IGFsbG9jYXRlZAorLy8gYXJyYXlzLgorI2RlZmluZSBBUlJBWV9TSVpFKGEp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisoKHNpemVvZihhKSAvIHNpemVv
ZigqKGEpKSkgLyAgICAgICAgICAgICAgICAgICAgICAgICBcCitzdGF0aWNfY2FzdDxzaXplX3Q+
KCEoc2l6ZW9mKGEpICUgc2l6ZW9mKCooYSkpKSkpCisKKy8vIEEgbWFjcm8gdG8gZGlzYWxsb3cg
dGhlIGV2aWwgY29weSBjb25zdHJ1Y3RvciBhbmQgb3BlcmF0b3I9IGZ1bmN0aW9ucworLy8gVGhp
cyBzaG91bGQgYmUgdXNlZCBpbiB0aGUgcHJpdmF0ZTogZGVjbGFyYXRpb25zIGZvciBhIGNsYXNz
CisjZGVmaW5lIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUeXBlTmFtZSkgICAgICBcCitUeXBl
TmFtZShjb25zdCBUeXBlTmFtZSYpOyAgICAgICAgICAgICAgICAgICAgXAordm9pZCBvcGVyYXRv
cj0oY29uc3QgVHlwZU5hbWUmKQorCisvLyBBIG1hY3JvIHRvIGRpc2FsbG93IGFsbCB0aGUgaW1w
bGljaXQgY29uc3RydWN0b3JzLCBuYW1lbHkgdGhlCisvLyBkZWZhdWx0IGNvbnN0cnVjdG9yLCBj
b3B5IGNvbnN0cnVjdG9yIGFuZCBvcGVyYXRvcj0gZnVuY3Rpb25zLgorLy8KKy8vIFRoaXMgc2hv
dWxkIGJlIHVzZWQgaW4gdGhlIHByaXZhdGU6IGRlY2xhcmF0aW9ucyBmb3IgYSBjbGFzcworLy8g
dGhhdCB3YW50cyB0byBwcmV2ZW50IGFueW9uZSBmcm9tIGluc3RhbnRpYXRpbmcgaXQuIFRoaXMg
aXMKKy8vIGVzcGVjaWFsbHkgdXNlZnVsIGZvciBjbGFzc2VzIGNvbnRhaW5pbmcgb25seSBzdGF0
aWMgbWV0aG9kcy4KKyNkZWZpbmUgRElTQUxMT1dfSU1QTElDSVRfQ09OU1RSVUNUT1JTKFR5cGVO
YW1lKSBcCitUeXBlTmFtZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
K0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUeXBlTmFtZSkKKworbmFtZXNwYWNlIFdURiB7CisK
K25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgc3RhdGljIGNvbnN0IGlu
dCBrQ2hhclNpemUgPSBzaXplb2YoY2hhcik7CisgICAgCisgICAgLy8gUmV0dXJucyB0aGUgbWF4
aW11bSBvZiB0aGUgdHdvIHBhcmFtZXRlcnMuCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisg
ICAgc3RhdGljIFQgTWF4KFQgYSwgVCBiKSB7CisgICAgICAgIHJldHVybiBhIDwgYiA/IGIgOiBh
OworICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRoZSBtaW5pbXVtIG9mIHRoZSB0
d28gcGFyYW1ldGVycy4KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgVCBN
aW4oVCBhLCBUIGIpIHsKKyAgICAgICAgcmV0dXJuIGEgPCBiID8gYSA6IGI7CisgICAgfQorICAg
IAorICAgIAorICAgIGlubGluZSBpbnQgU3RyTGVuZ3RoKGNvbnN0IGNoYXIqIHN0cmluZykgewor
ICAgICAgICBzaXplX3QgbGVuZ3RoID0gc3RybGVuKHN0cmluZyk7CisgICAgICAgIEFTU0VSVChs
ZW5ndGggPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihzdGF0aWNfY2FzdDxpbnQ+KGxlbmd0aCkpKTsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obGVuZ3RoKTsKKyAgICB9CisgICAgCisg
ICAgLy8gVGhpcyBpcyBhIHNpbXBsaWZpZWQgdmVyc2lvbiBvZiBWOCdzIFZlY3RvciBjbGFzcy4K
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBjbGFzcyBWZWN0b3IgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgVmVjdG9yKCkgOiBzdGFydF8oTlVMTCksIGxlbmd0aF8oMCkge30KKyAgICAg
ICAgVmVjdG9yKFQqIGRhdGEsIGludCBsZW5ndGgpIDogc3RhcnRfKGRhdGEpLCBsZW5ndGhfKGxl
bmd0aCkgeworICAgICAgICAgICAgQVNTRVJUKGxlbmd0aCA9PSAwIHx8IChsZW5ndGggPiAwICYm
IGRhdGEgIT0gTlVMTCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBSZXR1cm5z
IGEgdmVjdG9yIHVzaW5nIHRoZSBzYW1lIGJhY2tpbmcgc3RvcmFnZSBhcyB0aGlzIG9uZSwKKyAg
ICAgICAgLy8gc3Bhbm5pbmcgZnJvbSBhbmQgaW5jbHVkaW5nICdmcm9tJywgdG8gYnV0IG5vdCBp
bmNsdWRpbmcgJ3RvJy4KKyAgICAgICAgVmVjdG9yPFQ+IFN1YlZlY3RvcihpbnQgZnJvbSwgaW50
IHRvKSB7CisgICAgICAgICAgICBBU1NFUlQodG8gPD0gbGVuZ3RoXyk7CisgICAgICAgICAgICBB
U1NFUlQoZnJvbSA8IHRvKTsKKyAgICAgICAgICAgIEFTU0VSVCgwIDw9IGZyb20pOworICAgICAg
ICAgICAgcmV0dXJuIFZlY3RvcjxUPihzdGFydCgpICsgZnJvbSwgdG8gLSBmcm9tKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgLy8gUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSB2ZWN0
b3IuCisgICAgICAgIGludCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBsZW5ndGhfOyB9CisgICAg
ICAgIAorICAgICAgICAvLyBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSB2ZWN0b3IgaXMgZW1w
dHkuCisgICAgICAgIGJvb2wgaXNfZW1wdHkoKSBjb25zdCB7IHJldHVybiBsZW5ndGhfID09IDA7
IH0KKyAgICAgICAgCisgICAgICAgIC8vIFJldHVybnMgdGhlIHBvaW50ZXIgdG8gdGhlIHN0YXJ0
IG9mIHRoZSBkYXRhIGluIHRoZSB2ZWN0b3IuCisgICAgICAgIFQqIHN0YXJ0KCkgY29uc3QgeyBy
ZXR1cm4gc3RhcnRfOyB9CisgICAgICAgIAorICAgICAgICAvLyBBY2Nlc3MgaW5kaXZpZHVhbCB2
ZWN0b3IgZWxlbWVudHMgLSBjaGVja3MgYm91bmRzIGluIGRlYnVnIG1vZGUuCisgICAgICAgIFQm
IG9wZXJhdG9yW10oaW50IGluZGV4KSBjb25zdCB7CisgICAgICAgICAgICBBU1NFUlQoMCA8PSBp
bmRleCAmJiBpbmRleCA8IGxlbmd0aF8pOworICAgICAgICAgICAgcmV0dXJuIHN0YXJ0X1tpbmRl
eF07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFQmIGZpcnN0KCkgeyByZXR1cm4gc3Rh
cnRfWzBdOyB9CisgICAgICAgIAorICAgICAgICBUJiBsYXN0KCkgeyByZXR1cm4gc3RhcnRfW2xl
bmd0aF8gLSAxXTsgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBUKiBzdGFydF87
CisgICAgICAgIGludCBsZW5ndGhfOworICAgIH07CisgICAgCisgICAgCisgICAgLy8gSGVscGVy
IGNsYXNzIGZvciBidWlsZGluZyByZXN1bHQgc3RyaW5ncyBpbiBhIGNoYXJhY3RlciBidWZmZXIu
IFRoZQorICAgIC8vIHB1cnBvc2Ugb2YgdGhlIGNsYXNzIGlzIHRvIHVzZSBzYWZlIG9wZXJhdGlv
bnMgdGhhdCBjaGVja3MgdGhlCisgICAgLy8gYnVmZmVyIGJvdW5kcyBvbiBhbGwgb3BlcmF0aW9u
cyBpbiBkZWJ1ZyBtb2RlLgorICAgIGNsYXNzIFN0cmluZ0J1aWxkZXIgeworICAgIHB1YmxpYzoK
KyAgICAgICAgU3RyaW5nQnVpbGRlcihjaGFyKiBidWZmZXIsIGludCBzaXplKQorICAgICAgICA6
IGJ1ZmZlcl8oYnVmZmVyLCBzaXplKSwgcG9zaXRpb25fKDApIHsgfQorICAgICAgICAKKyAgICAg
ICAgflN0cmluZ0J1aWxkZXIoKSB7IGlmICghaXNfZmluYWxpemVkKCkpIEZpbmFsaXplKCk7IH0K
KyAgICAgICAgCisgICAgICAgIGludCBzaXplKCkgY29uc3QgeyByZXR1cm4gYnVmZmVyXy5sZW5n
dGgoKTsgfQorICAgICAgICAKKyAgICAgICAgLy8gR2V0IHRoZSBjdXJyZW50IHBvc2l0aW9uIGlu
IHRoZSBidWlsZGVyLgorICAgICAgICBpbnQgcG9zaXRpb24oKSBjb25zdCB7CisgICAgICAgICAg
ICBBU1NFUlQoIWlzX2ZpbmFsaXplZCgpKTsKKyAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbl87
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFJlc2V0IHRoZSBwb3NpdGlvbi4KKyAg
ICAgICAgdm9pZCBSZXNldCgpIHsgcG9zaXRpb25fID0gMDsgfQorICAgICAgICAKKyAgICAgICAg
Ly8gQWRkIGEgc2luZ2xlIGNoYXJhY3RlciB0byB0aGUgYnVpbGRlci4gSXQgaXMgbm90IGFsbG93
ZWQgdG8gYWRkCisgICAgICAgIC8vIDAtY2hhcmFjdGVyczsgdXNlIHRoZSBGaW5hbGl6ZSgpIG1l
dGhvZCB0byB0ZXJtaW5hdGUgdGhlIHN0cmluZworICAgICAgICAvLyBpbnN0ZWFkLgorICAgICAg
ICB2b2lkIEFkZENoYXJhY3RlcihjaGFyIGMpIHsKKyAgICAgICAgICAgIEFTU0VSVChjICE9ICdc
MCcpOworICAgICAgICAgICAgQVNTRVJUKCFpc19maW5hbGl6ZWQoKSAmJiBwb3NpdGlvbl8gPCBi
dWZmZXJfLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGJ1ZmZlcl9bcG9zaXRpb25fKytdID0gYzsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQWRkIGFuIGVudGlyZSBzdHJpbmcgdG8g
dGhlIGJ1aWxkZXIuIFVzZXMgc3RybGVuKCkgaW50ZXJuYWxseSB0bworICAgICAgICAvLyBjb21w
dXRlIHRoZSBsZW5ndGggb2YgdGhlIGlucHV0IHN0cmluZy4KKyAgICAgICAgdm9pZCBBZGRTdHJp
bmcoY29uc3QgY2hhciogcykgeworICAgICAgICAgICAgQWRkU3Vic3RyaW5nKHMsIFN0ckxlbmd0
aChzKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEFkZCB0aGUgZmlyc3QgJ24n
IGNoYXJhY3RlcnMgb2YgdGhlIGdpdmVuIHN0cmluZyAncycgdG8gdGhlCisgICAgICAgIC8vIGJ1
aWxkZXIuIFRoZSBpbnB1dCBzdHJpbmcgbXVzdCBoYXZlIGVub3VnaCBjaGFyYWN0ZXJzLgorICAg
ICAgICB2b2lkIEFkZFN1YnN0cmluZyhjb25zdCBjaGFyKiBzLCBpbnQgbikgeworICAgICAgICAg
ICAgQVNTRVJUKCFpc19maW5hbGl6ZWQoKSAmJiBwb3NpdGlvbl8gKyBuIDwgYnVmZmVyXy5sZW5n
dGgoKSk7CisgICAgICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihuKSA8PSBzdHJs
ZW4ocykpOworICAgICAgICAgICAgbWVtY3B5KCZidWZmZXJfW3Bvc2l0aW9uX10sIHMsIG4gKiBr
Q2hhclNpemUpOworICAgICAgICAgICAgcG9zaXRpb25fICs9IG47CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIAorICAgICAgICAvLyBBZGQgY2hhcmFjdGVyIHBhZGRpbmcgdG8gdGhlIGJ1
aWxkZXIuIElmIGNvdW50IGlzIG5vbi1wb3NpdGl2ZSwKKyAgICAgICAgLy8gbm90aGluZyBpcyBh
ZGRlZCB0byB0aGUgYnVpbGRlci4KKyAgICAgICAgdm9pZCBBZGRQYWRkaW5nKGNoYXIgYywgaW50
IGNvdW50KSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsK
KyAgICAgICAgICAgICAgICBBZGRDaGFyYWN0ZXIoYyk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIC8vIEZpbmFsaXplIHRoZSBzdHJpbmcgYnkgMC10ZXJtaW5h
dGluZyBpdCBhbmQgcmV0dXJuaW5nIHRoZSBidWZmZXIuCisgICAgICAgIGNoYXIqIEZpbmFsaXpl
KCkgeworICAgICAgICAgICAgQVNTRVJUKCFpc19maW5hbGl6ZWQoKSAmJiBwb3NpdGlvbl8gPCBi
dWZmZXJfLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGJ1ZmZlcl9bcG9zaXRpb25fXSA9ICdcMCc7
CisgICAgICAgICAgICAvLyBNYWtlIHN1cmUgbm9ib2R5IG1hbmFnZWQgdG8gYWRkIGEgMC1jaGFy
YWN0ZXIgdG8gdGhlCisgICAgICAgICAgICAvLyBidWZmZXIgd2hpbGUgYnVpbGRpbmcgdGhlIHN0
cmluZy4KKyAgICAgICAgICAgIEFTU0VSVChzdHJsZW4oYnVmZmVyXy5zdGFydCgpKSA9PSBzdGF0
aWNfY2FzdDxzaXplX3Q+KHBvc2l0aW9uXykpOworICAgICAgICAgICAgcG9zaXRpb25fID0gLTE7
CisgICAgICAgICAgICBBU1NFUlQoaXNfZmluYWxpemVkKCkpOworICAgICAgICAgICAgcmV0dXJu
IGJ1ZmZlcl8uc3RhcnQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAg
ICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyXzsKKyAgICAgICAgaW50IHBvc2l0aW9uXzsKKyAgICAg
ICAgCisgICAgICAgIGJvb2wgaXNfZmluYWxpemVkKCkgY29uc3QgeyByZXR1cm4gcG9zaXRpb25f
IDwgMDsgfQorICAgICAgICAKKyAgICAgICAgRElTQUxMT1dfSU1QTElDSVRfQ09OU1RSVUNUT1JT
KFN0cmluZ0J1aWxkZXIpOworICAgIH07CisgICAgCisgICAgLy8gVGhlIHR5cGUtYmFzZWQgYWxp
YXNpbmcgcnVsZSBhbGxvd3MgdGhlIGNvbXBpbGVyIHRvIGFzc3VtZSB0aGF0IHBvaW50ZXJzIG9m
CisgICAgLy8gZGlmZmVyZW50IHR5cGVzIChmb3Igc29tZSBkZWZpbml0aW9uIG9mIGRpZmZlcmVu
dCkgbmV2ZXIgYWxpYXMgZWFjaCBvdGhlci4KKyAgICAvLyBUaHVzIHRoZSBmb2xsb3dpbmcgY29k
ZSBkb2VzIG5vdCB3b3JrOgorICAgIC8vCisgICAgLy8gZmxvYXQgZiA9IGZvbygpOworICAgIC8v
IGludCBmYml0cyA9ICooaW50KikoJmYpOworICAgIC8vCisgICAgLy8gVGhlIGNvbXBpbGVyICdr
bm93cycgdGhhdCB0aGUgaW50IHBvaW50ZXIgY2FuJ3QgcmVmZXIgdG8gZiBzaW5jZSB0aGUgdHlw
ZXMKKyAgICAvLyBkb24ndCBtYXRjaCwgc28gdGhlIGNvbXBpbGVyIG1heSBjYWNoZSBmIGluIGEg
cmVnaXN0ZXIsIGxlYXZpbmcgcmFuZG9tIGRhdGEKKyAgICAvLyBpbiBmYml0cy4gIFVzaW5nIEMr
KyBzdHlsZSBjYXN0cyBtYWtlcyBubyBkaWZmZXJlbmNlLCBob3dldmVyIGEgcG9pbnRlciB0bwor
ICAgIC8vIGNoYXIgZGF0YSBpcyBhc3N1bWVkIHRvIGFsaWFzIGFueSBvdGhlciBwb2ludGVyLiAg
VGhpcyBpcyB0aGUgJ21lbWNweQorICAgIC8vIGV4Y2VwdGlvbicuCisgICAgLy8KKyAgICAvLyBC
aXRfY2FzdCB1c2VzIHRoZSBtZW1jcHkgZXhjZXB0aW9uIHRvIG1vdmUgdGhlIGJpdHMgZnJvbSBh
IHZhcmlhYmxlIG9mIG9uZQorICAgIC8vIHR5cGUgb2YgYSB2YXJpYWJsZSBvZiBhbm90aGVyIHR5
cGUuICBPZiBjb3Vyc2UgdGhlIGVuZCByZXN1bHQgaXMgbGlrZWx5IHRvCisgICAgLy8gYmUgaW1w
bGVtZW50YXRpb24gZGVwZW5kZW50LiAgTW9zdCBjb21waWxlcnMgKGdjYy00LjIgYW5kIE1TVkMg
MjAwNSkKKyAgICAvLyB3aWxsIGNvbXBsZXRlbHkgb3B0aW1pemUgQml0Q2FzdCBhd2F5LgorICAg
IC8vCisgICAgLy8gVGhlcmUgaXMgYW4gYWRkaXRpb25hbCB1c2UgZm9yIEJpdENhc3QuCisgICAg
Ly8gUmVjZW50IGdjY3Mgd2lsbCB3YXJuIHdoZW4gdGhleSBzZWUgY2FzdHMgdGhhdCBtYXkgcmVz
dWx0IGluIGJyZWFrYWdlIGR1ZSB0bworICAgIC8vIHRoZSB0eXBlLWJhc2VkIGFsaWFzaW5nIHJ1
bGUuICBJZiB5b3UgaGF2ZSBjaGVja2VkIHRoYXQgdGhlcmUgaXMgbm8gYnJlYWthZ2UKKyAgICAv
LyB5b3UgY2FuIHVzZSBCaXRDYXN0IHRvIGNhc3Qgb25lIHBvaW50ZXIgdHlwZSB0byBhbm90aGVy
LiAgVGhpcyBjb25mdXNlcyBnY2MKKyAgICAvLyBlbm91Z2ggdGhhdCBpdCBjYW4gbm8gbG9uZ2Vy
IHNlZSB0aGF0IHlvdSBoYXZlIGNhc3Qgb25lIHBvaW50ZXIgdHlwZSB0bworICAgIC8vIGFub3Ro
ZXIgdGh1cyBhdm9pZGluZyB0aGUgd2FybmluZy4KKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgRGVzdCwg
Y2xhc3MgU291cmNlPgorICAgIGlubGluZSBEZXN0IEJpdENhc3QoY29uc3QgU291cmNlJiBzb3Vy
Y2UpIHsKKyAgICAgICAgLy8gQ29tcGlsZSB0aW1lIGFzc2VydGlvbjogc2l6ZW9mKERlc3QpID09
IHNpemVvZihTb3VyY2UpCisgICAgICAgIC8vIEEgY29tcGlsZSBlcnJvciBoZXJlIG1lYW5zIHlv
dXIgRGVzdCBhbmQgU291cmNlIGhhdmUgZGlmZmVyZW50IHNpemVzLgorICAgICAgICB0eXBlZGVm
IGNoYXIgVmVyaWZ5U2l6ZXNBcmVFcXVhbFtzaXplb2YoRGVzdCkgPT0gc2l6ZW9mKFNvdXJjZSkg
PyAxIDogLTFdOworICAgICAgICAKKyAgICAgICAgRGVzdCBkZXN0OworICAgICAgICBtZW1jcHko
JmRlc3QsICZzb3VyY2UsIHNpemVvZihkZXN0KSk7CisgICAgICAgIHJldHVybiBkZXN0OworICAg
IH0KKyAgICAKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgRGVzdCwgY2xhc3MgU291cmNlPgorICAgIGlu
bGluZSBEZXN0IEJpdENhc3QoU291cmNlKiBzb3VyY2UpIHsKKyAgICAgICAgcmV0dXJuIEJpdENh
c3Q8RGVzdD4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHNvdXJjZSkpOworICAgIH0KKyAg
ICAKK30gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbgorCit9IC8vIG5hbWVzcGFjZSBX
VEYKKworI2VuZGlmICAvLyBET1VCTEVfQ09OVkVSU0lPTl9VVElMU19IXwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi93dGYucHJpIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi93dGYucHJpCmluZGV4IDVlNDhmOWE1MDFkYzM5ZTFmNWFjNjI4Yjk1MTM5OWU2ODZiMzU0
NzAuLjY2MDYxODI0NWIyZjNmM2Q2Y2QyYTQ5ZGE0NjNhNGE2NWQ4ZGE4MzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvd3RmLnByaQorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL3d0Zi5wcmkKQEAgLTYsOCArNiwxNiBAQCBTT1VSQ0VTICs9IFwKICAgICB3dGYv
Q3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuY3BwIFwKICAgICB3dGYvQ3VycmVudFRpbWUu
Y3BwIFwKICAgICB3dGYvRGF0ZU1hdGguY3BwIFwKLSAgICB3dGYvZHRvYS5jcHAgXAogICAgIHd0
Zi9EZWNpbWFsTnVtYmVyLmNwcCBcCisgICAgd3RmL2R0b2EuY3BwIFwKKyAgICB3dGYvZHRvYS9i
aWdudW0tZHRvYS5jYyBcCisgICAgd3RmL2R0b2EvYmlnbnVtLmNjIFwKKyAgICB3dGYvZHRvYS9j
YWNoZWQtcG93ZXJzLmNjIFwKKyAgICB3dGYvZHRvYS9kaXktZnAuY2MgXAorICAgIHd0Zi9kdG9h
L2RvdWJsZS1jb252ZXJzaW9uLmNjIFwKKyAgICB3dGYvZHRvYS9mYXN0LWR0b2EuY2MgXAorICAg
IHd0Zi9kdG9hL2ZpeGVkLWR0b2EuY2MgXAorICAgIHd0Zi9kdG9hL3N0cnRvZC5jYyBcCiAgICAg
d3RmL0Zhc3RNYWxsb2MuY3BwIFwKICAgICB3dGYvZ29iamVjdC9HT3duUHRyLmNwcCBcCiAgICAg
d3RmL2dvYmplY3QvR1JlZlB0ci5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDY1ODVjNTRmMzRmMTVmODli
ZWVlMjY4NDY3MjAyYmQ4YjYwNmVmNTMuLjc4YTg4NDkzOTBhMjZkNGE1MTBhYTI4MWMyNWM0ZDdh
YmEwNjRlZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAxMS0wOC0yNCAgTWFyayBI
YWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIEluY29ycG9yYXRl
IG5ld2VyLCBmYXN0ZXIgZHRvYSBsaWJyYXJ5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02NjM0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAgICBBZGRlZCBuZXcgZHRv
YSBsaWJyYXJ5IGF0IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9kb3VibGUtY29udmVyc2lvbi8u
CisgICAgICAgIFJlcGxhY2VkIG9sZCBjYWxsIHRvIGR0b2EuICBUaGUgbmV3IGxpYnJhcnkgaXMg
bXVjaCBmYXN0ZXIgdGhhbiB0aGUgb2xkIG9uZS4KKyAgICAgICAgV2Ugc3RpbGwgdXNlIHRoZSBv
bGQgZHRvYSBmb3Igc29tZSBzdHVmZiBpbiBXZWJDb3JlIGFzIHdlbGwgYXMgdGhlIG9sZCBzdHJ0
b2QsIAorICAgICAgICBidXQgd2UgY2FuIHBoYXNlIHRoZXNlIG91dCBldmVudHVhbGx5IGFzIHdl
bGwuCisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYvZHRvYS9kb3VibGUtY29udmVy
c2lvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9jb3B5Rm9yd2FyZGluZ0hl
YWRlcnMuY21kOgorICAgICAgICAqIGNzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpmb3JtYXROdW1iZXIpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxQYXJz
ZXJJZGlvbXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXplRm9yTnVtYmVyVHlwZSk6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JCYXNpY1ZhbHVlOjp3cml0ZUpTT04pOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpzZXJpYWxpemVk
KToKKwogMjAxMS0wOC0yNCAgVG9tbXkgV2lkZW5mbHljaHQgIDx0b21teXdAZ29vZ2xlLmNvbT4K
IAogICAgICAgICBNZWRpYVN0cmVhbSBBUEk6IGFkZCBjcmVhdGVPYmplY3RVUkwgZnVuY3Rpb25h
bGl0eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL2R0
b2EvZG91YmxlLWNvbnZlcnNpb24uaCBiL1NvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJz
L3d0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODZmYjEyNzg5MzRkYjA3
ZGMzM2ZmNTIxOTIzZTFjYTM5ZmU2NDUwMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmgKQEAgLTAs
MCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX2RvdWJsZV9jb252ZXJzaW9uX2gKKyNkZWZp
bmUgV2ViQ29yZV9GV0RfZG91YmxlX2NvbnZlcnNpb25faAorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL2RvdWJsZS1jb252ZXJzaW9uLmg+CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL2NvcHlGb3J3YXJkaW5nSGVhZGVycy5jbWQgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9jb3B5Rm9yd2FyZGluZ0hlYWRlcnMuY21kCmluZGV4IGRhZDVh
ZGYzOTJiNmE3ZDc0N2U5ODE2NzFiZjMyOTNhMzllODlmZjAuLjIyNGNlMDMyODYxZjAwYWY5NTBj
MWI1ZTJlMmE4OGMzZTg5YzZkYTkgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL2NvcHlGb3J3YXJkaW5nSGVhZGVycy5jbWQKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovY29weUZvcndhcmRpbmdIZWFkZXJzLmNtZApAQCAtMTAsNiArMTAsNyBAQCBt
a2RpciAyPk5VTCAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVcaW5jbHVkZVxXZWJDb3JlXEZvcndh
cmRpbmdIZWFkZXJzXG1hc20iCiBta2RpciAyPk5VTCAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVc
aW5jbHVkZVxXZWJDb3JlXEZvcndhcmRpbmdIZWFkZXJzXHByb2ZpbGVyIgogbWtkaXIgMj5OVUwg
IiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGluY2x1ZGVcV2ViQ29yZVxGb3J3YXJkaW5nSGVhZGVy
c1xoZWFwIgogbWtkaXIgMj5OVUwgIiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGluY2x1ZGVcV2Vi
Q29yZVxGb3J3YXJkaW5nSGVhZGVyc1x3dGYiCitta2RpciAyPk5VTCAiJUNPTkZJR1VSQVRJT05C
VUlMRERJUiVcaW5jbHVkZVxXZWJDb3JlXEZvcndhcmRpbmdIZWFkZXJzXHd0ZlxkdG9hIgogbWtk
aXIgMj5OVUwgIiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGluY2x1ZGVcV2ViQ29yZVxGb3J3YXJk
aW5nSGVhZGVyc1x3dGZcdGV4dCIKIG1rZGlyIDI+TlVMICIlQ09ORklHVVJBVElPTkJVSUxERElS
JVxpbmNsdWRlXFdlYkNvcmVcRm9yd2FyZGluZ0hlYWRlcnNcd3RmXHVuaWNvZGUiCiBta2RpciAy
Pk5VTCAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVcaW5jbHVkZVxXZWJDb3JlXEZvcndhcmRpbmdI
ZWFkZXJzXHd0Zlx1bmljb2RlXGljdSIKQEAgLTgxLDYgKzgyLDcgQEAgeGNvcHkgL3kgL2QgIiVQ
cm9qZWN0RGlyJS4uXEZvcndhcmRpbmdIZWFkZXJzXG1hc21cKi5oIiAiJUNPTkZJR1VSQVRJT05C
VUlMRERJUiUKIHhjb3B5IC95IC9kICIlUHJvamVjdERpciUuLlxGb3J3YXJkaW5nSGVhZGVyc1xw
cm9maWxlclwqLmgiICIlQ09ORklHVVJBVElPTkJVSUxERElSJVxpbmNsdWRlXFdlYkNvcmVcRm9y
d2FyZGluZ0hlYWRlcnNccHJvZmlsZXIiCiB4Y29weSAveSAvZCAiJVByb2plY3REaXIlLi5cRm9y
d2FyZGluZ0hlYWRlcnNcaGVhcFwqLmgiICIlQ09ORklHVVJBVElPTkJVSUxERElSJVxpbmNsdWRl
XFdlYkNvcmVcRm9yd2FyZGluZ0hlYWRlcnNcaGVhcCIKIHhjb3B5IC95IC9kICIlUHJvamVjdERp
ciUuLlxGb3J3YXJkaW5nSGVhZGVyc1x3dGZcKi5oIiAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVc
aW5jbHVkZVxXZWJDb3JlXEZvcndhcmRpbmdIZWFkZXJzXHd0ZiIKK3hjb3B5IC95IC9kICIlUHJv
amVjdERpciUuLlxGb3J3YXJkaW5nSGVhZGVyc1x3dGZcZHRvYVwqLmgiICIlQ09ORklHVVJBVElP
TkJVSUxERElSJVxpbmNsdWRlXFdlYkNvcmVcRm9yd2FyZGluZ0hlYWRlcnNcd3RmXGR0b2EiCiB4
Y29weSAveSAvZCAiJVByb2plY3REaXIlLi5cRm9yd2FyZGluZ0hlYWRlcnNcd3RmXHRleHRcKi5o
IiAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVcaW5jbHVkZVxXZWJDb3JlXEZvcndhcmRpbmdIZWFk
ZXJzXHd0Zlx0ZXh0IgogeGNvcHkgL3kgL2QgIiVQcm9qZWN0RGlyJS4uXEZvcndhcmRpbmdIZWFk
ZXJzXHd0Zlx1bmljb2RlXCouaCIgIiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGluY2x1ZGVcV2Vi
Q29yZVxGb3J3YXJkaW5nSGVhZGVyc1x3dGZcdW5pY29kZSIKIHhjb3B5IC95IC9kICIlUHJvamVj
dERpciUuLlxGb3J3YXJkaW5nSGVhZGVyc1x3dGZcdW5pY29kZVxpY3VcKi5oIiAiJUNPTkZJR1VS
QVRJT05CVUlMRERJUiVcaW5jbHVkZVxXZWJDb3JlXEZvcndhcmRpbmdIZWFkZXJzXHd0Zlx1bmlj
b2RlXGljdSIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCmluZGV4IDk4
MTZkYTU3NzA3MWUyNzQ2MGJiMzQ4YTI2YTI5MGU1N2E5YzQ2NDguLmI3MDEzODNjOTYyMmZiNjYz
NjQyZmIwOWIwMzZkN2UzNGYwY2MxYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQcmltaXRpdmVWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2
ZVZhbHVlLmNwcApAQCAtNjA5LDcgKzYwOSw3IEBAIGludCBDU1NQcmltaXRpdmVWYWx1ZTo6Z2V0
SWRlbnQoKSBjb25zdAogc3RhdGljIFN0cmluZyBmb3JtYXROdW1iZXIoZG91YmxlIG51bWJlcikK
IHsKICAgICBEZWNpbWFsTnVtYmVyIGRlY2ltYWwobnVtYmVyKTsKLSAgICAKKwogICAgIFN0cmlu
Z0J1ZmZlciBidWZmZXIoZGVjaW1hbC5idWZmZXJMZW5ndGhGb3JTdHJpbmdEZWNpbWFsKCkpOwog
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGRlY2ltYWwudG9TdHJpbmdEZWNpbWFsKGJ1ZmZlci5jaGFy
YWN0ZXJzKCksIGJ1ZmZlci5sZW5ndGgoKSk7CiAgICAgQVNTRVJUX1VOVVNFRChsZW5ndGgsIGxl
bmd0aCA9PSBidWZmZXIubGVuZ3RoKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MUGFyc2VySWRpb21zLmNwcAppbmRleCAwNThiYjkzMzljZmZmNWQxODNlNDlmN2QyNTg4
MjU4NzMwMjBjYTEyLi4wMzYyMjFiMjFiMTZmOGY1MmFlMjU3MmZiZDM0NjA5ODk2YjdhYTI2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcApA
QCAtNjMsOCArNjMsNyBAQCBTdHJpbmcgc2VyaWFsaXplRm9yTnVtYmVyVHlwZShkb3VibGUgbnVt
YmVyKQogICAgIC8vIEFjY29yZGluZyB0byBIVE1MNSwgInRoZSBiZXN0IHJlcHJlc2VudGF0aW9u
IG9mIHRoZSBudW1iZXIgbiBhcyBhIGZsb2F0aW5nCiAgICAgLy8gcG9pbnQgbnVtYmVyIiBpcyBh
IHN0cmluZyBwcm9kdWNlZCBieSBhcHBseWluZyBUb1N0cmluZygpIHRvIG4uCiAgICAgTnVtYmVy
VG9TdHJpbmdCdWZmZXIgYnVmZmVyOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IG51bWJlclRvU3Ry
aW5nKG51bWJlciwgYnVmZmVyKTsKLSAgICByZXR1cm4gU3RyaW5nKGJ1ZmZlciwgbGVuZ3RoKTsK
KyAgICByZXR1cm4gU3RyaW5nKG51bWJlclRvU3RyaW5nKG51bWJlciwgYnVmZmVyKSk7CiB9CiAK
IGJvb2wgcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGRv
dWJsZSogcmVzdWx0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclZhbHVlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVz
LmNwcAppbmRleCA5MmJhYmQ2N2U5OGQ0YWM1OTBjMzU1MWJhNGFmODZhZjk5NzQ4YmY2Li4xYmQ4
N2VjYjhhZGEyYjI2MmQ0YzdkZDU2MmIzYTZiNGQ4MTBlMTAyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2lmIEVO
QUJMRShJTlNQRUNUT1IpCiAKICNpbmNsdWRlIDx3dGYvRGVjaW1hbE51bWJlci5oPgorI2luY2x1
ZGUgPHd0Zi9kdG9hLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjI1LDcgKzYyNiw3
IEBAIHZvaWQgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6d3JpdGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91
dHB1dCkgY29uc3QKICAgICAgICAgZWxzZQogICAgICAgICAgICAgb3V0cHV0LT5hcHBlbmQoZmFs
c2VTdHJpbmcsIDUpOwogICAgIH0gZWxzZSBpZiAodHlwZSgpID09IFR5cGVOdW1iZXIpIHsKLSAg
ICAgICAgTnVtYmVyVG9TdHJpbmdCdWZmZXIgYnVmZmVyOworICAgICAgICBOdW1iZXJUb1VTdHJp
bmdCdWZmZXIgYnVmZmVyOwogICAgICAgICBpZiAoIWlzZmluaXRlKG1fZG91YmxlVmFsdWUpKSB7
CiAgICAgICAgICAgICBvdXRwdXQtPmFwcGVuZChudWxsU3RyaW5nLCA0KTsKICAgICAgICAgICAg
IHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAppbmRl
eCA0OGY3NTIwMzAxNmJmN2Y1MDZjODE4ZTRjNDFhODczZGZmM2NlYjhiLi4yMmY4MTY4NWEwMGQ4
MzY0MjM1YzM0ZDJjN2RmNTI1MWE2N2IwNzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3IuY3BwCkBAIC0yMDksNyArMjA5LDcgQEAgU3RyaW5nIENvbG9yOjpzZXJp
YWxpemVkKCkgY29uc3QKICAgICBpZiAoIWFscGhhKCkpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQo
JzAnKTsKICAgICBlbHNlIHsKLSAgICAgICAgTnVtYmVyVG9TdHJpbmdCdWZmZXIgYnVmZmVyOwor
ICAgICAgICBOdW1iZXJUb1VTdHJpbmdCdWZmZXIgYnVmZmVyOwogICAgICAgICB1bnNpZ25lZCBs
ZW5ndGggPSBEZWNpbWFsTnVtYmVyKGFscGhhKCkgLyAyNTUuMCkudG9TdHJpbmdEZWNpbWFsKGJ1
ZmZlciwgV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCk7CiAgICAgICAgIHJlc3VsdC5h
cHBlbmQoYnVmZmVyLCBsZW5ndGgpOwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105800</attachid>
            <date>2011-08-31 11:27:10 -0700</date>
            <delta_ts>2011-09-02 15:08:46 -0700</delta_ts>
            <desc>Fixing chromium tests</desc>
            <filename>bug-66346-20110831112709.patch</filename>
            <type>text/plain</type>
            <size>333159</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQxMTAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDVj
M2JiYzJlY2FhZDAzN2Q2NjBmMTcyY2IyNjQxMDQwMTcwMmNiNDMuLjkxYTk2NDAzOTdlMmEyNjg1
MmJjNDI5ZWY0NmYzNDZhNzQyN2YwY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDEyNCBAQAorMjAxMS0wOC0zMSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBw
bGUuY29tPgorCisgICAgICAgIEluY29ycG9yYXRlIG5ld2VyLCBmYXN0ZXIgZHRvYSBsaWJyYXJ5
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM0Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIG5l
dyBkdG9hIGxpYnJhcnkgYXQgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2RvdWJsZS1jb252ZXJz
aW9uLy4KKyAgICAgICAgUmVwbGFjZWQgb2xkIGNhbGwgdG8gZHRvYS4gIFRoZSBuZXcgbGlicmFy
eSBpcyBtdWNoIGZhc3RlciB0aGFuIHRoZSBvbGQgb25lLgorICAgICAgICBXZSBzdGlsbCB1c2Ug
dGhlIG9sZCBkdG9hIGZvciBzb21lIHN0dWZmIGluIFdlYkNvcmUgYXMgd2VsbCBhcyB0aGUgb2xk
IHN0cnRvZCwgCisgICAgICAgIGJ1dCB3ZSBjYW4gcGhhc2UgdGhlc2Ugb3V0IGV2ZW50dWFsbHkg
YXMgd2VsbC4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2
YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmd5cGk6CisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRl
ZjoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvY29weS1m
aWxlcy5jbWQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9q
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcDoKKyAgICAgICAgKiBydW50
aW1lL051bWJlclByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6Om51bWJlclByb3RvRnVuY1Rv
RXhwb25lbnRpYWwpOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1bmNUb0ZpeGVkKToKKyAg
ICAgICAgKEpTQzo6bnVtYmVyUHJvdG9GdW5jVG9QcmVjaXNpb24pOgorICAgICAgICAqIHJ1bnRp
bWUvVVN0cmluZy5jcHA6CisgICAgICAgIChKU0M6OlVTdHJpbmc6Om51bWJlcik6CisgICAgICAg
ICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmdQdGhyZWFkcy5j
cHA6CisgICAgICAgIChXVEY6OmluaXRpYWxpemVUaHJlYWRpbmcpOgorICAgICAgICAqIHd0Zi9U
aHJlYWRpbmdXaW4uY3BwOgorICAgICAgICAoV1RGOjppbml0aWFsaXplVGhyZWFkaW5nKToKKyAg
ICAgICAgKiB3dGYvZHRvYS5jcHA6CisgICAgICAgIChXVEY6OmR0b2EpOgorICAgICAgICAqIHd0
Zi9kdG9hLmg6CisgICAgICAgICogd3RmL2R0b2EvQ09QWUlORzogQWRkZWQuCisgICAgICAgICog
d3RmL2R0b2EvTElDRU5TRTogQWRkZWQuCisgICAgICAgICogd3RmL2R0b2EvUkVBRE1FOiBBZGRl
ZC4KKyAgICAgICAgKiB3dGYvZHRvYS9iaWdudW0tZHRvYS5jYzogQWRkZWQuCisgICAgICAgICog
d3RmL2R0b2EvYmlnbnVtLWR0b2EuaDogQWRkZWQuCisgICAgICAgICogd3RmL2R0b2EvYmlnbnVt
LmNjOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9iaWdudW0uaDogQWRkZWQuCisgICAgICAg
IChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpCaWdudW06OlRpbWVzMTApOgorICAgICAgICAoV1RG
Ojpkb3VibGVfY29udmVyc2lvbjo6QmlnbnVtOjpFcXVhbCk6CisgICAgICAgIChXVEY6OmRvdWJs
ZV9jb252ZXJzaW9uOjpCaWdudW06Okxlc3NFcXVhbCk6CisgICAgICAgIChXVEY6OmRvdWJsZV9j
b252ZXJzaW9uOjpCaWdudW06Okxlc3MpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lv
bjo6QmlnbnVtOjpQbHVzRXF1YWwpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6
QmlnbnVtOjpQbHVzTGVzc0VxdWFsKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246
OkJpZ251bTo6UGx1c0xlc3MpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6Qmln
bnVtOjpFbnN1cmVDYXBhY2l0eSk6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpC
aWdudW06OkJpZ2l0TGVuZ3RoKToKKyAgICAgICAgKiB3dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmNj
OiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmg6IEFkZGVkLgorICAg
ICAgICAqIHd0Zi9kdG9hL2RpeS1mcC5jYzogQWRkZWQuCisgICAgICAgICogd3RmL2R0b2EvZGl5
LWZwLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RGl5RnA6OkRp
eUZwKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246OkRpeUZwOjpTdWJ0cmFjdCk6
CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpEaXlGcDo6TWludXMpOgorICAgICAg
ICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RGl5RnA6OlRpbWVzKToKKyAgICAgICAgKFdURjo6
ZG91YmxlX2NvbnZlcnNpb246OkRpeUZwOjpOb3JtYWxpemUpOgorICAgICAgICAoV1RGOjpkb3Vi
bGVfY29udmVyc2lvbjo6RGl5RnA6OmYpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lv
bjo6RGl5RnA6OmUpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RGl5RnA6OnNl
dF9mKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246OkRpeUZwOjpzZXRfZSk6Cisg
ICAgICAgICogd3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uY2M6IEFkZGVkLgorICAgICAgICAq
IHd0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpkb3Vi
bGVfY29udmVyc2lvbjo6RG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6OkRvdWJsZVRvU3RyaW5nQ29u
dmVydGVyKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246OlN0cmluZ1RvRG91Ymxl
Q29udmVydGVyOjpTdHJpbmdUb0RvdWJsZUNvbnZlcnRlcik6CisgICAgICAgICogd3RmL2R0b2Ev
ZG91YmxlLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6ZG91Ymxl
X3RvX3VpbnQ2NCk6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjp1aW50NjRfdG9f
ZG91YmxlKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZTo6RG91Ymxl
KToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZTo6QXNEaXlGcCk6Cisg
ICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGU6OkFzTm9ybWFsaXplZERpeUZw
KToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZTo6QXNVaW50NjQpOgor
ICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpOZXh0RG91YmxlKToKKyAg
ICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZTo6RXhwb25lbnQpOgorICAgICAg
ICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpTaWduaWZpY2FuZCk6CisgICAgICAg
IChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGU6OklzRGVub3JtYWwpOgorICAgICAgICAo
V1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpJc1NwZWNpYWwpOgorICAgICAgICAoV1RG
Ojpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpJc05hbik6CisgICAgICAgIChXVEY6OmRvdWJs
ZV9jb252ZXJzaW9uOjpEb3VibGU6OklzSW5maW5pdGUpOgorICAgICAgICAoV1RGOjpkb3VibGVf
Y29udmVyc2lvbjo6RG91YmxlOjpTaWduKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNp
b246OkRvdWJsZTo6VXBwZXJCb3VuZGFyeSk6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJz
aW9uOjpEb3VibGU6Ok5vcm1hbGl6ZWRCb3VuZGFyaWVzKToKKyAgICAgICAgKFdURjo6ZG91Ymxl
X2NvbnZlcnNpb246OkRvdWJsZTo6dmFsdWUpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVy
c2lvbjo6RG91YmxlOjpTaWduaWZpY2FuZFNpemVGb3JPcmRlck9mTWFnbml0dWRlKToKKyAgICAg
ICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246OkRvdWJsZTo6SW5maW5pdHkpOgorICAgICAgICAo
V1RGOjpkb3VibGVfY29udmVyc2lvbjo6RG91YmxlOjpOYU4pOgorICAgICAgICAoV1RGOjpkb3Vi
bGVfY29udmVyc2lvbjo6RG91YmxlOjpEaXlGcFRvVWludDY0KToKKyAgICAgICAgKiB3dGYvZHRv
YS9mYXN0LWR0b2EuY2M6IEFkZGVkLgorICAgICAgICAqIHd0Zi9kdG9hL2Zhc3QtZHRvYS5oOiBB
ZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS9maXhlZC1kdG9hLmNjOiBBZGRlZC4KKyAgICAgICAg
KiB3dGYvZHRvYS9maXhlZC1kdG9hLmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9kdG9hL3N0cnRv
ZC5jYzogQWRkZWQuCisgICAgICAgICogd3RmL2R0b2Evc3RydG9kLmg6IEFkZGVkLgorICAgICAg
ICAqIHd0Zi9kdG9hL3V0aWxzLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVy
c2lvbjo6TWF4KToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246Ok1pbik6CisgICAg
ICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpTdHJMZW5ndGgpOgorICAgICAgICAoV1RGOjpk
b3VibGVfY29udmVyc2lvbjo6VmVjdG9yOjpWZWN0b3IpOgorICAgICAgICAoV1RGOjpkb3VibGVf
Y29udmVyc2lvbjo6VmVjdG9yOjpTdWJWZWN0b3IpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29u
dmVyc2lvbjo6VmVjdG9yOjpsZW5ndGgpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lv
bjo6VmVjdG9yOjppc19lbXB0eSk6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpW
ZWN0b3I6OnN0YXJ0KToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246OlZlY3Rvcjo6
b3BlcmF0b3JbXSk6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpWZWN0b3I6OmZp
cnN0KToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246OlZlY3Rvcjo6bGFzdCk6Cisg
ICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdCdWlsZGVyOjpTdHJpbmdCdWls
ZGVyKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246OlN0cmluZ0J1aWxkZXI6On5T
dHJpbmdCdWlsZGVyKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246OlN0cmluZ0J1
aWxkZXI6OnNpemUpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6U3RyaW5nQnVp
bGRlcjo6cG9zaXRpb24pOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6U3RyaW5n
QnVpbGRlcjo6UmVzZXQpOgorICAgICAgICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6U3RyaW5n
QnVpbGRlcjo6QWRkQ2hhcmFjdGVyKToKKyAgICAgICAgKFdURjo6ZG91YmxlX2NvbnZlcnNpb246
OlN0cmluZ0J1aWxkZXI6OkFkZFN0cmluZyk6CisgICAgICAgIChXVEY6OmRvdWJsZV9jb252ZXJz
aW9uOjpTdHJpbmdCdWlsZGVyOjpBZGRTdWJzdHJpbmcpOgorICAgICAgICAoV1RGOjpkb3VibGVf
Y29udmVyc2lvbjo6U3RyaW5nQnVpbGRlcjo6QWRkUGFkZGluZyk6CisgICAgICAgIChXVEY6OmRv
dWJsZV9jb252ZXJzaW9uOjpTdHJpbmdCdWlsZGVyOjpGaW5hbGl6ZSk6CisgICAgICAgIChXVEY6
OmRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdCdWlsZGVyOjppc19maW5hbGl6ZWQpOgorICAgICAg
ICAoV1RGOjpkb3VibGVfY29udmVyc2lvbjo6Qml0Q2FzdCk6CisgICAgICAgICogd3RmL3d0Zi5w
cmk6CisKIDIwMTEtMDgtMzAgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAogICAg
ICAgICBUeXBlZEFycmF5cyBkb24ndCBlbnN1cmUgdGhhdCBkZW5vcm1hbGlzZWQgdmFsdWVzIGFy
ZSBub3JtYWxpc2VkCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZp
bGUubGlzdC5hbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmlu
ZGV4IGMwYzZiNzAzZTNjNWUwZDdmNjZiMWFlODRjNDlhZTdkYTMzMjk3NmEuLmI2MTE3NmM2YWUx
OGM1ZWE1MmI2MzM4YzY3NmI0M2QzYTVmNGI0YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCkBAIC00NjcsOSArNDY3LDI3IEBAIGphdmFzY3JpcHRjb3JlX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ3VycmVudFRpbWUuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EYXRlTWF0aC5jcHAgXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvRGF0ZU1hdGguaCBcCi0JU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EZWNp
bWFsTnVtYmVyLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGVjaW1hbE51bWJlci5j
cHAgXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGVjb2Rlci5oIFwKKyAgICBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL0RlY2ltYWxOdW1iZXIuY3BwIFwKKyAgICBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL0RlY2ltYWxOdW1iZXIuaCBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9kdG9hL2JpZ251bS1kdG9hLmNjIFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L2R0b2EvYmlnbnVtLmNjIFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvY2Fj
aGVkLXBvd2Vycy5jYyBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2RpeS1m
cC5jYyBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2RvdWJsZS1jb252ZXJz
aW9uLmNjIFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZmFzdC1kdG9hLmNj
IFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZml4ZWQtZHRvYS5jYyBcCisg
ICAgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL3N0cnRvZC5jYyBcCisgICAgU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS1kdG9hLmggXAorICAgIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvZHRvYS9iaWdudW0uaCBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9kdG9hL2NhY2hlZC1wb3dlcnMuaCBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9kdG9hL2RpeS1mcC5oIFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZG91
YmxlLWNvbnZlcnNpb24uaCBcCisgICAgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2Rv
dWJsZS5oIFwKKyAgICBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZmFzdC1kdG9hLmgg
XAorICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9maXhlZC1kdG9hLmggXAorICAg
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9zdHJ0b2QuaCBcCisgICAgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9kdG9hL3V0aWxzLmggXAorICAgIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvRGVjb2Rlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RlcXVlLmggXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGlzYWxsb3dDVHlwZS5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL0RvdWJseUxpbmtlZExpc3QuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLmV4cAppbmRleCA5ZjRhM2JkY2EyMTNiM2I1YjUyZjU4ZmY0NmIxYjM3
MGIwZDg1ZGU3Li5mZjJiY2UzOWQzZTEzNzdiYzYxZGNiYmQ0YzYwNTMwNzM4N2Q5NWUxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKQEAgLTM4Niw4ICszODYsNiBA
QCBfX1pOM1dURjExT1NBbGxvY2F0b3IxNnJlc2VydmVBbmRDb21taXRFbU5TMF81VXNhZ2VFYmJi
CiBfX1pOM1dURjExT1NBbGxvY2F0b3IxOHJlbGVhc2VEZWNvbW1pdHRlZEVQdm0KIF9fWk4zV1RG
MTFjb21tZW50QXRvbUUKIF9fWk4zV1RGMTFjdXJyZW50VGltZUV2Ci1fX1pOM1dURjExZHRvYVJv
dW5kRFBFUGNkaVJiUmlSagotX19aTjNXVEYxMWR0b2FSb3VuZFNGRVBjZGlSYlJpUmoKIF9fWk4z
V1RGMTFlbXB0eVN0cmluZ0V2CiBfX1pOM1dURjExZmFzdFJlYWxsb2NFUHZtCiBfX1pOM1dURjEy
QXRvbWljU3RyaW5nMTFhZGRTbG93Q2FzZUVQTlNfMTBTdHJpbmdJbXBsRQpAQCAtNDE2LDcgKzQx
NCw3IEBAIF9fWk4zV1RGMTNjdXJyZW50VGhyZWFkRXYKIF9fWk4zV1RGMTN0cnlGYXN0Q2FsbG9j
RW1tCiBfX1pOM1dURjEzdHJ5RmFzdE1hbGxvY0VtCiBfX1pOM1dURjE0ZmFzdE1hbGxvY1NpemVF
UEt2Ci1fX1pOM1dURjE0bnVtYmVyVG9TdHJpbmdFZFB0CitfX1pOM1dURjE0bnVtYmVyVG9TdHJp
bmdFZFBjCiBfX1pOM1dURjE0dHJ5RmFzdFJlYWxsb2NFUHZtCiBfX1pOM1dURjE1VGhyZWFkQ29u
ZGl0aW9uNHdhaXRFUk5TXzVNdXRleEUKIF9fWk4zV1RGMTVUaHJlYWRDb25kaXRpb242c2lnbmFs
RXYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBp
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkKaW5kZXggNjEyMDQ5
MmUyOTI4NDYyOTNiMjUzODEzYzI5OGQ0MWE4YmZmYjM0ZC4uZmE5ZDMxZTJiZGUwOWJmZjAwMzRi
MzZjM2E0ZDk1YTJhMWI4OGQzNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLmd5cGkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLmd5cGkKQEAgLTIxNyw2ICsyMTcsMTYgQEAKICAgICAgICAgICAgICd3dGYvVmVjdG9yVHJh
aXRzLmgnLAogICAgICAgICAgICAgJ3d0Zi9XVEZUaHJlYWREYXRhLmgnLAogICAgICAgICAgICAg
J3d0Zi9kdG9hLmgnLAorICAgICAgICAgICAgJ3d0Zi9kdG9hL2JpZ251bS1kdG9hLmgnLAorICAg
ICAgICAgICAgJ3d0Zi9kdG9hL2JpZ251bS5oJywKKyAgICAgICAgICAgICd3dGYvZHRvYS9jYWNo
ZWQtcG93ZXJzLmgnLAorICAgICAgICAgICAgJ3d0Zi9kdG9hL2RpeS1mcC5oJywKKyAgICAgICAg
ICAgICd3dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5oJywKKyAgICAgICAgICAgICd3dGYvZHRv
YS9kb3VibGUuaCcsCisgICAgICAgICAgICAnd3RmL2R0b2EvZmFzdC1kdG9hLmgnLAorICAgICAg
ICAgICAgJ3d0Zi9kdG9hL2ZpeGVkLWR0b2EuaCcsCisgICAgICAgICAgICAnd3RmL2R0b2Evc3Ry
dG9kLmgnLAorICAgICAgICAgICAgJ3d0Zi9kdG9hL3V0aWxzLmgnLAogICAgICAgICAgICAgJ3d0
Zi90ZXh0L0F0b21pY1N0cmluZy5oJywKICAgICAgICAgICAgICd3dGYvdGV4dC9BdG9taWNTdHJp
bmdIYXNoLmgnLAogICAgICAgICAgICAgJ3d0Zi90ZXh0L0F0b21pY1N0cmluZ0ltcGwuaCcsCkBA
IC02MzEsNiArNjQxLDE0IEBACiAgICAgICAgICAgICAnd3RmL2Nocm9taXVtL0Nocm9taXVtVGhy
ZWFkaW5nLmgnLAogICAgICAgICAgICAgJ3d0Zi9jaHJvbWl1bS9NYWluVGhyZWFkQ2hyb21pdW0u
Y3BwJywKICAgICAgICAgICAgICd3dGYvZHRvYS5jcHAnLAorICAgICAgICAgICAgJ3d0Zi9kdG9h
L2JpZ251bS1kdG9hLmNjJywKKyAgICAgICAgICAgICd3dGYvZHRvYS9iaWdudW0uY2MnLAorICAg
ICAgICAgICAgJ3d0Zi9kdG9hL2NhY2hlZC1wb3dlcnMuY2MnLAorICAgICAgICAgICAgJ3d0Zi9k
dG9hL2RpeS1mcC5jYycsCisgICAgICAgICAgICAnd3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24u
Y2MnLAorICAgICAgICAgICAgJ3d0Zi9kdG9hL2Zhc3QtZHRvYS5jYycsCisgICAgICAgICAgICAn
d3RmL2R0b2EvZml4ZWQtZHRvYS5jYycsCisgICAgICAgICAgICAnd3RmL2R0b2Evc3RydG9kLmNj
JywKICAgICAgICAgICAgICd3dGYvZWZsL01haW5UaHJlYWRFZmwuY3BwJywKICAgICAgICAgICAg
ICd3dGYvZ29iamVjdC9HT3duUHRyLmNwcCcsCiAgICAgICAgICAgICAnd3RmL2dvYmplY3QvR093
blB0ci5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS5kZWYKaW5kZXggZDFjZmY3ODYzNzdhMGQ0MTM2MmNkMmVmYjdiODVlYzM5MmUwNWJjNC4u
NzdlNjY5ZWI2MjU4M2NkNDg1YjliNmJhZmZkMDAzNmVjZmZhM2Q0OCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5kZWYKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYKQEAgLTQxLDYgKzQx
LDExIEBAIEVYUE9SVFMKICAgICA/PzFXZWFrSGFuZGxlT3duZXJASlNDQEBVQUVAWFoKICAgICA/
PzhKU0NAQFlBX05BQlZVU3RyaW5nQDBAMEBaCiAgICAgPz84V1RGQEBZQV9OQUJWQ1N0cmluZ0Aw
QDBAWgorICAgID9FY21hU2NyaXB0Q29udmVydGVyQERvdWJsZVRvU3RyaW5nQ29udmVydGVyQGRv
dWJsZV9jb252ZXJzaW9uQFdURkBAU0FBQlYxMjNAWFoKKyAgICA/VG9FeHBvbmVudGlhbEBEb3Vi
bGVUb1N0cmluZ0NvbnZlcnRlckBkb3VibGVfY29udmVyc2lvbkBXVEZAQFFCRV9OTkhQQVZTdHJp
bmdCdWlsZGVyQDIzQEBaCisgICAgP1RvRml4ZWRARG91YmxlVG9TdHJpbmdDb252ZXJ0ZXJAZG91
YmxlX2NvbnZlcnNpb25AV1RGQEBRQkVfTk5IUEFWU3RyaW5nQnVpbGRlckAyM0BAWgorICAgID9U
b1ByZWNpc2lvbkBEb3VibGVUb1N0cmluZ0NvbnZlcnRlckBkb3VibGVfY29udmVyc2lvbkBXVEZA
QFFCRV9OTkhQQVZTdHJpbmdCdWlsZGVyQDIzQEBaCisgICAgP1RvU2hvcnRlc3RARG91YmxlVG9T
dHJpbmdDb252ZXJ0ZXJAZG91YmxlX2NvbnZlcnNpb25AV1RGQEBRQkVfTk5QQVZTdHJpbmdCdWls
ZGVyQDIzQEBaCiAgICAgP2Fic29sdXRlVGltZVRvV2FpdFRpbWVvdXRJbnRlcnZhbEBXVEZAQFlB
S05AWgogICAgID9hY3Rpdml0eUNhbGxiYWNrQEhlYXBASlNDQEBRQUVQQVZHQ0FjdGl2aXR5Q2Fs
bGJhY2tAMkBYWgogICAgID9hZGRASWRlbnRpZmllckBKU0NAQFNBP0FWPyRQYXNzUmVmUHRyQFZT
dHJpbmdJbXBsQFdURkBAQFdURkBAUEFWRXhlY1N0YXRlQDJAUEJEQFoKQEAgLTIxNSw2ICsyMjAs
NyBAQCBFWFBPUlRTCiAgICAgP2luY3JlbWVudEBSZWZDb3VudGVkTGVha0NvdW50ZXJAV1RGQEBR
QUVYWFoKICAgICA/aW5pdEBBdG9taWNTdHJpbmdAV1RGQEBTQVhYWgogICAgID9pbml0QEpTR2xv
YmFsT2JqZWN0QEpTQ0BAQUFFWFBBVkpTT2JqZWN0QDJAQFoKKyAgICA/aW5pdGlhbGl6ZUBkb3Vi
bGVfY29udmVyc2lvbkBXVEZAQFlBWFhaCiAgICAgP2luaXRpYWxpemVNYWluVGhyZWFkQFdURkBA
WUFYWFoKICAgICA/aW5pdGlhbGl6ZVRocmVhZGluZ0BKU0NAQFlBWFhaCiAgICAgP2luaXRpYWxp
emVUaHJlYWRpbmdAV1RGQEBZQVhYWgpAQCAtMjUwLDcgKzI1Niw3IEBAIEVYUE9SVFMKICAgICA/
bnVtYmVyQFVTdHJpbmdASlNDQEBTQT9BVjEyQEhAWgogICAgID9udW1iZXJAVVN0cmluZ0BKU0NA
QFNBP0FWMTJASUBaCiAgICAgP251bWJlckBVU3RyaW5nQEpTQ0BAU0E/QVYxMkBOQFoKLSAgICA/
bnVtYmVyVG9TdHJpbmdAV1RGQEBZQUlOUUFfV0BaCisgICAgP251bWJlclRvU3RyaW5nQFdURkBA
WUFQQkROUUFEQFoKICAgICA/b2JqZWN0Q291bnRASGVhcEBKU0NAQFFBRUlYWgogICAgID9vYmpl
Y3RQcm90b0Z1bmNUb1N0cmluZ0BKU0NAQFlJX0pQQVZFeGVjU3RhdGVAMUBAWgogICAgID9wYXJz
ZURhdGVGcm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWN0ZXJzQFdURkBAWUFOUEJEQFoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlw
dENvcmUvY29weS1maWxlcy5jbWQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL2NvcHktZmlsZXMuY21kCmluZGV4IGU0MDc1YTQ1ZDc1
YWY5MDVmNGE0MDMwMWZmMWM2MmY1ZjdkOWJkODguLjU1MTAyMWFkZTUzMWQ1NGQxNjkzZWI5MGRm
M2YyMWJkNTUyMjI1M2UgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvY29weS1maWxlcy5jbWQKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9jb3B5
LWZpbGVzLmNtZApAQCAtNDYsNiArNDYsNyBAQCBmb3IgJSVkIGluICgKICAgICBwcm9maWxlcgog
ICAgIHJ1bnRpbWUKICAgICB3dGYKKyAgICB3dGZcZHRvYQogICAgIHd0Zlx0ZXh0CiAgICAgd3Rm
XHVuaWNvZGUKICAgICB3dGZcdW5pY29kZVxpY3UKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2ogYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qCmluZGV4IDM0
OGMyNmYwMTk4MWQxMzk3NGI0ZWIzYjc1M2EyYzk5OWMyZjhiMmQuLmVmNDNkYWE0OWExOWIwZDc3
YTQ1MzQwNmYxYTVhOWQ2ZDliZjIwNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvagpAQCAtNTEyLDYg
KzUxMiw4MiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJPC9GaWx0ZXI+CisgICAgICAgIDxGaWx0
ZXIKKyAgICAgICAgICAgIE5hbWU9ImR0b2EiCisgICAgICAgICAgICA+CisgICAgICAgICAgICA8
RmlsZQorICAgICAgICAgICAgICAgIFJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXGR0b2FcYmlnbnVt
LWR0b2EuY2MiCisgICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgPC9GaWxlPgorICAgICAg
ICAgICAgPEZpbGUKKyAgICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxkdG9h
XGJpZ251bS1kdG9hLmgiCisgICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgPC9GaWxlPgor
ICAgICAgICAgICAgPEZpbGUKKyAgICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0
ZlxkdG9hXGJpZ251bS5jYyIKKyAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICA8L0ZpbGU+
CisgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgIFJlbGF0aXZlUGF0aD0iLi5cLi5c
d3RmXGR0b2FcYmlnbnVtLmgiCisgICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgPC9GaWxl
PgorICAgICAgICAgICAgPEZpbGUKKyAgICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXC4u
XHd0ZlxkdG9hXGNhY2hlZC1wb3dlcnMuY2MiCisgICAgICAgICAgICAgICAgPgorICAgICAgICAg
ICAgPC9GaWxlPgorICAgICAgICAgICAgPEZpbGUKKyAgICAgICAgICAgICAgICBSZWxhdGl2ZVBh
dGg9Ii4uXC4uXHd0ZlxkdG9hXGNhY2hlZC1wb3dlcnMuaCIKKyAgICAgICAgICAgICAgICA+Cisg
ICAgICAgICAgICA8L0ZpbGU+CisgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgIFJl
bGF0aXZlUGF0aD0iLi5cLi5cd3RmXGR0b2FcZGl5LWZwLmNjIgorICAgICAgICAgICAgICAgID4K
KyAgICAgICAgICAgIDwvRmlsZT4KKyAgICAgICAgICAgIDxGaWxlCisgICAgICAgICAgICAgICAg
UmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcZHRvYVxkaXktZnAuaCIKKyAgICAgICAgICAgICAgICA+
CisgICAgICAgICAgICA8L0ZpbGU+CisgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAg
IFJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXGR0b2FcZG91YmxlLWNvbnZlcnNpb24uY2MiCisgICAg
ICAgICAgICAgICAgPgorICAgICAgICAgICAgPC9GaWxlPgorICAgICAgICAgICAgPEZpbGUKKyAg
ICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxkdG9hXGRvdWJsZS1jb252ZXJz
aW9uLmgiCisgICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgPC9GaWxlPgorICAgICAgICAg
ICAgPEZpbGUKKyAgICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxkdG9hXGRv
dWJsZS5oIgorICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAgIDwvRmlsZT4KKyAgICAgICAg
ICAgIDxGaWxlCisgICAgICAgICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcZHRvYVxm
YXN0LWR0b2EuY2MiCisgICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgPC9GaWxlPgorICAg
ICAgICAgICAgPEZpbGUKKyAgICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0Zlxk
dG9hXGZhc3QtZHRvYS5oIgorICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAgIDwvRmlsZT4K
KyAgICAgICAgICAgIDxGaWxlCisgICAgICAgICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlwuLlx3
dGZcZHRvYVxmaXhlZC1kdG9hLmNjIgorICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAgIDwv
RmlsZT4KKyAgICAgICAgICAgIDxGaWxlCisgICAgICAgICAgICAgICAgUmVsYXRpdmVQYXRoPSIu
LlwuLlx3dGZcZHRvYVxmaXhlZC1kdG9hLmgiCisgICAgICAgICAgICAgICAgPgorICAgICAgICAg
ICAgPC9GaWxlPgorICAgICAgICAgICAgPEZpbGUKKyAgICAgICAgICAgICAgICBSZWxhdGl2ZVBh
dGg9Ii4uXC4uXHd0ZlxkdG9hXHN0cnRvZC5jYyIKKyAgICAgICAgICAgICAgICA+CisgICAgICAg
ICAgICA8L0ZpbGU+CisgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgIFJlbGF0aXZl
UGF0aD0iLi5cLi5cd3RmXGR0b2Fcc3RydG9kLmgiCisgICAgICAgICAgICAgICAgPgorICAgICAg
ICAgICAgPC9GaWxlPgorICAgICAgICAgICAgPEZpbGUKKyAgICAgICAgICAgICAgICBSZWxhdGl2
ZVBhdGg9Ii4uXC4uXHd0ZlxkdG9hXHV0aWxzLmgiCisgICAgICAgICAgICAgICAgPgorICAgICAg
ICAgICAgPC9GaWxlPgorICAgICAgICA8L0ZpbHRlcj4KIAkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0
aD0iLi5cLi5cd3RmXEFsaWdubWVudC5oIgogCQkJPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCBjYjY2N2Q4YmFjMmVhMTYxOTllODY2ZTA0ZThhNTE0ZjkxYWQ3ZjQ5Li5kYjk3OGVl
ZjBhMDRlYzdlNDRlZDljNTQyOTRlNTg2ZGM3OTQzNTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtNDgsOCArNDgsNiBAQAogCQkwQkRGRkFFMDBGQzYxOTI5MDBENjlFRjQgLyog
Q3Jvc3NUaHJlYWRSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwQkRGRkFENDBGQzYxNzEwMDBENjlFRjQgLyogQ3Jvc3NUaHJlYWRSZWZD
b3VudGVkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEJERkZBRTEwRkM2MTkzMTAwRDY5RUY0IC8qIE93bkZhc3RNYWxsb2NQdHIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBCREZGQUQxMEZDNjE2RUMw
MEQ2OUVGNCAvKiBPd25GYXN0TWFsbG9jUHRyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEJGMjhBMjkxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVM
aW1pdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMuY3BwICovOyB9OwotCQkwRjI5
NDc5QzEyNkU2OThDMDBCM0FCRjUgLyogRGVjaW1hbE51bWJlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI5NDc5QjEyNkU2OThDMDBCM0FCRjUg
LyogRGVjaW1hbE51bWJlci5jcHAgKi87IH07Ci0JCTBGNzcwMDkwMTQwMkZERTQwMDc4RUIzOSAv
KiBTYW1wbGluZ0NvdW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNzcwMDhFMTQwMkZERDYwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjc3MDA5
MjE0MDJGRjNDMDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzcwMDkxMTQwMkZGMjgwMDc4RUIzOSAv
KiBTYW1wbGluZ0NvdW50ZXIuY3BwICovOyB9OwogCQkwRjk2M0IzODEzRkM2RkU5MDAwMkQ5QjIg
LyogVmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjk2M0IzNjEzRkM2RkRFMDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZDODE1MTUxNDA1
MTE5QjAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUxNDE0MDUxMThEMDBDRkE2MDMgLyogVlRhYmxl
U3BlY3RydW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMjU1LDcgKzI1Myw2IEBACiAJCTg2MDE2MUU2MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNy
b0Fzc2VtYmxlclg4NkNvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODYwMTYxRTIwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2
Q29tbW9uLmggKi87IH07CiAJCTg2MjZCRUNGMTE5MjhFMzkwMDc4MkZBQiAvKiBTdHJpbmdTdGF0
aWNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2
MjZCRUNFMTE5MjhFMzkwMDc4MkZBQiAvKiBTdHJpbmdTdGF0aWNzLmNwcCAqLzsgfTsKIAkJODYy
N0U1RUMxMUYxMjgxOTAwQTMxM0I1IC8qIFBhZ2VBbGxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjI3RTVFQTExRjEyODE5MDBBMzEzQjUg
LyogUGFnZUFsbG9jYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQk4NjJBRjRCNjEyMjM5QzdCMDAyNEU1QjggLyogRGVjaW1hbE51bWJlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODYyQUY0QjUx
MjIzOUM3QjAwMjRFNUI4IC8qIERlY2ltYWxOdW1iZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NjNCMjNFMDBGQzYxMTg5MDA3MDNBQTQgLyog
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4NjNCMjNERjBGQzYwRTYyMDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJODY0MzhGQzQxMjY1NTAzRTAwRTBERkNBIC8qIFN0cmluZ0J1aWxkZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY0MzhGQzMxMjY1NTAzRTAw
RTBERkNBIC8qIFN0cmluZ0J1aWxkZXIuY3BwICovOyB9OwogCQk4NjU2NTc0MjExNUJFM0RBMDAy
OTFGNDAgLyogQ1N0cmluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4NjU2NTc0MDExNUJFM0RBMDAyOTFGNDAgLyogQ1N0cmluZy5jcHAgKi87IH07
CkBAIC02MDAsNiArNTk3LDI3IEBACiAJCUJDRkQ4QzkyMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1w
VGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkNGRDhDOTAwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5jcHAgKi87IH07CiAJCUJDRkQ4
QzkzMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkQ4QzkxMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1w
VGFibGUuaCAqLzsgfTsKIAkJQzBBMjcyNjMwRTUwQTA2MzAwRTk2RTE1IC8qIE5vdEZvdW5kLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMEEyNzIzRjBF
NTA5RjFFMDBFOTZFMTUgLyogTm90Rm91bmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQlDMjJCMzFCOTE0MDU3N0Q3MDBEQjQ3NUEgLyogU2FtcGxp
bmdDb3VudGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjc3MDA4RTE0MDJGREQ2MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIyQzUyRjExM0ZBRjZF
RjAwQjdEQzBEIC8qIGJpZ251bS1kdG9hLmNjIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQzIyQzUyOTAxM0ZBRjZFRjAwQjdEQzBEIC8qIGJpZ251bS1kdG9h
LmNjICovOyB9OworCQlDMjJDNTJGMjEzRkFGNkVGMDBCN0RDMEQgLyogYmlnbnVtLWR0b2EuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1MjkxMTNG
QUY2RUYwMEI3REMwRCAvKiBiaWdudW0tZHRvYS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCUMyMkM1MkYzMTNGQUY2RUYwMEI3REMwRCAvKiBiaWdu
dW0uY2MgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJD
NTI5MjEzRkFGNkVGMDBCN0RDMEQgLyogYmlnbnVtLmNjICovOyB9OworCQlDMjJDNTJGNDEzRkFG
NkVGMDBCN0RDMEQgLyogYmlnbnVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDMjJDNTI5MzEzRkFGNkVGMDBCN0RDMEQgLyogYmlnbnVtLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIyQzUyRjUxM0ZB
RjZFRjAwQjdEQzBEIC8qIGNhY2hlZC1wb3dlcnMuY2MgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTI5NDEzRkFGNkVGMDBCN0RDMEQgLyogY2FjaGVk
LXBvd2Vycy5jYyAqLzsgfTsKKwkJQzIyQzUyRjYxM0ZBRjZFRjAwQjdEQzBEIC8qIGNhY2hlZC1w
b3dlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMy
MkM1Mjk1MTNGQUY2RUYwMEI3REMwRCAvKiBjYWNoZWQtcG93ZXJzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIyQzUyRjcxM0ZBRjZFRjAwQjdE
QzBEIC8qIGRpeS1mcC5jYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEMyMkM1Mjk3MTNGQUY2RUYwMEI3REMwRCAvKiBkaXktZnAuY2MgKi87IH07CisJCUMy
MkM1MkY4MTNGQUY2RUYwMEI3REMwRCAvKiBkaXktZnAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1Mjk4MTNGQUY2RUYwMEI3REMwRCAvKiBkaXkt
ZnAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlD
MjJDNTJGOTEzRkFGNkVGMDBCN0RDMEQgLyogZG91YmxlLWNvbnZlcnNpb24uY2MgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTI5OTEzRkFGNkVGMDBC
N0RDMEQgLyogZG91YmxlLWNvbnZlcnNpb24uY2MgKi87IH07CisJCUMyMkM1MkZBMTNGQUY2RUYw
MEI3REMwRCAvKiBkb3VibGUtY29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyQzUyOUExM0ZBRjZFRjAwQjdEQzBEIC8qIGRvdWJsZS1j
b252ZXJzaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJQzIyQzUyRkIxM0ZBRjZFRjAwQjdEQzBEIC8qIGRvdWJsZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyQzUyOUIxM0ZBRjZFRjAwQjdEQzBE
IC8qIGRvdWJsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCUMyMkM1MkZDMTNGQUY2RUYwMEI3REMwRCAvKiBmYXN0LWR0b2EuY2MgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjJDNTI5QzEzRkFGNkVGMDBC
N0RDMEQgLyogZmFzdC1kdG9hLmNjICovOyB9OworCQlDMjJDNTJGRDEzRkFGNkVGMDBCN0RDMEQg
LyogZmFzdC1kdG9hLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDMjJDNTI5RDEzRkFGNkVGMDBCN0RDMEQgLyogZmFzdC1kdG9hLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzIyQzUyRkUxM0ZBRjZFRjAw
QjdEQzBEIC8qIGZpeGVkLWR0b2EuY2MgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDMjJDNTI5RTEzRkFGNkVGMDBCN0RDMEQgLyogZml4ZWQtZHRvYS5jYyAq
LzsgfTsKKwkJQzIyQzUyRkYxM0ZBRjZFRjAwQjdEQzBEIC8qIGZpeGVkLWR0b2EuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1MjlGMTNGQUY2RUYw
MEI3REMwRCAvKiBmaXhlZC1kdG9hLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJQzIyQzUzMTMxM0ZBRjZFRjAwQjdEQzBEIC8qIHN0cnRvZC5jYyBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMkM1MkI5MTNG
QUY2RUYwMEI3REMwRCAvKiBzdHJ0b2QuY2MgKi87IH07CisJCUMyMkM1MzE0MTNGQUY2RUYwMEI3
REMwRCAvKiBzdHJ0b2QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEMyMkM1MkJBMTNGQUY2RUYwMEI3REMwRCAvKiBzdHJ0b2QuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDMjJDNTMxNTEzRkFGNkVGMDBC
N0RDMEQgLyogdXRpbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEMyMkM1MkJCMTNGQUY2RUYwMEI3REMwRCAvKiB1dGlscy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUMyRUU1OUEwMTNGQzk3M0YwMDlD
RUFGRSAvKiBEZWNpbWFsTnVtYmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDMkVFNTk5RTEzRkM5NzJBMDA5Q0VBRkUgLyogRGVjaW1hbE51bWJlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUMyRUU1
OUExMTNGQzk3NjgwMDlDRUFGRSAvKiBEZWNpbWFsTnVtYmVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRUU1OTlEMTNGQzk3MkEwMDlDRUFGRSAv
KiBEZWNpbWFsTnVtYmVyLmNwcCAqLzsgfTsKIAkJRDdBNDZBNEYxMzM4RkZFQTAwRUQ2OTVDIC8q
IER5bmFtaWNBbm5vdGF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRDc1QUY1OTYxMkY4Q0I5NTAwRkMwQURGIC8qIER5bmFtaWNBbm5vdGF0aW9u
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCURE
Mzc3Q0JDMTIwNzJDMTgwMDZBMjUxNyAvKiBCaXRtYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEREMzc3Q0JCMTIwNzJDMTgwMDZBMjUxNyAvKiBCaXRt
YXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlE
REY3QUJENDExRjYwRUQyMDAxMDhFMzYgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEREY3QUJEMjExRjYwRUQyMDAx
MDhFMzYgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTczNSw3ICs3NTMsNiBAQAogCQkwQkRGRkFEMTBGQzYx
NkVDMDBENjlFRjQgLyogT3duRmFzdE1hbGxvY1B0ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBPd25GYXN0TWFsbG9jUHRyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBCREZGQUQ0MEZDNjE3MTAwMEQ2OUVGNCAvKiBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4NCAv
KiBTaXplTGltaXRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNp
emVMaW1pdHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjI5NDc5QjEyNkU2
OThDMDBCM0FCRjUgLyogRGVjaW1hbE51bWJlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBEZWNpbWFsTnVtYmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY3NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5n
Q291bnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTYW1wbGlu
Z0NvdW50ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk2M0IzNjEzRkM2
RkRFMDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFZhbHVlUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTUx
LDcgKzk2OCw2IEBACiAJCTg2MDE2MUUyMEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxl
clg4NkNvbW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2Vt
Ymxlclg4NkNvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjI2QkVDRTEx
OTI4RTM5MDA3ODJGQUIgLyogU3RyaW5nU3RhdGljcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBTdHJpbmdTdGF0aWNzLmNwcDsgcGF0aCA9IHRleHQvU3RyaW5nU3Rh
dGljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MjdFNUVBMTFGMTI4MTkw
MEEzMTNCNSAvKiBQYWdlQWxsb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQYWdlQWxsb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NjJB
RjRCNTEyMjM5QzdCMDAyNEU1QjggLyogRGVjaW1hbE51bWJlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEZWNpbWFsTnVtYmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTg2M0IyM0RGMEZDNjBFNjIwMDcwM0FBNCAvKiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2NDM4RkMzMTI2NTUwM0UwMEUwREZD
QSAvKiBTdHJpbmdCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IFN0cmluZ0J1aWxkZXIuY3BwOyBwYXRoID0gdGV4dC9TdHJpbmdCdWlsZGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY1NjU3NDAxMTVCRTNEQTAwMjkxRjQwIC8qIENT
dHJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ1N0cmluZy5j
cHA7IHBhdGggPSB0ZXh0L0NTdHJpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTI2Nyw2ICsxMjgzLDMyIEBACiAJCUJDRkQ4QzkwMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1w
VGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSnVtcFRhYmxl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNGRDhDOTEwRUVCMkVFNzAwMjgz
ODQ4IC8qIEp1bXBUYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKdW1w
VGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzBBMjcyM0YwRTUwOUYxRTAw
RTk2RTE1IC8qIE5vdEZvdW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5v
dEZvdW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMkM1MjkwMTNGQUY2RUYw
MEI3REMwRCAvKiBiaWdudW0tZHRvYS5jYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9ICJiaWdudW0tZHRvYS5jYyI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMy
MkM1MjkxMTNGQUY2RUYwMEI3REMwRCAvKiBiaWdudW0tZHRvYS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSAiYmlnbnVtLWR0b2EuaCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUMyMkM1MjkyMTNGQUY2RUYwMEI3REMwRCAvKiBiaWdudW0uY2MgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBiaWdudW0uY2M7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUMyMkM1MjkzMTNGQUY2RUYwMEI3REMwRCAvKiBiaWdudW0uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gYmlnbnVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUMyMkM1Mjk0MTNGQUY2RUYwMEI3REMwRCAvKiBjYWNoZWQtcG93ZXJzLmNjICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gImNhY2hlZC1wb3dlcnMuY2MiOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTI5NTEzRkFGNkVGMDBCN0RDMEQgLyogY2Fj
aGVkLXBvd2Vycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSAiY2FjaGVkLXBv
d2Vycy5oIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyOTYxM0ZBRjZFRjAw
QjdEQzBEIC8qIENPUFlJTkcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQ09QWUlORzsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyOTcxM0ZBRjZFRjAwQjdEQzBEIC8qIGRpeS1m
cC5jYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9ICJkaXktZnAuY2MiOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTI5ODEzRkFGNkVGMDBCN0RDMEQgLyog
ZGl5LWZwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9ICJkaXktZnAuaCI7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMkM1Mjk5MTNGQUY2RUYwMEI3REMwRCAvKiBk
b3VibGUtY29udmVyc2lvbi5jYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
ICJkb3VibGUtY29udmVyc2lvbi5jYyI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMy
MkM1MjlBMTNGQUY2RUYwMEI3REMwRCAvKiBkb3VibGUtY29udmVyc2lvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSAiZG91YmxlLWNvbnZlcnNpb24uaCI7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUMyMkM1MjlCMTNGQUY2RUYwMEI3REMwRCAvKiBkb3VibGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZG91YmxlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUMyMkM1MjlDMTNGQUY2RUYwMEI3REMwRCAvKiBmYXN0LWR0b2EuY2Mg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSAiZmFzdC1kdG9hLmNjIjsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyOUQxM0ZBRjZFRjAwQjdEQzBEIC8qIGZh
c3QtZHRvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSAiZmFzdC1kdG9hLmgi
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTI5RTEzRkFGNkVGMDBCN0RDMEQg
LyogZml4ZWQtZHRvYS5jYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9ICJm
aXhlZC1kdG9hLmNjIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyOUYxM0ZB
RjZFRjAwQjdEQzBEIC8qIGZpeGVkLWR0b2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gImZpeGVkLWR0b2EuaCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMkM1
MkEwMTNGQUY2RUYwMEI3REMwRCAvKiBMSUNFTlNFICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IExJ
Q0VOU0U7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMkM1MkExMTNGQUY2RUYwMEI3
REMwRCAvKiBNYWtlZmlsZSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUubWFrZTsgcGF0aCA9IE1ha2Vm
aWxlOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjJDNTJBMjEzRkFGNkVGMDBCN0RD
MEQgLyogUkVBRE1FICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJFQURNRTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQzIyQzUyQTMxM0ZBRjZFRjAwQjdEQzBEIC8qIFNDb25zY3JpcHQg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU0NvbnNjcmlwdDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQzIyQzUyQTQxM0ZBRjZFRjAwQjdEQzBEIC8qIFNDb25zdHJ1Y3QgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gU0NvbnN0cnVjdDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QzIyQzUyQjkxM0ZBRjZFRjAwQjdEQzBEIC8qIHN0cnRvZC5jYyAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IHN0cnRvZC5jYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQzIyQzUyQkExM0ZBRjZFRjAwQjdEQzBEIC8qIHN0cnRvZC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBzdHJ0b2QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QzIyQzUyQkIxM0ZBRjZFRjAwQjdEQzBEIC8qIHV0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IHV0aWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyRUU1
OTlEMTNGQzk3MkEwMDlDRUFGRSAvKiBEZWNpbWFsTnVtYmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlY2ltYWxOdW1iZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlDMkVFNTk5RTEzRkM5NzJBMDA5Q0VBRkUgLyogRGVjaW1hbE51bWJlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWNpbWFsTnVtYmVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQyMTIwMjI4MEFENDMxMEMwMEVENzlCNiAvKiBEYXRl
Q29udmVyc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGF0
ZUNvbnZlcnNpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMjEyMDIyOTBB
RDQzMTBDMDBFRDc5QjYgLyogRGF0ZUNvbnZlcnNpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERhdGVDb252ZXJzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUQ3NUFGNTk1MTJGOENCOTUwMEZDMEFERiAvKiBEeW5hbWljQW5ub3RhdGlvbnMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRHluYW1pY0Fubm90YXRpb25zLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NzAsNiArMTcxMiw5IEBACiAJCTY1
MTYyRUYxMDhFNkEyMUMwMDc1NTZDRCAvKiB3dGYgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKAorCQkJCUMyRUU1OTlEMTNGQzk3MkEwMDlDRUFGRSAvKiBEZWNpbWFs
TnVtYmVyLmNwcCAqLywKKwkJCQlDMkVFNTk5RTEzRkM5NzJBMDA5Q0VBRkUgLyogRGVjaW1hbE51
bWJlci5oICovLAorCQkJCUMyMkM1MjQ4MTNGQUY2RUYwMEI3REMwRCAvKiBkdG9hICovLAogCQkJ
CTA2RDM1OEEwMERBQUQ5QzQwMDNCMTc0RSAvKiBtYWMgKi8sCiAJCQkJODY1NjU3M0UxMTVCRTM1
MjAwMjkxRjQwIC8qIHRleHQgKi8sCiAJCQkJRTE5NTY3OEQwOUU3Q0YxMjAwQjg5RDEzIC8qIHVu
aWNvZGUgKi8sCkBAIC0xNjk1LDggKzE3NDAsNiBAQAogCQkJCTE4MEI5QUYwMEYxNkM1NjkwMDlC
REJDNSAvKiBDdXJyZW50VGltZS5oICovLAogCQkJCTQxMzU5Q0Y0MEZERDg5Q0IwMDIwNjE4MCAv
KiBEYXRlTWF0aC5jcHAgKi8sCiAJCQkJNDEzNTlDRjUwRkREODlDQjAwMjA2MTgwIC8qIERhdGVN
YXRoLmggKi8sCi0JCQkJMEYyOTQ3OUIxMjZFNjk4QzAwQjNBQkY1IC8qIERlY2ltYWxOdW1iZXIu
Y3BwICovLAotCQkJCTg2MkFGNEI1MTIyMzlDN0IwMDI0RTVCOCAvKiBEZWNpbWFsTnVtYmVyLmgg
Ki8sCiAJCQkJNTEzNUZBRDUxMkQyNjg1NjAwM0MwODNCIC8qIERlY29kZXIuaCAqLywKIAkJCQk1
MTg2MTExRDBDQzgyNDgzMDA4MTQxMkIgLyogRGVxdWUuaCAqLywKIAkJCQk5MzhDNEY2QjBDQTA2
QkNFMDBEOTMxMEEgLyogRGlzYWxsb3dDVHlwZS5oICovLApAQCAtMjIwMCw2ICsyMjQzLDM3IEBA
CiAJCQlwYXRoID0gYnl0ZWNvZGU7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9Owor
CQlDMjJDNTI0ODEzRkFGNkVGMDBCN0RDMEQgLyogZHRvYSAqLyA9IHsKKwkJCWlzYSA9IFBCWEdy
b3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQzIyQzUyOTAxM0ZBRjZFRjAwQjdEQzBEIC8qIGJp
Z251bS1kdG9hLmNjICovLAorCQkJCUMyMkM1MjkxMTNGQUY2RUYwMEI3REMwRCAvKiBiaWdudW0t
ZHRvYS5oICovLAorCQkJCUMyMkM1MjkyMTNGQUY2RUYwMEI3REMwRCAvKiBiaWdudW0uY2MgKi8s
CisJCQkJQzIyQzUyOTMxM0ZBRjZFRjAwQjdEQzBEIC8qIGJpZ251bS5oICovLAorCQkJCUMyMkM1
Mjk0MTNGQUY2RUYwMEI3REMwRCAvKiBjYWNoZWQtcG93ZXJzLmNjICovLAorCQkJCUMyMkM1Mjk1
MTNGQUY2RUYwMEI3REMwRCAvKiBjYWNoZWQtcG93ZXJzLmggKi8sCisJCQkJQzIyQzUyOTYxM0ZB
RjZFRjAwQjdEQzBEIC8qIENPUFlJTkcgKi8sCisJCQkJQzIyQzUyOTcxM0ZBRjZFRjAwQjdEQzBE
IC8qIGRpeS1mcC5jYyAqLywKKwkJCQlDMjJDNTI5ODEzRkFGNkVGMDBCN0RDMEQgLyogZGl5LWZw
LmggKi8sCisJCQkJQzIyQzUyOTkxM0ZBRjZFRjAwQjdEQzBEIC8qIGRvdWJsZS1jb252ZXJzaW9u
LmNjICovLAorCQkJCUMyMkM1MjlBMTNGQUY2RUYwMEI3REMwRCAvKiBkb3VibGUtY29udmVyc2lv
bi5oICovLAorCQkJCUMyMkM1MjlCMTNGQUY2RUYwMEI3REMwRCAvKiBkb3VibGUuaCAqLywKKwkJ
CQlDMjJDNTI5QzEzRkFGNkVGMDBCN0RDMEQgLyogZmFzdC1kdG9hLmNjICovLAorCQkJCUMyMkM1
MjlEMTNGQUY2RUYwMEI3REMwRCAvKiBmYXN0LWR0b2EuaCAqLywKKwkJCQlDMjJDNTI5RTEzRkFG
NkVGMDBCN0RDMEQgLyogZml4ZWQtZHRvYS5jYyAqLywKKwkJCQlDMjJDNTI5RjEzRkFGNkVGMDBC
N0RDMEQgLyogZml4ZWQtZHRvYS5oICovLAorCQkJCUMyMkM1MkEwMTNGQUY2RUYwMEI3REMwRCAv
KiBMSUNFTlNFICovLAorCQkJCUMyMkM1MkExMTNGQUY2RUYwMEI3REMwRCAvKiBNYWtlZmlsZSAq
LywKKwkJCQlDMjJDNTJBMjEzRkFGNkVGMDBCN0RDMEQgLyogUkVBRE1FICovLAorCQkJCUMyMkM1
MkEzMTNGQUY2RUYwMEI3REMwRCAvKiBTQ29uc2NyaXB0ICovLAorCQkJCUMyMkM1MkE0MTNGQUY2
RUYwMEI3REMwRCAvKiBTQ29uc3RydWN0ICovLAorCQkJCUMyMkM1MkI5MTNGQUY2RUYwMEI3REMw
RCAvKiBzdHJ0b2QuY2MgKi8sCisJCQkJQzIyQzUyQkExM0ZBRjZFRjAwQjdEQzBEIC8qIHN0cnRv
ZC5oICovLAorCQkJCUMyMkM1MkJCMTNGQUY2RUYwMEI3REMwRCAvKiB1dGlscy5oICovLAorCQkJ
KTsKKwkJCXBhdGggPSBkdG9hOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJ
RTE5NTY3OEQwOUU3Q0YxMjAwQjg5RDEzIC8qIHVuaWNvZGUgKi8gPSB7CiAJCQlpc2EgPSBQQlhH
cm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMjI1Miw4ICsyMzI2LDEwIEBACiAJCQkJODZBREQx
NDUwRkRERUE5ODAwMDZFRUMyIC8qIEFSTXY3QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzNFNjBFMTZGNUNEMDBCMzQ0NjAgLyogQXJyYXlDb25zdHJ1Y3Rvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZDODE1MTUxNDA1MTE5QjAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlDMjJCMzFCOTE0MDU3N0Q3MDBEQjQ3NUEgLyogU2FtcGxpbmdD
b3VudGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM4MTUwQTE0MDQzQkY1MDBDRkE2MDMgLyog
V3JpdGVCYXJyaWVyU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NjNCMzgxM0ZDNkZF
OTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzJFRTU5QTAx
M0ZDOTczRjAwOUNFQUZFIC8qIERlY2ltYWxOdW1iZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDM0U3MEUxNkY1Q0QwMEIzNDQ2MCAvKiBBcnJheVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEM1MjQwRTE2RkM4QTAwQjM0NDYwIC8qIEFycmF5UHJvdG90eXBlLmx1dC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRTkwRTE2RjVDRDAwQjM0NDYwIC8qIEFTQ0lJQ1R5cGUu
aCBpbiBIZWFkZXJzICovLApAQCAtMjMwMyw3ICsyMzc5LDYgQEAKIAkJCQlCQzE4QzNGQTBFMTZG
NUNEMDBCMzQ0NjAgLyogRGVidWdnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMzEzNTY0MEYz
MDJGQTMwMDNERkQzQSAvKiBEZWJ1Z2dlckFjdGl2YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDM0ZCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBEZWJ1Z2dlckNhbGxGcmFtZS5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJODYyQUY0QjYxMjIzOUM3QjAwMjRFNUI4IC8qIERlY2ltYWxOdW1iZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTUxMzVGQUYyMTJEMjZBQ0UwMDNDMDgzQiAvKiBEZWNvZGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNGQzBFMTZGNUNEMDBCMzQ0NjAgLyogRGVxdWUuaCBp
biBIZWFkZXJzICovLAogCQkJCTg2RUNBNEYxMTMyRUFBNkQwMDJCMkFENyAvKiBERkdBbGlhc1Ry
YWNrZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjQ4OCw3ICsyNTYzLDE2IEBACiAJCQkJOTBEMzQ2
OUMwRTI4NTI4MDAwOTQ5MkVFIC8qIFJlZkNvdW50ZWRMZWFrQ291bnRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxOEM0NTgwRTE2RjVDRDAwQjM0NDYwIC8qIFJlZlB0ci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxOEM0NTkwRTE2RjVDRDAwQjM0NDYwIC8qIFJlZlB0ckhhc2hNYXAuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTBGNzcwMDkwMTQwMkZERTQwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50
ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUMyMkM1MkYyMTNGQUY2RUYwMEI3REMwRCAvKiBiaWdu
dW0tZHRvYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzIyQzUyRjQxM0ZBRjZFRjAwQjdEQzBEIC8q
IGJpZ251bS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzIyQzUyRjYxM0ZBRjZFRjAwQjdEQzBEIC8q
IGNhY2hlZC1wb3dlcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCUMyMkM1MkY4MTNGQUY2RUYwMEI3
REMwRCAvKiBkaXktZnAuaCBpbiBIZWFkZXJzICovLAorCQkJCUMyMkM1MkZBMTNGQUY2RUYwMEI3
REMwRCAvKiBkb3VibGUtY29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzIyQzUyRkIx
M0ZBRjZFRjAwQjdEQzBEIC8qIGRvdWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzIyQzUyRkQx
M0ZBRjZFRjAwQjdEQzBEIC8qIGZhc3QtZHRvYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzIyQzUy
RkYxM0ZBRjZFRjAwQjdEQzBEIC8qIGZpeGVkLWR0b2EuaCBpbiBIZWFkZXJzICovLAorCQkJCUMy
MkM1MzE0MTNGQUY2RUYwMEI3REMwRCAvKiBzdHJ0b2QuaCBpbiBIZWFkZXJzICovLAorCQkJCUMy
MkM1MzE1MTNGQUY2RUYwMEI3REMwRCAvKiB1dGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEM0NUEwRTE2RjVDRDAwQjM0NDYwIC8qIFJlZ0V4cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE3
MTJCM0YxMUM3QjIyODAwN0E1MzE1IC8qIFJlZ0V4cENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQ0QyMDJDMjBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwQ29uc3RydWN0b3IuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjg2NSw2ICsyOTQ5LDcgQEAKIAkJCQkwRkM4MTUxNjE0MDUxMUI1MDBDRkE2
MDMgLyogVlRhYmxlU3BlY3RydW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDODE1MEIxNDA0
M0MwRTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlDMkVFNTlBMTEzRkM5NzY4MDA5Q0VBRkUgLyogRGVjaW1hbE51bWJlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlCRDEwN0VDMzc2MDA0MjdBNDggLyogQXJnTGlz
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlCRTEwN0VDMzc2MDA0MjdBNDggLyogQXJn
dW1lbnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RDNCMkMzMTAxNTZCREUwMDI4NjVFNyAv
KiBBUk1Bc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yODk4LDcgKzI5ODMsNiBAQAog
CQkJCTE0MjgwODIzMTA3RUMwMkMwMDEzRTdCMiAvKiBEZWJ1Z2dlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCQzMxMzU2NTBGMzAyRkEzMDAzREZEM0EgLyogRGVidWdnZXJBY3RpdmF0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0OTU1OUVFMEREQ0RERjcwMDY0ODA4NyAvKiBEZWJ1Z2dl
ckNhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRjI5NDc5QzEyNkU2OThDMDBCM0FC
RjUgLyogRGVjaW1hbE51bWJlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkVDOURDNDEzMjhE
RjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
ODZFQzlEQzcxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dyYXBoLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTg2RUM5REM5MTMyOERGODIwMDJCMkFENyAvKiBERkdKSVRDb2RlR2VuZXJhdG9yLmNwcCBp
biBTb3VyY2VzICovLApAQCAtMzA1OCw2ICszMTQyLDE0IEBACiAJCQkJMTREMkYzREExMzlGNEJF
MjAwNDkxMDMxIC8qIE5ld1NwYWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MkExRDgzMTNB
MTlDODQwMDlEQTVGRSAvKiBPbGRTcGFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEJBN0E5
NzEzQUFERkY4MDA1QjdDMkMgLyogSGVhcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDMjJDNTJG
MTEzRkFGNkVGMDBCN0RDMEQgLyogYmlnbnVtLWR0b2EuY2MgaW4gU291cmNlcyAqLywKKwkJCQlD
MjJDNTJGMzEzRkFGNkVGMDBCN0RDMEQgLyogYmlnbnVtLmNjIGluIFNvdXJjZXMgKi8sCisJCQkJ
QzIyQzUyRjUxM0ZBRjZFRjAwQjdEQzBEIC8qIGNhY2hlZC1wb3dlcnMuY2MgaW4gU291cmNlcyAq
LywKKwkJCQlDMjJDNTJGNzEzRkFGNkVGMDBCN0RDMEQgLyogZGl5LWZwLmNjIGluIFNvdXJjZXMg
Ki8sCisJCQkJQzIyQzUyRjkxM0ZBRjZFRjAwQjdEQzBEIC8qIGRvdWJsZS1jb252ZXJzaW9uLmNj
IGluIFNvdXJjZXMgKi8sCisJCQkJQzIyQzUyRkMxM0ZBRjZFRjAwQjdEQzBEIC8qIGZhc3QtZHRv
YS5jYyBpbiBTb3VyY2VzICovLAorCQkJCUMyMkM1MkZFMTNGQUY2RUYwMEI3REMwRCAvKiBmaXhl
ZC1kdG9hLmNjIGluIFNvdXJjZXMgKi8sCisJCQkJQzIyQzUzMTMxM0ZBRjZFRjAwQjdEQzBEIC8q
IHN0cnRvZC5jYyBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAppbmRleCAyNjUzOTZmM2JkZGZlYTIz
MjZmZGY5NjIwYWNhZGQ3Zjk0MTNmNDBmLi40ZmZkMjMyMjAxMTBjMWYzYjk2NmYwOTAxNTU5Yzg2
YjJlZDE0NWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0
aWFsaXplVGhyZWFkaW5nLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bml0aWFsaXplVGhyZWFkaW5nLmNwcApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIkluaXRp
YWxpemVUaHJlYWRpbmcuaCIKIAogI2luY2x1ZGUgIkhlYXAuaCIKLSNpbmNsdWRlICJkdG9hLmgi
CiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAj
aW5jbHVkZSAiVVN0cmluZy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L051bWJlclByb3RvdHlwZS5jcHAKaW5kZXggNjc5Zjc0NzlkZWM3ZWViNTQzZWU5ZTYyMzMzZjA2
ZjgzZDQ5ZWY0ZC4uZDc0NDE2MjZlMTExYTJiY2MxZDNhMTYwNmM4MTU0YWJhMGEwY2MwNiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3Bw
CkBAIC0zMCw5ICszMCwxMSBAQAogI2luY2x1ZGUgIlVpbnQxNldpdGhGcmFjdGlvbi5oIgogI2lu
Y2x1ZGUgImR0b2EuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0
Zi9EZWNpbWFsTnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uaD4K
KwordXNpbmcgbmFtZXNwYWNlIFdURjo6ZG91YmxlX2NvbnZlcnNpb247CiAKIG5hbWVzcGFjZSBK
U0MgewogCkBAIC0zMzksMTIgKzM0MSwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG51bWJlclByb3RvRnVuY1RvRXhwb25lbnRpYWwoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmc6Om51bWJlcih4KSkp
OwogCiAgICAgLy8gUm91bmQgaWYgdGhlIGFyZ3VtZW50IGlzIG5vdCB1bmRlZmluZWQsIGFsd2F5
cyBmb3JtYXQgYXMgZXhwb25lbnRpYWwuCi0gICAgTnVtYmVyVG9TdHJpbmdCdWZmZXIgYnVmZmVy
OwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGlzVW5kZWZpbmVkCi0gICAgICAgID8gRGVjaW1hbE51
bWJlcih4KS50b1N0cmluZ0V4cG9uZW50aWFsKGJ1ZmZlciwgV1RGOjpOdW1iZXJUb1N0cmluZ0J1
ZmZlckxlbmd0aCkKLSAgICAgICAgOiBEZWNpbWFsTnVtYmVyKHgsIFJvdW5kaW5nU2lnbmlmaWNh
bnRGaWd1cmVzLCBkZWNpbWFsUGxhY2VzSW5FeHBvbmVudCArIDEpLnRvU3RyaW5nRXhwb25lbnRp
YWwoYnVmZmVyLCBXVEY6Ok51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoKTsKLQotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgVVN0cmluZyhidWZmZXIsIGxlbmd0aCkp
KTsKKyAgICBjaGFyIGJ1ZmZlcltXVEY6Ok51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoXTsKKyAg
ICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXIoYnVmZmVyLCBXVEY6Ok51bWJlclRvU3RyaW5nQnVmZmVy
TGVuZ3RoKTsKKyAgICBjb25zdCBEb3VibGVUb1N0cmluZ0NvbnZlcnRlciYgY29udmVydGVyID0g
RG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6OkVjbWFTY3JpcHRDb252ZXJ0ZXIoKTsKKyAgICBidWls
ZGVyLlJlc2V0KCk7CisgICAgaXNVbmRlZmluZWQKKyAgICAgICAgPyBjb252ZXJ0ZXIuVG9FeHBv
bmVudGlhbCh4LCAtMSwgJmJ1aWxkZXIpCisgICAgICAgIDogY29udmVydGVyLlRvRXhwb25lbnRp
YWwoeCwgZGVjaW1hbFBsYWNlc0luRXhwb25lbnQsICZidWlsZGVyKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmcoYnVpbGRlci5GaW5hbGl6ZSgpKSkp
OwogfQogCiAvLyB0b0ZpeGVkIGNvbnZlcnRzIGEgbnVtYmVyIHRvIGEgc3RyaW5nLCBhbHdheXMg
Zm9ybWF0dGluZyBhcyBhbiBhIGRlY2ltYWwgZnJhY3Rpb24uCkBAIC0zNzYsMTAgKzM4MCwxMiBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1RvRml4ZWQoRXhl
Y1N0YXRlKiBleGVjKQogICAgIC8vIGhhbmRsZWQgYnkgbnVtYmVyVG9TdHJpbmcuCiAgICAgQVNT
RVJUKGlzZmluaXRlKHgpKTsKIAotICAgIC8vIENvbnZlcnQgdG8gZGVjaW1hbCB3aXRoIHJvdW5k
aW5nLCBhbmQgZm9ybWF0IGFzIGRlY2ltYWwuCi0gICAgTnVtYmVyVG9TdHJpbmdCdWZmZXIgYnVm
ZmVyOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IERlY2ltYWxOdW1iZXIoeCwgUm91bmRpbmdEZWNp
bWFsUGxhY2VzLCBkZWNpbWFsUGxhY2VzKS50b1N0cmluZ0RlY2ltYWwoYnVmZmVyLCBXVEY6Ok51
bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
U3RyaW5nKGV4ZWMsIFVTdHJpbmcoYnVmZmVyLCBsZW5ndGgpKSk7CisgICAgY2hhciBidWZmZXJb
V1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aF07CisgICAgU3RyaW5nQnVpbGRlciBidWls
ZGVyKGJ1ZmZlciwgV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCk7CisgICAgY29uc3Qg
RG91YmxlVG9TdHJpbmdDb252ZXJ0ZXImIGNvbnZlcnRlciA9IERvdWJsZVRvU3RyaW5nQ29udmVy
dGVyOjpFY21hU2NyaXB0Q29udmVydGVyKCk7CisgICAgYnVpbGRlci5SZXNldCgpOworICAgIGNv
bnZlcnRlci5Ub0ZpeGVkKHgsIGRlY2ltYWxQbGFjZXMsICZidWlsZGVyKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmcoYnVpbGRlci5GaW5hbGl6ZSgp
KSkpOwogfQogCiAvLyB0b1ByZWNpc2lvbiBjb252ZXJ0cyBhIG51bWJlciB0byBhIHN0cmluZywg
dGFrZWluZyBhbiBhcmd1bWVudCBzcGVjaWZ5aW5nIGEKQEAgLTQxMiwxNyArNDE4LDEyIEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9QcmVjaXNpb24oRXhl
Y1N0YXRlKiBleGVjKQogICAgIGlmICghaXNmaW5pdGUoeCkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgVVN0cmluZzo6bnVtYmVyKHgpKSk7CiAKLSAgICAv
LyBDb252ZXJ0IHRvIGRlY2ltYWwgd2l0aCByb3VuZGluZy4KLSAgICBEZWNpbWFsTnVtYmVyIG51
bWJlcih4LCBSb3VuZGluZ1NpZ25pZmljYW50RmlndXJlcywgc2lnbmlmaWNhbnRGaWd1cmVzKTsK
LSAgICAvLyBJZiBudW1iZXIgaXMgaW4gdGhlIHJhbmdlIDFlLTYgPD0geCA8IHBvdygxMCwgc2ln
bmlmaWNhbnRGaWd1cmVzKSB0aGVuIGZvcm1hdAotICAgIC8vIGFzIGRlY2ltYWwuIE90aGVyd2lz
ZSwgZm9ybWF0IHRoZSBudW1iZXIgYXMgYW4gZXhwb25lbnRpYWwuIERlY2ltYWwgZm9ybWF0Ci0g
ICAgLy8gZGVtYW5kcyBhIG1pbmltdW0gb2YgKGV4cG9uZW50ICsgMSkgZGlnaXRzIHRvIHJlcHJl
c2VudCBhIG51bWJlciwgZm9yIGV4YW1wbGUKLSAgICAvLyAxMjM0ICgxLjIzNGUrMykgcmVxdWly
ZXMgNCBkaWdpdHMuIChTZWUgRUNNQS0yNjIgMTUuNy40LjcuMTAuYykKLSAgICBOdW1iZXJUb1N0
cmluZ0J1ZmZlciBidWZmZXI7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gbnVtYmVyLmV4cG9uZW50
KCkgPj0gLTYgJiYgbnVtYmVyLmV4cG9uZW50KCkgPCBzaWduaWZpY2FudEZpZ3VyZXMKLSAgICAg
ICAgPyBudW1iZXIudG9TdHJpbmdEZWNpbWFsKGJ1ZmZlciwgV1RGOjpOdW1iZXJUb1N0cmluZ0J1
ZmZlckxlbmd0aCkKLSAgICAgICAgOiBudW1iZXIudG9TdHJpbmdFeHBvbmVudGlhbChidWZmZXIs
IFdURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNTdHJpbmcoZXhlYywgVVN0cmluZyhidWZmZXIsIGxlbmd0aCkpKTsKKyAgICBjaGFy
IGJ1ZmZlcltXVEY6Ok51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoXTsKKyAgICBTdHJpbmdCdWls
ZGVyIGJ1aWxkZXIoYnVmZmVyLCBXVEY6Ok51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoKTsKKyAg
ICBjb25zdCBEb3VibGVUb1N0cmluZ0NvbnZlcnRlciYgY29udmVydGVyID0gRG91YmxlVG9TdHJp
bmdDb252ZXJ0ZXI6OkVjbWFTY3JpcHRDb252ZXJ0ZXIoKTsKKyAgICBidWlsZGVyLlJlc2V0KCk7
CisgICAgY29udmVydGVyLlRvUHJlY2lzaW9uKHgsIHNpZ25pZmljYW50RmlndXJlcywgJmJ1aWxk
ZXIpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcoZXhlYywgVVN0cmluZyhi
dWlsZGVyLkZpbmFsaXplKCkpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
bnVtYmVyUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9VU3RyaW5nLmNwcAppbmRleCBjMTRmMzE5OWY0MDdmNDdmNzk1ZjUxYmI5
MjBlNmMwOWYzYzNhNmZkLi5iNzhlNmYxYWNjNzgxMGNiMjZlODk4NDhhYTU0N2Q4ZmRhMmJiZjY2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5nLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5nLmNwcApAQCAtMzUsMTAg
KzM1LDEwIEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUu
aD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9EZWNpbWFsTnVt
YmVyLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5n
RXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9kdG9hLmg+
CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVVRGOC5oPgogCiAjaWYgSEFWRShTVFJJTkdTX0gpCkBA
IC0xOTYsOCArMTk2LDcgQEAgVVN0cmluZyBVU3RyaW5nOjpudW1iZXIobG9uZyBsKQogVVN0cmlu
ZyBVU3RyaW5nOjpudW1iZXIoZG91YmxlIGQpCiB7CiAgICAgTnVtYmVyVG9TdHJpbmdCdWZmZXIg
YnVmZmVyOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IG51bWJlclRvU3RyaW5nKGQsIGJ1ZmZlcik7
Ci0gICAgcmV0dXJuIFVTdHJpbmcoYnVmZmVyLCBsZW5ndGgpOworICAgIHJldHVybiBVU3RyaW5n
KG51bWJlclRvU3RyaW5nKGQsIGJ1ZmZlcikpOwogfQogCiBVU3RyaW5nIFVTdHJpbmc6OnN1YnN0
cmluZ1NoYXJpbmdJbXBsKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3RzLnR4dCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQKaW5kZXggYzZkZGExMzljNGVj
MzQ0Yzk3YzNiM2U3M2ZmMDQxZWY4OTMyMmQyZC4uYzAwNDQ0MDBiZjBiNzQyMjNmMzQ4YzAyMTI3
MzI0OTNkM2ZmMGRiOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DTWFr
ZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMudHh0
CkBAIC05OSw2ICs5OSwyOCBAQCBTRVQoV1RGX0hFQURFUlMKICAgICBXVEZUaHJlYWREYXRhLmgK
ICAgICBkdG9hLmgKIAorICAgIGR0b2EvYmlnbnVtLWR0b2EuaAorICAgIGR0b2EvYmlnbnVtLmgK
KyAgICBkdG9hL2NhY2hlZC1wb3dlcnMuaAorICAgIGR0b2EvZGl5LWZwLmgKKyAgICBkdG9hL2Rv
dWJsZS1jb252ZXJzaW9uLmgKKyAgICBkdG9hL2RvdWJsZS5oCisgICAgZHRvYS9mYXN0LWR0b2Eu
aAorICAgIGR0b2EvZml4ZWQtZHRvYS5oCisgICAgZHRvYS9zdHJ0b2QuaAorICAgIGR0b2EvdXRp
bHMuaAorCisgICAgZHRvYS9iaWdudW0tZHRvYS5oCisgICAgZHRvYS9iaWdudW0uaAorICAgIGR0
b2EvY2FjaGVkLXBvd2Vycy5oCisgICAgZHRvYS9kaXktZnAuaAorICAgIGR0b2EvZG91YmxlLWNv
bnZlcnNpb24uaAorICAgIGR0b2EvZG91YmxlLmgKKyAgICBkdG9hL2Zhc3QtZHRvYS5oCisgICAg
ZHRvYS9maXhlZC1kdG9hLmgKKyAgICBkdG9hL3N0cnRvZC5oCisgICAgZHRvYS91dGlscy5oCisK
ICAgICB0ZXh0L0F0b21pY1N0cmluZy5oCiAgICAgdGV4dC9BdG9taWNTdHJpbmdJbXBsLmgKICAg
ICB0ZXh0L0NTdHJpbmcuaApAQCAtMTQwLDYgKzE2MiwyNCBAQCBTRVQoV1RGX1NPVVJDRVMKICAg
ICBXVEZUaHJlYWREYXRhLmNwcAogICAgIGR0b2EuY3BwCiAKKyAgICBkdG9hL2JpZ251bS1kdG9h
LmNjCisgICAgZHRvYS9iaWdudW0uY2MKKyAgICBkdG9hL2NhY2hlZC1wb3dlcnMuY2MKKyAgICBk
dG9hL2RpeS1mcC5jYworICAgIGR0b2EvZG91YmxlLWNvbnZlcnNpb24uY2MKKyAgICBkdG9hL2Zh
c3QtZHRvYS5jYworICAgIGR0b2EvZml4ZWQtZHRvYS5jYworICAgIGR0b2Evc3RydG9kLmNjCisK
KyAgICBkdG9hL2JpZ251bS1kdG9hLmNjCisgICAgZHRvYS9iaWdudW0uY2MKKyAgICBkdG9hL2Nh
Y2hlZC1wb3dlcnMuY2MKKyAgICBkdG9hL2RpeS1mcC5jYworICAgIGR0b2EvZG91YmxlLWNvbnZl
cnNpb24uY2MKKyAgICBkdG9hL2Zhc3QtZHRvYS5jYworICAgIGR0b2EvZml4ZWQtZHRvYS5jYwor
ICAgIGR0b2Evc3RydG9kLmNjCisKICAgICB0ZXh0L0F0b21pY1N0cmluZy5jcHAKICAgICB0ZXh0
L0NTdHJpbmcuY3BwCiAgICAgdGV4dC9TdHJpbmdCdWlsZGVyLmNwcApAQCAtMTU0LDYgKzE5NCw3
IEBAIFNFVChXVEZfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJ
Un0iCiAgICAgIiR7SkFWQVNDUklQVENPUkVfRElSfS93dGYiCiAgICAgIiR7SkFWQVNDUklQVENP
UkVfRElSfS93dGYvdW5pY29kZSIKKyAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L3d0Zi9kdG9h
IgogICAgICIke0phdmFTY3JpcHRDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVN9IgogKQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCmluZGV4IDBj
Y2NkNWI3M2VjY2JjNmFlY2YyOTA2MTAxOWVmYjlmNGQwY2Q4ZjguLjAzYzlhYWQ5NzFjNDYxYjYx
NzQ3NDE1NTZjMGU0MDExZTY3MWNlNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiQ3Vy
cmVudFRpbWUuaCIKICNpbmNsdWRlICJEYXRlTWF0aC5oIgogI2luY2x1ZGUgImR0b2EuaCIKKyNp
bmNsdWRlICJkdG9hL2NhY2hlZC1wb3dlcnMuaCIKICNpbmNsdWRlICJIYXNoTWFwLmgiCiAjaW5j
bHVkZSAiUmFuZG9tTnVtYmVyU2VlZC5oIgogI2luY2x1ZGUgIlN0ZExpYkV4dHJhcy5oIgpAQCAt
ODAsNiArODEsNyBAQCB2b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKQogICAgIGlmIChhdG9taWNh
bGx5SW5pdGlhbGl6ZWRTdGF0aWNNdXRleCkKICAgICAgICAgcmV0dXJuOwogCisgICAgV1RGOjpk
b3VibGVfY29udmVyc2lvbjo6aW5pdGlhbGl6ZSgpOwogICAgIC8vIFN0cmluZ0ltcGw6OmVtcHR5
KCkgZG9lcyBub3QgY29uc3RydWN0IGl0cyBzdGF0aWMgc3RyaW5nIGluIGEgdGhyZWFkc2FmZSBm
YXNoaW9uLAogICAgIC8vIHNvIGVuc3VyZSBpdCBoYXMgYmVlbiBpbml0aWFsaXplZCBmcm9tIGhl
cmUuCiAgICAgU3RyaW5nSW1wbDo6ZW1wdHkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvVGhyZWFkaW5nV2luLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
VGhyZWFkaW5nV2luLmNwcAppbmRleCBhMGVjMzk3NDg3OTY2NmQ4ODQ2ZTNlYzg2NDA1ODI2MDI1
YzVmYjE2Li4xODI1NjI3OGM3N2YyMzliMDg1YWU5MjVkMzIxMjQ4MTI1ZmNhNTQzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1RocmVhZGluZ1dpbi5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9UaHJlYWRpbmdXaW4uY3BwCkBAIC04Nyw2ICs4Nyw3IEBA
CiAjaW5jbHVkZSAiVGhyZWFkaW5nLmgiCiAjaW5jbHVkZSAiRGF0ZU1hdGguaCIKICNpbmNsdWRl
ICJkdG9hLmgiCisjaW5jbHVkZSAiZHRvYS9jYWNoZWQtcG93ZXJzLmgiCiAKICNpbmNsdWRlICJN
YWluVGhyZWFkLmgiCiAjaW5jbHVkZSAiVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9uLmgiCkBAIC0x
NjMsNiArMTY0LDcgQEAgdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCkKICAgICBpZiAoYXRvbWlj
YWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXgpCiAgICAgICAgIHJldHVybjsKIAorICAgIFdURjo6
ZG91YmxlX2NvbnZlcnNpb246OmluaXRpYWxpemUoKTsKICAgICAvLyBTdHJpbmdJbXBsOjplbXB0
eSgpIGRvZXMgbm90IGNvbnN0cnVjdCBpdHMgc3RhdGljIHN0cmluZyBpbiBhIHRocmVhZHNhZmUg
ZmFzaGlvbiwKICAgICAvLyBzbyBlbnN1cmUgaXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgZnJvbSBo
ZXJlLgogICAgIFN0cmluZ0ltcGw6OmVtcHR5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL2R0b2EuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hLmNw
cAppbmRleCAxNDY2ZGY3MzY4MDg5NWZiN2Q2NzJmNjc4YTc0Mjk1M2Q5YzZkNWFkLi45N2Q1N2Yz
MWM5ZTNjMzQyMTdkOTRmMDRkODI0MTY0ZWNjOTIzOTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL2R0b2EuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
ZHRvYS5jcHAKQEAgLTc1LDEyICs3NSwxMiBAQAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1
ZGUgPHd0Zi9BbHdheXNJbmxpbmUuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2lu
Y2x1ZGUgPHd0Zi9EZWNpbWFsTnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4K
ICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
ICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Cisj
aW5jbHVkZSA8d3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uaD4KIAogI2lmIENPTVBJTEVSKE1T
VkMpCiAjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDI0NCkKQEAgLTE4MDIsMzMgKzE4MDIsMTMg
QEAgdm9pZCBkdG9hUm91bmREUChEdG9hQnVmZmVyIHJlc3VsdCwgZG91YmxlIGRkLCBpbnQgbmRp
Z2l0cywgYm9vbCYgc2lnbiwgaW50JiBleHAKICAgICBkdG9hPGZhbHNlLCBmYWxzZSwgdHJ1ZSwg
ZmFsc2U+KHJlc3VsdCwgZGQsIG5kaWdpdHMsIHNpZ24sIGV4cG9uZW50LCBwcmVjaXNpb24pOwog
fQogCi1zdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIGNvcHlBc2NpaVRvVVRGMTYoVUNoYXIqIG5l
eHQsIGNvbnN0IGNoYXIqIHNyYywgdW5zaWduZWQgc2l6ZSkKLXsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICAqbmV4dCsrID0gKnNyYysrOwotfQogCi11
bnNpZ25lZCBudW1iZXJUb1N0cmluZyhkb3VibGUgZCwgTnVtYmVyVG9TdHJpbmdCdWZmZXIgYnVm
ZmVyKQorY29uc3QgY2hhciAqbnVtYmVyVG9TdHJpbmcoZG91YmxlIGQsIE51bWJlclRvU3RyaW5n
QnVmZmVyIGJ1ZmZlcikKIHsKLSAgICAvLyBIYW5kbGUgTmFOIGFuZCBJbmZpbml0eS4KLSAgICBp
ZiAoIWlzZmluaXRlKGQpKSB7Ci0gICAgICAgIGlmIChpc25hbihkKSkgewotICAgICAgICAgICAg
Y29weUFzY2lpVG9VVEYxNihidWZmZXIsICJOYU4iLCAzKTsKLSAgICAgICAgICAgIHJldHVybiAz
OwotICAgICAgICB9Ci0gICAgICAgIGlmIChkID4gMCkgewotICAgICAgICAgICAgY29weUFzY2lp
VG9VVEYxNihidWZmZXIsICJJbmZpbml0eSIsIDgpOwotICAgICAgICAgICAgcmV0dXJuIDg7Ci0g
ICAgICAgIH0KLSAgICAgICAgY29weUFzY2lpVG9VVEYxNihidWZmZXIsICItSW5maW5pdHkiLCA5
KTsKLSAgICAgICAgcmV0dXJuIDk7Ci0gICAgfQotCi0gICAgLy8gQ29udmVydCB0byBkZWNpbWFs
IHdpdGggcm91bmRpbmcuCi0gICAgRGVjaW1hbE51bWJlciBudW1iZXIoZCk7Ci0gICAgcmV0dXJu
IG51bWJlci5leHBvbmVudCgpID49IC02ICYmIG51bWJlci5leHBvbmVudCgpIDwgMjEKLSAgICAg
ICAgPyBudW1iZXIudG9TdHJpbmdEZWNpbWFsKGJ1ZmZlciwgTnVtYmVyVG9TdHJpbmdCdWZmZXJM
ZW5ndGgpCi0gICAgICAgIDogbnVtYmVyLnRvU3RyaW5nRXhwb25lbnRpYWwoYnVmZmVyLCBOdW1i
ZXJUb1N0cmluZ0J1ZmZlckxlbmd0aCk7CisgICAgZG91YmxlX2NvbnZlcnNpb246OlN0cmluZ0J1
aWxkZXIgYnVpbGRlcihidWZmZXIsIE51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoKTsKKyAgICBj
b25zdCBkb3VibGVfY29udmVyc2lvbjo6RG91YmxlVG9TdHJpbmdDb252ZXJ0ZXImIGNvbnZlcnRl
ciA9IGRvdWJsZV9jb252ZXJzaW9uOjpEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6RWNtYVNjcmlw
dENvbnZlcnRlcigpOworICAgIGNvbnZlcnRlci5Ub1Nob3J0ZXN0KGQsICZidWlsZGVyKTsKKyAg
ICByZXR1cm4gYnVpbGRlci5GaW5hbGl6ZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9kdG9hLmgKaW5kZXggMzkyNGExY2M0MDVkYjI5M2IwMWY2ZDRiZGFlNjU3
NTk1MjU4MTcyYy4uNzE5OTEyMTExMWQ5M2VkZTkwMWJjYTc4ZWMxMmZiYzIzM2FhYTIzYyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9kdG9hLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNpZm5kZWYgV1RGX2R0
b2FfaAogI2RlZmluZSBXVEZfZHRvYV9oCiAKKyNpbmNsdWRlIDx3dGYvZHRvYS9kb3VibGUtY29u
dmVyc2lvbi5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KIAogbmFtZXNwYWNl
IFdURiB7CkBAIC0yOCwyNCArMjksMjYgQEAgY2xhc3MgTXV0ZXg7CiAKIGV4dGVybiBXVEY6Ok11
dGV4KiBzX2R0b2FQNU11dGV4OwogCi0vLyBzMDA6IGlucHV0IHN0cmluZy4gTXVzdCBub3QgYmUg
MCBhbmQgbXVzdCBiZSB0ZXJtaW5hdGVkIGJ5IDAuCi0vLyBzZTogKnNlIHdpbGwgaGF2ZSB0aGUg
bGFzdCBjb25zdW1lZCBjaGFyYWN0ZXIgcG9zaXRpb24gKyAxLgotZG91YmxlIHN0cnRvZChjb25z
dCBjaGFyKiBzMDAsIGNoYXIqKiBzZSk7Ci0KIHR5cGVkZWYgY2hhciBEdG9hQnVmZmVyWzgwXTsK
IAogdm9pZCBkdG9hKER0b2FCdWZmZXIgcmVzdWx0LCBkb3VibGUgZGQsIGJvb2wmIHNpZ24sIGlu
dCYgZXhwb25lbnQsIHVuc2lnbmVkJiBwcmVjaXNpb24pOwogdm9pZCBkdG9hUm91bmRTRihEdG9h
QnVmZmVyIHJlc3VsdCwgZG91YmxlIGRkLCBpbnQgbmRpZ2l0cywgYm9vbCYgc2lnbiwgaW50JiBl
eHBvbmVudCwgdW5zaWduZWQmIHByZWNpc2lvbik7CiB2b2lkIGR0b2FSb3VuZERQKER0b2FCdWZm
ZXIgcmVzdWx0LCBkb3VibGUgZGQsIGludCBuZGlnaXRzLCBib29sJiBzaWduLCBpbnQmIGV4cG9u
ZW50LCB1bnNpZ25lZCYgcHJlY2lzaW9uKTsKIAorLy8gczAwOiBpbnB1dCBzdHJpbmcuIE11c3Qg
bm90IGJlIDAgYW5kIG11c3QgYmUgdGVybWluYXRlZCBieSAwLgorLy8gc2U6ICpzZSB3aWxsIGhh
dmUgdGhlIGxhc3QgY29uc3VtZWQgY2hhcmFjdGVyIHBvc2l0aW9uICsgMS4KK2RvdWJsZSBzdHJ0
b2QoY29uc3QgY2hhciogczAwLCBjaGFyKiogc2UpOworCiAvLyBTaXplID0gODAgZm9yIHNpemVv
ZihEdG9hQnVmZmVyKSArIHNvbWUgc2lnbiBiaXRzLCBkZWNpbWFsIHBvaW50LCAnZScsIGV4cG9u
ZW50IGRpZ2l0cy4KIGNvbnN0IHVuc2lnbmVkIE51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoID0g
OTY7Ci10eXBlZGVmIFVDaGFyIE51bWJlclRvU3RyaW5nQnVmZmVyW051bWJlclRvU3RyaW5nQnVm
ZmVyTGVuZ3RoXTsKLXVuc2lnbmVkIG51bWJlclRvU3RyaW5nKGRvdWJsZSwgTnVtYmVyVG9TdHJp
bmdCdWZmZXIpOwordHlwZWRlZiBjaGFyIE51bWJlclRvU3RyaW5nQnVmZmVyW051bWJlclRvU3Ry
aW5nQnVmZmVyTGVuZ3RoXTsKK3R5cGVkZWYgVUNoYXIgTnVtYmVyVG9VU3RyaW5nQnVmZmVyW051
bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3RoXTsKK2NvbnN0IGNoYXIgKm51bWJlclRvU3RyaW5nKGRv
dWJsZSwgTnVtYmVyVG9TdHJpbmdCdWZmZXIpOwogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNp
bmcgV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlcjsKK3VzaW5nIFdURjo6TnVtYmVyVG9VU3RyaW5n
QnVmZmVyOwogdXNpbmcgV1RGOjpudW1iZXJUb1N0cmluZzsKIAogI2VuZGlmIC8vIFdURl9kdG9h
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9DT1BZSU5HIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL0NPUFlJTkcKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTMzNzE4
YTllZjlkYWU0Y2I0YWZhNTZlNDkwMjExNzYwZDhhOTQ5ZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9DT1BZSU5HCkBAIC0wLDAgKzEsMjYgQEAKK0Nv
cHlyaWdodCAyMDA2LTIwMTEsIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKK21ldDoKKworICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAgICAgIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCitBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCitTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CitMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKK0RBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCitP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL0xJ
Q0VOU0UgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvTElDRU5TRQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45MzM3MThhOWVmOWRhZTRjYjRhZmE1NmU0OTAyMTE3NjBkOGE5NDlmCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL0xJQ0VOU0UKQEAgLTAsMCArMSwy
NiBAQAorQ29weXJpZ2h0IDIwMDYtMjAxMSwgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorbWV0OgorCisgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAgICAgIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICAgICAgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKK0EgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCitPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
K1NQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKK0xJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCitUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKK09GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L2R0b2EvUkVBRE1FIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL1JFQURNRQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mMTg2YjQyMGY0MmJjMTRjN2Q1NzY1ZWE0M2Y2YjI4ZDNjMjliOTIxCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL1JFQURNRQpAQCAtMCww
ICsxLDExIEBACitodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZG91YmxlLWNvbnZlcnNpb24KKwor
VGhpcyBwcm9qZWN0IChkb3VibGUtY29udmVyc2lvbikgcHJvdmlkZXMgYmluYXJ5LWRlY2ltYWwg
YW5kIGRlY2ltYWwtYmluYXJ5Cityb3V0aW5lcyBmb3IgSUVFRSBkb3VibGVzLgorCitUaGUgbGli
cmFyeSBjb25zaXN0cyBvZiBlZmZpY2llbnQgY29udmVyc2lvbiByb3V0aW5lcyB0aGF0IGhhdmUg
YmVlbiBleHRyYWN0ZWQKK2Zyb20gdGhlIFY4IEphdmFTY3JpcHQgZW5naW5lLiBUaGUgY29kZSBo
YXMgYmVlbiByZWZhY3RvcmVkIGFuZCBpbXByb3ZlZCBzbyB0aGF0CitpdCBjYW4gYmUgdXNlZCBt
b3JlIGVhc2lseSBpbiBvdGhlciBwcm9qZWN0cy4KKworVGhlcmUgaXMgZXh0ZW5zaXZlIGRvY3Vt
ZW50YXRpb24gaW4gc3JjL2RvdWJsZS1jb252ZXJzaW9uLmguIE90aGVyIGV4YW1wbGVzIGNhbgor
YmUgZm91bmQgaW4gdGVzdC9jY3Rlc3QvdGVzdC1jb252ZXJzaW9ucy5jYy4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9iaWdudW0tZHRvYS5jYyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvZHRvYS9iaWdudW0tZHRvYS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZTk4NzFl
M2FjYTRkYjRlOWRkMjYzYWY2YzExYTQxZDc5MDE5NTU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2JpZ251bS1kdG9hLmNjCkBAIC0wLDAgKzEsNjU3
IEBACisvLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLwor
Ly8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAg
ICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAg
ICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisv
LyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNp
bmNsdWRlICJiaWdudW0tZHRvYS5oIgorCisjaW5jbHVkZSAiYmlnbnVtLmgiCisjaW5jbHVkZSAi
ZG91YmxlLmgiCisKK25hbWVzcGFjZSBXVEYgeworCituYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNp
b24geworICAgIAorICAgIHN0YXRpYyBpbnQgTm9ybWFsaXplZEV4cG9uZW50KHVpbnQ2NF90IHNp
Z25pZmljYW5kLCBpbnQgZXhwb25lbnQpIHsKKyAgICAgICAgQVNTRVJUKHNpZ25pZmljYW5kICE9
IDApOworICAgICAgICB3aGlsZSAoKHNpZ25pZmljYW5kICYgRG91YmxlOjprSGlkZGVuQml0KSA9
PSAwKSB7CisgICAgICAgICAgICBzaWduaWZpY2FuZCA9IHNpZ25pZmljYW5kIDw8IDE7CisgICAg
ICAgICAgICBleHBvbmVudCA9IGV4cG9uZW50IC0gMTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gZXhwb25lbnQ7CisgICAgfQorICAgIAorICAgIAorICAgIC8vIEZvcndhcmQgZGVjbGFyYXRp
b25zOgorICAgIC8vIFJldHVybnMgYW4gZXN0aW1hdGlvbiBvZiBrIHN1Y2ggdGhhdCAxMF4oay0x
KSA8PSB2IDwgMTBeay4KKyAgICBzdGF0aWMgaW50IEVzdGltYXRlUG93ZXIoaW50IGV4cG9uZW50
KTsKKyAgICAvLyBDb21wdXRlcyB2IC8gMTBeZXN0aW1hdGVkX3Bvd2VyIGV4YWN0bHksIGFzIGEg
cmF0aW8gb2YgdHdvIGJpZ251bXMsIG51bWVyYXRvcgorICAgIC8vIGFuZCBkZW5vbWluYXRvci4K
KyAgICBzdGF0aWMgdm9pZCBJbml0aWFsU2NhbGVkU3RhcnRWYWx1ZXMoZG91YmxlIHYsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlc3RpbWF0ZWRfcG93ZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbmVlZF9ib3Vu
ZGFyeV9kZWx0YXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJp
Z251bSogbnVtZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBCaWdudW0qIGRlbm9taW5hdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBCaWdudW0qIGRlbHRhX21pbnVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBCaWdudW0qIGRlbHRhX3BsdXMpOworICAgIC8vIE11bHRpcGxpZXMgbnVt
ZXJhdG9yL2Rlbm9taW5hdG9yIHNvIHRoYXQgaXRzIHZhbHVlcyBsaWVzIGluIHRoZSByYW5nZSAx
LTEwLgorICAgIC8vIFJldHVybnMgZGVjaW1hbF9wb2ludCBzLnQuCisgICAgLy8gIHYgPSBudW1l
cmF0b3InL2Rlbm9taW5hdG9yJyAqIDEwXihkZWNpbWFsX3BvaW50LTEpCisgICAgLy8gICAgIHdo
ZXJlIG51bWVyYXRvcicgYW5kIGRlbm9taW5hdG9yJyBhcmUgdGhlIHZhbHVlcyBvZiBudW1lcmF0
b3IgYW5kCisgICAgLy8gICAgIGRlbm9taW5hdG9yIGFmdGVyIHRoZSBjYWxsIHRvIHRoaXMgZnVu
Y3Rpb24uCisgICAgc3RhdGljIHZvaWQgRml4dXBNdWx0aXBseTEwKGludCBlc3RpbWF0ZWRfcG93
ZXIsIGJvb2wgaXNfZXZlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBk
ZWNpbWFsX3BvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdudW0qIG51
bWVyYXRvciwgQmlnbnVtKiBkZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQmlnbnVtKiBkZWx0YV9taW51cywgQmlnbnVtKiBkZWx0YV9wbHVzKTsKKyAgICAvLyBH
ZW5lcmF0ZXMgZGlnaXRzIGZyb20gdGhlIGxlZnQgdG8gdGhlIHJpZ2h0IGFuZCBzdG9wcyB3aGVu
IHRoZSBnZW5lcmF0ZWQKKyAgICAvLyBkaWdpdHMgeWllbGQgdGhlIHNob3J0ZXN0IGRlY2ltYWwg
cmVwcmVzZW50YXRpb24gb2Ygdi4KKyAgICBzdGF0aWMgdm9pZCBHZW5lcmF0ZVNob3J0ZXN0RGln
aXRzKEJpZ251bSogbnVtZXJhdG9yLCBCaWdudW0qIGRlbm9taW5hdG9yLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBkZWx0YV9taW51cywgQmlnbnVtKiBk
ZWx0YV9wbHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBp
c19ldmVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPGNo
YXI+IGJ1ZmZlciwgaW50KiBsZW5ndGgpOworICAgIC8vIEdlbmVyYXRlcyAncmVxdWVzdGVkX2Rp
Z2l0cycgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQuCisgICAgc3RhdGljIHZvaWQgQmlnbnVtVG9G
aXhlZChpbnQgcmVxdWVzdGVkX2RpZ2l0cywgaW50KiBkZWNpbWFsX3BvaW50LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBudW1lcmF0b3IsIEJpZ251bSogZGVub21pbmF0
b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4oYnVmZmVyKSwg
aW50KiBsZW5ndGgpOworICAgIC8vIEdlbmVyYXRlcyAnY291bnQnIGRpZ2l0cyBvZiBudW1lcmF0
b3IvZGVub21pbmF0b3IuCisgICAgLy8gT25jZSAnY291bnQnIGRpZ2l0cyBoYXZlIGJlZW4gcHJv
ZHVjZWQgcm91bmRzIHRoZSByZXN1bHQgZGVwZW5kaW5nIG9uIHRoZQorICAgIC8vIHJlbWFpbmRl
ciAocmVtYWluZGVycyBvZiBleGFjdGx5IC41IHJvdW5kIHVwd2FyZHMpLiBNaWdodCB1cGRhdGUg
dGhlCisgICAgLy8gZGVjaW1hbF9wb2ludCB3aGVuIHJvdW5kaW5nIHVwIChmb3IgZXhhbXBsZSBm
b3IgMC45OTk5KS4KKyAgICBzdGF0aWMgdm9pZCBHZW5lcmF0ZUNvdW50ZWREaWdpdHMoaW50IGNv
dW50LCBpbnQqIGRlY2ltYWxfcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEJpZ251bSogbnVtZXJhdG9yLCBCaWdudW0qIGRlbm9taW5hdG9yLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4oYnVmZmVyKSwgaW50KiBs
ZW5ndGgpOworICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVtRHRvYShkb3VibGUgdiwgQmlnbnVt
RHRvYU1vZGUgbW9kZSwgaW50IHJlcXVlc3RlZF9kaWdpdHMsCisgICAgICAgICAgICAgICAgICAg
IFZlY3RvcjxjaGFyPiBidWZmZXIsIGludCogbGVuZ3RoLCBpbnQqIGRlY2ltYWxfcG9pbnQpIHsK
KyAgICAgICAgQVNTRVJUKHYgPiAwKTsKKyAgICAgICAgQVNTRVJUKCFEb3VibGUodikuSXNTcGVj
aWFsKCkpOworICAgICAgICB1aW50NjRfdCBzaWduaWZpY2FuZCA9IERvdWJsZSh2KS5TaWduaWZp
Y2FuZCgpOworICAgICAgICBib29sIGlzX2V2ZW4gPSAoc2lnbmlmaWNhbmQgJiAxKSA9PSAwOwor
ICAgICAgICBpbnQgZXhwb25lbnQgPSBEb3VibGUodikuRXhwb25lbnQoKTsKKyAgICAgICAgaW50
IG5vcm1hbGl6ZWRfZXhwb25lbnQgPSBOb3JtYWxpemVkRXhwb25lbnQoc2lnbmlmaWNhbmQsIGV4
cG9uZW50KTsKKyAgICAgICAgLy8gZXN0aW1hdGVkX3Bvd2VyIG1pZ2h0IGJlIHRvbyBsb3cgYnkg
MS4KKyAgICAgICAgaW50IGVzdGltYXRlZF9wb3dlciA9IEVzdGltYXRlUG93ZXIobm9ybWFsaXpl
ZF9leHBvbmVudCk7CisgICAgICAgIAorICAgICAgICAvLyBTaG9ydGN1dCBmb3IgRml4ZWQuCisg
ICAgICAgIC8vIFRoZSByZXF1ZXN0ZWQgZGlnaXRzIGNvcnJlc3BvbmQgdG8gdGhlIGRpZ2l0cyBh
ZnRlciB0aGUgcG9pbnQuIElmIHRoZQorICAgICAgICAvLyBudW1iZXIgaXMgbXVjaCB0b28gc21h
bGwsIHRoZW4gdGhlcmUgaXMgbm8gbmVlZCBpbiB0cnlpbmcgdG8gZ2V0IGFueQorICAgICAgICAv
LyBkaWdpdHMuCisgICAgICAgIGlmIChtb2RlID09IEJJR05VTV9EVE9BX0ZJWEVEICYmIC1lc3Rp
bWF0ZWRfcG93ZXIgLSAxID4gcmVxdWVzdGVkX2RpZ2l0cykgeworICAgICAgICAgICAgYnVmZmVy
WzBdID0gJ1wwJzsKKyAgICAgICAgICAgICpsZW5ndGggPSAwOworICAgICAgICAgICAgLy8gU2V0
IGRlY2ltYWwtcG9pbnQgdG8gLXJlcXVlc3RlZF9kaWdpdHMuIFRoaXMgaXMgd2hhdCBHYXkgZG9l
cy4KKyAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBpdCBzaG91bGQgbm90IGhhdmUgYW55IGVmZmVj
dCBhbnl3YXlzIHNpbmNlIHRoZSBzdHJpbmcgaXMKKyAgICAgICAgICAgIC8vIGVtcHR5LgorICAg
ICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSAtcmVxdWVzdGVkX2RpZ2l0czsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQmlnbnVtIG51bWVyYXRvcjsK
KyAgICAgICAgQmlnbnVtIGRlbm9taW5hdG9yOworICAgICAgICBCaWdudW0gZGVsdGFfbWludXM7
CisgICAgICAgIEJpZ251bSBkZWx0YV9wbHVzOworICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGJp
Z251bSBjYW4gZ3JvdyBsYXJnZSBlbm91Z2guIFRoZSBzbWFsbGVzdCBkb3VibGUgZXF1YWxzCisg
ICAgICAgIC8vIDRlLTMyNC4gSW4gdGhpcyBjYXNlIHRoZSBkZW5vbWluYXRvciBuZWVkcyBmZXdl
ciB0aGFuIDMyNCo0IGJpbmFyeSBkaWdpdHMuCisgICAgICAgIC8vIFRoZSBtYXhpbXVtIGRvdWJs
ZSBpcyAxLjc5NzY5MzEzNDg2MjMxNTdlMzA4IHdoaWNoIG5lZWRzIGZld2VyIHRoYW4KKyAgICAg
ICAgLy8gMzA4KjQgYmluYXJ5IGRpZ2l0cy4KKyAgICAgICAgQVNTRVJUKEJpZ251bTo6a01heFNp
Z25pZmljYW50Qml0cyA+PSAzMjQqNCk7CisgICAgICAgIGJvb2wgbmVlZF9ib3VuZGFyeV9kZWx0
YXMgPSAobW9kZSA9PSBCSUdOVU1fRFRPQV9TSE9SVEVTVCk7CisgICAgICAgIEluaXRpYWxTY2Fs
ZWRTdGFydFZhbHVlcyh2LCBlc3RpbWF0ZWRfcG93ZXIsIG5lZWRfYm91bmRhcnlfZGVsdGFzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm51bWVyYXRvciwgJmRlbm9taW5hdG9y
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRlbHRhX21pbnVzLCAmZGVsdGFf
cGx1cyk7CisgICAgICAgIC8vIFdlIG5vdyBoYXZlIHYgPSAobnVtZXJhdG9yIC8gZGVub21pbmF0
b3IpICogMTBeZXN0aW1hdGVkX3Bvd2VyLgorICAgICAgICBGaXh1cE11bHRpcGx5MTAoZXN0aW1h
dGVkX3Bvd2VyLCBpc19ldmVuLCBkZWNpbWFsX3BvaW50LAorICAgICAgICAgICAgICAgICAgICAg
ICAgJm51bWVyYXRvciwgJmRlbm9taW5hdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgJmRl
bHRhX21pbnVzLCAmZGVsdGFfcGx1cyk7CisgICAgICAgIC8vIFdlIG5vdyBoYXZlIHYgPSAobnVt
ZXJhdG9yIC8gZGVub21pbmF0b3IpICogMTBeKGRlY2ltYWxfcG9pbnQtMSksIGFuZAorICAgICAg
ICAvLyAgMSA8PSAobnVtZXJhdG9yICsgZGVsdGFfcGx1cykgLyBkZW5vbWluYXRvciA8IDEwCisg
ICAgICAgIHN3aXRjaCAobW9kZSkgeworICAgICAgICAgICAgY2FzZSBCSUdOVU1fRFRPQV9TSE9S
VEVTVDoKKyAgICAgICAgICAgICAgICBHZW5lcmF0ZVNob3J0ZXN0RGlnaXRzKCZudW1lcmF0b3Is
ICZkZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZk
ZWx0YV9taW51cywgJmRlbHRhX3BsdXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpc19ldmVuLCBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIEJJR05VTV9EVE9BX0ZJWEVEOgorICAgICAgICAgICAgICAgIEJp
Z251bVRvRml4ZWQocmVxdWVzdGVkX2RpZ2l0cywgZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZudW1lcmF0b3IsICZkZW5vbWluYXRvciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgQklHTlVNX0RUT0FfUFJFQ0lTSU9OOgorICAgICAgICAgICAg
ICAgIEdlbmVyYXRlQ291bnRlZERpZ2l0cyhyZXF1ZXN0ZWRfZGlnaXRzLCBkZWNpbWFsX3BvaW50
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbnVtZXJhdG9yLCAmZGVu
b21pbmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwg
bGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgICAgICBidWZmZXJb
Kmxlbmd0aF0gPSAnXDAnOworICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBUaGUgcHJvY2VkdXJl
IHN0YXJ0cyBnZW5lcmF0aW5nIGRpZ2l0cyBmcm9tIHRoZSBsZWZ0IHRvIHRoZSByaWdodCBhbmQg
c3RvcHMKKyAgICAvLyB3aGVuIHRoZSBnZW5lcmF0ZWQgZGlnaXRzIHlpZWxkIHRoZSBzaG9ydGVz
dCBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIHYuIEEKKyAgICAvLyBkZWNpbWFsIHJlcHJlc2Vu
dGF0aW9uIG9mIHYgaXMgYSBudW1iZXIgbHlpbmcgY2xvc2VyIHRvIHYgdGhhbiB0byBhbnkgb3Ro
ZXIKKyAgICAvLyBkb3VibGUsIHNvIGl0IGNvbnZlcnRzIHRvIHYgd2hlbiByZWFkLgorICAgIC8v
CisgICAgLy8gVGhpcyBpcyB0cnVlIGlmIGQsIHRoZSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uLCBp
cyBiZXR3ZWVuIG0tIGFuZCBtKywgdGhlCisgICAgLy8gdXBwZXIgYW5kIGxvd2VyIGJvdW5kYXJp
ZXMuIGQgbXVzdCBiZSBzdHJpY3RseSBiZXR3ZWVuIHRoZW0gaWYgIWlzX2V2ZW4uCisgICAgLy8g
ICAgICAgICAgIG0tIDo9IChudW1lcmF0b3IgLSBkZWx0YV9taW51cykgLyBkZW5vbWluYXRvcgor
ICAgIC8vICAgICAgICAgICBtKyA6PSAobnVtZXJhdG9yICsgZGVsdGFfcGx1cykgLyBkZW5vbWlu
YXRvcgorICAgIC8vCisgICAgLy8gUHJlY29uZGl0aW9uOiAwIDw9IChudW1lcmF0b3IrZGVsdGFf
cGx1cykgLyBkZW5vbWluYXRvciA8IDEwLgorICAgIC8vICAgSWYgMSA8PSAobnVtZXJhdG9yK2Rl
bHRhX3BsdXMpIC8gZGVub21pbmF0b3IgPCAxMCB0aGVuIG5vIGxlYWRpbmcgMCBkaWdpdAorICAg
IC8vICAgd2lsbCBiZSBwcm9kdWNlZC4gVGhpcyBzaG91bGQgYmUgdGhlIHN0YW5kYXJkIHByZWNv
bmRpdGlvbi4KKyAgICBzdGF0aWMgdm9pZCBHZW5lcmF0ZVNob3J0ZXN0RGlnaXRzKEJpZ251bSog
bnVtZXJhdG9yLCBCaWdudW0qIGRlbm9taW5hdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQmlnbnVtKiBkZWx0YV9taW51cywgQmlnbnVtKiBkZWx0YV9wbHVzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc19ldmVuLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwg
aW50KiBsZW5ndGgpIHsKKyAgICAgICAgLy8gU21hbGwgb3B0aW1pemF0aW9uOiBpZiBkZWx0YV9t
aW51cyBhbmQgZGVsdGFfcGx1cyBhcmUgdGhlIHNhbWUganVzdCByZXVzZQorICAgICAgICAvLyBv
bmUgb2YgdGhlIHR3byBiaWdudW1zLgorICAgICAgICBpZiAoQmlnbnVtOjpFcXVhbCgqZGVsdGFf
bWludXMsICpkZWx0YV9wbHVzKSkgeworICAgICAgICAgICAgZGVsdGFfcGx1cyA9IGRlbHRhX21p
bnVzOworICAgICAgICB9CisgICAgICAgICpsZW5ndGggPSAwOworICAgICAgICB3aGlsZSAodHJ1
ZSkgeworICAgICAgICAgICAgdWludDE2X3QgZGlnaXQ7CisgICAgICAgICAgICBkaWdpdCA9IG51
bWVyYXRvci0+RGl2aWRlTW9kdWxvSW50QmlnbnVtKCpkZW5vbWluYXRvcik7CisgICAgICAgICAg
ICBBU1NFUlQoZGlnaXQgPD0gOSk7ICAvLyBkaWdpdCBpcyBhIHVpbnQxNl90IGFuZCB0aGVyZWZv
cmUgYWx3YXlzIHBvc2l0aXZlLgorICAgICAgICAgICAgLy8gZGlnaXQgPSBudW1lcmF0b3IgLyBk
ZW5vbWluYXRvciAoaW50ZWdlciBkaXZpc2lvbikuCisgICAgICAgICAgICAvLyBudW1lcmF0b3Ig
PSBudW1lcmF0b3IgJSBkZW5vbWluYXRvci4KKyAgICAgICAgICAgIGJ1ZmZlclsoKmxlbmd0aCkr
K10gPSBkaWdpdCArICcwJzsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gQ2FuIHdlIHN0
b3AgYWxyZWFkeT8KKyAgICAgICAgICAgIC8vIElmIHRoZSByZW1haW5kZXIgb2YgdGhlIGRpdmlz
aW9uIGlzIGxlc3MgdGhhbiB0aGUgZGlzdGFuY2UgdG8gdGhlIGxvd2VyCisgICAgICAgICAgICAv
LyBib3VuZGFyeSB3ZSBjYW4gc3RvcC4gSW4gdGhpcyBjYXNlIHdlIHNpbXBseSByb3VuZCBkb3du
IChkaXNjYXJkaW5nIHRoZQorICAgICAgICAgICAgLy8gcmVtYWluZGVyKS4KKyAgICAgICAgICAg
IC8vIFNpbWlsYXJseSB3ZSB0ZXN0IGlmIHdlIGNhbiByb3VuZCB1cCAodXNpbmcgdGhlIHVwcGVy
IGJvdW5kYXJ5KS4KKyAgICAgICAgICAgIGJvb2wgaW5fZGVsdGFfcm9vbV9taW51czsKKyAgICAg
ICAgICAgIGJvb2wgaW5fZGVsdGFfcm9vbV9wbHVzOworICAgICAgICAgICAgaWYgKGlzX2V2ZW4p
IHsKKyAgICAgICAgICAgICAgICBpbl9kZWx0YV9yb29tX21pbnVzID0gQmlnbnVtOjpMZXNzRXF1
YWwoKm51bWVyYXRvciwgKmRlbHRhX21pbnVzKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgaW5fZGVsdGFfcm9vbV9taW51cyA9IEJpZ251bTo6TGVzcygqbnVtZXJhdG9y
LCAqZGVsdGFfbWludXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlzX2V2ZW4p
IHsKKyAgICAgICAgICAgICAgICBpbl9kZWx0YV9yb29tX3BsdXMgPQorICAgICAgICAgICAgICAg
IEJpZ251bTo6UGx1c0NvbXBhcmUoKm51bWVyYXRvciwgKmRlbHRhX3BsdXMsICpkZW5vbWluYXRv
cikgPj0gMDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaW5fZGVsdGFf
cm9vbV9wbHVzID0KKyAgICAgICAgICAgICAgICBCaWdudW06OlBsdXNDb21wYXJlKCpudW1lcmF0
b3IsICpkZWx0YV9wbHVzLCAqZGVub21pbmF0b3IpID4gMDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmICghaW5fZGVsdGFfcm9vbV9taW51cyAmJiAhaW5fZGVsdGFfcm9vbV9wbHVzKSB7
CisgICAgICAgICAgICAgICAgLy8gUHJlcGFyZSBmb3IgbmV4dCBpdGVyYXRpb24uCisgICAgICAg
ICAgICAgICAgbnVtZXJhdG9yLT5UaW1lczEwKCk7CisgICAgICAgICAgICAgICAgZGVsdGFfbWlu
dXMtPlRpbWVzMTAoKTsKKyAgICAgICAgICAgICAgICAvLyBXZSBvcHRpbWl6ZWQgZGVsdGFfcGx1
cyB0byBiZSBlcXVhbCB0byBkZWx0YV9taW51cyAoaWYgdGhleSBzaGFyZSB0aGUKKyAgICAgICAg
ICAgICAgICAvLyBzYW1lIHZhbHVlKS4gU28gZG9uJ3QgbXVsdGlwbHkgZGVsdGFfcGx1cyBpZiB0
aGV5IHBvaW50IHRvIHRoZSBzYW1lCisgICAgICAgICAgICAgICAgLy8gb2JqZWN0LgorICAgICAg
ICAgICAgICAgIGlmIChkZWx0YV9taW51cyAhPSBkZWx0YV9wbHVzKSB7CisgICAgICAgICAgICAg
ICAgICAgIGRlbHRhX3BsdXMtPlRpbWVzMTAoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKGluX2RlbHRhX3Jvb21fbWludXMgJiYgaW5fZGVsdGFfcm9vbV9wbHVz
KSB7CisgICAgICAgICAgICAgICAgLy8gTGV0J3Mgc2VlIGlmIDIqbnVtZXJhdG9yIDwgZGVub21p
bmF0b3IuCisgICAgICAgICAgICAgICAgLy8gSWYgeWVzLCB0aGVuIHRoZSBuZXh0IGRpZ2l0IHdv
dWxkIGJlIDwgNSBhbmQgd2UgY2FuIHJvdW5kIGRvd24uCisgICAgICAgICAgICAgICAgaW50IGNv
bXBhcmUgPSBCaWdudW06OlBsdXNDb21wYXJlKCpudW1lcmF0b3IsICpudW1lcmF0b3IsICpkZW5v
bWluYXRvcik7CisgICAgICAgICAgICAgICAgaWYgKGNvbXBhcmUgPCAwKSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIFJlbWFpbmluZyBkaWdpdHMgYXJlIGxlc3MgdGhhbiAuNS4gLT4gUm91bmQg
ZG93biAoPT0gZG8gbm90aGluZykuCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb21wYXJl
ID4gMCkgeworICAgICAgICAgICAgICAgICAgICAvLyBSZW1haW5pbmcgZGlnaXRzIGFyZSBtb3Jl
IHRoYW4gLjUgb2YgZGVub21pbmF0b3IuIC0+IFJvdW5kIHVwLgorICAgICAgICAgICAgICAgICAg
ICAvLyBOb3RlIHRoYXQgdGhlIGxhc3QgZGlnaXQgY291bGQgbm90IGJlIGEgJzknIGFzIG90aGVy
d2lzZSB0aGUgd2hvbGUKKyAgICAgICAgICAgICAgICAgICAgLy8gbG9vcCB3b3VsZCBoYXZlIHN0
b3BwZWQgZWFybGllci4KKyAgICAgICAgICAgICAgICAgICAgLy8gV2Ugc3RpbGwgaGF2ZSBhbiBh
c3NlcnQgaGVyZSBpbiBjYXNlIHRoZSBwcmVjb25kaXRpb25zIHdlcmUgbm90CisgICAgICAgICAg
ICAgICAgICAgIC8vIHNhdGlzZmllZC4KKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJ1ZmZl
clsoKmxlbmd0aCkgLSAxXSAhPSAnOScpOworICAgICAgICAgICAgICAgICAgICBidWZmZXJbKCps
ZW5ndGgpIC0gMV0rKzsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAvLyBIYWxmd2F5IGNhc2UuCisgICAgICAgICAgICAgICAgICAgIC8vIFRPRE8oZmxvaXRz
Y2gpOiBuZWVkIGEgd2F5IHRvIHNvbHZlIGhhbGYtd2F5IGNhc2VzLgorICAgICAgICAgICAgICAg
ICAgICAvLyAgIEZvciBub3cgbGV0J3Mgcm91bmQgdG93YXJkcyBldmVuIChzaW5jZSB0aGlzIGlz
IHdoYXQgR2F5IHNlZW1zIHRvCisgICAgICAgICAgICAgICAgICAgIC8vICAgZG8pLgorICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKChidWZmZXJbKCpsZW5ndGgp
IC0gMV0gLSAnMCcpICUgMiA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBSb3Vu
ZCBkb3duID0+IERvIG5vdGhpbmcuCisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYnVmZmVyWygqbGVuZ3RoKSAtIDFdICE9ICc5Jyk7
CisgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbKCpsZW5ndGgpIC0gMV0rKzsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9IGVsc2UgaWYgKGluX2RlbHRhX3Jvb21fbWludXMpIHsKKyAgICAg
ICAgICAgICAgICAvLyBSb3VuZCBkb3duICg9PSBkbyBub3RoaW5nKS4KKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9IGVsc2UgeyAgLy8gaW5fZGVsdGFfcm9vbV9wbHVzCisg
ICAgICAgICAgICAgICAgLy8gUm91bmQgdXAuCisgICAgICAgICAgICAgICAgLy8gTm90ZSBhZ2Fp
biB0aGF0IHRoZSBsYXN0IGRpZ2l0IGNvdWxkIG5vdCBiZSAnOScgc2luY2UgdGhpcyB3b3VsZCBo
YXZlCisgICAgICAgICAgICAgICAgLy8gc3RvcHBlZCB0aGUgbG9vcCBlYXJsaWVyLgorICAgICAg
ICAgICAgICAgIC8vIFdlIHN0aWxsIGhhdmUgYW4gQVNTRVJUIGhlcmUsIGluIGNhc2UgdGhlIHBy
ZWNvbmRpdGlvbnMgd2VyZSBub3QKKyAgICAgICAgICAgICAgICAvLyBzYXRpc2ZpZWQuCisgICAg
ICAgICAgICAgICAgQVNTRVJUKGJ1ZmZlclsoKmxlbmd0aCkgLTFdICE9ICc5Jyk7CisgICAgICAg
ICAgICAgICAgYnVmZmVyWygqbGVuZ3RoKSAtIDFdKys7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIC8vIExl
dCB2ID0gbnVtZXJhdG9yIC8gZGVub21pbmF0b3IgPCAxMC4KKyAgICAvLyBUaGVuIHdlIGdlbmVy
YXRlICdjb3VudCcgZGlnaXRzIG9mIGQgPSB4Lnh4eHh4Li4uICh3aXRob3V0IHRoZSBkZWNpbWFs
IHBvaW50KQorICAgIC8vIGZyb20gbGVmdCB0byByaWdodC4gT25jZSAnY291bnQnIGRpZ2l0cyBo
YXZlIGJlZW4gcHJvZHVjZWQgd2UgZGVjaWRlIHdldGhlcgorICAgIC8vIHRvIHJvdW5kIHVwIG9y
IGRvd24uIFJlbWFpbmRlcnMgb2YgZXhhY3RseSAuNSByb3VuZCB1cHdhcmRzLiBOdW1iZXJzIHN1
Y2gKKyAgICAvLyBhcyA5Ljk5OTk5OSBwcm9wYWdhdGUgYSBjYXJyeSBhbGwgdGhlIHdheSwgYW5k
IGNoYW5nZSB0aGUKKyAgICAvLyBleHBvbmVudCAoZGVjaW1hbF9wb2ludCksIHdoZW4gcm91bmRp
bmcgdXB3YXJkcy4KKyAgICBzdGF0aWMgdm9pZCBHZW5lcmF0ZUNvdW50ZWREaWdpdHMoaW50IGNv
dW50LCBpbnQqIGRlY2ltYWxfcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEJpZ251bSogbnVtZXJhdG9yLCBCaWdudW0qIGRlbm9taW5hdG9yLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4oYnVmZmVyKSwgaW50KiBs
ZW5ndGgpIHsKKyAgICAgICAgQVNTRVJUKGNvdW50ID49IDApOworICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50IC0gMTsgKytpKSB7CisgICAgICAgICAgICB1aW50MTZfdCBkaWdpdDsK
KyAgICAgICAgICAgIGRpZ2l0ID0gbnVtZXJhdG9yLT5EaXZpZGVNb2R1bG9JbnRCaWdudW0oKmRl
bm9taW5hdG9yKTsKKyAgICAgICAgICAgIEFTU0VSVChkaWdpdCA8PSA5KTsgIC8vIGRpZ2l0IGlz
IGEgdWludDE2X3QgYW5kIHRoZXJlZm9yZSBhbHdheXMgcG9zaXRpdmUuCisgICAgICAgICAgICAv
LyBkaWdpdCA9IG51bWVyYXRvciAvIGRlbm9taW5hdG9yIChpbnRlZ2VyIGRpdmlzaW9uKS4KKyAg
ICAgICAgICAgIC8vIG51bWVyYXRvciA9IG51bWVyYXRvciAlIGRlbm9taW5hdG9yLgorICAgICAg
ICAgICAgYnVmZmVyW2ldID0gZGlnaXQgKyAnMCc7CisgICAgICAgICAgICAvLyBQcmVwYXJlIGZv
ciBuZXh0IGl0ZXJhdGlvbi4KKyAgICAgICAgICAgIG51bWVyYXRvci0+VGltZXMxMCgpOworICAg
ICAgICB9CisgICAgICAgIC8vIEdlbmVyYXRlIHRoZSBsYXN0IGRpZ2l0LgorICAgICAgICB1aW50
MTZfdCBkaWdpdDsKKyAgICAgICAgZGlnaXQgPSBudW1lcmF0b3ItPkRpdmlkZU1vZHVsb0ludEJp
Z251bSgqZGVub21pbmF0b3IpOworICAgICAgICBpZiAoQmlnbnVtOjpQbHVzQ29tcGFyZSgqbnVt
ZXJhdG9yLCAqbnVtZXJhdG9yLCAqZGVub21pbmF0b3IpID49IDApIHsKKyAgICAgICAgICAgIGRp
Z2l0Kys7CisgICAgICAgIH0KKyAgICAgICAgYnVmZmVyW2NvdW50IC0gMV0gPSBkaWdpdCArICcw
JzsKKyAgICAgICAgLy8gQ29ycmVjdCBiYWQgZGlnaXRzIChpbiBjYXNlIHdlIGhhZCBhIHNlcXVl
bmNlIG9mICc5J3MpLiBQcm9wYWdhdGUgdGhlCisgICAgICAgIC8vIGNhcnJ5IHVudGlsIHdlIGhh
dCBhIG5vbi0nOScgb3IgdGlsIHdlIHJlYWNoIHRoZSBmaXJzdCBkaWdpdC4KKyAgICAgICAgZm9y
IChpbnQgaSA9IGNvdW50IC0gMTsgaSA+IDA7IC0taSkgeworICAgICAgICAgICAgaWYgKGJ1ZmZl
cltpXSAhPSAnMCcgKyAxMCkgYnJlYWs7CisgICAgICAgICAgICBidWZmZXJbaV0gPSAnMCc7Cisg
ICAgICAgICAgICBidWZmZXJbaSAtIDFdKys7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJ1ZmZl
clswXSA9PSAnMCcgKyAxMCkgeworICAgICAgICAgICAgLy8gUHJvcGFnYXRlIGEgY2FycnkgcGFz
dCB0aGUgdG9wIHBsYWNlLgorICAgICAgICAgICAgYnVmZmVyWzBdID0gJzEnOworICAgICAgICAg
ICAgKCpkZWNpbWFsX3BvaW50KSsrOworICAgICAgICB9CisgICAgICAgICpsZW5ndGggPSBjb3Vu
dDsKKyAgICB9CisgICAgCisgICAgCisgICAgLy8gR2VuZXJhdGVzICdyZXF1ZXN0ZWRfZGlnaXRz
JyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludC4gSXQgbWlnaHQgb21pdAorICAgIC8vIHRyYWlsaW5n
ICcwJ3MuIElmIHRoZSBpbnB1dCBudW1iZXIgaXMgdG9vIHNtYWxsIHRoZW4gbm8gZGlnaXRzIGF0
IGFsbCBhcmUKKyAgICAvLyBnZW5lcmF0ZWQgKGV4LjogMiBmaXhlZCBkaWdpdHMgZm9yIDAuMDAw
MDEpLgorICAgIC8vCisgICAgLy8gSW5wdXQgdmVyaWZpZXM6ICAxIDw9IChudW1lcmF0b3IgKyBk
ZWx0YSkgLyBkZW5vbWluYXRvciA8IDEwLgorICAgIHN0YXRpYyB2b2lkIEJpZ251bVRvRml4ZWQo
aW50IHJlcXVlc3RlZF9kaWdpdHMsIGludCogZGVjaW1hbF9wb2ludCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEJpZ251bSogbnVtZXJhdG9yLCBCaWdudW0qIGRlbm9taW5hdG9yLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+KGJ1ZmZlciksIGludCog
bGVuZ3RoKSB7CisgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBoYXZlIHRvIGxvb2sgYXQgbW9yZSB0
aGFuIGp1c3QgdGhlIHJlcXVlc3RlZF9kaWdpdHMsIHNpbmNlCisgICAgICAgIC8vIGEgbnVtYmVy
IGNvdWxkIGJlIHJvdW5kZWQgdXAuIEV4YW1wbGU6IHY9MC41IHdpdGggcmVxdWVzdGVkX2RpZ2l0
cz0wLgorICAgICAgICAvLyBFdmVuIHRob3VnaCB0aGUgcG93ZXIgb2YgdiBlcXVhbHMgMCB3ZSBj
YW4ndCBqdXN0IHN0b3AgaGVyZS4KKyAgICAgICAgaWYgKC0oKmRlY2ltYWxfcG9pbnQpID4gcmVx
dWVzdGVkX2RpZ2l0cykgeworICAgICAgICAgICAgLy8gVGhlIG51bWJlciBpcyBkZWZpbml0aXZl
bHkgdG9vIHNtYWxsLgorICAgICAgICAgICAgLy8gRXg6IDAuMDAxIHdpdGggcmVxdWVzdGVkX2Rp
Z2l0cyA9PSAxLgorICAgICAgICAgICAgLy8gU2V0IGRlY2ltYWwtcG9pbnQgdG8gLXJlcXVlc3Rl
ZF9kaWdpdHMuIFRoaXMgaXMgd2hhdCBHYXkgZG9lcy4KKyAgICAgICAgICAgIC8vIE5vdGUgdGhh
dCBpdCBzaG91bGQgbm90IGhhdmUgYW55IGVmZmVjdCBhbnl3YXlzIHNpbmNlIHRoZSBzdHJpbmcg
aXMKKyAgICAgICAgICAgIC8vIGVtcHR5LgorICAgICAgICAgICAgKmRlY2ltYWxfcG9pbnQgPSAt
cmVxdWVzdGVkX2RpZ2l0czsKKyAgICAgICAgICAgICpsZW5ndGggPSAwOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9IGVsc2UgaWYgKC0oKmRlY2ltYWxfcG9pbnQpID09IHJlcXVlc3Rl
ZF9kaWdpdHMpIHsKKyAgICAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0byB2ZXJpZnkgaWYgdGhl
IG51bWJlciByb3VuZHMgZG93biBvciB1cC4KKyAgICAgICAgICAgIC8vIEV4OiAwLjA0IGFuZCAw
LjA2IHdpdGggcmVxdWVzdGVkX2RpZ2l0cyA9PSAxLgorICAgICAgICAgICAgQVNTRVJUKCpkZWNp
bWFsX3BvaW50ID09IC1yZXF1ZXN0ZWRfZGlnaXRzKTsKKyAgICAgICAgICAgIC8vIEluaXRpYWxs
eSB0aGUgZnJhY3Rpb24gbGllcyBpbiByYW5nZSAoMSwgMTBdLiBNdWx0aXBseSB0aGUgZGVub21p
bmF0b3IKKyAgICAgICAgICAgIC8vIGJ5IDEwIHNvIHRoYXQgd2UgY2FuIGNvbXBhcmUgbW9yZSBl
YXNpbHkuCisgICAgICAgICAgICBkZW5vbWluYXRvci0+VGltZXMxMCgpOworICAgICAgICAgICAg
aWYgKEJpZ251bTo6UGx1c0NvbXBhcmUoKm51bWVyYXRvciwgKm51bWVyYXRvciwgKmRlbm9taW5h
dG9yKSA+PSAwKSB7CisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGZyYWN0aW9uIGlzID49IDAu
NSB0aGVuIHdlIGhhdmUgdG8gaW5jbHVkZSB0aGUgcm91bmRlZAorICAgICAgICAgICAgICAgIC8v
IGRpZ2l0LgorICAgICAgICAgICAgICAgIGJ1ZmZlclswXSA9ICcxJzsKKyAgICAgICAgICAgICAg
ICAqbGVuZ3RoID0gMTsKKyAgICAgICAgICAgICAgICAoKmRlY2ltYWxfcG9pbnQpKys7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBjYXVnaHQg
bW9zdCBvZiBzaW1pbGFyIGNhc2VzIGVhcmxpZXIuCisgICAgICAgICAgICAgICAgKmxlbmd0aCA9
IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAvLyBUaGUgcmVxdWVzdGVkIGRpZ2l0cyBjb3JyZXNwb25kIHRvIHRoZSBk
aWdpdHMgYWZ0ZXIgdGhlIHBvaW50LgorICAgICAgICAgICAgLy8gVGhlIHZhcmlhYmxlICduZWVk
ZWRfZGlnaXRzJyBpbmNsdWRlcyB0aGUgZGlnaXRzIGJlZm9yZSB0aGUgcG9pbnQuCisgICAgICAg
ICAgICBpbnQgbmVlZGVkX2RpZ2l0cyA9ICgqZGVjaW1hbF9wb2ludCkgKyByZXF1ZXN0ZWRfZGln
aXRzOworICAgICAgICAgICAgR2VuZXJhdGVDb3VudGVkRGlnaXRzKG5lZWRlZF9kaWdpdHMsIGRl
Y2ltYWxfcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJhdG9y
LCBkZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIs
IGxlbmd0aCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgLy8gUmV0dXJucyBh
biBlc3RpbWF0aW9uIG9mIGsgc3VjaCB0aGF0IDEwXihrLTEpIDw9IHYgPCAxMF5rIHdoZXJlCisg
ICAgLy8gdiA9IGYgKiAyXmV4cG9uZW50IGFuZCAyXjUyIDw9IGYgPCAyXjUzLgorICAgIC8vIHYg
aXMgaGVuY2UgYSBub3JtYWxpemVkIGRvdWJsZSB3aXRoIHRoZSBnaXZlbiBleHBvbmVudC4gVGhl
IG91dHB1dCBpcyBhbgorICAgIC8vIGFwcHJveGltYXRpb24gZm9yIHRoZSBleHBvbmVudCBvZiB0
aGUgZGVjaW1hbCBhcHByb2ltYXRpb24gLmRpZ2l0cyAqIDEwXmsuCisgICAgLy8KKyAgICAvLyBU
aGUgcmVzdWx0IG1pZ2h0IHVuZGVyc2hvb3QgYnkgMSBpbiB3aGljaCBjYXNlIDEwXmsgPD0gdiA8
IDEwXmsrMS4KKyAgICAvLyBOb3RlOiB0aGlzIHByb3BlcnR5IGhvbGRzIGZvciB2J3MgdXBwZXIg
Ym91bmRhcnkgbSsgdG9vLgorICAgIC8vICAgIDEwXmsgPD0gbSsgPCAxMF5rKzEuCisgICAgLy8g
ICAoc2VlIGV4cGxhbmF0aW9uIGJlbG93KS4KKyAgICAvLworICAgIC8vIEV4YW1wbGVzOgorICAg
IC8vICBFc3RpbWF0ZVBvd2VyKDApICAgPT4gMTYKKyAgICAvLyAgRXN0aW1hdGVQb3dlcigtNTIp
ID0+IDAKKyAgICAvLworICAgIC8vIE5vdGU6IGUgPj0gMCA9PiBFc3RpbWF0ZWRQb3dlcihlKSA+
IDAuIE5vIHNpbWlsYXIgY2xhaW0gY2FuIGJlIG1hZGUgZm9yIGU8MC4KKyAgICBzdGF0aWMgaW50
IEVzdGltYXRlUG93ZXIoaW50IGV4cG9uZW50KSB7CisgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24g
ZXN0aW1hdGVzIGxvZzEwIG9mIHYgd2hlcmUgdiA9IGYqMl5lICh3aXRoIGUgPT0gZXhwb25lbnQp
LgorICAgICAgICAvLyBOb3RlIHRoYXQgMTBeZmxvb3IobG9nMTAodikpIDw9IHYsIGJ1dCB2IDw9
IDEwXmNlaWwobG9nMTAodikpLgorICAgICAgICAvLyBOb3RlIHRoYXQgZiBpcyBib3VuZGVkIGJ5
IGl0cyBjb250YWluZXIgc2l6ZS4gTGV0IHAgPSA1MyAodGhlIGRvdWJsZSdzCisgICAgICAgIC8v
IHNpZ25pZmljYW5kIHNpemUpLiBUaGVuIDJeKHAtMSkgPD0gZiA8IDJecC4KKyAgICAgICAgLy8K
KyAgICAgICAgLy8gR2l2ZW4gdGhhdCBsb2cxMCh2KSA9PSBsb2cyKHYpL2xvZzIoMTApIGFuZCBl
KyhsZW4oZiktMSkgaXMgcXVpdGUgY2xvc2UKKyAgICAgICAgLy8gdG8gbG9nMih2KSB0aGUgZnVu
Y3Rpb24gaXMgc2ltcGxpZmllZCB0byAoZSsobGVuKGYpLTEpL2xvZzIoMTApKS4KKyAgICAgICAg
Ly8gVGhlIGNvbXB1dGVkIG51bWJlciB1bmRlcnNob290cyBieSBsZXNzIHRoYW4gMC42MzEgKHdo
ZW4gd2UgY29tcHV0ZSBsb2czCisgICAgICAgIC8vIGFuZCBub3QgbG9nMTApLgorICAgICAgICAv
LworICAgICAgICAvLyBPcHRpbWl6YXRpb246IHNpbmNlIHdlIG9ubHkgbmVlZCBhbiBhcHByb3hp
bWF0ZWQgcmVzdWx0IHRoaXMgY29tcHV0YXRpb24KKyAgICAgICAgLy8gY2FuIGJlIHBlcmZvcm1l
ZCBvbiA2NCBiaXQgaW50ZWdlcnMuIE9uIHg4Ni94NjQgYXJjaGl0ZWN0dXJlIHRoZSBzcGVlZHVw
IGlzCisgICAgICAgIC8vIG5vdCByZWFsbHkgbWVhc3VyYWJsZSwgdGhvdWdoLgorICAgICAgICAv
LworICAgICAgICAvLyBTaW5jZSB3ZSB3YW50IHRvIGF2b2lkIG92ZXJzaG9vdGluZyB3ZSBkZWNy
ZW1lbnQgYnkgMWUxMCBzbyB0aGF0CisgICAgICAgIC8vIGZsb2F0aW5nLXBvaW50IGltcHJlY2lz
aW9ucyBkb24ndCBhZmZlY3QgdXMuCisgICAgICAgIC8vCisgICAgICAgIC8vIEV4cGxhbmF0aW9u
IGZvciB2J3MgYm91bmRhcnkgbSs6IHRoZSBjb21wdXRhdGlvbiB0YWtlcyBhZHZhbnRhZ2Ugb2YK
KyAgICAgICAgLy8gdGhlIGZhY3QgdGhhdCAyXihwLTEpIDw9IGYgPCAyXnAuIEJvdW5kYXJpZXMg
c3RpbGwgc2F0aXNmeSB0aGlzIHJlcXVpcmVtZW50CisgICAgICAgIC8vIChldmVuIGZvciBkZW5v
cm1hbHMgd2hlcmUgdGhlIGRlbHRhIGNhbiBiZSBtdWNoIG1vcmUgaW1wb3J0YW50KS4KKyAgICAg
ICAgCisgICAgICAgIGNvbnN0IGRvdWJsZSBrMUxvZzEwID0gMC4zMDEwMjk5OTU2NjM5ODExNDsg
IC8vIDEvbGcoMTApCisgICAgICAgIAorICAgICAgICAvLyBGb3IgZG91YmxlcyBsZW4oZikgPT0g
NTMgKGRvbid0IGZvcmdldCB0aGUgaGlkZGVuIGJpdCkuCisgICAgICAgIGNvbnN0IGludCBrU2ln
bmlmaWNhbmRTaXplID0gNTM7CisgICAgICAgIGRvdWJsZSBlc3RpbWF0ZSA9IGNlaWwoKGV4cG9u
ZW50ICsga1NpZ25pZmljYW5kU2l6ZSAtIDEpICogazFMb2cxMCAtIDFlLTEwKTsKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGludD4oZXN0aW1hdGUpOworICAgIH0KKyAgICAKKyAgICAKKyAg
ICAvLyBTZWUgY29tbWVudHMgZm9yIEluaXRpYWxTY2FsZWRTdGFydFZhbHVlcy4KKyAgICBzdGF0
aWMgdm9pZCBJbml0aWFsU2NhbGVkU3RhcnRWYWx1ZXNQb3NpdGl2ZUV4cG9uZW50KAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91Ymxl
IHYsIGludCBlc3RpbWF0ZWRfcG93ZXIsIGJvb2wgbmVlZF9ib3VuZGFyeV9kZWx0YXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdu
dW0qIG51bWVyYXRvciwgQmlnbnVtKiBkZW5vbWluYXRvciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogZGVsdGFfbWludXMs
IEJpZ251bSogZGVsdGFfcGx1cykgeworICAgICAgICAvLyBBIHBvc2l0aXZlIGV4cG9uZW50IGlt
cGxpZXMgYSBwb3NpdGl2ZSBwb3dlci4KKyAgICAgICAgQVNTRVJUKGVzdGltYXRlZF9wb3dlciA+
PSAwKTsKKyAgICAgICAgLy8gU2luY2UgdGhlIGVzdGltYXRlZF9wb3dlciBpcyBwb3NpdGl2ZSB3
ZSBzaW1wbHkgbXVsdGlwbHkgdGhlIGRlbm9taW5hdG9yCisgICAgICAgIC8vIGJ5IDEwXmVzdGlt
YXRlZF9wb3dlci4KKyAgICAgICAgCisgICAgICAgIC8vIG51bWVyYXRvciA9IHYuCisgICAgICAg
IG51bWVyYXRvci0+QXNzaWduVUludDY0KERvdWJsZSh2KS5TaWduaWZpY2FuZCgpKTsKKyAgICAg
ICAgbnVtZXJhdG9yLT5TaGlmdExlZnQoRG91YmxlKHYpLkV4cG9uZW50KCkpOworICAgICAgICAv
LyBkZW5vbWluYXRvciA9IDEwXmVzdGltYXRlZF9wb3dlci4KKyAgICAgICAgZGVub21pbmF0b3It
PkFzc2lnblBvd2VyVUludDE2KDEwLCBlc3RpbWF0ZWRfcG93ZXIpOworICAgICAgICAKKyAgICAg
ICAgaWYgKG5lZWRfYm91bmRhcnlfZGVsdGFzKSB7CisgICAgICAgICAgICAvLyBJbnRyb2R1Y2Ug
YSBjb21tb24gZGVub21pbmF0b3Igc28gdGhhdCB0aGUgZGVsdGFzIHRvIHRoZSBib3VuZGFyaWVz
IGFyZQorICAgICAgICAgICAgLy8gaW50ZWdlcnMuCisgICAgICAgICAgICBkZW5vbWluYXRvci0+
U2hpZnRMZWZ0KDEpOworICAgICAgICAgICAgbnVtZXJhdG9yLT5TaGlmdExlZnQoMSk7CisgICAg
ICAgICAgICAvLyBMZXQgdiA9IGYgKiAyXmUsIHRoZW4gbSsgLSB2ID0gMS8yICogMl5lOyBXaXRo
IHRoZSBjb21tb24KKyAgICAgICAgICAgIC8vIGRlbm9taW5hdG9yIChvZiAyKSBkZWx0YV9wbHVz
IGVxdWFscyAyXmUuCisgICAgICAgICAgICBkZWx0YV9wbHVzLT5Bc3NpZ25VSW50MTYoMSk7Cisg
ICAgICAgICAgICBkZWx0YV9wbHVzLT5TaGlmdExlZnQoRG91YmxlKHYpLkV4cG9uZW50KCkpOwor
ICAgICAgICAgICAgLy8gU2FtZSBmb3IgZGVsdGFfbWludXMgKHdpdGggYWRqdXN0bWVudHMgYmVs
b3cgaWYgZiA9PSAyXnAtMSkuCisgICAgICAgICAgICBkZWx0YV9taW51cy0+QXNzaWduVUludDE2
KDEpOworICAgICAgICAgICAgZGVsdGFfbWludXMtPlNoaWZ0TGVmdChEb3VibGUodikuRXhwb25l
bnQoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIElmIHRoZSBzaWduaWZpY2FuZCAo
d2l0aG91dCB0aGUgaGlkZGVuIGJpdCkgaXMgMCwgdGhlbiB0aGUgbG93ZXIKKyAgICAgICAgICAg
IC8vIGJvdW5kYXJ5IGlzIGNsb3NlciB0aGFuIGp1c3QgaGFsZiBhIHVscCAodW5pdCBpbiB0aGUg
bGFzdCBwbGFjZSkuCisgICAgICAgICAgICAvLyBUaGVyZSBpcyBvbmx5IG9uZSBleGNlcHRpb246
IGlmIHRoZSBuZXh0IGxvd2VyIG51bWJlciBpcyBhIGRlbm9ybWFsIHRoZW4KKyAgICAgICAgICAg
IC8vIHRoZSBkaXN0YW5jZSBpcyAxIHVscC4gVGhpcyBjYW5ub3QgYmUgdGhlIGNhc2UgZm9yIGV4
cG9uZW50ID49IDAgKGJ1dCB3ZQorICAgICAgICAgICAgLy8gaGF2ZSB0byB0ZXN0IGl0IGluIHRo
ZSBvdGhlciBmdW5jdGlvbiB3aGVyZSBleHBvbmVudCA8IDApLgorICAgICAgICAgICAgdWludDY0
X3Qgdl9iaXRzID0gRG91YmxlKHYpLkFzVWludDY0KCk7CisgICAgICAgICAgICBpZiAoKHZfYml0
cyAmIERvdWJsZTo6a1NpZ25pZmljYW5kTWFzaykgPT0gMCkgeworICAgICAgICAgICAgICAgIC8v
IFRoZSBsb3dlciBib3VuZGFyeSBpcyBjbG9zZXIgYXQgaGFsZiB0aGUgZGlzdGFuY2Ugb2YgIm5v
cm1hbCIgbnVtYmVycy4KKyAgICAgICAgICAgICAgICAvLyBJbmNyZWFzZSB0aGUgY29tbW9uIGRl
bm9taW5hdG9yIGFuZCBhZGFwdCBhbGwgYnV0IHRoZSBkZWx0YV9taW51cy4KKyAgICAgICAgICAg
ICAgICBkZW5vbWluYXRvci0+U2hpZnRMZWZ0KDEpOyAgLy8gKjIKKyAgICAgICAgICAgICAgICBu
dW1lcmF0b3ItPlNoaWZ0TGVmdCgxKTsgICAgLy8gKjIKKyAgICAgICAgICAgICAgICBkZWx0YV9w
bHVzLT5TaGlmdExlZnQoMSk7ICAgLy8gKjIKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICAKKyAgICAvLyBTZWUgY29tbWVudHMgZm9yIEluaXRpYWxTY2FsZWRTdGFy
dFZhbHVlcworICAgIHN0YXRpYyB2b2lkIEluaXRpYWxTY2FsZWRTdGFydFZhbHVlc05lZ2F0aXZl
RXhwb25lbnRQb3NpdGl2ZVBvd2VyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB2LCBpbnQgZXN0aW1h
dGVkX3Bvd2VyLCBib29sIG5lZWRfYm91bmRhcnlfZGVsdGFzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251
bSogbnVtZXJhdG9yLCBCaWdudW0qIGRlbm9taW5hdG9yLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSog
ZGVsdGFfbWludXMsIEJpZ251bSogZGVsdGFfcGx1cykgeworICAgICAgICB1aW50NjRfdCBzaWdu
aWZpY2FuZCA9IERvdWJsZSh2KS5TaWduaWZpY2FuZCgpOworICAgICAgICBpbnQgZXhwb25lbnQg
PSBEb3VibGUodikuRXhwb25lbnQoKTsKKyAgICAgICAgLy8gdiA9IGYgKiAyXmUgd2l0aCBlIDwg
MCwgYW5kIHdpdGggZXN0aW1hdGVkX3Bvd2VyID49IDAuCisgICAgICAgIC8vIFRoaXMgbWVhbnMg
dGhhdCBlIGlzIGNsb3NlIHRvIDAgKGhhdmUgYSBsb29rIGF0IGhvdyBlc3RpbWF0ZWRfcG93ZXIg
aXMKKyAgICAgICAgLy8gY29tcHV0ZWQpLgorICAgICAgICAKKyAgICAgICAgLy8gbnVtZXJhdG9y
ID0gc2lnbmlmaWNhbmQKKyAgICAgICAgLy8gIHNpbmNlIHYgPSBzaWduaWZpY2FuZCAqIDJeZXhw
b25lbnQgdGhpcyBpcyBlcXVpdmFsZW50IHRvCisgICAgICAgIC8vICBudW1lcmF0b3IgPSB2ICog
LyAyXi1leHBvbmVudAorICAgICAgICBudW1lcmF0b3ItPkFzc2lnblVJbnQ2NChzaWduaWZpY2Fu
ZCk7CisgICAgICAgIC8vIGRlbm9taW5hdG9yID0gMTBeZXN0aW1hdGVkX3Bvd2VyICogMl4tZXhw
b25lbnQgKHdpdGggZXhwb25lbnQgPCAwKQorICAgICAgICBkZW5vbWluYXRvci0+QXNzaWduUG93
ZXJVSW50MTYoMTAsIGVzdGltYXRlZF9wb3dlcik7CisgICAgICAgIGRlbm9taW5hdG9yLT5TaGlm
dExlZnQoLWV4cG9uZW50KTsKKyAgICAgICAgCisgICAgICAgIGlmIChuZWVkX2JvdW5kYXJ5X2Rl
bHRhcykgeworICAgICAgICAgICAgLy8gSW50cm9kdWNlIGEgY29tbW9uIGRlbm9taW5hdG9yIHNv
IHRoYXQgdGhlIGRlbHRhcyB0byB0aGUgYm91bmRhcmllcyBhcmUKKyAgICAgICAgICAgIC8vIGlu
dGVnZXJzLgorICAgICAgICAgICAgZGVub21pbmF0b3ItPlNoaWZ0TGVmdCgxKTsKKyAgICAgICAg
ICAgIG51bWVyYXRvci0+U2hpZnRMZWZ0KDEpOworICAgICAgICAgICAgLy8gTGV0IHYgPSBmICog
Ml5lLCB0aGVuIG0rIC0gdiA9IDEvMiAqIDJeZTsgV2l0aCB0aGUgY29tbW9uCisgICAgICAgICAg
ICAvLyBkZW5vbWluYXRvciAob2YgMikgZGVsdGFfcGx1cyBlcXVhbHMgMl5lLgorICAgICAgICAg
ICAgLy8gR2l2ZW4gdGhhdCB0aGUgZGVub21pbmF0b3IgYWxyZWFkeSBpbmNsdWRlcyB2J3MgZXhw
b25lbnQgdGhlIGRpc3RhbmNlCisgICAgICAgICAgICAvLyB0byB0aGUgYm91bmRhcmllcyBpcyBz
aW1wbHkgMS4KKyAgICAgICAgICAgIGRlbHRhX3BsdXMtPkFzc2lnblVJbnQxNigxKTsKKyAgICAg
ICAgICAgIC8vIFNhbWUgZm9yIGRlbHRhX21pbnVzICh3aXRoIGFkanVzdG1lbnRzIGJlbG93IGlm
IGYgPT0gMl5wLTEpLgorICAgICAgICAgICAgZGVsdGFfbWludXMtPkFzc2lnblVJbnQxNigxKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSWYgdGhlIHNpZ25pZmljYW5kICh3aXRob3V0
IHRoZSBoaWRkZW4gYml0KSBpcyAwLCB0aGVuIHRoZSBsb3dlcgorICAgICAgICAgICAgLy8gYm91
bmRhcnkgaXMgY2xvc2VyIHRoYW4ganVzdCBvbmUgdWxwICh1bml0IGluIHRoZSBsYXN0IHBsYWNl
KS4KKyAgICAgICAgICAgIC8vIFRoZXJlIGlzIG9ubHkgb25lIGV4Y2VwdGlvbjogaWYgdGhlIG5l
eHQgbG93ZXIgbnVtYmVyIGlzIGEgZGVub3JtYWwKKyAgICAgICAgICAgIC8vIHRoZW4gdGhlIGRp
c3RhbmNlIGlzIDEgdWxwLiBTaW5jZSB0aGUgZXhwb25lbnQgaXMgY2xvc2UgdG8gemVybworICAg
ICAgICAgICAgLy8gKG90aGVyd2lzZSBlc3RpbWF0ZWRfcG93ZXIgd291bGQgaGF2ZSBiZWVuIG5l
Z2F0aXZlKSB0aGlzIGNhbm5vdCBoYXBwZW4KKyAgICAgICAgICAgIC8vIGhlcmUgZWl0aGVyLgor
ICAgICAgICAgICAgdWludDY0X3Qgdl9iaXRzID0gRG91YmxlKHYpLkFzVWludDY0KCk7CisgICAg
ICAgICAgICBpZiAoKHZfYml0cyAmIERvdWJsZTo6a1NpZ25pZmljYW5kTWFzaykgPT0gMCkgewor
ICAgICAgICAgICAgICAgIC8vIFRoZSBsb3dlciBib3VuZGFyeSBpcyBjbG9zZXIgYXQgaGFsZiB0
aGUgZGlzdGFuY2Ugb2YgIm5vcm1hbCIgbnVtYmVycy4KKyAgICAgICAgICAgICAgICAvLyBJbmNy
ZWFzZSB0aGUgZGVub21pbmF0b3IgYW5kIGFkYXB0IGFsbCBidXQgdGhlIGRlbHRhX21pbnVzLgor
ICAgICAgICAgICAgICAgIGRlbm9taW5hdG9yLT5TaGlmdExlZnQoMSk7ICAvLyAqMgorICAgICAg
ICAgICAgICAgIG51bWVyYXRvci0+U2hpZnRMZWZ0KDEpOyAgICAvLyAqMgorICAgICAgICAgICAg
ICAgIGRlbHRhX3BsdXMtPlNoaWZ0TGVmdCgxKTsgICAvLyAqMgorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIC8vIFNlZSBjb21tZW50cyBmb3IgSW5pdGlh
bFNjYWxlZFN0YXJ0VmFsdWVzCisgICAgc3RhdGljIHZvaWQgSW5pdGlhbFNjYWxlZFN0YXJ0VmFs
dWVzTmVnYXRpdmVFeHBvbmVudE5lZ2F0aXZlUG93ZXIoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHYs
IGludCBlc3RpbWF0ZWRfcG93ZXIsIGJvb2wgbmVlZF9ib3VuZGFyeV9kZWx0YXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQmlnbnVtKiBudW1lcmF0b3IsIEJpZ251bSogZGVub21pbmF0b3IsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQmlnbnVtKiBkZWx0YV9taW51cywgQmlnbnVtKiBkZWx0YV9wbHVzKSB7CisgICAgICAgIGNv
bnN0IHVpbnQ2NF90IGtNaW5pbWFsTm9ybWFsaXplZEV4cG9uZW50ID0KKyAgICAgICAgVUlOVDY0
XzJQQVJUX0MoMHgwMDEwMDAwMCwgMDAwMDAwMDApOworICAgICAgICB1aW50NjRfdCBzaWduaWZp
Y2FuZCA9IERvdWJsZSh2KS5TaWduaWZpY2FuZCgpOworICAgICAgICBpbnQgZXhwb25lbnQgPSBE
b3VibGUodikuRXhwb25lbnQoKTsKKyAgICAgICAgLy8gSW5zdGVhZCBvZiBtdWx0aXBseWluZyB0
aGUgZGVub21pbmF0b3Igd2l0aCAxMF5lc3RpbWF0ZWRfcG93ZXIgd2UKKyAgICAgICAgLy8gbXVs
dGlwbHkgYWxsIHZhbHVlcyAobnVtZXJhdG9yIGFuZCBkZWx0YXMpIGJ5IDEwXi1lc3RpbWF0ZWRf
cG93ZXIuCisgICAgICAgIAorICAgICAgICAvLyBVc2UgbnVtZXJhdG9yIGFzIHRlbXBvcmFyeSBj
b250YWluZXIgZm9yIHBvd2VyX3Rlbi4KKyAgICAgICAgQmlnbnVtKiBwb3dlcl90ZW4gPSBudW1l
cmF0b3I7CisgICAgICAgIHBvd2VyX3Rlbi0+QXNzaWduUG93ZXJVSW50MTYoMTAsIC1lc3RpbWF0
ZWRfcG93ZXIpOworICAgICAgICAKKyAgICAgICAgaWYgKG5lZWRfYm91bmRhcnlfZGVsdGFzKSB7
CisgICAgICAgICAgICAvLyBTaW5jZSBwb3dlcl90ZW4gPT0gbnVtZXJhdG9yIHdlIG11c3QgbWFr
ZSBhIGNvcHkgb2YgMTBeZXN0aW1hdGVkX3Bvd2VyCisgICAgICAgICAgICAvLyBiZWZvcmUgd2Ug
Y29tcGxldGUgdGhlIGNvbXB1dGF0aW9uIG9mIHRoZSBudW1lcmF0b3IuCisgICAgICAgICAgICAv
LyBkZWx0YV9wbHVzID0gZGVsdGFfbWludXMgPSAxMF5lc3RpbWF0ZWRfcG93ZXIKKyAgICAgICAg
ICAgIGRlbHRhX3BsdXMtPkFzc2lnbkJpZ251bSgqcG93ZXJfdGVuKTsKKyAgICAgICAgICAgIGRl
bHRhX21pbnVzLT5Bc3NpZ25CaWdudW0oKnBvd2VyX3Rlbik7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIC8vIG51bWVyYXRvciA9IHNpZ25pZmljYW5kICogMiAqIDEwXi1lc3RpbWF0ZWRf
cG93ZXIKKyAgICAgICAgLy8gIHNpbmNlIHYgPSBzaWduaWZpY2FuZCAqIDJeZXhwb25lbnQgdGhp
cyBpcyBlcXVpdmFsZW50IHRvCisgICAgICAgIC8vIG51bWVyYXRvciA9IHYgKiAxMF4tZXN0aW1h
dGVkX3Bvd2VyICogMiAqIDJeLWV4cG9uZW50LgorICAgICAgICAvLyBSZW1lbWJlcjogbnVtZXJh
dG9yIGhhcyBiZWVuIGFidXNlZCBhcyBwb3dlcl90ZW4uIFNvIG5vIG5lZWQgdG8gYXNzaWduIGl0
CisgICAgICAgIC8vICB0byBpdHNlbGYuCisgICAgICAgIEFTU0VSVChudW1lcmF0b3IgPT0gcG93
ZXJfdGVuKTsKKyAgICAgICAgbnVtZXJhdG9yLT5NdWx0aXBseUJ5VUludDY0KHNpZ25pZmljYW5k
KTsKKyAgICAgICAgCisgICAgICAgIC8vIGRlbm9taW5hdG9yID0gMiAqIDJeLWV4cG9uZW50IHdp
dGggZXhwb25lbnQgPCAwLgorICAgICAgICBkZW5vbWluYXRvci0+QXNzaWduVUludDE2KDEpOwor
ICAgICAgICBkZW5vbWluYXRvci0+U2hpZnRMZWZ0KC1leHBvbmVudCk7CisgICAgICAgIAorICAg
ICAgICBpZiAobmVlZF9ib3VuZGFyeV9kZWx0YXMpIHsKKyAgICAgICAgICAgIC8vIEludHJvZHVj
ZSBhIGNvbW1vbiBkZW5vbWluYXRvciBzbyB0aGF0IHRoZSBkZWx0YXMgdG8gdGhlIGJvdW5kYXJp
ZXMgYXJlCisgICAgICAgICAgICAvLyBpbnRlZ2Vycy4KKyAgICAgICAgICAgIG51bWVyYXRvci0+
U2hpZnRMZWZ0KDEpOworICAgICAgICAgICAgZGVub21pbmF0b3ItPlNoaWZ0TGVmdCgxKTsKKyAg
ICAgICAgICAgIC8vIFdpdGggdGhpcyBzaGlmdCB0aGUgYm91bmRhcmllcyBoYXZlIHRoZWlyIGNv
cnJlY3QgdmFsdWUsIHNpbmNlCisgICAgICAgICAgICAvLyBkZWx0YV9wbHVzID0gMTBeLWVzdGlt
YXRlZF9wb3dlciwgYW5kCisgICAgICAgICAgICAvLyBkZWx0YV9taW51cyA9IDEwXi1lc3RpbWF0
ZWRfcG93ZXIuCisgICAgICAgICAgICAvLyBUaGVzZSBhc3NpZ25tZW50cyBoYXZlIGJlZW4gZG9u
ZSBlYXJsaWVyLgorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGUgc3BlY2lhbCBjYXNl
IHdoZXJlIHRoZSBsb3dlciBib3VuZGFyeSBpcyB0d2ljZSBhcyBjbG9zZS4KKyAgICAgICAgICAg
IC8vIFRoaXMgdGltZSB3ZSBoYXZlIHRvIGxvb2sgb3V0IGZvciB0aGUgZXhjZXB0aW9uIHRvby4K
KyAgICAgICAgICAgIHVpbnQ2NF90IHZfYml0cyA9IERvdWJsZSh2KS5Bc1VpbnQ2NCgpOworICAg
ICAgICAgICAgaWYgKCh2X2JpdHMgJiBEb3VibGU6OmtTaWduaWZpY2FuZE1hc2spID09IDAgJiYK
KyAgICAgICAgICAgICAgICAvLyBUaGUgb25seSBleGNlcHRpb24gd2hlcmUgYSBzaWduaWZpY2Fu
ZCA9PSAwIGhhcyBpdHMgYm91bmRhcmllcyBhdAorICAgICAgICAgICAgICAgIC8vICJub3JtYWwi
IGRpc3RhbmNlczoKKyAgICAgICAgICAgICAgICAodl9iaXRzICYgRG91YmxlOjprRXhwb25lbnRN
YXNrKSAhPSBrTWluaW1hbE5vcm1hbGl6ZWRFeHBvbmVudCkgeworICAgICAgICAgICAgICAgIG51
bWVyYXRvci0+U2hpZnRMZWZ0KDEpOyAgICAvLyAqMgorICAgICAgICAgICAgICAgIGRlbm9taW5h
dG9yLT5TaGlmdExlZnQoMSk7ICAvLyAqMgorICAgICAgICAgICAgICAgIGRlbHRhX3BsdXMtPlNo
aWZ0TGVmdCgxKTsgICAvLyAqMgorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg
IAorICAgIAorICAgIC8vIExldCB2ID0gc2lnbmlmaWNhbmQgKiAyXmV4cG9uZW50LgorICAgIC8v
IENvbXB1dGVzIHYgLyAxMF5lc3RpbWF0ZWRfcG93ZXIgZXhhY3RseSwgYXMgYSByYXRpbyBvZiB0
d28gYmlnbnVtcywgbnVtZXJhdG9yCisgICAgLy8gYW5kIGRlbm9taW5hdG9yLiBUaGUgZnVuY3Rp
b25zIEdlbmVyYXRlU2hvcnRlc3REaWdpdHMgYW5kCisgICAgLy8gR2VuZXJhdGVDb3VudGVkRGln
aXRzIHdpbGwgdGhlbiBjb252ZXJ0IHRoaXMgcmF0aW8gdG8gaXRzIGRlY2ltYWwKKyAgICAvLyBy
ZXByZXNlbnRhdGlvbiBkLCB3aXRoIHRoZSByZXF1aXJlZCBhY2N1cmFjeS4KKyAgICAvLyBUaGVu
IGQgKiAxMF5lc3RpbWF0ZWRfcG93ZXIgaXMgdGhlIHJlcHJlc2VudGF0aW9uIG9mIHYuCisgICAg
Ly8gKE5vdGU6IHRoZSBmcmFjdGlvbiBhbmQgdGhlIGVzdGltYXRlZF9wb3dlciBtaWdodCBnZXQg
YWRqdXN0ZWQgYmVmb3JlCisgICAgLy8gZ2VuZXJhdGluZyB0aGUgZGVjaW1hbCByZXByZXNlbnRh
dGlvbi4pCisgICAgLy8KKyAgICAvLyBUaGUgaW5pdGlhbCBzdGFydCB2YWx1ZXMgY29uc2lzdCBv
ZjoKKyAgICAvLyAgLSBhIHNjYWxlZCBudW1lcmF0b3I6IHMudC4gbnVtZXJhdG9yL2Rlbm9taW5h
dG9yID09IHYgLyAxMF5lc3RpbWF0ZWRfcG93ZXIuCisgICAgLy8gIC0gYSBzY2FsZWQgKGNvbW1v
bikgZGVub21pbmF0b3IuCisgICAgLy8gIG9wdGlvbmFsbHkgKHVzZWQgYnkgR2VuZXJhdGVTaG9y
dGVzdERpZ2l0cyB0byBkZWNpZGUgaWYgaXQgaGFzIHRoZSBzaG9ydGVzdAorICAgIC8vICBkZWNp
bWFsIGNvbnZlcnRpbmcgYmFjayB0byB2KToKKyAgICAvLyAgLSB2IC0gbS06IHRoZSBkaXN0YW5j
ZSB0byB0aGUgbG93ZXIgYm91bmRhcnkuCisgICAgLy8gIC0gbSsgLSB2OiB0aGUgZGlzdGFuY2Ug
dG8gdGhlIHVwcGVyIGJvdW5kYXJ5LgorICAgIC8vCisgICAgLy8gdiwgbSssIG0tLCBhbmQgdGhl
cmVmb3JlIHYgLSBtLSBhbmQgbSsgLSB2IGFsbCBzaGFyZSB0aGUgc2FtZSBkZW5vbWluYXRvci4K
KyAgICAvLworICAgIC8vIExldCBlcCA9PSBlc3RpbWF0ZWRfcG93ZXIsIHRoZW4gdGhlIHJldHVy
bmVkIHZhbHVlcyB3aWxsIHNhdGlzZnk6CisgICAgLy8gIHYgLyAxMF5lcCA9IG51bWVyYXRvciAv
IGRlbm9taW5hdG9yLgorICAgIC8vICB2J3MgYm91bmRhcnlzIG0tIGFuZCBtKzoKKyAgICAvLyAg
ICBtLSAvIDEwXmVwID09IHYgLyAxMF5lcCAtIGRlbHRhX21pbnVzIC8gZGVub21pbmF0b3IKKyAg
ICAvLyAgICBtKyAvIDEwXmVwID09IHYgLyAxMF5lcCArIGRlbHRhX3BsdXMgLyBkZW5vbWluYXRv
cgorICAgIC8vICBPciBpbiBvdGhlciB3b3JkczoKKyAgICAvLyAgICBtLSA9PSB2IC0gZGVsdGFf
bWludXMgKiAxMF5lcCAvIGRlbm9taW5hdG9yOworICAgIC8vICAgIG0rID09IHYgKyBkZWx0YV9w
bHVzICogMTBeZXAgLyBkZW5vbWluYXRvcjsKKyAgICAvLworICAgIC8vIFNpbmNlIDEwXihrLTEp
IDw9IHYgPCAxMF5rICAgICh3aXRoIGsgPT0gZXN0aW1hdGVkX3Bvd2VyKQorICAgIC8vICBvciAg
ICAgICAxMF5rIDw9IHYgPCAxMF4oaysxKQorICAgIC8vICB3ZSB0aGVuIGhhdmUgMC4xIDw9IG51
bWVyYXRvci9kZW5vbWluYXRvciA8IDEKKyAgICAvLyAgICAgICAgICAgb3IgICAgMSA8PSBudW1l
cmF0b3IvZGVub21pbmF0b3IgPCAxMAorICAgIC8vCisgICAgLy8gSXQgaXMgdGhlbiBlYXN5IHRv
IGtpY2tzdGFydCB0aGUgZGlnaXQtZ2VuZXJhdGlvbiByb3V0aW5lLgorICAgIC8vCisgICAgLy8g
VGhlIGJvdW5kYXJ5LWRlbHRhcyBhcmUgb25seSBmaWxsZWQgaWYgbmVlZF9ib3VuZGFyeV9kZWx0
YXMgaXMgc2V0LgorICAgIHN0YXRpYyB2b2lkIEluaXRpYWxTY2FsZWRTdGFydFZhbHVlcyhkb3Vi
bGUgdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVzdGlt
YXRlZF9wb3dlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBuZWVkX2JvdW5kYXJ5X2RlbHRhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQmlnbnVtKiBudW1lcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEJpZ251bSogZGVub21pbmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEJpZ251bSogZGVsdGFfbWludXMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ251bSogZGVsdGFfcGx1cykgeworICAgICAgICBp
ZiAoRG91YmxlKHYpLkV4cG9uZW50KCkgPj0gMCkgeworICAgICAgICAgICAgSW5pdGlhbFNjYWxl
ZFN0YXJ0VmFsdWVzUG9zaXRpdmVFeHBvbmVudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdiwgZXN0aW1hdGVkX3Bvd2VyLCBuZWVkX2JvdW5k
YXJ5X2RlbHRhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnVtZXJhdG9yLCBkZW5vbWluYXRvciwgZGVsdGFfbWludXMsIGRlbHRhX3BsdXMp
OworICAgICAgICB9IGVsc2UgaWYgKGVzdGltYXRlZF9wb3dlciA+PSAwKSB7CisgICAgICAgICAg
ICBJbml0aWFsU2NhbGVkU3RhcnRWYWx1ZXNOZWdhdGl2ZUV4cG9uZW50UG9zaXRpdmVQb3dlcigK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHYsIGVzdGltYXRlZF9wb3dlciwgbmVlZF9ib3VuZGFyeV9kZWx0YXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBudW1lcmF0b3IsIGRlbm9taW5hdG9yLCBkZWx0YV9taW51cywgZGVsdGFfcGx1cyk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBJbml0aWFsU2NhbGVkU3RhcnRWYWx1ZXNOZWdh
dGl2ZUV4cG9uZW50TmVnYXRpdmVQb3dlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYsIGVzdGltYXRlZF9wb3dlciwg
bmVlZF9ib3VuZGFyeV9kZWx0YXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmF0b3IsIGRlbm9taW5hdG9yLCBk
ZWx0YV9taW51cywgZGVsdGFfcGx1cyk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisg
ICAgLy8gVGhpcyByb3V0aW5lIG11bHRpcGxpZXMgbnVtZXJhdG9yL2Rlbm9taW5hdG9yIHNvIHRo
YXQgaXRzIHZhbHVlcyBsaWVzIGluIHRoZQorICAgIC8vIHJhbmdlIDEtMTAuIFRoYXQgaXMgYWZ0
ZXIgYSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gd2UgaGF2ZToKKyAgICAvLyAgICAxIDw9IChudW1l
cmF0b3IgKyBkZWx0YV9wbHVzKSAvZGVub21pbmF0b3IgPCAxMC4KKyAgICAvLyBMZXQgbnVtZXJh
dG9yIHRoZSBpbnB1dCBiZWZvcmUgbW9kaWZpY2F0aW9uIGFuZCBudW1lcmF0b3InIHRoZSBhcmd1
bWVudAorICAgIC8vIGFmdGVyIG1vZGlmaWNhdGlvbiwgdGhlbiB0aGUgb3V0cHV0LXBhcmFtZXRl
ciBkZWNpbWFsX3BvaW50IGlzIHN1Y2ggdGhhdAorICAgIC8vICBudW1lcmF0b3IgLyBkZW5vbWlu
YXRvciAqIDEwXmVzdGltYXRlZF9wb3dlciA9PQorICAgIC8vICAgIG51bWVyYXRvcicgLyBkZW5v
bWluYXRvcicgKiAxMF4oZGVjaW1hbF9wb2ludCAtIDEpCisgICAgLy8gSW4gc29tZSBjYXNlcyBl
c3RpbWF0ZWRfcG93ZXIgd2FzIHRvbyBsb3csIGFuZCB0aGlzIGlzIGFscmVhZHkgdGhlIGNhc2Uu
IFdlCisgICAgLy8gdGhlbiBzaW1wbHkgYWRqdXN0IHRoZSBwb3dlciBzbyB0aGF0IDEwXihrLTEp
IDw9IHYgPCAxMF5rICh3aXRoIGsgPT0KKyAgICAvLyBlc3RpbWF0ZWRfcG93ZXIpIGJ1dCBkbyBu
b3QgdG91Y2ggdGhlIG51bWVyYXRvciBvciBkZW5vbWluYXRvci4KKyAgICAvLyBPdGhlcndpc2Ug
dGhlIHJvdXRpbmUgbXVsdGlwbGllcyB0aGUgbnVtZXJhdG9yIGFuZCB0aGUgZGVsdGFzIGJ5IDEw
LgorICAgIHN0YXRpYyB2b2lkIEZpeHVwTXVsdGlwbHkxMChpbnQgZXN0aW1hdGVkX3Bvd2VyLCBi
b29sIGlzX2V2ZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogZGVjaW1h
bF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnbnVtKiBudW1lcmF0
b3IsIEJpZ251bSogZGVub21pbmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEJpZ251bSogZGVsdGFfbWludXMsIEJpZ251bSogZGVsdGFfcGx1cykgeworICAgICAgICBib29s
IGluX3JhbmdlOworICAgICAgICBpZiAoaXNfZXZlbikgeworICAgICAgICAgICAgLy8gRm9yIElF
RUUgZG91YmxlcyBoYWxmLXdheSBjYXNlcyAoaW4gZGVjaW1hbCBzeXN0ZW0gbnVtYmVycyBlbmRp
bmcgd2l0aCA1KQorICAgICAgICAgICAgLy8gYXJlIHJvdW5kZWQgdG8gdGhlIGNsb3Nlc3QgZmxv
YXRpbmctcG9pbnQgbnVtYmVyIHdpdGggZXZlbiBzaWduaWZpY2FuZC4KKyAgICAgICAgICAgIGlu
X3JhbmdlID0gQmlnbnVtOjpQbHVzQ29tcGFyZSgqbnVtZXJhdG9yLCAqZGVsdGFfcGx1cywgKmRl
bm9taW5hdG9yKSA+PSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW5fcmFuZ2Ug
PSBCaWdudW06OlBsdXNDb21wYXJlKCpudW1lcmF0b3IsICpkZWx0YV9wbHVzLCAqZGVub21pbmF0
b3IpID4gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoaW5fcmFuZ2UpIHsKKyAgICAgICAgICAg
IC8vIFNpbmNlIG51bWVyYXRvciArIGRlbHRhX3BsdXMgPj0gZGVub21pbmF0b3Igd2UgYWxyZWFk
eSBoYXZlCisgICAgICAgICAgICAvLyAxIDw9IG51bWVyYXRvci9kZW5vbWluYXRvciA8IDEwLiBT
aW1wbHkgdXBkYXRlIHRoZSBlc3RpbWF0ZWRfcG93ZXIuCisgICAgICAgICAgICAqZGVjaW1hbF9w
b2ludCA9IGVzdGltYXRlZF9wb3dlciArIDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAqZGVjaW1hbF9wb2ludCA9IGVzdGltYXRlZF9wb3dlcjsKKyAgICAgICAgICAgIG51bWVyYXRv
ci0+VGltZXMxMCgpOworICAgICAgICAgICAgaWYgKEJpZ251bTo6RXF1YWwoKmRlbHRhX21pbnVz
LCAqZGVsdGFfcGx1cykpIHsKKyAgICAgICAgICAgICAgICBkZWx0YV9taW51cy0+VGltZXMxMCgp
OworICAgICAgICAgICAgICAgIGRlbHRhX3BsdXMtPkFzc2lnbkJpZ251bSgqZGVsdGFfbWludXMp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZWx0YV9taW51cy0+VGlt
ZXMxMCgpOworICAgICAgICAgICAgICAgIGRlbHRhX3BsdXMtPlRpbWVzMTAoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKK30gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29u
dmVyc2lvbgorCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvZHRvYS9iaWdudW0tZHRvYS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9kdG9hL2JpZ251bS1kdG9hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDc2MTY4NzA5MWMwMGI5M2YwODc2NDAz
NThlMzk4OTA3ZDBkNGE5NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvZHRvYS9iaWdudW0tZHRvYS5oCkBAIC0wLDAgKzEsODYgQEAKKy8vIENvcHlyaWdodCAy
MDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8g
ICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAg
ICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
Ly8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8g
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworI2lmbmRlZiBET1VCTEVfQ09OVkVSU0lPTl9CSUdOVU1fRFRPQV9IXwor
I2RlZmluZSBET1VCTEVfQ09OVkVSU0lPTl9CSUdOVU1fRFRPQV9IXworCisjaW5jbHVkZSAidXRp
bHMuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7
CisgICAgCisgICAgZW51bSBCaWdudW1EdG9hTW9kZSB7CisgICAgICAgIC8vIFJldHVybiB0aGUg
c2hvcnRlc3QgY29ycmVjdCByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgLy8gRm9yIGV4YW1wbGUg
dGhlIG91dHB1dCBvZiAwLjI5OTk5OTk5OTk5OTk5OTk4ODg5NyBpcyAodGhlIGxlc3MgYWNjdXJh
dGUgYnV0CisgICAgICAgIC8vIGNvcnJlY3QpIDAuMy4KKyAgICAgICAgQklHTlVNX0RUT0FfU0hP
UlRFU1QsCisgICAgICAgIC8vIFJldHVybiBhIGZpeGVkIG51bWJlciBvZiBkaWdpdHMgYWZ0ZXIg
dGhlIGRlY2ltYWwgcG9pbnQuCisgICAgICAgIC8vIEZvciBpbnN0YW5jZSBmaXhlZCgwLjEsIDQp
IGJlY29tZXMgMC4xMDAwCisgICAgICAgIC8vIElmIHRoZSBpbnB1dCBudW1iZXIgaXMgYmlnLCB0
aGUgb3V0cHV0IHdpbGwgYmUgYmlnLgorICAgICAgICBCSUdOVU1fRFRPQV9GSVhFRCwKKyAgICAg
ICAgLy8gUmV0dXJuIGEgZml4ZWQgbnVtYmVyIG9mIGRpZ2l0cywgbm8gbWF0dGVyIHdoYXQgdGhl
IGV4cG9uZW50IGlzLgorICAgICAgICBCSUdOVU1fRFRPQV9QUkVDSVNJT04KKyAgICB9OworICAg
IAorICAgIC8vIENvbnZlcnRzIHRoZSBnaXZlbiBkb3VibGUgJ3YnIHRvIGFzY2lpLgorICAgIC8v
IFRoZSByZXN1bHQgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGJ1ZmZlciAqIDEwXihwb2ludC1s
ZW5ndGgpLgorICAgIC8vIFRoZSBidWZmZXIgd2lsbCBiZSBudWxsLXRlcm1pbmF0ZWQuCisgICAg
Ly8KKyAgICAvLyBUaGUgaW5wdXQgdiBtdXN0IGJlID4gMCBhbmQgZGlmZmVyZW50IGZyb20gTmFO
LCBhbmQgSW5maW5pdHkuCisgICAgLy8KKyAgICAvLyBUaGUgb3V0cHV0IGRlcGVuZHMgb24gdGhl
IGdpdmVuIG1vZGU6CisgICAgLy8gIC0gU0hPUlRFU1Q6IHByb2R1Y2UgdGhlIGxlYXN0IGFtb3Vu
dCBvZiBkaWdpdHMgZm9yIHdoaWNoIHRoZSBpbnRlcm5hbAorICAgIC8vICAgaWRlbnRpdHkgcmVx
dWlyZW1lbnQgaXMgc3RpbGwgc2F0aXNmaWVkLiBJZiB0aGUgZGlnaXRzIGFyZSBwcmludGVkCisg
ICAgLy8gICAodG9nZXRoZXIgd2l0aCB0aGUgY29ycmVjdCBleHBvbmVudCkgdGhlbiByZWFkaW5n
IHRoaXMgbnVtYmVyIHdpbGwgZ2l2ZQorICAgIC8vICAgJ3YnIGFnYWluLiBUaGUgYnVmZmVyIHdp
bGwgY2hvb3NlIHRoZSByZXByZXNlbnRhdGlvbiB0aGF0IGlzIGNsb3Nlc3QgdG8KKyAgICAvLyAg
ICd2Jy4gSWYgdGhlcmUgYXJlIHR3byBhdCB0aGUgc2FtZSBkaXN0YW5jZSwgdGhhbiB0aGUgbnVt
YmVyIGlzIHJvdW5kIHVwLgorICAgIC8vICAgSW4gdGhpcyBtb2RlIHRoZSAncmVxdWVzdGVkX2Rp
Z2l0cycgcGFyYW1ldGVyIGlzIGlnbm9yZWQuCisgICAgLy8gIC0gRklYRUQ6IHByb2R1Y2VzIGRp
Z2l0cyBuZWNlc3NhcnkgdG8gcHJpbnQgYSBnaXZlbiBudW1iZXIgd2l0aAorICAgIC8vICAgJ3Jl
cXVlc3RlZF9kaWdpdHMnIGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludC4gVGhlIHByb2R1
Y2VkIGRpZ2l0cworICAgIC8vICAgbWlnaHQgYmUgdG9vIHNob3J0IGluIHdoaWNoIGNhc2UgdGhl
IGNhbGxlciBoYXMgdG8gZmlsbCB0aGUgZ2FwcyB3aXRoICcwJ3MuCisgICAgLy8gICBFeGFtcGxl
OiB0b0ZpeGVkKDAuMDAxLCA1KSBpcyBhbGxvd2VkIHRvIHJldHVybiBidWZmZXI9IjEiLCBwb2lu
dD0tMi4KKyAgICAvLyAgIEhhbGZ3YXkgY2FzZXMgYXJlIHJvdW5kZWQgdXAuIFRoZSBjYWxsIHRv
Rml4ZWQoMC4xNSwgMikgdGh1cyByZXR1cm5zCisgICAgLy8gICAgIGJ1ZmZlcj0iMiIsIHBvaW50
PTAuCisgICAgLy8gICBOb3RlOiB0aGUgbGVuZ3RoIG9mIHRoZSByZXR1cm5lZCBidWZmZXIgaGFz
IG5vIG1lYW5pbmcgd3J0IHRoZSBzaWduaWZpY2FuY2UKKyAgICAvLyAgIG9mIGl0cyBkaWdpdHMu
IFRoYXQgaXMsIGp1c3QgYmVjYXVzZSBpdCBjb250YWlucyAnMCdzIGRvZXMgbm90IG1lYW4gdGhh
dAorICAgIC8vICAgYW55IG90aGVyIGRpZ2l0IHdvdWxkIG5vdCBzYXRpc2Z5IHRoZSBpbnRlcm5h
bCBpZGVudGl0eSByZXF1aXJlbWVudC4KKyAgICAvLyAgLSBQUkVDSVNJT046IHByb2R1Y2VzICdy
ZXF1ZXN0ZWRfZGlnaXRzJyB3aGVyZSB0aGUgZmlyc3QgZGlnaXQgaXMgbm90ICcwJy4KKyAgICAv
LyAgIEV2ZW4gdGhvdWdoIHRoZSBsZW5ndGggb2YgcHJvZHVjZWQgZGlnaXRzIHVzdWFsbHkgZXF1
YWxzCisgICAgLy8gICAncmVxdWVzdGVkX2RpZ2l0cycsIHRoZSBmdW5jdGlvbiBpcyBhbGxvd2Vk
IHRvIHJldHVybiBmZXdlciBkaWdpdHMsIGluCisgICAgLy8gICB3aGljaCBjYXNlIHRoZSBjYWxs
ZXIgaGFzIHRvIGZpbGwgdGhlIG1pc3NpbmcgZGlnaXRzIHdpdGggJzAncy4KKyAgICAvLyAgIEhh
bGZ3YXkgY2FzZXMgYXJlIGFnYWluIHJvdW5kZWQgdXAuCisgICAgLy8gJ0JpZ251bUR0b2EnIGV4
cGVjdHMgdGhlIGdpdmVuIGJ1ZmZlciB0byBiZSBiaWcgZW5vdWdoIHRvIGhvbGQgYWxsIGRpZ2l0
cworICAgIC8vIGFuZCBhIHRlcm1pbmF0aW5nIG51bGwtY2hhcmFjdGVyLgorICAgIHZvaWQgQmln
bnVtRHRvYShkb3VibGUgdiwgQmlnbnVtRHRvYU1vZGUgbW9kZSwgaW50IHJlcXVlc3RlZF9kaWdp
dHMsCisgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXIsIGludCogbGVuZ3Ro
LCBpbnQqIHBvaW50KTsKKyAgICAKK30gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbgor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmICAvLyBET1VCTEVfQ09OVkVSU0lPTl9CSUdO
VU1fRFRPQV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2Jp
Z251bS5jYyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9iaWdudW0uY2MKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uODI3YTJmODgyNjRiZTVhOWU2YzM4ODZmODc5MGVkNmIxODc1ZTJjZAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9iaWdudW0uY2MKQEAgLTAs
MCArMSw3NjggQEAKKy8vIENvcHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1l
dDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8g
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8g
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2luY2x1ZGUgImJpZ251
bS5oIgorI2luY2x1ZGUgInV0aWxzLmgiCisKK25hbWVzcGFjZSBXVEYgeworCituYW1lc3BhY2Ug
ZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIEJpZ251bTo6QmlnbnVtKCkKKyAgICA6IGJp
Z2l0c18oYmlnaXRzX2J1ZmZlcl8sIGtCaWdpdENhcGFjaXR5KSwgdXNlZF9kaWdpdHNfKDApLCBl
eHBvbmVudF8oMCkgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGtCaWdpdENhcGFjaXR5
OyArK2kpIHsKKyAgICAgICAgICAgIGJpZ2l0c19baV0gPSAwOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFM+CisgICAgc3RhdGljIGludCBCaXRT
aXplKFMgdmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIDggKiBzaXplb2YodmFsdWUpOworICAgIH0K
KyAgICAKKyAgICAvLyBHdWFyYW50ZWVkIHRvIGxpZSBpbiBvbmUgQmlnaXQuCisgICAgdm9pZCBC
aWdudW06OkFzc2lnblVJbnQxNih1aW50MTZfdCB2YWx1ZSkgeworICAgICAgICBBU1NFUlQoa0Jp
Z2l0U2l6ZSA+PSBCaXRTaXplKHZhbHVlKSk7CisgICAgICAgIFplcm8oKTsKKyAgICAgICAgaWYg
KHZhbHVlID09IDApIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIEVuc3VyZUNhcGFjaXR5KDEp
OworICAgICAgICBiaWdpdHNfWzBdID0gdmFsdWU7CisgICAgICAgIHVzZWRfZGlnaXRzXyA9IDE7
CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpBc3NpZ25VSW50NjQodWludDY0
X3QgdmFsdWUpIHsKKyAgICAgICAgY29uc3QgaW50IGtVSW50NjRTaXplID0gNjQ7CisgICAgICAg
IAorICAgICAgICBaZXJvKCk7CisgICAgICAgIGlmICh2YWx1ZSA9PSAwKSByZXR1cm47CisgICAg
ICAgIAorICAgICAgICBpbnQgbmVlZGVkX2JpZ2l0cyA9IGtVSW50NjRTaXplIC8ga0JpZ2l0U2l6
ZSArIDE7CisgICAgICAgIEVuc3VyZUNhcGFjaXR5KG5lZWRlZF9iaWdpdHMpOworICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IG5lZWRlZF9iaWdpdHM7ICsraSkgeworICAgICAgICAgICAgYmln
aXRzX1tpXSA9IHZhbHVlICYga0JpZ2l0TWFzazsKKyAgICAgICAgICAgIHZhbHVlID0gdmFsdWUg
Pj4ga0JpZ2l0U2l6ZTsKKyAgICAgICAgfQorICAgICAgICB1c2VkX2RpZ2l0c18gPSBuZWVkZWRf
YmlnaXRzOworICAgICAgICBDbGFtcCgpOworICAgIH0KKyAgICAKKyAgICAKKyAgICB2b2lkIEJp
Z251bTo6QXNzaWduQmlnbnVtKGNvbnN0IEJpZ251bSYgb3RoZXIpIHsKKyAgICAgICAgZXhwb25l
bnRfID0gb3RoZXIuZXhwb25lbnRfOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG90aGVy
LnVzZWRfZGlnaXRzXzsgKytpKSB7CisgICAgICAgICAgICBiaWdpdHNfW2ldID0gb3RoZXIuYmln
aXRzX1tpXTsKKyAgICAgICAgfQorICAgICAgICAvLyBDbGVhciB0aGUgZXhjZXNzIGRpZ2l0cyAo
aWYgdGhlcmUgd2VyZSBhbnkpLgorICAgICAgICBmb3IgKGludCBpID0gb3RoZXIudXNlZF9kaWdp
dHNfOyBpIDwgdXNlZF9kaWdpdHNfOyArK2kpIHsKKyAgICAgICAgICAgIGJpZ2l0c19baV0gPSAw
OworICAgICAgICB9CisgICAgICAgIHVzZWRfZGlnaXRzXyA9IG90aGVyLnVzZWRfZGlnaXRzXzsK
KyAgICB9CisgICAgCisgICAgCisgICAgc3RhdGljIHVpbnQ2NF90IFJlYWRVSW50NjQoVmVjdG9y
PGNvbnN0IGNoYXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
ZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGlnaXRzX3RvX3JlYWQp
IHsKKyAgICAgICAgdWludDY0X3QgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IGZy
b207IGkgPCBmcm9tICsgZGlnaXRzX3RvX3JlYWQ7ICsraSkgeworICAgICAgICAgICAgaW50IGRp
Z2l0ID0gYnVmZmVyW2ldIC0gJzAnOworICAgICAgICAgICAgQVNTRVJUKDAgPD0gZGlnaXQgJiYg
ZGlnaXQgPD0gOSk7CisgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKiAxMCArIGRpZ2l0Owor
ICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIAorICAg
IHZvaWQgQmlnbnVtOjpBc3NpZ25EZWNpbWFsU3RyaW5nKFZlY3Rvcjxjb25zdCBjaGFyPiB2YWx1
ZSkgeworICAgICAgICAvLyAyXjY0ID0gMTg0NDY3NDQwNzM3MDk1NTE2MTYgPiAxMF4xOQorICAg
ICAgICBjb25zdCBpbnQga01heFVpbnQ2NERlY2ltYWxEaWdpdHMgPSAxOTsKKyAgICAgICAgWmVy
bygpOworICAgICAgICBpbnQgbGVuZ3RoID0gdmFsdWUubGVuZ3RoKCk7CisgICAgICAgIGludCBw
b3MgPSAwOworICAgICAgICAvLyBMZXQncyBqdXN0IHNheSB0aGF0IGVhY2ggZGlnaXQgbmVlZHMg
NCBiaXRzLgorICAgICAgICB3aGlsZSAobGVuZ3RoID49IGtNYXhVaW50NjREZWNpbWFsRGlnaXRz
KSB7CisgICAgICAgICAgICB1aW50NjRfdCBkaWdpdHMgPSBSZWFkVUludDY0KHZhbHVlLCBwb3Ms
IGtNYXhVaW50NjREZWNpbWFsRGlnaXRzKTsKKyAgICAgICAgICAgIHBvcyArPSBrTWF4VWludDY0
RGVjaW1hbERpZ2l0czsKKyAgICAgICAgICAgIGxlbmd0aCAtPSBrTWF4VWludDY0RGVjaW1hbERp
Z2l0czsKKyAgICAgICAgICAgIE11bHRpcGx5QnlQb3dlck9mVGVuKGtNYXhVaW50NjREZWNpbWFs
RGlnaXRzKTsKKyAgICAgICAgICAgIEFkZFVJbnQ2NChkaWdpdHMpOworICAgICAgICB9CisgICAg
ICAgIHVpbnQ2NF90IGRpZ2l0cyA9IFJlYWRVSW50NjQodmFsdWUsIHBvcywgbGVuZ3RoKTsKKyAg
ICAgICAgTXVsdGlwbHlCeVBvd2VyT2ZUZW4obGVuZ3RoKTsKKyAgICAgICAgQWRkVUludDY0KGRp
Z2l0cyk7CisgICAgICAgIENsYW1wKCk7CisgICAgfQorICAgIAorICAgIAorICAgIHN0YXRpYyBp
bnQgSGV4Q2hhclZhbHVlKGNoYXIgYykgeworICAgICAgICBpZiAoJzAnIDw9IGMgJiYgYyA8PSAn
OScpIHJldHVybiBjIC0gJzAnOworICAgICAgICBpZiAoJ2EnIDw9IGMgJiYgYyA8PSAnZicpIHJl
dHVybiAxMCArIGMgLSAnYSc7CisgICAgICAgIGlmICgnQScgPD0gYyAmJiBjIDw9ICdGJykgcmV0
dXJuIDEwICsgYyAtICdBJzsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJu
IDA7ICAvLyBUbyBtYWtlIGNvbXBpbGVyIGhhcHB5LgorICAgIH0KKyAgICAKKyAgICAKKyAgICB2
b2lkIEJpZ251bTo6QXNzaWduSGV4U3RyaW5nKFZlY3Rvcjxjb25zdCBjaGFyPiB2YWx1ZSkgewor
ICAgICAgICBaZXJvKCk7CisgICAgICAgIGludCBsZW5ndGggPSB2YWx1ZS5sZW5ndGgoKTsKKyAg
ICAgICAgCisgICAgICAgIGludCBuZWVkZWRfYmlnaXRzID0gbGVuZ3RoICogNCAvIGtCaWdpdFNp
emUgKyAxOworICAgICAgICBFbnN1cmVDYXBhY2l0eShuZWVkZWRfYmlnaXRzKTsKKyAgICAgICAg
aW50IHN0cmluZ19pbmRleCA9IGxlbmd0aCAtIDE7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbmVlZGVkX2JpZ2l0cyAtIDE7ICsraSkgeworICAgICAgICAgICAgLy8gVGhlc2UgYmlnaXRz
IGFyZSBndWFyYW50ZWVkIHRvIGJlICJmdWxsIi4KKyAgICAgICAgICAgIENodW5rIGN1cnJlbnRf
YmlnaXQgPSAwOworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBrQmlnaXRTaXplIC8g
NDsgaisrKSB7CisgICAgICAgICAgICAgICAgY3VycmVudF9iaWdpdCArPSBIZXhDaGFyVmFsdWUo
dmFsdWVbc3RyaW5nX2luZGV4LS1dKSA8PCAoaiAqIDQpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYmlnaXRzX1tpXSA9IGN1cnJlbnRfYmlnaXQ7CisgICAgICAgIH0KKyAgICAgICAgdXNl
ZF9kaWdpdHNfID0gbmVlZGVkX2JpZ2l0cyAtIDE7CisgICAgICAgIAorICAgICAgICBDaHVuayBt
b3N0X3NpZ25pZmljYW50X2JpZ2l0ID0gMDsgIC8vIENvdWxkIGJlID0gMDsKKyAgICAgICAgZm9y
IChpbnQgaiA9IDA7IGogPD0gc3RyaW5nX2luZGV4OyArK2opIHsKKyAgICAgICAgICAgIG1vc3Rf
c2lnbmlmaWNhbnRfYmlnaXQgPDw9IDQ7CisgICAgICAgICAgICBtb3N0X3NpZ25pZmljYW50X2Jp
Z2l0ICs9IEhleENoYXJWYWx1ZSh2YWx1ZVtqXSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1v
c3Rfc2lnbmlmaWNhbnRfYmlnaXQgIT0gMCkgeworICAgICAgICAgICAgYmlnaXRzX1t1c2VkX2Rp
Z2l0c19dID0gbW9zdF9zaWduaWZpY2FudF9iaWdpdDsKKyAgICAgICAgICAgIHVzZWRfZGlnaXRz
XysrOworICAgICAgICB9CisgICAgICAgIENsYW1wKCk7CisgICAgfQorICAgIAorICAgIAorICAg
IHZvaWQgQmlnbnVtOjpBZGRVSW50NjQodWludDY0X3Qgb3BlcmFuZCkgeworICAgICAgICBpZiAo
b3BlcmFuZCA9PSAwKSByZXR1cm47CisgICAgICAgIEJpZ251bSBvdGhlcjsKKyAgICAgICAgb3Ro
ZXIuQXNzaWduVUludDY0KG9wZXJhbmQpOworICAgICAgICBBZGRCaWdudW0ob3RoZXIpOworICAg
IH0KKyAgICAKKyAgICAKKyAgICB2b2lkIEJpZ251bTo6QWRkQmlnbnVtKGNvbnN0IEJpZ251bSYg
b3RoZXIpIHsKKyAgICAgICAgQVNTRVJUKElzQ2xhbXBlZCgpKTsKKyAgICAgICAgQVNTRVJUKG90
aGVyLklzQ2xhbXBlZCgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIElmIHRoaXMgaGFzIGEgZ3Jl
YXRlciBleHBvbmVudCB0aGFuIG90aGVyIGFwcGVuZCB6ZXJvLWJpZ2l0cyB0byB0aGlzLgorICAg
ICAgICAvLyBBZnRlciB0aGlzIGNhbGwgZXhwb25lbnRfIDw9IG90aGVyLmV4cG9uZW50Xy4KKyAg
ICAgICAgQWxpZ24ob3RoZXIpOworICAgICAgICAKKyAgICAgICAgLy8gVGhlcmUgYXJlIHR3byBw
b3NzaWJpbGl0aWVzOgorICAgICAgICAvLyAgIGFhYWFhYWFhYWFhIDAwMDAgICh3aGVyZSB0aGUg
MHMgcmVwcmVzZW50IGEncyBleHBvbmVudCkKKyAgICAgICAgLy8gICAgIGJiYmJiIDAwMDAwMDAw
CisgICAgICAgIC8vICAgLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAvLyAgIGNjY2NjY2NjY2Nj
IDAwMDAKKyAgICAgICAgLy8gb3IKKyAgICAgICAgLy8gICAgYWFhYWFhYWFhYSAwMDAwCisgICAg
ICAgIC8vICBiYmJiYmJiYmIgMDAwMDAwMAorICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0K
KyAgICAgICAgLy8gIGNjY2NjY2NjY2NjYyAwMDAwCisgICAgICAgIC8vIEluIGJvdGggY2FzZXMg
d2UgbWlnaHQgbmVlZCBhIGNhcnJ5IGJpZ2l0LgorICAgICAgICAKKyAgICAgICAgRW5zdXJlQ2Fw
YWNpdHkoMSArIE1heChCaWdpdExlbmd0aCgpLCBvdGhlci5CaWdpdExlbmd0aCgpKSAtIGV4cG9u
ZW50Xyk7CisgICAgICAgIENodW5rIGNhcnJ5ID0gMDsKKyAgICAgICAgaW50IGJpZ2l0X3BvcyA9
IG90aGVyLmV4cG9uZW50XyAtIGV4cG9uZW50XzsKKyAgICAgICAgQVNTRVJUKGJpZ2l0X3BvcyA+
PSAwKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvdGhlci51c2VkX2RpZ2l0c187ICsr
aSkgeworICAgICAgICAgICAgQ2h1bmsgc3VtID0gYmlnaXRzX1tiaWdpdF9wb3NdICsgb3RoZXIu
YmlnaXRzX1tpXSArIGNhcnJ5OworICAgICAgICAgICAgYmlnaXRzX1tiaWdpdF9wb3NdID0gc3Vt
ICYga0JpZ2l0TWFzazsKKyAgICAgICAgICAgIGNhcnJ5ID0gc3VtID4+IGtCaWdpdFNpemU7Cisg
ICAgICAgICAgICBiaWdpdF9wb3MrKzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgd2hp
bGUgKGNhcnJ5ICE9IDApIHsKKyAgICAgICAgICAgIENodW5rIHN1bSA9IGJpZ2l0c19bYmlnaXRf
cG9zXSArIGNhcnJ5OworICAgICAgICAgICAgYmlnaXRzX1tiaWdpdF9wb3NdID0gc3VtICYga0Jp
Z2l0TWFzazsKKyAgICAgICAgICAgIGNhcnJ5ID0gc3VtID4+IGtCaWdpdFNpemU7CisgICAgICAg
ICAgICBiaWdpdF9wb3MrKzsKKyAgICAgICAgfQorICAgICAgICB1c2VkX2RpZ2l0c18gPSBNYXgo
YmlnaXRfcG9zLCB1c2VkX2RpZ2l0c18pOworICAgICAgICBBU1NFUlQoSXNDbGFtcGVkKCkpOwor
ICAgIH0KKyAgICAKKyAgICAKKyAgICB2b2lkIEJpZ251bTo6U3VidHJhY3RCaWdudW0oY29uc3Qg
QmlnbnVtJiBvdGhlcikgeworICAgICAgICBBU1NFUlQoSXNDbGFtcGVkKCkpOworICAgICAgICBB
U1NFUlQob3RoZXIuSXNDbGFtcGVkKCkpOworICAgICAgICAvLyBXZSByZXF1aXJlIHRoaXMgdG8g
YmUgYmlnZ2VyIHRoYW4gb3RoZXIuCisgICAgICAgIEFTU0VSVChMZXNzRXF1YWwob3RoZXIsICp0
aGlzKSk7CisgICAgICAgIAorICAgICAgICBBbGlnbihvdGhlcik7CisgICAgICAgIAorICAgICAg
ICBpbnQgb2Zmc2V0ID0gb3RoZXIuZXhwb25lbnRfIC0gZXhwb25lbnRfOworICAgICAgICBDaHVu
ayBib3Jyb3cgPSAwOworICAgICAgICBpbnQgaTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG90
aGVyLnVzZWRfZGlnaXRzXzsgKytpKSB7CisgICAgICAgICAgICBBU1NFUlQoKGJvcnJvdyA9PSAw
KSB8fCAoYm9ycm93ID09IDEpKTsKKyAgICAgICAgICAgIENodW5rIGRpZmZlcmVuY2UgPSBiaWdp
dHNfW2kgKyBvZmZzZXRdIC0gb3RoZXIuYmlnaXRzX1tpXSAtIGJvcnJvdzsKKyAgICAgICAgICAg
IGJpZ2l0c19baSArIG9mZnNldF0gPSBkaWZmZXJlbmNlICYga0JpZ2l0TWFzazsKKyAgICAgICAg
ICAgIGJvcnJvdyA9IGRpZmZlcmVuY2UgPj4gKGtDaHVua1NpemUgLSAxKTsKKyAgICAgICAgfQor
ICAgICAgICB3aGlsZSAoYm9ycm93ICE9IDApIHsKKyAgICAgICAgICAgIENodW5rIGRpZmZlcmVu
Y2UgPSBiaWdpdHNfW2kgKyBvZmZzZXRdIC0gYm9ycm93OworICAgICAgICAgICAgYmlnaXRzX1tp
ICsgb2Zmc2V0XSA9IGRpZmZlcmVuY2UgJiBrQmlnaXRNYXNrOworICAgICAgICAgICAgYm9ycm93
ID0gZGlmZmVyZW5jZSA+PiAoa0NodW5rU2l6ZSAtIDEpOworICAgICAgICAgICAgKytpOworICAg
ICAgICB9CisgICAgICAgIENsYW1wKCk7CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgQmln
bnVtOjpTaGlmdExlZnQoaW50IHNoaWZ0X2Ftb3VudCkgeworICAgICAgICBpZiAodXNlZF9kaWdp
dHNfID09IDApIHJldHVybjsKKyAgICAgICAgZXhwb25lbnRfICs9IHNoaWZ0X2Ftb3VudCAvIGtC
aWdpdFNpemU7CisgICAgICAgIGludCBsb2NhbF9zaGlmdCA9IHNoaWZ0X2Ftb3VudCAlIGtCaWdp
dFNpemU7CisgICAgICAgIEVuc3VyZUNhcGFjaXR5KHVzZWRfZGlnaXRzXyArIDEpOworICAgICAg
ICBCaWdpdHNTaGlmdExlZnQobG9jYWxfc2hpZnQpOworICAgIH0KKyAgICAKKyAgICAKKyAgICB2
b2lkIEJpZ251bTo6TXVsdGlwbHlCeVVJbnQzMih1aW50MzJfdCBmYWN0b3IpIHsKKyAgICAgICAg
aWYgKGZhY3RvciA9PSAxKSByZXR1cm47CisgICAgICAgIGlmIChmYWN0b3IgPT0gMCkgeworICAg
ICAgICAgICAgWmVybygpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IGlmICh1c2VkX2RpZ2l0c18gPT0gMCkgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgLy8gVGhl
IHByb2R1Y3Qgb2YgYSBiaWdpdCB3aXRoIHRoZSBmYWN0b3IgaXMgb2Ygc2l6ZSBrQmlnaXRTaXpl
ICsgMzIuCisgICAgICAgIC8vIEFzc2VydCB0aGF0IHRoaXMgbnVtYmVyICsgMSAoZm9yIHRoZSBj
YXJyeSkgZml0cyBpbnRvIGRvdWJsZSBjaHVuay4KKyAgICAgICAgQVNTRVJUKGtEb3VibGVDaHVu
a1NpemUgPj0ga0JpZ2l0U2l6ZSArIDMyICsgMSk7CisgICAgICAgIERvdWJsZUNodW5rIGNhcnJ5
ID0gMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1c2VkX2RpZ2l0c187ICsraSkgewor
ICAgICAgICAgICAgRG91YmxlQ2h1bmsgcHJvZHVjdCA9IHN0YXRpY19jYXN0PERvdWJsZUNodW5r
PihmYWN0b3IpICogYmlnaXRzX1tpXSArIGNhcnJ5OworICAgICAgICAgICAgYmlnaXRzX1tpXSA9
IHN0YXRpY19jYXN0PENodW5rPihwcm9kdWN0ICYga0JpZ2l0TWFzayk7CisgICAgICAgICAgICBj
YXJyeSA9IChwcm9kdWN0ID4+IGtCaWdpdFNpemUpOworICAgICAgICB9CisgICAgICAgIHdoaWxl
IChjYXJyeSAhPSAwKSB7CisgICAgICAgICAgICBFbnN1cmVDYXBhY2l0eSh1c2VkX2RpZ2l0c18g
KyAxKTsKKyAgICAgICAgICAgIGJpZ2l0c19bdXNlZF9kaWdpdHNfXSA9IGNhcnJ5ICYga0JpZ2l0
TWFzazsKKyAgICAgICAgICAgIHVzZWRfZGlnaXRzXysrOworICAgICAgICAgICAgY2FycnkgPj49
IGtCaWdpdFNpemU7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdu
dW06Ok11bHRpcGx5QnlVSW50NjQodWludDY0X3QgZmFjdG9yKSB7CisgICAgICAgIGlmIChmYWN0
b3IgPT0gMSkgcmV0dXJuOworICAgICAgICBpZiAoZmFjdG9yID09IDApIHsKKyAgICAgICAgICAg
IFplcm8oKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQo
a0JpZ2l0U2l6ZSA8IDMyKTsKKyAgICAgICAgdWludDY0X3QgY2FycnkgPSAwOworICAgICAgICB1
aW50NjRfdCBsb3cgPSBmYWN0b3IgJiAweEZGRkZGRkZGOworICAgICAgICB1aW50NjRfdCBoaWdo
ID0gZmFjdG9yID4+IDMyOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHVzZWRfZGlnaXRz
XzsgKytpKSB7CisgICAgICAgICAgICB1aW50NjRfdCBwcm9kdWN0X2xvdyA9IGxvdyAqIGJpZ2l0
c19baV07CisgICAgICAgICAgICB1aW50NjRfdCBwcm9kdWN0X2hpZ2ggPSBoaWdoICogYmlnaXRz
X1tpXTsKKyAgICAgICAgICAgIHVpbnQ2NF90IHRtcCA9IChjYXJyeSAmIGtCaWdpdE1hc2spICsg
cHJvZHVjdF9sb3c7CisgICAgICAgICAgICBiaWdpdHNfW2ldID0gdG1wICYga0JpZ2l0TWFzazsK
KyAgICAgICAgICAgIGNhcnJ5ID0gKGNhcnJ5ID4+IGtCaWdpdFNpemUpICsgKHRtcCA+PiBrQmln
aXRTaXplKSArCisgICAgICAgICAgICAocHJvZHVjdF9oaWdoIDw8ICgzMiAtIGtCaWdpdFNpemUp
KTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoY2FycnkgIT0gMCkgeworICAgICAgICAgICAg
RW5zdXJlQ2FwYWNpdHkodXNlZF9kaWdpdHNfICsgMSk7CisgICAgICAgICAgICBiaWdpdHNfW3Vz
ZWRfZGlnaXRzX10gPSBjYXJyeSAmIGtCaWdpdE1hc2s7CisgICAgICAgICAgICB1c2VkX2RpZ2l0
c18rKzsKKyAgICAgICAgICAgIGNhcnJ5ID4+PSBrQmlnaXRTaXplOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpNdWx0aXBseUJ5UG93ZXJPZlRlbihpbnQg
ZXhwb25lbnQpIHsKKyAgICAgICAgY29uc3QgdWludDY0X3Qga0ZpdmUyNyA9IFVJTlQ2NF8yUEFS
VF9DKDB4Njc2NWM3OTMsIGZhMTAwNzlkKTsKKyAgICAgICAgY29uc3QgdWludDE2X3Qga0ZpdmUx
ID0gNTsKKyAgICAgICAgY29uc3QgdWludDE2X3Qga0ZpdmUyID0ga0ZpdmUxICogNTsKKyAgICAg
ICAgY29uc3QgdWludDE2X3Qga0ZpdmUzID0ga0ZpdmUyICogNTsKKyAgICAgICAgY29uc3QgdWlu
dDE2X3Qga0ZpdmU0ID0ga0ZpdmUzICogNTsKKyAgICAgICAgY29uc3QgdWludDE2X3Qga0ZpdmU1
ID0ga0ZpdmU0ICogNTsKKyAgICAgICAgY29uc3QgdWludDE2X3Qga0ZpdmU2ID0ga0ZpdmU1ICog
NTsKKyAgICAgICAgY29uc3QgdWludDMyX3Qga0ZpdmU3ID0ga0ZpdmU2ICogNTsKKyAgICAgICAg
Y29uc3QgdWludDMyX3Qga0ZpdmU4ID0ga0ZpdmU3ICogNTsKKyAgICAgICAgY29uc3QgdWludDMy
X3Qga0ZpdmU5ID0ga0ZpdmU4ICogNTsKKyAgICAgICAgY29uc3QgdWludDMyX3Qga0ZpdmUxMCA9
IGtGaXZlOSAqIDU7CisgICAgICAgIGNvbnN0IHVpbnQzMl90IGtGaXZlMTEgPSBrRml2ZTEwICog
NTsKKyAgICAgICAgY29uc3QgdWludDMyX3Qga0ZpdmUxMiA9IGtGaXZlMTEgKiA1OworICAgICAg
ICBjb25zdCB1aW50MzJfdCBrRml2ZTEzID0ga0ZpdmUxMiAqIDU7CisgICAgICAgIGNvbnN0IHVp
bnQzMl90IGtGaXZlMV90b18xMltdID0KKyAgICAgICAgeyBrRml2ZTEsIGtGaXZlMiwga0ZpdmUz
LCBrRml2ZTQsIGtGaXZlNSwga0ZpdmU2LAorICAgICAgICAgICAga0ZpdmU3LCBrRml2ZTgsIGtG
aXZlOSwga0ZpdmUxMCwga0ZpdmUxMSwga0ZpdmUxMiB9OworICAgICAgICAKKyAgICAgICAgQVNT
RVJUKGV4cG9uZW50ID49IDApOworICAgICAgICBpZiAoZXhwb25lbnQgPT0gMCkgcmV0dXJuOwor
ICAgICAgICBpZiAodXNlZF9kaWdpdHNfID09IDApIHJldHVybjsKKyAgICAgICAgCisgICAgICAg
IC8vIFdlIHNoaWZ0IGJ5IGV4cG9uZW50IGF0IHRoZSBlbmQganVzdCBiZWZvcmUgcmV0dXJuaW5n
LgorICAgICAgICBpbnQgcmVtYWluaW5nX2V4cG9uZW50ID0gZXhwb25lbnQ7CisgICAgICAgIHdo
aWxlIChyZW1haW5pbmdfZXhwb25lbnQgPj0gMjcpIHsKKyAgICAgICAgICAgIE11bHRpcGx5QnlV
SW50NjQoa0ZpdmUyNyk7CisgICAgICAgICAgICByZW1haW5pbmdfZXhwb25lbnQgLT0gMjc7Cisg
ICAgICAgIH0KKyAgICAgICAgd2hpbGUgKHJlbWFpbmluZ19leHBvbmVudCA+PSAxMykgeworICAg
ICAgICAgICAgTXVsdGlwbHlCeVVJbnQzMihrRml2ZTEzKTsKKyAgICAgICAgICAgIHJlbWFpbmlu
Z19leHBvbmVudCAtPSAxMzsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVtYWluaW5nX2V4cG9u
ZW50ID4gMCkgeworICAgICAgICAgICAgTXVsdGlwbHlCeVVJbnQzMihrRml2ZTFfdG9fMTJbcmVt
YWluaW5nX2V4cG9uZW50IC0gMV0pOworICAgICAgICB9CisgICAgICAgIFNoaWZ0TGVmdChleHBv
bmVudCk7CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpTcXVhcmUoKSB7Cisg
ICAgICAgIEFTU0VSVChJc0NsYW1wZWQoKSk7CisgICAgICAgIGludCBwcm9kdWN0X2xlbmd0aCA9
IDIgKiB1c2VkX2RpZ2l0c187CisgICAgICAgIEVuc3VyZUNhcGFjaXR5KHByb2R1Y3RfbGVuZ3Ro
KTsKKyAgICAgICAgCisgICAgICAgIC8vIENvbWJhIG11bHRpcGxpY2F0aW9uOiBjb21wdXRlIGVh
Y2ggY29sdW1uIHNlcGFyYXRlbHkuCisgICAgICAgIC8vIEV4YW1wbGU6IHIgPSBhMmExYTAgKiBi
MmIxYjAuCisgICAgICAgIC8vICAgIHIgPSAgMSAgICAqIGEwYjAgKworICAgICAgICAvLyAgICAg
ICAgMTAgICAgKiAoYTFiMCArIGEwYjEpICsKKyAgICAgICAgLy8gICAgICAgIDEwMCAgICogKGEy
YjAgKyBhMWIxICsgYTBiMikgKworICAgICAgICAvLyAgICAgICAgMTAwMCAgKiAoYTJiMSArIGEx
YjIpICsKKyAgICAgICAgLy8gICAgICAgIDEwMDAwICogYTJiMgorICAgICAgICAvLworICAgICAg
ICAvLyBJbiB0aGUgd29yc3QgY2FzZSB3ZSBoYXZlIHRvIGFjY3VtdWxhdGUgbmItZGlnaXRzIHBy
b2R1Y3RzIG9mIGRpZ2l0KmRpZ2l0LgorICAgICAgICAvLworICAgICAgICAvLyBBc3NlcnQgdGhh
dCB0aGUgYWRkaXRpb25hbCBudW1iZXIgb2YgYml0cyBpbiBhIERvdWJsZUNodW5rIGFyZSBlbm91
Z2ggdG8KKyAgICAgICAgLy8gc3VtIHVwIHVzZWRfZGlnaXRzIG9mIEJpZ2l0KkJpZ2l0LgorICAg
ICAgICBpZiAoKDEgPDwgKDIgKiAoa0NodW5rU2l6ZSAtIGtCaWdpdFNpemUpKSkgPD0gdXNlZF9k
aWdpdHNfKSB7CisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7CisgICAgICAgIH0KKyAgICAg
ICAgRG91YmxlQ2h1bmsgYWNjdW11bGF0b3IgPSAwOworICAgICAgICAvLyBGaXJzdCBzaGlmdCB0
aGUgZGlnaXRzIHNvIHdlIGRvbid0IG92ZXJ3cml0ZSB0aGVtLgorICAgICAgICBpbnQgY29weV9v
ZmZzZXQgPSB1c2VkX2RpZ2l0c187CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdXNlZF9k
aWdpdHNfOyArK2kpIHsKKyAgICAgICAgICAgIGJpZ2l0c19bY29weV9vZmZzZXQgKyBpXSA9IGJp
Z2l0c19baV07CisgICAgICAgIH0KKyAgICAgICAgLy8gV2UgaGF2ZSB0d28gbG9vcHMgdG8gYXZv
aWQgc29tZSAnaWYncyBpbiB0aGUgbG9vcC4KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1
c2VkX2RpZ2l0c187ICsraSkgeworICAgICAgICAgICAgLy8gUHJvY2VzcyB0ZW1wb3JhcnkgZGln
aXQgaSB3aXRoIHBvd2VyIGkuCisgICAgICAgICAgICAvLyBUaGUgc3VtIG9mIHRoZSB0d28gaW5k
aWNlcyBtdXN0IGJlIGVxdWFsIHRvIGkuCisgICAgICAgICAgICBpbnQgYmlnaXRfaW5kZXgxID0g
aTsKKyAgICAgICAgICAgIGludCBiaWdpdF9pbmRleDIgPSAwOworICAgICAgICAgICAgLy8gU3Vt
IGFsbCBvZiB0aGUgc3ViLXByb2R1Y3RzLgorICAgICAgICAgICAgd2hpbGUgKGJpZ2l0X2luZGV4
MSA+PSAwKSB7CisgICAgICAgICAgICAgICAgQ2h1bmsgY2h1bmsxID0gYmlnaXRzX1tjb3B5X29m
ZnNldCArIGJpZ2l0X2luZGV4MV07CisgICAgICAgICAgICAgICAgQ2h1bmsgY2h1bmsyID0gYmln
aXRzX1tjb3B5X29mZnNldCArIGJpZ2l0X2luZGV4Ml07CisgICAgICAgICAgICAgICAgYWNjdW11
bGF0b3IgKz0gc3RhdGljX2Nhc3Q8RG91YmxlQ2h1bms+KGNodW5rMSkgKiBjaHVuazI7CisgICAg
ICAgICAgICAgICAgYmlnaXRfaW5kZXgxLS07CisgICAgICAgICAgICAgICAgYmlnaXRfaW5kZXgy
Kys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBiaWdpdHNfW2ldID0gc3RhdGljX2Nhc3Q8
Q2h1bms+KGFjY3VtdWxhdG9yKSAmIGtCaWdpdE1hc2s7CisgICAgICAgICAgICBhY2N1bXVsYXRv
ciA+Pj0ga0JpZ2l0U2l6ZTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBpID0gdXNlZF9k
aWdpdHNfOyBpIDwgcHJvZHVjdF9sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaW50IGJpZ2l0
X2luZGV4MSA9IHVzZWRfZGlnaXRzXyAtIDE7CisgICAgICAgICAgICBpbnQgYmlnaXRfaW5kZXgy
ID0gaSAtIGJpZ2l0X2luZGV4MTsKKyAgICAgICAgICAgIC8vIEludmFyaWFudDogc3VtIG9mIGJv
dGggaW5kaWNlcyBpcyBhZ2FpbiBlcXVhbCB0byBpLgorICAgICAgICAgICAgLy8gSW5uZXIgbG9v
cCBydW5zIDAgdGltZXMgb24gbGFzdCBpdGVyYXRpb24sIGVtcHR5aW5nIGFjY3VtdWxhdG9yLgor
ICAgICAgICAgICAgd2hpbGUgKGJpZ2l0X2luZGV4MiA8IHVzZWRfZGlnaXRzXykgeworICAgICAg
ICAgICAgICAgIENodW5rIGNodW5rMSA9IGJpZ2l0c19bY29weV9vZmZzZXQgKyBiaWdpdF9pbmRl
eDFdOworICAgICAgICAgICAgICAgIENodW5rIGNodW5rMiA9IGJpZ2l0c19bY29weV9vZmZzZXQg
KyBiaWdpdF9pbmRleDJdOworICAgICAgICAgICAgICAgIGFjY3VtdWxhdG9yICs9IHN0YXRpY19j
YXN0PERvdWJsZUNodW5rPihjaHVuazEpICogY2h1bmsyOworICAgICAgICAgICAgICAgIGJpZ2l0
X2luZGV4MS0tOworICAgICAgICAgICAgICAgIGJpZ2l0X2luZGV4MisrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgLy8gVGhlIG92ZXJ3cml0dGVuIGJpZ2l0c19baV0gd2lsbCBuZXZlciBi
ZSByZWFkIGluIGZ1cnRoZXIgbG9vcCBpdGVyYXRpb25zLAorICAgICAgICAgICAgLy8gYmVjYXVz
ZSBiaWdpdF9pbmRleDEgYW5kIGJpZ2l0X2luZGV4MiBhcmUgYWx3YXlzIGdyZWF0ZXIKKyAgICAg
ICAgICAgIC8vIHRoYW4gaSAtIHVzZWRfZGlnaXRzXy4KKyAgICAgICAgICAgIGJpZ2l0c19baV0g
PSBzdGF0aWNfY2FzdDxDaHVuaz4oYWNjdW11bGF0b3IpICYga0JpZ2l0TWFzazsKKyAgICAgICAg
ICAgIGFjY3VtdWxhdG9yID4+PSBrQmlnaXRTaXplOworICAgICAgICB9CisgICAgICAgIC8vIFNp
bmNlIHRoZSByZXN1bHQgd2FzIGd1YXJhbnRlZWQgdG8gbGllIGluc2lkZSB0aGUgbnVtYmVyIHRo
ZQorICAgICAgICAvLyBhY2N1bXVsYXRvciBtdXN0IGJlIDAgbm93LgorICAgICAgICBBU1NFUlQo
YWNjdW11bGF0b3IgPT0gMCk7CisgICAgICAgIAorICAgICAgICAvLyBEb24ndCBmb3JnZXQgdG8g
dXBkYXRlIHRoZSB1c2VkX2RpZ2l0cyBhbmQgdGhlIGV4cG9uZW50LgorICAgICAgICB1c2VkX2Rp
Z2l0c18gPSBwcm9kdWN0X2xlbmd0aDsKKyAgICAgICAgZXhwb25lbnRfICo9IDI7CisgICAgICAg
IENsYW1wKCk7CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpBc3NpZ25Qb3dl
clVJbnQxNih1aW50MTZfdCBiYXNlLCBpbnQgcG93ZXJfZXhwb25lbnQpIHsKKyAgICAgICAgQVNT
RVJUKGJhc2UgIT0gMCk7CisgICAgICAgIEFTU0VSVChwb3dlcl9leHBvbmVudCA+PSAwKTsKKyAg
ICAgICAgaWYgKHBvd2VyX2V4cG9uZW50ID09IDApIHsKKyAgICAgICAgICAgIEFzc2lnblVJbnQx
NigxKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBaZXJvKCk7Cisg
ICAgICAgIGludCBzaGlmdHMgPSAwOworICAgICAgICAvLyBXZSBleHBlY3QgYmFzZSB0byBiZSBp
biByYW5nZSAyLTMyLCBhbmQgbW9zdCBvZnRlbiB0byBiZSAxMC4KKyAgICAgICAgLy8gSXQgZG9l
cyBub3QgbWFrZSBtdWNoIHNlbnNlIHRvIGltcGxlbWVudCBkaWZmZXJlbnQgYWxnb3JpdGhtcyBm
b3IgY291bnRpbmcKKyAgICAgICAgLy8gdGhlIGJpdHMuCisgICAgICAgIHdoaWxlICgoYmFzZSAm
IDEpID09IDApIHsKKyAgICAgICAgICAgIGJhc2UgPj49IDE7CisgICAgICAgICAgICBzaGlmdHMr
KzsKKyAgICAgICAgfQorICAgICAgICBpbnQgYml0X3NpemUgPSAwOworICAgICAgICBpbnQgdG1w
X2Jhc2UgPSBiYXNlOworICAgICAgICB3aGlsZSAodG1wX2Jhc2UgIT0gMCkgeworICAgICAgICAg
ICAgdG1wX2Jhc2UgPj49IDE7CisgICAgICAgICAgICBiaXRfc2l6ZSsrOworICAgICAgICB9Cisg
ICAgICAgIGludCBmaW5hbF9zaXplID0gYml0X3NpemUgKiBwb3dlcl9leHBvbmVudDsKKyAgICAg
ICAgLy8gMSBleHRyYSBiaWdpdCBmb3IgdGhlIHNoaWZ0aW5nLCBhbmQgb25lIGZvciByb3VuZGVk
IGZpbmFsX3NpemUuCisgICAgICAgIEVuc3VyZUNhcGFjaXR5KGZpbmFsX3NpemUgLyBrQmlnaXRT
aXplICsgMik7CisgICAgICAgIAorICAgICAgICAvLyBMZWZ0IHRvIFJpZ2h0IGV4cG9uZW50aWF0
aW9uLgorICAgICAgICBpbnQgbWFzayA9IDE7CisgICAgICAgIHdoaWxlIChwb3dlcl9leHBvbmVu
dCA+PSBtYXNrKSBtYXNrIDw8PSAxOworICAgICAgICAKKyAgICAgICAgLy8gVGhlIG1hc2sgaXMg
bm93IHBvaW50aW5nIHRvIHRoZSBiaXQgYWJvdmUgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgMS1iaXQg
b2YKKyAgICAgICAgLy8gcG93ZXJfZXhwb25lbnQuCisgICAgICAgIC8vIEdldCByaWQgb2YgZmly
c3QgMS1iaXQ7CisgICAgICAgIG1hc2sgPj49IDI7CisgICAgICAgIHVpbnQ2NF90IHRoaXNfdmFs
dWUgPSBiYXNlOworICAgICAgICAKKyAgICAgICAgYm9vbCBkZWxheWVkX211bHRpcGxpY2lhdGlv
biA9IGZhbHNlOworICAgICAgICBjb25zdCB1aW50NjRfdCBtYXhfMzJiaXRzID0gMHhGRkZGRkZG
RjsKKyAgICAgICAgd2hpbGUgKG1hc2sgIT0gMCAmJiB0aGlzX3ZhbHVlIDw9IG1heF8zMmJpdHMp
IHsKKyAgICAgICAgICAgIHRoaXNfdmFsdWUgPSB0aGlzX3ZhbHVlICogdGhpc192YWx1ZTsKKyAg
ICAgICAgICAgIC8vIFZlcmlmeSB0aGF0IHRoZXJlIGlzIGVub3VnaCBzcGFjZSBpbiB0aGlzX3Zh
bHVlIHRvIHBlcmZvcm0gdGhlCisgICAgICAgICAgICAvLyBtdWx0aXBsaWNhdGlvbi4gIFRoZSBm
aXJzdCBiaXRfc2l6ZSBiaXRzIG11c3QgYmUgMC4KKyAgICAgICAgICAgIGlmICgocG93ZXJfZXhw
b25lbnQgJiBtYXNrKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgdWludDY0X3QgYmFzZV9iaXRz
X21hc2sgPQorICAgICAgICAgICAgICAgIH4oKHN0YXRpY19jYXN0PHVpbnQ2NF90PigxKSA8PCAo
NjQgLSBiaXRfc2l6ZSkpIC0gMSk7CisgICAgICAgICAgICAgICAgYm9vbCBoaWdoX2JpdHNfemVy
byA9ICh0aGlzX3ZhbHVlICYgYmFzZV9iaXRzX21hc2spID09IDA7CisgICAgICAgICAgICAgICAg
aWYgKGhpZ2hfYml0c196ZXJvKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXNfdmFsdWUgKj0g
YmFzZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBkZWxh
eWVkX211bHRpcGxpY2lhdGlvbiA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgbWFzayA+Pj0gMTsKKyAgICAgICAgfQorICAgICAgICBBc3NpZ25V
SW50NjQodGhpc192YWx1ZSk7CisgICAgICAgIGlmIChkZWxheWVkX211bHRpcGxpY2lhdGlvbikg
eworICAgICAgICAgICAgTXVsdGlwbHlCeVVJbnQzMihiYXNlKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgLy8gTm93IGRvIHRoZSBzYW1lIHRoaW5nIGFzIGEgYmlnbnVtLgorICAgICAg
ICB3aGlsZSAobWFzayAhPSAwKSB7CisgICAgICAgICAgICBTcXVhcmUoKTsKKyAgICAgICAgICAg
IGlmICgocG93ZXJfZXhwb25lbnQgJiBtYXNrKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgTXVs
dGlwbHlCeVVJbnQzMihiYXNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1hc2sgPj49
IDE7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEFuZCBmaW5hbGx5IGFkZCB0aGUg
c2F2ZWQgc2hpZnRzLgorICAgICAgICBTaGlmdExlZnQoc2hpZnRzICogcG93ZXJfZXhwb25lbnQp
OworICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBQcmVjb25kaXRpb246IHRoaXMvb3RoZXIgPCAx
NmJpdC4KKyAgICB1aW50MTZfdCBCaWdudW06OkRpdmlkZU1vZHVsb0ludEJpZ251bShjb25zdCBC
aWdudW0mIG90aGVyKSB7CisgICAgICAgIEFTU0VSVChJc0NsYW1wZWQoKSk7CisgICAgICAgIEFT
U0VSVChvdGhlci5Jc0NsYW1wZWQoKSk7CisgICAgICAgIEFTU0VSVChvdGhlci51c2VkX2RpZ2l0
c18gPiAwKTsKKyAgICAgICAgCisgICAgICAgIC8vIEVhc3kgY2FzZTogaWYgd2UgaGF2ZSBsZXNz
IGRpZ2l0cyB0aGFuIHRoZSBkaXZpc29yIHRoYW4gdGhlIHJlc3VsdCBpcyAwLgorICAgICAgICAv
LyBOb3RlOiB0aGlzIGhhbmRsZXMgdGhlIGNhc2Ugd2hlcmUgdGhpcyA9PSAwLCB0b28uCisgICAg
ICAgIGlmIChCaWdpdExlbmd0aCgpIDwgb3RoZXIuQmlnaXRMZW5ndGgoKSkgeworICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFsaWduKG90aGVyKTsK
KyAgICAgICAgCisgICAgICAgIHVpbnQxNl90IHJlc3VsdCA9IDA7CisgICAgICAgIAorICAgICAg
ICAvLyBTdGFydCBieSByZW1vdmluZyBtdWx0aXBsZXMgb2YgJ290aGVyJyB1bnRpbCBib3RoIG51
bWJlcnMgaGF2ZSB0aGUgc2FtZQorICAgICAgICAvLyBudW1iZXIgb2YgZGlnaXRzLgorICAgICAg
ICB3aGlsZSAoQmlnaXRMZW5ndGgoKSA+IG90aGVyLkJpZ2l0TGVuZ3RoKCkpIHsKKyAgICAgICAg
ICAgIC8vIFRoaXMgbmFpdmUgYXBwcm9hY2ggaXMgZXh0cmVtZWx5IGluZWZmaWNpZW50IGlmIHRo
ZSB0aGlzIGRpdmlkZWQgb3RoZXIKKyAgICAgICAgICAgIC8vIG1pZ2h0IGJlIGJpZy4gVGhpcyBm
dW5jdGlvbiBpcyBpbXBsZW1lbnRlZCBmb3IgZG91YmxlVG9TdHJpbmcgd2hlcmUKKyAgICAgICAg
ICAgIC8vIHRoZSByZXN1bHQgc2hvdWxkIGJlIHNtYWxsIChsZXNzIHRoYW4gMTApLgorICAgICAg
ICAgICAgQVNTRVJUKG90aGVyLmJpZ2l0c19bb3RoZXIudXNlZF9kaWdpdHNfIC0gMV0gPj0gKCgx
IDw8IGtCaWdpdFNpemUpIC8gMTYpKTsKKyAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgbXVsdGlw
bGVzIG9mIHRoZSBmaXJzdCBkaWdpdC4KKyAgICAgICAgICAgIC8vIEV4YW1wbGUgdGhpcyA9IDIz
IGFuZCBvdGhlciBlcXVhbHMgOS4gLT4gUmVtb3ZlIDIgbXVsdGlwbGVzLgorICAgICAgICAgICAg
cmVzdWx0ICs9IGJpZ2l0c19bdXNlZF9kaWdpdHNfIC0gMV07CisgICAgICAgICAgICBTdWJ0cmFj
dFRpbWVzKG90aGVyLCBiaWdpdHNfW3VzZWRfZGlnaXRzXyAtIDFdKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgQVNTRVJUKEJpZ2l0TGVuZ3RoKCkgPT0gb3RoZXIuQmlnaXRMZW5ndGgo
KSk7CisgICAgICAgIAorICAgICAgICAvLyBCb3RoIGJpZ251bXMgYXJlIGF0IHRoZSBzYW1lIGxl
bmd0aCBub3cuCisgICAgICAgIC8vIFNpbmNlIG90aGVyIGhhcyBtb3JlIHRoYW4gMCBkaWdpdHMg
d2Uga25vdyB0aGF0IHRoZSBhY2Nlc3MgdG8KKyAgICAgICAgLy8gYmlnaXRzX1t1c2VkX2RpZ2l0
c18gLSAxXSBpcyBzYWZlLgorICAgICAgICBDaHVuayB0aGlzX2JpZ2l0ID0gYmlnaXRzX1t1c2Vk
X2RpZ2l0c18gLSAxXTsKKyAgICAgICAgQ2h1bmsgb3RoZXJfYmlnaXQgPSBvdGhlci5iaWdpdHNf
W290aGVyLnVzZWRfZGlnaXRzXyAtIDFdOworICAgICAgICAKKyAgICAgICAgaWYgKG90aGVyLnVz
ZWRfZGlnaXRzXyA9PSAxKSB7CisgICAgICAgICAgICAvLyBTaG9ydGN1dCBmb3IgZWFzeSAoYW5k
IGNvbW1vbikgY2FzZS4KKyAgICAgICAgICAgIGludCBxdW90aWVudCA9IHRoaXNfYmlnaXQgLyBv
dGhlcl9iaWdpdDsKKyAgICAgICAgICAgIGJpZ2l0c19bdXNlZF9kaWdpdHNfIC0gMV0gPSB0aGlz
X2JpZ2l0IC0gb3RoZXJfYmlnaXQgKiBxdW90aWVudDsKKyAgICAgICAgICAgIHJlc3VsdCArPSBx
dW90aWVudDsKKyAgICAgICAgICAgIENsYW1wKCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpbnQgZGl2aXNpb25fZXN0aW1hdGUgPSB0
aGlzX2JpZ2l0IC8gKG90aGVyX2JpZ2l0ICsgMSk7CisgICAgICAgIHJlc3VsdCArPSBkaXZpc2lv
bl9lc3RpbWF0ZTsKKyAgICAgICAgU3VidHJhY3RUaW1lcyhvdGhlciwgZGl2aXNpb25fZXN0aW1h
dGUpOworICAgICAgICAKKyAgICAgICAgaWYgKG90aGVyX2JpZ2l0ICogKGRpdmlzaW9uX2VzdGlt
YXRlICsgMSkgPiB0aGlzX2JpZ2l0KSB7CisgICAgICAgICAgICAvLyBObyBuZWVkIHRvIGV2ZW4g
dHJ5IHRvIHN1YnRyYWN0LiBFdmVuIGlmIG90aGVyJ3MgcmVtYWluaW5nIGRpZ2l0cyB3ZXJlIDAK
KyAgICAgICAgICAgIC8vIGFub3RoZXIgc3VidHJhY3Rpb24gd291bGQgYmUgdG9vIG11Y2guCisg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB3
aGlsZSAoTGVzc0VxdWFsKG90aGVyLCAqdGhpcykpIHsKKyAgICAgICAgICAgIFN1YnRyYWN0Qmln
bnVtKG90aGVyKTsKKyAgICAgICAgICAgIHJlc3VsdCsrOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFM+
CisgICAgc3RhdGljIGludCBTaXplSW5IZXhDaGFycyhTIG51bWJlcikgeworICAgICAgICBBU1NF
UlQobnVtYmVyID4gMCk7CisgICAgICAgIGludCByZXN1bHQgPSAwOworICAgICAgICB3aGlsZSAo
bnVtYmVyICE9IDApIHsKKyAgICAgICAgICAgIG51bWJlciA+Pj0gNDsKKyAgICAgICAgICAgIHJl
c3VsdCsrOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAor
ICAgIAorICAgIHN0YXRpYyBjaGFyIEhleENoYXJPZlZhbHVlKGludCB2YWx1ZSkgeworICAgICAg
ICBBU1NFUlQoMCA8PSB2YWx1ZSAmJiB2YWx1ZSA8PSAxNik7CisgICAgICAgIGlmICh2YWx1ZSA8
IDEwKSByZXR1cm4gdmFsdWUgKyAnMCc7CisgICAgICAgIHJldHVybiB2YWx1ZSAtIDEwICsgJ0En
OworICAgIH0KKyAgICAKKyAgICAKKyAgICBib29sIEJpZ251bTo6VG9IZXhTdHJpbmcoY2hhciog
YnVmZmVyLCBpbnQgYnVmZmVyX3NpemUpIGNvbnN0IHsKKyAgICAgICAgQVNTRVJUKElzQ2xhbXBl
ZCgpKTsKKyAgICAgICAgLy8gRWFjaCBiaWdpdCBtdXN0IGJlIHByaW50YWJsZSBhcyBzZXBhcmF0
ZSBoZXgtY2hhcmFjdGVyLgorICAgICAgICBBU1NFUlQoa0JpZ2l0U2l6ZSAlIDQgPT0gMCk7Cisg
ICAgICAgIGNvbnN0IGludCBrSGV4Q2hhcnNQZXJCaWdpdCA9IGtCaWdpdFNpemUgLyA0OworICAg
ICAgICAKKyAgICAgICAgaWYgKHVzZWRfZGlnaXRzXyA9PSAwKSB7CisgICAgICAgICAgICBpZiAo
YnVmZmVyX3NpemUgPCAyKSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBidWZmZXJbMF0gPSAn
MCc7CisgICAgICAgICAgICBidWZmZXJbMV0gPSAnXDAnOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gV2UgYWRkIDEgZm9yIHRoZSB0ZXJtaW5hdGluZyAn
XDAnIGNoYXJhY3Rlci4KKyAgICAgICAgaW50IG5lZWRlZF9jaGFycyA9IChCaWdpdExlbmd0aCgp
IC0gMSkgKiBrSGV4Q2hhcnNQZXJCaWdpdCArCisgICAgICAgIFNpemVJbkhleENoYXJzKGJpZ2l0
c19bdXNlZF9kaWdpdHNfIC0gMV0pICsgMTsKKyAgICAgICAgaWYgKG5lZWRlZF9jaGFycyA+IGJ1
ZmZlcl9zaXplKSByZXR1cm4gZmFsc2U7CisgICAgICAgIGludCBzdHJpbmdfaW5kZXggPSBuZWVk
ZWRfY2hhcnMgLSAxOworICAgICAgICBidWZmZXJbc3RyaW5nX2luZGV4LS1dID0gJ1wwJzsKKyAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHBvbmVudF87ICsraSkgeworICAgICAgICAgICAg
Zm9yIChpbnQgaiA9IDA7IGogPCBrSGV4Q2hhcnNQZXJCaWdpdDsgKytqKSB7CisgICAgICAgICAg
ICAgICAgYnVmZmVyW3N0cmluZ19pbmRleC0tXSA9ICcwJzsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHVzZWRfZGlnaXRzXyAtIDE7ICsraSkg
eworICAgICAgICAgICAgQ2h1bmsgY3VycmVudF9iaWdpdCA9IGJpZ2l0c19baV07CisgICAgICAg
ICAgICBmb3IgKGludCBqID0gMDsgaiA8IGtIZXhDaGFyc1BlckJpZ2l0OyArK2opIHsKKyAgICAg
ICAgICAgICAgICBidWZmZXJbc3RyaW5nX2luZGV4LS1dID0gSGV4Q2hhck9mVmFsdWUoY3VycmVu
dF9iaWdpdCAmIDB4Rik7CisgICAgICAgICAgICAgICAgY3VycmVudF9iaWdpdCA+Pj0gNDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBBbmQgZmluYWxseSB0aGUgbGFzdCBi
aWdpdC4KKyAgICAgICAgQ2h1bmsgbW9zdF9zaWduaWZpY2FudF9iaWdpdCA9IGJpZ2l0c19bdXNl
ZF9kaWdpdHNfIC0gMV07CisgICAgICAgIHdoaWxlIChtb3N0X3NpZ25pZmljYW50X2JpZ2l0ICE9
IDApIHsKKyAgICAgICAgICAgIGJ1ZmZlcltzdHJpbmdfaW5kZXgtLV0gPSBIZXhDaGFyT2ZWYWx1
ZShtb3N0X3NpZ25pZmljYW50X2JpZ2l0ICYgMHhGKTsKKyAgICAgICAgICAgIG1vc3Rfc2lnbmlm
aWNhbnRfYmlnaXQgPj49IDQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIAorICAgIAorICAgIEJpZ251bTo6Q2h1bmsgQmlnbnVtOjpCaWdpdEF0KGludCBpbmRl
eCkgY29uc3QgeworICAgICAgICBpZiAoaW5kZXggPj0gQmlnaXRMZW5ndGgoKSkgcmV0dXJuIDA7
CisgICAgICAgIGlmIChpbmRleCA8IGV4cG9uZW50XykgcmV0dXJuIDA7CisgICAgICAgIHJldHVy
biBiaWdpdHNfW2luZGV4IC0gZXhwb25lbnRfXTsKKyAgICB9CisgICAgCisgICAgCisgICAgaW50
IEJpZ251bTo6Q29tcGFyZShjb25zdCBCaWdudW0mIGEsIGNvbnN0IEJpZ251bSYgYikgeworICAg
ICAgICBBU1NFUlQoYS5Jc0NsYW1wZWQoKSk7CisgICAgICAgIEFTU0VSVChiLklzQ2xhbXBlZCgp
KTsKKyAgICAgICAgaW50IGJpZ2l0X2xlbmd0aF9hID0gYS5CaWdpdExlbmd0aCgpOworICAgICAg
ICBpbnQgYmlnaXRfbGVuZ3RoX2IgPSBiLkJpZ2l0TGVuZ3RoKCk7CisgICAgICAgIGlmIChiaWdp
dF9sZW5ndGhfYSA8IGJpZ2l0X2xlbmd0aF9iKSByZXR1cm4gLTE7CisgICAgICAgIGlmIChiaWdp
dF9sZW5ndGhfYSA+IGJpZ2l0X2xlbmd0aF9iKSByZXR1cm4gKzE7CisgICAgICAgIGZvciAoaW50
IGkgPSBiaWdpdF9sZW5ndGhfYSAtIDE7IGkgPj0gTWluKGEuZXhwb25lbnRfLCBiLmV4cG9uZW50
Xyk7IC0taSkgeworICAgICAgICAgICAgQ2h1bmsgYmlnaXRfYSA9IGEuQmlnaXRBdChpKTsKKyAg
ICAgICAgICAgIENodW5rIGJpZ2l0X2IgPSBiLkJpZ2l0QXQoaSk7CisgICAgICAgICAgICBpZiAo
YmlnaXRfYSA8IGJpZ2l0X2IpIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlmIChiaWdpdF9hID4g
YmlnaXRfYikgcmV0dXJuICsxOworICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHRoZXkgYXJlIGVx
dWFsIHVwIHRvIHRoaXMgZGlnaXQuIFRyeSB0aGUgbmV4dCBkaWdpdC4KKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgCisgICAgaW50IEJpZ251bTo6UGx1c0Nv
bXBhcmUoY29uc3QgQmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIsIGNvbnN0IEJpZ251bSYgYykg
eworICAgICAgICBBU1NFUlQoYS5Jc0NsYW1wZWQoKSk7CisgICAgICAgIEFTU0VSVChiLklzQ2xh
bXBlZCgpKTsKKyAgICAgICAgQVNTRVJUKGMuSXNDbGFtcGVkKCkpOworICAgICAgICBpZiAoYS5C
aWdpdExlbmd0aCgpIDwgYi5CaWdpdExlbmd0aCgpKSB7CisgICAgICAgICAgICByZXR1cm4gUGx1
c0NvbXBhcmUoYiwgYSwgYyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGEuQmlnaXRMZW5ndGgo
KSArIDEgPCBjLkJpZ2l0TGVuZ3RoKCkpIHJldHVybiAtMTsKKyAgICAgICAgaWYgKGEuQmlnaXRM
ZW5ndGgoKSA+IGMuQmlnaXRMZW5ndGgoKSkgcmV0dXJuICsxOworICAgICAgICAvLyBUaGUgZXhw
b25lbnQgZW5jb2RlcyAwLWJpZ2l0cy4gU28gaWYgdGhlcmUgYXJlIG1vcmUgMC1kaWdpdHMgaW4g
J2EnIHRoYW4KKyAgICAgICAgLy8gJ2InIGhhcyBkaWdpdHMsIHRoZW4gdGhlIGJpZ2l0LWxlbmd0
aCBvZiAnYScrJ2InIG11c3QgYmUgZXF1YWwgdG8gdGhlIG9uZQorICAgICAgICAvLyBvZiAnYScu
CisgICAgICAgIGlmIChhLmV4cG9uZW50XyA+PSBiLkJpZ2l0TGVuZ3RoKCkgJiYgYS5CaWdpdExl
bmd0aCgpIDwgYy5CaWdpdExlbmd0aCgpKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIENodW5rIGJvcnJvdyA9IDA7CisgICAgICAgIC8vIFN0
YXJ0aW5nIGF0IG1pbl9leHBvbmVudCBhbGwgZGlnaXRzIGFyZSA9PSAwLiBTbyBubyBuZWVkIHRv
IGNvbXBhcmUgdGhlbS4KKyAgICAgICAgaW50IG1pbl9leHBvbmVudCA9IE1pbihNaW4oYS5leHBv
bmVudF8sIGIuZXhwb25lbnRfKSwgYy5leHBvbmVudF8pOworICAgICAgICBmb3IgKGludCBpID0g
Yy5CaWdpdExlbmd0aCgpIC0gMTsgaSA+PSBtaW5fZXhwb25lbnQ7IC0taSkgeworICAgICAgICAg
ICAgQ2h1bmsgY2h1bmtfYSA9IGEuQmlnaXRBdChpKTsKKyAgICAgICAgICAgIENodW5rIGNodW5r
X2IgPSBiLkJpZ2l0QXQoaSk7CisgICAgICAgICAgICBDaHVuayBjaHVua19jID0gYy5CaWdpdEF0
KGkpOworICAgICAgICAgICAgQ2h1bmsgc3VtID0gY2h1bmtfYSArIGNodW5rX2I7CisgICAgICAg
ICAgICBpZiAoc3VtID4gY2h1bmtfYyArIGJvcnJvdykgeworICAgICAgICAgICAgICAgIHJldHVy
biArMTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYm9ycm93ID0gY2h1
bmtfYyArIGJvcnJvdyAtIHN1bTsKKyAgICAgICAgICAgICAgICBpZiAoYm9ycm93ID4gMSkgcmV0
dXJuIC0xOworICAgICAgICAgICAgICAgIGJvcnJvdyA8PD0ga0JpZ2l0U2l6ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoYm9ycm93ID09IDApIHJldHVybiAwOworICAg
ICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpDbGFt
cCgpIHsKKyAgICAgICAgd2hpbGUgKHVzZWRfZGlnaXRzXyA+IDAgJiYgYmlnaXRzX1t1c2VkX2Rp
Z2l0c18gLSAxXSA9PSAwKSB7CisgICAgICAgICAgICB1c2VkX2RpZ2l0c18tLTsKKyAgICAgICAg
fQorICAgICAgICBpZiAodXNlZF9kaWdpdHNfID09IDApIHsKKyAgICAgICAgICAgIC8vIFplcm8u
CisgICAgICAgICAgICBleHBvbmVudF8gPSAwOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IAorICAgIGJvb2wgQmlnbnVtOjpJc0NsYW1wZWQoKSBjb25zdCB7CisgICAgICAgIHJldHVybiB1
c2VkX2RpZ2l0c18gPT0gMCB8fCBiaWdpdHNfW3VzZWRfZGlnaXRzXyAtIDFdICE9IDA7CisgICAg
fQorICAgIAorICAgIAorICAgIHZvaWQgQmlnbnVtOjpaZXJvKCkgeworICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHVzZWRfZGlnaXRzXzsgKytpKSB7CisgICAgICAgICAgICBiaWdpdHNfW2ld
ID0gMDsKKyAgICAgICAgfQorICAgICAgICB1c2VkX2RpZ2l0c18gPSAwOworICAgICAgICBleHBv
bmVudF8gPSAwOworICAgIH0KKyAgICAKKyAgICAKKyAgICB2b2lkIEJpZ251bTo6QWxpZ24oY29u
c3QgQmlnbnVtJiBvdGhlcikgeworICAgICAgICBpZiAoZXhwb25lbnRfID4gb3RoZXIuZXhwb25l
bnRfKSB7CisgICAgICAgICAgICAvLyBJZiAiWCIgcmVwcmVzZW50cyBhICJoaWRkZW4iIGRpZ2l0
IChieSB0aGUgZXhwb25lbnQpIHRoZW4gd2UgYXJlIGluIHRoZQorICAgICAgICAgICAgLy8gZm9s
bG93aW5nIGNhc2UgKGEgPT0gdGhpcywgYiA9PSBvdGhlcik6CisgICAgICAgICAgICAvLyBhOiAg
YWFhYWFhWFhYWCAgIG9yIGE6ICAgYWFhYWFYWFgKKyAgICAgICAgICAgIC8vIGI6ICAgICBiYmJi
YmJYICAgICAgYjogYmJiYmJiYmJYWAorICAgICAgICAgICAgLy8gV2UgcmVwbGFjZSBzb21lIG9m
IHRoZSBoaWRkZW4gZGlnaXRzIChYKSBvZiBhIHdpdGggMCBkaWdpdHMuCisgICAgICAgICAgICAv
LyBhOiAgYWFhYWFhMDAwWCAgIG9yIGE6ICAgYWFhYWEwWFgKKyAgICAgICAgICAgIGludCB6ZXJv
X2RpZ2l0cyA9IGV4cG9uZW50XyAtIG90aGVyLmV4cG9uZW50XzsKKyAgICAgICAgICAgIEVuc3Vy
ZUNhcGFjaXR5KHVzZWRfZGlnaXRzXyArIHplcm9fZGlnaXRzKTsKKyAgICAgICAgICAgIGZvciAo
aW50IGkgPSB1c2VkX2RpZ2l0c18gLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICAgICAgICAg
IGJpZ2l0c19baSArIHplcm9fZGlnaXRzXSA9IGJpZ2l0c19baV07CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHplcm9fZGlnaXRzOyArK2kpIHsKKyAgICAg
ICAgICAgICAgICBiaWdpdHNfW2ldID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHVz
ZWRfZGlnaXRzXyArPSB6ZXJvX2RpZ2l0czsKKyAgICAgICAgICAgIGV4cG9uZW50XyAtPSB6ZXJv
X2RpZ2l0czsKKyAgICAgICAgICAgIEFTU0VSVCh1c2VkX2RpZ2l0c18gPj0gMCk7CisgICAgICAg
ICAgICBBU1NFUlQoZXhwb25lbnRfID49IDApOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IAorICAgIHZvaWQgQmlnbnVtOjpCaWdpdHNTaGlmdExlZnQoaW50IHNoaWZ0X2Ftb3VudCkgewor
ICAgICAgICBBU1NFUlQoc2hpZnRfYW1vdW50IDwga0JpZ2l0U2l6ZSk7CisgICAgICAgIEFTU0VS
VChzaGlmdF9hbW91bnQgPj0gMCk7CisgICAgICAgIENodW5rIGNhcnJ5ID0gMDsKKyAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCB1c2VkX2RpZ2l0c187ICsraSkgeworICAgICAgICAgICAgQ2h1
bmsgbmV3X2NhcnJ5ID0gYmlnaXRzX1tpXSA+PiAoa0JpZ2l0U2l6ZSAtIHNoaWZ0X2Ftb3VudCk7
CisgICAgICAgICAgICBiaWdpdHNfW2ldID0gKChiaWdpdHNfW2ldIDw8IHNoaWZ0X2Ftb3VudCkg
KyBjYXJyeSkgJiBrQmlnaXRNYXNrOworICAgICAgICAgICAgY2FycnkgPSBuZXdfY2Fycnk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGNhcnJ5ICE9IDApIHsKKyAgICAgICAgICAgIGJpZ2l0c19b
dXNlZF9kaWdpdHNfXSA9IGNhcnJ5OworICAgICAgICAgICAgdXNlZF9kaWdpdHNfKys7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBCaWdudW06OlN1YnRyYWN0VGltZXMo
Y29uc3QgQmlnbnVtJiBvdGhlciwgaW50IGZhY3RvcikgeworICAgICAgICBBU1NFUlQoZXhwb25l
bnRfIDw9IG90aGVyLmV4cG9uZW50Xyk7CisgICAgICAgIGlmIChmYWN0b3IgPCAzKSB7CisgICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZhY3RvcjsgKytpKSB7CisgICAgICAgICAgICAg
ICAgU3VidHJhY3RCaWdudW0ob3RoZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIENodW5rIGJvcnJvdyA9IDA7CisgICAgICAgIGludCBl
eHBvbmVudF9kaWZmID0gb3RoZXIuZXhwb25lbnRfIC0gZXhwb25lbnRfOworICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG90aGVyLnVzZWRfZGlnaXRzXzsgKytpKSB7CisgICAgICAgICAgICBE
b3VibGVDaHVuayBwcm9kdWN0ID0gc3RhdGljX2Nhc3Q8RG91YmxlQ2h1bms+KGZhY3RvcikgKiBv
dGhlci5iaWdpdHNfW2ldOworICAgICAgICAgICAgRG91YmxlQ2h1bmsgcmVtb3ZlID0gYm9ycm93
ICsgcHJvZHVjdDsKKyAgICAgICAgICAgIENodW5rIGRpZmZlcmVuY2UgPSBiaWdpdHNfW2kgKyBl
eHBvbmVudF9kaWZmXSAtIChyZW1vdmUgJiBrQmlnaXRNYXNrKTsKKyAgICAgICAgICAgIGJpZ2l0
c19baSArIGV4cG9uZW50X2RpZmZdID0gZGlmZmVyZW5jZSAmIGtCaWdpdE1hc2s7CisgICAgICAg
ICAgICBib3Jyb3cgPSBzdGF0aWNfY2FzdDxDaHVuaz4oKGRpZmZlcmVuY2UgPj4gKGtDaHVua1Np
emUgLSAxKSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZW1v
dmUgPj4ga0JpZ2l0U2l6ZSkpOworICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGkgPSBvdGhl
ci51c2VkX2RpZ2l0c18gKyBleHBvbmVudF9kaWZmOyBpIDwgdXNlZF9kaWdpdHNfOyArK2kpIHsK
KyAgICAgICAgICAgIGlmIChib3Jyb3cgPT0gMCkgcmV0dXJuOworICAgICAgICAgICAgQ2h1bmsg
ZGlmZmVyZW5jZSA9IGJpZ2l0c19baV0gLSBib3Jyb3c7CisgICAgICAgICAgICBiaWdpdHNfW2ld
ID0gZGlmZmVyZW5jZSAmIGtCaWdpdE1hc2s7CisgICAgICAgICAgICBib3Jyb3cgPSBkaWZmZXJl
bmNlID4+IChrQ2h1bmtTaXplIC0gMSk7CisgICAgICAgICAgICArK2k7CisgICAgICAgIH0KKyAg
ICAgICAgQ2xhbXAoKTsKKyAgICB9CisgICAgCisgICAgCit9ICAvLyBuYW1lc3BhY2UgZG91Ymxl
X2NvbnZlcnNpb24KKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL2R0b2EvYmlnbnVtLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L2R0b2EvYmlnbnVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWE3NTA1ODFhYTc5NzIyOWU3ODg3OTlhMmIwYjI1
YjlmZDI0OGRiMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
ZHRvYS9iaWdudW0uaApAQCAtMCwwICsxLDE0NSBAQAorLy8gQ29weXJpZ2h0IDIwMTAgdGhlIFY4
IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8g
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8v
CisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisjaWZuZGVmIERPVUJMRV9DT05WRVJTSU9OX0JJR05VTV9IXworI2RlZmluZSBET1VCTEVf
Q09OVkVSU0lPTl9CSUdOVU1fSF8KKworI2luY2x1ZGUgInV0aWxzLmgiCisKK25hbWVzcGFjZSBX
VEYgeworCituYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIGNsYXNzIEJp
Z251bSB7CisgICAgcHVibGljOgorICAgICAgICAvLyAzNTg0ID0gMTI4ICogMjguIFdlIGNhbiBy
ZXByZXNlbnQgMl4zNTg0ID4gMTBeMTAwMCBhY2N1cmF0ZWx5LgorICAgICAgICAvLyBUaGlzIGJp
Z251bSBjYW4gZW5jb2RlIG11Y2ggYmlnZ2VyIG51bWJlcnMsIHNpbmNlIGl0IGNvbnRhaW5zIGFu
CisgICAgICAgIC8vIGV4cG9uZW50LgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtNYXhTaWdu
aWZpY2FudEJpdHMgPSAzNTg0OworICAgICAgICAKKyAgICAgICAgQmlnbnVtKCk7CisgICAgICAg
IHZvaWQgQXNzaWduVUludDE2KHVpbnQxNl90IHZhbHVlKTsKKyAgICAgICAgdm9pZCBBc3NpZ25V
SW50NjQodWludDY0X3QgdmFsdWUpOworICAgICAgICB2b2lkIEFzc2lnbkJpZ251bShjb25zdCBC
aWdudW0mIG90aGVyKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgQXNzaWduRGVjaW1hbFN0cmlu
ZyhWZWN0b3I8Y29uc3QgY2hhcj4gdmFsdWUpOworICAgICAgICB2b2lkIEFzc2lnbkhleFN0cmlu
ZyhWZWN0b3I8Y29uc3QgY2hhcj4gdmFsdWUpOworICAgICAgICAKKyAgICAgICAgdm9pZCBBc3Np
Z25Qb3dlclVJbnQxNih1aW50MTZfdCBiYXNlLCBpbnQgZXhwb25lbnQpOworICAgICAgICAKKyAg
ICAgICAgdm9pZCBBZGRVSW50MTYodWludDE2X3Qgb3BlcmFuZCk7CisgICAgICAgIHZvaWQgQWRk
VUludDY0KHVpbnQ2NF90IG9wZXJhbmQpOworICAgICAgICB2b2lkIEFkZEJpZ251bShjb25zdCBC
aWdudW0mIG90aGVyKTsKKyAgICAgICAgLy8gUHJlY29uZGl0aW9uOiB0aGlzID49IG90aGVyLgor
ICAgICAgICB2b2lkIFN1YnRyYWN0QmlnbnVtKGNvbnN0IEJpZ251bSYgb3RoZXIpOworICAgICAg
ICAKKyAgICAgICAgdm9pZCBTcXVhcmUoKTsKKyAgICAgICAgdm9pZCBTaGlmdExlZnQoaW50IHNo
aWZ0X2Ftb3VudCk7CisgICAgICAgIHZvaWQgTXVsdGlwbHlCeVVJbnQzMih1aW50MzJfdCBmYWN0
b3IpOworICAgICAgICB2b2lkIE11bHRpcGx5QnlVSW50NjQodWludDY0X3QgZmFjdG9yKTsKKyAg
ICAgICAgdm9pZCBNdWx0aXBseUJ5UG93ZXJPZlRlbihpbnQgZXhwb25lbnQpOworICAgICAgICB2
b2lkIFRpbWVzMTAoKSB7IHJldHVybiBNdWx0aXBseUJ5VUludDMyKDEwKTsgfQorICAgICAgICAv
LyBQc2V1ZG9jb2RlOgorICAgICAgICAvLyAgaW50IHJlc3VsdCA9IHRoaXMgLyBvdGhlcjsKKyAg
ICAgICAgLy8gIHRoaXMgPSB0aGlzICUgb3RoZXI7CisgICAgICAgIC8vIEluIHRoZSB3b3JzdCBj
YXNlIHRoaXMgZnVuY3Rpb24gaXMgaW4gTyh0aGlzL290aGVyKS4KKyAgICAgICAgdWludDE2X3Qg
RGl2aWRlTW9kdWxvSW50QmlnbnVtKGNvbnN0IEJpZ251bSYgb3RoZXIpOworICAgICAgICAKKyAg
ICAgICAgYm9vbCBUb0hleFN0cmluZyhjaGFyKiBidWZmZXIsIGludCBidWZmZXJfc2l6ZSkgY29u
c3Q7CisgICAgICAgIAorICAgICAgICBzdGF0aWMgaW50IENvbXBhcmUoY29uc3QgQmlnbnVtJiBh
LCBjb25zdCBCaWdudW0mIGIpOworICAgICAgICBzdGF0aWMgYm9vbCBFcXVhbChjb25zdCBCaWdu
dW0mIGEsIGNvbnN0IEJpZ251bSYgYikgeworICAgICAgICAgICAgcmV0dXJuIENvbXBhcmUoYSwg
YikgPT0gMDsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMgYm9vbCBMZXNzRXF1YWwoY29uc3Qg
QmlnbnVtJiBhLCBjb25zdCBCaWdudW0mIGIpIHsKKyAgICAgICAgICAgIHJldHVybiBDb21wYXJl
KGEsIGIpIDw9IDA7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIGJvb2wgTGVzcyhjb25zdCBC
aWdudW0mIGEsIGNvbnN0IEJpZ251bSYgYikgeworICAgICAgICAgICAgcmV0dXJuIENvbXBhcmUo
YSwgYikgPCAwOworICAgICAgICB9CisgICAgICAgIC8vIFJldHVybnMgQ29tcGFyZShhICsgYiwg
Yyk7CisgICAgICAgIHN0YXRpYyBpbnQgUGx1c0NvbXBhcmUoY29uc3QgQmlnbnVtJiBhLCBjb25z
dCBCaWdudW0mIGIsIGNvbnN0IEJpZ251bSYgYyk7CisgICAgICAgIC8vIFJldHVybnMgYSArIGIg
PT0gYworICAgICAgICBzdGF0aWMgYm9vbCBQbHVzRXF1YWwoY29uc3QgQmlnbnVtJiBhLCBjb25z
dCBCaWdudW0mIGIsIGNvbnN0IEJpZ251bSYgYykgeworICAgICAgICAgICAgcmV0dXJuIFBsdXND
b21wYXJlKGEsIGIsIGMpID09IDA7CisgICAgICAgIH0KKyAgICAgICAgLy8gUmV0dXJucyBhICsg
YiA8PSBjCisgICAgICAgIHN0YXRpYyBib29sIFBsdXNMZXNzRXF1YWwoY29uc3QgQmlnbnVtJiBh
LCBjb25zdCBCaWdudW0mIGIsIGNvbnN0IEJpZ251bSYgYykgeworICAgICAgICAgICAgcmV0dXJu
IFBsdXNDb21wYXJlKGEsIGIsIGMpIDw9IDA7CisgICAgICAgIH0KKyAgICAgICAgLy8gUmV0dXJu
cyBhICsgYiA8IGMKKyAgICAgICAgc3RhdGljIGJvb2wgUGx1c0xlc3MoY29uc3QgQmlnbnVtJiBh
LCBjb25zdCBCaWdudW0mIGIsIGNvbnN0IEJpZ251bSYgYykgeworICAgICAgICAgICAgcmV0dXJu
IFBsdXNDb21wYXJlKGEsIGIsIGMpIDwgMDsKKyAgICAgICAgfQorICAgIHByaXZhdGU6CisgICAg
ICAgIHR5cGVkZWYgdWludDMyX3QgQ2h1bms7CisgICAgICAgIHR5cGVkZWYgdWludDY0X3QgRG91
YmxlQ2h1bms7CisgICAgICAgIAorICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtDaHVua1NpemUg
PSBzaXplb2YoQ2h1bmspICogODsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBrRG91YmxlQ2h1
bmtTaXplID0gc2l6ZW9mKERvdWJsZUNodW5rKSAqIDg7CisgICAgICAgIC8vIFdpdGggYmlnaXQg
c2l6ZSBvZiAyOCB3ZSBsb29zZSBzb21lIGJpdHMsIGJ1dCBhIGRvdWJsZSBzdGlsbCBmaXRzIGVh
c2lseQorICAgICAgICAvLyBpbnRvIHR3byBjaHVua3MsIGFuZCBtb3JlIGltcG9ydGFudGx5IHdl
IGNhbiB1c2UgdGhlIENvbWJhIG11bHRpcGxpY2F0aW9uLgorICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IGtCaWdpdFNpemUgPSAyODsKKyAgICAgICAgc3RhdGljIGNvbnN0IENodW5rIGtCaWdpdE1h
c2sgPSAoMSA8PCBrQmlnaXRTaXplKSAtIDE7CisgICAgICAgIC8vIEV2ZXJ5IGluc3RhbmNlIGFs
bG9jYXRlcyBrQmlnaXRMZW5ndGggY2h1bmtzIG9uIHRoZSBzdGFjay4gQmlnbnVtcyBjYW5ub3QK
KyAgICAgICAgLy8gZ3Jvdy4gVGhlcmUgYXJlIG5vIGNoZWNrcyBpZiB0aGUgc3RhY2stYWxsb2Nh
dGVkIHNwYWNlIGlzIHN1ZmZpY2llbnQuCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQga0JpZ2l0
Q2FwYWNpdHkgPSBrTWF4U2lnbmlmaWNhbnRCaXRzIC8ga0JpZ2l0U2l6ZTsKKyAgICAgICAgCisg
ICAgICAgIHZvaWQgRW5zdXJlQ2FwYWNpdHkoaW50IHNpemUpIHsKKyAgICAgICAgICAgIGlmIChz
aXplID4ga0JpZ2l0Q2FwYWNpdHkpIHsKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHZvaWQgQWxpZ24oY29uc3QgQmlnbnVt
JiBvdGhlcik7CisgICAgICAgIHZvaWQgQ2xhbXAoKTsKKyAgICAgICAgYm9vbCBJc0NsYW1wZWQo
KSBjb25zdDsKKyAgICAgICAgdm9pZCBaZXJvKCk7CisgICAgICAgIC8vIFJlcXVpcmVzIHRoaXMg
dG8gaGF2ZSBlbm91Z2ggY2FwYWNpdHkgKG5vIHRlc3RzIGRvbmUpLgorICAgICAgICAvLyBVcGRh
dGVzIHVzZWRfZGlnaXRzXyBpZiBuZWNlc3NhcnkuCisgICAgICAgIC8vIHNoaWZ0X2Ftb3VudCBt
dXN0IGJlIDwga0JpZ2l0U2l6ZS4KKyAgICAgICAgdm9pZCBCaWdpdHNTaGlmdExlZnQoaW50IHNo
aWZ0X2Ftb3VudCk7CisgICAgICAgIC8vIEJpZ2l0TGVuZ3RoIGluY2x1ZGVzIHRoZSAiaGlkZGVu
IiBkaWdpdHMgZW5jb2RlZCBpbiB0aGUgZXhwb25lbnQuCisgICAgICAgIGludCBCaWdpdExlbmd0
aCgpIGNvbnN0IHsgcmV0dXJuIHVzZWRfZGlnaXRzXyArIGV4cG9uZW50XzsgfQorICAgICAgICBD
aHVuayBCaWdpdEF0KGludCBpbmRleCkgY29uc3Q7CisgICAgICAgIHZvaWQgU3VidHJhY3RUaW1l
cyhjb25zdCBCaWdudW0mIG90aGVyLCBpbnQgZmFjdG9yKTsKKyAgICAgICAgCisgICAgICAgIENo
dW5rIGJpZ2l0c19idWZmZXJfW2tCaWdpdENhcGFjaXR5XTsKKyAgICAgICAgLy8gQSB2ZWN0b3Ig
YmFja2VkIGJ5IGJpZ2l0c19idWZmZXJfLiBUaGlzIHdheSBhY2Nlc3NlcyB0byB0aGUgYXJyYXkg
YXJlCisgICAgICAgIC8vIGNoZWNrZWQgZm9yIG91dC1vZi1ib3VuZHMgZXJyb3JzLgorICAgICAg
ICBWZWN0b3I8Q2h1bms+IGJpZ2l0c187CisgICAgICAgIGludCB1c2VkX2RpZ2l0c187CisgICAg
ICAgIC8vIFRoZSBCaWdudW0ncyB2YWx1ZSBlcXVhbHMgdmFsdWUoYmlnaXRzXykgKiAyXihleHBv
bmVudF8gKiBrQmlnaXRTaXplKS4KKyAgICAgICAgaW50IGV4cG9uZW50XzsKKyAgICAgICAgCisg
ICAgICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihCaWdudW0pOworICAgIH07CisgICAgCit9
ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
KyNlbmRpZiAgLy8gRE9VQkxFX0NPTlZFUlNJT05fQklHTlVNX0hfCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvY2FjaGVkLXBvd2Vycy5jYyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE4ZTcwMDQ3
ZDllZTE3NTAzODJmYjY3ZDhkNGM4M2FkN2ExYWI4NzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvY2FjaGVkLXBvd2Vycy5jYwpAQCAtMCwwICsxLDE4
OSBAQAorLy8gQ29weXJpZ2h0IDIwMDYtMjAwOCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6
CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
CisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
Ky8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
Ky8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpbmNsdWRlIDxzdGRhcmcu
aD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlICJV
bnVzZWRQYXJhbS5oIgorI2luY2x1ZGUgInV0aWxzLmgiCisjaW5jbHVkZSAiY2FjaGVkLXBvd2Vy
cy5oIgorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsK
KyAgICAKKyAgICBzdHJ1Y3QgQ2FjaGVkUG93ZXIgeworICAgICAgICB1aW50NjRfdCBzaWduaWZp
Y2FuZDsKKyAgICAgICAgaW50MTZfdCBiaW5hcnlfZXhwb25lbnQ7CisgICAgICAgIGludDE2X3Qg
ZGVjaW1hbF9leHBvbmVudDsKKyAgICB9OworICAgIAorICAgIHN0YXRpYyBpbnQga0NhY2hlZFBv
d2Vyc0xlbmd0aCA9IDE7CisgICAgc3RhdGljIGludCBrQ2FjaGVkUG93ZXJzT2Zmc2V0ID0gMTsK
KyAgICBzdGF0aWMgY29uc3QgZG91YmxlIGtEXzFfTE9HMl8xMCA9IDAuMzAxMDI5OTk1NjYzOTgx
MTQ7ICAvLyAgMSAvIGxnKDEwKQorICAgIHN0YXRpYyBDYWNoZWRQb3dlcioga0NhY2hlZFBvd2Vy
cyA9IDA7CisgICAgCisgICAgaW50IFBvd2Vyc09mVGVuQ2FjaGU6OmtEZWNpbWFsRXhwb25lbnRE
aXN0YW5jZSA9IDE7CisgICAgaW50IFBvd2Vyc09mVGVuQ2FjaGU6OmtNaW5EZWNpbWFsRXhwb25l
bnQgPSAxOworICAgIGludCBQb3dlcnNPZlRlbkNhY2hlOjprTWF4RGVjaW1hbEV4cG9uZW50ID0g
MTsKKyAgICAKKyAgICB2b2lkIGluaXRpYWxpemUoKSB7CisgICAgICAgIHN0YXRpYyBDYWNoZWRQ
b3dlciBjYWNoZWRQb3dlcnNbXSA9IHsKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGZh
OGZkNWEwLCAwODFjMDI4OCksIC0xMjIwLCAtMzQ4fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBB
UlRfQygweGJhYWVlMTdmLCBhMjNlYmY3NiksIC0xMTkzLCAtMzQwfSwKKyAgICAgICAgICAgIHtV
SU5UNjRfMlBBUlRfQygweDhiMTZmYjIwLCAzMDU1YWM3NiksIC0xMTY2LCAtMzMyfSwKKyAgICAg
ICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGNmNDI4OTRhLCA1ZGNlMzVlYSksIC0xMTQwLCAtMzI0
fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweDlhNmJiMGFhLCA1NTY1M2IyZCksIC0x
MTEzLCAtMzE2fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGU2MWFjZjAzLCAzZDFh
NDVkZiksIC0xMDg3LCAtMzA4fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGFiNzBm
ZTE3LCBjNzlhYzZjYSksIC0xMDYwLCAtMzAwfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRf
QygweGZmNzdiMWZjLCBiZWJjZGM0ZiksIC0xMDM0LCAtMjkyfSwKKyAgICAgICAgICAgIHtVSU5U
NjRfMlBBUlRfQygweGJlNTY5MWVmLCA0MTZiZDYwYyksIC0xMDA3LCAtMjg0fSwKKyAgICAgICAg
ICAgIHtVSU5UNjRfMlBBUlRfQygweDhkZDAxZmFkLCA5MDdmZmMzYyksIC05ODAsIC0yNzZ9LAor
ICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZDM1MTVjMjgsIDMxNTU5YTgzKSwgLTk1NCwg
LTI2OH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg5ZDcxYWM4ZiwgYWRhNmM5YjUp
LCAtOTI3LCAtMjYwfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGVhOWMyMjc3LCAy
M2VlOGJjYiksIC05MDEsIC0yNTJ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YWVj
YzQ5OTEsIDQwNzg1MzZkKSwgLTg3NCwgLTI0NH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJU
X0MoMHg4MjNjMTI3OSwgNWRiNmNlNTcpLCAtODQ3LCAtMjM2fSwKKyAgICAgICAgICAgIHtVSU5U
NjRfMlBBUlRfQygweGMyMTA5NDM2LCA0ZGZiNTYzNyksIC04MjEsIC0yMjh9LAorICAgICAgICAg
ICAge1VJTlQ2NF8yUEFSVF9DKDB4OTA5NmVhNmYsIDM4NDg5ODRmKSwgLTc5NCwgLTIyMH0sCisg
ICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhkNzc0ODVjYiwgMjU4MjNhYzcpLCAtNzY4LCAt
MjEyfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGEwODZjZmNkLCA5N2JmOTdmNCks
IC03NDEsIC0yMDR9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZWYzNDBhOTgsIDE3
MmFhY2U1KSwgLTcxNSwgLTE5Nn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhiMjM4
NjdmYiwgMmEzNWIyOGUpLCAtNjg4LCAtMTg4fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRf
QygweDg0YzhkNGRmLCBkMmM2M2YzYiksIC02NjEsIC0xODB9LAorICAgICAgICAgICAge1VJTlQ2
NF8yUEFSVF9DKDB4YzVkZDQ0MjcsIDFhZDNjZGJhKSwgLTYzNSwgLTE3Mn0sCisgICAgICAgICAg
ICB7VUlOVDY0XzJQQVJUX0MoMHg5MzZiOWZjZSwgYmIyNWM5OTYpLCAtNjA4LCAtMTY0fSwKKyAg
ICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGRiYWM2YzI0LCA3ZDYyYTU4NCksIC01ODIsIC0x
NTZ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YTNhYjY2NTgsIDBkNWZkYWY2KSwg
LTU1NSwgLTE0OH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhmM2UyZjg5MywgZGVj
M2YxMjYpLCAtNTI5LCAtMTQwfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGI1YjVh
ZGE4LCBhYWZmODBiOCksIC01MDIsIC0xMzJ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9D
KDB4ODc2MjVmMDUsIDZjN2M0YThiKSwgLTQ3NSwgLTEyNH0sCisgICAgICAgICAgICB7VUlOVDY0
XzJQQVJUX0MoMHhjOWJjZmY2MCwgMzRjMTMwNTMpLCAtNDQ5LCAtMTE2fSwKKyAgICAgICAgICAg
IHtVSU5UNjRfMlBBUlRfQygweDk2NGU4NThjLCA5MWJhMjY1NSksIC00MjIsIC0xMDh9LAorICAg
ICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZGZmOTc3MjQsIDcwMjk3ZWJkKSwgLTM5NiwgLTEw
MH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhhNmRmYmQ5ZiwgYjhlNWI4OGYpLCAt
MzY5LCAtOTJ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZjhhOTVmY2YsIDg4NzQ3
ZDk0KSwgLTM0MywgLTg0fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGI5NDQ3MDkz
LCA4ZmE4OWJjZiksIC0zMTYsIC03Nn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg4
YTA4ZjBmOCwgYmYwZjE1NmIpLCAtMjg5LCAtNjh9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFS
VF9DKDB4Y2RiMDI1NTUsIDY1MzEzMWI2KSwgLTI2MywgLTYwfSwKKyAgICAgICAgICAgIHtVSU5U
NjRfMlBBUlRfQygweDk5M2ZlMmM2LCBkMDdiN2ZhYyksIC0yMzYsIC01Mn0sCisgICAgICAgICAg
ICB7VUlOVDY0XzJQQVJUX0MoMHhlNDVjMTBjNCwgMmEyYjNiMDYpLCAtMjEwLCAtNDR9LAorICAg
ICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YWEyNDI0OTksIDY5NzM5MmQzKSwgLTE4MywgLTM2
fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGZkODdiNWYyLCA4MzAwY2EwZSksIC0x
NTcsIC0yOH0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHhiY2U1MDg2NCwgOTIxMTFh
ZWIpLCAtMTMwLCAtMjB9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4OGNiY2NjMDks
IDZmNTA4OGNjKSwgLTEwMywgLTEyfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGQx
YjcxNzU4LCBlMjE5NjUyYyksIC03NywgLTR9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9D
KDB4OWM0MDAwMDAsIDAwMDAwMDAwKSwgLTUwLCA0fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBB
UlRfQygweGU4ZDRhNTEwLCAwMDAwMDAwMCksIC0yNCwgMTJ9LAorICAgICAgICAgICAge1VJTlQ2
NF8yUEFSVF9DKDB4YWQ3OGViYzUsIGFjNjIwMDAwKSwgMywgMjB9LAorICAgICAgICAgICAge1VJ
TlQ2NF8yUEFSVF9DKDB4ODEzZjM5NzgsIGY4OTQwOTg0KSwgMzAsIDI4fSwKKyAgICAgICAgICAg
IHtVSU5UNjRfMlBBUlRfQygweGMwOTdjZTdiLCBjOTA3MTViMyksIDU2LCAzNn0sCisgICAgICAg
ICAgICB7VUlOVDY0XzJQQVJUX0MoMHg4ZjdlMzJjZSwgN2JlYTVjNzApLCA4MywgNDR9LAorICAg
ICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZDVkMjM4YTQsIGFiZTk4MDY4KSwgMTA5LCA1Mn0s
CisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg5ZjRmMjcyNiwgMTc5YTIyNDUpLCAxMzYs
IDYwfSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGVkNjNhMjMxLCBkNGM0ZmIyNyks
IDE2MiwgNjh9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YjBkZTY1MzgsIDhjYzhh
ZGE4KSwgMTg5LCA3Nn0sCisgICAgICAgICAgICB7VUlOVDY0XzJQQVJUX0MoMHg4M2M3MDg4ZSwg
MWFhYjY1ZGIpLCAyMTYsIDg0fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRfQygweGM0NWQx
ZGY5LCA0MjcxMWQ5YSksIDI0MiwgOTJ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4
OTI0ZDY5MmMsIGE2MWJlNzU4KSwgMjY5LCAxMDB9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFS
VF9DKDB4ZGEwMWVlNjQsIDFhNzA4ZGVhKSwgMjk1LCAxMDh9LAorICAgICAgICAgICAge1VJTlQ2
NF8yUEFSVF9DKDB4YTI2ZGEzOTksIDlhZWY3NzRhKSwgMzIyLCAxMTZ9LAorICAgICAgICAgICAg
e1VJTlQ2NF8yUEFSVF9DKDB4ZjIwOTc4N2IsIGI0N2Q2Yjg1KSwgMzQ4LCAxMjR9LAorICAgICAg
ICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YjQ1NGU0YTEsIDc5ZGQxODc3KSwgMzc1LCAxMzJ9LAor
ICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ODY1Yjg2OTIsIDViOWJjNWMyKSwgNDAyLCAx
NDB9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YzgzNTUzYzUsIGM4OTY1ZDNkKSwg
NDI4LCAxNDh9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4OTUyYWI0NWMsIGZhOTdh
MGIzKSwgNDU1LCAxNTZ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZGU0NjlmYmQs
IDk5YTA1ZmUzKSwgNDgxLCAxNjR9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YTU5
YmMyMzQsIGRiMzk4YzI1KSwgNTA4LCAxNzJ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9D
KDB4ZjZjNjlhNzIsIGEzOTg5ZjVjKSwgNTM0LCAxODB9LAorICAgICAgICAgICAge1VJTlQ2NF8y
UEFSVF9DKDB4YjdkY2JmNTMsIDU0ZTliZWNlKSwgNTYxLCAxODh9LAorICAgICAgICAgICAge1VJ
TlQ2NF8yUEFSVF9DKDB4ODhmY2YzMTcsIGYyMjI0MWUyKSwgNTg4LCAxOTZ9LAorICAgICAgICAg
ICAge1VJTlQ2NF8yUEFSVF9DKDB4Y2MyMGNlOWIsIGQzNWM3OGE1KSwgNjE0LCAyMDR9LAorICAg
ICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4OTgxNjVhZjMsIDdiMjE1M2RmKSwgNjQxLCAyMTJ9
LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZTJhMGI1ZGMsIDk3MWYzMDNhKSwgNjY3
LCAyMjB9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YThkOWQxNTMsIDVjZTNiMzk2
KSwgNjk0LCAyMjh9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZmI5YjdjZDksIGE0
YTc0NDNjKSwgNzIwLCAyMzZ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YmI3NjRj
NGMsIGE3YTQ0NDEwKSwgNzQ3LCAyNDR9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4
OGJhYjhlZWYsIGI2NDA5YzFhKSwgNzc0LCAyNTJ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFS
VF9DKDB4ZDAxZmVmMTAsIGE2NTc4NDJjKSwgODAwLCAyNjB9LAorICAgICAgICAgICAge1VJTlQ2
NF8yUEFSVF9DKDB4OWIxMGE0ZTUsIGU5OTEzMTI5KSwgODI3LCAyNjh9LAorICAgICAgICAgICAg
e1VJTlQ2NF8yUEFSVF9DKDB4ZTcxMDliZmIsIGExOWMwYzlkKSwgODUzLCAyNzZ9LAorICAgICAg
ICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YWMyODIwZDksIDYyM2JmNDI5KSwgODgwLCAyODR9LAor
ICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ODA0NDRiNWUsIDdhYTdjZjg1KSwgOTA3LCAy
OTJ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4YmYyMWU0NDAsIDAzYWNkZDJkKSwg
OTMzLCAzMDB9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4OGU2NzljMmYsIDVlNDRm
ZjhmKSwgOTYwLCAzMDh9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4ZDQzMzE3OWQs
IDljOGNiODQxKSwgOTg2LCAzMTZ9LAorICAgICAgICAgICAge1VJTlQ2NF8yUEFSVF9DKDB4OWUx
OWRiOTIsIGI0ZTMxYmE5KSwgMTAxMywgMzI0fSwKKyAgICAgICAgICAgIHtVSU5UNjRfMlBBUlRf
QygweGViOTZiZjZlLCBiYWRmNzdkOSksIDEwMzksIDMzMn0sCisgICAgICAgICAgICB7VUlOVDY0
XzJQQVJUX0MoMHhhZjg3MDIzYiwgOWJmMGVlNmIpLCAxMDY2LCAzNDB9LAorICAgICAgICB9Owor
ICAgICAgICBrQ2FjaGVkUG93ZXJzID0gY2FjaGVkUG93ZXJzOworICAgICAgICBrQ2FjaGVkUG93
ZXJzTGVuZ3RoID0gQVJSQVlfU0laRShjYWNoZWRQb3dlcnMpOworICAgICAgICBrQ2FjaGVkUG93
ZXJzT2Zmc2V0ID0gLWNhY2hlZFBvd2Vyc1swXS5kZWNpbWFsX2V4cG9uZW50OworICAgICAgICBQ
b3dlcnNPZlRlbkNhY2hlOjprRGVjaW1hbEV4cG9uZW50RGlzdGFuY2UgPSBrQ2FjaGVkUG93ZXJz
WzFdLmRlY2ltYWxfZXhwb25lbnQgLSBrQ2FjaGVkUG93ZXJzWzBdLmRlY2ltYWxfZXhwb25lbnQ7
CisgICAgICAgIFBvd2Vyc09mVGVuQ2FjaGU6OmtNaW5EZWNpbWFsRXhwb25lbnQgPSBrQ2FjaGVk
UG93ZXJzWzBdLmRlY2ltYWxfZXhwb25lbnQ7CisgICAgICAgIFBvd2Vyc09mVGVuQ2FjaGU6OmtN
YXhEZWNpbWFsRXhwb25lbnQgPSBrQ2FjaGVkUG93ZXJzW2tDYWNoZWRQb3dlcnNMZW5ndGggLSAx
XS5kZWNpbWFsX2V4cG9uZW50OworICAgIH0KKyAgICAKKyAgICB2b2lkIFBvd2Vyc09mVGVuQ2Fj
aGU6OkdldENhY2hlZFBvd2VyRm9yQmluYXJ5RXhwb25lbnRSYW5nZSgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWlu
X2V4cG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBtYXhfZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGl5RnAqIHBvd2Vy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCogZGVjaW1hbF9leHBvbmVudCkgeworICAgICAgICBVTlVTRURfUEFSQU0o
bWF4X2V4cG9uZW50KTsKKyAgICAgICAgaW50IGtRID0gRGl5RnA6OmtTaWduaWZpY2FuZFNpemU7
CisgICAgICAgIGRvdWJsZSBrID0gY2VpbCgobWluX2V4cG9uZW50ICsga1EgLSAxKSAqIGtEXzFf
TE9HMl8xMCk7CisgICAgICAgIGludCBmb28gPSBrQ2FjaGVkUG93ZXJzT2Zmc2V0OworICAgICAg
ICBpbnQgaW5kZXggPQorICAgICAgICAoZm9vICsgc3RhdGljX2Nhc3Q8aW50PihrKSAtIDEpIC8g
a0RlY2ltYWxFeHBvbmVudERpc3RhbmNlICsgMTsKKyAgICAgICAgQVNTRVJUKDAgPD0gaW5kZXgg
JiYgaW5kZXggPCBrQ2FjaGVkUG93ZXJzTGVuZ3RoKTsKKyAgICAgICAgQ2FjaGVkUG93ZXIgY2Fj
aGVkX3Bvd2VyID0ga0NhY2hlZFBvd2Vyc1tpbmRleF07CisgICAgICAgIEFTU0VSVChtaW5fZXhw
b25lbnQgPD0gY2FjaGVkX3Bvd2VyLmJpbmFyeV9leHBvbmVudCk7CisgICAgICAgIEFTU0VSVChj
YWNoZWRfcG93ZXIuYmluYXJ5X2V4cG9uZW50IDw9IG1heF9leHBvbmVudCk7CisgICAgICAgICpk
ZWNpbWFsX2V4cG9uZW50ID0gY2FjaGVkX3Bvd2VyLmRlY2ltYWxfZXhwb25lbnQ7CisgICAgICAg
ICpwb3dlciA9IERpeUZwKGNhY2hlZF9wb3dlci5zaWduaWZpY2FuZCwgY2FjaGVkX3Bvd2VyLmJp
bmFyeV9leHBvbmVudCk7CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgUG93ZXJzT2ZUZW5D
YWNoZTo6R2V0Q2FjaGVkUG93ZXJGb3JEZWNpbWFsRXhwb25lbnQoaW50IHJlcXVlc3RlZF9leHBv
bmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIERpeUZwKiBwb3dlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogZm91bmRfZXhwb25lbnQpIHsKKyAgICAg
ICAgQVNTRVJUKGtNaW5EZWNpbWFsRXhwb25lbnQgPD0gcmVxdWVzdGVkX2V4cG9uZW50KTsKKyAg
ICAgICAgQVNTRVJUKHJlcXVlc3RlZF9leHBvbmVudCA8IGtNYXhEZWNpbWFsRXhwb25lbnQgKyBr
RGVjaW1hbEV4cG9uZW50RGlzdGFuY2UpOworICAgICAgICBpbnQgaW5kZXggPQorICAgICAgICAo
cmVxdWVzdGVkX2V4cG9uZW50ICsga0NhY2hlZFBvd2Vyc09mZnNldCkgLyBrRGVjaW1hbEV4cG9u
ZW50RGlzdGFuY2U7CisgICAgICAgIENhY2hlZFBvd2VyIGNhY2hlZF9wb3dlciA9IGtDYWNoZWRQ
b3dlcnNbaW5kZXhdOworICAgICAgICAqcG93ZXIgPSBEaXlGcChjYWNoZWRfcG93ZXIuc2lnbmlm
aWNhbmQsIGNhY2hlZF9wb3dlci5iaW5hcnlfZXhwb25lbnQpOworICAgICAgICAqZm91bmRfZXhw
b25lbnQgPSBjYWNoZWRfcG93ZXIuZGVjaW1hbF9leHBvbmVudDsKKyAgICAgICAgQVNTRVJUKCpm
b3VuZF9leHBvbmVudCA8PSByZXF1ZXN0ZWRfZXhwb25lbnQpOworICAgICAgICBBU1NFUlQocmVx
dWVzdGVkX2V4cG9uZW50IDwgKmZvdW5kX2V4cG9uZW50ICsga0RlY2ltYWxFeHBvbmVudERpc3Rh
bmNlKTsKKyAgICB9CisgICAgCit9ICAvLyBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24KKwor
fSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L2R0b2EvY2FjaGVkLXBvd2Vycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2Nh
Y2hlZC1wb3dlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYmMwNGQ0M2Q2OGNjMDg2MGEyMmIyODc4NmQzMTc0
YzhkMjZjYjMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9k
dG9hL2NhY2hlZC1wb3dlcnMuaApAQCAtMCwwICsxLDcyIEBACisvLyBDb3B5cmlnaHQgMjAxMCB0
aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
Ly8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKKyNpZm5kZWYgRE9VQkxFX0NPTlZFUlNJT05fQ0FDSEVEX1BPV0VSU19IXworI2Rl
ZmluZSBET1VCTEVfQ09OVkVSU0lPTl9DQUNIRURfUE9XRVJTX0hfCisKKyNpbmNsdWRlICJkaXkt
ZnAuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7
CisgICAgCisgICAgY2xhc3MgUG93ZXJzT2ZUZW5DYWNoZSB7CisgICAgcHVibGljOgorICAgICAg
ICAKKyAgICAgICAgLy8gTm90IGFsbCBwb3dlcnMgb2YgdGVuIGFyZSBjYWNoZWQuIFRoZSBkZWNp
bWFsIGV4cG9uZW50IG9mIHR3byBuZWlnaGJvcmluZworICAgICAgICAvLyBjYWNoZWQgbnVtYmVy
cyB3aWxsIGRpZmZlciBieSBrRGVjaW1hbEV4cG9uZW50RGlzdGFuY2UuCisgICAgICAgIHN0YXRp
YyBpbnQga0RlY2ltYWxFeHBvbmVudERpc3RhbmNlOworICAgICAgICAKKyAgICAgICAgc3RhdGlj
IGludCBrTWluRGVjaW1hbEV4cG9uZW50OworICAgICAgICBzdGF0aWMgaW50IGtNYXhEZWNpbWFs
RXhwb25lbnQ7CisgICAgICAgIAorICAgICAgICAvLyBSZXR1cm5zIGEgY2FjaGVkIHBvd2VyLW9m
LXRlbiB3aXRoIGEgYmluYXJ5IGV4cG9uZW50IGluIHRoZSByYW5nZQorICAgICAgICAvLyBbbWlu
X2V4cG9uZW50OyBtYXhfZXhwb25lbnRdIChib3VuZGFyaWVzIGluY2x1ZGVkKS4KKyAgICAgICAg
c3RhdGljIHZvaWQgR2V0Q2FjaGVkUG93ZXJGb3JCaW5hcnlFeHBvbmVudFJhbmdlKGludCBtaW5f
ZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgbWF4X2V4cG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGl5RnAqIHBvd2VyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBkZWNpbWFs
X2V4cG9uZW50KTsKKyAgICAgICAgCisgICAgICAgIC8vIFJldHVybnMgYSBjYWNoZWQgcG93ZXIg
b2YgdGVuIHggfj0gMTBeayBzdWNoIHRoYXQKKyAgICAgICAgLy8gICBrIDw9IGRlY2ltYWxfZXhw
b25lbnQgPCBrICsga0NhY2hlZFBvd2Vyc0RlY2ltYWxEaXN0YW5jZS4KKyAgICAgICAgLy8gVGhl
IGdpdmVuIGRlY2ltYWxfZXhwb25lbnQgbXVzdCBzYXRpc2Z5CisgICAgICAgIC8vICAga01pbkRl
Y2ltYWxFeHBvbmVudCA8PSByZXF1ZXN0ZWRfZXhwb25lbnQsIGFuZAorICAgICAgICAvLyAgIHJl
cXVlc3RlZF9leHBvbmVudCA8IGtNYXhEZWNpbWFsRXhwb25lbnQgKyBrRGVjaW1hbEV4cG9uZW50
RGlzdGFuY2UuCisgICAgICAgIHN0YXRpYyB2b2lkIEdldENhY2hlZFBvd2VyRm9yRGVjaW1hbEV4
cG9uZW50KGludCByZXF1ZXN0ZWRfZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpeUZwKiBwb3dlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBmb3VuZF9leHBvbmVu
dCk7CisgICAgfTsKKyAgICAKKyAgICAvLyBJbml0aWFsaXplcyB0aGUgdGFibGUgb2YgY2FjaGVk
IHBvd2VycyB1c2VkIGJ5IHRoZSBkdG9hIGFsZ29yaXRobS4KKyAgICAvLyBUaGlzIG5lZWRzIHRv
IGJlIGNhbGxlZCB3aGVuIEpTQyBpcyBiZWluZyBpbml0aWFsaXplZC4KKyAgICB2b2lkIGluaXRp
YWxpemUoKTsKKyAgICAKK30gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbgorCit9IC8v
IG5hbWVzcGFjZSBXVEYKKworI2VuZGlmICAvLyBET1VCTEVfQ09OVkVSU0lPTl9DQUNIRURfUE9X
RVJTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZGl5LWZw
LmNjIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2RpeS1mcC5jYwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li43Y2FkNWQ0M2M1ZjYzOTZhZTk0MWRhZDM4YTRlYjBlZGFjMjU1OWYwCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2RpeS1mcC5jYwpAQCAtMCwwICsx
LDYxIEBACisvLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6Cisv
LworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisv
LyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8v
ICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8v
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworI2luY2x1ZGUgImRpeS1mcC5o
IgorI2luY2x1ZGUgInV0aWxzLmgiCisKK25hbWVzcGFjZSBXVEYgeworCituYW1lc3BhY2UgZG91
YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIHZvaWQgRGl5RnA6Ok11bHRpcGx5KGNvbnN0IERp
eUZwJiBvdGhlcikgeworICAgICAgICAvLyBTaW1wbHkgImVtdWxhdGVzIiBhIDEyOCBiaXQgbXVs
dGlwbGljYXRpb24uCisgICAgICAgIC8vIEhvd2V2ZXI6IHRoZSByZXN1bHRpbmcgbnVtYmVyIG9u
bHkgY29udGFpbnMgNjQgYml0cy4gVGhlIGxlYXN0CisgICAgICAgIC8vIHNpZ25pZmljYW50IDY0
IGJpdHMgYXJlIG9ubHkgdXNlZCBmb3Igcm91bmRpbmcgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgNjQK
KyAgICAgICAgLy8gYml0cy4KKyAgICAgICAgY29uc3QgdWludDY0X3Qga00zMiA9IDB4RkZGRkZG
RkZVOworICAgICAgICB1aW50NjRfdCBhID0gZl8gPj4gMzI7CisgICAgICAgIHVpbnQ2NF90IGIg
PSBmXyAmIGtNMzI7CisgICAgICAgIHVpbnQ2NF90IGMgPSBvdGhlci5mXyA+PiAzMjsKKyAgICAg
ICAgdWludDY0X3QgZCA9IG90aGVyLmZfICYga00zMjsKKyAgICAgICAgdWludDY0X3QgYWMgPSBh
ICogYzsKKyAgICAgICAgdWludDY0X3QgYmMgPSBiICogYzsKKyAgICAgICAgdWludDY0X3QgYWQg
PSBhICogZDsKKyAgICAgICAgdWludDY0X3QgYmQgPSBiICogZDsKKyAgICAgICAgdWludDY0X3Qg
dG1wID0gKGJkID4+IDMyKSArIChhZCAmIGtNMzIpICsgKGJjICYga00zMik7CisgICAgICAgIC8v
IEJ5IGFkZGluZyAxVSA8PCAzMSB0byB0bXAgd2Ugcm91bmQgdGhlIGZpbmFsIHJlc3VsdC4KKyAg
ICAgICAgLy8gSGFsZndheSBjYXNlcyB3aWxsIGJlIHJvdW5kIHVwLgorICAgICAgICB0bXAgKz0g
MVUgPDwgMzE7CisgICAgICAgIHVpbnQ2NF90IHJlc3VsdF9mID0gYWMgKyAoYWQgPj4gMzIpICsg
KGJjID4+IDMyKSArICh0bXAgPj4gMzIpOworICAgICAgICBlXyArPSBvdGhlci5lXyArIDY0Owor
ICAgICAgICBmXyA9IHJlc3VsdF9mOworICAgIH0KKyAgICAKK30gIC8vIG5hbWVzcGFjZSBkb3Vi
bGVfY29udmVyc2lvbgorCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kaXktZnAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvZHRvYS9kaXktZnAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lODQzMTAwYTgyYWEzNGE2MjhkY2VlOGMyNzEx
ZjlhYzUwZWY5ZTY5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9kdG9hL2RpeS1mcC5oCkBAIC0wLDAgKzEsMTIyIEBACisvLyBDb3B5cmlnaHQgMjAxMCB0aGUg
VjggcHJvamVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisv
LyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
Ly8KKy8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8g
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKKyNpZm5kZWYgRE9VQkxFX0NPTlZFUlNJT05fRElZX0ZQX0hfCisjZGVmaW5lIERPVUJM
RV9DT05WRVJTSU9OX0RJWV9GUF9IXworCisjaW5jbHVkZSAidXRpbHMuaCIKKworbmFtZXNwYWNl
IFdURiB7CisKK25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgLy8gVGhp
cyAiRG8gSXQgWW91cnNlbGYgRmxvYXRpbmcgUG9pbnQiIGNsYXNzIGltcGxlbWVudHMgYSBmbG9h
dGluZy1wb2ludCBudW1iZXIKKyAgICAvLyB3aXRoIGEgdWludDY0IHNpZ25pZmljYW5kIGFuZCBh
biBpbnQgZXhwb25lbnQuIE5vcm1hbGl6ZWQgRGl5RnAgbnVtYmVycyB3aWxsCisgICAgLy8gaGF2
ZSB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgb2YgdGhlIHNpZ25pZmljYW5kIHNldC4KKyAgICAv
LyBNdWx0aXBsaWNhdGlvbiBhbmQgU3VidHJhY3Rpb24gZG8gbm90IG5vcm1hbGl6ZSB0aGVpciBy
ZXN1bHRzLgorICAgIC8vIERpeUZwIGFyZSBub3QgZGVzaWduZWQgdG8gY29udGFpbiBzcGVjaWFs
IGRvdWJsZXMgKE5hTiBhbmQgSW5maW5pdHkpLgorICAgIGNsYXNzIERpeUZwIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQga1NpZ25pZmljYW5kU2l6ZSA9IDY0OworICAg
ICAgICAKKyAgICAgICAgRGl5RnAoKSA6IGZfKDApLCBlXygwKSB7fQorICAgICAgICBEaXlGcCh1
aW50NjRfdCBmLCBpbnQgZSkgOiBmXyhmKSwgZV8oZSkge30KKyAgICAgICAgCisgICAgICAgIC8v
IHRoaXMgPSB0aGlzIC0gb3RoZXIuCisgICAgICAgIC8vIFRoZSBleHBvbmVudHMgb2YgYm90aCBu
dW1iZXJzIG11c3QgYmUgdGhlIHNhbWUgYW5kIHRoZSBzaWduaWZpY2FuZCBvZiB0aGlzCisgICAg
ICAgIC8vIG11c3QgYmUgYmlnZ2VyIHRoYW4gdGhlIHNpZ25pZmljYW5kIG9mIG90aGVyLgorICAg
ICAgICAvLyBUaGUgcmVzdWx0IHdpbGwgbm90IGJlIG5vcm1hbGl6ZWQuCisgICAgICAgIHZvaWQg
U3VidHJhY3QoY29uc3QgRGl5RnAmIG90aGVyKSB7CisgICAgICAgICAgICBBU1NFUlQoZV8gPT0g
b3RoZXIuZV8pOworICAgICAgICAgICAgQVNTRVJUKGZfID49IG90aGVyLmZfKTsKKyAgICAgICAg
ICAgIGZfIC09IG90aGVyLmZfOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBSZXR1
cm5zIGEgLSBiLgorICAgICAgICAvLyBUaGUgZXhwb25lbnRzIG9mIGJvdGggbnVtYmVycyBtdXN0
IGJlIHRoZSBzYW1lIGFuZCB0aGlzIG11c3QgYmUgYmlnZ2VyCisgICAgICAgIC8vIHRoYW4gb3Ro
ZXIuIFRoZSByZXN1bHQgd2lsbCBub3QgYmUgbm9ybWFsaXplZC4KKyAgICAgICAgc3RhdGljIERp
eUZwIE1pbnVzKGNvbnN0IERpeUZwJiBhLCBjb25zdCBEaXlGcCYgYikgeworICAgICAgICAgICAg
RGl5RnAgcmVzdWx0ID0gYTsKKyAgICAgICAgICAgIHJlc3VsdC5TdWJ0cmFjdChiKTsKKyAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIAorICAg
ICAgICAvLyB0aGlzID0gdGhpcyAqIG90aGVyLgorICAgICAgICB2b2lkIE11bHRpcGx5KGNvbnN0
IERpeUZwJiBvdGhlcik7CisgICAgICAgIAorICAgICAgICAvLyByZXR1cm5zIGEgKiBiOworICAg
ICAgICBzdGF0aWMgRGl5RnAgVGltZXMoY29uc3QgRGl5RnAmIGEsIGNvbnN0IERpeUZwJiBiKSB7
CisgICAgICAgICAgICBEaXlGcCByZXN1bHQgPSBhOworICAgICAgICAgICAgcmVzdWx0Lk11bHRp
cGx5KGIpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgdm9pZCBOb3JtYWxpemUoKSB7CisgICAgICAgICAgICBBU1NFUlQoZl8gIT0gMCk7
CisgICAgICAgICAgICB1aW50NjRfdCBmID0gZl87CisgICAgICAgICAgICBpbnQgZSA9IGVfOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGlzIG1ldGhvZCBpcyBtYWlubHkgY2FsbGVk
IGZvciBub3JtYWxpemluZyBib3VuZGFyaWVzLiBJbiBnZW5lcmFsCisgICAgICAgICAgICAvLyBi
b3VuZGFyaWVzIG5lZWQgdG8gYmUgc2hpZnRlZCBieSAxMCBiaXRzLiBXZSB0aHVzIG9wdGltaXpl
IGZvciB0aGlzIGNhc2UuCisgICAgICAgICAgICBjb25zdCB1aW50NjRfdCBrMTBNU0JpdHMgPSBV
SU5UNjRfMlBBUlRfQygweEZGQzAwMDAwLCAwMDAwMDAwMCk7CisgICAgICAgICAgICB3aGlsZSAo
KGYgJiBrMTBNU0JpdHMpID09IDApIHsKKyAgICAgICAgICAgICAgICBmIDw8PSAxMDsKKyAgICAg
ICAgICAgICAgICBlIC09IDEwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hpbGUgKChm
ICYga1VpbnQ2NE1TQikgPT0gMCkgeworICAgICAgICAgICAgICAgIGYgPDw9IDE7CisgICAgICAg
ICAgICAgICAgZS0tOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZl8gPSBmOworICAgICAg
ICAgICAgZV8gPSBlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgRGl5RnAg
Tm9ybWFsaXplKGNvbnN0IERpeUZwJiBhKSB7CisgICAgICAgICAgICBEaXlGcCByZXN1bHQgPSBh
OworICAgICAgICAgICAgcmVzdWx0Lk5vcm1hbGl6ZSgpOworICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdWludDY0X3QgZigpIGNvbnN0IHsg
cmV0dXJuIGZfOyB9CisgICAgICAgIGludCBlKCkgY29uc3QgeyByZXR1cm4gZV87IH0KKyAgICAg
ICAgCisgICAgICAgIHZvaWQgc2V0X2YodWludDY0X3QgbmV3X3ZhbHVlKSB7IGZfID0gbmV3X3Zh
bHVlOyB9CisgICAgICAgIHZvaWQgc2V0X2UoaW50IG5ld192YWx1ZSkgeyBlXyA9IG5ld192YWx1
ZTsgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBzdGF0aWMgY29uc3QgdWludDY0
X3Qga1VpbnQ2NE1TQiA9IFVJTlQ2NF8yUEFSVF9DKDB4ODAwMDAwMDAsIDAwMDAwMDAwKTsKKyAg
ICAgICAgCisgICAgICAgIHVpbnQ2NF90IGZfOworICAgICAgICBpbnQgZV87CisgICAgfTsKKyAg
ICAKK30gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbgorCit9IC8vIG5hbWVzcGFjZSBX
VEYKKworI2VuZGlmICAvLyBET1VCTEVfQ09OVkVSU0lPTl9ESVlfRlBfSF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5jYyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5jYwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5lZjE4ODI1MTUzNGZjMGUzYzY5MWYwMzk1ZjkzYjQ0ZDZhMjhkYzZjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9u
LmNjCkBAIC0wLDAgKzEsODczIEBACisvLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJvamVjdCBh
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
Ky8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisvLyBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpbmNs
dWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlICJkb3VibGUtY29u
dmVyc2lvbi5oIgorCisjaW5jbHVkZSAiYmlnbnVtLWR0b2EuaCIKKyNpbmNsdWRlICJkb3VibGUu
aCIKKyNpbmNsdWRlICJmYXN0LWR0b2EuaCIKKyNpbmNsdWRlICJmaXhlZC1kdG9hLmgiCisjaW5j
bHVkZSAic3RydG9kLmgiCisjaW5jbHVkZSAidXRpbHMuaCIKKworbmFtZXNwYWNlIFdURiB7CisK
K25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgY29uc3QgRG91YmxlVG9T
dHJpbmdDb252ZXJ0ZXImIERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpFY21hU2NyaXB0Q29udmVy
dGVyKCkgeworICAgICAgICBpbnQgZmxhZ3MgPSBVTklRVUVfWkVSTyB8IEVNSVRfUE9TSVRJVkVf
RVhQT05FTlRfU0lHTjsKKyAgICAgICAgc3RhdGljIERvdWJsZVRvU3RyaW5nQ29udmVydGVyIGNv
bnZlcnRlcihmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiSW5maW5pdHkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJOYU4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICdlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAtNiwgMjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgNiwgMCk7CisgICAgICAgIHJldHVybiBjb252ZXJ0ZXI7CisgICAgfQorICAg
IAorICAgIAorICAgIGJvb2wgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6OkhhbmRsZVNwZWNpYWxW
YWx1ZXMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkb3VibGUgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyKiByZXN1bHRfYnVpbGRlcikgY29uc3Qgewor
ICAgICAgICBEb3VibGUgZG91YmxlX2luc3BlY3QodmFsdWUpOworICAgICAgICBpZiAoZG91Ymxl
X2luc3BlY3QuSXNJbmZpbml0ZSgpKSB7CisgICAgICAgICAgICBpZiAoaW5maW5pdHlfc3ltYm9s
XyA9PSBOVUxMKSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAodmFsdWUgPCAwKSB7Cisg
ICAgICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcignLScpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZFN0cmluZyhpbmZpbml0eV9z
eW1ib2xfKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlm
IChkb3VibGVfaW5zcGVjdC5Jc05hbigpKSB7CisgICAgICAgICAgICBpZiAobmFuX3N5bWJvbF8g
PT0gTlVMTCkgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZFN0
cmluZyhuYW5fc3ltYm9sXyk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgRG91Ymxl
VG9TdHJpbmdDb252ZXJ0ZXI6OkNyZWF0ZUV4cG9uZW50aWFsUmVwcmVzZW50YXRpb24oCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyKiBkZWNpbWFsX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyKiByZXN1bHRfYnVp
bGRlcikgY29uc3QgeworICAgICAgICBBU1NFUlQobGVuZ3RoICE9IDApOworICAgICAgICByZXN1
bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKGRlY2ltYWxfZGlnaXRzWzBdKTsKKyAgICAgICAgaWYg
KGxlbmd0aCAhPSAxKSB7CisgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVy
KCcuJyk7CisgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkU3Vic3RyaW5nKCZkZWNpbWFs
X2RpZ2l0c1sxXSwgbGVuZ3RoLTEpOworICAgICAgICB9CisgICAgICAgIHJlc3VsdF9idWlsZGVy
LT5BZGRDaGFyYWN0ZXIoZXhwb25lbnRfY2hhcmFjdGVyXyk7CisgICAgICAgIGlmIChleHBvbmVu
dCA8IDApIHsKKyAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRDaGFyYWN0ZXIoJy0nKTsK
KyAgICAgICAgICAgIGV4cG9uZW50ID0gLWV4cG9uZW50OworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgaWYgKChmbGFnc18gJiBFTUlUX1BPU0lUSVZFX0VYUE9ORU5UX1NJR04pICE9IDAp
IHsKKyAgICAgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKCcrJyk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGV4cG9uZW50ID09IDApIHsKKyAg
ICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRDaGFyYWN0ZXIoJzAnKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoZXhwb25lbnQgPCAxZTQpOworICAg
ICAgICBjb25zdCBpbnQga01heEV4cG9uZW50TGVuZ3RoID0gNTsKKyAgICAgICAgY2hhciBidWZm
ZXJba01heEV4cG9uZW50TGVuZ3RoXTsKKyAgICAgICAgaW50IGZpcnN0X2NoYXJfcG9zID0ga01h
eEV4cG9uZW50TGVuZ3RoOworICAgICAgICB3aGlsZSAoZXhwb25lbnQgPiAwKSB7CisgICAgICAg
ICAgICBidWZmZXJbLS1maXJzdF9jaGFyX3Bvc10gPSAnMCcgKyAoZXhwb25lbnQgJSAxMCk7Cisg
ICAgICAgICAgICBleHBvbmVudCAvPSAxMDsKKyAgICAgICAgfQorICAgICAgICByZXN1bHRfYnVp
bGRlci0+QWRkU3Vic3RyaW5nKCZidWZmZXJbZmlyc3RfY2hhcl9wb3NdLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGtNYXhFeHBvbmVudExlbmd0aCAtIGZpcnN0X2NoYXJf
cG9zKTsKKyAgICB9CisgICAgCisgICAgCisgICAgdm9pZCBEb3VibGVUb1N0cmluZ0NvbnZlcnRl
cjo6Q3JlYXRlRGVjaW1hbFJlcHJlc2VudGF0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBkZWNpbWFs
X2RpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlY2ltYWxfcG9pbnQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBkaWdpdHNfYWZ0ZXJfcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWls
ZGVyKSBjb25zdCB7CisgICAgICAgIC8vIENyZWF0ZSBhIHJlcHJlc2VudGF0aW9uIHRoYXQgaXMg
cGFkZGVkIHdpdGggemVyb3MgaWYgbmVlZGVkLgorICAgICAgICBpZiAoZGVjaW1hbF9wb2ludCA8
PSAwKSB7CisgICAgICAgICAgICAvLyAiMC4wMDAwMGRlY2ltYWxfcmVwIi4KKyAgICAgICAgICAg
IHJlc3VsdF9idWlsZGVyLT5BZGRDaGFyYWN0ZXIoJzAnKTsKKyAgICAgICAgICAgIGlmIChkaWdp
dHNfYWZ0ZXJfcG9pbnQgPiAwKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFk
ZENoYXJhY3RlcignLicpOworICAgICAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRQYWRk
aW5nKCcwJywgLWRlY2ltYWxfcG9pbnQpOworICAgICAgICAgICAgICAgIEFTU0VSVChsZW5ndGgg
PD0gZGlnaXRzX2FmdGVyX3BvaW50IC0gKC1kZWNpbWFsX3BvaW50KSk7CisgICAgICAgICAgICAg
ICAgcmVzdWx0X2J1aWxkZXItPkFkZFN1YnN0cmluZyhkZWNpbWFsX2RpZ2l0cywgbGVuZ3RoKTsK
KyAgICAgICAgICAgICAgICBpbnQgcmVtYWluaW5nX2RpZ2l0cyA9IGRpZ2l0c19hZnRlcl9wb2lu
dCAtICgtZGVjaW1hbF9wb2ludCkgLSBsZW5ndGg7CisgICAgICAgICAgICAgICAgcmVzdWx0X2J1
aWxkZXItPkFkZFBhZGRpbmcoJzAnLCByZW1haW5pbmdfZGlnaXRzKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIGlmIChkZWNpbWFsX3BvaW50ID49IGxlbmd0aCkgeworICAgICAgICAg
ICAgLy8gImRlY2ltYWxfcmVwMDAwMC4wMDAwMCIgb3IgImRlY2ltYWxfcmVwLjAwMDAiCisgICAg
ICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkU3Vic3RyaW5nKGRlY2ltYWxfZGlnaXRzLCBsZW5n
dGgpOworICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZFBhZGRpbmcoJzAnLCBkZWNpbWFs
X3BvaW50IC0gbGVuZ3RoKTsKKyAgICAgICAgICAgIGlmIChkaWdpdHNfYWZ0ZXJfcG9pbnQgPiAw
KSB7CisgICAgICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcignLicpOwor
ICAgICAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRQYWRkaW5nKCcwJywgZGlnaXRzX2Fm
dGVyX3BvaW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IC8vICJkZWNpbWEubF9yZXAwMDAiCisgICAgICAgICAgICBBU1NFUlQoZGlnaXRzX2FmdGVyX3Bv
aW50ID4gMCk7CisgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkU3Vic3RyaW5nKGRlY2lt
YWxfZGlnaXRzLCBkZWNpbWFsX3BvaW50KTsKKyAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5B
ZGRDaGFyYWN0ZXIoJy4nKTsKKyAgICAgICAgICAgIEFTU0VSVChsZW5ndGggLSBkZWNpbWFsX3Bv
aW50IDw9IGRpZ2l0c19hZnRlcl9wb2ludCk7CisgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+
QWRkU3Vic3RyaW5nKCZkZWNpbWFsX2RpZ2l0c1tkZWNpbWFsX3BvaW50XSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoIC0gZGVjaW1hbF9wb2ludCk7Cisg
ICAgICAgICAgICBpbnQgcmVtYWluaW5nX2RpZ2l0cyA9IGRpZ2l0c19hZnRlcl9wb2ludCAtIChs
ZW5ndGggLSBkZWNpbWFsX3BvaW50KTsKKyAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRQ
YWRkaW5nKCcwJywgcmVtYWluaW5nX2RpZ2l0cyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRp
Z2l0c19hZnRlcl9wb2ludCA9PSAwKSB7CisgICAgICAgICAgICBpZiAoKGZsYWdzXyAmIEVNSVRf
VFJBSUxJTkdfREVDSU1BTF9QT0lOVCkgIT0gMCkgeworICAgICAgICAgICAgICAgIHJlc3VsdF9i
dWlsZGVyLT5BZGRDaGFyYWN0ZXIoJy4nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
ICgoZmxhZ3NfICYgRU1JVF9UUkFJTElOR19aRVJPX0FGVEVSX1BPSU5UKSAhPSAwKSB7CisgICAg
ICAgICAgICAgICAgcmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcignMCcpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIGJvb2wgRG91YmxlVG9TdHJp
bmdDb252ZXJ0ZXI6OlRvU2hvcnRlc3QoZG91YmxlIHZhbHVlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVpbGRlciogcmVzdWx0X2J1aWxkZXIp
IGNvbnN0IHsKKyAgICAgICAgaWYgKERvdWJsZSh2YWx1ZSkuSXNTcGVjaWFsKCkpIHsKKyAgICAg
ICAgICAgIHJldHVybiBIYW5kbGVTcGVjaWFsVmFsdWVzKHZhbHVlLCByZXN1bHRfYnVpbGRlcik7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludCBkZWNpbWFsX3BvaW50OworICAgICAg
ICBib29sIHNpZ247CisgICAgICAgIGNvbnN0IGludCBrRGVjaW1hbFJlcENhcGFjaXR5ID0ga0Jh
c2UxME1heGltYWxMZW5ndGggKyAxOworICAgICAgICBjaGFyIGRlY2ltYWxfcmVwW2tEZWNpbWFs
UmVwQ2FwYWNpdHldOworICAgICAgICBpbnQgZGVjaW1hbF9yZXBfbGVuZ3RoOworICAgICAgICAK
KyAgICAgICAgRG91YmxlVG9Bc2NpaSh2YWx1ZSwgU0hPUlRFU1QsIDAsIGRlY2ltYWxfcmVwLCBr
RGVjaW1hbFJlcENhcGFjaXR5LAorICAgICAgICAgICAgICAgICAgICAgICZzaWduLCAmZGVjaW1h
bF9yZXBfbGVuZ3RoLCAmZGVjaW1hbF9wb2ludCk7CisgICAgICAgIAorICAgICAgICBib29sIHVu
aXF1ZV96ZXJvID0gKGZsYWdzXyAmIFVOSVFVRV9aRVJPKSAhPSAwOworICAgICAgICBpZiAoc2ln
biAmJiAodmFsdWUgIT0gMC4wIHx8ICF1bmlxdWVfemVybykpIHsKKyAgICAgICAgICAgIHJlc3Vs
dF9idWlsZGVyLT5BZGRDaGFyYWN0ZXIoJy0nKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgaW50IGV4cG9uZW50ID0gZGVjaW1hbF9wb2ludCAtIDE7CisgICAgICAgIGlmICgoZGVjaW1h
bF9pbl9zaG9ydGVzdF9sb3dfIDw9IGV4cG9uZW50KSAmJgorICAgICAgICAgICAgKGV4cG9uZW50
IDwgZGVjaW1hbF9pbl9zaG9ydGVzdF9oaWdoXykpIHsKKyAgICAgICAgICAgIENyZWF0ZURlY2lt
YWxSZXByZXNlbnRhdGlvbihkZWNpbWFsX3JlcCwgZGVjaW1hbF9yZXBfbGVuZ3RoLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2ltYWxfcG9pbnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF4KDAsIGRlY2ltYWxfcmVwX2xlbmd0
aCAtIGRlY2ltYWxfcG9pbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdF9idWlsZGVyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIENyZWF0
ZUV4cG9uZW50aWFsUmVwcmVzZW50YXRpb24oZGVjaW1hbF9yZXAsIGRlY2ltYWxfcmVwX2xlbmd0
aCwgZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdF9idWlsZGVyKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgCisgICAgCisgICAgYm9vbCBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcjo6VG9GaXhlZChk
b3VibGUgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25zdCB7CisgICAgICAgIEFT
U0VSVChrTWF4Rml4ZWREaWdpdHNCZWZvcmVQb2ludCA9PSA2MCk7CisgICAgICAgIGNvbnN0IGRv
dWJsZSBrRmlyc3ROb25GaXhlZCA9IDFlNjA7CisgICAgICAgIAorICAgICAgICBpZiAoRG91Ymxl
KHZhbHVlKS5Jc1NwZWNpYWwoKSkgeworICAgICAgICAgICAgcmV0dXJuIEhhbmRsZVNwZWNpYWxW
YWx1ZXModmFsdWUsIHJlc3VsdF9idWlsZGVyKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgaWYgKHJlcXVlc3RlZF9kaWdpdHMgPiBrTWF4Rml4ZWREaWdpdHNBZnRlclBvaW50KSByZXR1
cm4gZmFsc2U7CisgICAgICAgIGlmICh2YWx1ZSA+PSBrRmlyc3ROb25GaXhlZCB8fCB2YWx1ZSA8
PSAta0ZpcnN0Tm9uRml4ZWQpIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIC8vIEZp
bmQgYSBzdWZmaWNpZW50bHkgcHJlY2lzZSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIG4uCisg
ICAgICAgIGludCBkZWNpbWFsX3BvaW50OworICAgICAgICBib29sIHNpZ247CisgICAgICAgIC8v
IEFkZCBzcGFjZSBmb3IgdGhlICdcMCcgYnl0ZS4KKyAgICAgICAgY29uc3QgaW50IGtEZWNpbWFs
UmVwQ2FwYWNpdHkgPQorICAgICAgICBrTWF4Rml4ZWREaWdpdHNCZWZvcmVQb2ludCArIGtNYXhG
aXhlZERpZ2l0c0FmdGVyUG9pbnQgKyAxOworICAgICAgICBjaGFyIGRlY2ltYWxfcmVwW2tEZWNp
bWFsUmVwQ2FwYWNpdHldOworICAgICAgICBpbnQgZGVjaW1hbF9yZXBfbGVuZ3RoOworICAgICAg
ICBEb3VibGVUb0FzY2lpKHZhbHVlLCBGSVhFRCwgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAgICAg
ICAgICAgICAgICAgICBkZWNpbWFsX3JlcCwga0RlY2ltYWxSZXBDYXBhY2l0eSwKKyAgICAgICAg
ICAgICAgICAgICAgICAmc2lnbiwgJmRlY2ltYWxfcmVwX2xlbmd0aCwgJmRlY2ltYWxfcG9pbnQp
OworICAgICAgICAKKyAgICAgICAgYm9vbCB1bmlxdWVfemVybyA9ICgoZmxhZ3NfICYgVU5JUVVF
X1pFUk8pICE9IDApOworICAgICAgICBpZiAoc2lnbiAmJiAodmFsdWUgIT0gMC4wIHx8ICF1bmlx
dWVfemVybykpIHsKKyAgICAgICAgICAgIHJlc3VsdF9idWlsZGVyLT5BZGRDaGFyYWN0ZXIoJy0n
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQ3JlYXRlRGVjaW1hbFJlcHJlc2VudGF0
aW9uKGRlY2ltYWxfcmVwLCBkZWNpbWFsX3JlcF9sZW5ndGgsIGRlY2ltYWxfcG9pbnQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ZWRfZGlnaXRzLCByZXN1bHRf
YnVpbGRlcik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAKKyAgICBi
b29sIERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpUb0V4cG9uZW50aWFsKAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHZhbHVlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlcXVlc3RlZF9k
aWdpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
dHJpbmdCdWlsZGVyKiByZXN1bHRfYnVpbGRlcikgY29uc3QgeworICAgICAgICBpZiAoRG91Ymxl
KHZhbHVlKS5Jc1NwZWNpYWwoKSkgeworICAgICAgICAgICAgcmV0dXJuIEhhbmRsZVNwZWNpYWxW
YWx1ZXModmFsdWUsIHJlc3VsdF9idWlsZGVyKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgaWYgKHJlcXVlc3RlZF9kaWdpdHMgPCAtMSkgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAo
cmVxdWVzdGVkX2RpZ2l0cyA+IGtNYXhFeHBvbmVudGlhbERpZ2l0cykgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAKKyAgICAgICAgaW50IGRlY2ltYWxfcG9pbnQ7CisgICAgICAgIGJvb2wgc2lnbjsK
KyAgICAgICAgLy8gQWRkIHNwYWNlIGZvciBkaWdpdCBiZWZvcmUgdGhlIGRlY2ltYWwgcG9pbnQg
YW5kIHRoZSAnXDAnIGNoYXJhY3Rlci4KKyAgICAgICAgY29uc3QgaW50IGtEZWNpbWFsUmVwQ2Fw
YWNpdHkgPSBrTWF4RXhwb25lbnRpYWxEaWdpdHMgKyAyOworICAgICAgICBBU1NFUlQoa0RlY2lt
YWxSZXBDYXBhY2l0eSA+IGtCYXNlMTBNYXhpbWFsTGVuZ3RoKTsKKyAgICAgICAgY2hhciBkZWNp
bWFsX3JlcFtrRGVjaW1hbFJlcENhcGFjaXR5XTsKKyAgICAgICAgaW50IGRlY2ltYWxfcmVwX2xl
bmd0aDsKKyAgICAgICAgCisgICAgICAgIGlmIChyZXF1ZXN0ZWRfZGlnaXRzID09IC0xKSB7Cisg
ICAgICAgICAgICBEb3VibGVUb0FzY2lpKHZhbHVlLCBTSE9SVEVTVCwgMCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVjaW1hbF9yZXAsIGtEZWNpbWFsUmVwQ2FwYWNpdHksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICZzaWduLCAmZGVjaW1hbF9yZXBfbGVuZ3RoLCAmZGVjaW1hbF9w
b2ludCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBEb3VibGVUb0FzY2lpKHZhbHVl
LCBQUkVDSVNJT04sIHJlcXVlc3RlZF9kaWdpdHMgKyAxLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWNpbWFsX3JlcCwga0RlY2ltYWxSZXBDYXBhY2l0eSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgJnNpZ24sICZkZWNpbWFsX3JlcF9sZW5ndGgsICZkZWNpbWFsX3BvaW50KTsKKyAg
ICAgICAgICAgIEFTU0VSVChkZWNpbWFsX3JlcF9sZW5ndGggPD0gcmVxdWVzdGVkX2RpZ2l0cyAr
IDEpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKGludCBpID0gZGVjaW1hbF9yZXBf
bGVuZ3RoOyBpIDwgcmVxdWVzdGVkX2RpZ2l0cyArIDE7ICsraSkgeworICAgICAgICAgICAgICAg
IGRlY2ltYWxfcmVwW2ldID0gJzAnOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVjaW1h
bF9yZXBfbGVuZ3RoID0gcmVxdWVzdGVkX2RpZ2l0cyArIDE7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGJvb2wgdW5pcXVlX3plcm8gPSAoKGZsYWdzXyAmIFVOSVFVRV9aRVJPKSAhPSAw
KTsKKyAgICAgICAgaWYgKHNpZ24gJiYgKHZhbHVlICE9IDAuMCB8fCAhdW5pcXVlX3plcm8pKSB7
CisgICAgICAgICAgICByZXN1bHRfYnVpbGRlci0+QWRkQ2hhcmFjdGVyKCctJyk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGludCBleHBvbmVudCA9IGRlY2ltYWxfcG9pbnQgLSAxOwor
ICAgICAgICBDcmVhdGVFeHBvbmVudGlhbFJlcHJlc2VudGF0aW9uKGRlY2ltYWxfcmVwLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2ltYWxfcmVwX2xlbmd0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvbmVudCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfYnVpbGRlcik7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAKKyAgICBib29sIERvdWJsZVRvU3Ry
aW5nQ29udmVydGVyOjpUb1ByZWNpc2lvbihkb3VibGUgdmFsdWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHByZWNpc2lvbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyKiByZXN1bHRf
YnVpbGRlcikgY29uc3QgeworICAgICAgICBpZiAoRG91YmxlKHZhbHVlKS5Jc1NwZWNpYWwoKSkg
eworICAgICAgICAgICAgcmV0dXJuIEhhbmRsZVNwZWNpYWxWYWx1ZXModmFsdWUsIHJlc3VsdF9i
dWlsZGVyKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHByZWNpc2lvbiA8IGtN
aW5QcmVjaXNpb25EaWdpdHMgfHwgcHJlY2lzaW9uID4ga01heFByZWNpc2lvbkRpZ2l0cykgewor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAv
LyBGaW5kIGEgc3VmZmljaWVudGx5IHByZWNpc2UgZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiBu
LgorICAgICAgICBpbnQgZGVjaW1hbF9wb2ludDsKKyAgICAgICAgYm9vbCBzaWduOworICAgICAg
ICAvLyBBZGQgb25lIGZvciB0aGUgdGVybWluYXRpbmcgbnVsbCBjaGFyYWN0ZXIuCisgICAgICAg
IGNvbnN0IGludCBrRGVjaW1hbFJlcENhcGFjaXR5ID0ga01heFByZWNpc2lvbkRpZ2l0cyArIDE7
CisgICAgICAgIGNoYXIgZGVjaW1hbF9yZXBba0RlY2ltYWxSZXBDYXBhY2l0eV07CisgICAgICAg
IGludCBkZWNpbWFsX3JlcF9sZW5ndGg7CisgICAgICAgIAorICAgICAgICBEb3VibGVUb0FzY2lp
KHZhbHVlLCBQUkVDSVNJT04sIHByZWNpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICBkZWNp
bWFsX3JlcCwga0RlY2ltYWxSZXBDYXBhY2l0eSwKKyAgICAgICAgICAgICAgICAgICAgICAmc2ln
biwgJmRlY2ltYWxfcmVwX2xlbmd0aCwgJmRlY2ltYWxfcG9pbnQpOworICAgICAgICBBU1NFUlQo
ZGVjaW1hbF9yZXBfbGVuZ3RoIDw9IHByZWNpc2lvbik7CisgICAgICAgIAorICAgICAgICBib29s
IHVuaXF1ZV96ZXJvID0gKChmbGFnc18gJiBVTklRVUVfWkVSTykgIT0gMCk7CisgICAgICAgIGlm
IChzaWduICYmICh2YWx1ZSAhPSAwLjAgfHwgIXVuaXF1ZV96ZXJvKSkgeworICAgICAgICAgICAg
cmVzdWx0X2J1aWxkZXItPkFkZENoYXJhY3RlcignLScpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICAvLyBUaGUgZXhwb25lbnQgaWYgd2UgcHJpbnQgdGhlIG51bWJlciBhcyB4Lnh4ZXl5
eS4gVGhhdCBpcyB3aXRoIHRoZQorICAgICAgICAvLyBkZWNpbWFsIHBvaW50IGFmdGVyIHRoZSBm
aXJzdCBkaWdpdC4KKyAgICAgICAgaW50IGV4cG9uZW50ID0gZGVjaW1hbF9wb2ludCAtIDE7Cisg
ICAgICAgIAorICAgICAgICBpbnQgZXh0cmFfemVybyA9ICgoZmxhZ3NfICYgRU1JVF9UUkFJTElO
R19aRVJPX0FGVEVSX1BPSU5UKSAhPSAwKSA/IDEgOiAwOworICAgICAgICBpZiAoKC1kZWNpbWFs
X3BvaW50ICsgMSA+IG1heF9sZWFkaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2Rl
XykgfHwKKyAgICAgICAgICAgIChkZWNpbWFsX3BvaW50IC0gcHJlY2lzaW9uICsgZXh0cmFfemVy
byA+CisgICAgICAgICAgICAgbWF4X3RyYWlsaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lv
bl9tb2RlXykpIHsKKyAgICAgICAgICAgICAgICAvLyBGaWxsIGJ1ZmZlciB0byBjb250YWluICdw
cmVjaXNpb24nIGRpZ2l0cy4KKyAgICAgICAgICAgICAgICAvLyBVc3VhbGx5IHRoZSBidWZmZXIg
aXMgYWxyZWFkeSBhdCB0aGUgY29ycmVjdCBsZW5ndGgsIGJ1dCAnRG91YmxlVG9Bc2NpaScKKyAg
ICAgICAgICAgICAgICAvLyBpcyBhbGxvd2VkIHRvIHJldHVybiBsZXNzIGNoYXJhY3RlcnMuCisg
ICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IGRlY2ltYWxfcmVwX2xlbmd0aDsgaSA8IHByZWNp
c2lvbjsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGRlY2ltYWxfcmVwW2ldID0gJzAnOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBDcmVh
dGVFeHBvbmVudGlhbFJlcHJlc2VudGF0aW9uKGRlY2ltYWxfcmVwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb25lbnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfYnVpbGRlcik7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIENyZWF0ZURlY2ltYWxSZXByZXNl
bnRhdGlvbihkZWNpbWFsX3JlcCwgZGVjaW1hbF9yZXBfbGVuZ3RoLCBkZWNpbWFsX3BvaW50LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXgoMCwgcHJlY2lz
aW9uIC0gZGVjaW1hbF9wb2ludCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdF9idWlsZGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIAorICAgIAorICAgIHN0YXRpYyBCaWdudW1EdG9hTW9kZSBEdG9h
VG9CaWdudW1EdG9hTW9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRG91YmxlVG9TdHJpbmdDb252ZXJ0ZXI6OkR0b2FNb2RlIGR0b2FfbW9kZSkgewor
ICAgICAgICBzd2l0Y2ggKGR0b2FfbW9kZSkgeworICAgICAgICAgICAgY2FzZSBEb3VibGVUb1N0
cmluZ0NvbnZlcnRlcjo6U0hPUlRFU1Q6ICByZXR1cm4gQklHTlVNX0RUT0FfU0hPUlRFU1Q7Cisg
ICAgICAgICAgICBjYXNlIERvdWJsZVRvU3RyaW5nQ29udmVydGVyOjpGSVhFRDogICAgIHJldHVy
biBCSUdOVU1fRFRPQV9GSVhFRDsKKyAgICAgICAgICAgIGNhc2UgRG91YmxlVG9TdHJpbmdDb252
ZXJ0ZXI6OlBSRUNJU0lPTjogcmV0dXJuIEJJR05VTV9EVE9BX1BSRUNJU0lPTjsKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gQklHTlVNX0RUT0FfU0hPUlRFU1Q7ICAvLyBUbyBzaWxlbmNlIGNvbXBpbGVy
LgorICAgICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIHZvaWQgRG91YmxlVG9TdHJpbmdD
b252ZXJ0ZXI6OkRvdWJsZVRvQXNjaWkoZG91YmxlIHYsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBEdG9hTW9kZSBtb2RlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlcXVlc3RlZF9kaWdpdHMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBidWZm
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
YnVmZmVyX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wqIHNpZ24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQqIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCogcG9pbnQpIHsKKyAgICAgICAgVmVjdG9yPGNoYXI+IHZlY3Rv
cihidWZmZXIsIGJ1ZmZlcl9sZW5ndGgpOworICAgICAgICBBU1NFUlQoIURvdWJsZSh2KS5Jc1Nw
ZWNpYWwoKSk7CisgICAgICAgIEFTU0VSVChtb2RlID09IFNIT1JURVNUIHx8IHJlcXVlc3RlZF9k
aWdpdHMgPj0gMCk7CisgICAgICAgIAorICAgICAgICBpZiAoRG91YmxlKHYpLlNpZ24oKSA8IDAp
IHsKKyAgICAgICAgICAgICpzaWduID0gdHJ1ZTsKKyAgICAgICAgICAgIHYgPSAtdjsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICpzaWduID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGlmIChtb2RlID09IFBSRUNJU0lPTiAmJiByZXF1ZXN0ZWRfZGlnaXRzID09
IDApIHsKKyAgICAgICAgICAgIHZlY3RvclswXSA9ICdcMCc7CisgICAgICAgICAgICAqbGVuZ3Ro
ID0gMDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aWYgKHYgPT0gMCkgeworICAgICAgICAgICAgdmVjdG9yWzBdID0gJzAnOworICAgICAgICAgICAg
dmVjdG9yWzFdID0gJ1wwJzsKKyAgICAgICAgICAgICpsZW5ndGggPSAxOworICAgICAgICAgICAg
KnBvaW50ID0gMTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgYm9vbCBmYXN0X3dvcmtlZDsKKyAgICAgICAgc3dpdGNoIChtb2RlKSB7CisgICAgICAg
ICAgICBjYXNlIFNIT1JURVNUOgorICAgICAgICAgICAgICAgIGZhc3Rfd29ya2VkID0gRmFzdER0
b2EodiwgRkFTVF9EVE9BX1NIT1JURVNULCAwLCB2ZWN0b3IsIGxlbmd0aCwgcG9pbnQpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBGSVhFRDoKKyAgICAgICAgICAg
ICAgICBmYXN0X3dvcmtlZCA9IEZhc3RGaXhlZER0b2EodiwgcmVxdWVzdGVkX2RpZ2l0cywgdmVj
dG9yLCBsZW5ndGgsIHBvaW50KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgUFJFQ0lTSU9OOgorICAgICAgICAgICAgICAgIGZhc3Rfd29ya2VkID0gRmFzdER0b2Eo
diwgRkFTVF9EVE9BX1BSRUNJU0lPTiwgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3RvciwgbGVuZ3RoLCBwb2ludCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgZmFzdF93b3JrZWQgPSBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoZmFzdF93b3JrZWQpIHJldHVybjsKKyAgICAgICAgCisgICAgICAg
IC8vIElmIHRoZSBmYXN0IGR0b2EgZGlkbid0IHN1Y2NlZWQgdXNlIHRoZSBzbG93ZXIgYmlnbnVt
IHZlcnNpb24uCisgICAgICAgIEJpZ251bUR0b2FNb2RlIGJpZ251bV9tb2RlID0gRHRvYVRvQmln
bnVtRHRvYU1vZGUobW9kZSk7CisgICAgICAgIEJpZ251bUR0b2EodiwgYmlnbnVtX21vZGUsIHJl
cXVlc3RlZF9kaWdpdHMsIHZlY3RvciwgbGVuZ3RoLCBwb2ludCk7CisgICAgICAgIHZlY3Rvclsq
bGVuZ3RoXSA9ICdcMCc7CisgICAgfQorICAgIAorICAgIAorICAgIC8vIENvbnN1bWVzIHRoZSBn
aXZlbiBzdWJzdHJpbmcgZnJvbSB0aGUgaXRlcmF0b3IuCisgICAgLy8gUmV0dXJucyBmYWxzZSwg
aWYgdGhlIHN1YnN0cmluZyBkb2VzIG5vdCBtYXRjaC4KKyAgICBzdGF0aWMgYm9vbCBDb25zdW1l
U3ViU3RyaW5nKGNvbnN0IGNoYXIqKiBjdXJyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciogZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciogc3Vic3RyaW5nKSB7CisgICAgICAgIEFTU0VSVCgqKmN1cnJlbnQgPT0g
KnN1YnN0cmluZyk7CisgICAgICAgIGZvciAoc3Vic3RyaW5nKys7ICpzdWJzdHJpbmcgIT0gJ1ww
Jzsgc3Vic3RyaW5nKyspIHsKKyAgICAgICAgICAgICsrKmN1cnJlbnQ7CisgICAgICAgICAgICBp
ZiAoKmN1cnJlbnQgPT0gZW5kIHx8ICoqY3VycmVudCAhPSAqc3Vic3RyaW5nKSByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICAgICAgKysqY3VycmVudDsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIAorICAgIAorICAgIC8vIE1heGltdW0gbnVtYmVyIG9mIHNpZ25pZmljYW50
IGRpZ2l0cyBpbiBkZWNpbWFsIHJlcHJlc2VudGF0aW9uLgorICAgIC8vIFRoZSBsb25nZXN0IHBv
c3NpYmxlIGRvdWJsZSBpbiBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIGlzCisgICAgLy8gKDJeNTMg
LSAxKSAqIDIgXiAtMTA3NCB0aGF0IGlzICgyIF4gNTMgLSAxKSAqIDUgXiAxMDc0IC8gMTAgXiAx
MDc0CisgICAgLy8gKDc2OCBkaWdpdHMpLiBJZiB3ZSBwYXJzZSBhIG51bWJlciB3aG9zZSBmaXJz
dCBkaWdpdHMgYXJlIGVxdWFsIHRvIGEKKyAgICAvLyBtZWFuIG9mIDIgYWRqYWNlbnQgZG91Ymxl
cyAodGhhdCBjb3VsZCBoYXZlIHVwIHRvIDc2OSBkaWdpdHMpIHRoZSByZXN1bHQKKyAgICAvLyBt
dXN0IGJlIHJvdW5kZWQgdG8gdGhlIGJpZ2dlciBvbmUgdW5sZXNzIHRoZSB0YWlsIGNvbnNpc3Rz
IG9mIHplcm9zLCBzbworICAgIC8vIHdlIGRvbid0IG5lZWQgdG8gcHJlc2VydmUgYWxsIHRoZSBk
aWdpdHMuCisgICAgY29uc3QgaW50IGtNYXhTaWduaWZpY2FudERpZ2l0cyA9IDc3MjsKKyAgICAK
KyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgYSBub25zcGFjZSBmb3VuZCBhbmQgZmFsc2Ug
aWYgdGhlIGVuZCBoYXMgcmVhY2hlZC4KKyAgICBzdGF0aWMgaW5saW5lIGJvb2wgQWR2YW5jZVRv
Tm9uc3BhY2UoY29uc3QgY2hhcioqIGN1cnJlbnQsIGNvbnN0IGNoYXIqIGVuZCkgeworICAgICAg
ICB3aGlsZSAoKmN1cnJlbnQgIT0gZW5kKSB7CisgICAgICAgICAgICBpZiAoKipjdXJyZW50ICE9
ICcgJykgcmV0dXJuIHRydWU7CisgICAgICAgICAgICArKypjdXJyZW50OworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgCisgICAgc3RhdGljIGJvb2wg
aXNEaWdpdChpbnQgeCwgaW50IHJhZGl4KSB7CisgICAgICAgIHJldHVybiAoeCA+PSAnMCcgJiYg
eCA8PSAnOScgJiYgeCA8ICcwJyArIHJhZGl4KQorICAgICAgICB8fCAocmFkaXggPiAxMCAmJiB4
ID49ICdhJyAmJiB4IDwgJ2EnICsgcmFkaXggLSAxMCkKKyAgICAgICAgfHwgKHJhZGl4ID4gMTAg
JiYgeCA+PSAnQScgJiYgeCA8ICdBJyArIHJhZGl4IC0gMTApOworICAgIH0KKyAgICAKKyAgICAK
KyAgICBzdGF0aWMgZG91YmxlIFNpZ25lZFplcm8oYm9vbCBzaWduKSB7CisgICAgICAgIHJldHVy
biBzaWduID8gLTAuMCA6IDAuMDsKKyAgICB9CisgICAgCisgICAgCisgICAgLy8gUGFyc2luZyBp
bnRlZ2VycyB3aXRoIHJhZGl4IDIsIDQsIDgsIDE2LCAzMi4gQXNzdW1lcyBjdXJyZW50ICE9IGVu
ZC4KKyAgICB0ZW1wbGF0ZSA8aW50IHJhZGl4X2xvZ18yPgorICAgIHN0YXRpYyBkb3VibGUgUmFk
aXhTdHJpbmdUb0RvdWJsZShjb25zdCBjaGFyKiBjdXJyZW50LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBlbmQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgc2lnbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBhbGxvd190cmFpbGluZ19qdW5rLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkb3VibGUganVua19zdHJpbmdfdmFsdWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKiB0cmFpbGluZ19wb2ludGVy
KSB7CisgICAgICAgIEFTU0VSVChjdXJyZW50ICE9IGVuZCk7CisgICAgICAgIAorICAgICAgICAv
LyBTa2lwIGxlYWRpbmcgMHMuCisgICAgICAgIHdoaWxlICgqY3VycmVudCA9PSAnMCcpIHsKKyAg
ICAgICAgICAgICsrY3VycmVudDsKKyAgICAgICAgICAgIGlmIChjdXJyZW50ID09IGVuZCkgewor
ICAgICAgICAgICAgICAgICp0cmFpbGluZ19wb2ludGVyID0gZW5kOworICAgICAgICAgICAgICAg
IHJldHVybiBTaWduZWRaZXJvKHNpZ24pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBpbnQ2NF90IG51bWJlciA9IDA7CisgICAgICAgIGludCBleHBvbmVudCA9
IDA7CisgICAgICAgIGNvbnN0IGludCByYWRpeCA9ICgxIDw8IHJhZGl4X2xvZ18yKTsKKyAgICAg
ICAgCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGludCBkaWdpdDsKKyAgICAgICAgICAgIGlm
ICgqY3VycmVudCA+PSAnMCcgJiYgKmN1cnJlbnQgPD0gJzknICYmICpjdXJyZW50IDwgJzAnICsg
cmFkaXgpIHsKKyAgICAgICAgICAgICAgICBkaWdpdCA9IHN0YXRpY19jYXN0PGNoYXI+KCpjdXJy
ZW50KSAtICcwJzsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocmFkaXggPiAxMCAmJiAqY3VycmVu
dCA+PSAnYScgJiYgKmN1cnJlbnQgPCAnYScgKyByYWRpeCAtIDEwKSB7CisgICAgICAgICAgICAg
ICAgZGlnaXQgPSBzdGF0aWNfY2FzdDxjaGFyPigqY3VycmVudCkgLSAnYScgKyAxMDsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAocmFkaXggPiAxMCAmJiAqY3VycmVudCA+PSAnQScgJiYgKmN1cnJl
bnQgPCAnQScgKyByYWRpeCAtIDEwKSB7CisgICAgICAgICAgICAgICAgZGlnaXQgPSBzdGF0aWNf
Y2FzdDxjaGFyPigqY3VycmVudCkgLSAnQScgKyAxMDsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGFsbG93X3RyYWlsaW5nX2p1bmsgfHwgIUFkdmFuY2VUb05vbnNw
YWNlKCZjdXJyZW50LCBlbmQpKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0cmlu
Z192YWx1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG51bWJlciA9IG51bWJlciAqIHJhZGl4ICsgZGlnaXQ7CisgICAgICAgICAg
ICBpbnQgb3ZlcmZsb3cgPSBzdGF0aWNfY2FzdDxpbnQ+KG51bWJlciA+PiA1Myk7CisgICAgICAg
ICAgICBpZiAob3ZlcmZsb3cgIT0gMCkgeworICAgICAgICAgICAgICAgIC8vIE92ZXJmbG93IG9j
Y3VycmVkLiBOZWVkIHRvIGRldGVybWluZSB3aGljaCBkaXJlY3Rpb24gdG8gcm91bmQgdGhlCisg
ICAgICAgICAgICAgICAgLy8gcmVzdWx0LgorICAgICAgICAgICAgICAgIGludCBvdmVyZmxvd19i
aXRzX2NvdW50ID0gMTsKKyAgICAgICAgICAgICAgICB3aGlsZSAob3ZlcmZsb3cgPiAxKSB7Cisg
ICAgICAgICAgICAgICAgICAgIG92ZXJmbG93X2JpdHNfY291bnQrKzsKKyAgICAgICAgICAgICAg
ICAgICAgb3ZlcmZsb3cgPj49IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGludCBkcm9wcGVkX2JpdHNfbWFzayA9ICgoMSA8PCBvdmVyZmxv
d19iaXRzX2NvdW50KSAtIDEpOworICAgICAgICAgICAgICAgIGludCBkcm9wcGVkX2JpdHMgPSBz
dGF0aWNfY2FzdDxpbnQ+KG51bWJlcikgJiBkcm9wcGVkX2JpdHNfbWFzazsKKyAgICAgICAgICAg
ICAgICBudW1iZXIgPj49IG92ZXJmbG93X2JpdHNfY291bnQ7CisgICAgICAgICAgICAgICAgZXhw
b25lbnQgPSBvdmVyZmxvd19iaXRzX2NvdW50OworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGJvb2wgemVyb190YWlsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB3aGlsZSAodHJ1
ZSkgeworICAgICAgICAgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgICAgICAgICAgICAg
IGlmIChjdXJyZW50ID09IGVuZCB8fCAhaXNEaWdpdCgqY3VycmVudCwgcmFkaXgpKSBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgemVyb190YWlsID0gemVyb190YWlsICYmICpjdXJyZW50ID09
ICcwJzsKKyAgICAgICAgICAgICAgICAgICAgZXhwb25lbnQgKz0gcmFkaXhfbG9nXzI7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghYWxs
b3dfdHJhaWxpbmdfanVuayAmJiBBZHZhbmNlVG9Ob25zcGFjZSgmY3VycmVudCwgZW5kKSkgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWU7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGludCBtaWRkbGVfdmFs
dWUgPSAoMSA8PCAob3ZlcmZsb3dfYml0c19jb3VudCAtIDEpKTsKKyAgICAgICAgICAgICAgICBp
ZiAoZHJvcHBlZF9iaXRzID4gbWlkZGxlX3ZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIG51
bWJlcisrOyAgLy8gUm91bmRpbmcgdXAuCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkcm9w
cGVkX2JpdHMgPT0gbWlkZGxlX3ZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFJvdW5k
aW5nIHRvIGV2ZW4gdG8gY29uc2lzdGVuY3kgd2l0aCBkZWNpbWFsczogaGFsZi13YXkgY2FzZSBy
b3VuZHMKKyAgICAgICAgICAgICAgICAgICAgLy8gdXAgaWYgc2lnbmlmaWNhbnQgcGFydCBpcyBv
ZGQgYW5kIGRvd24gb3RoZXJ3aXNlLgorICAgICAgICAgICAgICAgICAgICBpZiAoKG51bWJlciAm
IDEpICE9IDAgfHwgIXplcm9fdGFpbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVy
Kys7ICAvLyBSb3VuZGluZyB1cC4KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBSb3VuZGluZyB1cCBt
YXkgY2F1c2Ugb3ZlcmZsb3cuCisgICAgICAgICAgICAgICAgaWYgKChudW1iZXIgJiAoKGludDY0
X3QpMSA8PCA1MykpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZXhwb25lbnQrKzsKKyAg
ICAgICAgICAgICAgICAgICAgbnVtYmVyID4+PSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICsrY3VycmVudDsK
KyAgICAgICAgfSB3aGlsZSAoY3VycmVudCAhPSBlbmQpOworICAgICAgICAKKyAgICAgICAgQVNT
RVJUKG51bWJlciA8ICgoaW50NjRfdCkxIDw8IDUzKSk7CisgICAgICAgIEFTU0VSVChzdGF0aWNf
Y2FzdDxpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KG51bWJlcikpID09IG51bWJlcik7Cisg
ICAgICAgIAorICAgICAgICAqdHJhaWxpbmdfcG9pbnRlciA9IGN1cnJlbnQ7CisgICAgICAgIAor
ICAgICAgICBpZiAoZXhwb25lbnQgPT0gMCkgeworICAgICAgICAgICAgaWYgKHNpZ24pIHsKKyAg
ICAgICAgICAgICAgICBpZiAobnVtYmVyID09IDApIHJldHVybiAtMC4wOworICAgICAgICAgICAg
ICAgIG51bWJlciA9IC1udW1iZXI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8ZG91YmxlPihudW1iZXIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBBU1NFUlQobnVtYmVyICE9IDApOworICAgICAgICByZXR1cm4gRG91YmxlKERpeUZwKG51bWJl
ciwgZXhwb25lbnQpKS52YWx1ZSgpOworICAgIH0KKyAgICAKKyAgICAKKyAgICBkb3VibGUgU3Ry
aW5nVG9Eb3VibGVDb252ZXJ0ZXI6OlN0cmluZ1RvRG91YmxlKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogaW5wdXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3Ro
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
KiBwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCkgeworICAgICAgICBjb25zdCBjaGFyKiBjdXJy
ZW50ID0gaW5wdXQ7CisgICAgICAgIGNvbnN0IGNoYXIqIGVuZCA9IGlucHV0ICsgbGVuZ3RoOwor
ICAgICAgICAKKyAgICAgICAgKnByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50ID0gMDsKKyAgICAg
ICAgCisgICAgICAgIGNvbnN0IGJvb2wgYWxsb3dfdHJhaWxpbmdfanVuayA9IChmbGFnc18gJiBB
TExPV19UUkFJTElOR19KVU5LKSAhPSAwOworICAgICAgICBjb25zdCBib29sIGFsbG93X2xlYWRp
bmdfc3BhY2VzID0gKGZsYWdzXyAmIEFMTE9XX0xFQURJTkdfU1BBQ0VTKSAhPSAwOworICAgICAg
ICBjb25zdCBib29sIGFsbG93X3RyYWlsaW5nX3NwYWNlcyA9IChmbGFnc18gJiBBTExPV19UUkFJ
TElOR19TUEFDRVMpICE9IDA7CisgICAgICAgIGNvbnN0IGJvb2wgYWxsb3dfc3BhY2VzX2FmdGVy
X3NpZ24gPSAoZmxhZ3NfICYgQUxMT1dfU1BBQ0VTX0FGVEVSX1NJR04pICE9IDA7CisgICAgICAg
IAorICAgICAgICAvLyBUbyBtYWtlIHN1cmUgdGhhdCBpdGVyYXRvciBkZXJlZmVyZW5jaW5nIGlz
IHZhbGlkIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgLy8gY29udmVudGlvbiBpcyB1c2VkOgorICAg
ICAgICAvLyAxLiBFYWNoICcrK2N1cnJlbnQnIHN0YXRlbWVudCBpcyBmb2xsb3dlZCBieSBjaGVj
ayBmb3IgZXF1YWxpdHkgdG8gJ2VuZCcuCisgICAgICAgIC8vIDIuIElmIEFkdmFuY2VUb05vbnNw
YWNlIHJldHVybmVkIGZhbHNlIHRoZW4gY3VycmVudCA9PSBlbmQuCisgICAgICAgIC8vIDMuIElm
ICdjdXJyZW50JyBiZWNvbWVzIGVxdWFsIHRvICdlbmQnIHRoZSBmdW5jdGlvbiByZXR1cm5zIG9y
IGdvZXMgdG8KKyAgICAgICAgLy8gJ3BhcnNpbmdfZG9uZScuCisgICAgICAgIC8vIDQuICdjdXJy
ZW50JyBpcyBub3QgZGVyZWZlcmVuY2VkIGFmdGVyIHRoZSAncGFyc2luZ19kb25lJyBsYWJlbC4K
KyAgICAgICAgLy8gNS4gQ29kZSBiZWZvcmUgJ3BhcnNpbmdfZG9uZScgbWF5IHJlbHkgb24gJ2N1
cnJlbnQgIT0gZW5kJy4KKyAgICAgICAgaWYgKGN1cnJlbnQgPT0gZW5kKSByZXR1cm4gZW1wdHlf
c3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgCisgICAgICAgIGlmIChhbGxvd19sZWFkaW5nX3NwYWNl
cyB8fCBhbGxvd190cmFpbGluZ19zcGFjZXMpIHsKKyAgICAgICAgICAgIGlmICghQWR2YW5jZVRv
Tm9uc3BhY2UoJmN1cnJlbnQsIGVuZCkpIHsKKyAgICAgICAgICAgICAgICAqcHJvY2Vzc2VkX2No
YXJhY3RlcnNfY291bnQgPSBjdXJyZW50IC0gaW5wdXQ7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGVtcHR5X3N0cmluZ192YWx1ZV87CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWFs
bG93X2xlYWRpbmdfc3BhY2VzICYmIChpbnB1dCAhPSBjdXJyZW50KSkgeworICAgICAgICAgICAg
ICAgIC8vIE5vIGxlYWRpbmcgc3BhY2VzIGFsbG93ZWQsIGJ1dCBBZHZhbmNlVG9Ob25zcGFjZSBt
b3ZlZCBmb3J3YXJkLgorICAgICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBsb25n
ZXN0IGZvcm0gb2Ygc2ltcGxpZmllZCBudW1iZXIgaXM6ICItPHNpZ25pZmljYW50IGRpZ2l0cz4u
MWVYWFhcMCIuCisgICAgICAgIGNvbnN0IGludCBrQnVmZmVyU2l6ZSA9IGtNYXhTaWduaWZpY2Fu
dERpZ2l0cyArIDEwOworICAgICAgICBjaGFyIGJ1ZmZlcltrQnVmZmVyU2l6ZV07ICAvLyBOT0xJ
TlQ6IHNpemUgaXMga25vd24gYXQgY29tcGlsZSB0aW1lLgorICAgICAgICBpbnQgYnVmZmVyX3Bv
cyA9IDA7CisgICAgICAgIAorICAgICAgICAvLyBFeHBvbmVudCB3aWxsIGJlIGFkanVzdGVkIGlm
IGluc2lnbmlmaWNhbnQgZGlnaXRzIG9mIHRoZSBpbnRlZ2VyIHBhcnQKKyAgICAgICAgLy8gb3Ig
aW5zaWduaWZpY2FudCBsZWFkaW5nIHplcm9zIG9mIHRoZSBmcmFjdGlvbmFsIHBhcnQgYXJlIGRy
b3BwZWQuCisgICAgICAgIGludCBleHBvbmVudCA9IDA7CisgICAgICAgIGludCBzaWduaWZpY2Fu
dF9kaWdpdHMgPSAwOworICAgICAgICBpbnQgaW5zaWduaWZpY2FudF9kaWdpdHMgPSAwOworICAg
ICAgICBib29sIG5vbnplcm9fZGlnaXRfZHJvcHBlZCA9IGZhbHNlOworICAgICAgICBib29sIGZy
YWN0aW9uYWxfcGFydCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgYm9vbCBzaWduID0gZmFs
c2U7CisgICAgICAgIAorICAgICAgICBpZiAoKmN1cnJlbnQgPT0gJysnIHx8ICpjdXJyZW50ID09
ICctJykgeworICAgICAgICAgICAgc2lnbiA9ICgqY3VycmVudCA9PSAnLScpOworICAgICAgICAg
ICAgKytjdXJyZW50OworICAgICAgICAgICAgY29uc3QgY2hhciogbmV4dF9ub25fc3BhY2UgPSBj
dXJyZW50OworICAgICAgICAgICAgLy8gU2tpcCBmb2xsb3dpbmcgc3BhY2VzIChpZiBhbGxvd2Vk
KS4KKyAgICAgICAgICAgIGlmICghQWR2YW5jZVRvTm9uc3BhY2UoJm5leHRfbm9uX3NwYWNlLCBl
bmQpKSByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAgICAgICAgaWYgKCFhbGxvd19z
cGFjZXNfYWZ0ZXJfc2lnbiAmJiAoY3VycmVudCAhPSBuZXh0X25vbl9zcGFjZSkpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgY3VycmVudCA9IG5leHRfbm9uX3NwYWNlOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBpZiAoaW5maW5pdHlfc3ltYm9sXyAhPSBOVUxMKSB7CisgICAgICAgICAgICBpZiAo
KmN1cnJlbnQgPT0gaW5maW5pdHlfc3ltYm9sX1swXSkgeworICAgICAgICAgICAgICAgIGlmICgh
Q29uc3VtZVN1YlN0cmluZygmY3VycmVudCwgZW5kLCBpbmZpbml0eV9zeW1ib2xfKSkgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIShhbGxvd190cmFp
bGluZ19zcGFjZXMgfHwgYWxsb3dfdHJhaWxpbmdfanVuaykgJiYgKGN1cnJlbnQgIT0gZW5kKSkg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWFsbG93X3RyYWlsaW5nX2p1bmsgJiYg
QWR2YW5jZVRvTm9uc3BhY2UoJmN1cnJlbnQsIGVuZCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgQVNTRVJUKGJ1ZmZlcl9wb3MgPT0gMCk7CisgICAgICAg
ICAgICAgICAgKnByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50ID0gY3VycmVudCAtIGlucHV0Owor
ICAgICAgICAgICAgICAgIHJldHVybiBzaWduID8gLURvdWJsZTo6SW5maW5pdHkoKSA6IERvdWJs
ZTo6SW5maW5pdHkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgaWYgKG5hbl9zeW1ib2xfICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGlmICgqY3VycmVudCA9
PSBuYW5fc3ltYm9sX1swXSkgeworICAgICAgICAgICAgICAgIGlmICghQ29uc3VtZVN1YlN0cmlu
ZygmY3VycmVudCwgZW5kLCBuYW5fc3ltYm9sXykpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgaWYgKCEoYWxsb3dfdHJhaWxpbmdfc3BhY2VzIHx8IGFsbG93
X3RyYWlsaW5nX2p1bmspICYmIChjdXJyZW50ICE9IGVuZCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgaWYgKCFhbGxvd190cmFpbGluZ19qdW5rICYmIEFkdmFuY2VUb05vbnNwYWNlKCZj
dXJyZW50LCBlbmQpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192
YWx1ZV87CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIEFTU0VSVChidWZmZXJfcG9zID09IDApOworICAgICAgICAgICAgICAgICpwcm9jZXNzZWRf
Y2hhcmFjdGVyc19jb3VudCA9IGN1cnJlbnQgLSBpbnB1dDsKKyAgICAgICAgICAgICAgICByZXR1
cm4gc2lnbiA/IC1Eb3VibGU6Ok5hTigpIDogRG91YmxlOjpOYU4oKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBsZWFkaW5nX3plcm8gPSBmYWxzZTsK
KyAgICAgICAgaWYgKCpjdXJyZW50ID09ICcwJykgeworICAgICAgICAgICAgKytjdXJyZW50Owor
ICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gZW5kKSB7CisgICAgICAgICAgICAgICAgKnByb2Nl
c3NlZF9jaGFyYWN0ZXJzX2NvdW50ID0gY3VycmVudCAtIGlucHV0OworICAgICAgICAgICAgICAg
IHJldHVybiBTaWduZWRaZXJvKHNpZ24pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBsZWFkaW5nX3plcm8gPSB0cnVlOworICAgICAgICAgICAgCisgICAgICAgICAg
ICAvLyBJdCBjb3VsZCBiZSBoZXhhZGVjaW1hbCB2YWx1ZS4KKyAgICAgICAgICAgIGlmICgoZmxh
Z3NfICYgQUxMT1dfSEVYKSAmJiAoKmN1cnJlbnQgPT0gJ3gnIHx8ICpjdXJyZW50ID09ICdYJykp
IHsKKyAgICAgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJl
bnQgPT0gZW5kIHx8ICFpc0RpZ2l0KCpjdXJyZW50LCAxNikpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsgIC8vICIweCIuCisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHRhaWxfcG9p
bnRlciA9IE5VTEw7CisgICAgICAgICAgICAgICAgZG91YmxlIHJlc3VsdCA9IFJhZGl4U3RyaW5n
VG9Eb3VibGU8ND4oY3VycmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2lnbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd190cmFpbGluZ19qdW5rLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1bmtfc3Ry
aW5nX3ZhbHVlXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmdGFpbF9wb2ludGVyKTsKKyAgICAgICAgICAgICAgICBpZiAodGFpbF9wb2lu
dGVyICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFsbG93X3RyYWlsaW5nX3Nw
YWNlcykgQWR2YW5jZVRvTm9uc3BhY2UoJnRhaWxfcG9pbnRlciwgZW5kKTsKKyAgICAgICAgICAg
ICAgICAgICAgKnByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50ID0gdGFpbF9wb2ludGVyIC0gaW5w
dXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIElnbm9yZSBsZWFkaW5n
IHplcm9zIGluIHRoZSBpbnRlZ2VyIHBhcnQuCisgICAgICAgICAgICB3aGlsZSAoKmN1cnJlbnQg
PT0gJzAnKSB7CisgICAgICAgICAgICAgICAgKytjdXJyZW50OworICAgICAgICAgICAgICAgIGlm
IChjdXJyZW50ID09IGVuZCkgeworICAgICAgICAgICAgICAgICAgICAqcHJvY2Vzc2VkX2NoYXJh
Y3RlcnNfY291bnQgPSBjdXJyZW50IC0gaW5wdXQ7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBTaWduZWRaZXJvKHNpZ24pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBvY3RhbCA9IGxlYWRpbmdfemVybyAmJiAo
ZmxhZ3NfICYgQUxMT1dfT0NUQUxTKSAhPSAwOworICAgICAgICAKKyAgICAgICAgLy8gQ29weSBz
aWduaWZpY2FudCBkaWdpdHMgb2YgdGhlIGludGVnZXIgcGFydCAoaWYgYW55KSB0byB0aGUgYnVm
ZmVyLgorICAgICAgICB3aGlsZSAoKmN1cnJlbnQgPj0gJzAnICYmICpjdXJyZW50IDw9ICc5Jykg
eworICAgICAgICAgICAgaWYgKHNpZ25pZmljYW50X2RpZ2l0cyA8IGtNYXhTaWduaWZpY2FudERp
Z2l0cykgeworICAgICAgICAgICAgICAgIEFTU0VSVChidWZmZXJfcG9zIDwga0J1ZmZlclNpemUp
OworICAgICAgICAgICAgICAgIGJ1ZmZlcltidWZmZXJfcG9zKytdID0gc3RhdGljX2Nhc3Q8Y2hh
cj4oKmN1cnJlbnQpOworICAgICAgICAgICAgICAgIHNpZ25pZmljYW50X2RpZ2l0cysrOworICAg
ICAgICAgICAgICAgIC8vIFdpbGwgbGF0ZXIgY2hlY2sgaWYgaXQncyBhbiBvY3RhbCBpbiB0aGUg
YnVmZmVyLgorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbnNpZ25pZmlj
YW50X2RpZ2l0cysrOyAgLy8gTW92ZSB0aGUgZGlnaXQgaW50byB0aGUgZXhwb25lbnRpYWwgcGFy
dC4KKyAgICAgICAgICAgICAgICBub256ZXJvX2RpZ2l0X2Ryb3BwZWQgPSBub256ZXJvX2RpZ2l0
X2Ryb3BwZWQgfHwgKmN1cnJlbnQgIT0gJzAnOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
b2N0YWwgPSBvY3RhbCAmJiAqY3VycmVudCA8ICc4JzsKKyAgICAgICAgICAgICsrY3VycmVudDsK
KyAgICAgICAgICAgIGlmIChjdXJyZW50ID09IGVuZCkgZ290byBwYXJzaW5nX2RvbmU7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChzaWduaWZpY2FudF9kaWdpdHMgPT0gMCkgewor
ICAgICAgICAgICAgb2N0YWwgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aWYgKCpjdXJyZW50ID09ICcuJykgeworICAgICAgICAgICAgaWYgKG9jdGFsICYmICFhbGxvd190
cmFpbGluZ19qdW5rKSByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAgICAgICAgaWYg
KG9jdGFsKSBnb3RvIHBhcnNpbmdfZG9uZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgKytj
dXJyZW50OworICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gZW5kKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHNpZ25pZmljYW50X2RpZ2l0cyA9PSAwICYmICFsZWFkaW5nX3plcm8pIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBnb3RvIHBhcnNpbmdfZG9uZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
IChzaWduaWZpY2FudF9kaWdpdHMgPT0gMCkgeworICAgICAgICAgICAgICAgIC8vIG9jdGFsID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgLy8gSW50ZWdlciBwYXJ0IGNvbnNpc3RzIG9mIDAgb3Ig
aXMgYWJzZW50LiBTaWduaWZpY2FudCBkaWdpdHMgc3RhcnQgYWZ0ZXIKKyAgICAgICAgICAgICAg
ICAvLyBsZWFkaW5nIHplcm9zIChpZiBhbnkpLgorICAgICAgICAgICAgICAgIHdoaWxlICgqY3Vy
cmVudCA9PSAnMCcpIHsKKyAgICAgICAgICAgICAgICAgICAgKytjdXJyZW50OworICAgICAgICAg
ICAgICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICpwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCA9IGN1cnJlbnQgLSBpbnB1dDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBTaWduZWRaZXJvKHNpZ24pOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGV4cG9uZW50LS07ICAvLyBNb3ZlIHRoaXMgMCBp
bnRvIHRoZSBleHBvbmVudC4KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIC8vIFdlIGRvbid0IGVtaXQgYSAnLicsIGJ1dCBhZGp1c3Qg
dGhlIGV4cG9uZW50IGluc3RlYWQuCisgICAgICAgICAgICBmcmFjdGlvbmFsX3BhcnQgPSB0cnVl
OworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGVyZSBpcyBhIGZyYWN0aW9uYWwgcGFy
dC4KKyAgICAgICAgICAgIHdoaWxlICgqY3VycmVudCA+PSAnMCcgJiYgKmN1cnJlbnQgPD0gJzkn
KSB7CisgICAgICAgICAgICAgICAgaWYgKHNpZ25pZmljYW50X2RpZ2l0cyA8IGtNYXhTaWduaWZp
Y2FudERpZ2l0cykgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYnVmZmVyX3BvcyA8IGtC
dWZmZXJTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2J1ZmZlcl9wb3MrK10gPSBz
dGF0aWNfY2FzdDxjaGFyPigqY3VycmVudCk7CisgICAgICAgICAgICAgICAgICAgIHNpZ25pZmlj
YW50X2RpZ2l0cysrOworICAgICAgICAgICAgICAgICAgICBleHBvbmVudC0tOworICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSBpbnNpZ25pZmlj
YW50IGRpZ2l0cyBpbiB0aGUgZnJhY3Rpb25hbCBwYXJ0LgorICAgICAgICAgICAgICAgICAgICBu
b256ZXJvX2RpZ2l0X2Ryb3BwZWQgPSBub256ZXJvX2RpZ2l0X2Ryb3BwZWQgfHwgKmN1cnJlbnQg
IT0gJzAnOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK2N1cnJlbnQ7Cisg
ICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gZW5kKSBnb3RvIHBhcnNpbmdfZG9uZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFsZWFkaW5nX3pl
cm8gJiYgZXhwb25lbnQgPT0gMCAmJiBzaWduaWZpY2FudF9kaWdpdHMgPT0gMCkgeworICAgICAg
ICAgICAgLy8gSWYgbGVhZGluZ196ZXJvcyBpcyB0cnVlIHRoZW4gdGhlIHN0cmluZyBjb250YWlu
cyB6ZXJvcy4KKyAgICAgICAgICAgIC8vIElmIGV4cG9uZW50IDwgMCB0aGVuIHN0cmluZyB3YXMg
WystXVwuMCouLi4KKyAgICAgICAgICAgIC8vIElmIHNpZ25pZmljYW50X2RpZ2l0cyAhPSAwIHRo
ZSBzdHJpbmcgaXMgbm90IGVxdWFsIHRvIDAuCisgICAgICAgICAgICAvLyBPdGhlcndpc2UgdGhl
cmUgYXJlIG5vIGRpZ2l0cyBpbiB0aGUgc3RyaW5nLgorICAgICAgICAgICAgcmV0dXJuIGp1bmtf
c3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gUGFyc2UgZXhw
b25lbnRpYWwgcGFydC4KKyAgICAgICAgaWYgKCpjdXJyZW50ID09ICdlJyB8fCAqY3VycmVudCA9
PSAnRScpIHsKKyAgICAgICAgICAgIGlmIChvY3RhbCAmJiAhYWxsb3dfdHJhaWxpbmdfanVuaykg
cmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgICAgIGlmIChvY3RhbCkgZ290byBw
YXJzaW5nX2RvbmU7CisgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgICAgICBpZiAoY3Vy
cmVudCA9PSBlbmQpIHsKKyAgICAgICAgICAgICAgICBpZiAoYWxsb3dfdHJhaWxpbmdfanVuaykg
eworICAgICAgICAgICAgICAgICAgICBnb3RvIHBhcnNpbmdfZG9uZTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVf
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNoYXIgc2ln
biA9ICcrJzsKKyAgICAgICAgICAgIGlmICgqY3VycmVudCA9PSAnKycgfHwgKmN1cnJlbnQgPT0g
Jy0nKSB7CisgICAgICAgICAgICAgICAgc2lnbiA9IHN0YXRpY19jYXN0PGNoYXI+KCpjdXJyZW50
KTsKKyAgICAgICAgICAgICAgICArK2N1cnJlbnQ7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJl
bnQgPT0gZW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChhbGxvd190cmFpbGluZ19qdW5r
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHBhcnNpbmdfZG9uZTsKKyAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqdW5r
X3N0cmluZ192YWx1ZV87CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChjdXJyZW50ID09
IGVuZCB8fCAqY3VycmVudCA8ICcwJyB8fCAqY3VycmVudCA+ICc5JykgeworICAgICAgICAgICAg
ICAgIGlmIChhbGxvd190cmFpbGluZ19qdW5rKSB7CisgICAgICAgICAgICAgICAgICAgIGdvdG8g
cGFyc2luZ19kb25lOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBjb25zdCBpbnQgbWF4X2V4cG9uZW50
ID0gSU5UX01BWCAvIDI7CisgICAgICAgICAgICBBU1NFUlQoLW1heF9leHBvbmVudCAvIDIgPD0g
ZXhwb25lbnQgJiYgZXhwb25lbnQgPD0gbWF4X2V4cG9uZW50IC8gMik7CisgICAgICAgICAgICBp
bnQgbnVtID0gMDsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAvLyBDaGVjayBv
dmVyZmxvdy4KKyAgICAgICAgICAgICAgICBpbnQgZGlnaXQgPSAqY3VycmVudCAtICcwJzsKKyAg
ICAgICAgICAgICAgICBpZiAobnVtID49IG1heF9leHBvbmVudCAvIDEwCisgICAgICAgICAgICAg
ICAgICAgICYmICEobnVtID09IG1heF9leHBvbmVudCAvIDEwICYmIGRpZ2l0IDw9IG1heF9leHBv
bmVudCAlIDEwKSkgeworICAgICAgICAgICAgICAgICAgICBudW0gPSBtYXhfZXhwb25lbnQ7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbnVtID0gbnVtICog
MTAgKyBkaWdpdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKytjdXJyZW50
OworICAgICAgICAgICAgfSB3aGlsZSAoY3VycmVudCAhPSBlbmQgJiYgKmN1cnJlbnQgPj0gJzAn
ICYmICpjdXJyZW50IDw9ICc5Jyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGV4cG9uZW50
ICs9IChzaWduID09ICctJyA/IC1udW0gOiBudW0pOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBpZiAoIShhbGxvd190cmFpbGluZ19zcGFjZXMgfHwgYWxsb3dfdHJhaWxpbmdfanVuaykg
JiYgKGN1cnJlbnQgIT0gZW5kKSkgeworICAgICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3Zh
bHVlXzsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWFsbG93X3RyYWlsaW5nX2p1bmsgJiYgQWR2
YW5jZVRvTm9uc3BhY2UoJmN1cnJlbnQsIGVuZCkpIHsKKyAgICAgICAgICAgIHJldHVybiBqdW5r
X3N0cmluZ192YWx1ZV87CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFsbG93X3RyYWlsaW5nX3Nw
YWNlcykgeworICAgICAgICAgICAgQWR2YW5jZVRvTm9uc3BhY2UoJmN1cnJlbnQsIGVuZCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgcGFyc2luZ19kb25lOgorICAgICAgICBleHBvbmVudCAr
PSBpbnNpZ25pZmljYW50X2RpZ2l0czsKKyAgICAgICAgCisgICAgICAgIGlmIChvY3RhbCkgewor
ICAgICAgICAgICAgZG91YmxlIHJlc3VsdDsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIHRhaWxf
cG9pbnRlciA9IE5VTEw7CisgICAgICAgICAgICByZXN1bHQgPSBSYWRpeFN0cmluZ1RvRG91Ymxl
PDM+KGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnVmZmVyICsgYnVmZmVyX3BvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2lnbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYWxsb3dfdHJhaWxpbmdfanVuaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAganVua19zdHJpbmdfdmFsdWVfLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmdGFpbF9wb2ludGVyKTsKKyAgICAgICAgICAgIEFTU0VSVCh0
YWlsX3BvaW50ZXIgIT0gTlVMTCk7CisgICAgICAgICAgICAqcHJvY2Vzc2VkX2NoYXJhY3RlcnNf
Y291bnQgPSBjdXJyZW50IC0gaW5wdXQ7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobm9uemVyb19kaWdpdF9kcm9wcGVkKSB7Cisg
ICAgICAgICAgICBidWZmZXJbYnVmZmVyX3BvcysrXSA9ICcxJzsKKyAgICAgICAgICAgIGV4cG9u
ZW50LS07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFTU0VSVChidWZmZXJfcG9zIDwg
a0J1ZmZlclNpemUpOworICAgICAgICBidWZmZXJbYnVmZmVyX3Bvc10gPSAnXDAnOworICAgICAg
ICAKKyAgICAgICAgZG91YmxlIGNvbnZlcnRlZCA9IFN0cnRvZChWZWN0b3I8Y29uc3QgY2hhcj4o
YnVmZmVyLCBidWZmZXJfcG9zKSwgZXhwb25lbnQpOworICAgICAgICAqcHJvY2Vzc2VkX2NoYXJh
Y3RlcnNfY291bnQgPSBjdXJyZW50IC0gaW5wdXQ7CisgICAgICAgIHJldHVybiBzaWduPyAtY29u
dmVydGVkOiBjb252ZXJ0ZWQ7CisgICAgfQorICAgIAorfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9j
b252ZXJzaW9uCisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZDZmYzJmNTc0
MzZiZmMwN2U3MmJmNjA1NjMyOWQxOGY3ZjY3YmVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmgKQEAgLTAsMCArMSw1
MDIgQEAKKy8vIENvcHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8v
CisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8v
ICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8g
ICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8g
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
Ky8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmbmRlZiBET1VCTEVfQ09OVkVS
U0lPTl9ET1VCTEVfQ09OVkVSU0lPTl9IXworI2RlZmluZSBET1VCTEVfQ09OVkVSU0lPTl9ET1VC
TEVfQ09OVkVSU0lPTl9IXworCisjaW5jbHVkZSAidXRpbHMuaCIKKworbmFtZXNwYWNlIFdURiB7
CisKK25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgY2xhc3MgRG91Ymxl
VG9TdHJpbmdDb252ZXJ0ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgLy8gV2hlbiBjYWxsaW5n
IFRvRml4ZWQgd2l0aCBhIGRvdWJsZSA+IDEwXmtNYXhGaXhlZERpZ2l0c0JlZm9yZVBvaW50Cisg
ICAgICAgIC8vIG9yIGEgcmVxdWVzdGVkX2RpZ2l0cyBwYXJhbWV0ZXIgPiBrTWF4Rml4ZWREaWdp
dHNBZnRlclBvaW50IHRoZW4gdGhlCisgICAgICAgIC8vIGZ1bmN0aW9uIHJldHVybnMgZmFsc2Uu
CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQga01heEZpeGVkRGlnaXRzQmVmb3JlUG9pbnQgPSA2
MDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBrTWF4Rml4ZWREaWdpdHNBZnRlclBvaW50ID0g
NjA7CisgICAgICAgIAorICAgICAgICAvLyBXaGVuIGNhbGxpbmcgVG9FeHBvbmVudGlhbCB3aXRo
IGEgcmVxdWVzdGVkX2RpZ2l0cworICAgICAgICAvLyBwYXJhbWV0ZXIgPiBrTWF4RXhwb25lbnRp
YWxEaWdpdHMgdGhlbiB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZS4KKyAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBrTWF4RXhwb25lbnRpYWxEaWdpdHMgPSAxMjA7CisgICAgICAgIAorICAgICAg
ICAvLyBXaGVuIGNhbGxpbmcgVG9QcmVjaXNpb24gd2l0aCBhIHJlcXVlc3RlZF9kaWdpdHMKKyAg
ICAgICAgLy8gcGFyYW1ldGVyIDwga01pblByZWNpc2lvbkRpZ2l0cyBvciByZXF1ZXN0ZWRfZGln
aXRzID4ga01heFByZWNpc2lvbkRpZ2l0cworICAgICAgICAvLyB0aGVuIHRoZSBmdW5jdGlvbiBy
ZXR1cm5zIGZhbHNlLgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtNaW5QcmVjaXNpb25EaWdp
dHMgPSAxOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtNYXhQcmVjaXNpb25EaWdpdHMgPSAx
MjA7CisgICAgICAgIAorICAgICAgICBlbnVtIEZsYWdzIHsKKyAgICAgICAgICAgIE5PX0ZMQUdT
ID0gMCwKKyAgICAgICAgICAgIEVNSVRfUE9TSVRJVkVfRVhQT05FTlRfU0lHTiA9IDEsCisgICAg
ICAgICAgICBFTUlUX1RSQUlMSU5HX0RFQ0lNQUxfUE9JTlQgPSAyLAorICAgICAgICAgICAgRU1J
VF9UUkFJTElOR19aRVJPX0FGVEVSX1BPSU5UID0gNCwKKyAgICAgICAgICAgIFVOSVFVRV9aRVJP
ID0gOAorICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgLy8gRmxhZ3Mgc2hvdWxkIGJlIGEg
Yml0LW9yIGNvbWJpbmF0aW9uIG9mIHRoZSBwb3NzaWJsZSBGbGFncy1lbnVtLgorICAgICAgICAv
LyAgLSBOT19GTEFHUzogbm8gc3BlY2lhbCBmbGFncy4KKyAgICAgICAgLy8gIC0gRU1JVF9QT1NJ
VElWRV9FWFBPTkVOVF9TSUdOOiB3aGVuIHRoZSBudW1iZXIgaXMgY29udmVydGVkIGludG8gZXhw
b25lbnQKKyAgICAgICAgLy8gICAgZm9ybSwgZW1pdHMgYSAnKycgZm9yIHBvc2l0aXZlIGV4cG9u
ZW50cy4gRXhhbXBsZTogMS4yZSsyLgorICAgICAgICAvLyAgLSBFTUlUX1RSQUlMSU5HX0RFQ0lN
QUxfUE9JTlQ6IHdoZW4gdGhlIGlucHV0IG51bWJlciBpcyBhbiBpbnRlZ2VyIGFuZCBpcworICAg
ICAgICAvLyAgICBjb252ZXJ0ZWQgaW50byBkZWNpbWFsIGZvcm1hdCB0aGVuIGEgdHJhaWxpbmcg
ZGVjaW1hbCBwb2ludCBpcyBhcHBlbmRlZC4KKyAgICAgICAgLy8gICAgRXhhbXBsZTogMjM0NS4w
IGlzIGNvbnZlcnRlZCB0byAiMjM0NS4iLgorICAgICAgICAvLyAgLSBFTUlUX1RSQUlMSU5HX1pF
Uk9fQUZURVJfUE9JTlQ6IGluIGFkZGl0aW9uIHRvIGEgdHJhaWxpbmcgZGVjaW1hbCBwb2ludAor
ICAgICAgICAvLyAgICBlbWl0cyBhIHRyYWlsaW5nICcwJy1jaGFyYWN0ZXIuIFRoaXMgZmxhZyBy
ZXF1aXJlcyB0aGUKKyAgICAgICAgLy8gICAgRVhNSVRfVFJBSUxJTkdfREVDSU1BTF9QT0lOVCBm
bGFnLgorICAgICAgICAvLyAgICBFeGFtcGxlOiAyMzQ1LjAgaXMgY29udmVydGVkIHRvICIyMzQ1
LjAiLgorICAgICAgICAvLyAgLSBVTklRVUVfWkVSTzogIi0wLjAiIGlzIGNvbnZlcnRlZCB0byAi
MC4wIi4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSW5maW5pdHkgc3ltYm9sIGFuZCBuYW5fc3lt
Ym9sIHByb3ZpZGUgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3IgdGhlc2UKKyAgICAgICAg
Ly8gc3BlY2lhbCB2YWx1ZXMuIElmIHRoZSBzdHJpbmcgaXMgTlVMTCBhbmQgdGhlIHNwZWNpYWwg
dmFsdWUgaXMgZW5jb3VudGVyZWQKKyAgICAgICAgLy8gdGhlbiB0aGUgY29udmVyc2lvbiBmdW5j
dGlvbnMgcmV0dXJuIGZhbHNlLgorICAgICAgICAvLworICAgICAgICAvLyBUaGUgZXhwb25lbnRf
Y2hhcmFjdGVyIGlzIHVzZWQgaW4gZXhwb25lbnRpYWwgcmVwcmVzZW50YXRpb25zLiBJdCBpcwor
ICAgICAgICAvLyB1c3VhbGx5ICdlJyBvciAnRScuCisgICAgICAgIC8vCisgICAgICAgIC8vIFdo
ZW4gY29udmVydGluZyB0byB0aGUgc2hvcnRlc3QgcmVwcmVzZW50YXRpb24gdGhlIGNvbnZlcnRl
ciB3aWxsCisgICAgICAgIC8vIHJlcHJlc2VudCBpbnB1dCBudW1iZXJzIGluIGRlY2ltYWwgZm9y
bWF0IGlmIHRoZXkgYXJlIGluIHRoZSBpbnRlcnZhbAorICAgICAgICAvLyBbMTBeZGVjaW1hbF9p
bl9zaG9ydGVzdF9sb3c7IDEwXmRlY2ltYWxfaW5fc2hvcnRlc3RfaGlnaFsKKyAgICAgICAgLy8g
ICAgKGxvd2VyIGJvdW5kYXJ5IGluY2x1ZGVkLCBncmVhdGVyIGJvdW5kYXJ5IGV4Y2x1ZGVkKS4K
KyAgICAgICAgLy8gRXhhbXBsZTogd2l0aCBkZWNpbWFsX2luX3Nob3J0ZXN0X2xvdyA9IC02IGFu
ZAorICAgICAgICAvLyAgICAgICAgICAgICAgIGRlY2ltYWxfaW5fc2hvcnRlc3RfaGlnaCA9IDIx
OgorICAgICAgICAvLyAgIFRvU2hvcnRlc3QoMC4wMDAwMDEpICAtPiAiMC4wMDAwMDEiCisgICAg
ICAgIC8vICAgVG9TaG9ydGVzdCgwLjAwMDAwMDEpIC0+ICIxZS03IgorICAgICAgICAvLyAgIFRv
U2hvcnRlc3QoMTExMTExMTExMTExMTExMTExMTExLjApICAtPiAiMTExMTExMTExMTExMTExMTEw
MDAwIgorICAgICAgICAvLyAgIFRvU2hvcnRlc3QoMTAwMDAwMDAwMDAwMDAwMDAwMDAwLjApICAt
PiAiMTAwMDAwMDAwMDAwMDAwMDAwMDAwIgorICAgICAgICAvLyAgIFRvU2hvcnRlc3QoMTExMTEx
MTExMTExMTExMTExMTExMS4wKSAtPiAiMS4xMTExMTExMTExMTExMTExZSsyMSIKKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gV2hlbiBjb252ZXJ0aW5nIHRvIHByZWNpc2lvbiBtb2RlIHRoZSBjb252
ZXJ0ZXIgbWF5IGFkZAorICAgICAgICAvLyBtYXhfbGVhZGluZ19wYWRkaW5nX3plcm9lcyBiZWZv
cmUgcmV0dXJuaW5nIHRoZSBudW1iZXIgaW4gZXhwb25lbnRpYWwKKyAgICAgICAgLy8gZm9ybWF0
LgorICAgICAgICAvLyBFeGFtcGxlIHdpdGggbWF4X2xlYWRpbmdfcGFkZGluZ196ZXJvZXNfaW5f
cHJlY2lzaW9uX21vZGUgPSA2LgorICAgICAgICAvLyAgIFRvUHJlY2lzaW9uKDAuMDAwMDAxMjM0
NSwgMikgLT4gIjAuMDAwMDAxMiIKKyAgICAgICAgLy8gICBUb1ByZWNpc2lvbigwLjAwMDAwMDEy
MzQ1LCAyKSAtPiAiMS4yZS03IgorICAgICAgICAvLyBTaW1pbGFyaWx5IHRoZSBjb252ZXJ0ZXIg
bWF5IGFkZCB1cCB0bworICAgICAgICAvLyBtYXhfdHJhaWxpbmdfcGFkZGluZ196ZXJvZXNfaW5f
cHJlY2lzaW9uX21vZGUgaW4gcHJlY2lzaW9uIG1vZGUgdG8gYXZvaWQKKyAgICAgICAgLy8gcmV0
dXJuaW5nIGFuIGV4cG9uZW50aWFsIHJlcHJlc2VudGF0aW9uLiBBIHplcm8gYWRkZWQgYnkgdGhl
CisgICAgICAgIC8vIEVNSVRfVFJBSUxJTkdfWkVST19BRlRFUl9QT0lOVCBmbGFnIGlzIGNvdW50
ZWQgZm9yIHRoaXMgbGltaXQuCisgICAgICAgIC8vIEV4YW1wbGVzIGZvciBtYXhfdHJhaWxpbmdf
cGFkZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9uX21vZGUgPSAxOgorICAgICAgICAvLyAgIFRvUHJl
Y2lzaW9uKDIzMC4wLCAyKSAtPiAiMjMwIgorICAgICAgICAvLyAgIFRvUHJlY2lzaW9uKDIzMC4w
LCAyKSAtPiAiMjMwLiIgIHdpdGggRU1JVF9UUkFJTElOR19ERUNJTUFMX1BPSU5ULgorICAgICAg
ICAvLyAgIFRvUHJlY2lzaW9uKDIzMC4wLCAyKSAtPiAiMi4zZTIiIHdpdGggRU1JVF9UUkFJTElO
R19aRVJPX0FGVEVSX1BPSU5ULgorICAgICAgICBEb3VibGVUb1N0cmluZ0NvbnZlcnRlcihpbnQg
ZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGluZmlu
aXR5X3N5bWJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog
bmFuX3N5bWJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBleHBvbmVu
dF9jaGFyYWN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZWNpbWFs
X2luX3Nob3J0ZXN0X2xvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRl
Y2ltYWxfaW5fc2hvcnRlc3RfaGlnaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IG1heF9sZWFkaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2RlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWF4X3RyYWlsaW5nX3BhZGRpbmdfemVyb2Vz
X2luX3ByZWNpc2lvbl9tb2RlKQorICAgICAgICA6IGZsYWdzXyhmbGFncyksCisgICAgICAgIGlu
ZmluaXR5X3N5bWJvbF8oaW5maW5pdHlfc3ltYm9sKSwKKyAgICAgICAgbmFuX3N5bWJvbF8obmFu
X3N5bWJvbCksCisgICAgICAgIGV4cG9uZW50X2NoYXJhY3Rlcl8oZXhwb25lbnRfY2hhcmFjdGVy
KSwKKyAgICAgICAgZGVjaW1hbF9pbl9zaG9ydGVzdF9sb3dfKGRlY2ltYWxfaW5fc2hvcnRlc3Rf
bG93KSwKKyAgICAgICAgZGVjaW1hbF9pbl9zaG9ydGVzdF9oaWdoXyhkZWNpbWFsX2luX3Nob3J0
ZXN0X2hpZ2gpLAorICAgICAgICBtYXhfbGVhZGluZ19wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNp
b25fbW9kZV8oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtYXhfbGVhZGluZ19wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZSksCisg
ICAgICAgIG1heF90cmFpbGluZ19wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9kZV8oCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4
X3RyYWlsaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2RlKSB7CisgICAgICAgICAg
ICAvLyBXaGVuICd0cmFpbGluZyB6ZXJvIGFmdGVyIHRoZSBwb2ludCcgaXMgc2V0LCB0aGVuICd0
cmFpbGluZyBwb2ludCcKKyAgICAgICAgICAgIC8vIG11c3QgYmUgc2V0IHRvby4KKyAgICAgICAg
ICAgIEFTU0VSVCgoKGZsYWdzICYgRU1JVF9UUkFJTElOR19ERUNJTUFMX1BPSU5UKSAhPSAwKSB8
fAorICAgICAgICAgICAgICAgICAgICEoKGZsYWdzICYgRU1JVF9UUkFJTElOR19aRVJPX0FGVEVS
X1BPSU5UKSAhPSAwKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFJldHVybnMg
YSBjb252ZXJ0ZXIgZm9sbG93aW5nIHRoZSBFY21hU2NyaXB0IHNwZWNpZmljYXRpb24uCisgICAg
ICAgIHN0YXRpYyBjb25zdCBEb3VibGVUb1N0cmluZ0NvbnZlcnRlciYgRWNtYVNjcmlwdENvbnZl
cnRlcigpOworICAgICAgICAKKyAgICAgICAgLy8gQ29tcHV0ZXMgdGhlIHNob3J0ZXN0IHN0cmlu
ZyBvZiBkaWdpdHMgdGhhdCBjb3JyZWN0bHkgcmVwcmVzZW50IHRoZSBpbnB1dAorICAgICAgICAv
LyBudW1iZXIuIERlcGVuZGluZyBvbiBkZWNpbWFsX2luX3Nob3J0ZXN0X2xvdyBhbmQgZGVjaW1h
bF9pbl9zaG9ydGVzdF9oaWdoCisgICAgICAgIC8vIChzZWUgY29uc3RydWN0b3IpIGl0IHRoZW4g
ZWl0aGVyIHJldHVybnMgYSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uLCBvciBhbgorICAgICAgICAv
LyBleHBvbmVudGlhbCByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgLy8gRXhhbXBsZSB3aXRoIGRl
Y2ltYWxfaW5fc2hvcnRlc3RfbG93ID0gLTYsCisgICAgICAgIC8vICAgICAgICAgICAgICBkZWNp
bWFsX2luX3Nob3J0ZXN0X2hpZ2ggPSAyMSwKKyAgICAgICAgLy8gICAgICAgICAgICAgIEVNSVRf
UE9TSVRJVkVfRVhQT05FTlRfU0lHTiBhY3RpdmF0ZWQsIGFuZAorICAgICAgICAvLyAgICAgICAg
ICAgICAgRU1JVF9UUkFJTElOR19ERUNJTUFMX1BPSU5UIGRlYWN0aXZlZDoKKyAgICAgICAgLy8g
ICBUb1Nob3J0ZXN0KDAuMDAwMDAxKSAgLT4gIjAuMDAwMDAxIgorICAgICAgICAvLyAgIFRvU2hv
cnRlc3QoMC4wMDAwMDAxKSAtPiAiMWUtNyIKKyAgICAgICAgLy8gICBUb1Nob3J0ZXN0KDExMTEx
MTExMTExMTExMTExMTExMS4wKSAgLT4gIjExMTExMTExMTExMTExMTExMDAwMCIKKyAgICAgICAg
Ly8gICBUb1Nob3J0ZXN0KDEwMDAwMDAwMDAwMDAwMDAwMDAwMC4wKSAgLT4gIjEwMDAwMDAwMDAw
MDAwMDAwMDAwMCIKKyAgICAgICAgLy8gICBUb1Nob3J0ZXN0KDExMTExMTExMTExMTExMTExMTEx
MTEuMCkgLT4gIjEuMTExMTExMTExMTExMTExMWUrMjEiCisgICAgICAgIC8vCisgICAgICAgIC8v
IE5vdGU6IHRoZSBjb252ZXJzaW9uIG1heSByb3VuZCB0aGUgb3V0cHV0IGlmIHRoZSByZXR1cm5l
ZCBzdHJpbmcKKyAgICAgICAgLy8gaXMgYWNjdXJhdGUgZW5vdWdoIHRvIHVuaXF1ZWx5IGlkZW50
aWZ5IHRoZSBpbnB1dC1udW1iZXIuCisgICAgICAgIC8vIEZvciBleGFtcGxlIHRoZSBtb3N0IHBy
ZWNpc2UgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRvdWJsZSA5ZTU5IGVxdWFscworICAgICAgICAv
LyAiODk5OTk5OTk5OTk5OTk5OTE4NzY3MjI5NDQ5NzE3NjE5OTUzODEwMTMxMjczNjc0NjkwNjU2
MjA2ODQ4IiwgYnV0CisgICAgICAgIC8vIHRoZSBjb252ZXJ0ZXIgd2lsbCByZXR1cm4gdGhlIHNo
b3J0ZXIgKGJ1dCBzdGlsbCBjb3JyZWN0KSAiOWU1OSIuCisgICAgICAgIC8vCisgICAgICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgY29udmVyc2lvbiBzdWNjZWVkcy4gVGhlIGNvbnZlcnNpb24g
YWx3YXlzIHN1Y2NlZWRzCisgICAgICAgIC8vIGV4Y2VwdCB3aGVuIHRoZSBpbnB1dCB2YWx1ZSBp
cyBzcGVjaWFsIGFuZCBubyBpbmZpbml0eV9zeW1ib2wgb3IKKyAgICAgICAgLy8gbmFuX3N5bWJv
bCBoYXMgYmVlbiBnaXZlbiB0byB0aGUgY29uc3RydWN0b3IuCisgICAgICAgIGJvb2wgVG9TaG9y
dGVzdChkb3VibGUgdmFsdWUsIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25zdDsK
KyAgICAgICAgCisgICAgICAgIAorICAgICAgICAvLyBDb21wdXRlcyBhIGRlY2ltYWwgcmVwcmVz
ZW50YXRpb24gd2l0aCBhIGZpeGVkIG51bWJlciBvZiBkaWdpdHMgYWZ0ZXIgdGhlCisgICAgICAg
IC8vIGRlY2ltYWwgcG9pbnQuIFRoZSBsYXN0IGVtaXR0ZWQgZGlnaXQgaXMgcm91bmRlZC4KKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gRXhhbXBsZXM6CisgICAgICAgIC8vICAgVG9GaXhlZCgzLjEy
LCAxKSAtPiAiMy4xIgorICAgICAgICAvLyAgIFRvRml4ZWQoMy4xNDE1LCAzKSAtPiAiMy4xNDIi
CisgICAgICAgIC8vICAgVG9GaXhlZCgxMjM0LjU2Nzg5LCA0KSAtPiAiMTIzNC41Njc5IgorICAg
ICAgICAvLyAgIFRvRml4ZWQoMS4yMywgNSkgLT4gIjEuMjMwMDAiCisgICAgICAgIC8vICAgVG9G
aXhlZCgwLjEsIDQpIC0+ICIwLjEwMDAiCisgICAgICAgIC8vICAgVG9GaXhlZCgxZTMwLCAyKSAt
PiAiMTAwMDAwMDAwMDAwMDAwMDAxOTg4NDYyNDgzODY1Ni4wMCIKKyAgICAgICAgLy8gICBUb0Zp
eGVkKDAuMSwgMzApIC0+ICIwLjEwMDAwMDAwMDAwMDAwMDAwNTU1MTExNTEyMzEyNiIKKyAgICAg
ICAgLy8gICBUb0ZpeGVkKDAuMSwgMTcpIC0+ICIwLjEwMDAwMDAwMDAwMDAwMDAxIgorICAgICAg
ICAvLworICAgICAgICAvLyBJZiByZXF1ZXN0ZWRfZGlnaXRzIGVxdWFscyAwLCB0aGVuIHRoZSB0
YWlsIG9mIHRoZSByZXN1bHQgZGVwZW5kcyBvbgorICAgICAgICAvLyB0aGUgRU1JVF9UUkFJTElO
R19ERUNJTUFMX1BPSU5UIGFuZCBFTUlUX1RSQUlMSU5HX1pFUk9fQUZURVJfUE9JTlQuCisgICAg
ICAgIC8vIEV4YW1wbGVzLCBmb3IgcmVxdWVzdGVkX2RpZ2l0cyA9PSAwLAorICAgICAgICAvLyAg
IGxldCBFTUlUX1RSQUlMSU5HX0RFQ0lNQUxfUE9JTlQgYW5kIEVNSVRfVFJBSUxJTkdfWkVST19B
RlRFUl9QT0lOVCBiZQorICAgICAgICAvLyAgICAtIGZhbHNlIGFuZCBmYWxzZTogdGhlbiAxMjMu
NDUgLT4gMTIzCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjY3OCAt
PiAxCisgICAgICAgIC8vICAgIC0gdHJ1ZSBhbmQgZmFsc2U6IHRoZW4gMTIzLjQ1IC0+IDEyMy4K
KyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgMC42NzggLT4gMS4KKyAgICAg
ICAgLy8gICAgLSB0cnVlIGFuZCB0cnVlOiB0aGVuIDEyMy40NSAtPiAxMjMuMAorICAgICAgICAv
LyAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNjc4IC0+IDEuMAorICAgICAgICAvLworICAg
ICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbnZlcnNpb24gc3VjY2VlZHMuIFRoZSBjb252
ZXJzaW9uIGFsd2F5cyBzdWNjZWVkcworICAgICAgICAvLyBleGNlcHQgZm9yIHRoZSBmb2xsb3dp
bmcgY2FzZXM6CisgICAgICAgIC8vICAgLSB0aGUgaW5wdXQgdmFsdWUgaXMgc3BlY2lhbCBhbmQg
bm8gaW5maW5pdHlfc3ltYm9sIG9yIG5hbl9zeW1ib2wgaGFzCisgICAgICAgIC8vICAgICBiZWVu
IHByb3ZpZGVkIHRvIHRoZSBjb25zdHJ1Y3RvciwKKyAgICAgICAgLy8gICAtICd2YWx1ZScgPiAx
MF5rTWF4Rml4ZWREaWdpdHNCZWZvcmVQb2ludCwgb3IKKyAgICAgICAgLy8gICAtICdyZXF1ZXN0
ZWRfZGlnaXRzJyA+IGtNYXhGaXhlZERpZ2l0c0FmdGVyUG9pbnQuCisgICAgICAgIC8vIFRoZSBs
YXN0IHR3byBjb25kaXRpb25zIGltcGx5IHRoYXQgdGhlIHJlc3VsdCB3aWxsIG5ldmVyIGNvbnRh
aW4gbW9yZSB0aGFuCisgICAgICAgIC8vIDEgKyBrTWF4Rml4ZWREaWdpdHNCZWZvcmVQb2ludCAr
IDEgKyBrTWF4Rml4ZWREaWdpdHNBZnRlclBvaW50IGNoYXJhY3RlcnMKKyAgICAgICAgLy8gKG9u
ZSBhZGRpdGlvbmFsIGNoYXJhY3RlciBmb3IgdGhlIHNpZ24sIGFuZCBvbmUgZm9yIHRoZSBkZWNp
bWFsIHBvaW50KS4KKyAgICAgICAgYm9vbCBUb0ZpeGVkKGRvdWJsZSB2YWx1ZSwKKyAgICAgICAg
ICAgICAgICAgICAgIGludCByZXF1ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAg
U3RyaW5nQnVpbGRlciogcmVzdWx0X2J1aWxkZXIpIGNvbnN0OworICAgICAgICAKKyAgICAgICAg
Ly8gQ29tcHV0ZXMgYSByZXByZXNlbnRhdGlvbiBpbiBleHBvbmVudGlhbCBmb3JtYXQgd2l0aCBy
ZXF1ZXN0ZWRfZGlnaXRzCisgICAgICAgIC8vIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50LiBUaGUg
bGFzdCBlbWl0dGVkIGRpZ2l0IGlzIHJvdW5kZWQuCisgICAgICAgIC8vIElmIHJlcXVlc3RlZF9k
aWdpdHMgZXF1YWxzIC0xLCB0aGVuIHRoZSBzaG9ydGVzdCBleHBvbmVudGlhbCByZXByZXNlbnRh
dGlvbgorICAgICAgICAvLyBpcyBjb21wdXRlZC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gRXhh
bXBsZXMgd2l0aCBFTUlUX1BPU0lUSVZFX0VYUE9ORU5UX1NJR04gZGVhY3RpdmF0ZWQsIGFuZAor
ICAgICAgICAvLyAgICAgICAgICAgICAgIGV4cG9uZW50X2NoYXJhY3RlciBzZXQgdG8gJ2UnLgor
ICAgICAgICAvLyAgIFRvRXhwb25lbnRpYWwoMy4xMiwgMSkgLT4gIjMuMWUwIgorICAgICAgICAv
LyAgIFRvRXhwb25lbnRpYWwoNS4wLCAzKSAtPiAiNS4wMDBlMCIKKyAgICAgICAgLy8gICBUb0V4
cG9uZW50aWFsKDAuMDAxLCAyKSAtPiAiMS4wMGUtMyIKKyAgICAgICAgLy8gICBUb0V4cG9uZW50
aWFsKDMuMTQxNSwgLTEpIC0+ICIzLjE0MTVlMCIKKyAgICAgICAgLy8gICBUb0V4cG9uZW50aWFs
KDMuMTQxNSwgNCkgLT4gIjMuMTQxNWUwIgorICAgICAgICAvLyAgIFRvRXhwb25lbnRpYWwoMy4x
NDE1LCAzKSAtPiAiMy4xNDJlMCIKKyAgICAgICAgLy8gICBUb0V4cG9uZW50aWFsKDEyMzQ1Njc4
OTAwMDAwMCwgMykgLT4gIjEuMjM1ZTE0IgorICAgICAgICAvLyAgIFRvRXhwb25lbnRpYWwoMTAw
MDAwMDAwMDAwMDAwMDAxOTg4NDYyNDgzODY1Ni4wLCAtMSkgLT4gIjFlMzAiCisgICAgICAgIC8v
ICAgVG9FeHBvbmVudGlhbCgxMDAwMDAwMDAwMDAwMDAwMDE5ODg0NjI0ODM4NjU2LjAsIDMyKSAt
PgorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICIxLjAwMDAwMDAwMDAwMDAwMDAxOTg4
NDYyNDgzODY1NjAwZTMwIgorICAgICAgICAvLyAgIFRvRXhwb25lbnRpYWwoMTIzNCwgMCkgLT4g
IjFlMyIKKyAgICAgICAgLy8KKyAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb252ZXJz
aW9uIHN1Y2NlZWRzLiBUaGUgY29udmVyc2lvbiBhbHdheXMgc3VjY2VlZHMKKyAgICAgICAgLy8g
ZXhjZXB0IGZvciB0aGUgZm9sbG93aW5nIGNhc2VzOgorICAgICAgICAvLyAgIC0gdGhlIGlucHV0
IHZhbHVlIGlzIHNwZWNpYWwgYW5kIG5vIGluZmluaXR5X3N5bWJvbCBvciBuYW5fc3ltYm9sIGhh
cworICAgICAgICAvLyAgICAgYmVlbiBwcm92aWRlZCB0byB0aGUgY29uc3RydWN0b3IsCisgICAg
ICAgIC8vICAgLSAncmVxdWVzdGVkX2RpZ2l0cycgPiBrTWF4RXhwb25lbnRpYWxEaWdpdHMuCisg
ICAgICAgIC8vIFRoZSBsYXN0IGNvbmRpdGlvbiBpbXBsaWVzIHRoYXQgdGhlIHJlc3VsdCB3aWxs
IG5ldmVyIGNvbnRhaW4gbW9yZSB0aGFuCisgICAgICAgIC8vIGtNYXhFeHBvbmVudGlhbERpZ2l0
cyArIDggY2hhcmFjdGVycyAodGhlIHNpZ24sIHRoZSBkaWdpdCBiZWZvcmUgdGhlCisgICAgICAg
IC8vIGRlY2ltYWwgcG9pbnQsIHRoZSBkZWNpbWFsIHBvaW50LCB0aGUgZXhwb25lbnQgY2hhcmFj
dGVyLCB0aGUKKyAgICAgICAgLy8gZXhwb25lbnQncyBzaWduLCBhbmQgYXQgbW9zdCAzIGV4cG9u
ZW50IGRpZ2l0cykuCisgICAgICAgIGJvb2wgVG9FeHBvbmVudGlhbChkb3VibGUgdmFsdWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25zdDsK
KyAgICAgICAgCisgICAgICAgIC8vIENvbXB1dGVzICdwcmVjaXNpb24nIGxlYWRpbmcgZGlnaXRz
IG9mIHRoZSBnaXZlbiAndmFsdWUnIGFuZCByZXR1cm5zIHRoZW0KKyAgICAgICAgLy8gZWl0aGVy
IGluIGV4cG9uZW50aWFsIG9yIGRlY2ltYWwgZm9ybWF0LCBkZXBlbmRpbmcgb24KKyAgICAgICAg
Ly8gbWF4X3tsZWFkaW5nfHRyYWlsaW5nfV9wYWRkaW5nX3plcm9lc19pbl9wcmVjaXNpb25fbW9k
ZSAoZ2l2ZW4gdG8gdGhlCisgICAgICAgIC8vIGNvbnN0cnVjdG9yKS4KKyAgICAgICAgLy8gVGhl
IGxhc3QgY29tcHV0ZWQgZGlnaXQgaXMgcm91bmRlZC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8g
RXhhbXBsZSB3aXRoIG1heF9sZWFkaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2Rl
ID0gNi4KKyAgICAgICAgLy8gICBUb1ByZWNpc2lvbigwLjAwMDAwMTIzNDUsIDIpIC0+ICIwLjAw
MDAwMTIiCisgICAgICAgIC8vICAgVG9QcmVjaXNpb24oMC4wMDAwMDAxMjM0NSwgMikgLT4gIjEu
MmUtNyIKKyAgICAgICAgLy8gU2ltaWxhcmlseSB0aGUgY29udmVydGVyIG1heSBhZGQgdXAgdG8K
KyAgICAgICAgLy8gbWF4X3RyYWlsaW5nX3BhZGRpbmdfemVyb2VzX2luX3ByZWNpc2lvbl9tb2Rl
IGluIHByZWNpc2lvbiBtb2RlIHRvIGF2b2lkCisgICAgICAgIC8vIHJldHVybmluZyBhbiBleHBv
bmVudGlhbCByZXByZXNlbnRhdGlvbi4gQSB6ZXJvIGFkZGVkIGJ5IHRoZQorICAgICAgICAvLyBF
TUlUX1RSQUlMSU5HX1pFUk9fQUZURVJfUE9JTlQgZmxhZyBpcyBjb3VudGVkIGZvciB0aGlzIGxp
bWl0LgorICAgICAgICAvLyBFeGFtcGxlcyBmb3IgbWF4X3RyYWlsaW5nX3BhZGRpbmdfemVyb2Vz
X2luX3ByZWNpc2lvbl9tb2RlID0gMToKKyAgICAgICAgLy8gICBUb1ByZWNpc2lvbigyMzAuMCwg
MikgLT4gIjIzMCIKKyAgICAgICAgLy8gICBUb1ByZWNpc2lvbigyMzAuMCwgMikgLT4gIjIzMC4i
ICB3aXRoIEVNSVRfVFJBSUxJTkdfREVDSU1BTF9QT0lOVC4KKyAgICAgICAgLy8gICBUb1ByZWNp
c2lvbigyMzAuMCwgMikgLT4gIjIuM2UyIiB3aXRoIEVNSVRfVFJBSUxJTkdfWkVST19BRlRFUl9Q
T0lOVC4KKyAgICAgICAgLy8gRXhhbXBsZXMgZm9yIG1heF90cmFpbGluZ19wYWRkaW5nX3plcm9l
c19pbl9wcmVjaXNpb25fbW9kZSA9IDMsIGFuZCBubworICAgICAgICAvLyAgICBFTUlUX1RSQUlM
SU5HX1pFUk9fQUZURVJfUE9JTlQ6CisgICAgICAgIC8vICAgVG9QcmVjaXNpb24oMTIzNDUwLjAs
IDYpIC0+ICIxMjM0NTAiCisgICAgICAgIC8vICAgVG9QcmVjaXNpb24oMTIzNDUwLjAsIDUpIC0+
ICIxMjM0NTAiCisgICAgICAgIC8vICAgVG9QcmVjaXNpb24oMTIzNDUwLjAsIDQpIC0+ICIxMjM1
MDAiCisgICAgICAgIC8vICAgVG9QcmVjaXNpb24oMTIzNDUwLjAsIDMpIC0+ICIxMjMwMDAiCisg
ICAgICAgIC8vICAgVG9QcmVjaXNpb24oMTIzNDUwLjAsIDIpIC0+ICIxLjJlNSIKKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb252ZXJzaW9uIHN1Y2NlZWRzLiBU
aGUgY29udmVyc2lvbiBhbHdheXMgc3VjY2VlZHMKKyAgICAgICAgLy8gZXhjZXB0IGZvciB0aGUg
Zm9sbG93aW5nIGNhc2VzOgorICAgICAgICAvLyAgIC0gdGhlIGlucHV0IHZhbHVlIGlzIHNwZWNp
YWwgYW5kIG5vIGluZmluaXR5X3N5bWJvbCBvciBuYW5fc3ltYm9sIGhhcworICAgICAgICAvLyAg
ICAgYmVlbiBwcm92aWRlZCB0byB0aGUgY29uc3RydWN0b3IsCisgICAgICAgIC8vICAgLSBwcmVj
aXNpb24gPCBrTWluUGVyaWNpc2lvbkRpZ2l0cworICAgICAgICAvLyAgIC0gcHJlY2lzaW9uID4g
a01heFByZWNpc2lvbkRpZ2l0cworICAgICAgICAvLyBUaGUgbGFzdCBjb25kaXRpb24gaW1wbGll
cyB0aGF0IHRoZSByZXN1bHQgd2lsbCBuZXZlciBjb250YWluIG1vcmUgdGhhbgorICAgICAgICAv
LyBrTWF4UHJlY2lzaW9uRGlnaXRzICsgNyBjaGFyYWN0ZXJzICh0aGUgc2lnbiwgdGhlIGRlY2lt
YWwgcG9pbnQsIHRoZQorICAgICAgICAvLyBleHBvbmVudCBjaGFyYWN0ZXIsIHRoZSBleHBvbmVu
dCdzIHNpZ24sIGFuZCBhdCBtb3N0IDMgZXhwb25lbnQgZGlnaXRzKS4KKyAgICAgICAgYm9vbCBU
b1ByZWNpc2lvbihkb3VibGUgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBy
ZWNpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyKiByZXN1bHRf
YnVpbGRlcikgY29uc3Q7CisgICAgICAgIAorICAgICAgICBlbnVtIER0b2FNb2RlIHsKKyAgICAg
ICAgICAgIC8vIFByb2R1Y2UgdGhlIHNob3J0ZXN0IGNvcnJlY3QgcmVwcmVzZW50YXRpb24uCisg
ICAgICAgICAgICAvLyBGb3IgZXhhbXBsZSB0aGUgb3V0cHV0IG9mIDAuMjk5OTk5OTk5OTk5OTk5
OTg4ODk3IGlzICh0aGUgbGVzcyBhY2N1cmF0ZQorICAgICAgICAgICAgLy8gYnV0IGNvcnJlY3Qp
IDAuMy4KKyAgICAgICAgICAgIFNIT1JURVNULAorICAgICAgICAgICAgLy8gUHJvZHVjZSBhIGZp
eGVkIG51bWJlciBvZiBkaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQuCisgICAgICAgICAg
ICAvLyBGb3IgaW5zdGFuY2UgZml4ZWQoMC4xLCA0KSBiZWNvbWVzIDAuMTAwMAorICAgICAgICAg
ICAgLy8gSWYgdGhlIGlucHV0IG51bWJlciBpcyBiaWcsIHRoZSBvdXRwdXQgd2lsbCBiZSBiaWcu
CisgICAgICAgICAgICBGSVhFRCwKKyAgICAgICAgICAgIC8vIEZpeGVkIG51bWJlciBvZiBkaWdp
dHMgKGluZGVwZW5kZW50IG9mIHRoZSBkZWNpbWFsIHBvaW50KS4KKyAgICAgICAgICAgIFBSRUNJ
U0lPTgorICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgLy8gVGhlIG1heGltYWwgbnVtYmVy
IG9mIGRpZ2l0cyB0aGF0IGFyZSBuZWVkZWQgdG8gZW1pdCBhIGRvdWJsZSBpbiBiYXNlIDEwLgor
ICAgICAgICAvLyBBIGhpZ2hlciBwcmVjaXNpb24gY2FuIGJlIGFjaGlldmVkIGJ5IHVzaW5nIG1v
cmUgZGlnaXRzLCBidXQgdGhlIHNob3J0ZXN0CisgICAgICAgIC8vIGFjY3VyYXRlIHJlcHJlc2Vu
dGF0aW9uIG9mIGFueSBkb3VibGUgd2lsbCBuZXZlciB1c2UgbW9yZSBkaWdpdHMgdGhhbgorICAg
ICAgICAvLyBrQmFzZTEwTWF4aW1hbExlbmd0aC4KKyAgICAgICAgLy8gTm90ZSB0aGF0IERvdWJs
ZVRvQXNjaWkgbnVsbC10ZXJtaW5hdGVzIGl0cyBpbnB1dC4gU28gdGhlIGdpdmVuIGJ1ZmZlcgor
ICAgICAgICAvLyBzaG91bGQgYmUgYXQgbGVhc3Qga0Jhc2UxME1heGltYWxMZW5ndGggKyAxIGNo
YXJhY3RlcnMgbG9uZy4KKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBrQmFzZTEwTWF4aW1hbExl
bmd0aCA9IDE3OworICAgICAgICAKKyAgICAgICAgLy8gQ29udmVydHMgdGhlIGdpdmVuIGRvdWJs
ZSAndicgdG8gYXNjaWkuCisgICAgICAgIC8vIFRoZSByZXN1bHQgc2hvdWxkIGJlIGludGVycHJl
dGVkIGFzIGJ1ZmZlciAqIDEwXihwb2ludC1sZW5ndGgpLgorICAgICAgICAvLworICAgICAgICAv
LyBUaGUgb3V0cHV0IGRlcGVuZHMgb24gdGhlIGdpdmVuIG1vZGU6CisgICAgICAgIC8vICAtIFNI
T1JURVNUOiBwcm9kdWNlIHRoZSBsZWFzdCBhbW91bnQgb2YgZGlnaXRzIGZvciB3aGljaCB0aGUg
aW50ZXJuYWwKKyAgICAgICAgLy8gICBpZGVudGl0eSByZXF1aXJlbWVudCBpcyBzdGlsbCBzYXRp
c2ZpZWQuIElmIHRoZSBkaWdpdHMgYXJlIHByaW50ZWQKKyAgICAgICAgLy8gICAodG9nZXRoZXIg
d2l0aCB0aGUgY29ycmVjdCBleHBvbmVudCkgdGhlbiByZWFkaW5nIHRoaXMgbnVtYmVyIHdpbGwg
Z2l2ZQorICAgICAgICAvLyAgICd2JyBhZ2Fpbi4gVGhlIGJ1ZmZlciB3aWxsIGNob29zZSB0aGUg
cmVwcmVzZW50YXRpb24gdGhhdCBpcyBjbG9zZXN0IHRvCisgICAgICAgIC8vICAgJ3YnLiBJZiB0
aGVyZSBhcmUgdHdvIGF0IHRoZSBzYW1lIGRpc3RhbmNlLCB0aGFuIHRoZSBvbmUgZmFydGhlciBh
d2F5CisgICAgICAgIC8vICAgZnJvbSAwIGlzIGNob3NlbiAoaGFsZndheSBjYXNlcyAtIGVuZGlu
ZyB3aXRoIDUgLSBhcmUgcm91bmRlZCB1cCkuCisgICAgICAgIC8vICAgSW4gdGhpcyBtb2RlIHRo
ZSAncmVxdWVzdGVkX2RpZ2l0cycgcGFyYW1ldGVyIGlzIGlnbm9yZWQuCisgICAgICAgIC8vICAt
IEZJWEVEOiBwcm9kdWNlcyBkaWdpdHMgbmVjZXNzYXJ5IHRvIHByaW50IGEgZ2l2ZW4gbnVtYmVy
IHdpdGgKKyAgICAgICAgLy8gICAncmVxdWVzdGVkX2RpZ2l0cycgZGlnaXRzIGFmdGVyIHRoZSBk
ZWNpbWFsIHBvaW50LiBUaGUgcHJvZHVjZWQgZGlnaXRzCisgICAgICAgIC8vICAgbWlnaHQgYmUg
dG9vIHNob3J0IGluIHdoaWNoIGNhc2UgdGhlIGNhbGxlciBoYXMgdG8gZmlsbCB0aGUgcmVtYWlu
ZGVyCisgICAgICAgIC8vICAgd2l0aCAnMCdzLgorICAgICAgICAvLyAgIEV4YW1wbGU6IHRvRml4
ZWQoMC4wMDEsIDUpIGlzIGFsbG93ZWQgdG8gcmV0dXJuIGJ1ZmZlcj0iMSIsIHBvaW50PS0yLgor
ICAgICAgICAvLyAgIEhhbGZ3YXkgY2FzZXMgYXJlIHJvdW5kZWQgdG93YXJkcyArLy1JbmZpbml0
eSAoYXdheSBmcm9tIDApLiBUaGUgY2FsbAorICAgICAgICAvLyAgIHRvRml4ZWQoMC4xNSwgMikg
dGh1cyByZXR1cm5zIGJ1ZmZlcj0iMiIsIHBvaW50PTAuCisgICAgICAgIC8vICAgVGhlIHJldHVy
bmVkIGJ1ZmZlciBtYXkgY29udGFpbiBkaWdpdHMgdGhhdCB3b3VsZCBiZSB0cnVuY2F0ZWQgZnJv
bSB0aGUKKyAgICAgICAgLy8gICBzaG9ydGVzdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW5wdXQu
CisgICAgICAgIC8vICAtIFBSRUNJU0lPTjogcHJvZHVjZXMgJ3JlcXVlc3RlZF9kaWdpdHMnIHdo
ZXJlIHRoZSBmaXJzdCBkaWdpdCBpcyBub3QgJzAnLgorICAgICAgICAvLyAgIEV2ZW4gdGhvdWdo
IHRoZSBsZW5ndGggb2YgcHJvZHVjZWQgZGlnaXRzIHVzdWFsbHkgZXF1YWxzCisgICAgICAgIC8v
ICAgJ3JlcXVlc3RlZF9kaWdpdHMnLCB0aGUgZnVuY3Rpb24gaXMgYWxsb3dlZCB0byByZXR1cm4g
ZmV3ZXIgZGlnaXRzLCBpbgorICAgICAgICAvLyAgIHdoaWNoIGNhc2UgdGhlIGNhbGxlciBoYXMg
dG8gZmlsbCB0aGUgbWlzc2luZyBkaWdpdHMgd2l0aCAnMCdzLgorICAgICAgICAvLyAgIEhhbGZ3
YXkgY2FzZXMgYXJlIGFnYWluIHJvdW5kZWQgYXdheSBmcm9tIDAuCisgICAgICAgIC8vIERvdWJs
ZVRvQXNjaWkgZXhwZWN0cyB0aGUgZ2l2ZW4gYnVmZmVyIHRvIGJlIGJpZyBlbm91Z2ggdG8gaG9s
ZCBhbGwKKyAgICAgICAgLy8gZGlnaXRzIGFuZCBhIHRlcm1pbmF0aW5nIG51bGwtY2hhcmFjdGVy
LiBJbiBTSE9SVEVTVC1tb2RlIGl0IGV4cGVjdHMgYQorICAgICAgICAvLyBidWZmZXIgb2YgYXQg
bGVhc3Qga0Jhc2UxME1heGltYWxMZW5ndGggKyAxLiBJbiBhbGwgb3RoZXIgbW9kZXMgdGhlCisg
ICAgICAgIC8vIHJlcXVlc3RlZF9kaWdpdHMgcGFyYW1ldGVyICgrIDEgZm9yIHRoZSBudWxsLWNo
YXJhY3RlcikgbGltaXRzIHRoZSBzaXplIG9mCisgICAgICAgIC8vIHRoZSBvdXRwdXQuIFRoZSBn
aXZlbiBsZW5ndGggaXMgb25seSB1c2VkIGluIGRlYnVnIG1vZGUgdG8gZW5zdXJlIHRoZQorICAg
ICAgICAvLyBidWZmZXIgaXMgYmlnIGVub3VnaC4KKyAgICAgICAgc3RhdGljIHZvaWQgRG91Ymxl
VG9Bc2NpaShkb3VibGUgdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEdG9h
TW9kZSBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXF1ZXN0
ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIGJ1ZmZl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnVmZmVyX2xlbmd0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sKiBzaWduLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCogbGVuZ3RoLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCogcG9pbnQpOworICAgICAgICAKKyAgICBwcml2YXRlOgorICAg
ICAgICAvLyBJZiB0aGUgdmFsdWUgaXMgYSBzcGVjaWFsIHZhbHVlIChOYU4gb3IgSW5maW5pdHkp
IGNvbnN0cnVjdHMgdGhlCisgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgc3RyaW5nIHVzaW5nIHRo
ZSBjb25maWd1cmVkIGluZmluaXR5L25hbi1zeW1ib2wuCisgICAgICAgIC8vIElmIGVpdGhlciBv
ZiB0aGVtIGlzIE5VTEwgb3IgdGhlIHZhbHVlIGlzIG5vdCBzcGVjaWFsIHRoZW4gdGhlCisgICAg
ICAgIC8vIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UuCisgICAgICAgIGJvb2wgSGFuZGxlU3BlY2lh
bFZhbHVlcyhkb3VibGUgdmFsdWUsIFN0cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25z
dDsKKyAgICAgICAgLy8gQ29uc3RydWN0cyBhbiBleHBvbmVudGlhbCByZXByZXNlbnRhdGlvbiAo
aS5lLiAxLjIzNGU1NikuCisgICAgICAgIC8vIFRoZSBnaXZlbiBleHBvbmVudCBhc3N1bWVzIGEg
ZGVjaW1hbCBwb2ludCBhZnRlciB0aGUgZmlyc3QgZGVjaW1hbCBkaWdpdC4KKyAgICAgICAgdm9p
ZCBDcmVhdGVFeHBvbmVudGlhbFJlcHJlc2VudGF0aW9uKGNvbnN0IGNoYXIqIGRlY2ltYWxfZGln
aXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxl
bmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBl
eHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0
cmluZ0J1aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25zdDsKKyAgICAgICAgLy8gQ3JlYXRlcyBh
IGRlY2ltYWwgcmVwcmVzZW50YXRpb24gKGkuZSAxMjM0LjU2NzgpLgorICAgICAgICB2b2lkIENy
ZWF0ZURlY2ltYWxSZXByZXNlbnRhdGlvbihjb25zdCBjaGFyKiBkZWNpbWFsX2RpZ2l0cywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlY2ltYWxfcG9pbnQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkaWdpdHNfYWZ0ZXJf
cG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1
aWxkZXIqIHJlc3VsdF9idWlsZGVyKSBjb25zdDsKKyAgICAgICAgCisgICAgICAgIGNvbnN0IGlu
dCBmbGFnc187CisgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IGluZmluaXR5X3N5bWJvbF87Cisg
ICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IG5hbl9zeW1ib2xfOworICAgICAgICBjb25zdCBjaGFy
IGV4cG9uZW50X2NoYXJhY3Rlcl87CisgICAgICAgIGNvbnN0IGludCBkZWNpbWFsX2luX3Nob3J0
ZXN0X2xvd187CisgICAgICAgIGNvbnN0IGludCBkZWNpbWFsX2luX3Nob3J0ZXN0X2hpZ2hfOwor
ICAgICAgICBjb25zdCBpbnQgbWF4X2xlYWRpbmdfcGFkZGluZ196ZXJvZXNfaW5fcHJlY2lzaW9u
X21vZGVfOworICAgICAgICBjb25zdCBpbnQgbWF4X3RyYWlsaW5nX3BhZGRpbmdfemVyb2VzX2lu
X3ByZWNpc2lvbl9tb2RlXzsKKyAgICAgICAgCisgICAgICAgIERJU0FMTE9XX0lNUExJQ0lUX0NP
TlNUUlVDVE9SUyhEb3VibGVUb1N0cmluZ0NvbnZlcnRlcik7CisgICAgfTsKKyAgICAKKyAgICAK
KyAgICBjbGFzcyBTdHJpbmdUb0RvdWJsZUNvbnZlcnRlciB7CisgICAgcHVibGljOgorICAgICAg
ICAvLyBFbnVtZXJhdGlvbiBmb3IgYWxsb3dpbmcgb2N0YWxzIGFuZCBpZ25vcmluZyBqdW5rIHdo
ZW4gY29udmVydGluZworICAgICAgICAvLyBzdHJpbmdzIHRvIG51bWJlcnMuCisgICAgICAgIGVu
dW0gRmxhZ3MgeworICAgICAgICAgICAgTk9fRkxBR1MgPSAwLAorICAgICAgICAgICAgQUxMT1df
SEVYID0gMSwKKyAgICAgICAgICAgIEFMTE9XX09DVEFMUyA9IDIsCisgICAgICAgICAgICBBTExP
V19UUkFJTElOR19KVU5LID0gNCwKKyAgICAgICAgICAgIEFMTE9XX0xFQURJTkdfU1BBQ0VTID0g
OCwKKyAgICAgICAgICAgIEFMTE9XX1RSQUlMSU5HX1NQQUNFUyA9IDE2LAorICAgICAgICAgICAg
QUxMT1dfU1BBQ0VTX0FGVEVSX1NJR04gPSAzMgorICAgICAgICB9OworICAgICAgICAKKyAgICAg
ICAgLy8gRmxhZ3Mgc2hvdWxkIGJlIGEgYml0LW9yIGNvbWJpbmF0aW9uIG9mIHRoZSBwb3NzaWJs
ZSBGbGFncy1lbnVtLgorICAgICAgICAvLyAgLSBOT19GTEFHUzogbm8gc3BlY2lhbCBmbGFncy4K
KyAgICAgICAgLy8gIC0gQUxMT1dfSEVYOiByZWNvZ25pemVzIHRoZSBwcmVmaXggIjB4Ii4gSGV4
IG51bWJlcnMgbWF5IG9ubHkgYmUgaW50ZWdlcnMuCisgICAgICAgIC8vICAgICAgRXg6IFN0cmlu
Z1RvRG91YmxlKCIweDEyMzQiKSAtPiA0NjYwLjAKKyAgICAgICAgLy8gICAgICAgICAgSW4gU3Ry
aW5nVG9Eb3VibGUoIjB4MTIzNC41NiIpIHRoZSBjaGFyYWN0ZXJzICIuNTYiIGFyZSB0cmFpbGlu
ZworICAgICAgICAvLyAgICAgICAgICBqdW5rLiBUaGUgcmVzdWx0IG9mIHRoZSBjYWxsIGlzIGhl
bmNlIGRlcGVuZGVudCBvbgorICAgICAgICAvLyAgICAgICAgICB0aGUgQUxMT1dfVFJBSUxJTkdf
SlVOSyBmbGFnIGFuZC9vciB0aGUganVuayB2YWx1ZS4KKyAgICAgICAgLy8gICAgICBXaXRoIHRo
aXMgZmxhZyAiMHgiIGlzIGEganVuay1zdHJpbmcuIEV2ZW4gd2l0aCBBTExPV19UUkFJTElOR19K
VU5LLAorICAgICAgICAvLyAgICAgIHRoZSBzdHJpbmcgd2lsbCBub3QgYmUgcGFyc2VkIGFzICIw
IiBmb2xsb3dlZCBieSBqdW5rLgorICAgICAgICAvLworICAgICAgICAvLyAgLSBBTExPV19PQ1RB
TFM6IHJlY29nbml6ZXMgdGhlIHByZWZpeCAiMCIgZm9yIG9jdGFsczoKKyAgICAgICAgLy8gICAg
ICBJZiBhIHNlcXVlbmNlIG9mIG9jdGFsIGRpZ2l0cyBzdGFydHMgd2l0aCAnMCcsIHRoZW4gdGhl
IG51bWJlciBpcworICAgICAgICAvLyAgICAgIHJlYWQgYXMgb2N0YWwgaW50ZWdlci4gT2N0YWwg
bnVtYmVycyBtYXkgb25seSBiZSBpbnRlZ2Vycy4KKyAgICAgICAgLy8gICAgICBFeDogU3RyaW5n
VG9Eb3VibGUoIjAxMjM0IikgLT4gNjY4LjAKKyAgICAgICAgLy8gICAgICAgICAgU3RyaW5nVG9E
b3VibGUoIjAxMjM0OSIpIC0+IDEyMzQ5LjAgIC8vIE5vdCBhIHNlcXVlbmNlIG9mIG9jdGFsCisg
ICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBkaWdpdHMuCisgICAgICAgIC8vICAgICAgICAgIEluIFN0cmluZ1RvRG91YmxlKCIwMTIzNC41
NiIpIHRoZSBjaGFyYWN0ZXJzICIuNTYiIGFyZSB0cmFpbGluZworICAgICAgICAvLyAgICAgICAg
ICBqdW5rLiBUaGUgcmVzdWx0IG9mIHRoZSBjYWxsIGlzIGhlbmNlIGRlcGVuZGVudCBvbgorICAg
ICAgICAvLyAgICAgICAgICB0aGUgQUxMT1dfVFJBSUxJTkdfSlVOSyBmbGFnIGFuZC9vciB0aGUg
anVuayB2YWx1ZS4KKyAgICAgICAgLy8gICAgICAgICAgSW4gU3RyaW5nVG9Eb3VibGUoIjAxMjM0
ZTU2IikgdGhlIGNoYXJhY3RlcnMgImU1NiIgYXJlIHRyYWlsaW5nCisgICAgICAgIC8vICAgICAg
ICAgIGp1bmssIHRvby4KKyAgICAgICAgLy8gIC0gQUxMT1dfVFJBSUxJTkdfSlVOSzogaWdub3Jl
IHRyYWlsaW5nIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IHBhcnQgb2YKKyAgICAgICAgLy8gICAg
ICBhIGRvdWJsZSBsaXRlcmFsLgorICAgICAgICAvLyAgLSBBTExPV19MRUFESU5HX1NQQUNFUzog
c2tpcCBvdmVyIGxlYWRpbmcgc3BhY2VzLgorICAgICAgICAvLyAgLSBBTExPV19UUkFJTElOR19T
UEFDRVM6IGlnbm9yZSB0cmFpbGluZyBzcGFjZXMuCisgICAgICAgIC8vICAtIEFMTE9XX1NQQUNF
U19BRlRFUl9TSUdOOiBpZ25vcmUgc3BhY2VzIGFmdGVyIHRoZSBzaWduLgorICAgICAgICAvLyAg
ICAgICBFeDogU3RyaW5nVG9Eb3VibGUoIi0gICAxMjMuMiIpIC0+IC0xMjMuMi4KKyAgICAgICAg
Ly8gICAgICAgICAgIFN0cmluZ1RvRG91YmxlKCIrICAgMTIzLjIiKSAtPiAxMjMuMgorICAgICAg
ICAvLworICAgICAgICAvLyBlbXB0eV9zdHJpbmdfdmFsdWUgaXMgcmV0dXJuZWQgd2hlbiBhbiBl
bXB0eSBzdHJpbmcgaXMgZ2l2ZW4gYXMgaW5wdXQuCisgICAgICAgIC8vIElmIEFMTE9XX0xFQURJ
TkdfU1BBQ0VTIG9yIEFMTE9XX1RSQUlMSU5HX1NQQUNFUyBhcmUgc2V0LCB0aGVuIGEgc3RyaW5n
CisgICAgICAgIC8vIGNvbnRhaW5pbmcgb25seSBzcGFjZXMgaXMgY29udmVydGVkIHRvIHRoZSAn
ZW1wdHlfc3RyaW5nX3ZhbHVlJywgdG9vLgorICAgICAgICAvLworICAgICAgICAvLyBqdW5rX3N0
cmluZ192YWx1ZSBpcyByZXR1cm5lZCB3aGVuCisgICAgICAgIC8vICBhKSBBTExPV19UUkFJTElO
R19KVU5LIGlzIG5vdCBzZXQsIGFuZCBhIGp1bmsgY2hhcmFjdGVyIChhIGNoYXJhY3RlciBub3QK
KyAgICAgICAgLy8gICAgIHBhcnQgb2YgYSBkb3VibGUtbGl0ZXJhbCkgaXMgZm91bmQuCisgICAg
ICAgIC8vICBiKSBBTExPV19UUkFJTElOR19KVU5LIGlzIHNldCwgYnV0IHRoZSBzdHJpbmcgZG9l
cyBub3Qgc3RhcnQgd2l0aCBhCisgICAgICAgIC8vICAgICBkb3VibGUgbGl0ZXJhbC4KKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gaW5maW5pdHlfc3ltYm9sIGFuZCBuYW5fc3ltYm9sIGFyZSBzdHJp
bmdzIHRoYXQgYXJlIHVzZWQgdG8gZGV0ZWN0CisgICAgICAgIC8vIGlucHV0cyB0aGF0IHJlcHJl
c2VudCBpbmZpbml0eSBhbmQgTmFOLiBUaGV5IGNhbiBiZSBudWxsLCBpbiB3aGljaCBjYXNlCisg
ICAgICAgIC8vIHRoZXkgYXJlIGlnbm9yZWQuCisgICAgICAgIC8vIFRoZSBjb252ZXJzaW9uIHJv
dXRpbmUgZmlyc3QgcmVhZHMgYW55IHBvc3NpYmxlIHNpZ25zLiBUaGVuIGl0IGNvbXBhcmVzIHRo
ZQorICAgICAgICAvLyBmb2xsb3dpbmcgY2hhcmFjdGVyIG9mIHRoZSBpbnB1dC1zdHJpbmcgd2l0
aCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mCisgICAgICAgIC8vIHRoZSBpbmZpbml0eSwgYW5kIG5h
bi1zeW1ib2wuIElmIGVpdGhlciBtYXRjaGVzLCB0aGUgZnVuY3Rpb24gYXNzdW1lcywgdGhhdAor
ICAgICAgICAvLyBhIG1hdGNoIGhhcyBiZWVuIGZvdW5kLCBhbmQgZXhwZWN0cyB0aGUgZm9sbG93
aW5nIGlucHV0IGNoYXJhY3RlcnMgdG8gbWF0Y2gKKyAgICAgICAgLy8gdGhlIHJlbWFpbmluZyBj
aGFyYWN0ZXJzIG9mIHRoZSBzcGVjaWFsLXZhbHVlIHN5bWJvbC4KKyAgICAgICAgLy8gVGhpcyBt
ZWFucyB0aGF0IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zIGFwcGx5IHRvIHNwZWNpYWwtdmFs
dWUgc3ltYm9sczoKKyAgICAgICAgLy8gIC0gdGhleSBtdXN0IG5vdCBzdGFydCB3aXRoIHNpZ25z
ICgnKycsIG9yICctJyksCisgICAgICAgIC8vICAtIHRoZXkgbXVzdCBub3QgaGF2ZSB0aGUgc2Ft
ZSBmaXJzdCBjaGFyYWN0ZXIuCisgICAgICAgIC8vICAtIHRoZXkgbXVzdCBub3Qgc3RhcnQgd2l0
aCBkaWdpdHMuCisgICAgICAgIC8vCisgICAgICAgIC8vIEV4YW1wbGVzOgorICAgICAgICAvLyAg
ZmxhZ3MgPSBBTExPV19IRVggfCBBTExPV19UUkFJTElOR19KVU5LLAorICAgICAgICAvLyAgZW1w
dHlfc3RyaW5nX3ZhbHVlID0gMC4wLAorICAgICAgICAvLyAganVua19zdHJpbmdfdmFsdWUgPSBO
YU4sCisgICAgICAgIC8vICBpbmZpbml0eV9zeW1ib2wgPSAiaW5maW5pdHkiLAorICAgICAgICAv
LyAgbmFuX3N5bWJvbCA9ICJuYW4iOgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMHgx
MjM0IikgLT4gNDY2MC4wLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMHgxMjM0SyIp
IC0+IDQ2NjAuMC4KKyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIiIpIC0+IDAuMCAgLy8g
ZW1wdHlfc3RyaW5nX3ZhbHVlLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiICIpIC0+
IE5hTiAgLy8ganVua19zdHJpbmdfdmFsdWUuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91Ymxl
KCIgMSIpIC0+IE5hTiAgLy8ganVua19zdHJpbmdfdmFsdWUuCisgICAgICAgIC8vICAgIFN0cmlu
Z1RvRG91YmxlKCIweCIpIC0+IE5hTiAgLy8ganVua19zdHJpbmdfdmFsdWUuCisgICAgICAgIC8v
ICAgIFN0cmluZ1RvRG91YmxlKCItMTIzLjQ1IikgLT4gLTEyMy40NS4KKyAgICAgICAgLy8gICAg
U3RyaW5nVG9Eb3VibGUoIi0tMTIzLjQ1IikgLT4gTmFOICAvLyBqdW5rX3N0cmluZ192YWx1ZS4K
KyAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjEyM2U0NSIpIC0+IDEyM2U0NS4KKyAgICAg
ICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjEyM0U0NSIpIC0+IDEyM2U0NS4KKyAgICAgICAgLy8g
ICAgU3RyaW5nVG9Eb3VibGUoIjEyM2UrNDUiKSAtPiAxMjNlNDUuCisgICAgICAgIC8vICAgIFN0
cmluZ1RvRG91YmxlKCIxMjNFLTQ1IikgLT4gMTIzZS00NS4KKyAgICAgICAgLy8gICAgU3RyaW5n
VG9Eb3VibGUoIjEyM2UiKSAtPiAxMjMuMCAgLy8gdHJhaWxpbmcganVuayBpZ25vcmVkLgorICAg
ICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMTIzZS0iKSAtPiAxMjMuMCAgLy8gdHJhaWxpbmcg
anVuayBpZ25vcmVkLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiK05hTiIpIC0+IE5h
TiAgLy8gTmFOIHN0cmluZyBsaXRlcmFsLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgi
LWluZmluaXR5IikgLT4gLWluZi4gIC8vIGluZmluaXR5IGxpdGVyYWwuCisgICAgICAgIC8vICAg
IFN0cmluZ1RvRG91YmxlKCJJbmZpbml0eSIpIC0+IE5hTiAgLy8ganVua19zdHJpbmdfdmFsdWUu
CisgICAgICAgIC8vCisgICAgICAgIC8vICBmbGFncyA9IEFMTE9XX09DVEFMIHwgQUxMT1dfTEVB
RElOR19TUEFDRVMsCisgICAgICAgIC8vICBlbXB0eV9zdHJpbmdfdmFsdWUgPSAwLjAsCisgICAg
ICAgIC8vICBqdW5rX3N0cmluZ192YWx1ZSA9IE5hTiwKKyAgICAgICAgLy8gIGluZmluaXR5X3N5
bWJvbCA9IE5VTEwsCisgICAgICAgIC8vICBuYW5fc3ltYm9sID0gTlVMTDoKKyAgICAgICAgLy8g
ICAgU3RyaW5nVG9Eb3VibGUoIjB4MTIzNCIpIC0+IE5hTiAgLy8ganVua19zdHJpbmdfdmFsdWUu
CisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIwMTIzNCIpIC0+IDY2OC4wLgorICAgICAg
ICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiIikgLT4gMC4wICAvLyBlbXB0eV9zdHJpbmdfdmFsdWUu
CisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIgIikgLT4gMC4wICAvLyBlbXB0eV9zdHJp
bmdfdmFsdWUuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIgMSIpIC0+IDEuMAorICAg
ICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMHgiKSAtPiBOYU4gIC8vIGp1bmtfc3RyaW5nX3Zh
bHVlLgorICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMDEyM2U0NSIpIC0+IE5hTiAgLy8g
anVua19zdHJpbmdfdmFsdWUuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIwMTIzOUU0
NSIpIC0+IDEyMzllNDUuCisgICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCItaW5maW5pdHki
KSAtPiBOYU4gIC8vIGp1bmtfc3RyaW5nX3ZhbHVlLgorICAgICAgICAvLyAgICBTdHJpbmdUb0Rv
dWJsZSgiTmFOIikgLT4gTmFOICAvLyBqdW5rX3N0cmluZ192YWx1ZS4KKyAgICAgICAgU3RyaW5n
VG9Eb3VibGVDb252ZXJ0ZXIoaW50IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkb3VibGUgZW1wdHlfc3RyaW5nX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkb3VibGUganVua19zdHJpbmdfdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIGluZmluaXR5X3N5bWJvbCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciogbmFuX3N5bWJvbCkKKyAgICAgICAgOiBmbGFnc18o
ZmxhZ3MpLAorICAgICAgICBlbXB0eV9zdHJpbmdfdmFsdWVfKGVtcHR5X3N0cmluZ192YWx1ZSks
CisgICAgICAgIGp1bmtfc3RyaW5nX3ZhbHVlXyhqdW5rX3N0cmluZ192YWx1ZSksCisgICAgICAg
IGluZmluaXR5X3N5bWJvbF8oaW5maW5pdHlfc3ltYm9sKSwKKyAgICAgICAgbmFuX3N5bWJvbF8o
bmFuX3N5bWJvbCkgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBQZXJmb3JtcyB0
aGUgY29udmVyc2lvbi4KKyAgICAgICAgLy8gVGhlIG91dHB1dCBwYXJhbWV0ZXIgJ3Byb2Nlc3Nl
ZF9jaGFyYWN0ZXJzX2NvdW50JyBpcyBzZXQgdG8gdGhlIG51bWJlcgorICAgICAgICAvLyBvZiBj
aGFyYWN0ZXJzIHRoYXQgaGF2ZSBiZWVuIHByb2Nlc3NlZCB0byByZWFkIHRoZSBudW1iZXIuCisg
ICAgICAgIC8vIFNwYWNlcyB0aGFuIGFyZSBwcm9jZXNzZWQgd2l0aCBBTExPV197TEVBRElOR3xU
UkFJTElOR31fU1BBQ0VTIGFyZSBpbmNsdWRlZAorICAgICAgICAvLyBpbiB0aGUgJ3Byb2Nlc3Nl
ZF9jaGFyYWN0ZXJzX2NvdW50Jy4gVHJhaWxpbmcganVuayBpcyBuZXZlciBpbmNsdWRlZC4KKyAg
ICAgICAgZG91YmxlIFN0cmluZ1RvRG91YmxlKGNvbnN0IGNoYXIqIGJ1ZmZlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQqIHByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50KTsKKyAgICAgICAgCisgICAg
cHJpdmF0ZToKKyAgICAgICAgY29uc3QgaW50IGZsYWdzXzsKKyAgICAgICAgY29uc3QgZG91Ymxl
IGVtcHR5X3N0cmluZ192YWx1ZV87CisgICAgICAgIGNvbnN0IGRvdWJsZSBqdW5rX3N0cmluZ192
YWx1ZV87CisgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IGluZmluaXR5X3N5bWJvbF87CisgICAg
ICAgIGNvbnN0IGNoYXIqIGNvbnN0IG5hbl9zeW1ib2xfOworICAgICAgICAKKyAgICAgICAgRElT
QUxMT1dfSU1QTElDSVRfQ09OU1RSVUNUT1JTKFN0cmluZ1RvRG91YmxlQ29udmVydGVyKTsKKyAg
ICB9OworICAgIAorfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCisKK30gLy8gbmFt
ZXNwYWNlIFdURgorCisjZW5kaWYgIC8vIERPVUJMRV9DT05WRVJTSU9OX0RPVUJMRV9DT05WRVJT
SU9OX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZG91Ymxl
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZG91YmxlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MDU0NGZkYjVhODE3ZmE4MjE2YjNlMzFlNjVhMzE5MTJmMDc4NzIyNQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9kb3VibGUuaApAQCAtMCwwICsxLDI0
OSBAQAorLy8gQ29weXJpZ2h0IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8K
Ky8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8g
ICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAg
ICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
Ly8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWZuZGVmIERPVUJMRV9DT05WRVJT
SU9OX0RPVUJMRV9IXworI2RlZmluZSBET1VCTEVfQ09OVkVSU0lPTl9ET1VCTEVfSF8KKworI2lu
Y2x1ZGUgImRpeS1mcC5oIgorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIGRvdWJsZV9j
b252ZXJzaW9uIHsKKyAgICAKKyAgICAvLyBXZSBhc3N1bWUgdGhhdCBkb3VibGVzIGFuZCB1aW50
NjRfdCBoYXZlIHRoZSBzYW1lIGVuZGlhbm5lc3MuCisgICAgc3RhdGljIHVpbnQ2NF90IGRvdWJs
ZV90b191aW50NjQoZG91YmxlIGQpIHsgcmV0dXJuIEJpdENhc3Q8dWludDY0X3Q+KGQpOyB9Cisg
ICAgc3RhdGljIGRvdWJsZSB1aW50NjRfdG9fZG91YmxlKHVpbnQ2NF90IGQ2NCkgeyByZXR1cm4g
Qml0Q2FzdDxkb3VibGU+KGQ2NCk7IH0KKyAgICAKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb25zIGZv
ciBkb3VibGVzLgorICAgIGNsYXNzIERvdWJsZSB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0
aWMgY29uc3QgdWludDY0X3Qga1NpZ25NYXNrID0gVUlOVDY0XzJQQVJUX0MoMHg4MDAwMDAwMCwg
MDAwMDAwMDApOworICAgICAgICBzdGF0aWMgY29uc3QgdWludDY0X3Qga0V4cG9uZW50TWFzayA9
IFVJTlQ2NF8yUEFSVF9DKDB4N0ZGMDAwMDAsIDAwMDAwMDAwKTsKKyAgICAgICAgc3RhdGljIGNv
bnN0IHVpbnQ2NF90IGtTaWduaWZpY2FuZE1hc2sgPSBVSU5UNjRfMlBBUlRfQygweDAwMEZGRkZG
LCBGRkZGRkZGRik7CisgICAgICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBrSGlkZGVuQml0ID0g
VUlOVDY0XzJQQVJUX0MoMHgwMDEwMDAwMCwgMDAwMDAwMDApOworICAgICAgICBzdGF0aWMgY29u
c3QgaW50IGtQaHlzaWNhbFNpZ25pZmljYW5kU2l6ZSA9IDUyOyAgLy8gRXhjbHVkZXMgdGhlIGhp
ZGRlbiBiaXQuCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQga1NpZ25pZmljYW5kU2l6ZSA9IDUz
OworICAgICAgICAKKyAgICAgICAgRG91YmxlKCkgOiBkNjRfKDApIHt9CisgICAgICAgIGV4cGxp
Y2l0IERvdWJsZShkb3VibGUgZCkgOiBkNjRfKGRvdWJsZV90b191aW50NjQoZCkpIHt9CisgICAg
ICAgIGV4cGxpY2l0IERvdWJsZSh1aW50NjRfdCBkNjQpIDogZDY0XyhkNjQpIHt9CisgICAgICAg
IGV4cGxpY2l0IERvdWJsZShEaXlGcCBkaXlfZnApCisgICAgICAgIDogZDY0XyhEaXlGcFRvVWlu
dDY0KGRpeV9mcCkpIHt9CisgICAgICAgIAorICAgICAgICAvLyBUaGUgdmFsdWUgZW5jb2RlZCBi
eSB0aGlzIERvdWJsZSBtdXN0IGJlIGdyZWF0ZXIgb3IgZXF1YWwgdG8gKzAuMC4KKyAgICAgICAg
Ly8gSXQgbXVzdCBub3QgYmUgc3BlY2lhbCAoaW5maW5pdHksIG9yIE5hTikuCisgICAgICAgIERp
eUZwIEFzRGl5RnAoKSBjb25zdCB7CisgICAgICAgICAgICBBU1NFUlQoU2lnbigpID4gMCk7Cisg
ICAgICAgICAgICBBU1NFUlQoIUlzU3BlY2lhbCgpKTsKKyAgICAgICAgICAgIHJldHVybiBEaXlG
cChTaWduaWZpY2FuZCgpLCBFeHBvbmVudCgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgLy8gVGhlIHZhbHVlIGVuY29kZWQgYnkgdGhpcyBEb3VibGUgbXVzdCBiZSBzdHJpY3RseSBn
cmVhdGVyIHRoYW4gMC4KKyAgICAgICAgRGl5RnAgQXNOb3JtYWxpemVkRGl5RnAoKSBjb25zdCB7
CisgICAgICAgICAgICBBU1NFUlQodmFsdWUoKSA+IDAuMCk7CisgICAgICAgICAgICB1aW50NjRf
dCBmID0gU2lnbmlmaWNhbmQoKTsKKyAgICAgICAgICAgIGludCBlID0gRXhwb25lbnQoKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGhlIGN1cnJlbnQgZG91YmxlIGNvdWxkIGJlIGEg
ZGVub3JtYWwuCisgICAgICAgICAgICB3aGlsZSAoKGYgJiBrSGlkZGVuQml0KSA9PSAwKSB7Cisg
ICAgICAgICAgICAgICAgZiA8PD0gMTsKKyAgICAgICAgICAgICAgICBlLS07CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAvLyBEbyB0aGUgZmluYWwgc2hpZnRzIGluIG9uZSBnby4KKyAgICAg
ICAgICAgIGYgPDw9IERpeUZwOjprU2lnbmlmaWNhbmRTaXplIC0ga1NpZ25pZmljYW5kU2l6ZTsK
KyAgICAgICAgICAgIGUgLT0gRGl5RnA6OmtTaWduaWZpY2FuZFNpemUgLSBrU2lnbmlmaWNhbmRT
aXplOworICAgICAgICAgICAgcmV0dXJuIERpeUZwKGYsIGUpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICAvLyBSZXR1cm5zIHRoZSBkb3VibGUncyBiaXQgYXMgdWludDY0LgorICAgICAg
ICB1aW50NjRfdCBBc1VpbnQ2NCgpIGNvbnN0IHsKKyAgICAgICAgICAgIHJldHVybiBkNjRfOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBSZXR1cm5zIHRoZSBuZXh0IGdyZWF0ZXIg
ZG91YmxlLiBSZXR1cm5zICtpbmZpbml0eSBvbiBpbnB1dCAraW5maW5pdHkuCisgICAgICAgIGRv
dWJsZSBOZXh0RG91YmxlKCkgY29uc3QgeworICAgICAgICAgICAgaWYgKGQ2NF8gPT0ga0luZmlu
aXR5KSByZXR1cm4gRG91YmxlKGtJbmZpbml0eSkudmFsdWUoKTsKKyAgICAgICAgICAgIGlmIChT
aWduKCkgPCAwICYmIFNpZ25pZmljYW5kKCkgPT0gMCkgeworICAgICAgICAgICAgICAgIC8vIC0w
LjAKKyAgICAgICAgICAgICAgICByZXR1cm4gMC4wOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKFNpZ24oKSA8IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRG91YmxlKGQ2NF8g
LSAxKS52YWx1ZSgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gRG91YmxlKGQ2NF8gKyAxKS52YWx1ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBpbnQgRXhwb25lbnQoKSBjb25zdCB7CisgICAgICAgICAgICBpZiAo
SXNEZW5vcm1hbCgpKSByZXR1cm4ga0Rlbm9ybWFsRXhwb25lbnQ7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHVpbnQ2NF90IGQ2NCA9IEFzVWludDY0KCk7CisgICAgICAgICAgICBpbnQgYmlh
c2VkX2UgPQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PigoZDY0ICYga0V4cG9uZW50TWFz
aykgPj4ga1BoeXNpY2FsU2lnbmlmaWNhbmRTaXplKTsKKyAgICAgICAgICAgIHJldHVybiBiaWFz
ZWRfZSAtIGtFeHBvbmVudEJpYXM7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHVpbnQ2
NF90IFNpZ25pZmljYW5kKCkgY29uc3QgeworICAgICAgICAgICAgdWludDY0X3QgZDY0ID0gQXNV
aW50NjQoKTsKKyAgICAgICAgICAgIHVpbnQ2NF90IHNpZ25pZmljYW5kID0gZDY0ICYga1NpZ25p
ZmljYW5kTWFzazsKKyAgICAgICAgICAgIGlmICghSXNEZW5vcm1hbCgpKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHNpZ25pZmljYW5kICsga0hpZGRlbkJpdDsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNpZ25pZmljYW5kOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGRvdWJs
ZSBpcyBhIGRlbm9ybWFsLgorICAgICAgICBib29sIElzRGVub3JtYWwoKSBjb25zdCB7CisgICAg
ICAgICAgICB1aW50NjRfdCBkNjQgPSBBc1VpbnQ2NCgpOworICAgICAgICAgICAgcmV0dXJuIChk
NjQgJiBrRXhwb25lbnRNYXNrKSA9PSAwOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAv
LyBXZSBjb25zaWRlciBkZW5vcm1hbHMgbm90IHRvIGJlIHNwZWNpYWwuCisgICAgICAgIC8vIEhl
bmNlIG9ubHkgSW5maW5pdHkgYW5kIE5hTiBhcmUgc3BlY2lhbC4KKyAgICAgICAgYm9vbCBJc1Nw
ZWNpYWwoKSBjb25zdCB7CisgICAgICAgICAgICB1aW50NjRfdCBkNjQgPSBBc1VpbnQ2NCgpOwor
ICAgICAgICAgICAgcmV0dXJuIChkNjQgJiBrRXhwb25lbnRNYXNrKSA9PSBrRXhwb25lbnRNYXNr
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIElzTmFuKCkgY29uc3QgeworICAg
ICAgICAgICAgdWludDY0X3QgZDY0ID0gQXNVaW50NjQoKTsKKyAgICAgICAgICAgIHJldHVybiAo
KGQ2NCAmIGtFeHBvbmVudE1hc2spID09IGtFeHBvbmVudE1hc2spICYmCisgICAgICAgICAgICAo
KGQ2NCAmIGtTaWduaWZpY2FuZE1hc2spICE9IDApOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBib29sIElzSW5maW5pdGUoKSBjb25zdCB7CisgICAgICAgICAgICB1aW50NjRfdCBkNjQg
PSBBc1VpbnQ2NCgpOworICAgICAgICAgICAgcmV0dXJuICgoZDY0ICYga0V4cG9uZW50TWFzaykg
PT0ga0V4cG9uZW50TWFzaykgJiYKKyAgICAgICAgICAgICgoZDY0ICYga1NpZ25pZmljYW5kTWFz
aykgPT0gMCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludCBTaWduKCkgY29uc3Qg
eworICAgICAgICAgICAgdWludDY0X3QgZDY0ID0gQXNVaW50NjQoKTsKKyAgICAgICAgICAgIHJl
dHVybiAoZDY0ICYga1NpZ25NYXNrKSA9PSAwPyAxOiAtMTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgLy8gUHJlY29uZGl0aW9uOiB0aGUgdmFsdWUgZW5jb2RlZCBieSB0aGlzIERvdWJs
ZSBtdXN0IGJlIGdyZWF0ZXIgb3IgZXF1YWwKKyAgICAgICAgLy8gdGhhbiArMC4wLgorICAgICAg
ICBEaXlGcCBVcHBlckJvdW5kYXJ5KCkgY29uc3QgeworICAgICAgICAgICAgQVNTRVJUKFNpZ24o
KSA+IDApOworICAgICAgICAgICAgcmV0dXJuIERpeUZwKFNpZ25pZmljYW5kKCkgKiAyICsgMSwg
RXhwb25lbnQoKSAtIDEpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBDb21wdXRl
cyB0aGUgdHdvIGJvdW5kYXJpZXMgb2YgdGhpcy4KKyAgICAgICAgLy8gVGhlIGJpZ2dlciBib3Vu
ZGFyeSAobV9wbHVzKSBpcyBub3JtYWxpemVkLiBUaGUgbG93ZXIgYm91bmRhcnkgaGFzIHRoZSBz
YW1lCisgICAgICAgIC8vIGV4cG9uZW50IGFzIG1fcGx1cy4KKyAgICAgICAgLy8gUHJlY29uZGl0
aW9uOiB0aGUgdmFsdWUgZW5jb2RlZCBieSB0aGlzIERvdWJsZSBtdXN0IGJlIGdyZWF0ZXIgdGhh
biAwLgorICAgICAgICB2b2lkIE5vcm1hbGl6ZWRCb3VuZGFyaWVzKERpeUZwKiBvdXRfbV9taW51
cywgRGl5RnAqIG91dF9tX3BsdXMpIGNvbnN0IHsKKyAgICAgICAgICAgIEFTU0VSVCh2YWx1ZSgp
ID4gMC4wKTsKKyAgICAgICAgICAgIERpeUZwIHYgPSB0aGlzLT5Bc0RpeUZwKCk7CisgICAgICAg
ICAgICBib29sIHNpZ25pZmljYW5kX2lzX3plcm8gPSAodi5mKCkgPT0ga0hpZGRlbkJpdCk7Cisg
ICAgICAgICAgICBEaXlGcCBtX3BsdXMgPSBEaXlGcDo6Tm9ybWFsaXplKERpeUZwKCh2LmYoKSA8
PCAxKSArIDEsIHYuZSgpIC0gMSkpOworICAgICAgICAgICAgRGl5RnAgbV9taW51czsKKyAgICAg
ICAgICAgIGlmIChzaWduaWZpY2FuZF9pc196ZXJvICYmIHYuZSgpICE9IGtEZW5vcm1hbEV4cG9u
ZW50KSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIGJvdW5kYXJ5IGlzIGNsb3Nlci4gVGhpbmsg
b2YgdiA9IDEwMDBlMTAgYW5kIHYtID0gOTk5OWU5LgorICAgICAgICAgICAgICAgIC8vIFRoZW4g
dGhlIGJvdW5kYXJ5ICg9PSAodiAtIHYtKS8yKSBpcyBub3QganVzdCBhdCBhIGRpc3RhbmNlIG9m
IDFlOSBidXQKKyAgICAgICAgICAgICAgICAvLyBhdCBhIGRpc3RhbmNlIG9mIDFlOC4KKyAgICAg
ICAgICAgICAgICAvLyBUaGUgb25seSBleGNlcHRpb24gaXMgZm9yIHRoZSBzbWFsbGVzdCBub3Jt
YWw6IHRoZSBsYXJnZXN0IGRlbm9ybWFsIGlzCisgICAgICAgICAgICAgICAgLy8gYXQgdGhlIHNh
bWUgZGlzdGFuY2UgYXMgaXRzIHN1Y2Nlc3Nvci4KKyAgICAgICAgICAgICAgICAvLyBOb3RlOiBk
ZW5vcm1hbHMgaGF2ZSB0aGUgc2FtZSBleHBvbmVudCBhcyB0aGUgc21hbGxlc3Qgbm9ybWFscy4K
KyAgICAgICAgICAgICAgICBtX21pbnVzID0gRGl5RnAoKHYuZigpIDw8IDIpIC0gMSwgdi5lKCkg
LSAyKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbV9taW51cyA9IERp
eUZwKCh2LmYoKSA8PCAxKSAtIDEsIHYuZSgpIC0gMSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBtX21pbnVzLnNldF9mKG1fbWludXMuZigpIDw8IChtX21pbnVzLmUoKSAtIG1fcGx1cy5l
KCkpKTsKKyAgICAgICAgICAgIG1fbWludXMuc2V0X2UobV9wbHVzLmUoKSk7CisgICAgICAgICAg
ICAqb3V0X21fcGx1cyA9IG1fcGx1czsKKyAgICAgICAgICAgICpvdXRfbV9taW51cyA9IG1fbWlu
dXM7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGRvdWJsZSB2YWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIHVpbnQ2NF90b19kb3VibGUoZDY0Xyk7IH0KKyAgICAgICAgCisgICAgICAgIC8vIFJl
dHVybnMgdGhlIHNpZ25pZmljYW5kIHNpemUgZm9yIGEgZ2l2ZW4gb3JkZXIgb2YgbWFnbml0dWRl
LgorICAgICAgICAvLyBJZiB2ID0gZioyXmUgd2l0aCAyXnAtMSA8PSBmIDw9IDJecCB0aGVuIHAr
ZSBpcyB2J3Mgb3JkZXIgb2YgbWFnbml0dWRlLgorICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHJl
dHVybnMgdGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBiaW5hcnkgZGlnaXRzIHYgd2lsbCBoYXZl
CisgICAgICAgIC8vIG9uY2UgaXQncyBlbmNvZGVkIGludG8gYSBkb3VibGUuIEluIGFsbW9zdCBh
bGwgY2FzZXMgdGhpcyBpcyBlcXVhbCB0bworICAgICAgICAvLyBrU2lnbmlmaWNhbmRTaXplLiBU
aGUgb25seSBleGNlcHRpb25zIGFyZSBkZW5vcm1hbHMuIFRoZXkgc3RhcnQgd2l0aAorICAgICAg
ICAvLyBsZWFkaW5nIHplcm9lcyBhbmQgdGhlaXIgZWZmZWN0aXZlIHNpZ25pZmljYW5kLXNpemUg
aXMgaGVuY2Ugc21hbGxlci4KKyAgICAgICAgc3RhdGljIGludCBTaWduaWZpY2FuZFNpemVGb3JP
cmRlck9mTWFnbml0dWRlKGludCBvcmRlcikgeworICAgICAgICAgICAgaWYgKG9yZGVyID49IChr
RGVub3JtYWxFeHBvbmVudCArIGtTaWduaWZpY2FuZFNpemUpKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGtTaWduaWZpY2FuZFNpemU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
b3JkZXIgPD0ga0Rlbm9ybWFsRXhwb25lbnQpIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJu
IG9yZGVyIC0ga0Rlbm9ybWFsRXhwb25lbnQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHN0YXRpYyBkb3VibGUgSW5maW5pdHkoKSB7CisgICAgICAgICAgICByZXR1cm4gRG91YmxlKGtJ
bmZpbml0eSkudmFsdWUoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIGRv
dWJsZSBOYU4oKSB7CisgICAgICAgICAgICByZXR1cm4gRG91YmxlKGtOYU4pLnZhbHVlKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBrRXhwb25lbnRCaWFzID0gMHgzRkYgKyBrUGh5c2ljYWxTaWduaWZpY2FuZFNpemU7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQga0Rlbm9ybWFsRXhwb25lbnQgPSAta0V4cG9uZW50QmlhcyAr
IDE7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQga01heEV4cG9uZW50ID0gMHg3RkYgLSBrRXhw
b25lbnRCaWFzOworICAgICAgICBzdGF0aWMgY29uc3QgdWludDY0X3Qga0luZmluaXR5ID0gVUlO
VDY0XzJQQVJUX0MoMHg3RkYwMDAwMCwgMDAwMDAwMDApOworICAgICAgICBzdGF0aWMgY29uc3Qg
dWludDY0X3Qga05hTiA9IFVJTlQ2NF8yUEFSVF9DKDB4N0ZGODAwMDAsIDAwMDAwMDAwKTsKKyAg
ICAgICAgCisgICAgICAgIGNvbnN0IHVpbnQ2NF90IGQ2NF87CisgICAgICAgIAorICAgICAgICBz
dGF0aWMgdWludDY0X3QgRGl5RnBUb1VpbnQ2NChEaXlGcCBkaXlfZnApIHsKKyAgICAgICAgICAg
IHVpbnQ2NF90IHNpZ25pZmljYW5kID0gZGl5X2ZwLmYoKTsKKyAgICAgICAgICAgIGludCBleHBv
bmVudCA9IGRpeV9mcC5lKCk7CisgICAgICAgICAgICB3aGlsZSAoc2lnbmlmaWNhbmQgPiBrSGlk
ZGVuQml0ICsga1NpZ25pZmljYW5kTWFzaykgeworICAgICAgICAgICAgICAgIHNpZ25pZmljYW5k
ID4+PSAxOworICAgICAgICAgICAgICAgIGV4cG9uZW50Kys7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoZXhwb25lbnQgPj0ga01heEV4cG9uZW50KSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGtJbmZpbml0eTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChleHBvbmVu
dCA8IGtEZW5vcm1hbEV4cG9uZW50KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAoZXhwb25lbnQgPiBrRGVub3JtYWxFeHBvbmVu
dCAmJiAoc2lnbmlmaWNhbmQgJiBrSGlkZGVuQml0KSA9PSAwKSB7CisgICAgICAgICAgICAgICAg
c2lnbmlmaWNhbmQgPDw9IDE7CisgICAgICAgICAgICAgICAgZXhwb25lbnQtLTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHVpbnQ2NF90IGJpYXNlZF9leHBvbmVudDsKKyAgICAgICAgICAg
IGlmIChleHBvbmVudCA9PSBrRGVub3JtYWxFeHBvbmVudCAmJiAoc2lnbmlmaWNhbmQgJiBrSGlk
ZGVuQml0KSA9PSAwKSB7CisgICAgICAgICAgICAgICAgYmlhc2VkX2V4cG9uZW50ID0gMDsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYmlhc2VkX2V4cG9uZW50ID0gc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KGV4cG9uZW50ICsga0V4cG9uZW50Qmlhcyk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gKHNpZ25pZmljYW5kICYga1NpZ25pZmljYW5kTWFzaykg
fAorICAgICAgICAgICAgKGJpYXNlZF9leHBvbmVudCA8PCBrUGh5c2ljYWxTaWduaWZpY2FuZFNp
emUpOworICAgICAgICB9CisgICAgfTsKKyAgICAKK30gIC8vIG5hbWVzcGFjZSBkb3VibGVfY29u
dmVyc2lvbgorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmICAvLyBET1VCTEVfQ09OVkVS
U0lPTl9ET1VCTEVfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRv
YS9mYXN0LWR0b2EuY2MgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZmFzdC1kdG9h
LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmJmYzJlNzgxYmZkZTA1OWFjZGE5OTIxODE4YWVhYzViN2M5OTZmYWMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZmFzdC1k
dG9hLmNjCkBAIC0wLDAgKzEsNzM5IEBACisvLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJvamVj
dCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisv
LyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNp
bmNsdWRlICJmYXN0LWR0b2EuaCIKKworI2luY2x1ZGUgImNhY2hlZC1wb3dlcnMuaCIKKyNpbmNs
dWRlICJkaXktZnAuaCIKKyNpbmNsdWRlICJkb3VibGUuaCIKKworbmFtZXNwYWNlIFdURiB7CisK
K25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CisgICAgCisgICAgLy8gVGhlIG1pbmltYWwg
YW5kIG1heGltYWwgdGFyZ2V0IGV4cG9uZW50IGRlZmluZSB0aGUgcmFuZ2Ugb2YgdydzIGJpbmFy
eQorICAgIC8vIGV4cG9uZW50LCB3aGVyZSAndycgaXMgdGhlIHJlc3VsdCBvZiBtdWx0aXBseWlu
ZyB0aGUgaW5wdXQgYnkgYSBjYWNoZWQgcG93ZXIKKyAgICAvLyBvZiB0ZW4uCisgICAgLy8KKyAg
ICAvLyBBIGRpZmZlcmVudCByYW5nZSBtaWdodCBiZSBjaG9zZW4gb24gYSBkaWZmZXJlbnQgcGxh
dGZvcm0sIHRvIG9wdGltaXplIGRpZ2l0CisgICAgLy8gZ2VuZXJhdGlvbiwgYnV0IGEgc21hbGxl
ciByYW5nZSByZXF1aXJlcyBtb3JlIHBvd2VycyBvZiB0ZW4gdG8gYmUgY2FjaGVkLgorICAgIHN0
YXRpYyBjb25zdCBpbnQga01pbmltYWxUYXJnZXRFeHBvbmVudCA9IC02MDsKKyAgICBzdGF0aWMg
Y29uc3QgaW50IGtNYXhpbWFsVGFyZ2V0RXhwb25lbnQgPSAtMzI7CisgICAgCisgICAgCisgICAg
Ly8gQWRqdXN0cyB0aGUgbGFzdCBkaWdpdCBvZiB0aGUgZ2VuZXJhdGVkIG51bWJlciwgYW5kIHNj
cmVlbnMgb3V0IGdlbmVyYXRlZAorICAgIC8vIHNvbHV0aW9ucyB0aGF0IG1heSBiZSBpbmFjY3Vy
YXRlLiBBIHNvbHV0aW9uIG1heSBiZSBpbmFjY3VyYXRlIGlmIGl0IGlzCisgICAgLy8gb3V0c2lk
ZSB0aGUgc2FmZSBpbnRlcnZhbCwgb3IgaWYgd2UgY2Fubm90IHByb3ZlIHRoYXQgaXQgaXMgY2xv
c2VyIHRvIHRoZQorICAgIC8vIGlucHV0IHRoYW4gYSBuZWlnaGJvcmluZyByZXByZXNlbnRhdGlv
biBvZiB0aGUgc2FtZSBsZW5ndGguCisgICAgLy8KKyAgICAvLyBJbnB1dDogKiBidWZmZXIgY29u
dGFpbmluZyB0aGUgZGlnaXRzIG9mIHRvb19oaWdoIC8gMTBea2FwcGEKKyAgICAvLyAgICAgICAg
KiB0aGUgYnVmZmVyJ3MgbGVuZ3RoCisgICAgLy8gICAgICAgICogZGlzdGFuY2VfdG9vX2hpZ2hf
dyA9PSAodG9vX2hpZ2ggLSB3KS5mKCkgKiB1bml0CisgICAgLy8gICAgICAgICogdW5zYWZlX2lu
dGVydmFsID09ICh0b29faGlnaCAtIHRvb19sb3cpLmYoKSAqIHVuaXQKKyAgICAvLyAgICAgICAg
KiByZXN0ID0gKHRvb19oaWdoIC0gYnVmZmVyICogMTBea2FwcGEpLmYoKSAqIHVuaXQKKyAgICAv
LyAgICAgICAgKiB0ZW5fa2FwcGEgPSAxMF5rYXBwYSAqIHVuaXQKKyAgICAvLyAgICAgICAgKiB1
bml0ID0gdGhlIGNvbW1vbiBtdWx0aXBsaWVyCisgICAgLy8gT3V0cHV0OiByZXR1cm5zIHRydWUg
aWYgdGhlIGJ1ZmZlciBpcyBndWFyYW50ZWVkIHRvIGNvbnRhaW4gdGhlIGNsb3Nlc3QKKyAgICAv
LyAgICByZXByZXNlbnRhYmxlIG51bWJlciB0byB0aGUgaW5wdXQuCisgICAgLy8gIE1vZGlmaWVz
IHRoZSBnZW5lcmF0ZWQgZGlnaXRzIGluIHRoZSBidWZmZXIgdG8gYXBwcm9hY2ggKHJvdW5kIHRv
d2FyZHMpIHcuCisgICAgc3RhdGljIGJvb2wgUm91bmRXZWVkKFZlY3RvcjxjaGFyPiBidWZmZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGgsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVpbnQ2NF90IGRpc3RhbmNlX3Rvb19oaWdoX3csCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVpbnQ2NF90IHVuc2FmZV9pbnRlcnZhbCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgdWludDY0X3QgcmVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3Qg
dGVuX2thcHBhLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCB1bml0KSB7Cisg
ICAgICAgIHVpbnQ2NF90IHNtYWxsX2Rpc3RhbmNlID0gZGlzdGFuY2VfdG9vX2hpZ2hfdyAtIHVu
aXQ7CisgICAgICAgIHVpbnQ2NF90IGJpZ19kaXN0YW5jZSA9IGRpc3RhbmNlX3Rvb19oaWdoX3cg
KyB1bml0OworICAgICAgICAvLyBMZXQgd19sb3cgID0gdG9vX2hpZ2ggLSBiaWdfZGlzdGFuY2Us
IGFuZAorICAgICAgICAvLyAgICAgd19oaWdoID0gdG9vX2hpZ2ggLSBzbWFsbF9kaXN0YW5jZS4K
KyAgICAgICAgLy8gTm90ZTogd19sb3cgPCB3IDwgd19oaWdoCisgICAgICAgIC8vCisgICAgICAg
IC8vIFRoZSByZWFsIHcgKCogdW5pdCkgbXVzdCBsaWUgc29tZXdoZXJlIGluc2lkZSB0aGUgaW50
ZXJ2YWwKKyAgICAgICAgLy8gXXdfbG93OyB3X2hpZ2hbIChvZnRlbiB3cml0dGVuIGFzICIod19s
b3c7IHdfaGlnaCkiKQorICAgICAgICAKKyAgICAgICAgLy8gQmFzaWNhbGx5IHRoZSBidWZmZXIg
Y3VycmVudGx5IGNvbnRhaW5zIGEgbnVtYmVyIGluIHRoZSB1bnNhZmUgaW50ZXJ2YWwKKyAgICAg
ICAgLy8gXXRvb19sb3c7IHRvb19oaWdoWyB3aXRoIHRvb19sb3cgPCB3IDwgdG9vX2hpZ2gKKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gIHRvb19oaWdoIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g
LSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtCisgICAgICAgIC8vICAgICAg
ICAgICAgICAgICAgICAgXnYgMSB1bml0ICAgICAgICAgICAgXiAgICAgIF4gICAgICAgICAgICAg
ICAgIF4gICAgICBeCisgICAgICAgIC8vICBib3VuZGFyeV9oaWdoIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLSAgICAgLiAgICAgIC4gICAgICAgICAgICAgICAgIC4gICAgICAuCisgICAgICAgIC8vICAg
ICAgICAgICAgICAgICAgICAgXnYgMSB1bml0ICAgICAgICAgICAgLiAgICAgIC4gICAgICAgICAg
ICAgICAgIC4gICAgICAuCisgICAgICAgIC8vICAgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAt
IC0gLSAtIC0gLSAgKyAgLSAtICsgLSAtIC0gLSAtIC0gICAgIC4gICAgICAuCisgICAgICAgIC8v
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAgICAgIC4gICAgICAg
ICBeICAgICAgIC4gICAgICAuCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLiAgYmlnX2Rpc3RhbmNlICAuICAgICAgIC4gICAgICAuCisgICAgICAg
IC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAgICAgIC4gICAg
ICAgICAuICAgICAgIC4gICAgcmVzdAorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNtYWxsX2Rpc3RhbmNlICAgICAuICAgICAgICAgLiAgICAgICAuICAgICAgLgorICAg
ICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgICAgICAu
ICAgICAgICAgLiAgICAgICAuICAgICAgLgorICAgICAgICAvLyAgd19oaWdoIC0gLSAtIC0gLSAt
IC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICAgICAuICAgICAgICAgLiAgICAgICAuICAgICAgLgor
ICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIF52IDEgdW5pdCAgICAgICAgICAgICAgICAg
ICAuICAgICAgICAgLiAgICAgICAuICAgICAgLgorICAgICAgICAvLyAgdyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAuICAgICAgICAgLiAgICAgICAuICAgICAg
LgorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIF52IDEgdW5pdCAgICAgICAgICAgICAg
ICAgICB2ICAgICAgICAgLiAgICAgICAuICAgICAgLgorICAgICAgICAvLyAgd19sb3cgIC0gLSAt
IC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICAgICAgICAgLiAgICAgICAuICAg
ICAgLgorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLiAgICAgICAuICAgICAgdgorICAgICAgICAvLyAgYnVmZmVyIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0r
LS0tLS0tLS0KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC4gICAgICAgLgorICAgICAgICAvLyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FmZV9pbnRlcnZhbCAgICAuCisg
ICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2ICAgICAgIC4KKyAgICAgICAgLy8gICAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g
LSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAgICAgLgorICAgICAgICAvLyAg
ICAgICAgICAgICAgICAgICAgIF52IDEgdW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAuCisgICAgICAgIC8vICBib3VuZGFyeV9sb3cgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSAgICAgICAgICAgICAgICAgICAgIHVuc2FmZV9pbnRlcnZhbAorICAgICAgICAvLyAgICAg
ICAgICAgICAgICAgICAgIF52IDEgdW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2CisgICAgICAgIC8vICB0b29fbG93ICAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g
LSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLQorICAgICAgICAvLworICAgICAg
ICAvLworICAgICAgICAvLyBOb3RlIHRoYXQgdGhlIHZhbHVlIG9mIGJ1ZmZlciBjb3VsZCBsaWUg
YW55d2hlcmUgaW5zaWRlIHRoZSByYW5nZSB0b29fbG93CisgICAgICAgIC8vIHRvIHRvb19oaWdo
LgorICAgICAgICAvLworICAgICAgICAvLyBib3VuZGFyeV9sb3csIGJvdW5kYXJ5X2hpZ2ggYW5k
IHcgYXJlIGFwcHJveGltYXRpb25zIG9mIHRoZSByZWFsIGJvdW5kYXJpZXMKKyAgICAgICAgLy8g
YW5kIHYgKHRoZSBpbnB1dCBudW1iZXIpLiBUaGV5IGFyZSBndWFyYW50ZWVkIHRvIGJlIHByZWNp
c2UgdXAgdG8gb25lIHVuaXQuCisgICAgICAgIC8vIEluIGZhY3QgdGhlIGVycm9yIGlzIGd1YXJh
bnRlZWQgdG8gYmUgc3RyaWN0bHkgbGVzcyB0aGFuIG9uZSB1bml0LgorICAgICAgICAvLworICAg
ICAgICAvLyBBbnl0aGluZyB0aGF0IGxpZXMgb3V0c2lkZSB0aGUgdW5zYWZlIGludGVydmFsIGlz
IGd1YXJhbnRlZWQgbm90IHRvIHJvdW5kCisgICAgICAgIC8vIHRvIHYgd2hlbiByZWFkIGFnYWlu
LgorICAgICAgICAvLyBBbnl0aGluZyB0aGF0IGxpZXMgaW5zaWRlIHRoZSBzYWZlIGludGVydmFs
IGlzIGd1YXJhbnRlZWQgdG8gcm91bmQgdG8gdgorICAgICAgICAvLyB3aGVuIHJlYWQgYWdhaW4u
CisgICAgICAgIC8vIElmIHRoZSBudW1iZXIgaW5zaWRlIHRoZSBidWZmZXIgbGllcyBpbnNpZGUg
dGhlIHVuc2FmZSBpbnRlcnZhbCBidXQgbm90CisgICAgICAgIC8vIGluc2lkZSB0aGUgc2FmZSBp
bnRlcnZhbCB0aGVuIHdlIHNpbXBseSBkbyBub3Qga25vdyBhbmQgYmFpbCBvdXQgKHJldHVybmlu
ZworICAgICAgICAvLyBmYWxzZSkuCisgICAgICAgIC8vCisgICAgICAgIC8vIFNpbWlsYXJseSB3
ZSBoYXZlIHRvIHRha2UgaW50byBhY2NvdW50IHRoZSBpbXByZWNpc2lvbiBvZiAndycgd2hlbiBm
aW5kaW5nCisgICAgICAgIC8vIHRoZSBjbG9zZXN0IHJlcHJlc2VudGF0aW9uIG9mICd3Jy4gSWYg
d2UgaGF2ZSB0d28gcG90ZW50aWFsCisgICAgICAgIC8vIHJlcHJlc2VudGF0aW9ucywgYW5kIG9u
ZSBpcyBjbG9zZXIgdG8gYm90aCB3X2xvdyBhbmQgd19oaWdoLCB0aGVuIHdlIGtub3cKKyAgICAg
ICAgLy8gaXQgaXMgY2xvc2VyIHRvIHRoZSBhY3R1YWwgdmFsdWUgdi4KKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gQnkgZ2VuZXJhdGluZyB0aGUgZGlnaXRzIG9mIHRvb19oaWdoIHdlIGdvdCB0aGUg
bGFyZ2VzdCAoY2xvc2VzdCB0bworICAgICAgICAvLyB0b29faGlnaCkgYnVmZmVyIHRoYXQgaXMg
c3RpbGwgaW4gdGhlIHVuc2FmZSBpbnRlcnZhbC4gSW4gdGhlIGNhc2Ugd2hlcmUKKyAgICAgICAg
Ly8gd19oaWdoIDwgYnVmZmVyIDwgdG9vX2hpZ2ggd2UgdHJ5IHRvIGRlY3JlbWVudCB0aGUgYnVm
ZmVyLgorICAgICAgICAvLyBUaGlzIHdheSB0aGUgYnVmZmVyIGFwcHJvYWNoZXMgKHJvdW5kcyB0
b3dhcmRzKSB3LgorICAgICAgICAvLyBUaGVyZSBhcmUgMyBjb25kaXRpb25zIHRoYXQgc3RvcCB0
aGUgZGVjcmVtZW50YXRpb24gcHJvY2VzczoKKyAgICAgICAgLy8gICAxKSB0aGUgYnVmZmVyIGlz
IGFscmVhZHkgYmVsb3cgd19oaWdoCisgICAgICAgIC8vICAgMikgZGVjcmVtZW50aW5nIHRoZSBi
dWZmZXIgd291bGQgbWFrZSBpdCBsZWF2ZSB0aGUgdW5zYWZlIGludGVydmFsCisgICAgICAgIC8v
ICAgMykgZGVjcmVtZW50aW5nIHRoZSBidWZmZXIgd291bGQgeWllbGQgYSBudW1iZXIgYmVsb3cg
d19oaWdoIGFuZCBmYXJ0aGVyCisgICAgICAgIC8vICAgICAgYXdheSB0aGFuIHRoZSBjdXJyZW50
IG51bWJlci4gSW4gb3RoZXIgd29yZHM6CisgICAgICAgIC8vICAgICAgICAgICAgICAoYnVmZmVy
ey0xfSA8IHdfaGlnaCkgJiYgd19oaWdoIC0gYnVmZmVyey0xfSA+IGJ1ZmZlciAtIHdfaGlnaAor
ICAgICAgICAvLyBJbnN0ZWFkIG9mIHVzaW5nIHRoZSBidWZmZXIgZGlyZWN0bHkgd2UgdXNlIGl0
cyBkaXN0YW5jZSB0byB0b29faGlnaC4KKyAgICAgICAgLy8gQ29uY2VwdHVhbGx5IHJlc3Qgfj0g
dG9vX2hpZ2ggLSBidWZmZXIKKyAgICAgICAgLy8gV2UgbmVlZCB0byBkbyB0aGUgZm9sbG93aW5n
IHRlc3RzIGluIHRoaXMgb3JkZXIgdG8gYXZvaWQgb3Zlci0gYW5kCisgICAgICAgIC8vIHVuZGVy
Zmxvd3MuCisgICAgICAgIEFTU0VSVChyZXN0IDw9IHVuc2FmZV9pbnRlcnZhbCk7CisgICAgICAg
IHdoaWxlIChyZXN0IDwgc21hbGxfZGlzdGFuY2UgJiYgIC8vIE5lZ2F0ZWQgY29uZGl0aW9uIDEK
KyAgICAgICAgICAgICAgIHVuc2FmZV9pbnRlcnZhbCAtIHJlc3QgPj0gdGVuX2thcHBhICYmICAv
LyBOZWdhdGVkIGNvbmRpdGlvbiAyCisgICAgICAgICAgICAgICAocmVzdCArIHRlbl9rYXBwYSA8
IHNtYWxsX2Rpc3RhbmNlIHx8ICAvLyBidWZmZXJ7LTF9ID4gd19oaWdoCisgICAgICAgICAgICAg
ICAgc21hbGxfZGlzdGFuY2UgLSByZXN0ID49IHJlc3QgKyB0ZW5fa2FwcGEgLSBzbWFsbF9kaXN0
YW5jZSkpIHsKKyAgICAgICAgICAgICAgICAgICBidWZmZXJbbGVuZ3RoIC0gMV0tLTsKKyAgICAg
ICAgICAgICAgICAgICByZXN0ICs9IHRlbl9rYXBwYTsKKyAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIC8vIFdlIGhhdmUgYXBwcm9hY2hlZCB3KyBhcyBtdWNoIGFzIHBvc3NpYmxl
LiBXZSBub3cgdGVzdCBpZiBhcHByb2FjaGluZyB3LQorICAgICAgICAvLyB3b3VsZCByZXF1aXJl
IGNoYW5naW5nIHRoZSBidWZmZXIuIElmIHllcywgdGhlbiB3ZSBoYXZlIHR3byBwb3NzaWJsZQor
ICAgICAgICAvLyByZXByZXNlbnRhdGlvbnMgY2xvc2UgdG8gdywgYnV0IHdlIGNhbm5vdCBkZWNp
ZGUgd2hpY2ggb25lIGlzIGNsb3Nlci4KKyAgICAgICAgaWYgKHJlc3QgPCBiaWdfZGlzdGFuY2Ug
JiYKKyAgICAgICAgICAgIHVuc2FmZV9pbnRlcnZhbCAtIHJlc3QgPj0gdGVuX2thcHBhICYmCisg
ICAgICAgICAgICAocmVzdCArIHRlbl9rYXBwYSA8IGJpZ19kaXN0YW5jZSB8fAorICAgICAgICAg
ICAgIGJpZ19kaXN0YW5jZSAtIHJlc3QgPiByZXN0ICsgdGVuX2thcHBhIC0gYmlnX2Rpc3RhbmNl
KSkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIC8vIFdlZWRpbmcgdGVzdC4KKyAgICAgICAgLy8gICBUaGUgc2FmZSBpbnRl
cnZhbCBpcyBbdG9vX2xvdyArIDIgdWxwOyB0b29faGlnaCAtIDIgdWxwXQorICAgICAgICAvLyAg
IFNpbmNlIHRvb19sb3cgPSB0b29faGlnaCAtIHVuc2FmZV9pbnRlcnZhbCB0aGlzIGlzIGVxdWl2
YWxlbnQgdG8KKyAgICAgICAgLy8gICAgICBbdG9vX2hpZ2ggLSB1bnNhZmVfaW50ZXJ2YWwgKyA0
IHVscDsgdG9vX2hpZ2ggLSAyIHVscF0KKyAgICAgICAgLy8gICBDb25jZXB0dWFsbHkgd2UgaGF2
ZTogcmVzdCB+PSB0b29faGlnaCAtIGJ1ZmZlcgorICAgICAgICByZXR1cm4gKDIgKiB1bml0IDw9
IHJlc3QpICYmIChyZXN0IDw9IHVuc2FmZV9pbnRlcnZhbCAtIDQgKiB1bml0KTsKKyAgICB9Cisg
ICAgCisgICAgCisgICAgLy8gUm91bmRzIHRoZSBidWZmZXIgdXB3YXJkcyBpZiB0aGUgcmVzdWx0
IGlzIGNsb3NlciB0byB2IGJ5IHBvc3NpYmx5IGFkZGluZworICAgIC8vIDEgdG8gdGhlIGJ1ZmZl
ci4gSWYgdGhlIHByZWNpc2lvbiBvZiB0aGUgY2FsY3VsYXRpb24gaXMgbm90IHN1ZmZpY2llbnQg
dG8KKyAgICAvLyByb3VuZCBjb3JyZWN0bHksIHJldHVybiBmYWxzZS4KKyAgICAvLyBUaGUgcm91
bmRpbmcgbWlnaHQgc2hpZnQgdGhlIHdob2xlIGJ1ZmZlciBpbiB3aGljaCBjYXNlIHRoZSBrYXBw
YSBpcworICAgIC8vIGFkanVzdGVkLiBGb3IgZXhhbXBsZSAiOTkiLCBrYXBwYSA9IDMgbWlnaHQg
YmVjb21lICIxMCIsIGthcHBhID0gNC4KKyAgICAvLworICAgIC8vIElmIDIqcmVzdCA+IHRlbl9r
YXBwYSB0aGVuIHRoZSBidWZmZXIgbmVlZHMgdG8gYmUgcm91bmQgdXAuCisgICAgLy8gcmVzdCBj
YW4gaGF2ZSBhbiBlcnJvciBvZiArLy0gMSB1bml0LiBUaGlzIGZ1bmN0aW9uIGFjY291bnRzIGZv
ciB0aGUKKyAgICAvLyBpbXByZWNpc2lvbiBhbmQgcmV0dXJucyBmYWxzZSwgaWYgdGhlIHJvdW5k
aW5nIGRpcmVjdGlvbiBjYW5ub3QgYmUKKyAgICAvLyB1bmFtYmlndW91c2x5IGRldGVybWluZWQu
CisgICAgLy8KKyAgICAvLyBQcmVjb25kaXRpb246IHJlc3QgPCB0ZW5fa2FwcGEuCisgICAgc3Rh
dGljIGJvb2wgUm91bmRXZWVkQ291bnRlZChWZWN0b3I8Y2hhcj4gYnVmZmVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVpbnQ2NF90IHJlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1aW50NjRfdCB0ZW5fa2FwcGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1aW50NjRfdCB1bml0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBr
YXBwYSkgeworICAgICAgICBBU1NFUlQocmVzdCA8IHRlbl9rYXBwYSk7CisgICAgICAgIC8vIFRo
ZSBmb2xsb3dpbmcgdGVzdHMgYXJlIGRvbmUgaW4gYSBzcGVjaWZpYyBvcmRlciB0byBhdm9pZCBv
dmVyZmxvd3MuIFRoZXkKKyAgICAgICAgLy8gd2lsbCB3b3JrIGNvcnJlY3RseSB3aXRoIGFueSB1
aW50NjQgdmFsdWVzIG9mIHJlc3QgPCB0ZW5fa2FwcGEgYW5kIHVuaXQuCisgICAgICAgIC8vCisg
ICAgICAgIC8vIElmIHRoZSB1bml0IGlzIHRvbyBiaWcsIHRoZW4gd2UgZG9uJ3Qga25vdyB3aGlj
aCB3YXkgdG8gcm91bmQuIEZvciBleGFtcGxlCisgICAgICAgIC8vIGEgdW5pdCBvZiA1MCBtZWFu
cyB0aGF0IHRoZSByZWFsIG51bWJlciBsaWVzIHdpdGhpbiByZXN0ICsvLSA1MC4gSWYKKyAgICAg
ICAgLy8gMTBea2FwcGEgPT0gNDAgdGhlbiB0aGVyZSBpcyBubyB3YXkgdG8gdGVsbCB3aGljaCB3
YXkgdG8gcm91bmQuCisgICAgICAgIGlmICh1bml0ID49IHRlbl9rYXBwYSkgcmV0dXJuIGZhbHNl
OworICAgICAgICAvLyBFdmVuIGlmIHVuaXQgaXMganVzdCBoYWxmIHRoZSBzaXplIG9mIDEwXmth
cHBhIHdlIGFyZSBhbHJlYWR5IGNvbXBsZXRlbHkKKyAgICAgICAgLy8gbG9zdC4gKEFuZCBhZnRl
ciB0aGUgcHJldmlvdXMgdGVzdCB3ZSBrbm93IHRoYXQgdGhlIGV4cHJlc3Npb24gd2lsbCBub3QK
KyAgICAgICAgLy8gb3Zlci91bmRlcmZsb3cuKQorICAgICAgICBpZiAodGVuX2thcHBhIC0gdW5p
dCA8PSB1bml0KSByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIElmIDIgKiAocmVzdCArIHVuaXQp
IDw9IDEwXmthcHBhIHdlIGNhbiBzYWZlbHkgcm91bmQgZG93bi4KKyAgICAgICAgaWYgKCh0ZW5f
a2FwcGEgLSByZXN0ID4gcmVzdCkgJiYgKHRlbl9rYXBwYSAtIDIgKiByZXN0ID49IDIgKiB1bml0
KSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gSWYg
MiAqIChyZXN0IC0gdW5pdCkgPj0gMTBea2FwcGEsIHRoZW4gd2UgY2FuIHNhZmVseSByb3VuZCB1
cC4KKyAgICAgICAgaWYgKChyZXN0ID4gdW5pdCkgJiYgKHRlbl9rYXBwYSAtIChyZXN0IC0gdW5p
dCkgPD0gKHJlc3QgLSB1bml0KSkpIHsKKyAgICAgICAgICAgIC8vIEluY3JlbWVudCB0aGUgbGFz
dCBkaWdpdCByZWN1cnNpdmVseSB1bnRpbCB3ZSBmaW5kIGEgbm9uICc5JyBkaWdpdC4KKyAgICAg
ICAgICAgIGJ1ZmZlcltsZW5ndGggLSAxXSsrOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IGxl
bmd0aCAtIDE7IGkgPiAwOyAtLWkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYnVmZmVyW2ldICE9
ICcwJyArIDEwKSBicmVhazsKKyAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSAnMCc7CisgICAg
ICAgICAgICAgICAgYnVmZmVyW2kgLSAxXSsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Ly8gSWYgdGhlIGZpcnN0IGRpZ2l0IGlzIG5vdyAnMCcrIDEwIHdlIGhhZCBhIGJ1ZmZlciB3aXRo
IGFsbCAnOSdzLiBXaXRoIHRoZQorICAgICAgICAgICAgLy8gZXhjZXB0aW9uIG9mIHRoZSBmaXJz
dCBkaWdpdCBhbGwgZGlnaXRzIGFyZSBub3cgJzAnLiBTaW1wbHkgc3dpdGNoIHRoZQorICAgICAg
ICAgICAgLy8gZmlyc3QgZGlnaXQgdG8gJzEnIGFuZCBhZGp1c3QgdGhlIGthcHBhLiBFeGFtcGxl
OiAiOTkiIGJlY29tZXMgIjEwIiBhbmQKKyAgICAgICAgICAgIC8vIHRoZSBwb3dlciAodGhlIGth
cHBhKSBpcyBpbmNyZWFzZWQuCisgICAgICAgICAgICBpZiAoYnVmZmVyWzBdID09ICcwJyArIDEw
KSB7CisgICAgICAgICAgICAgICAgYnVmZmVyWzBdID0gJzEnOworICAgICAgICAgICAgICAgICgq
a2FwcGEpICs9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIAorICAgIHN0
YXRpYyBjb25zdCB1aW50MzJfdCBrVGVuNCA9IDEwMDAwOworICAgIHN0YXRpYyBjb25zdCB1aW50
MzJfdCBrVGVuNSA9IDEwMDAwMDsKKyAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qga1RlbjYgPSAx
MDAwMDAwOworICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBrVGVuNyA9IDEwMDAwMDAwOworICAg
IHN0YXRpYyBjb25zdCB1aW50MzJfdCBrVGVuOCA9IDEwMDAwMDAwMDsKKyAgICBzdGF0aWMgY29u
c3QgdWludDMyX3Qga1RlbjkgPSAxMDAwMDAwMDAwOworICAgIAorICAgIC8vIFJldHVybnMgdGhl
IGJpZ2dlc3QgcG93ZXIgb2YgdGVuIHRoYXQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBn
aXZlbgorICAgIC8vIG51bWJlci4gV2UgZnVydGhlcm1vcmUgcmVjZWl2ZSB0aGUgbWF4aW11bSBu
dW1iZXIgb2YgYml0cyAnbnVtYmVyJyBoYXMuCisgICAgLy8gSWYgbnVtYmVyX2JpdHMgPT0gMCB0
aGVuIDBeLTEgaXMgcmV0dXJuZWQKKyAgICAvLyBUaGUgbnVtYmVyIG9mIGJpdHMgbXVzdCBiZSA8
PSAzMi4KKyAgICAvLyBQcmVjb25kaXRpb246IG51bWJlciA8ICgxIDw8IChudW1iZXJfYml0cyAr
IDEpKS4KKyAgICBzdGF0aWMgdm9pZCBCaWdnZXN0UG93ZXJUZW4odWludDMyX3QgbnVtYmVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtYmVyX2JpdHMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90KiBwb3dlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50KiBleHBvbmVudCkgeworICAgICAgICBBU1NFUlQobnVtYmVy
IDwgKDEgPDwgKG51bWJlcl9iaXRzICsgMSkpKTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAo
bnVtYmVyX2JpdHMpIHsKKyAgICAgICAgICAgIGNhc2UgMzI6CisgICAgICAgICAgICBjYXNlIDMx
OgorICAgICAgICAgICAgY2FzZSAzMDoKKyAgICAgICAgICAgICAgICBpZiAoa1RlbjkgPD0gbnVt
YmVyKSB7CisgICAgICAgICAgICAgICAgICAgICpwb3dlciA9IGtUZW45OworICAgICAgICAgICAg
ICAgICAgICAqZXhwb25lbnQgPSA5OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9ICAvLyBlbHNlIGZhbGx0aHJvdWdoCisgICAgICAgICAgICBjYXNlIDI5Ogor
ICAgICAgICAgICAgY2FzZSAyODoKKyAgICAgICAgICAgIGNhc2UgMjc6CisgICAgICAgICAgICAg
ICAgaWYgKGtUZW44IDw9IG51bWJlcikgeworICAgICAgICAgICAgICAgICAgICAqcG93ZXIgPSBr
VGVuODsKKyAgICAgICAgICAgICAgICAgICAgKmV4cG9uZW50ID0gODsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSAgLy8gZWxzZSBmYWxsdGhyb3VnaAorICAg
ICAgICAgICAgY2FzZSAyNjoKKyAgICAgICAgICAgIGNhc2UgMjU6CisgICAgICAgICAgICBjYXNl
IDI0OgorICAgICAgICAgICAgICAgIGlmIChrVGVuNyA8PSBudW1iZXIpIHsKKyAgICAgICAgICAg
ICAgICAgICAgKnBvd2VyID0ga1Rlbjc7CisgICAgICAgICAgICAgICAgICAgICpleHBvbmVudCA9
IDc7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gIC8vIGVs
c2UgZmFsbHRocm91Z2gKKyAgICAgICAgICAgIGNhc2UgMjM6CisgICAgICAgICAgICBjYXNlIDIy
OgorICAgICAgICAgICAgY2FzZSAyMToKKyAgICAgICAgICAgIGNhc2UgMjA6CisgICAgICAgICAg
ICAgICAgaWYgKGtUZW42IDw9IG51bWJlcikgeworICAgICAgICAgICAgICAgICAgICAqcG93ZXIg
PSBrVGVuNjsKKyAgICAgICAgICAgICAgICAgICAgKmV4cG9uZW50ID0gNjsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSAgLy8gZWxzZSBmYWxsdGhyb3VnaAor
ICAgICAgICAgICAgY2FzZSAxOToKKyAgICAgICAgICAgIGNhc2UgMTg6CisgICAgICAgICAgICBj
YXNlIDE3OgorICAgICAgICAgICAgICAgIGlmIChrVGVuNSA8PSBudW1iZXIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgKnBvd2VyID0ga1RlbjU7CisgICAgICAgICAgICAgICAgICAgICpleHBvbmVu
dCA9IDU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gIC8v
IGVsc2UgZmFsbHRocm91Z2gKKyAgICAgICAgICAgIGNhc2UgMTY6CisgICAgICAgICAgICBjYXNl
IDE1OgorICAgICAgICAgICAgY2FzZSAxNDoKKyAgICAgICAgICAgICAgICBpZiAoa1RlbjQgPD0g
bnVtYmVyKSB7CisgICAgICAgICAgICAgICAgICAgICpwb3dlciA9IGtUZW40OworICAgICAgICAg
ICAgICAgICAgICAqZXhwb25lbnQgPSA0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9ICAvLyBlbHNlIGZhbGx0aHJvdWdoCisgICAgICAgICAgICBjYXNlIDEz
OgorICAgICAgICAgICAgY2FzZSAxMjoKKyAgICAgICAgICAgIGNhc2UgMTE6CisgICAgICAgICAg
ICBjYXNlIDEwOgorICAgICAgICAgICAgICAgIGlmICgxMDAwIDw9IG51bWJlcikgeworICAgICAg
ICAgICAgICAgICAgICAqcG93ZXIgPSAxMDAwOworICAgICAgICAgICAgICAgICAgICAqZXhwb25l
bnQgPSAzOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9ICAv
LyBlbHNlIGZhbGx0aHJvdWdoCisgICAgICAgICAgICBjYXNlIDk6CisgICAgICAgICAgICBjYXNl
IDg6CisgICAgICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICAgICAgaWYgKDEwMCA8PSBudW1i
ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgKnBvd2VyID0gMTAwOworICAgICAgICAgICAgICAg
ICAgICAqZXhwb25lbnQgPSAyOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9ICAvLyBlbHNlIGZhbGx0aHJvdWdoCisgICAgICAgICAgICBjYXNlIDY6CisgICAg
ICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgaWYg
KDEwIDw9IG51bWJlcikgeworICAgICAgICAgICAgICAgICAgICAqcG93ZXIgPSAxMDsKKyAgICAg
ICAgICAgICAgICAgICAgKmV4cG9uZW50ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfSAgLy8gZWxzZSBmYWxsdGhyb3VnaAorICAgICAgICAgICAgY2Fz
ZSAzOgorICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAg
ICAgICAgIGlmICgxIDw9IG51bWJlcikgeworICAgICAgICAgICAgICAgICAgICAqcG93ZXIgPSAx
OworICAgICAgICAgICAgICAgICAgICAqZXhwb25lbnQgPSAwOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9ICAvLyBlbHNlIGZhbGx0aHJvdWdoCisgICAgICAg
ICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgKnBvd2VyID0gMDsKKyAgICAgICAgICAgICAg
ICAqZXhwb25lbnQgPSAtMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgLy8gRm9sbG93aW5nIGFzc2lnbm1lbnRzIGFyZSBoZXJl
IHRvIHNpbGVuY2UgY29tcGlsZXIgd2FybmluZ3MuCisgICAgICAgICAgICAgICAgKnBvd2VyID0g
MDsKKyAgICAgICAgICAgICAgICAqZXhwb25lbnQgPSAwOworICAgICAgICAgICAgICAgIFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAgLy8gR2VuZXJhdGVz
IHRoZSBkaWdpdHMgb2YgaW5wdXQgbnVtYmVyIHcuCisgICAgLy8gdyBpcyBhIGZsb2F0aW5nLXBv
aW50IG51bWJlciAoRGl5RnApLCBjb25zaXN0aW5nIG9mIGEgc2lnbmlmaWNhbmQgYW5kIGFuCisg
ICAgLy8gZXhwb25lbnQuIEl0cyBleHBvbmVudCBpcyBib3VuZGVkIGJ5IGtNaW5pbWFsVGFyZ2V0
RXhwb25lbnQgYW5kCisgICAgLy8ga01heGltYWxUYXJnZXRFeHBvbmVudC4KKyAgICAvLyAgICAg
ICBIZW5jZSAtNjAgPD0gdy5lKCkgPD0gLTMyLgorICAgIC8vCisgICAgLy8gUmV0dXJucyBmYWxz
ZSBpZiBpdCBmYWlscywgaW4gd2hpY2ggY2FzZSB0aGUgZ2VuZXJhdGVkIGRpZ2l0cyBpbiB0aGUg
YnVmZmVyCisgICAgLy8gc2hvdWxkIG5vdCBiZSB1c2VkLgorICAgIC8vIFByZWNvbmRpdGlvbnM6
CisgICAgLy8gICogbG93LCB3IGFuZCBoaWdoIGFyZSBjb3JyZWN0IHVwIHRvIDEgdWxwICh1bml0
IGluIHRoZSBsYXN0IHBsYWNlKS4gVGhhdAorICAgIC8vICAgIGlzLCB0aGVpciBlcnJvciBtdXN0
IGJlIGxlc3MgdGhhbiBhIHVuaXQgb2YgdGhlaXIgbGFzdCBkaWdpdHMuCisgICAgLy8gICogbG93
LmUoKSA9PSB3LmUoKSA9PSBoaWdoLmUoKQorICAgIC8vICAqIGxvdyA8IHcgPCBoaWdoLCBhbmQg
dGFraW5nIGludG8gYWNjb3VudCB0aGVpciBlcnJvcjogbG93fiA8PSBoaWdofgorICAgIC8vICAq
IGtNaW5pbWFsVGFyZ2V0RXhwb25lbnQgPD0gdy5lKCkgPD0ga01heGltYWxUYXJnZXRFeHBvbmVu
dAorICAgIC8vIFBvc3Rjb25kaXRpb25zOiByZXR1cm5zIGZhbHNlIGlmIHByb2NlZHVyZSBmYWls
cy4KKyAgICAvLyAgIG90aGVyd2lzZToKKyAgICAvLyAgICAgKiBidWZmZXIgaXMgbm90IG51bGwt
dGVybWluYXRlZCwgYnV0IGxlbiBjb250YWlucyB0aGUgbnVtYmVyIG9mIGRpZ2l0cy4KKyAgICAv
LyAgICAgKiBidWZmZXIgY29udGFpbnMgdGhlIHNob3J0ZXN0IHBvc3NpYmxlIGRlY2ltYWwgZGln
aXQtc2VxdWVuY2UKKyAgICAvLyAgICAgICBzdWNoIHRoYXQgTE9XIDwgYnVmZmVyICogMTBea2Fw
cGEgPCBISUdILCB3aGVyZSBMT1cgYW5kIEhJR0ggYXJlIHRoZQorICAgIC8vICAgICAgIGNvcnJl
Y3QgdmFsdWVzIG9mIGxvdyBhbmQgaGlnaCAod2l0aG91dCB0aGVpciBlcnJvcikuCisgICAgLy8g
ICAgICogaWYgbW9yZSB0aGFuIG9uZSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIGdpdmVzIHRoZSBt
aW5pbWFsIG51bWJlciBvZgorICAgIC8vICAgICAgIGRlY2ltYWwgZGlnaXRzIHRoZW4gdGhlIG9u
ZSBjbG9zZXN0IHRvIFcgKHdoZXJlIFcgaXMgdGhlIGNvcnJlY3QgdmFsdWUKKyAgICAvLyAgICAg
ICBvZiB3KSBpcyBjaG9zZW4uCisgICAgLy8gUmVtYXJrOiB0aGlzIHByb2NlZHVyZSB0YWtlcyBp
bnRvIGFjY291bnQgdGhlIGltcHJlY2lzaW9uIG9mIGl0cyBpbnB1dAorICAgIC8vICAgbnVtYmVy
cy4gSWYgdGhlIHByZWNpc2lvbiBpcyBub3QgZW5vdWdoIHRvIGd1YXJhbnRlZSBhbGwgdGhlIHBv
c3Rjb25kaXRpb25zCisgICAgLy8gICB0aGVuIGZhbHNlIGlzIHJldHVybmVkLiBUaGlzIHVzdWFs
bHkgaGFwcGVucyByYXJlbHkgKH4wLjUlKS4KKyAgICAvLworICAgIC8vIFNheSwgZm9yIHRoZSBz
YWtlIG9mIGV4YW1wbGUsIHRoYXQKKyAgICAvLyAgIHcuZSgpID09IC00OCwgYW5kIHcuZigpID09
IDB4MTIzNDU2Nzg5MGFiY2RlZgorICAgIC8vIHcncyB2YWx1ZSBjYW4gYmUgY29tcHV0ZWQgYnkg
dy5mKCkgKiAyXncuZSgpCisgICAgLy8gV2UgY2FuIG9idGFpbiB3J3MgaW50ZWdyYWwgZGlnaXRz
IGJ5IHNpbXBseSBzaGlmdGluZyB3LmYoKSBieSAtdy5lKCkuCisgICAgLy8gIC0+IHcncyBpbnRl
Z3JhbCBwYXJ0IGlzIDB4MTIzNAorICAgIC8vICB3J3MgZnJhY3Rpb25hbCBwYXJ0IGlzIHRoZXJl
Zm9yZSAweDU2Nzg5MGFiY2RlZi4KKyAgICAvLyBQcmludGluZyB3J3MgaW50ZWdyYWwgcGFydCBp
cyBlYXN5IChzaW1wbHkgcHJpbnQgMHgxMjM0IGluIGRlY2ltYWwpLgorICAgIC8vIEluIG9yZGVy
IHRvIHByaW50IGl0cyBmcmFjdGlvbiB3ZSByZXBlYXRlZGx5IG11bHRpcGx5IHRoZSBmcmFjdGlv
biBieSAxMCBhbmQKKyAgICAvLyBnZXQgZWFjaCBkaWdpdC4gRXhhbXBsZSB0aGUgZmlyc3QgZGln
aXQgYWZ0ZXIgdGhlIHBvaW50IHdvdWxkIGJlIGNvbXB1dGVkIGJ5CisgICAgLy8gICAoMHg1Njc4
OTBhYmNkZWYgKiAxMCkgPj4gNDguIC0+IDMKKyAgICAvLyBUaGUgd2hvbGUgdGhpbmcgYmVjb21l
cyBzbGlnaHRseSBtb3JlIGNvbXBsaWNhdGVkIGJlY2F1c2Ugd2Ugd2FudCB0byBzdG9wCisgICAg
Ly8gb25jZSB3ZSBoYXZlIGVub3VnaCBkaWdpdHMuIFRoYXQgaXMsIG9uY2UgdGhlIGRpZ2l0cyBp
bnNpZGUgdGhlIGJ1ZmZlcgorICAgIC8vIHJlcHJlc2VudCAndycgd2UgY2FuIHN0b3AuIEV2ZXJ5
dGhpbmcgaW5zaWRlIHRoZSBpbnRlcnZhbCBsb3cgLSBoaWdoCisgICAgLy8gcmVwcmVzZW50cyB3
LiBIb3dldmVyIHdlIGhhdmUgdG8gcGF5IGF0dGVudGlvbiB0byBsb3csIGhpZ2ggYW5kIHcncwor
ICAgIC8vIGltcHJlY2lzaW9uLgorICAgIHN0YXRpYyBib29sIERpZ2l0R2VuKERpeUZwIGxvdywK
KyAgICAgICAgICAgICAgICAgICAgICAgICBEaXlGcCB3LAorICAgICAgICAgICAgICAgICAgICAg
ICAgIERpeUZwIGhpZ2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1
ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGxlbmd0aCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQqIGthcHBhKSB7CisgICAgICAgIEFTU0VSVChsb3cuZSgpID09IHcu
ZSgpICYmIHcuZSgpID09IGhpZ2guZSgpKTsKKyAgICAgICAgQVNTRVJUKGxvdy5mKCkgKyAxIDw9
IGhpZ2guZigpIC0gMSk7CisgICAgICAgIEFTU0VSVChrTWluaW1hbFRhcmdldEV4cG9uZW50IDw9
IHcuZSgpICYmIHcuZSgpIDw9IGtNYXhpbWFsVGFyZ2V0RXhwb25lbnQpOworICAgICAgICAvLyBs
b3csIHcgYW5kIGhpZ2ggYXJlIGltcHJlY2lzZSwgYnV0IGJ5IGxlc3MgdGhhbiBvbmUgdWxwICh1
bml0IGluIHRoZSBsYXN0CisgICAgICAgIC8vIHBsYWNlKS4KKyAgICAgICAgLy8gSWYgd2UgcmVt
b3ZlIChyZXNwLiBhZGQpIDEgdWxwIGZyb20gbG93IChyZXNwLiBoaWdoKSB3ZSBhcmUgY2VydGFp
biB0aGF0CisgICAgICAgIC8vIHRoZSBuZXcgbnVtYmVycyBhcmUgb3V0c2lkZSBvZiB0aGUgaW50
ZXJ2YWwgd2Ugd2FudCB0aGUgZmluYWwKKyAgICAgICAgLy8gcmVwcmVzZW50YXRpb24gdG8gbGll
IGluLgorICAgICAgICAvLyBJbnZlcnNlbHkgYWRkaW5nIChyZXNwLiByZW1vdmluZykgMSB1bHAg
ZnJvbSBsb3cgKHJlc3AuIGhpZ2gpIHdvdWxkIHlpZWxkCisgICAgICAgIC8vIG51bWJlcnMgdGhh
dCBhcmUgY2VydGFpbiB0byBsaWUgaW4gdGhlIGludGVydmFsLiBXZSB3aWxsIHVzZSB0aGlzIGZh
Y3QKKyAgICAgICAgLy8gbGF0ZXIgb24uCisgICAgICAgIC8vIFdlIHdpbGwgbm93IHN0YXJ0IGJ5
IGdlbmVyYXRpbmcgdGhlIGRpZ2l0cyB3aXRoaW4gdGhlIHVuY2VydGFpbgorICAgICAgICAvLyBp
bnRlcnZhbC4gTGF0ZXIgd2Ugd2lsbCB3ZWVkIG91dCByZXByZXNlbnRhdGlvbnMgdGhhdCBsaWUg
b3V0c2lkZSB0aGUgc2FmZQorICAgICAgICAvLyBpbnRlcnZhbCBhbmQgdGh1cyBfbWlnaHRfIGxp
ZSBvdXRzaWRlIHRoZSBjb3JyZWN0IGludGVydmFsLgorICAgICAgICB1aW50NjRfdCB1bml0ID0g
MTsKKyAgICAgICAgRGl5RnAgdG9vX2xvdyA9IERpeUZwKGxvdy5mKCkgLSB1bml0LCBsb3cuZSgp
KTsKKyAgICAgICAgRGl5RnAgdG9vX2hpZ2ggPSBEaXlGcChoaWdoLmYoKSArIHVuaXQsIGhpZ2gu
ZSgpKTsKKyAgICAgICAgLy8gdG9vX2xvdyBhbmQgdG9vX2hpZ2ggYXJlIGd1YXJhbnRlZWQgdG8g
bGllIG91dHNpZGUgdGhlIGludGVydmFsIHdlIHdhbnQgdGhlCisgICAgICAgIC8vIGdlbmVyYXRl
ZCBudW1iZXIgaW4uCisgICAgICAgIERpeUZwIHVuc2FmZV9pbnRlcnZhbCA9IERpeUZwOjpNaW51
cyh0b29faGlnaCwgdG9vX2xvdyk7CisgICAgICAgIC8vIFdlIG5vdyBjdXQgdGhlIGlucHV0IG51
bWJlciBpbnRvIHR3byBwYXJ0czogdGhlIGludGVncmFsIGRpZ2l0cyBhbmQgdGhlCisgICAgICAg
IC8vIGZyYWN0aW9uYWxzLiBXZSB3aWxsIG5vdCB3cml0ZSBhbnkgZGVjaW1hbCBzZXBhcmF0b3Ig
dGhvdWdoLCBidXQgYWRhcHQKKyAgICAgICAgLy8ga2FwcGEgaW5zdGVhZC4KKyAgICAgICAgLy8g
UmVtaW5kZXI6IHdlIGFyZSBjdXJyZW50bHkgY29tcHV0aW5nIHRoZSBkaWdpdHMgKHN0b3JlZCBp
bnNpZGUgdGhlIGJ1ZmZlcikKKyAgICAgICAgLy8gc3VjaCB0aGF0OiAgIHRvb19sb3cgPCBidWZm
ZXIgKiAxMF5rYXBwYSA8IHRvb19oaWdoCisgICAgICAgIC8vIFdlIHVzZSB0b29faGlnaCBmb3Ig
dGhlIGRpZ2l0X2dlbmVyYXRpb24gYW5kIHN0b3AgYXMgc29vbiBhcyBwb3NzaWJsZS4KKyAgICAg
ICAgLy8gSWYgd2Ugc3RvcCBlYXJseSB3ZSBlZmZlY3RpdmVseSByb3VuZCBkb3duLgorICAgICAg
ICBEaXlGcCBvbmUgPSBEaXlGcChzdGF0aWNfY2FzdDx1aW50NjRfdD4oMSkgPDwgLXcuZSgpLCB3
LmUoKSk7CisgICAgICAgIC8vIERpdmlzaW9uIGJ5IG9uZSBpcyBhIHNoaWZ0LgorICAgICAgICB1
aW50MzJfdCBpbnRlZ3JhbHMgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4odG9vX2hpZ2guZigpID4+
IC1vbmUuZSgpKTsKKyAgICAgICAgLy8gTW9kdWxvIGJ5IG9uZSBpcyBhbiBhbmQuCisgICAgICAg
IHVpbnQ2NF90IGZyYWN0aW9uYWxzID0gdG9vX2hpZ2guZigpICYgKG9uZS5mKCkgLSAxKTsKKyAg
ICAgICAgdWludDMyX3QgZGl2aXNvcjsKKyAgICAgICAgaW50IGRpdmlzb3JfZXhwb25lbnQ7Cisg
ICAgICAgIEJpZ2dlc3RQb3dlclRlbihpbnRlZ3JhbHMsIERpeUZwOjprU2lnbmlmaWNhbmRTaXpl
IC0gKC1vbmUuZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICZkaXZpc29yLCAmZGl2aXNv
cl9leHBvbmVudCk7CisgICAgICAgICprYXBwYSA9IGRpdmlzb3JfZXhwb25lbnQgKyAxOworICAg
ICAgICAqbGVuZ3RoID0gMDsKKyAgICAgICAgLy8gTG9vcCBpbnZhcmlhbnQ6IGJ1ZmZlciA9IHRv
b19oaWdoIC8gMTBea2FwcGEgIChpbnRlZ2VyIGRpdmlzaW9uKQorICAgICAgICAvLyBUaGUgaW52
YXJpYW50IGhvbGRzIGZvciB0aGUgZmlyc3QgaXRlcmF0aW9uOiBrYXBwYSBoYXMgYmVlbiBpbml0
aWFsaXplZAorICAgICAgICAvLyB3aXRoIHRoZSBkaXZpc29yIGV4cG9uZW50ICsgMS4gQW5kIHRo
ZSBkaXZpc29yIGlzIHRoZSBiaWdnZXN0IHBvd2VyIG9mIHRlbgorICAgICAgICAvLyB0aGF0IGlz
IHNtYWxsZXIgdGhhbiBpbnRlZ3JhbHMuCisgICAgICAgIHdoaWxlICgqa2FwcGEgPiAwKSB7Cisg
ICAgICAgICAgICBpbnQgZGlnaXQgPSBpbnRlZ3JhbHMgLyBkaXZpc29yOworICAgICAgICAgICAg
YnVmZmVyWypsZW5ndGhdID0gJzAnICsgZGlnaXQ7CisgICAgICAgICAgICAoKmxlbmd0aCkrKzsK
KyAgICAgICAgICAgIGludGVncmFscyAlPSBkaXZpc29yOworICAgICAgICAgICAgKCprYXBwYSkt
LTsKKyAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBrYXBwYSBub3cgZXF1YWxzIHRoZSBleHBvbmVu
dCBvZiB0aGUgZGl2aXNvciBhbmQgdGhhdCB0aGUKKyAgICAgICAgICAgIC8vIGludmFyaWFudCB0
aHVzIGhvbGRzIGFnYWluLgorICAgICAgICAgICAgdWludDY0X3QgcmVzdCA9CisgICAgICAgICAg
ICAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGludGVncmFscykgPDwgLW9uZS5lKCkpICsgZnJhY3Rp
b25hbHM7CisgICAgICAgICAgICAvLyBJbnZhcmlhbnQ6IHRvb19oaWdoID0gYnVmZmVyICogMTBe
a2FwcGEgKyBEaXlGcChyZXN0LCBvbmUuZSgpKQorICAgICAgICAgICAgLy8gUmVtaW5kZXI6IHVu
c2FmZV9pbnRlcnZhbC5lKCkgPT0gb25lLmUoKQorICAgICAgICAgICAgaWYgKHJlc3QgPCB1bnNh
ZmVfaW50ZXJ2YWwuZigpKSB7CisgICAgICAgICAgICAgICAgLy8gUm91bmRpbmcgZG93biAoYnkg
bm90IGVtaXR0aW5nIHRoZSByZW1haW5pbmcgZGlnaXRzKSB5aWVsZHMgYSBudW1iZXIKKyAgICAg
ICAgICAgICAgICAvLyB0aGF0IGxpZXMgd2l0aGluIHRoZSB1bnNhZmUgaW50ZXJ2YWwuCisgICAg
ICAgICAgICAgICAgcmV0dXJuIFJvdW5kV2VlZChidWZmZXIsICpsZW5ndGgsIERpeUZwOjpNaW51
cyh0b29faGlnaCwgdykuZigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
YWZlX2ludGVydmFsLmYoKSwgcmVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PHVpbnQ2NF90PihkaXZpc29yKSA8PCAtb25lLmUoKSwgdW5pdCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBkaXZpc29yIC89IDEwOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICAvLyBUaGUgaW50ZWdyYWxzIGhhdmUgYmVlbiBnZW5lcmF0ZWQuIFdlIGFyZSBh
dCB0aGUgcG9pbnQgb2YgdGhlIGRlY2ltYWwKKyAgICAgICAgLy8gc2VwYXJhdG9yLiBJbiB0aGUg
Zm9sbG93aW5nIGxvb3Agd2Ugc2ltcGx5IG11bHRpcGx5IHRoZSByZW1haW5pbmcgZGlnaXRzIGJ5
CisgICAgICAgIC8vIDEwIGFuZCBkaXZpZGUgYnkgb25lLiBXZSBqdXN0IG5lZWQgdG8gcGF5IGF0
dGVudGlvbiB0byBtdWx0aXBseSBhc3NvY2lhdGVkCisgICAgICAgIC8vIGRhdGEgKGxpa2UgdGhl
IGludGVydmFsIG9yICd1bml0JyksIHRvby4KKyAgICAgICAgLy8gTm90ZSB0aGF0IHRoZSBtdWx0
aXBsaWNhdGlvbiBieSAxMCBkb2VzIG5vdCBvdmVyZmxvdywgYmVjYXVzZSB3LmUgPj0gLTYwCisg
ICAgICAgIC8vIGFuZCB0aHVzIG9uZS5lID49IC02MC4KKyAgICAgICAgQVNTRVJUKG9uZS5lKCkg
Pj0gLTYwKTsKKyAgICAgICAgQVNTRVJUKGZyYWN0aW9uYWxzIDwgb25lLmYoKSk7CisgICAgICAg
IEFTU0VSVChVSU5UNjRfMlBBUlRfQygweEZGRkZGRkZGLCBGRkZGRkZGRikgLyAxMCA+PSBvbmUu
ZigpKTsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIGZyYWN0aW9uYWxzICo9
IDEwOworICAgICAgICAgICAgdW5pdCAqPSAxMDsKKyAgICAgICAgICAgIHVuc2FmZV9pbnRlcnZh
bC5zZXRfZih1bnNhZmVfaW50ZXJ2YWwuZigpICogMTApOworICAgICAgICAgICAgLy8gSW50ZWdl
ciBkaXZpc2lvbiBieSBvbmUuCisgICAgICAgICAgICBpbnQgZGlnaXQgPSBzdGF0aWNfY2FzdDxp
bnQ+KGZyYWN0aW9uYWxzID4+IC1vbmUuZSgpKTsKKyAgICAgICAgICAgIGJ1ZmZlclsqbGVuZ3Ro
XSA9ICcwJyArIGRpZ2l0OworICAgICAgICAgICAgKCpsZW5ndGgpKys7CisgICAgICAgICAgICBm
cmFjdGlvbmFscyAmPSBvbmUuZigpIC0gMTsgIC8vIE1vZHVsbyBieSBvbmUuCisgICAgICAgICAg
ICAoKmthcHBhKS0tOworICAgICAgICAgICAgaWYgKGZyYWN0aW9uYWxzIDwgdW5zYWZlX2ludGVy
dmFsLmYoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBSb3VuZFdlZWQoYnVmZmVyLCAqbGVu
Z3RoLCBEaXlGcDo6TWludXModG9vX2hpZ2gsIHcpLmYoKSAqIHVuaXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNhZmVfaW50ZXJ2YWwuZigpLCBmcmFjdGlvbmFscywgb25l
LmYoKSwgdW5pdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
CisgICAgCisgICAgLy8gR2VuZXJhdGVzIChhdCBtb3N0KSByZXF1ZXN0ZWRfZGlnaXRzIGRpZ2l0
cyBvZiBpbnB1dCBudW1iZXIgdy4KKyAgICAvLyB3IGlzIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVy
IChEaXlGcCksIGNvbnNpc3Rpbmcgb2YgYSBzaWduaWZpY2FuZCBhbmQgYW4KKyAgICAvLyBleHBv
bmVudC4gSXRzIGV4cG9uZW50IGlzIGJvdW5kZWQgYnkga01pbmltYWxUYXJnZXRFeHBvbmVudCBh
bmQKKyAgICAvLyBrTWF4aW1hbFRhcmdldEV4cG9uZW50LgorICAgIC8vICAgICAgIEhlbmNlIC02
MCA8PSB3LmUoKSA8PSAtMzIuCisgICAgLy8KKyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIGl0IGZh
aWxzLCBpbiB3aGljaCBjYXNlIHRoZSBnZW5lcmF0ZWQgZGlnaXRzIGluIHRoZSBidWZmZXIKKyAg
ICAvLyBzaG91bGQgbm90IGJlIHVzZWQuCisgICAgLy8gUHJlY29uZGl0aW9uczoKKyAgICAvLyAg
KiB3IGlzIGNvcnJlY3QgdXAgdG8gMSB1bHAgKHVuaXQgaW4gdGhlIGxhc3QgcGxhY2UpLiBUaGF0
CisgICAgLy8gICAgaXMsIGl0cyBlcnJvciBtdXN0IGJlIHN0cmljdGx5IGxlc3MgdGhhbiBhIHVu
aXQgb2YgaXRzIGxhc3QgZGlnaXQuCisgICAgLy8gICoga01pbmltYWxUYXJnZXRFeHBvbmVudCA8
PSB3LmUoKSA8PSBrTWF4aW1hbFRhcmdldEV4cG9uZW50CisgICAgLy8KKyAgICAvLyBQb3N0Y29u
ZGl0aW9uczogcmV0dXJucyBmYWxzZSBpZiBwcm9jZWR1cmUgZmFpbHMuCisgICAgLy8gICBvdGhl
cndpc2U6CisgICAgLy8gICAgICogYnVmZmVyIGlzIG5vdCBudWxsLXRlcm1pbmF0ZWQsIGJ1dCBs
ZW5ndGggY29udGFpbnMgdGhlIG51bWJlciBvZgorICAgIC8vICAgICAgIGRpZ2l0cy4KKyAgICAv
LyAgICAgKiB0aGUgcmVwcmVzZW50YXRpb24gaW4gYnVmZmVyIGlzIHRoZSBtb3N0IHByZWNpc2Ug
cmVwcmVzZW50YXRpb24gb2YKKyAgICAvLyAgICAgICByZXF1ZXN0ZWRfZGlnaXRzIGRpZ2l0cy4K
KyAgICAvLyAgICAgKiBidWZmZXIgY29udGFpbnMgYXQgbW9zdCByZXF1ZXN0ZWRfZGlnaXRzIGRp
Z2l0cyBvZiB3LiBJZiB0aGVyZSBhcmUgbGVzcworICAgIC8vICAgICAgIHRoYW4gcmVxdWVzdGVk
X2RpZ2l0cyBkaWdpdHMgdGhlbiBzb21lIHRyYWlsaW5nICcwJ3MgaGF2ZSBiZWVuIHJlbW92ZWQu
CisgICAgLy8gICAgICoga2FwcGEgaXMgc3VjaCB0aGF0CisgICAgLy8gICAgICAgICAgICB3ID0g
YnVmZmVyICogMTBea2FwcGEgKyBlcHMgd2l0aCB8ZXBzfCA8IDEwXmthcHBhIC8gMi4KKyAgICAv
LworICAgIC8vIFJlbWFyazogVGhpcyBwcm9jZWR1cmUgdGFrZXMgaW50byBhY2NvdW50IHRoZSBp
bXByZWNpc2lvbiBvZiBpdHMgaW5wdXQKKyAgICAvLyAgIG51bWJlcnMuIElmIHRoZSBwcmVjaXNp
b24gaXMgbm90IGVub3VnaCB0byBndWFyYW50ZWUgYWxsIHRoZSBwb3N0Y29uZGl0aW9ucworICAg
IC8vICAgdGhlbiBmYWxzZSBpcyByZXR1cm5lZC4gVGhpcyB1c3VhbGx5IGhhcHBlbnMgcmFyZWx5
LCBidXQgdGhlIGZhaWx1cmUtcmF0ZQorICAgIC8vICAgaW5jcmVhc2VzIHdpdGggaGlnaGVyIHJl
cXVlc3RlZF9kaWdpdHMuCisgICAgc3RhdGljIGJvb2wgRGlnaXRHZW5Db3VudGVkKERpeUZwIHcs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXF1ZXN0ZWRfZGlnaXRzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGxlbmd0aCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50KiBrYXBwYSkgeworICAgICAgICBBU1NFUlQoa01pbmltYWxU
YXJnZXRFeHBvbmVudCA8PSB3LmUoKSAmJiB3LmUoKSA8PSBrTWF4aW1hbFRhcmdldEV4cG9uZW50
KTsKKyAgICAgICAgQVNTRVJUKGtNaW5pbWFsVGFyZ2V0RXhwb25lbnQgPj0gLTYwKTsKKyAgICAg
ICAgQVNTRVJUKGtNYXhpbWFsVGFyZ2V0RXhwb25lbnQgPD0gLTMyKTsKKyAgICAgICAgLy8gdyBp
cyBhc3N1bWVkIHRvIGhhdmUgYW4gZXJyb3IgbGVzcyB0aGFuIDEgdW5pdC4gV2hlbmV2ZXIgdyBp
cyBzY2FsZWQgd2UKKyAgICAgICAgLy8gYWxzbyBzY2FsZSBpdHMgZXJyb3IuCisgICAgICAgIHVp
bnQ2NF90IHdfZXJyb3IgPSAxOworICAgICAgICAvLyBXZSBjdXQgdGhlIGlucHV0IG51bWJlciBp
bnRvIHR3byBwYXJ0czogdGhlIGludGVncmFsIGRpZ2l0cyBhbmQgdGhlCisgICAgICAgIC8vIGZy
YWN0aW9uYWwgZGlnaXRzLiBXZSBkb24ndCBlbWl0IGFueSBkZWNpbWFsIHNlcGFyYXRvciwgYnV0
IGFkYXB0IGthcHBhCisgICAgICAgIC8vIGluc3RlYWQuIEV4YW1wbGU6IGluc3RlYWQgb2Ygd3Jp
dGluZyAiMS4yIiB3ZSBwdXQgIjEyIiBpbnRvIHRoZSBidWZmZXIgYW5kCisgICAgICAgIC8vIGlu
Y3JlYXNlIGthcHBhIGJ5IDEuCisgICAgICAgIERpeUZwIG9uZSA9IERpeUZwKHN0YXRpY19jYXN0
PHVpbnQ2NF90PigxKSA8PCAtdy5lKCksIHcuZSgpKTsKKyAgICAgICAgLy8gRGl2aXNpb24gYnkg
b25lIGlzIGEgc2hpZnQuCisgICAgICAgIHVpbnQzMl90IGludGVncmFscyA9IHN0YXRpY19jYXN0
PHVpbnQzMl90Pih3LmYoKSA+PiAtb25lLmUoKSk7CisgICAgICAgIC8vIE1vZHVsbyBieSBvbmUg
aXMgYW4gYW5kLgorICAgICAgICB1aW50NjRfdCBmcmFjdGlvbmFscyA9IHcuZigpICYgKG9uZS5m
KCkgLSAxKTsKKyAgICAgICAgdWludDMyX3QgZGl2aXNvcjsKKyAgICAgICAgaW50IGRpdmlzb3Jf
ZXhwb25lbnQ7CisgICAgICAgIEJpZ2dlc3RQb3dlclRlbihpbnRlZ3JhbHMsIERpeUZwOjprU2ln
bmlmaWNhbmRTaXplIC0gKC1vbmUuZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICZkaXZp
c29yLCAmZGl2aXNvcl9leHBvbmVudCk7CisgICAgICAgICprYXBwYSA9IGRpdmlzb3JfZXhwb25l
bnQgKyAxOworICAgICAgICAqbGVuZ3RoID0gMDsKKyAgICAgICAgCisgICAgICAgIC8vIExvb3Ag
aW52YXJpYW50OiBidWZmZXIgPSB3IC8gMTBea2FwcGEgIChpbnRlZ2VyIGRpdmlzaW9uKQorICAg
ICAgICAvLyBUaGUgaW52YXJpYW50IGhvbGRzIGZvciB0aGUgZmlyc3QgaXRlcmF0aW9uOiBrYXBw
YSBoYXMgYmVlbiBpbml0aWFsaXplZAorICAgICAgICAvLyB3aXRoIHRoZSBkaXZpc29yIGV4cG9u
ZW50ICsgMS4gQW5kIHRoZSBkaXZpc29yIGlzIHRoZSBiaWdnZXN0IHBvd2VyIG9mIHRlbgorICAg
ICAgICAvLyB0aGF0IGlzIHNtYWxsZXIgdGhhbiAnaW50ZWdyYWxzJy4KKyAgICAgICAgd2hpbGUg
KCprYXBwYSA+IDApIHsKKyAgICAgICAgICAgIGludCBkaWdpdCA9IGludGVncmFscyAvIGRpdmlz
b3I7CisgICAgICAgICAgICBidWZmZXJbKmxlbmd0aF0gPSAnMCcgKyBkaWdpdDsKKyAgICAgICAg
ICAgICgqbGVuZ3RoKSsrOworICAgICAgICAgICAgcmVxdWVzdGVkX2RpZ2l0cy0tOworICAgICAg
ICAgICAgaW50ZWdyYWxzICU9IGRpdmlzb3I7CisgICAgICAgICAgICAoKmthcHBhKS0tOworICAg
ICAgICAgICAgLy8gTm90ZSB0aGF0IGthcHBhIG5vdyBlcXVhbHMgdGhlIGV4cG9uZW50IG9mIHRo
ZSBkaXZpc29yIGFuZCB0aGF0IHRoZQorICAgICAgICAgICAgLy8gaW52YXJpYW50IHRodXMgaG9s
ZHMgYWdhaW4uCisgICAgICAgICAgICBpZiAocmVxdWVzdGVkX2RpZ2l0cyA9PSAwKSBicmVhazsK
KyAgICAgICAgICAgIGRpdmlzb3IgLz0gMTA7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGlmIChyZXF1ZXN0ZWRfZGlnaXRzID09IDApIHsKKyAgICAgICAgICAgIHVpbnQ2NF90IHJlc3Qg
PQorICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVpbnQ2NF90PihpbnRlZ3JhbHMpIDw8IC1vbmUu
ZSgpKSArIGZyYWN0aW9uYWxzOworICAgICAgICAgICAgcmV0dXJuIFJvdW5kV2VlZENvdW50ZWQo
YnVmZmVyLCAqbGVuZ3RoLCByZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGRpdmlzb3IpIDw8IC1vbmUuZSgpLCB3X2Vycm9yLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2FwcGEpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICAvLyBUaGUgaW50ZWdyYWxzIGhhdmUgYmVlbiBnZW5lcmF0ZWQuIFdl
IGFyZSBhdCB0aGUgcG9pbnQgb2YgdGhlIGRlY2ltYWwKKyAgICAgICAgLy8gc2VwYXJhdG9yLiBJ
biB0aGUgZm9sbG93aW5nIGxvb3Agd2Ugc2ltcGx5IG11bHRpcGx5IHRoZSByZW1haW5pbmcgZGln
aXRzIGJ5CisgICAgICAgIC8vIDEwIGFuZCBkaXZpZGUgYnkgb25lLiBXZSBqdXN0IG5lZWQgdG8g
cGF5IGF0dGVudGlvbiB0byBtdWx0aXBseSBhc3NvY2lhdGVkCisgICAgICAgIC8vIGRhdGEgKHRo
ZSAndW5pdCcpLCB0b28uCisgICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgbXVsdGlwbGljYXRpb24g
YnkgMTAgZG9lcyBub3Qgb3ZlcmZsb3csIGJlY2F1c2Ugdy5lID49IC02MAorICAgICAgICAvLyBh
bmQgdGh1cyBvbmUuZSA+PSAtNjAuCisgICAgICAgIEFTU0VSVChvbmUuZSgpID49IC02MCk7Cisg
ICAgICAgIEFTU0VSVChmcmFjdGlvbmFscyA8IG9uZS5mKCkpOworICAgICAgICBBU1NFUlQoVUlO
VDY0XzJQQVJUX0MoMHhGRkZGRkZGRiwgRkZGRkZGRkYpIC8gMTAgPj0gb25lLmYoKSk7CisgICAg
ICAgIHdoaWxlIChyZXF1ZXN0ZWRfZGlnaXRzID4gMCAmJiBmcmFjdGlvbmFscyA+IHdfZXJyb3Ip
IHsKKyAgICAgICAgICAgIGZyYWN0aW9uYWxzICo9IDEwOworICAgICAgICAgICAgd19lcnJvciAq
PSAxMDsKKyAgICAgICAgICAgIC8vIEludGVnZXIgZGl2aXNpb24gYnkgb25lLgorICAgICAgICAg
ICAgaW50IGRpZ2l0ID0gc3RhdGljX2Nhc3Q8aW50PihmcmFjdGlvbmFscyA+PiAtb25lLmUoKSk7
CisgICAgICAgICAgICBidWZmZXJbKmxlbmd0aF0gPSAnMCcgKyBkaWdpdDsKKyAgICAgICAgICAg
ICgqbGVuZ3RoKSsrOworICAgICAgICAgICAgcmVxdWVzdGVkX2RpZ2l0cy0tOworICAgICAgICAg
ICAgZnJhY3Rpb25hbHMgJj0gb25lLmYoKSAtIDE7ICAvLyBNb2R1bG8gYnkgb25lLgorICAgICAg
ICAgICAgKCprYXBwYSktLTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVxdWVzdGVkX2RpZ2l0
cyAhPSAwKSByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBSb3VuZFdlZWRDb3VudGVkKGJ1
ZmZlciwgKmxlbmd0aCwgZnJhY3Rpb25hbHMsIG9uZS5mKCksIHdfZXJyb3IsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGthcHBhKTsKKyAgICB9CisgICAgCisgICAgCisgICAgLy8g
UHJvdmlkZXMgYSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIHYuCisgICAgLy8gUmV0dXJucyB0
cnVlIGlmIGl0IHN1Y2NlZWRzLCBvdGhlcndpc2UgdGhlIHJlc3VsdCBjYW5ub3QgYmUgdHJ1c3Rl
ZC4KKyAgICAvLyBUaGVyZSB3aWxsIGJlICpsZW5ndGggZGlnaXRzIGluc2lkZSB0aGUgYnVmZmVy
IChub3QgbnVsbC10ZXJtaW5hdGVkKS4KKyAgICAvLyBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyB0
cnVlIHRoZW4KKyAgICAvLyAgICAgICAgdiA9PSAoZG91YmxlKSAoYnVmZmVyICogMTBeZGVjaW1h
bF9leHBvbmVudCkuCisgICAgLy8gVGhlIGRpZ2l0cyBpbiB0aGUgYnVmZmVyIGFyZSB0aGUgc2hv
cnRlc3QgcmVwcmVzZW50YXRpb24gcG9zc2libGU6IG5vCisgICAgLy8gMC4wOTk5OTk5OTk5OTk5
OTk5OSBpbnN0ZWFkIG9mIDAuMS4gVGhlIHNob3J0ZXIgcmVwcmVzZW50YXRpb24gd2lsbCBldmVu
IGJlCisgICAgLy8gY2hvc2VuIGV2ZW4gaWYgdGhlIGxvbmdlciBvbmUgd291bGQgYmUgY2xvc2Vy
IHRvIHYuCisgICAgLy8gVGhlIGxhc3QgZGlnaXQgd2lsbCBiZSBjbG9zZXN0IHRvIHRoZSBhY3R1
YWwgdi4gVGhhdCBpcywgZXZlbiBpZiBzZXZlcmFsCisgICAgLy8gZGlnaXRzIG1pZ2h0IGNvcnJl
Y3RseSB5aWVsZCAndicgd2hlbiByZWFkIGFnYWluLCB0aGUgY2xvc2VzdCB3aWxsIGJlCisgICAg
Ly8gY29tcHV0ZWQuCisgICAgc3RhdGljIGJvb2wgR3Jpc3UzKGRvdWJsZSB2LAorICAgICAgICAg
ICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAg
ICBpbnQqIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50KiBkZWNpbWFsX2V4cG9u
ZW50KSB7CisgICAgICAgIERpeUZwIHcgPSBEb3VibGUodikuQXNOb3JtYWxpemVkRGl5RnAoKTsK
KyAgICAgICAgLy8gYm91bmRhcnlfbWludXMgYW5kIGJvdW5kYXJ5X3BsdXMgYXJlIHRoZSBib3Vu
ZGFyaWVzIGJldHdlZW4gdiBhbmQgaXRzCisgICAgICAgIC8vIGNsb3Nlc3QgZmxvYXRpbmctcG9p
bnQgbmVpZ2hib3JzLiBBbnkgbnVtYmVyIHN0cmljdGx5IGJldHdlZW4KKyAgICAgICAgLy8gYm91
bmRhcnlfbWludXMgYW5kIGJvdW5kYXJ5X3BsdXMgd2lsbCByb3VuZCB0byB2IHdoZW4gY29udmVy
dCB0byBhIGRvdWJsZS4KKyAgICAgICAgLy8gR3Jpc3UzIHdpbGwgbmV2ZXIgb3V0cHV0IHJlcHJl
c2VudGF0aW9ucyB0aGF0IGxpZSBleGFjdGx5IG9uIGEgYm91bmRhcnkuCisgICAgICAgIERpeUZw
IGJvdW5kYXJ5X21pbnVzLCBib3VuZGFyeV9wbHVzOworICAgICAgICBEb3VibGUodikuTm9ybWFs
aXplZEJvdW5kYXJpZXMoJmJvdW5kYXJ5X21pbnVzLCAmYm91bmRhcnlfcGx1cyk7CisgICAgICAg
IEFTU0VSVChib3VuZGFyeV9wbHVzLmUoKSA9PSB3LmUoKSk7CisgICAgICAgIERpeUZwIHRlbl9t
azsgIC8vIENhY2hlZCBwb3dlciBvZiB0ZW46IDEwXi1rCisgICAgICAgIGludCBtazsgICAgICAg
IC8vIC1rCisgICAgICAgIGludCB0ZW5fbWtfbWluaW1hbF9iaW5hcnlfZXhwb25lbnQgPQorICAg
ICAgICBrTWluaW1hbFRhcmdldEV4cG9uZW50IC0gKHcuZSgpICsgRGl5RnA6OmtTaWduaWZpY2Fu
ZFNpemUpOworICAgICAgICBpbnQgdGVuX21rX21heGltYWxfYmluYXJ5X2V4cG9uZW50ID0KKyAg
ICAgICAga01heGltYWxUYXJnZXRFeHBvbmVudCAtICh3LmUoKSArIERpeUZwOjprU2lnbmlmaWNh
bmRTaXplKTsKKyAgICAgICAgUG93ZXJzT2ZUZW5DYWNoZTo6R2V0Q2FjaGVkUG93ZXJGb3JCaW5h
cnlFeHBvbmVudFJhbmdlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGVuX21rX21pbmltYWxfYmluYXJ5X2V4cG9uZW50LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGVuX21rX21heGltYWxfYmluYXJ5X2V4cG9uZW50LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRlbl9taywgJm1r
KTsKKyAgICAgICAgQVNTRVJUKChrTWluaW1hbFRhcmdldEV4cG9uZW50IDw9IHcuZSgpICsgdGVu
X21rLmUoKSArCisgICAgICAgICAgICAgICAgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUpICYmCisg
ICAgICAgICAgICAgICAoa01heGltYWxUYXJnZXRFeHBvbmVudCA+PSB3LmUoKSArIHRlbl9tay5l
KCkgKworICAgICAgICAgICAgICAgIERpeUZwOjprU2lnbmlmaWNhbmRTaXplKSk7CisgICAgICAg
IC8vIE5vdGUgdGhhdCB0ZW5fbWsgaXMgb25seSBhbiBhcHByb3hpbWF0aW9uIG9mIDEwXi1rLiBB
IERpeUZwIG9ubHkgY29udGFpbnMgYQorICAgICAgICAvLyA2NCBiaXQgc2lnbmlmaWNhbmQgYW5k
IHRlbl9tayBpcyB0aHVzIG9ubHkgcHJlY2lzZSB1cCB0byA2NCBiaXRzLgorICAgICAgICAKKyAg
ICAgICAgLy8gVGhlIERpeUZwOjpUaW1lcyBwcm9jZWR1cmUgcm91bmRzIGl0cyByZXN1bHQsIGFu
ZCB0ZW5fbWsgaXMgYXBwcm94aW1hdGVkCisgICAgICAgIC8vIHRvby4gVGhlIHZhcmlhYmxlIHNj
YWxlZF93IChhcyB3ZWxsIGFzIHNjYWxlZF9ib3VuZGFyeV9taW51cy9wbHVzKSBhcmUgbm93Cisg
ICAgICAgIC8vIG9mZiBieSBhIHNtYWxsIGFtb3VudC4KKyAgICAgICAgLy8gSW4gZmFjdDogc2Nh
bGVkX3cgLSB3KjEwXmsgPCAxdWxwICh1bml0IGluIHRoZSBsYXN0IHBsYWNlKSBvZiBzY2FsZWRf
dy4KKyAgICAgICAgLy8gSW4gb3RoZXIgd29yZHM6IGxldCBmID0gc2NhbGVkX3cuZigpIGFuZCBl
ID0gc2NhbGVkX3cuZSgpLCB0aGVuCisgICAgICAgIC8vICAgICAgICAgICAoZi0xKSAqIDJeZSA8
IHcqMTBeayA8IChmKzEpICogMl5lCisgICAgICAgIERpeUZwIHNjYWxlZF93ID0gRGl5RnA6OlRp
bWVzKHcsIHRlbl9tayk7CisgICAgICAgIEFTU0VSVChzY2FsZWRfdy5lKCkgPT0KKyAgICAgICAg
ICAgICAgIGJvdW5kYXJ5X3BsdXMuZSgpICsgdGVuX21rLmUoKSArIERpeUZwOjprU2lnbmlmaWNh
bmRTaXplKTsKKyAgICAgICAgLy8gSW4gdGhlb3J5IGl0IHdvdWxkIGJlIHBvc3NpYmxlIHRvIGF2
b2lkIHNvbWUgcmVjb21wdXRhdGlvbnMgYnkgY29tcHV0aW5nCisgICAgICAgIC8vIHRoZSBkaWZm
ZXJlbmNlIGJldHdlZW4gdyBhbmQgYm91bmRhcnlfbWludXMvcGx1cyAoYSBwb3dlciBvZiAyKSBh
bmQgdG8KKyAgICAgICAgLy8gY29tcHV0ZSBzY2FsZWRfYm91bmRhcnlfbWludXMvcGx1cyBieSBz
dWJ0cmFjdGluZy9hZGRpbmcgZnJvbQorICAgICAgICAvLyBzY2FsZWRfdy4gSG93ZXZlciB0aGUg
Y29kZSBiZWNvbWVzIG11Y2ggbGVzcyByZWFkYWJsZSBhbmQgdGhlIHNwZWVkCisgICAgICAgIC8v
IGVuaGFuY2VtZW50cyBhcmUgbm90IHRlcnJpZmZpYy4KKyAgICAgICAgRGl5RnAgc2NhbGVkX2Jv
dW5kYXJ5X21pbnVzID0gRGl5RnA6OlRpbWVzKGJvdW5kYXJ5X21pbnVzLCB0ZW5fbWspOworICAg
ICAgICBEaXlGcCBzY2FsZWRfYm91bmRhcnlfcGx1cyAgPSBEaXlGcDo6VGltZXMoYm91bmRhcnlf
cGx1cywgIHRlbl9tayk7CisgICAgICAgIAorICAgICAgICAvLyBEaWdpdEdlbiB3aWxsIGdlbmVy
YXRlIHRoZSBkaWdpdHMgb2Ygc2NhbGVkX3cuIFRoZXJlZm9yZSB3ZSBoYXZlCisgICAgICAgIC8v
IHYgPT0gKGRvdWJsZSkgKHNjYWxlZF93ICogMTBeLW1rKS4KKyAgICAgICAgLy8gU2V0IGRlY2lt
YWxfZXhwb25lbnQgPT0gLW1rIGFuZCBwYXNzIGl0IHRvIERpZ2l0R2VuLiBJZiBzY2FsZWRfdyBp
cyBub3QgYW4KKyAgICAgICAgLy8gaW50ZWdlciB0aGFuIGl0IHdpbGwgYmUgdXBkYXRlZC4gRm9y
IGluc3RhbmNlIGlmIHNjYWxlZF93ID09IDEuMjMgdGhlbgorICAgICAgICAvLyB0aGUgYnVmZmVy
IHdpbGwgYmUgZmlsbGVkIHdpdGggIjEyMyIgdW5kIHRoZSBkZWNpbWFsX2V4cG9uZW50IHdpbGwg
YmUKKyAgICAgICAgLy8gZGVjcmVhc2VkIGJ5IDIuCisgICAgICAgIGludCBrYXBwYTsKKyAgICAg
ICAgYm9vbCByZXN1bHQgPSBEaWdpdEdlbihzY2FsZWRfYm91bmRhcnlfbWludXMsIHNjYWxlZF93
LCBzY2FsZWRfYm91bmRhcnlfcGx1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
dWZmZXIsIGxlbmd0aCwgJmthcHBhKTsKKyAgICAgICAgKmRlY2ltYWxfZXhwb25lbnQgPSAtbWsg
KyBrYXBwYTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgCisgICAg
Ly8gVGhlICJjb3VudGVkIiB2ZXJzaW9uIG9mIGdyaXN1MyAoc2VlIGFib3ZlKSBvbmx5IGdlbmVy
YXRlcyByZXF1ZXN0ZWRfZGlnaXRzCisgICAgLy8gbnVtYmVyIG9mIGRpZ2l0cy4gVGhpcyB2ZXJz
aW9uIGRvZXMgbm90IGdlbmVyYXRlIHRoZSBzaG9ydGVzdCByZXByZXNlbnRhdGlvbiwKKyAgICAv
LyBhbmQgd2l0aCBlbm91Z2ggcmVxdWVzdGVkIGRpZ2l0cyAwLjEgd2lsbCBhdCBzb21lIHBvaW50
IHByaW50IGFzIDAuOTk5OTk5OS4uLgorICAgIC8vIEdyaXN1MyBpcyB0b28gaW1wcmVjaXNlIGZv
ciByZWFsIGhhbGZ3YXkgY2FzZXMgKDEuNSB3aWxsIG5vdCB3b3JrKSBhbmQKKyAgICAvLyB0aGVy
ZWZvcmUgdGhlIHJvdW5kaW5nIHN0cmF0ZWd5IGZvciBoYWxmd2F5IGNhc2VzIGlzIGlycmVsZXZh
bnQuCisgICAgc3RhdGljIGJvb2wgR3Jpc3UzQ291bnRlZChkb3VibGUgdiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCByZXF1ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCogbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
KiBkZWNpbWFsX2V4cG9uZW50KSB7CisgICAgICAgIERpeUZwIHcgPSBEb3VibGUodikuQXNOb3Jt
YWxpemVkRGl5RnAoKTsKKyAgICAgICAgRGl5RnAgdGVuX21rOyAgLy8gQ2FjaGVkIHBvd2VyIG9m
IHRlbjogMTBeLWsKKyAgICAgICAgaW50IG1rOyAgICAgICAgLy8gLWsKKyAgICAgICAgaW50IHRl
bl9ta19taW5pbWFsX2JpbmFyeV9leHBvbmVudCA9CisgICAgICAgIGtNaW5pbWFsVGFyZ2V0RXhw
b25lbnQgLSAody5lKCkgKyBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSk7CisgICAgICAgIGludCB0
ZW5fbWtfbWF4aW1hbF9iaW5hcnlfZXhwb25lbnQgPQorICAgICAgICBrTWF4aW1hbFRhcmdldEV4
cG9uZW50IC0gKHcuZSgpICsgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUpOworICAgICAgICBQb3dl
cnNPZlRlbkNhY2hlOjpHZXRDYWNoZWRQb3dlckZvckJpbmFyeUV4cG9uZW50UmFuZ2UoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0ZW5fbWtfbWluaW1hbF9iaW5hcnlfZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW5fbWtfbWF4aW1hbF9i
aW5hcnlfZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmdGVuX21rLCAmbWspOworICAgICAgICBBU1NFUlQoKGtN
aW5pbWFsVGFyZ2V0RXhwb25lbnQgPD0gdy5lKCkgKyB0ZW5fbWsuZSgpICsKKyAgICAgICAgICAg
ICAgICBEaXlGcDo6a1NpZ25pZmljYW5kU2l6ZSkgJiYKKyAgICAgICAgICAgICAgIChrTWF4aW1h
bFRhcmdldEV4cG9uZW50ID49IHcuZSgpICsgdGVuX21rLmUoKSArCisgICAgICAgICAgICAgICAg
RGl5RnA6OmtTaWduaWZpY2FuZFNpemUpKTsKKyAgICAgICAgLy8gTm90ZSB0aGF0IHRlbl9tayBp
cyBvbmx5IGFuIGFwcHJveGltYXRpb24gb2YgMTBeLWsuIEEgRGl5RnAgb25seSBjb250YWlucyBh
CisgICAgICAgIC8vIDY0IGJpdCBzaWduaWZpY2FuZCBhbmQgdGVuX21rIGlzIHRodXMgb25seSBw
cmVjaXNlIHVwIHRvIDY0IGJpdHMuCisgICAgICAgIAorICAgICAgICAvLyBUaGUgRGl5RnA6OlRp
bWVzIHByb2NlZHVyZSByb3VuZHMgaXRzIHJlc3VsdCwgYW5kIHRlbl9tayBpcyBhcHByb3hpbWF0
ZWQKKyAgICAgICAgLy8gdG9vLiBUaGUgdmFyaWFibGUgc2NhbGVkX3cgKGFzIHdlbGwgYXMgc2Nh
bGVkX2JvdW5kYXJ5X21pbnVzL3BsdXMpIGFyZSBub3cKKyAgICAgICAgLy8gb2ZmIGJ5IGEgc21h
bGwgYW1vdW50LgorICAgICAgICAvLyBJbiBmYWN0OiBzY2FsZWRfdyAtIHcqMTBeayA8IDF1bHAg
KHVuaXQgaW4gdGhlIGxhc3QgcGxhY2UpIG9mIHNjYWxlZF93LgorICAgICAgICAvLyBJbiBvdGhl
ciB3b3JkczogbGV0IGYgPSBzY2FsZWRfdy5mKCkgYW5kIGUgPSBzY2FsZWRfdy5lKCksIHRoZW4K
KyAgICAgICAgLy8gICAgICAgICAgIChmLTEpICogMl5lIDwgdyoxMF5rIDwgKGYrMSkgKiAyXmUK
KyAgICAgICAgRGl5RnAgc2NhbGVkX3cgPSBEaXlGcDo6VGltZXModywgdGVuX21rKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIFdlIG5vdyBoYXZlIChkb3VibGUpIChzY2FsZWRfdyAqIDEwXi1tayku
CisgICAgICAgIC8vIERpZ2l0R2VuIHdpbGwgZ2VuZXJhdGUgdGhlIGZpcnN0IHJlcXVlc3RlZF9k
aWdpdHMgZGlnaXRzIG9mIHNjYWxlZF93IGFuZAorICAgICAgICAvLyByZXR1cm4gdG9nZXRoZXIg
d2l0aCBhIGthcHBhIHN1Y2ggdGhhdCBzY2FsZWRfdyB+PSBidWZmZXIgKiAxMF5rYXBwYS4gKEl0
CisgICAgICAgIC8vIHdpbGwgbm90IGFsd2F5cyBiZSBleGFjdGx5IHRoZSBzYW1lIHNpbmNlIERp
Z2l0R2VuQ291bnRlZCBvbmx5IHByb2R1Y2VzIGEKKyAgICAgICAgLy8gbGltaXRlZCBudW1iZXIg
b2YgZGlnaXRzLikKKyAgICAgICAgaW50IGthcHBhOworICAgICAgICBib29sIHJlc3VsdCA9IERp
Z2l0R2VuQ291bnRlZChzY2FsZWRfdywgcmVxdWVzdGVkX2RpZ2l0cywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBsZW5ndGgsICZrYXBwYSk7CisgICAgICAg
ICpkZWNpbWFsX2V4cG9uZW50ID0gLW1rICsga2FwcGE7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIAorICAgIAorICAgIGJvb2wgRmFzdER0b2EoZG91YmxlIHYsCisgICAgICAg
ICAgICAgICAgICBGYXN0RHRvYU1vZGUgbW9kZSwKKyAgICAgICAgICAgICAgICAgIGludCByZXF1
ZXN0ZWRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwKKyAg
ICAgICAgICAgICAgICAgIGludCogbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgaW50KiBkZWNp
bWFsX3BvaW50KSB7CisgICAgICAgIEFTU0VSVCh2ID4gMCk7CisgICAgICAgIEFTU0VSVCghRG91
YmxlKHYpLklzU3BlY2lhbCgpKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgcmVzdWx0ID0gZmFs
c2U7CisgICAgICAgIGludCBkZWNpbWFsX2V4cG9uZW50ID0gMDsKKyAgICAgICAgc3dpdGNoICht
b2RlKSB7CisgICAgICAgICAgICBjYXNlIEZBU1RfRFRPQV9TSE9SVEVTVDoKKyAgICAgICAgICAg
ICAgICByZXN1bHQgPSBHcmlzdTModiwgYnVmZmVyLCBsZW5ndGgsICZkZWNpbWFsX2V4cG9uZW50
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRkFTVF9EVE9BX1BS
RUNJU0lPTjoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBHcmlzdTNDb3VudGVkKHYsIHJlcXVl
c3RlZF9kaWdpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZm
ZXIsIGxlbmd0aCwgJmRlY2ltYWxfZXhwb25lbnQpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAg
ICAgICB9CisgICAgICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgICAgICpkZWNpbWFsX3BvaW50
ID0gKmxlbmd0aCArIGRlY2ltYWxfZXhwb25lbnQ7CisgICAgICAgICAgICBidWZmZXJbKmxlbmd0
aF0gPSAnXDAnOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAg
IAorfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCisKK30gLy8gbmFtZXNwYWNlIFdU
RgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2Zhc3QtZHRvYS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2Zhc3QtZHRvYS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljg3NmE5ZjM4MjU2ZDJmYjAwMjNmOGUwOGRiNTgxYTg5MDM4YjI3MTMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZmFzdC1kdG9hLmgKQEAgLTAsMCAr
MSw4OCBAQAorLy8gQ29weXJpZ2h0IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0Ogor
Ly8KKy8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisvLyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwor
Ly8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkCisvLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisv
LyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKKy8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisv
LyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisvLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWZuZGVmIERPVUJMRV9DT05W
RVJTSU9OX0ZBU1RfRFRPQV9IXworI2RlZmluZSBET1VCTEVfQ09OVkVSU0lPTl9GQVNUX0RUT0Ff
SF8KKworI2luY2x1ZGUgInV0aWxzLmgiCisKK25hbWVzcGFjZSBXVEYgeworCituYW1lc3BhY2Ug
ZG91YmxlX2NvbnZlcnNpb24geworICAgIAorICAgIGVudW0gRmFzdER0b2FNb2RlIHsKKyAgICAg
ICAgLy8gQ29tcHV0ZXMgdGhlIHNob3J0ZXN0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBp
bnB1dC4gVGhlIHJldHVybmVkCisgICAgICAgIC8vIHJlc3VsdCB3aWxsIGJlIHRoZSBtb3N0IGFj
Y3VyYXRlIG51bWJlciBvZiB0aGlzIGxlbmd0aC4gTG9uZ2VyCisgICAgICAgIC8vIHJlcHJlc2Vu
dGF0aW9ucyBtaWdodCBiZSBtb3JlIGFjY3VyYXRlLgorICAgICAgICBGQVNUX0RUT0FfU0hPUlRF
U1QsCisgICAgICAgIC8vIENvbXB1dGVzIGEgcmVwcmVzZW50YXRpb24gd2hlcmUgdGhlIHByZWNp
c2lvbiAobnVtYmVyIG9mIGRpZ2l0cykgaXMKKyAgICAgICAgLy8gZ2l2ZW4gYXMgaW5wdXQuIFRo
ZSBwcmVjaXNpb24gaXMgaW5kZXBlbmRlbnQgb2YgdGhlIGRlY2ltYWwgcG9pbnQuCisgICAgICAg
IEZBU1RfRFRPQV9QUkVDSVNJT04KKyAgICB9OworICAgIAorICAgIC8vIEZhc3REdG9hIHdpbGwg
cHJvZHVjZSBhdCBtb3N0IGtGYXN0RHRvYU1heGltYWxMZW5ndGggZGlnaXRzLiBUaGlzIGRvZXMg
bm90CisgICAgLy8gaW5jbHVkZSB0aGUgdGVybWluYXRpbmcgJ1wwJyBjaGFyYWN0ZXIuCisgICAg
c3RhdGljIGNvbnN0IGludCBrRmFzdER0b2FNYXhpbWFsTGVuZ3RoID0gMTc7CisgICAgCisgICAg
Ly8gUHJvdmlkZXMgYSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIHYuCisgICAgLy8gVGhlIHJl
c3VsdCBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgYnVmZmVyICogMTBeKHBvaW50IC0gbGVuZ3Ro
KS4KKyAgICAvLworICAgIC8vIFByZWNvbmRpdGlvbjoKKyAgICAvLyAgICogdiBtdXN0IGJlIGEg
c3RyaWN0bHkgcG9zaXRpdmUgZmluaXRlIGRvdWJsZS4KKyAgICAvLworICAgIC8vIFJldHVybnMg
dHJ1ZSBpZiBpdCBzdWNjZWVkcywgb3RoZXJ3aXNlIHRoZSByZXN1bHQgY2FuIG5vdCBiZSB0cnVz
dGVkLgorICAgIC8vIFRoZXJlIHdpbGwgYmUgKmxlbmd0aCBkaWdpdHMgaW5zaWRlIHRoZSBidWZm
ZXIgZm9sbG93ZWQgYnkgYSBudWxsIHRlcm1pbmF0b3IuCisgICAgLy8gSWYgdGhlIGZ1bmN0aW9u
IHJldHVybnMgdHJ1ZSBhbmQgbW9kZSBlcXVhbHMKKyAgICAvLyAgIC0gRkFTVF9EVE9BX1NIT1JU
RVNULCB0aGVuCisgICAgLy8gICAgIHRoZSBwYXJhbWV0ZXIgcmVxdWVzdGVkX2RpZ2l0cyBpcyBp
Z25vcmVkLgorICAgIC8vICAgICBUaGUgcmVzdWx0IHNhdGlzZmllcworICAgIC8vICAgICAgICAg
diA9PSAoZG91YmxlKSAoYnVmZmVyICogMTBeKHBvaW50IC0gbGVuZ3RoKSkuCisgICAgLy8gICAg
IFRoZSBkaWdpdHMgaW4gdGhlIGJ1ZmZlciBhcmUgdGhlIHNob3J0ZXN0IHJlcHJlc2VudGF0aW9u
IHBvc3NpYmxlLiBFLmcuCisgICAgLy8gICAgIGlmIDAuMDk5OTk5OTk5OTk5IGFuZCAwLjEgcmVw
cmVzZW50IHRoZSBzYW1lIGRvdWJsZSB0aGVuICIxIiBpcyByZXR1cm5lZAorICAgIC8vICAgICB3
aXRoIHBvaW50ID0gMC4KKyAgICAvLyAgICAgVGhlIGxhc3QgZGlnaXQgd2lsbCBiZSBjbG9zZXN0
IHRvIHRoZSBhY3R1YWwgdi4gVGhhdCBpcywgZXZlbiBpZiBzZXZlcmFsCisgICAgLy8gICAgIGRp
Z2l0cyBtaWdodCBjb3JyZWN0bHkgeWllbGQgJ3YnIHdoZW4gcmVhZCBhZ2FpbiwgdGhlIGJ1ZmZl
ciB3aWxsIGNvbnRhaW4KKyAgICAvLyAgICAgdGhlIG9uZSBjbG9zZXN0IHRvIHYuCisgICAgLy8g
ICAtIEZBU1RfRFRPQV9QUkVDSVNJT04sIHRoZW4KKyAgICAvLyAgICAgdGhlIGJ1ZmZlciBjb250
YWlucyByZXF1ZXN0ZWRfZGlnaXRzIGRpZ2l0cy4KKyAgICAvLyAgICAgdGhlIGRpZmZlcmVuY2Ug
diAtIChidWZmZXIgKiAxMF4ocG9pbnQtbGVuZ3RoKSkgaXMgY2xvc2VzdCB0byB6ZXJvIGZvcgor
ICAgIC8vICAgICBhbGwgcG9zc2libGUgcmVwcmVzZW50YXRpb25zIG9mIHJlcXVlc3RlZF9kaWdp
dHMgZGlnaXRzLgorICAgIC8vICAgICBJZiB0aGVyZSBhcmUgdHdvIHZhbHVlcyB0aGF0IGFyZSBl
cXVhbGx5IGNsb3NlLCB0aGVuIEZhc3REdG9hIHJldHVybnMKKyAgICAvLyAgICAgZmFsc2UuCisg
ICAgLy8gRm9yIGJvdGggbW9kZXMgdGhlIGJ1ZmZlciBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBo
b2xkIHRoZSByZXN1bHQuCisgICAgYm9vbCBGYXN0RHRvYShkb3VibGUgZCwKKyAgICAgICAgICAg
ICAgICAgIEZhc3REdG9hTW9kZSBtb2RlLAorICAgICAgICAgICAgICAgICAgaW50IHJlcXVlc3Rl
ZF9kaWdpdHMsCisgICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLAorICAgICAg
ICAgICAgICAgICAgaW50KiBsZW5ndGgsCisgICAgICAgICAgICAgICAgICBpbnQqIGRlY2ltYWxf
cG9pbnQpOworICAgIAorfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCisKK30gLy8g
bmFtZXNwYWNlIFdURgorCisjZW5kaWYgIC8vIERPVUJMRV9DT05WRVJTSU9OX0ZBU1RfRFRPQV9I
XwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2ZpeGVkLWR0b2Eu
Y2MgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2EvZml4ZWQtZHRvYS5jYwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5kYzM5MTFlYTE0NjZlZGEzODdiMDE1N2MyZDI3ZTU4NDYxNjljMjJiCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2ZpeGVkLWR0b2EuY2MKQEAg
LTAsMCArMSw0MDggQEAKKy8vIENvcHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8v
IG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAg
ICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
Ly8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
Ly8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2luY2x1ZGUgPG1h
dGguaD4KKworI2luY2x1ZGUgIlVudXNlZFBhcmFtLmgiCisjaW5jbHVkZSAiZml4ZWQtZHRvYS5o
IgorI2luY2x1ZGUgImRvdWJsZS5oIgorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIGRv
dWJsZV9jb252ZXJzaW9uIHsKKyAgICAKKyAgICAvLyBSZXByZXNlbnRzIGEgMTI4Yml0IHR5cGUu
IFRoaXMgY2xhc3Mgc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGEgbmF0aXZlIHR5cGUgb24KKyAgICAv
LyBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IDEyOGJpdCBpbnRlZ2Vycy4KKyAgICBjbGFzcyBVSW50
MTI4IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFVJbnQxMjgoKSA6IGhpZ2hfYml0c18oMCksIGxv
d19iaXRzXygwKSB7IH0KKyAgICAgICAgVUludDEyOCh1aW50NjRfdCBoaWdoLCB1aW50NjRfdCBs
b3cpIDogaGlnaF9iaXRzXyhoaWdoKSwgbG93X2JpdHNfKGxvdykgeyB9CisgICAgICAgIAorICAg
ICAgICB2b2lkIE11bHRpcGx5KHVpbnQzMl90IG11bHRpcGxpY2FuZCkgeworICAgICAgICAgICAg
dWludDY0X3QgYWNjdW11bGF0b3I7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFjY3VtdWxh
dG9yID0gKGxvd19iaXRzXyAmIGtNYXNrMzIpICogbXVsdGlwbGljYW5kOworICAgICAgICAgICAg
dWludDMyX3QgcGFydCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihhY2N1bXVsYXRvciAmIGtNYXNr
MzIpOworICAgICAgICAgICAgYWNjdW11bGF0b3IgPj49IDMyOworICAgICAgICAgICAgYWNjdW11
bGF0b3IgPSBhY2N1bXVsYXRvciArIChsb3dfYml0c18gPj4gMzIpICogbXVsdGlwbGljYW5kOwor
ICAgICAgICAgICAgbG93X2JpdHNfID0gKGFjY3VtdWxhdG9yIDw8IDMyKSArIHBhcnQ7CisgICAg
ICAgICAgICBhY2N1bXVsYXRvciA+Pj0gMzI7CisgICAgICAgICAgICBhY2N1bXVsYXRvciA9IGFj
Y3VtdWxhdG9yICsgKGhpZ2hfYml0c18gJiBrTWFzazMyKSAqIG11bHRpcGxpY2FuZDsKKyAgICAg
ICAgICAgIHBhcnQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYWNjdW11bGF0b3IgJiBrTWFzazMy
KTsKKyAgICAgICAgICAgIGFjY3VtdWxhdG9yID4+PSAzMjsKKyAgICAgICAgICAgIGFjY3VtdWxh
dG9yID0gYWNjdW11bGF0b3IgKyAoaGlnaF9iaXRzXyA+PiAzMikgKiBtdWx0aXBsaWNhbmQ7Cisg
ICAgICAgICAgICBoaWdoX2JpdHNfID0gKGFjY3VtdWxhdG9yIDw8IDMyKSArIHBhcnQ7CisgICAg
ICAgICAgICBBU1NFUlQoKGFjY3VtdWxhdG9yID4+IDMyKSA9PSAwKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgdm9pZCBTaGlmdChpbnQgc2hpZnRfYW1vdW50KSB7CisgICAgICAgICAg
ICBBU1NFUlQoLTY0IDw9IHNoaWZ0X2Ftb3VudCAmJiBzaGlmdF9hbW91bnQgPD0gNjQpOworICAg
ICAgICAgICAgaWYgKHNoaWZ0X2Ftb3VudCA9PSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfSBlbHNlIGlmIChzaGlmdF9hbW91bnQgPT0gLTY0KSB7CisgICAgICAg
ICAgICAgICAgaGlnaF9iaXRzXyA9IGxvd19iaXRzXzsKKyAgICAgICAgICAgICAgICBsb3dfYml0
c18gPSAwOworICAgICAgICAgICAgfSBlbHNlIGlmIChzaGlmdF9hbW91bnQgPT0gNjQpIHsKKyAg
ICAgICAgICAgICAgICBsb3dfYml0c18gPSBoaWdoX2JpdHNfOworICAgICAgICAgICAgICAgIGhp
Z2hfYml0c18gPSAwOworICAgICAgICAgICAgfSBlbHNlIGlmIChzaGlmdF9hbW91bnQgPD0gMCkg
eworICAgICAgICAgICAgICAgIGhpZ2hfYml0c18gPDw9IC1zaGlmdF9hbW91bnQ7CisgICAgICAg
ICAgICAgICAgaGlnaF9iaXRzXyArPSBsb3dfYml0c18gPj4gKDY0ICsgc2hpZnRfYW1vdW50KTsK
KyAgICAgICAgICAgICAgICBsb3dfYml0c18gPDw9IC1zaGlmdF9hbW91bnQ7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGxvd19iaXRzXyA+Pj0gc2hpZnRfYW1vdW50Owor
ICAgICAgICAgICAgICAgIGxvd19iaXRzXyArPSBoaWdoX2JpdHNfIDw8ICg2NCAtIHNoaWZ0X2Ft
b3VudCk7CisgICAgICAgICAgICAgICAgaGlnaF9iaXRzXyA+Pj0gc2hpZnRfYW1vdW50OworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBNb2RpZmllcyAqdGhp
cyB0byAqdGhpcyBNT0QgKDJecG93ZXIpLgorICAgICAgICAvLyBSZXR1cm5zICp0aGlzIERJViAo
Ml5wb3dlcikuCisgICAgICAgIGludCBEaXZNb2RQb3dlck9mMihpbnQgcG93ZXIpIHsKKyAgICAg
ICAgICAgIGlmIChwb3dlciA+PSA2NCkgeworICAgICAgICAgICAgICAgIGludCByZXN1bHQgPSBz
dGF0aWNfY2FzdDxpbnQ+KGhpZ2hfYml0c18gPj4gKHBvd2VyIC0gNjQpKTsKKyAgICAgICAgICAg
ICAgICBoaWdoX2JpdHNfIC09IHN0YXRpY19jYXN0PHVpbnQ2NF90PihyZXN1bHQpIDw8IChwb3dl
ciAtIDY0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBwYXJ0X2xvdyA9IGxvd19iaXRzXyA+PiBw
b3dlcjsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBwYXJ0X2hpZ2ggPSBoaWdoX2JpdHNfIDw8
ICg2NCAtIHBvd2VyKTsKKyAgICAgICAgICAgICAgICBpbnQgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8
aW50PihwYXJ0X2xvdyArIHBhcnRfaGlnaCk7CisgICAgICAgICAgICAgICAgaGlnaF9iaXRzXyA9
IDA7CisgICAgICAgICAgICAgICAgbG93X2JpdHNfIC09IHBhcnRfbG93IDw8IHBvd2VyOworICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGJvb2wgSXNaZXJvKCkgY29uc3QgeworICAgICAgICAgICAgcmV0dXJu
IGhpZ2hfYml0c18gPT0gMCAmJiBsb3dfYml0c18gPT0gMDsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaW50IEJpdEF0KGludCBwb3NpdGlvbikgeworICAgICAgICAgICAgaWYgKHBvc2l0
aW9uID49IDY0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oaGln
aF9iaXRzXyA+PiAocG9zaXRpb24gLSA2NCkpICYgMTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obG93X2JpdHNfID4+IHBvc2l0
aW9uKSAmIDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0
ZToKKyAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGtNYXNrMzIgPSAweEZGRkZGRkZGOwor
ICAgICAgICAvLyBWYWx1ZSA9PSAoaGlnaF9iaXRzXyA8PCA2NCkgKyBsb3dfYml0c18KKyAgICAg
ICAgdWludDY0X3QgaGlnaF9iaXRzXzsKKyAgICAgICAgdWludDY0X3QgbG93X2JpdHNfOworICAg
IH07CisgICAgCisgICAgCisgICAgc3RhdGljIGNvbnN0IGludCBrRG91YmxlU2lnbmlmaWNhbmRT
aXplID0gNTM7ICAvLyBJbmNsdWRlcyB0aGUgaGlkZGVuIGJpdC4KKyAgICAKKyAgICAKKyAgICBz
dGF0aWMgdm9pZCBGaWxsRGlnaXRzMzJGaXhlZExlbmd0aCh1aW50MzJfdCBudW1iZXIsIGludCBy
ZXF1ZXN0ZWRfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFZlY3RvcjxjaGFyPiBidWZmZXIsIGludCogbGVuZ3RoKSB7CisgICAgICAgIGZvciAoaW50IGkg
PSByZXF1ZXN0ZWRfbGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgICAgIGJ1ZmZl
clsoKmxlbmd0aCkgKyBpXSA9ICcwJyArIG51bWJlciAlIDEwOworICAgICAgICAgICAgbnVtYmVy
IC89IDEwOworICAgICAgICB9CisgICAgICAgICpsZW5ndGggKz0gcmVxdWVzdGVkX2xlbmd0aDsK
KyAgICB9CisgICAgCisgICAgCisgICAgc3RhdGljIHZvaWQgRmlsbERpZ2l0czMyKHVpbnQzMl90
IG51bWJlciwgVmVjdG9yPGNoYXI+IGJ1ZmZlciwgaW50KiBsZW5ndGgpIHsKKyAgICAgICAgaW50
IG51bWJlcl9sZW5ndGggPSAwOworICAgICAgICAvLyBXZSBmaWxsIHRoZSBkaWdpdHMgaW4gcmV2
ZXJzZSBvcmRlciBhbmQgZXhjaGFuZ2UgdGhlbSBhZnRlcndhcmRzLgorICAgICAgICB3aGlsZSAo
bnVtYmVyICE9IDApIHsKKyAgICAgICAgICAgIGludCBkaWdpdCA9IG51bWJlciAlIDEwOworICAg
ICAgICAgICAgbnVtYmVyIC89IDEwOworICAgICAgICAgICAgYnVmZmVyWygqbGVuZ3RoKSArIG51
bWJlcl9sZW5ndGhdID0gJzAnICsgZGlnaXQ7CisgICAgICAgICAgICBudW1iZXJfbGVuZ3RoKys7
CisgICAgICAgIH0KKyAgICAgICAgLy8gRXhjaGFuZ2UgdGhlIGRpZ2l0cy4KKyAgICAgICAgaW50
IGkgPSAqbGVuZ3RoOworICAgICAgICBpbnQgaiA9ICpsZW5ndGggKyBudW1iZXJfbGVuZ3RoIC0g
MTsKKyAgICAgICAgd2hpbGUgKGkgPCBqKSB7CisgICAgICAgICAgICBjaGFyIHRtcCA9IGJ1ZmZl
cltpXTsKKyAgICAgICAgICAgIGJ1ZmZlcltpXSA9IGJ1ZmZlcltqXTsKKyAgICAgICAgICAgIGJ1
ZmZlcltqXSA9IHRtcDsKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIGotLTsKKyAgICAg
ICAgfQorICAgICAgICAqbGVuZ3RoICs9IG51bWJlcl9sZW5ndGg7CisgICAgfQorICAgIAorICAg
IAorICAgIHN0YXRpYyB2b2lkIEZpbGxEaWdpdHM2NEZpeGVkTGVuZ3RoKHVpbnQ2NF90IG51bWJl
ciwgaW50IHJlcXVlc3RlZF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlciwgaW50KiBsZW5ndGgpIHsKKyAgICAgICAgVU5V
U0VEX1BBUkFNKHJlcXVlc3RlZF9sZW5ndGgpOworICAgICAgICBjb25zdCB1aW50MzJfdCBrVGVu
NyA9IDEwMDAwMDAwOworICAgICAgICAvLyBGb3IgZWZmaWNpZW5jeSBjdXQgdGhlIG51bWJlciBp
bnRvIDMgdWludDMyX3QgcGFydHMsIGFuZCBwcmludCB0aG9zZS4KKyAgICAgICAgdWludDMyX3Qg
cGFydDIgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4obnVtYmVyICUga1RlbjcpOworICAgICAgICBu
dW1iZXIgLz0ga1Rlbjc7CisgICAgICAgIHVpbnQzMl90IHBhcnQxID0gc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KG51bWJlciAlIGtUZW43KTsKKyAgICAgICAgdWludDMyX3QgcGFydDAgPSBzdGF0aWNf
Y2FzdDx1aW50MzJfdD4obnVtYmVyIC8ga1RlbjcpOworICAgICAgICAKKyAgICAgICAgRmlsbERp
Z2l0czMyRml4ZWRMZW5ndGgocGFydDAsIDMsIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAgRmls
bERpZ2l0czMyRml4ZWRMZW5ndGgocGFydDEsIDcsIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAg
RmlsbERpZ2l0czMyRml4ZWRMZW5ndGgocGFydDIsIDcsIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICB9
CisgICAgCisgICAgCisgICAgc3RhdGljIHZvaWQgRmlsbERpZ2l0czY0KHVpbnQ2NF90IG51bWJl
ciwgVmVjdG9yPGNoYXI+IGJ1ZmZlciwgaW50KiBsZW5ndGgpIHsKKyAgICAgICAgY29uc3QgdWlu
dDMyX3Qga1RlbjcgPSAxMDAwMDAwMDsKKyAgICAgICAgLy8gRm9yIGVmZmljaWVuY3kgY3V0IHRo
ZSBudW1iZXIgaW50byAzIHVpbnQzMl90IHBhcnRzLCBhbmQgcHJpbnQgdGhvc2UuCisgICAgICAg
IHVpbnQzMl90IHBhcnQyID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG51bWJlciAlIGtUZW43KTsK
KyAgICAgICAgbnVtYmVyIC89IGtUZW43OworICAgICAgICB1aW50MzJfdCBwYXJ0MSA9IHN0YXRp
Y19jYXN0PHVpbnQzMl90PihudW1iZXIgJSBrVGVuNyk7CisgICAgICAgIHVpbnQzMl90IHBhcnQw
ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG51bWJlciAvIGtUZW43KTsKKyAgICAgICAgCisgICAg
ICAgIGlmIChwYXJ0MCAhPSAwKSB7CisgICAgICAgICAgICBGaWxsRGlnaXRzMzIocGFydDAsIGJ1
ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAgICAgIEZpbGxEaWdpdHMzMkZpeGVkTGVuZ3RoKHBhcnQx
LCA3LCBidWZmZXIsIGxlbmd0aCk7CisgICAgICAgICAgICBGaWxsRGlnaXRzMzJGaXhlZExlbmd0
aChwYXJ0MiwgNywgYnVmZmVyLCBsZW5ndGgpOworICAgICAgICB9IGVsc2UgaWYgKHBhcnQxICE9
IDApIHsKKyAgICAgICAgICAgIEZpbGxEaWdpdHMzMihwYXJ0MSwgYnVmZmVyLCBsZW5ndGgpOwor
ICAgICAgICAgICAgRmlsbERpZ2l0czMyRml4ZWRMZW5ndGgocGFydDIsIDcsIGJ1ZmZlciwgbGVu
Z3RoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEZpbGxEaWdpdHMzMihwYXJ0Miwg
YnVmZmVyLCBsZW5ndGgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIAorICAgIHN0YXRp
YyB2b2lkIFJvdW5kVXAoVmVjdG9yPGNoYXI+IGJ1ZmZlciwgaW50KiBsZW5ndGgsIGludCogZGVj
aW1hbF9wb2ludCkgeworICAgICAgICAvLyBBbiBlbXB0eSBidWZmZXIgcmVwcmVzZW50cyAwLgor
ICAgICAgICBpZiAoKmxlbmd0aCA9PSAwKSB7CisgICAgICAgICAgICBidWZmZXJbMF0gPSAnMSc7
CisgICAgICAgICAgICAqZGVjaW1hbF9wb2ludCA9IDE7CisgICAgICAgICAgICAqbGVuZ3RoID0g
MTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBSb3VuZCB0aGUg
bGFzdCBkaWdpdCB1bnRpbCB3ZSBlaXRoZXIgaGF2ZSBhIGRpZ2l0IHRoYXQgd2FzIG5vdCAnOScg
b3IgdW50aWwKKyAgICAgICAgLy8gd2UgcmVhY2hlZCB0aGUgZmlyc3QgZGlnaXQuCisgICAgICAg
IGJ1ZmZlclsoKmxlbmd0aCkgLSAxXSsrOworICAgICAgICBmb3IgKGludCBpID0gKCpsZW5ndGgp
IC0gMTsgaSA+IDA7IC0taSkgeworICAgICAgICAgICAgaWYgKGJ1ZmZlcltpXSAhPSAnMCcgKyAx
MCkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJ1ZmZlcltpXSA9ICcwJzsKKyAgICAgICAgICAgIGJ1ZmZlcltpIC0gMV0rKzsKKyAgICAgICAg
fQorICAgICAgICAvLyBJZiB0aGUgZmlyc3QgZGlnaXQgaXMgbm93ICcwJyArIDEwLCB3ZSB3b3Vs
ZCBuZWVkIHRvIHNldCBpdCB0byAnMCcgYW5kIGFkZAorICAgICAgICAvLyBhICcxJyBpbiBmcm9u
dC4gSG93ZXZlciB3ZSByZWFjaCB0aGUgZmlyc3QgZGlnaXQgb25seSBpZiBhbGwgZm9sbG93aW5n
CisgICAgICAgIC8vIGRpZ2l0cyBoYWQgYmVlbiAnOScgYmVmb3JlIHJvdW5kaW5nIHVwLiBOb3cg
YWxsIHRyYWlsaW5nIGRpZ2l0cyBhcmUgJzAnIGFuZAorICAgICAgICAvLyB3ZSBzaW1wbHkgc3dp
dGNoIHRoZSBmaXJzdCBkaWdpdCB0byAnMScgYW5kIHVwZGF0ZSB0aGUgZGVjaW1hbC1wb2ludAor
ICAgICAgICAvLyAoaW5kaWNhdGluZyB0aGF0IHRoZSBwb2ludCBpcyBub3cgb25lIGRpZ2l0IHRv
IHRoZSByaWdodCkuCisgICAgICAgIGlmIChidWZmZXJbMF0gPT0gJzAnICsgMTApIHsKKyAgICAg
ICAgICAgIGJ1ZmZlclswXSA9ICcxJzsKKyAgICAgICAgICAgICgqZGVjaW1hbF9wb2ludCkrKzsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBUaGUgZ2l2ZW4gZnJhY3Rpb25h
bHMgbnVtYmVyIHJlcHJlc2VudHMgYSBmaXhlZC1wb2ludCBudW1iZXIgd2l0aCBiaW5hcnkKKyAg
ICAvLyBwb2ludCBhdCBiaXQgKC1leHBvbmVudCkuCisgICAgLy8gUHJlY29uZGl0aW9uczoKKyAg
ICAvLyAgIC0xMjggPD0gZXhwb25lbnQgPD0gMC4KKyAgICAvLyAgIDAgPD0gZnJhY3Rpb25hbHMg
KiAyXmV4cG9uZW50IDwgMQorICAgIC8vICAgVGhlIGJ1ZmZlciBob2xkcyB0aGUgcmVzdWx0Lgor
ICAgIC8vIFRoZSBmdW5jdGlvbiB3aWxsIHJvdW5kIGl0cyByZXN1bHQuIER1cmluZyB0aGUgcm91
bmRpbmctcHJvY2VzcyBkaWdpdHMgbm90CisgICAgLy8gZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rp
b24gbWlnaHQgYmUgdXBkYXRlZCwgYW5kIHRoZSBkZWNpbWFsLXBvaW50IHZhcmlhYmxlCisgICAg
Ly8gbWlnaHQgYmUgdXBkYXRlZC4gSWYgdGhpcyBmdW5jdGlvbiBnZW5lcmF0ZXMgdGhlIGRpZ2l0
cyA5OSBhbmQgdGhlIGJ1ZmZlcgorICAgIC8vIGFscmVhZHkgY29udGFpbmVkICIxOTkiICh0aHVz
IHlpZWxkaW5nIGEgYnVmZmVyIG9mICIxOTk5OSIpIHRoZW4gYQorICAgIC8vIHJvdW5kaW5nLXVw
IHdpbGwgY2hhbmdlIHRoZSBjb250ZW50cyBvZiB0aGUgYnVmZmVyIHRvICIyMDAwMCIuCisgICAg
c3RhdGljIHZvaWQgRmlsbEZyYWN0aW9uYWxzKHVpbnQ2NF90IGZyYWN0aW9uYWxzLCBpbnQgZXhw
b25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmcmFjdGlvbmFsX2Nv
dW50LCBWZWN0b3I8Y2hhcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQqIGxlbmd0aCwgaW50KiBkZWNpbWFsX3BvaW50KSB7CisgICAgICAgIEFTU0VSVCgtMTI4
IDw9IGV4cG9uZW50ICYmIGV4cG9uZW50IDw9IDApOworICAgICAgICAvLyAnZnJhY3Rpb25hbHMn
IGlzIGEgZml4ZWQtcG9pbnQgbnVtYmVyLCB3aXRoIGJpbmFyeSBwb2ludCBhdCBiaXQKKyAgICAg
ICAgLy8gKC1leHBvbmVudCkuIEluc2lkZSB0aGUgZnVuY3Rpb24gdGhlIG5vbi1jb252ZXJ0ZWQg
cmVtYWluZGVyIG9mIGZyYWN0aW9uYWxzCisgICAgICAgIC8vIGlzIGEgZml4ZWQtcG9pbnQgbnVt
YmVyLCB3aXRoIGJpbmFyeSBwb2ludCBhdCBiaXQgJ3BvaW50Jy4KKyAgICAgICAgaWYgKC1leHBv
bmVudCA8PSA2NCkgeworICAgICAgICAgICAgLy8gT25lIDY0IGJpdCBudW1iZXIgaXMgc3VmZmlj
aWVudC4KKyAgICAgICAgICAgIEFTU0VSVChmcmFjdGlvbmFscyA+PiA1NiA9PSAwKTsKKyAgICAg
ICAgICAgIGludCBwb2ludCA9IC1leHBvbmVudDsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgZnJhY3Rpb25hbF9jb3VudDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZyYWN0
aW9uYWxzID09IDApIGJyZWFrOworICAgICAgICAgICAgICAgIC8vIEluc3RlYWQgb2YgbXVsdGlw
bHlpbmcgYnkgMTAgd2UgbXVsdGlwbHkgYnkgNSBhbmQgYWRqdXN0IHRoZSBwb2ludAorICAgICAg
ICAgICAgICAgIC8vIGxvY2F0aW9uLiBUaGlzIHdheSB0aGUgZnJhY3Rpb25hbHMgdmFyaWFibGUg
d2lsbCBub3Qgb3ZlcmZsb3cuCisgICAgICAgICAgICAgICAgLy8gSW52YXJpYW50IGF0IHRoZSBi
ZWdpbm5pbmcgb2YgdGhlIGxvb3A6IGZyYWN0aW9uYWxzIDwgMl5wb2ludC4KKyAgICAgICAgICAg
ICAgICAvLyBJbml0aWFsbHkgd2UgaGF2ZTogcG9pbnQgPD0gNjQgYW5kIGZyYWN0aW9uYWxzIDwg
Ml41NgorICAgICAgICAgICAgICAgIC8vIEFmdGVyIGVhY2ggaXRlcmF0aW9uIHRoZSBwb2ludCBp
cyBkZWNyZW1lbnRlZCBieSBvbmUuCisgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IDVeMyA9
IDEyNSA8IDEyOCA9IDJeNy4KKyAgICAgICAgICAgICAgICAvLyBUaGVyZWZvcmUgdGhyZWUgaXRl
cmF0aW9ucyBvZiB0aGlzIGxvb3Agd2lsbCBub3Qgb3ZlcmZsb3cgZnJhY3Rpb25hbHMKKyAgICAg
ICAgICAgICAgICAvLyAoZXZlbiB3aXRob3V0IHRoZSBzdWJ0cmFjdGlvbiBhdCB0aGUgZW5kIG9m
IHRoZSBsb29wIGJvZHkpLiBBdCB0aGlzCisgICAgICAgICAgICAgICAgLy8gdGltZSBwb2ludCB3
aWxsIHNhdGlzZnkgcG9pbnQgPD0gNjEgYW5kIHRoZXJlZm9yZSBmcmFjdGlvbmFscyA8IDJecG9p
bnQKKyAgICAgICAgICAgICAgICAvLyBhbmQgYW55IGZ1cnRoZXIgbXVsdGlwbGljYXRpb24gb2Yg
ZnJhY3Rpb25hbHMgYnkgNSB3aWxsIG5vdCBvdmVyZmxvdy4KKyAgICAgICAgICAgICAgICBmcmFj
dGlvbmFscyAqPSA1OworICAgICAgICAgICAgICAgIHBvaW50LS07CisgICAgICAgICAgICAgICAg
aW50IGRpZ2l0ID0gc3RhdGljX2Nhc3Q8aW50PihmcmFjdGlvbmFscyA+PiBwb2ludCk7CisgICAg
ICAgICAgICAgICAgYnVmZmVyWypsZW5ndGhdID0gJzAnICsgZGlnaXQ7CisgICAgICAgICAgICAg
ICAgKCpsZW5ndGgpKys7CisgICAgICAgICAgICAgICAgZnJhY3Rpb25hbHMgLT0gc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KGRpZ2l0KSA8PCBwb2ludDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IC8vIElmIHRoZSBmaXJzdCBiaXQgYWZ0ZXIgdGhlIHBvaW50IGlzIHNldCB3ZSBoYXZlIHRvIHJv
dW5kIHVwLgorICAgICAgICAgICAgaWYgKCgoZnJhY3Rpb25hbHMgPj4gKHBvaW50IC0gMSkpICYg
MSkgPT0gMSkgeworICAgICAgICAgICAgICAgIFJvdW5kVXAoYnVmZmVyLCBsZW5ndGgsIGRlY2lt
YWxfcG9pbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeyAgLy8gV2UgbmVlZCAx
MjggYml0cy4KKyAgICAgICAgICAgIEFTU0VSVCg2NCA8IC1leHBvbmVudCAmJiAtZXhwb25lbnQg
PD0gMTI4KTsKKyAgICAgICAgICAgIFVJbnQxMjggZnJhY3Rpb25hbHMxMjggPSBVSW50MTI4KGZy
YWN0aW9uYWxzLCAwKTsKKyAgICAgICAgICAgIGZyYWN0aW9uYWxzMTI4LlNoaWZ0KC1leHBvbmVu
dCAtIDY0KTsKKyAgICAgICAgICAgIGludCBwb2ludCA9IDEyODsKKyAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgZnJhY3Rpb25hbF9jb3VudDsgKytpKSB7CisgICAgICAgICAgICAgICAg
aWYgKGZyYWN0aW9uYWxzMTI4LklzWmVybygpKSBicmVhazsKKyAgICAgICAgICAgICAgICAvLyBB
cyBiZWZvcmU6IGluc3RlYWQgb2YgbXVsdGlwbHlpbmcgYnkgMTAgd2UgbXVsdGlwbHkgYnkgNSBh
bmQgYWRqdXN0IHRoZQorICAgICAgICAgICAgICAgIC8vIHBvaW50IGxvY2F0aW9uLgorICAgICAg
ICAgICAgICAgIC8vIFRoaXMgbXVsdGlwbGljYXRpb24gd2lsbCBub3Qgb3ZlcmZsb3cgZm9yIHRo
ZSBzYW1lIHJlYXNvbnMgYXMgYmVmb3JlLgorICAgICAgICAgICAgICAgIGZyYWN0aW9uYWxzMTI4
Lk11bHRpcGx5KDUpOworICAgICAgICAgICAgICAgIHBvaW50LS07CisgICAgICAgICAgICAgICAg
aW50IGRpZ2l0ID0gZnJhY3Rpb25hbHMxMjguRGl2TW9kUG93ZXJPZjIocG9pbnQpOworICAgICAg
ICAgICAgICAgIGJ1ZmZlclsqbGVuZ3RoXSA9ICcwJyArIGRpZ2l0OworICAgICAgICAgICAgICAg
ICgqbGVuZ3RoKSsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZyYWN0aW9uYWxz
MTI4LkJpdEF0KHBvaW50IC0gMSkgPT0gMSkgeworICAgICAgICAgICAgICAgIFJvdW5kVXAoYnVm
ZmVyLCBsZW5ndGgsIGRlY2ltYWxfcG9pbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIAorICAgIC8vIFJlbW92ZXMgbGVhZGluZyBhbmQgdHJhaWxpbmcgemVy
b3MuCisgICAgLy8gSWYgbGVhZGluZyB6ZXJvcyBhcmUgcmVtb3ZlZCB0aGVuIHRoZSBkZWNpbWFs
IHBvaW50IHBvc2l0aW9uIGlzIGFkanVzdGVkLgorICAgIHN0YXRpYyB2b2lkIFRyaW1aZXJvcyhW
ZWN0b3I8Y2hhcj4gYnVmZmVyLCBpbnQqIGxlbmd0aCwgaW50KiBkZWNpbWFsX3BvaW50KSB7Cisg
ICAgICAgIHdoaWxlICgqbGVuZ3RoID4gMCAmJiBidWZmZXJbKCpsZW5ndGgpIC0gMV0gPT0gJzAn
KSB7CisgICAgICAgICAgICAoKmxlbmd0aCktLTsKKyAgICAgICAgfQorICAgICAgICBpbnQgZmly
c3Rfbm9uX3plcm8gPSAwOworICAgICAgICB3aGlsZSAoZmlyc3Rfbm9uX3plcm8gPCAqbGVuZ3Ro
ICYmIGJ1ZmZlcltmaXJzdF9ub25femVyb10gPT0gJzAnKSB7CisgICAgICAgICAgICBmaXJzdF9u
b25femVybysrOworICAgICAgICB9CisgICAgICAgIGlmIChmaXJzdF9ub25femVybyAhPSAwKSB7
CisgICAgICAgICAgICBmb3IgKGludCBpID0gZmlyc3Rfbm9uX3plcm87IGkgPCAqbGVuZ3RoOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSAtIGZpcnN0X25vbl96ZXJvXSA9IGJ1ZmZl
cltpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICpsZW5ndGggLT0gZmlyc3Rfbm9uX3pl
cm87CisgICAgICAgICAgICAqZGVjaW1hbF9wb2ludCAtPSBmaXJzdF9ub25femVybzsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICBib29sIEZhc3RGaXhlZER0b2EoZG91YmxlIHYs
CisgICAgICAgICAgICAgICAgICAgICAgIGludCBmcmFjdGlvbmFsX2NvdW50LAorICAgICAgICAg
ICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAg
ICBpbnQqIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50KiBkZWNpbWFsX3BvaW50
KSB7CisgICAgICAgIGNvbnN0IHVpbnQzMl90IGtNYXhVSW50MzIgPSAweEZGRkZGRkZGOworICAg
ICAgICB1aW50NjRfdCBzaWduaWZpY2FuZCA9IERvdWJsZSh2KS5TaWduaWZpY2FuZCgpOworICAg
ICAgICBpbnQgZXhwb25lbnQgPSBEb3VibGUodikuRXhwb25lbnQoKTsKKyAgICAgICAgLy8gdiA9
IHNpZ25pZmljYW5kICogMl5leHBvbmVudCAod2l0aCBzaWduaWZpY2FuZCBhIDUzYml0IGludGVn
ZXIpLgorICAgICAgICAvLyBJZiB0aGUgZXhwb25lbnQgaXMgbGFyZ2VyIHRoYW4gMjAgKGkuZS4g
d2UgbWF5IGhhdmUgYSA3M2JpdCBudW1iZXIpIHRoZW4gd2UKKyAgICAgICAgLy8gZG9uJ3Qga25v
dyBob3cgdG8gY29tcHV0ZSB0aGUgcmVwcmVzZW50YXRpb24uIDJeNzMgfj0gOS41KjEwXjIxLgor
ICAgICAgICAvLyBJZiBuZWNlc3NhcnkgdGhpcyBsaW1pdCBjb3VsZCBwcm9iYWJseSBiZSBpbmNy
ZWFzZWQsIGJ1dCB3ZSBkb24ndCBuZWVkCisgICAgICAgIC8vIG1vcmUuCisgICAgICAgIGlmIChl
eHBvbmVudCA+IDIwKSByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChmcmFjdGlvbmFsX2NvdW50
ID4gMjApIHJldHVybiBmYWxzZTsKKyAgICAgICAgKmxlbmd0aCA9IDA7CisgICAgICAgIC8vIEF0
IG1vc3Qga0RvdWJsZVNpZ25pZmljYW5kU2l6ZSBiaXRzIG9mIHRoZSBzaWduaWZpY2FuZCBhcmUg
bm9uLXplcm8uCisgICAgICAgIC8vIEdpdmVuIGEgNjQgYml0IGludGVnZXIgd2UgaGF2ZSAxMSAw
cyBmb2xsb3dlZCBieSA1MyBwb3RlbnRpYWxseSBub24temVybworICAgICAgICAvLyBiaXRzOiAg
MC4uMTEqLi4weHh4Li41MyouLnh4CisgICAgICAgIGlmIChleHBvbmVudCArIGtEb3VibGVTaWdu
aWZpY2FuZFNpemUgPiA2NCkgeworICAgICAgICAgICAgLy8gVGhlIGV4cG9uZW50IG11c3QgYmUg
PiAxMS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBXZSBrbm93IHRoYXQgdiA9IHNp
Z25pZmljYW5kICogMl5leHBvbmVudC4KKyAgICAgICAgICAgIC8vIEFuZCB0aGUgZXhwb25lbnQg
PiAxMS4KKyAgICAgICAgICAgIC8vIFdlIHNpbXBsaWZ5IHRoZSB0YXNrIGJ5IGRpdmlkaW5nIHYg
YnkgMTBeMTcuCisgICAgICAgICAgICAvLyBUaGUgcXVvdGllbnQgZGVsaXZlcnMgdGhlIGZpcnN0
IGRpZ2l0cywgYW5kIHRoZSByZW1haW5kZXIgZml0cyBpbnRvIGEgNjQKKyAgICAgICAgICAgIC8v
IGJpdCBudW1iZXIuCisgICAgICAgICAgICAvLyBEaXZpZGluZyBieSAxMF4xNyBpcyBlcXVpdmFs
ZW50IHRvIGRpdmlkaW5nIGJ5IDVeMTcqMl4xNy4KKyAgICAgICAgICAgIGNvbnN0IHVpbnQ2NF90
IGtGaXZlMTcgPSBVSU5UNjRfMlBBUlRfQygweEIxLCBBMkJDMkVDNSk7ICAvLyA1XjE3CisgICAg
ICAgICAgICB1aW50NjRfdCBkaXZpc29yID0ga0ZpdmUxNzsKKyAgICAgICAgICAgIGludCBkaXZp
c29yX3Bvd2VyID0gMTc7CisgICAgICAgICAgICB1aW50NjRfdCBkaXZpZGVuZCA9IHNpZ25pZmlj
YW5kOworICAgICAgICAgICAgdWludDMyX3QgcXVvdGllbnQ7CisgICAgICAgICAgICB1aW50NjRf
dCByZW1haW5kZXI7CisgICAgICAgICAgICAvLyBMZXQgdiA9IGYgKiAyXmUgd2l0aCBmID09IHNp
Z25pZmljYW5kIGFuZCBlID09IGV4cG9uZW50LgorICAgICAgICAgICAgLy8gVGhlbiBuZWVkIHEg
KHF1b3RpZW50KSBhbmQgciAocmVtYWluZGVyKSBhcyBmb2xsb3dzOgorICAgICAgICAgICAgLy8g
ICB2ICAgICAgICAgICAgPSBxICogMTBeMTcgICAgICAgKyByCisgICAgICAgICAgICAvLyAgIGYg
KiAyXmUgICAgICA9IHEgKiAxMF4xNyAgICAgICArIHIKKyAgICAgICAgICAgIC8vICAgZiAqIDJe
ZSAgICAgID0gcSAqIDVeMTcgKiAyXjE3ICsgcgorICAgICAgICAgICAgLy8gSWYgZSA+IDE3IHRo
ZW4KKyAgICAgICAgICAgIC8vICAgZiAqIDJeKGUtMTcpID0gcSAqIDVeMTcgICAgICAgICsgci8y
XjE3CisgICAgICAgICAgICAvLyBlbHNlCisgICAgICAgICAgICAvLyAgIGYgID0gcSAqIDVeMTcg
KiAyXigxNy1lKSArIHIvMl5lCisgICAgICAgICAgICBpZiAoZXhwb25lbnQgPiBkaXZpc29yX3Bv
d2VyKSB7CisgICAgICAgICAgICAgICAgLy8gV2Ugb25seSBhbGxvdyBleHBvbmVudHMgb2YgdXAg
dG8gMjAgYW5kIHRoZXJlZm9yZSAoMTcgLSBlKSA8PSAzCisgICAgICAgICAgICAgICAgZGl2aWRl
bmQgPDw9IGV4cG9uZW50IC0gZGl2aXNvcl9wb3dlcjsKKyAgICAgICAgICAgICAgICBxdW90aWVu
dCA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihkaXZpZGVuZCAvIGRpdmlzb3IpOworICAgICAgICAg
ICAgICAgIHJlbWFpbmRlciA9IChkaXZpZGVuZCAlIGRpdmlzb3IpIDw8IGRpdmlzb3JfcG93ZXI7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRpdmlzb3IgPDw9IGRpdmlz
b3JfcG93ZXIgLSBleHBvbmVudDsKKyAgICAgICAgICAgICAgICBxdW90aWVudCA9IHN0YXRpY19j
YXN0PHVpbnQzMl90PihkaXZpZGVuZCAvIGRpdmlzb3IpOworICAgICAgICAgICAgICAgIHJlbWFp
bmRlciA9IChkaXZpZGVuZCAlIGRpdmlzb3IpIDw8IGV4cG9uZW50OworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgRmlsbERpZ2l0czMyKHF1b3RpZW50LCBidWZmZXIsIGxlbmd0aCk7CisgICAg
ICAgICAgICBGaWxsRGlnaXRzNjRGaXhlZExlbmd0aChyZW1haW5kZXIsIGRpdmlzb3JfcG93ZXIs
IGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAgICAgICpkZWNpbWFsX3BvaW50ID0gKmxlbmd0aDsK
KyAgICAgICAgfSBlbHNlIGlmIChleHBvbmVudCA+PSAwKSB7CisgICAgICAgICAgICAvLyAwIDw9
IGV4cG9uZW50IDw9IDExCisgICAgICAgICAgICBzaWduaWZpY2FuZCA8PD0gZXhwb25lbnQ7Cisg
ICAgICAgICAgICBGaWxsRGlnaXRzNjQoc2lnbmlmaWNhbmQsIGJ1ZmZlciwgbGVuZ3RoKTsKKyAg
ICAgICAgICAgICpkZWNpbWFsX3BvaW50ID0gKmxlbmd0aDsKKyAgICAgICAgfSBlbHNlIGlmIChl
eHBvbmVudCA+IC1rRG91YmxlU2lnbmlmaWNhbmRTaXplKSB7CisgICAgICAgICAgICAvLyBXZSBo
YXZlIHRvIGN1dCB0aGUgbnVtYmVyLgorICAgICAgICAgICAgdWludDY0X3QgaW50ZWdyYWxzID0g
c2lnbmlmaWNhbmQgPj4gLWV4cG9uZW50OworICAgICAgICAgICAgdWludDY0X3QgZnJhY3Rpb25h
bHMgPSBzaWduaWZpY2FuZCAtIChpbnRlZ3JhbHMgPDwgLWV4cG9uZW50KTsKKyAgICAgICAgICAg
IGlmIChpbnRlZ3JhbHMgPiBrTWF4VUludDMyKSB7CisgICAgICAgICAgICAgICAgRmlsbERpZ2l0
czY0KGludGVncmFscywgYnVmZmVyLCBsZW5ndGgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBGaWxsRGlnaXRzMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGludGVncmFs
cyksIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICpkZWNpbWFs
X3BvaW50ID0gKmxlbmd0aDsKKyAgICAgICAgICAgIEZpbGxGcmFjdGlvbmFscyhmcmFjdGlvbmFs
cywgZXhwb25lbnQsIGZyYWN0aW9uYWxfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnVmZmVyLCBsZW5ndGgsIGRlY2ltYWxfcG9pbnQpOworICAgICAgICB9IGVsc2UgaWYgKGV4
cG9uZW50IDwgLTEyOCkgeworICAgICAgICAgICAgLy8gVGhpcyBjb25maWd1cmF0aW9uICh3aXRo
IGF0IG1vc3QgMjAgZGlnaXRzKSBtZWFucyB0aGF0IGFsbCBkaWdpdHMgbXVzdCBiZQorICAgICAg
ICAgICAgLy8gMC4KKyAgICAgICAgICAgIEFTU0VSVChmcmFjdGlvbmFsX2NvdW50IDw9IDIwKTsK
KyAgICAgICAgICAgIGJ1ZmZlclswXSA9ICdcMCc7CisgICAgICAgICAgICAqbGVuZ3RoID0gMDsK
KyAgICAgICAgICAgICpkZWNpbWFsX3BvaW50ID0gLWZyYWN0aW9uYWxfY291bnQ7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAqZGVjaW1hbF9wb2ludCA9IDA7CisgICAgICAgICAgICBG
aWxsRnJhY3Rpb25hbHMoc2lnbmlmaWNhbmQsIGV4cG9uZW50LCBmcmFjdGlvbmFsX2NvdW50LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgbGVuZ3RoLCBkZWNpbWFsX3BvaW50
KTsKKyAgICAgICAgfQorICAgICAgICBUcmltWmVyb3MoYnVmZmVyLCBsZW5ndGgsIGRlY2ltYWxf
cG9pbnQpOworICAgICAgICBidWZmZXJbKmxlbmd0aF0gPSAnXDAnOworICAgICAgICBpZiAoKCps
ZW5ndGgpID09IDApIHsKKyAgICAgICAgICAgIC8vIFRoZSBzdHJpbmcgaXMgZW1wdHkgYW5kIHRo
ZSBkZWNpbWFsX3BvaW50IHRodXMgaGFzIG5vIGltcG9ydGFuY2UuIE1pbWljaworICAgICAgICAg
ICAgLy8gR2F5J3MgZHRvYSBhbmQgYW5kIHNldCBpdCB0byAtZnJhY3Rpb25hbF9jb3VudC4KKyAg
ICAgICAgICAgICpkZWNpbWFsX3BvaW50ID0gLWZyYWN0aW9uYWxfY291bnQ7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorfSAgLy8gbmFtZXNwYWNlIGRvdWJs
ZV9jb252ZXJzaW9uCisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9kdG9hL2ZpeGVkLWR0b2EuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvZHRvYS9maXhlZC1kdG9hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGMwYWRiNzU4YjM3Nzk3YzUyN2I5
MWY1MjYxOTI2NDU5ZDkzNjdiZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvZHRvYS9maXhlZC1kdG9hLmgKQEAgLTAsMCArMSw2MCBAQAorLy8gQ29weXJpZ2h0
IDIwMTAgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorLy8gbWV0OgorLy8KKy8vICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisv
LyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisvLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworLy8gICAgICAgZGlzY2xhaW1lciBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisvLyAg
ICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisvLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisvLyAgICAgICBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKy8vICAg
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisvLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisvLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisvLyBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKy8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorLy8gKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisv
LyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorCisjaWZuZGVmIERPVUJMRV9DT05WRVJTSU9OX0ZJWEVEX0RUT0FfSF8K
KyNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05fRklYRURfRFRPQV9IXworCisjaW5jbHVkZSAidXRp
bHMuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK25hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7
CisgICAgCisgICAgLy8gUHJvZHVjZXMgZGlnaXRzIG5lY2Vzc2FyeSB0byBwcmludCBhIGdpdmVu
IG51bWJlciB3aXRoCisgICAgLy8gJ2ZyYWN0aW9uYWxfY291bnQnIGRpZ2l0cyBhZnRlciB0aGUg
ZGVjaW1hbCBwb2ludC4KKyAgICAvLyBUaGUgYnVmZmVyIG11c3QgYmUgYmlnIGVub3VnaCB0byBo
b2xkIHRoZSByZXN1bHQgcGx1cyBvbmUgdGVybWluYXRpbmcgbnVsbAorICAgIC8vIGNoYXJhY3Rl
ci4KKyAgICAvLworICAgIC8vIFRoZSBwcm9kdWNlZCBkaWdpdHMgbWlnaHQgYmUgdG9vIHNob3J0
IGluIHdoaWNoIGNhc2UgdGhlIGNhbGxlciBoYXMgdG8gZmlsbAorICAgIC8vIHRoZSBnYXBzIHdp
dGggJzAncy4KKyAgICAvLyBFeGFtcGxlOiBGYXN0Rml4ZWREdG9hKDAuMDAxLCA1LCAuLi4pIGlz
IGFsbG93ZWQgdG8gcmV0dXJuIGJ1ZmZlciA9ICIxIiwgYW5kCisgICAgLy8gZGVjaW1hbF9wb2lu
dCA9IC0yLgorICAgIC8vIEhhbGZ3YXkgY2FzZXMgYXJlIHJvdW5kZWQgdG93YXJkcyArLy1JbmZp
bml0eSAoYXdheSBmcm9tIDApLiBUaGUgY2FsbAorICAgIC8vIEZhc3RGaXhlZER0b2EoMC4xNSwg
MiwgLi4uKSB0aHVzIHJldHVybnMgYnVmZmVyID0gIjIiLCBkZWNpbWFsX3BvaW50ID0gMC4KKyAg
ICAvLyBUaGUgcmV0dXJuZWQgYnVmZmVyIG1heSBjb250YWluIGRpZ2l0cyB0aGF0IHdvdWxkIGJl
IHRydW5jYXRlZCBmcm9tIHRoZQorICAgIC8vIHNob3J0ZXN0IHJlcHJlc2VudGF0aW9uIG9mIHRo
ZSBpbnB1dC4KKyAgICAvLworICAgIC8vIFRoaXMgbWV0aG9kIG9ubHkgd29ya3MgZm9yIHNvbWUg
cGFyYW1ldGVycy4gSWYgaXQgY2FuJ3QgaGFuZGxlIHRoZSBpbnB1dCBpdAorICAgIC8vIHJldHVy
bnMgZmFsc2UuIFRoZSBvdXRwdXQgaXMgbnVsbC10ZXJtaW5hdGVkIHdoZW4gdGhlIGZ1bmN0aW9u
IHN1Y2NlZWRzLgorICAgIGJvb2wgRmFzdEZpeGVkRHRvYShkb3VibGUgdiwgaW50IGZyYWN0aW9u
YWxfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXIsIGlu
dCogbGVuZ3RoLCBpbnQqIGRlY2ltYWxfcG9pbnQpOworICAgIAorfSAgLy8gbmFtZXNwYWNlIGRv
dWJsZV9jb252ZXJzaW9uCisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgIC8vIERPVUJM
RV9DT05WRVJTSU9OX0ZJWEVEX0RUT0FfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvZHRvYS9zdHJ0b2QuY2MgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2Ev
c3RydG9kLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBkNDNkNjlmYTcyZjJkZDZlYzZjZTdiOTQ0MzU2YTEyOWQy
N2M1MzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL2R0b2Ev
c3RydG9kLmNjCkBAIC0wLDAgKzEsNDQ1IEBACisvLyBDb3B5cmlnaHQgMjAxMCB0aGUgVjggcHJv
amVjdCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisvLyBtZXQ6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8v
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKy8vICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nCisvLyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKy8vICAgICAgIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorLy8gICAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8v
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKy8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisvLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKy8vIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisvLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKy8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLy8gREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisvLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisvLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKy8vIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
KyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2luY2x1ZGUgInN0
cnRvZC5oIgorI2luY2x1ZGUgImJpZ251bS5oIgorI2luY2x1ZGUgImNhY2hlZC1wb3dlcnMuaCIK
KyNpbmNsdWRlICJkb3VibGUuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK25hbWVzcGFjZSBkb3Vi
bGVfY29udmVyc2lvbiB7CisgICAgCisgICAgLy8gMl41MyA9IDkwMDcxOTkyNTQ3NDA5OTIuCisg
ICAgLy8gQW55IGludGVnZXIgd2l0aCBhdCBtb3N0IDE1IGRlY2ltYWwgZGlnaXRzIHdpbGwgaGVu
Y2UgZml0IGludG8gYSBkb3VibGUKKyAgICAvLyAod2hpY2ggaGFzIGEgNTNiaXQgc2lnbmlmaWNh
bmQpIHdpdGhvdXQgbG9zcyBvZiBwcmVjaXNpb24uCisgICAgc3RhdGljIGNvbnN0IGludCBrTWF4
RXhhY3REb3VibGVJbnRlZ2VyRGVjaW1hbERpZ2l0cyA9IDE1OworICAgIC8vIDJeNjQgPSAxODQ0
Njc0NDA3MzcwOTU1MTYxNiA+IDEwXjE5CisgICAgc3RhdGljIGNvbnN0IGludCBrTWF4VWludDY0
RGVjaW1hbERpZ2l0cyA9IDE5OworICAgIAorICAgIC8vIE1heCBkb3VibGU6IDEuNzk3NjkzMTM0
ODYyMzE1NyB4IDEwXjMwOAorICAgIC8vIE1pbiBub24temVybyBkb3VibGU6IDQuOTQwNjU2NDU4
NDEyNDY1NCB4IDEwXi0zMjQKKyAgICAvLyBBbnkgeCA+PSAxMF4zMDkgaXMgaW50ZXJwcmV0ZWQg
YXMgK2luZmluaXR5LgorICAgIC8vIEFueSB4IDw9IDEwXi0zMjQgaXMgaW50ZXJwcmV0ZWQgYXMg
MC4KKyAgICAvLyBOb3RlIHRoYXQgMi41ZS0zMjQgKGRlc3BpdGUgYmVpbmcgc21hbGxlciB0aGFu
IHRoZSBtaW4gZG91YmxlKSB3aWxsIGJlIHJlYWQKKyAgICAvLyBhcyBub24temVybyAoZXF1YWwg
dG8gdGhlIG1pbiBub24temVybyBkb3VibGUpLgorICAgIHN0YXRpYyBjb25zdCBpbnQga01heERl
Y2ltYWxQb3dlciA9IDMwOTsKKyAgICBzdGF0aWMgY29uc3QgaW50IGtNaW5EZWNpbWFsUG93ZXIg
PSAtMzI0OworICAgIAorICAgIC8vIDJeNjQgPSAxODQ0Njc0NDA3MzcwOTU1MTYxNgorICAgIHN0
YXRpYyBjb25zdCB1aW50NjRfdCBrTWF4VWludDY0ID0gVUlOVDY0XzJQQVJUX0MoMHhGRkZGRkZG
RiwgRkZGRkZGRkYpOworICAgIAorICAgIAorICAgIHN0YXRpYyBjb25zdCBkb3VibGUgZXhhY3Rf
cG93ZXJzX29mX3RlbltdID0geworICAgICAgICAxLjAsICAvLyAxMF4wCisgICAgICAgIDEwLjAs
CisgICAgICAgIDEwMC4wLAorICAgICAgICAxMDAwLjAsCisgICAgICAgIDEwMDAwLjAsCisgICAg
ICAgIDEwMDAwMC4wLAorICAgICAgICAxMDAwMDAwLjAsCisgICAgICAgIDEwMDAwMDAwLjAsCisg
ICAgICAgIDEwMDAwMDAwMC4wLAorICAgICAgICAxMDAwMDAwMDAwLjAsCisgICAgICAgIDEwMDAw
MDAwMDAwLjAsICAvLyAxMF4xMAorICAgICAgICAxMDAwMDAwMDAwMDAuMCwKKyAgICAgICAgMTAw
MDAwMDAwMDAwMC4wLAorICAgICAgICAxMDAwMDAwMDAwMDAwMC4wLAorICAgICAgICAxMDAwMDAw
MDAwMDAwMDAuMCwKKyAgICAgICAgMTAwMDAwMDAwMDAwMDAwMC4wLAorICAgICAgICAxMDAwMDAw
MDAwMDAwMDAwMC4wLAorICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAuMCwKKyAgICAgICAgMTAw
MDAwMDAwMDAwMDAwMDAwMC4wLAorICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMC4wLAorICAg
ICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAuMCwgIC8vIDEwXjIwCisgICAgICAgIDEwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuMCwKKyAgICAgICAgLy8gMTBeMjIgPSAweDIxZTE5ZTBjOWJhYjI0MDAw
MDAgPSAweDg3ODY3ODMyNmVhYzkgKiAyXjIyCisgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLjAKKyAgICB9OworICAgIHN0YXRpYyBjb25zdCBpbnQga0V4YWN0UG93ZXJzT2ZUZW5TaXpl
ID0gQVJSQVlfU0laRShleGFjdF9wb3dlcnNfb2ZfdGVuKTsKKyAgICAKKyAgICAvLyBNYXhpbXVt
IG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgaW4gdGhlIGRlY2ltYWwgcmVwcmVzZW50YXRp
b24uCisgICAgLy8gSW4gZmFjdCB0aGUgdmFsdWUgaXMgNzcyIChzZWUgY29udmVyc2lvbnMuY2Mp
LCBidXQgdG8gZ2l2ZSB1cyBzb21lIG1hcmdpbgorICAgIC8vIHdlIHJvdW5kIHVwIHRvIDc4MC4K
KyAgICBzdGF0aWMgY29uc3QgaW50IGtNYXhTaWduaWZpY2FudERlY2ltYWxEaWdpdHMgPSA3ODA7
CisgICAgCisgICAgc3RhdGljIFZlY3Rvcjxjb25zdCBjaGFyPiBUcmltTGVhZGluZ1plcm9zKFZl
Y3Rvcjxjb25zdCBjaGFyPiBidWZmZXIpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBi
dWZmZXIubGVuZ3RoKCk7IGkrKykgeworICAgICAgICAgICAgaWYgKGJ1ZmZlcltpXSAhPSAnMCcp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyLlN1YlZlY3RvcihpLCBidWZmZXIubGVu
Z3RoKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBWZWN0b3I8
Y29uc3QgY2hhcj4oYnVmZmVyLnN0YXJ0KCksIDApOworICAgIH0KKyAgICAKKyAgICAKKyAgICBz
dGF0aWMgVmVjdG9yPGNvbnN0IGNoYXI+IFRyaW1UcmFpbGluZ1plcm9zKFZlY3Rvcjxjb25zdCBj
aGFyPiBidWZmZXIpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IGJ1ZmZlci5sZW5ndGgoKSAtIDE7
IGkgPj0gMDsgLS1pKSB7CisgICAgICAgICAgICBpZiAoYnVmZmVyW2ldICE9ICcwJykgeworICAg
ICAgICAgICAgICAgIHJldHVybiBidWZmZXIuU3ViVmVjdG9yKDAsIGkgKyAxKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gVmVjdG9yPGNvbnN0IGNoYXI+KGJ1ZmZl
ci5zdGFydCgpLCAwKTsKKyAgICB9CisgICAgCisgICAgCisgICAgc3RhdGljIHZvaWQgVHJpbVRv
TWF4U2lnbmlmaWNhbnREaWdpdHMoVmVjdG9yPGNvbnN0IGNoYXI+IGJ1ZmZlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZXhwb25lbnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogc2lnbmlmaWNhbnRfYnVm
ZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogc2ln
bmlmaWNhbnRfZXhwb25lbnQpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrTWF4U2ln
bmlmaWNhbnREZWNpbWFsRGlnaXRzIC0gMTsgKytpKSB7CisgICAgICAgICAgICBzaWduaWZpY2Fu
dF9idWZmZXJbaV0gPSBidWZmZXJbaV07CisgICAgICAgIH0KKyAgICAgICAgLy8gVGhlIGlucHV0
IGJ1ZmZlciBoYXMgYmVlbiB0cmltbWVkLiBUaGVyZWZvcmUgdGhlIGxhc3QgZGlnaXQgbXVzdCBi
ZQorICAgICAgICAvLyBkaWZmZXJlbnQgZnJvbSAnMCcuCisgICAgICAgIEFTU0VSVChidWZmZXJb
YnVmZmVyLmxlbmd0aCgpIC0gMV0gIT0gJzAnKTsKKyAgICAgICAgLy8gU2V0IHRoZSBsYXN0IGRp
Z2l0IHRvIGJlIG5vbi16ZXJvLiBUaGlzIGlzIHN1ZmZpY2llbnQgdG8gZ3VhcmFudGVlCisgICAg
ICAgIC8vIGNvcnJlY3Qgcm91bmRpbmcuCisgICAgICAgIHNpZ25pZmljYW50X2J1ZmZlcltrTWF4
U2lnbmlmaWNhbnREZWNpbWFsRGlnaXRzIC0gMV0gPSAnMSc7CisgICAgICAgICpzaWduaWZpY2Fu
dF9leHBvbmVudCA9CisgICAgICAgIGV4cG9uZW50ICsgKGJ1ZmZlci5sZW5ndGgoKSAtIGtNYXhT
aWduaWZpY2FudERlY2ltYWxEaWdpdHMpOworICAgIH0KKyAgICAKKyAgICAvLyBSZWFkcyBkaWdp
dHMgZnJvbSB0aGUgYnVmZmVyIGFuZCBjb252ZXJ0cyB0aGVtIHRvIGEgdWludDY0LgorICAgIC8v
IFJlYWRzIGluIGFzIG1hbnkgZGlnaXRzIGFzIGZpdCBpbnRvIGEgdWludDY0LgorICAgIC8vIFdo
ZW4gdGhlIHN0cmluZyBzdGFydHMgd2l0aCAiMTg0NDY3NDQwNzM3MDk1NTE2MSIgbm8gZnVydGhl
ciBkaWdpdCBpcyByZWFkLgorICAgIC8vIFNpbmNlIDJeNjQgPSAxODQ0Njc0NDA3MzcwOTU1MTYx
NiBpdCB3b3VsZCBzdGlsbCBiZSBwb3NzaWJsZSByZWFkIGFub3RoZXIKKyAgICAvLyBkaWdpdCBp
ZiBpdCB3YXMgbGVzcyBvciBlcXVhbCB0aGFuIDYsIGJ1dCB0aGlzIHdvdWxkIGNvbXBsaWNhdGUg
dGhlIGNvZGUuCisgICAgc3RhdGljIHVpbnQ2NF90IFJlYWRVaW50NjQoVmVjdG9yPGNvbnN0IGNo
YXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIG51bWJlcl9v
Zl9yZWFkX2RpZ2l0cykgeworICAgICAgICB1aW50NjRfdCByZXN1bHQgPSAwOworICAgICAgICBp
bnQgaSA9IDA7CisgICAgICAgIHdoaWxlIChpIDwgYnVmZmVyLmxlbmd0aCgpICYmIHJlc3VsdCA8
PSAoa01heFVpbnQ2NCAvIDEwIC0gMSkpIHsKKyAgICAgICAgICAgIGludCBkaWdpdCA9IGJ1ZmZl
cltpKytdIC0gJzAnOworICAgICAgICAgICAgQVNTRVJUKDAgPD0gZGlnaXQgJiYgZGlnaXQgPD0g
OSk7CisgICAgICAgICAgICByZXN1bHQgPSAxMCAqIHJlc3VsdCArIGRpZ2l0OworICAgICAgICB9
CisgICAgICAgICpudW1iZXJfb2ZfcmVhZF9kaWdpdHMgPSBpOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKyAgICAKKyAgICAKKyAgICAvLyBSZWFkcyBhIERpeUZwIGZyb20gdGhlIGJ1
ZmZlci4KKyAgICAvLyBUaGUgcmV0dXJuZWQgRGl5RnAgaXMgbm90IG5lY2Vzc2FyaWx5IG5vcm1h
bGl6ZWQuCisgICAgLy8gSWYgcmVtYWluaW5nX2RlY2ltYWxzIGlzIHplcm8gdGhlbiB0aGUgcmV0
dXJuZWQgRGl5RnAgaXMgYWNjdXJhdGUuCisgICAgLy8gT3RoZXJ3aXNlIGl0IGhhcyBiZWVuIHJv
dW5kZWQgYW5kIGhhcyBlcnJvciBvZiBhdCBtb3N0IDEvMiB1bHAuCisgICAgc3RhdGljIHZvaWQg
UmVhZERpeUZwKFZlY3Rvcjxjb25zdCBjaGFyPiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIERpeUZwKiByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogcmVt
YWluaW5nX2RlY2ltYWxzKSB7CisgICAgICAgIGludCByZWFkX2RpZ2l0czsKKyAgICAgICAgdWlu
dDY0X3Qgc2lnbmlmaWNhbmQgPSBSZWFkVWludDY0KGJ1ZmZlciwgJnJlYWRfZGlnaXRzKTsKKyAg
ICAgICAgaWYgKGJ1ZmZlci5sZW5ndGgoKSA9PSByZWFkX2RpZ2l0cykgeworICAgICAgICAgICAg
KnJlc3VsdCA9IERpeUZwKHNpZ25pZmljYW5kLCAwKTsKKyAgICAgICAgICAgICpyZW1haW5pbmdf
ZGVjaW1hbHMgPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gUm91bmQgdGhl
IHNpZ25pZmljYW5kLgorICAgICAgICAgICAgaWYgKGJ1ZmZlcltyZWFkX2RpZ2l0c10gPj0gJzUn
KSB7CisgICAgICAgICAgICAgICAgc2lnbmlmaWNhbmQrKzsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIC8vIENvbXB1dGUgdGhlIGJpbmFyeSBleHBvbmVudC4KKyAgICAgICAgICAgIGludCBl
eHBvbmVudCA9IDA7CisgICAgICAgICAgICAqcmVzdWx0ID0gRGl5RnAoc2lnbmlmaWNhbmQsIGV4
cG9uZW50KTsKKyAgICAgICAgICAgICpyZW1haW5pbmdfZGVjaW1hbHMgPSBidWZmZXIubGVuZ3Ro
KCkgLSByZWFkX2RpZ2l0czsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAKKyAgICBzdGF0
aWMgYm9vbCBEb3VibGVTdHJ0b2QoVmVjdG9yPGNvbnN0IGNoYXI+IHRyaW1tZWQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBleHBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZG91YmxlKiByZXN1bHQpIHsKKyNpZiAhZGVmaW5lZChET1VCTEVfQ09OVkVSU0lP
Tl9DT1JSRUNUX0RPVUJMRV9PUEVSQVRJT05TKQorICAgICAgICAvLyBPbiB4ODYgdGhlIGZsb2F0
aW5nLXBvaW50IHN0YWNrIGNhbiBiZSA2NCBvciA4MCBiaXRzIHdpZGUuIElmIGl0IGlzCisgICAg
ICAgIC8vIDgwIGJpdHMgd2lkZSAoYXMgaXMgdGhlIGNhc2Ugb24gTGludXgpIHRoZW4gZG91Ymxl
LXJvdW5kaW5nIG9jY3VycyBhbmQgdGhlCisgICAgICAgIC8vIHJlc3VsdCBpcyBub3QgYWNjdXJh
dGUuCisgICAgICAgIC8vIFdlIGtub3cgdGhhdCBXaW5kb3dzMzIgdXNlcyA2NCBiaXRzIGFuZCBp
cyB0aGVyZWZvcmUgYWNjdXJhdGUuCisgICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgQVJNIHNpbXVs
YXRvciBpcyBjb21waWxlZCBmb3IgMzJiaXRzLiBJdCB0aGVyZWZvcmUgZXhoaWJpdHMKKyAgICAg
ICAgLy8gdGhlIHNhbWUgcHJvYmxlbS4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisg
ICAgICAgIGlmICh0cmltbWVkLmxlbmd0aCgpIDw9IGtNYXhFeGFjdERvdWJsZUludGVnZXJEZWNp
bWFsRGlnaXRzKSB7CisgICAgICAgICAgICBpbnQgcmVhZF9kaWdpdHM7CisgICAgICAgICAgICAv
LyBUaGUgdHJpbW1lZCBpbnB1dCBmaXRzIGludG8gYSBkb3VibGUuCisgICAgICAgICAgICAvLyBJ
ZiB0aGUgMTBeZXhwb25lbnQgKHJlc3AuIDEwXi1leHBvbmVudCkgZml0cyBpbnRvIGEgZG91Ymxl
IHRvbyB0aGVuIHdlCisgICAgICAgICAgICAvLyBjYW4gY29tcHV0ZSB0aGUgcmVzdWx0LWRvdWJs
ZSBzaW1wbHkgYnkgbXVsdGlwbHlpbmcgKHJlc3AuIGRpdmlkaW5nKSB0aGUKKyAgICAgICAgICAg
IC8vIHR3byBudW1iZXJzLgorICAgICAgICAgICAgLy8gVGhpcyBpcyBwb3NzaWJsZSBiZWNhdXNl
IElFRUUgZ3VhcmFudGVlcyB0aGF0IGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMKKyAgICAgICAg
ICAgIC8vIHJldHVybiB0aGUgYmVzdCBwb3NzaWJsZSBhcHByb3hpbWF0aW9uLgorICAgICAgICAg
ICAgaWYgKGV4cG9uZW50IDwgMCAmJiAtZXhwb25lbnQgPCBrRXhhY3RQb3dlcnNPZlRlblNpemUp
IHsKKyAgICAgICAgICAgICAgICAvLyAxMF4tZXhwb25lbnQgZml0cyBpbnRvIGEgZG91YmxlLgor
ICAgICAgICAgICAgICAgICpyZXN1bHQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KFJlYWRVaW50NjQo
dHJpbW1lZCwgJnJlYWRfZGlnaXRzKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHJlYWRfZGln
aXRzID09IHRyaW1tZWQubGVuZ3RoKCkpOworICAgICAgICAgICAgICAgICpyZXN1bHQgLz0gZXhh
Y3RfcG93ZXJzX29mX3RlblstZXhwb25lbnRdOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKDAgPD0gZXhwb25lbnQgJiYgZXhwb25l
bnQgPCBrRXhhY3RQb3dlcnNPZlRlblNpemUpIHsKKyAgICAgICAgICAgICAgICAvLyAxMF5leHBv
bmVudCBmaXRzIGludG8gYSBkb3VibGUuCisgICAgICAgICAgICAgICAgKnJlc3VsdCA9IHN0YXRp
Y19jYXN0PGRvdWJsZT4oUmVhZFVpbnQ2NCh0cmltbWVkLCAmcmVhZF9kaWdpdHMpKTsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQocmVhZF9kaWdpdHMgPT0gdHJpbW1lZC5sZW5ndGgoKSk7CisgICAg
ICAgICAgICAgICAgKnJlc3VsdCAqPSBleGFjdF9wb3dlcnNfb2ZfdGVuW2V4cG9uZW50XTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlu
dCByZW1haW5pbmdfZGlnaXRzID0KKyAgICAgICAgICAgIGtNYXhFeGFjdERvdWJsZUludGVnZXJE
ZWNpbWFsRGlnaXRzIC0gdHJpbW1lZC5sZW5ndGgoKTsKKyAgICAgICAgICAgIGlmICgoMCA8PSBl
eHBvbmVudCkgJiYKKyAgICAgICAgICAgICAgICAoZXhwb25lbnQgLSByZW1haW5pbmdfZGlnaXRz
IDwga0V4YWN0UG93ZXJzT2ZUZW5TaXplKSkgeworICAgICAgICAgICAgICAgIC8vIFRoZSB0cmlt
bWVkIHN0cmluZyB3YXMgc2hvcnQgYW5kIHdlIGNhbiBtdWx0aXBseSBpdCB3aXRoCisgICAgICAg
ICAgICAgICAgLy8gMTBecmVtYWluaW5nX2RpZ2l0cy4gQXMgYSByZXN1bHQgdGhlIHJlbWFpbmlu
ZyBleHBvbmVudCBub3cgZml0cworICAgICAgICAgICAgICAgIC8vIGludG8gYSBkb3VibGUgdG9v
LgorICAgICAgICAgICAgICAgICpyZXN1bHQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KFJlYWRVaW50
NjQodHJpbW1lZCwgJnJlYWRfZGlnaXRzKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHJlYWRf
ZGlnaXRzID09IHRyaW1tZWQubGVuZ3RoKCkpOworICAgICAgICAgICAgICAgICpyZXN1bHQgKj0g
ZXhhY3RfcG93ZXJzX29mX3RlbltyZW1haW5pbmdfZGlnaXRzXTsKKyAgICAgICAgICAgICAgICAq
cmVzdWx0ICo9IGV4YWN0X3Bvd2Vyc19vZl90ZW5bZXhwb25lbnQgLSByZW1haW5pbmdfZGlnaXRz
XTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIAorICAgIC8vIFJldHVy
bnMgMTBeZXhwb25lbnQgYXMgYW4gZXhhY3QgRGl5RnAuCisgICAgLy8gVGhlIGdpdmVuIGV4cG9u
ZW50IG11c3QgYmUgaW4gdGhlIHJhbmdlIFsxOyBrRGVjaW1hbEV4cG9uZW50RGlzdGFuY2VbLgor
ICAgIHN0YXRpYyBEaXlGcCBBZGp1c3RtZW50UG93ZXJPZlRlbihpbnQgZXhwb25lbnQpIHsKKyAg
ICAgICAgQVNTRVJUKDAgPCBleHBvbmVudCk7CisgICAgICAgIEFTU0VSVChleHBvbmVudCA8IFBv
d2Vyc09mVGVuQ2FjaGU6OmtEZWNpbWFsRXhwb25lbnREaXN0YW5jZSk7CisgICAgICAgIC8vIFNp
bXBseSBoYXJkY29kZSB0aGUgcmVtYWluaW5nIHBvd2VycyBmb3IgdGhlIGdpdmVuIGRlY2ltYWwg
ZXhwb25lbnQKKyAgICAgICAgLy8gZGlzdGFuY2UuCisgICAgICAgIEFTU0VSVChQb3dlcnNPZlRl
bkNhY2hlOjprRGVjaW1hbEV4cG9uZW50RGlzdGFuY2UgPT0gOCk7CisgICAgICAgIHN3aXRjaCAo
ZXhwb25lbnQpIHsKKyAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIERpeUZwKFVJTlQ2NF8yUEFS
VF9DKDB4YTAwMDAwMDAsIDAwMDAwMDAwKSwgLTYwKTsKKyAgICAgICAgICAgIGNhc2UgMjogcmV0
dXJuIERpeUZwKFVJTlQ2NF8yUEFSVF9DKDB4YzgwMDAwMDAsIDAwMDAwMDAwKSwgLTU3KTsKKyAg
ICAgICAgICAgIGNhc2UgMzogcmV0dXJuIERpeUZwKFVJTlQ2NF8yUEFSVF9DKDB4ZmEwMDAwMDAs
IDAwMDAwMDAwKSwgLTU0KTsKKyAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIERpeUZwKFVJTlQ2
NF8yUEFSVF9DKDB4OWM0MDAwMDAsIDAwMDAwMDAwKSwgLTUwKTsKKyAgICAgICAgICAgIGNhc2Ug
NTogcmV0dXJuIERpeUZwKFVJTlQ2NF8yUEFSVF9DKDB4YzM1MDAwMDAsIDAwMDAwMDAwKSwgLTQ3
KTsKKyAgICAgICAgICAgIGNhc2UgNjogcmV0dXJuIERpeUZwKFVJTlQ2NF8yUEFSVF9DKDB4ZjQy
NDAwMDAsIDAwMDAwMDAwKSwgLTQ0KTsKKyAgICAgICAgICAgIGNhc2UgNzogcmV0dXJuIERpeUZw
KFVJTlQ2NF8yUEFSVF9DKDB4OTg5NjgwMDAsIDAwMDAwMDAwKSwgLTQwKTsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gRGl5RnAoMCwgMCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAg
Ly8gSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB0aGVuIHRoZSByZXN1bHQgaXMgdGhlIGNv
cnJlY3QgZG91YmxlLgorICAgIC8vIE90aGVyd2lzZSBpdCBpcyBlaXRoZXIgdGhlIGNvcnJlY3Qg
ZG91YmxlIG9yIHRoZSBkb3VibGUgdGhhdCBpcyBqdXN0IGJlbG93CisgICAgLy8gdGhlIGNvcnJl
Y3QgZG91YmxlLgorICAgIHN0YXRpYyBib29sIERpeUZwU3RydG9kKFZlY3Rvcjxjb25zdCBjaGFy
PiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV4cG9uZW50LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSogcmVzdWx0KSB7CisgICAgICAgIERpeUZw
IGlucHV0OworICAgICAgICBpbnQgcmVtYWluaW5nX2RlY2ltYWxzOworICAgICAgICBSZWFkRGl5
RnAoYnVmZmVyLCAmaW5wdXQsICZyZW1haW5pbmdfZGVjaW1hbHMpOworICAgICAgICAvLyBTaW5j
ZSB3ZSBtYXkgaGF2ZSBkcm9wcGVkIHNvbWUgZGlnaXRzIHRoZSBpbnB1dCBpcyBub3QgYWNjdXJh
dGUuCisgICAgICAgIC8vIElmIHJlbWFpbmluZ19kZWNpbWFscyBpcyBkaWZmZXJlbnQgdGhhbiAw
IHRoYW4gdGhlIGVycm9yIGlzIGF0IG1vc3QKKyAgICAgICAgLy8gLjUgdWxwICh1bml0IGluIHRo
ZSBsYXN0IHBsYWNlKS4KKyAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBkZWFsIHdpdGggZnJh
Y3Rpb25zIGFuZCB0aGVyZWZvcmUga2VlcCBhIGNvbW1vbgorICAgICAgICAvLyBkZW5vbWluYXRv
ci4KKyAgICAgICAgY29uc3QgaW50IGtEZW5vbWluYXRvckxvZyA9IDM7CisgICAgICAgIGNvbnN0
IGludCBrRGVub21pbmF0b3IgPSAxIDw8IGtEZW5vbWluYXRvckxvZzsKKyAgICAgICAgLy8gTW92
ZSB0aGUgcmVtYWluaW5nIGRlY2ltYWxzIGludG8gdGhlIGV4cG9uZW50LgorICAgICAgICBleHBv
bmVudCArPSByZW1haW5pbmdfZGVjaW1hbHM7CisgICAgICAgIGludCBlcnJvciA9IChyZW1haW5p
bmdfZGVjaW1hbHMgPT0gMCA/IDAgOiBrRGVub21pbmF0b3IgLyAyKTsKKyAgICAgICAgCisgICAg
ICAgIGludCBvbGRfZSA9IGlucHV0LmUoKTsKKyAgICAgICAgaW5wdXQuTm9ybWFsaXplKCk7Cisg
ICAgICAgIGVycm9yIDw8PSBvbGRfZSAtIGlucHV0LmUoKTsKKyAgICAgICAgCisgICAgICAgIEFT
U0VSVChleHBvbmVudCA8PSBQb3dlcnNPZlRlbkNhY2hlOjprTWF4RGVjaW1hbEV4cG9uZW50KTsK
KyAgICAgICAgaWYgKGV4cG9uZW50IDwgUG93ZXJzT2ZUZW5DYWNoZTo6a01pbkRlY2ltYWxFeHBv
bmVudCkgeworICAgICAgICAgICAgKnJlc3VsdCA9IDAuMDsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgICAgIERpeUZwIGNhY2hlZF9wb3dlcjsKKyAgICAgICAgaW50
IGNhY2hlZF9kZWNpbWFsX2V4cG9uZW50OworICAgICAgICBQb3dlcnNPZlRlbkNhY2hlOjpHZXRD
YWNoZWRQb3dlckZvckRlY2ltYWxFeHBvbmVudChleHBvbmVudCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhY2hlZF9wb3dlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJmNhY2hlZF9kZWNpbWFsX2V4cG9uZW50KTsKKyAgICAgICAgCisgICAgICAgIGlmIChjYWNo
ZWRfZGVjaW1hbF9leHBvbmVudCAhPSBleHBvbmVudCkgeworICAgICAgICAgICAgaW50IGFkanVz
dG1lbnRfZXhwb25lbnQgPSBleHBvbmVudCAtIGNhY2hlZF9kZWNpbWFsX2V4cG9uZW50OworICAg
ICAgICAgICAgRGl5RnAgYWRqdXN0bWVudF9wb3dlciA9IEFkanVzdG1lbnRQb3dlck9mVGVuKGFk
anVzdG1lbnRfZXhwb25lbnQpOworICAgICAgICAgICAgaW5wdXQuTXVsdGlwbHkoYWRqdXN0bWVu
dF9wb3dlcik7CisgICAgICAgICAgICBpZiAoa01heFVpbnQ2NERlY2ltYWxEaWdpdHMgLSBidWZm
ZXIubGVuZ3RoKCkgPj0gYWRqdXN0bWVudF9leHBvbmVudCkgeworICAgICAgICAgICAgICAgIC8v
IFRoZSBwcm9kdWN0IG9mIGlucHV0IHdpdGggdGhlIGFkanVzdG1lbnQgcG93ZXIgZml0cyBpbnRv
IGEgNjQgYml0CisgICAgICAgICAgICAgICAgLy8gaW50ZWdlci4KKyAgICAgICAgICAgICAgICBB
U1NFUlQoRGl5RnA6OmtTaWduaWZpY2FuZFNpemUgPT0gNjQpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgYWRqdXN0bWVudCBwb3dlciBpcyBleGFjdC4gVGhl
cmUgaXMgaGVuY2Ugb25seSBhbiBlcnJvciBvZiAwLjUuCisgICAgICAgICAgICAgICAgZXJyb3Ig
Kz0ga0Rlbm9taW5hdG9yIC8gMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaW5wdXQuTXVsdGlwbHkoY2FjaGVkX3Bvd2VyKTsKKyAgICAgICAgLy8gVGhlIGVy
cm9yIGludHJvZHVjZWQgYnkgYSBtdWx0aXBsaWNhdGlvbiBvZiBhKmIgZXF1YWxzCisgICAgICAg
IC8vICAgZXJyb3JfYSArIGVycm9yX2IgKyBlcnJvcl9hKmVycm9yX2IvMl42NCArIDAuNQorICAg
ICAgICAvLyBTdWJzdGl0dXRpbmcgYSB3aXRoICdpbnB1dCcgYW5kIGIgd2l0aCAnY2FjaGVkX3Bv
d2VyJyB3ZSBoYXZlCisgICAgICAgIC8vICAgZXJyb3JfYiA9IDAuNSAgKGFsbCBjYWNoZWQgcG93
ZXJzIGhhdmUgYW4gZXJyb3Igb2YgbGVzcyB0aGFuIDAuNSB1bHApLAorICAgICAgICAvLyAgIGVy
cm9yX2FiID0gMCBvciAxIC8ga0Rlbm9taW5hdG9yID4gZXJyb3JfYSplcnJvcl9iLyAyXjY0Cisg
ICAgICAgIGludCBlcnJvcl9iID0ga0Rlbm9taW5hdG9yIC8gMjsKKyAgICAgICAgaW50IGVycm9y
X2FiID0gKGVycm9yID09IDAgPyAwIDogMSk7ICAvLyBXZSByb3VuZCB1cCB0byAxLgorICAgICAg
ICBpbnQgZml4ZWRfZXJyb3IgPSBrRGVub21pbmF0b3IgLyAyOworICAgICAgICBlcnJvciArPSBl
cnJvcl9iICsgZXJyb3JfYWIgKyBmaXhlZF9lcnJvcjsKKyAgICAgICAgCisgICAgICAgIG9sZF9l
ID0gaW5wdXQuZSgpOworICAgICAgICBpbnB1dC5Ob3JtYWxpemUoKTsKKyAgICAgICAgZXJyb3Ig
PDw9IG9sZF9lIC0gaW5wdXQuZSgpOworICAgICAgICAKKyAgICAgICAgLy8gU2VlIGlmIHRoZSBk
b3VibGUncyBzaWduaWZpY2FuZCBjaGFuZ2VzIGlmIHdlIGFkZC9zdWJ0cmFjdCB0aGUgZXJyb3Iu
CisgICAgICAgIGludCBvcmRlcl9vZl9tYWduaXR1ZGUgPSBEaXlGcDo6a1NpZ25pZmljYW5kU2l6
ZSArIGlucHV0LmUoKTsKKyAgICAgICAgaW50IGVmZmVjdGl2ZV9zaWduaWZpY2FuZF9zaXplID0K
KyAgICAgICAgRG91YmxlOjpTaWduaWZpY2FuZFNpemVGb3JPcmRlck9mTWFnbml0dWRlKG9yZGVy
X29mX21hZ25pdHVkZSk7CisgICAgICAgIGludCBwcmVjaXNpb25fZGlnaXRzX2NvdW50ID0KKyAg
ICAgICAgRGl5RnA6OmtTaWduaWZpY2FuZFNpemUgLSBlZmZlY3RpdmVfc2lnbmlmaWNhbmRfc2l6
ZTsKKyAgICAgICAgaWYgKHByZWNpc2lvbl9kaWdpdHNfY291bnQgKyBrRGVub21pbmF0b3JMb2cg
Pj0gRGl5RnA6OmtTaWduaWZpY2FuZFNpemUpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgY2FuIG9u
bHkgaGFwcGVuIGZvciB2ZXJ5IHNtYWxsIGRlbm9ybWFscy4gSW4gdGhpcyBjYXNlIHRoZQorICAg
ICAgICAgICAgLy8gaGFsZi13YXkgbXVsdGlwbGllZCBieSB0aGUgZGVub21pbmF0b3IgZXhjZWVk
cyB0aGUgcmFuZ2Ugb2YgYW4gdWludDY0LgorICAgICAgICAgICAgLy8gU2ltcGx5IHNoaWZ0IGV2
ZXJ5dGhpbmcgdG8gdGhlIHJpZ2h0LgorICAgICAgICAgICAgaW50IHNoaWZ0X2Ftb3VudCA9IChw
cmVjaXNpb25fZGlnaXRzX2NvdW50ICsga0Rlbm9taW5hdG9yTG9nKSAtCisgICAgICAgICAgICBE
aXlGcDo6a1NpZ25pZmljYW5kU2l6ZSArIDE7CisgICAgICAgICAgICBpbnB1dC5zZXRfZihpbnB1
dC5mKCkgPj4gc2hpZnRfYW1vdW50KTsKKyAgICAgICAgICAgIGlucHV0LnNldF9lKGlucHV0LmUo
KSArIHNoaWZ0X2Ftb3VudCk7CisgICAgICAgICAgICAvLyBXZSBhZGQgMSBmb3IgdGhlIGxvc3Qg
cHJlY2lzaW9uIG9mIGVycm9yLCBhbmQga0Rlbm9taW5hdG9yIGZvcgorICAgICAgICAgICAgLy8g
dGhlIGxvc3QgcHJlY2lzaW9uIG9mIGlucHV0LmYoKS4KKyAgICAgICAgICAgIGVycm9yID0gKGVy
cm9yID4+IHNoaWZ0X2Ftb3VudCkgKyAxICsga0Rlbm9taW5hdG9yOworICAgICAgICAgICAgcHJl
Y2lzaW9uX2RpZ2l0c19jb3VudCAtPSBzaGlmdF9hbW91bnQ7CisgICAgICAgIH0KKyAgICAgICAg
Ly8gV2UgdXNlIHVpbnQ2NF90cyBub3cuIFRoaXMgb25seSB3b3JrcyBpZiB0aGUgRGl5RnAgdXNl
cyB1aW50NjRfdHMgdG9vLgorICAgICAgICBBU1NFUlQoRGl5RnA6OmtTaWduaWZpY2FuZFNpemUg
PT0gNjQpOworICAgICAgICBBU1NFUlQocHJlY2lzaW9uX2RpZ2l0c19jb3VudCA8IDY0KTsKKyAg
ICAgICAgdWludDY0X3Qgb25lNjQgPSAxOworICAgICAgICB1aW50NjRfdCBwcmVjaXNpb25fYml0
c19tYXNrID0gKG9uZTY0IDw8IHByZWNpc2lvbl9kaWdpdHNfY291bnQpIC0gMTsKKyAgICAgICAg
dWludDY0X3QgcHJlY2lzaW9uX2JpdHMgPSBpbnB1dC5mKCkgJiBwcmVjaXNpb25fYml0c19tYXNr
OworICAgICAgICB1aW50NjRfdCBoYWxmX3dheSA9IG9uZTY0IDw8IChwcmVjaXNpb25fZGlnaXRz
X2NvdW50IC0gMSk7CisgICAgICAgIHByZWNpc2lvbl9iaXRzICo9IGtEZW5vbWluYXRvcjsKKyAg
ICAgICAgaGFsZl93YXkgKj0ga0Rlbm9taW5hdG9yOworICAgICAgICBEaXlGcCByb3VuZGVkX2lu
cHV0KGlucHV0LmYoKSA+PiBwcmVjaXNpb25fZGlnaXRzX2NvdW50LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlucHV0LmUoKSArIHByZWNpc2lvbl9kaWdpdHNfY291bnQpOworICAgICAg
ICBpZiAocHJlY2lzaW9uX2JpdHMgPj0gaGFsZl93YXkgKyBlcnJvcikgeworICAgICAgICAgICAg
cm91bmRlZF9pbnB1dC5zZXRfZihyb3VuZGVkX2lucHV0LmYoKSArIDEpOworICAgICAgICB9Cisg
ICAgICAgIC8vIElmIHRoZSBsYXN0X2JpdHMgYXJlIHRvbyBjbG9zZSB0byB0aGUgaGFsZi13YXkg
Y2FzZSB0aGFuIHdlIGFyZSB0b28KKyAgICAgICAgLy8gaW5hY2N1cmF0ZSBhbmQgcm91bmQgZG93
bi4gSW4gdGhpcyBjYXNlIHdlIHJldHVybiBmYWxzZSBzbyB0aGF0IHdlIGNhbgorICAgICAgICAv
LyBmYWxsIGJhY2sgdG8gYSBtb3JlIHByZWNpc2UgYWxnb3JpdGhtLgorICAgICAgICAKKyAgICAg
ICAgKnJlc3VsdCA9IERvdWJsZShyb3VuZGVkX2lucHV0KS52YWx1ZSgpOworICAgICAgICBpZiAo
aGFsZl93YXkgLSBlcnJvciA8IHByZWNpc2lvbl9iaXRzICYmIHByZWNpc2lvbl9iaXRzIDwgaGFs
Zl93YXkgKyBlcnJvcikgeworICAgICAgICAgICAgLy8gVG9vIGltcHJlY2lzZS4gVGhlIGNhbGxl
ciB3aWxsIGhhdmUgdG8gZmFsbCBiYWNrIHRvIGEgc2xvd2VyIHZlcnNpb24uCisgICAgICAgICAg
ICAvLyBIb3dldmVyIHRoZSByZXR1cm5lZCBudW1iZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBlaXRo
ZXIgdGhlIGNvcnJlY3QKKyAgICAgICAgICAgIC8vIGRvdWJsZSwgb3IgdGhlIG5leHQtbG93ZXIg
ZG91YmxlLgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgCisgICAg
Ly8gUmV0dXJucyB0aGUgY29ycmVjdCBkb3VibGUgZm9yIHRoZSBidWZmZXIqMTBeZXhwb25lbnQu
CisgICAgLy8gVGhlIHZhcmlhYmxlIGd1ZXNzIHNob3VsZCBiZSBhIGNsb3NlIGd1ZXNzIHRoYXQg
aXMgZWl0aGVyIHRoZSBjb3JyZWN0IGRvdWJsZQorICAgIC8vIG9yIGl0cyBsb3dlciBuZWlnaGJv
ciAodGhlIG5lYXJlc3QgZG91YmxlIGxlc3MgdGhhbiB0aGUgY29ycmVjdCBvbmUpLgorICAgIC8v
IFByZWNvbmRpdGlvbnM6CisgICAgLy8gICBidWZmZXIubGVuZ3RoKCkgKyBleHBvbmVudCA8PSBr
TWF4RGVjaW1hbFBvd2VyICsgMQorICAgIC8vICAgYnVmZmVyLmxlbmd0aCgpICsgZXhwb25lbnQg
PiBrTWluRGVjaW1hbFBvd2VyCisgICAgLy8gICBidWZmZXIubGVuZ3RoKCkgPD0ga01heERlY2lt
YWxTaWduaWZpY2FudERpZ2l0cworICAgIHN0YXRpYyBkb3VibGUgQmlnbnVtU3RydG9kKFZlY3Rv
cjxjb25zdCBjaGFyPiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGV4cG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBndWVzcykg
eworICAgICAgICBpZiAoZ3Vlc3MgPT0gRG91YmxlOjpJbmZpbml0eSgpKSB7CisgICAgICAgICAg
ICByZXR1cm4gZ3Vlc3M7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIERpeUZwIHVwcGVy
X2JvdW5kYXJ5ID0gRG91YmxlKGd1ZXNzKS5VcHBlckJvdW5kYXJ5KCk7CisgICAgICAgIAorICAg
ICAgICBBU1NFUlQoYnVmZmVyLmxlbmd0aCgpICsgZXhwb25lbnQgPD0ga01heERlY2ltYWxQb3dl
ciArIDEpOworICAgICAgICBBU1NFUlQoYnVmZmVyLmxlbmd0aCgpICsgZXhwb25lbnQgPiBrTWlu
RGVjaW1hbFBvd2VyKTsKKyAgICAgICAgQVNTRVJUKGJ1ZmZlci5sZW5ndGgoKSA8PSBrTWF4U2ln
bmlmaWNhbnREZWNpbWFsRGlnaXRzKTsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIEJp
Z251bSB3aWxsIGJlIGFibGUgdG8gaG9sZCBhbGwgb3VyIG51bWJlcnMuCisgICAgICAgIC8vIE91
ciBCaWdudW0gaW1wbGVtZW50YXRpb24gaGFzIGEgc2VwYXJhdGUgZmllbGQgZm9yIGV4cG9uZW50
cy4gU2hpZnRzIHdpbGwKKyAgICAgICAgLy8gY29uc3VtZSBhdCBtb3N0IG9uZSBiaWdpdCAoPCA2
NCBiaXRzKS4KKyAgICAgICAgLy8gbG4oMTApID09IDMuMzIxOS4uLgorICAgICAgICBBU1NFUlQo
KChrTWF4RGVjaW1hbFBvd2VyICsgMSkgKiAzMzMgLyAxMDApIDwgQmlnbnVtOjprTWF4U2lnbmlm
aWNhbnRCaXRzKTsKKyAgICAgICAgQmlnbnVtIGlucHV0OworICAgICAgICBCaWdudW0gYm91bmRh
cnk7CisgICAgICAgIGlucHV0LkFzc2lnbkRlY2ltYWxTdHJpbmcoYnVmZmVyKTsKKyAgICAgICAg
Ym91bmRhcnkuQXNzaWduVUludDY0KHVwcGVyX2JvdW5kYXJ5LmYoKSk7CisgICAgICAgIGlmIChl
eHBvbmVudCA+PSAwKSB7CisgICAgICAgICAgICBpbnB1dC5NdWx0aXBseUJ5UG93ZXJPZlRlbihl
eHBvbmVudCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBib3VuZGFyeS5NdWx0aXBs
eUJ5UG93ZXJPZlRlbigtZXhwb25lbnQpOworICAgICAgICB9CisgICAgICAgIGlmICh1cHBlcl9i
b3VuZGFyeS5lKCkgPiAwKSB7CisgICAgICAgICAgICBib3VuZGFyeS5TaGlmdExlZnQodXBwZXJf
Ym91bmRhcnkuZSgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlucHV0LlNoaWZ0
TGVmdCgtdXBwZXJfYm91bmRhcnkuZSgpKTsKKyAgICAgICAgfQorICAgICAgICBpbnQgY29tcGFy
aXNvbiA9IEJpZ251bTo6Q29tcGFyZShpbnB1dCwgYm91bmRhcnkpOworICAgICAgICBpZiAoY29t
cGFyaXNvbiA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiBndWVzczsKKyAgICAgICAgfSBlbHNl
IGlmIChjb21wYXJpc29uID4gMCkgeworICAgICAgICAgICAgcmV0dXJuIERvdWJsZShndWVzcyku
TmV4dERvdWJsZSgpOworICAgICAgICB9IGVsc2UgaWYgKChEb3VibGUoZ3Vlc3MpLlNpZ25pZmlj
YW5kKCkgJiAxKSA9PSAwKSB7CisgICAgICAgICAgICAvLyBSb3VuZCB0b3dhcmRzIGV2ZW4uCisg
ICAgICAgICAgICByZXR1cm4gZ3Vlc3M7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBy
ZXR1cm4gRG91YmxlKGd1ZXNzKS5OZXh0RG91YmxlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgCisgICAgZG91YmxlIFN0cnRvZChWZWN0b3I8Y29uc3QgY2hhcj4gYnVmZmVyLCBpbnQg
ZXhwb25lbnQpIHsKKyAgICAgICAgVmVjdG9yPGNvbnN0IGNoYXI+IGxlZnRfdHJpbW1lZCA9IFRy
aW1MZWFkaW5nWmVyb3MoYnVmZmVyKTsKKyAgICAgICAgVmVjdG9yPGNvbnN0IGNoYXI+IHRyaW1t
ZWQgPSBUcmltVHJhaWxpbmdaZXJvcyhsZWZ0X3RyaW1tZWQpOworICAgICAgICBleHBvbmVudCAr
PSBsZWZ0X3RyaW1tZWQubGVuZ3RoKCkgLSB0cmltbWVkLmxlbmd0aCgpOworICAgICAgICBpZiAo
dHJpbW1lZC5sZW5ndGgoKSA9PSAwKSByZXR1cm4gMC4wOworICAgICAgICBpZiAodHJpbW1lZC5s
ZW5ndGgoKSA+IGtNYXhTaWduaWZpY2FudERlY2ltYWxEaWdpdHMpIHsKKyAgICAgICAgICAgIGNo
YXIgc2lnbmlmaWNhbnRfYnVmZmVyW2tNYXhTaWduaWZpY2FudERlY2ltYWxEaWdpdHNdOworICAg
ICAgICAgICAgaW50IHNpZ25pZmljYW50X2V4cG9uZW50OworICAgICAgICAgICAgVHJpbVRvTWF4
U2lnbmlmaWNhbnREaWdpdHModHJpbW1lZCwgZXhwb25lbnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaWduaWZpY2FudF9idWZmZXIsICZzaWduaWZpY2FudF9leHBv
bmVudCk7CisgICAgICAgICAgICByZXR1cm4gU3RydG9kKFZlY3Rvcjxjb25zdCBjaGFyPihzaWdu
aWZpY2FudF9idWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBrTWF4U2lnbmlmaWNhbnREZWNpbWFsRGlnaXRzKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2lnbmlmaWNhbnRfZXhwb25lbnQpOworICAgICAgICB9CisgICAgICAgIGlmIChleHBv
bmVudCArIHRyaW1tZWQubGVuZ3RoKCkgLSAxID49IGtNYXhEZWNpbWFsUG93ZXIpIHsKKyAgICAg
ICAgICAgIHJldHVybiBEb3VibGU6OkluZmluaXR5KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGV4cG9uZW50ICsgdHJpbW1lZC5sZW5ndGgoKSA8PSBrTWluRGVjaW1hbFBvd2VyKSB7CisgICAg
ICAgICAgICByZXR1cm4gMC4wOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBkb3VibGUg
Z3Vlc3M7CisgICAgICAgIGlmIChEb3VibGVTdHJ0b2QodHJpbW1lZCwgZXhwb25lbnQsICZndWVz
cykgfHwKKyAgICAgICAgICAgIERpeUZwU3RydG9kKHRyaW1tZWQsIGV4cG9uZW50LCAmZ3Vlc3Mp
KSB7CisgICAgICAgICAgICByZXR1cm4gZ3Vlc3M7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IEJpZ251bVN0cnRvZCh0cmltbWVkLCBleHBvbmVudCwgZ3Vlc3MpOworICAgIH0KKyAgICAKK30g
IC8vIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbgorCit9IC8vIG5hbWVzcGFjZSBXVEYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9zdHJ0b2QuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvZHRvYS9zdHJ0b2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZWQzNTBhZDhh
YzhmNzgyNWYwODQxNTkyN2NhNjBhZTk3ZjM4MjVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL3N0cnRvZC5oCkBAIC0wLDAgKzEsNDUgQEAKKy8vIENv
cHlyaWdodCAyMDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2Ns
YWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZAorLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
CisvLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8g
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmbmRlZiBET1VCTEVfQ09OVkVSU0lPTl9TVFJUT0Rf
SF8KKyNkZWZpbmUgRE9VQkxFX0NPTlZFUlNJT05fU1RSVE9EX0hfCisKKyNpbmNsdWRlICJ1dGls
cy5oIgorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsK
KyAgICAKKyAgICAvLyBUaGUgYnVmZmVyIG11c3Qgb25seSBjb250YWluIGRpZ2l0cyBpbiB0aGUg
cmFuZ2UgWzAtOV0uIEl0IG11c3Qgbm90CisgICAgLy8gY29udGFpbiBhIGRvdCBvciBhIHNpZ24u
IEl0IG11c3Qgbm90IHN0YXJ0IHdpdGggJzAnLCBhbmQgbXVzdCBub3QgYmUgZW1wdHkuCisgICAg
ZG91YmxlIFN0cnRvZChWZWN0b3I8Y29uc3QgY2hhcj4gYnVmZmVyLCBpbnQgZXhwb25lbnQpOwor
ICAgIAorfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uCisKK30gLy8gbmFtZXNwYWNl
IFdURgorCisjZW5kaWYgIC8vIERPVUJMRV9DT05WRVJTSU9OX1NUUlRPRF9IXwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9kdG9hL3V0aWxzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL2R0b2EvdXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZWZiNWYxMmI3MTU1MjBhNjU1
YWNhZDE2N2ExOTBjYTZkOTE5NjJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9kdG9hL3V0aWxzLmgKQEAgLTAsMCArMSwzMDMgQEAKKy8vIENvcHlyaWdodCAy
MDEwIHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKy8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8g
ICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAg
ICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisvLworLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
Ly8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKy8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisvLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8g
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworI2lmbmRlZiBET1VCTEVfQ09OVkVSU0lPTl9VVElMU19IXworI2RlZmlu
ZSBET1VCTEVfQ09OVkVSU0lPTl9VVElMU19IXworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5j
bHVkZSA8c3RyaW5nLmg+CisKKyNpZm5kZWYgQVNTRVJUCisjaW5jbHVkZSA8YXNzZXJ0Lmg+Cisj
ZGVmaW5lIEFTU0VSVChjb25kaXRpb24pICAgICAgKGFzc2VydChjb25kaXRpb24pKQorI2RlZmlu
ZSBVTklNUExFTUVOVEVEKCkgKGFib3J0KCkpCisjZGVmaW5lIFVOUkVBQ0hBQkxFKCkgICAoYWJv
cnQoKSkKKyNlbmRpZgorCisvLyBEb3VibGUgb3BlcmF0aW9ucyBkZXRlY3Rpb24gYmFzZWQgb24g
dGFyZ2V0IGFyY2hpdGVjdHVyZS4KKy8vIExpbnV4IHVzZXMgYSA4MGJpdCB3aWRlIGZsb2F0aW5n
IHBvaW50IHN0YWNrIG9uIHg4Ni4gVGhpcyBpbmR1Y2VzIGRvdWJsZQorLy8gcm91bmRpbmcsIHdo
aWNoIGluIHR1cm4gbGVhZHMgdG8gd3JvbmcgcmVzdWx0cy4KKy8vIEFuIGVhc3kgd2F5IHRvIHRl
c3QgaWYgdGhlIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMgYXJlIGNvcnJlY3QgaXMgdG8KKy8v
IGV2YWx1YXRlOiA4OTI1NS4wLzFlMjIuIElmIHRoZSBmbG9hdGluZy1wb2ludCBzdGFjayBpcyA2
NCBiaXRzIHdpZGUgdGhlbgorLy8gdGhlIHJlc3VsdCBpcyBlcXVhbCB0byA4OTI1NWUtMjIuCisv
LyBUaGUgYmVzdCB3YXkgdG8gdGVzdCB0aGlzLCBpcyB0byBjcmVhdGUgYSBkaXZpc2lvbi1mdW5j
dGlvbiBhbmQgdG8gY29tcGFyZQorLy8gdGhlIG91dHB1dCBvZiB0aGUgZGl2aXNpb24gd2l0aCB0
aGUgZXhwZWN0ZWQgcmVzdWx0LiAoSW5saW5pbmcgbXVzdCBiZQorLy8gZGlzYWJsZWQuKQorLy8g
T24gTGludXgseDg2IDg5MjU1ZS0yMiAhPSBEaXZfZG91YmxlKDg5MjU1LjAvMWUyMikKKyNpZiBk
ZWZpbmVkKF9NX1g2NCkgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBcCitkZWZpbmVkKF9fQVJN
RUxfXykgfHwgXAorZGVmaW5lZChfTUlQU19BUkNIX01JUFMzMlIyKQorI2RlZmluZSBET1VCTEVf
Q09OVkVSU0lPTl9DT1JSRUNUX0RPVUJMRV9PUEVSQVRJT05TIDEKKyNlbGlmIGRlZmluZWQoX01f
SVg4NikgfHwgZGVmaW5lZChfX2kzODZfXykKKyNpZiBkZWZpbmVkKF9XSU4zMikKKy8vIFdpbmRv
d3MgdXNlcyBhIDY0Yml0IHdpZGUgZmxvYXRpbmcgcG9pbnQgc3RhY2suCisjZGVmaW5lIERPVUJM
RV9DT05WRVJTSU9OX0NPUlJFQ1RfRE9VQkxFX09QRVJBVElPTlMgMQorI2Vsc2UKKyN1bmRlZiBE
T1VCTEVfQ09OVkVSU0lPTl9DT1JSRUNUX0RPVUJMRV9PUEVSQVRJT05TCisjZW5kaWYgIC8vIF9X
SU4zMgorI2Vsc2UKKyNlcnJvciBUYXJnZXQgYXJjaGl0ZWN0dXJlIHdhcyBub3QgZGV0ZWN0ZWQg
YXMgc3VwcG9ydGVkIGJ5IERvdWJsZS1Db252ZXJzaW9uLgorI2VuZGlmCisKKworI2lmIGRlZmlu
ZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX01JTkdXMzJfXykKKwordHlwZWRlZiBzaWduZWQgY2hh
ciBpbnQ4X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludDhfdDsKK3R5cGVkZWYgc2hvcnQg
aW50MTZfdDsgIC8vIE5PTElOVAordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1aW50MTZfdDsgIC8v
IE5PTElOVAordHlwZWRlZiBpbnQgaW50MzJfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQz
Ml90OwordHlwZWRlZiBfX2ludDY0IGludDY0X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQg
dWludDY0X3Q7CisvLyBpbnRwdHJfdCBhbmQgZnJpZW5kcyBhcmUgZGVmaW5lZCBpbiBjcnRkZWZz
LmggdGhyb3VnaCBzdGRpby5oLgorCisjZWxzZQorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNl
bmRpZgorCisvLyBUaGUgZm9sbG93aW5nIG1hY3JvIHdvcmtzIG9uIGJvdGggMzIgYW5kIDY0LWJp
dCBwbGF0Zm9ybXMuCisvLyBVc2FnZTogaW5zdGVhZCBvZiB3cml0aW5nIDB4MTIzNDU2Nzg5MDEy
MzQ1NgorLy8gICAgICB3cml0ZSBVSU5UNjRfMlBBUlRfQygweDEyMzQ1Njc4LDkwMTIzNDU2KTsK
KyNkZWZpbmUgVUlOVDY0XzJQQVJUX0MoYSwgYikgKCgoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGEp
IDw8IDMyKSArIDB4IyNiIyN1KSkKKworCisvLyBUaGUgZXhwcmVzc2lvbiBBUlJBWV9TSVpFKGEp
IGlzIGEgY29tcGlsZS10aW1lIGNvbnN0YW50IG9mIHR5cGUKKy8vIHNpemVfdCB3aGljaCByZXBy
ZXNlbnRzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgb2YgdGhlIGdpdmVuCisvLyBhcnJheS4gWW91
IHNob3VsZCBvbmx5IHVzZSBBUlJBWV9TSVpFIG9uIHN0YXRpY2FsbHkgYWxsb2NhdGVkCisvLyBh
cnJheXMuCisjZGVmaW5lIEFSUkFZX1NJWkUoYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKygoc2l6ZW9mKGEpIC8gc2l6ZW9mKCooYSkpKSAvICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKK3N0YXRpY19jYXN0PHNpemVfdD4oIShzaXplb2YoYSkgJSBzaXplb2YoKihhKSkp
KSkKKworLy8gQSBtYWNybyB0byBkaXNhbGxvdyB0aGUgZXZpbCBjb3B5IGNvbnN0cnVjdG9yIGFu
ZCBvcGVyYXRvcj0gZnVuY3Rpb25zCisvLyBUaGlzIHNob3VsZCBiZSB1c2VkIGluIHRoZSBwcml2
YXRlOiBkZWNsYXJhdGlvbnMgZm9yIGEgY2xhc3MKKyNkZWZpbmUgRElTQUxMT1dfQ09QWV9BTkRf
QVNTSUdOKFR5cGVOYW1lKSAgICAgIFwKK1R5cGVOYW1lKGNvbnN0IFR5cGVOYW1lJik7ICAgICAg
ICAgICAgICAgICAgICBcCit2b2lkIG9wZXJhdG9yPShjb25zdCBUeXBlTmFtZSYpCisKKy8vIEEg
bWFjcm8gdG8gZGlzYWxsb3cgYWxsIHRoZSBpbXBsaWNpdCBjb25zdHJ1Y3RvcnMsIG5hbWVseSB0
aGUKKy8vIGRlZmF1bHQgY29uc3RydWN0b3IsIGNvcHkgY29uc3RydWN0b3IgYW5kIG9wZXJhdG9y
PSBmdW5jdGlvbnMuCisvLworLy8gVGhpcyBzaG91bGQgYmUgdXNlZCBpbiB0aGUgcHJpdmF0ZTog
ZGVjbGFyYXRpb25zIGZvciBhIGNsYXNzCisvLyB0aGF0IHdhbnRzIHRvIHByZXZlbnQgYW55b25l
IGZyb20gaW5zdGFudGlhdGluZyBpdC4gVGhpcyBpcworLy8gZXNwZWNpYWxseSB1c2VmdWwgZm9y
IGNsYXNzZXMgY29udGFpbmluZyBvbmx5IHN0YXRpYyBtZXRob2RzLgorI2RlZmluZSBESVNBTExP
V19JTVBMSUNJVF9DT05TVFJVQ1RPUlMoVHlwZU5hbWUpIFwKK1R5cGVOYW1lKCk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFR5
cGVOYW1lKQorCituYW1lc3BhY2UgV1RGIHsKKworbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9u
IHsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgaW50IGtDaGFyU2l6ZSA9IHNpemVvZihjaGFyKTsK
KyAgICAKKyAgICAvLyBSZXR1cm5zIHRoZSBtYXhpbXVtIG9mIHRoZSB0d28gcGFyYW1ldGVycy4K
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgVCBNYXgoVCBhLCBUIGIpIHsK
KyAgICAgICAgcmV0dXJuIGEgPCBiID8gYiA6IGE7CisgICAgfQorICAgIAorICAgIAorICAgIC8v
IFJldHVybnMgdGhlIG1pbmltdW0gb2YgdGhlIHR3byBwYXJhbWV0ZXJzLgorICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPgorICAgIHN0YXRpYyBUIE1pbihUIGEsIFQgYikgeworICAgICAgICByZXR1
cm4gYSA8IGIgPyBhIDogYjsKKyAgICB9CisgICAgCisgICAgCisgICAgaW5saW5lIGludCBTdHJM
ZW5ndGgoY29uc3QgY2hhciogc3RyaW5nKSB7CisgICAgICAgIHNpemVfdCBsZW5ndGggPSBzdHJs
ZW4oc3RyaW5nKTsKKyAgICAgICAgQVNTRVJUKGxlbmd0aCA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+
KHN0YXRpY19jYXN0PGludD4obGVuZ3RoKSkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
aW50PihsZW5ndGgpOworICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIGlzIGEgc2ltcGxpZmllZCB2
ZXJzaW9uIG9mIFY4J3MgVmVjdG9yIGNsYXNzLgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgor
ICAgIGNsYXNzIFZlY3RvciB7CisgICAgcHVibGljOgorICAgICAgICBWZWN0b3IoKSA6IHN0YXJ0
XyhOVUxMKSwgbGVuZ3RoXygwKSB7fQorICAgICAgICBWZWN0b3IoVCogZGF0YSwgaW50IGxlbmd0
aCkgOiBzdGFydF8oZGF0YSksIGxlbmd0aF8obGVuZ3RoKSB7CisgICAgICAgICAgICBBU1NFUlQo
bGVuZ3RoID09IDAgfHwgKGxlbmd0aCA+IDAgJiYgZGF0YSAhPSBOVUxMKSk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIC8vIFJldHVybnMgYSB2ZWN0b3IgdXNpbmcgdGhlIHNhbWUgYmFj
a2luZyBzdG9yYWdlIGFzIHRoaXMgb25lLAorICAgICAgICAvLyBzcGFubmluZyBmcm9tIGFuZCBp
bmNsdWRpbmcgJ2Zyb20nLCB0byBidXQgbm90IGluY2x1ZGluZyAndG8nLgorICAgICAgICBWZWN0
b3I8VD4gU3ViVmVjdG9yKGludCBmcm9tLCBpbnQgdG8pIHsKKyAgICAgICAgICAgIEFTU0VSVCh0
byA8PSBsZW5ndGhfKTsKKyAgICAgICAgICAgIEFTU0VSVChmcm9tIDwgdG8pOworICAgICAgICAg
ICAgQVNTRVJUKDAgPD0gZnJvbSk7CisgICAgICAgICAgICByZXR1cm4gVmVjdG9yPFQ+KHN0YXJ0
KCkgKyBmcm9tLCB0byAtIGZyb20pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBS
ZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIHZlY3Rvci4KKyAgICAgICAgaW50IGxlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIGxlbmd0aF87IH0KKyAgICAgICAgCisgICAgICAgIC8vIFJldHVybnMgd2hl
dGhlciBvciBub3QgdGhlIHZlY3RvciBpcyBlbXB0eS4KKyAgICAgICAgYm9vbCBpc19lbXB0eSgp
IGNvbnN0IHsgcmV0dXJuIGxlbmd0aF8gPT0gMDsgfQorICAgICAgICAKKyAgICAgICAgLy8gUmV0
dXJucyB0aGUgcG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIGRhdGEgaW4gdGhlIHZlY3Rvci4K
KyAgICAgICAgVCogc3RhcnQoKSBjb25zdCB7IHJldHVybiBzdGFydF87IH0KKyAgICAgICAgCisg
ICAgICAgIC8vIEFjY2VzcyBpbmRpdmlkdWFsIHZlY3RvciBlbGVtZW50cyAtIGNoZWNrcyBib3Vu
ZHMgaW4gZGVidWcgbW9kZS4KKyAgICAgICAgVCYgb3BlcmF0b3JbXShpbnQgaW5kZXgpIGNvbnN0
IHsKKyAgICAgICAgICAgIEFTU0VSVCgwIDw9IGluZGV4ICYmIGluZGV4IDwgbGVuZ3RoXyk7Cisg
ICAgICAgICAgICByZXR1cm4gc3RhcnRfW2luZGV4XTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgVCYgZmlyc3QoKSB7IHJldHVybiBzdGFydF9bMF07IH0KKyAgICAgICAgCisgICAgICAg
IFQmIGxhc3QoKSB7IHJldHVybiBzdGFydF9bbGVuZ3RoXyAtIDFdOyB9CisgICAgICAgIAorICAg
IHByaXZhdGU6CisgICAgICAgIFQqIHN0YXJ0XzsKKyAgICAgICAgaW50IGxlbmd0aF87CisgICAg
fTsKKyAgICAKKyAgICAKKyAgICAvLyBIZWxwZXIgY2xhc3MgZm9yIGJ1aWxkaW5nIHJlc3VsdCBz
dHJpbmdzIGluIGEgY2hhcmFjdGVyIGJ1ZmZlci4gVGhlCisgICAgLy8gcHVycG9zZSBvZiB0aGUg
Y2xhc3MgaXMgdG8gdXNlIHNhZmUgb3BlcmF0aW9ucyB0aGF0IGNoZWNrcyB0aGUKKyAgICAvLyBi
dWZmZXIgYm91bmRzIG9uIGFsbCBvcGVyYXRpb25zIGluIGRlYnVnIG1vZGUuCisgICAgY2xhc3Mg
U3RyaW5nQnVpbGRlciB7CisgICAgcHVibGljOgorICAgICAgICBTdHJpbmdCdWlsZGVyKGNoYXIq
IGJ1ZmZlciwgaW50IHNpemUpCisgICAgICAgIDogYnVmZmVyXyhidWZmZXIsIHNpemUpLCBwb3Np
dGlvbl8oMCkgeyB9CisgICAgICAgIAorICAgICAgICB+U3RyaW5nQnVpbGRlcigpIHsgaWYgKCFp
c19maW5hbGl6ZWQoKSkgRmluYWxpemUoKTsgfQorICAgICAgICAKKyAgICAgICAgaW50IHNpemUo
KSBjb25zdCB7IHJldHVybiBidWZmZXJfLmxlbmd0aCgpOyB9CisgICAgICAgIAorICAgICAgICAv
LyBHZXQgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIGJ1aWxkZXIuCisgICAgICAgIGludCBw
b3NpdGlvbigpIGNvbnN0IHsKKyAgICAgICAgICAgIEFTU0VSVCghaXNfZmluYWxpemVkKCkpOwor
ICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uXzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgLy8gUmVzZXQgdGhlIHBvc2l0aW9uLgorICAgICAgICB2b2lkIFJlc2V0KCkgeyBwb3NpdGlv
bl8gPSAwOyB9CisgICAgICAgIAorICAgICAgICAvLyBBZGQgYSBzaW5nbGUgY2hhcmFjdGVyIHRv
IHRoZSBidWlsZGVyLiBJdCBpcyBub3QgYWxsb3dlZCB0byBhZGQKKyAgICAgICAgLy8gMC1jaGFy
YWN0ZXJzOyB1c2UgdGhlIEZpbmFsaXplKCkgbWV0aG9kIHRvIHRlcm1pbmF0ZSB0aGUgc3RyaW5n
CisgICAgICAgIC8vIGluc3RlYWQuCisgICAgICAgIHZvaWQgQWRkQ2hhcmFjdGVyKGNoYXIgYykg
eworICAgICAgICAgICAgQVNTRVJUKGMgIT0gJ1wwJyk7CisgICAgICAgICAgICBBU1NFUlQoIWlz
X2ZpbmFsaXplZCgpICYmIHBvc2l0aW9uXyA8IGJ1ZmZlcl8ubGVuZ3RoKCkpOworICAgICAgICAg
ICAgYnVmZmVyX1twb3NpdGlvbl8rK10gPSBjOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICAvLyBBZGQgYW4gZW50aXJlIHN0cmluZyB0byB0aGUgYnVpbGRlci4gVXNlcyBzdHJsZW4oKSBp
bnRlcm5hbGx5IHRvCisgICAgICAgIC8vIGNvbXB1dGUgdGhlIGxlbmd0aCBvZiB0aGUgaW5wdXQg
c3RyaW5nLgorICAgICAgICB2b2lkIEFkZFN0cmluZyhjb25zdCBjaGFyKiBzKSB7CisgICAgICAg
ICAgICBBZGRTdWJzdHJpbmcocywgU3RyTGVuZ3RoKHMpKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgLy8gQWRkIHRoZSBmaXJzdCAnbicgY2hhcmFjdGVycyBvZiB0aGUgZ2l2ZW4gc3Ry
aW5nICdzJyB0byB0aGUKKyAgICAgICAgLy8gYnVpbGRlci4gVGhlIGlucHV0IHN0cmluZyBtdXN0
IGhhdmUgZW5vdWdoIGNoYXJhY3RlcnMuCisgICAgICAgIHZvaWQgQWRkU3Vic3RyaW5nKGNvbnN0
IGNoYXIqIHMsIGludCBuKSB7CisgICAgICAgICAgICBBU1NFUlQoIWlzX2ZpbmFsaXplZCgpICYm
IHBvc2l0aW9uXyArIG4gPCBidWZmZXJfLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChz
dGF0aWNfY2FzdDxzaXplX3Q+KG4pIDw9IHN0cmxlbihzKSk7CisgICAgICAgICAgICBtZW1jcHko
JmJ1ZmZlcl9bcG9zaXRpb25fXSwgcywgbiAqIGtDaGFyU2l6ZSk7CisgICAgICAgICAgICBwb3Np
dGlvbl8gKz0gbjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgCisgICAgICAgIC8vIEFk
ZCBjaGFyYWN0ZXIgcGFkZGluZyB0byB0aGUgYnVpbGRlci4gSWYgY291bnQgaXMgbm9uLXBvc2l0
aXZlLAorICAgICAgICAvLyBub3RoaW5nIGlzIGFkZGVkIHRvIHRoZSBidWlsZGVyLgorICAgICAg
ICB2b2lkIEFkZFBhZGRpbmcoY2hhciBjLCBpbnQgY291bnQpIHsKKyAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgIEFkZENoYXJhY3Rl
cihjKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRmlu
YWxpemUgdGhlIHN0cmluZyBieSAwLXRlcm1pbmF0aW5nIGl0IGFuZCByZXR1cm5pbmcgdGhlIGJ1
ZmZlci4KKyAgICAgICAgY2hhciogRmluYWxpemUoKSB7CisgICAgICAgICAgICBBU1NFUlQoIWlz
X2ZpbmFsaXplZCgpICYmIHBvc2l0aW9uXyA8IGJ1ZmZlcl8ubGVuZ3RoKCkpOworICAgICAgICAg
ICAgYnVmZmVyX1twb3NpdGlvbl9dID0gJ1wwJzsKKyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBu
b2JvZHkgbWFuYWdlZCB0byBhZGQgYSAwLWNoYXJhY3RlciB0byB0aGUKKyAgICAgICAgICAgIC8v
IGJ1ZmZlciB3aGlsZSBidWlsZGluZyB0aGUgc3RyaW5nLgorICAgICAgICAgICAgQVNTRVJUKHN0
cmxlbihidWZmZXJfLnN0YXJ0KCkpID09IHN0YXRpY19jYXN0PHNpemVfdD4ocG9zaXRpb25fKSk7
CisgICAgICAgICAgICBwb3NpdGlvbl8gPSAtMTsKKyAgICAgICAgICAgIEFTU0VSVChpc19maW5h
bGl6ZWQoKSk7CisgICAgICAgICAgICByZXR1cm4gYnVmZmVyXy5zdGFydCgpOworICAgICAgICB9
CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXJfOwor
ICAgICAgICBpbnQgcG9zaXRpb25fOworICAgICAgICAKKyAgICAgICAgYm9vbCBpc19maW5hbGl6
ZWQoKSBjb25zdCB7IHJldHVybiBwb3NpdGlvbl8gPCAwOyB9CisgICAgICAgIAorICAgICAgICBE
SVNBTExPV19JTVBMSUNJVF9DT05TVFJVQ1RPUlMoU3RyaW5nQnVpbGRlcik7CisgICAgfTsKKyAg
ICAKKyAgICAvLyBUaGUgdHlwZS1iYXNlZCBhbGlhc2luZyBydWxlIGFsbG93cyB0aGUgY29tcGls
ZXIgdG8gYXNzdW1lIHRoYXQgcG9pbnRlcnMgb2YKKyAgICAvLyBkaWZmZXJlbnQgdHlwZXMgKGZv
ciBzb21lIGRlZmluaXRpb24gb2YgZGlmZmVyZW50KSBuZXZlciBhbGlhcyBlYWNoIG90aGVyLgor
ICAgIC8vIFRodXMgdGhlIGZvbGxvd2luZyBjb2RlIGRvZXMgbm90IHdvcms6CisgICAgLy8KKyAg
ICAvLyBmbG9hdCBmID0gZm9vKCk7CisgICAgLy8gaW50IGZiaXRzID0gKihpbnQqKSgmZik7Cisg
ICAgLy8KKyAgICAvLyBUaGUgY29tcGlsZXIgJ2tub3dzJyB0aGF0IHRoZSBpbnQgcG9pbnRlciBj
YW4ndCByZWZlciB0byBmIHNpbmNlIHRoZSB0eXBlcworICAgIC8vIGRvbid0IG1hdGNoLCBzbyB0
aGUgY29tcGlsZXIgbWF5IGNhY2hlIGYgaW4gYSByZWdpc3RlciwgbGVhdmluZyByYW5kb20gZGF0
YQorICAgIC8vIGluIGZiaXRzLiAgVXNpbmcgQysrIHN0eWxlIGNhc3RzIG1ha2VzIG5vIGRpZmZl
cmVuY2UsIGhvd2V2ZXIgYSBwb2ludGVyIHRvCisgICAgLy8gY2hhciBkYXRhIGlzIGFzc3VtZWQg
dG8gYWxpYXMgYW55IG90aGVyIHBvaW50ZXIuICBUaGlzIGlzIHRoZSAnbWVtY3B5CisgICAgLy8g
ZXhjZXB0aW9uJy4KKyAgICAvLworICAgIC8vIEJpdF9jYXN0IHVzZXMgdGhlIG1lbWNweSBleGNl
cHRpb24gdG8gbW92ZSB0aGUgYml0cyBmcm9tIGEgdmFyaWFibGUgb2Ygb25lCisgICAgLy8gdHlw
ZSBvZiBhIHZhcmlhYmxlIG9mIGFub3RoZXIgdHlwZS4gIE9mIGNvdXJzZSB0aGUgZW5kIHJlc3Vs
dCBpcyBsaWtlbHkgdG8KKyAgICAvLyBiZSBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQuICBNb3N0
IGNvbXBpbGVycyAoZ2NjLTQuMiBhbmQgTVNWQyAyMDA1KQorICAgIC8vIHdpbGwgY29tcGxldGVs
eSBvcHRpbWl6ZSBCaXRDYXN0IGF3YXkuCisgICAgLy8KKyAgICAvLyBUaGVyZSBpcyBhbiBhZGRp
dGlvbmFsIHVzZSBmb3IgQml0Q2FzdC4KKyAgICAvLyBSZWNlbnQgZ2NjcyB3aWxsIHdhcm4gd2hl
biB0aGV5IHNlZSBjYXN0cyB0aGF0IG1heSByZXN1bHQgaW4gYnJlYWthZ2UgZHVlIHRvCisgICAg
Ly8gdGhlIHR5cGUtYmFzZWQgYWxpYXNpbmcgcnVsZS4gIElmIHlvdSBoYXZlIGNoZWNrZWQgdGhh
dCB0aGVyZSBpcyBubyBicmVha2FnZQorICAgIC8vIHlvdSBjYW4gdXNlIEJpdENhc3QgdG8gY2Fz
dCBvbmUgcG9pbnRlciB0eXBlIHRvIGFub3RoZXIuICBUaGlzIGNvbmZ1c2VzIGdjYworICAgIC8v
IGVub3VnaCB0aGF0IGl0IGNhbiBubyBsb25nZXIgc2VlIHRoYXQgeW91IGhhdmUgY2FzdCBvbmUg
cG9pbnRlciB0eXBlIHRvCisgICAgLy8gYW5vdGhlciB0aHVzIGF2b2lkaW5nIHRoZSB3YXJuaW5n
LgorICAgIHRlbXBsYXRlIDxjbGFzcyBEZXN0LCBjbGFzcyBTb3VyY2U+CisgICAgaW5saW5lIERl
c3QgQml0Q2FzdChjb25zdCBTb3VyY2UmIHNvdXJjZSkgeworICAgICAgICAvLyBDb21waWxlIHRp
bWUgYXNzZXJ0aW9uOiBzaXplb2YoRGVzdCkgPT0gc2l6ZW9mKFNvdXJjZSkKKyAgICAgICAgLy8g
QSBjb21waWxlIGVycm9yIGhlcmUgbWVhbnMgeW91ciBEZXN0IGFuZCBTb3VyY2UgaGF2ZSBkaWZm
ZXJlbnQgc2l6ZXMuCisgICAgICAgIHR5cGVkZWYgY2hhciBWZXJpZnlTaXplc0FyZUVxdWFsW3Np
emVvZihEZXN0KSA9PSBzaXplb2YoU291cmNlKSA/IDEgOiAtMV07CisgICAgICAgIAorICAgICAg
ICBEZXN0IGRlc3Q7CisgICAgICAgIG1lbWNweSgmZGVzdCwgJnNvdXJjZSwgc2l6ZW9mKGRlc3Qp
KTsKKyAgICAgICAgcmV0dXJuIGRlc3Q7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlIDxjbGFz
cyBEZXN0LCBjbGFzcyBTb3VyY2U+CisgICAgaW5saW5lIERlc3QgQml0Q2FzdChTb3VyY2UqIHNv
dXJjZSkgeworICAgICAgICByZXR1cm4gQml0Q2FzdDxEZXN0PihyZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4oc291cmNlKSk7CisgICAgfQorICAgIAorfSAgLy8gbmFtZXNwYWNlIGRvdWJsZV9j
b252ZXJzaW9uCisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgIC8vIERPVUJMRV9DT05W
RVJTSU9OX1VUSUxTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3d0
Zi5wcmkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3d0Zi5wcmkKaW5kZXggY2NjMmY2MDJj
Y2UwNWY1YTA5ZDE5NmJiNzNlNmRmNDdmZWJiMzdhOC4uZjM3YmE5NDdmZDgxNDVlMjRjY2JjZDQ3
MDc4YTJhMmYyZDFlNjQzZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi93
dGYucHJpCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvd3RmLnByaQpAQCAtNiw4ICs2
LDE2IEBAIFNPVVJDRVMgKz0gXAogICAgIHd0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJl
ci5jcHAgXAogICAgIHd0Zi9DdXJyZW50VGltZS5jcHAgXAogICAgIHd0Zi9EYXRlTWF0aC5jcHAg
XAotICAgIHd0Zi9kdG9hLmNwcCBcCiAgICAgd3RmL0RlY2ltYWxOdW1iZXIuY3BwIFwKKyAgICB3
dGYvZHRvYS5jcHAgXAorICAgIHd0Zi9kdG9hL2JpZ251bS1kdG9hLmNjIFwKKyAgICB3dGYvZHRv
YS9iaWdudW0uY2MgXAorICAgIHd0Zi9kdG9hL2NhY2hlZC1wb3dlcnMuY2MgXAorICAgIHd0Zi9k
dG9hL2RpeS1mcC5jYyBcCisgICAgd3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uY2MgXAorICAg
IHd0Zi9kdG9hL2Zhc3QtZHRvYS5jYyBcCisgICAgd3RmL2R0b2EvZml4ZWQtZHRvYS5jYyBcCisg
ICAgd3RmL2R0b2Evc3RydG9kLmNjIFwKICAgICB3dGYvRmFzdE1hbGxvYy5jcHAgXAogICAgIHd0
Zi9nb2JqZWN0L0dPd25QdHIuY3BwIFwKICAgICB3dGYvZ29iamVjdC9HUmVmUHRyLmNwcCBcCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKaW5kZXggYWZjOTQyNTQ4MDEyMWRmNWY2ZDQyNmM1ZDBjNzMxNTBjYTczNGQyYS4uYTEz
NmM5ZDllOWIwMDUyZmY2YTkyMGMwMjk4MzY4NDY5MDIyY2VmOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDI4IEBACisyMDExLTA4LTMxICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBs
ZS5jb20+CisKKyAgICAgICAgSW5jb3Jwb3JhdGUgbmV3ZXIsIGZhc3RlciBkdG9hIGxpYnJhcnkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MzQ2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLgorCisgICAgICAgIEFkZGVkIG5ldyBkdG9hIGxpYnJhcnkgYXQgaHR0cDovL2NvZGUuZ29v
Z2xlLmNvbS9wL2RvdWJsZS1jb252ZXJzaW9uLy4KKyAgICAgICAgUmVwbGFjZWQgb2xkIGNhbGwg
dG8gZHRvYS4gIFRoZSBuZXcgbGlicmFyeSBpcyBtdWNoIGZhc3RlciB0aGFuIHRoZSBvbGQgb25l
LgorICAgICAgICBXZSBzdGlsbCB1c2UgdGhlIG9sZCBkdG9hIGZvciBzb21lIHN0dWZmIGluIFdl
YkNvcmUgYXMgd2VsbCBhcyB0aGUgb2xkIHN0cnRvZCwgCisgICAgICAgIGJ1dCB3ZSBjYW4gcGhh
c2UgdGhlc2Ugb3V0IGV2ZW50dWFsbHkgYXMgd2VsbC4KKworICAgICAgICAqIEZvcndhcmRpbmdI
ZWFkZXJzL3d0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmg6IEFkZGVkLgorICAgICAgICAqIFdl
YkNvcmUudmNwcm9qL2NvcHlGb3J3YXJkaW5nSGVhZGVycy5jbWQ6CisgICAgICAgICogY3NzL0NT
U1ByaW1pdGl2ZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZvcm1hdE51bWJlcik6Cisg
ICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpzZXJpYWxpemVGb3JOdW1iZXJUeXBlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yVmFsdWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhc2ljVmFsdWU6Ondy
aXRlSlNPTik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q29sb3I6OnNlcmlhbGl6ZWQpOgorCiAyMDExLTA4LTMwICBEbWl0cnkgVGl0
b3YgIDxkaW1pY2hAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02NzIxMApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRm9y
d2FyZGluZ0hlYWRlcnMvd3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uODZmYjEyNzg5MzRkYjA3ZGMzM2ZmNTIxOTIzZTFjYTM5ZmU2NDUwMwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9kdG9hL2RvdWJs
ZS1jb252ZXJzaW9uLmgKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX2RvdWJs
ZV9jb252ZXJzaW9uX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfZG91YmxlX2NvbnZlcnNpb25faAor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL2RvdWJsZS1jb252ZXJzaW9uLmg+CisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL2NvcHlGb3J3YXJkaW5nSGVh
ZGVycy5jbWQgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9jb3B5Rm9yd2FyZGluZ0hl
YWRlcnMuY21kCmluZGV4IGRhZDVhZGYzOTJiNmE3ZDc0N2U5ODE2NzFiZjMyOTNhMzllODlmZjAu
LjIyNGNlMDMyODYxZjAwYWY5NTBjMWI1ZTJlMmE4OGMzZTg5YzZkYTkgMTAwNzU1Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL2NvcHlGb3J3YXJkaW5nSGVhZGVycy5jbWQKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovY29weUZvcndhcmRpbmdIZWFkZXJzLmNt
ZApAQCAtMTAsNiArMTAsNyBAQCBta2RpciAyPk5VTCAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVc
aW5jbHVkZVxXZWJDb3JlXEZvcndhcmRpbmdIZWFkZXJzXG1hc20iCiBta2RpciAyPk5VTCAiJUNP
TkZJR1VSQVRJT05CVUlMRERJUiVcaW5jbHVkZVxXZWJDb3JlXEZvcndhcmRpbmdIZWFkZXJzXHBy
b2ZpbGVyIgogbWtkaXIgMj5OVUwgIiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGluY2x1ZGVcV2Vi
Q29yZVxGb3J3YXJkaW5nSGVhZGVyc1xoZWFwIgogbWtkaXIgMj5OVUwgIiVDT05GSUdVUkFUSU9O
QlVJTERESVIlXGluY2x1ZGVcV2ViQ29yZVxGb3J3YXJkaW5nSGVhZGVyc1x3dGYiCitta2RpciAy
Pk5VTCAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVcaW5jbHVkZVxXZWJDb3JlXEZvcndhcmRpbmdI
ZWFkZXJzXHd0ZlxkdG9hIgogbWtkaXIgMj5OVUwgIiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGlu
Y2x1ZGVcV2ViQ29yZVxGb3J3YXJkaW5nSGVhZGVyc1x3dGZcdGV4dCIKIG1rZGlyIDI+TlVMICIl
Q09ORklHVVJBVElPTkJVSUxERElSJVxpbmNsdWRlXFdlYkNvcmVcRm9yd2FyZGluZ0hlYWRlcnNc
d3RmXHVuaWNvZGUiCiBta2RpciAyPk5VTCAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVcaW5jbHVk
ZVxXZWJDb3JlXEZvcndhcmRpbmdIZWFkZXJzXHd0Zlx1bmljb2RlXGljdSIKQEAgLTgxLDYgKzgy
LDcgQEAgeGNvcHkgL3kgL2QgIiVQcm9qZWN0RGlyJS4uXEZvcndhcmRpbmdIZWFkZXJzXG1hc21c
Ki5oIiAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiUKIHhjb3B5IC95IC9kICIlUHJvamVjdERpciUu
LlxGb3J3YXJkaW5nSGVhZGVyc1xwcm9maWxlclwqLmgiICIlQ09ORklHVVJBVElPTkJVSUxERElS
JVxpbmNsdWRlXFdlYkNvcmVcRm9yd2FyZGluZ0hlYWRlcnNccHJvZmlsZXIiCiB4Y29weSAveSAv
ZCAiJVByb2plY3REaXIlLi5cRm9yd2FyZGluZ0hlYWRlcnNcaGVhcFwqLmgiICIlQ09ORklHVVJB
VElPTkJVSUxERElSJVxpbmNsdWRlXFdlYkNvcmVcRm9yd2FyZGluZ0hlYWRlcnNcaGVhcCIKIHhj
b3B5IC95IC9kICIlUHJvamVjdERpciUuLlxGb3J3YXJkaW5nSGVhZGVyc1x3dGZcKi5oIiAiJUNP
TkZJR1VSQVRJT05CVUlMRERJUiVcaW5jbHVkZVxXZWJDb3JlXEZvcndhcmRpbmdIZWFkZXJzXHd0
ZiIKK3hjb3B5IC95IC9kICIlUHJvamVjdERpciUuLlxGb3J3YXJkaW5nSGVhZGVyc1x3dGZcZHRv
YVwqLmgiICIlQ09ORklHVVJBVElPTkJVSUxERElSJVxpbmNsdWRlXFdlYkNvcmVcRm9yd2FyZGlu
Z0hlYWRlcnNcd3RmXGR0b2EiCiB4Y29weSAveSAvZCAiJVByb2plY3REaXIlLi5cRm9yd2FyZGlu
Z0hlYWRlcnNcd3RmXHRleHRcKi5oIiAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVcaW5jbHVkZVxX
ZWJDb3JlXEZvcndhcmRpbmdIZWFkZXJzXHd0Zlx0ZXh0IgogeGNvcHkgL3kgL2QgIiVQcm9qZWN0
RGlyJS4uXEZvcndhcmRpbmdIZWFkZXJzXHd0Zlx1bmljb2RlXCouaCIgIiVDT05GSUdVUkFUSU9O
QlVJTERESVIlXGluY2x1ZGVcV2ViQ29yZVxGb3J3YXJkaW5nSGVhZGVyc1x3dGZcdW5pY29kZSIK
IHhjb3B5IC95IC9kICIlUHJvamVjdERpciUuLlxGb3J3YXJkaW5nSGVhZGVyc1x3dGZcdW5pY29k
ZVxpY3VcKi5oIiAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVcaW5jbHVkZVxXZWJDb3JlXEZvcndh
cmRpbmdIZWFkZXJzXHd0Zlx1bmljb2RlXGljdSIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0
aXZlVmFsdWUuY3BwCmluZGV4IDk4MTZkYTU3NzA3MWUyNzQ2MGJiMzQ4YTI2YTI5MGU1N2E5YzQ2
NDguLmI3MDEzODNjOTYyMmZiNjYzNjQyZmIwOWIwMzZkN2UzNGYwY2MxYzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcApAQCAtNjA5LDcgKzYwOSw3IEBAIGludCBD
U1NQcmltaXRpdmVWYWx1ZTo6Z2V0SWRlbnQoKSBjb25zdAogc3RhdGljIFN0cmluZyBmb3JtYXRO
dW1iZXIoZG91YmxlIG51bWJlcikKIHsKICAgICBEZWNpbWFsTnVtYmVyIGRlY2ltYWwobnVtYmVy
KTsKLSAgICAKKwogICAgIFN0cmluZ0J1ZmZlciBidWZmZXIoZGVjaW1hbC5idWZmZXJMZW5ndGhG
b3JTdHJpbmdEZWNpbWFsKCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGRlY2ltYWwudG9TdHJp
bmdEZWNpbWFsKGJ1ZmZlci5jaGFyYWN0ZXJzKCksIGJ1ZmZlci5sZW5ndGgoKSk7CiAgICAgQVNT
RVJUX1VOVVNFRChsZW5ndGgsIGxlbmd0aCA9PSBidWZmZXIubGVuZ3RoKCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcAppbmRleCAwNThiYjkz
MzljZmZmNWQxODNlNDlmN2QyNTg4MjU4NzMwMjBjYTEyLi4wMzYyMjFiMjFiMTZmOGY1MmFlMjU3
MmZiZDM0NjA5ODk2YjdhYTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MUGFyc2VySWRpb21zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MUGFyc2VySWRpb21zLmNwcApAQCAtNjMsOCArNjMsNyBAQCBTdHJpbmcgc2VyaWFsaXplRm9y
TnVtYmVyVHlwZShkb3VibGUgbnVtYmVyKQogICAgIC8vIEFjY29yZGluZyB0byBIVE1MNSwgInRo
ZSBiZXN0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBudW1iZXIgbiBhcyBhIGZsb2F0aW5nCiAgICAg
Ly8gcG9pbnQgbnVtYmVyIiBpcyBhIHN0cmluZyBwcm9kdWNlZCBieSBhcHBseWluZyBUb1N0cmlu
ZygpIHRvIG4uCiAgICAgTnVtYmVyVG9TdHJpbmdCdWZmZXIgYnVmZmVyOwotICAgIHVuc2lnbmVk
IGxlbmd0aCA9IG51bWJlclRvU3RyaW5nKG51bWJlciwgYnVmZmVyKTsKLSAgICByZXR1cm4gU3Ry
aW5nKGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICByZXR1cm4gU3RyaW5nKG51bWJlclRvU3RyaW5nKG51
bWJlciwgYnVmZmVyKSk7CiB9CiAKIGJvb2wgcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUoY29u
c3QgU3RyaW5nJiBzdHJpbmcsIGRvdWJsZSogcmVzdWx0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcAppbmRleCA5MmJhYmQ2N2U5OGQ0YWM1OTBjMzU1MWJh
NGFmODZhZjk5NzQ4YmY2Li4xYmQ4N2VjYjhhZGEyYjI2MmQ0YzdkZDU2MmIzYTZiNGQ4MTBlMTAy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcApAQCAt
MzQsNiArMzQsNyBAQAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAKICNpbmNsdWRlIDx3dGYvRGVj
aW1hbE51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi9kdG9hLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtNjI1LDcgKzYyNiw3IEBAIHZvaWQgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6d3JpdGVK
U09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkgY29uc3QKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgb3V0cHV0LT5hcHBlbmQoZmFsc2VTdHJpbmcsIDUpOwogICAgIH0gZWxzZSBpZiAodHlwZSgp
ID09IFR5cGVOdW1iZXIpIHsKLSAgICAgICAgTnVtYmVyVG9TdHJpbmdCdWZmZXIgYnVmZmVyOwor
ICAgICAgICBOdW1iZXJUb1VTdHJpbmdCdWZmZXIgYnVmZmVyOwogICAgICAgICBpZiAoIWlzZmlu
aXRlKG1fZG91YmxlVmFsdWUpKSB7CiAgICAgICAgICAgICBvdXRwdXQtPmFwcGVuZChudWxsU3Ry
aW5nLCA0KTsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yLmNwcAppbmRleCA0OGY3NTIwMzAxNmJmN2Y1MDZjODE4ZTRjNDFhODczZGZm
M2NlYjhiLi4yMmY4MTY4NWEwMGQ4MzY0MjM1YzM0ZDJjN2RmNTI1MWE2N2IwNzY4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCkBAIC0yMDksNyArMjA5LDcg
QEAgU3RyaW5nIENvbG9yOjpzZXJpYWxpemVkKCkgY29uc3QKICAgICBpZiAoIWFscGhhKCkpCiAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoJzAnKTsKICAgICBlbHNlIHsKLSAgICAgICAgTnVtYmVyVG9T
dHJpbmdCdWZmZXIgYnVmZmVyOworICAgICAgICBOdW1iZXJUb1VTdHJpbmdCdWZmZXIgYnVmZmVy
OwogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBEZWNpbWFsTnVtYmVyKGFscGhhKCkgLyAyNTUu
MCkudG9TdHJpbmdEZWNpbWFsKGJ1ZmZlciwgV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0
aCk7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoYnVmZmVyLCBsZW5ndGgpOwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>106430</attachid>
            <date>2011-09-06 09:48:27 -0700</date>
            <delta_ts>2011-09-06 09:48:27 -0700</delta_ts>
            <desc>Sunspider results</desc>
            <filename>sunspider_results.txt</filename>
            <type>text/plain</type>
            <size>2500</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">Q29uZiMxOiAvVm9sdW1lcy9EYXRhL1dlYktpdC1jbGVhbi9XZWJLaXRCdWlsZC9SZWxlYXNlL2pz
YwpDb25mIzI6IC9Wb2x1bWVzL0RhdGEvV2ViS2l0LUEvV2ViS2l0QnVpbGQvUmVsZWFzZS9qc2MK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmYjMSAgICAgICAgICAgICAgICAg
Q29uZiMyICAgICAgIAozZC1jdWJlICAgICAgICAgICAgICAgICAgICAgICA4LjM4NjErLTAuMDYx
OCAgIF4gICAgIDguMjg1NistMC4wMzgyICAgICAgXiBkZWZpbml0ZWx5IDEuMDEyMXggZmFzdGVy
CjNkLW1vcnBoICAgICAgICAgICAgICAgICAgICAgIDguMDkyNSstMC4wMzQ4ICAgPyAgICAgOC4x
MzgxKy0wLjA1MzUgICAgICA/CjNkLXJheXRyYWNlICAgICAgICAgICAgICAgICAgIDguMjgxMyst
MC4wOTA5ICAgXiAgICAgNy44Mzc0Ky0wLjA2ODEgICAgICBeIGRlZmluaXRlbHkgMS4wNTY2eCBm
YXN0ZXIKYWNjZXNzLWJpbmFyeS10cmVlcyAgICAgICAgICAgMi41Mzc3Ky0wLjAzMTMgICAgICAg
ICAyLjUyNjgrLTAuMDI5MiAgICAgIAphY2Nlc3MtZmFubmt1Y2ggICAgICAgICAgICAgIDEyLjkw
NzcrLTAuMDY0NiAgID8gICAgMTIuOTI2MistMC4wNTQ4ICAgICAgPwphY2Nlc3MtbmJvZHkgICAg
ICAgICAgICAgICAgICA0LjkzMjArLTAuMDIxMSAgICAgICAgIDQuOTI4NistMC4wMTQ1ICAgICAg
CmFjY2Vzcy1uc2lldmUgICAgICAgICAgICAgICAgIDMuMDgyNCstMC4wMjYwICAgICAgICAgMy4w
NzA2Ky0wLjAyMDcgICAgICAKYml0b3BzLTNiaXQtYml0cy1pbi1ieXRlICAgICAgMS44OTIwKy0w
LjAzNDEgICAgICAgICAxLjg2OTIrLTAuMDI4NSAgICAgICAgbWlnaHQgYmUgMS4wMTIyeCBmYXN0
ZXIKYml0b3BzLWJpdHMtaW4tYnl0ZSAgICAgICAgICAgNS41ODU3Ky0wLjEwMzUgICA/ICAgICA1
LjYwNzMrLTAuMDk4NyAgICAgID8KYml0b3BzLWJpdHdpc2UtYW5kICAgICAgICAgICAgNC4xMTg5
Ky0wLjAxMzMgICAgICAgICA0LjExNDcrLTAuMDEyMCAgICAgIApiaXRvcHMtbnNpZXZlLWJpdHMg
ICAgICAgICAgICA1LjY2NTQrLTAuMDE0NyAgID8gICAgIDUuNzE1NystMC4wMzg3ICAgICAgPwpj
b250cm9sZmxvdy1yZWN1cnNpdmUgICAgICAgICAyLjI5NzQrLTAuMDMxMyAgICAgICAgIDIuMjk1
MSstMC4wMzA5ICAgICAgCmNyeXB0by1hZXMgICAgICAgICAgICAgICAgICAgIDYuODkzMistMC4w
NDQ5ICAgICAgICAgNi44NzEzKy0wLjAzNjggICAgICAKY3J5cHRvLW1kNSAgICAgICAgICAgICAg
ICAgICAgMy4wNTM4Ky0wLjA0NzIgICAgICAgICAzLjAyNjkrLTAuMDQ4NyAgICAgIApjcnlwdG8t
c2hhMSAgICAgICAgICAgICAgICAgICAyLjQ2NTIrLTAuMDMyMCAgICAgICAgIDIuNDU1OCstMC4w
MzIxICAgICAgCmRhdGUtZm9ybWF0LXRvZnRlICAgICAgICAgICAgMTAuOTU3NCstMC4wNjA1ICAg
PyAgICAxMS4wMDcyKy0wLjE1MzMgICAgICA/CmRhdGUtZm9ybWF0LXhwYXJiICAgICAgICAgICAg
IDkuODk0MSstMC4xNjI4ICAgICAgICAgOS44MzEyKy0wLjIwNDAgICAgICAKbWF0aC1jb3JkaWMg
ICAgICAgICAgICAgICAgICAgNy4xNTY4Ky0wLjA2MTkgICAgICAgICA3LjE0MDYrLTAuMDI4MSAg
ICAgIAptYXRoLXBhcnRpYWwtc3VtcyAgICAgICAgICAgIDEwLjcxMDErLTAuMDUzMiAgID8gICAg
MTAuNzc4OCstMC4wODM0ICAgICAgPwptYXRoLXNwZWN0cmFsLW5vcm0gICAgICAgICAgICAyLjcy
MzgrLTAuMDIwNiAgID8gICAgIDIuNzUyOSstMC4wMjYwICAgICAgPyBtaWdodCBiZSAxLjAxMDd4
IHNsb3dlcgpyZWdleHAtZG5hICAgICAgICAgICAgICAgICAgIDEyLjAxNDYrLTAuMDU2MyAgID8g
ICAgMTIuMTEzNCstMC4xMDYxICAgICAgPwpzdHJpbmctYmFzZTY0ICAgICAgICAgICAgICAgICA2
LjU4NjMrLTAuMDg0MSAgICAgICAgIDYuNDk0MystMC4wNzY1ICAgICAgICBtaWdodCBiZSAxLjAx
NDJ4IGZhc3RlcgpzdHJpbmctZmFzdGEgICAgICAgICAgICAgICAgICA4LjM4MzkrLTAuMDQxNyAg
ID8gICAgIDguNDM5NistMC4wNTA2ICAgICAgPwpzdHJpbmctdGFnY2xvdWQgICAgICAgICAgICAg
IDE1LjI1NjkrLTAuMDc0MCAgIF4gICAgMTMuMjI5MCstMC4wNDM1ICAgICAgXiBkZWZpbml0ZWx5
IDEuMTUzM3ggZmFzdGVyCnN0cmluZy11bnBhY2stY29kZSAgICAgICAgICAgMjAuODQ1MistMC4x
NjYzICAgISAgICAyMS4xODQ5Ky0wLjE1NzEgICAgICAhIGRlZmluaXRlbHkgMS4wMTYzeCBzbG93
ZXIKc3RyaW5nLXZhbGlkYXRlLWlucHV0ICAgICAgICAgNy4yNDA1Ky0wLjIwNjIgICA/ICAgICA3
LjQyNzkrLTAuMjMwOSAgICAgID8gbWlnaHQgYmUgMS4wMjU5eCBzbG93ZXIKQVZFUkFHRSAgICAg
ICAgICAgICAgICAgICAgICAgNy4zODMxKy0wLjAzMTQgICBeICAgICA3LjMxMDQrLTAuMDMxMiAg
ICAgIF4gZGVmaW5pdGVseSAxLjAxMDB4IGZhc3RlcgpHRU9NRUFOICAgICAgICAgICAgICAgICAg
ICAgICA2LjExODIrLTAuMDMxOSAgICAgICAgIDYuMDc3NCstMC4wMzE2ICAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>106431</attachid>
            <date>2011-09-06 09:48:53 -0700</date>
            <delta_ts>2011-09-06 09:48:53 -0700</delta_ts>
            <desc>V8 results</desc>
            <filename>v8_results.txt</filename>
            <type>text/plain</type>
            <size>839</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">Q29uZiMxOiAvVm9sdW1lcy9EYXRhL1dlYktpdC1jbGVhbi9XZWJLaXRCdWlsZC9SZWxlYXNlL2pz
YwpDb25mIzI6IC9Wb2x1bWVzL0RhdGEvV2ViS2l0LUEvV2ViS2l0QnVpbGQvUmVsZWFzZS9qc2MK
ICAgICAgICAgICAgICAgICAgICAgIENvbmYjMSAgICAgICAgICAgICAgICAgQ29uZiMyICAgICAg
IApjcnlwdG8gICAgICAgICAgMTAxLjYxNTUrLTAuODM0OSAgIF4gICAxMDAuMTQ0MistMC4yMjM4
ICAgICAgXiBkZWZpbml0ZWx5IDEuMDE0N3ggZmFzdGVyCmRlbHRhYmx1ZSAgICAgICAyOTkuOTYw
MystMi43MzEwICAgPyAgIDMwMS41MjAzKy00LjAzNTQgICAgICA/CmVhcmxleS1ib3llciAgICAx
MjIuOTY0MCstMC41NDE2ICAgPyAgIDEyMy43NTcwKy0xLjA0NTAgICAgICA/CnJheXRyYWNlICAg
ICAgICAgODcuMjUwMSstMC4zNDg0ICAgICAgICA4Ni4zMzg5Ky0wLjU2NjUgICAgICAgIG1pZ2h0
IGJlIDEuMDEwNnggZmFzdGVyCnJlZ2V4cCAgICAgICAgICAxMzEuODUxOCstMS44NDA2ICAgICAg
IDEzMC45NzU1Ky0wLjM0MzUgICAgICAKcmljaGFyZHMgICAgICAgIDMyMi4xNTMwKy0zLjQ1ODAg
ICAgICAgMzIxLjkzNjcrLTEuMDk5MiAgICAgIApzcGxheSAgICAgICAgICAgMTU1LjEyNjErLTEu
OTc3MiAgIF4gICAxNDcuMjAyOSstMS40MTI2ICAgICAgXiBkZWZpbml0ZWx5IDEuMDUzOHggZmFz
dGVyCkFWRVJBR0UgICAgICAgICAxNzQuNDE3MystMC43ODA2ICAgICAgIDE3My4xMjUxKy0wLjc5
MjcgICAgICAKR0VPTUVBTiAgICAgICAgIDE1NS4wMzY3Ky0wLjcwNTMgICBeICAgMTUzLjQyOTgr
LTAuNTM2MSAgICAgIF4gZGVmaW5pdGVseSAxLjAxMDV4IGZhc3Rlcgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>