<?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>81127</bug_id>
          
          <creation_ts>2012-03-14 09:45:45 -0700</creation_ts>
          <short_desc>Add TransferList IDL modifier, with support in V8 code gen.</short_desc>
          <delta_ts>2012-03-16 01:56:37 -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>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>80200</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Greg Billock">gbillock</reporter>
          <assigned_to name="Greg Billock">gbillock</assigned_to>
          <cc>abarth</cc>
    
    <cc>dslomov</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>578498</commentid>
    <comment_count>0</comment_count>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-03-14 09:45:45 -0700</bug_when>
    <thetext>Add TransferList IDL modifier, with support in V8 code gen.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578499</commentid>
    <comment_count>1</comment_count>
      <attachid>131871</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-03-14 09:46:32 -0700</bug_when>
    <thetext>Created attachment 131871
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578504</commentid>
    <comment_count>2</comment_count>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-03-14 09:49:04 -0700</bug_when>
    <thetext>This is the codegen I think we want to support transfer lists. This will hopefully be useful for postMessage as well, where that appears.

Please tell me where I can do better with the perl! It&apos;s been a while, and I fully believe there are better ways to do some of what I want.

You&apos;ll notice the test files are a bit messy. I made another change which just changes the test IDL and results, without adding implementation, and diffed against that, this is a lot more focused. Let me know if you&apos;d like that checked in separately to make this easier to read.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578523</commentid>
    <comment_count>3</comment_count>
      <attachid>131871</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2012-03-14 10:15:39 -0700</bug_when>
    <thetext>Comment on attachment 131871
Patch

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

I think this generally goes in the right direction. Some comments below.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1521
&gt; +    # I think there&apos;s a better way to do this, but my perl fu is weak. :-(

My perl-fu is weak too but this code has one advantage for me: I can understand it :)

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1599
&gt; +                    next;  # weak sauce! do we have runtime errors? IDL error: TransferList refs a nonexistent param

Hmm IDLParser.pm suggests you go 
   die(&quot;Error message&quot;)

&gt; Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:285
&gt; +    RefPtr&lt;SerializedScriptValue&gt; data(SerializedScriptValue::create(exec, MAYBE_MISSING_PARAMETER(exec, 0, DefaultIsUndefined)));

No transfer list for JSC yet? 
Either implement or file a separate bug to get it implemented.

&gt; Source/WebCore/bindings/scripts/test/TestSerializedScriptValueInterface.idl:32
&gt; +        Constructor(in DOMString hello, in [TransferList=transferList] SerializedScriptValue data, in [Optional] Array transferList),

Test for multiple SSV+transferList pairs?
I know we do not have a use case for such yet but if we implement the attribute we should better get it right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578650</commentid>
    <comment_count>4</comment_count>
      <attachid>131871</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-14 12:32:17 -0700</bug_when>
    <thetext>Comment on attachment 131871
Patch

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

This looks good to me, but Kentaro might have some thoughts.

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1599
&gt;&gt; +                    next;  # weak sauce! do we have runtime errors? IDL error: TransferList refs a nonexistent param
&gt; 
&gt; Hmm IDLParser.pm suggests you go 
&gt;    die(&quot;Error message&quot;)

Yeah, die is appropriate here.

&gt; Source/WebCore/bindings/scripts/IDLAttributes.txt:100
&gt; +TransferList=*

Please consider adding some documentation about how to use this feature to https://trac.webkit.org/wiki/WebKitIDL after this patch lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578790</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-14 14:36:24 -0700</bug_when>
    <thetext>Attachment 131871 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:68:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:73:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:177:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 3 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578977</commentid>
    <comment_count>6</comment_count>
      <attachid>131871</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-14 17:37:50 -0700</bug_when>
    <thetext>Comment on attachment 131871
Patch

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

Looks good to me, except for several Nits I and other reviewers pointed out.

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1521
&gt;&gt; +    # I think there&apos;s a better way to do this, but my perl fu is weak. :-(
&gt; 
&gt; My perl-fu is weak too but this code has one advantage for me: I can understand it :)

Yeah, this code is readable. This is good.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1547
&gt; +    my @allParameterNames = ();
&gt; +    foreach my $parameter (@{$function-&gt;parameters}) {
&gt; +        push(@allParameterNames, $parameter-&gt;name);
&gt; +    }

Nit: Shall we move this code into the &apos;if ($parameter-&gt;extendedAttributes-&gt;{&quot;TransferList&quot;})&apos; block?

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1597
&gt; +                $paramTransferListIndex = GetIndexOf($paramTransferListName, @allParameterNames);

Nit FYI: Perl-er would write &apos;$paramTransferListIndex = grep { $allParameterNames[$_] eq $paramTransferListName } 0..$#allParameterNames&apos;. But GetIndexOf() is better for readability.

&gt;&gt; Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:285
&gt;&gt; +    RefPtr&lt;SerializedScriptValue&gt; data(SerializedScriptValue::create(exec, MAYBE_MISSING_PARAMETER(exec, 0, DefaultIsUndefined)));
&gt; 
&gt; No transfer list for JSC yet? 
&gt; Either implement or file a separate bug to get it implemented.

Same comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579004</commentid>
    <comment_count>7</comment_count>
      <attachid>131871</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-03-14 18:14:18 -0700</bug_when>
    <thetext>Comment on attachment 131871
Patch

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

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1547
&gt;&gt; +    }
&gt; 
&gt; Nit: Shall we move this code into the &apos;if ($parameter-&gt;extendedAttributes-&gt;{&quot;TransferList&quot;})&apos; block?

I was just passing in $function-&gt;parameters to the GetIndexOf function, but it wasn&apos;t working at all. I still don&apos;t understand why. Maybe it was still while I was fighting the array parameter... I agree this is kind of ugly sitting here, and I would like to believe there&apos;s a neat way to do this all at once. Something like python filters?

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1597
&gt;&gt; +                $paramTransferListIndex = GetIndexOf($paramTransferListName, @allParameterNames);
&gt; 
&gt; Nit FYI: Perl-er would write &apos;$paramTransferListIndex = grep { $allParameterNames[$_] eq $paramTransferListName } 0..$#allParameterNames&apos;. But GetIndexOf() is better for readability.

Would that combine nicely with @($function-&gt;parameters)? I have forgotten much of the perl I once knew, so it&apos;s like I can almost remember that this should be easy. :-/

&gt;&gt; Source/WebCore/bindings/scripts/IDLAttributes.txt:100
&gt;&gt; +TransferList=*
&gt; 
&gt; Please consider adding some documentation about how to use this feature to https://trac.webkit.org/wiki/WebKitIDL after this patch lands.

Definitely -- it&apos;s on my list. Thanks for noting that here in the bug thread, though.

&gt;&gt; Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:68
&gt;&gt; +    if (data != NULL) {
&gt; 
&gt; Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]

These are code-genned, but I don&apos;t think it&apos;s in my change. Shall I hunt it down?

&gt;&gt;&gt; Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:285
&gt;&gt;&gt; +    RefPtr&lt;SerializedScriptValue&gt; data(SerializedScriptValue::create(exec, MAYBE_MISSING_PARAMETER(exec, 0, DefaultIsUndefined)));
&gt;&gt; 
&gt;&gt; No transfer list for JSC yet? 
&gt;&gt; Either implement or file a separate bug to get it implemented.
&gt; 
&gt; Same comment.

I&apos;ll keep this change on V8 and file a separate bug.

&gt;&gt; Source/WebCore/bindings/scripts/test/TestSerializedScriptValueInterface.idl:32
&gt;&gt; +        Constructor(in DOMString hello, in [TransferList=transferList] SerializedScriptValue data, in [Optional] Array transferList),
&gt; 
&gt; Test for multiple SSV+transferList pairs?
&gt; I know we do not have a use case for such yet but if we implement the attribute we should better get it right.

oy! Good edge case. Would such a function signature even arise, though?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579005</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-14 18:17:02 -0700</bug_when>
    <thetext>&gt; &gt;&gt; Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:68
&gt; &gt;&gt; +    if (data != NULL) {
&gt; &gt; 
&gt; &gt; Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
&gt; 
&gt; These are code-genned, but I don&apos;t think it&apos;s in my change. Shall I hunt it down?

It&apos;s a yak that we should shave one day, but that day doesn&apos;t need to be today.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579010</commentid>
    <comment_count>9</comment_count>
      <attachid>131871</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-14 18:24:47 -0700</bug_when>
    <thetext>Comment on attachment 131871
Patch

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

&gt;&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1547
&gt;&gt;&gt; +    my @allParameterNames = ();
&gt;&gt;&gt; +    foreach my $parameter (@{$function-&gt;parameters}) {
&gt;&gt;&gt; +        push(@allParameterNames, $parameter-&gt;name);
&gt;&gt;&gt; +    }
&gt;&gt; 
&gt;&gt; Nit: Shall we move this code into the &apos;if ($parameter-&gt;extendedAttributes-&gt;{&quot;TransferList&quot;})&apos; block?
&gt; 
&gt; I was just passing in $function-&gt;parameters to the GetIndexOf function, but it wasn&apos;t working at all. I still don&apos;t understand why. Maybe it was still while I was fighting the array parameter... I agree this is kind of ugly sitting here, and I would like to believe there&apos;s a neat way to do this all at once. Something like python filters?

Ah, I just meant, you can move the following whole code:

 1544 my @allParameterNames = ();
 1545    foreach my $parameter (@{$function-&gt;parameters}) {
 1546        push(@allParameterNames, $parameter-&gt;name);
 1547    }

into the if block, because the code is used by the if block only.

&gt;&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1597
&gt;&gt;&gt; +                $paramTransferListIndex = GetIndexOf($paramTransferListName, @allParameterNames);
&gt;&gt; 
&gt;&gt; Nit FYI: Perl-er would write &apos;$paramTransferListIndex = grep { $allParameterNames[$_] eq $paramTransferListName } 0..$#allParameterNames&apos;. But GetIndexOf() is better for readability.
&gt; 
&gt; Would that combine nicely with @($function-&gt;parameters)? I have forgotten much of the perl I once knew, so it&apos;s like I can almost remember that this should be easy. :-/

No. @allParameterNames is an array of all names in @{$function-&gt;parameters}. If you do not want to introduce @allParameterNames, the code would look like

    $paramTransferListIndex = grep { ${$function-&gt;parameters}[$_]-&gt;name eq $paramTransferListName } 0..$#{$function-&gt;parameters};

which is far from readable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579051</commentid>
    <comment_count>10</comment_count>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2012-03-14 19:17:03 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 131871 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=131871&amp;action=review

&gt; &gt;&gt; Source/WebCore/bindings/scripts/test/TestSerializedScriptValueInterface.idl:32
&gt; &gt;&gt; +        Constructor(in DOMString hello, in [TransferList=transferList] SerializedScriptValue data, in [Optional] Array transferList),
&gt; &gt; 
&gt; &gt; Test for multiple SSV+transferList pairs?
&gt; &gt; I know we do not have a use case for such yet but if we implement the attribute we should better get it right.
&gt; 
&gt; oy! Good edge case. Would such a function signature even arise, though?

Who knows? However if we ship a generator with support of an attribute on an argument, we should support attribute on multiple arguments.
If we do not want to support specifying attribute on multiple arguments, let&apos;s have an attribute on a method instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579565</commentid>
    <comment_count>11</comment_count>
      <attachid>131871</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-03-15 11:27:45 -0700</bug_when>
    <thetext>Comment on attachment 131871
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1547
&gt;&gt;&gt;&gt; +    }
&gt;&gt;&gt; 
&gt;&gt;&gt; Nit: Shall we move this code into the &apos;if ($parameter-&gt;extendedAttributes-&gt;{&quot;TransferList&quot;})&apos; block?
&gt;&gt; 
&gt;&gt; I was just passing in $function-&gt;parameters to the GetIndexOf function, but it wasn&apos;t working at all. I still don&apos;t understand why. Maybe it was still while I was fighting the array parameter... I agree this is kind of ugly sitting here, and I would like to believe there&apos;s a neat way to do this all at once. Something like python filters?
&gt; 
&gt; Ah, I just meant, you can move the following whole code:
&gt; 
&gt;  1544 my @allParameterNames = ();
&gt;  1545    foreach my $parameter (@{$function-&gt;parameters}) {
&gt;  1546        push(@allParameterNames, $parameter-&gt;name);
&gt;  1547    }
&gt; 
&gt; into the if block, because the code is used by the if block only.

Yeah, the code to do it in-place looked kind of nasty. Moved this block in. It is definitely more readable. Can&apos;t shake the feeling that there&apos;s a good alternative, but I can&apos;t produce it. :-/

&gt;&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1599
&gt;&gt;&gt; +                    next;  # weak sauce! do we have runtime errors? IDL error: TransferList refs a nonexistent param
&gt;&gt; 
&gt;&gt; Hmm IDLParser.pm suggests you go 
&gt;&gt;    die(&quot;Error message&quot;)
&gt; 
&gt; Yeah, die is appropriate here.

Fixed up. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579566</commentid>
    <comment_count>12</comment_count>
      <attachid>132084</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-03-15 11:28:01 -0700</bug_when>
    <thetext>Created attachment 132084
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579571</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-15 11:32:12 -0700</bug_when>
    <thetext>Attachment 132084 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:68:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:73:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:118:  messagePortArray_transferList is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:119:  arrayBufferArray_transferList is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:165:  messagePortArray_transferList is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:166:  arrayBufferArray_transferList is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:177:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 7 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579583</commentid>
    <comment_count>14</comment_count>
      <attachid>132089</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-03-15 11:38:39 -0700</bug_when>
    <thetext>Created attachment 132089
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579590</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-15 11:42:34 -0700</bug_when>
    <thetext>Attachment 132089 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:68:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:73:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:91:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:96:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:101:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:106:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:118:  messagePortArray_transferList is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:119:  arrayBufferArray_transferList is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:144:  messagePortArray_tx is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:145:  arrayBufferArray_tx is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:162:  messagePortArray_txx is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:163:  arrayBufferArray_txx is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:210:  messagePortArray_transferList is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:211:  arrayBufferArray_transferList is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:222:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 15 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579591</commentid>
    <comment_count>16</comment_count>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-03-15 11:43:19 -0700</bug_when>
    <thetext>The second patch adds the multi-arg test Dmitry asked for. Good thing, since it shook loose a bug. :-)

The tangential diffs in the test files are now quite large. Sorry about that. :-/ They are all mechanical except the changes in V8TestSerializedScriptInterface.cpp

I used &quot;_&lt;&lt;argname&gt;&gt;&quot; as a suffix for the intermediate args to cut the C++ compiler some slack, but that makes the lint checker unhappy. Should I just omit the &quot;_&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579623</commentid>
    <comment_count>17</comment_count>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2012-03-15 12:12:15 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; The second patch adds the multi-arg test Dmitry asked for. Good thing, since it shook loose a bug. :-)

Right, I thought I see the bug in your codegen ;)) Asking for a test is the polite way of pointing it out :))))).

&gt; 
&gt; The tangential diffs in the test files are now quite large. Sorry about that. :-/ They are all mechanical except the changes in V8TestSerializedScriptInterface.cpp
&gt; 
&gt; I used &quot;_&lt;&lt;argname&gt;&gt;&quot; as a suffix for the intermediate args to cut the C++ compiler some slack, but that makes the lint checker unhappy. Should I just omit the &quot;_&quot;?

Let&apos;s not add more style errors to our codegen. I suggest removing the underscore and capitalizing parameter name (messagePortArrayArg1).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579625</commentid>
    <comment_count>18</comment_count>
      <attachid>132089</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2012-03-15 12:16:45 -0700</bug_when>
    <thetext>Comment on attachment 132089
Patch

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

&gt; Source/WebCore/bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.cpp:133
&gt; +    impl()-&gt;acceptTransferList(WebCore::SerializedScriptValue::create(WTF::String(data)), toWebCore(transferList));

Hmm I thought about this further - now I am not sure about these CPP bindings? Do they even compile? What type toWebCore(transferList) has here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579697</commentid>
    <comment_count>19</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-15 13:44:06 -0700</bug_when>
    <thetext>&gt; Hmm I thought about this further - now I am not sure about these CPP bindings? Do they even compile? What type toWebCore(transferList) has here?

Let&apos;s not worry too much about the CPP bindings.  These tests files don&apos;t need to compile.  They exist for visual diffing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579707</commentid>
    <comment_count>20</comment_count>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2012-03-15 13:56:04 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; &gt; Hmm I thought about this further - now I am not sure about these CPP bindings? Do they even compile? What type toWebCore(transferList) has here?
&gt; 
&gt; Let&apos;s not worry too much about the CPP bindings.  These tests files don&apos;t need to compile.  They exist for visual diffing.

Well, ideally the idl should produce something the compiles for C++. I do not see how this signature can make sense for C++ or ObjC. 

AFAIU, we do not really have a precedent for that in WebKit today - all methods that _accept SSV as a parameterhave custom bindings (correct me if I am wrong).
Anyway, looks like we do not have to fix this for this patch, but I am eager to see how this pans out in real-life use-case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579724</commentid>
    <comment_count>21</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-15 14:11:57 -0700</bug_when>
    <thetext>I wouldn&apos;t spend any time worrying about the CPP bindings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579769</commentid>
    <comment_count>22</comment_count>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-03-15 14:56:15 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #16)
&gt; &gt; The second patch adds the multi-arg test Dmitry asked for. Good thing, since it shook loose a bug. :-)
&gt; 
&gt; Right, I thought I see the bug in your codegen ;)) Asking for a test is the polite way of pointing it out :))))).

:-) Feel free to directly point out any bugs you see.

&gt; &gt; 
&gt; &gt; The tangential diffs in the test files are now quite large. Sorry about that. :-/ They are all mechanical except the changes in V8TestSerializedScriptInterface.cpp
&gt; &gt; 
&gt; &gt; I used &quot;_&lt;&lt;argname&gt;&gt;&quot; as a suffix for the intermediate args to cut the C++ compiler some slack, but that makes the lint checker unhappy. Should I just omit the &quot;_&quot;?
&gt; 
&gt; Let&apos;s not add more style errors to our codegen. I suggest removing the underscore and capitalizing parameter name (messagePortArrayArg1).

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579772</commentid>
    <comment_count>23</comment_count>
      <attachid>132128</attachid>
    <who name="Greg Billock">gbillock</who>
    <bug_when>2012-03-15 14:59:19 -0700</bug_when>
    <thetext>Created attachment 132128
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579780</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-15 15:02:52 -0700</bug_when>
    <thetext>Attachment 132128 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:68:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:73:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:91:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:96:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:101:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:106:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:222:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 7 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579789</commentid>
    <comment_count>25</comment_count>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2012-03-15 15:08:53 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; (In reply to comment #17)
&gt; &gt; (In reply to comment #16)
&gt; &gt; &gt; The second patch adds the multi-arg test Dmitry asked for. Good thing, since it shook loose a bug. :-)
&gt; &gt; 
&gt; &gt; Right, I thought I see the bug in your codegen ;)) Asking for a test is the polite way of pointing it out :))))).
&gt; 
&gt; :-) Feel free to directly point out any bugs you see.

Sorry I didn&apos;t mean to sound arrogant - I&apos;d say I suspected there was a bug... If I was 100% sure I would have pointed it directly..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579792</commentid>
    <comment_count>26</comment_count>
      <attachid>132128</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2012-03-15 15:10:10 -0700</bug_when>
    <thetext>Comment on attachment 132128
Patch

This looks good to me. I defer to Perl experts for perl review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579834</commentid>
    <comment_count>27</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-15 15:50:22 -0700</bug_when>
    <thetext>&gt; This looks good to me. I defer to Perl experts for perl review.

Thanks.  This looks good to me.  If folks have more comments, we can iterate from here.  Hopefully this will unblock the WebIntents work though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580287</commentid>
    <comment_count>28</comment_count>
      <attachid>132128</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-16 01:56:31 -0700</bug_when>
    <thetext>Comment on attachment 132128
Patch

Clearing flags on attachment: 132128

Committed r110972: &lt;http://trac.webkit.org/changeset/110972&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580288</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-16 01:56:37 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131871</attachid>
            <date>2012-03-14 09:46:32 -0700</date>
            <delta_ts>2012-03-15 11:27:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81127-20120314094631.patch</filename>
            <type>text/plain</type>
            <size>34947</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwNDExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGQ3ZGVhNDA5OGEwYzQ2
ODVhNGQwMDBlMmNhNTVhZWM5NTAwYTNmOC4uZTk2MTQyMWJiMDQyM2FmOTMwZDYzMWU5ODJjMDg1
M2RkYjMyZDc5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDEyLTAzLTE0ICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIEFkZCBUcmFuc2Zlckxp
c3QgSURMIG1vZGlmaWVyLCB3aXRoIHN1cHBvcnQgaW4gVjggY29kZSBnZW4uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTEyNworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgIChHZW5lcmF0ZUZ1bmN0aW9uQ2FsbGJhY2spOgor
ICAgICAgICAoR2V0SW5kZXhPZik6CisgICAgICAgIChHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjayk6
CisgICAgICAgIChHZW5lcmF0ZUNvbnN0cnVjdG9yQ2FsbGJhY2spOgorICAgICAgICAoR2VuZXJh
dGVOYW1lZENvbnN0cnVjdG9yQ2FsbGJhY2spOgorICAgICAgICAoR2VuZXJhdGVGdW5jdGlvbkNh
bGxTdHJpbmcpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQ6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkRPTVRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2U6OmFjY2VwdFRyYW5zZmVyTGlzdCk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlLmg6CisgICAgICAgIChXZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01U
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKHdlYmtpdF9k
b21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfYWNjZXB0X3RyYW5zZmVy
X2xpc3QpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90
eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlUHJvdG90eXBlRnVuY3Rpb25BY2NlcHRUcmFuc2Zlckxpc3QpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uu
aDoKKyAgICAgICAgKEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlw
ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
T2JqQy9ET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmg6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZS5tbToKKyAgICAgICAgKC1bRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZSBhY2NlcHRUcmFuc2Zlckxpc3Q6dHJhbnNmZXJMaXN0Ol0pOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmlkbDoK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VJbnRlcm5hbDo6YWNjZXB0VHJhbnNmZXJMaXN0Q2FsbGJhY2spOgor
ICAgICAgICAoVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUludGVybmFsKToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlOjpjb25zdHJ1Y3RvckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbmZpZ3VyZVY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVRlbXBsYXRlKToK
KwogMjAxMi0wMy0xMSAgVmljdG9yIENhcmJ1bmUgIDx2Y2FyYnVuZUBhZG9iZS5jb20+CiAKICAg
ICAgICAgVGhlIG1haW4gY29kZSBzdHJ1Y3R1cmUgZm9yIHBsYWNpbmcgZnV0dXJlIHRleHQgdHJh
Y2sgY3VlIHJlbmRlcmluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCBhNWRhYmRmZDU5YzlmNGU1OGU2Y2UzOThjYmFiZGUy
NGU0M2JjYjVmLi45ZTMxODEyOGM0NTgyMjdhZTczNWM5NmUwMzNkNTc0NjU3Y2ZlYTAwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5w
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5w
bQpAQCAtMTQzMSwxMSArMTQzMSwxMSBAQCBFTkQKIEVORAogICAgIH0KIAotICAgIG15ICgkcGFy
YW1ldGVyQ2hlY2tTdHJpbmcsICRwYXJhbUluZGV4KSA9IEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNr
KCRmdW5jdGlvbiwgJGltcGxDbGFzc05hbWUpOworICAgIG15ICgkcGFyYW1ldGVyQ2hlY2tTdHJp
bmcsICRwYXJhbUluZGV4LCAlcmVwbGFjZW1lbnRzKSA9IEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNr
KCRmdW5jdGlvbiwgJGltcGxDbGFzc05hbWUpOwogICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMs
ICRwYXJhbWV0ZXJDaGVja1N0cmluZyk7CiAKICAgICAjIEJ1aWxkIHRoZSBmdW5jdGlvbiBjYWxs
IHN0cmluZy4KLSAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCBHZW5lcmF0ZUZ1bmN0aW9uQ2Fs
bFN0cmluZygkZnVuY3Rpb24sICRwYXJhbUluZGV4LCAiICAgICIsICRpbXBsQ2xhc3NOYW1lKSk7
CisgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgR2VuZXJhdGVGdW5jdGlvbkNhbGxTdHJpbmco
JGZ1bmN0aW9uLCAkcGFyYW1JbmRleCwgIiAgICAiLCAkaW1wbENsYXNzTmFtZSwgJXJlcGxhY2Vt
ZW50cykpOwogCiAgICAgaWYgKCRyYWlzZXNFeGNlcHRpb25zKSB7CiAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50RGVjbHMsICIgICAgfVxuIik7CkBAIC0xNTE2LDYgKzE1MTYsMjEgQEAgc3ViIEdl
bmVyYXRlQXJndW1lbnRzQ291bnRDaGVjawogICAgIHJldHVybiAkYXJndW1lbnRzQ291bnRDaGVj
a1N0cmluZzsKIH0KIAorc3ViIEdldEluZGV4T2YKK3sKKyAgICAjIEkgdGhpbmsgdGhlcmUncyBh
IGJldHRlciB3YXkgdG8gZG8gdGhpcywgYnV0IG15IHBlcmwgZnUgaXMgd2Vhay4gOi0oCisgICAg
bXkgJHBhcmFtTmFtZSA9IHNoaWZ0OworICAgIG15IEBwYXJhbUxpc3QgPSBAXzsKKyAgICBteSAk
aW5kZXggPSAwOworICAgIGZvcmVhY2ggbXkgJHBhcmFtIChAcGFyYW1MaXN0KSB7CisgICAgICAg
IGlmICgkcGFyYW1OYW1lIGVxICRwYXJhbSkgeworICAgICAgICAgICAgcmV0dXJuICRpbmRleDsK
KyAgICAgICAgfQorICAgICAgICAkaW5kZXgrKzsKKyAgICB9CisgICAgcmV0dXJuIC0xOworfQor
CiBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2sKIHsKICAgICBteSAkZnVuY3Rpb24gPSBzaGlm
dDsKQEAgLTE1MjMsNiArMTUzOCwxNCBAQCBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2sKIAog
ICAgIG15ICRwYXJhbWV0ZXJDaGVja1N0cmluZyA9ICIiOwogICAgIG15ICRwYXJhbUluZGV4ID0g
MDsKKyAgICBteSAkcGFyYW1UcmFuc2Zlckxpc3ROYW1lID0gIiI7CisgICAgbXkgJHBhcmFtVHJh
bnNmZXJMaXN0SW5kZXggPSAtMTsKKyAgICBteSAlcmVwbGFjZW1lbnRzID0gKCk7CisgICAgbXkg
QGFsbFBhcmFtZXRlck5hbWVzID0gKCk7CisgICAgZm9yZWFjaCBteSAkcGFyYW1ldGVyIChAeyRm
dW5jdGlvbi0+cGFyYW1ldGVyc30pIHsKKyAgICAgICAgcHVzaChAYWxsUGFyYW1ldGVyTmFtZXMs
ICRwYXJhbWV0ZXItPm5hbWUpOworICAgIH0KKwogICAgIGZvcmVhY2ggbXkgJHBhcmFtZXRlciAo
QHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KSB7CiAgICAgICAgIFRyYW5zbGF0ZVBhcmFtZXRlcigk
cGFyYW1ldGVyKTsKIApAQCAtMTU0Myw2ICsxNTY2LDEyIEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRl
cnNDaGVjawogICAgICAgICAgICAgJHBhcmFtZXRlckRlZmF1bHRQb2xpY3kgPSAiRGVmYXVsdElz
TnVsbFN0cmluZyI7CiAgICAgICAgIH0KIAorICAgICAgICBpZiAoJHBhcmFtSW5kZXggPT0gJHBh
cmFtVHJhbnNmZXJMaXN0SW5kZXgpIHsKKyAgICAgICAgICAgICRyZXBsYWNlbWVudHN7JHBhcmFt
ZXRlck5hbWV9ID0gIm1lc3NhZ2VQb3J0QXJyYXkiOworICAgICAgICAgICAgJHBhcmFtSW5kZXgr
KzsKKyAgICAgICAgICAgIG5leHQ7CisgICAgICAgIH0KKwogICAgICAgICBBZGRUb0ltcGxJbmNs
dWRlcygiRXhjZXB0aW9uQ29kZS5oIik7CiAgICAgICAgIG15ICRuYXRpdmVUeXBlID0gR2V0TmF0
aXZlVHlwZUZyb21TaWduYXR1cmUoJHBhcmFtZXRlciwgJHBhcmFtSW5kZXgpOwogICAgICAgICBp
ZiAoJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhbGxiYWNrIn0pIHsKQEAgLTE1
NjIsOCArMTU5MSwyOSBAQCBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2sKICAgICAgICAgICAg
IH0KICAgICAgICAgfSBlbHNpZiAoJHBhcmFtZXRlci0+dHlwZSBlcSAiU2VyaWFsaXplZFNjcmlw
dFZhbHVlIikgewogICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5oIik7CisgICAgICAgICAgICBteSAkdXNlVHJhbnNmZXJMaXN0ID0gMDsKKyAgICAg
ICAgICAgIGlmICgkcGFyYW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVHJhbnNmZXJMaXN0
In0pIHsKKyAgICAgICAgICAgICAgICAkcGFyYW1UcmFuc2Zlckxpc3ROYW1lID0gJHBhcmFtZXRl
ci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlRyYW5zZmVyTGlzdCJ9OworICAgICAgICAgICAgICAg
ICRwYXJhbVRyYW5zZmVyTGlzdEluZGV4ID0gR2V0SW5kZXhPZigkcGFyYW1UcmFuc2Zlckxpc3RO
YW1lLCBAYWxsUGFyYW1ldGVyTmFtZXMpOworICAgICAgICAgICAgICAgIGlmICgkcGFyYW1UcmFu
c2Zlckxpc3RJbmRleCA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICBuZXh0OyAgIyB3ZWFr
IHNhdWNlISBkbyB3ZSBoYXZlIHJ1bnRpbWUgZXJyb3JzPyBJREwgZXJyb3I6IFRyYW5zZmVyTGlz
dCByZWZzIGEgbm9uZXhpc3RlbnQgcGFyYW0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkFycmF5QnVmZmVyLmgiKTsKKyAgICAgICAgICAgICAg
ICBBZGRUb0ltcGxJbmNsdWRlcygiTWVzc2FnZVBvcnQuaCIpOworICAgICAgICAgICAgICAgICRw
YXJhbWV0ZXJDaGVja1N0cmluZyAuPSAiICAgIE1lc3NhZ2VQb3J0QXJyYXkgbWVzc2FnZVBvcnRB
cnJheTtcbiI7CisgICAgICAgICAgICAgICAgJHBhcmFtZXRlckNoZWNrU3RyaW5nIC49ICIgICAg
QXJyYXlCdWZmZXJBcnJheSBhcnJheUJ1ZmZlckFycmF5O1xuIjsKKyAgICAgICAgICAgICAgICAk
cGFyYW1ldGVyQ2hlY2tTdHJpbmcgLj0gIiAgICBpZiAoYXJncy5MZW5ndGgoKSA+ICRwYXJhbVRy
YW5zZmVyTGlzdEluZGV4KSB7XG4iOworICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJDaGVja1N0
cmluZyAuPSAiICAgICAgICBpZiAoIWV4dHJhY3RUcmFuc2ZlcmFibGVzKGFyZ3NbJHBhcmFtVHJh
bnNmZXJMaXN0SW5kZXhdLCBtZXNzYWdlUG9ydEFycmF5LCBhcnJheUJ1ZmZlckFycmF5KSlcbiI7
CisgICAgICAgICAgICAgICAgJHBhcmFtZXRlckNoZWNrU3RyaW5nIC49ICIgICAgICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihcIkNvdWxkIG5vdCBleHRyYWN0IHRyYW5zZmVyYWJsZXNcIiwgVjhQ
cm94eTo6VHlwZUVycm9yKTtcbiI7CisgICAgICAgICAgICAgICAgJHBhcmFtZXRlckNoZWNrU3Ry
aW5nIC49ICIgICAgfVxuIjsKKyAgICAgICAgICAgICAgICAkdXNlVHJhbnNmZXJMaXN0ID0gMTsK
KyAgICAgICAgICAgIH0KICAgICAgICAgICAgICRwYXJhbWV0ZXJDaGVja1N0cmluZyAuPSAiICAg
IGJvb2wgJHtwYXJhbWV0ZXJOYW1lfURpZFRocm93ID0gZmFsc2U7XG4iOwotICAgICAgICAgICAg
JHBhcmFtZXRlckNoZWNrU3RyaW5nIC49ICIgICAgJG5hdGl2ZVR5cGUgJHBhcmFtZXRlck5hbWUg
PSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShhcmdzWyRwYXJhbUluZGV4XSwgMCwgMCwg
JHtwYXJhbWV0ZXJOYW1lfURpZFRocm93KTtcbiI7CisgICAgICAgICAgICBpZiAoISR1c2VUcmFu
c2Zlckxpc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgJHBhcmFtZXRlckNoZWNrU3RyaW5nIC49
ICIgICAgJG5hdGl2ZVR5cGUgJHBhcmFtZXRlck5hbWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OmNyZWF0ZShhcmdzWyRwYXJhbUluZGV4XSwgMCwgMCwgJHtwYXJhbWV0ZXJOYW1lfURpZFRocm93
KTtcbiI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAkcGFyYW1l
dGVyQ2hlY2tTdHJpbmcgLj0gIiAgICAkbmF0aXZlVHlwZSAkcGFyYW1ldGVyTmFtZSA9IFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGFyZ3NbJHBhcmFtSW5kZXhdLCAmbWVzc2FnZVBvcnRB
cnJheSwgJmFycmF5QnVmZmVyQXJyYXksICR7cGFyYW1ldGVyTmFtZX1EaWRUaHJvdyk7XG4iOwor
ICAgICAgICAgICAgfQogICAgICAgICAgICAgJHBhcmFtZXRlckNoZWNrU3RyaW5nIC49ICIgICAg
aWYgKCR7cGFyYW1ldGVyTmFtZX1EaWRUaHJvdylcbiI7CiAgICAgICAgICAgICAkcGFyYW1ldGVy
Q2hlY2tTdHJpbmcgLj0gIiAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTtcbiI7CiAgICAg
ICAgIH0gZWxzaWYgKFR5cGVDYW5GYWlsQ29udmVyc2lvbigkcGFyYW1ldGVyKSkgewpAQCAtMTYx
NCw3ICsxNjY0LDcgQEAgc3ViIEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrCiAKICAgICAgICAgJHBh
cmFtSW5kZXgrKzsKICAgICB9Ci0gICAgcmV0dXJuICgkcGFyYW1ldGVyQ2hlY2tTdHJpbmcsICRw
YXJhbUluZGV4KTsKKyAgICByZXR1cm4gKCRwYXJhbWV0ZXJDaGVja1N0cmluZywgJHBhcmFtSW5k
ZXgsICVyZXBsYWNlbWVudHMpOwogfQogCiBzdWIgR2VuZXJhdGVDb25zdHJ1Y3RvckNhbGxiYWNr
CkBAIC0xNjU3LDcgKzE3MDcsNyBAQCBFTkQKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7XG4iKTsKICAgICB9CiAKLSAgICBteSAoJHBhcmFtZXRl
ckNoZWNrU3RyaW5nLCAkcGFyYW1JbmRleCkgPSBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjaygkZnVu
Y3Rpb24sICRpbXBsQ2xhc3NOYW1lKTsKKyAgICBteSAoJHBhcmFtZXRlckNoZWNrU3RyaW5nLCAk
cGFyYW1JbmRleCwgJXJlcGxhY2VtZW50cykgPSBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjaygkZnVu
Y3Rpb24sICRpbXBsQ2xhc3NOYW1lKTsKICAgICBwdXNoKEBpbXBsQ29udGVudCwgJHBhcmFtZXRl
ckNoZWNrU3RyaW5nKTsKIAogICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJDYWxsV2l0aCJ9ICYmICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhbGxXaXRo
In0gZXEgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQiKSB7CkBAIC0xNjc4LDcgKzE3MjgsMTEgQEAg
RU5ECiAgICAgbXkgJGluZGV4ID0gMDsKICAgICBmb3JlYWNoIG15ICRwYXJhbWV0ZXIgKEB7JGZ1
bmN0aW9uLT5wYXJhbWV0ZXJzfSkgewogICAgICAgICBsYXN0IGlmICRpbmRleCBlcSAkcGFyYW1J
bmRleDsKLSAgICAgICAgcHVzaChAYXJndW1lbnRMaXN0LCAkcGFyYW1ldGVyLT5uYW1lKTsKKyAg
ICAgICAgaWYgKCRyZXBsYWNlbWVudHN7JHBhcmFtZXRlci0+bmFtZX0pIHsKKyAgICAgICAgICAg
IHB1c2goQGFyZ3VtZW50TGlzdCwgJHJlcGxhY2VtZW50c3skcGFyYW1ldGVyLT5uYW1lfSk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwdXNoKEBhcmd1bWVudExpc3QsICRwYXJhbWV0
ZXItPm5hbWUpOworICAgICAgICB9CiAgICAgICAgICRpbmRleCsrOwogICAgIH0KIApAQCAtMTg0
Miw3ICsxODk2LDcgQEAgRU5ECiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwO1xuIik7CiAgICAgfQogCi0gICAgbXkgKCRwYXJhbWV0ZXJDaGVja1N0
cmluZywgJHBhcmFtSW5kZXgpID0gR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2soJGZ1bmN0aW9uLCAk
aW1wbENsYXNzTmFtZSk7CisgICAgbXkgKCRwYXJhbWV0ZXJDaGVja1N0cmluZywgJHBhcmFtSW5k
ZXgsICVyZXBsYWNlbWVudHMpID0gR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2soJGZ1bmN0aW9uLCAk
aW1wbENsYXNzTmFtZSk7CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICRwYXJhbWV0ZXJDaGVja1N0
cmluZyk7CiAKICAgICBwdXNoKEBiZWZvcmVBcmd1bWVudExpc3QsICJkb2N1bWVudCIpOwpAQCAt
MTg1NSw3ICsxOTA5LDExIEBAIEVORAogICAgIG15ICRpbmRleCA9IDA7CiAgICAgZm9yZWFjaCBt
eSAkcGFyYW1ldGVyIChAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pIHsKICAgICAgICAgbGFzdCBp
ZiAkaW5kZXggZXEgJHBhcmFtSW5kZXg7Ci0gICAgICAgIHB1c2goQGFyZ3VtZW50TGlzdCwgJHBh
cmFtZXRlci0+bmFtZSk7CisgICAgICAgIGlmICgkcmVwbGFjZW1lbnRzeyRwYXJhbWV0ZXItPm5h
bWV9KSB7CisgICAgICAgICAgICBwdXNoKEBhcmd1bWVudExpc3QsICRyZXBsYWNlbWVudHN7JHBh
cmFtZXRlci0+bmFtZX0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHVzaChAYXJn
dW1lbnRMaXN0LCAkcGFyYW1ldGVyLT5uYW1lKTsKKyAgICAgICAgfQogICAgICAgICAkaW5kZXgr
KzsKICAgICB9CiAKQEAgLTMxNTUsNiArMzIxMyw3IEBAIHN1YiBHZW5lcmF0ZUZ1bmN0aW9uQ2Fs
bFN0cmluZygpCiAgICAgbXkgJG51bWJlck9mUGFyYW1ldGVycyA9IHNoaWZ0OwogICAgIG15ICRp
bmRlbnQgPSBzaGlmdDsKICAgICBteSAkaW1wbENsYXNzTmFtZSA9IHNoaWZ0OworICAgIG15ICVy
ZXBsYWNlbWVudHMgPSBAXzsKIAogICAgIG15ICRuYW1lID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUt
Pm5hbWU7CiAgICAgbXkgJHJldHVyblR5cGUgPSBHZXRUeXBlRnJvbVNpZ25hdHVyZSgkZnVuY3Rp
b24tPnNpZ25hdHVyZSk7CkBAIC0zMTk5LDcgKzMyNTgsOSBAQCBzdWIgR2VuZXJhdGVGdW5jdGlv
bkNhbGxTdHJpbmcoKQogICAgICAgICBteSAkcGFyYW1OYW1lID0gJHBhcmFtZXRlci0+bmFtZTsK
ICAgICAgICAgbXkgJHBhcmFtVHlwZSA9ICRwYXJhbWV0ZXItPnR5cGU7CiAKLSAgICAgICAgaWYg
KCRwYXJhbWV0ZXItPnR5cGUgZXEgIklEQktleSIgfHwgJHBhcmFtZXRlci0+dHlwZSBlcSAiTm9k
ZUZpbHRlciIgfHwgJHBhcmFtZXRlci0+dHlwZSBlcSAiWFBhdGhOU1Jlc29sdmVyIikgeworICAg
ICAgICBpZiAoJHJlcGxhY2VtZW50c3skcGFyYW1OYW1lfSkgeworICAgICAgICAgICAgcHVzaCBA
YXJndW1lbnRzLCAkcmVwbGFjZW1lbnRzeyRwYXJhbU5hbWV9OworICAgICAgICB9IGVsc2lmICgk
cGFyYW1ldGVyLT50eXBlIGVxICJJREJLZXkiIHx8ICRwYXJhbWV0ZXItPnR5cGUgZXEgIk5vZGVG
aWx0ZXIiIHx8ICRwYXJhbWV0ZXItPnR5cGUgZXEgIlhQYXRoTlNSZXNvbHZlciIpIHsKICAgICAg
ICAgICAgIHB1c2ggQGFyZ3VtZW50cywgIiRwYXJhbU5hbWUuZ2V0KCkiOwogICAgICAgICB9IGVs
c2lmICgkY29kZUdlbmVyYXRvci0+SXNTVkdUeXBlTmVlZGluZ1RlYXJPZmYoJHBhcmFtZXRlci0+
dHlwZSkgYW5kIG5vdCAkaW1wbENsYXNzTmFtZSA9fiAvTGlzdCQvKSB7CiAgICAgICAgICAgICBw
dXNoIEBhcmd1bWVudHMsICIkcGFyYW1OYW1lLT5wcm9wZXJ0eVJlZmVyZW5jZSgpIjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0CmluZGV4
IGQxMDVlMDg3MjdkZTkxMTc3ZWY1MTkyMGQ3MTc0NGZmNzkwZDljOTguLmI4NzY0YjI5YmQzYjk4
OGNkNTFlYmJkNGJhYzllYTlmZGUxMWU3MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dApAQCAtOTcsNiArOTcsNyBAQCBSZXBsYWNl
YWJsZUNvbnN0cnVjdG9yCiBSZXR1cm5OZXdPYmplY3QKIFN0cmljdFR5cGVDaGVja2luZwogU3Vw
cGxlbWVudGFsPSoKK1RyYW5zZmVyTGlzdD0qCiBUcmVhdE51bGxBcz1OdWxsU3RyaW5nCiBUcmVh
dFJldHVybmVkTnVsbFN0cmluZ0FzPUZhbHNlfE51bGx8VW5kZWZpbmVkCiBUcmVhdFVuZGVmaW5l
ZEFzPU51bGxTdHJpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9DUFAvV2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCmluZGV4IDU0MTU0NjQ1MGE1OGQzMjczNmRh
Y2M3NTViODNiNjI4ZGUwODU4OGUuLjgwYmE5NTkzNjRmNzM5ZTRlYTY3NDUwODQwZjNlYzYyMTNj
ZGRmYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9D
UFAvV2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcApAQCAtMjQsOCArMjQsMTAgQEAKIAogI2luY2x1ZGUg
IldlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaCIKIAorI2luY2x1ZGUg
IkFycmF5LmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAi
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oIgorI2luY2x1ZGUgIldlYkRPTUFy
cmF5LmgiCiAjaW5jbHVkZSAiV2ViRXhjZXB0aW9uSGFuZGxlci5oIgogI2luY2x1ZGUgPHd0Zi9H
ZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC0xMjMsNiArMTI1LDE0IEBAIFdl
YkRPTVN0cmluZyBXZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpjYWNo
ZWRSZWFkb25seVZhbHVlKCkgY29uCiAgICAgcmV0dXJuIGltcGwoKS0+Y2FjaGVkUmVhZG9ubHlW
YWx1ZSgpLT50b1N0cmluZygpOwogfQogCit2b2lkIFdlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2U6OmFjY2VwdFRyYW5zZmVyTGlzdChjb25zdCBXZWJET01TdHJpbmcmIGRh
dGEsIGNvbnN0IFdlYkRPTUFycmF5JiB0cmFuc2Zlckxpc3QpCit7CisgICAgaWYgKCFpbXBsKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGltcGwoKS0+YWNjZXB0VHJhbnNmZXJMaXN0KFdlYkNv
cmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKFdURjo6U3RyaW5nKGRhdGEpKSwgdG9X
ZWJDb3JlKHRyYW5zZmVyTGlzdCkpOworfQorCiBXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlKiB0b1dlYkNvcmUoY29uc3QgV2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZSYgd3JhcHBlcikKIHsKICAgICByZXR1cm4gd3JhcHBlci5pbXBsKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dl
YkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZS5oCmluZGV4IGQwM2I3NWU2YTc2N2YyMmNmY2ZiZjlhNWQ1NTgyMmRlNzFiMjQz
OTkuLjUzNzFiZDMzM2MwMjNjMzdhYTE4OGVmNGVlMmVlYjM1ZWE4ZjBhYzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZS5oCkBAIC0zMiw2ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U7CiB9OwogCitjbGFzcyBXZWJET01BcnJheTsKIGNs
YXNzIFdlYkRPTVN0cmluZzsKIAogY2xhc3MgV2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZSA6IHB1YmxpYyBXZWJET01PYmplY3QgewpAQCAtNDksNiArNTAsOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRDYWNoZWRWYWx1ZShjb25zdCBXZWJET01TdHJpbmcmKTsKICAgICBX
ZWJET01TdHJpbmcgY2FjaGVkUmVhZG9ubHlWYWx1ZSgpIGNvbnN0OwogCisgICAgdm9pZCBhY2Nl
cHRUcmFuc2Zlckxpc3QoY29uc3QgV2ViRE9NU3RyaW5nJiBkYXRhLCBjb25zdCBXZWJET01BcnJh
eSYgdHJhbnNmZXJMaXN0KTsKKwogICAgIFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UqIGltcGwoKSBjb25zdDsKIAogcHJvdGVjdGVkOgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlLmNwcAppbmRleCA5NjFjNGIzYTVjMmY5MmQ0NzM2NDQ1NjE2MGM4ZmI1ODA2ZGEz
NzRmLi5lMGU2OWE5ZmNlZWY0YTNlNTE2OGI1NDlmNzk4YzgyYzVlMGI2OTEzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01U
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlLmNwcApAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgIlRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJXZWJLaXRET01CaW5k
aW5nLmgiCiAjaW5jbHVkZSAiZ29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVk
ZSAid2Via2l0L1dlYktpdERPTUFycmF5LmgiCisjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTUFy
cmF5UHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01TZXJpYWxpemVkU2NyaXB0
VmFsdWUuaCIKICNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVl
UHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlLmgiCkBAIC01NCw2ICs1NiwyNyBAQCBXZWJLaXRET01UZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBraXQoV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYQogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0IC8vCiAKK3ZvaWQKK3dlYmtpdF9kb21f
dGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfYWNjZXB0X3RyYW5zZmVyX2xp
c3QoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogc2VsZiwgV2Vi
S2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBkYXRhLCBXZWJLaXRET01BcnJheSogdHJhbnNm
ZXJfbGlzdCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKGRhdGEpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodHJhbnNmZXJfbGlzdCk7
CisgICAgV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlICogY29udmVydGVkX2RhdGEgPSBO
VUxMOworICAgIGlmIChkYXRhICE9IE5VTEwpIHsKKyAgICAgICAgY29udmVydGVkX2RhdGEgPSBX
ZWJLaXQ6OmNvcmUoZGF0YSk7CisgICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX2Rh
dGEpOworICAgIH0KKyAgICBXZWJDb3JlOjpBcnJheSAqIGNvbnZlcnRlZF90cmFuc2Zlcl9saXN0
ID0gTlVMTDsKKyAgICBpZiAodHJhbnNmZXJfbGlzdCAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZl
cnRlZF90cmFuc2Zlcl9saXN0ID0gV2ViS2l0Ojpjb3JlKHRyYW5zZmVyX2xpc3QpOworICAgICAg
ICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF90cmFuc2Zlcl9saXN0KTsKKyAgICB9CisgICAg
aXRlbS0+YWNjZXB0VHJhbnNmZXJMaXN0KGNvbnZlcnRlZF9kYXRhLCBjb252ZXJ0ZWRfdHJhbnNm
ZXJfbGlzdCk7Cit9CisKIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSoKIHdlYmtpdF9k
b21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfZ2V0X3ZhbHVlKFdlYktp
dERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHNlbGYpCiB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlLmgKaW5kZXggNTE2MTQxODU5Y2UzZTUzY2I1NGU0YmViZjNlNDkyM2Nj
OWU0ZjNkYy4uMDBkNzdlODRiMDQzYzQ4YzlkZjcyNGU0MDIyNmIyYjQzNWFlMDFkMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0
RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UuaApAQCAtNDcsNiArNDcsMTggQEAgV0VCS0lUX0FQSSBHVHlw
ZQogd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9nZXRf
dHlwZSAodm9pZCk7CiAKIC8qKgorICogd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0
X3ZhbHVlX2ludGVyZmFjZV9hY2NlcHRfdHJhbnNmZXJfbGlzdDoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlCisgKiBAZGF0YTogQSAjV2Vi
S2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlCisgKiBAdHJhbnNmZXJfbGlzdDogQSAjV2ViS2l0
RE9NQXJyYXkKKyAqCisgKiBSZXR1cm5zOgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2FjY2VwdF90cmFu
c2Zlcl9saXN0KFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHNl
bGYsIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogZGF0YSwgV2ViS2l0RE9NQXJyYXkq
IHRyYW5zZmVyX2xpc3QpOworCisvKioKICAqIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3Nj
cmlwdF92YWx1ZV9pbnRlcmZhY2VfZ2V0X3ZhbHVlOgogICogQHNlbGY6IEEgI1dlYktpdERPTVRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UKICAqCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCmluZGV4IGMwZWE2ZWFh
ZDllOGQwNTdhNGVkNTc1ZWMzYmM3MmUxNGE5ZTBiNTQuLjA5MDkwOTgyOTgxNjY3MGQzOWJiZGRm
ZDM0ZTc5NGU2MzdhZjI5NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCkBAIC0yNSwxMiArMjUsMTggQEAKICNpbmNsdWRl
ICJKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaCIKIAogI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNET01CaW5k
aW5nLmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJy
b3IuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkg
fHwgRU5BQkxFKENvbmRpdGlvbjIpCisjaW5jbHVkZSAiLmgiCisjaW5jbHVkZSAiSlMuaCIKKyNl
bmRpZgorCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02
OSw3ICs3NSw3IEBAIHZvaWQgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29u
c3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSoKICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbihleGVjLT5nbG9iYWxEYXRhKCkpOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7
CiAgICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygp
LnByb3RvdHlwZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBl
OjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7Ci0gICAg
cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0
aCwganNOdW1iZXIoMiksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKKyAgICBw
dXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3Ro
LCBqc051bWJlcigzKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogfQogCiBi
b29sIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yOjpnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpAQCAtOTAsMTAgKzk2LDIx
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlQ29uc3RydWN0b3I6OmNvCiAgICAgY29uc3QgU3RyaW5nJiBoZWxsbyh1c3Ry
aW5nVG9TdHJpbmcoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwgRGVmYXVsdElzVW5k
ZWZpbmVkKS5pc0VtcHR5KCkgPyBVU3RyaW5nKCkgOiBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihl
eGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkp
OwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiB2YWx1ZShTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCBNQVlCRV9NSVNTSU5H
X1BBUkFNRVRFUihleGVjLCAxLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAgUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YShTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShl
eGVjLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAxLCBEZWZhdWx0SXNVbmRlZmluZWQp
KSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCisgICAgc2l6ZV90IGFyZ3NDb3VudCA9IGV4ZWMt
PmFyZ3VtZW50Q291bnQoKTsKKyAgICBpZiAoYXJnc0NvdW50IDw9IDIpIHsKKworICAgICAgICBK
U0M6OkpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSwgV1RGOjpnZXRQdHIoaW1wbC0+Y29uc3RydWN0b3JDYWxsYmFjayhoZWxsbywgZGF0YSkpKTsK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIH0KKworICAgIEFy
cmF5KiB0cmFuc2Zlckxpc3QodG9BcnJheShNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAy
LCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIFJlZlB0
cjxUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPiBvYmplY3QgPSBUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpjcmVhdGUoaGVsbG8sIHZhbHVlKTsKKyAgICBSZWZQ
dHI8VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT4gb2JqZWN0ID0gVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6Y3JlYXRlKGhlbGxvLCBkYXRhLCB0cmFuc2Zlckxp
c3QpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBqc0Nv
bnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgb2JqZWN0LmdldCgpKSkpOwogfQogCkBAIC0xMDcs
MTAgKzEyNCwxMSBAQCBDb25zdHJ1Y3RUeXBlIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZUNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKAogCiBzdGF0aWMgY29uc3QgSGFz
aFRhYmxlVmFsdWUgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBl
VGFibGVWYWx1ZXNbXSA9CiB7CisgICAgeyAiYWNjZXB0VHJhbnNmZXJMaXN0IiwgRG9udERlbGV0
ZSB8IEpTQzo6RnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4o
anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25BY2Nl
cHRUcmFuc2Zlckxpc3QpLCAoaW50cHRyX3QpMiwgTm9JbnRyaW5zaWMgfSwKICAgICB7IDAsIDAs
IDAsIDAsIE5vSW50cmluc2ljIH0KIH07CiAKLXN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlVGFibGUgPSB7IDEsIDAsIEpT
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZVRhYmxlVmFsdWVzLCAw
IH07CitzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZVByb3RvdHlwZVRhYmxlID0geyAyLCAxLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2VQcm90b3R5cGVUYWJsZVZhbHVlcywgMCB9OwogY29uc3QgQ2xhc3NJbmZvIEpT
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZTo6c19pbmZvID0geyAi
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSIsICZCYXNlOjpzX2lu
Zm8sICZKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVUYWJsZSwg
MCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2VQcm90b3R5cGUpIH07CiAKIEpTT2JqZWN0KiBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VQcm90b3R5cGU6OnNlbGYoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQpAQCAtMTE4LDYgKzEzNiwxOCBAQCBKU09iamVjdCogSlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlOjpzZWxmKEV4ZWNTdGF0ZSogZXhlYywg
SgogICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlPihleGVjLCBnbG9iYWxPYmplY3QpOwogfQogCitib29sIEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2Vs
bCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VQcm90b3R5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlKj4oY2VsbCk7CisgICAgcmV0dXJuIGdldFN0YXRp
Y0Z1bmN0aW9uU2xvdDxKU09iamVjdD4oZXhlYywgJkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZVByb3RvdHlwZVRhYmxlLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
OworfQorCitib29sIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlw
ZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3Im
IGRlc2NyaXB0b3IpCit7CisgICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
UHJvdG90eXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZVByb3RvdHlwZSo+KG9iamVjdCk7CisgICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0
aW9uRGVzY3JpcHRvcjxKU09iamVjdD4oZXhlYywgJkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZVByb3RvdHlwZVRhYmxlLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2Ny
aXB0b3IpOworfQorCiBjb25zdCBDbGFzc0luZm8gSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlOjpzX2luZm8gPSB7ICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
IiwgJkJhc2U6OnNfaW5mbywgJkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVRh
YmxlLCAwICwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2UpIH07CiAKIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6SlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKFN0cnVjdHVyZSogc3RydWN0dXJlLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2U+IGltcGwpCkBAIC0yNDIsNiArMjcyLDMzIEBAIEpTVmFsdWUg
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpnZXRDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIGV4ZWMsIEpTCiAgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yPihleGVjLCBzdGF0aWNfY2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOwogfQogCitFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlw
ZUZ1bmN0aW9uQWNjZXB0VHJhbnNmZXJMaXN0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAgICBpZiAoIXRoaXNWYWx1
ZS5pbmhlcml0cygmSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpzX2luZm8p
KQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKKyAgICBKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqPihhc09iamVjdCh0aGlzVmFsdWUpKTsK
KyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnNfaW5mbyk7CisgICAgVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZSogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIGlmIChleGVjLT5hcmd1
bWVudENvdW50KCkgPCAxKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0
ZVR5cGVFcnJvcihleGVjLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKSk7CisgICAgUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YShTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShl
eGVjLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQp
KSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCisgICAgc2l6ZV90IGFyZ3NDb3VudCA9IGV4ZWMt
PmFyZ3VtZW50Q291bnQoKTsKKyAgICBpZiAoYXJnc0NvdW50IDw9IDEpIHsKKyAgICAgICAgaW1w
bC0+YWNjZXB0VHJhbnNmZXJMaXN0KGRhdGEpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0KKworICAgIEFycmF5KiB0cmFuc2Zlckxpc3QodG9B
cnJheShNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAxLCBEZWZhdWx0SXNVbmRlZmluZWQp
KSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIGltcGwtPmFjY2VwdFRyYW5zZmVyTGlzdChk
YXRhLCB0cmFuc2Zlckxpc3QpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7Cit9CisKIHZvaWQgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSo+KGNlbGwpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCmluZGV4IGM5
NDRlNDJhM2E1MWZkYmRjYTg3YjVlZGZiNmFkOWVmMWE5ZjFhZWYuLjhiNjkzNmE0NTc4MGM5ZDNl
YWM1MTIxODk3YWY5MTcyMWU4MTY0OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgKQEAgLTEwMyw2ICsxMDMsOCBAQCBwdWJsaWM6
CiAgICAgfQogCiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKyAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0
ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4
ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9y
Jik7CiAgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7CiAgICAgICAgIHJldHVybiBKU0M6OlN0cnVj
dHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5
cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKQEAgLTEx
MSw3ICsxMTMsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpK
U05vbkZpbmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkgeyB9CiBwcm90ZWN0ZWQ6Ci0g
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNW
aXNpdENoaWxkcmVuIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qg
fCBKU0M6Ok92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIH07
CiAKIGNsYXNzIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9y
IDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKQEAgLTE0MSw2ICsxNDMsOSBAQCBwcm90
ZWN0ZWQ6CiAgICAgc3RhdGljIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpT
Qzo6SlNDZWxsKiwgSlNDOjpDb25zdHJ1Y3REYXRhJik7CiB9OwogCisvLyBGdW5jdGlvbnMKKwor
SlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uQWNjZXB0VHJhbnNmZXJMaXN0KEpTQzo6RXhl
Y1N0YXRlKik7CiAvLyBBdHRyaWJ1dGVzCiAKIEpTQzo6SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwg
Y29uc3QgSlNDOjpJZGVudGlmaWVyJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgKaW5kZXggYjVmM2ExN2M5NWIyNTExMjFi
NTk1MWRiN2JjYTViZWQ0NDk5YjdjZS4uY2NlODljMzk4OWZkOWNlZjkyNWI5NTA2NzdiYWM0M2Y0
ZGQ5YmYzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L09iakMvRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UuaApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgV0VCS0lUX1ZFUlNJ
T05fTUFYX0FMTE9XRUQgPj0gV0VCS0lUX1ZFUlNJT05fTEFURVNUCiAKK0BjbGFzcyBET01BcnJh
eTsKIEBjbGFzcyBOU1N0cmluZzsKIAogQGludGVyZmFjZSBET01UZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlIDogRE9NT2JqZWN0CkBAIC0zNyw2ICszOCw3IEBACiAtIChOU1N0cmlu
ZyAqKWNhY2hlZFZhbHVlOwogLSAodm9pZClzZXRDYWNoZWRWYWx1ZTooTlNTdHJpbmcgKiluZXdD
YWNoZWRWYWx1ZTsKIC0gKE5TU3RyaW5nICopY2FjaGVkUmVhZG9ubHlWYWx1ZTsKKy0gKHZvaWQp
YWNjZXB0VHJhbnNmZXJMaXN0OihOU1N0cmluZyAqKWRhdGEgdHJhbnNmZXJMaXN0OihET01BcnJh
eSAqKXRyYW5zZmVyTGlzdDsKIEBlbmQKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlLm1tIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09i
akMvRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5tbQppbmRleCAzODhmMWM1
NmQ3Y2IyODJlNzlkZTMwYzk3MWY4Y2MwNTU3YWZmMTEwLi4wMGRjMzYyZWE4MzFmZDJmMTVlZmY2
YWY2YWE5NzUzNWRhOGE4ZGQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UubW0KQEAgLTMyLDYgKzMyLDggQEAKIAogI2lt
cG9ydCAiRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oIgogCisjaW1wb3J0
ICJBcnJheS5oIgorI2ltcG9ydCAiRE9NQXJyYXlJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NQmxv
YkludGVybmFsLmgiCiAjaW1wb3J0ICJET01DU1NSdWxlSW50ZXJuYWwuaCIKICNpbXBvcnQgIkRP
TUNTU1ZhbHVlSW50ZXJuYWwuaCIKQEAgLTEwOSw2ICsxMTEsMTIgQEAKICAgICByZXR1cm4gSU1Q
TC0+Y2FjaGVkUmVhZG9ubHlWYWx1ZSgpLT50b1N0cmluZygpOwogfQogCistICh2b2lkKWFjY2Vw
dFRyYW5zZmVyTGlzdDooTlNTdHJpbmcgKilkYXRhIHRyYW5zZmVyTGlzdDooRE9NQXJyYXkgKil0
cmFuc2Zlckxpc3QKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgSU1QTC0+YWNjZXB0VHJhbnNmZXJMaXN0KFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6Y3JlYXRlKFdURjo6U3RyaW5nKGRhdGEpKSwgY29yZSh0cmFuc2Zlckxpc3QpKTsKK30K
KwogQGVuZAogCiBXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBj
b3JlKERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgKndyYXBwZXIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5pZGwKaW5kZXggZGRk
ZWU5ZmFlNjRkZWMzZjA5NjkyNzIwYjczMDYzMmFhMTY5NGM5Ni4uYzYyOTMxOWE2ODM5YmY2YmUy
OGFkMzE3OGE4ZTNhMjQyODlmYjcxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaWRsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlLmlkbApAQCAtMjksMTAgKzI5LDEyIEBAIG1vZHVsZSB0ZXN0IHsK
ICAgICBpbnRlcmZhY2UgWwogICAgICAgICBDb25kaXRpb25hbD1Db25kaXRpb24xfENvbmRpdGlv
bjIsCiAgICAgICAgIENvbnN0cnVjdG9yKGluIERPTVN0cmluZyBoZWxsbywgaW4gU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlIHZhbHVlKSwKKyAgICAgICAgQ29uc3RydWN0b3IoaW4gRE9NU3RyaW5nIGhl
bGxvLCBpbiBbVHJhbnNmZXJMaXN0PXRyYW5zZmVyTGlzdF0gU2VyaWFsaXplZFNjcmlwdFZhbHVl
IGRhdGEsIGluIFtPcHRpb25hbF0gQXJyYXkgdHJhbnNmZXJMaXN0KSwKICAgICBdIFRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgewogICAgICAgICBhdHRyaWJ1dGUgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlIHZhbHVlOwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlIHJlYWRvbmx5VmFsdWU7CiAgICAgICAgIGF0dHJpYnV0ZSBbQ2FjaGVkQXR0
cmlidXRlXSBTZXJpYWxpemVkU2NyaXB0VmFsdWUgY2FjaGVkVmFsdWU7CiAgICAgICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBbQ2FjaGVkQXR0cmlidXRlXSBTZXJpYWxpemVkU2NyaXB0VmFsdWUgY2Fj
aGVkUmVhZG9ubHlWYWx1ZTsKKyAgICAgICAgdm9pZCBhY2NlcHRUcmFuc2Zlckxpc3QoaW4gW1Ry
YW5zZmVyTGlzdD10cmFuc2Zlckxpc3RdIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBkYXRhLCBpbiBb
T3B0aW9uYWxdIEFycmF5IHRyYW5zZmVyTGlzdCk7CiAgICAgfTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKaW5kZXggZjMy
OWFiMGYzMzU0NWYyMjRiNDhiNjJkNjQwODVjZDk1MjQ2MDVlYy4uNDE0MTJiNGE2N2Y2ZDFlNzVi
ZmVkOWE2NWFlYTRmNTlkZmQwZTY2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKQEAgLTIzLDE1ICsyMywyMSBAQAogCiAj
aWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQogCisjaW5jbHVkZSAi
QXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiTWVz
c2FnZVBvcnQuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVk
ZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisjaW5jbHVkZSAiVjguaCIKICNpbmNsdWRlICJW
OEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEJpbmRpbmdNYWNyb3MuaCIKICNpbmNsdWRlICJWOEJp
bmRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgogI2luY2x1ZGUgIlY4SXNv
bGF0ZWRDb250ZXh0LmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtMTAzLDYgKzEwOSwzMCBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNhY2hlZFJl
YWRvbmx5VmFsdWVBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPgogICAgIHJldHVybiB2
YWx1ZTsKIH0KIAorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhY2NlcHRUcmFuc2Zlckxp
c3RDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIElOQ19TVEFUUygi
RE9NLlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuYWNjZXB0VHJhbnNmZXJMaXN0
Iik7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cigiTm90IGVub3VnaCBhcmd1bWVudHMiLCBWOFByb3h5OjpUeXBlRXJyb3IpOworICAgIFRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGltcCA9IFY4VGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZTo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CisgICAgTWVzc2FnZVBv
cnRBcnJheSBtZXNzYWdlUG9ydEFycmF5OworICAgIEFycmF5QnVmZmVyQXJyYXkgYXJyYXlCdWZm
ZXJBcnJheTsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDEpIHsKKyAgICAgICAgaWYgKCFleHRy
YWN0VHJhbnNmZXJhYmxlcyhhcmdzWzFdLCBtZXNzYWdlUG9ydEFycmF5LCBhcnJheUJ1ZmZlckFy
cmF5KSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJDb3VsZCBub3QgZXh0cmFjdCB0
cmFuc2ZlcmFibGVzIiwgVjhQcm94eTo6VHlwZUVycm9yKTsKKyAgICB9CisgICAgYm9vbCBkYXRh
RGlkVGhyb3cgPSBmYWxzZTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRh
ID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoYXJnc1swXSwgJm1lc3NhZ2VQb3J0QXJy
YXksICZhcnJheUJ1ZmZlckFycmF5LCBkYXRhRGlkVGhyb3cpOworICAgIGlmIChkYXRhRGlkVGhy
b3cpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAgaWYgKGFyZ3MuTGVuZ3Ro
KCkgPD0gMSkgeworICAgICAgICBpbXAtPmFjY2VwdFRyYW5zZmVyTGlzdChkYXRhKTsKKyAgICAg
ICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworICAgIH0KKyAgICBpbXAtPmFjY2Vw
dFRyYW5zZmVyTGlzdChkYXRhLCBtZXNzYWdlUG9ydEFycmF5KTsKKyAgICByZXR1cm4gdjg6Okhh
bmRsZTx2ODo6VmFsdWU+KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VJbnRlcm5hbAogCiBzdGF0aWMgY29uc3QgQmF0Y2hlZEF0dHJpYnV0
ZSBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQXR0cnNbXSA9IHsKQEAgLTExNiw2
ICsxNDYsMTAgQEAgc3RhdGljIGNvbnN0IEJhdGNoZWRBdHRyaWJ1dGUgVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZUF0dHJzW10gPSB7CiAgICAgeyJjYWNoZWRSZWFkb25seVZhbHVl
IiwgVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUludGVybmFsOjpjYWNoZWRSZWFk
b25seVZhbHVlQXR0ckdldHRlciwgMCwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6
QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRy
aWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCiB9OwogCitzdGF0aWMgY29u
c3QgQmF0Y2hlZENhbGxiYWNrIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWxs
YmFja3NbXSA9IHsKKyAgICB7ImFjY2VwdFRyYW5zZmVyTGlzdCIsIFRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VJbnRlcm5hbDo6YWNjZXB0VHJhbnNmZXJMaXN0Q2FsbGJhY2t9LAor
fTsKKwogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZTo6Y29uc3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQog
ewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uu
Q29uc3RydWN0b3IiKTsKQEAgLTEyOCwxMiArMTYyLDIxIEBAIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBWOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmNvbnN0cnVjdG9yQ2FsbGJh
Y2soCiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAyKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cigiTm90IGVub3VnaCBhcmd1bWVudHMiLCBWOFByb3h5OjpUeXBlRXJyb3IpOwogICAgIFNUUklO
R19UT19WOFBBUkFNRVRFUl9FWENFUFRJT05fQkxPQ0soVjhQYXJhbWV0ZXI8PiwgaGVsbG8sIE1B
WUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpOwotICAg
IGJvb2wgdmFsdWVEaWRUaHJvdyA9IGZhbHNlOwotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoYXJnc1sxXSwgMCwg
MCwgdmFsdWVEaWRUaHJvdyk7Ci0gICAgaWYgKHZhbHVlRGlkVGhyb3cpCisgICAgTWVzc2FnZVBv
cnRBcnJheSBtZXNzYWdlUG9ydEFycmF5OworICAgIEFycmF5QnVmZmVyQXJyYXkgYXJyYXlCdWZm
ZXJBcnJheTsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDIpIHsKKyAgICAgICAgaWYgKCFleHRy
YWN0VHJhbnNmZXJhYmxlcyhhcmdzWzJdLCBtZXNzYWdlUG9ydEFycmF5LCBhcnJheUJ1ZmZlckFy
cmF5KSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJDb3VsZCBub3QgZXh0cmFjdCB0
cmFuc2ZlcmFibGVzIiwgVjhQcm94eTo6VHlwZUVycm9yKTsKKyAgICB9CisgICAgYm9vbCBkYXRh
RGlkVGhyb3cgPSBmYWxzZTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRh
ID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoYXJnc1sxXSwgJm1lc3NhZ2VQb3J0QXJy
YXksICZhcnJheUJ1ZmZlckFycmF5LCBkYXRhRGlkVGhyb3cpOworICAgIGlmIChkYXRhRGlkVGhy
b3cpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAgaWYgKGFyZ3MuTGVuZ3Ro
KCkgPD0gMikgeworICAgICAgICByZXR1cm4gdG9WOChpbXAtPkNvbnN0cnVjdG9yKGhlbGxvLCBk
YXRhKSk7CisgICAgfQogCi0gICAgUmVmUHRyPFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2U+IGltcGwgPSBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpjcmVhdGUo
aGVsbG8sIHZhbHVlKTsKKyAgICBSZWZQdHI8VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZT4gaW1wbCA9IFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmNyZWF0ZSho
ZWxsbywgZGF0YSwgbWVzc2FnZVBvcnRBcnJheSk7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiB3cmFwcGVyID0gYXJncy5Ib2xkZXIoKTsKIAogICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3Jh
cHBlcih3cmFwcGVyLCAmaW5mbywgaW1wbC5nZXQoKSk7CkBAIC0xNDksOSArMTkyLDEzIEBAIHN0
YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gQ29uZmlndXJlVjhUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlCiAgICAgdjg6OkxvY2FsPHY4OjpTaWduYXR1cmU+IGRlZmF1
bHRTaWduYXR1cmU7CiAgICAgZGVmYXVsdFNpZ25hdHVyZSA9IGNvbmZpZ3VyZVRlbXBsYXRlKGRl
c2MsICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlIiwgdjg6OlBlcnNpc3RlbnQ8
djg6OkZ1bmN0aW9uVGVtcGxhdGU+KCksIFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZTo6aW50ZXJuYWxGaWVsZENvdW50LAogICAgICAgICBUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlQXR0cnMsIFdURl9BUlJBWV9MRU5HVEgoVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZUF0dHJzKSwKLSAgICAgICAgMCwgMCk7CisgICAgICAgIFRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWxsYmFja3MsIFdURl9BUlJBWV9MRU5HVEgoVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhbGxiYWNrcykpOwogICAgIFVOVVNFRF9QQVJB
TShkZWZhdWx0U2lnbmF0dXJlKTsgLy8gSW4gc29tZSBjYXNlcywgaXQgd2lsbCBub3QgYmUgdXNl
ZC4KICAgICBkZXNjLT5TZXRDYWxsSGFuZGxlcihWOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2U6OmNvbnN0cnVjdG9yQ2FsbGJhY2spOworICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0
VGVtcGxhdGU+IGluc3RhbmNlID0gZGVzYy0+SW5zdGFuY2VUZW1wbGF0ZSgpOworICAgIHY4OjpM
b2NhbDx2ODo6T2JqZWN0VGVtcGxhdGU+IHByb3RvID0gZGVzYy0+UHJvdG90eXBlVGVtcGxhdGUo
KTsKKyAgICBVTlVTRURfUEFSQU0oaW5zdGFuY2UpOyAvLyBJbiBzb21lIGNhc2VzLCBpdCB3aWxs
IG5vdCBiZSB1c2VkLgorICAgIFVOVVNFRF9QQVJBTShwcm90byk7IC8vIEluIHNvbWUgY2FzZXMs
IGl0IHdpbGwgbm90IGJlIHVzZWQuCiAgICAgCiAKICAgICAvLyBDdXN0b20gdG9TdHJpbmcgdGVt
cGxhdGUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132084</attachid>
            <date>2012-03-15 11:28:01 -0700</date>
            <delta_ts>2012-03-15 11:38:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81127-20120315112759.patch</filename>
            <type>text/plain</type>
            <size>35256</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwNDExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGQ3ZGVhNDA5OGEwYzQ2
ODVhNGQwMDBlMmNhNTVhZWM5NTAwYTNmOC4uZTk2MTQyMWJiMDQyM2FmOTMwZDYzMWU5ODJjMDg1
M2RkYjMyZDc5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDEyLTAzLTE0ICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIEFkZCBUcmFuc2Zlckxp
c3QgSURMIG1vZGlmaWVyLCB3aXRoIHN1cHBvcnQgaW4gVjggY29kZSBnZW4uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTEyNworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgIChHZW5lcmF0ZUZ1bmN0aW9uQ2FsbGJhY2spOgor
ICAgICAgICAoR2V0SW5kZXhPZik6CisgICAgICAgIChHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjayk6
CisgICAgICAgIChHZW5lcmF0ZUNvbnN0cnVjdG9yQ2FsbGJhY2spOgorICAgICAgICAoR2VuZXJh
dGVOYW1lZENvbnN0cnVjdG9yQ2FsbGJhY2spOgorICAgICAgICAoR2VuZXJhdGVGdW5jdGlvbkNh
bGxTdHJpbmcpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQ6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkRPTVRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2U6OmFjY2VwdFRyYW5zZmVyTGlzdCk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlLmg6CisgICAgICAgIChXZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01U
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKHdlYmtpdF9k
b21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfYWNjZXB0X3RyYW5zZmVy
X2xpc3QpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90
eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlUHJvdG90eXBlRnVuY3Rpb25BY2NlcHRUcmFuc2Zlckxpc3QpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uu
aDoKKyAgICAgICAgKEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlw
ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
T2JqQy9ET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmg6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZS5tbToKKyAgICAgICAgKC1bRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZSBhY2NlcHRUcmFuc2Zlckxpc3Q6dHJhbnNmZXJMaXN0Ol0pOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmlkbDoK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VJbnRlcm5hbDo6YWNjZXB0VHJhbnNmZXJMaXN0Q2FsbGJhY2spOgor
ICAgICAgICAoVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUludGVybmFsKToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlOjpjb25zdHJ1Y3RvckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbmZpZ3VyZVY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVRlbXBsYXRlKToK
KwogMjAxMi0wMy0xMSAgVmljdG9yIENhcmJ1bmUgIDx2Y2FyYnVuZUBhZG9iZS5jb20+CiAKICAg
ICAgICAgVGhlIG1haW4gY29kZSBzdHJ1Y3R1cmUgZm9yIHBsYWNpbmcgZnV0dXJlIHRleHQgdHJh
Y2sgY3VlIHJlbmRlcmluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCBhNWRhYmRmZDU5YzlmNGU1OGU2Y2UzOThjYmFiZGUy
NGU0M2JjYjVmLi5hYjc2N2JkYzdjNzY1OGMyNjY0MWQ0MmEyOWZkY2EwNGU4NzQyZGJiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5w
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5w
bQpAQCAtMTQzMSwxMSArMTQzMSwxMSBAQCBFTkQKIEVORAogICAgIH0KIAotICAgIG15ICgkcGFy
YW1ldGVyQ2hlY2tTdHJpbmcsICRwYXJhbUluZGV4KSA9IEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNr
KCRmdW5jdGlvbiwgJGltcGxDbGFzc05hbWUpOworICAgIG15ICgkcGFyYW1ldGVyQ2hlY2tTdHJp
bmcsICRwYXJhbUluZGV4LCAlcmVwbGFjZW1lbnRzKSA9IEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNr
KCRmdW5jdGlvbiwgJGltcGxDbGFzc05hbWUpOwogICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMs
ICRwYXJhbWV0ZXJDaGVja1N0cmluZyk7CiAKICAgICAjIEJ1aWxkIHRoZSBmdW5jdGlvbiBjYWxs
IHN0cmluZy4KLSAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCBHZW5lcmF0ZUZ1bmN0aW9uQ2Fs
bFN0cmluZygkZnVuY3Rpb24sICRwYXJhbUluZGV4LCAiICAgICIsICRpbXBsQ2xhc3NOYW1lKSk7
CisgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgR2VuZXJhdGVGdW5jdGlvbkNhbGxTdHJpbmco
JGZ1bmN0aW9uLCAkcGFyYW1JbmRleCwgIiAgICAiLCAkaW1wbENsYXNzTmFtZSwgJXJlcGxhY2Vt
ZW50cykpOwogCiAgICAgaWYgKCRyYWlzZXNFeGNlcHRpb25zKSB7CiAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50RGVjbHMsICIgICAgfVxuIik7CkBAIC0xNTE2LDYgKzE1MTYsMjAgQEAgc3ViIEdl
bmVyYXRlQXJndW1lbnRzQ291bnRDaGVjawogICAgIHJldHVybiAkYXJndW1lbnRzQ291bnRDaGVj
a1N0cmluZzsKIH0KIAorc3ViIEdldEluZGV4T2YKK3sKKyAgICBteSAkcGFyYW1OYW1lID0gc2hp
ZnQ7CisgICAgbXkgQHBhcmFtTGlzdCA9IEBfOworICAgIG15ICRpbmRleCA9IDA7CisgICAgZm9y
ZWFjaCBteSAkcGFyYW0gKEBwYXJhbUxpc3QpIHsKKyAgICAgICAgaWYgKCRwYXJhbU5hbWUgZXEg
JHBhcmFtKSB7CisgICAgICAgICAgICByZXR1cm4gJGluZGV4OworICAgICAgICB9CisgICAgICAg
ICRpbmRleCsrOworICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CisKIHN1YiBHZW5lcmF0ZVBhcmFt
ZXRlcnNDaGVjawogewogICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0OwpAQCAtMTUyMyw2ICsxNTM3
LDkgQEAgc3ViIEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrCiAKICAgICBteSAkcGFyYW1ldGVyQ2hl
Y2tTdHJpbmcgPSAiIjsKICAgICBteSAkcGFyYW1JbmRleCA9IDA7CisgICAgbXkgQHBhcmFtVHJh
bnNmZXJMaXN0TmFtZXMgPSAoKTsKKyAgICBteSAlcmVwbGFjZW1lbnRzID0gKCk7CisKICAgICBm
b3JlYWNoIG15ICRwYXJhbWV0ZXIgKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkgewogICAgICAg
ICBUcmFuc2xhdGVQYXJhbWV0ZXIoJHBhcmFtZXRlcik7CiAKQEAgLTE1NDMsNiArMTU2MCwxMiBA
QCBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2sKICAgICAgICAgICAgICRwYXJhbWV0ZXJEZWZh
dWx0UG9saWN5ID0gIkRlZmF1bHRJc051bGxTdHJpbmciOwogICAgICAgICB9CiAKKyAgICAgICAg
aWYgKEdldEluZGV4T2YoJHBhcmFtZXRlck5hbWUsIEBwYXJhbVRyYW5zZmVyTGlzdE5hbWVzKSAh
PSAtMSkgeworICAgICAgICAgICAgJHJlcGxhY2VtZW50c3skcGFyYW1ldGVyTmFtZX0gPSAibWVz
c2FnZVBvcnRBcnJheV8kcGFyYW1ldGVyTmFtZSI7CisgICAgICAgICAgICAkcGFyYW1JbmRleCsr
OworICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorCiAgICAgICAgIEFkZFRvSW1wbEluY2x1
ZGVzKCJFeGNlcHRpb25Db2RlLmgiKTsKICAgICAgICAgbXkgJG5hdGl2ZVR5cGUgPSBHZXROYXRp
dmVUeXBlRnJvbVNpZ25hdHVyZSgkcGFyYW1ldGVyLCAkcGFyYW1JbmRleCk7CiAgICAgICAgIGlm
ICgkcGFyYW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbGJhY2sifSkgewpAQCAtMTU2
Miw4ICsxNTg1LDM3IEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2lmICgkcGFyYW1ldGVyLT50eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0
VmFsdWUiKSB7CiAgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmgiKTsKKyAgICAgICAgICAgIG15ICR1c2VUcmFuc2Zlckxpc3QgPSAwOworICAgICAg
ICAgICAgbXkgJHRyYW5zZmVyTGlzdE5hbWUgPSAiIjsKKyAgICAgICAgICAgIGlmICgkcGFyYW1l
dGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVHJhbnNmZXJMaXN0In0pIHsKKyAgICAgICAgICAg
ICAgICAkdHJhbnNmZXJMaXN0TmFtZSA9ICRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJUcmFuc2Zlckxpc3QifTsKKyAgICAgICAgICAgICAgICBwdXNoKEBwYXJhbVRyYW5zZmVyTGlz
dE5hbWVzLCAkdHJhbnNmZXJMaXN0TmFtZSk7CisKKyAgICAgICAgICAgICAgICBteSBAYWxsUGFy
YW1ldGVyTmFtZXMgPSAoKTsKKyAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICRwYXJhbWV0ZXIg
KEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkgeworICAgICAgICAgICAgICAgICAgICBwdXNoKEBh
bGxQYXJhbWV0ZXJOYW1lcywgJHBhcmFtZXRlci0+bmFtZSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIG15ICR0cmFuc2Zlckxpc3RJbmRleCA9IEdldEluZGV4T2YoJHRyYW5z
ZmVyTGlzdE5hbWUsIEBhbGxQYXJhbWV0ZXJOYW1lcyk7CisgICAgICAgICAgICAgICAgaWYgKCR0
cmFuc2Zlckxpc3RJbmRleCA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICBkaWUgIklETCBl
cnJvcjogVHJhbnNmZXJMaXN0IHJlZmVycyB0byBhIG5vbmV4aXN0ZW50IGFyZ3VtZW50IjsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiQXJy
YXlCdWZmZXIuaCIpOworICAgICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJNZXNzYWdl
UG9ydC5oIik7CisgICAgICAgICAgICAgICAgJHBhcmFtZXRlckNoZWNrU3RyaW5nIC49ICIgICAg
TWVzc2FnZVBvcnRBcnJheSBtZXNzYWdlUG9ydEFycmF5XyR0cmFuc2Zlckxpc3ROYW1lO1xuIjsK
KyAgICAgICAgICAgICAgICAkcGFyYW1ldGVyQ2hlY2tTdHJpbmcgLj0gIiAgICBBcnJheUJ1ZmZl
ckFycmF5IGFycmF5QnVmZmVyQXJyYXlfJHRyYW5zZmVyTGlzdE5hbWU7XG4iOworICAgICAgICAg
ICAgICAgICRwYXJhbWV0ZXJDaGVja1N0cmluZyAuPSAiICAgIGlmIChhcmdzLkxlbmd0aCgpID4g
JHRyYW5zZmVyTGlzdEluZGV4KSB7XG4iOworICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJDaGVj
a1N0cmluZyAuPSAiICAgICAgICBpZiAoIWV4dHJhY3RUcmFuc2ZlcmFibGVzKGFyZ3NbJHRyYW5z
ZmVyTGlzdEluZGV4XSwgbWVzc2FnZVBvcnRBcnJheV8kdHJhbnNmZXJMaXN0TmFtZSwgYXJyYXlC
dWZmZXJBcnJheV8kdHJhbnNmZXJMaXN0TmFtZSkpXG4iOworICAgICAgICAgICAgICAgICRwYXJh
bWV0ZXJDaGVja1N0cmluZyAuPSAiICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoXCJDb3Vs
ZCBub3QgZXh0cmFjdCB0cmFuc2ZlcmFibGVzXCIsIFY4UHJveHk6OlR5cGVFcnJvcik7XG4iOwor
ICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJDaGVja1N0cmluZyAuPSAiICAgIH1cbiI7CisgICAg
ICAgICAgICAgICAgJHVzZVRyYW5zZmVyTGlzdCA9IDE7CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAkcGFyYW1ldGVyQ2hlY2tTdHJpbmcgLj0gIiAgICBib29sICR7cGFyYW1ldGVyTmFtZX1E
aWRUaHJvdyA9IGZhbHNlO1xuIjsKLSAgICAgICAgICAgICRwYXJhbWV0ZXJDaGVja1N0cmluZyAu
PSAiICAgICRuYXRpdmVUeXBlICRwYXJhbWV0ZXJOYW1lID0gU2VyaWFsaXplZFNjcmlwdFZhbHVl
OjpjcmVhdGUoYXJnc1skcGFyYW1JbmRleF0sIDAsIDAsICR7cGFyYW1ldGVyTmFtZX1EaWRUaHJv
dyk7XG4iOworICAgICAgICAgICAgaWYgKCEkdXNlVHJhbnNmZXJMaXN0KSB7CisgICAgICAgICAg
ICAgICAgICAgICRwYXJhbWV0ZXJDaGVja1N0cmluZyAuPSAiICAgICRuYXRpdmVUeXBlICRwYXJh
bWV0ZXJOYW1lID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoYXJnc1skcGFyYW1JbmRl
eF0sIDAsIDAsICR7cGFyYW1ldGVyTmFtZX1EaWRUaHJvdyk7XG4iOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgJHBhcmFtZXRlckNoZWNrU3RyaW5nIC49ICIgICAg
JG5hdGl2ZVR5cGUgJHBhcmFtZXRlck5hbWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0
ZShhcmdzWyRwYXJhbUluZGV4XSwgJm1lc3NhZ2VQb3J0QXJyYXlfJHRyYW5zZmVyTGlzdE5hbWUs
ICZhcnJheUJ1ZmZlckFycmF5XyR0cmFuc2Zlckxpc3ROYW1lLCAke3BhcmFtZXRlck5hbWV9RGlk
VGhyb3cpO1xuIjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgICRwYXJhbWV0ZXJDaGVja1N0
cmluZyAuPSAiICAgIGlmICgke3BhcmFtZXRlck5hbWV9RGlkVGhyb3cpXG4iOwogICAgICAgICAg
ICAgJHBhcmFtZXRlckNoZWNrU3RyaW5nIC49ICIgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7XG4iOwogICAgICAgICB9IGVsc2lmIChUeXBlQ2FuRmFpbENvbnZlcnNpb24oJHBhcmFtZXRl
cikpIHsKQEAgLTE2MTQsNyArMTY2Niw3IEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawog
CiAgICAgICAgICRwYXJhbUluZGV4Kys7CiAgICAgfQotICAgIHJldHVybiAoJHBhcmFtZXRlckNo
ZWNrU3RyaW5nLCAkcGFyYW1JbmRleCk7CisgICAgcmV0dXJuICgkcGFyYW1ldGVyQ2hlY2tTdHJp
bmcsICRwYXJhbUluZGV4LCAlcmVwbGFjZW1lbnRzKTsKIH0KIAogc3ViIEdlbmVyYXRlQ29uc3Ry
dWN0b3JDYWxsYmFjawpAQCAtMTY1Nyw3ICsxNzA5LDcgQEAgRU5ECiAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwO1xuIik7CiAgICAgfQogCi0gICAg
bXkgKCRwYXJhbWV0ZXJDaGVja1N0cmluZywgJHBhcmFtSW5kZXgpID0gR2VuZXJhdGVQYXJhbWV0
ZXJzQ2hlY2soJGZ1bmN0aW9uLCAkaW1wbENsYXNzTmFtZSk7CisgICAgbXkgKCRwYXJhbWV0ZXJD
aGVja1N0cmluZywgJHBhcmFtSW5kZXgsICVyZXBsYWNlbWVudHMpID0gR2VuZXJhdGVQYXJhbWV0
ZXJzQ2hlY2soJGZ1bmN0aW9uLCAkaW1wbENsYXNzTmFtZSk7CiAgICAgcHVzaChAaW1wbENvbnRl
bnQsICRwYXJhbWV0ZXJDaGVja1N0cmluZyk7CiAKICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifSAmJiAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJDYWxsV2l0aCJ9IGVxICJTY3JpcHRFeGVjdXRpb25Db250ZXh0IikgewpAQCAtMTY3OCw3
ICsxNzMwLDExIEBAIEVORAogICAgIG15ICRpbmRleCA9IDA7CiAgICAgZm9yZWFjaCBteSAkcGFy
YW1ldGVyIChAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pIHsKICAgICAgICAgbGFzdCBpZiAkaW5k
ZXggZXEgJHBhcmFtSW5kZXg7Ci0gICAgICAgIHB1c2goQGFyZ3VtZW50TGlzdCwgJHBhcmFtZXRl
ci0+bmFtZSk7CisgICAgICAgIGlmICgkcmVwbGFjZW1lbnRzeyRwYXJhbWV0ZXItPm5hbWV9KSB7
CisgICAgICAgICAgICBwdXNoKEBhcmd1bWVudExpc3QsICRyZXBsYWNlbWVudHN7JHBhcmFtZXRl
ci0+bmFtZX0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHVzaChAYXJndW1lbnRM
aXN0LCAkcGFyYW1ldGVyLT5uYW1lKTsKKyAgICAgICAgfQogICAgICAgICAkaW5kZXgrKzsKICAg
ICB9CiAKQEAgLTE4NDIsNyArMTg5OCw3IEBAIEVORAogICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBFeGNlcHRpb25Db2RlIGVjID0gMDtcbiIpOwogICAgIH0KIAotICAgIG15ICgkcGFy
YW1ldGVyQ2hlY2tTdHJpbmcsICRwYXJhbUluZGV4KSA9IEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNr
KCRmdW5jdGlvbiwgJGltcGxDbGFzc05hbWUpOworICAgIG15ICgkcGFyYW1ldGVyQ2hlY2tTdHJp
bmcsICRwYXJhbUluZGV4LCAlcmVwbGFjZW1lbnRzKSA9IEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNr
KCRmdW5jdGlvbiwgJGltcGxDbGFzc05hbWUpOwogICAgIHB1c2goQGltcGxDb250ZW50LCAkcGFy
YW1ldGVyQ2hlY2tTdHJpbmcpOwogCiAgICAgcHVzaChAYmVmb3JlQXJndW1lbnRMaXN0LCAiZG9j
dW1lbnQiKTsKQEAgLTE4NTUsNyArMTkxMSwxMSBAQCBFTkQKICAgICBteSAkaW5kZXggPSAwOwog
ICAgIGZvcmVhY2ggbXkgJHBhcmFtZXRlciAoQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KSB7CiAg
ICAgICAgIGxhc3QgaWYgJGluZGV4IGVxICRwYXJhbUluZGV4OwotICAgICAgICBwdXNoKEBhcmd1
bWVudExpc3QsICRwYXJhbWV0ZXItPm5hbWUpOworICAgICAgICBpZiAoJHJlcGxhY2VtZW50c3sk
cGFyYW1ldGVyLT5uYW1lfSkgeworICAgICAgICAgICAgcHVzaChAYXJndW1lbnRMaXN0LCAkcmVw
bGFjZW1lbnRzeyRwYXJhbWV0ZXItPm5hbWV9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHB1c2goQGFyZ3VtZW50TGlzdCwgJHBhcmFtZXRlci0+bmFtZSk7CisgICAgICAgIH0KICAg
ICAgICAgJGluZGV4Kys7CiAgICAgfQogCkBAIC0zMTU1LDYgKzMyMTUsNyBAQCBzdWIgR2VuZXJh
dGVGdW5jdGlvbkNhbGxTdHJpbmcoKQogICAgIG15ICRudW1iZXJPZlBhcmFtZXRlcnMgPSBzaGlm
dDsKICAgICBteSAkaW5kZW50ID0gc2hpZnQ7CiAgICAgbXkgJGltcGxDbGFzc05hbWUgPSBzaGlm
dDsKKyAgICBteSAlcmVwbGFjZW1lbnRzID0gQF87CiAKICAgICBteSAkbmFtZSA9ICRmdW5jdGlv
bi0+c2lnbmF0dXJlLT5uYW1lOwogICAgIG15ICRyZXR1cm5UeXBlID0gR2V0VHlwZUZyb21TaWdu
YXR1cmUoJGZ1bmN0aW9uLT5zaWduYXR1cmUpOwpAQCAtMzE5OSw3ICszMjYwLDkgQEAgc3ViIEdl
bmVyYXRlRnVuY3Rpb25DYWxsU3RyaW5nKCkKICAgICAgICAgbXkgJHBhcmFtTmFtZSA9ICRwYXJh
bWV0ZXItPm5hbWU7CiAgICAgICAgIG15ICRwYXJhbVR5cGUgPSAkcGFyYW1ldGVyLT50eXBlOwog
Ci0gICAgICAgIGlmICgkcGFyYW1ldGVyLT50eXBlIGVxICJJREJLZXkiIHx8ICRwYXJhbWV0ZXIt
PnR5cGUgZXEgIk5vZGVGaWx0ZXIiIHx8ICRwYXJhbWV0ZXItPnR5cGUgZXEgIlhQYXRoTlNSZXNv
bHZlciIpIHsKKyAgICAgICAgaWYgKCRyZXBsYWNlbWVudHN7JHBhcmFtTmFtZX0pIHsKKyAgICAg
ICAgICAgIHB1c2ggQGFyZ3VtZW50cywgJHJlcGxhY2VtZW50c3skcGFyYW1OYW1lfTsKKyAgICAg
ICAgfSBlbHNpZiAoJHBhcmFtZXRlci0+dHlwZSBlcSAiSURCS2V5IiB8fCAkcGFyYW1ldGVyLT50
eXBlIGVxICJOb2RlRmlsdGVyIiB8fCAkcGFyYW1ldGVyLT50eXBlIGVxICJYUGF0aE5TUmVzb2x2
ZXIiKSB7CiAgICAgICAgICAgICBwdXNoIEBhcmd1bWVudHMsICIkcGFyYW1OYW1lLmdldCgpIjsK
ICAgICAgICAgfSBlbHNpZiAoJGNvZGVHZW5lcmF0b3ItPklzU1ZHVHlwZU5lZWRpbmdUZWFyT2Zm
KCRwYXJhbWV0ZXItPnR5cGUpIGFuZCBub3QgJGltcGxDbGFzc05hbWUgPX4gL0xpc3QkLykgewog
ICAgICAgICAgICAgcHVzaCBAYXJndW1lbnRzLCAiJHBhcmFtTmFtZS0+cHJvcGVydHlSZWZlcmVu
Y2UoKSI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0
dHJpYnV0ZXMudHh0IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1
dGVzLnR4dAppbmRleCBkMTA1ZTA4NzI3ZGU5MTE3N2VmNTE5MjBkNzE3NDRmZjc5MGQ5Yzk4Li5i
ODc2NGIyOWJkM2I5ODhjZDUxZWJiZDRiYWM5ZWE5ZmRlMTFlNzFhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0CisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQKQEAgLTk3LDYgKzk3
LDcgQEAgUmVwbGFjZWFibGVDb25zdHJ1Y3RvcgogUmV0dXJuTmV3T2JqZWN0CiBTdHJpY3RUeXBl
Q2hlY2tpbmcKIFN1cHBsZW1lbnRhbD0qCitUcmFuc2Zlckxpc3Q9KgogVHJlYXROdWxsQXM9TnVs
bFN0cmluZwogVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcz1GYWxzZXxOdWxsfFVuZGVmaW5lZAog
VHJlYXRVbmRlZmluZWRBcz1OdWxsU3RyaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9X
ZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAppbmRleCA1NDE1NDY0
NTBhNThkMzI3MzZkYWNjNzU1YjgzYjYyOGRlMDg1ODhlLi44MGJhOTU5MzY0ZjczOWU0ZWE2NzQ1
MDg0MGYzZWM2MjEzY2RkZmIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9N
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKQEAgLTI0LDggKzI0LDEwIEBA
CiAKICNpbmNsdWRlICJXZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgi
CiAKKyNpbmNsdWRlICJBcnJheS5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5o
IgogI2luY2x1ZGUgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaCIKKyNpbmNs
dWRlICJXZWJET01BcnJheS5oIgogI2luY2x1ZGUgIldlYkV4Y2VwdGlvbkhhbmRsZXIuaCIKICNp
bmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtMTIzLDYg
KzEyNSwxNCBAQCBXZWJET01TdHJpbmcgV2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZTo6Y2FjaGVkUmVhZG9ubHlWYWx1ZSgpIGNvbgogICAgIHJldHVybiBpbXBsKCktPmNh
Y2hlZFJlYWRvbmx5VmFsdWUoKS0+dG9TdHJpbmcoKTsKIH0KIAordm9pZCBXZWJET01UZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjphY2NlcHRUcmFuc2Zlckxpc3QoY29uc3QgV2Vi
RE9NU3RyaW5nJiBkYXRhLCBjb25zdCBXZWJET01BcnJheSYgdHJhbnNmZXJMaXN0KQoreworICAg
IGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbXBsKCktPmFjY2VwdFRyYW5z
ZmVyTGlzdChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShXVEY6OlN0cmlu
ZyhkYXRhKSksIHRvV2ViQ29yZSh0cmFuc2Zlckxpc3QpKTsKK30KKwogV2ViQ29yZTo6VGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogdG9XZWJDb3JlKGNvbnN0IFdlYkRPTVRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UmIHdyYXBwZXIpCiB7CiAgICAgcmV0dXJuIHdy
YXBwZXIuaW1wbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0NQUC9XZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmggYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaAppbmRleCBkMDNiNzVlNmE3NjdmMjJjZmNmYmY5YTVk
NTU4MjJkZTcxYjI0Mzk5Li41MzcxYmQzMzNjMDIzYzM3YWExODhlZjRlZTJlZWIzNWVhOGYwYWM0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dl
YkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UuaApAQCAtMzIsNiArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBj
bGFzcyBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOwogfTsKIAorY2xhc3MgV2Vi
RE9NQXJyYXk7CiBjbGFzcyBXZWJET01TdHJpbmc7CiAKIGNsYXNzIFdlYkRPTVRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgOiBwdWJsaWMgV2ViRE9NT2JqZWN0IHsKQEAgLTQ5LDYg
KzUwLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q2FjaGVkVmFsdWUoY29uc3QgV2ViRE9NU3Ry
aW5nJik7CiAgICAgV2ViRE9NU3RyaW5nIGNhY2hlZFJlYWRvbmx5VmFsdWUoKSBjb25zdDsKIAor
ICAgIHZvaWQgYWNjZXB0VHJhbnNmZXJMaXN0KGNvbnN0IFdlYkRPTVN0cmluZyYgZGF0YSwgY29u
c3QgV2ViRE9NQXJyYXkmIHRyYW5zZmVyTGlzdCk7CisKICAgICBXZWJDb3JlOjpUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBpbXBsKCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKaW5kZXggOTYxYzRiM2E1YzJmOTJkNDczNjQ0NTYx
NjBjOGZiNTgwNmRhMzc0Zi4uZTBlNjlhOWZjZWVmNGEzZTUxNjhiNTQ5Zjc5OGM4MmM1ZTBiNjkx
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmpl
Y3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKQEAgLTMyLDYgKzMyLDggQEAKICNp
bmNsdWRlICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAi
V2ViS2l0RE9NQmluZGluZy5oIgogI2luY2x1ZGUgImdvYmplY3QvQ29udmVydFRvVVRGOFN0cmlu
Zy5oIgorI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01BcnJheS5oIgorI2luY2x1ZGUgIndlYmtp
dC9XZWJLaXRET01BcnJheVByaXZhdGUuaCIKICNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTVNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZVByaXZhdGUuaCIKICNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oIgpAQCAtNTQsNiArNTYsMjcgQEAgV2ViS2l0
RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSoga2l0KFdlYkNvcmU6OlRlc3RT
ZXJpYWxpemVkU2NyaXB0VmEKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdCAvLwogCit2b2lk
Cit3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2FjY2Vw
dF90cmFuc2Zlcl9saXN0KFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UqIHNlbGYsIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogZGF0YSwgV2ViS2l0RE9N
QXJyYXkqIHRyYW5zZmVyX2xpc3QpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CisgICAgZ19yZXR1cm5faWZfZmFpbChkYXRhKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHRy
YW5zZmVyX2xpc3QpOworICAgIFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSAqIGNvbnZl
cnRlZF9kYXRhID0gTlVMTDsKKyAgICBpZiAoZGF0YSAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZl
cnRlZF9kYXRhID0gV2ViS2l0Ojpjb3JlKGRhdGEpOworICAgICAgICBnX3JldHVybl9pZl9mYWls
KGNvbnZlcnRlZF9kYXRhKTsKKyAgICB9CisgICAgV2ViQ29yZTo6QXJyYXkgKiBjb252ZXJ0ZWRf
dHJhbnNmZXJfbGlzdCA9IE5VTEw7CisgICAgaWYgKHRyYW5zZmVyX2xpc3QgIT0gTlVMTCkgewor
ICAgICAgICBjb252ZXJ0ZWRfdHJhbnNmZXJfbGlzdCA9IFdlYktpdDo6Y29yZSh0cmFuc2Zlcl9s
aXN0KTsKKyAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfdHJhbnNmZXJfbGlzdCk7
CisgICAgfQorICAgIGl0ZW0tPmFjY2VwdFRyYW5zZmVyTGlzdChjb252ZXJ0ZWRfZGF0YSwgY29u
dmVydGVkX3RyYW5zZmVyX2xpc3QpOworfQorCiBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFs
dWUqCiB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dl
dF92YWx1ZShXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBzZWxm
KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCmluZGV4IDUxNjE0MTg1OWNlM2U1M2NiNTRl
NGJlYmYzZTQ5MjNjYzllNGYzZGMuLjAwZDc3ZTg0YjA0M2M0OGM5ZGY3MjRlNDAyMjZiMmI0MzVh
ZTAxZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01U
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgKQEAgLTQ3LDYgKzQ3LDE4IEBAIFdF
QktJVF9BUEkgR1R5cGUKIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9p
bnRlcmZhY2VfZ2V0X3R5cGUgKHZvaWQpOwogCiAvKioKKyAqIHdlYmtpdF9kb21fdGVzdF9zZXJp
YWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfYWNjZXB0X3RyYW5zZmVyX2xpc3Q6CisgKiBA
c2VsZjogQSAjV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZQorICog
QGRhdGE6IEEgI1dlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZQorICogQHRyYW5zZmVyX2xp
c3Q6IEEgI1dlYktpdERPTUFycmF5CisgKgorICogUmV0dXJuczoKKyAqCisqKi8KK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFj
ZV9hY2NlcHRfdHJhbnNmZXJfbGlzdChXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlKiBzZWxmLCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIGRhdGEsIFdl
YktpdERPTUFycmF5KiB0cmFuc2Zlcl9saXN0KTsKKworLyoqCiAgKiB3ZWJraXRfZG9tX3Rlc3Rf
c2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF92YWx1ZToKICAqIEBzZWxmOiBB
ICNXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlCiAgKgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcApp
bmRleCBjMGVhNmVhYWQ5ZThkMDU3YTRlZDU3NWVjM2JjNzJlMTRhOWUwYjU0Li4wOTA5MDk4Mjk4
MTY2NzBkMzliYmRkZmQzNGU3OTRlNjM3YWYyOTQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcApAQCAtMjUsMTIgKzI1LDE4
IEBACiAjaW5jbHVkZSAiSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgiCiAK
ICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1
ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgog
I2luY2x1ZGUgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaCIKICNpbmNsdWRl
IDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogCisjaWYgRU5BQkxF
KENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQorI2luY2x1ZGUgIi5oIgorI2luY2x1
ZGUgIkpTLmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNjksNyArNzUsNyBAQCB2b2lkIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqCiAgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpKTsKICAgICBBU1NFUlQoaW5oZXJp
dHMoJnNfaW5mbykpOwogICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZVByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVh
ZE9ubHkpOwotICAgIHB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDIpLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250
RW51bSk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlO
YW1lcygpLmxlbmd0aCwganNOdW1iZXIoMyksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRF
bnVtKTsKIH0KIAogYm9vbCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25z
dHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKQEAg
LTkwLDEwICs5NiwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yOjpjbwogICAgIGNvbnN0IFN0cmlu
ZyYgaGVsbG8odXN0cmluZ1RvU3RyaW5nKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAs
IERlZmF1bHRJc1VuZGVmaW5lZCkuaXNFbXB0eSgpID8gVVN0cmluZygpIDogTUFZQkVfTUlTU0lO
R19QQVJBTUVURVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKS50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYykpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gdmFsdWUoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywg
TUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMSwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOwor
ICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEoU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpjcmVhdGUoZXhlYywgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMSwgRGVmYXVs
dElzVW5kZWZpbmVkKSkpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKworICAgIHNpemVfdCBhcmdz
Q291bnQgPSBleGVjLT5hcmd1bWVudENvdW50KCk7CisgICAgaWYgKGFyZ3NDb3VudCA8PSAyKSB7
CisKKyAgICAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+
Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwtPmNvbnN0cnVjdG9yQ2FsbGJhY2soaGVs
bG8sIGRhdGEpKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAg
ICB9CisKKyAgICBBcnJheSogdHJhbnNmZXJMaXN0KHRvQXJyYXkoTUFZQkVfTUlTU0lOR19QQVJB
TUVURVIoZXhlYywgMiwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOwogICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKLSAgICBSZWZQdHI8VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT4gb2JqZWN0
ID0gVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6Y3JlYXRlKGhlbGxvLCB2YWx1
ZSk7CisgICAgUmVmUHRyPFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+IG9iamVj
dCA9IFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmNyZWF0ZShoZWxsbywgZGF0
YSwgdHJhbnNmZXJMaXN0KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFzT2JqZWN0KHRv
SlMoZXhlYywganNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksIG9iamVjdC5nZXQoKSkpKTsK
IH0KIApAQCAtMTA3LDEwICsxMjQsMTEgQEAgQ29uc3RydWN0VHlwZSBKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YSgKIAogc3Rh
dGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZVByb3RvdHlwZVRhYmxlVmFsdWVzW10gPQogeworICAgIHsgImFjY2VwdFRyYW5zZmVyTGlz
dCIsIERvbnREZWxldGUgfCBKU0M6OkZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0
aXZlRnVuY3Rpb24+KGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlw
ZUZ1bmN0aW9uQWNjZXB0VHJhbnNmZXJMaXN0KSwgKGludHB0cl90KTIsIE5vSW50cmluc2ljIH0s
CiAgICAgeyAwLCAwLCAwLCAwLCBOb0ludHJpbnNpYyB9CiB9OwogCi1zdGF0aWMgY29uc3QgSGFz
aFRhYmxlIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZVRhYmxl
ID0geyAxLCAwLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVU
YWJsZVZhbHVlcywgMCB9Oworc3RhdGljIGNvbnN0IEhhc2hUYWJsZSBKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVUYWJsZSA9IHsgMiwgMSwgSlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAgfTsKIGNvbnN0
IENsYXNzSW5mbyBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGU6
OnNfaW5mbyA9IHsgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUi
LCAmQmFzZTo6c19pbmZvLCAmSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJv
dG90eXBlVGFibGUsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlKSB9OwogCiBKU09iamVjdCogSlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlOjpzZWxmKEV4ZWNTdGF0ZSogZXhlYywgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKQEAgLTExOCw2ICsxMzYsMTggQEAgSlNPYmplY3Qq
IEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZTo6c2VsZihFeGVj
U3RhdGUqIGV4ZWMsIEoKICAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT4oZXhlYywgZ2xvYmFsT2JqZWN0KTsKIH0KIAorYm9vbCBK
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGU6OmdldE93blByb3Bl
cnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSo+KGNlbGwpOworICAgIHJl
dHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8SlNPYmplY3Q+KGV4ZWMsICZKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVUYWJsZSwgdGhpc09iamVjdCwgcHJvcGVy
dHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VQcm90b3R5cGU6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZVByb3RvdHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUqPihvYmplY3QpOworICAgIHJldHVybiBn
ZXRTdGF0aWNGdW5jdGlvbkRlc2NyaXB0b3I8SlNPYmplY3Q+KGV4ZWMsICZKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVUYWJsZSwgdGhpc09iamVjdCwgcHJvcGVy
dHlOYW1lLCBkZXNjcmlwdG9yKTsKK30KKwogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6c19pbmZvID0geyAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZSIsICZCYXNlOjpzX2luZm8sICZKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2VUYWJsZSwgMCAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlKSB9OwogCiBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2U6OkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZShTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPiBpbXBsKQpAQCAtMjQyLDYgKzI3Miwz
MyBAQCBKU1ZhbHVlIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6Z2V0Q29u
c3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKUwogICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3Rv
cjxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rvcj4oZXhlYywg
c3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKIH0KIAorRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VQcm90b3R5cGVGdW5jdGlvbkFjY2VwdFRyYW5zZmVyTGlzdChFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CisgICAg
aWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZTo6c19pbmZvKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7Cisg
ICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBjYXN0ZWRUaGlzID0gc3Rh
dGljX2Nhc3Q8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKj4oYXNPYmplY3Qo
dGhpc1ZhbHVlKSk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAm
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpzX2luZm8pOworICAgIFRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBp
ZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIk5vdCBlbm91Z2ggYXJndW1lbnRzIikpOwor
ICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGRhdGEoU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpjcmVhdGUoZXhlYywgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwgRGVmYXVs
dElzVW5kZWZpbmVkKSkpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKworICAgIHNpemVfdCBhcmdz
Q291bnQgPSBleGVjLT5hcmd1bWVudENvdW50KCk7CisgICAgaWYgKGFyZ3NDb3VudCA8PSAxKSB7
CisgICAgICAgIGltcGwtPmFjY2VwdFRyYW5zZmVyTGlzdChkYXRhKTsKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9CisKKyAgICBBcnJheSogdHJh
bnNmZXJMaXN0KHRvQXJyYXkoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMSwgRGVmYXVs
dElzVW5kZWZpbmVkKSkpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBpbXBsLT5hY2NlcHRU
cmFuc2Zlckxpc3QoZGF0YSwgdHJhbnNmZXJMaXN0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworfQorCiB2b2lkIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqPihjZWxs
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UuaAppbmRleCBjOTQ0ZTQyYTNhNTFmZGJkY2E4N2I1ZWRmYjZhZDllZjFhOWYxYWVmLi44YjY5
MzZhNDU3ODBjOWQzZWFjNTEyMTg5N2FmOTE3MjFlODE2NDljIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCkBAIC0xMDMsNiArMTAz
LDggQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBz
X2luZm87CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxsKiwg
SlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5U2xv
dCYpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3Bl
cnR5RGVzY3JpcHRvciYpOwogICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKEpTQzo6SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewogICAgICAgICByZXR1
cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNf
aW5mbyk7CkBAIC0xMTEsNyArMTEzLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUoSlNDOjpKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlKSA6IEpTQzo6SlNOb25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpIHsgfQog
cHJvdGVjdGVkOgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpT
Qzo6T3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgQmFzZTo6U3RydWN0
dXJlRmxhZ3M7CiB9OwogCiBjbGFzcyBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2VDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7CkBAIC0xNDEsNiAr
MTQzLDkgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29u
c3RydWN0RGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q29uc3RydWN0RGF0YSYpOwogfTsKIAorLy8g
RnVuY3Rpb25zCisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkFjY2VwdFRyYW5zZmVy
TGlzdChKU0M6OkV4ZWNTdGF0ZSopOwogLy8gQXR0cmlidXRlcwogCiBKU0M6OkpTVmFsdWUganNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L09iakMvRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCmluZGV4IGI1ZjNh
MTdjOTViMjUxMTIxYjU5NTFkYjdiY2E1YmVkNDQ5OWI3Y2UuLmNjZTg5YzM5ODlmZDljZWY5MjVi
OTUwNjc3YmFjNDNmNGRkOWJmMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lm
IFdFQktJVF9WRVJTSU9OX01BWF9BTExPV0VEID49IFdFQktJVF9WRVJTSU9OX0xBVEVTVAogCitA
Y2xhc3MgRE9NQXJyYXk7CiBAY2xhc3MgTlNTdHJpbmc7CiAKIEBpbnRlcmZhY2UgRE9NVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSA6IERPTU9iamVjdApAQCAtMzcsNiArMzgsNyBA
QAogLSAoTlNTdHJpbmcgKiljYWNoZWRWYWx1ZTsKIC0gKHZvaWQpc2V0Q2FjaGVkVmFsdWU6KE5T
U3RyaW5nICopbmV3Q2FjaGVkVmFsdWU7CiAtIChOU1N0cmluZyAqKWNhY2hlZFJlYWRvbmx5VmFs
dWU7CistICh2b2lkKWFjY2VwdFRyYW5zZmVyTGlzdDooTlNTdHJpbmcgKilkYXRhIHRyYW5zZmVy
TGlzdDooRE9NQXJyYXkgKil0cmFuc2Zlckxpc3Q7CiBAZW5kCiAKICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5tbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UubW0K
aW5kZXggMzg4ZjFjNTZkN2NiMjgyZTc5ZGUzMGM5NzFmOGNjMDU1N2FmZjExMC4uMDBkYzM2MmVh
ODMxZmQyZjE1ZWZmNmFmNmFhOTc1MzVkYThhOGRkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
T2JqQy9ET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLm1tCkBAIC0zMiw2ICsz
Miw4IEBACiAKICNpbXBvcnQgIkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uu
aCIKIAorI2ltcG9ydCAiQXJyYXkuaCIKKyNpbXBvcnQgIkRPTUFycmF5SW50ZXJuYWwuaCIKICNp
bXBvcnQgIkRPTUJsb2JJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NQ1NTUnVsZUludGVybmFsLmgi
CiAjaW1wb3J0ICJET01DU1NWYWx1ZUludGVybmFsLmgiCkBAIC0xMDksNiArMTExLDEyIEBACiAg
ICAgcmV0dXJuIElNUEwtPmNhY2hlZFJlYWRvbmx5VmFsdWUoKS0+dG9TdHJpbmcoKTsKIH0KIAor
LSAodm9pZClhY2NlcHRUcmFuc2Zlckxpc3Q6KE5TU3RyaW5nICopZGF0YSB0cmFuc2Zlckxpc3Q6
KERPTUFycmF5ICopdHJhbnNmZXJMaXN0Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVs
bFN0YXRlIHN0YXRlOworICAgIElNUEwtPmFjY2VwdFRyYW5zZmVyTGlzdChXZWJDb3JlOjpTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShXVEY6OlN0cmluZyhkYXRhKSksIGNvcmUodHJhbnNm
ZXJMaXN0KSk7Cit9CisKIEBlbmQKIAogV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZSogY29yZShET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlICp3
cmFwcGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaWRsIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uu
aWRsCmluZGV4IGRkZGVlOWZhZTY0ZGVjM2YwOTY5MjcyMGI3MzA2MzJhYTE2OTRjOTYuLmM2Mjkz
MTlhNjgzOWJmNmJlMjhhZDMxNzhhOGUzYTI0Mjg5ZmI3MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5pZGwKQEAgLTI5LDEwICsyOSwxMiBAQCBt
b2R1bGUgdGVzdCB7CiAgICAgaW50ZXJmYWNlIFsKICAgICAgICAgQ29uZGl0aW9uYWw9Q29uZGl0
aW9uMXxDb25kaXRpb24yLAogICAgICAgICBDb25zdHJ1Y3RvcihpbiBET01TdHJpbmcgaGVsbG8s
IGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB2YWx1ZSksCisgICAgICAgIENvbnN0cnVjdG9yKGlu
IERPTVN0cmluZyBoZWxsbywgaW4gW1RyYW5zZmVyTGlzdD10cmFuc2Zlckxpc3RdIFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZSBkYXRhLCBpbiBbT3B0aW9uYWxdIEFycmF5IHRyYW5zZmVyTGlzdCksCiAg
ICAgXSBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlIHsKICAgICAgICAgYXR0cmli
dXRlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB2YWx1ZTsKICAgICAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSByZWFkb25seVZhbHVlOwogICAgICAgICBhdHRyaWJ1
dGUgW0NhY2hlZEF0dHJpYnV0ZV0gU2VyaWFsaXplZFNjcmlwdFZhbHVlIGNhY2hlZFZhbHVlOwog
ICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0NhY2hlZEF0dHJpYnV0ZV0gU2VyaWFsaXplZFNj
cmlwdFZhbHVlIGNhY2hlZFJlYWRvbmx5VmFsdWU7CisgICAgICAgIHZvaWQgYWNjZXB0VHJhbnNm
ZXJMaXN0KGluIFtUcmFuc2Zlckxpc3Q9dHJhbnNmZXJMaXN0XSBTZXJpYWxpemVkU2NyaXB0VmFs
dWUgZGF0YSwgaW4gW09wdGlvbmFsXSBBcnJheSB0cmFuc2Zlckxpc3QpOwogICAgIH07CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uu
Y3BwCmluZGV4IGYzMjlhYjBmMzM1NDVmMjI0YjQ4YjYyZDY0MDg1Y2Q5NTI0NjA1ZWMuLjZhZTdi
YWMwY2Y0MWQ5YjBlNGRlOTQxMzU0MzUzMzMxMDg2NzRlYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCkBAIC0yMywxNSAr
MjMsMjEgQEAKIAogI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikK
IAorI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgor
I2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJl
cy5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgIlY4Lmgi
CiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nTWFjcm9zLmgiCiAj
aW5jbHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIKICNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKICNp
bmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKKyNpbmNs
dWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTEwMyw2ICsxMDksMzAgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBjYWNoZWRSZWFkb25seVZhbHVlQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4K
ICAgICByZXR1cm4gdmFsdWU7CiB9CiAKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYWNj
ZXB0VHJhbnNmZXJMaXN0Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAg
ICBJTkNfU1RBVFMoIkRPTS5UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmFjY2Vw
dFRyYW5zZmVyTGlzdCIpOworICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKKyAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIiwgVjhQcm94eTo6VHlwZUVycm9y
KTsKKyAgICBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBpbXAgPSBWOFRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwor
ICAgIE1lc3NhZ2VQb3J0QXJyYXkgbWVzc2FnZVBvcnRBcnJheV90cmFuc2Zlckxpc3Q7CisgICAg
QXJyYXlCdWZmZXJBcnJheSBhcnJheUJ1ZmZlckFycmF5X3RyYW5zZmVyTGlzdDsKKyAgICBpZiAo
YXJncy5MZW5ndGgoKSA+IDEpIHsKKyAgICAgICAgaWYgKCFleHRyYWN0VHJhbnNmZXJhYmxlcyhh
cmdzWzFdLCBtZXNzYWdlUG9ydEFycmF5X3RyYW5zZmVyTGlzdCwgYXJyYXlCdWZmZXJBcnJheV90
cmFuc2Zlckxpc3QpKQorICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkNvdWxkIG5vdCBl
eHRyYWN0IHRyYW5zZmVyYWJsZXMiLCBWOFByb3h5OjpUeXBlRXJyb3IpOworICAgIH0KKyAgICBi
b29sIGRhdGFEaWRUaHJvdyA9IGZhbHNlOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IGRhdGEgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShhcmdzWzBdLCAmbWVzc2Fn
ZVBvcnRBcnJheV90cmFuc2Zlckxpc3QsICZhcnJheUJ1ZmZlckFycmF5X3RyYW5zZmVyTGlzdCwg
ZGF0YURpZFRocm93KTsKKyAgICBpZiAoZGF0YURpZFRocm93KQorICAgICAgICByZXR1cm4gdjg6
OlVuZGVmaW5lZCgpOworICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9IDEpIHsKKyAgICAgICAgaW1w
LT5hY2NlcHRUcmFuc2Zlckxpc3QoZGF0YSk7CisgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4oKTsKKyAgICB9CisgICAgaW1wLT5hY2NlcHRUcmFuc2Zlckxpc3QoZGF0YSwgbWVz
c2FnZVBvcnRBcnJheV90cmFuc2Zlckxpc3QpOworICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4oKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZUludGVybmFsCiAKIHN0YXRpYyBjb25zdCBCYXRjaGVkQXR0cmlidXRlIFRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VBdHRyc1tdID0gewpAQCAtMTE2LDYgKzE0NiwxMCBA
QCBzdGF0aWMgY29uc3QgQmF0Y2hlZEF0dHJpYnV0ZSBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlQXR0cnNbXSA9IHsKICAgICB7ImNhY2hlZFJlYWRvbmx5VmFsdWUiLCBUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlSW50ZXJuYWw6OmNhY2hlZFJlYWRvbmx5VmFsdWVB
dHRyR2V0dGVyLCAwLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250
cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6
Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKIH07CiAKK3N0YXRpYyBjb25zdCBCYXRjaGVk
Q2FsbGJhY2sgVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhbGxiYWNrc1tdID0g
eworICAgIHsiYWNjZXB0VHJhbnNmZXJMaXN0IiwgVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZUludGVybmFsOjphY2NlcHRUcmFuc2Zlckxpc3RDYWxsYmFja30sCit9OworCiB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpj
b25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5D
X1NUQVRTKCJET00uVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5Db25zdHJ1Y3Rv
ciIpOwpAQCAtMTI4LDEyICsxNjIsMjEgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4VGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6Y29uc3RydWN0b3JDYWxsYmFjaygKICAgICBp
ZiAoYXJncy5MZW5ndGgoKSA8IDIpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJOb3QgZW5v
dWdoIGFyZ3VtZW50cyIsIFY4UHJveHk6OlR5cGVFcnJvcik7CiAgICAgU1RSSU5HX1RPX1Y4UEFS
QU1FVEVSX0VYQ0VQVElPTl9CTE9DSyhWOFBhcmFtZXRlcjw+LCBoZWxsbywgTUFZQkVfTUlTU0lO
R19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSk7Ci0gICAgYm9vbCB2YWx1
ZURpZFRocm93ID0gZmFsc2U7Ci0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFs
dWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShhcmdzWzFdLCAwLCAwLCB2YWx1ZURp
ZFRocm93KTsKLSAgICBpZiAodmFsdWVEaWRUaHJvdykKKyAgICBNZXNzYWdlUG9ydEFycmF5IG1l
c3NhZ2VQb3J0QXJyYXlfdHJhbnNmZXJMaXN0OworICAgIEFycmF5QnVmZmVyQXJyYXkgYXJyYXlC
dWZmZXJBcnJheV90cmFuc2Zlckxpc3Q7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiAyKSB7Cisg
ICAgICAgIGlmICghZXh0cmFjdFRyYW5zZmVyYWJsZXMoYXJnc1syXSwgbWVzc2FnZVBvcnRBcnJh
eV90cmFuc2Zlckxpc3QsIGFycmF5QnVmZmVyQXJyYXlfdHJhbnNmZXJMaXN0KSkKKyAgICAgICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKCJDb3VsZCBub3QgZXh0cmFjdCB0cmFuc2ZlcmFibGVzIiwg
VjhQcm94eTo6VHlwZUVycm9yKTsKKyAgICB9CisgICAgYm9vbCBkYXRhRGlkVGhyb3cgPSBmYWxz
ZTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhID0gU2VyaWFsaXplZFNj
cmlwdFZhbHVlOjpjcmVhdGUoYXJnc1sxXSwgJm1lc3NhZ2VQb3J0QXJyYXlfdHJhbnNmZXJMaXN0
LCAmYXJyYXlCdWZmZXJBcnJheV90cmFuc2Zlckxpc3QsIGRhdGFEaWRUaHJvdyk7CisgICAgaWYg
KGRhdGFEaWRUaHJvdykKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICBpZiAo
YXJncy5MZW5ndGgoKSA8PSAyKSB7CisgICAgICAgIHJldHVybiB0b1Y4KGltcC0+Q29uc3RydWN0
b3IoaGVsbG8sIGRhdGEpKTsKKyAgICB9CiAKLSAgICBSZWZQdHI8VGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZT4gaW1wbCA9IFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2U6OmNyZWF0ZShoZWxsbywgdmFsdWUpOworICAgIFJlZlB0cjxUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlPiBpbXBsID0gVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZTo6Y3JlYXRlKGhlbGxvLCBkYXRhLCBtZXNzYWdlUG9ydEFycmF5X3RyYW5zZmVyTGlzdCk7CiAg
ICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gYXJncy5Ib2xkZXIoKTsKIAogICAg
IFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcih3cmFwcGVyLCAmaW5mbywgaW1wbC5nZXQoKSk7
CkBAIC0xNDksOSArMTkyLDEzIEBAIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4gQ29uZmlndXJlVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlCiAgICAgdjg6Okxv
Y2FsPHY4OjpTaWduYXR1cmU+IGRlZmF1bHRTaWduYXR1cmU7CiAgICAgZGVmYXVsdFNpZ25hdHVy
ZSA9IGNvbmZpZ3VyZVRlbXBsYXRlKGRlc2MsICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlIiwgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+KCksIFY4VGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6aW50ZXJuYWxGaWVsZENvdW50LAogICAgICAg
ICBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQXR0cnMsIFdURl9BUlJBWV9MRU5H
VEgoVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUF0dHJzKSwKLSAgICAgICAgMCwg
MCk7CisgICAgICAgIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWxsYmFja3Ms
IFdURl9BUlJBWV9MRU5HVEgoVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhbGxi
YWNrcykpOwogICAgIFVOVVNFRF9QQVJBTShkZWZhdWx0U2lnbmF0dXJlKTsgLy8gSW4gc29tZSBj
YXNlcywgaXQgd2lsbCBub3QgYmUgdXNlZC4KICAgICBkZXNjLT5TZXRDYWxsSGFuZGxlcihWOFRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmNvbnN0cnVjdG9yQ2FsbGJhY2spOwor
ICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0VGVtcGxhdGU+IGluc3RhbmNlID0gZGVzYy0+SW5zdGFu
Y2VUZW1wbGF0ZSgpOworICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0VGVtcGxhdGU+IHByb3RvID0g
ZGVzYy0+UHJvdG90eXBlVGVtcGxhdGUoKTsKKyAgICBVTlVTRURfUEFSQU0oaW5zdGFuY2UpOyAv
LyBJbiBzb21lIGNhc2VzLCBpdCB3aWxsIG5vdCBiZSB1c2VkLgorICAgIFVOVVNFRF9QQVJBTShw
cm90byk7IC8vIEluIHNvbWUgY2FzZXMsIGl0IHdpbGwgbm90IGJlIHVzZWQuCiAgICAgCiAKICAg
ICAvLyBDdXN0b20gdG9TdHJpbmcgdGVtcGxhdGUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132089</attachid>
            <date>2012-03-15 11:38:39 -0700</date>
            <delta_ts>2012-03-15 14:59:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81127-20120315113838.patch</filename>
            <type>text/plain</type>
            <size>43459</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwNDExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGQ3ZGVhNDA5OGEwYzQ2
ODVhNGQwMDBlMmNhNTVhZWM5NTAwYTNmOC4uZTk2MTQyMWJiMDQyM2FmOTMwZDYzMWU5ODJjMDg1
M2RkYjMyZDc5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDEyLTAzLTE0ICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIEFkZCBUcmFuc2Zlckxp
c3QgSURMIG1vZGlmaWVyLCB3aXRoIHN1cHBvcnQgaW4gVjggY29kZSBnZW4uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTEyNworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgIChHZW5lcmF0ZUZ1bmN0aW9uQ2FsbGJhY2spOgor
ICAgICAgICAoR2V0SW5kZXhPZik6CisgICAgICAgIChHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjayk6
CisgICAgICAgIChHZW5lcmF0ZUNvbnN0cnVjdG9yQ2FsbGJhY2spOgorICAgICAgICAoR2VuZXJh
dGVOYW1lZENvbnN0cnVjdG9yQ2FsbGJhY2spOgorICAgICAgICAoR2VuZXJhdGVGdW5jdGlvbkNh
bGxTdHJpbmcpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQ6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkRPTVRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2U6OmFjY2VwdFRyYW5zZmVyTGlzdCk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlLmg6CisgICAgICAgIChXZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01U
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKHdlYmtpdF9k
b21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfYWNjZXB0X3RyYW5zZmVy
X2xpc3QpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90
eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlUHJvdG90eXBlRnVuY3Rpb25BY2NlcHRUcmFuc2Zlckxpc3QpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uu
aDoKKyAgICAgICAgKEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlw
ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
T2JqQy9ET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmg6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZS5tbToKKyAgICAgICAgKC1bRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZSBhY2NlcHRUcmFuc2Zlckxpc3Q6dHJhbnNmZXJMaXN0Ol0pOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmlkbDoK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VJbnRlcm5hbDo6YWNjZXB0VHJhbnNmZXJMaXN0Q2FsbGJhY2spOgor
ICAgICAgICAoVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUludGVybmFsKToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlOjpjb25zdHJ1Y3RvckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbmZpZ3VyZVY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVRlbXBsYXRlKToK
KwogMjAxMi0wMy0xMSAgVmljdG9yIENhcmJ1bmUgIDx2Y2FyYnVuZUBhZG9iZS5jb20+CiAKICAg
ICAgICAgVGhlIG1haW4gY29kZSBzdHJ1Y3R1cmUgZm9yIHBsYWNpbmcgZnV0dXJlIHRleHQgdHJh
Y2sgY3VlIHJlbmRlcmluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCBhNWRhYmRmZDU5YzlmNGU1OGU2Y2UzOThjYmFiZGUy
NGU0M2JjYjVmLi4zNDVhZmFkYWI3YzgyYTQ5NjM5OGE4YzkyN2I1YmM5NTgxOGNkNjI3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5w
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5w
bQpAQCAtMTQzMSwxMSArMTQzMSwxMSBAQCBFTkQKIEVORAogICAgIH0KIAotICAgIG15ICgkcGFy
YW1ldGVyQ2hlY2tTdHJpbmcsICRwYXJhbUluZGV4KSA9IEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNr
KCRmdW5jdGlvbiwgJGltcGxDbGFzc05hbWUpOworICAgIG15ICgkcGFyYW1ldGVyQ2hlY2tTdHJp
bmcsICRwYXJhbUluZGV4LCAlcmVwbGFjZW1lbnRzKSA9IEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNr
KCRmdW5jdGlvbiwgJGltcGxDbGFzc05hbWUpOwogICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMs
ICRwYXJhbWV0ZXJDaGVja1N0cmluZyk7CiAKICAgICAjIEJ1aWxkIHRoZSBmdW5jdGlvbiBjYWxs
IHN0cmluZy4KLSAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCBHZW5lcmF0ZUZ1bmN0aW9uQ2Fs
bFN0cmluZygkZnVuY3Rpb24sICRwYXJhbUluZGV4LCAiICAgICIsICRpbXBsQ2xhc3NOYW1lKSk7
CisgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgR2VuZXJhdGVGdW5jdGlvbkNhbGxTdHJpbmco
JGZ1bmN0aW9uLCAkcGFyYW1JbmRleCwgIiAgICAiLCAkaW1wbENsYXNzTmFtZSwgJXJlcGxhY2Vt
ZW50cykpOwogCiAgICAgaWYgKCRyYWlzZXNFeGNlcHRpb25zKSB7CiAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50RGVjbHMsICIgICAgfVxuIik7CkBAIC0xNTE2LDYgKzE1MTYsMjAgQEAgc3ViIEdl
bmVyYXRlQXJndW1lbnRzQ291bnRDaGVjawogICAgIHJldHVybiAkYXJndW1lbnRzQ291bnRDaGVj
a1N0cmluZzsKIH0KIAorc3ViIEdldEluZGV4T2YKK3sKKyAgICBteSAkcGFyYW1OYW1lID0gc2hp
ZnQ7CisgICAgbXkgQHBhcmFtTGlzdCA9IEBfOworICAgIG15ICRpbmRleCA9IDA7CisgICAgZm9y
ZWFjaCBteSAkcGFyYW0gKEBwYXJhbUxpc3QpIHsKKyAgICAgICAgaWYgKCRwYXJhbU5hbWUgZXEg
JHBhcmFtKSB7CisgICAgICAgICAgICByZXR1cm4gJGluZGV4OworICAgICAgICB9CisgICAgICAg
ICRpbmRleCsrOworICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CisKIHN1YiBHZW5lcmF0ZVBhcmFt
ZXRlcnNDaGVjawogewogICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0OwpAQCAtMTUyMyw2ICsxNTM3
LDkgQEAgc3ViIEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrCiAKICAgICBteSAkcGFyYW1ldGVyQ2hl
Y2tTdHJpbmcgPSAiIjsKICAgICBteSAkcGFyYW1JbmRleCA9IDA7CisgICAgbXkgQHBhcmFtVHJh
bnNmZXJMaXN0TmFtZXMgPSAoKTsKKyAgICBteSAlcmVwbGFjZW1lbnRzID0gKCk7CisKICAgICBm
b3JlYWNoIG15ICRwYXJhbWV0ZXIgKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkgewogICAgICAg
ICBUcmFuc2xhdGVQYXJhbWV0ZXIoJHBhcmFtZXRlcik7CiAKQEAgLTE1MzMsNyArMTU1MCw3IEBA
IHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICBteSAkb3B0aW9uYWwgPSAkcGFy
YW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiT3B0aW9uYWwifTsKICAgICAgICAgaWYgKCRv
cHRpb25hbCAmJiAkb3B0aW9uYWwgbmUgIkRlZmF1bHRJc1VuZGVmaW5lZCIgJiYgJG9wdGlvbmFs
IG5lICJEZWZhdWx0SXNOdWxsU3RyaW5nIiAmJiAhJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkNhbGxiYWNrIn0pIHsKICAgICAgICAgICAgICRwYXJhbWV0ZXJDaGVja1N0cmluZyAu
PSAiICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9ICRwYXJhbUluZGV4KSB7XG4iOwotICAgICAgICAg
ICAgbXkgJGZ1bmN0aW9uQ2FsbCA9IEdlbmVyYXRlRnVuY3Rpb25DYWxsU3RyaW5nKCRmdW5jdGlv
biwgJHBhcmFtSW5kZXgsICIgICAgIiB4IDIsICRpbXBsQ2xhc3NOYW1lKTsKKyAgICAgICAgICAg
IG15ICRmdW5jdGlvbkNhbGwgPSBHZW5lcmF0ZUZ1bmN0aW9uQ2FsbFN0cmluZygkZnVuY3Rpb24s
ICRwYXJhbUluZGV4LCAiICAgICIgeCAyLCAkaW1wbENsYXNzTmFtZSwgJXJlcGxhY2VtZW50cyk7
CiAgICAgICAgICAgICAkcGFyYW1ldGVyQ2hlY2tTdHJpbmcgLj0gJGZ1bmN0aW9uQ2FsbDsKICAg
ICAgICAgICAgICRwYXJhbWV0ZXJDaGVja1N0cmluZyAuPSAiICAgIH1cbiI7CiAgICAgICAgIH0K
QEAgLTE1NDMsNiArMTU2MCwxMiBAQCBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2sKICAgICAg
ICAgICAgICRwYXJhbWV0ZXJEZWZhdWx0UG9saWN5ID0gIkRlZmF1bHRJc051bGxTdHJpbmciOwog
ICAgICAgICB9CiAKKyAgICAgICAgaWYgKEdldEluZGV4T2YoJHBhcmFtZXRlck5hbWUsIEBwYXJh
bVRyYW5zZmVyTGlzdE5hbWVzKSAhPSAtMSkgeworICAgICAgICAgICAgJHJlcGxhY2VtZW50c3sk
cGFyYW1ldGVyTmFtZX0gPSAibWVzc2FnZVBvcnRBcnJheV8kcGFyYW1ldGVyTmFtZSI7CisgICAg
ICAgICAgICAkcGFyYW1JbmRleCsrOworICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorCiAg
ICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJFeGNlcHRpb25Db2RlLmgiKTsKICAgICAgICAgbXkg
JG5hdGl2ZVR5cGUgPSBHZXROYXRpdmVUeXBlRnJvbVNpZ25hdHVyZSgkcGFyYW1ldGVyLCAkcGFy
YW1JbmRleCk7CiAgICAgICAgIGlmICgkcGFyYW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
Q2FsbGJhY2sifSkgewpAQCAtMTU2Miw4ICsxNTg1LDM3IEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRl
cnNDaGVjawogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2lmICgkcGFyYW1ldGVyLT50eXBl
IGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiKSB7CiAgICAgICAgICAgICBBZGRUb0ltcGxJbmNs
dWRlcygiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiKTsKKyAgICAgICAgICAgIG15ICR1c2VUcmFu
c2Zlckxpc3QgPSAwOworICAgICAgICAgICAgbXkgJHRyYW5zZmVyTGlzdE5hbWUgPSAiIjsKKyAg
ICAgICAgICAgIGlmICgkcGFyYW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVHJhbnNmZXJM
aXN0In0pIHsKKyAgICAgICAgICAgICAgICAkdHJhbnNmZXJMaXN0TmFtZSA9ICRwYXJhbWV0ZXIt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJUcmFuc2Zlckxpc3QifTsKKyAgICAgICAgICAgICAgICBw
dXNoKEBwYXJhbVRyYW5zZmVyTGlzdE5hbWVzLCAkdHJhbnNmZXJMaXN0TmFtZSk7CisKKyAgICAg
ICAgICAgICAgICBteSBAYWxsUGFyYW1ldGVyTmFtZXMgPSAoKTsKKyAgICAgICAgICAgICAgICBm
b3JlYWNoIG15ICRwYXJhbWV0ZXIgKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkgeworICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBhbGxQYXJhbWV0ZXJOYW1lcywgJHBhcmFtZXRlci0+bmFtZSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG15ICR0cmFuc2Zlckxpc3RJbmRl
eCA9IEdldEluZGV4T2YoJHRyYW5zZmVyTGlzdE5hbWUsIEBhbGxQYXJhbWV0ZXJOYW1lcyk7Cisg
ICAgICAgICAgICAgICAgaWYgKCR0cmFuc2Zlckxpc3RJbmRleCA9PSAtMSkgeworICAgICAgICAg
ICAgICAgICAgICBkaWUgIklETCBlcnJvcjogVHJhbnNmZXJMaXN0IHJlZmVycyB0byBhIG5vbmV4
aXN0ZW50IGFyZ3VtZW50IjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBB
ZGRUb0ltcGxJbmNsdWRlcygiQXJyYXlCdWZmZXIuaCIpOworICAgICAgICAgICAgICAgIEFkZFRv
SW1wbEluY2x1ZGVzKCJNZXNzYWdlUG9ydC5oIik7CisgICAgICAgICAgICAgICAgJHBhcmFtZXRl
ckNoZWNrU3RyaW5nIC49ICIgICAgTWVzc2FnZVBvcnRBcnJheSBtZXNzYWdlUG9ydEFycmF5XyR0
cmFuc2Zlckxpc3ROYW1lO1xuIjsKKyAgICAgICAgICAgICAgICAkcGFyYW1ldGVyQ2hlY2tTdHJp
bmcgLj0gIiAgICBBcnJheUJ1ZmZlckFycmF5IGFycmF5QnVmZmVyQXJyYXlfJHRyYW5zZmVyTGlz
dE5hbWU7XG4iOworICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJDaGVja1N0cmluZyAuPSAiICAg
IGlmIChhcmdzLkxlbmd0aCgpID4gJHRyYW5zZmVyTGlzdEluZGV4KSB7XG4iOworICAgICAgICAg
ICAgICAgICRwYXJhbWV0ZXJDaGVja1N0cmluZyAuPSAiICAgICAgICBpZiAoIWV4dHJhY3RUcmFu
c2ZlcmFibGVzKGFyZ3NbJHRyYW5zZmVyTGlzdEluZGV4XSwgbWVzc2FnZVBvcnRBcnJheV8kdHJh
bnNmZXJMaXN0TmFtZSwgYXJyYXlCdWZmZXJBcnJheV8kdHJhbnNmZXJMaXN0TmFtZSkpXG4iOwor
ICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJDaGVja1N0cmluZyAuPSAiICAgICAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoXCJDb3VsZCBub3QgZXh0cmFjdCB0cmFuc2ZlcmFibGVzXCIsIFY4UHJv
eHk6OlR5cGVFcnJvcik7XG4iOworICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJDaGVja1N0cmlu
ZyAuPSAiICAgIH1cbiI7CisgICAgICAgICAgICAgICAgJHVzZVRyYW5zZmVyTGlzdCA9IDE7Cisg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAkcGFyYW1ldGVyQ2hlY2tTdHJpbmcgLj0gIiAgICBi
b29sICR7cGFyYW1ldGVyTmFtZX1EaWRUaHJvdyA9IGZhbHNlO1xuIjsKLSAgICAgICAgICAgICRw
YXJhbWV0ZXJDaGVja1N0cmluZyAuPSAiICAgICRuYXRpdmVUeXBlICRwYXJhbWV0ZXJOYW1lID0g
U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoYXJnc1skcGFyYW1JbmRleF0sIDAsIDAsICR7
cGFyYW1ldGVyTmFtZX1EaWRUaHJvdyk7XG4iOworICAgICAgICAgICAgaWYgKCEkdXNlVHJhbnNm
ZXJMaXN0KSB7CisgICAgICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJDaGVja1N0cmluZyAuPSAi
ICAgICRuYXRpdmVUeXBlICRwYXJhbWV0ZXJOYW1lID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpj
cmVhdGUoYXJnc1skcGFyYW1JbmRleF0sIDAsIDAsICR7cGFyYW1ldGVyTmFtZX1EaWRUaHJvdyk7
XG4iOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgJHBhcmFtZXRl
ckNoZWNrU3RyaW5nIC49ICIgICAgJG5hdGl2ZVR5cGUgJHBhcmFtZXRlck5hbWUgPSBTZXJpYWxp
emVkU2NyaXB0VmFsdWU6OmNyZWF0ZShhcmdzWyRwYXJhbUluZGV4XSwgJm1lc3NhZ2VQb3J0QXJy
YXlfJHRyYW5zZmVyTGlzdE5hbWUsICZhcnJheUJ1ZmZlckFycmF5XyR0cmFuc2Zlckxpc3ROYW1l
LCAke3BhcmFtZXRlck5hbWV9RGlkVGhyb3cpO1xuIjsKKyAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICRwYXJhbWV0ZXJDaGVja1N0cmluZyAuPSAiICAgIGlmICgke3BhcmFtZXRlck5hbWV9RGlk
VGhyb3cpXG4iOwogICAgICAgICAgICAgJHBhcmFtZXRlckNoZWNrU3RyaW5nIC49ICIgICAgICAg
IHJldHVybiB2ODo6VW5kZWZpbmVkKCk7XG4iOwogICAgICAgICB9IGVsc2lmIChUeXBlQ2FuRmFp
bENvbnZlcnNpb24oJHBhcmFtZXRlcikpIHsKQEAgLTE2MTQsNyArMTY2Niw3IEBAIHN1YiBHZW5l
cmF0ZVBhcmFtZXRlcnNDaGVjawogCiAgICAgICAgICRwYXJhbUluZGV4Kys7CiAgICAgfQotICAg
IHJldHVybiAoJHBhcmFtZXRlckNoZWNrU3RyaW5nLCAkcGFyYW1JbmRleCk7CisgICAgcmV0dXJu
ICgkcGFyYW1ldGVyQ2hlY2tTdHJpbmcsICRwYXJhbUluZGV4LCAlcmVwbGFjZW1lbnRzKTsKIH0K
IAogc3ViIEdlbmVyYXRlQ29uc3RydWN0b3JDYWxsYmFjawpAQCAtMTY1Nyw3ICsxNzA5LDcgQEAg
RU5ECiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
O1xuIik7CiAgICAgfQogCi0gICAgbXkgKCRwYXJhbWV0ZXJDaGVja1N0cmluZywgJHBhcmFtSW5k
ZXgpID0gR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2soJGZ1bmN0aW9uLCAkaW1wbENsYXNzTmFtZSk7
CisgICAgbXkgKCRwYXJhbWV0ZXJDaGVja1N0cmluZywgJHBhcmFtSW5kZXgsICVyZXBsYWNlbWVu
dHMpID0gR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2soJGZ1bmN0aW9uLCAkaW1wbENsYXNzTmFtZSk7
CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICRwYXJhbWV0ZXJDaGVja1N0cmluZyk7CiAKICAgICBp
ZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifSAmJiAkZGF0YU5v
ZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsV2l0aCJ9IGVxICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0IikgewpAQCAtMTY3OCw3ICsxNzMwLDExIEBAIEVORAogICAgIG15ICRpbmRleCA9IDA7
CiAgICAgZm9yZWFjaCBteSAkcGFyYW1ldGVyIChAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pIHsK
ICAgICAgICAgbGFzdCBpZiAkaW5kZXggZXEgJHBhcmFtSW5kZXg7Ci0gICAgICAgIHB1c2goQGFy
Z3VtZW50TGlzdCwgJHBhcmFtZXRlci0+bmFtZSk7CisgICAgICAgIGlmICgkcmVwbGFjZW1lbnRz
eyRwYXJhbWV0ZXItPm5hbWV9KSB7CisgICAgICAgICAgICBwdXNoKEBhcmd1bWVudExpc3QsICRy
ZXBsYWNlbWVudHN7JHBhcmFtZXRlci0+bmFtZX0pOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgcHVzaChAYXJndW1lbnRMaXN0LCAkcGFyYW1ldGVyLT5uYW1lKTsKKyAgICAgICAgfQog
ICAgICAgICAkaW5kZXgrKzsKICAgICB9CiAKQEAgLTE4NDIsNyArMTg5OCw3IEBAIEVORAogICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBFeGNlcHRpb25Db2RlIGVjID0gMDtcbiIpOwog
ICAgIH0KIAotICAgIG15ICgkcGFyYW1ldGVyQ2hlY2tTdHJpbmcsICRwYXJhbUluZGV4KSA9IEdl
bmVyYXRlUGFyYW1ldGVyc0NoZWNrKCRmdW5jdGlvbiwgJGltcGxDbGFzc05hbWUpOworICAgIG15
ICgkcGFyYW1ldGVyQ2hlY2tTdHJpbmcsICRwYXJhbUluZGV4LCAlcmVwbGFjZW1lbnRzKSA9IEdl
bmVyYXRlUGFyYW1ldGVyc0NoZWNrKCRmdW5jdGlvbiwgJGltcGxDbGFzc05hbWUpOwogICAgIHB1
c2goQGltcGxDb250ZW50LCAkcGFyYW1ldGVyQ2hlY2tTdHJpbmcpOwogCiAgICAgcHVzaChAYmVm
b3JlQXJndW1lbnRMaXN0LCAiZG9jdW1lbnQiKTsKQEAgLTE4NTUsNyArMTkxMSwxMSBAQCBFTkQK
ICAgICBteSAkaW5kZXggPSAwOwogICAgIGZvcmVhY2ggbXkgJHBhcmFtZXRlciAoQHskZnVuY3Rp
b24tPnBhcmFtZXRlcnN9KSB7CiAgICAgICAgIGxhc3QgaWYgJGluZGV4IGVxICRwYXJhbUluZGV4
OwotICAgICAgICBwdXNoKEBhcmd1bWVudExpc3QsICRwYXJhbWV0ZXItPm5hbWUpOworICAgICAg
ICBpZiAoJHJlcGxhY2VtZW50c3skcGFyYW1ldGVyLT5uYW1lfSkgeworICAgICAgICAgICAgcHVz
aChAYXJndW1lbnRMaXN0LCAkcmVwbGFjZW1lbnRzeyRwYXJhbWV0ZXItPm5hbWV9KTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHB1c2goQGFyZ3VtZW50TGlzdCwgJHBhcmFtZXRlci0+
bmFtZSk7CisgICAgICAgIH0KICAgICAgICAgJGluZGV4Kys7CiAgICAgfQogCkBAIC0zMTU1LDYg
KzMyMTUsNyBAQCBzdWIgR2VuZXJhdGVGdW5jdGlvbkNhbGxTdHJpbmcoKQogICAgIG15ICRudW1i
ZXJPZlBhcmFtZXRlcnMgPSBzaGlmdDsKICAgICBteSAkaW5kZW50ID0gc2hpZnQ7CiAgICAgbXkg
JGltcGxDbGFzc05hbWUgPSBzaGlmdDsKKyAgICBteSAlcmVwbGFjZW1lbnRzID0gQF87CiAKICAg
ICBteSAkbmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lOwogICAgIG15ICRyZXR1cm5U
eXBlID0gR2V0VHlwZUZyb21TaWduYXR1cmUoJGZ1bmN0aW9uLT5zaWduYXR1cmUpOwpAQCAtMzE5
OSw3ICszMjYwLDkgQEAgc3ViIEdlbmVyYXRlRnVuY3Rpb25DYWxsU3RyaW5nKCkKICAgICAgICAg
bXkgJHBhcmFtTmFtZSA9ICRwYXJhbWV0ZXItPm5hbWU7CiAgICAgICAgIG15ICRwYXJhbVR5cGUg
PSAkcGFyYW1ldGVyLT50eXBlOwogCi0gICAgICAgIGlmICgkcGFyYW1ldGVyLT50eXBlIGVxICJJ
REJLZXkiIHx8ICRwYXJhbWV0ZXItPnR5cGUgZXEgIk5vZGVGaWx0ZXIiIHx8ICRwYXJhbWV0ZXIt
PnR5cGUgZXEgIlhQYXRoTlNSZXNvbHZlciIpIHsKKyAgICAgICAgaWYgKCRyZXBsYWNlbWVudHN7
JHBhcmFtTmFtZX0pIHsKKyAgICAgICAgICAgIHB1c2ggQGFyZ3VtZW50cywgJHJlcGxhY2VtZW50
c3skcGFyYW1OYW1lfTsKKyAgICAgICAgfSBlbHNpZiAoJHBhcmFtZXRlci0+dHlwZSBlcSAiSURC
S2V5IiB8fCAkcGFyYW1ldGVyLT50eXBlIGVxICJOb2RlRmlsdGVyIiB8fCAkcGFyYW1ldGVyLT50
eXBlIGVxICJYUGF0aE5TUmVzb2x2ZXIiKSB7CiAgICAgICAgICAgICBwdXNoIEBhcmd1bWVudHMs
ICIkcGFyYW1OYW1lLmdldCgpIjsKICAgICAgICAgfSBlbHNpZiAoJGNvZGVHZW5lcmF0b3ItPklz
U1ZHVHlwZU5lZWRpbmdUZWFyT2ZmKCRwYXJhbWV0ZXItPnR5cGUpIGFuZCBub3QgJGltcGxDbGFz
c05hbWUgPX4gL0xpc3QkLykgewogICAgICAgICAgICAgcHVzaCBAYXJndW1lbnRzLCAiJHBhcmFt
TmFtZS0+cHJvcGVydHlSZWZlcmVuY2UoKSI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0IGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dAppbmRleCBkMTA1ZTA4NzI3ZGU5MTE3N2VmNTE5
MjBkNzE3NDRmZjc5MGQ5Yzk4Li5iODc2NGIyOWJkM2I5ODhjZDUxZWJiZDRiYWM5ZWE5ZmRlMTFl
NzFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJp
YnV0ZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmli
dXRlcy50eHQKQEAgLTk3LDYgKzk3LDcgQEAgUmVwbGFjZWFibGVDb25zdHJ1Y3RvcgogUmV0dXJu
TmV3T2JqZWN0CiBTdHJpY3RUeXBlQ2hlY2tpbmcKIFN1cHBsZW1lbnRhbD0qCitUcmFuc2Zlckxp
c3Q9KgogVHJlYXROdWxsQXM9TnVsbFN0cmluZwogVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcz1G
YWxzZXxOdWxsfFVuZGVmaW5lZAogVHJlYXRVbmRlZmluZWRBcz1OdWxsU3RyaW5nCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlLmNwcAppbmRleCA1NDE1NDY0NTBhNThkMzI3MzZkYWNjNzU1YjgzYjYyOGRlMDg1ODhlLi5k
OTRkZjM5OTQ0NjAxODkyNzlhNDYyMjM2N2UzMjI0MzRmNjM4ZDk3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5j
cHAKQEAgLTI0LDggKzI0LDEwIEBACiAKICNpbmNsdWRlICJXZWJET01UZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlLmgiCiAKKyNpbmNsdWRlICJBcnJheS5oIgogI2luY2x1ZGUgIlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJXZWJET01BcnJheS5oIgogI2luY2x1ZGUgIldlYkV4
Y2VwdGlvbkhhbmRsZXIuaCIKICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgpAQCAtMTIzLDYgKzEyNSwyMiBAQCBXZWJET01TdHJpbmcgV2ViRE9NVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6Y2FjaGVkUmVhZG9ubHlWYWx1ZSgpIGNvbgog
ICAgIHJldHVybiBpbXBsKCktPmNhY2hlZFJlYWRvbmx5VmFsdWUoKS0+dG9TdHJpbmcoKTsKIH0K
IAordm9pZCBXZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjphY2NlcHRU
cmFuc2Zlckxpc3QoY29uc3QgV2ViRE9NU3RyaW5nJiBkYXRhLCBjb25zdCBXZWJET01BcnJheSYg
dHJhbnNmZXJMaXN0KQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpbXBsKCktPmFjY2VwdFRyYW5zZmVyTGlzdChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OmNyZWF0ZShXVEY6OlN0cmluZyhkYXRhKSksIHRvV2ViQ29yZSh0cmFuc2Zlckxpc3QpKTsK
K30KKwordm9pZCBXZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjptdWx0
aVRyYW5zZmVyTGlzdChjb25zdCBXZWJET01TdHJpbmcmIGZpcnN0LCBjb25zdCBXZWJET01BcnJh
eSYgdHgsIGNvbnN0IFdlYkRPTVN0cmluZyYgc2Vjb25kLCBjb25zdCBXZWJET01BcnJheSYgdHh4
KQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbXBsKCktPm11
bHRpVHJhbnNmZXJMaXN0KFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKFdU
Rjo6U3RyaW5nKGZpcnN0KSksIHRvV2ViQ29yZSh0eCksIFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6Y3JlYXRlKFdURjo6U3RyaW5nKHNlY29uZCkpLCB0b1dlYkNvcmUodHh4KSk7Cit9
CisKIFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHRvV2ViQ29y
ZShjb25zdCBXZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlJiB3cmFwcGVy
KQogewogICAgIHJldHVybiB3cmFwcGVyLmltcGwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQ
UC9XZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgKaW5kZXggZDAzYjc1
ZTZhNzY3ZjIyY2ZjZmJmOWE1ZDU1ODIyZGU3MWIyNDM5OS4uNjU5NGI4YTYyMTQ0MGE3ZGFkNWVh
YTU3MjcwNDZkYzlmNDRmMzY4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01U
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgKQEAgLTMyLDYgKzMyLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZTsKIH07CiAKK2NsYXNzIFdlYkRPTUFycmF5OwogY2xhc3MgV2ViRE9NU3RyaW5nOwogCiBjbGFz
cyBXZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlIDogcHVibGljIFdlYkRP
TU9iamVjdCB7CkBAIC00OSw2ICs1MCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENhY2hlZFZh
bHVlKGNvbnN0IFdlYkRPTVN0cmluZyYpOwogICAgIFdlYkRPTVN0cmluZyBjYWNoZWRSZWFkb25s
eVZhbHVlKCkgY29uc3Q7CiAKKyAgICB2b2lkIGFjY2VwdFRyYW5zZmVyTGlzdChjb25zdCBXZWJE
T01TdHJpbmcmIGRhdGEsIGNvbnN0IFdlYkRPTUFycmF5JiB0cmFuc2Zlckxpc3QpOworICAgIHZv
aWQgbXVsdGlUcmFuc2Zlckxpc3QoY29uc3QgV2ViRE9NU3RyaW5nJiBmaXJzdCwgY29uc3QgV2Vi
RE9NQXJyYXkmIHR4LCBjb25zdCBXZWJET01TdHJpbmcmIHNlY29uZCwgY29uc3QgV2ViRE9NQXJy
YXkmIHR4eCk7CisKICAgICBXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlKiBpbXBsKCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZS5jcHAKaW5kZXggOTYxYzRiM2E1YzJmOTJkNDczNjQ0NTYxNjBjOGZiNTgwNmRhMzc0Zi4uODQ1
YTM3MzdjMWExMmNhYTQ3YTBmMmEwYTE2ZDk0ZjU2YjhlMjAzMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZS5jcHAKQEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlICJUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiV2ViS2l0RE9NQmluZGluZy5oIgog
I2luY2x1ZGUgImdvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgIndlYmtp
dC9XZWJLaXRET01BcnJheS5oIgorI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01BcnJheVByaXZh
dGUuaCIKICNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgi
CiAjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZVByaXZhdGUu
aCIKICNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZS5oIgpAQCAtNTQsNiArNTYsNjAgQEAgV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZSoga2l0KFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmEKICAg
ICAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdCAvLwogCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfc2Vy
aWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2FjY2VwdF90cmFuc2Zlcl9saXN0KFdlYktp
dERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHNlbGYsIFdlYktpdERPTVNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZSogZGF0YSwgV2ViS2l0RE9NQXJyYXkqIHRyYW5zZmVyX2xpc3Qp
Cit7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJl
YWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZSAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChkYXRhKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHRyYW5zZmVyX2xpc3QpOworICAgIFdl
YkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSAqIGNvbnZlcnRlZF9kYXRhID0gTlVMTDsKKyAg
ICBpZiAoZGF0YSAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF9kYXRhID0gV2ViS2l0Ojpj
b3JlKGRhdGEpOworICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF9kYXRhKTsKKyAg
ICB9CisgICAgV2ViQ29yZTo6QXJyYXkgKiBjb252ZXJ0ZWRfdHJhbnNmZXJfbGlzdCA9IE5VTEw7
CisgICAgaWYgKHRyYW5zZmVyX2xpc3QgIT0gTlVMTCkgeworICAgICAgICBjb252ZXJ0ZWRfdHJh
bnNmZXJfbGlzdCA9IFdlYktpdDo6Y29yZSh0cmFuc2Zlcl9saXN0KTsKKyAgICAgICAgZ19yZXR1
cm5faWZfZmFpbChjb252ZXJ0ZWRfdHJhbnNmZXJfbGlzdCk7CisgICAgfQorICAgIGl0ZW0tPmFj
Y2VwdFRyYW5zZmVyTGlzdChjb252ZXJ0ZWRfZGF0YSwgY29udmVydGVkX3RyYW5zZmVyX2xpc3Qp
OworfQorCit2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50
ZXJmYWNlX211bHRpX3RyYW5zZmVyX2xpc3QoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZSogc2VsZiwgV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBmaXJz
dCwgV2ViS2l0RE9NQXJyYXkqIHR4LCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIHNl
Y29uZCwgV2ViS2l0RE9NQXJyYXkqIHR4eCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYp
OworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3Jl
OjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlICogaXRlbSA9IFdlYktpdDo6Y29y
ZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGZpcnN0KTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKHR4KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlY29uZCk7CisgICAgZ19yZXR1cm5faWZf
ZmFpbCh0eHgpOworICAgIFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSAqIGNvbnZlcnRl
ZF9maXJzdCA9IE5VTEw7CisgICAgaWYgKGZpcnN0ICE9IE5VTEwpIHsKKyAgICAgICAgY29udmVy
dGVkX2ZpcnN0ID0gV2ViS2l0Ojpjb3JlKGZpcnN0KTsKKyAgICAgICAgZ19yZXR1cm5faWZfZmFp
bChjb252ZXJ0ZWRfZmlyc3QpOworICAgIH0KKyAgICBXZWJDb3JlOjpBcnJheSAqIGNvbnZlcnRl
ZF90eCA9IE5VTEw7CisgICAgaWYgKHR4ICE9IE5VTEwpIHsKKyAgICAgICAgY29udmVydGVkX3R4
ID0gV2ViS2l0Ojpjb3JlKHR4KTsKKyAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRf
dHgpOworICAgIH0KKyAgICBXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUgKiBjb252ZXJ0
ZWRfc2Vjb25kID0gTlVMTDsKKyAgICBpZiAoc2Vjb25kICE9IE5VTEwpIHsKKyAgICAgICAgY29u
dmVydGVkX3NlY29uZCA9IFdlYktpdDo6Y29yZShzZWNvbmQpOworICAgICAgICBnX3JldHVybl9p
Zl9mYWlsKGNvbnZlcnRlZF9zZWNvbmQpOworICAgIH0KKyAgICBXZWJDb3JlOjpBcnJheSAqIGNv
bnZlcnRlZF90eHggPSBOVUxMOworICAgIGlmICh0eHggIT0gTlVMTCkgeworICAgICAgICBjb252
ZXJ0ZWRfdHh4ID0gV2ViS2l0Ojpjb3JlKHR4eCk7CisgICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwo
Y29udmVydGVkX3R4eCk7CisgICAgfQorICAgIGl0ZW0tPm11bHRpVHJhbnNmZXJMaXN0KGNvbnZl
cnRlZF9maXJzdCwgY29udmVydGVkX3R4LCBjb252ZXJ0ZWRfc2Vjb25kLCBjb252ZXJ0ZWRfdHh4
KTsKK30KKwogV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKgogd2Via2l0X2RvbV90ZXN0
X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9nZXRfdmFsdWUoV2ViS2l0RE9NVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogc2VsZikKIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2UuaAppbmRleCA1MTYxNDE4NTljZTNlNTNjYjU0ZTRiZWJmM2U0OTIzY2M5ZTRmM2Rj
Li41ZDE1Y2QzMzA5YTk0OWE4ZDdhZjdmMzYxMzE2ZDBjNjY5MTczMjE3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZS5oCkBAIC00Nyw2ICs0NywzMiBAQCBXRUJLSVRfQVBJIEdUeXBlCiB3ZWJr
aXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF90eXBlICh2
b2lkKTsKIAogLyoqCisgKiB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVf
aW50ZXJmYWNlX2FjY2VwdF90cmFuc2Zlcl9saXN0OgorICogQHNlbGY6IEEgI1dlYktpdERPTVRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UKKyAqIEBkYXRhOiBBICNXZWJLaXRET01T
ZXJpYWxpemVkU2NyaXB0VmFsdWUKKyAqIEB0cmFuc2Zlcl9saXN0OiBBICNXZWJLaXRET01BcnJh
eQorICoKKyAqIFJldHVybnM6CisgKgorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21f
dGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfYWNjZXB0X3RyYW5zZmVyX2xp
c3QoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogc2VsZiwgV2Vi
S2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBkYXRhLCBXZWJLaXRET01BcnJheSogdHJhbnNm
ZXJfbGlzdCk7CisKKy8qKgorICogd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3Zh
bHVlX2ludGVyZmFjZV9tdWx0aV90cmFuc2Zlcl9saXN0OgorICogQHNlbGY6IEEgI1dlYktpdERP
TVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UKKyAqIEBmaXJzdDogQSAjV2ViS2l0
RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlCisgKiBAdHg6IEEgI1dlYktpdERPTUFycmF5CisgKiBA
c2Vjb25kOiBBICNXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUKKyAqIEB0eHg6IEEgI1dl
YktpdERPTUFycmF5CisgKgorICogUmV0dXJuczoKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9tdWx0aV90
cmFuc2Zlcl9saXN0KFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uq
IHNlbGYsIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogZmlyc3QsIFdlYktpdERPTUFy
cmF5KiB0eCwgV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBzZWNvbmQsIFdlYktpdERP
TUFycmF5KiB0eHgpOworCisvKioKICAqIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3Njcmlw
dF92YWx1ZV9pbnRlcmZhY2VfZ2V0X3ZhbHVlOgogICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UKICAqCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCmluZGV4IGMwZWE2ZWFhZDll
OGQwNTdhNGVkNTc1ZWMzYmM3MmUxNGE5ZTBiNTQuLmVmNmE3YjMzNzlmYzc3ODVhNTI1NjBiOTI0
MmQ0ZDgzZTc4YTZjOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCkBAIC0yNSwxMiArMjUsMTggQEAKICNpbmNsdWRlICJK
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaCIKIAogI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKKyNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3Iu
aD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAKKyNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwg
RU5BQkxFKENvbmRpdGlvbjIpCisjaW5jbHVkZSAiLmgiCisjaW5jbHVkZSAiSlMuaCIKKyNlbmRp
ZgorCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02OSw3
ICs3NSw3IEBAIHZvaWQgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3Ry
dWN0b3I6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSoKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bihleGVjLT5nbG9iYWxEYXRhKCkpOwogICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CiAg
ICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnBy
b3RvdHlwZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlOjpz
ZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSk7Ci0gICAgcHV0
RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwg
anNOdW1iZXIoMiksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKKyAgICBwdXRE
aXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBq
c051bWJlcigzKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOwogfQogCiBib29s
IEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yOjpnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQpAQCAtOTAsMTAgKzk2LDIxIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlQ29uc3RydWN0b3I6OmNvCiAgICAgY29uc3QgU3RyaW5nJiBoZWxsbyh1c3RyaW5n
VG9TdHJpbmcoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZp
bmVkKS5pc0VtcHR5KCkgPyBVU3RyaW5nKCkgOiBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVj
LCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOwog
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2
YWx1ZShTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCBNQVlCRV9NSVNTSU5HX1BB
UkFNRVRFUihleGVjLCAxLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAgUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YShTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVj
LCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAxLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7
CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCisgICAgc2l6ZV90IGFyZ3NDb3VudCA9IGV4ZWMtPmFy
Z3VtZW50Q291bnQoKTsKKyAgICBpZiAoYXJnc0NvdW50IDw9IDIpIHsKKworICAgICAgICBKU0M6
OkpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
V1RGOjpnZXRQdHIoaW1wbC0+Y29uc3RydWN0b3JDYWxsYmFjayhoZWxsbywgZGF0YSkpKTsKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIH0KKworICAgIEFycmF5
KiB0cmFuc2Zlckxpc3QodG9BcnJheShNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAyLCBE
ZWZhdWx0SXNVbmRlZmluZWQpKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIFJlZlB0cjxU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPiBvYmplY3QgPSBUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpjcmVhdGUoaGVsbG8sIHZhbHVlKTsKKyAgICBSZWZQdHI8
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT4gb2JqZWN0ID0gVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6Y3JlYXRlKGhlbGxvLCBkYXRhLCB0cmFuc2Zlckxpc3Qp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0
cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgb2JqZWN0LmdldCgpKSkpOwogfQogCkBAIC0xMDcsMTAg
KzEyNCwxMiBAQCBDb25zdHJ1Y3RUeXBlIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZUNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKAogCiBzdGF0aWMgY29uc3QgSGFzaFRh
YmxlVmFsdWUgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlVGFi
bGVWYWx1ZXNbXSA9CiB7CisgICAgeyAiYWNjZXB0VHJhbnNmZXJMaXN0IiwgRG9udERlbGV0ZSB8
IEpTQzo6RnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25BY2NlcHRU
cmFuc2Zlckxpc3QpLCAoaW50cHRyX3QpMiwgTm9JbnRyaW5zaWMgfSwKKyAgICB7ICJtdWx0aVRy
YW5zZmVyTGlzdCIsIERvbnREZWxldGUgfCBKU0M6OkZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGlj
X2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZVByb3RvdHlwZUZ1bmN0aW9uTXVsdGlUcmFuc2Zlckxpc3QpLCAoaW50cHRyX3QpNCwgTm9JbnRy
aW5zaWMgfSwKICAgICB7IDAsIDAsIDAsIDAsIE5vSW50cmluc2ljIH0KIH07CiAKLXN0YXRpYyBj
b25zdCBIYXNoVGFibGUgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90
eXBlVGFibGUgPSB7IDEsIDAsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBy
b3RvdHlwZVRhYmxlVmFsdWVzLCAwIH07CitzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZVRhYmxlID0geyA1LCAzLCBKU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVUYWJsZVZhbHVlcywgMCB9
OwogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBy
b3RvdHlwZTo6c19pbmZvID0geyAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBy
b3RvdHlwZSIsICZCYXNlOjpzX2luZm8sICZKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VQcm90b3R5cGVUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUpIH07CiAKIEpTT2JqZWN0KiBKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGU6OnNlbGYoRXhlY1N0YXRlKiBl
eGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQpAQCAtMTE4LDYgKzEzNywxOCBAQCBK
U09iamVjdCogSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlOjpz
ZWxmKEV4ZWNTdGF0ZSogZXhlYywgSgogICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPihleGVjLCBnbG9iYWxPYmplY3QpOwogfQog
Citib29sIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZTo6Z2V0
T3duUHJvcGVydHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlKj4oY2VsbCk7
CisgICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxKU09iamVjdD4oZXhlYywgJkpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZVRhYmxlLCB0aGlzT2JqZWN0
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCitib29sIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZVByb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgSlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSo+KG9iamVjdCk7CisgICAg
cmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uRGVzY3JpcHRvcjxKU09iamVjdD4oZXhlYywgJkpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZVRhYmxlLCB0aGlzT2JqZWN0
LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOworfQorCiBjb25zdCBDbGFzc0luZm8gSlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpzX2luZm8gPSB7ICJUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlIiwgJkJhc2U6OnNfaW5mbywgJkpTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZVRhYmxlLCAwICwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UpIH07CiAKIEpTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZTo6SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKFN0
cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNz
UmVmUHRyPFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+IGltcGwpCkBAIC0yNDIs
NiArMjczLDc5IEBAIEpTVmFsdWUgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
OjpnZXRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAgcmV0dXJuIGdldERPTUNv
bnN0cnVjdG9yPEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9y
PihleGVjLCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOwog
fQogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uQWNjZXB0VHJhbnNmZXJMaXN0KEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUo
KTsKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlOjpzX2luZm8pKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihl
eGVjKTsKKyAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGNhc3RlZFRo
aXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqPihh
c09iamVjdCh0aGlzVmFsdWUpKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3Rl
ZFRoaXMsICZKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnNfaW5mbyk7Cisg
ICAgVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogaW1wbCA9IHN0YXRpY19jYXN0
PFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqPihjYXN0ZWRUaGlzLT5pbXBsKCkp
OworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQorICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiTm90IGVub3VnaCBhcmd1bWVu
dHMiKSk7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YShTZXJpYWxpemVk
U2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAw
LCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCisgICAgc2l6
ZV90IGFyZ3NDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKKyAgICBpZiAoYXJnc0NvdW50
IDw9IDEpIHsKKyAgICAgICAgaW1wbC0+YWNjZXB0VHJhbnNmZXJMaXN0KGRhdGEpOworICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0KKworICAgIEFy
cmF5KiB0cmFuc2Zlckxpc3QodG9BcnJheShNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAx
LCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIGltcGwt
PmFjY2VwdFRyYW5zZmVyTGlzdChkYXRhLCB0cmFuc2Zlckxpc3QpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rp
b25NdWx0aVRyYW5zZmVyTGlzdChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJp
dHMoJkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6c19pbmZvKSkKKyAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CisgICAgSlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CisgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlOjpzX2luZm8pOworICAgIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2UqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKworICAgIHNpemVfdCBhcmdzQ291bnQgPSBl
eGVjLT5hcmd1bWVudENvdW50KCk7CisgICAgaWYgKGFyZ3NDb3VudCA8PSAwKSB7CisgICAgICAg
IGltcGwtPm11bHRpVHJhbnNmZXJMaXN0KCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CisgICAgfQorCisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gZmlyc3QoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgTUFZQkVfTUlT
U0lOR19QQVJBTUVURVIoZXhlYywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOworICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICBpZiAoYXJnc0NvdW50IDw9IDEpIHsKKyAgICAgICAgaW1wbC0+bXVs
dGlUcmFuc2Zlckxpc3QoZmlyc3QpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOworICAgIH0KKworICAgIEFycmF5KiB0eCh0b0FycmF5KE1BWUJFX01JU1NJ
TkdfUEFSQU1FVEVSKGV4ZWMsIDEsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKKyAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgaWYgKGFyZ3NDb3VudCA8PSAyKSB7CisgICAgICAgIGltcGwtPm11bHRp
VHJhbnNmZXJMaXN0KGZpcnN0LCB0eCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CisgICAgfQorCisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gc2Vjb25kKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIE1BWUJFX01JU1NJ
TkdfUEFSQU1FVEVSKGV4ZWMsIDIsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKKyAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgaWYgKGFyZ3NDb3VudCA8PSAzKSB7CisgICAgICAgIGltcGwtPm11bHRp
VHJhbnNmZXJMaXN0KGZpcnN0LCB0eCwgc2Vjb25kKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9CisKKyAgICBBcnJheSogdHh4KHRvQXJyYXko
TUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMywgRGVmYXVsdElzVW5kZWZpbmVkKSkpOwor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBpbXBsLT5tdWx0aVRyYW5zZmVyTGlzdChmaXJzdCwg
dHgsIHNlY29uZCwgdHh4KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOworfQorCiB2b2lkIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpT
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqPihjZWxsKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaAppbmRleCBjOTQ0
ZTQyYTNhNTFmZGJkY2E4N2I1ZWRmYjZhZDllZjFhOWYxYWVmLi5hZDQ0YjU3YTc5NzhiNTQyZTRm
NmNiYjRkMmE3OWY3MDg0YzhlMThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCkBAIC0xMDMsNiArMTAzLDggQEAgcHVibGljOgog
ICAgIH0KIAogICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CisgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUq
LCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVj
U3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYp
OwogICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6SlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewogICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBl
SW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CkBAIC0xMTEs
NyArMTEzLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKSA6IEpTQzo6SlNO
b25GaW5hbE9iamVjdChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpIHsgfQogcHJvdGVjdGVkOgotICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzVmlz
aXRDaGlsZHJlbiB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwg
SlNDOjpPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiB9Owog
CiBjbGFzcyBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvciA6
IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7CkBAIC0xNDEsNiArMTQzLDEwIEBAIHByb3Rl
Y3RlZDoKICAgICBzdGF0aWMgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlND
OjpKU0NlbGwqLCBKU0M6OkNvbnN0cnVjdERhdGEmKTsKIH07CiAKKy8vIEZ1bmN0aW9ucworCitK
U0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25BY2NlcHRUcmFuc2Zlckxpc3QoSlNDOjpFeGVj
U3RhdGUqKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbk11bHRpVHJhbnNmZXJMaXN0
KEpTQzo6RXhlY1N0YXRlKik7CiAvLyBBdHRyaWJ1dGVzCiAKIEpTQzo6SlNWYWx1ZSBqc1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2Jq
Qy9ET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgKaW5kZXggYjVmM2ExN2M5
NWIyNTExMjFiNTk1MWRiN2JjYTViZWQ0NDk5YjdjZS4uY2U1MjFkMTQ1NDVhNGQxYmVhOTI0YmQy
ODVjOWY3ODY3ODc1MmY4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L09iakMvRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgV0VC
S0lUX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gV0VCS0lUX1ZFUlNJT05fTEFURVNUCiAKK0BjbGFz
cyBET01BcnJheTsKIEBjbGFzcyBOU1N0cmluZzsKIAogQGludGVyZmFjZSBET01UZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlIDogRE9NT2JqZWN0CkBAIC0zNyw2ICszOCw4IEBACiAt
IChOU1N0cmluZyAqKWNhY2hlZFZhbHVlOwogLSAodm9pZClzZXRDYWNoZWRWYWx1ZTooTlNTdHJp
bmcgKiluZXdDYWNoZWRWYWx1ZTsKIC0gKE5TU3RyaW5nICopY2FjaGVkUmVhZG9ubHlWYWx1ZTsK
Ky0gKHZvaWQpYWNjZXB0VHJhbnNmZXJMaXN0OihOU1N0cmluZyAqKWRhdGEgdHJhbnNmZXJMaXN0
OihET01BcnJheSAqKXRyYW5zZmVyTGlzdDsKKy0gKHZvaWQpbXVsdGlUcmFuc2Zlckxpc3Q6KE5T
U3RyaW5nICopZmlyc3QgdHg6KERPTUFycmF5ICopdHggc2Vjb25kOihOU1N0cmluZyAqKXNlY29u
ZCB0eHg6KERPTUFycmF5ICopdHh4OwogQGVuZAogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvT2JqQy9ET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLm1tCmluZGV4IDM4
OGYxYzU2ZDdjYjI4MmU3OWRlMzBjOTcxZjhjYzA1NTdhZmYxMTAuLjE2OGYwOTZiOTQ2N2YwMDU1
MDQwZjdhZTg0MGE0OTVkNTcxYjE4MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9N
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5tbQpAQCAtMzIsNiArMzIsOCBAQAog
CiAjaW1wb3J0ICJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgiCiAKKyNp
bXBvcnQgIkFycmF5LmgiCisjaW1wb3J0ICJET01BcnJheUludGVybmFsLmgiCiAjaW1wb3J0ICJE
T01CbG9iSW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTUNTU1J1bGVJbnRlcm5hbC5oIgogI2ltcG9y
dCAiRE9NQ1NTVmFsdWVJbnRlcm5hbC5oIgpAQCAtMTA5LDYgKzExMSwxOCBAQAogICAgIHJldHVy
biBJTVBMLT5jYWNoZWRSZWFkb25seVZhbHVlKCktPnRvU3RyaW5nKCk7CiB9CiAKKy0gKHZvaWQp
YWNjZXB0VHJhbnNmZXJMaXN0OihOU1N0cmluZyAqKWRhdGEgdHJhbnNmZXJMaXN0OihET01BcnJh
eSAqKXRyYW5zZmVyTGlzdAoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKKyAgICBJTVBMLT5hY2NlcHRUcmFuc2Zlckxpc3QoV2ViQ29yZTo6U2VyaWFsaXplZFNj
cmlwdFZhbHVlOjpjcmVhdGUoV1RGOjpTdHJpbmcoZGF0YSkpLCBjb3JlKHRyYW5zZmVyTGlzdCkp
OworfQorCistICh2b2lkKW11bHRpVHJhbnNmZXJMaXN0OihOU1N0cmluZyAqKWZpcnN0IHR4OihE
T01BcnJheSAqKXR4IHNlY29uZDooTlNTdHJpbmcgKilzZWNvbmQgdHh4OihET01BcnJheSAqKXR4
eAoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBJTVBM
LT5tdWx0aVRyYW5zZmVyTGlzdChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0
ZShXVEY6OlN0cmluZyhmaXJzdCkpLCBjb3JlKHR4KSwgV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlw
dFZhbHVlOjpjcmVhdGUoV1RGOjpTdHJpbmcoc2Vjb25kKSksIGNvcmUodHh4KSk7Cit9CisKIEBl
bmQKIAogV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogY29yZShE
T01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlICp3cmFwcGVyKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UuaWRsIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaWRsCmluZGV4IGRkZGVlOWZh
ZTY0ZGVjM2YwOTY5MjcyMGI3MzA2MzJhYTE2OTRjOTYuLjdlOTU0ZDUwZjhmNmIxZGNiMGUzZTNi
MWU1MTE1MWJmMWViMTFmM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmlkbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZS5pZGwKQEAgLTI5LDEwICsyOSwxMyBAQCBtb2R1bGUgdGVzdCB7CiAgICAg
aW50ZXJmYWNlIFsKICAgICAgICAgQ29uZGl0aW9uYWw9Q29uZGl0aW9uMXxDb25kaXRpb24yLAog
ICAgICAgICBDb25zdHJ1Y3RvcihpbiBET01TdHJpbmcgaGVsbG8sIGluIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSB2YWx1ZSksCisgICAgICAgIENvbnN0cnVjdG9yKGluIERPTVN0cmluZyBoZWxsbywg
aW4gW1RyYW5zZmVyTGlzdD10cmFuc2Zlckxpc3RdIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBkYXRh
LCBpbiBbT3B0aW9uYWxdIEFycmF5IHRyYW5zZmVyTGlzdCksCiAgICAgXSBUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlIHsKICAgICAgICAgYXR0cmlidXRlIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSB2YWx1ZTsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSByZWFkb25seVZhbHVlOwogICAgICAgICBhdHRyaWJ1dGUgW0NhY2hlZEF0dHJpYnV0
ZV0gU2VyaWFsaXplZFNjcmlwdFZhbHVlIGNhY2hlZFZhbHVlOwogICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgW0NhY2hlZEF0dHJpYnV0ZV0gU2VyaWFsaXplZFNjcmlwdFZhbHVlIGNhY2hlZFJl
YWRvbmx5VmFsdWU7CisgICAgICAgIHZvaWQgYWNjZXB0VHJhbnNmZXJMaXN0KGluIFtUcmFuc2Zl
ckxpc3Q9dHJhbnNmZXJMaXN0XSBTZXJpYWxpemVkU2NyaXB0VmFsdWUgZGF0YSwgaW4gW09wdGlv
bmFsXSBBcnJheSB0cmFuc2Zlckxpc3QpOworICAgICAgICB2b2lkIG11bHRpVHJhbnNmZXJMaXN0
KGluIFtPcHRpb25hbCwgVHJhbnNmZXJMaXN0PXR4XSBTZXJpYWxpemVkU2NyaXB0VmFsdWUgZmly
c3QsIGluIFtPcHRpb25hbF0gQXJyYXkgdHgsIGluIFtPcHRpb25hbCwgVHJhbnNmZXJMaXN0PXR4
eF0gU2VyaWFsaXplZFNjcmlwdFZhbHVlIHNlY29uZCwgaW4gW09wdGlvbmFsXSBBcnJheSB0eHgp
OwogICAgIH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UuY3BwCmluZGV4IGYzMjlhYjBmMzM1NDVmMjI0YjQ4YjYyZDY0MDg1Y2Q5
NTI0NjA1ZWMuLjVmZmI0MjA1NjU1NDUyNzQ1Nzk5MWNhYzczMzRiYTQxZjI1YTYzM2EgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uu
Y3BwCkBAIC0yMywxNSArMjMsMjEgQEAKIAogI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFC
TEUoQ29uZGl0aW9uMikKIAorI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCiAjaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCiAjaW5jbHVkZSAiUnVudGlt
ZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgor
I2luY2x1ZGUgIlY4LmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhCaW5k
aW5nTWFjcm9zLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIKICNpbmNsdWRlICJWOERP
TVdyYXBwZXIuaCIKICNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgogI2luY2x1ZGUgIlY4
UHJveHkuaCIKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFt
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTEwMyw2ICsxMDksNzQgQEAgc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBjYWNoZWRSZWFkb25seVZhbHVlQXR0ckdldHRlcih2ODo6TG9j
YWw8djg6OlN0cmluZz4KICAgICByZXR1cm4gdmFsdWU7CiB9CiAKK3N0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gYWNjZXB0VHJhbnNmZXJMaXN0Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50
cyYgYXJncykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlLmFjY2VwdFRyYW5zZmVyTGlzdCIpOworICAgIGlmIChhcmdzLkxlbmd0aCgpIDwg
MSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIiwgVjhQ
cm94eTo6VHlwZUVycm9yKTsKKyAgICBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
KiBpbXAgPSBWOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnRvTmF0aXZlKGFy
Z3MuSG9sZGVyKCkpOworICAgIE1lc3NhZ2VQb3J0QXJyYXkgbWVzc2FnZVBvcnRBcnJheV90cmFu
c2Zlckxpc3Q7CisgICAgQXJyYXlCdWZmZXJBcnJheSBhcnJheUJ1ZmZlckFycmF5X3RyYW5zZmVy
TGlzdDsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDEpIHsKKyAgICAgICAgaWYgKCFleHRyYWN0
VHJhbnNmZXJhYmxlcyhhcmdzWzFdLCBtZXNzYWdlUG9ydEFycmF5X3RyYW5zZmVyTGlzdCwgYXJy
YXlCdWZmZXJBcnJheV90cmFuc2Zlckxpc3QpKQorICAgICAgICAgICAgcmV0dXJuIHRocm93RXJy
b3IoIkNvdWxkIG5vdCBleHRyYWN0IHRyYW5zZmVyYWJsZXMiLCBWOFByb3h5OjpUeXBlRXJyb3Ip
OworICAgIH0KKyAgICBib29sIGRhdGFEaWRUaHJvdyA9IGZhbHNlOworICAgIFJlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IGRhdGEgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShh
cmdzWzBdLCAmbWVzc2FnZVBvcnRBcnJheV90cmFuc2Zlckxpc3QsICZhcnJheUJ1ZmZlckFycmF5
X3RyYW5zZmVyTGlzdCwgZGF0YURpZFRocm93KTsKKyAgICBpZiAoZGF0YURpZFRocm93KQorICAg
ICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9IDEp
IHsKKyAgICAgICAgaW1wLT5hY2NlcHRUcmFuc2Zlckxpc3QoZGF0YSk7CisgICAgICAgIHJldHVy
biB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICB9CisgICAgaW1wLT5hY2NlcHRUcmFuc2Zl
ckxpc3QoZGF0YSwgbWVzc2FnZVBvcnRBcnJheV90cmFuc2Zlckxpc3QpOworICAgIHJldHVybiB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKK30KKworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBtdWx0aVRyYW5zZmVyTGlzdENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7
CisgICAgSU5DX1NUQVRTKCJET00uVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5t
dWx0aVRyYW5zZmVyTGlzdCIpOworICAgIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UqIGltcCA9IFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6dG9OYXRpdmUo
YXJncy5Ib2xkZXIoKSk7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPD0gMCkgeworICAgICAgICBp
bXAtPm11bHRpVHJhbnNmZXJMaXN0KCk7CisgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4oKTsKKyAgICB9CisgICAgTWVzc2FnZVBvcnRBcnJheSBtZXNzYWdlUG9ydEFycmF5X3R4
OworICAgIEFycmF5QnVmZmVyQXJyYXkgYXJyYXlCdWZmZXJBcnJheV90eDsKKyAgICBpZiAoYXJn
cy5MZW5ndGgoKSA+IDEpIHsKKyAgICAgICAgaWYgKCFleHRyYWN0VHJhbnNmZXJhYmxlcyhhcmdz
WzFdLCBtZXNzYWdlUG9ydEFycmF5X3R4LCBhcnJheUJ1ZmZlckFycmF5X3R4KSkKKyAgICAgICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKCJDb3VsZCBub3QgZXh0cmFjdCB0cmFuc2ZlcmFibGVzIiwg
VjhQcm94eTo6VHlwZUVycm9yKTsKKyAgICB9CisgICAgYm9vbCBmaXJzdERpZFRocm93ID0gZmFs
c2U7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZmlyc3QgPSBTZXJpYWxpemVk
U2NyaXB0VmFsdWU6OmNyZWF0ZShhcmdzWzBdLCAmbWVzc2FnZVBvcnRBcnJheV90eCwgJmFycmF5
QnVmZmVyQXJyYXlfdHgsIGZpcnN0RGlkVGhyb3cpOworICAgIGlmIChmaXJzdERpZFRocm93KQor
ICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9
IDEpIHsKKyAgICAgICAgaW1wLT5tdWx0aVRyYW5zZmVyTGlzdChmaXJzdCk7CisgICAgICAgIHJl
dHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICB9CisgICAgaWYgKGFyZ3MuTGVuZ3Ro
KCkgPD0gMikgeworICAgICAgICBpbXAtPm11bHRpVHJhbnNmZXJMaXN0KGZpcnN0LCBtZXNzYWdl
UG9ydEFycmF5X3R4KTsKKyAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwor
ICAgIH0KKyAgICBNZXNzYWdlUG9ydEFycmF5IG1lc3NhZ2VQb3J0QXJyYXlfdHh4OworICAgIEFy
cmF5QnVmZmVyQXJyYXkgYXJyYXlCdWZmZXJBcnJheV90eHg7CisgICAgaWYgKGFyZ3MuTGVuZ3Ro
KCkgPiAzKSB7CisgICAgICAgIGlmICghZXh0cmFjdFRyYW5zZmVyYWJsZXMoYXJnc1szXSwgbWVz
c2FnZVBvcnRBcnJheV90eHgsIGFycmF5QnVmZmVyQXJyYXlfdHh4KSkKKyAgICAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKCJDb3VsZCBub3QgZXh0cmFjdCB0cmFuc2ZlcmFibGVzIiwgVjhQcm94
eTo6VHlwZUVycm9yKTsKKyAgICB9CisgICAgYm9vbCBzZWNvbmREaWRUaHJvdyA9IGZhbHNlOwor
ICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlY29uZCA9IFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6Y3JlYXRlKGFyZ3NbMl0sICZtZXNzYWdlUG9ydEFycmF5X3R4eCwgJmFycmF5QnVm
ZmVyQXJyYXlfdHh4LCBzZWNvbmREaWRUaHJvdyk7CisgICAgaWYgKHNlY29uZERpZFRocm93KQor
ICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9
IDMpIHsKKyAgICAgICAgaW1wLT5tdWx0aVRyYW5zZmVyTGlzdChmaXJzdCwgbWVzc2FnZVBvcnRB
cnJheV90eCwgc2Vjb25kKTsKKyAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigp
OworICAgIH0KKyAgICBpbXAtPm11bHRpVHJhbnNmZXJMaXN0KGZpcnN0LCBtZXNzYWdlUG9ydEFy
cmF5X3R4LCBzZWNvbmQsIG1lc3NhZ2VQb3J0QXJyYXlfdHh4KTsKKyAgICByZXR1cm4gdjg6Okhh
bmRsZTx2ODo6VmFsdWU+KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VJbnRlcm5hbAogCiBzdGF0aWMgY29uc3QgQmF0Y2hlZEF0dHJpYnV0
ZSBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQXR0cnNbXSA9IHsKQEAgLTExNiw2
ICsxOTAsMTEgQEAgc3RhdGljIGNvbnN0IEJhdGNoZWRBdHRyaWJ1dGUgVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZUF0dHJzW10gPSB7CiAgICAgeyJjYWNoZWRSZWFkb25seVZhbHVl
IiwgVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUludGVybmFsOjpjYWNoZWRSZWFk
b25seVZhbHVlQXR0ckdldHRlciwgMCwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6
QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRy
aWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCiB9OwogCitzdGF0aWMgY29u
c3QgQmF0Y2hlZENhbGxiYWNrIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWxs
YmFja3NbXSA9IHsKKyAgICB7ImFjY2VwdFRyYW5zZmVyTGlzdCIsIFRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VJbnRlcm5hbDo6YWNjZXB0VHJhbnNmZXJMaXN0Q2FsbGJhY2t9LAor
ICAgIHsibXVsdGlUcmFuc2Zlckxpc3QiLCBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlSW50ZXJuYWw6Om11bHRpVHJhbnNmZXJMaXN0Q2FsbGJhY2t9LAorfTsKKwogdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6Y29uc3Ry
dWN0b3JDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19TVEFU
UygiRE9NLlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuQ29uc3RydWN0b3IiKTsK
QEAgLTEyOCwxMiArMjA3LDIxIEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmNvbnN0cnVjdG9yQ2FsbGJhY2soCiAgICAgaWYgKGFy
Z3MuTGVuZ3RoKCkgPCAyKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiTm90IGVub3VnaCBh
cmd1bWVudHMiLCBWOFByb3h5OjpUeXBlRXJyb3IpOwogICAgIFNUUklOR19UT19WOFBBUkFNRVRF
Ul9FWENFUFRJT05fQkxPQ0soVjhQYXJhbWV0ZXI8PiwgaGVsbG8sIE1BWUJFX01JU1NJTkdfUEFS
QU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpOwotICAgIGJvb2wgdmFsdWVEaWRU
aHJvdyA9IGZhbHNlOwotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0g
U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoYXJnc1sxXSwgMCwgMCwgdmFsdWVEaWRUaHJv
dyk7Ci0gICAgaWYgKHZhbHVlRGlkVGhyb3cpCisgICAgTWVzc2FnZVBvcnRBcnJheSBtZXNzYWdl
UG9ydEFycmF5X3RyYW5zZmVyTGlzdDsKKyAgICBBcnJheUJ1ZmZlckFycmF5IGFycmF5QnVmZmVy
QXJyYXlfdHJhbnNmZXJMaXN0OworICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMikgeworICAgICAg
ICBpZiAoIWV4dHJhY3RUcmFuc2ZlcmFibGVzKGFyZ3NbMl0sIG1lc3NhZ2VQb3J0QXJyYXlfdHJh
bnNmZXJMaXN0LCBhcnJheUJ1ZmZlckFycmF5X3RyYW5zZmVyTGlzdCkpCisgICAgICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcigiQ291bGQgbm90IGV4dHJhY3QgdHJhbnNmZXJhYmxlcyIsIFY4UHJv
eHk6OlR5cGVFcnJvcik7CisgICAgfQorICAgIGJvb2wgZGF0YURpZFRocm93ID0gZmFsc2U7Cisg
ICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSA9IFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6Y3JlYXRlKGFyZ3NbMV0sICZtZXNzYWdlUG9ydEFycmF5X3RyYW5zZmVyTGlzdCwgJmFy
cmF5QnVmZmVyQXJyYXlfdHJhbnNmZXJMaXN0LCBkYXRhRGlkVGhyb3cpOworICAgIGlmIChkYXRh
RGlkVGhyb3cpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAgaWYgKGFyZ3Mu
TGVuZ3RoKCkgPD0gMikgeworICAgICAgICByZXR1cm4gdG9WOChpbXAtPkNvbnN0cnVjdG9yKGhl
bGxvLCBkYXRhKSk7CisgICAgfQogCi0gICAgUmVmUHRyPFRlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2U+IGltcGwgPSBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpj
cmVhdGUoaGVsbG8sIHZhbHVlKTsKKyAgICBSZWZQdHI8VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZT4gaW1wbCA9IFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmNy
ZWF0ZShoZWxsbywgZGF0YSwgbWVzc2FnZVBvcnRBcnJheV90cmFuc2Zlckxpc3QpOwogICAgIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGFyZ3MuSG9sZGVyKCk7CiAKICAgICBWOERP
TVdyYXBwZXI6OnNldERPTVdyYXBwZXIod3JhcHBlciwgJmluZm8sIGltcGwuZ2V0KCkpOwpAQCAt
MTQ5LDkgKzIzNywxMyBAQCBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+IENvbmZpZ3VyZVY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZQogICAgIHY4OjpMb2NhbDx2
ODo6U2lnbmF0dXJlPiBkZWZhdWx0U2lnbmF0dXJlOwogICAgIGRlZmF1bHRTaWduYXR1cmUgPSBj
b25maWd1cmVUZW1wbGF0ZShkZXNjLCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZSIsIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPigpLCBWOFRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmludGVybmFsRmllbGRDb3VudCwKICAgICAgICAgVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUF0dHJzLCBXVEZfQVJSQVlfTEVOR1RIKFRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VBdHRycyksCi0gICAgICAgIDAsIDApOwor
ICAgICAgICBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FsbGJhY2tzLCBXVEZf
QVJSQVlfTEVOR1RIKFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWxsYmFja3Mp
KTsKICAgICBVTlVTRURfUEFSQU0oZGVmYXVsdFNpZ25hdHVyZSk7IC8vIEluIHNvbWUgY2FzZXMs
IGl0IHdpbGwgbm90IGJlIHVzZWQuCiAgICAgZGVzYy0+U2V0Q2FsbEhhbmRsZXIoVjhUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpjb25zdHJ1Y3RvckNhbGxiYWNrKTsKKyAgICB2
ODo6TG9jYWw8djg6Ok9iamVjdFRlbXBsYXRlPiBpbnN0YW5jZSA9IGRlc2MtPkluc3RhbmNlVGVt
cGxhdGUoKTsKKyAgICB2ODo6TG9jYWw8djg6Ok9iamVjdFRlbXBsYXRlPiBwcm90byA9IGRlc2Mt
PlByb3RvdHlwZVRlbXBsYXRlKCk7CisgICAgVU5VU0VEX1BBUkFNKGluc3RhbmNlKTsgLy8gSW4g
c29tZSBjYXNlcywgaXQgd2lsbCBub3QgYmUgdXNlZC4KKyAgICBVTlVTRURfUEFSQU0ocHJvdG8p
OyAvLyBJbiBzb21lIGNhc2VzLCBpdCB3aWxsIG5vdCBiZSB1c2VkLgogICAgIAogCiAgICAgLy8g
Q3VzdG9tIHRvU3RyaW5nIHRlbXBsYXRlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132128</attachid>
            <date>2012-03-15 14:59:19 -0700</date>
            <delta_ts>2012-03-16 01:56:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81127-20120315145918.patch</filename>
            <type>text/plain</type>
            <size>43539</size>
            <attacher name="Greg Billock">gbillock</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwNDExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGQ3ZGVhNDA5OGEwYzQ2
ODVhNGQwMDBlMmNhNTVhZWM5NTAwYTNmOC4uZTk2MTQyMWJiMDQyM2FmOTMwZDYzMWU5ODJjMDg1
M2RkYjMyZDc5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDEyLTAzLTE0ICBHcmVn
IEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIEFkZCBUcmFuc2Zlckxp
c3QgSURMIG1vZGlmaWVyLCB3aXRoIHN1cHBvcnQgaW4gVjggY29kZSBnZW4uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTEyNworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgIChHZW5lcmF0ZUZ1bmN0aW9uQ2FsbGJhY2spOgor
ICAgICAgICAoR2V0SW5kZXhPZik6CisgICAgICAgIChHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjayk6
CisgICAgICAgIChHZW5lcmF0ZUNvbnN0cnVjdG9yQ2FsbGJhY2spOgorICAgICAgICAoR2VuZXJh
dGVOYW1lZENvbnN0cnVjdG9yQ2FsbGJhY2spOgorICAgICAgICAoR2VuZXJhdGVGdW5jdGlvbkNh
bGxTdHJpbmcpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQ6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkRPTVRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2U6OmFjY2VwdFRyYW5zZmVyTGlzdCk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlLmg6CisgICAgICAgIChXZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01U
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKHdlYmtpdF9k
b21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfYWNjZXB0X3RyYW5zZmVy
X2xpc3QpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZUNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0SlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90
eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlUHJvdG90eXBlRnVuY3Rpb25BY2NlcHRUcmFuc2Zlckxpc3QpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uu
aDoKKyAgICAgICAgKEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlw
ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
T2JqQy9ET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmg6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZS5tbToKKyAgICAgICAgKC1bRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZSBhY2NlcHRUcmFuc2Zlckxpc3Q6dHJhbnNmZXJMaXN0Ol0pOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmlkbDoK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VJbnRlcm5hbDo6YWNjZXB0VHJhbnNmZXJMaXN0Q2FsbGJhY2spOgor
ICAgICAgICAoVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUludGVybmFsKToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlOjpjb25zdHJ1Y3RvckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbmZpZ3VyZVY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVRlbXBsYXRlKToK
KwogMjAxMi0wMy0xMSAgVmljdG9yIENhcmJ1bmUgIDx2Y2FyYnVuZUBhZG9iZS5jb20+CiAKICAg
ICAgICAgVGhlIG1haW4gY29kZSBzdHJ1Y3R1cmUgZm9yIHBsYWNpbmcgZnV0dXJlIHRleHQgdHJh
Y2sgY3VlIHJlbmRlcmluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCBhNWRhYmRmZDU5YzlmNGU1OGU2Y2UzOThjYmFiZGUy
NGU0M2JjYjVmLi43NzhjMTUyMTI1ZjcxYjdhODBmZmE2M2NhNTBhMTgxMjI3ODVhMTA4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5w
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5w
bQpAQCAtMTQzMSwxMSArMTQzMSwxMSBAQCBFTkQKIEVORAogICAgIH0KIAotICAgIG15ICgkcGFy
YW1ldGVyQ2hlY2tTdHJpbmcsICRwYXJhbUluZGV4KSA9IEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNr
KCRmdW5jdGlvbiwgJGltcGxDbGFzc05hbWUpOworICAgIG15ICgkcGFyYW1ldGVyQ2hlY2tTdHJp
bmcsICRwYXJhbUluZGV4LCAlcmVwbGFjZW1lbnRzKSA9IEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNr
KCRmdW5jdGlvbiwgJGltcGxDbGFzc05hbWUpOwogICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMs
ICRwYXJhbWV0ZXJDaGVja1N0cmluZyk7CiAKICAgICAjIEJ1aWxkIHRoZSBmdW5jdGlvbiBjYWxs
IHN0cmluZy4KLSAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCBHZW5lcmF0ZUZ1bmN0aW9uQ2Fs
bFN0cmluZygkZnVuY3Rpb24sICRwYXJhbUluZGV4LCAiICAgICIsICRpbXBsQ2xhc3NOYW1lKSk7
CisgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgR2VuZXJhdGVGdW5jdGlvbkNhbGxTdHJpbmco
JGZ1bmN0aW9uLCAkcGFyYW1JbmRleCwgIiAgICAiLCAkaW1wbENsYXNzTmFtZSwgJXJlcGxhY2Vt
ZW50cykpOwogCiAgICAgaWYgKCRyYWlzZXNFeGNlcHRpb25zKSB7CiAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50RGVjbHMsICIgICAgfVxuIik7CkBAIC0xNTE2LDYgKzE1MTYsMjAgQEAgc3ViIEdl
bmVyYXRlQXJndW1lbnRzQ291bnRDaGVjawogICAgIHJldHVybiAkYXJndW1lbnRzQ291bnRDaGVj
a1N0cmluZzsKIH0KIAorc3ViIEdldEluZGV4T2YKK3sKKyAgICBteSAkcGFyYW1OYW1lID0gc2hp
ZnQ7CisgICAgbXkgQHBhcmFtTGlzdCA9IEBfOworICAgIG15ICRpbmRleCA9IDA7CisgICAgZm9y
ZWFjaCBteSAkcGFyYW0gKEBwYXJhbUxpc3QpIHsKKyAgICAgICAgaWYgKCRwYXJhbU5hbWUgZXEg
JHBhcmFtKSB7CisgICAgICAgICAgICByZXR1cm4gJGluZGV4OworICAgICAgICB9CisgICAgICAg
ICRpbmRleCsrOworICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CisKIHN1YiBHZW5lcmF0ZVBhcmFt
ZXRlcnNDaGVjawogewogICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0OwpAQCAtMTUyMyw2ICsxNTM3
LDkgQEAgc3ViIEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrCiAKICAgICBteSAkcGFyYW1ldGVyQ2hl
Y2tTdHJpbmcgPSAiIjsKICAgICBteSAkcGFyYW1JbmRleCA9IDA7CisgICAgbXkgQHBhcmFtVHJh
bnNmZXJMaXN0TmFtZXMgPSAoKTsKKyAgICBteSAlcmVwbGFjZW1lbnRzID0gKCk7CisKICAgICBm
b3JlYWNoIG15ICRwYXJhbWV0ZXIgKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkgewogICAgICAg
ICBUcmFuc2xhdGVQYXJhbWV0ZXIoJHBhcmFtZXRlcik7CiAKQEAgLTE1MzMsNyArMTU1MCw3IEBA
IHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICBteSAkb3B0aW9uYWwgPSAkcGFy
YW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiT3B0aW9uYWwifTsKICAgICAgICAgaWYgKCRv
cHRpb25hbCAmJiAkb3B0aW9uYWwgbmUgIkRlZmF1bHRJc1VuZGVmaW5lZCIgJiYgJG9wdGlvbmFs
IG5lICJEZWZhdWx0SXNOdWxsU3RyaW5nIiAmJiAhJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkNhbGxiYWNrIn0pIHsKICAgICAgICAgICAgICRwYXJhbWV0ZXJDaGVja1N0cmluZyAu
PSAiICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9ICRwYXJhbUluZGV4KSB7XG4iOwotICAgICAgICAg
ICAgbXkgJGZ1bmN0aW9uQ2FsbCA9IEdlbmVyYXRlRnVuY3Rpb25DYWxsU3RyaW5nKCRmdW5jdGlv
biwgJHBhcmFtSW5kZXgsICIgICAgIiB4IDIsICRpbXBsQ2xhc3NOYW1lKTsKKyAgICAgICAgICAg
IG15ICRmdW5jdGlvbkNhbGwgPSBHZW5lcmF0ZUZ1bmN0aW9uQ2FsbFN0cmluZygkZnVuY3Rpb24s
ICRwYXJhbUluZGV4LCAiICAgICIgeCAyLCAkaW1wbENsYXNzTmFtZSwgJXJlcGxhY2VtZW50cyk7
CiAgICAgICAgICAgICAkcGFyYW1ldGVyQ2hlY2tTdHJpbmcgLj0gJGZ1bmN0aW9uQ2FsbDsKICAg
ICAgICAgICAgICRwYXJhbWV0ZXJDaGVja1N0cmluZyAuPSAiICAgIH1cbiI7CiAgICAgICAgIH0K
QEAgLTE1NDMsNiArMTU2MCwxMiBAQCBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2sKICAgICAg
ICAgICAgICRwYXJhbWV0ZXJEZWZhdWx0UG9saWN5ID0gIkRlZmF1bHRJc051bGxTdHJpbmciOwog
ICAgICAgICB9CiAKKyAgICAgICAgaWYgKEdldEluZGV4T2YoJHBhcmFtZXRlck5hbWUsIEBwYXJh
bVRyYW5zZmVyTGlzdE5hbWVzKSAhPSAtMSkgeworICAgICAgICAgICAgJHJlcGxhY2VtZW50c3sk
cGFyYW1ldGVyTmFtZX0gPSAibWVzc2FnZVBvcnRBcnJheSIgLiB1Y2ZpcnN0KCRwYXJhbWV0ZXJO
YW1lKTsKKyAgICAgICAgICAgICRwYXJhbUluZGV4Kys7CisgICAgICAgICAgICBuZXh0OworICAg
ICAgICB9CisKICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkV4Y2VwdGlvbkNvZGUuaCIpOwog
ICAgICAgICBteSAkbmF0aXZlVHlwZSA9IEdldE5hdGl2ZVR5cGVGcm9tU2lnbmF0dXJlKCRwYXJh
bWV0ZXIsICRwYXJhbUluZGV4KTsKICAgICAgICAgaWYgKCRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJDYWxsYmFjayJ9KSB7CkBAIC0xNTYyLDggKzE1ODUsMzkgQEAgc3ViIEdlbmVy
YXRlUGFyYW1ldGVyc0NoZWNrCiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzaWYgKCRwYXJh
bWV0ZXItPnR5cGUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIpIHsKICAgICAgICAgICAgIEFk
ZFRvSW1wbEluY2x1ZGVzKCJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIpOworICAgICAgICAgICAg
bXkgJHVzZVRyYW5zZmVyTGlzdCA9IDA7CisgICAgICAgICAgICBteSAkdHJhbnNmZXJMaXN0TmFt
ZSA9ICIiOworICAgICAgICAgICAgbXkgJFRyYW5zZmVyTGlzdE5hbWUgPSAiIjsKKyAgICAgICAg
ICAgIGlmICgkcGFyYW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVHJhbnNmZXJMaXN0In0p
IHsKKyAgICAgICAgICAgICAgICAkdHJhbnNmZXJMaXN0TmFtZSA9ICRwYXJhbWV0ZXItPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJUcmFuc2Zlckxpc3QifTsKKyAgICAgICAgICAgICAgICBwdXNoKEBw
YXJhbVRyYW5zZmVyTGlzdE5hbWVzLCAkdHJhbnNmZXJMaXN0TmFtZSk7CisKKyAgICAgICAgICAg
ICAgICBteSBAYWxsUGFyYW1ldGVyTmFtZXMgPSAoKTsKKyAgICAgICAgICAgICAgICBmb3JlYWNo
IG15ICRwYXJhbWV0ZXIgKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkgeworICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBhbGxQYXJhbWV0ZXJOYW1lcywgJHBhcmFtZXRlci0+bmFtZSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG15ICR0cmFuc2Zlckxpc3RJbmRleCA9IEdl
dEluZGV4T2YoJHRyYW5zZmVyTGlzdE5hbWUsIEBhbGxQYXJhbWV0ZXJOYW1lcyk7CisgICAgICAg
ICAgICAgICAgaWYgKCR0cmFuc2Zlckxpc3RJbmRleCA9PSAtMSkgeworICAgICAgICAgICAgICAg
ICAgICBkaWUgIklETCBlcnJvcjogVHJhbnNmZXJMaXN0IHJlZmVycyB0byBhIG5vbmV4aXN0ZW50
IGFyZ3VtZW50IjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBBZGRUb0lt
cGxJbmNsdWRlcygiQXJyYXlCdWZmZXIuaCIpOworICAgICAgICAgICAgICAgIEFkZFRvSW1wbElu
Y2x1ZGVzKCJNZXNzYWdlUG9ydC5oIik7CisgICAgICAgICAgICAgICAgJFRyYW5zZmVyTGlzdE5h
bWUgPSB1Y2ZpcnN0KCR0cmFuc2Zlckxpc3ROYW1lKTsKKyAgICAgICAgICAgICAgICAkcGFyYW1l
dGVyQ2hlY2tTdHJpbmcgLj0gIiAgICBNZXNzYWdlUG9ydEFycmF5IG1lc3NhZ2VQb3J0QXJyYXkk
VHJhbnNmZXJMaXN0TmFtZTtcbiI7CisgICAgICAgICAgICAgICAgJHBhcmFtZXRlckNoZWNrU3Ry
aW5nIC49ICIgICAgQXJyYXlCdWZmZXJBcnJheSBhcnJheUJ1ZmZlckFycmF5JFRyYW5zZmVyTGlz
dE5hbWU7XG4iOworICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJDaGVja1N0cmluZyAuPSAiICAg
IGlmIChhcmdzLkxlbmd0aCgpID4gJHRyYW5zZmVyTGlzdEluZGV4KSB7XG4iOworICAgICAgICAg
ICAgICAgICRwYXJhbWV0ZXJDaGVja1N0cmluZyAuPSAiICAgICAgICBpZiAoIWV4dHJhY3RUcmFu
c2ZlcmFibGVzKGFyZ3NbJHRyYW5zZmVyTGlzdEluZGV4XSwgbWVzc2FnZVBvcnRBcnJheSRUcmFu
c2Zlckxpc3ROYW1lLCBhcnJheUJ1ZmZlckFycmF5JFRyYW5zZmVyTGlzdE5hbWUpKVxuIjsKKyAg
ICAgICAgICAgICAgICAkcGFyYW1ldGVyQ2hlY2tTdHJpbmcgLj0gIiAgICAgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKFwiQ291bGQgbm90IGV4dHJhY3QgdHJhbnNmZXJhYmxlc1wiLCBWOFByb3h5
OjpUeXBlRXJyb3IpO1xuIjsKKyAgICAgICAgICAgICAgICAkcGFyYW1ldGVyQ2hlY2tTdHJpbmcg
Lj0gIiAgICB9XG4iOworICAgICAgICAgICAgICAgICR1c2VUcmFuc2Zlckxpc3QgPSAxOworICAg
ICAgICAgICAgfQogICAgICAgICAgICAgJHBhcmFtZXRlckNoZWNrU3RyaW5nIC49ICIgICAgYm9v
bCAke3BhcmFtZXRlck5hbWV9RGlkVGhyb3cgPSBmYWxzZTtcbiI7Ci0gICAgICAgICAgICAkcGFy
YW1ldGVyQ2hlY2tTdHJpbmcgLj0gIiAgICAkbmF0aXZlVHlwZSAkcGFyYW1ldGVyTmFtZSA9IFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGFyZ3NbJHBhcmFtSW5kZXhdLCAwLCAwLCAke3Bh
cmFtZXRlck5hbWV9RGlkVGhyb3cpO1xuIjsKKyAgICAgICAgICAgIGlmICghJHVzZVRyYW5zZmVy
TGlzdCkgeworICAgICAgICAgICAgICAgICAgICAkcGFyYW1ldGVyQ2hlY2tTdHJpbmcgLj0gIiAg
ICAkbmF0aXZlVHlwZSAkcGFyYW1ldGVyTmFtZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3Jl
YXRlKGFyZ3NbJHBhcmFtSW5kZXhdLCAwLCAwLCAke3BhcmFtZXRlck5hbWV9RGlkVGhyb3cpO1xu
IjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJD
aGVja1N0cmluZyAuPSAiICAgICRuYXRpdmVUeXBlICRwYXJhbWV0ZXJOYW1lID0gU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpjcmVhdGUoYXJnc1skcGFyYW1JbmRleF0sICZtZXNzYWdlUG9ydEFycmF5
JFRyYW5zZmVyTGlzdE5hbWUsICZhcnJheUJ1ZmZlckFycmF5JFRyYW5zZmVyTGlzdE5hbWUsICR7
cGFyYW1ldGVyTmFtZX1EaWRUaHJvdyk7XG4iOworICAgICAgICAgICAgfQogICAgICAgICAgICAg
JHBhcmFtZXRlckNoZWNrU3RyaW5nIC49ICIgICAgaWYgKCR7cGFyYW1ldGVyTmFtZX1EaWRUaHJv
dylcbiI7CiAgICAgICAgICAgICAkcGFyYW1ldGVyQ2hlY2tTdHJpbmcgLj0gIiAgICAgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTtcbiI7CiAgICAgICAgIH0gZWxzaWYgKFR5cGVDYW5GYWlsQ29u
dmVyc2lvbigkcGFyYW1ldGVyKSkgewpAQCAtMTYxNCw3ICsxNjY4LDcgQEAgc3ViIEdlbmVyYXRl
UGFyYW1ldGVyc0NoZWNrCiAKICAgICAgICAgJHBhcmFtSW5kZXgrKzsKICAgICB9Ci0gICAgcmV0
dXJuICgkcGFyYW1ldGVyQ2hlY2tTdHJpbmcsICRwYXJhbUluZGV4KTsKKyAgICByZXR1cm4gKCRw
YXJhbWV0ZXJDaGVja1N0cmluZywgJHBhcmFtSW5kZXgsICVyZXBsYWNlbWVudHMpOwogfQogCiBz
dWIgR2VuZXJhdGVDb25zdHJ1Y3RvckNhbGxiYWNrCkBAIC0xNjU3LDcgKzE3MTEsNyBAQCBFTkQK
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7XG4i
KTsKICAgICB9CiAKLSAgICBteSAoJHBhcmFtZXRlckNoZWNrU3RyaW5nLCAkcGFyYW1JbmRleCkg
PSBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjaygkZnVuY3Rpb24sICRpbXBsQ2xhc3NOYW1lKTsKKyAg
ICBteSAoJHBhcmFtZXRlckNoZWNrU3RyaW5nLCAkcGFyYW1JbmRleCwgJXJlcGxhY2VtZW50cykg
PSBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjaygkZnVuY3Rpb24sICRpbXBsQ2xhc3NOYW1lKTsKICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgJHBhcmFtZXRlckNoZWNrU3RyaW5nKTsKIAogICAgIGlmICgk
ZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsV2l0aCJ9ICYmICRkYXRhTm9kZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhbGxXaXRoIn0gZXEgIlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQiKSB7CkBAIC0xNjc4LDcgKzE3MzIsMTEgQEAgRU5ECiAgICAgbXkgJGluZGV4ID0gMDsKICAg
ICBmb3JlYWNoIG15ICRwYXJhbWV0ZXIgKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkgewogICAg
ICAgICBsYXN0IGlmICRpbmRleCBlcSAkcGFyYW1JbmRleDsKLSAgICAgICAgcHVzaChAYXJndW1l
bnRMaXN0LCAkcGFyYW1ldGVyLT5uYW1lKTsKKyAgICAgICAgaWYgKCRyZXBsYWNlbWVudHN7JHBh
cmFtZXRlci0+bmFtZX0pIHsKKyAgICAgICAgICAgIHB1c2goQGFyZ3VtZW50TGlzdCwgJHJlcGxh
Y2VtZW50c3skcGFyYW1ldGVyLT5uYW1lfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBwdXNoKEBhcmd1bWVudExpc3QsICRwYXJhbWV0ZXItPm5hbWUpOworICAgICAgICB9CiAgICAg
ICAgICRpbmRleCsrOwogICAgIH0KIApAQCAtMTg0Miw3ICsxOTAwLDcgQEAgRU5ECiAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwO1xuIik7CiAgICAg
fQogCi0gICAgbXkgKCRwYXJhbWV0ZXJDaGVja1N0cmluZywgJHBhcmFtSW5kZXgpID0gR2VuZXJh
dGVQYXJhbWV0ZXJzQ2hlY2soJGZ1bmN0aW9uLCAkaW1wbENsYXNzTmFtZSk7CisgICAgbXkgKCRw
YXJhbWV0ZXJDaGVja1N0cmluZywgJHBhcmFtSW5kZXgsICVyZXBsYWNlbWVudHMpID0gR2VuZXJh
dGVQYXJhbWV0ZXJzQ2hlY2soJGZ1bmN0aW9uLCAkaW1wbENsYXNzTmFtZSk7CiAgICAgcHVzaChA
aW1wbENvbnRlbnQsICRwYXJhbWV0ZXJDaGVja1N0cmluZyk7CiAKICAgICBwdXNoKEBiZWZvcmVB
cmd1bWVudExpc3QsICJkb2N1bWVudCIpOwpAQCAtMTg1NSw3ICsxOTEzLDExIEBAIEVORAogICAg
IG15ICRpbmRleCA9IDA7CiAgICAgZm9yZWFjaCBteSAkcGFyYW1ldGVyIChAeyRmdW5jdGlvbi0+
cGFyYW1ldGVyc30pIHsKICAgICAgICAgbGFzdCBpZiAkaW5kZXggZXEgJHBhcmFtSW5kZXg7Ci0g
ICAgICAgIHB1c2goQGFyZ3VtZW50TGlzdCwgJHBhcmFtZXRlci0+bmFtZSk7CisgICAgICAgIGlm
ICgkcmVwbGFjZW1lbnRzeyRwYXJhbWV0ZXItPm5hbWV9KSB7CisgICAgICAgICAgICBwdXNoKEBh
cmd1bWVudExpc3QsICRyZXBsYWNlbWVudHN7JHBhcmFtZXRlci0+bmFtZX0pOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgcHVzaChAYXJndW1lbnRMaXN0LCAkcGFyYW1ldGVyLT5uYW1l
KTsKKyAgICAgICAgfQogICAgICAgICAkaW5kZXgrKzsKICAgICB9CiAKQEAgLTMxNTUsNiArMzIx
Nyw3IEBAIHN1YiBHZW5lcmF0ZUZ1bmN0aW9uQ2FsbFN0cmluZygpCiAgICAgbXkgJG51bWJlck9m
UGFyYW1ldGVycyA9IHNoaWZ0OwogICAgIG15ICRpbmRlbnQgPSBzaGlmdDsKICAgICBteSAkaW1w
bENsYXNzTmFtZSA9IHNoaWZ0OworICAgIG15ICVyZXBsYWNlbWVudHMgPSBAXzsKIAogICAgIG15
ICRuYW1lID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWU7CiAgICAgbXkgJHJldHVyblR5cGUg
PSBHZXRUeXBlRnJvbVNpZ25hdHVyZSgkZnVuY3Rpb24tPnNpZ25hdHVyZSk7CkBAIC0zMTk5LDcg
KzMyNjIsOSBAQCBzdWIgR2VuZXJhdGVGdW5jdGlvbkNhbGxTdHJpbmcoKQogICAgICAgICBteSAk
cGFyYW1OYW1lID0gJHBhcmFtZXRlci0+bmFtZTsKICAgICAgICAgbXkgJHBhcmFtVHlwZSA9ICRw
YXJhbWV0ZXItPnR5cGU7CiAKLSAgICAgICAgaWYgKCRwYXJhbWV0ZXItPnR5cGUgZXEgIklEQktl
eSIgfHwgJHBhcmFtZXRlci0+dHlwZSBlcSAiTm9kZUZpbHRlciIgfHwgJHBhcmFtZXRlci0+dHlw
ZSBlcSAiWFBhdGhOU1Jlc29sdmVyIikgeworICAgICAgICBpZiAoJHJlcGxhY2VtZW50c3skcGFy
YW1OYW1lfSkgeworICAgICAgICAgICAgcHVzaCBAYXJndW1lbnRzLCAkcmVwbGFjZW1lbnRzeyRw
YXJhbU5hbWV9OworICAgICAgICB9IGVsc2lmICgkcGFyYW1ldGVyLT50eXBlIGVxICJJREJLZXki
IHx8ICRwYXJhbWV0ZXItPnR5cGUgZXEgIk5vZGVGaWx0ZXIiIHx8ICRwYXJhbWV0ZXItPnR5cGUg
ZXEgIlhQYXRoTlNSZXNvbHZlciIpIHsKICAgICAgICAgICAgIHB1c2ggQGFyZ3VtZW50cywgIiRw
YXJhbU5hbWUuZ2V0KCkiOwogICAgICAgICB9IGVsc2lmICgkY29kZUdlbmVyYXRvci0+SXNTVkdU
eXBlTmVlZGluZ1RlYXJPZmYoJHBhcmFtZXRlci0+dHlwZSkgYW5kIG5vdCAkaW1wbENsYXNzTmFt
ZSA9fiAvTGlzdCQvKSB7CiAgICAgICAgICAgICBwdXNoIEBhcmd1bWVudHMsICIkcGFyYW1OYW1l
LT5wcm9wZXJ0eVJlZmVyZW5jZSgpIjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0CmluZGV4IGQxMDVlMDg3MjdkZTkxMTc3ZWY1MTkyMGQ3
MTc0NGZmNzkwZDljOTguLmI4NzY0YjI5YmQzYjk4OGNkNTFlYmJkNGJhYzllYTlmZGUxMWU3MWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRl
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVz
LnR4dApAQCAtOTcsNiArOTcsNyBAQCBSZXBsYWNlYWJsZUNvbnN0cnVjdG9yCiBSZXR1cm5OZXdP
YmplY3QKIFN0cmljdFR5cGVDaGVja2luZwogU3VwcGxlbWVudGFsPSoKK1RyYW5zZmVyTGlzdD0q
CiBUcmVhdE51bGxBcz1OdWxsU3RyaW5nCiBUcmVhdFJldHVybmVkTnVsbFN0cmluZ0FzPUZhbHNl
fE51bGx8VW5kZWZpbmVkCiBUcmVhdFVuZGVmaW5lZEFzPU51bGxTdHJpbmcKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uu
Y3BwCmluZGV4IDU0MTU0NjQ1MGE1OGQzMjczNmRhY2M3NTViODNiNjI4ZGUwODU4OGUuLmQ5NGRm
Mzk5NDQ2MDE4OTI3OWE0NjIyMzY3ZTMyMjQzNGY2MzhkOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0NQUC9XZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcApA
QCAtMjQsOCArMjQsMTAgQEAKIAogI2luY2x1ZGUgIldlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UuaCIKIAorI2luY2x1ZGUgIkFycmF5LmgiCiAjaW5jbHVkZSAiU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZS5oIgorI2luY2x1ZGUgIldlYkRPTUFycmF5LmgiCiAjaW5jbHVkZSAiV2ViRXhjZXB0
aW9uSGFuZGxlci5oIgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CkBAIC0xMjMsNiArMTI1LDIyIEBAIFdlYkRPTVN0cmluZyBXZWJET01UZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpjYWNoZWRSZWFkb25seVZhbHVlKCkgY29uCiAgICAg
cmV0dXJuIGltcGwoKS0+Y2FjaGVkUmVhZG9ubHlWYWx1ZSgpLT50b1N0cmluZygpOwogfQogCit2
b2lkIFdlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmFjY2VwdFRyYW5z
ZmVyTGlzdChjb25zdCBXZWJET01TdHJpbmcmIGRhdGEsIGNvbnN0IFdlYkRPTUFycmF5JiB0cmFu
c2Zlckxpc3QpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlt
cGwoKS0+YWNjZXB0VHJhbnNmZXJMaXN0KFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
Y3JlYXRlKFdURjo6U3RyaW5nKGRhdGEpKSwgdG9XZWJDb3JlKHRyYW5zZmVyTGlzdCkpOworfQor
Cit2b2lkIFdlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6Om11bHRpVHJh
bnNmZXJMaXN0KGNvbnN0IFdlYkRPTVN0cmluZyYgZmlyc3QsIGNvbnN0IFdlYkRPTUFycmF5JiB0
eCwgY29uc3QgV2ViRE9NU3RyaW5nJiBzZWNvbmQsIGNvbnN0IFdlYkRPTUFycmF5JiB0eHgpCit7
CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGltcGwoKS0+bXVsdGlU
cmFuc2Zlckxpc3QoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoV1RGOjpT
dHJpbmcoZmlyc3QpKSwgdG9XZWJDb3JlKHR4KSwgV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpjcmVhdGUoV1RGOjpTdHJpbmcoc2Vjb25kKSksIHRvV2ViQ29yZSh0eHgpKTsKK30KKwog
V2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogdG9XZWJDb3JlKGNv
bnN0IFdlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UmIHdyYXBwZXIpCiB7
CiAgICAgcmV0dXJuIHdyYXBwZXIuaW1wbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dl
YkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaAppbmRleCBkMDNiNzVlNmE3
NjdmMjJjZmNmYmY5YTVkNTU4MjJkZTcxYjI0Mzk5Li42NTk0YjhhNjIxNDQwYTdkYWQ1ZWFhNTcy
NzA0NmRjOWY0NGYzNjg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaApAQCAtMzIsNiArMzIsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBjbGFzcyBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOwog
fTsKIAorY2xhc3MgV2ViRE9NQXJyYXk7CiBjbGFzcyBXZWJET01TdHJpbmc7CiAKIGNsYXNzIFdl
YkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgOiBwdWJsaWMgV2ViRE9NT2Jq
ZWN0IHsKQEAgLTQ5LDYgKzUwLDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q2FjaGVkVmFsdWUo
Y29uc3QgV2ViRE9NU3RyaW5nJik7CiAgICAgV2ViRE9NU3RyaW5nIGNhY2hlZFJlYWRvbmx5VmFs
dWUoKSBjb25zdDsKIAorICAgIHZvaWQgYWNjZXB0VHJhbnNmZXJMaXN0KGNvbnN0IFdlYkRPTVN0
cmluZyYgZGF0YSwgY29uc3QgV2ViRE9NQXJyYXkmIHRyYW5zZmVyTGlzdCk7CisgICAgdm9pZCBt
dWx0aVRyYW5zZmVyTGlzdChjb25zdCBXZWJET01TdHJpbmcmIGZpcnN0LCBjb25zdCBXZWJET01B
cnJheSYgdHgsIGNvbnN0IFdlYkRPTVN0cmluZyYgc2Vjb25kLCBjb25zdCBXZWJET01BcnJheSYg
dHh4KTsKKwogICAgIFdlYkNvcmU6OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uq
IGltcGwoKSBjb25zdDsKIAogcHJvdGVjdGVkOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNw
cAppbmRleCA5NjFjNGIzYTVjMmY5MmQ0NzM2NDQ1NjE2MGM4ZmI1ODA2ZGEzNzRmLi44NDVhMzcz
N2MxYTEyY2FhNDdhMGYyYTBhMTZkOTRmNTZiOGUyMDMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlLmNwcApAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgIlRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJXZWJLaXRET01CaW5kaW5nLmgiCiAjaW5j
bHVkZSAiZ29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSAid2Via2l0L1dl
YktpdERPTUFycmF5LmgiCisjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTUFycmF5UHJpdmF0ZS5o
IgogI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNp
bmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlUHJpdmF0ZS5oIgog
I2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlLmgiCkBAIC01NCw2ICs1Niw2MCBAQCBXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlKiBraXQoV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYQogICAgIAog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0IC8vCiAKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9zZXJpYWxp
emVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfYWNjZXB0X3RyYW5zZmVyX2xpc3QoV2ViS2l0RE9N
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogc2VsZiwgV2ViS2l0RE9NU2VyaWFs
aXplZFNjcmlwdFZhbHVlKiBkYXRhLCBXZWJLaXRET01BcnJheSogdHJhbnNmZXJfbGlzdCkKK3sK
KyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51
bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KGRhdGEpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwodHJhbnNmZXJfbGlzdCk7CisgICAgV2ViQ29y
ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlICogY29udmVydGVkX2RhdGEgPSBOVUxMOworICAgIGlm
IChkYXRhICE9IE5VTEwpIHsKKyAgICAgICAgY29udmVydGVkX2RhdGEgPSBXZWJLaXQ6OmNvcmUo
ZGF0YSk7CisgICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX2RhdGEpOworICAgIH0K
KyAgICBXZWJDb3JlOjpBcnJheSAqIGNvbnZlcnRlZF90cmFuc2Zlcl9saXN0ID0gTlVMTDsKKyAg
ICBpZiAodHJhbnNmZXJfbGlzdCAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF90cmFuc2Zl
cl9saXN0ID0gV2ViS2l0Ojpjb3JlKHRyYW5zZmVyX2xpc3QpOworICAgICAgICBnX3JldHVybl9p
Zl9mYWlsKGNvbnZlcnRlZF90cmFuc2Zlcl9saXN0KTsKKyAgICB9CisgICAgaXRlbS0+YWNjZXB0
VHJhbnNmZXJMaXN0KGNvbnZlcnRlZF9kYXRhLCBjb252ZXJ0ZWRfdHJhbnNmZXJfbGlzdCk7Cit9
CisKK3ZvaWQKK3dlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZh
Y2VfbXVsdGlfdHJhbnNmZXJfbGlzdChXZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlKiBzZWxmLCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIGZpcnN0LCBX
ZWJLaXRET01BcnJheSogdHgsIFdlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogc2Vjb25k
LCBXZWJLaXRET01BcnJheSogdHh4KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNl
bGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoZmlyc3QpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dHgpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2Vjb25kKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KHR4eCk7CisgICAgV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlICogY29udmVydGVkX2Zp
cnN0ID0gTlVMTDsKKyAgICBpZiAoZmlyc3QgIT0gTlVMTCkgeworICAgICAgICBjb252ZXJ0ZWRf
Zmlyc3QgPSBXZWJLaXQ6OmNvcmUoZmlyc3QpOworICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNv
bnZlcnRlZF9maXJzdCk7CisgICAgfQorICAgIFdlYkNvcmU6OkFycmF5ICogY29udmVydGVkX3R4
ID0gTlVMTDsKKyAgICBpZiAodHggIT0gTlVMTCkgeworICAgICAgICBjb252ZXJ0ZWRfdHggPSBX
ZWJLaXQ6OmNvcmUodHgpOworICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF90eCk7
CisgICAgfQorICAgIFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSAqIGNvbnZlcnRlZF9z
ZWNvbmQgPSBOVUxMOworICAgIGlmIChzZWNvbmQgIT0gTlVMTCkgeworICAgICAgICBjb252ZXJ0
ZWRfc2Vjb25kID0gV2ViS2l0Ojpjb3JlKHNlY29uZCk7CisgICAgICAgIGdfcmV0dXJuX2lmX2Zh
aWwoY29udmVydGVkX3NlY29uZCk7CisgICAgfQorICAgIFdlYkNvcmU6OkFycmF5ICogY29udmVy
dGVkX3R4eCA9IE5VTEw7CisgICAgaWYgKHR4eCAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRl
ZF90eHggPSBXZWJLaXQ6OmNvcmUodHh4KTsKKyAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252
ZXJ0ZWRfdHh4KTsKKyAgICB9CisgICAgaXRlbS0+bXVsdGlUcmFuc2Zlckxpc3QoY29udmVydGVk
X2ZpcnN0LCBjb252ZXJ0ZWRfdHgsIGNvbnZlcnRlZF9zZWNvbmQsIGNvbnZlcnRlZF90eHgpOwor
fQorCiBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqCiB3ZWJraXRfZG9tX3Rlc3Rfc2Vy
aWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX2dldF92YWx1ZShXZWJLaXRET01UZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBzZWxmKQogewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZS5oCmluZGV4IDUxNjE0MTg1OWNlM2U1M2NiNTRlNGJlYmYzZTQ5MjNjYzllNGYzZGMuLjVk
MTVjZDMzMDlhOTQ5YThkN2FmN2YzNjEzMTZkMGM2NjkxNzMyMTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlLmgKQEAgLTQ3LDYgKzQ3LDMyIEBAIFdFQktJVF9BUEkgR1R5cGUKIHdlYmtpdF9k
b21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRlcmZhY2VfZ2V0X3R5cGUgKHZvaWQp
OwogCiAvKioKKyAqIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVkX3NjcmlwdF92YWx1ZV9pbnRl
cmZhY2VfYWNjZXB0X3RyYW5zZmVyX2xpc3Q6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZQorICogQGRhdGE6IEEgI1dlYktpdERPTVNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZQorICogQHRyYW5zZmVyX2xpc3Q6IEEgI1dlYktpdERPTUFycmF5Cisg
KgorICogUmV0dXJuczoKKyAqCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV90ZXN0
X3NlcmlhbGl6ZWRfc2NyaXB0X3ZhbHVlX2ludGVyZmFjZV9hY2NlcHRfdHJhbnNmZXJfbGlzdChX
ZWJLaXRET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBzZWxmLCBXZWJLaXRE
T01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIGRhdGEsIFdlYktpdERPTUFycmF5KiB0cmFuc2Zlcl9s
aXN0KTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVf
aW50ZXJmYWNlX211bHRpX3RyYW5zZmVyX2xpc3Q6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZQorICogQGZpcnN0OiBBICNXZWJLaXRET01T
ZXJpYWxpemVkU2NyaXB0VmFsdWUKKyAqIEB0eDogQSAjV2ViS2l0RE9NQXJyYXkKKyAqIEBzZWNv
bmQ6IEEgI1dlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZQorICogQHR4eDogQSAjV2ViS2l0
RE9NQXJyYXkKKyAqCisgKiBSZXR1cm5zOgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX3Rlc3Rfc2VyaWFsaXplZF9zY3JpcHRfdmFsdWVfaW50ZXJmYWNlX211bHRpX3RyYW5z
ZmVyX2xpc3QoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogc2Vs
ZiwgV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBmaXJzdCwgV2ViS2l0RE9NQXJyYXkq
IHR4LCBXZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUqIHNlY29uZCwgV2ViS2l0RE9NQXJy
YXkqIHR4eCk7CisKKy8qKgogICogd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZWRfc2NyaXB0X3Zh
bHVlX2ludGVyZmFjZV9nZXRfdmFsdWU6CiAgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZQogICoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKaW5kZXggYzBlYTZlYWFkOWU4ZDA1
N2E0ZWQ1NzVlYzNiYzcyZTE0YTllMGI1NC4uZWY2YTdiMzM3OWZjNzc4NWE1MjU2MGI5MjQyZDRk
ODNlNzhhNmM5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZS5jcHAKQEAgLTI1LDEyICsyNSwxOCBAQAogI2luY2x1ZGUgIkpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oIgogCiAjaW5jbHVkZSAiRXhjZXB0aW9u
Q29kZS5oIgorI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
ICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgog
I2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KIAorI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFC
TEUoQ29uZGl0aW9uMikKKyNpbmNsdWRlICIuaCIKKyNpbmNsdWRlICJKUy5oIgorI2VuZGlmCisK
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY5LDcgKzc1
LDcgQEAgdm9pZCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3Rv
cjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKgogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4
ZWMtPmdsb2JhbERhdGEoKSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKICAgICBw
dXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90
eXBlLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGU6OnNlbGYo
ZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKLSAgICBwdXREaXJl
Y3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051
bWJlcigyKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOworICAgIHB1dERpcmVj
dChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVt
YmVyKDMpLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CiAKIGJvb2wgSlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3I6OmdldE93blByb3Bl
cnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCkBAIC05MCwxMCArOTYsMjEgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VDb25zdHJ1Y3Rvcjo6Y28KICAgICBjb25zdCBTdHJpbmcmIGhlbGxvKHVzdHJpbmdUb1N0
cmluZyhNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQp
LmlzRW1wdHkoKSA/IFVTdHJpbmcoKSA6IE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAs
IERlZmF1bHRJc1VuZGVmaW5lZCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7CiAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVl
KFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIE1BWUJFX01JU1NJTkdfUEFSQU1F
VEVSKGV4ZWMsIDEsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKKyAgICBSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBkYXRhKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIE1B
WUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDEsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKKyAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CisKKyAgICBzaXplX3QgYXJnc0NvdW50ID0gZXhlYy0+YXJndW1l
bnRDb3VudCgpOworICAgIGlmIChhcmdzQ291bnQgPD0gMikgeworCisgICAgICAgIEpTQzo6SlNW
YWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6
OmdldFB0cihpbXBsLT5jb25zdHJ1Y3RvckNhbGxiYWNrKGhlbGxvLCBkYXRhKSkpOworICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgfQorCisgICAgQXJyYXkqIHRy
YW5zZmVyTGlzdCh0b0FycmF5KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDIsIERlZmF1
bHRJc1VuZGVmaW5lZCkpKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgUmVmUHRyPFRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+IG9iamVjdCA9IFRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2U6OmNyZWF0ZShoZWxsbywgdmFsdWUpOworICAgIFJlZlB0cjxUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPiBvYmplY3QgPSBUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlOjpjcmVhdGUoaGVsbG8sIGRhdGEsIHRyYW5zZmVyTGlzdCk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKGV4ZWMsIGpzQ29uc3RydWN0
b3ItPmdsb2JhbE9iamVjdCgpLCBvYmplY3QuZ2V0KCkpKSk7CiB9CiAKQEAgLTEwNywxMCArMTI0
LDEyIEBAIENvbnN0cnVjdFR5cGUgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
Q29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoCiAKIHN0YXRpYyBjb25zdCBIYXNoVGFibGVW
YWx1ZSBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVUYWJsZVZh
bHVlc1tdID0KIHsKKyAgICB7ICJhY2NlcHRUcmFuc2Zlckxpc3QiLCBEb250RGVsZXRlIHwgSlND
OjpGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkFjY2VwdFRyYW5z
ZmVyTGlzdCksIChpbnRwdHJfdCkyLCBOb0ludHJpbnNpYyB9LAorICAgIHsgIm11bHRpVHJhbnNm
ZXJMaXN0IiwgRG9udERlbGV0ZSB8IEpTQzo6RnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2Fz
dDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJv
dG90eXBlRnVuY3Rpb25NdWx0aVRyYW5zZmVyTGlzdCksIChpbnRwdHJfdCk0LCBOb0ludHJpbnNp
YyB9LAogICAgIHsgMCwgMCwgMCwgMCwgTm9JbnRyaW5zaWMgfQogfTsKIAotc3RhdGljIGNvbnN0
IEhhc2hUYWJsZSBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVU
YWJsZSA9IHsgMSwgMCwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90
eXBlVGFibGVWYWx1ZXMsIDAgfTsKK3N0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlVGFibGUgPSB7IDUsIDMsIEpTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZVRhYmxlVmFsdWVzLCAwIH07CiBj
b25zdCBDbGFzc0luZm8gSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90
eXBlOjpzX2luZm8gPSB7ICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90
eXBlIiwgJkJhc2U6OnNfaW5mbywgJkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZVByb3RvdHlwZVRhYmxlLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSkgfTsKIAogSlNPYmplY3QqIEpTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZTo6c2VsZihFeGVjU3RhdGUqIGV4ZWMs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCkBAIC0xMTgsNiArMTM3LDE4IEBAIEpTT2Jq
ZWN0KiBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGU6OnNlbGYo
RXhlY1N0YXRlKiBleGVjLCBKCiAgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+KGV4ZWMsIGdsb2JhbE9iamVjdCk7CiB9CiAKK2Jv
b2wgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlOjpnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUqPihjZWxsKTsKKyAg
ICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25TbG90PEpTT2JqZWN0PihleGVjLCAmSlNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlVGFibGUsIHRoaXNPYmplY3QsIHBy
b3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlUHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBKU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlKj4ob2JqZWN0KTsKKyAgICByZXR1
cm4gZ2V0U3RhdGljRnVuY3Rpb25EZXNjcmlwdG9yPEpTT2JqZWN0PihleGVjLCAmSlNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUHJvdG90eXBlVGFibGUsIHRoaXNPYmplY3QsIHBy
b3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnNfaW5mbyA9IHsgIlRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UiLCAmQmFzZTo6c19pbmZvLCAmSlNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlVGFibGUsIDAgLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSkgfTsKIAogSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlOjpKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQ
dHI8VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT4gaW1wbCkKQEAgLTI0Miw2ICsy
NzMsNzkgQEAgSlNWYWx1ZSBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6Omdl
dENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlMKICAgICByZXR1cm4gZ2V0RE9NQ29uc3Ry
dWN0b3I8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ29uc3RydWN0b3I+KGV4
ZWMsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7CiB9CiAK
K0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25BY2NlcHRUcmFuc2Zlckxpc3QoRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwor
ICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2U6OnNfaW5mbykpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMp
OworICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogY2FzdGVkVGhpcyA9
IHN0YXRpY19jYXN0PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSo+KGFzT2Jq
ZWN0KHRoaXNWYWx1ZSkpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhp
cywgJkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6c19pbmZvKTsKKyAgICBU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSo+KGNhc3RlZFRoaXMtPmltcGwoKSk7Cisg
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCisgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIp
KTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhKFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERl
ZmF1bHRJc1VuZGVmaW5lZCkpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisKKyAgICBzaXplX3Qg
YXJnc0NvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOworICAgIGlmIChhcmdzQ291bnQgPD0g
MSkgeworICAgICAgICBpbXBsLT5hY2NlcHRUcmFuc2Zlckxpc3QoZGF0YSk7CisgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfQorCisgICAgQXJyYXkq
IHRyYW5zZmVyTGlzdCh0b0FycmF5KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDEsIERl
ZmF1bHRJc1VuZGVmaW5lZCkpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgaW1wbC0+YWNj
ZXB0VHJhbnNmZXJMaXN0KGRhdGEsIHRyYW5zZmVyTGlzdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbk11
bHRpVHJhbnNmZXJMaXN0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlIHRoaXNWYWx1
ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygm
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpzX2luZm8pKQorICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKKyAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKKyAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2U6OnNfaW5mbyk7CisgICAgVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZSogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworCisgICAgc2l6ZV90IGFyZ3NDb3VudCA9IGV4ZWMt
PmFyZ3VtZW50Q291bnQoKTsKKyAgICBpZiAoYXJnc0NvdW50IDw9IDApIHsKKyAgICAgICAgaW1w
bC0+bXVsdGlUcmFuc2Zlckxpc3QoKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKKyAgICB9CisKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBmaXJzdChTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCBNQVlCRV9NSVNTSU5H
X1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworICAgIGlmIChhcmdzQ291bnQgPD0gMSkgeworICAgICAgICBpbXBsLT5tdWx0aVRy
YW5zZmVyTGlzdChmaXJzdCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CisgICAgfQorCisgICAgQXJyYXkqIHR4KHRvQXJyYXkoTUFZQkVfTUlTU0lOR19Q
QVJBTUVURVIoZXhlYywgMSwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOworICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICBpZiAoYXJnc0NvdW50IDw9IDIpIHsKKyAgICAgICAgaW1wbC0+bXVsdGlUcmFu
c2Zlckxpc3QoZmlyc3QsIHR4KTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICB9CisKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBz
ZWNvbmQoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgTUFZQkVfTUlTU0lOR19Q
QVJBTUVURVIoZXhlYywgMiwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOworICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICBpZiAoYXJnc0NvdW50IDw9IDMpIHsKKyAgICAgICAgaW1wbC0+bXVsdGlUcmFu
c2Zlckxpc3QoZmlyc3QsIHR4LCBzZWNvbmQpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0KKworICAgIEFycmF5KiB0eHgodG9BcnJheShNQVlC
RV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAzLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CisgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworICAgIGltcGwtPm11bHRpVHJhbnNmZXJMaXN0KGZpcnN0LCB0eCwg
c2Vjb25kLCB0eHgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
Cit9CisKIHZvaWQgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSo+KGNlbGwpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCmluZGV4IGM5NDRlNDJh
M2E1MWZkYmRjYTg3YjVlZGZiNmFkOWVmMWE5ZjFhZWYuLmFkNDRiNTdhNzk3OGI1NDJlNGY2Y2Ji
NGQyYTc5ZjcwODRjOGUxOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgKQEAgLTEwMyw2ICsxMDMsOCBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKyAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIGNv
bnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0
ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7CiAg
ICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpK
U1ZhbHVlIHByb3RvdHlwZSkKICAgICB7CiAgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6
Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZv
KEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKQEAgLTExMSw3ICsx
MTMsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZVByb3RvdHlwZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZp
bmFsT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkgeyB9CiBwcm90ZWN0ZWQ6Ci0gICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNWaXNpdENo
aWxkcmVuIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6
Ok92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIH07CiAKIGNs
YXNzIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yIDogcHVi
bGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKQEAgLTE0MSw2ICsxNDMsMTAgQEAgcHJvdGVjdGVk
OgogICAgIHN0YXRpYyBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkpT
Q2VsbCosIEpTQzo6Q29uc3RydWN0RGF0YSYpOwogfTsKIAorLy8gRnVuY3Rpb25zCisKK0pTQzo6
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkFjY2VwdFRyYW5zZmVyTGlzdChKU0M6OkV4ZWNTdGF0
ZSopOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uTXVsdGlUcmFuc2Zlckxpc3QoSlND
OjpFeGVjU3RhdGUqKTsKIC8vIEF0dHJpYnV0ZXMKIAogSlNDOjpKU1ZhbHVlIGpzVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1Zh
bHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RP
TVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaAppbmRleCBiNWYzYTE3Yzk1YjI1
MTEyMWI1OTUxZGI3YmNhNWJlZDQ0OTliN2NlLi5jZTUyMWQxNDU0NWE0ZDFiZWE5MjRiZDI4NWM5
Zjc4Njc4NzUyZjg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvT2JqQy9ET01UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBXRUJLSVRf
VkVSU0lPTl9NQVhfQUxMT1dFRCA+PSBXRUJLSVRfVkVSU0lPTl9MQVRFU1QKIAorQGNsYXNzIERP
TUFycmF5OwogQGNsYXNzIE5TU3RyaW5nOwogCiBAaW50ZXJmYWNlIERPTVRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UgOiBET01PYmplY3QKQEAgLTM3LDYgKzM4LDggQEAKIC0gKE5T
U3RyaW5nICopY2FjaGVkVmFsdWU7CiAtICh2b2lkKXNldENhY2hlZFZhbHVlOihOU1N0cmluZyAq
KW5ld0NhY2hlZFZhbHVlOwogLSAoTlNTdHJpbmcgKiljYWNoZWRSZWFkb25seVZhbHVlOworLSAo
dm9pZClhY2NlcHRUcmFuc2Zlckxpc3Q6KE5TU3RyaW5nICopZGF0YSB0cmFuc2Zlckxpc3Q6KERP
TUFycmF5ICopdHJhbnNmZXJMaXN0OworLSAodm9pZCltdWx0aVRyYW5zZmVyTGlzdDooTlNTdHJp
bmcgKilmaXJzdCB0eDooRE9NQXJyYXkgKil0eCBzZWNvbmQ6KE5TU3RyaW5nICopc2Vjb25kIHR4
eDooRE9NQXJyYXkgKil0eHg7CiBAZW5kCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZS5tbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9P
YmpDL0RPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UubW0KaW5kZXggMzg4ZjFj
NTZkN2NiMjgyZTc5ZGUzMGM5NzFmOGNjMDU1N2FmZjExMC4uMTY4ZjA5NmI5NDY3ZjAwNTUwNDBm
N2FlODQwYTQ5NWQ1NzFiMTgwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLm1tCkBAIC0zMiw2ICszMiw4IEBACiAKICNp
bXBvcnQgIkRPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaCIKIAorI2ltcG9y
dCAiQXJyYXkuaCIKKyNpbXBvcnQgIkRPTUFycmF5SW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTUJs
b2JJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NQ1NTUnVsZUludGVybmFsLmgiCiAjaW1wb3J0ICJE
T01DU1NWYWx1ZUludGVybmFsLmgiCkBAIC0xMDksNiArMTExLDE4IEBACiAgICAgcmV0dXJuIElN
UEwtPmNhY2hlZFJlYWRvbmx5VmFsdWUoKS0+dG9TdHJpbmcoKTsKIH0KIAorLSAodm9pZClhY2Nl
cHRUcmFuc2Zlckxpc3Q6KE5TU3RyaW5nICopZGF0YSB0cmFuc2Zlckxpc3Q6KERPTUFycmF5ICop
dHJhbnNmZXJMaXN0Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIElNUEwtPmFjY2VwdFRyYW5zZmVyTGlzdChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OmNyZWF0ZShXVEY6OlN0cmluZyhkYXRhKSksIGNvcmUodHJhbnNmZXJMaXN0KSk7Cit9
CisKKy0gKHZvaWQpbXVsdGlUcmFuc2Zlckxpc3Q6KE5TU3RyaW5nICopZmlyc3QgdHg6KERPTUFy
cmF5ICopdHggc2Vjb25kOihOU1N0cmluZyAqKXNlY29uZCB0eHg6KERPTUFycmF5ICopdHh4Cit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIElNUEwtPm11
bHRpVHJhbnNmZXJMaXN0KFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKFdU
Rjo6U3RyaW5nKGZpcnN0KSksIGNvcmUodHgpLCBXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OmNyZWF0ZShXVEY6OlN0cmluZyhzZWNvbmQpKSwgY29yZSh0eHgpKTsKK30KKwogQGVuZAog
CiBXZWJDb3JlOjpUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBjb3JlKERPTVRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgKndyYXBwZXIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5pZGwKaW5kZXggZGRkZWU5ZmFlNjRk
ZWMzZjA5NjkyNzIwYjczMDYzMmFhMTY5NGM5Ni4uN2U5NTRkNTBmOGY2YjFkY2IwZTNlM2IxZTUx
MTUxYmYxZWIxMWYzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaWRsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlLmlkbApAQCAtMjksMTAgKzI5LDEzIEBAIG1vZHVsZSB0ZXN0IHsKICAgICBpbnRl
cmZhY2UgWwogICAgICAgICBDb25kaXRpb25hbD1Db25kaXRpb24xfENvbmRpdGlvbjIsCiAgICAg
ICAgIENvbnN0cnVjdG9yKGluIERPTVN0cmluZyBoZWxsbywgaW4gU2VyaWFsaXplZFNjcmlwdFZh
bHVlIHZhbHVlKSwKKyAgICAgICAgQ29uc3RydWN0b3IoaW4gRE9NU3RyaW5nIGhlbGxvLCBpbiBb
VHJhbnNmZXJMaXN0PXRyYW5zZmVyTGlzdF0gU2VyaWFsaXplZFNjcmlwdFZhbHVlIGRhdGEsIGlu
IFtPcHRpb25hbF0gQXJyYXkgdHJhbnNmZXJMaXN0KSwKICAgICBdIFRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UgewogICAgICAgICBhdHRyaWJ1dGUgU2VyaWFsaXplZFNjcmlwdFZh
bHVlIHZhbHVlOwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgU2VyaWFsaXplZFNjcmlwdFZh
bHVlIHJlYWRvbmx5VmFsdWU7CiAgICAgICAgIGF0dHJpYnV0ZSBbQ2FjaGVkQXR0cmlidXRlXSBT
ZXJpYWxpemVkU2NyaXB0VmFsdWUgY2FjaGVkVmFsdWU7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBbQ2FjaGVkQXR0cmlidXRlXSBTZXJpYWxpemVkU2NyaXB0VmFsdWUgY2FjaGVkUmVhZG9u
bHlWYWx1ZTsKKyAgICAgICAgdm9pZCBhY2NlcHRUcmFuc2Zlckxpc3QoaW4gW1RyYW5zZmVyTGlz
dD10cmFuc2Zlckxpc3RdIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBkYXRhLCBpbiBbT3B0aW9uYWxd
IEFycmF5IHRyYW5zZmVyTGlzdCk7CisgICAgICAgIHZvaWQgbXVsdGlUcmFuc2Zlckxpc3QoaW4g
W09wdGlvbmFsLCBUcmFuc2Zlckxpc3Q9dHhdIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBmaXJzdCwg
aW4gW09wdGlvbmFsXSBBcnJheSB0eCwgaW4gW09wdGlvbmFsLCBUcmFuc2Zlckxpc3Q9dHh4XSBT
ZXJpYWxpemVkU2NyaXB0VmFsdWUgc2Vjb25kLCBpbiBbT3B0aW9uYWxdIEFycmF5IHR4eCk7CiAg
ICAgfTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZS5jcHAKaW5kZXggZjMyOWFiMGYzMzU0NWYyMjRiNDhiNjJkNjQwODVjZDk1MjQ2
MDVlYy4uZTJhNjhjM2I5MjkzMDA3MTk3M2Y1MzUyOThiZTRlZTJjMjFkZmJlZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAK
QEAgLTIzLDE1ICsyMywyMSBAQAogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShD
b25kaXRpb24yKQogCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCisjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlICJSdW50aW1lRW5h
YmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisjaW5j
bHVkZSAiVjguaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEJpbmRpbmdN
YWNyb3MuaCIKICNpbmNsdWRlICJWOEJpbmRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIlY4RE9NV3Jh
cHBlci5oIgogI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0LmgiCiAjaW5jbHVkZSAiVjhQcm94
eS5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTAzLDYgKzEwOSw3NCBAQCBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGNhY2hlZFJlYWRvbmx5VmFsdWVBdHRyR2V0dGVyKHY4OjpMb2NhbDx2
ODo6U3RyaW5nPgogICAgIHJldHVybiB2YWx1ZTsKIH0KIAorc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBhY2NlcHRUcmFuc2Zlckxpc3RDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBh
cmdzKQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UuYWNjZXB0VHJhbnNmZXJMaXN0Iik7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQor
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiTm90IGVub3VnaCBhcmd1bWVudHMiLCBWOFByb3h5
OjpUeXBlRXJyb3IpOworICAgIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGlt
cCA9IFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6dG9OYXRpdmUoYXJncy5I
b2xkZXIoKSk7CisgICAgTWVzc2FnZVBvcnRBcnJheSBtZXNzYWdlUG9ydEFycmF5VHJhbnNmZXJM
aXN0OworICAgIEFycmF5QnVmZmVyQXJyYXkgYXJyYXlCdWZmZXJBcnJheVRyYW5zZmVyTGlzdDsK
KyAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDEpIHsKKyAgICAgICAgaWYgKCFleHRyYWN0VHJhbnNm
ZXJhYmxlcyhhcmdzWzFdLCBtZXNzYWdlUG9ydEFycmF5VHJhbnNmZXJMaXN0LCBhcnJheUJ1ZmZl
ckFycmF5VHJhbnNmZXJMaXN0KSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJDb3Vs
ZCBub3QgZXh0cmFjdCB0cmFuc2ZlcmFibGVzIiwgVjhQcm94eTo6VHlwZUVycm9yKTsKKyAgICB9
CisgICAgYm9vbCBkYXRhRGlkVGhyb3cgPSBmYWxzZTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBkYXRhID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoYXJnc1swXSwg
Jm1lc3NhZ2VQb3J0QXJyYXlUcmFuc2Zlckxpc3QsICZhcnJheUJ1ZmZlckFycmF5VHJhbnNmZXJM
aXN0LCBkYXRhRGlkVGhyb3cpOworICAgIGlmIChkYXRhRGlkVGhyb3cpCisgICAgICAgIHJldHVy
biB2ODo6VW5kZWZpbmVkKCk7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPD0gMSkgeworICAgICAg
ICBpbXAtPmFjY2VwdFRyYW5zZmVyTGlzdChkYXRhKTsKKyAgICAgICAgcmV0dXJuIHY4OjpIYW5k
bGU8djg6OlZhbHVlPigpOworICAgIH0KKyAgICBpbXAtPmFjY2VwdFRyYW5zZmVyTGlzdChkYXRh
LCBtZXNzYWdlUG9ydEFycmF5VHJhbnNmZXJMaXN0KTsKKyAgICByZXR1cm4gdjg6OkhhbmRsZTx2
ODo6VmFsdWU+KCk7Cit9CisKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbXVsdGlUcmFu
c2Zlckxpc3RDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIElOQ19T
VEFUUygiRE9NLlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UubXVsdGlUcmFuc2Zl
ckxpc3QiKTsKKyAgICBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBpbXAgPSBW
OFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnRvTmF0aXZlKGFyZ3MuSG9sZGVy
KCkpOworICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9IDApIHsKKyAgICAgICAgaW1wLT5tdWx0aVRy
YW5zZmVyTGlzdCgpOworICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7Cisg
ICAgfQorICAgIE1lc3NhZ2VQb3J0QXJyYXkgbWVzc2FnZVBvcnRBcnJheVR4OworICAgIEFycmF5
QnVmZmVyQXJyYXkgYXJyYXlCdWZmZXJBcnJheVR4OworICAgIGlmIChhcmdzLkxlbmd0aCgpID4g
MSkgeworICAgICAgICBpZiAoIWV4dHJhY3RUcmFuc2ZlcmFibGVzKGFyZ3NbMV0sIG1lc3NhZ2VQ
b3J0QXJyYXlUeCwgYXJyYXlCdWZmZXJBcnJheVR4KSkKKyAgICAgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKCJDb3VsZCBub3QgZXh0cmFjdCB0cmFuc2ZlcmFibGVzIiwgVjhQcm94eTo6VHlwZUVy
cm9yKTsKKyAgICB9CisgICAgYm9vbCBmaXJzdERpZFRocm93ID0gZmFsc2U7CisgICAgUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZmlyc3QgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNy
ZWF0ZShhcmdzWzBdLCAmbWVzc2FnZVBvcnRBcnJheVR4LCAmYXJyYXlCdWZmZXJBcnJheVR4LCBm
aXJzdERpZFRocm93KTsKKyAgICBpZiAoZmlyc3REaWRUaHJvdykKKyAgICAgICAgcmV0dXJuIHY4
OjpVbmRlZmluZWQoKTsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA8PSAxKSB7CisgICAgICAgIGlt
cC0+bXVsdGlUcmFuc2Zlckxpc3QoZmlyc3QpOworICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2
ODo6VmFsdWU+KCk7CisgICAgfQorICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9IDIpIHsKKyAgICAg
ICAgaW1wLT5tdWx0aVRyYW5zZmVyTGlzdChmaXJzdCwgbWVzc2FnZVBvcnRBcnJheVR4KTsKKyAg
ICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworICAgIH0KKyAgICBNZXNzYWdl
UG9ydEFycmF5IG1lc3NhZ2VQb3J0QXJyYXlUeHg7CisgICAgQXJyYXlCdWZmZXJBcnJheSBhcnJh
eUJ1ZmZlckFycmF5VHh4OworICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMykgeworICAgICAgICBp
ZiAoIWV4dHJhY3RUcmFuc2ZlcmFibGVzKGFyZ3NbM10sIG1lc3NhZ2VQb3J0QXJyYXlUeHgsIGFy
cmF5QnVmZmVyQXJyYXlUeHgpKQorICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkNvdWxk
IG5vdCBleHRyYWN0IHRyYW5zZmVyYWJsZXMiLCBWOFByb3h5OjpUeXBlRXJyb3IpOworICAgIH0K
KyAgICBib29sIHNlY29uZERpZFRocm93ID0gZmFsc2U7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gc2Vjb25kID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoYXJnc1sy
XSwgJm1lc3NhZ2VQb3J0QXJyYXlUeHgsICZhcnJheUJ1ZmZlckFycmF5VHh4LCBzZWNvbmREaWRU
aHJvdyk7CisgICAgaWYgKHNlY29uZERpZFRocm93KQorICAgICAgICByZXR1cm4gdjg6OlVuZGVm
aW5lZCgpOworICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9IDMpIHsKKyAgICAgICAgaW1wLT5tdWx0
aVRyYW5zZmVyTGlzdChmaXJzdCwgbWVzc2FnZVBvcnRBcnJheVR4LCBzZWNvbmQpOworICAgICAg
ICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CisgICAgfQorICAgIGltcC0+bXVsdGlU
cmFuc2Zlckxpc3QoZmlyc3QsIG1lc3NhZ2VQb3J0QXJyYXlUeCwgc2Vjb25kLCBtZXNzYWdlUG9y
dEFycmF5VHh4KTsKKyAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VJbnRlcm5hbAog
CiBzdGF0aWMgY29uc3QgQmF0Y2hlZEF0dHJpYnV0ZSBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlQXR0cnNbXSA9IHsKQEAgLTExNiw2ICsxOTAsMTEgQEAgc3RhdGljIGNvbnN0IEJh
dGNoZWRBdHRyaWJ1dGUgVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUF0dHJzW10g
PSB7CiAgICAgeyJjYWNoZWRSZWFkb25seVZhbHVlIiwgVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZUludGVybmFsOjpjYWNoZWRSZWFkb25seVZhbHVlQXR0ckdldHRlciwgMCwgMCAv
KiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQp
LCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBp
bnN0YW5jZSAqL30sCiB9OwogCitzdGF0aWMgY29uc3QgQmF0Y2hlZENhbGxiYWNrIFRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWxsYmFja3NbXSA9IHsKKyAgICB7ImFjY2VwdFRy
YW5zZmVyTGlzdCIsIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VJbnRlcm5hbDo6
YWNjZXB0VHJhbnNmZXJMaXN0Q2FsbGJhY2t9LAorICAgIHsibXVsdGlUcmFuc2Zlckxpc3QiLCBU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlSW50ZXJuYWw6Om11bHRpVHJhbnNmZXJM
aXN0Q2FsbGJhY2t9LAorfTsKKwogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4VGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6Y29uc3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODo6QXJn
dW1lbnRzJiBhcmdzKQogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2UuQ29uc3RydWN0b3IiKTsKQEAgLTEyOCwxMiArMjA3LDIxIEBAIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBWOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmNv
bnN0cnVjdG9yQ2FsbGJhY2soCiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAyKQogICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcigiTm90IGVub3VnaCBhcmd1bWVudHMiLCBWOFByb3h5OjpUeXBlRXJy
b3IpOwogICAgIFNUUklOR19UT19WOFBBUkFNRVRFUl9FWENFUFRJT05fQkxPQ0soVjhQYXJhbWV0
ZXI8PiwgaGVsbG8sIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1Vu
ZGVmaW5lZCkpOwotICAgIGJvb2wgdmFsdWVEaWRUaHJvdyA9IGZhbHNlOwotICAgIFJlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVh
dGUoYXJnc1sxXSwgMCwgMCwgdmFsdWVEaWRUaHJvdyk7Ci0gICAgaWYgKHZhbHVlRGlkVGhyb3cp
CisgICAgTWVzc2FnZVBvcnRBcnJheSBtZXNzYWdlUG9ydEFycmF5VHJhbnNmZXJMaXN0OworICAg
IEFycmF5QnVmZmVyQXJyYXkgYXJyYXlCdWZmZXJBcnJheVRyYW5zZmVyTGlzdDsKKyAgICBpZiAo
YXJncy5MZW5ndGgoKSA+IDIpIHsKKyAgICAgICAgaWYgKCFleHRyYWN0VHJhbnNmZXJhYmxlcyhh
cmdzWzJdLCBtZXNzYWdlUG9ydEFycmF5VHJhbnNmZXJMaXN0LCBhcnJheUJ1ZmZlckFycmF5VHJh
bnNmZXJMaXN0KSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJDb3VsZCBub3QgZXh0
cmFjdCB0cmFuc2ZlcmFibGVzIiwgVjhQcm94eTo6VHlwZUVycm9yKTsKKyAgICB9CisgICAgYm9v
bCBkYXRhRGlkVGhyb3cgPSBmYWxzZTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBkYXRhID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoYXJnc1sxXSwgJm1lc3NhZ2VQ
b3J0QXJyYXlUcmFuc2Zlckxpc3QsICZhcnJheUJ1ZmZlckFycmF5VHJhbnNmZXJMaXN0LCBkYXRh
RGlkVGhyb3cpOworICAgIGlmIChkYXRhRGlkVGhyb3cpCiAgICAgICAgIHJldHVybiB2ODo6VW5k
ZWZpbmVkKCk7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPD0gMikgeworICAgICAgICByZXR1cm4g
dG9WOChpbXAtPkNvbnN0cnVjdG9yKGhlbGxvLCBkYXRhKSk7CisgICAgfQogCi0gICAgUmVmUHRy
PFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U+IGltcGwgPSBUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpjcmVhdGUoaGVsbG8sIHZhbHVlKTsKKyAgICBSZWZQdHI8
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT4gaW1wbCA9IFRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2U6OmNyZWF0ZShoZWxsbywgZGF0YSwgbWVzc2FnZVBvcnRBcnJh
eVRyYW5zZmVyTGlzdCk7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gYXJn
cy5Ib2xkZXIoKTsKIAogICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcih3cmFwcGVyLCAm
aW5mbywgaW1wbC5nZXQoKSk7CkBAIC0xNDksOSArMjM3LDEzIEBAIHN0YXRpYyB2ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gQ29uZmlndXJlVjhUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlCiAgICAgdjg6OkxvY2FsPHY4OjpTaWduYXR1cmU+IGRlZmF1bHRTaWduYXR1cmU7CiAg
ICAgZGVmYXVsdFNpZ25hdHVyZSA9IGNvbmZpZ3VyZVRlbXBsYXRlKGRlc2MsICJUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlIiwgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+KCksIFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6aW50ZXJuYWxG
aWVsZENvdW50LAogICAgICAgICBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQXR0
cnMsIFdURl9BUlJBWV9MRU5HVEgoVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUF0
dHJzKSwKLSAgICAgICAgMCwgMCk7CisgICAgICAgIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VDYWxsYmFja3MsIFdURl9BUlJBWV9MRU5HVEgoVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZUNhbGxiYWNrcykpOwogICAgIFVOVVNFRF9QQVJBTShkZWZhdWx0U2lnbmF0
dXJlKTsgLy8gSW4gc29tZSBjYXNlcywgaXQgd2lsbCBub3QgYmUgdXNlZC4KICAgICBkZXNjLT5T
ZXRDYWxsSGFuZGxlcihWOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmNvbnN0
cnVjdG9yQ2FsbGJhY2spOworICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0VGVtcGxhdGU+IGluc3Rh
bmNlID0gZGVzYy0+SW5zdGFuY2VUZW1wbGF0ZSgpOworICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0
VGVtcGxhdGU+IHByb3RvID0gZGVzYy0+UHJvdG90eXBlVGVtcGxhdGUoKTsKKyAgICBVTlVTRURf
UEFSQU0oaW5zdGFuY2UpOyAvLyBJbiBzb21lIGNhc2VzLCBpdCB3aWxsIG5vdCBiZSB1c2VkLgor
ICAgIFVOVVNFRF9QQVJBTShwcm90byk7IC8vIEluIHNvbWUgY2FzZXMsIGl0IHdpbGwgbm90IGJl
IHVzZWQuCiAgICAgCiAKICAgICAvLyBDdXN0b20gdG9TdHJpbmcgdGVtcGxhdGUK
</data>

          </attachment>
      

    </bug>

</bugzilla>