<?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>216235</bug_id>
          
          <creation_ts>2020-09-06 20:36:50 -0700</creation_ts>
          <short_desc>[WebIDL] Support extended attributes on includes statements to allow for conditionalized inclusion</short_desc>
          <delta_ts>2020-09-07 11:43:35 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>andersca</cc>
    
    <cc>annulen</cc>
    
    <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>joepeck</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1686298</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-09-06 20:36:50 -0700</bug_when>
    <thetext>[WebIDL] Support extended attributes on includes statements to allow for conditionalized inclusion</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686299</commentid>
    <comment_count>1</comment_count>
      <attachid>408163</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-09-06 20:54:49 -0700</bug_when>
    <thetext>Created attachment 408163
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686387</commentid>
    <comment_count>2</comment_count>
      <attachid>408163</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-07 10:29:40 -0700</bug_when>
    <thetext>Comment on attachment 408163
Patch

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

All about those sets.

&gt; Source/WebCore/animation/AnimationFrameProvider.idl:29
&gt; +    long requestAnimationFrame(RequestAnimationFrameCallback callback); // FIXME: Should return an unsigned long.
&gt; +    undefined cancelAnimationFrame(long handle); // FIXME: handle should be an unsigned long.

I’m going to boldly suggest we move from long to unsigned long since the risk of fixing this is infinitesimal. Doesn’t even matter if the C++ code uses int or unsigned since it’s just an opaque handle.

&gt; Source/WebCore/bindings/scripts/CodeGenerator.pm:196
&gt; +    die &quot;Processing document &quot; . $useDocument-&gt;fileName . &quot; did not generate anything.&quot;;

Since we are adding a period here, do we want the version of die with a newline that doesn’t cite where the die statement is?

Are we going to rewrite in Python once we can require Python 3? It’s tempting!

&gt; Source/WebCore/bindings/scripts/CodeGenerator.pm:226
&gt; +    print &quot;Generating $useGenerator bindings code for IDL interface \&quot;&quot; . $interface-&gt;type-&gt;name . &quot;\&quot;...\n&quot; if $verbose;

Not the biggest fan of the ellipses.

&gt; Source/WebCore/bindings/scripts/CodeGenerator.pm:344
&gt;      if (!$supplementalDependencies) {
&gt;          return;
&gt;      }

Missed opportunity for the idiomatic perl one-line if statement.

&gt; Source/WebCore/bindings/scripts/CodeGenerator.pm:384
&gt; +                    # Record that this attribute is implemented by $interfaceName.

Seems like a redundant comment, since code says exactly that.

&gt; Source/WebCore/bindings/scripts/CodeGenerator.pm:404
&gt; +                    # Record that this method is implemented by $interfaceName.

Seems like a redundant comment, since code says exactly that.

&gt; Source/WebCore/bindings/scripts/CodeGenerator.pm:424
&gt; +                    # Record that this constant is implemented by $interfaceName.

Seems like a redundant comment, since code says exactly that.

&gt; Source/WebCore/bindings/scripts/preprocess-idls.pl:498
&gt; -    while ($fileContents =~ /^\s*(\w+)\s+includes\s+(\w+)\s*;/mg) {
&gt; +    while ($fileContents =~ /\s*(\w+)\s+includes\s+(\w+)\s*;/mg) {

This seems not so great. Now that the beginning of the regular expression is not anchored at beginnings of lines, it seems like this expression could match after any character. Maybe we need a \b in there?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686388</commentid>
    <comment_count>3</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-09-07 10:30:13 -0700</bug_when>
    <thetext>Tools/Scripts/svn-apply failed to apply attachment 408163 to trunk.
Please resolve the conflicts and upload a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686393</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-09-07 10:54:03 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #2)
&gt; Comment on attachment 408163 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=408163&amp;action=review
&gt; 
&gt; All about those sets.
&gt; 
&gt; &gt; Source/WebCore/animation/AnimationFrameProvider.idl:29
&gt; &gt; +    long requestAnimationFrame(RequestAnimationFrameCallback callback); // FIXME: Should return an unsigned long.
&gt; &gt; +    undefined cancelAnimationFrame(long handle); // FIXME: handle should be an unsigned long.
&gt; 
&gt; I’m going to boldly suggest we move from long to unsigned long since the
&gt; risk of fixing this is infinitesimal. Doesn’t even matter if the C++ code
&gt; uses int or unsigned since it’s just an opaque handle.

Bold! Made the change.

&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/CodeGenerator.pm:196
&gt; &gt; +    die &quot;Processing document &quot; . $useDocument-&gt;fileName . &quot; did not generate anything.&quot;;
&gt; 
&gt; Since we are adding a period here, do we want the version of die with a
&gt; newline that doesn’t cite where the die statement is?

I&apos;m not familiar with that. How do you use this other version of die?

&gt; 
&gt; Are we going to rewrite in Python once we can require Python 3? It’s
&gt; tempting!

Yeah, I think I am going to. 

&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/CodeGenerator.pm:226
&gt; &gt; +    print &quot;Generating $useGenerator bindings code for IDL interface \&quot;&quot; . $interface-&gt;type-&gt;name . &quot;\&quot;...\n&quot; if $verbose;
&gt; 
&gt; Not the biggest fan of the ellipses.

&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/CodeGenerator.pm:344
&gt; &gt;      if (!$supplementalDependencies) {
&gt; &gt;          return;
&gt; &gt;      }
&gt; 
&gt; Missed opportunity for the idiomatic perl one-line if statement.
&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/CodeGenerator.pm:384
&gt; &gt; +                    # Record that this attribute is implemented by $interfaceName.
&gt; 
&gt; Seems like a redundant comment, since code says exactly that.
&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/CodeGenerator.pm:404
&gt; &gt; +                    # Record that this method is implemented by $interfaceName.
&gt; 
&gt; Seems like a redundant comment, since code says exactly that.
&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/CodeGenerator.pm:424
&gt; &gt; +                    # Record that this constant is implemented by $interfaceName.
&gt; 
&gt; Seems like a redundant comment, since code says exactly that.
&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/preprocess-idls.pl:498
&gt; &gt; -    while ($fileContents =~ /^\s*(\w+)\s+includes\s+(\w+)\s*;/mg) {
&gt; &gt; +    while ($fileContents =~ /\s*(\w+)\s+includes\s+(\w+)\s*;/mg) {
&gt; 
&gt; This seems not so great. Now that the beginning of the regular expression is
&gt; not anchored at beginnings of lines, it seems like this expression could
&gt; match after any character. Maybe we need a \b in there?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686395</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-09-07 10:56:31 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #2)
&gt; Comment on attachment 408163 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=408163&amp;action=review
&gt; 
&gt; All about those sets.
&gt; 
&gt; &gt; Source/WebCore/animation/AnimationFrameProvider.idl:29
&gt; &gt; +    long requestAnimationFrame(RequestAnimationFrameCallback callback); // FIXME: Should return an unsigned long.
&gt; &gt; +    undefined cancelAnimationFrame(long handle); // FIXME: handle should be an unsigned long.
&gt; 
&gt; I’m going to boldly suggest we move from long to unsigned long since the
&gt; risk of fixing this is infinitesimal. Doesn’t even matter if the C++ code
&gt; uses int or unsigned since it’s just an opaque handle.

Bold! Made the change.

&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/CodeGenerator.pm:196
&gt; &gt; +    die &quot;Processing document &quot; . $useDocument-&gt;fileName . &quot; did not generate anything.&quot;;
&gt; 
&gt; Since we are adding a period here, do we want the version of die with a
&gt; newline that doesn’t cite where the die statement is?
&gt; 

I&apos;m not familiar with that. How do you use this other version of die?

&gt; Are we going to rewrite in Python once we can require Python 3? It’s
&gt; tempting!

Yeah, I think I will need to. 

&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/CodeGenerator.pm:226
&gt; &gt; +    print &quot;Generating $useGenerator bindings code for IDL interface \&quot;&quot; . $interface-&gt;type-&gt;name . &quot;\&quot;...\n&quot; if $verbose;
&gt; 
&gt; Not the biggest fan of the ellipses.

Gone.

&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/CodeGenerator.pm:344
&gt; &gt;      if (!$supplementalDependencies) {
&gt; &gt;          return;
&gt; &gt;      }
&gt; 
&gt; Missed opportunity for the idiomatic perl one-line if statement.

Fixed.

&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/CodeGenerator.pm:384
&gt; &gt; +                    # Record that this attribute is implemented by $interfaceName.
&gt; 
&gt; Seems like a redundant comment, since code says exactly that.

Removed.

&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/CodeGenerator.pm:404
&gt; &gt; +                    # Record that this method is implemented by $interfaceName.
&gt; 
&gt; Seems like a redundant comment, since code says exactly that.

Removed.

&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/CodeGenerator.pm:424
&gt; &gt; +                    # Record that this constant is implemented by $interfaceName.
&gt; 
&gt; Seems like a redundant comment, since code says exactly that.

Removed.

&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/preprocess-idls.pl:498
&gt; &gt; -    while ($fileContents =~ /^\s*(\w+)\s+includes\s+(\w+)\s*;/mg) {
&gt; &gt; +    while ($fileContents =~ /\s*(\w+)\s+includes\s+(\w+)\s*;/mg) {
&gt; 
&gt; This seems not so great. Now that the beginning of the regular expression is
&gt; not anchored at beginnings of lines, it seems like this expression could
&gt; match after any character. Maybe we need a \b in there?

Yeah, we need the \b in there. Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686397</commentid>
    <comment_count>6</comment_count>
      <attachid>408187</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-09-07 11:01:34 -0700</bug_when>
    <thetext>Created attachment 408187
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686403</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-09-07 11:42:29 -0700</bug_when>
    <thetext>Committed r266706: &lt;https://trac.webkit.org/changeset/266706&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 408187.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686405</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-09-07 11:43:13 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #5)
&gt; I&apos;m not familiar with that. How do you use this other version of die?

&lt;https://perldoc.perl.org/functions/die.html&gt;: &quot;If the string exception does not end in a newline, the current script line number and input line number (if any) and a newline are appended to it.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686406</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-07 11:43:35 -0700</bug_when>
    <thetext>&lt;rdar://problem/68470878&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408163</attachid>
            <date>2020-09-06 20:54:49 -0700</date>
            <delta_ts>2020-09-07 11:01:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216235-20200906205448.patch</filename>
            <type>text/plain</type>
            <size>112263</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NjY5MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgxIEBACisyMDIwLTA5LTA2ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViSURMXSBTdXBwb3J0IGV4dGVu
ZGVkIGF0dHJpYnV0ZXMgb24gaW5jbHVkZXMgc3RhdGVtZW50cyB0byBhbGxvdyBmb3IgY29uZGl0
aW9uYWxpemVkIGluY2x1c2lvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjE2MjM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSW4gc29tZSBjaXJjdW1zdGFuY3MsIHN1Y2ggYXMgd2l0aCB0aGUgQW5pbWF0
aW9uRnJhbWVQcm92aWRlciBpbnRlcmZhY2UgbWl4aW4sIGl0IGlzCisgICAgICAgIHVzZWZ1bCB0
byBvbmx5IGluY2x1ZGUgYSBtaXhpbiBiYXNlZCBvbiBzb21lIGNvbmRpdGlvbmFsLiBGb3IgQW5p
bWF0aW9uRnJhbWVQcm92aWRlciwKKyAgICAgICAgd2UgY3VycmVudGx5IG9ubHkgd2FudCB0byBp
bmNsdWRlIGl0IGluIERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlIGlmIEVOQUJMRShPRkZTQ1JF
RU5fQ0FOVkFTKQorICAgICAgICBpcyBzZXQgYXQgY29tcGlsZSB0aW1lLCBhbmQgdGhlIHJ1bnRp
bWUgZmVhdHVyZSBmbGFnIG9mZnNjcmVlbkNhbnZhc0VuYWJsZWQoKSBpcyB0dXJuZWQKKyAgICAg
ICAgb24uIFRvIHN1cHBvcnQgdGhhdCwgdGhpcyBjaGFuZ2UgYWRkcyBzdXBwb3J0IGZvciBzcGVj
aWZ5aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZXMgb24gdGhlCisgICAgICAgIGluY2x1ZGVzIHN0YXRl
bWVudCBpdHNlbGYsIGFuZCBoYXZpbmcgdGhvc2UgZXh0ZW5kZWQgYXR0cmlidXRlcyBhcHBsaWVk
IHRvIGVhY2ggbWVtYmVyCisgICAgICAgIG9mIHRoZSBtaXhpbi4gRm9yIEFuaW1hdGlvbkZyYW1l
UHJvdmlkZXIgaW4gRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUsIHRoYXQgbG9va3MgbGlrZToK
KyAgICAgICAgCisgICAgICAgICAgICBbQ29uZGl0aW9uYWw9T0ZGU0NSRUVOX0NBTlZBUywgRW5h
YmxlZEF0UnVudGltZT1PZmZzY3JlZW5DYW52YXNdIERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3Bl
IGluY2x1ZGVzIEFuaW1hdGlvbkZyYW1lUHJvdmlkZXI7CisKKyAgICAgICAgKiBDTWFrZUxpc3Rz
LnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0OgorICAgICAg
ICAqIERlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRT
b3VyY2VzLm1ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICBBZGQgbmV3IGZpbGVzLCB1cGRhdGUgeGNmaWxlbGlzdHMuCisKKyAgICAgICAg
KiBhbmltYXRpb24vQW5pbWF0aW9uRnJhbWVQcm92aWRlci5pZGw6IEFkZGVkLgorICAgICAgICAq
IHBhZ2UvRE9NV2luZG93LmlkbDoKKyAgICAgICAgKiB3b3JrZXJzL0RlZGljYXRlZFdvcmtlckds
b2JhbFNjb3BlLmlkbDoKKyAgICAgICAgU3BsaXQgQW5pbWF0aW9uRnJhbWVQcm92aWRlci5pZGwg
b3V0IGludG8gaXRzIG93biBtaXhpbiAoYXMgc3BlY2lmaWVkKSBhbmQgaW5jbHVkZWQgaXQgaW4K
KyAgICAgICAgYm90aCBET01XaW5kb3cgYW5kIERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlIChj
b25kaXRpb25hbGx5KS4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ci5wbToKKyAgICAgICAgKFByb2Nlc3NEb2N1bWVudCk6IAorICAgICAgICAoUHJvY2Vzc0RpY3Rp
b25hcnlBbmRFbnVtZXJhdGlvbkltcGxlbWVudGVkQXNPdmVycmlkZXMpOgorICAgICAgICAoUHJv
Y2Vzc0ludGVyZmFjZXMpOgorICAgICAgICAoUHJvY2Vzc0NhbGxiYWNrRnVuY3Rpb25zKToKKyAg
ICAgICAgKFByb2Nlc3NEaWN0aW9uYXJpZXMpOgorICAgICAgICAoUHJvY2Vzc0VudW1lcmF0aW9u
cyk6CisgICAgICAgIFNwbGl0IHByb2Nlc3Npbmcgb2YgZWFjaCBkaWZmZXJlbnQgdHlwZSBvZiB0
b3AgbGV2ZWwgdHlwZSBpbnRvIGl0cyBvd24gZnVuY3Rpb24sCisgICAgICAgIGFuZCBkZWZlciBw
cm9jZXNzaW5nIG9mIHN1cHBsZW1lbnRhbCBkZXBlbmRlbmNpZXMgdW50aWwgdGhlIHByaW1hcnkg
dHlwZSBoYXMgYmVlbgorICAgICAgICBzZWxlY3RlZC4KKworICAgICAgICAoTWVyZ2VFeHRlbmRl
ZEF0dHJpYnV0ZXNGcm9tU3VwcGxlbWVudGFsKToKKyAgICAgICAgKElzVmFsaWRTdXBwbGVtZW50
YWxJbnRlcmZhY2UpOgorICAgICAgICAoSXNWYWxpZFN1cHBsZW1lbnRhbERpY3Rpb25hcnkpOgor
ICAgICAgICAoUHJvY2Vzc0ludGVyZmFjZVN1cHBsZW1lbnRhbERlcGVuZGVuY2llcyk6CisgICAg
ICAgIChQcm9jZXNzRGljdGlvbmFyeVN1cHBsZW1lbnRhbERlcGVuZGVuY2llcyk6CisgICAgICAg
IFNwbGl0IFByb2Nlc3NTdXBwbGVtZW50YWxEZXBlbmRlbmNpZXMgaW50byBQcm9jZXNzSW50ZXJm
YWNlU3VwcGxlbWVudGFsRGVwZW5kZW5jaWVzCisgICAgICAgIGFuZCBQcm9jZXNzRGljdGlvbmFy
eVN1cHBsZW1lbnRhbERlcGVuZGVuY2llcywgd2hpY2ggbm93IGdldCBwYXNzZWQgdGhlIHByaW1h
cnkKKyAgICAgICAgaW50ZXJmYWNlIG9yIGRpY3Rpb25hcnkgdGhhdCBuZWVkcyBzdXBwbGVtZW50
aW5nLiBQcm9jZXNzSW50ZXJmYWNlU3VwcGxlbWVudGFsRGVwZW5kZW5jaWVzCisgICAgICAgIG5v
dyBhbHNvIHN1cHBvcnRzIG1lcmdpbmcgZXh0ZW5kZWQgYXR0cmlidXRlcyBmcm9tIGluY2x1ZGVz
IHN0YXRlbWVudHMgYW5kIGNoZWNraW5nCisgICAgICAgIHRoYXQgYWxsIGluY2x1ZGVzIGFyZSBs
aXN0ZWQgaW4gdGhlIGRlcGVuZGVuY3kgc2V0LgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy9JRExBdHRyaWJ1dGVzLmpzb246CisgICAgICAgIEFsbG93IHNldHRpbmcgdXNlIG9mIENvbmRp
dGlvbmFsLCBFbmFibGVkQXRSdW50aW1lIGFuZCBFbmFibGVkQnlTZXR0aW5nIGZvcgorICAgICAg
ICBpbmNsdWRlcyBzdGF0ZW1lbnRzLgorIAorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvSURM
UGFyc2VyLnBtOgorICAgICAgICAocGFyc2VJbmNsdWRlc1N0YXRlbWVudCk6CisgICAgICAgIEZp
eCBvcmRlcmluZyBvZiBzdHJ1Y3QgbWVtYmVycyBzbyB0aGF0IGV4dGVuZGVkQXR0cmlidXRlcyBp
cyBhbHdheXMgbGFzdCAobm8gcmVhbCAKKyAgICAgICAgZ29vZCByZWFzb24gb3RoZXIgdGhhbiBt
b3N0IG9mIHRoZSBzdHJ1Y3RzIGFscmVhZHkgZGlkIHRoaXMgYW5kIHRoZSBsYWNrIG9mIGNvbnNp
c3RlbmN5CisgICAgICAgIGJvdGhlcmVkIG1lKS4gQWRkIGV4dGVuZGVkQXR0cmlidXRlcyB0byBJ
RExJbmNsdWRlc1N0YXRlbWVudCBhbmQgc2V0IGl0IHdoZW4KKyAgICAgICAgcGFyc2luZy4KKwor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvcHJlcHJvY2Vzcy1pZGxzLnBsOgorICAgICAgICAo
Z2V0SW5jbHVkZWRJbnRlcmZhY2VzRnJvbUlETCk6CisgICAgICAgIEZpeCBidWcgaW4gcmVnZXgg
KGZvdW5kIGVhc2lseSBieSB0aGUgdmFsaWRhdGlvbiBwYXJzZXIhKSB0aGF0IGluY29ycmVjdGx5
IHJlcXVpcmVkIHRoZSBpbnRlcmZhY2UKKyAgICAgICAgbmFtZSBpbiB0aGUgaW5jbHVkZXMgc3Rh
dGVtZW50IHRvIGJlIHRoZSBmaXJzdCB3b3JkIG9uIGEgbGluZS4KKyAgICAgICAgCisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0JpbmRpbmdUZXN0R2xvYmFsQ29uc3RydWN0b3JzLmlk
bDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29uZGl0aW9uYWxJ
bmNsdWRlcy5jcHA6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9TdXBwbGVtZW50YWxEZXBlbmRlbmNpZXMuZGVwOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5pZGw6IEFkZGVkLgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0SW5jbHVkZXMuaWRsOgorICAgICAg
ICBBZGQgdGVzdHMgZm9yIGV4dGVuZGVkIGF0dHJpYnV0ZXMgb24gaW5jbHVkZXMgc3RhdGVtZW50
cy4KKwogMjAyMC0wOS0wNiAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4K
IAogICAgICAgICBNYWtlIGBXZWJDb3JlOjpXcml0aW5nTW9kZWAgYW4gOC1iaXQgZW51bSBjbGFz
cwpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI2NjY5MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC02MjcsNiArNjI3LDcgQEAg
c2V0KFdlYkNvcmVfTk9OX1NWR19JRExfRklMRVMKIAogICAgIGFuaW1hdGlvbi9BbmltYXRhYmxl
LmlkbAogICAgIGFuaW1hdGlvbi9BbmltYXRpb25FZmZlY3QuaWRsCisgICAgYW5pbWF0aW9uL0Fu
aW1hdGlvbkZyYW1lUHJvdmlkZXIuaWRsCiAgICAgYW5pbWF0aW9uL0VmZmVjdFRpbWluZy5pZGwK
ICAgICBhbmltYXRpb24vQW5pbWF0aW9uUGxheWJhY2tFdmVudC5pZGwKICAgICBhbmltYXRpb24v
QW5pbWF0aW9uUGxheWJhY2tFdmVudEluaXQuaWRsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9EZXJp
dmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QJKHJldmlzaW9uIDI2NjY5MSkKKysrIFNv
dXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QJKHdvcmtpbmcgY29w
eSkKQEAgLTIwOCw2ICsyMDgsNyBAQCAkKFBST0pFQ1RfRElSKS9Nb2R1bGVzL21lZGlhc3RyZWFt
L1JUQ1ByCiAkKFBST0pFQ1RfRElSKS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1J0cENhcGFiaWxp
dGllcy5pZGwKICQoUFJPSkVDVF9ESVIpL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUnRwQ29kZWND
YXBhYmlsaXR5LmlkbAogJChQUk9KRUNUX0RJUikvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENSdHBD
b2RlY1BhcmFtZXRlcnMuaWRsCiskKFBST0pFQ1RfRElSKS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JU
Q1J0cENvZGluZ1BhcmFtZXRlcnMuaWRsCiAkKFBST0pFQ1RfRElSKS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL1JUQ1J0cENvbnRyaWJ1dGluZ1NvdXJjZS5pZGwKICQoUFJPSkVDVF9ESVIpL01vZHVsZXMv
bWVkaWFzdHJlYW0vUlRDUnRwRW5jb2RpbmdQYXJhbWV0ZXJzLmlkbAogJChQUk9KRUNUX0RJUikv
TW9kdWxlcy9tZWRpYXN0cmVhbS9SVENSdHBGZWNQYXJhbWV0ZXJzLmlkbApAQCAtNTIwLDYgKzUy
MSw3IEBAICQoUFJPSkVDVF9ESVIpL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGkKICQoUFJPSkVD
VF9ESVIpL2FjY2Vzc2liaWxpdHkvQXJpYUF0dHJpYnV0ZXMuaWRsCiAkKFBST0pFQ1RfRElSKS9h
bmltYXRpb24vQW5pbWF0YWJsZS5pZGwKICQoUFJPSkVDVF9ESVIpL2FuaW1hdGlvbi9BbmltYXRp
b25FZmZlY3QuaWRsCiskKFBST0pFQ1RfRElSKS9hbmltYXRpb24vQW5pbWF0aW9uRnJhbWVQcm92
aWRlci5pZGwKICQoUFJPSkVDVF9ESVIpL2FuaW1hdGlvbi9BbmltYXRpb25QbGF5YmFja0V2ZW50
LmlkbAogJChQUk9KRUNUX0RJUikvYW5pbWF0aW9uL0FuaW1hdGlvblBsYXliYWNrRXZlbnRJbml0
LmlkbAogJChQUk9KRUNUX0RJUikvYW5pbWF0aW9uL0FuaW1hdGlvblRpbWVsaW5lLmlkbApJbmRl
eDogU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QJ
KHJldmlzaW9uIDI2NjY5MSkKKysrIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLW91dHB1
dC54Y2ZpbGVsaXN0CSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2Myw4IEBAICQoQlVJTFRfUFJP
RFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWIKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9XZWJDb3JlL0pTQW5pbWF0aW9uRWZmZWN0LmgKICQoQlVJTFRfUFJPRFVDVFNf
RElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQW5pbWF0aW9uRXZlbnQuY3BwCiAkKEJVSUxU
X1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0FuaW1hdGlvbkV2ZW50LmgK
KyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQW5pbWF0aW9u
RnJhbWVQcm92aWRlci5jcHAKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJDb3JlL0pTQW5pbWF0aW9uRnJhbWVQcm92aWRlci5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0FuaW1hdGlvblBsYXliYWNrRXZlbnQuY3BwCiAkKEJV
SUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0FuaW1hdGlvblBsYXli
YWNrRXZlbnQuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
SlNBbmltYXRpb25QbGF5YmFja0V2ZW50SW5pdC5jcHAKQEAgLTE0NTYsNiArMTQ1OCw4IEBAICQo
QlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWIKICQoQlVJTFRfUFJPRFVDVFNf
RElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTUlRDUnRwQ29kZWNDYXBhYmlsaXR5LmgKICQo
QlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTUlRDUnRwQ29kZWNQ
YXJhbWV0ZXJzLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvSlNSVENSdHBDb2RlY1BhcmFtZXRlcnMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSlNSVENSdHBDb2RpbmdQYXJhbWV0ZXJzLmNwcAorJChCVUlMVF9Q
Uk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNSVENSdHBDb2RpbmdQYXJhbWV0
ZXJzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTUlRD
UnRwQ29udHJpYnV0aW5nU291cmNlLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRT
b3VyY2VzL1dlYkNvcmUvSlNSVENSdHBDb250cmlidXRpbmdTb3VyY2UuaAogJChCVUlMVF9QUk9E
VUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNSVENSdHBFbmNvZGluZ1BhcmFtZXRl
cnMuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDI2NjY5
MSkKKysrIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkK
QEAgLTU4NSw2ICs1ODUsNyBAQCBKU19CSU5ESU5HX0lETFMgPSBcCiAgICAgJChXZWJDb3JlKS9h
Y2Nlc3NpYmlsaXR5L0FyaWFBdHRyaWJ1dGVzLmlkbCBcCiAgICAgJChXZWJDb3JlKS9hbmltYXRp
b24vQW5pbWF0YWJsZS5pZGwgXAogICAgICQoV2ViQ29yZSkvYW5pbWF0aW9uL0FuaW1hdGlvbkVm
ZmVjdC5pZGwgXAorICAgICQoV2ViQ29yZSkvYW5pbWF0aW9uL0FuaW1hdGlvbkZyYW1lUHJvdmlk
ZXIuaWRsIFwKICAgICAkKFdlYkNvcmUpL2FuaW1hdGlvbi9BbmltYXRpb25QbGF5YmFja0V2ZW50
LmlkbCBcCiAgICAgJChXZWJDb3JlKS9hbmltYXRpb24vQW5pbWF0aW9uUGxheWJhY2tFdmVudElu
aXQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2FuaW1hdGlvbi9BbmltYXRpb25UaW1lbGluZS5pZGwg
XApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMjY2NjkxKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDExOCw2ICsxMDExOCw3
IEBACiAJCTdDMzMwQTA1MURGOUY5NTEwMEQzMzk1QyAvKiBKU1Bvc2l0aW9uT3B0aW9ucy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1Bvc2l0aW9uT3B0aW9ucy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMzMwQTA2MURGOUY5NTEwMEQzMzk1
QyAvKiBKU1Bvc2l0aW9uT3B0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU1Bvc2l0aW9uT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzMz
RjM2MDFCNEEwNTA0MDA1MDJDQUYgLyogSlNEb2N1bWVudEZyYWdtZW50Q3VzdG9tLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRG9jdW1lbnRGcmFnbWVudEN1c3Rv
bS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDMzgwNkRCMjUwNUIxODkwMDc0
NEE3QiAvKiBBbmltYXRpb25GcmFtZVByb3ZpZGVyLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBBbmltYXRpb25GcmFtZVByb3ZpZGVyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJN0MzQTkxRTUxQzk2M0I4ODAwRDFBN0UzIC8qIENsaXBib2FyZEFjY2Vzc1BvbGljeS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDbGlwYm9hcmRBY2Nlc3NQb2xpY3kuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MzQjc5NkYxOTA4NzU3QjAwQjQ3QTJEIC8q
IFVzZXJNZXNzYWdlSGFuZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBVc2VyTWVzc2FnZUhhbmRsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3QzNCNzk3MDE5MDg3NTdCMDBCNDdBMkQgLyogVXNlck1lc3NhZ2VIYW5kbGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVzZXJNZXNzYWdlSGFuZGxlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjE3NjcsNiArMjE3NjgsNyBAQAogCQkJCTcxRTJDNDI0
MjFDOTM1MUQwMDI0RjhDOCAvKiBBbmltYXRpb25FZmZlY3RQaGFzZS5oICovLAogCQkJCTcxMUFE
MTI1MjM2RDg2RDQwMDZGRjM3QyAvKiBBbmltYXRpb25FdmVudEJhc2UuY3BwICovLAogCQkJCTcx
MUFEMTIzMjM2RDg2RDMwMDZGRjM3QyAvKiBBbmltYXRpb25FdmVudEJhc2UuaCAqLywKKwkJCQk3
QzM4MDZEQjI1MDVCMTg5MDA3NDRBN0IgLyogQW5pbWF0aW9uRnJhbWVQcm92aWRlci5pZGwgKi8s
CiAJCQkJNzE0QzdDNjAxRkRBRDI3OTAwRjJCRUUxIC8qIEFuaW1hdGlvblBsYXliYWNrRXZlbnQu
Y3BwICovLAogCQkJCTcxNEM3QzY1MUZEQUQyN0IwMEYyQkVFMSAvKiBBbmltYXRpb25QbGF5YmFj
a0V2ZW50LmggKi8sCiAJCQkJNzE0QzdDNjQxRkRBRDI3QjAwRjJCRUUxIC8qIEFuaW1hdGlvblBs
YXliYWNrRXZlbnQuaWRsICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1h
dGlvbkZyYW1lUHJvdmlkZXIuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FuaW1h
dGlvbi9BbmltYXRpb25GcmFtZVByb3ZpZGVyLmlkbAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9uRnJhbWVQcm92aWRlci5pZGwJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIGh0dHBzOi8vaHRtbC5zcGVjLndo
YXR3Zy5vcmcvbXVsdGlwYWdlL2ltYWdlYml0bWFwLWFuZC1hbmltYXRpb25zLmh0bWwjYW5pbWF0
aW9uZnJhbWVwcm92aWRlcgoraW50ZXJmYWNlIG1peGluIEFuaW1hdGlvbkZyYW1lUHJvdmlkZXIg
eworICAgIGxvbmcgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKFJlcXVlc3RBbmltYXRpb25GcmFtZUNh
bGxiYWNrIGNhbGxiYWNrKTsgLy8gRklYTUU6IFNob3VsZCByZXR1cm4gYW4gdW5zaWduZWQgbG9u
Zy4KKyAgICB1bmRlZmluZWQgY2FuY2VsQW5pbWF0aW9uRnJhbWUobG9uZyBoYW5kbGUpOyAvLyBG
SVhNRTogaGFuZGxlIHNob3VsZCBiZSBhbiB1bnNpZ25lZCBsb25nLgorfTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0JKHJldmlz
aW9uIDI2NjY5MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvci5wbQkod29ya2luZyBjb3B5KQpAQCAtMTYwLDIzICsxNjAsOSBAQCBzdWIgUHJvY2Vzc0Rv
Y3VtZW50CiAgICAgJHVzZURvY3VtZW50ID0gc2hpZnQ7CiAgICAgJGRlZmluZXMgPSBzaGlmdDsK
IAotICAgICRvYmplY3QtPlByb2Nlc3NTdXBwbGVtZW50YWxEZXBlbmRlbmNpZXMoJHVzZURvY3Vt
ZW50KTsKLQogICAgIG15ICRpZmFjZU5hbWUgPSAiQ29kZUdlbmVyYXRvciIgLiAkdXNlR2VuZXJh
dG9yOwogICAgIHJlcXVpcmUgJGlmYWNlTmFtZSAuICIucG0iOwogCi0gICAgZm9yZWFjaCBteSAk
ZGljdGlvbmFyeSAoQHskdXNlRG9jdW1lbnQtPmRpY3Rpb25hcmllc30pIHsKLSAgICAgICAgaWYg
KCRkaWN0aW9uYXJ5LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50ZWRBcyJ9KSB7Ci0g
ICAgICAgICAgICAkZGljdGlvbmFyeVR5cGVJbXBsZW1lbnRhdGlvbk5hbWVPdmVycmlkZXN7JGRp
Y3Rpb25hcnktPnR5cGUtPm5hbWV9ID0gJGRpY3Rpb25hcnktPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJJbXBsZW1lbnRlZEFzIn07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3JlYWNoIG15ICRl
bnVtZXJhdGlvbiAoQHskdXNlRG9jdW1lbnQtPmVudW1lcmF0aW9uc30pIHsKLSAgICAgICAgaWYg
KCRlbnVtZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxlbWVudGVkQXMifSkgewot
ICAgICAgICAgICAgJGVudW1UeXBlSW1wbGVtZW50YXRpb25OYW1lT3ZlcnJpZGVzeyRlbnVtZXJh
dGlvbi0+dHlwZS0+bmFtZX0gPSAkZW51bWVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJ
bXBsZW1lbnRlZEFzIn07Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICAjIER5bmFtaWNhbGx5IGxv
YWQgZXh0ZXJuYWwgY29kZSBnZW5lcmF0aW9uIHBlcmwgbW9kdWxlCiAgICAgJGNvZGVHZW5lcmF0
b3IgPSAkaWZhY2VOYW1lLT5uZXcoJG9iamVjdCwgJHdyaXRlRGVwZW5kZW5jaWVzLCAkdmVyYm9z
ZSwgJHRhcmdldElkbEZpbGVQYXRoKTsKICAgICB1bmxlc3MgKGRlZmluZWQoJGNvZGVHZW5lcmF0
b3IpKSB7CkBAIC0xODcsNzEgKzE3MywxMjIgQEAgc3ViIFByb2Nlc3NEb2N1bWVudAogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgbXkgJGludGVyZmFjZXMgPSAkdXNlRG9jdW1lbnQtPmlu
dGVyZmFjZXM7Ci0gICAgaWYgKEAkaW50ZXJmYWNlcykgewotICAgICAgICBkaWUgIk11bHRpcGxl
IGludGVyZmFjZXMgcGVyIGRvY3VtZW50IGFyZSBub3Qgc3VwcG9ydGVkIiBpZiBAJGludGVyZmFj
ZXMgPiAxOwotCi0gICAgICAgIG15ICRpbnRlcmZhY2UgPSBAJGludGVyZmFjZXNbMF07Ci0gICAg
ICAgIHByaW50ICJHZW5lcmF0aW5nICR1c2VHZW5lcmF0b3IgYmluZGluZ3MgY29kZSBmb3IgSURM
IGludGVyZmFjZSBcIiIgLiAkaW50ZXJmYWNlLT50eXBlLT5uYW1lIC4gIlwiLi4uXG4iIGlmICR2
ZXJib3NlOwotICAgICAgICAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVJbnRlcmZhY2UoJGludGVy
ZmFjZSwgJGRlZmluZXMsICR1c2VEb2N1bWVudC0+ZW51bWVyYXRpb25zLCAkdXNlRG9jdW1lbnQt
PmRpY3Rpb25hcmllcyk7Ci0gICAgICAgICRjb2RlR2VuZXJhdG9yLT5Xcml0ZURhdGEoJGludGVy
ZmFjZSwgJHVzZU91dHB1dERpciwgJHVzZU91dHB1dEhlYWRlcnNEaXIpOworICAgIGlmIChAeyR1
c2VEb2N1bWVudC0+aW50ZXJmYWNlc30pIHsKKyAgICAgICAgJG9iamVjdC0+UHJvY2Vzc0ludGVy
ZmFjZXMoJHVzZURvY3VtZW50LCAkZGVmaW5lcywgJGNvZGVHZW5lcmF0b3IpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgbXkgJGNhbGxiYWNrRnVuY3Rpb25zID0gJHVzZURvY3VtZW50
LT5jYWxsYmFja0Z1bmN0aW9uczsKLSAgICBpZiAoQCRjYWxsYmFja0Z1bmN0aW9ucykgewotICAg
ICAgICBkaWUgIk11bHRpcGxlIHN0YW5kYWxvbmUgY2FsbGJhY2sgZnVuY3Rpb25zIHBlciBkb2N1
bWVudCBhcmUgbm90IHN1cHBvcnRlZCIgaWYgQCRjYWxsYmFja0Z1bmN0aW9ucyA+IDE7Ci0KLSAg
ICAgICAgbXkgJGNhbGxiYWNrRnVuY3Rpb24gPSBAJGNhbGxiYWNrRnVuY3Rpb25zWzBdOwotICAg
ICAgICBwcmludCAiR2VuZXJhdGluZyAkdXNlR2VuZXJhdG9yIGJpbmRpbmdzIGNvZGUgZm9yIElE
TCBjYWxsYmFjayBmdW5jdGlvbiBcIiIgLiAkY2FsbGJhY2tGdW5jdGlvbi0+dHlwZS0+bmFtZSAu
ICJcIi4uLlxuIiBpZiAkdmVyYm9zZTsKLSAgICAgICAgJGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRl
Q2FsbGJhY2tGdW5jdGlvbigkY2FsbGJhY2tGdW5jdGlvbiwgJHVzZURvY3VtZW50LT5lbnVtZXJh
dGlvbnMsICR1c2VEb2N1bWVudC0+ZGljdGlvbmFyaWVzKTsKLSAgICAgICAgJGNvZGVHZW5lcmF0
b3ItPldyaXRlRGF0YSgkY2FsbGJhY2tGdW5jdGlvbiwgJHVzZU91dHB1dERpciwgJHVzZU91dHB1
dEhlYWRlcnNEaXIpOworICAgIGlmIChAeyR1c2VEb2N1bWVudC0+Y2FsbGJhY2tGdW5jdGlvbnN9
KSB7CisgICAgICAgICRvYmplY3QtPlByb2Nlc3NDYWxsYmFja0Z1bmN0aW9ucygkdXNlRG9jdW1l
bnQsICRkZWZpbmVzLCAkY29kZUdlbmVyYXRvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBteSAkZGljdGlvbmFyaWVzID0gJHVzZURvY3VtZW50LT5kaWN0aW9uYXJpZXM7Ci0gICAg
aWYgKEAkZGljdGlvbmFyaWVzKSB7Ci0gICAgICAgIG15ICRkaWN0aW9uYXJ5OwotICAgICAgICBt
eSAkb3RoZXJEaWN0aW9uYXJpZXM7Ci0gICAgICAgIGlmIChAJGRpY3Rpb25hcmllcyA9PSAxKSB7
Ci0gICAgICAgICAgICAkZGljdGlvbmFyeSA9IEAkZGljdGlvbmFyaWVzWzBdOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgbXkgJHByaW1hcnlEaWN0aW9uYXJ5TmFtZSA9IGZpbGVwYXJz
ZSgkdGFyZ2V0SWRsRmlsZVBhdGgsICIuaWRsIik7Ci0gICAgICAgICAgICBmb3IgbXkgJGNhbmRp
ZGF0ZSAoQCRkaWN0aW9uYXJpZXMpIHsKLSAgICAgICAgICAgICAgICBpZiAoJGNhbmRpZGF0ZS0+
dHlwZS0+bmFtZSBlcSAkcHJpbWFyeURpY3Rpb25hcnlOYW1lKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICRkaWN0aW9uYXJ5ID0gJGNhbmRpZGF0ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICBwdXNoIEAkb3RoZXJEaWN0aW9uYXJpZXMsICRjYW5kaWRhdGU7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGllICJNdWx0
aXBsZSBkaWN0aW9uYXJpZXMgcGVyIGRvY3VtZW50IGFyZSBvbmx5IHN1cHBvcnRlZCBpZiBvbmUg
bWF0Y2hlcyB0aGUgZmlsZW5hbWUiIHVubGVzcyAkZGljdGlvbmFyeTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHByaW50ICJHZW5lcmF0aW5nICR1c2VHZW5lcmF0b3IgYmluZGluZ3MgY29kZSBmb3Ig
SURMIGRpY3Rpb25hcnkgXCIiIC4gJGRpY3Rpb25hcnktPnR5cGUtPm5hbWUgLiAiXCIuLi5cbiIg
aWYgJHZlcmJvc2U7Ci0gICAgICAgICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0ZURpY3Rpb25hcnko
JGRpY3Rpb25hcnksICR1c2VEb2N1bWVudC0+ZW51bWVyYXRpb25zLCAkb3RoZXJEaWN0aW9uYXJp
ZXMpOwotICAgICAgICAkY29kZUdlbmVyYXRvci0+V3JpdGVEYXRhKCRkaWN0aW9uYXJ5LCAkdXNl
T3V0cHV0RGlyLCAkdXNlT3V0cHV0SGVhZGVyc0Rpcik7CisgICAgaWYgKEB7JHVzZURvY3VtZW50
LT5kaWN0aW9uYXJpZXN9KSB7CisgICAgICAgICRvYmplY3QtPlByb2Nlc3NEaWN0aW9uYXJpZXMo
JHVzZURvY3VtZW50LCAkZGVmaW5lcywgJGNvZGVHZW5lcmF0b3IpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIAotICAgIG15ICRlbnVtZXJhdGlvbnMgPSAkdXNlRG9jdW1lbnQtPmVudW1l
cmF0aW9uczsKLSAgICBpZiAoQCRlbnVtZXJhdGlvbnMpIHsKLSAgICAgICAgZGllICJNdWx0aXBs
ZSBzdGFuZGFsb25lIGVudW1lcmF0aW9ucyBwZXIgZG9jdW1lbnQgYXJlIG5vdCBzdXBwb3J0ZWQi
IGlmIEAkZW51bWVyYXRpb25zID4gMTsKLQotICAgICAgICBteSAkZW51bWVyYXRpb24gPSBAJGVu
dW1lcmF0aW9uc1swXTsKLSAgICAgICAgcHJpbnQgIkdlbmVyYXRpbmcgJHVzZUdlbmVyYXRvciBi
aW5kaW5ncyBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gXCIiIC4gJGVudW1lcmF0aW9uLT50eXBl
LT5uYW1lIC4gIlwiLi4uXG4iIGlmICR2ZXJib3NlOwotICAgICAgICAkY29kZUdlbmVyYXRvci0+
R2VuZXJhdGVFbnVtZXJhdGlvbigkZW51bWVyYXRpb24pOwotICAgICAgICAkY29kZUdlbmVyYXRv
ci0+V3JpdGVEYXRhKCRlbnVtZXJhdGlvbiwgJHVzZU91dHB1dERpciwgJHVzZU91dHB1dEhlYWRl
cnNEaXIpOworICAgIGlmIChAeyR1c2VEb2N1bWVudC0+ZW51bWVyYXRpb25zfSkgeworICAgICAg
ICAkb2JqZWN0LT5Qcm9jZXNzRW51bWVyYXRpb25zKCR1c2VEb2N1bWVudCwgJGRlZmluZXMsICRj
b2RlR2VuZXJhdG9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGRpZSAiUHJvY2Vz
c2luZyBkb2N1bWVudCAiIC4gJHVzZURvY3VtZW50LT5maWxlTmFtZSAuICIgZGlkIG5vdCBnZW5l
cmF0ZSBhbnl0aGluZyIKKyAgICBkaWUgIlByb2Nlc3NpbmcgZG9jdW1lbnQgIiAuICR1c2VEb2N1
bWVudC0+ZmlsZU5hbWUgLiAiIGRpZCBub3QgZ2VuZXJhdGUgYW55dGhpbmcuIjsKK30KKworc3Vi
IFByb2Nlc3NEaWN0aW9uYXJ5QW5kRW51bWVyYXRpb25JbXBsZW1lbnRlZEFzT3ZlcnJpZGVzCit7
CisgICAgbXkgKCRvYmplY3QsICR1c2VEb2N1bWVudCkgPSBAXzsKKworICAgIGZvcmVhY2ggbXkg
JGRpY3Rpb25hcnkgKEB7JHVzZURvY3VtZW50LT5kaWN0aW9uYXJpZXN9KSB7CisgICAgICAgIGlm
ICgkZGljdGlvbmFyeS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxlbWVudGVkQXMifSkgewor
ICAgICAgICAgICAgJGRpY3Rpb25hcnlUeXBlSW1wbGVtZW50YXRpb25OYW1lT3ZlcnJpZGVzeyRk
aWN0aW9uYXJ5LT50eXBlLT5uYW1lfSA9ICRkaWN0aW9uYXJ5LT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiSW1wbGVtZW50ZWRBcyJ9OworICAgICAgICB9CisgICAgfQorCisgICAgZm9yZWFjaCBteSAk
ZW51bWVyYXRpb24gKEB7JHVzZURvY3VtZW50LT5lbnVtZXJhdGlvbnN9KSB7CisgICAgICAgIGlm
ICgkZW51bWVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbXBsZW1lbnRlZEFzIn0pIHsK
KyAgICAgICAgICAgICRlbnVtVHlwZUltcGxlbWVudGF0aW9uTmFtZU92ZXJyaWRlc3skZW51bWVy
YXRpb24tPnR5cGUtPm5hbWV9ID0gJGVudW1lcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
SW1wbGVtZW50ZWRBcyJ9OworICAgICAgICB9CisgICAgfQorfQorCitzdWIgUHJvY2Vzc0ludGVy
ZmFjZXMKK3sKKyAgICBteSAoJG9iamVjdCwgJHVzZURvY3VtZW50LCAkZGVmaW5lcywgJGNvZGVH
ZW5lcmF0b3IpID0gQF87CisKKyAgICBkaWUgIk11bHRpcGxlIGludGVyZmFjZXMgcGVyIGRvY3Vt
ZW50IGFyZSBub3Qgc3VwcG9ydGVkIiBpZiBAeyR1c2VEb2N1bWVudC0+aW50ZXJmYWNlc30gPiAx
OworICAgIG15ICRpbnRlcmZhY2UgPSAkdXNlRG9jdW1lbnQtPmludGVyZmFjZXMtPlswXTsKKwor
ICAgICRvYmplY3QtPlByb2Nlc3NJbnRlcmZhY2VTdXBwbGVtZW50YWxEZXBlbmRlbmNpZXMoJGlu
dGVyZmFjZSwgJHVzZURvY3VtZW50KTsKKyAgICAkb2JqZWN0LT5Qcm9jZXNzRGljdGlvbmFyeUFu
ZEVudW1lcmF0aW9uSW1wbGVtZW50ZWRBc092ZXJyaWRlcygkdXNlRG9jdW1lbnQpOworCisgICAg
cHJpbnQgIkdlbmVyYXRpbmcgJHVzZUdlbmVyYXRvciBiaW5kaW5ncyBjb2RlIGZvciBJREwgaW50
ZXJmYWNlIFwiIiAuICRpbnRlcmZhY2UtPnR5cGUtPm5hbWUgLiAiXCIuLi5cbiIgaWYgJHZlcmJv
c2U7CisgICAgJGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRlSW50ZXJmYWNlKCRpbnRlcmZhY2UsICRk
ZWZpbmVzLCAkdXNlRG9jdW1lbnQtPmVudW1lcmF0aW9ucywgJHVzZURvY3VtZW50LT5kaWN0aW9u
YXJpZXMpOworICAgICRjb2RlR2VuZXJhdG9yLT5Xcml0ZURhdGEoJGludGVyZmFjZSwgJHVzZU91
dHB1dERpciwgJHVzZU91dHB1dEhlYWRlcnNEaXIpOworfQorCitzdWIgUHJvY2Vzc0NhbGxiYWNr
RnVuY3Rpb25zCit7CisgICAgbXkgKCRvYmplY3QsICR1c2VEb2N1bWVudCwgJGRlZmluZXMsICRj
b2RlR2VuZXJhdG9yKSA9IEBfOworCisgICAgZGllICJNdWx0aXBsZSBzdGFuZGFsb25lIGNhbGxi
YWNrIGZ1bmN0aW9ucyBwZXIgZG9jdW1lbnQgYXJlIG5vdCBzdXBwb3J0ZWQiIGlmIEB7JHVzZURv
Y3VtZW50LT5jYWxsYmFja0Z1bmN0aW9uc30gPiAxOworICAgIG15ICRjYWxsYmFja0Z1bmN0aW9u
ID0gJHVzZURvY3VtZW50LT5jYWxsYmFja0Z1bmN0aW9ucy0+WzBdOworCisgICAgJG9iamVjdC0+
UHJvY2Vzc0RpY3Rpb25hcnlBbmRFbnVtZXJhdGlvbkltcGxlbWVudGVkQXNPdmVycmlkZXMoJHVz
ZURvY3VtZW50KTsKKworICAgIHByaW50ICJHZW5lcmF0aW5nICR1c2VHZW5lcmF0b3IgYmluZGlu
Z3MgY29kZSBmb3IgSURMIGNhbGxiYWNrIGZ1bmN0aW9uIFwiIiAuICRjYWxsYmFja0Z1bmN0aW9u
LT50eXBlLT5uYW1lIC4gIlwiLi4uXG4iIGlmICR2ZXJib3NlOworICAgICRjb2RlR2VuZXJhdG9y
LT5HZW5lcmF0ZUNhbGxiYWNrRnVuY3Rpb24oJGNhbGxiYWNrRnVuY3Rpb24sICR1c2VEb2N1bWVu
dC0+ZW51bWVyYXRpb25zLCAkdXNlRG9jdW1lbnQtPmRpY3Rpb25hcmllcyk7CisgICAgJGNvZGVH
ZW5lcmF0b3ItPldyaXRlRGF0YSgkY2FsbGJhY2tGdW5jdGlvbiwgJHVzZU91dHB1dERpciwgJHVz
ZU91dHB1dEhlYWRlcnNEaXIpOworfQorCitzdWIgUHJvY2Vzc0RpY3Rpb25hcmllcworeworICAg
IG15ICgkb2JqZWN0LCAkdXNlRG9jdW1lbnQsICRkZWZpbmVzLCAkY29kZUdlbmVyYXRvcikgPSBA
XzsKKworICAgIG15ICRkaWN0aW9uYXJ5OworICAgIG15ICRvdGhlckRpY3Rpb25hcmllczsKKyAg
ICBpZiAoQHskdXNlRG9jdW1lbnQtPmRpY3Rpb25hcmllc30gPT0gMSkgeworICAgICAgICAkZGlj
dGlvbmFyeSA9ICR1c2VEb2N1bWVudC0+ZGljdGlvbmFyaWVzLT5bMF07CisgICAgfSBlbHNlIHsK
KyAgICAgICAgbXkgJHByaW1hcnlEaWN0aW9uYXJ5TmFtZSA9IGZpbGVwYXJzZSgkdGFyZ2V0SWRs
RmlsZVBhdGgsICIuaWRsIik7CisgICAgICAgIGZvcmVhY2ggbXkgJGNhbmRpZGF0ZSAoQHskdXNl
RG9jdW1lbnQtPmRpY3Rpb25hcmllc30pIHsKKyAgICAgICAgICAgIGlmICgkY2FuZGlkYXRlLT50
eXBlLT5uYW1lIGVxICRwcmltYXJ5RGljdGlvbmFyeU5hbWUpIHsKKyAgICAgICAgICAgICAgICAk
ZGljdGlvbmFyeSA9ICRjYW5kaWRhdGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIHB1c2goQCRvdGhlckRpY3Rpb25hcmllcywgJGNhbmRpZGF0ZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgZGllICJNdWx0aXBsZSBkaWN0aW9uYXJpZXMgcGVyIGRv
Y3VtZW50IGFyZSBvbmx5IHN1cHBvcnRlZCBpZiBvbmUgbWF0Y2hlcyB0aGUgZmlsZW5hbWUiIHVu
bGVzcyAkZGljdGlvbmFyeTsKKyAgICB9CisKKyAgICAkb2JqZWN0LT5Qcm9jZXNzRGljdGlvbmFy
eVN1cHBsZW1lbnRhbERlcGVuZGVuY2llcygkZGljdGlvbmFyeSwgJHVzZURvY3VtZW50KTsKKyAg
ICAkb2JqZWN0LT5Qcm9jZXNzRGljdGlvbmFyeUFuZEVudW1lcmF0aW9uSW1wbGVtZW50ZWRBc092
ZXJyaWRlcygkdXNlRG9jdW1lbnQpOworICAgIAorICAgIHByaW50ICJHZW5lcmF0aW5nICR1c2VH
ZW5lcmF0b3IgYmluZGluZ3MgY29kZSBmb3IgSURMIGRpY3Rpb25hcnkgXCIiIC4gJGRpY3Rpb25h
cnktPnR5cGUtPm5hbWUgLiAiXCIuLi5cbiIgaWYgJHZlcmJvc2U7CisgICAgJGNvZGVHZW5lcmF0
b3ItPkdlbmVyYXRlRGljdGlvbmFyeSgkZGljdGlvbmFyeSwgJHVzZURvY3VtZW50LT5lbnVtZXJh
dGlvbnMsICRvdGhlckRpY3Rpb25hcmllcyk7CisgICAgJGNvZGVHZW5lcmF0b3ItPldyaXRlRGF0
YSgkZGljdGlvbmFyeSwgJHVzZU91dHB1dERpciwgJHVzZU91dHB1dEhlYWRlcnNEaXIpOworfQor
CitzdWIgUHJvY2Vzc0VudW1lcmF0aW9ucworeworICAgIG15ICgkb2JqZWN0LCAkdXNlRG9jdW1l
bnQsICRkZWZpbmVzLCAkY29kZUdlbmVyYXRvcikgPSBAXzsKKworICAgIGRpZSAiTXVsdGlwbGUg
c3RhbmRhbG9uZSBlbnVtZXJhdGlvbnMgcGVyIGRvY3VtZW50IGFyZSBub3Qgc3VwcG9ydGVkIiBp
ZiBAeyR1c2VEb2N1bWVudC0+ZW51bWVyYXRpb25zfSA+IDE7CisgICAgbXkgJGVudW1lcmF0aW9u
ID0gJHVzZURvY3VtZW50LT5lbnVtZXJhdGlvbnMtPlswXTsKKworICAgICRvYmplY3QtPlByb2Nl
c3NEaWN0aW9uYXJ5QW5kRW51bWVyYXRpb25JbXBsZW1lbnRlZEFzT3ZlcnJpZGVzKCR1c2VEb2N1
bWVudCk7CisKKyAgICBwcmludCAiR2VuZXJhdGluZyAkdXNlR2VuZXJhdG9yIGJpbmRpbmdzIGNv
ZGUgZm9yIElETCBlbnVtZXJhdGlvbiBcIiIgLiAkZW51bWVyYXRpb24tPnR5cGUtPm5hbWUgLiAi
XCIuLi5cbiIgaWYgJHZlcmJvc2U7CisgICAgJGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRlRW51bWVy
YXRpb24oJGVudW1lcmF0aW9uKTsKKyAgICAkY29kZUdlbmVyYXRvci0+V3JpdGVEYXRhKCRlbnVt
ZXJhdGlvbiwgJHVzZU91dHB1dERpciwgJHVzZU91dHB1dEhlYWRlcnNEaXIpOwogfQogCiBzdWIg
TWVyZ2VFeHRlbmRlZEF0dHJpYnV0ZXNGcm9tU3VwcGxlbWVudGFsCiB7Ci0gICAgbXkgKCRvYmpl
Y3QsICRzdXBwbGVtZW50YWwsICRwcm9wZXJ0eSwgJGNvbnRleHQpID0gQF87CisgICAgbXkgKCRv
YmplY3QsICRzdXBwbGVtZW50YWxFeHRlbmRlZEF0dHJpYnV0ZXMsICRwcm9wZXJ0eSwgJGNvbnRl
eHQpID0gQF87CiAKLSAgICBmb3JlYWNoIG15ICRleHRlbmRlZEF0dHJpYnV0ZU5hbWUgKGtleXMg
JXskc3VwcGxlbWVudGFsLT5leHRlbmRlZEF0dHJpYnV0ZXN9KSB7CisgICAgZm9yZWFjaCBteSAk
ZXh0ZW5kZWRBdHRyaWJ1dGVOYW1lIChrZXlzICV7JHN1cHBsZW1lbnRhbEV4dGVuZGVkQXR0cmli
dXRlc30pIHsKICAgICAgICAgbXkgJGlzQWxsb3dlZCA9IDA7CiAgICAgICAgIGZvciBteSAkY29u
dGV4dEFsbG93ZWQgKEB7JGlkbEF0dHJpYnV0ZXMtPnskZXh0ZW5kZWRBdHRyaWJ1dGVOYW1lfS0+
eyJjb250ZXh0c0FsbG93ZWQifX0pIHsKICAgICAgICAgICAgIGlmICgkY29udGV4dEFsbG93ZWQg
ZXEgJGNvbnRleHQpIHsKQEAgLTI2NSw3ICszMDIsNyBAQCBzdWIgTWVyZ2VFeHRlbmRlZEF0dHJp
YnV0ZXNGcm9tU3VwcGxlbWVuCiAgICAgICAgICMgYmUgZml4ZWQuIFVsdGltYXRlbHksIHRoaXMg
d2lsbCBwcm9iYWJseSBtZWFuIGVpdGhlciByZW1vdmluZyBzdXBwb3J0IGZvciBkaXNqdW5jdGlv
bnMgZm9yIENvbmRpdGlvbmFsLAogICAgICAgICAjIHdoaWNoIGlzIG5vdCB1c2VkIG91dHNpZGUg
b2YgdGhlIHRlc3RzLCBvciBhZGRpbmcgc3VwcG9ydCBmb3IgcGFyZW50aGVzZXMgdG8gZGlzYW1i
aWd1YXRlLgogICAgICAgICBpZiAoJGV4dGVuZGVkQXR0cmlidXRlTmFtZSBlcSAiQ29uZGl0aW9u
YWwiICYmICRjb250ZXh0IG5lICJvcGVyYXRpb24iKSB7Ci0gICAgICAgICAgICAkcHJvcGVydHkt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyRleHRlbmRlZEF0dHJpYnV0ZU5hbWV9ID0gJHN1cHBsZW1l
bnRhbC0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57JGV4dGVuZGVkQXR0cmlidXRlTmFtZX07CisgICAg
ICAgICAgICAkcHJvcGVydHktPmV4dGVuZGVkQXR0cmlidXRlcy0+eyRleHRlbmRlZEF0dHJpYnV0
ZU5hbWV9ID0gJHN1cHBsZW1lbnRhbEV4dGVuZGVkQXR0cmlidXRlcy0+eyRleHRlbmRlZEF0dHJp
YnV0ZU5hbWV9OwogICAgICAgICAgICAgbmV4dDsKICAgICAgICAgfQogCkBAIC0yNzQsNDMgKzMx
MSw2MSBAQCBzdWIgTWVyZ2VFeHRlbmRlZEF0dHJpYnV0ZXNGcm9tU3VwcGxlbWVuCiAgICAgICAg
ICAgICBpZiAoISRpZGxBdHRyaWJ1dGVzLT57JGV4dGVuZGVkQXR0cmlidXRlTmFtZX0tPnsic3Vw
cG9ydHNDb25qdW5jdGlvbiJ9KSB7CiAgICAgICAgICAgICAgICAgZGllICJEdXBsaWNhdGUgbm9u
LW1lcmdlYWJsZSBleHRlbmRlZCBhdHRyaWJ1dGUgKCRleHRlbmRlZEF0dHJpYnV0ZU5hbWUpIGZv
dW5kIHdoZW4gbWVyZ2luZyBleHRlbmRlZCBhdHRyaWJ1dGVzIGZvciAke3Byb3BlcnR5LT5uYW1l
fSI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAkcHJvcGVydHktPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyRleHRlbmRlZEF0dHJpYnV0ZU5hbWV9ID0gJHByb3BlcnR5LT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnskZXh0ZW5kZWRBdHRyaWJ1dGVOYW1lfSAuICImIiAuICRzdXBwbGVtZW50YWwtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyRleHRlbmRlZEF0dHJpYnV0ZU5hbWV9OworICAgICAgICAgICAg
JHByb3BlcnR5LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnskZXh0ZW5kZWRBdHRyaWJ1dGVOYW1lfSA9
ICRwcm9wZXJ0eS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57JGV4dGVuZGVkQXR0cmlidXRlTmFtZX0g
LiAiJiIgLiAkc3VwcGxlbWVudGFsRXh0ZW5kZWRBdHRyaWJ1dGVzLT57JGV4dGVuZGVkQXR0cmli
dXRlTmFtZX07CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAkcHJvcGVydHktPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyRleHRlbmRlZEF0dHJpYnV0ZU5hbWV9ID0gJHN1cHBsZW1lbnRhbC0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57JGV4dGVuZGVkQXR0cmlidXRlTmFtZX07CisgICAgICAgICAg
ICAkcHJvcGVydHktPmV4dGVuZGVkQXR0cmlidXRlcy0+eyRleHRlbmRlZEF0dHJpYnV0ZU5hbWV9
ID0gJHN1cHBsZW1lbnRhbEV4dGVuZGVkQXR0cmlidXRlcy0+eyRleHRlbmRlZEF0dHJpYnV0ZU5h
bWV9OwogICAgICAgICB9CiAgICAgfQogfQogCiBzdWIgSXNWYWxpZFN1cHBsZW1lbnRhbEludGVy
ZmFjZQogewotICAgIG15ICgkb2JqZWN0LCAkdGFyZ2V0RG9jdW1lbnQsICRzdXBwbGVtZW50YWxJ
bnRlcmZhY2UsICR0YXJnZXRJbnRlcmZhY2VOYW1lKSA9IEBfOworICAgIG15ICgkb2JqZWN0LCAk
c3VwcGxlbWVudGFsSW50ZXJmYWNlLCAkdGFyZ2V0SW50ZXJmYWNlLCAkaW5jbHVkZXNNYXApID0g
QF87CiAKLSAgICByZXR1cm4gMSBpZiAkc3VwcGxlbWVudGFsSW50ZXJmYWNlLT5pc1BhcnRpYWwg
JiYgJHN1cHBsZW1lbnRhbEludGVyZmFjZS0+dHlwZS0+bmFtZSBlcSAkdGFyZ2V0SW50ZXJmYWNl
TmFtZTsKLSAgICByZXR1cm4gMSBpZiAkc3VwcGxlbWVudGFsSW50ZXJmYWNlLT5pc01peGluOwor
ICAgIHJldHVybiAxIGlmICRzdXBwbGVtZW50YWxJbnRlcmZhY2UtPmlzUGFydGlhbCAmJiAkc3Vw
cGxlbWVudGFsSW50ZXJmYWNlLT50eXBlLT5uYW1lIGVxICR0YXJnZXRJbnRlcmZhY2UtPnR5cGUt
Pm5hbWU7CisgICAgcmV0dXJuIDEgaWYgJHN1cHBsZW1lbnRhbEludGVyZmFjZS0+aXNNaXhpbiAm
JiAkaW5jbHVkZXNNYXAtPnskc3VwcGxlbWVudGFsSW50ZXJmYWNlLT50eXBlLT5uYW1lfTsKICAg
ICByZXR1cm4gMDsKIH0KIAogc3ViIElzVmFsaWRTdXBwbGVtZW50YWxEaWN0aW9uYXJ5CiB7Ci0g
ICAgbXkgKCRvYmplY3QsICR0YXJnZXREb2N1bWVudCwgJHN1cHBsZW1lbnRhbERpY3Rpb25hcnks
ICR0YXJnZXRJbnRlcmZhY2VOYW1lKSA9IEBfOworICAgIG15ICgkb2JqZWN0LCAkc3VwcGxlbWVu
dGFsRGljdGlvbmFyeSwgJHRhcmdldERpY3Rpb25hcnkpID0gQF87CiAKLSAgICByZXR1cm4gMSBp
ZiAkc3VwcGxlbWVudGFsRGljdGlvbmFyeS0+aXNQYXJ0aWFsICYmICRzdXBwbGVtZW50YWxEaWN0
aW9uYXJ5LT50eXBlLT5uYW1lIGVxICR0YXJnZXRJbnRlcmZhY2VOYW1lOworICAgIHJldHVybiAx
IGlmICRzdXBwbGVtZW50YWxEaWN0aW9uYXJ5LT5pc1BhcnRpYWwgJiYgJHN1cHBsZW1lbnRhbERp
Y3Rpb25hcnktPnR5cGUtPm5hbWUgZXEgJHRhcmdldERpY3Rpb25hcnktPnR5cGUtPm5hbWU7CiAg
ICAgcmV0dXJuIDA7CiB9CiAKLXN1YiBQcm9jZXNzU3VwcGxlbWVudGFsRGVwZW5kZW5jaWVzCitz
dWIgUHJvY2Vzc0ludGVyZmFjZVN1cHBsZW1lbnRhbERlcGVuZGVuY2llcwogewotICAgIG15ICgk
b2JqZWN0LCAkdGFyZ2V0RG9jdW1lbnQpID0gQF87Ci0gICAgbXkgJHRhcmdldEZpbGVOYW1lID0g
ZmlsZXBhcnNlKCR0YXJnZXREb2N1bWVudC0+ZmlsZU5hbWUpOwotICAgIG15ICR0YXJnZXRJbnRl
cmZhY2VOYW1lID0gZmlsZXBhcnNlKCR0YXJnZXRGaWxlTmFtZSwgIi5pZGwiKTsKKyAgICBteSAo
JG9iamVjdCwgJHRhcmdldEludGVyZmFjZSwgJHRhcmdldERvY3VtZW50KSA9IEBfOwogCiAgICAg
aWYgKCEkc3VwcGxlbWVudGFsRGVwZW5kZW5jaWVzKSB7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKKyAgICBteSAkdGFyZ2V0RmlsZU5hbWUgPSBmaWxlcGFyc2UoJHRhcmdldERvY3VtZW50LT5m
aWxlTmFtZSk7CisKICAgICAjIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgcHJvY2Vzc2luZyByZWN1
cnNpdmUgc3VwcGxlbWVudGFsIGRlcGVuZGVuY2llcwogICAgICMgdG8gcHJvdmlkZSBzdXBwb3J0
IGZvciBwYXJ0aWFsIGludGVyZmFjZSBtaXhpbnMuCiAKKyAgICAjIEZJWE1FOiBDdXJyZW50bHks
IHdlIHJlcXVpcmUgYWxsIHRoZSBpbmNsdWRlcyBzdGF0ZW1lbnRzIHRvIGJlIGluIHRoZQorICAg
ICMgc2FtZSBmaWxlIGFzIHRoZSBpbnRlcmZhY2UgdGhleSBhcmUgYmVpbmcgbWl4ZWQgaW50bywg
YnV0IHRoYXQgcmVzdHJpY3Rpb24KKyAgICAjIGlzIGFydGlmaWNpYWwgYW5kIHdlIGNvdWxkIGFk
ZCBzdXBwb3J0IGZvciBpbmNsdWRlcyBzdGF0ZW1lbnRzIGVsc2V3aGVyZS4KKyAgICBteSAlaW5j
bHVkZXNNYXAgPSAoKTsKKyAgICBmb3JlYWNoIG15ICRpbmNsdWRlIChAeyR0YXJnZXREb2N1bWVu
dC0+aW5jbHVkZXN9KSB7CisgICAgICAgIGlmICgkaW5jbHVkZS0+aW50ZXJmYWNlSWRlbnRpZmll
ciBlcSAkdGFyZ2V0SW50ZXJmYWNlLT50eXBlLT5uYW1lKSB7CisgICAgICAgICAgICB1bmxlc3Mg
KGdyZXAgeyBmaWxlcGFyc2UoJF8sICIuaWRsIikgZXEgJGluY2x1ZGUtPm1peGluSWRlbnRpZmll
ciB9IEB7JHN1cHBsZW1lbnRhbERlcGVuZGVuY2llcy0+eyR0YXJnZXRGaWxlTmFtZX19KSB7Cisg
ICAgICAgICAgICAgICAgZGllICJpbmNsdWRlZCBpbnRlcmZhY2UgbWl4aW4gIiAuICRpbmNsdWRl
LT5taXhpbklkZW50aWZpZXIgLiAiIG5vdCBpbiBzdXBwbGVtZW50YWwgZGVwZW5kZW5jaWVzLiIK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgJGluY2x1ZGVzTWFweyRp
bmNsdWRlLT5taXhpbklkZW50aWZpZXJ9ID0gJGluY2x1ZGU7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBteSAkZXhwb3NlZEF0dHJpYnV0ZSA9ICR0YXJnZXRJbnRlcmZhY2UtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJFeHBvc2VkIn0gfHwgIldpbmRvdyI7CisgICAgJGV4cG9zZWRBdHRyaWJ1dGUg
PSBzdWJzdHIoJGV4cG9zZWRBdHRyaWJ1dGUsIDEsIC0xKSBpZiBzdWJzdHIoJGV4cG9zZWRBdHRy
aWJ1dGUsIDAsIDEpIGVxICIoIjsKKyAgICBteSBAdGFyZ2V0R2xvYmFsQ29udGV4dHMgPSBzcGxp
dCgiLCIsICRleHBvc2VkQXR0cmlidXRlKTsKKwogICAgIGZvcmVhY2ggbXkgJGlkbEZpbGUgKEB7
JHN1cHBsZW1lbnRhbERlcGVuZGVuY2llcy0+eyR0YXJnZXRGaWxlTmFtZX19KSB7CiAgICAgICAg
IG5leHQgaWYgZmlsZXBhcnNlKCRpZGxGaWxlKSBlcSAkdGFyZ2V0RmlsZU5hbWU7CiAKQEAgLTMx
OSw4NyArMzc0LDEwNSBAQCBzdWIgUHJvY2Vzc1N1cHBsZW1lbnRhbERlcGVuZGVuY2llcwogICAg
ICAgICBteSAkZG9jdW1lbnQgPSAkcGFyc2VyLT5QYXJzZSgkaWRsRmlsZSwgJGRlZmluZXMsICRw
cmVwcm9jZXNzb3IsICRpZGxBdHRyaWJ1dGVzKTsKIAogICAgICAgICBmb3JlYWNoIG15ICRpbnRl
cmZhY2UgKEB7JGRvY3VtZW50LT5pbnRlcmZhY2VzfSkgewotICAgICAgICAgICAgbmV4dCB1bmxl
c3MgJG9iamVjdC0+SXNWYWxpZFN1cHBsZW1lbnRhbEludGVyZmFjZSgkdGFyZ2V0RG9jdW1lbnQs
ICRpbnRlcmZhY2UsICR0YXJnZXRJbnRlcmZhY2VOYW1lKTsKLQotICAgICAgICAgICAgbXkgJHRh
cmdldERhdGFOb2RlOwotICAgICAgICAgICAgbXkgQHRhcmdldEdsb2JhbENvbnRleHRzOwotICAg
ICAgICAgICAgZm9yZWFjaCBteSAkaW50ZXJmYWNlIChAeyR0YXJnZXREb2N1bWVudC0+aW50ZXJm
YWNlc30pIHsKLSAgICAgICAgICAgICAgICBpZiAoJGludGVyZmFjZS0+dHlwZS0+bmFtZSBlcSAk
dGFyZ2V0SW50ZXJmYWNlTmFtZSkgewotICAgICAgICAgICAgICAgICAgICAkdGFyZ2V0RGF0YU5v
ZGUgPSAkaW50ZXJmYWNlOwotICAgICAgICAgICAgICAgICAgICBteSAkZXhwb3NlZEF0dHJpYnV0
ZSA9ICR0YXJnZXREYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkV4cG9zZWQifSB8fCAi
V2luZG93IjsKLSAgICAgICAgICAgICAgICAgICAgJGV4cG9zZWRBdHRyaWJ1dGUgPSBzdWJzdHIo
JGV4cG9zZWRBdHRyaWJ1dGUsIDEsIC0xKSBpZiBzdWJzdHIoJGV4cG9zZWRBdHRyaWJ1dGUsIDAs
IDEpIGVxICIoIjsKLSAgICAgICAgICAgICAgICAgICAgQHRhcmdldEdsb2JhbENvbnRleHRzID0g
c3BsaXQoIiwiLCAkZXhwb3NlZEF0dHJpYnV0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGxhc3Q7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGllICJOb3Qg
Zm91bmQgYW4gaW50ZXJmYWNlICR7dGFyZ2V0SW50ZXJmYWNlTmFtZX0gaW4gJHt0YXJnZXRJbnRl
cmZhY2VOYW1lfS5pZGwuIiB1bmxlc3MgZGVmaW5lZCAkdGFyZ2V0RGF0YU5vZGU7CisgICAgICAg
ICAgICBuZXh0IHVubGVzcyAkb2JqZWN0LT5Jc1ZhbGlkU3VwcGxlbWVudGFsSW50ZXJmYWNlKCRp
bnRlcmZhY2UsICR0YXJnZXRJbnRlcmZhY2UsIFwlaW5jbHVkZXNNYXApOwogCi0gICAgICAgICAg
ICAjIFN1cHBvcnQgZm9yIGF0dHJpYnV0ZXMgb2YgcGFydGlhbCBpbnRlcmZhY2VzLgorICAgICAg
ICAgICAgIyBTdXBwb3J0IGZvciBhdHRyaWJ1dGVzIGZyb20gc3VwcGxlbWVudGFsIGludGVyZmFj
ZXMuCiAgICAgICAgICAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEB7JGludGVyZmFjZS0+YXR0
cmlidXRlc30pIHsKICAgICAgICAgICAgICAgICBuZXh0IHVubGVzcyBzaG91bGRQcm9wZXJ0eUJl
RXhwb3NlZCgkYXR0cmlidXRlLCBcQHRhcmdldEdsb2JhbENvbnRleHRzKTsKIAotICAgICAgICAg
ICAgICAgICMgUmVjb3JkIHRoYXQgdGhpcyBhdHRyaWJ1dGUgaXMgaW1wbGVtZW50ZWQgYnkgJGlu
dGVyZmFjZU5hbWUuCi0gICAgICAgICAgICAgICAgJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkltcGxlbWVudGVkQnkifSA9ICRpbnRlcmZhY2VOYW1lIGlmICRpbnRlcmZhY2UtPmlz
UGFydGlhbCAmJiAhJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57UmVmbGVjdH07Cisg
ICAgICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmlzUGFydGlhbCkgeworICAgICAgICAgICAg
ICAgICAgICAjIFJlY29yZCB0aGF0IHRoaXMgYXR0cmlidXRlIGlzIGltcGxlbWVudGVkIGJ5ICRp
bnRlcmZhY2VOYW1lLgorICAgICAgICAgICAgICAgICAgICAkYXR0cmlidXRlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiSW1wbGVtZW50ZWRCeSJ9ID0gJGludGVyZmFjZU5hbWUgaWYgISRhdHRyaWJ1
dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1JlZmxlY3R9OworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5pc01peGluKSB7CisgICAgICAgICAgICAg
ICAgICAgICMgQWRkIGluY2x1ZGVzIHN0YXRlbWVudCBzcGVjaWZpYyBleHRlbmRlZCBhdHRyaWJ1
dGVzIHRvIGVhY2ggYXR0cmlidXRlLgorICAgICAgICAgICAgICAgICAgICAkb2JqZWN0LT5NZXJn
ZUV4dGVuZGVkQXR0cmlidXRlc0Zyb21TdXBwbGVtZW50YWwoJGluY2x1ZGVzTWFweyRpbnRlcmZh
Y2UtPnR5cGUtPm5hbWV9LT5leHRlbmRlZEF0dHJpYnV0ZXMsICRhdHRyaWJ1dGUsICJhdHRyaWJ1
dGUiKTsKKyAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAjIEFkZCBpbnRlcmZh
Y2Utd2lkZSBleHRlbmRlZCBhdHRyaWJ1dGVzIHRvIGVhY2ggYXR0cmlidXRlLgotICAgICAgICAg
ICAgICAgICRvYmplY3QtPk1lcmdlRXh0ZW5kZWRBdHRyaWJ1dGVzRnJvbVN1cHBsZW1lbnRhbCgk
aW50ZXJmYWNlLCAkYXR0cmlidXRlLCAiYXR0cmlidXRlIik7CisgICAgICAgICAgICAgICAgJG9i
amVjdC0+TWVyZ2VFeHRlbmRlZEF0dHJpYnV0ZXNGcm9tU3VwcGxlbWVudGFsKCRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcywgJGF0dHJpYnV0ZSwgImF0dHJpYnV0ZSIpOwogCi0gICAgICAg
ICAgICAgICAgcHVzaChAeyR0YXJnZXREYXRhTm9kZS0+YXR0cmlidXRlc30sICRhdHRyaWJ1dGUp
OworICAgICAgICAgICAgICAgIHB1c2goQHskdGFyZ2V0SW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSwg
JGF0dHJpYnV0ZSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICMgU3VwcG9ydCBmb3Ig
bWV0aG9kcyBvZiBwYXJ0aWFsIGludGVyZmFjZXMuCisgICAgICAgICAgICAjIFN1cHBvcnQgZm9y
IG9wZXJhdGlvbnMgZnJvbSBzdXBwbGVtZW50YWwgaW50ZXJmYWNlcy4KICAgICAgICAgICAgIGZv
cmVhY2ggbXkgJG9wZXJhdGlvbiAoQHskaW50ZXJmYWNlLT5vcGVyYXRpb25zfSkgewogICAgICAg
ICAgICAgICAgIG5leHQgdW5sZXNzIHNob3VsZFByb3BlcnR5QmVFeHBvc2VkKCRvcGVyYXRpb24s
IFxAdGFyZ2V0R2xvYmFsQ29udGV4dHMpOwogCi0gICAgICAgICAgICAgICAgIyBSZWNvcmQgdGhh
dCB0aGlzIG1ldGhvZCBpcyBpbXBsZW1lbnRlZCBieSAkaW50ZXJmYWNlTmFtZS4KLSAgICAgICAg
ICAgICAgICAkb3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50ZWRCeSJ9
ID0gJGludGVyZmFjZU5hbWUgaWYgJGludGVyZmFjZS0+aXNQYXJ0aWFsOwotICAgIAorICAgICAg
ICAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5pc1BhcnRpYWwpIHsKKyAgICAgICAgICAgICAgICAg
ICAgIyBSZWNvcmQgdGhhdCB0aGlzIG1ldGhvZCBpcyBpbXBsZW1lbnRlZCBieSAkaW50ZXJmYWNl
TmFtZS4KKyAgICAgICAgICAgICAgICAgICAgJG9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkltcGxlbWVudGVkQnkifSA9ICRpbnRlcmZhY2VOYW1lOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5pc01peGluKSB7CisgICAgICAgICAg
ICAgICAgICAgICMgQWRkIGluY2x1ZGVzIHN0YXRlbWVudCBzcGVjaWZpYyBleHRlbmRlZCBhdHRy
aWJ1dGVzIHRvIGVhY2ggb3BlcmF0aW9uLgorICAgICAgICAgICAgICAgICAgICAkb2JqZWN0LT5N
ZXJnZUV4dGVuZGVkQXR0cmlidXRlc0Zyb21TdXBwbGVtZW50YWwoJGluY2x1ZGVzTWFweyRpbnRl
cmZhY2UtPnR5cGUtPm5hbWV9LT5leHRlbmRlZEF0dHJpYnV0ZXMsICRvcGVyYXRpb24sICJvcGVy
YXRpb24iKTsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICAjIEFkZCBpbnRl
cmZhY2Utd2lkZSBleHRlbmRlZCBhdHRyaWJ1dGVzIHRvIGVhY2ggb3BlcmF0aW9uLgotICAgICAg
ICAgICAgICAgICRvYmplY3QtPk1lcmdlRXh0ZW5kZWRBdHRyaWJ1dGVzRnJvbVN1cHBsZW1lbnRh
bCgkaW50ZXJmYWNlLCAkb3BlcmF0aW9uLCAib3BlcmF0aW9uIik7Ci0gICAgICAgICAgICAgICAg
cHVzaChAeyR0YXJnZXREYXRhTm9kZS0+b3BlcmF0aW9uc30sICRvcGVyYXRpb24pOworICAgICAg
ICAgICAgICAgICRvYmplY3QtPk1lcmdlRXh0ZW5kZWRBdHRyaWJ1dGVzRnJvbVN1cHBsZW1lbnRh
bCgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMsICRvcGVyYXRpb24sICJvcGVyYXRpb24i
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBwdXNoKEB7JHRhcmdldEludGVy
ZmFjZS0+b3BlcmF0aW9uc30sICRvcGVyYXRpb24pOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAjIFN1cHBvcnQgZm9yIGNvbnN0YW50cyBvZiBwYXJ0aWFsIGludGVyZmFjZXMuCisgICAg
ICAgICAgICAjIFN1cHBvcnQgZm9yIGNvbnN0YW50cyBmcm9tIHN1cHBsZW1lbnRhbCBpbnRlcmZh
Y2VzLgogICAgICAgICAgICAgZm9yZWFjaCBteSAkY29uc3RhbnQgKEB7JGludGVyZmFjZS0+Y29u
c3RhbnRzfSkgewogICAgICAgICAgICAgICAgIG5leHQgdW5sZXNzIHNob3VsZFByb3BlcnR5QmVF
eHBvc2VkKCRjb25zdGFudCwgXEB0YXJnZXRHbG9iYWxDb250ZXh0cyk7CiAKLSAgICAgICAgICAg
ICAgICAjIFJlY29yZCB0aGF0IHRoaXMgY29uc3RhbnQgaXMgaW1wbGVtZW50ZWQgYnkgJGludGVy
ZmFjZU5hbWUuCi0gICAgICAgICAgICAgICAgJGNvbnN0YW50LT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiSW1wbGVtZW50ZWRCeSJ9ID0gJGludGVyZmFjZU5hbWUgaWYgJGludGVyZmFjZS0+aXNQYXJ0
aWFsOworICAgICAgICAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5pc1BhcnRpYWwpIHsKKyAgICAg
ICAgICAgICAgICAgICAgIyBSZWNvcmQgdGhhdCB0aGlzIGNvbnN0YW50IGlzIGltcGxlbWVudGVk
IGJ5ICRpbnRlcmZhY2VOYW1lLgorICAgICAgICAgICAgICAgICAgICAkY29uc3RhbnQtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJJbXBsZW1lbnRlZEJ5In0gPSAkaW50ZXJmYWNlTmFtZTsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoJGludGVyZmFjZS0+aXNNaXhpbikg
eworICAgICAgICAgICAgICAgICAgICAjIEFkZCBpbmNsdWRlcyBzdGF0ZW1lbnQgc3BlY2lmaWMg
ZXh0ZW5kZWQgYXR0cmlidXRlcyB0byBlYWNoIG9wZXJhdGlvbi4KKyAgICAgICAgICAgICAgICAg
ICAgJG9iamVjdC0+TWVyZ2VFeHRlbmRlZEF0dHJpYnV0ZXNGcm9tU3VwcGxlbWVudGFsKCRpbmNs
dWRlc01hcHskaW50ZXJmYWNlLT50eXBlLT5uYW1lfS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLCAkY29u
c3RhbnQsICJjb25zdGFudCIpOworICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAg
ICMgQWRkIGludGVyZmFjZS13aWRlIGV4dGVuZGVkIGF0dHJpYnV0ZXMgdG8gZWFjaCBjb25zdGFu
dC4KLSAgICAgICAgICAgICAgICAkb2JqZWN0LT5NZXJnZUV4dGVuZGVkQXR0cmlidXRlc0Zyb21T
dXBwbGVtZW50YWwoJGludGVyZmFjZSwgJGNvbnN0YW50LCAiY29uc3RhbnQiKTsKKyAgICAgICAg
ICAgICAgICAkb2JqZWN0LT5NZXJnZUV4dGVuZGVkQXR0cmlidXRlc0Zyb21TdXBwbGVtZW50YWwo
JGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLCAkY29uc3RhbnQsICJjb25zdGFudCIpOwog
Ci0gICAgICAgICAgICAgICAgcHVzaChAeyR0YXJnZXREYXRhTm9kZS0+Y29uc3RhbnRzfSwgJGNv
bnN0YW50KTsKKyAgICAgICAgICAgICAgICBwdXNoKEB7JHRhcmdldEludGVyZmFjZS0+Y29uc3Rh
bnRzfSwgJGNvbnN0YW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgIH0KK30KIAot
ICAgICAgICBmb3JlYWNoIG15ICRkaWN0aW9uYXJ5IChAeyRkb2N1bWVudC0+ZGljdGlvbmFyaWVz
fSkgewotICAgICAgICAgICAgbmV4dCB1bmxlc3MgJG9iamVjdC0+SXNWYWxpZFN1cHBsZW1lbnRh
bERpY3Rpb25hcnkoJHRhcmdldERvY3VtZW50LCAkZGljdGlvbmFyeSwgJHRhcmdldEludGVyZmFj
ZU5hbWUpOworc3ViIFByb2Nlc3NEaWN0aW9uYXJ5U3VwcGxlbWVudGFsRGVwZW5kZW5jaWVzCit7
CisgICAgbXkgKCRvYmplY3QsICR0YXJnZXREaWN0aW9uYXJ5LCAkdGFyZ2V0RG9jdW1lbnQpID0g
QF87CiAKLSAgICAgICAgICAgIG15ICR0YXJnZXREYXRhTm9kZTsKLSAgICAgICAgICAgIG15IEB0
YXJnZXRHbG9iYWxDb250ZXh0czsKLSAgICAgICAgICAgIGZvcmVhY2ggbXkgJGRpY3Rpb25hcnkg
KEB7JHRhcmdldERvY3VtZW50LT5kaWN0aW9uYXJpZXN9KSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCRkaWN0aW9uYXJ5LT50eXBlLT5uYW1lIGVxICR0YXJnZXRJbnRlcmZhY2VOYW1lKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICR0YXJnZXREYXRhTm9kZSA9ICRkaWN0aW9uYXJ5OwotICAgICAgICAg
ICAgICAgICAgICBteSAkZXhwb3NlZEF0dHJpYnV0ZSA9ICR0YXJnZXREYXRhTm9kZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkV4cG9zZWQifSB8fCAiV2luZG93IjsKLSAgICAgICAgICAgICAgICAg
ICAgJGV4cG9zZWRBdHRyaWJ1dGUgPSBzdWJzdHIoJGV4cG9zZWRBdHRyaWJ1dGUsIDEsIC0xKSBp
ZiBzdWJzdHIoJGV4cG9zZWRBdHRyaWJ1dGUsIDAsIDEpIGVxICIoIjsKLSAgICAgICAgICAgICAg
ICAgICAgQHRhcmdldEdsb2JhbENvbnRleHRzID0gc3BsaXQoIiwiLCAkZXhwb3NlZEF0dHJpYnV0
ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGxhc3Q7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZGllICJDb3VsZCBub3QgZmluZCBkaWN0aW9uYXJ5ICR7dGFy
Z2V0SW50ZXJmYWNlTmFtZX0gaW4gJHt0YXJnZXRJbnRlcmZhY2VOYW1lfS5pZGwuIiB1bmxlc3Mg
ZGVmaW5lZCAkdGFyZ2V0RGF0YU5vZGU7CisgICAgaWYgKCEkc3VwcGxlbWVudGFsRGVwZW5kZW5j
aWVzKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBteSAkZXhwb3NlZEF0dHJpYnV0
ZSA9ICR0YXJnZXREaWN0aW9uYXJ5LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRXhwb3NlZCJ9IHx8
ICJXaW5kb3ciOworICAgICRleHBvc2VkQXR0cmlidXRlID0gc3Vic3RyKCRleHBvc2VkQXR0cmli
dXRlLCAxLCAtMSkgaWYgc3Vic3RyKCRleHBvc2VkQXR0cmlidXRlLCAwLCAxKSBlcSAiKCI7Cisg
ICAgbXkgQHRhcmdldEdsb2JhbENvbnRleHRzID0gc3BsaXQoIiwiLCAkZXhwb3NlZEF0dHJpYnV0
ZSk7CiAKLSAgICAgICAgICAgICMgU3VwcG9ydCBmb3IgbWVtYmVycyBvZiBwYXJ0aWFsIGRpY3Rp
b25hcmllcworICAgIG15ICR0YXJnZXRGaWxlTmFtZSA9IGZpbGVwYXJzZSgkdGFyZ2V0RG9jdW1l
bnQtPmZpbGVOYW1lKTsKKyAgICBmb3JlYWNoIG15ICRpZGxGaWxlIChAeyRzdXBwbGVtZW50YWxE
ZXBlbmRlbmNpZXMtPnskdGFyZ2V0RmlsZU5hbWV9fSkgeworICAgICAgICBuZXh0IGlmIGZpbGVw
YXJzZSgkaWRsRmlsZSkgZXEgJHRhcmdldEZpbGVOYW1lOworCisgICAgICAgIG15ICRkaWN0aW9u
YXJ5TmFtZSA9IGZpbGVwYXJzZSgkaWRsRmlsZSwgIi5pZGwiKTsKKyAgICAgICAgbXkgJHBhcnNl
ciA9IElETFBhcnNlci0+bmV3KCEkdmVyYm9zZSk7CisgICAgICAgIG15ICRkb2N1bWVudCA9ICRw
YXJzZXItPlBhcnNlKCRpZGxGaWxlLCAkZGVmaW5lcywgJHByZXByb2Nlc3NvciwgJGlkbEF0dHJp
YnV0ZXMpOworCisgICAgICAgIGZvcmVhY2ggbXkgJGRpY3Rpb25hcnkgKEB7JGRvY3VtZW50LT5k
aWN0aW9uYXJpZXN9KSB7CisgICAgICAgICAgICBuZXh0IHVubGVzcyAkb2JqZWN0LT5Jc1ZhbGlk
U3VwcGxlbWVudGFsRGljdGlvbmFyeSgkZGljdGlvbmFyeSwgJHRhcmdldERpY3Rpb25hcnkpOwor
CisgICAgICAgICAgICAjIFN1cHBvcnQgZm9yIG1lbWJlcnMgb2YgcGFydGlhbCBkaWN0aW9uYXJp
ZXMuCiAgICAgICAgICAgICBmb3JlYWNoIG15ICRtZW1iZXIgKEB7JGRpY3Rpb25hcnktPm1lbWJl
cnN9KSB7CiAgICAgICAgICAgICAgICAgbmV4dCB1bmxlc3Mgc2hvdWxkUHJvcGVydHlCZUV4cG9z
ZWQoJG1lbWJlciwgXEB0YXJnZXRHbG9iYWxDb250ZXh0cyk7CiAKLSAgICAgICAgICAgICAgICAj
IFJlY29yZCB0aGF0IHRoaXMgbWVtYmVyIGlzIGltcGxlbWVudGVkIGJ5ICRpbnRlcmZhY2VOYW1l
LgotICAgICAgICAgICAgICAgICRtZW1iZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbXBsZW1l
bnRlZEJ5In0gPSAkaW50ZXJmYWNlTmFtZTsKKyAgICAgICAgICAgICAgICAjIFJlY29yZCB0aGF0
IHRoaXMgbWVtYmVyIGlzIGltcGxlbWVudGVkIGJ5ICRkaWN0aW9uYXJ5TmFtZS4KKyAgICAgICAg
ICAgICAgICAkbWVtYmVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50ZWRCeSJ9ID0g
JGRpY3Rpb25hcnlOYW1lOwogCiAgICAgICAgICAgICAgICAgIyBBZGQgaW50ZXJmYWNlLXdpZGUg
ZXh0ZW5kZWQgYXR0cmlidXRlcyB0byBlYWNoIG1lbWJlci4KLSAgICAgICAgICAgICAgICAkb2Jq
ZWN0LT5NZXJnZUV4dGVuZGVkQXR0cmlidXRlc0Zyb21TdXBwbGVtZW50YWwoJGRpY3Rpb25hcnks
ICRtZW1iZXIsICJkaWN0aW9uYXJ5LW1lbWJlciIpOworICAgICAgICAgICAgICAgICRvYmplY3Qt
Pk1lcmdlRXh0ZW5kZWRBdHRyaWJ1dGVzRnJvbVN1cHBsZW1lbnRhbCgkZGljdGlvbmFyeS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLCAkbWVtYmVyLCAiZGljdGlvbmFyeS1tZW1iZXIiKTsKIAotICAgICAg
ICAgICAgICAgIHB1c2goQHskdGFyZ2V0RGF0YU5vZGUtPm1lbWJlcnN9LCAkbWVtYmVyKTsKKyAg
ICAgICAgICAgICAgICBwdXNoKEB7JHRhcmdldERpY3Rpb25hcnktPm1lbWJlcnN9LCAkbWVtYmVy
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTczNCwxNSArODA3LDE1IEBA
IHN1YiBHZXREaWN0aW9uYXJ5QnlUeXBlCiAgICAgICAgIG15ICRwYXJzZXIgPSBJRExQYXJzZXIt
Pm5ldygxKTsKICAgICAgICAgbXkgJGRvY3VtZW50ID0gJHBhcnNlci0+UGFyc2UoJGZpbGVuYW1l
LCAkZGVmaW5lcywgJHByZXByb2Nlc3NvciwgJGlkbEF0dHJpYnV0ZXMpOwogCi0gICAgICAgICRv
YmplY3QtPlByb2Nlc3NTdXBwbGVtZW50YWxEZXBlbmRlbmNpZXMoJGRvY3VtZW50KTsKLQogICAg
ICAgICBmb3JlYWNoIG15ICRkaWN0aW9uYXJ5IChAeyRkb2N1bWVudC0+ZGljdGlvbmFyaWVzfSkg
ewotICAgICAgICAgICAgbmV4dCB1bmxlc3MgJGRpY3Rpb25hcnktPnR5cGUtPm5hbWUgZXEgJG5h
bWU7CisgICAgICAgICAgICBpZiAoJGRpY3Rpb25hcnktPnR5cGUtPm5hbWUgZXEgJG5hbWUpIHsK
KyAgICAgICAgICAgICAgICAkb2JqZWN0LT5Qcm9jZXNzRGljdGlvbmFyeVN1cHBsZW1lbnRhbERl
cGVuZGVuY2llcygkZGljdGlvbmFyeSwgJGRvY3VtZW50KTsKIAotICAgICAgICAgICAgJGNhY2hl
ZEV4dGVybmFsRGljdGlvbmFyaWVzLT57JG5hbWV9ID0gJGRpY3Rpb25hcnk7Ci0gICAgICAgICAg
ICBteSAkaW1wbGVtZW50ZWRBcyA9ICRkaWN0aW9uYXJ5LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntJ
bXBsZW1lbnRlZEFzfTsKLSAgICAgICAgICAgICRkaWN0aW9uYXJ5VHlwZUltcGxlbWVudGF0aW9u
TmFtZU92ZXJyaWRlc3skZGljdGlvbmFyeS0+dHlwZS0+bmFtZX0gPSAkaW1wbGVtZW50ZWRBcyBp
ZiAkaW1wbGVtZW50ZWRBczsKLSAgICAgICAgICAgIHJldHVybiAkZGljdGlvbmFyeTsKKyAgICAg
ICAgICAgICAgICAkY2FjaGVkRXh0ZXJuYWxEaWN0aW9uYXJpZXMtPnskbmFtZX0gPSAkZGljdGlv
bmFyeTsKKyAgICAgICAgICAgICAgICBteSAkaW1wbGVtZW50ZWRBcyA9ICRkaWN0aW9uYXJ5LT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPntJbXBsZW1lbnRlZEFzfTsKKyAgICAgICAgICAgICAgICAkZGlj
dGlvbmFyeVR5cGVJbXBsZW1lbnRhdGlvbk5hbWVPdmVycmlkZXN7JG5hbWV9ID0gJGltcGxlbWVu
dGVkQXMgaWYgJGltcGxlbWVudGVkQXM7CisgICAgICAgICAgICAgICAgcmV0dXJuICRkaWN0aW9u
YXJ5OworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgICRjYWNoZWRFeHRlcm5h
bERpY3Rpb25hcmllcy0+eyRuYW1lfSA9IHVuZGVmOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLmpzb24KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLmpzb24JKHJldmlzaW9uIDI2NjY5
MSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy5qc29u
CSh3b3JraW5nIGNvcHkpCkBAIC0xMyw3ICsxMyw4IEBACiAgICAgICAgICJ1bmlvbi1tZW1iZXIi
LAogICAgICAgICAiaXRlcmFibGUiLAogICAgICAgICAibWFwLWxpa2UiLAotICAgICAgICAic2V0
LWxpa2UiCisgICAgICAgICJzZXQtbGlrZSIsCisgICAgICAgICJpbmNsdWRlcyIKICAgICBdLAog
ICAgICJhdHRyaWJ1dGVzIjogewogICAgICAgICAiQWN0aXZlRE9NT2JqZWN0IjogewpAQCAtNjks
NyArNzAsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9LAogICAgICAgICAiQ29uZGl0aW9u
YWwiOiB7Ci0gICAgICAgICAgICAiY29udGV4dHNBbGxvd2VkIjogWyJpbnRlcmZhY2UiLCAiZGlj
dGlvbmFyeSIsICJkaWN0aW9uYXJ5LW1lbWJlciIsICJlbnVtIiwgImF0dHJpYnV0ZSIsICJvcGVy
YXRpb24iLCAiY29uc3RhbnQiLCAiY2FsbGJhY2stZnVuY3Rpb24iXSwKKyAgICAgICAgICAgICJj
b250ZXh0c0FsbG93ZWQiOiBbImludGVyZmFjZSIsICJkaWN0aW9uYXJ5IiwgImRpY3Rpb25hcnkt
bWVtYmVyIiwgImVudW0iLCAiYXR0cmlidXRlIiwgIm9wZXJhdGlvbiIsICJjb25zdGFudCIsICJj
YWxsYmFjay1mdW5jdGlvbiIsICJpbmNsdWRlcyJdLAogICAgICAgICAgICAgInZhbHVlcyI6IFsi
KiJdLAogICAgICAgICAgICAgInN1cHBvcnRzQ29uanVuY3Rpb24iOiB0cnVlCiAgICAgICAgIH0s
CkBAIC0xNzIsMTIgKzE3MywxMiBAQAogICAgICAgICAgICAgImNvbnRleHRzQWxsb3dlZCI6IFsi
YXR0cmlidXRlIl0KICAgICAgICAgfSwKICAgICAgICAgIkVuYWJsZWRBdFJ1bnRpbWUiOiB7Ci0g
ICAgICAgICAgICAiY29udGV4dHNBbGxvd2VkIjogWyJpbnRlcmZhY2UiLCAiZGljdGlvbmFyeSIs
ICJlbnVtIiwgImF0dHJpYnV0ZSIsICJvcGVyYXRpb24iLCAiY29uc3RhbnQiLCAiaXRlcmFibGUi
XSwKKyAgICAgICAgICAgICJjb250ZXh0c0FsbG93ZWQiOiBbImludGVyZmFjZSIsICJkaWN0aW9u
YXJ5IiwgImVudW0iLCAiYXR0cmlidXRlIiwgIm9wZXJhdGlvbiIsICJjb25zdGFudCIsICJpdGVy
YWJsZSIsICJpbmNsdWRlcyJdLAogICAgICAgICAgICAgInZhbHVlcyI6IFsiKiJdLAogICAgICAg
ICAgICAgInN1cHBvcnRzQ29uanVuY3Rpb24iOiB0cnVlCiAgICAgICAgIH0sCiAgICAgICAgICJF
bmFibGVkQnlTZXR0aW5nIjogewotICAgICAgICAgICAgImNvbnRleHRzQWxsb3dlZCI6IFsiaW50
ZXJmYWNlIiwgImRpY3Rpb25hcnkiLCAiZW51bSIsICJhdHRyaWJ1dGUiLCAib3BlcmF0aW9uIiwg
ImNvbnN0YW50IiwgImRpY3Rpb25hcnktbWVtYmVyIl0sCisgICAgICAgICAgICAiY29udGV4dHNB
bGxvd2VkIjogWyJpbnRlcmZhY2UiLCAiZGljdGlvbmFyeSIsICJlbnVtIiwgImF0dHJpYnV0ZSIs
ICJvcGVyYXRpb24iLCAiY29uc3RhbnQiLCAiZGljdGlvbmFyeS1tZW1iZXIiLCAiaW5jbHVkZXMi
XSwKICAgICAgICAgICAgICJ2YWx1ZXMiOiBbIioiXSwKICAgICAgICAgICAgICJzdXBwb3J0c0Nv
bmp1bmN0aW9uIjogdHJ1ZQogICAgICAgICB9LApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9JRExQYXJzZXIucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0JKHJldmlzaW9uIDI2NjY5MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTMsOCArMTkzLDggQEAgc3RydWN0KCBJRExEaWN0aW9uYXJ5ID0+IHsKICAgICB0eXBlID0+ICdJ
RExUeXBlJywKICAgICBwYXJlbnRUeXBlID0+ICdJRExUeXBlJywKICAgICBtZW1iZXJzID0+ICdA
JywgIyBMaXN0IG9mICdJRExEaWN0aW9uYXJ5TWVtYmVyJwotICAgIGV4dGVuZGVkQXR0cmlidXRl
cyA9PiAnJCcsCiAgICAgaXNQYXJ0aWFsID0+ICckJywgIyBVc2VkIGZvciBwYXJ0aWFsIGRpY3Rp
b25hcmllcworICAgIGV4dGVuZGVkQXR0cmlidXRlcyA9PiAnJCcsCiB9KTsKIAogIyBodHRwczov
L2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNpZGwtY2FsbGJhY2stZnVuY3Rpb25zCkBAIC0yMDks
MTQgKzIwOSwxNSBAQCBzdHJ1Y3QoIElETE5hbWVzcGFjZSA9PiB7CiAgICAgbmFtZSA9PiAnJCcs
CiAgICAgb3BlcmF0aW9ucyA9PiAnQCcsICMgTGlzdCBvZiAnSURMT3BlcmF0aW9uJwogICAgIGF0
dHJpYnV0ZXMgPT4gJ0AnLCAjIExpc3Qgb2YgJ0lETEF0dHJpYnV0ZScKLSAgICBleHRlbmRlZEF0
dHJpYnV0ZXMgPT4gJyQnLAogICAgIGlzUGFydGlhbCA9PiAnJCcsICMgVXNlZCBmb3IgcGFydGlh
bCBuYW1lc3BhY2VzCisgICAgZXh0ZW5kZWRBdHRyaWJ1dGVzID0+ICckJywKIH0pOwogCiAjIGh0
dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2luY2x1ZGVzLXN0YXRlbWVudAogc3RydWN0
KCBJRExJbmNsdWRlc1N0YXRlbWVudCA9PiB7CiAgICAgaW50ZXJmYWNlSWRlbnRpZmllciA9PiAn
JCcsCiAgICAgbWl4aW5JZGVudGlmaWVyID0+ICckJywKKyAgICBleHRlbmRlZEF0dHJpYnV0ZXMg
PT4gJyQnLAogfSk7CiAKICMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jaWRsLXR5
cGVkZWZzCkBAIC0xNjU0LDYgKzE2NTUsOSBAQCBzdWIgcGFyc2VJbmNsdWRlc1N0YXRlbWVudAog
CiAgICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiOyIs
IF9fTElORV9fKTsKIAorICAgICAgICAkc2VsZi0+YXNzZXJ0RXh0ZW5kZWRBdHRyaWJ1dGVzVmFs
aWRGb3JDb250ZXh0KCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QsICJpbmNsdWRlcyIpOworICAgICAg
ICAkaW5jbHVkZXNTdGF0ZW1lbnQtPmV4dGVuZGVkQXR0cmlidXRlcygkZXh0ZW5kZWRBdHRyaWJ1
dGVMaXN0KTsKKwogICAgICAgICByZXR1cm4gJGluY2x1ZGVzU3RhdGVtZW50OwogICAgIH0KICAg
ICAkc2VsZi0+YXNzZXJ0VW5leHBlY3RlZFRva2VuKCRuZXh0LT52YWx1ZSgpLCBfX0xJTkVfXyk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3ByZXByb2Nlc3MtaWRscy5w
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3ByZXByb2Nl
c3MtaWRscy5wbAkocmV2aXNpb24gMjY2NjkxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9wcmVwcm9jZXNzLWlkbHMucGwJKHdvcmtpbmcgY29weSkKQEAgLTQ5NSw3ICs0OTUs
NyBAQCBzdWIgZ2V0SW5jbHVkZWRJbnRlcmZhY2VzRnJvbUlETAogICAgIG15ICRmaWxlQ29udGVu
dHMgPSAkaWRsRmlsZS0+ZmlsZUNvbnRlbnRzOwogCiAgICAgbXkgQGluY2x1ZGVkSW50ZXJmYWNl
cyA9ICgpOwotICAgIHdoaWxlICgkZmlsZUNvbnRlbnRzID1+IC9eXHMqKFx3KylccytpbmNsdWRl
c1xzKyhcdyspXHMqOy9tZykgeworICAgIHdoaWxlICgkZmlsZUNvbnRlbnRzID1+IC9ccyooXHcr
KVxzK2luY2x1ZGVzXHMrKFx3Kylccyo7L21nKSB7CiAgICAgICAgIGRpZSAiSWRlbnRpZmllciBv
biB0aGUgbGVmdCBvZiB0aGUgJ2luY2x1ZGVzJyBzdGF0ZW1lbnQgc2hvdWxkIGJlICRpbnRlcmZh
Y2VOYW1lIGluICRpbnRlcmZhY2VOYW1lLmlkbCwgYnV0IGZvdW5kICQxIiBpZiAkMSBuZSAkaW50
ZXJmYWNlTmFtZTsKICAgICAgICAgcHVzaChAaW5jbHVkZWRJbnRlcmZhY2VzLCAkMik7CiAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0JpbmRpbmdUZXN0
R2xvYmFsQ29uc3RydWN0b3JzLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvQmluZGluZ1Rlc3RHbG9iYWxDb25zdHJ1Y3RvcnMuaWRsCShyZXZp
c2lvbiAyNjY2OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQmlu
ZGluZ1Rlc3RHbG9iYWxDb25zdHJ1Y3RvcnMuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC04LDYgKzgs
NyBAQCBwYXJ0aWFsIGludGVyZmFjZSBUZXN0R2xvYmFsT2JqZWN0IHsKICAgICBhdHRyaWJ1dGUg
VGVzdENhbGxUcmFjZXJDb25zdHJ1Y3RvciBUZXN0Q2FsbFRyYWNlcjsKICAgICBbQ29uZGl0aW9u
YWw9VEVTVF9DT05ESVRJT05BTF0gYXR0cmlidXRlIFRlc3RDYWxsYmFja0ludGVyZmFjZUNvbnN0
cnVjdG9yIFRlc3RDYWxsYmFja0ludGVyZmFjZTsKICAgICBhdHRyaWJ1dGUgVGVzdENsYXNzV2l0
aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IgVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNv
bnN0cnVjdG9yOworICAgIGF0dHJpYnV0ZSBUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc0NvbnN0cnVj
dG9yIFRlc3RDb25kaXRpb25hbEluY2x1ZGVzOwogICAgIGF0dHJpYnV0ZSBUZXN0RE9NSklUQ29u
c3RydWN0b3IgVGVzdERPTUpJVDsKICAgICBhdHRyaWJ1dGUgVGVzdERvbWFpblNlY3VyaXR5Q29u
c3RydWN0b3IgVGVzdERvbWFpblNlY3VyaXR5OwogICAgIGF0dHJpYnV0ZSBUZXN0RW5hYmxlZEJ5
U2V0dGluZ0NvbnN0cnVjdG9yIFRlc3RFbmFibGVkQnlTZXR0aW5nOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1N1cHBsZW1lbnRhbERlcGVuZGVuY2llcy5kZXAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1N1cHBs
ZW1lbnRhbERlcGVuZGVuY2llcy5kZXAJKHJldmlzaW9uIDI2NjY5MSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9TdXBwbGVtZW50YWxEZXBlbmRlbmNpZXMuZGVwCSh3
b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSwxMCBAQCBXZWJET01UZXN0Q2FsbGJhY2tJbnRlcmZh
Y2UuaDogCiBKU1Rlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oOiAKIERPTVRlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oOiAKIFdlYkRPTVRlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3Rvci5oOiAKK0pTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMuaDogVGVzdElu
Y2x1ZGVzLmlkbAorRE9NVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMuaDogVGVzdEluY2x1ZGVzLmlk
bAorV2ViRE9NVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMuaDogVGVzdEluY2x1ZGVzLmlkbAorVGVz
dEluY2x1ZGVzLmlkbDoKIEpTVGVzdERPTUpJVC5oOiAKIERPTVRlc3RET01KSVQuaDogCiBXZWJE
T01UZXN0RE9NSklULmg6IApAQCAtMTc5LDkgKzE4MywxMCBAQCBXZWJET01UZXN0TmFtZWRTZXR0
ZXJXaXRoTGVnYWN5VW5mb3JnZWFiCiBKU1Rlc3ROb2RlLmg6IAogRE9NVGVzdE5vZGUuaDogCiBX
ZWJET01UZXN0Tm9kZS5oOiAKLUpTVGVzdE9iai5oOiAKLURPTVRlc3RPYmouaDogCi1XZWJET01U
ZXN0T2JqLmg6IAorSlNUZXN0T2JqLmg6IFRlc3RJbmNsdWRlcy5pZGwKK0RPTVRlc3RPYmouaDog
VGVzdEluY2x1ZGVzLmlkbAorV2ViRE9NVGVzdE9iai5oOiBUZXN0SW5jbHVkZXMuaWRsCitUZXN0
SW5jbHVkZXMuaWRsOgogSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwuaDogVGVzdE9wZXJhdGlv
bkJhc2UuaWRsCiBET01UZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwuaDogVGVzdE9wZXJhdGlvbkJh
c2UuaWRsCiBXZWJET01UZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwuaDogVGVzdE9wZXJhdGlvbkJh
c2UuaWRsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdENv
bmRpdGlvbmFsSW5jbHVkZXMuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9UZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5pZGwJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RDb25kaXRpb25h
bEluY2x1ZGVzLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zdHJBcmcsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVzdHJB
cmcsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBUaGlzIElE
TCBmaWxlIGlzIGZvciB0ZXN0aW5nIHRoZSBiaW5kaW5ncyBjb2RlIGdlbmVyYXRvciBhbmQgZm9y
IHRyYWNraW5nCisvLyBjaGFuZ2VzIGluIGl0cyBvdXRwdXQuCisKK2ludGVyZmFjZSBUZXN0Q29u
ZGl0aW9uYWxJbmNsdWRlcyB7CisgICAgcmVhZG9ubHkgYXR0cmlidXRlIGRvdWJsZSB0ZXN0QXR0
cjsKK307CisKK1tDb25kaXRpb25hbD1Db25kaXRpb24xMiwgRW5hYmxlZEJ5U2V0dGluZz1UZXN0
U2V0dGluZzJdIFRlc3RDb25kaXRpb25hbEluY2x1ZGVzIGluY2x1ZGVzIFRlc3RJbmNsdWRlczsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0SW5jbHVkZXMu
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9U
ZXN0SW5jbHVkZXMuaWRsCShyZXZpc2lvbiAyNjY2OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEluY2x1ZGVzLmlkbAkod29ya2luZyBjb3B5KQpAQCAtNDAs
NiArNDAsOCBAQAogICAgIHVuZGVmaW5lZCBpbmNsdWRlc01ldGhvZDEoKTsKICAgICBbQ2FsbFdp
dGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgTWF5VGhyb3dFeGNlcHRpb25dIFRlc3RPYmogaW5j
bHVkZXNNZXRob2QyKERPTVN0cmluZyBzdHJBcmcsIFRlc3RPYmogb2JqQXJnKTsKICAgICBbQ3Vz
dG9tXSB1bmRlZmluZWQgaW5jbHVkZXNNZXRob2QzKCk7CisgICAgW0NvbmRpdGlvbmFsPUNvbmRp
dGlvbjExXSB1bmRlZmluZWQgaW5jbHVkZXNNZXRob2RDb25kaXRpb25hbCgpOworICAgIFtFbmFi
bGVkQnlTZXR0aW5nPVRlc3RTZXR0aW5nXSB1bmRlZmluZWQgaW5jbHVkZXNNZXRob2RTZXR0aW5n
c0NvbmRpdGlvbmFsKCk7CiAKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBJTkNMVURFU19DT05T
VEFOVDEgPSAxOwogICAgIFtSZWZsZWN0PUNPTlNUX0lNUExdIGNvbnN0IHVuc2lnbmVkIHNob3J0
IElOQ0xVREVTX0NPTlNUQU5UMiA9IDI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENvbmRpdGlv
bmFsSW5jbHVkZXMuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDc2NSBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5oIgorCisj
aW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgi
CisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJKU0RPTUF0dHJpYnV0ZS5oIgorI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25z
dHJ1Y3RhYmxlLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0TnVtYmVycy5oIgorI2luY2x1ZGUg
IkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgor
I2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiV2ViQ29yZUpTQ2xp
ZW50RGF0YS5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0Z1bmN0aW9uUHJvdG90eXBlLmg+
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVz
dHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
U3Vic3BhY2VJbmxpbmVzLmg+CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1VSTC5oPgorCisjaWYgKEVO
QUJMRShDb25kaXRpb24xMikgJiYgRU5BQkxFKENvbmRpdGlvbjIyKSkgfHwgRU5BQkxFKENvbmRp
dGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCisjaW5jbHVkZSAiSlNET01Db252ZXJ0SW50
ZXJmYWNlLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0U3RyaW5ncy5oIgorI2luY2x1ZGUgIkpT
RE9NR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNOb2RlLmgiCisjZW5kaWYKKworI2lmIChF
TkFCTEUoQ29uZGl0aW9uMTIpICYmIEVOQUJMRShDb25kaXRpb24yMikpIHx8IEVOQUJMRShDb25k
aXRpb24yMykKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRTZXF1ZW5jZXMuaCIKKyNpbmNsdWRlICJK
U1Rlc3RPYmouaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0FycmF5Lmg+CisjZW5kaWYK
KworCituYW1lc3BhY2UgV2ViQ29yZSB7Cit1c2luZyBuYW1lc3BhY2UgSlNDOworCisvLyBGdW5j
dGlvbnMKKworI2lmIChFTkFCTEUoQ29uZGl0aW9uMTIpICYmIEVOQUJMRShDb25kaXRpb24yMikp
IHx8IEVOQUJMRShDb25kaXRpb24yMykKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzUHJvdG90eXBlRnVuY3Rpb25JbmNsdWRlc01ldGhv
ZDEoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7CisjZW5kaWYKKyNpZiAo
RU5BQkxFKENvbmRpdGlvbjEyKSAmJiBFTkFCTEUoQ29uZGl0aW9uMjIpKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMjMpCitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Q29uZGl0
aW9uYWxJbmNsdWRlc1Byb3RvdHlwZUZ1bmN0aW9uSW5jbHVkZXNNZXRob2QyKEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOworI2VuZGlmCisjaWYgKEVOQUJMRShDb25kaXRp
b24xMikgJiYgRU5BQkxFKENvbmRpdGlvbjIyKSkgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQorSlND
OjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNQ
cm90b3R5cGVGdW5jdGlvbkluY2x1ZGVzTWV0aG9kMyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpDYWxsRnJhbWUqKTsKKyNlbmRpZgorI2lmIChFTkFCTEUoQ29uZGl0aW9uMTEpICYmIEVOQUJM
RShDb25kaXRpb24xMikgJiYgRU5BQkxFKENvbmRpdGlvbjIyKSkgfHwgRU5BQkxFKENvbmRpdGlv
bjIzKQorSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdENvbmRpdGlvbmFs
SW5jbHVkZXNQcm90b3R5cGVGdW5jdGlvbkluY2x1ZGVzTWV0aG9kQ29uZGl0aW9uYWwoSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7CisjZW5kaWYKKyNpZiAoRU5BQkxFKENv
bmRpdGlvbjEyKSAmJiBFTkFCTEUoQ29uZGl0aW9uMjIpKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMp
CitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Q29uZGl0aW9uYWxJbmNs
dWRlc1Byb3RvdHlwZUZ1bmN0aW9uSW5jbHVkZXNNZXRob2RTZXR0aW5nc0NvbmRpdGlvbmFsKEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOworI2VuZGlmCisjaWYgKEVOQUJM
RShDb25kaXRpb24xMikgJiYgRU5BQkxFKENvbmRpdGlvbjIyKSkgfHwgRU5BQkxFKENvbmRpdGlv
bjIzKQorSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdENvbmRpdGlvbmFs
SW5jbHVkZXNQcm90b3R5cGVGdW5jdGlvblRha2VOb2RlcyhKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpDYWxsRnJhbWUqKTsKKyNlbmRpZgorCisvLyBBdHRyaWJ1dGVzCisKK0pTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc0NvbnN0cnVjdG9yKEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29s
IHNldEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNUZXN0QXR0cihKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworI2lm
IEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQorSlNDOjpFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzSW5jbHVkZXNTdHIxKEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CisjZW5k
aWYKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKK0pTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc0luY2x1ZGVzU3RyMihKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OworYm9vbCBzZXRKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzSW5jbHVkZXNTdHIyKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
KyNlbmRpZgorI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQor
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzSW5jbHVkZXNTdHIz
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7Citib29sIHNldEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNJbmNsdWRlc1N0cjMoSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFs
dWUpOworI2VuZGlmCisjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MjMpCitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNJbmNsdWRl
c05vZGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc0luY2x1ZGVzTm9k
ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSk7CisjZW5kaWYKKworY2xhc3MgSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc1Byb3Rv
dHlwZSBmaW5hbCA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAg
IHVzaW5nIEJhc2UgPSBKU0M6OkpTTm9uRmluYWxPYmplY3Q7CisgICAgc3RhdGljIEpTVGVzdENv
bmRpdGlvbmFsSW5jbHVkZXNQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7
CisgICAgICAgIEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNQcm90b3R5cGUqIHB0ciA9IG5ldyAo
Tm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc1Byb3Rv
dHlwZT4odm0uaGVhcCkpIEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNQcm90b3R5cGUodm0sIGds
b2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7
CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgorICAgIHN0YXRp
YyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB7CisgICAg
ICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdENvbmRpdGlvbmFs
SW5jbHVkZXNQcm90b3R5cGUsIEJhc2UpOworICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0
U3BhY2U7CisgICAgfQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNW
YWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAg
IEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEpTQzo6
SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CitTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFD
RV9TSEFSQUJMRShKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzUHJvdG90eXBlLCBKU1Rlc3RDb25k
aXRpb25hbEluY2x1ZGVzUHJvdG90eXBlOjpCYXNlKTsKKwordXNpbmcgSlNUZXN0Q29uZGl0aW9u
YWxJbmNsdWRlc0NvbnN0cnVjdG9yID0gSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8
SlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcz47CisKKy8qIEhhc2ggdGFibGUgZm9yIGNvbnN0cnVj
dG9yICovCisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RDb25kaXRpb25hbElu
Y2x1ZGVzQ29uc3RydWN0b3JUYWJsZVZhbHVlc1tdID0KK3sKKyNpZiBFTkFCTEUoQ29uZGl0aW9u
MjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKKyAgICB7ICJJTkNMVURFU19DT05TVEFOVDEiLCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDb25zdGFudEludGVnZXIsIE5v
SW50cmluc2ljLCB7IChsb25nIGxvbmcpKDEpIH0gfSwKKyNlbHNlCisgICAgeyAwLCAwLCBOb0lu
dHJpbnNpYywgeyAwLCAwIH0gfSwKKyNlbmRpZgorI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwg
RU5BQkxFKENvbmRpdGlvbjIzKQorICAgIHsgIklOQ0xVREVTX0NPTlNUQU5UMiIsIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkNvbnN0YW50SW50ZWdlciwgTm9JbnRyaW5z
aWMsIHsgKGxvbmcgbG9uZykoMikgfSB9LAorI2Vsc2UKKyAgICB7IDAsIDAsIE5vSW50cmluc2lj
LCB7IDAsIDAgfSB9LAorI2VuZGlmCit9OworCisjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBF
TkFCTEUoQ29uZGl0aW9uMjMpCitzdGF0aWNfYXNzZXJ0KFRlc3RDb25kaXRpb25hbEluY2x1ZGVz
OjpJTkNMVURFU19DT05TVEFOVDEgPT0gMSwgIklOQ0xVREVTX0NPTlNUQU5UMSBpbiBUZXN0Q29u
ZGl0aW9uYWxJbmNsdWRlcyBkb2VzIG5vdCBtYXRjaCB2YWx1ZSBmcm9tIElETCIpOworI2VuZGlm
CisjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCitzdGF0aWNf
YXNzZXJ0KFRlc3RDb25kaXRpb25hbEluY2x1ZGVzOjpDT05TVF9JTVBMID09IDIsICJDT05TVF9J
TVBMIGluIFRlc3RDb25kaXRpb25hbEluY2x1ZGVzIGRvZXMgbm90IG1hdGNoIHZhbHVlIGZyb20g
SURMIik7CisjZW5kaWYKKwordGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdENvbmRpdGlvbmFsSW5j
bHVkZXNDb25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBjb25z
dCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTSh2
bSk7CisgICAgcmV0dXJuIGdsb2JhbE9iamVjdC5mdW5jdGlvblByb3RvdHlwZSgpOworfQorCit0
ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc0NvbnN0cnVjdG9yOjppbml0
aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qp
Cit7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVz
dENvbmRpdGlvbmFsSW5jbHVkZXM6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCAiVGVz
dENvbmRpdGlvbmFsSW5jbHVkZXMiX3MpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAg
IHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlczo6aW5m
bygpLCBKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzQ29uc3RydWN0b3JUYWJsZVZhbHVlcywgKnRo
aXMpOworfQorCit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RDb25kaXRpb25hbElu
Y2x1ZGVzQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RDb25kaXRpb25hbEluY2x1ZGVzIiwg
JkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rl
c3RDb25kaXRpb25hbEluY2x1ZGVzQ29uc3RydWN0b3IpIH07CisKKy8qIEhhc2ggdGFibGUgZm9y
IHByb3RvdHlwZSAqLworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0Q29uZGl0
aW9uYWxJbmNsdWRlc1Byb3RvdHlwZVRhYmxlVmFsdWVzW10gPQoreworICAgIHsgImNvbnN0cnVj
dG9yIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6
R2V0VmFsdWVGdW5jPihqc1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzQ29uc3RydWN0b3IpLCAoaW50
cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rl
c3RDb25kaXRpb25hbEluY2x1ZGVzQ29uc3RydWN0b3IpIH0gfSwKKyAgICB7ICJ0ZXN0QXR0ciIs
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19j
YXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RDb25kaXRpb25hbEluY2x1ZGVz
VGVzdEF0dHIpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFs
dWVGdW5jPigwKSB9IH0sCisjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMjMpCisgICAgeyAiaW5jbHVkZXNTdHIxIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3Vz
dG9tQWNjZXNzb3IgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpET01BdHRyaWJ1dGUpLCBOb0lu
dHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1
bmM+KGpzVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNJbmNsdWRlc1N0cjEpLCAoaW50cHRyX3QpIHN0
YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPigwKSB9IH0sCisjZWxzZQor
ICAgIHsgMCwgMCwgTm9JbnRyaW5zaWMsIHsgMCwgMCB9IH0sCisjZW5kaWYKKyNpZiBFTkFCTEUo
Q29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKKyAgICB7ICJpbmNsdWRlc1N0cjIi
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNj
ZXNzb3IgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpET01BdHRyaWJ1dGUpLCBOb0ludHJpbnNp
YywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpz
VGVzdENvbmRpdGlvbmFsSW5jbHVkZXNJbmNsdWRlc1N0cjIpLCAoaW50cHRyX3QpIHN0YXRpY19j
YXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RDb25kaXRpb25hbElu
Y2x1ZGVzSW5jbHVkZXNTdHIyKSB9IH0sCisjZWxzZQorICAgIHsgMCwgMCwgTm9JbnRyaW5zaWMs
IHsgMCwgMCB9IH0sCisjZW5kaWYKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShD
b25kaXRpb24yMykKKyAgICB7ICJpbmNsdWRlc1N0cjMiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IgfCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpET01BdHRyaWJ1dGUpLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nh
c3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNJ
bmNsdWRlc1N0cjMpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0
VmFsdWVGdW5jPihzZXRKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzSW5jbHVkZXNTdHIzKSB9IH0s
CisjZWxzZQorICAgIHsgMCwgMCwgTm9JbnRyaW5zaWMsIHsgMCwgMCB9IH0sCisjZW5kaWYKKyNp
ZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKKyAgICB7ICJpbmNs
dWRlc05vZGUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
Q3VzdG9tQWNjZXNzb3IgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpET01BdHRyaWJ1dGUpLCBO
b0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1
ZUZ1bmM+KGpzVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNJbmNsdWRlc05vZGUpLCAoaW50cHRyX3Qp
IHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RDb25k
aXRpb25hbEluY2x1ZGVzSW5jbHVkZXNOb2RlKSB9IH0sCisjZWxzZQorICAgIHsgMCwgMCwgTm9J
bnRyaW5zaWMsIHsgMCwgMCB9IH0sCisjZW5kaWYKKyNpZiAoRU5BQkxFKENvbmRpdGlvbjEyKSAm
JiBFTkFCTEUoQ29uZGl0aW9uMjIpKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCisgICAgeyAiaW5j
bHVkZXNNZXRob2QxIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJhd05h
dGl2ZUZ1bmN0aW9uPihqc1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzUHJvdG90eXBlRnVuY3Rpb25J
bmNsdWRlc01ldGhvZDEpLCAoaW50cHRyX3QpICgwKSB9IH0sCisjZWxzZQorICAgIHsgMCwgMCwg
Tm9JbnRyaW5zaWMsIHsgMCwgMCB9IH0sCisjZW5kaWYKKyNpZiAoRU5BQkxFKENvbmRpdGlvbjEy
KSAmJiBFTkFCTEUoQ29uZGl0aW9uMjIpKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCisgICAgeyAi
aW5jbHVkZXNNZXRob2QyIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJh
d05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzUHJvdG90eXBlRnVuY3Rp
b25JbmNsdWRlc01ldGhvZDIpLCAoaW50cHRyX3QpICgyKSB9IH0sCisjZWxzZQorICAgIHsgMCwg
MCwgTm9JbnRyaW5zaWMsIHsgMCwgMCB9IH0sCisjZW5kaWYKKyNpZiAoRU5BQkxFKENvbmRpdGlv
bjEyKSAmJiBFTkFCTEUoQ29uZGl0aW9uMjIpKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCisgICAg
eyAiaW5jbHVkZXNNZXRob2QzIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0
PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzUHJvdG90eXBlRnVu
Y3Rpb25JbmNsdWRlc01ldGhvZDMpLCAoaW50cHRyX3QpICgwKSB9IH0sCisjZWxzZQorICAgIHsg
MCwgMCwgTm9JbnRyaW5zaWMsIHsgMCwgMCB9IH0sCisjZW5kaWYKKyNpZiAoRU5BQkxFKENvbmRp
dGlvbjExKSAmJiBFTkFCTEUoQ29uZGl0aW9uMTIpICYmIEVOQUJMRShDb25kaXRpb24yMikpIHx8
IEVOQUJMRShDb25kaXRpb24yMykKKyAgICB7ICJpbmNsdWRlc01ldGhvZENvbmRpdGlvbmFsIiwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwg
Tm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihq
c1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzUHJvdG90eXBlRnVuY3Rpb25JbmNsdWRlc01ldGhvZENv
bmRpdGlvbmFsKSwgKGludHB0cl90KSAoMCkgfSB9LAorI2Vsc2UKKyAgICB7IDAsIDAsIE5vSW50
cmluc2ljLCB7IDAsIDAgfSB9LAorI2VuZGlmCisjaWYgKEVOQUJMRShDb25kaXRpb24xMikgJiYg
RU5BQkxFKENvbmRpdGlvbjIyKSkgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQorICAgIHsgImluY2x1
ZGVzTWV0aG9kU2V0dGluZ3NDb25kaXRpb25hbCIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6
OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClz
dGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc1By
b3RvdHlwZUZ1bmN0aW9uSW5jbHVkZXNNZXRob2RTZXR0aW5nc0NvbmRpdGlvbmFsKSwgKGludHB0
cl90KSAoMCkgfSB9LAorI2Vsc2UKKyAgICB7IDAsIDAsIE5vSW50cmluc2ljLCB7IDAsIDAgfSB9
LAorI2VuZGlmCisjaWYgKEVOQUJMRShDb25kaXRpb24xMikgJiYgRU5BQkxFKENvbmRpdGlvbjIy
KSkgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQorICAgIHsgInRha2VOb2RlcyIsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2lj
LCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0Q29uZGl0
aW9uYWxJbmNsdWRlc1Byb3RvdHlwZUZ1bmN0aW9uVGFrZU5vZGVzKSwgKGludHB0cl90KSAoMCkg
fSB9LAorI2Vsc2UKKyAgICB7IDAsIDAsIE5vSW50cmluc2ljLCB7IDAsIDAgfSB9LAorI2VuZGlm
CisjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCisgICAgeyAi
SU5DTFVERVNfQ09OU1RBTlQxIiwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6Q29uc3RhbnRJbnRlZ2VyLCBOb0ludHJpbnNpYywgeyAobG9uZyBsb25nKSgxKSB9IH0sCisj
ZWxzZQorICAgIHsgMCwgMCwgTm9JbnRyaW5zaWMsIHsgMCwgMCB9IH0sCisjZW5kaWYKKyNpZiBF
TkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKKyAgICB7ICJJTkNMVURF
U19DT05TVEFOVDIiLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDb25z
dGFudEludGVnZXIsIE5vSW50cmluc2ljLCB7IChsb25nIGxvbmcpKDIpIH0gfSwKKyNlbHNlCisg
ICAgeyAwLCAwLCBOb0ludHJpbnNpYywgeyAwLCAwIH0gfSwKKyNlbmRpZgorfTsKKworY29uc3Qg
Q2xhc3NJbmZvIEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNQcm90b3R5cGU6OnNfaW5mbyA9IHsg
IlRlc3RDb25kaXRpb25hbEluY2x1ZGVzIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0
ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzUHJvdG90eXBl
KSB9OworCit2b2lkIEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNQcm90b3R5cGU6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmVp
ZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzOjppbmZvKCks
IEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNQcm90b3R5cGVUYWJsZVZhbHVlcywgKnRoaXMpOwor
ICAgIGJvb2wgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyA9IGZhbHNlOworI2lmIChFTkFC
TEUoQ29uZGl0aW9uMTIpICYmIEVOQUJMRShDb25kaXRpb24yMikpIHx8IEVOQUJMRShDb25kaXRp
b24yMykKKyAgICBpZiAoIWRvd25jYXN0PERvY3VtZW50Pihqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihnbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSktPnNldHRpbmdz
KCkudGVzdFNldHRpbmcyRW5hYmxlZCgpKSB7CisgICAgICAgIGhhc0Rpc2FibGVkUnVudGltZVBy
b3BlcnRpZXMgPSB0cnVlOworICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiaW5jbHVkZXNN
ZXRob2QxIiksIHN0cmxlbigiaW5jbHVkZXNNZXRob2QxIikpOworICAgICAgICBWTTo6RGVsZXRl
UHJvcGVydHlNb2RlU2NvcGUgc2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9y
ZUNvbmZpZ3VyYWJsZSk7CisgICAgICAgIERlbGV0ZVByb3BlcnR5U2xvdCBzbG90OworICAgICAg
ICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xvYmFsT2JqZWN0KCksIHByb3BlcnR5
TmFtZSwgc2xvdCk7CisgICAgfQorI2VuZGlmCisjaWYgKEVOQUJMRShDb25kaXRpb24xMikgJiYg
RU5BQkxFKENvbmRpdGlvbjIyKSkgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQorICAgIGlmICghZG93
bmNhc3Q8RG9jdW1lbnQ+KGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgp
KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKS0+c2V0dGluZ3MoKS50ZXN0U2V0dGluZzJFbmFi
bGVkKCkpIHsKKyAgICAgICAgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyA9IHRydWU7Cisg
ICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJpbmNsdWRlc01ldGhvZDIiKSwgc3RybGVuKCJp
bmNsdWRlc01ldGhvZDIiKSk7CisgICAgICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBz
Y29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmlndXJhYmxlKTsKKyAg
ICAgICAgRGVsZXRlUHJvcGVydHlTbG90IHNsb3Q7CisgICAgICAgIEpTT2JqZWN0OjpkZWxldGVQ
cm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKSwgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICB9
CisjZW5kaWYKKyNpZiAoRU5BQkxFKENvbmRpdGlvbjEyKSAmJiBFTkFCTEUoQ29uZGl0aW9uMjIp
KSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCisgICAgaWYgKCFkb3duY2FzdDxEb2N1bWVudD4oanND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpLT5zZXR0aW5ncygpLnRlc3RTZXR0aW5nMkVuYWJsZWQoKSkgeworICAgICAgICBo
YXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKKyAgICAgICAgYXV0byBwcm9wZXJ0
eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0
IExDaGFyKj4oImluY2x1ZGVzTWV0aG9kMyIpLCBzdHJsZW4oImluY2x1ZGVzTWV0aG9kMyIpKTsK
KyAgICAgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRl
UHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpOworICAgICAgICBEZWxldGVQcm9wZXJ0
eVNsb3Qgc2xvdDsKKyAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2Jh
bE9iamVjdCgpLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgIH0KKyNlbmRpZgorI2lmIChFTkFC
TEUoQ29uZGl0aW9uMTEpICYmIEVOQUJMRShDb25kaXRpb24xMikgJiYgRU5BQkxFKENvbmRpdGlv
bjIyKSkgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQorICAgIGlmICghZG93bmNhc3Q8RG9jdW1lbnQ+
KGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpKS0+c2V0dGluZ3MoKS50ZXN0U2V0dGluZzJFbmFibGVkKCkpIHsKKyAgICAg
ICAgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyA9IHRydWU7CisgICAgICAgIGF1dG8gcHJv
cGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBMQ2hhcio+KCJpbmNsdWRlc01ldGhvZENvbmRpdGlvbmFsIiksIHN0cmxlbigiaW5jbHVk
ZXNNZXRob2RDb25kaXRpb25hbCIpKTsKKyAgICAgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNj
b3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUp
OworICAgICAgICBEZWxldGVQcm9wZXJ0eVNsb3Qgc2xvdDsKKyAgICAgICAgSlNPYmplY3Q6OmRl
bGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCgpLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwor
ICAgIH0KKyNlbmRpZgorI2lmIChFTkFCTEUoQ29uZGl0aW9uMTIpICYmIEVOQUJMRShDb25kaXRp
b24yMikpIHx8IEVOQUJMRShDb25kaXRpb24yMykKKyAgICBpZiAoIShkb3duY2FzdDxEb2N1bWVu
dD4oanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkpLT5zZXR0aW5ncygpLnRlc3RTZXR0aW5nRW5hYmxlZCgpICYmIGRvd25j
YXN0PERvY3VtZW50Pihqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSkt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSktPnNldHRpbmdzKCkudGVzdFNldHRpbmcyRW5hYmxl
ZCgpKSkgeworICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKKyAg
ICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImluY2x1ZGVzTWV0aG9kU2V0dGluZ3NDb25kaXRp
b25hbCIpLCBzdHJsZW4oImluY2x1ZGVzTWV0aG9kU2V0dGluZ3NDb25kaXRpb25hbCIpKTsKKyAg
ICAgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJv
cGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpOworICAgICAgICBEZWxldGVQcm9wZXJ0eVNs
b3Qgc2xvdDsKKyAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9i
amVjdCgpLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgIH0KKyNlbmRpZgorI2lmIChFTkFCTEUo
Q29uZGl0aW9uMTIpICYmIEVOQUJMRShDb25kaXRpb24yMikpIHx8IEVOQUJMRShDb25kaXRpb24y
MykKKyAgICBpZiAoIWRvd25jYXN0PERvY3VtZW50Pihqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PihnbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSktPnNldHRpbmdzKCku
dGVzdFNldHRpbmcyRW5hYmxlZCgpKSB7CisgICAgICAgIGhhc0Rpc2FibGVkUnVudGltZVByb3Bl
cnRpZXMgPSB0cnVlOworICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigidGFrZU5vZGVzIiks
IHN0cmxlbigidGFrZU5vZGVzIikpOworICAgICAgICBWTTo6RGVsZXRlUHJvcGVydHlNb2RlU2Nv
cGUgc2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7
CisgICAgICAgIERlbGV0ZVByb3BlcnR5U2xvdCBzbG90OworICAgICAgICBKU09iamVjdDo6ZGVs
ZXRlUHJvcGVydHkodGhpcywgZ2xvYmFsT2JqZWN0KCksIHByb3BlcnR5TmFtZSwgc2xvdCk7Cisg
ICAgfQorI2VuZGlmCisjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MjMpCisgICAgaWYgKCFkb3duY2FzdDxEb2N1bWVudD4oanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oZ2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpLT5zZXR0aW5ncygp
LnRlc3RTZXR0aW5nMkVuYWJsZWQoKSkgeworICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9w
ZXJ0aWVzID0gdHJ1ZTsKKyAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImluY2x1ZGVzU3Ry
MSIpLCBzdHJsZW4oImluY2x1ZGVzU3RyMSIpKTsKKyAgICAgICAgVk06OkRlbGV0ZVByb3BlcnR5
TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1
cmFibGUpOworICAgICAgICBEZWxldGVQcm9wZXJ0eVNsb3Qgc2xvdDsKKyAgICAgICAgSlNPYmpl
Y3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCgpLCBwcm9wZXJ0eU5hbWUsIHNs
b3QpOworICAgIH0KKyNlbmRpZgorI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENv
bmRpdGlvbjIzKQorICAgIGlmICghZG93bmNhc3Q8RG9jdW1lbnQ+KGpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKS0+c2V0
dGluZ3MoKS50ZXN0U2V0dGluZzJFbmFibGVkKCkpIHsKKyAgICAgICAgaGFzRGlzYWJsZWRSdW50
aW1lUHJvcGVydGllcyA9IHRydWU7CisgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJpbmNs
dWRlc1N0cjIiKSwgc3RybGVuKCJpbmNsdWRlc1N0cjIiKSk7CisgICAgICAgIFZNOjpEZWxldGVQ
cm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3Jl
Q29uZmlndXJhYmxlKTsKKyAgICAgICAgRGVsZXRlUHJvcGVydHlTbG90IHNsb3Q7CisgICAgICAg
IEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKSwgcHJvcGVydHlO
YW1lLCBzbG90KTsKKyAgICB9CisjZW5kaWYKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVO
QUJMRShDb25kaXRpb24yMykKKyAgICBpZiAoIWRvd25jYXN0PERvY3VtZW50Pihqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSktPnNldHRpbmdzKCkudGVzdFNldHRpbmcyRW5hYmxlZCgpKSB7CisgICAgICAgIGhhc0Rpc2Fi
bGVkUnVudGltZVByb3BlcnRpZXMgPSB0cnVlOworICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
PigiaW5jbHVkZXNTdHIzIiksIHN0cmxlbigiaW5jbHVkZXNTdHIzIikpOworICAgICAgICBWTTo6
RGVsZXRlUHJvcGVydHlNb2RlU2NvcGUgc2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6
Oklnbm9yZUNvbmZpZ3VyYWJsZSk7CisgICAgICAgIERlbGV0ZVByb3BlcnR5U2xvdCBzbG90Owor
ICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xvYmFsT2JqZWN0KCksIHBy
b3BlcnR5TmFtZSwgc2xvdCk7CisgICAgfQorI2VuZGlmCisjaWYgRU5BQkxFKENvbmRpdGlvbjIy
KSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCisgICAgaWYgKCFkb3duY2FzdDxEb2N1bWVudD4oanND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpLT5zZXR0aW5ncygpLnRlc3RTZXR0aW5nMkVuYWJsZWQoKSkgeworICAgICAgICBo
YXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKKyAgICAgICAgYXV0byBwcm9wZXJ0
eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0
IExDaGFyKj4oImluY2x1ZGVzTm9kZSIpLCBzdHJsZW4oImluY2x1ZGVzTm9kZSIpKTsKKyAgICAg
ICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVy
dHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpOworICAgICAgICBEZWxldGVQcm9wZXJ0eVNsb3Qg
c2xvdDsKKyAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVj
dCgpLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgIH0KKyNlbmRpZgorICAgIGlmIChoYXNEaXNh
YmxlZFJ1bnRpbWVQcm9wZXJ0aWVzICYmIHN0cnVjdHVyZSgpLT5pc0RpY3Rpb25hcnkoKSkKKyAg
ICAgICAgZmxhdHRlbkRpY3Rpb25hcnlPYmplY3Qodm0pOworICAgIEpTQ19UT19TVFJJTkdfVEFH
X1dJVEhPVVRfVFJBTlNJVElPTigpOworfQorCitjb25zdCBDbGFzc0luZm8gSlNUZXN0Q29uZGl0
aW9uYWxJbmNsdWRlczo6c19pbmZvID0geyAiVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMiLCAmQmFz
ZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdENv
bmRpdGlvbmFsSW5jbHVkZXMpIH07CisKK0pTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXM6OkpTVGVz
dENvbmRpdGlvbmFsSW5jbHVkZXMoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcz4mJiBpbXBsKQor
ICAgIDogSlNET01XcmFwcGVyPFRlc3RDb25kaXRpb25hbEluY2x1ZGVzPihzdHJ1Y3R1cmUsIGds
b2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSkKK3sKK30KKwordm9pZCBKU1Rlc3RDb25kaXRpb25h
bEluY2x1ZGVzOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24odm0pOworICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CisKKyAgICBzdGF0
aWNfYXNzZXJ0KCFzdGQ6OmlzX2Jhc2Vfb2Y8QWN0aXZlRE9NT2JqZWN0LCBUZXN0Q29uZGl0aW9u
YWxJbmNsdWRlcz46OnZhbHVlLCAiSW50ZXJmYWNlIGlzIG5vdCBtYXJrZWQgYXMgW0FjdGl2ZURP
TU9iamVjdF0gZXZlbiB0aG91Z2ggaW1wbGVtZW50YXRpb24gY2xhc3Mgc3ViY2xhc3NlcyBBY3Rp
dmVET01PYmplY3QuIik7CisKK30KKworSlNPYmplY3QqIEpTVGVzdENvbmRpdGlvbmFsSW5jbHVk
ZXM6OmNyZWF0ZVByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QpCit7CisgICAgcmV0dXJuIEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNQcm90b3R5cGU6OmNy
ZWF0ZSh2bSwgJmdsb2JhbE9iamVjdCwgSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc1Byb3RvdHlw
ZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCAmZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qub2JqZWN0
UHJvdG90eXBlKCkpKTsKK30KKworSlNPYmplY3QqIEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXM6
OnByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7Cisg
ICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzPih2bSwg
Z2xvYmFsT2JqZWN0KTsKK30KKworSlNWYWx1ZSBKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzOjpn
ZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
Cit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdENvbmRpdGlvbmFsSW5jbHVk
ZXNDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9i
YWxPYmplY3QpKTsKK30KKwordm9pZCBKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzOjpkZXN0cm95
KEpTQzo6SlNDZWxsKiBjZWxsKQoreworICAgIEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMqIHRo
aXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzKj4oY2VsbCk7
CisgICAgdGhpc09iamVjdC0+SlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlczo6fkpTVGVzdENvbmRp
dGlvbmFsSW5jbHVkZXMoKTsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0Q29uZGl0aW9u
YWxJbmNsdWRlcyogSURMQXR0cmlidXRlPEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXM+OjpjYXN0
KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUpCit7CisgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0Q29uZGl0aW9uYWxJbmNs
dWRlcyo+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCBKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIEpTVGVzdENvbmRpdGlvbmFsSW5j
bHVkZXMqIElETE9wZXJhdGlvbjxKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzPjo6Y2FzdChKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lJiBjYWxsRnJhbWUpCit7
CisgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcyo+KEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCBjYWxsRnJhbWUudGhpc1ZhbHVlKCkpOwor
fQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzQ29uc3RydWN0b3Io
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEds
b2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RDb25kaXRpb25h
bEluY2x1ZGVzUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAg
ICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlczo6Z2V0Q29uc3RydWN0b3IoSlNDOjpn
ZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOwor
fQorCitib29sIHNldEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNDb25zdHJ1Y3RvcihKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdENv
bmRpdGlvbmFsSW5jbHVkZXNQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgeworICAgICAgICB0aHJvd1ZNVHlw
ZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCisg
ICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25z
dHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOworfQorCitzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc1Rlc3RBdHRyR2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVz
JiB0aGlzT2JqZWN0KQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIFJFTEVBU0VfQU5E
X1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExEb3VibGU+KGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGltcGwudGVzdEF0dHIoKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNU
ZXN0Q29uZGl0aW9uYWxJbmNsdWRlc1Rlc3RBdHRyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAg
ICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXM+OjpnZXQ8anNU
ZXN0Q29uZGl0aW9uYWxJbmNsdWRlc1Rlc3RBdHRyR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhh
dmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAidGVzdEF0dHIi
KTsKK30KKworI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNJbmNsdWRlc1N0
cjFHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdENvbmRp
dGlvbmFsSW5jbHVkZXMmIHRoaXNPYmplY3QpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Cisg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETERPTVN0cmluZz4obGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgaW1wbC5pbmNsdWRlc1N0cjEoKSkpKTsKK30K
KworRW5jb2RlZEpTVmFsdWUganNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc0luY2x1ZGVzU3RyMShK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RDb25k
aXRpb25hbEluY2x1ZGVzPjo6Z2V0PGpzVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNJbmNsdWRlc1N0
cjFHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aGlzVmFsdWUsICJpbmNsdWRlc1N0cjEiKTsKK30KKworI2VuZGlmCisKKyNpZiBF
TkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKK3N0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzSW5jbHVkZXNTdHIyR2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVz
JiB0aGlzT2JqZWN0KQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIFJFTEVBU0VfQU5E
X1JFVFVSTih0aHJvd1Njb3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIHRocm93U2NvcGUsIGltcGwuaW5jbHVkZXNTdHIyKCkpKSk7Cit9CisKK0VuY29kZWRKU1Zh
bHVlIGpzVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNJbmNsdWRlc1N0cjIoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRl
cz46OmdldDxqc1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzSW5jbHVkZXNTdHIyR2V0dGVyLCBDYXN0
ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1Zh
bHVlLCAiaW5jbHVkZXNTdHIyIik7Cit9CisKKyNlbmRpZgorCisjaWYgRU5BQkxFKENvbmRpdGlv
bjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0
Q29uZGl0aW9uYWxJbmNsdWRlc0luY2x1ZGVzU3RyMlNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcyYgdGhpc09iamVjdCwg
SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVl
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKKyAgICBBdHRy
aWJ1dGVTZXR0ZXI6OmNhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgWyZdIHsK
KyAgICAgICAgcmV0dXJuIGltcGwuc2V0SW5jbHVkZXNTdHIyKFdURk1vdmUobmF0aXZlVmFsdWUp
KTsKKyAgICB9KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBzZXRKU1Rlc3RDb25kaXRp
b25hbEluY2x1ZGVzSW5jbHVkZXNTdHIyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXM+
OjpzZXQ8c2V0SlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc0luY2x1ZGVzU3RyMlNldHRlcj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiaW5jbHVkZXNTdHIy
Iik7Cit9CisKKyNlbmRpZgorCisjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMjMpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Q29uZGl0aW9uYWxJbmNsdWRl
c0luY2x1ZGVzU3RyM0dldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcyYgdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFS
QU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QuaW5jbHVkZXNT
dHIzKGxleGljYWxHbG9iYWxPYmplY3QpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDb25k
aXRpb25hbEluY2x1ZGVzSW5jbHVkZXNTdHIzKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXM+OjpnZXQ8anNUZXN0
Q29uZGl0aW9uYWxJbmNsdWRlc0luY2x1ZGVzU3RyM0dldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVo
YXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImluY2x1ZGVz
U3RyMyIpOworfQorCisjZW5kaWYKKworI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxF
KENvbmRpdGlvbjIzKQorc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENvbmRpdGlvbmFsSW5j
bHVkZXNJbmNsdWRlc1N0cjNTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUp
Cit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAg
ICB0aGlzT2JqZWN0LnNldEluY2x1ZGVzU3RyMyhsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgc2V0SlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRl
c0luY2x1ZGVzU3RyMyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAg
cmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzPjo6c2V0PHNldEpT
VGVzdENvbmRpdGlvbmFsSW5jbHVkZXNJbmNsdWRlc1N0cjNTZXR0ZXI+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgImluY2x1ZGVzU3RyMyIpOworfQorCisj
ZW5kaWYKKworI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNJbmNsdWRlc05v
ZGVHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdENvbmRp
dGlvbmFsSW5jbHVkZXMmIHRoaXNPYmplY3QpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7Cisg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsICh0b0pTPElETEludGVyZmFjZTxOb2Rl
Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCksIHRocm93
U2NvcGUsIGltcGwuaW5jbHVkZXNOb2RlKCkpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVz
dENvbmRpdGlvbmFsSW5jbHVkZXNJbmNsdWRlc05vZGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorewor
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcz46OmdldDxq
c1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzSW5jbHVkZXNOb2RlR2V0dGVyLCBDYXN0ZWRUaGlzRXJy
b3JCZWhhdmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiaW5j
bHVkZXNOb2RlIik7Cit9CisKKyNlbmRpZgorCisjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBF
TkFCTEUoQ29uZGl0aW9uMjMpCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0Q29uZGl0aW9u
YWxJbmNsdWRlc0luY2x1ZGVzTm9kZVNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
OworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExJbnRlcmZhY2U8Tm9kZT4+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBb
XShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlKSB7IHRocm93QXR0cmlidXRlVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3Qs
IHNjb3BlLCAiVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMiLCAiaW5jbHVkZXNOb2RlIiwgIk5vZGUi
KTsgfSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CisgICAg
QXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIFsm
XSB7CisgICAgICAgIHJldHVybiBpbXBsLnNldEluY2x1ZGVzTm9kZSgqbmF0aXZlVmFsdWUpOwor
ICAgIH0pOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIHNldEpTVGVzdENvbmRpdGlvbmFs
SW5jbHVkZXNJbmNsdWRlc05vZGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQor
eworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcz46OnNl
dDxzZXRKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzSW5jbHVkZXNOb2RlU2V0dGVyPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJpbmNsdWRlc05vZGUiKTsK
K30KKworI2VuZGlmCisKKyNpZiAoRU5BQkxFKENvbmRpdGlvbjEyKSAmJiBFTkFCTEUoQ29uZGl0
aW9uMjIpKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc1Byb3RvdHlwZUZ1bmN0aW9uSW5jbHVk
ZXNNZXRob2QxQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0Q29u
ZGl0aW9uYWxJbmNsdWRlcz46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMpCit7CisgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHRocm93U2NvcGUucmVsZWFzZSgpOworICAgIGltcGwu
aW5jbHVkZXNNZXRob2QxKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RDb25kaXRpb25h
bEluY2x1ZGVzUHJvdG90eXBlRnVuY3Rpb25JbmNsdWRlc01ldGhvZDEoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIHJldHVy
biBJRExPcGVyYXRpb248SlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcz46OmNhbGw8anNUZXN0Q29u
ZGl0aW9uYWxJbmNsdWRlc1Byb3RvdHlwZUZ1bmN0aW9uSW5jbHVkZXNNZXRob2QxQm9keT4oKmxl
eGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJpbmNsdWRlc01ldGhvZDEiKTsKK30KKwor
I2VuZGlmCisKKyNpZiAoRU5BQkxFKENvbmRpdGlvbjEyKSAmJiBFTkFCTEUoQ29uZGl0aW9uMjIp
KSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc1Byb3RvdHlwZUZ1bmN0aW9uSW5jbHVkZXNNZXRo
b2QyQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNh
bGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0Q29uZGl0aW9u
YWxJbmNsdWRlcz46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
KyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOworICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQo
KSA8IDIpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGxleGljYWxHbG9iYWxPYmplY3Qs
IHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGxleGljYWxHbG9iYWxP
YmplY3QpKTsKKyAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
bGV4aWNhbEdsb2JhbE9iamVjdCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAo
VU5MSUtFTFkoIWNvbnRleHQpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJh
bWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIGF1dG8gc3RyQXJnID0gY29udmVydDxJRExE
T01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBF
bnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQxID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1
bWVudCgxKTsKKyAgICBhdXRvIG9iakFyZyA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPFRlc3RPYmo+
PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQxLnZhbHVlKCksIFtdKEpTQzo6SlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsg
dGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMSwgIm9i
akFyZyIsICJUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcyIsICJpbmNsdWRlc01ldGhvZDIiLCAiVGVz
dE9iaiIpOyB9KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVlOjpl
bmNvZGUodG9KUzxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAq
Y2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHRocm93U2NvcGUsIGltcGwuaW5jbHVkZXNNZXRo
b2QyKCpjb250ZXh0LCBXVEZNb3ZlKHN0ckFyZyksICpvYmpBcmcpKSkpOworfQorCitFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNQcm90b3R5cGVG
dW5jdGlvbkluY2x1ZGVzTWV0aG9kMihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rl
c3RDb25kaXRpb25hbEluY2x1ZGVzPjo6Y2FsbDxqc1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzUHJv
dG90eXBlRnVuY3Rpb25JbmNsdWRlc01ldGhvZDJCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
KmNhbGxGcmFtZSwgImluY2x1ZGVzTWV0aG9kMiIpOworfQorCisjZW5kaWYKKworI2lmIChFTkFC
TEUoQ29uZGl0aW9uMTIpICYmIEVOQUJMRShDb25kaXRpb24yMikpIHx8IEVOQUJMRShDb25kaXRp
b24yMykKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDb25kaXRpb25h
bEluY2x1ZGVzUHJvdG90eXBlRnVuY3Rpb25JbmNsdWRlc01ldGhvZDNCb2R5KEpTQzo6SlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUs
IHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzPjo6Q2xhc3NQ
YXJhbWV0ZXIgY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShj
YWxsRnJhbWUpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAoSlNWYWx1ZTo6
ZW5jb2RlKGNhc3RlZFRoaXMtPmluY2x1ZGVzTWV0aG9kMygqbGV4aWNhbEdsb2JhbE9iamVjdCwg
KmNhbGxGcmFtZSkpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
Q29uZGl0aW9uYWxJbmNsdWRlc1Byb3RvdHlwZUZ1bmN0aW9uSW5jbHVkZXNNZXRob2QzKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sK
KyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXM+OjpjYWxs
PGpzVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNQcm90b3R5cGVGdW5jdGlvbkluY2x1ZGVzTWV0aG9k
M0JvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiaW5jbHVkZXNNZXRob2Qz
Iik7Cit9CisKKyNlbmRpZgorCisjaWYgKEVOQUJMRShDb25kaXRpb24xMSkgJiYgRU5BQkxFKENv
bmRpdGlvbjEyKSAmJiBFTkFCTEUoQ29uZGl0aW9uMjIpKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMp
CitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q29uZGl0aW9uYWxJbmNs
dWRlc1Byb3RvdHlwZUZ1bmN0aW9uSW5jbHVkZXNNZXRob2RDb25kaXRpb25hbEJvZHkoSlNDOjpK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXM+OjpD
bGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTShs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BB
UkFNKGNhbGxGcmFtZSk7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
KyAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKKyAgICBpbXBsLmluY2x1ZGVzTWV0aG9kQ29uZGl0
aW9uYWwoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQor
CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNQ
cm90b3R5cGVGdW5jdGlvbkluY2x1ZGVzTWV0aG9kQ29uZGl0aW9uYWwoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIHJldHVy
biBJRExPcGVyYXRpb248SlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcz46OmNhbGw8anNUZXN0Q29u
ZGl0aW9uYWxJbmNsdWRlc1Byb3RvdHlwZUZ1bmN0aW9uSW5jbHVkZXNNZXRob2RDb25kaXRpb25h
bEJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiaW5jbHVkZXNNZXRob2RD
b25kaXRpb25hbCIpOworfQorCisjZW5kaWYKKworI2lmIChFTkFCTEUoQ29uZGl0aW9uMTIpICYm
IEVOQUJMRShDb25kaXRpb24yMikpIHx8IEVOQUJMRShDb25kaXRpb24yMykKK3N0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzUHJvdG90eXBl
RnVuY3Rpb25JbmNsdWRlc01ldGhvZFNldHRpbmdzQ29uZGl0aW9uYWxCb2R5KEpTQzo6SlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUs
IHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzPjo6Q2xhc3NQ
YXJhbWV0ZXIgY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShj
YWxsRnJhbWUpOworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAg
dGhyb3dTY29wZS5yZWxlYXNlKCk7CisgICAgaW1wbC5pbmNsdWRlc01ldGhvZFNldHRpbmdzQ29u
ZGl0aW9uYWwoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
fQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdENvbmRpdGlvbmFsSW5jbHVk
ZXNQcm90b3R5cGVGdW5jdGlvbkluY2x1ZGVzTWV0aG9kU2V0dGluZ3NDb25kaXRpb25hbChKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7
CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzPjo6Y2Fs
bDxqc1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzUHJvdG90eXBlRnVuY3Rpb25JbmNsdWRlc01ldGhv
ZFNldHRpbmdzQ29uZGl0aW9uYWxCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFt
ZSwgImluY2x1ZGVzTWV0aG9kU2V0dGluZ3NDb25kaXRpb25hbCIpOworfQorCisjZW5kaWYKKwor
I2lmIChFTkFCTEUoQ29uZGl0aW9uMTIpICYmIEVOQUJMRShDb25kaXRpb24yMikpIHx8IEVOQUJM
RShDb25kaXRpb24yMykKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RD
b25kaXRpb25hbEluY2x1ZGVzUHJvdG90eXBlRnVuY3Rpb25UYWtlTm9kZXNCb2R5KEpTQzo6SlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJh
bWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzPjo6Q2xh
c3NQYXJhbWV0ZXIgY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0obGV4
aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Cisg
ICAgYXV0byBpbXBsUmVzdWx0ID0gaW1wbC50YWtlTm9kZXMoKTsKKyAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMU2VxdWVuY2U8SURMSW50
ZXJmYWNlPE5vZGU+Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgV1RGTW92ZShpbXBsUmVzdWx0Lm5vZGVzKSkpKTsKK30KKworRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzUHJvdG90eXBlRnVuY3Rp
b25UYWtlTm9kZXMoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSogY2FsbEZyYW1lKQoreworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0Q29uZGl0aW9u
YWxJbmNsdWRlcz46OmNhbGw8anNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc1Byb3RvdHlwZUZ1bmN0
aW9uVGFrZU5vZGVzQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJ0YWtl
Tm9kZXMiKTsKK30KKworI2VuZGlmCisKK0pTQzo6SXNvU3Vic3BhY2UqIEpTVGVzdENvbmRpdGlv
bmFsSW5jbHVkZXM6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK3sKKyAgICBhdXRvJiBj
bGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7
CisgICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0
byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RDb25kaXRpb25hbEluY2x1ZGVzLmdl
dCgpKQorICAgICAgICByZXR1cm4gc3BhY2U7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU1Rlc3RDb25kaXRpb25hbEluY2x1
ZGVzPiB8fCAhSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlczo6bmVlZHNEZXN0cnVjdGlvbik7Cisg
ICAgaWYgY29uc3RleHByIChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0LCBKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzPikKKyAgICAgICAgc3BhY2VzLm1fc3Vic3Bh
Y2VGb3JUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcyA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElT
T19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmRlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlw
ZS5nZXQoKSwgSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcyk7CisgICAgZWxzZQorICAgICAgICBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RDb25kaXRpb25hbEluY2x1ZGVzID0gbWFrZVVuaXF1ZTxJ
c29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBDZWxsVHlw
ZS5nZXQoKSwgSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcyk7CisgICAgYXV0byogc3BhY2UgPSBz
cGFjZXMubV9zdWJzcGFjZUZvclRlc3RDb25kaXRpb25hbEluY2x1ZGVzLmdldCgpOworSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJ
TigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQorICAgIGlmICgmSlNUZXN0Q29uZGl0aW9uYWxJbmNs
dWRlczo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHMpCisgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygp
LmFwcGVuZChzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfRU5ECitJR05PUkVfV0FSTklOR1NfRU5E
CisgICAgcmV0dXJuIHNwYWNlOworfQorCit2b2lkIEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXM6
OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKK3sKKyAg
ICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMqPihj
ZWxsKTsKKyAgICBhbmFseXplci5zZXRXcmFwcGVkT2JqZWN0Rm9yQ2VsbChjZWxsLCAmdGhpc09i
amVjdC0+d3JhcHBlZCgpKTsKKyAgICBpZiAodGhpc09iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpKQorICAgICAgICBhbmFseXplci5zZXRMYWJlbEZvckNlbGwoY2VsbCwgInVybCAiICsg
dGhpc09iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT51cmwoKS5zdHJpbmcoKSk7Cisg
ICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOworfQorCitib29sIEpTVGVzdENv
bmRpdGlvbmFsSW5jbHVkZXNPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpI
YW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvciwg
Y29uc3QgY2hhcioqIHJlYXNvbikKK3sKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKKyAgICBV
TlVTRURfUEFSQU0odmlzaXRvcik7CisgICAgVU5VU0VEX1BBUkFNKHJlYXNvbik7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCit2b2lkIEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNPd25lcjo6Zmlu
YWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqIGNvbnRleHQpCit7
CisgICAgYXV0byoganNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcyA9IHN0YXRpY19jYXN0PEpTVGVz
dENvbmRpdGlvbmFsSW5jbHVkZXMqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CisgICAgYXV0
byYgd29ybGQgPSAqc3RhdGljX2Nhc3Q8RE9NV3JhcHBlcldvcmxkKj4oY29udGV4dCk7CisgICAg
dW5jYWNoZVdyYXBwZXIod29ybGQsICZqc1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzLT53cmFwcGVk
KCksIGpzVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMpOworfQorCisjaWYgRU5BQkxFKEJJTkRJTkdf
SU5URUdSSVRZKQorI2lmIFBMQVRGT1JNKFdJTikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0
NDgzKQorZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkICgqY29uc3QgX19pZGVudGlmaWVyKCI/P183
VGVzdENvbmRpdGlvbmFsSW5jbHVkZXNAV2ViQ29yZUBANkJAIilbXSkoKTsgfQorI2Vsc2UKK2V4
dGVybiAiQyIgeyBleHRlcm4gdm9pZCogX1pUVk43V2ViQ29yZTIzVGVzdENvbmRpdGlvbmFsSW5j
bHVkZXNFW107IH0KKyNlbmRpZgorI2VuZGlmCisKK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVh
dGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBSZWY8VGVzdENvbmRpdGlvbmFsSW5jbHVkZXM+JiYgaW1wbCkKK3sKKworI2lmIEVOQUJMRShC
SU5ESU5HX0lOVEVHUklUWSkKKyAgICBjb25zdCB2b2lkKiBhY3R1YWxWVGFibGVQb2ludGVyID0g
Z2V0VlRhYmxlUG9pbnRlcihpbXBsLnB0cigpKTsKKyNpZiBQTEFURk9STShXSU4pCisgICAgdm9p
ZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gX19pZGVudGlmaWVyKCI/P183VGVzdENvbmRpdGlv
bmFsSW5jbHVkZXNAV2ViQ29yZUBANkJAIik7CisjZWxzZQorICAgIHZvaWQqIGV4cGVjdGVkVlRh
YmxlUG9pbnRlciA9ICZfWlRWTjdXZWJDb3JlMjNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc0VbMl07
CisjZW5kaWYKKworICAgIC8vIElmIHRoaXMgZmFpbHMgVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMg
ZG9lcyBub3QgaGF2ZSBhIHZ0YWJsZSwgc28geW91IG5lZWQgdG8gYWRkIHRoZQorICAgIC8vIElt
cGxlbWVudGF0aW9uTGFja3NWVGFibGUgYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2UgZGVmaW5p
dGlvbgorICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19wb2x5bW9ycGhpYzxUZXN0Q29uZGl0aW9u
YWxJbmNsdWRlcz46OnZhbHVlLCAiVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMgaXMgbm90IHBvbHlt
b3JwaGljIik7CisKKyAgICAvLyBJZiB5b3UgaGl0IHRoaXMgYXNzZXJ0aW9uIHlvdSBlaXRoZXIg
aGF2ZSBhIHVzZSBhZnRlciBmcmVlIGJ1Zywgb3IKKyAgICAvLyBUZXN0Q29uZGl0aW9uYWxJbmNs
dWRlcyBoYXMgc3ViY2xhc3Nlcy4gSWYgVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMgaGFzIHN1YmNs
YXNzZXMgdGhhdCBnZXQgcGFzc2VkCisgICAgLy8gdG8gdG9KUygpIHdlIGN1cnJlbnRseSByZXF1
aXJlIFRlc3RDb25kaXRpb25hbEluY2x1ZGVzIHlvdSB0byBvcHQgb3V0IG9mIGJpbmRpbmcgaGFy
ZGVuaW5nCisgICAgLy8gYnkgYWRkaW5nIHRoZSBTa2lwVlRhYmxlVmFsaWRhdGlvbiBhdHRyaWJ1
dGUgdG8gdGhlIGludGVyZmFjZSBJREwgZGVmaW5pdGlvbgorICAgIFJFTEVBU0VfQVNTRVJUKGFj
dHVhbFZUYWJsZVBvaW50ZXIgPT0gZXhwZWN0ZWRWVGFibGVQb2ludGVyKTsKKyNlbmRpZgorICAg
IHJldHVybiBjcmVhdGVXcmFwcGVyPFRlc3RDb25kaXRpb25hbEluY2x1ZGVzPihnbG9iYWxPYmpl
Y3QsIFdURk1vdmUoaW1wbCkpOworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcyYgaW1wbCkKK3sKKyAgICByZXR1cm4gd3JhcChs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwpOworfQorCitUZXN0Q29uZGl0
aW9uYWxJbmNsdWRlcyogSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlczo6dG9XcmFwcGVkKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBq
c0R5bmFtaWNDYXN0PEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMqPih2bSwgdmFsdWUpKQorICAg
ICAgICByZXR1cm4gJndyYXBwZXItPndyYXBwZWQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
KworfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dENvbmRpdGlvbmFsSW5jbHVkZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RD
b25kaXRpb25hbEluY2x1ZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDYgQEAKKy8q
CisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0
LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3Mu
cGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0RPTVdy
YXBwZXIuaCIKKyNpbmNsdWRlICJUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5oIgorI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEpT
VGVzdENvbmRpdGlvbmFsSW5jbHVkZXMgOiBwdWJsaWMgSlNET01XcmFwcGVyPFRlc3RDb25kaXRp
b25hbEluY2x1ZGVzPiB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTRE9NV3JhcHBlcjxU
ZXN0Q29uZGl0aW9uYWxJbmNsdWRlcz47CisgICAgc3RhdGljIEpTVGVzdENvbmRpdGlvbmFsSW5j
bHVkZXMqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdENvbmRpdGlvbmFsSW5jbHVkZXM+JiYgaW1wbCkKKyAg
ICB7CisgICAgICAgIEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMqIHB0ciA9IG5ldyAoTm90TnVs
bCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcz4oZ2xvYmFsT2Jq
ZWN0LT52bSgpLmhlYXApKSBKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzKHN0cnVjdHVyZSwgKmds
b2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24o
Z2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBz
dGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2Jh
bE9iamVjdCYpOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUoSlNDOjpWTSYs
IEpTRE9NR2xvYmFsT2JqZWN0Jik7CisgICAgc3RhdGljIFRlc3RDb25kaXRpb25hbEluY2x1ZGVz
KiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CisgICAgc3RhdGljIHZvaWQgZGVz
dHJveShKU0M6OkpTQ2VsbCopOworCisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIEpT
Qzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5m
bygpLCBKU0M6Ok5vbkFycmF5KTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdl
dENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHsKKyAgICAgICAgaWYg
Y29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBs
KHZtKTsKKyAgICB9CisgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1w
bChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlND
OjpIZWFwQW5hbHl6ZXImKTsKKworICAgIC8vIEN1c3RvbSBhdHRyaWJ1dGVzCisjaWYgRU5BQkxF
KENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCisgICAgSlNDOjpKU1ZhbHVlIGlu
Y2x1ZGVzU3RyMyhKU0M6OkpTR2xvYmFsT2JqZWN0JikgY29uc3Q7CisjZW5kaWYKKyNpZiBFTkFC
TEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKKyAgICB2b2lkIHNldEluY2x1
ZGVzU3RyMyhKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU1ZhbHVlKTsKKyNlbmRpZgorCisg
ICAgLy8gQ3VzdG9tIGZ1bmN0aW9ucworI2lmIChFTkFCTEUoQ29uZGl0aW9uMTIpICYmIEVOQUJM
RShDb25kaXRpb24yMikpIHx8IEVOQUJMRShDb25kaXRpb24yMykKKyAgICBKU0M6OkpTVmFsdWUg
aW5jbHVkZXNNZXRob2QzKEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkNhbGxGcmFtZSYpOwor
I2VuZGlmCitwcm90ZWN0ZWQ6CisgICAgSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcyhKU0M6OlN0
cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RDb25kaXRpb25hbEluY2x1ZGVz
PiYmKTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKKworY2xhc3Mg
SlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc093bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93
bmVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9v
dHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90Vmlz
aXRvciYsIGNvbnN0IGNoYXIqKik7CisgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpOworfTsKKworaW5saW5lIEpTQzo6V2Vh
a0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxkJiwgVGVzdENvbmRpdGlv
bmFsSW5jbHVkZXMqKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxKU1Rlc3RDb25kaXRp
b25hbEluY2x1ZGVzT3duZXI+IG93bmVyOworICAgIHJldHVybiAmb3duZXIuZ2V0KCk7Cit9CisK
K2lubGluZSB2b2lkKiB3cmFwcGVyS2V5KFRlc3RDb25kaXRpb25hbEluY2x1ZGVzKiB3cmFwcGFi
bGVPYmplY3QpCit7CisgICAgcmV0dXJuIHdyYXBwYWJsZU9iamVjdDsKK30KKworSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdENv
bmRpdGlvbmFsSW5jbHVkZXMmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcyogaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRv
SlMobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVs
bCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdENvbmRpdGlvbmFsSW5jbHVkZXM+JiYpOwor
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJl
ZlB0cjxUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcz4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9K
U05ld2x5Q3JlYXRlZChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwucmVs
ZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CisKK3RlbXBsYXRlPD4gc3RydWN0IEpT
RE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcz4geworICAg
IHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXM7CisgICAgdXNp
bmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFRlc3RDb25kaXRpb25hbEluY2x1ZGVzKjsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3Bw
CShyZXZpc2lvbiAyNjY2OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMs
NyBAQAogI2luY2x1ZGUgIkpTVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIuaCIKICNpbmNsdWRl
ICJKU1Rlc3RDYWxsVHJhY2VyLmgiCiAjaW5jbHVkZSAiSlNUZXN0Q2xhc3NXaXRoSlNCdWlsdGlu
Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzLmgiCiAj
aW5jbHVkZSAiSlNUZXN0RE9NSklULmgiCiAjaW5jbHVkZSAiSlNUZXN0RG9tYWluU2VjdXJpdHku
aCIKICNpbmNsdWRlICJKU1Rlc3RFbmFibGVkQnlTZXR0aW5nLmgiCkBAIC0xODksNiArMTkwLDgg
QEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2FsbGJhY2tJbgogI2VuZGlmCiBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3RvckNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdENvbmRpdGlvbmFsSW5jbHVkZXND
b25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0Q29uZGl0aW9u
YWxJbmNsdWRlc0NvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0VGVzdERPTUpJVENvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiBib29sIHNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3RET01KSVRDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3REb21haW5TZWN1cml0eUNvbnN0cnVjdG9yKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
CkBAIC0zMjIsMTEgKzMyNSwxMSBAQCB1c2luZyBKU1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3Rv
ciA9IEpTCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rlc3RHbG9i
YWxPYmplY3RUYWJsZUluZGV4WzI3MF0gPSB7CiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDQxLCAt
MSB9LAorICAgIHsgNDIsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IDAsIC0xIH0sCiAg
ICAgeyA4LCAyNjUgfSwKLSAgICB7IDQ1LCAtMSB9LAorICAgIHsgNDYsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCkBAIC0zMzQsMTUgKzMz
NywxNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUCiAgICAgeyAt
MSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA1NCwgLTEg
fSwKKyAgICB7IDU1LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAotICAgIHsgMjMsIC0xIH0sCisgICAgeyAyNCwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDY2LCAtMSB9
LAorICAgIHsgNjcsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCkBAIC0zNTYsMTQgKzM1OSwxNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IENv
bXBhY3RIYXNoSW5kZXggSlNUCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCi0gICAgeyAzNSwgLTEgfSwKKyAgICB7IDM2LCAtMSB9LAogICAgIHsgLTEs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDcxLCAtMSB9LAotICAgIHsgMTMsIDI1OSB9LAorICAg
IHsgNzIsIC0xIH0sCisgICAgeyAxNCwgMjU5IH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCkBAIC0zNzEsMTEgKzM3NCwxMSBAQCBzdGF0aWMgY29u
c3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAzOSwgLTEgfSwKLSAgICB7IDIwLCAyNTYg
fSwKKyAgICB7IDQwLCAtMSB9LAorICAgIHsgMjEsIDI1NiB9LAogICAgIHsgMTAsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKLSAgICB7IDQ2LCAtMSB9LAorICAgIHsgNDcsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCkBAIC0zODQsMTQgKzM4
NywxNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUCiAgICAgeyAt
MSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAzNywgLTEg
fSwKKyAgICB7IDM4LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAotICAgIHsgMjIsIDI2NyB9LAorICAgIHsgMjMsIDI2NyB9LAogICAgIHsgLTEsIC0x
IH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAtNDA2LDI2ICs0MDksMjYg
QEAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0x
IH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNjAsIC0xIH0sCisg
ICAgeyA2MSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEg
fSwKLSAgICB7IDI0LCAyNTcgfSwKKyAgICB7IDI1LCAyNTcgfSwKICAgICB7IC0xLCAtMSB9LAot
ICAgIHsgNjEsIC0xIH0sCi0gICAgeyAxOSwgLTEgfSwKKyAgICB7IDYyLCAtMSB9LAorICAgIHsg
MjAsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0x
IH0sCi0gICAgeyAxOCwgLTEgfSwKKyAgICB7IDE5LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAz
NiwgLTEgfSwKKyAgICB7IDM3LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEg
fSwKICAgICB7IDQsIC0xIH0sCkBAIC00MzMsNDMgKzQzNiw0MyBAQCBzdGF0aWMgY29uc3Qgc3Ry
dWN0IENvbXBhY3RIYXNoSW5kZXggSlNUCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAyNSwgLTEgfSwKKyAgICB7IDI2LCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCiAgICAgeyAyLCAyNjkgfSwKLSAgICB7IDM4LCAtMSB9LAorICAgIHsgMzks
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0s
Ci0gICAgeyAyMSwgLTEgfSwKKyAgICB7IDIyLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwg
LTEgfSwKLSAgICB7IDU4LCAtMSB9LAorICAgIHsgNTksIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7
IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAyOSwgLTEgfSwKKyAgICB7IDMwLCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA0MywgLTEgfSwKKyAgICB7IDQ0LCAtMSB9LAog
ICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsg
LTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDUzLCAtMSB9LAotICAgIHsgLTEsIC0x
IH0sCi0gICAgeyAxNCwgLTEgfSwKKyAgICB7IDU0LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCisg
ICAgeyAxNSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAorICAgIHsgMTIsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA0OCwgLTEg
fSwKKyAgICB7IDQ5LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LApAQCAtNDc5LDEyICs0ODIsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBD
b21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAotICAgIHsgNjcsIC0xIH0sCisgICAgeyA2OCwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDI4LCAtMSB9
LAotICAgIHsgMzIsIDI2MyB9LAorICAgIHsgMjksIC0xIH0sCisgICAgeyAzMywgMjYzIH0sCiAg
ICAgeyAtMSwgLTEgfSwKICAgICB7IDUsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTQ5NCw5
ICs0OTcsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUCiAgICAg
eyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAxNiwg
MjU4IH0sCisgICAgeyAxNywgMjU4IH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDYyLCAtMSB9
LAorICAgIHsgNjMsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCkBAIC01MDUsMTEgKzUwOCwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IENv
bXBhY3RIYXNoSW5kZXggSlNUCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCi0gICAgeyAzNCwgMjY4IH0sCisgICAgeyAzNSwgMjY4IH0sCiAgICAgeyAt
MSwgLTEgfSwKLSAgICB7IDE3LCAtMSB9LAorICAgIHsgMTgsIC0xIH0sCiAgICAgeyAtMSwgLTEg
fSwKLSAgICB7IDY1LCAtMSB9LAorICAgIHsgNjYsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCkBAIC01MjMsMTIgKzUyNiwxMiBAQCBzdGF0
aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA3MCwgLTEgfSwKKyAgICB7IDcx
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA0NywgMjY0IH0sCisgICAgeyA0OCwgMjY0IH0sCiAg
ICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgMywgLTEgfSwKQEAgLTU0NSw1
MiArNTQ4LDUyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QKICAg
ICB7IC0xLCAtMSB9LAogICAgIHsgMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMTIs
IC0xIH0sCisgICAgeyAxMywgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNDksIDI2MiB9LAorICAg
IHsgNTAsIDI2MiB9LAogICAgIHsgMTEsIDI2MSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA2
MywgLTEgfSwKKyAgICB7IDY0LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEg
fSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAotICAgIHsgMTUsIC0xIH0sCisgICAgeyAxNiwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAotICAgIHsgMjYsIC0xIH0sCisgICAgeyAyNywgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAzMSwgLTEgfSwKKyAgICB7IDMyLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgNywg
LTEgfSwKLSAgICB7IDUxLCAtMSB9LAotICAgIHsgLTEsIC0xIH0sCiAgICAgeyA1MiwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LAorICAgIHsgNTMsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7
IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAyNywgMjY2IH0sCi0gICAgeyAzMCwg
MjYwIH0sCi0gICAgeyAzMywgLTEgfSwKLSAgICB7IDQwLCAtMSB9LAotICAgIHsgNDIsIC0xIH0s
Ci0gICAgeyA0NCwgLTEgfSwKLSAgICB7IDUwLCAtMSB9LAotICAgIHsgNTUsIC0xIH0sCisgICAg
eyAtMSwgLTEgfSwKKyAgICB7IDI4LCAyNjYgfSwKKyAgICB7IDMxLCAyNjAgfSwKKyAgICB7IDM0
LCAtMSB9LAorICAgIHsgNDEsIC0xIH0sCisgICAgeyA0MywgLTEgfSwKKyAgICB7IDQ1LCAtMSB9
LAorICAgIHsgNTEsIC0xIH0sCiAgICAgeyA1NiwgLTEgfSwKICAgICB7IDU3LCAtMSB9LAotICAg
IHsgNTksIC0xIH0sCi0gICAgeyA2NCwgLTEgfSwKLSAgICB7IDY4LCAtMSB9LAorICAgIHsgNTgs
IC0xIH0sCisgICAgeyA2MCwgLTEgfSwKKyAgICB7IDY1LCAtMSB9LAogICAgIHsgNjksIC0xIH0s
CisgICAgeyA3MCwgLTEgfSwKIH07CiAKIApAQCAtNjE2LDYgKzYxOSw3IEBAIHN0YXRpYyBjb25z
dCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RHbG9iYWwKICAgICB7IDAsIDAsIE5vSW50cmluc2ljLCB7
IDAsIDAgfSB9LAogI2VuZGlmCiAgICAgeyAiVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVj
dG9yIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6
R2V0VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29u
c3RydWN0b3JDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlT
bG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RDbGFzc1dpdGhKU0J1
aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yKSB9IH0sCisgICAgeyAiVGVzdENvbmRpdGlvbmFs
SW5jbHVkZXMiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlT
bG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3RDb25kaXRpb25hbEluY2x1
ZGVzQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6
UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0Q29uZGl0aW9uYWxJbmNsdWRl
c0NvbnN0cnVjdG9yKSB9IH0sCiAgICAgeyAiVGVzdERPTUpJVCIsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChp
bnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xv
YmFsT2JqZWN0VGVzdERPTUpJVENvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQ
dXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdERP
TUpJVENvbnN0cnVjdG9yKSB9IH0sCiAgICAgeyAiVGVzdERvbWFpblNlY3VyaXR5Iiwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRy
aW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5j
Pihqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RG9tYWluU2VjdXJpdHlDb25zdHJ1Y3RvciksIChpbnRw
dHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVz
dEdsb2JhbE9iamVjdFRlc3REb21haW5TZWN1cml0eUNvbnN0cnVjdG9yKSB9IH0sCiAgICAgeyAi
VGVzdEVuYWJsZWRCeVNldHRpbmciLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nh
c3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3RFbmFi
bGVkQnlTZXR0aW5nQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3Bl
cnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEJ5
U2V0dGluZ0NvbnN0cnVjdG9yKSB9IH0sCkBAIC02OTAsNyArNjk0LDcgQEAgc3RhdGljIGNvbnN0
IEhhc2hUYWJsZVZhbHVlIEpTVGVzdEdsb2JhbAogICAgIHsgInJlZ3VsYXJPcGVyYXRpb24iLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBO
b0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpz
VGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25SZWd1bGFyT3BlcmF0aW9uKSwgKGludHB0
cl90KSAoMSkgfSB9LAogfTsKIAotc3RhdGljIGNvbnN0IEhhc2hUYWJsZSBKU1Rlc3RHbG9iYWxP
YmplY3RUYWJsZSA9IHsgNzIsIDI1NSwgdHJ1ZSwgSlNUZXN0R2xvYmFsT2JqZWN0OjppbmZvKCks
IEpTVGVzdEdsb2JhbE9iamVjdFRhYmxlVmFsdWVzLCBKU1Rlc3RHbG9iYWxPYmplY3RUYWJsZUlu
ZGV4IH07CitzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdEdsb2JhbE9iamVjdFRhYmxlID0g
eyA3MywgMjU1LCB0cnVlLCBKU1Rlc3RHbG9iYWxPYmplY3Q6OmluZm8oKSwgSlNUZXN0R2xvYmFs
T2JqZWN0VGFibGVWYWx1ZXMsIEpTVGVzdEdsb2JhbE9iamVjdFRhYmxlSW5kZXggfTsKIC8qIEhh
c2ggdGFibGUgZm9yIGNvbnN0cnVjdG9yICovCiAKIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1
ZSBKU1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3RvclRhYmxlVmFsdWVzW10gPQpAQCAtMTE4OSw2
ICsxMTkzLDI5IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENsYXNzV2l0aEoKICAg
ICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvclNl
dHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVz
dENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yIik7CiB9CiAKK3N0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc0NvbnN0cnVjdG9y
R2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxP
YmplY3QmIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmpl
Y3QpOworICAgIHJldHVybiBKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzOjpnZXRDb25zdHJ1Y3Rv
cihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmpl
Y3QoKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RDb25kaXRp
b25hbEluY2x1ZGVzQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVy
biBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9iamVj
dFRlc3RDb25kaXRpb25hbEluY2x1ZGVzQ29uc3RydWN0b3JHZXR0ZXI+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aGlzVmFsdWUsICJUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcyIpOworfQorCitzdGF0
aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENvbmRpdGlvbmFsSW5jbHVk
ZXNDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1
dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgLy8gU2hhZG93
aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0
IExDaGFyKj4oIlRlc3RDb25kaXRpb25hbEluY2x1ZGVzIiksIHN0cmxlbigiVGVzdENvbmRpdGlv
bmFsSW5jbHVkZXMiKSksIHZhbHVlKTsKK30KKworYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0Q29uZGl0aW9uYWxJbmNsdWRlc0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVj
dD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc0NvbnN0
cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFs
dWUsICJUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcyIpOworfQorCiBzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdERPTUpJVENvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmpl
Y3QpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEludGVyZmFjZS5jcHAJKHJldmlzaW9uIDI2NjY5MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw2ICsyNiw3IEBACiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKICNpbmNs
dWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNE
T01CaW5kaW5nLmgiCkBAIC0zOSw2ICs0MCw3IEBACiAjaW5jbHVkZSAiSlNUZXN0Tm9kZS5oIgog
I2luY2x1ZGUgIkpTVGVzdE9iai5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRlc3RTdXBwbGVtZW50YWwuaCIK
ICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvQnVpbHRpbk5hbWVzLmg+CkBAIC04MSw2ICs4MywxMiBAQCBKU0M6OkVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0CiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUo
Q29uZGl0aW9uMjMpCiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50
ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25JbmNsdWRlc01ldGhvZDMoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6Q2FsbEZyYW1lKik7CiAjZW5kaWYKKyNpZiAoRU5BQkxFKENvbmRpdGlvbjExKSAm
JiBFTkFCTEUoQ29uZGl0aW9uMjIpKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCitKU0M6OkVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25J
bmNsdWRlc01ldGhvZENvbmRpdGlvbmFsKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxG
cmFtZSopOworI2VuZGlmCisjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMjMpCitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNl
UHJvdG90eXBlRnVuY3Rpb25JbmNsdWRlc01ldGhvZFNldHRpbmdzQ29uZGl0aW9uYWwoSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7CisjZW5kaWYKICNpZiBFTkFCTEUoQ29u
ZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvblRha2VOb2RlcyhKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKICNlbmRpZgpAQCAtMzQ5LDYgKzM1
NywxNiBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0SW50ZXJmCiAjZWxzZQog
ICAgIHsgMCwgMCwgTm9JbnRyaW5zaWMsIHsgMCwgMCB9IH0sCiAjZW5kaWYKKyNpZiAoRU5BQkxF
KENvbmRpdGlvbjExKSAmJiBFTkFCTEUoQ29uZGl0aW9uMjIpKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MjMpCisgICAgeyAiaW5jbHVkZXNNZXRob2RDb25kaXRpb25hbCIsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChp
bnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0SW50ZXJmYWNlUHJv
dG90eXBlRnVuY3Rpb25JbmNsdWRlc01ldGhvZENvbmRpdGlvbmFsKSwgKGludHB0cl90KSAoMCkg
fSB9LAorI2Vsc2UKKyAgICB7IDAsIDAsIE5vSW50cmluc2ljLCB7IDAsIDAgfSB9LAorI2VuZGlm
CisjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCisgICAgeyAi
aW5jbHVkZXNNZXRob2RTZXR0aW5nc0NvbmRpdGlvbmFsIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0
cl90KXN0YXRpY19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RJbnRlcmZhY2VQcm90b3R5
cGVGdW5jdGlvbkluY2x1ZGVzTWV0aG9kU2V0dGluZ3NDb25kaXRpb25hbCksIChpbnRwdHJfdCkg
KDApIH0gfSwKKyNlbHNlCisgICAgeyAwLCAwLCBOb0ludHJpbnNpYywgeyAwLCAwIH0gfSwKKyNl
bmRpZgogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQogICAg
IHsgInRha2VOb2RlcyIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdO
YXRpdmVGdW5jdGlvbj4oanNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25UYWtlTm9kZXMp
LCAoaW50cHRyX3QpICgwKSB9IH0sCiAjZWxzZQpAQCAtNDA2LDYgKzQyNCwxOCBAQCB2b2lkIEpT
VGVzdEludGVyZmFjZVByb3RvdHlwZTo6ZmluaXNoQ3JlCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24odm0pOwogICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNUZXN0SW50ZXJmYWNl
OjppbmZvKCksIEpTVGVzdEludGVyZmFjZVByb3RvdHlwZVRhYmxlVmFsdWVzLCAqdGhpcyk7Cisg
ICAgYm9vbCBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gZmFsc2U7CisjaWYgRU5BQkxF
KENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCisgICAgaWYgKCFkb3duY2FzdDxE
b2N1bWVudD4oanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkpLT5zZXR0aW5ncygpLnRlc3RTZXR0aW5nRW5hYmxlZCgpKSB7
CisgICAgICAgIGhhc0Rpc2FibGVkUnVudGltZVByb3BlcnRpZXMgPSB0cnVlOworICAgICAgICBh
dXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPigiaW5jbHVkZXNNZXRob2RTZXR0aW5nc0NvbmRpdGlvbmFsIiks
IHN0cmxlbigiaW5jbHVkZXNNZXRob2RTZXR0aW5nc0NvbmRpdGlvbmFsIikpOworICAgICAgICBW
TTo6RGVsZXRlUHJvcGVydHlNb2RlU2NvcGUgc2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1v
ZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7CisgICAgICAgIERlbGV0ZVByb3BlcnR5U2xvdCBzbG90
OworICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xvYmFsT2JqZWN0KCks
IHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgfQorI2VuZGlmCisgICAgaWYgKGhhc0Rpc2FibGVk
UnVudGltZVByb3BlcnRpZXMgJiYgc3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKQorICAgICAg
ICBmbGF0dGVuRGljdGlvbmFyeU9iamVjdCh2bSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCwgZ2V0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5idWlsdGluTmFtZXMoKS5lbnRyaWVzUHVibGljTmFtZSgpKSwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgSlNDX1RPX1NUUklO
R19UQUdfV0lUSE9VVF9UUkFOU0lUSU9OKCk7CiB9CkBAIC04NzEsNiArOTAxLDQ2IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXIKIAogI2VuZGlmCiAKKyNpZiAoRU5B
QkxFKENvbmRpdGlvbjExKSAmJiBFTkFCTEUoQ29uZGl0aW9uMjIpKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMjMpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNl
UHJvdG90eXBlRnVuY3Rpb25JbmNsdWRlc01ldGhvZENvbmRpdGlvbmFsQm9keShKU0M6OkpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1l
LCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0SW50ZXJmYWNlPjo6Q2xhc3NQYXJhbWV0ZXIg
Y2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9i
amVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUp
OworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgdGhyb3dTY29w
ZS5yZWxlYXNlKCk7CisgICAgaW1wbC5pbmNsdWRlc01ldGhvZENvbmRpdGlvbmFsKCk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkluY2x1ZGVz
TWV0aG9kQ29uZGl0aW9uYWwoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0SW50
ZXJmYWNlPjo6Y2FsbDxqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkluY2x1ZGVzTWV0
aG9kQ29uZGl0aW9uYWxCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhbGxGcmFtZSwgImlu
Y2x1ZGVzTWV0aG9kQ29uZGl0aW9uYWwiKTsKK30KKworI2VuZGlmCisKKyNpZiBFTkFCTEUoQ29u
ZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkluY2x1ZGVzTWV0aG9k
U2V0dGluZ3NDb25kaXRpb25hbEJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9u
PEpTVGVzdEludGVyZmFjZT46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMpCit7CisgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHRocm93U2NvcGUucmVsZWFzZSgpOworICAgIGltcGwu
aW5jbHVkZXNNZXRob2RTZXR0aW5nc0NvbmRpdGlvbmFsKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkluY2x1ZGVzTWV0aG9kU2V0dGluZ3ND
b25kaXRpb25hbChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCit7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3RJbnRlcmZhY2U+
OjpjYWxsPGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW5jbHVkZXNNZXRob2RTZXR0
aW5nc0NvbmRpdGlvbmFsQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJp
bmNsdWRlc01ldGhvZFNldHRpbmdzQ29uZGl0aW9uYWwiKTsKK30KKworI2VuZGlmCisKICNpZiBF
TkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvblRha2VO
b2Rlc0JvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdEludGVyZmFj
ZT46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL0RPTVdpbmRvdy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9ET01X
aW5kb3cuaWRsCShyZXZpc2lvbiAyNjY2OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdp
bmRvdy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTkxLDkgKzkxLDYgQEAgdHlwZWRlZiBVU1ZTdHJp
bmcgQ1NTT01TdHJpbmc7CiAgICAgRE9NU3RyaW5nPyBwcm9tcHQob3B0aW9uYWwgRE9NU3RyaW5n
IG1lc3NhZ2UgPSAiIiwgb3B0aW9uYWwgRE9NU3RyaW5nIGRlZmF1bHRWYWx1ZSA9ICIiKTsKICAg
ICB1bmRlZmluZWQgcHJpbnQoKTsKIAotICAgIGxvbmcgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKFJl
cXVlc3RBbmltYXRpb25GcmFtZUNhbGxiYWNrIGNhbGxiYWNrKTsgLy8gRklYTUU6IFNob3VsZCBy
ZXR1cm4gYW4gdW5zaWduZWQgbG9uZy4KLSAgICB1bmRlZmluZWQgY2FuY2VsQW5pbWF0aW9uRnJh
bWUobG9uZyBoYW5kbGUpOyAvLyBGSVhNRTogaGFuZGxlIHNob3VsZCBiZSBhbiB1bnNpZ25lZCBs
b25nLgotCiAgICAgW0VuYWJsZWRCeVNldHRpbmc9cmVxdWVzdElkbGVDYWxsYmFja10gdW5zaWdu
ZWQgbG9uZyByZXF1ZXN0SWRsZUNhbGxiYWNrKElkbGVSZXF1ZXN0Q2FsbGJhY2sgY2FsbGJhY2ss
IG9wdGlvbmFsIElkbGVSZXF1ZXN0T3B0aW9ucyBvcHRpb25zKTsKICAgICBbRW5hYmxlZEJ5U2V0
dGluZz1yZXF1ZXN0SWRsZUNhbGxiYWNrXSB1bmRlZmluZWQgY2FuY2VsSWRsZUNhbGxiYWNrKHVu
c2lnbmVkIGxvbmcgaGFuZGxlKTsKIApAQCAtMjEyLDYgKzIwOSw3IEBAIHR5cGVkZWYgVVNWU3Ry
aW5nIENTU09NU3RyaW5nOwogICBVU1ZTdHJpbmcgdGFyZ2V0T3JpZ2luID0gIi8iOwogfTsKIAor
RE9NV2luZG93IGluY2x1ZGVzIEFuaW1hdGlvbkZyYW1lUHJvdmlkZXI7CiBET01XaW5kb3cgaW5j
bHVkZXMgR2xvYmFsQ3J5cHRvOwogRE9NV2luZG93IGluY2x1ZGVzIEdsb2JhbEV2ZW50SGFuZGxl
cnM7CiBET01XaW5kb3cgaW5jbHVkZXMgR2xvYmFsUGVyZm9ybWFuY2U7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS93b3JrZXJzL0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmlkbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmlk
bAkocmV2aXNpb24gMjY2NjkxKQorKysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9EZWRpY2F0ZWRX
b3JrZXJHbG9iYWxTY29wZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQyLDEwICs0Miw5IEBACiAg
ICAgW0NhbGxXaXRoPUdsb2JhbE9iamVjdCwgTWF5VGhyb3dFeGNlcHRpb25dIHVuZGVmaW5lZCBw
b3N0TWVzc2FnZShhbnkgbWVzc2FnZSwgc2VxdWVuY2U8b2JqZWN0PiB0cmFuc2Zlcik7CiAgICAg
W0NhbGxXaXRoPUdsb2JhbE9iamVjdCwgTWF5VGhyb3dFeGNlcHRpb25dIHVuZGVmaW5lZCBwb3N0
TWVzc2FnZShhbnkgbWVzc2FnZSwgb3B0aW9uYWwgUG9zdE1lc3NhZ2VPcHRpb25zIG9wdGlvbnMp
OwogCi0gICAgW0NvbmRpdGlvbmFsPU9GRlNDUkVFTl9DQU5WQVMsIEVuYWJsZWRBdFJ1bnRpbWU9
T2Zmc2NyZWVuQ2FudmFzXSBsb25nIHJlcXVlc3RBbmltYXRpb25GcmFtZShSZXF1ZXN0QW5pbWF0
aW9uRnJhbWVDYWxsYmFjayBjYWxsYmFjayk7IC8vIEZJWE1FOiBTaG91bGQgcmV0dXJuIGFuIHVu
c2lnbmVkIGxvbmcuCi0gICAgW0NvbmRpdGlvbmFsPU9GRlNDUkVFTl9DQU5WQVMsIEVuYWJsZWRB
dFJ1bnRpbWU9T2Zmc2NyZWVuQ2FudmFzXSB1bmRlZmluZWQgY2FuY2VsQW5pbWF0aW9uRnJhbWUo
bG9uZyBoYW5kbGUpOyAvLyBGSVhNRTogaGFuZGxlIHNob3VsZCBiZSBhbiB1bnNpZ25lZCBsb25n
LgotCiAgICAgdW5kZWZpbmVkIGNsb3NlKCk7CiAKICAgICBhdHRyaWJ1dGUgRXZlbnRIYW5kbGVy
IG9ubWVzc2FnZTsKIH07CisKK1tDb25kaXRpb25hbD1PRkZTQ1JFRU5fQ0FOVkFTLCBFbmFibGVk
QXRSdW50aW1lPU9mZnNjcmVlbkNhbnZhc10gRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUgaW5j
bHVkZXMgQW5pbWF0aW9uRnJhbWVQcm92aWRlcjsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408187</attachid>
            <date>2020-09-07 11:01:34 -0700</date>
            <delta_ts>2020-09-07 11:42:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216235-20200907110133.patch</filename>
            <type>text/plain</type>
            <size>110752</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NjcwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgxIEBACisyMDIwLTA5LTA3ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViSURMXSBTdXBwb3J0IGV4dGVu
ZGVkIGF0dHJpYnV0ZXMgb24gaW5jbHVkZXMgc3RhdGVtZW50cyB0byBhbGxvdyBmb3IgY29uZGl0
aW9uYWxpemVkIGluY2x1c2lvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjE2MjM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisK
KyAgICAgICAgSW4gc29tZSBjaXJjdW1zdGFuY3MsIHN1Y2ggYXMgd2l0aCB0aGUgQW5pbWF0aW9u
RnJhbWVQcm92aWRlciBpbnRlcmZhY2UgbWl4aW4sIGl0IGlzCisgICAgICAgIHVzZWZ1bCB0byBv
bmx5IGluY2x1ZGUgYSBtaXhpbiBiYXNlZCBvbiBzb21lIGNvbmRpdGlvbmFsLiBGb3IgQW5pbWF0
aW9uRnJhbWVQcm92aWRlciwKKyAgICAgICAgd2UgY3VycmVudGx5IG9ubHkgd2FudCB0byBpbmNs
dWRlIGl0IGluIERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlIGlmIEVOQUJMRShPRkZTQ1JFRU5f
Q0FOVkFTKQorICAgICAgICBpcyBzZXQgYXQgY29tcGlsZSB0aW1lLCBhbmQgdGhlIHJ1bnRpbWUg
ZmVhdHVyZSBmbGFnIG9mZnNjcmVlbkNhbnZhc0VuYWJsZWQoKSBpcyB0dXJuZWQKKyAgICAgICAg
b24uIFRvIHN1cHBvcnQgdGhhdCwgdGhpcyBjaGFuZ2UgYWRkcyBzdXBwb3J0IGZvciBzcGVjaWZ5
aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZXMgb24gdGhlCisgICAgICAgIGluY2x1ZGVzIHN0YXRlbWVu
dCBpdHNlbGYsIGFuZCBoYXZpbmcgdGhvc2UgZXh0ZW5kZWQgYXR0cmlidXRlcyBhcHBsaWVkIHRv
IGVhY2ggbWVtYmVyCisgICAgICAgIG9mIHRoZSBtaXhpbi4gRm9yIEFuaW1hdGlvbkZyYW1lUHJv
dmlkZXIgaW4gRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUsIHRoYXQgbG9va3MgbGlrZToKKyAg
ICAgICAgCisgICAgICAgICAgICBbQ29uZGl0aW9uYWw9T0ZGU0NSRUVOX0NBTlZBUywgRW5hYmxl
ZEF0UnVudGltZT1PZmZzY3JlZW5DYW52YXNdIERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlIGlu
Y2x1ZGVzIEFuaW1hdGlvbkZyYW1lUHJvdmlkZXI7CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAq
IERlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRTb3Vy
Y2VzLm1ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICBBZGQgbmV3IGZpbGVzLCB1cGRhdGUgeGNmaWxlbGlzdHMuCisKKyAgICAgICAgKiBh
bmltYXRpb24vQW5pbWF0aW9uRnJhbWVQcm92aWRlci5pZGw6IEFkZGVkLgorICAgICAgICAqIHBh
Z2UvRE9NV2luZG93LmlkbDoKKyAgICAgICAgKiB3b3JrZXJzL0RlZGljYXRlZFdvcmtlckdsb2Jh
bFNjb3BlLmlkbDoKKyAgICAgICAgU3BsaXQgQW5pbWF0aW9uRnJhbWVQcm92aWRlci5pZGwgb3V0
IGludG8gaXRzIG93biBtaXhpbiAoYXMgc3BlY2lmaWVkKSBhbmQgaW5jbHVkZWQgaXQgaW4KKyAg
ICAgICAgYm90aCBET01XaW5kb3cgYW5kIERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlIChjb25k
aXRpb25hbGx5KS4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5w
bToKKyAgICAgICAgKFByb2Nlc3NEb2N1bWVudCk6IAorICAgICAgICAoUHJvY2Vzc0RpY3Rpb25h
cnlBbmRFbnVtZXJhdGlvbkltcGxlbWVudGVkQXNPdmVycmlkZXMpOgorICAgICAgICAoUHJvY2Vz
c0ludGVyZmFjZXMpOgorICAgICAgICAoUHJvY2Vzc0NhbGxiYWNrRnVuY3Rpb25zKToKKyAgICAg
ICAgKFByb2Nlc3NEaWN0aW9uYXJpZXMpOgorICAgICAgICAoUHJvY2Vzc0VudW1lcmF0aW9ucyk6
CisgICAgICAgIFNwbGl0IHByb2Nlc3Npbmcgb2YgZWFjaCBkaWZmZXJlbnQgdHlwZSBvZiB0b3Ag
bGV2ZWwgdHlwZSBpbnRvIGl0cyBvd24gZnVuY3Rpb24sCisgICAgICAgIGFuZCBkZWZlciBwcm9j
ZXNzaW5nIG9mIHN1cHBsZW1lbnRhbCBkZXBlbmRlbmNpZXMgdW50aWwgdGhlIHByaW1hcnkgdHlw
ZSBoYXMgYmVlbgorICAgICAgICBzZWxlY3RlZC4KKworICAgICAgICAoTWVyZ2VFeHRlbmRlZEF0
dHJpYnV0ZXNGcm9tU3VwcGxlbWVudGFsKToKKyAgICAgICAgKElzVmFsaWRTdXBwbGVtZW50YWxJ
bnRlcmZhY2UpOgorICAgICAgICAoSXNWYWxpZFN1cHBsZW1lbnRhbERpY3Rpb25hcnkpOgorICAg
ICAgICAoUHJvY2Vzc0ludGVyZmFjZVN1cHBsZW1lbnRhbERlcGVuZGVuY2llcyk6CisgICAgICAg
IChQcm9jZXNzRGljdGlvbmFyeVN1cHBsZW1lbnRhbERlcGVuZGVuY2llcyk6CisgICAgICAgIFNw
bGl0IFByb2Nlc3NTdXBwbGVtZW50YWxEZXBlbmRlbmNpZXMgaW50byBQcm9jZXNzSW50ZXJmYWNl
U3VwcGxlbWVudGFsRGVwZW5kZW5jaWVzCisgICAgICAgIGFuZCBQcm9jZXNzRGljdGlvbmFyeVN1
cHBsZW1lbnRhbERlcGVuZGVuY2llcywgd2hpY2ggbm93IGdldCBwYXNzZWQgdGhlIHByaW1hcnkK
KyAgICAgICAgaW50ZXJmYWNlIG9yIGRpY3Rpb25hcnkgdGhhdCBuZWVkcyBzdXBwbGVtZW50aW5n
LiBQcm9jZXNzSW50ZXJmYWNlU3VwcGxlbWVudGFsRGVwZW5kZW5jaWVzCisgICAgICAgIG5vdyBh
bHNvIHN1cHBvcnRzIG1lcmdpbmcgZXh0ZW5kZWQgYXR0cmlidXRlcyBmcm9tIGluY2x1ZGVzIHN0
YXRlbWVudHMgYW5kIGNoZWNraW5nCisgICAgICAgIHRoYXQgYWxsIGluY2x1ZGVzIGFyZSBsaXN0
ZWQgaW4gdGhlIGRlcGVuZGVuY3kgc2V0LgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9J
RExBdHRyaWJ1dGVzLmpzb246CisgICAgICAgIEFsbG93IHNldHRpbmcgdXNlIG9mIENvbmRpdGlv
bmFsLCBFbmFibGVkQXRSdW50aW1lIGFuZCBFbmFibGVkQnlTZXR0aW5nIGZvcgorICAgICAgICBp
bmNsdWRlcyBzdGF0ZW1lbnRzLgorIAorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvSURMUGFy
c2VyLnBtOgorICAgICAgICAocGFyc2VJbmNsdWRlc1N0YXRlbWVudCk6CisgICAgICAgIEZpeCBv
cmRlcmluZyBvZiBzdHJ1Y3QgbWVtYmVycyBzbyB0aGF0IGV4dGVuZGVkQXR0cmlidXRlcyBpcyBh
bHdheXMgbGFzdCAobm8gcmVhbCAKKyAgICAgICAgZ29vZCByZWFzb24gb3RoZXIgdGhhbiBtb3N0
IG9mIHRoZSBzdHJ1Y3RzIGFscmVhZHkgZGlkIHRoaXMgYW5kIHRoZSBsYWNrIG9mIGNvbnNpc3Rl
bmN5CisgICAgICAgIGJvdGhlcmVkIG1lKS4gQWRkIGV4dGVuZGVkQXR0cmlidXRlcyB0byBJRExJ
bmNsdWRlc1N0YXRlbWVudCBhbmQgc2V0IGl0IHdoZW4KKyAgICAgICAgcGFyc2luZy4KKworICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvcHJlcHJvY2Vzcy1pZGxzLnBsOgorICAgICAgICAoZ2V0
SW5jbHVkZWRJbnRlcmZhY2VzRnJvbUlETCk6CisgICAgICAgIEZpeCBidWcgaW4gcmVnZXggKGZv
dW5kIGVhc2lseSBieSB0aGUgdmFsaWRhdGlvbiBwYXJzZXIhKSB0aGF0IGluY29ycmVjdGx5IHJl
cXVpcmVkIHRoZSBpbnRlcmZhY2UKKyAgICAgICAgbmFtZSBpbiB0aGUgaW5jbHVkZXMgc3RhdGVt
ZW50IHRvIGJlIHRoZSBmaXJzdCB3b3JkIG9uIGEgbGluZS4KKyAgICAgICAgCisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0JpbmRpbmdUZXN0R2xvYmFsQ29uc3RydWN0b3JzLmlkbDoK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29uZGl0aW9uYWxJbmNs
dWRlcy5jcHA6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RDb25kaXRpb25hbEluY2x1ZGVzLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9TdXBwbGVtZW50YWxEZXBlbmRlbmNpZXMuZGVwOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9UZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5pZGw6IEFkZGVkLgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0SW5jbHVkZXMuaWRsOgorICAgICAgICBB
ZGQgdGVzdHMgZm9yIGV4dGVuZGVkIGF0dHJpYnV0ZXMgb24gaW5jbHVkZXMgc3RhdGVtZW50cy4K
KwogMjAyMC0wOS0wNyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3Jn
PgogCiAgICAgICAgIEFkZCBtZW1vcnkgY2FjaGUgd2l0aC93aXRob3V0IHZhbGlkYXRpb24gdG8g
bG9nUmVzb3VyY2VSZXNwb25zZVNvdXJjZQpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlz
aW9uIDI2NjcwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC02MzEsNiArNjMxLDcgQEAgc2V0KFdlYkNvcmVfTk9OX1NWR19JRExfRklMRVMKIAog
ICAgIGFuaW1hdGlvbi9BbmltYXRhYmxlLmlkbAogICAgIGFuaW1hdGlvbi9BbmltYXRpb25FZmZl
Y3QuaWRsCisgICAgYW5pbWF0aW9uL0FuaW1hdGlvbkZyYW1lUHJvdmlkZXIuaWRsCiAgICAgYW5p
bWF0aW9uL0VmZmVjdFRpbWluZy5pZGwKICAgICBhbmltYXRpb24vQW5pbWF0aW9uUGxheWJhY2tF
dmVudC5pZGwKICAgICBhbmltYXRpb24vQW5pbWF0aW9uUGxheWJhY2tFdmVudEluaXQuaWRsCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QJ
KHJldmlzaW9uIDI2NjcwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0
LnhjZmlsZWxpc3QJKHdvcmtpbmcgY29weSkKQEAgLTUyNSw2ICs1MjUsNyBAQCAkKFBST0pFQ1Rf
RElSKS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpCiAkKFBST0pFQ1RfRElSKS9hY2Nlc3NpYmls
aXR5L0FyaWFBdHRyaWJ1dGVzLmlkbAogJChQUk9KRUNUX0RJUikvYW5pbWF0aW9uL0FuaW1hdGFi
bGUuaWRsCiAkKFBST0pFQ1RfRElSKS9hbmltYXRpb24vQW5pbWF0aW9uRWZmZWN0LmlkbAorJChQ
Uk9KRUNUX0RJUikvYW5pbWF0aW9uL0FuaW1hdGlvbkZyYW1lUHJvdmlkZXIuaWRsCiAkKFBST0pF
Q1RfRElSKS9hbmltYXRpb24vQW5pbWF0aW9uUGxheWJhY2tFdmVudC5pZGwKICQoUFJPSkVDVF9E
SVIpL2FuaW1hdGlvbi9BbmltYXRpb25QbGF5YmFja0V2ZW50SW5pdC5pZGwKICQoUFJPSkVDVF9E
SVIpL2FuaW1hdGlvbi9BbmltYXRpb25UaW1lbGluZS5pZGwKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CShyZXZpc2lvbiAyNjY3MDUp
CisrKyBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAkod29y
a2luZyBjb3B5KQpAQCAtNjMsNiArNjMsOCBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZl
ZFNvdXJjZXMvV2ViCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9KU0FuaW1hdGlvbkVmZmVjdC5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJj
ZXMvV2ViQ29yZS9KU0FuaW1hdGlvbkV2ZW50LmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNBbmltYXRpb25FdmVudC5oCiskKEJVSUxUX1BST0RVQ1RT
X0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0FuaW1hdGlvbkZyYW1lUHJvdmlkZXIuY3Bw
CiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0FuaW1hdGlv
bkZyYW1lUHJvdmlkZXIuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvSlNBbmltYXRpb25QbGF5YmFja0V2ZW50LmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIp
L0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNBbmltYXRpb25QbGF5YmFja0V2ZW50LmgKICQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQW5pbWF0aW9uUGxheWJh
Y2tFdmVudEluaXQuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtl
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlz
aW9uIDI2NjcwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtp
bmcgY29weSkKQEAgLTU4OSw2ICs1ODksNyBAQCBKU19CSU5ESU5HX0lETFMgPSBcCiAgICAgJChX
ZWJDb3JlKS9hY2Nlc3NpYmlsaXR5L0FyaWFBdHRyaWJ1dGVzLmlkbCBcCiAgICAgJChXZWJDb3Jl
KS9hbmltYXRpb24vQW5pbWF0YWJsZS5pZGwgXAogICAgICQoV2ViQ29yZSkvYW5pbWF0aW9uL0Fu
aW1hdGlvbkVmZmVjdC5pZGwgXAorICAgICQoV2ViQ29yZSkvYW5pbWF0aW9uL0FuaW1hdGlvbkZy
YW1lUHJvdmlkZXIuaWRsIFwKICAgICAkKFdlYkNvcmUpL2FuaW1hdGlvbi9BbmltYXRpb25QbGF5
YmFja0V2ZW50LmlkbCBcCiAgICAgJChXZWJDb3JlKS9hbmltYXRpb24vQW5pbWF0aW9uUGxheWJh
Y2tFdmVudEluaXQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2FuaW1hdGlvbi9BbmltYXRpb25UaW1l
bGluZS5pZGwgXApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjY2NzA1KQorKysgU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEyNiw2
ICsxMDEyNiw3IEBACiAJCTdDMzMwQTA1MURGOUY5NTEwMEQzMzk1QyAvKiBKU1Bvc2l0aW9uT3B0
aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1Bvc2l0aW9u
T3B0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMzMwQTA2MURGOUY5
NTEwMEQzMzk1QyAvKiBKU1Bvc2l0aW9uT3B0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU1Bvc2l0aW9uT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3QzMzRjM2MDFCNEEwNTA0MDA1MDJDQUYgLyogSlNEb2N1bWVudEZyYWdtZW50Q3VzdG9t
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRG9jdW1lbnRGcmFn
bWVudEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDMzgwNkRCMjUw
NUIxODkwMDc0NEE3QiAvKiBBbmltYXRpb25GcmFtZVByb3ZpZGVyLmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBBbmltYXRpb25GcmFtZVByb3ZpZGVyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJN0MzQTkxRTUxQzk2M0I4ODAwRDFBN0UzIC8qIENsaXBib2FyZEFjY2Vzc1Bv
bGljeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDbGlwYm9hcmRBY2Nlc3NQ
b2xpY3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MzQjc5NkYxOTA4NzU3QjAw
QjQ3QTJEIC8qIFVzZXJNZXNzYWdlSGFuZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBVc2VyTWVzc2FnZUhhbmRsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3QzNCNzk3MDE5MDg3NTdCMDBCNDdBMkQgLyogVXNlck1lc3NhZ2VIYW5kbGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVzZXJNZXNzYWdlSGFuZGxlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjE3ODMsNiArMjE3ODQsNyBAQAogCQkJ
CTcxRTJDNDI0MjFDOTM1MUQwMDI0RjhDOCAvKiBBbmltYXRpb25FZmZlY3RQaGFzZS5oICovLAog
CQkJCTcxMUFEMTI1MjM2RDg2RDQwMDZGRjM3QyAvKiBBbmltYXRpb25FdmVudEJhc2UuY3BwICov
LAogCQkJCTcxMUFEMTIzMjM2RDg2RDMwMDZGRjM3QyAvKiBBbmltYXRpb25FdmVudEJhc2UuaCAq
LywKKwkJCQk3QzM4MDZEQjI1MDVCMTg5MDA3NDRBN0IgLyogQW5pbWF0aW9uRnJhbWVQcm92aWRl
ci5pZGwgKi8sCiAJCQkJNzE0QzdDNjAxRkRBRDI3OTAwRjJCRUUxIC8qIEFuaW1hdGlvblBsYXli
YWNrRXZlbnQuY3BwICovLAogCQkJCTcxNEM3QzY1MUZEQUQyN0IwMEYyQkVFMSAvKiBBbmltYXRp
b25QbGF5YmFja0V2ZW50LmggKi8sCiAJCQkJNzE0QzdDNjQxRkRBRDI3QjAwRjJCRUUxIC8qIEFu
aW1hdGlvblBsYXliYWNrRXZlbnQuaWRsICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYW5pbWF0
aW9uL0FuaW1hdGlvbkZyYW1lUHJvdmlkZXIuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2FuaW1hdGlvbi9BbmltYXRpb25GcmFtZVByb3ZpZGVyLmlkbAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9uRnJhbWVQcm92aWRlci5pZGwJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIGh0dHBzOi8vaHRt
bC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2ltYWdlYml0bWFwLWFuZC1hbmltYXRpb25zLmh0
bWwjYW5pbWF0aW9uZnJhbWVwcm92aWRlcgoraW50ZXJmYWNlIG1peGluIEFuaW1hdGlvbkZyYW1l
UHJvdmlkZXIgeworICAgIHVuc2lnbmVkIGxvbmcgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKFJlcXVl
c3RBbmltYXRpb25GcmFtZUNhbGxiYWNrIGNhbGxiYWNrKTsKKyAgICB1bmRlZmluZWQgY2FuY2Vs
QW5pbWF0aW9uRnJhbWUodW5zaWduZWQgbG9uZyBoYW5kbGUpOworfTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0JKHJldmlzaW9u
IDI2NjcwNSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ci5wbQkod29ya2luZyBjb3B5KQpAQCAtMTYwLDIzICsxNjAsOSBAQCBzdWIgUHJvY2Vzc0RvY3Vt
ZW50CiAgICAgJHVzZURvY3VtZW50ID0gc2hpZnQ7CiAgICAgJGRlZmluZXMgPSBzaGlmdDsKIAot
ICAgICRvYmplY3QtPlByb2Nlc3NTdXBwbGVtZW50YWxEZXBlbmRlbmNpZXMoJHVzZURvY3VtZW50
KTsKLQogICAgIG15ICRpZmFjZU5hbWUgPSAiQ29kZUdlbmVyYXRvciIgLiAkdXNlR2VuZXJhdG9y
OwogICAgIHJlcXVpcmUgJGlmYWNlTmFtZSAuICIucG0iOwogCi0gICAgZm9yZWFjaCBteSAkZGlj
dGlvbmFyeSAoQHskdXNlRG9jdW1lbnQtPmRpY3Rpb25hcmllc30pIHsKLSAgICAgICAgaWYgKCRk
aWN0aW9uYXJ5LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50ZWRBcyJ9KSB7Ci0gICAg
ICAgICAgICAkZGljdGlvbmFyeVR5cGVJbXBsZW1lbnRhdGlvbk5hbWVPdmVycmlkZXN7JGRpY3Rp
b25hcnktPnR5cGUtPm5hbWV9ID0gJGRpY3Rpb25hcnktPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJ
bXBsZW1lbnRlZEFzIn07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3JlYWNoIG15ICRlbnVt
ZXJhdGlvbiAoQHskdXNlRG9jdW1lbnQtPmVudW1lcmF0aW9uc30pIHsKLSAgICAgICAgaWYgKCRl
bnVtZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxlbWVudGVkQXMifSkgewotICAg
ICAgICAgICAgJGVudW1UeXBlSW1wbGVtZW50YXRpb25OYW1lT3ZlcnJpZGVzeyRlbnVtZXJhdGlv
bi0+dHlwZS0+bmFtZX0gPSAkZW51bWVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbXBs
ZW1lbnRlZEFzIn07Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICAjIER5bmFtaWNhbGx5IGxvYWQg
ZXh0ZXJuYWwgY29kZSBnZW5lcmF0aW9uIHBlcmwgbW9kdWxlCiAgICAgJGNvZGVHZW5lcmF0b3Ig
PSAkaWZhY2VOYW1lLT5uZXcoJG9iamVjdCwgJHdyaXRlRGVwZW5kZW5jaWVzLCAkdmVyYm9zZSwg
JHRhcmdldElkbEZpbGVQYXRoKTsKICAgICB1bmxlc3MgKGRlZmluZWQoJGNvZGVHZW5lcmF0b3Ip
KSB7CkBAIC0xODcsNzEgKzE3MywxMjIgQEAgc3ViIFByb2Nlc3NEb2N1bWVudAogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgbXkgJGludGVyZmFjZXMgPSAkdXNlRG9jdW1lbnQtPmludGVy
ZmFjZXM7Ci0gICAgaWYgKEAkaW50ZXJmYWNlcykgewotICAgICAgICBkaWUgIk11bHRpcGxlIGlu
dGVyZmFjZXMgcGVyIGRvY3VtZW50IGFyZSBub3Qgc3VwcG9ydGVkIiBpZiBAJGludGVyZmFjZXMg
PiAxOwotCi0gICAgICAgIG15ICRpbnRlcmZhY2UgPSBAJGludGVyZmFjZXNbMF07Ci0gICAgICAg
IHByaW50ICJHZW5lcmF0aW5nICR1c2VHZW5lcmF0b3IgYmluZGluZ3MgY29kZSBmb3IgSURMIGlu
dGVyZmFjZSBcIiIgLiAkaW50ZXJmYWNlLT50eXBlLT5uYW1lIC4gIlwiLi4uXG4iIGlmICR2ZXJi
b3NlOwotICAgICAgICAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVJbnRlcmZhY2UoJGludGVyZmFj
ZSwgJGRlZmluZXMsICR1c2VEb2N1bWVudC0+ZW51bWVyYXRpb25zLCAkdXNlRG9jdW1lbnQtPmRp
Y3Rpb25hcmllcyk7Ci0gICAgICAgICRjb2RlR2VuZXJhdG9yLT5Xcml0ZURhdGEoJGludGVyZmFj
ZSwgJHVzZU91dHB1dERpciwgJHVzZU91dHB1dEhlYWRlcnNEaXIpOworICAgIGlmIChAeyR1c2VE
b2N1bWVudC0+aW50ZXJmYWNlc30pIHsKKyAgICAgICAgJG9iamVjdC0+UHJvY2Vzc0ludGVyZmFj
ZXMoJHVzZURvY3VtZW50LCAkZGVmaW5lcywgJGNvZGVHZW5lcmF0b3IpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgbXkgJGNhbGxiYWNrRnVuY3Rpb25zID0gJHVzZURvY3VtZW50LT5j
YWxsYmFja0Z1bmN0aW9uczsKLSAgICBpZiAoQCRjYWxsYmFja0Z1bmN0aW9ucykgewotICAgICAg
ICBkaWUgIk11bHRpcGxlIHN0YW5kYWxvbmUgY2FsbGJhY2sgZnVuY3Rpb25zIHBlciBkb2N1bWVu
dCBhcmUgbm90IHN1cHBvcnRlZCIgaWYgQCRjYWxsYmFja0Z1bmN0aW9ucyA+IDE7Ci0KLSAgICAg
ICAgbXkgJGNhbGxiYWNrRnVuY3Rpb24gPSBAJGNhbGxiYWNrRnVuY3Rpb25zWzBdOwotICAgICAg
ICBwcmludCAiR2VuZXJhdGluZyAkdXNlR2VuZXJhdG9yIGJpbmRpbmdzIGNvZGUgZm9yIElETCBj
YWxsYmFjayBmdW5jdGlvbiBcIiIgLiAkY2FsbGJhY2tGdW5jdGlvbi0+dHlwZS0+bmFtZSAuICJc
Ii4uLlxuIiBpZiAkdmVyYm9zZTsKLSAgICAgICAgJGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRlQ2Fs
bGJhY2tGdW5jdGlvbigkY2FsbGJhY2tGdW5jdGlvbiwgJHVzZURvY3VtZW50LT5lbnVtZXJhdGlv
bnMsICR1c2VEb2N1bWVudC0+ZGljdGlvbmFyaWVzKTsKLSAgICAgICAgJGNvZGVHZW5lcmF0b3It
PldyaXRlRGF0YSgkY2FsbGJhY2tGdW5jdGlvbiwgJHVzZU91dHB1dERpciwgJHVzZU91dHB1dEhl
YWRlcnNEaXIpOworICAgIGlmIChAeyR1c2VEb2N1bWVudC0+Y2FsbGJhY2tGdW5jdGlvbnN9KSB7
CisgICAgICAgICRvYmplY3QtPlByb2Nlc3NDYWxsYmFja0Z1bmN0aW9ucygkdXNlRG9jdW1lbnQs
ICRkZWZpbmVzLCAkY29kZUdlbmVyYXRvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBteSAkZGljdGlvbmFyaWVzID0gJHVzZURvY3VtZW50LT5kaWN0aW9uYXJpZXM7Ci0gICAgaWYg
KEAkZGljdGlvbmFyaWVzKSB7Ci0gICAgICAgIG15ICRkaWN0aW9uYXJ5OwotICAgICAgICBteSAk
b3RoZXJEaWN0aW9uYXJpZXM7Ci0gICAgICAgIGlmIChAJGRpY3Rpb25hcmllcyA9PSAxKSB7Ci0g
ICAgICAgICAgICAkZGljdGlvbmFyeSA9IEAkZGljdGlvbmFyaWVzWzBdOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgbXkgJHByaW1hcnlEaWN0aW9uYXJ5TmFtZSA9IGZpbGVwYXJzZSgk
dGFyZ2V0SWRsRmlsZVBhdGgsICIuaWRsIik7Ci0gICAgICAgICAgICBmb3IgbXkgJGNhbmRpZGF0
ZSAoQCRkaWN0aW9uYXJpZXMpIHsKLSAgICAgICAgICAgICAgICBpZiAoJGNhbmRpZGF0ZS0+dHlw
ZS0+bmFtZSBlcSAkcHJpbWFyeURpY3Rpb25hcnlOYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICRkaWN0aW9uYXJ5ID0gJGNhbmRpZGF0ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICBwdXNoIEAkb3RoZXJEaWN0aW9uYXJpZXMsICRjYW5kaWRhdGU7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGllICJNdWx0aXBs
ZSBkaWN0aW9uYXJpZXMgcGVyIGRvY3VtZW50IGFyZSBvbmx5IHN1cHBvcnRlZCBpZiBvbmUgbWF0
Y2hlcyB0aGUgZmlsZW5hbWUiIHVubGVzcyAkZGljdGlvbmFyeTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHByaW50ICJHZW5lcmF0aW5nICR1c2VHZW5lcmF0b3IgYmluZGluZ3MgY29kZSBmb3IgSURM
IGRpY3Rpb25hcnkgXCIiIC4gJGRpY3Rpb25hcnktPnR5cGUtPm5hbWUgLiAiXCIuLi5cbiIgaWYg
JHZlcmJvc2U7Ci0gICAgICAgICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0ZURpY3Rpb25hcnkoJGRp
Y3Rpb25hcnksICR1c2VEb2N1bWVudC0+ZW51bWVyYXRpb25zLCAkb3RoZXJEaWN0aW9uYXJpZXMp
OwotICAgICAgICAkY29kZUdlbmVyYXRvci0+V3JpdGVEYXRhKCRkaWN0aW9uYXJ5LCAkdXNlT3V0
cHV0RGlyLCAkdXNlT3V0cHV0SGVhZGVyc0Rpcik7CisgICAgaWYgKEB7JHVzZURvY3VtZW50LT5k
aWN0aW9uYXJpZXN9KSB7CisgICAgICAgICRvYmplY3QtPlByb2Nlc3NEaWN0aW9uYXJpZXMoJHVz
ZURvY3VtZW50LCAkZGVmaW5lcywgJGNvZGVHZW5lcmF0b3IpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIAotICAgIG15ICRlbnVtZXJhdGlvbnMgPSAkdXNlRG9jdW1lbnQtPmVudW1lcmF0
aW9uczsKLSAgICBpZiAoQCRlbnVtZXJhdGlvbnMpIHsKLSAgICAgICAgZGllICJNdWx0aXBsZSBz
dGFuZGFsb25lIGVudW1lcmF0aW9ucyBwZXIgZG9jdW1lbnQgYXJlIG5vdCBzdXBwb3J0ZWQiIGlm
IEAkZW51bWVyYXRpb25zID4gMTsKLQotICAgICAgICBteSAkZW51bWVyYXRpb24gPSBAJGVudW1l
cmF0aW9uc1swXTsKLSAgICAgICAgcHJpbnQgIkdlbmVyYXRpbmcgJHVzZUdlbmVyYXRvciBiaW5k
aW5ncyBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gXCIiIC4gJGVudW1lcmF0aW9uLT50eXBlLT5u
YW1lIC4gIlwiLi4uXG4iIGlmICR2ZXJib3NlOwotICAgICAgICAkY29kZUdlbmVyYXRvci0+R2Vu
ZXJhdGVFbnVtZXJhdGlvbigkZW51bWVyYXRpb24pOwotICAgICAgICAkY29kZUdlbmVyYXRvci0+
V3JpdGVEYXRhKCRlbnVtZXJhdGlvbiwgJHVzZU91dHB1dERpciwgJHVzZU91dHB1dEhlYWRlcnNE
aXIpOworICAgIGlmIChAeyR1c2VEb2N1bWVudC0+ZW51bWVyYXRpb25zfSkgeworICAgICAgICAk
b2JqZWN0LT5Qcm9jZXNzRW51bWVyYXRpb25zKCR1c2VEb2N1bWVudCwgJGRlZmluZXMsICRjb2Rl
R2VuZXJhdG9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGRpZSAiUHJvY2Vzc2lu
ZyBkb2N1bWVudCAiIC4gJHVzZURvY3VtZW50LT5maWxlTmFtZSAuICIgZGlkIG5vdCBnZW5lcmF0
ZSBhbnl0aGluZyIKKyAgICBkaWUgIlByb2Nlc3NpbmcgZG9jdW1lbnQgIiAuICR1c2VEb2N1bWVu
dC0+ZmlsZU5hbWUgLiAiIGRpZCBub3QgZ2VuZXJhdGUgYW55dGhpbmcuIjsKK30KKworc3ViIFBy
b2Nlc3NEaWN0aW9uYXJ5QW5kRW51bWVyYXRpb25JbXBsZW1lbnRlZEFzT3ZlcnJpZGVzCit7Cisg
ICAgbXkgKCRvYmplY3QsICR1c2VEb2N1bWVudCkgPSBAXzsKKworICAgIGZvcmVhY2ggbXkgJGRp
Y3Rpb25hcnkgKEB7JHVzZURvY3VtZW50LT5kaWN0aW9uYXJpZXN9KSB7CisgICAgICAgIGlmICgk
ZGljdGlvbmFyeS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxlbWVudGVkQXMifSkgeworICAg
ICAgICAgICAgJGRpY3Rpb25hcnlUeXBlSW1wbGVtZW50YXRpb25OYW1lT3ZlcnJpZGVzeyRkaWN0
aW9uYXJ5LT50eXBlLT5uYW1lfSA9ICRkaWN0aW9uYXJ5LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
SW1wbGVtZW50ZWRBcyJ9OworICAgICAgICB9CisgICAgfQorCisgICAgZm9yZWFjaCBteSAkZW51
bWVyYXRpb24gKEB7JHVzZURvY3VtZW50LT5lbnVtZXJhdGlvbnN9KSB7CisgICAgICAgIGlmICgk
ZW51bWVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbXBsZW1lbnRlZEFzIn0pIHsKKyAg
ICAgICAgICAgICRlbnVtVHlwZUltcGxlbWVudGF0aW9uTmFtZU92ZXJyaWRlc3skZW51bWVyYXRp
b24tPnR5cGUtPm5hbWV9ID0gJGVudW1lcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1w
bGVtZW50ZWRBcyJ9OworICAgICAgICB9CisgICAgfQorfQorCitzdWIgUHJvY2Vzc0ludGVyZmFj
ZXMKK3sKKyAgICBteSAoJG9iamVjdCwgJHVzZURvY3VtZW50LCAkZGVmaW5lcywgJGNvZGVHZW5l
cmF0b3IpID0gQF87CisKKyAgICBkaWUgIk11bHRpcGxlIGludGVyZmFjZXMgcGVyIGRvY3VtZW50
IGFyZSBub3Qgc3VwcG9ydGVkIiBpZiBAeyR1c2VEb2N1bWVudC0+aW50ZXJmYWNlc30gPiAxOwor
ICAgIG15ICRpbnRlcmZhY2UgPSAkdXNlRG9jdW1lbnQtPmludGVyZmFjZXMtPlswXTsKKworICAg
ICRvYmplY3QtPlByb2Nlc3NJbnRlcmZhY2VTdXBwbGVtZW50YWxEZXBlbmRlbmNpZXMoJGludGVy
ZmFjZSwgJHVzZURvY3VtZW50KTsKKyAgICAkb2JqZWN0LT5Qcm9jZXNzRGljdGlvbmFyeUFuZEVu
dW1lcmF0aW9uSW1wbGVtZW50ZWRBc092ZXJyaWRlcygkdXNlRG9jdW1lbnQpOworCisgICAgcHJp
bnQgIkdlbmVyYXRpbmcgJHVzZUdlbmVyYXRvciBiaW5kaW5ncyBjb2RlIGZvciBJREwgaW50ZXJm
YWNlIFwiIiAuICRpbnRlcmZhY2UtPnR5cGUtPm5hbWUgLiAiXCJcbiIgaWYgJHZlcmJvc2U7Cisg
ICAgJGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRlSW50ZXJmYWNlKCRpbnRlcmZhY2UsICRkZWZpbmVz
LCAkdXNlRG9jdW1lbnQtPmVudW1lcmF0aW9ucywgJHVzZURvY3VtZW50LT5kaWN0aW9uYXJpZXMp
OworICAgICRjb2RlR2VuZXJhdG9yLT5Xcml0ZURhdGEoJGludGVyZmFjZSwgJHVzZU91dHB1dERp
ciwgJHVzZU91dHB1dEhlYWRlcnNEaXIpOworfQorCitzdWIgUHJvY2Vzc0NhbGxiYWNrRnVuY3Rp
b25zCit7CisgICAgbXkgKCRvYmplY3QsICR1c2VEb2N1bWVudCwgJGRlZmluZXMsICRjb2RlR2Vu
ZXJhdG9yKSA9IEBfOworCisgICAgZGllICJNdWx0aXBsZSBzdGFuZGFsb25lIGNhbGxiYWNrIGZ1
bmN0aW9ucyBwZXIgZG9jdW1lbnQgYXJlIG5vdCBzdXBwb3J0ZWQiIGlmIEB7JHVzZURvY3VtZW50
LT5jYWxsYmFja0Z1bmN0aW9uc30gPiAxOworICAgIG15ICRjYWxsYmFja0Z1bmN0aW9uID0gJHVz
ZURvY3VtZW50LT5jYWxsYmFja0Z1bmN0aW9ucy0+WzBdOworCisgICAgJG9iamVjdC0+UHJvY2Vz
c0RpY3Rpb25hcnlBbmRFbnVtZXJhdGlvbkltcGxlbWVudGVkQXNPdmVycmlkZXMoJHVzZURvY3Vt
ZW50KTsKKworICAgIHByaW50ICJHZW5lcmF0aW5nICR1c2VHZW5lcmF0b3IgYmluZGluZ3MgY29k
ZSBmb3IgSURMIGNhbGxiYWNrIGZ1bmN0aW9uIFwiIiAuICRjYWxsYmFja0Z1bmN0aW9uLT50eXBl
LT5uYW1lIC4gIlwiXG4iIGlmICR2ZXJib3NlOworICAgICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0
ZUNhbGxiYWNrRnVuY3Rpb24oJGNhbGxiYWNrRnVuY3Rpb24sICR1c2VEb2N1bWVudC0+ZW51bWVy
YXRpb25zLCAkdXNlRG9jdW1lbnQtPmRpY3Rpb25hcmllcyk7CisgICAgJGNvZGVHZW5lcmF0b3It
PldyaXRlRGF0YSgkY2FsbGJhY2tGdW5jdGlvbiwgJHVzZU91dHB1dERpciwgJHVzZU91dHB1dEhl
YWRlcnNEaXIpOworfQorCitzdWIgUHJvY2Vzc0RpY3Rpb25hcmllcworeworICAgIG15ICgkb2Jq
ZWN0LCAkdXNlRG9jdW1lbnQsICRkZWZpbmVzLCAkY29kZUdlbmVyYXRvcikgPSBAXzsKKworICAg
IG15ICRkaWN0aW9uYXJ5OworICAgIG15ICRvdGhlckRpY3Rpb25hcmllczsKKyAgICBpZiAoQHsk
dXNlRG9jdW1lbnQtPmRpY3Rpb25hcmllc30gPT0gMSkgeworICAgICAgICAkZGljdGlvbmFyeSA9
ICR1c2VEb2N1bWVudC0+ZGljdGlvbmFyaWVzLT5bMF07CisgICAgfSBlbHNlIHsKKyAgICAgICAg
bXkgJHByaW1hcnlEaWN0aW9uYXJ5TmFtZSA9IGZpbGVwYXJzZSgkdGFyZ2V0SWRsRmlsZVBhdGgs
ICIuaWRsIik7CisgICAgICAgIGZvcmVhY2ggbXkgJGNhbmRpZGF0ZSAoQHskdXNlRG9jdW1lbnQt
PmRpY3Rpb25hcmllc30pIHsKKyAgICAgICAgICAgIGlmICgkY2FuZGlkYXRlLT50eXBlLT5uYW1l
IGVxICRwcmltYXJ5RGljdGlvbmFyeU5hbWUpIHsKKyAgICAgICAgICAgICAgICAkZGljdGlvbmFy
eSA9ICRjYW5kaWRhdGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHB1
c2goQCRvdGhlckRpY3Rpb25hcmllcywgJGNhbmRpZGF0ZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgZGllICJNdWx0aXBsZSBkaWN0aW9uYXJpZXMgcGVyIGRvY3VtZW50IGFy
ZSBvbmx5IHN1cHBvcnRlZCBpZiBvbmUgbWF0Y2hlcyB0aGUgZmlsZW5hbWUiIHVubGVzcyAkZGlj
dGlvbmFyeTsKKyAgICB9CisKKyAgICAkb2JqZWN0LT5Qcm9jZXNzRGljdGlvbmFyeVN1cHBsZW1l
bnRhbERlcGVuZGVuY2llcygkZGljdGlvbmFyeSwgJHVzZURvY3VtZW50KTsKKyAgICAkb2JqZWN0
LT5Qcm9jZXNzRGljdGlvbmFyeUFuZEVudW1lcmF0aW9uSW1wbGVtZW50ZWRBc092ZXJyaWRlcygk
dXNlRG9jdW1lbnQpOworICAgIAorICAgIHByaW50ICJHZW5lcmF0aW5nICR1c2VHZW5lcmF0b3Ig
YmluZGluZ3MgY29kZSBmb3IgSURMIGRpY3Rpb25hcnkgXCIiIC4gJGRpY3Rpb25hcnktPnR5cGUt
Pm5hbWUgLiAiXCJcbiIgaWYgJHZlcmJvc2U7CisgICAgJGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRl
RGljdGlvbmFyeSgkZGljdGlvbmFyeSwgJHVzZURvY3VtZW50LT5lbnVtZXJhdGlvbnMsICRvdGhl
ckRpY3Rpb25hcmllcyk7CisgICAgJGNvZGVHZW5lcmF0b3ItPldyaXRlRGF0YSgkZGljdGlvbmFy
eSwgJHVzZU91dHB1dERpciwgJHVzZU91dHB1dEhlYWRlcnNEaXIpOworfQorCitzdWIgUHJvY2Vz
c0VudW1lcmF0aW9ucworeworICAgIG15ICgkb2JqZWN0LCAkdXNlRG9jdW1lbnQsICRkZWZpbmVz
LCAkY29kZUdlbmVyYXRvcikgPSBAXzsKKworICAgIGRpZSAiTXVsdGlwbGUgc3RhbmRhbG9uZSBl
bnVtZXJhdGlvbnMgcGVyIGRvY3VtZW50IGFyZSBub3Qgc3VwcG9ydGVkIiBpZiBAeyR1c2VEb2N1
bWVudC0+ZW51bWVyYXRpb25zfSA+IDE7CisgICAgbXkgJGVudW1lcmF0aW9uID0gJHVzZURvY3Vt
ZW50LT5lbnVtZXJhdGlvbnMtPlswXTsKKworICAgICRvYmplY3QtPlByb2Nlc3NEaWN0aW9uYXJ5
QW5kRW51bWVyYXRpb25JbXBsZW1lbnRlZEFzT3ZlcnJpZGVzKCR1c2VEb2N1bWVudCk7CisKKyAg
ICBwcmludCAiR2VuZXJhdGluZyAkdXNlR2VuZXJhdG9yIGJpbmRpbmdzIGNvZGUgZm9yIElETCBl
bnVtZXJhdGlvbiBcIiIgLiAkZW51bWVyYXRpb24tPnR5cGUtPm5hbWUgLiAiXCJcbiIgaWYgJHZl
cmJvc2U7CisgICAgJGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRlRW51bWVyYXRpb24oJGVudW1lcmF0
aW9uKTsKKyAgICAkY29kZUdlbmVyYXRvci0+V3JpdGVEYXRhKCRlbnVtZXJhdGlvbiwgJHVzZU91
dHB1dERpciwgJHVzZU91dHB1dEhlYWRlcnNEaXIpOwogfQogCiBzdWIgTWVyZ2VFeHRlbmRlZEF0
dHJpYnV0ZXNGcm9tU3VwcGxlbWVudGFsCiB7Ci0gICAgbXkgKCRvYmplY3QsICRzdXBwbGVtZW50
YWwsICRwcm9wZXJ0eSwgJGNvbnRleHQpID0gQF87CisgICAgbXkgKCRvYmplY3QsICRzdXBwbGVt
ZW50YWxFeHRlbmRlZEF0dHJpYnV0ZXMsICRwcm9wZXJ0eSwgJGNvbnRleHQpID0gQF87CiAKLSAg
ICBmb3JlYWNoIG15ICRleHRlbmRlZEF0dHJpYnV0ZU5hbWUgKGtleXMgJXskc3VwcGxlbWVudGFs
LT5leHRlbmRlZEF0dHJpYnV0ZXN9KSB7CisgICAgZm9yZWFjaCBteSAkZXh0ZW5kZWRBdHRyaWJ1
dGVOYW1lIChrZXlzICV7JHN1cHBsZW1lbnRhbEV4dGVuZGVkQXR0cmlidXRlc30pIHsKICAgICAg
ICAgbXkgJGlzQWxsb3dlZCA9IDA7CiAgICAgICAgIGZvciBteSAkY29udGV4dEFsbG93ZWQgKEB7
JGlkbEF0dHJpYnV0ZXMtPnskZXh0ZW5kZWRBdHRyaWJ1dGVOYW1lfS0+eyJjb250ZXh0c0FsbG93
ZWQifX0pIHsKICAgICAgICAgICAgIGlmICgkY29udGV4dEFsbG93ZWQgZXEgJGNvbnRleHQpIHsK
QEAgLTI2NSw3ICszMDIsNyBAQCBzdWIgTWVyZ2VFeHRlbmRlZEF0dHJpYnV0ZXNGcm9tU3VwcGxl
bWVuCiAgICAgICAgICMgYmUgZml4ZWQuIFVsdGltYXRlbHksIHRoaXMgd2lsbCBwcm9iYWJseSBt
ZWFuIGVpdGhlciByZW1vdmluZyBzdXBwb3J0IGZvciBkaXNqdW5jdGlvbnMgZm9yIENvbmRpdGlv
bmFsLAogICAgICAgICAjIHdoaWNoIGlzIG5vdCB1c2VkIG91dHNpZGUgb2YgdGhlIHRlc3RzLCBv
ciBhZGRpbmcgc3VwcG9ydCBmb3IgcGFyZW50aGVzZXMgdG8gZGlzYW1iaWd1YXRlLgogICAgICAg
ICBpZiAoJGV4dGVuZGVkQXR0cmlidXRlTmFtZSBlcSAiQ29uZGl0aW9uYWwiICYmICRjb250ZXh0
IG5lICJvcGVyYXRpb24iKSB7Ci0gICAgICAgICAgICAkcHJvcGVydHktPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyRleHRlbmRlZEF0dHJpYnV0ZU5hbWV9ID0gJHN1cHBsZW1lbnRhbC0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57JGV4dGVuZGVkQXR0cmlidXRlTmFtZX07CisgICAgICAgICAgICAkcHJvcGVy
dHktPmV4dGVuZGVkQXR0cmlidXRlcy0+eyRleHRlbmRlZEF0dHJpYnV0ZU5hbWV9ID0gJHN1cHBs
ZW1lbnRhbEV4dGVuZGVkQXR0cmlidXRlcy0+eyRleHRlbmRlZEF0dHJpYnV0ZU5hbWV9OwogICAg
ICAgICAgICAgbmV4dDsKICAgICAgICAgfQogCkBAIC0yNzQsNDMgKzMxMSw1OSBAQCBzdWIgTWVy
Z2VFeHRlbmRlZEF0dHJpYnV0ZXNGcm9tU3VwcGxlbWVuCiAgICAgICAgICAgICBpZiAoISRpZGxB
dHRyaWJ1dGVzLT57JGV4dGVuZGVkQXR0cmlidXRlTmFtZX0tPnsic3VwcG9ydHNDb25qdW5jdGlv
biJ9KSB7CiAgICAgICAgICAgICAgICAgZGllICJEdXBsaWNhdGUgbm9uLW1lcmdlYWJsZSBleHRl
bmRlZCBhdHRyaWJ1dGUgKCRleHRlbmRlZEF0dHJpYnV0ZU5hbWUpIGZvdW5kIHdoZW4gbWVyZ2lu
ZyBleHRlbmRlZCBhdHRyaWJ1dGVzIGZvciAke3Byb3BlcnR5LT5uYW1lfSI7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAkcHJvcGVydHktPmV4dGVuZGVkQXR0cmlidXRlcy0+eyRleHRlbmRl
ZEF0dHJpYnV0ZU5hbWV9ID0gJHByb3BlcnR5LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnskZXh0ZW5k
ZWRBdHRyaWJ1dGVOYW1lfSAuICImIiAuICRzdXBwbGVtZW50YWwtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyRleHRlbmRlZEF0dHJpYnV0ZU5hbWV9OworICAgICAgICAgICAgJHByb3BlcnR5LT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnskZXh0ZW5kZWRBdHRyaWJ1dGVOYW1lfSA9ICRwcm9wZXJ0eS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57JGV4dGVuZGVkQXR0cmlidXRlTmFtZX0gLiAiJiIgLiAkc3VwcGxl
bWVudGFsRXh0ZW5kZWRBdHRyaWJ1dGVzLT57JGV4dGVuZGVkQXR0cmlidXRlTmFtZX07CiAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAkcHJvcGVydHktPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyRleHRlbmRlZEF0dHJpYnV0ZU5hbWV9ID0gJHN1cHBsZW1lbnRhbC0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57JGV4dGVuZGVkQXR0cmlidXRlTmFtZX07CisgICAgICAgICAgICAkcHJvcGVydHktPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyRleHRlbmRlZEF0dHJpYnV0ZU5hbWV9ID0gJHN1cHBsZW1lbnRh
bEV4dGVuZGVkQXR0cmlidXRlcy0+eyRleHRlbmRlZEF0dHJpYnV0ZU5hbWV9OwogICAgICAgICB9
CiAgICAgfQogfQogCiBzdWIgSXNWYWxpZFN1cHBsZW1lbnRhbEludGVyZmFjZQogewotICAgIG15
ICgkb2JqZWN0LCAkdGFyZ2V0RG9jdW1lbnQsICRzdXBwbGVtZW50YWxJbnRlcmZhY2UsICR0YXJn
ZXRJbnRlcmZhY2VOYW1lKSA9IEBfOworICAgIG15ICgkb2JqZWN0LCAkc3VwcGxlbWVudGFsSW50
ZXJmYWNlLCAkdGFyZ2V0SW50ZXJmYWNlLCAkaW5jbHVkZXNNYXApID0gQF87CiAKLSAgICByZXR1
cm4gMSBpZiAkc3VwcGxlbWVudGFsSW50ZXJmYWNlLT5pc1BhcnRpYWwgJiYgJHN1cHBsZW1lbnRh
bEludGVyZmFjZS0+dHlwZS0+bmFtZSBlcSAkdGFyZ2V0SW50ZXJmYWNlTmFtZTsKLSAgICByZXR1
cm4gMSBpZiAkc3VwcGxlbWVudGFsSW50ZXJmYWNlLT5pc01peGluOworICAgIHJldHVybiAxIGlm
ICRzdXBwbGVtZW50YWxJbnRlcmZhY2UtPmlzUGFydGlhbCAmJiAkc3VwcGxlbWVudGFsSW50ZXJm
YWNlLT50eXBlLT5uYW1lIGVxICR0YXJnZXRJbnRlcmZhY2UtPnR5cGUtPm5hbWU7CisgICAgcmV0
dXJuIDEgaWYgJHN1cHBsZW1lbnRhbEludGVyZmFjZS0+aXNNaXhpbiAmJiAkaW5jbHVkZXNNYXAt
Pnskc3VwcGxlbWVudGFsSW50ZXJmYWNlLT50eXBlLT5uYW1lfTsKICAgICByZXR1cm4gMDsKIH0K
IAogc3ViIElzVmFsaWRTdXBwbGVtZW50YWxEaWN0aW9uYXJ5CiB7Ci0gICAgbXkgKCRvYmplY3Qs
ICR0YXJnZXREb2N1bWVudCwgJHN1cHBsZW1lbnRhbERpY3Rpb25hcnksICR0YXJnZXRJbnRlcmZh
Y2VOYW1lKSA9IEBfOworICAgIG15ICgkb2JqZWN0LCAkc3VwcGxlbWVudGFsRGljdGlvbmFyeSwg
JHRhcmdldERpY3Rpb25hcnkpID0gQF87CiAKLSAgICByZXR1cm4gMSBpZiAkc3VwcGxlbWVudGFs
RGljdGlvbmFyeS0+aXNQYXJ0aWFsICYmICRzdXBwbGVtZW50YWxEaWN0aW9uYXJ5LT50eXBlLT5u
YW1lIGVxICR0YXJnZXRJbnRlcmZhY2VOYW1lOworICAgIHJldHVybiAxIGlmICRzdXBwbGVtZW50
YWxEaWN0aW9uYXJ5LT5pc1BhcnRpYWwgJiYgJHN1cHBsZW1lbnRhbERpY3Rpb25hcnktPnR5cGUt
Pm5hbWUgZXEgJHRhcmdldERpY3Rpb25hcnktPnR5cGUtPm5hbWU7CiAgICAgcmV0dXJuIDA7CiB9
CiAKLXN1YiBQcm9jZXNzU3VwcGxlbWVudGFsRGVwZW5kZW5jaWVzCitzdWIgUHJvY2Vzc0ludGVy
ZmFjZVN1cHBsZW1lbnRhbERlcGVuZGVuY2llcwogewotICAgIG15ICgkb2JqZWN0LCAkdGFyZ2V0
RG9jdW1lbnQpID0gQF87Ci0gICAgbXkgJHRhcmdldEZpbGVOYW1lID0gZmlsZXBhcnNlKCR0YXJn
ZXREb2N1bWVudC0+ZmlsZU5hbWUpOwotICAgIG15ICR0YXJnZXRJbnRlcmZhY2VOYW1lID0gZmls
ZXBhcnNlKCR0YXJnZXRGaWxlTmFtZSwgIi5pZGwiKTsKKyAgICBteSAoJG9iamVjdCwgJHRhcmdl
dEludGVyZmFjZSwgJHRhcmdldERvY3VtZW50KSA9IEBfOwogCi0gICAgaWYgKCEkc3VwcGxlbWVu
dGFsRGVwZW5kZW5jaWVzKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgcmV0dXJuIHVu
bGVzcyAkc3VwcGxlbWVudGFsRGVwZW5kZW5jaWVzOworCisgICAgbXkgJHRhcmdldEZpbGVOYW1l
ID0gZmlsZXBhcnNlKCR0YXJnZXREb2N1bWVudC0+ZmlsZU5hbWUpOwogCiAgICAgIyBGSVhNRTog
QWRkIHN1cHBvcnQgZm9yIHByb2Nlc3NpbmcgcmVjdXJzaXZlIHN1cHBsZW1lbnRhbCBkZXBlbmRl
bmNpZXMKICAgICAjIHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgcGFydGlhbCBpbnRlcmZhY2UgbWl4
aW5zLgogCisgICAgIyBGSVhNRTogQ3VycmVudGx5LCB3ZSByZXF1aXJlIGFsbCB0aGUgaW5jbHVk
ZXMgc3RhdGVtZW50cyB0byBiZSBpbiB0aGUKKyAgICAjIHNhbWUgZmlsZSBhcyB0aGUgaW50ZXJm
YWNlIHRoZXkgYXJlIGJlaW5nIG1peGVkIGludG8sIGJ1dCB0aGF0IHJlc3RyaWN0aW9uCisgICAg
IyBpcyBhcnRpZmljaWFsIGFuZCB3ZSBjb3VsZCBhZGQgc3VwcG9ydCBmb3IgaW5jbHVkZXMgc3Rh
dGVtZW50cyBlbHNld2hlcmUuCisgICAgbXkgJWluY2x1ZGVzTWFwID0gKCk7CisgICAgZm9yZWFj
aCBteSAkaW5jbHVkZSAoQHskdGFyZ2V0RG9jdW1lbnQtPmluY2x1ZGVzfSkgeworICAgICAgICBp
ZiAoJGluY2x1ZGUtPmludGVyZmFjZUlkZW50aWZpZXIgZXEgJHRhcmdldEludGVyZmFjZS0+dHlw
ZS0+bmFtZSkgeworICAgICAgICAgICAgdW5sZXNzIChncmVwIHsgZmlsZXBhcnNlKCRfLCAiLmlk
bCIpIGVxICRpbmNsdWRlLT5taXhpbklkZW50aWZpZXIgfSBAeyRzdXBwbGVtZW50YWxEZXBlbmRl
bmNpZXMtPnskdGFyZ2V0RmlsZU5hbWV9fSkgeworICAgICAgICAgICAgICAgIGRpZSAiaW5jbHVk
ZWQgaW50ZXJmYWNlIG1peGluICIgLiAkaW5jbHVkZS0+bWl4aW5JZGVudGlmaWVyIC4gIiBub3Qg
aW4gc3VwcGxlbWVudGFsIGRlcGVuZGVuY2llcy4iCisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgICRpbmNsdWRlc01hcHskaW5jbHVkZS0+bWl4aW5JZGVudGlmaWVyfSA9
ICRpbmNsdWRlOworICAgICAgICB9CisgICAgfQorCisgICAgbXkgJGV4cG9zZWRBdHRyaWJ1dGUg
PSAkdGFyZ2V0SW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRXhwb3NlZCJ9IHx8ICJX
aW5kb3ciOworICAgICRleHBvc2VkQXR0cmlidXRlID0gc3Vic3RyKCRleHBvc2VkQXR0cmlidXRl
LCAxLCAtMSkgaWYgc3Vic3RyKCRleHBvc2VkQXR0cmlidXRlLCAwLCAxKSBlcSAiKCI7CisgICAg
bXkgQHRhcmdldEdsb2JhbENvbnRleHRzID0gc3BsaXQoIiwiLCAkZXhwb3NlZEF0dHJpYnV0ZSk7
CisKICAgICBmb3JlYWNoIG15ICRpZGxGaWxlIChAeyRzdXBwbGVtZW50YWxEZXBlbmRlbmNpZXMt
PnskdGFyZ2V0RmlsZU5hbWV9fSkgewogICAgICAgICBuZXh0IGlmIGZpbGVwYXJzZSgkaWRsRmls
ZSkgZXEgJHRhcmdldEZpbGVOYW1lOwogCkBAIC0zMTksODcgKzM3Miw5OSBAQCBzdWIgUHJvY2Vz
c1N1cHBsZW1lbnRhbERlcGVuZGVuY2llcwogICAgICAgICBteSAkZG9jdW1lbnQgPSAkcGFyc2Vy
LT5QYXJzZSgkaWRsRmlsZSwgJGRlZmluZXMsICRwcmVwcm9jZXNzb3IsICRpZGxBdHRyaWJ1dGVz
KTsKIAogICAgICAgICBmb3JlYWNoIG15ICRpbnRlcmZhY2UgKEB7JGRvY3VtZW50LT5pbnRlcmZh
Y2VzfSkgewotICAgICAgICAgICAgbmV4dCB1bmxlc3MgJG9iamVjdC0+SXNWYWxpZFN1cHBsZW1l
bnRhbEludGVyZmFjZSgkdGFyZ2V0RG9jdW1lbnQsICRpbnRlcmZhY2UsICR0YXJnZXRJbnRlcmZh
Y2VOYW1lKTsKKyAgICAgICAgICAgIG5leHQgdW5sZXNzICRvYmplY3QtPklzVmFsaWRTdXBwbGVt
ZW50YWxJbnRlcmZhY2UoJGludGVyZmFjZSwgJHRhcmdldEludGVyZmFjZSwgXCVpbmNsdWRlc01h
cCk7CiAKLSAgICAgICAgICAgIG15ICR0YXJnZXREYXRhTm9kZTsKLSAgICAgICAgICAgIG15IEB0
YXJnZXRHbG9iYWxDb250ZXh0czsKLSAgICAgICAgICAgIGZvcmVhY2ggbXkgJGludGVyZmFjZSAo
QHskdGFyZ2V0RG9jdW1lbnQtPmludGVyZmFjZXN9KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCRp
bnRlcmZhY2UtPnR5cGUtPm5hbWUgZXEgJHRhcmdldEludGVyZmFjZU5hbWUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgJHRhcmdldERhdGFOb2RlID0gJGludGVyZmFjZTsKLSAgICAgICAgICAgICAg
ICAgICAgbXkgJGV4cG9zZWRBdHRyaWJ1dGUgPSAkdGFyZ2V0RGF0YU5vZGUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJFeHBvc2VkIn0gfHwgIldpbmRvdyI7Ci0gICAgICAgICAgICAgICAgICAgICRl
eHBvc2VkQXR0cmlidXRlID0gc3Vic3RyKCRleHBvc2VkQXR0cmlidXRlLCAxLCAtMSkgaWYgc3Vi
c3RyKCRleHBvc2VkQXR0cmlidXRlLCAwLCAxKSBlcSAiKCI7Ci0gICAgICAgICAgICAgICAgICAg
IEB0YXJnZXRHbG9iYWxDb250ZXh0cyA9IHNwbGl0KCIsIiwgJGV4cG9zZWRBdHRyaWJ1dGUpOwot
ICAgICAgICAgICAgICAgICAgICBsYXN0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGRpZSAiTm90IGZvdW5kIGFuIGludGVyZmFjZSAke3RhcmdldEludGVy
ZmFjZU5hbWV9IGluICR7dGFyZ2V0SW50ZXJmYWNlTmFtZX0uaWRsLiIgdW5sZXNzIGRlZmluZWQg
JHRhcmdldERhdGFOb2RlOwotCi0gICAgICAgICAgICAjIFN1cHBvcnQgZm9yIGF0dHJpYnV0ZXMg
b2YgcGFydGlhbCBpbnRlcmZhY2VzLgorICAgICAgICAgICAgIyBTdXBwb3J0IGZvciBhdHRyaWJ1
dGVzIGZyb20gc3VwcGxlbWVudGFsIGludGVyZmFjZXMuCiAgICAgICAgICAgICBmb3JlYWNoIG15
ICRhdHRyaWJ1dGUgKEB7JGludGVyZmFjZS0+YXR0cmlidXRlc30pIHsKICAgICAgICAgICAgICAg
ICBuZXh0IHVubGVzcyBzaG91bGRQcm9wZXJ0eUJlRXhwb3NlZCgkYXR0cmlidXRlLCBcQHRhcmdl
dEdsb2JhbENvbnRleHRzKTsKIAotICAgICAgICAgICAgICAgICMgUmVjb3JkIHRoYXQgdGhpcyBh
dHRyaWJ1dGUgaXMgaW1wbGVtZW50ZWQgYnkgJGludGVyZmFjZU5hbWUuCi0gICAgICAgICAgICAg
ICAgJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxlbWVudGVkQnkifSA9ICRp
bnRlcmZhY2VOYW1lIGlmICRpbnRlcmZhY2UtPmlzUGFydGlhbCAmJiAhJGF0dHJpYnV0ZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57UmVmbGVjdH07CisgICAgICAgICAgICAgICAgaWYgKCRpbnRlcmZh
Y2UtPmlzUGFydGlhbCkgeworICAgICAgICAgICAgICAgICAgICAkYXR0cmlidXRlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50ZWRCeSJ9ID0gJGludGVyZmFjZU5hbWUgaWYgISRhdHRy
aWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e1JlZmxlY3R9OworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5pc01peGluKSB7CisgICAgICAgICAg
ICAgICAgICAgICMgQWRkIGluY2x1ZGVzIHN0YXRlbWVudCBzcGVjaWZpYyBleHRlbmRlZCBhdHRy
aWJ1dGVzIHRvIGVhY2ggYXR0cmlidXRlLgorICAgICAgICAgICAgICAgICAgICAkb2JqZWN0LT5N
ZXJnZUV4dGVuZGVkQXR0cmlidXRlc0Zyb21TdXBwbGVtZW50YWwoJGluY2x1ZGVzTWFweyRpbnRl
cmZhY2UtPnR5cGUtPm5hbWV9LT5leHRlbmRlZEF0dHJpYnV0ZXMsICRhdHRyaWJ1dGUsICJhdHRy
aWJ1dGUiKTsKKyAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAjIEFkZCBpbnRl
cmZhY2Utd2lkZSBleHRlbmRlZCBhdHRyaWJ1dGVzIHRvIGVhY2ggYXR0cmlidXRlLgotICAgICAg
ICAgICAgICAgICRvYmplY3QtPk1lcmdlRXh0ZW5kZWRBdHRyaWJ1dGVzRnJvbVN1cHBsZW1lbnRh
bCgkaW50ZXJmYWNlLCAkYXR0cmlidXRlLCAiYXR0cmlidXRlIik7CisgICAgICAgICAgICAgICAg
JG9iamVjdC0+TWVyZ2VFeHRlbmRlZEF0dHJpYnV0ZXNGcm9tU3VwcGxlbWVudGFsKCRpbnRlcmZh
Y2UtPmV4dGVuZGVkQXR0cmlidXRlcywgJGF0dHJpYnV0ZSwgImF0dHJpYnV0ZSIpOwogCi0gICAg
ICAgICAgICAgICAgcHVzaChAeyR0YXJnZXREYXRhTm9kZS0+YXR0cmlidXRlc30sICRhdHRyaWJ1
dGUpOworICAgICAgICAgICAgICAgIHB1c2goQHskdGFyZ2V0SW50ZXJmYWNlLT5hdHRyaWJ1dGVz
fSwgJGF0dHJpYnV0ZSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICMgU3VwcG9ydCBm
b3IgbWV0aG9kcyBvZiBwYXJ0aWFsIGludGVyZmFjZXMuCisgICAgICAgICAgICAjIFN1cHBvcnQg
Zm9yIG9wZXJhdGlvbnMgZnJvbSBzdXBwbGVtZW50YWwgaW50ZXJmYWNlcy4KICAgICAgICAgICAg
IGZvcmVhY2ggbXkgJG9wZXJhdGlvbiAoQHskaW50ZXJmYWNlLT5vcGVyYXRpb25zfSkgewogICAg
ICAgICAgICAgICAgIG5leHQgdW5sZXNzIHNob3VsZFByb3BlcnR5QmVFeHBvc2VkKCRvcGVyYXRp
b24sIFxAdGFyZ2V0R2xvYmFsQ29udGV4dHMpOwogCi0gICAgICAgICAgICAgICAgIyBSZWNvcmQg
dGhhdCB0aGlzIG1ldGhvZCBpcyBpbXBsZW1lbnRlZCBieSAkaW50ZXJmYWNlTmFtZS4KLSAgICAg
ICAgICAgICAgICAkb3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50ZWRC
eSJ9ID0gJGludGVyZmFjZU5hbWUgaWYgJGludGVyZmFjZS0+aXNQYXJ0aWFsOwotICAgIAorICAg
ICAgICAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5pc1BhcnRpYWwpIHsKKyAgICAgICAgICAgICAg
ICAgICAgJG9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxlbWVudGVkQnkifSA9
ICRpbnRlcmZhY2VOYW1lOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlm
ICgkaW50ZXJmYWNlLT5pc01peGluKSB7CisgICAgICAgICAgICAgICAgICAgICMgQWRkIGluY2x1
ZGVzIHN0YXRlbWVudCBzcGVjaWZpYyBleHRlbmRlZCBhdHRyaWJ1dGVzIHRvIGVhY2ggb3BlcmF0
aW9uLgorICAgICAgICAgICAgICAgICAgICAkb2JqZWN0LT5NZXJnZUV4dGVuZGVkQXR0cmlidXRl
c0Zyb21TdXBwbGVtZW50YWwoJGluY2x1ZGVzTWFweyRpbnRlcmZhY2UtPnR5cGUtPm5hbWV9LT5l
eHRlbmRlZEF0dHJpYnV0ZXMsICRvcGVyYXRpb24sICJvcGVyYXRpb24iKTsKKyAgICAgICAgICAg
ICAgICB9CisKICAgICAgICAgICAgICAgICAjIEFkZCBpbnRlcmZhY2Utd2lkZSBleHRlbmRlZCBh
dHRyaWJ1dGVzIHRvIGVhY2ggb3BlcmF0aW9uLgotICAgICAgICAgICAgICAgICRvYmplY3QtPk1l
cmdlRXh0ZW5kZWRBdHRyaWJ1dGVzRnJvbVN1cHBsZW1lbnRhbCgkaW50ZXJmYWNlLCAkb3BlcmF0
aW9uLCAib3BlcmF0aW9uIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAeyR0YXJnZXREYXRhTm9k
ZS0+b3BlcmF0aW9uc30sICRvcGVyYXRpb24pOworICAgICAgICAgICAgICAgICRvYmplY3QtPk1l
cmdlRXh0ZW5kZWRBdHRyaWJ1dGVzRnJvbVN1cHBsZW1lbnRhbCgkaW50ZXJmYWNlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMsICRvcGVyYXRpb24sICJvcGVyYXRpb24iKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBwdXNoKEB7JHRhcmdldEludGVyZmFjZS0+b3BlcmF0aW9uc30sICRv
cGVyYXRpb24pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAjIFN1cHBvcnQgZm9yIGNv
bnN0YW50cyBvZiBwYXJ0aWFsIGludGVyZmFjZXMuCisgICAgICAgICAgICAjIFN1cHBvcnQgZm9y
IGNvbnN0YW50cyBmcm9tIHN1cHBsZW1lbnRhbCBpbnRlcmZhY2VzLgogICAgICAgICAgICAgZm9y
ZWFjaCBteSAkY29uc3RhbnQgKEB7JGludGVyZmFjZS0+Y29uc3RhbnRzfSkgewogICAgICAgICAg
ICAgICAgIG5leHQgdW5sZXNzIHNob3VsZFByb3BlcnR5QmVFeHBvc2VkKCRjb25zdGFudCwgXEB0
YXJnZXRHbG9iYWxDb250ZXh0cyk7CiAKLSAgICAgICAgICAgICAgICAjIFJlY29yZCB0aGF0IHRo
aXMgY29uc3RhbnQgaXMgaW1wbGVtZW50ZWQgYnkgJGludGVyZmFjZU5hbWUuCi0gICAgICAgICAg
ICAgICAgJGNvbnN0YW50LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50ZWRCeSJ9ID0g
JGludGVyZmFjZU5hbWUgaWYgJGludGVyZmFjZS0+aXNQYXJ0aWFsOworICAgICAgICAgICAgICAg
IGlmICgkaW50ZXJmYWNlLT5pc1BhcnRpYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgJGNvbnN0
YW50LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW1wbGVtZW50ZWRCeSJ9ID0gJGludGVyZmFjZU5h
bWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2Ut
PmlzTWl4aW4pIHsKKyAgICAgICAgICAgICAgICAgICAgIyBBZGQgaW5jbHVkZXMgc3RhdGVtZW50
IHNwZWNpZmljIGV4dGVuZGVkIGF0dHJpYnV0ZXMgdG8gZWFjaCBvcGVyYXRpb24uCisgICAgICAg
ICAgICAgICAgICAgICRvYmplY3QtPk1lcmdlRXh0ZW5kZWRBdHRyaWJ1dGVzRnJvbVN1cHBsZW1l
bnRhbCgkaW5jbHVkZXNNYXB7JGludGVyZmFjZS0+dHlwZS0+bmFtZX0tPmV4dGVuZGVkQXR0cmli
dXRlcywgJGNvbnN0YW50LCAiY29uc3RhbnQiKTsKKyAgICAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgICAgICAjIEFkZCBpbnRlcmZhY2Utd2lkZSBleHRlbmRlZCBhdHRyaWJ1dGVzIHRvIGVh
Y2ggY29uc3RhbnQuCi0gICAgICAgICAgICAgICAgJG9iamVjdC0+TWVyZ2VFeHRlbmRlZEF0dHJp
YnV0ZXNGcm9tU3VwcGxlbWVudGFsKCRpbnRlcmZhY2UsICRjb25zdGFudCwgImNvbnN0YW50Iik7
CisgICAgICAgICAgICAgICAgJG9iamVjdC0+TWVyZ2VFeHRlbmRlZEF0dHJpYnV0ZXNGcm9tU3Vw
cGxlbWVudGFsKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcywgJGNvbnN0YW50LCAiY29u
c3RhbnQiKTsKIAotICAgICAgICAgICAgICAgIHB1c2goQHskdGFyZ2V0RGF0YU5vZGUtPmNvbnN0
YW50c30sICRjb25zdGFudCk7CisgICAgICAgICAgICAgICAgcHVzaChAeyR0YXJnZXRJbnRlcmZh
Y2UtPmNvbnN0YW50c30sICRjb25zdGFudCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAg
ICB9Cit9CiAKLSAgICAgICAgZm9yZWFjaCBteSAkZGljdGlvbmFyeSAoQHskZG9jdW1lbnQtPmRp
Y3Rpb25hcmllc30pIHsKLSAgICAgICAgICAgIG5leHQgdW5sZXNzICRvYmplY3QtPklzVmFsaWRT
dXBwbGVtZW50YWxEaWN0aW9uYXJ5KCR0YXJnZXREb2N1bWVudCwgJGRpY3Rpb25hcnksICR0YXJn
ZXRJbnRlcmZhY2VOYW1lKTsKK3N1YiBQcm9jZXNzRGljdGlvbmFyeVN1cHBsZW1lbnRhbERlcGVu
ZGVuY2llcworeworICAgIG15ICgkb2JqZWN0LCAkdGFyZ2V0RGljdGlvbmFyeSwgJHRhcmdldERv
Y3VtZW50KSA9IEBfOwogCi0gICAgICAgICAgICBteSAkdGFyZ2V0RGF0YU5vZGU7Ci0gICAgICAg
ICAgICBteSBAdGFyZ2V0R2xvYmFsQ29udGV4dHM7Ci0gICAgICAgICAgICBmb3JlYWNoIG15ICRk
aWN0aW9uYXJ5IChAeyR0YXJnZXREb2N1bWVudC0+ZGljdGlvbmFyaWVzfSkgewotICAgICAgICAg
ICAgICAgIGlmICgkZGljdGlvbmFyeS0+dHlwZS0+bmFtZSBlcSAkdGFyZ2V0SW50ZXJmYWNlTmFt
ZSkgewotICAgICAgICAgICAgICAgICAgICAkdGFyZ2V0RGF0YU5vZGUgPSAkZGljdGlvbmFyeTsK
LSAgICAgICAgICAgICAgICAgICAgbXkgJGV4cG9zZWRBdHRyaWJ1dGUgPSAkdGFyZ2V0RGF0YU5v
ZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJFeHBvc2VkIn0gfHwgIldpbmRvdyI7Ci0gICAgICAg
ICAgICAgICAgICAgICRleHBvc2VkQXR0cmlidXRlID0gc3Vic3RyKCRleHBvc2VkQXR0cmlidXRl
LCAxLCAtMSkgaWYgc3Vic3RyKCRleHBvc2VkQXR0cmlidXRlLCAwLCAxKSBlcSAiKCI7Ci0gICAg
ICAgICAgICAgICAgICAgIEB0YXJnZXRHbG9iYWxDb250ZXh0cyA9IHNwbGl0KCIsIiwgJGV4cG9z
ZWRBdHRyaWJ1dGUpOwotICAgICAgICAgICAgICAgICAgICBsYXN0OwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRpZSAiQ291bGQgbm90IGZpbmQgZGljdGlv
bmFyeSAke3RhcmdldEludGVyZmFjZU5hbWV9IGluICR7dGFyZ2V0SW50ZXJmYWNlTmFtZX0uaWRs
LiIgdW5sZXNzIGRlZmluZWQgJHRhcmdldERhdGFOb2RlOworICAgIHJldHVybiB1bmxlc3MgJHN1
cHBsZW1lbnRhbERlcGVuZGVuY2llczsKIAotICAgICAgICAgICAgIyBTdXBwb3J0IGZvciBtZW1i
ZXJzIG9mIHBhcnRpYWwgZGljdGlvbmFyaWVzCisgICAgbXkgJGV4cG9zZWRBdHRyaWJ1dGUgPSAk
dGFyZ2V0RGljdGlvbmFyeS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkV4cG9zZWQifSB8fCAiV2lu
ZG93IjsKKyAgICAkZXhwb3NlZEF0dHJpYnV0ZSA9IHN1YnN0cigkZXhwb3NlZEF0dHJpYnV0ZSwg
MSwgLTEpIGlmIHN1YnN0cigkZXhwb3NlZEF0dHJpYnV0ZSwgMCwgMSkgZXEgIigiOworICAgIG15
IEB0YXJnZXRHbG9iYWxDb250ZXh0cyA9IHNwbGl0KCIsIiwgJGV4cG9zZWRBdHRyaWJ1dGUpOwor
CisgICAgbXkgJHRhcmdldEZpbGVOYW1lID0gZmlsZXBhcnNlKCR0YXJnZXREb2N1bWVudC0+Zmls
ZU5hbWUpOworICAgIGZvcmVhY2ggbXkgJGlkbEZpbGUgKEB7JHN1cHBsZW1lbnRhbERlcGVuZGVu
Y2llcy0+eyR0YXJnZXRGaWxlTmFtZX19KSB7CisgICAgICAgIG5leHQgaWYgZmlsZXBhcnNlKCRp
ZGxGaWxlKSBlcSAkdGFyZ2V0RmlsZU5hbWU7CisKKyAgICAgICAgbXkgJGRpY3Rpb25hcnlOYW1l
ID0gZmlsZXBhcnNlKCRpZGxGaWxlLCAiLmlkbCIpOworICAgICAgICBteSAkcGFyc2VyID0gSURM
UGFyc2VyLT5uZXcoISR2ZXJib3NlKTsKKyAgICAgICAgbXkgJGRvY3VtZW50ID0gJHBhcnNlci0+
UGFyc2UoJGlkbEZpbGUsICRkZWZpbmVzLCAkcHJlcHJvY2Vzc29yLCAkaWRsQXR0cmlidXRlcyk7
CisKKyAgICAgICAgZm9yZWFjaCBteSAkZGljdGlvbmFyeSAoQHskZG9jdW1lbnQtPmRpY3Rpb25h
cmllc30pIHsKKyAgICAgICAgICAgIG5leHQgdW5sZXNzICRvYmplY3QtPklzVmFsaWRTdXBwbGVt
ZW50YWxEaWN0aW9uYXJ5KCRkaWN0aW9uYXJ5LCAkdGFyZ2V0RGljdGlvbmFyeSk7CisKKyAgICAg
ICAgICAgICMgU3VwcG9ydCBmb3IgbWVtYmVycyBvZiBwYXJ0aWFsIGRpY3Rpb25hcmllcy4KICAg
ICAgICAgICAgIGZvcmVhY2ggbXkgJG1lbWJlciAoQHskZGljdGlvbmFyeS0+bWVtYmVyc30pIHsK
ICAgICAgICAgICAgICAgICBuZXh0IHVubGVzcyBzaG91bGRQcm9wZXJ0eUJlRXhwb3NlZCgkbWVt
YmVyLCBcQHRhcmdldEdsb2JhbENvbnRleHRzKTsKIAotICAgICAgICAgICAgICAgICMgUmVjb3Jk
IHRoYXQgdGhpcyBtZW1iZXIgaXMgaW1wbGVtZW50ZWQgYnkgJGludGVyZmFjZU5hbWUuCi0gICAg
ICAgICAgICAgICAgJG1lbWJlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxlbWVudGVkQnki
fSA9ICRpbnRlcmZhY2VOYW1lOworICAgICAgICAgICAgICAgICRtZW1iZXItPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJJbXBsZW1lbnRlZEJ5In0gPSAkZGljdGlvbmFyeU5hbWU7CiAKICAgICAgICAg
ICAgICAgICAjIEFkZCBpbnRlcmZhY2Utd2lkZSBleHRlbmRlZCBhdHRyaWJ1dGVzIHRvIGVhY2gg
bWVtYmVyLgotICAgICAgICAgICAgICAgICRvYmplY3QtPk1lcmdlRXh0ZW5kZWRBdHRyaWJ1dGVz
RnJvbVN1cHBsZW1lbnRhbCgkZGljdGlvbmFyeSwgJG1lbWJlciwgImRpY3Rpb25hcnktbWVtYmVy
Iik7CisgICAgICAgICAgICAgICAgJG9iamVjdC0+TWVyZ2VFeHRlbmRlZEF0dHJpYnV0ZXNGcm9t
U3VwcGxlbWVudGFsKCRkaWN0aW9uYXJ5LT5leHRlbmRlZEF0dHJpYnV0ZXMsICRtZW1iZXIsICJk
aWN0aW9uYXJ5LW1lbWJlciIpOwogCi0gICAgICAgICAgICAgICAgcHVzaChAeyR0YXJnZXREYXRh
Tm9kZS0+bWVtYmVyc30sICRtZW1iZXIpOworICAgICAgICAgICAgICAgIHB1c2goQHskdGFyZ2V0
RGljdGlvbmFyeS0+bWVtYmVyc30sICRtZW1iZXIpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQpAQCAtNzM0LDE1ICs3OTksMTUgQEAgc3ViIEdldERpY3Rpb25hcnlCeVR5cGUKICAg
ICAgICAgbXkgJHBhcnNlciA9IElETFBhcnNlci0+bmV3KDEpOwogICAgICAgICBteSAkZG9jdW1l
bnQgPSAkcGFyc2VyLT5QYXJzZSgkZmlsZW5hbWUsICRkZWZpbmVzLCAkcHJlcHJvY2Vzc29yLCAk
aWRsQXR0cmlidXRlcyk7CiAKLSAgICAgICAgJG9iamVjdC0+UHJvY2Vzc1N1cHBsZW1lbnRhbERl
cGVuZGVuY2llcygkZG9jdW1lbnQpOwotCiAgICAgICAgIGZvcmVhY2ggbXkgJGRpY3Rpb25hcnkg
KEB7JGRvY3VtZW50LT5kaWN0aW9uYXJpZXN9KSB7Ci0gICAgICAgICAgICBuZXh0IHVubGVzcyAk
ZGljdGlvbmFyeS0+dHlwZS0+bmFtZSBlcSAkbmFtZTsKKyAgICAgICAgICAgIGlmICgkZGljdGlv
bmFyeS0+dHlwZS0+bmFtZSBlcSAkbmFtZSkgeworICAgICAgICAgICAgICAgICRvYmplY3QtPlBy
b2Nlc3NEaWN0aW9uYXJ5U3VwcGxlbWVudGFsRGVwZW5kZW5jaWVzKCRkaWN0aW9uYXJ5LCAkZG9j
dW1lbnQpOwogCi0gICAgICAgICAgICAkY2FjaGVkRXh0ZXJuYWxEaWN0aW9uYXJpZXMtPnskbmFt
ZX0gPSAkZGljdGlvbmFyeTsKLSAgICAgICAgICAgIG15ICRpbXBsZW1lbnRlZEFzID0gJGRpY3Rp
b25hcnktPmV4dGVuZGVkQXR0cmlidXRlcy0+e0ltcGxlbWVudGVkQXN9OwotICAgICAgICAgICAg
JGRpY3Rpb25hcnlUeXBlSW1wbGVtZW50YXRpb25OYW1lT3ZlcnJpZGVzeyRkaWN0aW9uYXJ5LT50
eXBlLT5uYW1lfSA9ICRpbXBsZW1lbnRlZEFzIGlmICRpbXBsZW1lbnRlZEFzOwotICAgICAgICAg
ICAgcmV0dXJuICRkaWN0aW9uYXJ5OworICAgICAgICAgICAgICAgICRjYWNoZWRFeHRlcm5hbERp
Y3Rpb25hcmllcy0+eyRuYW1lfSA9ICRkaWN0aW9uYXJ5OworICAgICAgICAgICAgICAgIG15ICRp
bXBsZW1lbnRlZEFzID0gJGRpY3Rpb25hcnktPmV4dGVuZGVkQXR0cmlidXRlcy0+e0ltcGxlbWVu
dGVkQXN9OworICAgICAgICAgICAgICAgICRkaWN0aW9uYXJ5VHlwZUltcGxlbWVudGF0aW9uTmFt
ZU92ZXJyaWRlc3skbmFtZX0gPSAkaW1wbGVtZW50ZWRBcyBpZiAkaW1wbGVtZW50ZWRBczsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gJGRpY3Rpb25hcnk7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9CiAgICAgJGNhY2hlZEV4dGVybmFsRGljdGlvbmFyaWVzLT57JG5hbWV9ID0gdW5k
ZWY7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMu
anNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0
dHJpYnV0ZXMuanNvbgkocmV2aXNpb24gMjY2NzA1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLmpzb24JKHdvcmtpbmcgY29weSkKQEAgLTEzLDcgKzEz
LDggQEAKICAgICAgICAgInVuaW9uLW1lbWJlciIsCiAgICAgICAgICJpdGVyYWJsZSIsCiAgICAg
ICAgICJtYXAtbGlrZSIsCi0gICAgICAgICJzZXQtbGlrZSIKKyAgICAgICAgInNldC1saWtlIiwK
KyAgICAgICAgImluY2x1ZGVzIgogICAgIF0sCiAgICAgImF0dHJpYnV0ZXMiOiB7CiAgICAgICAg
ICJBY3RpdmVET01PYmplY3QiOiB7CkBAIC02OSw3ICs3MCw3IEBACiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0sCiAgICAgICAgICJDb25kaXRpb25hbCI6IHsKLSAgICAgICAgICAgICJjb250ZXh0
c0FsbG93ZWQiOiBbImludGVyZmFjZSIsICJkaWN0aW9uYXJ5IiwgImRpY3Rpb25hcnktbWVtYmVy
IiwgImVudW0iLCAiYXR0cmlidXRlIiwgIm9wZXJhdGlvbiIsICJjb25zdGFudCIsICJjYWxsYmFj
ay1mdW5jdGlvbiJdLAorICAgICAgICAgICAgImNvbnRleHRzQWxsb3dlZCI6IFsiaW50ZXJmYWNl
IiwgImRpY3Rpb25hcnkiLCAiZGljdGlvbmFyeS1tZW1iZXIiLCAiZW51bSIsICJhdHRyaWJ1dGUi
LCAib3BlcmF0aW9uIiwgImNvbnN0YW50IiwgImNhbGxiYWNrLWZ1bmN0aW9uIiwgImluY2x1ZGVz
Il0sCiAgICAgICAgICAgICAidmFsdWVzIjogWyIqIl0sCiAgICAgICAgICAgICAic3VwcG9ydHND
b25qdW5jdGlvbiI6IHRydWUKICAgICAgICAgfSwKQEAgLTE3MiwxMiArMTczLDEyIEBACiAgICAg
ICAgICAgICAiY29udGV4dHNBbGxvd2VkIjogWyJhdHRyaWJ1dGUiXQogICAgICAgICB9LAogICAg
ICAgICAiRW5hYmxlZEF0UnVudGltZSI6IHsKLSAgICAgICAgICAgICJjb250ZXh0c0FsbG93ZWQi
OiBbImludGVyZmFjZSIsICJkaWN0aW9uYXJ5IiwgImVudW0iLCAiYXR0cmlidXRlIiwgIm9wZXJh
dGlvbiIsICJjb25zdGFudCIsICJpdGVyYWJsZSJdLAorICAgICAgICAgICAgImNvbnRleHRzQWxs
b3dlZCI6IFsiaW50ZXJmYWNlIiwgImRpY3Rpb25hcnkiLCAiZW51bSIsICJhdHRyaWJ1dGUiLCAi
b3BlcmF0aW9uIiwgImNvbnN0YW50IiwgIml0ZXJhYmxlIiwgImluY2x1ZGVzIl0sCiAgICAgICAg
ICAgICAidmFsdWVzIjogWyIqIl0sCiAgICAgICAgICAgICAic3VwcG9ydHNDb25qdW5jdGlvbiI6
IHRydWUKICAgICAgICAgfSwKICAgICAgICAgIkVuYWJsZWRCeVNldHRpbmciOiB7Ci0gICAgICAg
ICAgICAiY29udGV4dHNBbGxvd2VkIjogWyJpbnRlcmZhY2UiLCAiZGljdGlvbmFyeSIsICJlbnVt
IiwgImF0dHJpYnV0ZSIsICJvcGVyYXRpb24iLCAiY29uc3RhbnQiLCAiZGljdGlvbmFyeS1tZW1i
ZXIiXSwKKyAgICAgICAgICAgICJjb250ZXh0c0FsbG93ZWQiOiBbImludGVyZmFjZSIsICJkaWN0
aW9uYXJ5IiwgImVudW0iLCAiYXR0cmlidXRlIiwgIm9wZXJhdGlvbiIsICJjb25zdGFudCIsICJk
aWN0aW9uYXJ5LW1lbWJlciIsICJpbmNsdWRlcyJdLAogICAgICAgICAgICAgInZhbHVlcyI6IFsi
KiJdLAogICAgICAgICAgICAgInN1cHBvcnRzQ29uanVuY3Rpb24iOiB0cnVlCiAgICAgICAgIH0s
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbQko
cmV2aXNpb24gMjY2NzA1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQ
YXJzZXIucG0JKHdvcmtpbmcgY29weSkKQEAgLTE5Myw4ICsxOTMsOCBAQCBzdHJ1Y3QoIElETERp
Y3Rpb25hcnkgPT4gewogICAgIHR5cGUgPT4gJ0lETFR5cGUnLAogICAgIHBhcmVudFR5cGUgPT4g
J0lETFR5cGUnLAogICAgIG1lbWJlcnMgPT4gJ0AnLCAjIExpc3Qgb2YgJ0lETERpY3Rpb25hcnlN
ZW1iZXInCi0gICAgZXh0ZW5kZWRBdHRyaWJ1dGVzID0+ICckJywKICAgICBpc1BhcnRpYWwgPT4g
JyQnLCAjIFVzZWQgZm9yIHBhcnRpYWwgZGljdGlvbmFyaWVzCisgICAgZXh0ZW5kZWRBdHRyaWJ1
dGVzID0+ICckJywKIH0pOwogCiAjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2lk
bC1jYWxsYmFjay1mdW5jdGlvbnMKQEAgLTIwOSwxNCArMjA5LDE1IEBAIHN0cnVjdCggSURMTmFt
ZXNwYWNlID0+IHsKICAgICBuYW1lID0+ICckJywKICAgICBvcGVyYXRpb25zID0+ICdAJywgIyBM
aXN0IG9mICdJRExPcGVyYXRpb24nCiAgICAgYXR0cmlidXRlcyA9PiAnQCcsICMgTGlzdCBvZiAn
SURMQXR0cmlidXRlJwotICAgIGV4dGVuZGVkQXR0cmlidXRlcyA9PiAnJCcsCiAgICAgaXNQYXJ0
aWFsID0+ICckJywgIyBVc2VkIGZvciBwYXJ0aWFsIG5hbWVzcGFjZXMKKyAgICBleHRlbmRlZEF0
dHJpYnV0ZXMgPT4gJyQnLAogfSk7CiAKICMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlk
bC8jaW5jbHVkZXMtc3RhdGVtZW50CiBzdHJ1Y3QoIElETEluY2x1ZGVzU3RhdGVtZW50ID0+IHsK
ICAgICBpbnRlcmZhY2VJZGVudGlmaWVyID0+ICckJywKICAgICBtaXhpbklkZW50aWZpZXIgPT4g
JyQnLAorICAgIGV4dGVuZGVkQXR0cmlidXRlcyA9PiAnJCcsCiB9KTsKIAogIyBodHRwczovL2hl
eWNhbS5naXRodWIuaW8vd2ViaWRsLyNpZGwtdHlwZWRlZnMKQEAgLTE2NTQsNiArMTY1NSw5IEBA
IHN1YiBwYXJzZUluY2x1ZGVzU3RhdGVtZW50CiAKICAgICAgICAgJHNlbGYtPmFzc2VydFRva2Vu
VmFsdWUoJHNlbGYtPmdldFRva2VuKCksICI7IiwgX19MSU5FX18pOwogCisgICAgICAgICRzZWxm
LT5hc3NlcnRFeHRlbmRlZEF0dHJpYnV0ZXNWYWxpZEZvckNvbnRleHQoJGV4dGVuZGVkQXR0cmli
dXRlTGlzdCwgImluY2x1ZGVzIik7CisgICAgICAgICRpbmNsdWRlc1N0YXRlbWVudC0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzKCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOworCiAgICAgICAgIHJldHVybiAk
aW5jbHVkZXNTdGF0ZW1lbnQ7CiAgICAgfQogICAgICRzZWxmLT5hc3NlcnRVbmV4cGVjdGVkVG9r
ZW4oJG5leHQtPnZhbHVlKCksIF9fTElORV9fKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvcHJlcHJvY2Vzcy1pZGxzLnBsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvcHJlcHJvY2Vzcy1pZGxzLnBsCShyZXZpc2lvbiAyNjY3MDUp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3ByZXByb2Nlc3MtaWRscy5wbAko
d29ya2luZyBjb3B5KQpAQCAtNDk1LDcgKzQ5NSw3IEBAIHN1YiBnZXRJbmNsdWRlZEludGVyZmFj
ZXNGcm9tSURMCiAgICAgbXkgJGZpbGVDb250ZW50cyA9ICRpZGxGaWxlLT5maWxlQ29udGVudHM7
CiAKICAgICBteSBAaW5jbHVkZWRJbnRlcmZhY2VzID0gKCk7Ci0gICAgd2hpbGUgKCRmaWxlQ29u
dGVudHMgPX4gL15ccyooXHcrKVxzK2luY2x1ZGVzXHMrKFx3Kylccyo7L21nKSB7CisgICAgd2hp
bGUgKCRmaWxlQ29udGVudHMgPX4gL1xiKFx3KylccytpbmNsdWRlc1xzKyhcdyspXHMqOy9tZykg
ewogICAgICAgICBkaWUgIklkZW50aWZpZXIgb24gdGhlIGxlZnQgb2YgdGhlICdpbmNsdWRlcycg
c3RhdGVtZW50IHNob3VsZCBiZSAkaW50ZXJmYWNlTmFtZSBpbiAkaW50ZXJmYWNlTmFtZS5pZGws
IGJ1dCBmb3VuZCAkMSIgaWYgJDEgbmUgJGludGVyZmFjZU5hbWU7CiAgICAgICAgIHB1c2goQGlu
Y2x1ZGVkSW50ZXJmYWNlcywgJDIpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9CaW5kaW5nVGVzdEdsb2JhbENvbnN0cnVjdG9ycy5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0JpbmRpbmdUZXN0
R2xvYmFsQ29uc3RydWN0b3JzLmlkbAkocmV2aXNpb24gMjY2NzA1KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0JpbmRpbmdUZXN0R2xvYmFsQ29uc3RydWN0b3JzLmlk
bAkod29ya2luZyBjb3B5KQpAQCAtOCw2ICs4LDcgQEAgcGFydGlhbCBpbnRlcmZhY2UgVGVzdEds
b2JhbE9iamVjdCB7CiAgICAgYXR0cmlidXRlIFRlc3RDYWxsVHJhY2VyQ29uc3RydWN0b3IgVGVz
dENhbGxUcmFjZXI7CiAgICAgW0NvbmRpdGlvbmFsPVRFU1RfQ09ORElUSU9OQUxdIGF0dHJpYnV0
ZSBUZXN0Q2FsbGJhY2tJbnRlcmZhY2VDb25zdHJ1Y3RvciBUZXN0Q2FsbGJhY2tJbnRlcmZhY2U7
CiAgICAgYXR0cmlidXRlIFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVj
dG9yIFRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvcjsKKyAgICBhdHRyaWJ1dGUgVGVz
dENvbmRpdGlvbmFsSW5jbHVkZXNDb25zdHJ1Y3RvciBUZXN0Q29uZGl0aW9uYWxJbmNsdWRlczsK
ICAgICBhdHRyaWJ1dGUgVGVzdERPTUpJVENvbnN0cnVjdG9yIFRlc3RET01KSVQ7CiAgICAgYXR0
cmlidXRlIFRlc3REb21haW5TZWN1cml0eUNvbnN0cnVjdG9yIFRlc3REb21haW5TZWN1cml0eTsK
ICAgICBhdHRyaWJ1dGUgVGVzdEVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvciBUZXN0RW5hYmxl
ZEJ5U2V0dGluZzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9T
dXBwbGVtZW50YWxEZXBlbmRlbmNpZXMuZGVwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9TdXBwbGVtZW50YWxEZXBlbmRlbmNpZXMuZGVwCShyZXZp
c2lvbiAyNjY3MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvU3Vw
cGxlbWVudGFsRGVwZW5kZW5jaWVzLmRlcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsMTAg
QEAgV2ViRE9NVGVzdENhbGxiYWNrSW50ZXJmYWNlLmg6IAogSlNUZXN0Q2xhc3NXaXRoSlNCdWls
dGluQ29uc3RydWN0b3IuaDogCiBET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3Iu
aDogCiBXZWJET01UZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3IuaDogCitKU1Rlc3RD
b25kaXRpb25hbEluY2x1ZGVzLmg6IFRlc3RJbmNsdWRlcy5pZGwKK0RPTVRlc3RDb25kaXRpb25h
bEluY2x1ZGVzLmg6IFRlc3RJbmNsdWRlcy5pZGwKK1dlYkRPTVRlc3RDb25kaXRpb25hbEluY2x1
ZGVzLmg6IFRlc3RJbmNsdWRlcy5pZGwKK1Rlc3RJbmNsdWRlcy5pZGw6CiBKU1Rlc3RET01KSVQu
aDogCiBET01UZXN0RE9NSklULmg6IAogV2ViRE9NVGVzdERPTUpJVC5oOiAKQEAgLTE3OSw5ICsx
ODMsMTAgQEAgV2ViRE9NVGVzdE5hbWVkU2V0dGVyV2l0aExlZ2FjeVVuZm9yZ2VhYgogSlNUZXN0
Tm9kZS5oOiAKIERPTVRlc3ROb2RlLmg6IAogV2ViRE9NVGVzdE5vZGUuaDogCi1KU1Rlc3RPYmou
aDogCi1ET01UZXN0T2JqLmg6IAotV2ViRE9NVGVzdE9iai5oOiAKK0pTVGVzdE9iai5oOiBUZXN0
SW5jbHVkZXMuaWRsCitET01UZXN0T2JqLmg6IFRlc3RJbmNsdWRlcy5pZGwKK1dlYkRPTVRlc3RP
YmouaDogVGVzdEluY2x1ZGVzLmlkbAorVGVzdEluY2x1ZGVzLmlkbDoKIEpTVGVzdE9wZXJhdGlv
bkNvbmRpdGlvbmFsLmg6IFRlc3RPcGVyYXRpb25CYXNlLmlkbAogRE9NVGVzdE9wZXJhdGlvbkNv
bmRpdGlvbmFsLmg6IFRlc3RPcGVyYXRpb25CYXNlLmlkbAogV2ViRE9NVGVzdE9wZXJhdGlvbkNv
bmRpdGlvbmFsLmg6IFRlc3RPcGVyYXRpb25CYXNlLmlkbApJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzLmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdENvbmRpdGlv
bmFsSW5jbHVkZXMuaWRsCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9UZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtc3RyQXJnLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFc3RyQXJnLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gVGhpcyBJREwgZmlsZSBpcyBmb3IgdGVzdGluZyB0aGUgYmlu
ZGluZ3MgY29kZSBnZW5lcmF0b3IgYW5kIGZvciB0cmFja2luZworLy8gY2hhbmdlcyBpbiBpdHMg
b3V0cHV0LgorCitpbnRlcmZhY2UgVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMgeworICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBkb3VibGUgdGVzdEF0dHI7Cit9OworCitbQ29uZGl0aW9uYWw9Q29uZGl0
aW9uMTIsIEVuYWJsZWRCeVNldHRpbmc9VGVzdFNldHRpbmcyXSBUZXN0Q29uZGl0aW9uYWxJbmNs
dWRlcyBpbmNsdWRlcyBUZXN0SW5jbHVkZXM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVGVzdEluY2x1ZGVzLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEluY2x1ZGVzLmlkbAkocmV2aXNpb24gMjY2
NzA1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RJbmNsdWRl
cy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDggQEAKICAgICB1bmRlZmluZWQgaW5j
bHVkZXNNZXRob2QxKCk7CiAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIE1h
eVRocm93RXhjZXB0aW9uXSBUZXN0T2JqIGluY2x1ZGVzTWV0aG9kMihET01TdHJpbmcgc3RyQXJn
LCBUZXN0T2JqIG9iakFyZyk7CiAgICAgW0N1c3RvbV0gdW5kZWZpbmVkIGluY2x1ZGVzTWV0aG9k
MygpOworICAgIFtDb25kaXRpb25hbD1Db25kaXRpb24xMV0gdW5kZWZpbmVkIGluY2x1ZGVzTWV0
aG9kQ29uZGl0aW9uYWwoKTsKKyAgICBbRW5hYmxlZEJ5U2V0dGluZz1UZXN0U2V0dGluZ10gdW5k
ZWZpbmVkIGluY2x1ZGVzTWV0aG9kU2V0dGluZ3NDb25kaXRpb25hbCgpOwogCiAgICAgY29uc3Qg
dW5zaWduZWQgc2hvcnQgSU5DTFVERVNfQ09OU1RBTlQxID0gMTsKICAgICBbUmVmbGVjdD1DT05T
VF9JTVBMXSBjb25zdCB1bnNpZ25lZCBzaG9ydCBJTkNMVURFU19DT05TVEFOVDIgPSAyOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENvbmRpdGlv
bmFsSW5jbHVkZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzLmNwcAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29uZGl0
aW9uYWxJbmNsdWRlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NjUgQEAKKy8qCisg
ICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgor
ICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVGVz
dENvbmRpdGlvbmFsSW5jbHVkZXMuaCIKKworI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgor
I2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5j
bHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNs
dWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgorI2luY2x1ZGUgIkpTRE9N
Q29udmVydE51bWJlcnMuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCisj
aW5jbHVkZSAiSlNET01PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5o
IgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJTZXR0aW5n
cy5oIgorI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9GdW5jdGlvblByb3RvdHlwZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hl
YXBBbmFseXplci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5o
PgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgorI2luY2x1ZGUg
PHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgorI2lu
Y2x1ZGUgPHd0Zi9VUkwuaD4KKworI2lmIChFTkFCTEUoQ29uZGl0aW9uMTIpICYmIEVOQUJMRShD
b25kaXRpb24yMikpIHx8IEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIz
KQorI2luY2x1ZGUgIkpTRE9NQ29udmVydEludGVyZmFjZS5oIgorI2luY2x1ZGUgIkpTRE9NQ29u
dmVydFN0cmluZ3MuaCIKKyNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUg
IkpTTm9kZS5oIgorI2VuZGlmCisKKyNpZiAoRU5BQkxFKENvbmRpdGlvbjEyKSAmJiBFTkFCTEUo
Q29uZGl0aW9uMjIpKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCisjaW5jbHVkZSAiSlNET01Db252
ZXJ0U2VxdWVuY2VzLmgiCisjaW5jbHVkZSAiSlNUZXN0T2JqLmgiCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNBcnJheS5oPgorI2VuZGlmCisKKworbmFtZXNwYWNlIFdlYkNvcmUgewordXNp
bmcgbmFtZXNwYWNlIEpTQzsKKworLy8gRnVuY3Rpb25zCisKKyNpZiAoRU5BQkxFKENvbmRpdGlv
bjEyKSAmJiBFTkFCTEUoQ29uZGl0aW9uMjIpKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCitKU0M6
OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc1By
b3RvdHlwZUZ1bmN0aW9uSW5jbHVkZXNNZXRob2QxKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkNhbGxGcmFtZSopOworI2VuZGlmCisjaWYgKEVOQUJMRShDb25kaXRpb24xMikgJiYgRU5BQkxF
KENvbmRpdGlvbjIyKSkgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQorSlNDOjpFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNQcm90b3R5cGVGdW5jdGlv
bkluY2x1ZGVzTWV0aG9kMihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsK
KyNlbmRpZgorI2lmIChFTkFCTEUoQ29uZGl0aW9uMTIpICYmIEVOQUJMRShDb25kaXRpb24yMikp
IHx8IEVOQUJMRShDb25kaXRpb24yMykKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzUHJvdG90eXBlRnVuY3Rpb25JbmNsdWRlc01ldGhv
ZDMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7CisjZW5kaWYKKyNpZiAo
RU5BQkxFKENvbmRpdGlvbjExKSAmJiBFTkFCTEUoQ29uZGl0aW9uMTIpICYmIEVOQUJMRShDb25k
aXRpb24yMikpIHx8IEVOQUJMRShDb25kaXRpb24yMykKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzUHJvdG90eXBlRnVuY3Rpb25JbmNs
dWRlc01ldGhvZENvbmRpdGlvbmFsKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFt
ZSopOworI2VuZGlmCisjaWYgKEVOQUJMRShDb25kaXRpb24xMikgJiYgRU5BQkxFKENvbmRpdGlv
bjIyKSkgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQorSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNQcm90b3R5cGVGdW5jdGlvbkluY2x1ZGVz
TWV0aG9kU2V0dGluZ3NDb25kaXRpb25hbChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxs
RnJhbWUqKTsKKyNlbmRpZgorI2lmIChFTkFCTEUoQ29uZGl0aW9uMTIpICYmIEVOQUJMRShDb25k
aXRpb24yMikpIHx8IEVOQUJMRShDb25kaXRpb24yMykKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzUHJvdG90eXBlRnVuY3Rpb25UYWtl
Tm9kZXMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7CisjZW5kaWYKKwor
Ly8gQXR0cmlidXRlcworCitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENvbmRpdGlvbmFsSW5j
bHVkZXNDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVz
Q29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDb25kaXRpb25h
bEluY2x1ZGVzVGVzdEF0dHIoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJM
RShDb25kaXRpb24yMykKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q29uZGl0aW9uYWxJbmNs
dWRlc0luY2x1ZGVzU3RyMShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworI2VuZGlmCisjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8
fCBFTkFCTEUoQ29uZGl0aW9uMjMpCitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENvbmRpdGlv
bmFsSW5jbHVkZXNJbmNsdWRlc1N0cjIoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0Q29uZGl0aW9uYWxJ
bmNsdWRlc0luY2x1ZGVzU3RyMihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CisjZW5kaWYKKyNpZiBFTkFCTEUoQ29uZGl0aW9u
MjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q29u
ZGl0aW9uYWxJbmNsdWRlc0luY2x1ZGVzU3RyMyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RDb25kaXRp
b25hbEluY2x1ZGVzSW5jbHVkZXNTdHIzKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKKyNlbmRpZgorI2lmIEVOQUJMRShDb25k
aXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQorSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RDb25kaXRpb25hbEluY2x1ZGVzSW5jbHVkZXNOb2RlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdENv
bmRpdGlvbmFsSW5jbHVkZXNJbmNsdWRlc05vZGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworI2VuZGlmCisKK2NsYXNzIEpT
VGVzdENvbmRpdGlvbmFsSW5jbHVkZXNQcm90b3R5cGUgZmluYWwgOiBwdWJsaWMgSlNDOjpKU05v
bkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNDOjpKU05vbkZpbmFs
T2JqZWN0OworICAgIHN0YXRpYyBKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzUHJvdG90eXBlKiBj
cmVhdGUoSlNDOjpWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rlc3RDb25kaXRpb25hbElu
Y2x1ZGVzUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpT
VGVzdENvbmRpdGlvbmFsSW5jbHVkZXNQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RDb25kaXRp
b25hbEluY2x1ZGVzUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAg
ICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0K
KworICAgIERFQ0xBUkVfSU5GTzsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlND
OjpTdWJzcGFjZUFjY2Vzcz4KKyAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoSlNDOjpWTSYgdm0pCisgICAgeworICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFD
RV9TSEFSQUJMRShKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzUHJvdG90eXBlLCBCYXNlKTsKKyAg
ICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlOworICAgIH0KKyAgICBzdGF0aWMgSlND
OjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzUHJv
dG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVy
ZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cit9
OworU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0Q29uZGl0aW9uYWxJ
bmNsdWRlc1Byb3RvdHlwZSwgSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc1Byb3RvdHlwZTo6QmFz
ZSk7CisKK3VzaW5nIEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNDb25zdHJ1Y3RvciA9IEpTRE9N
Q29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXM+Owor
CisvKiBIYXNoIHRhYmxlIGZvciBjb25zdHJ1Y3RvciAqLworCitzdGF0aWMgY29uc3QgSGFzaFRh
YmxlVmFsdWUgSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc0NvbnN0cnVjdG9yVGFibGVWYWx1ZXNb
XSA9Cit7CisjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCisg
ICAgeyAiSU5DTFVERVNfQ09OU1RBTlQxIiwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERl
bGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6Q29uc3RhbnRJbnRlZ2VyLCBOb0ludHJpbnNpYywgeyAobG9uZyBsb25nKSgxKSB9
IH0sCisjZWxzZQorICAgIHsgMCwgMCwgTm9JbnRyaW5zaWMsIHsgMCwgMCB9IH0sCisjZW5kaWYK
KyNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKKyAgICB7ICJJ
TkNMVURFU19DT05TVEFOVDIiLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpDb25zdGFudEludGVnZXIsIE5vSW50cmluc2ljLCB7IChsb25nIGxvbmcpKDIpIH0gfSwKKyNl
bHNlCisgICAgeyAwLCAwLCBOb0ludHJpbnNpYywgeyAwLCAwIH0gfSwKKyNlbmRpZgorfTsKKwor
I2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQorc3RhdGljX2Fz
c2VydChUZXN0Q29uZGl0aW9uYWxJbmNsdWRlczo6SU5DTFVERVNfQ09OU1RBTlQxID09IDEsICJJ
TkNMVURFU19DT05TVEFOVDEgaW4gVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMgZG9lcyBub3QgbWF0
Y2ggdmFsdWUgZnJvbSBJREwiKTsKKyNlbmRpZgorI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwg
RU5BQkxFKENvbmRpdGlvbjIzKQorc3RhdGljX2Fzc2VydChUZXN0Q29uZGl0aW9uYWxJbmNsdWRl
czo6Q09OU1RfSU1QTCA9PSAyLCAiQ09OU1RfSU1QTCBpbiBUZXN0Q29uZGl0aW9uYWxJbmNsdWRl
cyBkb2VzIG5vdCBtYXRjaCB2YWx1ZSBmcm9tIElETCIpOworI2VuZGlmCisKK3RlbXBsYXRlPD4g
SlNWYWx1ZSBKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzQ29uc3RydWN0b3I6OnByb3RvdHlwZUZv
clN0cnVjdHVyZShKU0M6OlZNJiB2bSwgY29uc3QgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0odm0pOworICAgIHJldHVybiBnbG9iYWxPYmplY3Qu
ZnVuY3Rpb25Qcm90b3R5cGUoKTsKK30KKwordGVtcGxhdGU8PiB2b2lkIEpTVGVzdENvbmRpdGlv
bmFsSW5jbHVkZXNDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzOjpwcm90b3R5
cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUs
IGpzTm9udHJpdmlhbFN0cmluZyh2bSwgIlRlc3RDb25kaXRpb25hbEluY2x1ZGVzIl9zKSwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpz
TnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpT
VGVzdENvbmRpdGlvbmFsSW5jbHVkZXM6OmluZm8oKSwgSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRl
c0NvbnN0cnVjdG9yVGFibGVWYWx1ZXMsICp0aGlzKTsKK30KKwordGVtcGxhdGU8PiBjb25zdCBD
bGFzc0luZm8gSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc0NvbnN0cnVjdG9yOjpzX2luZm8gPSB7
ICJUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcyIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxw
dHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc0NvbnN0cnVj
dG9yKSB9OworCisvKiBIYXNoIHRhYmxlIGZvciBwcm90b3R5cGUgKi8KKworc3RhdGljIGNvbnN0
IEhhc2hUYWJsZVZhbHVlIEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNQcm90b3R5cGVUYWJsZVZh
bHVlc1tdID0KK3sKKyAgICB7ICJjb25zdHJ1Y3RvciIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJf
dClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0Q29uZGl0aW9u
YWxJbmNsdWRlc0NvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0
eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc0NvbnN0cnVj
dG9yKSB9IH0sCisgICAgeyAidGVzdEF0dHIiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpDdXN0
b21BY2Nlc3NvciB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRPTUF0dHJpYnV0ZSksIE5vSW50
cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVu
Yz4oanNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc1Rlc3RBdHRyKSwgKGludHB0cl90KSBzdGF0aWNf
Y2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oMCkgfSB9LAorI2lmIEVOQUJMRShD
b25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQorICAgIHsgImluY2x1ZGVzU3RyMSIs
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19j
YXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RDb25kaXRpb25hbEluY2x1ZGVz
SW5jbHVkZXNTdHIxKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1
dFZhbHVlRnVuYz4oMCkgfSB9LAorI2Vsc2UKKyAgICB7IDAsIDAsIE5vSW50cmluc2ljLCB7IDAs
IDAgfSB9LAorI2VuZGlmCisjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMjMpCisgICAgeyAiaW5jbHVkZXNTdHIyIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFBy
b3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzSW5jbHVk
ZXNTdHIyKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVl
RnVuYz4oc2V0SlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc0luY2x1ZGVzU3RyMikgfSB9LAorI2Vs
c2UKKyAgICB7IDAsIDAsIE5vSW50cmluc2ljLCB7IDAsIDAgfSB9LAorI2VuZGlmCisjaWYgRU5B
QkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCisgICAgeyAiaW5jbHVkZXNT
dHIzIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3Rv
bUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRy
aW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5j
Pihqc1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzSW5jbHVkZXNTdHIzKSwgKGludHB0cl90KSBzdGF0
aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0Q29uZGl0aW9u
YWxJbmNsdWRlc0luY2x1ZGVzU3RyMykgfSB9LAorI2Vsc2UKKyAgICB7IDAsIDAsIE5vSW50cmlu
c2ljLCB7IDAsIDAgfSB9LAorI2VuZGlmCisjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFC
TEUoQ29uZGl0aW9uMjMpCisgICAgeyAiaW5jbHVkZXNOb2RlIiwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yIHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RE9NQXR0cmlidXRlKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRp
Y19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RDb25kaXRpb25hbEluY2x1
ZGVzSW5jbHVkZXNOb2RlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6
OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc0luY2x1ZGVzTm9kZSkg
fSB9LAorI2Vsc2UKKyAgICB7IDAsIDAsIE5vSW50cmluc2ljLCB7IDAsIDAgfSB9LAorI2VuZGlm
CisjaWYgKEVOQUJMRShDb25kaXRpb24xMikgJiYgRU5BQkxFKENvbmRpdGlvbjIyKSkgfHwgRU5B
QkxFKENvbmRpdGlvbjIzKQorICAgIHsgImluY2x1ZGVzTWV0aG9kMSIsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7
IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0Q29uZGl0aW9u
YWxJbmNsdWRlc1Byb3RvdHlwZUZ1bmN0aW9uSW5jbHVkZXNNZXRob2QxKSwgKGludHB0cl90KSAo
MCkgfSB9LAorI2Vsc2UKKyAgICB7IDAsIDAsIE5vSW50cmluc2ljLCB7IDAsIDAgfSB9LAorI2Vu
ZGlmCisjaWYgKEVOQUJMRShDb25kaXRpb24xMikgJiYgRU5BQkxFKENvbmRpdGlvbjIyKSkgfHwg
RU5BQkxFKENvbmRpdGlvbjIzKQorICAgIHsgImluY2x1ZGVzTWV0aG9kMiIsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2lj
LCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0Q29uZGl0
aW9uYWxJbmNsdWRlc1Byb3RvdHlwZUZ1bmN0aW9uSW5jbHVkZXNNZXRob2QyKSwgKGludHB0cl90
KSAoMikgfSB9LAorI2Vsc2UKKyAgICB7IDAsIDAsIE5vSW50cmluc2ljLCB7IDAsIDAgfSB9LAor
I2VuZGlmCisjaWYgKEVOQUJMRShDb25kaXRpb24xMikgJiYgRU5BQkxFKENvbmRpdGlvbjIyKSkg
fHwgRU5BQkxFKENvbmRpdGlvbjIzKQorICAgIHsgImluY2x1ZGVzTWV0aG9kMyIsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmlu
c2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0Q29u
ZGl0aW9uYWxJbmNsdWRlc1Byb3RvdHlwZUZ1bmN0aW9uSW5jbHVkZXNNZXRob2QzKSwgKGludHB0
cl90KSAoMCkgfSB9LAorI2Vsc2UKKyAgICB7IDAsIDAsIE5vSW50cmluc2ljLCB7IDAsIDAgfSB9
LAorI2VuZGlmCisjaWYgKEVOQUJMRShDb25kaXRpb24xMSkgJiYgRU5BQkxFKENvbmRpdGlvbjEy
KSAmJiBFTkFCTEUoQ29uZGl0aW9uMjIpKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCisgICAgeyAi
aW5jbHVkZXNNZXRob2RDb25kaXRpb25hbCIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0
aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc1Byb3Rv
dHlwZUZ1bmN0aW9uSW5jbHVkZXNNZXRob2RDb25kaXRpb25hbCksIChpbnRwdHJfdCkgKDApIH0g
fSwKKyNlbHNlCisgICAgeyAwLCAwLCBOb0ludHJpbnNpYywgeyAwLCAwIH0gfSwKKyNlbmRpZgor
I2lmIChFTkFCTEUoQ29uZGl0aW9uMTIpICYmIEVOQUJMRShDb25kaXRpb24yMikpIHx8IEVOQUJM
RShDb25kaXRpb24yMykKKyAgICB7ICJpbmNsdWRlc01ldGhvZFNldHRpbmdzQ29uZGl0aW9uYWwi
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24p
LCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+
KGpzVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNQcm90b3R5cGVGdW5jdGlvbkluY2x1ZGVzTWV0aG9k
U2V0dGluZ3NDb25kaXRpb25hbCksIChpbnRwdHJfdCkgKDApIH0gfSwKKyNlbHNlCisgICAgeyAw
LCAwLCBOb0ludHJpbnNpYywgeyAwLCAwIH0gfSwKKyNlbmRpZgorI2lmIChFTkFCTEUoQ29uZGl0
aW9uMTIpICYmIEVOQUJMRShDb25kaXRpb24yMikpIHx8IEVOQUJMRShDb25kaXRpb24yMykKKyAg
ICB7ICJ0YWtlTm9kZXMiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3
TmF0aXZlRnVuY3Rpb24+KGpzVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNQcm90b3R5cGVGdW5jdGlv
blRha2VOb2RlcyksIChpbnRwdHJfdCkgKDApIH0gfSwKKyNlbHNlCisgICAgeyAwLCAwLCBOb0lu
dHJpbnNpYywgeyAwLCAwIH0gfSwKKyNlbmRpZgorI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwg
RU5BQkxFKENvbmRpdGlvbjIzKQorICAgIHsgIklOQ0xVREVTX0NPTlNUQU5UMSIsIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkNvbnN0YW50SW50ZWdlciwgTm9JbnRyaW5z
aWMsIHsgKGxvbmcgbG9uZykoMSkgfSB9LAorI2Vsc2UKKyAgICB7IDAsIDAsIE5vSW50cmluc2lj
LCB7IDAsIDAgfSB9LAorI2VuZGlmCisjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUo
Q29uZGl0aW9uMjMpCisgICAgeyAiSU5DTFVERVNfQ09OU1RBTlQyIiwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6Q29uc3RhbnRJbnRlZ2VyLCBOb0ludHJpbnNpYywgeyAo
bG9uZyBsb25nKSgyKSB9IH0sCisjZWxzZQorICAgIHsgMCwgMCwgTm9JbnRyaW5zaWMsIHsgMCwg
MCB9IH0sCisjZW5kaWYKK307CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3RDb25kaXRpb25hbElu
Y2x1ZGVzUHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcyIsICZC
YXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0
Q29uZGl0aW9uYWxJbmNsdWRlc1Byb3RvdHlwZSkgfTsKKwordm9pZCBKU1Rlc3RDb25kaXRpb25h
bEluY2x1ZGVzUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNUZXN0
Q29uZGl0aW9uYWxJbmNsdWRlczo6aW5mbygpLCBKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzUHJv
dG90eXBlVGFibGVWYWx1ZXMsICp0aGlzKTsKKyAgICBib29sIGhhc0Rpc2FibGVkUnVudGltZVBy
b3BlcnRpZXMgPSBmYWxzZTsKKyNpZiAoRU5BQkxFKENvbmRpdGlvbjEyKSAmJiBFTkFCTEUoQ29u
ZGl0aW9uMjIpKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCisgICAgaWYgKCFkb3duY2FzdDxEb2N1
bWVudD4oanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkpLT5zZXR0aW5ncygpLnRlc3RTZXR0aW5nMkVuYWJsZWQoKSkgewor
ICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKKyAgICAgICAgYXV0
byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oImluY2x1ZGVzTWV0aG9kMSIpLCBzdHJsZW4oImluY2x1ZGVzTWV0
aG9kMSIpKTsKKyAgICAgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBW
TTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpOworICAgICAgICBEZWxl
dGVQcm9wZXJ0eVNsb3Qgc2xvdDsKKyAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRo
aXMsIGdsb2JhbE9iamVjdCgpLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgIH0KKyNlbmRpZgor
I2lmIChFTkFCTEUoQ29uZGl0aW9uMTIpICYmIEVOQUJMRShDb25kaXRpb24yMikpIHx8IEVOQUJM
RShDb25kaXRpb24yMykKKyAgICBpZiAoIWRvd25jYXN0PERvY3VtZW50Pihqc0Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkt
PnNldHRpbmdzKCkudGVzdFNldHRpbmcyRW5hYmxlZCgpKSB7CisgICAgICAgIGhhc0Rpc2FibGVk
UnVudGltZVByb3BlcnRpZXMgPSB0cnVlOworICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElk
ZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigi
aW5jbHVkZXNNZXRob2QyIiksIHN0cmxlbigiaW5jbHVkZXNNZXRob2QyIikpOworICAgICAgICBW
TTo6RGVsZXRlUHJvcGVydHlNb2RlU2NvcGUgc2NvcGUodm0sIFZNOjpEZWxldGVQcm9wZXJ0eU1v
ZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7CisgICAgICAgIERlbGV0ZVByb3BlcnR5U2xvdCBzbG90
OworICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhpcywgZ2xvYmFsT2JqZWN0KCks
IHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgfQorI2VuZGlmCisjaWYgKEVOQUJMRShDb25kaXRp
b24xMikgJiYgRU5BQkxFKENvbmRpdGlvbjIyKSkgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQorICAg
IGlmICghZG93bmNhc3Q8RG9jdW1lbnQ+KGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2Jh
bE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKS0+c2V0dGluZ3MoKS50ZXN0U2V0
dGluZzJFbmFibGVkKCkpIHsKKyAgICAgICAgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyA9
IHRydWU7CisgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJpbmNsdWRlc01ldGhvZDMiKSwg
c3RybGVuKCJpbmNsdWRlc01ldGhvZDMiKSk7CisgICAgICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1v
ZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmlndXJh
YmxlKTsKKyAgICAgICAgRGVsZXRlUHJvcGVydHlTbG90IHNsb3Q7CisgICAgICAgIEpTT2JqZWN0
OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKSwgcHJvcGVydHlOYW1lLCBzbG90
KTsKKyAgICB9CisjZW5kaWYKKyNpZiAoRU5BQkxFKENvbmRpdGlvbjExKSAmJiBFTkFCTEUoQ29u
ZGl0aW9uMTIpICYmIEVOQUJMRShDb25kaXRpb24yMikpIHx8IEVOQUJMRShDb25kaXRpb24yMykK
KyAgICBpZiAoIWRvd25jYXN0PERvY3VtZW50Pihqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihn
bG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSktPnNldHRpbmdzKCkudGVz
dFNldHRpbmcyRW5hYmxlZCgpKSB7CisgICAgICAgIGhhc0Rpc2FibGVkUnVudGltZVByb3BlcnRp
ZXMgPSB0cnVlOworICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiaW5jbHVkZXNNZXRob2RD
b25kaXRpb25hbCIpLCBzdHJsZW4oImluY2x1ZGVzTWV0aG9kQ29uZGl0aW9uYWwiKSk7CisgICAg
ICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3Bl
cnR5TW9kZTo6SWdub3JlQ29uZmlndXJhYmxlKTsKKyAgICAgICAgRGVsZXRlUHJvcGVydHlTbG90
IHNsb3Q7CisgICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmpl
Y3QoKSwgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICB9CisjZW5kaWYKKyNpZiAoRU5BQkxFKENv
bmRpdGlvbjEyKSAmJiBFTkFCTEUoQ29uZGl0aW9uMjIpKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMp
CisgICAgaWYgKCEoZG93bmNhc3Q8RG9jdW1lbnQ+KGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KGdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKS0+c2V0dGluZ3MoKS50
ZXN0U2V0dGluZ0VuYWJsZWQoKSAmJiBkb3duY2FzdDxEb2N1bWVudD4oanNDYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpLT5z
ZXR0aW5ncygpLnRlc3RTZXR0aW5nMkVuYWJsZWQoKSkpIHsKKyAgICAgICAgaGFzRGlzYWJsZWRS
dW50aW1lUHJvcGVydGllcyA9IHRydWU7CisgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJp
bmNsdWRlc01ldGhvZFNldHRpbmdzQ29uZGl0aW9uYWwiKSwgc3RybGVuKCJpbmNsdWRlc01ldGhv
ZFNldHRpbmdzQ29uZGl0aW9uYWwiKSk7CisgICAgICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVT
Y29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmlndXJhYmxl
KTsKKyAgICAgICAgRGVsZXRlUHJvcGVydHlTbG90IHNsb3Q7CisgICAgICAgIEpTT2JqZWN0Ojpk
ZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKSwgcHJvcGVydHlOYW1lLCBzbG90KTsK
KyAgICB9CisjZW5kaWYKKyNpZiAoRU5BQkxFKENvbmRpdGlvbjEyKSAmJiBFTkFCTEUoQ29uZGl0
aW9uMjIpKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCisgICAgaWYgKCFkb3duY2FzdDxEb2N1bWVu
dD4oanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkpLT5zZXR0aW5ncygpLnRlc3RTZXR0aW5nMkVuYWJsZWQoKSkgeworICAg
ICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsKKyAgICAgICAgYXV0byBw
cm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0
PGNvbnN0IExDaGFyKj4oInRha2VOb2RlcyIpLCBzdHJsZW4oInRha2VOb2RlcyIpKTsKKyAgICAg
ICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVy
dHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpOworICAgICAgICBEZWxldGVQcm9wZXJ0eVNsb3Qg
c2xvdDsKKyAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVj
dCgpLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgIH0KKyNlbmRpZgorI2lmIEVOQUJMRShDb25k
aXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQorICAgIGlmICghZG93bmNhc3Q8RG9jdW1l
bnQ+KGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpKS0+c2V0dGluZ3MoKS50ZXN0U2V0dGluZzJFbmFibGVkKCkpIHsKKyAg
ICAgICAgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyA9IHRydWU7CisgICAgICAgIGF1dG8g
cHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBMQ2hhcio+KCJpbmNsdWRlc1N0cjEiKSwgc3RybGVuKCJpbmNsdWRlc1N0cjEiKSk7
CisgICAgICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0
ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmlndXJhYmxlKTsKKyAgICAgICAgRGVsZXRlUHJvcGVy
dHlTbG90IHNsb3Q7CisgICAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSh0aGlzLCBnbG9i
YWxPYmplY3QoKSwgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICB9CisjZW5kaWYKKyNpZiBFTkFC
TEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKKyAgICBpZiAoIWRvd25jYXN0
PERvY3VtZW50Pihqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QoKSktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSktPnNldHRpbmdzKCkudGVzdFNldHRpbmcyRW5hYmxlZCgp
KSB7CisgICAgICAgIGhhc0Rpc2FibGVkUnVudGltZVByb3BlcnRpZXMgPSB0cnVlOworICAgICAg
ICBhdXRvIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiaW5jbHVkZXNTdHIyIiksIHN0cmxlbigiaW5jbHVkZXNT
dHIyIikpOworICAgICAgICBWTTo6RGVsZXRlUHJvcGVydHlNb2RlU2NvcGUgc2NvcGUodm0sIFZN
OjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7CisgICAgICAgIERlbGV0
ZVByb3BlcnR5U2xvdCBzbG90OworICAgICAgICBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkodGhp
cywgZ2xvYmFsT2JqZWN0KCksIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgfQorI2VuZGlmCisj
aWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCisgICAgaWYgKCFk
b3duY2FzdDxEb2N1bWVudD4oanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0
KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpLT5zZXR0aW5ncygpLnRlc3RTZXR0aW5nMkVu
YWJsZWQoKSkgeworICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzID0gdHJ1ZTsK
KyAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImluY2x1ZGVzU3RyMyIpLCBzdHJsZW4oImlu
Y2x1ZGVzU3RyMyIpKTsKKyAgICAgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3Bl
KHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpOworICAgICAg
ICBEZWxldGVQcm9wZXJ0eVNsb3Qgc2xvdDsKKyAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3Bl
cnR5KHRoaXMsIGdsb2JhbE9iamVjdCgpLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgIH0KKyNl
bmRpZgorI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQorICAg
IGlmICghZG93bmNhc3Q8RG9jdW1lbnQ+KGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2Jh
bE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKS0+c2V0dGluZ3MoKS50ZXN0U2V0
dGluZzJFbmFibGVkKCkpIHsKKyAgICAgICAgaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyA9
IHRydWU7CisgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJpbmNsdWRlc05vZGUiKSwgc3Ry
bGVuKCJpbmNsdWRlc05vZGUiKSk7CisgICAgICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVTY29w
ZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmlndXJhYmxlKTsK
KyAgICAgICAgRGVsZXRlUHJvcGVydHlTbG90IHNsb3Q7CisgICAgICAgIEpTT2JqZWN0OjpkZWxl
dGVQcm9wZXJ0eSh0aGlzLCBnbG9iYWxPYmplY3QoKSwgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAg
ICB9CisjZW5kaWYKKyAgICBpZiAoaGFzRGlzYWJsZWRSdW50aW1lUHJvcGVydGllcyAmJiBzdHJ1
Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgIGZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0
KHZtKTsKKyAgICBKU0NfVE9fU1RSSU5HX1RBR19XSVRIT1VUX1RSQU5TSVRJT04oKTsKK30KKwor
Y29uc3QgQ2xhc3NJbmZvIEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXM6OnNfaW5mbyA9IHsgIlRl
c3RDb25kaXRpb25hbEluY2x1ZGVzIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwg
Q1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzKSB9OworCitKU1Rl
c3RDb25kaXRpb25hbEluY2x1ZGVzOjpKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzKFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdENv
bmRpdGlvbmFsSW5jbHVkZXM+JiYgaW1wbCkKKyAgICA6IEpTRE9NV3JhcHBlcjxUZXN0Q29uZGl0
aW9uYWxJbmNsdWRlcz4oc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpCit7
Cit9CisKK3ZvaWQgSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlczo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBBU1NFUlQoaW5oZXJp
dHModm0sIGluZm8oKSkpOworCisgICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19iYXNlX29mPEFj
dGl2ZURPTU9iamVjdCwgVGVzdENvbmRpdGlvbmFsSW5jbHVkZXM+Ojp2YWx1ZSwgIkludGVyZmFj
ZSBpcyBub3QgbWFya2VkIGFzIFtBY3RpdmVET01PYmplY3RdIGV2ZW4gdGhvdWdoIGltcGxlbWVu
dGF0aW9uIGNsYXNzIHN1YmNsYXNzZXMgQWN0aXZlRE9NT2JqZWN0LiIpOworCit9CisKK0pTT2Jq
ZWN0KiBKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzOjpjcmVhdGVQcm90b3R5cGUoVk0mIHZtLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBKU1Rlc3RDb25k
aXRpb25hbEluY2x1ZGVzUHJvdG90eXBlOjpjcmVhdGUodm0sICZnbG9iYWxPYmplY3QsIEpTVGVz
dENvbmRpdGlvbmFsSW5jbHVkZXNQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgJmdsb2Jh
bE9iamVjdCwgZ2xvYmFsT2JqZWN0Lm9iamVjdFByb3RvdHlwZSgpKSk7Cit9CisKK0pTT2JqZWN0
KiBKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzOjpwcm90b3R5cGUoVk0mIHZtLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNU
ZXN0Q29uZGl0aW9uYWxJbmNsdWRlcz4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisKK0pTVmFsdWUg
SlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlczo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Db25zdHJ1
Y3RvcjxKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNv
bnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisKK3ZvaWQgSlNUZXN0
Q29uZGl0aW9uYWxJbmNsdWRlczo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKK3sKKyAgICBK
U1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0
Q29uZGl0aW9uYWxJbmNsdWRlcyo+KGNlbGwpOworICAgIHRoaXNPYmplY3QtPkpTVGVzdENvbmRp
dGlvbmFsSW5jbHVkZXM6On5KU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzKCk7Cit9CisKK3RlbXBs
YXRlPD4gaW5saW5lIEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMqIElETEF0dHJpYnV0ZTxKU1Rl
c3RDb25kaXRpb25hbEluY2x1ZGVzPjo6Y2FzdChKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQoreworICAgIHJldHVybiBqc0R5bmFt
aWNDYXN0PEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMqPihKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworfQorCit0ZW1wbGF0ZTw+
IGlubGluZSBKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzKiBJRExPcGVyYXRpb248SlNUZXN0Q29u
ZGl0aW9uYWxJbmNsdWRlcz46OmNhc3QoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSYgY2FsbEZyYW1lKQoreworICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpT
VGVzdENvbmRpdGlvbmFsSW5jbHVkZXMqPihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KSwgY2FsbEZyYW1lLnRoaXNWYWx1ZSgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0Q29u
ZGl0aW9uYWxJbmNsdWRlc0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICBW
TSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc1Byb3RvdHlwZSo+KHZtLCBKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQor
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdENvbmRpdGlvbmFsSW5j
bHVkZXM6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHBy
b3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKK30KKworYm9vbCBzZXRKU1Rlc3RDb25kaXRpb25h
bEluY2x1ZGVzQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQor
eworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byogcHJvdG90
eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzUHJvdG90eXBlKj4o
dm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3Rv
dHlwZSkpIHsKKyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBTaGFkb3dp
bmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgorICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdENvbmRpdGlvbmFs
SW5jbHVkZXNUZXN0QXR0ckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcyYgdGhpc09iamVjdCkKK3sKKyAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURM
RG91YmxlPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLnRlc3RBdHRyKCkp
KSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNUZXN0QXR0
cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RD
b25kaXRpb25hbEluY2x1ZGVzPjo6Z2V0PGpzVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNUZXN0QXR0
ckdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNWYWx1ZSwgInRlc3RBdHRyIik7Cit9CisKKyNpZiBFTkFCTEUoQ29uZGl0aW9u
MjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RD
b25kaXRpb25hbEluY2x1ZGVzSW5jbHVkZXNTdHIxR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzJiB0aGlzT2JqZWN0KQor
eworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Nj
b3BlLCAodG9KUzxJRExET01TdHJpbmc+KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUs
IGltcGwuaW5jbHVkZXNTdHIxKCkpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdENvbmRp
dGlvbmFsSW5jbHVkZXNJbmNsdWRlc1N0cjEoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJl
dHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcz46OmdldDxqc1Rlc3RD
b25kaXRpb25hbEluY2x1ZGVzSW5jbHVkZXNTdHIxR2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhh
dmlvcjo6QXNzZXJ0PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiaW5jbHVkZXNT
dHIxIik7Cit9CisKKyNlbmRpZgorCisjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUo
Q29uZGl0aW9uMjMpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Q29uZGl0aW9uYWxJbmNs
dWRlc0luY2x1ZGVzU3RyMkdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcyYgdGhpc09iamVjdCkKK3sKKyAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LndyYXBwZWQoKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKHRvSlM8SURM
RE9NU3RyaW5nPihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBpbXBsLmluY2x1ZGVz
U3RyMigpKSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDb25kaXRpb25hbEluY2x1ZGVz
SW5jbHVkZXNTdHIyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmli
dXRlPEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXM+OjpnZXQ8anNUZXN0Q29uZGl0aW9uYWxJbmNs
dWRlc0luY2x1ZGVzU3RyMkdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4o
KmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImluY2x1ZGVzU3RyMiIpOworfQorCisj
ZW5kaWYKKworI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQor
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNJbmNsdWRlc1N0
cjJTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdENvbmRp
dGlvbmFsSW5jbHVkZXMmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5n
PihsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBmYWxzZSk7CisgICAgQXR0cmlidXRlU2V0dGVyOjpjYWxsKGxleGljYWxHbG9i
YWxPYmplY3QsIHRocm93U2NvcGUsIFsmXSB7CisgICAgICAgIHJldHVybiBpbXBsLnNldEluY2x1
ZGVzU3RyMihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgfSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgc2V0SlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc0luY2x1ZGVzU3RyMihKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzPjo6c2V0PHNldEpTVGVzdENvbmRpdGlvbmFsSW5j
bHVkZXNJbmNsdWRlc1N0cjJTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUs
IGVuY29kZWRWYWx1ZSwgImluY2x1ZGVzU3RyMiIpOworfQorCisjZW5kaWYKKworI2lmIEVOQUJM
RShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQorc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNJbmNsdWRlc1N0cjNHZXR0ZXIoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMmIHRo
aXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IHJldHVybiB0aGlzT2JqZWN0LmluY2x1ZGVzU3RyMyhsZXhpY2FsR2xvYmFsT2JqZWN0KTsKK30K
KworRW5jb2RlZEpTVmFsdWUganNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc0luY2x1ZGVzU3RyMyhK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RDb25k
aXRpb25hbEluY2x1ZGVzPjo6Z2V0PGpzVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNJbmNsdWRlc1N0
cjNHZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQ+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aGlzVmFsdWUsICJpbmNsdWRlc1N0cjMiKTsKK30KKworI2VuZGlmCisKKyNpZiBF
TkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBzZXRKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzSW5jbHVkZXNTdHIzU2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVz
JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgdGhpc09iamVjdC5zZXRJbmNsdWRlc1N0cjMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IHNldEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNJbmNsdWRlc1N0cjMoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0Q29u
ZGl0aW9uYWxJbmNsdWRlcz46OnNldDxzZXRKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzSW5jbHVk
ZXNTdHIzU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFs
dWUsICJpbmNsdWRlc1N0cjMiKTsKK30KKworI2VuZGlmCisKKyNpZiBFTkFCTEUoQ29uZGl0aW9u
MjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RD
b25kaXRpb25hbEluY2x1ZGVzSW5jbHVkZXNOb2RlR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzJiB0aGlzT2JqZWN0KQor
eworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Nj
b3BlLCAodG9KUzxJRExJbnRlcmZhY2U8Tm9kZT4+KGxleGljYWxHbG9iYWxPYmplY3QsICp0aGlz
T2JqZWN0Lmdsb2JhbE9iamVjdCgpLCB0aHJvd1Njb3BlLCBpbXBsLmluY2x1ZGVzTm9kZSgpKSkp
OworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzSW5jbHVkZXNO
b2RlKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVz
dENvbmRpdGlvbmFsSW5jbHVkZXM+OjpnZXQ8anNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc0luY2x1
ZGVzTm9kZUdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydD4oKmxleGljYWxH
bG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgImluY2x1ZGVzTm9kZSIpOworfQorCisjZW5kaWYKKwor
I2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQorc3RhdGljIGlu
bGluZSBib29sIHNldEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNJbmNsdWRlc05vZGVTZXR0ZXIo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdENvbmRpdGlvbmFsSW5j
bHVkZXMmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVk
KCk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPE5vZGU+Pihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0F0dHJpYnV0ZVR5
cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIlRlc3RDb25kaXRpb25hbEluY2x1
ZGVzIiwgImluY2x1ZGVzTm9kZSIsICJOb2RlIik7IH0pOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZmFsc2UpOworICAgIEF0dHJpYnV0ZVNldHRlcjo6Y2FsbChsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBbJl0geworICAgICAgICByZXR1cm4gaW1wbC5zZXRJ
bmNsdWRlc05vZGUoKm5hdGl2ZVZhbHVlKTsKKyAgICB9KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBzZXRKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzSW5jbHVkZXNOb2RlKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpT
VGVzdENvbmRpdGlvbmFsSW5jbHVkZXM+OjpzZXQ8c2V0SlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRl
c0luY2x1ZGVzTm9kZVNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5j
b2RlZFZhbHVlLCAiaW5jbHVkZXNOb2RlIik7Cit9CisKKyNlbmRpZgorCisjaWYgKEVOQUJMRShD
b25kaXRpb24xMikgJiYgRU5BQkxFKENvbmRpdGlvbjIyKSkgfHwgRU5BQkxFKENvbmRpdGlvbjIz
KQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENvbmRpdGlvbmFsSW5j
bHVkZXNQcm90b3R5cGVGdW5jdGlvbkluY2x1ZGVzTWV0aG9kMUJvZHkoSlNDOjpKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlw
ZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXM+OjpDbGFzc1BhcmFt
ZXRlciBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxG
cmFtZSk7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICB0aHJv
d1Njb3BlLnJlbGVhc2UoKTsKKyAgICBpbXBsLmluY2x1ZGVzTWV0aG9kMSgpOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc1Byb3RvdHlwZUZ1bmN0aW9uSW5j
bHVkZXNNZXRob2QxKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkKK3sKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdENvbmRpdGlv
bmFsSW5jbHVkZXM+OjpjYWxsPGpzVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNQcm90b3R5cGVGdW5j
dGlvbkluY2x1ZGVzTWV0aG9kMUJvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1l
LCAiaW5jbHVkZXNNZXRob2QxIik7Cit9CisKKyNlbmRpZgorCisjaWYgKEVOQUJMRShDb25kaXRp
b24xMikgJiYgRU5BQkxFKENvbmRpdGlvbjIyKSkgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQorc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNQ
cm90b3R5cGVGdW5jdGlvbkluY2x1ZGVzTWV0aG9kMkJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUg
SURMT3BlcmF0aW9uPEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXM+OjpDbGFzc1BhcmFtZXRlciBj
YXN0ZWRUaGlzKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxGcmFtZSk7
CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBpZiAoVU5MSUtF
TFkoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPCAyKSkKKyAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgYXV0byogY29udGV4dCA9
IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKFVOTElLRUxZKCFjb250ZXh0KSkKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBFbnN1cmVTdGlsbEFs
aXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAg
ICBhdXRvIHN0ckFyZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgYXJndW1lbnQwLnZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50
MSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSk7CisgICAgYXV0byBvYmpBcmcgPSBj
b252ZXJ0PElETEludGVyZmFjZTxUZXN0T2JqPj4oKmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3Vt
ZW50MS52YWx1ZSgpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3IobGV4aWNh
bEdsb2JhbE9iamVjdCwgc2NvcGUsIDEsICJvYmpBcmciLCAiVGVzdENvbmRpdGlvbmFsSW5jbHVk
ZXMiLCAiaW5jbHVkZXNNZXRob2QyIiwgIlRlc3RPYmoiKTsgfSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8SURMSW50ZXJmYWNlPFRlc3RP
Ymo+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCB0
aHJvd1Njb3BlLCBpbXBsLmluY2x1ZGVzTWV0aG9kMigqY29udGV4dCwgV1RGTW92ZShzdHJBcmcp
LCAqb2JqQXJnKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RD
b25kaXRpb25hbEluY2x1ZGVzUHJvdG90eXBlRnVuY3Rpb25JbmNsdWRlc01ldGhvZDIoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQorewor
ICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcz46OmNhbGw8
anNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc1Byb3RvdHlwZUZ1bmN0aW9uSW5jbHVkZXNNZXRob2Qy
Qm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJpbmNsdWRlc01ldGhvZDIi
KTsKK30KKworI2VuZGlmCisKKyNpZiAoRU5BQkxFKENvbmRpdGlvbjEyKSAmJiBFTkFCTEUoQ29u
ZGl0aW9uMjIpKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc1Byb3RvdHlwZUZ1bmN0aW9uSW5j
bHVkZXNNZXRob2QzQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0
Q29uZGl0aW9uYWxJbmNsdWRlcz46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMpCit7CisgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBSRUxFQVNFX0FORF9S
RVRVUk4odGhyb3dTY29wZSwgKEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5pbmNsdWRlc01l
dGhvZDMoKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUpKSkpOworfQorCitFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNQcm90b3R5cGVG
dW5jdGlvbkluY2x1ZGVzTWV0aG9kMyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rl
c3RDb25kaXRpb25hbEluY2x1ZGVzPjo6Y2FsbDxqc1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzUHJv
dG90eXBlRnVuY3Rpb25JbmNsdWRlc01ldGhvZDNCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
KmNhbGxGcmFtZSwgImluY2x1ZGVzTWV0aG9kMyIpOworfQorCisjZW5kaWYKKworI2lmIChFTkFC
TEUoQ29uZGl0aW9uMTEpICYmIEVOQUJMRShDb25kaXRpb24xMikgJiYgRU5BQkxFKENvbmRpdGlv
bjIyKSkgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQorc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNQcm90b3R5cGVGdW5jdGlvbkluY2x1ZGVz
TWV0aG9kQ29uZGl0aW9uYWxCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxK
U1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcykKK3sK
KyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7Cisg
ICAgaW1wbC5pbmNsdWRlc01ldGhvZENvbmRpdGlvbmFsKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzUHJvdG90eXBlRnVuY3Rpb25JbmNsdWRlc01ldGhv
ZENvbmRpdGlvbmFsKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkKK3sKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdENvbmRpdGlv
bmFsSW5jbHVkZXM+OjpjYWxsPGpzVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNQcm90b3R5cGVGdW5j
dGlvbkluY2x1ZGVzTWV0aG9kQ29uZGl0aW9uYWxCb2R5PigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
KmNhbGxGcmFtZSwgImluY2x1ZGVzTWV0aG9kQ29uZGl0aW9uYWwiKTsKK30KKworI2VuZGlmCisK
KyNpZiAoRU5BQkxFKENvbmRpdGlvbjEyKSAmJiBFTkFCTEUoQ29uZGl0aW9uMjIpKSB8fCBFTkFC
TEUoQ29uZGl0aW9uMjMpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
Q29uZGl0aW9uYWxJbmNsdWRlc1Byb3RvdHlwZUZ1bmN0aW9uSW5jbHVkZXNNZXRob2RTZXR0aW5n
c0NvbmRpdGlvbmFsQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0
Q29uZGl0aW9uYWxJbmNsdWRlcz46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMpCit7CisgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHRocm93U2NvcGUucmVsZWFzZSgpOworICAgIGlt
cGwuaW5jbHVkZXNNZXRob2RTZXR0aW5nc0NvbmRpdGlvbmFsKCk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzUHJvdG90eXBlRnVuY3Rpb25JbmNsdWRlc01l
dGhvZFNldHRpbmdzQ29uZGl0aW9uYWwoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNU
ZXN0Q29uZGl0aW9uYWxJbmNsdWRlcz46OmNhbGw8anNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc1By
b3RvdHlwZUZ1bmN0aW9uSW5jbHVkZXNNZXRob2RTZXR0aW5nc0NvbmRpdGlvbmFsQm9keT4oKmxl
eGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJpbmNsdWRlc01ldGhvZFNldHRpbmdzQ29u
ZGl0aW9uYWwiKTsKK30KKworI2VuZGlmCisKKyNpZiAoRU5BQkxFKENvbmRpdGlvbjEyKSAmJiBF
TkFCTEUoQ29uZGl0aW9uMjIpKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCitzdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc1Byb3RvdHlwZUZ1
bmN0aW9uVGFrZU5vZGVzQm9keShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNU
ZXN0Q29uZGl0aW9uYWxJbmNsdWRlcz46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMpCit7Cisg
ICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIGF1dG8gaW1wbFJlc3VsdCA9IGltcGwudGFr
ZU5vZGVzKCk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIEpTVmFsdWU6OmVu
Y29kZSh0b0pTPElETFNlcXVlbmNlPElETEludGVyZmFjZTxOb2RlPj4+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURk1vdmUoaW1wbFJlc3VsdC5u
b2RlcykpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Q29uZGl0
aW9uYWxJbmNsdWRlc1Byb3RvdHlwZUZ1bmN0aW9uVGFrZU5vZGVzKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICByZXR1cm4g
SURMT3BlcmF0aW9uPEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXM+OjpjYWxsPGpzVGVzdENvbmRp
dGlvbmFsSW5jbHVkZXNQcm90b3R5cGVGdW5jdGlvblRha2VOb2Rlc0JvZHk+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAidGFrZU5vZGVzIik7Cit9CisKKyNlbmRpZgorCitKU0M6
Oklzb1N1YnNwYWNlKiBKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzOjpzdWJzcGFjZUZvckltcGwo
SlNDOjpWTSYgdm0pCit7CisgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZN
Q2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOworICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERh
dGEuc3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VG
b3JUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5nZXQoKSkKKyAgICAgICAgcmV0dXJuIHNwYWNlOwor
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9i
amVjdCwgSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcz4gfHwgIUpTVGVzdENvbmRpdGlvbmFsSW5j
bHVkZXM6Om5lZWRzRGVzdHJ1Y3Rpb24pOworICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNl
X29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRl
cz4pCisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMg
PSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5k
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTVGVzdENvbmRpdGlvbmFsSW5j
bHVkZXMpOworICAgIGVsc2UKKyAgICAgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q29uZGl0
aW9uYWxJbmNsdWRlcyA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklU
KHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTVGVzdENvbmRpdGlvbmFsSW5j
bHVkZXMpOworICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0Q29uZGl0
aW9uYWxJbmNsdWRlcy5nZXQoKTsKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUt
Y29kZSIpCitJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKKyAg
ICBpZiAoJkpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMg
IT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgICAgICBjbGllbnRE
YXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworSUdOT1JFX1dBUk5J
TkdTX0VORAorSUdOT1JFX1dBUk5JTkdTX0VORAorICAgIHJldHVybiBzcGFjZTsKK30KKwordm9p
ZCBKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhl
YXBBbmFseXplciYgYW5hbHl6ZXIpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzKj4oY2VsbCk7CisgICAgYW5hbHl6ZXIuc2V0V3JhcHBl
ZE9iamVjdEZvckNlbGwoY2VsbCwgJnRoaXNPYmplY3QtPndyYXBwZWQoKSk7CisgICAgaWYgKHRo
aXNPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAgYW5hbHl6ZXIuc2V0
TGFiZWxGb3JDZWxsKGNlbGwsICJ1cmwgIiArIHRoaXNPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+dXJsKCkuc3RyaW5nKCkpOworICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFu
YWx5emVyKTsKK30KKworYm9vbCBKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzT3duZXI6OmlzUmVh
Y2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2
b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCit7CisgICAg
VU5VU0VEX1BBUkFNKGhhbmRsZSk7CisgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOworICAgIFVO
VVNFRF9QQVJBTShyZWFzb24pOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBKU1Rlc3RD
b25kaXRpb25hbEluY2x1ZGVzT3duZXI6OmZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4gaGFuZGxlLCB2b2lkKiBjb250ZXh0KQoreworICAgIGF1dG8qIGpzVGVzdENvbmRpdGlvbmFs
SW5jbHVkZXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzKj4oaGFuZGxl
LnNsb3QoKS0+YXNDZWxsKCkpOworICAgIGF1dG8mIHdvcmxkID0gKnN0YXRpY19jYXN0PERPTVdy
YXBwZXJXb3JsZCo+KGNvbnRleHQpOworICAgIHVuY2FjaGVXcmFwcGVyKHdvcmxkLCAmanNUZXN0
Q29uZGl0aW9uYWxJbmNsdWRlcy0+d3JhcHBlZCgpLCBqc1Rlc3RDb25kaXRpb25hbEluY2x1ZGVz
KTsKK30KKworI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKKyNpZiBQTEFURk9STShXSU4p
CisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDQ4MykKK2V4dGVybiAiQyIgeyBleHRlcm4gdm9p
ZCAoKmNvbnN0IF9faWRlbnRpZmllcigiPz9fN1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzQFdlYkNv
cmVAQDZCQCIpW10pKCk7IH0KKyNlbHNlCitleHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQqIF9aVFZO
N1dlYkNvcmUyM1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzRVtdOyB9CisjZW5kaWYKKyNlbmRpZgor
CitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RDb25kaXRpb25hbEluY2x1ZGVz
PiYmIGltcGwpCit7CisKKyNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCisgICAgY29uc3Qg
dm9pZCogYWN0dWFsVlRhYmxlUG9pbnRlciA9IGdldFZUYWJsZVBvaW50ZXIoaW1wbC5wdHIoKSk7
CisjaWYgUExBVEZPUk0oV0lOKQorICAgIHZvaWQqIGV4cGVjdGVkVlRhYmxlUG9pbnRlciA9IF9f
aWRlbnRpZmllcigiPz9fN1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzQFdlYkNvcmVAQDZCQCIpOwor
I2Vsc2UKKyAgICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSAmX1pUVk43V2ViQ29yZTIz
VGVzdENvbmRpdGlvbmFsSW5jbHVkZXNFWzJdOworI2VuZGlmCisKKyAgICAvLyBJZiB0aGlzIGZh
aWxzIFRlc3RDb25kaXRpb25hbEluY2x1ZGVzIGRvZXMgbm90IGhhdmUgYSB2dGFibGUsIHNvIHlv
dSBuZWVkIHRvIGFkZCB0aGUKKyAgICAvLyBJbXBsZW1lbnRhdGlvbkxhY2tzVlRhYmxlIGF0dHJp
YnV0ZSB0byB0aGUgaW50ZXJmYWNlIGRlZmluaXRpb24KKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfcG9seW1vcnBoaWM8VGVzdENvbmRpdGlvbmFsSW5jbHVkZXM+Ojp2YWx1ZSwgIlRlc3RDb25k
aXRpb25hbEluY2x1ZGVzIGlzIG5vdCBwb2x5bW9ycGhpYyIpOworCisgICAgLy8gSWYgeW91IGhp
dCB0aGlzIGFzc2VydGlvbiB5b3UgZWl0aGVyIGhhdmUgYSB1c2UgYWZ0ZXIgZnJlZSBidWcsIG9y
CisgICAgLy8gVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMgaGFzIHN1YmNsYXNzZXMuIElmIFRlc3RD
b25kaXRpb25hbEluY2x1ZGVzIGhhcyBzdWJjbGFzc2VzIHRoYXQgZ2V0IHBhc3NlZAorICAgIC8v
IHRvIHRvSlMoKSB3ZSBjdXJyZW50bHkgcmVxdWlyZSBUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcyB5
b3UgdG8gb3B0IG91dCBvZiBiaW5kaW5nIGhhcmRlbmluZworICAgIC8vIGJ5IGFkZGluZyB0aGUg
U2tpcFZUYWJsZVZhbGlkYXRpb24gYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2UgSURMIGRlZmlu
aXRpb24KKyAgICBSRUxFQVNFX0FTU0VSVChhY3R1YWxWVGFibGVQb2ludGVyID09IGV4cGVjdGVk
VlRhYmxlUG9pbnRlcik7CisjZW5kaWYKKyAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxUZXN0Q29u
ZGl0aW9uYWxJbmNsdWRlcz4oZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKK30KKworSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMm
IGltcGwpCit7CisgICAgcmV0dXJuIHdyYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2Jq
ZWN0LCBpbXBsKTsKK30KKworVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMqIEpTVGVzdENvbmRpdGlv
bmFsSW5jbHVkZXM6OnRvV3JhcHBlZChKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQor
eworICAgIGlmIChhdXRvKiB3cmFwcGVyID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RDb25kaXRpb25h
bEluY2x1ZGVzKj4odm0sIHZhbHVlKSkKKyAgICAgICAgcmV0dXJuICZ3cmFwcGVyLT53cmFwcGVk
KCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENv
bmRpdGlvbmFsSW5jbHVkZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2Vu
ZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiVGVzdENvbmRp
dGlvbmFsSW5jbHVkZXMuaCIKKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzIDogcHVi
bGljIEpTRE9NV3JhcHBlcjxUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcz4geworcHVibGljOgorICAg
IHVzaW5nIEJhc2UgPSBKU0RPTVdyYXBwZXI8VGVzdENvbmRpdGlvbmFsSW5jbHVkZXM+OworICAg
IHN0YXRpYyBKU1Rlc3RDb25kaXRpb25hbEluY2x1ZGVzKiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RDb25k
aXRpb25hbEluY2x1ZGVzPiYmIGltcGwpCisgICAgeworICAgICAgICBKU1Rlc3RDb25kaXRpb25h
bEluY2x1ZGVzKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdENv
bmRpdGlvbmFsSW5jbHVkZXM+KGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwKSkgSlNUZXN0Q29uZGl0
aW9uYWxJbmNsdWRlcyhzdHJ1Y3R1cmUsICpnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOwor
ICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAg
IHJldHVybiBwdHI7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVBy
b3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKKyAgICBzdGF0aWMgSlNDOjpK
U09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0
YXRpYyBUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcyogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpT
VmFsdWUpOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKKworICAgIERF
Q0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNW
YWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSwgSlNDOjpOb25BcnJheSk7CisgICAgfQor
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3Qg
SlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNw
YWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6
OlZNJiB2bSkKKyAgICB7CisgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNw
YWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CisgICAgfQorICAgIHN0YXRpYyBKU0M6
Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyB2
b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CisKKyAgICAvLyBD
dXN0b20gYXR0cmlidXRlcworI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRp
dGlvbjIzKQorICAgIEpTQzo6SlNWYWx1ZSBpbmNsdWRlc1N0cjMoSlNDOjpKU0dsb2JhbE9iamVj
dCYpIGNvbnN0OworI2VuZGlmCisjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMjMpCisgICAgdm9pZCBzZXRJbmNsdWRlc1N0cjMoSlNDOjpKU0dsb2JhbE9iamVjdCYs
IEpTQzo6SlNWYWx1ZSk7CisjZW5kaWYKKworICAgIC8vIEN1c3RvbSBmdW5jdGlvbnMKKyNpZiAo
RU5BQkxFKENvbmRpdGlvbjEyKSAmJiBFTkFCTEUoQ29uZGl0aW9uMjIpKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMjMpCisgICAgSlNDOjpKU1ZhbHVlIGluY2x1ZGVzTWV0aG9kMyhKU0M6OkpTR2xvYmFs
T2JqZWN0JiwgSlNDOjpDYWxsRnJhbWUmKTsKKyNlbmRpZgorcHJvdGVjdGVkOgorICAgIEpTVGVz
dENvbmRpdGlvbmFsSW5jbHVkZXMoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYs
IFJlZjxUZXN0Q29uZGl0aW9uYWxJbmNsdWRlcz4mJik7CisKKyAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKEpTQzo6Vk0mKTsKK307CisKK2NsYXNzIEpTVGVzdENvbmRpdGlvbmFsSW5jbHVkZXNPd25l
ciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CitwdWJsaWM6CisgICAgdmlydHVhbCBi
b29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4s
IHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopOworICAgIHZp
cnR1YWwgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250
ZXh0KTsKK307CisKK2lubGluZSBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERP
TVdyYXBwZXJXb3JsZCYsIFRlc3RDb25kaXRpb25hbEluY2x1ZGVzKikKK3sKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8SlNUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc093bmVyPiBvd25lcjsKKyAg
ICByZXR1cm4gJm93bmVyLmdldCgpOworfQorCitpbmxpbmUgdm9pZCogd3JhcHBlcktleShUZXN0
Q29uZGl0aW9uYWxJbmNsdWRlcyogd3JhcHBhYmxlT2JqZWN0KQoreworICAgIHJldHVybiB3cmFw
cGFibGVPYmplY3Q7Cit9CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RDb25kaXRpb25hbEluY2x1ZGVzJik7CitpbmxpbmUg
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdENvbmRpdGlvbmFsSW5jbHVk
ZXMqIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2Jh
bE9iamVjdCwgKmltcGwpIDogSlNDOjpqc051bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlNOZXds
eUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRl
c3RDb25kaXRpb25hbEluY2x1ZGVzPiYmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5
Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VGVzdENvbmRpdGlvbmFsSW5jbHVkZXM+
JiYgaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQobGV4aWNhbEdsb2JhbE9i
amVjdCwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwo
KTsgfQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVz
dENvbmRpdGlvbmFsSW5jbHVkZXM+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU1Rlc3RD
b25kaXRpb25hbEluY2x1ZGVzOworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBUZXN0
Q29uZGl0aW9uYWxJbmNsdWRlcyo7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjY2NzA1KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJKU1Rlc3RDRVJlYWN0
aW9uc1N0cmluZ2lmaWVyLmgiCiAjaW5jbHVkZSAiSlNUZXN0Q2FsbFRyYWNlci5oIgogI2luY2x1
ZGUgIkpTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNU
ZXN0Q29uZGl0aW9uYWxJbmNsdWRlcy5oIgogI2luY2x1ZGUgIkpTVGVzdERPTUpJVC5oIgogI2lu
Y2x1ZGUgIkpTVGVzdERvbWFpblNlY3VyaXR5LmgiCiAjaW5jbHVkZSAiSlNUZXN0RW5hYmxlZEJ5
U2V0dGluZy5oIgpAQCAtMTg5LDYgKzE5MCw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdENhbGxiYWNrSW4KICNlbmRpZgogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxP
YmplY3RUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3RvcihKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwog
Ym9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0
b3JDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdFRlc3RDb25kaXRpb25hbEluY2x1ZGVzQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNU
ZXN0R2xvYmFsT2JqZWN0VGVzdENvbmRpdGlvbmFsSW5jbHVkZXNDb25zdHJ1Y3RvcihKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7
CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RET01KSVRDb25zdHJ1
Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOwogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RE9NSklUQ29uc3RydWN0
b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RG9t
YWluU2VjdXJpdHlDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwpAQCAtMzIyLDExICszMjUsMTEgQEAgdXNpbmcg
SlNUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0b3IgPSBKUwogCiBzdGF0aWMgY29uc3Qgc3RydWN0
IENvbXBhY3RIYXNoSW5kZXggSlNUZXN0R2xvYmFsT2JqZWN0VGFibGVJbmRleFsyNzBdID0gewog
ICAgIHsgLTEsIC0xIH0sCi0gICAgeyA0MSwgLTEgfSwKKyAgICB7IDQyLCAtMSB9LAogICAgIHsg
LTEsIC0xIH0sCiAgICAgeyAwLCAtMSB9LAogICAgIHsgOCwgMjY1IH0sCi0gICAgeyA0NSwgLTEg
fSwKKyAgICB7IDQ2LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LApAQCAtMzM0LDE1ICszMzcsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBD
b21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAotICAgIHsgNTQsIC0xIH0sCisgICAgeyA1NSwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDIzLCAtMSB9
LAorICAgIHsgMjQsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCi0gICAgeyA2NiwgLTEgfSwKKyAgICB7IDY3LCAtMSB9LAogICAgIHsgLTEs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAtMzU2LDE0ICszNTks
MTQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMzUsIC0xIH0s
CisgICAgeyAzNiwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA3MSwg
LTEgfSwKLSAgICB7IDEzLCAyNTkgfSwKKyAgICB7IDcyLCAtMSB9LAorICAgIHsgMTQsIDI1OSB9
LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAt
MzcxLDExICszNzQsMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpT
VAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAg
IHsgMzksIC0xIH0sCi0gICAgeyAyMCwgMjU2IH0sCisgICAgeyA0MCwgLTEgfSwKKyAgICB7IDIx
LCAyNTYgfSwKICAgICB7IDEwLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA0NiwgLTEg
fSwKKyAgICB7IDQ3LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LApAQCAtMzg0LDE0ICszODcsMTQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBD
b21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAotICAgIHsgMzcsIC0xIH0sCisgICAgeyAzOCwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDIyLCAyNjcgfSwKKyAg
ICB7IDIzLCAyNjcgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKQEAgLTQwNiwyNiArNDA5LDI2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFj
dEhhc2hJbmRleCBKU1QKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKLSAgICB7IDYwLCAtMSB9LAorICAgIHsgNjEsIC0xIH0sCiAgICAgeyAtMSwgLTEg
fSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAyNCwgMjU3IH0sCisgICAgeyAy
NSwgMjU3IH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDYxLCAtMSB9LAotICAgIHsgMTksIC0x
IH0sCisgICAgeyA2MiwgLTEgfSwKKyAgICB7IDIwLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMTgsIC0xIH0sCisgICAgeyAx
OSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEg
fSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMzYsIC0xIH0sCisgICAgeyAzNywgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyA0LCAtMSB9LApAQCAtNDMzLDQz
ICs0MzYsNDMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAg
IHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMjUs
IC0xIH0sCisgICAgeyAyNiwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgMiwgMjY5IH0s
Ci0gICAgeyAzOCwgLTEgfSwKKyAgICB7IDM5LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMjEsIC0xIH0sCisgICAgeyAyMiwg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA1OCwgLTEgfSwKKyAgICB7
IDU5LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAot
ICAgIHsgMjksIC0xIH0sCisgICAgeyAzMCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsg
NDMsIC0xIH0sCisgICAgeyA0NCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0x
IH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0g
ICAgeyA1MywgLTEgfSwKLSAgICB7IC0xLCAtMSB9LAotICAgIHsgMTQsIC0xIH0sCisgICAgeyA1
NCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAorICAgIHsgMTUsIC0xIH0sCiAgICAgeyAtMSwgLTEg
fSwKKyAgICB7IDEyLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAotICAgIHsgNDgsIC0xIH0sCisgICAgeyA0OSwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTQ3OSwxMiArNDgy
LDEyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1QKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDY3LCAtMSB9
LAorICAgIHsgNjgsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCi0gICAgeyAyOCwgLTEgfSwKLSAgICB7IDMyLCAyNjMgfSwKKyAgICB7IDI5
LCAtMSB9LAorICAgIHsgMzMsIDI2MyB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyA1LCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCkBAIC00OTQsOSArNDk3LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVj
dCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LAotICAgIHsgMTYsIDI1OCB9LAorICAgIHsgMTcsIDI1OCB9LAogICAg
IHsgLTEsIC0xIH0sCi0gICAgeyA2MiwgLTEgfSwKKyAgICB7IDYzLCAtMSB9LAogICAgIHsgLTEs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAtNTA1LDExICs1MDgs
MTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVAogICAgIHsgLTEs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMzQsIDI2OCB9
LAorICAgIHsgMzUsIDI2OCB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAxNywgLTEgfSwKKyAg
ICB7IDE4LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA2NSwgLTEgfSwKKyAgICB7IDY2
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LApAQCAtNTIzLDEyICs1MjYsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaElu
ZGV4IEpTVAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAotICAgIHsgNzAsIC0xIH0sCisgICAgeyA3MSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNDcs
IDI2NCB9LAorICAgIHsgNDgsIDI2NCB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEg
fSwKICAgICB7IDMsIC0xIH0sCkBAIC01NDUsNTIgKzU0OCw1MiBAQCBzdGF0aWMgY29uc3Qgc3Ry
dWN0IENvbXBhY3RIYXNoSW5kZXggSlNUCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IDEsIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDEyLCAtMSB9LAorICAgIHsgMTMsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwg
LTEgfSwKLSAgICB7IDQ5LCAyNjIgfSwKKyAgICB7IDUwLCAyNjIgfSwKICAgICB7IDExLCAyNjEg
fSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNjMsIC0xIH0sCisgICAgeyA2NCwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDE1LCAtMSB9
LAorICAgIHsgMTYsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDI2LCAtMSB9LAorICAg
IHsgMjcsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMzEs
IC0xIH0sCisgICAgeyAzMiwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKICAgICB7IDcsIC0xIH0sCi0gICAgeyA1MSwgLTEgfSwKLSAgICB7
IC0xLCAtMSB9LAogICAgIHsgNTIsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKKyAgICB7IDUzLCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAot
ICAgIHsgMjcsIDI2NiB9LAotICAgIHsgMzAsIDI2MCB9LAotICAgIHsgMzMsIC0xIH0sCi0gICAg
eyA0MCwgLTEgfSwKLSAgICB7IDQyLCAtMSB9LAotICAgIHsgNDQsIC0xIH0sCi0gICAgeyA1MCwg
LTEgfSwKLSAgICB7IDU1LCAtMSB9LAorICAgIHsgLTEsIC0xIH0sCisgICAgeyAyOCwgMjY2IH0s
CisgICAgeyAzMSwgMjYwIH0sCisgICAgeyAzNCwgLTEgfSwKKyAgICB7IDQxLCAtMSB9LAorICAg
IHsgNDMsIC0xIH0sCisgICAgeyA0NSwgLTEgfSwKKyAgICB7IDUxLCAtMSB9LAogICAgIHsgNTYs
IC0xIH0sCiAgICAgeyA1NywgLTEgfSwKLSAgICB7IDU5LCAtMSB9LAotICAgIHsgNjQsIC0xIH0s
Ci0gICAgeyA2OCwgLTEgfSwKKyAgICB7IDU4LCAtMSB9LAorICAgIHsgNjAsIC0xIH0sCisgICAg
eyA2NSwgLTEgfSwKICAgICB7IDY5LCAtMSB9LAorICAgIHsgNzAsIC0xIH0sCiB9OwogCiAKQEAg
LTYxNiw2ICs2MTksNyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0R2xvYmFs
CiAgICAgeyAwLCAwLCBOb0ludHJpbnNpYywgeyAwLCAwIH0gfSwKICNlbmRpZgogICAgIHsgIlRl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvciIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJf
dClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IpLCAoaW50cHRy
X3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0Q2xhc3NXaXRoSlNCdWlsdGluQ29uc3RydWN0b3JDb25zdHJ1Y3Rvcikg
fSB9LAorICAgIHsgIlRlc3RDb25kaXRpb25hbEluY2x1ZGVzIiwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGlu
dHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RHbG9i
YWxPYmplY3RUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc0NvbnN0cnVjdG9yKSwgKGludHB0cl90KSBz
dGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdENvbmRpdGlvbmFsSW5jbHVkZXNDb25zdHJ1Y3RvcikgfSB9LAogICAgIHsgIlRl
c3RET01KSVQiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlT
bG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3RET01KSVRDb25zdHJ1Y3Rv
ciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+
KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RET01KSVRDb25zdHJ1Y3RvcikgfSB9LAogICAgIHsg
IlRlc3REb21haW5TZWN1cml0eSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2Fz
dDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0VGVzdERvbWFp
blNlY3VyaXR5Q29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5
U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0RG9tYWluU2VjdXJp
dHlDb25zdHJ1Y3RvcikgfSB9LAogICAgIHsgIlRlc3RFbmFibGVkQnlTZXR0aW5nIiwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRy
aW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5j
Pihqc1Rlc3RHbG9iYWxPYmplY3RUZXN0RW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yKSwgKGlu
dHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNU
ZXN0R2xvYmFsT2JqZWN0VGVzdEVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvcikgfSB9LApAQCAt
NjkwLDcgKzY5NCw3IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RHbG9iYWwK
ICAgICB7ICJyZWd1bGFyT3BlcmF0aW9uIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkZ1bmN0aW9uKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRp
Y19jYXN0PFJhd05hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0
aW9uUmVndWxhck9wZXJhdGlvbiksIChpbnRwdHJfdCkgKDEpIH0gfSwKIH07CiAKLXN0YXRpYyBj
b25zdCBIYXNoVGFibGUgSlNUZXN0R2xvYmFsT2JqZWN0VGFibGUgPSB7IDcyLCAyNTUsIHRydWUs
IEpTVGVzdEdsb2JhbE9iamVjdDo6aW5mbygpLCBKU1Rlc3RHbG9iYWxPYmplY3RUYWJsZVZhbHVl
cywgSlNUZXN0R2xvYmFsT2JqZWN0VGFibGVJbmRleCB9Oworc3RhdGljIGNvbnN0IEhhc2hUYWJs
ZSBKU1Rlc3RHbG9iYWxPYmplY3RUYWJsZSA9IHsgNzMsIDI1NSwgdHJ1ZSwgSlNUZXN0R2xvYmFs
T2JqZWN0OjppbmZvKCksIEpTVGVzdEdsb2JhbE9iamVjdFRhYmxlVmFsdWVzLCBKU1Rlc3RHbG9i
YWxPYmplY3RUYWJsZUluZGV4IH07CiAvKiBIYXNoIHRhYmxlIGZvciBjb25zdHJ1Y3RvciAqLwog
CiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0R2xvYmFsT2JqZWN0Q29uc3RydWN0
b3JUYWJsZVZhbHVlc1tdID0KQEAgLTExODksNiArMTE5MywyOSBAQCBib29sIHNldEpTVGVzdEds
b2JhbE9iamVjdFRlc3RDbGFzc1dpdGhKCiAgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RH
bG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENsYXNzV2l0aEpTQnVp
bHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rv
ciIpOwogfQogCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdENv
bmRpdGlvbmFsSW5jbHVkZXNDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQoreworICAgIFVO
VVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gSlNUZXN0Q29uZGl0
aW9uYWxJbmNsdWRlczo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc0NvbnN0cnVjdG9yKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9i
amVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q29uZGl0aW9uYWxJbmNsdWRlc0NvbnN0
cnVjdG9yR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiVGVzdENvbmRp
dGlvbmFsSW5jbHVkZXMiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2Jh
bE9iamVjdFRlc3RDb25kaXRpb25hbEluY2x1ZGVzQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOworICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgor
ICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0Q29uZGl0aW9uYWxJbmNs
dWRlcyIpLCBzdHJsZW4oIlRlc3RDb25kaXRpb25hbEluY2x1ZGVzIikpLCB2YWx1ZSk7Cit9CisK
K2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENvbmRpdGlvbmFsSW5jbHVkZXNDb25zdHJ1
Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIElE
TEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0
VGVzdENvbmRpdGlvbmFsSW5jbHVkZXNDb25zdHJ1Y3RvclNldHRlcj4oKmxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdENvbmRpdGlvbmFsSW5jbHVkZXMi
KTsKK30KKwogc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RET01K
SVRDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9QQVJBTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCShyZXZpc2lvbiAy
NjY3MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
SW50ZXJmYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVk
ZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJKU0RP
TUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtMzksNiArNDAsNyBA
QAogI2luY2x1ZGUgIkpTVGVzdE5vZGUuaCIKICNpbmNsdWRlICJKU1Rlc3RPYmouaCIKICNpbmNs
dWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNp
bmNsdWRlICJUZXN0U3VwcGxlbWVudGFsLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0
YS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0J1aWx0aW5OYW1lcy5oPgpAQCAtODEsNiAr
ODMsMTIgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdAogI2lmIEVO
QUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQogSlNDOjpFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW5jbHVk
ZXNNZXRob2QzKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOwogI2VuZGlm
CisjaWYgKEVOQUJMRShDb25kaXRpb24xMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIyKSkgfHwgRU5B
QkxFKENvbmRpdGlvbjIzKQorSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW5jbHVkZXNNZXRob2RDb25kaXRpb25hbChKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpDYWxsRnJhbWUqKTsKKyNlbmRpZgorI2lmIEVOQUJMRShD
b25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQorSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW5jbHVkZXNNZXRo
b2RTZXR0aW5nc0NvbmRpdGlvbmFsKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFt
ZSopOworI2VuZGlmCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MjMpCiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNlUHJv
dG90eXBlRnVuY3Rpb25UYWtlTm9kZXMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZy
YW1lKik7CiAjZW5kaWYKQEAgLTM0OSw2ICszNTcsMTYgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJs
ZVZhbHVlIEpTVGVzdEludGVyZgogI2Vsc2UKICAgICB7IDAsIDAsIE5vSW50cmluc2ljLCB7IDAs
IDAgfSB9LAogI2VuZGlmCisjaWYgKEVOQUJMRShDb25kaXRpb24xMSkgJiYgRU5BQkxFKENvbmRp
dGlvbjIyKSkgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQorICAgIHsgImluY2x1ZGVzTWV0aG9kQ29u
ZGl0aW9uYWwiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZl
RnVuY3Rpb24+KGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW5jbHVkZXNNZXRob2RD
b25kaXRpb25hbCksIChpbnRwdHJfdCkgKDApIH0gfSwKKyNlbHNlCisgICAgeyAwLCAwLCBOb0lu
dHJpbnNpYywgeyAwLCAwIH0gfSwKKyNlbmRpZgorI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwg
RU5BQkxFKENvbmRpdGlvbjIzKQorICAgIHsgImluY2x1ZGVzTWV0aG9kU2V0dGluZ3NDb25kaXRp
b25hbCIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpGdW5j
dGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxSYXdOYXRpdmVGdW5j
dGlvbj4oanNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25JbmNsdWRlc01ldGhvZFNldHRp
bmdzQ29uZGl0aW9uYWwpLCAoaW50cHRyX3QpICgwKSB9IH0sCisjZWxzZQorICAgIHsgMCwgMCwg
Tm9JbnRyaW5zaWMsIHsgMCwgMCB9IH0sCisjZW5kaWYKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIp
IHx8IEVOQUJMRShDb25kaXRpb24yMykKICAgICB7ICJ0YWtlTm9kZXMiLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24pLCBOb0ludHJpbnNpYywg
eyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+KGpzVGVzdEludGVyZmFj
ZVByb3RvdHlwZUZ1bmN0aW9uVGFrZU5vZGVzKSwgKGludHB0cl90KSAoMCkgfSB9LAogI2Vsc2UK
QEAgLTQwNiw2ICs0MjQsMTggQEAgdm9pZCBKU1Rlc3RJbnRlcmZhY2VQcm90b3R5cGU6OmZpbmlz
aENyZQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICByZWlmeVN0YXRpY1By
b3BlcnRpZXModm0sIEpTVGVzdEludGVyZmFjZTo6aW5mbygpLCBKU1Rlc3RJbnRlcmZhY2VQcm90
b3R5cGVUYWJsZVZhbHVlcywgKnRoaXMpOworICAgIGJvb2wgaGFzRGlzYWJsZWRSdW50aW1lUHJv
cGVydGllcyA9IGZhbHNlOworI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRp
dGlvbjIzKQorICAgIGlmICghZG93bmNhc3Q8RG9jdW1lbnQ+KGpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KGdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKS0+c2V0dGlu
Z3MoKS50ZXN0U2V0dGluZ0VuYWJsZWQoKSkgeworICAgICAgICBoYXNEaXNhYmxlZFJ1bnRpbWVQ
cm9wZXJ0aWVzID0gdHJ1ZTsKKyAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oImluY2x1ZGVz
TWV0aG9kU2V0dGluZ3NDb25kaXRpb25hbCIpLCBzdHJsZW4oImluY2x1ZGVzTWV0aG9kU2V0dGlu
Z3NDb25kaXRpb25hbCIpKTsKKyAgICAgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNj
b3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpOworICAg
ICAgICBEZWxldGVQcm9wZXJ0eVNsb3Qgc2xvdDsKKyAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVBy
b3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCgpLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgIH0K
KyNlbmRpZgorICAgIGlmIChoYXNEaXNhYmxlZFJ1bnRpbWVQcm9wZXJ0aWVzICYmIHN0cnVjdHVy
ZSgpLT5pc0RpY3Rpb25hcnkoKSkKKyAgICAgICAgZmxhdHRlbkRpY3Rpb25hcnlPYmplY3Qodm0p
OwogICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wsIGdl
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuZW50cmllc1B1Ymxp
Y05hbWUoKSksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSkpOwogICAgIEpTQ19UT19TVFJJTkdfVEFHX1dJVEhPVVRfVFJBTlNJVElPTigpOwog
fQpAQCAtODcxLDYgKzkwMSw0NiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dEludGVyCiAKICNlbmRpZgogCisjaWYgKEVOQUJMRShDb25kaXRpb24xMSkgJiYgRU5BQkxFKENv
bmRpdGlvbjIyKSkgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQorc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW5jbHVkZXNNZXRo
b2RDb25kaXRpb25hbEJvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVz
dEludGVyZmFjZT46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
KyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOworICAgIHRocm93U2NvcGUucmVsZWFzZSgpOworICAgIGltcGwuaW5jbHVk
ZXNNZXRob2RDb25kaXRpb25hbCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJm
YWNlUHJvdG90eXBlRnVuY3Rpb25JbmNsdWRlc01ldGhvZENvbmRpdGlvbmFsKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICBy
ZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdEludGVyZmFjZT46OmNhbGw8anNUZXN0SW50ZXJmYWNl
UHJvdG90eXBlRnVuY3Rpb25JbmNsdWRlc01ldGhvZENvbmRpdGlvbmFsQm9keT4oKmxleGljYWxH
bG9iYWxPYmplY3QsICpjYWxsRnJhbWUsICJpbmNsdWRlc01ldGhvZENvbmRpdGlvbmFsIik7Cit9
CisKKyNlbmRpZgorCisjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MjMpCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlUHJv
dG90eXBlRnVuY3Rpb25JbmNsdWRlc01ldGhvZFNldHRpbmdzQ29uZGl0aW9uYWxCb2R5KEpTQzo6
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxs
RnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RJbnRlcmZhY2U+OjpDbGFzc1BhcmFt
ZXRlciBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxG
cmFtZSk7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICB0aHJv
d1Njb3BlLnJlbGVhc2UoKTsKKyAgICBpbXBsLmluY2x1ZGVzTWV0aG9kU2V0dGluZ3NDb25kaXRp
b25hbCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisK
K0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVu
Y3Rpb25JbmNsdWRlc01ldGhvZFNldHRpbmdzQ29uZGl0aW9uYWwoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIHJldHVybiBJ
RExPcGVyYXRpb248SlNUZXN0SW50ZXJmYWNlPjo6Y2FsbDxqc1Rlc3RJbnRlcmZhY2VQcm90b3R5
cGVGdW5jdGlvbkluY2x1ZGVzTWV0aG9kU2V0dGluZ3NDb25kaXRpb25hbEJvZHk+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiaW5jbHVkZXNNZXRob2RTZXR0aW5nc0NvbmRpdGlv
bmFsIik7Cit9CisKKyNlbmRpZgorCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUo
Q29uZGl0aW9uMjMpCiBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW50
ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25UYWtlTm9kZXNCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1l
IElETE9wZXJhdGlvbjxKU1Rlc3RJbnRlcmZhY2U+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlz
KQogewpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAkocmV2aXNpb24gMjY2NzA1KQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC05
MSw5ICs5MSw2IEBAIHR5cGVkZWYgVVNWU3RyaW5nIENTU09NU3RyaW5nOwogICAgIERPTVN0cmlu
Zz8gcHJvbXB0KG9wdGlvbmFsIERPTVN0cmluZyBtZXNzYWdlID0gIiIsIG9wdGlvbmFsIERPTVN0
cmluZyBkZWZhdWx0VmFsdWUgPSAiIik7CiAgICAgdW5kZWZpbmVkIHByaW50KCk7CiAKLSAgICBs
b25nIHJlcXVlc3RBbmltYXRpb25GcmFtZShSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjayBj
YWxsYmFjayk7IC8vIEZJWE1FOiBTaG91bGQgcmV0dXJuIGFuIHVuc2lnbmVkIGxvbmcuCi0gICAg
dW5kZWZpbmVkIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGxvbmcgaGFuZGxlKTsgLy8gRklYTUU6IGhh
bmRsZSBzaG91bGQgYmUgYW4gdW5zaWduZWQgbG9uZy4KLQogICAgIFtFbmFibGVkQnlTZXR0aW5n
PXJlcXVlc3RJZGxlQ2FsbGJhY2tdIHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkbGVDYWxsYmFjayhJ
ZGxlUmVxdWVzdENhbGxiYWNrIGNhbGxiYWNrLCBvcHRpb25hbCBJZGxlUmVxdWVzdE9wdGlvbnMg
b3B0aW9ucyk7CiAgICAgW0VuYWJsZWRCeVNldHRpbmc9cmVxdWVzdElkbGVDYWxsYmFja10gdW5k
ZWZpbmVkIGNhbmNlbElkbGVDYWxsYmFjayh1bnNpZ25lZCBsb25nIGhhbmRsZSk7CiAKQEAgLTIx
Miw2ICsyMDksNyBAQCB0eXBlZGVmIFVTVlN0cmluZyBDU1NPTVN0cmluZzsKICAgVVNWU3RyaW5n
IHRhcmdldE9yaWdpbiA9ICIvIjsKIH07CiAKK0RPTVdpbmRvdyBpbmNsdWRlcyBBbmltYXRpb25G
cmFtZVByb3ZpZGVyOwogRE9NV2luZG93IGluY2x1ZGVzIEdsb2JhbENyeXB0bzsKIERPTVdpbmRv
dyBpbmNsdWRlcyBHbG9iYWxFdmVudEhhbmRsZXJzOwogRE9NV2luZG93IGluY2x1ZGVzIEdsb2Jh
bFBlcmZvcm1hbmNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9EZWRpY2F0ZWRXb3Jr
ZXJHbG9iYWxTY29wZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9E
ZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5pZGwJKHJldmlzaW9uIDI2NjcwNSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3dvcmtlcnMvRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuaWRsCSh3b3JraW5n
IGNvcHkpCkBAIC00MiwxMCArNDIsOSBAQAogICAgIFtDYWxsV2l0aD1HbG9iYWxPYmplY3QsIE1h
eVRocm93RXhjZXB0aW9uXSB1bmRlZmluZWQgcG9zdE1lc3NhZ2UoYW55IG1lc3NhZ2UsIHNlcXVl
bmNlPG9iamVjdD4gdHJhbnNmZXIpOwogICAgIFtDYWxsV2l0aD1HbG9iYWxPYmplY3QsIE1heVRo
cm93RXhjZXB0aW9uXSB1bmRlZmluZWQgcG9zdE1lc3NhZ2UoYW55IG1lc3NhZ2UsIG9wdGlvbmFs
IFBvc3RNZXNzYWdlT3B0aW9ucyBvcHRpb25zKTsKIAotICAgIFtDb25kaXRpb25hbD1PRkZTQ1JF
RU5fQ0FOVkFTLCBFbmFibGVkQXRSdW50aW1lPU9mZnNjcmVlbkNhbnZhc10gbG9uZyByZXF1ZXN0
QW5pbWF0aW9uRnJhbWUoUmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2sgY2FsbGJhY2spOyAv
LyBGSVhNRTogU2hvdWxkIHJldHVybiBhbiB1bnNpZ25lZCBsb25nLgotICAgIFtDb25kaXRpb25h
bD1PRkZTQ1JFRU5fQ0FOVkFTLCBFbmFibGVkQXRSdW50aW1lPU9mZnNjcmVlbkNhbnZhc10gdW5k
ZWZpbmVkIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGxvbmcgaGFuZGxlKTsgLy8gRklYTUU6IGhhbmRs
ZSBzaG91bGQgYmUgYW4gdW5zaWduZWQgbG9uZy4KLQogICAgIHVuZGVmaW5lZCBjbG9zZSgpOwog
CiAgICAgYXR0cmlidXRlIEV2ZW50SGFuZGxlciBvbm1lc3NhZ2U7CiB9OworCitbQ29uZGl0aW9u
YWw9T0ZGU0NSRUVOX0NBTlZBUywgRW5hYmxlZEF0UnVudGltZT1PZmZzY3JlZW5DYW52YXNdIERl
ZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlIGluY2x1ZGVzIEFuaW1hdGlvbkZyYW1lUHJvdmlkZXI7
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>