<?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>156293</bug_id>
          
          <creation_ts>2016-04-06 11:00:39 -0700</creation_ts>
          <short_desc>Add WebIDL special operation support: serializer</short_desc>
          <delta_ts>2016-10-14 23:26:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>158113</dependson>
          <blocked>143211</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alejandro G. Castro">alex</reporter>
          <assigned_to name="Alejandro G. Castro">alex</assigned_to>
          <cc>adam.bergkvist</cc>
    
    <cc>andersca</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>pnormand</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1181294</commentid>
    <comment_count>0</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-04-06 11:00:39 -0700</bug_when>
    <thetext>We need the serializer operation support for the WebIDL in order to implement the WebRTC API:

https://github.com/w3c/webrtc-pc/issues/204

We are going to add just the required support for our goals but not the complete serializer support, it will include support for:
   - just the keyword: serializer; It will return all the attributes of in an object.
   - map of entries with the attributes: serializer = {attribute1, attribute2, ...}
   - list of attributes: serializer = [attribute1, attribute2, ...]
   - DOMString and unsigned shor types

It creates a toJSON method that returns the serialized value converted into an ECMAScript value. For more information check the definition of the operation:

http://heycam.github.io/webidl/#idl-serializers

We are modifying already RTCSessionDescription and RTCIceCandidate idls to use the operation, that way we can remove the polyfill we were using in the examples for WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181298</commentid>
    <comment_count>1</comment_count>
      <attachid>275784</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-04-06 11:11:41 -0700</bug_when>
    <thetext>Created attachment 275784
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181300</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-06 11:14:36 -0700</bug_when>
    <thetext>Attachment 275784 did not pass style-queue:


ERROR: Source/WebCore/bindings/scripts/test/ObjC/DOMTestSerializerWithMap.mm:30:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestSerializer.cpp:45:  The parameter name &quot;state&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestSerializer.cpp:138:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestSerializer.cpp:153:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestSerializer.cpp:187:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestSerializer.cpp:204:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestSerializer.cpp:252:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestSerializerWithMap.cpp:45:  The parameter name &quot;state&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestSerializerWithMap.cpp:138:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestSerializerWithMap.cpp:153:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestSerializerWithMap.cpp:187:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestSerializerWithMap.cpp:204:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestSerializerWithMap.cpp:252:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/bindings/scripts/test/ObjC/DOMTestSerializer.mm:30:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 14 in 23 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>1181382</commentid>
    <comment_count>3</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-04-06 13:24:00 -0700</bug_when>
    <thetext>Some random quick thoughts.

It would be good if we could restrict the size of the generated code of ${serializerNativeFunctionName using a helper function, maybe through templates.

To remove the &quot;DOMString/unsigned short&quot; limitation, can we call the js wrapper method directly? Do we want to handle exceptions as well?

Also, I am not sure how serializer exactly works, but what happens if JS scripts override the properties of an object. Should the serializer use the property set by the JS script? If so, JS built-ins might help implementing this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181615</commentid>
    <comment_count>4</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-04-07 02:05:47 -0700</bug_when>
    <thetext>Thanks for the comments.

(In reply to comment #3)
&gt; Some random quick thoughts.
&gt; 
&gt; It would be good if we could restrict the size of the generated code of
&gt; ${serializerNativeFunctionName using a helper function, maybe through
&gt; templates.
&gt;

Ok, I think the part that could be bigger is the loop converting the values to serializable form, maybe I can create a helper to get the string value. I&apos;ll check it.

&gt; To remove the &quot;DOMString/unsigned short&quot; limitation, can we call the js
&gt; wrapper method directly? Do we want to handle exceptions as well?
&gt;

Hrm, maybe I missed that option that would reduce the code, I&apos;ll try to do it, thanks. Also I think maybe we can get rid of the String transformation in case of the numbers.

&gt; Also, I am not sure how serializer exactly works, but what happens if JS
&gt; scripts override the properties of an object. Should the serializer use the
&gt; property set by the JS script? If so, JS built-ins might help implementing
&gt; this.

AFAIK it should use the new values, the only limitation is that they are serializable types, which have rules to serialize them, there is a list in the webidl spec. Adam probably knows better if there is any limitation in case of the WebRTC objects using this but that would be something each specific object should control.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181618</commentid>
    <comment_count>5</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-04-07 02:18:36 -0700</bug_when>
    <thetext>I forgot to mention one point.
If you keep the limitation to number and string, the binding generator should not silently skip the support of other values, it should just fail in some way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182078</commentid>
    <comment_count>6</comment_count>
      <attachid>275784</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-08 00:08:53 -0700</bug_when>
    <thetext>Comment on attachment 275784
Patch

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

&gt; Source/WebCore/ChangeLog:25
&gt; +        Tests: bindings/scripts/test/TestSerializer.idl
&gt; +               bindings/scripts/test/TestSerializerWithMap.idl

It’s good to have binding script tests, but those are not very effective ways to test what the generated code does. We need tests of the actual generated code in the RTCIceCandidate and RTCSessionDescription classes.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:1932
&gt; +        push(@implContent, &quot;EncodedJSValue JSC_HOST_CALL ${serializerNativeFunctionName}(ExecState* state);\n\n&quot;);

Should not have an argument name here in the function declaration. Just ExecState* without a name.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3358
&gt; +    foreach my $attribute (@{$interface-&gt;attributes}) {
&gt; +        my $name = $attribute-&gt;signature-&gt;name;
&gt; +        if (grep $_ eq $name, @{$interface-&gt;serializable-&gt;attributes}) {
&gt; +            my $type = $attribute-&gt;signature-&gt;type;
&gt; +            if ($type eq &quot;DOMString&quot;) {
&gt; +                push(@implContent, &quot;    result-&gt;putDirect(state-&gt;vm(), Identifier::fromString(state, \&quot;${name}\&quot;), jsStringWithCache(state, impl.${name}()));\n&quot;);
&gt; +            } elsif ($type eq &quot;unsigned short&quot;) {
&gt; +                push(@implContent, &quot;    result-&gt;putDirect(state-&gt;vm(), Identifier::fromString(state, \&quot;${name}\&quot;), jsNumber(impl.${name}().value()).toString(state));\n&quot;);
&gt; +            }
&gt; +
&gt; +        }
&gt; +    }

state-&gt;vm() is an operation that has some associated cost; can do it once instead of over and over again?

Calling jsNumber and then toString is an inefficient way to convert a number to a string in JavaScriptCore that unnecessarily converts the number to a JSValue and then back. Should do it a different way.

It’s more efficient to call Identifier::fromString with the VM* than with the ExecState*.

I don’t understand why the code here calls the function value() in the unsigned short case. What class’s value() function is it calling?

Why does this handle only the types DOMString and unsigned short? Worse, there is no error if we see some other type or a missing attribute; we just silently skip putting the string into the new object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182122</commentid>
    <comment_count>7</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-04-08 02:56:51 -0700</bug_when>
    <thetext>
Thanks very much for the review.

(In reply to comment #6)
&gt; Comment on attachment 275784 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=275784&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:25
&gt; &gt; +        Tests: bindings/scripts/test/TestSerializer.idl
&gt; &gt; +               bindings/scripts/test/TestSerializerWithMap.idl
&gt; 
&gt; It’s good to have binding script tests, but those are not very effective
&gt; ways to test what the generated code does. We need tests of the actual
&gt; generated code in the RTCIceCandidate and RTCSessionDescription classes.
&gt; 

Ok, I&apos;ll add tests for that.

&gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:1932
&gt; &gt; +        push(@implContent, &quot;EncodedJSValue JSC_HOST_CALL ${serializerNativeFunctionName}(ExecState* state);\n\n&quot;);
&gt; 
&gt; Should not have an argument name here in the function declaration. Just
&gt; ExecState* without a name.
&gt;

Yep.

&gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3358
&gt; &gt; +    foreach my $attribute (@{$interface-&gt;attributes}) {
&gt; &gt; +        my $name = $attribute-&gt;signature-&gt;name;
&gt; &gt; +        if (grep $_ eq $name, @{$interface-&gt;serializable-&gt;attributes}) {
&gt; &gt; +            my $type = $attribute-&gt;signature-&gt;type;
&gt; &gt; +            if ($type eq &quot;DOMString&quot;) {
&gt; &gt; +                push(@implContent, &quot;    result-&gt;putDirect(state-&gt;vm(), Identifier::fromString(state, \&quot;${name}\&quot;), jsStringWithCache(state, impl.${name}()));\n&quot;);
&gt; &gt; +            } elsif ($type eq &quot;unsigned short&quot;) {
&gt; &gt; +                push(@implContent, &quot;    result-&gt;putDirect(state-&gt;vm(), Identifier::fromString(state, \&quot;${name}\&quot;), jsNumber(impl.${name}().value()).toString(state));\n&quot;);
&gt; &gt; +            }
&gt; &gt; +
&gt; &gt; +        }
&gt; &gt; +    }
&gt; 
&gt; state-&gt;vm() is an operation that has some associated cost; can do it once
&gt; instead of over and over again?
&gt; 

I&apos;ll do it.

&gt; Calling jsNumber and then toString is an inefficient way to convert a number
&gt; to a string in JavaScriptCore that unnecessarily converts the number to a
&gt; JSValue and then back. Should do it a different way.
&gt; 

Right, actually I can basically use the jsNumber, the spec says basically that every number should be a double.

&gt; It’s more efficient to call Identifier::fromString with the VM* than with
&gt; the ExecState*.
&gt; 
&gt; I don’t understand why the code here calls the function value() in the
&gt; unsigned short case. What class’s value() function is it calling?
&gt; 

It is the Optional class, now I wonder if the null case it is correctly checked this way, I&apos;ll check it.

&gt; Why does this handle only the types DOMString and unsigned short? Worse,
&gt; there is no error if we see some other type or a missing attribute; we just
&gt; silently skip putting the string into the new object.

The only reason is they are the ones we need for our WebRTC classes in this point, I&apos;m planning to support at least all the basic types and add error handling for the other situations. We can add all the more complex types support but I had doubts adding that code that could be complex makes sense until it is really used.

Thanks again for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183377</commentid>
    <comment_count>8</comment_count>
      <attachid>276314</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-04-13 04:19:48 -0700</bug_when>
    <thetext>Created attachment 276314
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183378</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-13 04:21:25 -0700</bug_when>
    <thetext>Attachment 276314 did not pass style-queue:


ERROR: Source/WebCore/bindings/scripts/test/ObjC/DOMTestSerializerWithMap.mm:30:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestSerializer.cpp:45:  The parameter name &quot;state&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestSerializer.cpp:138:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestSerializer.cpp:153:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestSerializer.cpp:187:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestSerializer.cpp:204:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestSerializer.cpp:252:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestSerializerWithMap.cpp:45:  The parameter name &quot;state&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestSerializerWithMap.cpp:138:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestSerializerWithMap.cpp:153:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestSerializerWithMap.cpp:187:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestSerializerWithMap.cpp:204:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/bindings/scripts/test/JS/JSTestSerializerWithMap.cpp:252:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/bindings/scripts/test/ObjC/DOMTestSerializer.mm:30:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 14 in 28 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>1183404</commentid>
    <comment_count>10</comment_count>
      <attachid>276314</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-13 08:44:52 -0700</bug_when>
    <thetext>Comment on attachment 276314
Patch

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

I don’t see any tests covering the generated toJSON function, checking that it is enumerable, checking that it appears on the prototype, checking that it can be overridden, etc.

&gt; Source/WebCore/ChangeLog:43
&gt; +        (parseSerializer):
&gt; +        (parseSerializerRest):
&gt; +        (parseSerializationPattern):
&gt; +        (parseSerializationAttributes):
&gt; +        (applyMemberList):
&gt; +        (parseSerializationPatternMap): Deleted.
&gt; +        (parseSerializationPatternList): Deleted.

This list of functions looks quite peculiar without actual comments about what changed in each. And the &quot;Deleted&quot; comments look are even more peculiar since these are just renamed functions, not deleted ones. I know the script generated this, but it’s best to look at these and edit them so that they make sense. It’s easy to think of this machine generated change log as “sacred”, but the intention is that you edit it into something other people will understand.

&gt; Source/WebCore/ChangeLog:57
&gt; +        (WebKit::kit):
&gt; +        (WebKit::core):
&gt; +        (WebKit::wrapTestSerializer):
&gt; +        (webkit_dom_test_serializer_finalize):
&gt; +        (webkit_dom_test_serializer_set_property):
&gt; +        (webkit_dom_test_serializer_get_property):
&gt; +        (webkit_dom_test_serializer_constructor):
&gt; +        (webkit_dom_test_serializer_class_init):
&gt; +        (webkit_dom_test_serializer_init):
&gt; +        (webkit_dom_test_serializer_get_str_attribute):
&gt; +        (webkit_dom_test_serializer_set_str_attribute):
&gt; +        (webkit_dom_test_serializer_get_int_attribute):
&gt; +        (webkit_dom_test_serializer_set_int_attribute):

These lists of function names in expected test result files are not at all useful. Please remove them from the change log. Could also consider teaching our ChangeLog scripts to know not to generate these in the future if you don’t like doing this by hand each time.

&gt; Source/WebCore/ChangeLog:73
&gt; +        (WebKit::kit):
&gt; +        (WebKit::core):
&gt; +        (WebKit::wrapTestSerializerWithMap):
&gt; +        (webkit_dom_test_serializer_with_map_finalize):
&gt; +        (webkit_dom_test_serializer_with_map_set_property):
&gt; +        (webkit_dom_test_serializer_with_map_get_property):
&gt; +        (webkit_dom_test_serializer_with_map_constructor):
&gt; +        (webkit_dom_test_serializer_with_map_class_init):
&gt; +        (webkit_dom_test_serializer_with_map_init):
&gt; +        (webkit_dom_test_serializer_with_map_get_str_attribute):
&gt; +        (webkit_dom_test_serializer_with_map_set_str_attribute):
&gt; +        (webkit_dom_test_serializer_with_map_get_int_attribute):
&gt; +        (webkit_dom_test_serializer_with_map_set_int_attribute):

Ditto.

&gt; Source/WebCore/ChangeLog:99
&gt; +        (WebCore::JSTestSerializerPrototype::create):
&gt; +        (WebCore::JSTestSerializerPrototype::createStructure):
&gt; +        (WebCore::JSTestSerializerPrototype::JSTestSerializerPrototype):
&gt; +        (WebCore::JSTestSerializerConstructor::prototypeForStructure):
&gt; +        (WebCore::JSTestSerializerConstructor::initializeProperties):
&gt; +        (WebCore::JSTestSerializerPrototype::finishCreation):
&gt; +        (WebCore::JSTestSerializer::JSTestSerializer):
&gt; +        (WebCore::JSTestSerializer::createPrototype):
&gt; +        (WebCore::JSTestSerializer::prototype):
&gt; +        (WebCore::JSTestSerializer::destroy):
&gt; +        (WebCore::jsTestSerializerStrAttribute):
&gt; +        (WebCore::jsTestSerializerIntAttribute):
&gt; +        (WebCore::jsTestSerializerConstructor):
&gt; +        (WebCore::setJSTestSerializerConstructor):
&gt; +        (WebCore::setJSTestSerializerStrAttribute):
&gt; +        (WebCore::setJSTestSerializerIntAttribute):
&gt; +        (WebCore::JSTestSerializer::getConstructor):
&gt; +        (WebCore::jsTestSerializerPrototypeFunctionToJSON):
&gt; +        (WebCore::JSTestSerializerOwner::isReachableFromOpaqueRoots):
&gt; +        (WebCore::JSTestSerializerOwner::finalize):
&gt; +        (WebCore::toJSNewlyCreated):
&gt; +        (WebCore::toJS):
&gt; +        (WebCore::JSTestSerializer::toWrapped):

Ditto.

&gt; Source/WebCore/ChangeLog:106
&gt; +        (WebCore::JSTestSerializer::create):
&gt; +        (WebCore::JSTestSerializer::createStructure):
&gt; +        (WebCore::JSTestSerializer::finishCreation):
&gt; +        (WebCore::wrapperOwner):
&gt; +        (WebCore::wrapperKey):
&gt; +        (WebCore::toJS):

Ditto.

&gt; Source/WebCore/ChangeLog:130
&gt; +        (WebCore::JSTestSerializerWithMapPrototype::create):
&gt; +        (WebCore::JSTestSerializerWithMapPrototype::createStructure):
&gt; +        (WebCore::JSTestSerializerWithMapPrototype::JSTestSerializerWithMapPrototype):
&gt; +        (WebCore::JSTestSerializerWithMapConstructor::prototypeForStructure):
&gt; +        (WebCore::JSTestSerializerWithMapConstructor::initializeProperties):
&gt; +        (WebCore::JSTestSerializerWithMapPrototype::finishCreation):
&gt; +        (WebCore::JSTestSerializerWithMap::JSTestSerializerWithMap):
&gt; +        (WebCore::JSTestSerializerWithMap::createPrototype):
&gt; +        (WebCore::JSTestSerializerWithMap::prototype):
&gt; +        (WebCore::JSTestSerializerWithMap::destroy):
&gt; +        (WebCore::jsTestSerializerWithMapStrAttribute):
&gt; +        (WebCore::jsTestSerializerWithMapIntAttribute):
&gt; +        (WebCore::jsTestSerializerWithMapConstructor):
&gt; +        (WebCore::setJSTestSerializerWithMapConstructor):
&gt; +        (WebCore::setJSTestSerializerWithMapStrAttribute):
&gt; +        (WebCore::setJSTestSerializerWithMapIntAttribute):
&gt; +        (WebCore::JSTestSerializerWithMap::getConstructor):
&gt; +        (WebCore::jsTestSerializerWithMapPrototypeFunctionToJSON):
&gt; +        (WebCore::JSTestSerializerWithMapOwner::isReachableFromOpaqueRoots):
&gt; +        (WebCore::JSTestSerializerWithMapOwner::finalize):
&gt; +        (WebCore::toJSNewlyCreated):
&gt; +        (WebCore::toJS):
&gt; +        (WebCore::JSTestSerializerWithMap::toWrapped):

Ditto.

&gt; Source/WebCore/ChangeLog:137
&gt; +        (WebCore::JSTestSerializerWithMap::create):
&gt; +        (WebCore::JSTestSerializerWithMap::createStructure):
&gt; +        (WebCore::JSTestSerializerWithMap::finishCreation):
&gt; +        (WebCore::wrapperOwner):
&gt; +        (WebCore::wrapperKey):
&gt; +        (WebCore::toJS):

Ditto.

&gt; Source/WebCore/ChangeLog:146
&gt; +        (-[DOMTestSerializer dealloc]):
&gt; +        (-[DOMTestSerializer strAttribute]):
&gt; +        (-[DOMTestSerializer setStrAttribute:]):
&gt; +        (-[DOMTestSerializer intAttribute]):
&gt; +        (-[DOMTestSerializer setIntAttribute:]):
&gt; +        (core):
&gt; +        (kit):

Ditto.

&gt; Source/WebCore/ChangeLog:156
&gt; +        (-[DOMTestSerializerWithMap dealloc]):
&gt; +        (-[DOMTestSerializerWithMap strAttribute]):
&gt; +        (-[DOMTestSerializerWithMap setStrAttribute:]):
&gt; +        (-[DOMTestSerializerWithMap intAttribute]):
&gt; +        (-[DOMTestSerializerWithMap setIntAttribute:]):
&gt; +        (core):
&gt; +        (kit):

Ditto.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:1812
&gt; +    my $serializerNativeFunctionName = $codeGenerator-&gt;WK_lcfirst($className) . &quot;Prototype&quot; . &quot;Function&quot; . $codeGenerator-&gt;WK_ucfirst($serializerFunctionName);

Seems a bit peculiar to write &quot;Prototype&quot; . &quot;Function&quot; instead of &quot;PrototypeFunction&quot;.

&gt; Source/WebCore/bindings/scripts/test/TestSerializer.idl:30
&gt; +// This IDL file is for testing the bindings code generator for the
&gt; +// serializer special operation.

Do we really need a separate IDL file? Couldn’t we instead add this to an existing test IDL file?

&gt; Source/WebCore/bindings/scripts/test/TestSerializerWithMap.idl:30
&gt; +// This IDL file is for testing the bindings code generator for the
&gt; +// serializer special operation.

Do we really need a separate IDL file? Couldn’t we instead add this to an existing test IDL file?

&gt; LayoutTests/fast/mediastream/RTCIceCandidate.html:24
&gt; +            shouldBeEqualToString(&apos;JSON.stringify(candidate.toJSON())&apos;, &apos;{\&quot;candidate\&quot;:\&quot;foo\&quot;,\&quot;sdpMid\&quot;:\&quot;bar\&quot;,\&quot;sdpMLineIndex\&quot;:6}&apos;);
&gt; +            candidate.newAttribute = &quot;new value&quot;;
&gt; +            shouldBeEqualToString(&apos;JSON.stringify(candidate.toJSON())&apos;, &apos;{\&quot;candidate\&quot;:\&quot;foo\&quot;,\&quot;sdpMid\&quot;:\&quot;bar\&quot;,\&quot;sdpMLineIndex\&quot;:6}&apos;);
&gt; +            candidate.sdpMLineIndex = &quot;not a number&quot;;
&gt; +            shouldBeEqualToString(&apos;JSON.stringify(candidate.toJSON())&apos;, &apos;{\&quot;candidate\&quot;:\&quot;foo\&quot;,\&quot;sdpMid\&quot;:\&quot;bar\&quot;,\&quot;sdpMLineIndex\&quot;:0}&apos;);
&gt; +            candidate.sdpMid = 7;
&gt; +            shouldBeEqualToString(&apos;JSON.stringify(candidate.toJSON())&apos;, &apos;{\&quot;candidate\&quot;:\&quot;foo\&quot;,\&quot;sdpMid\&quot;:\&quot;7\&quot;,\&quot;sdpMLineIndex\&quot;:0}&apos;);
&gt; +            candidate.sdpMid = null;
&gt; +            shouldBeEqualToString(&apos;JSON.stringify(candidate.toJSON())&apos;, &apos;{\&quot;candidate\&quot;:\&quot;foo\&quot;,\&quot;sdpMid\&quot;:\&quot;null\&quot;,\&quot;sdpMLineIndex\&quot;:0}&apos;);

Is there some way to avoid all the \&quot; in these test strings? This seems like a problem in shouldBeEqualToString. Makes both the test itself and the test output hard to read.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183684</commentid>
    <comment_count>11</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-04-14 03:46:10 -0700</bug_when>
    <thetext>Thanks again for the review.

(In reply to comment #10)
&gt; Comment on attachment 276314 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=276314&amp;action=review
&gt; 
&gt; I don’t see any tests covering the generated toJSON function, checking that
&gt; it is enumerable, checking that it appears on the prototype, checking that
&gt; it can be overridden, etc.
&gt;

I&apos;ll add them, also now that you name it the spec says nothing about them but it does not seem interesting for the user to modify the function so I&apos;m going to avoid the user can delete or modify the function. Do you know if there is any policy or preference about this?

&gt; &gt; Source/WebCore/ChangeLog:43
&gt; &gt; +        (parseSerializer):
&gt; &gt; +        (parseSerializerRest):
&gt; &gt; +        (parseSerializationPattern):
&gt; &gt; +        (parseSerializationAttributes):
&gt; &gt; +        (applyMemberList):
&gt; &gt; +        (parseSerializationPatternMap): Deleted.
&gt; &gt; +        (parseSerializationPatternList): Deleted.
&gt; 
&gt; This list of functions looks quite peculiar without actual comments about
&gt; what changed in each. And the &quot;Deleted&quot; comments look are even more peculiar
&gt; since these are just renamed functions, not deleted ones. I know the script
&gt; generated this, but it’s best to look at these and edit them so that they
&gt; make sense. It’s easy to think of this machine generated change log as
&gt; “sacred”, but the intention is that you edit it into something other people
&gt; will understand.
&gt;

Yep, I&apos;ll add comments to that and remove the other functions.

&gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:1812
&gt; &gt; +    my $serializerNativeFunctionName = $codeGenerator-&gt;WK_lcfirst($className) . &quot;Prototype&quot; . &quot;Function&quot; . $codeGenerator-&gt;WK_ucfirst($serializerFunctionName);
&gt; 
&gt; Seems a bit peculiar to write &quot;Prototype&quot; . &quot;Function&quot; instead of
&gt; &quot;PrototypeFunction&quot;.
&gt;

Right.

&gt; &gt; Source/WebCore/bindings/scripts/test/TestSerializer.idl:30
&gt; &gt; +// This IDL file is for testing the bindings code generator for the
&gt; &gt; +// serializer special operation.
&gt; 
&gt; Do we really need a separate IDL file? Couldn’t we instead add this to an
&gt; existing test IDL file?
&gt;

I can try to use an existing IDL tests.

&gt; &gt; LayoutTests/fast/mediastream/RTCIceCandidate.html:24
&gt; &gt; +            shouldBeEqualToString(&apos;JSON.stringify(candidate.toJSON())&apos;, &apos;{\&quot;candidate\&quot;:\&quot;foo\&quot;,\&quot;sdpMid\&quot;:\&quot;bar\&quot;,\&quot;sdpMLineIndex\&quot;:6}&apos;);
&gt; &gt; +            candidate.newAttribute = &quot;new value&quot;;
&gt; &gt; +            shouldBeEqualToString(&apos;JSON.stringify(candidate.toJSON())&apos;, &apos;{\&quot;candidate\&quot;:\&quot;foo\&quot;,\&quot;sdpMid\&quot;:\&quot;bar\&quot;,\&quot;sdpMLineIndex\&quot;:6}&apos;);
&gt; &gt; +            candidate.sdpMLineIndex = &quot;not a number&quot;;
&gt; &gt; +            shouldBeEqualToString(&apos;JSON.stringify(candidate.toJSON())&apos;, &apos;{\&quot;candidate\&quot;:\&quot;foo\&quot;,\&quot;sdpMid\&quot;:\&quot;bar\&quot;,\&quot;sdpMLineIndex\&quot;:0}&apos;);
&gt; &gt; +            candidate.sdpMid = 7;
&gt; &gt; +            shouldBeEqualToString(&apos;JSON.stringify(candidate.toJSON())&apos;, &apos;{\&quot;candidate\&quot;:\&quot;foo\&quot;,\&quot;sdpMid\&quot;:\&quot;7\&quot;,\&quot;sdpMLineIndex\&quot;:0}&apos;);
&gt; &gt; +            candidate.sdpMid = null;
&gt; &gt; +            shouldBeEqualToString(&apos;JSON.stringify(candidate.toJSON())&apos;, &apos;{\&quot;candidate\&quot;:\&quot;foo\&quot;,\&quot;sdpMid\&quot;:\&quot;null\&quot;,\&quot;sdpMLineIndex\&quot;:0}&apos;);
&gt; 
&gt; Is there some way to avoid all the \&quot; in these test strings? This seems like
&gt; a problem in shouldBeEqualToString. Makes both the test itself and the test
&gt; output hard to read.

Not sure if wen can avoid escaping the quotation marks in this case, I&apos;ll check if I can improve that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183694</commentid>
    <comment_count>12</comment_count>
      <attachid>276390</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-04-14 05:09:41 -0700</bug_when>
    <thetext>Created attachment 276390
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183783</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-14 12:09:06 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; the spec says nothing about them

Here’s what I found: &lt;https://heycam.github.io/webidl/#es-serializer&gt;.

This going into detail about the property, its attributes, the location of the property, the the behavior of the function. We should test all that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183784</commentid>
    <comment_count>14</comment_count>
      <attachid>276390</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-14 12:10:48 -0700</bug_when>
    <thetext>Comment on attachment 276390
Patch

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

&gt; LayoutTests/fast/mediastream/RTCIceCandidate.html:19
&gt; +            shouldBeFalse(&apos;Object.getOwnPropertyDescriptor(RTCIceCandidate.prototype, &quot;toJSON&quot;).writable&apos;);
&gt; +            shouldBeFalse(&apos;Object.getOwnPropertyDescriptor(RTCIceCandidate.prototype, &quot;toJSON&quot;).configurable&apos;);

Specification says both of these should be true.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184028</commentid>
    <comment_count>15</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-04-14 23:56:12 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Comment on attachment 276390 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=276390&amp;action=review
&gt; 
&gt; &gt; LayoutTests/fast/mediastream/RTCIceCandidate.html:19
&gt; &gt; +            shouldBeFalse(&apos;Object.getOwnPropertyDescriptor(RTCIceCandidate.prototype, &quot;toJSON&quot;).writable&apos;);
&gt; &gt; +            shouldBeFalse(&apos;Object.getOwnPropertyDescriptor(RTCIceCandidate.prototype, &quot;toJSON&quot;).configurable&apos;);
&gt; 
&gt; Specification says both of these should be true.

Thanks very much for pointing it out, I guess this means our code using the result of the function in webrtc classes has to deal with these situations and test them very carefully.

I&apos;ll change the patch accordingly and send it again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184483</commentid>
    <comment_count>16</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-04-17 10:01:09 -0700</bug_when>
    <thetext>Given the restrictions of the current approach, it might be good to think of leaving the meat of the implementation to the DOM class itself. That would remove issues like non-default getters, inheritance, defaut serializer...

The binding code could be made responsible to create a JSObject and pass it to the DOM method as a parameter.
If it is preferred to keep some separation between JSC and WebCore, something like a Writable WebCore::Dictionary could be introduced.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184692</commentid>
    <comment_count>17</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-04-18 09:08:50 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Given the restrictions of the current approach, it might be good to think of
&gt; leaving the meat of the implementation to the DOM class itself. That would
&gt; remove issues like non-default getters, inheritance, defaut serializer...
&gt; 
&gt; The binding code could be made responsible to create a JSObject and pass it
&gt; to the DOM method as a parameter.
&gt; If it is preferred to keep some separation between JSC and WebCore,
&gt; something like a Writable WebCore::Dictionary could be introduced.

I have not experience enough in this code to know if this is a better approach, if some reviewer of this part can comment on it that would be helpful. I&apos;ll try to check the limitations you are pointing out anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184703</commentid>
    <comment_count>18</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-04-18 09:56:47 -0700</bug_when>
    <thetext>Here are some more details about what I was proposing.

The following cases might break the generated code:
- conditional attributes (Conditional=...)
- getter raising exception (GetterRaisesException)
- attribute whose DOM getter is named differenty (ImplementedAs)
- custom and/or cacheable attributes (Custom, Cacheable)
- getter needing dedicated parameters (CallWith=...)

One possibility is to make the binding generator die whenever a serialized attribute has IDL &quot;extended attributes&quot;.

But we could also just have serializer in the WebIDL as a shorthand for toJSON. Similarly to promise-based methods, the binding generator would generate a toJSON method that would take an additional &quot;object&quot; parameter.
EncodedJSValue jsXXToJSON(ExecState* state)
{
    JSValue thisValue = state-&gt;thisValue();
    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
    JSObject* object = constructEmptyObject(state);
    ...
    castedThis-&gt;wrapped().toJSON(*object); // with additional parameters if needed.
    return JSValue::encode(object);
}

The DOM class would take a JSObject&amp; or a WritableDictionary&amp; if we prefer to keep separation between WebCore and JSC, something like:
void toJSON(WritableDictionary&amp; dictionary)
{
    dictionary.add(&quot;key&quot;, value);
    ...
}
WritableDictionary would be made responsible to convert DOM typed values as JSC::JSValue.
I am not sure what is the exact error handling, can add/putDirect fail?

The support of serializing inherited attributes would be done at the DOM class, by calling BaseClass::toJSON.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184712</commentid>
    <comment_count>19</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-04-18 10:14:15 -0700</bug_when>
    <thetext>Thanks very much for the detailed explanation, I understand what you are proposing.

I&apos;m open to implement any solution you think it fits better in this case, I just had doubts about the interest of supporting this IDL completely considering it has never been used until now, and adding complexity or code that will not be used does not seem very interesting to me.

I mean, the javascript API method must be complete robust and follow spec, but I&apos;m not sure about the interest in supporting the whole WebIDL spec in the script, Darin what&apos;s your opinion about this?


(In reply to comment #18)
&gt; Here are some more details about what I was proposing.
&gt; 
&gt; The following cases might break the generated code:
&gt; - conditional attributes (Conditional=...)
&gt; - getter raising exception (GetterRaisesException)
&gt; - attribute whose DOM getter is named differenty (ImplementedAs)
&gt; - custom and/or cacheable attributes (Custom, Cacheable)
&gt; - getter needing dedicated parameters (CallWith=...)
&gt; 
&gt; One possibility is to make the binding generator die whenever a serialized
&gt; attribute has IDL &quot;extended attributes&quot;.
&gt;

I understand, I agree it seems best option to make the generator die in this case for those idls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184726</commentid>
    <comment_count>20</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-04-18 10:38:31 -0700</bug_when>
    <thetext>The simplest approach might be to let the binding generator generate code similar to &quot;[Custom] void toJSON()&quot; when the serializer keyword is found in the IDL. Developpers would then have to implement JSXX::toJSON(ExecState*).

If serializer becomes popular, some refactoring can be made to improve/automate the support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185485</commentid>
    <comment_count>21</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-04-20 11:43:59 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; The simplest approach might be to let the binding generator generate code
&gt; similar to &quot;[Custom] void toJSON()&quot; when the serializer keyword is found in
&gt; the IDL. Developpers would then have to implement JSXX::toJSON(ExecState*).
&gt; 
&gt; If serializer becomes popular, some refactoring can be made to
&gt; improve/automate the support.

That is a good point, after reviewing the spec I&apos;ve read the maps and list support is not currently correct, not in the IDL but in the toJSON API, we have to create a map or list with the serialized values converted to jsvalue. Not adding the support to the IDL is one thing but I do not think we should have the API returning wrong values in those cases even if they are not currently used. So probably a helper like the one you proposed could be the best option after all to do the serialization considering it has very specific rules.

I&apos;ll add that support and check the best approach, thanks again for the comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185795</commentid>
    <comment_count>22</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-21 08:39:58 -0700</bug_when>
    <thetext>A few thoughts:

1) More bindings code in the DOM classes themselves is the *wrong* direction. In fact, I think we should be eliminating uses of Dictionary, JSDictionary, and possibly ArrayValue in the C++ DOM. We should have the bindings do more of the work for these, and also for enums. Having code in the DOM working directly with these classes seems to be an anti-pattern to me. Long ago we had a blurring of the boundary between the bindings and the DOM, and with these new IDL features like enums and dictionaries, I think we have not done as thorough a job of that as we once did. In the V8 engine era there was more focus on independence from details of the JavaScript engine, which I think is a non-goal for the project now and was before V8, and not enough focus on independence of the DOM itself from the bindings when possible (some cases where it is not).

2) We want to keep hand-written code to a minimum. Any time we have to fall back on [Custom] or [CustomGetter] it has a long term cost. In fact, a general project should be to eliminate every custom binding, one at a time, by enhancing the bindings generator and the classes and functions that it uses.

3) The code generator should generate as little of the code as possible. Instead our aim should be to use the best techniques in C++ to overload for multiple types and use templates and the like. Code generated that checks types and generates different code for each type should be minimized. One way of doing this is to write custom binding code first, then streamline that code as much as possible, and only then write the code generator bits. One of the best techniques is inline functions that ignore parameters as needed, assuming the parameters are values that are already at hand and don’t need to be computed in an expensive way.

4) New features in the code generator should be factored so they work with existing features as much as possible, rather than being completely separate. This can sometimes mitigate some of the problems Youenn is taking about.

5) Geoff Garen told me that we should be looking eventually to replace today’s ExecState (actually a call frame pointer) with the global object pointer as the thing we pass around in the JavaScript runtime. This could increase efficiency and also simplify code a bit.

It’s not critical for the code generator to fail when it generates the wrong code, though. While it would be nice, the code generator has never been fully general purpose, just good enough to get the bindings right for the classes we actually have.

This patch seems a bit too specific; code for exactly two specific types that can be serialized is a bad sign.

Not sure if this answers all the outstanding questions you have about the direction we’d like to go.

The people most interested in the future of bindings right now, at least at Apple, seem to be Chris Dumez, Sam Weinig, Geoff Garen, and me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185815</commentid>
    <comment_count>23</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-04-21 09:22:27 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; A few thoughts:
&gt; 
&gt; [...]
&gt; It’s not critical for the code generator to fail when it generates the wrong
&gt; code, though. While it would be nice, the code generator has never been
&gt; fully general purpose, just good enough to get the bindings right for the
&gt; classes we actually have.
&gt; 
&gt; This patch seems a bit too specific; code for exactly two specific types
&gt; that can be serialized is a bad sign.
&gt; 
&gt; Not sure if this answers all the outstanding questions you have about the
&gt; direction we’d like to go.
&gt; 

I does answer most of the questions, thanks very much for the detailed description of the current situation in this part of the code.

The last version of the patch upload already uses NativeToJSValue function so it basically supports every conversion that function currently supports, so there is no limitation to the 2 types we need anymore. But that function gets the JSValue, which is what we want usually but not sure if it does that for the most complex situations, such as the serialization of maps and lists, it needs to traverse the map or list and convert to JS value the serialized value.

I think this fits with new features using existing ones and hopefully conversions of types is the same in every spec so that we can use the same function. Considering the current situation I feel best option to make us feel safe is to create a test with an idl that uses every type and serializes it, that would explain the situation and even every decision we want to make about how we implement the spec.

Thanks again for the helpful comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187764</commentid>
    <comment_count>24</comment_count>
      <attachid>277482</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-04-27 09:18:23 -0700</bug_when>
    <thetext>Created attachment 277482
Proposed patch

New iteration of the patch addressing the issues found in the last ones, namely:
   - Now the implementation supports all the types supported by NativeToJSValue in the perl script, which means we are converting to JSValue like every other API in webkit. This way we use existing features in the generator, and code already there to control the transformation.
   - Added tests to check the location of the API is just in the class and not inherited, this API is just inherited for some kind of global objects definition that apparently we do not support in the WebIDL.
   - Checked the map and list implementation, added tests to check the properties of the generated elements in the serialized map.
   - Added an informative message and kill the script when someone tries to create a serializer that returns a list, we are not currently supporting this.

Only point I think I&apos;ve missed regarding testing is creating a fake idl but I could not find the test harness to create that, so not sure if that is just interesting.

Thanks for the comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1187915</commentid>
    <comment_count>25</comment_count>
      <attachid>277482</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-04-27 12:43:48 -0700</bug_when>
    <thetext>Comment on attachment 277482
Proposed patch

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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3330
&gt; +            my $functionString = &quot;impl.${name}()&quot;;

Maybe this is good enough as a first step.
If we go that road, see below for an alternative.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3332
&gt; +            $signature-&gt;extendedAttributes({});

Why not reusing the extended attributes of the attribute?

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3333
&gt; +            $signature-&gt;isNullable(1);

Should not the nullability be the same as the attribute?

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3335
&gt; +            push(@implContent, &quot;    result-&gt;putDirect(vm, Identifier::fromString(&amp;vm, \&quot;${name}\&quot;), &quot; . NativeToJSValue($signature, 1, $interfaceName, $functionString, $thisObject) . &quot;);\n&quot;);

I still wonder whether we could not reuse code already generated for attribute getters.
For instance the code generated is something like:

EncodedJSValue jsFetchResponseType(ExecState* state, EncodedJSValue thisValue, PropertyName)
{
    UNUSED_PARAM(state);
    UNUSED_PARAM(thisValue);
    JSValue decodedThisValue = JSValue::decode(thisValue);
    auto* castedThis = jsDynamicCast&lt;JSFetchResponse*&gt;(decodedThisValue);
    if (UNLIKELY(!castedThis)) {
        return throwGetterTypeError(*state, &quot;FetchResponse&quot;, &quot;type&quot;);
    }
    auto&amp; impl = castedThis-&gt;wrapped();
    JSValue result = jsStringWithCache(state, impl.type());
    return JSValue::encode(result);
}

If we could split it (like done for custom attributes) in something like:

EncodedJSValue jsFetchResponseType(ExecState* state, EncodedJSValue thisValue, PropertyName)
{
    UNUSED_PARAM(state);
    UNUSED_PARAM(thisValue);
    JSValue decodedThisValue = JSValue::decode(thisValue);
    auto* castedThis = jsDynamicCast&lt;JSFetchResponse*&gt;(decodedThisValue);
    if (UNLIKELY(!castedThis)) {
        return throwGetterTypeError(*state, &quot;FetchResponse&quot;, &quot;type&quot;);
    }
    return JSValue::encode(jsFetchResponseTypeGetter(*state, *castedThis));
}

JSValue jsFetchResponseTypeGetter(ExecState&amp;, JSFetchResponse&amp; castedThis)
{
    auto&amp; impl = castedThis-&gt;wrapped();
    JSValue result = jsStringWithCache(state, impl.type());
    return result;
}

Then, the serializing code could directly use jsFetchResponseTypeGetter instead of &quot;impl.type()&quot;.
This would solve some of the limitations I pointed out previously.

I must say I do not know how straightforward is the splitting.
So maybe &quot;impl.type()&quot; is good enough initially.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188195</commentid>
    <comment_count>26</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-04-28 03:25:58 -0700</bug_when>
    <thetext>
Thanks very much for the review.

(In reply to comment #25)
&gt; Comment on attachment 277482 [details]
&gt; Proposed patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=277482&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3330
&gt; &gt; +            my $functionString = &quot;impl.${name}()&quot;;
&gt; 
&gt; Maybe this is good enough as a first step.
&gt; If we go that road, see below for an alternative.
&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3332
&gt; &gt; +            $signature-&gt;extendedAttributes({});
&gt; 
&gt; Why not reusing the extended attributes of the attribute?
&gt;

Yep, I agree, I&apos;ll replace it.

&gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3333
&gt; &gt; +            $signature-&gt;isNullable(1);
&gt; 
&gt; Should not the nullability be the same as the attribute?
&gt;

I think you are right, I&apos;ll change it.

&gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3335
&gt; &gt; +            push(@implContent, &quot;    result-&gt;putDirect(vm, Identifier::fromString(&amp;vm, \&quot;${name}\&quot;), &quot; . NativeToJSValue($signature, 1, $interfaceName, $functionString, $thisObject) . &quot;);\n&quot;);
&gt; 
&gt; I still wonder whether we could not reuse code already generated for
&gt; attribute getters.
&gt; For instance the code generated is something like:
&gt; 
&gt; EncodedJSValue jsFetchResponseType(ExecState* state, EncodedJSValue
&gt; thisValue, PropertyName)
&gt; {
&gt;     UNUSED_PARAM(state);
&gt;     UNUSED_PARAM(thisValue);
&gt;     JSValue decodedThisValue = JSValue::decode(thisValue);
&gt;     auto* castedThis = jsDynamicCast&lt;JSFetchResponse*&gt;(decodedThisValue);
&gt;     if (UNLIKELY(!castedThis)) {
&gt;         return throwGetterTypeError(*state, &quot;FetchResponse&quot;, &quot;type&quot;);
&gt;     }
&gt;     auto&amp; impl = castedThis-&gt;wrapped();
&gt;     JSValue result = jsStringWithCache(state, impl.type());
&gt;     return JSValue::encode(result);
&gt; }
&gt; 
&gt; If we could split it (like done for custom attributes) in something like:
&gt; 
&gt; EncodedJSValue jsFetchResponseType(ExecState* state, EncodedJSValue
&gt; thisValue, PropertyName)
&gt; {
&gt;     UNUSED_PARAM(state);
&gt;     UNUSED_PARAM(thisValue);
&gt;     JSValue decodedThisValue = JSValue::decode(thisValue);
&gt;     auto* castedThis = jsDynamicCast&lt;JSFetchResponse*&gt;(decodedThisValue);
&gt;     if (UNLIKELY(!castedThis)) {
&gt;         return throwGetterTypeError(*state, &quot;FetchResponse&quot;, &quot;type&quot;);
&gt;     }
&gt;     return JSValue::encode(jsFetchResponseTypeGetter(*state, *castedThis));
&gt; }
&gt; 
&gt; JSValue jsFetchResponseTypeGetter(ExecState&amp;, JSFetchResponse&amp; castedThis)
&gt; {
&gt;     auto&amp; impl = castedThis-&gt;wrapped();
&gt;     JSValue result = jsStringWithCache(state, impl.type());
&gt;     return result;
&gt; }
&gt; 
&gt; Then, the serializing code could directly use jsFetchResponseTypeGetter
&gt; instead of &quot;impl.type()&quot;.
&gt; This would solve some of the limitations I pointed out previously.
&gt;
&gt; I must say I do not know how straightforward is the splitting.
&gt; So maybe &quot;impl.type()&quot; is good enough initially.

Really good point, I&apos;ll try that to check if it is possible, I agree it is really a good idea to try to reuse as much code as possible from the current implementation.

Thanks again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195846</commentid>
    <comment_count>27</comment_count>
      <attachid>279653</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-05-24 08:41:38 -0700</bug_when>
    <thetext>Created attachment 279653
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195849</commentid>
    <comment_count>28</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-05-24 08:47:33 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; Created attachment 279653 [details]
&gt; Patch

I&apos;ve added the proposal from youenn, the getter method is splitted in two and we are reusing the part extracting the value in the serializer. This made the patch a little bit more complex for the GenerateImplementation function in the script. Main issue was to check what parameters we needed for the getter, the implementation I did it is generating the function in an array and checking the array to create the function prototype, that is added later to the main contents array.

Thanks for your time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195855</commentid>
    <comment_count>29</comment_count>
      <attachid>279654</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-05-24 09:00:09 -0700</bug_when>
    <thetext>Created attachment 279654
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195960</commentid>
    <comment_count>30</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-05-24 12:24:36 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; Created attachment 279654 [details]
&gt; Patch

The generated code looks good to me.
Below some additional improvements that can help simplify the generation.

It might indeeed be good to separate the handling of static attributes from regular attributes.

For regular attributes, the generated helper function could always have the same prototype, taking a JSC::ExecState and a JSXX*.
UNUSED_PARAM(state) could be moved in the helper function to handle the case where it is not used.
That may simplify the generation script.
That may also allow templatize the code found in jsXX getter.

To limit the changes in the script, you might also want to consider the possibility to declare the helper function, then generate the jsXX getter, then generate the helper function, something like:

static JSC::JSValue jsDOMClassAttributeGetter(JSC::ExecState*, JSDOMClass*);
JSC::EncodedJSValue jsDOMClassAttribute(JSC::ExecState* state, JSC::EncodedJSValue thisValue, PropertyName, JSC::JSObject*)
{
  // Generic code that could be put in a template at some point?  (in a separate patch I guess)
  JSValue decodedThisValue = JSValue::decode(thisValue);
  auto* castedThis = jsDynamicCast&lt;JSDOMClass&gt;decodedThisValue);
  if (UNLIKELY(!castedThis))
    return throwGetterTypeError(*state, &quot;DOMClass&quot;, &quot;attribute&quot;);
  return JSValue::encode(jsDOMClassAttributeGetter(state, castedThis));
}

static inline JSC::JSValue jsDOMClassAttributeGetter(JSC::ExecState* state, JSDOMClass* castedThis)
{
  UNUSED_PARAM(state);
  ...
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196220</commentid>
    <comment_count>31</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-05-24 23:24:54 -0700</bug_when>
    <thetext>Thanks again for the review.

(In reply to comment #30)
&gt; (In reply to comment #29)
&gt; &gt; Created attachment 279654 [details]
&gt; &gt; Patch
&gt; 
&gt; The generated code looks good to me.
&gt; Below some additional improvements that can help simplify the generation.
&gt; 
&gt; It might indeeed be good to separate the handling of static attributes from
&gt; regular attributes.
&gt; 
&gt; For regular attributes, the generated helper function could always have the
&gt; same prototype, taking a JSC::ExecState and a JSXX*.
&gt; UNUSED_PARAM(state) could be moved in the helper function to handle the case
&gt; where it is not used.
&gt; That may simplify the generation script.
&gt; That may also allow templatize the code found in jsXX getter.
&gt; 

Good point, yeah, this could help the messiest part in the generator, I&apos;ll try it. I have concerns because last changes becuase this is a small part of the IDL and I wouldn&apos;t like to create more complexity in the generator.

&gt; To limit the changes in the script, you might also want to consider the
&gt; possibility to declare the helper function, then generate the jsXX getter,
&gt; then generate the helper function, something like:
&gt; 
&gt; static JSC::JSValue jsDOMClassAttributeGetter(JSC::ExecState*, JSDOMClass*);
&gt; JSC::EncodedJSValue jsDOMClassAttribute(JSC::ExecState* state,
&gt; JSC::EncodedJSValue thisValue, PropertyName, JSC::JSObject*)
&gt; {
&gt;   // Generic code that could be put in a template at some point?  (in a
&gt; separate patch I guess)
&gt;   JSValue decodedThisValue = JSValue::decode(thisValue);
&gt;   auto* castedThis = jsDynamicCast&lt;JSDOMClass&gt;decodedThisValue);
&gt;   if (UNLIKELY(!castedThis))
&gt;     return throwGetterTypeError(*state, &quot;DOMClass&quot;, &quot;attribute&quot;);
&gt;   return JSValue::encode(jsDOMClassAttributeGetter(state, castedThis));
&gt; }
&gt; 
&gt; static inline JSC::JSValue jsDOMClassAttributeGetter(JSC::ExecState* state,
&gt; JSDOMClass* castedThis)
&gt; {
&gt;   UNUSED_PARAM(state);
&gt;   ...
&gt; }

Ok, if we can avoid changing the prototype it could make the trick, I&apos;ll test it after modifying the 

Thanks again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196267</commentid>
    <comment_count>32</comment_count>
      <attachid>279753</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-05-25 03:38:37 -0700</bug_when>
    <thetext>Created attachment 279753
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196307</commentid>
    <comment_count>33</comment_count>
      <attachid>279760</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-05-25 06:00:50 -0700</bug_when>
    <thetext>Created attachment 279760
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196325</commentid>
    <comment_count>34</comment_count>
      <attachid>279760</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-05-25 07:18:56 -0700</bug_when>
    <thetext>Comment on attachment 279760
Patch

The patch keeps improving :)

I am wondering what others think about the handling of static attributes though.


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

&gt; Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.cpp:198
&gt; +JSValue jsTestGlobalObjectEnabledAtRuntimeAttributeGetter(ExecState* state, JSTestGlobalObject* castedThis)

castedThis name may be changed to thisObject.
That can be done in a follow-up patch.

&gt; Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp:412
&gt; +JSValue jsTestInterfaceConstructorImplementsStaticReadOnlyAttrGetter(ExecState* state, JSTestInterface* castedThis);

I would expect static attribute getter prototype to take only the state parameter, not castedThis.
This might simplify the generation so maybe this is acceptable as a first step.
Is there any other reason to have it?

&gt; Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp:421
&gt; +    return JSValue::encode(jsTestInterfaceConstructorImplementsStaticReadOnlyAttrGetter(state, castedThis));

I would expect these 3 lines to be just one:
return JSValue::encode(jsTestInterfaceConstructorImplementsStaticReadOnlyAttrGetter(state));

If we keep the current prototype, we would go with something like:
return JSValue::encode(jsTestInterfaceConstructorImplementsStaticReadOnlyAttrGetter(state, nullptr));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196352</commentid>
    <comment_count>35</comment_count>
      <attachid>279760</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-25 09:14:57 -0700</bug_when>
    <thetext>Comment on attachment 279760
Patch

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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2094
&gt; +    if ($interface-&gt;serializable) {
&gt; +        push(@implContent, &quot;EncodedJSValue JSC_HOST_CALL ${serializerNativeFunctionName}(ExecState*);\n\n&quot;);
&gt; +    }

Would be nice to use the single-line if style that the code below uses.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2556
&gt; +            push(@implContent, &quot;JSValue ${getFunctionName}Getter(ExecState* state, ${className}* castedThis);\n\n&quot;);

Since this is just a declaration, it should not include the name “state”. Both of these arguments should be references rather than pointers. As Youenn said, I don’t think castedThis is the right name for this. I agree that this should be thisObject.

But also, why are we doing this unconditionally? I don’t understand why we want to change this for cases where there is no serializer.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2571
&gt; +            push(@implContent, &quot;    JSValue decodedThisValue = JSValue::decode(thisValue);\n&quot;);
&gt; +            my $castingFunction = $interface-&gt;extendedAttributes-&gt;{&quot;CustomProxyToJSObject&quot;} ? &quot;to${className}&quot; : GetCastingHelperForThisObject($interface);
&gt; +            if ($interface-&gt;extendedAttributes-&gt;{&quot;ImplicitThis&quot;}) {
&gt; +                push(@implContent, &quot;    auto* castedThis = decodedThisValue.isUndefinedOrNull() ? $castingFunction(state-&gt;thisValue().toThis(state, NotStrictMode)) : $castingFunction(decodedThisValue);\n&quot;);
&gt; +            } else {
&gt; +                push(@implContent, &quot;    auto* castedThis = $castingFunction(decodedThisValue);\n&quot;);
&gt; +            }

Seems like a bad idea to do this extra work in cases where the values won’t be used. I don’t understand the rationale here.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3264
&gt; +    if ($interface-&gt;serializable) {
&gt; +        GenerateSerializerFunction($interface, $interfaceName, $className, $serializerFunctionName, $serializerNativeFunctionName);
&gt; +    }

The one line if form would be better.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3486
&gt; +    push(@implContent, &quot;    JSValue thisValue = state-&gt;thisValue();\n&quot;);
&gt; +    push(@implContent, &quot;    auto castedThis = jsDynamicCast&lt;JS$interfaceName*&gt;(thisValue);\n&quot;);

Don’t think we need the local variable named thisValue here.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3490
&gt; +    push(@implContent, &quot;    JSObject* result = constructEmptyObject(state);\n&quot;);

Would be better to write auto*.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3499
&gt; +    push(@implContent, &quot;\n    return JSValue::encode(result);\n&quot;);

I don’t think we need the extra blank line here. I would omit the \n at the start of this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196658</commentid>
    <comment_count>36</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-05-25 23:13:43 -0700</bug_when>
    <thetext>Thanks for the review.

(In reply to comment #34)
&gt; Comment on attachment 279760 [details]
&gt; Patch
&gt; 
&gt; The patch keeps improving :)
&gt; 
&gt; I am wondering what others think about the handling of static attributes
&gt; though.
&gt; 

The complete solution for adapted prototypes is in previous patches, it makes the script more complex but adapts the prototype to avoid unused parameters. I&apos;m afraid if we try to cover just some cases we could end up with an if clause that has to follow the logic that controls what code needs more parameters to extract the value, it seems complex to maintain. After your suggestion of taking advantage of the UNUSED I tried this option and I like it better to avoid making the generator more complex, the UNUSED seems something common in the current solution. But anyway, I&apos;m not expert in this code so open to use the solution you think it is best.

&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=279760&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.cpp:198
&gt; &gt; +JSValue jsTestGlobalObjectEnabledAtRuntimeAttributeGetter(ExecState* state, JSTestGlobalObject* castedThis)
&gt; 
&gt; castedThis name may be changed to thisObject.
&gt; That can be done in a follow-up patch.
&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp:412
&gt; &gt; +JSValue jsTestInterfaceConstructorImplementsStaticReadOnlyAttrGetter(ExecState* state, JSTestInterface* castedThis);
&gt; 
&gt; I would expect static attribute getter prototype to take only the state
&gt; parameter, not castedThis.
&gt; This might simplify the generation so maybe this is acceptable as a first
&gt; step.
&gt; Is there any other reason to have it?
&gt; 

Nop, just followed the suggestion to take advantage of the UNUSED and make the generation simpler.

&gt; &gt; Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp:421
&gt; &gt; +    return JSValue::encode(jsTestInterfaceConstructorImplementsStaticReadOnlyAttrGetter(state, castedThis));
&gt; 
&gt; I would expect these 3 lines to be just one:
&gt; return
&gt; JSValue::
&gt; encode(jsTestInterfaceConstructorImplementsStaticReadOnlyAttrGetter(state));
&gt; 
&gt; If we keep the current prototype, we would go with something like:
&gt; return
&gt; JSValue::
&gt; encode(jsTestInterfaceConstructorImplementsStaticReadOnlyAttrGetter(state,
&gt; nullptr));

I&apos;ll check it, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196663</commentid>
    <comment_count>37</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-05-25 23:37:01 -0700</bug_when>
    <thetext>Thanks for the review.

(In reply to comment #35)
&gt; Comment on attachment 279760 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=279760&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2094
&gt; &gt; +    if ($interface-&gt;serializable) {
&gt; &gt; +        push(@implContent, &quot;EncodedJSValue JSC_HOST_CALL ${serializerNativeFunctionName}(ExecState*);\n\n&quot;);
&gt; &gt; +    }
&gt; 
&gt; Would be nice to use the single-line if style that the code below uses.
&gt;

Right.

&gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2556
&gt; &gt; +            push(@implContent, &quot;JSValue ${getFunctionName}Getter(ExecState* state, ${className}* castedThis);\n\n&quot;);
&gt; Would be nice to use the single-line if style that the code below uses.

&gt; Since this is just a declaration, it should not include the name “state”.
&gt; Both of these arguments should be references rather than pointers. As Youenn
&gt; said, I don’t think castedThis is the right name for this. I agree that this
&gt; should be thisObject.
&gt; 

Right.

&gt; But also, why are we doing this unconditionally? I don’t understand why we
&gt; want to change this for cases where there is no serializer.
&gt;

I&apos;ve followed Youenn&apos;s suggestion to simplify the previous solution which was detecting and adapting all the prototypes, taking advantage of using UNUSED allowed to simplify the solution, and I agreed it was simpler to review. But as I said to youenn I have doubts about serializer taking in general a toll in the generator or the code generated, that was the point of the initial patches, considering it does not seem as something we are using a lot. It is an option to do this just for the attributes that are going to be serialized, would that be ok?

Probably we should  clarify what option is better for us, if we want serializer to support every attribute now we need to modify the generator, in this case if we want a smaller modification in the generator we can use the UNUSED, if we want to avoid that we need a bigger modification. You can see all the solutions in the previous patches posted, depends on the goals we have in this part of the code.

&gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2571
&gt; &gt; +            push(@implContent, &quot;    JSValue decodedThisValue = JSValue::decode(thisValue);\n&quot;);
&gt; &gt; +            my $castingFunction = $interface-&gt;extendedAttributes-&gt;{&quot;CustomProxyToJSObject&quot;} ? &quot;to${className}&quot; : GetCastingHelperForThisObject($interface);
&gt; &gt; +            if ($interface-&gt;extendedAttributes-&gt;{&quot;ImplicitThis&quot;}) {
&gt; &gt; +                push(@implContent, &quot;    auto* castedThis = decodedThisValue.isUndefinedOrNull() ? $castingFunction(state-&gt;thisValue().toThis(state, NotStrictMode)) : $castingFunction(decodedThisValue);\n&quot;);
&gt; &gt; +            } else {
&gt; &gt; +                push(@implContent, &quot;    auto* castedThis = $castingFunction(decodedThisValue);\n&quot;);
&gt; &gt; +            }
&gt; 
&gt; Seems like a bad idea to do this extra work in cases where the values won’t
&gt; be used. I don’t understand the rationale here.
&gt;

Hrm, you are right, this seems a mistake when I refactored the code, I&apos;ll check it.

&gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3264
&gt; &gt; +    if ($interface-&gt;serializable) {
&gt; &gt; +        GenerateSerializerFunction($interface, $interfaceName, $className, $serializerFunctionName, $serializerNativeFunctionName);
&gt; &gt; +    }
&gt; 
&gt; The one line if form would be better.
&gt; 

Right.

&gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3486
&gt; &gt; +    push(@implContent, &quot;    JSValue thisValue = state-&gt;thisValue();\n&quot;);
&gt; &gt; +    push(@implContent, &quot;    auto castedThis = jsDynamicCast&lt;JS$interfaceName*&gt;(thisValue);\n&quot;);
&gt; 
&gt; Don’t think we need the local variable named thisValue here.
&gt;

Right.

&gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3490
&gt; &gt; +    push(@implContent, &quot;    JSObject* result = constructEmptyObject(state);\n&quot;);
&gt; 
&gt; Would be better to write auto*.
&gt; 

Right.

&gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3499
&gt; &gt; +    push(@implContent, &quot;\n    return JSValue::encode(result);\n&quot;);
&gt; 
&gt; I don’t think we need the extra blank line here. I would omit the \n at the
&gt; start of this.

Right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196694</commentid>
    <comment_count>38</comment_count>
      <attachid>279877</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-05-26 04:16:34 -0700</bug_when>
    <thetext>Created attachment 279877
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196708</commentid>
    <comment_count>39</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-05-26 07:25:13 -0700</bug_when>
    <thetext>(In reply to comment #38)
&gt; Created attachment 279877 [details]
&gt; Patch

This last patch solves most of the problems pointed out until now but I think we still need to make the decision of what is the best option for this implementation to create a final patch. Basically I see these options:
  1. Without support for every attribute in IDL for the generator, it works for what we want in WebRTC, it does not modify current generator part. Not general and it does not reuse current getters. (there is a patch)
  2. With support for every attribute in the IDL for the generator:
          2.1 Modify current generator for every attribute but with Getter prototypes adapted to the requirements of the Getter code. It is a more complex modification, it modifies every current getter for the serializer which is just used in a small part of all the interface. (there is a patch)
          2.2 With general Getter prototypes (2 parameters), we use UNUSED macro to avoid complexity in the generation, it adds Getters to all the current attributes and we use the serializer just for a small part of the IDL. It is easier to review than the last one, smaller amount of changes. (this is the last patch)
          2.3 Just modify the IDLs that are defined as serializer, this would require a bigger modification of the current generator, every message would have to be different considering we need new names for the variables. Needs to make a lot of parts that can be adjusted to both options, or rewrite the whole method to make it more flexible. (we still do not have a patch for this)

Any other option?

Personally I tend to like a smaller modification for this case, considering this is not a very common API nowadays but I guess people with an agenda regarding the generator have a better understanding of the best option.

Thanks in advance for your thoughts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196714</commentid>
    <comment_count>40</comment_count>
      <attachid>279883</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-05-26 08:07:24 -0700</bug_when>
    <thetext>Created attachment 279883
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196718</commentid>
    <comment_count>41</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-05-26 08:14:42 -0700</bug_when>
    <thetext>I would go with option 2.2.

As part of this patch or as a follow-up patch, I would differentiate getters in two prototypes:
- The ones that only need state (static attributes)
- The ones that need state and thisObject (regular attributes)
Doing the differentiation will add 1 if statement, which is probably ok in terms of complexity.

toJSON being mostly interested in regular attributes, it might be ok to only support regular attributes, until someone actually needs it of couse...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196722</commentid>
    <comment_count>42</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-05-26 08:26:28 -0700</bug_when>
    <thetext>(In reply to comment #41)
&gt; I would go with option 2.2.
&gt; 
&gt; As part of this patch or as a follow-up patch, I would differentiate getters
&gt; in two prototypes:
&gt; - The ones that only need state (static attributes)
&gt; - The ones that need state and thisObject (regular attributes)
&gt; Doing the differentiation will add 1 if statement, which is probably ok in
&gt; terms of complexity.
&gt; 

Thanks for the comment, I think we could go with that.

Regarding the static-vs-regular attributes just one comment, there are also attributes that do not need the state, just the thisObject. Also there multiple situations where that could happen. I do not have experience in the code to understand if that could be solved with a clean if clause, as usual when we generate code there are a lot of very special cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196725</commentid>
    <comment_count>43</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-05-26 08:30:05 -0700</bug_when>
    <thetext>(In reply to comment #42)
&gt; (In reply to comment #41)
&gt; &gt; I would go with option 2.2.
&gt; &gt; 
&gt; &gt; As part of this patch or as a follow-up patch, I would differentiate getters
&gt; &gt; in two prototypes:
&gt; &gt; - The ones that only need state (static attributes)
&gt; &gt; - The ones that need state and thisObject (regular attributes)
&gt; &gt; Doing the differentiation will add 1 if statement, which is probably ok in
&gt; &gt; terms of complexity.
&gt; &gt; 
&gt; 
&gt; Thanks for the comment, I think we could go with that.
&gt; 
&gt; Regarding the static-vs-regular attributes just one comment, there are also
&gt; attributes that do not need the state, just the thisObject. Also there
&gt; multiple situations where that could happen. I do not have experience in the
&gt; code to understand if that could be solved with a clean if clause, as usual
&gt; when we generate code there are a lot of very special cases.

I guess the handling of these might add complexity.
I would continue outputting UNUSED_PARAM(state) for these cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228043</commentid>
    <comment_count>44</comment_count>
      <attachid>279883</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-09-08 20:57:49 -0700</bug_when>
    <thetext>Comment on attachment 279883
Patch

Every EWS bot is red. ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1232391</commentid>
    <comment_count>45</comment_count>
      <attachid>289544</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-09-22 04:07:18 -0700</bug_when>
    <thetext>Created attachment 289544
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1232392</commentid>
    <comment_count>46</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-09-22 04:14:42 -0700</bug_when>
    <thetext>After last weeks fixing other issues in the webrtc implementation I would like to try to land this patch. We have finally devoted some more time and implemented the option that does not modify every other API to add the Getter, just the APIs of the objects defined as serialized. It is a bigger change but it seems clear in the patch, the lines protected with the if $interface-&gt;serializable, with the EncapsulateReturnTypeIfRequired function and the thisObject variable we could solve the modification of lines without adding new ones.

Other than that we left static functions differenciation for next patches when we have situations that uses attributes like those.

Thanks in advance for the comments, I hope we can make it now :).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233341</commentid>
    <comment_count>47</comment_count>
      <attachid>289544</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-09-26 01:41:41 -0700</bug_when>
    <thetext>Comment on attachment 289544
Patch

I think it goes in the right direction.
I would try to simplify the patch by always separating the attribute getter implementation.


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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2931
&gt; +                    push(@implContent, &quot;        return &quot; . EncapsulateReturnTypeIfRequired($interface-&gt;serializable, &quot;jsUndefined()&quot;) . &quot;;\n&quot;);

That makes quite a lot of switch based on $interface-&gt;serializable.
How about always generating ${getFunctionName}Getter function, no matter whether supporting serializer or not?

&gt; Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp:172
&gt; +JSValue jsTestNodeNameGetter(ExecState*, JSTestNode*);

This should probably be something like:
static inline JSValue jsTestNodeNameGetter(ExecState&amp;, JSTestNode&amp;);

&gt; Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp:-179
&gt; -    auto&amp; impl = castedThis-&gt;wrapped();

It seems to me that this function could be templated as a follow-up patch if we can retrieve the name of the class and the name of the property, something like:
EncodedJSValue jsTestNodeName(ExecState* state, EncodedJSValue thisValue, PropertyName propertyName)
{
     return callAttributeGetter&lt;jsTestNodeNameGetter&gt;(*state, *castedThis, propertyName);
}

Also, If we always split the attribute implementation in two functions, we can remove some UNUSED_PARAM

&gt; Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp:272
&gt; +    auto castedThis = jsDynamicCast&lt;JSTestNode*&gt;(state-&gt;thisValue());

How about adding an ASSERT(state)?

&gt; Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp:281
&gt; +    result-&gt;putDirect(vm, Identifier::fromString(&amp;vm, &quot;name&quot;), jsTestNodeNameGetter(state, castedThis));

It might be good to check for any exception that might happen after calling jsTestNodeNameGetter.
Either in this patch or as a follow-up patch.

&gt; Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp:1584
&gt; +JSValue jsTestObjReadOnlyTestObjAttrGetter(ExecState*, JSTestObj*);

Not related to this patch but there are two lines here while we probably want just one.

&gt; Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp:1610
&gt; +JSValue jsTestObjConstructorStaticReadOnlyLongAttrGetter(ExecState*, JSTestObj*);

Two empty lines here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233372</commentid>
    <comment_count>48</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-09-26 05:01:35 -0700</bug_when>
    <thetext>(In reply to comment #47)
&gt; Comment on attachment 289544 [details]
&gt; Patch
&gt; 
&gt; I think it goes in the right direction.
&gt; I would try to simplify the patch by always separating the attribute getter
&gt; implementation.
&gt; 
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=289544&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2931
&gt; &gt; +                    push(@implContent, &quot;        return &quot; . EncapsulateReturnTypeIfRequired($interface-&gt;serializable, &quot;jsUndefined()&quot;) . &quot;;\n&quot;);
&gt; 
&gt; That makes quite a lot of switch based on $interface-&gt;serializable.
&gt; How about always generating ${getFunctionName}Getter function, no matter
&gt; whether supporting serializer or not?
&gt; 

I&apos;m ok with that option, whatevet feels better for you.

&gt; &gt; Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp:172
&gt; &gt; +JSValue jsTestNodeNameGetter(ExecState*, JSTestNode*);
&gt; 
&gt; This should probably be something like:
&gt; static inline JSValue jsTestNodeNameGetter(ExecState&amp;, JSTestNode&amp;);
&gt; 

Right.

&gt; &gt; Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp:-179
&gt; &gt; -    auto&amp; impl = castedThis-&gt;wrapped();
&gt; 
&gt; It seems to me that this function could be templated as a follow-up patch if
&gt; we can retrieve the name of the class and the name of the property,
&gt; something like:
&gt; EncodedJSValue jsTestNodeName(ExecState* state, EncodedJSValue thisValue,
&gt; PropertyName propertyName)
&gt; {
&gt;      return callAttributeGetter&lt;jsTestNodeNameGetter&gt;(*state, *castedThis,
&gt; propertyName);
&gt; }
&gt; 
&gt; Also, If we always split the attribute implementation in two functions, we
&gt; can remove some UNUSED_PARAM
&gt; 

Right.

&gt; &gt; Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp:272
&gt; &gt; +    auto castedThis = jsDynamicCast&lt;JSTestNode*&gt;(state-&gt;thisValue());
&gt; 
&gt; How about adding an ASSERT(state)?
&gt; 

Right.

&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp:1610
&gt; &gt; +JSValue jsTestObjConstructorStaticReadOnlyLongAttrGetter(ExecState*, JSTestObj*);
&gt; 
&gt; Two empty lines here.

Right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233804</commentid>
    <comment_count>49</comment_count>
      <attachid>289932</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-09-27 03:59:46 -0700</bug_when>
    <thetext>Created attachment 289932
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233808</commentid>
    <comment_count>50</comment_count>
      <attachid>289932</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-09-27 04:15:36 -0700</bug_when>
    <thetext>Comment on attachment 289932
Patch

I like this patch.
Adding an intermediate function between the function used by JS and the DOM function will allow us to do some things like using more references, extracting the code that is casting the this value...
Given that this patch is splitting all attribute functions, it would be good to have more eyes looking at it.

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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2858
&gt; +                push(@implContent, &quot;static inline JSValue ${getFunctionName}Getter(ExecState*);\n\n&quot;);

In the future, we probably want to pass references for state and object.

&gt; Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp:281
&gt; +    result-&gt;putDirect(vm, Identifier::fromString(&amp;vm, &quot;name&quot;), jsTestNodeNameGetter(state, castedThis, throwScope));

In the future, we should check for any exception that may happen in the getters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233890</commentid>
    <comment_count>51</comment_count>
      <attachid>289932</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-09-27 09:15:53 -0700</bug_when>
    <thetext>Comment on attachment 289932
Patch

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

&gt; Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp:197
&gt; +static inline JSValue jsTestEventConstructorAttr1Getter(ExecState* state, JSTestEventConstructor* thisObject, ThrowScope&amp; throwScope)

So now every getter is in two parts, just because of the rare case where we use it for a serializer? This seems very unfortunate. Also, since the function is inline, there is no benefit to code size. Therefore, the only benefit seems to be readability because we generate less code in the case there is a serializer (i.e. avoid duplication). However, I am not convinced  by this benefit because:
1. Serializers are rare and we now generate more code in cases where there is no serializer for no good reason.
2. This is generated code so readability (or avoiding code duplication) is not a top priority.

Personally, I would just duplicate the attribute getting code in the rare case there is a serializer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1233920</commentid>
    <comment_count>52</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-09-27 10:02:03 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp:197
&gt; &gt; +static inline JSValue jsTestEventConstructorAttr1Getter(ExecState* state, JSTestEventConstructor* thisObject, ThrowScope&amp; throwScope)
&gt; 
&gt; So now every getter is in two parts, just because of the rare case where we
&gt; use it for a serializer? This seems very unfortunate. Also, since the
&gt; function is inline, there is no benefit to code size. Therefore, the only
&gt; benefit seems to be readability because we generate less code in the case
&gt; there is a serializer (i.e. avoid duplication). However, I am not convinced 
&gt; by this benefit because:
&gt; 1. Serializers are rare and we now generate more code in cases where there
&gt; is no serializer for no good reason.
&gt; 2. This is generated code so readability (or avoiding code duplication) is
&gt; not a top priority.
&gt; 
&gt; Personally, I would just duplicate the attribute getting code in the rare
&gt; case there is a serializer.

Maybe it is better to split the patch in two then, one for serializer and another one for the refactoring I have in mind.

The idea behind the refactoring I have in mind is:
- To templatize the castedThis+throw-if-null code
- Apply a different template for private functions/attributes. For these we control the calling site and we do not need checking this again. It is actually bad since we would throw exception with misleading (private) names (bug 158778)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234282</commentid>
    <comment_count>53</comment_count>
      <attachid>290066</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-09-28 00:46:18 -0700</bug_when>
    <thetext>Created attachment 290066
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234283</commentid>
    <comment_count>54</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-09-28 00:47:59 -0700</bug_when>
    <thetext>In this last patch I removed the Getter refactor proposed, and just left the serializer part.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234300</commentid>
    <comment_count>55</comment_count>
      <attachid>290066</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-09-28 01:47:45 -0700</bug_when>
    <thetext>Comment on attachment 290066
Patch

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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2392
&gt; +    push(@implContent, &quot;EncodedJSValue JSC_HOST_CALL ${serializerNativeFunctionName}(ExecState*);\n\n&quot;) if $interface-&gt;serializable;

It should be moved upper with other methods prototypes.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2552
&gt; +    if ($interface-&gt;serializable) {

Can you move that to GeneratePropertiesHashTable?

It might be even simpler to do something similar to iterables: create a toJSON function in IDLParser.pm (see parseOptionalIterableInterface).
Then you just need to insert this toJSON function in the functions for which to generate prototype and hash table if serializable.

That would leave you with only handling the generation of the implementation of it.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3797
&gt; +            push(@implContent, &quot;    result-&gt;putDirect(vm, Identifier::fromString(&amp;vm, \&quot;${name}\&quot;), JSValue::decode(${getFunctionName}(state, JSValue::encode(thisValue), Identifier())));\n&quot;);

It would be good to check for any exception. Asserting should be good enough for now I guess, something like:

childValue = ${getFunctionName}(state, JSValue::encode(thisValue), Identifier());
ASSERT(!throwScope.exception());
result-&gt;putDirect(vm, ...., JSValue::decode(childValue));

&gt; LayoutTests/ChangeLog:14
&gt; +        * fast/mediastream/RTCSessionDescription.html:

Can you add a test verifying the toJSON property, in particular that it has { [[Writable]]: true, [[Enumerable]]: true, [[Configurable]]: true }?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234315</commentid>
    <comment_count>56</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-09-28 03:27:00 -0700</bug_when>
    <thetext>(In reply to comment #55)
&gt; Comment on attachment 290066 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=290066&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2392
&gt; &gt; +    push(@implContent, &quot;EncodedJSValue JSC_HOST_CALL ${serializerNativeFunctionName}(ExecState*);\n\n&quot;) if $interface-&gt;serializable;
&gt; 
&gt; It should be moved upper with other methods prototypes.
&gt; 

Right.

&gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2552
&gt; &gt; +    if ($interface-&gt;serializable) {
&gt; 
&gt; Can you move that to GeneratePropertiesHashTable?
&gt; 
&gt; It might be even simpler to do something similar to iterables: create a
&gt; toJSON function in IDLParser.pm (see parseOptionalIterableInterface).
&gt; Then you just need to insert this toJSON function in the functions for which
&gt; to generate prototype and hash table if serializable.
&gt; 
&gt; That would leave you with only handling the generation of the implementation
&gt; of it.
&gt; 

Right, I&apos;ve implemented this approach.

&gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3797
&gt; &gt; +            push(@implContent, &quot;    result-&gt;putDirect(vm, Identifier::fromString(&amp;vm, \&quot;${name}\&quot;), JSValue::decode(${getFunctionName}(state, JSValue::encode(thisValue), Identifier())));\n&quot;);
&gt; 
&gt; It would be good to check for any exception. Asserting should be good enough
&gt; for now I guess, something like:
&gt; 
&gt; childValue = ${getFunctionName}(state, JSValue::encode(thisValue),
&gt; Identifier());
&gt; ASSERT(!throwScope.exception());
&gt; result-&gt;putDirect(vm, ...., JSValue::decode(childValue));
&gt; 

Right.

&gt; &gt; LayoutTests/ChangeLog:14
&gt; &gt; +        * fast/mediastream/RTCSessionDescription.html:
&gt; 
&gt; Can you add a test verifying the toJSON property, in particular that it has
&gt; { [[Writable]]: true, [[Enumerable]]: true, [[Configurable]]: true }?

It is already there.

Thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234319</commentid>
    <comment_count>57</comment_count>
      <attachid>290071</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-09-28 03:35:43 -0700</bug_when>
    <thetext>Created attachment 290071
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234327</commentid>
    <comment_count>58</comment_count>
      <attachid>290071</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-09-28 04:02:40 -0700</bug_when>
    <thetext>Comment on attachment 290071
Patch

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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3540
&gt; +

Can you move it below iterable since this is the order for the properties hash table and so on.
Also would you be able to change the iterable below line as you are doing above: GenerateImplementationIterableFunctions(..) if... ?

&gt; Source/WebCore/bindings/scripts/IDLParser.pm:1071
&gt; +            $newDataNode = domSerializable-&gt;new();

We probably need to create the toJSON function in this case as well.
But shouldn&apos;t we just die here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234333</commentid>
    <comment_count>59</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-09-28 04:40:11 -0700</bug_when>
    <thetext>(In reply to comment #58)
&gt; Comment on attachment 290071 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=290071&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3540
&gt; &gt; +
&gt; 
&gt; Can you move it below iterable since this is the order for the properties
&gt; hash table and so on.
&gt; Also would you be able to change the iterable below line as you are doing
&gt; above: GenerateImplementationIterableFunctions(..) if... ?
&gt; 

Right.

&gt; &gt; Source/WebCore/bindings/scripts/IDLParser.pm:1071
&gt; &gt; +            $newDataNode = domSerializable-&gt;new();
&gt; 
&gt; We probably need to create the toJSON function in this case as well.
&gt; But shouldn&apos;t we just die here?

We are creating the function with all the attributes in this case as required in the spec, we add the attributes later when applying the list to make sure they are all parsed.


+    if ($interface-&gt;serializable) {
+        my $numSerializerAttributes = @{$interface-&gt;serializable-&gt;attributes};
+        if ($numSerializerAttributes == 0) {
+            foreach my $attribute (@{$interface-&gt;attributes}) {
+                push(@{$interface-&gt;serializable-&gt;attributes}, $attribute-&gt;signature-&gt;name);
+            }
+        }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234335</commentid>
    <comment_count>60</comment_count>
      <attachid>290075</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-09-28 04:51:27 -0700</bug_when>
    <thetext>Created attachment 290075
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234344</commentid>
    <comment_count>61</comment_count>
      <attachid>290075</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-09-28 05:34:31 -0700</bug_when>
    <thetext>Comment on attachment 290075
Patch

r=me, let&apos;s ship it!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234349</commentid>
    <comment_count>62</comment_count>
      <attachid>290079</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-09-28 05:47:49 -0700</bug_when>
    <thetext>Created attachment 290079
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234351</commentid>
    <comment_count>63</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-09-28 05:48:47 -0700</bug_when>
    <thetext>Awesome, thanks everyone that contributed to the review! :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234360</commentid>
    <comment_count>64</comment_count>
      <attachid>290079</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-28 06:20:59 -0700</bug_when>
    <thetext>Comment on attachment 290079
Patch for landing

Clearing flags on attachment: 290079

Committed r206514: &lt;http://trac.webkit.org/changeset/206514&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234361</commentid>
    <comment_count>65</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-28 06:21:06 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239289</commentid>
    <comment_count>66</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-10-12 08:40:46 -0700</bug_when>
    <thetext>(In reply to comment #52)
&gt; &gt; &gt; Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp:197
&gt; &gt; &gt; +static inline JSValue jsTestEventConstructorAttr1Getter(ExecState* state, JSTestEventConstructor* thisObject, ThrowScope&amp; throwScope)
&gt; &gt; 
&gt; &gt; So now every getter is in two parts, just because of the rare case where we
&gt; &gt; use it for a serializer? This seems very unfortunate. Also, since the
&gt; &gt; function is inline, there is no benefit to code size. Therefore, the only
&gt; &gt; benefit seems to be readability because we generate less code in the case
&gt; &gt; there is a serializer (i.e. avoid duplication). However, I am not convinced 
&gt; &gt; by this benefit because:
&gt; &gt; 1. Serializers are rare and we now generate more code in cases where there
&gt; &gt; is no serializer for no good reason.
&gt; &gt; 2. This is generated code so readability (or avoiding code duplication) is
&gt; &gt; not a top priority.
&gt; &gt; 
&gt; &gt; Personally, I would just duplicate the attribute getting code in the rare
&gt; &gt; case there is a serializer.
&gt; 
&gt; Maybe it is better to split the patch in two then, one for serializer and
&gt; another one for the refactoring I have in mind.
&gt; 
&gt; The idea behind the refactoring I have in mind is:
&gt; - To templatize the castedThis+throw-if-null code
&gt; - Apply a different template for private functions/attributes. For these we
&gt; control the calling site and we do not need checking this again. It is
&gt; actually bad since we would throw exception with misleading (private) names
&gt; (bug 158778)

Some of the refactoring is now done.
Bug 163325 is updating the serializer code to directly reuse these direct attribute getters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240432</commentid>
    <comment_count>67</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-10-14 15:24:24 -0700</bug_when>
    <thetext>Should this have fixed &quot;serializer = { attribute };&quot;, as used by DOMRectReadOnly? It doesn&apos;t seem to work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240566</commentid>
    <comment_count>68</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-10-14 23:07:33 -0700</bug_when>
    <thetext>(In reply to comment #67)
&gt; Should this have fixed &quot;serializer = { attribute };&quot;, as used by
&gt; DOMRectReadOnly? It doesn&apos;t seem to work.

Yep, it should work, if it doesn&apos;t it is a bug. I&apos;ll check it, thanks for reporting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240567</commentid>
    <comment_count>69</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-10-14 23:08:27 -0700</bug_when>
    <thetext>Fixing via bug 163466.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240568</commentid>
    <comment_count>70</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-10-14 23:26:35 -0700</bug_when>
    <thetext>(In reply to comment #69)
&gt; Fixing via bug 163466.

Oh, attribute is the special keyword for the serializable attributes, that was not supported in the parser. We implemented serializer keyword and the map of attribute identifiers.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275784</attachid>
            <date>2016-04-06 11:11:41 -0700</date>
            <delta_ts>2016-04-13 04:19:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156293-20160406201141.patch</filename>
            <type>text/plain</type>
            <size>102134</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk5MTAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjdmZjNjMzFjZmQ2YzE4
YmM1YjUzMWRjMzVkODc1MmVhYzZjMzM5Ny4uNDYxMTk0YjUzZmY0ZjE4ZWJlZGU0YzVlMGQ0NmUw
MDYyMmJiNGVjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2MSBAQAorMjAxNi0wNC0wNiAgQWxl
amFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKworICAgICAgICBBZGQgV2ViSURM
IHNwZWNpYWwgb3BlcmF0aW9uIHN1cHBvcnQ6IHNlcmlhbGl6ZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjI5MworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBzZXJp
YWxpemVyIHNwZWNpYWwgb3BlcmF0aW9uIGZvciBXZWJJRExzLAorICAgICAgICBjdXJyZW50IGlt
cGxlbWVudGF0aW9uIGlzIG5vdCBjb21wbGV0ZSwgaXQgYWRkcyBzdXBwb3J0IGZvcjoKKyAgICAg
ICAgICAtIGp1c3QgdGhlIGtleXdvcmQ6IHNlcmlhbGl6ZXI7IEl0IHdpbGwgcmV0dXJuIGFsbCB0
aGUgYXR0cmlidXRlcyBvZiBpbiBhbiBvYmplY3QuCisgICAgICAgICAgLSBtYXAgb2YgZW50cmll
cyB3aXRoIHRoZSBhdHRyaWJ1dGVzOiBzZXJpYWxpemVyID0ge2F0dHJpYnV0ZTEsIGF0dHJpYnV0
ZTIsIC4uLn0KKyAgICAgICAgICAtIGxpc3Qgb2YgYXR0cmlidXRlczogc2VyaWFsaXplciA9IFth
dHRyaWJ1dGUxLCBhdHRyaWJ1dGUyLCAuLi5dCisgICAgICAgICAgLSBET01TdHJpbmcgYW5kIHVu
c2lnbmVkIHNob3IgdHlwZXMKKworICAgICAgICBJdCBjcmVhdGVzIGEgdG9KU09OIG1ldGhvZCB0
aGF0IHJldHVybnMgdGhlIHNlcmlhbGl6ZWQgdmFsdWUKKyAgICAgICAgY29udmVydGVkIGludG8g
YW4gRUNNQVNjcmlwdCB2YWx1ZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gY2hlY2sgdGhlCisgICAg
ICAgIGRlZmluaXRpb24gb2YgdGhlIG9wZXJhdGlvbjoKKworICAgICAgICBodHRwOi8vaGV5Y2Ft
LmdpdGh1Yi5pby93ZWJpZGwvI2lkbC1zZXJpYWxpemVycworCisgICAgICAgIFVzZWQgdGhlIHN1
cHBvcnQgdG8gYWRkIG5ldyBBUEkgZm9yIFJUQ0ljZUNhbmRpZGF0ZSBhbmQKKyAgICAgICAgUlRD
U2Vzc2lvbkRlc2NyaXB0aW9uLgorCisgICAgICAgIFRlc3RzOiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVGVzdFNlcmlhbGl6ZXIuaWRsCisgICAgICAgICAgICAgICBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVGVzdFNlcmlhbGl6ZXJXaXRoTWFwLmlkbAorCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0
cmVhbS9SVENJY2VDYW5kaWRhdGUuaWRsOiBBZGRlZCB0aGUgc2VyaWFsaXplciBvcGVyYXRpb24u
CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24uaWRs
OiBBZGRlZCB0aGUgc2VyaWFsaXplciBvcGVyYXRpb24uCisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9u
KTogQWRkIG5ldyBvcGVyYXRpb24gdG8gdGhlIGhhc2ggdGFibGUuCisgICAgICAgIChHZW5lcmF0
ZVNlcmlhbGl6ZXJGdW5jdGlvbik6IEFkZGVkIG1ldGhvZCB0aGF0IGdlbmVyYXRlcyB0aGUKKyAg
ICAgICAgdG9KU09OIG5hdGl2ZSBmdW5jdGlvbi4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L0lETFBhcnNlci5wbTogTW9kaWZpZWQgdGhlIHNlcmlhbGl6ZXIgcGFyc2VyCisgICAgICAgIHRo
YXQgd2FzIHVudXNlZCB0byBzdXBwb3J0IHRoZSBXZWJJREwgc3BlYyBwYXJ0cy4KKyAgICAgICAg
KHBhcnNlU2VyaWFsaXplcik6CisgICAgICAgIChwYXJzZVNlcmlhbGl6ZXJSZXN0KToKKyAgICAg
ICAgKHBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm4pOgorICAgICAgICAocGFyc2VTZXJpYWxpemF0
aW9uQXR0cmlidXRlcyk6CisgICAgICAgIChhcHBseU1lbWJlckxpc3QpOgorICAgICAgICAocGFy
c2VTZXJpYWxpemF0aW9uUGF0dGVybk1hcCk6IERlbGV0ZWQuCisgICAgICAgIChwYXJzZVNlcmlh
bGl6YXRpb25QYXR0ZXJuTGlzdCk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6a2l0KToKKyAgICAgICAgKFdlYktpdDo6Y29yZSk6CisgICAgICAgIChXZWJL
aXQ6OndyYXBUZXN0U2VyaWFsaXplcik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFs
aXplcl9maW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplcl9zZXRf
cHJvcGVydHkpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZXJfZ2V0X3Byb3Bl
cnR5KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVyX2NvbnN0cnVjdG9yKToK
KyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVyX2NsYXNzX2luaXQpOgorICAgICAg
ICAod2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZXJfaW5pdCk6CisgICAgICAgICh3ZWJraXRfZG9t
X3Rlc3Rfc2VyaWFsaXplcl9nZXRfc3RyX2F0dHJpYnV0ZSk6CisgICAgICAgICh3ZWJraXRfZG9t
X3Rlc3Rfc2VyaWFsaXplcl9zZXRfc3RyX2F0dHJpYnV0ZSk6CisgICAgICAgICh3ZWJraXRfZG9t
X3Rlc3Rfc2VyaWFsaXplcl9nZXRfaW50X2F0dHJpYnV0ZSk6CisgICAgICAgICh3ZWJraXRfZG9t
X3Rlc3Rfc2VyaWFsaXplcl9zZXRfaW50X2F0dHJpYnV0ZSk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXIuaDogQWRkZWQuCisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNlcmlh
bGl6ZXJQcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RTZXJpYWxpemVyV2l0aE1hcC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0OjpraXQpOgorICAgICAgICAoV2ViS2l0Ojpjb3JlKToKKyAgICAgICAgKFdlYktp
dDo6d3JhcFRlc3RTZXJpYWxpemVyV2l0aE1hcCk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rf
c2VyaWFsaXplcl93aXRoX21hcF9maW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rf
c2VyaWFsaXplcl93aXRoX21hcF9zZXRfcHJvcGVydHkpOgorICAgICAgICAod2Via2l0X2RvbV90
ZXN0X3NlcmlhbGl6ZXJfd2l0aF9tYXBfZ2V0X3Byb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdF9k
b21fdGVzdF9zZXJpYWxpemVyX3dpdGhfbWFwX2NvbnN0cnVjdG9yKToKKyAgICAgICAgKHdlYmtp
dF9kb21fdGVzdF9zZXJpYWxpemVyX3dpdGhfbWFwX2NsYXNzX2luaXQpOgorICAgICAgICAod2Vi
a2l0X2RvbV90ZXN0X3NlcmlhbGl6ZXJfd2l0aF9tYXBfaW5pdCk6CisgICAgICAgICh3ZWJraXRf
ZG9tX3Rlc3Rfc2VyaWFsaXplcl93aXRoX21hcF9nZXRfc3RyX2F0dHJpYnV0ZSk6CisgICAgICAg
ICh3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplcl93aXRoX21hcF9zZXRfc3RyX2F0dHJpYnV0ZSk6
CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplcl93aXRoX21hcF9nZXRfaW50X2F0
dHJpYnV0ZSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplcl93aXRoX21hcF9z
ZXRfaW50X2F0dHJpYnV0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmpl
Y3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXJXaXRoTWFwLmg6IEFkZGVkLgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RTZXJpYWxpemVyV2l0aE1h
cFByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFNlcmlhbGl6ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNlcmlh
bGl6ZXJQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxp
emVyUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
U2VyaWFsaXplclByb3RvdHlwZTo6SlNUZXN0U2VyaWFsaXplclByb3RvdHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVyQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVj
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVyQ29uc3RydWN0b3I6Omlu
aXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNlcmlhbGl6ZXJQ
cm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNlcmlh
bGl6ZXI6OkpTVGVzdFNlcmlhbGl6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFs
aXplcjo6Y3JlYXRlUHJvdG90eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNlcmlhbGl6
ZXI6OnByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVyOjpkZXN0
cm95KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlhbGl6ZXJTdHJBdHRyaWJ1dGUpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0U2VyaWFsaXplckludEF0dHJpYnV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RTZXJpYWxpemVyQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0U2VyaWFsaXplckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEpTVGVzdFNlcmlhbGl6ZXJTdHJBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0U2VyaWFsaXplckludEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJp
YWxpemVyOjpnZXRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTZXJpYWxp
emVyUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2Vy
aWFsaXplck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RTZXJpYWxpemVyT3duZXI6OmZpbmFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVyOjp0b1dyYXBwZWQpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVyLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0U2VyaWFsaXplcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dFNlcmlhbGl6ZXI6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RT
ZXJpYWxpemVyOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjp3cmFwcGVyT3du
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6d3JhcHBlcktleSk6CisgICAgICAgIChXZWJDb3JlOjp0
b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXpl
cldpdGhNYXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNlcmlhbGl6ZXJX
aXRoTWFwUHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFs
aXplcldpdGhNYXBQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RTZXJpYWxpemVyV2l0aE1hcFByb3RvdHlwZTo6SlNUZXN0U2VyaWFsaXplcldpdGhN
YXBQcm90b3R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFsaXplcldpdGhNYXBD
b25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdFNlcmlhbGl6ZXJXaXRoTWFwQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNlcmlhbGl6ZXJXaXRoTWFwUHJvdG90eXBlOjpmaW5p
c2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVyV2l0aE1hcDo6
SlNUZXN0U2VyaWFsaXplcldpdGhNYXApOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFs
aXplcldpdGhNYXA6OmNyZWF0ZVByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RT
ZXJpYWxpemVyV2l0aE1hcDo6cHJvdG90eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNl
cmlhbGl6ZXJXaXRoTWFwOjpkZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlh
bGl6ZXJXaXRoTWFwU3RyQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlh
bGl6ZXJXaXRoTWFwSW50QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlh
bGl6ZXJXaXRoTWFwQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0U2Vy
aWFsaXplcldpdGhNYXBDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RT
ZXJpYWxpemVyV2l0aE1hcFN0ckF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rl
c3RTZXJpYWxpemVyV2l0aE1hcEludEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RTZXJpYWxpemVyV2l0aE1hcDo6Z2V0Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0U2VyaWFsaXplcldpdGhNYXBQcm90b3R5cGVGdW5jdGlvblRvSlNPTik6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVyV2l0aE1hcE93bmVyOjppc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVyV2l0aE1hcE93
bmVyOjpmaW5hbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFsaXpl
cldpdGhNYXA6OnRvV3JhcHBlZCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFNlcmlhbGl6ZXJXaXRoTWFwLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0U2VyaWFsaXplcldpdGhNYXA6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RT
ZXJpYWxpemVyV2l0aE1hcDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdFNlcmlhbGl6ZXJXaXRoTWFwOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
Ojp3cmFwcGVyT3duZXIpOgorICAgICAgICAoV2ViQ29yZTo6d3JhcHBlcktleSk6CisgICAgICAg
IChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9E
T01UZXN0U2VyaWFsaXplci5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvT2JqQy9ET01UZXN0U2VyaWFsaXplci5tbTogQWRkZWQuCisgICAgICAgICgtW0RPTVRlc3RT
ZXJpYWxpemVyIGRlYWxsb2NdKToKKyAgICAgICAgKC1bRE9NVGVzdFNlcmlhbGl6ZXIgc3RyQXR0
cmlidXRlXSk6CisgICAgICAgICgtW0RPTVRlc3RTZXJpYWxpemVyIHNldFN0ckF0dHJpYnV0ZTpd
KToKKyAgICAgICAgKC1bRE9NVGVzdFNlcmlhbGl6ZXIgaW50QXR0cmlidXRlXSk6CisgICAgICAg
ICgtW0RPTVRlc3RTZXJpYWxpemVyIHNldEludEF0dHJpYnV0ZTpdKToKKyAgICAgICAgKGNvcmUp
OgorICAgICAgICAoa2l0KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9E
T01UZXN0U2VyaWFsaXplckludGVybmFsLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RTZXJpYWxpemVyV2l0aE1hcC5oOiBBZGRlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0U2VyaWFsaXplcldpdGhNYXAu
bW06IEFkZGVkLgorICAgICAgICAoLVtET01UZXN0U2VyaWFsaXplcldpdGhNYXAgZGVhbGxvY10p
OgorICAgICAgICAoLVtET01UZXN0U2VyaWFsaXplcldpdGhNYXAgc3RyQXR0cmlidXRlXSk6Cisg
ICAgICAgICgtW0RPTVRlc3RTZXJpYWxpemVyV2l0aE1hcCBzZXRTdHJBdHRyaWJ1dGU6XSk6Cisg
ICAgICAgICgtW0RPTVRlc3RTZXJpYWxpemVyV2l0aE1hcCBpbnRBdHRyaWJ1dGVdKToKKyAgICAg
ICAgKC1bRE9NVGVzdFNlcmlhbGl6ZXJXaXRoTWFwIHNldEludEF0dHJpYnV0ZTpdKToKKyAgICAg
ICAgKGNvcmUpOgorICAgICAgICAoa2l0KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvT2JqQy9ET01UZXN0U2VyaWFsaXplcldpdGhNYXBJbnRlcm5hbC5oOiBBZGRlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6ZXIuaWRsOiBBZGRlZC4KKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6ZXJXaXRoTWFwLmlkbDog
QWRkZWQuCisKIDIwMTYtMDQtMDYgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAog
ICAgICAgICBBU1NFUlRJT04gRkFJTEVEOiAhZmxvYXRpbmdPYmplY3QtPm9yaWdpbmF0aW5nTGlu
ZSgpIGluIFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6bGlua1RvRW5kTGluZUlmTmVlZGVkCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRp
ZGF0ZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRp
ZGF0ZS5pZGwKaW5kZXggY2QwMWVmNzJmYTk3MzRiNDMzYzhiOWZlYzMzYjY4MzZhMzViNjM4Ni4u
NTI4NDJjOWU4MGI5MDQwNzJiYWFlNWMwNmNhODUzYzY2NzkzNmI3NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaWRsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmlkbApA
QCAtMzcsNSArMzcsNiBAQAogICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgY2FuZGlkYXRlOwogICAg
IFtDdXN0b21HZXR0ZXJdIGF0dHJpYnV0ZSBET01TdHJpbmcgc2RwTWlkOwogICAgIFtDdXN0b21H
ZXR0ZXJdIGF0dHJpYnV0ZSB1bnNpZ25lZCBzaG9ydCBzZHBNTGluZUluZGV4OwotfTsKIAorICAg
IHNlcmlhbGl6ZXIgPSB7Y2FuZGlkYXRlLCBzZHBNaWQsIHNkcE1MaW5lSW5kZXh9OworfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRl
c2NyaXB0aW9uLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU2Vz
c2lvbkRlc2NyaXB0aW9uLmlkbAppbmRleCAyMzQ1NWY3MDQwNzI4ZTFiYWNlYWZlMjFhOGNhZThi
OGE1MTQwNWVmLi4xZDY0MzUwMmUzZmFiMjNiNmRjM2I3NTBjZTJiNTFkMjUyNDIwMzZkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNj
cmlwdGlvbi5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENT
ZXNzaW9uRGVzY3JpcHRpb24uaWRsCkBAIC0zNiw1ICszNiw3IEBACiBdIGludGVyZmFjZSBSVENT
ZXNzaW9uRGVzY3JpcHRpb24gewogICAgIFtTZXR0ZXJSYWlzZXNFeGNlcHRpb25dIGF0dHJpYnV0
ZSBET01TdHJpbmcgdHlwZTsKICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIHNkcDsKKworICAgIHNl
cmlhbGl6ZXIgPSB7dHlwZSwgc2RwfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KaW5kZXggNjI3ZjgwNWIwNWZhNGIyM2Fj
NjJkNTM5ZjY1OTc0NWM0YTI5YmY4NS4uMjFjZTU3NDUyYzI4ZTQ1M2M2MTdhMGVhMDc5NzgwYzFj
M2RkZjI3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9ySlMucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9ySlMucG0KQEAgLTE4MzksNiArMTgzOSw4IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVu
dGF0aW9uCiAgICAgbXkgJHZpc2libGVJbnRlcmZhY2VOYW1lID0gJGNvZGVHZW5lcmF0b3ItPkdl
dFZpc2libGVJbnRlcmZhY2VOYW1lKCRpbnRlcmZhY2UpOwogICAgIG15ICRldmVudFRhcmdldCA9
ICRjb2RlR2VuZXJhdG9yLT5Jbmhlcml0c0ludGVyZmFjZSgkaW50ZXJmYWNlLCAiRXZlbnRUYXJn
ZXQiKSAmJiAkaW50ZXJmYWNlLT5uYW1lIG5lICJFdmVudFRhcmdldCI7CiAgICAgbXkgJG5lZWRz
VmlzaXRDaGlsZHJlbiA9IEluc3RhbmNlTmVlZHNWaXNpdENoaWxkcmVuKCRpbnRlcmZhY2UpOwor
ICAgIG15ICRzZXJpYWxpemVyRnVuY3Rpb25OYW1lID0gInRvSlNPTiI7CisgICAgbXkgJHNlcmlh
bGl6ZXJOYXRpdmVGdW5jdGlvbk5hbWUgPSAkY29kZUdlbmVyYXRvci0+V0tfbGNmaXJzdCgkY2xh
c3NOYW1lKSAuICJQcm90b3R5cGUiIC4gIkZ1bmN0aW9uIiAuICRjb2RlR2VuZXJhdG9yLT5XS191
Y2ZpcnN0KCRzZXJpYWxpemVyRnVuY3Rpb25OYW1lKTsKIAogICAgIG15ICRuYW1lZEdldHRlckZ1
bmN0aW9uID0gR2V0TmFtZWRHZXR0ZXJGdW5jdGlvbigkaW50ZXJmYWNlKTsKICAgICBteSAkaW5k
ZXhlZEdldHRlckZ1bmN0aW9uID0gR2V0SW5kZXhlZEdldHRlckZ1bmN0aW9uKCRpbnRlcmZhY2Up
OwpAQCAtMTkyNiw2ICsxOTI4LDEwIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKICAgICB9CiAKKyAgICBpZiAoJGludGVyZmFj
ZS0+c2VyaWFsaXphYmxlKSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCAke3NlcmlhbGl6ZXJOYXRpdmVGdW5jdGlvbk5hbWV9KEV4ZWNT
dGF0ZSogc3RhdGUpO1xuXG4iKTsKKyAgICB9CisKICAgICAjIEFkZCBwcm90b3R5cGUgZGVjbGFy
YXRpb24uCiAgICAgaWYgKCFIZWFkZXJOZWVkc1Byb3RvdHlwZURlY2xhcmF0aW9uKCRpbnRlcmZh
Y2UpKSB7CiAgICAgICAgIEdlbmVyYXRlUHJvdG90eXBlRGVjbGFyYXRpb24oXEBpbXBsQ29udGVu
dCwgJGNsYXNzTmFtZSwgJGludGVyZmFjZSwgJGludGVyZmFjZU5hbWUpOwpAQCAtMjA4OSw2ICsy
MDk1LDE1IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAKICAgICBteSAkanVzdEdlbmVy
YXRlVmFsdWVBcnJheSA9ICFJc0RPTUdsb2JhbE9iamVjdCgkaW50ZXJmYWNlKTsKIAorICAgIGlm
ICgkaW50ZXJmYWNlLT5zZXJpYWxpemFibGUpIHsKKyAgICAgICAgcHVzaChAaGFzaEtleXMsICRz
ZXJpYWxpemVyRnVuY3Rpb25OYW1lKTsKKyAgICAgICAgcHVzaChAaGFzaFZhbHVlMSwgJHNlcmlh
bGl6ZXJOYXRpdmVGdW5jdGlvbk5hbWUpOworICAgICAgICBwdXNoKEBoYXNoVmFsdWUyLCAwKTsK
KyAgICAgICAgcHVzaChAaGFzaFNwZWNpYWxzLCAiSlNDOjpGdW5jdGlvbiIpOworCisgICAgICAg
ICRoYXNoU2l6ZSsrOworICAgIH0KKwogICAgICRvYmplY3QtPkdlbmVyYXRlSGFzaFRhYmxlKCRo
YXNoTmFtZSwgJGhhc2hTaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxAaGFz
aEtleXMsIFxAaGFzaFNwZWNpYWxzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxA
aGFzaFZhbHVlMSwgXEBoYXNoVmFsdWUyLApAQCAtMzA3MCw2ICszMDg1LDEwIEBAIEVORAogCiAg
ICAgfQogCisgICAgaWYgKCRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZSkgeworICAgICAgICBHZW5l
cmF0ZVNlcmlhbGl6ZXJGdW5jdGlvbigkaW50ZXJmYWNlLCAkaW50ZXJmYWNlTmFtZSwgJGNsYXNz
TmFtZSwgJHNlcmlhbGl6ZXJGdW5jdGlvbk5hbWUsICRzZXJpYWxpemVyTmF0aXZlRnVuY3Rpb25O
YW1lKTsKKyAgICB9CisKICAgICBpZiAoJGludGVyZmFjZS0+aXRlcmFibGUpIHsKICAgICAgICAg
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbkl0ZXJhYmxlRnVuY3Rpb25zKCRpbnRlcmZhY2UpOwogICAg
IH0KQEAgLTMzMDcsNiArMzMyNiw0MCBAQCBFTkQKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxu
I2VuZGlmIC8vICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7
CiB9CiAKK3N1YiBHZW5lcmF0ZVNlcmlhbGl6ZXJGdW5jdGlvbgoreworICAgIG15ICRpbnRlcmZh
Y2UgPSBzaGlmdDsKKyAgICBteSAkaW50ZXJmYWNlTmFtZSA9IHNoaWZ0OworICAgIG15ICRjbGFz
c05hbWUgPSBzaGlmdDsKKyAgICBteSAkc2VyaWFsaXplckZ1bmN0aW9uTmFtZSA9IHNoaWZ0Owor
ICAgIG15ICRzZXJpYWxpemVyTmF0aXZlRnVuY3Rpb25OYW1lID0gc2hpZnQ7CisKKyAgICBBZGRU
b0ltcGxJbmNsdWRlcygiT2JqZWN0Q29uc3RydWN0b3IuaCIpOworICAgIHB1c2goQGltcGxDb250
ZW50LCAiRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke3NlcmlhbGl6ZXJOYXRpdmVGdW5j
dGlvbk5hbWV9KEV4ZWNTdGF0ZSogc3RhdGUpXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwg
IntcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
c3RhdGUtPnRoaXNWYWx1ZSgpO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0
byBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKUyRpbnRlcmZhY2VOYW1lKj4odGhpc1ZhbHVl
KTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRocm93
VGhpc1R5cGVFcnJvcigqc3RhdGUsIFwiJGludGVyZmFjZU5hbWVcIiwgXCIkc2VyaWFsaXplckZ1
bmN0aW9uTmFtZVwiKTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJHtjbGFzc05hbWV9OjppbmZvKCkpO1xuXG4i
KSB1bmxlc3MgJGludGVyZmFjZU5hbWUgZXEgIkV2ZW50VGFyZ2V0IjsKKyAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3Qoc3Rh
dGUpO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTtcbiIpOworICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHskaW50
ZXJmYWNlLT5hdHRyaWJ1dGVzfSkgeworICAgICAgICBteSAkbmFtZSA9ICRhdHRyaWJ1dGUtPnNp
Z25hdHVyZS0+bmFtZTsKKyAgICAgICAgaWYgKGdyZXAgJF8gZXEgJG5hbWUsIEB7JGludGVyZmFj
ZS0+c2VyaWFsaXphYmxlLT5hdHRyaWJ1dGVzfSkgeworICAgICAgICAgICAgbXkgJHR5cGUgPSAk
YXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGU7CisgICAgICAgICAgICBpZiAoJHR5cGUgZXEgIkRP
TVN0cmluZyIpIHsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXN1
bHQtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwg
XCIke25hbWV9XCIpLCBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC4ke25hbWV9KCkpKTtc
biIpOworICAgICAgICAgICAgfSBlbHNpZiAoJHR5cGUgZXEgInVuc2lnbmVkIHNob3J0Iikgewor
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHN0YXRlLT52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCBcIiR7bmFtZX1cIiks
IGpzTnVtYmVyKGltcGwuJHtuYW1lfSgpLnZhbHVlKCkpLnRvU3RyaW5nKHN0YXRlKSk7XG4iKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICB9CisgICAgfQorICAgIHB1c2goQGltcGxDb250ZW50
LCAiXG4gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpO1xuIik7CisgICAgcHVzaChA
aW1wbENvbnRlbnQsICJ9XG5cbiIpOworfQorCiBzdWIgR2VuZXJhdGVGdW5jdGlvbkNhc3RlZFRo
aXMKIHsKICAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtCmluZGV4IDRmMTUyOWYyNzZkNDhlYjZiZGUyZDUwNzhj
OGI4NjM3MmY0MzBkZjYuLjA2NmZjN2ExMTQ1ZmNiNzJiYTk0ZDkxMzM0ZDQzMDVmMjE5NzYyMWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBt
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtCkBAIC01
Niw2ICs1Niw3IEBAIHN0cnVjdCggZG9tSW50ZXJmYWNlID0+IHsKICAgICBpc0NhbGxiYWNrID0+
ICckJywgIyBVc2VkIGZvciBjYWxsYmFjayBpbnRlcmZhY2VzCiAgICAgaXNQYXJ0aWFsID0+ICck
JywgIyBVc2VkIGZvciBwYXJ0aWFsIGludGVyZmFjZXMKICAgICBpdGVyYWJsZSA9PiAnJCcsICMg
VXNlZCBmb3IgaXRlcmFibGUgaW50ZXJmYWNlcworICAgIHNlcmlhbGl6YWJsZSA9PiAnJCcsICMg
VXNlZCBmb3Igc2VyaWFsaXphYmxlIGludGVyZmFjZXMKIH0pOwogCiAjIFVzZWQgdG8gcmVwcmVz
ZW50IGRvbUludGVyZmFjZSBjb250ZW50cyAobmFtZSBvZiBtZXRob2QsIHNpZ25hdHVyZSkKQEAg
LTk0LDYgKzk1LDEwIEBAIHN0cnVjdCggZG9tSXRlcmFibGUgPT4gewogICAgIGZ1bmN0aW9ucyA9
PiAnQCcsICMgSXRlcmFibGUgZnVuY3Rpb25zIChlbnRyaWVzLCBrZXlzLCB2YWx1ZXMsIFtTeW1i
b2wuSXRlcmF0b3JdLCBmb3JFYWNoKQogfSk7CiAKKyMgVXNlZCB0byByZXByZXNlbnQgc2VyaWFs
aXphYmxlIGludGVyZmFjZQorc3RydWN0KCBkb21TZXJpYWxpemFibGUgPT4geworICAgIGF0dHJp
YnV0ZXMgPT4gJ0AnLCAjIExpc3Qgb2YgYXR0cmlidXRlcyB0byBzZXJpYWxpemUKK30pOwogCiAj
IFVzZWQgdG8gcmVwcmVzZW50IHN0cmluZyBjb25zdGFudHMKIHN0cnVjdCggZG9tQ29uc3RhbnQg
PT4gewpAQCAtOTk1LDcgKzEwMDAsMTQgQEAgc3ViIHBhcnNlU2VyaWFsaXplcgogICAgIG15ICRu
ZXh0ID0gJHNlbGYtPm5leHRUb2tlbigpOwogICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAic2Vy
aWFsaXplciIpIHsKICAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRv
a2VuKCksICJzZXJpYWxpemVyIiwgX19MSU5FX18pOwotICAgICAgICByZXR1cm4gJHNlbGYtPnBh
cnNlU2VyaWFsaXplclJlc3QoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7CisgICAgICAgIG15ICRu
ZXh0ID0gJHNlbGYtPm5leHRUb2tlbigpOworICAgICAgICBteSAkbmV3RGF0YU5vZGUgPSBkb21T
ZXJpYWxpemFibGUtPm5ldygpOworICAgICAgICBpZiAoJG5leHQtPnZhbHVlKCkgbmUgIjsiKSB7
CisgICAgICAgICAgICBteSAkbmV3RGF0YU5vZGUgPSAkc2VsZi0+cGFyc2VTZXJpYWxpemVyUmVz
dCgkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKKyAgICAgICAgICAgIG15ICRuZXh0ID0gJHNlbGYt
Pm5leHRUb2tlbigpOworICAgICAgICB9CisgICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVl
KCRzZWxmLT5nZXRUb2tlbigpLCAiOyIsIF9fTElORV9fKTsKKyAgICAgICAgcmV0dXJuICRuZXdE
YXRhTm9kZTsKICAgICB9CiAgICAgJHNlbGYtPmFzc2VydFVuZXhwZWN0ZWRUb2tlbigkbmV4dC0+
dmFsdWUoKSwgX19MSU5FX18pOwogfQpAQCAtMTAwOCw3ICsxMDIwLDEwIEBAIHN1YiBwYXJzZVNl
cmlhbGl6ZXJSZXN0CiAgICAgbXkgJG5leHQgPSAkc2VsZi0+bmV4dFRva2VuKCk7CiAgICAgaWYg
KCRuZXh0LT52YWx1ZSgpIGVxICI9IikgewogICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1
ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIj0iLCBfX0xJTkVfXyk7Ci0gICAgICAgIHJldHVybiAkc2Vs
Zi0+cGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybigkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKKyAg
ICAgICAgbXkgJGF0dHJpYnV0ZXMgPSAkc2VsZi0+cGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybigp
OworICAgICAgICBteSAkbmV3RGF0YU5vZGUgPSBkb21TZXJpYWxpemFibGUtPm5ldygpOworICAg
ICAgICAkbmV3RGF0YU5vZGUtPmF0dHJpYnV0ZXMoJGF0dHJpYnV0ZXMpOworICAgICAgICByZXR1
cm4gJG5ld0RhdGFOb2RlOwogICAgIH0KICAgICBpZiAoJG5leHQtPnR5cGUoKSA9PSBJZGVudGlm
aWVyVG9rZW4gfHwgJG5leHQtPnZhbHVlKCkgZXEgIigiKSB7CiAgICAgICAgIHJldHVybiAkc2Vs
Zi0+cGFyc2VPcGVyYXRpb25SZXN0KCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwpAQCAtMTAxOCw1
OSArMTAzMyw0MSBAQCBzdWIgcGFyc2VTZXJpYWxpemVyUmVzdAogc3ViIHBhcnNlU2VyaWFsaXph
dGlvblBhdHRlcm4KIHsKICAgICBteSAkc2VsZiA9IHNoaWZ0OwotICAgIG15ICRleHRlbmRlZEF0
dHJpYnV0ZUxpc3QgPSBzaGlmdDsKIAogICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tlbigp
OwogICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAieyIpIHsKICAgICAgICAgJHNlbGYtPmFzc2Vy
dFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICJ7IiwgX19MSU5FX18pOwotICAgICAgICAk
c2VsZi0+cGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybk1hcCgpOworICAgICAgICBteSAkYXR0cmli
dXRlcyA9ICRzZWxmLT5wYXJzZVNlcmlhbGl6YXRpb25BdHRyaWJ1dGVzKCk7CiAgICAgICAgICRz
ZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAifSIsIF9fTElORV9fKTsK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gXEB7JGF0dHJpYnV0ZXN9OwogICAgIH0K
ICAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgIlsiKSB7CiAgICAgICAgICRzZWxmLT5hc3NlcnRU
b2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiWyIsIF9fTElORV9fKTsKLSAgICAgICAgJHNl
bGYtPnBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm5MaXN0KCk7CisgICAgICAgIG15ICRhdHRyaWJ1
dGVzID0gJHNlbGYtPnBhcnNlU2VyaWFsaXphdGlvbkF0dHJpYnV0ZXMoKTsKICAgICAgICAgJHNl
bGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICJdIiwgX19MSU5FX18pOwot
ICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBcQHskYXR0cmlidXRlc307CiAgICAgfQog
ICAgIGlmICgkbmV4dC0+dHlwZSgpID09IElkZW50aWZpZXJUb2tlbikgewotICAgICAgICAkc2Vs
Zi0+YXNzZXJ0VG9rZW5UeXBlKCRzZWxmLT5nZXRUb2tlbigpLCBJZGVudGlmaWVyVG9rZW4pOwot
ICAgICAgICByZXR1cm47CisgICAgICAgIG15IEBhdHRyaWJ1dGVzID0gKCk7CisgICAgICAgIG15
ICR0b2tlbiA9ICRzZWxmLT5nZXRUb2tlbigpOworICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5U
eXBlKCR0b2tlbiwgSWRlbnRpZmllclRva2VuKTsKKyAgICAgICAgcHVzaChAYXR0cmlidXRlcywg
JHRva2VuLT52YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuIFxAYXR0cmlidXRlczsKICAgICB9CiAg
ICAgJHNlbGYtPmFzc2VydFVuZXhwZWN0ZWRUb2tlbigkbmV4dC0+dmFsdWUoKSwgX19MSU5FX18p
OwogfQogCi1zdWIgcGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybk1hcAorc3ViIHBhcnNlU2VyaWFs
aXphdGlvbkF0dHJpYnV0ZXMKIHsKICAgICBteSAkc2VsZiA9IHNoaWZ0OwotICAgIG15ICRuZXh0
ID0gJHNlbGYtPm5leHRUb2tlbigpOwotICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAiZ2V0dGVy
IikgewotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwg
ImdldHRlciIsIF9fTElORV9fKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoJG5l
eHQtPnZhbHVlKCkgZXEgImluaGVyaXQiKSB7Ci0gICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZh
bHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiaW5oZXJpdCIsIF9fTElORV9fKTsKLSAgICAgICAgJHNl
bGYtPnBhcnNlSWRlbnRpZmllcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAo
JG5leHQtPnR5cGUoKSA9PSBJZGVudGlmaWVyVG9rZW4pIHsKLSAgICAgICAgJHNlbGYtPmFzc2Vy
dFRva2VuVHlwZSgkc2VsZi0+Z2V0VG9rZW4oKSwgSWRlbnRpZmllclRva2VuKTsKLSAgICAgICAg
JHNlbGYtPnBhcnNlSWRlbnRpZmllcnMoKTsKLSAgICB9Ci19CiAKLXN1YiBwYXJzZVNlcmlhbGl6
YXRpb25QYXR0ZXJuTGlzdAotewotICAgIG15ICRzZWxmID0gc2hpZnQ7Ci0gICAgbXkgJG5leHQg
PSAkc2VsZi0+bmV4dFRva2VuKCk7Ci0gICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJnZXR0ZXIi
KSB7Ci0gICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAi
Z2V0dGVyIiwgX19MSU5FX18pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICgkbmV4
dC0+dHlwZSgpID09IElkZW50aWZpZXJUb2tlbikgewotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9r
ZW5UeXBlKCRzZWxmLT5nZXRUb2tlbigpLCBJZGVudGlmaWVyVG9rZW4pOwotICAgICAgICAkc2Vs
Zi0+cGFyc2VJZGVudGlmaWVycygpOwotICAgIH0KKyAgICAjIGdldHRlciBhbmQgaW5oZXJpdCBh
cmUgbm9yIGN1cnJlbnRseSBzdXBwb3J0ZWQuCisgICAgbXkgJHRva2VuID0gJHNlbGYtPmdldFRv
a2VuKCk7CisgICAgbXkgQGF0dHJpYnV0ZXMgPSAoKTsKKyAgICAkc2VsZi0+YXNzZXJ0VG9rZW5U
eXBlKCR0b2tlbiwgSWRlbnRpZmllclRva2VuKTsKKyAgICBwdXNoKEBhdHRyaWJ1dGVzLCAkdG9r
ZW4tPnZhbHVlKCkpOworICAgIHB1c2goQGF0dHJpYnV0ZXMsIEB7JHNlbGYtPnBhcnNlSWRlbnRp
ZmllcnMoKX0pOworICAgIHJldHVybiBcQGF0dHJpYnV0ZXM7CiB9CiAKIHN1YiBwYXJzZUlkZW50
aWZpZXJzCkBAIC0yMjMzLDYgKzIyMzAsMTkgQEAgc3ViIGFwcGx5TWVtYmVyTGlzdAogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgbmV4dDsKICAgICAgICAgfQorICAgICAgICBpZiAocmVmKCRp
dGVtKSBlcSAiZG9tU2VyaWFsaXphYmxlIikgeworICAgICAgICAgICAgJGludGVyZmFjZS0+c2Vy
aWFsaXphYmxlKCRpdGVtKTsKKyAgICAgICAgICAgIG5leHQ7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAoJGludGVyZmFjZS0+c2VyaWFsaXphYmxlKSB7CisgICAgICAgIG15ICRudW1TZXJp
YWxpemVyQXR0cmlidXRlcyA9IEB7JGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5hdHRyaWJ1dGVz
fTsKKyAgICAgICAgaWYgKCRudW1TZXJpYWxpemVyQXR0cmlidXRlcyA9PSAwKSB7CisgICAgICAg
ICAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEB7JGludGVyZmFjZS0+YXR0cmlidXRlc30pIHsK
KyAgICAgICAgICAgICAgICBwdXNoKEB7JGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5hdHRyaWJ1
dGVzfSwgJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmNiZjc5ZTllYzAwYzE1NGQ2MTFjODk4NDRmNmM4MDVmOWIxZjQz
NTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXplci5jcHAKQEAgLTAsMCArMSwyMDMgQEAK
Ky8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJLaXRET01UZXN0U2VyaWFsaXplci5oIgorCisjaW5jbHVkZSAiQ1NTSW1wb3J0
UnVsZS5oIgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZURl
c2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCisjaW5jbHVk
ZSAiV2ViS2l0RE9NUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVRlc3RTZXJpYWxpemVy
UHJpdmF0ZS5oIgorI2luY2x1ZGUgImdvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2lu
Y2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNkZWZpbmUg
V0VCS0lUX0RPTV9URVNUX1NFUklBTElaRVJfR0VUX1BSSVZBVEUob2JqKSBHX1RZUEVfSU5TVEFO
Q0VfR0VUX1BSSVZBVEUob2JqLCBXRUJLSVRfRE9NX1RZUEVfVEVTVF9TRVJJQUxJWkVSLCBXZWJL
aXRET01UZXN0U2VyaWFsaXplclByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRET01U
ZXN0U2VyaWFsaXplclByaXZhdGUgeworICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0U2VyaWFsaXpl
cj4gY29yZU9iamVjdDsKK30gV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXJQcml2YXRlOworCituYW1l
c3BhY2UgV2ViS2l0IHsKKworV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXIqIGtpdChXZWJDb3JlOjpU
ZXN0U2VyaWFsaXplciogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6Z2V0KG9iaikpCisgICAg
ICAgIHJldHVybiBXRUJLSVRfRE9NX1RFU1RfU0VSSUFMSVpFUihyZXQpOworCisgICAgcmV0dXJu
IHdyYXBUZXN0U2VyaWFsaXplcihvYmopOworfQorCitXZWJDb3JlOjpUZXN0U2VyaWFsaXplciog
Y29yZShXZWJLaXRET01UZXN0U2VyaWFsaXplciogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVx
dWVzdCA/IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RTZXJpYWxpemVyKj4oV0VCS0lUX0RPTV9P
QkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDogMDsKK30KKworV2ViS2l0RE9NVGVzdFNlcmlh
bGl6ZXIqIHdyYXBUZXN0U2VyaWFsaXplcihXZWJDb3JlOjpUZXN0U2VyaWFsaXplciogY29yZU9i
amVjdCkKK3sKKyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01f
VEVTVF9TRVJJQUxJWkVSKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfVEVTVF9TRVJJQUxJ
WkVSLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9UWVBFKFdlYktpdERPTVRlc3RTZXJpYWxpemVyLCB3
ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplciwgV0VCS0lUX0RPTV9UWVBFX09CSkVDVCkKKworZW51
bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfU1RSX0FUVFJJQlVURSwKKyAgICBQUk9QX0lOVF9B
VFRSSUJVVEUsCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplcl9m
aW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXJQ
cml2YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX1NFUklBTElaRVJfR0VUX1BSSVZBVEUob2Jq
ZWN0KTsKKworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZvcmdldChwcml2LT5jb3JlT2Jq
ZWN0LmdldCgpKTsKKworICAgIHByaXYtPn5XZWJLaXRET01UZXN0U2VyaWFsaXplclByaXZhdGUo
KTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplcl9wYXJlbnRf
Y2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rl
c3Rfc2VyaWFsaXplcl9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0
eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJL
aXRET01UZXN0U2VyaWFsaXplciogc2VsZiA9IFdFQktJVF9ET01fVEVTVF9TRVJJQUxJWkVSKG9i
amVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfU1RSX0FU
VFJJQlVURToKKyAgICAgICAgd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZXJfc2V0X3N0cl9hdHRy
aWJ1dGUoc2VsZiwgZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9JTlRfQVRUUklCVVRFOgorICAgICAgICB3ZWJraXRfZG9tX3Rlc3Rfc2Vy
aWFsaXplcl9zZXRfaW50X2F0dHJpYnV0ZShzZWxmLCBnX3ZhbHVlX2dldF91aW50KHZhbHVlKSk7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5W
QUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplcl9n
ZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZh
bHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01UZXN0U2VyaWFsaXplciog
c2VsZiA9IFdFQktJVF9ET01fVEVTVF9TRVJJQUxJWkVSKG9iamVjdCk7CisKKyAgICBzd2l0Y2gg
KHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfU1RSX0FUVFJJQlVURToKKyAgICAgICAgZ192
YWx1ZV90YWtlX3N0cmluZyh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZXJfZ2V0X3N0
cl9hdHRyaWJ1dGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfSU5UX0FU
VFJJQlVURToKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludCh2YWx1ZSwgd2Via2l0X2RvbV90ZXN0
X3NlcmlhbGl6ZXJfZ2V0X2ludF9hdHRyaWJ1dGUoc2VsZikpOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2Jq
ZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3Rh
dGljIEdPYmplY3QqIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVyX2NvbnN0cnVjdG9yKEdUeXBl
IHR5cGUsIGd1aW50IGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgR09iamVjdENvbnN0cnVjdFBh
cmFtKiBjb25zdHJ1Y3RQcm9wZXJ0aWVzKQoreworICAgIEdPYmplY3QqIG9iamVjdCA9IEdfT0JK
RUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVyX3BhcmVudF9jbGFzcyktPmNvbnN0
cnVjdG9yKHR5cGUsIGNvbnN0cnVjdFByb3BlcnRpZXNDb3VudCwgY29uc3RydWN0UHJvcGVydGll
cyk7CisKKyAgICBXZWJLaXRET01UZXN0U2VyaWFsaXplclByaXZhdGUqIHByaXYgPSBXRUJLSVRf
RE9NX1RFU1RfU0VSSUFMSVpFUl9HRVRfUFJJVkFURShvYmplY3QpOworICAgIHByaXYtPmNvcmVP
YmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0U2VyaWFsaXplcio+KFdFQktJVF9ET01f
T0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6
OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3QpOworCisgICAgcmV0dXJuIG9iamVj
dDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZXJfY2xhc3NfaW5p
dChXZWJLaXRET01UZXN0U2VyaWFsaXplckNsYXNzKiByZXF1ZXN0Q2xhc3MpCit7CisgICAgR09i
amVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwor
ICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0Q2xhc3MsIHNpemVvZihXZWJLaXRE
T01UZXN0U2VyaWFsaXplclByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9y
ID0gd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZXJfY29uc3RydWN0b3I7CisgICAgZ29iamVjdENs
YXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVyX2ZpbmFsaXplOworICAg
IGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZXJf
c2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X2Rv
bV90ZXN0X3NlcmlhbGl6ZXJfZ2V0X3Byb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAgICBQUk9QX1NUUl9B
VFRSSUJVVEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAic3Ry
LWF0dHJpYnV0ZSIsCisgICAgICAgICAgICAiVGVzdFNlcmlhbGl6ZXI6c3RyLWF0dHJpYnV0ZSIs
CisgICAgICAgICAgICAicmVhZC13cml0ZSBnY2hhciogVGVzdFNlcmlhbGl6ZXI6c3RyLWF0dHJp
YnV0ZSIsCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJ
VEUpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdv
YmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9JTlRfQVRUUklCVVRFLAorICAgICAgICBnX3BhcmFt
X3NwZWNfdWludCgKKyAgICAgICAgICAgICJpbnQtYXR0cmlidXRlIiwKKyAgICAgICAgICAgICJU
ZXN0U2VyaWFsaXplcjppbnQtYXR0cmlidXRlIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGd1
c2hvcnQgVGVzdFNlcmlhbGl6ZXI6aW50LWF0dHJpYnV0ZSIsCisgICAgICAgICAgICAwLCBHX01B
WFVJTlQsIDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZXJfaW5pdChXZWJLaXRET01UZXN0
U2VyaWFsaXplciogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRET01UZXN0U2VyaWFsaXplclByaXZh
dGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFU1RfU0VSSUFMSVpFUl9HRVRfUFJJVkFURShyZXF1ZXN0
KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTVRlc3RTZXJpYWxpemVyUHJpdmF0ZSgpOworfQor
CitnY2hhciogd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZXJfZ2V0X3N0cl9hdHRyaWJ1dGUoV2Vi
S2l0RE9NVGVzdFNlcmlhbGl6ZXIqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFk
TnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9ET01fSVNf
VEVTVF9TRVJJQUxJWkVSKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpUZXN0U2VyaWFsaXplciog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRv
VVRGOFN0cmluZyhpdGVtLT5zdHJBdHRyaWJ1dGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplcl9zZXRfc3RyX2F0dHJpYnV0ZShXZWJL
aXRET01UZXN0U2VyaWFsaXplciogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKQoreworICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9ET01fSVNfVEVTVF9TRVJJQUxJWkVSKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKHZhbHVlKTsKKyAgICBXZWJDb3JlOjpUZXN0U2VyaWFsaXplciogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRWYWx1ZSA9IFdURjo6U3RyaW5n
Ojpmcm9tVVRGOCh2YWx1ZSk7CisgICAgaXRlbS0+c2V0U3RyQXR0cmlidXRlKGNvbnZlcnRlZFZh
bHVlKTsKK30KKworZ3VzaG9ydCB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplcl9nZXRfaW50X2F0
dHJpYnV0ZShXZWJLaXRET01UZXN0U2VyaWFsaXplciogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19URVNUX1NFUklBTElaRVIoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlRlc3RT
ZXJpYWxpemVyKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGd1c2hvcnQgcmVzdWx0
ID0gaXRlbS0+aW50QXR0cmlidXRlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB3
ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplcl9zZXRfaW50X2F0dHJpYnV0ZShXZWJLaXRET01UZXN0
U2VyaWFsaXplciogc2VsZiwgZ3VzaG9ydCB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lT
X1RFU1RfU0VSSUFMSVpFUihzZWxmKSk7CisgICAgV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZXIqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0SW50QXR0cmlidXRlKHZhbHVl
KTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RTZXJpYWxpemVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZGQxN2NkMzUyZjJmN2RkZDAwZTc2MDE3OTE4YjE3OTA2NGU1OTJmNQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RTZXJpYWxpemVyLmgKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBm
aWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1P
RElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01UZXN0U2VyaWFsaXplcl9oCisjZGVm
aW5lIFdlYktpdERPTVRlc3RTZXJpYWxpemVyX2gKKworI2lmZGVmIFdFQktJVF9ET01fVVNFX1VO
U1RBQkxFX0FQSQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXRk
b20vV2ViS2l0RE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL3dlYmtpdGRvbWRlZmlu
ZXMtdW5zdGFibGUuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9ET01fVFlQ
RV9URVNUX1NFUklBTElaRVIgICAgICAgICAgICAod2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZXJf
Z2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9URVNUX1NFUklBTElaRVIob2JqKSAgICAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX0RPTV9UWVBF
X1RFU1RfU0VSSUFMSVpFUiwgV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXIpKQorI2RlZmluZSBXRUJL
SVRfRE9NX1RFU1RfU0VSSUFMSVpFUl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFT
U19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9TRVJJQUxJWkVSLCBXZWJLaXRE
T01UZXN0U2VyaWFsaXplckNsYXNzKQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFU1RfU0VSSUFM
SVpFUihvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJL
SVRfRE9NX1RZUEVfVEVTVF9TRVJJQUxJWkVSKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVNU
X1NFUklBTElaRVJfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3Mp
LCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfU0VSSUFMSVpFUikpCisjZGVmaW5lIFdFQktJVF9ET01f
VEVTVF9TRVJJQUxJWkVSX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFT
Uygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX1NFUklBTElaRVIsIFdlYktpdERPTVRlc3RT
ZXJpYWxpemVyQ2xhc3MpKQorCitzdHJ1Y3QgX1dlYktpdERPTVRlc3RTZXJpYWxpemVyIHsKKyAg
ICBXZWJLaXRET01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRE
T01UZXN0U2VyaWFsaXplckNsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRf
Y2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXpl
cl9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplcl9n
ZXRfc3RyX2F0dHJpYnV0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0U2VyaWFsaXplcgor
ICoKKyAqIFJldHVybnM6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiov
CitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZXJfZ2V0X3N0cl9h
dHRyaWJ1dGUoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXIqIHNlbGYpOworCisvKioKKyAqIHdlYmtp
dF9kb21fdGVzdF9zZXJpYWxpemVyX3NldF9zdHJfYXR0cmlidXRlOgorICogQHNlbGY6IEEgI1dl
YktpdERPTVRlc3RTZXJpYWxpemVyCisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmls
aXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fdGVzdF9zZXJp
YWxpemVyX3NldF9zdHJfYXR0cmlidXRlKFdlYktpdERPTVRlc3RTZXJpYWxpemVyKiBzZWxmLCBj
b25zdCBnY2hhciogdmFsdWUpOworCisvKioKKyAqIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVy
X2dldF9pbnRfYXR0cmlidXRlOgorICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RTZXJpYWxpemVy
CisgKgorICogUmV0dXJuczogQSAjZ3VzaG9ydAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUK
KyoqLworV0VCS0lUX0FQSSBndXNob3J0Cit3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplcl9nZXRf
aW50X2F0dHJpYnV0ZShXZWJLaXRET01UZXN0U2VyaWFsaXplciogc2VsZik7CisKKy8qKgorICog
d2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZXJfc2V0X2ludF9hdHRyaWJ1dGU6CisgKiBAc2VsZjog
QSAjV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXIKKyAqIEB2YWx1ZTogQSAjZ3VzaG9ydAorICoKKyAq
IFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3Rl
c3Rfc2VyaWFsaXplcl9zZXRfaW50X2F0dHJpYnV0ZShXZWJLaXRET01UZXN0U2VyaWFsaXplciog
c2VsZiwgZ3VzaG9ydCB2YWx1ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRf
RE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBXZWJLaXRET01UZXN0U2VyaWFsaXpl
cl9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXplclByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RTZXJpYWxpemVyUHJp
dmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjM2NzZmMGNmM2U0NmU4OGU1MTI2OTAyNmIwNmQwNWQ2YzQ0OTUy
Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXplclByaXZhdGUuaApAQCAtMCwwICsxLDMz
IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2Ug
cHJvamVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJp
bmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVRl
c3RTZXJpYWxpemVyUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdERPTVRlc3RTZXJpYWxpemVyUHJp
dmF0ZV9oCisKKyNpbmNsdWRlICJUZXN0U2VyaWFsaXplci5oIgorI2luY2x1ZGUgPHdlYmtpdGRv
bS9XZWJLaXRET01UZXN0U2VyaWFsaXplci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktp
dERPTVRlc3RTZXJpYWxpemVyKiB3cmFwVGVzdFNlcmlhbGl6ZXIoV2ViQ29yZTo6VGVzdFNlcmlh
bGl6ZXIqKTsKK1dlYktpdERPTVRlc3RTZXJpYWxpemVyKiBraXQoV2ViQ29yZTo6VGVzdFNlcmlh
bGl6ZXIqKTsKK1dlYkNvcmU6OlRlc3RTZXJpYWxpemVyKiBjb3JlKFdlYktpdERPTVRlc3RTZXJp
YWxpemVyKik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8qIFdlYktpdERPTVRl
c3RTZXJpYWxpemVyUHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXplcldpdGhNYXAu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0
RE9NVGVzdFNlcmlhbGl6ZXJXaXRoTWFwLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45Y2NlNjlkNGE4OTU1YzIx
OWM3OWEzMzVmMmZhZmQwZDJmY2Q5MDRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXJX
aXRoTWFwLmNwcApAQCAtMCwwICsxLDIwMyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVu
IGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERPTVRlc3RTZXJpYWxp
emVyV2l0aE1hcC5oIgorCisjaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgorI2luY2x1ZGUgIkRP
TU9iamVjdENhY2hlLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmgiCisjaW5jbHVk
ZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NUHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYktpdERPTVRlc3RTZXJpYWxpemVyV2l0aE1hcFByaXZhdGUuaCIKKyNp
bmNsdWRlICJnb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvR2V0
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5lIFdFQktJVF9ET01fVEVT
VF9TRVJJQUxJWkVSX1dJVEhfTUFQX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RBTkNFX0dF
VF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfU0VSSUFMSVpFUl9XSVRIX01BUCwg
V2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXJXaXRoTWFwUHJpdmF0ZSkKKwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdERPTVRlc3RTZXJpYWxpemVyV2l0aE1hcFByaXZhdGUgeworICAgIFJlZlB0cjxXZWJD
b3JlOjpUZXN0U2VyaWFsaXplcldpdGhNYXA+IGNvcmVPYmplY3Q7Cit9IFdlYktpdERPTVRlc3RT
ZXJpYWxpemVyV2l0aE1hcFByaXZhdGU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJLaXRE
T01UZXN0U2VyaWFsaXplcldpdGhNYXAqIGtpdChXZWJDb3JlOjpUZXN0U2VyaWFsaXplcldpdGhN
YXAqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAo
Z3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4g
V0VCS0lUX0RPTV9URVNUX1NFUklBTElaRVJfV0lUSF9NQVAocmV0KTsKKworICAgIHJldHVybiB3
cmFwVGVzdFNlcmlhbGl6ZXJXaXRoTWFwKG9iaik7Cit9CisKK1dlYkNvcmU6OlRlc3RTZXJpYWxp
emVyV2l0aE1hcCogY29yZShXZWJLaXRET01UZXN0U2VyaWFsaXplcldpdGhNYXAqIHJlcXVlc3Qp
Cit7CisgICAgcmV0dXJuIHJlcXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0U2VyaWFs
aXplcldpdGhNYXAqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0KS0+Y29yZU9iamVjdCkgOiAw
OworfQorCitXZWJLaXRET01UZXN0U2VyaWFsaXplcldpdGhNYXAqIHdyYXBUZXN0U2VyaWFsaXpl
cldpdGhNYXAoV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZXJXaXRoTWFwKiBjb3JlT2JqZWN0KQorewor
ICAgIEFTU0VSVChjb3JlT2JqZWN0KTsKKyAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX1NFUklB
TElaRVJfV0lUSF9NQVAoZ19vYmplY3RfbmV3KFdFQktJVF9ET01fVFlQRV9URVNUX1NFUklBTEla
RVJfV0lUSF9NQVAsICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIG51bGxwdHIpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NVGVzdFNlcmlh
bGl6ZXJXaXRoTWFwLCB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplcl93aXRoX21hcCwgV0VCS0lU
X0RPTV9UWVBFX09CSkVDVCkKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBST1BfU1RSX0FU
VFJJQlVURSwKKyAgICBQUk9QX0lOVF9BVFRSSUJVVEUsCit9OworCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX3Rlc3Rfc2VyaWFsaXplcl93aXRoX21hcF9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3Qp
Cit7CisgICAgV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXJXaXRoTWFwUHJpdmF0ZSogcHJpdiA9IFdF
QktJVF9ET01fVEVTVF9TRVJJQUxJWkVSX1dJVEhfTUFQX0dFVF9QUklWQVRFKG9iamVjdCk7CisK
KyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9iamVjdC5nZXQo
KSk7CisKKyAgICBwcml2LT5+V2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXJXaXRoTWFwUHJpdmF0ZSgp
OworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVyX3dpdGhfbWFw
X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9kb21fdGVzdF9zZXJpYWxpemVyX3dpdGhfbWFwX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmpl
Y3QsIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBz
cGVjKQoreworICAgIFdlYktpdERPTVRlc3RTZXJpYWxpemVyV2l0aE1hcCogc2VsZiA9IFdFQktJ
VF9ET01fVEVTVF9TRVJJQUxJWkVSX1dJVEhfTUFQKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHBy
b3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfU1RSX0FUVFJJQlVURToKKyAgICAgICAgd2Via2l0
X2RvbV90ZXN0X3NlcmlhbGl6ZXJfd2l0aF9tYXBfc2V0X3N0cl9hdHRyaWJ1dGUoc2VsZiwgZ192
YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9J
TlRfQVRUUklCVVRFOgorICAgICAgICB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplcl93aXRoX21h
cF9zZXRfaW50X2F0dHJpYnV0ZShzZWxmLCBnX3ZhbHVlX2dldF91aW50KHZhbHVlKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9Q
Uk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplcl93aXRoX21h
cF9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUq
IHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRET01UZXN0U2VyaWFsaXpl
cldpdGhNYXAqIHNlbGYgPSBXRUJLSVRfRE9NX1RFU1RfU0VSSUFMSVpFUl9XSVRIX01BUChvYmpl
Y3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1NUUl9BVFRS
SUJVVEU6CisgICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fdGVz
dF9zZXJpYWxpemVyX3dpdGhfbWFwX2dldF9zdHJfYXR0cmlidXRlKHNlbGYpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX0lOVF9BVFRSSUJVVEU6CisgICAgICAgIGdfdmFsdWVfc2V0
X3VpbnQodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVyX3dpdGhfbWFwX2dldF9pbnRf
YXR0cmlidXRlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
R19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNw
ZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyBHT2JqZWN0KiB3ZWJraXRf
ZG9tX3Rlc3Rfc2VyaWFsaXplcl93aXRoX21hcF9jb25zdHJ1Y3RvcihHVHlwZSB0eXBlLCBndWlu
dCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQYXJhbSogY29uc3Ry
dWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09CSkVDVF9DTEFTUyh3
ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplcl93aXRoX21hcF9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1
Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRpZXMp
OworCisgICAgV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXJXaXRoTWFwUHJpdmF0ZSogcHJpdiA9IFdF
QktJVF9ET01fVEVTVF9TRVJJQUxJWkVSX1dJVEhfTUFQX0dFVF9QUklWQVRFKG9iamVjdCk7Cisg
ICAgcHJpdi0+Y29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RTZXJpYWxpemVy
V2l0aE1hcCo+KFdFQktJVF9ET01fT0JKRUNUKG9iamVjdCktPmNvcmVPYmplY3QpOworICAgIFdl
YktpdDo6RE9NT2JqZWN0Q2FjaGU6OnB1dChwcml2LT5jb3JlT2JqZWN0LmdldCgpLCBvYmplY3Qp
OworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0
X3NlcmlhbGl6ZXJfd2l0aF9tYXBfY2xhc3NfaW5pdChXZWJLaXRET01UZXN0U2VyaWFsaXplcldp
dGhNYXBDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENs
YXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBnX3R5cGVfY2xhc3NfYWRk
X3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXJXaXRo
TWFwUHJpdmF0ZSkpOworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0b3IgPSB3ZWJraXRfZG9t
X3Rlc3Rfc2VyaWFsaXplcl93aXRoX21hcF9jb25zdHJ1Y3RvcjsKKyAgICBnb2JqZWN0Q2xhc3Mt
PmZpbmFsaXplID0gd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZXJfd2l0aF9tYXBfZmluYWxpemU7
CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFs
aXplcl93aXRoX21hcF9zZXRfcHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVy
dHkgPSB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplcl93aXRoX21hcF9nZXRfcHJvcGVydHk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xh
c3MsCisgICAgICAgIFBST1BfU1RSX0FUVFJJQlVURSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0
cmluZygKKyAgICAgICAgICAgICJzdHItYXR0cmlidXRlIiwKKyAgICAgICAgICAgICJUZXN0U2Vy
aWFsaXplcldpdGhNYXA6c3RyLWF0dHJpYnV0ZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBn
Y2hhciogVGVzdFNlcmlhbGl6ZXJXaXRoTWFwOnN0ci1hdHRyaWJ1dGUiLAorICAgICAgICAgICAg
IiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBnb2JqZWN0Q2xhc3MsCisgICAgICAg
IFBST1BfSU5UX0FUVFJJQlVURSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQoCisgICAgICAg
ICAgICAiaW50LWF0dHJpYnV0ZSIsCisgICAgICAgICAgICAiVGVzdFNlcmlhbGl6ZXJXaXRoTWFw
OmludC1hdHRyaWJ1dGUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ3VzaG9ydCBUZXN0U2Vy
aWFsaXplcldpdGhNYXA6aW50LWF0dHJpYnV0ZSIsCisgICAgICAgICAgICAwLCBHX01BWFVJTlQs
IDAsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZXJfd2l0aF9tYXBfaW5pdChXZWJLaXRET01U
ZXN0U2VyaWFsaXplcldpdGhNYXAqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NVGVzdFNlcmlh
bGl6ZXJXaXRoTWFwUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9TRVJJQUxJWkVSX1dJ
VEhfTUFQX0dFVF9QUklWQVRFKHJlcXVlc3QpOworICAgIG5ldyAocHJpdikgV2ViS2l0RE9NVGVz
dFNlcmlhbGl6ZXJXaXRoTWFwUHJpdmF0ZSgpOworfQorCitnY2hhciogd2Via2l0X2RvbV90ZXN0
X3NlcmlhbGl6ZXJfd2l0aF9tYXBfZ2V0X3N0cl9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdFNlcmlh
bGl6ZXJXaXRoTWFwKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfU0VS
SUFMSVpFUl9XSVRIX01BUChzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZXJX
aXRoTWFwKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdjaGFyKiByZXN1bHQgPSBj
b252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPnN0ckF0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit2b2lkIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVyX3dpdGhfbWFwX3NldF9z
dHJfYXR0cmlidXRlKFdlYktpdERPTVRlc3RTZXJpYWxpemVyV2l0aE1hcCogc2VsZiwgY29uc3Qg
Z2NoYXIqIHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0
ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9TRVJJQUxJWkVSX1dJ
VEhfTUFQKHNlbGYpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKKyAgICBXZWJDb3Jl
OjpUZXN0U2VyaWFsaXplcldpdGhNYXAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAg
V1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodmFsdWUp
OworICAgIGl0ZW0tPnNldFN0ckF0dHJpYnV0ZShjb252ZXJ0ZWRWYWx1ZSk7Cit9CisKK2d1c2hv
cnQgd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZXJfd2l0aF9tYXBfZ2V0X2ludF9hdHRyaWJ1dGUo
V2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXJXaXRoTWFwKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX1RFU1RfU0VSSUFMSVpFUl9XSVRIX01BUChzZWxmKSwgMCk7CisgICAgV2ViQ29y
ZTo6VGVzdFNlcmlhbGl6ZXJXaXRoTWFwKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IGd1c2hvcnQgcmVzdWx0ID0gaXRlbS0+aW50QXR0cmlidXRlKCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordm9pZCB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplcl93aXRoX21hcF9zZXRfaW50
X2F0dHJpYnV0ZShXZWJLaXRET01UZXN0U2VyaWFsaXplcldpdGhNYXAqIHNlbGYsIGd1c2hvcnQg
dmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX1NFUklBTElaRVJfV0lUSF9NQVAo
c2VsZikpOworICAgIFdlYkNvcmU6OlRlc3RTZXJpYWxpemVyV2l0aE1hcCogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5zZXRJbnRBdHRyaWJ1dGUodmFsdWUpOworfQorCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0U2VyaWFsaXplcldpdGhNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RTZXJpYWxpemVyV2l0aE1hcC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjFlOWE5Mzg2ZmNjNDM5NjAzZmVhY2M1MGRjMjJmYTY5OWIzNTg3ODQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVj
dC9XZWJLaXRET01UZXN0U2VyaWFsaXplcldpdGhNYXAuaApAQCAtMCwwICsxLDk1IEBACisvKgor
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVRlc3RTZXJpYWxp
emVyV2l0aE1hcF9oCisjZGVmaW5lIFdlYktpdERPTVRlc3RTZXJpYWxpemVyV2l0aE1hcF9oCisK
KyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPGdsaWItb2Jq
ZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUg
PHdlYmtpdGRvbS93ZWJraXRkb21kZWZpbmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMK
KworI2RlZmluZSBXRUJLSVRfRE9NX1RZUEVfVEVTVF9TRVJJQUxJWkVSX1dJVEhfTUFQICAgICAg
ICAgICAgKHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVyX3dpdGhfbWFwX2dldF90eXBlKCkpCisj
ZGVmaW5lIFdFQktJVF9ET01fVEVTVF9TRVJJQUxJWkVSX1dJVEhfTUFQKG9iaikgICAgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQRV9URVNU
X1NFUklBTElaRVJfV0lUSF9NQVAsIFdlYktpdERPTVRlc3RTZXJpYWxpemVyV2l0aE1hcCkpCisj
ZGVmaW5lIFdFQktJVF9ET01fVEVTVF9TRVJJQUxJWkVSX1dJVEhfTUFQX0NMQVNTKGtsYXNzKSAg
ICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9URVNU
X1NFUklBTElaRVJfV0lUSF9NQVAsIFdlYktpdERPTVRlc3RTZXJpYWxpemVyV2l0aE1hcENsYXNz
KQorI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFU1RfU0VSSUFMSVpFUl9XSVRIX01BUChvYmopICAg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfRE9NX1RZUEVf
VEVTVF9TRVJJQUxJWkVSX1dJVEhfTUFQKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVNUX1NF
UklBTElaRVJfV0lUSF9NQVBfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgo
a2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfU0VSSUFMSVpFUl9XSVRIX01BUCkpCisjZGVm
aW5lIFdFQktJVF9ET01fVEVTVF9TRVJJQUxJWkVSX1dJVEhfTUFQX0dFVF9DTEFTUyhvYmopICAo
R19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX1NF
UklBTElaRVJfV0lUSF9NQVAsIFdlYktpdERPTVRlc3RTZXJpYWxpemVyV2l0aE1hcENsYXNzKSkK
Kworc3RydWN0IF9XZWJLaXRET01UZXN0U2VyaWFsaXplcldpdGhNYXAgeworICAgIFdlYktpdERP
TU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTVRlc3RTZXJp
YWxpemVyV2l0aE1hcENsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xh
c3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplcl93
aXRoX21hcF9nZXRfdHlwZSh2b2lkKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFs
aXplcl93aXRoX21hcF9nZXRfc3RyX2F0dHJpYnV0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01U
ZXN0U2VyaWFsaXplcldpdGhNYXAKKyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0
YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fdGVz
dF9zZXJpYWxpemVyX3dpdGhfbWFwX2dldF9zdHJfYXR0cmlidXRlKFdlYktpdERPTVRlc3RTZXJp
YWxpemVyV2l0aE1hcCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6
ZXJfd2l0aF9tYXBfc2V0X3N0cl9hdHRyaWJ1dGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVz
dFNlcmlhbGl6ZXJXaXRoTWFwCisgKiBAdmFsdWU6IEEgI2djaGFyCisgKgorICogU3RhYmlsaXR5
OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9kb21fdGVzdF9zZXJpYWxp
emVyX3dpdGhfbWFwX3NldF9zdHJfYXR0cmlidXRlKFdlYktpdERPTVRlc3RTZXJpYWxpemVyV2l0
aE1hcCogc2VsZiwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3Rl
c3Rfc2VyaWFsaXplcl93aXRoX21hcF9nZXRfaW50X2F0dHJpYnV0ZToKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01UZXN0U2VyaWFsaXplcldpdGhNYXAKKyAqCisgKiBSZXR1cm5zOiBBICNndXNob3J0
CisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIGd1c2hvcnQKK3dl
YmtpdF9kb21fdGVzdF9zZXJpYWxpemVyX3dpdGhfbWFwX2dldF9pbnRfYXR0cmlidXRlKFdlYktp
dERPTVRlc3RTZXJpYWxpemVyV2l0aE1hcCogc2VsZik7CisKKy8qKgorICogd2Via2l0X2RvbV90
ZXN0X3NlcmlhbGl6ZXJfd2l0aF9tYXBfc2V0X2ludF9hdHRyaWJ1dGU6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXJXaXRoTWFwCisgKiBAdmFsdWU6IEEgI2d1c2hvcnQKKyAq
CisgKiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV90ZXN0X3NlcmlhbGl6ZXJfd2l0aF9tYXBfc2V0X2ludF9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVz
dFNlcmlhbGl6ZXJXaXRoTWFwKiBzZWxmLCBndXNob3J0IHZhbHVlKTsKKworR19FTkRfREVDTFMK
KworI2VuZGlmIC8qIFdFQktJVF9ET01fVVNFX1VOU1RBQkxFX0FQSSAqLworI2VuZGlmIC8qIFdl
YktpdERPTVRlc3RTZXJpYWxpemVyV2l0aE1hcF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXpl
cldpdGhNYXBQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXplcldpdGhNYXBQcml2YXRlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMmZjYWUzM2U5YzQ0YzNiNGVlY2JmZmEwMzQzYjg5MGM4N2M4N2M4YwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3RTZXJpYWxpemVyV2l0aE1hcFByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgor
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdERPTVRlc3RTZXJpYWxp
emVyV2l0aE1hcFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01UZXN0U2VyaWFsaXplcldpdGhN
YXBQcml2YXRlX2gKKworI2luY2x1ZGUgIlRlc3RTZXJpYWxpemVyV2l0aE1hcC5oIgorI2luY2x1
ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01UZXN0U2VyaWFsaXplcldpdGhNYXAuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CitXZWJLaXRET01UZXN0U2VyaWFsaXplcldpdGhNYXAqIHdyYXBUZXN0U2Vy
aWFsaXplcldpdGhNYXAoV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZXJXaXRoTWFwKik7CitXZWJLaXRE
T01UZXN0U2VyaWFsaXplcldpdGhNYXAqIGtpdChXZWJDb3JlOjpUZXN0U2VyaWFsaXplcldpdGhN
YXAqKTsKK1dlYkNvcmU6OlRlc3RTZXJpYWxpemVyV2l0aE1hcCogY29yZShXZWJLaXRET01UZXN0
U2VyaWFsaXplcldpdGhNYXAqKTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyog
V2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXJXaXRoTWFwUHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFs
aXplci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYzA5MTIxNTg0N2M3Y2M2ZjQwZWRiNTJlNWFhODRmNWI2Zjg1
OGRiZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVyLmNwcApAQCAtMCwwICsxLDMwMCBAQAorLyoKKyAgICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNUZXN0U2Vy
aWFsaXplci5oIgorCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01D
b25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAi
VVJMLmgiCisjaW5jbHVkZSA8cnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5oPgorI2luY2x1ZGUg
PHJ1bnRpbWUvSlNTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQXR0cmlidXRlcworCitK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZXJTdHJBdHRyaWJ1dGUoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNl
dEpTVGVzdFNlcmlhbGl6ZXJTdHJBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0U2VyaWFsaXplckludEF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0U2VyaWFsaXplckludEF0
dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVyQ29uc3RydWN0
b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7Citib29sIHNldEpTVGVzdFNlcmlhbGl6ZXJDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworCitFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFNlcmlhbGl6ZXJQcm90b3R5cGVGdW5jdGlvblRvSlNP
TihFeGVjU3RhdGUqIHN0YXRlKTsKKworY2xhc3MgSlNUZXN0U2VyaWFsaXplclByb3RvdHlwZSA6
IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlND
OjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdFNlcmlhbGl6ZXJQcm90
b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0U2Vy
aWFsaXplclByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxK
U1Rlc3RTZXJpYWxpemVyUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0U2VyaWFsaXplclByb3Rv
dHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENy
ZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lO
Rk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3Rv
dHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0U2Vy
aWFsaXplclByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZt
LCBzdHJ1Y3R1cmUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlND
OjpWTSYpOworfTsKKwordHlwZWRlZiBKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZTxK
U1Rlc3RTZXJpYWxpemVyPiBKU1Rlc3RTZXJpYWxpemVyQ29uc3RydWN0b3I7CisKK3RlbXBsYXRl
PD4gSlNWYWx1ZSBKU1Rlc3RTZXJpYWxpemVyQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVj
dHVyZShKU0M6OlZNJiB2bSwgY29uc3QgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkK
K3sKKyAgICBVTlVTRURfUEFSQU0odm0pOworICAgIHJldHVybiBnbG9iYWxPYmplY3QuZnVuY3Rp
b25Qcm90b3R5cGUoKTsKK30KKwordGVtcGxhdGU8PiB2b2lkIEpTVGVzdFNlcmlhbGl6ZXJDb25z
dHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0KQoreworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJv
dG90eXBlLCBKU1Rlc3RTZXJpYWxpemVyOjpwcm90b3R5cGUodm0sICZnbG9iYWxPYmplY3QpLCBE
b250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoQVNDSUlM
aXRlcmFsKCJUZXN0U2VyaWFsaXplciIpKSksIFJlYWRPbmx5IHwgRG9udEVudW0pOworICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9u
bHkgfCBEb250RW51bSk7Cit9CisKK3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFNl
cmlhbGl6ZXJDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdFNlcmlhbGl6ZXIiLCAmQmFzZTo6
c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNlcmlhbGl6ZXJDb25zdHJ1Y3Rv
cikgfTsKKworLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovCisKK3N0YXRpYyBjb25zdCBI
YXNoVGFibGVWYWx1ZSBKU1Rlc3RTZXJpYWxpemVyUHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9Cit7
CisgICAgeyAiY29uc3RydWN0b3IiLCBEb250RW51bSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90
KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemVy
Q29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0
VmFsdWVGdW5jPihzZXRKU1Rlc3RTZXJpYWxpemVyQ29uc3RydWN0b3IpIH0gfSwKKyAgICB7ICJz
dHJBdHRyaWJ1dGUiLCBDdXN0b21BY2Nlc3NvciwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0
YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemVyU3Ry
QXR0cmlidXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZh
bHVlRnVuYz4oc2V0SlNUZXN0U2VyaWFsaXplclN0ckF0dHJpYnV0ZSkgfSB9LAorICAgIHsgImlu
dEF0dHJpYnV0ZSIsIEN1c3RvbUFjY2Vzc29yLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3Rh
dGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdFNlcmlhbGl6ZXJJbnRB
dHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFs
dWVGdW5jPihzZXRKU1Rlc3RTZXJpYWxpemVySW50QXR0cmlidXRlKSB9IH0sCisgICAgeyAidG9K
U09OIiwgSlNDOjpGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0
PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RTZXJpYWxpemVyUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04p
LCAoaW50cHRyX3QpICgwKSB9IH0sCit9OworCitjb25zdCBDbGFzc0luZm8gSlNUZXN0U2VyaWFs
aXplclByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdFNlcmlhbGl6ZXJQcm90b3R5cGUiLCAmQmFz
ZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNlcmlhbGl6ZXJQcm90b3R5
cGUpIH07CisKK3ZvaWQgSlNUZXN0U2VyaWFsaXplclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZWlmeVN0YXRp
Y1Byb3BlcnRpZXModm0sIEpTVGVzdFNlcmlhbGl6ZXJQcm90b3R5cGVUYWJsZVZhbHVlcywgKnRo
aXMpOworfQorCitjb25zdCBDbGFzc0luZm8gSlNUZXN0U2VyaWFsaXplcjo6c19pbmZvID0geyAi
VGVzdFNlcmlhbGl6ZXIiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpT
VGVzdFNlcmlhbGl6ZXIpIH07CisKK0pTVGVzdFNlcmlhbGl6ZXI6OkpTVGVzdFNlcmlhbGl6ZXIo
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJl
ZjxUZXN0U2VyaWFsaXplcj4mJiBpbXBsKQorICAgIDogSlNET01XcmFwcGVyPFRlc3RTZXJpYWxp
emVyPihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSkKK3sKK30KKworSlNP
YmplY3QqIEpTVGVzdFNlcmlhbGl6ZXI6OmNyZWF0ZVByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIEpTVGVzdFNlcmlhbGl6ZXJQcm90
b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RTZXJpYWxpemVyUHJvdG90eXBl
OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQ
cm90b3R5cGUoKSkpOworfQorCitKU09iamVjdCogSlNUZXN0U2VyaWFsaXplcjo6cHJvdG90eXBl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0
RE9NUHJvdG90eXBlPEpTVGVzdFNlcmlhbGl6ZXI+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCit2
b2lkIEpTVGVzdFNlcmlhbGl6ZXI6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCit7CisgICAg
SlNUZXN0U2VyaWFsaXplciogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdFNlcmlhbGl6
ZXIqPihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT5KU1Rlc3RTZXJpYWxpemVyOjp+SlNUZXN0U2Vy
aWFsaXplcigpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVyU3RyQXR0cmli
dXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNW
YWx1ZSk7CisgICAgSlNWYWx1ZSBkZWNvZGVkVGhpc1ZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSk7CisgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2Vy
aWFsaXplcio+KGRlY29kZWRUaGlzVmFsdWUpOworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RT
ZXJpYWxpemVyIiwgInN0ckF0dHJpYnV0ZSIpOworICAgIH0KKyAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2Fj
aGUoc3RhdGUsIGltcGwuc3RyQXR0cmlidXRlKCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKK30KKworCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVySW50QXR0
cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRo
aXNWYWx1ZSk7CisgICAgSlNWYWx1ZSBkZWNvZGVkVGhpc1ZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSk7CisgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
U2VyaWFsaXplcio+KGRlY29kZWRUaGlzVmFsdWUpOworICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRl
c3RTZXJpYWxpemVyIiwgImludEF0dHJpYnV0ZSIpOworICAgIH0KKyAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1w
bC5pbnRBdHRyaWJ1dGUoKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwor
fQorCisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZXJDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAg
ICBKU1Rlc3RTZXJpYWxpemVyUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdFNlcmlhbGl6ZXJQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Cisg
ICAgaWYgKCFkb21PYmplY3QpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRl
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdFNlcmlhbGl6ZXI6OmdldENvbnN0
cnVjdG9yKHN0YXRlLT52bSgpLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7Cit9CisKK2Jv
b2wgc2V0SlNUZXN0U2VyaWFsaXplckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBKU1Rl
c3RTZXJpYWxpemVyUHJvdG90eXBlKiBkb21PYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFNl
cmlhbGl6ZXJQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYg
KFVOTElLRUxZKCFkb21PYmplY3QpKSB7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0
LWluIGNvbnN0cnVjdG9yCisgICAgcmV0dXJuIGRvbU9iamVjdC0+cHV0RGlyZWN0KHN0YXRlLT52
bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCB2YWx1ZSk7Cit9CisKK2Jv
b2wgc2V0SlNUZXN0U2VyaWFsaXplclN0ckF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5V
U0VEX1BBUkFNKHRoaXNWYWx1ZSk7CisgICAgSlNUZXN0U2VyaWFsaXplciogY2FzdGVkVGhpcyA9
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXplcio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CisgICAgICAgIHJldHVybiB0
aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0U2VyaWFsaXplciIsICJzdHJBdHRyaWJ1
dGUiKTsKKyAgICB9CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAg
ICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1N0cmluZyhzdGF0ZSktPnZhbHVlKHN0YXRl
KTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGltcGwuc2V0U3RyQXR0cmlidXRlKG5hdGl2ZVZhbHVlKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworCitib29sIHNldEpTVGVzdFNlcmlhbGl6ZXJJbnRBdHRyaWJ1dGUo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOworICAgIEpTVGVzdFNl
cmlhbGl6ZXIqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6ZXIqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgeworICAgICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdFNl
cmlhbGl6ZXIiLCAiaW50QXR0cmlidXRlIik7CisgICAgfQorICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgdWludDE2X3QgbmF0aXZlVmFsdWUgPSB0b1VJbnQxNihz
dGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaW1wbC5zZXRJbnRB
dHRyaWJ1dGUobmF0aXZlVmFsdWUpOworICAgIHJldHVybiB0cnVlOworfQorCisKK0pTVmFsdWUg
SlNUZXN0U2VyaWFsaXplcjo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rl
c3RTZXJpYWxpemVyQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0U2VyaWFsaXplclByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEV4ZWNTdGF0ZSogc3RhdGUp
Cit7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CisgICAgYXV0
byBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxpemVyKj4odGhpc1ZhbHVl
KTsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQorICAgICAgICByZXR1cm4gdGhyb3dU
aGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RTZXJpYWxpemVyIiwgInRvSlNPTiIpOworICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0U2VyaWFsaXplcjo6aW5m
bygpKTsKKworICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChzdGF0
ZSk7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXN1bHQt
PnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgInN0
ckF0dHJpYnV0ZSIpLCBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5zdHJBdHRyaWJ1dGUo
KSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHN0YXRlLCAiaW50QXR0cmlidXRlIiksIGpzTnVtYmVyKGltcGwuaW50QXR0cmlidXRl
KCkudmFsdWUoKSkudG9TdHJpbmcoc3RhdGUpKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKK30KKworYm9vbCBKU1Rlc3RTZXJpYWxpemVyT3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CisgICAg
VU5VU0VEX1BBUkFNKHZpc2l0b3IpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBKU1Rl
c3RTZXJpYWxpemVyT3duZXI6OmZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFu
ZGxlLCB2b2lkKiBjb250ZXh0KQoreworICAgIGF1dG8qIGpzVGVzdFNlcmlhbGl6ZXIgPSBqc0Nh
c3Q8SlNUZXN0U2VyaWFsaXplcio+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKKyAgICBhdXRv
JiB3b3JsZCA9ICpzdGF0aWNfY2FzdDxET01XcmFwcGVyV29ybGQqPihjb250ZXh0KTsKKyAgICB1
bmNhY2hlV3JhcHBlcih3b3JsZCwgJmpzVGVzdFNlcmlhbGl6ZXItPndyYXBwZWQoKSwganNUZXN0
U2VyaWFsaXplcik7Cit9CisKKyNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCisjaWYgUExB
VEZPUk0oV0lOKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ0ODMpCitleHRlcm4gIkMiIHsg
ZXh0ZXJuIHZvaWQgKCpjb25zdCBfX2lkZW50aWZpZXIoIj8/XzdUZXN0U2VyaWFsaXplckBXZWJD
b3JlQEA2QkAiKVtdKSgpOyB9CisjZWxzZQorZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkKiBfWlRW
TjdXZWJDb3JlMTRUZXN0U2VyaWFsaXplckVbXTsgfQorI2VuZGlmCisjZW5kaWYKKworSlNDOjpK
U1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBUZXN0U2VyaWFsaXplciogaW1wbCkKK3sKKyAgICBpZiAoIWltcGwp
CisgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICByZXR1cm4gY3JlYXRlTmV3V3JhcHBlcjxK
U1Rlc3RTZXJpYWxpemVyPihnbG9iYWxPYmplY3QsIGltcGwpOworfQorCitKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRl
c3RTZXJpYWxpemVyKiBpbXBsKQoreworICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0dXJuIGpz
TnVsbCgpOworICAgIGlmIChKU1ZhbHVlIHJlc3VsdCA9IGdldEV4aXN0aW5nV3JhcHBlcjxKU1Rl
c3RTZXJpYWxpemVyPihnbG9iYWxPYmplY3QsIGltcGwpKQorICAgICAgICByZXR1cm4gcmVzdWx0
OworCisjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQorICAgIHZvaWQqIGFjdHVhbFZUYWJs
ZVBvaW50ZXIgPSAqKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihpbXBsKSk7CisjaWYgUExBVEZP
Uk0oV0lOKQorICAgIHZvaWQqIGV4cGVjdGVkVlRhYmxlUG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KF9faWRlbnRpZmllcigiPz9fN1Rlc3RTZXJpYWxpemVyQFdlYkNvcmVAQDZCQCIp
KTsKKyNlbHNlCisgICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gJl9aVFZON1dlYkNv
cmUxNFRlc3RTZXJpYWxpemVyRVsyXTsKKyNpZiBDT01QSUxFUihDTEFORykKKyAgICAvLyBJZiB0
aGlzIGZhaWxzIFRlc3RTZXJpYWxpemVyIGRvZXMgbm90IGhhdmUgYSB2dGFibGUsIHNvIHlvdSBu
ZWVkIHRvIGFkZCB0aGUKKyAgICAvLyBJbXBsZW1lbnRhdGlvbkxhY2tzVlRhYmxlIGF0dHJpYnV0
ZSB0byB0aGUgaW50ZXJmYWNlIGRlZmluaXRpb24KKyAgICBDT01QSUxFX0FTU0VSVChfX2lzX3Bv
bHltb3JwaGljKFRlc3RTZXJpYWxpemVyKSwgVGVzdFNlcmlhbGl6ZXJfaXNfbm90X3BvbHltb3Jw
aGljKTsKKyNlbmRpZgorI2VuZGlmCisgICAgLy8gSWYgeW91IGhpdCB0aGlzIGFzc2VydGlvbiB5
b3UgZWl0aGVyIGhhdmUgYSB1c2UgYWZ0ZXIgZnJlZSBidWcsIG9yCisgICAgLy8gVGVzdFNlcmlh
bGl6ZXIgaGFzIHN1YmNsYXNzZXMuIElmIFRlc3RTZXJpYWxpemVyIGhhcyBzdWJjbGFzc2VzIHRo
YXQgZ2V0IHBhc3NlZAorICAgIC8vIHRvIHRvSlMoKSB3ZSBjdXJyZW50bHkgcmVxdWlyZSBUZXN0
U2VyaWFsaXplciB5b3UgdG8gb3B0IG91dCBvZiBiaW5kaW5nIGhhcmRlbmluZworICAgIC8vIGJ5
IGFkZGluZyB0aGUgU2tpcFZUYWJsZVZhbGlkYXRpb24gYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZh
Y2UgSURMIGRlZmluaXRpb24KKyAgICBSRUxFQVNFX0FTU0VSVChhY3R1YWxWVGFibGVQb2ludGVy
ID09IGV4cGVjdGVkVlRhYmxlUG9pbnRlcik7CisjZW5kaWYKKyAgICByZXR1cm4gY3JlYXRlTmV3
V3JhcHBlcjxKU1Rlc3RTZXJpYWxpemVyPihnbG9iYWxPYmplY3QsIGltcGwpOworfQorCitUZXN0
U2VyaWFsaXplciogSlNUZXN0U2VyaWFsaXplcjo6dG9XcmFwcGVkKEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKK3sKKyAgICBpZiAoYXV0byogd3JhcHBlciA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFs
aXplcio+KHZhbHVlKSkKKyAgICAgICAgcmV0dXJuICZ3cmFwcGVyLT53cmFwcGVkKCk7CisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVyLmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdm
MGY3MmZlNDljMjNhNzY2OGNiNmM5OWQ1MzJjMGVhMmQ1OTA3ZmUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXpl
ci5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0
ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBK
U1Rlc3RTZXJpYWxpemVyX2gKKyNkZWZpbmUgSlNUZXN0U2VyaWFsaXplcl9oCisKKyNpbmNsdWRl
ICJKU0RPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJUZXN0U2VyaWFsaXplci5oIgorI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEpT
VGVzdFNlcmlhbGl6ZXIgOiBwdWJsaWMgSlNET01XcmFwcGVyPFRlc3RTZXJpYWxpemVyPiB7Citw
dWJsaWM6CisgICAgdHlwZWRlZiBKU0RPTVdyYXBwZXI8VGVzdFNlcmlhbGl6ZXI+IEJhc2U7Cisg
ICAgc3RhdGljIEpTVGVzdFNlcmlhbGl6ZXIqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdFNlcmlhbGl6ZXI+
JiYgaW1wbCkKKyAgICB7CisgICAgICAgIEpTVGVzdFNlcmlhbGl6ZXIqIHB0ciA9IG5ldyAoTm90
TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0U2VyaWFsaXplcj4oZ2xvYmFsT2JqZWN0LT52
bSgpLmhlYXApKSBKU1Rlc3RTZXJpYWxpemVyKHN0cnVjdHVyZSwgKmdsb2JhbE9iamVjdCwgV1RG
TW92ZShpbXBsKSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52
bSgpKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNTdGF0aWNQcm9wZXJ0eVRhYmxlID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU09i
amVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Cisg
ICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCopOworICAgIHN0YXRpYyBUZXN0U2VyaWFsaXplciogdG9XcmFwcGVkKEpTQzo6SlNW
YWx1ZSk7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOworCisgICAgREVD
TEFSRV9JTkZPOworCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1Zh
bHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0Kik7Citwcm90ZWN0ZWQ6CisgICAgSlNUZXN0U2VyaWFsaXplcihKU0M6OlN0cnVjdHVyZSos
IEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RTZXJpYWxpemVyPiYmKTsKKworICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYgdm0pCisgICAgeworICAgICAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSk7CisgICAgICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKKyAgICB9CisK
K307CisKK2NsYXNzIEpTVGVzdFNlcmlhbGl6ZXJPd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5k
bGVPd25lciB7CitwdWJsaWM6CisgICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xv
dFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiwgdm9pZCogY29udGV4dCk7Cit9OworCitpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3du
ZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmLCBUZXN0U2VyaWFsaXplciopCit7Cisg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEpTVGVzdFNlcmlhbGl6ZXJPd25lcj4gb3duZXI7Cisg
ICAgcmV0dXJuICZvd25lci5nZXQoKTsKK30KKworaW5saW5lIHZvaWQqIHdyYXBwZXJLZXkoVGVz
dFNlcmlhbGl6ZXIqIHdyYXBwYWJsZU9iamVjdCkKK3sKKyAgICByZXR1cm4gd3JhcHBhYmxlT2Jq
ZWN0OworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFs
T2JqZWN0KiwgVGVzdFNlcmlhbGl6ZXIqKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RT
ZXJpYWxpemVyJiBpbXBsKSB7IHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICZpbXBs
KTsgfQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RP
TUdsb2JhbE9iamVjdCosIFRlc3RTZXJpYWxpemVyKik7CisKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVyV2l0aE1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplcldpdGhNYXAuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjkxYjczMmNhZjJkYmI2MjQ5MTI4ZTEyNTU4ZTA0NzkwNTVmOGEwYzMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
U2VyaWFsaXplcldpdGhNYXAuY3BwCkBAIC0wLDAgKzEsMzAwIEBACisvKgorICAgIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1Rlc3RTZXJpYWxpemVy
V2l0aE1hcC5oIgorCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01D
b25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAi
VVJMLmgiCisjaW5jbHVkZSA8cnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5oPgorI2luY2x1ZGUg
PHJ1bnRpbWUvSlNTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQXR0cmlidXRlcworCitK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZXJXaXRoTWFwU3RyQXR0cmlidXRlKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwor
Ym9vbCBzZXRKU1Rlc3RTZXJpYWxpemVyV2l0aE1hcFN0ckF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVyV2l0aE1hcEludEF0dHJpYnV0ZShKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0
SlNUZXN0U2VyaWFsaXplcldpdGhNYXBJbnRBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0U2VyaWFsaXplcldpdGhNYXBDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0U2Vy
aWFsaXplcldpdGhNYXBDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdFNlcmlhbGl6ZXJXaXRoTWFwUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oRXhlY1N0
YXRlKiBzdGF0ZSk7CisKK2NsYXNzIEpTVGVzdFNlcmlhbGl6ZXJXaXRoTWFwUHJvdG90eXBlIDog
cHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0M6
OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0U2VyaWFsaXplcldpdGhN
YXBQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNU
ZXN0U2VyaWFsaXplcldpdGhNYXBQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjph
bGxvY2F0ZUNlbGw8SlNUZXN0U2VyaWFsaXplcldpdGhNYXBQcm90b3R5cGU+KHZtLmhlYXApKSBK
U1Rlc3RTZXJpYWxpemVyV2l0aE1hcFByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1
cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0
cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgSlNUZXN0U2VyaWFsaXplcldpdGhNYXBQcm90b3R5cGUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQor
ICAgICAgICA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAg
ICB9CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK3R5cGVkZWYg
SlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8SlNUZXN0U2VyaWFsaXplcldpdGhNYXA+
IEpTVGVzdFNlcmlhbGl6ZXJXaXRoTWFwQ29uc3RydWN0b3I7CisKK3RlbXBsYXRlPD4gSlNWYWx1
ZSBKU1Rlc3RTZXJpYWxpemVyV2l0aE1hcENvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1
cmUoSlNDOjpWTSYgdm0sIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7
CisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LmZ1bmN0aW9u
UHJvdG90eXBlKCk7Cit9CisKK3RlbXBsYXRlPD4gdm9pZCBKU1Rlc3RTZXJpYWxpemVyV2l0aE1h
cENvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5wcm90b3R5cGUsIEpTVGVzdFNlcmlhbGl6ZXJXaXRoTWFwOjpwcm90b3R5cGUodm0sICZnbG9i
YWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CisgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBT
dHJpbmcoQVNDSUlMaXRlcmFsKCJUZXN0U2VyaWFsaXplcldpdGhNYXAiKSkpLCBSZWFkT25seSB8
IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwg
anNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9udEVudW0pOworfQorCit0ZW1wbGF0ZTw+IGNvbnN0
IENsYXNzSW5mbyBKU1Rlc3RTZXJpYWxpemVyV2l0aE1hcENvbnN0cnVjdG9yOjpzX2luZm8gPSB7
ICJUZXN0U2VyaWFsaXplcldpdGhNYXAiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEpTVGVzdFNlcmlhbGl6ZXJXaXRoTWFwQ29uc3RydWN0b3IpIH07CisKKy8qIEhhc2gg
dGFibGUgZm9yIHByb3RvdHlwZSAqLworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNU
ZXN0U2VyaWFsaXplcldpdGhNYXBQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KK3sKKyAgICB7ICJj
b25zdHJ1Y3RvciIsIERvbnRFbnVtLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nh
c3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdFNlcmlhbGl6ZXJXaXRoTWFwQ29u
c3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFs
dWVGdW5jPihzZXRKU1Rlc3RTZXJpYWxpemVyV2l0aE1hcENvbnN0cnVjdG9yKSB9IH0sCisgICAg
eyAic3RyQXR0cmlidXRlIiwgQ3VzdG9tQWNjZXNzb3IsIE5vSW50cmluc2ljLCB7IChpbnRwdHJf
dClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0U2VyaWFsaXpl
cldpdGhNYXBTdHJBdHRyaWJ1dGUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5
U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RTZXJpYWxpemVyV2l0aE1hcFN0ckF0dHJpYnV0
ZSkgfSB9LAorICAgIHsgImludEF0dHJpYnV0ZSIsIEN1c3RvbUFjY2Vzc29yLCBOb0ludHJpbnNp
YywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpz
VGVzdFNlcmlhbGl6ZXJXaXRoTWFwSW50QXR0cmlidXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2Fz
dDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0U2VyaWFsaXplcldpdGhN
YXBJbnRBdHRyaWJ1dGUpIH0gfSwKKyAgICB7ICJ0b0pTT04iLCBKU0M6OkZ1bmN0aW9uLCBOb0lu
dHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdFNl
cmlhbGl6ZXJXaXRoTWFwUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04pLCAoaW50cHRyX3QpICgwKSB9
IH0sCit9OworCitjb25zdCBDbGFzc0luZm8gSlNUZXN0U2VyaWFsaXplcldpdGhNYXBQcm90b3R5
cGU6OnNfaW5mbyA9IHsgIlRlc3RTZXJpYWxpemVyV2l0aE1hcFByb3RvdHlwZSIsICZCYXNlOjpz
X2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0U2VyaWFsaXplcldpdGhNYXBQcm90
b3R5cGUpIH07CisKK3ZvaWQgSlNUZXN0U2VyaWFsaXplcldpdGhNYXBQcm90b3R5cGU6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAg
cmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBKU1Rlc3RTZXJpYWxpemVyV2l0aE1hcFByb3RvdHlw
ZVRhYmxlVmFsdWVzLCAqdGhpcyk7Cit9CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3RTZXJpYWxp
emVyV2l0aE1hcDo6c19pbmZvID0geyAiVGVzdFNlcmlhbGl6ZXJXaXRoTWFwIiwgJkJhc2U6OnNf
aW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RTZXJpYWxpemVyV2l0aE1hcCkgfTsK
KworSlNUZXN0U2VyaWFsaXplcldpdGhNYXA6OkpTVGVzdFNlcmlhbGl6ZXJXaXRoTWFwKFN0cnVj
dHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWY8VGVz
dFNlcmlhbGl6ZXJXaXRoTWFwPiYmIGltcGwpCisgICAgOiBKU0RPTVdyYXBwZXI8VGVzdFNlcmlh
bGl6ZXJXaXRoTWFwPihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSkKK3sK
K30KKworSlNPYmplY3QqIEpTVGVzdFNlcmlhbGl6ZXJXaXRoTWFwOjpjcmVhdGVQcm90b3R5cGUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBKU1Rl
c3RTZXJpYWxpemVyV2l0aE1hcFByb3RvdHlwZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIEpT
VGVzdFNlcmlhbGl6ZXJXaXRoTWFwUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2Jh
bE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSkpOworfQorCitKU09iamVj
dCogSlNUZXN0U2VyaWFsaXplcldpdGhNYXA6OnByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RT
ZXJpYWxpemVyV2l0aE1hcD4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisKK3ZvaWQgSlNUZXN0U2Vy
aWFsaXplcldpdGhNYXA6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCit7CisgICAgSlNUZXN0
U2VyaWFsaXplcldpdGhNYXAqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3RTZXJpYWxp
emVyV2l0aE1hcCo+KGNlbGwpOworICAgIHRoaXNPYmplY3QtPkpTVGVzdFNlcmlhbGl6ZXJXaXRo
TWFwOjp+SlNUZXN0U2VyaWFsaXplcldpdGhNYXAoKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNU
ZXN0U2VyaWFsaXplcldpdGhNYXBTdHJBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKKyAgICBKU1ZhbHVlIGRlY29kZWRU
aGlzVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKTsKKyAgICBhdXRvKiBjYXN0ZWRU
aGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxpemVyV2l0aE1hcCo+KGRlY29kZWRUaGlz
VmFsdWUpOworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKKyAgICAgICAgcmV0dXJu
IHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RTZXJpYWxpemVyV2l0aE1hcCIsICJz
dHJBdHRyaWJ1dGUiKTsKKyAgICB9CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBs
LnN0ckF0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9
CisKKworRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplcldpdGhNYXBJbnRBdHRyaWJ1dGUo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
Cit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVl
KTsKKyAgICBKU1ZhbHVlIGRlY29kZWRUaGlzVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKTsKKyAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxp
emVyV2l0aE1hcCo+KGRlY29kZWRUaGlzVmFsdWUpOworICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRl
c3RTZXJpYWxpemVyV2l0aE1hcCIsICJpbnRBdHRyaWJ1dGUiKTsKKyAgICB9CisgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVt
YmVyKGltcGwuaW50QXR0cmlidXRlKCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKK30KKworCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVyV2l0aE1hcENvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQoreworICAgIEpTVGVzdFNlcmlhbGl6ZXJXaXRoTWFwUHJvdG90eXBlKiBkb21PYmpl
Y3QgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6ZXJXaXRoTWFwUHJvdG90eXBlKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmICghZG9tT2JqZWN0KQorICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1Rlc3RTZXJpYWxpemVyV2l0aE1hcDo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGRv
bU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpKTsKK30KKworYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVy
V2l0aE1hcENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBKU1Rlc3RTZXJpYWxpemVyV2l0
aE1hcFByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxpemVy
V2l0aE1hcFByb3RvdHlwZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAo
VU5MSUtFTFkoIWRvbU9iamVjdCkpIHsKKyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQt
aW4gY29uc3RydWN0b3IKKyAgICByZXR1cm4gZG9tT2JqZWN0LT5wdXREaXJlY3Qoc3RhdGUtPnZt
KCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIHZhbHVlKTsKK30KKworYm9v
bCBzZXRKU1Rlc3RTZXJpYWxpemVyV2l0aE1hcFN0ckF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkK
K3sKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CisgICAgSlNUZXN0U2VyaWFsaXplcldpdGhNYXAq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6ZXJXaXRoTWFwKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKKyAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RTZXJp
YWxpemVyV2l0aE1hcCIsICJzdHJBdHRyaWJ1dGUiKTsKKyAgICB9CisgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBTdHJpbmcgbmF0aXZlVmFsdWUgPSB2YWx1ZS50
b1N0cmluZyhzdGF0ZSktPnZhbHVlKHN0YXRlKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGltcGwuc2V0U3RyQXR0
cmlidXRlKG5hdGl2ZVZhbHVlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCitib29sIHNldEpT
VGVzdFNlcmlhbGl6ZXJXaXRoTWFwSW50QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVT
RURfUEFSQU0odGhpc1ZhbHVlKTsKKyAgICBKU1Rlc3RTZXJpYWxpemVyV2l0aE1hcCogY2FzdGVk
VGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXplcldpdGhNYXAqPihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgeworICAg
ICAgICByZXR1cm4gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdFNlcmlhbGl6ZXJX
aXRoTWFwIiwgImludEF0dHJpYnV0ZSIpOworICAgIH0KKyAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOworICAgIHVpbnQxNl90IG5hdGl2ZVZhbHVlID0gdG9VSW50MTYoc3Rh
dGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGltcGwuc2V0SW50QXR0
cmlidXRlKG5hdGl2ZVZhbHVlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCitKU1ZhbHVlIEpT
VGVzdFNlcmlhbGl6ZXJXaXRoTWFwOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9y
PEpTVGVzdFNlcmlhbGl6ZXJXaXRoTWFwQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpT
RE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0U2VyaWFsaXplcldpdGhNYXBQcm90b3R5cGVGdW5jdGlvblRvSlNP
TihFeGVjU3RhdGUqIHN0YXRlKQoreworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRo
aXNWYWx1ZSgpOworICAgIGF1dG8gY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2Vy
aWFsaXplcldpdGhNYXAqPih0aGlzVmFsdWUpOworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpCisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdFNlcmlh
bGl6ZXJXaXRoTWFwIiwgInRvSlNPTiIpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
Y2FzdGVkVGhpcywgSlNUZXN0U2VyaWFsaXplcldpdGhNYXA6OmluZm8oKSk7CisKKyAgICBKU09i
amVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3Qoc3RhdGUpOworICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qoc3RhdGUt
PnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoc3RhdGUsICJzdHJBdHRyaWJ1dGUiKSwganNT
dHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuc3RyQXR0cmlidXRlKCkpKTsKKyAgICByZXN1bHQt
PnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgImlu
dEF0dHJpYnV0ZSIpLCBqc051bWJlcihpbXBsLmludEF0dHJpYnV0ZSgpLnZhbHVlKCkpLnRvU3Ry
aW5nKHN0YXRlKSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisK
K2Jvb2wgSlNUZXN0U2VyaWFsaXplcldpdGhNYXBPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3sKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKKyAgICBVTlVTRURfUEFS
QU0odmlzaXRvcik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEpTVGVzdFNlcmlhbGl6
ZXJXaXRoTWFwT3duZXI6OmZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxl
LCB2b2lkKiBjb250ZXh0KQoreworICAgIGF1dG8qIGpzVGVzdFNlcmlhbGl6ZXJXaXRoTWFwID0g
anNDYXN0PEpTVGVzdFNlcmlhbGl6ZXJXaXRoTWFwKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkp
OworICAgIGF1dG8mIHdvcmxkID0gKnN0YXRpY19jYXN0PERPTVdyYXBwZXJXb3JsZCo+KGNvbnRl
eHQpOworICAgIHVuY2FjaGVXcmFwcGVyKHdvcmxkLCAmanNUZXN0U2VyaWFsaXplcldpdGhNYXAt
PndyYXBwZWQoKSwganNUZXN0U2VyaWFsaXplcldpdGhNYXApOworfQorCisjaWYgRU5BQkxFKEJJ
TkRJTkdfSU5URUdSSVRZKQorI2lmIFBMQVRGT1JNKFdJTikKKyNwcmFnbWEgd2FybmluZyhkaXNh
YmxlOiA0NDgzKQorZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkICgqY29uc3QgX19pZGVudGlmaWVy
KCI/P183VGVzdFNlcmlhbGl6ZXJXaXRoTWFwQFdlYkNvcmVAQDZCQCIpW10pKCk7IH0KKyNlbHNl
CitleHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQqIF9aVFZON1dlYkNvcmUyMVRlc3RTZXJpYWxpemVy
V2l0aE1hcEVbXTsgfQorI2VuZGlmCisjZW5kaWYKKworSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNy
ZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBU
ZXN0U2VyaWFsaXplcldpdGhNYXAqIGltcGwpCit7CisgICAgaWYgKCFpbXBsKQorICAgICAgICBy
ZXR1cm4ganNOdWxsKCk7CisgICAgcmV0dXJuIGNyZWF0ZU5ld1dyYXBwZXI8SlNUZXN0U2VyaWFs
aXplcldpdGhNYXA+KGdsb2JhbE9iamVjdCwgaW1wbCk7Cit9CisKK0pTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdFNl
cmlhbGl6ZXJXaXRoTWFwKiBpbXBsKQoreworICAgIGlmICghaW1wbCkKKyAgICAgICAgcmV0dXJu
IGpzTnVsbCgpOworICAgIGlmIChKU1ZhbHVlIHJlc3VsdCA9IGdldEV4aXN0aW5nV3JhcHBlcjxK
U1Rlc3RTZXJpYWxpemVyV2l0aE1hcD4oZ2xvYmFsT2JqZWN0LCBpbXBsKSkKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKworI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKKyAgICB2b2lkKiBh
Y3R1YWxWVGFibGVQb2ludGVyID0gKihyZWludGVycHJldF9jYXN0PHZvaWQqKj4oaW1wbCkpOwor
I2lmIFBMQVRGT1JNKFdJTikKKyAgICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihfX2lkZW50aWZpZXIoIj8/XzdUZXN0U2VyaWFsaXplcldpdGhN
YXBAV2ViQ29yZUBANkJAIikpOworI2Vsc2UKKyAgICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50
ZXIgPSAmX1pUVk43V2ViQ29yZTIxVGVzdFNlcmlhbGl6ZXJXaXRoTWFwRVsyXTsKKyNpZiBDT01Q
SUxFUihDTEFORykKKyAgICAvLyBJZiB0aGlzIGZhaWxzIFRlc3RTZXJpYWxpemVyV2l0aE1hcCBk
b2VzIG5vdCBoYXZlIGEgdnRhYmxlLCBzbyB5b3UgbmVlZCB0byBhZGQgdGhlCisgICAgLy8gSW1w
bGVtZW50YXRpb25MYWNrc1ZUYWJsZSBhdHRyaWJ1dGUgdG8gdGhlIGludGVyZmFjZSBkZWZpbml0
aW9uCisgICAgQ09NUElMRV9BU1NFUlQoX19pc19wb2x5bW9ycGhpYyhUZXN0U2VyaWFsaXplcldp
dGhNYXApLCBUZXN0U2VyaWFsaXplcldpdGhNYXBfaXNfbm90X3BvbHltb3JwaGljKTsKKyNlbmRp
ZgorI2VuZGlmCisgICAgLy8gSWYgeW91IGhpdCB0aGlzIGFzc2VydGlvbiB5b3UgZWl0aGVyIGhh
dmUgYSB1c2UgYWZ0ZXIgZnJlZSBidWcsIG9yCisgICAgLy8gVGVzdFNlcmlhbGl6ZXJXaXRoTWFw
IGhhcyBzdWJjbGFzc2VzLiBJZiBUZXN0U2VyaWFsaXplcldpdGhNYXAgaGFzIHN1YmNsYXNzZXMg
dGhhdCBnZXQgcGFzc2VkCisgICAgLy8gdG8gdG9KUygpIHdlIGN1cnJlbnRseSByZXF1aXJlIFRl
c3RTZXJpYWxpemVyV2l0aE1hcCB5b3UgdG8gb3B0IG91dCBvZiBiaW5kaW5nIGhhcmRlbmluZwor
ICAgIC8vIGJ5IGFkZGluZyB0aGUgU2tpcFZUYWJsZVZhbGlkYXRpb24gYXR0cmlidXRlIHRvIHRo
ZSBpbnRlcmZhY2UgSURMIGRlZmluaXRpb24KKyAgICBSRUxFQVNFX0FTU0VSVChhY3R1YWxWVGFi
bGVQb2ludGVyID09IGV4cGVjdGVkVlRhYmxlUG9pbnRlcik7CisjZW5kaWYKKyAgICByZXR1cm4g
Y3JlYXRlTmV3V3JhcHBlcjxKU1Rlc3RTZXJpYWxpemVyV2l0aE1hcD4oZ2xvYmFsT2JqZWN0LCBp
bXBsKTsKK30KKworVGVzdFNlcmlhbGl6ZXJXaXRoTWFwKiBKU1Rlc3RTZXJpYWxpemVyV2l0aE1h
cDo6dG9XcmFwcGVkKEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAoYXV0byogd3JhcHBl
ciA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXplcldpdGhNYXAqPih2YWx1ZSkpCisgICAg
ICAgIHJldHVybiAmd3JhcHBlci0+d3JhcHBlZCgpOworICAgIHJldHVybiBudWxscHRyOworfQor
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U2VyaWFsaXplcldpdGhNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVyV2l0aE1hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZiOTYwYTQ5
NmM5YjdlNzkxZDAyODMwZjA5MTI5NTIwMzZmMmFjMWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplcldpdGhN
YXAuaApAQCAtMCwwICsxLDkwIEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYg
SlNUZXN0U2VyaWFsaXplcldpdGhNYXBfaAorI2RlZmluZSBKU1Rlc3RTZXJpYWxpemVyV2l0aE1h
cF9oCisKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJUZXN0U2VyaWFsaXpl
cldpdGhNYXAuaCIKKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBKU1Rlc3RTZXJpYWxpemVyV2l0aE1hcCA6IHB1YmxpYyBKU0RP
TVdyYXBwZXI8VGVzdFNlcmlhbGl6ZXJXaXRoTWFwPiB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBK
U0RPTVdyYXBwZXI8VGVzdFNlcmlhbGl6ZXJXaXRoTWFwPiBCYXNlOworICAgIHN0YXRpYyBKU1Rl
c3RTZXJpYWxpemVyV2l0aE1hcCogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0U2VyaWFsaXplcldpdGhNYXA+
JiYgaW1wbCkKKyAgICB7CisgICAgICAgIEpTVGVzdFNlcmlhbGl6ZXJXaXRoTWFwKiBwdHIgPSBu
ZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdFNlcmlhbGl6ZXJXaXRoTWFwPihn
bG9iYWxPYmplY3QtPnZtKCkuaGVhcCkpIEpTVGVzdFNlcmlhbGl6ZXJXaXRoTWFwKHN0cnVjdHVy
ZSwgKmdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisK
KyAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNTdGF0aWNQcm9wZXJ0eVRhYmxlID0gZmFsc2U7CisK
KyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6
OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHByb3RvdHlwZShK
U0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBUZXN0U2VyaWFsaXpl
cldpdGhNYXAqIHRvV3JhcHBlZChKU0M6OkpTVmFsdWUpOworICAgIHN0YXRpYyB2b2lkIGRlc3Ry
b3koSlNDOjpKU0NlbGwqKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBKU0M6
OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6
OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOworcHJvdGVjdGVkOgorICAgIEpTVGVz
dFNlcmlhbGl6ZXJXaXRoTWFwKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBS
ZWY8VGVzdFNlcmlhbGl6ZXJXaXRoTWFwPiYmKTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
SlNDOjpWTSYgdm0pCisgICAgeworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Cisg
ICAgICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKKyAgICB9CisKK307CisKK2NsYXNzIEpT
VGVzdFNlcmlhbGl6ZXJXaXRoTWFwT3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIg
eworcHVibGljOgorICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9y
Jik7CisgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4s
IHZvaWQqIGNvbnRleHQpOworfTsKKworaW5saW5lIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFw
cGVyT3duZXIoRE9NV3JhcHBlcldvcmxkJiwgVGVzdFNlcmlhbGl6ZXJXaXRoTWFwKikKK3sKKyAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SlNUZXN0U2VyaWFsaXplcldpdGhNYXBPd25lcj4gb3du
ZXI7CisgICAgcmV0dXJuICZvd25lci5nZXQoKTsKK30KKworaW5saW5lIHZvaWQqIHdyYXBwZXJL
ZXkoVGVzdFNlcmlhbGl6ZXJXaXRoTWFwKiB3cmFwcGFibGVPYmplY3QpCit7CisgICAgcmV0dXJu
IHdyYXBwYWJsZU9iamVjdDsKK30KKworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUq
LCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RTZXJpYWxpemVyV2l0aE1hcCopOworaW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgVGVzdFNlcmlhbGl6ZXJXaXRoTWFwJiBpbXBsKSB7IHJldHVybiB0b0pT
KHN0YXRlLCBnbG9iYWxPYmplY3QsICZpbXBsKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNy
ZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RTZXJpYWxpemVy
V2l0aE1hcCopOworCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0U2Vy
aWFsaXplci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9N
VGVzdFNlcmlhbGl6ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41OGIzN2VhMzA4NDA1ZDdmODEyYjA5MGQ1OTU1
OTQ3ZTNlNTMwOTFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdFNlcmlhbGl6ZXIuaApAQCAtMCwwICsxLDM1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11
ZWwgV2VpbmlnIDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgPFdlYkNvcmUvRE9NT2JqZWN0Lmg+CisKK0Bj
bGFzcyBOU1N0cmluZzsKKworV0VCS0lUX0NMQVNTX0FWQUlMQUJMRV9NQUMoOTg3Nl81KQorV0VC
Q09SRV9FWFBPUlQgQGludGVyZmFjZSBET01UZXN0U2VyaWFsaXplciA6IERPTU9iamVjdAorQHBy
b3BlcnR5IChjb3B5KSBOU1N0cmluZyAqc3RyQXR0cmlidXRlOworQHByb3BlcnR5IHVuc2lnbmVk
IHNob3J0IGludEF0dHJpYnV0ZTsKK0BlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RTZXJpYWxpemVyLm1tIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdFNlcmlhbGl6ZXIubW0KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZDIxMTVkN2ZmNTdiOTBkOWFjMzhjOTc1N2U1ZTA4Y2Y0ZGQ0ZmM4OAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RP
TVRlc3RTZXJpYWxpemVyLm1tCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgImNv
bmZpZy5oIgorI2ltcG9ydCAiRE9NSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiRE9NVGVzdFNlcmlh
bGl6ZXIuaCIKKworI2ltcG9ydCAiRE9NTm9kZUludGVybmFsLmgiCisjaW1wb3J0ICJET01UZXN0
U2VyaWFsaXplckludGVybmFsLmgiCisjaW1wb3J0ICJFeGNlcHRpb25IYW5kbGVycy5oIgorI2lt
cG9ydCAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCisjaW1wb3J0ICJUZXN0U2VyaWFsaXplci5o
IgorI2ltcG9ydCAiVGhyZWFkQ2hlY2suaCIKKyNpbXBvcnQgIlVSTC5oIgorI2ltcG9ydCAiV2Vi
Q29yZU9iakNFeHRyYXMuaCIKKyNpbXBvcnQgIldlYlNjcmlwdE9iamVjdFByaXZhdGUuaCIKKyNp
bXBvcnQgPHd0Zi9HZXRQdHIuaD4KKworI2RlZmluZSBJTVBMIHJlaW50ZXJwcmV0X2Nhc3Q8V2Vi
Q29yZTo6VGVzdFNlcmlhbGl6ZXIqPihfaW50ZXJuYWwpCisKK0BpbXBsZW1lbnRhdGlvbiBET01U
ZXN0U2VyaWFsaXplcgorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBpZiAoV2ViQ29yZU9iakNT
Y2hlZHVsZURlYWxsb2NhdGVPbk1haW5UaHJlYWQoW0RPTVRlc3RTZXJpYWxpemVyIGNsYXNzXSwg
c2VsZikpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChfaW50ZXJuYWwpCisgICAgICAgIElN
UEwtPmRlcmVmKCk7CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistIChOU1N0cmluZyAqKXN0
ckF0dHJpYnV0ZQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
KyAgICByZXR1cm4gSU1QTC0+c3RyQXR0cmlidXRlKCk7Cit9CisKKy0gKHZvaWQpc2V0U3RyQXR0
cmlidXRlOihOU1N0cmluZyAqKW5ld1N0ckF0dHJpYnV0ZQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBJTVBMLT5zZXRTdHJBdHRyaWJ1dGUobmV3U3Ry
QXR0cmlidXRlKTsKK30KKworLSAodW5zaWduZWQgc2hvcnQpaW50QXR0cmlidXRlCit7CisgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIHJldHVybiBJTVBMLT5p
bnRBdHRyaWJ1dGUoKTsKK30KKworLSAodm9pZClzZXRJbnRBdHRyaWJ1dGU6KHVuc2lnbmVkIHNo
b3J0KW5ld0ludEF0dHJpYnV0ZQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBJTVBMLT5zZXRJbnRBdHRyaWJ1dGUobmV3SW50QXR0cmlidXRlKTsKK30K
KworQGVuZAorCitXZWJDb3JlOjpUZXN0U2VyaWFsaXplciogY29yZShET01UZXN0U2VyaWFsaXpl
ciAqd3JhcHBlcikKK3sKKyAgICByZXR1cm4gd3JhcHBlciA/IHJlaW50ZXJwcmV0X2Nhc3Q8V2Vi
Q29yZTo6VGVzdFNlcmlhbGl6ZXIqPih3cmFwcGVyLT5faW50ZXJuYWwpIDogMDsKK30KKworRE9N
VGVzdFNlcmlhbGl6ZXIgKmtpdChXZWJDb3JlOjpUZXN0U2VyaWFsaXplciogdmFsdWUpCit7Cisg
ICAgV2ViQ29yZVRocmVhZFZpb2xhdGlvbkNoZWNrUm91bmRPbmUoKTsKKyAgICBpZiAoIXZhbHVl
KQorICAgICAgICByZXR1cm4gbmlsOworICAgIGlmIChET01UZXN0U2VyaWFsaXplciAqd3JhcHBl
ciA9IGdldERPTVdyYXBwZXIodmFsdWUpKQorICAgICAgICByZXR1cm4gW1t3cmFwcGVyIHJldGFp
bl0gYXV0b3JlbGVhc2VdOworICAgIERPTVRlc3RTZXJpYWxpemVyICp3cmFwcGVyID0gW1tET01U
ZXN0U2VyaWFsaXplciBhbGxvY10gX2luaXRdOworICAgIHdyYXBwZXItPl9pbnRlcm5hbCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8RE9NT2JqZWN0SW50ZXJuYWwqPih2YWx1ZSk7CisgICAgdmFsdWUtPnJl
ZigpOworICAgIGFkZERPTVdyYXBwZXIod3JhcHBlciwgdmFsdWUpOworICAgIHJldHVybiBbd3Jh
cHBlciBhdXRvcmVsZWFzZV07Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0U2VyaWFsaXplckludGVybmFsLmggYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0U2VyaWFsaXplckludGVy
bmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZTQ2NDIxM2ZhNDBjZTRhYTkwMjRjMWI3ZmZkMWQ4ZTU1MTQyM2Jm
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9PYmpDL0RPTVRlc3RTZXJpYWxpemVySW50ZXJuYWwuaApAQCAtMCwwICsxLDM0IEBACisvKgor
ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgor
ICogVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbXBvcnQgPFdlYkNvcmUvRE9NVGVzdFNlcmlhbGl6ZXIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworY2xhc3MgVGVzdFNlcmlhbGl6ZXI7Cit9CisKK1dFQkNPUkVfRVhQT1JUIFdlYkNv
cmU6OlRlc3RTZXJpYWxpemVyKiBjb3JlKERPTVRlc3RTZXJpYWxpemVyICopOworV0VCQ09SRV9F
WFBPUlQgRE9NVGVzdFNlcmlhbGl6ZXIgKmtpdChXZWJDb3JlOjpUZXN0U2VyaWFsaXplciopOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9N
VGVzdFNlcmlhbGl6ZXJXaXRoTWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvT2JqQy9ET01UZXN0U2VyaWFsaXplcldpdGhNYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NmQ0OTM1
ZGQxNjRjN2JmMjcwMzNhNzExYmQ4YTlmOWE3YzYzMjE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdFNlcmlhbGl6ZXJX
aXRoTWFwLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyA8c2FtLndlaW5pZ0BnbWFpbC5j
b20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0
IDxXZWJDb3JlL0RPTU9iamVjdC5oPgorCitAY2xhc3MgTlNTdHJpbmc7CisKK1dFQktJVF9DTEFT
U19BVkFJTEFCTEVfTUFDKDk4NzZfNSkKK1dFQkNPUkVfRVhQT1JUIEBpbnRlcmZhY2UgRE9NVGVz
dFNlcmlhbGl6ZXJXaXRoTWFwIDogRE9NT2JqZWN0CitAcHJvcGVydHkgKGNvcHkpIE5TU3RyaW5n
ICpzdHJBdHRyaWJ1dGU7CitAcHJvcGVydHkgdW5zaWduZWQgc2hvcnQgaW50QXR0cmlidXRlOwor
QGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09i
akMvRE9NVGVzdFNlcmlhbGl6ZXJXaXRoTWFwLm1tIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdFNlcmlhbGl6ZXJXaXRoTWFwLm1tCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjI3YTIwNTNkODRlNDQxY2MzZDA4ODg2MWZhNGRkOGNmZGFlY2JkMzYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0U2Vy
aWFsaXplcldpdGhNYXAubW0KQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJET01JbnRlcm5hbC5oIgorCisjaW1wb3J0ICJET01UZXN0U2VyaWFs
aXplcldpdGhNYXAuaCIKKworI2ltcG9ydCAiRE9NTm9kZUludGVybmFsLmgiCisjaW1wb3J0ICJE
T01UZXN0U2VyaWFsaXplcldpdGhNYXBJbnRlcm5hbC5oIgorI2ltcG9ydCAiRXhjZXB0aW9uSGFu
ZGxlcnMuaCIKKyNpbXBvcnQgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgorI2ltcG9ydCAiVGVz
dFNlcmlhbGl6ZXJXaXRoTWFwLmgiCisjaW1wb3J0ICJUaHJlYWRDaGVjay5oIgorI2ltcG9ydCAi
VVJMLmgiCisjaW1wb3J0ICJXZWJDb3JlT2JqQ0V4dHJhcy5oIgorI2ltcG9ydCAiV2ViU2NyaXB0
T2JqZWN0UHJpdmF0ZS5oIgorI2ltcG9ydCA8d3RmL0dldFB0ci5oPgorCisjZGVmaW5lIElNUEwg
cmVpbnRlcnByZXRfY2FzdDxXZWJDb3JlOjpUZXN0U2VyaWFsaXplcldpdGhNYXAqPihfaW50ZXJu
YWwpCisKK0BpbXBsZW1lbnRhdGlvbiBET01UZXN0U2VyaWFsaXplcldpdGhNYXAKKworLSAodm9p
ZClkZWFsbG9jCit7CisgICAgaWYgKFdlYkNvcmVPYmpDU2NoZWR1bGVEZWFsbG9jYXRlT25NYWlu
VGhyZWFkKFtET01UZXN0U2VyaWFsaXplcldpdGhNYXAgY2xhc3NdLCBzZWxmKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKF9pbnRlcm5hbCkKKyAgICAgICAgSU1QTC0+ZGVyZWYoKTsKKyAg
ICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKE5TU3RyaW5nICopc3RyQXR0cmlidXRlCit7Cisg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIHJldHVybiBJTVBM
LT5zdHJBdHRyaWJ1dGUoKTsKK30KKworLSAodm9pZClzZXRTdHJBdHRyaWJ1dGU6KE5TU3RyaW5n
ICopbmV3U3RyQXR0cmlidXRlCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOworICAgIElNUEwtPnNldFN0ckF0dHJpYnV0ZShuZXdTdHJBdHRyaWJ1dGUpOworfQor
CistICh1bnNpZ25lZCBzaG9ydClpbnRBdHRyaWJ1dGUKK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgcmV0dXJuIElNUEwtPmludEF0dHJpYnV0ZSgpOwor
fQorCistICh2b2lkKXNldEludEF0dHJpYnV0ZToodW5zaWduZWQgc2hvcnQpbmV3SW50QXR0cmli
dXRlCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIElN
UEwtPnNldEludEF0dHJpYnV0ZShuZXdJbnRBdHRyaWJ1dGUpOworfQorCitAZW5kCisKK1dlYkNv
cmU6OlRlc3RTZXJpYWxpemVyV2l0aE1hcCogY29yZShET01UZXN0U2VyaWFsaXplcldpdGhNYXAg
KndyYXBwZXIpCit7CisgICAgcmV0dXJuIHdyYXBwZXIgPyByZWludGVycHJldF9jYXN0PFdlYkNv
cmU6OlRlc3RTZXJpYWxpemVyV2l0aE1hcCo+KHdyYXBwZXItPl9pbnRlcm5hbCkgOiAwOworfQor
CitET01UZXN0U2VyaWFsaXplcldpdGhNYXAgKmtpdChXZWJDb3JlOjpUZXN0U2VyaWFsaXplcldp
dGhNYXAqIHZhbHVlKQoreworICAgIFdlYkNvcmVUaHJlYWRWaW9sYXRpb25DaGVja1JvdW5kT25l
KCk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBpZiAoRE9NVGVz
dFNlcmlhbGl6ZXJXaXRoTWFwICp3cmFwcGVyID0gZ2V0RE9NV3JhcHBlcih2YWx1ZSkpCisgICAg
ICAgIHJldHVybiBbW3dyYXBwZXIgcmV0YWluXSBhdXRvcmVsZWFzZV07CisgICAgRE9NVGVzdFNl
cmlhbGl6ZXJXaXRoTWFwICp3cmFwcGVyID0gW1tET01UZXN0U2VyaWFsaXplcldpdGhNYXAgYWxs
b2NdIF9pbml0XTsKKyAgICB3cmFwcGVyLT5faW50ZXJuYWwgPSByZWludGVycHJldF9jYXN0PERP
TU9iamVjdEludGVybmFsKj4odmFsdWUpOworICAgIHZhbHVlLT5yZWYoKTsKKyAgICBhZGRET01X
cmFwcGVyKHdyYXBwZXIsIHZhbHVlKTsKKyAgICByZXR1cm4gW3dyYXBwZXIgYXV0b3JlbGVhc2Vd
OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09i
akMvRE9NVGVzdFNlcmlhbGl6ZXJXaXRoTWFwSW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RTZXJpYWxpemVyV2l0aE1hcEludGVybmFs
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNTI2YzY3ZDViYzNkZGJjMDk4NDYzMTQxMjg4MWE2YWEwOTFlMWI0NQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9P
YmpDL0RPTVRlc3RTZXJpYWxpemVyV2l0aE1hcEludGVybmFsLmgKQEAgLTAsMCArMSwzNCBAQAor
LyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVj
dC4KKyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3Mu
cGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW1wb3J0IDxXZWJDb3JlL0RPTVRlc3RTZXJpYWxpemVyV2l0aE1hcC5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBUZXN0U2VyaWFsaXplcldpdGhNYXA7Cit9CisKK1dF
QkNPUkVfRVhQT1JUIFdlYkNvcmU6OlRlc3RTZXJpYWxpemVyV2l0aE1hcCogY29yZShET01UZXN0
U2VyaWFsaXplcldpdGhNYXAgKik7CitXRUJDT1JFX0VYUE9SVCBET01UZXN0U2VyaWFsaXplcldp
dGhNYXAgKmtpdChXZWJDb3JlOjpUZXN0U2VyaWFsaXplcldpdGhNYXAqKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXplci5pZGwg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6ZXIuaWRs
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjM1YjNhOWQwZjNiYzU1OWQ4ZmI3MmNjNWEzODlhMzI2MzE1MDBiNjIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVz
dFNlcmlhbGl6ZXIuaWRsCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zdHJBcmcsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVzdHJBcmcsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBUaGlzIElETCBmaWxlIGlzIGZv
ciB0ZXN0aW5nIHRoZSBiaW5kaW5ncyBjb2RlIGdlbmVyYXRvciBmb3IgdGhlCisvLyBzZXJpYWxp
emVyIHNwZWNpYWwgb3BlcmF0aW9uLgorCitpbnRlcmZhY2UgVGVzdFNlcmlhbGl6ZXIgeworICAg
IGF0dHJpYnV0ZSBET01TdHJpbmcgc3RyQXR0cmlidXRlOworICAgIGF0dHJpYnV0ZSB1bnNpZ25l
ZCBzaG9ydCBpbnRBdHRyaWJ1dGU7CisKKyAgICBzZXJpYWxpemVyOworfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFsaXplcldpdGhN
YXAuaWRsIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RTZXJpYWxp
emVyV2l0aE1hcC5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2UzZTk1ZTA2N2I2NmE3NWFhZTMyMjMxYzBkYTRj
MGYwZDViMzRjMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9UZXN0U2VyaWFsaXplcldpdGhNYXAuaWRsCkBAIC0wLDAgKzEsMzcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
dHJBcmcsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVzdHJBcmcsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBUaGlzIElETCBmaWxlIGlzIGZvciB0ZXN0aW5nIHRoZSBiaW5kaW5ncyBjb2RlIGdlbmVyYXRv
ciBmb3IgdGhlCisvLyBzZXJpYWxpemVyIHNwZWNpYWwgb3BlcmF0aW9uLgorCitpbnRlcmZhY2Ug
VGVzdFNlcmlhbGl6ZXJXaXRoTWFwIHsKKyAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIHN0ckF0dHJp
YnV0ZTsKKyAgICBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgaW50QXR0cmlidXRlOworCisgICAg
c2VyaWFsaXplciA9IHtzdHJBdHRyaWJ1dGUsIGludEF0dHJpYnV0ZX07Cit9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276314</attachid>
            <date>2016-04-13 04:19:48 -0700</date>
            <delta_ts>2016-04-14 05:09:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156293-20160413131958.patch</filename>
            <type>text/plain</type>
            <size>107942</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk5NDQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmVjYjllMTlmY2U5ZmY4
MzM2NWUyOWQ0YjAxYjMxOTgzMjRiMDE1NS4uMzY2ZGM5ZjhiM2YyOTBmOGNlODNmYzc1ZjcwOWUw
NjU2NDc2N2RkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2MyBAQAorMjAxNi0wNC0xMSAgQWxl
amFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKworICAgICAgICBBZGQgV2ViSURM
IHNwZWNpYWwgb3BlcmF0aW9uIHN1cHBvcnQ6IHNlcmlhbGl6ZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjI5MworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBzZXJp
YWxpemVyIHNwZWNpYWwgb3BlcmF0aW9uIGZvciBXZWJJRExzLAorICAgICAgICBjdXJyZW50IGlt
cGxlbWVudGF0aW9uIGlzIG5vdCBjb21wbGV0ZSwgaXQgYWRkcyBzdXBwb3J0IGZvcjoKKyAgICAg
ICAgICAtIGp1c3QgdGhlIGtleXdvcmQ6IHNlcmlhbGl6ZXI7IEl0IHdpbGwgcmV0dXJuIGFsbCB0
aGUgYXR0cmlidXRlcyBvZiBpbiBhbiBvYmplY3QuCisgICAgICAgICAgLSBtYXAgb2YgZW50cmll
cyB3aXRoIHRoZSBhdHRyaWJ1dGVzOiBzZXJpYWxpemVyID0ge2F0dHJpYnV0ZTEsIGF0dHJpYnV0
ZTIsIC4uLn0KKyAgICAgICAgICAtIGxpc3Qgb2YgYXR0cmlidXRlczogc2VyaWFsaXplciA9IFth
dHRyaWJ1dGUxLCBhdHRyaWJ1dGUyLCAuLi5dCisgICAgICAgICAgLSBET01TdHJpbmcgYW5kIHVu
c2lnbmVkIHNob3IgdHlwZXMKKworICAgICAgICBJdCBjcmVhdGVzIGEgdG9KU09OIG1ldGhvZCB0
aGF0IHJldHVybnMgdGhlIHNlcmlhbGl6ZWQgdmFsdWUKKyAgICAgICAgY29udmVydGVkIGludG8g
YW4gRUNNQVNjcmlwdCB2YWx1ZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gY2hlY2sgdGhlCisgICAg
ICAgIGRlZmluaXRpb24gb2YgdGhlIG9wZXJhdGlvbjoKKworICAgICAgICBodHRwOi8vaGV5Y2Ft
LmdpdGh1Yi5pby93ZWJpZGwvI2lkbC1zZXJpYWxpemVycworCisgICAgICAgIFVzZWQgdGhlIHN1
cHBvcnQgdG8gYWRkIG5ldyBBUEkgZm9yIFJUQ0ljZUNhbmRpZGF0ZSBhbmQKKyAgICAgICAgUlRD
U2Vzc2lvbkRlc2NyaXB0aW9uLgorCisgICAgICAgIFRlc3RzOiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVGVzdFNlcmlhbGl6ZXIuaWRsCisgICAgICAgICAgICAgICBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVGVzdFNlcmlhbGl6ZXJXaXRoTWFwLmlkbAorICAgICAgICAgICAgICAgZmFzdC9tZWRpYXN0
cmVhbS9SVENJY2VDYW5kaWRhdGUuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9tZWRpYXN0cmVh
bS9SVENTZXNzaW9uRGVzY3JpcHRpb24uaHRtbAorCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0
cmVhbS9SVENJY2VDYW5kaWRhdGUuaWRsOiBBZGRlZCB0aGUgc2VyaWFsaXplciBvcGVyYXRpb24u
CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24uaWRs
OiBBZGRlZCB0aGUgc2VyaWFsaXplciBvcGVyYXRpb24uCisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9u
KTogQWRkIG5ldyBvcGVyYXRpb24gdG8gdGhlIGhhc2ggdGFibGUuCisgICAgICAgIChHZW5lcmF0
ZVNlcmlhbGl6ZXJGdW5jdGlvbik6IEFkZGVkIG1ldGhvZCB0aGF0IGdlbmVyYXRlcyB0aGUKKyAg
ICAgICAgdG9KU09OIG5hdGl2ZSBmdW5jdGlvbi4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L0lETFBhcnNlci5wbTogTW9kaWZpZWQgdGhlIHNlcmlhbGl6ZXIgcGFyc2VyCisgICAgICAgIHRo
YXQgd2FzIHVudXNlZCB0byBzdXBwb3J0IHRoZSBXZWJJREwgc3BlYyBwYXJ0cy4KKyAgICAgICAg
KHBhcnNlU2VyaWFsaXplcik6CisgICAgICAgIChwYXJzZVNlcmlhbGl6ZXJSZXN0KToKKyAgICAg
ICAgKHBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm4pOgorICAgICAgICAocGFyc2VTZXJpYWxpemF0
aW9uQXR0cmlidXRlcyk6CisgICAgICAgIChhcHBseU1lbWJlckxpc3QpOgorICAgICAgICAocGFy
c2VTZXJpYWxpemF0aW9uUGF0dGVybk1hcCk6IERlbGV0ZWQuCisgICAgICAgIChwYXJzZVNlcmlh
bGl6YXRpb25QYXR0ZXJuTGlzdCk6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6a2l0KToKKyAgICAgICAgKFdlYktpdDo6Y29yZSk6CisgICAgICAgIChXZWJL
aXQ6OndyYXBUZXN0U2VyaWFsaXplcik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFs
aXplcl9maW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplcl9zZXRf
cHJvcGVydHkpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZXJfZ2V0X3Byb3Bl
cnR5KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVyX2NvbnN0cnVjdG9yKToK
KyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVyX2NsYXNzX2luaXQpOgorICAgICAg
ICAod2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZXJfaW5pdCk6CisgICAgICAgICh3ZWJraXRfZG9t
X3Rlc3Rfc2VyaWFsaXplcl9nZXRfc3RyX2F0dHJpYnV0ZSk6CisgICAgICAgICh3ZWJraXRfZG9t
X3Rlc3Rfc2VyaWFsaXplcl9zZXRfc3RyX2F0dHJpYnV0ZSk6CisgICAgICAgICh3ZWJraXRfZG9t
X3Rlc3Rfc2VyaWFsaXplcl9nZXRfaW50X2F0dHJpYnV0ZSk6CisgICAgICAgICh3ZWJraXRfZG9t
X3Rlc3Rfc2VyaWFsaXplcl9zZXRfaW50X2F0dHJpYnV0ZSk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXIuaDogQWRkZWQuCisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNlcmlh
bGl6ZXJQcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RTZXJpYWxpemVyV2l0aE1hcC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0OjpraXQpOgorICAgICAgICAoV2ViS2l0Ojpjb3JlKToKKyAgICAgICAgKFdlYktp
dDo6d3JhcFRlc3RTZXJpYWxpemVyV2l0aE1hcCk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rf
c2VyaWFsaXplcl93aXRoX21hcF9maW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rf
c2VyaWFsaXplcl93aXRoX21hcF9zZXRfcHJvcGVydHkpOgorICAgICAgICAod2Via2l0X2RvbV90
ZXN0X3NlcmlhbGl6ZXJfd2l0aF9tYXBfZ2V0X3Byb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdF9k
b21fdGVzdF9zZXJpYWxpemVyX3dpdGhfbWFwX2NvbnN0cnVjdG9yKToKKyAgICAgICAgKHdlYmtp
dF9kb21fdGVzdF9zZXJpYWxpemVyX3dpdGhfbWFwX2NsYXNzX2luaXQpOgorICAgICAgICAod2Vi
a2l0X2RvbV90ZXN0X3NlcmlhbGl6ZXJfd2l0aF9tYXBfaW5pdCk6CisgICAgICAgICh3ZWJraXRf
ZG9tX3Rlc3Rfc2VyaWFsaXplcl93aXRoX21hcF9nZXRfc3RyX2F0dHJpYnV0ZSk6CisgICAgICAg
ICh3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplcl93aXRoX21hcF9zZXRfc3RyX2F0dHJpYnV0ZSk6
CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplcl93aXRoX21hcF9nZXRfaW50X2F0
dHJpYnV0ZSk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplcl93aXRoX21hcF9z
ZXRfaW50X2F0dHJpYnV0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmpl
Y3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXJXaXRoTWFwLmg6IEFkZGVkLgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RTZXJpYWxpemVyV2l0aE1h
cFByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFNlcmlhbGl6ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNlcmlh
bGl6ZXJQcm90b3R5cGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxp
emVyUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
U2VyaWFsaXplclByb3RvdHlwZTo6SlNUZXN0U2VyaWFsaXplclByb3RvdHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVyQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVj
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVyQ29uc3RydWN0b3I6Omlu
aXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNlcmlhbGl6ZXJQ
cm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNlcmlh
bGl6ZXI6OkpTVGVzdFNlcmlhbGl6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFs
aXplcjo6Y3JlYXRlUHJvdG90eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNlcmlhbGl6
ZXI6OnByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVyOjpkZXN0
cm95KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlhbGl6ZXJTdHJBdHRyaWJ1dGUpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0U2VyaWFsaXplckludEF0dHJpYnV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RTZXJpYWxpemVyQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0U2VyaWFsaXplckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEpTVGVzdFNlcmlhbGl6ZXJTdHJBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0U2VyaWFsaXplckludEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJp
YWxpemVyOjpnZXRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RTZXJpYWxp
emVyUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04pOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2Vy
aWFsaXplck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAgICAgIChXZWJD
b3JlOjpKU1Rlc3RTZXJpYWxpemVyT3duZXI6OmZpbmFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVyOjp0b1dyYXBwZWQpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVyLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SlNUZXN0U2VyaWFsaXplcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dFNlcmlhbGl6ZXI6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RT
ZXJpYWxpemVyOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjp3cmFwcGVyT3du
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6d3JhcHBlcktleSk6CisgICAgICAgIChXZWJDb3JlOjp0
b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXpl
cldpdGhNYXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNlcmlhbGl6ZXJX
aXRoTWFwUHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFs
aXplcldpdGhNYXBQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RTZXJpYWxpemVyV2l0aE1hcFByb3RvdHlwZTo6SlNUZXN0U2VyaWFsaXplcldpdGhN
YXBQcm90b3R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFsaXplcldpdGhNYXBD
b25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdFNlcmlhbGl6ZXJXaXRoTWFwQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNlcmlhbGl6ZXJXaXRoTWFwUHJvdG90eXBlOjpmaW5p
c2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVyV2l0aE1hcDo6
SlNUZXN0U2VyaWFsaXplcldpdGhNYXApOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFs
aXplcldpdGhNYXA6OmNyZWF0ZVByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RT
ZXJpYWxpemVyV2l0aE1hcDo6cHJvdG90eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFNl
cmlhbGl6ZXJXaXRoTWFwOjpkZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlh
bGl6ZXJXaXRoTWFwU3RyQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlh
bGl6ZXJXaXRoTWFwSW50QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFNlcmlh
bGl6ZXJXaXRoTWFwQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0U2Vy
aWFsaXplcldpdGhNYXBDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RT
ZXJpYWxpemVyV2l0aE1hcFN0ckF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rl
c3RTZXJpYWxpemVyV2l0aE1hcEludEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RTZXJpYWxpemVyV2l0aE1hcDo6Z2V0Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0U2VyaWFsaXplcldpdGhNYXBQcm90b3R5cGVGdW5jdGlvblRvSlNPTik6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVyV2l0aE1hcE93bmVyOjppc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVyV2l0aE1hcE93
bmVyOjpmaW5hbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0U2VyaWFsaXpl
cldpdGhNYXA6OnRvV3JhcHBlZCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFNlcmlhbGl6ZXJXaXRoTWFwLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0U2VyaWFsaXplcldpdGhNYXA6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RT
ZXJpYWxpemVyV2l0aE1hcDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdFNlcmlhbGl6ZXJXaXRoTWFwOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
Ojp3cmFwcGVyT3duZXIpOgorICAgICAgICAoV2ViQ29yZTo6d3JhcHBlcktleSk6CisgICAgICAg
IChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9E
T01UZXN0U2VyaWFsaXplci5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvT2JqQy9ET01UZXN0U2VyaWFsaXplci5tbTogQWRkZWQuCisgICAgICAgICgtW0RPTVRlc3RT
ZXJpYWxpemVyIGRlYWxsb2NdKToKKyAgICAgICAgKC1bRE9NVGVzdFNlcmlhbGl6ZXIgc3RyQXR0
cmlidXRlXSk6CisgICAgICAgICgtW0RPTVRlc3RTZXJpYWxpemVyIHNldFN0ckF0dHJpYnV0ZTpd
KToKKyAgICAgICAgKC1bRE9NVGVzdFNlcmlhbGl6ZXIgaW50QXR0cmlidXRlXSk6CisgICAgICAg
ICgtW0RPTVRlc3RTZXJpYWxpemVyIHNldEludEF0dHJpYnV0ZTpdKToKKyAgICAgICAgKGNvcmUp
OgorICAgICAgICAoa2l0KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9E
T01UZXN0U2VyaWFsaXplckludGVybmFsLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RTZXJpYWxpemVyV2l0aE1hcC5oOiBBZGRlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0U2VyaWFsaXplcldpdGhNYXAu
bW06IEFkZGVkLgorICAgICAgICAoLVtET01UZXN0U2VyaWFsaXplcldpdGhNYXAgZGVhbGxvY10p
OgorICAgICAgICAoLVtET01UZXN0U2VyaWFsaXplcldpdGhNYXAgc3RyQXR0cmlidXRlXSk6Cisg
ICAgICAgICgtW0RPTVRlc3RTZXJpYWxpemVyV2l0aE1hcCBzZXRTdHJBdHRyaWJ1dGU6XSk6Cisg
ICAgICAgICgtW0RPTVRlc3RTZXJpYWxpemVyV2l0aE1hcCBpbnRBdHRyaWJ1dGVdKToKKyAgICAg
ICAgKC1bRE9NVGVzdFNlcmlhbGl6ZXJXaXRoTWFwIHNldEludEF0dHJpYnV0ZTpdKToKKyAgICAg
ICAgKGNvcmUpOgorICAgICAgICAoa2l0KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvT2JqQy9ET01UZXN0U2VyaWFsaXplcldpdGhNYXBJbnRlcm5hbC5oOiBBZGRlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6ZXIuaWRsOiBBZGRlZC4KKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6ZXJXaXRoTWFwLmlkbDog
QWRkZWQuCisKIDIwMTYtMDQtMTIgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAog
ICAgICAgICBBdHRyLnZhbHVlIHNob3VsZCBub3QgYmUgbnVsbGFibGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmlkbCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmlkbAppbmRl
eCBjZDAxZWY3MmZhOTczNGI0MzNjOGI5ZmVjMzNiNjgzNmEzNWI2Mzg2Li41Mjg0MmM5ZTgwYjkw
NDA3MmJhYWU1YzA2Y2E4NTNjNjY3OTM2Yjc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5pZGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaWRsCkBAIC0zNyw1ICszNyw2
IEBACiAgICAgYXR0cmlidXRlIERPTVN0cmluZyBjYW5kaWRhdGU7CiAgICAgW0N1c3RvbUdldHRl
cl0gYXR0cmlidXRlIERPTVN0cmluZyBzZHBNaWQ7CiAgICAgW0N1c3RvbUdldHRlcl0gYXR0cmli
dXRlIHVuc2lnbmVkIHNob3J0IHNkcE1MaW5lSW5kZXg7Ci19OwogCisgICAgc2VyaWFsaXplciA9
IHtjYW5kaWRhdGUsIHNkcE1pZCwgc2RwTUxpbmVJbmRleH07Cit9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24uaWRs
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRp
b24uaWRsCmluZGV4IDIzNDU1ZjcwNDA3MjhlMWJhY2VhZmUyMWE4Y2FlOGI4YTUxNDA1ZWYuLjFk
NjQzNTAyZTNmYWIyM2I2ZGMzYjc1MGNlMmI1MWQyNTI0MjAzNmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmlkbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlw
dGlvbi5pZGwKQEAgLTM2LDUgKzM2LDcgQEAKIF0gaW50ZXJmYWNlIFJUQ1Nlc3Npb25EZXNjcmlw
dGlvbiB7CiAgICAgW1NldHRlclJhaXNlc0V4Y2VwdGlvbl0gYXR0cmlidXRlIERPTVN0cmluZyB0
eXBlOwogICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgc2RwOworCisgICAgc2VyaWFsaXplciA9IHt0
eXBlLCBzZHB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCAxMWQ1YjU1MWQwMTlhOTE4ZWM1ZjUwYjc5MTgzNjYz
MjVhZjA1NzIxLi42YjE5MmI5MzlmYzA1MTRjZTA3ZWU4NzQ1MGI0MzVkMTgyNDI0M2IxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bQpAQCAtMTgwOCw2ICsxODA4LDggQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBt
eSAkdmlzaWJsZUludGVyZmFjZU5hbWUgPSAkY29kZUdlbmVyYXRvci0+R2V0VmlzaWJsZUludGVy
ZmFjZU5hbWUoJGludGVyZmFjZSk7CiAgICAgbXkgJGV2ZW50VGFyZ2V0ID0gJGNvZGVHZW5lcmF0
b3ItPkluaGVyaXRzSW50ZXJmYWNlKCRpbnRlcmZhY2UsICJFdmVudFRhcmdldCIpICYmICRpbnRl
cmZhY2UtPm5hbWUgbmUgIkV2ZW50VGFyZ2V0IjsKICAgICBteSAkbmVlZHNWaXNpdENoaWxkcmVu
ID0gSW5zdGFuY2VOZWVkc1Zpc2l0Q2hpbGRyZW4oJGludGVyZmFjZSk7CisgICAgbXkgJHNlcmlh
bGl6ZXJGdW5jdGlvbk5hbWUgPSAidG9KU09OIjsKKyAgICBteSAkc2VyaWFsaXplck5hdGl2ZUZ1
bmN0aW9uTmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5XS19sY2ZpcnN0KCRjbGFzc05hbWUpIC4gIlBy
b3RvdHlwZSIgLiAiRnVuY3Rpb24iIC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJHNlcmlh
bGl6ZXJGdW5jdGlvbk5hbWUpOwogCiAgICAgbXkgJG5hbWVkR2V0dGVyRnVuY3Rpb24gPSBHZXRO
YW1lZEdldHRlckZ1bmN0aW9uKCRpbnRlcmZhY2UpOwogICAgIG15ICRpbmRleGVkR2V0dGVyRnVu
Y3Rpb24gPSBHZXRJbmRleGVkR2V0dGVyRnVuY3Rpb24oJGludGVyZmFjZSk7CkBAIC0xODk0LDYg
KzE4OTYsMTAgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJcbiIpOwogICAgIH0KIAorICAgIGlmICgkaW50ZXJmYWNlLT5zZXJpYWxpemFi
bGUpIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMICR7c2VyaWFsaXplck5hdGl2ZUZ1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKik7XG5cbiIp
OworICAgIH0KKwogICAgICMgQWRkIHByb3RvdHlwZSBkZWNsYXJhdGlvbi4KICAgICBpZiAoIUhl
YWRlck5lZWRzUHJvdG90eXBlRGVjbGFyYXRpb24oJGludGVyZmFjZSkpIHsKICAgICAgICAgR2Vu
ZXJhdGVQcm90b3R5cGVEZWNsYXJhdGlvbihcQGltcGxDb250ZW50LCAkY2xhc3NOYW1lLCAkaW50
ZXJmYWNlLCAkaW50ZXJmYWNlTmFtZSk7CkBAIC0yMDU5LDYgKzIwNjUsMTUgQEAgc3ViIEdlbmVy
YXRlSW1wbGVtZW50YXRpb24KIAogICAgIG15ICRqdXN0R2VuZXJhdGVWYWx1ZUFycmF5ID0gIUlz
RE9NR2xvYmFsT2JqZWN0KCRpbnRlcmZhY2UpOwogCisgICAgaWYgKCRpbnRlcmZhY2UtPnNlcmlh
bGl6YWJsZSkgeworICAgICAgICBwdXNoKEBoYXNoS2V5cywgJHNlcmlhbGl6ZXJGdW5jdGlvbk5h
bWUpOworICAgICAgICBwdXNoKEBoYXNoVmFsdWUxLCAkc2VyaWFsaXplck5hdGl2ZUZ1bmN0aW9u
TmFtZSk7CisgICAgICAgIHB1c2goQGhhc2hWYWx1ZTIsIDApOworICAgICAgICBwdXNoKEBoYXNo
U3BlY2lhbHMsICJKU0M6OkZ1bmN0aW9uIik7CisKKyAgICAgICAgJGhhc2hTaXplKys7CisgICAg
fQorCiAgICAgJG9iamVjdC0+R2VuZXJhdGVIYXNoVGFibGUoJGhhc2hOYW1lLCAkaGFzaFNpemUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXEBoYXNoS2V5cywgXEBoYXNoU3BlY2lh
bHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXEBoYXNoVmFsdWUxLCBcQGhhc2hW
YWx1ZTIsCkBAIC0zMDQ3LDYgKzMwNjIsMTAgQEAgRU5ECiAKICAgICB9CiAKKyAgICBpZiAoJGlu
dGVyZmFjZS0+c2VyaWFsaXphYmxlKSB7CisgICAgICAgIEdlbmVyYXRlU2VyaWFsaXplckZ1bmN0
aW9uKCRpbnRlcmZhY2UsICRpbnRlcmZhY2VOYW1lLCAkY2xhc3NOYW1lLCAkc2VyaWFsaXplckZ1
bmN0aW9uTmFtZSwgJHNlcmlhbGl6ZXJOYXRpdmVGdW5jdGlvbk5hbWUpOworICAgIH0KKwogICAg
IGlmICgkaW50ZXJmYWNlLT5pdGVyYWJsZSkgewogICAgICAgICBHZW5lcmF0ZUltcGxlbWVudGF0
aW9uSXRlcmFibGVGdW5jdGlvbnMoJGludGVyZmFjZSk7CiAgICAgfQpAQCAtMzI4NCw2ICszMzAz
LDQyIEBAIEVORAogICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4jZW5kaWYgLy8gJHtjb25kaXRp
b25hbFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKIH0KIAorc3ViIEdlbmVyYXRl
U2VyaWFsaXplckZ1bmN0aW9uCit7CisgICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OworICAgIG15
ICRpbnRlcmZhY2VOYW1lID0gc2hpZnQ7CisgICAgbXkgJGNsYXNzTmFtZSA9IHNoaWZ0OworICAg
IG15ICRzZXJpYWxpemVyRnVuY3Rpb25OYW1lID0gc2hpZnQ7CisgICAgbXkgJHNlcmlhbGl6ZXJO
YXRpdmVGdW5jdGlvbk5hbWUgPSBzaGlmdDsKKworICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJPYmpl
Y3RDb25zdHJ1Y3Rvci5oIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMICR7c2VyaWFsaXplck5hdGl2ZUZ1bmN0aW9uTmFtZX0oRXhlY1N0YXRl
KiBzdGF0ZSlcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CisgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7
XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvIGNhc3RlZFRoaXMgPSBqc0R5
bmFtaWNDYXN0PEpTJGludGVyZmFjZU5hbWUqPih0aGlzVmFsdWUpO1xuIik7CisgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSlcbiIpOworICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0
ZSwgXCIkaW50ZXJmYWNlTmFtZVwiLCBcIiRzZXJpYWxpemVyRnVuY3Rpb25OYW1lXCIpO1xuIik7
CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhj
YXN0ZWRUaGlzLCAke2NsYXNzTmFtZX06OmluZm8oKSk7XG5cbiIpIHVubGVzcyAkaW50ZXJmYWNl
TmFtZSBlcSAiRXZlbnRUYXJnZXQiOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTT2Jq
ZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChzdGF0ZSk7XG4iKTsKKyAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpO1xu
Iik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7XG4i
KTsKKyAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEB7JGludGVyZmFjZS0+YXR0cmlidXRlc30p
IHsKKyAgICAgICAgbXkgJG5hbWUgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWU7CisgICAg
ICAgIGlmIChncmVwICRfIGVxICRuYW1lLCBAeyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+YXR0
cmlidXRlc30pIHsKKyAgICAgICAgICAgIG15ICR0eXBlID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJl
LT50eXBlOworICAgICAgICAgICAgbXkgJHRoaXNPYmplY3QgPSAiY2FzdGVkVGhpcyI7CisgICAg
ICAgICAgICBteSAkZnVuY3Rpb25TdHJpbmcgPSAiaW1wbC4ke25hbWV9KCkiOworICAgICAgICAg
ICAgbXkgJHNpZ25hdHVyZSA9IGRvbVNpZ25hdHVyZS0+bmV3KCk7CisgICAgICAgICAgICAkc2ln
bmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMoe30pOworICAgICAgICAgICAgJHNpZ25hdHVyZS0+
aXNOdWxsYWJsZSgxKTsKKyAgICAgICAgICAgICRzaWduYXR1cmUtPnR5cGUoJHR5cGUpOworICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBcIiR7bmFtZX1cIiksICIgLiBOYXRpdmVUb0pTVmFs
dWUoJHNpZ25hdHVyZSwgMSwgJGludGVyZmFjZU5hbWUsICRmdW5jdGlvblN0cmluZywgJHRoaXNP
YmplY3QpIC4gIik7XG4iKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIlxuICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTtcbiIpOworICAgIHB1c2go
QGltcGxDb250ZW50LCAifVxuXG4iKTsKK30KKwogc3ViIEdlbmVyYXRlRnVuY3Rpb25DYXN0ZWRU
aGlzCiB7CiAgICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbQppbmRleCA0ZjE1MjlmMjc2ZDQ4ZWI2YmRlMmQ1MDc4
YzhiODYzNzJmNDMwZGY2Li4wNjZmYzdhMTE0NWZjYjcyYmE5NGQ5MTMzNGQ0MzA1ZjIxOTc2MjFk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5w
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbQpAQCAt
NTYsNiArNTYsNyBAQCBzdHJ1Y3QoIGRvbUludGVyZmFjZSA9PiB7CiAgICAgaXNDYWxsYmFjayA9
PiAnJCcsICMgVXNlZCBmb3IgY2FsbGJhY2sgaW50ZXJmYWNlcwogICAgIGlzUGFydGlhbCA9PiAn
JCcsICMgVXNlZCBmb3IgcGFydGlhbCBpbnRlcmZhY2VzCiAgICAgaXRlcmFibGUgPT4gJyQnLCAj
IFVzZWQgZm9yIGl0ZXJhYmxlIGludGVyZmFjZXMKKyAgICBzZXJpYWxpemFibGUgPT4gJyQnLCAj
IFVzZWQgZm9yIHNlcmlhbGl6YWJsZSBpbnRlcmZhY2VzCiB9KTsKIAogIyBVc2VkIHRvIHJlcHJl
c2VudCBkb21JbnRlcmZhY2UgY29udGVudHMgKG5hbWUgb2YgbWV0aG9kLCBzaWduYXR1cmUpCkBA
IC05NCw2ICs5NSwxMCBAQCBzdHJ1Y3QoIGRvbUl0ZXJhYmxlID0+IHsKICAgICBmdW5jdGlvbnMg
PT4gJ0AnLCAjIEl0ZXJhYmxlIGZ1bmN0aW9ucyAoZW50cmllcywga2V5cywgdmFsdWVzLCBbU3lt
Ym9sLkl0ZXJhdG9yXSwgZm9yRWFjaCkKIH0pOwogCisjIFVzZWQgdG8gcmVwcmVzZW50IHNlcmlh
bGl6YWJsZSBpbnRlcmZhY2UKK3N0cnVjdCggZG9tU2VyaWFsaXphYmxlID0+IHsKKyAgICBhdHRy
aWJ1dGVzID0+ICdAJywgIyBMaXN0IG9mIGF0dHJpYnV0ZXMgdG8gc2VyaWFsaXplCit9KTsKIAog
IyBVc2VkIHRvIHJlcHJlc2VudCBzdHJpbmcgY29uc3RhbnRzCiBzdHJ1Y3QoIGRvbUNvbnN0YW50
ID0+IHsKQEAgLTk5NSw3ICsxMDAwLDE0IEBAIHN1YiBwYXJzZVNlcmlhbGl6ZXIKICAgICBteSAk
bmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsKICAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgInNl
cmlhbGl6ZXIiKSB7CiAgICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRU
b2tlbigpLCAic2VyaWFsaXplciIsIF9fTElORV9fKTsKLSAgICAgICAgcmV0dXJuICRzZWxmLT5w
YXJzZVNlcmlhbGl6ZXJSZXN0KCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOworICAgICAgICBteSAk
bmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsKKyAgICAgICAgbXkgJG5ld0RhdGFOb2RlID0gZG9t
U2VyaWFsaXphYmxlLT5uZXcoKTsKKyAgICAgICAgaWYgKCRuZXh0LT52YWx1ZSgpIG5lICI7Iikg
eworICAgICAgICAgICAgbXkgJG5ld0RhdGFOb2RlID0gJHNlbGYtPnBhcnNlU2VyaWFsaXplclJl
c3QoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7CisgICAgICAgICAgICBteSAkbmV4dCA9ICRzZWxm
LT5uZXh0VG9rZW4oKTsKKyAgICAgICAgfQorICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1
ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIjsiLCBfX0xJTkVfXyk7CisgICAgICAgIHJldHVybiAkbmV3
RGF0YU5vZGU7CiAgICAgfQogICAgICRzZWxmLT5hc3NlcnRVbmV4cGVjdGVkVG9rZW4oJG5leHQt
PnZhbHVlKCksIF9fTElORV9fKTsKIH0KQEAgLTEwMDgsNyArMTAyMCwxMCBAQCBzdWIgcGFyc2VT
ZXJpYWxpemVyUmVzdAogICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tlbigpOwogICAgIGlm
ICgkbmV4dC0+dmFsdWUoKSBlcSAiPSIpIHsKICAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFs
dWUoJHNlbGYtPmdldFRva2VuKCksICI9IiwgX19MSU5FX18pOwotICAgICAgICByZXR1cm4gJHNl
bGYtPnBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm4oJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7Cisg
ICAgICAgIG15ICRhdHRyaWJ1dGVzID0gJHNlbGYtPnBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm4o
KTsKKyAgICAgICAgbXkgJG5ld0RhdGFOb2RlID0gZG9tU2VyaWFsaXphYmxlLT5uZXcoKTsKKyAg
ICAgICAgJG5ld0RhdGFOb2RlLT5hdHRyaWJ1dGVzKCRhdHRyaWJ1dGVzKTsKKyAgICAgICAgcmV0
dXJuICRuZXdEYXRhTm9kZTsKICAgICB9CiAgICAgaWYgKCRuZXh0LT50eXBlKCkgPT0gSWRlbnRp
ZmllclRva2VuIHx8ICRuZXh0LT52YWx1ZSgpIGVxICIoIikgewogICAgICAgICByZXR1cm4gJHNl
bGYtPnBhcnNlT3BlcmF0aW9uUmVzdCgkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKQEAgLTEwMTgs
NTkgKzEwMzMsNDEgQEAgc3ViIHBhcnNlU2VyaWFsaXplclJlc3QKIHN1YiBwYXJzZVNlcmlhbGl6
YXRpb25QYXR0ZXJuCiB7CiAgICAgbXkgJHNlbGYgPSBzaGlmdDsKLSAgICBteSAkZXh0ZW5kZWRB
dHRyaWJ1dGVMaXN0ID0gc2hpZnQ7CiAKICAgICBteSAkbmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4o
KTsKICAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgInsiKSB7CiAgICAgICAgICRzZWxmLT5hc3Nl
cnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAieyIsIF9fTElORV9fKTsKLSAgICAgICAg
JHNlbGYtPnBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm5NYXAoKTsKKyAgICAgICAgbXkgJGF0dHJp
YnV0ZXMgPSAkc2VsZi0+cGFyc2VTZXJpYWxpemF0aW9uQXR0cmlidXRlcygpOwogICAgICAgICAk
c2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIn0iLCBfX0xJTkVfXyk7
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIFxAeyRhdHRyaWJ1dGVzfTsKICAgICB9
CiAgICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJbIikgewogICAgICAgICAkc2VsZi0+YXNzZXJ0
VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIlsiLCBfX0xJTkVfXyk7Ci0gICAgICAgICRz
ZWxmLT5wYXJzZVNlcmlhbGl6YXRpb25QYXR0ZXJuTGlzdCgpOworICAgICAgICBteSAkYXR0cmli
dXRlcyA9ICRzZWxmLT5wYXJzZVNlcmlhbGl6YXRpb25BdHRyaWJ1dGVzKCk7CiAgICAgICAgICRz
ZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiXSIsIF9fTElORV9fKTsK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gXEB7JGF0dHJpYnV0ZXN9OwogICAgIH0K
ICAgICBpZiAoJG5leHQtPnR5cGUoKSA9PSBJZGVudGlmaWVyVG9rZW4pIHsKLSAgICAgICAgJHNl
bGYtPmFzc2VydFRva2VuVHlwZSgkc2VsZi0+Z2V0VG9rZW4oKSwgSWRlbnRpZmllclRva2VuKTsK
LSAgICAgICAgcmV0dXJuOworICAgICAgICBteSBAYXR0cmlidXRlcyA9ICgpOworICAgICAgICBt
eSAkdG9rZW4gPSAkc2VsZi0+Z2V0VG9rZW4oKTsKKyAgICAgICAgJHNlbGYtPmFzc2VydFRva2Vu
VHlwZSgkdG9rZW4sIElkZW50aWZpZXJUb2tlbik7CisgICAgICAgIHB1c2goQGF0dHJpYnV0ZXMs
ICR0b2tlbi0+dmFsdWUoKSk7CisgICAgICAgIHJldHVybiBcQGF0dHJpYnV0ZXM7CiAgICAgfQog
ICAgICRzZWxmLT5hc3NlcnRVbmV4cGVjdGVkVG9rZW4oJG5leHQtPnZhbHVlKCksIF9fTElORV9f
KTsKIH0KIAotc3ViIHBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm5NYXAKK3N1YiBwYXJzZVNlcmlh
bGl6YXRpb25BdHRyaWJ1dGVzCiB7CiAgICAgbXkgJHNlbGYgPSBzaGlmdDsKLSAgICBteSAkbmV4
dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsKLSAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgImdldHRl
ciIpIHsKLSAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCks
ICJnZXR0ZXIiLCBfX0xJTkVfXyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCRu
ZXh0LT52YWx1ZSgpIGVxICJpbmhlcml0IikgewotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5W
YWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgImluaGVyaXQiLCBfX0xJTkVfXyk7Ci0gICAgICAgICRz
ZWxmLT5wYXJzZUlkZW50aWZpZXJzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYg
KCRuZXh0LT50eXBlKCkgPT0gSWRlbnRpZmllclRva2VuKSB7Ci0gICAgICAgICRzZWxmLT5hc3Nl
cnRUb2tlblR5cGUoJHNlbGYtPmdldFRva2VuKCksIElkZW50aWZpZXJUb2tlbik7Ci0gICAgICAg
ICRzZWxmLT5wYXJzZUlkZW50aWZpZXJzKCk7Ci0gICAgfQotfQogCi1zdWIgcGFyc2VTZXJpYWxp
emF0aW9uUGF0dGVybkxpc3QKLXsKLSAgICBteSAkc2VsZiA9IHNoaWZ0OwotICAgIG15ICRuZXh0
ID0gJHNlbGYtPm5leHRUb2tlbigpOwotICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAiZ2V0dGVy
IikgewotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwg
ImdldHRlciIsIF9fTElORV9fKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoJG5l
eHQtPnR5cGUoKSA9PSBJZGVudGlmaWVyVG9rZW4pIHsKLSAgICAgICAgJHNlbGYtPmFzc2VydFRv
a2VuVHlwZSgkc2VsZi0+Z2V0VG9rZW4oKSwgSWRlbnRpZmllclRva2VuKTsKLSAgICAgICAgJHNl
bGYtPnBhcnNlSWRlbnRpZmllcnMoKTsKLSAgICB9CisgICAgIyBnZXR0ZXIgYW5kIGluaGVyaXQg
YXJlIG5vciBjdXJyZW50bHkgc3VwcG9ydGVkLgorICAgIG15ICR0b2tlbiA9ICRzZWxmLT5nZXRU
b2tlbigpOworICAgIG15IEBhdHRyaWJ1dGVzID0gKCk7CisgICAgJHNlbGYtPmFzc2VydFRva2Vu
VHlwZSgkdG9rZW4sIElkZW50aWZpZXJUb2tlbik7CisgICAgcHVzaChAYXR0cmlidXRlcywgJHRv
a2VuLT52YWx1ZSgpKTsKKyAgICBwdXNoKEBhdHRyaWJ1dGVzLCBAeyRzZWxmLT5wYXJzZUlkZW50
aWZpZXJzKCl9KTsKKyAgICByZXR1cm4gXEBhdHRyaWJ1dGVzOwogfQogCiBzdWIgcGFyc2VJZGVu
dGlmaWVycwpAQCAtMjIzMyw2ICsyMjMwLDE5IEBAIHN1YiBhcHBseU1lbWJlckxpc3QKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKHJlZigk
aXRlbSkgZXEgImRvbVNlcmlhbGl6YWJsZSIpIHsKKyAgICAgICAgICAgICRpbnRlcmZhY2UtPnNl
cmlhbGl6YWJsZSgkaXRlbSk7CisgICAgICAgICAgICBuZXh0OworICAgICAgICB9CisgICAgfQor
CisgICAgaWYgKCRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZSkgeworICAgICAgICBteSAkbnVtU2Vy
aWFsaXplckF0dHJpYnV0ZXMgPSBAeyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+YXR0cmlidXRl
c307CisgICAgICAgIGlmICgkbnVtU2VyaWFsaXplckF0dHJpYnV0ZXMgPT0gMCkgeworICAgICAg
ICAgICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9KSB7
CisgICAgICAgICAgICAgICAgcHVzaChAeyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+YXR0cmli
dXRlc30sICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RTZXJpYWxpemVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RTZXJpYWxp
emVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jYmY3OWU5ZWMwMGMxNTRkNjExYzg5ODQ0ZjZjODA1ZjliMWY0
MzU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXIuY3BwCkBAIC0wLDAgKzEsMjAzIEBA
CisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJv
amVjdC4KKyAqICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRp
bmdzLnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXIuaCIKKworI2luY2x1ZGUgIkNTU0ltcG9y
dFJ1bGUuaCIKKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgIkRvY3VtZW50
LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVE
ZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgorI2luY2x1
ZGUgIldlYktpdERPTVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRET01UZXN0U2VyaWFsaXpl
clByaXZhdGUuaCIKKyNpbmNsdWRlICJnb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcuaCIKKyNp
bmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjZGVmaW5l
IFdFQktJVF9ET01fVEVTVF9TRVJJQUxJWkVSX0dFVF9QUklWQVRFKG9iaikgR19UWVBFX0lOU1RB
TkNFX0dFVF9QUklWQVRFKG9iaiwgV0VCS0lUX0RPTV9UWVBFX1RFU1RfU0VSSUFMSVpFUiwgV2Vi
S2l0RE9NVGVzdFNlcmlhbGl6ZXJQcml2YXRlKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RE9N
VGVzdFNlcmlhbGl6ZXJQcml2YXRlIHsKKyAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdFNlcmlhbGl6
ZXI+IGNvcmVPYmplY3Q7Cit9IFdlYktpdERPTVRlc3RTZXJpYWxpemVyUHJpdmF0ZTsKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK1dlYktpdERPTVRlc3RTZXJpYWxpemVyKiBraXQoV2ViQ29yZTo6
VGVzdFNlcmlhbGl6ZXIqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0gRE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAg
ICAgICByZXR1cm4gV0VCS0lUX0RPTV9URVNUX1NFUklBTElaRVIocmV0KTsKKworICAgIHJldHVy
biB3cmFwVGVzdFNlcmlhbGl6ZXIob2JqKTsKK30KKworV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZXIq
IGNvcmUoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXIqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJl
cXVlc3QgPyBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0U2VyaWFsaXplcio+KFdFQktJVF9ET01f
T0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KSA6IDA7Cit9CisKK1dlYktpdERPTVRlc3RTZXJp
YWxpemVyKiB3cmFwVGVzdFNlcmlhbGl6ZXIoV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZXIqIGNvcmVP
YmplY3QpCit7CisgICAgQVNTRVJUKGNvcmVPYmplY3QpOworICAgIHJldHVybiBXRUJLSVRfRE9N
X1RFU1RfU0VSSUFMSVpFUihnX29iamVjdF9uZXcoV0VCS0lUX0RPTV9UWVBFX1RFU1RfU0VSSUFM
SVpFUiwgImNvcmUtb2JqZWN0IiwgY29yZU9iamVjdCwgbnVsbHB0cikpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0U2VyaWFsaXplciwg
d2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZXIsIFdFQktJVF9ET01fVFlQRV9PQkpFQ1QpCisKK2Vu
dW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX1NUUl9BVFRSSUJVVEUsCisgICAgUFJPUF9JTlRf
QVRUUklCVVRFLAorfTsKKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZXJf
ZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdERPTVRlc3RTZXJpYWxpemVy
UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ET01fVEVTVF9TRVJJQUxJWkVSX0dFVF9QUklWQVRFKG9i
amVjdCk7CisKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQocHJpdi0+Y29yZU9i
amVjdC5nZXQoKSk7CisKKyAgICBwcml2LT5+V2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXJQcml2YXRl
KCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZXJfcGFyZW50
X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90
ZXN0X3NlcmlhbGl6ZXJfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVy
dHlJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2Vi
S2l0RE9NVGVzdFNlcmlhbGl6ZXIqIHNlbGYgPSBXRUJLSVRfRE9NX1RFU1RfU0VSSUFMSVpFUihv
YmplY3QpOworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1NUUl9B
VFRSSUJVVEU6CisgICAgICAgIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVyX3NldF9zdHJfYXR0
cmlidXRlKHNlbGYsIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfSU5UX0FUVFJJQlVURToKKyAgICAgICAgd2Via2l0X2RvbV90ZXN0X3Nl
cmlhbGl6ZXJfc2V0X2ludF9hdHRyaWJ1dGUoc2VsZiwgZ192YWx1ZV9nZXRfdWludCh2YWx1ZSkp
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lO
VkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZXJf
Z2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiB2
YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXIq
IHNlbGYgPSBXRUJLSVRfRE9NX1RFU1RfU0VSSUFMSVpFUihvYmplY3QpOworCisgICAgc3dpdGNo
IChwcm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1NUUl9BVFRSSUJVVEU6CisgICAgICAgIGdf
dmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVyX2dldF9z
dHJfYXR0cmlidXRlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0lOVF9B
VFRSSUJVVEU6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQodmFsdWUsIHdlYmtpdF9kb21fdGVz
dF9zZXJpYWxpemVyX2dldF9pbnRfYXR0cmlidXRlKHNlbGYpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9i
amVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0
YXRpYyBHT2JqZWN0KiB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplcl9jb25zdHJ1Y3RvcihHVHlw
ZSB0eXBlLCBndWludCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIEdPYmplY3RDb25zdHJ1Y3RQ
YXJhbSogY29uc3RydWN0UHJvcGVydGllcykKK3sKKyAgICBHT2JqZWN0KiBvYmplY3QgPSBHX09C
SkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplcl9wYXJlbnRfY2xhc3MpLT5jb25z
dHJ1Y3Rvcih0eXBlLCBjb25zdHJ1Y3RQcm9wZXJ0aWVzQ291bnQsIGNvbnN0cnVjdFByb3BlcnRp
ZXMpOworCisgICAgV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXJQcml2YXRlKiBwcml2ID0gV0VCS0lU
X0RPTV9URVNUX1NFUklBTElaRVJfR0VUX1BSSVZBVEUob2JqZWN0KTsKKyAgICBwcml2LT5jb3Jl
T2JqZWN0ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdFNlcmlhbGl6ZXIqPihXRUJLSVRfRE9N
X09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBXZWJLaXQ6OkRPTU9iamVjdENhY2hl
OjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0KTsKKworICAgIHJldHVybiBvYmpl
Y3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVyX2NsYXNzX2lu
aXQoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXJDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdP
YmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsK
KyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdENsYXNzLCBzaXplb2YoV2ViS2l0
RE9NVGVzdFNlcmlhbGl6ZXJQcml2YXRlKSk7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3Rv
ciA9IHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVyX2NvbnN0cnVjdG9yOworICAgIGdvYmplY3RD
bGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplcl9maW5hbGl6ZTsKKyAg
ICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVy
X3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9k
b21fdGVzdF9zZXJpYWxpemVyX2dldF9wcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdvYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9TVFJf
QVRUUklCVVRFLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgInN0
ci1hdHRyaWJ1dGUiLAorICAgICAgICAgICAgIlRlc3RTZXJpYWxpemVyOnN0ci1hdHRyaWJ1dGUi
LAorICAgICAgICAgICAgInJlYWQtd3JpdGUgZ2NoYXIqIFRlc3RTZXJpYWxpemVyOnN0ci1hdHRy
aWJ1dGUiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdS
SVRFKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
b2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfSU5UX0FUVFJJQlVURSwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX3VpbnQoCisgICAgICAgICAgICAiaW50LWF0dHJpYnV0ZSIsCisgICAgICAgICAgICAi
VGVzdFNlcmlhbGl6ZXI6aW50LWF0dHJpYnV0ZSIsCisgICAgICAgICAgICAicmVhZC13cml0ZSBn
dXNob3J0IFRlc3RTZXJpYWxpemVyOmludC1hdHRyaWJ1dGUiLAorICAgICAgICAgICAgMCwgR19N
QVhVSU5ULCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVyX2luaXQoV2ViS2l0RE9NVGVz
dFNlcmlhbGl6ZXIqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXJQcml2
YXRlKiBwcml2ID0gV0VCS0lUX0RPTV9URVNUX1NFUklBTElaRVJfR0VUX1BSSVZBVEUocmVxdWVz
dCk7CisgICAgbmV3IChwcml2KSBXZWJLaXRET01UZXN0U2VyaWFsaXplclByaXZhdGUoKTsKK30K
KworZ2NoYXIqIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVyX2dldF9zdHJfYXR0cmlidXRlKFdl
YktpdERPTVRlc3RTZXJpYWxpemVyKiBzZWxmKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X1RFU1RfU0VSSUFMSVpFUihzZWxmKSwgMCk7CisgICAgV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZXIq
IGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRU
b1VURjhTdHJpbmcoaXRlbS0+c3RyQXR0cmlidXRlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZXJfc2V0X3N0cl9hdHRyaWJ1dGUoV2Vi
S2l0RE9NVGVzdFNlcmlhbGl6ZXIqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfRE9NX0lTX1RFU1RfU0VSSUFMSVpFUihzZWxmKSk7CisgICAgZ19yZXR1cm5faWZf
ZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZXIqIGl0ZW0gPSBXZWJLaXQ6
OmNvcmUoc2VsZik7CisgICAgV1RGOjpTdHJpbmcgY29udmVydGVkVmFsdWUgPSBXVEY6OlN0cmlu
Zzo6ZnJvbVVURjgodmFsdWUpOworICAgIGl0ZW0tPnNldFN0ckF0dHJpYnV0ZShjb252ZXJ0ZWRW
YWx1ZSk7Cit9CisKK2d1c2hvcnQgd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZXJfZ2V0X2ludF9h
dHRyaWJ1dGUoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXIqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6
SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9ET01fSVNfVEVTVF9TRVJJQUxJWkVSKHNlbGYpLCAwKTsKKyAgICBXZWJDb3JlOjpUZXN0
U2VyaWFsaXplciogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBndXNob3J0IHJlc3Vs
dCA9IGl0ZW0tPmludEF0dHJpYnV0ZSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQg
d2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZXJfc2V0X2ludF9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVz
dFNlcmlhbGl6ZXIqIHNlbGYsIGd1c2hvcnQgdmFsdWUpCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9J
U19URVNUX1NFUklBTElaRVIoc2VsZikpOworICAgIFdlYkNvcmU6OlRlc3RTZXJpYWxpemVyKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGl0ZW0tPnNldEludEF0dHJpYnV0ZSh2YWx1
ZSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RTZXJpYWxpemVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXplci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmRkMTdjZDM1MmYyZjdkZGQwMGU3NjAxNzkxOGIxNzkwNjRlNTkyZjUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0U2VyaWFsaXplci5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMg
ZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBN
T0RJRlkhCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXJfaAorI2Rl
ZmluZSBXZWJLaXRET01UZXN0U2VyaWFsaXplcl9oCisKKyNpZmRlZiBXRUJLSVRfRE9NX1VTRV9V
TlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0
ZG9tL1dlYktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS93ZWJraXRkb21kZWZp
bmVzLXVuc3RhYmxlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfRE9NX1RZ
UEVfVEVTVF9TRVJJQUxJWkVSICAgICAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVy
X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ET01fVEVTVF9TRVJJQUxJWkVSKG9iaikgICAg
ICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9ET01fVFlQ
RV9URVNUX1NFUklBTElaRVIsIFdlYktpdERPTVRlc3RTZXJpYWxpemVyKSkKKyNkZWZpbmUgV0VC
S0lUX0RPTV9URVNUX1NFUklBTElaRVJfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX0RPTV9UWVBFX1RFU1RfU0VSSUFMSVpFUiwgV2ViS2l0
RE9NVGVzdFNlcmlhbGl6ZXJDbGFzcykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVNUX1NFUklB
TElaRVIob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VC
S0lUX0RPTV9UWVBFX1RFU1RfU0VSSUFMSVpFUikpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfVEVT
VF9TRVJJQUxJWkVSX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNz
KSwgIFdFQktJVF9ET01fVFlQRV9URVNUX1NFUklBTElaRVIpKQorI2RlZmluZSBXRUJLSVRfRE9N
X1RFU1RfU0VSSUFMSVpFUl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xB
U1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9TRVJJQUxJWkVSLCBXZWJLaXRET01UZXN0
U2VyaWFsaXplckNsYXNzKSkKKworc3RydWN0IF9XZWJLaXRET01UZXN0U2VyaWFsaXplciB7Cisg
ICAgV2ViS2l0RE9NT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKK307CisKK3N0cnVjdCBfV2ViS2l0
RE9NVGVzdFNlcmlhbGl6ZXJDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50
X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6
ZXJfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZXJf
Z2V0X3N0cl9hdHRyaWJ1dGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXIK
KyAqCisgKiBSZXR1cm5zOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoq
LworV0VCS0lUX0FQSSBnY2hhcioKK3dlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVyX2dldF9zdHJf
YXR0cmlidXRlKFdlYktpdERPTVRlc3RTZXJpYWxpemVyKiBzZWxmKTsKKworLyoqCisgKiB3ZWJr
aXRfZG9tX3Rlc3Rfc2VyaWFsaXplcl9zZXRfc3RyX2F0dHJpYnV0ZToKKyAqIEBzZWxmOiBBICNX
ZWJLaXRET01UZXN0U2VyaWFsaXplcgorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJp
bGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfc2Vy
aWFsaXplcl9zZXRfc3RyX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0U2VyaWFsaXplciogc2VsZiwg
Y29uc3QgZ2NoYXIqIHZhbHVlKTsKKworLyoqCisgKiB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXpl
cl9nZXRfaW50X2F0dHJpYnV0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0U2VyaWFsaXpl
cgorICoKKyAqIFJldHVybnM6IEEgI2d1c2hvcnQKKyAqCisgKiBTdGFiaWxpdHk6IFVuc3RhYmxl
CisqKi8KK1dFQktJVF9BUEkgZ3VzaG9ydAord2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZXJfZ2V0
X2ludF9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXIqIHNlbGYpOworCisvKioKKyAq
IHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVyX3NldF9pbnRfYXR0cmlidXRlOgorICogQHNlbGY6
IEEgI1dlYktpdERPTVRlc3RTZXJpYWxpemVyCisgKiBAdmFsdWU6IEEgI2d1c2hvcnQKKyAqCisg
KiBTdGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV90
ZXN0X3NlcmlhbGl6ZXJfc2V0X2ludF9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXIq
IHNlbGYsIGd1c2hvcnQgdmFsdWUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lU
X0RPTV9VU0VfVU5TVEFCTEVfQVBJICovCisjZW5kaWYgLyogV2ViS2l0RE9NVGVzdFNlcmlhbGl6
ZXJfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXJQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXplclBy
aXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4zNjc2ZjBjZjNlNDZlODhlNTEyNjkwMjZiMDZkMDVkNmM0NDk1
MmNmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXJQcml2YXRlLmgKQEAgLTAsMCArMSwz
MyBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01U
ZXN0U2VyaWFsaXplclByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01UZXN0U2VyaWFsaXplclBy
aXZhdGVfaAorCisjaW5jbHVkZSAiVGVzdFNlcmlhbGl6ZXIuaCIKKyNpbmNsdWRlIDx3ZWJraXRk
b20vV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitXZWJL
aXRET01UZXN0U2VyaWFsaXplciogd3JhcFRlc3RTZXJpYWxpemVyKFdlYkNvcmU6OlRlc3RTZXJp
YWxpemVyKik7CitXZWJLaXRET01UZXN0U2VyaWFsaXplcioga2l0KFdlYkNvcmU6OlRlc3RTZXJp
YWxpemVyKik7CitXZWJDb3JlOjpUZXN0U2VyaWFsaXplciogY29yZShXZWJLaXRET01UZXN0U2Vy
aWFsaXplciopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvKiBXZWJLaXRET01U
ZXN0U2VyaWFsaXplclByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXJXaXRoTWFw
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3RTZXJpYWxpemVyV2l0aE1hcC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWNjZTY5ZDRhODk1NWMy
MTljNzlhMzM1ZjJmYWZkMGQyZmNkOTA0YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RTZXJpYWxpemVy
V2l0aE1hcC5jcHAKQEAgLTAsMCArMSwyMDMgQEAKKy8qCisgKiAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRET01UZXN0U2VyaWFs
aXplcldpdGhNYXAuaCIKKworI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKKyNpbmNsdWRlICJE
T01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oIgorI2luY2x1
ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERPTVByaXZhdGUu
aCIKKyNpbmNsdWRlICJXZWJLaXRET01UZXN0U2VyaWFsaXplcldpdGhNYXBQcml2YXRlLmgiCisj
aW5jbHVkZSAiZ29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0dl
dFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2RlZmluZSBXRUJLSVRfRE9NX1RF
U1RfU0VSSUFMSVpFUl9XSVRIX01BUF9HRVRfUFJJVkFURShvYmopIEdfVFlQRV9JTlNUQU5DRV9H
RVRfUFJJVkFURShvYmosIFdFQktJVF9ET01fVFlQRV9URVNUX1NFUklBTElaRVJfV0lUSF9NQVAs
IFdlYktpdERPTVRlc3RTZXJpYWxpemVyV2l0aE1hcFByaXZhdGUpCisKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRET01UZXN0U2VyaWFsaXplcldpdGhNYXBQcml2YXRlIHsKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6VGVzdFNlcmlhbGl6ZXJXaXRoTWFwPiBjb3JlT2JqZWN0OworfSBXZWJLaXRET01UZXN0
U2VyaWFsaXplcldpdGhNYXBQcml2YXRlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViS2l0
RE9NVGVzdFNlcmlhbGl6ZXJXaXRoTWFwKiBraXQoV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZXJXaXRo
TWFwKiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYg
KGdwb2ludGVyIHJldCA9IERPTU9iamVjdENhY2hlOjpnZXQob2JqKSkKKyAgICAgICAgcmV0dXJu
IFdFQktJVF9ET01fVEVTVF9TRVJJQUxJWkVSX1dJVEhfTUFQKHJldCk7CisKKyAgICByZXR1cm4g
d3JhcFRlc3RTZXJpYWxpemVyV2l0aE1hcChvYmopOworfQorCitXZWJDb3JlOjpUZXN0U2VyaWFs
aXplcldpdGhNYXAqIGNvcmUoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXJXaXRoTWFwKiByZXF1ZXN0
KQoreworICAgIHJldHVybiByZXF1ZXN0ID8gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdFNlcmlh
bGl6ZXJXaXRoTWFwKj4oV0VCS0lUX0RPTV9PQkpFQ1QocmVxdWVzdCktPmNvcmVPYmplY3QpIDog
MDsKK30KKworV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXJXaXRoTWFwKiB3cmFwVGVzdFNlcmlhbGl6
ZXJXaXRoTWFwKFdlYkNvcmU6OlRlc3RTZXJpYWxpemVyV2l0aE1hcCogY29yZU9iamVjdCkKK3sK
KyAgICBBU1NFUlQoY29yZU9iamVjdCk7CisgICAgcmV0dXJuIFdFQktJVF9ET01fVEVTVF9TRVJJ
QUxJWkVSX1dJVEhfTUFQKGdfb2JqZWN0X25ldyhXRUJLSVRfRE9NX1RZUEVfVEVTVF9TRVJJQUxJ
WkVSX1dJVEhfTUFQLCAiY29yZS1vYmplY3QiLCBjb3JlT2JqZWN0LCBudWxscHRyKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitHX0RFRklORV9UWVBFKFdlYktpdERPTVRlc3RTZXJp
YWxpemVyV2l0aE1hcCwgd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZXJfd2l0aF9tYXAsIFdFQktJ
VF9ET01fVFlQRV9PQkpFQ1QpCisKK2VudW0geworICAgIFBST1BfMCwKKyAgICBQUk9QX1NUUl9B
VFRSSUJVVEUsCisgICAgUFJPUF9JTlRfQVRUUklCVVRFLAorfTsKKworc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV90ZXN0X3NlcmlhbGl6ZXJfd2l0aF9tYXBfZmluYWxpemUoR09iamVjdCogb2JqZWN0
KQoreworICAgIFdlYktpdERPTVRlc3RTZXJpYWxpemVyV2l0aE1hcFByaXZhdGUqIHByaXYgPSBX
RUJLSVRfRE9NX1RFU1RfU0VSSUFMSVpFUl9XSVRIX01BUF9HRVRfUFJJVkFURShvYmplY3QpOwor
CisgICAgV2ViS2l0OjpET01PYmplY3RDYWNoZTo6Zm9yZ2V0KHByaXYtPmNvcmVPYmplY3QuZ2V0
KCkpOworCisgICAgcHJpdi0+fldlYktpdERPTVRlc3RTZXJpYWxpemVyV2l0aE1hcFByaXZhdGUo
KTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplcl93aXRoX21h
cF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX3Rlc3Rfc2VyaWFsaXplcl93aXRoX21hcF9zZXRfcHJvcGVydHkoR09iamVjdCogb2Jq
ZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBw
c3BlYykKK3sKKyAgICBXZWJLaXRET01UZXN0U2VyaWFsaXplcldpdGhNYXAqIHNlbGYgPSBXRUJL
SVRfRE9NX1RFU1RfU0VSSUFMSVpFUl9XSVRIX01BUChvYmplY3QpOworCisgICAgc3dpdGNoIChw
cm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1NUUl9BVFRSSUJVVEU6CisgICAgICAgIHdlYmtp
dF9kb21fdGVzdF9zZXJpYWxpemVyX3dpdGhfbWFwX3NldF9zdHJfYXR0cmlidXRlKHNlbGYsIGdf
dmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
SU5UX0FUVFJJQlVURToKKyAgICAgICAgd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZXJfd2l0aF9t
YXBfc2V0X2ludF9hdHRyaWJ1dGUoc2VsZiwgZ192YWx1ZV9nZXRfdWludCh2YWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURf
UFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZXJfd2l0aF9t
YXBfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVl
KiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0RE9NVGVzdFNlcmlhbGl6
ZXJXaXRoTWFwKiBzZWxmID0gV0VCS0lUX0RPTV9URVNUX1NFUklBTElaRVJfV0lUSF9NQVAob2Jq
ZWN0KTsKKworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9TVFJfQVRU
UklCVVRFOgorICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVlLCB3ZWJraXRfZG9tX3Rl
c3Rfc2VyaWFsaXplcl93aXRoX21hcF9nZXRfc3RyX2F0dHJpYnV0ZShzZWxmKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9JTlRfQVRUUklCVVRFOgorICAgICAgICBnX3ZhbHVlX3Nl
dF91aW50KHZhbHVlLCB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplcl93aXRoX21hcF9nZXRfaW50
X2F0dHJpYnV0ZShzZWxmKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBz
cGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgR09iamVjdCogd2Via2l0
X2RvbV90ZXN0X3NlcmlhbGl6ZXJfd2l0aF9tYXBfY29uc3RydWN0b3IoR1R5cGUgdHlwZSwgZ3Vp
bnQgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBHT2JqZWN0Q29uc3RydWN0UGFyYW0qIGNvbnN0
cnVjdFByb3BlcnRpZXMpCit7CisgICAgR09iamVjdCogb2JqZWN0ID0gR19PQkpFQ1RfQ0xBU1Mo
d2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZXJfd2l0aF9tYXBfcGFyZW50X2NsYXNzKS0+Y29uc3Ry
dWN0b3IodHlwZSwgY29uc3RydWN0UHJvcGVydGllc0NvdW50LCBjb25zdHJ1Y3RQcm9wZXJ0aWVz
KTsKKworICAgIFdlYktpdERPTVRlc3RTZXJpYWxpemVyV2l0aE1hcFByaXZhdGUqIHByaXYgPSBX
RUJLSVRfRE9NX1RFU1RfU0VSSUFMSVpFUl9XSVRIX01BUF9HRVRfUFJJVkFURShvYmplY3QpOwor
ICAgIHByaXYtPmNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpUZXN0U2VyaWFsaXpl
cldpdGhNYXAqPihXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpLT5jb3JlT2JqZWN0KTsKKyAgICBX
ZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpwdXQocHJpdi0+Y29yZU9iamVjdC5nZXQoKSwgb2JqZWN0
KTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVz
dF9zZXJpYWxpemVyX3dpdGhfbWFwX2NsYXNzX2luaXQoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXJX
aXRoTWFwQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RD
bGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ190eXBlX2NsYXNzX2Fk
ZF9wcml2YXRlKGdvYmplY3RDbGFzcywgc2l6ZW9mKFdlYktpdERPTVRlc3RTZXJpYWxpemVyV2l0
aE1hcFByaXZhdGUpKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdG9yID0gd2Via2l0X2Rv
bV90ZXN0X3NlcmlhbGl6ZXJfd2l0aF9tYXBfY29uc3RydWN0b3I7CisgICAgZ29iamVjdENsYXNz
LT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVyX3dpdGhfbWFwX2ZpbmFsaXpl
OworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90ZXN0X3Nlcmlh
bGl6ZXJfd2l0aF9tYXBfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3Bl
cnR5ID0gd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZXJfd2l0aF9tYXBfZ2V0X3Byb3BlcnR5Owor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENs
YXNzLAorICAgICAgICBQUk9QX1NUUl9BVFRSSUJVVEUsCisgICAgICAgIGdfcGFyYW1fc3BlY19z
dHJpbmcoCisgICAgICAgICAgICAic3RyLWF0dHJpYnV0ZSIsCisgICAgICAgICAgICAiVGVzdFNl
cmlhbGl6ZXJXaXRoTWFwOnN0ci1hdHRyaWJ1dGUiLAorICAgICAgICAgICAgInJlYWQtd3JpdGUg
Z2NoYXIqIFRlc3RTZXJpYWxpemVyV2l0aE1hcDpzdHItYXR0cmlidXRlIiwKKyAgICAgICAgICAg
ICIiLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ29iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX0lOVF9BVFRSSUJVVEUsCisgICAgICAgIGdfcGFyYW1fc3BlY191aW50KAorICAgICAg
ICAgICAgImludC1hdHRyaWJ1dGUiLAorICAgICAgICAgICAgIlRlc3RTZXJpYWxpemVyV2l0aE1h
cDppbnQtYXR0cmlidXRlIiwKKyAgICAgICAgICAgICJyZWFkLXdyaXRlIGd1c2hvcnQgVGVzdFNl
cmlhbGl6ZXJXaXRoTWFwOmludC1hdHRyaWJ1dGUiLAorICAgICAgICAgICAgMCwgR19NQVhVSU5U
LCAwLAorICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVyX3dpdGhfbWFwX2luaXQoV2ViS2l0RE9N
VGVzdFNlcmlhbGl6ZXJXaXRoTWFwKiByZXF1ZXN0KQoreworICAgIFdlYktpdERPTVRlc3RTZXJp
YWxpemVyV2l0aE1hcFByaXZhdGUqIHByaXYgPSBXRUJLSVRfRE9NX1RFU1RfU0VSSUFMSVpFUl9X
SVRIX01BUF9HRVRfUFJJVkFURShyZXF1ZXN0KTsKKyAgICBuZXcgKHByaXYpIFdlYktpdERPTVRl
c3RTZXJpYWxpemVyV2l0aE1hcFByaXZhdGUoKTsKK30KKworZ2NoYXIqIHdlYmtpdF9kb21fdGVz
dF9zZXJpYWxpemVyX3dpdGhfbWFwX2dldF9zdHJfYXR0cmlidXRlKFdlYktpdERPTVRlc3RTZXJp
YWxpemVyV2l0aE1hcCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX1NF
UklBTElaRVJfV0lUSF9NQVAoc2VsZiksIDApOworICAgIFdlYkNvcmU6OlRlc3RTZXJpYWxpemVy
V2l0aE1hcCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnY2hhciogcmVzdWx0ID0g
Y29udmVydFRvVVRGOFN0cmluZyhpdGVtLT5zdHJBdHRyaWJ1dGUoKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCB3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplcl93aXRoX21hcF9zZXRf
c3RyX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0U2VyaWFsaXplcldpdGhNYXAqIHNlbGYsIGNvbnN0
IGdjaGFyKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3Rh
dGU7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfU0VSSUFMSVpFUl9X
SVRIX01BUChzZWxmKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7CisgICAgV2ViQ29y
ZTo6VGVzdFNlcmlhbGl6ZXJXaXRoTWFwKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAg
IFdURjo6U3RyaW5nIGNvbnZlcnRlZFZhbHVlID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHZhbHVl
KTsKKyAgICBpdGVtLT5zZXRTdHJBdHRyaWJ1dGUoY29udmVydGVkVmFsdWUpOworfQorCitndXNo
b3J0IHdlYmtpdF9kb21fdGVzdF9zZXJpYWxpemVyX3dpdGhfbWFwX2dldF9pbnRfYXR0cmlidXRl
KFdlYktpdERPTVRlc3RTZXJpYWxpemVyV2l0aE1hcCogc2VsZikKK3sKKyAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19URVNUX1NFUklBTElaRVJfV0lUSF9NQVAoc2VsZiksIDApOworICAgIFdlYkNv
cmU6OlRlc3RTZXJpYWxpemVyV2l0aE1hcCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBndXNob3J0IHJlc3VsdCA9IGl0ZW0tPmludEF0dHJpYnV0ZSgpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgd2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZXJfd2l0aF9tYXBfc2V0X2lu
dF9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXJXaXRoTWFwKiBzZWxmLCBndXNob3J0
IHZhbHVlKQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9ET01fSVNfVEVTVF9TRVJJQUxJWkVSX1dJVEhfTUFQ
KHNlbGYpKTsKKyAgICBXZWJDb3JlOjpUZXN0U2VyaWFsaXplcldpdGhNYXAqIGl0ZW0gPSBXZWJL
aXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+c2V0SW50QXR0cmlidXRlKHZhbHVlKTsKK30KKwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXJXaXRoTWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0U2VyaWFsaXplcldpdGhNYXAuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4xZTlhOTM4NmZjYzQzOTYwM2ZlYWNjNTBkYzIyZmE2OTliMzU4Nzg0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmpl
Y3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXJXaXRoTWFwLmgKQEAgLTAsMCArMSw5NSBAQAorLyoK
KyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01UZXN0U2VyaWFs
aXplcldpdGhNYXBfaAorI2RlZmluZSBXZWJLaXRET01UZXN0U2VyaWFsaXplcldpdGhNYXBfaAor
CisjaWZkZWYgV0VCS0lUX0RPTV9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDxnbGliLW9i
amVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdGRvbS9XZWJLaXRET01PYmplY3QuaD4KKyNpbmNsdWRl
IDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy11bnN0YWJsZS5oPgorCitHX0JFR0lOX0RFQ0xT
CisKKyNkZWZpbmUgV0VCS0lUX0RPTV9UWVBFX1RFU1RfU0VSSUFMSVpFUl9XSVRIX01BUCAgICAg
ICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplcl93aXRoX21hcF9nZXRfdHlwZSgpKQor
I2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfU0VSSUFMSVpFUl9XSVRIX01BUChvYmopICAgICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfRE9NX1RZUEVfVEVT
VF9TRVJJQUxJWkVSX1dJVEhfTUFQLCBXZWJLaXRET01UZXN0U2VyaWFsaXplcldpdGhNYXApKQor
I2RlZmluZSBXRUJLSVRfRE9NX1RFU1RfU0VSSUFMSVpFUl9XSVRIX01BUF9DTEFTUyhrbGFzcykg
ICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfRE9NX1RZUEVfVEVT
VF9TRVJJQUxJWkVSX1dJVEhfTUFQLCBXZWJLaXRET01UZXN0U2VyaWFsaXplcldpdGhNYXBDbGFz
cykKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVNUX1NFUklBTElaRVJfV0lUSF9NQVAob2JqKSAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX0RPTV9UWVBF
X1RFU1RfU0VSSUFMSVpFUl9XSVRIX01BUCkpCisjZGVmaW5lIFdFQktJVF9ET01fSVNfVEVTVF9T
RVJJQUxJWkVSX1dJVEhfTUFQX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUo
KGtsYXNzKSwgIFdFQktJVF9ET01fVFlQRV9URVNUX1NFUklBTElaRVJfV0lUSF9NQVApKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX1RFU1RfU0VSSUFMSVpFUl9XSVRIX01BUF9HRVRfQ0xBU1Mob2JqKSAg
KEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfRE9NX1RZUEVfVEVTVF9T
RVJJQUxJWkVSX1dJVEhfTUFQLCBXZWJLaXRET01UZXN0U2VyaWFsaXplcldpdGhNYXBDbGFzcykp
CisKK3N0cnVjdCBfV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXJXaXRoTWFwIHsKKyAgICBXZWJLaXRE
T01PYmplY3QgcGFyZW50X2luc3RhbmNlOworfTsKKworc3RydWN0IF9XZWJLaXRET01UZXN0U2Vy
aWFsaXplcldpdGhNYXBDbGFzcyB7CisgICAgV2ViS2l0RE9NT2JqZWN0Q2xhc3MgcGFyZW50X2Ns
YXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2RvbV90ZXN0X3NlcmlhbGl6ZXJf
d2l0aF9tYXBfZ2V0X3R5cGUodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV90ZXN0X3Nlcmlh
bGl6ZXJfd2l0aF9tYXBfZ2V0X3N0cl9hdHRyaWJ1dGU6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9N
VGVzdFNlcmlhbGl6ZXJXaXRoTWFwCisgKgorICogUmV0dXJuczogQSAjZ2NoYXIKKyAqCisgKiBT
dGFiaWxpdHk6IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgZ2NoYXIqCit3ZWJraXRfZG9tX3Rl
c3Rfc2VyaWFsaXplcl93aXRoX21hcF9nZXRfc3RyX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0U2Vy
aWFsaXplcldpdGhNYXAqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21fdGVzdF9zZXJpYWxp
emVyX3dpdGhfbWFwX3NldF9zdHJfYXR0cmlidXRlOgorICogQHNlbGY6IEEgI1dlYktpdERPTVRl
c3RTZXJpYWxpemVyV2l0aE1hcAorICogQHZhbHVlOiBBICNnY2hhcgorICoKKyAqIFN0YWJpbGl0
eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfc2VyaWFs
aXplcl93aXRoX21hcF9zZXRfc3RyX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0U2VyaWFsaXplcldp
dGhNYXAqIHNlbGYsIGNvbnN0IGdjaGFyKiB2YWx1ZSk7CisKKy8qKgorICogd2Via2l0X2RvbV90
ZXN0X3NlcmlhbGl6ZXJfd2l0aF9tYXBfZ2V0X2ludF9hdHRyaWJ1dGU6CisgKiBAc2VsZjogQSAj
V2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXJXaXRoTWFwCisgKgorICogUmV0dXJuczogQSAjZ3VzaG9y
dAorICoKKyAqIFN0YWJpbGl0eTogVW5zdGFibGUKKyoqLworV0VCS0lUX0FQSSBndXNob3J0Cit3
ZWJraXRfZG9tX3Rlc3Rfc2VyaWFsaXplcl93aXRoX21hcF9nZXRfaW50X2F0dHJpYnV0ZShXZWJL
aXRET01UZXN0U2VyaWFsaXplcldpdGhNYXAqIHNlbGYpOworCisvKioKKyAqIHdlYmtpdF9kb21f
dGVzdF9zZXJpYWxpemVyX3dpdGhfbWFwX3NldF9pbnRfYXR0cmlidXRlOgorICogQHNlbGY6IEEg
I1dlYktpdERPTVRlc3RTZXJpYWxpemVyV2l0aE1hcAorICogQHZhbHVlOiBBICNndXNob3J0Cisg
KgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9k
b21fdGVzdF9zZXJpYWxpemVyX3dpdGhfbWFwX3NldF9pbnRfYXR0cmlidXRlKFdlYktpdERPTVRl
c3RTZXJpYWxpemVyV2l0aE1hcCogc2VsZiwgZ3VzaG9ydCB2YWx1ZSk7CisKK0dfRU5EX0RFQ0xT
CisKKyNlbmRpZiAvKiBXRUJLSVRfRE9NX1VTRV9VTlNUQUJMRV9BUEkgKi8KKyNlbmRpZiAvKiBX
ZWJLaXRET01UZXN0U2VyaWFsaXplcldpdGhNYXBfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6
ZXJXaXRoTWFwUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXJXaXRoTWFwUHJpdmF0ZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjJmY2FlMzNlOWM0NGMzYjRlZWNiZmZhMDM0M2I4OTBjODdjODdjOGMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0U2VyaWFsaXplcldpdGhNYXBQcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoK
KyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgKiAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRET01UZXN0U2VyaWFs
aXplcldpdGhNYXBQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXJXaXRo
TWFwUHJpdmF0ZV9oCisKKyNpbmNsdWRlICJUZXN0U2VyaWFsaXplcldpdGhNYXAuaCIKKyNpbmNs
dWRlIDx3ZWJraXRkb20vV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXJXaXRoTWFwLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZXJXaXRoTWFwKiB3cmFwVGVzdFNl
cmlhbGl6ZXJXaXRoTWFwKFdlYkNvcmU6OlRlc3RTZXJpYWxpemVyV2l0aE1hcCopOworV2ViS2l0
RE9NVGVzdFNlcmlhbGl6ZXJXaXRoTWFwKiBraXQoV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZXJXaXRo
TWFwKik7CitXZWJDb3JlOjpUZXN0U2VyaWFsaXplcldpdGhNYXAqIGNvcmUoV2ViS2l0RE9NVGVz
dFNlcmlhbGl6ZXJXaXRoTWFwKik7Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8q
IFdlYktpdERPTVRlc3RTZXJpYWxpemVyV2l0aE1hcFByaXZhdGVfaCAqLwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlh
bGl6ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMwOTEyMTU4NDdjN2NjNmY0MGVkYjUyZTVhYTg0ZjViNmY4
NThkYmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplci5jcHAKQEAgLTAsMCArMSwzMDAgQEAKKy8qCisgICAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAg
IFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERP
IE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVGVzdFNl
cmlhbGl6ZXIuaCIKKworI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9N
Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUg
IlVSTC5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KKyNpbmNsdWRl
IDxydW50aW1lL0pTU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorCit1c2luZyBu
YW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEF0dHJpYnV0ZXMKKwor
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVyU3RyQXR0cmlidXRlKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBz
ZXRKU1Rlc3RTZXJpYWxpemVyU3RyQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdFNlcmlhbGl6ZXJJbnRBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdFNlcmlhbGl6ZXJJbnRB
dHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplckNvbnN0cnVj
dG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOworYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVyQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKKworRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RTZXJpYWxpemVyUHJvdG90eXBlRnVuY3Rpb25Ub0pT
T04oRXhlY1N0YXRlKiBzdGF0ZSk7CisKK2NsYXNzIEpTVGVzdFNlcmlhbGl6ZXJQcm90b3R5cGUg
OiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpT
Qzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIHN0YXRpYyBKU1Rlc3RTZXJpYWxpemVyUHJv
dG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTVGVzdFNl
cmlhbGl6ZXJQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8
SlNUZXN0U2VyaWFsaXplclByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdFNlcmlhbGl6ZXJQcm90
b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hD
cmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9J
TkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVzdFNl
cmlhbGl6ZXJQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2
bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpT
Qzo6Vk0mKTsKK307CisKK3R5cGVkZWYgSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8
SlNUZXN0U2VyaWFsaXplcj4gSlNUZXN0U2VyaWFsaXplckNvbnN0cnVjdG9yOworCit0ZW1wbGF0
ZTw+IEpTVmFsdWUgSlNUZXN0U2VyaWFsaXplckNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1
Y3R1cmUoSlNDOjpWTSYgdm0sIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qp
Cit7CisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LmZ1bmN0
aW9uUHJvdG90eXBlKCk7Cit9CisKK3RlbXBsYXRlPD4gdm9pZCBKU1Rlc3RTZXJpYWxpemVyQ29u
c3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCkKK3sKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnBy
b3RvdHlwZSwgSlNUZXN0U2VyaWFsaXplcjo6cHJvdG90eXBlKHZtLCAmZ2xvYmFsT2JqZWN0KSwg
RG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKEFTQ0lJ
TGl0ZXJhbCgiVGVzdFNlcmlhbGl6ZXIiKSkpLCBSZWFkT25seSB8IERvbnRFbnVtKTsKKyAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRP
bmx5IHwgRG9udEVudW0pOworfQorCit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RT
ZXJpYWxpemVyQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RTZXJpYWxpemVyIiwgJkJhc2U6
OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RTZXJpYWxpemVyQ29uc3RydWN0
b3IpIH07CisKKy8qIEhhc2ggdGFibGUgZm9yIHByb3RvdHlwZSAqLworCitzdGF0aWMgY29uc3Qg
SGFzaFRhYmxlVmFsdWUgSlNUZXN0U2VyaWFsaXplclByb3RvdHlwZVRhYmxlVmFsdWVzW10gPQor
eworICAgIHsgImNvbnN0cnVjdG9yIiwgRG9udEVudW0sIE5vSW50cmluc2ljLCB7IChpbnRwdHJf
dClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0U2VyaWFsaXpl
ckNvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1
dFZhbHVlRnVuYz4oc2V0SlNUZXN0U2VyaWFsaXplckNvbnN0cnVjdG9yKSB9IH0sCisgICAgeyAi
c3RyQXR0cmlidXRlIiwgQ3VzdG9tQWNjZXNzb3IsIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClz
dGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0U2VyaWFsaXplclN0
ckF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRW
YWx1ZUZ1bmM+KHNldEpTVGVzdFNlcmlhbGl6ZXJTdHJBdHRyaWJ1dGUpIH0gfSwKKyAgICB7ICJp
bnRBdHRyaWJ1dGUiLCBDdXN0b21BY2Nlc3NvciwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0
YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemVySW50
QXR0cmlidXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZh
bHVlRnVuYz4oc2V0SlNUZXN0U2VyaWFsaXplckludEF0dHJpYnV0ZSkgfSB9LAorICAgIHsgInRv
SlNPTiIsIEpTQzo6RnVuY3Rpb24sIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2Fz
dDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0U2VyaWFsaXplclByb3RvdHlwZUZ1bmN0aW9uVG9KU09O
KSwgKGludHB0cl90KSAoMCkgfSB9LAorfTsKKworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFNlcmlh
bGl6ZXJQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RTZXJpYWxpemVyUHJvdG90eXBlIiwgJkJh
c2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RTZXJpYWxpemVyUHJvdG90
eXBlKSB9OworCit2b2lkIEpTVGVzdFNlcmlhbGl6ZXJQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmVpZnlTdGF0
aWNQcm9wZXJ0aWVzKHZtLCBKU1Rlc3RTZXJpYWxpemVyUHJvdG90eXBlVGFibGVWYWx1ZXMsICp0
aGlzKTsKK30KKworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFNlcmlhbGl6ZXI6OnNfaW5mbyA9IHsg
IlRlc3RTZXJpYWxpemVyIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShK
U1Rlc3RTZXJpYWxpemVyKSB9OworCitKU1Rlc3RTZXJpYWxpemVyOjpKU1Rlc3RTZXJpYWxpemVy
KFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBS
ZWY8VGVzdFNlcmlhbGl6ZXI+JiYgaW1wbCkKKyAgICA6IEpTRE9NV3JhcHBlcjxUZXN0U2VyaWFs
aXplcj4oc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpCit7Cit9CisKK0pT
T2JqZWN0KiBKU1Rlc3RTZXJpYWxpemVyOjpjcmVhdGVQcm90b3R5cGUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBKU1Rlc3RTZXJpYWxpemVyUHJv
dG90eXBlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgSlNUZXN0U2VyaWFsaXplclByb3RvdHlw
ZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0
UHJvdG90eXBlKCkpKTsKK30KKworSlNPYmplY3QqIEpTVGVzdFNlcmlhbGl6ZXI6OnByb3RvdHlw
ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdl
dERPTVByb3RvdHlwZTxKU1Rlc3RTZXJpYWxpemVyPih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKwor
dm9pZCBKU1Rlc3RTZXJpYWxpemVyOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQoreworICAg
IEpTVGVzdFNlcmlhbGl6ZXIqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3RTZXJpYWxp
emVyKj4oY2VsbCk7CisgICAgdGhpc09iamVjdC0+SlNUZXN0U2VyaWFsaXplcjo6fkpTVGVzdFNl
cmlhbGl6ZXIoKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplclN0ckF0dHJp
YnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlz
VmFsdWUpOworICAgIEpTVmFsdWUgZGVjb2RlZFRoaXNWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpOworICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFNl
cmlhbGl6ZXIqPihkZWNvZGVkVGhpc1ZhbHVlKTsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKSB7CisgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0
U2VyaWFsaXplciIsICJzdHJBdHRyaWJ1dGUiKTsKKyAgICB9CisgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENh
Y2hlKHN0YXRlLCBpbXBsLnN0ckF0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7Cit9CisKKworRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplckludEF0
dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0
aGlzVmFsdWUpOworICAgIEpTVmFsdWUgZGVjb2RlZFRoaXNWYWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpOworICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dFNlcmlhbGl6ZXIqPihkZWNvZGVkVGhpc1ZhbHVlKTsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CisgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJU
ZXN0U2VyaWFsaXplciIsICJpbnRBdHRyaWJ1dGUiKTsKKyAgICB9CisgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGlt
cGwuaW50QXR0cmlidXRlKCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
K30KKworCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVyQ29uc3RydWN0b3IoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7Cisg
ICAgSlNUZXN0U2VyaWFsaXplclByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3RTZXJpYWxpemVyUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwor
ICAgIGlmICghZG9tT2JqZWN0KQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0
ZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RTZXJpYWxpemVyOjpnZXRDb25z
dHJ1Y3RvcihzdGF0ZS0+dm0oKSwgZG9tT2JqZWN0LT5nbG9iYWxPYmplY3QoKSkpOworfQorCiti
b29sIHNldEpTVGVzdFNlcmlhbGl6ZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgSlNU
ZXN0U2VyaWFsaXplclByb3RvdHlwZSogZG9tT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RT
ZXJpYWxpemVyUHJvdG90eXBlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlm
IChVTkxJS0VMWSghZG9tT2JqZWN0KSkgeworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRl
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBTaGFkb3dpbmcgYSBidWls
dC1pbiBjb25zdHJ1Y3RvcgorICAgIHJldHVybiBkb21PYmplY3QtPnB1dERpcmVjdChzdGF0ZS0+
dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgdmFsdWUpOworfQorCiti
b29sIHNldEpTVGVzdFNlcmlhbGl6ZXJTdHJBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7Cisg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVO
VVNFRF9QQVJBTSh0aGlzVmFsdWUpOworICAgIEpTVGVzdFNlcmlhbGl6ZXIqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6ZXIqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgeworICAgICAgICByZXR1cm4g
dGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdFNlcmlhbGl6ZXIiLCAic3RyQXR0cmli
dXRlIik7CisgICAgfQorICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Cisg
ICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9TdHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0
ZSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpbXBsLnNldFN0ckF0dHJpYnV0ZShuYXRpdmVWYWx1ZSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKKworYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVySW50QXR0cmlidXRl
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQoreworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKKyAgICBKU1Rlc3RT
ZXJpYWxpemVyKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxpemVyKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKKyAgICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RT
ZXJpYWxpemVyIiwgImludEF0dHJpYnV0ZSIpOworICAgIH0KKyAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHVpbnQxNl90IG5hdGl2ZVZhbHVlID0gdG9VSW50MTYo
c3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGltcGwuc2V0SW50
QXR0cmlidXRlKG5hdGl2ZVZhbHVlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCitKU1ZhbHVl
IEpTVGVzdFNlcmlhbGl6ZXI6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNU
ZXN0U2VyaWFsaXplckNvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9i
amVjdCo+KGdsb2JhbE9iamVjdCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdFNlcmlhbGl6ZXJQcm90b3R5cGVGdW5jdGlvblRvSlNPTihFeGVjU3RhdGUqIHN0YXRl
KQoreworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOworICAgIGF1
dG8gY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXplcio+KHRoaXNWYWx1
ZSk7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKKyAgICAgICAgcmV0dXJuIHRocm93
VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0U2VyaWFsaXplciIsICJ0b0pTT04iKTsKKyAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdFNlcmlhbGl6ZXI6Omlu
Zm8oKSk7CisKKyAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3Qoc3Rh
dGUpOworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmVzdWx0
LT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoc3RhdGUsICJz
dHJBdHRyaWJ1dGUiKSwganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuc3RyQXR0cmlidXRl
KCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyhzdGF0ZSwgImludEF0dHJpYnV0ZSIpLCBqc051bWJlcihpbXBsLmludEF0dHJpYnV0
ZSgpLnZhbHVlKCkpLnRvU3RyaW5nKHN0YXRlKSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7Cit9CisKK2Jvb2wgSlNUZXN0U2VyaWFsaXplck93bmVyOjppc1JlYWNoYWJs
ZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCos
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOworICAg
IFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSlNU
ZXN0U2VyaWFsaXplck93bmVyOjpmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhh
bmRsZSwgdm9pZCogY29udGV4dCkKK3sKKyAgICBhdXRvKiBqc1Rlc3RTZXJpYWxpemVyID0ganND
YXN0PEpTVGVzdFNlcmlhbGl6ZXIqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CisgICAgYXV0
byYgd29ybGQgPSAqc3RhdGljX2Nhc3Q8RE9NV3JhcHBlcldvcmxkKj4oY29udGV4dCk7CisgICAg
dW5jYWNoZVdyYXBwZXIod29ybGQsICZqc1Rlc3RTZXJpYWxpemVyLT53cmFwcGVkKCksIGpzVGVz
dFNlcmlhbGl6ZXIpOworfQorCisjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQorI2lmIFBM
QVRGT1JNKFdJTikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NDgzKQorZXh0ZXJuICJDIiB7
IGV4dGVybiB2b2lkICgqY29uc3QgX19pZGVudGlmaWVyKCI/P183VGVzdFNlcmlhbGl6ZXJAV2Vi
Q29yZUBANkJAIilbXSkoKTsgfQorI2Vsc2UKK2V4dGVybiAiQyIgeyBleHRlcm4gdm9pZCogX1pU
Vk43V2ViQ29yZTE0VGVzdFNlcmlhbGl6ZXJFW107IH0KKyNlbmRpZgorI2VuZGlmCisKK0pTQzo6
SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgVGVzdFNlcmlhbGl6ZXIqIGltcGwpCit7CisgICAgaWYgKCFpbXBs
KQorICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgcmV0dXJuIGNyZWF0ZU5ld1dyYXBwZXI8
SlNUZXN0U2VyaWFsaXplcj4oZ2xvYmFsT2JqZWN0LCBpbXBsKTsKK30KKworSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBU
ZXN0U2VyaWFsaXplciogaW1wbCkKK3sKKyAgICBpZiAoIWltcGwpCisgICAgICAgIHJldHVybiBq
c051bGwoKTsKKyAgICBpZiAoSlNWYWx1ZSByZXN1bHQgPSBnZXRFeGlzdGluZ1dyYXBwZXI8SlNU
ZXN0U2VyaWFsaXplcj4oZ2xvYmFsT2JqZWN0LCBpbXBsKSkKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKworI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKKyAgICB2b2lkKiBhY3R1YWxWVGFi
bGVQb2ludGVyID0gKihyZWludGVycHJldF9jYXN0PHZvaWQqKj4oaW1wbCkpOworI2lmIFBMQVRG
T1JNKFdJTikKKyAgICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSByZWludGVycHJldF9j
YXN0PHZvaWQqPihfX2lkZW50aWZpZXIoIj8/XzdUZXN0U2VyaWFsaXplckBXZWJDb3JlQEA2QkAi
KSk7CisjZWxzZQorICAgIHZvaWQqIGV4cGVjdGVkVlRhYmxlUG9pbnRlciA9ICZfWlRWTjdXZWJD
b3JlMTRUZXN0U2VyaWFsaXplckVbMl07CisjaWYgQ09NUElMRVIoQ0xBTkcpCisgICAgLy8gSWYg
dGhpcyBmYWlscyBUZXN0U2VyaWFsaXplciBkb2VzIG5vdCBoYXZlIGEgdnRhYmxlLCBzbyB5b3Ug
bmVlZCB0byBhZGQgdGhlCisgICAgLy8gSW1wbGVtZW50YXRpb25MYWNrc1ZUYWJsZSBhdHRyaWJ1
dGUgdG8gdGhlIGludGVyZmFjZSBkZWZpbml0aW9uCisgICAgQ09NUElMRV9BU1NFUlQoX19pc19w
b2x5bW9ycGhpYyhUZXN0U2VyaWFsaXplciksIFRlc3RTZXJpYWxpemVyX2lzX25vdF9wb2x5bW9y
cGhpYyk7CisjZW5kaWYKKyNlbmRpZgorICAgIC8vIElmIHlvdSBoaXQgdGhpcyBhc3NlcnRpb24g
eW91IGVpdGhlciBoYXZlIGEgdXNlIGFmdGVyIGZyZWUgYnVnLCBvcgorICAgIC8vIFRlc3RTZXJp
YWxpemVyIGhhcyBzdWJjbGFzc2VzLiBJZiBUZXN0U2VyaWFsaXplciBoYXMgc3ViY2xhc3NlcyB0
aGF0IGdldCBwYXNzZWQKKyAgICAvLyB0byB0b0pTKCkgd2UgY3VycmVudGx5IHJlcXVpcmUgVGVz
dFNlcmlhbGl6ZXIgeW91IHRvIG9wdCBvdXQgb2YgYmluZGluZyBoYXJkZW5pbmcKKyAgICAvLyBi
eSBhZGRpbmcgdGhlIFNraXBWVGFibGVWYWxpZGF0aW9uIGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJm
YWNlIElETCBkZWZpbml0aW9uCisgICAgUkVMRUFTRV9BU1NFUlQoYWN0dWFsVlRhYmxlUG9pbnRl
ciA9PSBleHBlY3RlZFZUYWJsZVBvaW50ZXIpOworI2VuZGlmCisgICAgcmV0dXJuIGNyZWF0ZU5l
d1dyYXBwZXI8SlNUZXN0U2VyaWFsaXplcj4oZ2xvYmFsT2JqZWN0LCBpbXBsKTsKK30KKworVGVz
dFNlcmlhbGl6ZXIqIEpTVGVzdFNlcmlhbGl6ZXI6OnRvV3JhcHBlZChKU0M6OkpTVmFsdWUgdmFs
dWUpCit7CisgICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlh
bGl6ZXIqPih2YWx1ZSkpCisgICAgICAgIHJldHVybiAmd3JhcHBlci0+d3JhcHBlZCgpOworICAg
IHJldHVybiBudWxscHRyOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplci5oIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43
ZjBmNzJmZTQ5YzIzYTc2NjhjYjZjOTlkNTMyYzBlYTJkNTkwN2ZlCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6
ZXIuaApAQCAtMCwwICsxLDkwIEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYg
SlNUZXN0U2VyaWFsaXplcl9oCisjZGVmaW5lIEpTVGVzdFNlcmlhbGl6ZXJfaAorCisjaW5jbHVk
ZSAiSlNET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiVGVzdFNlcmlhbGl6ZXIuaCIKKyNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBK
U1Rlc3RTZXJpYWxpemVyIDogcHVibGljIEpTRE9NV3JhcHBlcjxUZXN0U2VyaWFsaXplcj4gewor
cHVibGljOgorICAgIHR5cGVkZWYgSlNET01XcmFwcGVyPFRlc3RTZXJpYWxpemVyPiBCYXNlOwor
ICAgIHN0YXRpYyBKU1Rlc3RTZXJpYWxpemVyKiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RTZXJpYWxpemVy
PiYmIGltcGwpCisgICAgeworICAgICAgICBKU1Rlc3RTZXJpYWxpemVyKiBwdHIgPSBuZXcgKE5v
dE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdFNlcmlhbGl6ZXI+KGdsb2JhbE9iamVjdC0+
dm0oKS5oZWFwKSkgSlNUZXN0U2VyaWFsaXplcihzdHJ1Y3R1cmUsICpnbG9iYWxPYmplY3QsIFdU
Rk1vdmUoaW1wbCkpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+
dm0oKSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IGJv
b2wgaGFzU3RhdGljUHJvcGVydHlUYWJsZSA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNP
YmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwor
ICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9i
YWxPYmplY3QqKTsKKyAgICBzdGF0aWMgVGVzdFNlcmlhbGl6ZXIqIHRvV3JhcHBlZChKU0M6OkpT
VmFsdWUpOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKKworICAgIERF
Q0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNW
YWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9i
amVjdCopOworcHJvdGVjdGVkOgorICAgIEpTVGVzdFNlcmlhbGl6ZXIoSlNDOjpTdHJ1Y3R1cmUq
LCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0U2VyaWFsaXplcj4mJik7CisKKyAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mIHZtKQorICAgIHsKKyAgICAgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24odm0pOworICAgICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CisgICAgfQor
Cit9OworCitjbGFzcyBKU1Rlc3RTZXJpYWxpemVyT3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFu
ZGxlT3duZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFx
dWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNs
b3RWaXNpdG9yJik7CisgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpOworfTsKKworaW5saW5lIEpTQzo6V2Vha0hhbmRsZU93
bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxkJiwgVGVzdFNlcmlhbGl6ZXIqKQorewor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxKU1Rlc3RTZXJpYWxpemVyT3duZXI+IG93bmVyOwor
ICAgIHJldHVybiAmb3duZXIuZ2V0KCk7Cit9CisKK2lubGluZSB2b2lkKiB3cmFwcGVyS2V5KFRl
c3RTZXJpYWxpemVyKiB3cmFwcGFibGVPYmplY3QpCit7CisgICAgcmV0dXJuIHdyYXBwYWJsZU9i
amVjdDsKK30KKworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2Jh
bE9iamVjdCosIFRlc3RTZXJpYWxpemVyKik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0
U2VyaWFsaXplciYgaW1wbCkgeyByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAmaW1w
bCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNE
T01HbG9iYWxPYmplY3QqLCBUZXN0U2VyaWFsaXplciopOworCisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplcldpdGhNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZXJXaXRoTWFwLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45MWI3MzJjYWYyZGJiNjI0OTEyOGUxMjU1OGUwNDc5MDU1ZjhhMGMzCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFNlcmlhbGl6ZXJXaXRoTWFwLmNwcApAQCAtMCwwICsxLDMwMCBAQAorLyoKKyAgICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBm
aWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1P
RElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNUZXN0U2VyaWFsaXpl
cldpdGhNYXAuaCIKKworI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9N
Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUg
IlVSTC5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KKyNpbmNsdWRl
IDxydW50aW1lL0pTU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorCit1c2luZyBu
YW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEF0dHJpYnV0ZXMKKwor
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVyV2l0aE1hcFN0ckF0dHJpYnV0ZShK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
K2Jvb2wgc2V0SlNUZXN0U2VyaWFsaXplcldpdGhNYXBTdHJBdHRyaWJ1dGUoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplcldpdGhNYXBJbnRBdHRyaWJ1dGUoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNl
dEpTVGVzdFNlcmlhbGl6ZXJXaXRoTWFwSW50QXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdFNlcmlhbGl6ZXJXaXRoTWFwQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdFNl
cmlhbGl6ZXJXaXRoTWFwQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RTZXJpYWxpemVyV2l0aE1hcFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEV4ZWNT
dGF0ZSogc3RhdGUpOworCitjbGFzcyBKU1Rlc3RTZXJpYWxpemVyV2l0aE1hcFByb3RvdHlwZSA6
IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlND
OjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIEpTVGVzdFNlcmlhbGl6ZXJXaXRo
TWFwUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpT
VGVzdFNlcmlhbGl6ZXJXaXRoTWFwUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6
YWxsb2NhdGVDZWxsPEpTVGVzdFNlcmlhbGl6ZXJXaXRoTWFwUHJvdG90eXBlPih2bS5oZWFwKSkg
SlNUZXN0U2VyaWFsaXplcldpdGhNYXBQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0
dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBw
dHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4g
SlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6
VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAg
fQorCitwcml2YXRlOgorICAgIEpTVGVzdFNlcmlhbGl6ZXJXaXRoTWFwUHJvdG90eXBlKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
KyAgICAgICAgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKKyAgICB7Cisg
ICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cit9OworCit0eXBlZGVm
IEpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpTVGVzdFNlcmlhbGl6ZXJXaXRoTWFw
PiBKU1Rlc3RTZXJpYWxpemVyV2l0aE1hcENvbnN0cnVjdG9yOworCit0ZW1wbGF0ZTw+IEpTVmFs
dWUgSlNUZXN0U2VyaWFsaXplcldpdGhNYXBDb25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0
dXJlKEpTQzo6Vk0mIHZtLCBjb25zdCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQor
eworICAgIFVOVVNFRF9QQVJBTSh2bSk7CisgICAgcmV0dXJuIGdsb2JhbE9iamVjdC5mdW5jdGlv
blByb3RvdHlwZSgpOworfQorCit0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0U2VyaWFsaXplcldpdGhN
YXBDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+cHJvdG90eXBlLCBKU1Rlc3RTZXJpYWxpemVyV2l0aE1hcDo6cHJvdG90eXBlKHZtLCAmZ2xv
YmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOworICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwg
U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiVGVzdFNlcmlhbGl6ZXJXaXRoTWFwIikpKSwgUmVhZE9ubHkg
fCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgs
IGpzTnVtYmVyKDApLCBSZWFkT25seSB8IERvbnRFbnVtKTsKK30KKwordGVtcGxhdGU8PiBjb25z
dCBDbGFzc0luZm8gSlNUZXN0U2VyaWFsaXplcldpdGhNYXBDb25zdHJ1Y3Rvcjo6c19pbmZvID0g
eyAiVGVzdFNlcmlhbGl6ZXJXaXRoTWFwIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhP
RF9UQUJMRShKU1Rlc3RTZXJpYWxpemVyV2l0aE1hcENvbnN0cnVjdG9yKSB9OworCisvKiBIYXNo
IHRhYmxlIGZvciBwcm90b3R5cGUgKi8KKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpT
VGVzdFNlcmlhbGl6ZXJXaXRoTWFwUHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9Cit7CisgICAgeyAi
Y29uc3RydWN0b3IiLCBEb250RW51bSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19j
YXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RTZXJpYWxpemVyV2l0aE1hcENv
bnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZh
bHVlRnVuYz4oc2V0SlNUZXN0U2VyaWFsaXplcldpdGhNYXBDb25zdHJ1Y3RvcikgfSB9LAorICAg
IHsgInN0ckF0dHJpYnV0ZSIsIEN1c3RvbUFjY2Vzc29yLCBOb0ludHJpbnNpYywgeyAoaW50cHRy
X3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdFNlcmlhbGl6
ZXJXaXRoTWFwU3RyQXR0cmlidXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0
eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0U2VyaWFsaXplcldpdGhNYXBTdHJBdHRyaWJ1
dGUpIH0gfSwKKyAgICB7ICJpbnRBdHRyaWJ1dGUiLCBDdXN0b21BY2Nlc3NvciwgTm9JbnRyaW5z
aWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihq
c1Rlc3RTZXJpYWxpemVyV2l0aE1hcEludEF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nh
c3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdFNlcmlhbGl6ZXJXaXRo
TWFwSW50QXR0cmlidXRlKSB9IH0sCisgICAgeyAidG9KU09OIiwgSlNDOjpGdW5jdGlvbiwgTm9J
bnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RT
ZXJpYWxpemVyV2l0aE1hcFByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKSwgKGludHB0cl90KSAoMCkg
fSB9LAorfTsKKworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdFNlcmlhbGl6ZXJXaXRoTWFwUHJvdG90
eXBlOjpzX2luZm8gPSB7ICJUZXN0U2VyaWFsaXplcldpdGhNYXBQcm90b3R5cGUiLCAmQmFzZTo6
c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdFNlcmlhbGl6ZXJXaXRoTWFwUHJv
dG90eXBlKSB9OworCit2b2lkIEpTVGVzdFNlcmlhbGl6ZXJXaXRoTWFwUHJvdG90eXBlOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAg
IHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNUZXN0U2VyaWFsaXplcldpdGhNYXBQcm90b3R5
cGVUYWJsZVZhbHVlcywgKnRoaXMpOworfQorCitjb25zdCBDbGFzc0luZm8gSlNUZXN0U2VyaWFs
aXplcldpdGhNYXA6OnNfaW5mbyA9IHsgIlRlc3RTZXJpYWxpemVyV2l0aE1hcCIsICZCYXNlOjpz
X2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0U2VyaWFsaXplcldpdGhNYXApIH07
CisKK0pTVGVzdFNlcmlhbGl6ZXJXaXRoTWFwOjpKU1Rlc3RTZXJpYWxpemVyV2l0aE1hcChTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmPFRl
c3RTZXJpYWxpemVyV2l0aE1hcD4mJiBpbXBsKQorICAgIDogSlNET01XcmFwcGVyPFRlc3RTZXJp
YWxpemVyV2l0aE1hcD4oc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpCit7
Cit9CisKK0pTT2JqZWN0KiBKU1Rlc3RTZXJpYWxpemVyV2l0aE1hcDo6Y3JlYXRlUHJvdG90eXBl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gSlNU
ZXN0U2VyaWFsaXplcldpdGhNYXBQcm90b3R5cGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBK
U1Rlc3RTZXJpYWxpemVyV2l0aE1hcFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9i
YWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKK30KKworSlNPYmpl
Y3QqIEpTVGVzdFNlcmlhbGl6ZXJXaXRoTWFwOjpwcm90b3R5cGUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0
U2VyaWFsaXplcldpdGhNYXA+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCit2b2lkIEpTVGVzdFNl
cmlhbGl6ZXJXaXRoTWFwOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQoreworICAgIEpTVGVz
dFNlcmlhbGl6ZXJXaXRoTWFwKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0U2VyaWFs
aXplcldpdGhNYXAqPihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT5KU1Rlc3RTZXJpYWxpemVyV2l0
aE1hcDo6fkpTVGVzdFNlcmlhbGl6ZXJXaXRoTWFwKCk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpz
VGVzdFNlcmlhbGl6ZXJXaXRoTWFwU3RyQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CisgICAgSlNWYWx1ZSBkZWNvZGVk
VGhpc1ZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSk7CisgICAgYXV0byogY2FzdGVk
VGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXplcldpdGhNYXAqPihkZWNvZGVkVGhp
c1ZhbHVlKTsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CisgICAgICAgIHJldHVy
biB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0U2VyaWFsaXplcldpdGhNYXAiLCAi
c3RyQXR0cmlidXRlIik7CisgICAgfQorICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1w
bC5zdHJBdHRyaWJ1dGUoKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwor
fQorCisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZXJXaXRoTWFwSW50QXR0cmlidXRl
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1
ZSk7CisgICAgSlNWYWx1ZSBkZWNvZGVkVGhpc1ZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSk7CisgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFs
aXplcldpdGhNYXAqPihkZWNvZGVkVGhpc1ZhbHVlKTsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CisgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJU
ZXN0U2VyaWFsaXplcldpdGhNYXAiLCAiaW50QXR0cmlidXRlIik7CisgICAgfQorICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051
bWJlcihpbXBsLmludEF0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7Cit9CisKKworRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplcldpdGhNYXBDb25z
dHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKK3sKKyAgICBKU1Rlc3RTZXJpYWxpemVyV2l0aE1hcFByb3RvdHlwZSogZG9tT2Jq
ZWN0ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxpemVyV2l0aE1hcFByb3RvdHlwZSo+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoIWRvbU9iamVjdCkKKyAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNUZXN0U2VyaWFsaXplcldpdGhNYXA6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBk
b21PYmplY3QtPmdsb2JhbE9iamVjdCgpKSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0U2VyaWFsaXpl
cldpdGhNYXBDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgSlNUZXN0U2VyaWFsaXplcldp
dGhNYXBQcm90b3R5cGUqIGRvbU9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXpl
cldpdGhNYXBQcm90b3R5cGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYg
KFVOTElLRUxZKCFkb21PYmplY3QpKSB7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0
LWluIGNvbnN0cnVjdG9yCisgICAgcmV0dXJuIGRvbU9iamVjdC0+cHV0RGlyZWN0KHN0YXRlLT52
bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCB2YWx1ZSk7Cit9CisKK2Jv
b2wgc2V0SlNUZXN0U2VyaWFsaXplcldpdGhNYXBTdHJBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
Cit7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwor
ICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOworICAgIEpTVGVzdFNlcmlhbGl6ZXJXaXRoTWFw
KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxpemVyV2l0aE1hcCo+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CisgICAgICAgIHJldHVybiB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0U2Vy
aWFsaXplcldpdGhNYXAiLCAic3RyQXR0cmlidXRlIik7CisgICAgfQorICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgU3RyaW5nIG5hdGl2ZVZhbHVlID0gdmFsdWUu
dG9TdHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpbXBsLnNldFN0ckF0
dHJpYnV0ZShuYXRpdmVWYWx1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKworYm9vbCBzZXRK
U1Rlc3RTZXJpYWxpemVyV2l0aE1hcEludEF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5V
U0VEX1BBUkFNKHRoaXNWYWx1ZSk7CisgICAgSlNUZXN0U2VyaWFsaXplcldpdGhNYXAqIGNhc3Rl
ZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6ZXJXaXRoTWFwKj4oSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKKyAg
ICAgICAgcmV0dXJuIHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RTZXJpYWxpemVy
V2l0aE1hcCIsICJpbnRBdHRyaWJ1dGUiKTsKKyAgICB9CisgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKKyAgICB1aW50MTZfdCBuYXRpdmVWYWx1ZSA9IHRvVUludDE2KHN0
YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7CisgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpbXBsLnNldEludEF0
dHJpYnV0ZShuYXRpdmVWYWx1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKworSlNWYWx1ZSBK
U1Rlc3RTZXJpYWxpemVyV2l0aE1hcDo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3Rv
cjxKU1Rlc3RTZXJpYWxpemVyV2l0aE1hcENvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBK
U0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdFNlcmlhbGl6ZXJXaXRoTWFwUHJvdG90eXBlRnVuY3Rpb25Ub0pT
T04oRXhlY1N0YXRlKiBzdGF0ZSkKK3sKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50
aGlzVmFsdWUoKTsKKyAgICBhdXRvIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFNl
cmlhbGl6ZXJXaXRoTWFwKj4odGhpc1ZhbHVlKTsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKQorICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RTZXJp
YWxpemVyV2l0aE1hcCIsICJ0b0pTT04iKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KGNhc3RlZFRoaXMsIEpTVGVzdFNlcmlhbGl6ZXJXaXRoTWFwOjppbmZvKCkpOworCisgICAgSlNP
YmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KHN0YXRlKTsKKyAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHN0YXRl
LT52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCAic3RyQXR0cmlidXRlIiksIGpz
U3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnN0ckF0dHJpYnV0ZSgpKSk7CisgICAgcmVzdWx0
LT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoc3RhdGUsICJp
bnRBdHRyaWJ1dGUiKSwganNOdW1iZXIoaW1wbC5pbnRBdHRyaWJ1dGUoKS52YWx1ZSgpKS50b1N0
cmluZyhzdGF0ZSkpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQor
Citib29sIEpTVGVzdFNlcmlhbGl6ZXJXaXRoTWFwT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CisgICAgVU5VU0VEX1BB
UkFNKHZpc2l0b3IpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBKU1Rlc3RTZXJpYWxp
emVyV2l0aE1hcE93bmVyOjpmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRs
ZSwgdm9pZCogY29udGV4dCkKK3sKKyAgICBhdXRvKiBqc1Rlc3RTZXJpYWxpemVyV2l0aE1hcCA9
IGpzQ2FzdDxKU1Rlc3RTZXJpYWxpemVyV2l0aE1hcCo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgp
KTsKKyAgICBhdXRvJiB3b3JsZCA9ICpzdGF0aWNfY2FzdDxET01XcmFwcGVyV29ybGQqPihjb250
ZXh0KTsKKyAgICB1bmNhY2hlV3JhcHBlcih3b3JsZCwgJmpzVGVzdFNlcmlhbGl6ZXJXaXRoTWFw
LT53cmFwcGVkKCksIGpzVGVzdFNlcmlhbGl6ZXJXaXRoTWFwKTsKK30KKworI2lmIEVOQUJMRShC
SU5ESU5HX0lOVEVHUklUWSkKKyNpZiBQTEFURk9STShXSU4pCisjcHJhZ21hIHdhcm5pbmcoZGlz
YWJsZTogNDQ4MykKK2V4dGVybiAiQyIgeyBleHRlcm4gdm9pZCAoKmNvbnN0IF9faWRlbnRpZmll
cigiPz9fN1Rlc3RTZXJpYWxpemVyV2l0aE1hcEBXZWJDb3JlQEA2QkAiKVtdKSgpOyB9CisjZWxz
ZQorZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkKiBfWlRWTjdXZWJDb3JlMjFUZXN0U2VyaWFsaXpl
cldpdGhNYXBFW107IH0KKyNlbmRpZgorI2VuZGlmCisKK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlD
cmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
VGVzdFNlcmlhbGl6ZXJXaXRoTWFwKiBpbXBsKQoreworICAgIGlmICghaW1wbCkKKyAgICAgICAg
cmV0dXJuIGpzTnVsbCgpOworICAgIHJldHVybiBjcmVhdGVOZXdXcmFwcGVyPEpTVGVzdFNlcmlh
bGl6ZXJXaXRoTWFwPihnbG9iYWxPYmplY3QsIGltcGwpOworfQorCitKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RT
ZXJpYWxpemVyV2l0aE1hcCogaW1wbCkKK3sKKyAgICBpZiAoIWltcGwpCisgICAgICAgIHJldHVy
biBqc051bGwoKTsKKyAgICBpZiAoSlNWYWx1ZSByZXN1bHQgPSBnZXRFeGlzdGluZ1dyYXBwZXI8
SlNUZXN0U2VyaWFsaXplcldpdGhNYXA+KGdsb2JhbE9iamVjdCwgaW1wbCkpCisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisKKyNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCisgICAgdm9pZCog
YWN0dWFsVlRhYmxlUG9pbnRlciA9ICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KGltcGwpKTsK
KyNpZiBQTEFURk9STShXSU4pCisgICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oX19pZGVudGlmaWVyKCI/P183VGVzdFNlcmlhbGl6ZXJXaXRo
TWFwQFdlYkNvcmVAQDZCQCIpKTsKKyNlbHNlCisgICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2lu
dGVyID0gJl9aVFZON1dlYkNvcmUyMVRlc3RTZXJpYWxpemVyV2l0aE1hcEVbMl07CisjaWYgQ09N
UElMRVIoQ0xBTkcpCisgICAgLy8gSWYgdGhpcyBmYWlscyBUZXN0U2VyaWFsaXplcldpdGhNYXAg
ZG9lcyBub3QgaGF2ZSBhIHZ0YWJsZSwgc28geW91IG5lZWQgdG8gYWRkIHRoZQorICAgIC8vIElt
cGxlbWVudGF0aW9uTGFja3NWVGFibGUgYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2UgZGVmaW5p
dGlvbgorICAgIENPTVBJTEVfQVNTRVJUKF9faXNfcG9seW1vcnBoaWMoVGVzdFNlcmlhbGl6ZXJX
aXRoTWFwKSwgVGVzdFNlcmlhbGl6ZXJXaXRoTWFwX2lzX25vdF9wb2x5bW9ycGhpYyk7CisjZW5k
aWYKKyNlbmRpZgorICAgIC8vIElmIHlvdSBoaXQgdGhpcyBhc3NlcnRpb24geW91IGVpdGhlciBo
YXZlIGEgdXNlIGFmdGVyIGZyZWUgYnVnLCBvcgorICAgIC8vIFRlc3RTZXJpYWxpemVyV2l0aE1h
cCBoYXMgc3ViY2xhc3Nlcy4gSWYgVGVzdFNlcmlhbGl6ZXJXaXRoTWFwIGhhcyBzdWJjbGFzc2Vz
IHRoYXQgZ2V0IHBhc3NlZAorICAgIC8vIHRvIHRvSlMoKSB3ZSBjdXJyZW50bHkgcmVxdWlyZSBU
ZXN0U2VyaWFsaXplcldpdGhNYXAgeW91IHRvIG9wdCBvdXQgb2YgYmluZGluZyBoYXJkZW5pbmcK
KyAgICAvLyBieSBhZGRpbmcgdGhlIFNraXBWVGFibGVWYWxpZGF0aW9uIGF0dHJpYnV0ZSB0byB0
aGUgaW50ZXJmYWNlIElETCBkZWZpbml0aW9uCisgICAgUkVMRUFTRV9BU1NFUlQoYWN0dWFsVlRh
YmxlUG9pbnRlciA9PSBleHBlY3RlZFZUYWJsZVBvaW50ZXIpOworI2VuZGlmCisgICAgcmV0dXJu
IGNyZWF0ZU5ld1dyYXBwZXI8SlNUZXN0U2VyaWFsaXplcldpdGhNYXA+KGdsb2JhbE9iamVjdCwg
aW1wbCk7Cit9CisKK1Rlc3RTZXJpYWxpemVyV2l0aE1hcCogSlNUZXN0U2VyaWFsaXplcldpdGhN
YXA6OnRvV3JhcHBlZChKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKGF1dG8qIHdyYXBw
ZXIgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6ZXJXaXRoTWFwKj4odmFsdWUpKQorICAg
ICAgICByZXR1cm4gJndyYXBwZXItPndyYXBwZWQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
KworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFNlcmlhbGl6ZXJXaXRoTWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplcldpdGhNYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYjk2MGE0
OTZjOWI3ZTc5MWQwMjgzMGYwOTEyOTUyMDM2ZjJhYzFiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZXJXaXRo
TWFwLmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVm
IEpTVGVzdFNlcmlhbGl6ZXJXaXRoTWFwX2gKKyNkZWZpbmUgSlNUZXN0U2VyaWFsaXplcldpdGhN
YXBfaAorCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiVGVzdFNlcmlhbGl6
ZXJXaXRoTWFwLmgiCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgSlNUZXN0U2VyaWFsaXplcldpdGhNYXAgOiBwdWJsaWMgSlNE
T01XcmFwcGVyPFRlc3RTZXJpYWxpemVyV2l0aE1hcD4geworcHVibGljOgorICAgIHR5cGVkZWYg
SlNET01XcmFwcGVyPFRlc3RTZXJpYWxpemVyV2l0aE1hcD4gQmFzZTsKKyAgICBzdGF0aWMgSlNU
ZXN0U2VyaWFsaXplcldpdGhNYXAqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdFNlcmlhbGl6ZXJXaXRoTWFw
PiYmIGltcGwpCisgICAgeworICAgICAgICBKU1Rlc3RTZXJpYWxpemVyV2l0aE1hcCogcHRyID0g
bmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RTZXJpYWxpemVyV2l0aE1hcD4o
Z2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBKU1Rlc3RTZXJpYWxpemVyV2l0aE1hcChzdHJ1Y3R1
cmUsICpnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOworICAgICAgICBwdHItPmZpbmlzaENy
ZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQor
CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzU3RhdGljUHJvcGVydHlUYWJsZSA9IGZhbHNlOwor
CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlND
OjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUo
SlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0aWMgVGVzdFNlcmlhbGl6
ZXJXaXRoTWFwKiB0b1dyYXBwZWQoSlNDOjpKU1ZhbHVlKTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0
cm95KEpTQzo6SlNDZWxsKik7CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgSlND
OjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlND
OjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKK3Byb3RlY3RlZDoKKyAgICBKU1Rl
c3RTZXJpYWxpemVyV2l0aE1hcChKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Jiwg
UmVmPFRlc3RTZXJpYWxpemVyV2l0aE1hcD4mJik7CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KEpTQzo6Vk0mIHZtKQorICAgIHsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwor
ICAgICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CisgICAgfQorCit9OworCitjbGFzcyBK
U1Rlc3RTZXJpYWxpemVyV2l0aE1hcE93bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVy
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRv
ciYpOworICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
LCB2b2lkKiBjb250ZXh0KTsKK307CisKK2lubGluZSBKU0M6OldlYWtIYW5kbGVPd25lciogd3Jh
cHBlck93bmVyKERPTVdyYXBwZXJXb3JsZCYsIFRlc3RTZXJpYWxpemVyV2l0aE1hcCopCit7Cisg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEpTVGVzdFNlcmlhbGl6ZXJXaXRoTWFwT3duZXI+IG93
bmVyOworICAgIHJldHVybiAmb3duZXIuZ2V0KCk7Cit9CisKK2lubGluZSB2b2lkKiB3cmFwcGVy
S2V5KFRlc3RTZXJpYWxpemVyV2l0aE1hcCogd3JhcHBhYmxlT2JqZWN0KQoreworICAgIHJldHVy
biB3cmFwcGFibGVPYmplY3Q7Cit9CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRl
KiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0U2VyaWFsaXplcldpdGhNYXAqKTsKK2lubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFRlc3RTZXJpYWxpemVyV2l0aE1hcCYgaW1wbCkgeyByZXR1cm4gdG9K
UyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAmaW1wbCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlD
cmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0U2VyaWFsaXpl
cldpdGhNYXAqKTsKKworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdFNl
cmlhbGl6ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RP
TVRlc3RTZXJpYWxpemVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNThiMzdlYTMwODQwNWQ3ZjgxMmIwOTBkNTk1
NTk0N2UzZTUzMDkxZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RTZXJpYWxpemVyLmgKQEAgLTAsMCArMSwzNSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2Ft
dWVsIFdlaW5pZyA8c2FtLndlaW5pZ0BnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0IDxXZWJDb3JlL0RPTU9iamVjdC5oPgorCitA
Y2xhc3MgTlNTdHJpbmc7CisKK1dFQktJVF9DTEFTU19BVkFJTEFCTEVfTUFDKDk4NzZfNSkKK1dF
QkNPUkVfRVhQT1JUIEBpbnRlcmZhY2UgRE9NVGVzdFNlcmlhbGl6ZXIgOiBET01PYmplY3QKK0Bw
cm9wZXJ0eSAoY29weSkgTlNTdHJpbmcgKnN0ckF0dHJpYnV0ZTsKK0Bwcm9wZXJ0eSB1bnNpZ25l
ZCBzaG9ydCBpbnRBdHRyaWJ1dGU7CitAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0U2VyaWFsaXplci5tbSBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RTZXJpYWxpemVyLm1tCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmQyMTE1ZDdmZjU3YjkwZDlhYzM4Yzk3NTdlNWUwOGNmNGRkNGZjODgKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9E
T01UZXN0U2VyaWFsaXplci5tbQpAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAqIFRoaXMgZmlsZSBo
YXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkh
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW1wb3J0ICJj
b25maWcuaCIKKyNpbXBvcnQgIkRPTUludGVybmFsLmgiCisKKyNpbXBvcnQgIkRPTVRlc3RTZXJp
YWxpemVyLmgiCisKKyNpbXBvcnQgIkRPTU5vZGVJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NVGVz
dFNlcmlhbGl6ZXJJbnRlcm5hbC5oIgorI2ltcG9ydCAiRXhjZXB0aW9uSGFuZGxlcnMuaCIKKyNp
bXBvcnQgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgorI2ltcG9ydCAiVGVzdFNlcmlhbGl6ZXIu
aCIKKyNpbXBvcnQgIlRocmVhZENoZWNrLmgiCisjaW1wb3J0ICJVUkwuaCIKKyNpbXBvcnQgIldl
YkNvcmVPYmpDRXh0cmFzLmgiCisjaW1wb3J0ICJXZWJTY3JpcHRPYmplY3RQcml2YXRlLmgiCisj
aW1wb3J0IDx3dGYvR2V0UHRyLmg+CisKKyNkZWZpbmUgSU1QTCByZWludGVycHJldF9jYXN0PFdl
YkNvcmU6OlRlc3RTZXJpYWxpemVyKj4oX2ludGVybmFsKQorCitAaW1wbGVtZW50YXRpb24gRE9N
VGVzdFNlcmlhbGl6ZXIKKworLSAodm9pZClkZWFsbG9jCit7CisgICAgaWYgKFdlYkNvcmVPYmpD
U2NoZWR1bGVEZWFsbG9jYXRlT25NYWluVGhyZWFkKFtET01UZXN0U2VyaWFsaXplciBjbGFzc10s
IHNlbGYpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoX2ludGVybmFsKQorICAgICAgICBJ
TVBMLT5kZXJlZigpOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAoTlNTdHJpbmcgKilz
dHJBdHRyaWJ1dGUKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7
CisgICAgcmV0dXJuIElNUEwtPnN0ckF0dHJpYnV0ZSgpOworfQorCistICh2b2lkKXNldFN0ckF0
dHJpYnV0ZTooTlNTdHJpbmcgKiluZXdTdHJBdHRyaWJ1dGUKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgSU1QTC0+c2V0U3RyQXR0cmlidXRlKG5ld1N0
ckF0dHJpYnV0ZSk7Cit9CisKKy0gKHVuc2lnbmVkIHNob3J0KWludEF0dHJpYnV0ZQoreworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICByZXR1cm4gSU1QTC0+
aW50QXR0cmlidXRlKCk7Cit9CisKKy0gKHZvaWQpc2V0SW50QXR0cmlidXRlOih1bnNpZ25lZCBz
aG9ydCluZXdJbnRBdHRyaWJ1dGUKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3Rh
dGUgc3RhdGU7CisgICAgSU1QTC0+c2V0SW50QXR0cmlidXRlKG5ld0ludEF0dHJpYnV0ZSk7Cit9
CisKK0BlbmQKKworV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZXIqIGNvcmUoRE9NVGVzdFNlcmlhbGl6
ZXIgKndyYXBwZXIpCit7CisgICAgcmV0dXJuIHdyYXBwZXIgPyByZWludGVycHJldF9jYXN0PFdl
YkNvcmU6OlRlc3RTZXJpYWxpemVyKj4od3JhcHBlci0+X2ludGVybmFsKSA6IDA7Cit9CisKK0RP
TVRlc3RTZXJpYWxpemVyICpraXQoV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZXIqIHZhbHVlKQorewor
ICAgIFdlYkNvcmVUaHJlYWRWaW9sYXRpb25DaGVja1JvdW5kT25lKCk7CisgICAgaWYgKCF2YWx1
ZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBpZiAoRE9NVGVzdFNlcmlhbGl6ZXIgKndyYXBw
ZXIgPSBnZXRET01XcmFwcGVyKHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIFtbd3JhcHBlciByZXRh
aW5dIGF1dG9yZWxlYXNlXTsKKyAgICBET01UZXN0U2VyaWFsaXplciAqd3JhcHBlciA9IFtbRE9N
VGVzdFNlcmlhbGl6ZXIgYWxsb2NdIF9pbml0XTsKKyAgICB3cmFwcGVyLT5faW50ZXJuYWwgPSBy
ZWludGVycHJldF9jYXN0PERPTU9iamVjdEludGVybmFsKj4odmFsdWUpOworICAgIHZhbHVlLT5y
ZWYoKTsKKyAgICBhZGRET01XcmFwcGVyKHdyYXBwZXIsIHZhbHVlKTsKKyAgICByZXR1cm4gW3dy
YXBwZXIgYXV0b3JlbGVhc2VdOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdFNlcmlhbGl6ZXJJbnRlcm5hbC5oIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdFNlcmlhbGl6ZXJJbnRl
cm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmU0NjQyMTNmYTQwY2U0YWE5MDI0YzFiN2ZmZDFkOGU1NTE0MjNi
ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvT2JqQy9ET01UZXN0U2VyaWFsaXplckludGVybmFsLmgKQEAgLTAsMCArMSwzNCBAQAorLyoK
KyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW1wb3J0IDxXZWJDb3JlL0RPTVRlc3RTZXJpYWxpemVyLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK2NsYXNzIFRlc3RTZXJpYWxpemVyOworfQorCitXRUJDT1JFX0VYUE9SVCBXZWJD
b3JlOjpUZXN0U2VyaWFsaXplciogY29yZShET01UZXN0U2VyaWFsaXplciAqKTsKK1dFQkNPUkVf
RVhQT1JUIERPTVRlc3RTZXJpYWxpemVyICpraXQoV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZXIqKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RP
TVRlc3RTZXJpYWxpemVyV2l0aE1hcC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L09iakMvRE9NVGVzdFNlcmlhbGl6ZXJXaXRoTWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTZkNDkz
NWRkMTY0YzdiZjI3MDMzYTcxMWJkOGE5ZjlhN2M2MzIxNwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RTZXJpYWxpemVy
V2l0aE1hcC5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNhbS53ZWluaWdAZ21haWwu
Y29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9y
dCA8V2ViQ29yZS9ET01PYmplY3QuaD4KKworQGNsYXNzIE5TU3RyaW5nOworCitXRUJLSVRfQ0xB
U1NfQVZBSUxBQkxFX01BQyg5ODc2XzUpCitXRUJDT1JFX0VYUE9SVCBAaW50ZXJmYWNlIERPTVRl
c3RTZXJpYWxpemVyV2l0aE1hcCA6IERPTU9iamVjdAorQHByb3BlcnR5IChjb3B5KSBOU1N0cmlu
ZyAqc3RyQXR0cmlidXRlOworQHByb3BlcnR5IHVuc2lnbmVkIHNob3J0IGludEF0dHJpYnV0ZTsK
K0BlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9P
YmpDL0RPTVRlc3RTZXJpYWxpemVyV2l0aE1hcC5tbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RTZXJpYWxpemVyV2l0aE1hcC5tbQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4yN2EyMDUzZDg0ZTQ0MWNjM2QwODg4NjFmYTRkZDhjZmRhZWNiZDM2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdFNl
cmlhbGl6ZXJXaXRoTWFwLm1tCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogVGhpcyBmaWxlIGhh
cyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEK
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgImNv
bmZpZy5oIgorI2ltcG9ydCAiRE9NSW50ZXJuYWwuaCIKKworI2ltcG9ydCAiRE9NVGVzdFNlcmlh
bGl6ZXJXaXRoTWFwLmgiCisKKyNpbXBvcnQgIkRPTU5vZGVJbnRlcm5hbC5oIgorI2ltcG9ydCAi
RE9NVGVzdFNlcmlhbGl6ZXJXaXRoTWFwSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkV4Y2VwdGlvbkhh
bmRsZXJzLmgiCisjaW1wb3J0ICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKKyNpbXBvcnQgIlRl
c3RTZXJpYWxpemVyV2l0aE1hcC5oIgorI2ltcG9ydCAiVGhyZWFkQ2hlY2suaCIKKyNpbXBvcnQg
IlVSTC5oIgorI2ltcG9ydCAiV2ViQ29yZU9iakNFeHRyYXMuaCIKKyNpbXBvcnQgIldlYlNjcmlw
dE9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPHd0Zi9HZXRQdHIuaD4KKworI2RlZmluZSBJTVBM
IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViQ29yZTo6VGVzdFNlcmlhbGl6ZXJXaXRoTWFwKj4oX2ludGVy
bmFsKQorCitAaW1wbGVtZW50YXRpb24gRE9NVGVzdFNlcmlhbGl6ZXJXaXRoTWFwCisKKy0gKHZv
aWQpZGVhbGxvYworeworICAgIGlmIChXZWJDb3JlT2JqQ1NjaGVkdWxlRGVhbGxvY2F0ZU9uTWFp
blRocmVhZChbRE9NVGVzdFNlcmlhbGl6ZXJXaXRoTWFwIGNsYXNzXSwgc2VsZikpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChfaW50ZXJuYWwpCisgICAgICAgIElNUEwtPmRlcmVmKCk7Cisg
ICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistIChOU1N0cmluZyAqKXN0ckF0dHJpYnV0ZQorewor
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICByZXR1cm4gSU1Q
TC0+c3RyQXR0cmlidXRlKCk7Cit9CisKKy0gKHZvaWQpc2V0U3RyQXR0cmlidXRlOihOU1N0cmlu
ZyAqKW5ld1N0ckF0dHJpYnV0ZQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICBJTVBMLT5zZXRTdHJBdHRyaWJ1dGUobmV3U3RyQXR0cmlidXRlKTsKK30K
KworLSAodW5zaWduZWQgc2hvcnQpaW50QXR0cmlidXRlCit7CisgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIHJldHVybiBJTVBMLT5pbnRBdHRyaWJ1dGUoKTsK
K30KKworLSAodm9pZClzZXRJbnRBdHRyaWJ1dGU6KHVuc2lnbmVkIHNob3J0KW5ld0ludEF0dHJp
YnV0ZQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBJ
TVBMLT5zZXRJbnRBdHRyaWJ1dGUobmV3SW50QXR0cmlidXRlKTsKK30KKworQGVuZAorCitXZWJD
b3JlOjpUZXN0U2VyaWFsaXplcldpdGhNYXAqIGNvcmUoRE9NVGVzdFNlcmlhbGl6ZXJXaXRoTWFw
ICp3cmFwcGVyKQoreworICAgIHJldHVybiB3cmFwcGVyID8gcmVpbnRlcnByZXRfY2FzdDxXZWJD
b3JlOjpUZXN0U2VyaWFsaXplcldpdGhNYXAqPih3cmFwcGVyLT5faW50ZXJuYWwpIDogMDsKK30K
KworRE9NVGVzdFNlcmlhbGl6ZXJXaXRoTWFwICpraXQoV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZXJX
aXRoTWFwKiB2YWx1ZSkKK3sKKyAgICBXZWJDb3JlVGhyZWFkVmlvbGF0aW9uQ2hlY2tSb3VuZE9u
ZSgpOworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgaWYgKERPTVRl
c3RTZXJpYWxpemVyV2l0aE1hcCAqd3JhcHBlciA9IGdldERPTVdyYXBwZXIodmFsdWUpKQorICAg
ICAgICByZXR1cm4gW1t3cmFwcGVyIHJldGFpbl0gYXV0b3JlbGVhc2VdOworICAgIERPTVRlc3RT
ZXJpYWxpemVyV2l0aE1hcCAqd3JhcHBlciA9IFtbRE9NVGVzdFNlcmlhbGl6ZXJXaXRoTWFwIGFs
bG9jXSBfaW5pdF07CisgICAgd3JhcHBlci0+X2ludGVybmFsID0gcmVpbnRlcnByZXRfY2FzdDxE
T01PYmplY3RJbnRlcm5hbCo+KHZhbHVlKTsKKyAgICB2YWx1ZS0+cmVmKCk7CisgICAgYWRkRE9N
V3JhcHBlcih3cmFwcGVyLCB2YWx1ZSk7CisgICAgcmV0dXJuIFt3cmFwcGVyIGF1dG9yZWxlYXNl
XTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9P
YmpDL0RPTVRlc3RTZXJpYWxpemVyV2l0aE1hcEludGVybmFsLmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0U2VyaWFsaXplcldpdGhNYXBJbnRlcm5h
bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjUyNmM2N2Q1YmMzZGRiYzA5ODQ2MzE0MTI4ODFhNmFhMDkxZTFiNDUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
T2JqQy9ET01UZXN0U2VyaWFsaXplcldpdGhNYXBJbnRlcm5hbC5oCkBAIC0wLDAgKzEsMzQgQEAK
Ky8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgKiBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdz
LnBsLiBETyBOT1QgTU9ESUZZIQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2ltcG9ydCA8V2ViQ29yZS9ET01UZXN0U2VyaWFsaXplcldpdGhNYXAuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgVGVzdFNlcmlhbGl6ZXJXaXRoTWFwOworfQorCitX
RUJDT1JFX0VYUE9SVCBXZWJDb3JlOjpUZXN0U2VyaWFsaXplcldpdGhNYXAqIGNvcmUoRE9NVGVz
dFNlcmlhbGl6ZXJXaXRoTWFwICopOworV0VCQ09SRV9FWFBPUlQgRE9NVGVzdFNlcmlhbGl6ZXJX
aXRoTWFwICpraXQoV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZXJXaXRoTWFwKik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6ZXIuaWRs
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RTZXJpYWxpemVyLmlk
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4zNWIzYTlkMGYzYmM1NTlkOGZiNzJjYzVhMzg5YTMyNjMxNTAwYjYyCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rl
c3RTZXJpYWxpemVyLmlkbApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtc3RyQXJnLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFc3RyQXJnLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gVGhpcyBJREwgZmlsZSBpcyBm
b3IgdGVzdGluZyB0aGUgYmluZGluZ3MgY29kZSBnZW5lcmF0b3IgZm9yIHRoZQorLy8gc2VyaWFs
aXplciBzcGVjaWFsIG9wZXJhdGlvbi4KKworaW50ZXJmYWNlIFRlc3RTZXJpYWxpemVyIHsKKyAg
ICBhdHRyaWJ1dGUgRE9NU3RyaW5nIHN0ckF0dHJpYnV0ZTsKKyAgICBhdHRyaWJ1dGUgdW5zaWdu
ZWQgc2hvcnQgaW50QXR0cmlidXRlOworCisgICAgc2VyaWFsaXplcjsKK307CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6ZXJXaXRo
TWFwLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0U2VyaWFs
aXplcldpdGhNYXAuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdlM2U5NWUwNjdiNjZhNzVhYWUzMjIzMWMwZGE0
YzBmMGQ1YjM0YzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVGVzdFNlcmlhbGl6ZXJXaXRoTWFwLmlkbApAQCAtMCwwICsxLDM3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
c3RyQXJnLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxl
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFc3RyQXJnLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gVGhpcyBJREwgZmlsZSBpcyBmb3IgdGVzdGluZyB0aGUgYmluZGluZ3MgY29kZSBnZW5lcmF0
b3IgZm9yIHRoZQorLy8gc2VyaWFsaXplciBzcGVjaWFsIG9wZXJhdGlvbi4KKworaW50ZXJmYWNl
IFRlc3RTZXJpYWxpemVyV2l0aE1hcCB7CisgICAgYXR0cmlidXRlIERPTVN0cmluZyBzdHJBdHRy
aWJ1dGU7CisgICAgYXR0cmlidXRlIHVuc2lnbmVkIHNob3J0IGludEF0dHJpYnV0ZTsKKworICAg
IHNlcmlhbGl6ZXIgPSB7c3RyQXR0cmlidXRlLCBpbnRBdHRyaWJ1dGV9OworfTsKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAz
YzUyZjE0N2NlNDNiNmRlMzFjYjhjZTY0NTgyYjM5NTYyY2ZjZjdkLi4yZWU4NDY2YzczOGE3MzJj
Mjk5MzQ4YzQ4ZTkzYjFhZTZlMmEyMTE2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTYtMDQt
MTMgIEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CisKKyAgICAgICAgQWRk
IFdlYklETCBzcGVjaWFsIG9wZXJhdGlvbiBzdXBwb3J0OiBzZXJpYWxpemVyCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTYyOTMKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBWZXJpZnkgdGhlIG5ldyBBUEkg
b2YgdGhlIG9iamVjdHMgYW5kIGNoZWNrIHdoYXQgaGFwcGVucyB3aGVuIHVzZXIKKyAgICAgICAg
bW9kaWZpZXMgdGhlIHZhbHVlcyBhbmQgdHlwZXMgb2YgdGhlIGF0dHJpYnV0ZXMsIG9yIGFkZHMg
YSBudWxsIHZhbHVlLgorCisgICAgICAgICogZmFzdC9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRh
dGUtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlk
YXRlLmh0bWw6CisgICAgICAgICogZmFzdC9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRp
b24tZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRl
c2NyaXB0aW9uLmh0bWw6CisKIDIwMTYtMDQtMTIgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBw
bGUuY29tPgogCiAgICAgICAgIENyYXNoIGF0IGNvbS5hcHBsZS5KYXZhU2NyaXB0Q29yZTogYm9v
bCBXVEY6OnN0YXJ0c1dpdGg8V1RGOjpTdHJpbmdJbXBsLCBXVEY6OlN0cmluZ0ltcGw+ICsgOApk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRh
dGUtZXhwZWN0ZWQudHh0CmluZGV4IGNkYTk1MjRiZmU5NzRmODNkMjI3NDE5MjY4NDczYjBiNzhl
Y2Q5ZTMuLmRkZTA0NTc3MzY5NWExOTJiMGQxN2Y1ODJkNzA1YWRhMTc2MWQ2MzcgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLWV4cGVjdGVk
LnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS1l
eHBlY3RlZC50eHQKQEAgLTcsNiArNywxMSBAQCBQQVNTIGNhbmRpZGF0ZSA9IG5ldyBSVENJY2VD
YW5kaWRhdGUoaW5pdGlhbGl6ZXIpOyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KIFBBU1MgY2Fu
ZGlkYXRlLmNhbmRpZGF0ZSBpcyAiZm9vIgogUEFTUyBjYW5kaWRhdGUuc2RwTWlkIGlzICJiYXIi
CiBQQVNTIGNhbmRpZGF0ZS5zZHBNTGluZUluZGV4IGlzIDYKK1BBU1MgSlNPTi5zdHJpbmdpZnko
Y2FuZGlkYXRlLnRvSlNPTigpKSBpcyAie1wiY2FuZGlkYXRlXCI6XCJmb29cIixcInNkcE1pZFwi
OlwiYmFyXCIsXCJzZHBNTGluZUluZGV4XCI6Nn0iCitQQVNTIEpTT04uc3RyaW5naWZ5KGNhbmRp
ZGF0ZS50b0pTT04oKSkgaXMgIntcImNhbmRpZGF0ZVwiOlwiZm9vXCIsXCJzZHBNaWRcIjpcImJh
clwiLFwic2RwTUxpbmVJbmRleFwiOjZ9IgorUEFTUyBKU09OLnN0cmluZ2lmeShjYW5kaWRhdGUu
dG9KU09OKCkpIGlzICJ7XCJjYW5kaWRhdGVcIjpcImZvb1wiLFwic2RwTWlkXCI6XCJiYXJcIixc
InNkcE1MaW5lSW5kZXhcIjowfSIKK1BBU1MgSlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNP
TigpKSBpcyAie1wiY2FuZGlkYXRlXCI6XCJmb29cIixcInNkcE1pZFwiOlwiN1wiLFwic2RwTUxp
bmVJbmRleFwiOjB9IgorUEFTUyBKU09OLnN0cmluZ2lmeShjYW5kaWRhdGUudG9KU09OKCkpIGlz
ICJ7XCJjYW5kaWRhdGVcIjpcImZvb1wiLFwic2RwTWlkXCI6XCJudWxsXCIsXCJzZHBNTGluZUlu
ZGV4XCI6MH0iCiAKIERpY3Rpb25hcnkgbWVtYmVyICdjYW5kaWRhdGUnIGlzIHJlcXVpcmVkLgog
UEFTUyBuZXcgUlRDSWNlQ2FuZGlkYXRlKHt9KTsgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjog
RXJyb3IgY3JlYXRpbmcgUlRDSWNlQ2FuZGlkYXRlLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qv
bWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmh0bWwKaW5kZXggNGM5ZTM4NTU2YzkwNDhkOGU2
NGRiNGVhYTUxYzhhZTdmNjgwOGRhYy4uNGI1N2E2NWU3Zjc1MGE1NjZjYWExMmU1ZjY3ZWQ5MmZl
Njc0MWUxMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENJY2VD
YW5kaWRhdGUuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ0ljZUNh
bmRpZGF0ZS5odG1sCkBAIC0xMyw2ICsxMywxNSBAQAogICAgICAgICAgICAgc2hvdWxkQmUoJ2Nh
bmRpZGF0ZS5jYW5kaWRhdGUnLCAnImZvbyInKTsKICAgICAgICAgICAgIHNob3VsZEJlKCdjYW5k
aWRhdGUuc2RwTWlkJywgJyJiYXIiJyk7CiAgICAgICAgICAgICBzaG91bGRCZSgnY2FuZGlkYXRl
LnNkcE1MaW5lSW5kZXgnLCAnNicpOworICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5n
KCdKU09OLnN0cmluZ2lmeShjYW5kaWRhdGUudG9KU09OKCkpJywgJ3tcImNhbmRpZGF0ZVwiOlwi
Zm9vXCIsXCJzZHBNaWRcIjpcImJhclwiLFwic2RwTUxpbmVJbmRleFwiOjZ9Jyk7CisgICAgICAg
ICAgICBjYW5kaWRhdGUubmV3QXR0cmlidXRlID0gIm5ldyB2YWx1ZSI7CisgICAgICAgICAgICBz
aG91bGRCZUVxdWFsVG9TdHJpbmcoJ0pTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSkn
LCAne1wiY2FuZGlkYXRlXCI6XCJmb29cIixcInNkcE1pZFwiOlwiYmFyXCIsXCJzZHBNTGluZUlu
ZGV4XCI6Nn0nKTsKKyAgICAgICAgICAgIGNhbmRpZGF0ZS5zZHBNTGluZUluZGV4ID0gIm5vdCBh
IG51bWJlciI7CisgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ0pTT04uc3RyaW5n
aWZ5KGNhbmRpZGF0ZS50b0pTT04oKSknLCAne1wiY2FuZGlkYXRlXCI6XCJmb29cIixcInNkcE1p
ZFwiOlwiYmFyXCIsXCJzZHBNTGluZUluZGV4XCI6MH0nKTsKKyAgICAgICAgICAgIGNhbmRpZGF0
ZS5zZHBNaWQgPSA3OworICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdKU09OLnN0
cmluZ2lmeShjYW5kaWRhdGUudG9KU09OKCkpJywgJ3tcImNhbmRpZGF0ZVwiOlwiZm9vXCIsXCJz
ZHBNaWRcIjpcIjdcIixcInNkcE1MaW5lSW5kZXhcIjowfScpOworICAgICAgICAgICAgY2FuZGlk
YXRlLnNkcE1pZCA9IG51bGw7CisgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ0pT
T04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSknLCAne1wiY2FuZGlkYXRlXCI6XCJmb29c
IixcInNkcE1pZFwiOlwibnVsbFwiLFwic2RwTUxpbmVJbmRleFwiOjB9Jyk7CiAgICAgICAgICAg
ICBkZWJ1ZygiIik7CiAKICAgICAgICAgICAgIGRlYnVnKCJEaWN0aW9uYXJ5IG1lbWJlciAnY2Fu
ZGlkYXRlJyBpcyByZXF1aXJlZC4iKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbWVk
aWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2Zhc3QvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dAppbmRl
eCA2NTgyMThmZmUxMmU1NjAwNDg4ZDc5NTIyYzRhMzRhOWRmOGRlNmY4Li4zNDA5YzJkZWVhMDI5
YWE0MGNjNWIwNzZiODUxZjU3ZDYxYzJhZTExIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0
L21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi1leHBlY3RlZC50eHQKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24tZXhwZWN0ZWQu
dHh0CkBAIC03LDYgKzcsNyBAQCBQQVNTIHNlc3Npb25EZXNjcmlwdGlvbiA9IG5ldyBSVENTZXNz
aW9uRGVzY3JpcHRpb24oKTsgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCiBQQVNTIHNlc3Npb25E
ZXNjcmlwdGlvbiA9IG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24oaW5pdGlhbGl6ZXIpOyBkaWQg
bm90IHRocm93IGV4Y2VwdGlvbi4KIFBBU1Mgc2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUgaXMgIm9m
ZmVyIgogUEFTUyBzZXNzaW9uRGVzY3JpcHRpb24uc2RwIGlzICJmb29iYXIiCitQQVNTIEpTT04u
c3RyaW5naWZ5KHNlc3Npb25EZXNjcmlwdGlvbi50b0pTT04oKSkgaXMgIntcInR5cGVcIjpcIm9m
ZmVyXCIsXCJzZHBcIjpcImZvb2JhclwifSIKIFBBU1MgbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlv
bihudWxsKTsgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogT3B0aW9uYWwgUlRDU2Vzc2lvbkRl
c2NyaXB0aW9uIGNvbnN0cnVjdG9yIGFyZ3VtZW50IG11c3QgYmUgYSB2YWxpZCBEaWN0aW9uYXJ5
LgogUEFTUyBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKDUpOyB0aHJldyBleGNlcHRpb24gVHlw
ZUVycm9yOiBPcHRpb25hbCBSVENTZXNzaW9uRGVzY3JpcHRpb24gY29uc3RydWN0b3IgYXJndW1l
bnQgbXVzdCBiZSBhIHZhbGlkIERpY3Rpb25hcnkuCiBQQVNTIG5ldyBSVENTZXNzaW9uRGVzY3Jp
cHRpb24oJ2Zvb2JhcicpOyB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBPcHRpb25hbCBSVENT
ZXNzaW9uRGVzY3JpcHRpb24gY29uc3RydWN0b3IgYXJndW1lbnQgbXVzdCBiZSBhIHZhbGlkIERp
Y3Rpb25hcnkuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1Nl
c3Npb25EZXNjcmlwdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENT
ZXNzaW9uRGVzY3JpcHRpb24uaHRtbAppbmRleCAzYTY2ZDJlMjZiMTE5MTA1YWMxZWQzMGRkNWFm
NTc1Mjk5N2RmMzQyLi42ZmRkYjI0OWQ4NDAzNjA3MjVmMTUyNjc0NTE3YTljYTM3M2M1NjdkIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlw
dGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRl
c2NyaXB0aW9uLmh0bWwKQEAgLTE1LDYgKzE1LDcgQEAKICAgICAgICAgICAgIHNob3VsZE5vdFRo
cm93KCJzZXNzaW9uRGVzY3JpcHRpb24gPSBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGluaXRp
YWxpemVyKTsiKTsKICAgICAgICAgICAgIHNob3VsZEJlKCdzZXNzaW9uRGVzY3JpcHRpb24udHlw
ZScsICcib2ZmZXIiJyk7CiAgICAgICAgICAgICBzaG91bGRCZSgnc2Vzc2lvbkRlc2NyaXB0aW9u
LnNkcCcsICciZm9vYmFyIicpOworICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdK
U09OLnN0cmluZ2lmeShzZXNzaW9uRGVzY3JpcHRpb24udG9KU09OKCkpJywgJ3tcInR5cGVcIjpc
Im9mZmVyXCIsXCJzZHBcIjpcImZvb2JhclwifScpOwogCiAgICAgICAgICAgICBzaG91bGRUaHJv
dygibmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihudWxsKTsiKTsKICAgICAgICAgICAgIHNob3Vs
ZFRocm93KCJuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKDUpOyIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276390</attachid>
            <date>2016-04-14 05:09:41 -0700</date>
            <delta_ts>2016-04-27 09:18:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156293-20160414140952.patch</filename>
            <type>text/plain</type>
            <size>28071</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk5NTMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGU0ZjFjMjIyM2FmZmQy
OTMxNzZlOWI0ZjlmNTZkYWM5MjM2ZmVhZi4uMmNiODk3ODFlYmUyZTM0ZGJjYTU5OWE3MjJhNTgy
OTdhMjE3ZGFmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDE2LTA0LTE0ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIEFkZCBXZWJJREwg
c3BlY2lhbCBvcGVyYXRpb24gc3VwcG9ydDogc2VyaWFsaXplcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MjkzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgdGhlIHNlcmlhbGl6
ZXIgc3BlY2lhbCBvcGVyYXRpb24gZm9yIFdlYklETHMsCisgICAgICAgIGN1cnJlbnQgaW1wbGVt
ZW50YXRpb24gaXMgbm90IGNvbXBsZXRlLCBpdCBhZGRzIHN1cHBvcnQgZm9yOgorICAgICAgICAg
IC0ganVzdCB0aGUga2V5d29yZDogc2VyaWFsaXplcjsgSXQgd2lsbCByZXR1cm4gYWxsIHRoZSBh
dHRyaWJ1dGVzIG9mIGluIGFuIG9iamVjdC4KKyAgICAgICAgICAtIG1hcCBvZiBlbnRyaWVzIHdp
dGggdGhlIGF0dHJpYnV0ZXM6IHNlcmlhbGl6ZXIgPSB7YXR0cmlidXRlMSwgYXR0cmlidXRlMiwg
Li4ufQorICAgICAgICAgIC0gbGlzdCBvZiBhdHRyaWJ1dGVzOiBzZXJpYWxpemVyID0gW2F0dHJp
YnV0ZTEsIGF0dHJpYnV0ZTIsIC4uLl0KKworICAgICAgICBJdCBjcmVhdGVzIGEgdG9KU09OIG1l
dGhvZCB0aGF0IHJldHVybnMgdGhlIHNlcmlhbGl6ZWQgdmFsdWUKKyAgICAgICAgY29udmVydGVk
IGludG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gY2hlY2sgdGhl
CisgICAgICAgIGRlZmluaXRpb24gb2YgdGhlIG9wZXJhdGlvbjoKKworICAgICAgICBodHRwOi8v
aGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2lkbC1zZXJpYWxpemVycworCisgICAgICAgIFVzZWQg
dGhlIHN1cHBvcnQgdG8gYWRkIG5ldyBBUEkgZm9yIFJUQ0ljZUNhbmRpZGF0ZSBhbmQKKyAgICAg
ICAgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLgorCisgICAgICAgIFRlc3RzOiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVGVzdE5vZGUuaWRsCisgICAgICAgICAgICAgICBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVGVzdE9iai5pZGwKKyAgICAgICAgICAgICAgIGZhc3QvbWVkaWFzdHJlYW0vUlRDSWNlQ2Fu
ZGlkYXRlLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRl
c2NyaXB0aW9uLmh0bWwKKworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2Fu
ZGlkYXRlLmlkbDogQWRkZWQgdGhlIHNlcmlhbGl6ZXIgb3BlcmF0aW9uLgorICAgICAgICAqIE1v
ZHVsZXMvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmlkbDogQWRkZWQgdGhlIHNl
cmlhbGl6ZXIgb3BlcmF0aW9uLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6IEFkZGVkIG5ldyBv
cGVyYXRpb24gdG8gdGhlIGhhc2ggdGFibGUuCisgICAgICAgIChHZW5lcmF0ZVNlcmlhbGl6ZXJG
dW5jdGlvbik6IEFkZGVkIG1ldGhvZCB0aGF0IGdlbmVyYXRlcyB0aGUKKyAgICAgICAgdG9KU09O
IG5hdGl2ZSBmdW5jdGlvbi4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5w
bTogTW9kaWZpZWQgdGhlIHNlcmlhbGl6ZXIgcGFyc2VyCisgICAgICAgIHRoYXQgd2FzIHVudXNl
ZCB0byBzdXBwb3J0IHRoZSBXZWJJREwgc3BlYyBwYXJ0cy4gQWRkZWQgYSBuZXcKKyAgICAgICAg
ZG9tU2VyaWFsaXphYmxlIHR5cGUgdG8gc3RvcmUgdGhlIGxpc3Qgb2YgYXR0cmlidXRlcyBpbiB0
aGUKKyAgICAgICAgcG9zc2libGUgbWFwLgorICAgICAgICAocGFyc2VTZXJpYWxpemVyKTogTW9k
aWZpZWQgdGhlIGZ1bmN0aW9uIHRvIGZvbGxvdyB0aGUKKyAgICAgICAgc2VtaWNvbG9uIHJ1bGUg
aW4gdGhlIHNwZWMsIG5vdyB0aGUgc2VyaWFsaXplciBsaW5lIG11c3QgaGF2ZSBhCisgICAgICAg
IHNlbWljb2xvbiBsaWtlIGFueSBvdGhlciBsaW5lLgorICAgICAgICAocGFyc2VTZXJpYWxpemVy
UmVzdCk6IFRoZSBmdW5jdGlvbiBub3cgaGFzIHRvIGdldCB0aGUgYXR0cmlidXRlcworICAgICAg
ICBsaXN0IGZyb20gdGhlIHBhdHRlcm4gcGFyc2luZyBmdW5jdGlvbiBhbmQgYWRkIHRoZW0gdG8g
dGhlCisgICAgICAgIGRvbVNlcmlhbGl6YWJsZSBpdGVtLgorICAgICAgICAocGFyc2VTZXJpYWxp
emF0aW9uUGF0dGVybik6IE5vdyB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxpc3Qgb2YKKyAg
ICAgICAgYXR0cmlidXRlcyBpbiB0aGUgc2VyaWFsaXphYmxlIG1hcCBvciBsaXN0IGlmIHdlIGhh
dmUgb25lLgorICAgICAgICAocGFyc2VTZXJpYWxpemF0aW9uQXR0cmlidXRlcyk6IEFkZGVkLCB0
aGlzIGZ1bmN0aW9uIHJlcGxhY2VzIHRoZQorICAgICAgICBNYXAgYW5kIExpc3QgZnVuY3Rpb25z
LCB0aGUgY3VycmVudGx5IHN1cHBvcnRlZCBwYXJ0cyBhcmUgc2ltaWxhcgorICAgICAgICBmb3Ig
Ym90aCBzaXR1YXRpb25zLgorICAgICAgICAoYXBwbHlNZW1iZXJMaXN0KTogQWRkZWQgdGhlIHNl
cmlhbGl6YWJsZSBpdGVtIHRvIHRoZSBpbnRlcmZhY2UKKyAgICAgICAgdmFyaWFibGUgYW5kIHBv
cHVsYXRlIHRoZSBzZXJpYWxpemFibGUgaW4gY2FzZSB0aGVyZSBpcyBub3QgYQorICAgICAgICBk
ZWZpbmVkIG1hcC4KKyAgICAgICAgKHBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm5NYXApOiBSZXBs
YWNlZCB3aXRoIHBhcnNlU2VyaWFsaXphdGlvbkF0dHJpYnV0ZXMuCisgICAgICAgIChwYXJzZVNl
cmlhbGl6YXRpb25QYXR0ZXJuTGlzdCk6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcDogTW9kaWZpZWQgdGhlIGV4cGVjdGVkIHJlc3VsdC4K
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTik6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6IE1vZGlmaWVk
IHRoZSBleHBlY3RlZCByZXN1bHQuCisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblRvSlNPTik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RO
b2RlLmlkbDogQWRkZWQgdGhlIHNlcmlhbGl6ZXIgdGVzdC4KKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVGVzdE9iai5pZGw6IEFkZGVkIHNlcmlhbGl6ZXIgbWFwIHRlc3QuCisKIDIw
MTYtMDQtMTMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQuIEZpeCBHT2JqZWN0IERPTSBiaW5kaW5ncyBBUEkgYnJlYWsgYWZ0
ZXIgcjE5OTM5Mi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vUlRDSWNlQ2FuZGlkYXRlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vUlRDSWNlQ2FuZGlkYXRlLmlkbAppbmRleCBjZDAxZWY3MmZhOTczNGI0MzNjOGI5ZmVjMzNi
NjgzNmEzNWI2Mzg2Li41Mjg0MmM5ZTgwYjkwNDA3MmJhYWU1YzA2Y2E4NTNjNjY3OTM2Yjc3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRp
ZGF0ZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VD
YW5kaWRhdGUuaWRsCkBAIC0zNyw1ICszNyw2IEBACiAgICAgYXR0cmlidXRlIERPTVN0cmluZyBj
YW5kaWRhdGU7CiAgICAgW0N1c3RvbUdldHRlcl0gYXR0cmlidXRlIERPTVN0cmluZyBzZHBNaWQ7
CiAgICAgW0N1c3RvbUdldHRlcl0gYXR0cmlidXRlIHVuc2lnbmVkIHNob3J0IHNkcE1MaW5lSW5k
ZXg7Ci19OwogCisgICAgc2VyaWFsaXplciA9IHtjYW5kaWRhdGUsIHNkcE1pZCwgc2RwTUxpbmVJ
bmRleH07Cit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9SVENTZXNzaW9uRGVzY3JpcHRpb24uaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24uaWRsCmluZGV4IDIzNDU1ZjcwNDA3MjhlMWJh
Y2VhZmUyMWE4Y2FlOGI4YTUxNDA1ZWYuLjFkNjQzNTAyZTNmYWIyM2I2ZGMzYjc1MGNlMmI1MWQy
NTI0MjAzNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
UlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5pZGwKQEAgLTM2LDUgKzM2LDcgQEAKIF0g
aW50ZXJmYWNlIFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiB7CiAgICAgW1NldHRlclJhaXNlc0V4Y2Vw
dGlvbl0gYXR0cmlidXRlIERPTVN0cmluZyB0eXBlOwogICAgIGF0dHJpYnV0ZSBET01TdHJpbmcg
c2RwOworCisgICAgc2VyaWFsaXplciA9IHt0eXBlLCBzZHB9OwogfTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCAxMWQ1
YjU1MWQwMTlhOTE4ZWM1ZjUwYjc5MTgzNjYzMjVhZjA1NzIxLi5kNGMzMzZiOTU1YjgwNjQxYzBj
YjJjMTdmZDE2ZTUxMmY2ZGU2ZTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQpAQCAtMTgwOCw2ICsxODA4LDggQEAgc3ViIEdl
bmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBteSAkdmlzaWJsZUludGVyZmFjZU5hbWUgPSAkY29k
ZUdlbmVyYXRvci0+R2V0VmlzaWJsZUludGVyZmFjZU5hbWUoJGludGVyZmFjZSk7CiAgICAgbXkg
JGV2ZW50VGFyZ2V0ID0gJGNvZGVHZW5lcmF0b3ItPkluaGVyaXRzSW50ZXJmYWNlKCRpbnRlcmZh
Y2UsICJFdmVudFRhcmdldCIpICYmICRpbnRlcmZhY2UtPm5hbWUgbmUgIkV2ZW50VGFyZ2V0IjsK
ICAgICBteSAkbmVlZHNWaXNpdENoaWxkcmVuID0gSW5zdGFuY2VOZWVkc1Zpc2l0Q2hpbGRyZW4o
JGludGVyZmFjZSk7CisgICAgbXkgJHNlcmlhbGl6ZXJGdW5jdGlvbk5hbWUgPSAidG9KU09OIjsK
KyAgICBteSAkc2VyaWFsaXplck5hdGl2ZUZ1bmN0aW9uTmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5X
S19sY2ZpcnN0KCRjbGFzc05hbWUpIC4gIlByb3RvdHlwZUZ1bmN0aW9uIiAuICRjb2RlR2VuZXJh
dG9yLT5XS191Y2ZpcnN0KCRzZXJpYWxpemVyRnVuY3Rpb25OYW1lKTsKIAogICAgIG15ICRuYW1l
ZEdldHRlckZ1bmN0aW9uID0gR2V0TmFtZWRHZXR0ZXJGdW5jdGlvbigkaW50ZXJmYWNlKTsKICAg
ICBteSAkaW5kZXhlZEdldHRlckZ1bmN0aW9uID0gR2V0SW5kZXhlZEdldHRlckZ1bmN0aW9uKCRp
bnRlcmZhY2UpOwpAQCAtMTg5NCw2ICsxODk2LDEwIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0
aW9uCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKICAgICB9CiAKKyAgICBpZiAo
JGludGVyZmFjZS0+c2VyaWFsaXphYmxlKSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke3NlcmlhbGl6ZXJOYXRpdmVGdW5jdGlvbk5h
bWV9KEV4ZWNTdGF0ZSopO1xuXG4iKTsKKyAgICB9CisKICAgICAjIEFkZCBwcm90b3R5cGUgZGVj
bGFyYXRpb24uCiAgICAgaWYgKCFIZWFkZXJOZWVkc1Byb3RvdHlwZURlY2xhcmF0aW9uKCRpbnRl
cmZhY2UpKSB7CiAgICAgICAgIEdlbmVyYXRlUHJvdG90eXBlRGVjbGFyYXRpb24oXEBpbXBsQ29u
dGVudCwgJGNsYXNzTmFtZSwgJGludGVyZmFjZSwgJGludGVyZmFjZU5hbWUpOwpAQCAtMjA1OSw2
ICsyMDY1LDE1IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAKICAgICBteSAkanVzdEdl
bmVyYXRlVmFsdWVBcnJheSA9ICFJc0RPTUdsb2JhbE9iamVjdCgkaW50ZXJmYWNlKTsKIAorICAg
IGlmICgkaW50ZXJmYWNlLT5zZXJpYWxpemFibGUpIHsKKyAgICAgICAgcHVzaChAaGFzaEtleXMs
ICRzZXJpYWxpemVyRnVuY3Rpb25OYW1lKTsKKyAgICAgICAgcHVzaChAaGFzaFZhbHVlMSwgJHNl
cmlhbGl6ZXJOYXRpdmVGdW5jdGlvbk5hbWUpOworICAgICAgICBwdXNoKEBoYXNoVmFsdWUyLCAw
KTsKKyAgICAgICAgcHVzaChAaGFzaFNwZWNpYWxzLCAiUmVhZE9ubHkgfCBEb250RGVsZXRlIHwg
SlNDOjpGdW5jdGlvbiIpOworCisgICAgICAgICRoYXNoU2l6ZSsrOworICAgIH0KKwogICAgICRv
YmplY3QtPkdlbmVyYXRlSGFzaFRhYmxlKCRoYXNoTmFtZSwgJGhhc2hTaXplLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFxAaGFzaEtleXMsIFxAaGFzaFNwZWNpYWxzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFxAaGFzaFZhbHVlMSwgXEBoYXNoVmFsdWUyLApAQCAt
MzA0Nyw2ICszMDYyLDEwIEBAIEVORAogCiAgICAgfQogCisgICAgaWYgKCRpbnRlcmZhY2UtPnNl
cmlhbGl6YWJsZSkgeworICAgICAgICBHZW5lcmF0ZVNlcmlhbGl6ZXJGdW5jdGlvbigkaW50ZXJm
YWNlLCAkaW50ZXJmYWNlTmFtZSwgJGNsYXNzTmFtZSwgJHNlcmlhbGl6ZXJGdW5jdGlvbk5hbWUs
ICRzZXJpYWxpemVyTmF0aXZlRnVuY3Rpb25OYW1lKTsKKyAgICB9CisKICAgICBpZiAoJGludGVy
ZmFjZS0+aXRlcmFibGUpIHsKICAgICAgICAgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkl0ZXJhYmxl
RnVuY3Rpb25zKCRpbnRlcmZhY2UpOwogICAgIH0KQEAgLTMyODQsNiArMzMwMyw0MiBAQCBFTkQK
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuI2VuZGlmIC8vICR7Y29uZGl0aW9uYWxTdHJpbmd9
XG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CiB9CiAKK3N1YiBHZW5lcmF0ZVNlcmlhbGl6ZXJG
dW5jdGlvbgoreworICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKKyAgICBteSAkaW50ZXJmYWNl
TmFtZSA9IHNoaWZ0OworICAgIG15ICRjbGFzc05hbWUgPSBzaGlmdDsKKyAgICBteSAkc2VyaWFs
aXplckZ1bmN0aW9uTmFtZSA9IHNoaWZ0OworICAgIG15ICRzZXJpYWxpemVyTmF0aXZlRnVuY3Rp
b25OYW1lID0gc2hpZnQ7CisKKyAgICBBZGRUb0ltcGxJbmNsdWRlcygiT2JqZWN0Q29uc3RydWN0
b3IuaCIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCAke3NlcmlhbGl6ZXJOYXRpdmVGdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogc3RhdGUpXG4i
KTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpO1xuIik7CisgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxK
UyRpbnRlcmZhY2VOYW1lKj4odGhpc1ZhbHVlKTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsIFwiJGludGVy
ZmFjZU5hbWVcIiwgXCIkc2VyaWFsaXplckZ1bmN0aW9uTmFtZVwiKTtcbiIpOworICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywg
JHtjbGFzc05hbWV9OjppbmZvKCkpO1xuXG4iKSB1bmxlc3MgJGludGVyZmFjZU5hbWUgZXEgIkV2
ZW50VGFyZ2V0IjsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU09iamVjdCogcmVzdWx0
ID0gY29uc3RydWN0RW1wdHlPYmplY3Qoc3RhdGUpO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTtcbiIpOworICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpO1xuIik7CisgICAgZm9y
ZWFjaCBteSAkYXR0cmlidXRlIChAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9KSB7CisgICAgICAg
IG15ICRuYW1lID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lOworICAgICAgICBpZiAoZ3Jl
cCAkXyBlcSAkbmFtZSwgQHskaW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPmF0dHJpYnV0ZXN9KSB7
CisgICAgICAgICAgICBteSAkdHlwZSA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZTsKKyAg
ICAgICAgICAgIG15ICR0aGlzT2JqZWN0ID0gImNhc3RlZFRoaXMiOworICAgICAgICAgICAgbXkg
JGZ1bmN0aW9uU3RyaW5nID0gImltcGwuJHtuYW1lfSgpIjsKKyAgICAgICAgICAgIG15ICRzaWdu
YXR1cmUgPSBkb21TaWduYXR1cmUtPm5ldygpOworICAgICAgICAgICAgJHNpZ25hdHVyZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzKHt9KTsKKyAgICAgICAgICAgICRzaWduYXR1cmUtPmlzTnVsbGFibGUo
MSk7CisgICAgICAgICAgICAkc2lnbmF0dXJlLT50eXBlKCR0eXBlKTsKKyAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZ2bSwgXCIke25hbWV9XCIpLCAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRzaWduYXR1
cmUsIDEsICRpbnRlcmZhY2VOYW1lLCAkZnVuY3Rpb25TdHJpbmcsICR0aGlzT2JqZWN0KSAuICIp
O1xuIik7CisgICAgICAgIH0KKyAgICB9CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIn1cblxuIik7Cit9CisKIHN1YiBHZW5lcmF0ZUZ1bmN0aW9uQ2FzdGVkVGhpcwogewogICAg
IG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9JRExQYXJzZXIucG0KaW5kZXggNGYxNTI5ZjI3NmQ0OGViNmJkZTJkNTA3OGM4Yjg2MzcyZjQz
MGRmNi4uMTI3ZDU4ZDhiMzg2ODk0YzU3ZjA3Yzc0ZTdkZGYzODkzYTRjYjgwZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0KKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0KQEAgLTU2LDYgKzU2LDcg
QEAgc3RydWN0KCBkb21JbnRlcmZhY2UgPT4gewogICAgIGlzQ2FsbGJhY2sgPT4gJyQnLCAjIFVz
ZWQgZm9yIGNhbGxiYWNrIGludGVyZmFjZXMKICAgICBpc1BhcnRpYWwgPT4gJyQnLCAjIFVzZWQg
Zm9yIHBhcnRpYWwgaW50ZXJmYWNlcwogICAgIGl0ZXJhYmxlID0+ICckJywgIyBVc2VkIGZvciBp
dGVyYWJsZSBpbnRlcmZhY2VzCisgICAgc2VyaWFsaXphYmxlID0+ICckJywgIyBVc2VkIGZvciBz
ZXJpYWxpemFibGUgaW50ZXJmYWNlcwogfSk7CiAKICMgVXNlZCB0byByZXByZXNlbnQgZG9tSW50
ZXJmYWNlIGNvbnRlbnRzIChuYW1lIG9mIG1ldGhvZCwgc2lnbmF0dXJlKQpAQCAtOTQsNiArOTUs
MTAgQEAgc3RydWN0KCBkb21JdGVyYWJsZSA9PiB7CiAgICAgZnVuY3Rpb25zID0+ICdAJywgIyBJ
dGVyYWJsZSBmdW5jdGlvbnMgKGVudHJpZXMsIGtleXMsIHZhbHVlcywgW1N5bWJvbC5JdGVyYXRv
cl0sIGZvckVhY2gpCiB9KTsKIAorIyBVc2VkIHRvIHJlcHJlc2VudCBzZXJpYWxpemFibGUgaW50
ZXJmYWNlCitzdHJ1Y3QoIGRvbVNlcmlhbGl6YWJsZSA9PiB7CisgICAgYXR0cmlidXRlcyA9PiAn
QCcsICMgTGlzdCBvZiBhdHRyaWJ1dGVzIHRvIHNlcmlhbGl6ZQorfSk7CiAKICMgVXNlZCB0byBy
ZXByZXNlbnQgc3RyaW5nIGNvbnN0YW50cwogc3RydWN0KCBkb21Db25zdGFudCA9PiB7CkBAIC05
OTUsNyArMTAwMCwxNiBAQCBzdWIgcGFyc2VTZXJpYWxpemVyCiAgICAgbXkgJG5leHQgPSAkc2Vs
Zi0+bmV4dFRva2VuKCk7CiAgICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJzZXJpYWxpemVyIikg
ewogICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgInNl
cmlhbGl6ZXIiLCBfX0xJTkVfXyk7Ci0gICAgICAgIHJldHVybiAkc2VsZi0+cGFyc2VTZXJpYWxp
emVyUmVzdCgkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKKyAgICAgICAgbXkgJG5leHQgPSAkc2Vs
Zi0+bmV4dFRva2VuKCk7CisgICAgICAgIG15ICRuZXdEYXRhTm9kZTsKKyAgICAgICAgaWYgKCRu
ZXh0LT52YWx1ZSgpIG5lICI7IikgeworICAgICAgICAgICAgJG5ld0RhdGFOb2RlID0gJHNlbGYt
PnBhcnNlU2VyaWFsaXplclJlc3QoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7CisgICAgICAgICAg
ICBteSAkbmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICRuZXdEYXRhTm9kZSA9IGRvbVNlcmlhbGl6YWJsZS0+bmV3KCk7CisgICAgICAgIH0K
KyAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICI7Iiwg
X19MSU5FX18pOworICAgICAgICByZXR1cm4gJG5ld0RhdGFOb2RlOwogICAgIH0KICAgICAkc2Vs
Zi0+YXNzZXJ0VW5leHBlY3RlZFRva2VuKCRuZXh0LT52YWx1ZSgpLCBfX0xJTkVfXyk7CiB9CkBA
IC0xMDA4LDcgKzEwMjIsMTAgQEAgc3ViIHBhcnNlU2VyaWFsaXplclJlc3QKICAgICBteSAkbmV4
dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsKICAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgIj0iKSB7
CiAgICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiPSIs
IF9fTElORV9fKTsKLSAgICAgICAgcmV0dXJuICRzZWxmLT5wYXJzZVNlcmlhbGl6YXRpb25QYXR0
ZXJuKCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOworICAgICAgICBteSAkYXR0cmlidXRlcyA9ICRz
ZWxmLT5wYXJzZVNlcmlhbGl6YXRpb25QYXR0ZXJuKCk7CisgICAgICAgIG15ICRuZXdEYXRhTm9k
ZSA9IGRvbVNlcmlhbGl6YWJsZS0+bmV3KCk7CisgICAgICAgICRuZXdEYXRhTm9kZS0+YXR0cmli
dXRlcygkYXR0cmlidXRlcyk7CisgICAgICAgIHJldHVybiAkbmV3RGF0YU5vZGU7CiAgICAgfQog
ICAgIGlmICgkbmV4dC0+dHlwZSgpID09IElkZW50aWZpZXJUb2tlbiB8fCAkbmV4dC0+dmFsdWUo
KSBlcSAiKCIpIHsKICAgICAgICAgcmV0dXJuICRzZWxmLT5wYXJzZU9wZXJhdGlvblJlc3QoJGV4
dGVuZGVkQXR0cmlidXRlTGlzdCk7CkBAIC0xMDE4LDU5ICsxMDM1LDQxIEBAIHN1YiBwYXJzZVNl
cmlhbGl6ZXJSZXN0CiBzdWIgcGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybgogewogICAgIG15ICRz
ZWxmID0gc2hpZnQ7Ci0gICAgbXkgJGV4dGVuZGVkQXR0cmlidXRlTGlzdCA9IHNoaWZ0OwogCiAg
ICAgbXkgJG5leHQgPSAkc2VsZi0+bmV4dFRva2VuKCk7CiAgICAgaWYgKCRuZXh0LT52YWx1ZSgp
IGVxICJ7IikgewogICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9r
ZW4oKSwgInsiLCBfX0xJTkVfXyk7Ci0gICAgICAgICRzZWxmLT5wYXJzZVNlcmlhbGl6YXRpb25Q
YXR0ZXJuTWFwKCk7CisgICAgICAgIG15ICRhdHRyaWJ1dGVzID0gJHNlbGYtPnBhcnNlU2VyaWFs
aXphdGlvbkF0dHJpYnV0ZXMoKTsKICAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNl
bGYtPmdldFRva2VuKCksICJ9IiwgX19MSU5FX18pOwotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiBcQHskYXR0cmlidXRlc307CiAgICAgfQogICAgIGlmICgkbmV4dC0+dmFsdWUoKSBl
cSAiWyIpIHsKICAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2Vu
KCksICJbIiwgX19MSU5FX18pOwotICAgICAgICAkc2VsZi0+cGFyc2VTZXJpYWxpemF0aW9uUGF0
dGVybkxpc3QoKTsKKyAgICAgICAgbXkgJGF0dHJpYnV0ZXMgPSAkc2VsZi0+cGFyc2VTZXJpYWxp
emF0aW9uQXR0cmlidXRlcygpOwogICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2Vs
Zi0+Z2V0VG9rZW4oKSwgIl0iLCBfX0xJTkVfXyk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIFxAeyRhdHRyaWJ1dGVzfTsKICAgICB9CiAgICAgaWYgKCRuZXh0LT50eXBlKCkgPT0g
SWRlbnRpZmllclRva2VuKSB7Ci0gICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblR5cGUoJHNlbGYt
PmdldFRva2VuKCksIElkZW50aWZpZXJUb2tlbik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAg
bXkgQGF0dHJpYnV0ZXMgPSAoKTsKKyAgICAgICAgbXkgJHRva2VuID0gJHNlbGYtPmdldFRva2Vu
KCk7CisgICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblR5cGUoJHRva2VuLCBJZGVudGlmaWVyVG9r
ZW4pOworICAgICAgICBwdXNoKEBhdHRyaWJ1dGVzLCAkdG9rZW4tPnZhbHVlKCkpOworICAgICAg
ICByZXR1cm4gXEBhdHRyaWJ1dGVzOwogICAgIH0KICAgICAkc2VsZi0+YXNzZXJ0VW5leHBlY3Rl
ZFRva2VuKCRuZXh0LT52YWx1ZSgpLCBfX0xJTkVfXyk7CiB9CiAKLXN1YiBwYXJzZVNlcmlhbGl6
YXRpb25QYXR0ZXJuTWFwCitzdWIgcGFyc2VTZXJpYWxpemF0aW9uQXR0cmlidXRlcwogewogICAg
IG15ICRzZWxmID0gc2hpZnQ7Ci0gICAgbXkgJG5leHQgPSAkc2VsZi0+bmV4dFRva2VuKCk7Ci0g
ICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJnZXR0ZXIiKSB7Ci0gICAgICAgICRzZWxmLT5hc3Nl
cnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiZ2V0dGVyIiwgX19MSU5FX18pOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAiaW5oZXJpdCIp
IHsKLSAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICJp
bmhlcml0IiwgX19MSU5FX18pOwotICAgICAgICAkc2VsZi0+cGFyc2VJZGVudGlmaWVycygpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICgkbmV4dC0+dHlwZSgpID09IElkZW50aWZp
ZXJUb2tlbikgewotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5UeXBlKCRzZWxmLT5nZXRUb2tl
bigpLCBJZGVudGlmaWVyVG9rZW4pOwotICAgICAgICAkc2VsZi0+cGFyc2VJZGVudGlmaWVycygp
OwotICAgIH0KLX0KIAotc3ViIHBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm5MaXN0Ci17Ci0gICAg
bXkgJHNlbGYgPSBzaGlmdDsKLSAgICBteSAkbmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsKLSAg
ICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgImdldHRlciIpIHsKLSAgICAgICAgJHNlbGYtPmFzc2Vy
dFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICJnZXR0ZXIiLCBfX0xJTkVfXyk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCRuZXh0LT50eXBlKCkgPT0gSWRlbnRpZmllclRv
a2VuKSB7Ci0gICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblR5cGUoJHNlbGYtPmdldFRva2VuKCks
IElkZW50aWZpZXJUb2tlbik7Ci0gICAgICAgICRzZWxmLT5wYXJzZUlkZW50aWZpZXJzKCk7Ci0g
ICAgfQorICAgICMgZ2V0dGVyIGFuZCBpbmhlcml0IGFyZSBub3IgY3VycmVudGx5IHN1cHBvcnRl
ZC4KKyAgICBteSAkdG9rZW4gPSAkc2VsZi0+Z2V0VG9rZW4oKTsKKyAgICBteSBAYXR0cmlidXRl
cyA9ICgpOworICAgICRzZWxmLT5hc3NlcnRUb2tlblR5cGUoJHRva2VuLCBJZGVudGlmaWVyVG9r
ZW4pOworICAgIHB1c2goQGF0dHJpYnV0ZXMsICR0b2tlbi0+dmFsdWUoKSk7CisgICAgcHVzaChA
YXR0cmlidXRlcywgQHskc2VsZi0+cGFyc2VJZGVudGlmaWVycygpfSk7CisgICAgcmV0dXJuIFxA
YXR0cmlidXRlczsKIH0KIAogc3ViIHBhcnNlSWRlbnRpZmllcnMKQEAgLTIyMzMsNiArMjIzMiwx
OSBAQCBzdWIgYXBwbHlNZW1iZXJMaXN0CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBuZXh0
OwogICAgICAgICB9CisgICAgICAgIGlmIChyZWYoJGl0ZW0pIGVxICJkb21TZXJpYWxpemFibGUi
KSB7CisgICAgICAgICAgICAkaW50ZXJmYWNlLT5zZXJpYWxpemFibGUoJGl0ZW0pOworICAgICAg
ICAgICAgbmV4dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgkaW50ZXJmYWNlLT5zZXJp
YWxpemFibGUpIHsKKyAgICAgICAgbXkgJG51bVNlcmlhbGl6ZXJBdHRyaWJ1dGVzID0gQHskaW50
ZXJmYWNlLT5zZXJpYWxpemFibGUtPmF0dHJpYnV0ZXN9OworICAgICAgICBpZiAoJG51bVNlcmlh
bGl6ZXJBdHRyaWJ1dGVzID09IDApIHsKKyAgICAgICAgICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0
ZSAoQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSkgeworICAgICAgICAgICAgICAgIHB1c2goQHsk
aW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPmF0dHJpYnV0ZXN9LCAkYXR0cmlidXRlLT5zaWduYXR1
cmUtPm5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5j
cHAKaW5kZXggNTUyZjcxN2FlOGUxOTcxOThmYTU2MzRmNDE3MWU5YTg2NGIxYTVjNy4uMDNkYmI1
MTczZjMyNTU3MWE4NTkwMDg4ZmNiYTViMjBmMmJlYWY0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcApAQCAtMjQs
NiArMjQsNyBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiT2JqZWN0
Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJVUkwuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9y
Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU1N0cmluZy5oPgpAQCAtNDAsNiArNDEsOCBAQCBib29s
IHNldEpTVGVzdE5vZGVOYW1lKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpFbmNvZGVkSlNWYWx1ZQogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlQ29uc3Ry
dWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7CiBib29sIHNldEpTVGVzdE5vZGVDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogCitFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTihFeGVjU3Rh
dGUqKTsKKwogY2xhc3MgSlNUZXN0Tm9kZVByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmlu
YWxPYmplY3QgewogcHVibGljOgogICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJh
c2U7CkBAIC05NCw2ICs5Nyw3IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RO
b2RlUHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9CiB7CiAgICAgeyAiY29uc3RydWN0b3IiLCBEb250
RW51bSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6
R2V0VmFsdWVGdW5jPihqc1Rlc3ROb2RlQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19j
YXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3ROb2RlQ29uc3RydWN0
b3IpIH0gfSwKICAgICB7ICJuYW1lIiwgQ3VzdG9tQWNjZXNzb3IsIE5vSW50cmluc2ljLCB7IChp
bnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0Tm9k
ZU5hbWUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVG
dW5jPihzZXRKU1Rlc3ROb2RlTmFtZSkgfSB9LAorICAgIHsgInRvSlNPTiIsIFJlYWRPbmx5IHwg
RG9udERlbGV0ZSB8IEpTQzo6RnVuY3Rpb24sIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0
aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09O
KSwgKGludHB0cl90KSAoMCkgfSB9LAogfTsKIAogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE5vZGVQ
cm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3ROb2RlUHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywg
MCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3ROb2RlUHJvdG90eXBlKSB9OwpAQCAtMTc4LDYg
KzE4MiwyMiBAQCBKU1ZhbHVlIEpTVGVzdE5vZGU6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29u
c3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICByZXR1cm4gZ2V0RE9NQ29uc3Ry
dWN0b3I8SlNUZXN0Tm9kZUNvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2Jh
bE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOwogfQogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTihFeGVjU3RhdGUqIHN0YXRlKQor
eworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOworICAgIGF1dG8g
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9kZSo+KHRoaXNWYWx1ZSk7CisgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKKyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVF
cnJvcigqc3RhdGUsICJUZXN0Tm9kZSIsICJ0b0pTT04iKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE5vZGU6OmluZm8oKSk7CisKKyAgICBKU09iamVj
dCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3Qoc3RhdGUpOworICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibmFtZSIp
LCBqc1N0cmluZ09yTnVsbChzdGF0ZSwgaW1wbC5uYW1lKCkpKTsKKworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKK30KKwogdm9pZCBKU1Rlc3ROb2RlOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1Rlc3ROb2RlKj4oY2VsbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCmluZGV4IGZkOGEzMjFk
YjQ4YTQwNDNiMmUwMDc4ZjU0ZTI1NDZmNzFjNjA1MzYuLmVhOTEzYTcwNDkzYmVlYjg1YTc2YjAy
ZGVlNGJlMGU2MjgxZmY2ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVk
ZSAiSlNUZXN0U3ViT2JqLmgiCiAjaW5jbHVkZSAiSlNib29sLmgiCiAjaW5jbHVkZSAiTGlmZWN5
Y2xlQ2FsbGJhY2tRdWV1ZS5oIgorI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5j
bHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNWR0RvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiU1ZHUG9pbnQuaCIKQEAgLTM2OSw2ICszNzAsOCBAQCBib29sIHNldEpTVGVz
dE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvcihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIGJv
b2wgc2V0SlNUZXN0T2JqQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvSlNPTihFeGVjU3RhdGUqKTsKKwogY2xh
c3MgSlNUZXN0T2JqUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CiBw
dWJsaWM6CiAgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKQEAgLTc2NSw2
ICs3NjgsNyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJvdG90eXBl
VGFibGVWYWx1ZXNbXSA9CiAgICAgeyAiQ09OU1RfVkFMVUVfMTQiLCBEb250RGVsZXRlIHwgUmVh
ZE9ubHkgfCBDb25zdGFudEludGVnZXIsIE5vSW50cmluc2ljLCB7IChsb25nIGxvbmcpKDB4MWFi
YykgfSB9LAogICAgIHsgIkNPTlNUX0pBVkFTQ1JJUFQiLCBEb250RGVsZXRlIHwgUmVhZE9ubHkg
fCBDb25zdGFudEludGVnZXIsIE5vSW50cmluc2ljLCB7IChsb25nIGxvbmcpKDE1KSB9IH0sCiAg
ICAgeyAicmVhZG9ubHkiLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBDb25zdGFudEludGVnZXIs
IE5vSW50cmluc2ljLCB7IChsb25nIGxvbmcpKDApIH0gfSwKKyAgICB7ICJ0b0pTT04iLCBSZWFk
T25seSB8IERvbnREZWxldGUgfCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgeyAoaW50cHRy
X3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
VG9KU09OKSwgKGludHB0cl90KSAoMCkgfSB9LAogfTsKIAogY29uc3QgQ2xhc3NJbmZvIEpTVGVz
dE9ialByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdE9iamVjdFByb3RvdHlwZSIsICZCYXNlOjpz
X2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0T2JqUHJvdG90eXBlKSB9OwpAQCAt
NTMyMyw2ICs1MzI3LDI1IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTmVlZHNMaWZlY3ljbGVQCiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvSlNPTihFeGVjU3RhdGUqIHN0YXRl
KQoreworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOworICAgIGF1
dG8gY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKKyAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQorICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlw
ZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAidG9KU09OIik7CisgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CisKKyAgICBKU09iamVj
dCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3Qoc3RhdGUpOworICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAicmVhZE9u
bHlTdHJpbmdBdHRyIiksIGpzU3RyaW5nT3JOdWxsKHN0YXRlLCBpbXBsLnJlYWRPbmx5U3RyaW5n
QXR0cigpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCAiZW51bUF0dHIiKSwganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuZW51bUF0
dHIoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwgImxvbmdBdHRyIiksIHRvTnVsbGFibGVKU051bWJlcihpbXBsLmxvbmdBdHRyKCkpKTsK
KyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJj
cmVhdGUiKSwganNCb29sZWFuKGltcGwuY3JlYXRlKCkpKTsKKworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKK30KKwogdXNpbmcgVGVzdE9iakl0ZXJhdG9yID0gSlNLZXlWYWx1
ZUl0ZXJhdG9yPEpTVGVzdE9iaj47CiB1c2luZyBUZXN0T2JqSXRlcmF0b3JQcm90b3R5cGUgPSBK
U0tleVZhbHVlSXRlcmF0b3JQcm90b3R5cGU8SlNUZXN0T2JqPjsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROb2RlLmlkbCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Tm9kZS5pZGwKaW5kZXggZjM3OTVmMTg0
ODk0ZDAzMzY3Y2VlNWQwNmM2MGQ5NDRhYjZkNDE0Yy4uMGYyMGQ0NjA4ZDhmNjU1OWYzMzNjNTE4
YWIxOTFiNmJiMWZhNTliOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Rlc3ROb2RlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVGVzdE5vZGUuaWRsCkBAIC0yMyw1ICsyMyw3IEBACiAgICAgRXhwb3J0TWFjcm89
V0VCQ09SRV9URVNUU1VQUE9SVF9FWFBPUlQsCiBdIGludGVyZmFjZSBUZXN0Tm9kZSA6IE5vZGUg
ewogICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKKworICAgIHNlcmlhbGl6ZXI7CiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9i
ai5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwK
aW5kZXggMWMxNmY5NDRlNDlkZjg3ZWQxZDMzMzNkNjZlNTM1ODZhNDFlOGMwNC4uZWJiNTA1MjRk
ZTI1NjE2MWZkNjZhMjJmZWQ5Mjg0YjBkZWU0NGQzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbApAQCAtMzQzLDYgKzM0Myw4IEBAIGVu
dW0gX29wdGlvbmFsIHsgIiIsICJPcHRpb25hbFZhbHVlMSIsICJPcHRpb25hbFZhbHVlMiIsICJP
cHRpb25hbFZhbHVlMyIgfTsKICNpZiBkZWZpbmVkKFRFU1RJTkdfSlMpCiAgICAgW0ludm9rZXND
dXN0b21FbGVtZW50TGlmZWN5Y2xlQ2FsbGJhY2tzXSB2b2lkIG1ldGhvZFdpdGhOZWVkc0xpZmVj
eWNsZVByb2Nlc3NpbmdTdGFjaygpOwogI2VuZGlmCisKKyAgICBzZXJpYWxpemVyID0ge3JlYWRP
bmx5U3RyaW5nQXR0ciwgY3JlYXRlLCBlbnVtQXR0ciwgbG9uZ0F0dHJ9OwogfTsKIAogLy8gVGhl
IGZvbGxvd2luZyBjb21tZW50IHNob3VsZCBub3QgZ2VuZXJhdGUgYW55IGNvZGUuCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
Y2MxYjY0NzlhZTFjMTY2NWZlOTdlNzIzYjY0NmMwYmQyNzYyZmVkOC4uMzhmOTk0OTFjMDZhMTE3
ZTViODYzZTg1YTFiYThlN2Q4YjdhYjg0YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDE2LTA0
LTE0ICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIEFk
ZCBXZWJJREwgc3BlY2lhbCBvcGVyYXRpb24gc3VwcG9ydDogc2VyaWFsaXplcgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MjkzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgVmVyaWZ5IHRoZSBuZXcgQVBJIG9m
IHRoZSBvYmplY3RzIGFuZCBjaGVjayB3aGF0IGhhcHBlbnMgd2hlbiB1c2VyCisgICAgICAgIG1v
ZGlmaWVzIHRoZSB2YWx1ZXMgYW5kIHR5cGVzIG9mIHRoZSBhdHRyaWJ1dGVzLCBvciBhZGRzIGEg
bnVsbCB2YWx1ZS4KKworICAgICAgICAqIGZhc3QvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRl
LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0
ZS5odG1sOgorICAgICAgICAqIGZhc3QvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9u
LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNj
cmlwdGlvbi5odG1sOgorCiAyMDE2LTA0LTEzICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0Bh
cHBsZS5jb20+CiAKICAgICAgICAgSlNDb250ZXh0IEluc3BlY3RvcjogSW1wcm92ZSBDbGFzcyBp
bnN0YW5jZXMgYW5kIEpTQyBBUEkgRXhwb3J0ZWQgVmFsdWVzIHZpZXcgaW4gQ29uc29sZSAvIE9i
amVjdFRyZWUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDSWNl
Q2FuZGlkYXRlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRD
SWNlQ2FuZGlkYXRlLWV4cGVjdGVkLnR4dAppbmRleCBjZGE5NTI0YmZlOTc0ZjgzZDIyNzQxOTI2
ODQ3M2IwYjc4ZWNkOWUzLi4yZDIxZTRiZDM1OGRhMjczNjI4NmU2YjIzZTliMDM3MThmZTcxNmQ0
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0
ZS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENJY2VD
YW5kaWRhdGUtZXhwZWN0ZWQudHh0CkBAIC03LDYgKzcsMTYgQEAgUEFTUyBjYW5kaWRhdGUgPSBu
ZXcgUlRDSWNlQ2FuZGlkYXRlKGluaXRpYWxpemVyKTsgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24u
CiBQQVNTIGNhbmRpZGF0ZS5jYW5kaWRhdGUgaXMgImZvbyIKIFBBU1MgY2FuZGlkYXRlLnNkcE1p
ZCBpcyAiYmFyIgogUEFTUyBjYW5kaWRhdGUuc2RwTUxpbmVJbmRleCBpcyA2CitQQVNTIFJUQ0lj
ZUNhbmRpZGF0ZS5wcm90b3R5cGUudG9KU09OIGlzIGRlZmluZWQuCitQQVNTIE9iamVjdC5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoUlRDSWNlQ2FuZGlkYXRlLnByb3RvdHlwZSwgInRvSlNPTiIp
LmVudW1lcmFibGUgaXMgdHJ1ZQorUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KFJUQ0ljZUNhbmRpZGF0ZS5wcm90b3R5cGUsICJ0b0pTT04iKS53cml0YWJsZSBpcyBmYWxzZQor
UEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFJUQ0ljZUNhbmRpZGF0ZS5wcm90
b3R5cGUsICJ0b0pTT04iKS5jb25maWd1cmFibGUgaXMgZmFsc2UKK1BBU1MgUlRDSWNlQ2FuZGlk
YXRlLnByb3RvdHlwZS50b0pTT04ubGVuZ3RoIGlzIDAKK1BBU1MgSlNPTi5zdHJpbmdpZnkoY2Fu
ZGlkYXRlLnRvSlNPTigpKSBpcyAie1wiY2FuZGlkYXRlXCI6XCJmb29cIixcInNkcE1pZFwiOlwi
YmFyXCIsXCJzZHBNTGluZUluZGV4XCI6XCI2XCJ9IgorUEFTUyBKU09OLnN0cmluZ2lmeShjYW5k
aWRhdGUudG9KU09OKCkpIGlzICJ7XCJjYW5kaWRhdGVcIjpcImZvb1wiLFwic2RwTWlkXCI6XCJi
YXJcIixcInNkcE1MaW5lSW5kZXhcIjpcIjZcIn0iCitQQVNTIEpTT04uc3RyaW5naWZ5KGNhbmRp
ZGF0ZS50b0pTT04oKSkgaXMgIntcImNhbmRpZGF0ZVwiOlwiZm9vXCIsXCJzZHBNaWRcIjpcImJh
clwiLFwic2RwTUxpbmVJbmRleFwiOlwiMFwifSIKK1BBU1MgSlNPTi5zdHJpbmdpZnkoY2FuZGlk
YXRlLnRvSlNPTigpKSBpcyAie1wiY2FuZGlkYXRlXCI6XCJmb29cIixcInNkcE1pZFwiOlwiN1wi
LFwic2RwTUxpbmVJbmRleFwiOlwiMFwifSIKK1BBU1MgSlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRl
LnRvSlNPTigpKSBpcyAie1wiY2FuZGlkYXRlXCI6XCJmb29cIixcInNkcE1pZFwiOlwibnVsbFwi
LFwic2RwTUxpbmVJbmRleFwiOlwiMFwifSIKIAogRGljdGlvbmFyeSBtZW1iZXIgJ2NhbmRpZGF0
ZScgaXMgcmVxdWlyZWQuCiBQQVNTIG5ldyBSVENJY2VDYW5kaWRhdGUoe30pOyB0aHJldyBleGNl
cHRpb24gVHlwZUVycm9yOiBFcnJvciBjcmVhdGluZyBSVENJY2VDYW5kaWRhdGUuCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5odG1sIGIv
TGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaHRtbAppbmRleCA0
YzllMzg1NTZjOTA0OGQ4ZTY0ZGI0ZWFhNTFjOGFlN2Y2ODA4ZGFjLi40NzBmOTA3NjNhMzA4YzNm
OWRjZDlmYjViY2IzOGMxYzJkNTc5NDc5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L21l
ZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbWVk
aWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmh0bWwKQEAgLTEzLDYgKzEzLDIyIEBACiAgICAgICAg
ICAgICBzaG91bGRCZSgnY2FuZGlkYXRlLmNhbmRpZGF0ZScsICciZm9vIicpOwogICAgICAgICAg
ICAgc2hvdWxkQmUoJ2NhbmRpZGF0ZS5zZHBNaWQnLCAnImJhciInKTsKICAgICAgICAgICAgIHNo
b3VsZEJlKCdjYW5kaWRhdGUuc2RwTUxpbmVJbmRleCcsICc2Jyk7CisgICAgICAgICAgICBzaG91
bGRCZURlZmluZWQoJ1JUQ0ljZUNhbmRpZGF0ZS5wcm90b3R5cGUudG9KU09OJyk7CisgICAgICAg
ICAgICBzaG91bGRCZVRydWUoJ09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUlRDSWNl
Q2FuZGlkYXRlLnByb3RvdHlwZSwgInRvSlNPTiIpLmVudW1lcmFibGUnKTsKKyAgICAgICAgICAg
IHNob3VsZEJlRmFsc2UoJ09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUlRDSWNlQ2Fu
ZGlkYXRlLnByb3RvdHlwZSwgInRvSlNPTiIpLndyaXRhYmxlJyk7CisgICAgICAgICAgICBzaG91
bGRCZUZhbHNlKCdPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFJUQ0ljZUNhbmRpZGF0
ZS5wcm90b3R5cGUsICJ0b0pTT04iKS5jb25maWd1cmFibGUnKTsKKyAgICAgICAgICAgIHNob3Vs
ZEJlKCdSVENJY2VDYW5kaWRhdGUucHJvdG90eXBlLnRvSlNPTi5sZW5ndGgnLCAnMCcpOworCisg
ICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ0pTT04uc3RyaW5naWZ5KGNhbmRpZGF0
ZS50b0pTT04oKSknLCAneyJjYW5kaWRhdGUiOiJmb28iLCJzZHBNaWQiOiJiYXIiLCJzZHBNTGlu
ZUluZGV4IjoiNiJ9Jyk7CisgICAgICAgICAgICBjYW5kaWRhdGUubmV3QXR0cmlidXRlID0gIm5l
dyB2YWx1ZSI7CisgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ0pTT04uc3RyaW5n
aWZ5KGNhbmRpZGF0ZS50b0pTT04oKSknLCAneyJjYW5kaWRhdGUiOiJmb28iLCJzZHBNaWQiOiJi
YXIiLCJzZHBNTGluZUluZGV4IjoiNiJ9Jyk7CisgICAgICAgICAgICBjYW5kaWRhdGUuc2RwTUxp
bmVJbmRleCA9ICJub3QgYSBudW1iZXIiOworICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCdKU09OLnN0cmluZ2lmeShjYW5kaWRhdGUudG9KU09OKCkpJywgJ3siY2FuZGlkYXRlIjoi
Zm9vIiwic2RwTWlkIjoiYmFyIiwic2RwTUxpbmVJbmRleCI6IjAifScpOworICAgICAgICAgICAg
Y2FuZGlkYXRlLnNkcE1pZCA9IDc7CisgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmco
J0pTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSknLCAneyJjYW5kaWRhdGUiOiJmb28i
LCJzZHBNaWQiOiI3Iiwic2RwTUxpbmVJbmRleCI6IjAifScpOworICAgICAgICAgICAgY2FuZGlk
YXRlLnNkcE1pZCA9IG51bGw7CisgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ0pT
T04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSknLCAneyJjYW5kaWRhdGUiOiJmb28iLCJz
ZHBNaWQiOiJudWxsIiwic2RwTUxpbmVJbmRleCI6IjAifScpOworCiAgICAgICAgICAgICBkZWJ1
ZygiIik7CiAKICAgICAgICAgICAgIGRlYnVnKCJEaWN0aW9uYXJ5IG1lbWJlciAnY2FuZGlkYXRl
JyBpcyByZXF1aXJlZC4iKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJl
YW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3Qv
bWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dAppbmRleCA2NTgy
MThmZmUxMmU1NjAwNDg4ZDc5NTIyYzRhMzRhOWRmOGRlNmY4Li4zNDA5YzJkZWVhMDI5YWE0MGNj
NWIwNzZiODUxZjU3ZDYxYzJhZTExIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlh
c3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0CkBA
IC03LDYgKzcsNyBAQCBQQVNTIHNlc3Npb25EZXNjcmlwdGlvbiA9IG5ldyBSVENTZXNzaW9uRGVz
Y3JpcHRpb24oKTsgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCiBQQVNTIHNlc3Npb25EZXNjcmlw
dGlvbiA9IG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24oaW5pdGlhbGl6ZXIpOyBkaWQgbm90IHRo
cm93IGV4Y2VwdGlvbi4KIFBBU1Mgc2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUgaXMgIm9mZmVyIgog
UEFTUyBzZXNzaW9uRGVzY3JpcHRpb24uc2RwIGlzICJmb29iYXIiCitQQVNTIEpTT04uc3RyaW5n
aWZ5KHNlc3Npb25EZXNjcmlwdGlvbi50b0pTT04oKSkgaXMgIntcInR5cGVcIjpcIm9mZmVyXCIs
XCJzZHBcIjpcImZvb2JhclwifSIKIFBBU1MgbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihudWxs
KTsgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogT3B0aW9uYWwgUlRDU2Vzc2lvbkRlc2NyaXB0
aW9uIGNvbnN0cnVjdG9yIGFyZ3VtZW50IG11c3QgYmUgYSB2YWxpZCBEaWN0aW9uYXJ5LgogUEFT
UyBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKDUpOyB0aHJldyBleGNlcHRpb24gVHlwZUVycm9y
OiBPcHRpb25hbCBSVENTZXNzaW9uRGVzY3JpcHRpb24gY29uc3RydWN0b3IgYXJndW1lbnQgbXVz
dCBiZSBhIHZhbGlkIERpY3Rpb25hcnkuCiBQQVNTIG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24o
J2Zvb2JhcicpOyB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBPcHRpb25hbCBSVENTZXNzaW9u
RGVzY3JpcHRpb24gY29uc3RydWN0b3IgYXJndW1lbnQgbXVzdCBiZSBhIHZhbGlkIERpY3Rpb25h
cnkuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25E
ZXNjcmlwdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENTZXNzaW9u
RGVzY3JpcHRpb24uaHRtbAppbmRleCAzYTY2ZDJlMjZiMTE5MTA1YWMxZWQzMGRkNWFmNTc1Mjk5
N2RmMzQyLi4xZDliNWNkMzM3ZWQ1ZGU5YTk2NThkNjQ2YjhjNDJiZGNhZGFlNjIzIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5o
dG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0
aW9uLmh0bWwKQEAgLTE1LDYgKzE1LDcgQEAKICAgICAgICAgICAgIHNob3VsZE5vdFRocm93KCJz
ZXNzaW9uRGVzY3JpcHRpb24gPSBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGluaXRpYWxpemVy
KTsiKTsKICAgICAgICAgICAgIHNob3VsZEJlKCdzZXNzaW9uRGVzY3JpcHRpb24udHlwZScsICci
b2ZmZXIiJyk7CiAgICAgICAgICAgICBzaG91bGRCZSgnc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCcs
ICciZm9vYmFyIicpOworICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdKU09OLnN0
cmluZ2lmeShzZXNzaW9uRGVzY3JpcHRpb24udG9KU09OKCkpJywgJ3sidHlwZSI6Im9mZmVyIiwi
c2RwIjoiZm9vYmFyIn0nKTsKIAogICAgICAgICAgICAgc2hvdWxkVGhyb3coIm5ldyBSVENTZXNz
aW9uRGVzY3JpcHRpb24obnVsbCk7Iik7CiAgICAgICAgICAgICBzaG91bGRUaHJvdygibmV3IFJU
Q1Nlc3Npb25EZXNjcmlwdGlvbig1KTsiKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277482</attachid>
            <date>2016-04-27 09:18:23 -0700</date>
            <delta_ts>2016-05-24 08:41:30 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>28258</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2N2FlZmI2Li44NTQyZmZmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTYtMDQt
MTQgIEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CisKKyAgICAgICAgQWRk
IFdlYklETCBzcGVjaWFsIG9wZXJhdGlvbiBzdXBwb3J0OiBzZXJpYWxpemVyCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTYyOTMKKworICAgICAgICBS
ZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBWZXJpZnkgdGhlIG5ldyBBUEkgb2Yg
dGhlIG9iamVjdHMgYW5kIGNoZWNrIHdoYXQgaGFwcGVucyB3aGVuIHVzZXIKKyAgICAgICAgbW9k
aWZpZXMgdGhlIHZhbHVlcyBhbmQgdHlwZXMgb2YgdGhlIGF0dHJpYnV0ZXMsIG9yIGFkZHMgYSBu
dWxsIHZhbHVlLgorCisgICAgICAgICogZmFzdC9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUt
ZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRl
Lmh0bWw6CisgICAgICAgICogZmFzdC9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24t
ZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2Ny
aXB0aW9uLmh0bWw6CisKIDIwMTYtMDQtMjYgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29t
PgogCiAgICAgICAgIFJUTCBuYXRpdmUgPHNlbGVjdD4gYnV0dG9ucyBzaG91bGQgaGF2ZSBhcnJv
d3Mgb24gbGVmdApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENJ
Y2VDYW5kaWRhdGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9S
VENJY2VDYW5kaWRhdGUtZXhwZWN0ZWQudHh0CmluZGV4IGNkYTk1MjQuLmJlNjdkOTQgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLWV4cGVj
dGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0
ZS1leHBlY3RlZC50eHQKQEAgLTcsNiArNywyMSBAQCBQQVNTIGNhbmRpZGF0ZSA9IG5ldyBSVENJ
Y2VDYW5kaWRhdGUoaW5pdGlhbGl6ZXIpOyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KIFBBU1Mg
Y2FuZGlkYXRlLmNhbmRpZGF0ZSBpcyAiZm9vIgogUEFTUyBjYW5kaWRhdGUuc2RwTWlkIGlzICJi
YXIiCiBQQVNTIGNhbmRpZGF0ZS5zZHBNTGluZUluZGV4IGlzIDYKK1BBU1MgUlRDSWNlQ2FuZGlk
YXRlLnByb3RvdHlwZS50b0pTT04gaXMgZGVmaW5lZC4KK1BBU1MgT2JqZWN0LmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihSVENJY2VDYW5kaWRhdGUucHJvdG90eXBlLCAidG9KU09OIikuZW51bWVy
YWJsZSBpcyB0cnVlCitQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUlRDSWNl
Q2FuZGlkYXRlLnByb3RvdHlwZSwgInRvSlNPTiIpLndyaXRhYmxlIGlzIHRydWUKK1BBU1MgT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihSVENJY2VDYW5kaWRhdGUucHJvdG90eXBlLCAi
dG9KU09OIikuY29uZmlndXJhYmxlIGlzIHRydWUKK1BBU1MgUlRDSWNlQ2FuZGlkYXRlLnByb3Rv
dHlwZS50b0pTT04ubGVuZ3RoIGlzIDAKK1BBU1MgUlRDSWNlQ2FuZGlkYXRlLnByb3RvdHlwZS50
b0pTT04ubmFtZSBpcyAidG9KU09OIgorUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKGpzb25NYXAsICJjYW5kaWRhdGUiKS5lbnVtZXJhYmxlIGlzIHRydWUKK1BBU1MgT2JqZWN0
LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihqc29uTWFwLCAiY2FuZGlkYXRlIikud3JpdGFibGUg
aXMgdHJ1ZQorUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGpzb25NYXAsICJj
YW5kaWRhdGUiKS5jb25maWd1cmFibGUgaXMgdHJ1ZQorUEFTUyBjaGlsZENhbmRpZGF0ZS50b0pT
T04oKTsgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQ2FuIG9ubHkgY2FsbCBSVENJY2VDYW5k
aWRhdGUudG9KU09OIG9uIGluc3RhbmNlcyBvZiBSVENJY2VDYW5kaWRhdGUuCitQQVNTIEpTT04u
c3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSkgaXMgIntcImNhbmRpZGF0ZVwiOlwiZm9vXCIs
XCJzZHBNaWRcIjpcImJhclwiLFwic2RwTUxpbmVJbmRleFwiOjZ9IgorUEFTUyBKU09OLnN0cmlu
Z2lmeShjYW5kaWRhdGUudG9KU09OKCkpIGlzICJ7XCJjYW5kaWRhdGVcIjpcImZvb1wiLFwic2Rw
TWlkXCI6XCJiYXJcIixcInNkcE1MaW5lSW5kZXhcIjo2fSIKK1BBU1MgSlNPTi5zdHJpbmdpZnko
Y2FuZGlkYXRlLnRvSlNPTigpKSBpcyAie1wiY2FuZGlkYXRlXCI6XCJmb29cIixcInNkcE1pZFwi
OlwiYmFyXCIsXCJzZHBNTGluZUluZGV4XCI6MH0iCitQQVNTIEpTT04uc3RyaW5naWZ5KGNhbmRp
ZGF0ZS50b0pTT04oKSkgaXMgIntcImNhbmRpZGF0ZVwiOlwiZm9vXCIsXCJzZHBNaWRcIjpcIjdc
IixcInNkcE1MaW5lSW5kZXhcIjowfSIKK1BBU1MgSlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRlLnRv
SlNPTigpKSBpcyAie1wiY2FuZGlkYXRlXCI6XCJmb29cIixcInNkcE1pZFwiOlwibnVsbFwiLFwi
c2RwTUxpbmVJbmRleFwiOjB9IgogCiBEaWN0aW9uYXJ5IG1lbWJlciAnY2FuZGlkYXRlJyBpcyBy
ZXF1aXJlZC4KIFBBU1MgbmV3IFJUQ0ljZUNhbmRpZGF0ZSh7fSk7IHRocmV3IGV4Y2VwdGlvbiBU
eXBlRXJyb3I6IEVycm9yIGNyZWF0aW5nIFJUQ0ljZUNhbmRpZGF0ZS4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmh0bWwgYi9MYXlvdXRU
ZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5odG1sCmluZGV4IDRjOWUzODUu
LmQwZjYwZmYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDSWNl
Q2FuZGlkYXRlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENJY2VD
YW5kaWRhdGUuaHRtbApAQCAtMTMsNiArMTMsMzMgQEAKICAgICAgICAgICAgIHNob3VsZEJlKCdj
YW5kaWRhdGUuY2FuZGlkYXRlJywgJyJmb28iJyk7CiAgICAgICAgICAgICBzaG91bGRCZSgnY2Fu
ZGlkYXRlLnNkcE1pZCcsICciYmFyIicpOwogICAgICAgICAgICAgc2hvdWxkQmUoJ2NhbmRpZGF0
ZS5zZHBNTGluZUluZGV4JywgJzYnKTsKKyAgICAgICAgICAgIHNob3VsZEJlRGVmaW5lZCgnUlRD
SWNlQ2FuZGlkYXRlLnByb3RvdHlwZS50b0pTT04nKTsKKyAgICAgICAgICAgIHNob3VsZEJlVHJ1
ZSgnT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihSVENJY2VDYW5kaWRhdGUucHJvdG90
eXBlLCAidG9KU09OIikuZW51bWVyYWJsZScpOworICAgICAgICAgICAgc2hvdWxkQmVUcnVlKCdP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFJUQ0ljZUNhbmRpZGF0ZS5wcm90b3R5cGUs
ICJ0b0pTT04iKS53cml0YWJsZScpOworICAgICAgICAgICAgc2hvdWxkQmVUcnVlKCdPYmplY3Qu
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFJUQ0ljZUNhbmRpZGF0ZS5wcm90b3R5cGUsICJ0b0pT
T04iKS5jb25maWd1cmFibGUnKTsKKyAgICAgICAgICAgIHNob3VsZEJlKCdSVENJY2VDYW5kaWRh
dGUucHJvdG90eXBlLnRvSlNPTi5sZW5ndGgnLCAnMCcpOworICAgICAgICAgICAgc2hvdWxkQmUo
J1JUQ0ljZUNhbmRpZGF0ZS5wcm90b3R5cGUudG9KU09OLm5hbWUnLCAnInRvSlNPTiInKTsKKwor
ICAgICAgICAgICAgdmFyIGpzb25NYXAgPSBjYW5kaWRhdGUudG9KU09OKCk7CisgICAgICAgICAg
ICBzaG91bGRCZVRydWUoJ09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoanNvbk1hcCwg
ImNhbmRpZGF0ZSIpLmVudW1lcmFibGUnKTsKKyAgICAgICAgICAgIHNob3VsZEJlVHJ1ZSgnT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihqc29uTWFwLCAiY2FuZGlkYXRlIikud3JpdGFi
bGUnKTsKKyAgICAgICAgICAgIHNob3VsZEJlVHJ1ZSgnT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihqc29uTWFwLCAiY2FuZGlkYXRlIikuY29uZmlndXJhYmxlJyk7CisKKyAgICAgICAg
ICAgIHZhciBjaGlsZFJUQ0ljZUNhbmRpZGF0ZSA9IGZ1bmN0aW9uKCkge307CisgICAgICAgICAg
ICBjaGlsZFJUQ0ljZUNhbmRpZGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJUQ0ljZUNh
bmRpZGF0ZS5wcm90b3R5cGUpOworICAgICAgICAgICAgdmFyIGNoaWxkQ2FuZGlkYXRlID0gbmV3
IGNoaWxkUlRDSWNlQ2FuZGlkYXRlKCk7CisgICAgICAgICAgICBzaG91bGRUaHJvdygnY2hpbGRD
YW5kaWRhdGUudG9KU09OKCk7Jyk7CisKKyAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmlu
ZygnSlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNPTigpKScsICd7ImNhbmRpZGF0ZSI6ImZv
byIsInNkcE1pZCI6ImJhciIsInNkcE1MaW5lSW5kZXgiOjZ9Jyk7CisgICAgICAgICAgICBjYW5k
aWRhdGUubmV3QXR0cmlidXRlID0gIm5ldyB2YWx1ZSI7CisgICAgICAgICAgICBzaG91bGRCZUVx
dWFsVG9TdHJpbmcoJ0pTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSknLCAneyJjYW5k
aWRhdGUiOiJmb28iLCJzZHBNaWQiOiJiYXIiLCJzZHBNTGluZUluZGV4Ijo2fScpOworICAgICAg
ICAgICAgY2FuZGlkYXRlLnNkcE1MaW5lSW5kZXggPSAibm90IGEgbnVtYmVyIjsKKyAgICAgICAg
ICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnSlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNP
TigpKScsICd7ImNhbmRpZGF0ZSI6ImZvbyIsInNkcE1pZCI6ImJhciIsInNkcE1MaW5lSW5kZXgi
OjB9Jyk7CisgICAgICAgICAgICBjYW5kaWRhdGUuc2RwTWlkID0gNzsKKyAgICAgICAgICAgIHNo
b3VsZEJlRXF1YWxUb1N0cmluZygnSlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNPTigpKScs
ICd7ImNhbmRpZGF0ZSI6ImZvbyIsInNkcE1pZCI6IjciLCJzZHBNTGluZUluZGV4IjowfScpOwor
ICAgICAgICAgICAgY2FuZGlkYXRlLnNkcE1pZCA9IG51bGw7CisgICAgICAgICAgICBzaG91bGRC
ZUVxdWFsVG9TdHJpbmcoJ0pTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSknLCAneyJj
YW5kaWRhdGUiOiJmb28iLCJzZHBNaWQiOiJudWxsIiwic2RwTUxpbmVJbmRleCI6MH0nKTsKKwog
ICAgICAgICAgICAgZGVidWcoIiIpOwogCiAgICAgICAgICAgICBkZWJ1ZygiRGljdGlvbmFyeSBt
ZW1iZXIgJ2NhbmRpZGF0ZScgaXMgcmVxdWlyZWQuIik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi1leHBlY3Rl
ZC50eHQKaW5kZXggNjU4MjE4Zi4uMzQwOWMyZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFz
dC9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0CisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLWV4cGVjdGVk
LnR4dApAQCAtNyw2ICs3LDcgQEAgUEFTUyBzZXNzaW9uRGVzY3JpcHRpb24gPSBuZXcgUlRDU2Vz
c2lvbkRlc2NyaXB0aW9uKCk7IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgogUEFTUyBzZXNzaW9u
RGVzY3JpcHRpb24gPSBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGluaXRpYWxpemVyKTsgZGlk
IG5vdCB0aHJvdyBleGNlcHRpb24uCiBQQVNTIHNlc3Npb25EZXNjcmlwdGlvbi50eXBlIGlzICJv
ZmZlciIKIFBBU1Mgc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCBpcyAiZm9vYmFyIgorUEFTUyBKU09O
LnN0cmluZ2lmeShzZXNzaW9uRGVzY3JpcHRpb24udG9KU09OKCkpIGlzICJ7XCJ0eXBlXCI6XCJv
ZmZlclwiLFwic2RwXCI6XCJmb29iYXJcIn0iCiBQQVNTIG5ldyBSVENTZXNzaW9uRGVzY3JpcHRp
b24obnVsbCk7IHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE9wdGlvbmFsIFJUQ1Nlc3Npb25E
ZXNjcmlwdGlvbiBjb25zdHJ1Y3RvciBhcmd1bWVudCBtdXN0IGJlIGEgdmFsaWQgRGljdGlvbmFy
eS4KIFBBU1MgbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbig1KTsgdGhyZXcgZXhjZXB0aW9uIFR5
cGVFcnJvcjogT3B0aW9uYWwgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIGNvbnN0cnVjdG9yIGFyZ3Vt
ZW50IG11c3QgYmUgYSB2YWxpZCBEaWN0aW9uYXJ5LgogUEFTUyBuZXcgUlRDU2Vzc2lvbkRlc2Ny
aXB0aW9uKCdmb29iYXInKTsgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogT3B0aW9uYWwgUlRD
U2Vzc2lvbkRlc2NyaXB0aW9uIGNvbnN0cnVjdG9yIGFyZ3VtZW50IG11c3QgYmUgYSB2YWxpZCBE
aWN0aW9uYXJ5LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENT
ZXNzaW9uRGVzY3JpcHRpb24uaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRD
U2Vzc2lvbkRlc2NyaXB0aW9uLmh0bWwKaW5kZXggM2E2NmQyZS4uMWQ5YjVjZCAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24uaHRt
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlv
bi5odG1sCkBAIC0xNSw2ICsxNSw3IEBACiAgICAgICAgICAgICBzaG91bGROb3RUaHJvdygic2Vz
c2lvbkRlc2NyaXB0aW9uID0gbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihpbml0aWFsaXplcik7
Iik7CiAgICAgICAgICAgICBzaG91bGRCZSgnc2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUnLCAnIm9m
ZmVyIicpOwogICAgICAgICAgICAgc2hvdWxkQmUoJ3Nlc3Npb25EZXNjcmlwdGlvbi5zZHAnLCAn
ImZvb2JhciInKTsKKyAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnSlNPTi5zdHJp
bmdpZnkoc2Vzc2lvbkRlc2NyaXB0aW9uLnRvSlNPTigpKScsICd7InR5cGUiOiJvZmZlciIsInNk
cCI6ImZvb2JhciJ9Jyk7CiAKICAgICAgICAgICAgIHNob3VsZFRocm93KCJuZXcgUlRDU2Vzc2lv
bkRlc2NyaXB0aW9uKG51bGwpOyIpOwogICAgICAgICAgICAgc2hvdWxkVGhyb3coIm5ldyBSVENT
ZXNzaW9uRGVzY3JpcHRpb24oNSk7Iik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWI1M2ExMy4uYmVmYWM5ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDE2LTA0LTE0ICBBbGVqYW5kcm8gRy4gQ2Fz
dHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIEFkZCBXZWJJREwgc3BlY2lhbCBvcGVy
YXRpb24gc3VwcG9ydDogc2VyaWFsaXplcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MjkzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRs
ZXIuCisKKyAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgdGhlIHNlcmlhbGl6ZXIgc3BlY2lhbCBv
cGVyYXRpb24gZm9yIFdlYklETHMsCisgICAgICAgIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gaXMg
bm90IGNvbXBsZXRlLCBpdCBhZGRzIHN1cHBvcnQgZm9yOgorICAgICAgICAgIC0ganVzdCB0aGUg
a2V5d29yZDogc2VyaWFsaXplcjsgSXQgd2lsbCByZXR1cm4gYWxsIHRoZSBhdHRyaWJ1dGVzIG9m
IGluIGFuIG9iamVjdC4KKyAgICAgICAgICAtIG1hcCBvZiBlbnRyaWVzIHdpdGggdGhlIGF0dHJp
YnV0ZXM6IHNlcmlhbGl6ZXIgPSB7YXR0cmlidXRlMSwgYXR0cmlidXRlMiwgLi4ufQorICAgICAg
ICAgIC0gbGlzdCBvZiBhdHRyaWJ1dGVzOiBzZXJpYWxpemVyID0gW2F0dHJpYnV0ZTEsIGF0dHJp
YnV0ZTIsIC4uLl0KKworICAgICAgICBJdCBjcmVhdGVzIGEgdG9KU09OIG1ldGhvZCB0aGF0IHJl
dHVybnMgdGhlIHNlcmlhbGl6ZWQgdmFsdWUKKyAgICAgICAgY29udmVydGVkIGludG8gYW4gRUNN
QVNjcmlwdCB2YWx1ZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gY2hlY2sgdGhlCisgICAgICAgIGRl
ZmluaXRpb24gb2YgdGhlIG9wZXJhdGlvbjoKKworICAgICAgICBodHRwOi8vaGV5Y2FtLmdpdGh1
Yi5pby93ZWJpZGwvI2lkbC1zZXJpYWxpemVycworCisgICAgICAgIFVzZWQgdGhlIHN1cHBvcnQg
dG8gYWRkIG5ldyBBUEkgZm9yIFJUQ0ljZUNhbmRpZGF0ZSBhbmQKKyAgICAgICAgUlRDU2Vzc2lv
bkRlc2NyaXB0aW9uLgorCisgICAgICAgIFRlc3RzOiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVz
dE5vZGUuaWRsCisgICAgICAgICAgICAgICBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5p
ZGwKKyAgICAgICAgICAgICAgIGZhc3QvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmh0bWwK
KyAgICAgICAgICAgICAgIGZhc3QvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmh0
bWwKKworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmlkbDog
QWRkZWQgdGhlIHNlcmlhbGl6ZXIgb3BlcmF0aW9uLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFz
dHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmlkbDogQWRkZWQgdGhlIHNlcmlhbGl6ZXIgb3Bl
cmF0aW9uLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgor
ICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6IEFkZGVkIG5ldyBvcGVyYXRpb24gdG8g
dGhlIGhhc2ggdGFibGUuCisgICAgICAgIChHZW5lcmF0ZVNlcmlhbGl6ZXJGdW5jdGlvbik6IEFk
ZGVkIG1ldGhvZCB0aGF0IGdlbmVyYXRlcyB0aGUKKyAgICAgICAgdG9KU09OIG5hdGl2ZSBmdW5j
dGlvbi4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbTogTW9kaWZpZWQg
dGhlIHNlcmlhbGl6ZXIgcGFyc2VyCisgICAgICAgIHRoYXQgd2FzIHVudXNlZCB0byBzdXBwb3J0
IHRoZSBXZWJJREwgc3BlYyBwYXJ0cy4gQWRkZWQgYSBuZXcKKyAgICAgICAgZG9tU2VyaWFsaXph
YmxlIHR5cGUgdG8gc3RvcmUgdGhlIGxpc3Qgb2YgYXR0cmlidXRlcyBpbiB0aGUKKyAgICAgICAg
cG9zc2libGUgbWFwLgorICAgICAgICAocGFyc2VTZXJpYWxpemVyKTogTW9kaWZpZWQgdGhlIGZ1
bmN0aW9uIHRvIGZvbGxvdyB0aGUKKyAgICAgICAgc2VtaWNvbG9uIHJ1bGUgaW4gdGhlIHNwZWMs
IG5vdyB0aGUgc2VyaWFsaXplciBsaW5lIG11c3QgaGF2ZSBhCisgICAgICAgIHNlbWljb2xvbiBs
aWtlIGFueSBvdGhlciBsaW5lLgorICAgICAgICAocGFyc2VTZXJpYWxpemVyUmVzdCk6IFRoZSBm
dW5jdGlvbiBub3cgaGFzIHRvIGdldCB0aGUgYXR0cmlidXRlcworICAgICAgICBsaXN0IGZyb20g
dGhlIHBhdHRlcm4gcGFyc2luZyBmdW5jdGlvbiBhbmQgYWRkIHRoZW0gdG8gdGhlCisgICAgICAg
IGRvbVNlcmlhbGl6YWJsZSBpdGVtLgorICAgICAgICAocGFyc2VTZXJpYWxpemF0aW9uUGF0dGVy
bik6IE5vdyB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxpc3Qgb2YKKyAgICAgICAgYXR0cmli
dXRlcyBpbiB0aGUgc2VyaWFsaXphYmxlIG1hcCBvciBsaXN0IGlmIHdlIGhhdmUgb25lLgorICAg
ICAgICAocGFyc2VTZXJpYWxpemF0aW9uQXR0cmlidXRlcyk6IEFkZGVkLCB0aGlzIGZ1bmN0aW9u
IHJlcGxhY2VzIHRoZQorICAgICAgICBNYXAgYW5kIExpc3QgZnVuY3Rpb25zLCB0aGUgY3VycmVu
dGx5IHN1cHBvcnRlZCBwYXJ0cyBhcmUgc2ltaWxhcgorICAgICAgICBmb3IgYm90aCBzaXR1YXRp
b25zLgorICAgICAgICAoYXBwbHlNZW1iZXJMaXN0KTogQWRkZWQgdGhlIHNlcmlhbGl6YWJsZSBp
dGVtIHRvIHRoZSBpbnRlcmZhY2UKKyAgICAgICAgdmFyaWFibGUgYW5kIHBvcHVsYXRlIHRoZSBz
ZXJpYWxpemFibGUgaW4gY2FzZSB0aGVyZSBpcyBub3QgYQorICAgICAgICBkZWZpbmVkIG1hcC4K
KyAgICAgICAgKHBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm5NYXApOiBSZXBsYWNlZCB3aXRoIHBh
cnNlU2VyaWFsaXphdGlvbkF0dHJpYnV0ZXMuCisgICAgICAgIChwYXJzZVNlcmlhbGl6YXRpb25Q
YXR0ZXJuTGlzdCk6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROb2RlLmNwcDogTW9kaWZpZWQgdGhlIGV4cGVjdGVkIHJlc3VsdC4KKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTik6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6IE1vZGlmaWVkIHRoZSBleHBlY3Rl
ZCByZXN1bHQuCisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRv
SlNPTik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROb2RlLmlkbDogQWRk
ZWQgdGhlIHNlcmlhbGl6ZXIgdGVzdC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VGVzdE9iai5pZGw6IEFkZGVkIHNlcmlhbGl6ZXIgbWFwIHRlc3QuCisKIDIwMTYtMDQtMjcgIENz
YWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBbTWFjXVtjbWFr
ZV0gVW5yZXZpZXdlZCBzcGVjdWxhdGl2ZSBidWlsZGZpeCBhZnRlciByMjAwMTE2LCBqdXN0IGZv
ciBmdW4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JU
Q0ljZUNhbmRpZGF0ZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JU
Q0ljZUNhbmRpZGF0ZS5pZGwKaW5kZXggY2QwMWVmNy4uNTI4NDJjOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaWRsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmlkbApA
QCAtMzcsNSArMzcsNiBAQAogICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgY2FuZGlkYXRlOwogICAg
IFtDdXN0b21HZXR0ZXJdIGF0dHJpYnV0ZSBET01TdHJpbmcgc2RwTWlkOwogICAgIFtDdXN0b21H
ZXR0ZXJdIGF0dHJpYnV0ZSB1bnNpZ25lZCBzaG9ydCBzZHBNTGluZUluZGV4OwotfTsKIAorICAg
IHNlcmlhbGl6ZXIgPSB7Y2FuZGlkYXRlLCBzZHBNaWQsIHNkcE1MaW5lSW5kZXh9OworfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRl
c2NyaXB0aW9uLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU2Vz
c2lvbkRlc2NyaXB0aW9uLmlkbAppbmRleCAyMzQ1NWY3Li4xZDY0MzUwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5p
ZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVz
Y3JpcHRpb24uaWRsCkBAIC0zNiw1ICszNiw3IEBACiBdIGludGVyZmFjZSBSVENTZXNzaW9uRGVz
Y3JpcHRpb24gewogICAgIFtTZXR0ZXJSYWlzZXNFeGNlcHRpb25dIGF0dHJpYnV0ZSBET01TdHJp
bmcgdHlwZTsKICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIHNkcDsKKworICAgIHNlcmlhbGl6ZXIg
PSB7dHlwZSwgc2RwfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KaW5kZXggOGY2ZWQwYy4uZTg1YzRiZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KQEAg
LTE4MDgsNiArMTgwOCw4IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgbXkgJHZp
c2libGVJbnRlcmZhY2VOYW1lID0gJGNvZGVHZW5lcmF0b3ItPkdldFZpc2libGVJbnRlcmZhY2VO
YW1lKCRpbnRlcmZhY2UpOwogICAgIG15ICRldmVudFRhcmdldCA9ICRjb2RlR2VuZXJhdG9yLT5J
bmhlcml0c0ludGVyZmFjZSgkaW50ZXJmYWNlLCAiRXZlbnRUYXJnZXQiKSAmJiAkaW50ZXJmYWNl
LT5uYW1lIG5lICJFdmVudFRhcmdldCI7CiAgICAgbXkgJG5lZWRzVmlzaXRDaGlsZHJlbiA9IElu
c3RhbmNlTmVlZHNWaXNpdENoaWxkcmVuKCRpbnRlcmZhY2UpOworICAgIG15ICRzZXJpYWxpemVy
RnVuY3Rpb25OYW1lID0gInRvSlNPTiI7CisgICAgbXkgJHNlcmlhbGl6ZXJOYXRpdmVGdW5jdGlv
bk5hbWUgPSAkY29kZUdlbmVyYXRvci0+V0tfbGNmaXJzdCgkY2xhc3NOYW1lKSAuICJQcm90b3R5
cGVGdW5jdGlvbiIgLiAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkc2VyaWFsaXplckZ1bmN0
aW9uTmFtZSk7CiAKICAgICBteSAkbmFtZWRHZXR0ZXJGdW5jdGlvbiA9IEdldE5hbWVkR2V0dGVy
RnVuY3Rpb24oJGludGVyZmFjZSk7CiAgICAgbXkgJGluZGV4ZWRHZXR0ZXJGdW5jdGlvbiA9IEdl
dEluZGV4ZWRHZXR0ZXJGdW5jdGlvbigkaW50ZXJmYWNlKTsKQEAgLTE4OTQsNiArMTg5NiwxMCBA
QCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IlxuIik7CiAgICAgfQogCisgICAgaWYgKCRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZSkgeworICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtz
ZXJpYWxpemVyTmF0aXZlRnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqKTtcblxuIik7CisgICAgfQor
CiAgICAgIyBBZGQgcHJvdG90eXBlIGRlY2xhcmF0aW9uLgogICAgIGlmICghSGVhZGVyTmVlZHNQ
cm90b3R5cGVEZWNsYXJhdGlvbigkaW50ZXJmYWNlKSkgewogICAgICAgICBHZW5lcmF0ZVByb3Rv
dHlwZURlY2xhcmF0aW9uKFxAaW1wbENvbnRlbnQsICRjbGFzc05hbWUsICRpbnRlcmZhY2UsICRp
bnRlcmZhY2VOYW1lKTsKQEAgLTIwNTksNiArMjA2NSwxNSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1l
bnRhdGlvbgogCiAgICAgbXkgJGp1c3RHZW5lcmF0ZVZhbHVlQXJyYXkgPSAhSXNET01HbG9iYWxP
YmplY3QoJGludGVyZmFjZSk7CiAKKyAgICBpZiAoJGludGVyZmFjZS0+c2VyaWFsaXphYmxlKSB7
CisgICAgICAgIHB1c2goQGhhc2hLZXlzLCAkc2VyaWFsaXplckZ1bmN0aW9uTmFtZSk7CisgICAg
ICAgIHB1c2goQGhhc2hWYWx1ZTEsICRzZXJpYWxpemVyTmF0aXZlRnVuY3Rpb25OYW1lKTsKKyAg
ICAgICAgcHVzaChAaGFzaFZhbHVlMiwgMCk7CisgICAgICAgIHB1c2goQGhhc2hTcGVjaWFscywg
IkpTQzo6RnVuY3Rpb24iKTsKKworICAgICAgICAkaGFzaFNpemUrKzsKKyAgICB9CisKICAgICAk
b2JqZWN0LT5HZW5lcmF0ZUhhc2hUYWJsZSgkaGFzaE5hbWUsICRoYXNoU2l6ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcQGhhc2hLZXlzLCBcQGhhc2hTcGVjaWFscywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcQGhhc2hWYWx1ZTEsIFxAaGFzaFZhbHVlMiwKQEAg
LTMwNDcsNiArMzA2MiwxMCBAQCBFTkQKIAogICAgIH0KIAorICAgIGlmICgkaW50ZXJmYWNlLT5z
ZXJpYWxpemFibGUpIHsKKyAgICAgICAgR2VuZXJhdGVTZXJpYWxpemVyRnVuY3Rpb24oJGludGVy
ZmFjZSwgJGludGVyZmFjZU5hbWUsICRjbGFzc05hbWUsICRzZXJpYWxpemVyRnVuY3Rpb25OYW1l
LCAkc2VyaWFsaXplck5hdGl2ZUZ1bmN0aW9uTmFtZSk7CisgICAgfQorCiAgICAgaWYgKCRpbnRl
cmZhY2UtPml0ZXJhYmxlKSB7CiAgICAgICAgIEdlbmVyYXRlSW1wbGVtZW50YXRpb25JdGVyYWJs
ZUZ1bmN0aW9ucygkaW50ZXJmYWNlKTsKICAgICB9CkBAIC0zMjg0LDYgKzMzMDMsNDIgQEAgRU5E
CiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiNlbmRpZiAvLyAke2NvbmRpdGlvbmFsU3RyaW5n
fVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwogfQogCitzdWIgR2VuZXJhdGVTZXJpYWxpemVy
RnVuY3Rpb24KK3sKKyAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7CisgICAgbXkgJGludGVyZmFj
ZU5hbWUgPSBzaGlmdDsKKyAgICBteSAkY2xhc3NOYW1lID0gc2hpZnQ7CisgICAgbXkgJHNlcmlh
bGl6ZXJGdW5jdGlvbk5hbWUgPSBzaGlmdDsKKyAgICBteSAkc2VyaWFsaXplck5hdGl2ZUZ1bmN0
aW9uTmFtZSA9IHNoaWZ0OworCisgICAgQWRkVG9JbXBsSW5jbHVkZXMoIk9iamVjdENvbnN0cnVj
dG9yLmgiKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgJHtzZXJpYWxpemVyTmF0aXZlRnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIHN0YXRlKVxu
Iik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTtcbiIpOworICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8gY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8
SlMkaW50ZXJmYWNlTmFtZSo+KHRoaXNWYWx1ZSk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKVxuIik7CisgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCBcIiRpbnRl
cmZhY2VOYW1lXCIsIFwiJHNlcmlhbGl6ZXJGdW5jdGlvbk5hbWVcIik7XG4iKTsKKyAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMs
ICR7Y2xhc3NOYW1lfTo6aW5mbygpKTtcblxuIikgdW5sZXNzICRpbnRlcmZhY2VOYW1lIGVxICJF
dmVudFRhcmdldCI7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNPYmplY3QqIHJlc3Vs
dCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KHN0YXRlKTtcbiIpOworICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7XG4iKTsKKyAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTtcbiIpOworICAgIGZv
cmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSkgeworICAgICAg
ICBteSAkbmFtZSA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZTsKKyAgICAgICAgaWYgKGdy
ZXAgJF8gZXEgJG5hbWUsIEB7JGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5hdHRyaWJ1dGVzfSkg
eworICAgICAgICAgICAgbXkgJHR5cGUgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGU7Cisg
ICAgICAgICAgICBteSAkdGhpc09iamVjdCA9ICJjYXN0ZWRUaGlzIjsKKyAgICAgICAgICAgIG15
ICRmdW5jdGlvblN0cmluZyA9ICJpbXBsLiR7bmFtZX0oKSI7CisgICAgICAgICAgICBteSAkc2ln
bmF0dXJlID0gZG9tU2lnbmF0dXJlLT5uZXcoKTsKKyAgICAgICAgICAgICRzaWduYXR1cmUtPmV4
dGVuZGVkQXR0cmlidXRlcyh7fSk7CisgICAgICAgICAgICAkc2lnbmF0dXJlLT5pc051bGxhYmxl
KDEpOworICAgICAgICAgICAgJHNpZ25hdHVyZS0+dHlwZSgkdHlwZSk7CisgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sIFwiJHtuYW1lfVwiKSwgIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkc2lnbmF0
dXJlLCAxLCAkaW50ZXJmYWNlTmFtZSwgJGZ1bmN0aW9uU3RyaW5nLCAkdGhpc09iamVjdCkgLiAi
KTtcbiIpOworICAgICAgICB9CisgICAgfQorICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRl
bnQsICJ9XG5cbiIpOworfQorCiBzdWIgR2VuZXJhdGVGdW5jdGlvbkNhc3RlZFRoaXMKIHsKICAg
ICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvSURMUGFyc2VyLnBtCmluZGV4IGRiMTVmMTguLjZkNmVhNzggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtCkBAIC01Niw2ICs1Niw3IEBAIHN0cnVj
dCggZG9tSW50ZXJmYWNlID0+IHsKICAgICBpc0NhbGxiYWNrID0+ICckJywgIyBVc2VkIGZvciBj
YWxsYmFjayBpbnRlcmZhY2VzCiAgICAgaXNQYXJ0aWFsID0+ICckJywgIyBVc2VkIGZvciBwYXJ0
aWFsIGludGVyZmFjZXMKICAgICBpdGVyYWJsZSA9PiAnJCcsICMgVXNlZCBmb3IgaXRlcmFibGUg
aW50ZXJmYWNlcworICAgIHNlcmlhbGl6YWJsZSA9PiAnJCcsICMgVXNlZCBmb3Igc2VyaWFsaXph
YmxlIGludGVyZmFjZXMKIH0pOwogCiAjIFVzZWQgdG8gcmVwcmVzZW50IGRvbUludGVyZmFjZSBj
b250ZW50cyAobmFtZSBvZiBtZXRob2QsIHNpZ25hdHVyZSkKQEAgLTk0LDYgKzk1LDEwIEBAIHN0
cnVjdCggZG9tSXRlcmFibGUgPT4gewogICAgIGZ1bmN0aW9ucyA9PiAnQCcsICMgSXRlcmFibGUg
ZnVuY3Rpb25zIChlbnRyaWVzLCBrZXlzLCB2YWx1ZXMsIFtTeW1ib2wuSXRlcmF0b3JdLCBmb3JF
YWNoKQogfSk7CiAKKyMgVXNlZCB0byByZXByZXNlbnQgc2VyaWFsaXphYmxlIGludGVyZmFjZQor
c3RydWN0KCBkb21TZXJpYWxpemFibGUgPT4geworICAgIGF0dHJpYnV0ZXMgPT4gJ0AnLCAjIExp
c3Qgb2YgYXR0cmlidXRlcyB0byBzZXJpYWxpemUKK30pOwogCiAjIFVzZWQgdG8gcmVwcmVzZW50
IHN0cmluZyBjb25zdGFudHMKIHN0cnVjdCggZG9tQ29uc3RhbnQgPT4gewpAQCAtMTAwMSw3ICsx
MDA2LDE2IEBAIHN1YiBwYXJzZVNlcmlhbGl6ZXIKICAgICBteSAkbmV4dCA9ICRzZWxmLT5uZXh0
VG9rZW4oKTsKICAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgInNlcmlhbGl6ZXIiKSB7CiAgICAg
ICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAic2VyaWFsaXpl
ciIsIF9fTElORV9fKTsKLSAgICAgICAgcmV0dXJuICRzZWxmLT5wYXJzZVNlcmlhbGl6ZXJSZXN0
KCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOworICAgICAgICBteSAkbmV4dCA9ICRzZWxmLT5uZXh0
VG9rZW4oKTsKKyAgICAgICAgbXkgJG5ld0RhdGFOb2RlOworICAgICAgICBpZiAoJG5leHQtPnZh
bHVlKCkgbmUgIjsiKSB7CisgICAgICAgICAgICAkbmV3RGF0YU5vZGUgPSAkc2VsZi0+cGFyc2VT
ZXJpYWxpemVyUmVzdCgkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKKyAgICAgICAgICAgIG15ICRu
ZXh0ID0gJHNlbGYtPm5leHRUb2tlbigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
JG5ld0RhdGFOb2RlID0gZG9tU2VyaWFsaXphYmxlLT5uZXcoKTsKKyAgICAgICAgfQorICAgICAg
ICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIjsiLCBfX0xJTkVf
Xyk7CisgICAgICAgIHJldHVybiAkbmV3RGF0YU5vZGU7CiAgICAgfQogICAgICRzZWxmLT5hc3Nl
cnRVbmV4cGVjdGVkVG9rZW4oJG5leHQtPnZhbHVlKCksIF9fTElORV9fKTsKIH0KQEAgLTEwMTQs
NyArMTAyOCwxMCBAQCBzdWIgcGFyc2VTZXJpYWxpemVyUmVzdAogICAgIG15ICRuZXh0ID0gJHNl
bGYtPm5leHRUb2tlbigpOwogICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAiPSIpIHsKICAgICAg
ICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICI9IiwgX19MSU5F
X18pOwotICAgICAgICByZXR1cm4gJHNlbGYtPnBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm4oJGV4
dGVuZGVkQXR0cmlidXRlTGlzdCk7CisgICAgICAgIG15ICRhdHRyaWJ1dGVzID0gJHNlbGYtPnBh
cnNlU2VyaWFsaXphdGlvblBhdHRlcm4oKTsKKyAgICAgICAgbXkgJG5ld0RhdGFOb2RlID0gZG9t
U2VyaWFsaXphYmxlLT5uZXcoKTsKKyAgICAgICAgJG5ld0RhdGFOb2RlLT5hdHRyaWJ1dGVzKCRh
dHRyaWJ1dGVzKTsKKyAgICAgICAgcmV0dXJuICRuZXdEYXRhTm9kZTsKICAgICB9CiAgICAgaWYg
KCRuZXh0LT50eXBlKCkgPT0gSWRlbnRpZmllclRva2VuIHx8ICRuZXh0LT52YWx1ZSgpIGVxICIo
IikgewogICAgICAgICByZXR1cm4gJHNlbGYtPnBhcnNlT3BlcmF0aW9uUmVzdCgkZXh0ZW5kZWRB
dHRyaWJ1dGVMaXN0KTsKQEAgLTEwMjQsNTkgKzEwNDEsNDUgQEAgc3ViIHBhcnNlU2VyaWFsaXpl
clJlc3QKIHN1YiBwYXJzZVNlcmlhbGl6YXRpb25QYXR0ZXJuCiB7CiAgICAgbXkgJHNlbGYgPSBz
aGlmdDsKLSAgICBteSAkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0ID0gc2hpZnQ7CiAKICAgICBteSAk
bmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsKICAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgInsi
KSB7CiAgICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAi
eyIsIF9fTElORV9fKTsKLSAgICAgICAgJHNlbGYtPnBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm5N
YXAoKTsKKyAgICAgICAgbXkgJGF0dHJpYnV0ZXMgPSAkc2VsZi0+cGFyc2VTZXJpYWxpemF0aW9u
QXR0cmlidXRlcygpOwogICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0
VG9rZW4oKSwgIn0iLCBfX0xJTkVfXyk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IFxAeyRhdHRyaWJ1dGVzfTsKICAgICB9CiAgICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJbIikg
ewotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIlsi
LCBfX0xJTkVfXyk7Ci0gICAgICAgICRzZWxmLT5wYXJzZVNlcmlhbGl6YXRpb25QYXR0ZXJuTGlz
dCgpOwotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwg
Il0iLCBfX0xJTkVfXyk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgZGllICJTZXJpYWxpemF0
aW9uIG9mIGxpc3RzIHBhdHRlcm4gaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuIjsKICAgICB9
CiAgICAgaWYgKCRuZXh0LT50eXBlKCkgPT0gSWRlbnRpZmllclRva2VuKSB7Ci0gICAgICAgICRz
ZWxmLT5hc3NlcnRUb2tlblR5cGUoJHNlbGYtPmdldFRva2VuKCksIElkZW50aWZpZXJUb2tlbik7
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgbXkgQGF0dHJpYnV0ZXMgPSAoKTsKKyAgICAgICAg
bXkgJHRva2VuID0gJHNlbGYtPmdldFRva2VuKCk7CisgICAgICAgICRzZWxmLT5hc3NlcnRUb2tl
blR5cGUoJHRva2VuLCBJZGVudGlmaWVyVG9rZW4pOworICAgICAgICBwdXNoKEBhdHRyaWJ1dGVz
LCAkdG9rZW4tPnZhbHVlKCkpOworICAgICAgICByZXR1cm4gXEBhdHRyaWJ1dGVzOwogICAgIH0K
ICAgICAkc2VsZi0+YXNzZXJ0VW5leHBlY3RlZFRva2VuKCRuZXh0LT52YWx1ZSgpLCBfX0xJTkVf
Xyk7CiB9CiAKLXN1YiBwYXJzZVNlcmlhbGl6YXRpb25QYXR0ZXJuTWFwCitzdWIgcGFyc2VTZXJp
YWxpemF0aW9uQXR0cmlidXRlcwogewogICAgIG15ICRzZWxmID0gc2hpZnQ7Ci0gICAgbXkgJG5l
eHQgPSAkc2VsZi0+bmV4dFRva2VuKCk7Ci0gICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJnZXR0
ZXIiKSB7Ci0gICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigp
LCAiZ2V0dGVyIiwgX19MSU5FX18pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICgk
bmV4dC0+dmFsdWUoKSBlcSAiaW5oZXJpdCIpIHsKLSAgICAgICAgJHNlbGYtPmFzc2VydFRva2Vu
VmFsdWUoJHNlbGYtPmdldFRva2VuKCksICJpbmhlcml0IiwgX19MSU5FX18pOwotICAgICAgICAk
c2VsZi0+cGFyc2VJZGVudGlmaWVycygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlm
ICgkbmV4dC0+dHlwZSgpID09IElkZW50aWZpZXJUb2tlbikgewotICAgICAgICAkc2VsZi0+YXNz
ZXJ0VG9rZW5UeXBlKCRzZWxmLT5nZXRUb2tlbigpLCBJZGVudGlmaWVyVG9rZW4pOwotICAgICAg
ICAkc2VsZi0+cGFyc2VJZGVudGlmaWVycygpOwotICAgIH0KLX0KKyAgICBteSAkdG9rZW4gPSAk
c2VsZi0+Z2V0VG9rZW4oKTsKKworICAgIGlmICgkdG9rZW4tPnZhbHVlKCkgZXEgImdldHRlciIp
IHsKKyAgICAgICAgZGllICJTZXJpYWxpemVyIGdldHRlciBrZXl3b3JkIGlzIG5vdCBjdXJyZW50
bHkgc3VwcG9ydGVkLiI7CiAKLXN1YiBwYXJzZVNlcmlhbGl6YXRpb25QYXR0ZXJuTGlzdAotewot
ICAgIG15ICRzZWxmID0gc2hpZnQ7Ci0gICAgbXkgJG5leHQgPSAkc2VsZi0+bmV4dFRva2VuKCk7
Ci0gICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJnZXR0ZXIiKSB7Ci0gICAgICAgICRzZWxmLT5h
c3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiZ2V0dGVyIiwgX19MSU5FX18pOwot
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICgkbmV4dC0+dHlwZSgpID09IElkZW50aWZp
ZXJUb2tlbikgewotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5UeXBlKCRzZWxmLT5nZXRUb2tl
bigpLCBJZGVudGlmaWVyVG9rZW4pOwotICAgICAgICAkc2VsZi0+cGFyc2VJZGVudGlmaWVycygp
OworICAgIGlmICgkdG9rZW4tPnZhbHVlKCkgZXEgImluaGVyaXQiKSB7CisgICAgICAgIGRpZSAi
U2VyaWFsaXplciBpbmhlcml0IGtleXdvcmQgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuIjsK
ICAgICB9CisKKyAgICBteSBAYXR0cmlidXRlcyA9ICgpOworICAgICRzZWxmLT5hc3NlcnRUb2tl
blR5cGUoJHRva2VuLCBJZGVudGlmaWVyVG9rZW4pOworICAgIHB1c2goQGF0dHJpYnV0ZXMsICR0
b2tlbi0+dmFsdWUoKSk7CisgICAgcHVzaChAYXR0cmlidXRlcywgQHskc2VsZi0+cGFyc2VJZGVu
dGlmaWVycygpfSk7CisgICAgcmV0dXJuIFxAYXR0cmlidXRlczsKIH0KIAogc3ViIHBhcnNlSWRl
bnRpZmllckxpc3QKQEAgLTIyNTgsNiArMjI2MSwxOSBAQCBzdWIgYXBwbHlNZW1iZXJMaXN0CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBuZXh0OwogICAgICAgICB9CisgICAgICAgIGlmIChy
ZWYoJGl0ZW0pIGVxICJkb21TZXJpYWxpemFibGUiKSB7CisgICAgICAgICAgICAkaW50ZXJmYWNl
LT5zZXJpYWxpemFibGUoJGl0ZW0pOworICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmICgkaW50ZXJmYWNlLT5zZXJpYWxpemFibGUpIHsKKyAgICAgICAgbXkgJG51
bVNlcmlhbGl6ZXJBdHRyaWJ1dGVzID0gQHskaW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPmF0dHJp
YnV0ZXN9OworICAgICAgICBpZiAoJG51bVNlcmlhbGl6ZXJBdHRyaWJ1dGVzID09IDApIHsKKyAg
ICAgICAgICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVz
fSkgeworICAgICAgICAgICAgICAgIHB1c2goQHskaW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPmF0
dHJpYnV0ZXN9LCAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAKaW5kZXggNTUyZjcxNy4uMDNkYmI1MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROb2RlLmNwcApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUu
aCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9y
LmgiCisjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJVUkwuaCIKICNp
bmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU1N0cmluZy5oPgpA
QCAtNDAsNiArNDEsOCBAQCBib29sIHNldEpTVGVzdE5vZGVOYW1lKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZQogSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3ROb2RlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiBib29sIHNldEpTVGVzdE5vZGVDb25zdHJ1Y3Rv
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFs
dWUpOwogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVG
dW5jdGlvblRvSlNPTihFeGVjU3RhdGUqKTsKKwogY2xhc3MgSlNUZXN0Tm9kZVByb3RvdHlwZSA6
IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgogICAgIHR5cGVkZWYgSlND
OjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CkBAIC05NCw2ICs5Nyw3IEBAIHN0YXRpYyBjb25zdCBI
YXNoVGFibGVWYWx1ZSBKU1Rlc3ROb2RlUHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9CiB7CiAgICAg
eyAiY29uc3RydWN0b3IiLCBEb250RW51bSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRp
Y19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3ROb2RlQ29uc3RydWN0b3Ip
LCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihz
ZXRKU1Rlc3ROb2RlQ29uc3RydWN0b3IpIH0gfSwKICAgICB7ICJuYW1lIiwgQ3VzdG9tQWNjZXNz
b3IsIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6Okdl
dFZhbHVlRnVuYz4oanNUZXN0Tm9kZU5hbWUpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFBy
b3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3ROb2RlTmFtZSkgfSB9LAorICAgIHsg
InRvSlNPTiIsIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IEpTQzo6RnVuY3Rpb24sIE5vSW50cmlu
c2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0Tm9kZVBy
b3RvdHlwZUZ1bmN0aW9uVG9KU09OKSwgKGludHB0cl90KSAoMCkgfSB9LAogfTsKIAogY29uc3Qg
Q2xhc3NJbmZvIEpTVGVzdE5vZGVQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3ROb2RlUHJvdG90
eXBlIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3ROb2RlUHJv
dG90eXBlKSB9OwpAQCAtMTc4LDYgKzE4MiwyMiBAQCBKU1ZhbHVlIEpTVGVzdE5vZGU6OmdldENv
bnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAg
ICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0Tm9kZUNvbnN0cnVjdG9yPih2bSwgKmpz
Q2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOwogfQogCitFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNP
TihFeGVjU3RhdGUqIHN0YXRlKQoreworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRo
aXNWYWx1ZSgpOworICAgIGF1dG8gY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9k
ZSo+KHRoaXNWYWx1ZSk7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKKyAgICAgICAg
cmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0Tm9kZSIsICJ0b0pTT04iKTsK
KyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE5vZGU6Omlu
Zm8oKSk7CisKKyAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3Qoc3Rh
dGUpOworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCAibmFtZSIpLCBqc1N0cmluZ09yTnVsbChzdGF0ZSwgaW1wbC5uYW1lKCkp
KTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKwogdm9pZCBKU1Rl
c3ROb2RlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROb2RlKj4oY2VsbCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T2JqLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RP
YmouY3BwCmluZGV4IDViZmNmYWMuLjQwNTFlMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCkBAIC00Nyw2ICs0Nyw3
IEBACiAjaW5jbHVkZSAiSlNUZXN0U3ViT2JqLmgiCiAjaW5jbHVkZSAiSlNib29sLmgiCiAjaW5j
bHVkZSAiTGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZS5oIgorI2luY2x1ZGUgIk9iamVjdENvbnN0cnVj
dG9yLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNW
R0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiU1ZHUG9pbnQuaCIKQEAgLTM4Myw2ICszODQsOCBAQCBi
b29sIHNldEpTVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGUoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkVuY29kZWRKU1ZhbAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25z
dHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKIGJvb2wgc2V0SlNUZXN0T2JqQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIAorRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvSlNPTihFeGVjU3Rh
dGUqKTsKKwogY2xhc3MgSlNUZXN0T2JqUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5h
bE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFz
ZTsKQEAgLTc5NCw2ICs3OTcsNyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0
T2JqUHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9CiAgICAgeyAiQ09OU1RfVkFMVUVfMTQiLCBEb250
RGVsZXRlIHwgUmVhZE9ubHkgfCBDb25zdGFudEludGVnZXIsIE5vSW50cmluc2ljLCB7IChsb25n
IGxvbmcpKDB4MWFiYykgfSB9LAogICAgIHsgIkNPTlNUX0pBVkFTQ1JJUFQiLCBEb250RGVsZXRl
IHwgUmVhZE9ubHkgfCBDb25zdGFudEludGVnZXIsIE5vSW50cmluc2ljLCB7IChsb25nIGxvbmcp
KDE1KSB9IH0sCiAgICAgeyAicmVhZG9ubHkiLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBDb25z
dGFudEludGVnZXIsIE5vSW50cmluc2ljLCB7IChsb25nIGxvbmcpKDApIH0gfSwKKyAgICB7ICJ0
b0pTT04iLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNp
YywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uVG9KU09OKSwgKGludHB0cl90KSAoMCkgfSB9LAogfTsKIAogY29uc3QgQ2xh
c3NJbmZvIEpTVGVzdE9ialByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdE9iamVjdFByb3RvdHlw
ZSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0T2JqUHJvdG90
eXBlKSB9OwpAQCAtNTUwOSw2ICs1NTEzLDI1IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTmVlZHNMaWZlY3ljbGVQCiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAorRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvSlNPTihFeGVj
U3RhdGUqIHN0YXRlKQoreworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1
ZSgpOworICAgIGF1dG8gY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhp
c1ZhbHVlKTsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQorICAgICAgICByZXR1cm4g
dGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAidG9KU09OIik7CisgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CisK
KyAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3Qoc3RhdGUpOworICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnZtLCAicmVhZE9ubHlTdHJpbmdBdHRyIiksIGpzU3RyaW5nT3JOdWxsKHN0YXRlLCBpbXBsLnJl
YWRPbmx5U3RyaW5nQXR0cigpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnZtLCAiZW51bUF0dHIiKSwganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUs
IGltcGwuZW51bUF0dHIoKSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZ2bSwgImxvbmdBdHRyIiksIHRvTnVsbGFibGVKU051bWJlcihpbXBsLmxv
bmdBdHRyKCkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sICJjcmVhdGUiKSwganNCb29sZWFuKGltcGwuY3JlYXRlKCkpKTsKKworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKwogdXNpbmcgVGVzdE9iakl0ZXJhdG9y
ID0gSlNLZXlWYWx1ZUl0ZXJhdG9yPEpTVGVzdE9iaj47CiB1c2luZyBUZXN0T2JqSXRlcmF0b3JQ
cm90b3R5cGUgPSBKU0tleVZhbHVlSXRlcmF0b3JQcm90b3R5cGU8SlNUZXN0T2JqPjsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROb2RlLmlk
bCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Tm9kZS5pZGwKaW5k
ZXggZjM3OTVmMS4uMGYyMGQ0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Rlc3ROb2RlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVGVzdE5vZGUuaWRsCkBAIC0yMyw1ICsyMyw3IEBACiAgICAgRXhwb3J0TWFj
cm89V0VCQ09SRV9URVNUU1VQUE9SVF9FWFBPUlQsCiBdIGludGVyZmFjZSBUZXN0Tm9kZSA6IE5v
ZGUgewogICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKKworICAgIHNlcmlhbGl6ZXI7CiB9
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVz
dE9iai5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5p
ZGwKaW5kZXggZTYwNDI3OC4uYjJjMDYwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbApAQCAtMzU4LDYgKzM1OCw4IEBAIGVudW0gX29w
dGlvbmFsIHsgIiIsICJPcHRpb25hbFZhbHVlMSIsICJPcHRpb25hbFZhbHVlMiIsICJPcHRpb25h
bFZhbHVlMyIgfTsKICNpZiBkZWZpbmVkKFRFU1RJTkdfSlMpCiAgICAgW0ludm9rZXNDdXN0b21F
bGVtZW50TGlmZWN5Y2xlQ2FsbGJhY2tzXSB2b2lkIG1ldGhvZFdpdGhOZWVkc0xpZmVjeWNsZVBy
b2Nlc3NpbmdTdGFjaygpOwogI2VuZGlmCisKKyAgICBzZXJpYWxpemVyID0ge3JlYWRPbmx5U3Ry
aW5nQXR0ciwgY3JlYXRlLCBlbnVtQXR0ciwgbG9uZ0F0dHJ9OwogfTsKIAogLy8gVGhlIGZvbGxv
d2luZyBjb21tZW50IHNob3VsZCBub3QgZ2VuZXJhdGUgYW55IGNvZGUuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279653</attachid>
            <date>2016-05-24 08:41:38 -0700</date>
            <delta_ts>2016-05-24 08:59:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156293-20160524174243.patch</filename>
            <type>text/plain</type>
            <size>179253</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxMzI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGJhY2I0ZTZjZTM4OWE1
NDczZTA5NjIzN2Y4YmI2NjZhNWEwMzkxZC4uY2ZjZmE1MmI5N2YxYzRhM2QxM2I1YWQwMjMzMGI2
NDYwM2MzZGU4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg3IEBACisyMDE2LTA1LTI0ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIEFkZCBXZWJJREwg
c3BlY2lhbCBvcGVyYXRpb24gc3VwcG9ydDogc2VyaWFsaXplcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MjkzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgdGhlIHNlcmlhbGl6
ZXIgc3BlY2lhbCBvcGVyYXRpb24gZm9yIFdlYklETHMsCisgICAgICAgIGN1cnJlbnQgaW1wbGVt
ZW50YXRpb24gYWRkcyBzdXBwb3J0IGZvcjoKKyAgICAgICAgICAtIGp1c3QgdGhlIGtleXdvcmQ6
IHNlcmlhbGl6ZXI7IEl0IHdpbGwgcmV0dXJuIGFsbCB0aGUKKyAgICAgICAgICAgIGF0dHJpYnV0
ZXMgb2YgaW4gYW4gb2JqZWN0LgorICAgICAgICAgIC0gbWFwIG9mIGVudHJpZXMgd2l0aCB0aGUg
YXR0cmlidXRlczogc2VyaWFsaXplciA9IHthdHRyaWJ1dGUxLAorICAgICAgICAgICAgYXR0cmli
dXRlMiwgLi4ufQorCisgICAgICAgIEl0IGNyZWF0ZXMgYSB0b0pTT04gbWV0aG9kIHRoYXQgcmV0
dXJucyB0aGUgc2VyaWFsaXplZCB2YWx1ZQorICAgICAgICBjb252ZXJ0ZWQgaW50byBhbiBFQ01B
U2NyaXB0IHZhbHVlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBjaGVjayB0aGUKKyAgICAgICAgZGVm
aW5pdGlvbiBvZiB0aGUgb3BlcmF0aW9uOgorCisgICAgICAgIGh0dHA6Ly9oZXljYW0uZ2l0aHVi
LmlvL3dlYmlkbC8jaWRsLXNlcmlhbGl6ZXJzCisKKyAgICAgICAgV2UgaGF2ZSBtb2RpZmllZCBj
dXJyZW50IGNvZGUgdGhhdCBnZW5lcmF0ZXMgdGhlIGdldHRlciBmdW5jdGlvbgorICAgICAgICBm
b3IgYXR0cmlidXRlcyBpbiB0d28gcGFydHMgc28gdGhhdCB3ZSBjYW4gcmV1c2UgdGhlIHBhcnQK
KyAgICAgICAgZXh0cmFjdGluZyB0aGUgdmFsdWUgZm9yIHRoZSBzZXJpYWxpemVyLgorCisgICAg
ICAgIFVzZWQgdGhlIHN1cHBvcnQgdG8gYWRkIG5ldyBBUEkgZm9yIFJUQ0ljZUNhbmRpZGF0ZSBh
bmQKKyAgICAgICAgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLgorCisgICAgICAgIFVwZGF0ZWQgdGhl
IHRlc3RzIGV4cGVjdGF0aW9ucyBvZiB0aGUgYmluZGluZ3MuCisKKyAgICAgICAgVGVzdHM6IGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Tm9kZS5pZGwKKyAgICAgICAgICAgICAgIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAorICAgICAgICAgICAgICAgZmFzdC9tZWRpYXN0cmVh
bS9SVENJY2VDYW5kaWRhdGUuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9tZWRpYXN0cmVhbS9S
VENTZXNzaW9uRGVzY3JpcHRpb24uaHRtbAorCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVh
bS9SVENJY2VDYW5kaWRhdGUuaWRsOiBBZGRlZCB0aGUgc2VyaWFsaXplcgorICAgICAgICBvcGVy
YXRpb24uCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRp
b24uaWRsOiBBZGRlZCB0aGUKKyAgICAgICAgc2VyaWFsaXplciBvcGVyYXRpb24uCisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChnZXRHZXR0
ZXJGdW5jdGlvbkNhbGwpOiBBZGRlZCwgaXQgZ2VuZXJhdGVzIHRoZSBHZXR0ZXIgZnVuY3Rpb24K
KyAgICAgICAgY2FsbCBzdHJpbmcgYmFzZWQgb24gd2hhdCBwYXJhbWV0ZXJzIGl0IG5lZWRzLiBV
c2VkIGluIHRoZQorICAgICAgICBzZXJpYWxpemVyIGNvZGUgZ2VuZXJhdG9yLgorICAgICAgICAo
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6IFNwbGl0dGVkIHRoZSBjb2RlIG9mIHRoZSBhdHRyaWJ1
dGUKKyAgICAgICAgZ2V0dGVyIGluIHR3byBmdW5jdGlvbnMsIG9uZSBnZXR0aW5nIHRoZSB2YWx1
ZSBhbmQgdGhlIG90aGVyCisgICAgICAgIGhhbmRsaW5nIHRoZSBjYWxsIGZyb20gdGhlIEFQSS4g
VGhpcyB3YXkgd2UgY2FuIHJldXNlIHRoZSBjb2RlIGZvcgorICAgICAgICB0aGUgc2VyaWFsaXpl
ci4gVGhlIGJhc2ljIGlkZWEgaXMgdGhhdCB3ZSBoYXZlIGEgbmV3IGFycmF5IHdoZXJlCisgICAg
ICAgIHdlIHN0b3JlIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLCBuYW1lbHkgZ2V0dGVyRnVuY3Rp
b25Db250ZW50LgorICAgICAgICBCYXNlZCBvbiB0aGUgY29udGVudHMgb2YgdGhlIGZ1bmN0aW9u
IHdlIGJ1aWxkIHRoZSBsaXN0IG9mCisgICAgICAgIHBhcmFtZXRlcnMgb2YgdGhlIEdldHRlciBm
dW5jdGlvbi4gQWZ0ZXIgdGhhdCB3ZSBhZGQgdG8gdGhlIGZpbGUKKyAgICAgICAgY29udGVudHMg
dGhlIGZ1bmN0aW9uIHByb3RvdHlwZSBhbmQgdGhlIGdlbmVyYXRlZCBmdW5jdGlvbiBmb3IgdGhl
CisgICAgICAgIEdldHRlci4gTGF0ZXIgd2UgZ2VuZXJhdGUgdGhlIGZ1bmN0aW9uIGhhbmRsaW5n
IHRoZSBBUEkgY2FsbCB0aGF0CisgICAgICAgIHVzZXMgdGhlIEdldHRlciBmdW5jdGlvbi4gQWxz
byBBZGRlZCB0aGUgY2FsbHMgdG8gdGhlIHNlcmlhbGl6ZXIKKyAgICAgICAgY29kZSBnZW5lcmF0
b3IuCisgICAgICAgIChHZW5lcmF0ZVNlcmlhbGl6ZXJGdW5jdGlvbik6IEFkZGVkLCBnZW5lcmF0
ZXMgdGhlIHRvSlNPTiBmdW5jdGlvbgorICAgICAgICBhZGRpbmcgYWxsIHRoZSBzZXJpYWxpemFi
bGUtPmF0dHJpYnV0ZXMgdmFsdWUgdG8gYW4gb2JqZWN0IGFzCisgICAgICAgIGRlZmluZWQgaW4g
dGhlIHNwZWMuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG06IE1vZGlm
aWVkIHRoZSBzZXJpYWxpemVyIHBhcnNlcgorICAgICAgICB0aGF0IHdhcyB1bnVzZWQgdG8gc3Vw
cG9ydCB0aGUgV2ViSURMIHNwZWMgcGFydHMuIEFkZGVkIGEgbmV3CisgICAgICAgIGRvbVNlcmlh
bGl6YWJsZSB0eXBlIHRvIHN0b3JlIHRoZSBsaXN0IG9mIGF0dHJpYnV0ZXMgaW4gdGhlCisgICAg
ICAgIHBvc3NpYmxlIG1hcC4KKyAgICAgICAgKHBhcnNlU2VyaWFsaXplcik6IE1vZGlmaWVkIHRo
ZSBmdW5jdGlvbiB0byBmb2xsb3cgdGhlCisgICAgICAgIHNlbWljb2xvbiBydWxlIGluIHRoZSBz
cGVjLCBub3cgdGhlIHNlcmlhbGl6ZXIgbGluZSBtdXN0IGhhdmUgYQorICAgICAgICBzZW1pY29s
b24gbGlrZSBhbnkgb3RoZXIgbGluZS4KKyAgICAgICAgKHBhcnNlU2VyaWFsaXplclJlc3QpOiBU
aGUgZnVuY3Rpb24gbm93IGhhcyB0byBnZXQgdGhlIGF0dHJpYnV0ZXMKKyAgICAgICAgbGlzdCBm
cm9tIHRoZSBwYXR0ZXJuIHBhcnNpbmcgZnVuY3Rpb24gYW5kIGFkZCB0aGVtIHRvIHRoZQorICAg
ICAgICBkb21TZXJpYWxpemFibGUgaXRlbS4KKyAgICAgICAgKHBhcnNlU2VyaWFsaXphdGlvblBh
dHRlcm4pOiBOb3cgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBsaXN0IG9mCisgICAgICAgIGF0
dHJpYnV0ZXMgaW4gdGhlIHNlcmlhbGl6YWJsZSBtYXAgb3IgbGlzdCBpZiB3ZSBoYXZlIG9uZS4K
KyAgICAgICAgKHBhcnNlU2VyaWFsaXphdGlvbkF0dHJpYnV0ZXMpOiBBZGRlZCwgdGhpcyBmdW5j
dGlvbiByZXBsYWNlcyB0aGUKKyAgICAgICAgTWFwIGFuZCBMaXN0IGZ1bmN0aW9ucywgdGhlIGN1
cnJlbnRseSBzdXBwb3J0ZWQgcGFydHMgYXJlIHNpbWlsYXIKKyAgICAgICAgZm9yIGJvdGggc2l0
dWF0aW9ucy4KKyAgICAgICAgKGFwcGx5TWVtYmVyTGlzdCk6IEFkZGVkIHRoZSBzZXJpYWxpemFi
bGUgaXRlbSB0byB0aGUgaW50ZXJmYWNlCisgICAgICAgIHZhcmlhYmxlIGFuZCBwb3B1bGF0ZSB0
aGUgc2VyaWFsaXphYmxlIGluIGNhc2UgdGhlcmUgaXMgbm90IGEKKyAgICAgICAgZGVmaW5lZCBt
YXAuCisgICAgICAgIChwYXJzZVNlcmlhbGl6YXRpb25QYXR0ZXJuTWFwKTogUmVwbGFjZWQgd2l0
aAorICAgICAgICBwYXJzZVNlcmlhbGl6YXRpb25BdHRyaWJ1dGVzLgorICAgICAgICAocGFyc2VT
ZXJpYWxpemF0aW9uUGF0dGVybkxpc3QpOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHA6IE1vZGlmaWVkIHRoZSBleHBlY3RlZCByZXN1bHQu
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04pOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOiBNb2RpZmll
ZCB0aGUgZXhwZWN0ZWQgcmVzdWx0LgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25Ub0pTT04pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0
Tm9kZS5pZGw6IEFkZGVkIHRoZSBzZXJpYWxpemVyIHRlc3QuCisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsOiBBZGRlZCBzZXJpYWxpemVyIG1hcCB0ZXN0LgorCiAy
MDE2LTA1LTI0ICBNYW51ZWwgUmVnbyBDYXNhc25vdmFzICA8cmVnb0BpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFtjc3MtZ3JpZF0gRml4IGJlaGF2aW9yIG9mIGZsZXhpYmxlIHRyYWNrIGJyZWFkdGhz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNh
bmRpZGF0ZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNh
bmRpZGF0ZS5pZGwKaW5kZXggYzU3ODk2NjUxZTZhNjE0MjBlYzRhYmQyYjJlYTYzM2NlYTAwYWU0
MC4uZTE0Nzg2MDZkMThkNzkzMjc1N2JjZmVjMTIwZDVjYzcyMTE3ZDc5MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaWRsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmlk
bApAQCAtMzcsNSArMzcsNyBAQAogICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgY2FuZGlkYXRlOwog
ICAgIGF0dHJpYnV0ZSBET01TdHJpbmc/IHNkcE1pZDsKICAgICBhdHRyaWJ1dGUgdW5zaWduZWQg
c2hvcnQ/IHNkcE1MaW5lSW5kZXg7CisKKyAgICBzZXJpYWxpemVyID0ge2NhbmRpZGF0ZSwgc2Rw
TWlkLCBzZHBNTGluZUluZGV4fTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmlkbCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmlkbAppbmRleCAy
MzQ1NWY3MDQwNzI4ZTFiYWNlYWZlMjFhOGNhZThiOGE1MTQwNWVmLi4xZDY0MzUwMmUzZmFiMjNi
NmRjM2I3NTBjZTJiNTFkMjUyNDIwMzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5pZGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24uaWRsCkBAIC0z
Niw1ICszNiw3IEBACiBdIGludGVyZmFjZSBSVENTZXNzaW9uRGVzY3JpcHRpb24gewogICAgIFtT
ZXR0ZXJSYWlzZXNFeGNlcHRpb25dIGF0dHJpYnV0ZSBET01TdHJpbmcgdHlwZTsKICAgICBhdHRy
aWJ1dGUgRE9NU3RyaW5nIHNkcDsKKworICAgIHNlcmlhbGl6ZXIgPSB7dHlwZSwgc2RwfTsKIH07
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG0KaW5kZXggMjMzNmYxMmYxOTIwZmY1MzU0YmRiYzUxOTZkMjgyMWY4MDNmOWQ3Zi4uOTNl
ODE4NGQyZmE5N2M5MDgyMDE0ZmY3OTIyZDkxZWQ0NjU0M2Y2NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KQEAgLTE5ODQsNiAr
MTk4NCwzMCBAQCBzdWIgR2V0SW5kZXhlZEdldHRlckV4cHJlc3Npb24KICAgICByZXR1cm4gInRv
SlMoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCB0aGlzT2JqZWN0LT53cmFwcGVk
KCkuaXRlbShpbmRleCkpIjsKIH0KIAorc3ViIEdldEdldHRlckZ1bmN0aW9uQ2FsbAoreworICAg
IG15ICgkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkYXR0cmlidXRlKSA9IEBfOworCisgICAgbXkg
JGdldEZ1bmN0aW9uTmFtZSA9IEdldEF0dHJpYnV0ZUdldHRlck5hbWUoJGludGVyZmFjZSwgJGNs
YXNzTmFtZSwgJGF0dHJpYnV0ZSk7CisgICAgbXkgJHJlcXVpcmVzU3RhdGVQYXJhbWV0ZXIgPSBn
cmVwKC8ke2dldEZ1bmN0aW9uTmFtZX1HZXR0ZXJcKEV4ZWNTdGF0ZS8sIEBpbXBsQ29udGVudCk7
CisgICAgbXkgJHJlcXVpcmVzQ2FzdGVkVGhpc1BhcmFtZXRlciA9IGdyZXAoLyR7Z2V0RnVuY3Rp
b25OYW1lfUdldHRlclwoLipjYXN0ZWRUaGlzXCkvLCBAaW1wbENvbnRlbnQpOworICAgIG15ICRn
ZXRGdW5jdGlvbk5hbWVXaXRoUGFyYW1ldGVycyA9ICIke2dldEZ1bmN0aW9uTmFtZX1HZXR0ZXIo
IjsKKyAgICBpZiAoJHJlcXVpcmVzU3RhdGVQYXJhbWV0ZXIpIHsKKyAgICAgICAgJGdldEZ1bmN0
aW9uTmFtZVdpdGhQYXJhbWV0ZXJzIC49ICJzdGF0ZSI7CisgICAgICAgIGlmICgkcmVxdWlyZXND
YXN0ZWRUaGlzUGFyYW1ldGVyKSB7CisgICAgICAgICAgICAkZ2V0RnVuY3Rpb25OYW1lV2l0aFBh
cmFtZXRlcnMgLj0gIiwgY2FzdGVkVGhpcykiOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgaWYgKCRyZXF1aXJlc0Nhc3RlZFRoaXNQYXJhbWV0ZXIpIHsKKyAgICAgICAgICAgICRn
ZXRGdW5jdGlvbk5hbWVXaXRoUGFyYW1ldGVycyAuPSAiY2FzdGVkVGhpcykiOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgJGdldEZ1bmN0aW9uTmFtZVdpdGhQYXJhbWV0ZXJzIC49ICIp
IjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAkZ2V0RnVuY3Rpb25OYW1lV2l0aFBh
cmFtZXRlcnM7Cit9CisKIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiB7CiAgICAgbXkgKCRv
YmplY3QsICRpbnRlcmZhY2UsICRlbnVtZXJhdGlvbnMsICRkaWN0aW9uYXJpZXMpID0gQF87CkBA
IC0xOTk4LDYgKzIwMjIsOCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIG15ICR2
aXNpYmxlSW50ZXJmYWNlTmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRWaXNpYmxlSW50ZXJmYWNl
TmFtZSgkaW50ZXJmYWNlKTsKICAgICBteSAkZXZlbnRUYXJnZXQgPSAkY29kZUdlbmVyYXRvci0+
SW5oZXJpdHNJbnRlcmZhY2UoJGludGVyZmFjZSwgIkV2ZW50VGFyZ2V0IikgJiYgJGludGVyZmFj
ZS0+bmFtZSBuZSAiRXZlbnRUYXJnZXQiOwogICAgIG15ICRuZWVkc1Zpc2l0Q2hpbGRyZW4gPSBJ
bnN0YW5jZU5lZWRzVmlzaXRDaGlsZHJlbigkaW50ZXJmYWNlKTsKKyAgICBteSAkc2VyaWFsaXpl
ckZ1bmN0aW9uTmFtZSA9ICJ0b0pTT04iOworICAgIG15ICRzZXJpYWxpemVyTmF0aXZlRnVuY3Rp
b25OYW1lID0gJGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGNsYXNzTmFtZSkgLiAiUHJvdG90
eXBlRnVuY3Rpb24iIC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJHNlcmlhbGl6ZXJGdW5j
dGlvbk5hbWUpOwogCiAgICAgbXkgJG5hbWVkR2V0dGVyRnVuY3Rpb24gPSBHZXROYW1lZEdldHRl
ckZ1bmN0aW9uKCRpbnRlcmZhY2UpOwogICAgIG15ICRpbmRleGVkR2V0dGVyRnVuY3Rpb24gPSBH
ZXRJbmRleGVkR2V0dGVyRnVuY3Rpb24oJGludGVyZmFjZSk7CkBAIC0yMDg3LDYgKzIxMTMsMTAg
QEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJcbiIpOwogICAgIH0KIAorICAgIGlmICgkaW50ZXJmYWNlLT5zZXJpYWxpemFibGUpIHsKKyAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7
c2VyaWFsaXplck5hdGl2ZUZ1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKik7XG5cbiIpOworICAgIH0K
KwogICAgIEdlbmVyYXRlUHJvdG90eXBlRGVjbGFyYXRpb24oXEBpbXBsQ29udGVudCwgJGNsYXNz
TmFtZSwgJGludGVyZmFjZSkgaWYgIUhlYWRlck5lZWRzUHJvdG90eXBlRGVjbGFyYXRpb24oJGlu
dGVyZmFjZSk7CiAKICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVjbGFyYXRpb24oXEBpbXBsQ29u
dGVudCwgJGNsYXNzTmFtZSwgJGludGVyZmFjZSkgaWYgTmVlZHNDb25zdHJ1Y3RvclByb3BlcnR5
KCRpbnRlcmZhY2UpOwpAQCAtMjI0NSw2ICsyMjc1LDE1IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVu
dGF0aW9uCiAKICAgICBteSAkanVzdEdlbmVyYXRlVmFsdWVBcnJheSA9ICFJc0RPTUdsb2JhbE9i
amVjdCgkaW50ZXJmYWNlKTsKIAorICAgIGlmICgkaW50ZXJmYWNlLT5zZXJpYWxpemFibGUpIHsK
KyAgICAgICAgcHVzaChAaGFzaEtleXMsICRzZXJpYWxpemVyRnVuY3Rpb25OYW1lKTsKKyAgICAg
ICAgcHVzaChAaGFzaFZhbHVlMSwgJHNlcmlhbGl6ZXJOYXRpdmVGdW5jdGlvbk5hbWUpOworICAg
ICAgICBwdXNoKEBoYXNoVmFsdWUyLCAwKTsKKyAgICAgICAgcHVzaChAaGFzaFNwZWNpYWxzLCAi
SlNDOjpGdW5jdGlvbiIpOworCisgICAgICAgICRoYXNoU2l6ZSsrOworICAgIH0KKwogICAgICRv
YmplY3QtPkdlbmVyYXRlSGFzaFRhYmxlKCRoYXNoTmFtZSwgJGhhc2hTaXplLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFxAaGFzaEtleXMsIFxAaGFzaFNwZWNpYWxzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFxAaGFzaFZhbHVlMSwgXEBoYXNoVmFsdWUyLApAQCAt
MjUzOCw0OCArMjU3NywxNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAg
ICAgbXkgJGF0dHJpYnV0ZUNvbmRpdGlvbmFsU3RyaW5nID0gJGNvZGVHZW5lcmF0b3ItPkdlbmVy
YXRlQ29uZGl0aW9uYWxTdHJpbmcoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlKTsKICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiI2lmICR7YXR0cmlidXRlQ29uZGl0aW9uYWxTdHJpbmd9XG4i
KSBpZiAkYXR0cmlidXRlQ29uZGl0aW9uYWxTdHJpbmc7CiAKLSAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiRW5jb2RlZEpTVmFsdWUgJHtnZXRGdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCog
c2xvdEJhc2UpXG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7Cisg
ICAgICAgICAgICBteSBAZ2V0dGVyRnVuY3Rpb25Db250ZW50ID0gKCk7CiAKLSAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7XG4iKTsKLSAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpO1xu
Iik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBVTlVTRURfUEFSQU0oc2xv
dEJhc2UpO1xuIik7Ci0KLSAgICAgICAgICAgIGlmICghJGF0dHJpYnV0ZS0+aXNTdGF0aWMgfHwg
JGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlID1+IC9Db25zdHJ1Y3RvciQvKSB7Ci0gICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSBkZWNvZGVkVGhpc1ZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSk7XG4iKTsKLSAgICAgICAgICAgICAgICBteSAk
Y2FzdGluZ0Z1bmN0aW9uID0gJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3Rv
bVByb3h5VG9KU09iamVjdCJ9ID8gInRvJHtjbGFzc05hbWV9IiA6IEdldENhc3RpbmdIZWxwZXJG
b3JUaGlzT2JqZWN0KCRpbnRlcmZhY2UpOwotICAgICAgICAgICAgICAgICMgaHR0cDovL2hleWNh
bS5naXRodWIuaW8vd2ViaWRsLyNJbXBsaWNpdFRoaXMKLSAgICAgICAgICAgICAgICBpZiAoJGlu
dGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxpY2l0VGhpcyJ9KSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBk
ZWNvZGVkVGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkgPyAkY2FzdGluZ0Z1bmN0aW9uKHN0
YXRlLT50aGlzVmFsdWUoKS50b1RoaXMoc3RhdGUsIE5vdFN0cmljdE1vZGUpKSA6ICRjYXN0aW5n
RnVuY3Rpb24oZGVjb2RlZFRoaXNWYWx1ZSk7XG4iKTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiBjYXN0
ZWRUaGlzID0gJGNhc3RpbmdGdW5jdGlvbihkZWNvZGVkVGhpc1ZhbHVlKTtcbiIpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7XG4iKTsKLSAgICAgICAgICAgICAgICBpZiAoJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTGVuaWVudFRoaXMifSkgewot
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOwotICAgICAgICAgICAgICAgIH0gZWxz
aWYgKEludGVyZmFjZVJlcXVpcmVzQXR0cmlidXRlc09uSW5zdGFuY2VGb3JDb21wYXRpYmlsaXR5
KCRpbnRlcmZhY2UpKSB7Ci0gICAgICAgICAgICAgICAgICAgICMgRmFsbGJhY2sgdG8gdHJ5aW5n
IHRvIHNlYXJjaGluZyB0aGUgcHJvdG90eXBlIGNoYWluIGZvciBjb21wYXRpYmlsaXR5IHJlYXNv
bnMuCi0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBKU09i
amVjdCogdGhpc09iamVjdCA9IEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpLmdldE9iamVjdCgp
O1xuIik7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBm
b3IgKHRoaXNPYmplY3QgPSB0aGlzT2JqZWN0ID8gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGly
ZWN0KCkuZ2V0T2JqZWN0KCkgOiBudWxscHRyOyB0aGlzT2JqZWN0OyB0aGlzT2JqZWN0ID0gdGhp
c09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KCkuZ2V0T2JqZWN0KCkpIHtcbiIpOwotICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIGlmICgoY2FzdGVk
VGhpcyA9ICIgLiBHZXRDYXN0aW5nSGVscGVyRm9yVGhpc09iamVjdCgkaW50ZXJmYWNlKSAuICIo
dGhpc09iamVjdCkpKVxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICAgICAgICAgICAgIGJyZWFrO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICAgICB9XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgICAgIGlmICghY2FzdGVkVGhpcylcbiIpOwotICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIHJldHVybiB0aHJvd0dldHRl
clR5cGVFcnJvcigqc3RhdGUsIFwiJGludGVyZmFjZU5hbWVcIiwgXCIkbmFtZVwiKTtcbiIpOwot
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmVwb3J0RGVw
cmVjYXRlZEdldHRlckVycm9yKCpzdGF0ZSwgXCIkaW50ZXJmYWNlTmFtZVwiLCBcIiRuYW1lXCIp
O1xuIik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3Rh
dGUsIFwiJGludGVyZmFjZU5hbWVcIiwgXCIkbmFtZVwiKTtcbiIpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHB1c2goQGdldHRlckZ1bmN0aW9uQ29udGVudCwgIntcbiIp
OwogCiAgICAgICAgICAgICBteSBAYXJndW1lbnRzID0gKCk7CiAgICAgICAgICAgICBpZiAoJGdl
dHRlckV4Y2VwdGlvbnMgJiYgIUhhc0N1c3RvbUdldHRlcigkYXR0cmlidXRlLT5zaWduYXR1cmUt
PmV4dGVuZGVkQXR0cmlidXRlcykpIHsKICAgICAgICAgICAgICAgICBwdXNoKEBhcmd1bWVudHMs
ICJlYyIpOwogICAgICAgICAgICAgICAgIGlmICgkZ2V0dGVyRXhjZXB0aW9uc1dpdGhNZXNzYWdl
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEV4Y2VwdGlv
bkNvZGVXaXRoTWVzc2FnZSBlYztcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBnZXR0
ZXJGdW5jdGlvbkNvbnRlbnQsICIgICAgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlIGVjO1xuIik7
CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7XG4iKTsKKyAgICAgICAgICAgICAg
ICAgICAgcHVzaChAZ2V0dGVyRnVuY3Rpb25Db250ZW50LCAiICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwO1xuIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCkBAIC0yNTg5LDEx
ICsyNTk3LDExIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAg
ICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJGcmFtZS5oIik7CiAgICAgICAgICAgICAgICAgICAgIEFk
ZFRvSW1wbEluY2x1ZGVzKCJTZXR0aW5ncy5oIik7CiAgICAgICAgICAgICAgICAgICAgIG15ICRl
bmFibGVfZnVuY3Rpb24gPSBUb01ldGhvZE5hbWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiRW5hYmxlZEJ5U2V0dGluZyJ9KSAuICJFbmFibGVkIjsKLSAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzLT53cmFwcGVkKCkuZnJhbWUoKSkpXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
U2V0dGluZ3MmIHNldHRpbmdzID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpLmZyYW1lKCktPnNldHRp
bmdzKCk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
aWYgKCFzZXR0aW5ncy4kZW5hYmxlX2Z1bmN0aW9uKCkpXG4iKTsKLSAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAZ2V0dGVyRnVuY3Rp
b25Db250ZW50LCAiICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcy0+d3JhcHBlZCgpLmZyYW1l
KCkpKVxuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGdldHRlckZ1bmN0aW9uQ29udGVu
dCwgIiAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7XG4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgcHVzaChAZ2V0dGVyRnVuY3Rpb25Db250ZW50LCAiICAgIFNldHRpbmdzJiBzZXR0aW5ncyA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKS5mcmFtZSgpLT5zZXR0aW5ncygpO1xuIik7CisgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGdldHRlckZ1bmN0aW9uQ29udGVudCwgIiAgICBpZiAoIXNldHRp
bmdzLiRlbmFibGVfZnVuY3Rpb24oKSlcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBn
ZXR0ZXJGdW5jdGlvbkNvbnRlbnQsICIgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpO1xuIik7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCkBAIC0yNjA0LDggKzI2MTIsOCBA
QCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDaGVja1NlY3VyaXR5In0gJiYKICAgICAgICAgICAgICAg
ICAhJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRG9Ob3RDaGVj
a1NlY3VyaXR5In0gJiYKICAgICAgICAgICAgICAgICAhJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiRG9Ob3RDaGVja1NlY3VyaXR5T25HZXR0ZXIifSkgewotICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghQmluZGluZ1NlY3VyaXR5
OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KHN0YXRlLCBjYXN0ZWRUaGlzLT53cmFwcGVk
KCkpKVxuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKKyAgICAgICAgICAgICAg
ICBwdXNoKEBnZXR0ZXJGdW5jdGlvbkNvbnRlbnQsICIgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6
OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coc3RhdGUsIGNhc3RlZFRoaXMtPndyYXBwZWQo
KSkpXG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBnZXR0ZXJGdW5jdGlvbkNvbnRlbnQsICIg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpO1xuIik7CiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIGlmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJO
b25kZXRlcm1pbmlzdGljIn0pIHsKQEAgLTI2MTMsNDggKzI2MjEsNDggQEAgc3ViIEdlbmVyYXRl
SW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPHJlcGxh
eS9JbnB1dEN1cnNvci5oPiIsICJXRUJfUkVQTEFZIik7CiAgICAgICAgICAgICAgICAgQWRkVG9J
bXBsSW5jbHVkZXMoIjx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4iLCAiV0VCX1JFUExBWSIpOwogCi0g
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIjaWYgRU5BQkxFKFdFQl9SRVBMQVkp
XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKTtcbiIpOwot
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIElucHV0Q3Vyc29yJiBjdXJz
b3IgPSBnbG9iYWxPYmplY3QtPmlucHV0Q3Vyc29yKCk7XG4iKTsKKyAgICAgICAgICAgICAgICBw
dXNoKEBnZXR0ZXJGdW5jdGlvbkNvbnRlbnQsICIjaWYgRU5BQkxFKFdFQl9SRVBMQVkpXG4iKTsK
KyAgICAgICAgICAgICAgICBwdXNoKEBnZXR0ZXJGdW5jdGlvbkNvbnRlbnQsICIgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7XG4i
KTsKKyAgICAgICAgICAgICAgICBwdXNoKEBnZXR0ZXJGdW5jdGlvbkNvbnRlbnQsICIgICAgSW5w
dXRDdXJzb3ImIGN1cnNvciA9IGdsb2JhbE9iamVjdC0+aW5wdXRDdXJzb3IoKTtcbiIpOwogCiAg
ICAgICAgICAgICAgICAgbXkgJG5hdGl2ZVR5cGUgPSBHZXROYXRpdmVUeXBlKCRpbnRlcmZhY2Us
ICR0eXBlKTsKICAgICAgICAgICAgICAgICBteSAkbWVtb2l6ZWRUeXBlID0gR2V0TmF0aXZlVHlw
ZUZvck1lbW9pemF0aW9uKCRpbnRlcmZhY2UsICR0eXBlKTsKICAgICAgICAgICAgICAgICBteSAk
ZXhjZXB0aW9uQ29kZSA9ICRnZXR0ZXJFeGNlcHRpb25zV2l0aE1lc3NhZ2UgPyAiZWMuY29kZSIg
OiAoJGdldHRlckV4Y2VwdGlvbnMgPyAiZWMiIDogIjAiKTsKLSAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbWljU3Ry
aW5nPiBiaW5kaW5nTmFtZShcIiRpbnRlcmZhY2VOYW1lLiRuYW1lXCIsIEF0b21pY1N0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgaWYgKGN1cnNvci5pc0NhcHR1cmluZygpKSB7XG4iKTsKLSAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgJG1lbW9pemVkVHlwZSBtZW1vaXplZFJl
c3VsdCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKS4kaW1wbEdldHRlckZ1bmN0aW9uTmFtZSgiIC4g
am9pbigiLCAiLCBAYXJndW1lbnRzKSAuICIpO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgICAgIGN1cnNvci5hcHBlbmRJbnB1dDxNZW1vaXplZERPTVJlc3Vs
dDwkbWVtb2l6ZWRUeXBlPj4oYmluZGluZ05hbWUuZ2V0KCkuc3RyaW5nKCksIG1lbW9pemVkUmVz
dWx0LCAkZXhjZXB0aW9uQ29kZSk7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRy
aWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgIm1lbW9pemVkUmVzdWx0IiwgImNhc3Rl
ZFRoaXMiKSAuICI7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7XG4iKSBpZiAkZ2V0dGVyRXhjZXB0aW9u
czsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgfVxuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJc
biIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChjdXJzb3Iu
aXNSZXBsYXlpbmcoKSkge1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgICAgICRtZW1vaXplZFR5cGUgbWVtb2l6ZWRSZXN1bHQ7XG4iKTsKLSAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgTWVtb2l6ZWRET01SZXN1bHRCYXNlKiBp
bnB1dCA9IGN1cnNvci5mZXRjaElucHV0PE1lbW9pemVkRE9NUmVzdWx0QmFzZT4oKTtcbiIpOwot
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBpZiAoaW5wdXQgJiYg
aW5wdXQtPmNvbnZlcnRUbzwkbWVtb2l6ZWRUeXBlPihtZW1vaXplZFJlc3VsdCkpIHtcbiIpOwor
ICAgICAgICAgICAgICAgIHB1c2goQGdldHRlckZ1bmN0aW9uQ29udGVudCwgIiAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbWljU3RyaW5nPiBiaW5kaW5nTmFtZShcIiRpbnRlcmZh
Y2VOYW1lLiRuYW1lXCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpO1xuIik7
CisgICAgICAgICAgICAgICAgcHVzaChAZ2V0dGVyRnVuY3Rpb25Db250ZW50LCAiICAgIGlmIChj
dXJzb3IuaXNDYXB0dXJpbmcoKSkge1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAZ2V0dGVy
RnVuY3Rpb25Db250ZW50LCAiICAgICAgICAkbWVtb2l6ZWRUeXBlIG1lbW9pemVkUmVzdWx0ID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpLiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCIgLiBqb2luKCIs
ICIsIEBhcmd1bWVudHMpIC4gIik7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBnZXR0ZXJG
dW5jdGlvbkNvbnRlbnQsICIgICAgICAgIGN1cnNvci5hcHBlbmRJbnB1dDxNZW1vaXplZERPTVJl
c3VsdDwkbWVtb2l6ZWRUeXBlPj4oYmluZGluZ05hbWUuZ2V0KCkuc3RyaW5nKCksIG1lbW9pemVk
UmVzdWx0LCAkZXhjZXB0aW9uQ29kZSk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBnZXR0
ZXJGdW5jdGlvbkNvbnRlbnQsICIgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2ZVRv
SlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRlcmZhY2UsICJtZW1vaXplZFJl
c3VsdCIsICJjYXN0ZWRUaGlzIikgLiAiO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAZ2V0
dGVyRnVuY3Rpb25Db250ZW50LCAiICAgICAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTtc
biIpIGlmICRnZXR0ZXJFeGNlcHRpb25zOworICAgICAgICAgICAgICAgIHB1c2goQGdldHRlckZ1
bmN0aW9uQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiIpOworICAgICAgICAgICAg
ICAgIHB1c2goQGdldHRlckZ1bmN0aW9uQ29udGVudCwgIiAgICB9XG4iKTsKKyAgICAgICAgICAg
ICAgICBwdXNoKEBnZXR0ZXJGdW5jdGlvbkNvbnRlbnQsICJcbiIpOworICAgICAgICAgICAgICAg
IHB1c2goQGdldHRlckZ1bmN0aW9uQ29udGVudCwgIiAgICBpZiAoY3Vyc29yLmlzUmVwbGF5aW5n
KCkpIHtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGdldHRlckZ1bmN0aW9uQ29udGVudCwg
IiAgICAgICAgJG1lbW9pemVkVHlwZSBtZW1vaXplZFJlc3VsdDtcbiIpOworICAgICAgICAgICAg
ICAgIHB1c2goQGdldHRlckZ1bmN0aW9uQ29udGVudCwgIiAgICAgICAgTWVtb2l6ZWRET01SZXN1
bHRCYXNlKiBpbnB1dCA9IGN1cnNvci5mZXRjaElucHV0PE1lbW9pemVkRE9NUmVzdWx0QmFzZT4o
KTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGdldHRlckZ1bmN0aW9uQ29udGVudCwgIiAg
ICAgICAgaWYgKGlucHV0ICYmIGlucHV0LT5jb252ZXJ0VG88JG1lbW9pemVkVHlwZT4obWVtb2l6
ZWRSZXN1bHQpKSB7XG4iKTsKICAgICAgICAgICAgICAgICAjIEZJWE1FOiB0aGUgZ2VuZXJhdGVk
IGNvZGUgc2hvdWxkIHJlcG9ydCBhbiBlcnJvciBpZiBhbiBpbnB1dCBjYW5ub3QgYmUgZmV0Y2hl
ZCBvciBjb252ZXJ0ZWQuCi0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+
c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNlLCAibWVtb2l6ZWRSZXN1bHQiLCAiY2FzdGVkVGhpcyIp
IC4gIjtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAg
ICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBpbnB1dC0+ZXhjZXB0aW9uQ29kZSgpKTtcbiIpIGlm
ICRnZXR0ZXJFeGNlcHRpb25zOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpO1xuIik7Ci0gICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIH1cbiIpOwotICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwotICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiI2VuZGlmXG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBnZXR0ZXJG
dW5jdGlvbkNvbnRlbnQsICIgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9ICIgLiBOYXRpdmVU
b0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNlLCAibWVtb2l6ZWRS
ZXN1bHQiLCAiY2FzdGVkVGhpcyIpIC4gIjtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGdl
dHRlckZ1bmN0aW9uQ29udGVudCwgIiAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwg
aW5wdXQtPmV4Y2VwdGlvbkNvZGUoKSk7XG4iKSBpZiAkZ2V0dGVyRXhjZXB0aW9uczsKKyAgICAg
ICAgICAgICAgICBwdXNoKEBnZXR0ZXJGdW5jdGlvbkNvbnRlbnQsICIgICAgICAgICAgICByZXR1
cm4gcmVzdWx0O1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAZ2V0dGVyRnVuY3Rpb25Db250
ZW50LCAiICAgICAgICB9XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBnZXR0ZXJGdW5jdGlv
bkNvbnRlbnQsICIgICAgfVxuIik7CisgICAgICAgICAgICAgICAgcHVzaChAZ2V0dGVyRnVuY3Rp
b25Db250ZW50LCAiI2VuZGlmXG4iKTsKICAgICAgICAgICAgIH0gIyBhdHRyaWJ1dGUgTm9uZGV0
ZXJtaW5pc3RpYwogCiAgICAgICAgICAgICBpZiAoSGFzQ3VzdG9tR2V0dGVyKCRhdHRyaWJ1dGUt
PnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKSkgewotICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+JGlt
cGxHZXR0ZXJGdW5jdGlvbk5hbWUoKnN0YXRlKSk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNo
KEBnZXR0ZXJGdW5jdGlvbkNvbnRlbnQsICIgICAgcmV0dXJuIGNhc3RlZFRoaXMtPiRpbXBsR2V0
dGVyRnVuY3Rpb25OYW1lKCpzdGF0ZSk7XG4iKTsKICAgICAgICAgICAgIH0gZWxzaWYgKCRhdHRy
aWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNoZWNrU2VjdXJpdHlGb3JO
b2RlIn0pIHsKICAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJKU0RPTUJpbmRpbmcuaCJ9
ID0gMTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzaG91bGRBbGxvd0FjY2Vzc1Rv
Tm9kZShzdGF0ZSwgaW1wbC4iIC4gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lIC4gIigpKSA/
ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNl
LCAiaW1wbC4kaW1wbEdldHRlckZ1bmN0aW9uTmFtZSgpIiwgImNhc3RlZFRoaXMiKSAuICIgOiBq
c051bGwoKSk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBnZXR0ZXJGdW5jdGlvbkNvbnRl
bnQsICIgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTtcbiIpOworICAgICAg
ICAgICAgICAgIHB1c2goQGdldHRlckZ1bmN0aW9uQ29udGVudCwgIiAgICByZXR1cm4gc2hvdWxk
QWxsb3dBY2Nlc3NUb05vZGUoc3RhdGUsIGltcGwuIiAuICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+
bmFtZSAuICIoKSkgPyAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwg
MCwgJGludGVyZmFjZSwgImltcGwuJGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUoKSIsICJjYXN0ZWRU
aGlzIikgLiAiIDoganNOdWxsKCk7XG4iKTsKICAgICAgICAgICAgIH0gZWxzaWYgKCR0eXBlIGVx
ICJFdmVudEhhbmRsZXIiKSB7CiAgICAgICAgICAgICAgICAgbXkgJGdldHRlciA9ICRhdHRyaWJ1
dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IldpbmRvd0V2ZW50SGFuZGxlciJ9
ID8gIndpbmRvd0V2ZW50SGFuZGxlckF0dHJpYnV0ZSIKICAgICAgICAgICAgICAgICAgICAgOiAk
YXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJEb2N1bWVudEV2ZW50
SGFuZGxlciJ9ID8gImRvY3VtZW50RXZlbnRIYW5kbGVyQXR0cmlidXRlIgogICAgICAgICAgICAg
ICAgICAgICA6ICJldmVudEhhbmRsZXJBdHRyaWJ1dGUiOwogICAgICAgICAgICAgICAgIG15ICRl
dmVudE5hbWUgPSBFdmVudEhhbmRsZXJBdHRyaWJ1dGVFdmVudE5hbWUoJGF0dHJpYnV0ZSk7Ci0g
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoJGdldHRlcihjYXN0ZWRUaGlzLT53cmFwcGVkKCksICRldmVudE5hbWUp
KTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGdldHRlckZ1bmN0aW9uQ29udGVudCwgIiAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAZ2V0dGVy
RnVuY3Rpb25Db250ZW50LCAiICAgIHJldHVybiAkZ2V0dGVyKGNhc3RlZFRoaXMtPndyYXBwZWQo
KSwgJGV2ZW50TmFtZSk7XG4iKTsKICAgICAgICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPnNp
Z25hdHVyZS0+dHlwZSA9fiAvQ29uc3RydWN0b3IkLykgewogICAgICAgICAgICAgICAgIG15ICRj
b25zdHJ1Y3RvclR5cGUgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGU7CiAgICAgICAgICAg
ICAgICAgJGNvbnN0cnVjdG9yVHlwZSA9fiBzL0NvbnN0cnVjdG9yJC8vOwpAQCAtMjY2MywzMCAr
MjY3MSwzMCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgIGlm
ICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IikgewogICAgICAgICAgICAgICAgICAgICBt
eSAkbmFtZWQgPSAoJGNvbnN0cnVjdG9yVHlwZSA9fiAvTmFtZWQkLykgPyAiTmFtZWQiIDogIiI7
CiAgICAgICAgICAgICAgICAgICAgICRjb25zdHJ1Y3RvclR5cGUgPX4gcy9OYW1lZCQvLzsKLSAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKUyIgLiAkY29uc3RydWN0b3JUeXBlIC4gIjo6Z2V0JHtuYW1lZH1Db25zdHJ1Y3Rv
cihzdGF0ZS0+dm0oKSwgY2FzdGVkVGhpcykpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1
c2goQGdldHRlckZ1bmN0aW9uQ29udGVudCwgIiAgICByZXR1cm4gSlMiIC4gJGNvbnN0cnVjdG9y
VHlwZSAuICI6OmdldCR7bmFtZWR9Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGNhc3RlZFRoaXMp
O1xuIik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgQWRk
VG9JbXBsSW5jbHVkZXMoIkpTIiAuICRjb25zdHJ1Y3RvclR5cGUgLiAiLmgiLCAkYXR0cmlidXRl
LT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25kaXRpb25hbCJ9KTsKLSAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKUyIgLiAkY29uc3RydWN0b3JUeXBlIC4gIjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZt
KCksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKSk7XG4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgcHVzaChAZ2V0dGVyRnVuY3Rpb25Db250ZW50LCAiICAgIHJldHVybiBKUyIgLiAkY29uc3Ry
dWN0b3JUeXBlIC4gIjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpKTtcbiIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxz
aWYgKCEkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJHZXR0ZXJS
YWlzZXNFeGNlcHRpb24ifSAmJiAhJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiR2V0dGVyUmFpc2VzRXhjZXB0aW9uV2l0aE1lc3NhZ2UifSkgewogICAgICAgICAg
ICAgICAgIG15ICRjYWNoZUluZGV4ID0gMDsKICAgICAgICAgICAgICAgICBpZiAoJGF0dHJpYnV0
ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FjaGVkQXR0cmlidXRlIn0pIHsK
ICAgICAgICAgICAgICAgICAgICAgJGNhY2hlSW5kZXggPSAkY3VycmVudENhY2hlZEF0dHJpYnV0
ZTsKICAgICAgICAgICAgICAgICAgICAgJGN1cnJlbnRDYWNoZWRBdHRyaWJ1dGUrKzsKLSAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKEpTVmFsdWUgY2FjaGVk
VmFsdWUgPSBjYXN0ZWRUaGlzLT5tXyIgLiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUgLiAi
LmdldCgpKVxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhY2hlZFZhbHVlKTtcbiIpOworICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBnZXR0ZXJGdW5jdGlvbkNvbnRlbnQsICIgICAgaWYgKEpTVmFsdWUg
Y2FjaGVkVmFsdWUgPSBjYXN0ZWRUaGlzLT5tXyIgLiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5h
bWUgLiAiLmdldCgpKVxuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGdldHRlckZ1bmN0
aW9uQ29udGVudCwgIiAgICAgICAgcmV0dXJuIGNhY2hlZFZhbHVlO1xuIik7CiAgICAgICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICAgICAgbXkgQGNhbGxXaXRoQXJncyA9IEdlbmVyYXRlQ2Fs
bFdpdGgoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdp
dGgifSwgXEBpbXBsQ29udGVudCwgIkpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSIpOwor
ICAgICAgICAgICAgICAgIG15IEBjYWxsV2l0aEFyZ3MgPSBHZW5lcmF0ZUNhbGxXaXRoKCRhdHRy
aWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhbGxXaXRoIn0sIFxAZ2V0
dGVyRnVuY3Rpb25Db250ZW50LCAianNVbmRlZmluZWQoKSIpOwogCiAgICAgICAgICAgICAgICAg
aWYgKCRzdmdMaXN0UHJvcGVydHlUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIEpTVmFsdWUgcmVzdWx0ID0gICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNlLCAiY2FzdGVkVGhpcy0+d3JhcHBlZCgp
LiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCIgLiAoam9pbiAiLCAiLCBAY2FsbFdpdGhBcmdzKSAu
ICIpIiwgImNhc3RlZFRoaXMiKSAuICI7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChA
Z2V0dGVyRnVuY3Rpb25Db250ZW50LCAiICAgIEpTVmFsdWUgcmVzdWx0ID0gICIgLiBOYXRpdmVU
b0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNlLCAiY2FzdGVkVGhp
cy0+d3JhcHBlZCgpLiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCIgLiAoam9pbiAiLCAiLCBAY2Fs
bFdpdGhBcmdzKSAuICIpIiwgImNhc3RlZFRoaXMiKSAuICI7XG4iKTsKICAgICAgICAgICAgICAg
ICB9IGVsc2lmICgkc3ZnUHJvcGVydHlPckxpc3RQcm9wZXJ0eVR5cGUpIHsKLSAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHN2Z1Byb3BlcnR5T3JMaXN0UHJvcGVy
dHlUeXBlJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpLnByb3BlcnR5UmVmZXJlbmNlKCk7
XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAZ2V0dGVyRnVuY3Rpb25Db250ZW50LCAi
ICAgICRzdmdQcm9wZXJ0eU9yTGlzdFByb3BlcnR5VHlwZSYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKS5wcm9wZXJ0eVJlZmVyZW5jZSgpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIGlm
ICgkc3ZnUHJvcGVydHlPckxpc3RQcm9wZXJ0eVR5cGUgZXEgImZsb2F0IikgeyAjIFNwZWNpYWwg
Y2FzZSBmb3IgSlNTVkdOdW1iZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIEpTVmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmli
dXRlLT5zaWduYXR1cmUsIDAsICRpbnRlcmZhY2UsICJpbXBsIiwgImNhc3RlZFRoaXMiKSAuICI7
XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGdldHRlckZ1bmN0aW9uQ29udGVu
dCwgIiAgICBKU1ZhbHVlIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+
c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNlLCAiaW1wbCIsICJjYXN0ZWRUaGlzIikgLiAiO1xuIik7
CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFs
dWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNlLCAiaW1wbC4kaW1wbEdldHRl
ckZ1bmN0aW9uTmFtZSgiIC4gKGpvaW4gIiwgIiwgQGNhbGxXaXRoQXJncykgLiAiKSIsICJjYXN0
ZWRUaGlzIikgLiAiO1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBnZXR0ZXJG
dW5jdGlvbkNvbnRlbnQsICIgICAgSlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVl
KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgImltcGwuJGltcGxHZXR0ZXJG
dW5jdGlvbk5hbWUoIiAuIChqb2luICIsICIsIEBjYWxsV2l0aEFyZ3MpIC4gIikiLCAiY2FzdGVk
VGhpcyIpIC4gIjtcbiIpOwogCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9IGVsc2UgewpAQCAtMjcwNCwzNiArMjcxMiwxMjcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50
YXRpb24KIAogICAgICAgICAgICAgICAgICAgICB1bnNoaWZ0KEBhcmd1bWVudHMsIEBjYWxsV2l0
aEFyZ3MpOwogICAgICAgICAgICAgICAgICAgICBteSAkanNUeXBlID0gTmF0aXZlVG9KU1ZhbHVl
KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgIiR7ZnVuY3Rpb25OYW1lfSgi
IC4gam9pbigiLCAiLCBAYXJndW1lbnRzKSAuICIpIiwgImNhc3RlZFRoaXMiKTsKLSAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTtcbiIpIGlmICEkYXR0cmlidXRlLT5pc1N0YXRpYzsKKyAgICAgICAgICAg
ICAgICAgICAgcHVzaChAZ2V0dGVyRnVuY3Rpb25Db250ZW50LCAiICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7XG4iKSBpZiAhJGF0dHJpYnV0ZS0+aXNTdGF0aWM7CiAgICAg
ICAgICAgICAgICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNTVkdBbmltYXRlZFR5cGUoJHR5
cGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBh
dXRvIG9iaiA9ICRqc1R5cGU7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+
Z2xvYmFsT2JqZWN0KCksIG9iai5nZXQoKSk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHB1c2goQGdldHRlckZ1bmN0aW9uQ29udGVudCwgIiAgICBhdXRvIG9iaiA9ICRqc1R5cGU7XG4i
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGdldHRlckZ1bmN0aW9uQ29udGVudCwg
IiAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVj
dCgpLCBvYmouZ2V0KCkpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHJlc3Vs
dCA9ICRqc1R5cGU7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGdldHRlckZ1
bmN0aW9uQ29udGVudCwgIiAgICBKU1ZhbHVlIHJlc3VsdCA9ICRqc1R5cGU7XG4iKTsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIGNhc3RlZFRoaXMtPm1fIiAuICRhdHRyaWJ1dGUtPnNpZ25h
dHVyZS0+bmFtZSAuICIuc2V0KHN0YXRlLT52bSgpLCBjYXN0ZWRUaGlzLCByZXN1bHQpO1xuIikg
aWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhY2hlZEF0
dHJpYnV0ZSJ9KTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7XG4iKTsKKyAgICAgICAgICAgICAgICBpZiAoJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FjaGVkQXR0cmlidXRl
In0pIHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAZ2V0dGVyRnVuY3Rpb25Db250ZW50LCAi
ICAgIGNhc3RlZFRoaXMtPm1fIiAuICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSAuICIuc2V0
KHN0YXRlLT52bSgpLCBjYXN0ZWRUaGlzLCByZXN1bHQpO1xuIikgOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIHB1c2goQGdldHRlckZ1bmN0aW9uQ29udGVudCwgIiAgICBy
ZXR1cm4gcmVzdWx0O1xuIik7CiAKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgdW5zaGlmdChAYXJndW1lbnRzLCBHZW5lcmF0ZUNhbGxXaXRoKCRhdHRyaWJ1dGUtPnNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhbGxXaXRoIn0sIFxAaW1wbENvbnRlbnQsICJK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkiKSk7CisgICAgICAgICAgICAgICAgdW5zaGlm
dChAYXJndW1lbnRzLCBHZW5lcmF0ZUNhbGxXaXRoKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkNhbGxXaXRoIn0sIFxAZ2V0dGVyRnVuY3Rpb25Db250ZW50LCAi
anNVbmRlZmluZWQoKSIpKTsKIAogICAgICAgICAgICAgICAgIGlmICgkc3ZnUHJvcGVydHlPckxp
c3RQcm9wZXJ0eVR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgJHN2Z1Byb3BlcnR5T3JMaXN0UHJvcGVydHlUeXBlIGltcGwoKmNhc3RlZFRoaXMtPndy
YXBwZWQoKSk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgSlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25h
dHVyZSwgMCwgJGludGVyZmFjZSwgImltcGwuJGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUoIiAuIGpv
aW4oIiwgIiwgQGFyZ3VtZW50cykgLiAiKSIsICJjYXN0ZWRUaGlzIikgLiAiO1xuIik7CisgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGdldHRlckZ1bmN0aW9uQ29udGVudCwgIiAgICAkc3ZnUHJv
cGVydHlPckxpc3RQcm9wZXJ0eVR5cGUgaW1wbCgqY2FzdGVkVGhpcy0+d3JhcHBlZCgpKTtcbiIp
OworICAgICAgICAgICAgICAgICAgICBwdXNoKEBnZXR0ZXJGdW5jdGlvbkNvbnRlbnQsICIgICAg
SlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZSwgMCwgJGludGVyZmFjZSwgImltcGwuJGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUoIiAuIGpvaW4o
IiwgIiwgQGFyZ3VtZW50cykgLiAiKSIsICJjYXN0ZWRUaGlzIikgLiAiO1xuIik7CiAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTtcbiIpOwotICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHJlc3VsdCA9ICIgLiBO
YXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNlLCAiaW1w
bC4kaW1wbEdldHRlckZ1bmN0aW9uTmFtZSgiIC4gam9pbigiLCAiLCBAYXJndW1lbnRzKSAuICIp
IiwgImNhc3RlZFRoaXMiKSAuICI7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAZ2V0
dGVyRnVuY3Rpb25Db250ZW50LCAiICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAZ2V0dGVyRnVuY3Rpb25Db250ZW50
LCAiICAgIEpTVmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5z
aWduYXR1cmUsIDAsICRpbnRlcmZhY2UsICJpbXBsLiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCIg
LiBqb2luKCIsICIsIEBhcmd1bWVudHMpIC4gIikiLCAiY2FzdGVkVGhpcyIpIC4gIjtcbiIpOwog
ICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpO1xuIik7CisgICAgICAgICAgICAgICAgcHVz
aChAZ2V0dGVyRnVuY3Rpb25Db250ZW50LCAiICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMp
O1xuIik7CisKKyAgICAgICAgICAgICAgICBwdXNoKEBnZXR0ZXJGdW5jdGlvbkNvbnRlbnQsICIg
ICAgcmV0dXJuIHJlc3VsdDtcbiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdXNo
KEBnZXR0ZXJGdW5jdGlvbkNvbnRlbnQsICJ9XG5cbiIpOworCisgICAgICAgICAgICBteSAkcmVx
dWlyZXNTdGF0ZVBhcmFtZXRlciA9IGdyZXAoL3N0YXRlLywgQGdldHRlckZ1bmN0aW9uQ29udGVu
dCk7CisgICAgICAgICAgICBteSAkcmVxdWlyZXNDYXN0ZWRUaGlzUGFyYW1ldGVyID0gZ3JlcCgv
Y2FzdGVkVGhpcy8sIEBnZXR0ZXJGdW5jdGlvbkNvbnRlbnQpOwogCi0gICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpO1xu
Iik7CisgICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiTm9uZGV0ZXJtaW5pc3RpYyJ9KSB7CisgICAgICAgICAgICAgICAgbXkgJGZsYXR0
ZW5HZXR0ZXJGdW5jdGlvbkNvbnRlbnQgLj0gam9pbiAiIiwgQGdldHRlckZ1bmN0aW9uQ29udGVu
dDsKKyAgICAgICAgICAgICAgICAkcmVxdWlyZXNTdGF0ZVBhcmFtZXRlciA9IGdyZXAoL2VuZGlm
LipzdGF0ZS9zLCAkZmxhdHRlbkdldHRlckZ1bmN0aW9uQ29udGVudCk7CisgICAgICAgICAgICAg
ICAgJHJlcXVpcmVzQ2FzdGVkVGhpc1BhcmFtZXRlciA9IGdyZXAoL2VuZGlmLipjYXN0ZWRUaGlz
L3MsICRmbGF0dGVuR2V0dGVyRnVuY3Rpb25Db250ZW50KTsKKyAgICAgICAgICAgICAgICBpZiAo
ISRyZXF1aXJlc0Nhc3RlZFRoaXNQYXJhbWV0ZXIgfHwgISRyZXF1aXJlc1N0YXRlUGFyYW1ldGVy
KSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2lmIEVOQUJMRShX
RUJfUkVQTEFZKVxuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
SlNWYWx1ZSAke2dldEZ1bmN0aW9uTmFtZX1HZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgJHtjbGFz
c05hbWV9KiBjYXN0ZWRUaGlzKVxuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiI2Vsc2VcbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKCEkcmVxdWlyZXNDYXN0ZWRUaGlzUGFyYW1ldGVyKSB7CisgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU1ZhbHVlICR7Z2V0RnVuY3Rpb25OYW1lfUdl
dHRlcihFeGVjU3RhdGUqIHN0YXRlKVxuIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIGlmICgkcmVxdWlyZXNTdGF0ZVBhcmFtZXRlcikgeworICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTVmFsdWUgJHtnZXRGdW5jdGlvbk5hbWV9R2V0dGVy
KEV4ZWNTdGF0ZSogc3RhdGUsICR7Y2xhc3NOYW1lfSogY2FzdGVkVGhpcylcbiIpOworICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiSlNWYWx1ZSAke2dldEZ1bmN0aW9uTmFtZX1HZXR0ZXIoJHtjbGFzc05hbWV9KiBjYXN0ZWRU
aGlzKVxuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTm9uZGV0
ZXJtaW5pc3RpYyJ9ICYmICghJHJlcXVpcmVzQ2FzdGVkVGhpc1BhcmFtZXRlciB8fCAhJHJlcXVp
cmVzU3RhdGVQYXJhbWV0ZXIpKSB7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIjZW5kaWZcbiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgQGdldHRlckZ1bmN0aW9uQ29udGVudCk7CisKKyAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiRW5jb2RlZEpTVmFsdWUgJHtnZXRGdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xv
dEJhc2UpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CisKKyAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7XG4i
KTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJBTSh0aGlz
VmFsdWUpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBVTlVTRURf
UEFSQU0oc2xvdEJhc2UpO1xuIik7CisKKyAgICAgICAgICAgIGlmICghJGF0dHJpYnV0ZS0+aXNT
dGF0aWMgfHwgJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlID1+IC9Db25zdHJ1Y3RvciQvKSB7
CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSBkZWNvZGVk
VGhpc1ZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSk7XG4iKTsKKyAgICAgICAgICAg
ICAgICBteSAkY2FzdGluZ0Z1bmN0aW9uID0gJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkN1c3RvbVByb3h5VG9KU09iamVjdCJ9ID8gInRvJHtjbGFzc05hbWV9IiA6IEdldENhc3Rp
bmdIZWxwZXJGb3JUaGlzT2JqZWN0KCRpbnRlcmZhY2UpOworICAgICAgICAgICAgICAgICMgaHR0
cDovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNJbXBsaWNpdFRoaXMKKyAgICAgICAgICAgICAg
ICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxpY2l0VGhpcyJ9KSB7
CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8qIGNhc3Rl
ZFRoaXMgPSBkZWNvZGVkVGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkgPyAkY2FzdGluZ0Z1
bmN0aW9uKHN0YXRlLT50aGlzVmFsdWUoKS50b1RoaXMoc3RhdGUsIE5vdFN0cmljdE1vZGUpKSA6
ICRjYXN0aW5nRnVuY3Rpb24oZGVjb2RlZFRoaXNWYWx1ZSk7XG4iKTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBh
dXRvKiBjYXN0ZWRUaGlzID0gJGNhc3RpbmdGdW5jdGlvbihkZWNvZGVkVGhpc1ZhbHVlKTtcbiIp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7XG4iKTsKKyAgICAgICAgICAgICAgICBp
ZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTGVuaWVudFRo
aXMifSkgeworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOworICAgICAgICAgICAg
ICAgIH0gZWxzaWYgKEludGVyZmFjZVJlcXVpcmVzQXR0cmlidXRlc09uSW5zdGFuY2VGb3JDb21w
YXRpYmlsaXR5KCRpbnRlcmZhY2UpKSB7CisgICAgICAgICAgICAgICAgICAgICMgRmFsbGJhY2sg
dG8gdHJ5aW5nIHRvIHNlYXJjaGluZyB0aGUgcHJvdG90eXBlIGNoYWluIGZvciBjb21wYXRpYmls
aXR5IHJlYXNvbnMuCisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
ICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpLmdl
dE9iamVjdCgpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICBmb3IgKHRoaXNPYmplY3QgPSB0aGlzT2JqZWN0ID8gdGhpc09iamVjdC0+Z2V0UHJv
dG90eXBlRGlyZWN0KCkuZ2V0T2JqZWN0KCkgOiBudWxscHRyOyB0aGlzT2JqZWN0OyB0aGlzT2Jq
ZWN0ID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KCkuZ2V0T2JqZWN0KCkpIHtcbiIp
OworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIGlm
ICgoY2FzdGVkVGhpcyA9ICIgLiBHZXRDYXN0aW5nSGVscGVyRm9yVGhpc09iamVjdCgkaW50ZXJm
YWNlKSAuICIodGhpc09iamVjdCkpKVxuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgICAgICAgICAgICAgIGJyZWFrO1xuIik7CisgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICB9XG4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGlmICghY2FzdGVkVGhpcylcbiIpOworICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIHJldHVybiB0
aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsIFwiJGludGVyZmFjZU5hbWVcIiwgXCIkbmFtZVwi
KTtcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAg
cmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKCpzdGF0ZSwgXCIkaW50ZXJmYWNlTmFtZVwiLCBc
IiRuYW1lXCIpO1xuIik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVF
cnJvcigqc3RhdGUsIFwiJGludGVyZmFjZU5hbWVcIiwgXCIkbmFtZVwiKTtcbiIpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4i
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5vbmRldGVybWluaXN0aWMifSAmJiAoISRyZXF1aXJl
c0Nhc3RlZFRoaXNQYXJhbWV0ZXIgfHwgISRyZXF1aXJlc1N0YXRlUGFyYW1ldGVyKSkgeworICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2lmIEVOQUJMRShXRUJfUkVQTEFZKVxu
Iik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSgke2dldEZ1bmN0aW9uTmFtZX1HZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTtc
biIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2Vsc2VcbiIpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoISRyZXF1aXJlc0Nhc3RlZFRoaXNQYXJhbWV0
ZXIpIHsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKCR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihzdGF0ZSkpO1xuIik7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICgkcmVxdWlyZXNTdGF0ZVBhcmFt
ZXRlcikgeworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKCR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihzdGF0ZSwgY2FzdGVk
VGhpcykpO1xuIik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSgke2dldEZ1
bmN0aW9uTmFtZX1HZXR0ZXIoY2FzdGVkVGhpcykpO1xuIik7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiTm9uZGV0ZXJtaW5pc3RpYyJ9ICYmICghJHJlcXVpcmVzQ2Fz
dGVkVGhpc1BhcmFtZXRlciB8fCAhJHJlcXVpcmVzU3RhdGVQYXJhbWV0ZXIpKSB7CisgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIjZW5kaWZcbiIpOwogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAKKwogICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIjZW5kaWZcbiIpIGlmICRhdHRyaWJ1dGVDb25kaXRpb25h
bFN0cmluZzsKIAogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOwpAQCAtMzIz
MCw2ICszMzI5LDEwIEBAIEVORAogCiAgICAgfQogCisgICAgaWYgKCRpbnRlcmZhY2UtPnNlcmlh
bGl6YWJsZSkgeworICAgICAgICBHZW5lcmF0ZVNlcmlhbGl6ZXJGdW5jdGlvbigkaW50ZXJmYWNl
LCAkaW50ZXJmYWNlTmFtZSwgJGNsYXNzTmFtZSwgJHNlcmlhbGl6ZXJGdW5jdGlvbk5hbWUsICRz
ZXJpYWxpemVyTmF0aXZlRnVuY3Rpb25OYW1lKTsKKyAgICB9CisKICAgICBpZiAoJGludGVyZmFj
ZS0+aXRlcmFibGUpIHsKICAgICAgICAgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkl0ZXJhYmxlRnVu
Y3Rpb25zKCRpbnRlcmZhY2UpOwogICAgIH0KQEAgLTM0NDIsNiArMzU0NSwzMSBAQCBFTkQKICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIlxuI2VuZGlmIC8vICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4i
KSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CiB9CiAKK3N1YiBHZW5lcmF0ZVNlcmlhbGl6ZXJGdW5j
dGlvbgoreworICAgIG15ICgkaW50ZXJmYWNlLCAkaW50ZXJmYWNlTmFtZSwgJGNsYXNzTmFtZSwg
JHNlcmlhbGl6ZXJGdW5jdGlvbk5hbWUsICRzZXJpYWxpemVyTmF0aXZlRnVuY3Rpb25OYW1lKSA9
IEBfOworCisgICAgQWRkVG9JbXBsSW5jbHVkZXMoIk9iamVjdENvbnN0cnVjdG9yLmgiKTsKKyAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtzZXJp
YWxpemVyTmF0aXZlRnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIHN0YXRlKVxuIik7CisgICAgcHVz
aChAaW1wbENvbnRlbnQsICJ7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTtcbiIpOworICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIGF1dG8gY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlMkaW50ZXJmYWNl
TmFtZSo+KHRoaXNWYWx1ZSk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKVxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCBcIiRpbnRlcmZhY2VOYW1lXCIs
IFwiJHNlcmlhbGl6ZXJGdW5jdGlvbk5hbWVcIik7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICR7Y2xhc3NOYW1l
fTo6aW5mbygpKTtcblxuIikgdW5sZXNzICRpbnRlcmZhY2VOYW1lIGVxICJFdmVudFRhcmdldCI7
CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVj
dEVtcHR5T2JqZWN0KHN0YXRlKTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpO1xuIik7CisgICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAeyRp
bnRlcmZhY2UtPmF0dHJpYnV0ZXN9KSB7CisgICAgICAgIG15ICRuYW1lID0gJGF0dHJpYnV0ZS0+
c2lnbmF0dXJlLT5uYW1lOworICAgICAgICBpZiAoZ3JlcCAkXyBlcSAkbmFtZSwgQHskaW50ZXJm
YWNlLT5zZXJpYWxpemFibGUtPmF0dHJpYnV0ZXN9KSB7CisgICAgICAgICAgICBteSAkZ2V0dGVy
RnVuY3Rpb25DYWxsID0gR2V0R2V0dGVyRnVuY3Rpb25DYWxsKCRpbnRlcmZhY2UsICRjbGFzc05h
bWUsICRhdHRyaWJ1dGUpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBcIiR7bmFtZX1c
IiksICR7Z2V0dGVyRnVuY3Rpb25DYWxsfSk7XG4iKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBw
dXNoKEBpbXBsQ29udGVudCwgIlxuICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTtc
biIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKK30KKwogc3ViIEdlbmVyYXRl
RnVuY3Rpb25DYXN0ZWRUaGlzCiB7CiAgICAgbXkgKCRpbnRlcmZhY2UsICRjbGFzc05hbWUsICRm
dW5jdGlvbikgPSBAXzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvSURMUGFyc2VyLnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJz
ZXIucG0KaW5kZXggYzhkM2UwOTQ0MDhjYjgwZGU2ZmQ4MGRkODdmZTRkNmFmOWJkMmVhOC4uZmEw
YzhlZGNjNDMzMzNmOGMyMjRkYTAwYTRjNTkyMDlmNzU4YjM5OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0KKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0KQEAgLTU3LDYgKzU3LDcgQEAgc3RydWN0
KCBkb21JbnRlcmZhY2UgPT4gewogICAgIGlzQ2FsbGJhY2sgPT4gJyQnLCAjIFVzZWQgZm9yIGNh
bGxiYWNrIGludGVyZmFjZXMKICAgICBpc1BhcnRpYWwgPT4gJyQnLCAjIFVzZWQgZm9yIHBhcnRp
YWwgaW50ZXJmYWNlcwogICAgIGl0ZXJhYmxlID0+ICckJywgIyBVc2VkIGZvciBpdGVyYWJsZSBp
bnRlcmZhY2VzCisgICAgc2VyaWFsaXphYmxlID0+ICckJywgIyBVc2VkIGZvciBzZXJpYWxpemFi
bGUgaW50ZXJmYWNlcwogfSk7CiAKICMgVXNlZCB0byByZXByZXNlbnQgZG9tSW50ZXJmYWNlIGNv
bnRlbnRzIChuYW1lIG9mIG1ldGhvZCwgc2lnbmF0dXJlKQpAQCAtOTUsNiArOTYsMTAgQEAgc3Ry
dWN0KCBkb21JdGVyYWJsZSA9PiB7CiAgICAgZnVuY3Rpb25zID0+ICdAJywgIyBJdGVyYWJsZSBm
dW5jdGlvbnMgKGVudHJpZXMsIGtleXMsIHZhbHVlcywgW1N5bWJvbC5JdGVyYXRvcl0sIGZvckVh
Y2gpCiB9KTsKIAorIyBVc2VkIHRvIHJlcHJlc2VudCBzZXJpYWxpemFibGUgaW50ZXJmYWNlCitz
dHJ1Y3QoIGRvbVNlcmlhbGl6YWJsZSA9PiB7CisgICAgYXR0cmlidXRlcyA9PiAnQCcsICMgTGlz
dCBvZiBhdHRyaWJ1dGVzIHRvIHNlcmlhbGl6ZQorfSk7CiAKICMgVXNlZCB0byByZXByZXNlbnQg
c3RyaW5nIGNvbnN0YW50cwogc3RydWN0KCBkb21Db25zdGFudCA9PiB7CkBAIC0xMDMwLDcgKzEw
MzUsMTYgQEAgc3ViIHBhcnNlU2VyaWFsaXplcgogICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRU
b2tlbigpOwogICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAic2VyaWFsaXplciIpIHsKICAgICAg
ICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICJzZXJpYWxpemVy
IiwgX19MSU5FX18pOwotICAgICAgICByZXR1cm4gJHNlbGYtPnBhcnNlU2VyaWFsaXplclJlc3Qo
JGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7CisgICAgICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRU
b2tlbigpOworICAgICAgICBteSAkbmV3RGF0YU5vZGU7CisgICAgICAgIGlmICgkbmV4dC0+dmFs
dWUoKSBuZSAiOyIpIHsKKyAgICAgICAgICAgICRuZXdEYXRhTm9kZSA9ICRzZWxmLT5wYXJzZVNl
cmlhbGl6ZXJSZXN0KCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOworICAgICAgICAgICAgbXkgJG5l
eHQgPSAkc2VsZi0+bmV4dFRva2VuKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAk
bmV3RGF0YU5vZGUgPSBkb21TZXJpYWxpemFibGUtPm5ldygpOworICAgICAgICB9CisgICAgICAg
ICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiOyIsIF9fTElORV9f
KTsKKyAgICAgICAgcmV0dXJuICRuZXdEYXRhTm9kZTsKICAgICB9CiAgICAgJHNlbGYtPmFzc2Vy
dFVuZXhwZWN0ZWRUb2tlbigkbmV4dC0+dmFsdWUoKSwgX19MSU5FX18pOwogfQpAQCAtMTA0Myw3
ICsxMDU3LDEwIEBAIHN1YiBwYXJzZVNlcmlhbGl6ZXJSZXN0CiAgICAgbXkgJG5leHQgPSAkc2Vs
Zi0+bmV4dFRva2VuKCk7CiAgICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICI9IikgewogICAgICAg
ICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIj0iLCBfX0xJTkVf
Xyk7Ci0gICAgICAgIHJldHVybiAkc2VsZi0+cGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybigkZXh0
ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKKyAgICAgICAgbXkgJGF0dHJpYnV0ZXMgPSAkc2VsZi0+cGFy
c2VTZXJpYWxpemF0aW9uUGF0dGVybigpOworICAgICAgICBteSAkbmV3RGF0YU5vZGUgPSBkb21T
ZXJpYWxpemFibGUtPm5ldygpOworICAgICAgICAkbmV3RGF0YU5vZGUtPmF0dHJpYnV0ZXMoJGF0
dHJpYnV0ZXMpOworICAgICAgICByZXR1cm4gJG5ld0RhdGFOb2RlOwogICAgIH0KICAgICBpZiAo
JG5leHQtPnR5cGUoKSA9PSBJZGVudGlmaWVyVG9rZW4gfHwgJG5leHQtPnZhbHVlKCkgZXEgIigi
KSB7CiAgICAgICAgIHJldHVybiAkc2VsZi0+cGFyc2VPcGVyYXRpb25SZXN0KCRleHRlbmRlZEF0
dHJpYnV0ZUxpc3QpOwpAQCAtMTA1Myw1OSArMTA3MCw0NSBAQCBzdWIgcGFyc2VTZXJpYWxpemVy
UmVzdAogc3ViIHBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm4KIHsKICAgICBteSAkc2VsZiA9IHNo
aWZ0OwotICAgIG15ICRleHRlbmRlZEF0dHJpYnV0ZUxpc3QgPSBzaGlmdDsKIAogICAgIG15ICRu
ZXh0ID0gJHNlbGYtPm5leHRUb2tlbigpOwogICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAieyIp
IHsKICAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICJ7
IiwgX19MSU5FX18pOwotICAgICAgICAkc2VsZi0+cGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybk1h
cCgpOworICAgICAgICBteSAkYXR0cmlidXRlcyA9ICRzZWxmLT5wYXJzZVNlcmlhbGl6YXRpb25B
dHRyaWJ1dGVzKCk7CiAgICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRU
b2tlbigpLCAifSIsIF9fTElORV9fKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4g
XEB7JGF0dHJpYnV0ZXN9OwogICAgIH0KICAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgIlsiKSB7
Ci0gICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiWyIs
IF9fTElORV9fKTsKLSAgICAgICAgJHNlbGYtPnBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm5MaXN0
KCk7Ci0gICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAi
XSIsIF9fTElORV9fKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBkaWUgIlNlcmlhbGl6YXRp
b24gb2YgbGlzdHMgcGF0dGVybiBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4iOwogICAgIH0K
ICAgICBpZiAoJG5leHQtPnR5cGUoKSA9PSBJZGVudGlmaWVyVG9rZW4pIHsKLSAgICAgICAgJHNl
bGYtPmFzc2VydFRva2VuVHlwZSgkc2VsZi0+Z2V0VG9rZW4oKSwgSWRlbnRpZmllclRva2VuKTsK
LSAgICAgICAgcmV0dXJuOworICAgICAgICBteSBAYXR0cmlidXRlcyA9ICgpOworICAgICAgICBt
eSAkdG9rZW4gPSAkc2VsZi0+Z2V0VG9rZW4oKTsKKyAgICAgICAgJHNlbGYtPmFzc2VydFRva2Vu
VHlwZSgkdG9rZW4sIElkZW50aWZpZXJUb2tlbik7CisgICAgICAgIHB1c2goQGF0dHJpYnV0ZXMs
ICR0b2tlbi0+dmFsdWUoKSk7CisgICAgICAgIHJldHVybiBcQGF0dHJpYnV0ZXM7CiAgICAgfQog
ICAgICRzZWxmLT5hc3NlcnRVbmV4cGVjdGVkVG9rZW4oJG5leHQtPnZhbHVlKCksIF9fTElORV9f
KTsKIH0KIAotc3ViIHBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm5NYXAKK3N1YiBwYXJzZVNlcmlh
bGl6YXRpb25BdHRyaWJ1dGVzCiB7CiAgICAgbXkgJHNlbGYgPSBzaGlmdDsKLSAgICBteSAkbmV4
dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsKLSAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgImdldHRl
ciIpIHsKLSAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCks
ICJnZXR0ZXIiLCBfX0xJTkVfXyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCRu
ZXh0LT52YWx1ZSgpIGVxICJpbmhlcml0IikgewotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5W
YWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgImluaGVyaXQiLCBfX0xJTkVfXyk7Ci0gICAgICAgICRz
ZWxmLT5wYXJzZUlkZW50aWZpZXJzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYg
KCRuZXh0LT50eXBlKCkgPT0gSWRlbnRpZmllclRva2VuKSB7Ci0gICAgICAgICRzZWxmLT5hc3Nl
cnRUb2tlblR5cGUoJHNlbGYtPmdldFRva2VuKCksIElkZW50aWZpZXJUb2tlbik7Ci0gICAgICAg
ICRzZWxmLT5wYXJzZUlkZW50aWZpZXJzKCk7Ci0gICAgfQotfQorICAgIG15ICR0b2tlbiA9ICRz
ZWxmLT5nZXRUb2tlbigpOworCisgICAgaWYgKCR0b2tlbi0+dmFsdWUoKSBlcSAiZ2V0dGVyIikg
eworICAgICAgICBkaWUgIlNlcmlhbGl6ZXIgZ2V0dGVyIGtleXdvcmQgaXMgbm90IGN1cnJlbnRs
eSBzdXBwb3J0ZWQuIjsKIAotc3ViIHBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm5MaXN0Ci17Ci0g
ICAgbXkgJHNlbGYgPSBzaGlmdDsKLSAgICBteSAkbmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsK
LSAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgImdldHRlciIpIHsKLSAgICAgICAgJHNlbGYtPmFz
c2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICJnZXR0ZXIiLCBfX0xJTkVfXyk7Ci0g
ICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKCRuZXh0LT50eXBlKCkgPT0gSWRlbnRpZmll
clRva2VuKSB7Ci0gICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblR5cGUoJHNlbGYtPmdldFRva2Vu
KCksIElkZW50aWZpZXJUb2tlbik7Ci0gICAgICAgICRzZWxmLT5wYXJzZUlkZW50aWZpZXJzKCk7
CisgICAgaWYgKCR0b2tlbi0+dmFsdWUoKSBlcSAiaW5oZXJpdCIpIHsKKyAgICAgICAgZGllICJT
ZXJpYWxpemVyIGluaGVyaXQga2V5d29yZCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4iOwog
ICAgIH0KKworICAgIG15IEBhdHRyaWJ1dGVzID0gKCk7CisgICAgJHNlbGYtPmFzc2VydFRva2Vu
VHlwZSgkdG9rZW4sIElkZW50aWZpZXJUb2tlbik7CisgICAgcHVzaChAYXR0cmlidXRlcywgJHRv
a2VuLT52YWx1ZSgpKTsKKyAgICBwdXNoKEBhdHRyaWJ1dGVzLCBAeyRzZWxmLT5wYXJzZUlkZW50
aWZpZXJzKCl9KTsKKyAgICByZXR1cm4gXEBhdHRyaWJ1dGVzOwogfQogCiBzdWIgcGFyc2VJZGVu
dGlmaWVyTGlzdApAQCAtMjI4Nyw2ICsyMjkwLDE5IEBAIHN1YiBhcHBseU1lbWJlckxpc3QKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKHJl
ZigkaXRlbSkgZXEgImRvbVNlcmlhbGl6YWJsZSIpIHsKKyAgICAgICAgICAgICRpbnRlcmZhY2Ut
PnNlcmlhbGl6YWJsZSgkaXRlbSk7CisgICAgICAgICAgICBuZXh0OworICAgICAgICB9CisgICAg
fQorCisgICAgaWYgKCRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZSkgeworICAgICAgICBteSAkbnVt
U2VyaWFsaXplckF0dHJpYnV0ZXMgPSBAeyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+YXR0cmli
dXRlc307CisgICAgICAgIGlmICgkbnVtU2VyaWFsaXplckF0dHJpYnV0ZXMgPT0gMCkgeworICAg
ICAgICAgICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9
KSB7CisgICAgICAgICAgICAgICAgcHVzaChAeyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+YXR0
cmlidXRlc30sICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKaW5k
ZXggOTIwMzNmY2YyMTYyZTJlMjdlMTY3ZDk4Y2E4M2U4YzVhNDEwM2Y0ZC4uMGEzNTNkMmYwMzAx
YzIwMjE1MDE2MjQzYmUwZWYxYjRiNjRiNTcwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9i
amVjdC5jcHAKQEAgLTE0OSw2ICsxNDksMTUgQEAgYm9vbCBKU1Rlc3RBY3RpdmVET01PYmplY3Q6
OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXQKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKK0pTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0RXhjaXRp
bmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEFjdGl2ZURPTU9iamVjdCogY2Fz
dGVkVGhpcykKK3sKKyAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NU
b0RPTVdpbmRvdyhzdGF0ZSwgY2FzdGVkVGhpcy0+d3JhcHBlZCgpKSkKKyAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
KyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuZXhjaXRpbmdBdHRyKCkpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9iamVj
dEV4Y2l0aW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTU4LDExICsx
NjcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RFeGNpdGluZ0F0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRl
c3RBY3RpdmVET01PYmplY3QiLCAiZXhjaXRpbmdBdHRyIik7CiAgICAgfQotICAgIGlmICghQmlu
ZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KHN0YXRlLCBjYXN0ZWRU
aGlzLT53cmFwcGVkKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNW
YWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmV4Y2l0aW5nQXR0cigpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rl
c3RBY3RpdmVET01PYmplY3RFeGNpdGluZ0F0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsK
IH0KIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggNzc4M2UwNDNj
Nzg2NDVjMzE5MjFlOTY0OTQ2MDM0ZDljYWJhYTJkMS4uNGU5ZmFmYzBhOTIzMjkyYzk4ZDU5ODE0
NjYzZjM3MDFiZDI0OTkwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcApA
QCAtMTc2LDYgKzE3NiwxMyBAQCB2b2lkIEpTVGVzdEV2ZW50Q29uc3RydWN0b3I6OmRlc3Ryb3ko
SlNDOjpKU0NlbGwqIGNlbGwpCiAgICAgdGhpc09iamVjdC0+SlNUZXN0RXZlbnRDb25zdHJ1Y3Rv
cjo6fkpTVGVzdEV2ZW50Q29uc3RydWN0b3IoKTsKIH0KIAorSlNWYWx1ZSBqc1Rlc3RFdmVudENv
bnN0cnVjdG9yQXR0cjFHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0RXZlbnRDb25zdHJ1
Y3RvciogY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwu
YXR0cjEoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNUZXN0
RXZlbnRDb25zdHJ1Y3RvckF0dHIxKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0x
ODUsMTIgKzE5MiwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0
cjEoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpcwogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3RFdmVudENvbnN0cnVjdG9yIiwgImF0dHIxIik7CiAgICAgfQotICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0
cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5hdHRyMSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RFdmVudENv
bnN0cnVjdG9yQXR0cjFHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKIH0KIAogCitKU1ZhbHVl
IGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMkdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RFdmVudENvbnN0cnVjdG9yKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNo
ZShzdGF0ZSwgaW1wbC5hdHRyMigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKQEAgLTIwMCwxMyArMjEyLDE4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50
Q29uc3RydWN0b3JBdHRyMihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzCiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdEV2ZW50Q29uc3RydWN0b3IiLCAiYXR0cjIiKTsKICAg
ICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmF0dHIyKCkpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMkdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwog
fQogCiAKICNpZiBFTkFCTEUoU1BFQ0lBTF9FVkVOVCkKK0pTVmFsdWUganNUZXN0RXZlbnRDb25z
dHJ1Y3RvckF0dHIzR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEV2ZW50Q29uc3RydWN0
b3IqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmF0
dHIzKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2
ZW50Q29uc3RydWN0b3JBdHRyMyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjE2
LDkgKzIzMyw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMyhF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzCiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRl
LCAiVGVzdEV2ZW50Q29uc3RydWN0b3IiLCAiYXR0cjMiKTsKICAgICB9Ci0gICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5n
V2l0aENhY2hlKHN0YXRlLCBpbXBsLmF0dHIzKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEV2ZW50Q29uc3Ry
dWN0b3JBdHRyM0dldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNl
cHRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEV4Y2VwdGlvbi5jcHAKaW5kZXggNWQzYTFmOGIwZTk5NjUxMDFkMTc4MWE3NDAxZDE2YzE3ODcx
Y2JkOS4uNjY2NmVhNzkwZTE0NGY5ODE4NmM1NTg1ZWJiYzZmMzU0MGMyY2UzNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEV4Y2VwdGlvbi5jcHAKQEAgLTE0MSw2ICsxNDEsMTMgQEAgYm9vbCBKU1Rlc3RFeGNlcHRpb246
OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQ
cm8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK0pTVmFsdWUganNUZXN0RXhjZXB0aW9uTmFtZUdl
dHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RFeGNlcHRpb24qIGNhc3RlZFRoaXMpCit7Cisg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLm5hbWUoKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNUZXN0RXhjZXB0aW9uTmFtZShFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTUwLDkgKzE1Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdEV4Y2VwdGlvbk5hbWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4g
dGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdEV4Y2VwdGlvbiIsICJuYW1lIik7CiAg
ICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1
ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5uYW1lKCkpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVGVzdEV4Y2VwdGlvbk5hbWVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKIH0KIAogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
R2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCmluZGV4IDRmNzdmOGE0NmIwOGY2ZWU2YmRmMzIxMzhl
OGQzM2I0OWViMzc4MDAuLjg3NmY4ZjkyMWVhMThkYzM2NGY1NjQyYmU4YWY3NGYxOTZmZTY3Yzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RHbG9iYWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCkBAIC0xNTQsNiArMTU0LDEzIEBAIGJvb2wg
SlNUZXN0R2xvYmFsT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBzdGF0ZSwKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK0pTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RHbG9iYWxPYmplY3QqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0
YXRlLCBpbXBsLnJlZ3VsYXJBdHRyaWJ1dGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwog
RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZShFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTYzLDEzICsxNzAsMTggQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWwKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJl
dHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0R2xvYmFsT2JqZWN0IiwgInJl
Z3VsYXJBdHRyaWJ1dGUiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBp
bXBsLnJlZ3VsYXJBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0R2xvYmFsT2JqZWN0UmVndWxh
ckF0dHJpYnV0ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKICNpZiBFTkFCTEUo
VEVTVF9GRUFUVVJFKQorSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1l
QXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCogY2Fz
dGVkVGhpcykKK3sKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuZW5hYmxlZEF0
UnVudGltZUF0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xNzksOSArMTkxLDcgQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0
YXRlLCBFbmMKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVy
biB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0R2xvYmFsT2JqZWN0IiwgImVuYWJs
ZWRBdFJ1bnRpbWVBdHRyaWJ1dGUiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0
YXRlLCBpbXBsLmVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0R2xv
YmFsT2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhp
cykpOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKaW5kZXggNzdiMzgxYTQ0ZDJh
M2MwNGQwNzhkNTE1MGEyNjA5OWU2ZmI2MTc1My4uMzczZjRkYTMwMzczOWU0ZTgyMzIzYzE1NjE3
YWQ2ODVjN2M4ZjA5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKQEAgLTQwOSwyOCArNDA5LDQ1
IEBAIHZvaWQgSlNUZXN0SW50ZXJmYWNlOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogfQog
CiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCitKU1ZhbHVl
IGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY1JlYWRPbmx5QXR0ckdl
dHRlcihFeGVjU3RhdGUqIHN0YXRlKQoreworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIo
VGVzdEludGVyZmFjZTo6aW1wbGVtZW50c1N0YXRpY1JlYWRPbmx5QXR0cigpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rv
ckltcGxlbWVudHNTdGF0aWNSZWFkT25seUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
TnVtYmVyKFRlc3RJbnRlcmZhY2U6OmltcGxlbWVudHNTdGF0aWNSZWFkT25seUF0dHIoKSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljUmVhZE9ubHlB
dHRyR2V0dGVyKHN0YXRlKSk7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIy
KSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCitKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVj
dG9ySW1wbGVtZW50c1N0YXRpY0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSkKK3sKKyAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBUZXN0SW50ZXJmYWNlOjpp
bXBsZW1lbnRzU3RhdGljQXR0cigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgVGVzdEludGVy
ZmFjZTo6aW1wbGVtZW50c1N0YXRpY0F0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0SW50ZXJmYWNlQ29u
c3RydWN0b3JJbXBsZW1lbnRzU3RhdGljQXR0ckdldHRlcihzdGF0ZSkpOwogfQogCiAjZW5kaWYK
IAogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQorSlNWYWx1
ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0
YXRlLCBpbXBsLmltcGxlbWVudHNTdHIxKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIxKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CkBAIC00NDAsMTQgKzQ1NywxOSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRo
cm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RJbnRlcmZhY2UiLCAiaW1wbGVtZW50c1N0
cjEiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmltcGxlbWVu
dHNTdHIxKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIxR2V0dGVyKHN0
YXRlLCBjYXN0ZWRUaGlzKSk7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIy
KSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCitKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVu
dHNTdHIyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhp
cykKK3sKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuaW1wbGVtZW50c1N0cjIo
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJm
YWNlSW1wbGVtZW50c1N0cjIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTQ1Nywx
NCArNDc5LDE3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIy
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoCiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRl
LCAiVGVzdEludGVyZmFjZSIsICJpbXBsZW1lbnRzU3RyMiIpOwogICAgIH0KLSAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJp
bmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuaW1wbGVtZW50c1N0cjIoKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0
SW50ZXJmYWNlSW1wbGVtZW50c1N0cjJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKIH0KIAog
I2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykK
K0pTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjNHZXR0ZXIoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzKQoreworICAgIHJldHVybiBjYXN0ZWRU
aGlzLT5pbXBsZW1lbnRzU3RyMygqc3RhdGUpOworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJ
bnRlcmZhY2VJbXBsZW1lbnRzU3RyMyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAt
NDc0LDEyICs0OTksMTkgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50
c1N0cjMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGgKICAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigq
c3RhdGUsICJUZXN0SW50ZXJmYWNlIiwgImltcGxlbWVudHNTdHIzIik7CiAgICAgfQotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+aW1wbGVtZW50c1N0cjMoKnN0YXRlKSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3Ry
M0dldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShD
b25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQorSlNWYWx1ZSBqc1Rlc3RJbnRlcmZh
Y2VJbXBsZW1lbnRzTm9kZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2Uq
IGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
KyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVj
dCgpLCBpbXBsLmltcGxlbWVudHNOb2RlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNOb2RlKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CkBAIC00ODksMzYgKzUyMSw1MSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9kZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRo
cm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RJbnRlcmZhY2UiLCAiaW1wbGVtZW50c05v
ZGUiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
LCBpbXBsLmltcGxlbWVudHNOb2RlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEludGVyZmFjZUltcGxlbWVu
dHNOb2RlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5B
QkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCitKU1ZhbHVlIGpzVGVzdElu
dGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljUmVhZE9ubHlBdHRyR2V0dGVyKEV4
ZWNTdGF0ZSogc3RhdGUpCit7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihXZWJDb3Jl
OjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxTdGF0aWNSZWFkT25seUF0dHIoKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29u
c3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNSZWFkT25seUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKLSAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzTnVtYmVyKFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbFN0
YXRpY1JlYWRPbmx5QXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1
cHBsZW1lbnRhbFN0YXRpY1JlYWRPbmx5QXR0ckdldHRlcihzdGF0ZSkpOwogfQogCiAjZW5kaWYK
IAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQorSlNWYWx1
ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY0F0dHJHZXR0ZXIo
RXhlY1N0YXRlKiBzdGF0ZSkKK3sKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENh
Y2hlKHN0YXRlLCBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxTdGF0aWNB
dHRyKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdElu
dGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50
YWw6OnN1cHBsZW1lbnRhbFN0YXRpY0F0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0SW50ZXJmYWNlQ29u
c3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNBdHRyR2V0dGVyKHN0YXRlKSk7CiB9CiAKICNlbmRp
ZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCitKU1Zh
bHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjFHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNo
ZShzdGF0ZSwgV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsU3RyMShpbXBs
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJm
YWNlU3VwcGxlbWVudGFsU3RyMShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtNTI4
LDE0ICs1NzUsMTkgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFs
U3RyMShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZQogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0
ZSwgIlRlc3RJbnRlcmZhY2UiLCAic3VwcGxlbWVudGFsU3RyMSIpOwogICAgIH0KLSAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNT
dHJpbmdXaXRoQ2FjaGUoc3RhdGUsIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1l
bnRhbFN0cjEoaW1wbCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjFH
ZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29u
ZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKK0pTVmFsdWUganNUZXN0SW50ZXJmYWNl
U3VwcGxlbWVudGFsU3RyMkdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2Uq
IGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
KyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBXZWJDb3JlOjpU
ZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxTdHIyKGltcGwpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIy
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC01NDUsMTQgKzU5NywxNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAg
ICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdEludGVyZmFjZSIs
ICJzdXBwbGVtZW50YWxTdHIyIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0
ZSwgV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsU3RyMihpbXBsKSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMkdldHRlcihzdGF0ZSwgY2FzdGVk
VGhpcykpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxF
KENvbmRpdGlvbjEyKQorSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzR2V0
dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcykKK3sKKyAg
ICByZXR1cm4gY2FzdGVkVGhpcy0+c3VwcGxlbWVudGFsU3RyMygqc3RhdGUpOworfQorCiBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CkBAIC01NjIsMTIgKzYxNywxOSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhy
b3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdEludGVyZmFjZSIsICJzdXBwbGVtZW50YWxT
dHIzIik7CiAgICAgfQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+c3Vw
cGxlbWVudGFsU3RyMygqc3RhdGUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVz
dEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjNHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKIH0K
IAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24x
MikKK0pTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZUdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3Rh
dGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFs
OjpzdXBwbGVtZW50YWxOb2RlKGltcGwpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2RlKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CkBAIC01NzcsOSArNjM5LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93
R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RJbnRlcmZhY2UiLCAic3VwcGxlbWVudGFsTm9k
ZSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCks
IFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbE5vZGUoaW1wbCkpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRo
aXMpKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
LmNwcAppbmRleCAzZmYzZTY2NzZhMTI4YzY1YzQ2YmQzYTIyMzVlMmNiZmRmODYxYzRkLi40YWI5
OTlkMDUxNjU0MzE1NDY5ODdjODQ2MWM2ZGRjMzA3ZmVjZjlkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAKQEAgLTEzMiw2ICsxMzIsMTEgQEAgdm9pZCBKU1Rl
c3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKICAgICB0
aGlzT2JqZWN0LT5KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6fkpTVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yKCk7CiB9CiAKK0pTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0
QXR0cmlidXRlQ3VzdG9tR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yKiBjYXN0ZWRUaGlzKQoreworICAgIHJldHVybiBjYXN0ZWRUaGlzLT50ZXN0QXR0
cmlidXRlQ3VzdG9tKCpzdGF0ZSk7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEpTQnVpbHRp
bkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZUN1c3RvbShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwpAQCAtMTQxLDEwICsxNDYsMTUgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0SlNCdWlsdGlu
Q29uc3RydWN0b3JUZXN0QXR0cmlidXRlQ3VzdG9tKEV4ZWNTdGF0ZSogc3RhdGUsIEUKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5
cGVFcnJvcigqc3RhdGUsICJUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IiLCAidGVzdEF0dHJpYnV0
ZUN1c3RvbSIpOwogICAgIH0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMt
PnRlc3RBdHRyaWJ1dGVDdXN0b20oKnN0YXRlKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVDdXN0b21HZXR0ZXIoc3Rh
dGUsIGNhc3RlZFRoaXMpKTsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVj
dG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEpT
QnVpbHRpbkNvbnN0cnVjdG9yKiBjYXN0ZWRUaGlzKQoreworICAgIHJldHVybiBjYXN0ZWRUaGlz
LT50ZXN0QXR0cmlidXRlUldDdXN0b20oKnN0YXRlKTsKK30KKwogRW5jb2RlZEpTVmFsdWUganNU
ZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b20oRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE1NCw3ICsxNjQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3RvbShFeGVjU3RhdGUqIHN0
YXRlLAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRo
cm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciIsICJ0
ZXN0QXR0cmlidXRlUldDdXN0b20iKTsKICAgICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShjYXN0ZWRUaGlzLT50ZXN0QXR0cmlidXRlUldDdXN0b20oKnN0YXRlKSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVS
V0N1c3RvbUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAppbmRl
eCAzMzEzZDJkYmU4NjMxNTg1NDVkMzZhM2E0ODg5ZGVmZjdkMWEyNTE0Li42MTM5YWU2MWFmNjE4
ZTg1ZjhiNDUyMmMxNTViZTAwYWMwN2JiNzMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCkBAIC0yNSw2ICsyNSw3
IEBACiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rv
ci5oIgogI2luY2x1ZGUgIkpTRE9NSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJPYmplY3RDb25zdHJ1
Y3Rvci5oIgogI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNp
bmNsdWRlIDxydW50aW1lL0pTU3RyaW5nLmg+CkBAIC00OSw2ICs1MCw4IEBAIGJvb2wgc2V0SlNU
ZXN0Tm9kZU5hbWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlCiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVDb25zdHJ1Y3RvcihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
IGJvb2wgc2V0SlNUZXN0Tm9kZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEV4ZWNTdGF0ZSopOwor
CiBjbGFzcyBKU1Rlc3ROb2RlUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVj
dCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKQEAg
LTEwNyw2ICsxMTAsNyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0Tm9kZVBy
b3RvdHlwZVRhYmxlVmFsdWVzW10gPQogICAgIHsgImtleXMiLCBKU0M6OkZ1bmN0aW9uLCBOb0lu
dHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE5v
ZGVQcm90b3R5cGVGdW5jdGlvbktleXMpLCAoaW50cHRyX3QpICgwKSB9IH0sCiAgICAgeyAidmFs
dWVzIiwgSlNDOjpGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0
PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25WYWx1ZXMpLCAoaW50
cHRyX3QpICgwKSB9IH0sCiAgICAgeyAiZm9yRWFjaCIsIEpTQzo6RnVuY3Rpb24sIE5vSW50cmlu
c2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0Tm9kZVBy
b3RvdHlwZUZ1bmN0aW9uRm9yRWFjaCksIChpbnRwdHJfdCkgKDEpIH0gfSwKKyAgICB7ICJ0b0pT
T04iLCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8
TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTiksIChpbnRw
dHJfdCkgKDApIH0gfSwKIH07CiAKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3ROb2RlUHJvdG90eXBl
OjpzX2luZm8gPSB7ICJUZXN0Tm9kZVByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFU
RV9NRVRIT0RfVEFCTEUoSlNUZXN0Tm9kZVByb3RvdHlwZSkgfTsKQEAgLTEzNSw2ICsxMzksMTMg
QEAgSlNPYmplY3QqIEpTVGVzdE5vZGU6OnByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCiAgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3ROb2RlPih2
bSwgZ2xvYmFsT2JqZWN0KTsKIH0KIAorSlNWYWx1ZSBqc1Rlc3ROb2RlTmFtZUdldHRlcihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3ROb2RlKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dp
dGhDYWNoZShzdGF0ZSwgaW1wbC5uYW1lKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVOYW1lKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CkBAIC0xNDQsOSArMTU1LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9kZU5hbWUoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXIKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJv
cigqc3RhdGUsICJUZXN0Tm9kZSIsICJuYW1lIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhD
YWNoZShzdGF0ZSwgaW1wbC5uYW1lKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE5vZGVOYW1lR2V0dGVyKHN0
YXRlLCBjYXN0ZWRUaGlzKSk7CiB9CiAKIApAQCAtMTkyLDYgKzIwMSwyMSBAQCBKU1ZhbHVlIEpT
VGVzdE5vZGU6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKICAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0Tm9kZUNvbnN0
cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVj
dCkpOwogfQogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5
cGVGdW5jdGlvblRvSlNPTihFeGVjU3RhdGUqIHN0YXRlKQoreworICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOworICAgIGF1dG8gY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0Tm9kZSo+KHRoaXNWYWx1ZSk7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkKKyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0Tm9k
ZSIsICJ0b0pTT04iKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMs
IEpTVGVzdE5vZGU6OmluZm8oKSk7CisKKyAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0
RW1wdHlPYmplY3Qoc3RhdGUpOworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm5hbWUiKSwganNU
ZXN0Tm9kZU5hbWVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKKworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKK30KKwogdXNpbmcgVGVzdE5vZGVJdGVyYXRvciA9IEpTRE9N
SXRlcmF0b3I8SlNUZXN0Tm9kZT47CiB1c2luZyBUZXN0Tm9kZUl0ZXJhdG9yUHJvdG90eXBlID0g
SlNET01JdGVyYXRvclByb3RvdHlwZTxKU1Rlc3ROb2RlPjsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRl
dGVybWluaXN0aWMuY3BwCmluZGV4IGFkMTQ0N2JlNTJiMjFkMTU3MGE1NzljZDEyMzIwMGU3ODdi
MDEwMTcuLmRhYWYxYjk3YmZkODY0YTUxNTM2NmE2ZWRlYTRkYjA3MjJlYzQ0MWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRl
cm1pbmlzdGljLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5jcHAKQEAgLTE0NCwxNSArMTQ0LDEyIEBAIHZvaWQg
SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYzo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKICAgICB0
aGlzT2JqZWN0LT5KU1Rlc3ROb25kZXRlcm1pbmlzdGljOjp+SlNUZXN0Tm9uZGV0ZXJtaW5pc3Rp
YygpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJt
aW5pc3RpY1JlYWRvbmx5QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKKyNpZiBFTkFCTEUoV0VCX1JFUExBWSkKK0pTVmFsdWUganNU
ZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNSZWFkb25seUF0dHJHZXR0ZXIoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY2FzdGVkVGhpcykKKyNlbHNl
CitKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljUmVhZG9ubHlB
dHRyR2V0dGVyKEpTVGVzdE5vbmRldGVybWluaXN0aWMqIGNhc3RlZFRoaXMpCisjZW5kaWYKIHsK
LSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwot
ICAgIEpTVmFsdWUgZGVjb2RlZFRoaXNWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
OwotICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE5vbmRldGVybWlu
aXN0aWMqPihkZWNvZGVkVGhpc1ZhbHVlKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0Tm9u
ZGV0ZXJtaW5pc3RpYyIsICJub25kZXRlcm1pbmlzdGljUmVhZG9ubHlBdHRyIik7Ci0gICAgfQog
I2lmIEVOQUJMRShXRUJfUkVQTEFZKQogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIElucHV0Q3Vyc29yJiBjdXJzb3Ig
PSBnbG9iYWxPYmplY3QtPmlucHV0Q3Vyc29yKCk7CkBAIC0xNjEsNyArMTU4LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNSZWFkb25seUF0
dHIoRXhlY1N0YXRlKiBzdGEKICAgICAgICAgaW50MzJfdCBtZW1vaXplZFJlc3VsdCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKS5ub25kZXRlcm1pbmlzdGljUmVhZG9ubHlBdHRyKCk7CiAgICAgICAg
IGN1cnNvci5hcHBlbmRJbnB1dDxNZW1vaXplZERPTVJlc3VsdDxpbnQzMl90Pj4oYmluZGluZ05h
bWUuZ2V0KCkuc3RyaW5nKCksIG1lbW9pemVkUmVzdWx0LCAwKTsKICAgICAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc051bWJlcihtZW1vaXplZFJlc3VsdCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBp
ZiAoY3Vyc29yLmlzUmVwbGF5aW5nKCkpIHsKQEAgLTE2OSwyNiArMTY2LDM1IEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljUmVhZG9ubHlBdHRy
KEV4ZWNTdGF0ZSogc3RhCiAgICAgICAgIE1lbW9pemVkRE9NUmVzdWx0QmFzZSogaW5wdXQgPSBj
dXJzb3IuZmV0Y2hJbnB1dDxNZW1vaXplZERPTVJlc3VsdEJhc2U+KCk7CiAgICAgICAgIGlmIChp
bnB1dCAmJiBpbnB1dC0+Y29udmVydFRvPGludDMyX3Q+KG1lbW9pemVkUmVzdWx0KSkgewogICAg
ICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihtZW1vaXplZFJlc3VsdCk7Ci0gICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwu
bm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5QXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotCi1FbmNvZGVkSlNWYWx1ZSBq
c1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlz
VmFsdWUpOwogICAgIEpTVmFsdWUgZGVjb2RlZFRoaXNWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpOwogICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE5v
bmRldGVybWluaXN0aWMqPihkZWNvZGVkVGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7Ci0gICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUs
ICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIsICJub25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0ciIp
OworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE5vbmRl
dGVybWluaXN0aWMiLCAibm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5QXR0ciIpOwogICAgIH0KICNp
ZiBFTkFCTEUoV0VCX1JFUExBWSkKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE5v
bmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljUmVhZG9ubHlBdHRyR2V0dGVyKHN0YXRlLCBj
YXN0ZWRUaGlzKSk7CisjZWxzZQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0Tm9u
ZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNSZWFkb25seUF0dHJHZXR0ZXIoY2FzdGVkVGhp
cykpOworI2VuZGlmCit9CisKKworSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0
ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0Tm9u
ZGV0ZXJtaW5pc3RpYyogY2FzdGVkVGhpcykKK3sKKyNpZiBFTkFCTEUoV0VCX1JFUExBWSkKICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RhdGUtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKTsKICAgICBJbnB1dEN1cnNvciYgY3Vyc29yID0gZ2xvYmFsT2JqZWN0LT5pbnB1dEN1cnNv
cigpOwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBBdG9taWNTdHJpbmc+IGJpbmRp
bmdOYW1lKCJUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5ub25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0
ciIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwpAQCAtMTk2LDcgKzIwMiw3
IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGlj
V3JpdGVhYmxlQXR0cihFeGVjU3RhdGUqIHN0CiAgICAgICAgIFN0cmluZyBtZW1vaXplZFJlc3Vs
dCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKS5ub25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0cigp
OwogICAgICAgICBjdXJzb3IuYXBwZW5kSW5wdXQ8TWVtb2l6ZWRET01SZXN1bHQ8U3RyaW5nPj4o
YmluZGluZ05hbWUuZ2V0KCkuc3RyaW5nKCksIG1lbW9pemVkUmVzdWx0LCAwKTsKICAgICAgICAg
SlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQp
OwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQogCiAgICAgaWYgKGN1cnNvci5pc1JlcGxheWluZygpKSB7CkBAIC0y
MDQsMjUgKzIxMCwzMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9u
ZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIoRXhlY1N0YXRlKiBzdAogICAgICAgICBNZW1vaXpl
ZERPTVJlc3VsdEJhc2UqIGlucHV0ID0gY3Vyc29yLmZldGNoSW5wdXQ8TWVtb2l6ZWRET01SZXN1
bHRCYXNlPigpOwogICAgICAgICBpZiAoaW5wdXQgJiYgaW5wdXQtPmNvbnZlcnRUbzxTdHJpbmc+
KG1lbW9pemVkUmVzdWx0KSkgewogICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmlu
Z1dpdGhDYWNoZShzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAg
ICAgfQogICAgIH0KICNlbmRpZgogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5u
b25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotCi1FbmNvZGVkSlNWYWx1ZSBq
c1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCitFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJs
ZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhp
c1ZhbHVlKTsKICAgICBKU1ZhbHVlIGRlY29kZWRUaGlzVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKTsKICAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RO
b25kZXRlcm1pbmlzdGljKj4oZGVjb2RlZFRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewotICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRl
LCAiVGVzdE5vbmRldGVybWluaXN0aWMiLCAibm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHIi
KTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3ROb25k
ZXRlcm1pbmlzdGljIiwgIm5vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyIik7CiAgICAgfQor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVy
bWluaXN0aWNXcml0ZWFibGVBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKKwor
SlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0
dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY2FzdGVk
VGhpcykKK3sKICNpZiBFTkFCTEUoV0VCX1JFUExBWSkKICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKICAgICBJbnB1dEN1cnNv
ciYgY3Vyc29yID0gZ2xvYmFsT2JqZWN0LT5pbnB1dEN1cnNvcigpOwpAQCAtMjMxLDcgKzI0Miw3
IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGlj
RXhjZXB0aW9uQXR0cihFeGVjU3RhdGUqIHN0CiAgICAgICAgIFN0cmluZyBtZW1vaXplZFJlc3Vs
dCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKS5ub25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0cigp
OwogICAgICAgICBjdXJzb3IuYXBwZW5kSW5wdXQ8TWVtb2l6ZWRET01SZXN1bHQ8U3RyaW5nPj4o
YmluZGluZ05hbWUuZ2V0KCkuc3RyaW5nKCksIG1lbW9pemVkUmVzdWx0LCAwKTsKICAgICAgICAg
SlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQp
OwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQogCiAgICAgaWYgKGN1cnNvci5pc1JlcGxheWluZygpKSB7CkBAIC0y
MzksMjUgKzI1MCwzMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9u
ZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHIoRXhlY1N0YXRlKiBzdAogICAgICAgICBNZW1vaXpl
ZERPTVJlc3VsdEJhc2UqIGlucHV0ID0gY3Vyc29yLmZldGNoSW5wdXQ8TWVtb2l6ZWRET01SZXN1
bHRCYXNlPigpOwogICAgICAgICBpZiAoaW5wdXQgJiYgaW5wdXQtPmNvbnZlcnRUbzxTdHJpbmc+
KG1lbW9pemVkUmVzdWx0KSkgewogICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmlu
Z1dpdGhDYWNoZShzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAg
ICAgfQogICAgIH0KICNlbmRpZgogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5u
b25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotCi1FbmNvZGVkSlNWYWx1ZSBq
c1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4Y2VwdGlvbkF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0V4
Y2VwdGlvbkF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0odGhpc1ZhbHVlKTsKICAgICBKU1ZhbHVlIGRlY29kZWRUaGlzVmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKTsKICAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3ROb25kZXRlcm1pbmlzdGljKj4oZGVjb2RlZFRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkgewotICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3Io
KnN0YXRlLCAiVGVzdE5vbmRldGVybWluaXN0aWMiLCAibm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4
Y2VwdGlvbkF0dHIiKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0
ZSwgIlRlc3ROb25kZXRlcm1pbmlzdGljIiwgIm5vbmRldGVybWluaXN0aWNFeGNlcHRpb25BdHRy
Iik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0Tm9uZGV0ZXJtaW5p
c3RpY05vbmRldGVybWluaXN0aWNFeGNlcHRpb25BdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlz
KSk7Cit9CisKKworSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3Rp
Y0dldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0Tm9uZGV0
ZXJtaW5pc3RpYyogY2FzdGVkVGhpcykKK3sKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICNp
ZiBFTkFCTEUoV0VCX1JFUExBWSkKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
c3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKQEAgLTI2OCw3ICsyODQsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4Y2Vw
dGlvbkF0dHIoRXhlY1N0YQogICAgICAgICBjdXJzb3IuYXBwZW5kSW5wdXQ8TWVtb2l6ZWRET01S
ZXN1bHQ8U3RyaW5nPj4oYmluZGluZ05hbWUuZ2V0KCkuc3RyaW5nKCksIG1lbW9pemVkUmVzdWx0
LCBlYyk7CiAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUs
IG1lbW9pemVkUmVzdWx0KTsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7Ci0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CiAKICAgICBpZiAoY3Vyc29yLmlzUmVwbGF5aW5nKCkpIHsKQEAgLTI3Nywy
NiArMjkzLDMxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRl
cm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0cihFeGVjU3RhCiAgICAgICAgIGlmIChpbnB1dCAm
JiBpbnB1dC0+Y29udmVydFRvPFN0cmluZz4obWVtb2l6ZWRSZXN1bHQpKSB7CiAgICAgICAgICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBtZW1vaXplZFJlc3Vs
dCk7CiAgICAgICAgICAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGlucHV0LT5leGNlcHRpb25D
b2RlKCkpOwotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgIH0KICNlbmRpZgogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBq
c1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5ub25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0
aW9uQXR0cihlYykpOwogICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi0KLUVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljU2V0dGVy
RXhjZXB0aW9uQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25k
ZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVmFsdWUgZGVjb2RlZFRo
aXNWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpOwogICAgIGF1dG8qIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE5vbmRldGVybWluaXN0aWMqPihkZWNvZGVkVGhpc1Zh
bHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7Ci0gICAgICAgIHJldHVybiB0
aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIsICJub25k
ZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0ciIpOworICAgICAgICByZXR1cm4gdGhyb3dH
ZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE5vbmRldGVybWluaXN0aWMiLCAibm9uZGV0ZXJt
aW5pc3RpY0dldHRlckV4Y2VwdGlvbkF0dHIiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4Y2Vw
dGlvbkF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworCitKU1ZhbHVlIGpzVGVz
dE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0ckdldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiBjYXN0ZWRUaGlzKQor
ewogI2lmIEVOQUJMRShXRUJfUkVQTEFZKQogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIElucHV0Q3Vyc29yJiBjdXJz
b3IgPSBnbG9iYWxPYmplY3QtPmlucHV0Q3Vyc29yKCk7CkBAIC0zMDUsNyArMzI2LDcgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNTZXR0ZXJF
eGNlcHRpb25BdHRyKEV4ZWNTdGEKICAgICAgICAgU3RyaW5nIG1lbW9pemVkUmVzdWx0ID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpLm5vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyKCk7
CiAgICAgICAgIGN1cnNvci5hcHBlbmRJbnB1dDxNZW1vaXplZERPTVJlc3VsdDxTdHJpbmc+Pihi
aW5kaW5nTmFtZS5nZXQoKS5zdHJpbmcoKSwgbWVtb2l6ZWRSZXN1bHQsIDApOwogICAgICAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBtZW1vaXplZFJlc3VsdCk7
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAKICAgICBpZiAoY3Vyc29yLmlzUmVwbGF5aW5nKCkpIHsKQEAgLTMx
MywxMyArMzM0LDI1IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25k
ZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0cihFeGVjU3RhCiAgICAgICAgIE1lbW9pemVk
RE9NUmVzdWx0QmFzZSogaW5wdXQgPSBjdXJzb3IuZmV0Y2hJbnB1dDxNZW1vaXplZERPTVJlc3Vs
dEJhc2U+KCk7CiAgICAgICAgIGlmIChpbnB1dCAmJiBpbnB1dC0+Y29udmVydFRvPFN0cmluZz4o
bWVtb2l6ZWRSZXN1bHQpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5n
V2l0aENhY2hlKHN0YXRlLCBtZW1vaXplZFJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAg
ICB9CiAgICAgfQogI2VuZGlmCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLm5v
bmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc1Zh
bHVlKTsKKyAgICBKU1ZhbHVlIGRlY29kZWRUaGlzVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKTsKKyAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3ROb25k
ZXRlcm1pbmlzdGljKj4oZGVjb2RlZFRoaXNWYWx1ZSk7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkgeworICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAi
VGVzdE5vbmRldGVybWluaXN0aWMiLCAibm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0
dHIiKTsKKyAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3ROb25kZXRlcm1p
bmlzdGljTm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXIoc3RhdGUsIGNh
c3RlZFRoaXMpKTsKIH0KIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCmluZGV4IGE2YmQyYzliMDY4YTk0Y2YwNDEwMDAx
NTE2YzFiZTVmNWE3NzhjN2MuLmRhOWUzMzg2NjExNmFiMDI4MTc3YWYyN2FkNDE3MmVjZTFkZmQy
NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RPYmouY3BwCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSAiSlNUZXN0U3ViT2Jq
LmgiCiAjaW5jbHVkZSAiSlNYUGF0aE5TUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJMaWZlY3ljbGVD
YWxsYmFja1F1ZXVlLmgiCisjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRl
ICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJTVkdQb2ludC5oIgpAQCAtODgwLDYgKzg4MSw4IEBAIGJvb2wgc2V0SlNUZXN0T2Jq
UHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2Rl
ZEpTVmFsCiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogYm9vbCBz
ZXRKU1Rlc3RPYmpDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEV4ZWNTdGF0ZSopOworCiBjbGFzcyBK
U1Rlc3RPYmpQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1Ymxp
YzoKICAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwpAQCAtMTI5OSw2ICsx
MzAyLDcgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE9ialByb3RvdHlwZVRh
YmxlVmFsdWVzW10gPQogICAgIHsgIkNPTlNUX1ZBTFVFXzE0IiwgRG9udERlbGV0ZSB8IFJlYWRP
bmx5IHwgQ29uc3RhbnRJbnRlZ2VyLCBOb0ludHJpbnNpYywgeyAobG9uZyBsb25nKSgweDFhYmMp
IH0gfSwKICAgICB7ICJDT05TVF9KQVZBU0NSSVBUIiwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwg
Q29uc3RhbnRJbnRlZ2VyLCBOb0ludHJpbnNpYywgeyAobG9uZyBsb25nKSgxNSkgfSB9LAogICAg
IHsgInJlYWRvbmx5IiwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgQ29uc3RhbnRJbnRlZ2VyLCBO
b0ludHJpbnNpYywgeyAobG9uZyBsb25nKSgwKSB9IH0sCisgICAgeyAidG9KU09OIiwgSlNDOjpG
dW5jdGlvbiwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0
aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvSlNPTiksIChpbnRwdHJfdCkgKDApIH0g
fSwKIH07CiAKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RPYmpQcm90b3R5cGU6OnNfaW5mbyA9IHsg
IlRlc3RPYmplY3RQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEpTVGVzdE9ialByb3RvdHlwZSkgfTsKQEAgLTEzNzUsNiArMTM3OSwxMyBAQCBib29sIEpT
VGVzdE9iajo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIHN0YXRlLCB1bgogICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4KHRoaXNPYmplY3QsIHN0YXRlLCBpbmRleCwgc2xvdCk7CiB9CiAKK0pTVmFsdWUganNUZXN0
T2JqUmVhZE9ubHlMb25nQXR0ckdldHRlcihKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzTnVtYmVyKGltcGwucmVhZE9ubHlMb25nQXR0cigpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seUxvbmdBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xMzg0LDEyICsxMzk1LDE3IEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialJlYWRPbmx5TG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1
cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJyZWFkT25seUxvbmdB
dHRyIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0g
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLnJlYWRPbmx5TG9uZ0F0dHIoKSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNUZXN0T2JqUmVhZE9ubHlMb25nQXR0ckdldHRlcihjYXN0ZWRUaGlzKSk7CiB9CiAK
IAorSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShz
dGF0ZSwgaW1wbC5yZWFkT25seVN0cmluZ0F0dHIoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlTdHJpbmdBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xMzk5LDEyICsxNDE1LDE3IEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialJlYWRPbmx5U3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1
cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJyZWFkT25seVN0cmlu
Z0F0dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
LSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnJlYWRP
bmx5U3RyaW5nQXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpSZWFkT25seVN0cmluZ0F0dHJHZXR0
ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5
VGVzdE9iakF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
KQoreworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgSlNWYWx1
ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5y
ZWFkT25seVRlc3RPYmpBdHRyKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5VGVzdE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKQEAgLTE0MTQsMzAgKzE0MzUsNDMgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UmVhZE9ubHlUZXN0T2JqQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGkK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dl
dHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJlYWRPbmx5VGVzdE9iakF0dHIiKTsK
ICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBs
LnJlYWRPbmx5VGVzdE9iakF0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqUmVhZE9ubHlUZXN0T2Jq
QXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2Jq
Q29uc3RydWN0b3JTdGF0aWNSZWFkT25seUxvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUp
Cit7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihUZXN0T2JqOjpzdGF0aWNSZWFkT25s
eUxvbmdBdHRyKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9iakNvbnN0cnVjdG9yU3RhdGljUmVhZE9ubHlMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwotICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNOdW1iZXIoVGVzdE9iajo6c3RhdGljUmVhZE9ubHlMb25nQXR0cigpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1JlYWRPbmx5TG9uZ0F0dHJHZXR0ZXIoc3Rh
dGUpKTsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3RyaW5nQXR0
ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlKQoreworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJp
bmdXaXRoQ2FjaGUoc3RhdGUsIFRlc3RPYmo6OnN0YXRpY1N0cmluZ0F0dHIoKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JTdGF0
aWNTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRoaXNWYWx1ZSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShz
dGF0ZSwgVGVzdE9iajo6c3RhdGljU3RyaW5nQXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpDb25z
dHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHJHZXR0ZXIoc3RhdGUpKTsKIH0KIAogCitKU1ZhbHVlIGpz
VGVzdE9iakNvbnN0cnVjdG9yVGVzdFN1Yk9iakdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgcmV0dXJuIEpTVGVzdFN1Yk9iajo6Z2V0Q29uc3Ry
dWN0b3Ioc3RhdGUtPnZtKCksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKK30KKwogRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JUZXN0U3ViT2JqKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CkBAIC0xNDQ3LDEwICsxNDgxLDIwIEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9iakNvbnN0cnVjdG9yVGVzdFN1Yk9iaihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4g
dGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJUZXN0U3ViT2JqIik7CiAg
ICAgfQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U3ViT2JqOjpnZXRDb25zdHJ1
Y3RvcihzdGF0ZS0+dm0oKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakNvbnN0cnVjdG9yVGVzdFN1Yk9iakdldHRlcihz
dGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqVGVzdFN1Yk9iakVu
YWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMpCit7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzLT53cmFwcGVk
KCkuZnJhbWUoKSkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFNldHRpbmdz
JiBzZXR0aW5ncyA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKS5mcmFtZSgpLT5zZXR0aW5ncygpOwor
ICAgIGlmICghc2V0dGluZ3MudGVzdFNldHRpbmdFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOworICAgIHJldHVybiBKU1Rlc3RTdWJPYmo6OmdldENvbnN0cnVjdG9yKHN0
YXRlLT52bSgpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7Cit9CisKIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3IoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE0NjAsMTUgKzE1MDQsMTcgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIHN0YXRlLAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAg
cmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiVGVzdFN1Yk9i
akVuYWJsZWRCeVNldHRpbmciKTsKICAgICB9Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
LT53cmFwcGVkKCkuZnJhbWUoKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7Ci0gICAgU2V0dGluZ3MmIHNldHRpbmdzID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpLmZyYW1lKCktPnNldHRpbmdzKCk7Ci0gICAgaWYgKCFzZXR0aW5ncy50ZXN0U2V0dGluZ0Vu
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdFN1Yk9iajo6Z2V0Q29uc3RydWN0b3Io
c3RhdGUtPnZtKCksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1Rlc3RPYmpUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVj
dG9yR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpF
bnVtQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7
CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmVudW1BdHRyKCkpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakVudW1BdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xNDc4LDEyICsxNTI0LDE3IEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakVudW1BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAg
ICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJlbnVtQXR0
ciIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuZW51bUF0dHIo
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNUZXN0T2JqRW51bUF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsK
IH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iakJ5dGVBdHRyR2V0dGVyKEpTVGVzdE9iaiogY2FzdGVk
VGhpcykKK3sKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5ieXRlQXR0cigpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpCeXRlQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwpAQCAtMTQ5MywxMiArMTU0NCwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpCeXRlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFBybwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJu
IHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiYnl0ZUF0dHIiKTsKICAg
ICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuYnl0ZUF0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqQnl0
ZUF0dHJHZXR0ZXIoY2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqT2N0ZXRB
dHRyR2V0dGVyKEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5v
Y3RldEF0dHIoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqT2N0ZXRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xNTA4LDEy
ICsxNTY0LDE3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak9jdGV0QXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByCiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRl
LCAiVGVzdE9iaiIsICJvY3RldEF0dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwub2N0
ZXRBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iak9jdGV0QXR0ckdldHRlcihjYXN0ZWRUaGlzKSk7
CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpTaG9ydEF0dHJHZXR0ZXIoSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzKQoreworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLnNob3J0QXR0cigpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTaG9ydEF0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE1MjMsMTIgKzE1ODQsMTcgQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHIKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJl
dHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInNob3J0QXR0ciIp
OwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5zaG9ydEF0dHIoKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0
T2JqU2hvcnRBdHRyR2V0dGVyKGNhc3RlZFRoaXMpKTsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9i
akNsYW1wZWRTaG9ydEF0dHJHZXR0ZXIoSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBq
c051bWJlcihpbXBsLmNsYW1wZWRTaG9ydEF0dHIoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwpAQCAtMTUzOCwxMiArMTYwNCwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJu
IHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiY2xhbXBlZFNob3J0QXR0
ciIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5jbGFtcGVkU2hvcnRBdHRyKCkpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVGVzdE9iakNsYW1wZWRTaG9ydEF0dHJHZXR0ZXIoY2FzdGVkVGhpcykpOwogfQogCiAK
K0pTVmFsdWUganNUZXN0T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyR2V0dGVyKEpTVGVzdE9iaiog
Y2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwor
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5lbmZvcmNlUmFuZ2VTaG9ydEF0dHIo
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqRW5m
b3JjZVJhbmdlU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xNTUz
LDEyICsxNjI0LDE3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakVuZm9yY2VSYW5nZVNob3J0
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0CiAgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0
YXRlLCAiVGVzdE9iaiIsICJlbmZvcmNlUmFuZ2VTaG9ydEF0dHIiKTsKICAgICB9Ci0gICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
TnVtYmVyKGltcGwuZW5mb3JjZVJhbmdlU2hvcnRBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakVu
Zm9yY2VSYW5nZVNob3J0QXR0ckdldHRlcihjYXN0ZWRUaGlzKSk7CiB9CiAKIAorSlNWYWx1ZSBq
c1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0ckdldHRlcihKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7
CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzTnVtYmVyKGltcGwudW5zaWduZWRTaG9ydEF0dHIoKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE1NjgsMTIgKzE2NDQsMTcgQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1YKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAg
ICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInVuc2ln
bmVkU2hvcnRBdHRyIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLnVuc2lnbmVkU2hvcnRB
dHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyR2V0dGVyKGNhc3RlZFRo
aXMpKTsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iakxvbmdBdHRyR2V0dGVyKEpTVGVzdE9iaiog
Y2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwor
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5sb25nQXR0cigpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpMb25nQXR0cihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTU4MywxMiArMTY2NCwxNyBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFBybwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAg
cmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibG9uZ0F0dHIi
KTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwubG9uZ0F0dHIoKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0
T2JqTG9uZ0F0dHJHZXR0ZXIoY2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2Jq
TG9uZ0xvbmdBdHRyR2V0dGVyKEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1i
ZXIoaW1wbC5sb25nTG9uZ0F0dHIoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CkBAIC0xNTk4LDEyICsxNjg0LDE3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakxvbmdM
b25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsCiAgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJU
eXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJsb25nTG9uZ0F0dHIiKTsKICAgICB9Ci0gICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzTnVtYmVyKGltcGwubG9uZ0xvbmdBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakxvbmdMb25n
QXR0ckdldHRlcihjYXN0ZWRUaGlzKSk7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25l
ZExvbmdMb25nQXR0ckdldHRlcihKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVt
YmVyKGltcGwudW5zaWduZWRMb25nTG9uZ0F0dHIoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE2MTMsMTIgKzE3MDQsMTcgQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGgKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJl
dHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInVuc2lnbmVkTG9u
Z0xvbmdBdHRyIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLnVuc2lnbmVkTG9uZ0xvbmdB
dHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyR2V0dGVyKGNhc3Rl
ZFRoaXMpKTsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhD
YWNoZShzdGF0ZSwgaW1wbC5zdHJpbmdBdHRyKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKQEAgLTE2MjgsMTIgKzE3MjQsMTcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
U3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFAK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dl
dHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInN0cmluZ0F0dHIiKTsKICAgICB9Ci0g
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnN0cmluZ0F0dHIoKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNUZXN0T2JqU3RyaW5nQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKK0pT
VmFsdWUganNUZXN0T2JqVGVzdE9iakF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgaW1wbC50ZXN0T2JqQXR0cigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0T2JqQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwpAQCAtMTY0MywxMiArMTc0NCwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpU
ZXN0T2JqQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsCiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ0ZXN0T2JqQXR0ciIpOwogICAgIH0KLSAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0
ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwudGVzdE9iakF0
dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqVGVzdE9iakF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRo
aXMpKTsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialRlc3ROdWxsYWJsZU9iakF0dHJHZXR0ZXIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0
YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC50ZXN0TnVsbGFibGVPYmpBdHRy
KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialRl
c3ROdWxsYWJsZU9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE2NTgs
MTIgKzE3NjQsMTcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGkKICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3Rh
dGUsICJUZXN0T2JqIiwgInRlc3ROdWxsYWJsZU9iakF0dHIiKTsKICAgICB9Ci0gICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMo
c3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnRlc3ROdWxsYWJsZU9iakF0
dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0ckdldHRlcihzdGF0ZSwg
Y2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRy
R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwubGVuaWVudFRlc3RP
YmpBdHRyKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iakxlbmllbnRUZXN0T2JqQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAt
MTY3MywxMiArMTc4NCwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpMZW5pZW50VGVzdE9i
akF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpcwogICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpLCBpbXBsLmxlbmllbnRUZXN0T2JqQXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpMZW5p
ZW50VGVzdE9iakF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKIH0KIAogCitKU1ZhbHVl
IGpzVGVzdE9ialVuZm9yZ2VhYmxlQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnVu
Zm9yZ2VhYmxlQXR0cigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpVbmZvcmdlYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
QEAgLTE2ODgsMTIgKzE4MDQsMTcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVW5mb3JnZWFi
bGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWwKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVF
cnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInVuZm9yZ2VhYmxlQXR0ciIpOwogICAgIH0KLSAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwudW5mb3JnZWFibGVBdHRyKCkpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVGVzdE9ialVuZm9yZ2VhYmxlQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQog
CiAKK0pTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdH
ZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBq
c1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5zdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0
eVN0cmluZygpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwpAQCAtMTcwMywxMiArMTgyNCwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhFeGVjU3RhdGUqIHN0YXRl
LCBFbgogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRo
cm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAic3RyaW5nQXR0clRyZWF0aW5n
TnVsbEFzRW1wdHlTdHJpbmciKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRl
LCBpbXBsLnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKCkpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nR2V0dGVyKHN0YXRlLCBj
YXN0ZWRUaGlzKSk7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpYTUxPYmpBdHRyR2V0dGVyKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0
ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwueG1sT2JqQXR0cigpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpYTUxPYmpBdHRyKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xNzE4LDEyICsxODQ0LDE3IEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialhNTE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAg
ICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJYTUxP
YmpBdHRyIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgaW1wbC54bWxPYmpBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialhNTE9iakF0dHJHZXR0
ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iakNyZWF0ZUdl
dHRlcihKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQm9vbGVhbihpbXBsLmlzQ3Jl
YXRlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
akNyZWF0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTczMywxMiArMTg2NCwx
NyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDcmVhdGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RP
YmoiLCAiY3JlYXRlIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4oaW1wbC5pc0NyZWF0ZSgpKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1Rlc3RPYmpDcmVhdGVHZXR0ZXIoY2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFs
dWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBp
bXBsLmZhc3RHZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRzdHJpbmdh
dHRyQXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialJlZmxlY3RlZFN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAg
LTE3NDgsMTIgKzE4ODQsMTcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3Ry
aW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGkKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJv
cigqc3RhdGUsICJUZXN0T2JqIiwgInJlZmxlY3RlZFN0cmluZ0F0dHIiKTsKICAgICB9Ci0gICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmZhc3RHZXRBdHRyaWJ1dGUoV2ViQ29yZTo6
SFRNTE5hbWVzOjpyZWZsZWN0ZWRzdHJpbmdhdHRyQXR0cikpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialJl
ZmxlY3RlZFN0cmluZ0F0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKIH0KIAogCitKU1Zh
bHVlIGpzVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0ckdldHRlcihKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuZ2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29y
ZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRpbnRlZ3JhbGF0dHJBdHRyKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRy
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xNzYzLDEyICsxOTA0LDE3IEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewog
ICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJy
ZWZsZWN0ZWRJbnRlZ3JhbEF0dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuZ2V0SW50
ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRpbnRlZ3JhbGF0dHJB
dHRyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyR2V0dGVyKGNhc3Rl
ZFRoaXMpKTsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdy
YWxBdHRyR2V0dGVyKEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoc3Rk
OjptYXgoMCwgaW1wbC5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJl
ZmxlY3RlZHVuc2lnbmVkaW50ZWdyYWxhdHRyQXR0cikpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTc3OCwxMiArMTkyNCwxNyBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0cihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSgogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
ICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAi
cmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKHN0
ZDo6bWF4KDAsIGltcGwuZ2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpy
ZWZsZWN0ZWR1bnNpZ25lZGludGVncmFsYXR0ckF0dHIpKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqUmVm
bGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHJHZXR0ZXIoY2FzdGVkVGhpcykpOwogfQogCiAKK0pT
VmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHJHZXR0ZXIoSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzKQoreworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4oaW1wbC5mYXN0SGFzQXR0cmlidXRlKFdlYkNvcmU6
OkhUTUxOYW1lczo6cmVmbGVjdGVkYm9vbGVhbmF0dHJBdHRyKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE3OTMsMTIgKzE5NDQsMTcgQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGgKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAg
ICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJlZmxl
Y3RlZEJvb2xlYW5BdHRyIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4oaW1wbC5mYXN0SGFzQXR0
cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkYm9vbGVhbmF0dHJBdHRyKSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHJHZXR0ZXIoY2FzdGVkVGhpcykpOwog
fQogCiAKK0pTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0ckdldHRlcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hl
KHN0YXRlLCBpbXBsLmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3Rl
ZHVybGF0dHJBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpA
QCAtMTgwOCwxMiArMTk2NCwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRV
UkxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYQogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVy
cm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVmbGVjdGVkVVJMQXR0ciIpOwogICAgIH0KLSAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuZ2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhU
TUxOYW1lczo6cmVmbGVjdGVkdXJsYXR0ckF0dHIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpSZWZsZWN0
ZWRVUkxBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7CiB9CiAKIAorSlNWYWx1ZSBqc1Rl
c3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9i
aiogY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuZmFz
dEdldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRTdHJpbmdBdHRy
QXR0cikpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alJlZmxlY3RlZFN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE4
MjMsMTIgKzE5ODQsMTcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5n
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGkKICAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigq
c3RhdGUsICJUZXN0T2JqIiwgInJlZmxlY3RlZFN0cmluZ0F0dHIiKTsKICAgICB9Ci0gICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
U3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmZhc3RHZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRN
TE5hbWVzOjpjdXN0b21Db250ZW50U3RyaW5nQXR0ckF0dHIpKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpS
ZWZsZWN0ZWRTdHJpbmdBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7CiB9CiAKIAorSlNW
YWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHJHZXR0ZXIoSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmdldEludGVncmFsQXR0cmlidXRl
KFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEludGVncmFsQXR0ckF0dHIpKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRD
dXN0b21JbnRlZ3JhbEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE4Mzgs
MTIgKzIwMDQsMTcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50
ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1YKICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3Rh
dGUsICJUZXN0T2JqIiwgInJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0ciIpOwogICAgIH0KLSAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNOdW1iZXIoaW1wbC5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6
OmN1c3RvbUNvbnRlbnRJbnRlZ3JhbEF0dHJBdHRyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqUmVmbGVj
dGVkQ3VzdG9tSW50ZWdyYWxBdHRyR2V0dGVyKGNhc3RlZFRoaXMpKTsKIH0KIAogCitKU1ZhbHVl
IGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyR2V0dGVyKEpTVGVzdE9iaiogY2Fz
dGVkVGhpcykKK3sKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKGltcGwuZmFzdEhhc0F0dHJpYnV0ZShXZWJDb3Jl
OjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRCb29sZWFuQXR0ckF0dHIpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29s
ZWFuQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTg1MywxMiArMjAyNCwx
NyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0cihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RP
YmoiLCAicmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQm9vbGVh
bihpbXBsLmZhc3RIYXNBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50
Qm9vbGVhbkF0dHJBdHRyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVh
bkF0dHJHZXR0ZXIoY2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqUmVmbGVj
dGVkQ3VzdG9tVVJMQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmdldFVSTEF0dHJp
YnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRVUkxBdHRyQXR0cikpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1
c3RvbVVSTEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE4NjgsMTMgKzIw
NDQsMTggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0cihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRl
c3RPYmoiLCAicmVmbGVjdGVkQ3VzdG9tVVJMQXR0ciIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdX
aXRoQ2FjaGUoc3RhdGUsIGltcGwuZ2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6
Y3VzdG9tQ29udGVudFVSTEF0dHJBdHRyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqUmVmbGVjdGVkQ3Vz
dG9tVVJMQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKICNpZiBFTkFCTEUo
VEVTVF9GRUFUVVJFKQorSlNWYWx1ZSBqc1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRl
R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSgp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpFbmFi
bGVkQXRSdW50aW1lQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0x
ODg0LDEzICsyMDY1LDE4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakVuYWJsZWRBdFJ1bnRp
bWVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsCiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3Io
KnN0YXRlLCAiVGVzdE9iaiIsICJlbmFibGVkQXRSdW50aW1lQXR0cmlidXRlIik7CiAgICAgfQot
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1
bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5lbmFibGVkQXRSdW50aW1lQXR0cmli
dXRlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVHZXR0ZXIo
c3RhdGUsIGNhc3RlZFRoaXMpKTsKIH0KIAogI2VuZGlmCiAKK0pTVmFsdWUganNUZXN0T2JqVHlw
ZWRBcnJheUF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
KQoreworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgSlNWYWx1
ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC50
eXBlZEFycmF5QXR0cigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpUeXBlZEFycmF5QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpA
QCAtMTkwMCwxMiArMjA4NiwxOSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpUeXBlZEFycmF5
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdQogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVy
cm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAidHlwZWRBcnJheUF0dHIiKTsKICAgICB9Ci0gICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnR5cGVkQXJyYXlBdHRy
KCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialR5cGVkQXJyYXlBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRU
aGlzKSk7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkdl
dHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuYXR0cldpdGhHZXR0ZXJFeGNl
cHRpb24oZWMpKTsKKyAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2Vw
dGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTkxNSwxNCArMjEwOCwxOSBA
QCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoi
LCAiYXR0cldpdGhHZXR0ZXJFeGNlcHRpb24iKTsKICAgICB9Ci0gICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpBdHRyV2l0aEdldHRl
ckV4Y2VwdGlvbkdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCisKK0pTVmFsdWUganNU
ZXN0T2JqQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25XaXRoTWVzc2FnZUdldHRlcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgRXhjZXB0aW9uQ29kZVdpdGhN
ZXNzYWdlIGVjOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAg
SlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVj
KSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmF0dHJXaXRoR2V0dGVyRXhj
ZXB0aW9uV2l0aE1lc3NhZ2UoZWMpKTsKICAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbldp
dGhNZXNzYWdlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xOTMyLDE0ICsyMTMw
LDE3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uV2l0
aE1lc3NhZ2UoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVz
dE9iaiIsICJhdHRyV2l0aEdldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlIik7CiAgICAgfQotICAg
IEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSBlYzsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5hdHRyV2l0
aEdldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlKGVjKSk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKHN0
YXRlLCBlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25XaXRoTWVz
c2FnZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2Jq
QXR0cldpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXIoSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQorewor
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSBqc051bWJlcihpbXBsLmF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCkpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhj
ZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xOTQ5LDEyICsyMTUwLDE3
IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9i
aiIsICJhdHRyV2l0aFNldHRlckV4Y2VwdGlvbiIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1w
bC5hdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpBdHRyV2l0aFNl
dHRlckV4Y2VwdGlvbkdldHRlcihjYXN0ZWRUaGlzKSk7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RP
YmpBdHRyV2l0aFNldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlR2V0dGVyKEpTVGVzdE9iaiogY2Fz
dGVkVGhpcykKK3sKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5hdHRyV2l0aFNldHRlckV4Y2VwdGlvbldp
dGhNZXNzYWdlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uV2l0aE1lc3NhZ2UoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKQEAgLTE5NjQsMTIgKzIxNzAsMTkgQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25XaXRoTWVzc2FnZShFeGVjU3RhdGUqIHN0YXRl
LCBFbmMKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0
aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImF0dHJXaXRoU2V0dGVyRXhj
ZXB0aW9uV2l0aE1lc3NhZ2UiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuYXR0cldpdGhT
ZXR0ZXJFeGNlcHRpb25XaXRoTWVzc2FnZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpBdHRyV2l0aFNl
dHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlR2V0dGVyKGNhc3RlZFRoaXMpKTsKIH0KIAogCitKU1Zh
bHVlIGpzVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuc3RyaW5nQXR0cldpdGhH
ZXR0ZXJFeGNlcHRpb24oZWMpKTsKKyAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRy
V2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTk3
OSwxNCArMjE5MiwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aEdl
dHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSgogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3RPYmoiLCAic3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24iKTsKICAgICB9
Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRl
LCBpbXBsLnN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVjKSk7Ci0gICAgc2V0RE9NRXhj
ZXB0aW9uKHN0YXRlLCBlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJF
eGNlcHRpb25HZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKIH0KIAogCitKU1ZhbHVlIGpzVGVz
dE9ialN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUs
IGltcGwuc3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNl
cHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE5OTYsMTIgKzIyMTIsMTcg
QEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24o
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEoKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2Jq
IiwgInN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uIik7CiAgICAgfQotICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmlu
Z1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5zdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcihzdGF0
ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqU3RyaWN0VHlwZUNoZWNr
aW5nQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhp
cykKK3sKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwu
c3RyaWN0VHlwZUNoZWNraW5nQXR0cmlidXRlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmljdFR5cGVDaGVja2luZ0F0dHJpYnV0ZShFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjAxMSwxMiArMjIzMiwxNSBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpTdHJpY3RUeXBlQ2hlY2tpbmdBdHRyaWJ1dGUoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVgogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAg
ICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAic3RyaWN0
VHlwZUNoZWNraW5nQXR0cmlidXRlIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5zdHJpY3RUeXBlQ2hlY2tpbmdBdHRyaWJ1dGUoKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNUZXN0T2JqU3RyaWN0VHlwZUNoZWNraW5nQXR0cmlidXRlR2V0dGVyKHN0YXRl
LCBjYXN0ZWRUaGlzKSk7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpDdXN0b21BdHRyR2V0dGVy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICByZXR1cm4g
Y2FzdGVkVGhpcy0+Y3VzdG9tQXR0cigqc3RhdGUpOworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpDdXN0b21BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMDI2LDEw
ICsyMjUwLDE2IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakN1c3RvbUF0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQCiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRl
LCAiVGVzdE9iaiIsICJjdXN0b21BdHRyIik7CiAgICAgfQotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoY2FzdGVkVGhpcy0+Y3VzdG9tQXR0cigqc3RhdGUpKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVGVzdE9iakN1c3RvbUF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsK
IH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iak9uZm9vR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIHJl
dHVybiBldmVudEhhbmRsZXJBdHRyaWJ1dGUoY2FzdGVkVGhpcy0+d3JhcHBlZCgpLCBldmVudE5h
bWVzKCkuZm9vRXZlbnQpOworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpPbmZvbyhFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjAzOSwxMSArMjI2OSwxNiBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpPbmZvbyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcgogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAg
ICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAib25mb28i
KTsKICAgICB9Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGV2ZW50SGFuZGxlckF0dHJpYnV0ZShjYXN0ZWRUaGlzLT53cmFwcGVkKCksIGV2ZW50
TmFtZXMoKS5mb29FdmVudCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2Jq
T25mb29HZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9i
ak9ud2Via2l0Zm9vR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhp
cykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIHJldHVybiBldmVudEhhbmRsZXJB
dHRyaWJ1dGUoY2FzdGVkVGhpcy0+d3JhcHBlZCgpLCBldmVudE5hbWVzKCkuZm9vRXZlbnQpOwor
fQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpPbndlYmtpdGZvbyhFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwpAQCAtMjA1MywxMSArMjI4OCwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpPbndlYmtpdGZvbyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhy
b3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJvbndlYmtpdGZvbyIpOwogICAg
IH0KLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
ZXZlbnRIYW5kbGVyQXR0cmlidXRlKGNhc3RlZFRoaXMtPndyYXBwZWQoKSwgZXZlbnROYW1lcygp
LmZvb0V2ZW50KSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpPbndlYmtp
dGZvb0dldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2Jq
V2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9i
aiogY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC53aXRoU2NyaXB0U3RhdGVBdHRy
aWJ1dGUoKnN0YXRlKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CkBAIC0yMDY3LDEyICsyMzA4LDE3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdp
dGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1CiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUi
KTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwud2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKCpz
dGF0ZSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZUdldHRlcihz
dGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqV2l0aENhbGxXaXRo
QW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLndpdGhDYWxsV2l0aEFuZFNl
dHRlckNhbGxXaXRoQXR0cmlidXRlKCpzdGF0ZSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0
cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMDgyLDEyICsyMzI4LDIw
IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRo
QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9i
aiIsICJ3aXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZSIpOwogICAgIH0KLSAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNOdW1iZXIoaW1wbC53aXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZSgq
c3RhdGUpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0
dHJpYnV0ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0
T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
KyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVj
dCgpLCBpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKCpjb250ZXh0KSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKQEAgLTIwOTcsMTUgKzIzNTEsMTkgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW4KICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5
cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0
cmlidXRlIik7CiAgICAgfQotICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2Jq
ZWN0KCksIGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUoKmNvbnRleHQp
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZUdl
dHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqV2l0aFNj
cmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9i
aiogY2FzdGVkVGhpcykKK3sKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhz
dGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlwdFN0YXRlQXR0
cmlidXRlUmFpc2VzKCpzdGF0ZSwgZWMpKTsKKyAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVj
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRo
U2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
QEAgLTIxMTUsMTQgKzIzNzMsMjIgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlw
dFN0YXRlQXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWQKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVF
cnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyIp
OwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialdpdGhTY3JpcHRT
dGF0ZUF0dHJpYnV0ZVJhaXNlc0dldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCisKK0pT
VmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXNH
ZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQorewogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLndp
dGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcygqc3RhdGUsIGVjKSk7CisgICAgSlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcygqY29udGV4dCwgZWMpKTsKICAg
ICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotCiBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcyhFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjEzMiwxNyArMjM5OCwyMCBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcyhFeGVj
U3RhdGUqIHN0YQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0
dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMiKTsKICAgICB9Ci0gICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpXaXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlc0dldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykp
OworfQorCisKK0pTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRT
Y3JpcHRTdGF0ZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMpCit7CiAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7CiAgICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhz
dGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMoKmNvbnRleHQsIGVjKSk7Ci0gICAgc2V0RE9NRXhjZXB0
aW9uKHN0YXRlLCBlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCks
IGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZSgq
c3RhdGUsICpjb250ZXh0KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotCiBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0
cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMTUyLDE1ICsyNDIxLDIy
IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5k
U2NyaXB0U3RhdGVBdHRyaWJ1dGUoRXhlY1N0CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9i
aiIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlIik7
CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqV2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZUdldHRlcihzdGF0ZSwgY2FzdGVk
VGhpcykpOworfQorCisKK0pTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0dldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAg
YXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFjb250
ZXh0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+
Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRT
dGF0ZUF0dHJpYnV0ZSgqc3RhdGUsICpjb250ZXh0KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3Jp
cHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcygqc3RhdGUsICpjb250ZXh0LCBlYykpOworICAgIHNldERP
TUV4Y2VwdGlvbihzdGF0ZSwgZWMpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLQogRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0
ZUF0dHJpYnV0ZVJhaXNlcyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjE3MCwx
NyArMjQ0NiwyMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKAogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0
ZSwgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0
dHJpYnV0ZVJhaXNlcyIpOwogICAgIH0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsK
K30KKworCitKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2Ny
aXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogY2FzdGVkVGhpcykKK3sKICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQg
PSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKCpzdGF0ZSwgKmNv
bnRleHQsIGVjKSk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0
ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUoKnN0YXRlLCAqY29udGV4dCkp
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLQogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTIxOTAsMTUgKzI0NjksMTcgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRT
dGF0ZVdpdGhTcGFjZXNBdHRyaWIKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAg
ICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIndp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRl
Iik7CiAgICAgfQotICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
OwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCks
IGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNB
dHRyaWJ1dGUoKnN0YXRlLCAqY29udGV4dCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialdpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlR2V0dGVyKHN0
YXRlLCBjYXN0ZWRUaGlzKSk7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0QXJn
dW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFs
T2JqZWN0KCksIGltcGwud2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZSgp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRo
U2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CkBAIC0yMjA4LDEzICsyNDg5LDE4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
aldpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0
CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dH
ZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0QXJndW1lbnRzQW5k
Q2FsbFN0YWNrQXR0cmlidXRlIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0
cmlidXRlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3Rh
Y2tBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKIH0KIAogCiAjaWYgRU5BQkxF
KENvbmRpdGlvbjEpCitKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjFHZXR0ZXIoSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmNvbmRpdGlvbmFsQXR0
cjEoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
Q29uZGl0aW9uYWxBdHRyMShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjIyNCwx
NCArMjUxMCwxOSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYQogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0
ZSwgIlRlc3RPYmoiLCAiY29uZGl0aW9uYWxBdHRyMSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIo
aW1wbC5jb25kaXRpb25hbEF0dHIxKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0
cjFHZXR0ZXIoY2FzdGVkVGhpcykpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRp
b24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKK0pTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxB
dHRyMkdldHRlcihKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwu
Y29uZGl0aW9uYWxBdHRyMigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CkBAIC0yMjQxLDE0ICsyNTMyLDE5IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRp
dGlvbmFsQXR0cjIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhCiAgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJU
eXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJjb25kaXRpb25hbEF0dHIyIik7CiAgICAgfQot
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1
bHQgPSBqc051bWJlcihpbXBsLmNvbmRpdGlvbmFsQXR0cjIoKSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2Jq
Q29uZGl0aW9uYWxBdHRyMkdldHRlcihjYXN0ZWRUaGlzKSk7CiB9CiAKICNlbmRpZgogCiAjaWYg
RU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQorSlNWYWx1ZSBqc1Rlc3RP
YmpDb25kaXRpb25hbEF0dHIzR2V0dGVyKEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNOdW1iZXIoaW1wbC5jb25kaXRpb25hbEF0dHIzKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjMoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKQEAgLTIyNTgsMTQgKzI1NTQsMTcgQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmEKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVy
biB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImNvbmRpdGlvbmFsQXR0
cjMiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuY29uZGl0aW9uYWxBdHRyMygpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzR2V0dGVyKGNhc3RlZFRoaXMpKTsKIH0KIAog
I2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKK0pTVmFsdWUganNUZXN0T2JqQ29uZGl0
aW9uYWxBdHRyNENvbnN0cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcykKK3sKKyAgICByZXR1cm4gSlNUZXN0T2JqZWN0QTo6Z2V0Q29uc3RydWN0b3Io
c3RhdGUtPnZtKCksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKK30KKwogRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CkBAIC0yMjc1LDEyICsyNTc0LDE3IEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9iakNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4g
dGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJjb25kaXRpb25hbEF0dHI0
Iik7CiAgICAgfQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0T2JqZWN0QTo6Z2V0
Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKSk7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3Ry
dWN0b3JHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFC
TEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCitKU1ZhbHVlIGpzVGVzdE9iakNv
bmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMpCit7CisgICAgcmV0dXJuIEpTVGVzdE9iamVjdEI6OmdldENvbnN0cnVj
dG9yKHN0YXRlLT52bSgpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7Cit9CisKIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjI5MCwxMiArMjU5NCwxNyBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVgogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0
dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiY29uZGl0aW9uYWxB
dHRyNSIpOwogICAgIH0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE9iamVjdEI6
OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSkp
OworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNv
bnN0cnVjdG9yR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7CiB9CiAKICNlbmRpZgogCiAjaWYg
RU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQorSlNWYWx1ZSBqc1Rlc3RP
YmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIHJldHVybiBKU1Rlc3RPYmplY3RDOjpnZXRDb25z
dHJ1Y3RvcihzdGF0ZS0+dm0oKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpOworfQorCiBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3IoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTIzMDUsMTEgKzI2MTQsMjEgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1YKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAg
IHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImNvbmRpdGlv
bmFsQXR0cjYiKTsKICAgICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RPYmpl
Y3RDOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0
cjZDb25zdHJ1Y3RvckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAjZW5kaWYKIAor
SlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUxR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9
IGNhc3RlZFRoaXMtPm1fY2FjaGVkQXR0cmlidXRlMS5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNh
Y2hlZFZhbHVlOworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSBpbXBsLmNhY2hlZEF0dHJpYnV0ZTEoKTsKKyAgICBjYXN0ZWRUaGlz
LT5tX2NhY2hlZEF0dHJpYnV0ZTEuc2V0KHN0YXRlLT52bSgpLCBjYXN0ZWRUaGlzLCByZXN1bHQp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNhY2hl
ZEF0dHJpYnV0ZTEoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTIzMTksMTUgKzI2
MzgsMjAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMShFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmEKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJU
ZXN0T2JqIiwgImNhY2hlZEF0dHJpYnV0ZTEiKTsKICAgICB9Ci0gICAgaWYgKEpTVmFsdWUgY2Fj
aGVkVmFsdWUgPSBjYXN0ZWRUaGlzLT5tX2NhY2hlZEF0dHJpYnV0ZTEuZ2V0KCkpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FjaGVkVmFsdWUpOwotICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLmNhY2hlZEF0
dHJpYnV0ZTEoKTsKLSAgICBjYXN0ZWRUaGlzLT5tX2NhY2hlZEF0dHJpYnV0ZTEuc2V0KHN0YXRl
LT52bSgpLCBjYXN0ZWRUaGlzLCByZXN1bHQpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakNhY2hlZEF0dHJp
YnV0ZTFHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9i
akNhY2hlZEF0dHJpYnV0ZTJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzKQoreworICAgIGlmIChKU1ZhbHVlIGNhY2hlZFZhbHVlID0gY2FzdGVkVGhpcy0+bV9j
YWNoZWRBdHRyaWJ1dGUyLmdldCgpKQorICAgICAgICByZXR1cm4gY2FjaGVkVmFsdWU7CisgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9
IGltcGwuY2FjaGVkQXR0cmlidXRlMigpOworICAgIGNhc3RlZFRoaXMtPm1fY2FjaGVkQXR0cmli
dXRlMi5zZXQoc3RhdGUtPnZtKCksIGNhc3RlZFRoaXMsIHJlc3VsdCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjMzNywxNSArMjY2MSwxNyBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAg
ICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiY2FjaGVk
QXR0cmlidXRlMiIpOwogICAgIH0KLSAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IGNhc3Rl
ZFRoaXMtPm1fY2FjaGVkQXR0cmlidXRlMi5nZXQoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShjYWNoZWRWYWx1ZSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwuY2FjaGVkQXR0cmlidXRlMigpOwotICAg
IGNhc3RlZFRoaXMtPm1fY2FjaGVkQXR0cmlidXRlMi5zZXQoc3RhdGUtPnZtKCksIGNhc3RlZFRo
aXMsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMkdldHRlcihzdGF0
ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqQW55QXR0cmlidXRlR2V0
dGVyKEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1wbC5hbnlBdHRyaWJ1dGUoKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBbnlBdHRy
aWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTIzNTUsMTIgKzI2ODEsMTYg
QEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQW55QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2Jq
IiwgImFueUF0dHJpYnV0ZSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1wbC5hbnlBdHRyaWJ1dGUoKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1Rlc3RPYmpBbnlBdHRyaWJ1dGVHZXR0ZXIoY2FzdGVkVGhpcykpOwogfQogCiAKK0pT
VmFsdWUganNUZXN0T2JqQ29udGVudERvY3VtZW50R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOworICAgIHJldHVybiBzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShzdGF0ZSwgaW1wbC5j
b250ZW50RG9jdW1lbnQoKSkgPyB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSwgaW1wbC5jb250ZW50RG9jdW1lbnQoKSkgOiBqc051bGwoKTsKK30KKwogRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqQ29udGVudERvY3VtZW50KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CkBAIC0yMzcwLDExICsyNzAwLDE3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnRlbnRE
b2N1bWVudChFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsCiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBl
RXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJjb250ZW50RG9jdW1lbnQiKTsKICAgICB9Ci0gICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKHN0YXRlLCBpbXBsLmNvbnRlbnREb2N1bWVu
dCgpKSA/IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmNvbnRl
bnREb2N1bWVudCgpKSA6IGpzTnVsbCgpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VGVzdE9iakNvbnRlbnREb2N1bWVudEdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAK
K0pTVmFsdWUganNUZXN0T2JqTXV0YWJsZVBvaW50R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xv
YmFsT2JqZWN0KCksIFNWR1N0YXRpY1Byb3BlcnR5VGVhck9mZjxUZXN0T2JqLCBTVkdQb2ludD46
OmNyZWF0ZShpbXBsLCBpbXBsLm11dGFibGVQb2ludCgpLCAmVGVzdE9iajo6dXBkYXRlTXV0YWJs
ZVBvaW50KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqTXV0YWJsZVBvaW50KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMzg0LDEy
ICsyNzIwLDE3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak11dGFibGVQb2ludChFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsCiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRl
LCAiVGVzdE9iaiIsICJtdXRhYmxlUG9pbnQiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBTVkdTdGF0aWNQcm9wZXJ0eVRlYXJPZmY8VGVzdE9i
aiwgU1ZHUG9pbnQ+OjpjcmVhdGUoaW1wbCwgaW1wbC5tdXRhYmxlUG9pbnQoKSwgJlRlc3RPYmo6
OnVwZGF0ZU11dGFibGVQb2ludCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iak11dGFibGVQb2ludEdldHRl
cihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqSW1tdXRhYmxl
UG9pbnRHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQorewor
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgU1ZHUHJvcGVydHlU
ZWFyT2ZmPFNWR1BvaW50Pjo6Y3JlYXRlKGltcGwuaW1tdXRhYmxlUG9pbnQoKSkpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakltbXV0YWJsZVBvaW50
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMzk5LDEyICsyNzQwLDE3IEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9iakltbXV0YWJsZVBvaW50KEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewog
ICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJp
bW11dGFibGVQb2ludCIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xv
YmFsT2JqZWN0KCksIFNWR1Byb3BlcnR5VGVhck9mZjxTVkdQb2ludD46OmNyZWF0ZShpbXBsLmlt
bXV0YWJsZVBvaW50KCkpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpJbW11dGFibGVQb2ludEdldHRlcihz
dGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqU3RyYXdiZXJyeUdl
dHRlcihKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuYmx1ZWJl
cnJ5KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alN0cmF3YmVycnkoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI0MTQsMTIgKzI3
NjAsMTcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyYXdiZXJyeShFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFAKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJU
ZXN0T2JqIiwgInN0cmF3YmVycnkiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuYmx1ZWJl
cnJ5KCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialN0cmF3YmVycnlHZXR0ZXIoY2FzdGVkVGhpcykpOwog
fQogCiAKK0pTVmFsdWUganNUZXN0T2JqU3RyaWN0RmxvYXRHZXR0ZXIoSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzKQoreworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLnN0cmljdEZsb2F0KCkpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmljdEZsb2F0KEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yNDI5LDEyICsyNzgwLDE3IEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialN0cmljdEZsb2F0KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAg
IHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInN0cmljdEZs
b2F0Iik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0g
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLnN0cmljdEZsb2F0KCkpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVGVzdE9ialN0cmljdEZsb2F0R2V0dGVyKGNhc3RlZFRoaXMpKTsKIH0KIAogCitKU1ZhbHVl
IGpzVGVzdE9iakRlc2NyaXB0aW9uR2V0dGVyKEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNOdW1iZXIoaW1wbC5kZXNjcmlwdGlvbigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpEZXNjcmlwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwpAQCAtMjQ0NCwxMiArMjgwMCwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpEZXNjcmlwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dH
ZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJkZXNjcmlwdGlvbiIpOwogICAgIH0K
LSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVz
dWx0ID0ganNOdW1iZXIoaW1wbC5kZXNjcmlwdGlvbigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpEZXNj
cmlwdGlvbkdldHRlcihjYXN0ZWRUaGlzKSk7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpJZEdl
dHRlcihKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuaWQoKSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqSWQoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI0NTksMTIgKzI4MjAsMTcgQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqSWQoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU4KICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAg
ICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImlkIik7
CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNW
YWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmlkKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iaklkR2V0
dGVyKGNhc3RlZFRoaXMpKTsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iakhhc2hHZXR0ZXIoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dp
dGhDYWNoZShzdGF0ZSwgaW1wbC5oYXNoKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9iakhhc2goRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
QEAgLTI0NzQsMTIgKzI4NDAsMTcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqSGFzaChFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnQKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVF
cnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImhhc2giKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0
aENhY2hlKHN0YXRlLCBpbXBsLmhhc2goKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqSGFzaEdldHRlcihz
dGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqUmVwbGFjZWFibGVB
dHRyaWJ1dGVHZXR0ZXIoSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihp
bXBsLnJlcGxhY2VhYmxlQXR0cmlidXRlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CkBAIC0yNDg5LDEyICsyODYwLDE3IEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4g
dGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJyZXBsYWNlYWJsZUF0dHJp
YnV0ZSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwot
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5yZXBsYWNlYWJsZUF0dHJpYnV0ZSgp
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZUdldHRlcihjYXN0ZWRUaGlz
KSk7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZURvdWJsZUF0dHJpYnV0ZUdldHRl
cihKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvTnVsbGFibGVKU051bWJlcihpbXBs
Lm51bGxhYmxlRG91YmxlQXR0cmlidXRlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlRG91YmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yNTA0LDEyICsyODgwLDE3IEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9iak51bGxhYmxlRG91YmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1
cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJudWxsYWJsZURvdWJs
ZUF0dHJpYnV0ZSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9OdWxsYWJsZUpTTnVtYmVyKGltcGwubnVsbGFi
bGVEb3VibGVBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqTnVsbGFibGVEb3VibGVBdHRy
aWJ1dGVHZXR0ZXIoY2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqTnVsbGFi
bGVMb25nQXR0cmlidXRlR2V0dGVyKEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9O
dWxsYWJsZUpTTnVtYmVyKGltcGwubnVsbGFibGVMb25nQXR0cmlidXRlKCkpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlTG9uZ0F0dHJp
YnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjUxOSwxMiArMjkwMCwxNyBA
QCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUxvbmdBdHRyaWJ1dGUoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoi
LCAibnVsbGFibGVMb25nQXR0cmlidXRlIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b051bGxhYmxlSlNOdW1i
ZXIoaW1wbC5udWxsYWJsZUxvbmdBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqTnVsbGFi
bGVMb25nQXR0cmlidXRlR2V0dGVyKGNhc3RlZFRoaXMpKTsKIH0KIAogCitKU1ZhbHVlIGpzVGVz
dE9iak51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZUdldHRlcihKU1Rlc3RPYmoqIGNhc3RlZFRoaXMp
Cit7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzQm9vbGVhbihpbXBsLm51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZSgpKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUJv
b2xlYW5BdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI1MzQsMTIg
KzI5MjAsMTcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVCb29sZWFuQXR0cmli
dXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHUKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUs
ICJUZXN0T2JqIiwgIm51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZSIpOwogICAgIH0KLSAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNC
b29sZWFuKGltcGwubnVsbGFibGVCb29sZWFuQXR0cmlidXRlKCkpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9i
ak51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZUdldHRlcihjYXN0ZWRUaGlzKSk7CiB9CiAKIAorSlNW
YWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nT3JOdWxsKHN0YXRl
LCBpbXBsLm51bGxhYmxlU3RyaW5nQXR0cmlidXRlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nQXR0cmlidXRlKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yNTQ5LDEyICsyOTQwLDE3IEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAg
ICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJudWxsYWJs
ZVN0cmluZ0F0dHJpYnV0ZSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdPck51bGwoc3RhdGUsIGlt
cGwubnVsbGFibGVTdHJpbmdBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqTnVsbGFibGVT
dHJpbmdBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKIH0KIAogCitKU1ZhbHVl
IGpzVGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlR2V0dGVyKEpTVGVzdE9iaiog
Y2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwor
ICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9OdWxsYWJsZUpTTnVtYmVyKGltcGwubnVsbGFibGVMb25n
U2V0dGFibGVBdHRyaWJ1dGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI1NjQsMTIgKzI5NjAsMTcgQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEoKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVy
biB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm51bGxhYmxlTG9uZ1Nl
dHRhYmxlQXR0cmlidXRlIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b051bGxhYmxlSlNOdW1iZXIoaW1wbC5u
dWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpOdWxsYWJs
ZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRlcihjYXN0ZWRUaGlzKSk7CiB9CiAKIAorSlNWYWx1
ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdPck51bGwo
c3RhdGUsIGltcGwubnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSgpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1Nl
dHRhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yNTc5LDEy
ICsyOTgwLDE5IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFi
bGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlCiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRl
LCAiVGVzdE9iaiIsICJudWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlIik7CiAgICAgfQot
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1
bHQgPSBqc1N0cmluZ09yTnVsbChzdGF0ZSwgaW1wbC5udWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0
cmlidXRlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1
dGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iak51
bGxhYmxlU3RyaW5nVmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzKQoreworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b051bGxhYmxlSlNO
dW1iZXIoaW1wbC5udWxsYWJsZVN0cmluZ1ZhbHVlKGVjKSk7CisgICAgc2V0RE9NRXhjZXB0aW9u
KHN0YXRlLCBlYyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpA
QCAtMjU5NCwxNCArMzAwMiwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0
cmluZ1ZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaQogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVy
cm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibnVsbGFibGVTdHJpbmdWYWx1ZSIpOwogICAgIH0KLSAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9OdWxsYWJsZUpTTnVtYmVyKGltcGwubnVs
bGFibGVTdHJpbmdWYWx1ZShlYykpOwotICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVGVzdE9iak51bGxhYmxlU3RyaW5nVmFsdWVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRo
aXMpKTsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hl
KHN0YXRlLCBpbXBsLmF0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKQEAgLTI2MTEsMTIgKzMwMjIsMTcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cmli
dXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHIKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5
cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImF0dHJpYnV0ZSIpOwogICAgIH0KLSAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNT
dHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuYXR0cmlidXRlKCkpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9i
akF0dHJpYnV0ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUganNU
ZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0
ZSwgaW1wbC5hdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZSgpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRF
bnVtVHlwZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjYyNiwxMiArMzA0Miwx
NyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlw
ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSgogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RP
YmoiLCAiYXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGUiKTsKICAgICB9Ci0gICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3Ry
aW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlKCkp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlR2V0dGVyKHN0
YXRlLCBjYXN0ZWRUaGlzKSk7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc0F0
dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7
CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJl
c3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnB1dEZv
cndhcmRzQXR0cmlidXRlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CkBAIC0yNjQxLDEyICszMDYyLDE3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialB1
dEZvcndhcmRzQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoCiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJwdXRGb3J3YXJkc0F0dHJpYnV0ZSIpOwog
ICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwu
cHV0Rm9yd2FyZHNBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRy
aWJ1dGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9i
alB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKSwgaW1wbC5wdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlKCkpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialB1dEZvcndhcmRzTnVs
bGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI2NTYsOSAr
MzA4Miw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRy
aWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAi
VGVzdE9iaiIsICJwdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlIik7CiAgICAgfQotICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0
b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5wdXRGb3J3YXJkc051
bGxhYmxlQXR0cmlidXRlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVB
dHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKIH0KIAogCkBAIC02MTc3LDYgKzY2
MDEsMjQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbkF0dGFjaFNoYWRvd1Jvb3QoRXhlY1N0YXQKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEV4ZWNTdGF0ZSogc3RhdGUpCit7CisgICAg
SlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CisgICAgYXV0byBjYXN0ZWRU
aGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOworICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpCisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0
YXRlLCAiVGVzdE9iaiIsICJ0b0pTT04iKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKKworICAgIEpTT2JqZWN0KiByZXN1bHQg
PSBjb25zdHJ1Y3RFbXB0eU9iamVjdChzdGF0ZSk7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAi
cmVhZE9ubHlTdHJpbmdBdHRyIiksIGpzVGVzdE9ialJlYWRPbmx5U3RyaW5nQXR0ckdldHRlcihz
dGF0ZSwgY2FzdGVkVGhpcykpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZ2bSwgImVudW1BdHRyIiksIGpzVGVzdE9iakVudW1BdHRyR2V0dGVyKHN0
YXRlLCBjYXN0ZWRUaGlzKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCAibG9uZ0F0dHIiKSwganNUZXN0T2JqTG9uZ0F0dHJHZXR0ZXIoY2Fz
dGVkVGhpcykpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgImNyZWF0ZSIpLCBqc1Rlc3RPYmpDcmVhdGVHZXR0ZXIoY2FzdGVkVGhpcykpOwor
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCiB1c2luZyBUZXN0T2Jq
SXRlcmF0b3IgPSBKU0RPTUl0ZXJhdG9yPEpTVGVzdE9iaj47CiB1c2luZyBUZXN0T2JqSXRlcmF0
b3JQcm90b3R5cGUgPSBKU0RPTUl0ZXJhdG9yUHJvdG90eXBlPEpTVGVzdE9iaj47CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAK
aW5kZXggYmI0MjhhZWZlNzRkNjI1ZDg3MDUxMmQ4OTQ1MzBmNGU2MmM3YjVkNC4uYmRlZDFmZGIz
ZDUyNzg4Zjg3ODVmYzQyMGRjYzVhNmJkY2MyZTQyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKQEAgLTEzMyw2ICsxMzMs
MTMgQEAgdm9pZCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmRlc3Ryb3ko
SlNDOjpKU0NlbGwqIGNlbGwpCiAgICAgdGhpc09iamVjdC0+SlNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlOjp+SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKCk7
CiB9CiAKK0pTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFsdWVH
ZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLnZhbHVlKCkgPyBpbXBsLnZhbHVlKCktPmRl
c2VyaWFsaXplKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgMCkgOiBqc051bGwo
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwpAQCAtMTQyLDEyICsxNDksMTcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2QKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVF
cnJvcigqc3RhdGUsICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlIiwgInZhbHVl
Iik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAg
SlNWYWx1ZSByZXN1bHQgPSBpbXBsLnZhbHVlKCkgPyBpbXBsLnZhbHVlKCktPmRlc2VyaWFsaXpl
KHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgMCkgOiBqc051bGwoKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZUdldHRlcihzdGF0ZSwg
Y2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlUmVhZG9ubHlWYWx1ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwucmVh
ZG9ubHlWYWx1ZSgpID8gaW1wbC5yZWFkb25seVZhbHVlKCktPmRlc2VyaWFsaXplKHN0YXRlLCBj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgMCkgOiBqc051bGwoKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VSZWFkb25seVZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xNTcs
MTIgKzE2OSwyMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VSZWFkb25seVZhbHVlKEV4ZWNTdGF0ZSogc3RhdAogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0
ZSwgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UiLCAicmVhZG9ubHlWYWx1ZSIp
OwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpT
VmFsdWUgcmVzdWx0ID0gaW1wbC5yZWFkb25seVZhbHVlKCkgPyBpbXBsLnJlYWRvbmx5VmFsdWUo
KS0+ZGVzZXJpYWxpemUoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCAwKSA6IGpz
TnVsbCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVJlYWRv
bmx5VmFsdWVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKIH0KIAogCitKU1ZhbHVlIGpzVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlR2V0dGVyKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogY2FzdGVkVGhp
cykKK3sKKyAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IGNhc3RlZFRoaXMtPm1fY2FjaGVk
VmFsdWUuZ2V0KCkpCisgICAgICAgIHJldHVybiBjYWNoZWRWYWx1ZTsKKyAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1wbC5jYWNo
ZWRWYWx1ZSgpID8gaW1wbC5jYWNoZWRWYWx1ZSgpLT5kZXNlcmlhbGl6ZShzdGF0ZSwgY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIDApIDoganNOdWxsKCk7CisgICAgY2FzdGVkVGhpcy0+bV9j
YWNoZWRWYWx1ZS5zZXQoc3RhdGUtPnZtKCksIGNhc3RlZFRoaXMsIHJlc3VsdCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAg
LTE3MiwxNSArMTkyLDE3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsCiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3Io
KnN0YXRlLCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSIsICJjYWNoZWRWYWx1
ZSIpOwogICAgIH0KLSAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IGNhc3RlZFRoaXMtPm1f
Y2FjaGVkVmFsdWUuZ2V0KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FjaGVk
VmFsdWUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNW
YWx1ZSByZXN1bHQgPSBpbXBsLmNhY2hlZFZhbHVlKCkgPyBpbXBsLmNhY2hlZFZhbHVlKCktPmRl
c2VyaWFsaXplKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgMCkgOiBqc051bGwo
KTsKLSAgICBjYXN0ZWRUaGlzLT5tX2NhY2hlZFZhbHVlLnNldChzdGF0ZS0+dm0oKSwgY2FzdGVk
VGhpcywgcmVzdWx0KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2VDYWNoZWRWYWx1ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUg
anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUG9ydHNHZXR0ZXIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBjYXN0ZWRUaGlz
KQoreworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgSlNWYWx1
ZSByZXN1bHQgPSBqc0FycmF5KHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1w
bC5wb3J0cygpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQb3J0cyhFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwpAQCAtMTkwLDEyICsyMTIsMjAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUG9ydHMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2QK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dl
dHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
IiwgInBvcnRzIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc0FycmF5KHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKSwgaW1wbC5wb3J0cygpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VQb3J0c0dldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKK0pT
VmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkUmVhZG9ubHlW
YWx1ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2UqIGNhc3RlZFRoaXMpCit7CisgICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUgPSBj
YXN0ZWRUaGlzLT5tX2NhY2hlZFJlYWRvbmx5VmFsdWUuZ2V0KCkpCisgICAgICAgIHJldHVybiBj
YWNoZWRWYWx1ZTsKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAg
IEpTVmFsdWUgcmVzdWx0ID0gaW1wbC5jYWNoZWRSZWFkb25seVZhbHVlKCkgPyBpbXBsLmNhY2hl
ZFJlYWRvbmx5VmFsdWUoKS0+ZGVzZXJpYWxpemUoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpLCAwKSA6IGpzTnVsbCgpOworICAgIGNhc3RlZFRoaXMtPm1fY2FjaGVkUmVhZG9ubHlW
YWx1ZS5zZXQoc3RhdGUtPnZtKCksIGNhc3RlZFRoaXMsIHJlc3VsdCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlQ2FjaGVkUmVhZG9ubHlWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpA
QCAtMjA1LDEyICsyMzUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VDYWNoZWRSZWFkb25seVZhbHVlKEV4ZWNTdGF0ZQogICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9y
KCpzdGF0ZSwgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UiLCAiY2FjaGVkUmVh
ZG9ubHlWYWx1ZSIpOwogICAgIH0KLSAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IGNhc3Rl
ZFRoaXMtPm1fY2FjaGVkUmVhZG9ubHlWYWx1ZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShjYWNoZWRWYWx1ZSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwuY2FjaGVkUmVhZG9ubHlWYWx1ZSgp
ID8gaW1wbC5jYWNoZWRSZWFkb25seVZhbHVlKCktPmRlc2VyaWFsaXplKHN0YXRlLCBjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSwgMCkgOiBqc051bGwoKTsKLSAgICBjYXN0ZWRUaGlzLT5tX2Nh
Y2hlZFJlYWRvbmx5VmFsdWUuc2V0KHN0YXRlLT52bSgpLCBjYXN0ZWRUaGlzLCByZXN1bHQpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFJlYWRvbmx5
VmFsdWVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKIH0KIAogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNw
cAppbmRleCBkYzVhYzU0YzNjYTM3OWZjOTg2MDEyODViOTQ5MTQ4MThiMTMzZTM3Li5kY2I1ZjI3
MDQ2NTI3OThiOTgyM2M1ZGE1ODZhNDEyNjYxYmQ0NjIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAK
QEAgLTIxOCw2ICsyMTgsMTMgQEAgYm9vbCBKU1Rlc3RUeXBlZGVmczo6Z2V0T3duUHJvcGVydHlT
bG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3AKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKK0pTVmFsdWUganNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0ckdl
dHRlcihKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC51
bnNpZ25lZExvbmdMb25nQXR0cigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CkBAIC0yMjcsMTIgKzIzNCwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRo
cm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RUeXBlZGVmcyIsICJ1bnNpZ25lZExvbmdM
b25nQXR0ciIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC51bnNpZ25lZExvbmdMb25nQXR0
cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdHRyR2V0dGVyKGNh
c3RlZFRoaXMpKTsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzSW1tdXRhYmxlU2VyaWFs
aXplZFNjcmlwdFZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBj
YXN0ZWRUaGlzKQoreworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Cisg
ICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLmltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSgp
ID8gaW1wbC5pbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUoKS0+ZGVzZXJpYWxpemUoc3Rh
dGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCAwKSA6IGpzTnVsbCgpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzSW1tdXRhYmxlU2Vy
aWFsaXplZFNjcmlwdFZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yNDIs
MTIgKzI1NCwxNSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBFbgogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0
ZSwgIlRlc3RUeXBlZGVmcyIsICJpbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUiKTsKICAg
ICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVl
IHJlc3VsdCA9IGltcGwuaW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlKCkgPyBpbXBsLmlt
bXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSgpLT5kZXNlcmlhbGl6ZShzdGF0ZSwgY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIDApIDoganNOdWxsKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0VHlwZWRl
ZnNJbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMp
KTsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQ29uc3RydWN0b3JUZXN0U3ViT2JqR2V0
dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzKQoreworICAg
IHJldHVybiBKU1Rlc3RTdWJPYmo6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSk7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZz
Q29uc3RydWN0b3JUZXN0U3ViT2JqKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0y
NTcsMTAgKzI3MiwxOSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9y
VGVzdFN1Yk9iaihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYQogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3RUeXBlZGVmcyIsICJUZXN0U3ViT2JqIik7CiAgICAgfQotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNUZXN0U3ViT2JqOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwg
Y2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVGVzdFR5cGVkZWZzQ29uc3RydWN0b3JUZXN0U3ViT2JqR2V0dGVyKHN0YXRlLCBjYXN0ZWRU
aGlzKSk7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0dGVyRXhjZXB0
aW9uR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzKQor
eworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmF0dHJXaXRo
R2V0dGVyRXhjZXB0aW9uKGVjKSk7CisgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNBdHRy
V2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjcw
LDE0ICsyOTQsMTcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNBdHRyV2l0aEdldHRl
ckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlMKICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3Rh
dGUsICJUZXN0VHlwZWRlZnMiLCAiYXR0cldpdGhHZXR0ZXJFeGNlcHRpb24iKTsKICAgICB9Ci0g
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuYXR0cldpdGhHZXR0
ZXJFeGNlcHRpb24oZWMpKTsKLSAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uR2V0dGVyKHN0YXRlLCBjYXN0
ZWRUaGlzKSk7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhj
ZXB0aW9uR2V0dGVyKEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJl
cihpbXBsLmF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24o
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI4NywxMiArMzE0LDE5IEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAg
ICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdFR5cGVkZWZzIiwg
ImF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmF0
dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdFR5cGVkZWZzQXR0cldpdGhT
ZXR0ZXJFeGNlcHRpb25HZXR0ZXIoY2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0
VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcykKK3sKKyAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuc3RyaW5nQXR0cldpdGhH
ZXR0ZXJFeGNlcHRpb24oZWMpKTsKKyAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1N0cmlu
Z0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBA
IC0zMDIsMTQgKzMzNiwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0
dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuYwogICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9y
KCpzdGF0ZSwgIlRlc3RUeXBlZGVmcyIsICJzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIp
OwogICAgIH0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2Fj
aGUoc3RhdGUsIGltcGwuc3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oZWMpKTsKLSAgICBz
ZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0
dHJXaXRoR2V0dGVyRXhjZXB0aW9uR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7CiB9CiAKIAor
SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uR2V0dGVy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzKQoreworICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBq
c1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5zdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlv
bigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBl
ZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CkBAIC0zMTksOSArMzU2LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNT
dHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmMKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5
cGVFcnJvcigqc3RhdGUsICJUZXN0VHlwZWRlZnMiLCAic3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNl
cHRpb24iKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
LSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnN0cmlu
Z0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdFR5cGVkZWZzU3RyaW5n
QXR0cldpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKIH0KIAog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNh
dHRyaWJ1dGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
YXR0cmlidXRlLmNwcAppbmRleCAzYzBkNzNiOWIyNzMyZTU0MTI1YmUwOWVlOGI3YTEwYjFlMmVl
ZjM4Li5jN2ZkOGZjMDlhNzFhMmEzOTZjZjA3M2YyZjkyMDNhYTQyN2MwODg3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNhdHRyaWJ1dGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0
ZS5jcHAKQEAgLTE0MSw2ICsxNDEsMTMgQEAgYm9vbCBKU2F0dHJpYnV0ZTo6Z2V0T3duUHJvcGVy
dHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnQKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKK0pTVmFsdWUganNhdHRyaWJ1dGVSZWFkb25seUdldHRlcihFeGVj
U3RhdGUqIHN0YXRlLCBKU2F0dHJpYnV0ZSogY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdX
aXRoQ2FjaGUoc3RhdGUsIGltcGwucmVhZG9ubHkoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KwogRW5jb2RlZEpTVmFsdWUganNhdHRyaWJ1dGVSZWFkb25seShFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwpAQCAtMTUwLDkgKzE1Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzYXR0cmlidXRl
UmVhZG9ubHkoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQCiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCAiYXR0cmlidXRlIiwgInJlYWRvbmx5Iik7CiAgICAgfQotICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQg
PSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5yZWFkb25seSgpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc2F0
dHJpYnV0ZVJlYWRvbmx5R2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7CiB9CiAKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROb2RlLmlkbCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Tm9kZS5pZGwKaW5kZXgg
MWU0ODUyYTg1ODkwYmYwY2Q0OWVhNGVlMzJkMDQ1NTRlMjhmMjA4OS4uZmNlNjgwYWFhMjY5ZDFh
ZTYwZGNlZWFmNTlkYmI0ZmE1YmQwOWI1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROb2RlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5vZGUuaWRsCkBAIC0yNSw1ICsyNSw3IEBACiAgICAgYXR0
cmlidXRlIERPTVN0cmluZyBuYW1lOwogCiAgICAgaXRlcmFibGU8VGVzdE5vZGU+OworCisgICAg
c2VyaWFsaXplcjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9UZXN0T2JqLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9UZXN0T2JqLmlkbAppbmRleCAzNDExODFhNTE2MWYwMDU1YjQyMGE5OWViNWI4ZjllYThj
ZDhhMTdkLi4yYWI5Y2MxZjliNmEzYTBjNmEwMGFjMGZhZmQ2NTUxYTIzZjJjMzQyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCkBAIC0z
NzQsNiArMzc0LDggQEAgZW51bSBUZXN0Q29uZmlkZW5jZSB7ICJoaWdoIiwgImtpbmRhLWxvdyIg
fTsKICNlbmRpZgogCiAgICAgdm9pZCBhdHRhY2hTaGFkb3dSb290KFRlc3REaWN0aW9uYXJ5IGlu
aXQpOworCisgICAgc2VyaWFsaXplciA9IHtyZWFkT25seVN0cmluZ0F0dHIsIGNyZWF0ZSwgZW51
bUF0dHIsIGxvbmdBdHRyfTsKIH07CiAKIC8vIFRoZSBmb2xsb3dpbmcgY29tbWVudCBzaG91bGQg
bm90IGdlbmVyYXRlIGFueSBjb2RlLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDIxMDllNDQ1NjY4M2FhNmFiYTUyNjNiNzMw
NjZlMjkyZGQ5ODg5ZTEuLmJjYjVhMjI2ZTlkNTRjNDZkNDgwYjZhNWNmMTE0MjA0ZjY5OWRlOTMg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxNi0wNS0yNCAgQWxlamFuZHJvIEcuIENhc3RybyAg
PGFsZXhAaWdhbGlhLmNvbT4KKworICAgICAgICBBZGQgV2ViSURMIHNwZWNpYWwgb3BlcmF0aW9u
IHN1cHBvcnQ6IHNlcmlhbGl6ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1NjI5MworCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgor
CisgICAgICAgIFZlcmlmeSB0aGUgbmV3IEFQSSBvZiB0aGUgb2JqZWN0cyBhbmQgY2hlY2sgd2hh
dCBoYXBwZW5zIHdoZW4gdXNlcgorICAgICAgICBtb2RpZmllcyB0aGUgdmFsdWVzIGFuZCB0eXBl
cyBvZiB0aGUgYXR0cmlidXRlcywgb3IgYWRkcyBhIG51bGwgdmFsdWUuCisKKyAgICAgICAgKiBm
YXN0L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS1leHBlY3RlZC50eHQ6CisgICAgICAgICog
ZmFzdC9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaHRtbDoKKyAgICAgICAgKiBmYXN0L21l
ZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi1leHBlY3RlZC50eHQ6CisgICAgICAgICog
ZmFzdC9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24uaHRtbDoKKwogMjAxNi0wNS0y
NCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAg
VW5yZXZpZXdlZCBHVEsrIGdhcmRlbmluZy4gRml4IHdyb25nIGV4cGVjdGF0aW9ucyBvZiBmYXN0
L2hhcm5lc3Mvc2FtcGxlLWZhaWwtbWlzbWF0Y2gtcmVmdGVzdC5odG1sLgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUtZXhwZWN0ZWQu
dHh0CmluZGV4IDk4YTAwNzExYmFjMjliY2M3ZGQ3MWUyNzc3MzU5MmUwYmQ0MTAxMjguLmU2NTE4
M2NjODdjOGQ1YTZlMTY1ODcyZGY3NmIzZTNiYzFhM2Y0ZGQgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLWV4cGVjdGVkLnR4dAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS1leHBlY3RlZC50eHQK
QEAgLTcsNiArNywyMSBAQCBQQVNTIGNhbmRpZGF0ZSA9IG5ldyBSVENJY2VDYW5kaWRhdGUoaW5p
dGlhbGl6ZXIpOyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KIFBBU1MgY2FuZGlkYXRlLmNhbmRp
ZGF0ZSBpcyAiZm9vIgogUEFTUyBjYW5kaWRhdGUuc2RwTWlkIGlzICJiYXIiCiBQQVNTIGNhbmRp
ZGF0ZS5zZHBNTGluZUluZGV4IGlzIDYKK1BBU1MgUlRDSWNlQ2FuZGlkYXRlLnByb3RvdHlwZS50
b0pTT04gaXMgZGVmaW5lZC4KK1BBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihS
VENJY2VDYW5kaWRhdGUucHJvdG90eXBlLCAidG9KU09OIikuZW51bWVyYWJsZSBpcyB0cnVlCitQ
QVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUlRDSWNlQ2FuZGlkYXRlLnByb3Rv
dHlwZSwgInRvSlNPTiIpLndyaXRhYmxlIGlzIHRydWUKK1BBU1MgT2JqZWN0LmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihSVENJY2VDYW5kaWRhdGUucHJvdG90eXBlLCAidG9KU09OIikuY29uZmln
dXJhYmxlIGlzIHRydWUKK1BBU1MgUlRDSWNlQ2FuZGlkYXRlLnByb3RvdHlwZS50b0pTT04ubGVu
Z3RoIGlzIDAKK1BBU1MgUlRDSWNlQ2FuZGlkYXRlLnByb3RvdHlwZS50b0pTT04ubmFtZSBpcyAi
dG9KU09OIgorUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGpzb25NYXAsICJj
YW5kaWRhdGUiKS5lbnVtZXJhYmxlIGlzIHRydWUKK1BBU1MgT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihqc29uTWFwLCAiY2FuZGlkYXRlIikud3JpdGFibGUgaXMgdHJ1ZQorUEFTUyBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGpzb25NYXAsICJjYW5kaWRhdGUiKS5jb25m
aWd1cmFibGUgaXMgdHJ1ZQorUEFTUyBjaGlsZENhbmRpZGF0ZS50b0pTT04oKTsgdGhyZXcgZXhj
ZXB0aW9uIFR5cGVFcnJvcjogQ2FuIG9ubHkgY2FsbCBSVENJY2VDYW5kaWRhdGUudG9KU09OIG9u
IGluc3RhbmNlcyBvZiBSVENJY2VDYW5kaWRhdGUuCitQQVNTIEpTT04uc3RyaW5naWZ5KGNhbmRp
ZGF0ZS50b0pTT04oKSkgaXMgIntcImNhbmRpZGF0ZVwiOlwiZm9vXCIsXCJzZHBNaWRcIjpcImJh
clwiLFwic2RwTUxpbmVJbmRleFwiOjZ9IgorUEFTUyBKU09OLnN0cmluZ2lmeShjYW5kaWRhdGUu
dG9KU09OKCkpIGlzICJ7XCJjYW5kaWRhdGVcIjpcImZvb1wiLFwic2RwTWlkXCI6XCJiYXJcIixc
InNkcE1MaW5lSW5kZXhcIjo2fSIKK1BBU1MgSlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNP
TigpKSBpcyAie1wiY2FuZGlkYXRlXCI6XCJmb29cIixcInNkcE1pZFwiOlwiYmFyXCIsXCJzZHBN
TGluZUluZGV4XCI6MH0iCitQQVNTIEpTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSkg
aXMgIntcImNhbmRpZGF0ZVwiOlwiZm9vXCIsXCJzZHBNaWRcIjpcIjdcIixcInNkcE1MaW5lSW5k
ZXhcIjowfSIKK1BBU1MgSlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNPTigpKSBpcyAie1wi
Y2FuZGlkYXRlXCI6XCJmb29cIixcInNkcE1pZFwiOm51bGwsXCJzZHBNTGluZUluZGV4XCI6MH0i
CiAKIERpY3Rpb25hcnkgbWVtYmVyICdjYW5kaWRhdGUnIGlzIHJlcXVpcmVkLgogUEFTUyBuZXcg
UlRDSWNlQ2FuZGlkYXRlKHt9KTsgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogVHlwZSBlcnJv
ci4KQEAgLTMxLDcgKzQ2LDcgQEAgUEFTUyBuZXcgUlRDSWNlQ2FuZGlkYXRlKHtjYW5kaWRhdGU6
ImZvbyIsIHNkcE1MaW5lSW5kZXg6LTF9KTsgdGhyZXcgZXhjZXB0aW9uIFQKIFBBU1MgbmV3IFJU
Q0ljZUNhbmRpZGF0ZSh7Y2FuZGlkYXRlOiJmb28iLCBzZHBNTGluZUluZGV4OjY1NTM2fSk7IHRo
cmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFR5cGUgZXJyb3IuCiBQQVNTIG5ldyBSVENJY2VDYW5k
aWRhdGUoNSk7IHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFR5cGUgZXJyb3IuCiBQQVNTIG5l
dyBSVENJY2VDYW5kaWRhdGUoImZvb2JhciIpOyB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBU
eXBlIGVycm9yLgotUEFTUyBuZXcgUlRDSWNlQ2FuZGlkYXRlKGNhbmRpZGF0ZToiIik7IHRocmV3
IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogVW5leHBlY3RlZCB0b2tlbiAnOicuIEV4cGVjdGVkICcp
JyB0byBlbmQgYSBhcmd1bWVudCBsaXN0Li4KK1BBU1MgbmV3IFJUQ0ljZUNhbmRpZGF0ZShjYW5k
aWRhdGU6IiIpOyB0aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6IFVuZXhwZWN0ZWQgdG9rZW4g
JzonLiBFeHBlY3RlZCAnKScgdG8gZW5kIGFuIGFyZ3VtZW50IGxpc3QuLgogUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5odG1sIGIvTGF5b3V0VGVzdHMv
ZmFzdC9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaHRtbAppbmRleCA0YzllMzg1NTZjOTA0
OGQ4ZTY0ZGI0ZWFhNTFjOGFlN2Y2ODA4ZGFjLi4wYTA5ZDdjYjM4ZTIwYWQ0ZTEzYmYwNTcyOGRk
ZWVjZWNiMGEyY2Y2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JU
Q0ljZUNhbmRpZGF0ZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRD
SWNlQ2FuZGlkYXRlLmh0bWwKQEAgLTEzLDYgKzEzLDMzIEBACiAgICAgICAgICAgICBzaG91bGRC
ZSgnY2FuZGlkYXRlLmNhbmRpZGF0ZScsICciZm9vIicpOwogICAgICAgICAgICAgc2hvdWxkQmUo
J2NhbmRpZGF0ZS5zZHBNaWQnLCAnImJhciInKTsKICAgICAgICAgICAgIHNob3VsZEJlKCdjYW5k
aWRhdGUuc2RwTUxpbmVJbmRleCcsICc2Jyk7CisgICAgICAgICAgICBzaG91bGRCZURlZmluZWQo
J1JUQ0ljZUNhbmRpZGF0ZS5wcm90b3R5cGUudG9KU09OJyk7CisgICAgICAgICAgICBzaG91bGRC
ZVRydWUoJ09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUlRDSWNlQ2FuZGlkYXRlLnBy
b3RvdHlwZSwgInRvSlNPTiIpLmVudW1lcmFibGUnKTsKKyAgICAgICAgICAgIHNob3VsZEJlVHJ1
ZSgnT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihSVENJY2VDYW5kaWRhdGUucHJvdG90
eXBlLCAidG9KU09OIikud3JpdGFibGUnKTsKKyAgICAgICAgICAgIHNob3VsZEJlVHJ1ZSgnT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihSVENJY2VDYW5kaWRhdGUucHJvdG90eXBlLCAi
dG9KU09OIikuY29uZmlndXJhYmxlJyk7CisgICAgICAgICAgICBzaG91bGRCZSgnUlRDSWNlQ2Fu
ZGlkYXRlLnByb3RvdHlwZS50b0pTT04ubGVuZ3RoJywgJzAnKTsKKyAgICAgICAgICAgIHNob3Vs
ZEJlKCdSVENJY2VDYW5kaWRhdGUucHJvdG90eXBlLnRvSlNPTi5uYW1lJywgJyJ0b0pTT04iJyk7
CisKKyAgICAgICAgICAgIHZhciBqc29uTWFwID0gY2FuZGlkYXRlLnRvSlNPTigpOworICAgICAg
ICAgICAgc2hvdWxkQmVUcnVlKCdPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGpzb25N
YXAsICJjYW5kaWRhdGUiKS5lbnVtZXJhYmxlJyk7CisgICAgICAgICAgICBzaG91bGRCZVRydWUo
J09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoanNvbk1hcCwgImNhbmRpZGF0ZSIpLndy
aXRhYmxlJyk7CisgICAgICAgICAgICBzaG91bGRCZVRydWUoJ09iamVjdC5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoanNvbk1hcCwgImNhbmRpZGF0ZSIpLmNvbmZpZ3VyYWJsZScpOworCisgICAg
ICAgICAgICB2YXIgY2hpbGRSVENJY2VDYW5kaWRhdGUgPSBmdW5jdGlvbigpIHt9OworICAgICAg
ICAgICAgY2hpbGRSVENJY2VDYW5kaWRhdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSVENJ
Y2VDYW5kaWRhdGUucHJvdG90eXBlKTsKKyAgICAgICAgICAgIHZhciBjaGlsZENhbmRpZGF0ZSA9
IG5ldyBjaGlsZFJUQ0ljZUNhbmRpZGF0ZSgpOworICAgICAgICAgICAgc2hvdWxkVGhyb3coJ2No
aWxkQ2FuZGlkYXRlLnRvSlNPTigpOycpOworCisgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9T
dHJpbmcoJ0pTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSknLCAneyJjYW5kaWRhdGUi
OiJmb28iLCJzZHBNaWQiOiJiYXIiLCJzZHBNTGluZUluZGV4Ijo2fScpOworICAgICAgICAgICAg
Y2FuZGlkYXRlLm5ld0F0dHJpYnV0ZSA9ICJuZXcgdmFsdWUiOworICAgICAgICAgICAgc2hvdWxk
QmVFcXVhbFRvU3RyaW5nKCdKU09OLnN0cmluZ2lmeShjYW5kaWRhdGUudG9KU09OKCkpJywgJ3si
Y2FuZGlkYXRlIjoiZm9vIiwic2RwTWlkIjoiYmFyIiwic2RwTUxpbmVJbmRleCI6Nn0nKTsKKyAg
ICAgICAgICAgIGNhbmRpZGF0ZS5zZHBNTGluZUluZGV4ID0gIm5vdCBhIG51bWJlciI7CisgICAg
ICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ0pTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50
b0pTT04oKSknLCAneyJjYW5kaWRhdGUiOiJmb28iLCJzZHBNaWQiOiJiYXIiLCJzZHBNTGluZUlu
ZGV4IjowfScpOworICAgICAgICAgICAgY2FuZGlkYXRlLnNkcE1pZCA9IDc7CisgICAgICAgICAg
ICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ0pTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04o
KSknLCAneyJjYW5kaWRhdGUiOiJmb28iLCJzZHBNaWQiOiI3Iiwic2RwTUxpbmVJbmRleCI6MH0n
KTsKKyAgICAgICAgICAgIGNhbmRpZGF0ZS5zZHBNaWQgPSBudWxsOworICAgICAgICAgICAgc2hv
dWxkQmVFcXVhbFRvU3RyaW5nKCdKU09OLnN0cmluZ2lmeShjYW5kaWRhdGUudG9KU09OKCkpJywg
J3siY2FuZGlkYXRlIjoiZm9vIiwic2RwTWlkIjpudWxsLCJzZHBNTGluZUluZGV4IjowfScpOwor
CiAgICAgICAgICAgICBkZWJ1ZygiIik7CiAKICAgICAgICAgICAgIGRlYnVnKCJEaWN0aW9uYXJ5
IG1lbWJlciAnY2FuZGlkYXRlJyBpcyByZXF1aXJlZC4iKTsKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLWV4cGVj
dGVkLnR4dAppbmRleCA2NTgyMThmZmUxMmU1NjAwNDg4ZDc5NTIyYzRhMzRhOWRmOGRlNmY4Li4z
NDA5YzJkZWVhMDI5YWE0MGNjNWIwNzZiODUxZjU3ZDYxYzJhZTExIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi1leHBlY3RlZC50
eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRp
b24tZXhwZWN0ZWQudHh0CkBAIC03LDYgKzcsNyBAQCBQQVNTIHNlc3Npb25EZXNjcmlwdGlvbiA9
IG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24oKTsgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCiBQ
QVNTIHNlc3Npb25EZXNjcmlwdGlvbiA9IG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24oaW5pdGlh
bGl6ZXIpOyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KIFBBU1Mgc2Vzc2lvbkRlc2NyaXB0aW9u
LnR5cGUgaXMgIm9mZmVyIgogUEFTUyBzZXNzaW9uRGVzY3JpcHRpb24uc2RwIGlzICJmb29iYXIi
CitQQVNTIEpTT04uc3RyaW5naWZ5KHNlc3Npb25EZXNjcmlwdGlvbi50b0pTT04oKSkgaXMgIntc
InR5cGVcIjpcIm9mZmVyXCIsXCJzZHBcIjpcImZvb2JhclwifSIKIFBBU1MgbmV3IFJUQ1Nlc3Np
b25EZXNjcmlwdGlvbihudWxsKTsgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogT3B0aW9uYWwg
UlRDU2Vzc2lvbkRlc2NyaXB0aW9uIGNvbnN0cnVjdG9yIGFyZ3VtZW50IG11c3QgYmUgYSB2YWxp
ZCBEaWN0aW9uYXJ5LgogUEFTUyBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKDUpOyB0aHJldyBl
eGNlcHRpb24gVHlwZUVycm9yOiBPcHRpb25hbCBSVENTZXNzaW9uRGVzY3JpcHRpb24gY29uc3Ry
dWN0b3IgYXJndW1lbnQgbXVzdCBiZSBhIHZhbGlkIERpY3Rpb25hcnkuCiBQQVNTIG5ldyBSVENT
ZXNzaW9uRGVzY3JpcHRpb24oJ2Zvb2JhcicpOyB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBP
cHRpb25hbCBSVENTZXNzaW9uRGVzY3JpcHRpb24gY29uc3RydWN0b3IgYXJndW1lbnQgbXVzdCBi
ZSBhIHZhbGlkIERpY3Rpb25hcnkuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlh
c3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRp
YXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24uaHRtbAppbmRleCAzYTY2ZDJlMjZiMTE5MTA1
YWMxZWQzMGRkNWFmNTc1Mjk5N2RmMzQyLi4xZDliNWNkMzM3ZWQ1ZGU5YTk2NThkNjQ2YjhjNDJi
ZGNhZGFlNjIzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1Nl
c3Npb25EZXNjcmlwdGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0v
UlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmh0bWwKQEAgLTE1LDYgKzE1LDcgQEAKICAgICAgICAgICAg
IHNob3VsZE5vdFRocm93KCJzZXNzaW9uRGVzY3JpcHRpb24gPSBuZXcgUlRDU2Vzc2lvbkRlc2Ny
aXB0aW9uKGluaXRpYWxpemVyKTsiKTsKICAgICAgICAgICAgIHNob3VsZEJlKCdzZXNzaW9uRGVz
Y3JpcHRpb24udHlwZScsICcib2ZmZXIiJyk7CiAgICAgICAgICAgICBzaG91bGRCZSgnc2Vzc2lv
bkRlc2NyaXB0aW9uLnNkcCcsICciZm9vYmFyIicpOworICAgICAgICAgICAgc2hvdWxkQmVFcXVh
bFRvU3RyaW5nKCdKU09OLnN0cmluZ2lmeShzZXNzaW9uRGVzY3JpcHRpb24udG9KU09OKCkpJywg
J3sidHlwZSI6Im9mZmVyIiwic2RwIjoiZm9vYmFyIn0nKTsKIAogICAgICAgICAgICAgc2hvdWxk
VGhyb3coIm5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24obnVsbCk7Iik7CiAgICAgICAgICAgICBz
aG91bGRUaHJvdygibmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbig1KTsiKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279654</attachid>
            <date>2016-05-24 09:00:09 -0700</date>
            <delta_ts>2016-05-25 03:38:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156293-20160524180114.patch</filename>
            <type>text/plain</type>
            <size>182459</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxMzMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDcwMGI4Yzg4ZjJkNWQ0
ZDNlNTc3ZWEwNmFmODJjMGNmYjhiMDY0NC4uZjI2OGUyZGFiMzg5OTU2OGFjNWQ5ODcxYWUxNjJj
OTM4MTM0ZDEwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg3IEBACisyMDE2LTA1LTI0ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIEFkZCBXZWJJREwg
c3BlY2lhbCBvcGVyYXRpb24gc3VwcG9ydDogc2VyaWFsaXplcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MjkzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgdGhlIHNlcmlhbGl6
ZXIgc3BlY2lhbCBvcGVyYXRpb24gZm9yIFdlYklETHMsCisgICAgICAgIGN1cnJlbnQgaW1wbGVt
ZW50YXRpb24gYWRkcyBzdXBwb3J0IGZvcjoKKyAgICAgICAgICAtIGp1c3QgdGhlIGtleXdvcmQ6
IHNlcmlhbGl6ZXI7IEl0IHdpbGwgcmV0dXJuIGFsbCB0aGUKKyAgICAgICAgICAgIGF0dHJpYnV0
ZXMgb2YgaW4gYW4gb2JqZWN0LgorICAgICAgICAgIC0gbWFwIG9mIGVudHJpZXMgd2l0aCB0aGUg
YXR0cmlidXRlczogc2VyaWFsaXplciA9IHthdHRyaWJ1dGUxLAorICAgICAgICAgICAgYXR0cmli
dXRlMiwgLi4ufQorCisgICAgICAgIEl0IGNyZWF0ZXMgYSB0b0pTT04gbWV0aG9kIHRoYXQgcmV0
dXJucyB0aGUgc2VyaWFsaXplZCB2YWx1ZQorICAgICAgICBjb252ZXJ0ZWQgaW50byBhbiBFQ01B
U2NyaXB0IHZhbHVlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBjaGVjayB0aGUKKyAgICAgICAgZGVm
aW5pdGlvbiBvZiB0aGUgb3BlcmF0aW9uOgorCisgICAgICAgIGh0dHA6Ly9oZXljYW0uZ2l0aHVi
LmlvL3dlYmlkbC8jaWRsLXNlcmlhbGl6ZXJzCisKKyAgICAgICAgV2UgaGF2ZSBtb2RpZmllZCBj
dXJyZW50IGNvZGUgdGhhdCBnZW5lcmF0ZXMgdGhlIGdldHRlciBmdW5jdGlvbgorICAgICAgICBm
b3IgYXR0cmlidXRlcyBpbiB0d28gcGFydHMgc28gdGhhdCB3ZSBjYW4gcmV1c2UgdGhlIHBhcnQK
KyAgICAgICAgZXh0cmFjdGluZyB0aGUgdmFsdWUgZm9yIHRoZSBzZXJpYWxpemVyLgorCisgICAg
ICAgIFVzZWQgdGhlIHN1cHBvcnQgdG8gYWRkIG5ldyBBUEkgZm9yIFJUQ0ljZUNhbmRpZGF0ZSBh
bmQKKyAgICAgICAgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLgorCisgICAgICAgIFVwZGF0ZWQgdGhl
IHRlc3RzIGV4cGVjdGF0aW9ucyBvZiB0aGUgYmluZGluZ3MuCisKKyAgICAgICAgVGVzdHM6IGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Tm9kZS5pZGwKKyAgICAgICAgICAgICAgIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAorICAgICAgICAgICAgICAgZmFzdC9tZWRpYXN0cmVh
bS9SVENJY2VDYW5kaWRhdGUuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9tZWRpYXN0cmVhbS9S
VENTZXNzaW9uRGVzY3JpcHRpb24uaHRtbAorCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVh
bS9SVENJY2VDYW5kaWRhdGUuaWRsOiBBZGRlZCB0aGUgc2VyaWFsaXplcgorICAgICAgICBvcGVy
YXRpb24uCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRp
b24uaWRsOiBBZGRlZCB0aGUKKyAgICAgICAgc2VyaWFsaXplciBvcGVyYXRpb24uCisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChnZXRHZXR0
ZXJGdW5jdGlvbkNhbGwpOiBBZGRlZCwgaXQgZ2VuZXJhdGVzIHRoZSBHZXR0ZXIgZnVuY3Rpb24K
KyAgICAgICAgY2FsbCBzdHJpbmcgYmFzZWQgb24gd2hhdCBwYXJhbWV0ZXJzIGl0IG5lZWRzLiBV
c2VkIGluIHRoZQorICAgICAgICBzZXJpYWxpemVyIGNvZGUgZ2VuZXJhdG9yLgorICAgICAgICAo
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6IFNwbGl0dGVkIHRoZSBjb2RlIG9mIHRoZSBhdHRyaWJ1
dGUKKyAgICAgICAgZ2V0dGVyIGluIHR3byBmdW5jdGlvbnMsIG9uZSBnZXR0aW5nIHRoZSB2YWx1
ZSBhbmQgdGhlIG90aGVyCisgICAgICAgIGhhbmRsaW5nIHRoZSBjYWxsIGZyb20gdGhlIEFQSS4g
VGhpcyB3YXkgd2UgY2FuIHJldXNlIHRoZSBjb2RlIGZvcgorICAgICAgICB0aGUgc2VyaWFsaXpl
ci4gVGhlIGJhc2ljIGlkZWEgaXMgdGhhdCB3ZSBoYXZlIGEgbmV3IGFycmF5IHdoZXJlCisgICAg
ICAgIHdlIHN0b3JlIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLCBuYW1lbHkgZ2V0dGVyRnVuY3Rp
b25Db250ZW50LgorICAgICAgICBCYXNlZCBvbiB0aGUgY29udGVudHMgb2YgdGhlIGZ1bmN0aW9u
IHdlIGJ1aWxkIHRoZSBsaXN0IG9mCisgICAgICAgIHBhcmFtZXRlcnMgb2YgdGhlIEdldHRlciBm
dW5jdGlvbi4gQWZ0ZXIgdGhhdCB3ZSBhZGQgdG8gdGhlIGZpbGUKKyAgICAgICAgY29udGVudHMg
dGhlIGZ1bmN0aW9uIHByb3RvdHlwZSBhbmQgdGhlIGdlbmVyYXRlZCBmdW5jdGlvbiBmb3IgdGhl
CisgICAgICAgIEdldHRlci4gTGF0ZXIgd2UgZ2VuZXJhdGUgdGhlIGZ1bmN0aW9uIGhhbmRsaW5n
IHRoZSBBUEkgY2FsbCB0aGF0CisgICAgICAgIHVzZXMgdGhlIEdldHRlciBmdW5jdGlvbi4gQWxz
byBBZGRlZCB0aGUgY2FsbHMgdG8gdGhlIHNlcmlhbGl6ZXIKKyAgICAgICAgY29kZSBnZW5lcmF0
b3IuCisgICAgICAgIChHZW5lcmF0ZVNlcmlhbGl6ZXJGdW5jdGlvbik6IEFkZGVkLCBnZW5lcmF0
ZXMgdGhlIHRvSlNPTiBmdW5jdGlvbgorICAgICAgICBhZGRpbmcgYWxsIHRoZSBzZXJpYWxpemFi
bGUtPmF0dHJpYnV0ZXMgdmFsdWUgdG8gYW4gb2JqZWN0IGFzCisgICAgICAgIGRlZmluZWQgaW4g
dGhlIHNwZWMuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG06IE1vZGlm
aWVkIHRoZSBzZXJpYWxpemVyIHBhcnNlcgorICAgICAgICB0aGF0IHdhcyB1bnVzZWQgdG8gc3Vw
cG9ydCB0aGUgV2ViSURMIHNwZWMgcGFydHMuIEFkZGVkIGEgbmV3CisgICAgICAgIGRvbVNlcmlh
bGl6YWJsZSB0eXBlIHRvIHN0b3JlIHRoZSBsaXN0IG9mIGF0dHJpYnV0ZXMgaW4gdGhlCisgICAg
ICAgIHBvc3NpYmxlIG1hcC4KKyAgICAgICAgKHBhcnNlU2VyaWFsaXplcik6IE1vZGlmaWVkIHRo
ZSBmdW5jdGlvbiB0byBmb2xsb3cgdGhlCisgICAgICAgIHNlbWljb2xvbiBydWxlIGluIHRoZSBz
cGVjLCBub3cgdGhlIHNlcmlhbGl6ZXIgbGluZSBtdXN0IGhhdmUgYQorICAgICAgICBzZW1pY29s
b24gbGlrZSBhbnkgb3RoZXIgbGluZS4KKyAgICAgICAgKHBhcnNlU2VyaWFsaXplclJlc3QpOiBU
aGUgZnVuY3Rpb24gbm93IGhhcyB0byBnZXQgdGhlIGF0dHJpYnV0ZXMKKyAgICAgICAgbGlzdCBm
cm9tIHRoZSBwYXR0ZXJuIHBhcnNpbmcgZnVuY3Rpb24gYW5kIGFkZCB0aGVtIHRvIHRoZQorICAg
ICAgICBkb21TZXJpYWxpemFibGUgaXRlbS4KKyAgICAgICAgKHBhcnNlU2VyaWFsaXphdGlvblBh
dHRlcm4pOiBOb3cgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBsaXN0IG9mCisgICAgICAgIGF0
dHJpYnV0ZXMgaW4gdGhlIHNlcmlhbGl6YWJsZSBtYXAgb3IgbGlzdCBpZiB3ZSBoYXZlIG9uZS4K
KyAgICAgICAgKHBhcnNlU2VyaWFsaXphdGlvbkF0dHJpYnV0ZXMpOiBBZGRlZCwgdGhpcyBmdW5j
dGlvbiByZXBsYWNlcyB0aGUKKyAgICAgICAgTWFwIGFuZCBMaXN0IGZ1bmN0aW9ucywgdGhlIGN1
cnJlbnRseSBzdXBwb3J0ZWQgcGFydHMgYXJlIHNpbWlsYXIKKyAgICAgICAgZm9yIGJvdGggc2l0
dWF0aW9ucy4KKyAgICAgICAgKGFwcGx5TWVtYmVyTGlzdCk6IEFkZGVkIHRoZSBzZXJpYWxpemFi
bGUgaXRlbSB0byB0aGUgaW50ZXJmYWNlCisgICAgICAgIHZhcmlhYmxlIGFuZCBwb3B1bGF0ZSB0
aGUgc2VyaWFsaXphYmxlIGluIGNhc2UgdGhlcmUgaXMgbm90IGEKKyAgICAgICAgZGVmaW5lZCBt
YXAuCisgICAgICAgIChwYXJzZVNlcmlhbGl6YXRpb25QYXR0ZXJuTWFwKTogUmVwbGFjZWQgd2l0
aAorICAgICAgICBwYXJzZVNlcmlhbGl6YXRpb25BdHRyaWJ1dGVzLgorICAgICAgICAocGFyc2VT
ZXJpYWxpemF0aW9uUGF0dGVybkxpc3QpOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHA6IE1vZGlmaWVkIHRoZSBleHBlY3RlZCByZXN1bHQu
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04pOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOiBNb2RpZmll
ZCB0aGUgZXhwZWN0ZWQgcmVzdWx0LgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25Ub0pTT04pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0
Tm9kZS5pZGw6IEFkZGVkIHRoZSBzZXJpYWxpemVyIHRlc3QuCisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsOiBBZGRlZCBzZXJpYWxpemVyIG1hcCB0ZXN0LgorCiAy
MDE2LTA1LTI0ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIHVwZGF0aW5nIGJpbmRpbmcgdGVzdCByZXN1bHRzCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5pZGwg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5pZGwK
aW5kZXggYzU3ODk2NjUxZTZhNjE0MjBlYzRhYmQyYjJlYTYzM2NlYTAwYWU0MC4uZTE0Nzg2MDZk
MThkNzkzMjc1N2JjZmVjMTIwZDVjYzcyMTE3ZDc5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaWRsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmlkbApAQCAtMzcsNSAr
MzcsNyBAQAogICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgY2FuZGlkYXRlOwogICAgIGF0dHJpYnV0
ZSBET01TdHJpbmc/IHNkcE1pZDsKICAgICBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQ/IHNkcE1M
aW5lSW5kZXg7CisKKyAgICBzZXJpYWxpemVyID0ge2NhbmRpZGF0ZSwgc2RwTWlkLCBzZHBNTGlu
ZUluZGV4fTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmlkbAppbmRleCAyMzQ1NWY3MDQwNzI4
ZTFiYWNlYWZlMjFhOGNhZThiOGE1MTQwNWVmLi4xZDY0MzUwMmUzZmFiMjNiNmRjM2I3NTBjZTJi
NTFkMjUyNDIwMzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24uaWRsCkBAIC0zNiw1ICszNiw3IEBA
CiBdIGludGVyZmFjZSBSVENTZXNzaW9uRGVzY3JpcHRpb24gewogICAgIFtTZXR0ZXJSYWlzZXNF
eGNlcHRpb25dIGF0dHJpYnV0ZSBET01TdHJpbmcgdHlwZTsKICAgICBhdHRyaWJ1dGUgRE9NU3Ry
aW5nIHNkcDsKKworICAgIHNlcmlhbGl6ZXIgPSB7dHlwZSwgc2RwfTsKIH07CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KaW5kZXgg
MjMzNmYxMmYxOTIwZmY1MzU0YmRiYzUxOTZkMjgyMWY4MDNmOWQ3Zi4uOTNlODE4NGQyZmE5N2M5
MDgyMDE0ZmY3OTIyZDkxZWQ0NjU0M2Y2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KQEAgLTE5ODQsNiArMTk4NCwzMCBAQCBz
dWIgR2V0SW5kZXhlZEdldHRlckV4cHJlc3Npb24KICAgICByZXR1cm4gInRvSlMoc3RhdGUsIHRo
aXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCB0aGlzT2JqZWN0LT53cmFwcGVkKCkuaXRlbShpbmRl
eCkpIjsKIH0KIAorc3ViIEdldEdldHRlckZ1bmN0aW9uQ2FsbAoreworICAgIG15ICgkaW50ZXJm
YWNlLCAkY2xhc3NOYW1lLCAkYXR0cmlidXRlKSA9IEBfOworCisgICAgbXkgJGdldEZ1bmN0aW9u
TmFtZSA9IEdldEF0dHJpYnV0ZUdldHRlck5hbWUoJGludGVyZmFjZSwgJGNsYXNzTmFtZSwgJGF0
dHJpYnV0ZSk7CisgICAgbXkgJHJlcXVpcmVzU3RhdGVQYXJhbWV0ZXIgPSBncmVwKC8ke2dldEZ1
bmN0aW9uTmFtZX1HZXR0ZXJcKEV4ZWNTdGF0ZS8sIEBpbXBsQ29udGVudCk7CisgICAgbXkgJHJl
cXVpcmVzQ2FzdGVkVGhpc1BhcmFtZXRlciA9IGdyZXAoLyR7Z2V0RnVuY3Rpb25OYW1lfUdldHRl
clwoLipjYXN0ZWRUaGlzXCkvLCBAaW1wbENvbnRlbnQpOworICAgIG15ICRnZXRGdW5jdGlvbk5h
bWVXaXRoUGFyYW1ldGVycyA9ICIke2dldEZ1bmN0aW9uTmFtZX1HZXR0ZXIoIjsKKyAgICBpZiAo
JHJlcXVpcmVzU3RhdGVQYXJhbWV0ZXIpIHsKKyAgICAgICAgJGdldEZ1bmN0aW9uTmFtZVdpdGhQ
YXJhbWV0ZXJzIC49ICJzdGF0ZSI7CisgICAgICAgIGlmICgkcmVxdWlyZXNDYXN0ZWRUaGlzUGFy
YW1ldGVyKSB7CisgICAgICAgICAgICAkZ2V0RnVuY3Rpb25OYW1lV2l0aFBhcmFtZXRlcnMgLj0g
IiwgY2FzdGVkVGhpcykiOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCRy
ZXF1aXJlc0Nhc3RlZFRoaXNQYXJhbWV0ZXIpIHsKKyAgICAgICAgICAgICRnZXRGdW5jdGlvbk5h
bWVXaXRoUGFyYW1ldGVycyAuPSAiY2FzdGVkVGhpcykiOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgJGdldEZ1bmN0aW9uTmFtZVdpdGhQYXJhbWV0ZXJzIC49ICIpIjsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiAkZ2V0RnVuY3Rpb25OYW1lV2l0aFBhcmFtZXRlcnM7Cit9
CisKIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiB7CiAgICAgbXkgKCRvYmplY3QsICRpbnRl
cmZhY2UsICRlbnVtZXJhdGlvbnMsICRkaWN0aW9uYXJpZXMpID0gQF87CkBAIC0xOTk4LDYgKzIw
MjIsOCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIG15ICR2aXNpYmxlSW50ZXJm
YWNlTmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRWaXNpYmxlSW50ZXJmYWNlTmFtZSgkaW50ZXJm
YWNlKTsKICAgICBteSAkZXZlbnRUYXJnZXQgPSAkY29kZUdlbmVyYXRvci0+SW5oZXJpdHNJbnRl
cmZhY2UoJGludGVyZmFjZSwgIkV2ZW50VGFyZ2V0IikgJiYgJGludGVyZmFjZS0+bmFtZSBuZSAi
RXZlbnRUYXJnZXQiOwogICAgIG15ICRuZWVkc1Zpc2l0Q2hpbGRyZW4gPSBJbnN0YW5jZU5lZWRz
VmlzaXRDaGlsZHJlbigkaW50ZXJmYWNlKTsKKyAgICBteSAkc2VyaWFsaXplckZ1bmN0aW9uTmFt
ZSA9ICJ0b0pTT04iOworICAgIG15ICRzZXJpYWxpemVyTmF0aXZlRnVuY3Rpb25OYW1lID0gJGNv
ZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGNsYXNzTmFtZSkgLiAiUHJvdG90eXBlRnVuY3Rpb24i
IC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJHNlcmlhbGl6ZXJGdW5jdGlvbk5hbWUpOwog
CiAgICAgbXkgJG5hbWVkR2V0dGVyRnVuY3Rpb24gPSBHZXROYW1lZEdldHRlckZ1bmN0aW9uKCRp
bnRlcmZhY2UpOwogICAgIG15ICRpbmRleGVkR2V0dGVyRnVuY3Rpb24gPSBHZXRJbmRleGVkR2V0
dGVyRnVuY3Rpb24oJGludGVyZmFjZSk7CkBAIC0yMDg3LDYgKzIxMTMsMTAgQEAgc3ViIEdlbmVy
YXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOwogICAg
IH0KIAorICAgIGlmICgkaW50ZXJmYWNlLT5zZXJpYWxpemFibGUpIHsKKyAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICJFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7c2VyaWFsaXplck5h
dGl2ZUZ1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKik7XG5cbiIpOworICAgIH0KKwogICAgIEdlbmVy
YXRlUHJvdG90eXBlRGVjbGFyYXRpb24oXEBpbXBsQ29udGVudCwgJGNsYXNzTmFtZSwgJGludGVy
ZmFjZSkgaWYgIUhlYWRlck5lZWRzUHJvdG90eXBlRGVjbGFyYXRpb24oJGludGVyZmFjZSk7CiAK
ICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVjbGFyYXRpb24oXEBpbXBsQ29udGVudCwgJGNsYXNz
TmFtZSwgJGludGVyZmFjZSkgaWYgTmVlZHNDb25zdHJ1Y3RvclByb3BlcnR5KCRpbnRlcmZhY2Up
OwpAQCAtMjI0NSw2ICsyMjc1LDE1IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAKICAg
ICBteSAkanVzdEdlbmVyYXRlVmFsdWVBcnJheSA9ICFJc0RPTUdsb2JhbE9iamVjdCgkaW50ZXJm
YWNlKTsKIAorICAgIGlmICgkaW50ZXJmYWNlLT5zZXJpYWxpemFibGUpIHsKKyAgICAgICAgcHVz
aChAaGFzaEtleXMsICRzZXJpYWxpemVyRnVuY3Rpb25OYW1lKTsKKyAgICAgICAgcHVzaChAaGFz
aFZhbHVlMSwgJHNlcmlhbGl6ZXJOYXRpdmVGdW5jdGlvbk5hbWUpOworICAgICAgICBwdXNoKEBo
YXNoVmFsdWUyLCAwKTsKKyAgICAgICAgcHVzaChAaGFzaFNwZWNpYWxzLCAiSlNDOjpGdW5jdGlv
biIpOworCisgICAgICAgICRoYXNoU2l6ZSsrOworICAgIH0KKwogICAgICRvYmplY3QtPkdlbmVy
YXRlSGFzaFRhYmxlKCRoYXNoTmFtZSwgJGhhc2hTaXplLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFxAaGFzaEtleXMsIFxAaGFzaFNwZWNpYWxzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFxAaGFzaFZhbHVlMSwgXEBoYXNoVmFsdWUyLApAQCAtMjUzOCw0OCArMjU3
NywxNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgbXkgJGF0dHJp
YnV0ZUNvbmRpdGlvbmFsU3RyaW5nID0gJGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRlQ29uZGl0aW9u
YWxTdHJpbmcoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlKTsKICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiI2lmICR7YXR0cmlidXRlQ29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkYXR0cmli
dXRlQ29uZGl0aW9uYWxTdHJpbmc7CiAKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
RW5jb2RlZEpTVmFsdWUgJHtnZXRGdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpXG4i
KTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CisgICAgICAgICAgICBt
eSBAZ2V0dGVyRnVuY3Rpb25Db250ZW50ID0gKCk7CiAKLSAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpO1xuIik7Ci0gICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpO1xuIik7
Ci0KLSAgICAgICAgICAgIGlmICghJGF0dHJpYnV0ZS0+aXNTdGF0aWMgfHwgJGF0dHJpYnV0ZS0+
c2lnbmF0dXJlLT50eXBlID1+IC9Db25zdHJ1Y3RvciQvKSB7Ci0gICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSBkZWNvZGVkVGhpc1ZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSk7XG4iKTsKLSAgICAgICAgICAgICAgICBteSAkY2FzdGluZ0Z1bmN0
aW9uID0gJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbVByb3h5VG9KU09i
amVjdCJ9ID8gInRvJHtjbGFzc05hbWV9IiA6IEdldENhc3RpbmdIZWxwZXJGb3JUaGlzT2JqZWN0
KCRpbnRlcmZhY2UpOwotICAgICAgICAgICAgICAgICMgaHR0cDovL2hleWNhbS5naXRodWIuaW8v
d2ViaWRsLyNJbXBsaWNpdFRoaXMKLSAgICAgICAgICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxpY2l0VGhpcyJ9KSB7Ci0gICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBkZWNvZGVkVGhpc1Zh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkgPyAkY2FzdGluZ0Z1bmN0aW9uKHN0YXRlLT50aGlzVmFs
dWUoKS50b1RoaXMoc3RhdGUsIE5vdFN0cmljdE1vZGUpKSA6ICRjYXN0aW5nRnVuY3Rpb24oZGVj
b2RlZFRoaXNWYWx1ZSk7XG4iKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiBjYXN0ZWRUaGlzID0gJGNh
c3RpbmdGdW5jdGlvbihkZWNvZGVkVGhpc1ZhbHVlKTtcbiIpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7XG4iKTsKLSAgICAgICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0
dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTGVuaWVudFRoaXMifSkgewotICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTtcbiIpOwotICAgICAgICAgICAgICAgIH0gZWxzaWYgKEludGVyZmFj
ZVJlcXVpcmVzQXR0cmlidXRlc09uSW5zdGFuY2VGb3JDb21wYXRpYmlsaXR5KCRpbnRlcmZhY2Up
KSB7Ci0gICAgICAgICAgICAgICAgICAgICMgRmFsbGJhY2sgdG8gdHJ5aW5nIHRvIHNlYXJjaGlu
ZyB0aGUgcHJvdG90eXBlIGNoYWluIGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMuCi0gICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBKU09iamVjdCogdGhpc09i
amVjdCA9IEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpLmdldE9iamVjdCgpO1xuIik7Ci0gICAg
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBmb3IgKHRoaXNPYmpl
Y3QgPSB0aGlzT2JqZWN0ID8gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KCkuZ2V0T2Jq
ZWN0KCkgOiBudWxscHRyOyB0aGlzT2JqZWN0OyB0aGlzT2JqZWN0ID0gdGhpc09iamVjdC0+Z2V0
UHJvdG90eXBlRGlyZWN0KCkuZ2V0T2JqZWN0KCkpIHtcbiIpOwotICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIGlmICgoY2FzdGVkVGhpcyA9ICIgLiBH
ZXRDYXN0aW5nSGVscGVyRm9yVGhpc09iamVjdCgkaW50ZXJmYWNlKSAuICIodGhpc09iamVjdCkp
KVxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAg
ICAgICAgIGJyZWFrO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICAgICB9XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgICAgIGlmICghY2FzdGVkVGhpcylcbiIpOwotICAgICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigq
c3RhdGUsIFwiJGludGVyZmFjZU5hbWVcIiwgXCIkbmFtZVwiKTtcbiIpOwotICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmVwb3J0RGVwcmVjYXRlZEdldHRl
ckVycm9yKCpzdGF0ZSwgXCIkaW50ZXJmYWNlTmFtZVwiLCBcIiRuYW1lXCIpO1xuIik7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsIFwiJGludGVy
ZmFjZU5hbWVcIiwgXCIkbmFtZVwiKTtcbiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHB1c2goQGdldHRlckZ1bmN0aW9uQ29udGVudCwgIntcbiIpOwogCiAgICAgICAg
ICAgICBteSBAYXJndW1lbnRzID0gKCk7CiAgICAgICAgICAgICBpZiAoJGdldHRlckV4Y2VwdGlv
bnMgJiYgIUhhc0N1c3RvbUdldHRlcigkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0
cmlidXRlcykpIHsKICAgICAgICAgICAgICAgICBwdXNoKEBhcmd1bWVudHMsICJlYyIpOwogICAg
ICAgICAgICAgICAgIGlmICgkZ2V0dGVyRXhjZXB0aW9uc1dpdGhNZXNzYWdlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEV4Y2VwdGlvbkNvZGVXaXRoTWVz
c2FnZSBlYztcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBnZXR0ZXJGdW5jdGlvbkNv
bnRlbnQsICIgICAgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlIGVjO1xuIik7CiAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChA
Z2V0dGVyRnVuY3Rpb25Db250ZW50LCAiICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwO1xuIik7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCkBAIC0yNTg5LDExICsyNTk3LDExIEBA
IHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgICAgIEFkZFRvSW1w
bEluY2x1ZGVzKCJGcmFtZS5oIik7CiAgICAgICAgICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1
ZGVzKCJTZXR0aW5ncy5oIik7CiAgICAgICAgICAgICAgICAgICAgIG15ICRlbmFibGVfZnVuY3Rp
b24gPSBUb01ldGhvZE5hbWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiRW5hYmxlZEJ5U2V0dGluZyJ9KSAuICJFbmFibGVkIjsKLSAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzLT53cmFw
cGVkKCkuZnJhbWUoKSkpXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsK
LSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgU2V0dGluZ3MmIHNl
dHRpbmdzID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpLmZyYW1lKCktPnNldHRpbmdzKCk7XG4iKTsK
LSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFzZXR0aW5n
cy4kZW5hYmxlX2Z1bmN0aW9uKCkpXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAZ2V0dGVyRnVuY3Rpb25Db250ZW50LCAi
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcy0+d3JhcHBlZCgpLmZyYW1lKCkpKVxuIik7Cisg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGdldHRlckZ1bmN0aW9uQ29udGVudCwgIiAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAZ2V0
dGVyRnVuY3Rpb25Db250ZW50LCAiICAgIFNldHRpbmdzJiBzZXR0aW5ncyA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKS5mcmFtZSgpLT5zZXR0aW5ncygpO1xuIik7CisgICAgICAgICAgICAgICAgICAg
IHB1c2goQGdldHRlckZ1bmN0aW9uQ29udGVudCwgIiAgICBpZiAoIXNldHRpbmdzLiRlbmFibGVf
ZnVuY3Rpb24oKSlcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBnZXR0ZXJGdW5jdGlv
bkNvbnRlbnQsICIgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpO1xuIik7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogCkBAIC0yNjA0LDggKzI2MTIsOCBAQCBzdWIgR2VuZXJh
dGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJDaGVja1NlY3VyaXR5In0gJiYKICAgICAgICAgICAgICAgICAhJGF0dHJpYnV0
ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRG9Ob3RDaGVja1NlY3VyaXR5In0g
JiYKICAgICAgICAgICAgICAgICAhJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiRG9Ob3RDaGVja1NlY3VyaXR5T25HZXR0ZXIifSkgewotICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxv
d0FjY2Vzc1RvRE9NV2luZG93KHN0YXRlLCBjYXN0ZWRUaGlzLT53cmFwcGVkKCkpKVxuIik7Ci0g
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBnZXR0
ZXJGdW5jdGlvbkNvbnRlbnQsICIgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93
QWNjZXNzVG9ET01XaW5kb3coc3RhdGUsIGNhc3RlZFRoaXMtPndyYXBwZWQoKSkpXG4iKTsKKyAg
ICAgICAgICAgICAgICBwdXNoKEBnZXR0ZXJGdW5jdGlvbkNvbnRlbnQsICIgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpO1xuIik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICgk
YXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOb25kZXRlcm1pbmlz
dGljIn0pIHsKQEAgLTI2MTMsNDggKzI2MjEsNDggQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRp
b24KICAgICAgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPHJlcGxheS9JbnB1dEN1cnNv
ci5oPiIsICJXRUJfUkVQTEFZIik7CiAgICAgICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMo
Ijx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4iLCAiV0VCX1JFUExBWSIpOwogCi0gICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIjaWYgRU5BQkxFKFdFQl9SRVBMQVkpXG4iKTsKLSAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKTtcbiIpOwotICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIElucHV0Q3Vyc29yJiBjdXJzb3IgPSBnbG9iYWxP
YmplY3QtPmlucHV0Q3Vyc29yKCk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBnZXR0ZXJG
dW5jdGlvbkNvbnRlbnQsICIjaWYgRU5BQkxFKFdFQl9SRVBMQVkpXG4iKTsKKyAgICAgICAgICAg
ICAgICBwdXNoKEBnZXR0ZXJGdW5jdGlvbkNvbnRlbnQsICIgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7XG4iKTsKKyAgICAgICAg
ICAgICAgICBwdXNoKEBnZXR0ZXJGdW5jdGlvbkNvbnRlbnQsICIgICAgSW5wdXRDdXJzb3ImIGN1
cnNvciA9IGdsb2JhbE9iamVjdC0+aW5wdXRDdXJzb3IoKTtcbiIpOwogCiAgICAgICAgICAgICAg
ICAgbXkgJG5hdGl2ZVR5cGUgPSBHZXROYXRpdmVUeXBlKCRpbnRlcmZhY2UsICR0eXBlKTsKICAg
ICAgICAgICAgICAgICBteSAkbWVtb2l6ZWRUeXBlID0gR2V0TmF0aXZlVHlwZUZvck1lbW9pemF0
aW9uKCRpbnRlcmZhY2UsICR0eXBlKTsKICAgICAgICAgICAgICAgICBteSAkZXhjZXB0aW9uQ29k
ZSA9ICRnZXR0ZXJFeGNlcHRpb25zV2l0aE1lc3NhZ2UgPyAiZWMuY29kZSIgOiAoJGdldHRlckV4
Y2VwdGlvbnMgPyAiZWMiIDogIjAiKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbWljU3RyaW5nPiBiaW5kaW5n
TmFtZShcIiRpbnRlcmZhY2VOYW1lLiRuYW1lXCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
aWYgKGN1cnNvci5pc0NhcHR1cmluZygpKSB7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAgICAgJG1lbW9pemVkVHlwZSBtZW1vaXplZFJlc3VsdCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKS4kaW1wbEdldHRlckZ1bmN0aW9uTmFtZSgiIC4gam9pbigiLCAiLCBA
YXJndW1lbnRzKSAuICIpO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgICAgIGN1cnNvci5hcHBlbmRJbnB1dDxNZW1vaXplZERPTVJlc3VsdDwkbWVtb2l6ZWRU
eXBlPj4oYmluZGluZ05hbWUuZ2V0KCkuc3RyaW5nKCksIG1lbW9pemVkUmVzdWx0LCAkZXhjZXB0
aW9uQ29kZSk7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAg
ICAgSlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25h
dHVyZSwgMCwgJGludGVyZmFjZSwgIm1lbW9pemVkUmVzdWx0IiwgImNhc3RlZFRoaXMiKSAuICI7
XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgc2V0RE9N
RXhjZXB0aW9uKHN0YXRlLCBlYyk7XG4iKSBpZiAkZ2V0dGVyRXhjZXB0aW9uczsKLSAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
fVxuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOwotICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChjdXJzb3IuaXNSZXBsYXlpbmco
KSkge1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICRt
ZW1vaXplZFR5cGUgbWVtb2l6ZWRSZXN1bHQ7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAgICAgTWVtb2l6ZWRET01SZXN1bHRCYXNlKiBpbnB1dCA9IGN1cnNv
ci5mZXRjaElucHV0PE1lbW9pemVkRE9NUmVzdWx0QmFzZT4oKTtcbiIpOwotICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBpZiAoaW5wdXQgJiYgaW5wdXQtPmNvbnZl
cnRUbzwkbWVtb2l6ZWRUeXBlPihtZW1vaXplZFJlc3VsdCkpIHtcbiIpOworICAgICAgICAgICAg
ICAgIHB1c2goQGdldHRlckZ1bmN0aW9uQ29udGVudCwgIiAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8Y29uc3QgQXRvbWljU3RyaW5nPiBiaW5kaW5nTmFtZShcIiRpbnRlcmZhY2VOYW1lLiRuYW1l
XCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpO1xuIik7CisgICAgICAgICAg
ICAgICAgcHVzaChAZ2V0dGVyRnVuY3Rpb25Db250ZW50LCAiICAgIGlmIChjdXJzb3IuaXNDYXB0
dXJpbmcoKSkge1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAZ2V0dGVyRnVuY3Rpb25Db250
ZW50LCAiICAgICAgICAkbWVtb2l6ZWRUeXBlIG1lbW9pemVkUmVzdWx0ID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpLiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCIgLiBqb2luKCIsICIsIEBhcmd1bWVu
dHMpIC4gIik7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBnZXR0ZXJGdW5jdGlvbkNvbnRl
bnQsICIgICAgICAgIGN1cnNvci5hcHBlbmRJbnB1dDxNZW1vaXplZERPTVJlc3VsdDwkbWVtb2l6
ZWRUeXBlPj4oYmluZGluZ05hbWUuZ2V0KCkuc3RyaW5nKCksIG1lbW9pemVkUmVzdWx0LCAkZXhj
ZXB0aW9uQ29kZSk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBnZXR0ZXJGdW5jdGlvbkNv
bnRlbnQsICIgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0
cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRlcmZhY2UsICJtZW1vaXplZFJlc3VsdCIsICJjYXN0
ZWRUaGlzIikgLiAiO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAZ2V0dGVyRnVuY3Rpb25D
b250ZW50LCAiICAgICAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTtcbiIpIGlmICRnZXR0
ZXJFeGNlcHRpb25zOworICAgICAgICAgICAgICAgIHB1c2goQGdldHRlckZ1bmN0aW9uQ29udGVu
dCwgIiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGdl
dHRlckZ1bmN0aW9uQ29udGVudCwgIiAgICB9XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBn
ZXR0ZXJGdW5jdGlvbkNvbnRlbnQsICJcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGdldHRl
ckZ1bmN0aW9uQ29udGVudCwgIiAgICBpZiAoY3Vyc29yLmlzUmVwbGF5aW5nKCkpIHtcbiIpOwor
ICAgICAgICAgICAgICAgIHB1c2goQGdldHRlckZ1bmN0aW9uQ29udGVudCwgIiAgICAgICAgJG1l
bW9pemVkVHlwZSBtZW1vaXplZFJlc3VsdDtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGdl
dHRlckZ1bmN0aW9uQ29udGVudCwgIiAgICAgICAgTWVtb2l6ZWRET01SZXN1bHRCYXNlKiBpbnB1
dCA9IGN1cnNvci5mZXRjaElucHV0PE1lbW9pemVkRE9NUmVzdWx0QmFzZT4oKTtcbiIpOworICAg
ICAgICAgICAgICAgIHB1c2goQGdldHRlckZ1bmN0aW9uQ29udGVudCwgIiAgICAgICAgaWYgKGlu
cHV0ICYmIGlucHV0LT5jb252ZXJ0VG88JG1lbW9pemVkVHlwZT4obWVtb2l6ZWRSZXN1bHQpKSB7
XG4iKTsKICAgICAgICAgICAgICAgICAjIEZJWE1FOiB0aGUgZ2VuZXJhdGVkIGNvZGUgc2hvdWxk
IHJlcG9ydCBhbiBlcnJvciBpZiBhbiBpbnB1dCBjYW5ub3QgYmUgZmV0Y2hlZCBvciBjb252ZXJ0
ZWQuCi0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICAgICBKU1Zh
bHVlIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAw
LCAkaW50ZXJmYWNlLCAibWVtb2l6ZWRSZXN1bHQiLCAiY2FzdGVkVGhpcyIpIC4gIjtcbiIpOwot
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAgICAgc2V0RE9NRXhj
ZXB0aW9uKHN0YXRlLCBpbnB1dC0+ZXhjZXB0aW9uQ29kZSgpKTtcbiIpIGlmICRnZXR0ZXJFeGNl
cHRpb25zOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgICAgIH1cbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIH1cbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiI2VuZGlmXG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBnZXR0ZXJGdW5jdGlvbkNvbnRl
bnQsICIgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNlLCAibWVtb2l6ZWRSZXN1bHQiLCAiY2Fz
dGVkVGhpcyIpIC4gIjtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGdldHRlckZ1bmN0aW9u
Q29udGVudCwgIiAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgaW5wdXQtPmV4Y2Vw
dGlvbkNvZGUoKSk7XG4iKSBpZiAkZ2V0dGVyRXhjZXB0aW9uczsKKyAgICAgICAgICAgICAgICBw
dXNoKEBnZXR0ZXJGdW5jdGlvbkNvbnRlbnQsICIgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xu
Iik7CisgICAgICAgICAgICAgICAgcHVzaChAZ2V0dGVyRnVuY3Rpb25Db250ZW50LCAiICAgICAg
ICB9XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBnZXR0ZXJGdW5jdGlvbkNvbnRlbnQsICIg
ICAgfVxuIik7CisgICAgICAgICAgICAgICAgcHVzaChAZ2V0dGVyRnVuY3Rpb25Db250ZW50LCAi
I2VuZGlmXG4iKTsKICAgICAgICAgICAgIH0gIyBhdHRyaWJ1dGUgTm9uZGV0ZXJtaW5pc3RpYwog
CiAgICAgICAgICAgICBpZiAoSGFzQ3VzdG9tR2V0dGVyKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzKSkgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+JGltcGxHZXR0ZXJGdW5j
dGlvbk5hbWUoKnN0YXRlKSk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBnZXR0ZXJGdW5j
dGlvbkNvbnRlbnQsICIgICAgcmV0dXJuIGNhc3RlZFRoaXMtPiRpbXBsR2V0dGVyRnVuY3Rpb25O
YW1lKCpzdGF0ZSk7XG4iKTsKICAgICAgICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPnNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNoZWNrU2VjdXJpdHlGb3JOb2RlIn0pIHsKICAg
ICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJKU0RPTUJpbmRpbmcuaCJ9ID0gMTsKLSAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShzdGF0ZSwg
aW1wbC4iIC4gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lIC4gIigpKSA/ICIgLiBOYXRpdmVU
b0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNlLCAiaW1wbC4kaW1w
bEdldHRlckZ1bmN0aW9uTmFtZSgpIiwgImNhc3RlZFRoaXMiKSAuICIgOiBqc051bGwoKSk7XG4i
KTsKKyAgICAgICAgICAgICAgICBwdXNoKEBnZXR0ZXJGdW5jdGlvbkNvbnRlbnQsICIgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTtcbiIpOworICAgICAgICAgICAgICAgIHB1
c2goQGdldHRlckZ1bmN0aW9uQ29udGVudCwgIiAgICByZXR1cm4gc2hvdWxkQWxsb3dBY2Nlc3NU
b05vZGUoc3RhdGUsIGltcGwuIiAuICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSAuICIoKSkg
PyAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFj
ZSwgImltcGwuJGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUoKSIsICJjYXN0ZWRUaGlzIikgLiAiIDog
anNOdWxsKCk7XG4iKTsKICAgICAgICAgICAgIH0gZWxzaWYgKCR0eXBlIGVxICJFdmVudEhhbmRs
ZXIiKSB7CiAgICAgICAgICAgICAgICAgbXkgJGdldHRlciA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IldpbmRvd0V2ZW50SGFuZGxlciJ9ID8gIndpbmRvd0V2
ZW50SGFuZGxlckF0dHJpYnV0ZSIKICAgICAgICAgICAgICAgICAgICAgOiAkYXR0cmlidXRlLT5z
aWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJEb2N1bWVudEV2ZW50SGFuZGxlciJ9ID8g
ImRvY3VtZW50RXZlbnRIYW5kbGVyQXR0cmlidXRlIgogICAgICAgICAgICAgICAgICAgICA6ICJl
dmVudEhhbmRsZXJBdHRyaWJ1dGUiOwogICAgICAgICAgICAgICAgIG15ICRldmVudE5hbWUgPSBF
dmVudEhhbmRsZXJBdHRyaWJ1dGVFdmVudE5hbWUoJGF0dHJpYnV0ZSk7Ci0gICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTtcbiIpOwotICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoJGdldHRlcihjYXN0ZWRUaGlzLT53cmFwcGVkKCksICRldmVudE5hbWUpKTtcbiIpOworICAg
ICAgICAgICAgICAgIHB1c2goQGdldHRlckZ1bmN0aW9uQ29udGVudCwgIiAgICBVTlVTRURfUEFS
QU0oc3RhdGUpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAZ2V0dGVyRnVuY3Rpb25Db250
ZW50LCAiICAgIHJldHVybiAkZ2V0dGVyKGNhc3RlZFRoaXMtPndyYXBwZWQoKSwgJGV2ZW50TmFt
ZSk7XG4iKTsKICAgICAgICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlw
ZSA9fiAvQ29uc3RydWN0b3IkLykgewogICAgICAgICAgICAgICAgIG15ICRjb25zdHJ1Y3RvclR5
cGUgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGU7CiAgICAgICAgICAgICAgICAgJGNvbnN0
cnVjdG9yVHlwZSA9fiBzL0NvbnN0cnVjdG9yJC8vOwpAQCAtMjY2MywzMCArMjY3MSwzMCBAQCBz
dWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgIGlmICgkaW50ZXJmYWNl
TmFtZSBlcSAiRE9NV2luZG93IikgewogICAgICAgICAgICAgICAgICAgICBteSAkbmFtZWQgPSAo
JGNvbnN0cnVjdG9yVHlwZSA9fiAvTmFtZWQkLykgPyAiTmFtZWQiIDogIiI7CiAgICAgICAgICAg
ICAgICAgICAgICRjb25zdHJ1Y3RvclR5cGUgPX4gcy9OYW1lZCQvLzsKLSAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKUyIg
LiAkY29uc3RydWN0b3JUeXBlIC4gIjo6Z2V0JHtuYW1lZH1Db25zdHJ1Y3RvcihzdGF0ZS0+dm0o
KSwgY2FzdGVkVGhpcykpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGdldHRlckZ1
bmN0aW9uQ29udGVudCwgIiAgICByZXR1cm4gSlMiIC4gJGNvbnN0cnVjdG9yVHlwZSAuICI6Omdl
dCR7bmFtZWR9Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGNhc3RlZFRoaXMpO1xuIik7CiAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVk
ZXMoIkpTIiAuICRjb25zdHJ1Y3RvclR5cGUgLiAiLmgiLCAkYXR0cmlidXRlLT5zaWduYXR1cmUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25kaXRpb25hbCJ9KTsKLSAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKUyIgLiAk
Y29uc3RydWN0b3JUeXBlIC4gIjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpKSk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAZ2V0
dGVyRnVuY3Rpb25Db250ZW50LCAiICAgIHJldHVybiBKUyIgLiAkY29uc3RydWN0b3JUeXBlIC4g
Ijo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
KTtcbiIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzaWYgKCEkYXR0cmli
dXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJHZXR0ZXJSYWlzZXNFeGNlcHRp
b24ifSAmJiAhJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiR2V0
dGVyUmFpc2VzRXhjZXB0aW9uV2l0aE1lc3NhZ2UifSkgewogICAgICAgICAgICAgICAgIG15ICRj
YWNoZUluZGV4ID0gMDsKICAgICAgICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FjaGVkQXR0cmlidXRlIn0pIHsKICAgICAgICAgICAg
ICAgICAgICAgJGNhY2hlSW5kZXggPSAkY3VycmVudENhY2hlZEF0dHJpYnV0ZTsKICAgICAgICAg
ICAgICAgICAgICAgJGN1cnJlbnRDYWNoZWRBdHRyaWJ1dGUrKzsKLSAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUgPSBjYXN0
ZWRUaGlzLT5tXyIgLiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUgLiAiLmdldCgpKVxuIik7
Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGNhY2hlZFZhbHVlKTtcbiIpOworICAgICAgICAgICAgICAgICAgICBw
dXNoKEBnZXR0ZXJGdW5jdGlvbkNvbnRlbnQsICIgICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUg
PSBjYXN0ZWRUaGlzLT5tXyIgLiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUgLiAiLmdldCgp
KVxuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGdldHRlckZ1bmN0aW9uQ29udGVudCwg
IiAgICAgICAgcmV0dXJuIGNhY2hlZFZhbHVlO1xuIik7CiAgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgbXkgQGNhbGxXaXRoQXJncyA9IEdlbmVyYXRlQ2FsbFdpdGgoJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifSwgXEBpbXBs
Q29udGVudCwgIkpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSIpOworICAgICAgICAgICAg
ICAgIG15IEBjYWxsV2l0aEFyZ3MgPSBHZW5lcmF0ZUNhbGxXaXRoKCRhdHRyaWJ1dGUtPnNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhbGxXaXRoIn0sIFxAZ2V0dGVyRnVuY3Rpb25D
b250ZW50LCAianNVbmRlZmluZWQoKSIpOwogCiAgICAgICAgICAgICAgICAgaWYgKCRzdmdMaXN0
UHJvcGVydHlUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIEpTVmFsdWUgcmVzdWx0ID0gICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2ln
bmF0dXJlLCAwLCAkaW50ZXJmYWNlLCAiY2FzdGVkVGhpcy0+d3JhcHBlZCgpLiRpbXBsR2V0dGVy
RnVuY3Rpb25OYW1lKCIgLiAoam9pbiAiLCAiLCBAY2FsbFdpdGhBcmdzKSAuICIpIiwgImNhc3Rl
ZFRoaXMiKSAuICI7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAZ2V0dGVyRnVuY3Rp
b25Db250ZW50LCAiICAgIEpTVmFsdWUgcmVzdWx0ID0gICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNlLCAiY2FzdGVkVGhpcy0+d3JhcHBlZCgp
LiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCIgLiAoam9pbiAiLCAiLCBAY2FsbFdpdGhBcmdzKSAu
ICIpIiwgImNhc3RlZFRoaXMiKSAuICI7XG4iKTsKICAgICAgICAgICAgICAgICB9IGVsc2lmICgk
c3ZnUHJvcGVydHlPckxpc3RQcm9wZXJ0eVR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgJHN2Z1Byb3BlcnR5T3JMaXN0UHJvcGVydHlUeXBlJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpLnByb3BlcnR5UmVmZXJlbmNlKCk7XG4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgcHVzaChAZ2V0dGVyRnVuY3Rpb25Db250ZW50LCAiICAgICRzdmdQcm9w
ZXJ0eU9yTGlzdFByb3BlcnR5VHlwZSYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKS5wcm9w
ZXJ0eVJlZmVyZW5jZSgpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIGlmICgkc3ZnUHJvcGVy
dHlPckxpc3RQcm9wZXJ0eVR5cGUgZXEgImZsb2F0IikgeyAjIFNwZWNpYWwgY2FzZSBmb3IgSlNT
VkdOdW1iZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IEpTVmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1
cmUsIDAsICRpbnRlcmZhY2UsICJpbXBsIiwgImNhc3RlZFRoaXMiKSAuICI7XG4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGdldHRlckZ1bmN0aW9uQ29udGVudCwgIiAgICBKU1Zh
bHVlIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAw
LCAkaW50ZXJmYWNlLCAiaW1wbCIsICJjYXN0ZWRUaGlzIikgLiAiO1xuIik7CiAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBKU1ZhbHVlIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0
ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNlLCAiaW1wbC4kaW1wbEdldHRlckZ1bmN0aW9uTmFt
ZSgiIC4gKGpvaW4gIiwgIiwgQGNhbGxXaXRoQXJncykgLiAiKSIsICJjYXN0ZWRUaGlzIikgLiAi
O1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBnZXR0ZXJGdW5jdGlvbkNvbnRl
bnQsICIgICAgSlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUt
PnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgImltcGwuJGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUo
IiAuIChqb2luICIsICIsIEBjYWxsV2l0aEFyZ3MpIC4gIikiLCAiY2FzdGVkVGhpcyIpIC4gIjtc
biIpOwogCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgewpA
QCAtMjcwNCwzNiArMjcxMiwxMjcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KIAogICAg
ICAgICAgICAgICAgICAgICB1bnNoaWZ0KEBhcmd1bWVudHMsIEBjYWxsV2l0aEFyZ3MpOwogICAg
ICAgICAgICAgICAgICAgICBteSAkanNUeXBlID0gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUt
PnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgIiR7ZnVuY3Rpb25OYW1lfSgiIC4gam9pbigiLCAi
LCBAYXJndW1lbnRzKSAuICIpIiwgImNhc3RlZFRoaXMiKTsKLSAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTtcbiIpIGlmICEkYXR0cmlidXRlLT5pc1N0YXRpYzsKKyAgICAgICAgICAgICAgICAgICAgcHVz
aChAZ2V0dGVyRnVuY3Rpb25Db250ZW50LCAiICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7XG4iKSBpZiAhJGF0dHJpYnV0ZS0+aXNTdGF0aWM7CiAgICAgICAgICAgICAgICAg
ICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNTVkdBbmltYXRlZFR5cGUoJHR5cGUpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvIG9iaiA9ICRq
c1R5cGU7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCksIG9iai5nZXQoKSk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGdldHRl
ckZ1bmN0aW9uQ29udGVudCwgIiAgICBhdXRvIG9iaiA9ICRqc1R5cGU7XG4iKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGdldHRlckZ1bmN0aW9uQ29udGVudCwgIiAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBvYmouZ2V0
KCkpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHJlc3VsdCA9ICRqc1R5cGU7
XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGdldHRlckZ1bmN0aW9uQ29udGVu
dCwgIiAgICBKU1ZhbHVlIHJlc3VsdCA9ICRqc1R5cGU7XG4iKTsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIGNhc3RlZFRoaXMtPm1fIiAuICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSAu
ICIuc2V0KHN0YXRlLT52bSgpLCBjYXN0ZWRUaGlzLCByZXN1bHQpO1xuIikgaWYgKCRhdHRyaWJ1
dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhY2hlZEF0dHJpYnV0ZSJ9KTsK
LSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7XG4iKTsKKyAgICAgICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+c2ln
bmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FjaGVkQXR0cmlidXRlIn0pIHsKKyAgICAg
ICAgICAgICAgICAgICAgcHVzaChAZ2V0dGVyRnVuY3Rpb25Db250ZW50LCAiICAgIGNhc3RlZFRo
aXMtPm1fIiAuICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSAuICIuc2V0KHN0YXRlLT52bSgp
LCBjYXN0ZWRUaGlzLCByZXN1bHQpO1xuIikgOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIHB1c2goQGdldHRlckZ1bmN0aW9uQ29udGVudCwgIiAgICByZXR1cm4gcmVzdWx0
O1xuIik7CiAKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdW5zaGlmdChA
YXJndW1lbnRzLCBHZW5lcmF0ZUNhbGxXaXRoKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkNhbGxXaXRoIn0sIFxAaW1wbENvbnRlbnQsICJKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSkiKSk7CisgICAgICAgICAgICAgICAgdW5zaGlmdChAYXJndW1lbnRz
LCBHZW5lcmF0ZUNhbGxXaXRoKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkNhbGxXaXRoIn0sIFxAZ2V0dGVyRnVuY3Rpb25Db250ZW50LCAianNVbmRlZmluZWQo
KSIpKTsKIAogICAgICAgICAgICAgICAgIGlmICgkc3ZnUHJvcGVydHlPckxpc3RQcm9wZXJ0eVR5
cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHN2Z1By
b3BlcnR5T3JMaXN0UHJvcGVydHlUeXBlIGltcGwoKmNhc3RlZFRoaXMtPndyYXBwZWQoKSk7XG4i
KTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSBy
ZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGlu
dGVyZmFjZSwgImltcGwuJGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUoIiAuIGpvaW4oIiwgIiwgQGFy
Z3VtZW50cykgLiAiKSIsICJjYXN0ZWRUaGlzIikgLiAiO1xuIik7CisgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGdldHRlckZ1bmN0aW9uQ29udGVudCwgIiAgICAkc3ZnUHJvcGVydHlPckxpc3RQ
cm9wZXJ0eVR5cGUgaW1wbCgqY2FzdGVkVGhpcy0+d3JhcHBlZCgpKTtcbiIpOworICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBnZXR0ZXJGdW5jdGlvbkNvbnRlbnQsICIgICAgSlNWYWx1ZSByZXN1
bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVy
ZmFjZSwgImltcGwuJGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUoIiAuIGpvaW4oIiwgIiwgQGFyZ3Vt
ZW50cykgLiAiKSIsICJjYXN0ZWRUaGlzIikgLiAiO1xuIik7CiAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTtcbiIpOwotICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFs
dWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNlLCAiaW1wbC4kaW1wbEdldHRl
ckZ1bmN0aW9uTmFtZSgiIC4gam9pbigiLCAiLCBAYXJndW1lbnRzKSAuICIpIiwgImNhc3RlZFRo
aXMiKSAuICI7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAZ2V0dGVyRnVuY3Rpb25D
b250ZW50LCAiICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7XG4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgcHVzaChAZ2V0dGVyRnVuY3Rpb25Db250ZW50LCAiICAgIEpTVmFs
dWUgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAs
ICRpbnRlcmZhY2UsICJpbXBsLiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCIgLiBqb2luKCIsICIs
IEBhcmd1bWVudHMpIC4gIikiLCAiY2FzdGVkVGhpcyIpIC4gIjtcbiIpOwogICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHNldERPTUV4
Y2VwdGlvbihzdGF0ZSwgZWMpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAZ2V0dGVyRnVu
Y3Rpb25Db250ZW50LCAiICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpO1xuIik7CisKKyAg
ICAgICAgICAgICAgICBwdXNoKEBnZXR0ZXJGdW5jdGlvbkNvbnRlbnQsICIgICAgcmV0dXJuIHJl
c3VsdDtcbiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdXNoKEBnZXR0ZXJGdW5j
dGlvbkNvbnRlbnQsICJ9XG5cbiIpOworCisgICAgICAgICAgICBteSAkcmVxdWlyZXNTdGF0ZVBh
cmFtZXRlciA9IGdyZXAoL3N0YXRlLywgQGdldHRlckZ1bmN0aW9uQ29udGVudCk7CisgICAgICAg
ICAgICBteSAkcmVxdWlyZXNDYXN0ZWRUaGlzUGFyYW1ldGVyID0gZ3JlcCgvY2FzdGVkVGhpcy8s
IEBnZXR0ZXJGdW5jdGlvbkNvbnRlbnQpOwogCi0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpO1xuIik7CisgICAgICAg
ICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTm9u
ZGV0ZXJtaW5pc3RpYyJ9KSB7CisgICAgICAgICAgICAgICAgbXkgJGZsYXR0ZW5HZXR0ZXJGdW5j
dGlvbkNvbnRlbnQgLj0gam9pbiAiIiwgQGdldHRlckZ1bmN0aW9uQ29udGVudDsKKyAgICAgICAg
ICAgICAgICAkcmVxdWlyZXNTdGF0ZVBhcmFtZXRlciA9IGdyZXAoL2VuZGlmLipzdGF0ZS9zLCAk
ZmxhdHRlbkdldHRlckZ1bmN0aW9uQ29udGVudCk7CisgICAgICAgICAgICAgICAgJHJlcXVpcmVz
Q2FzdGVkVGhpc1BhcmFtZXRlciA9IGdyZXAoL2VuZGlmLipjYXN0ZWRUaGlzL3MsICRmbGF0dGVu
R2V0dGVyRnVuY3Rpb25Db250ZW50KTsKKyAgICAgICAgICAgICAgICBpZiAoISRyZXF1aXJlc0Nh
c3RlZFRoaXNQYXJhbWV0ZXIgfHwgISRyZXF1aXJlc1N0YXRlUGFyYW1ldGVyKSB7CisgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2lmIEVOQUJMRShXRUJfUkVQTEFZKVxu
Iik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNWYWx1ZSAke2dl
dEZ1bmN0aW9uTmFtZX1HZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgJHtjbGFzc05hbWV9KiBjYXN0
ZWRUaGlzKVxuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2Vs
c2VcbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKCEkcmVxdWlyZXNDYXN0ZWRUaGlzUGFyYW1ldGVyKSB7CisgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJKU1ZhbHVlICR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlKVxuIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlm
ICgkcmVxdWlyZXNTdGF0ZVBhcmFtZXRlcikgeworICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIkpTVmFsdWUgJHtnZXRGdW5jdGlvbk5hbWV9R2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsICR7Y2xhc3NOYW1lfSogY2FzdGVkVGhpcylcbiIpOworICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNWYWx1ZSAk
e2dldEZ1bmN0aW9uTmFtZX1HZXR0ZXIoJHtjbGFzc05hbWV9KiBjYXN0ZWRUaGlzKVxuIik7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTm9uZGV0ZXJtaW5pc3RpYyJ9
ICYmICghJHJlcXVpcmVzQ2FzdGVkVGhpc1BhcmFtZXRlciB8fCAhJHJlcXVpcmVzU3RhdGVQYXJh
bWV0ZXIpKSB7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIjZW5kaWZcbiIp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgQGdldHRl
ckZ1bmN0aW9uQ29udGVudCk7CisKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiRW5j
b2RlZEpTVmFsdWUgJHtnZXRGdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpXG4iKTsK
KyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CisKKyAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7XG4iKTsKKyAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpO1xuIik7
CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBVTlVTRURfUEFSQU0oc2xvdEJh
c2UpO1xuIik7CisKKyAgICAgICAgICAgIGlmICghJGF0dHJpYnV0ZS0+aXNTdGF0aWMgfHwgJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlID1+IC9Db25zdHJ1Y3RvciQvKSB7CisgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSBkZWNvZGVkVGhpc1ZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSk7XG4iKTsKKyAgICAgICAgICAgICAgICBteSAkY2Fz
dGluZ0Z1bmN0aW9uID0gJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbVBy
b3h5VG9KU09iamVjdCJ9ID8gInRvJHtjbGFzc05hbWV9IiA6IEdldENhc3RpbmdIZWxwZXJGb3JU
aGlzT2JqZWN0KCRpbnRlcmZhY2UpOworICAgICAgICAgICAgICAgICMgaHR0cDovL2hleWNhbS5n
aXRodWIuaW8vd2ViaWRsLyNJbXBsaWNpdFRoaXMKKyAgICAgICAgICAgICAgICBpZiAoJGludGVy
ZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxpY2l0VGhpcyJ9KSB7CisgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBkZWNv
ZGVkVGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkgPyAkY2FzdGluZ0Z1bmN0aW9uKHN0YXRl
LT50aGlzVmFsdWUoKS50b1RoaXMoc3RhdGUsIE5vdFN0cmljdE1vZGUpKSA6ICRjYXN0aW5nRnVu
Y3Rpb24oZGVjb2RlZFRoaXNWYWx1ZSk7XG4iKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiBjYXN0ZWRU
aGlzID0gJGNhc3RpbmdGdW5jdGlvbihkZWNvZGVkVGhpc1ZhbHVlKTtcbiIpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7XG4iKTsKKyAgICAgICAgICAgICAgICBpZiAoJGF0dHJpYnV0
ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTGVuaWVudFRoaXMifSkgeworICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOworICAgICAgICAgICAgICAgIH0gZWxzaWYg
KEludGVyZmFjZVJlcXVpcmVzQXR0cmlidXRlc09uSW5zdGFuY2VGb3JDb21wYXRpYmlsaXR5KCRp
bnRlcmZhY2UpKSB7CisgICAgICAgICAgICAgICAgICAgICMgRmFsbGJhY2sgdG8gdHJ5aW5nIHRv
IHNlYXJjaGluZyB0aGUgcHJvdG90eXBlIGNoYWluIGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMu
CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBKU09iamVj
dCogdGhpc09iamVjdCA9IEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpLmdldE9iamVjdCgpO1xu
Iik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBmb3Ig
KHRoaXNPYmplY3QgPSB0aGlzT2JqZWN0ID8gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0
KCkuZ2V0T2JqZWN0KCkgOiBudWxscHRyOyB0aGlzT2JqZWN0OyB0aGlzT2JqZWN0ID0gdGhpc09i
amVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KCkuZ2V0T2JqZWN0KCkpIHtcbiIpOworICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIGlmICgoY2FzdGVkVGhp
cyA9ICIgLiBHZXRDYXN0aW5nSGVscGVyRm9yVGhpc09iamVjdCgkaW50ZXJmYWNlKSAuICIodGhp
c09iamVjdCkpKVxuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICAgICAgICAgIGJyZWFrO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgICAgICB9XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgICAgIGlmICghY2FzdGVkVGhpcylcbiIpOworICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5
cGVFcnJvcigqc3RhdGUsIFwiJGludGVyZmFjZU5hbWVcIiwgXCIkbmFtZVwiKTtcbiIpOworICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmVwb3J0RGVwcmVj
YXRlZEdldHRlckVycm9yKCpzdGF0ZSwgXCIkaW50ZXJmYWNlTmFtZVwiLCBcIiRuYW1lXCIpO1xu
Iik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUs
IFwiJGludGVyZmFjZU5hbWVcIiwgXCIkbmFtZVwiKTtcbiIpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57Ik5vbmRldGVybWluaXN0aWMifSAmJiAoISRyZXF1aXJlc0Nhc3RlZFRoaXNQ
YXJhbWV0ZXIgfHwgISRyZXF1aXJlc1N0YXRlUGFyYW1ldGVyKSkgeworICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiI2lmIEVOQUJMRShXRUJfUkVQTEFZKVxuIik7CisgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSgk
e2dldEZ1bmN0aW9uTmFtZX1HZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTtcbiIpOworICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2Vsc2VcbiIpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoISRyZXF1aXJlc0Nhc3RlZFRoaXNQYXJhbWV0ZXIpIHsKKyAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KCR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihzdGF0ZSkpO1xuIik7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGlmICgkcmVxdWlyZXNTdGF0ZVBhcmFtZXRlcikgeworICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKCR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpO1xuIik7
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSgke2dldEZ1bmN0aW9uTmFtZX1H
ZXR0ZXIoY2FzdGVkVGhpcykpO1xuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiTm9uZGV0ZXJtaW5pc3RpYyJ9ICYmICghJHJlcXVpcmVzQ2FzdGVkVGhpc1BhcmFt
ZXRlciB8fCAhJHJlcXVpcmVzU3RhdGVQYXJhbWV0ZXIpKSB7CisgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIjZW5kaWZcbiIpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAKKwogICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIjZW5kaWZcbiIpIGlmICRhdHRyaWJ1dGVDb25kaXRpb25hbFN0cmluZzsKIAog
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOwpAQCAtMzIzMCw2ICszMzI5LDEw
IEBAIEVORAogCiAgICAgfQogCisgICAgaWYgKCRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZSkgewor
ICAgICAgICBHZW5lcmF0ZVNlcmlhbGl6ZXJGdW5jdGlvbigkaW50ZXJmYWNlLCAkaW50ZXJmYWNl
TmFtZSwgJGNsYXNzTmFtZSwgJHNlcmlhbGl6ZXJGdW5jdGlvbk5hbWUsICRzZXJpYWxpemVyTmF0
aXZlRnVuY3Rpb25OYW1lKTsKKyAgICB9CisKICAgICBpZiAoJGludGVyZmFjZS0+aXRlcmFibGUp
IHsKICAgICAgICAgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkl0ZXJhYmxlRnVuY3Rpb25zKCRpbnRl
cmZhY2UpOwogICAgIH0KQEAgLTM0NDIsNiArMzU0NSwzMSBAQCBFTkQKICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIlxuI2VuZGlmIC8vICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0
aW9uYWxTdHJpbmc7CiB9CiAKK3N1YiBHZW5lcmF0ZVNlcmlhbGl6ZXJGdW5jdGlvbgoreworICAg
IG15ICgkaW50ZXJmYWNlLCAkaW50ZXJmYWNlTmFtZSwgJGNsYXNzTmFtZSwgJHNlcmlhbGl6ZXJG
dW5jdGlvbk5hbWUsICRzZXJpYWxpemVyTmF0aXZlRnVuY3Rpb25OYW1lKSA9IEBfOworCisgICAg
QWRkVG9JbXBsSW5jbHVkZXMoIk9iamVjdENvbnN0cnVjdG9yLmgiKTsKKyAgICBwdXNoKEBpbXBs
Q29udGVudCwgIkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtzZXJpYWxpemVyTmF0aXZl
RnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIHN0YXRlKVxuIik7CisgICAgcHVzaChAaW1wbENvbnRl
bnQsICJ7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHRoaXNWYWx1
ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IGF1dG8gY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlMkaW50ZXJmYWNlTmFtZSo+KHRoaXNW
YWx1ZSk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKVxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiB0
aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCBcIiRpbnRlcmZhY2VOYW1lXCIsIFwiJHNlcmlhbGl6
ZXJGdW5jdGlvbk5hbWVcIik7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICR7Y2xhc3NOYW1lfTo6aW5mbygpKTtc
blxuIikgdW5sZXNzICRpbnRlcmZhY2VOYW1lIGVxICJFdmVudFRhcmdldCI7CisgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0
KHN0YXRlKTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpO1xuIik7CisgICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAeyRpbnRlcmZhY2UtPmF0
dHJpYnV0ZXN9KSB7CisgICAgICAgIG15ICRuYW1lID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5u
YW1lOworICAgICAgICBpZiAoZ3JlcCAkXyBlcSAkbmFtZSwgQHskaW50ZXJmYWNlLT5zZXJpYWxp
emFibGUtPmF0dHJpYnV0ZXN9KSB7CisgICAgICAgICAgICBteSAkZ2V0dGVyRnVuY3Rpb25DYWxs
ID0gR2V0R2V0dGVyRnVuY3Rpb25DYWxsKCRpbnRlcmZhY2UsICRjbGFzc05hbWUsICRhdHRyaWJ1
dGUpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBcIiR7bmFtZX1cIiksICR7Z2V0dGVy
RnVuY3Rpb25DYWxsfSk7XG4iKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIlxuICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTtcbiIpOworICAgIHB1
c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKK30KKwogc3ViIEdlbmVyYXRlRnVuY3Rpb25DYXN0
ZWRUaGlzCiB7CiAgICAgbXkgKCRpbnRlcmZhY2UsICRjbGFzc05hbWUsICRmdW5jdGlvbikgPSBA
XzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2Vy
LnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0KaW5kZXgg
YzhkM2UwOTQ0MDhjYjgwZGU2ZmQ4MGRkODdmZTRkNmFmOWJkMmVhOC4uZmEwYzhlZGNjNDMzMzNm
OGMyMjRkYTAwYTRjNTkyMDlmNzU4YjM5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9JRExQYXJzZXIucG0KQEAgLTU3LDYgKzU3LDcgQEAgc3RydWN0KCBkb21JbnRlcmZh
Y2UgPT4gewogICAgIGlzQ2FsbGJhY2sgPT4gJyQnLCAjIFVzZWQgZm9yIGNhbGxiYWNrIGludGVy
ZmFjZXMKICAgICBpc1BhcnRpYWwgPT4gJyQnLCAjIFVzZWQgZm9yIHBhcnRpYWwgaW50ZXJmYWNl
cwogICAgIGl0ZXJhYmxlID0+ICckJywgIyBVc2VkIGZvciBpdGVyYWJsZSBpbnRlcmZhY2VzCisg
ICAgc2VyaWFsaXphYmxlID0+ICckJywgIyBVc2VkIGZvciBzZXJpYWxpemFibGUgaW50ZXJmYWNl
cwogfSk7CiAKICMgVXNlZCB0byByZXByZXNlbnQgZG9tSW50ZXJmYWNlIGNvbnRlbnRzIChuYW1l
IG9mIG1ldGhvZCwgc2lnbmF0dXJlKQpAQCAtOTUsNiArOTYsMTAgQEAgc3RydWN0KCBkb21JdGVy
YWJsZSA9PiB7CiAgICAgZnVuY3Rpb25zID0+ICdAJywgIyBJdGVyYWJsZSBmdW5jdGlvbnMgKGVu
dHJpZXMsIGtleXMsIHZhbHVlcywgW1N5bWJvbC5JdGVyYXRvcl0sIGZvckVhY2gpCiB9KTsKIAor
IyBVc2VkIHRvIHJlcHJlc2VudCBzZXJpYWxpemFibGUgaW50ZXJmYWNlCitzdHJ1Y3QoIGRvbVNl
cmlhbGl6YWJsZSA9PiB7CisgICAgYXR0cmlidXRlcyA9PiAnQCcsICMgTGlzdCBvZiBhdHRyaWJ1
dGVzIHRvIHNlcmlhbGl6ZQorfSk7CiAKICMgVXNlZCB0byByZXByZXNlbnQgc3RyaW5nIGNvbnN0
YW50cwogc3RydWN0KCBkb21Db25zdGFudCA9PiB7CkBAIC0xMDMwLDcgKzEwMzUsMTYgQEAgc3Vi
IHBhcnNlU2VyaWFsaXplcgogICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tlbigpOwogICAg
IGlmICgkbmV4dC0+dmFsdWUoKSBlcSAic2VyaWFsaXplciIpIHsKICAgICAgICAgJHNlbGYtPmFz
c2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICJzZXJpYWxpemVyIiwgX19MSU5FX18p
OwotICAgICAgICByZXR1cm4gJHNlbGYtPnBhcnNlU2VyaWFsaXplclJlc3QoJGV4dGVuZGVkQXR0
cmlidXRlTGlzdCk7CisgICAgICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tlbigpOworICAg
ICAgICBteSAkbmV3RGF0YU5vZGU7CisgICAgICAgIGlmICgkbmV4dC0+dmFsdWUoKSBuZSAiOyIp
IHsKKyAgICAgICAgICAgICRuZXdEYXRhTm9kZSA9ICRzZWxmLT5wYXJzZVNlcmlhbGl6ZXJSZXN0
KCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOworICAgICAgICAgICAgbXkgJG5leHQgPSAkc2VsZi0+
bmV4dFRva2VuKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkbmV3RGF0YU5vZGUg
PSBkb21TZXJpYWxpemFibGUtPm5ldygpOworICAgICAgICB9CisgICAgICAgICRzZWxmLT5hc3Nl
cnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiOyIsIF9fTElORV9fKTsKKyAgICAgICAg
cmV0dXJuICRuZXdEYXRhTm9kZTsKICAgICB9CiAgICAgJHNlbGYtPmFzc2VydFVuZXhwZWN0ZWRU
b2tlbigkbmV4dC0+dmFsdWUoKSwgX19MSU5FX18pOwogfQpAQCAtMTA0Myw3ICsxMDU3LDEwIEBA
IHN1YiBwYXJzZVNlcmlhbGl6ZXJSZXN0CiAgICAgbXkgJG5leHQgPSAkc2VsZi0+bmV4dFRva2Vu
KCk7CiAgICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICI9IikgewogICAgICAgICAkc2VsZi0+YXNz
ZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIj0iLCBfX0xJTkVfXyk7Ci0gICAgICAg
IHJldHVybiAkc2VsZi0+cGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybigkZXh0ZW5kZWRBdHRyaWJ1
dGVMaXN0KTsKKyAgICAgICAgbXkgJGF0dHJpYnV0ZXMgPSAkc2VsZi0+cGFyc2VTZXJpYWxpemF0
aW9uUGF0dGVybigpOworICAgICAgICBteSAkbmV3RGF0YU5vZGUgPSBkb21TZXJpYWxpemFibGUt
Pm5ldygpOworICAgICAgICAkbmV3RGF0YU5vZGUtPmF0dHJpYnV0ZXMoJGF0dHJpYnV0ZXMpOwor
ICAgICAgICByZXR1cm4gJG5ld0RhdGFOb2RlOwogICAgIH0KICAgICBpZiAoJG5leHQtPnR5cGUo
KSA9PSBJZGVudGlmaWVyVG9rZW4gfHwgJG5leHQtPnZhbHVlKCkgZXEgIigiKSB7CiAgICAgICAg
IHJldHVybiAkc2VsZi0+cGFyc2VPcGVyYXRpb25SZXN0KCRleHRlbmRlZEF0dHJpYnV0ZUxpc3Qp
OwpAQCAtMTA1Myw1OSArMTA3MCw0NSBAQCBzdWIgcGFyc2VTZXJpYWxpemVyUmVzdAogc3ViIHBh
cnNlU2VyaWFsaXphdGlvblBhdHRlcm4KIHsKICAgICBteSAkc2VsZiA9IHNoaWZ0OwotICAgIG15
ICRleHRlbmRlZEF0dHJpYnV0ZUxpc3QgPSBzaGlmdDsKIAogICAgIG15ICRuZXh0ID0gJHNlbGYt
Pm5leHRUb2tlbigpOwogICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAieyIpIHsKICAgICAgICAg
JHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICJ7IiwgX19MSU5FX18p
OwotICAgICAgICAkc2VsZi0+cGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybk1hcCgpOworICAgICAg
ICBteSAkYXR0cmlidXRlcyA9ICRzZWxmLT5wYXJzZVNlcmlhbGl6YXRpb25BdHRyaWJ1dGVzKCk7
CiAgICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAifSIs
IF9fTElORV9fKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gXEB7JGF0dHJpYnV0
ZXN9OwogICAgIH0KICAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgIlsiKSB7Ci0gICAgICAgICRz
ZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiWyIsIF9fTElORV9fKTsK
LSAgICAgICAgJHNlbGYtPnBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm5MaXN0KCk7Ci0gICAgICAg
ICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiXSIsIF9fTElORV9f
KTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBkaWUgIlNlcmlhbGl6YXRpb24gb2YgbGlzdHMg
cGF0dGVybiBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4iOwogICAgIH0KICAgICBpZiAoJG5l
eHQtPnR5cGUoKSA9PSBJZGVudGlmaWVyVG9rZW4pIHsKLSAgICAgICAgJHNlbGYtPmFzc2VydFRv
a2VuVHlwZSgkc2VsZi0+Z2V0VG9rZW4oKSwgSWRlbnRpZmllclRva2VuKTsKLSAgICAgICAgcmV0
dXJuOworICAgICAgICBteSBAYXR0cmlidXRlcyA9ICgpOworICAgICAgICBteSAkdG9rZW4gPSAk
c2VsZi0+Z2V0VG9rZW4oKTsKKyAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVHlwZSgkdG9rZW4s
IElkZW50aWZpZXJUb2tlbik7CisgICAgICAgIHB1c2goQGF0dHJpYnV0ZXMsICR0b2tlbi0+dmFs
dWUoKSk7CisgICAgICAgIHJldHVybiBcQGF0dHJpYnV0ZXM7CiAgICAgfQogICAgICRzZWxmLT5h
c3NlcnRVbmV4cGVjdGVkVG9rZW4oJG5leHQtPnZhbHVlKCksIF9fTElORV9fKTsKIH0KIAotc3Vi
IHBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm5NYXAKK3N1YiBwYXJzZVNlcmlhbGl6YXRpb25BdHRy
aWJ1dGVzCiB7CiAgICAgbXkgJHNlbGYgPSBzaGlmdDsKLSAgICBteSAkbmV4dCA9ICRzZWxmLT5u
ZXh0VG9rZW4oKTsKLSAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgImdldHRlciIpIHsKLSAgICAg
ICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICJnZXR0ZXIiLCBf
X0xJTkVfXyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCRuZXh0LT52YWx1ZSgp
IGVxICJpbmhlcml0IikgewotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+
Z2V0VG9rZW4oKSwgImluaGVyaXQiLCBfX0xJTkVfXyk7Ci0gICAgICAgICRzZWxmLT5wYXJzZUlk
ZW50aWZpZXJzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCRuZXh0LT50eXBl
KCkgPT0gSWRlbnRpZmllclRva2VuKSB7Ci0gICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblR5cGUo
JHNlbGYtPmdldFRva2VuKCksIElkZW50aWZpZXJUb2tlbik7Ci0gICAgICAgICRzZWxmLT5wYXJz
ZUlkZW50aWZpZXJzKCk7Ci0gICAgfQotfQorICAgIG15ICR0b2tlbiA9ICRzZWxmLT5nZXRUb2tl
bigpOworCisgICAgaWYgKCR0b2tlbi0+dmFsdWUoKSBlcSAiZ2V0dGVyIikgeworICAgICAgICBk
aWUgIlNlcmlhbGl6ZXIgZ2V0dGVyIGtleXdvcmQgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQu
IjsKIAotc3ViIHBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm5MaXN0Ci17Ci0gICAgbXkgJHNlbGYg
PSBzaGlmdDsKLSAgICBteSAkbmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsKLSAgICBpZiAoJG5l
eHQtPnZhbHVlKCkgZXEgImdldHRlciIpIHsKLSAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFs
dWUoJHNlbGYtPmdldFRva2VuKCksICJnZXR0ZXIiLCBfX0xJTkVfXyk7Ci0gICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgaWYgKCRuZXh0LT50eXBlKCkgPT0gSWRlbnRpZmllclRva2VuKSB7Ci0g
ICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblR5cGUoJHNlbGYtPmdldFRva2VuKCksIElkZW50aWZp
ZXJUb2tlbik7Ci0gICAgICAgICRzZWxmLT5wYXJzZUlkZW50aWZpZXJzKCk7CisgICAgaWYgKCR0
b2tlbi0+dmFsdWUoKSBlcSAiaW5oZXJpdCIpIHsKKyAgICAgICAgZGllICJTZXJpYWxpemVyIGlu
aGVyaXQga2V5d29yZCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4iOwogICAgIH0KKworICAg
IG15IEBhdHRyaWJ1dGVzID0gKCk7CisgICAgJHNlbGYtPmFzc2VydFRva2VuVHlwZSgkdG9rZW4s
IElkZW50aWZpZXJUb2tlbik7CisgICAgcHVzaChAYXR0cmlidXRlcywgJHRva2VuLT52YWx1ZSgp
KTsKKyAgICBwdXNoKEBhdHRyaWJ1dGVzLCBAeyRzZWxmLT5wYXJzZUlkZW50aWZpZXJzKCl9KTsK
KyAgICByZXR1cm4gXEBhdHRyaWJ1dGVzOwogfQogCiBzdWIgcGFyc2VJZGVudGlmaWVyTGlzdApA
QCAtMjI4Nyw2ICsyMjkwLDE5IEBAIHN1YiBhcHBseU1lbWJlckxpc3QKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKHJlZigkaXRlbSkgZXEg
ImRvbVNlcmlhbGl6YWJsZSIpIHsKKyAgICAgICAgICAgICRpbnRlcmZhY2UtPnNlcmlhbGl6YWJs
ZSgkaXRlbSk7CisgICAgICAgICAgICBuZXh0OworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KCRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZSkgeworICAgICAgICBteSAkbnVtU2VyaWFsaXplckF0
dHJpYnV0ZXMgPSBAeyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+YXR0cmlidXRlc307CisgICAg
ICAgIGlmICgkbnVtU2VyaWFsaXplckF0dHJpYnV0ZXMgPT0gMCkgeworICAgICAgICAgICAgZm9y
ZWFjaCBteSAkYXR0cmlidXRlIChAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9KSB7CisgICAgICAg
ICAgICAgICAgcHVzaChAeyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+YXR0cmlidXRlc30sICRh
dHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAg
ICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKaW5kZXggYWNlMDg2Yzhk
NjE5NjZmN2NlN2NlMWZhMzJlYjY0MmZhOWRiNjZiNi4uNmQ1ZDIyYTkzOWJmMjFkYWUxYTIxNDUx
ZjdhMmY3ZjEwZmU3ZDBhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKQEAg
LTE0OSw2ICsxNDksMTUgQEAgYm9vbCBKU1Rlc3RBY3RpdmVET01PYmplY3Q6OmdldE93blByb3Bl
cnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXQKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKK0pTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0RXhjaXRpbmdBdHRyR2V0dGVy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEFjdGl2ZURPTU9iamVjdCogY2FzdGVkVGhpcykKK3sK
KyAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhz
dGF0ZSwgY2FzdGVkVGhpcy0+d3JhcHBlZCgpKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuZXhjaXRpbmdBdHRyKCkpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9iamVjdEV4Y2l0aW5nQXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0x
NTksMTEgKzE2OCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9iamVjdEV4Y2l0
aW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1CiAgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0
YXRlLCAiVGVzdEFjdGl2ZURPTU9iamVjdCIsICJleGNpdGluZ0F0dHIiKTsKICAgICB9Ci0gICAg
aWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coc3RhdGUs
IGNhc3RlZFRoaXMtPndyYXBwZWQoKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
LSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuZXhjaXRpbmdBdHRyKCkpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVGVzdEFjdGl2ZURPTU9iamVjdEV4Y2l0aW5nQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVk
VGhpcykpOwogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAppbmRleCBh
MDA0YTk3OTA5Njc5N2ZkMGE1NDUxODRhOGUxODZjZWQ1NWUwZDI0Li4zZGY1OTcwZjkyOWMzZjI3
ZTAxNDU4YmE2ZjY0MzBhOTNkNTYzOTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0
b3IuY3BwCkBAIC0xNzYsNiArMTc2LDEzIEBAIHZvaWQgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6
ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKICAgICB0aGlzT2JqZWN0LT5KU1Rlc3RFdmVudENv
bnN0cnVjdG9yOjp+SlNUZXN0RXZlbnRDb25zdHJ1Y3RvcigpOwogfQogCitKU1ZhbHVlIGpzVGVz
dEV2ZW50Q29uc3RydWN0b3JBdHRyMUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RFdmVu
dENvbnN0cnVjdG9yKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0
ZSwgaW1wbC5hdHRyMSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjEoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTg2LDEyICsxOTMsMTcgQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIxKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXMKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJl
dHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0RXZlbnRDb25zdHJ1Y3RvciIs
ICJhdHRyMSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuYXR0
cjEoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIxR2V0dGVyKHN0YXRlLCBj
YXN0ZWRUaGlzKSk7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjJH
ZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciogY2FzdGVkVGhp
cykKK3sKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuYXR0cjIoKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3Rv
ckF0dHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
QEAgLTIwMiwxMyArMjE0LDE4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0
b3JBdHRyMihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzCiAgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJy
b3IoKnN0YXRlLCAiVGVzdEV2ZW50Q29uc3RydWN0b3IiLCAiYXR0cjIiKTsKICAgICB9Ci0gICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmF0dHIyKCkpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEV2
ZW50Q29uc3RydWN0b3JBdHRyMkdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKICNp
ZiBFTkFCTEUoU1BFQ0lBTF9FVkVOVCkKK0pTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0
dHIzR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3IqIGNhc3Rl
ZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmF0dHIzKCkpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3Ry
dWN0b3JBdHRyMyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CkBAIC0yMTksOSArMjM2LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1
Y3RvckF0dHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXMKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVF
cnJvcigqc3RhdGUsICJUZXN0RXZlbnRDb25zdHJ1Y3RvciIsICJhdHRyMyIpOwogICAgIH0KLSAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuYXR0cjMoKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0
RXZlbnRDb25zdHJ1Y3RvckF0dHIzR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7CiB9CiAKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEV4Y2VwdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcAppbmRleCBiMjVkYTMxY2Q4ZjcxODNkMTNlMjk1MDg5
MTA1NDkxM2UyYTQzZTUzLi44YmUxNjNmZjk0MWQxMWRhYzgyNDlmNDA5ZjYxZjc2ZmY3NTBmZThm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RXhjZXB0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcApAQCAtMTQxLDYgKzE0MSwxMyBAQCBib29sIEpTVGVz
dEV4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogc3RhdGUsIFBybwogICAgIHJldHVybiBmYWxzZTsKIH0KIAorSlNWYWx1ZSBqc1Rlc3RFeGNl
cHRpb25OYW1lR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEV4Y2VwdGlvbiogY2FzdGVk
VGhpcykKK3sKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwubmFtZSgpKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFeGNlcHRpb25OYW1l
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
LCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE1
MSw5ICsxNTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFeGNlcHRpb25OYW1lKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUAogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0
ZSwgIlRlc3RFeGNlcHRpb24iLCAibmFtZSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2Fj
aGUoc3RhdGUsIGltcGwubmFtZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RFeGNlcHRpb25OYW1lR2V0dGVy
KHN0YXRlLCBjYXN0ZWRUaGlzKSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcApp
bmRleCAwZGJmMDA4YjYwZjUxNzExNzU1Yzk1ZGNkY2JmMzJjZWQyMzlkOThkLi45MWQwZDQ4YmQw
NjViM2JkY2Q1OWIzZGNjYzcwZjBkNTNkY2UwYTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0
LmNwcApAQCAtMTU0LDYgKzE1NCwxMyBAQCBib29sIEpTVGVzdEdsb2JhbE9iamVjdDo6Z2V0T3du
UHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCitKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1
dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0KiBjYXN0ZWRUaGlz
KQoreworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgSlNWYWx1
ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5yZWd1bGFyQXR0cmlidXRl
KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdFJlZ3VsYXJBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwpAQCAtMTY0LDEzICsxNzEsMTggQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWwKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0
aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0R2xvYmFsT2JqZWN0IiwgInJlZ3VsYXJB
dHRyaWJ1dGUiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnJl
Z3VsYXJBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJp
YnV0ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKICNpZiBFTkFCTEUoVEVTVF9G
RUFUVVJFKQorSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1lQXR0cmli
dXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCogY2FzdGVkVGhp
cykKK3sKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuZW5hYmxlZEF0UnVudGlt
ZUF0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xv
dEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE4MSw5ICsxOTMsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1lQXR0cmlidXRl
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuYwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
ICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RHbG9iYWxP
YmplY3QiLCAiZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSIpOwogICAgIH0KLSAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJp
bmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSgpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlR2V0dGVyKHN0
YXRlLCBjYXN0ZWRUaGlzKSk7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAppbmRl
eCA4Yzk0NjU1MmI1OWNiYTViOTQ4MzA4MGM2NTMwODY3Y2Q1NmM1ZmI5Li43M2JiY2IxNjRhOWQ3
ZjZlNjkxZDcwNWUxMzRlZTM0ZDc0YTBjZDM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcApAQCAt
NDA5LDMwICs0MDksNDcgQEAgdm9pZCBKU1Rlc3RJbnRlcmZhY2U6OmRlc3Ryb3koSlNDOjpKU0Nl
bGwqIGNlbGwpCiB9CiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRp
b24yMykKK0pTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGlj
UmVhZE9ubHlBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUpCit7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSBqc051bWJlcihUZXN0SW50ZXJmYWNlOjppbXBsZW1lbnRzU3RhdGljUmVhZE9ubHlBdHRy
KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVy
ZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY1JlYWRPbmx5QXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNs
b3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
aXNWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKLSAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzTnVtYmVyKFRlc3RJbnRlcmZhY2U6OmltcGxlbWVudHNTdGF0aWNSZWFkT25seUF0dHIo
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljUmVh
ZE9ubHlBdHRyR2V0dGVyKHN0YXRlKSk7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRp
dGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCitKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNv
bnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSkKK3sK
KyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBUZXN0SW50ZXJm
YWNlOjppbXBsZW1lbnRzU3RhdGljQXR0cigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwot
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIFRlc3RJbnRlcmZh
Y2U6OmltcGxlbWVudHNTdGF0aWNBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEludGVyZmFjZUNvbnN0
cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHJHZXR0ZXIoc3RhdGUpKTsKIH0KIAogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKK0pTVmFsdWUg
anNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjFHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0
ZSwgaW1wbC5pbXBsZW1lbnRzU3RyMSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMShFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RC
YXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC00NDMsMTQgKzQ2MCwxOSBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMShFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
ICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RJbnRlcmZh
Y2UiLCAiaW1wbGVtZW50c1N0cjEiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0
YXRlLCBpbXBsLmltcGxlbWVudHNTdHIxKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEludGVyZmFjZUltcGxl
bWVudHNTdHIxR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7CiB9CiAKICNlbmRpZgogCiAjaWYg
RU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCitKU1ZhbHVlIGpzVGVz
dEludGVyZmFjZUltcGxlbWVudHNTdHIyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdElu
dGVyZmFjZSogY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGlt
cGwuaW1wbGVtZW50c1N0cjIoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpT
VmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkK
IHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtNDYxLDE0ICs0ODMsMTcgQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjIoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGgKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAg
ICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0SW50ZXJmYWNlIiwg
ImltcGxlbWVudHNTdHIyIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwg
aW1wbC5pbXBsZW1lbnRzU3RyMigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRz
U3RyMkdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJM
RShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQorSlNWYWx1ZSBqc1Rlc3RJbnRl
cmZhY2VJbXBsZW1lbnRzU3RyM0dldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZh
Y2UqIGNhc3RlZFRoaXMpCit7CisgICAgcmV0dXJuIGNhc3RlZFRoaXMtPmltcGxlbWVudHNTdHIz
KCpzdGF0ZSk7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNT
dHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAg
LTQ3OSwxMiArNTA0LDE5IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVu
dHNTdHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoCiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3Io
KnN0YXRlLCAiVGVzdEludGVyZmFjZSIsICJpbXBsZW1lbnRzU3RyMyIpOwogICAgIH0KLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmltcGxlbWVudHNTdHIzKCpzdGF0ZSkp
OworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0
cjNHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUo
Q29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKK0pTVmFsdWUganNUZXN0SW50ZXJm
YWNlSW1wbGVtZW50c05vZGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNl
KiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgaW1wbC5pbXBsZW1lbnRzTm9kZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9kZShFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNs
b3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC00OTUsMzggKzUyNyw1MyBA
QCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9kZShFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RJbnRl
cmZhY2UiLCAiaW1wbGVtZW50c05vZGUiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmltcGxlbWVudHNOb2RlKCkpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VGVzdEludGVyZmFjZUltcGxlbWVudHNOb2RlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7CiB9
CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MTIpCitKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGlj
UmVhZE9ubHlBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUpCit7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSBqc051bWJlcihXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxTdGF0
aWNSZWFkT25seUF0dHIoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFs
dWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNSZWFkT25seUF0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7Ci0g
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpz
dXBwbGVtZW50YWxTdGF0aWNSZWFkT25seUF0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0SW50ZXJmYWNl
Q29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNSZWFkT25seUF0dHJHZXR0ZXIoc3RhdGUpKTsK
IH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRp
b24xMikKK0pTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0
aWNBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUpCit7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBq
c1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxl
bWVudGFsU3RhdGljQXR0cigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY0F0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpT
T2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7Ci0gICAgSlNW
YWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgV2ViQ29yZTo6VGVzdFN1cHBs
ZW1lbnRhbDo6c3VwcGxlbWVudGFsU3RhdGljQXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RJbnRlcmZh
Y2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY0F0dHJHZXR0ZXIoc3RhdGUpKTsKIH0KIAog
I2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikK
K0pTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMUdldHRlcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0
aENhY2hlKHN0YXRlLCBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxTdHIx
KGltcGwpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJ
bnRlcmZhY2VTdXBwbGVtZW50YWxTdHIxKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKQEAgLTUzNywxNCArNTg0LDE5IEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjEoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0
aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0SW50ZXJmYWNlIiwgInN1cHBsZW1lbnRh
bFN0cjEiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
LSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBXZWJDb3JlOjpU
ZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxTdHIxKGltcGwpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RJ
bnRlcmZhY2VTdXBwbGVtZW50YWxTdHIxR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7CiB9CiAK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIp
CitKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjJHZXR0ZXIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dp
dGhDYWNoZShzdGF0ZSwgV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsU3Ry
MihpbXBsKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNUZXN0
SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CkBAIC01NTUsMTQgKzYwNywxNyBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4g
dGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdEludGVyZmFjZSIsICJzdXBwbGVtZW50
YWxTdHIyIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgV2ViQ29yZTo6
VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsU3RyMihpbXBsKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0
SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMkdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQog
CiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEy
KQorSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzR2V0dGVyKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcykKK3sKKyAgICByZXR1cm4gY2Fz
dGVkVGhpcy0+c3VwcGxlbWVudGFsU3RyMygqc3RhdGUpOworfQorCiBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTU3MywxMiArNjI4LDE5IEBAIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJl
dHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0SW50ZXJmYWNlIiwgInN1cHBs
ZW1lbnRhbFN0cjMiKTsKICAgICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRU
aGlzLT5zdXBwbGVtZW50YWxTdHIzKCpzdGF0ZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyM0dldHRlcihzdGF0ZSwgY2FzdGVkVGhp
cykpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENv
bmRpdGlvbjEyKQorSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2RlR2V0dGVy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcykKK3sKKyAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdlYkNvcmU6OlRlc3RTdXBw
bGVtZW50YWw6OnN1cHBsZW1lbnRhbE5vZGUoaW1wbCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGUoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2Jq
ZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtNTg5LDkgKzY1
MSw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGUoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0
SW50ZXJmYWNlIiwgInN1cHBsZW1lbnRhbE5vZGUiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUs
IGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpz
dXBwbGVtZW50YWxOb2RlKGltcGwpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50
YWxOb2RlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRp
bkNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAKaW5kZXggNzkzMjYxZjYxMzJkMGUwYThm
MTgxZTNjY2Q1Y2VhNWIwYzdjNjRmYi4uNzQxN2FmMzc2MmM0YTE4OWVmNWI5YmZhZTE0NGNmNDAx
NWNhYjllZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCkBA
IC0xMzIsNiArMTMyLDExIEBAIHZvaWQgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I6OmRlc3Ry
b3koSlNDOjpKU0NlbGwqIGNlbGwpCiAgICAgdGhpc09iamVjdC0+SlNUZXN0SlNCdWlsdGluQ29u
c3RydWN0b3I6On5KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvcigpOwogfQogCitKU1ZhbHVlIGpz
VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZUN1c3RvbUdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciogY2FzdGVkVGhpcykKK3sKKyAg
ICByZXR1cm4gY2FzdGVkVGhpcy0+dGVzdEF0dHJpYnV0ZUN1c3RvbSgqc3RhdGUpOworfQorCiBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVDdXN0
b20oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAt
MTQyLDEwICsxNDcsMTUgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0
b3JUZXN0QXR0cmlidXRlQ3VzdG9tKEV4ZWNTdGF0ZSogc3RhdGUsIEUKICAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigq
c3RhdGUsICJUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IiLCAidGVzdEF0dHJpYnV0ZUN1c3RvbSIp
OwogICAgIH0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPnRlc3RBdHRy
aWJ1dGVDdXN0b20oKnN0YXRlKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RK
U0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVDdXN0b21HZXR0ZXIoc3RhdGUsIGNhc3Rl
ZFRoaXMpKTsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0
dHJpYnV0ZVJXQ3VzdG9tR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yKiBjYXN0ZWRUaGlzKQoreworICAgIHJldHVybiBjYXN0ZWRUaGlzLT50ZXN0QXR0
cmlidXRlUldDdXN0b20oKnN0YXRlKTsKK30KKwogRW5jb2RlZEpTVmFsdWUganNUZXN0SlNCdWls
dGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b20oRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkK
IHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTU2LDcgKzE2Niw3IEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tKEV4
ZWNTdGF0ZSogc3RhdGUsCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAg
ICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdEpTQnVpbHRpbkNvbnN0
cnVjdG9yIiwgInRlc3RBdHRyaWJ1dGVSV0N1c3RvbSIpOwogICAgIH0KLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPnRlc3RBdHRyaWJ1dGVSV0N1c3RvbSgqc3RhdGUpKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVz
dEF0dHJpYnV0ZVJXQ3VzdG9tR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7CiB9CiAKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5v
ZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5v
ZGUuY3BwCmluZGV4IDk3ZGFkNDUyM2EyNmFlNzVjYWM1NDg4MWIzM2UyZjZhZDNhMTQ5M2EuLjRh
ZTlhODhlNThiNjI5NmEyNTI2YjczZGI1ODI1YmZiNmM4ZjRkMGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAKQEAg
LTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RP
TUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSlNET01JdGVyYXRvci5oIgorI2luY2x1ZGUgIk9i
amVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVkZSA8cnVudGltZS9F
cnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNTdHJpbmcuaD4KQEAgLTQ5LDYgKzUwLDggQEAg
Ym9vbCBzZXRKU1Rlc3ROb2RlTmFtZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Tm9kZUNv
bnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUsIEpTQzo6SlNPYmplY3QqKTsKIGJvb2wgc2V0SlNUZXN0Tm9kZUNvbnN0cnVjdG9y
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSk7CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1
bmN0aW9uVG9KU09OKEV4ZWNTdGF0ZSopOworCiBjbGFzcyBKU1Rlc3ROb2RlUHJvdG90eXBlIDog
cHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0M6
OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKQEAgLTEwNyw2ICsxMTAsNyBAQCBzdGF0aWMgY29uc3Qg
SGFzaFRhYmxlVmFsdWUgSlNUZXN0Tm9kZVByb3RvdHlwZVRhYmxlVmFsdWVzW10gPQogICAgIHsg
ImtleXMiLCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nh
c3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbktleXMpLCAoaW50
cHRyX3QpICgwKSB9IH0sCiAgICAgeyAidmFsdWVzIiwgSlNDOjpGdW5jdGlvbiwgTm9JbnRyaW5z
aWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3ROb2RlUHJv
dG90eXBlRnVuY3Rpb25WYWx1ZXMpLCAoaW50cHRyX3QpICgwKSB9IH0sCiAgICAgeyAiZm9yRWFj
aCIsIEpTQzo6RnVuY3Rpb24sIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxO
YXRpdmVGdW5jdGlvbj4oanNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaCksIChpbnRw
dHJfdCkgKDEpIH0gfSwKKyAgICB7ICJ0b0pTT04iLCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNp
YywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE5vZGVQcm90
b3R5cGVGdW5jdGlvblRvSlNPTiksIChpbnRwdHJfdCkgKDApIH0gfSwKIH07CiAKIGNvbnN0IENs
YXNzSW5mbyBKU1Rlc3ROb2RlUHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0Tm9kZVByb3RvdHlw
ZSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0Tm9kZVByb3Rv
dHlwZSkgfTsKQEAgLTEzNSw2ICsxMzksMTMgQEAgSlNPYmplY3QqIEpTVGVzdE5vZGU6OnByb3Rv
dHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgcmV0dXJuIGdl
dERPTVByb3RvdHlwZTxKU1Rlc3ROb2RlPih2bSwgZ2xvYmFsT2JqZWN0KTsKIH0KIAorSlNWYWx1
ZSBqc1Rlc3ROb2RlTmFtZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3ROb2RlKiBjYXN0
ZWRUaGlzKQoreworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5uYW1lKCkpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVOYW1lKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBK
U09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE0NSw5
ICsxNTYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlTmFtZShFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcgogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwg
IlRlc3ROb2RlIiwgIm5hbWUiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRl
LCBpbXBsLm5hbWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0Tm9kZU5hbWVHZXR0ZXIoc3RhdGUsIGNhc3Rl
ZFRoaXMpKTsKIH0KIAogCkBAIC0xOTMsNiArMjAyLDIxIEBAIEpTVmFsdWUgSlNUZXN0Tm9kZTo6
Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQogICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3ROb2RlQ29uc3RydWN0b3I+KHZt
LCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7CiB9CiAK
K0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9u
VG9KU09OKEV4ZWNTdGF0ZSogc3RhdGUpCit7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0
ZS0+dGhpc1ZhbHVlKCk7CisgICAgYXV0byBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3ROb2RlKj4odGhpc1ZhbHVlKTsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQorICAg
ICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3ROb2RlIiwgInRvSlNP
TiIpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0Tm9k
ZTo6aW5mbygpKTsKKworICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVj
dChzdGF0ZSk7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibmFtZSIpLCBqc1Rlc3ROb2RlTmFt
ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOworfQorCiB1c2luZyBUZXN0Tm9kZUl0ZXJhdG9yID0gSlNET01JdGVyYXRvcjxK
U1Rlc3ROb2RlPjsKIHVzaW5nIFRlc3ROb2RlSXRlcmF0b3JQcm90b3R5cGUgPSBKU0RPTUl0ZXJh
dG9yUHJvdG90eXBlPEpTVGVzdE5vZGU+OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3Rp
Yy5jcHAKaW5kZXggNDIxZDk5NWVjMDM0ZmZlOTJkNmRiOWI5MjQzZjZlOTViNjBkM2JjMi4uZmMz
NTM5NzI2OGFiMGM0ZDFkNzMxNDg1Y2UyOTVkZjk2NGRhYWJkMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
b25kZXRlcm1pbmlzdGljLmNwcApAQCAtMTQ0LDE2ICsxNDQsMTIgQEAgdm9pZCBKU1Rlc3ROb25k
ZXRlcm1pbmlzdGljOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogICAgIHRoaXNPYmplY3Qt
PkpTVGVzdE5vbmRldGVybWluaXN0aWM6On5KU1Rlc3ROb25kZXRlcm1pbmlzdGljKCk7CiB9CiAK
LUVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljUmVh
ZG9ubHlBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCisjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCitK
U1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljUmVhZG9ubHlBdHRy
R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE5vbmRldGVybWluaXN0aWMqIGNhc3RlZFRo
aXMpCisjZWxzZQorSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3Rp
Y1JlYWRvbmx5QXR0ckdldHRlcihKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiBjYXN0ZWRUaGlzKQor
I2VuZGlmCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICBVTlVTRURfUEFSQU0odGhp
c1ZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwotICAgIEpTVmFsdWUgZGVjb2Rl
ZFRoaXNWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpOwotICAgIGF1dG8qIGNhc3Rl
ZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE5vbmRldGVybWluaXN0aWMqPihkZWNvZGVkVGhp
c1ZhbHVlKTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7Ci0gICAgICAgIHJldHVy
biB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIsICJu
b25kZXRlcm1pbmlzdGljUmVhZG9ubHlBdHRyIik7Ci0gICAgfQogI2lmIEVOQUJMRShXRUJfUkVQ
TEFZKQogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0ZS0+bGV4aWNhbEds
b2JhbE9iamVjdCgpOwogICAgIElucHV0Q3Vyc29yJiBjdXJzb3IgPSBnbG9iYWxPYmplY3QtPmlu
cHV0Q3Vyc29yKCk7CkBAIC0xNjIsNyArMTU4LDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9u
ZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNSZWFkb25seUF0dHIoRXhlY1N0YXRlKiBzdGEK
ICAgICAgICAgaW50MzJfdCBtZW1vaXplZFJlc3VsdCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKS5u
b25kZXRlcm1pbmlzdGljUmVhZG9ubHlBdHRyKCk7CiAgICAgICAgIGN1cnNvci5hcHBlbmRJbnB1
dDxNZW1vaXplZERPTVJlc3VsdDxpbnQzMl90Pj4oYmluZGluZ05hbWUuZ2V0KCkuc3RyaW5nKCks
IG1lbW9pemVkUmVzdWx0LCAwKTsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlciht
ZW1vaXplZFJlc3VsdCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBpZiAoY3Vyc29yLmlzUmVwbGF5
aW5nKCkpIHsKQEAgLTE3MCwxNyArMTY2LDE2IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRl
dGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljUmVhZG9ubHlBdHRyKEV4ZWNTdGF0ZSogc3RhCiAg
ICAgICAgIE1lbW9pemVkRE9NUmVzdWx0QmFzZSogaW5wdXQgPSBjdXJzb3IuZmV0Y2hJbnB1dDxN
ZW1vaXplZERPTVJlc3VsdEJhc2U+KCk7CiAgICAgICAgIGlmIChpbnB1dCAmJiBpbnB1dC0+Y29u
dmVydFRvPGludDMyX3Q+KG1lbW9pemVkUmVzdWx0KSkgewogICAgICAgICAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc051bWJlcihtZW1vaXplZFJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAg
ICB9CiAgICAgfQogI2VuZGlmCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwubm9uZGV0ZXJtaW5pc3RpY1Jl
YWRvbmx5QXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlz
dGljTm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKK0Vu
Y29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljUmVhZG9u
bHlBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKQEAgLTE4OCw5ICsxODMsMTkgQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNXcml0ZWFibGVB
dHRyKEV4ZWNTdGF0ZSogc3QKICAgICBKU1ZhbHVlIGRlY29kZWRUaGlzVmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKTsKICAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2Fz
dDxKU1Rlc3ROb25kZXRlcm1pbmlzdGljKj4oZGVjb2RlZFRoaXNWYWx1ZSk7CiAgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkgewotICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJy
b3IoKnN0YXRlLCAiVGVzdE5vbmRldGVybWluaXN0aWMiLCAibm9uZGV0ZXJtaW5pc3RpY1dyaXRl
YWJsZUF0dHIiKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwg
IlRlc3ROb25kZXRlcm1pbmlzdGljIiwgIm5vbmRldGVybWluaXN0aWNSZWFkb25seUF0dHIiKTsK
ICAgICB9CiAjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5QXR0ckdldHRl
cihzdGF0ZSwgY2FzdGVkVGhpcykpOworI2Vsc2UKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljUmVhZG9ubHlBdHRyR2V0dGVy
KGNhc3RlZFRoaXMpKTsKKyNlbmRpZgorfQorCisKK0pTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5p
c3RpY05vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE5vbmRldGVybWluaXN0aWMqIGNhc3RlZFRoaXMpCit7CisjaWYgRU5BQkxFKFdFQl9S
RVBMQVkpCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRlLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCk7CiAgICAgSW5wdXRDdXJzb3ImIGN1cnNvciA9IGdsb2JhbE9iamVjdC0+
aW5wdXRDdXJzb3IoKTsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbWljU3Ry
aW5nPiBiaW5kaW5nTmFtZSgiVGVzdE5vbmRldGVybWluaXN0aWMubm9uZGV0ZXJtaW5pc3RpY1dy
aXRlYWJsZUF0dHIiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKQEAgLTE5
OCw3ICsyMDMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0
ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIoRXhlY1N0YXRlKiBzdAogICAgICAgICBTdHJpbmcgbWVt
b2l6ZWRSZXN1bHQgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCkubm9uZGV0ZXJtaW5pc3RpY1dyaXRl
YWJsZUF0dHIoKTsKICAgICAgICAgY3Vyc29yLmFwcGVuZElucHV0PE1lbW9pemVkRE9NUmVzdWx0
PFN0cmluZz4+KGJpbmRpbmdOYW1lLmdldCgpLnN0cmluZygpLCBtZW1vaXplZFJlc3VsdCwgMCk7
CiAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIG1lbW9p
emVkUmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIGlmIChjdXJzb3IuaXNSZXBsYXlpbmco
KSkgewpAQCAtMjA2LDE3ICsyMTEsMTYgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJt
aW5pc3RpY05vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyKEV4ZWNTdGF0ZSogc3QKICAgICAg
ICAgTWVtb2l6ZWRET01SZXN1bHRCYXNlKiBpbnB1dCA9IGN1cnNvci5mZXRjaElucHV0PE1lbW9p
emVkRE9NUmVzdWx0QmFzZT4oKTsKICAgICAgICAgaWYgKGlucHV0ICYmIGlucHV0LT5jb252ZXJ0
VG88U3RyaW5nPihtZW1vaXplZFJlc3VsdCkpIHsKICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIG1lbW9pemVkUmVzdWx0KTsKLSAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3Rh
dGUsIGltcGwubm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIoKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLQotRW5jb2Rl
ZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNFeGNlcHRpb25B
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lLCBKU09iamVjdCogc2xvdEJhc2UpCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1p
bmlzdGljTm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkK
IHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUp
OwpAQCAtMjI0LDggKzIyOCwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlz
dGljTm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHIoRXhlY1N0YXRlKiBzdAogICAgIEpTVmFs
dWUgZGVjb2RlZFRoaXNWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpOwogICAgIGF1
dG8qIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE5vbmRldGVybWluaXN0aWMqPihk
ZWNvZGVkVGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7Ci0gICAg
ICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0Tm9uZGV0ZXJtaW5p
c3RpYyIsICJub25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0ciIpOworICAgICAgICByZXR1cm4g
dGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE5vbmRldGVybWluaXN0aWMiLCAibm9u
ZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0
dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworCitKU1ZhbHVlIGpzVGVzdE5vbmRl
dGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0ckdldHRlcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiBjYXN0ZWRUaGlzKQorewogI2lmIEVOQUJM
RShXRUJfUkVQTEFZKQogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0ZS0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIElucHV0Q3Vyc29yJiBjdXJzb3IgPSBnbG9iYWxP
YmplY3QtPmlucHV0Q3Vyc29yKCk7CkBAIC0yMzQsNyArMjQ0LDcgQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNFeGNlcHRpb25BdHRyKEV4ZWNT
dGF0ZSogc3QKICAgICAgICAgU3RyaW5nIG1lbW9pemVkUmVzdWx0ID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpLm5vbmRldGVybWluaXN0aWNFeGNlcHRpb25BdHRyKCk7CiAgICAgICAgIGN1cnNvci5h
cHBlbmRJbnB1dDxNZW1vaXplZERPTVJlc3VsdDxTdHJpbmc+PihiaW5kaW5nTmFtZS5nZXQoKS5z
dHJpbmcoKSwgbWVtb2l6ZWRSZXN1bHQsIDApOwogICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
U3RyaW5nV2l0aENhY2hlKHN0YXRlLCBtZW1vaXplZFJlc3VsdCk7Ci0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAK
ICAgICBpZiAoY3Vyc29yLmlzUmVwbGF5aW5nKCkpIHsKQEAgLTI0MiwxNyArMjUyLDE2IEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljRXhjZXB0
aW9uQXR0cihFeGVjU3RhdGUqIHN0CiAgICAgICAgIE1lbW9pemVkRE9NUmVzdWx0QmFzZSogaW5w
dXQgPSBjdXJzb3IuZmV0Y2hJbnB1dDxNZW1vaXplZERPTVJlc3VsdEJhc2U+KCk7CiAgICAgICAg
IGlmIChpbnB1dCAmJiBpbnB1dC0+Y29udmVydFRvPFN0cmluZz4obWVtb2l6ZWRSZXN1bHQpKSB7
CiAgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBt
ZW1vaXplZFJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAgICAgfQogI2VuZGlm
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLm5vbmRldGVybWluaXN0aWNFeGNl
cHRpb25BdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0
aWNOb25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNl
KQorRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNF
eGNlcHRpb25BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKQEAgLTI2MCw4ICsyNjksMTQgQEAg
RW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNHZXR0
ZXJFeGNlcHRpb25BdHRyKEV4ZWNTdGEKICAgICBKU1ZhbHVlIGRlY29kZWRUaGlzVmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKTsKICAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3ROb25kZXRlcm1pbmlzdGljKj4oZGVjb2RlZFRoaXNWYWx1ZSk7CiAgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewotICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJU
eXBlRXJyb3IoKnN0YXRlLCAiVGVzdE5vbmRldGVybWluaXN0aWMiLCAibm9uZGV0ZXJtaW5pc3Rp
Y0dldHRlckV4Y2VwdGlvbkF0dHIiKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVy
cm9yKCpzdGF0ZSwgIlRlc3ROb25kZXRlcm1pbmlzdGljIiwgIm5vbmRldGVybWluaXN0aWNFeGNl
cHRpb25BdHRyIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0Tm9u
ZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNFeGNlcHRpb25BdHRyR2V0dGVyKHN0YXRlLCBj
YXN0ZWRUaGlzKSk7Cit9CisKKworSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0
ZXJtaW5pc3RpY0dldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY2FzdGVkVGhpcykKK3sKICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKICNpZiBFTkFCTEUoV0VCX1JFUExBWSkKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKQEAgLTI3Miw3ICsyODcsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0dl
dHRlckV4Y2VwdGlvbkF0dHIoRXhlY1N0YQogICAgICAgICBjdXJzb3IuYXBwZW5kSW5wdXQ8TWVt
b2l6ZWRET01SZXN1bHQ8U3RyaW5nPj4oYmluZGluZ05hbWUuZ2V0KCkuc3RyaW5nKCksIG1lbW9p
emVkUmVzdWx0LCBlYyk7CiAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2Fj
aGUoc3RhdGUsIG1lbW9pemVkUmVzdWx0KTsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRl
LCBlYyk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBpZiAoY3Vyc29yLmlzUmVwbGF5aW5nKCkpIHsK
QEAgLTI4MSwxOCArMjk2LDE3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0
aWNOb25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0cihFeGVjU3RhCiAgICAgICAgIGlm
IChpbnB1dCAmJiBpbnB1dC0+Y29udmVydFRvPFN0cmluZz4obWVtb2l6ZWRSZXN1bHQpKSB7CiAg
ICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBtZW1v
aXplZFJlc3VsdCk7CiAgICAgICAgICAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGlucHV0LT5l
eGNlcHRpb25Db2RlKCkpOwotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgIH0KICNlbmRp
ZgogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5ub25kZXRlcm1pbmlzdGljR2V0
dGVyRXhjZXB0aW9uQXR0cihlYykpOwogICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0Owog
fQogCi0KLUVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlz
dGljU2V0dGVyRXhjZXB0aW9uQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQorRW5jb2RlZEpTVmFs
dWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25B
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKQEAgLTMwMCw4ICszMTQsMTQgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRp
b25BdHRyKEV4ZWNTdGEKICAgICBKU1ZhbHVlIGRlY29kZWRUaGlzVmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKTsKICAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3ROb25kZXRlcm1pbmlzdGljKj4oZGVjb2RlZFRoaXNWYWx1ZSk7CiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkgewotICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3Io
KnN0YXRlLCAiVGVzdE5vbmRldGVybWluaXN0aWMiLCAibm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4
Y2VwdGlvbkF0dHIiKTsKKyAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0
ZSwgIlRlc3ROb25kZXRlcm1pbmlzdGljIiwgIm5vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRp
b25BdHRyIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0Tm9uZGV0
ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyR2V0dGVyKHN0YXRl
LCBjYXN0ZWRUaGlzKSk7Cit9CisKKworSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9u
ZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY2FzdGVkVGhpcykKK3sKICNpZiBFTkFCTEUoV0VCX1JF
UExBWSkKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RhdGUtPmxleGljYWxH
bG9iYWxPYmplY3QoKTsKICAgICBJbnB1dEN1cnNvciYgY3Vyc29yID0gZ2xvYmFsT2JqZWN0LT5p
bnB1dEN1cnNvcigpOwpAQCAtMzEwLDcgKzMzMCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5v
bmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0cihFeGVjU3Rh
CiAgICAgICAgIFN0cmluZyBtZW1vaXplZFJlc3VsdCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKS5u
b25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0cigpOwogICAgICAgICBjdXJzb3IuYXBw
ZW5kSW5wdXQ8TWVtb2l6ZWRET01SZXN1bHQ8U3RyaW5nPj4oYmluZGluZ05hbWUuZ2V0KCkuc3Ry
aW5nKCksIG1lbW9pemVkUmVzdWx0LCAwKTsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0
cmluZ1dpdGhDYWNoZShzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOwotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAg
ICAgaWYgKGN1cnNvci5pc1JlcGxheWluZygpKSB7CkBAIC0zMTgsMTMgKzMzOCwyNiBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4
Y2VwdGlvbkF0dHIoRXhlY1N0YQogICAgICAgICBNZW1vaXplZERPTVJlc3VsdEJhc2UqIGlucHV0
ID0gY3Vyc29yLmZldGNoSW5wdXQ8TWVtb2l6ZWRET01SZXN1bHRCYXNlPigpOwogICAgICAgICBp
ZiAoaW5wdXQgJiYgaW5wdXQtPmNvbnZlcnRUbzxTdHJpbmc+KG1lbW9pemVkUmVzdWx0KSkgewog
ICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgbWVt
b2l6ZWRSZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgIH0KICNlbmRpZgog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1
bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5ub25kZXRlcm1pbmlzdGljU2V0dGVy
RXhjZXB0aW9uQXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5p
c3RpY05vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJh
c2UpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc1Zh
bHVlKTsKKyAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOworICAgIEpTVmFsdWUgZGVjb2RlZFRo
aXNWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpOworICAgIGF1dG8qIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE5vbmRldGVybWluaXN0aWMqPihkZWNvZGVkVGhpc1Zh
bHVlKTsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CisgICAgICAgIHJldHVybiB0
aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIsICJub25k
ZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0ciIpOworICAgIH0KKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljU2V0dGVy
RXhjZXB0aW9uQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAK
aW5kZXggMGM4MTIxYzFjZjU0NzhjMmFjNWI3MWJkZjAwYmVlNDA2NmJkNGFjMC4uZTRiNjY5Nzll
NDNkMzZkZDVmMGZlYzE3MTg1NGJlOWVmYzI2Y2ExNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKQEAgLTQ5LDYgKzQ5
LDcgQEAKICNpbmNsdWRlICJKU1Rlc3RTdWJPYmouaCIKICNpbmNsdWRlICJKU1hQYXRoTlNSZXNv
bHZlci5oIgogI2luY2x1ZGUgIkxpZmVjeWNsZUNhbGxiYWNrUXVldWUuaCIKKyNpbmNsdWRlICJP
YmplY3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIK
ICNpbmNsdWRlICJTVkdEb2N1bWVudC5oIgogI2luY2x1ZGUgIlNWR1BvaW50LmgiCkBAIC04ODAs
NiArODgxLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRl
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWwKIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU09iamVjdCopOwogYm9vbCBzZXRKU1Rlc3RPYmpD
b25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5j
b2RlZEpTVmFsdWUpOwogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uVG9KU09OKEV4ZWNTdGF0ZSopOworCiBjbGFzcyBKU1Rlc3RPYmpQcm90
b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB0eXBl
ZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwpAQCAtMTI5OSw2ICsxMzAyLDcgQEAgc3Rh
dGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlVmFsdWVzW10g
PQogICAgIHsgIkNPTlNUX1ZBTFVFXzE0IiwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgQ29uc3Rh
bnRJbnRlZ2VyLCBOb0ludHJpbnNpYywgeyAobG9uZyBsb25nKSgweDFhYmMpIH0gfSwKICAgICB7
ICJDT05TVF9KQVZBU0NSSVBUIiwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgQ29uc3RhbnRJbnRl
Z2VyLCBOb0ludHJpbnNpYywgeyAobG9uZyBsb25nKSgxNSkgfSB9LAogICAgIHsgInJlYWRvbmx5
IiwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgQ29uc3RhbnRJbnRlZ2VyLCBOb0ludHJpbnNpYywg
eyAobG9uZyBsb25nKSgwKSB9IH0sCisgICAgeyAidG9KU09OIiwgSlNDOjpGdW5jdGlvbiwgTm9J
bnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvblRvSlNPTiksIChpbnRwdHJfdCkgKDApIH0gfSwKIH07CiAKIGNv
bnN0IENsYXNzSW5mbyBKU1Rlc3RPYmpQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RPYmplY3RQ
cm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE9i
alByb3RvdHlwZSkgfTsKQEAgLTEzNzUsNiArMTM3OSwxMyBAQCBib29sIEpTVGVzdE9iajo6Z2V0
T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRl
LCB1bgogICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRoaXNPYmpl
Y3QsIHN0YXRlLCBpbmRleCwgc2xvdCk7CiB9CiAKK0pTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlM
b25nQXR0ckdldHRlcihKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGlt
cGwucmVhZE9ubHlMb25nQXR0cigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seUxvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTEzODUsMTIgKzEzOTYsMTcgQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmEKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAg
ICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJlYWRP
bmx5TG9uZ0F0dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwucmVhZE9ubHlMb25nQXR0
cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1Rlc3RPYmpSZWFkT25seUxvbmdBdHRyR2V0dGVyKGNhc3RlZFRoaXMp
KTsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5U3RyaW5nQXR0ckdldHRlcihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0
aENhY2hlKHN0YXRlLCBpbXBsLnJlYWRPbmx5U3RyaW5nQXR0cigpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVN0cmluZ0F0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpT
T2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTQwMSwx
MiArMTQxNywxNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVN0cmluZ0F0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpcwogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0
ZSwgIlRlc3RPYmoiLCAicmVhZE9ubHlTdHJpbmdBdHRyIik7CiAgICAgfQotICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmlu
Z1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5yZWFkT25seVN0cmluZ0F0dHIoKSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNU
ZXN0T2JqUmVhZE9ubHlTdHJpbmdBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7CiB9CiAK
IAorSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVRlc3RPYmpBdHRyR2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwucmVhZE9ubHlUZXN0T2JqQXR0cigpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVRlc3RP
YmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
QEAgLTE0MTcsMzIgKzE0MzgsNDUgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlU
ZXN0T2JqQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGkKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVF
cnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJlYWRPbmx5VGVzdE9iakF0dHIiKTsKICAgICB9Ci0g
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3Vs
dCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnJlYWRPbmx5
VGVzdE9iakF0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqUmVhZE9ubHlUZXN0T2JqQXR0ckdldHRl
cihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0
b3JTdGF0aWNSZWFkT25seUxvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUpCit7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihUZXN0T2JqOjpzdGF0aWNSZWFkT25seUxvbmdBdHRy
KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNv
bnN0cnVjdG9yU3RhdGljUmVhZE9ubHlMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVy
KFRlc3RPYmo6OnN0YXRpY1JlYWRPbmx5TG9uZ0F0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqQ29u
c3RydWN0b3JTdGF0aWNSZWFkT25seUxvbmdBdHRyR2V0dGVyKHN0YXRlKSk7CiB9CiAKIAorSlNW
YWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRl
KiBzdGF0ZSkKK3sKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRl
LCBUZXN0T2JqOjpzdGF0aWNTdHJpbmdBdHRyKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3RyaW5nQXR0cihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNP
YmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKLSAgICBKU1Zh
bHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBUZXN0T2JqOjpzdGF0aWNTdHJp
bmdBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3RyaW5nQXR0ckdl
dHRlcihzdGF0ZSkpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JUZXN0U3Vi
T2JqR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAg
ICByZXR1cm4gSlNUZXN0U3ViT2JqOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCkpOworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25z
dHJ1Y3RvclRlc3RTdWJPYmooRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwpAQCAtMTQ1MywxMCArMTQ4NywyMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpDb25zdHJ1Y3RvclRlc3RTdWJPYmooRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93
R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiVGVzdFN1Yk9iaiIpOwogICAgIH0K
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdFN1Yk9iajo6Z2V0Q29uc3RydWN0b3Io
c3RhdGUtPnZtKCksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1Rlc3RPYmpDb25zdHJ1Y3RvclRlc3RTdWJPYmpHZXR0ZXIoc3RhdGUs
IGNhc3RlZFRoaXMpKTsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialRlc3RTdWJPYmpFbmFibGVk
QnlTZXR0aW5nQ29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzKQoreworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcy0+d3JhcHBlZCgpLmZy
YW1lKCkpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBTZXR0aW5ncyYgc2V0
dGluZ3MgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCkuZnJhbWUoKS0+c2V0dGluZ3MoKTsKKyAgICBp
ZiAoIXNldHRpbmdzLnRlc3RTZXR0aW5nRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKKyAgICByZXR1cm4gSlNUZXN0U3ViT2JqOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+
dm0oKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpOworfQorCiBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCog
c2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE0NjcsMTUgKzE1MTEs
MTcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdD
b25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RP
YmoiLCAiVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmciKTsKICAgICB9Ci0gICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzLT53cmFwcGVkKCkuZnJhbWUoKSkpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgU2V0dGluZ3MmIHNldHRpbmdzID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpLmZyYW1lKCktPnNldHRpbmdzKCk7Ci0gICAgaWYgKCFzZXR0aW5n
cy50ZXN0U2V0dGluZ0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdFN1Yk9iajo6
Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpUZXN0U3ViT2JqRW5hYmxlZEJ5
U2V0dGluZ0NvbnN0cnVjdG9yR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7CiB9CiAKIAorSlNW
YWx1ZSBqc1Rlc3RPYmpFbnVtQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
KyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmVudW1B
dHRyKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
akVudW1BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKQEAgLTE0ODYsMTIgKzE1MzIsMTcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqRW51bUF0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm8KICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5
cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImVudW1BdHRyIik7CiAgICAgfQotICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0
cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5lbnVtQXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpF
bnVtQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0
T2JqQnl0ZUF0dHJHZXR0ZXIoSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJl
cihpbXBsLmJ5dGVBdHRyKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iakJ5dGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKQEAgLTE1MDIsMTIgKzE1NTMsMTcgQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqQnl0ZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm8KICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0
aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImJ5dGVBdHRyIik7CiAgICAg
fQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc051bWJlcihpbXBsLmJ5dGVBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakJ5dGVB
dHRyR2V0dGVyKGNhc3RlZFRoaXMpKTsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iak9jdGV0QXR0
ckdldHRlcihKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwub2N0
ZXRBdHRyKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iak9jdGV0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CkBAIC0xNTE4LDEyICsxNTc0LDE3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak9j
dGV0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByCiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJvY3RldEF0dHIiKTsKICAgICB9Ci0gICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzTnVtYmVyKGltcGwub2N0ZXRBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iak9jdGV0QXR0ckdl
dHRlcihjYXN0ZWRUaGlzKSk7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpTaG9ydEF0dHJHZXR0
ZXIoSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLnNob3J0QXR0
cigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpT
aG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwpAQCAtMTUzNCwxMiArMTU5NSwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTaG9ydEF0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcgogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlw
ZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAic2hvcnRBdHRyIik7CiAgICAgfQotICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051
bWJlcihpbXBsLnNob3J0QXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpTaG9ydEF0dHJHZXR0ZXIo
Y2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0ckdl
dHRlcihKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuY2xhbXBl
ZFNob3J0QXR0cigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE1NTAsMTIgKzE2MTYsMTcgQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmEKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVy
biB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImNsYW1wZWRTaG9ydEF0
dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuY2xhbXBlZFNob3J0QXR0cigpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyR2V0dGVyKGNhc3RlZFRoaXMpKTsKIH0KIAog
CitKU1ZhbHVlIGpzVGVzdE9iakVuZm9yY2VSYW5nZVNob3J0QXR0ckdldHRlcihKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
KyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuZW5mb3JjZVJhbmdlU2hvcnRBdHRy
KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakVu
Zm9yY2VSYW5nZVNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CkBAIC0xNTY2LDEyICsxNjM3LDE3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iakVuZm9yY2VSYW5nZVNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhy
b3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJlbmZvcmNlUmFuZ2VTaG9ydEF0
dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuZW5mb3JjZVJhbmdlU2hvcnRBdHRyKCkp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVGVzdE9iakVuZm9yY2VSYW5nZVNob3J0QXR0ckdldHRlcihjYXN0ZWRUaGlz
KSk7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0ckdldHRlcihKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwudW5zaWduZWRTaG9ydEF0
dHIoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
VW5zaWduZWRTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwpAQCAtMTU4MiwxMiArMTY1OCwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpVbnNpZ25lZFNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VgogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93
R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAidW5zaWduZWRTaG9ydEF0dHIiKTsK
ICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1Zh
bHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwudW5zaWduZWRTaG9ydEF0dHIoKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHJHZXR0ZXIoY2FzdGVkVGhpcykpOwogfQogCiAKK0pT
VmFsdWUganNUZXN0T2JqTG9uZ0F0dHJHZXR0ZXIoSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQorewor
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSBqc051bWJlcihpbXBsLmxvbmdBdHRyKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakxvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE1OTgsMTIgKzE2NzksMTcgQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm8KICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAg
ICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImxvbmdB
dHRyIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0g
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmxvbmdBdHRyKCkpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VGVzdE9iakxvbmdBdHRyR2V0dGVyKGNhc3RlZFRoaXMpKTsKIH0KIAogCitKU1ZhbHVlIGpzVGVz
dE9iakxvbmdMb25nQXR0ckdldHRlcihKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
TnVtYmVyKGltcGwubG9uZ0xvbmdBdHRyKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9iakxvbmdMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQog
ewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xNjE0LDEyICsxNzAwLDE3IEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9iakxvbmdMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAg
ICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJsb25n
TG9uZ0F0dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwubG9uZ0xvbmdBdHRyKCkpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVGVzdE9iakxvbmdMb25nQXR0ckdldHRlcihjYXN0ZWRUaGlzKSk7CiB9CiAKIAor
SlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0ckdldHRlcihKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwudW5zaWduZWRMb25nTG9uZ0F0dHIoKSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVW5zaWdu
ZWRMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwpAQCAtMTYzMCwxMiArMTcyMSwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpV
bnNpZ25lZExvbmdMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aAog
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0
dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAidW5zaWduZWRMb25nTG9uZ0F0dHIiKTsK
ICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1Zh
bHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwudW5zaWduZWRMb25nTG9uZ0F0dHIoKSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHJHZXR0ZXIoY2FzdGVkVGhpcykpOwogfQog
CiAKK0pTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBp
bXBsLnN0cmluZ0F0dHIoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CkBAIC0xNjQ2LDEyICsxNzQyLDE3IEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4g
dGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJzdHJpbmdBdHRyIik7CiAg
ICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1
ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5zdHJpbmdBdHRyKCkpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVGVzdE9ialN0cmluZ0F0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKIH0K
IAogCitKU1ZhbHVlIGpzVGVzdE9ialRlc3RPYmpBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+
Z2xvYmFsT2JqZWN0KCksIGltcGwudGVzdE9iakF0dHIoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVGVzdE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90
QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTY2MiwxMiArMTc2MywxNyBA
QCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0T2JqQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkg
ewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIs
ICJ0ZXN0T2JqQXR0ciIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xv
YmFsT2JqZWN0KCksIGltcGwudGVzdE9iakF0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqVGVzdE9i
akF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9i
alRlc3ROdWxsYWJsZU9iakF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzKQoreworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Cisg
ICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSwgaW1wbC50ZXN0TnVsbGFibGVPYmpBdHRyKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialRlc3ROdWxsYWJsZU9iakF0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBz
bG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTY3OCwxMiArMTc4NCwx
NyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RP
YmoiLCAidGVzdE51bGxhYmxlT2JqQXR0ciIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2Fz
dGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwudGVzdE51bGxhYmxlT2JqQXR0cigpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlz
KSk7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0dHJHZXR0ZXIoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRl
LCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5sZW5pZW50VGVzdE9iakF0dHIoKSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTGVuaWVu
dFRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKQEAgLTE2OTQsMTIgKzE4MDUsMTcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTGVu
aWVudFRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXMKICAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSwgaW1wbC5sZW5pZW50VGVzdE9iakF0dHIoKSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNU
ZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7CiB9CiAK
IAorSlNWYWx1ZSBqc1Rlc3RPYmpVbmZvcmdlYWJsZUF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0
ZSwgaW1wbC51bmZvcmdlYWJsZUF0dHIoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqVW5mb3JnZWFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2Up
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE3MTAsMTIgKzE4MjYsMTcgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqVW5mb3JnZWFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWwKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAg
ICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInVu
Zm9yZ2VhYmxlQXR0ciIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGlt
cGwudW5mb3JnZWFibGVBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialVuZm9yZ2VhYmxlQXR0ckdl
dHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqU3RyaW5n
QXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1w
bC5zdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZygpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxs
QXNFbXB0eVN0cmluZyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CkBAIC0xNzI2LDEyICsxODQ3LDE3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0
cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSogc3RhdGUsIEVuCiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNF
bXB0eVN0cmluZyIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwu
c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoKSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2Jq
U3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdHZXR0ZXIoc3RhdGUsIGNhc3RlZFRo
aXMpKTsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialhNTE9iakF0dHJHZXR0ZXIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC54bWxPYmpBdHRyKCkpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialhNTE9iakF0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0
KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTc0MiwxMiArMTg2
OCwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpYTUxPYmpBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRl
c3RPYmoiLCAiWE1MT2JqQXR0ciIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCksIGltcGwueG1sT2JqQXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpY
TUxPYmpBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7CiB9CiAKIAorSlNWYWx1ZSBqc1Rl
c3RPYmpDcmVhdGVHZXR0ZXIoSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xl
YW4oaW1wbC5pc0NyZWF0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpDcmVhdGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwpAQCAtMTc1OCwxMiArMTg4OSwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpDcmVhdGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRo
cm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiY3JlYXRlIik7CiAgICAgfQot
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1
bHQgPSBqc0Jvb2xlYW4oaW1wbC5pc0NyZWF0ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpDcmVhdGVH
ZXR0ZXIoY2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3Ry
aW5nQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7
CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmZhc3RHZXRBdHRyaWJ1dGUoV2Vi
Q29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRzdHJpbmdhdHRyQXR0cikpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUs
IEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTc3
NCwxMiArMTkxMCwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaQogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3RPYmoiLCAicmVmbGVjdGVkU3RyaW5nQXR0ciIpOwogICAgIH0KLSAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNT
dHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuZmFzdEdldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1M
TmFtZXM6OnJlZmxlY3RlZHN0cmluZ2F0dHJBdHRyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqUmVmbGVj
dGVkU3RyaW5nQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUg
anNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyR2V0dGVyKEpTVGVzdE9iaiogY2FzdGVkVGhp
cykKK3sKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpI
VE1MTmFtZXM6OnJlZmxlY3RlZGludGVncmFsYXR0ckF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpT
T2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTc5MCwx
MiArMTkzMSwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdAogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0
ZSwgIlRlc3RPYmoiLCAicmVmbGVjdGVkSW50ZWdyYWxBdHRyIik7CiAgICAgfQotICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051
bWJlcihpbXBsLmdldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVj
dGVkaW50ZWdyYWxhdHRyQXR0cikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialJlZmxlY3RlZEludGVncmFs
QXR0ckdldHRlcihjYXN0ZWRUaGlzKSk7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0
ZWRVbnNpZ25lZEludGVncmFsQXR0ckdldHRlcihKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7Cisg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzTnVtYmVyKHN0ZDo6bWF4KDAsIGltcGwuZ2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29y
ZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1bnNpZ25lZGludGVncmFsYXR0ckF0dHIpKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVW5z
aWduZWRJbnRlZ3JhbEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwpAQCAtMTgwNiwxMiArMTk1MiwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SgogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93
R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVmbGVjdGVkVW5zaWduZWRJbnRl
Z3JhbEF0dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKHN0ZDo6bWF4KDAsIGltcGwuZ2V0SW50
ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1bnNpZ25lZGludGVn
cmFsYXR0ckF0dHIpKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3Jh
bEF0dHJHZXR0ZXIoY2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqUmVmbGVj
dGVkQm9vbGVhbkF0dHJHZXR0ZXIoSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jv
b2xlYW4oaW1wbC5mYXN0SGFzQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVk
Ym9vbGVhbmF0dHJBdHRyKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTgyMiwxMiArMTk3MywxNyBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAg
ICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVmbGVj
dGVkQm9vbGVhbkF0dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQm9vbGVhbihpbXBsLmZhc3RIYXNBdHRy
aWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0ckdldHRlcihjYXN0ZWRUaGlzKSk7CiB9
CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyR2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUo
c3RhdGUsIGltcGwuZ2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVk
dXJsYXR0ckF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE4MzgsMTIgKzE5OTQsMTcgQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmEKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVy
biB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJlZmxlY3RlZFVSTEF0
dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmdldFVSTEF0
dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVybGF0dHJBdHRyKSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwog
fQogCiAKK0pTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENh
Y2hlKHN0YXRlLCBpbXBsLmZhc3RHZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0
b21Db250ZW50U3RyaW5nQXR0ckF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJh
c2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE4NTQsMTIgKzIwMTUsMTcgQEAg
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGkKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7
CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwg
InJlZmxlY3RlZFN0cmluZ0F0dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0
YXRlLCBpbXBsLmZhc3RHZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250
ZW50U3RyaW5nQXR0ckF0dHIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRy
R2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpSZWZs
ZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHJHZXR0ZXIoSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQorewor
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSBqc051bWJlcihpbXBsLmdldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1l
czo6Y3VzdG9tQ29udGVudEludGVncmFsQXR0ckF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUs
IEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTg3
MCwxMiArMjAzNiwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21J
bnRlZ3JhbEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVgogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3RPYmoiLCAicmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyIik7CiAgICAgfQot
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1
bHQgPSBqc051bWJlcihpbXBsLmdldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1l
czo6Y3VzdG9tQ29udGVudEludGVncmFsQXR0ckF0dHIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpSZWZs
ZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHJHZXR0ZXIoY2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFs
dWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHJHZXR0ZXIoSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzKQoreworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Cisg
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4oaW1wbC5mYXN0SGFzQXR0cmlidXRlKFdlYkNv
cmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEJvb2xlYW5BdHRyQXR0cikpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJv
b2xlYW5BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKQEAgLTE4ODYsMTIgKzIwNTcsMTcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVj
dGVkQ3VzdG9tQm9vbGVhbkF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmEKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5
cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyIik7
CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNW
YWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4oaW1wbC5mYXN0SGFzQXR0cmlidXRlKFdlYkNvcmU6OkhU
TUxOYW1lczo6Y3VzdG9tQ29udGVudEJvb2xlYW5BdHRyQXR0cikpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9i
alJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyR2V0dGVyKGNhc3RlZFRoaXMpKTsKIH0KIAogCitK
U1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShz
dGF0ZSwgaW1wbC5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250
ZW50VVJMQXR0ckF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE5MDIsMTMgKzIwNzgsMTggQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAg
ICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVmbGVj
dGVkQ3VzdG9tVVJMQXR0ciIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUs
IGltcGwuZ2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFVS
TEF0dHJBdHRyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0ckdldHRl
cihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQor
SlNWYWx1ZSBqc1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2Fj
aGUoc3RhdGUsIGltcGwuZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0
cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
QEAgLTE5MTksMTMgKzIxMDAsMTggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqRW5hYmxlZEF0
UnVudGltZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWwKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVF
cnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUiKTsKICAg
ICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmVuYWJsZWRBdFJ1bnRpbWVB
dHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUdl
dHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAjZW5kaWYKIAorSlNWYWx1ZSBqc1Rlc3RP
YmpUeXBlZEFycmF5QXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBK
U1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBp
bXBsLnR5cGVkQXJyYXlBdHRyKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialR5cGVkQXJyYXlBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE5MzYsMTIgKzIxMjIsMTkgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqVHlwZWRBcnJheUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHUKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAg
IHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInR5cGVkQXJy
YXlBdHRyIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgaW1wbC50eXBlZEFycmF5QXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpUeXBlZEFycmF5
QXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2Jq
QXR0cldpdGhHZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzKQoreworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJl
cihpbXBsLmF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVjKSk7CisgICAgc2V0RE9NRXhjZXB0aW9u
KHN0YXRlLCBlYyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTk1MiwxNCArMjE0NSwxOSBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAg
cmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiYXR0cldpdGhH
ZXR0ZXJFeGNlcHRpb24iKTsKICAgICB9Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkdl
dHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCisKK0pTVmFsdWUganNUZXN0T2JqQXR0cldp
dGhHZXR0ZXJFeGNlcHRpb25XaXRoTWVzc2FnZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlIGVjOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1
bHQgPSBqc051bWJlcihpbXBsLmF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVjKSk7CisgICAgSlNW
YWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uV2l0aE1l
c3NhZ2UoZWMpKTsKICAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotCiBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBK
U09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE5NzAs
MTQgKzIxNjgsMTcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cldpdGhHZXR0ZXJFeGNl
cHRpb25XaXRoTWVzc2FnZShFeGVjU3RhdGUqIHN0YXRlLCBFbmMKICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3Rh
dGUsICJUZXN0T2JqIiwgImF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uV2l0aE1lc3NhZ2UiKTsKICAg
ICB9Ci0gICAgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlIGVjOwotICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBs
LmF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uV2l0aE1lc3NhZ2UoZWMpKTsKLSAgICBzZXRET01FeGNl
cHRpb24oc3RhdGUsIGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlv
bldpdGhNZXNzYWdlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7CiB9CiAKIAorSlNWYWx1ZSBq
c1Rlc3RPYmpBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcihKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMpCit7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1Zh
bHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuYXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cldpdGhT
ZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwpAQCAtMTk4OCwxMiArMjE4OSwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpB
dHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZQog
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0
dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiYXR0cldpdGhTZXR0ZXJFeGNlcHRpb24i
KTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuYXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNUZXN0T2JqQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXIoY2FzdGVkVGhp
cykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25XaXRo
TWVzc2FnZUdldHRlcihKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGlt
cGwuYXR0cldpdGhTZXR0ZXJFeGNlcHRpb25XaXRoTWVzc2FnZSgpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aFNldHRlckV4Y2VwdGlv
bldpdGhNZXNzYWdlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKQEAgLTIwMDQsMTIgKzIyMTAsMTkgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQXR0
cldpdGhTZXR0ZXJFeGNlcHRpb25XaXRoTWVzc2FnZShFeGVjU3RhdGUqIHN0YXRlLCBFbmMKICAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRl
clR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uV2l0
aE1lc3NhZ2UiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuYXR0cldpdGhTZXR0ZXJFeGNl
cHRpb25XaXRoTWVzc2FnZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpBdHRyV2l0aFNldHRlckV4Y2Vw
dGlvbldpdGhNZXNzYWdlR2V0dGVyKGNhc3RlZFRoaXMpKTsKIH0KIAogCitKU1ZhbHVlIGpzVGVz
dE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuc3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNl
cHRpb24oZWMpKTsKKyAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aEdldHRl
ckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CkBAIC0yMDIwLDE0ICsyMjMzLDE3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmlu
Z0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKCiAgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJU
eXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlv
biIpOwogICAgIH0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRo
Q2FjaGUoc3RhdGUsIGltcGwuc3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oZWMpKTsKLSAg
ICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpTdHJpbmdBdHRy
V2l0aEdldHRlckV4Y2VwdGlvbkdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKK0pT
VmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhD
YWNoZShzdGF0ZSwgaW1wbC5zdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0
aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CkBAIC0yMDM4LDEyICsyMjU0LDE3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dH
ZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJzdHJpbmdBdHRyV2l0aFNldHRlckV4
Y2VwdGlvbiIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuc3Ry
aW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqU3RyaW5nQXR0
cldpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKIH0KIAogCitK
U1ZhbHVlIGpzVGVzdE9ialN0cmljdFR5cGVDaGVja2luZ0F0dHJpYnV0ZUdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnN0cmljdFR5cGVDaGVja2luZ0F0dHJpYnV0
ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpT
dHJpY3RUeXBlQ2hlY2tpbmdBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjA1NCwxMiArMjI3NSwxNSBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpTdHJpY3RUeXBlQ2hlY2tpbmdBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVgogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0
dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAic3RyaWN0VHlwZUNo
ZWNraW5nQXR0cmlidXRlIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSwgaW1wbC5zdHJpY3RUeXBlQ2hlY2tpbmdBdHRyaWJ1dGUoKSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNUZXN0T2JqU3RyaWN0VHlwZUNoZWNraW5nQXR0cmlidXRlR2V0dGVyKHN0YXRlLCBjYXN0
ZWRUaGlzKSk7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpDdXN0b21BdHRyR2V0dGVyKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICByZXR1cm4gY2FzdGVk
VGhpcy0+Y3VzdG9tQXR0cigqc3RhdGUpOworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpD
dXN0b21BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKQEAgLTIwNzAsMTAgKzIyOTQsMTYgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ3VzdG9t
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFAKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5
cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImN1c3RvbUF0dHIiKTsKICAgICB9Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5jdXN0b21BdHRyKCpzdGF0ZSkpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqQ3VzdG9tQXR0ckdldHRlcihzdGF0ZSwg
Y2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqT25mb29HZXR0ZXIoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CisgICAgcmV0dXJuIGV2ZW50SGFuZGxlckF0dHJpYnV0ZShjYXN0ZWRUaGlzLT53cmFw
cGVkKCksIGV2ZW50TmFtZXMoKS5mb29FdmVudCk7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iak9uZm9vKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKQEAgLTIwODQsMTEgKzIzMTQsMTYgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqT25mb28o
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXIKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5
cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm9uZm9vIik7CiAgICAgfQotICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShldmVudEhhbmRsZXJBdHRy
aWJ1dGUoY2FzdGVkVGhpcy0+d3JhcHBlZCgpLCBldmVudE5hbWVzKCkuZm9vRXZlbnQpKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iak9uZm9vR2V0dGVyKHN0YXRlLCBjYXN0
ZWRUaGlzKSk7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpPbndlYmtpdGZvb0dldHRlcihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKKyAgICByZXR1cm4gZXZlbnRIYW5kbGVyQXR0cmlidXRlKGNhc3RlZFRoaXMtPndy
YXBwZWQoKSwgZXZlbnROYW1lcygpLmZvb0V2ZW50KTsKK30KKwogRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqT253ZWJraXRmb28oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwpAQCAtMjA5OSwxMSArMjMzNCwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpPbndlYmtpdGZvbyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dH
ZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJvbndlYmtpdGZvbyIpOwogICAgIH0K
LSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZXZl
bnRIYW5kbGVyQXR0cmlidXRlKGNhc3RlZFRoaXMtPndyYXBwZWQoKSwgZXZlbnROYW1lcygpLmZv
b0V2ZW50KSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpPbndlYmtpdGZv
b0dldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqV2l0
aFNjcmlwdFN0YXRlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwor
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC53aXRoU2NyaXB0U3RhdGVBdHRyaWJ1
dGUoKnN0YXRlKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTIxMTQsMTIgKzIzNTUsMTcgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHUKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAg
IHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIndpdGhTY3Jp
cHRTdGF0ZUF0dHJpYnV0ZSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC53aXRoU2NyaXB0
U3RhdGVBdHRyaWJ1dGUoKnN0YXRlKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqV2l0aFNjcmlwdFN0YXRl
QXR0cmlidXRlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7CiB9CiAKIAorSlNWYWx1ZSBqc1Rl
c3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZUdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwu
d2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUoKnN0YXRlKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aENhbGxXaXRoQW5k
U2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwpAQCAtMjEzMCwxMiArMjM3NiwyMCBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZShFeGVjU3RhdGUq
IHN0YXRlLAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJu
IHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAid2l0aENhbGxXaXRoQW5k
U2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwud2l0
aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUoKnN0YXRlKSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNU
ZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUs
IGNhc3RlZFRoaXMpKTsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRp
b25Db250ZXh0QXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcykKK3sKKyAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQg
PSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZSgqY29udGV4dCkpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKQEAgLTIxNDYsMTUgKzI0MDAsMTkgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW4KICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5
cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0
cmlidXRlIik7CiAgICAgfQotICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2Jq
ZWN0KCksIGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUoKmNvbnRleHQp
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZUdl
dHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqV2l0aFNj
cmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9i
aiogY2FzdGVkVGhpcykKK3sKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhz
dGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlwdFN0YXRlQXR0
cmlidXRlUmFpc2VzKCpzdGF0ZSwgZWMpKTsKKyAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVj
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRo
U2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjE2NSwxNCArMjQyMywyMiBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0
dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAid2l0aFNjcmlwdFN0
YXRlQXR0cmlidXRlUmFpc2VzIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzR2V0dGVyKHN0YXRlLCBjYXN0
ZWRUaGlzKSk7Cit9CisKKworSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEF0dHJpYnV0ZVJhaXNlc0dldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMpCit7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgYXV0byogY29udGV4
dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xv
YmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKCpzdGF0ZSwg
ZWMpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2Vz
KCpjb250ZXh0LCBlYykpOwogICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi0K
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmli
dXRlUmFpc2VzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKQEAgLTIxODMsMTcgKzI0NDksMjAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0YXRlKiBzdGEKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5
cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0
cmlidXRlUmFpc2VzIik7CiAgICAgfQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
dHRyaWJ1dGVSYWlzZXNHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworCitKU1ZhbHVl
IGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1
dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQorewogICAg
IGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghY29u
dGV4dCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRl
UmFpc2VzKCpjb250ZXh0LCBlYykpOwotICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9
IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUoKnN0YXRlLCAqY29udGV4dCkp
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLQogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZShFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3Qq
IHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMjA0LDE1ICsyNDcz
LDIyIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUoRXhlY1N0CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVz
dE9iaiIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRl
Iik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqV2l0aFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZUdldHRlcihzdGF0ZSwgY2Fz
dGVkVGhpcykpOworfQorCisKK0pTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0dldHRlcihFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAg
ICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFj
b250ZXh0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3Jp
cHRTdGF0ZUF0dHJpYnV0ZSgqc3RhdGUsICpjb250ZXh0KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRT
Y3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcygqc3RhdGUsICpjb250ZXh0LCBlYykpOworICAgIHNl
dERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLQogRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRT
dGF0ZUF0dHJpYnV0ZVJhaXNlcyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CkBAIC0yMjIzLDE3ICsyNDk5LDIwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlz
ZXMoCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhy
b3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzIik7CiAgICAgfQotICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqV2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0dldHRl
cihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCisKK0pTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGVHZXR0ZXIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQorewogICAgIGF1dG8qIGNv
bnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghY29udGV4dCkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpLCBpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRy
aWJ1dGVSYWlzZXMoKnN0YXRlLCAqY29udGV4dCwgZWMpKTsKLSAgICBzZXRET01FeGNlcHRpb24o
c3RhdGUsIGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgSlNW
YWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1w
bC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJp
YnV0ZSgqc3RhdGUsICpjb250ZXh0KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotCiBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0
YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CkBAIC0yMjQ0LDE1ICsyNTIzLDE3IEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2Vz
QXR0cmliCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4g
dGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZSIpOwogICAgIH0KLSAg
ICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBpZiAoIWNv
bnRleHQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0g
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3Vs
dCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLndpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlKCpzdGF0
ZSwgKmNvbnRleHQpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhp
cykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxT
dGFja0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMpCit7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBs
LndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUoKSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50
c0FuZENhbGxTdGFja0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CkBAIC0yMjYzLDEzICsyNTQ0LDE4IEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUoRXhlY1N0YXRl
KiBzdGF0CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4g
dGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0QXJndW1l
bnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0
YWNrQXR0cmlidXRlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRD
YWxsU3RhY2tBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKIH0KIAogCiAjaWYg
RU5BQkxFKENvbmRpdGlvbjEpCitKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjFHZXR0
ZXIoSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmNvbmRpdGlv
bmFsQXR0cjEoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqQ29uZGl0aW9uYWxBdHRyMShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CkBAIC0yMjgwLDE0ICsyNTY2LDE5IEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9iakNvbmRpdGlvbmFsQXR0cjEoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4g
dGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJjb25kaXRpb25hbEF0dHIx
Iik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAg
SlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmNvbmRpdGlvbmFsQXR0cjEoKSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMUdldHRlcihjYXN0ZWRUaGlzKSk7CiB9CiAKICNl
bmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQorSlNW
YWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyR2V0dGVyKEpTVGVzdE9iaiogY2FzdGVkVGhp
cykKK3sKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5jb25kaXRpb25hbEF0dHIyKCkpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUs
IEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjI5
OCwxNCArMjU4OSwxOSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIy
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYQogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3RPYmoiLCAiY29uZGl0aW9uYWxBdHRyMiIpOwogICAgIH0KLSAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1i
ZXIoaW1wbC5jb25kaXRpb25hbEF0dHIyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakNvbmRpdGlvbmFs
QXR0cjJHZXR0ZXIoY2FzdGVkVGhpcykpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25k
aXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKK0pTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9u
YWxBdHRyM0dldHRlcihKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGlt
cGwuY29uZGl0aW9uYWxBdHRyMygpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTIzMTYsMTQgKzI2MTIsMTcgQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmEKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAg
ICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImNvbmRp
dGlvbmFsQXR0cjMiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuY29uZGl0aW9uYWxBdHRy
MygpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzR2V0dGVyKGNhc3RlZFRoaXMp
KTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKK0pTVmFsdWUganNUZXN0
T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICByZXR1cm4gSlNUZXN0T2JqZWN0QTo6Z2V0Q29u
c3RydWN0b3Ioc3RhdGUtPnZtKCksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKK30KKwog
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09i
amVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTIzMzQsMTIg
KzI2MzMsMTcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1YKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUs
ICJUZXN0T2JqIiwgImNvbmRpdGlvbmFsQXR0cjQiKTsKICAgICB9Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShKU1Rlc3RPYmplY3RBOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgY2Fz
dGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VGVzdE9iakNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3RvckdldHRlcihzdGF0ZSwgY2FzdGVkVGhp
cykpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29u
ZGl0aW9uMikKK0pTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yR2V0
dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICByZXR1
cm4gSlNUZXN0T2JqZWN0Qjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpKTsKK30KKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9u
YWxBdHRyNUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKQEAgLTIzNTAsMTIgKzI2NTQsMTcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1YKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJv
d0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImNvbmRpdGlvbmFsQXR0cjUiKTsK
ICAgICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RPYmplY3RCOjpnZXRDb25z
dHJ1Y3RvcihzdGF0ZS0+dm0oKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3Rv
ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShD
b25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKK0pTVmFsdWUganNUZXN0T2JqQ29uZGl0
aW9uYWxBdHRyNkNvbnN0cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcykKK3sKKyAgICByZXR1cm4gSlNUZXN0T2JqZWN0Qzo6Z2V0Q29uc3RydWN0b3Io
c3RhdGUtPnZtKCksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKK30KKwogRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xv
dEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTIzNjYsMTEgKzI2NzUsMjEg
QEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1YKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2Jq
IiwgImNvbmRpdGlvbmFsQXR0cjYiKTsKICAgICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1Rlc3RPYmplY3RDOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgY2FzdGVkVGhpcy0+
Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakNv
bmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQog
CiAjZW5kaWYKIAorSlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUxR2V0dGVyKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBpZiAoSlNWYWx1ZSBj
YWNoZWRWYWx1ZSA9IGNhc3RlZFRoaXMtPm1fY2FjaGVkQXR0cmlidXRlMS5nZXQoKSkKKyAgICAg
ICAgcmV0dXJuIGNhY2hlZFZhbHVlOworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLmNhY2hlZEF0dHJpYnV0ZTEoKTsKKyAg
ICBjYXN0ZWRUaGlzLT5tX2NhY2hlZEF0dHJpYnV0ZTEuc2V0KHN0YXRlLT52bSgpLCBjYXN0ZWRU
aGlzLCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9iakNhY2hlZEF0dHJpYnV0ZTEoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwpAQCAtMjM4MSwxNSArMjcwMCwyMCBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUxKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJu
IHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiY2FjaGVkQXR0cmlidXRl
MSIpOwogICAgIH0KLSAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IGNhc3RlZFRoaXMtPm1f
Y2FjaGVkQXR0cmlidXRlMS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShj
YWNoZWRWYWx1ZSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwuY2FjaGVkQXR0cmlidXRlMSgpOwotICAgIGNhc3RlZFRo
aXMtPm1fY2FjaGVkQXR0cmlidXRlMS5zZXQoc3RhdGUtPnZtKCksIGNhc3RlZFRoaXMsIHJlc3Vs
dCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMUdldHRlcihzdGF0ZSwgY2FzdGVk
VGhpcykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMkdldHRlcihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgaWYgKEpTVmFs
dWUgY2FjaGVkVmFsdWUgPSBjYXN0ZWRUaGlzLT5tX2NhY2hlZEF0dHJpYnV0ZTIuZ2V0KCkpCisg
ICAgICAgIHJldHVybiBjYWNoZWRWYWx1ZTsKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1wbC5jYWNoZWRBdHRyaWJ1dGUyKCk7
CisgICAgY2FzdGVkVGhpcy0+bV9jYWNoZWRBdHRyaWJ1dGUyLnNldChzdGF0ZS0+dm0oKSwgY2Fz
dGVkVGhpcywgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI0MDAsMTUgKzI3MjQsMTcgQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmEKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJl
dHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImNhY2hlZEF0dHJp
YnV0ZTIiKTsKICAgICB9Ci0gICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUgPSBjYXN0ZWRUaGlz
LT5tX2NhY2hlZEF0dHJpYnV0ZTIuZ2V0KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoY2FjaGVkVmFsdWUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLmNhY2hlZEF0dHJpYnV0ZTIoKTsKLSAgICBjYXN0
ZWRUaGlzLT5tX2NhY2hlZEF0dHJpYnV0ZTIuc2V0KHN0YXRlLT52bSgpLCBjYXN0ZWRUaGlzLCBy
ZXN1bHQpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTJHZXR0ZXIoc3RhdGUsIGNh
c3RlZFRoaXMpKTsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iakFueUF0dHJpYnV0ZUdldHRlcihK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwuYW55QXR0cmlidXRlKCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQW55QXR0cmlidXRl
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
LCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI0
MTksMTIgKzI3NDUsMTYgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQW55QXR0cmlidXRlKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwKICAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigq
c3RhdGUsICJUZXN0T2JqIiwgImFueUF0dHJpYnV0ZSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1wbC5hbnlB
dHRyaWJ1dGUoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpBbnlBdHRyaWJ1dGVHZXR0ZXIoY2FzdGVkVGhp
cykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqQ29udGVudERvY3VtZW50R2V0dGVyKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBzaG91bGRBbGxvd0FjY2Vzc1RvTm9k
ZShzdGF0ZSwgaW1wbC5jb250ZW50RG9jdW1lbnQoKSkgPyB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSwgaW1wbC5jb250ZW50RG9jdW1lbnQoKSkgOiBqc051bGwoKTsKK30K
KwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29udGVudERvY3VtZW50KEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xv
dEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI0MzUsMTEgKzI3NjUsMTcg
QEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29udGVudERvY3VtZW50KEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWwKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2Jq
IiwgImNvbnRlbnREb2N1bWVudCIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc2hvdWxkQWxsb3dBY2Nl
c3NUb05vZGUoc3RhdGUsIGltcGwuY29udGVudERvY3VtZW50KCkpID8gdG9KUyhzdGF0ZSwgY2Fz
dGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwuY29udGVudERvY3VtZW50KCkpIDoganNOdWxs
KCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqQ29udGVudERvY3VtZW50
R2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpNdXRh
YmxlUG9pbnRHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQor
eworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgU1ZHU3RhdGlj
UHJvcGVydHlUZWFyT2ZmPFRlc3RPYmosIFNWR1BvaW50Pjo6Y3JlYXRlKGltcGwsIGltcGwubXV0
YWJsZVBvaW50KCksICZUZXN0T2JqOjp1cGRhdGVNdXRhYmxlUG9pbnQpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpNdXRhYmxlUG9pbnQoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2Jq
ZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjQ1MCwxMiAr
Mjc4NiwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpNdXRhYmxlUG9pbnQoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLAogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwg
IlRlc3RPYmoiLCAibXV0YWJsZVBvaW50Iik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgU1ZHU3RhdGljUHJvcGVydHlUZWFyT2ZmPFRlc3RPYmos
IFNWR1BvaW50Pjo6Y3JlYXRlKGltcGwsIGltcGwubXV0YWJsZVBvaW50KCksICZUZXN0T2JqOjp1
cGRhdGVNdXRhYmxlUG9pbnQpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpNdXRhYmxlUG9pbnRHZXR0ZXIo
c3RhdGUsIGNhc3RlZFRoaXMpKTsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iakltbXV0YWJsZVBv
aW50R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0
ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFNWR1Byb3BlcnR5VGVh
ck9mZjxTVkdQb2ludD46OmNyZWF0ZShpbXBsLmltbXV0YWJsZVBvaW50KCkpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpJbW11dGFibGVQb2ludChF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwg
SlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yNDY2
LDEyICsyODA3LDE3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakltbXV0YWJsZVBvaW50KEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1CiAgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0
YXRlLCAiVGVzdE9iaiIsICJpbW11dGFibGVQb2ludCIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0
ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFNWR1Byb3BlcnR5VGVhck9mZjxTVkdQb2lu
dD46OmNyZWF0ZShpbXBsLmltbXV0YWJsZVBvaW50KCkpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpJbW11
dGFibGVQb2ludEdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUganNU
ZXN0T2JqU3RyYXdiZXJyeUdldHRlcihKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
TnVtYmVyKGltcGwuYmx1ZWJlcnJ5KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmF3YmVycnkoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjQ4MiwxMiArMjgyOCwxNyBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpTdHJhd2JlcnJ5KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAg
cmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAic3RyYXdiZXJy
eSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5ibHVlYmVycnkoKSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNU
ZXN0T2JqU3RyYXdiZXJyeUdldHRlcihjYXN0ZWRUaGlzKSk7CiB9CiAKIAorSlNWYWx1ZSBqc1Rl
c3RPYmpTdHJpY3RGbG9hdEdldHRlcihKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
TnVtYmVyKGltcGwuc3RyaWN0RmxvYXQoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaWN0RmxvYXQoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjQ5OCwxMiArMjg0OSwxNyBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpTdHJpY3RGbG9hdChFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAg
ICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJzdHJpY3RG
bG9hdCIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwot
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5zdHJpY3RGbG9hdCgpKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1Rlc3RPYmpTdHJpY3RGbG9hdEdldHRlcihjYXN0ZWRUaGlzKSk7CiB9CiAKIAorSlNWYWx1
ZSBqc1Rlc3RPYmpEZXNjcmlwdGlvbkdldHRlcihKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7Cisg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzTnVtYmVyKGltcGwuZGVzY3JpcHRpb24oKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqRGVzY3JpcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFz
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjUxNCwxMiArMjg3MCwxNyBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpEZXNjcmlwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewog
ICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJk
ZXNjcmlwdGlvbiIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5kZXNjcmlwdGlvbigpKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1Rlc3RPYmpEZXNjcmlwdGlvbkdldHRlcihjYXN0ZWRUaGlzKSk7CiB9CiAKIAor
SlNWYWx1ZSBqc1Rlc3RPYmpJZEdldHRlcihKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzTnVtYmVyKGltcGwuaWQoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqSWQoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwpAQCAtMjUzMCwxMiArMjg5MSwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpJZChFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TgogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93
R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiaWQiKTsKICAgICB9Ci0gICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
TnVtYmVyKGltcGwuaWQoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqSWRHZXR0ZXIoY2FzdGVkVGhpcykp
OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqSGFzaEdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBp
bXBsLmhhc2goKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqSGFzaChFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CkBAIC0yNTQ2LDEyICsyOTEyLDE3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakhhc2go
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0CiAgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJU
eXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJoYXNoIik7CiAgICAgfQotICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmlu
Z1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5oYXNoKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakhhc2hHZXR0
ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialJlcGxhY2Vh
YmxlQXR0cmlidXRlR2V0dGVyKEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1i
ZXIoaW1wbC5yZXBsYWNlYWJsZUF0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3Qq
IHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yNTYyLDEyICsyOTMz
LDE3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVz
dE9iaiIsICJyZXBsYWNlYWJsZUF0dHJpYnV0ZSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1w
bC5yZXBsYWNlYWJsZUF0dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpSZXBsYWNlYWJsZUF0
dHJpYnV0ZUdldHRlcihjYXN0ZWRUaGlzKSk7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpOdWxs
YWJsZURvdWJsZUF0dHJpYnV0ZUdldHRlcihKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9
IHRvTnVsbGFibGVKU051bWJlcihpbXBsLm51bGxhYmxlRG91YmxlQXR0cmlidXRlKCkpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlRG91
YmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKQEAgLTI1NzgsMTIgKzI5NTQsMTcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVs
bGFibGVEb3VibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUKICAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRl
clR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm51bGxhYmxlRG91YmxlQXR0cmlidXRlIik7
CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNW
YWx1ZSByZXN1bHQgPSB0b051bGxhYmxlSlNOdW1iZXIoaW1wbC5udWxsYWJsZURvdWJsZUF0dHJp
YnV0ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpOdWxsYWJsZURvdWJsZUF0dHJpYnV0ZUdldHRlcihj
YXN0ZWRUaGlzKSk7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUxvbmdBdHRyaWJ1
dGVHZXR0ZXIoSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b051bGxhYmxlSlNOdW1i
ZXIoaW1wbC5udWxsYWJsZUxvbmdBdHRyaWJ1dGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVMb25nQXR0cmlidXRlKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVj
dCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI1OTQsMTIgKzI5
NzUsMTcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVMb25nQXR0cmlidXRlKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHQKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJU
ZXN0T2JqIiwgIm51bGxhYmxlTG9uZ0F0dHJpYnV0ZSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9OdWxsYWJs
ZUpTTnVtYmVyKGltcGwubnVsbGFibGVMb25nQXR0cmlidXRlKCkpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9i
ak51bGxhYmxlTG9uZ0F0dHJpYnV0ZUdldHRlcihjYXN0ZWRUaGlzKSk7CiB9CiAKIAorSlNWYWx1
ZSBqc1Rlc3RPYmpOdWxsYWJsZUJvb2xlYW5BdHRyaWJ1dGVHZXR0ZXIoSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzKQoreworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4oaW1wbC5udWxsYWJsZUJvb2xlYW5BdHRyaWJ1dGUo
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVs
bGFibGVCb29sZWFuQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKQEAgLTI2MTAsMTIgKzI5OTYsMTcgQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqTnVsbGFibGVCb29sZWFuQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHUKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0
aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm51bGxhYmxlQm9vbGVhbkF0
dHJpYnV0ZSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKGltcGwubnVsbGFibGVCb29sZWFuQXR0
cmlidXRlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iak51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZUdldHRl
cihjYXN0ZWRUaGlzKSk7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ0F0
dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7
CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzU3RyaW5nT3JOdWxsKHN0YXRlLCBpbXBsLm51bGxhYmxlU3RyaW5nQXR0cmlidXRl
KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51
bGxhYmxlU3RyaW5nQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKQEAgLTI2MjYsMTIgKzMwMTcsMTcgQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqTnVsbGFibGVTdHJpbmdBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0
aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm51bGxhYmxlU3RyaW5nQXR0
cmlidXRlIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ09yTnVsbChzdGF0ZSwgaW1wbC5udWxsYWJs
ZVN0cmluZ0F0dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ0F0dHJp
YnV0ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2Jq
TnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXIoSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
KQoreworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgSlNWYWx1
ZSByZXN1bHQgPSB0b051bGxhYmxlSlNOdW1iZXIoaW1wbC5udWxsYWJsZUxvbmdTZXR0YWJsZUF0
dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpOdWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQog
ewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yNjQyLDEyICszMDM4LDE3IEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAg
ICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJudWxs
YWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9OdWxsYWJsZUpTTnVt
YmVyKGltcGwubnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0
T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXIoY2FzdGVkVGhpcykpOwogfQog
CiAKK0pTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3Ry
aW5nT3JOdWxsKHN0YXRlLCBpbXBsLm51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoKSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFi
bGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yNjU4LDEyICszMDU5LDE5IEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1
cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJudWxsYWJsZVN0cmlu
Z1NldHRhYmxlQXR0cmlidXRlIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ09yTnVsbChzdGF0ZSwg
aW1wbC5udWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlKCkpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9i
ak51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMp
KTsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nVmFsdWVHZXR0ZXIoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSB0b051bGxhYmxlSlNOdW1iZXIoaW1wbC5udWxsYWJsZVN0cmluZ1Zh
bHVlKGVjKSk7CisgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZShF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwg
SlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yNjc0
LDE0ICszMDgyLDE3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nVmFs
dWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpCiAgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0
YXRlLCAiVGVzdE9iaiIsICJudWxsYWJsZVN0cmluZ1ZhbHVlIik7CiAgICAgfQotICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b051bGxhYmxlSlNOdW1iZXIoaW1wbC5udWxsYWJsZVN0
cmluZ1ZhbHVlKGVjKSk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwog
fQogCiAKK0pTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUs
IGltcGwuYXR0cmlidXRlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iakF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CkBAIC0yNjkyLDEyICszMTAzLDE3IEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9iakF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4g
dGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJhdHRyaWJ1dGUiKTsKICAg
ICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmF0dHJpYnV0ZSgpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1Rlc3RPYmpBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKIH0KIAog
CitKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlR2V0dGVyKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdX
aXRoQ2FjaGUoc3RhdGUsIGltcGwuYXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGUoKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRl
V2l0aFJlc2VydmVkRW51bVR5cGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwpAQCAtMjcwOCwxMiArMzEyNCwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSgogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRo
cm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiYXR0cmlidXRlV2l0aFJlc2Vy
dmVkRW51bVR5cGUiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBs
LmF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakF0dHJp
YnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7CiB9CiAK
IAorSlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnB1dEZvcndhcmRzQXR0cmlidXRlKCkpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialB1dEZvcndhcmRz
QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKQEAgLTI3MjQsMTIgKzMxNDUsMTcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHV0Rm9y
d2FyZHNBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGgKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5
cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInB1dEZvcndhcmRzQXR0cmlidXRlIik7CiAgICAg
fQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5wdXRG
b3J3YXJkc0F0dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0
ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqUHV0
Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpLCBpbXBsLnB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGUoKSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJs
ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CkBAIC0yNzQwLDkgKzMxNjYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3
YXJkc051bGxhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKUwogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlw
ZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZSIp
OwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpT
VmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGlt
cGwucHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpQdXRG
b3J3YXJkc051bGxhYmxlQXR0cmlidXRlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7CiB9CiAK
IApAQCAtNjI2MSw2ICs2Njg1LDI0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BdHRhY2hTaGFkb3dSb290KEV4ZWNTdGF0CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvSlNPTihFeGVjU3RhdGUq
IHN0YXRlKQoreworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwor
ICAgIGF1dG8gY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVl
KTsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQorICAgICAgICByZXR1cm4gdGhyb3dU
aGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAidG9KU09OIik7CisgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CisKKyAgICBK
U09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3Qoc3RhdGUpOworICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZ2bSwgInJlYWRPbmx5U3RyaW5nQXR0ciIpLCBqc1Rlc3RPYmpSZWFkT25seVN0
cmluZ0F0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKKyAgICByZXN1bHQtPnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJlbnVtQXR0ciIpLCBqc1Rlc3RPYmpF
bnVtQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImxvbmdBdHRyIiksIGpzVGVzdE9iakxv
bmdBdHRyR2V0dGVyKGNhc3RlZFRoaXMpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjcmVhdGUiKSwganNUZXN0T2JqQ3JlYXRlR2V0dGVy
KGNhc3RlZFRoaXMpKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30K
KwogdXNpbmcgVGVzdE9iakl0ZXJhdG9yID0gSlNET01JdGVyYXRvcjxKU1Rlc3RPYmo+OwogdXNp
bmcgVGVzdE9iakl0ZXJhdG9yUHJvdG90eXBlID0gSlNET01JdGVyYXRvclByb3RvdHlwZTxKU1Rl
c3RPYmo+OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UuY3BwCmluZGV4IGUzMmIwOTg0MDI4ZmJkMzE4M2I5NDdjMWE0ODA5MmVjZWE3
YWY2OGEuLjBlMThlMDQyN2E2MzJhODM4MmNlYWZkMmI2ZWIxMDYxZGExYzkwZDggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3Bw
CkBAIC0xMzMsNiArMTMzLDEzIEBAIHZvaWQgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogICAgIHRoaXNPYmplY3QtPkpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6fkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZSgpOwogfQogCitKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZVZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZSogY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1wbC52YWx1ZSgpID8g
aW1wbC52YWx1ZSgpLT5kZXNlcmlhbGl6ZShzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCksIDApIDoganNOdWxsKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2RlZEpTVmFs
dWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFsdWUoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBz
bG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTQzLDEyICsxNTAsMTcg
QEAgRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFs
dWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2QKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlIiwgInZhbHVlIik7CiAgICAgfQotICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBs
LnZhbHVlKCkgPyBpbXBsLnZhbHVlKCktPmRlc2VyaWFsaXplKHN0YXRlLCBjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSwgMCkgOiBqc051bGwoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VWYWx1ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAK
K0pTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUmVhZG9ubHlWYWx1
ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UqIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwucmVhZG9ubHlWYWx1ZSgpID8gaW1wbC5y
ZWFkb25seVZhbHVlKCktPmRlc2VyaWFsaXplKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgMCkgOiBqc051bGwoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VSZWFkb25seVZhbHVlKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBK
U09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE1OSwx
MiArMTcxLDIwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZVJlYWRvbmx5VmFsdWUoRXhlY1N0YXRlKiBzdGF0CiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRl
LCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSIsICJyZWFkb25seVZhbHVlIik7
CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNW
YWx1ZSByZXN1bHQgPSBpbXBsLnJlYWRvbmx5VmFsdWUoKSA/IGltcGwucmVhZG9ubHlWYWx1ZSgp
LT5kZXNlcmlhbGl6ZShzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIDApIDoganNO
dWxsKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUmVhZG9u
bHlWYWx1ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWVHZXR0ZXIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBjYXN0ZWRUaGlz
KQoreworICAgIGlmIChKU1ZhbHVlIGNhY2hlZFZhbHVlID0gY2FzdGVkVGhpcy0+bV9jYWNoZWRW
YWx1ZS5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNhY2hlZFZhbHVlOworICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLmNhY2hl
ZFZhbHVlKCkgPyBpbXBsLmNhY2hlZFZhbHVlKCktPmRlc2VyaWFsaXplKHN0YXRlLCBjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSwgMCkgOiBqc051bGwoKTsKKyAgICBjYXN0ZWRUaGlzLT5tX2Nh
Y2hlZFZhbHVlLnNldChzdGF0ZS0+dm0oKSwgY2FzdGVkVGhpcywgcmVzdWx0KTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2VDYWNoZWRWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CkBAIC0xNzUsMTUgKzE5NSwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1ZShFeGVjU3RhdGUqIHN0
YXRlLAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRo
cm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UiLCAiY2FjaGVkVmFsdWUiKTsKICAgICB9Ci0gICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFs
dWUgPSBjYXN0ZWRUaGlzLT5tX2NhY2hlZFZhbHVlLmdldCgpKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGNhY2hlZFZhbHVlKTsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1wbC5jYWNoZWRWYWx1ZSgpID8gaW1w
bC5jYWNoZWRWYWx1ZSgpLT5kZXNlcmlhbGl6ZShzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2Jq
ZWN0KCksIDApIDoganNOdWxsKCk7Ci0gICAgY2FzdGVkVGhpcy0+bV9jYWNoZWRWYWx1ZS5zZXQo
c3RhdGUtPnZtKCksIGNhc3RlZFRoaXMsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMp
KTsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBv
cnRzR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZSogY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNBcnJheShzdGF0ZSwgY2FzdGVkVGhpcy0+
Z2xvYmFsT2JqZWN0KCksIGltcGwucG9ydHMoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwog
RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUG9ydHMo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUs
IEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTk0
LDEyICsyMTYsMjAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlUG9ydHMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2QKICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3Rh
dGUsICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlIiwgInBvcnRzIik7CiAgICAg
fQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc0FycmF5KHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5w
b3J0cygpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQb3J0
c0dldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkUmVhZG9ubHlWYWx1ZUdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGNhc3RlZFRo
aXMpCit7CisgICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUgPSBjYXN0ZWRUaGlzLT5tX2NhY2hl
ZFJlYWRvbmx5VmFsdWUuZ2V0KCkpCisgICAgICAgIHJldHVybiBjYWNoZWRWYWx1ZTsKKyAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0g
aW1wbC5jYWNoZWRSZWFkb25seVZhbHVlKCkgPyBpbXBsLmNhY2hlZFJlYWRvbmx5VmFsdWUoKS0+
ZGVzZXJpYWxpemUoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCAwKSA6IGpzTnVs
bCgpOworICAgIGNhc3RlZFRoaXMtPm1fY2FjaGVkUmVhZG9ubHlWYWx1ZS5zZXQoc3RhdGUtPnZt
KCksIGNhc3RlZFRoaXMsIHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogRW5jb2Rl
ZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkUmVhZG9u
bHlWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CkBAIC0yMTAsMTIgKzI0MCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZUNhY2hlZFJlYWRvbmx5VmFsdWUoRXhlY1N0YXRlCiAgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJy
b3IoKnN0YXRlLCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSIsICJjYWNoZWRS
ZWFkb25seVZhbHVlIik7CiAgICAgfQotICAgIGlmIChKU1ZhbHVlIGNhY2hlZFZhbHVlID0gY2Fz
dGVkVGhpcy0+bV9jYWNoZWRSZWFkb25seVZhbHVlLmdldCgpKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGNhY2hlZFZhbHVlKTsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1wbC5jYWNoZWRSZWFkb25seVZhbHVl
KCkgPyBpbXBsLmNhY2hlZFJlYWRvbmx5VmFsdWUoKS0+ZGVzZXJpYWxpemUoc3RhdGUsIGNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpLCAwKSA6IGpzTnVsbCgpOwotICAgIGNhc3RlZFRoaXMtPm1f
Y2FjaGVkUmVhZG9ubHlWYWx1ZS5zZXQoc3RhdGUtPnZtKCksIGNhc3RlZFRoaXMsIHJlc3VsdCk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkUmVhZG9u
bHlWYWx1ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMu
Y3BwCmluZGV4IDNhMzllNDk2NGJhZjk4MjEyMzNjMDY4Nzk1MDdlZjYzMjAzMTYwOGIuLmJkMTU2
ZWMzMjcwODY5Mzk1N2RjMTE5YjY5MDVjMjZkNWEzNTU5MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNw
cApAQCAtMjE4LDYgKzIxOCwxMyBAQCBib29sIEpTVGVzdFR5cGVkZWZzOjpnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAorSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdHRy
R2V0dGVyKEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzKQoreworICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBs
LnVuc2lnbmVkTG9uZ0xvbmdBdHRyKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBz
bG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjI4LDEyICsyMzUsMTcg
QEAgRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0cihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWwKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0VHlw
ZWRlZnMiLCAidW5zaWduZWRMb25nTG9uZ0F0dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGlt
cGwudW5zaWduZWRMb25nTG9uZ0F0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0VHlwZWRlZnNVbnNpZ25l
ZExvbmdMb25nQXR0ckdldHRlcihjYXN0ZWRUaGlzKSk7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RU
eXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUdldHRlcihFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcykKK3sKKyAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1wbC5pbW11dGFibGVT
ZXJpYWxpemVkU2NyaXB0VmFsdWUoKSA/IGltcGwuaW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZh
bHVlKCktPmRlc2VyaWFsaXplKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgMCkg
OiBqc051bGwoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RC
YXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yNDQsMTIgKzI1NiwxNSBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZShFeGVjU3RhdGUqIHN0YXRlLCBFbgogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
ICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RUeXBlZGVm
cyIsICJpbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUiKTsKICAgICB9Ci0gICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwu
aW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlKCkgPyBpbXBsLmltbXV0YWJsZVNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZSgpLT5kZXNlcmlhbGl6ZShzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2Jq
ZWN0KCksIDApIDoganNOdWxsKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0VHlwZWRlZnNJbW11dGFibGVTZXJp
YWxpemVkU2NyaXB0VmFsdWVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKIH0KIAogCitKU1Zh
bHVlIGpzVGVzdFR5cGVkZWZzQ29uc3RydWN0b3JUZXN0U3ViT2JqR2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzKQoreworICAgIHJldHVybiBKU1Rlc3RT
dWJPYmo6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSk7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQ29uc3RydWN0b3JUZXN0
U3ViT2JqKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
QEAgLTI2MCwxMCArMjc1LDE5IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQ29uc3Ry
dWN0b3JUZXN0U3ViT2JqKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhCiAgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJy
b3IoKnN0YXRlLCAiVGVzdFR5cGVkZWZzIiwgIlRlc3RTdWJPYmoiKTsKICAgICB9Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RTdWJPYmo6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52
bSgpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvclRlc3RTdWJPYmpHZXR0ZXIoc3RhdGUsIGNh
c3RlZFRoaXMpKTsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJF
eGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRo
aXMpCit7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuYXR0
cldpdGhHZXR0ZXJFeGNlcHRpb24oZWMpKTsKKyAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVj
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVm
c0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI3NCwxNCArMjk4LDE3IEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4g
dGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdFR5cGVkZWZzIiwgImF0dHJXaXRoR2V0
dGVyRXhjZXB0aW9uIik7CiAgICAgfQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBq
c051bWJlcihpbXBsLmF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVjKSk7Ci0gICAgc2V0RE9NRXhj
ZXB0aW9uKHN0YXRlLCBlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0VHlwZWRlZnNBdHRyV2l0aEdldHRlckV4
Y2VwdGlvbkdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0
VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcihKU1Rlc3RUeXBlZGVmcyogY2Fz
dGVkVGhpcykKK3sKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5hdHRyV2l0aFNldHRlckV4Y2VwdGlvbigp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVm
c0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI5MiwxMiArMzE5LDE5IEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdFR5cGVkZWZzQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4g
dGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdFR5cGVkZWZzIiwgImF0dHJXaXRoU2V0
dGVyRXhjZXB0aW9uIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmF0dHJXaXRoU2V0dGVy
RXhjZXB0aW9uKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdFR5cGVkZWZzQXR0cldpdGhTZXR0ZXJFeGNlcHRp
b25HZXR0ZXIoY2FzdGVkVGhpcykpOwogfQogCiAKK0pTVmFsdWUganNUZXN0VHlwZWRlZnNTdHJp
bmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RU
eXBlZGVmcyogY2FzdGVkVGhpcykKK3sKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuc3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRp
b24oZWMpKTsKKyAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0
dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKQEAgLTMwOCwxNCArMzQyLDE3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZz
U3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jCiAgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJU
eXBlRXJyb3IoKnN0YXRlLCAiVGVzdFR5cGVkZWZzIiwgInN0cmluZ0F0dHJXaXRoR2V0dGVyRXhj
ZXB0aW9uIik7CiAgICAgfQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmlu
Z1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5zdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYykp
OwotICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdFR5cGVkZWZz
U3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25HZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsK
IH0KIAogCitKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRp
b25HZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMpCit7
CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnN0cmluZ0F0dHJXaXRoU2V0dGVy
RXhjZXB0aW9uKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90
QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMzI2LDkgKzM2Myw3IEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24o
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewog
ICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdFR5cGVkZWZz
IiwgInN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uIik7CiAgICAgfQotICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmlu
Z1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5zdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uR2V0dGVy
KHN0YXRlLCBjYXN0ZWRUaGlzKSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTYXR0cmlidXRlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5jcHAKaW5kZXggOTA5ZGZhNzFl
NDc3YzJkMzRiNzIzMzk4YzZlOGM1NGMxYzhjY2UzYy4uZTVlYjJmNmEyNDI0MzRhOGRjZWRiMzEw
NzZhN2ZjOWZkNzUxODkyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTYXR0cmlidXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNhdHRyaWJ1dGUuY3BwCkBAIC0xNDEsNiArMTQxLDEzIEBAIGJv
b2wgSlNhdHRyaWJ1dGU6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIHN0YXRlLCBQcm9wZXJ0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitKU1ZhbHVlIGpz
YXR0cmlidXRlUmVhZG9ubHlHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNhdHRyaWJ1dGUqIGNh
c3RlZFRoaXMpCit7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnJlYWRvbmx5
KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEVuY29kZWRKU1ZhbHVlIGpzYXR0cmlidXRl
UmVhZG9ubHkoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwpAQCAtMTUxLDkgKzE1OCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzYXR0cmlidXRlUmVhZG9ubHko
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQCiAgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJy
b3IoKnN0YXRlLCAiYXR0cmlidXRlIiwgInJlYWRvbmx5Iik7CiAgICAgfQotICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmlu
Z1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5yZWFkb25seSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc2F0dHJpYnV0ZVJl
YWRvbmx5R2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROb2RlLmlkbCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Tm9kZS5pZGwKaW5kZXggMWU0ODUyYTg1
ODkwYmYwY2Q0OWVhNGVlMzJkMDQ1NTRlMjhmMjA4OS4uZmNlNjgwYWFhMjY5ZDFhZTYwZGNlZWFm
NTlkYmI0ZmE1YmQwOWI1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Rlc3ROb2RlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVGVzdE5vZGUuaWRsCkBAIC0yNSw1ICsyNSw3IEBACiAgICAgYXR0cmlidXRlIERP
TVN0cmluZyBuYW1lOwogCiAgICAgaXRlcmFibGU8VGVzdE5vZGU+OworCisgICAgc2VyaWFsaXpl
cjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9UZXN0T2JqLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0
T2JqLmlkbAppbmRleCAzNDExODFhNTE2MWYwMDU1YjQyMGE5OWViNWI4ZjllYThjZDhhMTdkLi4y
YWI5Y2MxZjliNmEzYTBjNmEwMGFjMGZhZmQ2NTUxYTIzZjJjMzQyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCkBAIC0zNzQsNiArMzc0
LDggQEAgZW51bSBUZXN0Q29uZmlkZW5jZSB7ICJoaWdoIiwgImtpbmRhLWxvdyIgfTsKICNlbmRp
ZgogCiAgICAgdm9pZCBhdHRhY2hTaGFkb3dSb290KFRlc3REaWN0aW9uYXJ5IGluaXQpOworCisg
ICAgc2VyaWFsaXplciA9IHtyZWFkT25seVN0cmluZ0F0dHIsIGNyZWF0ZSwgZW51bUF0dHIsIGxv
bmdBdHRyfTsKIH07CiAKIC8vIFRoZSBmb2xsb3dpbmcgY29tbWVudCBzaG91bGQgbm90IGdlbmVy
YXRlIGFueSBjb2RlLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGE2NWE0MGZkMWNjNWZiYjdiOWMzOGI5YTM4MDY1YjZhNTUx
ZDc1NDAuLmUzMWQ5MjBlZjFjYmQzNjdlMzUzNjcyN2Q1MTVjNjg1OWFmYWNlNDEgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxOCBAQAorMjAxNi0wNS0yNCAgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdh
bGlhLmNvbT4KKworICAgICAgICBBZGQgV2ViSURMIHNwZWNpYWwgb3BlcmF0aW9uIHN1cHBvcnQ6
IHNlcmlhbGl6ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1NjI5MworCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAg
IFZlcmlmeSB0aGUgbmV3IEFQSSBvZiB0aGUgb2JqZWN0cyBhbmQgY2hlY2sgd2hhdCBoYXBwZW5z
IHdoZW4gdXNlcgorICAgICAgICBtb2RpZmllcyB0aGUgdmFsdWVzIGFuZCB0eXBlcyBvZiB0aGUg
YXR0cmlidXRlcywgb3IgYWRkcyBhIG51bGwgdmFsdWUuCisKKyAgICAgICAgKiBmYXN0L21lZGlh
c3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9tZWRp
YXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaHRtbDoKKyAgICAgICAgKiBmYXN0L21lZGlhc3RyZWFt
L1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9tZWRp
YXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24uaHRtbDoKKwogMjAxNi0wNS0yNCAgQ2FybG9z
IEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCBHVEsrIGdhcmRlbmluZy4gUmViYXNlbGluZSBzZXZlcmFsIHRlc3RzIGFmdGVyIHIyMDAxMTYu
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0
ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRp
ZGF0ZS1leHBlY3RlZC50eHQKaW5kZXggOThhMDA3MTFiYWMyOWJjYzdkZDcxZTI3NzczNTkyZTBi
ZDQxMDEyOC4uZTY1MTgzY2M4N2M4ZDVhNmUxNjU4NzJkZjc2YjNlM2JjMWEzZjRkZCAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUtZXhwZWN0
ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRl
LWV4cGVjdGVkLnR4dApAQCAtNyw2ICs3LDIxIEBAIFBBU1MgY2FuZGlkYXRlID0gbmV3IFJUQ0lj
ZUNhbmRpZGF0ZShpbml0aWFsaXplcik7IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgogUEFTUyBj
YW5kaWRhdGUuY2FuZGlkYXRlIGlzICJmb28iCiBQQVNTIGNhbmRpZGF0ZS5zZHBNaWQgaXMgImJh
ciIKIFBBU1MgY2FuZGlkYXRlLnNkcE1MaW5lSW5kZXggaXMgNgorUEFTUyBSVENJY2VDYW5kaWRh
dGUucHJvdG90eXBlLnRvSlNPTiBpcyBkZWZpbmVkLgorUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKFJUQ0ljZUNhbmRpZGF0ZS5wcm90b3R5cGUsICJ0b0pTT04iKS5lbnVtZXJh
YmxlIGlzIHRydWUKK1BBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihSVENJY2VD
YW5kaWRhdGUucHJvdG90eXBlLCAidG9KU09OIikud3JpdGFibGUgaXMgdHJ1ZQorUEFTUyBPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFJUQ0ljZUNhbmRpZGF0ZS5wcm90b3R5cGUsICJ0
b0pTT04iKS5jb25maWd1cmFibGUgaXMgdHJ1ZQorUEFTUyBSVENJY2VDYW5kaWRhdGUucHJvdG90
eXBlLnRvSlNPTi5sZW5ndGggaXMgMAorUEFTUyBSVENJY2VDYW5kaWRhdGUucHJvdG90eXBlLnRv
SlNPTi5uYW1lIGlzICJ0b0pTT04iCitQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoanNvbk1hcCwgImNhbmRpZGF0ZSIpLmVudW1lcmFibGUgaXMgdHJ1ZQorUEFTUyBPYmplY3Qu
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGpzb25NYXAsICJjYW5kaWRhdGUiKS53cml0YWJsZSBp
cyB0cnVlCitQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoanNvbk1hcCwgImNh
bmRpZGF0ZSIpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCitQQVNTIGNoaWxkQ2FuZGlkYXRlLnRvSlNP
TigpOyB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBDYW4gb25seSBjYWxsIFJUQ0ljZUNhbmRp
ZGF0ZS50b0pTT04gb24gaW5zdGFuY2VzIG9mIFJUQ0ljZUNhbmRpZGF0ZS4KK1BBU1MgSlNPTi5z
dHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNPTigpKSBpcyAie1wiY2FuZGlkYXRlXCI6XCJmb29cIixc
InNkcE1pZFwiOlwiYmFyXCIsXCJzZHBNTGluZUluZGV4XCI6Nn0iCitQQVNTIEpTT04uc3RyaW5n
aWZ5KGNhbmRpZGF0ZS50b0pTT04oKSkgaXMgIntcImNhbmRpZGF0ZVwiOlwiZm9vXCIsXCJzZHBN
aWRcIjpcImJhclwiLFwic2RwTUxpbmVJbmRleFwiOjZ9IgorUEFTUyBKU09OLnN0cmluZ2lmeShj
YW5kaWRhdGUudG9KU09OKCkpIGlzICJ7XCJjYW5kaWRhdGVcIjpcImZvb1wiLFwic2RwTWlkXCI6
XCJiYXJcIixcInNkcE1MaW5lSW5kZXhcIjowfSIKK1BBU1MgSlNPTi5zdHJpbmdpZnkoY2FuZGlk
YXRlLnRvSlNPTigpKSBpcyAie1wiY2FuZGlkYXRlXCI6XCJmb29cIixcInNkcE1pZFwiOlwiN1wi
LFwic2RwTUxpbmVJbmRleFwiOjB9IgorUEFTUyBKU09OLnN0cmluZ2lmeShjYW5kaWRhdGUudG9K
U09OKCkpIGlzICJ7XCJjYW5kaWRhdGVcIjpcImZvb1wiLFwic2RwTWlkXCI6bnVsbCxcInNkcE1M
aW5lSW5kZXhcIjowfSIKIAogRGljdGlvbmFyeSBtZW1iZXIgJ2NhbmRpZGF0ZScgaXMgcmVxdWly
ZWQuCiBQQVNTIG5ldyBSVENJY2VDYW5kaWRhdGUoe30pOyB0aHJldyBleGNlcHRpb24gVHlwZUVy
cm9yOiBUeXBlIGVycm9yLgpAQCAtMzEsNyArNDYsNyBAQCBQQVNTIG5ldyBSVENJY2VDYW5kaWRh
dGUoe2NhbmRpZGF0ZToiZm9vIiwgc2RwTUxpbmVJbmRleDotMX0pOyB0aHJldyBleGNlcHRpb24g
VAogUEFTUyBuZXcgUlRDSWNlQ2FuZGlkYXRlKHtjYW5kaWRhdGU6ImZvbyIsIHNkcE1MaW5lSW5k
ZXg6NjU1MzZ9KTsgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogVHlwZSBlcnJvci4KIFBBU1Mg
bmV3IFJUQ0ljZUNhbmRpZGF0ZSg1KTsgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogVHlwZSBl
cnJvci4KIFBBU1MgbmV3IFJUQ0ljZUNhbmRpZGF0ZSgiZm9vYmFyIik7IHRocmV3IGV4Y2VwdGlv
biBUeXBlRXJyb3I6IFR5cGUgZXJyb3IuCi1QQVNTIG5ldyBSVENJY2VDYW5kaWRhdGUoY2FuZGlk
YXRlOiIiKTsgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBVbmV4cGVjdGVkIHRva2VuICc6
Jy4gRXhwZWN0ZWQgJyknIHRvIGVuZCBhIGFyZ3VtZW50IGxpc3QuLgorUEFTUyBuZXcgUlRDSWNl
Q2FuZGlkYXRlKGNhbmRpZGF0ZToiIik7IHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogVW5l
eHBlY3RlZCB0b2tlbiAnOicuIEV4cGVjdGVkICcpJyB0byBlbmQgYW4gYXJndW1lbnQgbGlzdC4u
CiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmh0bWwg
Yi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5odG1sCmluZGV4
IDRjOWUzODU1NmM5MDQ4ZDhlNjRkYjRlYWE1MWM4YWU3ZjY4MDhkYWMuLjBhMDlkN2NiMzhlMjBh
ZDRlMTNiZjA1NzI4ZGRlZWNlY2IwYTJjZjYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3Qv
bWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9t
ZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaHRtbApAQCAtMTMsNiArMTMsMzMgQEAKICAgICAg
ICAgICAgIHNob3VsZEJlKCdjYW5kaWRhdGUuY2FuZGlkYXRlJywgJyJmb28iJyk7CiAgICAgICAg
ICAgICBzaG91bGRCZSgnY2FuZGlkYXRlLnNkcE1pZCcsICciYmFyIicpOwogICAgICAgICAgICAg
c2hvdWxkQmUoJ2NhbmRpZGF0ZS5zZHBNTGluZUluZGV4JywgJzYnKTsKKyAgICAgICAgICAgIHNo
b3VsZEJlRGVmaW5lZCgnUlRDSWNlQ2FuZGlkYXRlLnByb3RvdHlwZS50b0pTT04nKTsKKyAgICAg
ICAgICAgIHNob3VsZEJlVHJ1ZSgnT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihSVENJ
Y2VDYW5kaWRhdGUucHJvdG90eXBlLCAidG9KU09OIikuZW51bWVyYWJsZScpOworICAgICAgICAg
ICAgc2hvdWxkQmVUcnVlKCdPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFJUQ0ljZUNh
bmRpZGF0ZS5wcm90b3R5cGUsICJ0b0pTT04iKS53cml0YWJsZScpOworICAgICAgICAgICAgc2hv
dWxkQmVUcnVlKCdPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFJUQ0ljZUNhbmRpZGF0
ZS5wcm90b3R5cGUsICJ0b0pTT04iKS5jb25maWd1cmFibGUnKTsKKyAgICAgICAgICAgIHNob3Vs
ZEJlKCdSVENJY2VDYW5kaWRhdGUucHJvdG90eXBlLnRvSlNPTi5sZW5ndGgnLCAnMCcpOworICAg
ICAgICAgICAgc2hvdWxkQmUoJ1JUQ0ljZUNhbmRpZGF0ZS5wcm90b3R5cGUudG9KU09OLm5hbWUn
LCAnInRvSlNPTiInKTsKKworICAgICAgICAgICAgdmFyIGpzb25NYXAgPSBjYW5kaWRhdGUudG9K
U09OKCk7CisgICAgICAgICAgICBzaG91bGRCZVRydWUoJ09iamVjdC5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoanNvbk1hcCwgImNhbmRpZGF0ZSIpLmVudW1lcmFibGUnKTsKKyAgICAgICAgICAg
IHNob3VsZEJlVHJ1ZSgnT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihqc29uTWFwLCAi
Y2FuZGlkYXRlIikud3JpdGFibGUnKTsKKyAgICAgICAgICAgIHNob3VsZEJlVHJ1ZSgnT2JqZWN0
LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihqc29uTWFwLCAiY2FuZGlkYXRlIikuY29uZmlndXJh
YmxlJyk7CisKKyAgICAgICAgICAgIHZhciBjaGlsZFJUQ0ljZUNhbmRpZGF0ZSA9IGZ1bmN0aW9u
KCkge307CisgICAgICAgICAgICBjaGlsZFJUQ0ljZUNhbmRpZGF0ZS5wcm90b3R5cGUgPSBPYmpl
Y3QuY3JlYXRlKFJUQ0ljZUNhbmRpZGF0ZS5wcm90b3R5cGUpOworICAgICAgICAgICAgdmFyIGNo
aWxkQ2FuZGlkYXRlID0gbmV3IGNoaWxkUlRDSWNlQ2FuZGlkYXRlKCk7CisgICAgICAgICAgICBz
aG91bGRUaHJvdygnY2hpbGRDYW5kaWRhdGUudG9KU09OKCk7Jyk7CisKKyAgICAgICAgICAgIHNo
b3VsZEJlRXF1YWxUb1N0cmluZygnSlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNPTigpKScs
ICd7ImNhbmRpZGF0ZSI6ImZvbyIsInNkcE1pZCI6ImJhciIsInNkcE1MaW5lSW5kZXgiOjZ9Jyk7
CisgICAgICAgICAgICBjYW5kaWRhdGUubmV3QXR0cmlidXRlID0gIm5ldyB2YWx1ZSI7CisgICAg
ICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ0pTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50
b0pTT04oKSknLCAneyJjYW5kaWRhdGUiOiJmb28iLCJzZHBNaWQiOiJiYXIiLCJzZHBNTGluZUlu
ZGV4Ijo2fScpOworICAgICAgICAgICAgY2FuZGlkYXRlLnNkcE1MaW5lSW5kZXggPSAibm90IGEg
bnVtYmVyIjsKKyAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnSlNPTi5zdHJpbmdp
ZnkoY2FuZGlkYXRlLnRvSlNPTigpKScsICd7ImNhbmRpZGF0ZSI6ImZvbyIsInNkcE1pZCI6ImJh
ciIsInNkcE1MaW5lSW5kZXgiOjB9Jyk7CisgICAgICAgICAgICBjYW5kaWRhdGUuc2RwTWlkID0g
NzsKKyAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnSlNPTi5zdHJpbmdpZnkoY2Fu
ZGlkYXRlLnRvSlNPTigpKScsICd7ImNhbmRpZGF0ZSI6ImZvbyIsInNkcE1pZCI6IjciLCJzZHBN
TGluZUluZGV4IjowfScpOworICAgICAgICAgICAgY2FuZGlkYXRlLnNkcE1pZCA9IG51bGw7Cisg
ICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ0pTT04uc3RyaW5naWZ5KGNhbmRpZGF0
ZS50b0pTT04oKSknLCAneyJjYW5kaWRhdGUiOiJmb28iLCJzZHBNaWQiOm51bGwsInNkcE1MaW5l
SW5kZXgiOjB9Jyk7CisKICAgICAgICAgICAgIGRlYnVnKCIiKTsKIAogICAgICAgICAgICAgZGVi
dWcoIkRpY3Rpb25hcnkgbWVtYmVyICdjYW5kaWRhdGUnIGlzIHJlcXVpcmVkLiIpOwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24t
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVz
Y3JpcHRpb24tZXhwZWN0ZWQudHh0CmluZGV4IDY1ODIxOGZmZTEyZTU2MDA0ODhkNzk1MjJjNGEz
NGE5ZGY4ZGU2ZjguLjM0MDljMmRlZWEwMjlhYTQwY2M1YjA3NmI4NTFmNTdkNjFjMmFlMTEgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0
aW9uLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1Nl
c3Npb25EZXNjcmlwdGlvbi1leHBlY3RlZC50eHQKQEAgLTcsNiArNyw3IEBAIFBBU1Mgc2Vzc2lv
bkRlc2NyaXB0aW9uID0gbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbigpOyBkaWQgbm90IHRocm93
IGV4Y2VwdGlvbi4KIFBBU1Mgc2Vzc2lvbkRlc2NyaXB0aW9uID0gbmV3IFJUQ1Nlc3Npb25EZXNj
cmlwdGlvbihpbml0aWFsaXplcik7IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgogUEFTUyBzZXNz
aW9uRGVzY3JpcHRpb24udHlwZSBpcyAib2ZmZXIiCiBQQVNTIHNlc3Npb25EZXNjcmlwdGlvbi5z
ZHAgaXMgImZvb2JhciIKK1BBU1MgSlNPTi5zdHJpbmdpZnkoc2Vzc2lvbkRlc2NyaXB0aW9uLnRv
SlNPTigpKSBpcyAie1widHlwZVwiOlwib2ZmZXJcIixcInNkcFwiOlwiZm9vYmFyXCJ9IgogUEFT
UyBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKG51bGwpOyB0aHJldyBleGNlcHRpb24gVHlwZUVy
cm9yOiBPcHRpb25hbCBSVENTZXNzaW9uRGVzY3JpcHRpb24gY29uc3RydWN0b3IgYXJndW1lbnQg
bXVzdCBiZSBhIHZhbGlkIERpY3Rpb25hcnkuCiBQQVNTIG5ldyBSVENTZXNzaW9uRGVzY3JpcHRp
b24oNSk7IHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE9wdGlvbmFsIFJUQ1Nlc3Npb25EZXNj
cmlwdGlvbiBjb25zdHJ1Y3RvciBhcmd1bWVudCBtdXN0IGJlIGEgdmFsaWQgRGljdGlvbmFyeS4K
IFBBU1MgbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbignZm9vYmFyJyk7IHRocmV3IGV4Y2VwdGlv
biBUeXBlRXJyb3I6IE9wdGlvbmFsIFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiBjb25zdHJ1Y3RvciBh
cmd1bWVudCBtdXN0IGJlIGEgdmFsaWQgRGljdGlvbmFyeS4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmh0bWwgYi9MYXlvdXRU
ZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5odG1sCmluZGV4IDNh
NjZkMmUyNmIxMTkxMDVhYzFlZDMwZGQ1YWY1NzUyOTk3ZGYzNDIuLjFkOWI1Y2QzMzdlZDVkZTlh
OTY1OGQ2NDZiOGM0MmJkY2FkYWU2MjMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvbWVk
aWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24uaHRtbApAQCAtMTUsNiArMTUsNyBA
QAogICAgICAgICAgICAgc2hvdWxkTm90VGhyb3coInNlc3Npb25EZXNjcmlwdGlvbiA9IG5ldyBS
VENTZXNzaW9uRGVzY3JpcHRpb24oaW5pdGlhbGl6ZXIpOyIpOwogICAgICAgICAgICAgc2hvdWxk
QmUoJ3Nlc3Npb25EZXNjcmlwdGlvbi50eXBlJywgJyJvZmZlciInKTsKICAgICAgICAgICAgIHNo
b3VsZEJlKCdzZXNzaW9uRGVzY3JpcHRpb24uc2RwJywgJyJmb29iYXIiJyk7CisgICAgICAgICAg
ICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ0pTT04uc3RyaW5naWZ5KHNlc3Npb25EZXNjcmlwdGlv
bi50b0pTT04oKSknLCAneyJ0eXBlIjoib2ZmZXIiLCJzZHAiOiJmb29iYXIifScpOwogCiAgICAg
ICAgICAgICBzaG91bGRUaHJvdygibmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihudWxsKTsiKTsK
ICAgICAgICAgICAgIHNob3VsZFRocm93KCJuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKDUpOyIp
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279753</attachid>
            <date>2016-05-25 03:38:37 -0700</date>
            <delta_ts>2016-05-25 06:00:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156293-20160525123943.patch</filename>
            <type>text/plain</type>
            <size>168138</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxMzcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODI5Nzg1ZTM1MDUzOGUx
ZjZjNWRkOWY3ZjQxZjdkNTMzNjYwYWY2OS4uOWFmZmE4MjBlOTEyODBjNDE5OGYyMmJlYzNhYzUy
OTU1ZjBiMjFlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgxIEBACisyMDE2LTA1LTI0ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIEFkZCBXZWJJREwg
c3BlY2lhbCBvcGVyYXRpb24gc3VwcG9ydDogc2VyaWFsaXplcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MjkzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgdGhlIHNlcmlhbGl6
ZXIgc3BlY2lhbCBvcGVyYXRpb24gZm9yIFdlYklETHMsCisgICAgICAgIGN1cnJlbnQgaW1wbGVt
ZW50YXRpb24gYWRkcyBzdXBwb3J0IGZvcjoKKyAgICAgICAgICAtIGp1c3QgdGhlIGtleXdvcmQ6
IHNlcmlhbGl6ZXI7IEl0IHdpbGwgcmV0dXJuIGFsbCB0aGUKKyAgICAgICAgICAgIGF0dHJpYnV0
ZXMgb2YgaW4gYW4gb2JqZWN0LgorICAgICAgICAgIC0gbWFwIG9mIGVudHJpZXMgd2l0aCB0aGUg
YXR0cmlidXRlczogc2VyaWFsaXplciA9IHthdHRyaWJ1dGUxLAorICAgICAgICAgICAgYXR0cmli
dXRlMiwgLi4ufQorCisgICAgICAgIEl0IGNyZWF0ZXMgYSB0b0pTT04gbWV0aG9kIHRoYXQgcmV0
dXJucyB0aGUgc2VyaWFsaXplZCB2YWx1ZQorICAgICAgICBjb252ZXJ0ZWQgaW50byBhbiBFQ01B
U2NyaXB0IHZhbHVlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBjaGVjayB0aGUKKyAgICAgICAgZGVm
aW5pdGlvbiBvZiB0aGUgb3BlcmF0aW9uOgorCisgICAgICAgIGh0dHA6Ly9oZXljYW0uZ2l0aHVi
LmlvL3dlYmlkbC8jaWRsLXNlcmlhbGl6ZXJzCisKKyAgICAgICAgV2UgaGF2ZSBtb2RpZmllZCBj
dXJyZW50IGNvZGUgdGhhdCBnZW5lcmF0ZXMgdGhlIGdldHRlciBmdW5jdGlvbgorICAgICAgICBm
b3IgYXR0cmlidXRlcyBpbiB0d28gcGFydHMgc28gdGhhdCB3ZSBjYW4gcmV1c2UgdGhlIHBhcnQK
KyAgICAgICAgZXh0cmFjdGluZyB0aGUgdmFsdWUgZm9yIHRoZSBzZXJpYWxpemVyLgorCisgICAg
ICAgIFVzZWQgdGhlIHN1cHBvcnQgdG8gYWRkIG5ldyBBUEkgZm9yIFJUQ0ljZUNhbmRpZGF0ZSBh
bmQKKyAgICAgICAgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLgorCisgICAgICAgIFVwZGF0ZWQgdGhl
IHRlc3RzIGV4cGVjdGF0aW9ucyBvZiB0aGUgYmluZGluZ3MuCisKKyAgICAgICAgVGVzdHM6IGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Tm9kZS5pZGwKKyAgICAgICAgICAgICAgIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAorICAgICAgICAgICAgICAgZmFzdC9tZWRpYXN0cmVh
bS9SVENJY2VDYW5kaWRhdGUuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9tZWRpYXN0cmVhbS9S
VENTZXNzaW9uRGVzY3JpcHRpb24uaHRtbAorCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVh
bS9SVENJY2VDYW5kaWRhdGUuaWRsOiBBZGRlZCB0aGUgc2VyaWFsaXplcgorICAgICAgICBvcGVy
YXRpb24uCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRp
b24uaWRsOiBBZGRlZCB0aGUKKyAgICAgICAgc2VyaWFsaXplciBvcGVyYXRpb24uCisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChnZXRHZXR0
ZXJGdW5jdGlvbkNhbGwpOiBBZGRlZCwgaXQgZ2VuZXJhdGVzIHRoZSBHZXR0ZXIgZnVuY3Rpb24K
KyAgICAgICAgY2FsbCBzdHJpbmcgYmFzZWQgb24gd2hhdCBwYXJhbWV0ZXJzIGl0IG5lZWRzLiBV
c2VkIGluIHRoZQorICAgICAgICBzZXJpYWxpemVyIGNvZGUgZ2VuZXJhdG9yLgorICAgICAgICAo
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6IFNwbGl0dGVkIHRoZSBjb2RlIG9mIHRoZSBhdHRyaWJ1
dGUKKyAgICAgICAgZ2V0dGVyIGluIHR3byBmdW5jdGlvbnMsIG9uZSBnZXR0aW5nIHRoZSB2YWx1
ZSBhbmQgdGhlIG90aGVyCisgICAgICAgIGhhbmRsaW5nIHRoZSBjYWxsIGZyb20gdGhlIEFQSS4g
VGhpcyB3YXkgd2UgY2FuIHJldXNlIHRoZSBjb2RlIGZvcgorICAgICAgICB0aGUgc2VyaWFsaXpl
ci4gQWxzbyBBZGRlZCB0aGUgY2FsbHMgdG8gdGhlIHNlcmlhbGl6ZXIKKyAgICAgICAgY29kZSBn
ZW5lcmF0b3IuCisgICAgICAgIChHZW5lcmF0ZVNlcmlhbGl6ZXJGdW5jdGlvbik6IEFkZGVkLCBn
ZW5lcmF0ZXMgdGhlIHRvSlNPTiBmdW5jdGlvbgorICAgICAgICBhZGRpbmcgYWxsIHRoZSBzZXJp
YWxpemFibGUtPmF0dHJpYnV0ZXMgdmFsdWUgdG8gYW4gb2JqZWN0IGFzCisgICAgICAgIGRlZmlu
ZWQgaW4gdGhlIHNwZWMuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG06
IE1vZGlmaWVkIHRoZSBzZXJpYWxpemVyIHBhcnNlcgorICAgICAgICB0aGF0IHdhcyB1bnVzZWQg
dG8gc3VwcG9ydCB0aGUgV2ViSURMIHNwZWMgcGFydHMuIEFkZGVkIGEgbmV3CisgICAgICAgIGRv
bVNlcmlhbGl6YWJsZSB0eXBlIHRvIHN0b3JlIHRoZSBsaXN0IG9mIGF0dHJpYnV0ZXMgaW4gdGhl
CisgICAgICAgIHBvc3NpYmxlIG1hcC4KKyAgICAgICAgKHBhcnNlU2VyaWFsaXplcik6IE1vZGlm
aWVkIHRoZSBmdW5jdGlvbiB0byBmb2xsb3cgdGhlCisgICAgICAgIHNlbWljb2xvbiBydWxlIGlu
IHRoZSBzcGVjLCBub3cgdGhlIHNlcmlhbGl6ZXIgbGluZSBtdXN0IGhhdmUgYQorICAgICAgICBz
ZW1pY29sb24gbGlrZSBhbnkgb3RoZXIgbGluZS4KKyAgICAgICAgKHBhcnNlU2VyaWFsaXplclJl
c3QpOiBUaGUgZnVuY3Rpb24gbm93IGhhcyB0byBnZXQgdGhlIGF0dHJpYnV0ZXMKKyAgICAgICAg
bGlzdCBmcm9tIHRoZSBwYXR0ZXJuIHBhcnNpbmcgZnVuY3Rpb24gYW5kIGFkZCB0aGVtIHRvIHRo
ZQorICAgICAgICBkb21TZXJpYWxpemFibGUgaXRlbS4KKyAgICAgICAgKHBhcnNlU2VyaWFsaXph
dGlvblBhdHRlcm4pOiBOb3cgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBsaXN0IG9mCisgICAg
ICAgIGF0dHJpYnV0ZXMgaW4gdGhlIHNlcmlhbGl6YWJsZSBtYXAgb3IgbGlzdCBpZiB3ZSBoYXZl
IG9uZS4KKyAgICAgICAgKHBhcnNlU2VyaWFsaXphdGlvbkF0dHJpYnV0ZXMpOiBBZGRlZCwgdGhp
cyBmdW5jdGlvbiByZXBsYWNlcyB0aGUKKyAgICAgICAgTWFwIGFuZCBMaXN0IGZ1bmN0aW9ucywg
dGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQgcGFydHMgYXJlIHNpbWlsYXIKKyAgICAgICAgZm9yIGJv
dGggc2l0dWF0aW9ucy4KKyAgICAgICAgKGFwcGx5TWVtYmVyTGlzdCk6IEFkZGVkIHRoZSBzZXJp
YWxpemFibGUgaXRlbSB0byB0aGUgaW50ZXJmYWNlCisgICAgICAgIHZhcmlhYmxlIGFuZCBwb3B1
bGF0ZSB0aGUgc2VyaWFsaXphYmxlIGluIGNhc2UgdGhlcmUgaXMgbm90IGEKKyAgICAgICAgZGVm
aW5lZCBtYXAuCisgICAgICAgIChwYXJzZVNlcmlhbGl6YXRpb25QYXR0ZXJuTWFwKTogUmVwbGFj
ZWQgd2l0aAorICAgICAgICBwYXJzZVNlcmlhbGl6YXRpb25BdHRyaWJ1dGVzLgorICAgICAgICAo
cGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybkxpc3QpOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHA6IE1vZGlmaWVkIHRoZSBleHBlY3RlZCBy
ZXN1bHQuCisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pT
T04pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOiBN
b2RpZmllZCB0aGUgZXhwZWN0ZWQgcmVzdWx0LgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25Ub0pTT04pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9UZXN0Tm9kZS5pZGw6IEFkZGVkIHRoZSBzZXJpYWxpemVyIHRlc3QuCisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsOiBBZGRlZCBzZXJpYWxpemVyIG1hcCB0ZXN0
LgorCiAyMDE2LTA1LTI0ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+
CiAKICAgICAgICAgW0ZvbnQgTG9hZGluZ10gQ3Jhc2ggZHVyaW5nIGZvbnQgZG93bmxvYWQgZmFp
bHVyZSBhZnRlciBnYXJiYWdlIGNvbGxlY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmlkbCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmlkbAppbmRleCA5MWJhODQxNTNj
ZjBmMzRhZDFmZDI4YzE2MjcyMTJlZjk0ZTBhM2ZhLi4zZWVhYjliZjVjMzViYTcxNDlmMDU2NGJm
M2E3MjVhN2I4NmJjZjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaWRsCkBAIC0zNyw1ICszNyw3IEBACiAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBjYW5kaWRhdGU7CiAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIERPTVN0cmluZz8gc2RwTWlkOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBz
aG9ydD8gc2RwTUxpbmVJbmRleDsKKworICAgIHNlcmlhbGl6ZXIgPSB7Y2FuZGlkYXRlLCBzZHBN
aWQsIHNkcE1MaW5lSW5kZXh9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24uaWRsIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24uaWRsCmluZGV4IDIz
NDU1ZjcwNDA3MjhlMWJhY2VhZmUyMWE4Y2FlOGI4YTUxNDA1ZWYuLjFkNjQzNTAyZTNmYWIyM2I2
ZGMzYjc1MGNlMmI1MWQyNTI0MjAzNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmlkbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5pZGwKQEAgLTM2
LDUgKzM2LDcgQEAKIF0gaW50ZXJmYWNlIFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiB7CiAgICAgW1Nl
dHRlclJhaXNlc0V4Y2VwdGlvbl0gYXR0cmlidXRlIERPTVN0cmluZyB0eXBlOwogICAgIGF0dHJp
YnV0ZSBET01TdHJpbmcgc2RwOworCisgICAgc2VyaWFsaXplciA9IHt0eXBlLCBzZHB9OwogfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQppbmRleCAxNTQ4YTMyZTNjMDMyZDgwYmU3YjE4NTIwZWEzODQxZWRiYTE0N2Q3Li43MTU1
MzIyOTA5MzNlYWE5NjY5OGEzMzJmNWE5YTc0ZmI1MTU2ODhkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQpAQCAtMTk5OCw2ICsx
OTk4LDggQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBteSAkdmlzaWJsZUludGVy
ZmFjZU5hbWUgPSAkY29kZUdlbmVyYXRvci0+R2V0VmlzaWJsZUludGVyZmFjZU5hbWUoJGludGVy
ZmFjZSk7CiAgICAgbXkgJGV2ZW50VGFyZ2V0ID0gJGNvZGVHZW5lcmF0b3ItPkluaGVyaXRzSW50
ZXJmYWNlKCRpbnRlcmZhY2UsICJFdmVudFRhcmdldCIpICYmICRpbnRlcmZhY2UtPm5hbWUgbmUg
IkV2ZW50VGFyZ2V0IjsKICAgICBteSAkbmVlZHNWaXNpdENoaWxkcmVuID0gSW5zdGFuY2VOZWVk
c1Zpc2l0Q2hpbGRyZW4oJGludGVyZmFjZSk7CisgICAgbXkgJHNlcmlhbGl6ZXJGdW5jdGlvbk5h
bWUgPSAidG9KU09OIjsKKyAgICBteSAkc2VyaWFsaXplck5hdGl2ZUZ1bmN0aW9uTmFtZSA9ICRj
b2RlR2VuZXJhdG9yLT5XS19sY2ZpcnN0KCRjbGFzc05hbWUpIC4gIlByb3RvdHlwZUZ1bmN0aW9u
IiAuICRjb2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRzZXJpYWxpemVyRnVuY3Rpb25OYW1lKTsK
IAogICAgIG15ICRuYW1lZEdldHRlckZ1bmN0aW9uID0gR2V0TmFtZWRHZXR0ZXJGdW5jdGlvbigk
aW50ZXJmYWNlKTsKICAgICBteSAkaW5kZXhlZEdldHRlckZ1bmN0aW9uID0gR2V0SW5kZXhlZEdl
dHRlckZ1bmN0aW9uKCRpbnRlcmZhY2UpOwpAQCAtMjA4Nyw2ICsyMDg5LDEwIEBAIHN1YiBHZW5l
cmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKICAg
ICB9CiAKKyAgICBpZiAoJGludGVyZmFjZS0+c2VyaWFsaXphYmxlKSB7CisgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke3NlcmlhbGl6ZXJO
YXRpdmVGdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSopO1xuXG4iKTsKKyAgICB9CisKICAgICBHZW5l
cmF0ZVByb3RvdHlwZURlY2xhcmF0aW9uKFxAaW1wbENvbnRlbnQsICRjbGFzc05hbWUsICRpbnRl
cmZhY2UpIGlmICFIZWFkZXJOZWVkc1Byb3RvdHlwZURlY2xhcmF0aW9uKCRpbnRlcmZhY2UpOwog
CiAgICAgR2VuZXJhdGVDb25zdHJ1Y3RvckRlY2xhcmF0aW9uKFxAaW1wbENvbnRlbnQsICRjbGFz
c05hbWUsICRpbnRlcmZhY2UpIGlmIE5lZWRzQ29uc3RydWN0b3JQcm9wZXJ0eSgkaW50ZXJmYWNl
KTsKQEAgLTIyNDUsNiArMjI1MSwxNSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogCiAg
ICAgbXkgJGp1c3RHZW5lcmF0ZVZhbHVlQXJyYXkgPSAhSXNET01HbG9iYWxPYmplY3QoJGludGVy
ZmFjZSk7CiAKKyAgICBpZiAoJGludGVyZmFjZS0+c2VyaWFsaXphYmxlKSB7CisgICAgICAgIHB1
c2goQGhhc2hLZXlzLCAkc2VyaWFsaXplckZ1bmN0aW9uTmFtZSk7CisgICAgICAgIHB1c2goQGhh
c2hWYWx1ZTEsICRzZXJpYWxpemVyTmF0aXZlRnVuY3Rpb25OYW1lKTsKKyAgICAgICAgcHVzaChA
aGFzaFZhbHVlMiwgMCk7CisgICAgICAgIHB1c2goQGhhc2hTcGVjaWFscywgIkpTQzo6RnVuY3Rp
b24iKTsKKworICAgICAgICAkaGFzaFNpemUrKzsKKyAgICB9CisKICAgICAkb2JqZWN0LT5HZW5l
cmF0ZUhhc2hUYWJsZSgkaGFzaE5hbWUsICRoYXNoU2l6ZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcQGhhc2hLZXlzLCBcQGhhc2hTcGVjaWFscywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcQGhhc2hWYWx1ZTEsIFxAaGFzaFZhbHVlMiwKQEAgLTI1MzgsNiArMjU1
Myw4IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICBteSAkYXR0cmli
dXRlQ29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVDb25kaXRpb25h
bFN0cmluZygkYXR0cmlidXRlLT5zaWduYXR1cmUpOwogICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIjaWYgJHthdHRyaWJ1dGVDb25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRhdHRyaWJ1
dGVDb25kaXRpb25hbFN0cmluZzsKIAorICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJK
U1ZhbHVlICR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCAke2NsYXNz
TmFtZX0qIGNhc3RlZFRoaXMpO1xuXG4iKTsKKwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJFbmNvZGVkSlNWYWx1ZSAke2dldEZ1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFz
ZSlcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKIApAQCAtMjU0
NSwxNSArMjU2MiwxNiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7XG4iKTsKICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7
XG4iKTsKIAorICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSBkZWNv
ZGVkVGhpc1ZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSk7XG4iKTsKKyAgICAgICAg
ICAgIG15ICRjYXN0aW5nRnVuY3Rpb24gPSAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiQ3VzdG9tUHJveHlUb0pTT2JqZWN0In0gPyAidG8ke2NsYXNzTmFtZX0iIDogR2V0Q2FzdGlu
Z0hlbHBlckZvclRoaXNPYmplY3QoJGludGVyZmFjZSk7CisgICAgICAgICAgICBpZiAoJGludGVy
ZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxpY2l0VGhpcyJ9KSB7CisgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byogY2FzdGVkVGhpcyA9IGRlY29kZWRU
aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSA/ICRjYXN0aW5nRnVuY3Rpb24oc3RhdGUtPnRo
aXNWYWx1ZSgpLnRvVGhpcyhzdGF0ZSwgTm90U3RyaWN0TW9kZSkpIDogJGNhc3RpbmdGdW5jdGlv
bihkZWNvZGVkVGhpc1ZhbHVlKTtcbiIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiBjYXN0ZWRUaGlzID0gJGNhc3Rp
bmdGdW5jdGlvbihkZWNvZGVkVGhpc1ZhbHVlKTtcbiIpOworICAgICAgICAgICAgfQorCiAgICAg
ICAgICAgICBpZiAoISRhdHRyaWJ1dGUtPmlzU3RhdGljIHx8ICRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZS0+dHlwZSA9fiAvQ29uc3RydWN0b3IkLykgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIEpTVmFsdWUgZGVjb2RlZFRoaXNWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpO1xuIik7Ci0gICAgICAgICAgICAgICAgbXkgJGNhc3RpbmdGdW5jdGlvbiA9ICRp
bnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Qcm94eVRvSlNPYmplY3QifSA/
ICJ0byR7Y2xhc3NOYW1lfSIgOiBHZXRDYXN0aW5nSGVscGVyRm9yVGhpc09iamVjdCgkaW50ZXJm
YWNlKTsKICAgICAgICAgICAgICAgICAjIGh0dHA6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8j
SW1wbGljaXRUaGlzCi0gICAgICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJJbXBsaWNpdFRoaXMifSkgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBhdXRvKiBjYXN0ZWRUaGlzID0gZGVjb2RlZFRoaXNWYWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpID8gJGNhc3RpbmdGdW5jdGlvbihzdGF0ZS0+dGhpc1ZhbHVlKCkudG9U
aGlzKHN0YXRlLCBOb3RTdHJpY3RNb2RlKSkgOiAkY2FzdGluZ0Z1bmN0aW9uKGRlY29kZWRUaGlz
VmFsdWUpO1xuIik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byogY2FzdGVkVGhpcyA9ICRjYXN0aW5nRnVu
Y3Rpb24oZGVjb2RlZFRoaXNWYWx1ZSk7XG4iKTsKLSAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkge1xuIik7CiAgICAgICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkxlbmllbnRUaGlzIn0pIHsKICAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7XG4iKTsKQEAgLTI1NzMsNiArMjU5MSwxNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1l
bnRhdGlvbgogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwog
ICAgICAgICAgICAgfQogCisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKCR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihzdGF0ZSwgY2FzdGVk
VGhpcykpO1xuIik7CisKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsK
KworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU1ZhbHVlICR7Z2V0RnVuY3Rpb25O
YW1lfUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCAke2NsYXNzTmFtZX0qIGNhc3RlZFRoaXMpXG4i
KTsKKworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKKworICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTtcbiIpOworICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMp
O1xuIik7CisKICAgICAgICAgICAgIG15IEBhcmd1bWVudHMgPSAoKTsKICAgICAgICAgICAgIGlm
ICgkZ2V0dGVyRXhjZXB0aW9ucyAmJiAhSGFzQ3VzdG9tR2V0dGVyKCRhdHRyaWJ1dGUtPnNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKSkgewogICAgICAgICAgICAgICAgIHB1c2goQGFyZ3Vt
ZW50cywgImVjIik7CkBAIC0yNTkwLDEwICsyNjE5LDEwIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVu
dGF0aW9uCiAgICAgICAgICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJTZXR0aW5ncy5o
Iik7CiAgICAgICAgICAgICAgICAgICAgIG15ICRlbmFibGVfZnVuY3Rpb24gPSBUb01ldGhvZE5h
bWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRW5hYmxlZEJ5
U2V0dGluZyJ9KSAuICJFbmFibGVkIjsKICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzLT53cmFwcGVkKCkuZnJhbWUoKSkp
XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKKyAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpO1xu
Iik7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFNldHRpbmdz
JiBzZXR0aW5ncyA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKS5mcmFtZSgpLT5zZXR0aW5ncygpO1xu
Iik7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghc2V0
dGluZ3MuJGVuYWJsZV9mdW5jdGlvbigpKVxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTtcbiIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KIApAQCAtMjYwNSw3ICsyNjM0LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24K
ICAgICAgICAgICAgICAgICAhJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiRG9Ob3RDaGVja1NlY3VyaXR5In0gJiYKICAgICAgICAgICAgICAgICAhJGF0dHJpYnV0
ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRG9Ob3RDaGVja1NlY3VyaXR5T25H
ZXR0ZXIifSkgewogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICgh
QmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KHN0YXRlLCBjYXN0
ZWRUaGlzLT53cmFwcGVkKCkpKVxuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsK
KyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7XG4iKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCRhdHRyaWJ1
dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5vbmRldGVybWluaXN0aWMifSkg
ewpAQCAtMjYyNiw3ICsyNjU1LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgY3Vyc29yLmFwcGVuZElucHV0
PE1lbW9pemVkRE9NUmVzdWx0PCRtZW1vaXplZFR5cGU+PihiaW5kaW5nTmFtZS5nZXQoKS5zdHJp
bmcoKSwgbWVtb2l6ZWRSZXN1bHQsICRleGNlcHRpb25Db2RlKTtcbiIpOwogICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9ICIgLiBOYXRp
dmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNlLCAibWVtb2l6
ZWRSZXN1bHQiLCAiY2FzdGVkVGhpcyIpIC4gIjtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTtcbiIpIGlm
ICRnZXR0ZXJFeGNlcHRpb25zOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7XG4iKTsKKyAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiIpOwogICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwogICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBpZiAoY3Vyc29yLmlzUmVwbGF5aW5nKCkpIHtcbiIpOwpAQCAtMjYzNiwy
NSArMjY2NSwyNSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAg
ICMgRklYTUU6IHRoZSBnZW5lcmF0ZWQgY29kZSBzaG91bGQgcmVwb3J0IGFuIGVycm9yIGlmIGFu
IGlucHV0IGNhbm5vdCBiZSBmZXRjaGVkIG9yIGNvbnZlcnRlZC4KICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2
ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRlcmZhY2UsICJtZW1vaXpl
ZFJlc3VsdCIsICJjYXN0ZWRUaGlzIikgLiAiO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgICAgICAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGlucHV0LT5l
eGNlcHRpb25Db2RlKCkpO1xuIikgaWYgJGdldHRlckV4Y2VwdGlvbnM7Ci0gICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAgICAgfVxuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgfVxuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIjZW5kaWZc
biIpOwogICAgICAgICAgICAgfSAjIGF0dHJpYnV0ZSBOb25kZXRlcm1pbmlzdGljCiAKICAgICAg
ICAgICAgIGlmIChIYXNDdXN0b21HZXR0ZXIoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMpKSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT4kaW1wbEdldHRlckZ1bmN0aW9uTmFt
ZSgqc3RhdGUpKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IHJldHVybiBjYXN0ZWRUaGlzLT4kaW1wbEdldHRlckZ1bmN0aW9uTmFtZSgqc3RhdGUpO1xuIik7
CiAgICAgICAgICAgICB9IGVsc2lmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJDaGVja1NlY3VyaXR5Rm9yTm9kZSJ9KSB7CiAgICAgICAgICAgICAgICAgJGlt
cGxJbmNsdWRlc3siSlNET01CaW5kaW5nLmgifSA9IDE7CiAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTtcbiIp
OwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoc2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUoc3RhdGUsIGltcGwuIiAuICRhdHRyaWJ1
dGUtPnNpZ25hdHVyZS0+bmFtZSAuICIoKSkgPyAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1
dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgImltcGwuJGltcGxHZXR0ZXJGdW5jdGlvbk5h
bWUoKSIsICJjYXN0ZWRUaGlzIikgLiAiIDoganNOdWxsKCkpO1xuIik7CisgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIHNob3VsZEFsbG93QWNjZXNzVG9Ob2Rl
KHN0YXRlLCBpbXBsLiIgLiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUgLiAiKCkpID8gIiAu
IE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRlcmZhY2UsICJp
bXBsLiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCkiLCAiY2FzdGVkVGhpcyIpIC4gIiA6IGpzTnVs
bCgpO1xuIik7CiAgICAgICAgICAgICB9IGVsc2lmICgkdHlwZSBlcSAiRXZlbnRIYW5kbGVyIikg
ewogICAgICAgICAgICAgICAgIG15ICRnZXR0ZXIgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJXaW5kb3dFdmVudEhhbmRsZXIifSA/ICJ3aW5kb3dFdmVudEhh
bmRsZXJBdHRyaWJ1dGUiCiAgICAgICAgICAgICAgICAgICAgIDogJGF0dHJpYnV0ZS0+c2lnbmF0
dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRG9jdW1lbnRFdmVudEhhbmRsZXIifSA/ICJkb2N1
bWVudEV2ZW50SGFuZGxlckF0dHJpYnV0ZSIKICAgICAgICAgICAgICAgICAgICAgOiAiZXZlbnRI
YW5kbGVyQXR0cmlidXRlIjsKICAgICAgICAgICAgICAgICBteSAkZXZlbnROYW1lID0gRXZlbnRI
YW5kbGVyQXR0cmlidXRlRXZlbnROYW1lKCRhdHRyaWJ1dGUpOwogICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7XG4iKTsKLSAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKCRn
ZXR0ZXIoY2FzdGVkVGhpcy0+d3JhcHBlZCgpLCAkZXZlbnROYW1lKSk7XG4iKTsKKyAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gJGdldHRlcihjYXN0ZWRUaGlz
LT53cmFwcGVkKCksICRldmVudE5hbWUpO1xuIik7CiAgICAgICAgICAgICB9IGVsc2lmICgkYXR0
cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgPX4gL0NvbnN0cnVjdG9yJC8pIHsKICAgICAgICAgICAg
ICAgICBteSAkY29uc3RydWN0b3JUeXBlID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlOwog
ICAgICAgICAgICAgICAgICRjb25zdHJ1Y3RvclR5cGUgPX4gcy9Db25zdHJ1Y3RvciQvLzsKQEAg
LTI2NjMsMTAgKzI2OTIsMTAgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAg
ICAgICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKICAgICAgICAgICAg
ICAgICAgICAgbXkgJG5hbWVkID0gKCRjb25zdHJ1Y3RvclR5cGUgPX4gL05hbWVkJC8pID8gIk5h
bWVkIiA6ICIiOwogICAgICAgICAgICAgICAgICAgICAkY29uc3RydWN0b3JUeXBlID1+IHMvTmFt
ZWQkLy87Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlMiIC4gJGNvbnN0cnVjdG9yVHlwZSAuICI6OmdldCR7bmFtZWR9
Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGNhc3RlZFRoaXMpKTtcbiIpOworICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlMiIC4gJGNvbnN0cnVjdG9y
VHlwZSAuICI6OmdldCR7bmFtZWR9Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGNhc3RlZFRoaXMp
O1xuIik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgQWRk
VG9JbXBsSW5jbHVkZXMoIkpTIiAuICRjb25zdHJ1Y3RvclR5cGUgLiAiLmgiLCAkYXR0cmlidXRl
LT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25kaXRpb25hbCJ9KTsKLSAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKUyIgLiAkY29uc3RydWN0b3JUeXBlIC4gIjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZt
KCksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKSk7XG4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTIiAuICRjb25zdHJ1Y3RvclR5cGUg
LiAiOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCkpO1xuIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNpZiAoISRhdHRy
aWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkdldHRlclJhaXNlc0V4Y2Vw
dGlvbiJ9ICYmICEkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJH
ZXR0ZXJSYWlzZXNFeGNlcHRpb25XaXRoTWVzc2FnZSJ9KSB7CiAgICAgICAgICAgICAgICAgbXkg
JGNhY2hlSW5kZXggPSAwOwpAQCAtMjY3NCwxMCArMjcwMywxMCBAQCBzdWIgR2VuZXJhdGVJbXBs
ZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICAkY2FjaGVJbmRleCA9ICRjdXJyZW50Q2Fj
aGVkQXR0cmlidXRlOwogICAgICAgICAgICAgICAgICAgICAkY3VycmVudENhY2hlZEF0dHJpYnV0
ZSsrOwogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoSlNW
YWx1ZSBjYWNoZWRWYWx1ZSA9IGNhc3RlZFRoaXMtPm1fIiAuICRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZS0+bmFtZSAuICIuZ2V0KCkpXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FjaGVkVmFsdWUpO1xuIik7
CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4g
Y2FjaGVkVmFsdWU7XG4iKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBt
eSBAY2FsbFdpdGhBcmdzID0gR2VuZXJhdGVDYWxsV2l0aCgkYXR0cmlidXRlLT5zaWduYXR1cmUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsV2l0aCJ9LCBcQGltcGxDb250ZW50LCAiSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpIik7CisgICAgICAgICAgICAgICAgbXkgQGNhbGxXaXRo
QXJncyA9IEdlbmVyYXRlQ2FsbFdpdGgoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifSwgXEBpbXBsQ29udGVudCwgImpzVW5kZWZpbmVkKCkiKTsK
IAogICAgICAgICAgICAgICAgIGlmICgkc3ZnTGlzdFByb3BlcnR5VHlwZSkgewogICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHJlc3VsdCA9ICAiIC4g
TmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgImNh
c3RlZFRoaXMtPndyYXBwZWQoKS4kaW1wbEdldHRlckZ1bmN0aW9uTmFtZSgiIC4gKGpvaW4gIiwg
IiwgQGNhbGxXaXRoQXJncykgLiAiKSIsICJjYXN0ZWRUaGlzIikgLiAiO1xuIik7CkBAIC0yNzE0
LDEwICsyNzQzLDEwIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgY2FzdGVkVGhp
cy0+bV8iIC4gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lIC4gIi5zZXQoc3RhdGUtPnZtKCks
IGNhc3RlZFRoaXMsIHJlc3VsdCk7XG4iKSBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiQ2FjaGVkQXR0cmlidXRlIn0pOwotICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTtcbiIp
OworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiByZXN1bHQ7
XG4iKTsKIAogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB1bnNoaWZ0KEBh
cmd1bWVudHMsIEdlbmVyYXRlQ2FsbFdpdGgoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifSwgXEBpbXBsQ29udGVudCwgIkpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKSIpKTsKKyAgICAgICAgICAgICAgICB1bnNoaWZ0KEBhcmd1bWVudHMs
IEdlbmVyYXRlQ2FsbFdpdGgoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiQ2FsbFdpdGgifSwgXEBpbXBsQ29udGVudCwgImpzVW5kZWZpbmVkKCkiKSk7CiAKICAg
ICAgICAgICAgICAgICBpZiAoJHN2Z1Byb3BlcnR5T3JMaXN0UHJvcGVydHlUeXBlKSB7CiAgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRzdmdQcm9wZXJ0eU9yTGlz
dFByb3BlcnR5VHlwZSBpbXBsKCpjYXN0ZWRUaGlzLT53cmFwcGVkKCkpO1xuIik7CkBAIC0yNzI5
LDcgKzI3NTgsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogCiAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7XG4i
KTsKIAotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIHJldHVybiByZXN1bHQ7XG4iKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwpAQCAtMzIzMCw2ICszMjU5LDEwIEBAIEVO
RAogCiAgICAgfQogCisgICAgaWYgKCRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZSkgeworICAgICAg
ICBHZW5lcmF0ZVNlcmlhbGl6ZXJGdW5jdGlvbigkaW50ZXJmYWNlLCAkaW50ZXJmYWNlTmFtZSwg
JGNsYXNzTmFtZSwgJHNlcmlhbGl6ZXJGdW5jdGlvbk5hbWUsICRzZXJpYWxpemVyTmF0aXZlRnVu
Y3Rpb25OYW1lKTsKKyAgICB9CisKICAgICBpZiAoJGludGVyZmFjZS0+aXRlcmFibGUpIHsKICAg
ICAgICAgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkl0ZXJhYmxlRnVuY3Rpb25zKCRpbnRlcmZhY2Up
OwogICAgIH0KQEAgLTM0NDIsNiArMzQ3NSwzMSBAQCBFTkQKICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIlxuI2VuZGlmIC8vICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0aW9uYWxT
dHJpbmc7CiB9CiAKK3N1YiBHZW5lcmF0ZVNlcmlhbGl6ZXJGdW5jdGlvbgoreworICAgIG15ICgk
aW50ZXJmYWNlLCAkaW50ZXJmYWNlTmFtZSwgJGNsYXNzTmFtZSwgJHNlcmlhbGl6ZXJGdW5jdGlv
bk5hbWUsICRzZXJpYWxpemVyTmF0aXZlRnVuY3Rpb25OYW1lKSA9IEBfOworCisgICAgQWRkVG9J
bXBsSW5jbHVkZXMoIk9iamVjdENvbnN0cnVjdG9yLmgiKTsKKyAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtzZXJpYWxpemVyTmF0aXZlRnVuY3Rp
b25OYW1lfShFeGVjU3RhdGUqIHN0YXRlKVxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7
XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0
YXRlLT50aGlzVmFsdWUoKTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8g
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlMkaW50ZXJmYWNlTmFtZSo+KHRoaXNWYWx1ZSk7
XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKVxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiB0aHJvd1Ro
aXNUeXBlRXJyb3IoKnN0YXRlLCBcIiRpbnRlcmZhY2VOYW1lXCIsIFwiJHNlcmlhbGl6ZXJGdW5j
dGlvbk5hbWVcIik7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICR7Y2xhc3NOYW1lfTo6aW5mbygpKTtcblxuIikg
dW5sZXNzICRpbnRlcmZhY2VOYW1lIGVxICJFdmVudFRhcmdldCI7CisgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KHN0YXRl
KTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFZNJiB2bSA9IHN0YXRlLT52bSgp
O1xuIik7CisgICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAeyRpbnRlcmZhY2UtPmF0dHJpYnV0
ZXN9KSB7CisgICAgICAgIG15ICRuYW1lID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lOwor
ICAgICAgICBpZiAoZ3JlcCAkXyBlcSAkbmFtZSwgQHskaW50ZXJmYWNlLT5zZXJpYWxpemFibGUt
PmF0dHJpYnV0ZXN9KSB7CisgICAgICAgICAgICBteSAkZ2V0RnVuY3Rpb25OYW1lID0gR2V0QXR0
cmlidXRlR2V0dGVyTmFtZSgkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkYXR0cmlidXRlKTsKKyAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgXCIke25hbWV9XCIpLCAke2dldEZ1bmN0aW9uTmFt
ZX1HZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTtcbiIpOworICAgICAgICB9CisgICAgfQorICAg
IHB1c2goQGltcGxDb250ZW50LCAiXG4gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
O1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOworfQorCiBzdWIgR2VuZXJh
dGVGdW5jdGlvbkNhc3RlZFRoaXMKIHsKICAgICBteSAoJGludGVyZmFjZSwgJGNsYXNzTmFtZSwg
JGZ1bmN0aW9uKSA9IEBfOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9JRExQYXJzZXIucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFBh
cnNlci5wbQppbmRleCBjOGQzZTA5NDQwOGNiODBkZTZmZDgwZGQ4N2ZlNGQ2YWY5YmQyZWE4Li5m
YTBjOGVkY2M0MzMzM2Y4YzIyNGRhMDBhNGM1OTIwOWY3NThiMzk4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbQpAQCAtNTcsNiArNTcsNyBAQCBzdHJ1
Y3QoIGRvbUludGVyZmFjZSA9PiB7CiAgICAgaXNDYWxsYmFjayA9PiAnJCcsICMgVXNlZCBmb3Ig
Y2FsbGJhY2sgaW50ZXJmYWNlcwogICAgIGlzUGFydGlhbCA9PiAnJCcsICMgVXNlZCBmb3IgcGFy
dGlhbCBpbnRlcmZhY2VzCiAgICAgaXRlcmFibGUgPT4gJyQnLCAjIFVzZWQgZm9yIGl0ZXJhYmxl
IGludGVyZmFjZXMKKyAgICBzZXJpYWxpemFibGUgPT4gJyQnLCAjIFVzZWQgZm9yIHNlcmlhbGl6
YWJsZSBpbnRlcmZhY2VzCiB9KTsKIAogIyBVc2VkIHRvIHJlcHJlc2VudCBkb21JbnRlcmZhY2Ug
Y29udGVudHMgKG5hbWUgb2YgbWV0aG9kLCBzaWduYXR1cmUpCkBAIC05NSw2ICs5NiwxMCBAQCBz
dHJ1Y3QoIGRvbUl0ZXJhYmxlID0+IHsKICAgICBmdW5jdGlvbnMgPT4gJ0AnLCAjIEl0ZXJhYmxl
IGZ1bmN0aW9ucyAoZW50cmllcywga2V5cywgdmFsdWVzLCBbU3ltYm9sLkl0ZXJhdG9yXSwgZm9y
RWFjaCkKIH0pOwogCisjIFVzZWQgdG8gcmVwcmVzZW50IHNlcmlhbGl6YWJsZSBpbnRlcmZhY2UK
K3N0cnVjdCggZG9tU2VyaWFsaXphYmxlID0+IHsKKyAgICBhdHRyaWJ1dGVzID0+ICdAJywgIyBM
aXN0IG9mIGF0dHJpYnV0ZXMgdG8gc2VyaWFsaXplCit9KTsKIAogIyBVc2VkIHRvIHJlcHJlc2Vu
dCBzdHJpbmcgY29uc3RhbnRzCiBzdHJ1Y3QoIGRvbUNvbnN0YW50ID0+IHsKQEAgLTEwMzAsNyAr
MTAzNSwxNiBAQCBzdWIgcGFyc2VTZXJpYWxpemVyCiAgICAgbXkgJG5leHQgPSAkc2VsZi0+bmV4
dFRva2VuKCk7CiAgICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJzZXJpYWxpemVyIikgewogICAg
ICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgInNlcmlhbGl6
ZXIiLCBfX0xJTkVfXyk7Ci0gICAgICAgIHJldHVybiAkc2VsZi0+cGFyc2VTZXJpYWxpemVyUmVz
dCgkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKKyAgICAgICAgbXkgJG5leHQgPSAkc2VsZi0+bmV4
dFRva2VuKCk7CisgICAgICAgIG15ICRuZXdEYXRhTm9kZTsKKyAgICAgICAgaWYgKCRuZXh0LT52
YWx1ZSgpIG5lICI7IikgeworICAgICAgICAgICAgJG5ld0RhdGFOb2RlID0gJHNlbGYtPnBhcnNl
U2VyaWFsaXplclJlc3QoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7CisgICAgICAgICAgICBteSAk
bmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICRuZXdEYXRhTm9kZSA9IGRvbVNlcmlhbGl6YWJsZS0+bmV3KCk7CisgICAgICAgIH0KKyAgICAg
ICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICI7IiwgX19MSU5F
X18pOworICAgICAgICByZXR1cm4gJG5ld0RhdGFOb2RlOwogICAgIH0KICAgICAkc2VsZi0+YXNz
ZXJ0VW5leHBlY3RlZFRva2VuKCRuZXh0LT52YWx1ZSgpLCBfX0xJTkVfXyk7CiB9CkBAIC0xMDQz
LDcgKzEwNTcsMTAgQEAgc3ViIHBhcnNlU2VyaWFsaXplclJlc3QKICAgICBteSAkbmV4dCA9ICRz
ZWxmLT5uZXh0VG9rZW4oKTsKICAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgIj0iKSB7CiAgICAg
ICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiPSIsIF9fTElO
RV9fKTsKLSAgICAgICAgcmV0dXJuICRzZWxmLT5wYXJzZVNlcmlhbGl6YXRpb25QYXR0ZXJuKCRl
eHRlbmRlZEF0dHJpYnV0ZUxpc3QpOworICAgICAgICBteSAkYXR0cmlidXRlcyA9ICRzZWxmLT5w
YXJzZVNlcmlhbGl6YXRpb25QYXR0ZXJuKCk7CisgICAgICAgIG15ICRuZXdEYXRhTm9kZSA9IGRv
bVNlcmlhbGl6YWJsZS0+bmV3KCk7CisgICAgICAgICRuZXdEYXRhTm9kZS0+YXR0cmlidXRlcygk
YXR0cmlidXRlcyk7CisgICAgICAgIHJldHVybiAkbmV3RGF0YU5vZGU7CiAgICAgfQogICAgIGlm
ICgkbmV4dC0+dHlwZSgpID09IElkZW50aWZpZXJUb2tlbiB8fCAkbmV4dC0+dmFsdWUoKSBlcSAi
KCIpIHsKICAgICAgICAgcmV0dXJuICRzZWxmLT5wYXJzZU9wZXJhdGlvblJlc3QoJGV4dGVuZGVk
QXR0cmlidXRlTGlzdCk7CkBAIC0xMDUzLDU5ICsxMDcwLDQ1IEBAIHN1YiBwYXJzZVNlcmlhbGl6
ZXJSZXN0CiBzdWIgcGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybgogewogICAgIG15ICRzZWxmID0g
c2hpZnQ7Ci0gICAgbXkgJGV4dGVuZGVkQXR0cmlidXRlTGlzdCA9IHNoaWZ0OwogCiAgICAgbXkg
JG5leHQgPSAkc2VsZi0+bmV4dFRva2VuKCk7CiAgICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJ7
IikgewogICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwg
InsiLCBfX0xJTkVfXyk7Ci0gICAgICAgICRzZWxmLT5wYXJzZVNlcmlhbGl6YXRpb25QYXR0ZXJu
TWFwKCk7CisgICAgICAgIG15ICRhdHRyaWJ1dGVzID0gJHNlbGYtPnBhcnNlU2VyaWFsaXphdGlv
bkF0dHJpYnV0ZXMoKTsKICAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdl
dFRva2VuKCksICJ9IiwgX19MSU5FX18pOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biBcQHskYXR0cmlidXRlc307CiAgICAgfQogICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAiWyIp
IHsKLSAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICJb
IiwgX19MSU5FX18pOwotICAgICAgICAkc2VsZi0+cGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybkxp
c3QoKTsKLSAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCks
ICJdIiwgX19MSU5FX18pOwotICAgICAgICByZXR1cm47CisgICAgICAgIGRpZSAiU2VyaWFsaXph
dGlvbiBvZiBsaXN0cyBwYXR0ZXJuIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLiI7CiAgICAg
fQogICAgIGlmICgkbmV4dC0+dHlwZSgpID09IElkZW50aWZpZXJUb2tlbikgewotICAgICAgICAk
c2VsZi0+YXNzZXJ0VG9rZW5UeXBlKCRzZWxmLT5nZXRUb2tlbigpLCBJZGVudGlmaWVyVG9rZW4p
OwotICAgICAgICByZXR1cm47CisgICAgICAgIG15IEBhdHRyaWJ1dGVzID0gKCk7CisgICAgICAg
IG15ICR0b2tlbiA9ICRzZWxmLT5nZXRUb2tlbigpOworICAgICAgICAkc2VsZi0+YXNzZXJ0VG9r
ZW5UeXBlKCR0b2tlbiwgSWRlbnRpZmllclRva2VuKTsKKyAgICAgICAgcHVzaChAYXR0cmlidXRl
cywgJHRva2VuLT52YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuIFxAYXR0cmlidXRlczsKICAgICB9
CiAgICAgJHNlbGYtPmFzc2VydFVuZXhwZWN0ZWRUb2tlbigkbmV4dC0+dmFsdWUoKSwgX19MSU5F
X18pOwogfQogCi1zdWIgcGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybk1hcAorc3ViIHBhcnNlU2Vy
aWFsaXphdGlvbkF0dHJpYnV0ZXMKIHsKICAgICBteSAkc2VsZiA9IHNoaWZ0OwotICAgIG15ICRu
ZXh0ID0gJHNlbGYtPm5leHRUb2tlbigpOwotICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAiZ2V0
dGVyIikgewotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4o
KSwgImdldHRlciIsIF9fTElORV9fKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAo
JG5leHQtPnZhbHVlKCkgZXEgImluaGVyaXQiKSB7Ci0gICAgICAgICRzZWxmLT5hc3NlcnRUb2tl
blZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiaW5oZXJpdCIsIF9fTElORV9fKTsKLSAgICAgICAg
JHNlbGYtPnBhcnNlSWRlbnRpZmllcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBp
ZiAoJG5leHQtPnR5cGUoKSA9PSBJZGVudGlmaWVyVG9rZW4pIHsKLSAgICAgICAgJHNlbGYtPmFz
c2VydFRva2VuVHlwZSgkc2VsZi0+Z2V0VG9rZW4oKSwgSWRlbnRpZmllclRva2VuKTsKLSAgICAg
ICAgJHNlbGYtPnBhcnNlSWRlbnRpZmllcnMoKTsKLSAgICB9Ci19CisgICAgbXkgJHRva2VuID0g
JHNlbGYtPmdldFRva2VuKCk7CisKKyAgICBpZiAoJHRva2VuLT52YWx1ZSgpIGVxICJnZXR0ZXIi
KSB7CisgICAgICAgIGRpZSAiU2VyaWFsaXplciBnZXR0ZXIga2V5d29yZCBpcyBub3QgY3VycmVu
dGx5IHN1cHBvcnRlZC4iOwogCi1zdWIgcGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybkxpc3QKLXsK
LSAgICBteSAkc2VsZiA9IHNoaWZ0OwotICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tlbigp
OwotICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAiZ2V0dGVyIikgewotICAgICAgICAkc2VsZi0+
YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgImdldHRlciIsIF9fTElORV9fKTsK
LSAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAoJG5leHQtPnR5cGUoKSA9PSBJZGVudGlm
aWVyVG9rZW4pIHsKLSAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVHlwZSgkc2VsZi0+Z2V0VG9r
ZW4oKSwgSWRlbnRpZmllclRva2VuKTsKLSAgICAgICAgJHNlbGYtPnBhcnNlSWRlbnRpZmllcnMo
KTsKKyAgICBpZiAoJHRva2VuLT52YWx1ZSgpIGVxICJpbmhlcml0IikgeworICAgICAgICBkaWUg
IlNlcmlhbGl6ZXIgaW5oZXJpdCBrZXl3b3JkIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLiI7
CiAgICAgfQorCisgICAgbXkgQGF0dHJpYnV0ZXMgPSAoKTsKKyAgICAkc2VsZi0+YXNzZXJ0VG9r
ZW5UeXBlKCR0b2tlbiwgSWRlbnRpZmllclRva2VuKTsKKyAgICBwdXNoKEBhdHRyaWJ1dGVzLCAk
dG9rZW4tPnZhbHVlKCkpOworICAgIHB1c2goQGF0dHJpYnV0ZXMsIEB7JHNlbGYtPnBhcnNlSWRl
bnRpZmllcnMoKX0pOworICAgIHJldHVybiBcQGF0dHJpYnV0ZXM7CiB9CiAKIHN1YiBwYXJzZUlk
ZW50aWZpZXJMaXN0CkBAIC0yMjg3LDYgKzIyOTAsMTkgQEAgc3ViIGFwcGx5TWVtYmVyTGlzdAog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgbmV4dDsKICAgICAgICAgfQorICAgICAgICBpZiAo
cmVmKCRpdGVtKSBlcSAiZG9tU2VyaWFsaXphYmxlIikgeworICAgICAgICAgICAgJGludGVyZmFj
ZS0+c2VyaWFsaXphYmxlKCRpdGVtKTsKKyAgICAgICAgICAgIG5leHQ7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAoJGludGVyZmFjZS0+c2VyaWFsaXphYmxlKSB7CisgICAgICAgIG15ICRu
dW1TZXJpYWxpemVyQXR0cmlidXRlcyA9IEB7JGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5hdHRy
aWJ1dGVzfTsKKyAgICAgICAgaWYgKCRudW1TZXJpYWxpemVyQXR0cmlidXRlcyA9PSAwKSB7Cisg
ICAgICAgICAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEB7JGludGVyZmFjZS0+YXR0cmlidXRl
c30pIHsKKyAgICAgICAgICAgICAgICBwdXNoKEB7JGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5h
dHRyaWJ1dGVzfSwgJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcApp
bmRleCBhY2UwODZjOGQ2MTk2NmY3Y2U3Y2UxZmEzMmViNjQyZmE5ZGI2NmI2Li42ZDZiNGZjZjM0
YTVmYTUyOWY2MGZjOGY3N2RkMTMwZWU1YmM4YzZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9N
T2JqZWN0LmNwcApAQCAtMTQ5LDYgKzE0OSw4IEBAIGJvb2wgSlNUZXN0QWN0aXZlRE9NT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCitKU1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9iamVjdEV4Y2l0
aW5nQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RBY3RpdmVET01PYmplY3QqIGNh
c3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RFeGNpdGlu
Z0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpA
QCAtMTU5LDExICsxNjEsMTggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0
RXhjaXRpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHUKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJv
cigqc3RhdGUsICJUZXN0QWN0aXZlRE9NT2JqZWN0IiwgImV4Y2l0aW5nQXR0ciIpOwogICAgIH0K
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEFjdGl2ZURPTU9iamVjdEV4Y2l0aW5n
QXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdEFjdGl2
ZURPTU9iamVjdEV4Y2l0aW5nQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RBY3Rp
dmVET01PYmplY3QqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNo
b3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coc3RhdGUsIGNhc3RlZFRoaXMtPndyYXBwZWQoKSkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmV4Y2l0aW5nQXR0cigp
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggYTAwNGE5
NzkwOTY3OTdmZDBhNTQ1MTg0YThlMTg2Y2VkNTVlMGQyNC4uN2IwNTkzZGE3YjU5NTIxMTM0ZTA5
ZTVmNjBmYTgwZmU5NTE3M2IyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNw
cApAQCAtMTc2LDYgKzE3Niw4IEBAIHZvaWQgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6ZGVzdHJv
eShKU0M6OkpTQ2VsbCogY2VsbCkKICAgICB0aGlzT2JqZWN0LT5KU1Rlc3RFdmVudENvbnN0cnVj
dG9yOjp+SlNUZXN0RXZlbnRDb25zdHJ1Y3RvcigpOwogfQogCitKU1ZhbHVlIGpzVGVzdEV2ZW50
Q29uc3RydWN0b3JBdHRyMUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RFdmVudENvbnN0
cnVjdG9yKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1
Y3RvckF0dHIxKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKQEAgLTE4NiwxMiArMTg4LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3Ry
dWN0b3JBdHRyMShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzCiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBl
RXJyb3IoKnN0YXRlLCAiVGVzdEV2ZW50Q29uc3RydWN0b3IiLCAiYXR0cjEiKTsKICAgICB9Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjFHZXR0
ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVj
dG9yQXR0cjFHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvciog
Y2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJB
TShjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuYXR0cjEo
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjJHZXR0ZXIoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciogY2FzdGVkVGhpcyk7CisKIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RC
YXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMDIsMTMgKzIxMywyMiBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpcwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
ICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RFdmVudENv
bnN0cnVjdG9yIiwgImF0dHIyIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9
CisKK0pTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIyR2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3IqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3Ry
aW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmF0dHIyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKICNpZiBFTkFCTEUoU1BF
Q0lBTF9FVkVOVCkKK0pTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIzR2V0dGVyKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3IqIGNhc3RlZFRoaXMpOworCiBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjMoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90
QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjE5LDkgKzIzOSwxNiBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjMoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpcwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
ICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RFdmVudENv
bnN0cnVjdG9yIiwgImF0dHIzIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIzR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9
CisKK0pTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIzR2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3IqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3Ry
aW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmF0dHIzKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4
Y2VwdGlvbi5jcHAKaW5kZXggYjI1ZGEzMWNkOGY3MTgzZDEzZTI5NTA4OTEwNTQ5MTNlMmE0M2U1
My4uZTA2YjcwODU3ZDVmNmMzYjdmM2UyNTEwYmEyMDkxOGJkNWJiNDI3ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4
Y2VwdGlvbi5jcHAKQEAgLTE0MSw2ICsxNDEsOCBAQCBib29sIEpTVGVzdEV4Y2VwdGlvbjo6Z2V0
T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFBybwog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAorSlNWYWx1ZSBqc1Rlc3RFeGNlcHRpb25OYW1lR2V0dGVy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEV4Y2VwdGlvbiogY2FzdGVkVGhpcyk7CisKIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEV4Y2VwdGlvbk5hbWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTUxLDkgKzE1MywxNiBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RFeGNlcHRpb25OYW1lKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0
dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RFeGNlcHRpb24iLCAibmFtZSIp
OwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEV4Y2VwdGlvbk5hbWVH
ZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RFeGNlcHRpb25O
YW1lR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEV4Y2VwdGlvbiogY2FzdGVkVGhpcykK
K3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlz
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwubmFtZSgpKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
R2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCmluZGV4IDBkYmYwMDhiNjBmNTE3MTE3NTVjOTVkY2Rj
YmYzMmNlZDIzOWQ5OGQuLjE2YmVhYTM3ZDJlM2JlYjZlZjM3ZmNmZjM1MzY3MjIxNGRjMGIyNjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RHbG9iYWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCkBAIC0xNTQsNiArMTU0LDggQEAgYm9vbCBK
U1Rlc3RHbG9iYWxPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIHN0YXRlLAogICAgIHJldHVybiBmYWxzZTsKIH0KIAorSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RSZWd1bGFyQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dEdsb2JhbE9iamVjdCogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdFJlZ3VsYXJBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwpAQCAtMTY0LDEzICsxNjYsMjIgQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWwKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0
aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0R2xvYmFsT2JqZWN0IiwgInJlZ3VsYXJB
dHRyaWJ1dGUiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RHbG9i
YWxPYmplY3RSZWd1bGFyQXR0cmlidXRlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisK
K0pTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZUdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3Ry
aW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnJlZ3VsYXJBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAogI2lm
IEVOQUJMRShURVNUX0ZFQVRVUkUpCitKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRB
dFJ1bnRpbWVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2Jq
ZWN0KiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0RW5h
YmxlZEF0UnVudGltZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CkBAIC0xODEsOSArMTkyLDE2IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhy
b3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdEdsb2JhbE9iamVjdCIsICJlbmFibGVkQXRS
dW50aW1lQXR0cmlidXRlIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNU
ZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUdldHRlcihzdGF0ZSwgY2Fz
dGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRp
bWVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0KiBj
YXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFN
KGNhc3RlZFRoaXMpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5lbmFibGVk
QXRSdW50aW1lQXR0cmlidXRlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAK
aW5kZXggOGM5NDY1NTJiNTljYmE1Yjk0ODMwODBjNjUzMDg2N2NkNTZjNWZiOS4uODgzYWZjYjll
MmE4ZmY5MjIwZTA3OTRkMWFiYjA5ZmRjYmFmN2JhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAK
QEAgLTQwOSwzMCArNDA5LDUwIEBAIHZvaWQgSlNUZXN0SW50ZXJmYWNlOjpkZXN0cm95KEpTQzo6
SlNDZWxsKiBjZWxsKQogfQogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMjMpCitKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0
YXRpY1JlYWRPbmx5QXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2Uq
IGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rv
ckltcGxlbWVudHNTdGF0aWNSZWFkT25seUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAg
IFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rl
c3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNSZWFkT25seUF0dHJHZXR0ZXIo
c3RhdGUsIG51bGxwdHIpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rv
ckltcGxlbWVudHNTdGF0aWNSZWFkT25seUF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1i
ZXIoVGVzdEludGVyZmFjZTo6aW1wbGVtZW50c1N0YXRpY1JlYWRPbmx5QXR0cigpKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAog
I2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykK
K0pTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljQXR0ckdl
dHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMpOworCiBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBs
ZW1lbnRzU3RhdGljQXR0ckdldHRlcihzdGF0ZSwgbnVsbHB0cikpOworfQorCitKU1ZhbHVlIGpz
VGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHJHZXR0ZXIoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIFRlc3RJbnRlcmZhY2U6OmltcGxlbWVu
dHNTdGF0aWNBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24yMikg
fHwgRU5BQkxFKENvbmRpdGlvbjIzKQorSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRz
U3RyMUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMp
OworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMShFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmpl
Y3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC00NDMsMTQgKzQ2
MywyMyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMShFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRl
c3RJbnRlcmZhY2UiLCAiaW1wbGVtZW50c1N0cjEiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMUdldHRlcihzdGF0ZSwgY2Fz
dGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIxR2V0
dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcykKK3sKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuaW1wbGVtZW50c1N0cjEoKSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMp
CitKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyR2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTQ2MSwxNCArNDkwLDIzIEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1
cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdEludGVyZmFjZSIsICJpbXBsZW1l
bnRzU3RyMiIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEludGVy
ZmFjZUltcGxlbWVudHNTdHIyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFs
dWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShz
dGF0ZSwgaW1wbC5pbXBsZW1lbnRzU3RyMigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUo
Q29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKK0pTVmFsdWUganNUZXN0SW50ZXJm
YWNlSW1wbGVtZW50c1N0cjNHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNl
KiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50
c1N0cjMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpA
QCAtNDc5LDEyICs1MTcsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVt
ZW50c1N0cjMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGgKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJv
cigqc3RhdGUsICJUZXN0SW50ZXJmYWNlIiwgImltcGxlbWVudHNTdHIzIik7CiAgICAgfQotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+aW1wbGVtZW50c1N0cjMoKnN0YXRl
KSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRz
U3RyM0dldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdEludGVy
ZmFjZUltcGxlbWVudHNTdHIzR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVyZmFj
ZSogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9Q
QVJBTShjYXN0ZWRUaGlzKTsKKyAgICByZXR1cm4gY2FzdGVkVGhpcy0+aW1wbGVtZW50c1N0cjMo
KnN0YXRlKTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJM
RShDb25kaXRpb24yMykKK0pTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGVHZXR0
ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzKTsKKwogRW5j
b2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGUoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90
QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtNDk1LDM4ICs1NDIsNjUgQEAg
RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGUoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGgKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7
CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0SW50ZXJm
YWNlIiwgImltcGxlbWVudHNOb2RlIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMp
KTsKK30KKworSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9kZUdldHRlcihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMo
c3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmltcGxlbWVudHNOb2RlKCkp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0
OwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRp
dGlvbjEyKQorSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0
YXRpY1JlYWRPbmx5QXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2Uq
IGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rv
clN1cHBsZW1lbnRhbFN0YXRpY1JlYWRPbmx5QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHNsb3RCYXNlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljUmVhZE9ubHlBdHRyR2V0
dGVyKHN0YXRlLCBudWxscHRyKSk7Cit9CisKK0pTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3Ry
dWN0b3JTdXBwbGVtZW50YWxTdGF0aWNSZWFkT25seUF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNOdW1iZXIoV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsU3RhdGljUmVh
ZE9ubHlBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwg
RU5BQkxFKENvbmRpdGlvbjEyKQorSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1
cHBsZW1lbnRhbFN0YXRpY0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJm
YWNlKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3Ry
dWN0b3JTdXBwbGVtZW50YWxTdGF0aWNBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBV
TlVTRURfUEFSQU0oc2xvdEJhc2UpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0
SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNBdHRyR2V0dGVyKHN0YXRlLCBu
dWxscHRyKSk7Cit9CisKK0pTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVt
ZW50YWxTdGF0aWNBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSog
Y2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJB
TShjYXN0ZWRUaGlzKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0
YXRlLCBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxTdGF0aWNBdHRyKCkp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0
OwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRp
dGlvbjEyKQorSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIxR2V0dGVyKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjEoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFz
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtNTM3LDE0ICs2MTEsMjMgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMShFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAg
ICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RJbnRlcmZhY2Ui
LCAic3VwcGxlbWVudGFsU3RyMSIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjFHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMp
KTsKK30KKworSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIxR2V0dGVyKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNT
dHJpbmdXaXRoQ2FjaGUoc3RhdGUsIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1l
bnRhbFN0cjEoaW1wbCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkg
fHwgRU5BQkxFKENvbmRpdGlvbjEyKQorSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50
YWxTdHIyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhp
cyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpT
T2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtNTU1LDE0
ICs2MzgsMjMgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3Ry
MihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZQogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwg
IlRlc3RJbnRlcmZhY2UiLCAic3VwcGxlbWVudGFsU3RyMiIpOwogICAgIH0KKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjJHZXR0ZXIoc3Rh
dGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50
YWxTdHIyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhp
cykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRU
aGlzKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIFdlYkNvcmU6OlRlc3RTdXBwbGVt
ZW50YWw6OnN1cHBsZW1lbnRhbFN0cjIoaW1wbCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJM
RShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQorSlNWYWx1ZSBqc1Rlc3RJbnRl
cmZhY2VTdXBwbGVtZW50YWxTdHIzR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVy
ZmFjZSogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBs
ZW1lbnRhbFN0cjMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwpAQCAtNTczLDEyICs2NjUsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNl
U3VwcGxlbWVudGFsU3RyMyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZQogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlw
ZUVycm9yKCpzdGF0ZSwgIlRlc3RJbnRlcmZhY2UiLCAic3VwcGxlbWVudGFsU3RyMyIpOwogICAg
IH0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPnN1cHBsZW1lbnRhbFN0
cjMoKnN0YXRlKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RJbnRlcmZhY2VT
dXBwbGVtZW50YWxTdHIzR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUg
anNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyM0dldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
KyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CisgICAgcmV0dXJuIGNhc3RlZFRoaXMtPnN1
cHBsZW1lbnRhbFN0cjMoKnN0YXRlKTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0
aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKK0pTVmFsdWUganNUZXN0SW50ZXJmYWNlU3Vw
cGxlbWVudGFsTm9kZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UqIGNh
c3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxO
b2RlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAg
LTU4OSw5ICs2OTAsMTYgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVu
dGFsTm9kZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZQogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3RJbnRlcmZhY2UiLCAic3VwcGxlbWVudGFsTm9kZSIpOwogICAgIH0KKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGVHZXR0
ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBw
bGVtZW50YWxOb2RlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSogY2Fz
dGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShj
YXN0ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCks
IFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbE5vZGUoaW1wbCkpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCmluZGV4
IDc5MzI2MWY2MTMyZDBlMGE4ZjE4MWUzY2NkNWNlYTViMGM3YzY0ZmIuLmI4ODYzMWU1NWM0MTBi
OTYyYjc1YWY5MDIwODczOGYzM2Y1ZDQ3YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRp
bkNvbnN0cnVjdG9yLmNwcApAQCAtMTMyLDYgKzEzMiw4IEBAIHZvaWQgSlNUZXN0SlNCdWlsdGlu
Q29uc3RydWN0b3I6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiAgICAgdGhpc09iamVjdC0+
SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I6On5KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcigp
OwogfQogCitKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZUN1
c3RvbUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvciog
Y2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
VGVzdEF0dHJpYnV0ZUN1c3RvbShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CkBAIC0xNDIsMTAgKzE0NCwxOSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RK
U0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVDdXN0b20oRXhlY1N0YXRlKiBzdGF0ZSwg
RQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93
R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciIsICJ0ZXN0
QXR0cmlidXRlQ3VzdG9tIik7CiAgICAgfQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2Fz
dGVkVGhpcy0+dGVzdEF0dHJpYnV0ZUN1c3RvbSgqc3RhdGUpKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZUN1c3RvbUdl
dHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yVGVzdEF0dHJpYnV0ZUN1c3RvbUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RKU0J1aWx0aW5Db25zdHJ1Y3RvciogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKKyAgICByZXR1cm4gY2FzdGVk
VGhpcy0+dGVzdEF0dHJpYnV0ZUN1c3RvbSgqc3RhdGUpOwogfQogCiAKK0pTVmFsdWUganNUZXN0
SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b21HZXR0ZXIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqIGNhc3RlZFRoaXMpOworCiBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3Rv
bShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0x
NTYsNyArMTY3LDE0IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
VGVzdEF0dHJpYnV0ZVJXQ3VzdG9tKEV4ZWNTdGF0ZSogc3RhdGUsCiAgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0
YXRlLCAiVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yIiwgInRlc3RBdHRyaWJ1dGVSV0N1c3RvbSIp
OwogICAgIH0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPnRlc3RBdHRy
aWJ1dGVSV0N1c3RvbSgqc3RhdGUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tR2V0dGVyKHN0YXRlLCBj
YXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0
QXR0cmlidXRlUldDdXN0b21HZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SlNCdWlsdGlu
Q29uc3RydWN0b3IqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CisgICAgcmV0dXJuIGNhc3RlZFRoaXMtPnRlc3RB
dHRyaWJ1dGVSV0N1c3RvbSgqc3RhdGUpOwogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAppbmRleCA5N2RhZDQ1
MjNhMjZhZTc1Y2FjNTQ4ODFiMzNlMmY2YWQzYTE0OTNhLi5jZWFjMGY0ZWE0MzUyZTM3NWZlOGUx
NzNkZDRjMWQyNDNmYzkyMjZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5j
bHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgogI2lu
Y2x1ZGUgIkpTRE9NSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgog
I2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNsdWRlIDxy
dW50aW1lL0pTU3RyaW5nLmg+CkBAIC00OSw2ICs1MCw4IEBAIGJvb2wgc2V0SlNUZXN0Tm9kZU5h
bWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlCiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVDb25zdHJ1Y3RvcihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTT2Jq
ZWN0Kik7CiBib29sIHNldEpTVGVzdE5vZGVDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogCitFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTihFeGVjU3Rh
dGUqKTsKKwogY2xhc3MgSlNUZXN0Tm9kZVByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmlu
YWxPYmplY3QgewogcHVibGljOgogICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJh
c2U7CkBAIC0xMDcsNiArMTEwLDcgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVz
dE5vZGVQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KICAgICB7ICJrZXlzIiwgSlNDOjpGdW5jdGlv
biwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihq
c1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25LZXlzKSwgKGludHB0cl90KSAoMCkgfSB9LAogICAg
IHsgInZhbHVlcyIsIEpTQzo6RnVuY3Rpb24sIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0
aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVmFsdWVz
KSwgKGludHB0cl90KSAoMCkgfSB9LAogICAgIHsgImZvckVhY2giLCBKU0M6OkZ1bmN0aW9uLCBO
b0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVz
dE5vZGVQcm90b3R5cGVGdW5jdGlvbkZvckVhY2gpLCAoaW50cHRyX3QpICgxKSB9IH0sCisgICAg
eyAidG9KU09OIiwgSlNDOjpGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRp
Y19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04p
LCAoaW50cHRyX3QpICgwKSB9IH0sCiB9OwogCiBjb25zdCBDbGFzc0luZm8gSlNUZXN0Tm9kZVBy
b3RvdHlwZTo6c19pbmZvID0geyAiVGVzdE5vZGVQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAw
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE5vZGVQcm90b3R5cGUpIH07CkBAIC0xMzUsNiAr
MTM5LDggQEAgSlNPYmplY3QqIEpTVGVzdE5vZGU6OnByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RO
b2RlPih2bSwgZ2xvYmFsT2JqZWN0KTsKIH0KIAorSlNWYWx1ZSBqc1Rlc3ROb2RlTmFtZUdldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3ROb2RlKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpT
VmFsdWUganNUZXN0Tm9kZU5hbWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwpAQCAtMTQ1LDkgKzE1MSwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RO
b2RlTmFtZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cgogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93
R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3ROb2RlIiwgIm5hbWUiKTsKICAgICB9CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3ROb2RlTmFtZUdldHRlcihzdGF0ZSwgY2FzdGVk
VGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE5vZGVOYW1lR2V0dGVyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE5vZGUqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
KyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0
YXRlLCBpbXBsLm5hbWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwor
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIApAQCAtMTkzLDYgKzIwNiwyMSBAQCBKU1ZhbHVlIEpT
VGVzdE5vZGU6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKICAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0Tm9kZUNvbnN0
cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVj
dCkpOwogfQogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5
cGVGdW5jdGlvblRvSlNPTihFeGVjU3RhdGUqIHN0YXRlKQoreworICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOworICAgIGF1dG8gY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0Tm9kZSo+KHRoaXNWYWx1ZSk7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkKKyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0Tm9k
ZSIsICJ0b0pTT04iKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMs
IEpTVGVzdE5vZGU6OmluZm8oKSk7CisKKyAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0
RW1wdHlPYmplY3Qoc3RhdGUpOworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm5hbWUiKSwganNU
ZXN0Tm9kZU5hbWVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKKworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKK30KKwogdXNpbmcgVGVzdE5vZGVJdGVyYXRvciA9IEpTRE9N
SXRlcmF0b3I8SlNUZXN0Tm9kZT47CiB1c2luZyBUZXN0Tm9kZUl0ZXJhdG9yUHJvdG90eXBlID0g
SlNET01JdGVyYXRvclByb3RvdHlwZTxKU1Rlc3ROb2RlPjsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRl
dGVybWluaXN0aWMuY3BwCmluZGV4IDQyMWQ5OTVlYzAzNGZmZTkyZDZkYjliOTI0M2Y2ZTk1YjYw
ZDNiYzIuLmVlMTgwNWFhNDE2Y2QzNGQwMGUwMjQxNTMyZGZmZjNjZjAwNzViYTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRl
cm1pbmlzdGljLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5jcHAKQEAgLTE0NCw2ICsxNDQsOCBAQCB2b2lkIEpT
VGVzdE5vbmRldGVybWluaXN0aWM6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiAgICAgdGhp
c09iamVjdC0+SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYzo6fkpTVGVzdE5vbmRldGVybWluaXN0aWMo
KTsKIH0KIAorSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1Jl
YWRvbmx5QXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGlj
KiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05v
bmRldGVybWluaXN0aWNSZWFkb25seUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTU0LDYgKzE1NiwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5QXR0cihFeGVjU3Rh
dGUqIHN0YQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJu
IHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3ROb25kZXRlcm1pbmlzdGljIiwgIm5v
bmRldGVybWluaXN0aWNSZWFkb25seUF0dHIiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5QXR0
ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE5vbmRldGVy
bWluaXN0aWNOb25kZXRlcm1pbmlzdGljUmVhZG9ubHlBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE5vbmRldGVybWluaXN0aWMqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAjaWYgRU5BQkxFKFdF
Ql9SRVBMQVkpCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRlLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCk7CiAgICAgSW5wdXRDdXJzb3ImIGN1cnNvciA9IGdsb2JhbE9iamVj
dC0+aW5wdXRDdXJzb3IoKTsKQEAgLTE2Miw3ICsxNzEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5QXR0cihFeGVjU3RhdGUq
IHN0YQogICAgICAgICBpbnQzMl90IG1lbW9pemVkUmVzdWx0ID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpLm5vbmRldGVybWluaXN0aWNSZWFkb25seUF0dHIoKTsKICAgICAgICAgY3Vyc29yLmFwcGVu
ZElucHV0PE1lbW9pemVkRE9NUmVzdWx0PGludDMyX3Q+PihiaW5kaW5nTmFtZS5nZXQoKS5zdHJp
bmcoKSwgbWVtb2l6ZWRSZXN1bHQsIDApOwogICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVt
YmVyKG1lbW9pemVkUmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIGlmIChjdXJzb3IuaXNS
ZXBsYXlpbmcoKSkgewpAQCAtMTcwLDE2ICsxNzksMTggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNSZWFkb25seUF0dHIoRXhlY1N0YXRlKiBz
dGEKICAgICAgICAgTWVtb2l6ZWRET01SZXN1bHRCYXNlKiBpbnB1dCA9IGN1cnNvci5mZXRjaElu
cHV0PE1lbW9pemVkRE9NUmVzdWx0QmFzZT4oKTsKICAgICAgICAgaWYgKGlucHV0ICYmIGlucHV0
LT5jb252ZXJ0VG88aW50MzJfdD4obWVtb2l6ZWRSZXN1bHQpKSB7CiAgICAgICAgICAgICBKU1Zh
bHVlIHJlc3VsdCA9IGpzTnVtYmVyKG1lbW9pemVkUmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgICAgIH0KICAgICB9CiAjZW5kaWYKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5ub25kZXRlcm1pbmlz
dGljUmVhZG9ubHlBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3Rp
Y05vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE5vbmRldGVybWluaXN0aWMqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0
KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTkwLDYgKzIwMSwx
MyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3Rp
Y1dyaXRlYWJsZUF0dHIoRXhlY1N0YXRlKiBzdAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RO
b25kZXRlcm1pbmlzdGljIiwgIm5vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyIik7CiAgICAg
fQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRl
dGVybWluaXN0aWNXcml0ZWFibGVBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisK
K0pTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNXcml0ZWFibGVB
dHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE5vbmRldGVybWluaXN0aWMqIGNhc3Rl
ZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2Fz
dGVkVGhpcyk7CiAjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCiAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAgICAgSW5wdXRDdXJz
b3ImIGN1cnNvciA9IGdsb2JhbE9iamVjdC0+aW5wdXRDdXJzb3IoKTsKQEAgLTE5OCw3ICsyMTYs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3Rp
Y1dyaXRlYWJsZUF0dHIoRXhlY1N0YXRlKiBzdAogICAgICAgICBTdHJpbmcgbWVtb2l6ZWRSZXN1
bHQgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCkubm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIo
KTsKICAgICAgICAgY3Vyc29yLmFwcGVuZElucHV0PE1lbW9pemVkRE9NUmVzdWx0PFN0cmluZz4+
KGJpbmRpbmdOYW1lLmdldCgpLnN0cmluZygpLCBtZW1vaXplZFJlc3VsdCwgMCk7CiAgICAgICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIG1lbW9pemVkUmVzdWx0
KTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KIAogICAgIGlmIChjdXJzb3IuaXNSZXBsYXlpbmcoKSkgewpAQCAt
MjA2LDE2ICsyMjQsMTggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05v
bmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyKEV4ZWNTdGF0ZSogc3QKICAgICAgICAgTWVtb2l6
ZWRET01SZXN1bHRCYXNlKiBpbnB1dCA9IGN1cnNvci5mZXRjaElucHV0PE1lbW9pemVkRE9NUmVz
dWx0QmFzZT4oKTsKICAgICAgICAgaWYgKGlucHV0ICYmIGlucHV0LT5jb252ZXJ0VG88U3RyaW5n
PihtZW1vaXplZFJlc3VsdCkpIHsKICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJp
bmdXaXRoQ2FjaGUoc3RhdGUsIG1lbW9pemVkUmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
ICAgIH0KICAgICB9CiAjZW5kaWYKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwu
bm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RO
b25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHJHZXR0ZXIoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY2FzdGVkVGhpcyk7CisKIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljRXhjZXB0aW9u
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBA
IC0yMjYsNiArMjQ2LDEzIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNO
b25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0cihFeGVjU3RhdGUqIHN0CiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3Io
KnN0YXRlLCAiVGVzdE5vbmRldGVybWluaXN0aWMiLCAibm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlv
bkF0dHIiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3ROb25kZXRl
cm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHJHZXR0ZXIoc3RhdGUsIGNhc3Rl
ZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5p
c3RpY0V4Y2VwdGlvbkF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0Tm9uZGV0ZXJt
aW5pc3RpYyogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVO
VVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICNpZiBFTkFCTEUoV0VCX1JFUExBWSkKICAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKTsK
ICAgICBJbnB1dEN1cnNvciYgY3Vyc29yID0gZ2xvYmFsT2JqZWN0LT5pbnB1dEN1cnNvcigpOwpA
QCAtMjM0LDcgKzI2MSw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNO
b25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0cihFeGVjU3RhdGUqIHN0CiAgICAgICAgIFN0cmlu
ZyBtZW1vaXplZFJlc3VsdCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKS5ub25kZXRlcm1pbmlzdGlj
RXhjZXB0aW9uQXR0cigpOwogICAgICAgICBjdXJzb3IuYXBwZW5kSW5wdXQ8TWVtb2l6ZWRET01S
ZXN1bHQ8U3RyaW5nPj4oYmluZGluZ05hbWUuZ2V0KCkuc3RyaW5nKCksIG1lbW9pemVkUmVzdWx0
LCAwKTsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwg
bWVtb2l6ZWRSZXN1bHQpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgaWYgKGN1cnNvci5pc1JlcGxh
eWluZygpKSB7CkBAIC0yNDIsMTYgKzI2OSwxOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25k
ZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHIoRXhlY1N0YXRlKiBzdAog
ICAgICAgICBNZW1vaXplZERPTVJlc3VsdEJhc2UqIGlucHV0ID0gY3Vyc29yLmZldGNoSW5wdXQ8
TWVtb2l6ZWRET01SZXN1bHRCYXNlPigpOwogICAgICAgICBpZiAoaW5wdXQgJiYgaW5wdXQtPmNv
bnZlcnRUbzxTdHJpbmc+KG1lbW9pemVkUmVzdWx0KSkgewogICAgICAgICAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOwotICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICAgICAgfQogICAgIH0KICNlbmRpZgogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNo
ZShzdGF0ZSwgaW1wbC5ub25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0cigpKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitK
U1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0
aW9uQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiBj
YXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRl
dGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI2Miw2ICsyOTEsMTMgQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25B
dHRyKEV4ZWNTdGEKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJl
dHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIs
ICJub25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0ciIpOwogICAgIH0KKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGlj
R2V0dGVyRXhjZXB0aW9uQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1Zh
bHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9u
QXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiBjYXN0
ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNh
c3RlZFRoaXMpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogI2lmIEVOQUJMRShXRUJfUkVQ
TEFZKQogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0ZS0+bGV4aWNhbEds
b2JhbE9iamVjdCgpOwpAQCAtMjcyLDcgKzMwOCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5v
bmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0cihFeGVjU3Rh
CiAgICAgICAgIGN1cnNvci5hcHBlbmRJbnB1dDxNZW1vaXplZERPTVJlc3VsdDxTdHJpbmc+Pihi
aW5kaW5nTmFtZS5nZXQoKS5zdHJpbmcoKSwgbWVtb2l6ZWRSZXN1bHQsIGVjKTsKICAgICAgICAg
SlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQp
OwogICAgICAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAog
ICAgIGlmIChjdXJzb3IuaXNSZXBsYXlpbmcoKSkgewpAQCAtMjgxLDE3ICszMTcsMTkgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNHZXR0ZXJF
eGNlcHRpb25BdHRyKEV4ZWNTdGEKICAgICAgICAgaWYgKGlucHV0ICYmIGlucHV0LT5jb252ZXJ0
VG88U3RyaW5nPihtZW1vaXplZFJlc3VsdCkpIHsKICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIG1lbW9pemVkUmVzdWx0KTsKICAgICAgICAgICAg
IHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgaW5wdXQtPmV4Y2VwdGlvbkNvZGUoKSk7Ci0gICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hl
KHN0YXRlLCBpbXBsLm5vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyKGVjKSk7CiAg
ICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3ROb25k
ZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXIoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY2FzdGVkVGhpcyk7CisKIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljU2V0dGVy
RXhjZXB0aW9uQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CkBAIC0zMDIsNiArMzQwLDEzIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVy
bWluaXN0aWNOb25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0cihFeGVjU3RhCiAgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJU
eXBlRXJyb3IoKnN0YXRlLCAiVGVzdE5vbmRldGVybWluaXN0aWMiLCAibm9uZGV0ZXJtaW5pc3Rp
Y1NldHRlckV4Y2VwdGlvbkF0dHIiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0
dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3ROb25kZXRl
cm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXIoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY2FzdGVkVGhpcykKK3sKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICNpZiBF
TkFCTEUoV0VCX1JFUExBWSkKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3Rh
dGUtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKICAgICBJbnB1dEN1cnNvciYgY3Vyc29yID0gZ2xv
YmFsT2JqZWN0LT5pbnB1dEN1cnNvcigpOwpAQCAtMzEwLDcgKzM1NSw3IEBAIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9u
QXR0cihFeGVjU3RhCiAgICAgICAgIFN0cmluZyBtZW1vaXplZFJlc3VsdCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKS5ub25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0cigpOwogICAgICAg
ICBjdXJzb3IuYXBwZW5kSW5wdXQ8TWVtb2l6ZWRET01SZXN1bHQ8U3RyaW5nPj4oYmluZGluZ05h
bWUuZ2V0KCkuc3RyaW5nKCksIG1lbW9pemVkUmVzdWx0LCAwKTsKICAgICAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOwotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogCiAgICAgaWYgKGN1cnNvci5pc1JlcGxheWluZygpKSB7CkBAIC0zMTgsMTMgKzM2
MywxMyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5p
c3RpY1NldHRlckV4Y2VwdGlvbkF0dHIoRXhlY1N0YQogICAgICAgICBNZW1vaXplZERPTVJlc3Vs
dEJhc2UqIGlucHV0ID0gY3Vyc29yLmZldGNoSW5wdXQ8TWVtb2l6ZWRET01SZXN1bHRCYXNlPigp
OwogICAgICAgICBpZiAoaW5wdXQgJiYgaW5wdXQtPmNvbnZlcnRUbzxTdHJpbmc+KG1lbW9pemVk
UmVzdWx0KSkgewogICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNo
ZShzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAg
IH0KICNlbmRpZgogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
SlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5ub25kZXRlcm1p
bmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCmluZGV4IGIzZmZk
MmJjY2YwNTg2MWQ1MWQ2ODI2Y2Q1NzE3NGZkNDdmYzliYTYuLmEzYTVlNmE2NDY1YmEzZDQ4NDE3
MmNlYWQ1MmVlNTdiMTA2Yjc1NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCkBAIC00OSw2ICs0OSw3IEBACiAjaW5j
bHVkZSAiSlNUZXN0U3ViT2JqLmgiCiAjaW5jbHVkZSAiSlNYUGF0aE5TUmVzb2x2ZXIuaCIKICNp
bmNsdWRlICJMaWZlY3ljbGVDYWxsYmFja1F1ZXVlLmgiCisjaW5jbHVkZSAiT2JqZWN0Q29uc3Ry
dWN0b3IuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAi
U1ZHRG9jdW1lbnQuaCIKICNpbmNsdWRlICJTVkdQb2ludC5oIgpAQCAtODgwLDYgKzg4MSw4IEBA
IGJvb2wgc2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsCiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNv
bnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUsIEpTQzo6SlNPYmplY3QqKTsKIGJvb2wgc2V0SlNUZXN0T2JqQ29uc3RydWN0b3Io
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVl
KTsKIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblRvSlNPTihFeGVjU3RhdGUqKTsKKwogY2xhc3MgSlNUZXN0T2JqUHJvdG90eXBlIDogcHVi
bGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0M6OkpT
Tm9uRmluYWxPYmplY3QgQmFzZTsKQEAgLTEyOTksNiArMTMwMiw3IEBAIHN0YXRpYyBjb25zdCBI
YXNoVGFibGVWYWx1ZSBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KICAgICB7ICJD
T05TVF9WQUxVRV8xNCIsIERvbnREZWxldGUgfCBSZWFkT25seSB8IENvbnN0YW50SW50ZWdlciwg
Tm9JbnRyaW5zaWMsIHsgKGxvbmcgbG9uZykoMHgxYWJjKSB9IH0sCiAgICAgeyAiQ09OU1RfSkFW
QVNDUklQVCIsIERvbnREZWxldGUgfCBSZWFkT25seSB8IENvbnN0YW50SW50ZWdlciwgTm9JbnRy
aW5zaWMsIHsgKGxvbmcgbG9uZykoMTUpIH0gfSwKICAgICB7ICJyZWFkb25seSIsIERvbnREZWxl
dGUgfCBSZWFkT25seSB8IENvbnN0YW50SW50ZWdlciwgTm9JbnRyaW5zaWMsIHsgKGxvbmcgbG9u
ZykoMCkgfSB9LAorICAgIHsgInRvSlNPTiIsIEpTQzo6RnVuY3Rpb24sIE5vSW50cmluc2ljLCB7
IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25Ub0pTT04pLCAoaW50cHRyX3QpICgwKSB9IH0sCiB9OwogCiBjb25zdCBDbGFzc0lu
Zm8gSlNUZXN0T2JqUHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0T2JqZWN0UHJvdG90eXBlIiwg
JkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RPYmpQcm90b3R5cGUp
IH07CkBAIC0xMzc1LDYgKzEzNzksOCBAQCBib29sIEpTVGVzdE9iajo6Z2V0T3duUHJvcGVydHlT
bG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCB1bgogICAgIHJl
dHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRoaXNPYmplY3QsIHN0YXRlLCBp
bmRleCwgc2xvdCk7CiB9CiAKK0pTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlMb25nQXR0ckdldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpSZWFkT25seUxvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTEzODUsMTIgKzEzOTEsMjEgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUmVhZE9ubHlMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmEKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAg
IHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJlYWRPbmx5
TG9uZ0F0dHIiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpS
ZWFkT25seUxvbmdBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUg
anNUZXN0T2JqUmVhZE9ubHlMb25nQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURf
UEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwucmVhZE9ubHlMb25nQXR0cigp
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5U3RyaW5nQXR0ckdldHRlcihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpSZWFkT25seVN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTQwMSwxMiArMTQxNiwyMSBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpSZWFkT25seVN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpcwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0
dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVhZE9ubHlTdHJp
bmdBdHRyIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqUmVh
ZE9ubHlTdHJpbmdBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUg
anNUZXN0T2JqUmVhZE9ubHlTdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNF
RF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwu
cmVhZE9ubHlTdHJpbmdBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlU
ZXN0T2JqQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMp
OworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVRlc3RPYmpBdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVj
dCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE0MTcsMzIgKzE0
NDEsNTkgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlUZXN0T2JqQXR0cihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGkKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJU
ZXN0T2JqIiwgInJlYWRPbmx5VGVzdE9iakF0dHIiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1Rlc3RPYmpSZWFkT25seVRlc3RPYmpBdHRyR2V0dGVyKHN0YXRlLCBjYXN0
ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlUZXN0T2JqQXR0ckdldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMo
c3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnJlYWRPbmx5VGVzdE9iakF0
dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1JlYWRPbmx5
TG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsK
KwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNSZWFkT25seUxvbmdB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNSZWFk
T25seUxvbmdBdHRyR2V0dGVyKHN0YXRlLCBudWxscHRyKSk7Cit9CisKK0pTVmFsdWUganNUZXN0
T2JqQ29uc3RydWN0b3JTdGF0aWNSZWFkT25seUxvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwor
ICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVt
YmVyKFRlc3RPYmo6OnN0YXRpY1JlYWRPbmx5TG9uZ0F0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBq
c1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29u
c3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBVTlVT
RURfUEFSQU0oc2xvdEJhc2UpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2Jq
Q29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyR2V0dGVyKHN0YXRlLCBudWxscHRyKSk7Cit9CisK
K0pTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyR2V0dGVyKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBUZXN0T2JqOjpzdGF0aWNTdHJpbmdBdHRyKCkp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0
OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JUZXN0U3ViT2JqR2V0dGVyKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9iakNvbnN0cnVjdG9yVGVzdFN1Yk9iaihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xNDUzLDkgKzE1MDQsMTggQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JUZXN0U3ViT2JqKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHQKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAg
IHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIlRlc3RTdWJP
YmoiKTsKICAgICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RTdWJPYmo6Omdl
dENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSkpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqQ29uc3RydWN0b3JUZXN0U3ViT2Jq
R2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7CiB9CiAKK0pTVmFsdWUganNUZXN0T2JqQ29uc3Ry
dWN0b3JUZXN0U3ViT2JqR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVk
VGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0
ZWRUaGlzKTsKKyAgICByZXR1cm4gSlNUZXN0U3ViT2JqOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+
dm0oKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpOworfQorCisKK0pTVmFsdWUganNUZXN0
T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJh
c2UpCiB7CkBAIC0xNDY3LDE1ICsxNTI3LDI0IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialRl
c3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwKICAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRl
clR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIlRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5n
Iik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqVGVzdFN1Yk9i
akVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwor
fQorCitKU1ZhbHVlIGpzVGVzdE9ialRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0
b3JHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcy0+d3JhcHBlZCgpLmZyYW1lKCkpKQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICBTZXR0aW5ncyYgc2V0dGluZ3MgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCkuZnJhbWUoKS0+c2V0dGluZ3MoKTsKICAgICBpZiAoIXNldHRpbmdzLnRlc3RTZXR0aW5nRW5h
YmxlZCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0U3ViT2JqOjpnZXRDb25zdHJ1Y3Rvcihz
dGF0ZS0+dm0oKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIEpTVGVzdFN1Yk9iajo6Z2V0Q29uc3RydWN0b3Io
c3RhdGUtPnZtKCksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKIH0KIAogCitKU1ZhbHVl
IGpzVGVzdE9iakVudW1BdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakVudW1BdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCog
c2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE0ODYsMTIgKzE1NTUs
MjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqRW51bUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm8KICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0
T2JqIiwgImVudW1BdHRyIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNU
ZXN0T2JqRW51bUF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBq
c1Rlc3RPYmpFbnVtQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2Fz
dGVkVGhpcyk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmVudW1BdHRyKCkp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0
OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqQnl0ZUF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQnl0
ZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpA
QCAtMTUwMiwxMiArMTU4MCwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpCeXRlQXR0cihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBybwogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVy
cm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiYnl0ZUF0dHIiKTsKICAgICB9CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1Rlc3RPYmpCeXRlQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykp
OworfQorCitKU1ZhbHVlIGpzVGVzdE9iakJ5dGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAg
IFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5ieXRlQXR0cigp
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iak9jdGV0QXR0ckdldHRlcihFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpP
Y3RldEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwpAQCAtMTUxOCwxMiArMTYwNSwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpPY3RldEF0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcgogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlw
ZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAib2N0ZXRBdHRyIik7CiAgICAgfQorICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqT2N0ZXRBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRU
aGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqT2N0ZXRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5vY3Rl
dEF0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpTaG9ydEF0dHJHZXR0ZXIoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKQEAgLTE1MzQsMTIgKzE2MzAsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
U2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHIK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dl
dHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInNob3J0QXR0ciIpOwogICAgIH0KKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialNob3J0QXR0ckdldHRlcihzdGF0ZSwg
Y2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9ialNob3J0QXR0ckdldHRlcihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGlt
cGwuc2hvcnRBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0
ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpOworCiBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2Up
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE1NTAsMTIgKzE2NTUsMjEgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmEKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAg
ICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImNs
YW1wZWRTaG9ydEF0dHIiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rl
c3RPYmpDbGFtcGVkU2hvcnRBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pT
VmFsdWUganNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBV
TlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuY2xhbXBlZFNob3J0
QXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iakVuZm9yY2VSYW5nZVNob3J0QXR0ckdl
dHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFz
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTU2NiwxMiArMTY4MCwyMSBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
ICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAi
ZW5mb3JjZVJhbmdlU2hvcnRBdHRyIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNUZXN0T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlz
KSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyR2V0dGVyKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIo
aW1wbC5lbmZvcmNlUmFuZ2VTaG9ydEF0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpV
bnNpZ25lZFNob3J0QXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0cihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNP
YmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xNTgyLDEy
ICsxNzA1LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWCiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRl
LCAiVGVzdE9iaiIsICJ1bnNpZ25lZFNob3J0QXR0ciIpOwogICAgIH0KKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyR2V0dGVyKHN0YXRlLCBjYXN0
ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHJHZXR0ZXIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJl
cihpbXBsLnVuc2lnbmVkU2hvcnRBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqTG9u
Z0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwog
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTU5OCwxMiArMTczMCwyMSBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFBybwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAg
ICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibG9uZ0F0
dHIiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpMb25nQXR0
ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iakxvbmdB
dHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNOdW1iZXIoaW1wbC5sb25nQXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iakxv
bmdMb25nQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMp
OworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90
QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTYxNCwxMiArMTc1NSwyMSBA
QCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoi
LCAibG9uZ0xvbmdBdHRyIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNU
ZXN0T2JqTG9uZ0xvbmdBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFs
dWUganNUZXN0T2JqTG9uZ0xvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9i
aiogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9Q
QVJBTShjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5sb25nTG9uZ0F0dHIoKSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0ckdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpVbnNpZ25lZExvbmdMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xNjMwLDEyICsxNzgwLDIxIEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1
cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ1bnNpZ25lZExvbmdM
b25nQXR0ciIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialVu
c2lnbmVkTG9uZ0xvbmdBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFs
dWUganNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAg
VU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLnVuc2lnbmVkTG9u
Z0xvbmdBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0ckdldHRlcihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKQEAgLTE2NDYsMTIgKzE4MDUsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFAKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0
aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInN0cmluZ0F0dHIiKTsKICAg
ICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpTdHJpbmdBdHRyR2V0dGVy
KHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0ckdl
dHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
U3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnN0cmluZ0F0dHIoKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1
ZSBqc1Rlc3RPYmpUZXN0T2JqQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0T2JqQXR0cihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNP
YmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xNjYyLDEy
ICsxODMwLDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialRlc3RPYmpBdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUs
ICJUZXN0T2JqIiwgInRlc3RPYmpBdHRyIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNUZXN0T2JqVGVzdE9iakF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30K
KworSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0T2JqQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBV
TlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCBpbXBsLnRlc3RPYmpBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0
T2JqVGVzdE51bGxhYmxlT2JqQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAg
LTE2NzgsMTIgKzE4NTUsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVGVzdE51bGxhYmxl
T2JqQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGkKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJv
cigqc3RhdGUsICJUZXN0T2JqIiwgInRlc3ROdWxsYWJsZU9iakF0dHIiKTsKICAgICB9CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyR2V0dGVy
KHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqVGVzdE51bGxhYmxl
T2JqQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJl
c3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnRlc3RO
dWxsYWJsZU9iakF0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwor
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpMZW5pZW50VGVzdE9i
akF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwog
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xv
dEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE2OTQsMTIgKzE4ODAsMjEg
QEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXMKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
fQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRy
R2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqTGVuaWVu
dFRlc3RPYmpBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhp
cykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRU
aGlzKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwu
bGVuaWVudFRlc3RPYmpBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqVW5mb3JnZWFi
bGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcyk7CisK
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialVuZm9yZ2VhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RC
YXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xNzEwLDEyICsxOTA1LDIxIEBA
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialVuZm9yZ2VhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkg
ewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIs
ICJ1bmZvcmdlYWJsZUF0dHIiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1Rlc3RPYmpVbmZvcmdlYWJsZUF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKwor
SlNWYWx1ZSBqc1Rlc3RPYmpVbmZvcmdlYWJsZUF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAg
VU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwg
aW1wbC51bmZvcmdlYWJsZUF0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdB
dHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0dldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRy
VHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xNzI2LDEyICsxOTMwLDIxIEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1
cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJzdHJpbmdBdHRyVHJl
YXRpbmdOdWxsQXNFbXB0eVN0cmluZyIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nR2V0dGVyKHN0
YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0clRyZWF0
aW5nTnVsbEFzRW1wdHlTdHJpbmdHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFN
KGNhc3RlZFRoaXMpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5zdHJpbmdB
dHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZygpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9i
alhNTE9iakF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
KTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqWE1MT2JqQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RC
YXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xNzQyLDEyICsxOTU1LDIxIEBA
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialhNTE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkg
ewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIs
ICJYTUxPYmpBdHRyIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0
T2JqWE1MT2JqQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpz
VGVzdE9ialhNTE9iakF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNh
c3RlZFRoaXMpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
SlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
aW1wbC54bWxPYmpBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqQ3JlYXRlR2V0dGVy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iakNyZWF0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CkBAIC0xNzU4LDEyICsxOTgwLDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iakNyZWF0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhy
b3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJjcmVhdGUiKTsKICAgICB9Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpDcmVhdGVHZXR0ZXIoc3RhdGUsIGNh
c3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpDcmVhdGVHZXR0ZXIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4oaW1wbC5p
c0NyZWF0ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJH
ZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNl
KQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xNzc0LDEyICsyMDA1LDIxIEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewog
ICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJy
ZWZsZWN0ZWRTdHJpbmdBdHRyIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwor
fQorCitKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNo
ZShzdGF0ZSwgaW1wbC5mYXN0R2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVj
dGVkc3RyaW5nYXR0ckF0dHIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZElu
dGVncmFsQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMp
OworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2Jq
ZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTc5MCwxMiAr
MjAzMCwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdAogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwg
IlRlc3RPYmoiLCAicmVmbGVjdGVkSW50ZWdyYWxBdHRyIik7CiAgICAgfQorICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyR2V0dGVyKHN0YXRl
LCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxB
dHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNOdW1iZXIoaW1wbC5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6
OnJlZmxlY3RlZGludGVncmFsYXR0ckF0dHIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialJl
ZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVu
c2lnbmVkSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKQEAgLTE4MDYsMTIgKzIwNTUsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEoKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJv
d0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJlZmxlY3RlZFVuc2lnbmVkSW50
ZWdyYWxBdHRyIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2Jq
UmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsK
K30KKworSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ckdldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVt
YmVyKHN0ZDo6bWF4KDAsIGltcGwuZ2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5h
bWVzOjpyZWZsZWN0ZWR1bnNpZ25lZGludGVncmFsYXR0ckF0dHIpKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1
ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0
ZWRCb29sZWFuQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CkBAIC0xODIyLDEyICsyMDgwLDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJl
ZmxlY3RlZEJvb2xlYW5BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoCiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJyZWZsZWN0ZWRCb29sZWFuQXR0ciIpOwog
ICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialJlZmxlY3RlZEJvb2xl
YW5BdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2Jq
UmVmbGVjdGVkQm9vbGVhbkF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFN
KGNhc3RlZFRoaXMpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4oaW1wbC5mYXN0SGFzQXR0cmlidXRlKFdlYkNv
cmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkYm9vbGVhbmF0dHJBdHRyKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1
ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVS
TEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpA
QCAtMTgzOCwxMiArMjEwNSwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRV
UkxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYQogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVy
cm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVmbGVjdGVkVVJMQXR0ciIpOwogICAgIH0KKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialJlZmxlY3RlZFVSTEF0dHJHZXR0ZXIoc3Rh
dGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRy
R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuZ2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhU
TUxOYW1lczo6cmVmbGVjdGVkdXJsYXR0ckF0dHIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9i
alJlZmxlY3RlZFN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0x
ODU0LDEyICsyMTMwLDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmlu
Z0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpCiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3Io
KnN0YXRlLCAiVGVzdE9iaiIsICJyZWZsZWN0ZWRTdHJpbmdBdHRyIik7CiAgICAgfQorICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckdldHRlcihz
dGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmlu
Z0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQorewor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1
bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5mYXN0R2V0QXR0cmlidXRlKFdlYkNv
cmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFN0cmluZ0F0dHJBdHRyKSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNW
YWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHJHZXR0ZXIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE4NzAsMTIgKzIxNTUsMjEgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1YKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAg
IHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJlZmxlY3Rl
ZEN1c3RvbUludGVncmFsQXR0ciIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVk
VGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0
ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzTnVtYmVyKGltcGwuZ2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpj
dXN0b21Db250ZW50SW50ZWdyYWxBdHRyQXR0cikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2Jq
UmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3Vz
dG9tQm9vbGVhbkF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwpAQCAtMTg4NiwxMiArMjE4MCwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpS
ZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYQog
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0
dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0
dHIiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpSZWZsZWN0
ZWRDdXN0b21Cb29sZWFuQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1Zh
bHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyR2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKGltcGwuZmFz
dEhhc0F0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRCb29sZWFuQXR0
ckF0dHIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHJH
ZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RC
YXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xOTAyLDEzICsyMjA1LDIyIEBA
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7
CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwg
InJlZmxlY3RlZEN1c3RvbVVSTEF0dHIiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRU
aGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0ckdldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3Ry
aW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFt
ZXM6OmN1c3RvbUNvbnRlbnRVUkxBdHRyQXR0cikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKICNpZiBFTkFCTEUoVEVTVF9G
RUFUVVJFKQorSlNWYWx1ZSBqc1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlR2V0dGVy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iakVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFz
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTkxOSwxMyArMjIzMSwyMiBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
ICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAi
ZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVGVzdE9iakVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNh
c3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmli
dXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0
ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAogI2VuZGlmCiAKK0pTVmFsdWUganNUZXN0T2JqVHlwZWRBcnJheUF0dHJHZXR0
ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqVHlwZWRBcnJheUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTkzNiwxMiArMjI1NywyMSBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpUeXBlZEFycmF5QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAg
cmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAidHlwZWRBcnJh
eUF0dHIiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpUeXBl
ZEFycmF5QXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVz
dE9ialR5cGVkQXJyYXlBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShj
YXN0ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCks
IGltcGwudHlwZWRBcnJheUF0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0
aEdldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlv
bihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0x
OTUyLDE0ICsyMjgyLDIzIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJXaXRoR2V0dGVy
RXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlCiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3Io
KnN0YXRlLCAiVGVzdE9iaiIsICJhdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOwogICAgIH0KKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakF0dHJXaXRoR2V0dGVyRXhjZXB0aW9u
R2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqQXR0cldp
dGhHZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNh
c3RlZFRoaXMpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBs
LmF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVjKSk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRl
LCBlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbldp
dGhNZXNzYWdlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcyk7
CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uV2l0aE1l
c3NhZ2UoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpA
QCAtMTk3MCwxNCArMjMwOSwyMyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aEdl
dHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuYwogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVy
cm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiYXR0cldpdGhHZXR0ZXJFeGNlcHRpb25XaXRoTWVzc2Fn
ZSIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakF0dHJXaXRo
R2V0dGVyRXhjZXB0aW9uV2l0aE1lc3NhZ2VHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30K
KworSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlR2V0
dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBFeGNl
cHRpb25Db2RlV2l0aE1lc3NhZ2UgZWM7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuYXR0cldpdGhHZXR0
ZXJFeGNlcHRpb25XaXRoTWVzc2FnZShlYykpOwogICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwg
ZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25HZXR0
ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFz
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTk4OCwxMiArMjMzNiwyMSBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
ICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAi
YXR0cldpdGhTZXR0ZXJFeGNlcHRpb24iKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1Rlc3RPYmpBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcihzdGF0ZSwgY2FzdGVk
VGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uR2V0
dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNO
dW1iZXIoaW1wbC5hdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpz
VGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uV2l0aE1lc3NhZ2VHZXR0ZXIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25XaXRoTWVzc2FnZShFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNl
KQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMDA0LDEyICsyMzYxLDIxIEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uV2l0aE1lc3NhZ2Uo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewog
ICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJh
dHRyV2l0aFNldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlIik7CiAgICAgfQorICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25XaXRoTWVzc2Fn
ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iakF0dHJX
aXRoU2V0dGVyRXhjZXB0aW9uV2l0aE1lc3NhZ2VHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5V
U0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmF0dHJXaXRoU2V0dGVy
RXhjZXB0aW9uV2l0aE1lc3NhZ2UoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdB
dHRyV2l0aEdldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aEdl
dHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CkBAIC0yMDIwLDE0ICsyMzg2LDIzIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0
cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKCiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2Vw
dGlvbiIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialN0cmlu
Z0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisK
K0pTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
SlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5zdHJpbmdBdHRy
V2l0aEdldHRlckV4Y2VwdGlvbihlYykpOwogICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0
OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25H
ZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0
KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjAzOCwxMiArMjQx
MywyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2Vw
dGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSgogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRl
c3RPYmoiLCAic3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24iKTsKICAgICB9CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlv
bkdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9ialN0cmlu
Z0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9i
aiogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9Q
QVJBTShjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuc3Ry
aW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpT
dHJpY3RUeXBlQ2hlY2tpbmdBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaWN0VHlwZUNo
ZWNraW5nQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKQEAgLTIwNTQsMTIgKzI0MzgsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
U3RyaWN0VHlwZUNoZWNraW5nQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1YK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dl
dHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInN0cmljdFR5cGVDaGVja2luZ0F0dHJp
YnV0ZSIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialN0cmlj
dFR5cGVDaGVja2luZ0F0dHJpYnV0ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitK
U1ZhbHVlIGpzVGVzdE9ialN0cmljdFR5cGVDaGVja2luZ0F0dHJpYnV0ZUdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnN0cmljdFR5cGVDaGVja2luZ0F0dHJpYnV0
ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iakN1c3RvbUF0dHJHZXR0ZXIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqQ3VzdG9tQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CkBAIC0yMDcwLDEwICsyNDYzLDE5IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakN1
c3RvbUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQCiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJjdXN0b21BdHRyIik7CiAgICAgfQotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+Y3VzdG9tQXR0cigqc3RhdGUpKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakN1c3RvbUF0dHJHZXR0ZXIoc3Rh
dGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpDdXN0b21BdHRyR2V0dGVy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKKyAgICByZXR1cm4g
Y2FzdGVkVGhpcy0+Y3VzdG9tQXR0cigqc3RhdGUpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2Jq
T25mb29HZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwog
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqT25mb28oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjA4NCwxMSArMjQ4NiwyMCBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpPbmZvbyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcgogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAg
cmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAib25mb28iKTsK
ICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpPbmZvb0dldHRlcihz
dGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iak9uZm9vR2V0dGVyKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZXZlbnRIYW5kbGVyQXR0cmli
dXRlKGNhc3RlZFRoaXMtPndyYXBwZWQoKSwgZXZlbnROYW1lcygpLmZvb0V2ZW50KSk7CisgICAg
cmV0dXJuIGV2ZW50SGFuZGxlckF0dHJpYnV0ZShjYXN0ZWRUaGlzLT53cmFwcGVkKCksIGV2ZW50
TmFtZXMoKS5mb29FdmVudCk7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpPbndlYmtpdGZvb0dl
dHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpPbndlYmtpdGZvbyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMDk5LDExICsyNTEwLDIwIEBAIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iak9ud2Via2l0Zm9vKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJl
dHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm9ud2Via2l0Zm9v
Iik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqT253ZWJraXRm
b29HZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpPbndl
YmtpdGZvb0dldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7
CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGV2
ZW50SGFuZGxlckF0dHJpYnV0ZShjYXN0ZWRUaGlzLT53cmFwcGVkKCksIGV2ZW50TmFtZXMoKS5m
b29FdmVudCkpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIHJldHVybiBldmVudEhhbmRsZXJBdHRyaWJ1dGUoY2FzdGVkVGhpcy0+
d3JhcHBlZCgpLCBldmVudE5hbWVzKCkuZm9vRXZlbnQpOwogfQogCiAKK0pTVmFsdWUganNUZXN0
T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRT
dGF0ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CkBAIC0yMTE0LDEyICsyNTM0LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdp
dGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1CiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUi
KTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpXaXRoU2NyaXB0
U3RhdGVBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBq
c1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAg
VU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLndpdGhTY3JpcHRT
dGF0ZUF0dHJpYnV0ZSgqc3RhdGUpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialdpdGhDYWxs
V2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE9iaiogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhDYWxs
V2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTIxMzAsMTIgKzI1NTksMjEgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUoRXhl
Y1N0YXRlKiBzdGF0ZSwKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAg
IHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIndpdGhDYWxs
V2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlIik7CiAgICAgfQorICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1
dGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpXaXRo
Q2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwud2l0aENhbGxX
aXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUoKnN0YXRlKSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBq
c1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZUdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RC
YXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMTQ2LDE1ICsyNTg0LDI0IEBA
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmli
dXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkg
ewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIs
ICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZSIpOwogICAgIH0KKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0
cmlidXRlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2Jq
V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLndp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKCpjb250ZXh0KSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNW
YWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNHZXR0ZXIoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2Up
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTIxNjUsMTQgKzI2MTIsMjMgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWQKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAg
ICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIndp
dGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0dldHRlcihz
dGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRTdGF0
ZUF0dHJpYnV0ZVJhaXNlc0dldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2Fz
dGVkVGhpcyk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJh
aXNlcygqc3RhdGUsIGVjKSk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
IAorSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJh
aXNlc0dldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpOworCiBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0
ZVJhaXNlcyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CkBAIC0yMTgzLDE3ICsyNjM5LDI2IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSogc3RhCiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBl
RXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJp
YnV0ZVJhaXNlcyIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9i
aldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzR2V0dGVyKHN0YXRlLCBj
YXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBdHRyaWJ1dGVSYWlzZXNHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFN
KGNhc3RlZFRoaXMpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGF1dG8qIGNvbnRl
eHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghY29udGV4dCkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVj
dCgpLCBpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKCpjb250
ZXh0LCBlYykpOwogICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFs
dWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJp
YnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpOworCiBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlw
dFN0YXRlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKQEAgLTIyMDQsMTUgKzI2NjksMjQgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZShFeGVjU3QK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dl
dHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRl
QXR0cmlidXRlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0
T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZUdldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0byog
Y29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFs
T2JqZWN0KCksIGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0
dHJpYnV0ZSgqc3RhdGUsICpjb250ZXh0KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpXaXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzR2V0dGVy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRy
aWJ1dGVSYWlzZXMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwpAQCAtMjIyMywxNyArMjY5NywyNiBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKAogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVy
VHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
bmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3Rh
dGVBdHRyaWJ1dGVSYWlzZXNHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1
ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmli
dXRlUmFpc2VzR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykK
K3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlz
KTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1
ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC53
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKCpz
dGF0ZSwgKmNvbnRleHQsIGVjKSk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlw
dFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZShFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3Qq
IHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMjQ0LDE1ICsyNzI3
LDI0IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmliCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVz
dE9iaiIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNl
c0F0dHJpYnV0ZSIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9i
aldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmli
dXRlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqV2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGVH
ZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIGF1
dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEds
b2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghY29udGV4
dCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3Rh
dGVXaXRoU3BhY2VzQXR0cmlidXRlKCpzdGF0ZSwgKmNvbnRleHQpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVl
IGpzVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGVHZXR0ZXIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZShFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNP
YmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMjYzLDEz
ICsyNzU1LDIyIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNB
bmRDYWxsU3RhY2tBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0CiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRl
LCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlIik7
CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqV2l0aFNjcmlwdEFy
Z3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwor
fQorCitKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRy
aWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQorewor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1
bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2Ny
aXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlKCkpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKICNpZiBFTkFCTEUo
Q29uZGl0aW9uMSkKK0pTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMUdldHRlcihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKQEAgLTIyODAsMTQgKzI3ODEsMjMgQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmEKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVy
biB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImNvbmRpdGlvbmFsQXR0
cjEiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpDb25kaXRp
b25hbEF0dHIxR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0
T2JqQ29uZGl0aW9uYWxBdHRyMUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0o
Y2FzdGVkVGhpcyk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuY29uZGl0aW9uYWxBdHRyMSgpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIp
CitKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29u
ZGl0aW9uYWxBdHRyMihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CkBAIC0yMjk4LDE0ICsyODA4LDIzIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNv
bmRpdGlvbmFsQXR0cjIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhCiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJjb25kaXRpb25hbEF0dHIyIik7CiAgICAg
fQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMkdl
dHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlv
bmFsQXR0cjJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQor
eworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc051bWJlcihpbXBsLmNvbmRpdGlvbmFsQXR0cjIoKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKICNlbmRpZgog
CiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQorSlNWYWx1ZSBq
c1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0
cjMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAt
MjMxNiwxNCArMjgzNSwyMyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0
dHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYQogICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9y
KCpzdGF0ZSwgIlRlc3RPYmoiLCAiY29uZGl0aW9uYWxBdHRyMyIpOwogICAgIH0KKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjNHZXR0ZXIoc3RhdGUs
IGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzR2V0
dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNO
dW1iZXIoaW1wbC5jb25kaXRpb25hbEF0dHIzKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJM
RShDb25kaXRpb24xKQorSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0
b3JHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVj
dCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTIzMzQsMTIgKzI4
NjIsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1YKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJU
ZXN0T2JqIiwgImNvbmRpdGlvbmFsQXR0cjQiKTsKICAgICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKU1Rlc3RPYmplY3RBOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVz
dE9iakNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3RvckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykp
OworfQorCitKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3RvckdldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CisgICAgcmV0dXJu
IEpTVGVzdE9iamVjdEE6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSk7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpICYm
IEVOQUJMRShDb25kaXRpb24yKQorSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29u
c3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsK
KwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBK
U09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTIzNTAs
MTIgKzI4ODcsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1YKICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3Rh
dGUsICJUZXN0T2JqIiwgImNvbmRpdGlvbmFsQXR0cjUiKTsKICAgICB9Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1Rlc3RPYmplY3RCOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwg
Y2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3RvckdldHRlcihzdGF0ZSwgY2FzdGVk
VGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3Rv
ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CisgICAg
cmV0dXJuIEpTVGVzdE9iamVjdEI6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSk7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlv
bjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQorSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0
dHI2Q29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAg
LTIzNjYsMTEgKzI5MTIsMjAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxB
dHRyNkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1YKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJv
cigqc3RhdGUsICJUZXN0T2JqIiwgImNvbmRpdGlvbmFsQXR0cjYiKTsKICAgICB9Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RPYmplY3RDOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+
dm0oKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvckdldHRlcihzdGF0ZSwg
Y2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25z
dHJ1Y3RvckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7
CisgICAgcmV0dXJuIEpTVGVzdE9iamVjdEM6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7CiB9CiAKICNlbmRpZgogCitKU1ZhbHVlIGpzVGVz
dE9iakNhY2hlZEF0dHJpYnV0ZTFHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMShF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwg
SlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMzgx
LDE1ICsyOTM2LDI0IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTEo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhCiAgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0
YXRlLCAiVGVzdE9iaiIsICJjYWNoZWRBdHRyaWJ1dGUxIik7CiAgICAgfQorICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMUdldHRlcihzdGF0ZSwgY2Fz
dGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTFHZXR0ZXIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIGlmIChKU1Zh
bHVlIGNhY2hlZFZhbHVlID0gY2FzdGVkVGhpcy0+bV9jYWNoZWRBdHRyaWJ1dGUxLmdldCgpKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhY2hlZFZhbHVlKTsKKyAgICAgICAgcmV0
dXJuIGNhY2hlZFZhbHVlOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLmNhY2hlZEF0dHJpYnV0ZTEoKTsKICAgICBjYXN0
ZWRUaGlzLT5tX2NhY2hlZEF0dHJpYnV0ZTEuc2V0KHN0YXRlLT52bSgpLCBjYXN0ZWRUaGlzLCBy
ZXN1bHQpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4g
cmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMkdldHRlcihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI0MDAsMTUgKzI5NjQsMjQgQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmEKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJl
dHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImNhY2hlZEF0dHJp
YnV0ZTIiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpDYWNo
ZWRBdHRyaWJ1dGUyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNU
ZXN0T2JqQ2FjaGVkQXR0cmlidXRlMkdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFS
QU0oY2FzdGVkVGhpcyk7CiAgICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUgPSBjYXN0ZWRUaGlz
LT5tX2NhY2hlZEF0dHJpYnV0ZTIuZ2V0KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoY2FjaGVkVmFsdWUpOworICAgICAgICByZXR1cm4gY2FjaGVkVmFsdWU7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwu
Y2FjaGVkQXR0cmlidXRlMigpOwogICAgIGNhc3RlZFRoaXMtPm1fY2FjaGVkQXR0cmlidXRlMi5z
ZXQoc3RhdGUtPnZtKCksIGNhc3RlZFRoaXMsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rl
c3RPYmpBbnlBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQW55QXR0cmlidXRlKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVj
dCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI0MTksMTIgKzI5
OTIsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQW55QXR0cmlidXRlKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJU
ZXN0T2JqIiwgImFueUF0dHJpYnV0ZSIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVGVzdE9iakFueUF0dHJpYnV0ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQor
CitKU1ZhbHVlIGpzVGVzdE9iakFueUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBV
TlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwuYW55QXR0cmlidXRlKCk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
IAorSlNWYWx1ZSBqc1Rlc3RPYmpDb250ZW50RG9jdW1lbnRHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29u
dGVudERvY3VtZW50KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKQEAgLTI0MzUsMTEgKzMwMTcsMjAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29u
dGVudERvY3VtZW50KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWwKICAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRl
clR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImNvbnRlbnREb2N1bWVudCIpOwogICAgIH0K
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakNvbnRlbnREb2N1bWVudEdldHRl
cihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iakNvbnRlbnREb2N1
bWVudEdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKHN0YXRlLCBpbXBsLmNvbnRlbnREb2N1
bWVudCgpKSA/IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmNv
bnRlbnREb2N1bWVudCgpKSA6IGpzTnVsbCgpKTsKKyAgICByZXR1cm4gc2hvdWxkQWxsb3dBY2Nl
c3NUb05vZGUoc3RhdGUsIGltcGwuY29udGVudERvY3VtZW50KCkpID8gdG9KUyhzdGF0ZSwgY2Fz
dGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwuY29udGVudERvY3VtZW50KCkpIDoganNOdWxs
KCk7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpNdXRhYmxlUG9pbnRHZXR0ZXIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqTXV0YWJsZVBvaW50KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKQEAgLTI0NTAsMTIgKzMwNDEsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
TXV0YWJsZVBvaW50KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dl
dHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm11dGFibGVQb2ludCIpOwogICAgIH0K
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iak11dGFibGVQb2ludEdldHRlcihz
dGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iak11dGFibGVQb2ludEdl
dHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBTVkdTdGF0aWNQcm9wZXJ0eVRl
YXJPZmY8VGVzdE9iaiwgU1ZHUG9pbnQ+OjpjcmVhdGUoaW1wbCwgaW1wbC5tdXRhYmxlUG9pbnQo
KSwgJlRlc3RPYmo6OnVwZGF0ZU11dGFibGVQb2ludCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0
T2JqSW1tdXRhYmxlUG9pbnRHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqSW1tdXRhYmxlUG9pbnQoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2Jq
ZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjQ2NiwxMiAr
MzA2NiwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpJbW11dGFibGVQb2ludChFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdQogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwg
IlRlc3RPYmoiLCAiaW1tdXRhYmxlUG9pbnQiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1Rlc3RPYmpJbW11dGFibGVQb2ludEdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykp
OworfQorCitKU1ZhbHVlIGpzVGVzdE9iakltbXV0YWJsZVBvaW50R2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIFNWR1Byb3BlcnR5VGVhck9mZjxTVkdQb2ludD46OmNyZWF0
ZShpbXBsLmltbXV0YWJsZVBvaW50KCkpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialN0cmF3
YmVycnlHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwog
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyYXdiZXJyeShFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQog
ewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yNDgyLDEyICszMDkxLDIxIEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmF3YmVycnkoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAg
ICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJzdHJh
d2JlcnJ5Iik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqU3Ry
YXdiZXJyeUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9i
alN0cmF3YmVycnlHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRo
aXMpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1
ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmJsdWViZXJyeSgpKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpz
VGVzdE9ialN0cmljdEZsb2F0R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmljdEZsb2F0KEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVj
dCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI0OTgsMTIgKzMx
MTYsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaWN0RmxvYXQoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRl
c3RPYmoiLCAic3RyaWN0RmxvYXQiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1Rlc3RPYmpTdHJpY3RGbG9hdEdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitK
U1ZhbHVlIGpzVGVzdE9ialN0cmljdEZsb2F0R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNF
RF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5zdHJpY3RGbG9hdCgpKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iakRlc2NyaXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakRl
c2NyaXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKQEAgLTI1MTQsMTIgKzMxNDEsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqRGVzY3Jp
cHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLAogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlw
ZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiZGVzY3JpcHRpb24iKTsKICAgICB9CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpEZXNjcmlwdGlvbkdldHRlcihzdGF0ZSwgY2Fz
dGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iakRlc2NyaXB0aW9uR2V0dGVyKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1w
bC5kZXNjcmlwdGlvbigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iaklkR2V0dGVyKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9iaklkKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKQEAgLTI1MzAsMTIgKzMxNjYsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqSWQoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU4KICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5
cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImlkIik7CiAgICAgfQorICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNUZXN0T2JqSWRHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKwor
SlNWYWx1ZSBqc1Rlc3RPYmpJZEdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0o
Y2FzdGVkVGhpcyk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuaWQoKSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBq
c1Rlc3RPYmpIYXNoR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakhhc2goRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkK
IHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjU0NiwxMiArMzE5MSwyMSBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpIYXNoKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAg
ICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiaGFz
aCIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakhhc2hHZXR0
ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpIYXNoR2V0dGVy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJp
bmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuaGFzaCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9i
alJlcGxhY2VhYmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlcGxhY2VhYmxlQXR0cmli
dXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAg
LTI1NjIsMTIgKzMyMTYsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVwbGFjZWFibGVB
dHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGgKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJv
cigqc3RhdGUsICJUZXN0T2JqIiwgInJlcGxhY2VhYmxlQXR0cmlidXRlIik7CiAgICAgfQorICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGVHZXR0
ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpSZXBsYWNlYWJs
ZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMp
Cit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhp
cyk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzTnVtYmVyKGltcGwucmVwbGFjZWFibGVBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAor
SlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZURvdWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpOdWxsYWJsZURvdWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yNTc4LDEyICszMjQxLDIxIEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9iak51bGxhYmxlRG91YmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1
cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJudWxsYWJsZURvdWJs
ZUF0dHJpYnV0ZSIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9i
ak51bGxhYmxlRG91YmxlQXR0cmlidXRlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisK
K0pTVmFsdWUganNUZXN0T2JqTnVsbGFibGVEb3VibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSB0b051bGxhYmxlSlNOdW1i
ZXIoaW1wbC5udWxsYWJsZURvdWJsZUF0dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVz
dE9iak51bGxhYmxlTG9uZ0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUxvbmdB
dHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwpAQCAtMjU5NCwxMiArMzI2NiwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJs
ZUxvbmdBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdAogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlw
ZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibnVsbGFibGVMb25nQXR0cmlidXRlIik7CiAgICAg
fQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqTnVsbGFibGVMb25nQXR0cmli
dXRlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqTnVs
bGFibGVMb25nQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShj
YXN0ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9OdWxsYWJsZUpTTnVtYmVyKGltcGwubnVsbGFibGVMb25nQXR0
cmlidXRlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1
cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqTnVsbGFibGVCb29sZWFuQXR0cmli
dXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcyk7CisKIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZShFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3Qq
IHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yNjEwLDEyICszMjkx
LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZShF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVz
dE9iaiIsICJudWxsYWJsZUJvb2xlYW5BdHRyaWJ1dGUiKTsKICAgICB9CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1Rlc3RPYmpOdWxsYWJsZUJvb2xlYW5BdHRyaWJ1dGVHZXR0ZXIoc3Rh
dGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUJvb2xlYW5B
dHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQor
eworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc0Jvb2xlYW4oaW1wbC5udWxsYWJsZUJvb2xlYW5BdHRyaWJ1dGUoKSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
IAorSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ0F0dHJpYnV0ZUdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpOdWxsYWJsZVN0cmluZ0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yNjI2LDEyICszMzE2LDIxIEBAIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBy
ZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJudWxsYWJsZVN0
cmluZ0F0dHJpYnV0ZSIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVz
dE9iak51bGxhYmxlU3RyaW5nQXR0cmlidXRlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9
CisKK0pTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ09yTnVs
bChzdGF0ZSwgaW1wbC5udWxsYWJsZVN0cmluZ0F0dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVl
IGpzVGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
ak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI2NDIsMTIgKzMzNDEsMjEgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEoKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAg
IHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm51bGxhYmxl
TG9uZ1NldHRhYmxlQXR0cmlidXRlIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNh
c3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUxvbmdTZXR0YWJsZUF0
dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJl
c3VsdCA9IHRvTnVsbGFibGVKU051bWJlcihpbXBsLm51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmli
dXRlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4g
cmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0
dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpOwor
CiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRl
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
LCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI2
NTgsMTIgKzMzNjYsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdT
ZXR0YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGUKICAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigq
c3RhdGUsICJUZXN0T2JqIiwgIm51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUiKTsKICAg
ICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1Nl
dHRhYmxlQXR0cmlidXRlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUg
anNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nT3JOdWxsKHN0
YXRlLCBpbXBsLm51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNW
YWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1ZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE9iaiogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxh
YmxlU3RyaW5nVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwpAQCAtMjY3NCwxNCArMzM5MSwyMyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpO
dWxsYWJsZVN0cmluZ1ZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaQog
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0
dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibnVsbGFibGVTdHJpbmdWYWx1ZSIpOwog
ICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iak51bGxhYmxlU3RyaW5n
VmFsdWVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpO
dWxsYWJsZVN0cmluZ1ZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShj
YXN0ZWRUaGlzKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9OdWxsYWJsZUpT
TnVtYmVyKGltcGwubnVsbGFibGVTdHJpbmdWYWx1ZShlYykpOwogICAgIHNldERPTUV4Y2VwdGlv
bihzdGF0ZSwgZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlR2V0dGVyKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9iakF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CkBAIC0yNjkyLDEyICszNDE4LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iakF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhy
b3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJhdHRyaWJ1dGUiKTsKICAgICB9
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpBdHRyaWJ1dGVHZXR0ZXIoc3Rh
dGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVHZXR0ZXIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmlu
Z1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5hdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rl
c3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZUdldHRlcihFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRy
aWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yNzA4LDEyICszNDQzLDIxIEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1
cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJhdHRyaWJ1dGVXaXRo
UmVzZXJ2ZWRFbnVtVHlwZSIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlR2V0dGVyKHN0YXRlLCBjYXN0ZWRU
aGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5
cGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQg
PSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5hdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVt
VHlwZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlR2V0
dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2Up
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI3MjQsMTIgKzM0NjgsMjEgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGgKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAg
ICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInB1
dEZvcndhcmRzQXR0cmlidXRlIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsK
K30KKworSlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZUdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnB1dEZvcndhcmRzQXR0cmlidXRlKCkpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0Owog
fQogCiAKK0pTVmFsdWUganNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZUdldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xv
dEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI3NDAsOSArMzQ5MywxNiBA
QCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKUwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoi
LCAicHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZSIpOwogICAgIH0KKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGVHZXR0ZXIo
c3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc051
bGxhYmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVk
VGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0
ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpT
VmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGlt
cGwucHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCkBAIC02MjYxLDYgKzcw
MjEsMjQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbkF0dGFjaFNoYWRvd1Jvb3QoRXhlY1N0YXQKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEV4ZWNTdGF0ZSogc3RhdGUpCit7CisgICAg
SlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CisgICAgYXV0byBjYXN0ZWRU
aGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOworICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpCisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0
YXRlLCAiVGVzdE9iaiIsICJ0b0pTT04iKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKKworICAgIEpTT2JqZWN0KiByZXN1bHQg
PSBjb25zdHJ1Y3RFbXB0eU9iamVjdChzdGF0ZSk7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAi
cmVhZE9ubHlTdHJpbmdBdHRyIiksIGpzVGVzdE9ialJlYWRPbmx5U3RyaW5nQXR0ckdldHRlcihz
dGF0ZSwgY2FzdGVkVGhpcykpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZ2bSwgImVudW1BdHRyIiksIGpzVGVzdE9iakVudW1BdHRyR2V0dGVyKHN0
YXRlLCBjYXN0ZWRUaGlzKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCAibG9uZ0F0dHIiKSwganNUZXN0T2JqTG9uZ0F0dHJHZXR0ZXIoc3Rh
dGUsIGNhc3RlZFRoaXMpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJjcmVhdGUiKSwganNUZXN0T2JqQ3JlYXRlR2V0dGVyKHN0YXRlLCBj
YXN0ZWRUaGlzKSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisK
IHVzaW5nIFRlc3RPYmpJdGVyYXRvciA9IEpTRE9NSXRlcmF0b3I8SlNUZXN0T2JqPjsKIHVzaW5n
IFRlc3RPYmpJdGVyYXRvclByb3RvdHlwZSA9IEpTRE9NSXRlcmF0b3JQcm90b3R5cGU8SlNUZXN0
T2JqPjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlLmNwcAppbmRleCBlMzJiMDk4NDAyOGZiZDMxODNiOTQ3YzFhNDgwOTJlY2VhN2Fm
NjhhLi41Y2EyMGI5ODVlMThlY2ZiNTY0ZWYyNTBkNzgyZjQ1ODUxNzE5NjY5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcApA
QCAtMTMzLDYgKzEzMyw4IEBAIHZvaWQgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogICAgIHRoaXNPYmplY3QtPkpTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6fkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZSgpOwogfQogCitKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZVZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZSogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE0MywxMiArMTQ1LDIxIEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAg
ICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZSIsICJ2YWx1ZSIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlR2V0dGVyKHN0
YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlVmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLnZhbHVlKCkg
PyBpbXBsLnZhbHVlKCktPmRlc2VyaWFsaXplKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgMCkgOiBqc051bGwoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZVJlYWRvbmx5VmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2Rl
ZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUmVhZG9ubHlWYWx1
ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0x
NTksMTIgKzE3MCwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2VSZWFkb25seVZhbHVlKEV4ZWNTdGF0ZSogc3RhdAogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UiLCAicmVhZG9ubHlWYWx1
ZSIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZVJlYWRvbmx5VmFsdWVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMp
KTsKK30KKworSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VSZWFk
b25seVZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZSogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwor
ICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1wbC5yZWFkb25seVZhbHVlKCkg
PyBpbXBsLnJlYWRvbmx5VmFsdWUoKS0+ZGVzZXJpYWxpemUoc3RhdGUsIGNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCAwKSA6IGpzTnVsbCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBjYXN0ZWRUaGlzKTsKKwog
RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVk
VmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpA
QCAtMTc1LDE1ICsxOTUsMjQgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJv
cigqc3RhdGUsICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlIiwgImNhY2hlZFZh
bHVlIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMp
KTsKK30KKworSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNo
ZWRWYWx1ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUg
PSBjYXN0ZWRUaGlzLT5tX2NhY2hlZFZhbHVlLmdldCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGNhY2hlZFZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGNhY2hlZFZhbHVlOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQg
PSBpbXBsLmNhY2hlZFZhbHVlKCkgPyBpbXBsLmNhY2hlZFZhbHVlKCktPmRlc2VyaWFsaXplKHN0
YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgMCkgOiBqc051bGwoKTsKICAgICBjYXN0
ZWRUaGlzLT5tX2NhY2hlZFZhbHVlLnNldChzdGF0ZS0+dm0oKSwgY2FzdGVkVGhpcywgcmVzdWx0
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBv
cnRzR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZSogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZVBvcnRzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE5NCwxMiArMjIzLDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBvcnRzKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4g
dGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZSIsICJwb3J0cyIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBvcnRzR2V0dGVyKHN0YXRlLCBjYXN0
ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlUG9ydHNHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0FycmF5KHN0YXRlLCBjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5wb3J0cygpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFJlYWRvbmx5VmFsdWVHZXR0ZXIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBj
YXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlQ2FjaGVkUmVhZG9ubHlWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMTAsMTIgKzI0OCwxOSBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRSZWFkb25seVZhbHVl
KEV4ZWNTdGF0ZQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0
dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UiLCAiY2FjaGVkUmVhZG9ubHlWYWx1ZSIpOwogICAgIH0KKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hl
ZFJlYWRvbmx5VmFsdWVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBq
c1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRSZWFkb25seVZhbHVlR2V0
dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZSogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9Q
QVJBTShjYXN0ZWRUaGlzKTsKICAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IGNhc3RlZFRo
aXMtPm1fY2FjaGVkUmVhZG9ubHlWYWx1ZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShjYWNoZWRWYWx1ZSk7CisgICAgICAgIHJldHVybiBjYWNoZWRWYWx1ZTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0g
aW1wbC5jYWNoZWRSZWFkb25seVZhbHVlKCkgPyBpbXBsLmNhY2hlZFJlYWRvbmx5VmFsdWUoKS0+
ZGVzZXJpYWxpemUoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCAwKSA6IGpzTnVs
bCgpOwogICAgIGNhc3RlZFRoaXMtPm1fY2FjaGVkUmVhZG9ubHlWYWx1ZS5zZXQoc3RhdGUtPnZt
KCksIGNhc3RlZFRoaXMsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAKaW5kZXgg
M2EzOWU0OTY0YmFmOTgyMTIzM2MwNjg3OTUwN2VmNjMyMDMxNjA4Yi4uZGZlYTExZTEyZGZhODQw
YzAxMjk2NmRjMmVmNDg3MGE4NjRlZjIwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCkBAIC0yMTgs
NiArMjE4LDggQEAgYm9vbCBKU1Rlc3RUeXBlZGVmczo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3AKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKK0pTVmFsdWUganNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0ckdldHRlcihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdFR5cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFz
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjI4LDEyICsyMzAsMjEgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWwKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAg
ICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0VHlwZWRlZnMi
LCAidW5zaWduZWRMb25nTG9uZ0F0dHIiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdHRyR2V0dGVyKHN0YXRlLCBjYXN0
ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0
ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcykKK3sK
KyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVz
dWx0ID0ganNOdW1iZXIoaW1wbC51bnNpZ25lZExvbmdMb25nQXR0cigpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1Zh
bHVlIGpzVGVzdFR5cGVkZWZzSW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlR2V0dGVyKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpT
VmFsdWUganNUZXN0VHlwZWRlZnNJbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2Jq
ZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjQ0LDEyICsy
NTUsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNJbW11dGFibGVTZXJpYWxpemVk
U2NyaXB0VmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW4KICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJU
ZXN0VHlwZWRlZnMiLCAiaW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlIik7CiAgICAgfQor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0VHlwZWRlZnNJbW11dGFibGVTZXJpYWxp
emVkU2NyaXB0VmFsdWVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBq
c1Rlc3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1wbC5pbW11
dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUoKSA/IGltcGwuaW1tdXRhYmxlU2VyaWFsaXplZFNj
cmlwdFZhbHVlKCktPmRlc2VyaWFsaXplKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSwgMCkgOiBqc051bGwoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQ29uc3RydWN0
b3JUZXN0U3ViT2JqR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0
ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvclRlc3RT
dWJPYmooRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpA
QCAtMjYwLDEwICsyODAsMTkgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNDb25zdHJ1
Y3RvclRlc3RTdWJPYmooRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmEKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJv
cigqc3RhdGUsICJUZXN0VHlwZWRlZnMiLCAiVGVzdFN1Yk9iaiIpOwogICAgIH0KLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdFN1Yk9iajo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZt
KCksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yVGVzdFN1Yk9iakdldHRlcihzdGF0ZSwgY2Fz
dGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQ29uc3RydWN0b3JUZXN0U3Vi
T2JqR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzKQor
eworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMp
OworICAgIHJldHVybiBKU1Rlc3RTdWJPYmo6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RUeXBlZGVm
c0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5
cGVkZWZzKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNBdHRy
V2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CkBAIC0yNzQsMTQgKzMwMywyMyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RU
eXBlZGVmc0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
UwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93
R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RUeXBlZGVmcyIsICJhdHRyV2l0aEdldHRlckV4
Y2VwdGlvbiIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdFR5cGVk
ZWZzQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25HZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30K
KworSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmF0dHJXaXRoR2V0dGVyRXhjZXB0
aW9uKGVjKSk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1
ZSBqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNU
ZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQog
ewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yOTIsMTIgKzMzMCwyMSBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKUwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAg
ICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RUeXBlZGVmcyIsICJh
dHRyV2l0aFNldHRlckV4Y2VwdGlvbiIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVGVzdFR5cGVkZWZzQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXIoc3RhdGUsIGNh
c3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhj
ZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlz
KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRo
aXMpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1
ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCkpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
CiAKK0pTVmFsdWUganNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkdl
dHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcyk7CisKIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24o
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUs
IEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMzA4
LDE0ICszNTUsMjMgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0
aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmMKICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3Rh
dGUsICJUZXN0VHlwZWRlZnMiLCAic3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24iKTsKICAg
ICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJX
aXRoR2V0dGVyRXhjZXB0aW9uR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFs
dWUganNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkdldHRlcihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuc3RyaW5n
QXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oZWMpKTsKICAgICBzZXRET01FeGNlcHRpb24oc3RhdGUs
IGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0ZXJF
eGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRo
aXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVy
RXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKQEAgLTMyNiw5ICszODIsMTYgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNTdHJp
bmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmMKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVF
cnJvcigqc3RhdGUsICJUZXN0VHlwZWRlZnMiLCAic3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRp
b24iKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RUeXBlZGVmc1N0
cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9
CisKK0pTVmFsdWUganNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkdl
dHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcykKK3sKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuc3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNl
cHRpb24oKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTYXR0cmlidXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5jcHAKaW5kZXggOTA5ZGZhNzFlNDc3YzJkMzRiNzIz
Mzk4YzZlOGM1NGMxYzhjY2UzYy4uYmY2YTQ3ODNkYjcxZjNlN2YzMDk0MTQ4ZjVkNzU3MzQxZjVm
MWM4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTYXR0cmlidXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNhdHRyaWJ1dGUuY3BwCkBAIC0xNDEsNiArMTQxLDggQEAgYm9vbCBKU2F0dHJpYnV0
ZTo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUs
IFByb3BlcnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK0pTVmFsdWUganNhdHRyaWJ1dGVSZWFk
b25seUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU2F0dHJpYnV0ZSogY2FzdGVkVGhpcyk7CisK
IEVuY29kZWRKU1ZhbHVlIGpzYXR0cmlidXRlUmVhZG9ubHkoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkK
IHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTUxLDkgKzE1MywxNiBAQCBFbmNvZGVk
SlNWYWx1ZSBqc2F0dHJpYnV0ZVJlYWRvbmx5KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAg
ICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgImF0dHJpYnV0ZSIsICJyZWFk
b25seSIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzYXR0cmlidXRlUmVh
ZG9ubHlHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc2F0dHJpYnV0
ZVJlYWRvbmx5R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTYXR0cmlidXRlKiBjYXN0ZWRUaGlz
KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRo
aXMpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1
ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5yZWFkb25seSgpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVz
dE5vZGUuaWRsIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROb2Rl
LmlkbAppbmRleCAxZTQ4NTJhODU4OTBiZjBjZDQ5ZWE0ZWUzMmQwNDU1NGUyOGYyMDg5Li5mY2U2
ODBhYWEyNjlkMWFlNjBkY2VlYWY1OWRiYjRmYTViZDA5YjUzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5vZGUuaWRsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Tm9kZS5pZGwKQEAgLTI1LDUgKzI1LDcg
QEAKICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIG5hbWU7CiAKICAgICBpdGVyYWJsZTxUZXN0Tm9k
ZT47CisKKyAgICBzZXJpYWxpemVyOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCmluZGV4IDM0MTE4MWE1MTYxZjAwNTViNDIwYTk5
ZWI1YjhmOWVhOGNkOGExN2QuLjJhYjljYzFmOWI2YTNhMGM2YTAwYWMwZmFmZDY1NTFhMjNmMmMz
NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0
T2JqLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9i
ai5pZGwKQEAgLTM3NCw2ICszNzQsOCBAQCBlbnVtIFRlc3RDb25maWRlbmNlIHsgImhpZ2giLCAi
a2luZGEtbG93IiB9OwogI2VuZGlmCiAKICAgICB2b2lkIGF0dGFjaFNoYWRvd1Jvb3QoVGVzdERp
Y3Rpb25hcnkgaW5pdCk7CisKKyAgICBzZXJpYWxpemVyID0ge3JlYWRPbmx5U3RyaW5nQXR0ciwg
Y3JlYXRlLCBlbnVtQXR0ciwgbG9uZ0F0dHJ9OwogfTsKIAogLy8gVGhlIGZvbGxvd2luZyBjb21t
ZW50IHNob3VsZCBub3QgZ2VuZXJhdGUgYW55IGNvZGUuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNTc5YThlNDNiZGYzY2Zj
NmJhMmY1ZTc5MWViZDkwMjI4MGMxMDg4NS4uZGUzYzUzZTNhYzBjYTk1OWZlOGUyZWRkYjEwMGU1
OGE2OTAyMDBjYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDE2LTA1LTI0ICBBbGVqYW5kcm8g
Ry4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIEFkZCBXZWJJREwgc3BlY2lh
bCBvcGVyYXRpb24gc3VwcG9ydDogc2VyaWFsaXplcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MjkzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFy
aW4gQWRsZXIuCisKKyAgICAgICAgVmVyaWZ5IHRoZSBuZXcgQVBJIG9mIHRoZSBvYmplY3RzIGFu
ZCBjaGVjayB3aGF0IGhhcHBlbnMgd2hlbiB1c2VyCisgICAgICAgIG1vZGlmaWVzIHRoZSB2YWx1
ZXMgYW5kIHR5cGVzIG9mIHRoZSBhdHRyaWJ1dGVzLCBvciBhZGRzIGEgbnVsbCB2YWx1ZS4KKwor
ICAgICAgICAqIGZhc3QvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLWV4cGVjdGVkLnR4dDoK
KyAgICAgICAgKiBmYXN0L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5odG1sOgorICAgICAg
ICAqIGZhc3QvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dDoK
KyAgICAgICAgKiBmYXN0L21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5odG1sOgor
CiAyMDE2LTA1LTI0ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAK
ICAgICAgICAgW0ZvbnQgTG9hZGluZ10gQ3Jhc2ggZHVyaW5nIGZvbnQgZG93bmxvYWQgZmFpbHVy
ZSBhZnRlciBnYXJiYWdlIGNvbGxlY3Rpb24KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
bWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zh
c3QvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLWV4cGVjdGVkLnR4dAppbmRleCBlOWVkYjhk
YzRhY2IzNGI1M2I5MzIzOWI0Mjc5NmM0MDY5Yjk3NGQ2Li5mMzc0NmExMmU3ZjkwZWM5NGQzNzUx
NjQzNGZjZmMyNTczOTFlMzhmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3Ry
ZWFtL1JUQ0ljZUNhbmRpZGF0ZS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9t
ZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUtZXhwZWN0ZWQudHh0CkBAIC03LDYgKzcsMjEgQEAg
UEFTUyBjYW5kaWRhdGUgPSBuZXcgUlRDSWNlQ2FuZGlkYXRlKGluaXRpYWxpemVyKTsgZGlkIG5v
dCB0aHJvdyBleGNlcHRpb24uCiBQQVNTIGNhbmRpZGF0ZS5jYW5kaWRhdGUgaXMgImZvbyIKIFBB
U1MgY2FuZGlkYXRlLnNkcE1pZCBpcyAiYmFyIgogUEFTUyBjYW5kaWRhdGUuc2RwTUxpbmVJbmRl
eCBpcyA2CitQQVNTIFJUQ0ljZUNhbmRpZGF0ZS5wcm90b3R5cGUudG9KU09OIGlzIGRlZmluZWQu
CitQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUlRDSWNlQ2FuZGlkYXRlLnBy
b3RvdHlwZSwgInRvSlNPTiIpLmVudW1lcmFibGUgaXMgdHJ1ZQorUEFTUyBPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKFJUQ0ljZUNhbmRpZGF0ZS5wcm90b3R5cGUsICJ0b0pTT04iKS53
cml0YWJsZSBpcyB0cnVlCitQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUlRD
SWNlQ2FuZGlkYXRlLnByb3RvdHlwZSwgInRvSlNPTiIpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCitQ
QVNTIFJUQ0ljZUNhbmRpZGF0ZS5wcm90b3R5cGUudG9KU09OLmxlbmd0aCBpcyAwCitQQVNTIFJU
Q0ljZUNhbmRpZGF0ZS5wcm90b3R5cGUudG9KU09OLm5hbWUgaXMgInRvSlNPTiIKK1BBU1MgT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihqc29uTWFwLCAiY2FuZGlkYXRlIikuZW51bWVy
YWJsZSBpcyB0cnVlCitQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoanNvbk1h
cCwgImNhbmRpZGF0ZSIpLndyaXRhYmxlIGlzIHRydWUKK1BBU1MgT2JqZWN0LmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihqc29uTWFwLCAiY2FuZGlkYXRlIikuY29uZmlndXJhYmxlIGlzIHRydWUK
K1BBU1MgY2hpbGRDYW5kaWRhdGUudG9KU09OKCk7IHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6
IENhbiBvbmx5IGNhbGwgUlRDSWNlQ2FuZGlkYXRlLnRvSlNPTiBvbiBpbnN0YW5jZXMgb2YgUlRD
SWNlQ2FuZGlkYXRlLgorUEFTUyBKU09OLnN0cmluZ2lmeShjYW5kaWRhdGUudG9KU09OKCkpIGlz
ICJ7XCJjYW5kaWRhdGVcIjpcImZvb1wiLFwic2RwTWlkXCI6XCJiYXJcIixcInNkcE1MaW5lSW5k
ZXhcIjo2fSIKK1BBU1MgSlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNPTigpKSBpcyAie1wi
Y2FuZGlkYXRlXCI6XCJmb29cIixcInNkcE1pZFwiOlwiYmFyXCIsXCJzZHBNTGluZUluZGV4XCI6
Nn0iCitQQVNTIEpTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSkgaXMgIntcImNhbmRp
ZGF0ZVwiOlwiZm9vXCIsXCJzZHBNaWRcIjpcImJhclwiLFwic2RwTUxpbmVJbmRleFwiOjZ9Igor
UEFTUyBKU09OLnN0cmluZ2lmeShjYW5kaWRhdGUudG9KU09OKCkpIGlzICJ7XCJjYW5kaWRhdGVc
IjpcImZvb1wiLFwic2RwTWlkXCI6XCJiYXJcIixcInNkcE1MaW5lSW5kZXhcIjo2fSIKK1BBU1Mg
SlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNPTigpKSBpcyAie1wiY2FuZGlkYXRlXCI6XCJm
b29cIixcInNkcE1pZFwiOlwiYmFyXCIsXCJzZHBNTGluZUluZGV4XCI6Nn0iCiAKIEF0dHJpYnV0
ZXMgYXJlIHJlYWRvbmx5CiBjYW5kaWRhdGUuY2FuZGlkYXRlID0gImZvby11cGRhdGVkIgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaHRt
bCBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmh0bWwKaW5k
ZXggYmNkOTliMGNkMDU1ZDRjN2IwYWI5MzFmOGM1NTg4Nzc3ZjQwNDhlYS4uZDBkNWRlZGMzMWU2
NTQ1MmY5Y2NmZWNiNTU5YTFlYzg0NWQ4NjY1MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFz
dC9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5odG1sCkBAIC0xMyw2ICsxMywzMyBAQAogICAg
ICAgICAgICAgc2hvdWxkQmUoJ2NhbmRpZGF0ZS5jYW5kaWRhdGUnLCAnImZvbyInKTsKICAgICAg
ICAgICAgIHNob3VsZEJlKCdjYW5kaWRhdGUuc2RwTWlkJywgJyJiYXIiJyk7CiAgICAgICAgICAg
ICBzaG91bGRCZSgnY2FuZGlkYXRlLnNkcE1MaW5lSW5kZXgnLCAnNicpOworICAgICAgICAgICAg
c2hvdWxkQmVEZWZpbmVkKCdSVENJY2VDYW5kaWRhdGUucHJvdG90eXBlLnRvSlNPTicpOworICAg
ICAgICAgICAgc2hvdWxkQmVUcnVlKCdPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFJU
Q0ljZUNhbmRpZGF0ZS5wcm90b3R5cGUsICJ0b0pTT04iKS5lbnVtZXJhYmxlJyk7CisgICAgICAg
ICAgICBzaG91bGRCZVRydWUoJ09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUlRDSWNl
Q2FuZGlkYXRlLnByb3RvdHlwZSwgInRvSlNPTiIpLndyaXRhYmxlJyk7CisgICAgICAgICAgICBz
aG91bGRCZVRydWUoJ09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUlRDSWNlQ2FuZGlk
YXRlLnByb3RvdHlwZSwgInRvSlNPTiIpLmNvbmZpZ3VyYWJsZScpOworICAgICAgICAgICAgc2hv
dWxkQmUoJ1JUQ0ljZUNhbmRpZGF0ZS5wcm90b3R5cGUudG9KU09OLmxlbmd0aCcsICcwJyk7Cisg
ICAgICAgICAgICBzaG91bGRCZSgnUlRDSWNlQ2FuZGlkYXRlLnByb3RvdHlwZS50b0pTT04ubmFt
ZScsICcidG9KU09OIicpOworCisgICAgICAgICAgICB2YXIganNvbk1hcCA9IGNhbmRpZGF0ZS50
b0pTT04oKTsKKyAgICAgICAgICAgIHNob3VsZEJlVHJ1ZSgnT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihqc29uTWFwLCAiY2FuZGlkYXRlIikuZW51bWVyYWJsZScpOworICAgICAgICAg
ICAgc2hvdWxkQmVUcnVlKCdPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGpzb25NYXAs
ICJjYW5kaWRhdGUiKS53cml0YWJsZScpOworICAgICAgICAgICAgc2hvdWxkQmVUcnVlKCdPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGpzb25NYXAsICJjYW5kaWRhdGUiKS5jb25maWd1
cmFibGUnKTsKKworICAgICAgICAgICAgdmFyIGNoaWxkUlRDSWNlQ2FuZGlkYXRlID0gZnVuY3Rp
b24oKSB7fTsKKyAgICAgICAgICAgIGNoaWxkUlRDSWNlQ2FuZGlkYXRlLnByb3RvdHlwZSA9IE9i
amVjdC5jcmVhdGUoUlRDSWNlQ2FuZGlkYXRlLnByb3RvdHlwZSk7CisgICAgICAgICAgICB2YXIg
Y2hpbGRDYW5kaWRhdGUgPSBuZXcgY2hpbGRSVENJY2VDYW5kaWRhdGUoKTsKKyAgICAgICAgICAg
IHNob3VsZFRocm93KCdjaGlsZENhbmRpZGF0ZS50b0pTT04oKTsnKTsKKworICAgICAgICAgICAg
c2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdKU09OLnN0cmluZ2lmeShjYW5kaWRhdGUudG9KU09OKCkp
JywgJ3siY2FuZGlkYXRlIjoiZm9vIiwic2RwTWlkIjoiYmFyIiwic2RwTUxpbmVJbmRleCI6Nn0n
KTsKKyAgICAgICAgICAgIGNhbmRpZGF0ZS5uZXdBdHRyaWJ1dGUgPSAibmV3IHZhbHVlIjsKKyAg
ICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnSlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRl
LnRvSlNPTigpKScsICd7ImNhbmRpZGF0ZSI6ImZvbyIsInNkcE1pZCI6ImJhciIsInNkcE1MaW5l
SW5kZXgiOjZ9Jyk7CisgICAgICAgICAgICBjYW5kaWRhdGUuc2RwTUxpbmVJbmRleCA9ICJub3Qg
YSBudW1iZXIiOworICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdKU09OLnN0cmlu
Z2lmeShjYW5kaWRhdGUudG9KU09OKCkpJywgJ3siY2FuZGlkYXRlIjoiZm9vIiwic2RwTWlkIjoi
YmFyIiwic2RwTUxpbmVJbmRleCI6Nn0nKTsKKyAgICAgICAgICAgIGNhbmRpZGF0ZS5zZHBNaWQg
PSA3OworICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdKU09OLnN0cmluZ2lmeShj
YW5kaWRhdGUudG9KU09OKCkpJywgJ3siY2FuZGlkYXRlIjoiZm9vIiwic2RwTWlkIjoiYmFyIiwi
c2RwTUxpbmVJbmRleCI6Nn0nKTsKKyAgICAgICAgICAgIGNhbmRpZGF0ZS5zZHBNaWQgPSBudWxs
OworICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdKU09OLnN0cmluZ2lmeShjYW5k
aWRhdGUudG9KU09OKCkpJywgJ3siY2FuZGlkYXRlIjoiZm9vIiwic2RwTWlkIjoiYmFyIiwic2Rw
TUxpbmVJbmRleCI6Nn0nKTsKKwogICAgICAgICAgICAgZGVidWcoIiIpOwogCiAgICAgICAgICAg
ICBkZWJ1ZygiQXR0cmlidXRlcyBhcmUgcmVhZG9ubHkiKTsKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLWV4cGVj
dGVkLnR4dAppbmRleCA2NTgyMThmZmUxMmU1NjAwNDg4ZDc5NTIyYzRhMzRhOWRmOGRlNmY4Li4z
NDA5YzJkZWVhMDI5YWE0MGNjNWIwNzZiODUxZjU3ZDYxYzJhZTExIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi1leHBlY3RlZC50
eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRp
b24tZXhwZWN0ZWQudHh0CkBAIC03LDYgKzcsNyBAQCBQQVNTIHNlc3Npb25EZXNjcmlwdGlvbiA9
IG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24oKTsgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCiBQ
QVNTIHNlc3Npb25EZXNjcmlwdGlvbiA9IG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24oaW5pdGlh
bGl6ZXIpOyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KIFBBU1Mgc2Vzc2lvbkRlc2NyaXB0aW9u
LnR5cGUgaXMgIm9mZmVyIgogUEFTUyBzZXNzaW9uRGVzY3JpcHRpb24uc2RwIGlzICJmb29iYXIi
CitQQVNTIEpTT04uc3RyaW5naWZ5KHNlc3Npb25EZXNjcmlwdGlvbi50b0pTT04oKSkgaXMgIntc
InR5cGVcIjpcIm9mZmVyXCIsXCJzZHBcIjpcImZvb2JhclwifSIKIFBBU1MgbmV3IFJUQ1Nlc3Np
b25EZXNjcmlwdGlvbihudWxsKTsgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogT3B0aW9uYWwg
UlRDU2Vzc2lvbkRlc2NyaXB0aW9uIGNvbnN0cnVjdG9yIGFyZ3VtZW50IG11c3QgYmUgYSB2YWxp
ZCBEaWN0aW9uYXJ5LgogUEFTUyBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKDUpOyB0aHJldyBl
eGNlcHRpb24gVHlwZUVycm9yOiBPcHRpb25hbCBSVENTZXNzaW9uRGVzY3JpcHRpb24gY29uc3Ry
dWN0b3IgYXJndW1lbnQgbXVzdCBiZSBhIHZhbGlkIERpY3Rpb25hcnkuCiBQQVNTIG5ldyBSVENT
ZXNzaW9uRGVzY3JpcHRpb24oJ2Zvb2JhcicpOyB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBP
cHRpb25hbCBSVENTZXNzaW9uRGVzY3JpcHRpb24gY29uc3RydWN0b3IgYXJndW1lbnQgbXVzdCBi
ZSBhIHZhbGlkIERpY3Rpb25hcnkuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlh
c3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRp
YXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24uaHRtbAppbmRleCAzYTY2ZDJlMjZiMTE5MTA1
YWMxZWQzMGRkNWFmNTc1Mjk5N2RmMzQyLi4xZDliNWNkMzM3ZWQ1ZGU5YTk2NThkNjQ2YjhjNDJi
ZGNhZGFlNjIzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1Nl
c3Npb25EZXNjcmlwdGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0v
UlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmh0bWwKQEAgLTE1LDYgKzE1LDcgQEAKICAgICAgICAgICAg
IHNob3VsZE5vdFRocm93KCJzZXNzaW9uRGVzY3JpcHRpb24gPSBuZXcgUlRDU2Vzc2lvbkRlc2Ny
aXB0aW9uKGluaXRpYWxpemVyKTsiKTsKICAgICAgICAgICAgIHNob3VsZEJlKCdzZXNzaW9uRGVz
Y3JpcHRpb24udHlwZScsICcib2ZmZXIiJyk7CiAgICAgICAgICAgICBzaG91bGRCZSgnc2Vzc2lv
bkRlc2NyaXB0aW9uLnNkcCcsICciZm9vYmFyIicpOworICAgICAgICAgICAgc2hvdWxkQmVFcXVh
bFRvU3RyaW5nKCdKU09OLnN0cmluZ2lmeShzZXNzaW9uRGVzY3JpcHRpb24udG9KU09OKCkpJywg
J3sidHlwZSI6Im9mZmVyIiwic2RwIjoiZm9vYmFyIn0nKTsKIAogICAgICAgICAgICAgc2hvdWxk
VGhyb3coIm5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24obnVsbCk7Iik7CiAgICAgICAgICAgICBz
aG91bGRUaHJvdygibmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbig1KTsiKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279760</attachid>
            <date>2016-05-25 06:00:50 -0700</date>
            <delta_ts>2016-05-26 04:16:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156293-20160525150156.patch</filename>
            <type>text/plain</type>
            <size>168981</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxMzcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODI5Nzg1ZTM1MDUzOGUx
ZjZjNWRkOWY3ZjQxZjdkNTMzNjYwYWY2OS4uOWFmZmE4MjBlOTEyODBjNDE5OGYyMmJlYzNhYzUy
OTU1ZjBiMjFlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgxIEBACisyMDE2LTA1LTI0ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIEFkZCBXZWJJREwg
c3BlY2lhbCBvcGVyYXRpb24gc3VwcG9ydDogc2VyaWFsaXplcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MjkzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgdGhlIHNlcmlhbGl6
ZXIgc3BlY2lhbCBvcGVyYXRpb24gZm9yIFdlYklETHMsCisgICAgICAgIGN1cnJlbnQgaW1wbGVt
ZW50YXRpb24gYWRkcyBzdXBwb3J0IGZvcjoKKyAgICAgICAgICAtIGp1c3QgdGhlIGtleXdvcmQ6
IHNlcmlhbGl6ZXI7IEl0IHdpbGwgcmV0dXJuIGFsbCB0aGUKKyAgICAgICAgICAgIGF0dHJpYnV0
ZXMgb2YgaW4gYW4gb2JqZWN0LgorICAgICAgICAgIC0gbWFwIG9mIGVudHJpZXMgd2l0aCB0aGUg
YXR0cmlidXRlczogc2VyaWFsaXplciA9IHthdHRyaWJ1dGUxLAorICAgICAgICAgICAgYXR0cmli
dXRlMiwgLi4ufQorCisgICAgICAgIEl0IGNyZWF0ZXMgYSB0b0pTT04gbWV0aG9kIHRoYXQgcmV0
dXJucyB0aGUgc2VyaWFsaXplZCB2YWx1ZQorICAgICAgICBjb252ZXJ0ZWQgaW50byBhbiBFQ01B
U2NyaXB0IHZhbHVlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBjaGVjayB0aGUKKyAgICAgICAgZGVm
aW5pdGlvbiBvZiB0aGUgb3BlcmF0aW9uOgorCisgICAgICAgIGh0dHA6Ly9oZXljYW0uZ2l0aHVi
LmlvL3dlYmlkbC8jaWRsLXNlcmlhbGl6ZXJzCisKKyAgICAgICAgV2UgaGF2ZSBtb2RpZmllZCBj
dXJyZW50IGNvZGUgdGhhdCBnZW5lcmF0ZXMgdGhlIGdldHRlciBmdW5jdGlvbgorICAgICAgICBm
b3IgYXR0cmlidXRlcyBpbiB0d28gcGFydHMgc28gdGhhdCB3ZSBjYW4gcmV1c2UgdGhlIHBhcnQK
KyAgICAgICAgZXh0cmFjdGluZyB0aGUgdmFsdWUgZm9yIHRoZSBzZXJpYWxpemVyLgorCisgICAg
ICAgIFVzZWQgdGhlIHN1cHBvcnQgdG8gYWRkIG5ldyBBUEkgZm9yIFJUQ0ljZUNhbmRpZGF0ZSBh
bmQKKyAgICAgICAgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLgorCisgICAgICAgIFVwZGF0ZWQgdGhl
IHRlc3RzIGV4cGVjdGF0aW9ucyBvZiB0aGUgYmluZGluZ3MuCisKKyAgICAgICAgVGVzdHM6IGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Tm9kZS5pZGwKKyAgICAgICAgICAgICAgIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAorICAgICAgICAgICAgICAgZmFzdC9tZWRpYXN0cmVh
bS9SVENJY2VDYW5kaWRhdGUuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9tZWRpYXN0cmVhbS9S
VENTZXNzaW9uRGVzY3JpcHRpb24uaHRtbAorCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVh
bS9SVENJY2VDYW5kaWRhdGUuaWRsOiBBZGRlZCB0aGUgc2VyaWFsaXplcgorICAgICAgICBvcGVy
YXRpb24uCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRp
b24uaWRsOiBBZGRlZCB0aGUKKyAgICAgICAgc2VyaWFsaXplciBvcGVyYXRpb24uCisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChnZXRHZXR0
ZXJGdW5jdGlvbkNhbGwpOiBBZGRlZCwgaXQgZ2VuZXJhdGVzIHRoZSBHZXR0ZXIgZnVuY3Rpb24K
KyAgICAgICAgY2FsbCBzdHJpbmcgYmFzZWQgb24gd2hhdCBwYXJhbWV0ZXJzIGl0IG5lZWRzLiBV
c2VkIGluIHRoZQorICAgICAgICBzZXJpYWxpemVyIGNvZGUgZ2VuZXJhdG9yLgorICAgICAgICAo
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6IFNwbGl0dGVkIHRoZSBjb2RlIG9mIHRoZSBhdHRyaWJ1
dGUKKyAgICAgICAgZ2V0dGVyIGluIHR3byBmdW5jdGlvbnMsIG9uZSBnZXR0aW5nIHRoZSB2YWx1
ZSBhbmQgdGhlIG90aGVyCisgICAgICAgIGhhbmRsaW5nIHRoZSBjYWxsIGZyb20gdGhlIEFQSS4g
VGhpcyB3YXkgd2UgY2FuIHJldXNlIHRoZSBjb2RlIGZvcgorICAgICAgICB0aGUgc2VyaWFsaXpl
ci4gQWxzbyBBZGRlZCB0aGUgY2FsbHMgdG8gdGhlIHNlcmlhbGl6ZXIKKyAgICAgICAgY29kZSBn
ZW5lcmF0b3IuCisgICAgICAgIChHZW5lcmF0ZVNlcmlhbGl6ZXJGdW5jdGlvbik6IEFkZGVkLCBn
ZW5lcmF0ZXMgdGhlIHRvSlNPTiBmdW5jdGlvbgorICAgICAgICBhZGRpbmcgYWxsIHRoZSBzZXJp
YWxpemFibGUtPmF0dHJpYnV0ZXMgdmFsdWUgdG8gYW4gb2JqZWN0IGFzCisgICAgICAgIGRlZmlu
ZWQgaW4gdGhlIHNwZWMuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG06
IE1vZGlmaWVkIHRoZSBzZXJpYWxpemVyIHBhcnNlcgorICAgICAgICB0aGF0IHdhcyB1bnVzZWQg
dG8gc3VwcG9ydCB0aGUgV2ViSURMIHNwZWMgcGFydHMuIEFkZGVkIGEgbmV3CisgICAgICAgIGRv
bVNlcmlhbGl6YWJsZSB0eXBlIHRvIHN0b3JlIHRoZSBsaXN0IG9mIGF0dHJpYnV0ZXMgaW4gdGhl
CisgICAgICAgIHBvc3NpYmxlIG1hcC4KKyAgICAgICAgKHBhcnNlU2VyaWFsaXplcik6IE1vZGlm
aWVkIHRoZSBmdW5jdGlvbiB0byBmb2xsb3cgdGhlCisgICAgICAgIHNlbWljb2xvbiBydWxlIGlu
IHRoZSBzcGVjLCBub3cgdGhlIHNlcmlhbGl6ZXIgbGluZSBtdXN0IGhhdmUgYQorICAgICAgICBz
ZW1pY29sb24gbGlrZSBhbnkgb3RoZXIgbGluZS4KKyAgICAgICAgKHBhcnNlU2VyaWFsaXplclJl
c3QpOiBUaGUgZnVuY3Rpb24gbm93IGhhcyB0byBnZXQgdGhlIGF0dHJpYnV0ZXMKKyAgICAgICAg
bGlzdCBmcm9tIHRoZSBwYXR0ZXJuIHBhcnNpbmcgZnVuY3Rpb24gYW5kIGFkZCB0aGVtIHRvIHRo
ZQorICAgICAgICBkb21TZXJpYWxpemFibGUgaXRlbS4KKyAgICAgICAgKHBhcnNlU2VyaWFsaXph
dGlvblBhdHRlcm4pOiBOb3cgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBsaXN0IG9mCisgICAg
ICAgIGF0dHJpYnV0ZXMgaW4gdGhlIHNlcmlhbGl6YWJsZSBtYXAgb3IgbGlzdCBpZiB3ZSBoYXZl
IG9uZS4KKyAgICAgICAgKHBhcnNlU2VyaWFsaXphdGlvbkF0dHJpYnV0ZXMpOiBBZGRlZCwgdGhp
cyBmdW5jdGlvbiByZXBsYWNlcyB0aGUKKyAgICAgICAgTWFwIGFuZCBMaXN0IGZ1bmN0aW9ucywg
dGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQgcGFydHMgYXJlIHNpbWlsYXIKKyAgICAgICAgZm9yIGJv
dGggc2l0dWF0aW9ucy4KKyAgICAgICAgKGFwcGx5TWVtYmVyTGlzdCk6IEFkZGVkIHRoZSBzZXJp
YWxpemFibGUgaXRlbSB0byB0aGUgaW50ZXJmYWNlCisgICAgICAgIHZhcmlhYmxlIGFuZCBwb3B1
bGF0ZSB0aGUgc2VyaWFsaXphYmxlIGluIGNhc2UgdGhlcmUgaXMgbm90IGEKKyAgICAgICAgZGVm
aW5lZCBtYXAuCisgICAgICAgIChwYXJzZVNlcmlhbGl6YXRpb25QYXR0ZXJuTWFwKTogUmVwbGFj
ZWQgd2l0aAorICAgICAgICBwYXJzZVNlcmlhbGl6YXRpb25BdHRyaWJ1dGVzLgorICAgICAgICAo
cGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybkxpc3QpOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHA6IE1vZGlmaWVkIHRoZSBleHBlY3RlZCBy
ZXN1bHQuCisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pT
T04pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOiBN
b2RpZmllZCB0aGUgZXhwZWN0ZWQgcmVzdWx0LgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25Ub0pTT04pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9UZXN0Tm9kZS5pZGw6IEFkZGVkIHRoZSBzZXJpYWxpemVyIHRlc3QuCisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsOiBBZGRlZCBzZXJpYWxpemVyIG1hcCB0ZXN0
LgorCiAyMDE2LTA1LTI0ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+
CiAKICAgICAgICAgW0ZvbnQgTG9hZGluZ10gQ3Jhc2ggZHVyaW5nIGZvbnQgZG93bmxvYWQgZmFp
bHVyZSBhZnRlciBnYXJiYWdlIGNvbGxlY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmlkbCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmlkbAppbmRleCA5MWJhODQxNTNj
ZjBmMzRhZDFmZDI4YzE2MjcyMTJlZjk0ZTBhM2ZhLi4zZWVhYjliZjVjMzViYTcxNDlmMDU2NGJm
M2E3MjVhN2I4NmJjZjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaWRsCkBAIC0zNyw1ICszNyw3IEBACiAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBjYW5kaWRhdGU7CiAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIERPTVN0cmluZz8gc2RwTWlkOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBz
aG9ydD8gc2RwTUxpbmVJbmRleDsKKworICAgIHNlcmlhbGl6ZXIgPSB7Y2FuZGlkYXRlLCBzZHBN
aWQsIHNkcE1MaW5lSW5kZXh9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24uaWRsIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24uaWRsCmluZGV4IDIz
NDU1ZjcwNDA3MjhlMWJhY2VhZmUyMWE4Y2FlOGI4YTUxNDA1ZWYuLjFkNjQzNTAyZTNmYWIyM2I2
ZGMzYjc1MGNlMmI1MWQyNTI0MjAzNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmlkbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5pZGwKQEAgLTM2
LDUgKzM2LDcgQEAKIF0gaW50ZXJmYWNlIFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiB7CiAgICAgW1Nl
dHRlclJhaXNlc0V4Y2VwdGlvbl0gYXR0cmlidXRlIERPTVN0cmluZyB0eXBlOwogICAgIGF0dHJp
YnV0ZSBET01TdHJpbmcgc2RwOworCisgICAgc2VyaWFsaXplciA9IHt0eXBlLCBzZHB9OwogfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQppbmRleCAxNTQ4YTMyZTNjMDMyZDgwYmU3YjE4NTIwZWEzODQxZWRiYTE0N2Q3Li43MTU1
MzIyOTA5MzNlYWE5NjY5OGEzMzJmNWE5YTc0ZmI1MTU2ODhkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQpAQCAtMTk5OCw2ICsx
OTk4LDggQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBteSAkdmlzaWJsZUludGVy
ZmFjZU5hbWUgPSAkY29kZUdlbmVyYXRvci0+R2V0VmlzaWJsZUludGVyZmFjZU5hbWUoJGludGVy
ZmFjZSk7CiAgICAgbXkgJGV2ZW50VGFyZ2V0ID0gJGNvZGVHZW5lcmF0b3ItPkluaGVyaXRzSW50
ZXJmYWNlKCRpbnRlcmZhY2UsICJFdmVudFRhcmdldCIpICYmICRpbnRlcmZhY2UtPm5hbWUgbmUg
IkV2ZW50VGFyZ2V0IjsKICAgICBteSAkbmVlZHNWaXNpdENoaWxkcmVuID0gSW5zdGFuY2VOZWVk
c1Zpc2l0Q2hpbGRyZW4oJGludGVyZmFjZSk7CisgICAgbXkgJHNlcmlhbGl6ZXJGdW5jdGlvbk5h
bWUgPSAidG9KU09OIjsKKyAgICBteSAkc2VyaWFsaXplck5hdGl2ZUZ1bmN0aW9uTmFtZSA9ICRj
b2RlR2VuZXJhdG9yLT5XS19sY2ZpcnN0KCRjbGFzc05hbWUpIC4gIlByb3RvdHlwZUZ1bmN0aW9u
IiAuICRjb2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRzZXJpYWxpemVyRnVuY3Rpb25OYW1lKTsK
IAogICAgIG15ICRuYW1lZEdldHRlckZ1bmN0aW9uID0gR2V0TmFtZWRHZXR0ZXJGdW5jdGlvbigk
aW50ZXJmYWNlKTsKICAgICBteSAkaW5kZXhlZEdldHRlckZ1bmN0aW9uID0gR2V0SW5kZXhlZEdl
dHRlckZ1bmN0aW9uKCRpbnRlcmZhY2UpOwpAQCAtMjA4Nyw2ICsyMDg5LDEwIEBAIHN1YiBHZW5l
cmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKICAg
ICB9CiAKKyAgICBpZiAoJGludGVyZmFjZS0+c2VyaWFsaXphYmxlKSB7CisgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke3NlcmlhbGl6ZXJO
YXRpdmVGdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSopO1xuXG4iKTsKKyAgICB9CisKICAgICBHZW5l
cmF0ZVByb3RvdHlwZURlY2xhcmF0aW9uKFxAaW1wbENvbnRlbnQsICRjbGFzc05hbWUsICRpbnRl
cmZhY2UpIGlmICFIZWFkZXJOZWVkc1Byb3RvdHlwZURlY2xhcmF0aW9uKCRpbnRlcmZhY2UpOwog
CiAgICAgR2VuZXJhdGVDb25zdHJ1Y3RvckRlY2xhcmF0aW9uKFxAaW1wbENvbnRlbnQsICRjbGFz
c05hbWUsICRpbnRlcmZhY2UpIGlmIE5lZWRzQ29uc3RydWN0b3JQcm9wZXJ0eSgkaW50ZXJmYWNl
KTsKQEAgLTIyNDUsNiArMjI1MSwxNSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogCiAg
ICAgbXkgJGp1c3RHZW5lcmF0ZVZhbHVlQXJyYXkgPSAhSXNET01HbG9iYWxPYmplY3QoJGludGVy
ZmFjZSk7CiAKKyAgICBpZiAoJGludGVyZmFjZS0+c2VyaWFsaXphYmxlKSB7CisgICAgICAgIHB1
c2goQGhhc2hLZXlzLCAkc2VyaWFsaXplckZ1bmN0aW9uTmFtZSk7CisgICAgICAgIHB1c2goQGhh
c2hWYWx1ZTEsICRzZXJpYWxpemVyTmF0aXZlRnVuY3Rpb25OYW1lKTsKKyAgICAgICAgcHVzaChA
aGFzaFZhbHVlMiwgMCk7CisgICAgICAgIHB1c2goQGhhc2hTcGVjaWFscywgIkpTQzo6RnVuY3Rp
b24iKTsKKworICAgICAgICAkaGFzaFNpemUrKzsKKyAgICB9CisKICAgICAkb2JqZWN0LT5HZW5l
cmF0ZUhhc2hUYWJsZSgkaGFzaE5hbWUsICRoYXNoU2l6ZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcQGhhc2hLZXlzLCBcQGhhc2hTcGVjaWFscywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcQGhhc2hWYWx1ZTEsIFxAaGFzaFZhbHVlMiwKQEAgLTI1MzgsNiArMjU1
Myw4IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICBteSAkYXR0cmli
dXRlQ29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVDb25kaXRpb25h
bFN0cmluZygkYXR0cmlidXRlLT5zaWduYXR1cmUpOwogICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIjaWYgJHthdHRyaWJ1dGVDb25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRhdHRyaWJ1
dGVDb25kaXRpb25hbFN0cmluZzsKIAorICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJK
U1ZhbHVlICR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCAke2NsYXNz
TmFtZX0qIGNhc3RlZFRoaXMpO1xuXG4iKTsKKwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJFbmNvZGVkSlNWYWx1ZSAke2dldEZ1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFz
ZSlcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKIApAQCAtMjU0
NSwxNSArMjU2MiwxNiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7XG4iKTsKICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7
XG4iKTsKIAorICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSBkZWNv
ZGVkVGhpc1ZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSk7XG4iKTsKKyAgICAgICAg
ICAgIG15ICRjYXN0aW5nRnVuY3Rpb24gPSAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiQ3VzdG9tUHJveHlUb0pTT2JqZWN0In0gPyAidG8ke2NsYXNzTmFtZX0iIDogR2V0Q2FzdGlu
Z0hlbHBlckZvclRoaXNPYmplY3QoJGludGVyZmFjZSk7CisgICAgICAgICAgICBpZiAoJGludGVy
ZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkltcGxpY2l0VGhpcyJ9KSB7CisgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byogY2FzdGVkVGhpcyA9IGRlY29kZWRU
aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSA/ICRjYXN0aW5nRnVuY3Rpb24oc3RhdGUtPnRo
aXNWYWx1ZSgpLnRvVGhpcyhzdGF0ZSwgTm90U3RyaWN0TW9kZSkpIDogJGNhc3RpbmdGdW5jdGlv
bihkZWNvZGVkVGhpc1ZhbHVlKTtcbiIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiBjYXN0ZWRUaGlzID0gJGNhc3Rp
bmdGdW5jdGlvbihkZWNvZGVkVGhpc1ZhbHVlKTtcbiIpOworICAgICAgICAgICAgfQorCiAgICAg
ICAgICAgICBpZiAoISRhdHRyaWJ1dGUtPmlzU3RhdGljIHx8ICRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZS0+dHlwZSA9fiAvQ29uc3RydWN0b3IkLykgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIEpTVmFsdWUgZGVjb2RlZFRoaXNWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpO1xuIik7Ci0gICAgICAgICAgICAgICAgbXkgJGNhc3RpbmdGdW5jdGlvbiA9ICRp
bnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Qcm94eVRvSlNPYmplY3QifSA/
ICJ0byR7Y2xhc3NOYW1lfSIgOiBHZXRDYXN0aW5nSGVscGVyRm9yVGhpc09iamVjdCgkaW50ZXJm
YWNlKTsKICAgICAgICAgICAgICAgICAjIGh0dHA6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8j
SW1wbGljaXRUaGlzCi0gICAgICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJJbXBsaWNpdFRoaXMifSkgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBhdXRvKiBjYXN0ZWRUaGlzID0gZGVjb2RlZFRoaXNWYWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpID8gJGNhc3RpbmdGdW5jdGlvbihzdGF0ZS0+dGhpc1ZhbHVlKCkudG9U
aGlzKHN0YXRlLCBOb3RTdHJpY3RNb2RlKSkgOiAkY2FzdGluZ0Z1bmN0aW9uKGRlY29kZWRUaGlz
VmFsdWUpO1xuIik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byogY2FzdGVkVGhpcyA9ICRjYXN0aW5nRnVu
Y3Rpb24oZGVjb2RlZFRoaXNWYWx1ZSk7XG4iKTsKLSAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkge1xuIik7CiAgICAgICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkxlbmllbnRUaGlzIn0pIHsKICAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7XG4iKTsKQEAgLTI1NzMsNiArMjU5MSwxNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1l
bnRhdGlvbgogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwog
ICAgICAgICAgICAgfQogCisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKCR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihzdGF0ZSwgY2FzdGVk
VGhpcykpO1xuIik7CisKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsK
KworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU1ZhbHVlICR7Z2V0RnVuY3Rpb25O
YW1lfUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCAke2NsYXNzTmFtZX0qIGNhc3RlZFRoaXMpXG4i
KTsKKworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKKworICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTtcbiIpOworICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMp
O1xuIik7CisKICAgICAgICAgICAgIG15IEBhcmd1bWVudHMgPSAoKTsKICAgICAgICAgICAgIGlm
ICgkZ2V0dGVyRXhjZXB0aW9ucyAmJiAhSGFzQ3VzdG9tR2V0dGVyKCRhdHRyaWJ1dGUtPnNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKSkgewogICAgICAgICAgICAgICAgIHB1c2goQGFyZ3Vt
ZW50cywgImVjIik7CkBAIC0yNTkwLDEwICsyNjE5LDEwIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVu
dGF0aW9uCiAgICAgICAgICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJTZXR0aW5ncy5o
Iik7CiAgICAgICAgICAgICAgICAgICAgIG15ICRlbmFibGVfZnVuY3Rpb24gPSBUb01ldGhvZE5h
bWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRW5hYmxlZEJ5
U2V0dGluZyJ9KSAuICJFbmFibGVkIjsKICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzLT53cmFwcGVkKCkuZnJhbWUoKSkp
XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKKyAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpO1xu
Iik7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFNldHRpbmdz
JiBzZXR0aW5ncyA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKS5mcmFtZSgpLT5zZXR0aW5ncygpO1xu
Iik7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghc2V0
dGluZ3MuJGVuYWJsZV9mdW5jdGlvbigpKVxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTtcbiIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KIApAQCAtMjYwNSw3ICsyNjM0LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24K
ICAgICAgICAgICAgICAgICAhJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiRG9Ob3RDaGVja1NlY3VyaXR5In0gJiYKICAgICAgICAgICAgICAgICAhJGF0dHJpYnV0
ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRG9Ob3RDaGVja1NlY3VyaXR5T25H
ZXR0ZXIifSkgewogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICgh
QmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KHN0YXRlLCBjYXN0
ZWRUaGlzLT53cmFwcGVkKCkpKVxuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsK
KyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7XG4iKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCRhdHRyaWJ1
dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5vbmRldGVybWluaXN0aWMifSkg
ewpAQCAtMjYyNiw3ICsyNjU1LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgY3Vyc29yLmFwcGVuZElucHV0
PE1lbW9pemVkRE9NUmVzdWx0PCRtZW1vaXplZFR5cGU+PihiaW5kaW5nTmFtZS5nZXQoKS5zdHJp
bmcoKSwgbWVtb2l6ZWRSZXN1bHQsICRleGNlcHRpb25Db2RlKTtcbiIpOwogICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9ICIgLiBOYXRp
dmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNlLCAibWVtb2l6
ZWRSZXN1bHQiLCAiY2FzdGVkVGhpcyIpIC4gIjtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTtcbiIpIGlm
ICRnZXR0ZXJFeGNlcHRpb25zOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7XG4iKTsKKyAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiIpOwogICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwogICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBpZiAoY3Vyc29yLmlzUmVwbGF5aW5nKCkpIHtcbiIpOwpAQCAtMjYzNiwy
NSArMjY2NSwyNSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAg
ICMgRklYTUU6IHRoZSBnZW5lcmF0ZWQgY29kZSBzaG91bGQgcmVwb3J0IGFuIGVycm9yIGlmIGFu
IGlucHV0IGNhbm5vdCBiZSBmZXRjaGVkIG9yIGNvbnZlcnRlZC4KICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2
ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRlcmZhY2UsICJtZW1vaXpl
ZFJlc3VsdCIsICJjYXN0ZWRUaGlzIikgLiAiO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgICAgICAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGlucHV0LT5l
eGNlcHRpb25Db2RlKCkpO1xuIikgaWYgJGdldHRlckV4Y2VwdGlvbnM7Ci0gICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAgICAgfVxuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgfVxuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIjZW5kaWZc
biIpOwogICAgICAgICAgICAgfSAjIGF0dHJpYnV0ZSBOb25kZXRlcm1pbmlzdGljCiAKICAgICAg
ICAgICAgIGlmIChIYXNDdXN0b21HZXR0ZXIoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMpKSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT4kaW1wbEdldHRlckZ1bmN0aW9uTmFt
ZSgqc3RhdGUpKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IHJldHVybiBjYXN0ZWRUaGlzLT4kaW1wbEdldHRlckZ1bmN0aW9uTmFtZSgqc3RhdGUpO1xuIik7
CiAgICAgICAgICAgICB9IGVsc2lmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJDaGVja1NlY3VyaXR5Rm9yTm9kZSJ9KSB7CiAgICAgICAgICAgICAgICAgJGlt
cGxJbmNsdWRlc3siSlNET01CaW5kaW5nLmgifSA9IDE7CiAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTtcbiIp
OwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoc2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUoc3RhdGUsIGltcGwuIiAuICRhdHRyaWJ1
dGUtPnNpZ25hdHVyZS0+bmFtZSAuICIoKSkgPyAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1
dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgImltcGwuJGltcGxHZXR0ZXJGdW5jdGlvbk5h
bWUoKSIsICJjYXN0ZWRUaGlzIikgLiAiIDoganNOdWxsKCkpO1xuIik7CisgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIHNob3VsZEFsbG93QWNjZXNzVG9Ob2Rl
KHN0YXRlLCBpbXBsLiIgLiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUgLiAiKCkpID8gIiAu
IE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRlcmZhY2UsICJp
bXBsLiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCkiLCAiY2FzdGVkVGhpcyIpIC4gIiA6IGpzTnVs
bCgpO1xuIik7CiAgICAgICAgICAgICB9IGVsc2lmICgkdHlwZSBlcSAiRXZlbnRIYW5kbGVyIikg
ewogICAgICAgICAgICAgICAgIG15ICRnZXR0ZXIgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJXaW5kb3dFdmVudEhhbmRsZXIifSA/ICJ3aW5kb3dFdmVudEhh
bmRsZXJBdHRyaWJ1dGUiCiAgICAgICAgICAgICAgICAgICAgIDogJGF0dHJpYnV0ZS0+c2lnbmF0
dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRG9jdW1lbnRFdmVudEhhbmRsZXIifSA/ICJkb2N1
bWVudEV2ZW50SGFuZGxlckF0dHJpYnV0ZSIKICAgICAgICAgICAgICAgICAgICAgOiAiZXZlbnRI
YW5kbGVyQXR0cmlidXRlIjsKICAgICAgICAgICAgICAgICBteSAkZXZlbnROYW1lID0gRXZlbnRI
YW5kbGVyQXR0cmlidXRlRXZlbnROYW1lKCRhdHRyaWJ1dGUpOwogICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7XG4iKTsKLSAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKCRn
ZXR0ZXIoY2FzdGVkVGhpcy0+d3JhcHBlZCgpLCAkZXZlbnROYW1lKSk7XG4iKTsKKyAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gJGdldHRlcihjYXN0ZWRUaGlz
LT53cmFwcGVkKCksICRldmVudE5hbWUpO1xuIik7CiAgICAgICAgICAgICB9IGVsc2lmICgkYXR0
cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgPX4gL0NvbnN0cnVjdG9yJC8pIHsKICAgICAgICAgICAg
ICAgICBteSAkY29uc3RydWN0b3JUeXBlID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlOwog
ICAgICAgICAgICAgICAgICRjb25zdHJ1Y3RvclR5cGUgPX4gcy9Db25zdHJ1Y3RvciQvLzsKQEAg
LTI2NjMsMTAgKzI2OTIsMTAgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAg
ICAgICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKICAgICAgICAgICAg
ICAgICAgICAgbXkgJG5hbWVkID0gKCRjb25zdHJ1Y3RvclR5cGUgPX4gL05hbWVkJC8pID8gIk5h
bWVkIiA6ICIiOwogICAgICAgICAgICAgICAgICAgICAkY29uc3RydWN0b3JUeXBlID1+IHMvTmFt
ZWQkLy87Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlMiIC4gJGNvbnN0cnVjdG9yVHlwZSAuICI6OmdldCR7bmFtZWR9
Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGNhc3RlZFRoaXMpKTtcbiIpOworICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlMiIC4gJGNvbnN0cnVjdG9y
VHlwZSAuICI6OmdldCR7bmFtZWR9Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGNhc3RlZFRoaXMp
O1xuIik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgQWRk
VG9JbXBsSW5jbHVkZXMoIkpTIiAuICRjb25zdHJ1Y3RvclR5cGUgLiAiLmgiLCAkYXR0cmlidXRl
LT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25kaXRpb25hbCJ9KTsKLSAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKUyIgLiAkY29uc3RydWN0b3JUeXBlIC4gIjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZt
KCksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKSk7XG4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTIiAuICRjb25zdHJ1Y3RvclR5cGUg
LiAiOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCkpO1xuIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNpZiAoISRhdHRy
aWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkdldHRlclJhaXNlc0V4Y2Vw
dGlvbiJ9ICYmICEkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJH
ZXR0ZXJSYWlzZXNFeGNlcHRpb25XaXRoTWVzc2FnZSJ9KSB7CiAgICAgICAgICAgICAgICAgbXkg
JGNhY2hlSW5kZXggPSAwOwpAQCAtMjY3NCwxMCArMjcwMywxMCBAQCBzdWIgR2VuZXJhdGVJbXBs
ZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICAkY2FjaGVJbmRleCA9ICRjdXJyZW50Q2Fj
aGVkQXR0cmlidXRlOwogICAgICAgICAgICAgICAgICAgICAkY3VycmVudENhY2hlZEF0dHJpYnV0
ZSsrOwogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoSlNW
YWx1ZSBjYWNoZWRWYWx1ZSA9IGNhc3RlZFRoaXMtPm1fIiAuICRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZS0+bmFtZSAuICIuZ2V0KCkpXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FjaGVkVmFsdWUpO1xuIik7
CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4g
Y2FjaGVkVmFsdWU7XG4iKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBt
eSBAY2FsbFdpdGhBcmdzID0gR2VuZXJhdGVDYWxsV2l0aCgkYXR0cmlidXRlLT5zaWduYXR1cmUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsV2l0aCJ9LCBcQGltcGxDb250ZW50LCAiSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpIik7CisgICAgICAgICAgICAgICAgbXkgQGNhbGxXaXRo
QXJncyA9IEdlbmVyYXRlQ2FsbFdpdGgoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifSwgXEBpbXBsQ29udGVudCwgImpzVW5kZWZpbmVkKCkiKTsK
IAogICAgICAgICAgICAgICAgIGlmICgkc3ZnTGlzdFByb3BlcnR5VHlwZSkgewogICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHJlc3VsdCA9ICAiIC4g
TmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgImNh
c3RlZFRoaXMtPndyYXBwZWQoKS4kaW1wbEdldHRlckZ1bmN0aW9uTmFtZSgiIC4gKGpvaW4gIiwg
IiwgQGNhbGxXaXRoQXJncykgLiAiKSIsICJjYXN0ZWRUaGlzIikgLiAiO1xuIik7CkBAIC0yNzE0
LDEwICsyNzQzLDEwIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgY2FzdGVkVGhp
cy0+bV8iIC4gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lIC4gIi5zZXQoc3RhdGUtPnZtKCks
IGNhc3RlZFRoaXMsIHJlc3VsdCk7XG4iKSBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiQ2FjaGVkQXR0cmlidXRlIn0pOwotICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTtcbiIp
OworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiByZXN1bHQ7
XG4iKTsKIAogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB1bnNoaWZ0KEBh
cmd1bWVudHMsIEdlbmVyYXRlQ2FsbFdpdGgoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifSwgXEBpbXBsQ29udGVudCwgIkpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKSIpKTsKKyAgICAgICAgICAgICAgICB1bnNoaWZ0KEBhcmd1bWVudHMs
IEdlbmVyYXRlQ2FsbFdpdGgoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiQ2FsbFdpdGgifSwgXEBpbXBsQ29udGVudCwgImpzVW5kZWZpbmVkKCkiKSk7CiAKICAg
ICAgICAgICAgICAgICBpZiAoJHN2Z1Byb3BlcnR5T3JMaXN0UHJvcGVydHlUeXBlKSB7CiAgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRzdmdQcm9wZXJ0eU9yTGlz
dFByb3BlcnR5VHlwZSBpbXBsKCpjYXN0ZWRUaGlzLT53cmFwcGVkKCkpO1xuIik7CkBAIC0yNzI5
LDcgKzI3NTgsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogCiAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7XG4i
KTsKIAotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIHJldHVybiByZXN1bHQ7XG4iKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwpAQCAtMzIzMCw2ICszMjU5LDEwIEBAIEVO
RAogCiAgICAgfQogCisgICAgaWYgKCRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZSkgeworICAgICAg
ICBHZW5lcmF0ZVNlcmlhbGl6ZXJGdW5jdGlvbigkaW50ZXJmYWNlLCAkaW50ZXJmYWNlTmFtZSwg
JGNsYXNzTmFtZSwgJHNlcmlhbGl6ZXJGdW5jdGlvbk5hbWUsICRzZXJpYWxpemVyTmF0aXZlRnVu
Y3Rpb25OYW1lKTsKKyAgICB9CisKICAgICBpZiAoJGludGVyZmFjZS0+aXRlcmFibGUpIHsKICAg
ICAgICAgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkl0ZXJhYmxlRnVuY3Rpb25zKCRpbnRlcmZhY2Up
OwogICAgIH0KQEAgLTM0NDIsNiArMzQ3NSwzMSBAQCBFTkQKICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIlxuI2VuZGlmIC8vICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0aW9uYWxT
dHJpbmc7CiB9CiAKK3N1YiBHZW5lcmF0ZVNlcmlhbGl6ZXJGdW5jdGlvbgoreworICAgIG15ICgk
aW50ZXJmYWNlLCAkaW50ZXJmYWNlTmFtZSwgJGNsYXNzTmFtZSwgJHNlcmlhbGl6ZXJGdW5jdGlv
bk5hbWUsICRzZXJpYWxpemVyTmF0aXZlRnVuY3Rpb25OYW1lKSA9IEBfOworCisgICAgQWRkVG9J
bXBsSW5jbHVkZXMoIk9iamVjdENvbnN0cnVjdG9yLmgiKTsKKyAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtzZXJpYWxpemVyTmF0aXZlRnVuY3Rp
b25OYW1lfShFeGVjU3RhdGUqIHN0YXRlKVxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7
XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IHN0
YXRlLT50aGlzVmFsdWUoKTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8g
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlMkaW50ZXJmYWNlTmFtZSo+KHRoaXNWYWx1ZSk7
XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKVxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiB0aHJvd1Ro
aXNUeXBlRXJyb3IoKnN0YXRlLCBcIiRpbnRlcmZhY2VOYW1lXCIsIFwiJHNlcmlhbGl6ZXJGdW5j
dGlvbk5hbWVcIik7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICR7Y2xhc3NOYW1lfTo6aW5mbygpKTtcblxuIikg
dW5sZXNzICRpbnRlcmZhY2VOYW1lIGVxICJFdmVudFRhcmdldCI7CisgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KHN0YXRl
KTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFZNJiB2bSA9IHN0YXRlLT52bSgp
O1xuIik7CisgICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAeyRpbnRlcmZhY2UtPmF0dHJpYnV0
ZXN9KSB7CisgICAgICAgIG15ICRuYW1lID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lOwor
ICAgICAgICBpZiAoZ3JlcCAkXyBlcSAkbmFtZSwgQHskaW50ZXJmYWNlLT5zZXJpYWxpemFibGUt
PmF0dHJpYnV0ZXN9KSB7CisgICAgICAgICAgICBteSAkZ2V0RnVuY3Rpb25OYW1lID0gR2V0QXR0
cmlidXRlR2V0dGVyTmFtZSgkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkYXR0cmlidXRlKTsKKyAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgXCIke25hbWV9XCIpLCAke2dldEZ1bmN0aW9uTmFt
ZX1HZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTtcbiIpOworICAgICAgICB9CisgICAgfQorICAg
IHB1c2goQGltcGxDb250ZW50LCAiXG4gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
O1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOworfQorCiBzdWIgR2VuZXJh
dGVGdW5jdGlvbkNhc3RlZFRoaXMKIHsKICAgICBteSAoJGludGVyZmFjZSwgJGNsYXNzTmFtZSwg
JGZ1bmN0aW9uKSA9IEBfOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9JRExQYXJzZXIucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFBh
cnNlci5wbQppbmRleCBjOGQzZTA5NDQwOGNiODBkZTZmZDgwZGQ4N2ZlNGQ2YWY5YmQyZWE4Li5m
YTBjOGVkY2M0MzMzM2Y4YzIyNGRhMDBhNGM1OTIwOWY3NThiMzk4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbQpAQCAtNTcsNiArNTcsNyBAQCBzdHJ1
Y3QoIGRvbUludGVyZmFjZSA9PiB7CiAgICAgaXNDYWxsYmFjayA9PiAnJCcsICMgVXNlZCBmb3Ig
Y2FsbGJhY2sgaW50ZXJmYWNlcwogICAgIGlzUGFydGlhbCA9PiAnJCcsICMgVXNlZCBmb3IgcGFy
dGlhbCBpbnRlcmZhY2VzCiAgICAgaXRlcmFibGUgPT4gJyQnLCAjIFVzZWQgZm9yIGl0ZXJhYmxl
IGludGVyZmFjZXMKKyAgICBzZXJpYWxpemFibGUgPT4gJyQnLCAjIFVzZWQgZm9yIHNlcmlhbGl6
YWJsZSBpbnRlcmZhY2VzCiB9KTsKIAogIyBVc2VkIHRvIHJlcHJlc2VudCBkb21JbnRlcmZhY2Ug
Y29udGVudHMgKG5hbWUgb2YgbWV0aG9kLCBzaWduYXR1cmUpCkBAIC05NSw2ICs5NiwxMCBAQCBz
dHJ1Y3QoIGRvbUl0ZXJhYmxlID0+IHsKICAgICBmdW5jdGlvbnMgPT4gJ0AnLCAjIEl0ZXJhYmxl
IGZ1bmN0aW9ucyAoZW50cmllcywga2V5cywgdmFsdWVzLCBbU3ltYm9sLkl0ZXJhdG9yXSwgZm9y
RWFjaCkKIH0pOwogCisjIFVzZWQgdG8gcmVwcmVzZW50IHNlcmlhbGl6YWJsZSBpbnRlcmZhY2UK
K3N0cnVjdCggZG9tU2VyaWFsaXphYmxlID0+IHsKKyAgICBhdHRyaWJ1dGVzID0+ICdAJywgIyBM
aXN0IG9mIGF0dHJpYnV0ZXMgdG8gc2VyaWFsaXplCit9KTsKIAogIyBVc2VkIHRvIHJlcHJlc2Vu
dCBzdHJpbmcgY29uc3RhbnRzCiBzdHJ1Y3QoIGRvbUNvbnN0YW50ID0+IHsKQEAgLTEwMzAsNyAr
MTAzNSwxNiBAQCBzdWIgcGFyc2VTZXJpYWxpemVyCiAgICAgbXkgJG5leHQgPSAkc2VsZi0+bmV4
dFRva2VuKCk7CiAgICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJzZXJpYWxpemVyIikgewogICAg
ICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgInNlcmlhbGl6
ZXIiLCBfX0xJTkVfXyk7Ci0gICAgICAgIHJldHVybiAkc2VsZi0+cGFyc2VTZXJpYWxpemVyUmVz
dCgkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKKyAgICAgICAgbXkgJG5leHQgPSAkc2VsZi0+bmV4
dFRva2VuKCk7CisgICAgICAgIG15ICRuZXdEYXRhTm9kZTsKKyAgICAgICAgaWYgKCRuZXh0LT52
YWx1ZSgpIG5lICI7IikgeworICAgICAgICAgICAgJG5ld0RhdGFOb2RlID0gJHNlbGYtPnBhcnNl
U2VyaWFsaXplclJlc3QoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7CisgICAgICAgICAgICBteSAk
bmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICRuZXdEYXRhTm9kZSA9IGRvbVNlcmlhbGl6YWJsZS0+bmV3KCk7CisgICAgICAgIH0KKyAgICAg
ICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICI7IiwgX19MSU5F
X18pOworICAgICAgICByZXR1cm4gJG5ld0RhdGFOb2RlOwogICAgIH0KICAgICAkc2VsZi0+YXNz
ZXJ0VW5leHBlY3RlZFRva2VuKCRuZXh0LT52YWx1ZSgpLCBfX0xJTkVfXyk7CiB9CkBAIC0xMDQz
LDcgKzEwNTcsMTAgQEAgc3ViIHBhcnNlU2VyaWFsaXplclJlc3QKICAgICBteSAkbmV4dCA9ICRz
ZWxmLT5uZXh0VG9rZW4oKTsKICAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgIj0iKSB7CiAgICAg
ICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiPSIsIF9fTElO
RV9fKTsKLSAgICAgICAgcmV0dXJuICRzZWxmLT5wYXJzZVNlcmlhbGl6YXRpb25QYXR0ZXJuKCRl
eHRlbmRlZEF0dHJpYnV0ZUxpc3QpOworICAgICAgICBteSAkYXR0cmlidXRlcyA9ICRzZWxmLT5w
YXJzZVNlcmlhbGl6YXRpb25QYXR0ZXJuKCk7CisgICAgICAgIG15ICRuZXdEYXRhTm9kZSA9IGRv
bVNlcmlhbGl6YWJsZS0+bmV3KCk7CisgICAgICAgICRuZXdEYXRhTm9kZS0+YXR0cmlidXRlcygk
YXR0cmlidXRlcyk7CisgICAgICAgIHJldHVybiAkbmV3RGF0YU5vZGU7CiAgICAgfQogICAgIGlm
ICgkbmV4dC0+dHlwZSgpID09IElkZW50aWZpZXJUb2tlbiB8fCAkbmV4dC0+dmFsdWUoKSBlcSAi
KCIpIHsKICAgICAgICAgcmV0dXJuICRzZWxmLT5wYXJzZU9wZXJhdGlvblJlc3QoJGV4dGVuZGVk
QXR0cmlidXRlTGlzdCk7CkBAIC0xMDUzLDU5ICsxMDcwLDQ1IEBAIHN1YiBwYXJzZVNlcmlhbGl6
ZXJSZXN0CiBzdWIgcGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybgogewogICAgIG15ICRzZWxmID0g
c2hpZnQ7Ci0gICAgbXkgJGV4dGVuZGVkQXR0cmlidXRlTGlzdCA9IHNoaWZ0OwogCiAgICAgbXkg
JG5leHQgPSAkc2VsZi0+bmV4dFRva2VuKCk7CiAgICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJ7
IikgewogICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwg
InsiLCBfX0xJTkVfXyk7Ci0gICAgICAgICRzZWxmLT5wYXJzZVNlcmlhbGl6YXRpb25QYXR0ZXJu
TWFwKCk7CisgICAgICAgIG15ICRhdHRyaWJ1dGVzID0gJHNlbGYtPnBhcnNlU2VyaWFsaXphdGlv
bkF0dHJpYnV0ZXMoKTsKICAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdl
dFRva2VuKCksICJ9IiwgX19MSU5FX18pOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biBcQHskYXR0cmlidXRlc307CiAgICAgfQogICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAiWyIp
IHsKLSAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICJb
IiwgX19MSU5FX18pOwotICAgICAgICAkc2VsZi0+cGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybkxp
c3QoKTsKLSAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCks
ICJdIiwgX19MSU5FX18pOwotICAgICAgICByZXR1cm47CisgICAgICAgIGRpZSAiU2VyaWFsaXph
dGlvbiBvZiBsaXN0cyBwYXR0ZXJuIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLiI7CiAgICAg
fQogICAgIGlmICgkbmV4dC0+dHlwZSgpID09IElkZW50aWZpZXJUb2tlbikgewotICAgICAgICAk
c2VsZi0+YXNzZXJ0VG9rZW5UeXBlKCRzZWxmLT5nZXRUb2tlbigpLCBJZGVudGlmaWVyVG9rZW4p
OwotICAgICAgICByZXR1cm47CisgICAgICAgIG15IEBhdHRyaWJ1dGVzID0gKCk7CisgICAgICAg
IG15ICR0b2tlbiA9ICRzZWxmLT5nZXRUb2tlbigpOworICAgICAgICAkc2VsZi0+YXNzZXJ0VG9r
ZW5UeXBlKCR0b2tlbiwgSWRlbnRpZmllclRva2VuKTsKKyAgICAgICAgcHVzaChAYXR0cmlidXRl
cywgJHRva2VuLT52YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuIFxAYXR0cmlidXRlczsKICAgICB9
CiAgICAgJHNlbGYtPmFzc2VydFVuZXhwZWN0ZWRUb2tlbigkbmV4dC0+dmFsdWUoKSwgX19MSU5F
X18pOwogfQogCi1zdWIgcGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybk1hcAorc3ViIHBhcnNlU2Vy
aWFsaXphdGlvbkF0dHJpYnV0ZXMKIHsKICAgICBteSAkc2VsZiA9IHNoaWZ0OwotICAgIG15ICRu
ZXh0ID0gJHNlbGYtPm5leHRUb2tlbigpOwotICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAiZ2V0
dGVyIikgewotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4o
KSwgImdldHRlciIsIF9fTElORV9fKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAo
JG5leHQtPnZhbHVlKCkgZXEgImluaGVyaXQiKSB7Ci0gICAgICAgICRzZWxmLT5hc3NlcnRUb2tl
blZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiaW5oZXJpdCIsIF9fTElORV9fKTsKLSAgICAgICAg
JHNlbGYtPnBhcnNlSWRlbnRpZmllcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBp
ZiAoJG5leHQtPnR5cGUoKSA9PSBJZGVudGlmaWVyVG9rZW4pIHsKLSAgICAgICAgJHNlbGYtPmFz
c2VydFRva2VuVHlwZSgkc2VsZi0+Z2V0VG9rZW4oKSwgSWRlbnRpZmllclRva2VuKTsKLSAgICAg
ICAgJHNlbGYtPnBhcnNlSWRlbnRpZmllcnMoKTsKLSAgICB9Ci19CisgICAgbXkgJHRva2VuID0g
JHNlbGYtPmdldFRva2VuKCk7CisKKyAgICBpZiAoJHRva2VuLT52YWx1ZSgpIGVxICJnZXR0ZXIi
KSB7CisgICAgICAgIGRpZSAiU2VyaWFsaXplciBnZXR0ZXIga2V5d29yZCBpcyBub3QgY3VycmVu
dGx5IHN1cHBvcnRlZC4iOwogCi1zdWIgcGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybkxpc3QKLXsK
LSAgICBteSAkc2VsZiA9IHNoaWZ0OwotICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tlbigp
OwotICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAiZ2V0dGVyIikgewotICAgICAgICAkc2VsZi0+
YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgImdldHRlciIsIF9fTElORV9fKTsK
LSAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAoJG5leHQtPnR5cGUoKSA9PSBJZGVudGlm
aWVyVG9rZW4pIHsKLSAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVHlwZSgkc2VsZi0+Z2V0VG9r
ZW4oKSwgSWRlbnRpZmllclRva2VuKTsKLSAgICAgICAgJHNlbGYtPnBhcnNlSWRlbnRpZmllcnMo
KTsKKyAgICBpZiAoJHRva2VuLT52YWx1ZSgpIGVxICJpbmhlcml0IikgeworICAgICAgICBkaWUg
IlNlcmlhbGl6ZXIgaW5oZXJpdCBrZXl3b3JkIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLiI7
CiAgICAgfQorCisgICAgbXkgQGF0dHJpYnV0ZXMgPSAoKTsKKyAgICAkc2VsZi0+YXNzZXJ0VG9r
ZW5UeXBlKCR0b2tlbiwgSWRlbnRpZmllclRva2VuKTsKKyAgICBwdXNoKEBhdHRyaWJ1dGVzLCAk
dG9rZW4tPnZhbHVlKCkpOworICAgIHB1c2goQGF0dHJpYnV0ZXMsIEB7JHNlbGYtPnBhcnNlSWRl
bnRpZmllcnMoKX0pOworICAgIHJldHVybiBcQGF0dHJpYnV0ZXM7CiB9CiAKIHN1YiBwYXJzZUlk
ZW50aWZpZXJMaXN0CkBAIC0yMjg3LDYgKzIyOTAsMTkgQEAgc3ViIGFwcGx5TWVtYmVyTGlzdAog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgbmV4dDsKICAgICAgICAgfQorICAgICAgICBpZiAo
cmVmKCRpdGVtKSBlcSAiZG9tU2VyaWFsaXphYmxlIikgeworICAgICAgICAgICAgJGludGVyZmFj
ZS0+c2VyaWFsaXphYmxlKCRpdGVtKTsKKyAgICAgICAgICAgIG5leHQ7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAoJGludGVyZmFjZS0+c2VyaWFsaXphYmxlKSB7CisgICAgICAgIG15ICRu
dW1TZXJpYWxpemVyQXR0cmlidXRlcyA9IEB7JGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5hdHRy
aWJ1dGVzfTsKKyAgICAgICAgaWYgKCRudW1TZXJpYWxpemVyQXR0cmlidXRlcyA9PSAwKSB7Cisg
ICAgICAgICAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEB7JGludGVyZmFjZS0+YXR0cmlidXRl
c30pIHsKKyAgICAgICAgICAgICAgICBwdXNoKEB7JGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5h
dHRyaWJ1dGVzfSwgJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcApp
bmRleCBhY2UwODZjOGQ2MTk2NmY3Y2U3Y2UxZmEzMmViNjQyZmE5ZGI2NmI2Li42ZDZiNGZjZjM0
YTVmYTUyOWY2MGZjOGY3N2RkMTMwZWU1YmM4YzZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9N
T2JqZWN0LmNwcApAQCAtMTQ5LDYgKzE0OSw4IEBAIGJvb2wgSlNUZXN0QWN0aXZlRE9NT2JqZWN0
OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCitKU1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9iamVjdEV4Y2l0
aW5nQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RBY3RpdmVET01PYmplY3QqIGNh
c3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RFeGNpdGlu
Z0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpA
QCAtMTU5LDExICsxNjEsMTggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0
RXhjaXRpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHUKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJv
cigqc3RhdGUsICJUZXN0QWN0aXZlRE9NT2JqZWN0IiwgImV4Y2l0aW5nQXR0ciIpOwogICAgIH0K
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEFjdGl2ZURPTU9iamVjdEV4Y2l0aW5n
QXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdEFjdGl2
ZURPTU9iamVjdEV4Y2l0aW5nQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RBY3Rp
dmVET01PYmplY3QqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNo
b3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coc3RhdGUsIGNhc3RlZFRoaXMtPndyYXBwZWQoKSkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmV4Y2l0aW5nQXR0cigp
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggYTAwNGE5
NzkwOTY3OTdmZDBhNTQ1MTg0YThlMTg2Y2VkNTVlMGQyNC4uN2IwNTkzZGE3YjU5NTIxMTM0ZTA5
ZTVmNjBmYTgwZmU5NTE3M2IyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNw
cApAQCAtMTc2LDYgKzE3Niw4IEBAIHZvaWQgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6ZGVzdHJv
eShKU0M6OkpTQ2VsbCogY2VsbCkKICAgICB0aGlzT2JqZWN0LT5KU1Rlc3RFdmVudENvbnN0cnVj
dG9yOjp+SlNUZXN0RXZlbnRDb25zdHJ1Y3RvcigpOwogfQogCitKU1ZhbHVlIGpzVGVzdEV2ZW50
Q29uc3RydWN0b3JBdHRyMUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RFdmVudENvbnN0
cnVjdG9yKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1
Y3RvckF0dHIxKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKQEAgLTE4NiwxMiArMTg4LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3Ry
dWN0b3JBdHRyMShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzCiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBl
RXJyb3IoKnN0YXRlLCAiVGVzdEV2ZW50Q29uc3RydWN0b3IiLCAiYXR0cjEiKTsKICAgICB9Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjFHZXR0
ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVj
dG9yQXR0cjFHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvciog
Y2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJB
TShjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuYXR0cjEo
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjJHZXR0ZXIoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciogY2FzdGVkVGhpcyk7CisKIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RC
YXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMDIsMTMgKzIxMywyMiBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpcwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
ICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RFdmVudENv
bnN0cnVjdG9yIiwgImF0dHIyIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9
CisKK0pTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIyR2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3IqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3Ry
aW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmF0dHIyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKICNpZiBFTkFCTEUoU1BF
Q0lBTF9FVkVOVCkKK0pTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIzR2V0dGVyKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3IqIGNhc3RlZFRoaXMpOworCiBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjMoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90
QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjE5LDkgKzIzOSwxNiBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjMoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpcwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
ICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RFdmVudENv
bnN0cnVjdG9yIiwgImF0dHIzIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIzR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9
CisKK0pTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIzR2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3IqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3Ry
aW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmF0dHIzKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4
Y2VwdGlvbi5jcHAKaW5kZXggYjI1ZGEzMWNkOGY3MTgzZDEzZTI5NTA4OTEwNTQ5MTNlMmE0M2U1
My4uZTA2YjcwODU3ZDVmNmMzYjdmM2UyNTEwYmEyMDkxOGJkNWJiNDI3ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4
Y2VwdGlvbi5jcHAKQEAgLTE0MSw2ICsxNDEsOCBAQCBib29sIEpTVGVzdEV4Y2VwdGlvbjo6Z2V0
T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFBybwog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAorSlNWYWx1ZSBqc1Rlc3RFeGNlcHRpb25OYW1lR2V0dGVy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEV4Y2VwdGlvbiogY2FzdGVkVGhpcyk7CisKIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEV4Y2VwdGlvbk5hbWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTUxLDkgKzE1MywxNiBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RFeGNlcHRpb25OYW1lKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0
dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RFeGNlcHRpb24iLCAibmFtZSIp
OwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEV4Y2VwdGlvbk5hbWVH
ZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RFeGNlcHRpb25O
YW1lR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEV4Y2VwdGlvbiogY2FzdGVkVGhpcykK
K3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlz
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwubmFtZSgpKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
R2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCmluZGV4IDBkYmYwMDhiNjBmNTE3MTE3NTVjOTVkY2Rj
YmYzMmNlZDIzOWQ5OGQuLjE2YmVhYTM3ZDJlM2JlYjZlZjM3ZmNmZjM1MzY3MjIxNGRjMGIyNjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RHbG9iYWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCkBAIC0xNTQsNiArMTU0LDggQEAgYm9vbCBK
U1Rlc3RHbG9iYWxPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIHN0YXRlLAogICAgIHJldHVybiBmYWxzZTsKIH0KIAorSlNWYWx1ZSBqc1Rlc3RH
bG9iYWxPYmplY3RSZWd1bGFyQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dEdsb2JhbE9iamVjdCogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdFJlZ3VsYXJBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwpAQCAtMTY0LDEzICsxNjYsMjIgQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWwKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0
aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0R2xvYmFsT2JqZWN0IiwgInJlZ3VsYXJB
dHRyaWJ1dGUiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RHbG9i
YWxPYmplY3RSZWd1bGFyQXR0cmlidXRlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisK
K0pTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZUdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3Ry
aW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnJlZ3VsYXJBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAogI2lm
IEVOQUJMRShURVNUX0ZFQVRVUkUpCitKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRB
dFJ1bnRpbWVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2Jq
ZWN0KiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0RW5h
YmxlZEF0UnVudGltZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CkBAIC0xODEsOSArMTkyLDE2IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhy
b3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdEdsb2JhbE9iamVjdCIsICJlbmFibGVkQXRS
dW50aW1lQXR0cmlidXRlIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNU
ZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUdldHRlcihzdGF0ZSwgY2Fz
dGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRp
bWVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0R2xvYmFsT2JqZWN0KiBj
YXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFN
KGNhc3RlZFRoaXMpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5lbmFibGVk
QXRSdW50aW1lQXR0cmlidXRlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAK
aW5kZXggOGM5NDY1NTJiNTljYmE1Yjk0ODMwODBjNjUzMDg2N2NkNTZjNWZiOS4uODNhYjM5Mzk2
YTQ1ODhiNTZiZGQzZWQ0YWViZWM4ODM0MDFjNTQwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAK
QEAgLTQwOSwzMCArNDA5LDU0IEBAIHZvaWQgSlNUZXN0SW50ZXJmYWNlOjpkZXN0cm95KEpTQzo6
SlNDZWxsKiBjZWxsKQogfQogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMjMpCitKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0
YXRpY1JlYWRPbmx5QXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2Uq
IGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rv
ckltcGxlbWVudHNTdGF0aWNSZWFkT25seUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAg
IFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CisgICAgSlNWYWx1ZSBkZWNvZGVkVGhpc1ZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSk7CisgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0SW50ZXJmYWNlKj4oZGVjb2RlZFRoaXNWYWx1ZSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0
aWNSZWFkT25seUF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBq
c1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNSZWFkT25seUF0dHJHZXR0
ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzKQoreworICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoVGVzdEludGVyZmFjZTo6aW1wbGVtZW50c1N0YXRp
Y1JlYWRPbmx5QXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIp
IHx8IEVOQUJMRShDb25kaXRpb24yMykKK0pTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0
b3JJbXBsZW1lbnRzU3RhdGljQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRl
cmZhY2UqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25z
dHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBV
TlVTRURfUEFSQU0oc2xvdEJhc2UpOworICAgIEpTVmFsdWUgZGVjb2RlZFRoaXNWYWx1ZSA9IEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpOworICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdEludGVyZmFjZSo+KGRlY29kZWRUaGlzVmFsdWUpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGlj
QXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdEludGVy
ZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIFRlc3RJbnRlcmZhY2U6OmltcGxlbWVudHNTdGF0aWNB
dHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4g
cmVzdWx0OwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxF
KENvbmRpdGlvbjIzKQorSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMUdldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMpOworCiBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMShFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RC
YXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC00NDMsMTQgKzQ2NywyMyBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMShFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
ICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RJbnRlcmZh
Y2UiLCAiaW1wbGVtZW50c1N0cjEiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykp
OworfQorCitKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIxR2V0dGVyKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJp
bmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuaW1wbGVtZW50c1N0cjEoKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKICNlbmRpZgog
CiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCitKU1ZhbHVl
IGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdEludGVyZmFjZSogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVy
ZmFjZUltcGxlbWVudHNTdHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKQEAgLTQ2MSwxNCArNDk0LDIzIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdElu
dGVyZmFjZUltcGxlbWVudHNTdHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dH
ZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdEludGVyZmFjZSIsICJpbXBsZW1lbnRzU3RyMiIp
OwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEludGVyZmFjZUltcGxl
bWVudHNTdHIyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0
SW50ZXJmYWNlSW1wbGVtZW50c1N0cjJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SW50
ZXJmYWNlKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5V
U0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1w
bC5pbXBsZW1lbnRzU3RyMigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9u
MjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKK0pTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVt
ZW50c1N0cjNHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRU
aGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjMoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpT
T2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtNDc5LDEy
ICs1MjEsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjMo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGgKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUs
ICJUZXN0SW50ZXJmYWNlIiwgImltcGxlbWVudHNTdHIzIik7CiAgICAgfQotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+aW1wbGVtZW50c1N0cjMoKnN0YXRlKSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyM0dldHRl
cihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxl
bWVudHNTdHIzR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSogY2FzdGVk
VGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0
ZWRUaGlzKTsKKyAgICByZXR1cm4gY2FzdGVkVGhpcy0+aW1wbGVtZW50c1N0cjMoKnN0YXRlKTsK
IH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRp
b24yMykKK0pTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGVHZXR0ZXIoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFs
dWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtNDk1LDM4ICs1NDYsNjkgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGgKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAg
IHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0SW50ZXJmYWNlIiwgImlt
cGxlbWVudHNOb2RlIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0
SW50ZXJmYWNlSW1wbGVtZW50c05vZGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKwor
SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9kZUdldHRlcihFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmltcGxlbWVudHNOb2RlKCkpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAj
ZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQor
SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY1JlYWRP
bmx5QXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRo
aXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1l
bnRhbFN0YXRpY1JlYWRPbmx5QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHNsb3RCYXNlKTsKKyAgICBKU1ZhbHVlIGRlY29kZWRUaGlzVmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKTsKKyAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2Fz
dDxKU1Rlc3RJbnRlcmZhY2UqPihkZWNvZGVkVGhpc1ZhbHVlKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljUmVh
ZE9ubHlBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0
SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNSZWFkT25seUF0dHJHZXR0ZXIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzKQoreworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxl
bWVudGFsU3RhdGljUmVhZE9ubHlBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShD
b25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQorSlNWYWx1ZSBqc1Rlc3RJbnRlcmZh
Y2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0
SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xv
dEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhp
c1ZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOworICAgIEpTVmFsdWUgZGVjb2Rl
ZFRoaXNWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpOworICAgIGF1dG8qIGNhc3Rl
ZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZSo+KGRlY29kZWRUaGlzVmFsdWUp
OworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JT
dXBwbGVtZW50YWxTdGF0aWNBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pT
VmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNBdHRyR2V0
dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcykKK3sKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBXZWJDb3JlOjpUZXN0
U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxTdGF0aWNBdHRyKCkpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAjZW5kaWYKIAog
I2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQorSlNWYWx1ZSBq
c1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIxR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdEludGVyZmFjZSogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVy
ZmFjZVN1cHBsZW1lbnRhbFN0cjEoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwpAQCAtNTM3LDE0ICs2MTksMjMgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93
R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RJbnRlcmZhY2UiLCAic3VwcGxlbWVudGFsU3Ry
MSIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEludGVyZmFjZVN1
cHBsZW1lbnRhbFN0cjFHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBq
c1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIxR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdEludGVyZmFjZSogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwor
ICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3Rh
dGUsIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbFN0cjEoaW1wbCkpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0Owog
fQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlv
bjEyKQorSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIyR2V0dGVyKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkK
IHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtNTU1LDE0ICs2NDYsMjMgQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAg
ICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RJbnRlcmZhY2UiLCAi
c3VwcGxlbWVudGFsU3RyMiIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsK
K30KKworSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIyR2V0dGVyKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJp
bmdXaXRoQ2FjaGUoc3RhdGUsIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRh
bFN0cjIoaW1wbCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwg
RU5BQkxFKENvbmRpdGlvbjEyKQorSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxT
dHIzR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcyk7
CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjMoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2Jq
ZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtNTczLDEyICs2
NzMsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMyhF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRl
c3RJbnRlcmZhY2UiLCAic3VwcGxlbWVudGFsU3RyMyIpOwogICAgIH0KLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPnN1cHBsZW1lbnRhbFN0cjMoKnN0YXRlKSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzR2V0
dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0SW50ZXJmYWNlU3Vw
cGxlbWVudGFsU3RyM0dldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UqIGNh
c3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0o
Y2FzdGVkVGhpcyk7CisgICAgcmV0dXJuIGNhc3RlZFRoaXMtPnN1cHBsZW1lbnRhbFN0cjMoKnN0
YXRlKTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShD
b25kaXRpb24xMikKK0pTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZUdldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMpOworCiBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2RlKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xv
dEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTU4OSw5ICs2OTgsMTYgQEAg
RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZShFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
ICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RJbnRlcmZh
Y2UiLCAic3VwcGxlbWVudGFsTm9kZSIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRo
aXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2RlR2V0dGVy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcykKK3sKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdlYkNvcmU6OlRlc3RTdXBw
bGVtZW50YWw6OnN1cHBsZW1lbnRhbE5vZGUoaW1wbCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0
aW5Db25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCmluZGV4IDc5MzI2MWY2MTMyZDBlMGE4
ZjE4MWUzY2NkNWNlYTViMGM3YzY0ZmIuLmI4ODYzMWU1NWM0MTBiOTYyYjc1YWY5MDIwODczOGYz
M2Y1ZDQ3YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcApA
QCAtMTMyLDYgKzEzMiw4IEBAIHZvaWQgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I6OmRlc3Ry
b3koSlNDOjpKU0NlbGwqIGNlbGwpCiAgICAgdGhpc09iamVjdC0+SlNUZXN0SlNCdWlsdGluQ29u
c3RydWN0b3I6On5KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvcigpOwogfQogCitKU1ZhbHVlIGpz
VGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZUN1c3RvbUdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciogY2FzdGVkVGhpcyk7CisKIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZUN1c3Rv
bShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0x
NDIsMTAgKzE0NCwxOSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rv
clRlc3RBdHRyaWJ1dGVDdXN0b20oRXhlY1N0YXRlKiBzdGF0ZSwgRQogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciIsICJ0ZXN0QXR0cmlidXRlQ3VzdG9tIik7
CiAgICAgfQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+dGVzdEF0dHJp
YnV0ZUN1c3RvbSgqc3RhdGUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEpT
QnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZUN1c3RvbUdldHRlcihzdGF0ZSwgY2FzdGVk
VGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJp
YnV0ZUN1c3RvbUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1
Y3RvciogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNF
RF9QQVJBTShjYXN0ZWRUaGlzKTsKKyAgICByZXR1cm4gY2FzdGVkVGhpcy0+dGVzdEF0dHJpYnV0
ZUN1c3RvbSgqc3RhdGUpOwogfQogCiAKK0pTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0
b3JUZXN0QXR0cmlidXRlUldDdXN0b21HZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SlNC
dWlsdGluQ29uc3RydWN0b3IqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RK
U0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3RvbShFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RC
YXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xNTYsNyArMTY3LDE0IEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZVJXQ3Vz
dG9tKEV4ZWNTdGF0ZSogc3RhdGUsCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewog
ICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdEpTQnVpbHRp
bkNvbnN0cnVjdG9yIiwgInRlc3RBdHRyaWJ1dGVSV0N1c3RvbSIpOwogICAgIH0KLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPnRlc3RBdHRyaWJ1dGVSV0N1c3RvbSgqc3Rh
dGUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVj
dG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisK
K0pTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b21H
ZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqIGNhc3Rl
ZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2Fz
dGVkVGhpcyk7CisgICAgcmV0dXJuIGNhc3RlZFRoaXMtPnRlc3RBdHRyaWJ1dGVSV0N1c3RvbSgq
c3RhdGUpOwogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAppbmRleCA5N2RhZDQ1MjNhMjZhZTc1Y2FjNTQ4ODFi
MzNlMmY2YWQzYTE0OTNhLi5jZWFjMGY0ZWE0MzUyZTM3NWZlOGUxNzNkZDRjMWQyNDNmYzkyMjZh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0Tm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5vZGUuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTRE9NSXRlcmF0
b3IuaCIKKyNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlVSTC5oIgog
I2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTU3RyaW5nLmg+
CkBAIC00OSw2ICs1MCw4IEBAIGJvb2wgc2V0SlNUZXN0Tm9kZU5hbWUoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlCiBKU0M6OkVuY29kZWRK
U1ZhbHVlIGpzVGVzdE5vZGVDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTT2JqZWN0Kik7CiBib29sIHNldEpT
VGVzdE5vZGVDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTihFeGVjU3RhdGUqKTsKKwogY2xhc3MgSlNU
ZXN0Tm9kZVByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewogcHVibGlj
OgogICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CkBAIC0xMDcsNiArMTEw
LDcgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE5vZGVQcm90b3R5cGVUYWJs
ZVZhbHVlc1tdID0KICAgICB7ICJrZXlzIiwgSlNDOjpGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIHsg
KGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3ROb2RlUHJvdG90eXBl
RnVuY3Rpb25LZXlzKSwgKGludHB0cl90KSAoMCkgfSB9LAogICAgIHsgInZhbHVlcyIsIEpTQzo6
RnVuY3Rpb24sIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5j
dGlvbj4oanNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVmFsdWVzKSwgKGludHB0cl90KSAoMCkg
fSB9LAogICAgIHsgImZvckVhY2giLCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgeyAoaW50
cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE5vZGVQcm90b3R5cGVGdW5j
dGlvbkZvckVhY2gpLCAoaW50cHRyX3QpICgxKSB9IH0sCisgICAgeyAidG9KU09OIiwgSlNDOjpG
dW5jdGlvbiwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0
aW9uPihqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04pLCAoaW50cHRyX3QpICgwKSB9
IH0sCiB9OwogCiBjb25zdCBDbGFzc0luZm8gSlNUZXN0Tm9kZVByb3RvdHlwZTo6c19pbmZvID0g
eyAiVGVzdE5vZGVQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEpTVGVzdE5vZGVQcm90b3R5cGUpIH07CkBAIC0xMzUsNiArMTM5LDggQEAgSlNPYmplY3Qq
IEpTVGVzdE5vZGU6OnByb3RvdHlwZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCiAgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3ROb2RlPih2bSwgZ2xvYmFsT2Jq
ZWN0KTsKIH0KIAorSlNWYWx1ZSBqc1Rlc3ROb2RlTmFtZUdldHRlcihFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3ROb2RlKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9kZU5h
bWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAt
MTQ1LDkgKzE1MSwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlTmFtZShFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcgogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3ROb2RlIiwgIm5hbWUiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1Rlc3ROb2RlTmFtZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1Zh
bHVlIGpzVGVzdE5vZGVOYW1lR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE5vZGUqIGNh
c3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0o
Y2FzdGVkVGhpcyk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLm5hbWUoKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKIApAQCAtMTkzLDYgKzIwNiwyMSBAQCBKU1ZhbHVlIEpTVGVzdE5vZGU6OmdldENvbnN0
cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICBy
ZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0Tm9kZUNvbnN0cnVjdG9yPih2bSwgKmpzQ2Fz
dDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOwogfQogCitFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTihF
eGVjU3RhdGUqIHN0YXRlKQoreworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNW
YWx1ZSgpOworICAgIGF1dG8gY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9kZSo+
KHRoaXNWYWx1ZSk7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkKKyAgICAgICAgcmV0
dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0Tm9kZSIsICJ0b0pTT04iKTsKKyAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE5vZGU6OmluZm8o
KSk7CisKKyAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3Qoc3RhdGUp
OworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm5hbWUiKSwganNUZXN0Tm9kZU5hbWVHZXR0ZXIo
c3RhdGUsIGNhc3RlZFRoaXMpKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKK30KKwogdXNpbmcgVGVzdE5vZGVJdGVyYXRvciA9IEpTRE9NSXRlcmF0b3I8SlNUZXN0Tm9k
ZT47CiB1c2luZyBUZXN0Tm9kZUl0ZXJhdG9yUHJvdG90eXBlID0gSlNET01JdGVyYXRvclByb3Rv
dHlwZTxKU1Rlc3ROb2RlPjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuY3BwCmlu
ZGV4IDQyMWQ5OTVlYzAzNGZmZTkyZDZkYjliOTI0M2Y2ZTk1YjYwZDNiYzIuLmVlMTgwNWFhNDE2
Y2QzNGQwMGUwMjQxNTMyZGZmZjNjZjAwNzViYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJt
aW5pc3RpYy5jcHAKQEAgLTE0NCw2ICsxNDQsOCBAQCB2b2lkIEpTVGVzdE5vbmRldGVybWluaXN0
aWM6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiAgICAgdGhpc09iamVjdC0+SlNUZXN0Tm9u
ZGV0ZXJtaW5pc3RpYzo6fkpTVGVzdE5vbmRldGVybWluaXN0aWMoKTsKIH0KIAorSlNWYWx1ZSBq
c1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5QXR0ckdldHRlcihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiBjYXN0ZWRUaGlzKTsKKwog
RW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNSZWFk
b25seUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwpAQCAtMTU0LDYgKzE1NiwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlz
dGljTm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5QXR0cihFeGVjU3RhdGUqIHN0YQogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVy
cm9yKCpzdGF0ZSwgIlRlc3ROb25kZXRlcm1pbmlzdGljIiwgIm5vbmRldGVybWluaXN0aWNSZWFk
b25seUF0dHIiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3ROb25k
ZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5QXR0ckdldHRlcihzdGF0ZSwgY2Fz
dGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1p
bmlzdGljUmVhZG9ubHlBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE5vbmRldGVy
bWluaXN0aWMqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBV
TlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCiAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7
CiAgICAgSW5wdXRDdXJzb3ImIGN1cnNvciA9IGdsb2JhbE9iamVjdC0+aW5wdXRDdXJzb3IoKTsK
QEAgLTE2Miw3ICsxNzEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGlj
Tm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5QXR0cihFeGVjU3RhdGUqIHN0YQogICAgICAgICBpbnQz
Ml90IG1lbW9pemVkUmVzdWx0ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpLm5vbmRldGVybWluaXN0
aWNSZWFkb25seUF0dHIoKTsKICAgICAgICAgY3Vyc29yLmFwcGVuZElucHV0PE1lbW9pemVkRE9N
UmVzdWx0PGludDMyX3Q+PihiaW5kaW5nTmFtZS5nZXQoKS5zdHJpbmcoKSwgbWVtb2l6ZWRSZXN1
bHQsIDApOwogICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKG1lbW9pemVkUmVzdWx0
KTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KIAogICAgIGlmIChjdXJzb3IuaXNSZXBsYXlpbmcoKSkgewpAQCAt
MTcwLDE2ICsxNzksMTggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05v
bmRldGVybWluaXN0aWNSZWFkb25seUF0dHIoRXhlY1N0YXRlKiBzdGEKICAgICAgICAgTWVtb2l6
ZWRET01SZXN1bHRCYXNlKiBpbnB1dCA9IGN1cnNvci5mZXRjaElucHV0PE1lbW9pemVkRE9NUmVz
dWx0QmFzZT4oKTsKICAgICAgICAgaWYgKGlucHV0ICYmIGlucHV0LT5jb252ZXJ0VG88aW50MzJf
dD4obWVtb2l6ZWRSZXN1bHQpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVt
YmVyKG1lbW9pemVkUmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICB9CiAj
ZW5kaWYKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5ub25kZXRlcm1pbmlzdGljUmVhZG9ubHlBdHRyKCkp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0
OwogfQogCiAKK0pTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNX
cml0ZWFibGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE5vbmRldGVybWluaXN0
aWMqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGlj
Tm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTkwLDYgKzIwMSwxMyBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIoRXhl
Y1N0YXRlKiBzdAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0
dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3ROb25kZXRlcm1pbmlzdGljIiwg
Im5vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyIik7CiAgICAgfQorICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNXcml0ZWFi
bGVBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0Tm9u
ZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyR2V0dGVyKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdE5vbmRldGVybWluaXN0aWMqIGNhc3RlZFRoaXMpCit7CisgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAjaWYgRU5B
QkxFKFdFQl9SRVBMQVkpCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRl
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAgICAgSW5wdXRDdXJzb3ImIGN1cnNvciA9IGdsb2Jh
bE9iamVjdC0+aW5wdXRDdXJzb3IoKTsKQEAgLTE5OCw3ICsyMTYsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIoRXhl
Y1N0YXRlKiBzdAogICAgICAgICBTdHJpbmcgbWVtb2l6ZWRSZXN1bHQgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCkubm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIoKTsKICAgICAgICAgY3Vyc29y
LmFwcGVuZElucHV0PE1lbW9pemVkRE9NUmVzdWx0PFN0cmluZz4+KGJpbmRpbmdOYW1lLmdldCgp
LnN0cmluZygpLCBtZW1vaXplZFJlc3VsdCwgMCk7CiAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIG1lbW9pemVkUmVzdWx0KTsKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
IAogICAgIGlmIChjdXJzb3IuaXNSZXBsYXlpbmcoKSkgewpAQCAtMjA2LDE2ICsyMjQsMTggQEAg
RW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNXcml0
ZWFibGVBdHRyKEV4ZWNTdGF0ZSogc3QKICAgICAgICAgTWVtb2l6ZWRET01SZXN1bHRCYXNlKiBp
bnB1dCA9IGN1cnNvci5mZXRjaElucHV0PE1lbW9pemVkRE9NUmVzdWx0QmFzZT4oKTsKICAgICAg
ICAgaWYgKGlucHV0ICYmIGlucHV0LT5jb252ZXJ0VG88U3RyaW5nPihtZW1vaXplZFJlc3VsdCkp
IHsKICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUs
IG1lbW9pemVkUmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICB9CiAjZW5k
aWYKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwubm9uZGV0ZXJtaW5pc3RpY1dy
aXRlYWJsZUF0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9u
ZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
Tm9uZGV0ZXJtaW5pc3RpYyogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5v
bmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNs
b3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMjYsNiArMjQ2LDEzIEBA
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljRXhj
ZXB0aW9uQXR0cihFeGVjU3RhdGUqIHN0CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkg
ewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE5vbmRl
dGVybWluaXN0aWMiLCAibm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHIiKTsKICAgICB9Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJt
aW5pc3RpY0V4Y2VwdGlvbkF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNW
YWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHJH
ZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY2FzdGVkVGhp
cykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRU
aGlzKTsKICNpZiBFTkFCTEUoV0VCX1JFUExBWSkKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKICAgICBJbnB1dEN1cnNvciYg
Y3Vyc29yID0gZ2xvYmFsT2JqZWN0LT5pbnB1dEN1cnNvcigpOwpAQCAtMjM0LDcgKzI2MSw3IEBA
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljRXhj
ZXB0aW9uQXR0cihFeGVjU3RhdGUqIHN0CiAgICAgICAgIFN0cmluZyBtZW1vaXplZFJlc3VsdCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKS5ub25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0cigpOwog
ICAgICAgICBjdXJzb3IuYXBwZW5kSW5wdXQ8TWVtb2l6ZWRET01SZXN1bHQ8U3RyaW5nPj4oYmlu
ZGluZ05hbWUuZ2V0KCkuc3RyaW5nKCksIG1lbW9pemVkUmVzdWx0LCAwKTsKICAgICAgICAgSlNW
YWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOwot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQogCiAgICAgaWYgKGN1cnNvci5pc1JlcGxheWluZygpKSB7CkBAIC0yNDIs
MTYgKzI2OSwxOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0
ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHIoRXhlY1N0YXRlKiBzdAogICAgICAgICBNZW1vaXplZERP
TVJlc3VsdEJhc2UqIGlucHV0ID0gY3Vyc29yLmZldGNoSW5wdXQ8TWVtb2l6ZWRET01SZXN1bHRC
YXNlPigpOwogICAgICAgICBpZiAoaW5wdXQgJiYgaW5wdXQtPmNvbnZlcnRUbzxTdHJpbmc+KG1l
bW9pemVkUmVzdWx0KSkgewogICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dp
dGhDYWNoZShzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAg
fQogICAgIH0KICNlbmRpZgogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5ub25k
ZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE5vbmRl
dGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0ckdldHRlcihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiBjYXN0ZWRUaGlzKTsKKwogRW5j
b2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNHZXR0ZXJF
eGNlcHRpb25BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKQEAgLTI2Miw2ICsyOTEsMTMgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJt
aW5pc3RpY05vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyKEV4ZWNTdGEKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5
cGVFcnJvcigqc3RhdGUsICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIsICJub25kZXRlcm1pbmlzdGlj
R2V0dGVyRXhjZXB0aW9uQXR0ciIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0
ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE5vbmRldGVy
bWluaXN0aWNOb25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0ckdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiBjYXN0ZWRUaGlzKQoreworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwogI2lmIEVOQUJMRShXRUJfUkVQTEFZKQogICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwpAQCAt
MjcyLDcgKzMwOCw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25k
ZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0cihFeGVjU3RhCiAgICAgICAgIGN1cnNvci5h
cHBlbmRJbnB1dDxNZW1vaXplZERPTVJlc3VsdDxTdHJpbmc+PihiaW5kaW5nTmFtZS5nZXQoKS5z
dHJpbmcoKSwgbWVtb2l6ZWRSZXN1bHQsIGVjKTsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBq
c1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOwogICAgICAgICBzZXRET01F
eGNlcHRpb24oc3RhdGUsIGVjKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIGlmIChjdXJzb3IuaXNS
ZXBsYXlpbmcoKSkgewpAQCAtMjgxLDE3ICszMTcsMTkgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyKEV4ZWNT
dGEKICAgICAgICAgaWYgKGlucHV0ICYmIGlucHV0LT5jb252ZXJ0VG88U3RyaW5nPihtZW1vaXpl
ZFJlc3VsdCkpIHsKICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2Fj
aGUoc3RhdGUsIG1lbW9pemVkUmVzdWx0KTsKICAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbihz
dGF0ZSwgaW5wdXQtPmV4Y2VwdGlvbkNvZGUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9
CiAgICAgfQogI2VuZGlmCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLm5vbmRl
dGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyKGVjKSk7CiAgICAgc2V0RE9NRXhjZXB0aW9u
KHN0YXRlLCBlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0
ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0cihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNP
YmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0zMDIsNiAr
MzQwLDEzIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1p
bmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0cihFeGVjU3RhCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAi
VGVzdE5vbmRldGVybWluaXN0aWMiLCAibm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0
dHIiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3ROb25kZXRlcm1p
bmlzdGljTm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXIoc3RhdGUsIGNh
c3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJt
aW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
Tm9uZGV0ZXJtaW5pc3RpYyogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICNpZiBFTkFCTEUoV0VCX1JFUExBWSkK
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RhdGUtPmxleGljYWxHbG9iYWxP
YmplY3QoKTsKICAgICBJbnB1dEN1cnNvciYgY3Vyc29yID0gZ2xvYmFsT2JqZWN0LT5pbnB1dEN1
cnNvcigpOwpAQCAtMzEwLDcgKzM1NSw3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVy
bWluaXN0aWNOb25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0cihFeGVjU3RhCiAgICAg
ICAgIFN0cmluZyBtZW1vaXplZFJlc3VsdCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKS5ub25kZXRl
cm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0cigpOwogICAgICAgICBjdXJzb3IuYXBwZW5kSW5w
dXQ8TWVtb2l6ZWRET01SZXN1bHQ8U3RyaW5nPj4oYmluZGluZ05hbWUuZ2V0KCkuc3RyaW5nKCks
IG1lbW9pemVkUmVzdWx0LCAwKTsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dp
dGhDYWNoZShzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgaWYg
KGN1cnNvci5pc1JlcGxheWluZygpKSB7CkBAIC0zMTgsMTMgKzM2MywxMyBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlv
bkF0dHIoRXhlY1N0YQogICAgICAgICBNZW1vaXplZERPTVJlc3VsdEJhc2UqIGlucHV0ID0gY3Vy
c29yLmZldGNoSW5wdXQ8TWVtb2l6ZWRET01SZXN1bHRCYXNlPigpOwogICAgICAgICBpZiAoaW5w
dXQgJiYgaW5wdXQtPmNvbnZlcnRUbzxTdHJpbmc+KG1lbW9pemVkUmVzdWx0KSkgewogICAgICAg
ICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgbWVtb2l6ZWRS
ZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgIH0KICNlbmRpZgogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBq
c1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5ub25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0
aW9uQXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCmluZGV4IGIzZmZkMmJjY2YwNTg2MWQ1MWQ2ODI2
Y2Q1NzE3NGZkNDdmYzliYTYuLjExMDVkMDliMzAwMDAzN2YzMjg4M2Y3NTdmMmI1ZGE5NDVlZmJl
ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RPYmouY3BwCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSAiSlNUZXN0U3ViT2Jq
LmgiCiAjaW5jbHVkZSAiSlNYUGF0aE5TUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJMaWZlY3ljbGVD
YWxsYmFja1F1ZXVlLmgiCisjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRl
ICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJTVkdQb2ludC5oIgpAQCAtODgwLDYgKzg4MSw4IEBAIGJvb2wgc2V0SlNUZXN0T2Jq
UHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2Rl
ZEpTVmFsCiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNP
YmplY3QqKTsKIGJvb2wgc2V0SlNUZXN0T2JqQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIAorRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvSlNPTihFeGVjU3Rh
dGUqKTsKKwogY2xhc3MgSlNUZXN0T2JqUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5h
bE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFz
ZTsKQEAgLTEyOTksNiArMTMwMiw3IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rl
c3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KICAgICB7ICJDT05TVF9WQUxVRV8xNCIsIERv
bnREZWxldGUgfCBSZWFkT25seSB8IENvbnN0YW50SW50ZWdlciwgTm9JbnRyaW5zaWMsIHsgKGxv
bmcgbG9uZykoMHgxYWJjKSB9IH0sCiAgICAgeyAiQ09OU1RfSkFWQVNDUklQVCIsIERvbnREZWxl
dGUgfCBSZWFkT25seSB8IENvbnN0YW50SW50ZWdlciwgTm9JbnRyaW5zaWMsIHsgKGxvbmcgbG9u
ZykoMTUpIH0gfSwKICAgICB7ICJyZWFkb25seSIsIERvbnREZWxldGUgfCBSZWFkT25seSB8IENv
bnN0YW50SW50ZWdlciwgTm9JbnRyaW5zaWMsIHsgKGxvbmcgbG9uZykoMCkgfSB9LAorICAgIHsg
InRvSlNPTiIsIEpTQzo6RnVuY3Rpb24sIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNf
Y2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04pLCAo
aW50cHRyX3QpICgwKSB9IH0sCiB9OwogCiBjb25zdCBDbGFzc0luZm8gSlNUZXN0T2JqUHJvdG90
eXBlOjpzX2luZm8gPSB7ICJUZXN0T2JqZWN0UHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgMCwg
Q1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RPYmpQcm90b3R5cGUpIH07CkBAIC0xMzc1LDYgKzEz
NzksOCBAQCBib29sIEpTVGVzdE9iajo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCB1bgogICAgIHJldHVybiBCYXNlOjpnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KHRoaXNPYmplY3QsIHN0YXRlLCBpbmRleCwgc2xvdCk7CiB9CiAK
K0pTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlMb25nQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWFk
T25seUxvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKQEAgLTEzODUsMTIgKzEzOTEsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVh
ZE9ubHlMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmEKICAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRl
clR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJlYWRPbmx5TG9uZ0F0dHIiKTsKICAgICB9
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpSZWFkT25seUxvbmdBdHRyR2V0
dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlM
b25nQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzTnVtYmVyKGltcGwucmVhZE9ubHlMb25nQXR0cigpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVl
IGpzVGVzdE9ialJlYWRPbmx5U3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVN0
cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwpAQCAtMTQwMSwxMiArMTQxNiwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25s
eVN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpcwogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlw
ZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVhZE9ubHlTdHJpbmdBdHRyIik7CiAgICAgfQor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqUmVhZE9ubHlTdHJpbmdBdHRyR2V0
dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlT
dHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykK
K3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlz
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwucmVhZE9ubHlTdHJpbmdBdHRy
KCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlUZXN0T2JqQXR0ckdldHRlcihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpSZWFkT25seVRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE0MTcsMzIgKzE0NDEsNjMgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUmVhZE9ubHlUZXN0T2JqQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGkKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAg
IHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJlYWRPbmx5
VGVzdE9iakF0dHIiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RP
YmpSZWFkT25seVRlc3RPYmpBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pT
VmFsdWUganNUZXN0T2JqUmVhZE9ubHlUZXN0T2JqQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCBpbXBsLnJlYWRPbmx5VGVzdE9iakF0dHIoKSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNW
YWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1JlYWRPbmx5TG9uZ0F0dHJHZXR0ZXIoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNSZWFkT25seUxvbmdBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xv
dEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhp
c1ZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oc2xvdEJhc2UpOworICAgIEpTVmFsdWUgZGVjb2Rl
ZFRoaXNWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpOworICAgIGF1dG8qIGNhc3Rl
ZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KGRlY29kZWRUaGlzVmFsdWUpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNSZWFkT25s
eUxvbmdBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0
T2JqQ29uc3RydWN0b3JTdGF0aWNSZWFkT25seUxvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwor
ICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVt
YmVyKFRlc3RPYmo6OnN0YXRpY1JlYWRPbmx5TG9uZ0F0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBq
c1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29u
c3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBVTlVT
RURfUEFSQU0oc2xvdEJhc2UpOworICAgIEpTVmFsdWUgZGVjb2RlZFRoaXNWYWx1ZSA9IEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpOworICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWND
YXN0PEpTVGVzdE9iaio+KGRlY29kZWRUaGlzVmFsdWUpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyR2V0dGVyKHN0YXRlLCBj
YXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJp
bmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sK
KyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsK
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBUZXN0T2JqOjpz
dGF0aWNTdHJpbmdBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JU
ZXN0U3ViT2JqR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcyk7
CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yVGVzdFN1Yk9iaihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmpl
Y3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xNDUzLDEwICsx
NTA4LDE5IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yVGVzdFN1Yk9iaihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAi
VGVzdE9iaiIsICJUZXN0U3ViT2JqIik7CiAgICAgfQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNUZXN0U3ViT2JqOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgY2FzdGVkVGhpcy0+
Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakNv
bnN0cnVjdG9yVGVzdFN1Yk9iakdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1Zh
bHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yVGVzdFN1Yk9iakdldHRlcihFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CisgICAgcmV0dXJuIEpTVGVzdFN1Yk9iajo6Z2V0
Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKIH0K
IAogCitKU1ZhbHVlIGpzVGVzdE9ialRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0
b3JHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0x
NDY3LDE1ICsxNTMxLDI0IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialRlc3RTdWJPYmpFbmFi
bGVkQnlTZXR0aW5nQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwKICAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigq
c3RhdGUsICJUZXN0T2JqIiwgIlRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nIik7CiAgICAgfQor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNl
dHRpbmdDb25zdHJ1Y3RvckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVl
IGpzVGVzdE9ialRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3JHZXR0ZXIoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcy0+d3JhcHBlZCgpLmZyYW1lKCkpKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
ICAgICBTZXR0aW5ncyYgc2V0dGluZ3MgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCkuZnJhbWUoKS0+
c2V0dGluZ3MoKTsKICAgICBpZiAoIXNldHRpbmdzLnRlc3RTZXR0aW5nRW5hYmxlZCgpKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNUZXN0U3ViT2JqOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwg
Y2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisgICAgcmV0dXJuIEpTVGVzdFN1Yk9iajo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCks
IGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iakVu
dW1BdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcyk7CisK
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakVudW1BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE0ODYsMTIgKzE1NTksMjEgQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqRW51bUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm8KICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAg
ICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImVudW1B
dHRyIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqRW51bUF0
dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpFbnVt
QXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmVudW1BdHRyKCkpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pT
VmFsdWUganNUZXN0T2JqQnl0ZUF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQnl0ZUF0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2Jq
ZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTUwMiwxMiAr
MTU4NCwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpCeXRlQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBybwogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwg
IlRlc3RPYmoiLCAiYnl0ZUF0dHIiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1Rlc3RPYmpCeXRlQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1Zh
bHVlIGpzVGVzdE9iakJ5dGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJB
TShjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5ieXRlQXR0cigpKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitK
U1ZhbHVlIGpzVGVzdE9iak9jdGV0QXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpPY3RldEF0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpT
T2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTUxOCwx
MiArMTYwOSwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpPY3RldEF0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcgogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0
ZSwgIlRlc3RPYmoiLCAib2N0ZXRBdHRyIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNUZXN0T2JqT2N0ZXRBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisK
K0pTVmFsdWUganNUZXN0T2JqT2N0ZXRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNF
RF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5vY3RldEF0dHIoKSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpTaG9ydEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU2hvcnRB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAg
LTE1MzQsMTIgKzE2MzQsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU2hvcnRBdHRyKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHIKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJv
cigqc3RhdGUsICJUZXN0T2JqIiwgInNob3J0QXR0ciIpOwogICAgIH0KKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialNob3J0QXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykp
OworfQorCitKU1ZhbHVlIGpzVGVzdE9ialNob3J0QXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuc2hvcnRBdHRy
KCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0ckdldHRlcihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE1NTAsMTIgKzE2NTksMjEgQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmEKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVy
biB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImNsYW1wZWRTaG9ydEF0
dHIiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpDbGFtcGVk
U2hvcnRBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0
T2JqQ2xhbXBlZFNob3J0QXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0o
Y2FzdGVkVGhpcyk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuY2xhbXBlZFNob3J0QXR0cigpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogCitKU1ZhbHVlIGpzVGVzdE9iakVuZm9yY2VSYW5nZVNob3J0QXR0ckdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTU2NiwxMiArMTY4NCwyMSBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0
dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiZW5mb3JjZVJhbmdl
U2hvcnRBdHRyIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2Jq
RW5mb3JjZVJhbmdlU2hvcnRBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pT
VmFsdWUganNUZXN0T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwor
ICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5lbmZvcmNl
UmFuZ2VTaG9ydEF0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwor
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZFNob3J0
QXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpOworCiBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RC
YXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xNTgyLDEyICsxNzA5LDIxIEBA
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkg
ewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIs
ICJ1bnNpZ25lZFNob3J0QXR0ciIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9
CisKK0pTVmFsdWUganNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLnVuc2ln
bmVkU2hvcnRBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqTG9uZ0F0dHJHZXR0ZXIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwpAQCAtMTU5OCwxMiArMTczNCwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFBybwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRo
cm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibG9uZ0F0dHIiKTsKICAgICB9
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpMb25nQXR0ckdldHRlcihzdGF0
ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iakxvbmdBdHRyR2V0dGVyKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIo
aW1wbC5sb25nQXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iakxvbmdMb25nQXR0ckdl
dHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTYxNCwxMiArMTc1OSwyMSBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAg
cmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibG9uZ0xvbmdB
dHRyIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqTG9uZ0xv
bmdBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2Jq
TG9uZ0xvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhp
cykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRU
aGlzKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5sb25nTG9uZ0F0dHIoKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1
ZSBqc1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25l
ZExvbmdMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CkBAIC0xNjMwLDEyICsxNzg0LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialVu
c2lnbmVkTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoCiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ1bnNpZ25lZExvbmdMb25nQXR0ciIpOwog
ICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialVuc2lnbmVkTG9uZ0xv
bmdBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2Jq
VW5zaWduZWRMb25nTG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFN
KGNhc3RlZFRoaXMpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLnVuc2lnbmVkTG9uZ0xvbmdBdHRyKCkp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0
OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpT
dHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKQEAgLTE2NDYsMTIgKzE4MDksMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5n
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFAKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5
cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInN0cmluZ0F0dHIiKTsKICAgICB9CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpTdHJpbmdBdHRyR2V0dGVyKHN0YXRlLCBjYXN0
ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0ckdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENh
Y2hlKHN0YXRlLCBpbXBsLnN0cmluZ0F0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpU
ZXN0T2JqQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMp
OworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0T2JqQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RC
YXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xNjYyLDEyICsxODM0LDIxIEBA
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7
CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwg
InRlc3RPYmpBdHRyIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0
T2JqVGVzdE9iakF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBq
c1Rlc3RPYmpUZXN0T2JqQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0o
Y2FzdGVkVGhpcyk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
LCBpbXBsLnRlc3RPYmpBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqVGVzdE51bGxh
YmxlT2JqQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMp
OworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVj
dCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE2NzgsMTIgKzE4
NTksMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0cihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGkKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJU
ZXN0T2JqIiwgInRlc3ROdWxsYWJsZU9iakF0dHIiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyR2V0dGVyKHN0YXRlLCBjYXN0
ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0ckdldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMo
c3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnRlc3ROdWxsYWJsZU9iakF0
dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0dHJHZXR0ZXIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE2OTQsMTIgKzE4ODQsMjEgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXMKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQorICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyR2V0dGVyKHN0YXRl
LCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRy
R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwubGVuaWVudFRlc3RP
YmpBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1
cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqVW5mb3JnZWFibGVBdHRyR2V0dGVy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialVuZm9yZ2VhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xNzEwLDEyICsxOTA5LDIxIEBAIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialVuZm9yZ2VhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBy
ZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ1bmZvcmdlYWJs
ZUF0dHIiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpVbmZv
cmdlYWJsZUF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rl
c3RPYmpVbmZvcmdlYWJsZUF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFN
KGNhc3RlZFRoaXMpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC51bmZvcmdl
YWJsZUF0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdO
dWxsQXNFbXB0eVN0cmluZ0dldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxs
QXNFbXB0eVN0cmluZyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CkBAIC0xNzI2LDEyICsxOTM0LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0
cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSogc3RhdGUsIEVuCiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNF
bXB0eVN0cmluZyIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9i
alN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nR2V0dGVyKHN0YXRlLCBjYXN0ZWRU
aGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1w
dHlTdHJpbmdHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQor
eworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5zdHJpbmdBdHRyVHJlYXRpbmdO
dWxsQXNFbXB0eVN0cmluZygpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialhNTE9iakF0dHJH
ZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqWE1MT2JqQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xNzQyLDEyICsxOTU5LDIxIEBAIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialhNTE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBy
ZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJYTUxPYmpBdHRy
Iik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqWE1MT2JqQXR0
ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9ialhNTE9i
akF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQorewor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1
bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC54bWxPYmpB
dHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4g
cmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqQ3JlYXRlR2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
akNyZWF0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CkBAIC0xNzU4LDEyICsxOTg0LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNyZWF0ZShF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlCiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBl
RXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJjcmVhdGUiKTsKICAgICB9CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1Rlc3RPYmpDcmVhdGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsK
K30KKworSlNWYWx1ZSBqc1Rlc3RPYmpDcmVhdGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5V
U0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4oaW1wbC5pc0NyZWF0ZSgpKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xNzc0LDEyICsyMDA5LDIxIEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1
cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJyZWZsZWN0ZWRTdHJp
bmdBdHRyIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqUmVm
bGVjdGVkU3RyaW5nQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVl
IGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5V
U0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1w
bC5mYXN0R2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkc3RyaW5nYXR0
ckF0dHIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0ckdl
dHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFz
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTc5MCwxMiArMjAzNCwyMSBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
ICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAi
cmVmbGVjdGVkSW50ZWdyYWxBdHRyIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlz
KSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyR2V0dGVyKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIo
aW1wbC5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGlu
dGVncmFsYXR0ckF0dHIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVuc2ln
bmVkSW50ZWdyYWxBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVk
VGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdy
YWxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
QEAgLTE4MDYsMTIgKzIwNTksMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVk
VW5zaWduZWRJbnRlZ3JhbEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEoKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVF
cnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyIik7
CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqUmVmbGVjdGVkVW5z
aWduZWRJbnRlZ3JhbEF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1
ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ckdldHRlcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKHN0ZDo6bWF4
KDAsIGltcGwuZ2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0
ZWR1bnNpZ25lZGludGVncmFsYXR0ckF0dHIpKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpS
ZWZsZWN0ZWRCb29sZWFuQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0x
ODIyLDEyICsyMDg0LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEJvb2xl
YW5BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoCiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3Io
KnN0YXRlLCAiVGVzdE9iaiIsICJyZWZsZWN0ZWRCb29sZWFuQXR0ciIpOwogICAgIH0KKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyR2V0dGVy
KHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQm9v
bGVhbkF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQor
eworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc0Jvb2xlYW4oaW1wbC5mYXN0SGFzQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1l
czo6cmVmbGVjdGVkYm9vbGVhbmF0dHJBdHRyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpS
ZWZsZWN0ZWRVUkxBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVk
VGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVSTEF0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2Jq
ZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTgzOCwxMiAr
MjEwOSwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYQogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwg
IlRlc3RPYmoiLCAicmVmbGVjdGVkVVJMQXR0ciIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVGVzdE9ialJlZmxlY3RlZFVSTEF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRo
aXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyR2V0dGVyKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRo
Q2FjaGUoc3RhdGUsIGltcGwuZ2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVm
bGVjdGVkdXJsYXR0ckF0dHIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0
cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsK
KwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3Qq
IHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xODU0LDEyICsyMTM0
LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVz
dE9iaiIsICJyZWZsZWN0ZWRTdHJpbmdBdHRyIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVk
VGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJHZXR0ZXIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmlu
Z1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5mYXN0R2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1l
czo6Y3VzdG9tQ29udGVudFN0cmluZ0F0dHJBdHRyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RP
YmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVk
Q3VzdG9tSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKQEAgLTE4NzAsMTIgKzIxNTksMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1YKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJv
d0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJlZmxlY3RlZEN1c3RvbUludGVn
cmFsQXR0ciIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialJl
ZmxlY3RlZEN1c3RvbUludGVncmFsQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQor
CitKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0ckdldHRlcihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGlt
cGwuZ2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50
SW50ZWdyYWxBdHRyQXR0cikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3Vz
dG9tQm9vbGVhbkF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAt
MTg4NiwxMiArMjE4NCwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0
b21Cb29sZWFuQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYQogICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9y
KCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHIiKTsKICAgICB9
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29s
ZWFuQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9i
alJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNF
RF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKGltcGwuZmFzdEhhc0F0dHJpYnV0
ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRCb29sZWFuQXR0ckF0dHIpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogCitKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHJHZXR0ZXIoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xOTAyLDEzICsyMjA5LDIyIEBAIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJl
dHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJlZmxlY3RlZEN1
c3RvbVVSTEF0dHIiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RP
YmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisK
K0pTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0ckdldHRlcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hl
KHN0YXRlLCBpbXBsLmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNv
bnRlbnRVUkxBdHRyQXR0cikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQorSlNW
YWx1ZSBqc1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
akVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTkxOSwxMyArMjIzNSwyMiBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0
dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiZW5hYmxlZEF0UnVu
dGltZUF0dHJpYnV0ZSIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVz
dE9iakVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsK
K30KKworSlNWYWx1ZSBqc1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlR2V0dGVyKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdX
aXRoQ2FjaGUoc3RhdGUsIGltcGwuZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSgpKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAog
I2VuZGlmCiAKK0pTVmFsdWUganNUZXN0T2JqVHlwZWRBcnJheUF0dHJHZXR0ZXIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqVHlwZWRBcnJheUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwpAQCAtMTkzNiwxMiArMjI2MSwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpUeXBlZEFycmF5QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93
R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAidHlwZWRBcnJheUF0dHIiKTsKICAg
ICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpUeXBlZEFycmF5QXR0ckdl
dHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9ialR5cGVkQXJy
YXlBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sK
KyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVz
dWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwudHlwZWRB
cnJheUF0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2Vw
dGlvbkdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpOworCiBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3Qq
IHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xOTUyLDE0ICsyMjg2
LDIzIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVz
dE9iaiIsICJhdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOwogICAgIH0KKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uR2V0dGVyKHN0YXRl
LCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqQXR0cldpdGhHZXR0ZXJFeGNl
cHRpb25HZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQorewor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmF0dHJXaXRoR2V0
dGVyRXhjZXB0aW9uKGVjKSk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
IAorSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlR2V0
dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uV2l0aE1lc3NhZ2UoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2Jq
ZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTk3MCwxNCAr
MjMxMywyMyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlv
bldpdGhNZXNzYWdlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuYwogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwg
IlRlc3RPYmoiLCAiYXR0cldpdGhHZXR0ZXJFeGNlcHRpb25XaXRoTWVzc2FnZSIpOwogICAgIH0K
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakF0dHJXaXRoR2V0dGVyRXhjZXB0
aW9uV2l0aE1lc3NhZ2VHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBq
c1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlR2V0dGVyKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBFeGNlcHRpb25Db2RlV2l0
aE1lc3NhZ2UgZWM7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuYXR0cldpdGhHZXR0ZXJFeGNlcHRpb25X
aXRoTWVzc2FnZShlYykpOwogICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAK
K0pTVmFsdWUganNUZXN0T2JqQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTk4OCwxMiArMjM0MCwyMSBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0
dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiYXR0cldpdGhTZXR0
ZXJFeGNlcHRpb24iKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RP
YmpBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQor
CitKU1ZhbHVlIGpzVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5h
dHRyV2l0aFNldHRlckV4Y2VwdGlvbigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iakF0dHJX
aXRoU2V0dGVyRXhjZXB0aW9uV2l0aE1lc3NhZ2VHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cldpdGhT
ZXR0ZXJFeGNlcHRpb25XaXRoTWVzc2FnZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMDA0LDEyICsyMzY1LDIxIEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uV2l0aE1lc3NhZ2UoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1
cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJhdHRyV2l0aFNldHRl
ckV4Y2VwdGlvbldpdGhNZXNzYWdlIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNUZXN0T2JqQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25XaXRoTWVzc2FnZUdldHRlcihzdGF0
ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhj
ZXB0aW9uV2l0aE1lc3NhZ2VHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNh
c3RlZFRoaXMpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
SlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uV2l0
aE1lc3NhZ2UoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aEdldHRl
ckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMp
OworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlv
bihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0y
MDIwLDE0ICsyMzkwLDIzIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJXaXRo
R2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKCiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3Io
KnN0YXRlLCAiVGVzdE9iaiIsICJzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOwogICAg
IH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0
dGVyRXhjZXB0aW9uR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNU
ZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1
bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5zdHJpbmdBdHRyV2l0aEdldHRlckV4
Y2VwdGlvbihlYykpOwogICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pT
VmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkK
IHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjAzOCwxMiArMjQxNywyMSBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSgogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAg
ICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAic3Ry
aW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24iKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcihzdGF0
ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJXaXRoU2V0
dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhp
cykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRU
aGlzKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuc3RyaW5nQXR0cldpdGhT
ZXR0ZXJFeGNlcHRpb24oKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwor
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpY3RUeXBlQ2hl
Y2tpbmdBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaWN0VHlwZUNoZWNraW5nQXR0cmli
dXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAg
LTIwNTQsMTIgKzI0NDIsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaWN0VHlwZUNo
ZWNraW5nQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1YKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJv
cigqc3RhdGUsICJUZXN0T2JqIiwgInN0cmljdFR5cGVDaGVja2luZ0F0dHJpYnV0ZSIpOwogICAg
IH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialN0cmljdFR5cGVDaGVja2lu
Z0F0dHJpYnV0ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVz
dE9ialN0cmljdFR5cGVDaGVja2luZ0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBV
TlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCBpbXBsLnN0cmljdFR5cGVDaGVja2luZ0F0dHJpYnV0ZSgpKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAog
CitKU1ZhbHVlIGpzVGVzdE9iakN1c3RvbUF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ3VzdG9tQXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0y
MDcwLDEwICsyNDY3LDE5IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakN1c3RvbUF0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQCiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3Io
KnN0YXRlLCAiVGVzdE9iaiIsICJjdXN0b21BdHRyIik7CiAgICAgfQotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+Y3VzdG9tQXR0cigqc3RhdGUpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakN1c3RvbUF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRo
aXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpDdXN0b21BdHRyR2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKKyAgICByZXR1cm4gY2FzdGVkVGhpcy0+
Y3VzdG9tQXR0cigqc3RhdGUpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqT25mb29HZXR0ZXIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqT25mb28oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwpAQCAtMjA4NCwxMSArMjQ5MCwyMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpPbmZvbyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cgogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93
R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAib25mb28iKTsKICAgICB9CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpPbmZvb0dldHRlcihzdGF0ZSwgY2FzdGVk
VGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iak9uZm9vR2V0dGVyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwor
ICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZXZlbnRIYW5kbGVyQXR0cmlidXRlKGNhc3RlZFRo
aXMtPndyYXBwZWQoKSwgZXZlbnROYW1lcygpLmZvb0V2ZW50KSk7CisgICAgcmV0dXJuIGV2ZW50
SGFuZGxlckF0dHJpYnV0ZShjYXN0ZWRUaGlzLT53cmFwcGVkKCksIGV2ZW50TmFtZXMoKS5mb29F
dmVudCk7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpPbndlYmtpdGZvb0dldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpPbndlYmtpdGZvbyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CkBAIC0yMDk5LDExICsyNTE0LDIwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
ak9ud2Via2l0Zm9vKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dl
dHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm9ud2Via2l0Zm9vIik7CiAgICAgfQor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqT253ZWJraXRmb29HZXR0ZXIoc3Rh
dGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpPbndlYmtpdGZvb0dldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGV2ZW50SGFuZGxlckF0
dHJpYnV0ZShjYXN0ZWRUaGlzLT53cmFwcGVkKCksIGV2ZW50TmFtZXMoKS5mb29FdmVudCkpOwor
ICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwor
ICAgIHJldHVybiBldmVudEhhbmRsZXJBdHRyaWJ1dGUoY2FzdGVkVGhpcy0+d3JhcHBlZCgpLCBl
dmVudE5hbWVzKCkuZm9vRXZlbnQpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlw
dFN0YXRlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVk
VGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0
ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0y
MTE0LDEyICsyNTM4LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRTdGF0
ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1CiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3Io
KnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUiKTsKICAgICB9Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1
dGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpXaXRo
U2NyaXB0U3RhdGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFN
KGNhc3RlZFRoaXMpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0
ZSgqc3RhdGUpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRl
ckNhbGxXaXRoQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRl
ckNhbGxXaXRoQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKQEAgLTIxMzAsMTIgKzI1NjMsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0
ZSwKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJv
d0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIndpdGhDYWxsV2l0aEFuZFNldHRl
ckNhbGxXaXRoQXR0cmlidXRlIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGVHZXR0ZXIoc3Rh
dGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRT
ZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFS
QU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwud2l0aENhbGxXaXRoQW5kU2V0dGVy
Q2FsbFdpdGhBdHRyaWJ1dGUoKnN0YXRlKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpXaXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMTQ2LDE1ICsyNTg4LDI0IEBAIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBy
ZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZSIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlR2V0dGVy
KHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BB
UkFNKGNhc3RlZFRoaXMpOwogICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOwogICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QXR0cmlidXRlKCpjb250ZXh0KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RP
YmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNj
cmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKQEAgLTIxNjUsMTQgKzI2MTYsMjMgQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWQKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVy
biB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRTdGF0
ZUF0dHJpYnV0ZVJhaXNlcyIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0dldHRlcihzdGF0ZSwgY2FzdGVk
VGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJh
aXNlc0dldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcygqc3RhdGUs
IGVjKSk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBq
c1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlc0dldHRlcihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcyhFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNP
YmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMTgzLDE3
ICsyNjQzLDI2IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSogc3RhCiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRl
LCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcyIp
OwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialdpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7
Cit9CisKK0pTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1
dGVSYWlzZXNHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQor
eworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMp
OwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLndp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKCpjb250ZXh0LCBlYykpOwog
ICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2Jq
V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZUdldHRlcihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmli
dXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAg
LTIyMDQsMTUgKzI2NzMsMjQgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZShFeGVjU3QKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJv
cigqc3RhdGUsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0
U3RhdGVBdHRyaWJ1dGUiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rl
c3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlR2V0
dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0byogY29udGV4dCA9IGpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpT
VmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGlt
cGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZSgqc3Rh
dGUsICpjb250ZXh0KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzR2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
aldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUs
IEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjIy
MywxNyArMjcwMSwyNiBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKAogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0
ZUF0dHJpYnV0ZVJhaXNlcyIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVS
YWlzZXNHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpX
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzR2V0
dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSB0
b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKCpzdGF0ZSwgKmNvbnRl
eHQsIGVjKSk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1
ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNw
YWNlc0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQog
ewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMjQ0LDE1ICsyNzMxLDI0IEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3Rh
dGVXaXRoU3BhY2VzQXR0cmliCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAg
ICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZSIp
OwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialdpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlR2V0dGVyKHN0
YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIGF1dG8qIGNvbnRleHQg
PSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghY29udGV4dCkKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
LCBpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2Vz
QXR0cmlidXRlKCpzdGF0ZSwgKmNvbnRleHQpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialdp
dGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
V2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RC
YXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMjYzLDEzICsyNzU5LDIyIEBA
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tB
dHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkg
ewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIs
ICJ3aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlIik7CiAgICAgfQorICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENh
bGxTdGFja0F0dHJpYnV0ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVl
IGpzVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGVHZXR0ZXIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0
YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0QXJndW1lbnRz
QW5kQ2FsbFN0YWNrQXR0cmlidXRlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkK
K0pTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMUdldHRlcihFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25k
aXRpb25hbEF0dHIxKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKQEAgLTIyODAsMTQgKzI3ODUsMjMgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29u
ZGl0aW9uYWxBdHRyMShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmEKICAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRl
clR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImNvbmRpdGlvbmFsQXR0cjEiKTsKICAgICB9
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxR2V0
dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9u
YWxBdHRyMUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzTnVtYmVyKGltcGwuY29uZGl0aW9uYWxBdHRyMSgpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCitKU1ZhbHVlIGpz
VGVzdE9iakNvbmRpdGlvbmFsQXR0cjJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRy
MihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0y
Mjk4LDE0ICsyODEyLDIzIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0
cjIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhCiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3Io
KnN0YXRlLCAiVGVzdE9iaiIsICJjb25kaXRpb25hbEF0dHIyIik7CiAgICAgfQorICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMkdldHRlcihzdGF0ZSwg
Y2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjJHZXR0
ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051
bWJlcihpbXBsLmNvbmRpdGlvbmFsQXR0cjIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxF
KENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQorSlNWYWx1ZSBqc1Rlc3RPYmpDb25k
aXRpb25hbEF0dHIzR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjMoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0
KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjMxNiwxNCArMjgz
OSwyMyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRl
c3RPYmoiLCAiY29uZGl0aW9uYWxBdHRyMyIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjNHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMp
KTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzR2V0dGVyKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5j
b25kaXRpb25hbEF0dHIzKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24x
KQorSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3JHZXR0ZXIoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2Up
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTIzMzQsMTIgKzI4NjYsMjEgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1YKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAg
ICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImNv
bmRpdGlvbmFsQXR0cjQiKTsKICAgICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rl
c3RPYmplY3RBOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgY2FzdGVkVGhpcy0+Z2xvYmFs
T2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakNvbmRpdGlv
bmFsQXR0cjRDb25zdHJ1Y3RvckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1Zh
bHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CisgICAgcmV0dXJuIEpTVGVzdE9iamVj
dEE6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSk7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25k
aXRpb24yKQorSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3JHZXR0
ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xv
dEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTIzNTAsMTIgKzI4OTEsMjEg
QEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1YKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2Jq
IiwgImNvbmRpdGlvbmFsQXR0cjUiKTsKICAgICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1Rlc3RPYmplY3RCOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgY2FzdGVkVGhpcy0+
Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakNv
bmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3RvckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQor
CitKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3RvckdldHRlcihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CisgICAgcmV0dXJuIEpTVGVz
dE9iamVjdEI6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSk7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJM
RShDb25kaXRpb24yKQorSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0
b3JHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVjdG9yKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVj
dCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTIzNjYsMTEgKzI5
MTYsMjAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1YKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJU
ZXN0T2JqIiwgImNvbmRpdGlvbmFsQXR0cjYiKTsKICAgICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKU1Rlc3RPYmplY3RDOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVz
dE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykp
OworfQorCitKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvckdldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CisgICAgcmV0dXJu
IEpTVGVzdE9iamVjdEM6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSk7CiB9CiAKICNlbmRpZgogCitKU1ZhbHVlIGpzVGVzdE9iakNhY2hlZEF0
dHJpYnV0ZTFHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsK
KwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMShFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNs
b3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMzgxLDE1ICsyOTQwLDI0
IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTEoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9i
aiIsICJjYWNoZWRBdHRyaWJ1dGUxIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwor
fQorCitKU1ZhbHVlIGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTFHZXR0ZXIoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIGlmIChKU1ZhbHVlIGNhY2hlZFZh
bHVlID0gY2FzdGVkVGhpcy0+bV9jYWNoZWRBdHRyaWJ1dGUxLmdldCgpKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhY2hlZFZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGNhY2hlZFZh
bHVlOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1
ZSByZXN1bHQgPSBpbXBsLmNhY2hlZEF0dHJpYnV0ZTEoKTsKICAgICBjYXN0ZWRUaGlzLT5tX2Nh
Y2hlZEF0dHJpYnV0ZTEuc2V0KHN0YXRlLT52bSgpLCBjYXN0ZWRUaGlzLCByZXN1bHQpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
CiAKK0pTVmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMkdldHRlcihFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpD
YWNoZWRBdHRyaWJ1dGUyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKQEAgLTI0MDAsMTUgKzI5NjgsMjQgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
Q2FjaGVkQXR0cmlidXRlMihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmEK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dl
dHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImNhY2hlZEF0dHJpYnV0ZTIiKTsKICAg
ICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUy
R2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqQ2FjaGVk
QXR0cmlidXRlMkdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMp
Cit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhp
cyk7CiAgICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUgPSBjYXN0ZWRUaGlzLT5tX2NhY2hlZEF0
dHJpYnV0ZTIuZ2V0KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FjaGVkVmFs
dWUpOworICAgICAgICByZXR1cm4gY2FjaGVkVmFsdWU7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwuY2FjaGVkQXR0cmli
dXRlMigpOwogICAgIGNhc3RlZFRoaXMtPm1fY2FjaGVkQXR0cmlidXRlMi5zZXQoc3RhdGUtPnZt
KCksIGNhc3RlZFRoaXMsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpBbnlBdHRy
aWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwog
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQW55QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2Up
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI0MTksMTIgKzI5OTYsMjEgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqQW55QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAg
ICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImFu
eUF0dHJpYnV0ZSIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9i
akFueUF0dHJpYnV0ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpz
VGVzdE9iakFueUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0o
Y2FzdGVkVGhpcyk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwuYW55QXR0cmlidXRlKCk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBq
c1Rlc3RPYmpDb250ZW50RG9jdW1lbnRHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29udGVudERvY3VtZW50
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
LCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI0
MzUsMTEgKzMwMjEsMjAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29udGVudERvY3VtZW50
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWwKICAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigq
c3RhdGUsICJUZXN0T2JqIiwgImNvbnRlbnREb2N1bWVudCIpOwogICAgIH0KKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakNvbnRlbnREb2N1bWVudEdldHRlcihzdGF0ZSwgY2Fz
dGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iakNvbnRlbnREb2N1bWVudEdldHRlcihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNo
b3VsZEFsbG93QWNjZXNzVG9Ob2RlKHN0YXRlLCBpbXBsLmNvbnRlbnREb2N1bWVudCgpKSA/IHRv
SlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmNvbnRlbnREb2N1bWVu
dCgpKSA6IGpzTnVsbCgpKTsKKyAgICByZXR1cm4gc2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUoc3Rh
dGUsIGltcGwuY29udGVudERvY3VtZW50KCkpID8gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xv
YmFsT2JqZWN0KCksIGltcGwuY29udGVudERvY3VtZW50KCkpIDoganNOdWxsKCk7CiB9CiAKIAor
SlNWYWx1ZSBqc1Rlc3RPYmpNdXRhYmxlUG9pbnRHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTXV0YWJsZVBv
aW50KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAg
LTI0NTAsMTIgKzMwNDUsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTXV0YWJsZVBvaW50
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJv
cigqc3RhdGUsICJUZXN0T2JqIiwgIm11dGFibGVQb2ludCIpOwogICAgIH0KKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iak11dGFibGVQb2ludEdldHRlcihzdGF0ZSwgY2FzdGVk
VGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iak11dGFibGVQb2ludEdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBTVkdTdGF0aWNQcm9wZXJ0eVRlYXJPZmY8VGVzdE9i
aiwgU1ZHUG9pbnQ+OjpjcmVhdGUoaW1wbCwgaW1wbC5tdXRhYmxlUG9pbnQoKSwgJlRlc3RPYmo6
OnVwZGF0ZU11dGFibGVQb2ludCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqSW1tdXRhYmxl
UG9pbnRHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwog
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqSW1tdXRhYmxlUG9pbnQoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFz
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjQ2NiwxMiArMzA3MCwyMSBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpJbW11dGFibGVQb2ludChFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
ICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAi
aW1tdXRhYmxlUG9pbnQiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rl
c3RPYmpJbW11dGFibGVQb2ludEdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1Zh
bHVlIGpzVGVzdE9iakltbXV0YWJsZVBvaW50R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNF
RF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFs
T2JqZWN0KCksIFNWR1Byb3BlcnR5VGVhck9mZjxTVkdQb2ludD46OmNyZWF0ZShpbXBsLmltbXV0
YWJsZVBvaW50KCkpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialN0cmF3YmVycnlHZXR0ZXIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqU3RyYXdiZXJyeShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CkBAIC0yNDgyLDEyICszMDk1LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialN0cmF3YmVycnkoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4g
dGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJzdHJhd2JlcnJ5Iik7CiAg
ICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqU3RyYXdiZXJyeUdldHRl
cihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9ialN0cmF3YmVycnlH
ZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBq
c051bWJlcihpbXBsLmJsdWViZXJyeSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialN0cmlj
dEZsb2F0R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcyk7CisK
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmljdEZsb2F0KEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2Up
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI0OTgsMTIgKzMxMjAsMjEgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaWN0RmxvYXQoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAg
ICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAic3Ry
aWN0RmxvYXQiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpT
dHJpY3RGbG9hdEdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVz
dE9ialN0cmljdEZsb2F0R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVk
VGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0
ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5zdHJpY3RGbG9hdCgpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1Zh
bHVlIGpzVGVzdE9iakRlc2NyaXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakRlc2NyaXB0aW9uKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBK
U09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI1MTQs
MTIgKzMxNDUsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqRGVzY3JpcHRpb24oRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLAogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0
ZSwgIlRlc3RPYmoiLCAiZGVzY3JpcHRpb24iKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1Rlc3RPYmpEZXNjcmlwdGlvbkdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwor
fQorCitKU1ZhbHVlIGpzVGVzdE9iakRlc2NyaXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAg
IFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5kZXNjcmlwdGlv
bigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iaklkR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE9iaiogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iaklkKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBK
U09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI1MzAs
MTIgKzMxNzAsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqSWQoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU4KICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3Rh
dGUsICJUZXN0T2JqIiwgImlkIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNUZXN0T2JqSWRHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rl
c3RPYmpJZEdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzTnVtYmVyKGltcGwuaWQoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpIYXNo
R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcyk7CisKIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9iakhhc2goRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwpAQCAtMjU0NiwxMiArMzE5NSwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpIYXNoKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJu
IHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiaGFzaCIpOwogICAgIH0K
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakhhc2hHZXR0ZXIoc3RhdGUsIGNh
c3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpIYXNoR2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUo
c3RhdGUsIGltcGwuaGFzaCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialJlcGxhY2VhYmxl
QXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcyk7
CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVj
dCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI1NjIsMTIgKzMy
MjAsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGUoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGgKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJU
ZXN0T2JqIiwgInJlcGxhY2VhYmxlQXR0cmlidXRlIik7CiAgICAgfQorICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNh
c3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZUdl
dHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
TnVtYmVyKGltcGwucmVwbGFjZWFibGVBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rl
c3RPYmpOdWxsYWJsZURvdWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZURv
dWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CkBAIC0yNTc4LDEyICszMjQ1LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51
bGxhYmxlRG91YmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlCiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJudWxsYWJsZURvdWJsZUF0dHJpYnV0ZSIp
OwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iak51bGxhYmxlRG91
YmxlQXR0cmlidXRlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNU
ZXN0T2JqTnVsbGFibGVEb3VibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5V
U0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSB0b051bGxhYmxlSlNOdW1iZXIoaW1wbC5udWxs
YWJsZURvdWJsZUF0dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxl
TG9uZ0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUxvbmdBdHRyaWJ1dGUoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpT
T2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjU5NCwx
MiArMzI3MCwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUxvbmdBdHRyaWJ1
dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdAogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0
ZSwgIlRlc3RPYmoiLCAibnVsbGFibGVMb25nQXR0cmlidXRlIik7CiAgICAgfQorICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqTnVsbGFibGVMb25nQXR0cmlidXRlR2V0dGVyKHN0
YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqTnVsbGFibGVMb25nQXR0
cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sK
KyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVz
dWx0ID0gdG9OdWxsYWJsZUpTTnVtYmVyKGltcGwubnVsbGFibGVMb25nQXR0cmlidXRlKCkpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0Owog
fQogCiAKK0pTVmFsdWUganNUZXN0T2JqTnVsbGFibGVCb29sZWFuQXR0cmlidXRlR2V0dGVyKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9iak51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQog
ewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yNjEwLDEyICszMjk1LDIxIEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAg
ICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJudWxs
YWJsZUJvb2xlYW5BdHRyaWJ1dGUiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1Rlc3RPYmpOdWxsYWJsZUJvb2xlYW5BdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRo
aXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUJvb2xlYW5BdHRyaWJ1dGVHZXR0
ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jv
b2xlYW4oaW1wbC5udWxsYWJsZUJvb2xlYW5BdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBq
c1Rlc3RPYmpOdWxsYWJsZVN0cmluZ0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJs
ZVN0cmluZ0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CkBAIC0yNjI2LDEyICszMzIwLDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
ak51bGxhYmxlU3RyaW5nQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dH
ZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJudWxsYWJsZVN0cmluZ0F0dHJpYnV0
ZSIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iak51bGxhYmxl
U3RyaW5nQXR0cmlidXRlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUg
anNUZXN0T2JqTnVsbGFibGVTdHJpbmdBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAg
VU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ09yTnVsbChzdGF0ZSwgaW1w
bC5udWxsYWJsZVN0cmluZ0F0dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iak51
bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlTG9u
Z1NldHRhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKQEAgLTI2NDIsMTIgKzMzNDUsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEoKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJv
d0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm51bGxhYmxlTG9uZ1NldHRhYmxl
QXR0cmlidXRlIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2Jq
TnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsK
K30KKworSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvTnVs
bGFibGVKU051bWJlcihpbXBsLm51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlKCkpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
CiAKK0pTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCog
c2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI2NTgsMTIgKzMzNzAs
MjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJp
YnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGUKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0
T2JqIiwgIm51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUiKTsKICAgICB9CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmli
dXRlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqTnVs
bGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVT
RURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nT3JOdWxsKHN0YXRlLCBpbXBsLm51
bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RP
YmpOdWxsYWJsZVN0cmluZ1ZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nVmFs
dWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAt
MjY3NCwxNCArMzM5NSwyMyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmlu
Z1ZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaQogICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9y
KCpzdGF0ZSwgIlRlc3RPYmoiLCAibnVsbGFibGVTdHJpbmdWYWx1ZSIpOwogICAgIH0KKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iak51bGxhYmxlU3RyaW5nVmFsdWVHZXR0ZXIo
c3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmlu
Z1ZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sK
KyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9OdWxsYWJsZUpTTnVtYmVyKGltcGwu
bnVsbGFibGVTdHJpbmdWYWx1ZShlYykpOwogICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0
OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0
dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CkBAIC0yNjkyLDEyICszNDIyLDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0
ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByCiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBl
RXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJhdHRyaWJ1dGUiKTsKICAgICB9CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRo
aXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShz
dGF0ZSwgaW1wbC5hdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1
dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVz
ZXJ2ZWRFbnVtVHlwZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CkBAIC0yNzA4LDEyICszNDQ3LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0
dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKCiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJhdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVt
VHlwZSIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakF0dHJp
YnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisK
K0pTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGVHZXR0ZXIoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dp
dGhDYWNoZShzdGF0ZSwgaW1wbC5hdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZSgpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogCitKU1ZhbHVlIGpzVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialB1dEZvcndhcmRzQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI3MjQsMTIgKzM0NzIsMjEgQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGgKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVy
biB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInB1dEZvcndhcmRzQXR0
cmlidXRlIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqUHV0
Rm9yd2FyZHNBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1
ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBV
TlVTRURfUEFSQU0oY2FzdGVkVGhpcyk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCBpbXBsLnB1dEZvcndhcmRzQXR0cmlidXRlKCkpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFs
dWUganNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI3NDAsOSArMzQ5NywxNiBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKUwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAg
cmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicHV0Rm9yd2Fy
ZHNOdWxsYWJsZUF0dHJpYnV0ZSIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNhc3Rl
ZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmli
dXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogY2FzdGVkVGhpcykKK3sKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0
ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwucHV0Rm9yd2Fy
ZHNOdWxsYWJsZUF0dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCkBAIC02MjYxLDYgKzcwMjUsMjQgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkF0dGFj
aFNoYWRvd1Jvb3QoRXhlY1N0YXQKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogfQogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uVG9KU09OKEV4ZWNTdGF0ZSogc3RhdGUpCit7CisgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CisgICAgYXV0byBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlzVmFsdWUpOworICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpCisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9i
aiIsICJ0b0pTT04iKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMs
IEpTVGVzdE9iajo6aW5mbygpKTsKKworICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RF
bXB0eU9iamVjdChzdGF0ZSk7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgcmVzdWx0
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAicmVhZE9ubHlTdHJp
bmdBdHRyIiksIGpzVGVzdE9ialJlYWRPbmx5U3RyaW5nQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVk
VGhpcykpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwgImVudW1BdHRyIiksIGpzVGVzdE9iakVudW1BdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRU
aGlzKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnZtLCAibG9uZ0F0dHIiKSwganNUZXN0T2JqTG9uZ0F0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRo
aXMpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sICJjcmVhdGUiKSwganNUZXN0T2JqQ3JlYXRlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7
CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKIHVzaW5nIFRlc3RP
YmpJdGVyYXRvciA9IEpTRE9NSXRlcmF0b3I8SlNUZXN0T2JqPjsKIHVzaW5nIFRlc3RPYmpJdGVy
YXRvclByb3RvdHlwZSA9IEpTRE9NSXRlcmF0b3JQcm90b3R5cGU8SlNUZXN0T2JqPjsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNw
cAppbmRleCBlMzJiMDk4NDAyOGZiZDMxODNiOTQ3YzFhNDgwOTJlY2VhN2FmNjhhLi41Y2EyMGI5
ODVlMThlY2ZiNTY0ZWYyNTBkNzgyZjQ1ODUxNzE5NjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcApAQCAtMTMzLDYgKzEz
Myw4IEBAIHZvaWQgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpkZXN0cm95
KEpTQzo6SlNDZWxsKiBjZWxsKQogICAgIHRoaXNPYmplY3QtPkpTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZTo6fkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSgp
OwogfQogCitKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVl
R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZSogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZVZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKQEAgLTE0MywxMiArMTQ1LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhy
b3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZSIsICJ2YWx1ZSIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlR2V0dGVyKHN0YXRlLCBjYXN0ZWRU
aGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
VmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAg
VU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLnZhbHVlKCkgPyBpbXBsLnZhbHVl
KCktPmRlc2VyaWFsaXplKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgMCkgOiBq
c051bGwoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZVJlYWRvbmx5VmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUmVhZG9ubHlWYWx1ZShFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3Qq
IHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xNTksMTIgKzE3MCwy
MSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VS
ZWFkb25seVZhbHVlKEV4ZWNTdGF0ZSogc3RhdAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UiLCAicmVhZG9ubHlWYWx1ZSIpOwogICAgIH0K
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZVJlYWRvbmx5VmFsdWVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNW
YWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VSZWFkb25seVZhbHVlR2V0
dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZSogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9Q
QVJBTShjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1wbC5yZWFkb25seVZhbHVlKCkgPyBpbXBsLnJlYWRv
bmx5VmFsdWUoKS0+ZGVzZXJpYWxpemUoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
LCAwKSA6IGpzTnVsbCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFs
dWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWUoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2Jq
ZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTc1LDE1ICsx
OTUsMjQgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlQ2FjaGVkVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlIiwgImNhY2hlZFZhbHVlIik7CiAgICAg
fQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlQ2FjaGVkVmFsdWVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNW
YWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1ZUdldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uq
IGNhc3RlZFRoaXMpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFS
QU0oY2FzdGVkVGhpcyk7CiAgICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUgPSBjYXN0ZWRUaGlz
LT5tX2NhY2hlZFZhbHVlLmdldCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNh
Y2hlZFZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGNhY2hlZFZhbHVlOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLmNhY2hl
ZFZhbHVlKCkgPyBpbXBsLmNhY2hlZFZhbHVlKCktPmRlc2VyaWFsaXplKHN0YXRlLCBjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSwgMCkgOiBqc051bGwoKTsKICAgICBjYXN0ZWRUaGlzLT5tX2Nh
Y2hlZFZhbHVlLnNldChzdGF0ZS0+dm0oKSwgY2FzdGVkVGhpcywgcmVzdWx0KTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitK
U1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBvcnRzR2V0dGVyKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogY2Fz
dGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZVBvcnRzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKQEAgLTE5NCwxMiArMjIzLDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBvcnRzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kCiAgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJU
eXBlRXJyb3IoKnN0YXRlLCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSIsICJw
b3J0cyIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBvcnRzR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9
CisKK0pTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUG9ydHNHZXR0
ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
KiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BB
UkFNKGNhc3RlZFRoaXMpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0FycmF5KHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgaW1wbC5wb3J0cygpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFJlYWRvbmx5VmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBjYXN0ZWRUaGlzKTsK
KwogRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2Fj
aGVkUmVhZG9ubHlWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CkBAIC0yMTAsMTIgKzI0OCwxOSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRSZWFkb25seVZhbHVlKEV4ZWNTdGF0ZQog
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0
dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Ui
LCAiY2FjaGVkUmVhZG9ubHlWYWx1ZSIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFJlYWRvbmx5VmFs
dWVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRSZWFkb25seVZhbHVlR2V0dGVyKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogY2FzdGVkVGhp
cykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRU
aGlzKTsKICAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IGNhc3RlZFRoaXMtPm1fY2FjaGVk
UmVhZG9ubHlWYWx1ZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWNo
ZWRWYWx1ZSk7CisgICAgICAgIHJldHVybiBjYWNoZWRWYWx1ZTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1wbC5jYWNoZWRS
ZWFkb25seVZhbHVlKCkgPyBpbXBsLmNhY2hlZFJlYWRvbmx5VmFsdWUoKS0+ZGVzZXJpYWxpemUo
c3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCAwKSA6IGpzTnVsbCgpOwogICAgIGNh
c3RlZFRoaXMtPm1fY2FjaGVkUmVhZG9ubHlWYWx1ZS5zZXQoc3RhdGUtPnZtKCksIGNhc3RlZFRo
aXMsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAKaW5kZXggM2EzOWU0OTY0YmFm
OTgyMTIzM2MwNjg3OTUwN2VmNjMyMDMxNjA4Yi4uZGZlYTExZTEyZGZhODQwYzAxMjk2NmRjMmVm
NDg3MGE4NjRlZjIwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCkBAIC0yMTgsNiArMjE4LDggQEAg
Ym9vbCBKU1Rlc3RUeXBlZGVmczo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogc3RhdGUsIFByb3AKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK0pTVmFsdWUg
anNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5
cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjI4LDEyICsyMzAsMjEgQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWwKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVy
biB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0VHlwZWRlZnMiLCAidW5zaWduZWRM
b25nTG9uZ0F0dHIiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RU
eXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9
CisKK0pTVmFsdWUganNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0ckdldHRlcihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1i
ZXIoaW1wbC51bnNpZ25lZExvbmdMb25nQXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdFR5
cGVkZWZzSW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0
VHlwZWRlZnNJbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFz
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjQ0LDEyICsyNTUsMjEgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNJbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUo
RXhlY1N0YXRlKiBzdGF0ZSwgRW4KICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAg
ICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0VHlwZWRlZnMi
LCAiaW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlIik7CiAgICAgfQorICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNUZXN0VHlwZWRlZnNJbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFs
dWVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RUeXBlZGVm
c0ltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwor
ICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1wbC5pbW11dGFibGVTZXJpYWxp
emVkU2NyaXB0VmFsdWUoKSA/IGltcGwuaW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlKCkt
PmRlc2VyaWFsaXplKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgMCkgOiBqc051
bGwoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQ29uc3RydWN0b3JUZXN0U3ViT2Jq
R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzKTsKKwog
RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvclRlc3RTdWJPYmooRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2Jq
ZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjYwLDEwICsy
ODAsMTkgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvclRlc3RTdWJP
YmooRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmEKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJU
ZXN0VHlwZWRlZnMiLCAiVGVzdFN1Yk9iaiIpOwogICAgIH0KLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTVGVzdFN1Yk9iajo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RU
eXBlZGVmc0NvbnN0cnVjdG9yVGVzdFN1Yk9iakdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwor
fQorCitKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQ29uc3RydWN0b3JUZXN0U3ViT2JqR2V0dGVyKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOworICAgIHJldHVy
biBKU1Rlc3RTdWJPYmo6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSk7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0
dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0
ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNBdHRyV2l0aEdldHRlckV4
Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CkBAIC0yNzQsMTQgKzMwMywyMyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJX
aXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKUwogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVy
cm9yKCpzdGF0ZSwgIlRlc3RUeXBlZGVmcyIsICJhdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOwog
ICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdFR5cGVkZWZzQXR0cldpdGhH
ZXR0ZXJFeGNlcHRpb25HZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBq
c1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1
ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVjKSk7CiAg
ICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RUeXBl
ZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dFR5cGVkZWZzKiBjYXN0ZWRUaGlzKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNB
dHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CkBAIC0yOTIsMTIgKzMzMCwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKUwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRo
cm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RUeXBlZGVmcyIsICJhdHRyV2l0aFNldHRl
ckV4Y2VwdGlvbiIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdFR5
cGVkZWZzQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsK
K30KKworSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uR2V0dGVy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzKQoreworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBq
c051bWJlcihpbXBsLmF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCkpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUg
anNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBz
bG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMzA4LDE0ICszNTUsMjMg
QEAgRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2Vw
dGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmMKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0VHlw
ZWRlZnMiLCAic3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24iKTsKICAgICB9CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0dGVyRXhj
ZXB0aW9uR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0VHlw
ZWRlZnNTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuc3RyaW5nQXR0cldpdGhHZXR0
ZXJFeGNlcHRpb24oZWMpKTsKICAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAog
CitKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25HZXR0
ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMpOworCiBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBK
U09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTMyNiw5
ICszODIsMTYgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aFNl
dHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmMKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUs
ICJUZXN0VHlwZWRlZnMiLCAic3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24iKTsKICAgICB9
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRo
U2V0dGVyRXhjZXB0aW9uR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUg
anNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcykKK3sKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTShjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdX
aXRoQ2FjaGUoc3RhdGUsIGltcGwuc3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oKSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTYXR0cmlidXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU2F0dHJpYnV0ZS5jcHAKaW5kZXggOTA5ZGZhNzFlNDc3YzJkMzRiNzIzMzk4YzZlOGM1NGMx
YzhjY2UzYy4uYmY2YTQ3ODNkYjcxZjNlN2YzMDk0MTQ4ZjVkNzU3MzQxZjVmMWM4NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTYXR0cmlidXRl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNhdHRy
aWJ1dGUuY3BwCkBAIC0xNDEsNiArMTQxLDggQEAgYm9vbCBKU2F0dHJpYnV0ZTo6Z2V0T3duUHJv
cGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnQKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKK0pTVmFsdWUganNhdHRyaWJ1dGVSZWFkb25seUdldHRlcihF
eGVjU3RhdGUqIHN0YXRlLCBKU2F0dHJpYnV0ZSogY2FzdGVkVGhpcyk7CisKIEVuY29kZWRKU1Zh
bHVlIGpzYXR0cmlidXRlUmVhZG9ubHkoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwpAQCAtMTUxLDkgKzE1MywxNiBAQCBFbmNvZGVkSlNWYWx1ZSBqc2F0
dHJpYnV0ZVJlYWRvbmx5KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRo
cm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgImF0dHJpYnV0ZSIsICJyZWFkb25seSIpOwogICAg
IH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzYXR0cmlidXRlUmVhZG9ubHlHZXR0ZXIo
c3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc2F0dHJpYnV0ZVJlYWRvbmx5R2V0
dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTYXR0cmlidXRlKiBjYXN0ZWRUaGlzKQoreworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNhc3RlZFRoaXMpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBq
c1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5yZWFkb25seSgpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5vZGUuaWRsIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROb2RlLmlkbAppbmRleCAx
ZTQ4NTJhODU4OTBiZjBjZDQ5ZWE0ZWUzMmQwNDU1NGUyOGYyMDg5Li5mY2U2ODBhYWEyNjlkMWFl
NjBkY2VlYWY1OWRiYjRmYTViZDA5YjUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5vZGUuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9UZXN0Tm9kZS5pZGwKQEAgLTI1LDUgKzI1LDcgQEAKICAgICBhdHRy
aWJ1dGUgRE9NU3RyaW5nIG5hbWU7CiAKICAgICBpdGVyYWJsZTxUZXN0Tm9kZT47CisKKyAgICBz
ZXJpYWxpemVyOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Rlc3RPYmouaWRsIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Rlc3RPYmouaWRsCmluZGV4IDM0MTE4MWE1MTYxZjAwNTViNDIwYTk5ZWI1YjhmOWVhOGNk
OGExN2QuLjJhYjljYzFmOWI2YTNhMGM2YTAwYWMwZmFmZDY1NTFhMjNmMmMzNDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKQEAgLTM3
NCw2ICszNzQsOCBAQCBlbnVtIFRlc3RDb25maWRlbmNlIHsgImhpZ2giLCAia2luZGEtbG93IiB9
OwogI2VuZGlmCiAKICAgICB2b2lkIGF0dGFjaFNoYWRvd1Jvb3QoVGVzdERpY3Rpb25hcnkgaW5p
dCk7CisKKyAgICBzZXJpYWxpemVyID0ge3JlYWRPbmx5U3RyaW5nQXR0ciwgY3JlYXRlLCBlbnVt
QXR0ciwgbG9uZ0F0dHJ9OwogfTsKIAogLy8gVGhlIGZvbGxvd2luZyBjb21tZW50IHNob3VsZCBu
b3QgZ2VuZXJhdGUgYW55IGNvZGUuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNTc5YThlNDNiZGYzY2ZjNmJhMmY1ZTc5MWVi
ZDkwMjI4MGMxMDg4NS4uZGUzYzUzZTNhYzBjYTk1OWZlOGUyZWRkYjEwMGU1OGE2OTAyMDBjYiAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDE2LTA1LTI0ICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8
YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIEFkZCBXZWJJREwgc3BlY2lhbCBvcGVyYXRpb24g
c3VwcG9ydDogc2VyaWFsaXplcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTU2MjkzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisK
KyAgICAgICAgVmVyaWZ5IHRoZSBuZXcgQVBJIG9mIHRoZSBvYmplY3RzIGFuZCBjaGVjayB3aGF0
IGhhcHBlbnMgd2hlbiB1c2VyCisgICAgICAgIG1vZGlmaWVzIHRoZSB2YWx1ZXMgYW5kIHR5cGVz
IG9mIHRoZSBhdHRyaWJ1dGVzLCBvciBhZGRzIGEgbnVsbCB2YWx1ZS4KKworICAgICAgICAqIGZh
c3QvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBm
YXN0L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5odG1sOgorICAgICAgICAqIGZhc3QvbWVk
aWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBm
YXN0L21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5odG1sOgorCiAyMDE2LTA1LTI0
ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgW0Zv
bnQgTG9hZGluZ10gQ3Jhc2ggZHVyaW5nIGZvbnQgZG93bmxvYWQgZmFpbHVyZSBhZnRlciBnYXJi
YWdlIGNvbGxlY3Rpb24KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0v
UlRDSWNlQ2FuZGlkYXRlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJl
YW0vUlRDSWNlQ2FuZGlkYXRlLWV4cGVjdGVkLnR4dAppbmRleCBlOWVkYjhkYzRhY2IzNGI1M2I5
MzIzOWI0Mjc5NmM0MDY5Yjk3NGQ2Li5mMzc0NmExMmU3ZjkwZWM5NGQzNzUxNjQzNGZjZmMyNTcz
OTFlMzhmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ0ljZUNh
bmRpZGF0ZS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9S
VENJY2VDYW5kaWRhdGUtZXhwZWN0ZWQudHh0CkBAIC03LDYgKzcsMjEgQEAgUEFTUyBjYW5kaWRh
dGUgPSBuZXcgUlRDSWNlQ2FuZGlkYXRlKGluaXRpYWxpemVyKTsgZGlkIG5vdCB0aHJvdyBleGNl
cHRpb24uCiBQQVNTIGNhbmRpZGF0ZS5jYW5kaWRhdGUgaXMgImZvbyIKIFBBU1MgY2FuZGlkYXRl
LnNkcE1pZCBpcyAiYmFyIgogUEFTUyBjYW5kaWRhdGUuc2RwTUxpbmVJbmRleCBpcyA2CitQQVNT
IFJUQ0ljZUNhbmRpZGF0ZS5wcm90b3R5cGUudG9KU09OIGlzIGRlZmluZWQuCitQQVNTIE9iamVj
dC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUlRDSWNlQ2FuZGlkYXRlLnByb3RvdHlwZSwgInRv
SlNPTiIpLmVudW1lcmFibGUgaXMgdHJ1ZQorUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKFJUQ0ljZUNhbmRpZGF0ZS5wcm90b3R5cGUsICJ0b0pTT04iKS53cml0YWJsZSBpcyB0
cnVlCitQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUlRDSWNlQ2FuZGlkYXRl
LnByb3RvdHlwZSwgInRvSlNPTiIpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCitQQVNTIFJUQ0ljZUNh
bmRpZGF0ZS5wcm90b3R5cGUudG9KU09OLmxlbmd0aCBpcyAwCitQQVNTIFJUQ0ljZUNhbmRpZGF0
ZS5wcm90b3R5cGUudG9KU09OLm5hbWUgaXMgInRvSlNPTiIKK1BBU1MgT2JqZWN0LmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihqc29uTWFwLCAiY2FuZGlkYXRlIikuZW51bWVyYWJsZSBpcyB0cnVl
CitQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoanNvbk1hcCwgImNhbmRpZGF0
ZSIpLndyaXRhYmxlIGlzIHRydWUKK1BBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihqc29uTWFwLCAiY2FuZGlkYXRlIikuY29uZmlndXJhYmxlIGlzIHRydWUKK1BBU1MgY2hpbGRD
YW5kaWRhdGUudG9KU09OKCk7IHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IENhbiBvbmx5IGNh
bGwgUlRDSWNlQ2FuZGlkYXRlLnRvSlNPTiBvbiBpbnN0YW5jZXMgb2YgUlRDSWNlQ2FuZGlkYXRl
LgorUEFTUyBKU09OLnN0cmluZ2lmeShjYW5kaWRhdGUudG9KU09OKCkpIGlzICJ7XCJjYW5kaWRh
dGVcIjpcImZvb1wiLFwic2RwTWlkXCI6XCJiYXJcIixcInNkcE1MaW5lSW5kZXhcIjo2fSIKK1BB
U1MgSlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNPTigpKSBpcyAie1wiY2FuZGlkYXRlXCI6
XCJmb29cIixcInNkcE1pZFwiOlwiYmFyXCIsXCJzZHBNTGluZUluZGV4XCI6Nn0iCitQQVNTIEpT
T04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSkgaXMgIntcImNhbmRpZGF0ZVwiOlwiZm9v
XCIsXCJzZHBNaWRcIjpcImJhclwiLFwic2RwTUxpbmVJbmRleFwiOjZ9IgorUEFTUyBKU09OLnN0
cmluZ2lmeShjYW5kaWRhdGUudG9KU09OKCkpIGlzICJ7XCJjYW5kaWRhdGVcIjpcImZvb1wiLFwi
c2RwTWlkXCI6XCJiYXJcIixcInNkcE1MaW5lSW5kZXhcIjo2fSIKK1BBU1MgSlNPTi5zdHJpbmdp
ZnkoY2FuZGlkYXRlLnRvSlNPTigpKSBpcyAie1wiY2FuZGlkYXRlXCI6XCJmb29cIixcInNkcE1p
ZFwiOlwiYmFyXCIsXCJzZHBNTGluZUluZGV4XCI6Nn0iCiAKIEF0dHJpYnV0ZXMgYXJlIHJlYWRv
bmx5CiBjYW5kaWRhdGUuY2FuZGlkYXRlID0gImZvby11cGRhdGVkIgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaHRtbCBiL0xheW91dFRl
c3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmh0bWwKaW5kZXggYmNkOTliMGNk
MDU1ZDRjN2IwYWI5MzFmOGM1NTg4Nzc3ZjQwNDhlYS4uZDBkNWRlZGMzMWU2NTQ1MmY5Y2NmZWNi
NTU5YTFlYzg0NWQ4NjY1MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVh
bS9SVENJY2VDYW5kaWRhdGUuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFt
L1JUQ0ljZUNhbmRpZGF0ZS5odG1sCkBAIC0xMyw2ICsxMywzMyBAQAogICAgICAgICAgICAgc2hv
dWxkQmUoJ2NhbmRpZGF0ZS5jYW5kaWRhdGUnLCAnImZvbyInKTsKICAgICAgICAgICAgIHNob3Vs
ZEJlKCdjYW5kaWRhdGUuc2RwTWlkJywgJyJiYXIiJyk7CiAgICAgICAgICAgICBzaG91bGRCZSgn
Y2FuZGlkYXRlLnNkcE1MaW5lSW5kZXgnLCAnNicpOworICAgICAgICAgICAgc2hvdWxkQmVEZWZp
bmVkKCdSVENJY2VDYW5kaWRhdGUucHJvdG90eXBlLnRvSlNPTicpOworICAgICAgICAgICAgc2hv
dWxkQmVUcnVlKCdPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFJUQ0ljZUNhbmRpZGF0
ZS5wcm90b3R5cGUsICJ0b0pTT04iKS5lbnVtZXJhYmxlJyk7CisgICAgICAgICAgICBzaG91bGRC
ZVRydWUoJ09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUlRDSWNlQ2FuZGlkYXRlLnBy
b3RvdHlwZSwgInRvSlNPTiIpLndyaXRhYmxlJyk7CisgICAgICAgICAgICBzaG91bGRCZVRydWUo
J09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUlRDSWNlQ2FuZGlkYXRlLnByb3RvdHlw
ZSwgInRvSlNPTiIpLmNvbmZpZ3VyYWJsZScpOworICAgICAgICAgICAgc2hvdWxkQmUoJ1JUQ0lj
ZUNhbmRpZGF0ZS5wcm90b3R5cGUudG9KU09OLmxlbmd0aCcsICcwJyk7CisgICAgICAgICAgICBz
aG91bGRCZSgnUlRDSWNlQ2FuZGlkYXRlLnByb3RvdHlwZS50b0pTT04ubmFtZScsICcidG9KU09O
IicpOworCisgICAgICAgICAgICB2YXIganNvbk1hcCA9IGNhbmRpZGF0ZS50b0pTT04oKTsKKyAg
ICAgICAgICAgIHNob3VsZEJlVHJ1ZSgnT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihq
c29uTWFwLCAiY2FuZGlkYXRlIikuZW51bWVyYWJsZScpOworICAgICAgICAgICAgc2hvdWxkQmVU
cnVlKCdPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGpzb25NYXAsICJjYW5kaWRhdGUi
KS53cml0YWJsZScpOworICAgICAgICAgICAgc2hvdWxkQmVUcnVlKCdPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGpzb25NYXAsICJjYW5kaWRhdGUiKS5jb25maWd1cmFibGUnKTsKKwor
ICAgICAgICAgICAgdmFyIGNoaWxkUlRDSWNlQ2FuZGlkYXRlID0gZnVuY3Rpb24oKSB7fTsKKyAg
ICAgICAgICAgIGNoaWxkUlRDSWNlQ2FuZGlkYXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUo
UlRDSWNlQ2FuZGlkYXRlLnByb3RvdHlwZSk7CisgICAgICAgICAgICB2YXIgY2hpbGRDYW5kaWRh
dGUgPSBuZXcgY2hpbGRSVENJY2VDYW5kaWRhdGUoKTsKKyAgICAgICAgICAgIHNob3VsZFRocm93
KCdjaGlsZENhbmRpZGF0ZS50b0pTT04oKTsnKTsKKworICAgICAgICAgICAgc2hvdWxkQmVFcXVh
bFRvU3RyaW5nKCdKU09OLnN0cmluZ2lmeShjYW5kaWRhdGUudG9KU09OKCkpJywgJ3siY2FuZGlk
YXRlIjoiZm9vIiwic2RwTWlkIjoiYmFyIiwic2RwTUxpbmVJbmRleCI6Nn0nKTsKKyAgICAgICAg
ICAgIGNhbmRpZGF0ZS5uZXdBdHRyaWJ1dGUgPSAibmV3IHZhbHVlIjsKKyAgICAgICAgICAgIHNo
b3VsZEJlRXF1YWxUb1N0cmluZygnSlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNPTigpKScs
ICd7ImNhbmRpZGF0ZSI6ImZvbyIsInNkcE1pZCI6ImJhciIsInNkcE1MaW5lSW5kZXgiOjZ9Jyk7
CisgICAgICAgICAgICBjYW5kaWRhdGUuc2RwTUxpbmVJbmRleCA9ICJub3QgYSBudW1iZXIiOwor
ICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdKU09OLnN0cmluZ2lmeShjYW5kaWRh
dGUudG9KU09OKCkpJywgJ3siY2FuZGlkYXRlIjoiZm9vIiwic2RwTWlkIjoiYmFyIiwic2RwTUxp
bmVJbmRleCI6Nn0nKTsKKyAgICAgICAgICAgIGNhbmRpZGF0ZS5zZHBNaWQgPSA3OworICAgICAg
ICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdKU09OLnN0cmluZ2lmeShjYW5kaWRhdGUudG9K
U09OKCkpJywgJ3siY2FuZGlkYXRlIjoiZm9vIiwic2RwTWlkIjoiYmFyIiwic2RwTUxpbmVJbmRl
eCI6Nn0nKTsKKyAgICAgICAgICAgIGNhbmRpZGF0ZS5zZHBNaWQgPSBudWxsOworICAgICAgICAg
ICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdKU09OLnN0cmluZ2lmeShjYW5kaWRhdGUudG9KU09O
KCkpJywgJ3siY2FuZGlkYXRlIjoiZm9vIiwic2RwTWlkIjoiYmFyIiwic2RwTUxpbmVJbmRleCI6
Nn0nKTsKKwogICAgICAgICAgICAgZGVidWcoIiIpOwogCiAgICAgICAgICAgICBkZWJ1ZygiQXR0
cmlidXRlcyBhcmUgcmVhZG9ubHkiKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbWVk
aWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2Zhc3QvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dAppbmRl
eCA2NTgyMThmZmUxMmU1NjAwNDg4ZDc5NTIyYzRhMzRhOWRmOGRlNmY4Li4zNDA5YzJkZWVhMDI5
YWE0MGNjNWIwNzZiODUxZjU3ZDYxYzJhZTExIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0
L21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi1leHBlY3RlZC50eHQKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24tZXhwZWN0ZWQu
dHh0CkBAIC03LDYgKzcsNyBAQCBQQVNTIHNlc3Npb25EZXNjcmlwdGlvbiA9IG5ldyBSVENTZXNz
aW9uRGVzY3JpcHRpb24oKTsgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCiBQQVNTIHNlc3Npb25E
ZXNjcmlwdGlvbiA9IG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24oaW5pdGlhbGl6ZXIpOyBkaWQg
bm90IHRocm93IGV4Y2VwdGlvbi4KIFBBU1Mgc2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUgaXMgIm9m
ZmVyIgogUEFTUyBzZXNzaW9uRGVzY3JpcHRpb24uc2RwIGlzICJmb29iYXIiCitQQVNTIEpTT04u
c3RyaW5naWZ5KHNlc3Npb25EZXNjcmlwdGlvbi50b0pTT04oKSkgaXMgIntcInR5cGVcIjpcIm9m
ZmVyXCIsXCJzZHBcIjpcImZvb2JhclwifSIKIFBBU1MgbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlv
bihudWxsKTsgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogT3B0aW9uYWwgUlRDU2Vzc2lvbkRl
c2NyaXB0aW9uIGNvbnN0cnVjdG9yIGFyZ3VtZW50IG11c3QgYmUgYSB2YWxpZCBEaWN0aW9uYXJ5
LgogUEFTUyBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKDUpOyB0aHJldyBleGNlcHRpb24gVHlw
ZUVycm9yOiBPcHRpb25hbCBSVENTZXNzaW9uRGVzY3JpcHRpb24gY29uc3RydWN0b3IgYXJndW1l
bnQgbXVzdCBiZSBhIHZhbGlkIERpY3Rpb25hcnkuCiBQQVNTIG5ldyBSVENTZXNzaW9uRGVzY3Jp
cHRpb24oJ2Zvb2JhcicpOyB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBPcHRpb25hbCBSVENT
ZXNzaW9uRGVzY3JpcHRpb24gY29uc3RydWN0b3IgYXJndW1lbnQgbXVzdCBiZSBhIHZhbGlkIERp
Y3Rpb25hcnkuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1Nl
c3Npb25EZXNjcmlwdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENT
ZXNzaW9uRGVzY3JpcHRpb24uaHRtbAppbmRleCAzYTY2ZDJlMjZiMTE5MTA1YWMxZWQzMGRkNWFm
NTc1Mjk5N2RmMzQyLi4xZDliNWNkMzM3ZWQ1ZGU5YTk2NThkNjQ2YjhjNDJiZGNhZGFlNjIzIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlw
dGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRl
c2NyaXB0aW9uLmh0bWwKQEAgLTE1LDYgKzE1LDcgQEAKICAgICAgICAgICAgIHNob3VsZE5vdFRo
cm93KCJzZXNzaW9uRGVzY3JpcHRpb24gPSBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGluaXRp
YWxpemVyKTsiKTsKICAgICAgICAgICAgIHNob3VsZEJlKCdzZXNzaW9uRGVzY3JpcHRpb24udHlw
ZScsICcib2ZmZXIiJyk7CiAgICAgICAgICAgICBzaG91bGRCZSgnc2Vzc2lvbkRlc2NyaXB0aW9u
LnNkcCcsICciZm9vYmFyIicpOworICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdK
U09OLnN0cmluZ2lmeShzZXNzaW9uRGVzY3JpcHRpb24udG9KU09OKCkpJywgJ3sidHlwZSI6Im9m
ZmVyIiwic2RwIjoiZm9vYmFyIn0nKTsKIAogICAgICAgICAgICAgc2hvdWxkVGhyb3coIm5ldyBS
VENTZXNzaW9uRGVzY3JpcHRpb24obnVsbCk7Iik7CiAgICAgICAgICAgICBzaG91bGRUaHJvdygi
bmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbig1KTsiKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279877</attachid>
            <date>2016-05-26 04:16:34 -0700</date>
            <delta_ts>2016-05-26 08:07:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156293-20160526131741.patch</filename>
            <type>text/plain</type>
            <size>179296</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxMzcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2UxNDNlNGI4NWQwYTM0
NWU1Yjk2ODI1YzBkYjIyYWM3MjhjOTBiYy4uNGMyNTY4ZDUwYWU5ZGFlMzFlNGNmMWNkNzRmOWI2
ZGVmZTA4NjE5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc4IEBACisyMDE2LTA1LTI0ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIEFkZCBXZWJJREwg
c3BlY2lhbCBvcGVyYXRpb24gc3VwcG9ydDogc2VyaWFsaXplcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MjkzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgdGhlIHNlcmlhbGl6
ZXIgc3BlY2lhbCBvcGVyYXRpb24gZm9yIFdlYklETHMsCisgICAgICAgIGN1cnJlbnQgaW1wbGVt
ZW50YXRpb24gYWRkcyBzdXBwb3J0IGZvcjoKKyAgICAgICAgICAtIGp1c3QgdGhlIGtleXdvcmQ6
IHNlcmlhbGl6ZXI7IEl0IHdpbGwgcmV0dXJuIGFsbCB0aGUKKyAgICAgICAgICAgIGF0dHJpYnV0
ZXMgb2YgaW4gYW4gb2JqZWN0LgorICAgICAgICAgIC0gbWFwIG9mIGVudHJpZXMgd2l0aCB0aGUg
YXR0cmlidXRlczogc2VyaWFsaXplciA9IHthdHRyaWJ1dGUxLAorICAgICAgICAgICAgYXR0cmli
dXRlMiwgLi4ufQorCisgICAgICAgIEl0IGNyZWF0ZXMgYSB0b0pTT04gbWV0aG9kIHRoYXQgcmV0
dXJucyB0aGUgc2VyaWFsaXplZCB2YWx1ZQorICAgICAgICBjb252ZXJ0ZWQgaW50byBhbiBFQ01B
U2NyaXB0IHZhbHVlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBjaGVjayB0aGUKKyAgICAgICAgZGVm
aW5pdGlvbiBvZiB0aGUgb3BlcmF0aW9uOgorCisgICAgICAgIGh0dHA6Ly9oZXljYW0uZ2l0aHVi
LmlvL3dlYmlkbC8jaWRsLXNlcmlhbGl6ZXJzCisKKyAgICAgICAgV2UgaGF2ZSBtb2RpZmllZCBj
dXJyZW50IGNvZGUgdGhhdCBnZW5lcmF0ZXMgdGhlIGdldHRlciBmdW5jdGlvbgorICAgICAgICBm
b3IgYXR0cmlidXRlcyBpbiB0d28gcGFydHMgc28gdGhhdCB3ZSBjYW4gcmV1c2UgdGhlIHBhcnQK
KyAgICAgICAgZXh0cmFjdGluZyB0aGUgdmFsdWUgZm9yIHRoZSBzZXJpYWxpemVyLgorCisgICAg
ICAgIFVzZWQgdGhlIHN1cHBvcnQgdG8gYWRkIG5ldyBBUEkgZm9yIFJUQ0ljZUNhbmRpZGF0ZSBh
bmQKKyAgICAgICAgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLgorCisgICAgICAgIFVwZGF0ZWQgdGhl
IHRlc3RzIGV4cGVjdGF0aW9ucyBvZiB0aGUgYmluZGluZ3MuCisKKyAgICAgICAgVGVzdHM6IGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Tm9kZS5pZGwKKyAgICAgICAgICAgICAgIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAorICAgICAgICAgICAgICAgZmFzdC9tZWRpYXN0cmVh
bS9SVENJY2VDYW5kaWRhdGUuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9tZWRpYXN0cmVhbS9S
VENTZXNzaW9uRGVzY3JpcHRpb24uaHRtbAorCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVh
bS9SVENJY2VDYW5kaWRhdGUuaWRsOiBBZGRlZCB0aGUgc2VyaWFsaXplcgorICAgICAgICBvcGVy
YXRpb24uCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRp
b24uaWRsOiBBZGRlZCB0aGUKKyAgICAgICAgc2VyaWFsaXplciBvcGVyYXRpb24uCisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0
ZUltcGxlbWVudGF0aW9uKTogU3BsaXR0ZWQgdGhlIGNvZGUgb2YgdGhlIGF0dHJpYnV0ZQorICAg
ICAgICBnZXR0ZXIgaW4gdHdvIGZ1bmN0aW9ucywgb25lIGdldHRpbmcgdGhlIHZhbHVlIGFuZCB0
aGUgb3RoZXIKKyAgICAgICAgaGFuZGxpbmcgdGhlIGNhbGwgZnJvbSB0aGUgQVBJLiBUaGlzIHdh
eSB3ZSBjYW4gcmV1c2UgdGhlIGNvZGUgZm9yCisgICAgICAgIHRoZSBzZXJpYWxpemVyLiBBbHNv
IEFkZGVkIHRoZSBjYWxscyB0byB0aGUgc2VyaWFsaXplcgorICAgICAgICBjb2RlIGdlbmVyYXRv
ci4KKyAgICAgICAgKEdlbmVyYXRlU2VyaWFsaXplckZ1bmN0aW9uKTogQWRkZWQsIGdlbmVyYXRl
cyB0aGUgdG9KU09OIGZ1bmN0aW9uCisgICAgICAgIGFkZGluZyBhbGwgdGhlIHNlcmlhbGl6YWJs
ZS0+YXR0cmlidXRlcyB2YWx1ZSB0byBhbiBvYmplY3QgYXMKKyAgICAgICAgZGVmaW5lZCBpbiB0
aGUgc3BlYy4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbTogTW9kaWZp
ZWQgdGhlIHNlcmlhbGl6ZXIgcGFyc2VyCisgICAgICAgIHRoYXQgd2FzIHVudXNlZCB0byBzdXBw
b3J0IHRoZSBXZWJJREwgc3BlYyBwYXJ0cy4gQWRkZWQgYSBuZXcKKyAgICAgICAgZG9tU2VyaWFs
aXphYmxlIHR5cGUgdG8gc3RvcmUgdGhlIGxpc3Qgb2YgYXR0cmlidXRlcyBpbiB0aGUKKyAgICAg
ICAgcG9zc2libGUgbWFwLgorICAgICAgICAocGFyc2VTZXJpYWxpemVyKTogTW9kaWZpZWQgdGhl
IGZ1bmN0aW9uIHRvIGZvbGxvdyB0aGUKKyAgICAgICAgc2VtaWNvbG9uIHJ1bGUgaW4gdGhlIHNw
ZWMsIG5vdyB0aGUgc2VyaWFsaXplciBsaW5lIG11c3QgaGF2ZSBhCisgICAgICAgIHNlbWljb2xv
biBsaWtlIGFueSBvdGhlciBsaW5lLgorICAgICAgICAocGFyc2VTZXJpYWxpemVyUmVzdCk6IFRo
ZSBmdW5jdGlvbiBub3cgaGFzIHRvIGdldCB0aGUgYXR0cmlidXRlcworICAgICAgICBsaXN0IGZy
b20gdGhlIHBhdHRlcm4gcGFyc2luZyBmdW5jdGlvbiBhbmQgYWRkIHRoZW0gdG8gdGhlCisgICAg
ICAgIGRvbVNlcmlhbGl6YWJsZSBpdGVtLgorICAgICAgICAocGFyc2VTZXJpYWxpemF0aW9uUGF0
dGVybik6IE5vdyB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxpc3Qgb2YKKyAgICAgICAgYXR0
cmlidXRlcyBpbiB0aGUgc2VyaWFsaXphYmxlIG1hcCBvciBsaXN0IGlmIHdlIGhhdmUgb25lLgor
ICAgICAgICAocGFyc2VTZXJpYWxpemF0aW9uQXR0cmlidXRlcyk6IEFkZGVkLCB0aGlzIGZ1bmN0
aW9uIHJlcGxhY2VzIHRoZQorICAgICAgICBNYXAgYW5kIExpc3QgZnVuY3Rpb25zLCB0aGUgY3Vy
cmVudGx5IHN1cHBvcnRlZCBwYXJ0cyBhcmUgc2ltaWxhcgorICAgICAgICBmb3IgYm90aCBzaXR1
YXRpb25zLgorICAgICAgICAoYXBwbHlNZW1iZXJMaXN0KTogQWRkZWQgdGhlIHNlcmlhbGl6YWJs
ZSBpdGVtIHRvIHRoZSBpbnRlcmZhY2UKKyAgICAgICAgdmFyaWFibGUgYW5kIHBvcHVsYXRlIHRo
ZSBzZXJpYWxpemFibGUgaW4gY2FzZSB0aGVyZSBpcyBub3QgYQorICAgICAgICBkZWZpbmVkIG1h
cC4KKyAgICAgICAgKHBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm5NYXApOiBSZXBsYWNlZCB3aXRo
CisgICAgICAgIHBhcnNlU2VyaWFsaXphdGlvbkF0dHJpYnV0ZXMuCisgICAgICAgIChwYXJzZVNl
cmlhbGl6YXRpb25QYXR0ZXJuTGlzdCk6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcDogTW9kaWZpZWQgdGhlIGV4cGVjdGVkIHJlc3VsdC4K
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTik6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6IE1vZGlmaWVk
IHRoZSBleHBlY3RlZCByZXN1bHQuCisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblRvSlNPTik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RO
b2RlLmlkbDogQWRkZWQgdGhlIHNlcmlhbGl6ZXIgdGVzdC4KKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVGVzdE9iai5pZGw6IEFkZGVkIHNlcmlhbGl6ZXIgbWFwIHRlc3QuCisKIDIw
MTYtMDUtMjYgIEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CiAKICAgICAg
ICAgTmF0aXZlVG9KU1ZhbHVlIGlzIGhhcmNvZGluZyB0aGUgJHRoaXNWYWx1ZSBpbiBzb21lIHN0
cmluZ3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRD
SWNlQ2FuZGlkYXRlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRD
SWNlQ2FuZGlkYXRlLmlkbAppbmRleCA5MWJhODQxNTNjZjBmMzRhZDFmZDI4YzE2MjcyMTJlZjk0
ZTBhM2ZhLi4zZWVhYjliZjVjMzViYTcxNDlmMDU2NGJmM2E3MjVhN2I4NmJjZjYyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5p
ZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRh
dGUuaWRsCkBAIC0zNyw1ICszNyw3IEBACiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmlu
ZyBjYW5kaWRhdGU7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZz8gc2RwTWlkOwog
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBzaG9ydD8gc2RwTUxpbmVJbmRleDsKKwor
ICAgIHNlcmlhbGl6ZXIgPSB7Y2FuZGlkYXRlLCBzZHBNaWQsIHNkcE1MaW5lSW5kZXh9OwogfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENTZXNz
aW9uRGVzY3JpcHRpb24uaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9S
VENTZXNzaW9uRGVzY3JpcHRpb24uaWRsCmluZGV4IDIzNDU1ZjcwNDA3MjhlMWJhY2VhZmUyMWE4
Y2FlOGI4YTUxNDA1ZWYuLjFkNjQzNTAyZTNmYWIyM2I2ZGMzYjc1MGNlMmI1MWQyNTI0MjAzNmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU2Vzc2lv
bkRlc2NyaXB0aW9uLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5pZGwKQEAgLTM2LDUgKzM2LDcgQEAKIF0gaW50ZXJmYWNl
IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiB7CiAgICAgW1NldHRlclJhaXNlc0V4Y2VwdGlvbl0gYXR0
cmlidXRlIERPTVN0cmluZyB0eXBlOwogICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgc2RwOworCisg
ICAgc2VyaWFsaXplciA9IHt0eXBlLCBzZHB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCA5NGQwOTE3ZjViZjZi
NjkzZmIwNjZjNzcxOTA1M2FlMTU4NDJmNzQ4Li4wMjkyZTc2MTEyNmY5YzA4OTYyMThiOWJhY2Q0
MzdmMDY0MzUxMTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JKUy5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JKUy5wbQpAQCAtMTk5OCw2ICsxOTk4LDggQEAgc3ViIEdlbmVyYXRlSW1w
bGVtZW50YXRpb24KICAgICBteSAkdmlzaWJsZUludGVyZmFjZU5hbWUgPSAkY29kZUdlbmVyYXRv
ci0+R2V0VmlzaWJsZUludGVyZmFjZU5hbWUoJGludGVyZmFjZSk7CiAgICAgbXkgJGV2ZW50VGFy
Z2V0ID0gJGNvZGVHZW5lcmF0b3ItPkluaGVyaXRzSW50ZXJmYWNlKCRpbnRlcmZhY2UsICJFdmVu
dFRhcmdldCIpICYmICRpbnRlcmZhY2UtPm5hbWUgbmUgIkV2ZW50VGFyZ2V0IjsKICAgICBteSAk
bmVlZHNWaXNpdENoaWxkcmVuID0gSW5zdGFuY2VOZWVkc1Zpc2l0Q2hpbGRyZW4oJGludGVyZmFj
ZSk7CisgICAgbXkgJHNlcmlhbGl6ZXJGdW5jdGlvbk5hbWUgPSAidG9KU09OIjsKKyAgICBteSAk
c2VyaWFsaXplck5hdGl2ZUZ1bmN0aW9uTmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5XS19sY2ZpcnN0
KCRjbGFzc05hbWUpIC4gIlByb3RvdHlwZUZ1bmN0aW9uIiAuICRjb2RlR2VuZXJhdG9yLT5XS191
Y2ZpcnN0KCRzZXJpYWxpemVyRnVuY3Rpb25OYW1lKTsKIAogICAgIG15ICRuYW1lZEdldHRlckZ1
bmN0aW9uID0gR2V0TmFtZWRHZXR0ZXJGdW5jdGlvbigkaW50ZXJmYWNlKTsKICAgICBteSAkaW5k
ZXhlZEdldHRlckZ1bmN0aW9uID0gR2V0SW5kZXhlZEdldHRlckZ1bmN0aW9uKCRpbnRlcmZhY2Up
OwpAQCAtMjA4Nyw2ICsyMDg5LDggQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOwogICAgIH0KIAorICAgIHB1c2goQGltcGxDb250
ZW50LCAiRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke3NlcmlhbGl6ZXJOYXRpdmVGdW5j
dGlvbk5hbWV9KEV4ZWNTdGF0ZSopO1xuXG4iKSBpZiAkaW50ZXJmYWNlLT5zZXJpYWxpemFibGU7
CisKICAgICBHZW5lcmF0ZVByb3RvdHlwZURlY2xhcmF0aW9uKFxAaW1wbENvbnRlbnQsICRjbGFz
c05hbWUsICRpbnRlcmZhY2UpIGlmICFIZWFkZXJOZWVkc1Byb3RvdHlwZURlY2xhcmF0aW9uKCRp
bnRlcmZhY2UpOwogCiAgICAgR2VuZXJhdGVDb25zdHJ1Y3RvckRlY2xhcmF0aW9uKFxAaW1wbENv
bnRlbnQsICRjbGFzc05hbWUsICRpbnRlcmZhY2UpIGlmIE5lZWRzQ29uc3RydWN0b3JQcm9wZXJ0
eSgkaW50ZXJmYWNlKTsKQEAgLTIyNDUsNiArMjI0OSwxNSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1l
bnRhdGlvbgogCiAgICAgbXkgJGp1c3RHZW5lcmF0ZVZhbHVlQXJyYXkgPSAhSXNET01HbG9iYWxP
YmplY3QoJGludGVyZmFjZSk7CiAKKyAgICBpZiAoJGludGVyZmFjZS0+c2VyaWFsaXphYmxlKSB7
CisgICAgICAgIHB1c2goQGhhc2hLZXlzLCAkc2VyaWFsaXplckZ1bmN0aW9uTmFtZSk7CisgICAg
ICAgIHB1c2goQGhhc2hWYWx1ZTEsICRzZXJpYWxpemVyTmF0aXZlRnVuY3Rpb25OYW1lKTsKKyAg
ICAgICAgcHVzaChAaGFzaFZhbHVlMiwgMCk7CisgICAgICAgIHB1c2goQGhhc2hTcGVjaWFscywg
IkpTQzo6RnVuY3Rpb24iKTsKKworICAgICAgICAkaGFzaFNpemUrKzsKKyAgICB9CisKICAgICAk
b2JqZWN0LT5HZW5lcmF0ZUhhc2hUYWJsZSgkaGFzaE5hbWUsICRoYXNoU2l6ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcQGhhc2hLZXlzLCBcQGhhc2hTcGVjaWFscywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcQGhhc2hWYWx1ZTEsIFxAaGFzaFZhbHVlMiwKQEAg
LTI1MzgsNiArMjU1MSw4IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAg
ICBteSAkYXR0cmlidXRlQ29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2VuZXJh
dGVDb25kaXRpb25hbFN0cmluZygkYXR0cmlidXRlLT5zaWduYXR1cmUpOwogICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIjaWYgJHthdHRyaWJ1dGVDb25kaXRpb25hbFN0cmluZ31cbiIp
IGlmICRhdHRyaWJ1dGVDb25kaXRpb25hbFN0cmluZzsKIAorICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJKU1ZhbHVlICR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihFeGVjU3RhdGUqLCAk
e2NsYXNzTmFtZX0qKTtcblxuIik7CisKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
RW5jb2RlZEpTVmFsdWUgJHtnZXRGdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpXG4i
KTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAKQEAgLTI1NzEsOCAr
MjU4NiwyMSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9y
KCpzdGF0ZSwgXCIkaW50ZXJmYWNlTmFtZVwiLCBcIiRuYW1lXCIpO1xuIik7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwor
CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSgke2dldEZ1bmN0aW9uTmFtZX1HZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTtcbiIp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKCR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihz
dGF0ZSwgbnVsbHB0cikpO1xuIik7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAifVxuXG4iKTsKKworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJKU1ZhbHVlICR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCAke2Ns
YXNzTmFtZX0qIHRoaXNPYmplY3QpXG4iKTsKKworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJ7XG4iKTsKKworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
VU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpO1xuIik7CisKICAgICAgICAgICAgIG15IEBhcmd1bWVu
dHMgPSAoKTsKICAgICAgICAgICAgIGlmICgkZ2V0dGVyRXhjZXB0aW9ucyAmJiAhSGFzQ3VzdG9t
R2V0dGVyKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKSkgewogICAg
ICAgICAgICAgICAgIHB1c2goQGFyZ3VtZW50cywgImVjIik7CkBAIC0yNTg5LDExICsyNjE3LDEx
IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgICAgIEFkZFRv
SW1wbEluY2x1ZGVzKCJGcmFtZS5oIik7CiAgICAgICAgICAgICAgICAgICAgIEFkZFRvSW1wbElu
Y2x1ZGVzKCJTZXR0aW5ncy5oIik7CiAgICAgICAgICAgICAgICAgICAgIG15ICRlbmFibGVfZnVu
Y3Rpb24gPSBUb01ldGhvZE5hbWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiRW5hYmxlZEJ5U2V0dGluZyJ9KSAuICJFbmFibGVkIjsKLSAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzLT53
cmFwcGVkKCkuZnJhbWUoKSkpXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4i
KTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgU2V0dGluZ3Mm
IHNldHRpbmdzID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpLmZyYW1lKCktPnNldHRpbmdzKCk7XG4i
KTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKFVOTElL
RUxZKCF0aGlzT2JqZWN0LT53cmFwcGVkKCkuZnJhbWUoKSkpXG4iKTsKKyAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpO1xu
Iik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFNldHRpbmdz
JiBzZXR0aW5ncyA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5mcmFtZSgpLT5zZXR0aW5ncygpO1xu
Iik7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghc2V0
dGluZ3MuJGVuYWJsZV9mdW5jdGlvbigpKVxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTtcbiIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KIApAQCAtMjYwNCw4ICsyNjMyLDggQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24K
ICAgICAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2hlY2tT
ZWN1cml0eSJ9ICYmCiAgICAgICAgICAgICAgICAgISRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkRvTm90Q2hlY2tTZWN1cml0eSJ9ICYmCiAgICAgICAgICAgICAg
ICAgISRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkRvTm90Q2hl
Y2tTZWN1cml0eU9uR2V0dGVyIn0pIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRv
dyhzdGF0ZSwgY2FzdGVkVGhpcy0+d3JhcHBlZCgpKSlcbiIpOwotICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYg
KCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coc3RhdGUsIHRo
aXNPYmplY3QtPndyYXBwZWQoKSkpXG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7XG4iKTsKICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57Ik5vbmRldGVybWluaXN0aWMifSkgewpAQCAtMjYyMiwxMSArMjY1MCwxMSBAQCBzdWIg
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgIG15ICRleGNlcHRpb25Db2Rl
ID0gJGdldHRlckV4Y2VwdGlvbnNXaXRoTWVzc2FnZSA/ICJlYy5jb2RlIiA6ICgkZ2V0dGVyRXhj
ZXB0aW9ucyA/ICJlYyIgOiAiMCIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBBdG9taWNTdHJpbmc+IGJpbmRpbmdO
YW1lKFwiJGludGVyZmFjZU5hbWUuJG5hbWVcIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBp
ZiAoY3Vyc29yLmlzQ2FwdHVyaW5nKCkpIHtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgICAgICAkbWVtb2l6ZWRUeXBlIG1lbW9pemVkUmVzdWx0ID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpLiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCIgLiBqb2luKCIsICIsIEBh
cmd1bWVudHMpIC4gIik7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAgICAgJG1lbW9pemVkVHlwZSBtZW1vaXplZFJlc3VsdCA9IHRoaXNPYmplY3QtPndyYXBw
ZWQoKS4kaW1wbEdldHRlckZ1bmN0aW9uTmFtZSgiIC4gam9pbigiLCAiLCBAYXJndW1lbnRzKSAu
ICIpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGN1
cnNvci5hcHBlbmRJbnB1dDxNZW1vaXplZERPTVJlc3VsdDwkbWVtb2l6ZWRUeXBlPj4oYmluZGlu
Z05hbWUuZ2V0KCkuc3RyaW5nKCksIG1lbW9pemVkUmVzdWx0LCAkZXhjZXB0aW9uQ29kZSk7XG4i
KTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGlu
dGVyZmFjZSwgIm1lbW9pemVkUmVzdWx0IiwgImNhc3RlZFRoaXMiKSAuICI7XG4iKTsKKyAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSAi
IC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwg
Im1lbW9pemVkUmVzdWx0IiwgInRoaXNPYmplY3QiKSAuICI7XG4iKTsKICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7
XG4iKSBpZiAkZ2V0dGVyRXhjZXB0aW9uczsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpO1xuIik7CisgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiByZXN1bHQ7XG4i
KTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7CiAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgaWYgKGN1cnNvci5pc1JlcGxheWluZygpKSB7XG4iKTsKQEAg
LTI2MzQsNTkgKzI2NjIsNTkgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgTWVtb2l6ZWRET01SZXN1bHRCYXNl
KiBpbnB1dCA9IGN1cnNvci5mZXRjaElucHV0PE1lbW9pemVkRE9NUmVzdWx0QmFzZT4oKTtcbiIp
OwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBpZiAoaW5wdXQg
JiYgaW5wdXQtPmNvbnZlcnRUbzwkbWVtb2l6ZWRUeXBlPihtZW1vaXplZFJlc3VsdCkpIHtcbiIp
OwogICAgICAgICAgICAgICAgICMgRklYTUU6IHRoZSBnZW5lcmF0ZWQgY29kZSBzaG91bGQgcmVw
b3J0IGFuIGVycm9yIGlmIGFuIGlucHV0IGNhbm5vdCBiZSBmZXRjaGVkIG9yIGNvbnZlcnRlZC4K
LSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIEpTVmFsdWUg
cmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRp
bnRlcmZhY2UsICJtZW1vaXplZFJlc3VsdCIsICJjYXN0ZWRUaGlzIikgLiAiO1xuIik7CisgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICAgICBKU1ZhbHVlIHJlc3Vs
dCA9ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJm
YWNlLCAibWVtb2l6ZWRSZXN1bHQiLCAidGhpc09iamVjdCIpIC4gIjtcbiIpOwogICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKHN0
YXRlLCBpbnB1dC0+ZXhjZXB0aW9uQ29kZSgpKTtcbiIpIGlmICRnZXR0ZXJFeGNlcHRpb25zOwot
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuIik7CiAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIH1cbiIpOwogICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIH1cbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiI2VuZGlmXG4iKTsKICAgICAgICAgICAgIH0gIyBhdHRyaWJ1dGUgTm9uZGV0ZXJtaW5p
c3RpYwogCiAgICAgICAgICAgICBpZiAoSGFzQ3VzdG9tR2V0dGVyKCRhdHRyaWJ1dGUtPnNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKSkgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+JGltcGxHZXR0
ZXJGdW5jdGlvbk5hbWUoKnN0YXRlKSk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICByZXR1cm4gdGhpc09iamVjdC0+JGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUo
KnN0YXRlKTtcbiIpOwogICAgICAgICAgICAgfSBlbHNpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2hlY2tTZWN1cml0eUZvck5vZGUifSkgewogICAgICAg
ICAgICAgICAgICRpbXBsSW5jbHVkZXN7IkpTRE9NQmluZGluZy5oIn0gPSAxOwotICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKHN0YXRlLCBpbXBs
LiIgLiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUgLiAiKCkpID8gIiAuIE5hdGl2ZVRvSlNW
YWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRlcmZhY2UsICJpbXBsLiRpbXBsR2V0
dGVyRnVuY3Rpb25OYW1lKCkiLCAiY2FzdGVkVGhpcyIpIC4gIiA6IGpzTnVsbCgpKTtcbiIpOwor
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LT53cmFwcGVkKCk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICByZXR1cm4gc2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUoc3RhdGUsIGltcGwuIiAuICRh
dHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSAuICIoKSkgPyAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRh
dHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgImltcGwuJGltcGxHZXR0ZXJGdW5j
dGlvbk5hbWUoKSIsICJ0aGlzT2JqZWN0IikgLiAiIDoganNOdWxsKCk7XG4iKTsKICAgICAgICAg
ICAgIH0gZWxzaWYgKCR0eXBlIGVxICJFdmVudEhhbmRsZXIiKSB7CiAgICAgICAgICAgICAgICAg
bXkgJGdldHRlciA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IldpbmRvd0V2ZW50SGFuZGxlciJ9ID8gIndpbmRvd0V2ZW50SGFuZGxlckF0dHJpYnV0ZSIKICAg
ICAgICAgICAgICAgICAgICAgOiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJEb2N1bWVudEV2ZW50SGFuZGxlciJ9ID8gImRvY3VtZW50RXZlbnRIYW5kbGVyQXR0
cmlidXRlIgogICAgICAgICAgICAgICAgICAgICA6ICJldmVudEhhbmRsZXJBdHRyaWJ1dGUiOwog
ICAgICAgICAgICAgICAgIG15ICRldmVudE5hbWUgPSBFdmVudEhhbmRsZXJBdHRyaWJ1dGVFdmVu
dE5hbWUoJGF0dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoJGdldHRlcihjYXN0ZWRUaGlzLT53
cmFwcGVkKCksICRldmVudE5hbWUpKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIHJldHVybiAkZ2V0dGVyKHRoaXNPYmplY3QtPndyYXBwZWQoKSwgJGV2ZW50
TmFtZSk7XG4iKTsKICAgICAgICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+
dHlwZSA9fiAvQ29uc3RydWN0b3IkLykgewogICAgICAgICAgICAgICAgIG15ICRjb25zdHJ1Y3Rv
clR5cGUgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGU7CiAgICAgICAgICAgICAgICAgJGNv
bnN0cnVjdG9yVHlwZSA9fiBzL0NvbnN0cnVjdG9yJC8vOwotICAgICAgICAgICAgICAgICMgV2hl
biBDb25zdHJ1Y3RvciBhdHRyaWJ1dGUgaXMgdXNlZCBieSBET01XaW5kb3cuaWRsLCBpdCdzIGNv
cnJlY3QgdG8gcGFzcyBjYXN0ZWRUaGlzIGFzIHRoZSBnbG9iYWwgb2JqZWN0Ci0gICAgICAgICAg
ICAgICAgIyBXaGVuIEpTRE9NV3JhcHBlcnMgaGF2ZSBhIGJhY2stcG9pbnRlciB0byB0aGUgZ2xv
YmFsT2JqZWN0IHdlIGNhbiBwYXNzIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpCisgICAgICAg
ICAgICAgICAgIyBXaGVuIENvbnN0cnVjdG9yIGF0dHJpYnV0ZSBpcyB1c2VkIGJ5IERPTVdpbmRv
dy5pZGwsIGl0J3MgY29ycmVjdCB0byBwYXNzIHRoaXNPYmplY3QgYXMgdGhlIGdsb2JhbCBvYmpl
Y3QKKyAgICAgICAgICAgICAgICAjIFdoZW4gSlNET01XcmFwcGVycyBoYXZlIGEgYmFjay1wb2lu
dGVyIHRvIHRoZSBnbG9iYWxPYmplY3Qgd2UgY2FuIHBhc3MgdGhpc09iamVjdC0+Z2xvYmFsT2Jq
ZWN0KCkKICAgICAgICAgICAgICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIp
IHsKICAgICAgICAgICAgICAgICAgICAgbXkgJG5hbWVkID0gKCRjb25zdHJ1Y3RvclR5cGUgPX4g
L05hbWVkJC8pID8gIk5hbWVkIiA6ICIiOwogICAgICAgICAgICAgICAgICAgICAkY29uc3RydWN0
b3JUeXBlID1+IHMvTmFtZWQkLy87Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlMiIC4gJGNvbnN0cnVjdG9yVHlwZSAu
ICI6OmdldCR7bmFtZWR9Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGNhc3RlZFRoaXMpKTtcbiIp
OworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlMi
IC4gJGNvbnN0cnVjdG9yVHlwZSAuICI6OmdldCR7bmFtZWR9Q29uc3RydWN0b3Ioc3RhdGUtPnZt
KCksIHRoaXNPYmplY3QpO1xuIik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTIiAuICRjb25zdHJ1Y3RvclR5cGUgLiAi
LmgiLCAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25kaXRp
b25hbCJ9KTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKUyIgLiAkY29uc3RydWN0b3JUeXBlIC4gIjo6Z2V0Q29uc3Ry
dWN0b3Ioc3RhdGUtPnZtKCksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKSk7XG4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTIiAuICRj
b25zdHJ1Y3RvclR5cGUgLiAiOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgdGhpc09iamVj
dC0+Z2xvYmFsT2JqZWN0KCkpO1xuIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fSBlbHNpZiAoISRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikdl
dHRlclJhaXNlc0V4Y2VwdGlvbiJ9ICYmICEkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJHZXR0ZXJSYWlzZXNFeGNlcHRpb25XaXRoTWVzc2FnZSJ9KSB7CiAgICAg
ICAgICAgICAgICAgbXkgJGNhY2hlSW5kZXggPSAwOwogICAgICAgICAgICAgICAgIGlmICgkYXR0
cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWNoZWRBdHRyaWJ1dGUi
fSkgewogICAgICAgICAgICAgICAgICAgICAkY2FjaGVJbmRleCA9ICRjdXJyZW50Q2FjaGVkQXR0
cmlidXRlOwogICAgICAgICAgICAgICAgICAgICAkY3VycmVudENhY2hlZEF0dHJpYnV0ZSsrOwot
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoSlNWYWx1ZSBj
YWNoZWRWYWx1ZSA9IGNhc3RlZFRoaXMtPm1fIiAuICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFt
ZSAuICIuZ2V0KCkpXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FjaGVkVmFsdWUpO1xuIik7CisgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChKU1ZhbHVlIGNhY2hl
ZFZhbHVlID0gdGhpc09iamVjdC0+bV8iIC4gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lIC4g
Ii5nZXQoKSlcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAgICAgcmV0dXJuIGNhY2hlZFZhbHVlO1xuIik7CiAgICAgICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICAgICAgbXkgQGNhbGxXaXRoQXJncyA9IEdlbmVyYXRlQ2FsbFdpdGgoJGF0dHJpYnV0
ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifSwgXEBpbXBsQ29u
dGVudCwgIkpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSIpOworICAgICAgICAgICAgICAg
IG15IEBjYWxsV2l0aEFyZ3MgPSBHZW5lcmF0ZUNhbGxXaXRoKCRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhbGxXaXRoIn0sIFxAaW1wbENvbnRlbnQsICJqc1Vu
ZGVmaW5lZCgpIik7CiAKICAgICAgICAgICAgICAgICBpZiAoJHN2Z0xpc3RQcm9wZXJ0eVR5cGUp
IHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSBy
ZXN1bHQgPSAgIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRp
bnRlcmZhY2UsICJjYXN0ZWRUaGlzLT53cmFwcGVkKCkuJGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUo
IiAuIChqb2luICIsICIsIEBjYWxsV2l0aEFyZ3MpIC4gIikiLCAiY2FzdGVkVGhpcyIpIC4gIjtc
biIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVl
IHJlc3VsdCA9ICAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwg
JGludGVyZmFjZSwgInRoaXNPYmplY3QtPndyYXBwZWQoKS4kaW1wbEdldHRlckZ1bmN0aW9uTmFt
ZSgiIC4gKGpvaW4gIiwgIiwgQGNhbGxXaXRoQXJncykgLiAiKSIsICJ0aGlzT2JqZWN0IikgLiAi
O1xuIik7CiAgICAgICAgICAgICAgICAgfSBlbHNpZiAoJHN2Z1Byb3BlcnR5T3JMaXN0UHJvcGVy
dHlUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRz
dmdQcm9wZXJ0eU9yTGlzdFByb3BlcnR5VHlwZSYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KS5wcm9wZXJ0eVJlZmVyZW5jZSgpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgICRzdmdQcm9wZXJ0eU9yTGlzdFByb3BlcnR5VHlwZSYgaW1wbCA9IHRo
aXNPYmplY3QtPndyYXBwZWQoKS5wcm9wZXJ0eVJlZmVyZW5jZSgpO1xuIik7CiAgICAgICAgICAg
ICAgICAgICAgIGlmICgkc3ZnUHJvcGVydHlPckxpc3RQcm9wZXJ0eVR5cGUgZXEgImZsb2F0Iikg
eyAjIFNwZWNpYWwgY2FzZSBmb3IgSlNTVkdOdW1iZXIKLSAgICAgICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNW
YWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRlcmZhY2UsICJpbXBsIiwgImNhc3Rl
ZFRoaXMiKSAuICI7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIEpTVmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRl
LT5zaWduYXR1cmUsIDAsICRpbnRlcmZhY2UsICJpbXBsIiwgInRoaXNPYmplY3QiKSAuICI7XG4i
KTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNW
YWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRlcmZhY2UsICJpbXBsLiRpbXBsR2V0
dGVyRnVuY3Rpb25OYW1lKCIgLiAoam9pbiAiLCAiLCBAY2FsbFdpdGhBcmdzKSAuICIpIiwgImNh
c3RlZFRoaXMiKSAuICI7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIEpTVmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmli
dXRlLT5zaWduYXR1cmUsIDAsICRpbnRlcmZhY2UsICJpbXBsLiRpbXBsR2V0dGVyRnVuY3Rpb25O
YW1lKCIgLiAoam9pbiAiLCAiLCBAY2FsbFdpdGhBcmdzKSAuICIpIiwgInRoaXNPYmplY3QiKSAu
ICI7XG4iKTsKIAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKQEAgLTI3MDMsMzMgKzI3MzEsMzMgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAg
ICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgIHVuc2hpZnQoQGFyZ3Vt
ZW50cywgQGNhbGxXaXRoQXJncyk7Ci0gICAgICAgICAgICAgICAgICAgIG15ICRqc1R5cGUgPSBO
YXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNlLCAiJHtm
dW5jdGlvbk5hbWV9KCIgLiBqb2luKCIsICIsIEBhcmd1bWVudHMpIC4gIikiLCAiY2FzdGVkVGhp
cyIpOwotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpO1xuIikgaWYgISRhdHRyaWJ1dGUtPmlzU3RhdGlj
OworICAgICAgICAgICAgICAgICAgICBteSAkanNUeXBlID0gTmF0aXZlVG9KU1ZhbHVlKCRhdHRy
aWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgIiR7ZnVuY3Rpb25OYW1lfSgiIC4gam9p
bigiLCAiLCBAYXJndW1lbnRzKSAuICIpIiwgInRoaXNPYmplY3QiKTsKKyAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndy
YXBwZWQoKTtcbiIpIGlmICEkYXR0cmlidXRlLT5pc1N0YXRpYzsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1NWR0FuaW1hdGVkVHlwZSgkdHlwZSkpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8gb2JqID0gJGpz
VHlwZTtcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSwgb2JqLmdldCgpKTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9i
YWxPYmplY3QoKSwgb2JqLmdldCgpKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1
ZSByZXN1bHQgPSAkanNUeXBlO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBjYXN0
ZWRUaGlzLT5tXyIgLiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUgLiAiLnNldChzdGF0ZS0+
dm0oKSwgY2FzdGVkVGhpcywgcmVzdWx0KTtcbiIpIGlmICgkYXR0cmlidXRlLT5zaWduYXR1cmUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWNoZWRBdHRyaWJ1dGUifSk7Ci0gICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
O1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdGhpc09iamVj
dC0+bV8iIC4gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lIC4gIi5zZXQoc3RhdGUtPnZtKCks
IHRoaXNPYmplY3QsIHJlc3VsdCk7XG4iKSBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiQ2FjaGVkQXR0cmlidXRlIn0pOworICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiByZXN1bHQ7XG4iKTsKIAogICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICB1bnNoaWZ0KEBhcmd1bWVudHMsIEdlbmVyYXRlQ2Fs
bFdpdGgoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdp
dGgifSwgXEBpbXBsQ29udGVudCwgIkpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSIpKTsK
KyAgICAgICAgICAgICAgICB1bnNoaWZ0KEBhcmd1bWVudHMsIEdlbmVyYXRlQ2FsbFdpdGgoJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifSwgXEBp
bXBsQ29udGVudCwgImpzVW5kZWZpbmVkKCkiKSk7CiAKICAgICAgICAgICAgICAgICBpZiAoJHN2
Z1Byb3BlcnR5T3JMaXN0UHJvcGVydHlUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICRzdmdQcm9wZXJ0eU9yTGlzdFByb3BlcnR5VHlwZSBpbXBsKCpj
YXN0ZWRUaGlzLT53cmFwcGVkKCkpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIEpTVmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0
cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRlcmZhY2UsICJpbXBsLiRpbXBsR2V0dGVyRnVuY3Rp
b25OYW1lKCIgLiBqb2luKCIsICIsIEBhcmd1bWVudHMpIC4gIikiLCAiY2FzdGVkVGhpcyIpIC4g
IjtcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkc3Zn
UHJvcGVydHlPckxpc3RQcm9wZXJ0eVR5cGUgaW1wbCgqdGhpc09iamVjdC0+d3JhcHBlZCgpKTtc
biIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVl
IHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAk
aW50ZXJmYWNlLCAiaW1wbC4kaW1wbEdldHRlckZ1bmN0aW9uTmFtZSgiIC4gam9pbigiLCAiLCBA
YXJndW1lbnRzKSAuICIpIiwgInRoaXNPYmplY3QiKSAuICI7XG4iKTsKICAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpO1xuIik7Ci0gICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2ZVRv
SlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRlcmZhY2UsICJpbXBsLiRpbXBs
R2V0dGVyRnVuY3Rpb25OYW1lKCIgLiBqb2luKCIsICIsIEBhcmd1bWVudHMpIC4gIikiLCAiY2Fz
dGVkVGhpcyIpIC4gIjtcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpO1xuIik7CisgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgcmVzdWx0ID0gIiAu
IE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRlcmZhY2UsICJp
bXBsLiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCIgLiBqb2luKCIsICIsIEBhcmd1bWVudHMpIC4g
IikiLCAidGhpc09iamVjdCIpIC4gIjtcbiIpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwg
ZWMpO1xuIik7CiAKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICByZXR1cm4gcmVzdWx0O1xuIik7CiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKQEAgLTMyMzAsNiArMzI1OCw5
IEBAIEVORAogCiAgICAgfQogCisgICAgR2VuZXJhdGVTZXJpYWxpemVyRnVuY3Rpb24oJGludGVy
ZmFjZSwgJGludGVyZmFjZU5hbWUsICRjbGFzc05hbWUsICRzZXJpYWxpemVyRnVuY3Rpb25OYW1l
LCAkc2VyaWFsaXplck5hdGl2ZUZ1bmN0aW9uTmFtZSkgaWYgJGludGVyZmFjZS0+c2VyaWFsaXph
YmxlOworCisKICAgICBpZiAoJGludGVyZmFjZS0+aXRlcmFibGUpIHsKICAgICAgICAgR2VuZXJh
dGVJbXBsZW1lbnRhdGlvbkl0ZXJhYmxlRnVuY3Rpb25zKCRpbnRlcmZhY2UpOwogICAgIH0KQEAg
LTM0NDIsNiArMzQ3MywzMCBAQCBFTkQKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuI2VuZGlm
IC8vICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CiB9CiAK
K3N1YiBHZW5lcmF0ZVNlcmlhbGl6ZXJGdW5jdGlvbgoreworICAgIG15ICgkaW50ZXJmYWNlLCAk
aW50ZXJmYWNlTmFtZSwgJGNsYXNzTmFtZSwgJHNlcmlhbGl6ZXJGdW5jdGlvbk5hbWUsICRzZXJp
YWxpemVyTmF0aXZlRnVuY3Rpb25OYW1lKSA9IEBfOworCisgICAgQWRkVG9JbXBsSW5jbHVkZXMo
Ik9iamVjdENvbnN0cnVjdG9yLmgiKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIkVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtzZXJpYWxpemVyTmF0aXZlRnVuY3Rpb25OYW1lfShFeGVj
U3RhdGUqIHN0YXRlKVxuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKKyAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpT
JGludGVyZmFjZU5hbWUqPihzdGF0ZS0+dGhpc1ZhbHVlKCkpO1xuIik7CisgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSlcbiIpOworICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwg
XCIkaW50ZXJmYWNlTmFtZVwiLCBcIiRzZXJpYWxpemVyRnVuY3Rpb25OYW1lXCIpO1xuIik7Cisg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0
ZWRUaGlzLCAke2NsYXNzTmFtZX06OmluZm8oKSk7XG5cbiIpIHVubGVzcyAkaW50ZXJmYWNlTmFt
ZSBlcSAiRXZlbnRUYXJnZXQiOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8qIHJl
c3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KHN0YXRlKTtcbiIpOworICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpO1xuIik7CisgICAgZm9yZWFjaCBteSAk
YXR0cmlidXRlIChAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9KSB7CisgICAgICAgIG15ICRuYW1l
ID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lOworICAgICAgICBpZiAoZ3JlcCAkXyBlcSAk
bmFtZSwgQHskaW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPmF0dHJpYnV0ZXN9KSB7CisgICAgICAg
ICAgICBteSAkZ2V0RnVuY3Rpb25OYW1lID0gR2V0QXR0cmlidXRlR2V0dGVyTmFtZSgkaW50ZXJm
YWNlLCAkY2xhc3NOYW1lLCAkYXR0cmlidXRlKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2
bSwgXCIke25hbWV9XCIpLCAke2dldEZ1bmN0aW9uTmFtZX1HZXR0ZXIoc3RhdGUsIGNhc3RlZFRo
aXMpKTtcbiIpOworICAgICAgICB9CisgICAgfQorICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTtcbiIpOworICAgIHB1c2goQGltcGxDb250
ZW50LCAifVxuXG4iKTsKK30KKwogc3ViIEdlbmVyYXRlRnVuY3Rpb25DYXN0ZWRUaGlzCiB7CiAg
ICAgbXkgKCRpbnRlcmZhY2UsICRjbGFzc05hbWUsICRmdW5jdGlvbikgPSBAXzsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0KaW5kZXggYzhkM2UwOTQ0MDhj
YjgwZGU2ZmQ4MGRkODdmZTRkNmFmOWJkMmVhOC4uZmEwYzhlZGNjNDMzMzNmOGMyMjRkYTAwYTRj
NTkyMDlmNzU4YjM5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9JRExQYXJzZXIucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQ
YXJzZXIucG0KQEAgLTU3LDYgKzU3LDcgQEAgc3RydWN0KCBkb21JbnRlcmZhY2UgPT4gewogICAg
IGlzQ2FsbGJhY2sgPT4gJyQnLCAjIFVzZWQgZm9yIGNhbGxiYWNrIGludGVyZmFjZXMKICAgICBp
c1BhcnRpYWwgPT4gJyQnLCAjIFVzZWQgZm9yIHBhcnRpYWwgaW50ZXJmYWNlcwogICAgIGl0ZXJh
YmxlID0+ICckJywgIyBVc2VkIGZvciBpdGVyYWJsZSBpbnRlcmZhY2VzCisgICAgc2VyaWFsaXph
YmxlID0+ICckJywgIyBVc2VkIGZvciBzZXJpYWxpemFibGUgaW50ZXJmYWNlcwogfSk7CiAKICMg
VXNlZCB0byByZXByZXNlbnQgZG9tSW50ZXJmYWNlIGNvbnRlbnRzIChuYW1lIG9mIG1ldGhvZCwg
c2lnbmF0dXJlKQpAQCAtOTUsNiArOTYsMTAgQEAgc3RydWN0KCBkb21JdGVyYWJsZSA9PiB7CiAg
ICAgZnVuY3Rpb25zID0+ICdAJywgIyBJdGVyYWJsZSBmdW5jdGlvbnMgKGVudHJpZXMsIGtleXMs
IHZhbHVlcywgW1N5bWJvbC5JdGVyYXRvcl0sIGZvckVhY2gpCiB9KTsKIAorIyBVc2VkIHRvIHJl
cHJlc2VudCBzZXJpYWxpemFibGUgaW50ZXJmYWNlCitzdHJ1Y3QoIGRvbVNlcmlhbGl6YWJsZSA9
PiB7CisgICAgYXR0cmlidXRlcyA9PiAnQCcsICMgTGlzdCBvZiBhdHRyaWJ1dGVzIHRvIHNlcmlh
bGl6ZQorfSk7CiAKICMgVXNlZCB0byByZXByZXNlbnQgc3RyaW5nIGNvbnN0YW50cwogc3RydWN0
KCBkb21Db25zdGFudCA9PiB7CkBAIC0xMDMwLDcgKzEwMzUsMTYgQEAgc3ViIHBhcnNlU2VyaWFs
aXplcgogICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tlbigpOwogICAgIGlmICgkbmV4dC0+
dmFsdWUoKSBlcSAic2VyaWFsaXplciIpIHsKICAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFs
dWUoJHNlbGYtPmdldFRva2VuKCksICJzZXJpYWxpemVyIiwgX19MSU5FX18pOwotICAgICAgICBy
ZXR1cm4gJHNlbGYtPnBhcnNlU2VyaWFsaXplclJlc3QoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7
CisgICAgICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tlbigpOworICAgICAgICBteSAkbmV3
RGF0YU5vZGU7CisgICAgICAgIGlmICgkbmV4dC0+dmFsdWUoKSBuZSAiOyIpIHsKKyAgICAgICAg
ICAgICRuZXdEYXRhTm9kZSA9ICRzZWxmLT5wYXJzZVNlcmlhbGl6ZXJSZXN0KCRleHRlbmRlZEF0
dHJpYnV0ZUxpc3QpOworICAgICAgICAgICAgbXkgJG5leHQgPSAkc2VsZi0+bmV4dFRva2VuKCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkbmV3RGF0YU5vZGUgPSBkb21TZXJpYWxp
emFibGUtPm5ldygpOworICAgICAgICB9CisgICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVl
KCRzZWxmLT5nZXRUb2tlbigpLCAiOyIsIF9fTElORV9fKTsKKyAgICAgICAgcmV0dXJuICRuZXdE
YXRhTm9kZTsKICAgICB9CiAgICAgJHNlbGYtPmFzc2VydFVuZXhwZWN0ZWRUb2tlbigkbmV4dC0+
dmFsdWUoKSwgX19MSU5FX18pOwogfQpAQCAtMTA0Myw3ICsxMDU3LDEwIEBAIHN1YiBwYXJzZVNl
cmlhbGl6ZXJSZXN0CiAgICAgbXkgJG5leHQgPSAkc2VsZi0+bmV4dFRva2VuKCk7CiAgICAgaWYg
KCRuZXh0LT52YWx1ZSgpIGVxICI9IikgewogICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1
ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIj0iLCBfX0xJTkVfXyk7Ci0gICAgICAgIHJldHVybiAkc2Vs
Zi0+cGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybigkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKKyAg
ICAgICAgbXkgJGF0dHJpYnV0ZXMgPSAkc2VsZi0+cGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybigp
OworICAgICAgICBteSAkbmV3RGF0YU5vZGUgPSBkb21TZXJpYWxpemFibGUtPm5ldygpOworICAg
ICAgICAkbmV3RGF0YU5vZGUtPmF0dHJpYnV0ZXMoJGF0dHJpYnV0ZXMpOworICAgICAgICByZXR1
cm4gJG5ld0RhdGFOb2RlOwogICAgIH0KICAgICBpZiAoJG5leHQtPnR5cGUoKSA9PSBJZGVudGlm
aWVyVG9rZW4gfHwgJG5leHQtPnZhbHVlKCkgZXEgIigiKSB7CiAgICAgICAgIHJldHVybiAkc2Vs
Zi0+cGFyc2VPcGVyYXRpb25SZXN0KCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwpAQCAtMTA1Myw1
OSArMTA3MCw0NSBAQCBzdWIgcGFyc2VTZXJpYWxpemVyUmVzdAogc3ViIHBhcnNlU2VyaWFsaXph
dGlvblBhdHRlcm4KIHsKICAgICBteSAkc2VsZiA9IHNoaWZ0OwotICAgIG15ICRleHRlbmRlZEF0
dHJpYnV0ZUxpc3QgPSBzaGlmdDsKIAogICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tlbigp
OwogICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAieyIpIHsKICAgICAgICAgJHNlbGYtPmFzc2Vy
dFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICJ7IiwgX19MSU5FX18pOwotICAgICAgICAk
c2VsZi0+cGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybk1hcCgpOworICAgICAgICBteSAkYXR0cmli
dXRlcyA9ICRzZWxmLT5wYXJzZVNlcmlhbGl6YXRpb25BdHRyaWJ1dGVzKCk7CiAgICAgICAgICRz
ZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAifSIsIF9fTElORV9fKTsK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gXEB7JGF0dHJpYnV0ZXN9OwogICAgIH0K
ICAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgIlsiKSB7Ci0gICAgICAgICRzZWxmLT5hc3NlcnRU
b2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiWyIsIF9fTElORV9fKTsKLSAgICAgICAgJHNl
bGYtPnBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm5MaXN0KCk7Ci0gICAgICAgICRzZWxmLT5hc3Nl
cnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiXSIsIF9fTElORV9fKTsKLSAgICAgICAg
cmV0dXJuOworICAgICAgICBkaWUgIlNlcmlhbGl6YXRpb24gb2YgbGlzdHMgcGF0dGVybiBpcyBu
b3QgY3VycmVudGx5IHN1cHBvcnRlZC4iOwogICAgIH0KICAgICBpZiAoJG5leHQtPnR5cGUoKSA9
PSBJZGVudGlmaWVyVG9rZW4pIHsKLSAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVHlwZSgkc2Vs
Zi0+Z2V0VG9rZW4oKSwgSWRlbnRpZmllclRva2VuKTsKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICBteSBAYXR0cmlidXRlcyA9ICgpOworICAgICAgICBteSAkdG9rZW4gPSAkc2VsZi0+Z2V0VG9r
ZW4oKTsKKyAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVHlwZSgkdG9rZW4sIElkZW50aWZpZXJU
b2tlbik7CisgICAgICAgIHB1c2goQGF0dHJpYnV0ZXMsICR0b2tlbi0+dmFsdWUoKSk7CisgICAg
ICAgIHJldHVybiBcQGF0dHJpYnV0ZXM7CiAgICAgfQogICAgICRzZWxmLT5hc3NlcnRVbmV4cGVj
dGVkVG9rZW4oJG5leHQtPnZhbHVlKCksIF9fTElORV9fKTsKIH0KIAotc3ViIHBhcnNlU2VyaWFs
aXphdGlvblBhdHRlcm5NYXAKK3N1YiBwYXJzZVNlcmlhbGl6YXRpb25BdHRyaWJ1dGVzCiB7CiAg
ICAgbXkgJHNlbGYgPSBzaGlmdDsKLSAgICBteSAkbmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsK
LSAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgImdldHRlciIpIHsKLSAgICAgICAgJHNlbGYtPmFz
c2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICJnZXR0ZXIiLCBfX0xJTkVfXyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJpbmhlcml0
IikgewotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwg
ImluaGVyaXQiLCBfX0xJTkVfXyk7Ci0gICAgICAgICRzZWxmLT5wYXJzZUlkZW50aWZpZXJzKCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCRuZXh0LT50eXBlKCkgPT0gSWRlbnRp
ZmllclRva2VuKSB7Ci0gICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblR5cGUoJHNlbGYtPmdldFRv
a2VuKCksIElkZW50aWZpZXJUb2tlbik7Ci0gICAgICAgICRzZWxmLT5wYXJzZUlkZW50aWZpZXJz
KCk7Ci0gICAgfQotfQorICAgIG15ICR0b2tlbiA9ICRzZWxmLT5nZXRUb2tlbigpOworCisgICAg
aWYgKCR0b2tlbi0+dmFsdWUoKSBlcSAiZ2V0dGVyIikgeworICAgICAgICBkaWUgIlNlcmlhbGl6
ZXIgZ2V0dGVyIGtleXdvcmQgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuIjsKIAotc3ViIHBh
cnNlU2VyaWFsaXphdGlvblBhdHRlcm5MaXN0Ci17Ci0gICAgbXkgJHNlbGYgPSBzaGlmdDsKLSAg
ICBteSAkbmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsKLSAgICBpZiAoJG5leHQtPnZhbHVlKCkg
ZXEgImdldHRlciIpIHsKLSAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdl
dFRva2VuKCksICJnZXR0ZXIiLCBfX0xJTkVfXyk7Ci0gICAgICAgIHJldHVybjsKICAgICB9Ci0g
ICAgaWYgKCRuZXh0LT50eXBlKCkgPT0gSWRlbnRpZmllclRva2VuKSB7Ci0gICAgICAgICRzZWxm
LT5hc3NlcnRUb2tlblR5cGUoJHNlbGYtPmdldFRva2VuKCksIElkZW50aWZpZXJUb2tlbik7Ci0g
ICAgICAgICRzZWxmLT5wYXJzZUlkZW50aWZpZXJzKCk7CisgICAgaWYgKCR0b2tlbi0+dmFsdWUo
KSBlcSAiaW5oZXJpdCIpIHsKKyAgICAgICAgZGllICJTZXJpYWxpemVyIGluaGVyaXQga2V5d29y
ZCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4iOwogICAgIH0KKworICAgIG15IEBhdHRyaWJ1
dGVzID0gKCk7CisgICAgJHNlbGYtPmFzc2VydFRva2VuVHlwZSgkdG9rZW4sIElkZW50aWZpZXJU
b2tlbik7CisgICAgcHVzaChAYXR0cmlidXRlcywgJHRva2VuLT52YWx1ZSgpKTsKKyAgICBwdXNo
KEBhdHRyaWJ1dGVzLCBAeyRzZWxmLT5wYXJzZUlkZW50aWZpZXJzKCl9KTsKKyAgICByZXR1cm4g
XEBhdHRyaWJ1dGVzOwogfQogCiBzdWIgcGFyc2VJZGVudGlmaWVyTGlzdApAQCAtMjI4Nyw2ICsy
MjkwLDE5IEBAIHN1YiBhcHBseU1lbWJlckxpc3QKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IG5leHQ7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKHJlZigkaXRlbSkgZXEgImRvbVNlcmlhbGl6
YWJsZSIpIHsKKyAgICAgICAgICAgICRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZSgkaXRlbSk7Cisg
ICAgICAgICAgICBuZXh0OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCRpbnRlcmZhY2Ut
PnNlcmlhbGl6YWJsZSkgeworICAgICAgICBteSAkbnVtU2VyaWFsaXplckF0dHJpYnV0ZXMgPSBA
eyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+YXR0cmlidXRlc307CisgICAgICAgIGlmICgkbnVt
U2VyaWFsaXplckF0dHJpYnV0ZXMgPT0gMCkgeworICAgICAgICAgICAgZm9yZWFjaCBteSAkYXR0
cmlidXRlIChAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9KSB7CisgICAgICAgICAgICAgICAgcHVz
aChAeyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+YXR0cmlidXRlc30sICRhdHRyaWJ1dGUtPnNp
Z25hdHVyZS0+bmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RB
Y3RpdmVET01PYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKaW5kZXggYWNlMDg2YzhkNjE5NjZmN2NlN2Nl
MWZhMzJlYjY0MmZhOWRiNjZiNi4uMjU4YjFkZmU2ODk2NDZhZTIxYzAwYzU4ZDg1Yzk1YjI2ZThi
MGQwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKQEAgLTE0OSw2ICsxNDks
OCBAQCBib29sIEpTVGVzdEFjdGl2ZURPTU9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAorSlNW
YWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RFeGNpdGluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiwg
SlNUZXN0QWN0aXZlRE9NT2JqZWN0Kik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEFjdGl2ZURP
TU9iamVjdEV4Y2l0aW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CkBAIC0xNTksMTEgKzE2MSwxOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RB
Y3RpdmVET01PYmplY3RFeGNpdGluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93
R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RBY3RpdmVET01PYmplY3QiLCAiZXhjaXRpbmdB
dHRyIik7CiAgICAgfQotICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vz
c1RvRE9NV2luZG93KHN0YXRlLCBjYXN0ZWRUaGlzLT53cmFwcGVkKCkpKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RBY3Rp
dmVET01PYmplY3RFeGNpdGluZ0F0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKwor
SlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RFeGNpdGluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0QWN0aXZlRE9NT2JqZWN0KiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGlmICgh
QmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KHN0YXRlLCB0aGlz
T2JqZWN0LT53cmFwcGVkKCkpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNOdW1iZXIoaW1wbC5leGNpdGluZ0F0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3Iu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50
Q29uc3RydWN0b3IuY3BwCmluZGV4IGEwMDRhOTc5MDk2Nzk3ZmQwYTU0NTE4NGE4ZTE4NmNlZDU1
ZTBkMjQuLmRjMTIzYTQ1MjhlNzcyNzFjNTNiN2Q0Zjc4MDU2YWMyOGRmYjlkYjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENv
bnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKQEAgLTE3Niw2ICsxNzYsOCBAQCB2b2lkIEpT
VGVzdEV2ZW50Q29uc3RydWN0b3I6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiAgICAgdGhp
c09iamVjdC0+SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6fkpTVGVzdEV2ZW50Q29uc3RydWN0b3Io
KTsKIH0KIAorSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjFHZXR0ZXIoRXhlY1N0
YXRlKiwgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RF
dmVudENvbnN0cnVjdG9yQXR0cjEoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwpAQCAtMTg2LDEyICsxODgsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
RXZlbnRDb25zdHJ1Y3RvckF0dHIxKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXMKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJv
d0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0RXZlbnRDb25zdHJ1Y3RvciIsICJhdHRyMSIp
OwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIxR2V0dGVyKHN0
YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0
dHIxR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEV2ZW50Q29uc3RydWN0b3IqIHRoaXNP
YmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhp
c09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmF0dHIxKCkpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0Owog
fQogCiAKK0pTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIyR2V0dGVyKEV4ZWNTdGF0
ZSosIEpTVGVzdEV2ZW50Q29uc3RydWN0b3IqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0RXZl
bnRDb25zdHJ1Y3RvckF0dHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKQEAgLTIwMiwxMyArMjEzLDIyIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2
ZW50Q29uc3RydWN0b3JBdHRyMihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dH
ZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdEV2ZW50Q29uc3RydWN0b3IiLCAiYXR0cjIiKTsK
ICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMkdldHRlcihzdGF0
ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRy
MkdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yKiB0aGlzT2Jq
ZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNP
YmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNW
YWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5hdHRyMigpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogCiAjaWYgRU5BQkxFKFNQRUNJQUxfRVZFTlQpCitKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3Ry
dWN0b3JBdHRyM0dldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yKik7CisK
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMyhFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNs
b3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMTksOSArMjM5LDE2IEBA
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMyhFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkg
ewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdEV2ZW50
Q29uc3RydWN0b3IiLCAiYXR0cjMiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEV2ZW50Q29u
c3RydWN0b3JBdHRyM0dldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpz
VGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyM0dldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RF
dmVudENvbnN0cnVjdG9yKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShz
dGF0ZSwgaW1wbC5hdHRyMygpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCmlu
ZGV4IGIyNWRhMzFjZDhmNzE4M2QxM2UyOTUwODkxMDU0OTEzZTJhNDNlNTMuLjk3YmE5MTllMDk2
OWNiOTk3ZmQyMDljYzRlNjM5MzhlMmFlNjM3ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwCkBA
IC0xNDEsNiArMTQxLDggQEAgYm9vbCBKU1Rlc3RFeGNlcHRpb246OmdldE93blByb3BlcnR5U2xv
dChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm8KICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKK0pTVmFsdWUganNUZXN0RXhjZXB0aW9uTmFtZUdldHRlcihFeGVjU3RhdGUqLCBK
U1Rlc3RFeGNlcHRpb24qKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0RXhjZXB0aW9uTmFtZShF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwg
SlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xNTEs
OSArMTUzLDE2IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEV4Y2VwdGlvbk5hbWUoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQCiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRl
LCAiVGVzdEV4Y2VwdGlvbiIsICJuYW1lIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RFeGNl
cHRpb25OYW1lR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0
RXhjZXB0aW9uTmFtZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RFeGNlcHRpb24qIHRo
aXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0o
dGhpc09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLm5hbWUoKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAppbmRleCAwZGJmMDA4YjYwZjUxNzEx
NzU1Yzk1ZGNkY2JmMzJjZWQyMzlkOThkLi5hM2Q1YThmZGJkNDc1M2EyMzEzOTI3MTIyNjBmM2Q1
YzM1NmNkZDQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcApAQCAtMTU0LDYgKzE1NCw4
IEBAIGJvb2wgSlNUZXN0R2xvYmFsT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK0pTVmFs
dWUganNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqLCBK
U1Rlc3RHbG9iYWxPYmplY3QqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0
UmVndWxhckF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CkBAIC0xNjQsMTMgKzE2NiwyMiBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9i
YWxPYmplY3RSZWd1bGFyQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbAog
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0
dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RHbG9iYWxPYmplY3QiLCAicmVndWxhckF0dHJpYnV0
ZSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0
ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdEdsb2JhbE9i
amVjdFJlZ3VsYXJBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0R2xvYmFs
T2JqZWN0KiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5V
U0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFw
cGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1w
bC5yZWd1bGFyQXR0cmlidXRlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQor
SlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlR2V0dGVy
KEV4ZWNTdGF0ZSosIEpTVGVzdEdsb2JhbE9iamVjdCopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJh
c2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE4MSw5ICsxOTIsMTYgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZShF
eGVjU3RhdGUqIHN0YXRlLCBFbmMKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAg
ICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0R2xvYmFsT2Jq
ZWN0IiwgImVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUiKTsKICAgICB9Ci0gICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNh
c3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50
aW1lQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCog
dGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJB
TSh0aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwog
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuZW5hYmxl
ZEF0UnVudGltZUF0dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3Bw
CmluZGV4IDhjOTQ2NTUyYjU5Y2JhNWI5NDgzMDgwYzY1MzA4NjdjZDU2YzVmYjkuLjcyNDg2ZDZi
YWQyZmU4YjBjM2JhYzM5MjU5ZWIzODM1YTIzNTJjNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3Bw
CkBAIC00MDksMzAgKzQwOSw1MCBAQCB2b2lkIEpTVGVzdEludGVyZmFjZTo6ZGVzdHJveShKU0M6
OkpTQ2VsbCogY2VsbCkKIH0KIAogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENv
bmRpdGlvbjIzKQorSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNT
dGF0aWNSZWFkT25seUF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0SW50ZXJmYWNlKik7CisK
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRp
Y1JlYWRPbmx5QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNs
b3RCYXNlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEludGVyZmFjZUNvbnN0
cnVjdG9ySW1wbGVtZW50c1N0YXRpY1JlYWRPbmx5QXR0ckdldHRlcihzdGF0ZSwgbnVsbHB0cikp
OworfQorCitKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRp
Y1JlYWRPbmx5QXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UqIHRo
aXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0o
dGhpc09iamVjdCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihUZXN0SW50ZXJmYWNl
OjppbXBsZW1lbnRzU3RhdGljUmVhZE9ubHlBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAjZW5kaWYKIAogI2lmIEVO
QUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQorSlNWYWx1ZSBqc1Rlc3RJ
bnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyR2V0dGVyKEV4ZWNTdGF0ZSos
IEpTVGVzdEludGVyZmFjZSopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25z
dHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBV
TlVTRURfUEFSQU0oc2xvdEJhc2UpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0
SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljQXR0ckdldHRlcihzdGF0ZSwgbnVs
bHB0cikpOworfQorCitKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50
c1N0YXRpY0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlKiB0aGlz
T2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRo
aXNPYmplY3QpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUs
IFRlc3RJbnRlcmZhY2U6OmltcGxlbWVudHNTdGF0aWNBdHRyKCkpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAjZW5kaWYKIAog
I2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQorSlNWYWx1ZSBq
c1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RJbnRl
cmZhY2UqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjEo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUs
IEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtNDQz
LDE0ICs0NjMsMjMgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0
cjEoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGgKICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3Rh
dGUsICJUZXN0SW50ZXJmYWNlIiwgImltcGxlbWVudHNTdHIxIik7CiAgICAgfQotICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykp
OworfQorCitKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIxR2V0dGVyKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJp
bmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuaW1wbGVtZW50c1N0cjEoKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKICNlbmRpZgog
CiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCitKU1ZhbHVl
IGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdElu
dGVyZmFjZSopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3Ry
MihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC00
NjEsMTQgKzQ5MCwyMyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRz
U3RyMihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aAogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3RJbnRlcmZhY2UiLCAiaW1wbGVtZW50c1N0cjIiKTsKICAgICB9Ci0gICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlz
KSk7Cit9CisKK0pTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjJHZXR0ZXIoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0
cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5pbXBsZW1lbnRzU3RyMigpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2VuZGlm
CiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKK0pTVmFs
dWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjNHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0
SW50ZXJmYWNlKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNT
dHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAg
LTQ3OSwxMiArNTE3LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVu
dHNTdHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoCiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3Io
KnN0YXRlLCAiVGVzdEludGVyZmFjZSIsICJpbXBsZW1lbnRzU3RyMyIpOwogICAgIH0KLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmltcGxlbWVudHNTdHIzKCpzdGF0ZSkp
OworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0
cjNHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RJbnRlcmZh
Y2VJbXBsZW1lbnRzU3RyM0dldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2Uq
IHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFS
QU0odGhpc09iamVjdCk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPmltcGxlbWVudHNTdHIzKCpz
dGF0ZSk7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUo
Q29uZGl0aW9uMjMpCitKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNOb2RlR2V0dGVy
KEV4ZWNTdGF0ZSosIEpTVGVzdEludGVyZmFjZSopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJ
bnRlcmZhY2VJbXBsZW1lbnRzTm9kZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CkBAIC00OTUsMzggKzU0Miw2NSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9kZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRo
cm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RJbnRlcmZhY2UiLCAiaW1wbGVtZW50c05v
ZGUiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
LCBpbXBsLmltcGxlbWVudHNOb2RlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEludGVyZmFjZUltcGxlbWVu
dHNOb2RlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0SW50
ZXJmYWNlSW1wbGVtZW50c05vZGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJm
YWNlKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VE
X1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVk
KCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxP
YmplY3QoKSwgaW1wbC5pbXBsZW1lbnRzTm9kZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
CiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEy
KQorSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY1Jl
YWRPbmx5QXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RJbnRlcmZhY2UqKTsKKwogRW5jb2Rl
ZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNSZWFk
T25seUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFz
ZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rv
clN1cHBsZW1lbnRhbFN0YXRpY1JlYWRPbmx5QXR0ckdldHRlcihzdGF0ZSwgbnVsbHB0cikpOwor
fQorCitKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGlj
UmVhZE9ubHlBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSogdGhp
c09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0
aGlzT2JqZWN0KTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKFdlYkNvcmU6OlRlc3RT
dXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbFN0YXRpY1JlYWRPbmx5QXR0cigpKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKK0pT
VmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNBdHRyR2V0
dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdEludGVyZmFjZSopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY0F0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBz
bG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aGlzVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShzbG90QmFzZSk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY0F0
dHJHZXR0ZXIoc3RhdGUsIG51bGxwdHIpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VD
b25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0SW50ZXJmYWNlKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNT
dHJpbmdXaXRoQ2FjaGUoc3RhdGUsIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1l
bnRhbFN0YXRpY0F0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwor
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEx
KSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCitKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1l
bnRhbFN0cjFHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0SW50ZXJmYWNlKik7CisKIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjEoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFz
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtNTM3LDE0ICs2MTEsMjMgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMShFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAg
ICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RJbnRlcmZhY2Ui
LCAic3VwcGxlbWVudGFsU3RyMSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0SW50ZXJmYWNl
U3VwcGxlbWVudGFsU3RyMUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVl
IGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjFHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0SW50ZXJmYWNlKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShz
dGF0ZSwgV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsU3RyMShpbXBsKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMTIpCitKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjJHZXR0ZXIoRXhl
Y1N0YXRlKiwgSlNUZXN0SW50ZXJmYWNlKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVy
ZmFjZVN1cHBsZW1lbnRhbFN0cjIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwpAQCAtNTU1LDE0ICs2MzgsMjMgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93
R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RJbnRlcmZhY2UiLCAic3VwcGxlbWVudGFsU3Ry
MiIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMkdl
dHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1
cHBsZW1lbnRhbFN0cjJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlKiB0
aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFN
KHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgV2ViQ29yZTo6VGVz
dFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsU3RyMihpbXBsKSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKICNlbmRpZgogCiAj
aWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCitKU1ZhbHVlIGpz
VGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjNHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0SW50
ZXJmYWNlKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0
cjMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAt
NTczLDEyICs2NjUsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVu
dGFsU3RyMyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZQogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3RJbnRlcmZhY2UiLCAic3VwcGxlbWVudGFsU3RyMyIpOwogICAgIH0KLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPnN1cHBsZW1lbnRhbFN0cjMoKnN0YXRl
KSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50
YWxTdHIzR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0SW50
ZXJmYWNlU3VwcGxlbWVudGFsU3RyM0dldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRl
cmZhY2UqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVT
RURfUEFSQU0odGhpc09iamVjdCk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPnN1cHBsZW1lbnRh
bFN0cjMoKnN0YXRlKTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8
IEVOQUJMRShDb25kaXRpb24xMikKK0pTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFs
Tm9kZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RJbnRlcmZhY2UqKTsKKwogRW5jb2RlZEpTVmFs
dWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQog
ewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC01ODksOSArNjkwLDE2IEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGUoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAg
IHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0SW50ZXJmYWNlIiwgInN1
cHBsZW1lbnRhbE5vZGUiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxOb2Rl
KGltcGwpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2RlR2V0dGVyKHN0
YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVu
dGFsTm9kZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UqIHRoaXNPYmpl
Y3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09i
amVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBXZWJD
b3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxOb2RlKGltcGwpKTsKKyAgICByZXR1
cm4gcmVzdWx0OwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3Ry
dWN0b3IuY3BwCmluZGV4IDc5MzI2MWY2MTMyZDBlMGE4ZjE4MWUzY2NkNWNlYTViMGM3YzY0ZmIu
LjBkMmM0ZmY0YjZmNmJlZDhjMzA2YjRhZTA0ZGNlZDc3ZTljOWU3ZDQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25z
dHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcApAQCAtMTMyLDYgKzEzMiw4IEBAIHZvaWQg
SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiAg
ICAgdGhpc09iamVjdC0+SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I6On5KU1Rlc3RKU0J1aWx0
aW5Db25zdHJ1Y3RvcigpOwogfQogCitKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
VGVzdEF0dHJpYnV0ZUN1c3RvbUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RKU0J1aWx0aW5Db25z
dHJ1Y3RvciopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRl
c3RBdHRyaWJ1dGVDdXN0b20oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwpAQCAtMTQyLDEwICsxNDQsMTkgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0SlNC
dWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlQ3VzdG9tKEV4ZWNTdGF0ZSogc3RhdGUsIEUK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dl
dHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IiLCAidGVzdEF0
dHJpYnV0ZUN1c3RvbSIpOwogICAgIH0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3Rl
ZFRoaXMtPnRlc3RBdHRyaWJ1dGVDdXN0b20oKnN0YXRlKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVDdXN0b21HZXR0
ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5Db25z
dHJ1Y3RvclRlc3RBdHRyaWJ1dGVDdXN0b21HZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
SlNCdWlsdGluQ29uc3RydWN0b3IqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgcmV0dXJuIHRoaXNPYmpl
Y3QtPnRlc3RBdHRyaWJ1dGVDdXN0b20oKnN0YXRlKTsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdEpT
QnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tR2V0dGVyKEV4ZWNTdGF0ZSos
IEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEpT
QnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJh
c2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE1Niw3ICsxNjcsMTQgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0
b20oRXhlY1N0YXRlKiBzdGF0ZSwKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAg
ICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0SlNCdWlsdGlu
Q29uc3RydWN0b3IiLCAidGVzdEF0dHJpYnV0ZVJXQ3VzdG9tIik7CiAgICAgfQotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+dGVzdEF0dHJpYnV0ZVJXQ3VzdG9tKCpzdGF0
ZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0SlNCdWlsdGluQ29uc3RydWN0
b3JUZXN0QXR0cmlidXRlUldDdXN0b21HZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKwor
SlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3RvbUdl
dHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciogdGhpc09i
amVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlz
T2JqZWN0KTsKKyAgICByZXR1cm4gdGhpc09iamVjdC0+dGVzdEF0dHJpYnV0ZVJXQ3VzdG9tKCpz
dGF0ZSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCmluZGV4IDk3ZGFkNDUyM2EyNmFlNzVjYWM1NDg4MWIz
M2UyZjZhZDNhMTQ5M2EuLjUzOWY1OWNmODBkYmEyYjc0MjczZGQ2ZDE4YTc2OWNkOGM4NWMzYzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Tm9kZS5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcu
aCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSlNET01JdGVyYXRv
ci5oIgorI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiVVJMLmgiCiAj
aW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNTdHJpbmcuaD4K
QEAgLTQ5LDYgKzUwLDggQEAgYm9vbCBzZXRKU1Rlc3ROb2RlTmFtZShKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUKIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0Tm9kZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNPYmplY3QqKTsKIGJvb2wgc2V0SlNU
ZXN0Tm9kZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEV4ZWNTdGF0ZSopOworCiBjbGFzcyBKU1Rl
c3ROb2RlUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6
CiAgICAgdHlwZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKQEAgLTEwNyw2ICsxMTAs
NyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0Tm9kZVByb3RvdHlwZVRhYmxl
VmFsdWVzW10gPQogICAgIHsgImtleXMiLCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgeyAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE5vZGVQcm90b3R5cGVG
dW5jdGlvbktleXMpLCAoaW50cHRyX3QpICgwKSB9IH0sCiAgICAgeyAidmFsdWVzIiwgSlNDOjpG
dW5jdGlvbiwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0
aW9uPihqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25WYWx1ZXMpLCAoaW50cHRyX3QpICgwKSB9
IH0sCiAgICAgeyAiZm9yRWFjaCIsIEpTQzo6RnVuY3Rpb24sIE5vSW50cmluc2ljLCB7IChpbnRw
dHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0
aW9uRm9yRWFjaCksIChpbnRwdHJfdCkgKDEpIH0gfSwKKyAgICB7ICJ0b0pTT04iLCBKU0M6OkZ1
bmN0aW9uLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rp
b24+KGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTiksIChpbnRwdHJfdCkgKDApIH0g
fSwKIH07CiAKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3ROb2RlUHJvdG90eXBlOjpzX2luZm8gPSB7
ICJUZXN0Tm9kZVByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFC
TEUoSlNUZXN0Tm9kZVByb3RvdHlwZSkgfTsKQEAgLTEzNSw2ICsxMzksOCBAQCBKU09iamVjdCog
SlNUZXN0Tm9kZTo6cHJvdG90eXBlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKICAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdE5vZGU+KHZtLCBnbG9iYWxPYmpl
Y3QpOwogfQogCitKU1ZhbHVlIGpzVGVzdE5vZGVOYW1lR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVz
dE5vZGUqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9kZU5hbWUoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90
QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTQ1LDkgKzE1MSwxNiBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlTmFtZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcgogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
ICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3ROb2RlIiwg
Im5hbWUiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE5vZGVOYW1lR2V0dGVyKHN0YXRlLCBj
YXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0Tm9kZU5hbWVHZXR0ZXIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0Tm9kZSogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2Fj
aGUoc3RhdGUsIGltcGwubmFtZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCkBAIC0xOTMsNiArMjA2LDE5IEBAIEpTVmFs
dWUgSlNUZXN0Tm9kZTo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQogICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3ROb2Rl
Q29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFs
T2JqZWN0KSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVBy
b3RvdHlwZUZ1bmN0aW9uVG9KU09OKEV4ZWNTdGF0ZSogc3RhdGUpCit7CisgICAgYXV0byBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3ROb2RlKj4oc3RhdGUtPnRoaXNWYWx1ZSgpKTsK
KyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQorICAgICAgICByZXR1cm4gdGhyb3dUaGlz
VHlwZUVycm9yKCpzdGF0ZSwgIlRlc3ROb2RlIiwgInRvSlNPTiIpOworICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0Tm9kZTo6aW5mbygpKTsKKworICAgIGF1
dG8qIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KHN0YXRlKTsKKyAgICBWTSYgdm0gPSBz
dGF0ZS0+dm0oKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sICJuYW1lIiksIGpzVGVzdE5vZGVOYW1lR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlz
KSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCiB1c2luZyBUZXN0
Tm9kZUl0ZXJhdG9yID0gSlNET01JdGVyYXRvcjxKU1Rlc3ROb2RlPjsKIHVzaW5nIFRlc3ROb2Rl
SXRlcmF0b3JQcm90b3R5cGUgPSBKU0RPTUl0ZXJhdG9yUHJvdG90eXBlPEpTVGVzdE5vZGU+Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0Tm9uZGV0ZXJtaW5pc3RpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5jcHAKaW5kZXggNDIxZDk5NWVjMDM0ZmZl
OTJkNmRiOWI5MjQzZjZlOTViNjBkM2JjMi4uMzI2NmIxM2QyZWEzMDExYTE0ZjkwMTEyNmJlMTQ0
YjYxNDI0YTQwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmNwcApAQCAtMTQ0
LDYgKzE0NCw4IEBAIHZvaWQgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYzo6ZGVzdHJveShKU0M6OkpT
Q2VsbCogY2VsbCkKICAgICB0aGlzT2JqZWN0LT5KU1Rlc3ROb25kZXRlcm1pbmlzdGljOjp+SlNU
ZXN0Tm9uZGV0ZXJtaW5pc3RpYygpOwogfQogCitKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0
aWNOb25kZXRlcm1pbmlzdGljUmVhZG9ubHlBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE5v
bmRldGVybWluaXN0aWMqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3Rp
Y05vbmRldGVybWluaXN0aWNSZWFkb25seUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTU0LDE1ICsxNTYsMjIgQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNSZWFkb25seUF0dHIoRXhl
Y1N0YXRlKiBzdGEKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJl
dHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIs
ICJub25kZXRlcm1pbmlzdGljUmVhZG9ubHlBdHRyIik7CiAgICAgfQorICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNSZWFkb25s
eUF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3ROb25k
ZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5QXR0ckdldHRlcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOwogI2lmIEVOQUJM
RShXRUJfUkVQTEFZKQogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0ZS0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIElucHV0Q3Vyc29yJiBjdXJzb3IgPSBnbG9iYWxP
YmplY3QtPmlucHV0Q3Vyc29yKCk7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0
b21pY1N0cmluZz4gYmluZGluZ05hbWUoIlRlc3ROb25kZXRlcm1pbmlzdGljLm5vbmRldGVybWlu
aXN0aWNSZWFkb25seUF0dHIiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsK
ICAgICBpZiAoY3Vyc29yLmlzQ2FwdHVyaW5nKCkpIHsKLSAgICAgICAgaW50MzJfdCBtZW1vaXpl
ZFJlc3VsdCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKS5ub25kZXRlcm1pbmlzdGljUmVhZG9ubHlB
dHRyKCk7CisgICAgICAgIGludDMyX3QgbWVtb2l6ZWRSZXN1bHQgPSB0aGlzT2JqZWN0LT53cmFw
cGVkKCkubm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5QXR0cigpOwogICAgICAgICBjdXJzb3IuYXBw
ZW5kSW5wdXQ8TWVtb2l6ZWRET01SZXN1bHQ8aW50MzJfdD4+KGJpbmRpbmdOYW1lLmdldCgpLnN0
cmluZygpLCBtZW1vaXplZFJlc3VsdCwgMCk7CiAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNO
dW1iZXIobWVtb2l6ZWRSZXN1bHQpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgaWYgKGN1cnNvci5p
c1JlcGxheWluZygpKSB7CkBAIC0xNzAsMTYgKzE3OSwxOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5QXR0cihFeGVjU3RhdGUq
IHN0YQogICAgICAgICBNZW1vaXplZERPTVJlc3VsdEJhc2UqIGlucHV0ID0gY3Vyc29yLmZldGNo
SW5wdXQ8TWVtb2l6ZWRET01SZXN1bHRCYXNlPigpOwogICAgICAgICBpZiAoaW5wdXQgJiYgaW5w
dXQtPmNvbnZlcnRUbzxpbnQzMl90PihtZW1vaXplZFJlc3VsdCkpIHsKICAgICAgICAgICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNOdW1iZXIobWVtb2l6ZWRSZXN1bHQpOwotICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICAgICAgfQogICAgIH0KICNlbmRpZgotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwubm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5QXR0
cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlz
dGljV3JpdGVhYmxlQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGlj
Kik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlz
dGljV3JpdGVhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CkBAIC0xOTAsMTUgKzIwMSwyMiBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25k
ZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIoRXhlY1N0YXRlKiBzdAog
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0
dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3ROb25kZXRlcm1pbmlzdGljIiwgIm5vbmRldGVybWlu
aXN0aWNXcml0ZWFibGVBdHRyIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyR2V0dGVy
KHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3Rp
Y05vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE5vbmRldGVybWluaXN0aWMqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CiAjaWYgRU5BQkxFKFdFQl9SRVBM
QVkpCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRlLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCk7CiAgICAgSW5wdXRDdXJzb3ImIGN1cnNvciA9IGdsb2JhbE9iamVjdC0+aW5w
dXRDdXJzb3IoKTsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbWljU3RyaW5n
PiBiaW5kaW5nTmFtZSgiVGVzdE5vbmRldGVybWluaXN0aWMubm9uZGV0ZXJtaW5pc3RpY1dyaXRl
YWJsZUF0dHIiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICBpZiAo
Y3Vyc29yLmlzQ2FwdHVyaW5nKCkpIHsKLSAgICAgICAgU3RyaW5nIG1lbW9pemVkUmVzdWx0ID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpLm5vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyKCk7Cisg
ICAgICAgIFN0cmluZyBtZW1vaXplZFJlc3VsdCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5ub25k
ZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0cigpOwogICAgICAgICBjdXJzb3IuYXBwZW5kSW5wdXQ8
TWVtb2l6ZWRET01SZXN1bHQ8U3RyaW5nPj4oYmluZGluZ05hbWUuZ2V0KCkuc3RyaW5nKCksIG1l
bW9pemVkUmVzdWx0LCAwKTsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhD
YWNoZShzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgaWYgKGN1
cnNvci5pc1JlcGxheWluZygpKSB7CkBAIC0yMDYsMTYgKzIyNCwxOCBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIoRXhl
Y1N0YXRlKiBzdAogICAgICAgICBNZW1vaXplZERPTVJlc3VsdEJhc2UqIGlucHV0ID0gY3Vyc29y
LmZldGNoSW5wdXQ8TWVtb2l6ZWRET01SZXN1bHRCYXNlPigpOwogICAgICAgICBpZiAoaW5wdXQg
JiYgaW5wdXQtPmNvbnZlcnRUbzxTdHJpbmc+KG1lbW9pemVkUmVzdWx0KSkgewogICAgICAgICAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgbWVtb2l6ZWRSZXN1
bHQpOwotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgIH0KICNlbmRpZgotICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0
YXRlLCBpbXBsLm5vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyKCkpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFs
dWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNFeGNlcHRpb25BdHRyR2V0
dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE5vbmRldGVybWluaXN0aWMqKTsKKwogRW5jb2RlZEpTVmFs
dWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNFeGNlcHRpb25BdHRyKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBK
U09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTIyNiwx
NSArMjQ2LDIyIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRl
cm1pbmlzdGljRXhjZXB0aW9uQXR0cihFeGVjU3RhdGUqIHN0CiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRl
LCAiVGVzdE5vbmRldGVybWluaXN0aWMiLCAibm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHIi
KTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3ROb25kZXRlcm1pbmlz
dGljTm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMp
KTsKK30KKworSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0V4
Y2VwdGlvbkF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3Rp
YyogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9Q
QVJBTSh0aGlzT2JqZWN0KTsKICNpZiBFTkFCTEUoV0VCX1JFUExBWSkKICAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKICAgICBJ
bnB1dEN1cnNvciYgY3Vyc29yID0gZ2xvYmFsT2JqZWN0LT5pbnB1dEN1cnNvcigpOwogICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBBdG9taWNTdHJpbmc+IGJpbmRpbmdOYW1lKCJUZXN0
Tm9uZGV0ZXJtaW5pc3RpYy5ub25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0ciIsIEF0b21pY1N0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgIGlmIChjdXJzb3IuaXNDYXB0dXJpbmco
KSkgewotICAgICAgICBTdHJpbmcgbWVtb2l6ZWRSZXN1bHQgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCkubm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHIoKTsKKyAgICAgICAgU3RyaW5nIG1lbW9p
emVkUmVzdWx0ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLm5vbmRldGVybWluaXN0aWNFeGNlcHRp
b25BdHRyKCk7CiAgICAgICAgIGN1cnNvci5hcHBlbmRJbnB1dDxNZW1vaXplZERPTVJlc3VsdDxT
dHJpbmc+PihiaW5kaW5nTmFtZS5nZXQoKS5zdHJpbmcoKSwgbWVtb2l6ZWRSZXN1bHQsIDApOwog
ICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBtZW1vaXpl
ZFJlc3VsdCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBpZiAoY3Vyc29yLmlzUmVwbGF5aW5nKCkp
IHsKQEAgLTI0MiwxNiArMjY5LDE4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWlu
aXN0aWNOb25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0cihFeGVjU3RhdGUqIHN0CiAgICAgICAg
IE1lbW9pemVkRE9NUmVzdWx0QmFzZSogaW5wdXQgPSBjdXJzb3IuZmV0Y2hJbnB1dDxNZW1vaXpl
ZERPTVJlc3VsdEJhc2U+KCk7CiAgICAgICAgIGlmIChpbnB1dCAmJiBpbnB1dC0+Y29udmVydFRv
PFN0cmluZz4obWVtb2l6ZWRSZXN1bHQpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBtZW1vaXplZFJlc3VsdCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCi0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwubm9uZGV0ZXJt
aW5pc3RpY0V4Y2VwdGlvbkF0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1p
bmlzdGljTm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4Y2VwdGlvbkF0dHJHZXR0ZXIoRXhlY1N0YXRl
KiwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25k
ZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4Y2VwdGlvbkF0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0
KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjYyLDE3ICsyOTEs
MjQgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0
aWNHZXR0ZXJFeGNlcHRpb25BdHRyKEV4ZWNTdGEKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0
Tm9uZGV0ZXJtaW5pc3RpYyIsICJub25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0ciIp
OwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE5vbmRldGVybWluaXN0
aWNOb25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVk
VGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlz
dGljR2V0dGVyRXhjZXB0aW9uQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3ROb25k
ZXRlcm1pbmlzdGljKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwog
I2lmIEVOQUJMRShXRUJfUkVQTEFZKQogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIElucHV0Q3Vyc29yJiBjdXJzb3Ig
PSBnbG9iYWxPYmplY3QtPmlucHV0Q3Vyc29yKCk7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PGNvbnN0IEF0b21pY1N0cmluZz4gYmluZGluZ05hbWUoIlRlc3ROb25kZXRlcm1pbmlzdGljLm5v
bmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCk7CiAgICAgaWYgKGN1cnNvci5pc0NhcHR1cmluZygpKSB7Ci0gICAgICAg
IFN0cmluZyBtZW1vaXplZFJlc3VsdCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKS5ub25kZXRlcm1p
bmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0cihlYyk7CisgICAgICAgIFN0cmluZyBtZW1vaXplZFJl
c3VsdCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5ub25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0
aW9uQXR0cihlYyk7CiAgICAgICAgIGN1cnNvci5hcHBlbmRJbnB1dDxNZW1vaXplZERPTVJlc3Vs
dDxTdHJpbmc+PihiaW5kaW5nTmFtZS5nZXQoKS5zdHJpbmcoKSwgbWVtb2l6ZWRSZXN1bHQsIGVj
KTsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgbWVt
b2l6ZWRSZXN1bHQpOwogICAgICAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KIAogICAgIGlmIChjdXJzb3IuaXNSZXBsYXlpbmcoKSkgewpAQCAtMjgxLDE3ICsz
MTcsMTkgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWlu
aXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyKEV4ZWNTdGEKICAgICAgICAgaWYgKGlucHV0ICYmIGlu
cHV0LT5jb252ZXJ0VG88U3RyaW5nPihtZW1vaXplZFJlc3VsdCkpIHsKICAgICAgICAgICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIG1lbW9pemVkUmVzdWx0KTsK
ICAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgaW5wdXQtPmV4Y2VwdGlvbkNvZGUo
KSk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCi0gICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3Rh
dGUsIGltcGwubm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4Y2VwdGlvbkF0dHIoZWMpKTsKICAgICBz
ZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE5vbmRldGVy
bWluaXN0aWNOb25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0ckdldHRlcihFeGVjU3Rh
dGUqLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5v
bmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0cihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmpl
Y3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0zMDIsMTUgKzM0
MCwyMiBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5p
c3RpY1NldHRlckV4Y2VwdGlvbkF0dHIoRXhlY1N0YQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRl
c3ROb25kZXRlcm1pbmlzdGljIiwgIm5vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRy
Iik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0Tm9uZGV0ZXJtaW5p
c3RpY05vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyR2V0dGVyKHN0YXRlLCBjYXN0
ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWlu
aXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE5v
bmRldGVybWluaXN0aWMqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
KyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CiAjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCiAg
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRlLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCk7CiAgICAgSW5wdXRDdXJzb3ImIGN1cnNvciA9IGdsb2JhbE9iamVjdC0+aW5wdXRDdXJz
b3IoKTsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbWljU3RyaW5nPiBiaW5k
aW5nTmFtZSgiVGVzdE5vbmRldGVybWluaXN0aWMubm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2Vw
dGlvbkF0dHIiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICBpZiAo
Y3Vyc29yLmlzQ2FwdHVyaW5nKCkpIHsKLSAgICAgICAgU3RyaW5nIG1lbW9pemVkUmVzdWx0ID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpLm5vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRy
KCk7CisgICAgICAgIFN0cmluZyBtZW1vaXplZFJlc3VsdCA9IHRoaXNPYmplY3QtPndyYXBwZWQo
KS5ub25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0cigpOwogICAgICAgICBjdXJzb3Iu
YXBwZW5kSW5wdXQ8TWVtb2l6ZWRET01SZXN1bHQ8U3RyaW5nPj4oYmluZGluZ05hbWUuZ2V0KCku
c3RyaW5nKCksIG1lbW9pemVkUmVzdWx0LCAwKTsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBq
c1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOwotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQog
CiAgICAgaWYgKGN1cnNvci5pc1JlcGxheWluZygpKSB7CkBAIC0zMTgsMTMgKzM2MywxMyBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1NldHRl
ckV4Y2VwdGlvbkF0dHIoRXhlY1N0YQogICAgICAgICBNZW1vaXplZERPTVJlc3VsdEJhc2UqIGlu
cHV0ID0gY3Vyc29yLmZldGNoSW5wdXQ8TWVtb2l6ZWRET01SZXN1bHRCYXNlPigpOwogICAgICAg
ICBpZiAoaW5wdXQgJiYgaW5wdXQtPmNvbnZlcnRUbzxTdHJpbmc+KG1lbW9pemVkUmVzdWx0KSkg
ewogICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwg
bWVtb2l6ZWRSZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgIH0KICNlbmRp
ZgotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5n
V2l0aENhY2hlKHN0YXRlLCBpbXBsLm5vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRy
KCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE9iai5jcHAKaW5kZXggYjNmZmQyYmNjZjA1ODYxZDUxZDY4MjZjZDU3MTc0
ZmQ0N2ZjOWJhNi4uMjBjMWQwYjE5MGIyMmYyZDJjZDEyOTEyNDVlZTFlNWNiNjQwOTFmNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9i
ai5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHAKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJKU1Rlc3RTdWJPYmouaCIKICNp
bmNsdWRlICJKU1hQYXRoTlNSZXNvbHZlci5oIgogI2luY2x1ZGUgIkxpZmVjeWNsZUNhbGxiYWNr
UXVldWUuaCIKKyNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlJ1bnRp
bWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTVkdEb2N1bWVudC5oIgogI2luY2x1ZGUg
IlNWR1BvaW50LmgiCkBAIC04ODAsNiArODgxLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpQdXRGb3J3
YXJkc051bGxhYmxlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWwK
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU09iamVjdCop
OwogYm9vbCBzZXRKU1Rlc3RPYmpDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogCitFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEV4ZWNTdGF0ZSopOwor
CiBjbGFzcyBKU1Rlc3RPYmpQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0
IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwpAQCAt
MTI5OSw2ICsxMzAyLDcgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE9ialBy
b3RvdHlwZVRhYmxlVmFsdWVzW10gPQogICAgIHsgIkNPTlNUX1ZBTFVFXzE0IiwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5IHwgQ29uc3RhbnRJbnRlZ2VyLCBOb0ludHJpbnNpYywgeyAobG9uZyBsb25n
KSgweDFhYmMpIH0gfSwKICAgICB7ICJDT05TVF9KQVZBU0NSSVBUIiwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5IHwgQ29uc3RhbnRJbnRlZ2VyLCBOb0ludHJpbnNpYywgeyAobG9uZyBsb25nKSgxNSkg
fSB9LAogICAgIHsgInJlYWRvbmx5IiwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgQ29uc3RhbnRJ
bnRlZ2VyLCBOb0ludHJpbnNpYywgeyAobG9uZyBsb25nKSgwKSB9IH0sCisgICAgeyAidG9KU09O
IiwgSlNDOjpGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PE5h
dGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvSlNPTiksIChpbnRwdHJf
dCkgKDApIH0gfSwKIH07CiAKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RPYmpQcm90b3R5cGU6OnNf
aW5mbyA9IHsgIlRlc3RPYmplY3RQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEpTVGVzdE9ialByb3RvdHlwZSkgfTsKQEAgLTEzNzUsNiArMTM3OSw4IEBA
IGJvb2wgSlNUZXN0T2JqOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuCiAgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5
U2xvdEJ5SW5kZXgodGhpc09iamVjdCwgc3RhdGUsIGluZGV4LCBzbG90KTsKIH0KIAorSlNWYWx1
ZSBqc1Rlc3RPYmpSZWFkT25seUxvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiop
OworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seUxvbmdBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCog
c2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTEzODUsMTIgKzEzOTEs
MjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlMb25nQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmEKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0
T2JqIiwgInJlYWRPbmx5TG9uZ0F0dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialJl
YWRPbmx5TG9uZ0F0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBq
c1Rlc3RPYmpSZWFkT25seUxvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9i
aiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9Q
QVJBTSh0aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgp
OwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5yZWFkT25seUxvbmdBdHRyKCkp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0
OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlTdHJpbmdBdHRyR2V0dGVyKEV4ZWNT
dGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVN0
cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwpAQCAtMTQwMSwxMiArMTQxNiwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25s
eVN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpcwogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlw
ZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVhZE9ubHlTdHJpbmdBdHRyIik7CiAgICAgfQot
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1Rlc3RPYmpSZWFkT25seVN0cmluZ0F0dHJHZXR0ZXIoc3RhdGUsIGNhc3Rl
ZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVN0cmluZ0F0dHJHZXR0ZXIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmlu
Z1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5yZWFkT25seVN0cmluZ0F0dHIoKSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNW
YWx1ZSBqc1Rlc3RPYmpSZWFkT25seVRlc3RPYmpBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVRlc3RPYmpBdHRyKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBK
U09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE0MTcs
MzIgKzE0NDEsNTkgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlUZXN0T2JqQXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGkKICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3Rh
dGUsICJUZXN0T2JqIiwgInJlYWRPbmx5VGVzdE9iakF0dHIiKTsKICAgICB9Ci0gICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMo
c3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnJlYWRPbmx5VGVzdE9iakF0
dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqUmVhZE9ubHlUZXN0T2JqQXR0ckdldHRlcihzdGF0ZSwg
Y2FzdGVkVGhpcykpOwogfQogCitKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5VGVzdE9iakF0dHJH
ZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0
b0pTKHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgaW1wbC5yZWFkT25seVRlc3RP
YmpBdHRyKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKworSlNWYWx1ZSBqc1Rlc3RPYmpD
b25zdHJ1Y3RvclN0YXRpY1JlYWRPbmx5TG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0
T2JqKik7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljUmVhZE9u
bHlMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNsb3RC
YXNlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakNvbnN0cnVjdG9yU3Rh
dGljUmVhZE9ubHlMb25nQXR0ckdldHRlcihzdGF0ZSwgbnVsbHB0cikpOworfQorCitKU1ZhbHVl
IGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljUmVhZE9ubHlMb25nQXR0ckdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CiAgICAgSlNWYWx1ZSByZXN1bHQg
PSBqc051bWJlcihUZXN0T2JqOjpzdGF0aWNSZWFkT25seUxvbmdBdHRyKCkpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pT
VmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0
ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0
YXRpY1N0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShz
bG90QmFzZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpDb25zdHJ1Y3Rv
clN0YXRpY1N0cmluZ0F0dHJHZXR0ZXIoc3RhdGUsIG51bGxwdHIpKTsKK30KKworSlNWYWx1ZSBq
c1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJp
bmdXaXRoQ2FjaGUoc3RhdGUsIFRlc3RPYmo6OnN0YXRpY1N0cmluZ0F0dHIoKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAor
SlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclRlc3RTdWJPYmpHZXR0ZXIoRXhlY1N0YXRlKiwg
SlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yVGVzdFN1
Yk9iaihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBA
IC0xNDUzLDEwICsxNTA0LDE5IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9y
VGVzdFN1Yk9iaihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0CiAgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJy
b3IoKnN0YXRlLCAiVGVzdE9iaiIsICJUZXN0U3ViT2JqIik7CiAgICAgfQotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNUZXN0U3ViT2JqOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwg
Y2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVGVzdE9iakNvbnN0cnVjdG9yVGVzdFN1Yk9iakdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykp
OworfQorCitKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yVGVzdFN1Yk9iakdldHRlcihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgcmV0dXJuIEpTVGVz
dFN1Yk9iajo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIHRoaXNPYmplY3QtPmdsb2JhbE9i
amVjdCgpKTsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialRlc3RTdWJPYmpFbmFibGVkQnlTZXR0
aW5nQ29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpT
T2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTQ2Nywx
NSArMTUyNywyNCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0U3ViT2JqRW5hYmxlZEJ5
U2V0dGluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsCiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRl
LCAiVGVzdE9iaiIsICJUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZyIpOwogICAgIH0KLSAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMtPndyYXBwZWQoKS5mcmFtZSgpKSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBTZXR0aW5ncyYgc2V0dGlu
Z3MgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCkuZnJhbWUoKS0+c2V0dGluZ3MoKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nQ29u
c3RydWN0b3JHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RP
YmpUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBpZiAoVU5MSUtFTFkoIXRoaXNP
YmplY3QtPndyYXBwZWQoKS5mcmFtZSgpKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CisgICAgU2V0dGluZ3MmIHNldHRpbmdzID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLmZyYW1lKCkt
PnNldHRpbmdzKCk7CiAgICAgaWYgKCFzZXR0aW5ncy50ZXN0U2V0dGluZ0VuYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdFN1Yk9iajo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCks
IGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOworICAgIHJldHVybiBKU1Rlc3RTdWJPYmo6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgp
LCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSk7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpF
bnVtQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqRW51bUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwpAQCAtMTQ4NiwxMiArMTU1NSwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpFbnVtQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
bwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93
R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiZW51bUF0dHIiKTsKICAgICB9Ci0g
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVGVzdE9iakVudW1BdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9
CisKK0pTVmFsdWUganNUZXN0T2JqRW51bUF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5V
U0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFw
cGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1w
bC5lbnVtQXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iakJ5dGVBdHRyR2V0dGVyKEV4
ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpCeXRlQXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0x
NTAyLDEyICsxNTgwLDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakJ5dGVBdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvCiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3Io
KnN0YXRlLCAiVGVzdE9iaiIsICJieXRlQXR0ciIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0
T2JqQnl0ZUF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rl
c3RPYmpCeXRlQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmpl
Y3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09i
amVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1Zh
bHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuYnl0ZUF0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBq
c1Rlc3RPYmpPY3RldEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9iak9jdGV0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xNTE4LDEyICsxNjA1LDIxIEBAIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iak9jdGV0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBy
ZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJvY3RldEF0dHIi
KTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iak9jdGV0QXR0ckdldHRlcihzdGF0ZSwgY2Fz
dGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iak9jdGV0QXR0ckdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwu
b2N0ZXRBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqU2hvcnRBdHRyR2V0dGVyKEV4
ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTaG9ydEF0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAt
MTUzNCwxMiArMTYzMCwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTaG9ydEF0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcgogICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9y
KCpzdGF0ZSwgIlRlc3RPYmoiLCAic2hvcnRBdHRyIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rl
c3RPYmpTaG9ydEF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBq
c1Rlc3RPYmpTaG9ydEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlz
T2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRo
aXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAg
SlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLnNob3J0QXR0cigpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1Zh
bHVlIGpzVGVzdE9iakNsYW1wZWRTaG9ydEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2Jq
Kik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNsYW1wZWRTaG9ydEF0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0
KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTU1MCwxMiArMTY1
NSwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRl
c3RPYmoiLCAiY2xhbXBlZFNob3J0QXR0ciIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2Jq
Q2xhbXBlZFNob3J0QXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVl
IGpzVGVzdE9iakNsYW1wZWRTaG9ydEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VE
X1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVk
KCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmNsYW1wZWRTaG9ydEF0dHIo
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHJHZXR0ZXIo
RXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakVuZm9y
Y2VSYW5nZVNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CkBAIC0xNTY2LDEyICsxNjgwLDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
akVuZm9yY2VSYW5nZVNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dH
ZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJlbmZvcmNlUmFuZ2VTaG9ydEF0dHIi
KTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakVuZm9yY2VSYW5nZVNob3J0QXR0ckdldHRl
cihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iakVuZm9yY2VSYW5n
ZVNob3J0QXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3Qp
Cit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVj
dCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuZW5mb3JjZVJhbmdlU2hvcnRBdHRyKCkpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAK
K0pTVmFsdWUganNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNU
ZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBK
U09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE1ODIs
MTIgKzE3MDUsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1YKICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3Rh
dGUsICJUZXN0T2JqIiwgInVuc2lnbmVkU2hvcnRBdHRyIik7CiAgICAgfQotICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQor
CitKU1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwor
ICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC51bnNpZ25l
ZFNob3J0QXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iakxvbmdBdHRyR2V0dGVyKEV4
ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpMb25nQXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0x
NTk4LDEyICsxNzMwLDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakxvbmdBdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvCiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3Io
KnN0YXRlLCAiVGVzdE9iaiIsICJsb25nQXR0ciIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0
T2JqTG9uZ0F0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rl
c3RPYmpMb25nQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmpl
Y3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09i
amVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1Zh
bHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwubG9uZ0F0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBq
c1Rlc3RPYmpMb25nTG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9iakxvbmdMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQog
ewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xNjE0LDEyICsxNzU1LDIxIEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9iakxvbmdMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAg
ICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJsb25n
TG9uZ0F0dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakxvbmdMb25nQXR0ckdldHRl
cihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iakxvbmdMb25nQXR0
ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzTnVtYmVyKGltcGwubG9uZ0xvbmdBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2Jq
VW5zaWduZWRMb25nTG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xv
dEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE2MzAsMTIgKzE3ODAsMjEg
QEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGgKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2Jq
IiwgInVuc2lnbmVkTG9uZ0xvbmdBdHRyIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpV
bnNpZ25lZExvbmdMb25nQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1Zh
bHVlIGpzVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAg
IFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+
d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC51bnNpZ25lZExv
bmdMb25nQXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJHZXR0ZXIo
RXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmlu
Z0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpA
QCAtMTY0NiwxMiArMTgwNSwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRy
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUAogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVy
cm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAic3RyaW5nQXR0ciIpOwogICAgIH0KLSAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNUZXN0T2JqU3RyaW5nQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1Zh
bHVlIGpzVGVzdE9ialN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2Jq
KiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BB
UkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7
CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5zdHJp
bmdBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1
cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqVGVzdE9iakF0dHJHZXR0ZXIoRXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialRlc3RPYmpB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAg
LTE2NjIsMTEgKzE4MzAsMjAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVGVzdE9iakF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLAogICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9y
KCpzdGF0ZSwgIlRlc3RPYmoiLCAidGVzdE9iakF0dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3Rh
dGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnRlc3RPYmpBdHRyKCkpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVGVzdE9ialRlc3RPYmpBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7CiB9CiAK
K0pTVmFsdWUganNUZXN0T2JqVGVzdE9iakF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5V
U0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFw
cGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9i
YWxPYmplY3QoKSwgaW1wbC50ZXN0T2JqQXR0cigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CisKK0pTVmFsdWUganNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0ckdldHRlcihFeGVjU3RhdGUq
LCBKU1Rlc3RPYmoqKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVGVzdE51bGxhYmxlT2Jq
QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewpAQCAtMTY3OCwxMiArMTg1NSwyMSBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAg
ICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAidGVz
dE51bGxhYmxlT2JqQXR0ciIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+
Z2xvYmFsT2JqZWN0KCksIGltcGwudGVzdE51bGxhYmxlT2JqQXR0cigpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rl
c3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisK
K0pTVmFsdWUganNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
KyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3QtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIHRoaXNPYmpl
Y3QtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnRlc3ROdWxsYWJsZU9iakF0dHIoKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iakxlbmllbnRUZXN0T2JqQXR0ckdl
dHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
TGVuaWVudFRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKQEAgLTE2OTQsMTIgKzE4ODAsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqTGVuaWVudFRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXMKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5sZW5pZW50VGVzdE9iakF0dHIoKSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7
Cit9CisKK0pTVmFsdWUganNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyR2V0dGVyKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgdGhp
c09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIGltcGwubGVuaWVudFRlc3RPYmpBdHRyKCkpOworICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpVbmZvcmdlYWJsZUF0dHJH
ZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alVuZm9yZ2VhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CkBAIC0xNzEwLDEyICsxOTA1LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alVuZm9yZ2VhYmxlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dH
ZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ1bmZvcmdlYWJsZUF0dHIiKTsKICAg
ICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialVuZm9yZ2VhYmxlQXR0ckdldHRlcihzdGF0ZSwgY2Fz
dGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9ialVuZm9yZ2VhYmxlQXR0ckdldHRlcihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5n
V2l0aENhY2hlKHN0YXRlLCBpbXBsLnVuZm9yZ2VhYmxlQXR0cigpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVl
IGpzVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nR2V0dGVyKEV4ZWNT
dGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRy
VHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xNzI2LDEyICsxOTMwLDIxIEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1
cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJzdHJpbmdBdHRyVHJl
YXRpbmdOdWxsQXNFbXB0eVN0cmluZyIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqU3Ry
aW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMp
KTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0
cmluZ0dldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7Cisg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnN0cmluZ0F0dHJUcmVhdGluZ051bGxB
c0VtcHR5U3RyaW5nKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqWE1MT2JqQXR0ckdldHRl
cihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqWE1M
T2JqQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CkBAIC0xNzQyLDEyICsxOTU1LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialhNTE9iakF0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQCiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBl
RXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJYTUxPYmpBdHRyIik7CiAgICAgfQotICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pT
KHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC54bWxPYmpBdHRyKCkpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVGVzdE9ialhNTE9iakF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30K
KworSlNWYWx1ZSBqc1Rlc3RPYmpYTUxPYmpBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVO
VVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3Jh
cHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgdGhpc09iamVjdC0+Z2xv
YmFsT2JqZWN0KCksIGltcGwueG1sT2JqQXR0cigpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
CiAKK0pTVmFsdWUganNUZXN0T2JqQ3JlYXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiop
OworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDcmVhdGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkK
IHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTc1OCwxMiArMTk4MCwyMSBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDcmVhdGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAg
ICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiY3Jl
YXRlIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpDcmVhdGVHZXR0ZXIoc3RhdGUsIGNh
c3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpDcmVhdGVHZXR0ZXIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4oaW1wbC5p
c0NyZWF0ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJH
ZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alJlZmxlY3RlZFN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwpAQCAtMTc3NCwxMiArMjAwNSwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRo
cm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVmbGVjdGVkU3RyaW5nQXR0
ciIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckdldHRl
cihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0
cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQor
eworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3Qp
OworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5mYXN0R2V0QXR0cmlidXRlKFdl
YkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkc3RyaW5nYXR0ckF0dHIpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1Zh
bHVlIGpzVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rl
c3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRy
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
LCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE3
OTAsMTIgKzIwMzAsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkSW50ZWdy
YWxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHQKICAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigq
c3RhdGUsICJUZXN0T2JqIiwgInJlZmxlY3RlZEludGVncmFsQXR0ciIpOwogICAgIH0KLSAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRU
aGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyR2V0dGVy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1i
ZXIoaW1wbC5nZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3Rl
ZGludGVncmFsYXR0ckF0dHIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVu
c2lnbmVkSW50ZWdyYWxBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0cihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmpl
Y3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xODA2LDEyICsy
MDU1LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdy
YWxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAi
VGVzdE9iaiIsICJyZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ciIpOwogICAgIH0KLSAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHJHZXR0ZXIoc3RhdGUs
IGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZElu
dGVncmFsQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3Qp
Cit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVj
dCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzTnVtYmVyKHN0ZDo6bWF4KDAsIGltcGwuZ2V0SW50ZWdyYWxBdHRyaWJ1dGUo
V2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1bnNpZ25lZGludGVncmFsYXR0ckF0dHIpKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0ckdldHRlcihFeGVj
U3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVk
Qm9vbGVhbkF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwpAQCAtMTgyMiwxMiArMjA4MCwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZs
ZWN0ZWRCb29sZWFuQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aAogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVy
VHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVmbGVjdGVkQm9vbGVhbkF0dHIiKTsKICAg
ICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyR2V0dGVyKHN0YXRl
LCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0
dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQg
PSBqc0Jvb2xlYW4oaW1wbC5mYXN0SGFzQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVm
bGVjdGVkYm9vbGVhbmF0dHJBdHRyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0
ZWRVUkxBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE4MzgsMTIgKzIxMDUsMjEgQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmEKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJl
dHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJlZmxlY3RlZFVS
TEF0dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialJlZmxlY3RlZFVSTEF0dHJHZXR0
ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRV
UkxBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sK
KyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsK
KyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVz
dWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuZ2V0VVJMQXR0cmlidXRlKFdlYkNv
cmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXJsYXR0ckF0dHIpKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpz
VGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7
CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0
KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTg1NCwxMiArMjEz
MCwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRl
c3RPYmoiLCAicmVmbGVjdGVkU3RyaW5nQXR0ciIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0
T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitK
U1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0
ZSwgaW1wbC5mYXN0R2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVu
dFN0cmluZ0F0dHJBdHRyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwor
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0
b21JbnRlZ3JhbEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNs
b3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xODcwLDEyICsyMTU1LDIx
IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0cihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9i
aiIsICJyZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VGVzdE9ialJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhp
cykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0ckdl
dHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
TnVtYmVyKGltcGwuZ2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0
b21Db250ZW50SW50ZWdyYWxBdHRyQXR0cikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqUmVm
bGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisK
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09i
amVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE4ODYsMTIg
KzIxODAsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVh
bkF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmEKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUs
ICJUZXN0T2JqIiwgInJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyIik7CiAgICAgfQotICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0ckdldHRlcihzdGF0ZSwgY2Fz
dGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJvb2xlYW5B
dHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNCb29sZWFuKGltcGwuZmFzdEhhc0F0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1
c3RvbUNvbnRlbnRCb29sZWFuQXR0ckF0dHIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialJl
ZmxlY3RlZEN1c3RvbVVSTEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBz
bG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTkwMiwxMyArMjIwNSwy
MiBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9i
aiIsICJyZWZsZWN0ZWRDdXN0b21VUkxBdHRyIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RP
YmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisK
K0pTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0ckdldHRlcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hl
KHN0YXRlLCBpbXBsLmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNv
bnRlbnRVUkxBdHRyQXR0cikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKICNpZiBFTkFCTEUoVEVTVF9GRUFUVVJFKQorSlNW
YWx1ZSBqc1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpFbmFibGVkQXRSdW50aW1l
QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKQEAgLTE5MTksMTMgKzIyMzEsMjIgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqRW5hYmxl
ZEF0UnVudGltZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWwKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5
cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUiKTsK
ICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVHZXR0
ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpFbmFibGVkQXRS
dW50aW1lQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09i
amVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlz
T2JqZWN0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuZW5hYmxlZEF0UnVu
dGltZUF0dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2VuZGlmCiAKK0pTVmFsdWUganNUZXN0T2JqVHlwZWRB
cnJheUF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialR5cGVkQXJyYXlBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE5MzYsMTIgKzIyNTcsMjEgQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqVHlwZWRBcnJheUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHUKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVy
biB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInR5cGVkQXJyYXlBdHRy
Iik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAg
SlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
aW1wbC50eXBlZEFycmF5QXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpUeXBlZEFycmF5QXR0ckdl
dHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9ialR5cGVkQXJy
YXlBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sK
KyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsK
KyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVz
dWx0ID0gdG9KUyhzdGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIGltcGwudHlwZWRB
cnJheUF0dHIoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9i
akF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOwor
CiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmpl
Y3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xOTUyLDE0ICsy
MjgyLDIzIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJXaXRoR2V0dGVyRXhjZXB0aW9u
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAi
VGVzdE9iaiIsICJhdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOwogICAgIH0KKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uR2V0dGVyKHN0
YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqQXR0cldpdGhHZXR0ZXJF
eGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQor
eworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3Qp
OwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuYXR0cldpdGhHZXR0ZXJFeGNlcHRpb24o
ZWMpKTsKICAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpz
VGVzdE9iakF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uV2l0aE1lc3NhZ2VHZXR0ZXIoRXhlY1N0YXRl
KiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJXaXRoR2V0dGVy
RXhjZXB0aW9uV2l0aE1lc3NhZ2UoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwpAQCAtMTk3MCwxNCArMjMwOSwyMyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuYwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRo
cm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiYXR0cldpdGhHZXR0ZXJFeGNl
cHRpb25XaXRoTWVzc2FnZSIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VGVzdE9iakF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uV2l0aE1lc3NhZ2VHZXR0ZXIoc3RhdGUsIGNh
c3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlv
bldpdGhNZXNzYWdlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVj
dCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2Jq
ZWN0KTsKICAgICBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UgZWM7Ci0gICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3Jh
cHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5hdHRyV2l0aEdldHRl
ckV4Y2VwdGlvbldpdGhNZXNzYWdlKGVjKSk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBl
Yyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkdldHRl
cihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQXR0
cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwpAQCAtMTk4OCwxMiArMjMzNiwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRo
cm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiYXR0cldpdGhTZXR0ZXJFeGNl
cHRpb24iKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0
aW9uR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqQXR0
cldpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0
aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFN
KHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmF0dHJXaXRoU2V0dGVyRXhjZXB0aW9u
KCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25XaXRo
TWVzc2FnZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25XaXRoTWVzc2FnZShFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNs
b3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMDA0LDEyICsyMzYxLDIx
IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uV2l0aE1l
c3NhZ2UoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9i
aiIsICJhdHRyV2l0aFNldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlIik7CiAgICAgfQotICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1Rlc3RPYmpBdHRyV2l0aFNldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlR2V0dGVyKHN0
YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqQXR0cldpdGhTZXR0ZXJF
eGNlcHRpb25XaXRoTWVzc2FnZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRo
aXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0o
dGhpc09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuYXR0cldpdGhTZXR0ZXJFeGNlcHRpb25X
aXRoTWVzc2FnZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0
dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNs
b3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMDIwLDE0ICsyMzg2LDIz
IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9u
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9i
aiIsICJzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOwogICAgIH0KKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uR2V0
dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0
cldpdGhHZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0
aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFN
KHRoaXNPYmplY3QpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndy
YXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBp
bXBsLnN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVjKSk7CiAgICAgc2V0RE9NRXhjZXB0
aW9uKHN0YXRlLCBlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aFNl
dHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBz
bG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjAzOCwxMiArMjQxMywy
MSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlv
bihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSgogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RP
YmoiLCAic3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24iKTsKICAgICB9Ci0gICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVGVzdE9ialN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uR2V0dGVyKHN0YXRlLCBjYXN0
ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNl
cHRpb25HZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQorewor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOwor
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1
bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5zdHJpbmdBdHRyV2l0aFNldHRlckV4
Y2VwdGlvbigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialN0cmljdFR5cGVDaGVja2luZ0F0
dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqU3RyaWN0VHlwZUNoZWNraW5nQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2Up
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTIwNTQsMTIgKzI0MzgsMjEgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaWN0VHlwZUNoZWNraW5nQXR0cmlidXRlKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1YKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAg
ICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInN0
cmljdFR5cGVDaGVja2luZ0F0dHJpYnV0ZSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2Fz
dGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwuc3RyaWN0VHlwZUNoZWNraW5nQXR0cmlidXRl
KCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialN0cmljdFR5cGVDaGVja2luZ0F0dHJpYnV0ZUdldHRlcihz
dGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9ialN0cmljdFR5cGVDaGVj
a2luZ0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmpl
Y3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09i
amVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBpbXBs
LnN0cmljdFR5cGVDaGVja2luZ0F0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
CiAKK0pTVmFsdWUganNUZXN0T2JqQ3VzdG9tQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RP
YmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ3VzdG9tQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNs
b3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMDcwLDEwICsyNDYzLDE5
IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakN1c3RvbUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9i
aiIsICJjdXN0b21BdHRyIik7CiAgICAgfQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2Fz
dGVkVGhpcy0+Y3VzdG9tQXR0cigqc3RhdGUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVGVzdE9iakN1c3RvbUF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNW
YWx1ZSBqc1Rlc3RPYmpDdXN0b21BdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9i
aiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9Q
QVJBTSh0aGlzT2JqZWN0KTsKKyAgICByZXR1cm4gdGhpc09iamVjdC0+Y3VzdG9tQXR0cigqc3Rh
dGUpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqT25mb29HZXR0ZXIoRXhlY1N0YXRlKiwgSlNU
ZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak9uZm9vKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xv
dEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTIwODQsMTEgKzI0ODYsMjAg
QEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqT25mb28oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXIKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2Jq
IiwgIm9uZm9vIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2Jq
T25mb29HZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpP
bmZvb0dldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGV2ZW50
SGFuZGxlckF0dHJpYnV0ZShjYXN0ZWRUaGlzLT53cmFwcGVkKCksIGV2ZW50TmFtZXMoKS5mb29F
dmVudCkpOworICAgIHJldHVybiBldmVudEhhbmRsZXJBdHRyaWJ1dGUodGhpc09iamVjdC0+d3Jh
cHBlZCgpLCBldmVudE5hbWVzKCkuZm9vRXZlbnQpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2Jq
T253ZWJraXRmb29HZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iak9ud2Via2l0Zm9vKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKQEAgLTIwOTksMTEgKzI1MTAsMjAgQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqT253ZWJraXRmb28oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJu
IHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAib253ZWJraXRmb28iKTsK
ICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpPbndlYmtpdGZvb0dl
dHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iak9ud2Via2l0
Zm9vR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZXZlbnRI
YW5kbGVyQXR0cmlidXRlKGNhc3RlZFRoaXMtPndyYXBwZWQoKSwgZXZlbnROYW1lcygpLmZvb0V2
ZW50KSk7CisgICAgcmV0dXJuIGV2ZW50SGFuZGxlckF0dHJpYnV0ZSh0aGlzT2JqZWN0LT53cmFw
cGVkKCksIGV2ZW50TmFtZXMoKS5mb29FdmVudCk7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpX
aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisK
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZShFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmpl
Y3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMTE0LDEyICsy
NTM0LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0
ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAi
VGVzdE9iaiIsICJ3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUiKTsKICAgICB9Ci0gICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhp
cykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZUdldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVt
YmVyKGltcGwud2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKCpzdGF0ZSkpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFs
dWUganNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGVHZXR0ZXIo
RXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhD
YWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTIxMzAsMTIgKzI1NTksMjEgQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUo
RXhlY1N0YXRlKiBzdGF0ZSwKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAg
ICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIndpdGhD
YWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlIik7CiAgICAgfQotICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZUdldHRlcihzdGF0
ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNl
dHRlckNhbGxXaXRoQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiog
dGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJB
TSh0aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwog
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC53aXRoQ2FsbFdpdGhBbmRTZXR0ZXJD
YWxsV2l0aEF0dHJpYnV0ZSgqc3RhdGUpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialdpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9i
aiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CkBAIC0yMTQ2LDE1ICsyNTg0LDI0IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuCiAgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJU
eXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0
dHJpYnV0ZSIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialdp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlz
KSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRy
aWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQorewor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOwog
ICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICgh
Y29udGV4dCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
LSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVz
dWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUoKmNvbnRleHQpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQg
PSB0b0pTKHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZSgqY29udGV4dCkpOworICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNH
ZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
aldpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMTY1LDE0ICsyNjEyLDIzIEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAg
ICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2Ny
aXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNHZXR0ZXIoc3RhdGUs
IGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRy
aWJ1dGVSYWlzZXNHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0
KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmpl
Y3QpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMo
KnN0YXRlLCBlYykpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Cisg
ICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3Qo
KSwgaW1wbC53aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoKnN0YXRlLCBlYykpOwogICAg
IHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqV2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXNHZXR0ZXIoRXhlY1N0YXRlKiwg
SlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRp
b25Db250ZXh0QXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKQEAgLTIxODMsMTcgKzI2MzksMjYgQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0
YXRlKiBzdGEKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVy
biB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlz
ZXNHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpXaXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlc0dldHRlcihFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
KyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CiAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYg
KCFjb250ZXh0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcygqY29udGV4dCwgZWMpKTsKKyAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qt
PndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIHRoaXNPYmplY3Qt
Pmdsb2JhbE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRl
UmFpc2VzKCpjb250ZXh0LCBlYykpOwogICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0Owog
fQogCiAKK0pTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3Jp
cHRTdGF0ZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0
ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CkBAIC0yMjA0LDE1ICsyNjY5LDI0IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUoRXhlY1N0CiAgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJU
eXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFu
ZFNjcmlwdFN0YXRlQXR0cmlidXRlIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJp
YnV0ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9ialdp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVHZXR0ZXIoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOwogICAgIGF1dG8qIGNvbnRl
eHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghY29udGV4dCkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0
ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZSgqc3RhdGUsICpjb250ZXh0KSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUg
cmVzdWx0ID0gdG9KUyhzdGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZSgqc3RhdGUsICpj
b250ZXh0KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialdp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNHZXR0
ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpT
T2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjIyMywx
NyArMjY5NywyNiBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKAogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0
ZSwgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0
dHJpYnV0ZVJhaXNlcyIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVz
dE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlz
ZXNHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpXaXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzR2V0dGVy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKICAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
LSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVj
dCgpLCBpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1
dGVSYWlzZXMoKnN0YXRlLCAqY29udGV4dCwgZWMpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBpbXBs
LndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMo
KnN0YXRlLCAqY29udGV4dCwgZWMpKTsKICAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2Ny
aXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiop
OworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFu
ZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMjQ0LDE1ICsyNzI3LDI0IEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVX
aXRoU3BhY2VzQXR0cmliCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAg
ICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZSIpOwog
ICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialdpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlR2V0dGVyKHN0YXRl
LCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOwogICAgIGF1dG8qIGNvbnRleHQgPSBq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2Fz
dGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
bmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUoKnN0YXRlLCAqY29udGV4dCkpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBpbXBs
LndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmli
dXRlKCpzdGF0ZSwgKmNvbnRleHQpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFs
dWUganNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZUdldHRl
cihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0
aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNl
KQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMjYzLDEzICsyNzU1LDIyIEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRy
aWJ1dGUoRXhlY1N0YXRlKiBzdGF0CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewog
ICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3
aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlIik7CiAgICAgfQotICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0
b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0QXJn
dW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialdpdGhTY3Jp
cHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMp
KTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNr
QXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkK
K3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0
KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUg
cmVzdWx0ID0gdG9KUyhzdGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0
aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKK0pTVmFsdWUganNUZXN0T2JqQ29u
ZGl0aW9uYWxBdHRyMUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMjgwLDE0ICsyNzgxLDIzIEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjEoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAg
ICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJjb25kaXRp
b25hbEF0dHIxIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIx
R2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqQ29uZGl0
aW9uYWxBdHRyMUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3Qp
Cit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVj
dCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuY29uZGl0aW9uYWxBdHRyMSgpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2VuZGlm
CiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCitKU1ZhbHVl
IGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7
CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjIoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBz
bG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjI5OCwxNCArMjgwOCwy
MyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RP
YmoiLCAiY29uZGl0aW9uYWxBdHRyMiIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqQ29u
ZGl0aW9uYWxBdHRyMkdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpz
VGVzdE9iakNvbmRpdGlvbmFsQXR0cjJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2Jq
KiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BB
UkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7
CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmNvbmRpdGlvbmFsQXR0cjIoKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRp
b24yKQorSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzR2V0dGVyKEV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIz
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
LCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTIz
MTYsMTQgKzI4MzUsMjMgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRy
MyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmEKICAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigq
c3RhdGUsICJUZXN0T2JqIiwgImNvbmRpdGlvbmFsQXR0cjMiKTsKICAgICB9Ci0gICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjNHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30K
KworSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzR2V0dGVyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwor
ICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5jb25kaXRp
b25hbEF0dHIzKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xKQorSlNW
YWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRl
KiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0
cjRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CkBAIC0yMzM0LDEyICsyODYyLDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNv
bmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWCiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJjb25kaXRpb25hbEF0dHI0Iik7CiAgICAg
fQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0T2JqZWN0QTo6Z2V0Q29uc3RydWN0
b3Ioc3RhdGUtPnZtKCksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3JHZXR0
ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25h
bEF0dHI0Q29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlz
T2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRo
aXNPYmplY3QpOworICAgIHJldHVybiBKU1Rlc3RPYmplY3RBOjpnZXRDb25zdHJ1Y3RvcihzdGF0
ZS0+dm0oKSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCkpOwogfQogCiAjZW5kaWYKIAogI2lm
IEVOQUJMRShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKK0pTVmFsdWUganNUZXN0
T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9i
aiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0
b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAt
MjM1MCwxMiArMjg4NywyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0
dHI1Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVgogICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9y
KCpzdGF0ZSwgIlRlc3RPYmoiLCAiY29uZGl0aW9uYWxBdHRyNSIpOwogICAgIH0KLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE9iamVjdEI6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52
bSgpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yR2V0dGVyKHN0YXRlLCBj
YXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0
cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sK
KyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsK
KyAgICByZXR1cm4gSlNUZXN0T2JqZWN0Qjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIHRo
aXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKTsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29u
ZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCitKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlv
bmFsQXR0cjZDb25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVjdG9yKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVj
dCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTIzNjYsMTEgKzI5
MTIsMjAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1YKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJU
ZXN0T2JqIiwgImNvbmRpdGlvbmFsQXR0cjYiKTsKICAgICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKU1Rlc3RPYmplY3RDOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVz
dE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykp
OworfQorCitKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvckdldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgcmV0dXJu
IEpTVGVzdE9iamVjdEM6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCB0aGlzT2JqZWN0LT5n
bG9iYWxPYmplY3QoKSk7CiB9CiAKICNlbmRpZgogCitKU1ZhbHVlIGpzVGVzdE9iakNhY2hlZEF0
dHJpYnV0ZTFHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTEoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjM4MSwxNSArMjkzNiwyNCBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUxKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0
dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiY2FjaGVkQXR0cmli
dXRlMSIpOwogICAgIH0KLSAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IGNhc3RlZFRoaXMt
Pm1fY2FjaGVkQXR0cmlidXRlMS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShjYWNoZWRWYWx1ZSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTFHZXR0
ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRy
aWJ1dGUxR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sK
KyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsK
KyAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IHRoaXNPYmplY3QtPm1fY2FjaGVkQXR0cmli
dXRlMS5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNhY2hlZFZhbHVlOworICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLmNhY2hl
ZEF0dHJpYnV0ZTEoKTsKLSAgICBjYXN0ZWRUaGlzLT5tX2NhY2hlZEF0dHJpYnV0ZTEuc2V0KHN0
YXRlLT52bSgpLCBjYXN0ZWRUaGlzLCByZXN1bHQpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKKyAgICB0aGlzT2JqZWN0LT5tX2NhY2hlZEF0dHJpYnV0ZTEuc2V0KHN0YXRl
LT52bSgpLCB0aGlzT2JqZWN0LCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAor
SlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUyKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09i
amVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI0MDAsMTUg
KzI5NjQsMjQgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmEKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUs
ICJUZXN0T2JqIiwgImNhY2hlZEF0dHJpYnV0ZTIiKTsKICAgICB9Ci0gICAgaWYgKEpTVmFsdWUg
Y2FjaGVkVmFsdWUgPSBjYXN0ZWRUaGlzLT5tX2NhY2hlZEF0dHJpYnV0ZTIuZ2V0KCkpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FjaGVkVmFsdWUpOwotICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rl
c3RPYmpDYWNoZWRBdHRyaWJ1dGUyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pT
VmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMkdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBV
TlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUgPSB0
aGlzT2JqZWN0LT5tX2NhY2hlZEF0dHJpYnV0ZTIuZ2V0KCkpCisgICAgICAgIHJldHVybiBjYWNo
ZWRWYWx1ZTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpT
VmFsdWUgcmVzdWx0ID0gaW1wbC5jYWNoZWRBdHRyaWJ1dGUyKCk7Ci0gICAgY2FzdGVkVGhpcy0+
bV9jYWNoZWRBdHRyaWJ1dGUyLnNldChzdGF0ZS0+dm0oKSwgY2FzdGVkVGhpcywgcmVzdWx0KTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgdGhpc09iamVjdC0+bV9j
YWNoZWRBdHRyaWJ1dGUyLnNldChzdGF0ZS0+dm0oKSwgdGhpc09iamVjdCwgcmVzdWx0KTsKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqQW55QXR0cmlidXRlR2V0
dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpB
bnlBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwpAQCAtMjQxOSwxMiArMjk5MiwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBbnlB
dHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLAogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVy
VHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiYW55QXR0cmlidXRlIik7CiAgICAgfQotICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1Rlc3RPYmpBbnlBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsK
K30KKworSlNWYWx1ZSBqc1Rlc3RPYmpBbnlBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLmFueUF0dHJpYnV0ZSgpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0Owog
fQogCiAKK0pTVmFsdWUganNUZXN0T2JqQ29udGVudERvY3VtZW50R2V0dGVyKEV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb250ZW50RG9jdW1lbnQo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUs
IEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjQz
NSwxMSArMzAxNywyMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb250ZW50RG9jdW1lbnQo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbAogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3RPYmoiLCAiY29udGVudERvY3VtZW50Iik7CiAgICAgfQotICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShz
aG91bGRBbGxvd0FjY2Vzc1RvTm9kZShzdGF0ZSwgaW1wbC5jb250ZW50RG9jdW1lbnQoKSkgPyB0
b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5jb250ZW50RG9jdW1l
bnQoKSkgOiBqc051bGwoKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpD
b250ZW50RG9jdW1lbnRHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBq
c1Rlc3RPYmpDb250ZW50RG9jdW1lbnRHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2Jq
KiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BB
UkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7
CisgICAgcmV0dXJuIHNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKHN0YXRlLCBpbXBsLmNvbnRlbnRE
b2N1bWVudCgpKSA/IHRvSlMoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBpbXBs
LmNvbnRlbnREb2N1bWVudCgpKSA6IGpzTnVsbCgpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2Jq
TXV0YWJsZVBvaW50R2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpNdXRhYmxlUG9pbnQoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjQ1MCwxMiArMzA0MSwyMSBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpNdXRhYmxlUG9pbnQoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0
dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibXV0YWJsZVBvaW50
Iik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAg
SlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
U1ZHU3RhdGljUHJvcGVydHlUZWFyT2ZmPFRlc3RPYmosIFNWR1BvaW50Pjo6Y3JlYXRlKGltcGws
IGltcGwubXV0YWJsZVBvaW50KCksICZUZXN0T2JqOjp1cGRhdGVNdXRhYmxlUG9pbnQpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1Rlc3RPYmpNdXRhYmxlUG9pbnRHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30K
KworSlNWYWx1ZSBqc1Rlc3RPYmpNdXRhYmxlUG9pbnRHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAg
VU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53
cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCB0aGlzT2JqZWN0LT5n
bG9iYWxPYmplY3QoKSwgU1ZHU3RhdGljUHJvcGVydHlUZWFyT2ZmPFRlc3RPYmosIFNWR1BvaW50
Pjo6Y3JlYXRlKGltcGwsIGltcGwubXV0YWJsZVBvaW50KCksICZUZXN0T2JqOjp1cGRhdGVNdXRh
YmxlUG9pbnQpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2Jq
SW1tdXRhYmxlUG9pbnRHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakltbXV0YWJsZVBvaW50KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI0NjYsMTIgKzMwNjYsMjEgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqSW1tdXRhYmxlUG9pbnQoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHUKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAg
IHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImltbXV0YWJs
ZVBvaW50Iik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgU1ZHUHJvcGVydHlUZWFyT2ZmPFNWR1BvaW50Pjo6Y3JlYXRlKGltcGwuaW1tdXRhYmxl
UG9pbnQoKSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakltbXV0YWJsZVBvaW50R2V0dGVyKHN0YXRlLCBj
YXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqSW1tdXRhYmxlUG9pbnRHZXR0ZXIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0
YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgU1ZHUHJvcGVydHlUZWFyT2ZmPFNWR1Bv
aW50Pjo6Y3JlYXRlKGltcGwuaW1tdXRhYmxlUG9pbnQoKSkpOworICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpTdHJhd2JlcnJ5R2V0dGVyKEV4ZWNTdGF0ZSosIEpT
VGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJhd2JlcnJ5KEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVj
dCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI0ODIsMTIgKzMw
OTEsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyYXdiZXJyeShFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFAKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJU
ZXN0T2JqIiwgInN0cmF3YmVycnkiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialN0cmF3
YmVycnlHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpT
dHJhd2JlcnJ5R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkK
K3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0
KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNOdW1iZXIoaW1wbC5ibHVlYmVycnkoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rl
c3RPYmpTdHJpY3RGbG9hdEdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqU3RyaWN0RmxvYXQoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjQ5OCwxMiArMzExNiwyMSBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpTdHJpY3RGbG9hdChFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBy
ZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJzdHJpY3RGbG9h
dCIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqU3RyaWN0RmxvYXRHZXR0ZXIoc3RhdGUs
IGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpY3RGbG9hdEdldHRlcihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVy
KGltcGwuc3RyaWN0RmxvYXQoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpEZXNjcmlwdGlv
bkdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqRGVzY3JpcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwpAQCAtMjUxNCwxMiArMzE0MSwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpE
ZXNjcmlwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsCiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJkZXNjcmlwdGlvbiIpOwogICAgIH0KLSAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNUZXN0T2JqRGVzY3JpcHRpb25HZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsK
K30KKworSlNWYWx1ZSBqc1Rlc3RPYmpEZXNjcmlwdGlvbkdldHRlcihFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qt
PndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuZGVzY3JpcHRp
b24oKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpJZEdldHRlcihFeGVjU3RhdGUqLCBKU1Rl
c3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqSWQoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFz
ZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjUzMCwxMiArMzE2NiwyMSBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpJZChFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TgogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
ICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAi
aWQiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iaklkR2V0dGVyKHN0YXRlLCBjYXN0ZWRU
aGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqSWRHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAg
VU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53
cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmlkKCkpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
CiAKK0pTVmFsdWUganNUZXN0T2JqSGFzaEdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsK
KwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqSGFzaChFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yNTQ2LDEyICszMTkxLDIxIEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakhhc2goRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAg
ICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJoYXNoIik7
CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpIYXNoR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlz
KSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqSGFzaEdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBV
TlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndy
YXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBp
bXBsLmhhc2goKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0
ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwpAQCAtMjU2MiwxMiArMzIxNiwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJu
IHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVwbGFjZWFibGVBdHRy
aWJ1dGUiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRl
R2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqUmVwbGFj
ZWFibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2Jq
ZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNP
YmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNW
YWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLnJlcGxhY2VhYmxlQXR0cmlidXRlKCkpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
CiAKK0pTVmFsdWUganNUZXN0T2JqTnVsbGFibGVEb3VibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0
YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlRG91
YmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKQEAgLTI1NzgsMTIgKzMyNDEsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVs
bGFibGVEb3VibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUKICAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRl
clR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm51bGxhYmxlRG91YmxlQXR0cmlidXRlIik7
CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpOdWxsYWJsZURvdWJsZUF0dHJpYnV0ZUdldHRl
cihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlRG91
YmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVj
dCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2Jq
ZWN0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9OdWxsYWJsZUpTTnVtYmVyKGltcGwubnVsbGFibGVEb3VibGVBdHRyaWJ1
dGUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUxvbmdBdHRyaWJ1dGVHZXR0
ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51
bGxhYmxlTG9uZ0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CkBAIC0yNTk0LDEyICszMjY2LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iak51bGxhYmxlTG9uZ0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhy
b3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJudWxsYWJsZUxvbmdBdHRyaWJ1
dGUiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iak51bGxhYmxlTG9uZ0F0dHJpYnV0ZUdl
dHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxl
TG9uZ0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmpl
Y3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09i
amVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvTnVsbGFibGVKU051bWJlcihpbXBsLm51bGxhYmxlTG9uZ0F0dHJpYnV0
ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZUdl
dHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
TnVsbGFibGVCb29sZWFuQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI2MTAsMTIgKzMyOTEsMjEgQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqTnVsbGFibGVCb29sZWFuQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHUKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVy
biB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm51bGxhYmxlQm9vbGVh
bkF0dHJpYnV0ZSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqTnVsbGFibGVCb29sZWFu
QXR0cmlidXRlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0
T2JqTnVsbGFibGVCb29sZWFuQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNF
RF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBl
ZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKGltcGwubnVsbGFibGVCb29sZWFu
QXR0cmlidXRlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdBdHRy
aWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9iak51bGxhYmxlU3RyaW5nQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI2MjYsMTIgKzMzMTYsMjEgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAg
IHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm51bGxhYmxl
U3RyaW5nQXR0cmlidXRlIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpOdWxsYWJsZVN0
cmluZ0F0dHJpYnV0ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpz
VGVzdE9iak51bGxhYmxlU3RyaW5nQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVO
VVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3Jh
cHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdPck51bGwoc3RhdGUsIGltcGwu
bnVsbGFibGVTdHJpbmdBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpOdWxs
YWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsK
KwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGUo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUs
IEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjY0
MiwxMiArMzM0MSwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUxvbmdTZXR0
YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSgogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3RPYmoiLCAibnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGUiKTsKICAgICB9
Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlR2V0dGVy
KHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqTnVsbGFibGVMb25n
U2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlz
T2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRo
aXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAg
SlNWYWx1ZSByZXN1bHQgPSB0b051bGxhYmxlSlNOdW1iZXIoaW1wbC5udWxsYWJsZUxvbmdTZXR0
YWJsZUF0dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5n
U2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2Jq
ZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjY1OCwxMiAr
MzM2NiwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxl
QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZQogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwg
IlRlc3RPYmoiLCAibnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOwogICAgIH0KLSAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRlcihz
dGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5n
U2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlz
T2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRo
aXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAg
SlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ09yTnVsbChzdGF0ZSwgaW1wbC5udWxsYWJsZVN0cmlu
Z1NldHRhYmxlQXR0cmlidXRlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqTnVsbGFibGVT
dHJpbmdWYWx1ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yNjc0LDE0ICszMzkxLDIzIEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAg
ICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJudWxsYWJs
ZVN0cmluZ1ZhbHVlIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0
T2JqTnVsbGFibGVTdHJpbmdWYWx1ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitK
U1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nVmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvTnVsbGFibGVK
U051bWJlcihpbXBsLm51bGxhYmxlU3RyaW5nVmFsdWUoZWMpKTsKICAgICBzZXRET01FeGNlcHRp
b24oc3RhdGUsIGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZUdldHRlcihF
eGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cmli
dXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAg
LTI2OTIsMTIgKzM0MTgsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHIKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJv
cigqc3RhdGUsICJUZXN0T2JqIiwgImF0dHJpYnV0ZSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNU
ZXN0T2JqQXR0cmlidXRlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUg
anNUZXN0T2JqQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhp
c09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0
aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuYXR0cmlidXRl
KCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5
cGVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI3MDgsMTIgKzM0NDMsMjEgQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGUoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEoKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAg
ICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImF0dHJp
YnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpB
dHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwor
fQorCitKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlR2V0dGVy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJp
bmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuYXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGUoKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZUdldHRlcihFeGVj
U3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHV0Rm9yd2Fy
ZHNBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwpAQCAtMjcyNCwxMiArMzQ2OCwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQdXRG
b3J3YXJkc0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aAogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVy
VHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicHV0Rm9yd2FyZHNBdHRyaWJ1dGUiKTsKICAg
ICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnB1
dEZvcndhcmRzQXR0cmlidXRlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialB1dEZvcndhcmRzQXR0cmli
dXRlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqUHV0
Rm9yd2FyZHNBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlz
T2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRo
aXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwg
aW1wbC5wdXRGb3J3YXJkc0F0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAK
K0pTVmFsdWUganNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZUdldHRlcihFeGVj
U3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHV0Rm9yd2Fy
ZHNOdWxsYWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CkBAIC0yNzQwLDkgKzM0OTMsMTYgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlMKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJv
d0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInB1dEZvcndhcmRzTnVsbGFibGVB
dHRyaWJ1dGUiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpLCBpbXBsLnB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNU
ZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhp
cykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGVH
ZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0
b0pTKHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgaW1wbC5wdXRGb3J3YXJkc051
bGxhYmxlQXR0cmlidXRlKCkpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIApAQCAtNjI2MSw2
ICs3MDIxLDIyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25BdHRhY2hTaGFkb3dSb290KEV4ZWNTdGF0CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvSlNPTihFeGVjU3RhdGUqIHN0YXRlKQorewor
ICAgIGF1dG8gY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oc3RhdGUtPnRo
aXNWYWx1ZSgpKTsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQorICAgICAgICByZXR1
cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAidG9KU09OIik7CisgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7
CisKKyAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChzdGF0ZSk7CisgICAg
Vk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnZtLCAicmVhZE9ubHlTdHJpbmdBdHRyIiksIGpzVGVzdE9ialJlYWRP
bmx5U3RyaW5nQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImVudW1BdHRyIiksIGpzVGVz
dE9iakVudW1BdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7CisgICAgcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibG9uZ0F0dHIiKSwganNUZXN0
T2JqTG9uZ0F0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKKyAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjcmVhdGUiKSwganNUZXN0T2Jq
Q3JlYXRlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOworfQorCiB1c2luZyBUZXN0T2JqSXRlcmF0b3IgPSBKU0RPTUl0ZXJhdG9y
PEpTVGVzdE9iaj47CiB1c2luZyBUZXN0T2JqSXRlcmF0b3JQcm90b3R5cGUgPSBKU0RPTUl0ZXJh
dG9yUHJvdG90eXBlPEpTVGVzdE9iaj47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKaW5kZXggZTMyYjA5ODQwMjhmYmQzMTgz
Yjk0N2MxYTQ4MDkyZWNlYTdhZjY4YS4uZjcyYjhmMjY5ZWU4ZmJiMWI0NzhhMzc5NDhlZTdjNzI0
MWVmNjMxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZS5jcHAKQEAgLTEzMyw2ICsxMzMsOCBAQCB2b2lkIEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKICAgICB0
aGlzT2JqZWN0LT5KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6On5KU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UoKTsKIH0KIAorSlNWYWx1ZSBqc1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkK
IHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTQzLDEyICsxNDUsMjEgQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFsdWUoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2QKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAg
ICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlIiwgInZhbHVlIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLnZhbHVlKCkg
PyBpbXBsLnZhbHVlKCktPmRlc2VyaWFsaXplKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgMCkgOiBqc051bGwoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VWYWx1ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpz
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogdGhpc09iamVjdCkK
K3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0
KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUg
cmVzdWx0ID0gaW1wbC52YWx1ZSgpID8gaW1wbC52YWx1ZSgpLT5kZXNlcmlhbGl6ZShzdGF0ZSwg
dGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIDApIDoganNOdWxsKCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZVJlYWRvbmx5VmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZVJlYWRvbmx5VmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTU5LDEyICsxNzAsMjEgQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUmVhZG9ubHlWYWx1ZShFeGVjU3Rh
dGUqIHN0YXQKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVy
biB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlIiwgInJlYWRvbmx5VmFsdWUiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwucmVhZG9ubHlW
YWx1ZSgpID8gaW1wbC5yZWFkb25seVZhbHVlKCktPmRlc2VyaWFsaXplKHN0YXRlLCBjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSwgMCkgOiBqc051bGwoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VSZWFkb25seVZhbHVlR2V0dGVyKHN0YXRlLCBjYXN0ZWRU
aGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
UmVhZG9ubHlWYWx1ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3QtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwucmVhZG9ubHlWYWx1
ZSgpID8gaW1wbC5yZWFkb25seVZhbHVlKCktPmRlc2VyaWFsaXplKHN0YXRlLCB0aGlzT2JqZWN0
LT5nbG9iYWxPYmplY3QoKSwgMCkgOiBqc051bGwoKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
CiAKK0pTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFs
dWVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
Kik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZUNhY2hlZFZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKQEAgLTE3NSwxNSArMTk1LDI0IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsCiAgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJU
eXBlRXJyb3IoKnN0YXRlLCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSIsICJj
YWNoZWRWYWx1ZSIpOwogICAgIH0KLSAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IGNhc3Rl
ZFRoaXMtPm1fY2FjaGVkVmFsdWUuZ2V0KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoY2FjaGVkVmFsdWUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLmNhY2hlZFZhbHVlKCkgPyBpbXBsLmNhY2hlZFZh
bHVlKCktPmRlc2VyaWFsaXplKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgMCkg
OiBqc051bGwoKTsKLSAgICBjYXN0ZWRUaGlzLT5tX2NhY2hlZFZhbHVlLnNldChzdGF0ZS0+dm0o
KSwgY2FzdGVkVGhpcywgcmVzdWx0KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2VDYWNoZWRWYWx1ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitK
U1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlR2V0
dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZSogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9Q
QVJBTSh0aGlzT2JqZWN0KTsKKyAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IHRoaXNPYmpl
Y3QtPm1fY2FjaGVkVmFsdWUuZ2V0KCkpCisgICAgICAgIHJldHVybiBjYWNoZWRWYWx1ZTsKKyAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0
ID0gaW1wbC5jYWNoZWRWYWx1ZSgpID8gaW1wbC5jYWNoZWRWYWx1ZSgpLT5kZXNlcmlhbGl6ZShz
dGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIDApIDoganNOdWxsKCk7CisgICAgdGhp
c09iamVjdC0+bV9jYWNoZWRWYWx1ZS5zZXQoc3RhdGUtPnZtKCksIHRoaXNPYmplY3QsIHJlc3Vs
dCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZVBvcnRzR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQb3J0cyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xOTQsMTEgKzIyMywyMCBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQb3J0cyhFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0
dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UiLCAicG9ydHMiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQXJyYXkoc3RhdGUsIGNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnBvcnRzKCkpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBvcnRzR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7
CiB9CiAKK0pTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUG9ydHNH
ZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VE
X1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVk
KCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0FycmF5KHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9i
YWxPYmplY3QoKSwgaW1wbC5wb3J0cygpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisKK0pT
VmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkUmVhZG9ubHlW
YWx1ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UqKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlQ2FjaGVkUmVhZG9ubHlWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewpAQCAtMjEwLDEy
ICsyNDgsMTkgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlQ2FjaGVkUmVhZG9ubHlWYWx1ZShFeGVjU3RhdGUKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUs
ICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlIiwgImNhY2hlZFJlYWRvbmx5VmFs
dWUiKTsKICAgICB9Ci0gICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUgPSBjYXN0ZWRUaGlzLT5t
X2NhY2hlZFJlYWRvbmx5VmFsdWUuZ2V0KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoY2FjaGVkVmFsdWUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLmNhY2hlZFJlYWRvbmx5VmFsdWUoKSA/IGltcGwu
Y2FjaGVkUmVhZG9ubHlWYWx1ZSgpLT5kZXNlcmlhbGl6ZShzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xv
YmFsT2JqZWN0KCksIDApIDoganNOdWxsKCk7Ci0gICAgY2FzdGVkVGhpcy0+bV9jYWNoZWRSZWFk
b25seVZhbHVlLnNldChzdGF0ZS0+dm0oKSwgY2FzdGVkVGhpcywgcmVzdWx0KTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRSZWFkb25seVZhbHVlR2V0
dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkUmVhZG9ubHlWYWx1ZUdldHRlcihFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHRoaXNPYmplY3QpCit7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7
CisgICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUgPSB0aGlzT2JqZWN0LT5tX2NhY2hlZFJlYWRv
bmx5VmFsdWUuZ2V0KCkpCisgICAgICAgIHJldHVybiBjYWNoZWRWYWx1ZTsKKyAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1wbC5j
YWNoZWRSZWFkb25seVZhbHVlKCkgPyBpbXBsLmNhY2hlZFJlYWRvbmx5VmFsdWUoKS0+ZGVzZXJp
YWxpemUoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCAwKSA6IGpzTnVsbCgpOwor
ICAgIHRoaXNPYmplY3QtPm1fY2FjaGVkUmVhZG9ubHlWYWx1ZS5zZXQoc3RhdGUtPnZtKCksIHRo
aXNPYmplY3QsIHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVk
ZWZzLmNwcAppbmRleCAzYTM5ZTQ5NjRiYWY5ODIxMjMzYzA2ODc5NTA3ZWY2MzIwMzE2MDhiLi5i
NTA3NDIxOWM3NjliNjg4OWE0YzIxYzNhYzJkNjQ4NDI4NzA0MWEyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVm
cy5jcHAKQEAgLTIxOCw2ICsyMTgsOCBAQCBib29sIEpTVGVzdFR5cGVkZWZzOjpnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcAogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAorSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdB
dHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdFR5cGVkZWZzKik7CisKIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdFR5cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkK
IHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjI4LDEyICsyMzAsMjEgQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWwKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAg
ICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0VHlwZWRlZnMiLCAi
dW5zaWduZWRMb25nTG9uZ0F0dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdFR5cGVkZWZz
VW5zaWduZWRMb25nTG9uZ0F0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNW
YWx1ZSBqc1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdFR5cGVkZWZzKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBs
LnVuc2lnbmVkTG9uZ0xvbmdBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0VHlwZWRlZnNJ
bW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0VHlw
ZWRlZnMqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNJbW11dGFibGVTZXJpYWxp
emVkU2NyaXB0VmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBzbG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwpAQCAtMjQ0LDEyICsyNTUsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRl
ZnNJbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW4KICAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRl
clR5cGVFcnJvcigqc3RhdGUsICJUZXN0VHlwZWRlZnMiLCAiaW1tdXRhYmxlU2VyaWFsaXplZFNj
cmlwdFZhbHVlIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLmltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSgpID8gaW1wbC5pbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUoKS0+ZGVzZXJpYWxp
emUoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCAwKSA6IGpzTnVsbCgpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVGVzdFR5cGVkZWZzSW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlR2V0dGVyKHN0
YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0VHlwZWRlZnNJbW11dGFibGVT
ZXJpYWxpemVkU2NyaXB0VmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRl
ZnMqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURf
UEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQo
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwuaW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZh
bHVlKCkgPyBpbXBsLmltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSgpLT5kZXNlcmlhbGl6
ZShzdGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIDApIDoganNOdWxsKCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQ29uc3RydWN0b3JU
ZXN0U3ViT2JqR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdFR5cGVkZWZzKik7CisKIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdFR5cGVkZWZzQ29uc3RydWN0b3JUZXN0U3ViT2JqKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xv
dEJhc2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI2MCwxMCArMjgwLDE5IEBA
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQ29uc3RydWN0b3JUZXN0U3ViT2JqKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkg
ewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdFR5cGVk
ZWZzIiwgIlRlc3RTdWJPYmoiKTsKICAgICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U1Rlc3RTdWJPYmo6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0VHlwZWRlZnND
b25zdHJ1Y3RvclRlc3RTdWJPYmpHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNW
YWx1ZSBqc1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yVGVzdFN1Yk9iakdldHRlcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICByZXR1cm4gSlNUZXN0
U3ViT2JqOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgdGhpc09iamVjdC0+Z2xvYmFsT2Jq
ZWN0KCkpOwogfQogCiAKK0pTVmFsdWUganNUZXN0VHlwZWRlZnNBdHRyV2l0aEdldHRlckV4Y2Vw
dGlvbkdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RUeXBlZGVmcyopOworCiBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJh
c2UpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI3NCwxNCArMzAzLDIzIEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewog
ICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdFR5cGVkZWZz
IiwgImF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNUZXN0VHlwZWRlZnNBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkdldHRlcihzdGF0
ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0
ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIHRoaXNP
YmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhp
c09iamVjdCk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBl
ZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5hdHRyV2l0aEdldHRlckV4
Y2VwdGlvbihlYykpOwogICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pT
VmFsdWUganNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3Rh
dGUqLCBKU1Rlc3RUeXBlZGVmcyopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0
dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCogc2xvdEJhc2UpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKQEAgLTI5MiwxMiArMzMwLDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dFR5cGVkZWZzQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhy
b3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdFR5cGVkZWZzIiwgImF0dHJXaXRoU2V0dGVy
RXhjZXB0aW9uIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0
dGVyRXhjZXB0aW9uR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNU
ZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RUeXBlZGVmcyogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5hdHRy
V2l0aFNldHRlckV4Y2VwdGlvbigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzU3Ry
aW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0VHlwZWRl
ZnMqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdldHRl
ckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNlKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CkBAIC0zMDgsMTQgKzM1NSwyMyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1N0
cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuYwogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlw
ZUVycm9yKCpzdGF0ZSwgIlRlc3RUeXBlZGVmcyIsICJzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2Vw
dGlvbiIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdFR5cGVkZWZz
U3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25HZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsK
K30KKworSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9u
R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiB0aGlzT2JqZWN0KQorewor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOwog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnN0cmluZ0F0dHJX
aXRoR2V0dGVyRXhjZXB0aW9uKGVjKSk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0
aW9uR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdFR5cGVkZWZzKik7CisKIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KiBz
bG90QmFzZSkKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMzI2LDkgKzM4MiwxNiBA
QCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0
aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuYwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RUeXBl
ZGVmcyIsICJzdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbiIpOwogICAgIH0KLSAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcihzdGF0
ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldp
dGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMq
IHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFS
QU0odGhpc09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsK
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnN0cmlu
Z0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNhdHRyaWJ1dGUuY3BwCmluZGV4IDkw
OWRmYTcxZTQ3N2MyZDM0YjcyMzM5OGM2ZThjNTRjMWM4Y2NlM2MuLmRkMzYxNzhkZTdhMmQ0MDg3
MTM2NmZmYWEzZmEzNTJlNGMxZjU5NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTYXR0cmlidXRlLmNwcApAQCAtMTQxLDYgKzE0MSw4
IEBAIGJvb2wgSlNhdHRyaWJ1dGU6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitKU1Zh
bHVlIGpzYXR0cmlidXRlUmVhZG9ubHlHZXR0ZXIoRXhlY1N0YXRlKiwgSlNhdHRyaWJ1dGUqKTsK
KwogRW5jb2RlZEpTVmFsdWUganNhdHRyaWJ1dGVSZWFkb25seShFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqIHNsb3RCYXNl
KQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xNTEsOSArMTUzLDE2IEBAIEVuY29k
ZWRKU1ZhbHVlIGpzYXR0cmlidXRlUmVhZG9ubHkoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAg
ICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiYXR0cmlidXRlIiwgInJl
YWRvbmx5Iik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc2F0dHJpYnV0ZVJlYWRvbmx5R2V0dGVyKHN0
YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNhdHRyaWJ1dGVSZWFkb25seUdldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU2F0dHJpYnV0ZSogdGhpc09iamVjdCkKK3sKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNT
dHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwucmVhZG9ubHkoKSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROb2RlLmlkbCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Tm9kZS5pZGwKaW5kZXggMWU0
ODUyYTg1ODkwYmYwY2Q0OWVhNGVlMzJkMDQ1NTRlMjhmMjA4OS4uZmNlNjgwYWFhMjY5ZDFhZTYw
ZGNlZWFmNTlkYmI0ZmE1YmQwOWI1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Rlc3ROb2RlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVGVzdE5vZGUuaWRsCkBAIC0yNSw1ICsyNSw3IEBACiAgICAgYXR0cmli
dXRlIERPTVN0cmluZyBuYW1lOwogCiAgICAgaXRlcmFibGU8VGVzdE5vZGU+OworCisgICAgc2Vy
aWFsaXplcjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9UZXN0T2JqLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9UZXN0T2JqLmlkbAppbmRleCAzNDExODFhNTE2MWYwMDU1YjQyMGE5OWViNWI4ZjllYThjZDhh
MTdkLi4yYWI5Y2MxZjliNmEzYTBjNmEwMGFjMGZhZmQ2NTUxYTIzZjJjMzQyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCkBAIC0zNzQs
NiArMzc0LDggQEAgZW51bSBUZXN0Q29uZmlkZW5jZSB7ICJoaWdoIiwgImtpbmRhLWxvdyIgfTsK
ICNlbmRpZgogCiAgICAgdm9pZCBhdHRhY2hTaGFkb3dSb290KFRlc3REaWN0aW9uYXJ5IGluaXQp
OworCisgICAgc2VyaWFsaXplciA9IHtyZWFkT25seVN0cmluZ0F0dHIsIGNyZWF0ZSwgZW51bUF0
dHIsIGxvbmdBdHRyfTsKIH07CiAKIC8vIFRoZSBmb2xsb3dpbmcgY29tbWVudCBzaG91bGQgbm90
IGdlbmVyYXRlIGFueSBjb2RlLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDU3OWE4ZTQzYmRmM2NmYzZiYTJmNWU3OTFlYmQ5
MDIyODBjMTA4ODUuLmRlM2M1M2UzYWMwY2E5NTlmZThlMmVkZGIxMDBlNThhNjkwMjAwY2IgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxOCBAQAorMjAxNi0wNS0yNCAgQWxlamFuZHJvIEcuIENhc3RybyAgPGFs
ZXhAaWdhbGlhLmNvbT4KKworICAgICAgICBBZGQgV2ViSURMIHNwZWNpYWwgb3BlcmF0aW9uIHN1
cHBvcnQ6IHNlcmlhbGl6ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1NjI5MworCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisg
ICAgICAgIFZlcmlmeSB0aGUgbmV3IEFQSSBvZiB0aGUgb2JqZWN0cyBhbmQgY2hlY2sgd2hhdCBo
YXBwZW5zIHdoZW4gdXNlcgorICAgICAgICBtb2RpZmllcyB0aGUgdmFsdWVzIGFuZCB0eXBlcyBv
ZiB0aGUgYXR0cmlidXRlcywgb3IgYWRkcyBhIG51bGwgdmFsdWUuCisKKyAgICAgICAgKiBmYXN0
L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFz
dC9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaHRtbDoKKyAgICAgICAgKiBmYXN0L21lZGlh
c3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFz
dC9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24uaHRtbDoKKwogMjAxNi0wNS0yNCAg
TXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFtGb250
IExvYWRpbmddIENyYXNoIGR1cmluZyBmb250IGRvd25sb2FkIGZhaWx1cmUgYWZ0ZXIgZ2FyYmFn
ZSBjb2xsZWN0aW9uCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JU
Q0ljZUNhbmRpZGF0ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFt
L1JUQ0ljZUNhbmRpZGF0ZS1leHBlY3RlZC50eHQKaW5kZXggZTllZGI4ZGM0YWNiMzRiNTNiOTMy
MzliNDI3OTZjNDA2OWI5NzRkNi4uZjM3NDZhMTJlN2Y5MGVjOTRkMzc1MTY0MzRmY2ZjMjU3Mzkx
ZTM4ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENJY2VDYW5k
aWRhdGUtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRD
SWNlQ2FuZGlkYXRlLWV4cGVjdGVkLnR4dApAQCAtNyw2ICs3LDIxIEBAIFBBU1MgY2FuZGlkYXRl
ID0gbmV3IFJUQ0ljZUNhbmRpZGF0ZShpbml0aWFsaXplcik7IGRpZCBub3QgdGhyb3cgZXhjZXB0
aW9uLgogUEFTUyBjYW5kaWRhdGUuY2FuZGlkYXRlIGlzICJmb28iCiBQQVNTIGNhbmRpZGF0ZS5z
ZHBNaWQgaXMgImJhciIKIFBBU1MgY2FuZGlkYXRlLnNkcE1MaW5lSW5kZXggaXMgNgorUEFTUyBS
VENJY2VDYW5kaWRhdGUucHJvdG90eXBlLnRvSlNPTiBpcyBkZWZpbmVkLgorUEFTUyBPYmplY3Qu
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFJUQ0ljZUNhbmRpZGF0ZS5wcm90b3R5cGUsICJ0b0pT
T04iKS5lbnVtZXJhYmxlIGlzIHRydWUKK1BBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihSVENJY2VDYW5kaWRhdGUucHJvdG90eXBlLCAidG9KU09OIikud3JpdGFibGUgaXMgdHJ1
ZQorUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFJUQ0ljZUNhbmRpZGF0ZS5w
cm90b3R5cGUsICJ0b0pTT04iKS5jb25maWd1cmFibGUgaXMgdHJ1ZQorUEFTUyBSVENJY2VDYW5k
aWRhdGUucHJvdG90eXBlLnRvSlNPTi5sZW5ndGggaXMgMAorUEFTUyBSVENJY2VDYW5kaWRhdGUu
cHJvdG90eXBlLnRvSlNPTi5uYW1lIGlzICJ0b0pTT04iCitQQVNTIE9iamVjdC5nZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoanNvbk1hcCwgImNhbmRpZGF0ZSIpLmVudW1lcmFibGUgaXMgdHJ1ZQor
UEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGpzb25NYXAsICJjYW5kaWRhdGUi
KS53cml0YWJsZSBpcyB0cnVlCitQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
anNvbk1hcCwgImNhbmRpZGF0ZSIpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCitQQVNTIGNoaWxkQ2Fu
ZGlkYXRlLnRvSlNPTigpOyB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBDYW4gb25seSBjYWxs
IFJUQ0ljZUNhbmRpZGF0ZS50b0pTT04gb24gaW5zdGFuY2VzIG9mIFJUQ0ljZUNhbmRpZGF0ZS4K
K1BBU1MgSlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNPTigpKSBpcyAie1wiY2FuZGlkYXRl
XCI6XCJmb29cIixcInNkcE1pZFwiOlwiYmFyXCIsXCJzZHBNTGluZUluZGV4XCI6Nn0iCitQQVNT
IEpTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSkgaXMgIntcImNhbmRpZGF0ZVwiOlwi
Zm9vXCIsXCJzZHBNaWRcIjpcImJhclwiLFwic2RwTUxpbmVJbmRleFwiOjZ9IgorUEFTUyBKU09O
LnN0cmluZ2lmeShjYW5kaWRhdGUudG9KU09OKCkpIGlzICJ7XCJjYW5kaWRhdGVcIjpcImZvb1wi
LFwic2RwTWlkXCI6XCJiYXJcIixcInNkcE1MaW5lSW5kZXhcIjo2fSIKK1BBU1MgSlNPTi5zdHJp
bmdpZnkoY2FuZGlkYXRlLnRvSlNPTigpKSBpcyAie1wiY2FuZGlkYXRlXCI6XCJmb29cIixcInNk
cE1pZFwiOlwiYmFyXCIsXCJzZHBNTGluZUluZGV4XCI6Nn0iCitQQVNTIEpTT04uc3RyaW5naWZ5
KGNhbmRpZGF0ZS50b0pTT04oKSkgaXMgIntcImNhbmRpZGF0ZVwiOlwiZm9vXCIsXCJzZHBNaWRc
IjpcImJhclwiLFwic2RwTUxpbmVJbmRleFwiOjZ9IgogCiBBdHRyaWJ1dGVzIGFyZSByZWFkb25s
eQogY2FuZGlkYXRlLmNhbmRpZGF0ZSA9ICJmb28tdXBkYXRlZCIKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmh0bWwgYi9MYXlvdXRUZXN0
cy9mYXN0L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5odG1sCmluZGV4IGJjZDk5YjBjZDA1
NWQ0YzdiMGFiOTMxZjhjNTU4ODc3N2Y0MDQ4ZWEuLmQwZDVkZWRjMzFlNjU0NTJmOWNjZmVjYjU1
OWExZWM4NDVkODY2NTMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0v
UlRDSWNlQ2FuZGlkYXRlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9S
VENJY2VDYW5kaWRhdGUuaHRtbApAQCAtMTMsNiArMTMsMzMgQEAKICAgICAgICAgICAgIHNob3Vs
ZEJlKCdjYW5kaWRhdGUuY2FuZGlkYXRlJywgJyJmb28iJyk7CiAgICAgICAgICAgICBzaG91bGRC
ZSgnY2FuZGlkYXRlLnNkcE1pZCcsICciYmFyIicpOwogICAgICAgICAgICAgc2hvdWxkQmUoJ2Nh
bmRpZGF0ZS5zZHBNTGluZUluZGV4JywgJzYnKTsKKyAgICAgICAgICAgIHNob3VsZEJlRGVmaW5l
ZCgnUlRDSWNlQ2FuZGlkYXRlLnByb3RvdHlwZS50b0pTT04nKTsKKyAgICAgICAgICAgIHNob3Vs
ZEJlVHJ1ZSgnT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihSVENJY2VDYW5kaWRhdGUu
cHJvdG90eXBlLCAidG9KU09OIikuZW51bWVyYWJsZScpOworICAgICAgICAgICAgc2hvdWxkQmVU
cnVlKCdPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFJUQ0ljZUNhbmRpZGF0ZS5wcm90
b3R5cGUsICJ0b0pTT04iKS53cml0YWJsZScpOworICAgICAgICAgICAgc2hvdWxkQmVUcnVlKCdP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFJUQ0ljZUNhbmRpZGF0ZS5wcm90b3R5cGUs
ICJ0b0pTT04iKS5jb25maWd1cmFibGUnKTsKKyAgICAgICAgICAgIHNob3VsZEJlKCdSVENJY2VD
YW5kaWRhdGUucHJvdG90eXBlLnRvSlNPTi5sZW5ndGgnLCAnMCcpOworICAgICAgICAgICAgc2hv
dWxkQmUoJ1JUQ0ljZUNhbmRpZGF0ZS5wcm90b3R5cGUudG9KU09OLm5hbWUnLCAnInRvSlNPTiIn
KTsKKworICAgICAgICAgICAgdmFyIGpzb25NYXAgPSBjYW5kaWRhdGUudG9KU09OKCk7CisgICAg
ICAgICAgICBzaG91bGRCZVRydWUoJ09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoanNv
bk1hcCwgImNhbmRpZGF0ZSIpLmVudW1lcmFibGUnKTsKKyAgICAgICAgICAgIHNob3VsZEJlVHJ1
ZSgnT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihqc29uTWFwLCAiY2FuZGlkYXRlIiku
d3JpdGFibGUnKTsKKyAgICAgICAgICAgIHNob3VsZEJlVHJ1ZSgnT2JqZWN0LmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihqc29uTWFwLCAiY2FuZGlkYXRlIikuY29uZmlndXJhYmxlJyk7CisKKyAg
ICAgICAgICAgIHZhciBjaGlsZFJUQ0ljZUNhbmRpZGF0ZSA9IGZ1bmN0aW9uKCkge307CisgICAg
ICAgICAgICBjaGlsZFJUQ0ljZUNhbmRpZGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJU
Q0ljZUNhbmRpZGF0ZS5wcm90b3R5cGUpOworICAgICAgICAgICAgdmFyIGNoaWxkQ2FuZGlkYXRl
ID0gbmV3IGNoaWxkUlRDSWNlQ2FuZGlkYXRlKCk7CisgICAgICAgICAgICBzaG91bGRUaHJvdygn
Y2hpbGRDYW5kaWRhdGUudG9KU09OKCk7Jyk7CisKKyAgICAgICAgICAgIHNob3VsZEJlRXF1YWxU
b1N0cmluZygnSlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNPTigpKScsICd7ImNhbmRpZGF0
ZSI6ImZvbyIsInNkcE1pZCI6ImJhciIsInNkcE1MaW5lSW5kZXgiOjZ9Jyk7CisgICAgICAgICAg
ICBjYW5kaWRhdGUubmV3QXR0cmlidXRlID0gIm5ldyB2YWx1ZSI7CisgICAgICAgICAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoJ0pTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSknLCAn
eyJjYW5kaWRhdGUiOiJmb28iLCJzZHBNaWQiOiJiYXIiLCJzZHBNTGluZUluZGV4Ijo2fScpOwor
ICAgICAgICAgICAgY2FuZGlkYXRlLnNkcE1MaW5lSW5kZXggPSAibm90IGEgbnVtYmVyIjsKKyAg
ICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnSlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRl
LnRvSlNPTigpKScsICd7ImNhbmRpZGF0ZSI6ImZvbyIsInNkcE1pZCI6ImJhciIsInNkcE1MaW5l
SW5kZXgiOjZ9Jyk7CisgICAgICAgICAgICBjYW5kaWRhdGUuc2RwTWlkID0gNzsKKyAgICAgICAg
ICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnSlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNP
TigpKScsICd7ImNhbmRpZGF0ZSI6ImZvbyIsInNkcE1pZCI6ImJhciIsInNkcE1MaW5lSW5kZXgi
OjZ9Jyk7CisgICAgICAgICAgICBjYW5kaWRhdGUuc2RwTWlkID0gbnVsbDsKKyAgICAgICAgICAg
IHNob3VsZEJlRXF1YWxUb1N0cmluZygnSlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNPTigp
KScsICd7ImNhbmRpZGF0ZSI6ImZvbyIsInNkcE1pZCI6ImJhciIsInNkcE1MaW5lSW5kZXgiOjZ9
Jyk7CisKICAgICAgICAgICAgIGRlYnVnKCIiKTsKIAogICAgICAgICAgICAgZGVidWcoIkF0dHJp
YnV0ZXMgYXJlIHJlYWRvbmx5Iik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlh
c3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9m
YXN0L21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi1leHBlY3RlZC50eHQKaW5kZXgg
NjU4MjE4ZmZlMTJlNTYwMDQ4OGQ3OTUyMmM0YTM0YTlkZjhkZTZmOC4uMzQwOWMyZGVlYTAyOWFh
NDBjYzViMDc2Yjg1MWY1N2Q2MWMyYWUxMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9t
ZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0CisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLWV4cGVjdGVkLnR4
dApAQCAtNyw2ICs3LDcgQEAgUEFTUyBzZXNzaW9uRGVzY3JpcHRpb24gPSBuZXcgUlRDU2Vzc2lv
bkRlc2NyaXB0aW9uKCk7IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgogUEFTUyBzZXNzaW9uRGVz
Y3JpcHRpb24gPSBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGluaXRpYWxpemVyKTsgZGlkIG5v
dCB0aHJvdyBleGNlcHRpb24uCiBQQVNTIHNlc3Npb25EZXNjcmlwdGlvbi50eXBlIGlzICJvZmZl
ciIKIFBBU1Mgc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCBpcyAiZm9vYmFyIgorUEFTUyBKU09OLnN0
cmluZ2lmeShzZXNzaW9uRGVzY3JpcHRpb24udG9KU09OKCkpIGlzICJ7XCJ0eXBlXCI6XCJvZmZl
clwiLFwic2RwXCI6XCJmb29iYXJcIn0iCiBQQVNTIG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24o
bnVsbCk7IHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE9wdGlvbmFsIFJUQ1Nlc3Npb25EZXNj
cmlwdGlvbiBjb25zdHJ1Y3RvciBhcmd1bWVudCBtdXN0IGJlIGEgdmFsaWQgRGljdGlvbmFyeS4K
IFBBU1MgbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbig1KTsgdGhyZXcgZXhjZXB0aW9uIFR5cGVF
cnJvcjogT3B0aW9uYWwgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIGNvbnN0cnVjdG9yIGFyZ3VtZW50
IG11c3QgYmUgYSB2YWxpZCBEaWN0aW9uYXJ5LgogUEFTUyBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0
aW9uKCdmb29iYXInKTsgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogT3B0aW9uYWwgUlRDU2Vz
c2lvbkRlc2NyaXB0aW9uIGNvbnN0cnVjdG9yIGFyZ3VtZW50IG11c3QgYmUgYSB2YWxpZCBEaWN0
aW9uYXJ5LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENTZXNz
aW9uRGVzY3JpcHRpb24uaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDU2Vz
c2lvbkRlc2NyaXB0aW9uLmh0bWwKaW5kZXggM2E2NmQyZTI2YjExOTEwNWFjMWVkMzBkZDVhZjU3
NTI5OTdkZjM0Mi4uMWQ5YjVjZDMzN2VkNWRlOWE5NjU4ZDY0NmI4YzQyYmRjYWRhZTYyMyAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRp
b24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNj
cmlwdGlvbi5odG1sCkBAIC0xNSw2ICsxNSw3IEBACiAgICAgICAgICAgICBzaG91bGROb3RUaHJv
dygic2Vzc2lvbkRlc2NyaXB0aW9uID0gbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihpbml0aWFs
aXplcik7Iik7CiAgICAgICAgICAgICBzaG91bGRCZSgnc2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUn
LCAnIm9mZmVyIicpOwogICAgICAgICAgICAgc2hvdWxkQmUoJ3Nlc3Npb25EZXNjcmlwdGlvbi5z
ZHAnLCAnImZvb2JhciInKTsKKyAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnSlNP
Ti5zdHJpbmdpZnkoc2Vzc2lvbkRlc2NyaXB0aW9uLnRvSlNPTigpKScsICd7InR5cGUiOiJvZmZl
ciIsInNkcCI6ImZvb2JhciJ9Jyk7CiAKICAgICAgICAgICAgIHNob3VsZFRocm93KCJuZXcgUlRD
U2Vzc2lvbkRlc2NyaXB0aW9uKG51bGwpOyIpOwogICAgICAgICAgICAgc2hvdWxkVGhyb3coIm5l
dyBSVENTZXNzaW9uRGVzY3JpcHRpb24oNSk7Iik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279883</attachid>
            <date>2016-05-26 08:07:24 -0700</date>
            <delta_ts>2016-09-22 04:07:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156293-20160526170832.patch</filename>
            <type>text/plain</type>
            <size>177974</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxNDE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGExYWEzNDE2MDU1YmIy
ZWNlZDZkZWYwYzIyOThkNGQ4MjZlNzIzZC4uM2Q2NTEwNTlmMGIxNDU3MzdhYTA2ZGQ0NDY0ZWZl
NjZhOTA5OTMyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc4IEBACisyMDE2LTA1LTI0ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIEFkZCBXZWJJREwg
c3BlY2lhbCBvcGVyYXRpb24gc3VwcG9ydDogc2VyaWFsaXplcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MjkzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgdGhlIHNlcmlhbGl6
ZXIgc3BlY2lhbCBvcGVyYXRpb24gZm9yIFdlYklETHMsCisgICAgICAgIGN1cnJlbnQgaW1wbGVt
ZW50YXRpb24gYWRkcyBzdXBwb3J0IGZvcjoKKyAgICAgICAgICAtIGp1c3QgdGhlIGtleXdvcmQ6
IHNlcmlhbGl6ZXI7IEl0IHdpbGwgcmV0dXJuIGFsbCB0aGUKKyAgICAgICAgICAgIGF0dHJpYnV0
ZXMgb2YgaW4gYW4gb2JqZWN0LgorICAgICAgICAgIC0gbWFwIG9mIGVudHJpZXMgd2l0aCB0aGUg
YXR0cmlidXRlczogc2VyaWFsaXplciA9IHthdHRyaWJ1dGUxLAorICAgICAgICAgICAgYXR0cmli
dXRlMiwgLi4ufQorCisgICAgICAgIEl0IGNyZWF0ZXMgYSB0b0pTT04gbWV0aG9kIHRoYXQgcmV0
dXJucyB0aGUgc2VyaWFsaXplZCB2YWx1ZQorICAgICAgICBjb252ZXJ0ZWQgaW50byBhbiBFQ01B
U2NyaXB0IHZhbHVlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBjaGVjayB0aGUKKyAgICAgICAgZGVm
aW5pdGlvbiBvZiB0aGUgb3BlcmF0aW9uOgorCisgICAgICAgIGh0dHA6Ly9oZXljYW0uZ2l0aHVi
LmlvL3dlYmlkbC8jaWRsLXNlcmlhbGl6ZXJzCisKKyAgICAgICAgV2UgaGF2ZSBtb2RpZmllZCBj
dXJyZW50IGNvZGUgdGhhdCBnZW5lcmF0ZXMgdGhlIGdldHRlciBmdW5jdGlvbgorICAgICAgICBm
b3IgYXR0cmlidXRlcyBpbiB0d28gcGFydHMgc28gdGhhdCB3ZSBjYW4gcmV1c2UgdGhlIHBhcnQK
KyAgICAgICAgZXh0cmFjdGluZyB0aGUgdmFsdWUgZm9yIHRoZSBzZXJpYWxpemVyLgorCisgICAg
ICAgIFVzZWQgdGhlIHN1cHBvcnQgdG8gYWRkIG5ldyBBUEkgZm9yIFJUQ0ljZUNhbmRpZGF0ZSBh
bmQKKyAgICAgICAgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLgorCisgICAgICAgIFVwZGF0ZWQgdGhl
IHRlc3RzIGV4cGVjdGF0aW9ucyBvZiB0aGUgYmluZGluZ3MuCisKKyAgICAgICAgVGVzdHM6IGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Tm9kZS5pZGwKKyAgICAgICAgICAgICAgIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAorICAgICAgICAgICAgICAgZmFzdC9tZWRpYXN0cmVh
bS9SVENJY2VDYW5kaWRhdGUuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9tZWRpYXN0cmVhbS9S
VENTZXNzaW9uRGVzY3JpcHRpb24uaHRtbAorCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVh
bS9SVENJY2VDYW5kaWRhdGUuaWRsOiBBZGRlZCB0aGUgc2VyaWFsaXplcgorICAgICAgICBvcGVy
YXRpb24uCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRp
b24uaWRsOiBBZGRlZCB0aGUKKyAgICAgICAgc2VyaWFsaXplciBvcGVyYXRpb24uCisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0
ZUltcGxlbWVudGF0aW9uKTogU3BsaXR0ZWQgdGhlIGNvZGUgb2YgdGhlIGF0dHJpYnV0ZQorICAg
ICAgICBnZXR0ZXIgaW4gdHdvIGZ1bmN0aW9ucywgb25lIGdldHRpbmcgdGhlIHZhbHVlIGFuZCB0
aGUgb3RoZXIKKyAgICAgICAgaGFuZGxpbmcgdGhlIGNhbGwgZnJvbSB0aGUgQVBJLiBUaGlzIHdh
eSB3ZSBjYW4gcmV1c2UgdGhlIGNvZGUgZm9yCisgICAgICAgIHRoZSBzZXJpYWxpemVyLiBBbHNv
IEFkZGVkIHRoZSBjYWxscyB0byB0aGUgc2VyaWFsaXplcgorICAgICAgICBjb2RlIGdlbmVyYXRv
ci4KKyAgICAgICAgKEdlbmVyYXRlU2VyaWFsaXplckZ1bmN0aW9uKTogQWRkZWQsIGdlbmVyYXRl
cyB0aGUgdG9KU09OIGZ1bmN0aW9uCisgICAgICAgIGFkZGluZyBhbGwgdGhlIHNlcmlhbGl6YWJs
ZS0+YXR0cmlidXRlcyB2YWx1ZSB0byBhbiBvYmplY3QgYXMKKyAgICAgICAgZGVmaW5lZCBpbiB0
aGUgc3BlYy4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbTogTW9kaWZp
ZWQgdGhlIHNlcmlhbGl6ZXIgcGFyc2VyCisgICAgICAgIHRoYXQgd2FzIHVudXNlZCB0byBzdXBw
b3J0IHRoZSBXZWJJREwgc3BlYyBwYXJ0cy4gQWRkZWQgYSBuZXcKKyAgICAgICAgZG9tU2VyaWFs
aXphYmxlIHR5cGUgdG8gc3RvcmUgdGhlIGxpc3Qgb2YgYXR0cmlidXRlcyBpbiB0aGUKKyAgICAg
ICAgcG9zc2libGUgbWFwLgorICAgICAgICAocGFyc2VTZXJpYWxpemVyKTogTW9kaWZpZWQgdGhl
IGZ1bmN0aW9uIHRvIGZvbGxvdyB0aGUKKyAgICAgICAgc2VtaWNvbG9uIHJ1bGUgaW4gdGhlIHNw
ZWMsIG5vdyB0aGUgc2VyaWFsaXplciBsaW5lIG11c3QgaGF2ZSBhCisgICAgICAgIHNlbWljb2xv
biBsaWtlIGFueSBvdGhlciBsaW5lLgorICAgICAgICAocGFyc2VTZXJpYWxpemVyUmVzdCk6IFRo
ZSBmdW5jdGlvbiBub3cgaGFzIHRvIGdldCB0aGUgYXR0cmlidXRlcworICAgICAgICBsaXN0IGZy
b20gdGhlIHBhdHRlcm4gcGFyc2luZyBmdW5jdGlvbiBhbmQgYWRkIHRoZW0gdG8gdGhlCisgICAg
ICAgIGRvbVNlcmlhbGl6YWJsZSBpdGVtLgorICAgICAgICAocGFyc2VTZXJpYWxpemF0aW9uUGF0
dGVybik6IE5vdyB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxpc3Qgb2YKKyAgICAgICAgYXR0
cmlidXRlcyBpbiB0aGUgc2VyaWFsaXphYmxlIG1hcCBvciBsaXN0IGlmIHdlIGhhdmUgb25lLgor
ICAgICAgICAocGFyc2VTZXJpYWxpemF0aW9uQXR0cmlidXRlcyk6IEFkZGVkLCB0aGlzIGZ1bmN0
aW9uIHJlcGxhY2VzIHRoZQorICAgICAgICBNYXAgYW5kIExpc3QgZnVuY3Rpb25zLCB0aGUgY3Vy
cmVudGx5IHN1cHBvcnRlZCBwYXJ0cyBhcmUgc2ltaWxhcgorICAgICAgICBmb3IgYm90aCBzaXR1
YXRpb25zLgorICAgICAgICAoYXBwbHlNZW1iZXJMaXN0KTogQWRkZWQgdGhlIHNlcmlhbGl6YWJs
ZSBpdGVtIHRvIHRoZSBpbnRlcmZhY2UKKyAgICAgICAgdmFyaWFibGUgYW5kIHBvcHVsYXRlIHRo
ZSBzZXJpYWxpemFibGUgaW4gY2FzZSB0aGVyZSBpcyBub3QgYQorICAgICAgICBkZWZpbmVkIG1h
cC4KKyAgICAgICAgKHBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm5NYXApOiBSZXBsYWNlZCB3aXRo
CisgICAgICAgIHBhcnNlU2VyaWFsaXphdGlvbkF0dHJpYnV0ZXMuCisgICAgICAgIChwYXJzZVNl
cmlhbGl6YXRpb25QYXR0ZXJuTGlzdCk6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcDogTW9kaWZpZWQgdGhlIGV4cGVjdGVkIHJlc3VsdC4K
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTik6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6IE1vZGlmaWVk
IHRoZSBleHBlY3RlZCByZXN1bHQuCisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblRvSlNPTik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RO
b2RlLmlkbDogQWRkZWQgdGhlIHNlcmlhbGl6ZXIgdGVzdC4KKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVGVzdE9iai5pZGw6IEFkZGVkIHNlcmlhbGl6ZXIgbWFwIHRlc3QuCisKIDIw
MTYtMDUtMjYgIEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CiAKICAgICAg
ICAgTmF0aXZlVG9KU1ZhbHVlIGlzIGhhcmNvZGluZyB0aGUgJHRoaXNWYWx1ZSBpbiBzb21lIHN0
cmluZ3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRD
SWNlQ2FuZGlkYXRlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRD
SWNlQ2FuZGlkYXRlLmlkbAppbmRleCA5MWJhODQxNTNjZjBmMzRhZDFmZDI4YzE2MjcyMTJlZjk0
ZTBhM2ZhLi4zZWVhYjliZjVjMzViYTcxNDlmMDU2NGJmM2E3MjVhN2I4NmJjZjYyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5p
ZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRh
dGUuaWRsCkBAIC0zNyw1ICszNyw3IEBACiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmlu
ZyBjYW5kaWRhdGU7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZz8gc2RwTWlkOwog
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBzaG9ydD8gc2RwTUxpbmVJbmRleDsKKwor
ICAgIHNlcmlhbGl6ZXIgPSB7Y2FuZGlkYXRlLCBzZHBNaWQsIHNkcE1MaW5lSW5kZXh9OwogfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENTZXNz
aW9uRGVzY3JpcHRpb24uaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9S
VENTZXNzaW9uRGVzY3JpcHRpb24uaWRsCmluZGV4IDIzNDU1ZjcwNDA3MjhlMWJhY2VhZmUyMWE4
Y2FlOGI4YTUxNDA1ZWYuLjFkNjQzNTAyZTNmYWIyM2I2ZGMzYjc1MGNlMmI1MWQyNTI0MjAzNmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU2Vzc2lv
bkRlc2NyaXB0aW9uLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5pZGwKQEAgLTM2LDUgKzM2LDcgQEAKIF0gaW50ZXJmYWNl
IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiB7CiAgICAgW1NldHRlclJhaXNlc0V4Y2VwdGlvbl0gYXR0
cmlidXRlIERPTVN0cmluZyB0eXBlOwogICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgc2RwOworCisg
ICAgc2VyaWFsaXplciA9IHt0eXBlLCBzZHB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCBkODgwZGRkNmFmNjBl
ZDVhNWYxMGY1NWMxMmNhYzhmMzZkMjkyYjdhLi41ZTY0OTcwYTgwZTE3ODI2YzExYjc3ODFhMWU3
ZTVkY2Y1NmNjMTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JKUy5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JKUy5wbQpAQCAtMTk5OCw2ICsxOTk4LDggQEAgc3ViIEdlbmVyYXRlSW1w
bGVtZW50YXRpb24KICAgICBteSAkdmlzaWJsZUludGVyZmFjZU5hbWUgPSAkY29kZUdlbmVyYXRv
ci0+R2V0VmlzaWJsZUludGVyZmFjZU5hbWUoJGludGVyZmFjZSk7CiAgICAgbXkgJGV2ZW50VGFy
Z2V0ID0gJGNvZGVHZW5lcmF0b3ItPkluaGVyaXRzSW50ZXJmYWNlKCRpbnRlcmZhY2UsICJFdmVu
dFRhcmdldCIpICYmICRpbnRlcmZhY2UtPm5hbWUgbmUgIkV2ZW50VGFyZ2V0IjsKICAgICBteSAk
bmVlZHNWaXNpdENoaWxkcmVuID0gSW5zdGFuY2VOZWVkc1Zpc2l0Q2hpbGRyZW4oJGludGVyZmFj
ZSk7CisgICAgbXkgJHNlcmlhbGl6ZXJGdW5jdGlvbk5hbWUgPSAidG9KU09OIjsKKyAgICBteSAk
c2VyaWFsaXplck5hdGl2ZUZ1bmN0aW9uTmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5XS19sY2ZpcnN0
KCRjbGFzc05hbWUpIC4gIlByb3RvdHlwZUZ1bmN0aW9uIiAuICRjb2RlR2VuZXJhdG9yLT5XS191
Y2ZpcnN0KCRzZXJpYWxpemVyRnVuY3Rpb25OYW1lKTsKIAogICAgIG15ICRuYW1lZEdldHRlckZ1
bmN0aW9uID0gR2V0TmFtZWRHZXR0ZXJGdW5jdGlvbigkaW50ZXJmYWNlKTsKICAgICBteSAkaW5k
ZXhlZEdldHRlckZ1bmN0aW9uID0gR2V0SW5kZXhlZEdldHRlckZ1bmN0aW9uKCRpbnRlcmZhY2Up
OwpAQCAtMjA4Nyw2ICsyMDg5LDggQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOwogICAgIH0KIAorICAgIHB1c2goQGltcGxDb250
ZW50LCAiRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke3NlcmlhbGl6ZXJOYXRpdmVGdW5j
dGlvbk5hbWV9KEV4ZWNTdGF0ZSopO1xuXG4iKSBpZiAkaW50ZXJmYWNlLT5zZXJpYWxpemFibGU7
CisKICAgICBHZW5lcmF0ZVByb3RvdHlwZURlY2xhcmF0aW9uKFxAaW1wbENvbnRlbnQsICRjbGFz
c05hbWUsICRpbnRlcmZhY2UpIGlmICFIZWFkZXJOZWVkc1Byb3RvdHlwZURlY2xhcmF0aW9uKCRp
bnRlcmZhY2UpOwogCiAgICAgR2VuZXJhdGVDb25zdHJ1Y3RvckRlY2xhcmF0aW9uKFxAaW1wbENv
bnRlbnQsICRjbGFzc05hbWUsICRpbnRlcmZhY2UpIGlmIE5lZWRzQ29uc3RydWN0b3JQcm9wZXJ0
eSgkaW50ZXJmYWNlKTsKQEAgLTIyNDUsNiArMjI0OSwxNSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1l
bnRhdGlvbgogCiAgICAgbXkgJGp1c3RHZW5lcmF0ZVZhbHVlQXJyYXkgPSAhSXNET01HbG9iYWxP
YmplY3QoJGludGVyZmFjZSk7CiAKKyAgICBpZiAoJGludGVyZmFjZS0+c2VyaWFsaXphYmxlKSB7
CisgICAgICAgIHB1c2goQGhhc2hLZXlzLCAkc2VyaWFsaXplckZ1bmN0aW9uTmFtZSk7CisgICAg
ICAgIHB1c2goQGhhc2hWYWx1ZTEsICRzZXJpYWxpemVyTmF0aXZlRnVuY3Rpb25OYW1lKTsKKyAg
ICAgICAgcHVzaChAaGFzaFZhbHVlMiwgMCk7CisgICAgICAgIHB1c2goQGhhc2hTcGVjaWFscywg
IkpTQzo6RnVuY3Rpb24iKTsKKworICAgICAgICAkaGFzaFNpemUrKzsKKyAgICB9CisKICAgICAk
b2JqZWN0LT5HZW5lcmF0ZUhhc2hUYWJsZSgkaGFzaE5hbWUsICRoYXNoU2l6ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcQGhhc2hLZXlzLCBcQGhhc2hTcGVjaWFscywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcQGhhc2hWYWx1ZTEsIFxAaGFzaFZhbHVlMiwKQEAg
LTI1MzgsNiArMjU1MSw4IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAg
ICBteSAkYXR0cmlidXRlQ29uZGl0aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2VuZXJh
dGVDb25kaXRpb25hbFN0cmluZygkYXR0cmlidXRlLT5zaWduYXR1cmUpOwogICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIjaWYgJHthdHRyaWJ1dGVDb25kaXRpb25hbFN0cmluZ31cbiIp
IGlmICRhdHRyaWJ1dGVDb25kaXRpb25hbFN0cmluZzsKIAorICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJKU1ZhbHVlICR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihFeGVjU3RhdGUqLCAk
e2NsYXNzTmFtZX0qKTtcblxuIik7CisKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
RW5jb2RlZEpTVmFsdWUgJHtnZXRGdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCopXG4iKTsKICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAKQEAgLTI1NzAsOCArMjU4NSwyMSBA
QCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwg
XCIkaW50ZXJmYWNlTmFtZVwiLCBcIiRuYW1lXCIpO1xuIik7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOworCisgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSgk
e2dldEZ1bmN0aW9uTmFtZX1HZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTtcbiIpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKCR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihzdGF0ZSwgbnVs
bHB0cikpO1xuIik7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAifVxuXG4iKTsKKworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJKU1ZhbHVl
ICR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCAke2NsYXNzTmFtZX0q
IHRoaXNPYmplY3QpXG4iKTsKKworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4i
KTsKKworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BB
UkFNKHRoaXNPYmplY3QpO1xuIik7CisKICAgICAgICAgICAgIG15IEBhcmd1bWVudHMgPSAoKTsK
ICAgICAgICAgICAgIGlmICgkZ2V0dGVyRXhjZXB0aW9ucyAmJiAhSGFzQ3VzdG9tR2V0dGVyKCRh
dHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzKSkgewogICAgICAgICAgICAg
ICAgIHB1c2goQGFyZ3VtZW50cywgImVjIik7CkBAIC0yNTg4LDExICsyNjE2LDExIEBAIHN1YiBH
ZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1
ZGVzKCJGcmFtZS5oIik7CiAgICAgICAgICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJT
ZXR0aW5ncy5oIik7CiAgICAgICAgICAgICAgICAgICAgIG15ICRlbmFibGVfZnVuY3Rpb24gPSBU
b01ldGhvZE5hbWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
RW5hYmxlZEJ5U2V0dGluZyJ9KSAuICJFbmFibGVkIjsKLSAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzLT53cmFwcGVkKCku
ZnJhbWUoKSkpXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKLSAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgU2V0dGluZ3MmIHNldHRpbmdz
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpLmZyYW1lKCktPnNldHRpbmdzKCk7XG4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKFVOTElLRUxZKCF0aGlz
T2JqZWN0LT53cmFwcGVkKCkuZnJhbWUoKSkpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpO1xuIik7CisgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFNldHRpbmdzJiBzZXR0aW5n
cyA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5mcmFtZSgpLT5zZXR0aW5ncygpO1xuIik7CiAgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghc2V0dGluZ3MuJGVu
YWJsZV9mdW5jdGlvbigpKVxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7
CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTtcbiIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIApA
QCAtMjYwMyw4ICsyNjMxLDggQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAg
ICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2hlY2tTZWN1cml0eSJ9
ICYmCiAgICAgICAgICAgICAgICAgISRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkRvTm90Q2hlY2tTZWN1cml0eSJ9ICYmCiAgICAgICAgICAgICAgICAgISRhdHRy
aWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkRvTm90Q2hlY2tTZWN1cml0
eU9uR2V0dGVyIn0pIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBp
ZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhzdGF0ZSwg
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpKSlcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xu
Iik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFCaW5kaW5n
U2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coc3RhdGUsIHRoaXNPYmplY3Qt
PndyYXBwZWQoKSkpXG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7XG4iKTsKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5v
bmRldGVybWluaXN0aWMifSkgewpAQCAtMjYyMSwxMSArMjY0OSwxMSBAQCBzdWIgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgIG15ICRleGNlcHRpb25Db2RlID0gJGdldHRl
ckV4Y2VwdGlvbnNXaXRoTWVzc2FnZSA/ICJlYy5jb2RlIiA6ICgkZ2V0dGVyRXhjZXB0aW9ucyA/
ICJlYyIgOiAiMCIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBBdG9taWNTdHJpbmc+IGJpbmRpbmdOYW1lKFwiJGlu
dGVyZmFjZU5hbWUuJG5hbWVcIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7
XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoY3Vyc29y
LmlzQ2FwdHVyaW5nKCkpIHtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICAgICAkbWVtb2l6ZWRUeXBlIG1lbW9pemVkUmVzdWx0ID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpLiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCIgLiBqb2luKCIsICIsIEBhcmd1bWVudHMp
IC4gIik7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAg
JG1lbW9pemVkVHlwZSBtZW1vaXplZFJlc3VsdCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS4kaW1w
bEdldHRlckZ1bmN0aW9uTmFtZSgiIC4gam9pbigiLCAiLCBAYXJndW1lbnRzKSAuICIpO1xuIik7
CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGN1cnNvci5hcHBl
bmRJbnB1dDxNZW1vaXplZERPTVJlc3VsdDwkbWVtb2l6ZWRUeXBlPj4oYmluZGluZ05hbWUuZ2V0
KCkuc3RyaW5nKCksIG1lbW9pemVkUmVzdWx0LCAkZXhjZXB0aW9uQ29kZSk7XG4iKTsKLSAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSAi
IC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwg
Im1lbW9pemVkUmVzdWx0IiwgImNhc3RlZFRoaXMiKSAuICI7XG4iKTsKKyAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZl
VG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgIm1lbW9pemVk
UmVzdWx0IiwgInRoaXNPYmplY3QiKSAuICI7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7XG4iKSBpZiAk
Z2V0dGVyRXhjZXB0aW9uczsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpO1xuIik7CisgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiByZXN1bHQ7XG4iKTsKICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgaWYgKGN1cnNvci5pc1JlcGxheWluZygpKSB7XG4iKTsKQEAgLTI2MzMsNTkg
KzI2NjEsNTkgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgTWVtb2l6ZWRET01SZXN1bHRCYXNlKiBpbnB1dCA9
IGN1cnNvci5mZXRjaElucHV0PE1lbW9pemVkRE9NUmVzdWx0QmFzZT4oKTtcbiIpOwogICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBpZiAoaW5wdXQgJiYgaW5wdXQt
PmNvbnZlcnRUbzwkbWVtb2l6ZWRUeXBlPihtZW1vaXplZFJlc3VsdCkpIHtcbiIpOwogICAgICAg
ICAgICAgICAgICMgRklYTUU6IHRoZSBnZW5lcmF0ZWQgY29kZSBzaG91bGQgcmVwb3J0IGFuIGVy
cm9yIGlmIGFuIGlucHV0IGNhbm5vdCBiZSBmZXRjaGVkIG9yIGNvbnZlcnRlZC4KLSAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0g
IiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRlcmZhY2Us
ICJtZW1vaXplZFJlc3VsdCIsICJjYXN0ZWRUaGlzIikgLiAiO1xuIik7CisgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9ICIgLiBO
YXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNlLCAibWVt
b2l6ZWRSZXN1bHQiLCAidGhpc09iamVjdCIpIC4gIjtcbiIpOwogICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBpbnB1
dC0+ZXhjZXB0aW9uQ29kZSgpKTtcbiIpIGlmICRnZXR0ZXJFeGNlcHRpb25zOwotICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgICAgIH1cbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIH1cbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2Vu
ZGlmXG4iKTsKICAgICAgICAgICAgIH0gIyBhdHRyaWJ1dGUgTm9uZGV0ZXJtaW5pc3RpYwogCiAg
ICAgICAgICAgICBpZiAoSGFzQ3VzdG9tR2V0dGVyKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzKSkgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+JGltcGxHZXR0ZXJGdW5jdGlv
bk5hbWUoKnN0YXRlKSk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICByZXR1cm4gdGhpc09iamVjdC0+JGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUoKnN0YXRlKTtc
biIpOwogICAgICAgICAgICAgfSBlbHNpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ2hlY2tTZWN1cml0eUZvck5vZGUifSkgewogICAgICAgICAgICAgICAg
ICRpbXBsSW5jbHVkZXN7IkpTRE9NQmluZGluZy5oIn0gPSAxOwotICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKHN0YXRlLCBpbXBsLiIgLiAkYXR0
cmlidXRlLT5zaWduYXR1cmUtPm5hbWUgLiAiKCkpID8gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0
cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRlcmZhY2UsICJpbXBsLiRpbXBsR2V0dGVyRnVuY3Rp
b25OYW1lKCkiLCAiY2FzdGVkVGhpcyIpIC4gIiA6IGpzTnVsbCgpKTtcbiIpOworICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53
cmFwcGVkKCk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBy
ZXR1cm4gc2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUoc3RhdGUsIGltcGwuIiAuICRhdHRyaWJ1dGUt
PnNpZ25hdHVyZS0+bmFtZSAuICIoKSkgPyAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUt
PnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgImltcGwuJGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUo
KSIsICJ0aGlzT2JqZWN0IikgLiAiIDoganNOdWxsKCk7XG4iKTsKICAgICAgICAgICAgIH0gZWxz
aWYgKCR0eXBlIGVxICJFdmVudEhhbmRsZXIiKSB7CiAgICAgICAgICAgICAgICAgbXkgJGdldHRl
ciA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IldpbmRvd0V2
ZW50SGFuZGxlciJ9ID8gIndpbmRvd0V2ZW50SGFuZGxlckF0dHJpYnV0ZSIKICAgICAgICAgICAg
ICAgICAgICAgOiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJE
b2N1bWVudEV2ZW50SGFuZGxlciJ9ID8gImRvY3VtZW50RXZlbnRIYW5kbGVyQXR0cmlidXRlIgog
ICAgICAgICAgICAgICAgICAgICA6ICJldmVudEhhbmRsZXJBdHRyaWJ1dGUiOwogICAgICAgICAg
ICAgICAgIG15ICRldmVudE5hbWUgPSBFdmVudEhhbmRsZXJBdHRyaWJ1dGVFdmVudE5hbWUoJGF0
dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoJGdldHRlcihjYXN0ZWRUaGlzLT53cmFwcGVkKCks
ICRldmVudE5hbWUpKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIHJldHVybiAkZ2V0dGVyKHRoaXNPYmplY3QtPndyYXBwZWQoKSwgJGV2ZW50TmFtZSk7XG4i
KTsKICAgICAgICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSA9fiAv
Q29uc3RydWN0b3IkLykgewogICAgICAgICAgICAgICAgIG15ICRjb25zdHJ1Y3RvclR5cGUgPSAk
YXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGU7CiAgICAgICAgICAgICAgICAgJGNvbnN0cnVjdG9y
VHlwZSA9fiBzL0NvbnN0cnVjdG9yJC8vOwotICAgICAgICAgICAgICAgICMgV2hlbiBDb25zdHJ1
Y3RvciBhdHRyaWJ1dGUgaXMgdXNlZCBieSBET01XaW5kb3cuaWRsLCBpdCdzIGNvcnJlY3QgdG8g
cGFzcyBjYXN0ZWRUaGlzIGFzIHRoZSBnbG9iYWwgb2JqZWN0Ci0gICAgICAgICAgICAgICAgIyBX
aGVuIEpTRE9NV3JhcHBlcnMgaGF2ZSBhIGJhY2stcG9pbnRlciB0byB0aGUgZ2xvYmFsT2JqZWN0
IHdlIGNhbiBwYXNzIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpCisgICAgICAgICAgICAgICAg
IyBXaGVuIENvbnN0cnVjdG9yIGF0dHJpYnV0ZSBpcyB1c2VkIGJ5IERPTVdpbmRvdy5pZGwsIGl0
J3MgY29ycmVjdCB0byBwYXNzIHRoaXNPYmplY3QgYXMgdGhlIGdsb2JhbCBvYmplY3QKKyAgICAg
ICAgICAgICAgICAjIFdoZW4gSlNET01XcmFwcGVycyBoYXZlIGEgYmFjay1wb2ludGVyIHRvIHRo
ZSBnbG9iYWxPYmplY3Qgd2UgY2FuIHBhc3MgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCkKICAg
ICAgICAgICAgICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKICAgICAg
ICAgICAgICAgICAgICAgbXkgJG5hbWVkID0gKCRjb25zdHJ1Y3RvclR5cGUgPX4gL05hbWVkJC8p
ID8gIk5hbWVkIiA6ICIiOwogICAgICAgICAgICAgICAgICAgICAkY29uc3RydWN0b3JUeXBlID1+
IHMvTmFtZWQkLy87Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlMiIC4gJGNvbnN0cnVjdG9yVHlwZSAuICI6OmdldCR7
bmFtZWR9Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGNhc3RlZFRoaXMpKTtcbiIpOworICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlMiIC4gJGNvbnN0
cnVjdG9yVHlwZSAuICI6OmdldCR7bmFtZWR9Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIHRoaXNP
YmplY3QpO1xuIik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAg
ICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTIiAuICRjb25zdHJ1Y3RvclR5cGUgLiAiLmgiLCAkYXR0
cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25kaXRpb25hbCJ9KTsK
LSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShKUyIgLiAkY29uc3RydWN0b3JUeXBlIC4gIjo6Z2V0Q29uc3RydWN0b3Ioc3Rh
dGUtPnZtKCksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKSk7XG4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTIiAuICRjb25zdHJ1Y3Rv
clR5cGUgLiAiOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgdGhpc09iamVjdC0+Z2xvYmFs
T2JqZWN0KCkpO1xuIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNpZiAo
ISRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkdldHRlclJhaXNl
c0V4Y2VwdGlvbiJ9ICYmICEkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJHZXR0ZXJSYWlzZXNFeGNlcHRpb25XaXRoTWVzc2FnZSJ9KSB7CiAgICAgICAgICAgICAg
ICAgbXkgJGNhY2hlSW5kZXggPSAwOwogICAgICAgICAgICAgICAgIGlmICgkYXR0cmlidXRlLT5z
aWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWNoZWRBdHRyaWJ1dGUifSkgewogICAg
ICAgICAgICAgICAgICAgICAkY2FjaGVJbmRleCA9ICRjdXJyZW50Q2FjaGVkQXR0cmlidXRlOwog
ICAgICAgICAgICAgICAgICAgICAkY3VycmVudENhY2hlZEF0dHJpYnV0ZSsrOwotICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1
ZSA9IGNhc3RlZFRoaXMtPm1fIiAuICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSAuICIuZ2V0
KCkpXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FjaGVkVmFsdWUpO1xuIik7CisgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChKU1ZhbHVlIGNhY2hlZFZhbHVlID0g
dGhpc09iamVjdC0+bV8iIC4gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lIC4gIi5nZXQoKSlc
biIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0
dXJuIGNhY2hlZFZhbHVlO1xuIik7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAg
ICAgbXkgQGNhbGxXaXRoQXJncyA9IEdlbmVyYXRlQ2FsbFdpdGgoJGF0dHJpYnV0ZS0+c2lnbmF0
dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifSwgXEBpbXBsQ29udGVudCwgIkpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSIpOworICAgICAgICAgICAgICAgIG15IEBjYWxs
V2l0aEFyZ3MgPSBHZW5lcmF0ZUNhbGxXaXRoKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkNhbGxXaXRoIn0sIFxAaW1wbENvbnRlbnQsICJqc1VuZGVmaW5lZCgp
Iik7CiAKICAgICAgICAgICAgICAgICBpZiAoJHN2Z0xpc3RQcm9wZXJ0eVR5cGUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSByZXN1bHQgPSAg
IiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRlcmZhY2Us
ICJjYXN0ZWRUaGlzLT53cmFwcGVkKCkuJGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUoIiAuIChqb2lu
ICIsICIsIEBjYWxsV2l0aEFyZ3MpIC4gIikiLCAiY2FzdGVkVGhpcyIpIC4gIjtcbiIpOworICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHJlc3VsdCA9
ICAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFj
ZSwgInRoaXNPYmplY3QtPndyYXBwZWQoKS4kaW1wbEdldHRlckZ1bmN0aW9uTmFtZSgiIC4gKGpv
aW4gIiwgIiwgQGNhbGxXaXRoQXJncykgLiAiKSIsICJ0aGlzT2JqZWN0IikgLiAiO1xuIik7CiAg
ICAgICAgICAgICAgICAgfSBlbHNpZiAoJHN2Z1Byb3BlcnR5T3JMaXN0UHJvcGVydHlUeXBlKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRzdmdQcm9wZXJ0
eU9yTGlzdFByb3BlcnR5VHlwZSYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKS5wcm9wZXJ0
eVJlZmVyZW5jZSgpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICRzdmdQcm9wZXJ0eU9yTGlzdFByb3BlcnR5VHlwZSYgaW1wbCA9IHRoaXNPYmplY3Qt
PndyYXBwZWQoKS5wcm9wZXJ0eVJlZmVyZW5jZSgpO1xuIik7CiAgICAgICAgICAgICAgICAgICAg
IGlmICgkc3ZnUHJvcGVydHlPckxpc3RQcm9wZXJ0eVR5cGUgZXEgImZsb2F0IikgeyAjIFNwZWNp
YWwgY2FzZSBmb3IgSlNTVkdOdW1iZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIEpTVmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0
cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRlcmZhY2UsICJpbXBsIiwgImNhc3RlZFRoaXMiKSAu
ICI7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IEpTVmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1
cmUsIDAsICRpbnRlcmZhY2UsICJpbXBsIiwgInRoaXNPYmplY3QiKSAuICI7XG4iKTsKICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIEpTVmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0
cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRlcmZhY2UsICJpbXBsLiRpbXBsR2V0dGVyRnVuY3Rp
b25OYW1lKCIgLiAoam9pbiAiLCAiLCBAY2FsbFdpdGhBcmdzKSAuICIpIiwgImNhc3RlZFRoaXMi
KSAuICI7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIEpTVmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWdu
YXR1cmUsIDAsICRpbnRlcmZhY2UsICJpbXBsLiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCIgLiAo
am9pbiAiLCAiLCBAY2FsbFdpdGhBcmdzKSAuICIpIiwgInRoaXNPYmplY3QiKSAuICI7XG4iKTsK
IAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTI3
MDIsMzMgKzI3MzAsMzMgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgIHVuc2hpZnQoQGFyZ3VtZW50cywgQGNh
bGxXaXRoQXJncyk7Ci0gICAgICAgICAgICAgICAgICAgIG15ICRqc1R5cGUgPSBOYXRpdmVUb0pT
VmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNlLCAiJHtmdW5jdGlvbk5h
bWV9KCIgLiBqb2luKCIsICIsIEBhcmd1bWVudHMpIC4gIikiLCAiY2FzdGVkVGhpcyIpOwotICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpO1xuIikgaWYgISRhdHRyaWJ1dGUtPmlzU3RhdGljOworICAgICAg
ICAgICAgICAgICAgICBteSAkanNUeXBlID0gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNp
Z25hdHVyZSwgMCwgJGludGVyZmFjZSwgIiR7ZnVuY3Rpb25OYW1lfSgiIC4gam9pbigiLCAiLCBA
YXJndW1lbnRzKSAuICIpIiwgInRoaXNPYmplY3QiKTsKKyAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTtc
biIpIGlmICEkYXR0cmlidXRlLT5pc1N0YXRpYzsKICAgICAgICAgICAgICAgICAgICAgaWYgKCRj
b2RlR2VuZXJhdG9yLT5Jc1NWR0FuaW1hdGVkVHlwZSgkdHlwZSkpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8gb2JqID0gJGpzVHlwZTtcbiIp
OwotICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1
ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgb2JqLmdl
dCgpKTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3Qo
KSwgb2JqLmdldCgpKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSByZXN1bHQg
PSAkanNUeXBlO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBjYXN0ZWRUaGlzLT5t
XyIgLiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUgLiAiLnNldChzdGF0ZS0+dm0oKSwgY2Fz
dGVkVGhpcywgcmVzdWx0KTtcbiIpIGlmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJDYWNoZWRBdHRyaWJ1dGUifSk7Ci0gICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpO1xuIik7Cisg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdGhpc09iamVjdC0+bV8iIC4g
JGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lIC4gIi5zZXQoc3RhdGUtPnZtKCksIHRoaXNPYmpl
Y3QsIHJlc3VsdCk7XG4iKSBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiQ2FjaGVkQXR0cmlidXRlIn0pOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIHJldHVybiByZXN1bHQ7XG4iKTsKIAogICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICB1bnNoaWZ0KEBhcmd1bWVudHMsIEdlbmVyYXRlQ2FsbFdpdGgoJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifSwgXEBp
bXBsQ29udGVudCwgIkpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSIpKTsKKyAgICAgICAg
ICAgICAgICB1bnNoaWZ0KEBhcmd1bWVudHMsIEdlbmVyYXRlQ2FsbFdpdGgoJGF0dHJpYnV0ZS0+
c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifSwgXEBpbXBsQ29udGVu
dCwgImpzVW5kZWZpbmVkKCkiKSk7CiAKICAgICAgICAgICAgICAgICBpZiAoJHN2Z1Byb3BlcnR5
T3JMaXN0UHJvcGVydHlUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICRzdmdQcm9wZXJ0eU9yTGlzdFByb3BlcnR5VHlwZSBpbXBsKCpjYXN0ZWRUaGlz
LT53cmFwcGVkKCkpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIEpTVmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5z
aWduYXR1cmUsIDAsICRpbnRlcmZhY2UsICJpbXBsLiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCIg
LiBqb2luKCIsICIsIEBhcmd1bWVudHMpIC4gIikiLCAiY2FzdGVkVGhpcyIpIC4gIjtcbiIpOwor
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkc3ZnUHJvcGVydHlP
ckxpc3RQcm9wZXJ0eVR5cGUgaW1wbCgqdGhpc09iamVjdC0+d3JhcHBlZCgpKTtcbiIpOworICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHJlc3VsdCA9
ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNl
LCAiaW1wbC4kaW1wbEdldHRlckZ1bmN0aW9uTmFtZSgiIC4gam9pbigiLCAiLCBAYXJndW1lbnRz
KSAuICIpIiwgInRoaXNPYmplY3QiKSAuICI7XG4iKTsKICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgk
YXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRlcmZhY2UsICJpbXBsLiRpbXBsR2V0dGVyRnVu
Y3Rpb25OYW1lKCIgLiBqb2luKCIsICIsIEBhcmd1bWVudHMpIC4gIikiLCAiY2FzdGVkVGhpcyIp
IC4gIjtcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpO1xuIik7CisgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2ZVRv
SlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRlcmZhY2UsICJpbXBsLiRpbXBs
R2V0dGVyRnVuY3Rpb25OYW1lKCIgLiBqb2luKCIsICIsIEBhcmd1bWVudHMpIC4gIikiLCAidGhp
c09iamVjdCIpIC4gIjtcbiIpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpO1xuIik7
CiAKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICByZXR1cm4gcmVzdWx0O1xuIik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKQEAgLTMyMjksNiArMzI1Nyw4IEBAIEVORAog
CiAgICAgfQogCisgICAgR2VuZXJhdGVTZXJpYWxpemVyRnVuY3Rpb24oJGludGVyZmFjZSwgJGlu
dGVyZmFjZU5hbWUsICRjbGFzc05hbWUsICRzZXJpYWxpemVyRnVuY3Rpb25OYW1lLCAkc2VyaWFs
aXplck5hdGl2ZUZ1bmN0aW9uTmFtZSkgaWYgJGludGVyZmFjZS0+c2VyaWFsaXphYmxlOworCiAg
ICAgaWYgKCRpbnRlcmZhY2UtPml0ZXJhYmxlKSB7CiAgICAgICAgIEdlbmVyYXRlSW1wbGVtZW50
YXRpb25JdGVyYWJsZUZ1bmN0aW9ucygkaW50ZXJmYWNlKTsKICAgICB9CkBAIC0zNDQxLDYgKzM0
NzEsMzAgQEAgRU5ECiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiNlbmRpZiAvLyAke2NvbmRp
dGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwogfQogCitzdWIgR2VuZXJh
dGVTZXJpYWxpemVyRnVuY3Rpb24KK3sKKyAgICBteSAoJGludGVyZmFjZSwgJGludGVyZmFjZU5h
bWUsICRjbGFzc05hbWUsICRzZXJpYWxpemVyRnVuY3Rpb25OYW1lLCAkc2VyaWFsaXplck5hdGl2
ZUZ1bmN0aW9uTmFtZSkgPSBAXzsKKworICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJPYmplY3RDb25z
dHJ1Y3Rvci5oIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMICR7c2VyaWFsaXplck5hdGl2ZUZ1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBzdGF0
ZSlcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CisgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgYXV0byBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKUyRpbnRlcmZhY2VO
YW1lKj4oc3RhdGUtPnRoaXNWYWx1ZSgpKTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsIFwiJGludGVyZmFj
ZU5hbWVcIiwgXCIkc2VyaWFsaXplckZ1bmN0aW9uTmFtZVwiKTtcbiIpOworICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJHtj
bGFzc05hbWV9OjppbmZvKCkpO1xuXG4iKSB1bmxlc3MgJGludGVyZmFjZU5hbWUgZXEgIkV2ZW50
VGFyZ2V0IjsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiByZXN1bHQgPSBjb25z
dHJ1Y3RFbXB0eU9iamVjdChzdGF0ZSk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTtcbiIpOworICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAo
QHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSkgeworICAgICAgICBteSAkbmFtZSA9ICRhdHRyaWJ1
dGUtPnNpZ25hdHVyZS0+bmFtZTsKKyAgICAgICAgaWYgKGdyZXAgJF8gZXEgJG5hbWUsIEB7JGlu
dGVyZmFjZS0+c2VyaWFsaXphYmxlLT5hdHRyaWJ1dGVzfSkgeworICAgICAgICAgICAgbXkgJGdl
dEZ1bmN0aW9uTmFtZSA9IEdldEF0dHJpYnV0ZUdldHRlck5hbWUoJGludGVyZmFjZSwgJGNsYXNz
TmFtZSwgJGF0dHJpYnV0ZSk7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIFwiJHtuYW1l
fVwiKSwgJHtnZXRGdW5jdGlvbk5hbWV9R2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7XG4iKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxu
Iik7Cit9CisKIHN1YiBHZW5lcmF0ZUZ1bmN0aW9uQ2FzdGVkVGhpcwogewogICAgIG15ICgkaW50
ZXJmYWNlLCAkY2xhc3NOYW1lLCAkZnVuY3Rpb24pID0gQF87CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbSBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtCmluZGV4IGM4ZDNlMDk0NDA4Y2I4MGRlNmZkODBk
ZDg3ZmU0ZDZhZjliZDJlYTguLmZhMGM4ZWRjYzQzMzMzZjhjMjI0ZGEwMGE0YzU5MjA5Zjc1OGIz
OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2Vy
LnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtCkBA
IC01Nyw2ICs1Nyw3IEBAIHN0cnVjdCggZG9tSW50ZXJmYWNlID0+IHsKICAgICBpc0NhbGxiYWNr
ID0+ICckJywgIyBVc2VkIGZvciBjYWxsYmFjayBpbnRlcmZhY2VzCiAgICAgaXNQYXJ0aWFsID0+
ICckJywgIyBVc2VkIGZvciBwYXJ0aWFsIGludGVyZmFjZXMKICAgICBpdGVyYWJsZSA9PiAnJCcs
ICMgVXNlZCBmb3IgaXRlcmFibGUgaW50ZXJmYWNlcworICAgIHNlcmlhbGl6YWJsZSA9PiAnJCcs
ICMgVXNlZCBmb3Igc2VyaWFsaXphYmxlIGludGVyZmFjZXMKIH0pOwogCiAjIFVzZWQgdG8gcmVw
cmVzZW50IGRvbUludGVyZmFjZSBjb250ZW50cyAobmFtZSBvZiBtZXRob2QsIHNpZ25hdHVyZSkK
QEAgLTk1LDYgKzk2LDEwIEBAIHN0cnVjdCggZG9tSXRlcmFibGUgPT4gewogICAgIGZ1bmN0aW9u
cyA9PiAnQCcsICMgSXRlcmFibGUgZnVuY3Rpb25zIChlbnRyaWVzLCBrZXlzLCB2YWx1ZXMsIFtT
eW1ib2wuSXRlcmF0b3JdLCBmb3JFYWNoKQogfSk7CiAKKyMgVXNlZCB0byByZXByZXNlbnQgc2Vy
aWFsaXphYmxlIGludGVyZmFjZQorc3RydWN0KCBkb21TZXJpYWxpemFibGUgPT4geworICAgIGF0
dHJpYnV0ZXMgPT4gJ0AnLCAjIExpc3Qgb2YgYXR0cmlidXRlcyB0byBzZXJpYWxpemUKK30pOwog
CiAjIFVzZWQgdG8gcmVwcmVzZW50IHN0cmluZyBjb25zdGFudHMKIHN0cnVjdCggZG9tQ29uc3Rh
bnQgPT4gewpAQCAtMTAzMCw3ICsxMDM1LDE2IEBAIHN1YiBwYXJzZVNlcmlhbGl6ZXIKICAgICBt
eSAkbmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsKICAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEg
InNlcmlhbGl6ZXIiKSB7CiAgICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5n
ZXRUb2tlbigpLCAic2VyaWFsaXplciIsIF9fTElORV9fKTsKLSAgICAgICAgcmV0dXJuICRzZWxm
LT5wYXJzZVNlcmlhbGl6ZXJSZXN0KCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOworICAgICAgICBt
eSAkbmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsKKyAgICAgICAgbXkgJG5ld0RhdGFOb2RlOwor
ICAgICAgICBpZiAoJG5leHQtPnZhbHVlKCkgbmUgIjsiKSB7CisgICAgICAgICAgICAkbmV3RGF0
YU5vZGUgPSAkc2VsZi0+cGFyc2VTZXJpYWxpemVyUmVzdCgkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0
KTsKKyAgICAgICAgICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tlbigpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgJG5ld0RhdGFOb2RlID0gZG9tU2VyaWFsaXphYmxlLT5uZXco
KTsKKyAgICAgICAgfQorICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0
VG9rZW4oKSwgIjsiLCBfX0xJTkVfXyk7CisgICAgICAgIHJldHVybiAkbmV3RGF0YU5vZGU7CiAg
ICAgfQogICAgICRzZWxmLT5hc3NlcnRVbmV4cGVjdGVkVG9rZW4oJG5leHQtPnZhbHVlKCksIF9f
TElORV9fKTsKIH0KQEAgLTEwNDMsNyArMTA1NywxMCBAQCBzdWIgcGFyc2VTZXJpYWxpemVyUmVz
dAogICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tlbigpOwogICAgIGlmICgkbmV4dC0+dmFs
dWUoKSBlcSAiPSIpIHsKICAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdl
dFRva2VuKCksICI9IiwgX19MSU5FX18pOwotICAgICAgICByZXR1cm4gJHNlbGYtPnBhcnNlU2Vy
aWFsaXphdGlvblBhdHRlcm4oJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7CisgICAgICAgIG15ICRh
dHRyaWJ1dGVzID0gJHNlbGYtPnBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm4oKTsKKyAgICAgICAg
bXkgJG5ld0RhdGFOb2RlID0gZG9tU2VyaWFsaXphYmxlLT5uZXcoKTsKKyAgICAgICAgJG5ld0Rh
dGFOb2RlLT5hdHRyaWJ1dGVzKCRhdHRyaWJ1dGVzKTsKKyAgICAgICAgcmV0dXJuICRuZXdEYXRh
Tm9kZTsKICAgICB9CiAgICAgaWYgKCRuZXh0LT50eXBlKCkgPT0gSWRlbnRpZmllclRva2VuIHx8
ICRuZXh0LT52YWx1ZSgpIGVxICIoIikgewogICAgICAgICByZXR1cm4gJHNlbGYtPnBhcnNlT3Bl
cmF0aW9uUmVzdCgkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKQEAgLTEwNTMsNTkgKzEwNzAsNDUg
QEAgc3ViIHBhcnNlU2VyaWFsaXplclJlc3QKIHN1YiBwYXJzZVNlcmlhbGl6YXRpb25QYXR0ZXJu
CiB7CiAgICAgbXkgJHNlbGYgPSBzaGlmdDsKLSAgICBteSAkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0
ID0gc2hpZnQ7CiAKICAgICBteSAkbmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsKICAgICBpZiAo
JG5leHQtPnZhbHVlKCkgZXEgInsiKSB7CiAgICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVl
KCRzZWxmLT5nZXRUb2tlbigpLCAieyIsIF9fTElORV9fKTsKLSAgICAgICAgJHNlbGYtPnBhcnNl
U2VyaWFsaXphdGlvblBhdHRlcm5NYXAoKTsKKyAgICAgICAgbXkgJGF0dHJpYnV0ZXMgPSAkc2Vs
Zi0+cGFyc2VTZXJpYWxpemF0aW9uQXR0cmlidXRlcygpOwogICAgICAgICAkc2VsZi0+YXNzZXJ0
VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIn0iLCBfX0xJTkVfXyk7Ci0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgcmV0dXJuIFxAeyRhdHRyaWJ1dGVzfTsKICAgICB9CiAgICAgaWYgKCRu
ZXh0LT52YWx1ZSgpIGVxICJbIikgewotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgk
c2VsZi0+Z2V0VG9rZW4oKSwgIlsiLCBfX0xJTkVfXyk7Ci0gICAgICAgICRzZWxmLT5wYXJzZVNl
cmlhbGl6YXRpb25QYXR0ZXJuTGlzdCgpOwotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1
ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIl0iLCBfX0xJTkVfXyk7Ci0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgZGllICJTZXJpYWxpemF0aW9uIG9mIGxpc3RzIHBhdHRlcm4gaXMgbm90IGN1cnJlbnRs
eSBzdXBwb3J0ZWQuIjsKICAgICB9CiAgICAgaWYgKCRuZXh0LT50eXBlKCkgPT0gSWRlbnRpZmll
clRva2VuKSB7Ci0gICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblR5cGUoJHNlbGYtPmdldFRva2Vu
KCksIElkZW50aWZpZXJUb2tlbik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgbXkgQGF0dHJp
YnV0ZXMgPSAoKTsKKyAgICAgICAgbXkgJHRva2VuID0gJHNlbGYtPmdldFRva2VuKCk7CisgICAg
ICAgICRzZWxmLT5hc3NlcnRUb2tlblR5cGUoJHRva2VuLCBJZGVudGlmaWVyVG9rZW4pOworICAg
ICAgICBwdXNoKEBhdHRyaWJ1dGVzLCAkdG9rZW4tPnZhbHVlKCkpOworICAgICAgICByZXR1cm4g
XEBhdHRyaWJ1dGVzOwogICAgIH0KICAgICAkc2VsZi0+YXNzZXJ0VW5leHBlY3RlZFRva2VuKCRu
ZXh0LT52YWx1ZSgpLCBfX0xJTkVfXyk7CiB9CiAKLXN1YiBwYXJzZVNlcmlhbGl6YXRpb25QYXR0
ZXJuTWFwCitzdWIgcGFyc2VTZXJpYWxpemF0aW9uQXR0cmlidXRlcwogewogICAgIG15ICRzZWxm
ID0gc2hpZnQ7Ci0gICAgbXkgJG5leHQgPSAkc2VsZi0+bmV4dFRva2VuKCk7Ci0gICAgaWYgKCRu
ZXh0LT52YWx1ZSgpIGVxICJnZXR0ZXIiKSB7Ci0gICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZh
bHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiZ2V0dGVyIiwgX19MSU5FX18pOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAiaW5oZXJpdCIpIHsKLSAgICAg
ICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICJpbmhlcml0Iiwg
X19MSU5FX18pOwotICAgICAgICAkc2VsZi0+cGFyc2VJZGVudGlmaWVycygpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIGlmICgkbmV4dC0+dHlwZSgpID09IElkZW50aWZpZXJUb2tlbikg
ewotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5UeXBlKCRzZWxmLT5nZXRUb2tlbigpLCBJZGVu
dGlmaWVyVG9rZW4pOwotICAgICAgICAkc2VsZi0+cGFyc2VJZGVudGlmaWVycygpOwotICAgIH0K
LX0KKyAgICBteSAkdG9rZW4gPSAkc2VsZi0+Z2V0VG9rZW4oKTsKKworICAgIGlmICgkdG9rZW4t
PnZhbHVlKCkgZXEgImdldHRlciIpIHsKKyAgICAgICAgZGllICJTZXJpYWxpemVyIGdldHRlciBr
ZXl3b3JkIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLiI7CiAKLXN1YiBwYXJzZVNlcmlhbGl6
YXRpb25QYXR0ZXJuTGlzdAotewotICAgIG15ICRzZWxmID0gc2hpZnQ7Ci0gICAgbXkgJG5leHQg
PSAkc2VsZi0+bmV4dFRva2VuKCk7Ci0gICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJnZXR0ZXIi
KSB7Ci0gICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAi
Z2V0dGVyIiwgX19MSU5FX18pOwotICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICgkbmV4
dC0+dHlwZSgpID09IElkZW50aWZpZXJUb2tlbikgewotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9r
ZW5UeXBlKCRzZWxmLT5nZXRUb2tlbigpLCBJZGVudGlmaWVyVG9rZW4pOwotICAgICAgICAkc2Vs
Zi0+cGFyc2VJZGVudGlmaWVycygpOworICAgIGlmICgkdG9rZW4tPnZhbHVlKCkgZXEgImluaGVy
aXQiKSB7CisgICAgICAgIGRpZSAiU2VyaWFsaXplciBpbmhlcml0IGtleXdvcmQgaXMgbm90IGN1
cnJlbnRseSBzdXBwb3J0ZWQuIjsKICAgICB9CisKKyAgICBteSBAYXR0cmlidXRlcyA9ICgpOwor
ICAgICRzZWxmLT5hc3NlcnRUb2tlblR5cGUoJHRva2VuLCBJZGVudGlmaWVyVG9rZW4pOworICAg
IHB1c2goQGF0dHJpYnV0ZXMsICR0b2tlbi0+dmFsdWUoKSk7CisgICAgcHVzaChAYXR0cmlidXRl
cywgQHskc2VsZi0+cGFyc2VJZGVudGlmaWVycygpfSk7CisgICAgcmV0dXJuIFxAYXR0cmlidXRl
czsKIH0KIAogc3ViIHBhcnNlSWRlbnRpZmllckxpc3QKQEAgLTIyODcsNiArMjI5MCwxOSBAQCBz
dWIgYXBwbHlNZW1iZXJMaXN0CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBuZXh0OwogICAg
ICAgICB9CisgICAgICAgIGlmIChyZWYoJGl0ZW0pIGVxICJkb21TZXJpYWxpemFibGUiKSB7Cisg
ICAgICAgICAgICAkaW50ZXJmYWNlLT5zZXJpYWxpemFibGUoJGl0ZW0pOworICAgICAgICAgICAg
bmV4dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgkaW50ZXJmYWNlLT5zZXJpYWxpemFi
bGUpIHsKKyAgICAgICAgbXkgJG51bVNlcmlhbGl6ZXJBdHRyaWJ1dGVzID0gQHskaW50ZXJmYWNl
LT5zZXJpYWxpemFibGUtPmF0dHJpYnV0ZXN9OworICAgICAgICBpZiAoJG51bVNlcmlhbGl6ZXJB
dHRyaWJ1dGVzID09IDApIHsKKyAgICAgICAgICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHsk
aW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSkgeworICAgICAgICAgICAgICAgIHB1c2goQHskaW50ZXJm
YWNlLT5zZXJpYWxpemFibGUtPmF0dHJpYnV0ZXN9LCAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5h
bWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2Jq
ZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RB
Y3RpdmVET01PYmplY3QuY3BwCmluZGV4IDQ1YzdlYjkxNDU5YWY5YzJiYzYxODQ4ZTUyMDlhNmQ5
Mjc1OGQ0ZjUuLjEwNzlmZWIzMTk3MzY5ZjEyYTgzZjI3NmU5Yzk5ODFmZTBkMTg2NTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3Rp
dmVET01PYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCkBAIC0xNDksNiArMTQ5LDggQEAgYm9vbCBK
U1Rlc3RBY3RpdmVET01PYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIHN0YXQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK0pTVmFsdWUganNUZXN0
QWN0aXZlRE9NT2JqZWN0RXhjaXRpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdEFjdGl2
ZURPTU9iamVjdCopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RFeGNp
dGluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUsIEpTT2JqZWN0KikKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTU4
LDExICsxNjAsMTggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0RXhjaXRp
bmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHUKICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3Rh
dGUsICJUZXN0QWN0aXZlRE9NT2JqZWN0IiwgImV4Y2l0aW5nQXR0ciIpOwogICAgIH0KLSAgICBp
ZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhzdGF0ZSwg
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0QWN0aXZlRE9NT2JqZWN0RXhjaXRpbmdB
dHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0QWN0aXZl
RE9NT2JqZWN0RXhjaXRpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEFjdGl2
ZURPTU9iamVjdCogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAg
IFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hv
dWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhzdGF0ZSwgdGhpc09iamVjdC0+d3JhcHBlZCgpKSkK
KyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuZXhjaXRp
bmdBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1
cm4gcmVzdWx0OwogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAppbmRl
eCA5YjdlNmE3ZDMwYTBkYTk5YjcxNGEzZmJjMTc1MTU0OWJiMTQ1NTEwLi5kODI2NWExNzY5ZDg0
NTdmMDNmYzk3NjliYjI5Zjc0NDZkN2I1YzBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3Ry
dWN0b3IuY3BwCkBAIC0xNzYsNiArMTc2LDggQEAgdm9pZCBKU1Rlc3RFdmVudENvbnN0cnVjdG9y
OjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogICAgIHRoaXNPYmplY3QtPkpTVGVzdEV2ZW50
Q29uc3RydWN0b3I6On5KU1Rlc3RFdmVudENvbnN0cnVjdG9yKCk7CiB9CiAKK0pTVmFsdWUganNU
ZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIxR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdEV2ZW50Q29u
c3RydWN0b3IqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIx
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
LCBKU09iamVjdCopCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE4NSwxMiArMTg3
LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMShFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVz
dEV2ZW50Q29uc3RydWN0b3IiLCAiYXR0cjEiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEV2
ZW50Q29uc3RydWN0b3JBdHRyMUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1Zh
bHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RFdmVudENvbnN0cnVjdG9yKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhD
YWNoZShzdGF0ZSwgaW1wbC5hdHRyMSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdEV2ZW50Q29u
c3RydWN0b3JBdHRyMkdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yKik7
CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3Qq
KQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMDAsMTMgKzIxMSwyMiBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjIoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpcwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAg
ICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RFdmVudENvbnN0
cnVjdG9yIiwgImF0dHIyIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RFdmVudENvbnN0cnVj
dG9yQXR0cjJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RF
dmVudENvbnN0cnVjdG9yQXR0cjJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0RXZlbnRD
b25zdHJ1Y3RvciogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAg
IFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+
d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUs
IGltcGwuYXR0cjIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKIAogI2lmIEVOQUJMRShTUEVDSUFMX0VWRU5UKQorSlNWYWx1
ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjNHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0RXZl
bnRDb25zdHJ1Y3RvciopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9y
QXR0cjMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUsIEpTT2JqZWN0KikKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjE2LDkg
KzIzNiwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjMoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpcwogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwg
IlRlc3RFdmVudENvbnN0cnVjdG9yIiwgImF0dHIzIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rl
c3RFdmVudENvbnN0cnVjdG9yQXR0cjNHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKwor
SlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjNHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0RXZlbnRDb25zdHJ1Y3RvciogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdX
aXRoQ2FjaGUoc3RhdGUsIGltcGwuYXR0cjMoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0
aW9uLmNwcAppbmRleCAyNDM4ZDU4OTg5OGMxOGYzMmYzOGQyMDZjZDlmNDUxZDFiYTcwZTE3Li5l
YmRmOWZhZjFkMWIyODJlODA0MDgyMjAxNWJkOTg1ZDQ5MjI3ZDA3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0
aW9uLmNwcApAQCAtMTQxLDYgKzE0MSw4IEBAIGJvb2wgSlNUZXN0RXhjZXB0aW9uOjpnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCitKU1ZhbHVlIGpzVGVzdEV4Y2VwdGlvbk5hbWVHZXR0ZXIoRXhl
Y1N0YXRlKiwgSlNUZXN0RXhjZXB0aW9uKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEV4Y2Vw
dGlvbk5hbWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUsIEpTT2JqZWN0KikKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTUw
LDkgKzE1MiwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFeGNlcHRpb25OYW1lKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUAogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0
ZSwgIlRlc3RFeGNlcHRpb24iLCAibmFtZSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0RXhj
ZXB0aW9uTmFtZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVz
dEV4Y2VwdGlvbk5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0RXhjZXB0aW9uKiB0
aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFN
KHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5uYW1lKCkp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0
OwogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAKaW5kZXggMTM3MDk2ZjA0NjcwOGUx
OTI5MjAwZDUwOTZhN2YxNjM5ZWZlOGEyMC4uMDc1MTdkN2QwY2I3OTM0NGIwMjA3YjFiZjUyOTE3
MjE2YzgyNjMwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAKQEAgLTE1NCw2ICsxNTQs
OCBAQCBib29sIEpTVGVzdEdsb2JhbE9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiwg
SlNUZXN0R2xvYmFsT2JqZWN0Kik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVj
dFJlZ3VsYXJBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KikKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwpAQCAtMTYzLDEzICsxNjUsMjIgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0
UmVndWxhckF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWwKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVF
cnJvcigqc3RhdGUsICJUZXN0R2xvYmFsT2JqZWN0IiwgInJlZ3VsYXJBdHRyaWJ1dGUiKTsKICAg
ICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1dGVHZXR0ZXIo
c3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RSZWd1
bGFyQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEdsb2JhbE9iamVjdCog
dGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJB
TSh0aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwog
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwucmVndWxh
ckF0dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAogCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKK0pTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUdldHRlcihFeGVjU3Rh
dGUqLCBKU1Rlc3RHbG9iYWxPYmplY3QqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqKQogewogICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CkBAIC0xNzksOSArMTkwLDE2IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhy
b3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdEdsb2JhbE9iamVjdCIsICJlbmFibGVkQXRS
dW50aW1lQXR0cmlidXRlIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RHbG9iYWxPYmplY3RF
bmFibGVkQXRSdW50aW1lQXR0cmlidXRlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisK
K0pTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUdldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QqIHRoaXNPYmplY3QpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7Cisg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1
dGUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAppbmRleCA5NGM3NjBmOGQ4
MWYyZmNlMjc4YzM1NDFlNzgwODEyMDkyODI4MWNkLi4zM2Y5ODEyYzI0Y2U4NDQ3YzJlMzg2ZTg5
NWU2MDVhNTUyMDAxMWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcApAQCAtNDA5LDI4ICs0MDks
NDggQEAgdm9pZCBKU1Rlc3RJbnRlcmZhY2U6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiB9
CiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKK0pTVmFs
dWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljUmVhZE9ubHlBdHRy
R2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdEludGVyZmFjZSopOworCiBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNSZWFkT25seUF0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpT
T2JqZWN0KikKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aGlzVmFsdWUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0SW50ZXJmYWNlQ29u
c3RydWN0b3JJbXBsZW1lbnRzU3RhdGljUmVhZE9ubHlBdHRyR2V0dGVyKHN0YXRlLCBudWxscHRy
KSk7Cit9CisKK0pTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3Rh
dGljUmVhZE9ubHlBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSog
dGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJB
TSh0aGlzT2JqZWN0KTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKFRlc3RJbnRlcmZh
Y2U6OmltcGxlbWVudHNTdGF0aWNSZWFkT25seUF0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKICNlbmRpZgogCiAjaWYg
RU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCitKU1ZhbHVlIGpzVGVz
dEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHJHZXR0ZXIoRXhlY1N0YXRl
KiwgSlNUZXN0SW50ZXJmYWNlKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNv
bnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KikKIHsKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGlj
QXR0ckdldHRlcihzdGF0ZSwgbnVsbHB0cikpOworfQorCitKU1ZhbHVlIGpzVGVzdEludGVyZmFj
ZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0SW50ZXJmYWNlKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNT
dHJpbmdXaXRoQ2FjaGUoc3RhdGUsIFRlc3RJbnRlcmZhY2U6OmltcGxlbWVudHNTdGF0aWNBdHRy
KCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENv
bmRpdGlvbjIzKQorSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMUdldHRlcihF
eGVjU3RhdGUqLCBKU1Rlc3RJbnRlcmZhY2UqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0SW50
ZXJmYWNlSW1wbGVtZW50c1N0cjEoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KikKIHsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwpAQCAtNDQwLDE0ICs0NjAsMjMgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNl
SW1wbGVtZW50c1N0cjEoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGgKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5
cGVFcnJvcigqc3RhdGUsICJUZXN0SW50ZXJmYWNlIiwgImltcGxlbWVudHNTdHIxIik7CiAgICAg
fQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMUdldHRlcihzdGF0ZSwg
Y2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIx
R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSogdGhpc09iamVjdCkKK3sK
KyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsK
KyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVz
dWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuaW1wbGVtZW50c1N0cjEoKSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MjMpCitKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyR2V0dGVyKEV4ZWNTdGF0
ZSosIEpTVGVzdEludGVyZmFjZSopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJ
bXBsZW1lbnRzU3RyMihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSwgSlNPYmplY3QqKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBA
IC00NTcsMTQgKzQ4NiwyMyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBsZW1l
bnRzU3RyMihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aAogICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9y
KCpzdGF0ZSwgIlRlc3RJbnRlcmZhY2UiLCAiaW1wbGVtZW50c1N0cjIiKTsKICAgICB9Ci0gICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyR2V0dGVyKHN0YXRlLCBjYXN0ZWRU
aGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjJHZXR0ZXIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlKiB0aGlzT2JqZWN0KQoreworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBq
c1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5pbXBsZW1lbnRzU3RyMigpKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24yMykKK0pT
VmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjNHZXR0ZXIoRXhlY1N0YXRlKiwgSlNU
ZXN0SW50ZXJmYWNlKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVu
dHNTdHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lLCBKU09iamVjdCopCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTQ3NCwx
MiArNTEyLDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIz
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoCiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRl
LCAiVGVzdEludGVyZmFjZSIsICJpbXBsZW1lbnRzU3RyMyIpOwogICAgIH0KLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmltcGxlbWVudHNTdHIzKCpzdGF0ZSkpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjNHZXR0
ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBs
ZW1lbnRzU3RyM0dldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UqIHRoaXNP
YmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhp
c09iamVjdCk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPmltcGxlbWVudHNTdHIzKCpzdGF0ZSk7
CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0
aW9uMjMpCitKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNOb2RlR2V0dGVyKEV4ZWNT
dGF0ZSosIEpTVGVzdEludGVyZmFjZSopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZh
Y2VJbXBsZW1lbnRzTm9kZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CkBAIC00ODksMzYgKzUzNiw2MyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VJbXBs
ZW1lbnRzTm9kZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aAogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVy
cm9yKCpzdGF0ZSwgIlRlc3RJbnRlcmZhY2UiLCAiaW1wbGVtZW50c05vZGUiKTsKICAgICB9Ci0g
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3Vs
dCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmltcGxlbWVu
dHNOb2RlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNOb2RlR2V0dGVyKHN0
YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50
c05vZGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlKiB0aGlzT2JqZWN0
KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmpl
Y3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgSlNWYWx1
ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgaW1wbC5p
bXBsZW1lbnRzTm9kZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAjZW5kaWYKIAogI2lm
IEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQorSlNWYWx1ZSBqc1Rl
c3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY1JlYWRPbmx5QXR0ckdldHRl
cihFeGVjU3RhdGUqLCBKU1Rlc3RJbnRlcmZhY2UqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0
SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNSZWFkT25seUF0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2Jq
ZWN0KikKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlz
VmFsdWUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0SW50ZXJmYWNlQ29uc3Ry
dWN0b3JTdXBwbGVtZW50YWxTdGF0aWNSZWFkT25seUF0dHJHZXR0ZXIoc3RhdGUsIG51bGxwdHIp
KTsKK30KKworSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0
YXRpY1JlYWRPbmx5QXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2Uq
IHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFS
QU0odGhpc09iamVjdCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihXZWJDb3JlOjpU
ZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxTdGF0aWNSZWFkT25seUF0dHIoKSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIp
CitKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljQXR0
ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RJbnRlcmZhY2UqKTsKKwogRW5jb2RlZEpTVmFsdWUg
anNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNBdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVj
dCopCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1Zh
bHVlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEludGVyZmFjZUNvbnN0cnVj
dG9yU3VwcGxlbWVudGFsU3RhdGljQXR0ckdldHRlcihzdGF0ZSwgbnVsbHB0cikpOworfQorCitK
U1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljQXR0ckdl
dHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UqIHRoaXNPYmplY3QpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CiAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgV2ViQ29yZTo6VGVz
dFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsU3RhdGljQXR0cigpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKK0pTVmFsdWUg
anNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RJ
bnRlcmZhY2UqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFs
U3RyMShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSwgSlNPYmplY3QqKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC01MjgsMTQg
KzYwMiwyMyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIx
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAi
VGVzdEludGVyZmFjZSIsICJzdXBwbGVtZW50YWxTdHIxIik7CiAgICAgfQotICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIxR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7
Cit9CisKK0pTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMUdldHRlcihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2UqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3Ry
aW5nV2l0aENhY2hlKHN0YXRlLCBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50
YWxTdHIxKGltcGwpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8
IEVOQUJMRShDb25kaXRpb24xMikKK0pTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFs
U3RyMkdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RJbnRlcmZhY2UqKTsKKwogRW5jb2RlZEpTVmFs
dWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqKQogewogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CkBAIC01NDUsMTQgKzYyOCwyMyBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4g
dGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdEludGVyZmFjZSIsICJzdXBwbGVtZW50
YWxTdHIyIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxT
dHIyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0SW50ZXJm
YWNlU3VwcGxlbWVudGFsU3RyMkdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZh
Y2UqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURf
UEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQo
KTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBXZWJDb3Jl
OjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxTdHIyKGltcGwpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2VuZGlm
CiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKK0pTVmFs
dWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyM0dldHRlcihFeGVjU3RhdGUqLCBKU1Rl
c3RJbnRlcmZhY2UqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVu
dGFsU3RyMyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSwgSlNPYmplY3QqKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC01NjIs
MTIgKzY1NCwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxT
dHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlCiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRl
LCAiVGVzdEludGVyZmFjZSIsICJzdXBwbGVtZW50YWxTdHIzIik7CiAgICAgfQotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+c3VwcGxlbWVudGFsU3RyMygqc3RhdGUpKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0
cjNHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RJbnRlcmZh
Y2VTdXBwbGVtZW50YWxTdHIzR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVyZmFj
ZSogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9Q
QVJBTSh0aGlzT2JqZWN0KTsKKyAgICByZXR1cm4gdGhpc09iamVjdC0+c3VwcGxlbWVudGFsU3Ry
Mygqc3RhdGUpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5B
QkxFKENvbmRpdGlvbjEyKQorSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2Rl
R2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdEludGVyZmFjZSopOworCiBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2RlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCopCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKQEAgLTU3Nyw5ICs2NzgsMTYgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93
R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RJbnRlcmZhY2UiLCAic3VwcGxlbWVudGFsTm9k
ZSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCks
IFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbE5vZGUoaW1wbCkpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRo
aXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2RlR2V0dGVy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSogdGhpc09iamVjdCkKK3sKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUyhzdGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIFdlYkNvcmU6OlRlc3RTdXBw
bGVtZW50YWw6OnN1cHBsZW1lbnRhbE5vZGUoaW1wbCkpOworICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAKaW5k
ZXggNjM2NDhiZDY3ZDdiNmE1MDg3YTNiMDEyMjNmZTJiNTJjMmJhODJkYy4uYTk3YzE5ODllMzdh
ZDNkMTg2Y2Y0YjE4NjE4NDIxNjY5ZTE5ZjM5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWls
dGluQ29uc3RydWN0b3IuY3BwCkBAIC0xMzIsNiArMTMyLDggQEAgdm9pZCBKU1Rlc3RKU0J1aWx0
aW5Db25zdHJ1Y3Rvcjo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKICAgICB0aGlzT2JqZWN0
LT5KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcjo6fkpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
KCk7CiB9CiAKK0pTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRl
Q3VzdG9tR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yKik7CisK
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZUN1
c3RvbShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSwgSlNPYmplY3QqKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xNDEsMTAg
KzE0MywxOSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RB
dHRyaWJ1dGVDdXN0b20oRXhlY1N0YXRlKiBzdGF0ZSwgRQogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwg
IlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciIsICJ0ZXN0QXR0cmlidXRlQ3VzdG9tIik7CiAgICAg
fQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+dGVzdEF0dHJpYnV0ZUN1
c3RvbSgqc3RhdGUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEpTQnVpbHRp
bkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZUN1c3RvbUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykp
OworfQorCitKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZUN1
c3RvbUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvciog
dGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJB
TSh0aGlzT2JqZWN0KTsKKyAgICByZXR1cm4gdGhpc09iamVjdC0+dGVzdEF0dHJpYnV0ZUN1c3Rv
bSgqc3RhdGUpOwogfQogCiAKK0pTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0
QXR0cmlidXRlUldDdXN0b21HZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0SlNCdWlsdGluQ29uc3Ry
dWN0b3IqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0
QXR0cmlidXRlUldDdXN0b20oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KikKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwpAQCAtMTU0LDcgKzE2NSwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5Db25z
dHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3RvbShFeGVjU3RhdGUqIHN0YXRlLAogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVy
cm9yKCpzdGF0ZSwgIlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciIsICJ0ZXN0QXR0cmlidXRlUldD
dXN0b20iKTsKICAgICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT50
ZXN0QXR0cmlidXRlUldDdXN0b20oKnN0YXRlKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3RvbUdldHRlcihz
dGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVj
dG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEpT
QnVpbHRpbkNvbnN0cnVjdG9yKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIHJldHVybiB0aGlzT2JqZWN0
LT50ZXN0QXR0cmlidXRlUldDdXN0b20oKnN0YXRlKTsKIH0KIAogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAKaW5kZXgg
Y2U0ZjY0OWM0NjQxNmZhY2Y3ZTliMTY0MTk2NjAyNTcxM2EyY2VkYy4uYmI1YjYwMWZlMDVlNDI3
ODQ0MDM2NDRkZTQ1MDZmYzg2OTkxMDk2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcApAQCAtMjUsNiArMjUsNyBA
QAogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3Iu
aCIKICNpbmNsdWRlICJKU0RPTUl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0
b3IuaCIKICNpbmNsdWRlICJVUkwuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5j
bHVkZSA8cnVudGltZS9KU1N0cmluZy5oPgpAQCAtNDksNiArNTAsOCBAQCBib29sIHNldEpTVGVz
dE5vZGVOYW1lKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZQogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb2RlQ29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSwgSlND
OjpKU09iamVjdCopOwogYm9vbCBzZXRKU1Rlc3ROb2RlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIAorRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04o
RXhlY1N0YXRlKik7CisKIGNsYXNzIEpTVGVzdE5vZGVQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpK
U05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9i
amVjdCBCYXNlOwpAQCAtMTA3LDYgKzExMCw3IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1
ZSBKU1Rlc3ROb2RlUHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9CiAgICAgeyAia2V5cyIsIEpTQzo6
RnVuY3Rpb24sIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5j
dGlvbj4oanNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uS2V5cyksIChpbnRwdHJfdCkgKDApIH0g
fSwKICAgICB7ICJ2YWx1ZXMiLCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgeyAoaW50cHRy
X3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlv
blZhbHVlcyksIChpbnRwdHJfdCkgKDApIH0gfSwKICAgICB7ICJmb3JFYWNoIiwgSlNDOjpGdW5j
dGlvbiwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9u
Pihqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Gb3JFYWNoKSwgKGludHB0cl90KSAoMSkgfSB9
LAorICAgIHsgInRvSlNPTiIsIEpTQzo6RnVuY3Rpb24sIE5vSW50cmluc2ljLCB7IChpbnRwdHJf
dClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9u
VG9KU09OKSwgKGludHB0cl90KSAoMCkgfSB9LAogfTsKIAogY29uc3QgQ2xhc3NJbmZvIEpTVGVz
dE5vZGVQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3ROb2RlUHJvdG90eXBlIiwgJkJhc2U6OnNf
aW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3ROb2RlUHJvdG90eXBlKSB9OwpAQCAt
MTM1LDYgKzEzOSw4IEBAIEpTT2JqZWN0KiBKU1Rlc3ROb2RlOjpwcm90b3R5cGUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8
SlNUZXN0Tm9kZT4odm0sIGdsb2JhbE9iamVjdCk7CiB9CiAKK0pTVmFsdWUganNUZXN0Tm9kZU5h
bWVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0Tm9kZSopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3ROb2RlTmFtZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSwgSlNPYmplY3QqKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0x
NDQsOSArMTUwLDE2IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVOYW1lKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVyCiAgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0
YXRlLCAiVGVzdE5vZGUiLCAibmFtZSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0Tm9kZU5h
bWVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3ROb2RlTmFt
ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3ROb2RlKiB0aGlzT2JqZWN0KQoreworICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQg
PSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5uYW1lKCkpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKQEAgLTE5Miw2
ICsyMDUsMTkgQEAgSlNWYWx1ZSBKU1Rlc3ROb2RlOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNv
bnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgcmV0dXJuIGdldERPTUNvbnN0
cnVjdG9yPEpTVGVzdE5vZGVDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9i
YWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oRXhlY1N0YXRlKiBzdGF0ZSkK
K3sKKyAgICBhdXRvIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE5vZGUqPihzdGF0
ZS0+dGhpc1ZhbHVlKCkpOworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCisgICAgICAg
IHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE5vZGUiLCAidG9KU09OIik7
CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3ROb2RlOjpp
bmZvKCkpOworCisgICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3Qoc3RhdGUp
OworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm5hbWUiKSwganNUZXN0Tm9kZU5hbWVHZXR0ZXIo
c3RhdGUsIGNhc3RlZFRoaXMpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
Cit9CisKIHVzaW5nIFRlc3ROb2RlSXRlcmF0b3IgPSBKU0RPTUl0ZXJhdG9yPEpTVGVzdE5vZGU+
OwogdXNpbmcgVGVzdE5vZGVJdGVyYXRvclByb3RvdHlwZSA9IEpTRE9NSXRlcmF0b3JQcm90b3R5
cGU8SlNUZXN0Tm9kZT47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmNwcAppbmRl
eCBjZmM1OWRhNGM2NTY5MDdlYzAzMDBmNDRhOWE2NjcwN2U2NDVhN2JmLi4wNGQ2OTBjMWM1YTli
ZWI1ZDhhNmI3MGI4ZTkzNDAzZmRkM2JhNzcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWlu
aXN0aWMuY3BwCkBAIC0xNDQsNiArMTQ0LDggQEAgdm9pZCBKU1Rlc3ROb25kZXRlcm1pbmlzdGlj
OjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogICAgIHRoaXNPYmplY3QtPkpTVGVzdE5vbmRl
dGVybWluaXN0aWM6On5KU1Rlc3ROb25kZXRlcm1pbmlzdGljKCk7CiB9CiAKK0pTVmFsdWUganNU
ZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNSZWFkb25seUF0dHJHZXR0ZXIoRXhl
Y1N0YXRlKiwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5QXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3Qq
KQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xNTMsMTUgKzE1NSwyMiBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5
QXR0cihFeGVjU3RhdGUqIHN0YQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAg
ICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3ROb25kZXRlcm1p
bmlzdGljIiwgIm5vbmRldGVybWluaXN0aWNSZWFkb25seUF0dHIiKTsKICAgICB9CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3Rp
Y1JlYWRvbmx5QXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpz
VGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljUmVhZG9ubHlBdHRyR2V0dGVyKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE5vbmRldGVybWluaXN0aWMqIHRoaXNPYmplY3QpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CiAj
aWYgRU5BQkxFKFdFQl9SRVBMQVkpCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAgICAgSW5wdXRDdXJzb3ImIGN1cnNvciA9
IGdsb2JhbE9iamVjdC0+aW5wdXRDdXJzb3IoKTsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
Y29uc3QgQXRvbWljU3RyaW5nPiBiaW5kaW5nTmFtZSgiVGVzdE5vbmRldGVybWluaXN0aWMubm9u
ZGV0ZXJtaW5pc3RpY1JlYWRvbmx5QXR0ciIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpOwogICAgIGlmIChjdXJzb3IuaXNDYXB0dXJpbmcoKSkgewotICAgICAgICBpbnQzMl90
IG1lbW9pemVkUmVzdWx0ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpLm5vbmRldGVybWluaXN0aWNS
ZWFkb25seUF0dHIoKTsKKyAgICAgICAgaW50MzJfdCBtZW1vaXplZFJlc3VsdCA9IHRoaXNPYmpl
Y3QtPndyYXBwZWQoKS5ub25kZXRlcm1pbmlzdGljUmVhZG9ubHlBdHRyKCk7CiAgICAgICAgIGN1
cnNvci5hcHBlbmRJbnB1dDxNZW1vaXplZERPTVJlc3VsdDxpbnQzMl90Pj4oYmluZGluZ05hbWUu
Z2V0KCkuc3RyaW5nKCksIG1lbW9pemVkUmVzdWx0LCAwKTsKICAgICAgICAgSlNWYWx1ZSByZXN1
bHQgPSBqc051bWJlcihtZW1vaXplZFJlc3VsdCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBpZiAo
Y3Vyc29yLmlzUmVwbGF5aW5nKCkpIHsKQEAgLTE2OSwxNiArMTc4LDE4IEBAIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljUmVhZG9ubHlBdHRyKEV4
ZWNTdGF0ZSogc3RhCiAgICAgICAgIE1lbW9pemVkRE9NUmVzdWx0QmFzZSogaW5wdXQgPSBjdXJz
b3IuZmV0Y2hJbnB1dDxNZW1vaXplZERPTVJlc3VsdEJhc2U+KCk7CiAgICAgICAgIGlmIChpbnB1
dCAmJiBpbnB1dC0+Y29udmVydFRvPGludDMyX3Q+KG1lbW9pemVkUmVzdWx0KSkgewogICAgICAg
ICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihtZW1vaXplZFJlc3VsdCk7Ci0gICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCi0gICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgp
OwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5ub25kZXRlcm1pbmlzdGljUmVh
ZG9ubHlBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRl
dGVybWluaXN0aWNXcml0ZWFibGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE5vbmRldGVy
bWluaXN0aWMqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRl
dGVybWluaXN0aWNXcml0ZWFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCopCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKQEAgLTE4OCwxNSArMTk5LDIyIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRl
dGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0cihFeGVjU3RhdGUqIHN0CiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE5vbmRldGVybWluaXN0aWMiLCAibm9uZGV0ZXJtaW5p
c3RpY1dyaXRlYWJsZUF0dHIiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHJHZXR0ZXIo
c3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGlj
Tm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0Tm9uZGV0ZXJtaW5pc3RpYyogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKICNpZiBFTkFCTEUoV0VCX1JFUExB
WSkKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RhdGUtPmxleGljYWxHbG9i
YWxPYmplY3QoKTsKICAgICBJbnB1dEN1cnNvciYgY3Vyc29yID0gZ2xvYmFsT2JqZWN0LT5pbnB1
dEN1cnNvcigpOwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBBdG9taWNTdHJpbmc+
IGJpbmRpbmdOYW1lKCJUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5ub25kZXRlcm1pbmlzdGljV3JpdGVh
YmxlQXR0ciIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgIGlmIChj
dXJzb3IuaXNDYXB0dXJpbmcoKSkgewotICAgICAgICBTdHJpbmcgbWVtb2l6ZWRSZXN1bHQgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCkubm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIoKTsKKyAg
ICAgICAgU3RyaW5nIG1lbW9pemVkUmVzdWx0ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLm5vbmRl
dGVybWluaXN0aWNXcml0ZWFibGVBdHRyKCk7CiAgICAgICAgIGN1cnNvci5hcHBlbmRJbnB1dDxN
ZW1vaXplZERPTVJlc3VsdDxTdHJpbmc+PihiaW5kaW5nTmFtZS5nZXQoKS5zdHJpbmcoKSwgbWVt
b2l6ZWRSZXN1bHQsIDApOwogICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENh
Y2hlKHN0YXRlLCBtZW1vaXplZFJlc3VsdCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBpZiAoY3Vy
c29yLmlzUmVwbGF5aW5nKCkpIHsKQEAgLTIwNCwxNiArMjIyLDE4IEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0cihFeGVj
U3RhdGUqIHN0CiAgICAgICAgIE1lbW9pemVkRE9NUmVzdWx0QmFzZSogaW5wdXQgPSBjdXJzb3Iu
ZmV0Y2hJbnB1dDxNZW1vaXplZERPTVJlc3VsdEJhc2U+KCk7CiAgICAgICAgIGlmIChpbnB1dCAm
JiBpbnB1dC0+Y29udmVydFRvPFN0cmluZz4obWVtb2l6ZWRSZXN1bHQpKSB7CiAgICAgICAgICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBtZW1vaXplZFJlc3Vs
dCk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCi0gICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3Rh
dGUsIGltcGwubm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIoKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1
ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHJHZXR0
ZXIoRXhlY1N0YXRlKiwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyopOworCiBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpT
T2JqZWN0KikKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjIzLDE1ICsyNDMsMjIg
QEAgRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNF
eGNlcHRpb25BdHRyKEV4ZWNTdGF0ZSogc3QKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0Tm9u
ZGV0ZXJtaW5pc3RpYyIsICJub25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0ciIpOwogICAgIH0K
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRl
cm1pbmlzdGljRXhjZXB0aW9uQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitK
U1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0
ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiB0aGlzT2Jq
ZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNP
YmplY3QpOwogI2lmIEVOQUJMRShXRUJfUkVQTEFZKQogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIElucHV0Q3Vyc29y
JiBjdXJzb3IgPSBnbG9iYWxPYmplY3QtPmlucHV0Q3Vyc29yKCk7CiAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPGNvbnN0IEF0b21pY1N0cmluZz4gYmluZGluZ05hbWUoIlRlc3ROb25kZXRlcm1p
bmlzdGljLm5vbmRldGVybWluaXN0aWNFeGNlcHRpb25BdHRyIiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgaWYgKGN1cnNvci5pc0NhcHR1cmluZygpKSB7Ci0gICAg
ICAgIFN0cmluZyBtZW1vaXplZFJlc3VsdCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKS5ub25kZXRl
cm1pbmlzdGljRXhjZXB0aW9uQXR0cigpOworICAgICAgICBTdHJpbmcgbWVtb2l6ZWRSZXN1bHQg
PSB0aGlzT2JqZWN0LT53cmFwcGVkKCkubm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHIoKTsK
ICAgICAgICAgY3Vyc29yLmFwcGVuZElucHV0PE1lbW9pemVkRE9NUmVzdWx0PFN0cmluZz4+KGJp
bmRpbmdOYW1lLmdldCgpLnN0cmluZygpLCBtZW1vaXplZFJlc3VsdCwgMCk7CiAgICAgICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIG1lbW9pemVkUmVzdWx0KTsK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KIAogICAgIGlmIChjdXJzb3IuaXNSZXBsYXlpbmcoKSkgewpAQCAtMjM5
LDE2ICsyNjYsMTggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRl
dGVybWluaXN0aWNFeGNlcHRpb25BdHRyKEV4ZWNTdGF0ZSogc3QKICAgICAgICAgTWVtb2l6ZWRE
T01SZXN1bHRCYXNlKiBpbnB1dCA9IGN1cnNvci5mZXRjaElucHV0PE1lbW9pemVkRE9NUmVzdWx0
QmFzZT4oKTsKICAgICAgICAgaWYgKGlucHV0ICYmIGlucHV0LT5jb252ZXJ0VG88U3RyaW5nPiht
ZW1vaXplZFJlc3VsdCkpIHsKICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdX
aXRoQ2FjaGUoc3RhdGUsIG1lbW9pemVkUmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAg
IH0KICAgICB9CiAjZW5kaWYKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5ub25kZXRlcm1pbmlzdGljRXhj
ZXB0aW9uQXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25k
ZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RO
b25kZXRlcm1pbmlzdGljKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0
aWNOb25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqKQogewogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yNTgsMTcgKzI4NywyNCBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4Y2VwdGlvbkF0
dHIoRXhlY1N0YQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0
dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3ROb25kZXRlcm1pbmlzdGljIiwg
Im5vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyIik7CiAgICAgfQorICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNH
ZXR0ZXJFeGNlcHRpb25BdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFs
dWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25B
dHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE5vbmRldGVybWluaXN0aWMqIHRoaXNP
YmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhp
c09iamVjdCk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAjaWYgRU5BQkxFKFdFQl9SRVBM
QVkpCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRlLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCk7CiAgICAgSW5wdXRDdXJzb3ImIGN1cnNvciA9IGdsb2JhbE9iamVjdC0+aW5w
dXRDdXJzb3IoKTsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbWljU3RyaW5n
PiBiaW5kaW5nTmFtZSgiVGVzdE5vbmRldGVybWluaXN0aWMubm9uZGV0ZXJtaW5pc3RpY0dldHRl
ckV4Y2VwdGlvbkF0dHIiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAg
ICBpZiAoY3Vyc29yLmlzQ2FwdHVyaW5nKCkpIHsKLSAgICAgICAgU3RyaW5nIG1lbW9pemVkUmVz
dWx0ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpLm5vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRp
b25BdHRyKGVjKTsKKyAgICAgICAgU3RyaW5nIG1lbW9pemVkUmVzdWx0ID0gdGhpc09iamVjdC0+
d3JhcHBlZCgpLm5vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyKGVjKTsKICAgICAg
ICAgY3Vyc29yLmFwcGVuZElucHV0PE1lbW9pemVkRE9NUmVzdWx0PFN0cmluZz4+KGJpbmRpbmdO
YW1lLmdldCgpLnN0cmluZygpLCBtZW1vaXplZFJlc3VsdCwgZWMpOwogICAgICAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBtZW1vaXplZFJlc3VsdCk7CiAgICAg
ICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgaWYg
KGN1cnNvci5pc1JlcGxheWluZygpKSB7CkBAIC0yNzcsMTcgKzMxMywxOSBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4Y2VwdGlv
bkF0dHIoRXhlY1N0YQogICAgICAgICBpZiAoaW5wdXQgJiYgaW5wdXQtPmNvbnZlcnRUbzxTdHJp
bmc+KG1lbW9pemVkUmVzdWx0KSkgewogICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0
cmluZ1dpdGhDYWNoZShzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOwogICAgICAgICAgICAgc2V0RE9N
RXhjZXB0aW9uKHN0YXRlLCBpbnB1dC0+ZXhjZXB0aW9uQ29kZSgpKTsKLSAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAg
SlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5ub25kZXRlcm1p
bmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0cihlYykpOwogICAgIHNldERPTUV4Y2VwdGlvbihzdGF0
ZSwgZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4g
cmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWlu
aXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE5vbmRldGVy
bWluaXN0aWMqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRl
dGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCopCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKQEAgLTI5NywxNSArMzM1LDIyIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0cihFeGVj
U3RhCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhy
b3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE5vbmRldGVybWluaXN0aWMiLCAibm9uZGV0
ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHIiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4
Y2VwdGlvbkF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rl
c3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHJHZXR0
ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogdGhpc09iamVjdCkK
K3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0
KTsKICNpZiBFTkFCTEUoV0VCX1JFUExBWSkKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKICAgICBJbnB1dEN1cnNvciYgY3Vy
c29yID0gZ2xvYmFsT2JqZWN0LT5pbnB1dEN1cnNvcigpOwogICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxjb25zdCBBdG9taWNTdHJpbmc+IGJpbmRpbmdOYW1lKCJUZXN0Tm9uZGV0ZXJtaW5pc3Rp
Yy5ub25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0ciIsIEF0b21pY1N0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpOwogICAgIGlmIChjdXJzb3IuaXNDYXB0dXJpbmcoKSkgewotICAg
ICAgICBTdHJpbmcgbWVtb2l6ZWRSZXN1bHQgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCkubm9uZGV0
ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHIoKTsKKyAgICAgICAgU3RyaW5nIG1lbW9pemVk
UmVzdWx0ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLm5vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNl
cHRpb25BdHRyKCk7CiAgICAgICAgIGN1cnNvci5hcHBlbmRJbnB1dDxNZW1vaXplZERPTVJlc3Vs
dDxTdHJpbmc+PihiaW5kaW5nTmFtZS5nZXQoKS5zdHJpbmcoKSwgbWVtb2l6ZWRSZXN1bHQsIDAp
OwogICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBtZW1v
aXplZFJlc3VsdCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBpZiAoY3Vyc29yLmlzUmVwbGF5aW5n
KCkpIHsKQEAgLTMxMywxMyArMzU4LDEzIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVy
bWluaXN0aWNOb25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0cihFeGVjU3RhCiAgICAg
ICAgIE1lbW9pemVkRE9NUmVzdWx0QmFzZSogaW5wdXQgPSBjdXJzb3IuZmV0Y2hJbnB1dDxNZW1v
aXplZERPTVJlc3VsdEJhc2U+KCk7CiAgICAgICAgIGlmIChpbnB1dCAmJiBpbnB1dC0+Y29udmVy
dFRvPFN0cmluZz4obWVtb2l6ZWRSZXN1bHQpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBtZW1vaXplZFJlc3VsdCk7Ci0gICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCi0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwog
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwubm9uZGV0
ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAppbmRleCBl
MDQwY2JkNTlhOGU3YzgzZjVkOGU2ZjY3ZTNiMWRiM2NmNTBjM2VjLi5jZDFkMTcxNDU0ZTE5MjNl
NGQ2NTVjMTllMWY1OTAwN2I0YmQ2ZWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcApAQCAtNDksNiArNDksNyBAQAog
I2luY2x1ZGUgIkpTVGVzdFN1Yk9iai5oIgogI2luY2x1ZGUgIkpTWFBhdGhOU1Jlc29sdmVyLmgi
CiAjaW5jbHVkZSAiTGlmZWN5Y2xlQ2FsbGJhY2tRdWV1ZS5oIgorI2luY2x1ZGUgIk9iamVjdENv
bnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1
ZGUgIlNWR0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiU1ZHUG9pbnQuaCIKQEAgLTg4MCw2ICs4ODEs
OCBAQCBib29sIHNldEpTVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGUoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbAogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lLCBKU0M6OkpTT2JqZWN0Kik7CiBib29sIHNldEpTVGVzdE9iakNvbnN0cnVj
dG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSk7CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25Ub0pTT04oRXhlY1N0YXRlKik7CisKIGNsYXNzIEpTVGVzdE9ialByb3RvdHlwZSA6
IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgogICAgIHR5cGVkZWYgSlND
OjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CkBAIC0xMjk5LDYgKzEzMDIsNyBAQCBzdGF0aWMgY29u
c3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9CiAgICAg
eyAiQ09OU1RfVkFMVUVfMTQiLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBDb25zdGFudEludGVn
ZXIsIE5vSW50cmluc2ljLCB7IChsb25nIGxvbmcpKDB4MWFiYykgfSB9LAogICAgIHsgIkNPTlNU
X0pBVkFTQ1JJUFQiLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBDb25zdGFudEludGVnZXIsIE5v
SW50cmluc2ljLCB7IChsb25nIGxvbmcpKDE1KSB9IH0sCiAgICAgeyAicmVhZG9ubHkiLCBEb250
RGVsZXRlIHwgUmVhZE9ubHkgfCBDb25zdGFudEludGVnZXIsIE5vSW50cmluc2ljLCB7IChsb25n
IGxvbmcpKDApIH0gfSwKKyAgICB7ICJ0b0pTT04iLCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNp
YywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uVG9KU09OKSwgKGludHB0cl90KSAoMCkgfSB9LAogfTsKIAogY29uc3QgQ2xh
c3NJbmZvIEpTVGVzdE9ialByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdE9iamVjdFByb3RvdHlw
ZSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0T2JqUHJvdG90
eXBlKSB9OwpAQCAtMTM3NSw2ICsxMzc5LDggQEAgYm9vbCBKU1Rlc3RPYmo6OmdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW4KICAg
ICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCh0aGlzT2JqZWN0LCBzdGF0
ZSwgaW5kZXgsIHNsb3QpOwogfQogCitKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5TG9uZ0F0dHJH
ZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alJlYWRPbmx5TG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KikKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwpAQCAtMTM4NCwxMiArMTM5MCwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25s
eUxvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYQogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlw
ZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVhZE9ubHlMb25nQXR0ciIpOwogICAgIH0KLSAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNUZXN0T2JqUmVhZE9ubHlMb25nQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhp
cykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5TG9uZ0F0dHJHZXR0ZXIoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBs
LnJlYWRPbmx5TG9uZ0F0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVN0
cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialJlYWRPbmx5U3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqKQogewogICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CkBAIC0xMzk5LDEyICsxNDE0LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialJlYWRPbmx5U3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhy
b3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJyZWFkT25seVN0cmluZ0F0dHIi
KTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialJlYWRPbmx5U3RyaW5nQXR0ckdldHRlcihz
dGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5U3RyaW5n
QXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7Cisg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnJlYWRPbmx5U3RyaW5nQXR0cigpKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5VGVzdE9iakF0dHJHZXR0ZXIoRXhlY1N0
YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5VGVz
dE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUsIEpTT2JqZWN0KikKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTQx
NCwzMCArMTQzOCw1NyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVRlc3RPYmpB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaQogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3RPYmoiLCAicmVhZE9ubHlUZXN0T2JqQXR0ciIpOwogICAgIH0KLSAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9K
UyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwucmVhZE9ubHlUZXN0T2Jq
QXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpSZWFkT25seVRlc3RPYmpBdHRyR2V0dGVyKHN0YXRl
LCBjYXN0ZWRUaGlzKSk7CiB9CiAKK0pTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlUZXN0T2JqQXR0
ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9
IHRvSlMoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnJlYWRPbmx5VGVz
dE9iakF0dHIoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworCitKU1ZhbHVlIGpzVGVzdE9i
akNvbnN0cnVjdG9yU3RhdGljUmVhZE9ubHlMb25nQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rl
c3RPYmoqKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNSZWFk
T25seUxvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lLCBKU09iamVjdCopCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VGVzdE9iakNvbnN0cnVjdG9yU3RhdGljUmVhZE9ubHlMb25nQXR0ckdldHRlcihzdGF0ZSwgbnVs
bHB0cikpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljUmVhZE9ubHlM
b25nQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7
CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihUZXN0T2JqOjpzdGF0aWNSZWFkT25seUxv
bmdBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1
cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJp
bmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KikKIHsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRy
R2V0dGVyKHN0YXRlLCBudWxscHRyKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0
b3JTdGF0aWNTdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhp
c09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0
aGlzT2JqZWN0KTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRl
LCBUZXN0T2JqOjpzdGF0aWNTdHJpbmdBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2Jq
Q29uc3RydWN0b3JUZXN0U3ViT2JqR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclRlc3RTdWJPYmooRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KikK
IHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTQ0NywxMCArMTQ5OCwxOSBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclRlc3RTdWJPYmooRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAg
ICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiVGVz
dFN1Yk9iaiIpOwogICAgIH0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdFN1Yk9i
ajo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
KSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpDb25zdHJ1Y3RvclRlc3RT
dWJPYmpHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpD
b25zdHJ1Y3RvclRlc3RTdWJPYmpHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0
aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFN
KHRoaXNPYmplY3QpOworICAgIHJldHVybiBKU1Rlc3RTdWJPYmo6OmdldENvbnN0cnVjdG9yKHN0
YXRlLT52bSgpLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSk7CiB9CiAKIAorSlNWYWx1ZSBq
c1Rlc3RPYmpUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yR2V0dGVyKEV4ZWNT
dGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0U3ViT2Jq
RW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCopCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKQEAgLTE0NjAsMTUgKzE1MjAsMjQgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRl
LAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93
R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiVGVzdFN1Yk9iakVuYWJsZWRCeVNl
dHRpbmciKTsKICAgICB9Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzLT53cmFwcGVkKCku
ZnJhbWUoKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
Ci0gICAgU2V0dGluZ3MmIHNldHRpbmdzID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpLmZyYW1lKCkt
PnNldHRpbmdzKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpUZXN0U3Vi
T2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7
Cit9CisKK0pTVmFsdWUganNUZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdDb25zdHJ1
Y3RvckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7Cisg
ICAgaWYgKFVOTElLRUxZKCF0aGlzT2JqZWN0LT53cmFwcGVkKCkuZnJhbWUoKSkpCisgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFNldHRpbmdzJiBzZXR0aW5ncyA9IHRoaXNPYmpl
Y3QtPndyYXBwZWQoKS5mcmFtZSgpLT5zZXR0aW5ncygpOwogICAgIGlmICghc2V0dGluZ3MudGVz
dFNldHRpbmdFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RTdWJPYmo6OmdldENv
bnN0cnVjdG9yKHN0YXRlLT52bSgpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSkpOworICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4gSlNUZXN0U3ViT2JqOjpnZXRD
b25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCkpOwogfQog
CiAKK0pTVmFsdWUganNUZXN0T2JqRW51bUF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2Jq
Kik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakVudW1BdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCopCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE0NzgsMTIgKzE1NDcsMjEgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqRW51bUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm8KICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAg
IHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImVudW1BdHRy
Iik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpFbnVtQXR0ckdldHRlcihzdGF0ZSwgY2Fz
dGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iakVudW1BdHRyR2V0dGVyKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2Fj
aGUoc3RhdGUsIGltcGwuZW51bUF0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpCeXRl
QXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqQnl0ZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KikKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpA
QCAtMTQ5MywxMiArMTU3MSwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpCeXRlQXR0cihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBybwogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVy
cm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiYnl0ZUF0dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VGVzdE9iakJ5dGVBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUg
anNUZXN0T2JqQnl0ZUF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlz
T2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRo
aXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAg
SlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmJ5dGVBdHRyKCkpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFs
dWUganNUZXN0T2JqT2N0ZXRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpPY3RldEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KikKIHsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwpAQCAtMTUwOCwxMiArMTU5NSwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpPY3RldEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcgogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJu
IHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAib2N0ZXRBdHRyIik7CiAg
ICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpPY3RldEF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRo
aXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpPY3RldEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLm9jdGV0
QXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialNob3J0QXR0ckdldHRlcihFeGVjU3Rh
dGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU2hvcnRBdHRyKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBK
U09iamVjdCopCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE1MjMsMTIgKzE2MTks
MjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHIKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0
T2JqIiwgInNob3J0QXR0ciIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqU2hvcnRBdHRy
R2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqU2hvcnRB
dHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNOdW1iZXIoaW1wbC5zaG9ydEF0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpD
bGFtcGVkU2hvcnRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCopCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE1MzgsMTIgKzE2NDMsMjEgQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmEKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVy
biB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImNsYW1wZWRTaG9ydEF0
dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakNsYW1wZWRTaG9ydEF0dHJHZXR0ZXIo
c3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpDbGFtcGVkU2hvcnRB
dHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNOdW1iZXIoaW1wbC5jbGFtcGVkU2hvcnRBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNU
ZXN0T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiop
OworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2Jq
ZWN0KikKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTU1MywxMiArMTY2NywyMSBA
QCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoi
LCAiZW5mb3JjZVJhbmdlU2hvcnRBdHRyIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpF
bmZvcmNlUmFuZ2VTaG9ydEF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNW
YWx1ZSBqc1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmVuZm9yY2VS
YW5nZVNob3J0QXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVkU2hvcnRB
dHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpVbnNpZ25lZFNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqKQogewogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CkBAIC0xNTY4LDEyICsxNjkxLDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialVu
c2lnbmVkU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWCiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ1bnNpZ25lZFNob3J0QXR0ciIpOwogICAg
IH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHJHZXR0ZXIoc3RhdGUsIGNh
c3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0ckdldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVt
YmVyKGltcGwudW5zaWduZWRTaG9ydEF0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpM
b25nQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KikKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwpAQCAtMTU4MywxMiArMTcxNSwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpMb25nQXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBybwogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlw
ZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibG9uZ0F0dHIiKTsKICAgICB9Ci0gICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVGVzdE9iakxvbmdBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFs
dWUganNUZXN0T2JqTG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0
aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFN
KHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmxvbmdBdHRyKCkpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pT
VmFsdWUganNUZXN0T2JqTG9uZ0xvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiop
OworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KikKIHsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTU5OCwxMiArMTczOSwyMSBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAg
ICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibG9uZ0xv
bmdBdHRyIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpMb25nTG9uZ0F0dHJHZXR0ZXIo
c3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpMb25nTG9uZ0F0dHJH
ZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBq
c051bWJlcihpbXBsLmxvbmdMb25nQXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialVu
c2lnbmVkTG9uZ0xvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqKQogewog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xNjEzLDEyICsxNzYzLDIxIEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAg
ICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ1bnNpZ25l
ZExvbmdMb25nQXR0ciIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqVW5zaWduZWRMb25n
TG9uZ0F0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RP
YmpVbnNpZ25lZExvbmdMb25nQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoq
IHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFS
QU0odGhpc09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsK
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwudW5zaWduZWRMb25nTG9uZ0F0dHIo
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09i
amVjdCopCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE2MjgsMTIgKzE3ODcsMjEg
QEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFAKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2Jq
IiwgInN0cmluZ0F0dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialN0cmluZ0F0dHJH
ZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdB
dHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuc3RyaW5nQXR0cigpKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitK
U1ZhbHVlIGpzVGVzdE9ialRlc3RPYmpBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiop
OworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0T2JqQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqKQogewog
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xNjQzLDExICsxODExLDIwIEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAg
IHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInRlc3RPYmpB
dHRyIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0g
ICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSwgaW1wbC50ZXN0T2JqQXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpUZXN0T2JqQXR0ckdldHRl
cihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCitKU1ZhbHVlIGpzVGVzdE9ialRlc3RPYmpBdHRy
R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUyhzdGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIGltcGwudGVzdE9iakF0dHIo
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworCitKU1ZhbHVlIGpzVGVzdE9ialRlc3ROdWxs
YWJsZU9iakF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CiAKIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialRlc3ROdWxsYWJsZU9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KikKIHsKQEAgLTE2NTgs
MTIgKzE4MzUsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGkKICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3Rh
dGUsICJUZXN0T2JqIiwgInRlc3ROdWxsYWJsZU9iakF0dHIiKTsKICAgICB9Ci0gICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMo
c3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnRlc3ROdWxsYWJsZU9iakF0
dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0ckdldHRlcihzdGF0ZSwg
Y2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9ialRlc3ROdWxsYWJsZU9iakF0dHJH
ZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0
b0pTKHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgaW1wbC50ZXN0TnVsbGFibGVP
YmpBdHRyKCkpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpM
ZW5pZW50VGVzdE9iakF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9iakxlbmllbnRUZXN0T2JqQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqKQogewogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xNjczLDEyICsxODU5LDIxIEBAIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iakxlbmllbnRUZXN0T2JqQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KLSAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhz
dGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwubGVuaWVudFRlc3RPYmpBdHRy
KCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakxlbmllbnRUZXN0T2JqQXR0ckdldHRlcihzdGF0ZSwgY2Fz
dGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iakxlbmllbnRUZXN0T2JqQXR0ckdldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMo
c3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmxlbmllbnRUZXN0T2JqQXR0
cigpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqVW5mb3Jn
ZWFibGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpVbmZvcmdlYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KikKIHsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwpAQCAtMTY4OCwxMiArMTg4MywyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpVbmZvcmdlYWJsZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93
R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAidW5mb3JnZWFibGVBdHRyIik7CiAg
ICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpVbmZvcmdlYWJsZUF0dHJHZXR0ZXIoc3RhdGUsIGNh
c3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpVbmZvcmdlYWJsZUF0dHJHZXR0ZXIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmlu
Z1dpdGhDYWNoZShzdGF0ZSwgaW1wbC51bmZvcmdlYWJsZUF0dHIoKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1
ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0dldHRlcihFeGVj
U3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0
clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KikKIHsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwpAQCAtMTcwMywxMiArMTkwNywyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhFeGVjU3RhdGUqIHN0YXRlLCBF
bgogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93
R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAic3RyaW5nQXR0clRyZWF0aW5nTnVs
bEFzRW1wdHlTdHJpbmciKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialN0cmluZ0F0dHJU
cmVhdGluZ051bGxBc0VtcHR5U3RyaW5nR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisK
K0pTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdHZXR0
ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0
cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5zdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0
cmluZygpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialhNTE9iakF0dHJHZXR0ZXIoRXhlY1N0
YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialhNTE9iakF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUs
IEpTT2JqZWN0KikKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTcxOCwxMiArMTkz
MSwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpYTUxPYmpBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRl
c3RPYmoiLCAiWE1MT2JqQXR0ciIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCksIGltcGwueG1sT2JqQXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpY
TUxPYmpBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0
T2JqWE1MT2JqQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmpl
Y3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09i
amVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBpbXBs
LnhtbE9iakF0dHIoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVz
dE9iakNyZWF0ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqQ3JlYXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCopCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKQEAgLTE3MzMsMTIgKzE5NTUsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ3JlYXRl
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGUKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5
cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImNyZWF0ZSIpOwogICAgIH0KLSAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNUZXN0T2JqQ3JlYXRlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUg
anNUZXN0T2JqQ3JlYXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09i
amVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlz
T2JqZWN0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKGltcGwuaXNDcmVhdGUoKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1
ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9i
aiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09i
amVjdCopCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE3NDgsMTIgKzE5NzksMjEg
QEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGkKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2Jq
IiwgInJlZmxlY3RlZFN0cmluZ0F0dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialJl
ZmxlY3RlZFN0cmluZ0F0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1
ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVO
VVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3Jh
cHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGlt
cGwuZmFzdEdldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHN0cmluZ2F0
dHJBdHRyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHJH
ZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alJlZmxlY3RlZEludGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqKQogewogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CkBAIC0xNzYzLDEyICsyMDAzLDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJl
ZmxlY3RlZEludGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0CiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJyZWZsZWN0ZWRJbnRlZ3JhbEF0dHIiKTsK
ICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0ckdldHRlcihz
dGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEludGVn
cmFsQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7
CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzTnVtYmVyKGltcGwuZ2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5h
bWVzOjpyZWZsZWN0ZWRpbnRlZ3JhbGF0dHJBdHRyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RP
YmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RP
YmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3Jh
bEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUsIEpTT2JqZWN0KikKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTc3OCwx
MiArMjAyNywyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZElu
dGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSgogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0
ZSwgIlRlc3RPYmoiLCAicmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHIiKTsKICAgICB9Ci0g
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyR2V0dGVyKHN0
YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVW5zaWdu
ZWRJbnRlZ3JhbEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2Jq
ZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNP
YmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNW
YWx1ZSByZXN1bHQgPSBqc051bWJlcihzdGQ6Om1heCgwLCBpbXBsLmdldEludGVncmFsQXR0cmli
dXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdW5zaWduZWRpbnRlZ3JhbGF0dHJBdHRy
KSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHJHZXR0ZXIo
RXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxl
Y3RlZEJvb2xlYW5BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCopCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
QEAgLTE3OTMsMTIgKzIwNTEsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVk
Qm9vbGVhbkF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGgKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVF
cnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJlZmxlY3RlZEJvb2xlYW5BdHRyIik7CiAgICAgfQot
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0ckdldHRlcihzdGF0ZSwgY2Fz
dGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyR2V0
dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNC
b29sZWFuKGltcGwuZmFzdEhhc0F0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3Rl
ZGJvb2xlYW5hdHRyQXR0cikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVJM
QXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUmVmbGVjdGVkVVJMQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqKQogewogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CkBAIC0xODA4LDEyICsyMDc1LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJl
ZmxlY3RlZFVSTEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhCiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJyZWZsZWN0ZWRVUkxBdHRyIik7CiAgICAg
fQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyR2V0dGVyKHN0YXRlLCBjYXN0
ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0ckdldHRlcihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5n
V2l0aENhY2hlKHN0YXRlLCBpbXBsLmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6
OnJlZmxlY3RlZHVybGF0dHJBdHRyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0
ZWRTdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCopCiB7CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE4MjMsMTIgKzIwOTksMjEgQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGkKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVy
biB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJlZmxlY3RlZFN0cmlu
Z0F0dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJH
ZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0
ZWRTdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVj
dCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2Jq
ZWN0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuZmFzdEdldEF0dHJpYnV0
ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRTdHJpbmdBdHRyQXR0cikpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
CiAKK0pTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyR2V0dGVyKEV4
ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0
ZWRDdXN0b21JbnRlZ3JhbEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KikKIHsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwpAQCAtMTgzOCwxMiArMjEyMywyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZs
ZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVgogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVy
VHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAicmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRy
Iik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0
dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpSZWZs
ZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2Jq
KiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BB
UkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7
CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmdldEludGVncmFsQXR0cmlidXRl
KFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEludGVncmFsQXR0ckF0dHIpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogCitKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyR2V0dGVyKEV4
ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0
ZWRDdXN0b21Cb29sZWFuQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CkBAIC0xODUzLDEyICsyMTQ3LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxl
Y3RlZEN1c3RvbUJvb2xlYW5BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhCiAgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJU
eXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJyZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0ciIp
OwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHJH
ZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0
ZWRDdXN0b21Cb29sZWFuQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRo
aXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0o
dGhpc09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzQm9vbGVhbihpbXBsLmZhc3RIYXNBdHRyaWJ1dGUoV2ViQ29y
ZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50Qm9vbGVhbkF0dHJBdHRyKSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNW
YWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpT
VGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lLCBKU09iamVjdCopCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE4NjgsMTMg
KzIxNzEsMjIgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZQogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwg
IlRlc3RPYmoiLCAicmVmbGVjdGVkQ3VzdG9tVVJMQXR0ciIpOwogICAgIH0KLSAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykp
OworfQorCitKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHJHZXR0ZXIoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dp
dGhDYWNoZShzdGF0ZSwgaW1wbC5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpj
dXN0b21Db250ZW50VVJMQXR0ckF0dHIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVS
RSkKK0pTVmFsdWUganNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUdldHRlcihFeGVj
U3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqRW5hYmxlZEF0
UnVudGltZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CkBAIC0xODg0LDEzICsyMTk2LDIyIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakVuYWJsZWRB
dFJ1bnRpbWVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsCiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBl
RXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJlbmFibGVkQXRSdW50aW1lQXR0cmlidXRlIik7CiAg
ICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlR2V0dGVy
KHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqRW5hYmxlZEF0UnVu
dGltZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmpl
Y3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09i
amVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1Zh
bHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmVuYWJsZWRBdFJ1bnRp
bWVBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKICNlbmRpZgogCitKU1ZhbHVlIGpzVGVzdE9ialR5cGVkQXJy
YXlBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpUeXBlZEFycmF5QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqKQogewogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CkBAIC0xOTAwLDEyICsyMjIxLDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialR5
cGVkQXJyYXlBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1CiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ0eXBlZEFycmF5QXR0ciIpOwogICAgIH0K
LSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVz
dWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwudHlwZWRB
cnJheUF0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqVHlwZWRBcnJheUF0dHJHZXR0ZXIoc3RhdGUs
IGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpUeXBlZEFycmF5QXR0ckdldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMo
c3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnR5cGVkQXJyYXlBdHRyKCkp
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aEdl
dHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KikKIHsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTkxNSwxNCArMjI0NSwyMyBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAg
cmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiYXR0cldpdGhH
ZXR0ZXJFeGNlcHRpb24iKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rl
c3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwor
fQorCitKU1ZhbHVlIGpzVGVzdE9iakF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBq
c051bWJlcihpbXBsLmF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVjKSk7CiAgICAgc2V0RE9NRXhj
ZXB0aW9uKHN0YXRlLCBlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwor
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aEdldHRl
ckV4Y2VwdGlvbldpdGhNZXNzYWdlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdl
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
LCBKU09iamVjdCopCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE5MzIsMTQgKzIy
NzEsMjMgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25X
aXRoTWVzc2FnZShFeGVjU3RhdGUqIHN0YXRlLCBFbmMKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJU
ZXN0T2JqIiwgImF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uV2l0aE1lc3NhZ2UiKTsKICAgICB9Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlv
bldpdGhNZXNzYWdlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNU
ZXN0T2JqQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25XaXRoTWVzc2FnZUdldHRlcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CiAgICAgRXhjZXB0aW9uQ29kZVdpdGhN
ZXNzYWdlIGVjOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzTnVtYmVyKGltcGwuYXR0cldpdGhHZXR0ZXJFeGNlcHRpb25XaXRoTWVzc2FnZShlYykpOwog
ICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2Jq
QXR0cldpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisK
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVj
dCopCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE5NDksMTIgKzIyOTcsMjEgQEAg
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7
CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwg
ImF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpB
dHRyV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitK
U1ZhbHVlIGpzVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5hdHRy
V2l0aFNldHRlckV4Y2VwdGlvbigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iakF0dHJXaXRo
U2V0dGVyRXhjZXB0aW9uV2l0aE1lc3NhZ2VHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7
CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uV2l0aE1l
c3NhZ2UoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUsIEpTT2JqZWN0KikKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTk2NCwx
MiArMjMyMSwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aFNldHRlckV4Y2Vw
dGlvbldpdGhNZXNzYWdlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuYwogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0
ZSwgIlRlc3RPYmoiLCAiYXR0cldpdGhTZXR0ZXJFeGNlcHRpb25XaXRoTWVzc2FnZSIpOwogICAg
IH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25XaXRoTWVzc2Fn
ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iakF0dHJX
aXRoU2V0dGVyRXhjZXB0aW9uV2l0aE1lc3NhZ2VHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5V
U0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFw
cGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmF0dHJXaXRoU2V0dGVy
RXhjZXB0aW9uV2l0aE1lc3NhZ2UoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdB
dHRyV2l0aEdldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwog
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpT
T2JqZWN0KikKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTk3OSwxNCArMjM0NSwy
MyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlv
bihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSgogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RP
YmoiLCAic3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24iKTsKICAgICB9CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkdl
dHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0
dHJXaXRoR2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiog
dGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJB
TSh0aGlzT2JqZWN0KTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53
cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwg
aW1wbC5zdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYykpOwogICAgIHNldERPTUV4Y2Vw
dGlvbihzdGF0ZSwgZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cldpdGhT
ZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCop
CiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE5OTYsMTIgKzIzNzEsMjEgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEoKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAg
ICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInN0
cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RP
YmpTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykp
OworfQorCitKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uR2V0
dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNT
dHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuc3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24o
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpY3RUeXBlQ2hlY2tpbmdBdHRyaWJ1dGVH
ZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alN0cmljdFR5cGVDaGVja2luZ0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqKQogewogICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CkBAIC0yMDExLDEyICsyMzk1LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialN0cmljdFR5cGVDaGVja2luZ0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhy
b3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJzdHJpY3RUeXBlQ2hlY2tpbmdB
dHRyaWJ1dGUiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpLCBpbXBsLnN0cmljdFR5cGVDaGVja2luZ0F0dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rl
c3RPYmpTdHJpY3RUeXBlQ2hlY2tpbmdBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMp
KTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpY3RUeXBlQ2hlY2tpbmdBdHRyaWJ1dGVHZXR0
ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pT
KHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgaW1wbC5zdHJpY3RUeXBlQ2hlY2tp
bmdBdHRyaWJ1dGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVz
dE9iakN1c3RvbUF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakN1c3RvbUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KikKIHsKICAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwpAQCAtMjAyNiwxMCArMjQxOSwxOSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpDdXN0b21BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93
R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiY3VzdG9tQXR0ciIpOwogICAgIH0K
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmN1c3RvbUF0dHIoKnN0YXRl
KSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpDdXN0b21BdHRyR2V0dGVy
KHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqQ3VzdG9tQXR0ckdl
dHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgcmV0
dXJuIHRoaXNPYmplY3QtPmN1c3RvbUF0dHIoKnN0YXRlKTsKIH0KIAogCitKU1ZhbHVlIGpzVGVz
dE9iak9uZm9vR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpPbmZvbyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CkBAIC0yMDM5LDExICsyNDQxLDIwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak9uZm9vKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVyCiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBl
RXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJvbmZvbyIpOwogICAgIH0KKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVGVzdE9iak9uZm9vR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9
CisKK0pTVmFsdWUganNUZXN0T2JqT25mb29HZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VE
X1BBUkFNKHRoaXNPYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShldmVudEhhbmRsZXJBdHRyaWJ1dGUoY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpLCBldmVudE5hbWVzKCkuZm9vRXZlbnQpKTsKKyAgICByZXR1cm4gZXZlbnRIYW5kbGVyQXR0
cmlidXRlKHRoaXNPYmplY3QtPndyYXBwZWQoKSwgZXZlbnROYW1lcygpLmZvb0V2ZW50KTsKIH0K
IAogCitKU1ZhbHVlIGpzVGVzdE9iak9ud2Via2l0Zm9vR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpPbndlYmtpdGZvbyhFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3Qq
KQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMDUzLDExICsyNDY0LDIwIEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9iak9ud2Via2l0Zm9vKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAg
ICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm9u
d2Via2l0Zm9vIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2Jq
T253ZWJraXRmb29HZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rl
c3RPYmpPbndlYmtpdGZvb0dldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNP
YmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhp
c09iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGV2ZW50SGFuZGxlckF0dHJpYnV0ZShjYXN0ZWRUaGlzLT53cmFwcGVkKCksIGV2ZW50
TmFtZXMoKS5mb29FdmVudCkpOworICAgIHJldHVybiBldmVudEhhbmRsZXJBdHRyaWJ1dGUodGhp
c09iamVjdC0+d3JhcHBlZCgpLCBldmVudE5hbWVzKCkuZm9vRXZlbnQpOwogfQogCiAKK0pTVmFs
dWUganNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpT
VGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRy
aWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUsIEpTT2JqZWN0KikKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjA2Nywx
MiArMjQ4NywyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRy
aWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdQogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0
ZSwgIlRlc3RPYmoiLCAid2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlIik7CiAgICAgfQotICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNhc3Rl
ZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVH
ZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBq
c051bWJlcihpbXBsLndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZSgqc3RhdGUpKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitK
U1ZhbHVlIGpzVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlR2V0
dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpX
aXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqKQogewogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMDgyLDEyICsyNTExLDIxIEBAIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlKEV4ZWNT
dGF0ZSogc3RhdGUsCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBy
ZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoQ2FsbFdp
dGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0
T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNh
c3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJD
YWxsV2l0aEF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNP
YmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhp
c09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwud2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdp
dGhBdHRyaWJ1dGUoKnN0YXRlKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsK
KwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRy
aWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUsIEpTT2JqZWN0KikKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjA5Nywx
NSArMjUzNSwyNCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbgogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0
ZSwgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUiKTsKICAg
ICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dEF0dHJpYnV0ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1Zh
bHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlR2V0dGVyKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKICAgICBhdXRvKiBjb250
ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3Rh
dGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QXR0cmlidXRlKCpjb250ZXh0KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwg
dGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBdHRyaWJ1dGUoKmNvbnRleHQpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFs
dWUganNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzR2V0dGVyKEV4ZWNTdGF0
ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0U3Rh
dGVBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KikKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwpAQCAtMjExNSwxNCArMjU2MiwyMyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2Ny
aXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZAogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlw
ZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAid2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2Vz
Iik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqV2l0aFNjcmlw
dFN0YXRlQXR0cmlidXRlUmFpc2VzR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pT
VmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzR2V0dGVyKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpT
VmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGlt
cGwud2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKCpzdGF0ZSwgZWMpKTsKKyAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9K
UyhzdGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlwdFN0YXRl
QXR0cmlidXRlUmFpc2VzKCpzdGF0ZSwgZWMpKTsKICAgICBzZXRET01FeGNlcHRpb24oc3RhdGUs
IGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QXR0cmlidXRlUmFpc2VzR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNl
cyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSwgSlNPYmplY3QqKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMTMyLDE3ICsy
NTg4LDI2IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0QXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSogc3RhCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAi
VGVzdE9iaiIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcyIpOwog
ICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialdpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9
CisKK0pTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVS
YWlzZXNHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQorewor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOwog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+
Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVS
YWlzZXMoKmNvbnRleHQsIGVjKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQg
PSB0b0pTKHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcygqY29udGV4dCwgZWMpKTsKICAgICBzZXRE
T01FeGNlcHRpb24oc3RhdGUsIGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRl
KiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KikKIHsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjE1MiwxNSArMjYxNywyNCBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmli
dXRlKEV4ZWNTdAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0
dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZSIpOwogICAgIH0KKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5k
U2NyaXB0U3RhdGVBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNW
YWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0
cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sK
KyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsK
ICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAo
IWNvbnRleHQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJl
c3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLndpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUoKnN0YXRlLCAqY29u
dGV4dCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQo
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9i
amVjdCgpLCBpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRy
aWJ1dGUoKnN0YXRlLCAqY29udGV4dCkpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNW
YWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0
cmlidXRlUmFpc2VzR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0
cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lLCBKU09iamVjdCopCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAg
LTIxNzAsMTcgKzI2NDQsMjYgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcygKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJv
cigqc3RhdGUsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0
U3RhdGVBdHRyaWJ1dGVSYWlzZXMiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmli
dXRlUmFpc2VzR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0
T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNl
c0dldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CiAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRl
QXR0cmlidXRlUmFpc2VzKCpzdGF0ZSwgKmNvbnRleHQsIGVjKSk7CisgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Cisg
ICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3Qo
KSwgaW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRl
UmFpc2VzKCpzdGF0ZSwgKmNvbnRleHQsIGVjKSk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRl
LCBlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rl
c3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KikKIHsKICAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjE5MCwxNSArMjY3MywyNCBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0
aFNwYWNlc0F0dHJpYgogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAg
cmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAid2l0aFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUiKTsKICAg
ICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZUdldHRlcihzdGF0ZSwg
Y2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKICAgICBhdXRvKiBjb250ZXh0ID0ganND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5k
U2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlKCpzdGF0ZSwgKmNvbnRleHQpKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgSlNWYWx1
ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgaW1wbC53
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0
ZSgqc3RhdGUsICpjb250ZXh0KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVl
IGpzVGVzdE9ialdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGVHZXR0ZXIo
RXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhT
Y3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KikKIHsKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjIwOCwxMyArMjcwMCwyMiBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlKEV4ZWNT
dGF0ZSogc3RhdAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0
dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEFy
Z3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwg
Y2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlwdEFyZ3VtZW50c0FuZENh
bGxTdGFja0F0dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRz
QW5kQ2FsbFN0YWNrQXR0cmlidXRlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pT
VmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZUdl
dHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlMoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRBcmd1
bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAog
CiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpCitKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0
cjFHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iakNvbmRpdGlvbmFsQXR0cjEoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KikKIHsKICAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwpAQCAtMjIyNCwxNCArMjcyNSwyMyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25k
aXRpb25hbEF0dHIxKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYQogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVy
VHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiY29uZGl0aW9uYWxBdHRyMSIpOwogICAgIH0K
LSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMUdldHRlcihzdGF0ZSwgY2FzdGVk
VGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjFHZXR0ZXIoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihp
bXBsLmNvbmRpdGlvbmFsQXR0cjEoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRp
dGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQorSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25h
bEF0dHIyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCopCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKQEAgLTIyNDEsMTQgKzI3NTEsMjMgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
Q29uZGl0aW9uYWxBdHRyMihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmEK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dl
dHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImNvbmRpdGlvbmFsQXR0cjIiKTsKICAg
ICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjJHZXR0ZXIoc3RhdGUsIGNh
c3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyR2V0dGVy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1i
ZXIoaW1wbC5jb25kaXRpb25hbEF0dHIyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShD
b25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKK0pTVmFsdWUganNUZXN0T2JqQ29uZGl0
aW9uYWxBdHRyM0dldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqKQogewogICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CkBAIC0yMjU4LDE0ICsyNzc3LDIzIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iakNvbmRpdGlvbmFsQXR0cjMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhy
b3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJjb25kaXRpb25hbEF0dHIzIik7
CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzR2V0dGVyKHN0YXRl
LCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyM0dl
dHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
TnVtYmVyKGltcGwuY29uZGl0aW9uYWxBdHRyMygpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFC
TEUoQ29uZGl0aW9uMSkKK0pTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVj
dG9yR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KikKIHsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwpAQCAtMjI3NSwxMiArMjgwMywyMSBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVgogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJu
IHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAiY29uZGl0aW9uYWxBdHRy
NCIpOwogICAgIH0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE9iamVjdEE6Omdl
dENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSkpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0
cnVjdG9yR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2Jq
Q29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNF
RF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICByZXR1cm4gSlNUZXN0T2JqZWN0QTo6Z2V0Q29uc3Ry
dWN0b3Ioc3RhdGUtPnZtKCksIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKTsKIH0KIAogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCitKU1Zh
bHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUq
LCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRy
NUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lLCBKU09iamVjdCopCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAg
LTIyOTAsMTIgKzI4MjcsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxB
dHRyNUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1YKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJv
cigqc3RhdGUsICJUZXN0T2JqIiwgImNvbmRpdGlvbmFsQXR0cjUiKTsKICAgICB9Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RPYmplY3RCOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+
dm0oKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3RvckdldHRlcihzdGF0ZSwg
Y2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25z
dHJ1Y3RvckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7
CisgICAgcmV0dXJuIEpTVGVzdE9iamVjdEI6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCB0
aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSk7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENv
bmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRpb24yKQorSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRp
b25hbEF0dHI2Q29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmpl
Y3QqKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMzA1LDExICsyODUxLDIwIEBA
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvcihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkg
ewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIs
ICJjb25kaXRpb25hbEF0dHI2Iik7CiAgICAgfQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNUZXN0T2JqZWN0Qzo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpDb25k
aXRpb25hbEF0dHI2Q29uc3RydWN0b3JHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKwor
SlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIHJldHVybiBKU1Rlc3RP
YmplY3RDOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgdGhpc09iamVjdC0+Z2xvYmFsT2Jq
ZWN0KCkpOwogfQogCiAjZW5kaWYKIAorSlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUx
R2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpDYWNoZWRBdHRyaWJ1dGUxKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCopCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKQEAgLTIzMTksMTUgKzI4NzQsMjQgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ2FjaGVk
QXR0cmlidXRlMShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmEKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5
cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImNhY2hlZEF0dHJpYnV0ZTEiKTsKICAgICB9Ci0g
ICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUgPSBjYXN0ZWRUaGlzLT5tX2NhY2hlZEF0dHJpYnV0
ZTEuZ2V0KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FjaGVkVmFsdWUpOwot
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUxR2V0dGVyKHN0YXRlLCBjYXN0ZWRU
aGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMUdldHRlcihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgaWYgKEpTVmFsdWUg
Y2FjaGVkVmFsdWUgPSB0aGlzT2JqZWN0LT5tX2NhY2hlZEF0dHJpYnV0ZTEuZ2V0KCkpCisgICAg
ICAgIHJldHVybiBjYWNoZWRWYWx1ZTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3Jh
cHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1wbC5jYWNoZWRBdHRyaWJ1dGUxKCk7Ci0g
ICAgY2FzdGVkVGhpcy0+bV9jYWNoZWRBdHRyaWJ1dGUxLnNldChzdGF0ZS0+dm0oKSwgY2FzdGVk
VGhpcywgcmVzdWx0KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAg
dGhpc09iamVjdC0+bV9jYWNoZWRBdHRyaWJ1dGUxLnNldChzdGF0ZS0+dm0oKSwgdGhpc09iamVj
dCwgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2Jq
Q2FjaGVkQXR0cmlidXRlMkdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqKQogewogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMzM3LDE1ICsyOTAxLDI0IEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1
cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJjYWNoZWRBdHRyaWJ1
dGUyIik7CiAgICAgfQotICAgIGlmIChKU1ZhbHVlIGNhY2hlZFZhbHVlID0gY2FzdGVkVGhpcy0+
bV9jYWNoZWRBdHRyaWJ1dGUyLmdldCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGNhY2hlZFZhbHVlKTsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMkdldHRl
cihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iakNhY2hlZEF0dHJp
YnV0ZTJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQorewor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOwor
ICAgIGlmIChKU1ZhbHVlIGNhY2hlZFZhbHVlID0gdGhpc09iamVjdC0+bV9jYWNoZWRBdHRyaWJ1
dGUyLmdldCgpKQorICAgICAgICByZXR1cm4gY2FjaGVkVmFsdWU7CisgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwuY2FjaGVk
QXR0cmlidXRlMigpOwotICAgIGNhc3RlZFRoaXMtPm1fY2FjaGVkQXR0cmlidXRlMi5zZXQoc3Rh
dGUtPnZtKCksIGNhc3RlZFRoaXMsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOworICAgIHRoaXNPYmplY3QtPm1fY2FjaGVkQXR0cmlidXRlMi5zZXQoc3RhdGUt
PnZtKCksIHRoaXNPYmplY3QsIHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitK
U1ZhbHVlIGpzVGVzdE9iakFueUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoq
KTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQW55QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCopCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTIzNTUsMTIgKzI5MjgsMjEgQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqQW55QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAg
ICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImFueUF0
dHJpYnV0ZSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqQW55QXR0cmlidXRlR2V0dGVy
KHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqQW55QXR0cmlidXRl
R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0g
aW1wbC5hbnlBdHRyaWJ1dGUoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iakNvbnRlbnREb2N1
bWVudEdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqQ29udGVudERvY3VtZW50KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCopCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKQEAgLTIzNzAsMTEgKzI5NTIsMjAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29u
dGVudERvY3VtZW50KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWwKICAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRl
clR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgImNvbnRlbnREb2N1bWVudCIpOwogICAgIH0K
LSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoc2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUoc3RhdGUsIGltcGwuY29udGVudERv
Y3VtZW50KCkpID8gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwu
Y29udGVudERvY3VtZW50KCkpIDoganNOdWxsKCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNUZXN0T2JqQ29udGVudERvY3VtZW50R2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9
CisKK0pTVmFsdWUganNUZXN0T2JqQ29udGVudERvY3VtZW50R2V0dGVyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwor
ICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC0+d3JhcHBlZCgpOworICAgIHJldHVybiBzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShzdGF0ZSwg
aW1wbC5jb250ZW50RG9jdW1lbnQoKSkgPyB0b0pTKHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxP
YmplY3QoKSwgaW1wbC5jb250ZW50RG9jdW1lbnQoKSkgOiBqc051bGwoKTsKIH0KIAogCitKU1Zh
bHVlIGpzVGVzdE9iak11dGFibGVQb2ludEdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsK
KwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTXV0YWJsZVBvaW50KEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCopCiB7CiAg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTIzODQsMTIgKzI5NzUsMjEgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqTXV0YWJsZVBvaW50KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAg
IHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm11dGFibGVQ
b2ludCIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwot
ICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCksIFNWR1N0YXRpY1Byb3BlcnR5VGVhck9mZjxUZXN0T2JqLCBTVkdQb2ludD46OmNyZWF0ZShp
bXBsLCBpbXBsLm11dGFibGVQb2ludCgpLCAmVGVzdE9iajo6dXBkYXRlTXV0YWJsZVBvaW50KSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNUZXN0T2JqTXV0YWJsZVBvaW50R2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7
Cit9CisKK0pTVmFsdWUganNUZXN0T2JqTXV0YWJsZVBvaW50R2V0dGVyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwor
ICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgdGhpc09iamVj
dC0+Z2xvYmFsT2JqZWN0KCksIFNWR1N0YXRpY1Byb3BlcnR5VGVhck9mZjxUZXN0T2JqLCBTVkdQ
b2ludD46OmNyZWF0ZShpbXBsLCBpbXBsLm11dGFibGVQb2ludCgpLCAmVGVzdE9iajo6dXBkYXRl
TXV0YWJsZVBvaW50KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVz
dE9iakltbXV0YWJsZVBvaW50R2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpJbW11dGFibGVQb2ludChFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqKQogewogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yMzk5LDEyICsyOTk5LDIxIEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9iakltbXV0YWJsZVBvaW50KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1
cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJpbW11dGFibGVQb2lu
dCIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCks
IFNWR1Byb3BlcnR5VGVhck9mZjxTVkdQb2ludD46OmNyZWF0ZShpbXBsLmltbXV0YWJsZVBvaW50
KCkpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1Rlc3RPYmpJbW11dGFibGVQb2ludEdldHRlcihzdGF0ZSwgY2FzdGVk
VGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iakltbXV0YWJsZVBvaW50R2V0dGVyKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwg
dGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIFNWR1Byb3BlcnR5VGVhck9mZjxTVkdQb2ludD46
OmNyZWF0ZShpbXBsLmltbXV0YWJsZVBvaW50KCkpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
CiAKK0pTVmFsdWUganNUZXN0T2JqU3RyYXdiZXJyeUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RP
YmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyYXdiZXJyeShFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqKQog
ewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yNDE0LDEyICszMDIzLDIxIEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmF3YmVycnkoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAg
ICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJzdHJh
d2JlcnJ5Iik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpTdHJhd2JlcnJ5R2V0dGVyKHN0
YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqU3RyYXdiZXJyeUdldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVt
YmVyKGltcGwuYmx1ZWJlcnJ5KCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqU3RyaWN0Rmxv
YXRHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialN0cmljdEZsb2F0KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCopCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
QEAgLTI0MjksMTIgKzMwNDcsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaWN0Rmxv
YXQoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLAogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVy
cm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAic3RyaWN0RmxvYXQiKTsKICAgICB9Ci0gICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVGVzdE9ialN0cmljdEZsb2F0R2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pT
VmFsdWUganNUZXN0T2JqU3RyaWN0RmxvYXRHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VE
X1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVk
KCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLnN0cmljdEZsb2F0KCkpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0Owog
fQogCiAKK0pTVmFsdWUganNUZXN0T2JqRGVzY3JpcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiwgSlNU
ZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakRlc2NyaXB0aW9uKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVj
dCopCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI0NDQsMTIgKzMwNzEsMjEgQEAg
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqRGVzY3JpcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
ICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAi
ZGVzY3JpcHRpb24iKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakRlc2NyaXB0aW9uR2V0
dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqRGVzY3JpcHRp
b25HZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQg
PSBqc051bWJlcihpbXBsLmRlc2NyaXB0aW9uKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2Jq
SWRHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iaklkKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lLCBKU09iamVjdCopCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI0NTks
MTIgKzMwOTUsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqSWQoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU4KICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3Rh
dGUsICJUZXN0T2JqIiwgImlkIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpJZEdldHRl
cihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iaklkR2V0dGVyKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIo
aW1wbC5pZCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iakhhc2hHZXR0ZXIoRXhlY1N0YXRl
KiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakhhc2goRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0
KikKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjQ3NCwxMiArMzExOSwyMSBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpIYXNoKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
ICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAi
aGFzaCIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqSGFzaEdldHRlcihzdGF0ZSwgY2Fz
dGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iakhhc2hHZXR0ZXIoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShz
dGF0ZSwgaW1wbC5oYXNoKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqUmVwbGFjZWFibGVB
dHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCopCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKQEAgLTI0ODksMTIgKzMxNDMsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGgKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0
aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInJlcGxhY2VhYmxlQXR0cmli
dXRlIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZUdl
dHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9ialJlcGxhY2Vh
YmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVj
dCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2Jq
ZWN0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5yZXBsYWNlYWJsZUF0dHJpYnV0ZSgpKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAog
CitKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlRG91YmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0
ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZURvdWJs
ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSwgSlNPYmplY3QqKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0y
NTA0LDEyICszMTY3LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlRG91Ymxl
QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlCiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3Io
KnN0YXRlLCAiVGVzdE9iaiIsICJudWxsYWJsZURvdWJsZUF0dHJpYnV0ZSIpOwogICAgIH0KLSAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNUZXN0T2JqTnVsbGFibGVEb3VibGVBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNh
c3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZURvdWJsZUF0dHJpYnV0
ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9
IHRvTnVsbGFibGVKU051bWJlcihpbXBsLm51bGxhYmxlRG91YmxlQXR0cmlidXRlKCkpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
CiAKK0pTVmFsdWUganNUZXN0T2JqTnVsbGFibGVMb25nQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0
ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUxvbmdB
dHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUsIEpTT2JqZWN0KikKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjUx
OSwxMiArMzE5MSwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUxvbmdBdHRy
aWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdAogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3RPYmoiLCAibnVsbGFibGVMb25nQXR0cmlidXRlIik7CiAgICAgfQotICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1Rlc3RPYmpOdWxsYWJsZUxvbmdBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRo
aXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUxvbmdBdHRyaWJ1dGVHZXR0ZXIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSB0b051bGxh
YmxlSlNOdW1iZXIoaW1wbC5udWxsYWJsZUxvbmdBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1
ZSBqc1Rlc3RPYmpOdWxsYWJsZUJvb2xlYW5BdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNU
ZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlQm9vbGVhbkF0dHJp
YnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSwgSlNPYmplY3QqKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yNTM0LDEy
ICszMjE1LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlQm9vbGVhbkF0dHJp
YnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1CiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRl
LCAiVGVzdE9iaiIsICJudWxsYWJsZUJvb2xlYW5BdHRyaWJ1dGUiKTsKICAgICB9Ci0gICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVGVzdE9iak51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZUdldHRlcihzdGF0ZSwgY2FzdGVk
VGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZUdl
dHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
Qm9vbGVhbihpbXBsLm51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVl
IGpzVGVzdE9iak51bGxhYmxlU3RyaW5nQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ0F0dHJpYnV0
ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSwgSlNPYmplY3QqKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yNTQ5LDEyICsz
MjM5LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nQXR0cmlidXRl
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAi
VGVzdE9iaiIsICJudWxsYWJsZVN0cmluZ0F0dHJpYnV0ZSIpOwogICAgIH0KLSAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNUZXN0T2JqTnVsbGFibGVTdHJpbmdBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMp
KTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ0F0dHJpYnV0ZUdldHRlcihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5n
T3JOdWxsKHN0YXRlLCBpbXBsLm51bGxhYmxlU3RyaW5nQXR0cmlidXRlKCkpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pT
VmFsdWUganNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0
YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlTG9u
Z1NldHRhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCopCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKQEAgLTI1NjQsMTIgKzMyNjMsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFi
bGVMb25nU2V0dGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEoKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5
cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIm51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRl
Iik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpOdWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJp
YnV0ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iak51
bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNF
RF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBl
ZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9OdWxsYWJsZUpTTnVtYmVyKGltcGwubnVsbGFi
bGVMb25nU2V0dGFibGVBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpOdWxs
YWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiop
OworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmli
dXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lLCBKU09iamVjdCopCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI1NzksMTIg
KzMyODcsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJs
ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGUKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUs
ICJUZXN0T2JqIiwgIm51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUiKTsKICAgICB9Ci0g
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXIo
c3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmlu
Z1NldHRhYmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhp
c09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0
aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdPck51bGwoc3RhdGUsIGltcGwubnVsbGFibGVTdHJp
bmdTZXR0YWJsZUF0dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxl
U3RyaW5nVmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KikKIHsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwpAQCAtMjU5NCwxNCArMzMxMSwyMyBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1ZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJu
IHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAibnVsbGFibGVTdHJpbmdW
YWx1ZSIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iak51bGxh
YmxlU3RyaW5nVmFsdWVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBq
c1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1ZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNF
RF9QQVJBTSh0aGlzT2JqZWN0KTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSB0b051bGxhYmxlSlNOdW1iZXIo
aW1wbC5udWxsYWJsZVN0cmluZ1ZhbHVlKGVjKSk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRl
LCBlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRl
KiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZShFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNP
YmplY3QqKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yNjExLDEyICszMzM3LDIx
IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9i
aiIsICJhdHRyaWJ1dGUiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakF0dHJpYnV0ZUdl
dHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0
ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmF0dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1Zh
bHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlR2V0dGVyKEV4ZWNTdGF0
ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRo
UmVzZXJ2ZWRFbnVtVHlwZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CkBAIC0yNjI2LDEyICszMzYxLDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0
ZVdpdGhSZXNlcnZlZEVudW1UeXBlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKCiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBl
RXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJhdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZSIp
OwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5
cGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpBdHRy
aWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURf
UEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQo
KTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmF0
dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2Jq
UHV0Rm9yd2FyZHNBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCopCiB7
CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTI2NDEsMTIgKzMzODUsMjEgQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGgKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAg
ICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInB1dEZv
cndhcmRzQXR0cmlidXRlIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSwgaW1wbC5wdXRGb3J3YXJkc0F0dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rl
c3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQor
CitKU1ZhbHVlIGpzVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgdGhpc09i
amVjdC0+Z2xvYmFsT2JqZWN0KCksIGltcGwucHV0Rm9yd2FyZHNBdHRyaWJ1dGUoKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialB1dEZvcndhcmRzTnVsbGFi
bGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KikKIHsK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMjY1Niw5ICszNDA5LDE2IEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAg
ICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJwdXRGb3J3
YXJkc051bGxhYmxlQXR0cmlidXRlIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5wdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlKCkp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGVHZXR0ZXIoc3Rh
dGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc051bGxh
YmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVj
dCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2Jq
ZWN0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIGltcGwu
cHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
CiAKQEAgLTYxNzcsNiArNjkzNywyMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQXR0YWNoU2hhZG93Um9vdChFeGVjU3RhdAogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oRXhlY1N0YXRl
KiBzdGF0ZSkKK3sKKyAgICBhdXRvIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9i
aio+KHN0YXRlLT50aGlzVmFsdWUoKSk7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkK
KyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgInRv
SlNPTiIpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0
T2JqOjppbmZvKCkpOworCisgICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3Qo
c3RhdGUpOworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInJlYWRPbmx5U3RyaW5nQXR0ciIpLCBq
c1Rlc3RPYmpSZWFkT25seVN0cmluZ0F0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKKyAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJlbnVt
QXR0ciIpLCBqc1Rlc3RPYmpFbnVtQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImxvbmdB
dHRyIiksIGpzVGVzdE9iakxvbmdBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7CisgICAg
cmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY3JlYXRl
IiksIGpzVGVzdE9iakNyZWF0ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKwogdXNpbmcgVGVzdE9iakl0ZXJhdG9yID0g
SlNET01JdGVyYXRvcjxKU1Rlc3RPYmo+OwogdXNpbmcgVGVzdE9iakl0ZXJhdG9yUHJvdG90eXBl
ID0gSlNET01JdGVyYXRvclByb3RvdHlwZTxKU1Rlc3RPYmo+OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCmluZGV4IDJlMGRm
ZmZiMjYyMGM3NDEwZTk4NDQ3MzA1ZWYxMTIxODUxZjg2OTIuLjc4NzgyMTI5YWU5MjZkM2RkMzE4
OTMzZDdiNjBmNmM4MDFmYzkxZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCkBAIC0xMzMsNiArMTMzLDggQEAgdm9pZCBK
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmRlc3Ryb3koSlNDOjpKU0NlbGwq
IGNlbGwpCiAgICAgdGhpc09iamVjdC0+SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlOjp+SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKCk7CiB9CiAKK0pTVmFs
dWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFsdWVHZXR0ZXIoRXhlY1N0
YXRlKiwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKik7CisKIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVj
dCopCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTE0MiwxMiArMTQ0LDIxIEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewog
ICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSIsICJ2YWx1ZSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1wbC52YWx1
ZSgpID8gaW1wbC52YWx1ZSgpLT5kZXNlcmlhbGl6ZShzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFs
T2JqZWN0KCksIDApIDoganNOdWxsKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlVmFsdWVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1
ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZUdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHRoaXNPYmpl
Y3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09i
amVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBKU1Zh
bHVlIHJlc3VsdCA9IGltcGwudmFsdWUoKSA/IGltcGwudmFsdWUoKS0+ZGVzZXJpYWxpemUoc3Rh
dGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCAwKSA6IGpzTnVsbCgpOworICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VSZWFkb25seVZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZSopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2VSZWFkb25seVZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCopCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKQEAgLTE1NywxMiArMTY4LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVJlYWRvbmx5VmFsdWUoRXhlY1N0YXRlKiBz
dGF0CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhy
b3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZSIsICJyZWFkb25seVZhbHVlIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLnJlYWRvbmx5VmFsdWUo
KSA/IGltcGwucmVhZG9ubHlWYWx1ZSgpLT5kZXNlcmlhbGl6ZShzdGF0ZSwgY2FzdGVkVGhpcy0+
Z2xvYmFsT2JqZWN0KCksIDApIDoganNOdWxsKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlUmVhZG9ubHlWYWx1ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykp
OworfQorCitKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVJlYWRv
bmx5VmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLnJlYWRvbmx5VmFsdWUoKSA/
IGltcGwucmVhZG9ubHlWYWx1ZSgpLT5kZXNlcmlhbGl6ZShzdGF0ZSwgdGhpc09iamVjdC0+Z2xv
YmFsT2JqZWN0KCksIDApIDoganNOdWxsKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitK
U1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlR2V0
dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSopOwor
CiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNo
ZWRWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSwgSlNPYmplY3QqKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0xNzIs
MTUgKzE5MiwyNCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VDYWNoZWRWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLAogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0
ZSwgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UiLCAiY2FjaGVkVmFsdWUiKTsK
ICAgICB9Ci0gICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUgPSBjYXN0ZWRUaGlzLT5tX2NhY2hl
ZFZhbHVlLmdldCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhY2hlZFZhbHVl
KTsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUg
cmVzdWx0ID0gaW1wbC5jYWNoZWRWYWx1ZSgpID8gaW1wbC5jYWNoZWRWYWx1ZSgpLT5kZXNlcmlh
bGl6ZShzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIDApIDoganNOdWxsKCk7Ci0g
ICAgY2FzdGVkVGhpcy0+bV9jYWNoZWRWYWx1ZS5zZXQoc3RhdGUtPnZtKCksIGNhc3RlZFRoaXMs
IHJlc3VsdCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2Fj
aGVkVmFsdWVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1ZUdldHRlcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHRoaXNPYmplY3Qp
Cit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVj
dCk7CisgICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUgPSB0aGlzT2JqZWN0LT5tX2NhY2hlZFZh
bHVlLmdldCgpKQorICAgICAgICByZXR1cm4gY2FjaGVkVmFsdWU7CisgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwuY2FjaGVk
VmFsdWUoKSA/IGltcGwuY2FjaGVkVmFsdWUoKS0+ZGVzZXJpYWxpemUoc3RhdGUsIHRoaXNPYmpl
Y3QtPmdsb2JhbE9iamVjdCgpLCAwKSA6IGpzTnVsbCgpOworICAgIHRoaXNPYmplY3QtPm1fY2Fj
aGVkVmFsdWUuc2V0KHN0YXRlLT52bSgpLCB0aGlzT2JqZWN0LCByZXN1bHQpOworICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VQb3J0c0dldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2UqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlUG9ydHMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0KikKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpA
QCAtMTkwLDExICsyMTksMjAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlUG9ydHMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2QKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJv
cigqc3RhdGUsICJUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlIiwgInBvcnRzIik7
CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNW
YWx1ZSByZXN1bHQgPSBqc0FycmF5KHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
aW1wbC5wb3J0cygpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2VQb3J0c0dldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwogfQogCitKU1ZhbHVlIGpzVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBvcnRzR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogdGhpc09iamVjdCkKK3sKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNBcnJheShzdGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIGltcGwucG9ydHMo
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworCitKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFJlYWRvbmx5VmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiwg
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKik7CiAKIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFJlYWRvbmx5VmFsdWUo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUs
IEpTT2JqZWN0KikKIHsKQEAgLTIwNSwxMiArMjQzLDE5IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFJlYWRvbmx5VmFsdWUoRXhlY1N0
YXRlCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhy
b3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZSIsICJjYWNoZWRSZWFkb25seVZhbHVlIik7CiAgICAgfQotICAgIGlmIChKU1ZhbHVlIGNh
Y2hlZFZhbHVlID0gY2FzdGVkVGhpcy0+bV9jYWNoZWRSZWFkb25seVZhbHVlLmdldCgpKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhY2hlZFZhbHVlKTsKLSAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1wbC5jYWNo
ZWRSZWFkb25seVZhbHVlKCkgPyBpbXBsLmNhY2hlZFJlYWRvbmx5VmFsdWUoKS0+ZGVzZXJpYWxp
emUoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCAwKSA6IGpzTnVsbCgpOwotICAg
IGNhc3RlZFRoaXMtPm1fY2FjaGVkUmVhZG9ubHlWYWx1ZS5zZXQoc3RhdGUtPnZtKCksIGNhc3Rl
ZFRoaXMsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlQ2FjaGVkUmVhZG9ubHlWYWx1ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitK
U1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFJlYWRvbmx5
VmFsdWVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAg
VU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGlmIChKU1ZhbHVlIGNhY2hlZFZhbHVlID0g
dGhpc09iamVjdC0+bV9jYWNoZWRSZWFkb25seVZhbHVlLmdldCgpKQorICAgICAgICByZXR1cm4g
Y2FjaGVkVmFsdWU7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwuY2FjaGVkUmVhZG9ubHlWYWx1ZSgpID8gaW1wbC5jYWNo
ZWRSZWFkb25seVZhbHVlKCktPmRlc2VyaWFsaXplKHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxP
YmplY3QoKSwgMCkgOiBqc051bGwoKTsKKyAgICB0aGlzT2JqZWN0LT5tX2NhY2hlZFJlYWRvbmx5
VmFsdWUuc2V0KHN0YXRlLT52bSgpLCB0aGlzT2JqZWN0LCByZXN1bHQpOworICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAKaW5kZXggZWEyZDk2ZDE4M2YwMmI2YTZh
MTQyNDczMWM4N2RiMDYxYzRmNjA1Yy4uNjNjYmJiYmM0MGUxNzc0OTk1ZjY0MDY3NDc4MDVjMzg3
M2Q4ZmNjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCkBAIC0yMTgsNiArMjE4LDggQEAgYm9vbCBK
U1Rlc3RUeXBlZGVmczo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogc3RhdGUsIFByb3AKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK0pTVmFsdWUganNUZXN0
VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RUeXBl
ZGVmcyopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lLCBKU09iamVjdCopCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTIyNywxMiAr
MjI5LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0
dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAi
VGVzdFR5cGVkZWZzIiwgInVuc2lnbmVkTG9uZ0xvbmdBdHRyIik7CiAgICAgfQotICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRU
aGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0ckdl
dHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyogdGhpc09iamVjdCkKK3sKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNOdW1iZXIoaW1wbC51bnNpZ25lZExvbmdMb25nQXR0cigpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVl
IGpzVGVzdFR5cGVkZWZzSW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlR2V0dGVyKEV4ZWNT
dGF0ZSosIEpTVGVzdFR5cGVkZWZzKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZz
SW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCopCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKQEAgLTI0MiwxMiArMjUzLDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dFR5cGVkZWZzSW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhy
b3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdFR5cGVkZWZzIiwgImltbXV0YWJsZVNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gaW1wbC5pbW11dGFibGVTZXJpYWxpemVk
U2NyaXB0VmFsdWUoKSA/IGltcGwuaW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlKCktPmRl
c2VyaWFsaXplKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgMCkgOiBqc051bGwo
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1Rlc3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUdl
dHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzSW1t
dXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dFR5cGVkZWZzKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAg
VU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53
cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLmltbXV0YWJsZVNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSgpID8gaW1wbC5pbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUoKS0+ZGVz
ZXJpYWxpemUoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCAwKSA6IGpzTnVsbCgp
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0NvbnN0
cnVjdG9yVGVzdFN1Yk9iakdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RUeXBlZGVmcyopOworCiBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yVGVzdFN1Yk9iaihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmpl
Y3QqKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yNTcsMTAgKzI3NywxOSBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yVGVzdFN1Yk9iaihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
ICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RUeXBlZGVm
cyIsICJUZXN0U3ViT2JqIik7CiAgICAgfQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNU
ZXN0U3ViT2JqOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgY2FzdGVkVGhpcy0+Z2xvYmFs
T2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdFR5cGVkZWZzQ29u
c3RydWN0b3JUZXN0U3ViT2JqR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFs
dWUganNUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvclRlc3RTdWJPYmpHZXR0ZXIoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0VHlwZWRlZnMqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgcmV0dXJuIEpTVGVzdFN1
Yk9iajo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIHRoaXNPYmplY3QtPmdsb2JhbE9iamVj
dCgpKTsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlcHRp
b25HZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0VHlwZWRlZnMqKTsKKwogRW5jb2RlZEpTVmFsdWUg
anNUZXN0VHlwZWRlZnNBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSwgSlNPYmplY3QqKQogewogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0yNzAsMTQgKzI5OSwyMyBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKUwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0
dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RUeXBlZGVmcyIsICJhdHRyV2l0
aEdldHRlckV4Y2VwdGlvbiIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25HZXR0ZXIoc3RhdGUsIGNhc3RlZFRo
aXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9u
R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiB0aGlzT2JqZWN0KQorewor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOwog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuYXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oZWMp
KTsKICAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVz
dFR5cGVkZWZzQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0
VHlwZWRlZnMqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRl
ckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSwgSlNPYmplY3QqKQogewogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC0y
ODcsMTIgKzMyNSwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0
dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKUwogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpz
dGF0ZSwgIlRlc3RUeXBlZGVmcyIsICJhdHRyV2l0aFNldHRlckV4Y2VwdGlvbiIpOwogICAgIH0K
LSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcihz
dGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQXR0cldpdGhT
ZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIHRo
aXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0o
dGhpc09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuYXR0cldpdGhTZXR0ZXJFeGNlcHRpb24o
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0dGVyRXhj
ZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdFR5cGVkZWZzKik7CisKIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUsIEpTT2JqZWN0
KikKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMzAyLDE0ICszNDksMjMgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihF
eGVjU3RhdGUqIHN0YXRlLCBFbmMKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAg
ICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0VHlwZWRlZnMi
LCAic3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24iKTsKICAgICB9CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9u
R2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0VHlwZWRlZnNT
dHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RUeXBlZGVmcyogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAg
IFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhD
YWNoZShzdGF0ZSwgaW1wbC5zdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYykpOwogICAg
IHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0VHlwZWRl
ZnNTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RU
eXBlZGVmcyopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRo
U2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lLCBKU09iamVjdCopCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
QEAgLTMxOSw5ICszNzUsMTYgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNTdHJpbmdB
dHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmMKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJv
cigqc3RhdGUsICJUZXN0VHlwZWRlZnMiLCAic3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24i
KTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0ZXJF
eGNlcHRpb25HZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RU
eXBlZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdFR5cGVkZWZzKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNo
ZShzdGF0ZSwgaW1wbC5zdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbigpKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNhdHRy
aWJ1dGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTYXR0
cmlidXRlLmNwcAppbmRleCBiMzFlNmUzMWUzZDllYTM2NjUyMmIyMWZmMDlhODdlZWViZWM0M2Ey
Li5hNjFmNmJmODRhMWRiMjk3YzcwNDg4NGY0YTYwMTcxNDYwYWUwZWU3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNhdHRyaWJ1dGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5j
cHAKQEAgLTE0MSw2ICsxNDEsOCBAQCBib29sIEpTYXR0cmlidXRlOjpnZXRPd25Qcm9wZXJ0eVNs
b3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAorSlNWYWx1ZSBqc2F0dHJpYnV0ZVJlYWRvbmx5R2V0dGVyKEV4ZWNTdGF0
ZSosIEpTYXR0cmlidXRlKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzYXR0cmlidXRlUmVhZG9ubHko
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUs
IEpTT2JqZWN0KikKIHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtMTUwLDkgKzE1Miwx
NiBAQCBFbmNvZGVkSlNWYWx1ZSBqc2F0dHJpYnV0ZVJlYWRvbmx5KEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgImF0dHJp
YnV0ZSIsICJyZWFkb25seSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNhdHRyaWJ1dGVSZWFkb25s
eUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzYXR0cmlidXRlUmVh
ZG9ubHlHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNhdHRyaWJ1dGUqIHRoaXNPYmplY3QpCit7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7
CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnJlYWRvbmx5KCkpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Tm9k
ZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5vZGUuaWRs
CmluZGV4IDFlNDg1MmE4NTg5MGJmMGNkNDllYTRlZTMyZDA0NTU0ZTI4ZjIwODkuLmZjZTY4MGFh
YTI2OWQxYWU2MGRjZWVhZjU5ZGJiNGZhNWJkMDliNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Tm9kZS5pZGwKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROb2RlLmlkbApAQCAtMjUsNSArMjUsNyBAQAog
ICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKIAogICAgIGl0ZXJhYmxlPFRlc3ROb2RlPjsK
KworICAgIHNlcmlhbGl6ZXI7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKaW5kZXggMzQxMTgxYTUxNjFmMDA1NWI0MjBhOTllYjVi
OGY5ZWE4Y2Q4YTE3ZC4uMmFiOWNjMWY5YjZhM2EwYzZhMDBhYzBmYWZkNjU1MWEyM2YyYzM0MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmou
aWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlk
bApAQCAtMzc0LDYgKzM3NCw4IEBAIGVudW0gVGVzdENvbmZpZGVuY2UgeyAiaGlnaCIsICJraW5k
YS1sb3ciIH07CiAjZW5kaWYKIAogICAgIHZvaWQgYXR0YWNoU2hhZG93Um9vdChUZXN0RGljdGlv
bmFyeSBpbml0KTsKKworICAgIHNlcmlhbGl6ZXIgPSB7cmVhZE9ubHlTdHJpbmdBdHRyLCBjcmVh
dGUsIGVudW1BdHRyLCBsb25nQXR0cn07CiB9OwogCiAvLyBUaGUgZm9sbG93aW5nIGNvbW1lbnQg
c2hvdWxkIG5vdCBnZW5lcmF0ZSBhbnkgY29kZS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0No
YW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1ZmU2MmIxM2JmYTgxYmZmMzY5
ODdiMzY5Mzc5MTk4MmUzMDQ4YjUwLi5jMzNhZmViOTFhNzQ2Y2IxMGViODEyNGEwYzI1YzE0NTE0
YzYxNGY0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTYtMDUtMjQgIEFsZWphbmRybyBHLiBD
YXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CisKKyAgICAgICAgQWRkIFdlYklETCBzcGVjaWFsIG9w
ZXJhdGlvbiBzdXBwb3J0OiBzZXJpYWxpemVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTYyOTMKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBB
ZGxlci4KKworICAgICAgICBWZXJpZnkgdGhlIG5ldyBBUEkgb2YgdGhlIG9iamVjdHMgYW5kIGNo
ZWNrIHdoYXQgaGFwcGVucyB3aGVuIHVzZXIKKyAgICAgICAgbW9kaWZpZXMgdGhlIHZhbHVlcyBh
bmQgdHlwZXMgb2YgdGhlIGF0dHJpYnV0ZXMsIG9yIGFkZHMgYSBudWxsIHZhbHVlLgorCisgICAg
ICAgICogZmFzdC9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUtZXhwZWN0ZWQudHh0OgorICAg
ICAgICAqIGZhc3QvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmh0bWw6CisgICAgICAgICog
ZmFzdC9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0OgorICAg
ICAgICAqIGZhc3QvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmh0bWw6CisKIDIw
MTYtMDUtMjUgIFlvYXYgV2Vpc3MgIDx5b2F2QHlvYXYud3M+CiAKICAgICAgICAgRml4IFJlc291
cmNlVGltaW5nIG11bHRpcGxlIGVudHJpZXMgcGVyIHJlc291cmNlIGFuZCB0ZXN0IGluaXRpYXRv
cgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRh
dGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENJY2VDYW5k
aWRhdGUtZXhwZWN0ZWQudHh0CmluZGV4IGU5ZWRiOGRjNGFjYjM0YjUzYjkzMjM5YjQyNzk2YzQw
NjliOTc0ZDYuLmYzNzQ2YTEyZTdmOTBlYzk0ZDM3NTE2NDM0ZmNmYzI1NzM5MWUzOGYgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLWV4cGVj
dGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0
ZS1leHBlY3RlZC50eHQKQEAgLTcsNiArNywyMSBAQCBQQVNTIGNhbmRpZGF0ZSA9IG5ldyBSVENJ
Y2VDYW5kaWRhdGUoaW5pdGlhbGl6ZXIpOyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KIFBBU1Mg
Y2FuZGlkYXRlLmNhbmRpZGF0ZSBpcyAiZm9vIgogUEFTUyBjYW5kaWRhdGUuc2RwTWlkIGlzICJi
YXIiCiBQQVNTIGNhbmRpZGF0ZS5zZHBNTGluZUluZGV4IGlzIDYKK1BBU1MgUlRDSWNlQ2FuZGlk
YXRlLnByb3RvdHlwZS50b0pTT04gaXMgZGVmaW5lZC4KK1BBU1MgT2JqZWN0LmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihSVENJY2VDYW5kaWRhdGUucHJvdG90eXBlLCAidG9KU09OIikuZW51bWVy
YWJsZSBpcyB0cnVlCitQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUlRDSWNl
Q2FuZGlkYXRlLnByb3RvdHlwZSwgInRvSlNPTiIpLndyaXRhYmxlIGlzIHRydWUKK1BBU1MgT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihSVENJY2VDYW5kaWRhdGUucHJvdG90eXBlLCAi
dG9KU09OIikuY29uZmlndXJhYmxlIGlzIHRydWUKK1BBU1MgUlRDSWNlQ2FuZGlkYXRlLnByb3Rv
dHlwZS50b0pTT04ubGVuZ3RoIGlzIDAKK1BBU1MgUlRDSWNlQ2FuZGlkYXRlLnByb3RvdHlwZS50
b0pTT04ubmFtZSBpcyAidG9KU09OIgorUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKGpzb25NYXAsICJjYW5kaWRhdGUiKS5lbnVtZXJhYmxlIGlzIHRydWUKK1BBU1MgT2JqZWN0
LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihqc29uTWFwLCAiY2FuZGlkYXRlIikud3JpdGFibGUg
aXMgdHJ1ZQorUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGpzb25NYXAsICJj
YW5kaWRhdGUiKS5jb25maWd1cmFibGUgaXMgdHJ1ZQorUEFTUyBjaGlsZENhbmRpZGF0ZS50b0pT
T04oKTsgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQ2FuIG9ubHkgY2FsbCBSVENJY2VDYW5k
aWRhdGUudG9KU09OIG9uIGluc3RhbmNlcyBvZiBSVENJY2VDYW5kaWRhdGUuCitQQVNTIEpTT04u
c3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSkgaXMgIntcImNhbmRpZGF0ZVwiOlwiZm9vXCIs
XCJzZHBNaWRcIjpcImJhclwiLFwic2RwTUxpbmVJbmRleFwiOjZ9IgorUEFTUyBKU09OLnN0cmlu
Z2lmeShjYW5kaWRhdGUudG9KU09OKCkpIGlzICJ7XCJjYW5kaWRhdGVcIjpcImZvb1wiLFwic2Rw
TWlkXCI6XCJiYXJcIixcInNkcE1MaW5lSW5kZXhcIjo2fSIKK1BBU1MgSlNPTi5zdHJpbmdpZnko
Y2FuZGlkYXRlLnRvSlNPTigpKSBpcyAie1wiY2FuZGlkYXRlXCI6XCJmb29cIixcInNkcE1pZFwi
OlwiYmFyXCIsXCJzZHBNTGluZUluZGV4XCI6Nn0iCitQQVNTIEpTT04uc3RyaW5naWZ5KGNhbmRp
ZGF0ZS50b0pTT04oKSkgaXMgIntcImNhbmRpZGF0ZVwiOlwiZm9vXCIsXCJzZHBNaWRcIjpcImJh
clwiLFwic2RwTUxpbmVJbmRleFwiOjZ9IgorUEFTUyBKU09OLnN0cmluZ2lmeShjYW5kaWRhdGUu
dG9KU09OKCkpIGlzICJ7XCJjYW5kaWRhdGVcIjpcImZvb1wiLFwic2RwTWlkXCI6XCJiYXJcIixc
InNkcE1MaW5lSW5kZXhcIjo2fSIKIAogQXR0cmlidXRlcyBhcmUgcmVhZG9ubHkKIGNhbmRpZGF0
ZS5jYW5kaWRhdGUgPSAiZm9vLXVwZGF0ZWQiCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRp
YXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaHRtbAppbmRleCBiY2Q5OWIwY2QwNTVkNGM3YjBhYjkz
MWY4YzU1ODg3NzdmNDA0OGVhLi5kMGQ1ZGVkYzMxZTY1NDUyZjljY2ZlY2I1NTlhMWVjODQ1ZDg2
NjUzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRp
ZGF0ZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlk
YXRlLmh0bWwKQEAgLTEzLDYgKzEzLDMzIEBACiAgICAgICAgICAgICBzaG91bGRCZSgnY2FuZGlk
YXRlLmNhbmRpZGF0ZScsICciZm9vIicpOwogICAgICAgICAgICAgc2hvdWxkQmUoJ2NhbmRpZGF0
ZS5zZHBNaWQnLCAnImJhciInKTsKICAgICAgICAgICAgIHNob3VsZEJlKCdjYW5kaWRhdGUuc2Rw
TUxpbmVJbmRleCcsICc2Jyk7CisgICAgICAgICAgICBzaG91bGRCZURlZmluZWQoJ1JUQ0ljZUNh
bmRpZGF0ZS5wcm90b3R5cGUudG9KU09OJyk7CisgICAgICAgICAgICBzaG91bGRCZVRydWUoJ09i
amVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUlRDSWNlQ2FuZGlkYXRlLnByb3RvdHlwZSwg
InRvSlNPTiIpLmVudW1lcmFibGUnKTsKKyAgICAgICAgICAgIHNob3VsZEJlVHJ1ZSgnT2JqZWN0
LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihSVENJY2VDYW5kaWRhdGUucHJvdG90eXBlLCAidG9K
U09OIikud3JpdGFibGUnKTsKKyAgICAgICAgICAgIHNob3VsZEJlVHJ1ZSgnT2JqZWN0LmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihSVENJY2VDYW5kaWRhdGUucHJvdG90eXBlLCAidG9KU09OIiku
Y29uZmlndXJhYmxlJyk7CisgICAgICAgICAgICBzaG91bGRCZSgnUlRDSWNlQ2FuZGlkYXRlLnBy
b3RvdHlwZS50b0pTT04ubGVuZ3RoJywgJzAnKTsKKyAgICAgICAgICAgIHNob3VsZEJlKCdSVENJ
Y2VDYW5kaWRhdGUucHJvdG90eXBlLnRvSlNPTi5uYW1lJywgJyJ0b0pTT04iJyk7CisKKyAgICAg
ICAgICAgIHZhciBqc29uTWFwID0gY2FuZGlkYXRlLnRvSlNPTigpOworICAgICAgICAgICAgc2hv
dWxkQmVUcnVlKCdPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGpzb25NYXAsICJjYW5k
aWRhdGUiKS5lbnVtZXJhYmxlJyk7CisgICAgICAgICAgICBzaG91bGRCZVRydWUoJ09iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoanNvbk1hcCwgImNhbmRpZGF0ZSIpLndyaXRhYmxlJyk7
CisgICAgICAgICAgICBzaG91bGRCZVRydWUoJ09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoanNvbk1hcCwgImNhbmRpZGF0ZSIpLmNvbmZpZ3VyYWJsZScpOworCisgICAgICAgICAgICB2
YXIgY2hpbGRSVENJY2VDYW5kaWRhdGUgPSBmdW5jdGlvbigpIHt9OworICAgICAgICAgICAgY2hp
bGRSVENJY2VDYW5kaWRhdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSVENJY2VDYW5kaWRh
dGUucHJvdG90eXBlKTsKKyAgICAgICAgICAgIHZhciBjaGlsZENhbmRpZGF0ZSA9IG5ldyBjaGls
ZFJUQ0ljZUNhbmRpZGF0ZSgpOworICAgICAgICAgICAgc2hvdWxkVGhyb3coJ2NoaWxkQ2FuZGlk
YXRlLnRvSlNPTigpOycpOworCisgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ0pT
T04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSknLCAneyJjYW5kaWRhdGUiOiJmb28iLCJz
ZHBNaWQiOiJiYXIiLCJzZHBNTGluZUluZGV4Ijo2fScpOworICAgICAgICAgICAgY2FuZGlkYXRl
Lm5ld0F0dHJpYnV0ZSA9ICJuZXcgdmFsdWUiOworICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRv
U3RyaW5nKCdKU09OLnN0cmluZ2lmeShjYW5kaWRhdGUudG9KU09OKCkpJywgJ3siY2FuZGlkYXRl
IjoiZm9vIiwic2RwTWlkIjoiYmFyIiwic2RwTUxpbmVJbmRleCI6Nn0nKTsKKyAgICAgICAgICAg
IGNhbmRpZGF0ZS5zZHBNTGluZUluZGV4ID0gIm5vdCBhIG51bWJlciI7CisgICAgICAgICAgICBz
aG91bGRCZUVxdWFsVG9TdHJpbmcoJ0pTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSkn
LCAneyJjYW5kaWRhdGUiOiJmb28iLCJzZHBNaWQiOiJiYXIiLCJzZHBNTGluZUluZGV4Ijo2fScp
OworICAgICAgICAgICAgY2FuZGlkYXRlLnNkcE1pZCA9IDc7CisgICAgICAgICAgICBzaG91bGRC
ZUVxdWFsVG9TdHJpbmcoJ0pTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSknLCAneyJj
YW5kaWRhdGUiOiJmb28iLCJzZHBNaWQiOiJiYXIiLCJzZHBNTGluZUluZGV4Ijo2fScpOworICAg
ICAgICAgICAgY2FuZGlkYXRlLnNkcE1pZCA9IG51bGw7CisgICAgICAgICAgICBzaG91bGRCZUVx
dWFsVG9TdHJpbmcoJ0pTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSknLCAneyJjYW5k
aWRhdGUiOiJmb28iLCJzZHBNaWQiOiJiYXIiLCJzZHBNTGluZUluZGV4Ijo2fScpOworCiAgICAg
ICAgICAgICBkZWJ1ZygiIik7CiAKICAgICAgICAgICAgIGRlYnVnKCJBdHRyaWJ1dGVzIGFyZSBy
ZWFkb25seSIpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENT
ZXNzaW9uRGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0
cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0CmluZGV4IDY1ODIxOGZmZTEy
ZTU2MDA0ODhkNzk1MjJjNGEzNGE5ZGY4ZGU2ZjguLjM0MDljMmRlZWEwMjlhYTQwY2M1YjA3NmI4
NTFmNTdkNjFjMmFlMTEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0v
UlRDU2Vzc2lvbkRlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi1leHBlY3RlZC50eHQKQEAgLTcsNiAr
Nyw3IEBAIFBBU1Mgc2Vzc2lvbkRlc2NyaXB0aW9uID0gbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlv
bigpOyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KIFBBU1Mgc2Vzc2lvbkRlc2NyaXB0aW9uID0g
bmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihpbml0aWFsaXplcik7IGRpZCBub3QgdGhyb3cgZXhj
ZXB0aW9uLgogUEFTUyBzZXNzaW9uRGVzY3JpcHRpb24udHlwZSBpcyAib2ZmZXIiCiBQQVNTIHNl
c3Npb25EZXNjcmlwdGlvbi5zZHAgaXMgImZvb2JhciIKK1BBU1MgSlNPTi5zdHJpbmdpZnkoc2Vz
c2lvbkRlc2NyaXB0aW9uLnRvSlNPTigpKSBpcyAie1widHlwZVwiOlwib2ZmZXJcIixcInNkcFwi
OlwiZm9vYmFyXCJ9IgogUEFTUyBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKG51bGwpOyB0aHJl
dyBleGNlcHRpb24gVHlwZUVycm9yOiBPcHRpb25hbCBSVENTZXNzaW9uRGVzY3JpcHRpb24gY29u
c3RydWN0b3IgYXJndW1lbnQgbXVzdCBiZSBhIHZhbGlkIERpY3Rpb25hcnkuCiBQQVNTIG5ldyBS
VENTZXNzaW9uRGVzY3JpcHRpb24oNSk7IHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE9wdGlv
bmFsIFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiBjb25zdHJ1Y3RvciBhcmd1bWVudCBtdXN0IGJlIGEg
dmFsaWQgRGljdGlvbmFyeS4KIFBBU1MgbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbignZm9vYmFy
Jyk7IHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IE9wdGlvbmFsIFJUQ1Nlc3Npb25EZXNjcmlw
dGlvbiBjb25zdHJ1Y3RvciBhcmd1bWVudCBtdXN0IGJlIGEgdmFsaWQgRGljdGlvbmFyeS4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0
aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlw
dGlvbi5odG1sCmluZGV4IDNhNjZkMmUyNmIxMTkxMDVhYzFlZDMwZGQ1YWY1NzUyOTk3ZGYzNDIu
LjFkOWI1Y2QzMzdlZDVkZTlhOTY1OGQ2NDZiOGM0MmJkY2FkYWU2MjMgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmh0bWwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24uaHRt
bApAQCAtMTUsNiArMTUsNyBAQAogICAgICAgICAgICAgc2hvdWxkTm90VGhyb3coInNlc3Npb25E
ZXNjcmlwdGlvbiA9IG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24oaW5pdGlhbGl6ZXIpOyIpOwog
ICAgICAgICAgICAgc2hvdWxkQmUoJ3Nlc3Npb25EZXNjcmlwdGlvbi50eXBlJywgJyJvZmZlciIn
KTsKICAgICAgICAgICAgIHNob3VsZEJlKCdzZXNzaW9uRGVzY3JpcHRpb24uc2RwJywgJyJmb29i
YXIiJyk7CisgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ0pTT04uc3RyaW5naWZ5
KHNlc3Npb25EZXNjcmlwdGlvbi50b0pTT04oKSknLCAneyJ0eXBlIjoib2ZmZXIiLCJzZHAiOiJm
b29iYXIifScpOwogCiAgICAgICAgICAgICBzaG91bGRUaHJvdygibmV3IFJUQ1Nlc3Npb25EZXNj
cmlwdGlvbihudWxsKTsiKTsKICAgICAgICAgICAgIHNob3VsZFRocm93KCJuZXcgUlRDU2Vzc2lv
bkRlc2NyaXB0aW9uKDUpOyIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289544</attachid>
            <date>2016-09-22 04:07:18 -0700</date>
            <delta_ts>2016-09-27 03:59:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156293-20160922130427.patch</filename>
            <type>text/plain</type>
            <size>134761</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2MjUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzA5OTUyMmZhM2RlNDhj
NjM2NGVjNmY2NjNhOWNlZTBlYzZiMDc1MC4uM2RiYjFhMGNiZmFmNGQ4NWFkNDYxOTVkZjgyZjM2
YzRiODIzNWVkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc4IEBACisyMDE2LTA5LTE1ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIEFkZCBXZWJJREwg
c3BlY2lhbCBvcGVyYXRpb24gc3VwcG9ydDogc2VyaWFsaXplcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MjkzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgdGhlIHNlcmlhbGl6
ZXIgc3BlY2lhbCBvcGVyYXRpb24gZm9yIFdlYklETHMsCisgICAgICAgIGN1cnJlbnQgaW1wbGVt
ZW50YXRpb24gYWRkcyBzdXBwb3J0IGZvcjoKKyAgICAgICAgICAtIGp1c3QgdGhlIGtleXdvcmQ6
IHNlcmlhbGl6ZXI7IEl0IHdpbGwgcmV0dXJuIGFsbCB0aGUKKyAgICAgICAgICAgIGF0dHJpYnV0
ZXMgb2YgaW4gYW4gb2JqZWN0LgorICAgICAgICAgIC0gbWFwIG9mIGVudHJpZXMgd2l0aCB0aGUg
YXR0cmlidXRlczogc2VyaWFsaXplciA9IHthdHRyaWJ1dGUxLAorICAgICAgICAgICAgYXR0cmli
dXRlMiwgLi4ufQorCisgICAgICAgIEl0IGNyZWF0ZXMgYSB0b0pTT04gbWV0aG9kIHRoYXQgcmV0
dXJucyB0aGUgc2VyaWFsaXplZCB2YWx1ZQorICAgICAgICBjb252ZXJ0ZWQgaW50byBhbiBFQ01B
U2NyaXB0IHZhbHVlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBjaGVjayB0aGUKKyAgICAgICAgZGVm
aW5pdGlvbiBvZiB0aGUgb3BlcmF0aW9uOgorCisgICAgICAgIGh0dHA6Ly9oZXljYW0uZ2l0aHVi
LmlvL3dlYmlkbC8jaWRsLXNlcmlhbGl6ZXJzCisKKyAgICAgICAgV2UgaGF2ZSBtb2RpZmllZCBj
dXJyZW50IGNvZGUgdGhhdCBnZW5lcmF0ZXMgdGhlIGdldHRlciBmdW5jdGlvbgorICAgICAgICBm
b3IgYXR0cmlidXRlcyBpbiB0d28gcGFydHMgc28gdGhhdCB3ZSBjYW4gcmV1c2UgdGhlIHBhcnQK
KyAgICAgICAgZXh0cmFjdGluZyB0aGUgdmFsdWUgZm9yIHRoZSBzZXJpYWxpemVyLgorCisgICAg
ICAgIFVzZWQgdGhlIHN1cHBvcnQgdG8gYWRkIG5ldyBBUEkgZm9yIFJUQ0ljZUNhbmRpZGF0ZSBh
bmQKKyAgICAgICAgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLgorCisgICAgICAgIFVwZGF0ZWQgdGhl
IHRlc3RzIGV4cGVjdGF0aW9ucyBvZiB0aGUgYmluZGluZ3MuCisKKyAgICAgICAgVGVzdHM6IGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Tm9kZS5pZGwKKyAgICAgICAgICAgICAgIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAorICAgICAgICAgICAgICAgZmFzdC9tZWRpYXN0cmVh
bS9SVENJY2VDYW5kaWRhdGUuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9tZWRpYXN0cmVhbS9S
VENTZXNzaW9uRGVzY3JpcHRpb24uaHRtbAorCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVh
bS9SVENJY2VDYW5kaWRhdGUuaWRsOiBBZGRlZCB0aGUgc2VyaWFsaXplcgorICAgICAgICBvcGVy
YXRpb24uCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRp
b24uaWRsOiBBZGRlZCB0aGUKKyAgICAgICAgc2VyaWFsaXplciBvcGVyYXRpb24uCisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0
ZUltcGxlbWVudGF0aW9uKTogU3BsaXR0ZWQgdGhlIGNvZGUgb2YgdGhlIGF0dHJpYnV0ZQorICAg
ICAgICBnZXR0ZXIgaW4gdHdvIGZ1bmN0aW9ucywgb25lIGdldHRpbmcgdGhlIHZhbHVlIGFuZCB0
aGUgb3RoZXIKKyAgICAgICAgaGFuZGxpbmcgdGhlIGNhbGwgZnJvbSB0aGUgQVBJLiBUaGlzIHdh
eSB3ZSBjYW4gcmV1c2UgdGhlIGNvZGUgZm9yCisgICAgICAgIHRoZSBzZXJpYWxpemVyLiBBbHNv
IEFkZGVkIHRoZSBjYWxscyB0byB0aGUgc2VyaWFsaXplcgorICAgICAgICBjb2RlIGdlbmVyYXRv
ci4KKyAgICAgICAgKEdlbmVyYXRlU2VyaWFsaXplckZ1bmN0aW9uKTogQWRkZWQsIGdlbmVyYXRl
cyB0aGUgdG9KU09OIGZ1bmN0aW9uCisgICAgICAgIGFkZGluZyBhbGwgdGhlIHNlcmlhbGl6YWJs
ZS0+YXR0cmlidXRlcyB2YWx1ZSB0byBhbiBvYmplY3QgYXMKKyAgICAgICAgZGVmaW5lZCBpbiB0
aGUgc3BlYy4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbTogTW9kaWZp
ZWQgdGhlIHNlcmlhbGl6ZXIgcGFyc2VyCisgICAgICAgIHRoYXQgd2FzIHVudXNlZCB0byBzdXBw
b3J0IHRoZSBXZWJJREwgc3BlYyBwYXJ0cy4gQWRkZWQgYSBuZXcKKyAgICAgICAgZG9tU2VyaWFs
aXphYmxlIHR5cGUgdG8gc3RvcmUgdGhlIGxpc3Qgb2YgYXR0cmlidXRlcyBpbiB0aGUKKyAgICAg
ICAgcG9zc2libGUgbWFwLgorICAgICAgICAocGFyc2VTZXJpYWxpemVyKTogTW9kaWZpZWQgdGhl
IGZ1bmN0aW9uIHRvIGZvbGxvdyB0aGUKKyAgICAgICAgc2VtaWNvbG9uIHJ1bGUgaW4gdGhlIHNw
ZWMsIG5vdyB0aGUgc2VyaWFsaXplciBsaW5lIG11c3QgaGF2ZSBhCisgICAgICAgIHNlbWljb2xv
biBsaWtlIGFueSBvdGhlciBsaW5lLgorICAgICAgICAocGFyc2VTZXJpYWxpemVyUmVzdCk6IFRo
ZSBmdW5jdGlvbiBub3cgaGFzIHRvIGdldCB0aGUgYXR0cmlidXRlcworICAgICAgICBsaXN0IGZy
b20gdGhlIHBhdHRlcm4gcGFyc2luZyBmdW5jdGlvbiBhbmQgYWRkIHRoZW0gdG8gdGhlCisgICAg
ICAgIGRvbVNlcmlhbGl6YWJsZSBpdGVtLgorICAgICAgICAocGFyc2VTZXJpYWxpemF0aW9uUGF0
dGVybik6IE5vdyB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxpc3Qgb2YKKyAgICAgICAgYXR0
cmlidXRlcyBpbiB0aGUgc2VyaWFsaXphYmxlIG1hcCBvciBsaXN0IGlmIHdlIGhhdmUgb25lLgor
ICAgICAgICAocGFyc2VTZXJpYWxpemF0aW9uQXR0cmlidXRlcyk6IEFkZGVkLCB0aGlzIGZ1bmN0
aW9uIHJlcGxhY2VzIHRoZQorICAgICAgICBNYXAgYW5kIExpc3QgZnVuY3Rpb25zLCB0aGUgY3Vy
cmVudGx5IHN1cHBvcnRlZCBwYXJ0cyBhcmUgc2ltaWxhcgorICAgICAgICBmb3IgYm90aCBzaXR1
YXRpb25zLgorICAgICAgICAoYXBwbHlNZW1iZXJMaXN0KTogQWRkZWQgdGhlIHNlcmlhbGl6YWJs
ZSBpdGVtIHRvIHRoZSBpbnRlcmZhY2UKKyAgICAgICAgdmFyaWFibGUgYW5kIHBvcHVsYXRlIHRo
ZSBzZXJpYWxpemFibGUgaW4gY2FzZSB0aGVyZSBpcyBub3QgYQorICAgICAgICBkZWZpbmVkIG1h
cC4KKyAgICAgICAgKHBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm5NYXApOiBSZXBsYWNlZCB3aXRo
CisgICAgICAgIHBhcnNlU2VyaWFsaXphdGlvbkF0dHJpYnV0ZXMuCisgICAgICAgIChwYXJzZVNl
cmlhbGl6YXRpb25QYXR0ZXJuTGlzdCk6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcDogTW9kaWZpZWQgdGhlIGV4cGVjdGVkIHJlc3VsdC4K
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTik6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6IE1vZGlmaWVk
IHRoZSBleHBlY3RlZCByZXN1bHQuCisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblRvSlNPTik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RO
b2RlLmlkbDogQWRkZWQgdGhlIHNlcmlhbGl6ZXIgdGVzdC4KKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVGVzdE9iai5pZGw6IEFkZGVkIHNlcmlhbGl6ZXIgbWFwIHRlc3QuCisKIDIw
MTYtMDktMTkgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CiAKICAg
ICAgICAgW2Nzcy1ncmlkXSBSZW1vdmUgdGhlIHgyIGNvbXB1dGF0aW9uIG9mIHJvdyBzaXplcyB3
aXRoIGluZGVmaW5pdGUgaGVpZ2h0cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaWRsCmluZGV4IDA0MDc4M2Y3ZmEwZDY3YzU2
YmI3MjBkMTVlYjIwYmYyNDMyNWI4ODguLjhjMmQ5YmU4NDQ4NTA1NGMxNmI1MTkzMzQzY2FkYzc2
NzcwMjlmNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
UlRDSWNlQ2FuZGlkYXRlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL1JUQ0ljZUNhbmRpZGF0ZS5pZGwKQEAgLTM5LDUgKzM5LDcgQEAKICAgICByZWFkb25seSBh
dHRyaWJ1dGUgRE9NU3RyaW5nIGNhbmRpZGF0ZTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9N
U3RyaW5nPyBzZHBNaWQ7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIHNob3J0PyBz
ZHBNTGluZUluZGV4OworCisgICAgc2VyaWFsaXplciA9IHtjYW5kaWRhdGUsIHNkcE1pZCwgc2Rw
TUxpbmVJbmRleH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5pZGwKaW5kZXggNDc1NWFkYTI1
MzBlOGY2NWEyYTZlZWNkOWI3YjcwYTM5ZWVhNWExZS4uNzM1MDkyYmM1MzA1OGZlY2ZjNzllZDY5
NzFlNGQyOTk2YTE1NDVkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmlkbApAQCAtMzgsNiArMzgs
OCBAQAogXSBpbnRlcmZhY2UgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIHsKICAgICBbU2V0dGVyUmFp
c2VzRXhjZXB0aW9uXSByZWFkb25seSBhdHRyaWJ1dGUgUlRDU2RwVHlwZSB0eXBlOwogICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgc2RwOworCisgICAgc2VyaWFsaXplciA9IHt0eXBl
LCBzZHB9OwogfTsKIAogZW51bSBSVENTZHBUeXBlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KaW5kZXggYWZiOTAzMDI1MmJhNzZk
YWFjYWJiMGJlNzY0MGVhM2I3NjVkZjlmMC4uNzAyMTQyNGZmNTVjYzEyOTA4ZDMzOTJiZTQwZDNj
YmI5YzE3NDJlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySlMucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySlMucG0KQEAgLTc4Myw2ICs3ODMsMTUgQEAgc3ViIElzUHJlZml4UmVtb3Zh
YmxlCiAgICAgICAgICAgICB8fCBJc0NsYXNzTmFtZVdvcmRCb3VuZGFyeSgkY2xhc3MsIC0kaSkg
JiYgc3Vic3RyKCRjbGFzcywgLSRpKSBlcSBzdWJzdHIoJG5hbWUsIDAsICRpKSk7CiB9CiAKK3N1
YiBFbmNhcHN1bGF0ZVJldHVyblR5cGVJZlJlcXVpcmVkCit7CisgICAgbXkgKCRzZXJpYWxpemFi
bGUsICRyZXN1bHQpID0gQF87CisKKyAgICByZXR1cm4gJHJlc3VsdCBpZiAkc2VyaWFsaXphYmxl
OworCisgICAgcmV0dXJuICJKU1ZhbHVlOjplbmNvZGUoIiAuICRyZXN1bHQgLiAiKSI7Cit9CisK
IHN1YiBHZXROZXN0ZWRDbGFzc05hbWUKIHsKICAgICBteSAoJGludGVyZmFjZSwgJG5hbWUpID0g
QF87CkBAIC0yMjk4LDYgKzIzMDcsOCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAg
IG15ICR2aXNpYmxlSW50ZXJmYWNlTmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRWaXNpYmxlSW50
ZXJmYWNlTmFtZSgkaW50ZXJmYWNlKTsKICAgICBteSAkZXZlbnRUYXJnZXQgPSAkY29kZUdlbmVy
YXRvci0+SW5oZXJpdHNJbnRlcmZhY2UoJGludGVyZmFjZSwgIkV2ZW50VGFyZ2V0IikgJiYgJGlu
dGVyZmFjZS0+bmFtZSBuZSAiRXZlbnRUYXJnZXQiOwogICAgIG15ICRuZWVkc1Zpc2l0Q2hpbGRy
ZW4gPSBJbnN0YW5jZU5lZWRzVmlzaXRDaGlsZHJlbigkaW50ZXJmYWNlKTsKKyAgICBteSAkc2Vy
aWFsaXplckZ1bmN0aW9uTmFtZSA9ICJ0b0pTT04iOworICAgIG15ICRzZXJpYWxpemVyTmF0aXZl
RnVuY3Rpb25OYW1lID0gJGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJGNsYXNzTmFtZSkgLiAi
UHJvdG90eXBlRnVuY3Rpb24iIC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJHNlcmlhbGl6
ZXJGdW5jdGlvbk5hbWUpOwogCiAgICAgbXkgJG5hbWVkR2V0dGVyRnVuY3Rpb24gPSBHZXROYW1l
ZEdldHRlckZ1bmN0aW9uKCRpbnRlcmZhY2UpOwogICAgIG15ICRpbmRleGVkR2V0dGVyRnVuY3Rp
b24gPSBHZXRJbmRleGVkR2V0dGVyRnVuY3Rpb24oJGludGVyZmFjZSk7CkBAIC0yMzg4LDYgKzIz
OTksOCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIlxuIik7CiAgICAgfQogCisgICAgcHVzaChAaW1wbENvbnRlbnQsICJFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMICR7c2VyaWFsaXplck5hdGl2ZUZ1bmN0aW9uTmFtZX0oRXhlY1N0
YXRlKik7XG5cbiIpIGlmICRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZTsKKwogICAgIEdlbmVyYXRl
UHJvdG90eXBlRGVjbGFyYXRpb24oXEBpbXBsQ29udGVudCwgJGNsYXNzTmFtZSwgJGludGVyZmFj
ZSkgaWYgIUhlYWRlck5lZWRzUHJvdG90eXBlRGVjbGFyYXRpb24oJGludGVyZmFjZSk7CiAKICAg
ICBHZW5lcmF0ZUNvbnN0cnVjdG9yRGVjbGFyYXRpb24oXEBpbXBsQ29udGVudCwgJGNsYXNzTmFt
ZSwgJGludGVyZmFjZSkgaWYgTmVlZHNDb25zdHJ1Y3RvclByb3BlcnR5KCRpbnRlcmZhY2UpOwpA
QCAtMjU0Niw2ICsyNTU5LDE1IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAKICAgICBt
eSAkanVzdEdlbmVyYXRlVmFsdWVBcnJheSA9ICFJc0RPTUdsb2JhbE9iamVjdCgkaW50ZXJmYWNl
KTsKIAorICAgIGlmICgkaW50ZXJmYWNlLT5zZXJpYWxpemFibGUpIHsKKyAgICAgICAgcHVzaChA
aGFzaEtleXMsICRzZXJpYWxpemVyRnVuY3Rpb25OYW1lKTsKKyAgICAgICAgcHVzaChAaGFzaFZh
bHVlMSwgJHNlcmlhbGl6ZXJOYXRpdmVGdW5jdGlvbk5hbWUpOworICAgICAgICBwdXNoKEBoYXNo
VmFsdWUyLCAwKTsKKyAgICAgICAgcHVzaChAaGFzaFNwZWNpYWxzLCAiSlNDOjpGdW5jdGlvbiIp
OworCisgICAgICAgICRoYXNoU2l6ZSsrOworICAgIH0KKwogICAgICRvYmplY3QtPkdlbmVyYXRl
SGFzaFRhYmxlKCRoYXNoTmFtZSwgJGhhc2hTaXplLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFxAaGFzaEtleXMsIFxAaGFzaFNwZWNpYWxzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFxAaGFzaFZhbHVlMSwgXEBoYXNoVmFsdWUyLApAQCAtMjg0MCw2ICsyODYyLDgg
QEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIG15ICRhdHRyaWJ1dGVD
b25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0ZUNvbmRpdGlvbmFsU3Ry
aW5nKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSk7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiNpZiAke2F0dHJpYnV0ZUNvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGF0dHJpYnV0ZUNv
bmRpdGlvbmFsU3RyaW5nOwogCisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTVmFs
dWUgJHtnZXRGdW5jdGlvbk5hbWV9R2V0dGVyKEV4ZWNTdGF0ZSosICR7Y2xhc3NOYW1lfSopO1xu
XG4iKSBpZiAkaW50ZXJmYWNlLT5zZXJpYWxpemFibGU7CisKICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiRW5jb2RlZEpTVmFsdWUgJHtnZXRGdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKVxuIik7CiAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogCkBAIC0yODY0LDYgKzI4ODgsMjQg
QEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUs
IHRocm93U2NvcGUsIFwiJHZpc2libGVJbnRlcmZhY2VOYW1lXCIsIFwiJG5hbWVcIik7XG4iKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgfVxuIik7CisKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKCR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihzdGF0ZSwgY2FzdGVk
VGhpcykpO1xuIikgaWYgJGludGVyZmFjZS0+c2VyaWFsaXphYmxlOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKCR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihzdGF0ZSwgbnVsbHB0cikpO1xu
IikgaWYgJGludGVyZmFjZS0+c2VyaWFsaXphYmxlOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBteSAkdGhpc09iamVjdCA9ICJjYXN0ZWRUaGlzIjsKKyAgICAgICAgICAgIGlmICgkaW50
ZXJmYWNlLT5zZXJpYWxpemFibGUpIHsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIn1cblxuIik7CisKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkpTVmFs
dWUgJHtnZXRGdW5jdGlvbk5hbWV9R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsICR7Y2xhc3NOYW1l
fSogdGhpc09iamVjdClcbiIpOworCisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ7XG4iKTsKKworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7XG4iKTsKKworICAgICAgICAgICAgICAgICQg
dGhpc09iamVjdCA9ICJ0aGlzT2JqZWN0IjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
bXkgQGFyZ3VtZW50cyA9ICgpOwpAQCAtMjg4MiwxMSArMjkyNCwxMSBAQCBzdWIgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiRnJh
bWUuaCIpOwogICAgICAgICAgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiU2V0dGluZ3Mu
aCIpOwogICAgICAgICAgICAgICAgICAgICBteSAkZW5hYmxlX2Z1bmN0aW9uID0gVG9NZXRob2RO
YW1lKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkVuYWJsZWRC
eVNldHRpbmcifSkgLiAiRW5hYmxlZCI7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcy0+d3JhcHBlZCgpLmZyYW1lKCkp
KVxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7Ci0gICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFNldHRpbmdzJiBzZXR0aW5ncyA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKS5mcmFtZSgpLT5zZXR0aW5ncygpO1xuIik7CisgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChVTkxJS0VMWSghJHt0aGlzT2JqZWN0
fS0+d3JhcHBlZCgpLmZyYW1lKCkpKVxuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgICAgICByZXR1cm4gIiAuIEVuY2Fwc3VsYXRlUmV0dXJuVHlwZUlmUmVx
dWlyZWQoJGludGVyZmFjZS0+c2VyaWFsaXphYmxlLCAianNVbmRlZmluZWQoKSIpIC4gIjtcbiIp
OworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBTZXR0aW5ncyYg
c2V0dGluZ3MgPSAke3RoaXNPYmplY3R9LT53cmFwcGVkKCkuZnJhbWUoKS0+c2V0dGluZ3MoKTtc
biIpOwogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIXNl
dHRpbmdzLiRlbmFibGVfZnVuY3Rpb24oKSlcbiIpOwotICAgICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTtcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAg
ICAgcmV0dXJuICIgLiBFbmNhcHN1bGF0ZVJldHVyblR5cGVJZlJlcXVpcmVkKCRpbnRlcmZhY2Ut
PnNlcmlhbGl6YWJsZSwgImpzVW5kZWZpbmVkKCkiKSAuICI7XG4iKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CiAKQEAgLTI4OTgsMTEgKzI5NDAsMTEgQEAgc3ViIEdlbmVyYXRl
SW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAhJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiRG9Ob3RDaGVja1NlY3VyaXR5In0gJiYKICAgICAgICAgICAg
ICAgICAhJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRG9Ob3RD
aGVja1NlY3VyaXR5T25HZXR0ZXIifSkgewogICAgICAgICAgICAgICAgIGlmICgkaW50ZXJmYWNl
TmFtZSBlcSAiRE9NV2luZG93IikgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdp
bmRvdyhzdGF0ZSwgY2FzdGVkVGhpcy0+d3JhcHBlZCgpLCBUaHJvd1NlY3VyaXR5RXJyb3IpKVxu
Iik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghQmlu
ZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KHN0YXRlLCAke3RoaXNP
YmplY3R9LT53cmFwcGVkKCksIFRocm93U2VjdXJpdHlFcnJvcikpXG4iKTsKICAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKHN0YXRlLCBj
YXN0ZWRUaGlzLT53cmFwcGVkKCkuZnJhbWUoKSwgVGhyb3dTZWN1cml0eUVycm9yKSlcbiIpOwor
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIUJpbmRpbmdT
ZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKHN0YXRlLCAke3RoaXNPYmplY3R9LT53
cmFwcGVkKCkuZnJhbWUoKSwgVGhyb3dTZWN1cml0eUVycm9yKSlcbiIpOwogICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOworICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gIiAgLiBFbmNhcHN1bGF0ZVJldHVyblR5
cGVJZlJlcXVpcmVkKCRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZSwgImpzVW5kZWZpbmVkKCkiKSAu
ICI7XG4iKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNp
Z25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5vbmRldGVybWluaXN0aWMifSkgewpAQCAt
MjkxOSwxMSArMjk2MSwxMSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAg
ICAgICAgIG15ICRleGNlcHRpb25Db2RlID0gJGdldHRlckV4Y2VwdGlvbnNXaXRoTWVzc2FnZSA/
ICJlYy5jb2RlIiA6ICgkZ2V0dGVyRXhjZXB0aW9ucyA/ICJlYyIgOiAiMCIpOwogICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25z
dCBBdG9taWNTdHJpbmc+IGJpbmRpbmdOYW1lKFwiJGludGVyZmFjZU5hbWUuJG5hbWVcIiwgQXRv
bWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7XG4iKTsKICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoY3Vyc29yLmlzQ2FwdHVyaW5nKCkpIHtcbiIpOwot
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAkbWVtb2l6ZWRUeXBl
IG1lbW9pemVkUmVzdWx0ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpLiRpbXBsR2V0dGVyRnVuY3Rp
b25OYW1lKCIgLiBqb2luKCIsICIsIEBhcmd1bWVudHMpIC4gIik7XG4iKTsKKyAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgJG1lbW9pemVkVHlwZSBtZW1vaXplZFJl
c3VsdCA9ICR7dGhpc09iamVjdH0tPndyYXBwZWQoKS4kaW1wbEdldHRlckZ1bmN0aW9uTmFtZSgi
IC4gam9pbigiLCAiLCBAYXJndW1lbnRzKSAuICIpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgICAgIGN1cnNvci5hcHBlbmRJbnB1dDxNZW1vaXplZERPTVJl
c3VsdDwkbWVtb2l6ZWRUeXBlPj4oYmluZGluZ05hbWUuZ2V0KCkuc3RyaW5nKCksIG1lbW9pemVk
UmVzdWx0LCAkZXhjZXB0aW9uQ29kZSk7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRh
dHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgIm1lbW9pemVkUmVzdWx0IiwgImNh
c3RlZFRoaXMiKSAuICI7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUt
PnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgIm1lbW9pemVkUmVzdWx0IiwgJHRoaXNPYmplY3Qp
IC4gIjtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBz
ZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTtcbiIpIGlmICRnZXR0ZXJFeGNlcHRpb25zOwotICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAgICAgcmV0dXJuICIgIC4gRW5jYXBzdWxhdGVSZXR1cm5UeXBlSWZSZXF1aXJlZCgkaW50
ZXJmYWNlLT5zZXJpYWxpemFibGUsICJyZXN1bHQiKSAuICI7XG4iKTsKICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIlxuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgaWYgKGN1cnNvci5pc1JlcGxheWluZygpKSB7XG4iKTsKQEAgLTI5MzEsNjAgKzI5NzMsNjAg
QEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICAgICAgTWVtb2l6ZWRET01SZXN1bHRCYXNlKiBpbnB1dCA9IGN1cnNvci5m
ZXRjaElucHV0PE1lbW9pemVkRE9NUmVzdWx0QmFzZT4oKTtcbiIpOwogICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBpZiAoaW5wdXQgJiYgaW5wdXQtPmNvbnZlcnRU
bzwkbWVtb2l6ZWRUeXBlPihtZW1vaXplZFJlc3VsdCkpIHtcbiIpOwogICAgICAgICAgICAgICAg
ICMgRklYTUU6IHRoZSBnZW5lcmF0ZWQgY29kZSBzaG91bGQgcmVwb3J0IGFuIGVycm9yIGlmIGFu
IGlucHV0IGNhbm5vdCBiZSBmZXRjaGVkIG9yIGNvbnZlcnRlZC4KLSAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2
ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRlcmZhY2UsICJtZW1vaXpl
ZFJlc3VsdCIsICJjYXN0ZWRUaGlzIikgLiAiO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pT
VmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNlLCAibWVtb2l6ZWRSZXN1
bHQiLCAkdGhpc09iamVjdCkgLiAiO1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgICAgICAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGlucHV0LT5leGNlcHRp
b25Db2RlKCkpO1xuIikgaWYgJGdldHRlckV4Y2VwdGlvbnM7Ci0gICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAg
IHJldHVybiAiIC4gRW5jYXBzdWxhdGVSZXR1cm5UeXBlSWZSZXF1aXJlZCgkaW50ZXJmYWNlLT5z
ZXJpYWxpemFibGUsICJyZXN1bHQiKSAuICI7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAgICAgfVxuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgfVxuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIj
ZW5kaWZcbiIpOwogICAgICAgICAgICAgfSAjIGF0dHJpYnV0ZSBOb25kZXRlcm1pbmlzdGljCiAK
ICAgICAgICAgICAgIGlmIChIYXNDdXN0b21HZXR0ZXIoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMpKSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT4kaW1wbEdldHRlckZ1bmN0
aW9uTmFtZSgqc3RhdGUpKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIHJldHVybiAiIC4gRW5jYXBzdWxhdGVSZXR1cm5UeXBlSWZSZXF1aXJlZCgkaW50ZXJm
YWNlLT5zZXJpYWxpemFibGUsICIke3RoaXNPYmplY3R9LT4kaW1wbEdldHRlckZ1bmN0aW9uTmFt
ZSgqc3RhdGUpIikgLiAiO1xuIik7CiAgICAgICAgICAgICB9IGVsc2lmICgkYXR0cmlidXRlLT5z
aWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDaGVja1NlY3VyaXR5Rm9yTm9kZSJ9KSB7
CiAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siSlNET01CaW5kaW5nLmgifSA9IDE7Ci0g
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUoc3Rh
dGUsIGltcGwuIiAuICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSAuICIoKSkgPyAiIC4gTmF0
aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgImltcGwu
JGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUoKSIsICJjYXN0ZWRUaGlzIikgLiAiIDoganNOdWxsKCkp
O1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgaW1w
bCA9ICR7dGhpc09iamVjdH0tPndyYXBwZWQoKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIHJldHVybiAiIC4gRW5jYXBzdWxhdGVSZXR1cm5UeXBlSWZSZXF1
aXJlZCgkaW50ZXJmYWNlLT5zZXJpYWxpemFibGUsICJzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShz
dGF0ZSwgaW1wbC4iIC4gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lIC4gIigpKSA/ICIgLiBO
YXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNlLCAiaW1w
bC4kaW1wbEdldHRlckZ1bmN0aW9uTmFtZSgpIiwgJHRoaXNPYmplY3QpIC4gIiA6IGpzTnVsbCgp
IikgLiAiO1xuIik7CiAgICAgICAgICAgICB9IGVsc2lmICgkdHlwZSBlcSAiRXZlbnRIYW5kbGVy
IikgewogICAgICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IkV2ZW50TmFtZXMuaCJ9ID0gMTsK
ICAgICAgICAgICAgICAgICBteSAkZ2V0dGVyID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiV2luZG93RXZlbnRIYW5kbGVyIn0gPyAid2luZG93RXZlbnRIYW5k
bGVyQXR0cmlidXRlIgogICAgICAgICAgICAgICAgICAgICA6ICRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkRvY3VtZW50RXZlbnRIYW5kbGVyIn0gPyAiZG9jdW1l
bnRFdmVudEhhbmRsZXJBdHRyaWJ1dGUiCiAgICAgICAgICAgICAgICAgICAgIDogImV2ZW50SGFu
ZGxlckF0dHJpYnV0ZSI7CiAgICAgICAgICAgICAgICAgbXkgJGV2ZW50TmFtZSA9IEV2ZW50SGFu
ZGxlckF0dHJpYnV0ZUV2ZW50TmFtZSgkYXR0cmlidXRlKTsKLSAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBVTlVTRURfUEFSQU0oc3RhdGUpO1xuIik7Ci0gICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSgkZ2V0
dGVyKGNhc3RlZFRoaXMtPndyYXBwZWQoKSwgJGV2ZW50TmFtZSkpO1xuIik7CisgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTtcbiIpIGlm
ICEkaW50ZXJmYWNlLT5zZXJpYWxpemFibGU7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgcmV0dXJuICIgLiBFbmNhcHN1bGF0ZVJldHVyblR5cGVJZlJlcXVpcmVkKCRp
bnRlcmZhY2UtPnNlcmlhbGl6YWJsZSwgIiRnZXR0ZXIoJHt0aGlzT2JqZWN0fS0+d3JhcHBlZCgp
LCAkZXZlbnROYW1lKSIpIC4gIjtcbiIpOwogICAgICAgICAgICAgfSBlbHNpZiAoJGF0dHJpYnV0
ZS0+c2lnbmF0dXJlLT50eXBlID1+IC9Db25zdHJ1Y3RvciQvKSB7CiAgICAgICAgICAgICAgICAg
bXkgJGNvbnN0cnVjdG9yVHlwZSA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZTsKICAgICAg
ICAgICAgICAgICAkY29uc3RydWN0b3JUeXBlID1+IHMvQ29uc3RydWN0b3IkLy87Ci0gICAgICAg
ICAgICAgICAgIyBXaGVuIENvbnN0cnVjdG9yIGF0dHJpYnV0ZSBpcyB1c2VkIGJ5IERPTVdpbmRv
dy5pZGwsIGl0J3MgY29ycmVjdCB0byBwYXNzIGNhc3RlZFRoaXMgYXMgdGhlIGdsb2JhbCBvYmpl
Y3QKLSAgICAgICAgICAgICAgICAjIFdoZW4gSlNET01XcmFwcGVycyBoYXZlIGEgYmFjay1wb2lu
dGVyIHRvIHRoZSBnbG9iYWxPYmplY3Qgd2UgY2FuIHBhc3MgY2FzdGVkVGhpcy0+Z2xvYmFsT2Jq
ZWN0KCkKKyAgICAgICAgICAgICAgICAjIFdoZW4gQ29uc3RydWN0b3IgYXR0cmlidXRlIGlzIHVz
ZWQgYnkgRE9NV2luZG93LmlkbCwgaXQncyBjb3JyZWN0IHRvIHBhc3MgdGhpc09iamVjdCBhcyB0
aGUgZ2xvYmFsIG9iamVjdAorICAgICAgICAgICAgICAgICMgV2hlbiBKU0RPTVdyYXBwZXJzIGhh
dmUgYSBiYWNrLXBvaW50ZXIgdG8gdGhlIGdsb2JhbE9iamVjdCB3ZSBjYW4gcGFzcyB0aGlzT2Jq
ZWN0LT5nbG9iYWxPYmplY3QoKQogICAgICAgICAgICAgICAgIGlmICgkaW50ZXJmYWNlTmFtZSBl
cSAiRE9NV2luZG93IikgewogICAgICAgICAgICAgICAgICAgICBteSAkbmFtZWQgPSAoJGNvbnN0
cnVjdG9yVHlwZSA9fiAvTmFtZWQkLykgPyAiTmFtZWQiIDogIiI7CiAgICAgICAgICAgICAgICAg
ICAgICRjb25zdHJ1Y3RvclR5cGUgPX4gcy9OYW1lZCQvLzsKLSAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKUyIgLiAkY29u
c3RydWN0b3JUeXBlIC4gIjo6Z2V0JHtuYW1lZH1Db25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgY2Fz
dGVkVGhpcykpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIHJldHVybiAiIC4gRW5jYXBzdWxhdGVSZXR1cm5UeXBlSWZSZXF1aXJlZCgkaW50ZXJmYWNl
LT5zZXJpYWxpemFibGUsICJKUyIgLiAkY29uc3RydWN0b3JUeXBlIC4gIjo6Z2V0JHtuYW1lZH1D
b25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgJHt0aGlzT2JqZWN0fSkiKSAuICI7XG4iKTsKICAgICAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRl
cygiSlMiIC4gJGNvbnN0cnVjdG9yVHlwZSAuICIuaCIsICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbmRpdGlvbmFsIn0pOwotICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTIiAuICRj
b25zdHJ1Y3RvclR5cGUgLiAiOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCkpKTtcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICByZXR1cm4gIiAuIEVuY2Fwc3VsYXRlUmV0dXJuVHlwZUlmUmVxdWlyZWQo
JGludGVyZmFjZS0+c2VyaWFsaXphYmxlLCAiSlMiIC4gJGNvbnN0cnVjdG9yVHlwZSAuICI6Omdl
dENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCAke3RoaXNPYmplY3R9LT5nbG9iYWxPYmplY3QoKSki
KSAuICI7XG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2lmICghJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiR2V0dGVyUmFpc2VzRXhj
ZXB0aW9uIn0gJiYgISRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkdldHRlclJhaXNlc0V4Y2VwdGlvbldpdGhNZXNzYWdlIn0pIHsKICAgICAgICAgICAgICAgICBt
eSAkY2FjaGVJbmRleCA9IDA7CiAgICAgICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhY2hlZEF0dHJpYnV0ZSJ9KSB7CiAgICAgICAg
ICAgICAgICAgICAgICRjYWNoZUluZGV4ID0gJGN1cnJlbnRDYWNoZWRBdHRyaWJ1dGU7CiAgICAg
ICAgICAgICAgICAgICAgICRjdXJyZW50Q2FjaGVkQXR0cmlidXRlKys7Ci0gICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChKU1ZhbHVlIGNhY2hlZFZhbHVlID0g
Y2FzdGVkVGhpcy0+bV8iIC4gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lIC4gIi5nZXQoKSlc
biIpOwotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShjYWNoZWRWYWx1ZSk7XG4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUgPSAke3Ro
aXNPYmplY3R9LT5tXyIgLiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUgLiAiLmdldCgpKVxu
Iik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1
cm4gIiAuIEVuY2Fwc3VsYXRlUmV0dXJuVHlwZUlmUmVxdWlyZWQoJGludGVyZmFjZS0+c2VyaWFs
aXphYmxlLCAiY2FjaGVkVmFsdWUiKSAuICI7XG4iKTsKICAgICAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICBteSBAY2FsbFdpdGhBcmdzID0gR2VuZXJhdGVDYWxsV2l0aCgkYXR0cmli
dXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsV2l0aCJ9LCBcQGltcGxD
b250ZW50LCAiSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpIik7CisgICAgICAgICAgICAg
ICAgbXkgQGNhbGxXaXRoQXJncyA9IEdlbmVyYXRlQ2FsbFdpdGgoJGF0dHJpYnV0ZS0+c2lnbmF0
dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifSwgXEBpbXBsQ29udGVudCwgRW5j
YXBzdWxhdGVSZXR1cm5UeXBlSWZSZXF1aXJlZCgkaW50ZXJmYWNlLT5zZXJpYWxpemFibGUsICJq
c1VuZGVmaW5lZCgpIikpOwogCiAgICAgICAgICAgICAgICAgaWYgKCRzdmdMaXN0UHJvcGVydHlU
eXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFs
dWUgcmVzdWx0ID0gICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAw
LCAkaW50ZXJmYWNlLCAiY2FzdGVkVGhpcy0+d3JhcHBlZCgpLiRpbXBsR2V0dGVyRnVuY3Rpb25O
YW1lKCIgLiAoam9pbiAiLCAiLCBAY2FsbFdpdGhBcmdzKSAuICIpIiwgImNhc3RlZFRoaXMiKSAu
ICI7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNW
YWx1ZSByZXN1bHQgPSAgIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUs
IDAsICRpbnRlcmZhY2UsICIke3RoaXNPYmplY3R9LT53cmFwcGVkKCkuJGltcGxHZXR0ZXJGdW5j
dGlvbk5hbWUoIiAuIChqb2luICIsICIsIEBjYWxsV2l0aEFyZ3MpIC4gIikiLCAkdGhpc09iamVj
dCkgLiAiO1xuIik7CiAgICAgICAgICAgICAgICAgfSBlbHNpZiAoJHN2Z1Byb3BlcnR5T3JMaXN0
UHJvcGVydHlUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICRzdmdQcm9wZXJ0eU9yTGlzdFByb3BlcnR5VHlwZSYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKS5wcm9wZXJ0eVJlZmVyZW5jZSgpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICRzdmdQcm9wZXJ0eU9yTGlzdFByb3BlcnR5VHlwZSYgaW1w
bCA9ICR7dGhpc09iamVjdH0tPndyYXBwZWQoKS5wcm9wZXJ0eVJlZmVyZW5jZSgpO1xuIik7CiAg
ICAgICAgICAgICAgICAgICAgIGlmICgkc3ZnUHJvcGVydHlPckxpc3RQcm9wZXJ0eVR5cGUgZXEg
ImZsb2F0IikgeyAjIFNwZWNpYWwgY2FzZSBmb3IgSlNTVkdOdW1iZXIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgcmVzdWx0ID0gIiAuIE5h
dGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRlcmZhY2UsICJpbXBs
IiwgImNhc3RlZFRoaXMiKSAuICI7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgk
YXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRlcmZhY2UsICJpbXBsIiwgJHRoaXNPYmplY3Qp
IC4gIjtcbiIpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0
aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgImltcGwu
JGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUoIiAuIChqb2luICIsICIsIEBjYWxsV2l0aEFyZ3MpIC4g
IikiLCAiY2FzdGVkVGhpcyIpIC4gIjtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVl
KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgImltcGwuJGltcGxHZXR0ZXJG
dW5jdGlvbk5hbWUoIiAuIChqb2luICIsICIsIEBjYWxsV2l0aEFyZ3MpIC4gIikiLCAkdGhpc09i
amVjdCkgLiAiO1xuIik7CiAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IH0gZWxzZSB7CkBAIC0zMDAxLDMzICszMDQzLDMzIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0
aW9uCiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICB1bnNoaWZ0
KEBhcmd1bWVudHMsIEBjYWxsV2l0aEFyZ3MpOwotICAgICAgICAgICAgICAgICAgICBteSAkanNU
eXBlID0gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFj
ZSwgIiR7ZnVuY3Rpb25OYW1lfSgiIC4gam9pbigiLCAiLCBAYXJndW1lbnRzKSAuICIpIiwgImNh
c3RlZFRoaXMiKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTtcbiIpIGlmICEkYXR0cmlidXRlLT5p
c1N0YXRpYzsKKyAgICAgICAgICAgICAgICAgICAgbXkgJGpzVHlwZSA9IE5hdGl2ZVRvSlNWYWx1
ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRlcmZhY2UsICIke2Z1bmN0aW9uTmFtZX0o
IiAuIGpvaW4oIiwgIiwgQGFyZ3VtZW50cykgLiAiKSIsICR0aGlzT2JqZWN0KTsKKyAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgaW1wbCA9ICR7dGhpc09i
amVjdH0tPndyYXBwZWQoKTtcbiIpIGlmICEkYXR0cmlidXRlLT5pc1N0YXRpYzsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1NWR0FuaW1hdGVkVHlwZSgkdHlwZSkp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8g
b2JqID0gJGpzVHlwZTtcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKSwgb2JqLmdldCgpKTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCAke3RoaXNP
YmplY3R9LT5nbG9iYWxPYmplY3QoKSwgb2JqLmdldCgpKTtcbiIpOwogICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgSlNWYWx1ZSByZXN1bHQgPSAkanNUeXBlO1xuIik7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBjYXN0ZWRUaGlzLT5tXyIgLiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUgLiAi
LnNldChzdGF0ZS0+dm0oKSwgY2FzdGVkVGhpcywgcmVzdWx0KTtcbiIpIGlmICgkYXR0cmlidXRl
LT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWNoZWRBdHRyaWJ1dGUifSk7Ci0g
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgJHt0aGlzT2JqZWN0fS0+bV8iIC4gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lIC4gIi5z
ZXQoc3RhdGUtPnZtKCksICR7dGhpc09iamVjdH0sIHJlc3VsdCk7XG4iKSBpZiAoJGF0dHJpYnV0
ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FjaGVkQXR0cmlidXRlIn0pOwor
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiAiIC4gRW5jYXBz
dWxhdGVSZXR1cm5UeXBlSWZSZXF1aXJlZCgkaW50ZXJmYWNlLT5zZXJpYWxpemFibGUsICJyZXN1
bHQiKSAuICI7XG4iKTsKIAogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB1
bnNoaWZ0KEBhcmd1bWVudHMsIEdlbmVyYXRlQ2FsbFdpdGgoJGF0dHJpYnV0ZS0+c2lnbmF0dXJl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifSwgXEBpbXBsQ29udGVudCwgIkpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSIpKTsKKyAgICAgICAgICAgICAgICB1bnNoaWZ0KEBh
cmd1bWVudHMsIEdlbmVyYXRlQ2FsbFdpdGgoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifSwgXEBpbXBsQ29udGVudCwgRW5jYXBzdWxhdGVSZXR1
cm5UeXBlSWZSZXF1aXJlZCgkaW50ZXJmYWNlLT5zZXJpYWxpemFibGUsICJqc1VuZGVmaW5lZCgp
IikpKTsKIAogICAgICAgICAgICAgICAgIGlmICgkc3ZnUHJvcGVydHlPckxpc3RQcm9wZXJ0eVR5
cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHN2Z1By
b3BlcnR5T3JMaXN0UHJvcGVydHlUeXBlIGltcGwoKmNhc3RlZFRoaXMtPndyYXBwZWQoKSk7XG4i
KTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSBy
ZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGlu
dGVyZmFjZSwgImltcGwuJGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUoIiAuIGpvaW4oIiwgIiwgQGFy
Z3VtZW50cykgLiAiKSIsICJjYXN0ZWRUaGlzIikgLiAiO1xuIik7CisgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRzdmdQcm9wZXJ0eU9yTGlzdFByb3BlcnR5VHlw
ZSBpbXBsKCoke3RoaXNPYmplY3R9LT53cmFwcGVkKCkpO1xuIik7CisgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2ZVRv
SlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRlcmZhY2UsICJpbXBsLiRpbXBs
R2V0dGVyRnVuY3Rpb25OYW1lKCIgLiBqb2luKCIsICIsIEBhcmd1bWVudHMpIC4gIikiLCAkdGhp
c09iamVjdCkgLiAiO1xuIik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTtcbiIpOwotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBKU1ZhbHVlIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2ln
bmF0dXJlLCAwLCAkaW50ZXJmYWNlLCAiaW1wbC4kaW1wbEdldHRlckZ1bmN0aW9uTmFtZSgiIC4g
am9pbigiLCAiLCBAYXJndW1lbnRzKSAuICIpIiwgImNhc3RlZFRoaXMiKSAuICI7XG4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgaW1wbCA9ICR7
dGhpc09iamVjdH0tPndyYXBwZWQoKTtcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNlLCAiaW1wbC4kaW1wbEdldHRlckZ1bmN0
aW9uTmFtZSgiIC4gam9pbigiLCAiLCBAYXJndW1lbnRzKSAuICIpIiwgJHRoaXNPYmplY3QpIC4g
IjtcbiIpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpO1xuIik7CiAKLSAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1
cm4gIiAuIEVuY2Fwc3VsYXRlUmV0dXJuVHlwZUlmUmVxdWlyZWQoJGludGVyZmFjZS0+c2VyaWFs
aXphYmxlLCAicmVzdWx0IikgLiAiO1xuIik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKQEAgLTM1MzYsNiArMzU3OCw4IEBAIEVORAog
CiAgICAgfQogCisgICAgR2VuZXJhdGVTZXJpYWxpemVyRnVuY3Rpb24oJGludGVyZmFjZSwgJGlu
dGVyZmFjZU5hbWUsICRjbGFzc05hbWUsICRzZXJpYWxpemVyRnVuY3Rpb25OYW1lLCAkc2VyaWFs
aXplck5hdGl2ZUZ1bmN0aW9uTmFtZSkgaWYgJGludGVyZmFjZS0+c2VyaWFsaXphYmxlOworCiAg
ICAgaWYgKCRpbnRlcmZhY2UtPml0ZXJhYmxlKSB7CiAgICAgICAgIEdlbmVyYXRlSW1wbGVtZW50
YXRpb25JdGVyYWJsZUZ1bmN0aW9ucygkaW50ZXJmYWNlKTsKICAgICB9CkBAIC0zNzYxLDYgKzM4
MDUsMzIgQEAgRU5ECiAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiNlbmRpZiAvLyAke2NvbmRp
dGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwogfQogCitzdWIgR2VuZXJh
dGVTZXJpYWxpemVyRnVuY3Rpb24KK3sKKyAgICBteSAoJGludGVyZmFjZSwgJGludGVyZmFjZU5h
bWUsICRjbGFzc05hbWUsICRzZXJpYWxpemVyRnVuY3Rpb25OYW1lLCAkc2VyaWFsaXplck5hdGl2
ZUZ1bmN0aW9uTmFtZSkgPSBAXzsKKworICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJPYmplY3RDb25z
dHJ1Y3Rvci5oIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMICR7c2VyaWFsaXplck5hdGl2ZUZ1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBzdGF0
ZSlcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CisgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgYXV0byBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKUyRpbnRlcmZhY2VO
YW1lKj4oc3RhdGUtPnRoaXNWYWx1ZSgpKTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSl7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7XG4i
KTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVF
cnJvcigqc3RhdGUsIHRocm93U2NvcGUsIFwiJGludGVyZmFjZU5hbWVcIiwgXCIkc2VyaWFsaXpl
ckZ1bmN0aW9uTmFtZVwiKTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIp
OworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
Y2FzdGVkVGhpcywgJHtjbGFzc05hbWV9OjppbmZvKCkpO1xuXG4iKSB1bmxlc3MgJGludGVyZmFj
ZU5hbWUgZXEgIkV2ZW50VGFyZ2V0IjsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRv
KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChzdGF0ZSk7XG4iKTsKKyAgICBmb3JlYWNo
IG15ICRhdHRyaWJ1dGUgKEB7JGludGVyZmFjZS0+YXR0cmlidXRlc30pIHsKKyAgICAgICAgbXkg
JG5hbWUgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWU7CisgICAgICAgIGlmIChncmVwICRf
IGVxICRuYW1lLCBAeyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+YXR0cmlidXRlc30pIHsKKyAg
ICAgICAgICAgIG15ICRnZXRGdW5jdGlvbk5hbWUgPSBHZXRBdHRyaWJ1dGVHZXR0ZXJOYW1lKCRp
bnRlcmZhY2UsICRjbGFzc05hbWUsICRhdHRyaWJ1dGUpOworICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCBcIiR7bmFtZX1cIiksICR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihzdGF0ZSwgY2Fz
dGVkVGhpcykpO1xuIik7CisgICAgICAgIH0KKyAgICB9CisgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpO1xuIik7CisgICAgcHVzaChAaW1w
bENvbnRlbnQsICJ9XG5cbiIpOworfQorCiBzdWIgR2VuZXJhdGVGdW5jdGlvbkNhc3RlZFRoaXMK
IHsKICAgICBteSAoJGludGVyZmFjZSwgJGNsYXNzTmFtZSwgJGZ1bmN0aW9uLCAkc2hvdWxkUmVq
ZWN0UHJvbWlzZSkgPSBAXzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvSURMUGFyc2VyLnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQ
YXJzZXIucG0KaW5kZXggMGRjYzRjZTIwNjBmZWJmYTk2ZGJkMGY1NGNhMjg0ODY1MmUyMGY1Mi4u
Njc3NGM1MTA5NTU2ZjZhY2ZlMzcwMzYzMTBlYzVjYmUxOTVlMWM3NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0KKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0KQEAgLTYwLDYgKzYwLDcgQEAgc3Ry
dWN0KCBkb21JbnRlcmZhY2UgPT4gewogICAgIGlzQ2FsbGJhY2sgPT4gJyQnLCAjIFVzZWQgZm9y
IGNhbGxiYWNrIGludGVyZmFjZXMKICAgICBpc1BhcnRpYWwgPT4gJyQnLCAjIFVzZWQgZm9yIHBh
cnRpYWwgaW50ZXJmYWNlcwogICAgIGl0ZXJhYmxlID0+ICckJywgIyBVc2VkIGZvciBpdGVyYWJs
ZSBpbnRlcmZhY2VzCisgICAgc2VyaWFsaXphYmxlID0+ICckJywgIyBVc2VkIGZvciBzZXJpYWxp
emFibGUgaW50ZXJmYWNlcwogfSk7CiAKICMgVXNlZCB0byByZXByZXNlbnQgZG9tSW50ZXJmYWNl
IGNvbnRlbnRzIChuYW1lIG9mIG1ldGhvZCwgc2lnbmF0dXJlKQpAQCAtMzc1LDYgKzM3NiwxMCBA
QCBteSAkbmV4dEF0dHJpYnV0ZU9yT3BlcmF0aW9uUmVzdF8xID0gJ14oXCh8Qnl0ZVN0cmluZ3xE
T01TdHJpbmd8VVNWU3RyaW5nfERhdGV8YQogbXkgJG5leHRVbnNpZ25lZEludGVnZXJUeXBlXzEg
PSAnXihsb25nfHNob3J0KSQnOwogbXkgJG5leHREZWZhdWx0VmFsdWVfMSA9ICdeKC18SW5maW5p
dHl8TmFOfGZhbHNlfG51bGx8dHJ1ZSkkJzsKIAorIyBVc2VkIHRvIHJlcHJlc2VudCBzZXJpYWxp
emFibGUgaW50ZXJmYWNlCitzdHJ1Y3QoIGRvbVNlcmlhbGl6YWJsZSA9PiB7CisgICAgYXR0cmli
dXRlcyA9PiAnQCcsICMgTGlzdCBvZiBhdHRyaWJ1dGVzIHRvIHNlcmlhbGl6ZQorfSk7CiAKIHN1
YiBwYXJzZURlZmluaXRpb25zCiB7CkBAIC0xMDU2LDcgKzEwNjEsMTYgQEAgc3ViIHBhcnNlU2Vy
aWFsaXplcgogICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tlbigpOwogICAgIGlmICgkbmV4
dC0+dmFsdWUoKSBlcSAic2VyaWFsaXplciIpIHsKICAgICAgICAgJHNlbGYtPmFzc2VydFRva2Vu
VmFsdWUoJHNlbGYtPmdldFRva2VuKCksICJzZXJpYWxpemVyIiwgX19MSU5FX18pOwotICAgICAg
ICByZXR1cm4gJHNlbGYtPnBhcnNlU2VyaWFsaXplclJlc3QoJGV4dGVuZGVkQXR0cmlidXRlTGlz
dCk7CisgICAgICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tlbigpOworICAgICAgICBteSAk
bmV3RGF0YU5vZGU7CisgICAgICAgIGlmICgkbmV4dC0+dmFsdWUoKSBuZSAiOyIpIHsKKyAgICAg
ICAgICAgICRuZXdEYXRhTm9kZSA9ICRzZWxmLT5wYXJzZVNlcmlhbGl6ZXJSZXN0KCRleHRlbmRl
ZEF0dHJpYnV0ZUxpc3QpOworICAgICAgICAgICAgbXkgJG5leHQgPSAkc2VsZi0+bmV4dFRva2Vu
KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkbmV3RGF0YU5vZGUgPSBkb21TZXJp
YWxpemFibGUtPm5ldygpOworICAgICAgICB9CisgICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZh
bHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiOyIsIF9fTElORV9fKTsKKyAgICAgICAgcmV0dXJuICRu
ZXdEYXRhTm9kZTsKICAgICB9CiAgICAgJHNlbGYtPmFzc2VydFVuZXhwZWN0ZWRUb2tlbigkbmV4
dC0+dmFsdWUoKSwgX19MSU5FX18pOwogfQpAQCAtMTA2OSw3ICsxMDgzLDEwIEBAIHN1YiBwYXJz
ZVNlcmlhbGl6ZXJSZXN0CiAgICAgbXkgJG5leHQgPSAkc2VsZi0+bmV4dFRva2VuKCk7CiAgICAg
aWYgKCRuZXh0LT52YWx1ZSgpIGVxICI9IikgewogICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5W
YWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIj0iLCBfX0xJTkVfXyk7Ci0gICAgICAgIHJldHVybiAk
c2VsZi0+cGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybigkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsK
KyAgICAgICAgbXkgJGF0dHJpYnV0ZXMgPSAkc2VsZi0+cGFyc2VTZXJpYWxpemF0aW9uUGF0dGVy
bigpOworICAgICAgICBteSAkbmV3RGF0YU5vZGUgPSBkb21TZXJpYWxpemFibGUtPm5ldygpOwor
ICAgICAgICAkbmV3RGF0YU5vZGUtPmF0dHJpYnV0ZXMoJGF0dHJpYnV0ZXMpOworICAgICAgICBy
ZXR1cm4gJG5ld0RhdGFOb2RlOwogICAgIH0KICAgICBpZiAoJG5leHQtPnR5cGUoKSA9PSBJZGVu
dGlmaWVyVG9rZW4gfHwgJG5leHQtPnZhbHVlKCkgZXEgIigiKSB7CiAgICAgICAgIHJldHVybiAk
c2VsZi0+cGFyc2VPcGVyYXRpb25SZXN0KCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOwpAQCAtMTA3
OSw1OSArMTA5Niw0NSBAQCBzdWIgcGFyc2VTZXJpYWxpemVyUmVzdAogc3ViIHBhcnNlU2VyaWFs
aXphdGlvblBhdHRlcm4KIHsKICAgICBteSAkc2VsZiA9IHNoaWZ0OwotICAgIG15ICRleHRlbmRl
ZEF0dHJpYnV0ZUxpc3QgPSBzaGlmdDsKIAogICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tl
bigpOwogICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAieyIpIHsKICAgICAgICAgJHNlbGYtPmFz
c2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICJ7IiwgX19MSU5FX18pOwotICAgICAg
ICAkc2VsZi0+cGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybk1hcCgpOworICAgICAgICBteSAkYXR0
cmlidXRlcyA9ICRzZWxmLT5wYXJzZVNlcmlhbGl6YXRpb25BdHRyaWJ1dGVzKCk7CiAgICAgICAg
ICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAifSIsIF9fTElORV9f
KTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gXEB7JGF0dHJpYnV0ZXN9OwogICAg
IH0KICAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgIlsiKSB7Ci0gICAgICAgICRzZWxmLT5hc3Nl
cnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiWyIsIF9fTElORV9fKTsKLSAgICAgICAg
JHNlbGYtPnBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm5MaXN0KCk7Ci0gICAgICAgICRzZWxmLT5h
c3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiXSIsIF9fTElORV9fKTsKLSAgICAg
ICAgcmV0dXJuOworICAgICAgICBkaWUgIlNlcmlhbGl6YXRpb24gb2YgbGlzdHMgcGF0dGVybiBp
cyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4iOwogICAgIH0KICAgICBpZiAoJG5leHQtPnR5cGUo
KSA9PSBJZGVudGlmaWVyVG9rZW4pIHsKLSAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVHlwZSgk
c2VsZi0+Z2V0VG9rZW4oKSwgSWRlbnRpZmllclRva2VuKTsKLSAgICAgICAgcmV0dXJuOworICAg
ICAgICBteSBAYXR0cmlidXRlcyA9ICgpOworICAgICAgICBteSAkdG9rZW4gPSAkc2VsZi0+Z2V0
VG9rZW4oKTsKKyAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVHlwZSgkdG9rZW4sIElkZW50aWZp
ZXJUb2tlbik7CisgICAgICAgIHB1c2goQGF0dHJpYnV0ZXMsICR0b2tlbi0+dmFsdWUoKSk7Cisg
ICAgICAgIHJldHVybiBcQGF0dHJpYnV0ZXM7CiAgICAgfQogICAgICRzZWxmLT5hc3NlcnRVbmV4
cGVjdGVkVG9rZW4oJG5leHQtPnZhbHVlKCksIF9fTElORV9fKTsKIH0KIAotc3ViIHBhcnNlU2Vy
aWFsaXphdGlvblBhdHRlcm5NYXAKK3N1YiBwYXJzZVNlcmlhbGl6YXRpb25BdHRyaWJ1dGVzCiB7
CiAgICAgbXkgJHNlbGYgPSBzaGlmdDsKLSAgICBteSAkbmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4o
KTsKLSAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgImdldHRlciIpIHsKLSAgICAgICAgJHNlbGYt
PmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICJnZXR0ZXIiLCBfX0xJTkVfXyk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJpbmhl
cml0IikgewotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4o
KSwgImluaGVyaXQiLCBfX0xJTkVfXyk7Ci0gICAgICAgICRzZWxmLT5wYXJzZUlkZW50aWZpZXJz
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCRuZXh0LT50eXBlKCkgPT0gSWRl
bnRpZmllclRva2VuKSB7Ci0gICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblR5cGUoJHNlbGYtPmdl
dFRva2VuKCksIElkZW50aWZpZXJUb2tlbik7Ci0gICAgICAgICRzZWxmLT5wYXJzZUlkZW50aWZp
ZXJzKCk7Ci0gICAgfQotfQorICAgIG15ICR0b2tlbiA9ICRzZWxmLT5nZXRUb2tlbigpOworCisg
ICAgaWYgKCR0b2tlbi0+dmFsdWUoKSBlcSAiZ2V0dGVyIikgeworICAgICAgICBkaWUgIlNlcmlh
bGl6ZXIgZ2V0dGVyIGtleXdvcmQgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuIjsKIAotc3Vi
IHBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm5MaXN0Ci17Ci0gICAgbXkgJHNlbGYgPSBzaGlmdDsK
LSAgICBteSAkbmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsKLSAgICBpZiAoJG5leHQtPnZhbHVl
KCkgZXEgImdldHRlciIpIHsKLSAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYt
PmdldFRva2VuKCksICJnZXR0ZXIiLCBfX0xJTkVfXyk7Ci0gICAgICAgIHJldHVybjsKICAgICB9
Ci0gICAgaWYgKCRuZXh0LT50eXBlKCkgPT0gSWRlbnRpZmllclRva2VuKSB7Ci0gICAgICAgICRz
ZWxmLT5hc3NlcnRUb2tlblR5cGUoJHNlbGYtPmdldFRva2VuKCksIElkZW50aWZpZXJUb2tlbik7
Ci0gICAgICAgICRzZWxmLT5wYXJzZUlkZW50aWZpZXJzKCk7CisgICAgaWYgKCR0b2tlbi0+dmFs
dWUoKSBlcSAiaW5oZXJpdCIpIHsKKyAgICAgICAgZGllICJTZXJpYWxpemVyIGluaGVyaXQga2V5
d29yZCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4iOwogICAgIH0KKworICAgIG15IEBhdHRy
aWJ1dGVzID0gKCk7CisgICAgJHNlbGYtPmFzc2VydFRva2VuVHlwZSgkdG9rZW4sIElkZW50aWZp
ZXJUb2tlbik7CisgICAgcHVzaChAYXR0cmlidXRlcywgJHRva2VuLT52YWx1ZSgpKTsKKyAgICBw
dXNoKEBhdHRyaWJ1dGVzLCBAeyRzZWxmLT5wYXJzZUlkZW50aWZpZXJzKCl9KTsKKyAgICByZXR1
cm4gXEBhdHRyaWJ1dGVzOwogfQogCiBzdWIgcGFyc2VJZGVudGlmaWVyTGlzdApAQCAtMjI2Nyw2
ICsyMjcwLDE5IEBAIHN1YiBhcHBseU1lbWJlckxpc3QKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIG5leHQ7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKHJlZigkaXRlbSkgZXEgImRvbVNlcmlh
bGl6YWJsZSIpIHsKKyAgICAgICAgICAgICRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZSgkaXRlbSk7
CisgICAgICAgICAgICBuZXh0OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCRpbnRlcmZh
Y2UtPnNlcmlhbGl6YWJsZSkgeworICAgICAgICBteSAkbnVtU2VyaWFsaXplckF0dHJpYnV0ZXMg
PSBAeyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+YXR0cmlidXRlc307CisgICAgICAgIGlmICgk
bnVtU2VyaWFsaXplckF0dHJpYnV0ZXMgPT0gMCkgeworICAgICAgICAgICAgZm9yZWFjaCBteSAk
YXR0cmlidXRlIChAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9KSB7CisgICAgICAgICAgICAgICAg
cHVzaChAeyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+YXR0cmlidXRlc30sICRhdHRyaWJ1dGUt
PnNpZ25hdHVyZS0+bmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROb2RlLmNwcAppbmRleCA1NTA0MzdhYTczMjJlZWFmNTQ2OGI3ZmY0ZWI2ZjgwYTVlODQ2NGIy
Li42NmFkNTQ0NDQ4NGFlMWIzZGQ4OGE0YzRiZWI3OTlhNDI1NTUzMzlhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3Bw
CkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgogI2luY2x1
ZGUgIkpTRE9NSXRlcmF0b3IuaCIKICNpbmNsdWRlICJKU0RPTVByb21pc2UuaCIKKyNpbmNsdWRl
ICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMu
aCIKICNpbmNsdWRlICJVUkwuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CkBAIC01Miw2
ICs1Myw4IEBAIGJvb2wgc2V0SlNUZXN0Tm9kZU5hbWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlCiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpz
VGVzdE5vZGVDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKIGJvb2wgc2V0SlNUZXN0Tm9kZUNvbnN0cnVjdG9yKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiAK
K0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9u
VG9KU09OKEV4ZWNTdGF0ZSopOworCiBjbGFzcyBKU1Rlc3ROb2RlUHJvdG90eXBlIDogcHVibGlj
IEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0M6OkpTTm9u
RmluYWxPYmplY3QgQmFzZTsKQEAgLTExNSw2ICsxMTgsNyBAQCBzdGF0aWMgY29uc3QgSGFzaFRh
YmxlVmFsdWUgSlNUZXN0Tm9kZVByb3RvdHlwZVRhYmxlVmFsdWVzW10gPQogICAgIHsgImtleXMi
LCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0
aXZlRnVuY3Rpb24+KGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbktleXMpLCAoaW50cHRyX3Qp
ICgwKSB9IH0sCiAgICAgeyAidmFsdWVzIiwgSlNDOjpGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIHsg
KGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3ROb2RlUHJvdG90eXBl
RnVuY3Rpb25WYWx1ZXMpLCAoaW50cHRyX3QpICgwKSB9IH0sCiAgICAgeyAiZm9yRWFjaCIsIEpT
Qzo6RnVuY3Rpb24sIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVG
dW5jdGlvbj4oanNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaCksIChpbnRwdHJfdCkg
KDEpIH0gfSwKKyAgICB7ICJ0b0pTT04iLCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgeyAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE5vZGVQcm90b3R5cGVG
dW5jdGlvblRvSlNPTiksIChpbnRwdHJfdCkgKDApIH0gfSwKIH07CiAKIGNvbnN0IENsYXNzSW5m
byBKU1Rlc3ROb2RlUHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0Tm9kZVByb3RvdHlwZSIsICZC
YXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0Tm9kZVByb3RvdHlwZSkg
fTsKQEAgLTE2NSw2ICsxNjksOCBAQCBKU09iamVjdCogSlNUZXN0Tm9kZTo6cHJvdG90eXBlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICByZXR1cm4gZ2V0RE9NUHJv
dG90eXBlPEpTVGVzdE5vZGU+KHZtLCBnbG9iYWxPYmplY3QpOwogfQogCitKU1ZhbHVlIGpzVGVz
dE5vZGVOYW1lR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE5vZGUqKTsKKwogRW5jb2RlZEpTVmFs
dWUganNUZXN0Tm9kZU5hbWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CkBAIC0xNzYs
OSArMTgyLDE2IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVOYW1lKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVyCiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRl
LCB0aHJvd1Njb3BlLCAiVGVzdE5vZGUiLCAibmFtZSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNU
ZXN0Tm9kZU5hbWVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rl
c3ROb2RlTmFtZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3ROb2RlKiB0aGlzT2JqZWN0
KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmpl
Y3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1
ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5uYW1lKCkpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAK
QEAgLTI1NCw2ICsyNjcsMjEgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RO
b2RlUHJvdG90eXBlRnVuY3Rpb25UZXN0V29ya2VyUHJvbWlzZVByb21pc2UKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCitFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTihFeGVjU3RhdGUqIHN0
YXRlKQoreworICAgIGF1dG8gY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9kZSo+
KHN0YXRlLT50aGlzVmFsdWUoKSk7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSl7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpz
dGF0ZSwgdGhyb3dTY29wZSwgIlRlc3ROb2RlIiwgInRvSlNPTiIpOworICAgIH0KKyAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE5vZGU6OmluZm8oKSk7CisK
KyAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChzdGF0ZSk7CisgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibmFtZSIpLCBq
c1Rlc3ROb2RlTmFtZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKK30KKwogdXNpbmcgVGVzdE5vZGVJdGVyYXRvciA9IEpTRE9N
SXRlcmF0b3I8SlNUZXN0Tm9kZT47CiB1c2luZyBUZXN0Tm9kZUl0ZXJhdG9yUHJvdG90eXBlID0g
SlNET01JdGVyYXRvclByb3RvdHlwZTxKU1Rlc3ROb2RlPjsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAppbmRleCAzMGRi
ODdjMGY5MDE3NTVhNTljMzBlMmI0M2E4YmY3NzNiYTBiZGVkLi5iNTRhZjE4ODA2NjJkZGYzMjVi
OWRhZWI3ZWY5ZTMwODIzMDlhMTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcApAQCAtNTEsNiArNTEsNyBAQAogI2lu
Y2x1ZGUgIkpTVGVzdE9iai5oIgogI2luY2x1ZGUgIkpTVGVzdFN1Yk9iai5oIgogI2luY2x1ZGUg
IkpTWFBhdGhOU1Jlc29sdmVyLmgiCisjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKICNp
bmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnQu
aCIKICNpbmNsdWRlICJTVkdQb2ludC5oIgpAQCAtMTAwMCw2ICsxMDAxLDggQEAgYm9vbCBzZXRK
U1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzoKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3Io
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
CiBib29sIHNldEpTVGVzdE9iakNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oRXhlY1N0YXRlKik7CisK
IGNsYXNzIEpTVGVzdE9ialByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3Qg
ewogcHVibGljOgogICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CkBAIC0x
NDQwLDYgKzE0NDMsNyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJv
dG90eXBlVGFibGVWYWx1ZXNbXSA9CiAgICAgeyAiQ09OU1RfVkFMVUVfMTQiLCBEb250RGVsZXRl
IHwgUmVhZE9ubHkgfCBDb25zdGFudEludGVnZXIsIE5vSW50cmluc2ljLCB7IChsb25nIGxvbmcp
KDB4MWFiYykgfSB9LAogICAgIHsgIkNPTlNUX0pBVkFTQ1JJUFQiLCBEb250RGVsZXRlIHwgUmVh
ZE9ubHkgfCBDb25zdGFudEludGVnZXIsIE5vSW50cmluc2ljLCB7IChsb25nIGxvbmcpKDE1KSB9
IH0sCiAgICAgeyAicmVhZG9ubHkiLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBDb25zdGFudElu
dGVnZXIsIE5vSW50cmluc2ljLCB7IChsb25nIGxvbmcpKDApIH0gfSwKKyAgICB7ICJ0b0pTT04i
LCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0
aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKSwgKGludHB0cl90
KSAoMCkgfSB9LAogfTsKIAogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE9ialByb3RvdHlwZTo6c19p
bmZvID0geyAiVGVzdE9iamVjdFByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9N
RVRIT0RfVEFCTEUoSlNUZXN0T2JqUHJvdG90eXBlKSB9OwpAQCAtMTUyNSw2ICsxNTI5LDggQEAg
Ym9vbCBKU1Rlc3RPYmo6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW4KICAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlT
bG90QnlJbmRleCh0aGlzT2JqZWN0LCBzdGF0ZSwgaW5kZXgsIHNsb3QpOwogfQogCitKU1ZhbHVl
IGpzVGVzdE9ialJlYWRPbmx5TG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7
CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5TG9uZ0F0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CkBAIC0xNTM2LDEyICsxNTQyLDIxIEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialJlYWRPbmx5TG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1
cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIs
ICJyZWFkT25seUxvbmdBdHRyIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpSZWFkT25s
eUxvbmdBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0
T2JqUmVhZE9ubHlMb25nQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRo
aXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0o
dGhpc09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwucmVhZE9ubHlMb25nQXR0cigpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogCitKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5U3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUq
LCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlTdHJpbmdB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwpAQCAtMTU1MywxMiArMTU2OCwyMSBA
QCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVN0cmluZ0F0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpcwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29w
ZSwgIlRlc3RPYmplY3QiLCAicmVhZE9ubHlTdHJpbmdBdHRyIik7CiAgICAgfQotICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1Rlc3RPYmpSZWFkT25seVN0cmluZ0F0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsK
K30KKworSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNo
ZShzdGF0ZSwgaW1wbC5yZWFkT25seVN0cmluZ0F0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rl
c3RPYmpSZWFkT25seVRlc3RPYmpBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOwor
CiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWFkT25seVRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOwpAQCAtMTU3MCwxMSArMTU5NCwyMCBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpSZWFkT25seVRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0
dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3Qi
LCAicmVhZE9ubHlUZXN0T2JqQXR0ciIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwucmVhZE9ubHlUZXN0T2JqQXR0cigpKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1Rlc3RPYmpSZWFkT25seVRlc3RPYmpBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7
CiB9CiAKK0pTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlUZXN0T2JqQXR0ckdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIHRo
aXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnJlYWRPbmx5VGVzdE9iakF0dHIoKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworCitKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yU3Rh
dGljUmVhZE9ubHlMb25nQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKIAogRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNSZWFkT25seUxvbmdBdHRyKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewpAQCAtMTU4MiwyMiArMTYxNSw0MCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1
Y3RvclN0YXRpY1JlYWRPbmx5TG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jbwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljUmVhZE9ubHlMb25nQXR0
ckdldHRlcihzdGF0ZSwgbnVsbHB0cikpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVj
dG9yU3RhdGljUmVhZE9ubHlMb25nQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURf
UEFSQU0odGhpc09iamVjdCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihUZXN0T2Jq
OjpzdGF0aWNSZWFkT25seUxvbmdBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqQ29u
c3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOwor
CiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aGlzVmFsdWUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0
T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyR2V0dGVyKHN0YXRlLCBudWxscHRyKSk7Cit9
CisKK0pTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyR2V0dGVyKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBUZXN0T2JqOjpzdGF0aWNTdHJpbmdBdHRy
KCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JUZXN0U3ViT2JqR2V0dGVy
KEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25z
dHJ1Y3RvclRlc3RTdWJPYmooRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CkBAIC0xNjA5
LDkgKzE2NjAsMTggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JUZXN0U3Vi
T2JqKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHQKICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3Rh
dGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgIlRlc3RTdWJPYmoiKTsKICAgICB9Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RTdWJPYmo6OmdldENvbnN0cnVjdG9yKHN0YXRl
LT52bSgpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSkpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNUZXN0T2JqQ29uc3RydWN0b3JUZXN0U3ViT2JqR2V0dGVyKHN0YXRlLCBjYXN0
ZWRUaGlzKSk7CiB9CiAKK0pTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JUZXN0U3ViT2JqR2V0
dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICByZXR1
cm4gSlNUZXN0U3ViT2JqOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgdGhpc09iamVjdC0+
Z2xvYmFsT2JqZWN0KCkpOworfQorCisKK0pTVmFsdWUganNUZXN0T2JqVGVzdFN1Yk9iakVuYWJs
ZWRCeVNldHRpbmdDb25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKIAog
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKIHsKQEAgLTE2MjQsMTUgKzE2ODQsMjQgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
VGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLAog
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0
dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAiVGVzdFN1Yk9i
akVuYWJsZWRCeVNldHRpbmciKTsKICAgICB9Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
LT53cmFwcGVkKCkuZnJhbWUoKSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7Ci0gICAgU2V0dGluZ3MmIHNldHRpbmdzID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpLmZyYW1lKCktPnNldHRpbmdzKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rl
c3RPYmpUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yR2V0dGVyKHN0YXRlLCBj
YXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNl
dHRpbmdDb25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNP
YmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhp
c09iamVjdCk7CisgICAgaWYgKFVOTElLRUxZKCF0aGlzT2JqZWN0LT53cmFwcGVkKCkuZnJhbWUo
KSkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFNldHRpbmdzJiBzZXR0aW5n
cyA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5mcmFtZSgpLT5zZXR0aW5ncygpOwogICAgIGlmICgh
c2V0dGluZ3MudGVzdFNldHRpbmdFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RT
dWJPYmo6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4gSlNUZXN0
U3ViT2JqOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgdGhpc09iamVjdC0+Z2xvYmFsT2Jq
ZWN0KCkpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqRW51bUF0dHJHZXR0ZXIoRXhlY1N0YXRl
KiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakVudW1BdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewog
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwpAQCAtMTY0NCwxMiArMTcxMywyMSBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpFbnVtQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFBybwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAg
ICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RP
YmplY3QiLCAiZW51bUF0dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakVudW1BdHRy
R2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqRW51bUF0
dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQg
PSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5lbnVtQXR0cigpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1Zh
bHVlIGpzVGVzdE9iakJ5dGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpCeXRlQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKQEAgLTE2NjEsMTIgKzE3MzksMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQnl0
ZUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm8KICAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRl
clR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgImJ5dGVBdHRyIik7
CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpCeXRlQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVk
VGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iakJ5dGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5ieXRl
QXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iak9jdGV0QXR0ckdldHRlcihFeGVjU3Rh
dGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqT2N0ZXRBdHRyKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwpAQCAtMTY3OCwxMiArMTc2NSwyMSBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpPY3RldEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcgogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAg
ICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRl
c3RPYmplY3QiLCAib2N0ZXRBdHRyIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpPY3Rl
dEF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpP
Y3RldEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQor
eworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3Qp
OworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc051bWJlcihpbXBsLm9jdGV0QXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVz
dE9ialNob3J0QXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwpA
QCAtMTY5NSwxMiArMTc5MSwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTaG9ydEF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcgogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVy
cm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAic2hvcnRBdHRyIik7CiAgICAg
fQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1Rlc3RPYmpTaG9ydEF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMp
KTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpTaG9ydEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLnNob3J0QXR0
cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iakNsYW1wZWRTaG9ydEF0dHJHZXR0ZXIoRXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNsYW1wZWRT
aG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CkBAIC0xNzEyLDEyICsxODE3
LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNsYW1wZWRTaG9ydEF0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJv
d1Njb3BlLCAiVGVzdE9iamVjdCIsICJjbGFtcGVkU2hvcnRBdHRyIik7CiAgICAgfQotICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7
Cit9CisKK0pTVmFsdWUganNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0ckdldHRlcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuY2xh
bXBlZFNob3J0QXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iakVuZm9yY2VSYW5nZVNo
b3J0QXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwpAQCAtMTcyOSwxMiArMTg0MywyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpFbmZv
cmNlUmFuZ2VTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdAogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVy
VHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAiZW5mb3JjZVJhbmdl
U2hvcnRBdHRyIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9y
dEF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpF
bmZvcmNlUmFuZ2VTaG9ydEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0
aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFN
KHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmVuZm9yY2VSYW5nZVNob3J0QXR0cigp
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyR2V0dGVyKEV4ZWNT
dGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZFNo
b3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKQEAgLTE3NDYsMTIgKzE4Njks
MjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHIoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1YKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93
U2NvcGUsICJUZXN0T2JqZWN0IiwgInVuc2lnbmVkU2hvcnRBdHRyIik7CiAgICAgfQotICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykp
OworfQorCitKU1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyR2V0dGVyKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhp
c09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC51
bnNpZ25lZFNob3J0QXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iakxvbmdBdHRyR2V0
dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpM
b25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKQEAgLTE3NjMsMTIgKzE4OTUs
MjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm8KICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93
U2NvcGUsICJUZXN0T2JqZWN0IiwgImxvbmdBdHRyIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rl
c3RPYmpMb25nQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpz
VGVzdE9iakxvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09i
amVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlz
T2JqZWN0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5sb25nQXR0cigpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVl
IGpzVGVzdE9iakxvbmdMb25nQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwog
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwpAQCAtMTc4MCwxMiArMTkyMSwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93
R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAibG9uZ0xv
bmdBdHRyIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpMb25nTG9uZ0F0dHJHZXR0ZXIo
c3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpMb25nTG9uZ0F0dHJH
ZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBq
c051bWJlcihpbXBsLmxvbmdMb25nQXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialVu
c2lnbmVkTG9uZ0xvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKQEAgLTE3OTcsMTIgKzE5NDcsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGgKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0
aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgInVu
c2lnbmVkTG9uZ0xvbmdBdHRyIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpVbnNpZ25l
ZExvbmdMb25nQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpz
VGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNF
RF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBl
ZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC51bnNpZ25lZExvbmdMb25n
QXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0
YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CkBAIC0xODE0LDEyICsxOTczLDIxIEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewog
ICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAi
VGVzdE9iamVjdCIsICJzdHJpbmdBdHRyIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpT
dHJpbmdBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0
T2JqU3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmpl
Y3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09i
amVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1Zh
bHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnN0cmluZ0F0dHIoKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdBdHRyKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwpAQCAtMTgzMSwxMiArMTk5OSwyMSBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAg
ICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRl
c3RPYmplY3QiLCAidXN2c3RyaW5nQXR0ciIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2Jq
VXN2c3RyaW5nQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpz
VGVzdE9ialVzdnN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0
aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFN
KHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC51c3ZzdHJp
bmdBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1
cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqVGVzdE9iakF0dHJHZXR0ZXIoRXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialRlc3RPYmpB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwpAQCAtMTg0OCwxMiArMjAyNSwyMSBA
QCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0T2JqQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkg
ewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3Bl
LCAiVGVzdE9iamVjdCIsICJ0ZXN0T2JqQXR0ciIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwg
Y2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwudGVzdE9iakF0dHIoKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNUZXN0T2JqVGVzdE9iakF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNW
YWx1ZSBqc1Rlc3RPYmpUZXN0T2JqQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURf
UEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQo
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9i
amVjdCgpLCBpbXBsLnRlc3RPYmpBdHRyKCkpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAor
SlNWYWx1ZSBqc1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpT
VGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRy
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwpAQCAtMTg2NSwxMiArMjA1MSwyMSBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
ICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwg
IlRlc3RPYmplY3QiLCAidGVzdE51bGxhYmxlT2JqQXR0ciIpOwogICAgIH0KLSAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhz
dGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwudGVzdE51bGxhYmxlT2JqQXR0
cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyR2V0dGVyKHN0YXRlLCBj
YXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0ckdl
dHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlMoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnRlc3ROdWxsYWJsZU9i
akF0dHIoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iakxl
bmllbnRUZXN0T2JqQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwpAQCAtMTg4MiwxMiArMjA3NywyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpMZW5pZW50VGVzdE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
cwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmxlbmllbnRUZXN0T2JqQXR0cigpKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsK
K30KKworSlNWYWx1ZSBqc1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0dHJHZXR0ZXIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCB0aGlz
T2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgaW1wbC5sZW5pZW50VGVzdE9iakF0dHIoKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialVuZm9yZ2VhYmxlQXR0ckdl
dHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
VW5mb3JnZWFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwpAQCAtMTg5OSwx
MiArMjEwMywyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVbmZvcmdlYWJsZUF0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbAogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0
ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAidW5mb3JnZWFibGVBdHRyIik7CiAgICAgfQot
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1Rlc3RPYmpVbmZvcmdlYWJsZUF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRo
aXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpVbmZvcmdlYWJsZUF0dHJHZXR0ZXIoRXhlY1N0
YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhD
YWNoZShzdGF0ZSwgaW1wbC51bmZvcmdlYWJsZUF0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rl
c3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0dldHRlcihFeGVjU3RhdGUq
LCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0clRyZWF0
aW5nTnVsbEFzRW1wdHlTdHJpbmcoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CkBAIC0x
OTE2LDEyICsyMTI5LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJUcmVh
dGluZ051bGxBc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSogc3RhdGUsIEVuCiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3Io
KnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJzdHJpbmdBdHRyVHJlYXRpbmdOdWxs
QXNFbXB0eVN0cmluZyIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqU3RyaW5nQXR0clRy
ZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKwor
SlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZ0dldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3Ry
aW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3Ry
aW5nKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4g
cmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5nQXR0clRyZWF0aW5nTnVs
bEFzRW1wdHlTdHJpbmdHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialVzdnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwpAQCAtMTkzMywxMiArMjE1NSwyMSBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmlu
ZyhFeGVjU3RhdGUqIHN0YXRlLAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAg
ICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRl
c3RPYmplY3QiLCAidXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmciKTsKICAg
ICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialVzdnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5
U3RyaW5nR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2Jq
VXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdHZXR0ZXIoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShz
dGF0ZSwgaW1wbC51c3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZygpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogCitKU1ZhbHVlIGpzVGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHJHZXR0ZXIoRXhlY1N0
YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakltcGxlbWVudGF0
aW9uRW51bUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CkBAIC0xOTUwLDEyICsy
MTgxLDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsIHRo
cm93U2NvcGUsICJUZXN0T2JqZWN0IiwgImltcGxlbWVudGF0aW9uRW51bUF0dHIiKTsKICAgICB9
Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHJHZXR0ZXIoc3RhdGUs
IGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpJbXBsZW1lbnRhdGlvbkVudW1B
dHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuaW1wbGVtZW50YXRpb25FbnVtQXR0cigp
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialhNTE9iakF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwg
SlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialhNTE9iakF0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CkBAIC0xOTY3LDEyICsyMjA3LDIxIEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialhNTE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAg
ICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9i
amVjdCIsICJYTUxPYmpBdHRyIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSwgaW1wbC54bWxPYmpBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialhN
TE9iakF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RP
YmpYTUxPYmpBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVj
dCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2Jq
ZWN0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIGltcGwu
eG1sT2JqQXR0cigpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0
T2JqQ3JlYXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpDcmVhdGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CkBAIC0xOTg0
LDEyICsyMjMzLDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNyZWF0ZShFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlCiAgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0
YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJjcmVhdGUiKTsKICAgICB9Ci0gICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVGVzdE9iakNyZWF0ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1Zh
bHVlIGpzVGVzdE9iakNyZWF0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRo
aXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0o
dGhpc09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzQm9vbGVhbihpbXBsLmlzQ3JlYXRlKCkpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pT
VmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rl
c3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKQEAgLTIwMDEsMTIgKzIyNTksMjEgQEAgRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGkKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAg
ICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJU
ZXN0T2JqZWN0IiwgInJlZmxlY3RlZFN0cmluZ0F0dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30K
KworSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09i
amVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUo
c3RhdGUsIGltcGwuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1M
TmFtZXM6OnJlZmxlY3RlZHN0cmluZ2F0dHJBdHRyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RP
YmpSZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOwor
CiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwpAQCAtMjAxOCwxMiArMjI4NSwyMSBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBy
ZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVj
dCIsICJyZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RP
YmpSZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisK
K0pTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hl
KHN0YXRlLCBpbXBsLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRN
TE5hbWVzOjpyZWZsZWN0ZWR1c3ZzdHJpbmdhdHRyQXR0cikpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNU
ZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiop
OworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CkBAIC0yMDM1LDEyICsyMzExLDIxIEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAg
ICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9i
amVjdCIsICJyZWZsZWN0ZWRJbnRlZ3JhbEF0dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVz
dE9ialJlZmxlY3RlZEludGVncmFsQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQor
CitKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0ckdldHRlcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuZ2V0
SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRpbnRlZ3JhbGF0
dHJBdHRyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVn
cmFsQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7CkBAIC0yMDUyLDEyICsyMzM3LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhy
b3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJyZWZs
ZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ciIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2Jq
UmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsK
K30KKworSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ckdldHRl
cihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0byYg
aW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVt
YmVyKHN0ZDo6bWF4KDAsIGltcGwuZ2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5h
bWVzOjpyZWZsZWN0ZWR1bnNpZ25lZGludGVncmFsYXR0ckF0dHIpKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1
ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RP
YmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CkBAIC0yMDY5LDEyICsyMzYzLDIxIEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAg
ICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVz
dE9iamVjdCIsICJyZWZsZWN0ZWRCb29sZWFuQXR0ciIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNU
ZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30K
KworSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0ckdldHRlcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQm9vbGVhbihpbXBsLmhh
c0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZs
ZWN0ZWRib29sZWFuYXR0ckF0dHIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3Rl
ZFVSTEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialJlZmxlY3RlZFVSTEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CkBAIC0yMDg2LDEyICsyMzg5LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3Rl
ZFVSTEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhCiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBl
RXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJyZWZsZWN0ZWRVUkxBdHRy
Iik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyR2V0dGVyKHN0
YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0
ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAg
YXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpI
VE1MTmFtZXM6OnJlZmxlY3RlZHVybGF0dHJBdHRyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RP
YmpSZWZsZWN0ZWRVU1ZVUkxBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVU1ZVUkxBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwpAQCAtMjEwMywxMiArMjQxNSwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpSZWZsZWN0ZWRVU1ZVUkxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJu
IHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAi
cmVmbGVjdGVkVVNWVVJMQXR0ciIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqUmVmbGVj
dGVkVVNWVVJMQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpz
VGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VE
X1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVk
KCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5n
ZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1c3Z1cmxhdHRyQXR0
cikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckdldHRlcihF
eGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVj
dGVkU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKQEAgLTIxMjAsMTIg
KzI0NDEsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGkKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUs
IHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgInJlZmxlY3RlZFN0cmluZ0F0dHIiKTsKICAgICB9
Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJHZXR0ZXIoc3RhdGUsIGNh
c3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyR2V0
dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNT
dHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRTdHJpbmdBdHRyQXR0cikpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
CiAKK0pTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyR2V0dGVyKEV4
ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0
ZWRDdXN0b21JbnRlZ3JhbEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CkBAIC0y
MTM3LDEyICsyNDY3LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1c3Rv
bUludGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWCiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3Io
KnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJyZWZsZWN0ZWRDdXN0b21JbnRlZ3Jh
bEF0dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUludGVn
cmFsQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9i
alJlZmxlY3RlZEN1c3RvbUludGVncmFsQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVT
RURfUEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBw
ZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuZ2V0SW50ZWdyYWxBdHRy
aWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50SW50ZWdyYWxBdHRyQXR0cikp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0
OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHJHZXR0
ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJl
ZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwpA
QCAtMjE1NCwxMiArMjQ5MywyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRD
dXN0b21Cb29sZWFuQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYQogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVy
cm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAicmVmbGVjdGVkQ3VzdG9tQm9v
bGVhbkF0dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJv
b2xlYW5BdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0
T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5V
U0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFw
cGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4oaW1wbC5oYXNBdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEJv
b2xlYW5BdHRyQXR0cikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9t
VVJMQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKQEAgLTIxNzEsMTMgKzI1MTksMjIgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVm
bGVjdGVkQ3VzdG9tVVJMQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZQogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVy
VHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAicmVmbGVjdGVkQ3Vz
dG9tVVJMQXR0ciIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9t
VVJMQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9i
alJlZmxlY3RlZEN1c3RvbVVSTEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2Jq
KiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BB
UkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7
CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5nZXRV
UkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50VVJMQXR0ckF0dHIp
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAogCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKK0pTVmFsdWUganNUZXN0T2JqRW5h
YmxlZEF0UnVudGltZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwog
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZShFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKQEAgLTIxODksMTMgKzI1NDYsMjIgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWwKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAg
IHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2Jq
ZWN0IiwgImVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUiKTsKICAgICB9Ci0gICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VGVzdE9iakVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMp
KTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlR2V0dGVy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJp
bmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSgpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogI2VuZGlmCiAKK0pTVmFsdWUganNUZXN0T2JqVHlwZWRBcnJheUF0dHJHZXR0ZXIoRXhlY1N0
YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialR5cGVkQXJyYXlB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwpAQCAtMjIwNywxMiArMjU3MywyMSBA
QCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpUeXBlZEFycmF5QXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29w
ZSwgIlRlc3RPYmplY3QiLCAidHlwZWRBcnJheUF0dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3Rh
dGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnR5cGVkQXJyYXlBdHRyKCkpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVGVzdE9ialR5cGVkQXJyYXlBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7
Cit9CisKK0pTVmFsdWUganNUZXN0T2JqVHlwZWRBcnJheUF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCB0aGlzT2Jq
ZWN0LT5nbG9iYWxPYmplY3QoKSwgaW1wbC50eXBlZEFycmF5QXR0cigpKTsKKyAgICByZXR1cm4g
cmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25H
ZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
akF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwpA
QCAtMjIyNCwxNCArMjU5OSwyMyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aEdl
dHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZQogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVy
cm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAiYXR0cldpdGhHZXR0ZXJFeGNl
cHRpb24iKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpBdHRy
V2l0aEdldHRlckV4Y2VwdGlvbkdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1Zh
bHVlIGpzVGVzdE9iakF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwor
ICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
LSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihp
bXBsLmF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVjKSk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0
YXRlLCBlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlv
bldpdGhNZXNzYWdlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwpAQCAtMjI0MywxNCArMjYyNywyMyBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuYwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAg
cmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmpl
Y3QiLCAiYXR0cldpdGhHZXR0ZXJFeGNlcHRpb25XaXRoTWVzc2FnZSIpOwogICAgIH0KKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uV2l0
aE1lc3NhZ2VHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RP
YmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlR2V0dGVyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwor
ICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKICAgICBFeGNlcHRpb25Db2RlV2l0aE1lc3Nh
Z2UgZWM7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNO
dW1iZXIoaW1wbC5hdHRyV2l0aEdldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlKGVjKSk7CiAgICAg
c2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpBdHRy
V2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CkBAIC0yMjYyLDEyICsyNjU1LDIxIEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1
cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIs
ICJhdHRyV2l0aFNldHRlckV4Y2VwdGlvbiIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2Jq
QXR0cldpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKwor
SlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuYXR0
cldpdGhTZXR0ZXJFeGNlcHRpb24oKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0
aFNldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiop
OworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aFNldHRlckV4Y2VwdGlvbldpdGhN
ZXNzYWdlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwpAQCAtMjI3OSwxMiArMjY4MSwy
MSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aFNldHRlckV4Y2VwdGlvbldpdGhN
ZXNzYWdlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuYwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dT
Y29wZSwgIlRlc3RPYmplY3QiLCAiYXR0cldpdGhTZXR0ZXJFeGNlcHRpb25XaXRoTWVzc2FnZSIp
OwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25XaXRo
TWVzc2FnZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9i
akF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uV2l0aE1lc3NhZ2VHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmF0dHJXaXRo
U2V0dGVyRXhjZXB0aW9uV2l0aE1lc3NhZ2UoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpT
dHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoq
KTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRp
b24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CkBAIC0yMjk2LDE0ICsyNzA3LDIzIEBA
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkg
ewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3Bl
LCAiVGVzdE9iamVjdCIsICJzdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbiIpOwogICAgIH0K
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVy
RXhjZXB0aW9uR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0
T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAg
VU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENh
Y2hlKHN0YXRlLCBpbXBsLnN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKGVjKSk7CiAgICAg
c2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpTdHJp
bmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsK
KwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24o
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CkBAIC0yMzE1LDEyICsyNzM1LDIxIEBAIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewog
ICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAi
VGVzdE9iamVjdCIsICJzdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbiIpOwogICAgIH0KLSAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25HZXR0ZXIoc3Rh
dGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aFNl
dHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmpl
Y3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09i
amVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1Zh
bHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnN0cmluZ0F0dHJXaXRo
U2V0dGVyRXhjZXB0aW9uKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqQ3VzdG9tQXR0ckdl
dHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
Q3VzdG9tQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKQEAgLTIzMzIsOSArMjc2
MSwxOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDdXN0b21BdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhy
b3dTY29wZSwgIlRlc3RPYmplY3QiLCAiY3VzdG9tQXR0ciIpOwogICAgIH0KLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmN1c3RvbUF0dHIoKnN0YXRlKSk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpDdXN0b21BdHRyR2V0dGVyKHN0YXRlLCBjYXN0
ZWRUaGlzKSk7CiB9CiAKK0pTVmFsdWUganNUZXN0T2JqQ3VzdG9tQXR0ckdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgcmV0dXJuIHRoaXNPYmpl
Y3QtPmN1c3RvbUF0dHIoKnN0YXRlKTsKK30KKworCitKU1ZhbHVlIGpzVGVzdE9iak9uZm9vR2V0
dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpP
bmZvbyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKIHsKQEAgLTIzNDcsMTEgKzI3ODUsMTkgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
T25mb28oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXIK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dl
dHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgIm9uZm9vIik7
CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqT25mb29HZXR0ZXIo
c3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpPbmZvb0dldHRlcihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CiAgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGV2ZW50SGFuZGxlckF0dHJp
YnV0ZShjYXN0ZWRUaGlzLT53cmFwcGVkKCksIGV2ZW50TmFtZXMoKS5mb29FdmVudCkpOworICAg
IFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICByZXR1cm4gZXZlbnRIYW5kbGVyQXR0cmli
dXRlKHRoaXNPYmplY3QtPndyYXBwZWQoKSwgZXZlbnROYW1lcygpLmZvb0V2ZW50KTsKIH0KIAog
CitKU1ZhbHVlIGpzVGVzdE9iak9ud2Via2l0Zm9vR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9i
aiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpPbndlYmtpdGZvbyhFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKQEAgLTIzNjMsMTEgKzI4MDksMTkgQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqT253ZWJraXRmb28oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJu
IHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAi
b253ZWJraXRmb28iKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RP
YmpPbndlYmtpdGZvb0dldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpz
VGVzdE9iak9ud2Via2l0Zm9vR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhp
c09iamVjdCkKK3sKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoZXZlbnRIYW5kbGVyQXR0cmlidXRlKGNhc3RlZFRoaXMtPndyYXBwZWQoKSwgZXZl
bnROYW1lcygpLmZvb0V2ZW50KSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAg
IHJldHVybiBldmVudEhhbmRsZXJBdHRyaWJ1dGUodGhpc09iamVjdC0+d3JhcHBlZCgpLCBldmVu
dE5hbWVzKCkuZm9vRXZlbnQpOwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdFN0
YXRlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7CkBAIC0yMzc5LDEyICsyODMzLDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhy
b3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJ3aXRo
U2NyaXB0U3RhdGVBdHRyaWJ1dGUiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialdpdGhT
Y3JpcHRTdGF0ZUF0dHJpYnV0ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1Zh
bHVlIGpzVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
KyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwud2l0aFNj
cmlwdFN0YXRlQXR0cmlidXRlKCpzdGF0ZSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqV2l0
aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNU
ZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRl
ckNhbGxXaXRoQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwpAQCAtMjM5
NiwxMiArMjg1OSwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRT
ZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLAogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpz
dGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAid2l0aENhbGxXaXRoQW5kU2V0dGVyQ2Fs
bFdpdGhBdHRyaWJ1dGUiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialdpdGhDYWxsV2l0
aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9
CisKK0pTVmFsdWUganNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1
dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQg
PSBqc051bWJlcihpbXBsLndpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlKCpz
dGF0ZSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4g
cmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwpAQCAtMjQxMywxNSArMjg4NSwyNCBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZShFeGVjU3Rh
dGUqIHN0YXRlLCBFbgogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAg
cmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmpl
Y3QiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUiKTsKICAgICB9CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEF0dHJpYnV0ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVz
dE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKICAgICBhdXRvKiBjb250ZXh0ID0ganND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0
cmlidXRlKCpjb250ZXh0KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwor
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgdGhpc09iamVj
dC0+Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1
dGUoKmNvbnRleHQpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0
T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1
dGVSYWlzZXMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CkBAIC0yNDMzLDE0ICsyOTE0
LDIzIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJh
aXNlcyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJv
d1Njb3BlLCAiVGVzdE9iamVjdCIsICJ3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMiKTsK
ICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpXaXRoU2NyaXB0U3Rh
dGVBdHRyaWJ1dGVSYWlzZXNHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1
ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNHZXR0ZXIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1
ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC53
aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoKnN0YXRlLCBlYykpOworICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0
YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0U3RhdGVBdHRy
aWJ1dGVSYWlzZXMoKnN0YXRlLCBlYykpOwogICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0
OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRy
aWJ1dGVSYWlzZXNHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwpAQCAtMjQ1MiwxNyArMjk0MiwyNiBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJh
aXNlcyhFeGVjU3RhdGUqIHN0YQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAg
ICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRl
c3RPYmplY3QiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMiKTsK
ICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpXaXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlc0dldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOwor
fQorCitKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRl
UmFpc2VzR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sK
KyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRl
UmFpc2VzKCpjb250ZXh0LCBlYykpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0
ID0gdG9KUyhzdGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMoKmNvbnRleHQsIGVjKSk7CiAgICAgc2V0
RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0
ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwpAQCAtMjQ3NCwxNSArMjk3MywyNCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKEV4ZWNT
dAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93
R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAid2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZSIpOwogICAgIH0KKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30K
KworSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0
YXRlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVj
dCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2Jq
ZWN0KTsKICAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3Rh
dGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAg
ICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBs
LndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUoKnN0YXRl
LCAqY29udGV4dCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndy
YXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIHRoaXNPYmplY3QtPmds
b2JhbE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3Rh
dGVBdHRyaWJ1dGUoKnN0YXRlLCAqY29udGV4dCkpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
IAorSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0
YXRlQXR0cmlidXRlUmFpc2VzR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0
YXRlQXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwpAQCAtMjQ5
NCwxNyArMzAwMiwyNiBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKAogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpz
dGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyIpOwogICAgIH0KKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0
U3RhdGVBdHRyaWJ1dGVSYWlzZXNHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNW
YWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0
cmlidXRlUmFpc2VzR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVj
dCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2Jq
ZWN0KTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBhdXRvKiBjb250ZXh0ID0ganND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5k
U2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoKnN0YXRlLCAqY29udGV4dCwgZWMpKTsKKyAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndy
YXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIHRoaXNPYmplY3QtPmds
b2JhbE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3Rh
dGVBdHRyaWJ1dGVSYWlzZXMoKnN0YXRlLCAqY29udGV4dCwgZWMpKTsKICAgICBzZXRET01FeGNl
cHRpb24oc3RhdGUsIGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlR2V0dGVyKEV4ZWNT
dGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZShFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKQEAgLTI1MTYsMTUgKzMwMzMsMjQgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdp
dGhTcGFjZXNBdHRyaWIKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAg
IHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2Jq
ZWN0IiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2Vz
QXR0cmlidXRlIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2Jq
V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1
dGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpXaXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZUdl
dHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CiAgICAgYXV0
byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0
b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZSgqc3RhdGUsICpj
b250ZXh0KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBl
ZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFs
T2JqZWN0KCksIGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdp
dGhTcGFjZXNBdHRyaWJ1dGUoKnN0YXRlLCAqY29udGV4dCkpOworICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNr
QXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewog
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwpAQCAtMjUzNiwxMyArMzA2MiwyMiBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRl
KEV4ZWNTdGF0ZSogc3RhdAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAg
ICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RP
YmplY3QiLCAid2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZSIpOwogICAg
IH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUg
cmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0
aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RP
YmpXaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlR2V0dGVyKHN0YXRlLCBj
YXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0Fu
ZENhbGxTdGFja0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRo
aXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0o
dGhpc09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAg
ICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgp
LCBpbXBsLndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUoKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpCitKU1ZhbHVlIGpz
VGVzdE9iakNvbmRpdGlvbmFsQXR0cjFHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisK
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjEoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CkBAIC0yNTU0LDE0ICszMDg5LDIzIEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9iakNvbmRpdGlvbmFsQXR0cjEoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4g
dGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJj
b25kaXRpb25hbEF0dHIxIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpDb25kaXRpb25h
bEF0dHIxR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2Jq
Q29uZGl0aW9uYWxBdHRyMUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNP
YmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhp
c09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuY29uZGl0aW9uYWxBdHRyMSgpKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAog
I2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCitK
U1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0
T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjIoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CkBAIC0yNTczLDE0ICszMTE3LDIzIEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAg
ICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9i
amVjdCIsICJjb25kaXRpb25hbEF0dHIyIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpD
b25kaXRpb25hbEF0dHIyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUg
anNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMkdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURf
UEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQo
KTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuY29uZGl0aW9uYWxBdHRyMigp
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRp
dGlvbjIpCitKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjNHZXR0ZXIoRXhlY1N0YXRl
KiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0
cjMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CkBAIC0yNTkyLDE0ICszMTQ1LDIzIEBA
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjMoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkg
ewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3Bl
LCAiVGVzdE9iamVjdCIsICJjb25kaXRpb25hbEF0dHIzIik7CiAgICAgfQotICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisK
K0pTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyM0dldHRlcihFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAg
ICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qt
PndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuY29uZGl0aW9u
YWxBdHRyMygpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKK0pTVmFs
dWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0
Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CkBAIC0yNjExLDEyICsz
MTczLDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0
aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJjb25kaXRpb25hbEF0dHI0Iik7CiAgICAgfQotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0T2JqZWN0QTo6Z2V0Q29uc3RydWN0b3Ioc3Rh
dGUtPnZtKCksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3JHZXR0ZXIoc3Rh
dGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0
Q29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0
KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmpl
Y3QpOworICAgIHJldHVybiBKU1Rlc3RPYmplY3RBOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0o
KSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCkpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJM
RShDb25kaXRpb24xKSAmJiBFTkFCTEUoQ29uZGl0aW9uMikKK0pTVmFsdWUganNUZXN0T2JqQ29u
ZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOwor
CiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CkBAIC0yNjI4LDEyICszMTk5LDIxIEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAg
ICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVz
dE9iamVjdCIsICJjb25kaXRpb25hbEF0dHI1Iik7CiAgICAgfQotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNUZXN0T2JqZWN0Qjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rl
c3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3JHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMp
KTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3JHZXR0
ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIHJldHVy
biBKU1Rlc3RPYmplY3RCOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgdGhpc09iamVjdC0+
Z2xvYmFsT2JqZWN0KCkpOwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xKSB8
fCBFTkFCTEUoQ29uZGl0aW9uMikKK0pTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNv
bnN0cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7CkBAIC0yNjQ1LDExICszMjI1LDIwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhy
b3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJjb25k
aXRpb25hbEF0dHI2Iik7CiAgICAgfQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0
T2JqZWN0Qzo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpDb25kaXRpb25h
bEF0dHI2Q29uc3RydWN0b3JHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1
ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlKiBz
dGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIHJldHVybiBKU1Rlc3RPYmplY3RD
OjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCkp
OwogfQogCiAjZW5kaWYKIAorSlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUxR2V0dGVy
KEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDYWNo
ZWRBdHRyaWJ1dGUxKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwpAQCAtMjY2MSwxNSAr
MzI1MCwyNCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUxKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYQogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwg
dGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAiY2FjaGVkQXR0cmlidXRlMSIpOwogICAgIH0KLSAg
ICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IGNhc3RlZFRoaXMtPm1fY2FjaGVkQXR0cmlidXRl
MS5nZXQoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWNoZWRWYWx1ZSk7Ci0g
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTFHZXR0ZXIoc3RhdGUsIGNhc3RlZFRo
aXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUxR2V0dGVyKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBpZiAoSlNWYWx1ZSBj
YWNoZWRWYWx1ZSA9IHRoaXNPYmplY3QtPm1fY2FjaGVkQXR0cmlidXRlMS5nZXQoKSkKKyAgICAg
ICAgcmV0dXJuIGNhY2hlZFZhbHVlOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFw
cGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLmNhY2hlZEF0dHJpYnV0ZTEoKTsKLSAg
ICBjYXN0ZWRUaGlzLT5tX2NhY2hlZEF0dHJpYnV0ZTEuc2V0KHN0YXRlLT52bSgpLCBjYXN0ZWRU
aGlzLCByZXN1bHQpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICB0
aGlzT2JqZWN0LT5tX2NhY2hlZEF0dHJpYnV0ZTEuc2V0KHN0YXRlLT52bSgpLCB0aGlzT2JqZWN0
LCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpD
YWNoZWRBdHRyaWJ1dGUyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOwpAQCAtMjY4MSwxNSArMzI3OSwyNCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpD
YWNoZWRBdHRyaWJ1dGUyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYQog
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0
dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAiY2FjaGVkQXR0
cmlidXRlMiIpOwogICAgIH0KLSAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IGNhc3RlZFRo
aXMtPm1fY2FjaGVkQXR0cmlidXRlMi5nZXQoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShjYWNoZWRWYWx1ZSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakNhY2hlZEF0dHJpYnV0ZTJH
ZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpDYWNoZWRB
dHRyaWJ1dGUyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkK
K3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0
KTsKKyAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IHRoaXNPYmplY3QtPm1fY2FjaGVkQXR0
cmlidXRlMi5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGNhY2hlZFZhbHVlOworICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLmNh
Y2hlZEF0dHJpYnV0ZTIoKTsKLSAgICBjYXN0ZWRUaGlzLT5tX2NhY2hlZEF0dHJpYnV0ZTIuc2V0
KHN0YXRlLT52bSgpLCBjYXN0ZWRUaGlzLCByZXN1bHQpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKKyAgICB0aGlzT2JqZWN0LT5tX2NhY2hlZEF0dHJpYnV0ZTIuc2V0KHN0
YXRlLT52bSgpLCB0aGlzT2JqZWN0LCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
IAorSlNWYWx1ZSBqc1Rlc3RPYmpBbnlBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0
T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakFueUF0dHJpYnV0ZShFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBW
TSYgdm0gPSBzdGF0ZS0+dm0oKTsKQEAgLTI3MDEsMTIgKzMzMDgsMjEgQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqQW55QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJl
dHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0
IiwgImFueUF0dHJpYnV0ZSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqQW55QXR0cmli
dXRlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqQW55
QXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkK
K3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0
KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUg
cmVzdWx0ID0gaW1wbC5hbnlBdHRyaWJ1dGUoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iakNv
bnRlbnREb2N1bWVudEdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqQ29udGVudERvY3VtZW50KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwpAQCAtMjcxOCwxMSArMzMzNCwyMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb250
ZW50RG9jdW1lbnQoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbAogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVy
VHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAiY29udGVudERvY3Vt
ZW50Iik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShzdGF0ZSwg
aW1wbC5jb250ZW50RG9jdW1lbnQoKSkgPyB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgaW1wbC5jb250ZW50RG9jdW1lbnQoKSkgOiBqc051bGwoKSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpDb250ZW50RG9jdW1lbnRHZXR0ZXIoc3RhdGUsIGNh
c3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpDb250ZW50RG9jdW1lbnRHZXR0ZXIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgcmV0dXJuIHNob3VsZEFsbG93QWNjZXNz
VG9Ob2RlKHN0YXRlLCBpbXBsLmNvbnRlbnREb2N1bWVudCgpKSA/IHRvSlMoc3RhdGUsIHRoaXNP
YmplY3QtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmNvbnRlbnREb2N1bWVudCgpKSA6IGpzTnVsbCgp
OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqTXV0YWJsZVBvaW50R2V0dGVyKEV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpNdXRhYmxlUG9pbnQoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CkBAIC0yNzM0LDEyICszMzU5LDIxIEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9iak11dGFibGVQb2ludChFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAg
ICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVz
dE9iamVjdCIsICJtdXRhYmxlUG9pbnQiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBTVkdTdGF0aWNQcm9wZXJ0eVRlYXJPZmY8VGVzdE9iaiwg
U1ZHUG9pbnQ+OjpjcmVhdGUoaW1wbCwgaW1wbC5tdXRhYmxlUG9pbnQoKSwgJlRlc3RPYmo6OnVw
ZGF0ZU11dGFibGVQb2ludCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iak11dGFibGVQb2ludEdldHRlcihz
dGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iak11dGFibGVQb2ludEdl
dHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlMoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBTVkdTdGF0aWNQcm9wZXJ0eVRl
YXJPZmY8VGVzdE9iaiwgU1ZHUG9pbnQ+OjpjcmVhdGUoaW1wbCwgaW1wbC5tdXRhYmxlUG9pbnQo
KSwgJlRlc3RPYmo6OnVwZGF0ZU11dGFibGVQb2ludCkpOworICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpJbW11dGFibGVQb2ludEdldHRlcihFeGVjU3RhdGUqLCBK
U1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqSW1tdXRhYmxlUG9pbnQoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CkBAIC0yNzUxLDEyICszMzg1LDIxIEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9iakltbXV0YWJsZVBvaW50KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAg
ICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVz
dE9iamVjdCIsICJpbW11dGFibGVQb2ludCIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2Fz
dGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFNWR1Byb3BlcnR5VGVhck9mZjxTVkdQb2ludD46OmNy
ZWF0ZShpbXBsLmltbXV0YWJsZVBvaW50KCkpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpJbW11dGFibGVQ
b2ludEdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iaklt
bXV0YWJsZVBvaW50R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVj
dCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2Jq
ZWN0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIFNWR1By
b3BlcnR5VGVhck9mZjxTVkdQb2ludD46OmNyZWF0ZShpbXBsLmltbXV0YWJsZVBvaW50KCkpKTsK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqU3RyYXdiZXJyeUdl
dHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
U3RyYXdiZXJyeShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKQEAgLTI3NjgsMTIgKzM0
MTEsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyYXdiZXJyeShFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFAKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsIHRo
cm93U2NvcGUsICJUZXN0T2JqZWN0IiwgInN0cmF3YmVycnkiKTsKICAgICB9Ci0gICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVGVzdE9ialN0cmF3YmVycnlHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNW
YWx1ZSBqc1Rlc3RPYmpTdHJhd2JlcnJ5R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9i
aiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9Q
QVJBTSh0aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgp
OwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5ibHVlYmVycnkoKSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
IAorSlNWYWx1ZSBqc1Rlc3RPYmpEZXNjcmlwdGlvbkdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RP
YmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqRGVzY3JpcHRpb24oRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CkBAIC0yNzg1LDEyICszNDM3LDIxIEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9iakRlc2NyaXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVy
biB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0Iiwg
ImRlc2NyaXB0aW9uIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpEZXNjcmlwdGlvbkdl
dHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iakRlc2NyaXB0
aW9uR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNOdW1iZXIoaW1wbC5kZXNjcmlwdGlvbigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9i
aklkR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpJZChFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKQEAgLTI4MDIsMTIgKzM0NjMs
MjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqSWQoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU4KICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93
U2NvcGUsICJUZXN0T2JqZWN0IiwgImlkIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpJ
ZEdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iaklkR2V0
dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNO
dW1iZXIoaW1wbC5pZCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iakhhc2hHZXR0ZXIoRXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakhhc2goRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CkBAIC0yODE5LDEyICszNDg5LDIxIEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9iakhhc2goRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAg
ICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVz
dE9iamVjdCIsICJoYXNoIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpIYXNoR2V0dGVy
KHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqSGFzaEdldHRlcihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5n
V2l0aENhY2hlKHN0YXRlLCBpbXBsLmhhc2goKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpS
ZXBsYWNlYWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CkBAIC0yODM2LDEyICszNTE1LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4g
dGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJy
ZXBsYWNlYWJsZUF0dHJpYnV0ZSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqUmVwbGFj
ZWFibGVBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBq
c1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVT
RURfUEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBw
ZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwucmVwbGFjZWFibGVBdHRy
aWJ1dGUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZURvdWJsZUF0dHJpYnV0
ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqTnVsbGFibGVEb3VibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CkBAIC0yODUzLDEyICszNTQxLDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxl
RG91YmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlCiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBl
RXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJudWxsYWJsZURvdWJsZUF0
dHJpYnV0ZSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqTnVsbGFibGVEb3VibGVBdHRy
aWJ1dGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpO
dWxsYWJsZURvdWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoq
IHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFS
QU0odGhpc09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsK
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvTnVsbGFibGVKU051bWJlcihpbXBsLm51bGxhYmxlRG91
YmxlQXR0cmlidXRlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqTnVsbGFibGVMb25nQXR0
cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpOdWxsYWJsZUxvbmdBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZt
KCk7CkBAIC0yODcwLDEyICszNTY3LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxh
YmxlTG9uZ0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0CiAgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJU
eXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJudWxsYWJsZUxvbmdB
dHRyaWJ1dGUiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iak51bGxhYmxlTG9uZ0F0dHJp
YnV0ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iak51
bGxhYmxlTG9uZ0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRo
aXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0o
dGhpc09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IHRvTnVsbGFibGVKU051bWJlcihpbXBsLm51bGxhYmxlTG9uZ0F0
dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlQm9vbGVhbkF0dHJp
YnV0ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqTnVsbGFibGVCb29sZWFuQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwpAQCAtMjg4NywxMiArMzU5MywyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxs
YWJsZUJvb2xlYW5BdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdQogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVy
VHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAibnVsbGFibGVCb29s
ZWFuQXR0cmlidXRlIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpOdWxsYWJsZUJvb2xl
YW5BdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rl
c3RPYmpOdWxsYWJsZUJvb2xlYW5BdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5V
U0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFw
cGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4oaW1wbC5udWxsYWJsZUJvb2xl
YW5BdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ0F0
dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqTnVsbGFibGVTdHJpbmdBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7CkBAIC0yOTA0LDEyICszNjE5LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51
bGxhYmxlU3RyaW5nQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlCiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJudWxsYWJsZVN0
cmluZ0F0dHJpYnV0ZSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqTnVsbGFibGVTdHJp
bmdBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rl
c3RPYmpOdWxsYWJsZVN0cmluZ0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rl
c3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVT
RURfUEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBw
ZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nT3JOdWxsKHN0YXRlLCBpbXBsLm51
bGxhYmxlU3RyaW5nQXR0cmlidXRlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqTnVsbGFi
bGVMb25nU2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisK
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwpAQCAtMjkyMSwxMiArMzY0NSwyMSBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZShFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSgogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAg
ICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRl
c3RPYmplY3QiLCAibnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGUiKTsKICAgICB9Ci0gICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlR2V0dGVyKHN0YXRl
LCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFi
bGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0
KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmpl
Y3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1
ZSByZXN1bHQgPSB0b051bGxhYmxlSlNOdW1iZXIoaW1wbC5udWxsYWJsZUxvbmdTZXR0YWJsZUF0
dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFi
bGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKik7CisKIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CkBAIC0yOTM4LDEyICszNjcxLDIxIEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1
cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIs
ICJudWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlIik7CiAgICAgfQotICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlR2V0dGVyKHN0YXRlLCBjYXN0
ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0
dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7
CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzU3RyaW5nT3JOdWxsKHN0YXRlLCBpbXBsLm51bGxhYmxlU3RyaW5nU2V0dGFibGVB
dHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1Nl
dHRhYmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmlidXRlKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewog
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwpAQCAtMjk1NSwxMiArMzY5NywyMSBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmlidXRlKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuYwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAg
ICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RP
YmplY3QiLCAibnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSIpOwogICAgIH0KLSAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRl
cihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlVVNW
U3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2Jq
KiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BB
UkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7
CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ09yTnVsbChzdGF0ZSwgaW1wbC5udWxsYWJs
ZVVTVlN0cmluZ1NldHRhYmxlQXR0cmlidXRlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2Jq
TnVsbGFibGVTdHJpbmdWYWx1ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZShFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKQEAgLTI5NzIsMTQgKzM3MjMsMjMgQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGkKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0
aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgIm51
bGxhYmxlU3RyaW5nVmFsdWUiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1ZhbHVlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9
CisKK0pTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZUdldHRlcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9OdWxs
YWJsZUpTTnVtYmVyKGltcGwubnVsbGFibGVTdHJpbmdWYWx1ZShlYykpOwogICAgIHNldERPTUV4
Y2VwdGlvbihzdGF0ZSwgZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlR2V0
dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpB
dHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CkBAIC0yOTkxLDEyICszNzUx
LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJv
d1Njb3BlLCAiVGVzdE9iamVjdCIsICJhdHRyaWJ1dGUiKTsKICAgICB9Ci0gICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VGVzdE9iakF0dHJpYnV0ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQorCitKU1ZhbHVl
IGpzVGVzdE9iakF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRo
aXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0o
dGhpc09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmF0dHJpYnV0
ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1U
eXBlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKQEAgLTMwMDgsMTIgKzM3NzcsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
QXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEoK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dl
dHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgImF0dHJpYnV0
ZVdpdGhSZXNlcnZlZEVudW1UeXBlIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpBdHRy
aWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworfQor
CitKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlR2V0dGVyKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdX
aXRoQ2FjaGUoc3RhdGUsIGltcGwuYXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGUoKSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKIAorSlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZUdldHRlcihFeGVjU3Rh
dGUqLCBKU1Rlc3RPYmoqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHV0Rm9yd2FyZHNB
dHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CkBAIC0zMDI1LDEyICszODAz
LDIxIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJv
d1Njb3BlLCAiVGVzdE9iamVjdCIsICJwdXRGb3J3YXJkc0F0dHJpYnV0ZSIpOwogICAgIH0KLSAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0
ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwucHV0Rm9yd2Fy
ZHNBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGVHZXR0
ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKK30KKworSlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJk
c0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3Qp
Cit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVj
dCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlMoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnB1
dEZvcndhcmRzQXR0cmlidXRlKCkpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAorSlNWYWx1
ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc051bGxh
YmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwpAQCAtMzA0MiwxMiAr
MzgyOSwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0
cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKUwogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwg
dGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAicHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZSIp
OwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpT
VmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGlt
cGwucHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpQdXRG
b3J3YXJkc051bGxhYmxlQXR0cmlidXRlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisK
K0pTVmFsdWUganNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZUdldHRlcihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUs
IHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnB1dEZvcndhcmRzTnVsbGFibGVBdHRy
aWJ1dGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9ialN0
cmluZ2lmaWVyQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiopOworCiBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKQEAgLTMwNTksOSArMzg1NSwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpTdHJpbmdpZmllckF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRo
cm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAic3Ry
aW5naWZpZXJBdHRyaWJ1dGUiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialN0cmluZ2lm
aWVyQXR0cmlidXRlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7Cit9CisKK0pTVmFsdWUganNU
ZXN0T2JqU3RyaW5naWZpZXJBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
T2JqKiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VE
X1BBUkFNKHRoaXNPYmplY3QpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVk
KCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5z
dHJpbmdpZmllckF0dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCkBAIC03NTY0LDYgKzgzNjcsMjQgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvU3Ry
aW5nKEV4ZWNTdGF0ZSogc3RhdGUKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25Ub0pTT04oRXhlY1N0YXRlKiBzdGF0ZSkKK3sKKyAgICBhdXRvIGNhc3RlZFRoaXMgPSBq
c0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHN0YXRlLT50aGlzVmFsdWUoKSk7CisgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSl7CisgICAgICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICByZXR1
cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmoiLCAidG9K
U09OIik7CisgICAgfQorICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywg
SlNUZXN0T2JqOjppbmZvKCkpOworCisgICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlP
YmplY3Qoc3RhdGUpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgInJlYWRPbmx5U3RyaW5nQXR0ciIpLCBqc1Rlc3RPYmpSZWFkT25seVN0cmlu
Z0F0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJlbnVtQXR0ciIpLCBqc1Rlc3RPYmpFbnVt
QXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImxvbmdBdHRyIiksIGpzVGVzdE9iakxvbmdB
dHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY3JlYXRlIiksIGpzVGVzdE9iakNyZWF0ZUdl
dHRlcihzdGF0ZSwgY2FzdGVkVGhpcykpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKK30KKwogdm9pZCBKU1Rlc3RPYmo6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
VGVzdE9iaio+KGNlbGwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Rlc3ROb2RlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9UZXN0Tm9kZS5pZGwKaW5kZXggNDRmOGNhODI3M2U3OGZmMWQ1M2ExZjllYzVmMWZlNTNl
Yjk2OGJkZS4uOWQyYTA3OGViZmJlNDcyYTExODQ5NjdlMDAxYjkwZWM4MWI4YWE5MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROb2RlLmlkbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5vZGUuaWRsCkBA
IC0yNyw0ICsyNyw2IEBACiAKICAgICBbRW5hYmxlZEF0UnVudGltZT1ET01JdGVyYXRvcl0gaXRl
cmFibGU8VGVzdE5vZGU+OwogICAgIFByb21pc2UgdGVzdFdvcmtlclByb21pc2UoKTsKKworICAg
IHNlcmlhbGl6ZXI7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Rlc3RPYmouaWRsIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Rlc3RPYmouaWRsCmluZGV4IDIxMGQ1NWY4YTBiNWQ3ZDhkZmVmZWI2MGE0YmM5M2RmZWMy
YmU0Y2YuLjRlYjA3MmEwMmMxNGIzYmE1Y2VlZDQ2YTNjNGQ5MjZjZjQ3MTMxYzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKQEAgLTQx
MCw2ICs0MTAsOSBAQCBlbnVtIFRlc3RDb25maWRlbmNlIHsgImhpZ2giLCAia2luZGEtbG93IiB9
OwogICAgIHZvaWQgYXR0YWNoU2hhZG93Um9vdChUZXN0RGljdGlvbmFyeSBpbml0KTsKIAogICAg
IHN0cmluZ2lmaWVyIGF0dHJpYnV0ZSBVU1ZTdHJpbmcgc3RyaW5naWZpZXJBdHRyaWJ1dGU7CisK
KworICAgIHNlcmlhbGl6ZXIgPSB7cmVhZE9ubHlTdHJpbmdBdHRyLCBjcmVhdGUsIGVudW1BdHRy
LCBsb25nQXR0cn07CiB9OwogCiAvLyBUaGUgZm9sbG93aW5nIGNvbW1lbnQgc2hvdWxkIG5vdCBn
ZW5lcmF0ZSBhbnkgY29kZS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA5Yzk2ZTdjN2QwZmQ3Njc3ZGMxN2VmMTZhNDZkZjQ5
ZTVmNjU3MDU0Li42YTQzMzE4OGU4OGM5YmZkOTUzNGEzYjMyYjA5ZjJiOGQwM2Q2ZTAzIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTggQEAKKzIwMTYtMDktMTUgIEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4
QGlnYWxpYS5jb20+CisKKyAgICAgICAgQWRkIFdlYklETCBzcGVjaWFsIG9wZXJhdGlvbiBzdXBw
b3J0OiBzZXJpYWxpemVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTYyOTMKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAg
ICAgICBWZXJpZnkgdGhlIG5ldyBBUEkgb2YgdGhlIG9iamVjdHMgYW5kIGNoZWNrIHdoYXQgaGFw
cGVucyB3aGVuIHVzZXIKKyAgICAgICAgbW9kaWZpZXMgdGhlIHZhbHVlcyBhbmQgdHlwZXMgb2Yg
dGhlIGF0dHJpYnV0ZXMsIG9yIGFkZHMgYSBudWxsIHZhbHVlLgorCisgICAgICAgICogZmFzdC9t
ZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3Qv
bWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmh0bWw6CisgICAgICAgICogZmFzdC9tZWRpYXN0
cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3Qv
bWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmh0bWw6CisKIDIwMTYtMDktMTkgIFNl
cmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CiAKICAgICAgICAgW2Nzcy1n
cmlkXSBSZW1vdmUgdGhlIHgyIGNvbXB1dGF0aW9uIG9mIHJvdyBzaXplcyB3aXRoIGluZGVmaW5p
dGUgaGVpZ2h0cwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENJ
Y2VDYW5kaWRhdGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9S
VENJY2VDYW5kaWRhdGUtZXhwZWN0ZWQudHh0CmluZGV4IDNjOTAyOTgzNjU5Y2M3ZWUzODFmYTUx
ZDhjNDYyNWE0M2IzMDdmNDUuLmEyZGM3MWFmYmIwYmYwZmI3MmE1YTMxZWU4MWFhZmU1MmMzYmEz
ODUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlk
YXRlLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ0lj
ZUNhbmRpZGF0ZS1leHBlY3RlZC50eHQKQEAgLTcsNiArNywyMSBAQCBQQVNTIGNhbmRpZGF0ZSA9
IG5ldyBSVENJY2VDYW5kaWRhdGUoaW5pdGlhbGl6ZXIpOyBkaWQgbm90IHRocm93IGV4Y2VwdGlv
bi4KIFBBU1MgY2FuZGlkYXRlLmNhbmRpZGF0ZSBpcyAiZm9vIgogUEFTUyBjYW5kaWRhdGUuc2Rw
TWlkIGlzICJiYXIiCiBQQVNTIGNhbmRpZGF0ZS5zZHBNTGluZUluZGV4IGlzIDYKK1BBU1MgUlRD
SWNlQ2FuZGlkYXRlLnByb3RvdHlwZS50b0pTT04gaXMgZGVmaW5lZC4KK1BBU1MgT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihSVENJY2VDYW5kaWRhdGUucHJvdG90eXBlLCAidG9KU09O
IikuZW51bWVyYWJsZSBpcyB0cnVlCitQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoUlRDSWNlQ2FuZGlkYXRlLnByb3RvdHlwZSwgInRvSlNPTiIpLndyaXRhYmxlIGlzIHRydWUK
K1BBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihSVENJY2VDYW5kaWRhdGUucHJv
dG90eXBlLCAidG9KU09OIikuY29uZmlndXJhYmxlIGlzIHRydWUKK1BBU1MgUlRDSWNlQ2FuZGlk
YXRlLnByb3RvdHlwZS50b0pTT04ubGVuZ3RoIGlzIDAKK1BBU1MgUlRDSWNlQ2FuZGlkYXRlLnBy
b3RvdHlwZS50b0pTT04ubmFtZSBpcyAidG9KU09OIgorUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKGpzb25NYXAsICJjYW5kaWRhdGUiKS5lbnVtZXJhYmxlIGlzIHRydWUKK1BB
U1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihqc29uTWFwLCAiY2FuZGlkYXRlIiku
d3JpdGFibGUgaXMgdHJ1ZQorUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGpz
b25NYXAsICJjYW5kaWRhdGUiKS5jb25maWd1cmFibGUgaXMgdHJ1ZQorUEFTUyBjaGlsZENhbmRp
ZGF0ZS50b0pTT04oKTsgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQ2FuIG9ubHkgY2FsbCBS
VENJY2VDYW5kaWRhdGUudG9KU09OIG9uIGluc3RhbmNlcyBvZiBSVENJY2VDYW5kaWRhdGUuCitQ
QVNTIEpTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSkgaXMgIntcImNhbmRpZGF0ZVwi
OlwiZm9vXCIsXCJzZHBNaWRcIjpcImJhclwiLFwic2RwTUxpbmVJbmRleFwiOjZ9IgorUEFTUyBK
U09OLnN0cmluZ2lmeShjYW5kaWRhdGUudG9KU09OKCkpIGlzICJ7XCJjYW5kaWRhdGVcIjpcImZv
b1wiLFwic2RwTWlkXCI6XCJiYXJcIixcInNkcE1MaW5lSW5kZXhcIjo2fSIKK1BBU1MgSlNPTi5z
dHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNPTigpKSBpcyAie1wiY2FuZGlkYXRlXCI6XCJmb29cIixc
InNkcE1pZFwiOlwiYmFyXCIsXCJzZHBNTGluZUluZGV4XCI6Nn0iCitQQVNTIEpTT04uc3RyaW5n
aWZ5KGNhbmRpZGF0ZS50b0pTT04oKSkgaXMgIntcImNhbmRpZGF0ZVwiOlwiZm9vXCIsXCJzZHBN
aWRcIjpcImJhclwiLFwic2RwTUxpbmVJbmRleFwiOjZ9IgorUEFTUyBKU09OLnN0cmluZ2lmeShj
YW5kaWRhdGUudG9KU09OKCkpIGlzICJ7XCJjYW5kaWRhdGVcIjpcImZvb1wiLFwic2RwTWlkXCI6
XCJiYXJcIixcInNkcE1MaW5lSW5kZXhcIjo2fSIKIAogQXR0cmlidXRlcyBhcmUgcmVhZG9ubHkK
IGNhbmRpZGF0ZS5jYW5kaWRhdGUgPSAiZm9vLXVwZGF0ZWQiCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5odG1sIGIvTGF5b3V0VGVzdHMv
ZmFzdC9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaHRtbAppbmRleCBjNDAzMTU2NTU2OWUy
MzhiNmM0YzVhODlmOGE5YjEwNzkyNGEzN2FmLi41M2Y0OWNiNzJmMDkxYTQxM2U2NzU2OWI3YzMx
MzczMzZjNzBkOGM2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JU
Q0ljZUNhbmRpZGF0ZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRD
SWNlQ2FuZGlkYXRlLmh0bWwKQEAgLTEzLDYgKzEzLDMzIEBACiAgICAgICAgICAgICBzaG91bGRC
ZSgnY2FuZGlkYXRlLmNhbmRpZGF0ZScsICciZm9vIicpOwogICAgICAgICAgICAgc2hvdWxkQmUo
J2NhbmRpZGF0ZS5zZHBNaWQnLCAnImJhciInKTsKICAgICAgICAgICAgIHNob3VsZEJlKCdjYW5k
aWRhdGUuc2RwTUxpbmVJbmRleCcsICc2Jyk7CisgICAgICAgICAgICBzaG91bGRCZURlZmluZWQo
J1JUQ0ljZUNhbmRpZGF0ZS5wcm90b3R5cGUudG9KU09OJyk7CisgICAgICAgICAgICBzaG91bGRC
ZVRydWUoJ09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUlRDSWNlQ2FuZGlkYXRlLnBy
b3RvdHlwZSwgInRvSlNPTiIpLmVudW1lcmFibGUnKTsKKyAgICAgICAgICAgIHNob3VsZEJlVHJ1
ZSgnT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihSVENJY2VDYW5kaWRhdGUucHJvdG90
eXBlLCAidG9KU09OIikud3JpdGFibGUnKTsKKyAgICAgICAgICAgIHNob3VsZEJlVHJ1ZSgnT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihSVENJY2VDYW5kaWRhdGUucHJvdG90eXBlLCAi
dG9KU09OIikuY29uZmlndXJhYmxlJyk7CisgICAgICAgICAgICBzaG91bGRCZSgnUlRDSWNlQ2Fu
ZGlkYXRlLnByb3RvdHlwZS50b0pTT04ubGVuZ3RoJywgJzAnKTsKKyAgICAgICAgICAgIHNob3Vs
ZEJlKCdSVENJY2VDYW5kaWRhdGUucHJvdG90eXBlLnRvSlNPTi5uYW1lJywgJyJ0b0pTT04iJyk7
CisKKyAgICAgICAgICAgIHZhciBqc29uTWFwID0gY2FuZGlkYXRlLnRvSlNPTigpOworICAgICAg
ICAgICAgc2hvdWxkQmVUcnVlKCdPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGpzb25N
YXAsICJjYW5kaWRhdGUiKS5lbnVtZXJhYmxlJyk7CisgICAgICAgICAgICBzaG91bGRCZVRydWUo
J09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoanNvbk1hcCwgImNhbmRpZGF0ZSIpLndy
aXRhYmxlJyk7CisgICAgICAgICAgICBzaG91bGRCZVRydWUoJ09iamVjdC5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoanNvbk1hcCwgImNhbmRpZGF0ZSIpLmNvbmZpZ3VyYWJsZScpOworCisgICAg
ICAgICAgICB2YXIgY2hpbGRSVENJY2VDYW5kaWRhdGUgPSBmdW5jdGlvbigpIHt9OworICAgICAg
ICAgICAgY2hpbGRSVENJY2VDYW5kaWRhdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSVENJ
Y2VDYW5kaWRhdGUucHJvdG90eXBlKTsKKyAgICAgICAgICAgIHZhciBjaGlsZENhbmRpZGF0ZSA9
IG5ldyBjaGlsZFJUQ0ljZUNhbmRpZGF0ZSgpOworICAgICAgICAgICAgc2hvdWxkVGhyb3coJ2No
aWxkQ2FuZGlkYXRlLnRvSlNPTigpOycpOworCisgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9T
dHJpbmcoJ0pTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSknLCAneyJjYW5kaWRhdGUi
OiJmb28iLCJzZHBNaWQiOiJiYXIiLCJzZHBNTGluZUluZGV4Ijo2fScpOworICAgICAgICAgICAg
Y2FuZGlkYXRlLm5ld0F0dHJpYnV0ZSA9ICJuZXcgdmFsdWUiOworICAgICAgICAgICAgc2hvdWxk
QmVFcXVhbFRvU3RyaW5nKCdKU09OLnN0cmluZ2lmeShjYW5kaWRhdGUudG9KU09OKCkpJywgJ3si
Y2FuZGlkYXRlIjoiZm9vIiwic2RwTWlkIjoiYmFyIiwic2RwTUxpbmVJbmRleCI6Nn0nKTsKKyAg
ICAgICAgICAgIGNhbmRpZGF0ZS5zZHBNTGluZUluZGV4ID0gIm5vdCBhIG51bWJlciI7CisgICAg
ICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ0pTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50
b0pTT04oKSknLCAneyJjYW5kaWRhdGUiOiJmb28iLCJzZHBNaWQiOiJiYXIiLCJzZHBNTGluZUlu
ZGV4Ijo2fScpOworICAgICAgICAgICAgY2FuZGlkYXRlLnNkcE1pZCA9IDc7CisgICAgICAgICAg
ICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ0pTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04o
KSknLCAneyJjYW5kaWRhdGUiOiJmb28iLCJzZHBNaWQiOiJiYXIiLCJzZHBNTGluZUluZGV4Ijo2
fScpOworICAgICAgICAgICAgY2FuZGlkYXRlLnNkcE1pZCA9IG51bGw7CisgICAgICAgICAgICBz
aG91bGRCZUVxdWFsVG9TdHJpbmcoJ0pTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSkn
LCAneyJjYW5kaWRhdGUiOiJmb28iLCJzZHBNaWQiOiJiYXIiLCJzZHBNTGluZUluZGV4Ijo2fScp
OworCiAgICAgICAgICAgICBkZWJ1ZygiIik7CiAKICAgICAgICAgICAgIGRlYnVnKCJBdHRyaWJ1
dGVzIGFyZSByZWFkb25seSIpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0
cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFz
dC9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0CmluZGV4IDgx
YWUwMWE3ZjdmOWQ4MDM5OTU5OTk5M2Y4MzZhMmQ5NjE1MjNiYjEuLjU5ZDNiY2QxNzUwOWIyN2Rl
ODRkZjI4OGQ5M2NjYjI2ZGQ0NDNkNzAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvbWVk
aWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi1leHBlY3RlZC50eHQK
QEAgLTYsNiArNiw3IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFCiBQQVNTIHNlc3Npb25EZXNj
cmlwdGlvbiA9IG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24oaW5pdGlhbGl6ZXIpOyBkaWQgbm90
IHRocm93IGV4Y2VwdGlvbi4KIFBBU1Mgc2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUgaXMgIm9mZmVy
IgogUEFTUyBzZXNzaW9uRGVzY3JpcHRpb24uc2RwIGlzICJmb29iYXIiCitQQVNTIEpTT04uc3Ry
aW5naWZ5KHNlc3Npb25EZXNjcmlwdGlvbi50b0pTT04oKSkgaXMgIntcInR5cGVcIjpcIm9mZmVy
XCIsXCJzZHBcIjpcImZvb2JhclwifSIKICoqKiBBdHRyaWJ1dGVzIGFyZSByZWFkLW9ubHkuCiBQ
QVNTIHNlc3Npb25EZXNjcmlwdGlvbi50eXBlID0gJ2Fuc3dlcicgZGlkIG5vdCB0aHJvdyBleGNl
cHRpb24uCiBQQVNTIHNlc3Npb25EZXNjcmlwdGlvbi50eXBlIGlzICdvZmZlcicKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmh0
bWwgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5o
dG1sCmluZGV4IDhhMmU5MzNkMWM0YmQxZGQ0ZjNkZWIwMjdiZGU3YjA5OWYxMDdhYjEuLjgzNDNl
YjgyOGM2YjgwZTYzMTU5MDIwM2YyNDc1MDE5OWM2ZGU4YjcgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmh0bWwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24uaHRtbApAQCAt
MTQsNiArMTQsNyBAQAogICAgICAgICAgICAgc2hvdWxkTm90VGhyb3coInNlc3Npb25EZXNjcmlw
dGlvbiA9IG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24oaW5pdGlhbGl6ZXIpOyIpOwogICAgICAg
ICAgICAgc2hvdWxkQmUoJ3Nlc3Npb25EZXNjcmlwdGlvbi50eXBlJywgJyJvZmZlciInKTsKICAg
ICAgICAgICAgIHNob3VsZEJlKCdzZXNzaW9uRGVzY3JpcHRpb24uc2RwJywgJyJmb29iYXIiJyk7
CisgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ0pTT04uc3RyaW5naWZ5KHNlc3Np
b25EZXNjcmlwdGlvbi50b0pTT04oKSknLCAneyJ0eXBlIjoib2ZmZXIiLCJzZHAiOiJmb29iYXIi
fScpOwogCiAgICAgICAgICAgICBkZWJ1ZygiKioqIEF0dHJpYnV0ZXMgYXJlIHJlYWQtb25seS4i
KTsKICAgICAgICAgICAgIHNob3VsZE5vdFRocm93KCJzZXNzaW9uRGVzY3JpcHRpb24udHlwZSA9
ICdhbnN3ZXInIik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289932</attachid>
            <date>2016-09-27 03:59:46 -0700</date>
            <delta_ts>2016-09-28 00:46:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156293-20160927125647.patch</filename>
            <type>text/plain</type>
            <size>201355</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2NDE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWNmNjk0MzM5MWI1YzU5
NjRmMDk4ODNlOTkxYTY4MWZlYzVhNWRlOC4uNzM4MmYwOGQxMzZiYzMxYjk4MjJhNTQwMTMzOTJi
NDc1NWRhMDM5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc4IEBACisyMDE2LTA5LTI2ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIEFkZCBXZWJJREwg
c3BlY2lhbCBvcGVyYXRpb24gc3VwcG9ydDogc2VyaWFsaXplcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MjkzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgdGhlIHNlcmlhbGl6
ZXIgc3BlY2lhbCBvcGVyYXRpb24gZm9yIFdlYklETHMsCisgICAgICAgIGN1cnJlbnQgaW1wbGVt
ZW50YXRpb24gYWRkcyBzdXBwb3J0IGZvcjoKKyAgICAgICAgICAtIGp1c3QgdGhlIGtleXdvcmQ6
IHNlcmlhbGl6ZXI7IEl0IHdpbGwgcmV0dXJuIGFsbCB0aGUKKyAgICAgICAgICAgIGF0dHJpYnV0
ZXMgb2YgaW4gYW4gb2JqZWN0LgorICAgICAgICAgIC0gbWFwIG9mIGVudHJpZXMgd2l0aCB0aGUg
YXR0cmlidXRlczogc2VyaWFsaXplciA9IHthdHRyaWJ1dGUxLAorICAgICAgICAgICAgYXR0cmli
dXRlMiwgLi4ufQorCisgICAgICAgIEl0IGNyZWF0ZXMgYSB0b0pTT04gbWV0aG9kIHRoYXQgcmV0
dXJucyB0aGUgc2VyaWFsaXplZCB2YWx1ZQorICAgICAgICBjb252ZXJ0ZWQgaW50byBhbiBFQ01B
U2NyaXB0IHZhbHVlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBjaGVjayB0aGUKKyAgICAgICAgZGVm
aW5pdGlvbiBvZiB0aGUgb3BlcmF0aW9uOgorCisgICAgICAgIGh0dHA6Ly9oZXljYW0uZ2l0aHVi
LmlvL3dlYmlkbC8jaWRsLXNlcmlhbGl6ZXJzCisKKyAgICAgICAgV2UgaGF2ZSBtb2RpZmllZCBj
dXJyZW50IGNvZGUgdGhhdCBnZW5lcmF0ZXMgdGhlIGdldHRlciBmdW5jdGlvbgorICAgICAgICBm
b3IgYXR0cmlidXRlcyBpbiB0d28gcGFydHMgc28gdGhhdCB3ZSBjYW4gcmV1c2UgdGhlIHBhcnQK
KyAgICAgICAgZXh0cmFjdGluZyB0aGUgdmFsdWUgZm9yIHRoZSBzZXJpYWxpemVyLgorCisgICAg
ICAgIFVzZWQgdGhlIHN1cHBvcnQgdG8gYWRkIG5ldyBBUEkgZm9yIFJUQ0ljZUNhbmRpZGF0ZSBh
bmQKKyAgICAgICAgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLgorCisgICAgICAgIFVwZGF0ZWQgdGhl
IHRlc3RzIGV4cGVjdGF0aW9ucyBvZiB0aGUgYmluZGluZ3MuCisKKyAgICAgICAgVGVzdHM6IGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Tm9kZS5pZGwKKyAgICAgICAgICAgICAgIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAorICAgICAgICAgICAgICAgZmFzdC9tZWRpYXN0cmVh
bS9SVENJY2VDYW5kaWRhdGUuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9tZWRpYXN0cmVhbS9S
VENTZXNzaW9uRGVzY3JpcHRpb24uaHRtbAorCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVh
bS9SVENJY2VDYW5kaWRhdGUuaWRsOiBBZGRlZCB0aGUgc2VyaWFsaXplcgorICAgICAgICBvcGVy
YXRpb24uCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRp
b24uaWRsOiBBZGRlZCB0aGUKKyAgICAgICAgc2VyaWFsaXplciBvcGVyYXRpb24uCisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0
ZUltcGxlbWVudGF0aW9uKTogU3BsaXR0ZWQgdGhlIGNvZGUgb2YgdGhlIGF0dHJpYnV0ZQorICAg
ICAgICBnZXR0ZXIgaW4gdHdvIGZ1bmN0aW9ucywgb25lIGdldHRpbmcgdGhlIHZhbHVlIGFuZCB0
aGUgb3RoZXIKKyAgICAgICAgaGFuZGxpbmcgdGhlIGNhbGwgZnJvbSB0aGUgQVBJLiBUaGlzIHdh
eSB3ZSBjYW4gcmV1c2UgdGhlIGNvZGUgZm9yCisgICAgICAgIHRoZSBzZXJpYWxpemVyLiBBbHNv
IGFkZGVkIHRoZSBjYWxscyB0byB0aGUgc2VyaWFsaXplcgorICAgICAgICBjb2RlIGdlbmVyYXRv
ci4KKyAgICAgICAgKEdlbmVyYXRlU2VyaWFsaXplckZ1bmN0aW9uKTogQWRkZWQsIGdlbmVyYXRl
cyB0aGUgdG9KU09OIGZ1bmN0aW9uCisgICAgICAgIGFkZGluZyBhbGwgdGhlIHNlcmlhbGl6YWJs
ZS0+YXR0cmlidXRlcyB2YWx1ZSB0byBhbiBvYmplY3QgYXMKKyAgICAgICAgZGVmaW5lZCBpbiB0
aGUgc3BlYy4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbTogTW9kaWZp
ZWQgdGhlIHNlcmlhbGl6ZXIgcGFyc2VyCisgICAgICAgIHRoYXQgd2FzIHVudXNlZCB0byBzdXBw
b3J0IHRoZSBXZWJJREwgc3BlYyBwYXJ0cy4gQWRkZWQgYSBuZXcKKyAgICAgICAgZG9tU2VyaWFs
aXphYmxlIHR5cGUgdG8gc3RvcmUgdGhlIGxpc3Qgb2YgYXR0cmlidXRlcyBpbiB0aGUKKyAgICAg
ICAgcG9zc2libGUgbWFwLgorICAgICAgICAocGFyc2VTZXJpYWxpemVyKTogTW9kaWZpZWQgdGhl
IGZ1bmN0aW9uIHRvIGZvbGxvdyB0aGUKKyAgICAgICAgc2VtaWNvbG9uIHJ1bGUgaW4gdGhlIHNw
ZWMsIG5vdyB0aGUgc2VyaWFsaXplciBsaW5lIG11c3QgaGF2ZSBhCisgICAgICAgIHNlbWljb2xv
biBsaWtlIGFueSBvdGhlciBsaW5lLgorICAgICAgICAocGFyc2VTZXJpYWxpemVyUmVzdCk6IFRo
ZSBmdW5jdGlvbiBub3cgaGFzIHRvIGdldCB0aGUgYXR0cmlidXRlcworICAgICAgICBsaXN0IGZy
b20gdGhlIHBhdHRlcm4gcGFyc2luZyBmdW5jdGlvbiBhbmQgYWRkIHRoZW0gdG8gdGhlCisgICAg
ICAgIGRvbVNlcmlhbGl6YWJsZSBpdGVtLgorICAgICAgICAocGFyc2VTZXJpYWxpemF0aW9uUGF0
dGVybik6IE5vdyB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxpc3Qgb2YKKyAgICAgICAgYXR0
cmlidXRlcyBpbiB0aGUgc2VyaWFsaXphYmxlIG1hcCBvciBsaXN0IGlmIHdlIGhhdmUgb25lLgor
ICAgICAgICAocGFyc2VTZXJpYWxpemF0aW9uQXR0cmlidXRlcyk6IEFkZGVkLCB0aGlzIGZ1bmN0
aW9uIHJlcGxhY2VzIHRoZQorICAgICAgICBNYXAgYW5kIExpc3QgZnVuY3Rpb25zLCB0aGUgY3Vy
cmVudGx5IHN1cHBvcnRlZCBwYXJ0cyBhcmUgc2ltaWxhcgorICAgICAgICBmb3IgYm90aCBzaXR1
YXRpb25zLgorICAgICAgICAoYXBwbHlNZW1iZXJMaXN0KTogQWRkZWQgdGhlIHNlcmlhbGl6YWJs
ZSBpdGVtIHRvIHRoZSBpbnRlcmZhY2UKKyAgICAgICAgdmFyaWFibGUgYW5kIHBvcHVsYXRlIHRo
ZSBzZXJpYWxpemFibGUgaW4gY2FzZSB0aGVyZSBpcyBub3QgYQorICAgICAgICBkZWZpbmVkIG1h
cC4KKyAgICAgICAgKHBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm5NYXApOiBSZXBsYWNlZCB3aXRo
CisgICAgICAgIHBhcnNlU2VyaWFsaXphdGlvbkF0dHJpYnV0ZXMuCisgICAgICAgIChwYXJzZVNl
cmlhbGl6YXRpb25QYXR0ZXJuTGlzdCk6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcDogTW9kaWZpZWQgdGhlIGV4cGVjdGVkIHJlc3VsdC4K
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTik6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6IE1vZGlmaWVk
IHRoZSBleHBlY3RlZCByZXN1bHQuCisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblRvSlNPTik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RO
b2RlLmlkbDogQWRkZWQgdGhlIHNlcmlhbGl6ZXIgdGVzdC4KKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVGVzdE9iai5pZGw6IEFkZGVkIHNlcmlhbGl6ZXIgbWFwIHRlc3QuCisKIDIw
MTYtMDktMjYgIEpvb25naHVuIFBhcmsgIDxqaDcxOC5wYXJrQHNhbXN1bmcuY29tPgogCiAgICAg
ICAgIFtFRkxdIEZpeCBkZWJ1ZyBidWlsZCBicmVhayBzaW5jZSByMjA0MjA1LiBVbnJldmlld2Vk
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNh
bmRpZGF0ZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNh
bmRpZGF0ZS5pZGwKaW5kZXggMDQwNzgzZjdmYTBkNjdjNTZiYjcyMGQxNWViMjBiZjI0MzI1Yjg4
OC4uOGMyZDliZTg0NDg1MDU0YzE2YjUxOTMzNDNjYWRjNzY3NzAyOWY0MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaWRsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmlk
bApAQCAtMzksNSArMzksNyBAQAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgY2Fu
ZGlkYXRlOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmc/IHNkcE1pZDsKICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQ/IHNkcE1MaW5lSW5kZXg7CisKKyAgICBz
ZXJpYWxpemVyID0ge2NhbmRpZGF0ZSwgc2RwTWlkLCBzZHBNTGluZUluZGV4fTsKIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRl
c2NyaXB0aW9uLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU2Vz
c2lvbkRlc2NyaXB0aW9uLmlkbAppbmRleCA0NzU1YWRhMjUzMGU4ZjY1YTJhNmVlY2Q5YjdiNzBh
MzllZWE1YTFlLi43MzUwOTJiYzUzMDU4ZmVjZmM3OWVkNjk3MWU0ZDI5OTZhMTU0NWRjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNj
cmlwdGlvbi5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENT
ZXNzaW9uRGVzY3JpcHRpb24uaWRsCkBAIC0zOCw2ICszOCw4IEBACiBdIGludGVyZmFjZSBSVENT
ZXNzaW9uRGVzY3JpcHRpb24gewogICAgIFtTZXR0ZXJSYWlzZXNFeGNlcHRpb25dIHJlYWRvbmx5
IGF0dHJpYnV0ZSBSVENTZHBUeXBlIHR5cGU7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0
cmluZyBzZHA7CisKKyAgICBzZXJpYWxpemVyID0ge3R5cGUsIHNkcH07CiB9OwogCiBlbnVtIFJU
Q1NkcFR5cGUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySlMucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbQppbmRleCBmZWIxNWRlZWY0NjNjYWRkZmE3OThkZTMyMmJkNDJjZDExZjQ5
NTAwLi45NDkzMTQ1NTJhZGNkOWNlM2QyMWE3N2U0Yzk1YTQxYzQyODBkNDFjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQpAQCAt
MjI5Nyw2ICsyMjk3LDggQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBteSAkdmlz
aWJsZUludGVyZmFjZU5hbWUgPSAkY29kZUdlbmVyYXRvci0+R2V0VmlzaWJsZUludGVyZmFjZU5h
bWUoJGludGVyZmFjZSk7CiAgICAgbXkgJGV2ZW50VGFyZ2V0ID0gJGNvZGVHZW5lcmF0b3ItPklu
aGVyaXRzSW50ZXJmYWNlKCRpbnRlcmZhY2UsICJFdmVudFRhcmdldCIpICYmICRpbnRlcmZhY2Ut
Pm5hbWUgbmUgIkV2ZW50VGFyZ2V0IjsKICAgICBteSAkbmVlZHNWaXNpdENoaWxkcmVuID0gSW5z
dGFuY2VOZWVkc1Zpc2l0Q2hpbGRyZW4oJGludGVyZmFjZSk7CisgICAgbXkgJHNlcmlhbGl6ZXJG
dW5jdGlvbk5hbWUgPSAidG9KU09OIjsKKyAgICBteSAkc2VyaWFsaXplck5hdGl2ZUZ1bmN0aW9u
TmFtZSA9ICRjb2RlR2VuZXJhdG9yLT5XS19sY2ZpcnN0KCRjbGFzc05hbWUpIC4gIlByb3RvdHlw
ZUZ1bmN0aW9uIiAuICRjb2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRzZXJpYWxpemVyRnVuY3Rp
b25OYW1lKTsKIAogICAgIG15ICRuYW1lZEdldHRlckZ1bmN0aW9uID0gR2V0TmFtZWRHZXR0ZXJG
dW5jdGlvbigkaW50ZXJmYWNlKTsKICAgICBteSAkaW5kZXhlZEdldHRlckZ1bmN0aW9uID0gR2V0
SW5kZXhlZEdldHRlckZ1bmN0aW9uKCRpbnRlcmZhY2UpOwpAQCAtMjM4Nyw2ICsyMzg5LDggQEAg
c3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJc
biIpOwogICAgIH0KIAorICAgIHB1c2goQGltcGxDb250ZW50LCAiRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCAke3NlcmlhbGl6ZXJOYXRpdmVGdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSopO1xu
XG4iKSBpZiAkaW50ZXJmYWNlLT5zZXJpYWxpemFibGU7CisKICAgICBHZW5lcmF0ZVByb3RvdHlw
ZURlY2xhcmF0aW9uKFxAaW1wbENvbnRlbnQsICRjbGFzc05hbWUsICRpbnRlcmZhY2UpIGlmICFI
ZWFkZXJOZWVkc1Byb3RvdHlwZURlY2xhcmF0aW9uKCRpbnRlcmZhY2UpOwogCiAgICAgR2VuZXJh
dGVDb25zdHJ1Y3RvckRlY2xhcmF0aW9uKFxAaW1wbENvbnRlbnQsICRjbGFzc05hbWUsICRpbnRl
cmZhY2UpIGlmIE5lZWRzQ29uc3RydWN0b3JQcm9wZXJ0eSgkaW50ZXJmYWNlKTsKQEAgLTI1NDUs
NiArMjU0OSwxNSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogCiAgICAgbXkgJGp1c3RH
ZW5lcmF0ZVZhbHVlQXJyYXkgPSAhSXNET01HbG9iYWxPYmplY3QoJGludGVyZmFjZSk7CiAKKyAg
ICBpZiAoJGludGVyZmFjZS0+c2VyaWFsaXphYmxlKSB7CisgICAgICAgIHB1c2goQGhhc2hLZXlz
LCAkc2VyaWFsaXplckZ1bmN0aW9uTmFtZSk7CisgICAgICAgIHB1c2goQGhhc2hWYWx1ZTEsICRz
ZXJpYWxpemVyTmF0aXZlRnVuY3Rpb25OYW1lKTsKKyAgICAgICAgcHVzaChAaGFzaFZhbHVlMiwg
MCk7CisgICAgICAgIHB1c2goQGhhc2hTcGVjaWFscywgIkpTQzo6RnVuY3Rpb24iKTsKKworICAg
ICAgICAkaGFzaFNpemUrKzsKKyAgICB9CisKICAgICAkb2JqZWN0LT5HZW5lcmF0ZUhhc2hUYWJs
ZSgkaGFzaE5hbWUsICRoYXNoU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
QGhhc2hLZXlzLCBcQGhhc2hTcGVjaWFscywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcQGhhc2hWYWx1ZTEsIFxAaGFzaFZhbHVlMiwKQEAgLTI4MzksNiArMjg1MiwxMiBAQCBzdWIg
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgbXkgJGF0dHJpYnV0ZUNvbmRpdGlv
bmFsU3RyaW5nID0gJGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcoJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2lm
ICR7YXR0cmlidXRlQ29uZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkYXR0cmlidXRlQ29uZGl0aW9u
YWxTdHJpbmc7CiAKKyAgICAgICAgICAgIGlmICghJGF0dHJpYnV0ZS0+aXNTdGF0aWMgfHwgJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlID1+IC9Db25zdHJ1Y3RvciQvKSB7CisgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJzdGF0aWMgaW5saW5lIEpTVmFsdWUgJHtnZXRGdW5j
dGlvbk5hbWV9R2V0dGVyKEV4ZWNTdGF0ZSosICR7Y2xhc3NOYW1lfSosIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpO1xuXG4iKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJzdGF0aWMgaW5saW5lIEpTVmFsdWUgJHtnZXRGdW5jdGlvbk5h
bWV9R2V0dGVyKEV4ZWNTdGF0ZSopO1xuXG4iKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJFbmNvZGVkSlNWYWx1ZSAke2dldEZ1bmN0aW9uTmFtZX0o
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAKQEAgLTI4NjMs
NyArMjg4MiwyOCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVy
cm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgXCIkdmlzaWJsZUludGVyZmFjZU5hbWVcIiwgXCIkbmFt
ZVwiKTtcbiIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICB9XG4iKTsKKworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoJHtnZXRGdW5jdGlvbk5hbWV9R2V0dGVyKHN0
YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKSk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIn1cblxuIik7CisKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgInN0YXRpYyBpbmxpbmUgSlNWYWx1ZSAke2dldEZ1bmN0aW9uTmFtZX1HZXR0ZXIoRXhl
Y1N0YXRlKiBzdGF0ZSwgJHtjbGFzc05hbWV9KiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKVxuIik7CisKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIp
OworCisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFN
KHRoaXNPYmplY3QpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpO1xuIik7CisKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSgke2dldEZ1bmN0aW9uTmFtZX1HZXR0ZXIoc3RhdGUpKTtcbiIpOworICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKKworICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAic3RhdGljIGlubGluZSBKU1ZhbHVlICR7Z2V0RnVuY3Rpb25OYW1l
fUdldHRlcihFeGVjU3RhdGUqIHN0YXRlKVxuIik7CisKKyAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIntcbiIpOworCisKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7XG4iKTsKIAogICAgICAgICAg
ICAgbXkgQGFyZ3VtZW50cyA9ICgpOwogICAgICAgICAgICAgaWYgKCRnZXR0ZXJFeGNlcHRpb25z
ICYmICFIYXNDdXN0b21HZXR0ZXIoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJp
YnV0ZXMpKSB7CkBAIC0yODgxLDExICsyOTIxLDExIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0
aW9uCiAgICAgICAgICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJGcmFtZS5oIik7CiAg
ICAgICAgICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJTZXR0aW5ncy5oIik7CiAgICAg
ICAgICAgICAgICAgICAgIG15ICRlbmFibGVfZnVuY3Rpb24gPSBUb01ldGhvZE5hbWUoJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRW5hYmxlZEJ5U2V0dGluZyJ9
KSAuICJFbmFibGVkIjsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzLT53cmFwcGVkKCkuZnJhbWUoKSkpXG4iKTsKLSAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgU2V0dGluZ3MmIHNldHRpbmdzID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpLmZyYW1lKCktPnNldHRpbmdzKCk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgaWYgKFVOTElLRUxZKCF0aGlzT2JqZWN0LT53cmFwcGVkKCku
ZnJhbWUoKSkpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpO1xuIik7CisgICAgICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIFNldHRpbmdzJiBzZXR0aW5ncyA9IHRoaXNPYmplY3QtPndy
YXBwZWQoKS5mcmFtZSgpLT5zZXR0aW5ncygpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIGlmICghc2V0dGluZ3MuJGVuYWJsZV9mdW5jdGlvbigpKVxu
Iik7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CisgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTtcbiIp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIApAQCAtMjg5NywxMSArMjkzNywx
MSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICEkYXR0cmli
dXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJEb05vdENoZWNrU2VjdXJpdHki
fSAmJgogICAgICAgICAgICAgICAgICEkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJEb05vdENoZWNrU2VjdXJpdHlPbkdldHRlciJ9KSB7CiAgICAgICAgICAgICAg
ICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRB
bGxvd0FjY2Vzc1RvRE9NV2luZG93KHN0YXRlLCBjYXN0ZWRUaGlzLT53cmFwcGVkKCksIFRocm93
U2VjdXJpdHlFcnJvcikpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5k
b3coc3RhdGUsIHRoaXNPYmplY3QtPndyYXBwZWQoKSwgVGhyb3dTZWN1cml0eUVycm9yKSlcbiIp
OwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1Rv
RnJhbWUoc3RhdGUsIGNhc3RlZFRoaXMtPndyYXBwZWQoKS5mcmFtZSgpLCBUaHJvd1NlY3VyaXR5
RXJyb3IpKVxuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoc3RhdGUsIHRo
aXNPYmplY3QtPndyYXBwZWQoKS5mcmFtZSgpLCBUaHJvd1NlY3VyaXR5RXJyb3IpKVxuIik7CiAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CisgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
O1xuIik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICgkYXR0cmlidXRlLT5zaWdu
YXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOb25kZXRlcm1pbmlzdGljIn0pIHsKQEAgLTI5
MTgsMTEgKzI5NTgsMTEgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAg
ICAgICBteSAkZXhjZXB0aW9uQ29kZSA9ICRnZXR0ZXJFeGNlcHRpb25zV2l0aE1lc3NhZ2UgPyAi
ZWMuY29kZSIgOiAoJGdldHRlckV4Y2VwdGlvbnMgPyAiZWMiIDogIjAiKTsKICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3Qg
QXRvbWljU3RyaW5nPiBiaW5kaW5nTmFtZShcIiRpbnRlcmZhY2VOYW1lLiRuYW1lXCIsIEF0b21p
Y1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpO1xuIik7CiAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgaWYgKGN1cnNvci5pc0NhcHR1cmluZygpKSB7XG4iKTsKLSAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgJG1lbW9pemVkVHlwZSBt
ZW1vaXplZFJlc3VsdCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKS4kaW1wbEdldHRlckZ1bmN0aW9u
TmFtZSgiIC4gam9pbigiLCAiLCBAYXJndW1lbnRzKSAuICIpO1xuIik7CisgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgICRtZW1vaXplZFR5cGUgbWVtb2l6ZWRSZXN1
bHQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkuJGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUoIiAuIGpv
aW4oIiwgIiwgQGFyZ3VtZW50cykgLiAiKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgICAgICBjdXJzb3IuYXBwZW5kSW5wdXQ8TWVtb2l6ZWRET01SZXN1bHQ8
JG1lbW9pemVkVHlwZT4+KGJpbmRpbmdOYW1lLmdldCgpLnN0cmluZygpLCBtZW1vaXplZFJlc3Vs
dCwgJGV4Y2VwdGlvbkNvZGUpO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmli
dXRlLT5zaWduYXR1cmUsIDAsICRpbnRlcmZhY2UsICJtZW1vaXplZFJlc3VsdCIsICJjYXN0ZWRU
aGlzIikgLiAiO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIEpTVmFsdWUgcmVzdWx0ID0gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWdu
YXR1cmUsIDAsICRpbnRlcmZhY2UsICJtZW1vaXplZFJlc3VsdCIsICJ0aGlzT2JqZWN0IikgLiAi
O1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNldERP
TUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgZWMpO1xuIikgaWYgJGdldHRlckV4Y2VwdGlv
bnM7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICAgICByZXR1cm4gcmVzdWx0O1xuIik7CiAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgfVxuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlm
IChjdXJzb3IuaXNSZXBsYXlpbmcoKSkge1xuIik7CkBAIC0yOTMwLDYwICsyOTcwLDU5IEBAIHN1
YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgICAgIE1lbW9pemVkRE9NUmVzdWx0QmFzZSogaW5wdXQgPSBjdXJzb3IuZmV0Y2hJ
bnB1dDxNZW1vaXplZERPTVJlc3VsdEJhc2U+KCk7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAgICAgaWYgKGlucHV0ICYmIGlucHV0LT5jb252ZXJ0VG88JG1l
bW9pemVkVHlwZT4obWVtb2l6ZWRSZXN1bHQpKSB7XG4iKTsKICAgICAgICAgICAgICAgICAjIEZJ
WE1FOiB0aGUgZ2VuZXJhdGVkIGNvZGUgc2hvdWxkIHJlcG9ydCBhbiBlcnJvciBpZiBhbiBpbnB1
dCBjYW5ub3QgYmUgZmV0Y2hlZCBvciBjb252ZXJ0ZWQuCi0gICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9ICIgLiBOYXRpdmVUb0pT
VmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNlLCAibWVtb2l6ZWRSZXN1
bHQiLCAiY2FzdGVkVGhpcyIpIC4gIjtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVl
KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgIm1lbW9pemVkUmVzdWx0Iiwg
InRoaXNPYmplY3QiKSAuICI7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgaW5wdXQt
PmV4Y2VwdGlvbkNvZGUoKSk7XG4iKSBpZiAkZ2V0dGVyRXhjZXB0aW9uczsKLSAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICAgICB9XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICB9XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNlbmRp
ZlxuIik7CiAgICAgICAgICAgICB9ICMgYXR0cmlidXRlIE5vbmRldGVybWluaXN0aWMKIAogICAg
ICAgICAgICAgaWYgKEhhc0N1c3RvbUdldHRlcigkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVu
ZGVkQXR0cmlidXRlcykpIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPiRpbXBsR2V0dGVyRnVuY3Rpb25O
YW1lKCpzdGF0ZSkpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgcmV0dXJuIHRoaXNPYmplY3QtPiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCpzdGF0ZSk7XG4i
KTsKICAgICAgICAgICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkNoZWNrU2VjdXJpdHlGb3JOb2RlIn0pIHsKICAgICAgICAgICAgICAgICAk
aW1wbEluY2x1ZGVzeyJKU0RPTUJpbmRpbmcuaCJ9ID0gMTsKLSAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpO1xu
Iik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShzdGF0ZSwgaW1wbC4iIC4gJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLT5uYW1lIC4gIigpKSA/ICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNlLCAiaW1wbC4kaW1wbEdldHRlckZ1bmN0aW9u
TmFtZSgpIiwgImNhc3RlZFRoaXMiKSAuICIgOiBqc051bGwoKSk7XG4iKTsKKyAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3Jh
cHBlZCgpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0
dXJuIHNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKHN0YXRlLCBpbXBsLiIgLiAkYXR0cmlidXRlLT5z
aWduYXR1cmUtPm5hbWUgLiAiKCkpID8gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5z
aWduYXR1cmUsIDAsICRpbnRlcmZhY2UsICJpbXBsLiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCki
LCAidGhpc09iamVjdCIpIC4gIiA6IGpzTnVsbCgpO1xuIik7CiAgICAgICAgICAgICB9IGVsc2lm
ICgkdHlwZSBlcSAiRXZlbnRIYW5kbGVyIikgewogICAgICAgICAgICAgICAgICRpbXBsSW5jbHVk
ZXN7IkV2ZW50TmFtZXMuaCJ9ID0gMTsKICAgICAgICAgICAgICAgICBteSAkZ2V0dGVyID0gJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiV2luZG93RXZlbnRIYW5k
bGVyIn0gPyAid2luZG93RXZlbnRIYW5kbGVyQXR0cmlidXRlIgogICAgICAgICAgICAgICAgICAg
ICA6ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkRvY3VtZW50
RXZlbnRIYW5kbGVyIn0gPyAiZG9jdW1lbnRFdmVudEhhbmRsZXJBdHRyaWJ1dGUiCiAgICAgICAg
ICAgICAgICAgICAgIDogImV2ZW50SGFuZGxlckF0dHJpYnV0ZSI7CiAgICAgICAgICAgICAgICAg
bXkgJGV2ZW50TmFtZSA9IEV2ZW50SGFuZGxlckF0dHJpYnV0ZUV2ZW50TmFtZSgkYXR0cmlidXRl
KTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBVTlVTRURfUEFSQU0o
c3RhdGUpO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSgkZ2V0dGVyKGNhc3RlZFRoaXMtPndyYXBwZWQoKSwgJGV2ZW50
TmFtZSkpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0
dXJuICRnZXR0ZXIodGhpc09iamVjdC0+d3JhcHBlZCgpLCAkZXZlbnROYW1lKTtcbiIpOwogICAg
ICAgICAgICAgfSBlbHNpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlID1+IC9Db25zdHJ1
Y3RvciQvKSB7CiAgICAgICAgICAgICAgICAgbXkgJGNvbnN0cnVjdG9yVHlwZSA9ICRhdHRyaWJ1
dGUtPnNpZ25hdHVyZS0+dHlwZTsKICAgICAgICAgICAgICAgICAkY29uc3RydWN0b3JUeXBlID1+
IHMvQ29uc3RydWN0b3IkLy87Ci0gICAgICAgICAgICAgICAgIyBXaGVuIENvbnN0cnVjdG9yIGF0
dHJpYnV0ZSBpcyB1c2VkIGJ5IERPTVdpbmRvdy5pZGwsIGl0J3MgY29ycmVjdCB0byBwYXNzIGNh
c3RlZFRoaXMgYXMgdGhlIGdsb2JhbCBvYmplY3QKLSAgICAgICAgICAgICAgICAjIFdoZW4gSlNE
T01XcmFwcGVycyBoYXZlIGEgYmFjay1wb2ludGVyIHRvIHRoZSBnbG9iYWxPYmplY3Qgd2UgY2Fu
IHBhc3MgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkKKyAgICAgICAgICAgICAgICAjIFdoZW4g
Q29uc3RydWN0b3IgYXR0cmlidXRlIGlzIHVzZWQgYnkgRE9NV2luZG93LmlkbCwgaXQncyBjb3Jy
ZWN0IHRvIHBhc3MgdGhpc09iamVjdCBhcyB0aGUgZ2xvYmFsIG9iamVjdAorICAgICAgICAgICAg
ICAgICMgV2hlbiBKU0RPTVdyYXBwZXJzIGhhdmUgYSBiYWNrLXBvaW50ZXIgdG8gdGhlIGdsb2Jh
bE9iamVjdCB3ZSBjYW4gcGFzcyB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKQogICAgICAgICAg
ICAgICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IikgewogICAgICAgICAgICAg
ICAgICAgICBteSAkbmFtZWQgPSAoJGNvbnN0cnVjdG9yVHlwZSA9fiAvTmFtZWQkLykgPyAiTmFt
ZWQiIDogIiI7CiAgICAgICAgICAgICAgICAgICAgICRjb25zdHJ1Y3RvclR5cGUgPX4gcy9OYW1l
ZCQvLzsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKUyIgLiAkY29uc3RydWN0b3JUeXBlIC4gIjo6Z2V0JHtuYW1lZH1D
b25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgY2FzdGVkVGhpcykpO1xuIik7CisgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBKUyIgLiAkY29uc3RydWN0b3JU
eXBlIC4gIjo6Z2V0JHtuYW1lZH1Db25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgdGhpc09iamVjdCk7
XG4iKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBBZGRU
b0ltcGxJbmNsdWRlcygiSlMiIC4gJGNvbnN0cnVjdG9yVHlwZSAuICIuaCIsICRhdHRyaWJ1dGUt
PnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbmRpdGlvbmFsIn0pOwotICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTIiAuICRjb25zdHJ1Y3RvclR5cGUgLiAiOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0o
KSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCkpKTtcbiIpOworICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlMiIC4gJGNvbnN0cnVjdG9yVHlwZSAu
ICI6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3Qo
KSk7XG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2lmICghJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiR2V0dGVyUmFpc2VzRXhjZXB0
aW9uIn0gJiYgISRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikdl
dHRlclJhaXNlc0V4Y2VwdGlvbldpdGhNZXNzYWdlIn0pIHsKICAgICAgICAgICAgICAgICBteSAk
Y2FjaGVJbmRleCA9IDA7CiAgICAgICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhY2hlZEF0dHJpYnV0ZSJ9KSB7CiAgICAgICAgICAg
ICAgICAgICAgICRjYWNoZUluZGV4ID0gJGN1cnJlbnRDYWNoZWRBdHRyaWJ1dGU7CiAgICAgICAg
ICAgICAgICAgICAgICRjdXJyZW50Q2FjaGVkQXR0cmlidXRlKys7Ci0gICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChKU1ZhbHVlIGNhY2hlZFZhbHVlID0gY2Fz
dGVkVGhpcy0+bV8iIC4gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lIC4gIi5nZXQoKSlcbiIp
OwotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShjYWNoZWRWYWx1ZSk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUgPSB0aGlzT2Jq
ZWN0LT5tXyIgLiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUgLiAiLmdldCgpKVxuIik7Cisg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gY2Fj
aGVkVmFsdWU7XG4iKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBteSBA
Y2FsbFdpdGhBcmdzID0gR2VuZXJhdGVDYWxsV2l0aCgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsV2l0aCJ9LCBcQGltcGxDb250ZW50LCAiSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpIik7CisgICAgICAgICAgICAgICAgbXkgQGNhbGxXaXRoQXJn
cyA9IEdlbmVyYXRlQ2FsbFdpdGgoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiQ2FsbFdpdGgifSwgXEBpbXBsQ29udGVudCwgImpzVW5kZWZpbmVkKCkiKTsKIAog
ICAgICAgICAgICAgICAgIGlmICgkc3ZnTGlzdFByb3BlcnR5VHlwZSkgewotICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHJlc3VsdCA9ICAiIC4gTmF0
aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgImNhc3Rl
ZFRoaXMtPndyYXBwZWQoKS4kaW1wbEdldHRlckZ1bmN0aW9uTmFtZSgiIC4gKGpvaW4gIiwgIiwg
QGNhbGxXaXRoQXJncykgLiAiKSIsICJjYXN0ZWRUaGlzIikgLiAiO1xuIik7CisgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgcmVzdWx0ID0gICIgLiBO
YXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwLCAkaW50ZXJmYWNlLCAidGhp
c09iamVjdC0+d3JhcHBlZCgpLiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCIgLiAoam9pbiAiLCAi
LCBAY2FsbFdpdGhBcmdzKSAuICIpIiwgInRoaXNPYmplY3QiKSAuICI7XG4iKTsKICAgICAgICAg
ICAgICAgICB9IGVsc2lmICgkc3ZnUHJvcGVydHlPckxpc3RQcm9wZXJ0eVR5cGUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHN2Z1Byb3BlcnR5T3JMaXN0
UHJvcGVydHlUeXBlJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpLnByb3BlcnR5UmVmZXJl
bmNlKCk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
JHN2Z1Byb3BlcnR5T3JMaXN0UHJvcGVydHlUeXBlJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBl
ZCgpLnByb3BlcnR5UmVmZXJlbmNlKCk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCRz
dmdQcm9wZXJ0eU9yTGlzdFByb3BlcnR5VHlwZSBlcSAiZmxvYXQiKSB7ICMgU3BlY2lhbCBjYXNl
IGZvciBKU1NWR051bWJlcgotICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgSlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUt
PnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgImltcGwiLCAiY2FzdGVkVGhpcyIpIC4gIjtcbiIp
OworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1
ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwg
JGludGVyZmFjZSwgImltcGwiLCAidGhpc09iamVjdCIpIC4gIjtcbiIpOwogICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgSlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUt
PnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgImltcGwuJGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUo
IiAuIChqb2luICIsICIsIEBjYWxsV2l0aEFyZ3MpIC4gIikiLCAiY2FzdGVkVGhpcyIpIC4gIjtc
biIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNW
YWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwg
MCwgJGludGVyZmFjZSwgImltcGwuJGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUoIiAuIChqb2luICIs
ICIsIEBjYWxsV2l0aEFyZ3MpIC4gIikiLCAidGhpc09iamVjdCIpIC4gIjtcbiIpOwogCiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMzAwMCw0MCAr
MzAzOSwzOCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgICAgICAgICAgdW5zaGlmdChAYXJndW1lbnRzLCBAY2FsbFdpdGhB
cmdzKTsKLSAgICAgICAgICAgICAgICAgICAgbXkgJGpzVHlwZSA9IE5hdGl2ZVRvSlNWYWx1ZSgk
YXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRlcmZhY2UsICIke2Z1bmN0aW9uTmFtZX0oIiAu
IGpvaW4oIiwgIiwgQGFyZ3VtZW50cykgLiAiKSIsICJjYXN0ZWRUaGlzIik7Ci0gICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7XG4iKSBpZiAhJGF0dHJpYnV0ZS0+aXNTdGF0aWM7CisgICAgICAgICAgICAg
ICAgICAgIG15ICRqc1R5cGUgPSBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJl
LCAwLCAkaW50ZXJmYWNlLCAiJHtmdW5jdGlvbk5hbWV9KCIgLiBqb2luKCIsICIsIEBhcmd1bWVu
dHMpIC4gIikiLCAidGhpc09iamVjdCIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpO1xuIikgaWYg
ISRhdHRyaWJ1dGUtPmlzU3RhdGljOwogICAgICAgICAgICAgICAgICAgICBpZiAoJGNvZGVHZW5l
cmF0b3ItPklzU1ZHQW5pbWF0ZWRUeXBlKCR0eXBlKSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byBvYmogPSAkanNUeXBlO1xuIik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHJlc3Vs
dCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBvYmouZ2V0KCkpO1xu
Iik7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBvYmou
Z2V0KCkpO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHJlc3VsdCA9ICRqc1R5
cGU7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGNhc3RlZFRoaXMtPm1fIiAuICRh
dHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSAuICIuc2V0KHN0YXRlLT52bSgpLCBjYXN0ZWRUaGlz
LCByZXN1bHQpO1xuIikgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkNhY2hlZEF0dHJpYnV0ZSJ9KTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7XG4iKTsKKyAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB0aGlzT2JqZWN0LT5tXyIgLiAkYXR0cmli
dXRlLT5zaWduYXR1cmUtPm5hbWUgLiAiLnNldChzdGF0ZS0+dm0oKSwgdGhpc09iamVjdCwgcmVz
dWx0KTtcbiIpIGlmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJDYWNoZWRBdHRyaWJ1dGUifSk7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgcmV0dXJuIHJlc3VsdDtcbiIpOwogCiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIHVuc2hpZnQoQGFyZ3VtZW50cywgR2VuZXJhdGVDYWxsV2l0aCgkYXR0cmlidXRl
LT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsV2l0aCJ9LCBcQGltcGxDb250
ZW50LCAiSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpIikpOworICAgICAgICAgICAgICAg
IHVuc2hpZnQoQGFyZ3VtZW50cywgR2VuZXJhdGVDYWxsV2l0aCgkYXR0cmlidXRlLT5zaWduYXR1
cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsV2l0aCJ9LCBcQGltcGxDb250ZW50LCAianNV
bmRlZmluZWQoKSIpKTsKIAogICAgICAgICAgICAgICAgIGlmICgkc3ZnUHJvcGVydHlPckxpc3RQ
cm9wZXJ0eVR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgJHN2Z1Byb3BlcnR5T3JMaXN0UHJvcGVydHlUeXBlIGltcGwoKmNhc3RlZFRoaXMtPndyYXBw
ZWQoKSk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
SlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZSwgMCwgJGludGVyZmFjZSwgImltcGwuJGltcGxHZXR0ZXJGdW5jdGlvbk5hbWUoIiAuIGpvaW4o
IiwgIiwgQGFyZ3VtZW50cykgLiAiKSIsICJjYXN0ZWRUaGlzIikgLiAiO1xuIik7CisgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRzdmdQcm9wZXJ0eU9yTGlzdFBy
b3BlcnR5VHlwZSBpbXBsKCp0aGlzT2JqZWN0LT53cmFwcGVkKCkpO1xuIik7CisgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgcmVzdWx0ID0gIiAuIE5h
dGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsIDAsICRpbnRlcmZhY2UsICJpbXBs
LiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCIgLiBqb2luKCIsICIsIEBhcmd1bWVudHMpIC4gIiki
LCAidGhpc09iamVjdCIpIC4gIjtcbiIpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgSlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1
dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgImltcGwuJGltcGxHZXR0ZXJGdW5jdGlvbk5h
bWUoIiAuIGpvaW4oIiwgIiwgQGFyZ3VtZW50cykgLiAiKSIsICJjYXN0ZWRUaGlzIikgLiAiO1xu
Iik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSByZXN1bHQgPSAiIC4gTmF0aXZlVG9KU1ZhbHVl
KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgMCwgJGludGVyZmFjZSwgImltcGwuJGltcGxHZXR0ZXJG
dW5jdGlvbk5hbWUoIiAuIGpvaW4oIiwgIiwgQGFyZ3VtZW50cykgLiAiKSIsICJ0aGlzT2JqZWN0
IikgLiAiO1xuIik7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCBlYyk7
XG4iKTsKIAotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIHJldHVybiByZXN1bHQ7XG4iKTsKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogCi0gICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiNlbmRpZlxuIikgaWYgJGF0dHJpYnV0ZUNvbmRpdGlvbmFsU3RyaW5nOwot
Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIik7CisgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiNlbmRpZlxuXG4iKSBpZiAkYXR0cmlidXRlQ29uZGl0aW9uYWxTdHJp
bmc7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoTmVlZHNDb25zdHJ1Y3RvclByb3BlcnR5KCRp
bnRlcmZhY2UpKSB7CkBAIC0zNTMzLDYgKzM1NzAsOCBAQCBFTkQKIAogICAgIH0KIAorICAgIEdl
bmVyYXRlU2VyaWFsaXplckZ1bmN0aW9uKCRpbnRlcmZhY2UsICRpbnRlcmZhY2VOYW1lLCAkY2xh
c3NOYW1lLCAkc2VyaWFsaXplckZ1bmN0aW9uTmFtZSwgJHNlcmlhbGl6ZXJOYXRpdmVGdW5jdGlv
bk5hbWUpIGlmICRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZTsKKwogICAgIGlmICgkaW50ZXJmYWNl
LT5pdGVyYWJsZSkgewogICAgICAgICBHZW5lcmF0ZUltcGxlbWVudGF0aW9uSXRlcmFibGVGdW5j
dGlvbnMoJGludGVyZmFjZSk7CiAgICAgfQpAQCAtMzc1OCw2ICszNzk3LDM3IEBAIEVORAogICAg
IHB1c2goQGltcGxDb250ZW50LCAiXG4jZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0cmluZ31cbiIp
IGlmICRjb25kaXRpb25hbFN0cmluZzsKIH0KIAorc3ViIEdlbmVyYXRlU2VyaWFsaXplckZ1bmN0
aW9uCit7CisgICAgbXkgKCRpbnRlcmZhY2UsICRpbnRlcmZhY2VOYW1lLCAkY2xhc3NOYW1lLCAk
c2VyaWFsaXplckZ1bmN0aW9uTmFtZSwgJHNlcmlhbGl6ZXJOYXRpdmVGdW5jdGlvbk5hbWUpID0g
QF87CisKKyAgICBBZGRUb0ltcGxJbmNsdWRlcygiT2JqZWN0Q29uc3RydWN0b3IuaCIpOworICAg
IHB1c2goQGltcGxDb250ZW50LCAiRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAke3Nlcmlh
bGl6ZXJOYXRpdmVGdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogc3RhdGUpXG4iKTsKKyAgICBwdXNo
KEBpbXBsQ29udGVudCwgIntcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VS
VChzdGF0ZSk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTJGludGVyZmFjZU5hbWUqPihzdGF0ZS0+dGhpc1ZhbHVlKCkp
O1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpe1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCBcIiRp
bnRlcmZhY2VOYW1lXCIsIFwiJHNlcmlhbGl6ZXJGdW5jdGlvbk5hbWVcIik7XG4iKTsKKyAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICR7Y2xhc3NOYW1lfTo6aW5m
bygpKTtcblxuIikgdW5sZXNzICRpbnRlcmZhY2VOYW1lIGVxICJFdmVudFRhcmdldCI7CisgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmpl
Y3Qoc3RhdGUpO1xuIik7CisgICAgZm9yZWFjaCBteSAkYXR0cmlidXRlIChAeyRpbnRlcmZhY2Ut
PmF0dHJpYnV0ZXN9KSB7CisgICAgICAgIG15ICRuYW1lID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJl
LT5uYW1lOworICAgICAgICBpZiAoZ3JlcCAkXyBlcSAkbmFtZSwgQHskaW50ZXJmYWNlLT5zZXJp
YWxpemFibGUtPmF0dHJpYnV0ZXN9KSB7CisgICAgICAgICAgICBteSAkZ2V0RnVuY3Rpb25OYW1l
ID0gR2V0QXR0cmlidXRlR2V0dGVyTmFtZSgkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkYXR0cmli
dXRlKTsKKyAgICAgICAgICAgIGlmICghJGF0dHJpYnV0ZS0+aXNTdGF0aWMgfHwgJGF0dHJpYnV0
ZS0+c2lnbmF0dXJlLT50eXBlID1+IC9Db25zdHJ1Y3RvciQvKSB7CisgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCBcIiR7bmFtZX1cIiksICR7Z2V0RnVuY3Rpb25OYW1lfUdldHRlcihz
dGF0ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSkpO1xuIik7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgXCIke25hbWV9XCIpLCAke2dldEZ1
bmN0aW9uTmFtZX1HZXR0ZXIoc3RhdGUpKTtcbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKK30KKwog
c3ViIEdlbmVyYXRlRnVuY3Rpb25DYXN0ZWRUaGlzCiB7CiAgICAgbXkgKCRpbnRlcmZhY2UsICRj
bGFzc05hbWUsICRmdW5jdGlvbiwgJHNob3VsZFJlamVjdFByb21pc2UpID0gQF87CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbSBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtCmluZGV4IDBkY2M0Y2UyMDYw
ZmViZmE5NmRiZDBmNTRjYTI4NDg2NTJlMjBmNTIuLjY3NzRjNTEwOTU1NmY2YWNmZTM3MDM2MzEw
ZWM1Y2JlMTk1ZTFjNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvSURMUGFyc2VyLnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURM
UGFyc2VyLnBtCkBAIC02MCw2ICs2MCw3IEBAIHN0cnVjdCggZG9tSW50ZXJmYWNlID0+IHsKICAg
ICBpc0NhbGxiYWNrID0+ICckJywgIyBVc2VkIGZvciBjYWxsYmFjayBpbnRlcmZhY2VzCiAgICAg
aXNQYXJ0aWFsID0+ICckJywgIyBVc2VkIGZvciBwYXJ0aWFsIGludGVyZmFjZXMKICAgICBpdGVy
YWJsZSA9PiAnJCcsICMgVXNlZCBmb3IgaXRlcmFibGUgaW50ZXJmYWNlcworICAgIHNlcmlhbGl6
YWJsZSA9PiAnJCcsICMgVXNlZCBmb3Igc2VyaWFsaXphYmxlIGludGVyZmFjZXMKIH0pOwogCiAj
IFVzZWQgdG8gcmVwcmVzZW50IGRvbUludGVyZmFjZSBjb250ZW50cyAobmFtZSBvZiBtZXRob2Qs
IHNpZ25hdHVyZSkKQEAgLTM3NSw2ICszNzYsMTAgQEAgbXkgJG5leHRBdHRyaWJ1dGVPck9wZXJh
dGlvblJlc3RfMSA9ICdeKFwofEJ5dGVTdHJpbmd8RE9NU3RyaW5nfFVTVlN0cmluZ3xEYXRlfGEK
IG15ICRuZXh0VW5zaWduZWRJbnRlZ2VyVHlwZV8xID0gJ14obG9uZ3xzaG9ydCkkJzsKIG15ICRu
ZXh0RGVmYXVsdFZhbHVlXzEgPSAnXigtfEluZmluaXR5fE5hTnxmYWxzZXxudWxsfHRydWUpJCc7
CiAKKyMgVXNlZCB0byByZXByZXNlbnQgc2VyaWFsaXphYmxlIGludGVyZmFjZQorc3RydWN0KCBk
b21TZXJpYWxpemFibGUgPT4geworICAgIGF0dHJpYnV0ZXMgPT4gJ0AnLCAjIExpc3Qgb2YgYXR0
cmlidXRlcyB0byBzZXJpYWxpemUKK30pOwogCiBzdWIgcGFyc2VEZWZpbml0aW9ucwogewpAQCAt
MTA1Niw3ICsxMDYxLDE2IEBAIHN1YiBwYXJzZVNlcmlhbGl6ZXIKICAgICBteSAkbmV4dCA9ICRz
ZWxmLT5uZXh0VG9rZW4oKTsKICAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgInNlcmlhbGl6ZXIi
KSB7CiAgICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAi
c2VyaWFsaXplciIsIF9fTElORV9fKTsKLSAgICAgICAgcmV0dXJuICRzZWxmLT5wYXJzZVNlcmlh
bGl6ZXJSZXN0KCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOworICAgICAgICBteSAkbmV4dCA9ICRz
ZWxmLT5uZXh0VG9rZW4oKTsKKyAgICAgICAgbXkgJG5ld0RhdGFOb2RlOworICAgICAgICBpZiAo
JG5leHQtPnZhbHVlKCkgbmUgIjsiKSB7CisgICAgICAgICAgICAkbmV3RGF0YU5vZGUgPSAkc2Vs
Zi0+cGFyc2VTZXJpYWxpemVyUmVzdCgkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKKyAgICAgICAg
ICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tlbigpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgJG5ld0RhdGFOb2RlID0gZG9tU2VyaWFsaXphYmxlLT5uZXcoKTsKKyAgICAgICAg
fQorICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIjsi
LCBfX0xJTkVfXyk7CisgICAgICAgIHJldHVybiAkbmV3RGF0YU5vZGU7CiAgICAgfQogICAgICRz
ZWxmLT5hc3NlcnRVbmV4cGVjdGVkVG9rZW4oJG5leHQtPnZhbHVlKCksIF9fTElORV9fKTsKIH0K
QEAgLTEwNjksNyArMTA4MywxMCBAQCBzdWIgcGFyc2VTZXJpYWxpemVyUmVzdAogICAgIG15ICRu
ZXh0ID0gJHNlbGYtPm5leHRUb2tlbigpOwogICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAiPSIp
IHsKICAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICI9
IiwgX19MSU5FX18pOwotICAgICAgICByZXR1cm4gJHNlbGYtPnBhcnNlU2VyaWFsaXphdGlvblBh
dHRlcm4oJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7CisgICAgICAgIG15ICRhdHRyaWJ1dGVzID0g
JHNlbGYtPnBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm4oKTsKKyAgICAgICAgbXkgJG5ld0RhdGFO
b2RlID0gZG9tU2VyaWFsaXphYmxlLT5uZXcoKTsKKyAgICAgICAgJG5ld0RhdGFOb2RlLT5hdHRy
aWJ1dGVzKCRhdHRyaWJ1dGVzKTsKKyAgICAgICAgcmV0dXJuICRuZXdEYXRhTm9kZTsKICAgICB9
CiAgICAgaWYgKCRuZXh0LT50eXBlKCkgPT0gSWRlbnRpZmllclRva2VuIHx8ICRuZXh0LT52YWx1
ZSgpIGVxICIoIikgewogICAgICAgICByZXR1cm4gJHNlbGYtPnBhcnNlT3BlcmF0aW9uUmVzdCgk
ZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKQEAgLTEwNzksNTkgKzEwOTYsNDUgQEAgc3ViIHBhcnNl
U2VyaWFsaXplclJlc3QKIHN1YiBwYXJzZVNlcmlhbGl6YXRpb25QYXR0ZXJuCiB7CiAgICAgbXkg
JHNlbGYgPSBzaGlmdDsKLSAgICBteSAkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0ID0gc2hpZnQ7CiAK
ICAgICBteSAkbmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsKICAgICBpZiAoJG5leHQtPnZhbHVl
KCkgZXEgInsiKSB7CiAgICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRU
b2tlbigpLCAieyIsIF9fTElORV9fKTsKLSAgICAgICAgJHNlbGYtPnBhcnNlU2VyaWFsaXphdGlv
blBhdHRlcm5NYXAoKTsKKyAgICAgICAgbXkgJGF0dHJpYnV0ZXMgPSAkc2VsZi0+cGFyc2VTZXJp
YWxpemF0aW9uQXR0cmlidXRlcygpOwogICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgk
c2VsZi0+Z2V0VG9rZW4oKSwgIn0iLCBfX0xJTkVfXyk7Ci0gICAgICAgIHJldHVybjsKKyAgICAg
ICAgcmV0dXJuIFxAeyRhdHRyaWJ1dGVzfTsKICAgICB9CiAgICAgaWYgKCRuZXh0LT52YWx1ZSgp
IGVxICJbIikgewotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9r
ZW4oKSwgIlsiLCBfX0xJTkVfXyk7Ci0gICAgICAgICRzZWxmLT5wYXJzZVNlcmlhbGl6YXRpb25Q
YXR0ZXJuTGlzdCgpOwotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0
VG9rZW4oKSwgIl0iLCBfX0xJTkVfXyk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgZGllICJT
ZXJpYWxpemF0aW9uIG9mIGxpc3RzIHBhdHRlcm4gaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQu
IjsKICAgICB9CiAgICAgaWYgKCRuZXh0LT50eXBlKCkgPT0gSWRlbnRpZmllclRva2VuKSB7Ci0g
ICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblR5cGUoJHNlbGYtPmdldFRva2VuKCksIElkZW50aWZp
ZXJUb2tlbik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgbXkgQGF0dHJpYnV0ZXMgPSAoKTsK
KyAgICAgICAgbXkgJHRva2VuID0gJHNlbGYtPmdldFRva2VuKCk7CisgICAgICAgICRzZWxmLT5h
c3NlcnRUb2tlblR5cGUoJHRva2VuLCBJZGVudGlmaWVyVG9rZW4pOworICAgICAgICBwdXNoKEBh
dHRyaWJ1dGVzLCAkdG9rZW4tPnZhbHVlKCkpOworICAgICAgICByZXR1cm4gXEBhdHRyaWJ1dGVz
OwogICAgIH0KICAgICAkc2VsZi0+YXNzZXJ0VW5leHBlY3RlZFRva2VuKCRuZXh0LT52YWx1ZSgp
LCBfX0xJTkVfXyk7CiB9CiAKLXN1YiBwYXJzZVNlcmlhbGl6YXRpb25QYXR0ZXJuTWFwCitzdWIg
cGFyc2VTZXJpYWxpemF0aW9uQXR0cmlidXRlcwogewogICAgIG15ICRzZWxmID0gc2hpZnQ7Ci0g
ICAgbXkgJG5leHQgPSAkc2VsZi0+bmV4dFRva2VuKCk7Ci0gICAgaWYgKCRuZXh0LT52YWx1ZSgp
IGVxICJnZXR0ZXIiKSB7Ci0gICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5n
ZXRUb2tlbigpLCAiZ2V0dGVyIiwgX19MSU5FX18pOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAiaW5oZXJpdCIpIHsKLSAgICAgICAgJHNlbGYtPmFz
c2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICJpbmhlcml0IiwgX19MSU5FX18pOwot
ICAgICAgICAkc2VsZi0+cGFyc2VJZGVudGlmaWVycygpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGlmICgkbmV4dC0+dHlwZSgpID09IElkZW50aWZpZXJUb2tlbikgewotICAgICAgICAk
c2VsZi0+YXNzZXJ0VG9rZW5UeXBlKCRzZWxmLT5nZXRUb2tlbigpLCBJZGVudGlmaWVyVG9rZW4p
OwotICAgICAgICAkc2VsZi0+cGFyc2VJZGVudGlmaWVycygpOwotICAgIH0KLX0KKyAgICBteSAk
dG9rZW4gPSAkc2VsZi0+Z2V0VG9rZW4oKTsKKworICAgIGlmICgkdG9rZW4tPnZhbHVlKCkgZXEg
ImdldHRlciIpIHsKKyAgICAgICAgZGllICJTZXJpYWxpemVyIGdldHRlciBrZXl3b3JkIGlzIG5v
dCBjdXJyZW50bHkgc3VwcG9ydGVkLiI7CiAKLXN1YiBwYXJzZVNlcmlhbGl6YXRpb25QYXR0ZXJu
TGlzdAotewotICAgIG15ICRzZWxmID0gc2hpZnQ7Ci0gICAgbXkgJG5leHQgPSAkc2VsZi0+bmV4
dFRva2VuKCk7Ci0gICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJnZXR0ZXIiKSB7Ci0gICAgICAg
ICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiZ2V0dGVyIiwgX19M
SU5FX18pOwotICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICgkbmV4dC0+dHlwZSgpID09
IElkZW50aWZpZXJUb2tlbikgewotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5UeXBlKCRzZWxm
LT5nZXRUb2tlbigpLCBJZGVudGlmaWVyVG9rZW4pOwotICAgICAgICAkc2VsZi0+cGFyc2VJZGVu
dGlmaWVycygpOworICAgIGlmICgkdG9rZW4tPnZhbHVlKCkgZXEgImluaGVyaXQiKSB7CisgICAg
ICAgIGRpZSAiU2VyaWFsaXplciBpbmhlcml0IGtleXdvcmQgaXMgbm90IGN1cnJlbnRseSBzdXBw
b3J0ZWQuIjsKICAgICB9CisKKyAgICBteSBAYXR0cmlidXRlcyA9ICgpOworICAgICRzZWxmLT5h
c3NlcnRUb2tlblR5cGUoJHRva2VuLCBJZGVudGlmaWVyVG9rZW4pOworICAgIHB1c2goQGF0dHJp
YnV0ZXMsICR0b2tlbi0+dmFsdWUoKSk7CisgICAgcHVzaChAYXR0cmlidXRlcywgQHskc2VsZi0+
cGFyc2VJZGVudGlmaWVycygpfSk7CisgICAgcmV0dXJuIFxAYXR0cmlidXRlczsKIH0KIAogc3Vi
IHBhcnNlSWRlbnRpZmllckxpc3QKQEAgLTIyNjcsNiArMjI3MCwxOSBAQCBzdWIgYXBwbHlNZW1i
ZXJMaXN0CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBuZXh0OwogICAgICAgICB9CisgICAg
ICAgIGlmIChyZWYoJGl0ZW0pIGVxICJkb21TZXJpYWxpemFibGUiKSB7CisgICAgICAgICAgICAk
aW50ZXJmYWNlLT5zZXJpYWxpemFibGUoJGl0ZW0pOworICAgICAgICAgICAgbmV4dDsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmICgkaW50ZXJmYWNlLT5zZXJpYWxpemFibGUpIHsKKyAgICAg
ICAgbXkgJG51bVNlcmlhbGl6ZXJBdHRyaWJ1dGVzID0gQHskaW50ZXJmYWNlLT5zZXJpYWxpemFi
bGUtPmF0dHJpYnV0ZXN9OworICAgICAgICBpZiAoJG51bVNlcmlhbGl6ZXJBdHRyaWJ1dGVzID09
IDApIHsKKyAgICAgICAgICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHskaW50ZXJmYWNlLT5h
dHRyaWJ1dGVzfSkgeworICAgICAgICAgICAgICAgIHB1c2goQHskaW50ZXJmYWNlLT5zZXJpYWxp
emFibGUtPmF0dHJpYnV0ZXN9LCAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmpl
Y3QuY3BwCmluZGV4IGYxODIzMGNiN2Q3YjcwZjQ3ZTJlNjgzNmE0NmUyOTMyYWZkZTZiYWUuLmE3
Y2QwZmYwZjEwOWRiMzhmZGE3OGI0NGExMzMxNzM0Y2E4OGI1M2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RB
Y3RpdmVET01PYmplY3QuY3BwCkBAIC0xNDAsNiArMTQwLDggQEAgdm9pZCBKU1Rlc3RBY3RpdmVE
T01PYmplY3Q6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiAgICAgdGhpc09iamVjdC0+SlNU
ZXN0QWN0aXZlRE9NT2JqZWN0Ojp+SlNUZXN0QWN0aXZlRE9NT2JqZWN0KCk7CiB9CiAKK3N0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RFeGNpdGluZ0F0dHJHZXR0ZXIo
RXhlY1N0YXRlKiwgSlNUZXN0QWN0aXZlRE9NT2JqZWN0KiwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9iamVjdEV4Y2l0aW5nQXR0cihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKQEAgLTE1MSwxMyArMTUzLDIwIEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEFjdGl2ZURPTU9iamVjdEV4Y2l0aW5nQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAg
ICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVz
dEFjdGl2ZURPTU9iamVjdCIsICJleGNpdGluZ0F0dHIiKTsKICAgICB9Ci0gICAgaWYgKCFCaW5k
aW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShzdGF0ZSwgY2FzdGVkVGhpcy0+
d3JhcHBlZCgpLmZyYW1lKCksIFRocm93U2VjdXJpdHlFcnJvcikpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuZXhjaXRp
bmdBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEFjdGl2ZURPTU9iamVjdEV4Y2l0aW5nQXR0ckdldHRl
cihzdGF0ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSkpOwogfQogCitzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0QWN0aXZlRE9NT2JqZWN0RXhjaXRpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdEFjdGl2ZURPTU9iamVjdCogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgaWYgKCFCaW5k
aW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShzdGF0ZSwgdGhpc09iamVjdC0+
d3JhcHBlZCgpLmZyYW1lKCksIFRocm93U2VjdXJpdHlFcnJvcikpCisgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7Cisg
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmV4Y2l0aW5nQXR0cigpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RBY3RpdmVET01PYmplY3RD
b25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAppbmRleCA5
ODlkZWEzMGFlYTNmZjEyNTVjODg5OGNiODkzNTJlNDViM2I1MDdiLi4zNTkxNDJmMDM5YTZmMjhi
NWQ1Mzc4Y2RmY2JhNDk3ZDYxMmNmMDdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0
b3IuY3BwCkBAIC0xNzgsNiArMTc4LDggQEAgdm9pZCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yOjpk
ZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogICAgIHRoaXNPYmplY3QtPkpTVGVzdEV2ZW50Q29u
c3RydWN0b3I6On5KU1Rlc3RFdmVudENvbnN0cnVjdG9yKCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjFHZXR0ZXIoRXhlY1N0YXRlKiwgSlNU
ZXN0RXZlbnRDb25zdHJ1Y3RvciosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworCiBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjEoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CkBAIC0xODksMTEgKzE5MSwyMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVu
dENvbnN0cnVjdG9yQXR0cjEoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpcwog
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0
dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RFdmVudENvbnN0cnVjdG9yIiwg
ImF0dHIxIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjFH
ZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpKTsKK30KKworc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMUdldHRlcihFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdX
aXRoQ2FjaGUoc3RhdGUsIGltcGwuYXR0cjEoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0RXZl
bnRDb25zdHJ1Y3RvciosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CkBAIC0yMDYsMTMgKzIxNywyMiBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpcwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
ICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwg
IlRlc3RFdmVudENvbnN0cnVjdG9yIiwgImF0dHIyIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dp
dGhDYWNoZShzdGF0ZSwgaW1wbC5hdHRyMigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RFdmVudENvbnN0cnVj
dG9yQXR0cjJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpKTsKIH0KIAorc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMkdldHRlcihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RFdmVudENvbnN0cnVjdG9yKiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuYXR0cjIoKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KIAogI2lmIEVOQUJMRShTUEVDSUFMX0VWRU5UKQorc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyM0dldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RFdmVu
dENvbnN0cnVjdG9yKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CisKIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdEV2ZW50Q29uc3RydWN0b3JBdHRyMyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKQEAgLTIyNCw5ICsyNDQsMTcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0RXZlbnRDb25zdHJ1
Y3RvckF0dHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXMKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVF
cnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0RXZlbnRDb25zdHJ1Y3RvciIsICJhdHRyMyIp
OwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0RXZlbnRDb25zdHJ1Y3RvckF0dHIzR2V0dGVyKHN0
YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RFdmVudENvbnN0cnVjdG9yQXR0cjNHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0RXZlbnRDb25zdHJ1Y3RvciogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3sKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hl
KHN0YXRlLCBpbXBsLmF0dHIzKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHAK
aW5kZXggMDJhODFkMjc0NGNkNmQ2YTJlZGI4NGU5YWNiZDEyOWY3ZTEwMzQ1Ny4uZmMxYTVmZjU5
NzhjNzYxMzgyZjUwN2M2M2ZmNjgyNTJmYTBmNzlkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHAK
QEAgLTEzMiw2ICsxMzIsOCBAQCB2b2lkIEpTVGVzdEV4Y2VwdGlvbjo6ZGVzdHJveShKU0M6OkpT
Q2VsbCogY2VsbCkKICAgICB0aGlzT2JqZWN0LT5KU1Rlc3RFeGNlcHRpb246On5KU1Rlc3RFeGNl
cHRpb24oKTsKIH0KIAorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEV4Y2VwdGlvbk5hbWVH
ZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0RXhjZXB0aW9uKiwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEV4Y2VwdGlvbk5hbWUoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CkBAIC0xNDMsMTEgKzE0NSwxOCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RFeGNlcHRpb25OYW1lKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRo
cm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RFeGNlcHRpb24iLCAi
bmFtZSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwot
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwubmFtZSgp
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1Rlc3RFeGNlcHRpb25OYW1lR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzLCB0
aHJvd1Njb3BlKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RFeGNlcHRpb25O
YW1lR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEV4Y2VwdGlvbiogdGhpc09iamVjdCwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7
CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLm5hbWUoKSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KIAogRW5jb2RlZEpTVmFsdWUganNUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3Io
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0R2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCmluZGV4IDRhZWY0MTJhYWQxZGY2YWFhZmY1
NzU1YTk2ODQ5MzJiYmJhODYzYjcuLjQyMjMzOWFjODU2MjU4ZjE0YzZlZTY3NzI5NDFmMjNkOTk3
NzUwYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCkBAIC0xNzcsNiArMTc3LDggQEAg
dm9pZCBKU1Rlc3RHbG9iYWxPYmplY3Q6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiAgICAg
dGhpc09iamVjdC0+SlNUZXN0R2xvYmFsT2JqZWN0Ojp+SlNUZXN0R2xvYmFsT2JqZWN0KCk7CiB9
CiAKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmli
dXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdEdsb2JhbE9iamVjdCosIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0
cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwpAQCAtMTg4LDExICsxOTAsMjAg
QEAgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZShFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWwKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2Nv
cGUsICJUZXN0R2xvYmFsT2JqZWN0IiwgInJlZ3VsYXJBdHRyaWJ1dGUiKTsKICAgICB9Ci0gICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNh
c3RlZFRoaXMsIHRocm93U2NvcGUpKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0R2xvYmFsT2JqZWN0KiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorewor
ICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVj
dC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3Rh
dGUsIGltcGwucmVndWxhckF0dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0
YXRlKiwgSlNUZXN0R2xvYmFsT2JqZWN0KiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGUo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CiB7CkBAIC0yMDUsMTMgKzIxNiwyMiBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmpl
Y3RQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuYwogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlw
ZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RHbG9iYWxPYmplY3QiLCAicHVibGljQW5k
UHJpdmF0ZUF0dHJpYnV0ZSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUs
IGltcGwucHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RHbG9iYWxP
YmplY3RQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzLCB0
aHJvd1Njb3BlKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmpl
Y3RQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dEdsb2JhbE9iamVjdCogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAg
ICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qt
PndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRl
LCBpbXBsLnB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KIAogI2lmIEVOQUJMRShURVNUX0ZFQVRVUkUpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRlR2V0dGVy
KEV4ZWNTdGF0ZSosIEpTVGVzdEdsb2JhbE9iamVjdCosIFRocm93U2NvcGUmIHRocm93U2NvcGUp
OworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29u
ZGl0aW9uYWxBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CkBAIC0yMjMs
MTQgKzI0MywyNCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQ
cml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGUoRXhlY1N0YXRlKgogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0
ZSwgdGhyb3dTY29wZSwgIlRlc3RHbG9iYWxPYmplY3QiLCAicHVibGljQW5kUHJpdmF0ZUNvbmRp
dGlvbmFsQXR0cmlidXRlIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RHbG9iYWxPYmplY3RQ
dWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRo
aXMsIHRocm93U2NvcGUpKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdFB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZUdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmlu
Z1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5wdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1
dGUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKICNlbmRpZgogCiAjaWYgRU5BQkxFKFRFU1RfRkVBVFVSRSkKK3N0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1lQXR0cmlidXRl
R2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdEdsb2JhbE9iamVjdCosIFRocm93U2NvcGUmIHRocm93
U2NvcGUpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50
aW1lQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwpAQCAtMjQyLDkgKzI3
MiwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1l
QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuYwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhy
b3dTY29wZSwgIlRlc3RHbG9iYWxPYmplY3QiLCAiZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSIp
OwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVudGltZUF0
dHJpYnV0ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSkpOworfQorCitzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJp
YnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RHbG9iYWxPYmplY3QqIHRoaXNPYmpl
Y3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmpl
Y3QpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1
ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5lbmFibGVkQXRSdW50aW1l
QXR0cmlidXRlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKaW5kZXggZTY3
ZWNmNjVmZTRkMTViYmI2YjUzMzVkODQ2NjA0MzA1YWVlY2U3OS4uM2QwNWNiNGJmZWYzNTNjOGU3
YTE4NGFkZmM1NWJlZTBmZTY2M2IzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKQEAgLTQxMSwz
MiArNDExLDUwIEBAIHZvaWQgSlNUZXN0SW50ZXJmYWNlOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBj
ZWxsKQogfQogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMp
CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1l
bnRzU3RhdGljUmVhZE9ubHlBdHRyR2V0dGVyKEV4ZWNTdGF0ZSopOworCiBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNSZWFkT25seUF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNU
ZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljUmVhZE9ubHlBdHRyR2V0dGVy
KHN0YXRlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25z
dHJ1Y3RvckltcGxlbWVudHNTdGF0aWNSZWFkT25seUF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0
ZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNO
dW1iZXIoVGVzdEludGVyZmFjZTo6aW1wbGVtZW50c1N0YXRpY1JlYWRPbmx5QXR0cigpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMjIpIHx8IEVOQUJMRShDb25kaXRpb24y
MykKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxl
bWVudHNTdGF0aWNBdHRyR2V0dGVyKEV4ZWNTdGF0ZSopOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0aWNBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhpc1ZhbHVlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEludGVyZmFjZUNv
bnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHJHZXR0ZXIoc3RhdGUpKTsKK30KKworc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRp
Y0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIFRlc3RJbnRl
cmZhY2U6OmltcGxlbWVudHNTdGF0aWNBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJM
RShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQorc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIxR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVz
dEludGVyZmFjZSosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworCiBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKQEAgLTQ0OCwxNCArNDY2LDI0IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUlt
cGxlbWVudHNTdHIxKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoCiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBl
RXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdEludGVyZmFjZSIsICJpbXBsZW1lbnRzU3Ry
MSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjFHZXR0
ZXIoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpKTsKK30KKworc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIxR2V0dGVyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdEludGVyZmFjZSogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3sKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hl
KHN0YXRlLCBpbXBsLmltcGxlbWVudHNTdHIxKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJM
RShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQorc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVz
dEludGVyZmFjZSosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworCiBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKQEAgLTQ2NywxNCArNDk1LDI0IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUlt
cGxlbWVudHNTdHIyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoCiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBl
RXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdEludGVyZmFjZSIsICJpbXBsZW1lbnRzU3Ry
MiIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjJHZXR0
ZXIoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpKTsKK30KKworc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyR2V0dGVyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdEludGVyZmFjZSogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3sKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hl
KHN0YXRlLCBpbXBsLmltcGxlbWVudHNTdHIyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJM
RShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQorc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIzR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVz
dEludGVyZmFjZSosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworCiBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKQEAgLTQ4NiwxMiArNTI0LDIyIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUlt
cGxlbWVudHNTdHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoCiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBl
RXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdEludGVyZmFjZSIsICJpbXBsZW1lbnRzU3Ry
MyIpOwogICAgIH0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhc3RlZFRoaXMtPmltcGxl
bWVudHNTdHIzKCpzdGF0ZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0SW50
ZXJmYWNlSW1wbGVtZW50c1N0cjNHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUp
KTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNT
dHIzR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSogdGhpc09iamVjdCwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7
CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPmltcGxlbWVudHNTdHIzKCpzdGF0ZSk7CiB9CiAKICNl
bmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjIyKSB8fCBFTkFCTEUoQ29uZGl0aW9uMjMpCitz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGVHZXR0ZXIo
RXhlY1N0YXRlKiwgSlNUZXN0SW50ZXJmYWNlKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CisK
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUltcGxlbWVudHNOb2RlKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOwpAQCAtNTAzLDQwICs1NTEsNjYgQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGgKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVy
biB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0SW50ZXJmYWNl
IiwgImltcGxlbWVudHNOb2RlIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSwgaW1wbC5pbXBsZW1lbnRzTm9kZSgpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RJ
bnRlcmZhY2VJbXBsZW1lbnRzTm9kZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29w
ZSkpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlSW1wbGVtZW50
c05vZGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlKiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0
KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUg
cmVzdWx0ID0gdG9KUyhzdGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIGltcGwuaW1w
bGVtZW50c05vZGUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2VuZGlmCiAKICNpZiBF
TkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25kaXRpb24xMikKK3N0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY1JlYWRP
bmx5QXR0ckdldHRlcihFeGVjU3RhdGUqKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJm
YWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNSZWFkT25seUF0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aGlzVmFsdWUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0SW50ZXJmYWNl
Q29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNSZWFkT25seUF0dHJHZXR0ZXIoc3RhdGUpKTsK
K30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3Vw
cGxlbWVudGFsU3RhdGljUmVhZE9ubHlBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKFdl
YkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbFN0YXRpY1JlYWRPbmx5QXR0cigp
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25k
aXRpb24xMikKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rv
clN1cHBsZW1lbnRhbFN0YXRpY0F0dHJHZXR0ZXIoRXhlY1N0YXRlKik7CisKIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVudGFsU3RhdGljQXR0cihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
ICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRoaXNWYWx1ZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RJ
bnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY0F0dHJHZXR0ZXIoc3RhdGUpKTsK
K30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3Vw
cGxlbWVudGFsU3RhdGljQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlKQoreworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShz
dGF0ZSwgV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsU3RhdGljQXR0cigp
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVOQUJMRShDb25k
aXRpb24xMikKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50
YWxTdHIxR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdEludGVyZmFjZSosIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxT
dHIxKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwpAQCAtNTQ4LDE0ICs2MjIsMjQgQEAg
RW5jb2RlZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMShFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
ICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwg
IlRlc3RJbnRlcmZhY2UiLCAic3VwcGxlbWVudGFsU3RyMSIpOwogICAgIH0KLSAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcywg
dGhyb3dTY29wZSkpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNl
U3VwcGxlbWVudGFsU3RyMUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RJbnRlcmZhY2Uq
IHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFN
KHRoaXNPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgV2ViQ29yZTo6VGVz
dFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsU3RyMShpbXBsKSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKICNlbmRpZgogCiAj
aWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCitzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMkdldHRlcihFeGVjU3Rh
dGUqLCBKU1Rlc3RJbnRlcmZhY2UqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKKwogRW5jb2Rl
ZEpTVmFsdWUganNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKQEAgLTU2NywxNCArNjUxLDI0IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJv
d0dldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0SW50ZXJmYWNlIiwgInN1
cHBsZW1lbnRhbFN0cjIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEludGVyZmFjZVN1cHBs
ZW1lbnRhbFN0cjJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpKTsKK30KKwor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjJHZXR0
ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlKiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBs
ZW1lbnRhbFN0cjIoaW1wbCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24x
MSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdElu
dGVyZmFjZVN1cHBsZW1lbnRhbFN0cjNHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0SW50ZXJmYWNl
KiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVy
ZmFjZVN1cHBsZW1lbnRhbFN0cjMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CkBAIC01
ODYsMTIgKzY4MCwyMiBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50
YWxTdHIzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlCiAgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0
YXRlLCB0aHJvd1Njb3BlLCAiVGVzdEludGVyZmFjZSIsICJzdXBwbGVtZW50YWxTdHIzIik7CiAg
ICAgfQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FzdGVkVGhpcy0+c3VwcGxlbWVudGFs
U3RyMygqc3RhdGUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdEludGVyZmFj
ZVN1cHBsZW1lbnRhbFN0cjNHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpKTsK
K30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0
cjNHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SW50ZXJmYWNlKiB0aGlzT2JqZWN0LCBU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsK
KyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsK
KyAgICByZXR1cm4gdGhpc09iamVjdC0+c3VwcGxlbWVudGFsU3RyMygqc3RhdGUpOwogfQogCiAj
ZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGVHZXR0
ZXIoRXhlY1N0YXRlKiwgSlNUZXN0SW50ZXJmYWNlKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7
CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGUoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CkBAIC02MDMsOSArNzA3LDE3IEBAIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJl
dHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0SW50ZXJm
YWNlIiwgInN1cHBsZW1lbnRhbE5vZGUiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzdXBwbGVt
ZW50YWxOb2RlKGltcGwpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2Rl
R2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKSk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2RlR2V0dGVyKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdEludGVyZmFjZSogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUs
IHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpz
dXBwbGVtZW50YWxOb2RlKGltcGwpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCmluZGV4IDA4YWY4OTVj
ZmY0YzBkZjdhOGQwNDM4MGFhNWY5YjdiY2Y0MTc4OTAuLmQ2OGE1ZTZkMDk0NDlmNDUzOTQ2MzE1
M2ZiZWY2OWEyMDAwNWMyNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVj
dG9yLmNwcApAQCAtMTMyLDYgKzEzMiw4IEBAIHZvaWQgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0
b3I6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiAgICAgdGhpc09iamVjdC0+SlNUZXN0SlNC
dWlsdGluQ29uc3RydWN0b3I6On5KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvcigpOwogfQogCitz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmli
dXRlQ3VzdG9tR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yKiwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CisKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEpTQnVpbHRp
bkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZUN1c3RvbShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKQEAgLTE0Myw5ICsxNDUsMTggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0SlNCdWlsdGlu
Q29uc3RydWN0b3JUZXN0QXR0cmlidXRlQ3VzdG9tKEV4ZWNTdGF0ZSogc3RhdGUsIEUKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5
cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IiLCAi
dGVzdEF0dHJpYnV0ZUN1c3RvbSIpOwogICAgIH0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGNhc3RlZFRoaXMtPnRlc3RBdHRyaWJ1dGVDdXN0b20oKnN0YXRlKSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVDdXN0
b21HZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpKTsKK30KKworc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZUN1c3Rv
bUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciogdGhp
c09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGhp
c09iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CisgICAgcmV0dXJuIHRoaXNPYmplY3QtPnRlc3RBdHRyaWJ1dGVDdXN0b20oKnN0
YXRlKTsKIH0KIAorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVj
dG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdEpTQnVpbHRp
bkNvbnN0cnVjdG9yKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0ZVJXQ3VzdG9tKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewpAQCAt
MTU4LDkgKzE2OSwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rv
clRlc3RBdHRyaWJ1dGVSV0N1c3RvbShFeGVjU3RhdGUqIHN0YXRlLAogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpz
dGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciIsICJ0ZXN0QXR0cmli
dXRlUldDdXN0b20iKTsKICAgICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRU
aGlzLT50ZXN0QXR0cmlidXRlUldDdXN0b20oKnN0YXRlKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3RvbUdl
dHRlcihzdGF0ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSkpOwogfQogCitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b21H
ZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNP
YmplY3QpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LT50ZXN0QXR0cmlidXRlUldDdXN0b20oKnN0
YXRlKTsKK30KIAogRW5jb2RlZEpTVmFsdWUganNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25z
dHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAppbmRleCAwYmI3YmE1ZDA2MTYwNjdlNWZiODJmYTY1NWY4
Y2Y1MThiMDk3OTUxLi42Yzg4NWMzNThiZjczZWU4ZGQ0NTFjYzNhOTBkMGI2ZTlhMTAzZWU3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Tm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5vZGUuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rv
ci5oIgogI2luY2x1ZGUgIkpTRE9NSXRlcmF0b3IuaCIKICNpbmNsdWRlICJKU0RPTVByb21pc2Uu
aCIKKyNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJVUkwuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9y
Lmg+CkBAIC01Miw2ICs1Myw4IEBAIGJvb2wgc2V0SlNUZXN0Tm9kZU5hbWUoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlCiBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE5vZGVDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIGJvb2wgc2V0SlNUZXN0Tm9kZUNvbnN0
cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSk7CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3Rv
dHlwZUZ1bmN0aW9uVG9KU09OKEV4ZWNTdGF0ZSopOworCiBjbGFzcyBKU1Rlc3ROb2RlUHJvdG90
eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRl
ZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKQEAgLTExNSw2ICsxMTgsNyBAQCBzdGF0aWMg
Y29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0Tm9kZVByb3RvdHlwZVRhYmxlVmFsdWVzW10gPQog
ICAgIHsgImtleXMiLCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3Rh
dGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbktleXMp
LCAoaW50cHRyX3QpICgwKSB9IH0sCiAgICAgeyAidmFsdWVzIiwgSlNDOjpGdW5jdGlvbiwgTm9J
bnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RO
b2RlUHJvdG90eXBlRnVuY3Rpb25WYWx1ZXMpLCAoaW50cHRyX3QpICgwKSB9IH0sCiAgICAgeyAi
Zm9yRWFjaCIsIEpTQzo6RnVuY3Rpb24sIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNf
Y2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaCks
IChpbnRwdHJfdCkgKDEpIH0gfSwKKyAgICB7ICJ0b0pTT04iLCBKU0M6OkZ1bmN0aW9uLCBOb0lu
dHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE5v
ZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTiksIChpbnRwdHJfdCkgKDApIH0gfSwKIH07CiAKIGNv
bnN0IENsYXNzSW5mbyBKU1Rlc3ROb2RlUHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0Tm9kZVBy
b3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0Tm9k
ZVByb3RvdHlwZSkgfTsKQEAgLTE2NSw2ICsxNjksOCBAQCBKU09iamVjdCogSlNUZXN0Tm9kZTo6
cHJvdG90eXBlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICByZXR1
cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdE5vZGU+KHZtLCBnbG9iYWxPYmplY3QpOwogfQogCitz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Tm9kZU5hbWVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNU
ZXN0Tm9kZSosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3ROb2RlTmFtZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKQEAgLTE3NiwxMSArMTgy
LDE4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVOYW1lKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVyCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJv
d1Njb3BlLCAiVGVzdE5vZGUiLCAibmFtZSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2Fj
aGUoc3RhdGUsIGltcGwubmFtZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3ROb2RlTmFtZUdldHRlcihzdGF0
ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSkpOwogfQogCitzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0Tm9kZU5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0Tm9kZSogdGhpc09i
amVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGhpc09i
amVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBKU1Zh
bHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLm5hbWUoKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KIAogRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9kZUNvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewpAQCAtMjUzLDYgKzI2NiwyMiBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRlc3RXb3JrZXJQcm9taXNlUHJvbWlzZQogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEV4ZWNTdGF0
ZSogc3RhdGUpCit7CisgICAgQVNTRVJUKHN0YXRlKTsKKyAgICBhdXRvIGNhc3RlZFRoaXMgPSBq
c0R5bmFtaWNDYXN0PEpTVGVzdE5vZGUqPihzdGF0ZS0+dGhpc1ZhbHVlKCkpOworICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpeworICAgICAgICByZXR1cm4g
dGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3ROb2RlIiwgInRvSlNP
TiIpOworICAgIH0KKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpT
VGVzdE5vZGU6OmluZm8oKSk7CisKKyAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9i
amVjdChzdGF0ZSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCAibmFtZSIpLCBqc1Rlc3ROb2RlTmFtZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhp
cywgdGhyb3dTY29wZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30K
KwogdXNpbmcgVGVzdE5vZGVJdGVyYXRvciA9IEpTRE9NSXRlcmF0b3I8SlNUZXN0Tm9kZT47CiB1
c2luZyBUZXN0Tm9kZUl0ZXJhdG9yUHJvdG90eXBlID0gSlNET01JdGVyYXRvclByb3RvdHlwZTxK
U1Rlc3ROb2RlPjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuY3BwCmluZGV4IDc2
YTU2YzUyNjRiNDc3ZmZmYmUwNjFlMTg0YWY4NjBhMTQ4Y2NiODIuLjFjMTAxMDAxOWI2MjMwYWI2
MTMwYTI4OWQ4MzU5YTMwODhjODFkZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3Rp
Yy5jcHAKQEAgLTE0NCw2ICsxNDQsOCBAQCB2b2lkIEpTVGVzdE5vbmRldGVybWluaXN0aWM6OmRl
c3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiAgICAgdGhpc09iamVjdC0+SlNUZXN0Tm9uZGV0ZXJt
aW5pc3RpYzo6fkpTVGVzdE5vbmRldGVybWluaXN0aWMoKTsKIH0KIAorc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljUmVhZG9ubHlBdHRy
R2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE5vbmRldGVybWluaXN0aWMqLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRl
dGVybWluaXN0aWNSZWFkb25seUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CkBA
IC0xNTUsMTUgKzE1NywyMyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGlj
Tm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5QXR0cihFeGVjU3RhdGUqIHN0YQogICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9y
KCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3ROb25kZXRlcm1pbmlzdGljIiwgIm5vbmRldGVybWlu
aXN0aWNSZWFkb25seUF0dHIiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5QXR0ckdldHRlcihz
dGF0ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSkpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNSZWFkb25seUF0dHJHZXR0
ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogdGhpc09iamVjdCwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7
CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CiAjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CiAgICAgSW5wdXRDdXJzb3ImIGN1cnNv
ciA9IGdsb2JhbE9iamVjdC0+aW5wdXRDdXJzb3IoKTsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8Y29uc3QgQXRvbWljU3RyaW5nPiBiaW5kaW5nTmFtZSgiVGVzdE5vbmRldGVybWluaXN0aWMu
bm9uZGV0ZXJtaW5pc3RpY1JlYWRvbmx5QXR0ciIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOwogICAgIGlmIChjdXJzb3IuaXNDYXB0dXJpbmcoKSkgewotICAgICAgICBpbnQz
Ml90IG1lbW9pemVkUmVzdWx0ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpLm5vbmRldGVybWluaXN0
aWNSZWFkb25seUF0dHIoKTsKKyAgICAgICAgaW50MzJfdCBtZW1vaXplZFJlc3VsdCA9IHRoaXNP
YmplY3QtPndyYXBwZWQoKS5ub25kZXRlcm1pbmlzdGljUmVhZG9ubHlBdHRyKCk7CiAgICAgICAg
IGN1cnNvci5hcHBlbmRJbnB1dDxNZW1vaXplZERPTVJlc3VsdDxpbnQzMl90Pj4oYmluZGluZ05h
bWUuZ2V0KCkuc3RyaW5nKCksIG1lbW9pemVkUmVzdWx0LCAwKTsKICAgICAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc051bWJlcihtZW1vaXplZFJlc3VsdCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBp
ZiAoY3Vyc29yLmlzUmVwbGF5aW5nKCkpIHsKQEAgLTE3MSwxNSArMTgxLDE2IEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljUmVhZG9ubHlBdHRy
KEV4ZWNTdGF0ZSogc3RhCiAgICAgICAgIE1lbW9pemVkRE9NUmVzdWx0QmFzZSogaW5wdXQgPSBj
dXJzb3IuZmV0Y2hJbnB1dDxNZW1vaXplZERPTVJlc3VsdEJhc2U+KCk7CiAgICAgICAgIGlmIChp
bnB1dCAmJiBpbnB1dC0+Y29udmVydFRvPGludDMyX3Q+KG1lbW9pemVkUmVzdWx0KSkgewogICAg
ICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihtZW1vaXplZFJlc3VsdCk7Ci0gICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCi0gICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBl
ZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5ub25kZXRlcm1pbmlzdGlj
UmVhZG9ubHlBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Tm9uZGV0
ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSos
IEpTVGVzdE5vbmRldGVybWluaXN0aWMqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5j
b2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNXcml0ZWFi
bGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewpAQCAtMTkyLDE1ICsyMDMsMjMgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9u
ZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyKEV4ZWNTdGF0ZSogc3QK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dl
dHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIs
ICJub25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0ciIpOwogICAgIH0KKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljV3JpdGVh
YmxlQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSkpOworfQorCitzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNX
cml0ZWFibGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE5vbmRldGVybWluaXN0
aWMqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BB
UkFNKHRoaXNPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogI2lmIEVOQUJMRShXRUJfUkVQTEFZKQogICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIElu
cHV0Q3Vyc29yJiBjdXJzb3IgPSBnbG9iYWxPYmplY3QtPmlucHV0Q3Vyc29yKCk7CiAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21pY1N0cmluZz4gYmluZGluZ05hbWUoIlRlc3RO
b25kZXRlcm1pbmlzdGljLm5vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyIiwgQXRvbWljU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgaWYgKGN1cnNvci5pc0NhcHR1cmluZygp
KSB7Ci0gICAgICAgIFN0cmluZyBtZW1vaXplZFJlc3VsdCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KS5ub25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0cigpOworICAgICAgICBTdHJpbmcgbWVtb2l6
ZWRSZXN1bHQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkubm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJs
ZUF0dHIoKTsKICAgICAgICAgY3Vyc29yLmFwcGVuZElucHV0PE1lbW9pemVkRE9NUmVzdWx0PFN0
cmluZz4+KGJpbmRpbmdOYW1lLmdldCgpLnN0cmluZygpLCBtZW1vaXplZFJlc3VsdCwgMCk7CiAg
ICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIG1lbW9pemVk
UmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIGlmIChjdXJzb3IuaXNSZXBsYXlpbmcoKSkg
ewpAQCAtMjA4LDE1ICsyMjcsMTYgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5p
c3RpY05vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyKEV4ZWNTdGF0ZSogc3QKICAgICAgICAg
TWVtb2l6ZWRET01SZXN1bHRCYXNlKiBpbnB1dCA9IGN1cnNvci5mZXRjaElucHV0PE1lbW9pemVk
RE9NUmVzdWx0QmFzZT4oKTsKICAgICAgICAgaWYgKGlucHV0ICYmIGlucHV0LT5jb252ZXJ0VG88
U3RyaW5nPihtZW1vaXplZFJlc3VsdCkpIHsKICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIG1lbW9pemVkUmVzdWx0KTsKLSAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAg
SlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5ub25kZXRlcm1p
bmlzdGljV3JpdGVhYmxlQXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0ckdldHRlcihFeGVj
U3RhdGUqLCBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7
CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGlj
RXhjZXB0aW9uQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKQEAgLTIyOSwxNSArMjQ5LDIzIEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0cihFeGVjU3Rh
dGUqIHN0CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4g
dGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE5vbmRldGVybWlu
aXN0aWMiLCAibm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHIiKTsKICAgICB9CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3Rp
Y0V4Y2VwdGlvbkF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpKTsKK30K
Kworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1p
bmlzdGljRXhjZXB0aW9uQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3ROb25kZXRl
cm1pbmlzdGljKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVO
VVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICNpZiBFTkFCTEUoV0VCX1JFUExBWSkKICAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKTsK
ICAgICBJbnB1dEN1cnNvciYgY3Vyc29yID0gZ2xvYmFsT2JqZWN0LT5pbnB1dEN1cnNvcigpOwog
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBBdG9taWNTdHJpbmc+IGJpbmRpbmdOYW1l
KCJUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5ub25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0ciIsIEF0
b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgIGlmIChjdXJzb3IuaXNDYXB0
dXJpbmcoKSkgewotICAgICAgICBTdHJpbmcgbWVtb2l6ZWRSZXN1bHQgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCkubm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHIoKTsKKyAgICAgICAgU3RyaW5n
IG1lbW9pemVkUmVzdWx0ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLm5vbmRldGVybWluaXN0aWNF
eGNlcHRpb25BdHRyKCk7CiAgICAgICAgIGN1cnNvci5hcHBlbmRJbnB1dDxNZW1vaXplZERPTVJl
c3VsdDxTdHJpbmc+PihiaW5kaW5nTmFtZS5nZXQoKS5zdHJpbmcoKSwgbWVtb2l6ZWRSZXN1bHQs
IDApOwogICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBt
ZW1vaXplZFJlc3VsdCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBpZiAoY3Vyc29yLmlzUmVwbGF5
aW5nKCkpIHsKQEAgLTI0NSwxNSArMjczLDE2IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vbmRl
dGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0cihFeGVjU3RhdGUqIHN0CiAg
ICAgICAgIE1lbW9pemVkRE9NUmVzdWx0QmFzZSogaW5wdXQgPSBjdXJzb3IuZmV0Y2hJbnB1dDxN
ZW1vaXplZERPTVJlc3VsdEJhc2U+KCk7CiAgICAgICAgIGlmIChpbnB1dCAmJiBpbnB1dC0+Y29u
dmVydFRvPFN0cmluZz4obWVtb2l6ZWRSZXN1bHQpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBtZW1vaXplZFJlc3VsdCk7Ci0gICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCi0gICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgp
OwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwubm9u
ZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4Y2VwdGlvbkF0
dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyosIFRocm93U2NvcGUm
IHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9u
ZGV0ZXJtaW5pc3RpY0dldHRlckV4Y2VwdGlvbkF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CkBAIC0yNjYsMTcgKzI5NSwyNSBA
QCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0dl
dHRlckV4Y2VwdGlvbkF0dHIoRXhlY1N0YQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29w
ZSwgIlRlc3ROb25kZXRlcm1pbmlzdGljIiwgIm5vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRp
b25BdHRyIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0Tm9uZGV0
ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyR2V0dGVyKHN0YXRl
LCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4Y2VwdGlvbkF0dHJH
ZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogdGhpc09iamVj
dCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVj
dCk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAjaWYgRU5BQkxFKFdFQl9SRVBMQVkpCiAg
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRlLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCk7CiAgICAgSW5wdXRDdXJzb3ImIGN1cnNvciA9IGdsb2JhbE9iamVjdC0+aW5wdXRDdXJz
b3IoKTsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbWljU3RyaW5nPiBiaW5k
aW5nTmFtZSgiVGVzdE5vbmRldGVybWluaXN0aWMubm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4Y2Vw
dGlvbkF0dHIiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKICAgICBpZiAo
Y3Vyc29yLmlzQ2FwdHVyaW5nKCkpIHsKLSAgICAgICAgU3RyaW5nIG1lbW9pemVkUmVzdWx0ID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpLm5vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRy
KGVjKTsKKyAgICAgICAgU3RyaW5nIG1lbW9pemVkUmVzdWx0ID0gdGhpc09iamVjdC0+d3JhcHBl
ZCgpLm5vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyKGVjKTsKICAgICAgICAgY3Vy
c29yLmFwcGVuZElucHV0PE1lbW9pemVkRE9NUmVzdWx0PFN0cmluZz4+KGJpbmRpbmdOYW1lLmdl
dCgpLnN0cmluZygpLCBtZW1vaXplZFJlc3VsdCwgZWMpOwogICAgICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBtZW1vaXplZFJlc3VsdCk7CiAgICAgICAgIHNl
dERPTUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgZWMpOwotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAg
ICAgaWYgKGN1cnNvci5pc1JlcGxheWluZygpKSB7CkBAIC0yODUsMTYgKzMyMiwxNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4
Y2VwdGlvbkF0dHIoRXhlY1N0YQogICAgICAgICBpZiAoaW5wdXQgJiYgaW5wdXQtPmNvbnZlcnRU
bzxTdHJpbmc+KG1lbW9pemVkUmVzdWx0KSkgewogICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQg
PSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgbWVtb2l6ZWRSZXN1bHQpOwogICAgICAgICAgICAg
c2V0RE9NRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCBpbnB1dC0+ZXhjZXB0aW9uQ29kZSgp
KTsKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKLSAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0
ZSwgaW1wbC5ub25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0cihlYykpOwogICAgIHNl
dERPTUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgZWMpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNl
cHRpb25BdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE5vbmRldGVybWluaXN0aWMqLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5p
c3RpY05vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewpAQCAtMzA3LDE1ICsz
NDUsMjMgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWlu
aXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyKEV4ZWNTdGEKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsIHRo
cm93U2NvcGUsICJUZXN0Tm9uZGV0ZXJtaW5pc3RpYyIsICJub25kZXRlcm1pbmlzdGljU2V0dGVy
RXhjZXB0aW9uQXR0ciIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVz
dE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0ckdldHRl
cihzdGF0ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSkpOworfQorCitzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRp
b25BdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE5vbmRldGVybWluaXN0aWMqIHRo
aXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRo
aXNPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOwogI2lmIEVOQUJMRShXRUJfUkVQTEFZKQogICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIElucHV0Q3Vy
c29yJiBjdXJzb3IgPSBnbG9iYWxPYmplY3QtPmlucHV0Q3Vyc29yKCk7CiAgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPGNvbnN0IEF0b21pY1N0cmluZz4gYmluZGluZ05hbWUoIlRlc3ROb25kZXRl
cm1pbmlzdGljLm5vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyIiwgQXRvbWljU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgaWYgKGN1cnNvci5pc0NhcHR1cmluZygp
KSB7Ci0gICAgICAgIFN0cmluZyBtZW1vaXplZFJlc3VsdCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KS5ub25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0cigpOworICAgICAgICBTdHJpbmcg
bWVtb2l6ZWRSZXN1bHQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkubm9uZGV0ZXJtaW5pc3RpY1Nl
dHRlckV4Y2VwdGlvbkF0dHIoKTsKICAgICAgICAgY3Vyc29yLmFwcGVuZElucHV0PE1lbW9pemVk
RE9NUmVzdWx0PFN0cmluZz4+KGJpbmRpbmdOYW1lLmdldCgpLnN0cmluZygpLCBtZW1vaXplZFJl
c3VsdCwgMCk7CiAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3Rh
dGUsIG1lbW9pemVkUmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIGlmIChjdXJzb3IuaXNS
ZXBsYXlpbmcoKSkgewpAQCAtMzIzLDE2ICszNjksMTUgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyKEV4ZWNT
dGEKICAgICAgICAgTWVtb2l6ZWRET01SZXN1bHRCYXNlKiBpbnB1dCA9IGN1cnNvci5mZXRjaElu
cHV0PE1lbW9pemVkRE9NUmVzdWx0QmFzZT4oKTsKICAgICAgICAgaWYgKGlucHV0ICYmIGlucHV0
LT5jb252ZXJ0VG88U3RyaW5nPihtZW1vaXplZFJlc3VsdCkpIHsKICAgICAgICAgICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIG1lbW9pemVkUmVzdWx0KTsKLSAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKLSAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFw
cGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1w
bC5ub25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0cigpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotCiBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3ROb25kZXRlcm1pbmlzdGljQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCmluZGV4IDA3NzE4MTYxM2M2ODkxZjBjZDM4NTBjMDM3
OWIyZTdhZTZlMTc0YWEuLjIyNTZlMjllOWYzMjQ0YmQ4ODQ4NjE3YjY4OTYzNWFjZjU4NzdiMDkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouY3BwCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiSlNUZXN0T2JqLmgiCiAj
aW5jbHVkZSAiSlNUZXN0U3ViT2JqLmgiCiAjaW5jbHVkZSAiSlNYUGF0aE5TUmVzb2x2ZXIuaCIK
KyNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVk
RmVhdHVyZXMuaCIKICNpbmNsdWRlICJTVkdEb2N1bWVudC5oIgogI2luY2x1ZGUgIlNWR1BvaW50
LmgiCkBAIC05NjQsNiArOTY1LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdpZmllckF0dHJp
YnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzoKIEpTQzo6RW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiBib29sIHNldEpTVGVzdE9iakNvbnN0
cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSk7CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25Ub0pTT04oRXhlY1N0YXRlKik7CisKIGNsYXNzIEpTVGVzdE9ialByb3RvdHlw
ZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgogICAgIHR5cGVkZWYg
SlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CkBAIC0xNDA0LDYgKzE0MDcsNyBAQCBzdGF0aWMg
Y29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9CiAg
ICAgeyAiQ09OU1RfVkFMVUVfMTQiLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBDb25zdGFudElu
dGVnZXIsIE5vSW50cmluc2ljLCB7IChsb25nIGxvbmcpKDB4MWFiYykgfSB9LAogICAgIHsgIkNP
TlNUX0pBVkFTQ1JJUFQiLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBDb25zdGFudEludGVnZXIs
IE5vSW50cmluc2ljLCB7IChsb25nIGxvbmcpKDE1KSB9IH0sCiAgICAgeyAicmVhZG9ubHkiLCBE
b250RGVsZXRlIHwgUmVhZE9ubHkgfCBDb25zdGFudEludGVnZXIsIE5vSW50cmluc2ljLCB7IChs
b25nIGxvbmcpKDApIH0gfSwKKyAgICB7ICJ0b0pTT04iLCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJp
bnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uVG9KU09OKSwgKGludHB0cl90KSAoMCkgfSB9LAogfTsKIAogY29uc3Qg
Q2xhc3NJbmZvIEpTVGVzdE9ialByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdE9iamVjdFByb3Rv
dHlwZSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0T2JqUHJv
dG90eXBlKSB9OwpAQCAtMTQ4OSw2ICsxNDkzLDggQEAgYm9vbCBKU1Rlc3RPYmo6OmdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW4K
ICAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCh0aGlzT2JqZWN0LCBz
dGF0ZSwgaW5kZXgsIHNsb3QpOwogfQogCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
UmVhZE9ubHlMb25nQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlMb25nQXR0
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFt
ZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKQEAgLTE1MDAsMTEgKzE1MDYsMjAgQEAg
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmEKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7
CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUs
ICJUZXN0T2JqZWN0IiwgInJlYWRPbmx5TG9uZ0F0dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VGVzdE9ialJlYWRPbmx5TG9uZ0F0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2Nv
cGUpKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5TG9uZ0F0
dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNOdW1iZXIoaW1wbC5yZWFkT25seUxvbmdBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqUmVhZE9ubHlTdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpSZWFkT25seVN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CkBAIC0xNTE3LDExICsxNTMyLDIwIEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5U3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAg
ICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9i
amVjdCIsICJyZWFkT25seVN0cmluZ0F0dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9i
alJlYWRPbmx5U3RyaW5nQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSkp
OworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVhZE9ubHlTdHJpbmdBdHRy
R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
U3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnJlYWRPbmx5U3RyaW5nQXR0cigpKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5VGVzdE9iakF0dHJHZXR0ZXIo
RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5VGVzdE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CkBAIC0xNTM0LDExICsx
NTU4LDIwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5VGVzdE9iakF0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0
aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJyZWFkT25seVRlc3RPYmpBdHRyIik7CiAgICAgfQot
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1
bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5yZWFkT25s
eVRlc3RPYmpBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialJlYWRPbmx5VGVzdE9iakF0dHJHZXR0
ZXIoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpKTsKIH0KIAorc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9ialJlYWRPbmx5VGVzdE9iakF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAg
IFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+
d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgdGhpc09iamVjdC0+
Z2xvYmFsT2JqZWN0KCksIGltcGwucmVhZE9ubHlUZXN0T2JqQXR0cigpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JT
dGF0aWNSZWFkT25seUxvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSopOwogCiBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1JlYWRPbmx5TG9uZ0F0dHIoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CkBAIC0xNTQ2
LDEwICsxNTc5LDE3IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGlj
UmVhZE9ubHlMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvCiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNSZWFkT25seUxvbmdBdHRyR2V0dGVyKHN0
YXRlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclN0
YXRpY1JlYWRPbmx5TG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSkKK3sKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoVGVzdE9iajo6
c3RhdGljUmVhZE9ubHlMb25nQXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUqKTsKIAog
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewpA
QCAtMTU1NywxMCArMTU5NywxNyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3Rv
clN0YXRpY1N0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVgogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3RyaW5nQXR0ckdldHRlcihz
dGF0ZSkpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JT
dGF0aWNTdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUpCit7CisgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRl
LCBUZXN0T2JqOjpzdGF0aWNTdHJpbmdBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqQ29uc3RydWN0b3JUZXN0U3ViT2JqR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpDb25zdHJ1Y3RvclRlc3RTdWJPYmooRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CkBAIC0xNTczLDkgKzE2MjAsMTggQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3JUZXN0U3ViT2JqKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHQKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAg
ICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0
T2JqZWN0IiwgIlRlc3RTdWJPYmoiKTsKICAgICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1Rlc3RTdWJPYmo6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqQ29u
c3RydWN0b3JUZXN0U3ViT2JqR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKSk7
CiB9CiAKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb25zdHJ1Y3RvclRlc3RTdWJP
YmpHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBy
ZXR1cm4gSlNUZXN0U3ViT2JqOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgdGhpc09iamVj
dC0+Z2xvYmFsT2JqZWN0KCkpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
VGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUqLCBK
U1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKQEAgLTE1ODgs
MTQgKzE2NDQsMjMgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRC
eVNldHRpbmdDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLAogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0
ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAiVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmci
KTsKICAgICB9Ci0gICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzLT53cmFwcGVkKCkuZnJhbWUo
KSkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAg
U2V0dGluZ3MmIHNldHRpbmdzID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpLmZyYW1lKCktPnNldHRp
bmdzKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpUZXN0U3ViT2JqRW5h
YmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Nj
b3BlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0U3ViT2JqRW5h
YmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9i
aiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFS
QU0odGhpc09iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNF
RF9QQVJBTShzdGF0ZSk7CisgICAgaWYgKFVOTElLRUxZKCF0aGlzT2JqZWN0LT53cmFwcGVkKCku
ZnJhbWUoKSkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFNldHRpbmdzJiBz
ZXR0aW5ncyA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5mcmFtZSgpLT5zZXR0aW5ncygpOwogICAg
IGlmICghc2V0dGluZ3MudGVzdFNldHRpbmdFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U1Rlc3RTdWJPYmo6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKSkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4g
SlNUZXN0U3ViT2JqOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgdGhpc09iamVjdC0+Z2xv
YmFsT2JqZWN0KCkpOwogfQogCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqRW51bUF0
dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7
CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakVudW1BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewpAQCAtMTYwOCwxMSArMTY3
MywyMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpFbnVtQXR0cihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBybwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhy
b3dTY29wZSwgIlRlc3RPYmplY3QiLCAiZW51bUF0dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VGVzdE9iakVudW1BdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKSk7Cit9
CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpFbnVtQXR0ckdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
Cit7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNo
ZShzdGF0ZSwgaW1wbC5lbnVtQXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iakJ5dGVBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUm
IHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpCeXRlQXR0cihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKQEAg
LTE2MjUsMTEgKzE2OTksMjAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQnl0ZUF0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm8KICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJv
cigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgImJ5dGVBdHRyIik7CiAgICAgfQot
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1Rlc3RPYmpCeXRlQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcywgdGhy
b3dTY29wZSkpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQnl0ZUF0dHJH
ZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBhdXRv
JiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNO
dW1iZXIoaW1wbC5ieXRlQXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9iak9jdGV0QXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqT2N0ZXRBdHRyKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewpAQCAt
MTY0MiwxMSArMTcyNSwyMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpPY3RldEF0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcgogICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9y
KCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAib2N0ZXRBdHRyIik7CiAgICAgfQot
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1Rlc3RPYmpPY3RldEF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMsIHRo
cm93U2NvcGUpKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak9jdGV0QXR0
ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBq
c051bWJlcihpbXBsLm9jdGV0QXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9ialNob3J0QXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU2hvcnRBdHRyKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewpA
QCAtMTY1OSwxMSArMTc1MSwyMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTaG9ydEF0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcgogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVy
cm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAic2hvcnRBdHRyIik7CiAgICAg
fQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1Rlc3RPYmpTaG9ydEF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMs
IHRocm93U2NvcGUpKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialNob3J0
QXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93
U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAg
IGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQg
PSBqc051bWJlcihpbXBsLnNob3J0QXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9iakNsYW1wZWRTaG9ydEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNsYW1w
ZWRTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7CkBAIC0xNjc2LDExICsxNzc3LDIwIEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9iakNsYW1wZWRTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4g
dGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJj
bGFtcGVkU2hvcnRBdHRyIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpDbGFtcGVkU2hv
cnRBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKSk7Cit9CisKK3N0YXRp
YyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyR2V0dGVyKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3sKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuY2xh
bXBlZFNob3J0QXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakVu
Zm9yY2VSYW5nZVNob3J0QXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqRW5mb3JjZVJhbmdl
U2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQogewpAQCAtMTY5MywxMSArMTgwMywyMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRo
cm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAiZW5m
b3JjZVJhbmdlU2hvcnRBdHRyIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpFbmZvcmNl
UmFuZ2VTaG9ydEF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpKTsKK30K
Kworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakVuZm9yY2VSYW5nZVNob3J0QXR0ckdl
dHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051
bWJlcihpbXBsLmVuZm9yY2VSYW5nZVNob3J0QXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpVbnNpZ25lZFNob3J0QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKQEAgLTE3MTAsMTEgKzE4MjksMjAgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1YKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAg
IHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2Jq
ZWN0IiwgInVuc2lnbmVkU2hvcnRBdHRyIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpV
bnNpZ25lZFNob3J0QXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSkpOwor
fQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHJHZXR0
ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1i
ZXIoaW1wbC51bnNpZ25lZFNob3J0QXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9iakxvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpMb25nQXR0cihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
QEAgLTE3MjcsMTEgKzE4NTUsMjAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTG9uZ0F0dHIo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm8KICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVF
cnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgImxvbmdBdHRyIik7CiAgICAg
fQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1Rlc3RPYmpMb25nQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcywg
dGhyb3dTY29wZSkpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTG9uZ0F0
dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNOdW1iZXIoaW1wbC5sb25nQXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iakxvbmdMb25nQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTG9uZ0xvbmdBdHRy
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewpAQCAtMTc0NCwxMSArMTg4MSwyMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpMb25n
TG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLAogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVy
VHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAibG9uZ0xvbmdBdHRy
Iik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpMb25nTG9uZ0F0dHJHZXR0ZXIoc3RhdGUs
IGNhc3RlZFRoaXMsIHRocm93U2NvcGUpKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iakxvbmdMb25nQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRo
aXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRo
aXNPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAg
SlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmxvbmdMb25nQXR0cigpKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyR2V0dGVyKEV4
ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKQEAgLTE3NjEsMTEgKzE5
MDcsMjAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGgKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsIHRo
cm93U2NvcGUsICJUZXN0T2JqZWN0IiwgInVuc2lnbmVkTG9uZ0xvbmdBdHRyIik7CiAgICAgfQot
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0ckdldHRlcihzdGF0ZSwgY2Fz
dGVkVGhpcywgdGhyb3dTY29wZSkpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqVW5zaWduZWRMb25nTG9uZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2Jq
KiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJB
TSh0aGlzT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwog
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC51bnNpZ25lZExvbmdMb25nQXR0cigp
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJHZXR0ZXIo
RXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CkBAIC0xNzc4LDExICsxOTMzLDIwIEBA
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkg
ewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3Bl
LCAiVGVzdE9iamVjdCIsICJzdHJpbmdBdHRyIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RP
YmpTdHJpbmdBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKSk7Cit9CisK
K3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3sKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hl
KHN0YXRlLCBpbXBsLnN0cmluZ0F0dHIoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpVc3ZzdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93
U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdB
dHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQogewpAQCAtMTc5NSwxMSArMTk1OSwyMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpV
c3ZzdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZQog
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0
dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAidXN2c3RyaW5n
QXR0ciIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqVXN2c3RyaW5nQXR0ckdldHRlcihz
dGF0ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSkpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqVXN2c3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BB
UkFNKHRoaXNPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7
CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC51c3Zz
dHJpbmdBdHRyKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVGVzdE9i
akF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewpAQCAtMTgxMiwx
MSArMTk4NSwyMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0T2JqQXR0cihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsCiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRl
LCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJ0ZXN0T2JqQXR0ciIpOwogICAgIH0KLSAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwudGVzdE9iakF0dHIo
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNUZXN0T2JqVGVzdE9iakF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMs
IHRocm93U2NvcGUpKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialRlc3RP
YmpBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisg
ICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IHRvSlMoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnRlc3RPYmpB
dHRyKCkpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaios
IFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0
TnVsbGFibGVPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewpAQCAtMTgyOSwxMSArMjAxMSwyMCBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0
dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3Qi
LCAidGVzdE51bGxhYmxlT2JqQXR0ciIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwudGVzdE51bGxhYmxlT2JqQXR0cigpKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzLCB0
aHJvd1Njb3BlKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpUZXN0TnVs
bGFibGVPYmpBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVj
dCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVj
dCk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlMoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnRl
c3ROdWxsYWJsZU9iakF0dHIoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlu
bGluZSBKU1ZhbHVlIGpzVGVzdE9iakxlbmllbnRUZXN0T2JqQXR0ckdldHRlcihFeGVjU3RhdGUq
LCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewpAQCAtMTg0NiwxMSArMjAzNywyMCBAQCBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpcwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9Ci0g
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3Vs
dCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmxlbmllbnRU
ZXN0T2JqQXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpMZW5pZW50VGVzdE9iakF0dHJHZXR0ZXIo
c3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpKTsKK30KKworc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9iakxlbmllbnRUZXN0T2JqQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBK
U1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5V
U0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFw
cGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9i
YWxPYmplY3QoKSwgaW1wbC5sZW5pZW50VGVzdE9iakF0dHIoKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialVuZm9yZ2VhYmxlQXR0ckdl
dHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAog
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVW5mb3JnZWFibGVBdHRyKEV4ZWNTdGF0ZSogc3RhdGUs
IEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewpAQCAtMTg2MywxMSAr
MjA2MywyMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVbmZvcmdlYWJsZUF0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbAogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwg
dGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAidW5mb3JnZWFibGVBdHRyIik7CiAgICAgfQotICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1Rlc3RPYmpVbmZvcmdlYWJsZUF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMs
IHRocm93U2NvcGUpKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialVuZm9y
Z2VhYmxlQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3Qs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3Qp
OworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC51bmZvcmdlYWJsZUF0dHIoKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdO
dWxsQXNFbXB0eVN0cmluZ0dldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0clRyZWF0
aW5nTnVsbEFzRW1wdHlTdHJpbmcoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CkBAIC0xODgwLDExICsyMDg5LDIwIEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAg
ICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9i
amVjdCIsICJzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyIpOwogICAgIH0KLSAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNUZXN0T2JqU3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdHZXR0
ZXIoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpKTsKK30KKworc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nR2V0dGVy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5n
V2l0aENhY2hlKHN0YXRlLCBpbXBsLnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5n
KCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqVXN2c3RyaW5nQXR0clRy
ZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmdHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialVzdnN0cmlu
Z0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewpAQCAtMTg5NywxMSArMjExNSwyMCBA
QCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0
eVN0cmluZyhFeGVjU3RhdGUqIHN0YXRlLAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29w
ZSwgIlRlc3RPYmplY3QiLCAidXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmci
KTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialVzdnN0cmluZ0F0dHJUcmVhdGluZ051bGxB
c0VtcHR5U3RyaW5nR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKSk7Cit9CisK
K3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxs
QXNFbXB0eVN0cmluZ0dldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmpl
Y3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmpl
Y3QpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1
ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC51c3ZzdHJpbmdBdHRyVHJl
YXRpbmdOdWxsQXNFbXB0eVN0cmluZygpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2Jq
KiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iaklt
cGxlbWVudGF0aW9uRW51bUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CkBAIC0xOTE0LDExICsyMTQxLDIwIEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAg
IHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2Jq
ZWN0IiwgImltcGxlbWVudGF0aW9uRW51bUF0dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVz
dE9iakltcGxlbWVudGF0aW9uRW51bUF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93
U2NvcGUpKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakltcGxlbWVudGF0
aW9uRW51bUF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0
KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuaW1wbGVtZW50YXRpb25FbnVt
QXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialhNTE9iakF0dHJH
ZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAK
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialhNTE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CkBAIC0xOTMxLDExICsyMTY3
LDIwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialhNTE9iakF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJv
d1Njb3BlLCAiVGVzdE9iamVjdCIsICJYTUxPYmpBdHRyIik7CiAgICAgfQotICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0
YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC54bWxPYmpBdHRyKCkpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVGVzdE9ialhNTE9iakF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2Nv
cGUpKTsKIH0KIAorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialhNTE9iakF0dHJHZXR0
ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBhdXRvJiBp
bXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhz
dGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIGltcGwueG1sT2JqQXR0cigpKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ3Jl
YXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUp
OwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDcmVhdGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CkBAIC0xOTQ4LDExICsyMTkz
LDIwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNyZWF0ZShFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJv
d1Njb3BlLCAiVGVzdE9iamVjdCIsICJjcmVhdGUiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVz
dE9iakNyZWF0ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSkpOworfQorCitz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ3JlYXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAg
ICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qt
PndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQm9vbGVhbihpbXBsLmlzQ3JlYXRl
KCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5n
QXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKQEAg
LTE5NjUsMTEgKzIyMTksMjAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3Ry
aW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGkKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJv
cigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgInJlZmxlY3RlZFN0cmluZ0F0dHIi
KTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJHZXR0ZXIo
c3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpKTsKK30KKworc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVO
VVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3Jh
cHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGlt
cGwuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJl
ZmxlY3RlZHN0cmluZ2F0dHJBdHRyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpSZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaios
IFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZs
ZWN0ZWRVU1ZTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQogewpAQCAtMTk4MiwxMSArMjI0NSwyMCBAQCBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBy
ZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVj
dCIsICJyZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RP
YmpSZWZsZWN0ZWRVU1ZTdHJpbmdBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Nj
b3BlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVU1ZT
dHJpbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7
CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1c3ZzdHJpbmdhdHRyQXR0
cikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkSW50ZWdy
YWxBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHIoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
CkBAIC0xOTk5LDExICsyMjcxLDIwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3Rl
ZEludGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0CiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBl
RXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJyZWZsZWN0ZWRJbnRlZ3Jh
bEF0dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0
ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSkpOworfQorCitzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkSW50ZWdyYWxBdHRyR2V0dGVyKEV4ZWNTdGF0
ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
K3sKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNP
YmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuZ2V0
SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRpbnRlZ3JhbGF0
dHJBdHRyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRV
bnNpZ25lZEludGVncmFsQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVW5z
aWduZWRJbnRlZ3JhbEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7CkBAIC0yMDE2LDExICsyMjk3LDIwIEBAIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBy
ZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVj
dCIsICJyZWZsZWN0ZWRVbnNpZ25lZEludGVncmFsQXR0ciIpOwogICAgIH0KLSAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHJHZXR0ZXIoc3RhdGUsIGNhc3Rl
ZFRoaXMsIHRocm93U2NvcGUpKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9i
alJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpT
VGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVT
RURfUEFSQU0odGhpc09iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBw
ZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKHN0ZDo6bWF4KDAsIGltcGwuZ2V0
SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1bnNpZ25lZGlu
dGVncmFsYXR0ckF0dHIpKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwor
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpS
ZWZsZWN0ZWRCb29sZWFuQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQm9v
bGVhbkF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCiB7CkBAIC0yMDMzLDExICsyMzIzLDIwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhy
b3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJyZWZs
ZWN0ZWRCb29sZWFuQXR0ciIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqUmVmbGVjdGVk
Qm9vbGVhbkF0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpKTsKK30KKwor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyR2V0dGVy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQm9vbGVh
bihpbXBsLmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5h
bWVzOjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9ialJlZmxlY3RlZFVSTEF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2Jq
KiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJl
ZmxlY3RlZFVSTEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7CkBAIC0yMDUwLDExICsyMzQ5LDIwIEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialJlZmxlY3RlZFVSTEF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1
cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIs
ICJyZWZsZWN0ZWRVUkxBdHRyIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpSZWZsZWN0
ZWRVUkxBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKSk7Cit9CisKK3N0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyR2V0dGVyKEV4ZWNT
dGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgYXV0byYgaW1wbCA9IHRo
aXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENh
Y2hlKHN0YXRlLCBpbXBsLmdldFVSTEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxl
Y3RlZHVybGF0dHJBdHRyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwor
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpS
ZWZsZWN0ZWRVU1ZVUkxBdHRyR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2Nv
cGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRVU1ZV
UkxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewpAQCAtMjA2NywxMSArMjM3NSwyMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpSZWZsZWN0ZWRVU1ZVUkxBdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93
R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAicmVmbGVj
dGVkVVNWVVJMQXR0ciIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqUmVmbGVjdGVkVVNW
VVJMQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSkpOworfQorCitzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0ckdldHRlcihFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0
aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhD
YWNoZShzdGF0ZSwgaW1wbC5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZs
ZWN0ZWR1c3Z1cmxhdHRyQXR0cikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqUmVmbGVjdGVkU3RyaW5nQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVk
U3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFBy
b3BlcnR5TmFtZSkKIHsKQEAgLTIwODQsMTEgKzI0MDEsMjAgQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGkKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0
aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgInJl
ZmxlY3RlZFN0cmluZ0F0dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialJlZmxlY3Rl
ZFN0cmluZ0F0dHJHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpKTsKK30KKwor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHJHZXR0ZXIo
RXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBhdXRvJiBpbXBs
ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdX
aXRoQ2FjaGUoc3RhdGUsIGltcGwuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJD
b3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRTdHJpbmdBdHRyQXR0cikpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCitzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyR2V0
dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0dHIoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CkBA
IC0yMTAxLDExICsyNDI3LDIwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlZmxlY3RlZEN1
c3RvbUludGVncmFsQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWCiAgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJy
b3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJyZWZsZWN0ZWRDdXN0b21JbnRl
Z3JhbEF0dHIiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUlu
dGVncmFsQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSkpOworfQorCitz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRy
R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgYXV0
byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
TnVtYmVyKGltcGwuZ2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0
b21Db250ZW50SW50ZWdyYWxBdHRyQXR0cikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNU
ZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewpAQCAtMjExOCwxMSArMjQ1MywyMCBA
QCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0cihFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29w
ZSwgIlRlc3RPYmplY3QiLCAicmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHIiKTsKICAgICB9Ci0g
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyR2V0dGVyKHN0YXRl
LCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRl
LCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAg
VU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
KyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53
cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4oaW1wbC5oYXNBdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVu
dEJvb2xlYW5BdHRyQXR0cikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
UmVmbGVjdGVkQ3VzdG9tVVJMQXR0ckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVk
Q3VzdG9tVVJMQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKQEAgLTIxMzUsMTMgKzI0NzksMjIgQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJu
IHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAi
cmVmbGVjdGVkQ3VzdG9tVVJMQXR0ciIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUo
c3RhdGUsIGltcGwuZ2V0VVJMQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29u
dGVudFVSTEF0dHJBdHRyKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0
ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSkpOwogfQogCitzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0ckdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUp
Cit7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlz
T2JqZWN0LT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNo
ZShzdGF0ZSwgaW1wbC5nZXRVUkxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21D
b250ZW50VVJMQXR0ckF0dHIpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQogCiAjaWYgRU5BQkxF
KFRFU1RfRkVBVFVSRSkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpFbmFibGVkQXRS
dW50aW1lQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUm
IHRocm93U2NvcGUpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpFbmFibGVkQXRSdW50aW1l
QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJv
cGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwpAQCAtMjE1MywxMyArMjUw
NiwyMyBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidXRl
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhy
b3dTY29wZSwgIlRlc3RPYmplY3QiLCAiZW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSIpOwogICAg
IH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUdldHRlcihz
dGF0ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSkpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0
ZSwgaW1wbC5lbmFibGVkQXRSdW50aW1lQXR0cmlidXRlKCkpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAjZW5kaWYKIAorc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialR5cGVkQXJyYXlBdHRyR2V0dGVyKEV4ZWNTdGF0
ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworCiBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpUeXBlZEFycmF5QXR0cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
QEAgLTIxNzEsMTEgKzI1MzQsMjAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqVHlwZWRBcnJh
eUF0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHUKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVF
cnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgInR5cGVkQXJyYXlBdHRyIik7
CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNW
YWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1w
bC50eXBlZEFycmF5QXR0cigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpUeXBlZEFycmF5QXR0ckdldHRl
cihzdGF0ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSkpOworfQorCitzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0T2JqVHlwZWRBcnJheUF0dHJHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNF
RF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBl
ZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFs
T2JqZWN0KCksIGltcGwudHlwZWRBcnJheUF0dHIoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJXaXRoR2V0dGVyRXhjZXB0aW9u
R2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwog
CiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKQEAg
LTIxODgsMTMgKzI1NjAsMjIgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cldpdGhHZXR0
ZXJFeGNlcHRpb24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJv
cigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgImF0dHJXaXRoR2V0dGVyRXhjZXB0
aW9uIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqQXR0cldp
dGhHZXR0ZXJFeGNlcHRpb25HZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpKTsK
K30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJXaXRoR2V0dGVyRXhjZXB0
aW9uR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5hdHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYykpOwog
ICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgZWMpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25XaXRoTWVzc2Fn
ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsK
IAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25XaXRoTWVz
c2FnZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKIHsKQEAgLTIyMDcsMTMgKzI1ODgsMjIgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
QXR0cldpdGhHZXR0ZXJFeGNlcHRpb25XaXRoTWVzc2FnZShFeGVjU3RhdGUqIHN0YXRlLCBFbmMK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dl
dHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgImF0dHJXaXRo
R2V0dGVyRXhjZXB0aW9uV2l0aE1lc3NhZ2UiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlR2V0dGVy
KHN0YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlR2V0dGVyKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgRXhjZXB0aW9uQ29k
ZVdpdGhNZXNzYWdlIGVjOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzTnVtYmVyKGltcGwuYXR0cldpdGhHZXR0ZXJFeGNlcHRpb25XaXRoTWVzc2FnZShl
YykpOwogICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgZWMpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCitz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25HZXR0
ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewpAQCAtMjIy
NiwxMSArMjYxNiwyMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aFNldHRlckV4
Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZQogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpz
dGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAiYXR0cldpdGhTZXR0ZXJFeGNlcHRpb24i
KTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uR2V0
dGVyKHN0YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7
CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2Jq
ZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmF0dHJX
aXRoU2V0dGVyRXhjZXB0aW9uKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25XaXRoTWVzc2FnZUdldHRlcihFeGVjU3RhdGUqLCBK
U1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25XaXRoTWVzc2FnZShFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKQEAgLTIyNDMsMTEg
KzI2NDIsMjAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cldpdGhTZXR0ZXJFeGNlcHRp
b25XaXRoTWVzc2FnZShFeGVjU3RhdGUqIHN0YXRlLCBFbmMKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUs
IHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgImF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uV2l0aE1l
c3NhZ2UiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0
aW9uV2l0aE1lc3NhZ2VHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpKTsKK30K
Kworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9u
V2l0aE1lc3NhZ2VHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0
KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNOdW1iZXIoaW1wbC5hdHRyV2l0aFNldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdl
KCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cldpdGhH
ZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0
dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQogewpAQCAtMjI2MCwxMyArMjY2OCwyMiBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSgogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJu
IHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAi
c3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24iKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbkdldHRlcihz
dGF0ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSkpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFs
dWUganNUZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRl
KiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQor
eworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmlu
Z1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5zdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYykp
OwogICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgZWMpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCitzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb25H
ZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAK
IEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewpAQCAtMjI3OSwxMSArMjY5NiwyMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdB
dHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSgogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlw
ZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAic3RyaW5nQXR0cldpdGhT
ZXR0ZXJFeGNlcHRpb24iKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialN0cmluZ0F0dHJX
aXRoU2V0dGVyRXhjZXB0aW9uR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKSk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyV2l0aFNldHRl
ckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3Qs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3Qp
OworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5zdHJpbmdBdHRyV2l0aFNldHRl
ckV4Y2VwdGlvbigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakN1c3Rv
bUF0dHJHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29w
ZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakN1c3RvbUF0dHIoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CkBAIC0yMjk2LDkg
KzI3MjIsMTggQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ3VzdG9tQXR0cihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFAKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUs
IHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgImN1c3RvbUF0dHIiKTsKICAgICB9Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT5jdXN0b21BdHRyKCpzdGF0ZSkpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqQ3VzdG9tQXR0ckdldHRlcihzdGF0ZSwg
Y2FzdGVkVGhpcywgdGhyb3dTY29wZSkpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNU
ZXN0T2JqQ3VzdG9tQXR0ckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNP
YmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNP
YmplY3QpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOworICAgIHJldHVybiB0aGlzT2JqZWN0LT5jdXN0b21BdHRyKCpzdGF0ZSk7CiB9CiAK
K3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpPbmZvb0dldHRlcihFeGVjU3RhdGUqLCBK
U1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqT25mb28oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7CkBAIC0yMzExLDEwICsyNzQ2LDE4IEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9iak9uZm9vKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVyCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4g
dGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJv
bmZvbyIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iak9uZm9v
R2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKSk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpPbmZvb0dldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RP
YmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BB
UkFNKHRoaXNPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZXZlbnRIYW5kbGVy
QXR0cmlidXRlKGNhc3RlZFRoaXMtPndyYXBwZWQoKSwgZXZlbnROYW1lcygpLmZvb0V2ZW50KSk7
CisgICAgcmV0dXJuIGV2ZW50SGFuZGxlckF0dHJpYnV0ZSh0aGlzT2JqZWN0LT53cmFwcGVkKCks
IGV2ZW50TmFtZXMoKS5mb29FdmVudCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpPbndlYmtpdGZvb0dldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqT253ZWJraXRmb28oRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7
CkBAIC0yMzI3LDEwICsyNzcwLDE4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak9ud2Via2l0
Zm9vKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVF
cnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgIm9ud2Via2l0Zm9vIik7CiAg
ICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqT253ZWJraXRmb29HZXR0
ZXIoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpKTsKK30KKworc3RhdGljIGlubGluZSBK
U1ZhbHVlIGpzVGVzdE9iak9ud2Via2l0Zm9vR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURf
UEFSQU0odGhpc09iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShldmVudEhhbmRs
ZXJBdHRyaWJ1dGUoY2FzdGVkVGhpcy0+d3JhcHBlZCgpLCBldmVudE5hbWVzKCkuZm9vRXZlbnQp
KTsKKyAgICByZXR1cm4gZXZlbnRIYW5kbGVyQXR0cmlidXRlKHRoaXNPYmplY3QtPndyYXBwZWQo
KSwgZXZlbnROYW1lcygpLmZvb0V2ZW50KTsKIH0KIAorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RP
YmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
V2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewpAQCAtMjM0MywxMSArMjc5NCwyMCBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBz
dGF0ZSwgRW5jb2RlZEpTVmFsdQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAg
ICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRl
c3RPYmplY3QiLCAid2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlIik7CiAgICAgfQotICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRo
aXMsIHRocm93U2NvcGUpKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdp
dGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoq
IHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFN
KHRoaXNPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0
ZSgqc3RhdGUpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhDYWxs
V2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9i
aiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpX
aXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKQEAgLTIzNjAsMTEgKzI4
MjAsMjAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2Fs
bFdpdGhBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsIHRo
cm93U2NvcGUsICJUZXN0T2JqZWN0IiwgIndpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0
cmlidXRlIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0
ZXJDYWxsV2l0aEF0dHJpYnV0ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSkp
OworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0
dGVyQ2FsbFdpdGhBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0
aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTSh0
aGlzT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BB
UkFNKHN0YXRlKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC53aXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxs
V2l0aEF0dHJpYnV0ZSgqc3RhdGUpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSos
IEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKQEAgLTIzNzcs
MTQgKzI4NDYsMjMgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW4KICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3Rh
dGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QXR0cmlidXRlIik7CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2Jq
V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRo
aXMsIHRocm93U2NvcGUpKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBV
TlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZSgq
Y29udGV4dCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBw
ZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2Jh
bE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKCpjb250
ZXh0KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0dldHRlcihFeGVjU3RhdGUqLCBK
U1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewpAQCAtMjM5NywxMyArMjg3
NSwyMiBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVS
YWlzZXMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhy
b3dTY29wZSwgIlRlc3RPYmplY3QiLCAid2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzIik7
CiAgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqV2l0aFNjcmlwdFN0
YXRlQXR0cmlidXRlUmFpc2VzR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKSk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRy
aWJ1dGVSYWlzZXNHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0
KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKCpz
dGF0ZSwgZWMpKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCks
IGltcGwud2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKCpzdGF0ZSwgZWMpKTsKICAgICBz
ZXRET01FeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIGVjKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFp
c2VzR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUp
OwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0
dHJpYnV0ZVJhaXNlcyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKQEAgLTI0MTYsMTYgKzI5MDMsMjUgQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0
YXRlKiBzdGEKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVy
biB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0Iiwg
IndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzIik7CiAgICAgfQorICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBdHRyaWJ1dGVSYWlzZXNHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpKTsK
K30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QXR0cmlidXRlUmFpc2VzR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiog
dGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0o
dGhpc09iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYXV0byogY29udGV4
dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KQotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRl
LCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEF0dHJpYnV0ZVJhaXNlcygqY29udGV4dCwgZWMpKTsKKyAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBK
U1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBp
bXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKCpjb250ZXh0LCBl
YykpOwogICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgZWMpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCitz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
bmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKQEAgLTI0MzgsMTQg
KzI5MzQsMjMgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZShFeGVjU3QKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUs
IHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5k
U2NyaXB0U3RhdGVBdHRyaWJ1dGUiKTsKICAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmli
dXRlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKSk7Cit9CisKK3N0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlw
dFN0YXRlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09i
amVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGhpc09i
amVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CiAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0
YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAg
ICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNW
YWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1w
bC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKCpzdGF0
ZSwgKmNvbnRleHQpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53
cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCB0aGlzT2JqZWN0LT5n
bG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0
YXRlQXR0cmlidXRlKCpzdGF0ZSwgKmNvbnRleHQpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0dldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RP
YmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
IHsKQEAgLTI0NTgsMTYgKzI5NjMsMjUgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcygKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5
cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgIndpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMiKTsKICAgICB9CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzLCB0
aHJvd1Njb3BlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzR2V0dGVyKEV4
ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CiAgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CiAgICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAg
SlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
aW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFp
c2VzKCpzdGF0ZSwgKmNvbnRleHQsIGVjKSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTKHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKCpzdGF0
ZSwgKmNvbnRleHQsIGVjKSk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3Bl
LCBlYyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZUdldHRlcihFeGVj
U3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdp
dGhTcGFjZXNBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7CkBAIC0yNDgwLDE0ICsyOTk0LDIzIEBAIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRo
U3BhY2VzQXR0cmliCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBy
ZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVj
dCIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0
dHJpYnV0ZSIpOwogICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialdp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRl
R2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKSk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0
YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoq
IHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFN
KHRoaXNPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpOwogICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwot
ICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCksIGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFj
ZXNBdHRyaWJ1dGUoKnN0YXRlLCAqY29udGV4dCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3Rh
dGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlKCpzdGF0ZSwgKmNvbnRleHQp
KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZUdldHRlcihFeGVjU3Rh
dGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZShFeGVj
U3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsK
QEAgLTI1MDAsMTMgKzMwMjMsMjIgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlw
dEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXQKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVF
cnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgIndpdGhTY3JpcHRBcmd1bWVu
dHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3Rh
Y2tBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENh
bGxTdGFja0F0dHJpYnV0ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSkpOwog
fQogCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0Fu
ZENhbGxTdGFja0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRo
aXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRo
aXNPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwg
aW1wbC53aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlKCkpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKK3N0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVz
dE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpDb25kaXRpb25hbEF0dHIxKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwpAQCAtMjUx
OCwxNCArMzA1MCwyNCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIx
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYQogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpz
dGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAiY29uZGl0aW9uYWxBdHRyMSIpOwogICAg
IH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMUdldHRlcihzdGF0ZSwgY2Fz
dGVkVGhpcywgdGhyb3dTY29wZSkpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
T2JqQ29uZGl0aW9uYWxBdHRyMUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRo
aXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRo
aXNPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAg
SlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLmNvbmRpdGlvbmFsQXR0cjEoKSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShDb25kaXRpb24yKQor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjJHZXR0ZXIoRXhl
Y1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CisKIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7CkBAIC0yNTM3LDE0ICszMDc5LDI0IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNv
bmRpdGlvbmFsQXR0cjIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhCiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJjb25kaXRpb25h
bEF0dHIyIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyR2V0
dGVyKHN0YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBV
TlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndy
YXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuY29uZGl0aW9uYWxB
dHRyMigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgfHwgRU5BQkxF
KENvbmRpdGlvbjIpCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxB
dHRyM0dldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
KTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMyhFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBW
TSYgdm0gPSBzdGF0ZS0+dm0oKTsKQEAgLTI1NTYsMTQgKzMxMDgsMjQgQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmEKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJl
dHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0
IiwgImNvbmRpdGlvbmFsQXR0cjMiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakNvbmRp
dGlvbmFsQXR0cjNHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpKTsKK30KKwor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjNHZXR0ZXIoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQoreworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1w
bC5jb25kaXRpb25hbEF0dHIzKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDb25kaXRp
b24xKQorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjRDb25z
dHJ1Y3RvckdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwpAQCAtMjU3NSwxMiArMzEzNywyMiBA
QCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVgogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29w
ZSwgIlRlc3RPYmplY3QiLCAiY29uZGl0aW9uYWxBdHRyNCIpOwogICAgIH0KLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE9iamVjdEE6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgp
LCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnVjdG9yR2V0dGVyKHN0YXRlLCBjYXN0
ZWRUaGlzLCB0aHJvd1Njb3BlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNU
ZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNF
RF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICByZXR1cm4gSlNUZXN0T2JqZWN0QTo6Z2V0Q29uc3Ry
dWN0b3Ioc3RhdGUtPnZtKCksIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKTsKIH0KIAogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkgJiYgRU5BQkxFKENvbmRpdGlvbjIpCitzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yR2V0
dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOworCiBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3IoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CkBAIC0yNTkyLDEyICszMTY0LDIyIEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAg
ICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9i
amVjdCIsICJjb25kaXRpb25hbEF0dHI1Iik7CiAgICAgfQotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNUZXN0T2JqZWN0Qjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIGNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RP
YmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3JHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMsIHRo
cm93U2NvcGUpKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakNvbmRpdGlv
bmFsQXR0cjVDb25zdHJ1Y3RvckdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRo
aXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRo
aXNPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIHJldHVybiBKU1Rlc3RPYmplY3RCOjpnZXRDb25zdHJ1Y3RvcihzdGF0
ZS0+dm0oKSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCkpOwogfQogCiAjZW5kaWYKIAogI2lm
IEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKK3N0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3JHZXR0ZXIoRXhlY1N0
YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CisKIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKQEAgLTI2MDksMTEgKzMxOTEsMjEgQEAgRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1YKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0
aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgImNv
bmRpdGlvbmFsQXR0cjYiKTsKICAgICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rl
c3RPYmplY3RDOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgY2FzdGVkVGhpcy0+Z2xvYmFs
T2JqZWN0KCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9iakNvbmRpdGlv
bmFsQXR0cjZDb25zdHJ1Y3RvckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSkp
OworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNv
bnN0cnVjdG9yR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7
CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgcmV0dXJuIEpTVGVzdE9iamVjdEM6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCB0
aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSk7CiB9CiAKICNlbmRpZgogCitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMUdldHRlcihFeGVjU3RhdGUqLCBKU1Rl
c3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqQ2FjaGVkQXR0cmlidXRlMShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKQEAgLTI2
MjUsMTQgKzMyMTcsMjMgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRl
MShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmEKICAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigq
c3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgImNhY2hlZEF0dHJpYnV0ZTEiKTsKICAg
ICB9Ci0gICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUgPSBjYXN0ZWRUaGlzLT5tX2NhY2hlZEF0
dHJpYnV0ZTEuZ2V0KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FjaGVkVmFs
dWUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUxR2V0dGVyKHN0YXRlLCBj
YXN0ZWRUaGlzLCB0aHJvd1Njb3BlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpDYWNoZWRBdHRyaWJ1dGUxR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiog
dGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0o
dGhpc09iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CisgICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUgPSB0aGlzT2JqZWN0LT5t
X2NhY2hlZEF0dHJpYnV0ZTEuZ2V0KCkpCisgICAgICAgIHJldHVybiBjYWNoZWRWYWx1ZTsKKyAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0
ID0gaW1wbC5jYWNoZWRBdHRyaWJ1dGUxKCk7Ci0gICAgY2FzdGVkVGhpcy0+bV9jYWNoZWRBdHRy
aWJ1dGUxLnNldChzdGF0ZS0+dm0oKSwgY2FzdGVkVGhpcywgcmVzdWx0KTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgdGhpc09iamVjdC0+bV9jYWNoZWRBdHRyaWJ1
dGUxLnNldChzdGF0ZS0+dm0oKSwgdGhpc09iamVjdCwgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRl
MkdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsK
IAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKQEAgLTI2NDUs
MTQgKzMyNDYsMjMgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ2FjaGVkQXR0cmlidXRlMihF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmEKICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3Rh
dGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgImNhY2hlZEF0dHJpYnV0ZTIiKTsKICAgICB9
Ci0gICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUgPSBjYXN0ZWRUaGlzLT5tX2NhY2hlZEF0dHJp
YnV0ZTIuZ2V0KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FjaGVkVmFsdWUp
OwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1Rlc3RPYmpDYWNoZWRBdHRyaWJ1dGUyR2V0dGVyKHN0YXRlLCBjYXN0
ZWRUaGlzLCB0aHJvd1Njb3BlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RP
YmpDYWNoZWRBdHRyaWJ1dGUyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhp
c09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGhp
c09iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CisgICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUgPSB0aGlzT2JqZWN0LT5tX2Nh
Y2hlZEF0dHJpYnV0ZTIuZ2V0KCkpCisgICAgICAgIHJldHVybiBjYWNoZWRWYWx1ZTsKKyAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0g
aW1wbC5jYWNoZWRBdHRyaWJ1dGUyKCk7Ci0gICAgY2FzdGVkVGhpcy0+bV9jYWNoZWRBdHRyaWJ1
dGUyLnNldChzdGF0ZS0+dm0oKSwgY2FzdGVkVGhpcywgcmVzdWx0KTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgdGhpc09iamVjdC0+bV9jYWNoZWRBdHRyaWJ1dGUy
LnNldChzdGF0ZS0+dm0oKSwgdGhpc09iamVjdCwgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0
OwogfQogCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQW55QXR0cmlidXRlR2V0dGVy
KEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBbnlBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CkBAIC0yNjY1LDExICszMjc1LDIw
IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakFueUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Nj
b3BlLCAiVGVzdE9iamVjdCIsICJhbnlBdHRyaWJ1dGUiKTsKICAgICB9Ci0gICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VGVzdE9iakFueUF0dHJpYnV0ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSkp
OworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqQW55QXR0cmlidXRlR2V0dGVy
KEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwuYW55
QXR0cmlidXRlKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb250ZW50
RG9jdW1lbnRHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dT
Y29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnRlbnREb2N1bWVudChFeGVjU3Rh
dGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKQEAg
LTI2ODIsMTAgKzMzMDEsMTkgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29udGVudERvY3Vt
ZW50KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWwKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJv
cigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgImNvbnRlbnREb2N1bWVudCIpOwog
ICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoc2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUoc3RhdGUsIGltcGwuY29u
dGVudERvY3VtZW50KCkpID8gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCks
IGltcGwuY29udGVudERvY3VtZW50KCkpIDoganNOdWxsKCkpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNUZXN0T2JqQ29udGVudERvY3VtZW50R2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlz
LCB0aHJvd1Njb3BlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpDb250
ZW50RG9jdW1lbnRHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0
LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0
KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIHJldHVybiBz
aG91bGRBbGxvd0FjY2Vzc1RvTm9kZShzdGF0ZSwgaW1wbC5jb250ZW50RG9jdW1lbnQoKSkgPyB0
b0pTKHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgaW1wbC5jb250ZW50RG9jdW1l
bnQoKSkgOiBqc051bGwoKTsKIH0KIAorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak11
dGFibGVQb2ludEdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTXV0YWJsZVBvaW50KEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewpAQCAt
MjY5OCwxMSArMzMyNiwyMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpNdXRhYmxlUG9pbnQo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLAogICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9y
KCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAibXV0YWJsZVBvaW50Iik7CiAgICAg
fQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSBy
ZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgU1ZHU3RhdGlj
UHJvcGVydHlUZWFyT2ZmPFRlc3RPYmosIFNWR1BvaW50Pjo6Y3JlYXRlKGltcGwsIGltcGwubXV0
YWJsZVBvaW50KCksICZUZXN0T2JqOjp1cGRhdGVNdXRhYmxlUG9pbnQpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rl
c3RPYmpNdXRhYmxlUG9pbnRHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpKTsK
K30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak11dGFibGVQb2ludEdldHRlcihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRl
LCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgU1ZHU3RhdGljUHJvcGVydHlUZWFyT2ZmPFRl
c3RPYmosIFNWR1BvaW50Pjo6Y3JlYXRlKGltcGwsIGltcGwubXV0YWJsZVBvaW50KCksICZUZXN0
T2JqOjp1cGRhdGVNdXRhYmxlUG9pbnQpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCitzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqSW1tdXRhYmxlUG9pbnRHZXR0ZXIoRXhlY1N0YXRl
KiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9iakltbXV0YWJsZVBvaW50KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewpAQCAtMjcxNSwxMSArMzM1MiwyMCBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpJbW11dGFibGVQb2ludChFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAg
ICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRl
c3RPYmplY3QiLCAiaW1tdXRhYmxlUG9pbnQiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBTVkdQcm9wZXJ0eVRlYXJPZmY8U1ZHUG9pbnQ+Ojpj
cmVhdGUoaW1wbC5pbW11dGFibGVQb2ludCgpKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqSW1tdXRhYmxl
UG9pbnRHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpKTsKK30KKworc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakltbXV0YWJsZVBvaW50R2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sK
KyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3QtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIHRoaXNPYmpl
Y3QtPmdsb2JhbE9iamVjdCgpLCBTVkdQcm9wZXJ0eVRlYXJPZmY8U1ZHUG9pbnQ+OjpjcmVhdGUo
aW1wbC5pbW11dGFibGVQb2ludCgpKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE9ialN0cmF3YmVycnlHZXR0ZXIoRXhlY1N0YXRlKiwgSlNU
ZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialN0cmF3YmVycnkoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCiB7CkBAIC0yNzMyLDExICszMzc4LDIwIEBAIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialN0cmF3YmVycnkoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1
cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIs
ICJzdHJhd2JlcnJ5Iik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpTdHJhd2JlcnJ5R2V0
dGVyKHN0YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RPYmpTdHJhd2JlcnJ5R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVz
dE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURf
UEFSQU0odGhpc09iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQo
KTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuYmx1ZWJlcnJ5KCkpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqRGVzY3JpcHRpb25HZXR0ZXIoRXhlY1N0
YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iakRlc2NyaXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewpAQCAtMjc0OSwxMSArMzQwNCwyMCBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpEZXNjcmlwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAg
ICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVz
dE9iamVjdCIsICJkZXNjcmlwdGlvbiIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqRGVz
Y3JpcHRpb25HZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpKTsKK30KKworc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakRlc2NyaXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sK
KyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmpl
Y3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGltcGwuZGVzY3Jp
cHRpb24oKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpJZEdldHRlcihF
eGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqSWQoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CkBAIC0yNzY2LDExICszNDMwLDIwIEBAIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9iaklkKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAg
ICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9i
amVjdCIsICJpZCIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqSWRHZXR0ZXIoc3RhdGUs
IGNhc3RlZFRoaXMsIHRocm93U2NvcGUpKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdE9iaklkR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7
CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzTnVtYmVyKGltcGwuaWQoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c1Rlc3RPYmpIYXNoR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpIYXNoKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewpAQCAtMjc4Mywx
MSArMzQ1NiwyMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpIYXNoKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydAogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0
ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAiaGFzaCIpOwogICAgIH0KLSAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNUZXN0T2JqSGFzaEdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSkpOworfQor
CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqSGFzaEdldHRlcihFeGVjU3RhdGUqIHN0
YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0
LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0
ZSwgaW1wbC5oYXNoKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUmVw
bGFjZWFibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialJlcGxhY2VhYmxlQXR0
cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewpAQCAtMjgwMCwxMSArMzQ4MiwyMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpSZXBsYWNlYWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93
R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAicmVwbGFj
ZWFibGVBdHRyaWJ1dGUiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9ialJlcGxhY2VhYmxl
QXR0cmlidXRlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKSk7Cit9CisKK3N0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpSZXBsYWNlYWJsZUF0dHJpYnV0ZUdldHRlcihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihp
bXBsLnJlcGxhY2VhYmxlQXR0cmlidXRlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0T2JqTnVsbGFibGVEb3VibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0
T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
ak51bGxhYmxlRG91YmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewpAQCAtMjgxNywxMSArMzUwOCwyMCBAQCBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZURvdWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAg
ICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRl
c3RPYmplY3QiLCAibnVsbGFibGVEb3VibGVBdHRyaWJ1dGUiKTsKICAgICB9Ci0gICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVGVzdE9iak51bGxhYmxlRG91YmxlQXR0cmlidXRlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlz
LCB0aHJvd1Njb3BlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxs
YWJsZURvdWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRo
aXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRo
aXNPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAg
SlNWYWx1ZSByZXN1bHQgPSB0b051bGxhYmxlSlNOdW1iZXIoaW1wbC5udWxsYWJsZURvdWJsZUF0
dHJpYnV0ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxl
TG9uZ0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVMb25nQXR0cmli
dXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQogewpAQCAtMjgzNCwxMSArMzUzNCwyMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpO
dWxsYWJsZUxvbmdBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdAog
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0
dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAibnVsbGFibGVM
b25nQXR0cmlidXRlIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpOdWxsYWJsZUxvbmdB
dHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpKTsKK30KKworc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlTG9uZ0F0dHJpYnV0ZUdldHRlcihF
eGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93
U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIGF1dG8mIGltcGwg
PSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSB0b051bGxhYmxl
SlNOdW1iZXIoaW1wbC5udWxsYWJsZUxvbmdBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUJvb2xlYW5BdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0
YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9iak51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKQEAgLTI4NTEsMTEgKzM1
NjAsMjAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVCb29sZWFuQXR0cmlidXRl
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHUKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsIHRo
cm93U2NvcGUsICJUZXN0T2JqZWN0IiwgIm51bGxhYmxlQm9vbGVhbkF0dHJpYnV0ZSIpOwogICAg
IH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqTnVsbGFibGVCb29sZWFuQXR0cmlidXRlR2V0dGVyKHN0
YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RPYmpOdWxsYWJsZUJvb2xlYW5BdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAg
IFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+
d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKGltcGwubnVsbGFibGVC
b29sZWFuQXR0cmlidXRlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2Jq
TnVsbGFibGVTdHJpbmdBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxl
U3RyaW5nQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewpAQCAtMjg2OCwxMSArMzU4NiwyMCBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0
dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3Qi
LCAibnVsbGFibGVTdHJpbmdBdHRyaWJ1dGUiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdE9i
ak51bGxhYmxlU3RyaW5nQXR0cmlidXRlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Nj
b3BlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmlu
Z0F0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3Qs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3Qp
OworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc1N0cmluZ09yTnVsbChzdGF0ZSwgaW1wbC5udWxsYWJsZVN0cmluZ0F0dHJpYnV0
ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlTG9uZ1Nl
dHRhYmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdE9iaiosIFRocm93U2NvcGUm
IHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZUxvbmdTZXR0
YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKIHsKQEAgLTI4ODUsMTEgKzM2MTIsMjAgQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEoKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVy
biB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0Iiwg
Im51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rl
c3RPYmpOdWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhp
cywgdGhyb3dTY29wZSkpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVs
bGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0
T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9Q
QVJBTSh0aGlzT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgp
OwogICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9OdWxsYWJsZUpTTnVtYmVyKGltcGwubnVsbGFibGVM
b25nU2V0dGFibGVBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rl
c3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSosIEpT
VGVzdE9iaiosIFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewpAQCAtMjkwMiwxMSArMzYz
OCwyMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0
cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhy
b3dTY29wZSwgIlRlc3RPYmplY3QiLCAibnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSIp
OwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJp
YnV0ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSkpOworfQorCitzdGF0aWMg
aW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZUdl
dHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUm
IHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIGF1dG8m
IGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0
cmluZ09yTnVsbChzdGF0ZSwgaW1wbC5udWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlKCkp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0
OwogfQogCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdT
ZXR0YWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVVU1ZTdHJp
bmdTZXR0YWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKQEAgLTI5MTksMTEgKzM2NjQsMjAgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShFeGVjU3Rh
dGUqIHN0YXRlLCBFbmMKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAg
IHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2Jq
ZWN0IiwgIm51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUiKTsKICAgICB9Ci0gICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVGVzdE9iak51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXIo
c3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpKTsKK30KKworc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9iak51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGVHZXR0ZXIoRXhl
Y1N0YXRlKiBzdGF0ZSwgSlNUZXN0T2JqKiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlKQoreworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBhdXRvJiBpbXBsID0g
dGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdPck51
bGwoc3RhdGUsIGltcGwubnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSgpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nVmFsdWVHZXR0
ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSk7CiAKIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nVmFsdWUoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CkBAIC0yOTM2LDEz
ICszNjkwLDIyIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iak51bGxhYmxlU3RyaW5nVmFsdWUo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpCiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRl
LCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJudWxsYWJsZVN0cmluZ1ZhbHVlIik7CiAgICAg
fQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1
ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSkpOworfQorCitzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZUdldHRlcihFeGVjU3RhdGUq
IHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7
CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvTnVsbGFi
bGVKU051bWJlcihpbXBsLm51bGxhYmxlU3RyaW5nVmFsdWUoZWMpKTsKICAgICBzZXRET01FeGNl
cHRpb24oc3RhdGUsIHRocm93U2NvcGUsIGVjKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGlubGluZSBKU1ZhbHVl
IGpzVGVzdE9iakF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQog
ewpAQCAtMjk1NSwxMSArMzcxOCwyMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1
dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcgogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlw
ZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAiYXR0cmlidXRlIik7CiAg
ICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1Rlc3RPYmpBdHRyaWJ1dGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRo
aXMsIHRocm93U2NvcGUpKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0
dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOwor
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwor
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1
bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5hdHRyaWJ1dGUoKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3N0
YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlw
ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsK
IAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5cGUo
RXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
CiB7CkBAIC0yOTcyLDExICszNzQ0LDIwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakF0dHJp
YnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKCiAgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJU
eXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJhdHRyaWJ1dGVXaXRo
UmVzZXJ2ZWRFbnVtVHlwZSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqQXR0cmlidXRl
V2l0aFJlc2VydmVkRW51bVR5cGVHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUp
KTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNl
cnZlZEVudW1UeXBlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVj
dCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVj
dCk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLmF0dHJpYnV0ZVdpdGhSZXNl
cnZlZEVudW1UeXBlKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUHV0
Rm9yd2FyZHNBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNUZXN0T2JqKiwgVGhyb3dTY29w
ZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialB1dEZvcndhcmRzQXR0
cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVy
dHlOYW1lKQogewpAQCAtMjk4OSwxMSArMzc3MCwyMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQdXRGb3J3YXJkc0F0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93
R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAicHV0Rm9y
d2FyZHNBdHRyaWJ1dGUiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCBpbXBsLnB1dEZvcndhcmRzQXR0cmlidXRlKCkpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVz
dE9ialB1dEZvcndhcmRzQXR0cmlidXRlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Nj
b3BlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpQdXRGb3J3YXJkc0F0
dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRo
cm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3QpOwor
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwor
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSB0b0pTKHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgaW1wbC5wdXRGb3J3
YXJkc0F0dHJpYnV0ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZUdldHRlcihFeGVj
U3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKQEAgLTMwMDYs
MTEgKzM3OTYsMjAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJs
ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlMKICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3Rh
dGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgInB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1
dGUiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
LCBpbXBsLnB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2Jq
UHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJpYnV0ZUdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcywgdGhy
b3dTY29wZSkpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0T2JqUHV0Rm9yd2Fy
ZHNOdWxsYWJsZUF0dHJpYnV0ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRo
aXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRo
aXNPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFS
QU0oc3RhdGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwg
aW1wbC5wdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlKCkpOworICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpYnV0
ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RPYmoqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsK
IAogRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqU3RyaW5naWZpZXJBdHRyaWJ1dGUoRXhlY1N0YXRl
KiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CkBAIC0z
MDIzLDExICszODIyLDE4IEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialN0cmluZ2lmaWVyQXR0
cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoCiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3Io
KnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iamVjdCIsICJzdHJpbmdpZmllckF0dHJpYnV0ZSIp
OwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwuc3RyaW5naWZpZXJB
dHRyaWJ1dGUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0T2JqU3RyaW5naWZpZXJBdHRyaWJ1dGVHZXR0ZXIo
c3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpKTsKIH0KIAorc3RhdGljIGlubGluZSBKU1Zh
bHVlIGpzVGVzdE9ialN0cmluZ2lmaWVyQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUs
IEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBV
TlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwor
ICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndy
YXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBp
bXBsLnN0cmluZ2lmaWVyQXR0cmlidXRlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CiAKIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewpAQCAtNzM3NSw2ICs4MTgxLDI1
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25Ub1N0cmluZyhFeGVjU3RhdGUqIHN0YXRlCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOwogfQogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uVG9KU09OKEV4ZWNTdGF0ZSogc3RhdGUpCit7CisgICAgQVNTRVJUKHN0YXRl
KTsKKyAgICBhdXRvIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHN0YXRl
LT50aGlzVmFsdWUoKSk7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSl7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCB0aHJv
d1Njb3BlLCAiVGVzdE9iaiIsICJ0b0pTT04iKTsKKyAgICB9CisgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CisKKyAgICBhdXRvKiBy
ZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChzdGF0ZSk7CisgICAgcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAicmVhZE9ubHlTdHJpbmdBdHRyIiks
IGpzVGVzdE9ialJlYWRPbmx5U3RyaW5nQXR0ckdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcywgdGhy
b3dTY29wZSkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgImVudW1BdHRyIiksIGpzVGVzdE9iakVudW1BdHRyR2V0dGVyKHN0YXRlLCBjYXN0
ZWRUaGlzLCB0aHJvd1Njb3BlKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnZtLCAibG9uZ0F0dHIiKSwganNUZXN0T2JqTG9uZ0F0dHJHZXR0ZXIo
c3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjcmVhdGUiKSwganNUZXN0T2JqQ3JlYXRl
R2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKSk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOworfQorCiB2b2lkIEpTVGVzdE9iajo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1dG8qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oY2VsbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCmluZGV4IGNlNjBlYjQ0MWY3MDVi
Y2Y5NGYyMGVlOGE5MTg3NTY1MDhlMTMyNmEuLjg4YTVmNjJjNTEyYzRlNTg1MjQ5Yjk5ZmQxNTgx
NzI2OTAxNTFiMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UuY3BwCkBAIC0xMzIsNiArMTMyLDggQEAgdm9pZCBKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCiAg
ICAgdGhpc09iamVjdC0+SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjp+SlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUg
SlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZUdldHRlcihF
eGVjU3RhdGUqLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqLCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKTsKKwogRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlVmFsdWUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CkBAIC0x
NDMsMTEgKzE0NSwyMCBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2VWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZAogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpz
dGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UiLCAi
dmFsdWUiKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
LSAgICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwudmFsdWUoKSA/IGltcGwudmFsdWUoKS0+ZGVzZXJp
YWxpemUoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCAwKSA6IGpzTnVsbCgpOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlR2V0dGVyKHN0
YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1ZUdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHRoaXNPYmpl
Y3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmpl
Y3QpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgSlNWYWx1
ZSByZXN1bHQgPSBpbXBsLnZhbHVlKCkgPyBpbXBsLnZhbHVlKCktPmRlc2VyaWFsaXplKHN0YXRl
LCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgMCkgOiBqc051bGwoKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlUmVhZG9ubHlWYWx1ZUdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAog
RW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUmVhZG9u
bHlWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKIHsKQEAgLTE2MCwxMSArMTcxLDIwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVJlYWRvbmx5VmFsdWUoRXhlY1N0YXRlKiBzdGF0
CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dH
ZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZSIsICJyZWFkb25seVZhbHVlIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBsLnJlYWRv
bmx5VmFsdWUoKSA/IGltcGwucmVhZG9ubHlWYWx1ZSgpLT5kZXNlcmlhbGl6ZShzdGF0ZSwgY2Fz
dGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIDApIDoganNOdWxsKCk7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUmVhZG9ubHlWYWx1ZUdldHRlcihzdGF0ZSwgY2Fz
dGVkVGhpcywgdGhyb3dTY29wZSkpOwogfQogCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUmVhZG9ubHlWYWx1ZUdldHRlcihFeGVjU3Rh
dGUqIHN0YXRlLCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIHRoaXNPYmpl
Y3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmpl
Y3QpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgSlNWYWx1
ZSByZXN1bHQgPSBpbXBsLnJlYWRvbmx5VmFsdWUoKSA/IGltcGwucmVhZG9ubHlWYWx1ZSgpLT5k
ZXNlcmlhbGl6ZShzdGF0ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIDApIDoganNOdWxs
KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlR2V0dGVyKEV4ZWNTdGF0
ZSosIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSosIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2VDYWNoZWRWYWx1ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKQEAgLTE3NywxNCArMTk3LDIzIEBAIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hlZFZhbHVlKEV4ZWNT
dGF0ZSogc3RhdGUsCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICBy
ZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSIsICJjYWNoZWRWYWx1ZSIpOwogICAgIH0KLSAgICBp
ZiAoSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IGNhc3RlZFRoaXMtPm1fY2FjaGVkVmFsdWUuZ2V0KCkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FjaGVkVmFsdWUpOwotICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBs
LmNhY2hlZFZhbHVlKCkgPyBpbXBsLmNhY2hlZFZhbHVlKCktPmRlc2VyaWFsaXplKHN0YXRlLCBj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgMCkgOiBqc051bGwoKTsKLSAgICBjYXN0ZWRUaGlz
LT5tX2NhY2hlZFZhbHVlLnNldChzdGF0ZS0+dm0oKSwgY2FzdGVkVGhpcywgcmVzdWx0KTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRWYWx1ZUdldHRl
cihzdGF0ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSkpOwogfQogCitzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFsdWVHZXR0
ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
KiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJB
TSh0aGlzT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VE
X1BBUkFNKHN0YXRlKTsKKyAgICBpZiAoSlNWYWx1ZSBjYWNoZWRWYWx1ZSA9IHRoaXNPYmplY3Qt
Pm1fY2FjaGVkVmFsdWUuZ2V0KCkpCisgICAgICAgIHJldHVybiBjYWNoZWRWYWx1ZTsKKyAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0g
aW1wbC5jYWNoZWRWYWx1ZSgpID8gaW1wbC5jYWNoZWRWYWx1ZSgpLT5kZXNlcmlhbGl6ZShzdGF0
ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIDApIDoganNOdWxsKCk7CisgICAgdGhpc09i
amVjdC0+bV9jYWNoZWRWYWx1ZS5zZXQoc3RhdGUtPnZtKCksIHRoaXNPYmplY3QsIHJlc3VsdCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBvcnRzR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSosIFRocm93U2NvcGUmIHRocm93U2NvcGUp
OwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VQ
b3J0cyhFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKIHsKQEAgLTE5NywxMSArMjI2LDIwIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVBvcnRzKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kCiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZSIsICJwb3J0cyIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNBcnJheShzdGF0ZSwgY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwucG9ydHMoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlUG9ydHNHZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMsIHRo
cm93U2NvcGUpKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZVBvcnRzR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhy
b3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7CisgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgYXV0byYgaW1w
bCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQXJyYXko
c3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnBvcnRzKCkpOworICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRSZWFkb25seVZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSos
IEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSosIFRocm93U2NvcGUmIHRocm93
U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VDYWNoZWRSZWFkb25seVZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewpAQCAtMjE0LDE0ICsyNTIsMjEgQEAgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkUmVhZG9u
bHlWYWx1ZShFeGVjU3RhdGUKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAg
ICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlIiwgImNhY2hlZFJlYWRvbmx5VmFsdWUiKTsK
ICAgICB9Ci0gICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUgPSBjYXN0ZWRUaGlzLT5tX2NhY2hl
ZFJlYWRvbmx5VmFsdWUuZ2V0KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2Fj
aGVkVmFsdWUpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAg
SlNWYWx1ZSByZXN1bHQgPSBpbXBsLmNhY2hlZFJlYWRvbmx5VmFsdWUoKSA/IGltcGwuY2FjaGVk
UmVhZG9ubHlWYWx1ZSgpLT5kZXNlcmlhbGl6ZShzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2Jq
ZWN0KCksIDApIDoganNOdWxsKCk7Ci0gICAgY2FzdGVkVGhpcy0+bV9jYWNoZWRSZWFkb25seVZh
bHVlLnNldChzdGF0ZS0+dm0oKSwgY2FzdGVkVGhpcywgcmVzdWx0KTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRSZWFkb25seVZhbHVlR2V0dGVyKHN0
YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VDYWNoZWRSZWFkb25seVZhbHVl
R2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZSogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURf
UEFSQU0odGhpc09iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUgPSB0aGlzT2Jq
ZWN0LT5tX2NhY2hlZFJlYWRvbmx5VmFsdWUuZ2V0KCkpCisgICAgICAgIHJldHVybiBjYWNoZWRW
YWx1ZTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0gaW1wbC5jYWNoZWRSZWFkb25seVZhbHVlKCkgPyBpbXBsLmNhY2hlZFJlYWRv
bmx5VmFsdWUoKS0+ZGVzZXJpYWxpemUoc3RhdGUsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgp
LCAwKSA6IGpzTnVsbCgpOworICAgIHRoaXNPYmplY3QtPm1fY2FjaGVkUmVhZG9ubHlWYWx1ZS5z
ZXQoc3RhdGUtPnZtKCksIHRoaXNPYmplY3QsIHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KIAogRW5jb2RlZEpTVmFsdWUganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAppbmRleCA1NjlhMDcxMzFhOGQ3MjNl
ZmVhYTRjY2QwYjBjY2Q3YzJhMTQxMjEyLi45YTNjMTBlMWRmMjRlYzAxZGQ5N2U5NmJiOGI1NDJl
OThjNGJmNTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAKQEAgLTIxMCw2ICsyMTAsOCBAQCB2b2lk
IEpTVGVzdFR5cGVkZWZzOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogICAgIHRoaXNPYmpl
Y3QtPkpTVGVzdFR5cGVkZWZzOjp+SlNUZXN0VHlwZWRlZnMoKTsKIH0KIAorc3RhdGljIGlubGlu
ZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0dHJHZXR0ZXIoRXhlY1N0
YXRlKiwgSlNUZXN0VHlwZWRlZnMqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKKwogRW5jb2Rl
ZEpTVmFsdWUganNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXR0cihFeGVjU3RhdGUqIHN0
YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKICAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKQEAgLTIyMSwxMSArMjIzLDIwIEBAIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdFR5cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4g
dGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdFR5cGVkZWZzIiwg
InVuc2lnbmVkTG9uZ0xvbmdBdHRyIik7CiAgICAgfQotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Rlc3RUeXBlZGVm
c1Vuc2lnbmVkTG9uZ0xvbmdBdHRyR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3Bl
KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9u
Z0xvbmdBdHRyR2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiB0aGlzT2Jq
ZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2Jq
ZWN0KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC51bnNpZ25lZExvbmdMb25nQXR0cigpKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzSW1tdXRhYmxlU2VyaWFsaXplZFNj
cmlwdFZhbHVlR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdFR5cGVkZWZzKiwgVGhyb3dTY29wZSYg
dGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzSW1tdXRhYmxlU2Vy
aWFsaXplZFNjcmlwdFZhbHVlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgUHJvcGVydHlOYW1lKQogewpAQCAtMjM4LDExICsyNDksMjAgQEAgRW5jb2RlZEpTVmFs
dWUganNUZXN0VHlwZWRlZnNJbW11dGFibGVTZXJpYWxpemVkU2NyaXB0VmFsdWUoRXhlY1N0YXRl
KiBzdGF0ZSwgRW4KICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJl
dHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0VHlwZWRl
ZnMiLCAiaW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlIik7CiAgICAgfQotICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBpbXBs
LmltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSgpID8gaW1wbC5pbW11dGFibGVTZXJpYWxp
emVkU2NyaXB0VmFsdWUoKS0+ZGVzZXJpYWxpemUoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpLCAwKSA6IGpzTnVsbCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdFR5cGVkZWZzSW1tdXRhYmxlU2Vy
aWFsaXplZFNjcmlwdFZhbHVlR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKSk7
CiB9CiAKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyog
dGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0o
dGhpc09iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9Q
QVJBTShzdGF0ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKTsKKyAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGltcGwuaW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlKCkg
PyBpbXBsLmltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSgpLT5kZXNlcmlhbGl6ZShzdGF0
ZSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIDApIDoganNOdWxsKCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQ29uc3Ry
dWN0b3JUZXN0U3ViT2JqR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVGVzdFR5cGVkZWZzKiwgVGhyb3dT
Y29wZSYgdGhyb3dTY29wZSk7CiAKIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQ29uc3Ry
dWN0b3JUZXN0U3ViT2JqKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewpAQCAtMjU1LDkgKzI3NSwxOCBAQCBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yVGVzdFN1Yk9iaihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYQogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJu
IHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RUeXBlZGVmcyIs
ICJUZXN0U3ViT2JqIik7CiAgICAgfQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0
U3ViT2JqOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdFR5cGVkZWZzQ29uc3Ry
dWN0b3JUZXN0U3ViT2JqR2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKSk7Cit9
CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yVGVzdFN1
Yk9iakdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyogdGhpc09iamVjdCwg
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7
CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CisgICAgcmV0dXJuIEpTVGVzdFN1Yk9iajo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIHRo
aXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKTsKIH0KIAorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiwgSlNU
ZXN0VHlwZWRlZnMqLCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKTsKIAogRW5jb2RlZEpTVmFsdWUg
anNUZXN0VHlwZWRlZnNBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKIHsKQEAgLTI3MCwxMyArMjk5
LDIyIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlcHRp
b24oRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJv
d1Njb3BlLCAiVGVzdFR5cGVkZWZzIiwgImF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uIik7CiAgICAg
fQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNUZXN0VHlwZWRlZnNBdHRyV2l0aEdldHRl
ckV4Y2VwdGlvbkdldHRlcihzdGF0ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSkpOworfQorCitz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNBdHRyV2l0aEdldHRlckV4Y2VwdGlv
bkdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU1Rlc3RUeXBlZGVmcyogdGhpc09iamVjdCwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odGhpc09iamVjdCk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOwogICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5hdHRyV2l0aEdldHRlckV4Y2VwdGlvbihlYykp
OwogICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgZWMpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCitzdGF0
aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbkdl
dHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RUeXBlZGVmcyosIFRocm93U2NvcGUmIHRocm93U2NvcGUp
OwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9u
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQogewpAQCAtMjg5LDExICszMjcsMjAgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNB
dHRyV2l0aFNldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlMKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5
cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0VHlwZWRlZnMiLCAiYXR0cldpdGhTZXR0
ZXJFeGNlcHRpb24iKTsKICAgICB9Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdFR5cGVkZWZzQXR0cldpdGhT
ZXR0ZXJFeGNlcHRpb25HZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpKTsKK30K
Kworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzQXR0cldpdGhTZXR0ZXJFeGNl
cHRpb25HZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIHRoaXNPYmplY3Qs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3Qp
OworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc051bWJlcihpbXBsLmF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKCkpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCitz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdldHRlckV4
Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RUeXBlZGVmcyosIFRocm93U2NvcGUmIHRo
cm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRo
R2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQogewpAQCAtMzA2LDEzICszNTMsMjIgQEAgRW5jb2RlZEpTVmFsdWUg
anNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihFeGVjU3RhdGUqIHN0
YXRlLCBFbmMKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVy
biB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0VHlwZWRlZnMi
LCAic3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24iKTsKICAgICB9CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9u
R2V0dGVyKHN0YXRlLCBjYXN0ZWRUaGlzLCB0aHJvd1Njb3BlKSk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgSlNWYWx1ZSBqc1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uR2V0
dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIEpTVGVzdFR5cGVkZWZzKiB0aGlzT2JqZWN0LCBUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTSh0aGlzT2JqZWN0KTsKKyAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CiAgICAgSlNWYWx1
ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5zdHJpbmdBdHRyV2l0aEdl
dHRlckV4Y2VwdGlvbihlYykpOwogICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29w
ZSwgZWMpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICByZXR1cm4g
cmVzdWx0OwogfQogCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0VHlwZWRlZnNTdHJpbmdB
dHRyV2l0aFNldHRlckV4Y2VwdGlvbkdldHRlcihFeGVjU3RhdGUqLCBKU1Rlc3RUeXBlZGVmcyos
IFRocm93U2NvcGUmIHRocm93U2NvcGUpOwogCiBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RUeXBlZGVm
c1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewpAQCAtMzI1LDExICszODEsMTggQEAg
RW5jb2RlZEpTVmFsdWUganNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlv
bihFeGVjU3RhdGUqIHN0YXRlLCBFbmMKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7
CiAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUs
ICJUZXN0VHlwZWRlZnMiLCAic3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24iKTsKICAgICB9
Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnN0cmluZ0F0dHJXaXRoU2V0dGVy
RXhjZXB0aW9uKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0ZXJF
eGNlcHRpb25HZXR0ZXIoc3RhdGUsIGNhc3RlZFRoaXMsIHRocm93U2NvcGUpKTsKIH0KIAorc3Rh
dGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNl
cHRpb25HZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgSlNUZXN0VHlwZWRlZnMqIHRoaXNPYmplY3Qs
IFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHRoaXNPYmplY3Qp
OworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUp
OworICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5zdHJpbmdBdHRyV2l0aFNldHRl
ckV4Y2VwdGlvbigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQogCiBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTYXR0cmlidXRlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU2F0dHJpYnV0ZS5jcHAKaW5kZXggNzdmYjVmNmQz
MWQ1NGVlZDk4NmNmYmUxM2UzMTgxMDhkNjg5NDRmYy4uYmViNzQ3ZTYxNjk4ZmZmZTkwMGNlMGRm
NmFmNGJhMTkyZmZlNDVmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTYXR0cmlidXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNhdHRyaWJ1dGUuY3BwCkBAIC0xMzIsNiArMTMyLDggQEAgdm9p
ZCBKU2F0dHJpYnV0ZTo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKICAgICB0aGlzT2JqZWN0
LT5KU2F0dHJpYnV0ZTo6fkpTYXR0cmlidXRlKCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc2F0dHJpYnV0ZVJlYWRvbmx5R2V0dGVyKEV4ZWNTdGF0ZSosIEpTYXR0cmlidXRlKiwgVGhy
b3dTY29wZSYgdGhyb3dTY29wZSk7CisKIEVuY29kZWRKU1ZhbHVlIGpzYXR0cmlidXRlUmVhZG9u
bHkoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CkBAIC0xNDMsMTEgKzE0NSwxOCBAQCBF
bmNvZGVkSlNWYWx1ZSBqc2F0dHJpYnV0ZVJlYWRvbmx5KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUAogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
ICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwg
ImF0dHJpYnV0ZSIsICJyZWFkb25seSIpOwogICAgIH0KLSAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUo
c3RhdGUsIGltcGwucmVhZG9ubHkoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNhdHRyaWJ1dGVSZWFkb25seUdldHRl
cihzdGF0ZSwgY2FzdGVkVGhpcywgdGhyb3dTY29wZSkpOwogfQogCitzdGF0aWMgaW5saW5lIEpT
VmFsdWUganNhdHRyaWJ1dGVSZWFkb25seUdldHRlcihFeGVjU3RhdGUqIHN0YXRlLCBKU2F0dHJp
YnV0ZSogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURf
UEFSQU0odGhpc09iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3QtPndyYXBwZWQo
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnJl
YWRvbmx5KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CiAKIEVuY29kZWRKU1ZhbHVlIGpzYXR0
cmlidXRlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVGVzdE5vZGUuaWRsIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Rlc3ROb2RlLmlkbAppbmRleCA0NGY4Y2E4MjczZTc4ZmYxZDUzYTFmOWVjNWYx
ZmU1M2ViOTY4YmRlLi45ZDJhMDc4ZWJmYmU0NzJhMTE4NDk2N2UwMDFiOTBlYzgxYjhhYTkwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5vZGUu
aWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Tm9kZS5p
ZGwKQEAgLTI3LDQgKzI3LDYgQEAKIAogICAgIFtFbmFibGVkQXRSdW50aW1lPURPTUl0ZXJhdG9y
XSBpdGVyYWJsZTxUZXN0Tm9kZT47CiAgICAgUHJvbWlzZSB0ZXN0V29ya2VyUHJvbWlzZSgpOwor
CisgICAgc2VyaWFsaXplcjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVGVzdE9iai5pZGwKaW5kZXggMjEwZDU1ZjhhMGI1ZDdkOGRmZWZlYjYwYTRiYzkz
ZGZlYzJiZTRjZi4uNGViMDcyYTAyYzE0YjNiYTVjZWVkNDZhM2M0ZDkyNmNmNDcxMzFjNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbApA
QCAtNDEwLDYgKzQxMCw5IEBAIGVudW0gVGVzdENvbmZpZGVuY2UgeyAiaGlnaCIsICJraW5kYS1s
b3ciIH07CiAgICAgdm9pZCBhdHRhY2hTaGFkb3dSb290KFRlc3REaWN0aW9uYXJ5IGluaXQpOwog
CiAgICAgc3RyaW5naWZpZXIgYXR0cmlidXRlIFVTVlN0cmluZyBzdHJpbmdpZmllckF0dHJpYnV0
ZTsKKworCisgICAgc2VyaWFsaXplciA9IHtyZWFkT25seVN0cmluZ0F0dHIsIGNyZWF0ZSwgZW51
bUF0dHIsIGxvbmdBdHRyfTsKIH07CiAKIC8vIFRoZSBmb2xsb3dpbmcgY29tbWVudCBzaG91bGQg
bm90IGdlbmVyYXRlIGFueSBjb2RlLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGQ2NzAyNjg5MmMwYThlYTZmYjI1YTAzZmZj
ZDE2NDU2ZTM2OWU4MmYuLjMwMjRmOTQ3N2VmNjM5MWUzOTYxNjJlOTY1ODJhOGUyNGEzYmZhZTkg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxNi0wOS0yNiAgQWxlamFuZHJvIEcuIENhc3RybyAg
PGFsZXhAaWdhbGlhLmNvbT4KKworICAgICAgICBBZGQgV2ViSURMIHNwZWNpYWwgb3BlcmF0aW9u
IHN1cHBvcnQ6IHNlcmlhbGl6ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1NjI5MworCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgor
CisgICAgICAgIFZlcmlmeSB0aGUgbmV3IEFQSSBvZiB0aGUgb2JqZWN0cyBhbmQgY2hlY2sgd2hh
dCBoYXBwZW5zIHdoZW4gdXNlcgorICAgICAgICBtb2RpZmllcyB0aGUgdmFsdWVzIGFuZCB0eXBl
cyBvZiB0aGUgYXR0cmlidXRlcywgb3IgYWRkcyBhIG51bGwgdmFsdWUuCisKKyAgICAgICAgKiBm
YXN0L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS1leHBlY3RlZC50eHQ6CisgICAgICAgICog
ZmFzdC9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaHRtbDoKKyAgICAgICAgKiBmYXN0L21l
ZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi1leHBlY3RlZC50eHQ6CisgICAgICAgICog
ZmFzdC9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24uaHRtbDoKKwogMjAxNy0wOS0y
NiAgUnlhbiBIYWRkYWQgIDxyeWFuaGFkZGFkQGFwcGxlLmNvbT4KIAogICAgICAgICBNYXJraW5n
IGNzczMvZmlsdGVycy9iYWNrZHJvcC9iYWNrZHJvcC1maWx0ZXItd2l0aC1yZWZsZWN0aW9uKiB0
ZXN0cyBhcyBmbGFreSBvbiBTaWVycmEgV0sxLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
ZmFzdC9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUtZXhwZWN0ZWQudHh0CmluZGV4IDNjOTAy
OTgzNjU5Y2M3ZWUzODFmYTUxZDhjNDYyNWE0M2IzMDdmNDUuLmEyZGM3MWFmYmIwYmYwZmI3MmE1
YTMxZWU4MWFhZmU1MmMzYmEzODUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFz
dHJlYW0vUlRDSWNlQ2FuZGlkYXRlLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS1leHBlY3RlZC50eHQKQEAgLTcsNiArNywyMSBA
QCBQQVNTIGNhbmRpZGF0ZSA9IG5ldyBSVENJY2VDYW5kaWRhdGUoaW5pdGlhbGl6ZXIpOyBkaWQg
bm90IHRocm93IGV4Y2VwdGlvbi4KIFBBU1MgY2FuZGlkYXRlLmNhbmRpZGF0ZSBpcyAiZm9vIgog
UEFTUyBjYW5kaWRhdGUuc2RwTWlkIGlzICJiYXIiCiBQQVNTIGNhbmRpZGF0ZS5zZHBNTGluZUlu
ZGV4IGlzIDYKK1BBU1MgUlRDSWNlQ2FuZGlkYXRlLnByb3RvdHlwZS50b0pTT04gaXMgZGVmaW5l
ZC4KK1BBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihSVENJY2VDYW5kaWRhdGUu
cHJvdG90eXBlLCAidG9KU09OIikuZW51bWVyYWJsZSBpcyB0cnVlCitQQVNTIE9iamVjdC5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoUlRDSWNlQ2FuZGlkYXRlLnByb3RvdHlwZSwgInRvSlNPTiIp
LndyaXRhYmxlIGlzIHRydWUKK1BBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihS
VENJY2VDYW5kaWRhdGUucHJvdG90eXBlLCAidG9KU09OIikuY29uZmlndXJhYmxlIGlzIHRydWUK
K1BBU1MgUlRDSWNlQ2FuZGlkYXRlLnByb3RvdHlwZS50b0pTT04ubGVuZ3RoIGlzIDAKK1BBU1Mg
UlRDSWNlQ2FuZGlkYXRlLnByb3RvdHlwZS50b0pTT04ubmFtZSBpcyAidG9KU09OIgorUEFTUyBP
YmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGpzb25NYXAsICJjYW5kaWRhdGUiKS5lbnVt
ZXJhYmxlIGlzIHRydWUKK1BBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihqc29u
TWFwLCAiY2FuZGlkYXRlIikud3JpdGFibGUgaXMgdHJ1ZQorUEFTUyBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGpzb25NYXAsICJjYW5kaWRhdGUiKS5jb25maWd1cmFibGUgaXMgdHJ1
ZQorUEFTUyBjaGlsZENhbmRpZGF0ZS50b0pTT04oKTsgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJv
cjogQ2FuIG9ubHkgY2FsbCBSVENJY2VDYW5kaWRhdGUudG9KU09OIG9uIGluc3RhbmNlcyBvZiBS
VENJY2VDYW5kaWRhdGUuCitQQVNTIEpTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSkg
aXMgIntcImNhbmRpZGF0ZVwiOlwiZm9vXCIsXCJzZHBNaWRcIjpcImJhclwiLFwic2RwTUxpbmVJ
bmRleFwiOjZ9IgorUEFTUyBKU09OLnN0cmluZ2lmeShjYW5kaWRhdGUudG9KU09OKCkpIGlzICJ7
XCJjYW5kaWRhdGVcIjpcImZvb1wiLFwic2RwTWlkXCI6XCJiYXJcIixcInNkcE1MaW5lSW5kZXhc
Ijo2fSIKK1BBU1MgSlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNPTigpKSBpcyAie1wiY2Fu
ZGlkYXRlXCI6XCJmb29cIixcInNkcE1pZFwiOlwiYmFyXCIsXCJzZHBNTGluZUluZGV4XCI6Nn0i
CitQQVNTIEpTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSkgaXMgIntcImNhbmRpZGF0
ZVwiOlwiZm9vXCIsXCJzZHBNaWRcIjpcImJhclwiLFwic2RwTUxpbmVJbmRleFwiOjZ9IgorUEFT
UyBKU09OLnN0cmluZ2lmeShjYW5kaWRhdGUudG9KU09OKCkpIGlzICJ7XCJjYW5kaWRhdGVcIjpc
ImZvb1wiLFwic2RwTWlkXCI6XCJiYXJcIixcInNkcE1MaW5lSW5kZXhcIjo2fSIKIAogQXR0cmli
dXRlcyBhcmUgcmVhZG9ubHkKIGNhbmRpZGF0ZS5jYW5kaWRhdGUgPSAiZm9vLXVwZGF0ZWQiCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5o
dG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaHRtbApp
bmRleCBjNDAzMTU2NTU2OWUyMzhiNmM0YzVhODlmOGE5YjEwNzkyNGEzN2FmLi41M2Y0OWNiNzJm
MDkxYTQxM2U2NzU2OWI3YzMxMzczMzZjNzBkOGM2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9m
YXN0L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmh0bWwKQEAgLTEzLDYgKzEzLDMzIEBACiAg
ICAgICAgICAgICBzaG91bGRCZSgnY2FuZGlkYXRlLmNhbmRpZGF0ZScsICciZm9vIicpOwogICAg
ICAgICAgICAgc2hvdWxkQmUoJ2NhbmRpZGF0ZS5zZHBNaWQnLCAnImJhciInKTsKICAgICAgICAg
ICAgIHNob3VsZEJlKCdjYW5kaWRhdGUuc2RwTUxpbmVJbmRleCcsICc2Jyk7CisgICAgICAgICAg
ICBzaG91bGRCZURlZmluZWQoJ1JUQ0ljZUNhbmRpZGF0ZS5wcm90b3R5cGUudG9KU09OJyk7Cisg
ICAgICAgICAgICBzaG91bGRCZVRydWUoJ09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
UlRDSWNlQ2FuZGlkYXRlLnByb3RvdHlwZSwgInRvSlNPTiIpLmVudW1lcmFibGUnKTsKKyAgICAg
ICAgICAgIHNob3VsZEJlVHJ1ZSgnT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihSVENJ
Y2VDYW5kaWRhdGUucHJvdG90eXBlLCAidG9KU09OIikud3JpdGFibGUnKTsKKyAgICAgICAgICAg
IHNob3VsZEJlVHJ1ZSgnT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihSVENJY2VDYW5k
aWRhdGUucHJvdG90eXBlLCAidG9KU09OIikuY29uZmlndXJhYmxlJyk7CisgICAgICAgICAgICBz
aG91bGRCZSgnUlRDSWNlQ2FuZGlkYXRlLnByb3RvdHlwZS50b0pTT04ubGVuZ3RoJywgJzAnKTsK
KyAgICAgICAgICAgIHNob3VsZEJlKCdSVENJY2VDYW5kaWRhdGUucHJvdG90eXBlLnRvSlNPTi5u
YW1lJywgJyJ0b0pTT04iJyk7CisKKyAgICAgICAgICAgIHZhciBqc29uTWFwID0gY2FuZGlkYXRl
LnRvSlNPTigpOworICAgICAgICAgICAgc2hvdWxkQmVUcnVlKCdPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKGpzb25NYXAsICJjYW5kaWRhdGUiKS5lbnVtZXJhYmxlJyk7CisgICAgICAg
ICAgICBzaG91bGRCZVRydWUoJ09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoanNvbk1h
cCwgImNhbmRpZGF0ZSIpLndyaXRhYmxlJyk7CisgICAgICAgICAgICBzaG91bGRCZVRydWUoJ09i
amVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoanNvbk1hcCwgImNhbmRpZGF0ZSIpLmNvbmZp
Z3VyYWJsZScpOworCisgICAgICAgICAgICB2YXIgY2hpbGRSVENJY2VDYW5kaWRhdGUgPSBmdW5j
dGlvbigpIHt9OworICAgICAgICAgICAgY2hpbGRSVENJY2VDYW5kaWRhdGUucHJvdG90eXBlID0g
T2JqZWN0LmNyZWF0ZShSVENJY2VDYW5kaWRhdGUucHJvdG90eXBlKTsKKyAgICAgICAgICAgIHZh
ciBjaGlsZENhbmRpZGF0ZSA9IG5ldyBjaGlsZFJUQ0ljZUNhbmRpZGF0ZSgpOworICAgICAgICAg
ICAgc2hvdWxkVGhyb3coJ2NoaWxkQ2FuZGlkYXRlLnRvSlNPTigpOycpOworCisgICAgICAgICAg
ICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ0pTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04o
KSknLCAneyJjYW5kaWRhdGUiOiJmb28iLCJzZHBNaWQiOiJiYXIiLCJzZHBNTGluZUluZGV4Ijo2
fScpOworICAgICAgICAgICAgY2FuZGlkYXRlLm5ld0F0dHJpYnV0ZSA9ICJuZXcgdmFsdWUiOwor
ICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdKU09OLnN0cmluZ2lmeShjYW5kaWRh
dGUudG9KU09OKCkpJywgJ3siY2FuZGlkYXRlIjoiZm9vIiwic2RwTWlkIjoiYmFyIiwic2RwTUxp
bmVJbmRleCI6Nn0nKTsKKyAgICAgICAgICAgIGNhbmRpZGF0ZS5zZHBNTGluZUluZGV4ID0gIm5v
dCBhIG51bWJlciI7CisgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ0pTT04uc3Ry
aW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSknLCAneyJjYW5kaWRhdGUiOiJmb28iLCJzZHBNaWQi
OiJiYXIiLCJzZHBNTGluZUluZGV4Ijo2fScpOworICAgICAgICAgICAgY2FuZGlkYXRlLnNkcE1p
ZCA9IDc7CisgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ0pTT04uc3RyaW5naWZ5
KGNhbmRpZGF0ZS50b0pTT04oKSknLCAneyJjYW5kaWRhdGUiOiJmb28iLCJzZHBNaWQiOiJiYXIi
LCJzZHBNTGluZUluZGV4Ijo2fScpOworICAgICAgICAgICAgY2FuZGlkYXRlLnNkcE1pZCA9IG51
bGw7CisgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ0pTT04uc3RyaW5naWZ5KGNh
bmRpZGF0ZS50b0pTT04oKSknLCAneyJjYW5kaWRhdGUiOiJmb28iLCJzZHBNaWQiOiJiYXIiLCJz
ZHBNTGluZUluZGV4Ijo2fScpOworCiAgICAgICAgICAgICBkZWJ1ZygiIik7CiAKICAgICAgICAg
ICAgIGRlYnVnKCJBdHRyaWJ1dGVzIGFyZSByZWFkb25seSIpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24tZXhw
ZWN0ZWQudHh0CmluZGV4IDgxYWUwMWE3ZjdmOWQ4MDM5OTU5OTk5M2Y4MzZhMmQ5NjE1MjNiYjEu
LjU5ZDNiY2QxNzUwOWIyN2RlODRkZjI4OGQ5M2NjYjI2ZGQ0NDNkNzAgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLWV4cGVjdGVk
LnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlw
dGlvbi1leHBlY3RlZC50eHQKQEAgLTYsNiArNiw3IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
CiBQQVNTIHNlc3Npb25EZXNjcmlwdGlvbiA9IG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24oaW5p
dGlhbGl6ZXIpOyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KIFBBU1Mgc2Vzc2lvbkRlc2NyaXB0
aW9uLnR5cGUgaXMgIm9mZmVyIgogUEFTUyBzZXNzaW9uRGVzY3JpcHRpb24uc2RwIGlzICJmb29i
YXIiCitQQVNTIEpTT04uc3RyaW5naWZ5KHNlc3Npb25EZXNjcmlwdGlvbi50b0pTT04oKSkgaXMg
IntcInR5cGVcIjpcIm9mZmVyXCIsXCJzZHBcIjpcImZvb2JhclwifSIKICoqKiBBdHRyaWJ1dGVz
IGFyZSByZWFkLW9ubHkuCiBQQVNTIHNlc3Npb25EZXNjcmlwdGlvbi50eXBlID0gJ2Fuc3dlcicg
ZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCiBQQVNTIHNlc3Npb25EZXNjcmlwdGlvbi50eXBlIGlz
ICdvZmZlcicKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDU2Vz
c2lvbkRlc2NyaXB0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1Nl
c3Npb25EZXNjcmlwdGlvbi5odG1sCmluZGV4IDhhMmU5MzNkMWM0YmQxZGQ0ZjNkZWIwMjdiZGU3
YjA5OWYxMDdhYjEuLjgzNDNlYjgyOGM2YjgwZTYzMTU5MDIwM2YyNDc1MDE5OWM2ZGU4YjcgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0
aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVz
Y3JpcHRpb24uaHRtbApAQCAtMTQsNiArMTQsNyBAQAogICAgICAgICAgICAgc2hvdWxkTm90VGhy
b3coInNlc3Npb25EZXNjcmlwdGlvbiA9IG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24oaW5pdGlh
bGl6ZXIpOyIpOwogICAgICAgICAgICAgc2hvdWxkQmUoJ3Nlc3Npb25EZXNjcmlwdGlvbi50eXBl
JywgJyJvZmZlciInKTsKICAgICAgICAgICAgIHNob3VsZEJlKCdzZXNzaW9uRGVzY3JpcHRpb24u
c2RwJywgJyJmb29iYXIiJyk7CisgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ0pT
T04uc3RyaW5naWZ5KHNlc3Npb25EZXNjcmlwdGlvbi50b0pTT04oKSknLCAneyJ0eXBlIjoib2Zm
ZXIiLCJzZHAiOiJmb29iYXIifScpOwogCiAgICAgICAgICAgICBkZWJ1ZygiKioqIEF0dHJpYnV0
ZXMgYXJlIHJlYWQtb25seS4iKTsKICAgICAgICAgICAgIHNob3VsZE5vdFRocm93KCJzZXNzaW9u
RGVzY3JpcHRpb24udHlwZSA9ICdhbnN3ZXInIik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290066</attachid>
            <date>2016-09-28 00:46:18 -0700</date>
            <delta_ts>2016-09-28 03:35:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156293-20160928094318.patch</filename>
            <type>text/plain</type>
            <size>29211</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2NTAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTYyZmM2ZDEyNzhiNzVj
NjFjMzAzOTM3NzkwNmU5MjZmMmM2NGRmYi4uNzMyOGI4YTQyYjFkMGY0Mzg0NTBkODg5NDAwZDll
YjNmMzM4OTQ3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0IEBACisyMDE2LTA5LTI3ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIEFkZCBXZWJJREwg
c3BlY2lhbCBvcGVyYXRpb24gc3VwcG9ydDogc2VyaWFsaXplcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MjkzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgdGhlIHNlcmlhbGl6
ZXIgc3BlY2lhbCBvcGVyYXRpb24gZm9yIFdlYklETHMsCisgICAgICAgIGN1cnJlbnQgaW1wbGVt
ZW50YXRpb24gYWRkcyBzdXBwb3J0IGZvcjoKKyAgICAgICAgICAtIGp1c3QgdGhlIGtleXdvcmQ6
IHNlcmlhbGl6ZXI7IEl0IHdpbGwgcmV0dXJuIGFsbCB0aGUKKyAgICAgICAgICAgIGF0dHJpYnV0
ZXMgb2YgaW4gYW4gb2JqZWN0LgorICAgICAgICAgIC0gbWFwIG9mIGVudHJpZXMgd2l0aCB0aGUg
YXR0cmlidXRlczogc2VyaWFsaXplciA9IHthdHRyaWJ1dGUxLAorICAgICAgICAgICAgYXR0cmli
dXRlMiwgLi4ufQorCisgICAgICAgIEl0IGNyZWF0ZXMgYSB0b0pTT04gbWV0aG9kIHRoYXQgcmV0
dXJucyB0aGUgc2VyaWFsaXplZCB2YWx1ZQorICAgICAgICBjb252ZXJ0ZWQgaW50byBhbiBFQ01B
U2NyaXB0IHZhbHVlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBjaGVjayB0aGUKKyAgICAgICAgZGVm
aW5pdGlvbiBvZiB0aGUgb3BlcmF0aW9uOgorCisgICAgICAgIGh0dHA6Ly9oZXljYW0uZ2l0aHVi
LmlvL3dlYmlkbC8jaWRsLXNlcmlhbGl6ZXJzCisKKyAgICAgICAgV2UgaGF2ZSBjcmVhdGVkIGEg
bmV3IGZ1bmN0aW9uIGluIHRoZSBBUEkgb2YgdGhlIG9iamVjdHMKKyAgICAgICAgdGhhdCBhcmUg
bWFya2VkIGFzIHNlcmlhbGl6ZXIuCisKKyAgICAgICAgVXNlZCB0aGUgc3VwcG9ydCB0byBhZGQg
bmV3IEFQSSBmb3IgUlRDSWNlQ2FuZGlkYXRlIGFuZAorICAgICAgICBSVENTZXNzaW9uRGVzY3Jp
cHRpb24uCisKKyAgICAgICAgVXBkYXRlZCB0aGUgdGVzdHMgZXhwZWN0YXRpb25zIG9mIHRoZSBi
aW5kaW5ncy4KKworICAgICAgICBUZXN0czogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROb2Rl
LmlkbAorICAgICAgICAgICAgICAgYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCisg
ICAgICAgICAgICAgICBmYXN0L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5odG1sCisgICAg
ICAgICAgICAgICBmYXN0L21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5odG1sCisK
KyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5pZGw6IEFkZGVk
IHRoZSBzZXJpYWxpemVyCisgICAgICAgIG9wZXJhdGlvbi4KKyAgICAgICAgKiBNb2R1bGVzL21l
ZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5pZGw6IEFkZGVkIHRoZQorICAgICAgICBz
ZXJpYWxpemVyIG9wZXJhdGlvbi4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOiBBZGRlZCB0aGUg
Y2FsbHMgdG8gdGhlIHNlcmlhbGl6ZXIKKyAgICAgICAgY29kZSBnZW5lcmF0b3IuCisgICAgICAg
IChHZW5lcmF0ZVNlcmlhbGl6ZXJGdW5jdGlvbik6IEFkZGVkLCBnZW5lcmF0ZXMgdGhlIHRvSlNP
TiBmdW5jdGlvbgorICAgICAgICBhZGRpbmcgYWxsIHRoZSBzZXJpYWxpemFibGUtPmF0dHJpYnV0
ZXMgdmFsdWUgdG8gYW4gb2JqZWN0IGFzCisgICAgICAgIGRlZmluZWQgaW4gdGhlIHNwZWMuCisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG06IE1vZGlmaWVkIHRoZSBzZXJp
YWxpemVyIHBhcnNlcgorICAgICAgICB0aGF0IHdhcyB1bnVzZWQgdG8gc3VwcG9ydCB0aGUgV2Vi
SURMIHNwZWMgcGFydHMuIEFkZGVkIGEgbmV3CisgICAgICAgIGRvbVNlcmlhbGl6YWJsZSB0eXBl
IHRvIHN0b3JlIHRoZSBsaXN0IG9mIGF0dHJpYnV0ZXMgaW4gdGhlCisgICAgICAgIHBvc3NpYmxl
IG1hcC4KKyAgICAgICAgKHBhcnNlU2VyaWFsaXplcik6IE1vZGlmaWVkIHRoZSBmdW5jdGlvbiB0
byBmb2xsb3cgdGhlCisgICAgICAgIHNlbWljb2xvbiBydWxlIGluIHRoZSBzcGVjLCBub3cgdGhl
IHNlcmlhbGl6ZXIgbGluZSBtdXN0IGhhdmUgYQorICAgICAgICBzZW1pY29sb24gbGlrZSBhbnkg
b3RoZXIgbGluZS4KKyAgICAgICAgKHBhcnNlU2VyaWFsaXplclJlc3QpOiBUaGUgZnVuY3Rpb24g
bm93IGhhcyB0byBnZXQgdGhlIGF0dHJpYnV0ZXMKKyAgICAgICAgbGlzdCBmcm9tIHRoZSBwYXR0
ZXJuIHBhcnNpbmcgZnVuY3Rpb24gYW5kIGFkZCB0aGVtIHRvIHRoZQorICAgICAgICBkb21TZXJp
YWxpemFibGUgaXRlbS4KKyAgICAgICAgKHBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm4pOiBOb3cg
dGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBsaXN0IG9mCisgICAgICAgIGF0dHJpYnV0ZXMgaW4g
dGhlIHNlcmlhbGl6YWJsZSBtYXAgb3IgbGlzdCBpZiB3ZSBoYXZlIG9uZS4KKyAgICAgICAgKHBh
cnNlU2VyaWFsaXphdGlvbkF0dHJpYnV0ZXMpOiBBZGRlZCwgdGhpcyBmdW5jdGlvbiByZXBsYWNl
cyB0aGUKKyAgICAgICAgTWFwIGFuZCBMaXN0IGZ1bmN0aW9ucywgdGhlIGN1cnJlbnRseSBzdXBw
b3J0ZWQgcGFydHMgYXJlIHNpbWlsYXIKKyAgICAgICAgZm9yIGJvdGggc2l0dWF0aW9ucy4KKyAg
ICAgICAgKGFwcGx5TWVtYmVyTGlzdCk6IEFkZGVkIHRoZSBzZXJpYWxpemFibGUgaXRlbSB0byB0
aGUgaW50ZXJmYWNlCisgICAgICAgIHZhcmlhYmxlIGFuZCBwb3B1bGF0ZSB0aGUgc2VyaWFsaXph
YmxlIGluIGNhc2UgdGhlcmUgaXMgbm90IGEKKyAgICAgICAgZGVmaW5lZCBtYXAuCisgICAgICAg
IChwYXJzZVNlcmlhbGl6YXRpb25QYXR0ZXJuTWFwKTogUmVwbGFjZWQgd2l0aAorICAgICAgICBw
YXJzZVNlcmlhbGl6YXRpb25BdHRyaWJ1dGVzLgorICAgICAgICAocGFyc2VTZXJpYWxpemF0aW9u
UGF0dGVybkxpc3QpOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Tm9kZS5jcHA6IE1vZGlmaWVkIHRoZSBleHBlY3RlZCByZXN1bHQuCisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04pOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOiBNb2RpZmllZCB0aGUgZXhwZWN0
ZWQgcmVzdWx0LgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25U
b0pTT04pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Tm9kZS5pZGw6IEFk
ZGVkIHRoZSBzZXJpYWxpemVyIHRlc3QuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Rlc3RPYmouaWRsOiBBZGRlZCBzZXJpYWxpemVyIG1hcCB0ZXN0LgorCiAyMDE2LTA5LTI3ICBK
b29uZ2h1biBQYXJrICA8amg3MTgucGFya0BzYW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMXSBG
aXggZGVidWcgYnVpbGQgYnJlYWsgc2luY2UgcjIwNjQ4MS4gVW5yZXZpZXdlZApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaWRs
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaWRs
CmluZGV4IDA0MDc4M2Y3ZmEwZDY3YzU2YmI3MjBkMTVlYjIwYmYyNDMyNWI4ODguLjhjMmQ5YmU4
NDQ4NTA1NGMxNmI1MTkzMzQzY2FkYzc2NzcwMjlmNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmlkbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5pZGwKQEAgLTM5LDUg
KzM5LDcgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGNhbmRpZGF0ZTsKICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nPyBzZHBNaWQ7CiAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIHVuc2lnbmVkIHNob3J0PyBzZHBNTGluZUluZGV4OworCisgICAgc2VyaWFsaXplciA9
IHtjYW5kaWRhdGUsIHNkcE1pZCwgc2RwTUxpbmVJbmRleH07CiB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlw
dGlvbi5pZGwKaW5kZXggNDc1NWFkYTI1MzBlOGY2NWEyYTZlZWNkOWI3YjcwYTM5ZWVhNWExZS4u
NzM1MDkyYmM1MzA1OGZlY2ZjNzllZDY5NzFlNGQyOTk2YTE1NDVkYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24uaWRs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2Ny
aXB0aW9uLmlkbApAQCAtMzgsNiArMzgsOCBAQAogXSBpbnRlcmZhY2UgUlRDU2Vzc2lvbkRlc2Ny
aXB0aW9uIHsKICAgICBbU2V0dGVyUmFpc2VzRXhjZXB0aW9uXSByZWFkb25seSBhdHRyaWJ1dGUg
UlRDU2RwVHlwZSB0eXBlOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgc2RwOwor
CisgICAgc2VyaWFsaXplciA9IHt0eXBlLCBzZHB9OwogfTsKIAogZW51bSBSVENTZHBUeXBlIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMu
cG0KaW5kZXggZmViMTVkZWVmNDYzY2FkZGZhNzk4ZGUzMjJiZDQyY2QxMWY0OTUwMC4uZjk1MjRk
ZmNlZTQ0NDM3NWMwZTdiNTAxNzMyNDViNDNlZDM3ZmZhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KQEAgLTIyOTcsNiArMjI5
Nyw4IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgbXkgJHZpc2libGVJbnRlcmZh
Y2VOYW1lID0gJGNvZGVHZW5lcmF0b3ItPkdldFZpc2libGVJbnRlcmZhY2VOYW1lKCRpbnRlcmZh
Y2UpOwogICAgIG15ICRldmVudFRhcmdldCA9ICRjb2RlR2VuZXJhdG9yLT5Jbmhlcml0c0ludGVy
ZmFjZSgkaW50ZXJmYWNlLCAiRXZlbnRUYXJnZXQiKSAmJiAkaW50ZXJmYWNlLT5uYW1lIG5lICJF
dmVudFRhcmdldCI7CiAgICAgbXkgJG5lZWRzVmlzaXRDaGlsZHJlbiA9IEluc3RhbmNlTmVlZHNW
aXNpdENoaWxkcmVuKCRpbnRlcmZhY2UpOworICAgIG15ICRzZXJpYWxpemVyRnVuY3Rpb25OYW1l
ID0gInRvSlNPTiI7CisgICAgbXkgJHNlcmlhbGl6ZXJOYXRpdmVGdW5jdGlvbk5hbWUgPSAkY29k
ZUdlbmVyYXRvci0+V0tfbGNmaXJzdCgkY2xhc3NOYW1lKSAuICJQcm90b3R5cGVGdW5jdGlvbiIg
LiAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkc2VyaWFsaXplckZ1bmN0aW9uTmFtZSk7CiAK
ICAgICBteSAkbmFtZWRHZXR0ZXJGdW5jdGlvbiA9IEdldE5hbWVkR2V0dGVyRnVuY3Rpb24oJGlu
dGVyZmFjZSk7CiAgICAgbXkgJGluZGV4ZWRHZXR0ZXJGdW5jdGlvbiA9IEdldEluZGV4ZWRHZXR0
ZXJGdW5jdGlvbigkaW50ZXJmYWNlKTsKQEAgLTIzODcsNiArMjM4OSw4IEBAIHN1YiBHZW5lcmF0
ZUltcGxlbWVudGF0aW9uCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKICAgICB9
CiAKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
JHtzZXJpYWxpemVyTmF0aXZlRnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqKTtcblxuIikgaWYgJGlu
dGVyZmFjZS0+c2VyaWFsaXphYmxlOworCiAgICAgR2VuZXJhdGVQcm90b3R5cGVEZWNsYXJhdGlv
bihcQGltcGxDb250ZW50LCAkY2xhc3NOYW1lLCAkaW50ZXJmYWNlKSBpZiAhSGVhZGVyTmVlZHNQ
cm90b3R5cGVEZWNsYXJhdGlvbigkaW50ZXJmYWNlKTsKIAogICAgIEdlbmVyYXRlQ29uc3RydWN0
b3JEZWNsYXJhdGlvbihcQGltcGxDb250ZW50LCAkY2xhc3NOYW1lLCAkaW50ZXJmYWNlKSBpZiBO
ZWVkc0NvbnN0cnVjdG9yUHJvcGVydHkoJGludGVyZmFjZSk7CkBAIC0yNTQ1LDYgKzI1NDksMTUg
QEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KIAogICAgIG15ICRqdXN0R2VuZXJhdGVWYWx1
ZUFycmF5ID0gIUlzRE9NR2xvYmFsT2JqZWN0KCRpbnRlcmZhY2UpOwogCisgICAgaWYgKCRpbnRl
cmZhY2UtPnNlcmlhbGl6YWJsZSkgeworICAgICAgICBwdXNoKEBoYXNoS2V5cywgJHNlcmlhbGl6
ZXJGdW5jdGlvbk5hbWUpOworICAgICAgICBwdXNoKEBoYXNoVmFsdWUxLCAkc2VyaWFsaXplck5h
dGl2ZUZ1bmN0aW9uTmFtZSk7CisgICAgICAgIHB1c2goQGhhc2hWYWx1ZTIsIDApOworICAgICAg
ICBwdXNoKEBoYXNoU3BlY2lhbHMsICJKU0M6OkZ1bmN0aW9uIik7CisKKyAgICAgICAgJGhhc2hT
aXplKys7CisgICAgfQorCiAgICAgJG9iamVjdC0+R2VuZXJhdGVIYXNoVGFibGUoJGhhc2hOYW1l
LCAkaGFzaFNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXEBoYXNoS2V5cywg
XEBoYXNoU3BlY2lhbHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXEBoYXNoVmFs
dWUxLCBcQGhhc2hWYWx1ZTIsCkBAIC0zNTMzLDYgKzM1NDYsOCBAQCBFTkQKIAogICAgIH0KIAor
ICAgIEdlbmVyYXRlU2VyaWFsaXplckZ1bmN0aW9uKCRpbnRlcmZhY2UsICRpbnRlcmZhY2VOYW1l
LCAkY2xhc3NOYW1lLCAkc2VyaWFsaXplckZ1bmN0aW9uTmFtZSwgJHNlcmlhbGl6ZXJOYXRpdmVG
dW5jdGlvbk5hbWUpIGlmICRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZTsKKwogICAgIGlmICgkaW50
ZXJmYWNlLT5pdGVyYWJsZSkgewogICAgICAgICBHZW5lcmF0ZUltcGxlbWVudGF0aW9uSXRlcmFi
bGVGdW5jdGlvbnMoJGludGVyZmFjZSk7CiAgICAgfQpAQCAtMzc1OCw2ICszNzczLDM0IEBAIEVO
RAogICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4jZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0cmlu
Z31cbiIpIGlmICRjb25kaXRpb25hbFN0cmluZzsKIH0KIAorc3ViIEdlbmVyYXRlU2VyaWFsaXpl
ckZ1bmN0aW9uCit7CisgICAgbXkgKCRpbnRlcmZhY2UsICRpbnRlcmZhY2VOYW1lLCAkY2xhc3NO
YW1lLCAkc2VyaWFsaXplckZ1bmN0aW9uTmFtZSwgJHNlcmlhbGl6ZXJOYXRpdmVGdW5jdGlvbk5h
bWUpID0gQF87CisKKyAgICBBZGRUb0ltcGxJbmNsdWRlcygiT2JqZWN0Q29uc3RydWN0b3IuaCIp
OworICAgIHB1c2goQGltcGxDb250ZW50LCAiRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAk
e3NlcmlhbGl6ZXJOYXRpdmVGdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogc3RhdGUpXG4iKTsKKyAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IEFTU0VSVChzdGF0ZSk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvIHRo
aXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIGF1dG8gY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlMkaW50ZXJmYWNlTmFtZSo+
KHRoaXNWYWx1ZSk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBWTSYgdm0gPSBz
dGF0ZS0+dm0oKTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSl7XG4iKTsKKyAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsIHRocm93
U2NvcGUsIFwiJGludGVyZmFjZU5hbWVcIiwgXCIkc2VyaWFsaXplckZ1bmN0aW9uTmFtZVwiKTtc
biIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOworICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJHtjbGFz
c05hbWV9OjppbmZvKCkpO1xuXG4iKSB1bmxlc3MgJGludGVyZmFjZU5hbWUgZXEgIkV2ZW50VGFy
Z2V0IjsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1
Y3RFbXB0eU9iamVjdChzdGF0ZSk7XG4iKTsKKyAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEB7
JGludGVyZmFjZS0+YXR0cmlidXRlc30pIHsKKyAgICAgICAgbXkgJG5hbWUgPSAkYXR0cmlidXRl
LT5zaWduYXR1cmUtPm5hbWU7CisgICAgICAgIGlmIChncmVwICRfIGVxICRuYW1lLCBAeyRpbnRl
cmZhY2UtPnNlcmlhbGl6YWJsZS0+YXR0cmlidXRlc30pIHsKKyAgICAgICAgICAgIG15ICRnZXRG
dW5jdGlvbk5hbWUgPSBHZXRBdHRyaWJ1dGVHZXR0ZXJOYW1lKCRpbnRlcmZhY2UsICRjbGFzc05h
bWUsICRhdHRyaWJ1dGUpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmVz
dWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBcIiR7bmFtZX1c
IiksIEpTVmFsdWU6OmRlY29kZSgke2dldEZ1bmN0aW9uTmFtZX0oc3RhdGUsIEpTVmFsdWU6OmVu
Y29kZSh0aGlzVmFsdWUpLCBJZGVudGlmaWVyKCkpKSk7XG4iKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7Cit9CisKIHN1YiBHZW5l
cmF0ZUZ1bmN0aW9uQ2FzdGVkVGhpcwogewogICAgIG15ICgkaW50ZXJmYWNlLCAkY2xhc3NOYW1l
LCAkZnVuY3Rpb24sICRzaG91bGRSZWplY3RQcm9taXNlKSA9IEBfOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0gYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbQppbmRleCAwZGNjNGNlMjA2MGZlYmZhOTZk
YmQwZjU0Y2EyODQ4NjUyZTIwZjUyLi42Nzc0YzUxMDk1NTZmNmFjZmUzNzAzNjMxMGVjNWNiZTE5
NWUxYzc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFBh
cnNlci5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5w
bQpAQCAtNjAsNiArNjAsNyBAQCBzdHJ1Y3QoIGRvbUludGVyZmFjZSA9PiB7CiAgICAgaXNDYWxs
YmFjayA9PiAnJCcsICMgVXNlZCBmb3IgY2FsbGJhY2sgaW50ZXJmYWNlcwogICAgIGlzUGFydGlh
bCA9PiAnJCcsICMgVXNlZCBmb3IgcGFydGlhbCBpbnRlcmZhY2VzCiAgICAgaXRlcmFibGUgPT4g
JyQnLCAjIFVzZWQgZm9yIGl0ZXJhYmxlIGludGVyZmFjZXMKKyAgICBzZXJpYWxpemFibGUgPT4g
JyQnLCAjIFVzZWQgZm9yIHNlcmlhbGl6YWJsZSBpbnRlcmZhY2VzCiB9KTsKIAogIyBVc2VkIHRv
IHJlcHJlc2VudCBkb21JbnRlcmZhY2UgY29udGVudHMgKG5hbWUgb2YgbWV0aG9kLCBzaWduYXR1
cmUpCkBAIC0zNzUsNiArMzc2LDEwIEBAIG15ICRuZXh0QXR0cmlidXRlT3JPcGVyYXRpb25SZXN0
XzEgPSAnXihcKHxCeXRlU3RyaW5nfERPTVN0cmluZ3xVU1ZTdHJpbmd8RGF0ZXxhCiBteSAkbmV4
dFVuc2lnbmVkSW50ZWdlclR5cGVfMSA9ICdeKGxvbmd8c2hvcnQpJCc7CiBteSAkbmV4dERlZmF1
bHRWYWx1ZV8xID0gJ14oLXxJbmZpbml0eXxOYU58ZmFsc2V8bnVsbHx0cnVlKSQnOwogCisjIFVz
ZWQgdG8gcmVwcmVzZW50IHNlcmlhbGl6YWJsZSBpbnRlcmZhY2UKK3N0cnVjdCggZG9tU2VyaWFs
aXphYmxlID0+IHsKKyAgICBhdHRyaWJ1dGVzID0+ICdAJywgIyBMaXN0IG9mIGF0dHJpYnV0ZXMg
dG8gc2VyaWFsaXplCit9KTsKIAogc3ViIHBhcnNlRGVmaW5pdGlvbnMKIHsKQEAgLTEwNTYsNyAr
MTA2MSwxNiBAQCBzdWIgcGFyc2VTZXJpYWxpemVyCiAgICAgbXkgJG5leHQgPSAkc2VsZi0+bmV4
dFRva2VuKCk7CiAgICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJzZXJpYWxpemVyIikgewogICAg
ICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgInNlcmlhbGl6
ZXIiLCBfX0xJTkVfXyk7Ci0gICAgICAgIHJldHVybiAkc2VsZi0+cGFyc2VTZXJpYWxpemVyUmVz
dCgkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKKyAgICAgICAgbXkgJG5leHQgPSAkc2VsZi0+bmV4
dFRva2VuKCk7CisgICAgICAgIG15ICRuZXdEYXRhTm9kZTsKKyAgICAgICAgaWYgKCRuZXh0LT52
YWx1ZSgpIG5lICI7IikgeworICAgICAgICAgICAgJG5ld0RhdGFOb2RlID0gJHNlbGYtPnBhcnNl
U2VyaWFsaXplclJlc3QoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7CisgICAgICAgICAgICBteSAk
bmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICRuZXdEYXRhTm9kZSA9IGRvbVNlcmlhbGl6YWJsZS0+bmV3KCk7CisgICAgICAgIH0KKyAgICAg
ICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICI7IiwgX19MSU5F
X18pOworICAgICAgICByZXR1cm4gJG5ld0RhdGFOb2RlOwogICAgIH0KICAgICAkc2VsZi0+YXNz
ZXJ0VW5leHBlY3RlZFRva2VuKCRuZXh0LT52YWx1ZSgpLCBfX0xJTkVfXyk7CiB9CkBAIC0xMDY5
LDcgKzEwODMsMTAgQEAgc3ViIHBhcnNlU2VyaWFsaXplclJlc3QKICAgICBteSAkbmV4dCA9ICRz
ZWxmLT5uZXh0VG9rZW4oKTsKICAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgIj0iKSB7CiAgICAg
ICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiPSIsIF9fTElO
RV9fKTsKLSAgICAgICAgcmV0dXJuICRzZWxmLT5wYXJzZVNlcmlhbGl6YXRpb25QYXR0ZXJuKCRl
eHRlbmRlZEF0dHJpYnV0ZUxpc3QpOworICAgICAgICBteSAkYXR0cmlidXRlcyA9ICRzZWxmLT5w
YXJzZVNlcmlhbGl6YXRpb25QYXR0ZXJuKCk7CisgICAgICAgIG15ICRuZXdEYXRhTm9kZSA9IGRv
bVNlcmlhbGl6YWJsZS0+bmV3KCk7CisgICAgICAgICRuZXdEYXRhTm9kZS0+YXR0cmlidXRlcygk
YXR0cmlidXRlcyk7CisgICAgICAgIHJldHVybiAkbmV3RGF0YU5vZGU7CiAgICAgfQogICAgIGlm
ICgkbmV4dC0+dHlwZSgpID09IElkZW50aWZpZXJUb2tlbiB8fCAkbmV4dC0+dmFsdWUoKSBlcSAi
KCIpIHsKICAgICAgICAgcmV0dXJuICRzZWxmLT5wYXJzZU9wZXJhdGlvblJlc3QoJGV4dGVuZGVk
QXR0cmlidXRlTGlzdCk7CkBAIC0xMDc5LDU5ICsxMDk2LDQ1IEBAIHN1YiBwYXJzZVNlcmlhbGl6
ZXJSZXN0CiBzdWIgcGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybgogewogICAgIG15ICRzZWxmID0g
c2hpZnQ7Ci0gICAgbXkgJGV4dGVuZGVkQXR0cmlidXRlTGlzdCA9IHNoaWZ0OwogCiAgICAgbXkg
JG5leHQgPSAkc2VsZi0+bmV4dFRva2VuKCk7CiAgICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJ7
IikgewogICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwg
InsiLCBfX0xJTkVfXyk7Ci0gICAgICAgICRzZWxmLT5wYXJzZVNlcmlhbGl6YXRpb25QYXR0ZXJu
TWFwKCk7CisgICAgICAgIG15ICRhdHRyaWJ1dGVzID0gJHNlbGYtPnBhcnNlU2VyaWFsaXphdGlv
bkF0dHJpYnV0ZXMoKTsKICAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdl
dFRva2VuKCksICJ9IiwgX19MSU5FX18pOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biBcQHskYXR0cmlidXRlc307CiAgICAgfQogICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAiWyIp
IHsKLSAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICJb
IiwgX19MSU5FX18pOwotICAgICAgICAkc2VsZi0+cGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybkxp
c3QoKTsKLSAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCks
ICJdIiwgX19MSU5FX18pOwotICAgICAgICByZXR1cm47CisgICAgICAgIGRpZSAiU2VyaWFsaXph
dGlvbiBvZiBsaXN0cyBwYXR0ZXJuIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLiI7CiAgICAg
fQogICAgIGlmICgkbmV4dC0+dHlwZSgpID09IElkZW50aWZpZXJUb2tlbikgewotICAgICAgICAk
c2VsZi0+YXNzZXJ0VG9rZW5UeXBlKCRzZWxmLT5nZXRUb2tlbigpLCBJZGVudGlmaWVyVG9rZW4p
OwotICAgICAgICByZXR1cm47CisgICAgICAgIG15IEBhdHRyaWJ1dGVzID0gKCk7CisgICAgICAg
IG15ICR0b2tlbiA9ICRzZWxmLT5nZXRUb2tlbigpOworICAgICAgICAkc2VsZi0+YXNzZXJ0VG9r
ZW5UeXBlKCR0b2tlbiwgSWRlbnRpZmllclRva2VuKTsKKyAgICAgICAgcHVzaChAYXR0cmlidXRl
cywgJHRva2VuLT52YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuIFxAYXR0cmlidXRlczsKICAgICB9
CiAgICAgJHNlbGYtPmFzc2VydFVuZXhwZWN0ZWRUb2tlbigkbmV4dC0+dmFsdWUoKSwgX19MSU5F
X18pOwogfQogCi1zdWIgcGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybk1hcAorc3ViIHBhcnNlU2Vy
aWFsaXphdGlvbkF0dHJpYnV0ZXMKIHsKICAgICBteSAkc2VsZiA9IHNoaWZ0OwotICAgIG15ICRu
ZXh0ID0gJHNlbGYtPm5leHRUb2tlbigpOwotICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAiZ2V0
dGVyIikgewotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4o
KSwgImdldHRlciIsIF9fTElORV9fKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAo
JG5leHQtPnZhbHVlKCkgZXEgImluaGVyaXQiKSB7Ci0gICAgICAgICRzZWxmLT5hc3NlcnRUb2tl
blZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiaW5oZXJpdCIsIF9fTElORV9fKTsKLSAgICAgICAg
JHNlbGYtPnBhcnNlSWRlbnRpZmllcnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBp
ZiAoJG5leHQtPnR5cGUoKSA9PSBJZGVudGlmaWVyVG9rZW4pIHsKLSAgICAgICAgJHNlbGYtPmFz
c2VydFRva2VuVHlwZSgkc2VsZi0+Z2V0VG9rZW4oKSwgSWRlbnRpZmllclRva2VuKTsKLSAgICAg
ICAgJHNlbGYtPnBhcnNlSWRlbnRpZmllcnMoKTsKLSAgICB9Ci19CisgICAgbXkgJHRva2VuID0g
JHNlbGYtPmdldFRva2VuKCk7CisKKyAgICBpZiAoJHRva2VuLT52YWx1ZSgpIGVxICJnZXR0ZXIi
KSB7CisgICAgICAgIGRpZSAiU2VyaWFsaXplciBnZXR0ZXIga2V5d29yZCBpcyBub3QgY3VycmVu
dGx5IHN1cHBvcnRlZC4iOwogCi1zdWIgcGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybkxpc3QKLXsK
LSAgICBteSAkc2VsZiA9IHNoaWZ0OwotICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tlbigp
OwotICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAiZ2V0dGVyIikgewotICAgICAgICAkc2VsZi0+
YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgImdldHRlciIsIF9fTElORV9fKTsK
LSAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAoJG5leHQtPnR5cGUoKSA9PSBJZGVudGlm
aWVyVG9rZW4pIHsKLSAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVHlwZSgkc2VsZi0+Z2V0VG9r
ZW4oKSwgSWRlbnRpZmllclRva2VuKTsKLSAgICAgICAgJHNlbGYtPnBhcnNlSWRlbnRpZmllcnMo
KTsKKyAgICBpZiAoJHRva2VuLT52YWx1ZSgpIGVxICJpbmhlcml0IikgeworICAgICAgICBkaWUg
IlNlcmlhbGl6ZXIgaW5oZXJpdCBrZXl3b3JkIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLiI7
CiAgICAgfQorCisgICAgbXkgQGF0dHJpYnV0ZXMgPSAoKTsKKyAgICAkc2VsZi0+YXNzZXJ0VG9r
ZW5UeXBlKCR0b2tlbiwgSWRlbnRpZmllclRva2VuKTsKKyAgICBwdXNoKEBhdHRyaWJ1dGVzLCAk
dG9rZW4tPnZhbHVlKCkpOworICAgIHB1c2goQGF0dHJpYnV0ZXMsIEB7JHNlbGYtPnBhcnNlSWRl
bnRpZmllcnMoKX0pOworICAgIHJldHVybiBcQGF0dHJpYnV0ZXM7CiB9CiAKIHN1YiBwYXJzZUlk
ZW50aWZpZXJMaXN0CkBAIC0yMjY3LDYgKzIyNzAsMTkgQEAgc3ViIGFwcGx5TWVtYmVyTGlzdAog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgbmV4dDsKICAgICAgICAgfQorICAgICAgICBpZiAo
cmVmKCRpdGVtKSBlcSAiZG9tU2VyaWFsaXphYmxlIikgeworICAgICAgICAgICAgJGludGVyZmFj
ZS0+c2VyaWFsaXphYmxlKCRpdGVtKTsKKyAgICAgICAgICAgIG5leHQ7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAoJGludGVyZmFjZS0+c2VyaWFsaXphYmxlKSB7CisgICAgICAgIG15ICRu
dW1TZXJpYWxpemVyQXR0cmlidXRlcyA9IEB7JGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5hdHRy
aWJ1dGVzfTsKKyAgICAgICAgaWYgKCRudW1TZXJpYWxpemVyQXR0cmlidXRlcyA9PSAwKSB7Cisg
ICAgICAgICAgICBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEB7JGludGVyZmFjZS0+YXR0cmlidXRl
c30pIHsKKyAgICAgICAgICAgICAgICBwdXNoKEB7JGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5h
dHRyaWJ1dGVzfSwgJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCmluZGV4IDBiYjdiYTVkMDYxNjA2N2U1
ZmI4MmZhNjU1ZjhjZjUxOGIwOTc5NTEuLjk3OWE5NjU2NDQxODBiZTQzM2I1MDY1Y2Q3MDM5ZTJh
NDFmMzA4YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJKU0RP
TUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSlNET01JdGVyYXRvci5oIgogI2luY2x1ZGUgIkpT
RE9NUHJvbWlzZS5oIgorI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAi
UnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgPHJ1
bnRpbWUvRXJyb3IuaD4KQEAgLTUyLDYgKzUzLDggQEAgYm9vbCBzZXRKU1Rlc3ROb2RlTmFtZShK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUK
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0Tm9kZUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogYm9vbCBzZXRKU1Rl
c3ROb2RlQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OkVuY29kZWRKU1ZhbHVlKTsKIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oRXhlY1N0YXRlKik7CisKIGNsYXNzIEpTVGVz
dE5vZGVQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoK
ICAgICB0eXBlZGVmIEpTQzo6SlNOb25GaW5hbE9iamVjdCBCYXNlOwpAQCAtMTE1LDYgKzExOCw3
IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3ROb2RlUHJvdG90eXBlVGFibGVW
YWx1ZXNbXSA9CiAgICAgeyAia2V5cyIsIEpTQzo6RnVuY3Rpb24sIE5vSW50cmluc2ljLCB7IChp
bnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0Tm9kZVByb3RvdHlwZUZ1
bmN0aW9uS2V5cyksIChpbnRwdHJfdCkgKDApIH0gfSwKICAgICB7ICJ2YWx1ZXMiLCBKU0M6OkZ1
bmN0aW9uLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rp
b24+KGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblZhbHVlcyksIChpbnRwdHJfdCkgKDApIH0g
fSwKICAgICB7ICJmb3JFYWNoIiwgSlNDOjpGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIHsgKGludHB0
cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rp
b25Gb3JFYWNoKSwgKGludHB0cl90KSAoMSkgfSB9LAorICAgIHsgInRvSlNPTiIsIEpTQzo6RnVu
Y3Rpb24sIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlv
bj4oanNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKSwgKGludHB0cl90KSAoMCkgfSB9
LAogfTsKIAogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE5vZGVQcm90b3R5cGU6OnNfaW5mbyA9IHsg
IlRlc3ROb2RlUHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU1Rlc3ROb2RlUHJvdG90eXBlKSB9OwpAQCAtMjUzLDYgKzI1NywyMyBAQCBzdGF0aWMgaW5s
aW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRlc3RXb3JrZXJQ
cm9taXNlUHJvbWlzZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1
bmN0aW9uVG9KU09OKEV4ZWNTdGF0ZSogc3RhdGUpCit7CisgICAgQVNTRVJUKHN0YXRlKTsKKyAg
ICBhdXRvIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKKyAgICBhdXRvIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE5vZGUqPih0aGlzVmFsdWUpOworICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpeworICAgICAgICByZXR1cm4gdGhy
b3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3ROb2RlIiwgInRvSlNPTiIp
OworICAgIH0KKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVz
dE5vZGU6OmluZm8oKSk7CisKKyAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVj
dChzdGF0ZSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCAibmFtZSIpLCBKU1ZhbHVlOjpkZWNvZGUoanNUZXN0Tm9kZU5hbWUoc3RhdGUsIEpT
VmFsdWU6OmVuY29kZSh0aGlzVmFsdWUpLCBJZGVudGlmaWVyKCkpKSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCiB1c2luZyBUZXN0Tm9kZUl0ZXJhdG9yID0gSlNE
T01JdGVyYXRvcjxKU1Rlc3ROb2RlPjsKIHVzaW5nIFRlc3ROb2RlSXRlcmF0b3JQcm90b3R5cGUg
PSBKU0RPTUl0ZXJhdG9yUHJvdG90eXBlPEpTVGVzdE5vZGU+OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCmluZGV4IDA3
NzE4MTYxM2M2ODkxZjBjZDM4NTBjMDM3OWIyZTdhZTZlMTc0YWEuLjhiZWVjNjg1OTg2ZDk2MWEy
MzhiZWZmMzUwZTFmMjM5MWIzZDNhZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCkBAIC01MSw2ICs1MSw3IEBACiAj
aW5jbHVkZSAiSlNUZXN0T2JqLmgiCiAjaW5jbHVkZSAiSlNUZXN0U3ViT2JqLmgiCiAjaW5jbHVk
ZSAiSlNYUGF0aE5TUmVzb2x2ZXIuaCIKKyNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgog
I2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTVkdEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIlNWR1BvaW50LmgiCkBAIC05NjQsNiArOTY1LDggQEAgYm9vbCBzZXRK
U1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzoKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ29uc3RydWN0b3Io
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
CiBib29sIHNldEpTVGVzdE9iakNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oRXhlY1N0YXRlKik7CisK
IGNsYXNzIEpTVGVzdE9ialByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3Qg
ewogcHVibGljOgogICAgIHR5cGVkZWYgSlNDOjpKU05vbkZpbmFsT2JqZWN0IEJhc2U7CkBAIC0x
NDA0LDYgKzE0MDcsNyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJv
dG90eXBlVGFibGVWYWx1ZXNbXSA9CiAgICAgeyAiQ09OU1RfVkFMVUVfMTQiLCBEb250RGVsZXRl
IHwgUmVhZE9ubHkgfCBDb25zdGFudEludGVnZXIsIE5vSW50cmluc2ljLCB7IChsb25nIGxvbmcp
KDB4MWFiYykgfSB9LAogICAgIHsgIkNPTlNUX0pBVkFTQ1JJUFQiLCBEb250RGVsZXRlIHwgUmVh
ZE9ubHkgfCBDb25zdGFudEludGVnZXIsIE5vSW50cmluc2ljLCB7IChsb25nIGxvbmcpKDE1KSB9
IH0sCiAgICAgeyAicmVhZG9ubHkiLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBDb25zdGFudElu
dGVnZXIsIE5vSW50cmluc2ljLCB7IChsb25nIGxvbmcpKDApIH0gfSwKKyAgICB7ICJ0b0pTT04i
LCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0
aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKSwgKGludHB0cl90
KSAoMCkgfSB9LAogfTsKIAogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE9ialByb3RvdHlwZTo6c19p
bmZvID0geyAiVGVzdE9iamVjdFByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9N
RVRIT0RfVEFCTEUoSlNUZXN0T2JqUHJvdG90eXBlKSB9OwpAQCAtNzM3NSw2ICs3Mzc5LDI2IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25U
b1N0cmluZyhFeGVjU3RhdGUqIHN0YXRlCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOwogfQogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uVG9KU09OKEV4ZWNTdGF0ZSogc3RhdGUpCit7CisgICAgQVNTRVJUKHN0YXRlKTsK
KyAgICBhdXRvIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKKyAgICBhdXRvIGNhc3Rl
ZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7CisgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSl7CisgICAgICAgIHJldHVybiB0
aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iaiIsICJ0b0pTT04i
KTsKKyAgICB9CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rl
c3RPYmo6OmluZm8oKSk7CisKKyAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVj
dChzdGF0ZSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCAicmVhZE9ubHlTdHJpbmdBdHRyIiksIEpTVmFsdWU6OmRlY29kZShqc1Rlc3RPYmpS
ZWFkT25seVN0cmluZ0F0dHIoc3RhdGUsIEpTVmFsdWU6OmVuY29kZSh0aGlzVmFsdWUpLCBJZGVu
dGlmaWVyKCkpKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCAiZW51bUF0dHIiKSwgSlNWYWx1ZTo6ZGVjb2RlKGpzVGVzdE9iakVudW1BdHRy
KHN0YXRlLCBKU1ZhbHVlOjplbmNvZGUodGhpc1ZhbHVlKSwgSWRlbnRpZmllcigpKSkpOworICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImxvbmdB
dHRyIiksIEpTVmFsdWU6OmRlY29kZShqc1Rlc3RPYmpMb25nQXR0cihzdGF0ZSwgSlNWYWx1ZTo6
ZW5jb2RlKHRoaXNWYWx1ZSksIElkZW50aWZpZXIoKSkpKTsKKyAgICByZXN1bHQtPnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjcmVhdGUiKSwgSlNWYWx1ZTo6ZGVj
b2RlKGpzVGVzdE9iakNyZWF0ZShzdGF0ZSwgSlNWYWx1ZTo6ZW5jb2RlKHRoaXNWYWx1ZSksIElk
ZW50aWZpZXIoKSkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisK
IHZvaWQgSlNUZXN0T2JqOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihj
ZWxsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9U
ZXN0Tm9kZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5v
ZGUuaWRsCmluZGV4IDQ0ZjhjYTgyNzNlNzhmZjFkNTNhMWY5ZWM1ZjFmZTUzZWI5NjhiZGUuLjlk
MmEwNzhlYmZiZTQ3MmExMTg0OTY3ZTAwMWI5MGVjODFiOGFhOTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Tm9kZS5pZGwKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROb2RlLmlkbApAQCAtMjcsNCArMjcs
NiBAQAogCiAgICAgW0VuYWJsZWRBdFJ1bnRpbWU9RE9NSXRlcmF0b3JdIGl0ZXJhYmxlPFRlc3RO
b2RlPjsKICAgICBQcm9taXNlIHRlc3RXb3JrZXJQcm9taXNlKCk7CisKKyAgICBzZXJpYWxpemVy
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9U
ZXN0T2JqLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2Jq
LmlkbAppbmRleCAyMTBkNTVmOGEwYjVkN2Q4ZGZlZmViNjBhNGJjOTNkZmVjMmJlNGNmLi40ZWIw
NzJhMDJjMTRiM2JhNWNlZWQ0NmEzYzRkOTI2Y2Y0NzEzMWM3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCkBAIC00MTAsNiArNDEwLDkg
QEAgZW51bSBUZXN0Q29uZmlkZW5jZSB7ICJoaWdoIiwgImtpbmRhLWxvdyIgfTsKICAgICB2b2lk
IGF0dGFjaFNoYWRvd1Jvb3QoVGVzdERpY3Rpb25hcnkgaW5pdCk7CiAKICAgICBzdHJpbmdpZmll
ciBhdHRyaWJ1dGUgVVNWU3RyaW5nIHN0cmluZ2lmaWVyQXR0cmlidXRlOworCisKKyAgICBzZXJp
YWxpemVyID0ge3JlYWRPbmx5U3RyaW5nQXR0ciwgY3JlYXRlLCBlbnVtQXR0ciwgbG9uZ0F0dHJ9
OwogfTsKIAogLy8gVGhlIGZvbGxvd2luZyBjb21tZW50IHNob3VsZCBub3QgZ2VuZXJhdGUgYW55
IGNvZGUuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggMzE4MGMxNjk2N2JmZTc0ZDM0MGEzOGY5YjBiNDAyNjJmNmNjMzExZS4u
YWRjZTFmZjVjNDdlYzBjMDJlZDEwYmQwOTA2NjNkNDg4NmM3Y2Y4OCAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE4IEBACisyMDE2LTA5LTI3ICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29t
PgorCisgICAgICAgIEFkZCBXZWJJREwgc3BlY2lhbCBvcGVyYXRpb24gc3VwcG9ydDogc2VyaWFs
aXplcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2
MjkzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgVmVyaWZ5
IHRoZSBuZXcgQVBJIG9mIHRoZSBvYmplY3RzIGFuZCBjaGVjayB3aGF0IGhhcHBlbnMgd2hlbiB1
c2VyCisgICAgICAgIG1vZGlmaWVzIHRoZSB2YWx1ZXMgYW5kIHR5cGVzIG9mIHRoZSBhdHRyaWJ1
dGVzLCBvciBhZGRzIGEgbnVsbCB2YWx1ZS4KKworICAgICAgICAqIGZhc3QvbWVkaWFzdHJlYW0v
UlRDSWNlQ2FuZGlkYXRlLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L21lZGlhc3RyZWFt
L1JUQ0ljZUNhbmRpZGF0ZS5odG1sOgorICAgICAgICAqIGZhc3QvbWVkaWFzdHJlYW0vUlRDU2Vz
c2lvbkRlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L21lZGlhc3RyZWFt
L1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5odG1sOgorCiAyMDE2LTA5LTI3ICBOYW4gV2FuZyAgPG5f
d2FuZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IENyYXNoVHJhY2VyOiBjb20uYXBwbGUuV2Vi
S2l0LldlYkNvbnRlbnQgYXQgV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6bG9jYWxDYXJldFJlY3RG
b3JDaGFyYWN0ZXJPZmZzZXQoV2ViQ29yZTo6UmVuZGVyT2JqZWN0KiYsIFdlYkNvcmU6OkNoYXJh
Y3Rlck9mZnNldCBjb25zdCYpICsgMTE2CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L21l
ZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0
L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS1leHBlY3RlZC50eHQKaW5kZXggM2M5MDI5ODM2
NTljYzdlZTM4MWZhNTFkOGM0NjI1YTQzYjMwN2Y0NS4uYTJkYzcxYWZiYjBiZjBmYjcyYTVhMzFl
ZTgxYWFmZTUyYzNiYTM4NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVh
bS9SVENJY2VDYW5kaWRhdGUtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbWVk
aWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLWV4cGVjdGVkLnR4dApAQCAtNyw2ICs3LDIxIEBAIFBB
U1MgY2FuZGlkYXRlID0gbmV3IFJUQ0ljZUNhbmRpZGF0ZShpbml0aWFsaXplcik7IGRpZCBub3Qg
dGhyb3cgZXhjZXB0aW9uLgogUEFTUyBjYW5kaWRhdGUuY2FuZGlkYXRlIGlzICJmb28iCiBQQVNT
IGNhbmRpZGF0ZS5zZHBNaWQgaXMgImJhciIKIFBBU1MgY2FuZGlkYXRlLnNkcE1MaW5lSW5kZXgg
aXMgNgorUEFTUyBSVENJY2VDYW5kaWRhdGUucHJvdG90eXBlLnRvSlNPTiBpcyBkZWZpbmVkLgor
UEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFJUQ0ljZUNhbmRpZGF0ZS5wcm90
b3R5cGUsICJ0b0pTT04iKS5lbnVtZXJhYmxlIGlzIHRydWUKK1BBU1MgT2JqZWN0LmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihSVENJY2VDYW5kaWRhdGUucHJvdG90eXBlLCAidG9KU09OIikud3Jp
dGFibGUgaXMgdHJ1ZQorUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFJUQ0lj
ZUNhbmRpZGF0ZS5wcm90b3R5cGUsICJ0b0pTT04iKS5jb25maWd1cmFibGUgaXMgdHJ1ZQorUEFT
UyBSVENJY2VDYW5kaWRhdGUucHJvdG90eXBlLnRvSlNPTi5sZW5ndGggaXMgMAorUEFTUyBSVENJ
Y2VDYW5kaWRhdGUucHJvdG90eXBlLnRvSlNPTi5uYW1lIGlzICJ0b0pTT04iCitQQVNTIE9iamVj
dC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoanNvbk1hcCwgImNhbmRpZGF0ZSIpLmVudW1lcmFi
bGUgaXMgdHJ1ZQorUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGpzb25NYXAs
ICJjYW5kaWRhdGUiKS53cml0YWJsZSBpcyB0cnVlCitQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoanNvbk1hcCwgImNhbmRpZGF0ZSIpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCitQ
QVNTIGNoaWxkQ2FuZGlkYXRlLnRvSlNPTigpOyB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBD
YW4gb25seSBjYWxsIFJUQ0ljZUNhbmRpZGF0ZS50b0pTT04gb24gaW5zdGFuY2VzIG9mIFJUQ0lj
ZUNhbmRpZGF0ZS4KK1BBU1MgSlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNPTigpKSBpcyAi
e1wiY2FuZGlkYXRlXCI6XCJmb29cIixcInNkcE1pZFwiOlwiYmFyXCIsXCJzZHBNTGluZUluZGV4
XCI6Nn0iCitQQVNTIEpTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSkgaXMgIntcImNh
bmRpZGF0ZVwiOlwiZm9vXCIsXCJzZHBNaWRcIjpcImJhclwiLFwic2RwTUxpbmVJbmRleFwiOjZ9
IgorUEFTUyBKU09OLnN0cmluZ2lmeShjYW5kaWRhdGUudG9KU09OKCkpIGlzICJ7XCJjYW5kaWRh
dGVcIjpcImZvb1wiLFwic2RwTWlkXCI6XCJiYXJcIixcInNkcE1MaW5lSW5kZXhcIjo2fSIKK1BB
U1MgSlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNPTigpKSBpcyAie1wiY2FuZGlkYXRlXCI6
XCJmb29cIixcInNkcE1pZFwiOlwiYmFyXCIsXCJzZHBNTGluZUluZGV4XCI6Nn0iCitQQVNTIEpT
T04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSkgaXMgIntcImNhbmRpZGF0ZVwiOlwiZm9v
XCIsXCJzZHBNaWRcIjpcImJhclwiLFwic2RwTUxpbmVJbmRleFwiOjZ9IgogCiBBdHRyaWJ1dGVz
IGFyZSByZWFkb25seQogY2FuZGlkYXRlLmNhbmRpZGF0ZSA9ICJmb28tdXBkYXRlZCIKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmh0bWwg
Yi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5odG1sCmluZGV4
IGM0MDMxNTY1NTY5ZTIzOGI2YzRjNWE4OWY4YTliMTA3OTI0YTM3YWYuLjUzZjQ5Y2I3MmYwOTFh
NDEzZTY3NTY5YjdjMzEzNzMzNmM3MGQ4YzYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3Qv
bWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9t
ZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaHRtbApAQCAtMTMsNiArMTMsMzMgQEAKICAgICAg
ICAgICAgIHNob3VsZEJlKCdjYW5kaWRhdGUuY2FuZGlkYXRlJywgJyJmb28iJyk7CiAgICAgICAg
ICAgICBzaG91bGRCZSgnY2FuZGlkYXRlLnNkcE1pZCcsICciYmFyIicpOwogICAgICAgICAgICAg
c2hvdWxkQmUoJ2NhbmRpZGF0ZS5zZHBNTGluZUluZGV4JywgJzYnKTsKKyAgICAgICAgICAgIHNo
b3VsZEJlRGVmaW5lZCgnUlRDSWNlQ2FuZGlkYXRlLnByb3RvdHlwZS50b0pTT04nKTsKKyAgICAg
ICAgICAgIHNob3VsZEJlVHJ1ZSgnT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihSVENJ
Y2VDYW5kaWRhdGUucHJvdG90eXBlLCAidG9KU09OIikuZW51bWVyYWJsZScpOworICAgICAgICAg
ICAgc2hvdWxkQmVUcnVlKCdPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFJUQ0ljZUNh
bmRpZGF0ZS5wcm90b3R5cGUsICJ0b0pTT04iKS53cml0YWJsZScpOworICAgICAgICAgICAgc2hv
dWxkQmVUcnVlKCdPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFJUQ0ljZUNhbmRpZGF0
ZS5wcm90b3R5cGUsICJ0b0pTT04iKS5jb25maWd1cmFibGUnKTsKKyAgICAgICAgICAgIHNob3Vs
ZEJlKCdSVENJY2VDYW5kaWRhdGUucHJvdG90eXBlLnRvSlNPTi5sZW5ndGgnLCAnMCcpOworICAg
ICAgICAgICAgc2hvdWxkQmUoJ1JUQ0ljZUNhbmRpZGF0ZS5wcm90b3R5cGUudG9KU09OLm5hbWUn
LCAnInRvSlNPTiInKTsKKworICAgICAgICAgICAgdmFyIGpzb25NYXAgPSBjYW5kaWRhdGUudG9K
U09OKCk7CisgICAgICAgICAgICBzaG91bGRCZVRydWUoJ09iamVjdC5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoanNvbk1hcCwgImNhbmRpZGF0ZSIpLmVudW1lcmFibGUnKTsKKyAgICAgICAgICAg
IHNob3VsZEJlVHJ1ZSgnT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihqc29uTWFwLCAi
Y2FuZGlkYXRlIikud3JpdGFibGUnKTsKKyAgICAgICAgICAgIHNob3VsZEJlVHJ1ZSgnT2JqZWN0
LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihqc29uTWFwLCAiY2FuZGlkYXRlIikuY29uZmlndXJh
YmxlJyk7CisKKyAgICAgICAgICAgIHZhciBjaGlsZFJUQ0ljZUNhbmRpZGF0ZSA9IGZ1bmN0aW9u
KCkge307CisgICAgICAgICAgICBjaGlsZFJUQ0ljZUNhbmRpZGF0ZS5wcm90b3R5cGUgPSBPYmpl
Y3QuY3JlYXRlKFJUQ0ljZUNhbmRpZGF0ZS5wcm90b3R5cGUpOworICAgICAgICAgICAgdmFyIGNo
aWxkQ2FuZGlkYXRlID0gbmV3IGNoaWxkUlRDSWNlQ2FuZGlkYXRlKCk7CisgICAgICAgICAgICBz
aG91bGRUaHJvdygnY2hpbGRDYW5kaWRhdGUudG9KU09OKCk7Jyk7CisKKyAgICAgICAgICAgIHNo
b3VsZEJlRXF1YWxUb1N0cmluZygnSlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNPTigpKScs
ICd7ImNhbmRpZGF0ZSI6ImZvbyIsInNkcE1pZCI6ImJhciIsInNkcE1MaW5lSW5kZXgiOjZ9Jyk7
CisgICAgICAgICAgICBjYW5kaWRhdGUubmV3QXR0cmlidXRlID0gIm5ldyB2YWx1ZSI7CisgICAg
ICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ0pTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50
b0pTT04oKSknLCAneyJjYW5kaWRhdGUiOiJmb28iLCJzZHBNaWQiOiJiYXIiLCJzZHBNTGluZUlu
ZGV4Ijo2fScpOworICAgICAgICAgICAgY2FuZGlkYXRlLnNkcE1MaW5lSW5kZXggPSAibm90IGEg
bnVtYmVyIjsKKyAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnSlNPTi5zdHJpbmdp
ZnkoY2FuZGlkYXRlLnRvSlNPTigpKScsICd7ImNhbmRpZGF0ZSI6ImZvbyIsInNkcE1pZCI6ImJh
ciIsInNkcE1MaW5lSW5kZXgiOjZ9Jyk7CisgICAgICAgICAgICBjYW5kaWRhdGUuc2RwTWlkID0g
NzsKKyAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnSlNPTi5zdHJpbmdpZnkoY2Fu
ZGlkYXRlLnRvSlNPTigpKScsICd7ImNhbmRpZGF0ZSI6ImZvbyIsInNkcE1pZCI6ImJhciIsInNk
cE1MaW5lSW5kZXgiOjZ9Jyk7CisgICAgICAgICAgICBjYW5kaWRhdGUuc2RwTWlkID0gbnVsbDsK
KyAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnSlNPTi5zdHJpbmdpZnkoY2FuZGlk
YXRlLnRvSlNPTigpKScsICd7ImNhbmRpZGF0ZSI6ImZvbyIsInNkcE1pZCI6ImJhciIsInNkcE1M
aW5lSW5kZXgiOjZ9Jyk7CisKICAgICAgICAgICAgIGRlYnVnKCIiKTsKIAogICAgICAgICAgICAg
ZGVidWcoIkF0dHJpYnV0ZXMgYXJlIHJlYWRvbmx5Iik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi1leHBlY3Rl
ZC50eHQKaW5kZXggODFhZTAxYTdmN2Y5ZDgwMzk5NTk5OTkzZjgzNmEyZDk2MTUyM2JiMS4uNTlk
M2JjZDE3NTA5YjI3ZGU4NGRmMjg4ZDkzY2NiMjZkZDQ0M2Q3MCAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9u
LWV4cGVjdGVkLnR4dApAQCAtNiw2ICs2LDcgQEAgT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUKIFBB
U1Mgc2Vzc2lvbkRlc2NyaXB0aW9uID0gbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihpbml0aWFs
aXplcik7IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgogUEFTUyBzZXNzaW9uRGVzY3JpcHRpb24u
dHlwZSBpcyAib2ZmZXIiCiBQQVNTIHNlc3Npb25EZXNjcmlwdGlvbi5zZHAgaXMgImZvb2JhciIK
K1BBU1MgSlNPTi5zdHJpbmdpZnkoc2Vzc2lvbkRlc2NyaXB0aW9uLnRvSlNPTigpKSBpcyAie1wi
dHlwZVwiOlwib2ZmZXJcIixcInNkcFwiOlwiZm9vYmFyXCJ9IgogKioqIEF0dHJpYnV0ZXMgYXJl
IHJlYWQtb25seS4KIFBBU1Mgc2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUgPSAnYW5zd2VyJyBkaWQg
bm90IHRocm93IGV4Y2VwdGlvbi4KIFBBU1Mgc2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUgaXMgJ29m
ZmVyJwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENTZXNzaW9u
RGVzY3JpcHRpb24uaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDU2Vzc2lv
bkRlc2NyaXB0aW9uLmh0bWwKaW5kZXggOGEyZTkzM2QxYzRiZDFkZDRmM2RlYjAyN2JkZTdiMDk5
ZjEwN2FiMS4uODM0M2ViODI4YzZiODBlNjMxNTkwMjAzZjI0NzUwMTk5YzZkZThiNyAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24u
aHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlw
dGlvbi5odG1sCkBAIC0xNCw2ICsxNCw3IEBACiAgICAgICAgICAgICBzaG91bGROb3RUaHJvdygi
c2Vzc2lvbkRlc2NyaXB0aW9uID0gbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihpbml0aWFsaXpl
cik7Iik7CiAgICAgICAgICAgICBzaG91bGRCZSgnc2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUnLCAn
Im9mZmVyIicpOwogICAgICAgICAgICAgc2hvdWxkQmUoJ3Nlc3Npb25EZXNjcmlwdGlvbi5zZHAn
LCAnImZvb2JhciInKTsKKyAgICAgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnSlNPTi5z
dHJpbmdpZnkoc2Vzc2lvbkRlc2NyaXB0aW9uLnRvSlNPTigpKScsICd7InR5cGUiOiJvZmZlciIs
InNkcCI6ImZvb2JhciJ9Jyk7CiAKICAgICAgICAgICAgIGRlYnVnKCIqKiogQXR0cmlidXRlcyBh
cmUgcmVhZC1vbmx5LiIpOwogICAgICAgICAgICAgc2hvdWxkTm90VGhyb3coInNlc3Npb25EZXNj
cmlwdGlvbi50eXBlID0gJ2Fuc3dlciciKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290071</attachid>
            <date>2016-09-28 03:35:43 -0700</date>
            <delta_ts>2016-09-28 04:51:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156293-20160928123242.patch</filename>
            <type>text/plain</type>
            <size>28849</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2NTAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTYyZmM2ZDEyNzhiNzVj
NjFjMzAzOTM3NzkwNmU5MjZmMmM2NGRmYi4uNzMyOGI4YTQyYjFkMGY0Mzg0NTBkODg5NDAwZDll
YjNmMzM4OTQ3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0IEBACisyMDE2LTA5LTI3ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIEFkZCBXZWJJREwg
c3BlY2lhbCBvcGVyYXRpb24gc3VwcG9ydDogc2VyaWFsaXplcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MjkzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgdGhlIHNlcmlhbGl6
ZXIgc3BlY2lhbCBvcGVyYXRpb24gZm9yIFdlYklETHMsCisgICAgICAgIGN1cnJlbnQgaW1wbGVt
ZW50YXRpb24gYWRkcyBzdXBwb3J0IGZvcjoKKyAgICAgICAgICAtIGp1c3QgdGhlIGtleXdvcmQ6
IHNlcmlhbGl6ZXI7IEl0IHdpbGwgcmV0dXJuIGFsbCB0aGUKKyAgICAgICAgICAgIGF0dHJpYnV0
ZXMgb2YgaW4gYW4gb2JqZWN0LgorICAgICAgICAgIC0gbWFwIG9mIGVudHJpZXMgd2l0aCB0aGUg
YXR0cmlidXRlczogc2VyaWFsaXplciA9IHthdHRyaWJ1dGUxLAorICAgICAgICAgICAgYXR0cmli
dXRlMiwgLi4ufQorCisgICAgICAgIEl0IGNyZWF0ZXMgYSB0b0pTT04gbWV0aG9kIHRoYXQgcmV0
dXJucyB0aGUgc2VyaWFsaXplZCB2YWx1ZQorICAgICAgICBjb252ZXJ0ZWQgaW50byBhbiBFQ01B
U2NyaXB0IHZhbHVlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBjaGVjayB0aGUKKyAgICAgICAgZGVm
aW5pdGlvbiBvZiB0aGUgb3BlcmF0aW9uOgorCisgICAgICAgIGh0dHA6Ly9oZXljYW0uZ2l0aHVi
LmlvL3dlYmlkbC8jaWRsLXNlcmlhbGl6ZXJzCisKKyAgICAgICAgV2UgaGF2ZSBjcmVhdGVkIGEg
bmV3IGZ1bmN0aW9uIGluIHRoZSBBUEkgb2YgdGhlIG9iamVjdHMKKyAgICAgICAgdGhhdCBhcmUg
bWFya2VkIGFzIHNlcmlhbGl6ZXIuCisKKyAgICAgICAgVXNlZCB0aGUgc3VwcG9ydCB0byBhZGQg
bmV3IEFQSSBmb3IgUlRDSWNlQ2FuZGlkYXRlIGFuZAorICAgICAgICBSVENTZXNzaW9uRGVzY3Jp
cHRpb24uCisKKyAgICAgICAgVXBkYXRlZCB0aGUgdGVzdHMgZXhwZWN0YXRpb25zIG9mIHRoZSBi
aW5kaW5ncy4KKworICAgICAgICBUZXN0czogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROb2Rl
LmlkbAorICAgICAgICAgICAgICAgYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCisg
ICAgICAgICAgICAgICBmYXN0L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5odG1sCisgICAg
ICAgICAgICAgICBmYXN0L21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5odG1sCisK
KyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5pZGw6IEFkZGVk
IHRoZSBzZXJpYWxpemVyCisgICAgICAgIG9wZXJhdGlvbi4KKyAgICAgICAgKiBNb2R1bGVzL21l
ZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5pZGw6IEFkZGVkIHRoZQorICAgICAgICBz
ZXJpYWxpemVyIG9wZXJhdGlvbi4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOiBBZGRlZCB0aGUg
Y2FsbHMgdG8gdGhlIHNlcmlhbGl6ZXIKKyAgICAgICAgY29kZSBnZW5lcmF0b3IuCisgICAgICAg
IChHZW5lcmF0ZVNlcmlhbGl6ZXJGdW5jdGlvbik6IEFkZGVkLCBnZW5lcmF0ZXMgdGhlIHRvSlNP
TiBmdW5jdGlvbgorICAgICAgICBhZGRpbmcgYWxsIHRoZSBzZXJpYWxpemFibGUtPmF0dHJpYnV0
ZXMgdmFsdWUgdG8gYW4gb2JqZWN0IGFzCisgICAgICAgIGRlZmluZWQgaW4gdGhlIHNwZWMuCisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG06IE1vZGlmaWVkIHRoZSBzZXJp
YWxpemVyIHBhcnNlcgorICAgICAgICB0aGF0IHdhcyB1bnVzZWQgdG8gc3VwcG9ydCB0aGUgV2Vi
SURMIHNwZWMgcGFydHMuIEFkZGVkIGEgbmV3CisgICAgICAgIGRvbVNlcmlhbGl6YWJsZSB0eXBl
IHRvIHN0b3JlIHRoZSBsaXN0IG9mIGF0dHJpYnV0ZXMgaW4gdGhlCisgICAgICAgIHBvc3NpYmxl
IG1hcC4KKyAgICAgICAgKHBhcnNlU2VyaWFsaXplcik6IE1vZGlmaWVkIHRoZSBmdW5jdGlvbiB0
byBmb2xsb3cgdGhlCisgICAgICAgIHNlbWljb2xvbiBydWxlIGluIHRoZSBzcGVjLCBub3cgdGhl
IHNlcmlhbGl6ZXIgbGluZSBtdXN0IGhhdmUgYQorICAgICAgICBzZW1pY29sb24gbGlrZSBhbnkg
b3RoZXIgbGluZS4KKyAgICAgICAgKHBhcnNlU2VyaWFsaXplclJlc3QpOiBUaGUgZnVuY3Rpb24g
bm93IGhhcyB0byBnZXQgdGhlIGF0dHJpYnV0ZXMKKyAgICAgICAgbGlzdCBmcm9tIHRoZSBwYXR0
ZXJuIHBhcnNpbmcgZnVuY3Rpb24gYW5kIGFkZCB0aGVtIHRvIHRoZQorICAgICAgICBkb21TZXJp
YWxpemFibGUgaXRlbS4KKyAgICAgICAgKHBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm4pOiBOb3cg
dGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBsaXN0IG9mCisgICAgICAgIGF0dHJpYnV0ZXMgaW4g
dGhlIHNlcmlhbGl6YWJsZSBtYXAgb3IgbGlzdCBpZiB3ZSBoYXZlIG9uZS4KKyAgICAgICAgKHBh
cnNlU2VyaWFsaXphdGlvbkF0dHJpYnV0ZXMpOiBBZGRlZCwgdGhpcyBmdW5jdGlvbiByZXBsYWNl
cyB0aGUKKyAgICAgICAgTWFwIGFuZCBMaXN0IGZ1bmN0aW9ucywgdGhlIGN1cnJlbnRseSBzdXBw
b3J0ZWQgcGFydHMgYXJlIHNpbWlsYXIKKyAgICAgICAgZm9yIGJvdGggc2l0dWF0aW9ucy4KKyAg
ICAgICAgKGFwcGx5TWVtYmVyTGlzdCk6IEFkZGVkIHRoZSBzZXJpYWxpemFibGUgaXRlbSB0byB0
aGUgaW50ZXJmYWNlCisgICAgICAgIHZhcmlhYmxlIGFuZCBwb3B1bGF0ZSB0aGUgc2VyaWFsaXph
YmxlIGluIGNhc2UgdGhlcmUgaXMgbm90IGEKKyAgICAgICAgZGVmaW5lZCBtYXAuCisgICAgICAg
IChwYXJzZVNlcmlhbGl6YXRpb25QYXR0ZXJuTWFwKTogUmVwbGFjZWQgd2l0aAorICAgICAgICBw
YXJzZVNlcmlhbGl6YXRpb25BdHRyaWJ1dGVzLgorICAgICAgICAocGFyc2VTZXJpYWxpemF0aW9u
UGF0dGVybkxpc3QpOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Tm9kZS5jcHA6IE1vZGlmaWVkIHRoZSBleHBlY3RlZCByZXN1bHQuCisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04pOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOiBNb2RpZmllZCB0aGUgZXhwZWN0
ZWQgcmVzdWx0LgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25U
b0pTT04pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Tm9kZS5pZGw6IEFk
ZGVkIHRoZSBzZXJpYWxpemVyIHRlc3QuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Rlc3RPYmouaWRsOiBBZGRlZCBzZXJpYWxpemVyIG1hcCB0ZXN0LgorCiAyMDE2LTA5LTI3ICBK
b29uZ2h1biBQYXJrICA8amg3MTgucGFya0BzYW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMXSBG
aXggZGVidWcgYnVpbGQgYnJlYWsgc2luY2UgcjIwNjQ4MS4gVW5yZXZpZXdlZApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaWRs
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaWRs
CmluZGV4IDA0MDc4M2Y3ZmEwZDY3YzU2YmI3MjBkMTVlYjIwYmYyNDMyNWI4ODguLjhjMmQ5YmU4
NDQ4NTA1NGMxNmI1MTkzMzQzY2FkYzc2NzcwMjlmNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmlkbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5pZGwKQEAgLTM5LDUg
KzM5LDcgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGNhbmRpZGF0ZTsKICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nPyBzZHBNaWQ7CiAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIHVuc2lnbmVkIHNob3J0PyBzZHBNTGluZUluZGV4OworCisgICAgc2VyaWFsaXplciA9
IHtjYW5kaWRhdGUsIHNkcE1pZCwgc2RwTUxpbmVJbmRleH07CiB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlw
dGlvbi5pZGwKaW5kZXggNDc1NWFkYTI1MzBlOGY2NWEyYTZlZWNkOWI3YjcwYTM5ZWVhNWExZS4u
NzM1MDkyYmM1MzA1OGZlY2ZjNzllZDY5NzFlNGQyOTk2YTE1NDVkYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24uaWRs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2Ny
aXB0aW9uLmlkbApAQCAtMzgsNiArMzgsOCBAQAogXSBpbnRlcmZhY2UgUlRDU2Vzc2lvbkRlc2Ny
aXB0aW9uIHsKICAgICBbU2V0dGVyUmFpc2VzRXhjZXB0aW9uXSByZWFkb25seSBhdHRyaWJ1dGUg
UlRDU2RwVHlwZSB0eXBlOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgc2RwOwor
CisgICAgc2VyaWFsaXplciA9IHt0eXBlLCBzZHB9OwogfTsKIAogZW51bSBSVENTZHBUeXBlIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMu
cG0KaW5kZXggZmViMTVkZWVmNDYzY2FkZGZhNzk4ZGUzMjJiZDQyY2QxMWY0OTUwMC4uNmM5Yzcw
MGY0NTgyOTUzMzk5MDZkMmEyYTAxZTE1MzMwY2RiMjUxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KQEAgLTY2NCw2ICs2NjQs
NyBAQCBzdWIgUHJvdG90eXBlRnVuY3Rpb25Db3VudAogICAgIH0KIAogICAgICRjb3VudCArPSBz
Y2FsYXIgQHskaW50ZXJmYWNlLT5pdGVyYWJsZS0+ZnVuY3Rpb25zfSBpZiAkaW50ZXJmYWNlLT5p
dGVyYWJsZTsKKyAgICAkY291bnQgKz0gc2NhbGFyIEB7JGludGVyZmFjZS0+c2VyaWFsaXphYmxl
LT5mdW5jdGlvbnN9IGlmICRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZTsKIAogICAgIHJldHVybiAk
Y291bnQ7CiB9CkBAIC0xNjgwLDYgKzE2ODEsNyBAQCBzdWIgR2VuZXJhdGVQcm9wZXJ0aWVzSGFz
aFRhYmxlCiAKICAgICBteSBAZnVuY3Rpb25zID0gQHskaW50ZXJmYWNlLT5mdW5jdGlvbnN9Owog
ICAgIHB1c2goQGZ1bmN0aW9ucywgQHskaW50ZXJmYWNlLT5pdGVyYWJsZS0+ZnVuY3Rpb25zfSkg
aWYgSXNLZXlWYWx1ZUl0ZXJhYmxlSW50ZXJmYWNlKCRpbnRlcmZhY2UpOworICAgIHB1c2goQGZ1
bmN0aW9ucywgQHskaW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPmZ1bmN0aW9uc30pIGlmICRpbnRl
cmZhY2UtPnNlcmlhbGl6YWJsZTsKICAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQGZ1bmN0aW9u
cykgewogICAgICAgICBuZXh0IGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IlByaXZhdGVJZGVudGlmaWVyIn0gYW5kIG5vdCAkZnVuY3Rpb24tPnNpZ25hdHVy
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlB1YmxpY0lkZW50aWZpZXIifSk7CiAgICAgICAgIG5l
eHQgaWYgKCRmdW5jdGlvbi0+aXNTdGF0aWMpOwpAQCAtMjMyMiw2ICsyMzI0LDcgQEAgc3ViIEdl
bmVyYXRlSW1wbGVtZW50YXRpb24KIAogICAgIG15IEBmdW5jdGlvbnMgPSBAeyRpbnRlcmZhY2Ut
PmZ1bmN0aW9uc307CiAgICAgcHVzaChAZnVuY3Rpb25zLCBAeyRpbnRlcmZhY2UtPml0ZXJhYmxl
LT5mdW5jdGlvbnN9KSBpZiBJc0tleVZhbHVlSXRlcmFibGVJbnRlcmZhY2UoJGludGVyZmFjZSk7
CisgICAgcHVzaChAZnVuY3Rpb25zLCBAeyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+ZnVuY3Rp
b25zfSkgaWYgJGludGVyZmFjZS0+c2VyaWFsaXphYmxlOwogCiAgICAgbXkgJG51bUNvbnN0YW50
cyA9IEB7JGludGVyZmFjZS0+Y29uc3RhbnRzfTsKICAgICBteSAkbnVtRnVuY3Rpb25zID0gQGZ1
bmN0aW9uczsKQEAgLTM1MzMsNiArMzUzNiw4IEBAIEVORAogCiAgICAgfQogCisgICAgR2VuZXJh
dGVTZXJpYWxpemVyRnVuY3Rpb24oJGludGVyZmFjZSwgJGludGVyZmFjZU5hbWUsICRjbGFzc05h
bWUpIGlmICRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZTsKKwogICAgIGlmICgkaW50ZXJmYWNlLT5p
dGVyYWJsZSkgewogICAgICAgICBHZW5lcmF0ZUltcGxlbWVudGF0aW9uSXRlcmFibGVGdW5jdGlv
bnMoJGludGVyZmFjZSk7CiAgICAgfQpAQCAtMzc1OCw2ICszNzYzLDM4IEBAIEVORAogICAgIHB1
c2goQGltcGxDb250ZW50LCAiXG4jZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0cmluZ31cbiIpIGlm
ICRjb25kaXRpb25hbFN0cmluZzsKIH0KIAorc3ViIEdlbmVyYXRlU2VyaWFsaXplckZ1bmN0aW9u
Cit7CisgICAgbXkgKCRpbnRlcmZhY2UsICRpbnRlcmZhY2VOYW1lLCAkY2xhc3NOYW1lKSA9IEBf
OworICAgIG15ICRzZXJpYWxpemVyRnVuY3Rpb25OYW1lID0gInRvSlNPTiI7CisgICAgbXkgJHNl
cmlhbGl6ZXJOYXRpdmVGdW5jdGlvbk5hbWUgPSAkY29kZUdlbmVyYXRvci0+V0tfbGNmaXJzdCgk
Y2xhc3NOYW1lKSAuICJQcm90b3R5cGVGdW5jdGlvbiIgLiAkY29kZUdlbmVyYXRvci0+V0tfdWNm
aXJzdCgkc2VyaWFsaXplckZ1bmN0aW9uTmFtZSk7CisKKyAgICBBZGRUb0ltcGxJbmNsdWRlcygi
T2JqZWN0Q29uc3RydWN0b3IuaCIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCAke3NlcmlhbGl6ZXJOYXRpdmVGdW5jdGlvbk5hbWV9KEV4ZWNT
dGF0ZSogc3RhdGUpXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOworICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVChzdGF0ZSk7XG4iKTsKKyAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBhdXRvIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTtcbiIpOwor
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8gY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nh
c3Q8SlMkaW50ZXJmYWNlTmFtZSo+KHRoaXNWYWx1ZSk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTtcbiIpOworICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pO1xuIik7
CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSl7
XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5
cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIFwiJGludGVyZmFjZU5hbWVcIiwgXCIkc2VyaWFs
aXplckZ1bmN0aW9uTmFtZVwiKTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1c
biIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFMoY2FzdGVkVGhpcywgJHtjbGFzc05hbWV9OjppbmZvKCkpO1xuXG4iKSB1bmxlc3MgJGludGVy
ZmFjZU5hbWUgZXEgIkV2ZW50VGFyZ2V0IjsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBh
dXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChzdGF0ZSk7XG4iKTsKKyAgICBmb3Jl
YWNoIG15ICRhdHRyaWJ1dGUgKEB7JGludGVyZmFjZS0+YXR0cmlidXRlc30pIHsKKyAgICAgICAg
bXkgJG5hbWUgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWU7CisgICAgICAgIGlmIChncmVw
ICRfIGVxICRuYW1lLCBAeyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+YXR0cmlidXRlc30pIHsK
KyAgICAgICAgICAgIG15ICRnZXRGdW5jdGlvbk5hbWUgPSBHZXRBdHRyaWJ1dGVHZXR0ZXJOYW1l
KCRpbnRlcmZhY2UsICRjbGFzc05hbWUsICRhdHRyaWJ1dGUpOworICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgYXV0byAke25hbWV9VmFsdWUgPSAke2dldEZ1bmN0aW9uTmFtZX0o
c3RhdGUsIEpTVmFsdWU6OmVuY29kZSh0aGlzVmFsdWUpLCBJZGVudGlmaWVyKCkpO1xuIik7Cisg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXN1
bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIFwiJHtuYW1lfVwi
KSwgSlNWYWx1ZTo6ZGVjb2RlKCR7bmFtZX1WYWx1ZSkpO1xuIik7CisgICAgICAgIH0KKyAgICB9
CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpO1xuIik7CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOworfQorCiBzdWIgR2Vu
ZXJhdGVGdW5jdGlvbkNhc3RlZFRoaXMKIHsKICAgICBteSAoJGludGVyZmFjZSwgJGNsYXNzTmFt
ZSwgJGZ1bmN0aW9uLCAkc2hvdWxkUmVqZWN0UHJvbWlzZSkgPSBAXzsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0KaW5kZXggMGRjYzRjZTIwNjBmZWJmYTk2
ZGJkMGY1NGNhMjg0ODY1MmUyMGY1Mi4uZWRkOTNkMzM4ZjM3ZjNkMTU1ZmY0Njg0YTBjNTJiNDM2
NjcxMmM5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQ
YXJzZXIucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIu
cG0KQEAgLTYwLDYgKzYwLDcgQEAgc3RydWN0KCBkb21JbnRlcmZhY2UgPT4gewogICAgIGlzQ2Fs
bGJhY2sgPT4gJyQnLCAjIFVzZWQgZm9yIGNhbGxiYWNrIGludGVyZmFjZXMKICAgICBpc1BhcnRp
YWwgPT4gJyQnLCAjIFVzZWQgZm9yIHBhcnRpYWwgaW50ZXJmYWNlcwogICAgIGl0ZXJhYmxlID0+
ICckJywgIyBVc2VkIGZvciBpdGVyYWJsZSBpbnRlcmZhY2VzCisgICAgc2VyaWFsaXphYmxlID0+
ICckJywgIyBVc2VkIGZvciBzZXJpYWxpemFibGUgaW50ZXJmYWNlcwogfSk7CiAKICMgVXNlZCB0
byByZXByZXNlbnQgZG9tSW50ZXJmYWNlIGNvbnRlbnRzIChuYW1lIG9mIG1ldGhvZCwgc2lnbmF0
dXJlKQpAQCAtMTA3LDYgKzEwOCwxMiBAQCBzdHJ1Y3QoIGRvbUl0ZXJhYmxlID0+IHsKICAgICBl
eHRlbmRlZEF0dHJpYnV0ZXMgPT4gJyQnLCAjIEV4dGVuZGVkIGF0dHJpYnV0ZXMKIH0pOwogCisj
IFVzZWQgdG8gcmVwcmVzZW50IHNlcmlhbGl6YWJsZSBpbnRlcmZhY2UKK3N0cnVjdCggZG9tU2Vy
aWFsaXphYmxlID0+IHsKKyAgICBhdHRyaWJ1dGVzID0+ICdAJywgIyBMaXN0IG9mIGF0dHJpYnV0
ZXMgdG8gc2VyaWFsaXplCisgICAgZnVuY3Rpb25zID0+ICdAJywgIyB0b0pTT04gZnVuY3Rpb24K
K30pOworCiAjIFVzZWQgdG8gcmVwcmVzZW50IHN0cmluZyBjb25zdGFudHMKIHN0cnVjdCggZG9t
Q29uc3RhbnQgPT4gewogICAgIG5hbWUgPT4gJyQnLCAgICAgICAgIyBET00gQ29uc3RhbnQgaWRl
bnRpZmllcgpAQCAtMzc1LDcgKzM4Miw2IEBAIG15ICRuZXh0QXR0cmlidXRlT3JPcGVyYXRpb25S
ZXN0XzEgPSAnXihcKHxCeXRlU3RyaW5nfERPTVN0cmluZ3xVU1ZTdHJpbmd8RGF0ZXxhCiBteSAk
bmV4dFVuc2lnbmVkSW50ZWdlclR5cGVfMSA9ICdeKGxvbmd8c2hvcnQpJCc7CiBteSAkbmV4dERl
ZmF1bHRWYWx1ZV8xID0gJ14oLXxJbmZpbml0eXxOYU58ZmFsc2V8bnVsbHx0cnVlKSQnOwogCi0K
IHN1YiBwYXJzZURlZmluaXRpb25zCiB7CiAgICAgbXkgJHNlbGYgPSBzaGlmdDsKQEAgLTEwNTYs
NyArMTA2MiwxNiBAQCBzdWIgcGFyc2VTZXJpYWxpemVyCiAgICAgbXkgJG5leHQgPSAkc2VsZi0+
bmV4dFRva2VuKCk7CiAgICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJzZXJpYWxpemVyIikgewog
ICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgInNlcmlh
bGl6ZXIiLCBfX0xJTkVfXyk7Ci0gICAgICAgIHJldHVybiAkc2VsZi0+cGFyc2VTZXJpYWxpemVy
UmVzdCgkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKKyAgICAgICAgbXkgJG5leHQgPSAkc2VsZi0+
bmV4dFRva2VuKCk7CisgICAgICAgIG15ICRuZXdEYXRhTm9kZTsKKyAgICAgICAgaWYgKCRuZXh0
LT52YWx1ZSgpIG5lICI7IikgeworICAgICAgICAgICAgJG5ld0RhdGFOb2RlID0gJHNlbGYtPnBh
cnNlU2VyaWFsaXplclJlc3QoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7CisgICAgICAgICAgICBt
eSAkbmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICRuZXdEYXRhTm9kZSA9IGRvbVNlcmlhbGl6YWJsZS0+bmV3KCk7CisgICAgICAgIH0KKyAg
ICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICI7IiwgX19M
SU5FX18pOworICAgICAgICByZXR1cm4gJG5ld0RhdGFOb2RlOwogICAgIH0KICAgICAkc2VsZi0+
YXNzZXJ0VW5leHBlY3RlZFRva2VuKCRuZXh0LT52YWx1ZSgpLCBfX0xJTkVfXyk7CiB9CkBAIC0x
MDY5LDcgKzEwODQsMTggQEAgc3ViIHBhcnNlU2VyaWFsaXplclJlc3QKICAgICBteSAkbmV4dCA9
ICRzZWxmLT5uZXh0VG9rZW4oKTsKICAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgIj0iKSB7CiAg
ICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiPSIsIF9f
TElORV9fKTsKLSAgICAgICAgcmV0dXJuICRzZWxmLT5wYXJzZVNlcmlhbGl6YXRpb25QYXR0ZXJu
KCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOworICAgICAgICBteSAkYXR0cmlidXRlcyA9ICRzZWxm
LT5wYXJzZVNlcmlhbGl6YXRpb25QYXR0ZXJuKCk7CisKKyAgICAgICAgbXkgJG5ld0RhdGFOb2Rl
ID0gZG9tU2VyaWFsaXphYmxlLT5uZXcoKTsKKyAgICAgICAgJG5ld0RhdGFOb2RlLT5hdHRyaWJ1
dGVzKCRhdHRyaWJ1dGVzKTsKKworICAgICAgICBteSAkdG9KU09ORnVuY3Rpb24gPSBkb21GdW5j
dGlvbi0+bmV3KCk7CisgICAgICAgICR0b0pTT05GdW5jdGlvbi0+c2lnbmF0dXJlKGRvbVNpZ25h
dHVyZS0+bmV3KCkpOworICAgICAgICAkdG9KU09ORnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzKCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOworICAgICAgICAkdG9KU09ORnVu
Y3Rpb24tPnNpZ25hdHVyZS0+bmFtZSgidG9KU09OIik7CisgICAgICAgIHB1c2goQHskbmV3RGF0
YU5vZGUtPmZ1bmN0aW9uc30sICR0b0pTT05GdW5jdGlvbik7CisKKyAgICAgICAgcmV0dXJuICRu
ZXdEYXRhTm9kZTsKICAgICB9CiAgICAgaWYgKCRuZXh0LT50eXBlKCkgPT0gSWRlbnRpZmllclRv
a2VuIHx8ICRuZXh0LT52YWx1ZSgpIGVxICIoIikgewogICAgICAgICByZXR1cm4gJHNlbGYtPnBh
cnNlT3BlcmF0aW9uUmVzdCgkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKQEAgLTEwNzksNTkgKzEx
MDUsNDUgQEAgc3ViIHBhcnNlU2VyaWFsaXplclJlc3QKIHN1YiBwYXJzZVNlcmlhbGl6YXRpb25Q
YXR0ZXJuCiB7CiAgICAgbXkgJHNlbGYgPSBzaGlmdDsKLSAgICBteSAkZXh0ZW5kZWRBdHRyaWJ1
dGVMaXN0ID0gc2hpZnQ7CiAKICAgICBteSAkbmV4dCA9ICRzZWxmLT5uZXh0VG9rZW4oKTsKICAg
ICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgInsiKSB7CiAgICAgICAgICRzZWxmLT5hc3NlcnRUb2tl
blZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAieyIsIF9fTElORV9fKTsKLSAgICAgICAgJHNlbGYt
PnBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm5NYXAoKTsKKyAgICAgICAgbXkgJGF0dHJpYnV0ZXMg
PSAkc2VsZi0+cGFyc2VTZXJpYWxpemF0aW9uQXR0cmlidXRlcygpOwogICAgICAgICAkc2VsZi0+
YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIn0iLCBfX0xJTkVfXyk7Ci0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIFxAeyRhdHRyaWJ1dGVzfTsKICAgICB9CiAgICAg
aWYgKCRuZXh0LT52YWx1ZSgpIGVxICJbIikgewotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5W
YWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIlsiLCBfX0xJTkVfXyk7Ci0gICAgICAgICRzZWxmLT5w
YXJzZVNlcmlhbGl6YXRpb25QYXR0ZXJuTGlzdCgpOwotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9r
ZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIl0iLCBfX0xJTkVfXyk7Ci0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgZGllICJTZXJpYWxpemF0aW9uIG9mIGxpc3RzIHBhdHRlcm4gaXMgbm90IGN1
cnJlbnRseSBzdXBwb3J0ZWQuIjsKICAgICB9CiAgICAgaWYgKCRuZXh0LT50eXBlKCkgPT0gSWRl
bnRpZmllclRva2VuKSB7Ci0gICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblR5cGUoJHNlbGYtPmdl
dFRva2VuKCksIElkZW50aWZpZXJUb2tlbik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgbXkg
QGF0dHJpYnV0ZXMgPSAoKTsKKyAgICAgICAgbXkgJHRva2VuID0gJHNlbGYtPmdldFRva2VuKCk7
CisgICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblR5cGUoJHRva2VuLCBJZGVudGlmaWVyVG9rZW4p
OworICAgICAgICBwdXNoKEBhdHRyaWJ1dGVzLCAkdG9rZW4tPnZhbHVlKCkpOworICAgICAgICBy
ZXR1cm4gXEBhdHRyaWJ1dGVzOwogICAgIH0KICAgICAkc2VsZi0+YXNzZXJ0VW5leHBlY3RlZFRv
a2VuKCRuZXh0LT52YWx1ZSgpLCBfX0xJTkVfXyk7CiB9CiAKLXN1YiBwYXJzZVNlcmlhbGl6YXRp
b25QYXR0ZXJuTWFwCitzdWIgcGFyc2VTZXJpYWxpemF0aW9uQXR0cmlidXRlcwogewogICAgIG15
ICRzZWxmID0gc2hpZnQ7Ci0gICAgbXkgJG5leHQgPSAkc2VsZi0+bmV4dFRva2VuKCk7Ci0gICAg
aWYgKCRuZXh0LT52YWx1ZSgpIGVxICJnZXR0ZXIiKSB7Ci0gICAgICAgICRzZWxmLT5hc3NlcnRU
b2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAiZ2V0dGVyIiwgX19MSU5FX18pOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAiaW5oZXJpdCIpIHsK
LSAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICJpbmhl
cml0IiwgX19MSU5FX18pOwotICAgICAgICAkc2VsZi0+cGFyc2VJZGVudGlmaWVycygpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICgkbmV4dC0+dHlwZSgpID09IElkZW50aWZpZXJU
b2tlbikgewotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5UeXBlKCRzZWxmLT5nZXRUb2tlbigp
LCBJZGVudGlmaWVyVG9rZW4pOwotICAgICAgICAkc2VsZi0+cGFyc2VJZGVudGlmaWVycygpOwot
ICAgIH0KLX0KKyAgICBteSAkdG9rZW4gPSAkc2VsZi0+Z2V0VG9rZW4oKTsKKworICAgIGlmICgk
dG9rZW4tPnZhbHVlKCkgZXEgImdldHRlciIpIHsKKyAgICAgICAgZGllICJTZXJpYWxpemVyIGdl
dHRlciBrZXl3b3JkIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLiI7CiAKLXN1YiBwYXJzZVNl
cmlhbGl6YXRpb25QYXR0ZXJuTGlzdAotewotICAgIG15ICRzZWxmID0gc2hpZnQ7Ci0gICAgbXkg
JG5leHQgPSAkc2VsZi0+bmV4dFRva2VuKCk7Ci0gICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJn
ZXR0ZXIiKSB7Ci0gICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tl
bigpLCAiZ2V0dGVyIiwgX19MSU5FX18pOwotICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlm
ICgkbmV4dC0+dHlwZSgpID09IElkZW50aWZpZXJUb2tlbikgewotICAgICAgICAkc2VsZi0+YXNz
ZXJ0VG9rZW5UeXBlKCRzZWxmLT5nZXRUb2tlbigpLCBJZGVudGlmaWVyVG9rZW4pOwotICAgICAg
ICAkc2VsZi0+cGFyc2VJZGVudGlmaWVycygpOworICAgIGlmICgkdG9rZW4tPnZhbHVlKCkgZXEg
ImluaGVyaXQiKSB7CisgICAgICAgIGRpZSAiU2VyaWFsaXplciBpbmhlcml0IGtleXdvcmQgaXMg
bm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuIjsKICAgICB9CisKKyAgICBteSBAYXR0cmlidXRlcyA9
ICgpOworICAgICRzZWxmLT5hc3NlcnRUb2tlblR5cGUoJHRva2VuLCBJZGVudGlmaWVyVG9rZW4p
OworICAgIHB1c2goQGF0dHJpYnV0ZXMsICR0b2tlbi0+dmFsdWUoKSk7CisgICAgcHVzaChAYXR0
cmlidXRlcywgQHskc2VsZi0+cGFyc2VJZGVudGlmaWVycygpfSk7CisgICAgcmV0dXJuIFxAYXR0
cmlidXRlczsKIH0KIAogc3ViIHBhcnNlSWRlbnRpZmllckxpc3QKQEAgLTIyNjcsNiArMjI3OSwx
OSBAQCBzdWIgYXBwbHlNZW1iZXJMaXN0CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBuZXh0
OwogICAgICAgICB9CisgICAgICAgIGlmIChyZWYoJGl0ZW0pIGVxICJkb21TZXJpYWxpemFibGUi
KSB7CisgICAgICAgICAgICAkaW50ZXJmYWNlLT5zZXJpYWxpemFibGUoJGl0ZW0pOworICAgICAg
ICAgICAgbmV4dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgkaW50ZXJmYWNlLT5zZXJp
YWxpemFibGUpIHsKKyAgICAgICAgbXkgJG51bVNlcmlhbGl6ZXJBdHRyaWJ1dGVzID0gQHskaW50
ZXJmYWNlLT5zZXJpYWxpemFibGUtPmF0dHJpYnV0ZXN9OworICAgICAgICBpZiAoJG51bVNlcmlh
bGl6ZXJBdHRyaWJ1dGVzID09IDApIHsKKyAgICAgICAgICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0
ZSAoQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSkgeworICAgICAgICAgICAgICAgIHB1c2goQHsk
aW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPmF0dHJpYnV0ZXN9LCAkYXR0cmlidXRlLT5zaWduYXR1
cmUtPm5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5j
cHAKaW5kZXggMGJiN2JhNWQwNjE2MDY3ZTVmYjgyZmE2NTVmOGNmNTE4YjA5Nzk1MS4uOTVhNWZj
NWUzMDFkYzFkODNlZjkyYzczNDhmNzQ4ZTgwNTU2ZmQzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcApAQCAtMjYs
NiArMjYsNyBAQAogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJKU0RP
TUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNET01Qcm9taXNlLmgiCisjaW5jbHVkZSAiT2JqZWN0
Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5j
bHVkZSAiVVJMLmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgpAQCAtMjUzLDYgKzI1NCwy
NSBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE5vZGVQcm90b3R5cGVGdW5j
dGlvblRlc3RXb3JrZXJQcm9taXNlUHJvbWlzZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
Tm9kZVByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKEV4ZWNTdGF0ZSogc3RhdGUpCit7CisgICAgQVNT
RVJUKHN0YXRlKTsKKyAgICBhdXRvIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKKyAg
ICBhdXRvIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE5vZGUqPih0aGlzVmFsdWUp
OworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpeworICAg
ICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RO
b2RlIiwgInRvSlNPTiIpOworICAgIH0KKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNh
c3RlZFRoaXMsIEpTVGVzdE5vZGU6OmluZm8oKSk7CisKKyAgICBhdXRvKiByZXN1bHQgPSBjb25z
dHJ1Y3RFbXB0eU9iamVjdChzdGF0ZSk7CisgICAgYXV0byBuYW1lVmFsdWUgPSBqc1Rlc3ROb2Rl
TmFtZShzdGF0ZSwgSlNWYWx1ZTo6ZW5jb2RlKHRoaXNWYWx1ZSksIElkZW50aWZpZXIoKSk7Cisg
ICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKKyAgICByZXN1bHQtPnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJuYW1lIiksIEpTVmFsdWU6OmRlY29k
ZShuYW1lVmFsdWUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisK
IHVzaW5nIFRlc3ROb2RlSXRlcmF0b3IgPSBKU0RPTUl0ZXJhdG9yPEpTVGVzdE5vZGU+OwogdXNp
bmcgVGVzdE5vZGVJdGVyYXRvclByb3RvdHlwZSA9IEpTRE9NSXRlcmF0b3JQcm90b3R5cGU8SlNU
ZXN0Tm9kZT47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE9iai5jcHAKaW5kZXggMDc3MTgxNjEzYzY4OTFmMGNkMzg1MGMwMzc5YjJl
N2FlNmUxNzRhYS4uMzQ5OWYyZDVkM2U5OWE1N2Y2ZmUyYmU4OWI1MDIwYjUxNzRjNTQ0NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9i
ai5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHAKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlICJKU1Rlc3RPYmouaCIKICNpbmNs
dWRlICJKU1Rlc3RTdWJPYmouaCIKICNpbmNsdWRlICJKU1hQYXRoTlNSZXNvbHZlci5oIgorI2lu
Y2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0
dXJlcy5oIgogI2luY2x1ZGUgIlNWR0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiU1ZHUG9pbnQuaCIK
QEAgLTc4Miw2ICs3ODMsNyBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE92ZXJsb2FkKAogSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2luZ2xlQ29u
ZGl0aW9uYWxPdmVybG9hZChKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQXR0YWNoU2hhZG93Um9vdChK
U0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uVG9TdHJpbmcoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvSlNP
TihKU0M6OkV4ZWNTdGF0ZSopOwogCiAvLyBBdHRyaWJ1dGVzCiAKQEAgLTEzODcsNiArMTM4OSw3
IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZh
bHVlc1tdID0KICAgICB7ICJzaW5nbGVDb25kaXRpb25hbE92ZXJsb2FkIiwgSlNDOjpGdW5jdGlv
biwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNpbmdsZUNvbmRpdGlvbmFsT3ZlcmxvYWQpLCAoaW50
cHRyX3QpICgxKSB9IH0sCiAgICAgeyAiYXR0YWNoU2hhZG93Um9vdCIsIEpTQzo6RnVuY3Rpb24s
IE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BdHRhY2hTaGFkb3dSb290KSwgKGludHB0cl90KSAoMSkg
fSB9LAogICAgIHsgInRvU3RyaW5nIiwgSlNDOjpGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIHsgKGlu
dHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblRvU3RyaW5nKSwgKGludHB0cl90KSAoMCkgfSB9LAorICAgIHsgInRvSlNPTiIsIEpTQzo6
RnVuY3Rpb24sIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5j
dGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04pLCAoaW50cHRyX3QpICgwKSB9
IH0sCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpCiAgICAgeyAiQ09ORElUSU9OQUxfQ09OU1QiLCBE
b250RGVsZXRlIHwgUmVhZE9ubHkgfCBDb25zdGFudEludGVnZXIsIE5vSW50cmluc2ljLCB7IChs
b25nIGxvbmcpKDApIH0gfSwKICNlbHNlCkBAIC03Mzc1LDYgKzczNzgsMzQgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nKEV4
ZWNTdGF0ZSogc3RhdGUKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAK
K0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25U
b0pTT04oRXhlY1N0YXRlKiBzdGF0ZSkKK3sKKyAgICBBU1NFUlQoc3RhdGUpOworICAgIGF1dG8g
dGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOworICAgIGF1dG8gY2FzdGVkVGhpcyA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVlKTsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKXsKKyAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5
cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqIiwgInRvSlNPTiIpOworICAgIH0K
KyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5m
bygpKTsKKworICAgIGF1dG8qIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KHN0YXRlKTsK
KyAgICBhdXRvIHJlYWRPbmx5U3RyaW5nQXR0clZhbHVlID0ganNUZXN0T2JqUmVhZE9ubHlTdHJp
bmdBdHRyKHN0YXRlLCBKU1ZhbHVlOjplbmNvZGUodGhpc1ZhbHVlKSwgSWRlbnRpZmllcigpKTsK
KyAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInJlYWRPbmx5U3RyaW5nQXR0ciIp
LCBKU1ZhbHVlOjpkZWNvZGUocmVhZE9ubHlTdHJpbmdBdHRyVmFsdWUpKTsKKyAgICBhdXRvIGVu
dW1BdHRyVmFsdWUgPSBqc1Rlc3RPYmpFbnVtQXR0cihzdGF0ZSwgSlNWYWx1ZTo6ZW5jb2RlKHRo
aXNWYWx1ZSksIElkZW50aWZpZXIoKSk7CisgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sICJlbnVtQXR0ciIpLCBKU1ZhbHVlOjpkZWNvZGUoZW51bUF0dHJWYWx1ZSkpOworICAgIGF1
dG8gbG9uZ0F0dHJWYWx1ZSA9IGpzVGVzdE9iakxvbmdBdHRyKHN0YXRlLCBKU1ZhbHVlOjplbmNv
ZGUodGhpc1ZhbHVlKSwgSWRlbnRpZmllcigpKTsKKyAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpOworICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgImxvbmdBdHRyIiksIEpTVmFsdWU6OmRlY29kZShsb25nQXR0clZhbHVlKSk7Cisg
ICAgYXV0byBjcmVhdGVWYWx1ZSA9IGpzVGVzdE9iakNyZWF0ZShzdGF0ZSwgSlNWYWx1ZTo6ZW5j
b2RlKHRoaXNWYWx1ZSksIElkZW50aWZpZXIoKSk7CisgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sICJjcmVhdGUiKSwgSlNWYWx1ZTo6ZGVjb2RlKGNyZWF0ZVZhbHVlKSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCiB2b2lkIEpTVGVzdE9iajo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oY2VsbCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5vZGUuaWRsIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROb2RlLmlkbAppbmRleCA0NGY4Y2E4
MjczZTc4ZmYxZDUzYTFmOWVjNWYxZmU1M2ViOTY4YmRlLi45ZDJhMDc4ZWJmYmU0NzJhMTE4NDk2
N2UwMDFiOTBlYzgxYjhhYTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVGVzdE5vZGUuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9UZXN0Tm9kZS5pZGwKQEAgLTI3LDQgKzI3LDYgQEAKIAogICAgIFtFbmFibGVk
QXRSdW50aW1lPURPTUl0ZXJhdG9yXSBpdGVyYWJsZTxUZXN0Tm9kZT47CiAgICAgUHJvbWlzZSB0
ZXN0V29ya2VyUHJvbWlzZSgpOworCisgICAgc2VyaWFsaXplcjsKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKaW5kZXggMjEwZDU1Zjhh
MGI1ZDdkOGRmZWZlYjYwYTRiYzkzZGZlYzJiZTRjZi4uNGViMDcyYTAyYzE0YjNiYTVjZWVkNDZh
M2M0ZDkyNmNmNDcxMzFjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Rlc3RPYmouaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9UZXN0T2JqLmlkbApAQCAtNDEwLDYgKzQxMCw5IEBAIGVudW0gVGVzdENvbmZpZGVu
Y2UgeyAiaGlnaCIsICJraW5kYS1sb3ciIH07CiAgICAgdm9pZCBhdHRhY2hTaGFkb3dSb290KFRl
c3REaWN0aW9uYXJ5IGluaXQpOwogCiAgICAgc3RyaW5naWZpZXIgYXR0cmlidXRlIFVTVlN0cmlu
ZyBzdHJpbmdpZmllckF0dHJpYnV0ZTsKKworCisgICAgc2VyaWFsaXplciA9IHtyZWFkT25seVN0
cmluZ0F0dHIsIGNyZWF0ZSwgZW51bUF0dHIsIGxvbmdBdHRyfTsKIH07CiAKIC8vIFRoZSBmb2xs
b3dpbmcgY29tbWVudCBzaG91bGQgbm90IGdlbmVyYXRlIGFueSBjb2RlLgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDMxODBj
MTY5NjdiZmU3NGQzNDBhMzhmOWIwYjQwMjYyZjZjYzMxMWUuLmFkY2UxZmY1YzQ3ZWMwYzAyZWQx
MGJkMDkwNjYzZDQ4ODZjN2NmODggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZwor
KysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxNi0wOS0yNyAg
QWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KKworICAgICAgICBBZGQgV2Vi
SURMIHNwZWNpYWwgb3BlcmF0aW9uIHN1cHBvcnQ6IHNlcmlhbGl6ZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjI5MworCisgICAgICAgIFJldmll
d2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFZlcmlmeSB0aGUgbmV3IEFQSSBvZiB0aGUg
b2JqZWN0cyBhbmQgY2hlY2sgd2hhdCBoYXBwZW5zIHdoZW4gdXNlcgorICAgICAgICBtb2RpZmll
cyB0aGUgdmFsdWVzIGFuZCB0eXBlcyBvZiB0aGUgYXR0cmlidXRlcywgb3IgYWRkcyBhIG51bGwg
dmFsdWUuCisKKyAgICAgICAgKiBmYXN0L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS1leHBl
Y3RlZC50eHQ6CisgICAgICAgICogZmFzdC9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaHRt
bDoKKyAgICAgICAgKiBmYXN0L21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi1leHBl
Y3RlZC50eHQ6CisgICAgICAgICogZmFzdC9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRp
b24uaHRtbDoKKwogMjAxNi0wOS0yNyAgTmFuIFdhbmcgIDxuX3dhbmdAYXBwbGUuY29tPgogCiAg
ICAgICAgIEFYOiBDcmFzaFRyYWNlcjogY29tLmFwcGxlLldlYktpdC5XZWJDb250ZW50IGF0IFdl
YkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmxvY2FsQ2FyZXRSZWN0Rm9yQ2hhcmFjdGVyT2Zmc2V0KFdl
YkNvcmU6OlJlbmRlck9iamVjdComLCBXZWJDb3JlOjpDaGFyYWN0ZXJPZmZzZXQgY29uc3QmKSAr
IDExNgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENJY2VDYW5k
aWRhdGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENJY2VD
YW5kaWRhdGUtZXhwZWN0ZWQudHh0CmluZGV4IDNjOTAyOTgzNjU5Y2M3ZWUzODFmYTUxZDhjNDYy
NWE0M2IzMDdmNDUuLmEyZGM3MWFmYmIwYmYwZmI3MmE1YTMxZWU4MWFhZmU1MmMzYmEzODUgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLWV4
cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRp
ZGF0ZS1leHBlY3RlZC50eHQKQEAgLTcsNiArNywyMSBAQCBQQVNTIGNhbmRpZGF0ZSA9IG5ldyBS
VENJY2VDYW5kaWRhdGUoaW5pdGlhbGl6ZXIpOyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KIFBB
U1MgY2FuZGlkYXRlLmNhbmRpZGF0ZSBpcyAiZm9vIgogUEFTUyBjYW5kaWRhdGUuc2RwTWlkIGlz
ICJiYXIiCiBQQVNTIGNhbmRpZGF0ZS5zZHBNTGluZUluZGV4IGlzIDYKK1BBU1MgUlRDSWNlQ2Fu
ZGlkYXRlLnByb3RvdHlwZS50b0pTT04gaXMgZGVmaW5lZC4KK1BBU1MgT2JqZWN0LmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihSVENJY2VDYW5kaWRhdGUucHJvdG90eXBlLCAidG9KU09OIikuZW51
bWVyYWJsZSBpcyB0cnVlCitQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUlRD
SWNlQ2FuZGlkYXRlLnByb3RvdHlwZSwgInRvSlNPTiIpLndyaXRhYmxlIGlzIHRydWUKK1BBU1Mg
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihSVENJY2VDYW5kaWRhdGUucHJvdG90eXBl
LCAidG9KU09OIikuY29uZmlndXJhYmxlIGlzIHRydWUKK1BBU1MgUlRDSWNlQ2FuZGlkYXRlLnBy
b3RvdHlwZS50b0pTT04ubGVuZ3RoIGlzIDAKK1BBU1MgUlRDSWNlQ2FuZGlkYXRlLnByb3RvdHlw
ZS50b0pTT04ubmFtZSBpcyAidG9KU09OIgorUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKGpzb25NYXAsICJjYW5kaWRhdGUiKS5lbnVtZXJhYmxlIGlzIHRydWUKK1BBU1MgT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihqc29uTWFwLCAiY2FuZGlkYXRlIikud3JpdGFi
bGUgaXMgdHJ1ZQorUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGpzb25NYXAs
ICJjYW5kaWRhdGUiKS5jb25maWd1cmFibGUgaXMgdHJ1ZQorUEFTUyBjaGlsZENhbmRpZGF0ZS50
b0pTT04oKTsgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQ2FuIG9ubHkgY2FsbCBSVENJY2VD
YW5kaWRhdGUudG9KU09OIG9uIGluc3RhbmNlcyBvZiBSVENJY2VDYW5kaWRhdGUuCitQQVNTIEpT
T04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSkgaXMgIntcImNhbmRpZGF0ZVwiOlwiZm9v
XCIsXCJzZHBNaWRcIjpcImJhclwiLFwic2RwTUxpbmVJbmRleFwiOjZ9IgorUEFTUyBKU09OLnN0
cmluZ2lmeShjYW5kaWRhdGUudG9KU09OKCkpIGlzICJ7XCJjYW5kaWRhdGVcIjpcImZvb1wiLFwi
c2RwTWlkXCI6XCJiYXJcIixcInNkcE1MaW5lSW5kZXhcIjo2fSIKK1BBU1MgSlNPTi5zdHJpbmdp
ZnkoY2FuZGlkYXRlLnRvSlNPTigpKSBpcyAie1wiY2FuZGlkYXRlXCI6XCJmb29cIixcInNkcE1p
ZFwiOlwiYmFyXCIsXCJzZHBNTGluZUluZGV4XCI6Nn0iCitQQVNTIEpTT04uc3RyaW5naWZ5KGNh
bmRpZGF0ZS50b0pTT04oKSkgaXMgIntcImNhbmRpZGF0ZVwiOlwiZm9vXCIsXCJzZHBNaWRcIjpc
ImJhclwiLFwic2RwTUxpbmVJbmRleFwiOjZ9IgorUEFTUyBKU09OLnN0cmluZ2lmeShjYW5kaWRh
dGUudG9KU09OKCkpIGlzICJ7XCJjYW5kaWRhdGVcIjpcImZvb1wiLFwic2RwTWlkXCI6XCJiYXJc
IixcInNkcE1MaW5lSW5kZXhcIjo2fSIKIAogQXR0cmlidXRlcyBhcmUgcmVhZG9ubHkKIGNhbmRp
ZGF0ZS5jYW5kaWRhdGUgPSAiZm9vLXVwZGF0ZWQiCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9t
ZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaHRtbAppbmRleCBjNDAzMTU2NTU2OWUyMzhiNmM0
YzVhODlmOGE5YjEwNzkyNGEzN2FmLi41M2Y0OWNiNzJmMDkxYTQxM2U2NzU2OWI3YzMxMzczMzZj
NzBkOGM2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ0ljZUNh
bmRpZGF0ZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDSWNlQ2Fu
ZGlkYXRlLmh0bWwKQEAgLTEzLDYgKzEzLDMzIEBACiAgICAgICAgICAgICBzaG91bGRCZSgnY2Fu
ZGlkYXRlLmNhbmRpZGF0ZScsICciZm9vIicpOwogICAgICAgICAgICAgc2hvdWxkQmUoJ2NhbmRp
ZGF0ZS5zZHBNaWQnLCAnImJhciInKTsKICAgICAgICAgICAgIHNob3VsZEJlKCdjYW5kaWRhdGUu
c2RwTUxpbmVJbmRleCcsICc2Jyk7CisgICAgICAgICAgICBzaG91bGRCZURlZmluZWQoJ1JUQ0lj
ZUNhbmRpZGF0ZS5wcm90b3R5cGUudG9KU09OJyk7CisgICAgICAgICAgICBzaG91bGRCZVRydWUo
J09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUlRDSWNlQ2FuZGlkYXRlLnByb3RvdHlw
ZSwgInRvSlNPTiIpLmVudW1lcmFibGUnKTsKKyAgICAgICAgICAgIHNob3VsZEJlVHJ1ZSgnT2Jq
ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihSVENJY2VDYW5kaWRhdGUucHJvdG90eXBlLCAi
dG9KU09OIikud3JpdGFibGUnKTsKKyAgICAgICAgICAgIHNob3VsZEJlVHJ1ZSgnT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihSVENJY2VDYW5kaWRhdGUucHJvdG90eXBlLCAidG9KU09O
IikuY29uZmlndXJhYmxlJyk7CisgICAgICAgICAgICBzaG91bGRCZSgnUlRDSWNlQ2FuZGlkYXRl
LnByb3RvdHlwZS50b0pTT04ubGVuZ3RoJywgJzAnKTsKKyAgICAgICAgICAgIHNob3VsZEJlKCdS
VENJY2VDYW5kaWRhdGUucHJvdG90eXBlLnRvSlNPTi5uYW1lJywgJyJ0b0pTT04iJyk7CisKKyAg
ICAgICAgICAgIHZhciBqc29uTWFwID0gY2FuZGlkYXRlLnRvSlNPTigpOworICAgICAgICAgICAg
c2hvdWxkQmVUcnVlKCdPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGpzb25NYXAsICJj
YW5kaWRhdGUiKS5lbnVtZXJhYmxlJyk7CisgICAgICAgICAgICBzaG91bGRCZVRydWUoJ09iamVj
dC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoanNvbk1hcCwgImNhbmRpZGF0ZSIpLndyaXRhYmxl
Jyk7CisgICAgICAgICAgICBzaG91bGRCZVRydWUoJ09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoanNvbk1hcCwgImNhbmRpZGF0ZSIpLmNvbmZpZ3VyYWJsZScpOworCisgICAgICAgICAg
ICB2YXIgY2hpbGRSVENJY2VDYW5kaWRhdGUgPSBmdW5jdGlvbigpIHt9OworICAgICAgICAgICAg
Y2hpbGRSVENJY2VDYW5kaWRhdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSVENJY2VDYW5k
aWRhdGUucHJvdG90eXBlKTsKKyAgICAgICAgICAgIHZhciBjaGlsZENhbmRpZGF0ZSA9IG5ldyBj
aGlsZFJUQ0ljZUNhbmRpZGF0ZSgpOworICAgICAgICAgICAgc2hvdWxkVGhyb3coJ2NoaWxkQ2Fu
ZGlkYXRlLnRvSlNPTigpOycpOworCisgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmco
J0pTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSknLCAneyJjYW5kaWRhdGUiOiJmb28i
LCJzZHBNaWQiOiJiYXIiLCJzZHBNTGluZUluZGV4Ijo2fScpOworICAgICAgICAgICAgY2FuZGlk
YXRlLm5ld0F0dHJpYnV0ZSA9ICJuZXcgdmFsdWUiOworICAgICAgICAgICAgc2hvdWxkQmVFcXVh
bFRvU3RyaW5nKCdKU09OLnN0cmluZ2lmeShjYW5kaWRhdGUudG9KU09OKCkpJywgJ3siY2FuZGlk
YXRlIjoiZm9vIiwic2RwTWlkIjoiYmFyIiwic2RwTUxpbmVJbmRleCI6Nn0nKTsKKyAgICAgICAg
ICAgIGNhbmRpZGF0ZS5zZHBNTGluZUluZGV4ID0gIm5vdCBhIG51bWJlciI7CisgICAgICAgICAg
ICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ0pTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04o
KSknLCAneyJjYW5kaWRhdGUiOiJmb28iLCJzZHBNaWQiOiJiYXIiLCJzZHBNTGluZUluZGV4Ijo2
fScpOworICAgICAgICAgICAgY2FuZGlkYXRlLnNkcE1pZCA9IDc7CisgICAgICAgICAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoJ0pTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSknLCAn
eyJjYW5kaWRhdGUiOiJmb28iLCJzZHBNaWQiOiJiYXIiLCJzZHBNTGluZUluZGV4Ijo2fScpOwor
ICAgICAgICAgICAgY2FuZGlkYXRlLnNkcE1pZCA9IG51bGw7CisgICAgICAgICAgICBzaG91bGRC
ZUVxdWFsVG9TdHJpbmcoJ0pTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSknLCAneyJj
YW5kaWRhdGUiOiJmb28iLCJzZHBNaWQiOiJiYXIiLCJzZHBNTGluZUluZGV4Ijo2fScpOworCiAg
ICAgICAgICAgICBkZWJ1ZygiIik7CiAKICAgICAgICAgICAgIGRlYnVnKCJBdHRyaWJ1dGVzIGFy
ZSByZWFkb25seSIpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9S
VENTZXNzaW9uRGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRp
YXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0CmluZGV4IDgxYWUwMWE3
ZjdmOWQ4MDM5OTU5OTk5M2Y4MzZhMmQ5NjE1MjNiYjEuLjU5ZDNiY2QxNzUwOWIyN2RlODRkZjI4
OGQ5M2NjYjI2ZGQ0NDNkNzAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJl
YW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi1leHBlY3RlZC50eHQKQEAgLTYs
NiArNiw3IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFCiBQQVNTIHNlc3Npb25EZXNjcmlwdGlv
biA9IG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24oaW5pdGlhbGl6ZXIpOyBkaWQgbm90IHRocm93
IGV4Y2VwdGlvbi4KIFBBU1Mgc2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUgaXMgIm9mZmVyIgogUEFT
UyBzZXNzaW9uRGVzY3JpcHRpb24uc2RwIGlzICJmb29iYXIiCitQQVNTIEpTT04uc3RyaW5naWZ5
KHNlc3Npb25EZXNjcmlwdGlvbi50b0pTT04oKSkgaXMgIntcInR5cGVcIjpcIm9mZmVyXCIsXCJz
ZHBcIjpcImZvb2JhclwifSIKICoqKiBBdHRyaWJ1dGVzIGFyZSByZWFkLW9ubHkuCiBQQVNTIHNl
c3Npb25EZXNjcmlwdGlvbi50eXBlID0gJ2Fuc3dlcicgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24u
CiBQQVNTIHNlc3Npb25EZXNjcmlwdGlvbi50eXBlIGlzICdvZmZlcicKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmh0bWwgYi9M
YXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5odG1sCmlu
ZGV4IDhhMmU5MzNkMWM0YmQxZGQ0ZjNkZWIwMjdiZGU3YjA5OWYxMDdhYjEuLjgzNDNlYjgyOGM2
YjgwZTYzMTU5MDIwM2YyNDc1MDE5OWM2ZGU4YjcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zh
c3QvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24uaHRtbApAQCAtMTQsNiAr
MTQsNyBAQAogICAgICAgICAgICAgc2hvdWxkTm90VGhyb3coInNlc3Npb25EZXNjcmlwdGlvbiA9
IG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24oaW5pdGlhbGl6ZXIpOyIpOwogICAgICAgICAgICAg
c2hvdWxkQmUoJ3Nlc3Npb25EZXNjcmlwdGlvbi50eXBlJywgJyJvZmZlciInKTsKICAgICAgICAg
ICAgIHNob3VsZEJlKCdzZXNzaW9uRGVzY3JpcHRpb24uc2RwJywgJyJmb29iYXIiJyk7CisgICAg
ICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ0pTT04uc3RyaW5naWZ5KHNlc3Npb25EZXNj
cmlwdGlvbi50b0pTT04oKSknLCAneyJ0eXBlIjoib2ZmZXIiLCJzZHAiOiJmb29iYXIifScpOwog
CiAgICAgICAgICAgICBkZWJ1ZygiKioqIEF0dHJpYnV0ZXMgYXJlIHJlYWQtb25seS4iKTsKICAg
ICAgICAgICAgIHNob3VsZE5vdFRocm93KCJzZXNzaW9uRGVzY3JpcHRpb24udHlwZSA9ICdhbnN3
ZXInIik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290075</attachid>
            <date>2016-09-28 04:51:27 -0700</date>
            <delta_ts>2016-09-28 05:47:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156293-20160928134826.patch</filename>
            <type>text/plain</type>
            <size>30062</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2NTAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTYyZmM2ZDEyNzhiNzVj
NjFjMzAzOTM3NzkwNmU5MjZmMmM2NGRmYi4uNzMyOGI4YTQyYjFkMGY0Mzg0NTBkODg5NDAwZDll
YjNmMzM4OTQ3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0IEBACisyMDE2LTA5LTI3ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIEFkZCBXZWJJREwg
c3BlY2lhbCBvcGVyYXRpb24gc3VwcG9ydDogc2VyaWFsaXplcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MjkzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgdGhlIHNlcmlhbGl6
ZXIgc3BlY2lhbCBvcGVyYXRpb24gZm9yIFdlYklETHMsCisgICAgICAgIGN1cnJlbnQgaW1wbGVt
ZW50YXRpb24gYWRkcyBzdXBwb3J0IGZvcjoKKyAgICAgICAgICAtIGp1c3QgdGhlIGtleXdvcmQ6
IHNlcmlhbGl6ZXI7IEl0IHdpbGwgcmV0dXJuIGFsbCB0aGUKKyAgICAgICAgICAgIGF0dHJpYnV0
ZXMgb2YgaW4gYW4gb2JqZWN0LgorICAgICAgICAgIC0gbWFwIG9mIGVudHJpZXMgd2l0aCB0aGUg
YXR0cmlidXRlczogc2VyaWFsaXplciA9IHthdHRyaWJ1dGUxLAorICAgICAgICAgICAgYXR0cmli
dXRlMiwgLi4ufQorCisgICAgICAgIEl0IGNyZWF0ZXMgYSB0b0pTT04gbWV0aG9kIHRoYXQgcmV0
dXJucyB0aGUgc2VyaWFsaXplZCB2YWx1ZQorICAgICAgICBjb252ZXJ0ZWQgaW50byBhbiBFQ01B
U2NyaXB0IHZhbHVlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBjaGVjayB0aGUKKyAgICAgICAgZGVm
aW5pdGlvbiBvZiB0aGUgb3BlcmF0aW9uOgorCisgICAgICAgIGh0dHA6Ly9oZXljYW0uZ2l0aHVi
LmlvL3dlYmlkbC8jaWRsLXNlcmlhbGl6ZXJzCisKKyAgICAgICAgV2UgaGF2ZSBjcmVhdGVkIGEg
bmV3IGZ1bmN0aW9uIGluIHRoZSBBUEkgb2YgdGhlIG9iamVjdHMKKyAgICAgICAgdGhhdCBhcmUg
bWFya2VkIGFzIHNlcmlhbGl6ZXIuCisKKyAgICAgICAgVXNlZCB0aGUgc3VwcG9ydCB0byBhZGQg
bmV3IEFQSSBmb3IgUlRDSWNlQ2FuZGlkYXRlIGFuZAorICAgICAgICBSVENTZXNzaW9uRGVzY3Jp
cHRpb24uCisKKyAgICAgICAgVXBkYXRlZCB0aGUgdGVzdHMgZXhwZWN0YXRpb25zIG9mIHRoZSBi
aW5kaW5ncy4KKworICAgICAgICBUZXN0czogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROb2Rl
LmlkbAorICAgICAgICAgICAgICAgYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCisg
ICAgICAgICAgICAgICBmYXN0L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5odG1sCisgICAg
ICAgICAgICAgICBmYXN0L21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5odG1sCisK
KyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5pZGw6IEFkZGVk
IHRoZSBzZXJpYWxpemVyCisgICAgICAgIG9wZXJhdGlvbi4KKyAgICAgICAgKiBNb2R1bGVzL21l
ZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5pZGw6IEFkZGVkIHRoZQorICAgICAgICBz
ZXJpYWxpemVyIG9wZXJhdGlvbi4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOiBBZGRlZCB0aGUg
Y2FsbHMgdG8gdGhlIHNlcmlhbGl6ZXIKKyAgICAgICAgY29kZSBnZW5lcmF0b3IuCisgICAgICAg
IChHZW5lcmF0ZVNlcmlhbGl6ZXJGdW5jdGlvbik6IEFkZGVkLCBnZW5lcmF0ZXMgdGhlIHRvSlNP
TiBmdW5jdGlvbgorICAgICAgICBhZGRpbmcgYWxsIHRoZSBzZXJpYWxpemFibGUtPmF0dHJpYnV0
ZXMgdmFsdWUgdG8gYW4gb2JqZWN0IGFzCisgICAgICAgIGRlZmluZWQgaW4gdGhlIHNwZWMuCisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG06IE1vZGlmaWVkIHRoZSBzZXJp
YWxpemVyIHBhcnNlcgorICAgICAgICB0aGF0IHdhcyB1bnVzZWQgdG8gc3VwcG9ydCB0aGUgV2Vi
SURMIHNwZWMgcGFydHMuIEFkZGVkIGEgbmV3CisgICAgICAgIGRvbVNlcmlhbGl6YWJsZSB0eXBl
IHRvIHN0b3JlIHRoZSBsaXN0IG9mIGF0dHJpYnV0ZXMgaW4gdGhlCisgICAgICAgIHBvc3NpYmxl
IG1hcC4KKyAgICAgICAgKHBhcnNlU2VyaWFsaXplcik6IE1vZGlmaWVkIHRoZSBmdW5jdGlvbiB0
byBmb2xsb3cgdGhlCisgICAgICAgIHNlbWljb2xvbiBydWxlIGluIHRoZSBzcGVjLCBub3cgdGhl
IHNlcmlhbGl6ZXIgbGluZSBtdXN0IGhhdmUgYQorICAgICAgICBzZW1pY29sb24gbGlrZSBhbnkg
b3RoZXIgbGluZS4KKyAgICAgICAgKHBhcnNlU2VyaWFsaXplclJlc3QpOiBUaGUgZnVuY3Rpb24g
bm93IGhhcyB0byBnZXQgdGhlIGF0dHJpYnV0ZXMKKyAgICAgICAgbGlzdCBmcm9tIHRoZSBwYXR0
ZXJuIHBhcnNpbmcgZnVuY3Rpb24gYW5kIGFkZCB0aGVtIHRvIHRoZQorICAgICAgICBkb21TZXJp
YWxpemFibGUgaXRlbS4KKyAgICAgICAgKHBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm4pOiBOb3cg
dGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBsaXN0IG9mCisgICAgICAgIGF0dHJpYnV0ZXMgaW4g
dGhlIHNlcmlhbGl6YWJsZSBtYXAgb3IgbGlzdCBpZiB3ZSBoYXZlIG9uZS4KKyAgICAgICAgKHBh
cnNlU2VyaWFsaXphdGlvbkF0dHJpYnV0ZXMpOiBBZGRlZCwgdGhpcyBmdW5jdGlvbiByZXBsYWNl
cyB0aGUKKyAgICAgICAgTWFwIGFuZCBMaXN0IGZ1bmN0aW9ucywgdGhlIGN1cnJlbnRseSBzdXBw
b3J0ZWQgcGFydHMgYXJlIHNpbWlsYXIKKyAgICAgICAgZm9yIGJvdGggc2l0dWF0aW9ucy4KKyAg
ICAgICAgKGFwcGx5TWVtYmVyTGlzdCk6IEFkZGVkIHRoZSBzZXJpYWxpemFibGUgaXRlbSB0byB0
aGUgaW50ZXJmYWNlCisgICAgICAgIHZhcmlhYmxlIGFuZCBwb3B1bGF0ZSB0aGUgc2VyaWFsaXph
YmxlIGluIGNhc2UgdGhlcmUgaXMgbm90IGEKKyAgICAgICAgZGVmaW5lZCBtYXAuCisgICAgICAg
IChwYXJzZVNlcmlhbGl6YXRpb25QYXR0ZXJuTWFwKTogUmVwbGFjZWQgd2l0aAorICAgICAgICBw
YXJzZVNlcmlhbGl6YXRpb25BdHRyaWJ1dGVzLgorICAgICAgICAocGFyc2VTZXJpYWxpemF0aW9u
UGF0dGVybkxpc3QpOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Tm9kZS5jcHA6IE1vZGlmaWVkIHRoZSBleHBlY3RlZCByZXN1bHQuCisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04pOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOiBNb2RpZmllZCB0aGUgZXhwZWN0
ZWQgcmVzdWx0LgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25U
b0pTT04pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Tm9kZS5pZGw6IEFk
ZGVkIHRoZSBzZXJpYWxpemVyIHRlc3QuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Rlc3RPYmouaWRsOiBBZGRlZCBzZXJpYWxpemVyIG1hcCB0ZXN0LgorCiAyMDE2LTA5LTI3ICBK
b29uZ2h1biBQYXJrICA8amg3MTgucGFya0BzYW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMXSBG
aXggZGVidWcgYnVpbGQgYnJlYWsgc2luY2UgcjIwNjQ4MS4gVW5yZXZpZXdlZApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaWRs
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaWRs
CmluZGV4IDA0MDc4M2Y3ZmEwZDY3YzU2YmI3MjBkMTVlYjIwYmYyNDMyNWI4ODguLjhjMmQ5YmU4
NDQ4NTA1NGMxNmI1MTkzMzQzY2FkYzc2NzcwMjlmNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmlkbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5pZGwKQEAgLTM5LDUg
KzM5LDcgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGNhbmRpZGF0ZTsKICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nPyBzZHBNaWQ7CiAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIHVuc2lnbmVkIHNob3J0PyBzZHBNTGluZUluZGV4OworCisgICAgc2VyaWFsaXplciA9
IHtjYW5kaWRhdGUsIHNkcE1pZCwgc2RwTUxpbmVJbmRleH07CiB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlw
dGlvbi5pZGwKaW5kZXggNDc1NWFkYTI1MzBlOGY2NWEyYTZlZWNkOWI3YjcwYTM5ZWVhNWExZS4u
NzM1MDkyYmM1MzA1OGZlY2ZjNzllZDY5NzFlNGQyOTk2YTE1NDVkYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24uaWRs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2Ny
aXB0aW9uLmlkbApAQCAtMzgsNiArMzgsOCBAQAogXSBpbnRlcmZhY2UgUlRDU2Vzc2lvbkRlc2Ny
aXB0aW9uIHsKICAgICBbU2V0dGVyUmFpc2VzRXhjZXB0aW9uXSByZWFkb25seSBhdHRyaWJ1dGUg
UlRDU2RwVHlwZSB0eXBlOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgc2RwOwor
CisgICAgc2VyaWFsaXplciA9IHt0eXBlLCBzZHB9OwogfTsKIAogZW51bSBSVENTZHBUeXBlIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMu
cG0KaW5kZXggZmViMTVkZWVmNDYzY2FkZGZhNzk4ZGUzMjJiZDQyY2QxMWY0OTUwMC4uM2M4ZmQw
ZGU1ZWM2ZGI3ZmIyM2IwMzMyZDgzNDIyOGU4Y2UwN2NjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KQEAgLTY2NCw2ICs2NjQs
NyBAQCBzdWIgUHJvdG90eXBlRnVuY3Rpb25Db3VudAogICAgIH0KIAogICAgICRjb3VudCArPSBz
Y2FsYXIgQHskaW50ZXJmYWNlLT5pdGVyYWJsZS0+ZnVuY3Rpb25zfSBpZiAkaW50ZXJmYWNlLT5p
dGVyYWJsZTsKKyAgICAkY291bnQgKz0gc2NhbGFyIEB7JGludGVyZmFjZS0+c2VyaWFsaXphYmxl
LT5mdW5jdGlvbnN9IGlmICRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZTsKIAogICAgIHJldHVybiAk
Y291bnQ7CiB9CkBAIC0xNjgwLDYgKzE2ODEsNyBAQCBzdWIgR2VuZXJhdGVQcm9wZXJ0aWVzSGFz
aFRhYmxlCiAKICAgICBteSBAZnVuY3Rpb25zID0gQHskaW50ZXJmYWNlLT5mdW5jdGlvbnN9Owog
ICAgIHB1c2goQGZ1bmN0aW9ucywgQHskaW50ZXJmYWNlLT5pdGVyYWJsZS0+ZnVuY3Rpb25zfSkg
aWYgSXNLZXlWYWx1ZUl0ZXJhYmxlSW50ZXJmYWNlKCRpbnRlcmZhY2UpOworICAgIHB1c2goQGZ1
bmN0aW9ucywgQHskaW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPmZ1bmN0aW9uc30pIGlmICRpbnRl
cmZhY2UtPnNlcmlhbGl6YWJsZTsKICAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQGZ1bmN0aW9u
cykgewogICAgICAgICBuZXh0IGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IlByaXZhdGVJZGVudGlmaWVyIn0gYW5kIG5vdCAkZnVuY3Rpb24tPnNpZ25hdHVy
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlB1YmxpY0lkZW50aWZpZXIifSk7CiAgICAgICAgIG5l
eHQgaWYgKCRmdW5jdGlvbi0+aXNTdGF0aWMpOwpAQCAtMjMyMiw2ICsyMzI0LDcgQEAgc3ViIEdl
bmVyYXRlSW1wbGVtZW50YXRpb24KIAogICAgIG15IEBmdW5jdGlvbnMgPSBAeyRpbnRlcmZhY2Ut
PmZ1bmN0aW9uc307CiAgICAgcHVzaChAZnVuY3Rpb25zLCBAeyRpbnRlcmZhY2UtPml0ZXJhYmxl
LT5mdW5jdGlvbnN9KSBpZiBJc0tleVZhbHVlSXRlcmFibGVJbnRlcmZhY2UoJGludGVyZmFjZSk7
CisgICAgcHVzaChAZnVuY3Rpb25zLCBAeyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+ZnVuY3Rp
b25zfSkgaWYgJGludGVyZmFjZS0+c2VyaWFsaXphYmxlOwogCiAgICAgbXkgJG51bUNvbnN0YW50
cyA9IEB7JGludGVyZmFjZS0+Y29uc3RhbnRzfTsKICAgICBteSAkbnVtRnVuY3Rpb25zID0gQGZ1
bmN0aW9uczsKQEAgLTM1MzMsOSArMzUzNiw5IEBAIEVORAogCiAgICAgfQogCi0gICAgaWYgKCRp
bnRlcmZhY2UtPml0ZXJhYmxlKSB7Ci0gICAgICAgIEdlbmVyYXRlSW1wbGVtZW50YXRpb25JdGVy
YWJsZUZ1bmN0aW9ucygkaW50ZXJmYWNlKTsKLSAgICB9CisKKyAgICBHZW5lcmF0ZUltcGxlbWVu
dGF0aW9uSXRlcmFibGVGdW5jdGlvbnMoJGludGVyZmFjZSkgaWYgJGludGVyZmFjZS0+aXRlcmFi
bGU7CisgICAgR2VuZXJhdGVTZXJpYWxpemVyRnVuY3Rpb24oJGludGVyZmFjZSwgJGludGVyZmFj
ZU5hbWUsICRjbGFzc05hbWUpIGlmICRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZTsKIAogICAgIGlm
ICgkbmVlZHNWaXNpdENoaWxkcmVuKSB7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9p
ZCAke2NsYXNzTmFtZX06OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcilcbiIpOwpAQCAtMzc1OCw2ICszNzYxLDM4IEBAIEVORAogICAgIHB1c2goQGltcGxD
b250ZW50LCAiXG4jZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25kaXRp
b25hbFN0cmluZzsKIH0KIAorc3ViIEdlbmVyYXRlU2VyaWFsaXplckZ1bmN0aW9uCit7CisgICAg
bXkgKCRpbnRlcmZhY2UsICRpbnRlcmZhY2VOYW1lLCAkY2xhc3NOYW1lKSA9IEBfOworICAgIG15
ICRzZXJpYWxpemVyRnVuY3Rpb25OYW1lID0gInRvSlNPTiI7CisgICAgbXkgJHNlcmlhbGl6ZXJO
YXRpdmVGdW5jdGlvbk5hbWUgPSAkY29kZUdlbmVyYXRvci0+V0tfbGNmaXJzdCgkY2xhc3NOYW1l
KSAuICJQcm90b3R5cGVGdW5jdGlvbiIgLiAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkc2Vy
aWFsaXplckZ1bmN0aW9uTmFtZSk7CisKKyAgICBBZGRUb0ltcGxJbmNsdWRlcygiT2JqZWN0Q29u
c3RydWN0b3IuaCIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCAke3NlcmlhbGl6ZXJOYXRpdmVGdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogc3Rh
dGUpXG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOworICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIEFTU0VSVChzdGF0ZSk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBhdXRvIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTtcbiIpOworICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIGF1dG8gY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlMkaW50
ZXJmYWNlTmFtZSo+KHRoaXNWYWx1ZSk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pO1xuIik7CisgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSl7XG4iKTsKKyAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigq
c3RhdGUsIHRocm93U2NvcGUsIFwiJGludGVyZmFjZU5hbWVcIiwgXCIkc2VyaWFsaXplckZ1bmN0
aW9uTmFtZVwiKTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOworICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVk
VGhpcywgJHtjbGFzc05hbWV9OjppbmZvKCkpO1xuXG4iKSB1bmxlc3MgJGludGVyZmFjZU5hbWUg
ZXEgIkV2ZW50VGFyZ2V0IjsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiByZXN1
bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChzdGF0ZSk7XG4iKTsKKyAgICBmb3JlYWNoIG15ICRh
dHRyaWJ1dGUgKEB7JGludGVyZmFjZS0+YXR0cmlidXRlc30pIHsKKyAgICAgICAgbXkgJG5hbWUg
PSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWU7CisgICAgICAgIGlmIChncmVwICRfIGVxICRu
YW1lLCBAeyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+YXR0cmlidXRlc30pIHsKKyAgICAgICAg
ICAgIG15ICRnZXRGdW5jdGlvbk5hbWUgPSBHZXRBdHRyaWJ1dGVHZXR0ZXJOYW1lKCRpbnRlcmZh
Y2UsICRjbGFzc05hbWUsICRhdHRyaWJ1dGUpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgYXV0byAke25hbWV9VmFsdWUgPSAke2dldEZ1bmN0aW9uTmFtZX0oc3RhdGUsIEpT
VmFsdWU6OmVuY29kZSh0aGlzVmFsdWUpLCBJZGVudGlmaWVyKCkpO1xuIik7CisgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkp
O1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIFwiJHtuYW1lfVwiKSwgSlNWYWx1
ZTo6ZGVjb2RlKCR7bmFtZX1WYWx1ZSkpO1xuIik7CisgICAgICAgIH0KKyAgICB9CisgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpO1xuIik7
CisgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOworfQorCiBzdWIgR2VuZXJhdGVGdW5j
dGlvbkNhc3RlZFRoaXMKIHsKICAgICBteSAoJGludGVyZmFjZSwgJGNsYXNzTmFtZSwgJGZ1bmN0
aW9uLCAkc2hvdWxkUmVqZWN0UHJvbWlzZSkgPSBAXzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9JRExQYXJzZXIucG0KaW5kZXggMGRjYzRjZTIwNjBmZWJmYTk2ZGJkMGY1NGNh
Mjg0ODY1MmUyMGY1Mi4uNmYyMzk5YWNhZjllMWZjZGZiMTcyOTIyODZmODY4YzMxZGYxODFjNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0K
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0KQEAgLTYw
LDYgKzYwLDcgQEAgc3RydWN0KCBkb21JbnRlcmZhY2UgPT4gewogICAgIGlzQ2FsbGJhY2sgPT4g
JyQnLCAjIFVzZWQgZm9yIGNhbGxiYWNrIGludGVyZmFjZXMKICAgICBpc1BhcnRpYWwgPT4gJyQn
LCAjIFVzZWQgZm9yIHBhcnRpYWwgaW50ZXJmYWNlcwogICAgIGl0ZXJhYmxlID0+ICckJywgIyBV
c2VkIGZvciBpdGVyYWJsZSBpbnRlcmZhY2VzCisgICAgc2VyaWFsaXphYmxlID0+ICckJywgIyBV
c2VkIGZvciBzZXJpYWxpemFibGUgaW50ZXJmYWNlcwogfSk7CiAKICMgVXNlZCB0byByZXByZXNl
bnQgZG9tSW50ZXJmYWNlIGNvbnRlbnRzIChuYW1lIG9mIG1ldGhvZCwgc2lnbmF0dXJlKQpAQCAt
MTA3LDYgKzEwOCwxMiBAQCBzdHJ1Y3QoIGRvbUl0ZXJhYmxlID0+IHsKICAgICBleHRlbmRlZEF0
dHJpYnV0ZXMgPT4gJyQnLCAjIEV4dGVuZGVkIGF0dHJpYnV0ZXMKIH0pOwogCisjIFVzZWQgdG8g
cmVwcmVzZW50IHNlcmlhbGl6YWJsZSBpbnRlcmZhY2UKK3N0cnVjdCggZG9tU2VyaWFsaXphYmxl
ID0+IHsKKyAgICBhdHRyaWJ1dGVzID0+ICdAJywgIyBMaXN0IG9mIGF0dHJpYnV0ZXMgdG8gc2Vy
aWFsaXplCisgICAgZnVuY3Rpb25zID0+ICdAJywgIyB0b0pTT04gZnVuY3Rpb24KK30pOworCiAj
IFVzZWQgdG8gcmVwcmVzZW50IHN0cmluZyBjb25zdGFudHMKIHN0cnVjdCggZG9tQ29uc3RhbnQg
PT4gewogICAgIG5hbWUgPT4gJyQnLCAgICAgICAgIyBET00gQ29uc3RhbnQgaWRlbnRpZmllcgpA
QCAtMTA1Niw3ICsxMDYzLDIzIEBAIHN1YiBwYXJzZVNlcmlhbGl6ZXIKICAgICBteSAkbmV4dCA9
ICRzZWxmLT5uZXh0VG9rZW4oKTsKICAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgInNlcmlhbGl6
ZXIiKSB7CiAgICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigp
LCAic2VyaWFsaXplciIsIF9fTElORV9fKTsKLSAgICAgICAgcmV0dXJuICRzZWxmLT5wYXJzZVNl
cmlhbGl6ZXJSZXN0KCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOworICAgICAgICBteSAkbmV4dCA9
ICRzZWxmLT5uZXh0VG9rZW4oKTsKKyAgICAgICAgbXkgJG5ld0RhdGFOb2RlOworICAgICAgICBp
ZiAoJG5leHQtPnZhbHVlKCkgbmUgIjsiKSB7CisgICAgICAgICAgICAkbmV3RGF0YU5vZGUgPSAk
c2VsZi0+cGFyc2VTZXJpYWxpemVyUmVzdCgkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKKyAgICAg
ICAgICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tlbigpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgJG5ld0RhdGFOb2RlID0gZG9tU2VyaWFsaXphYmxlLT5uZXcoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIG15ICR0b0pTT05GdW5jdGlvbiA9IGRvbUZ1bmN0aW9uLT5uZXcoKTsK
KyAgICAgICAgJHRvSlNPTkZ1bmN0aW9uLT5zaWduYXR1cmUoZG9tU2lnbmF0dXJlLT5uZXcoKSk7
CisgICAgICAgICR0b0pTT05GdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMo
JGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7CisgICAgICAgICR0b0pTT05GdW5jdGlvbi0+c2lnbmF0
dXJlLT5uYW1lKCJ0b0pTT04iKTsKKyAgICAgICAgcHVzaChAeyRuZXdEYXRhTm9kZS0+ZnVuY3Rp
b25zfSwgJHRvSlNPTkZ1bmN0aW9uKTsKKworICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1
ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgIjsiLCBfX0xJTkVfXyk7CisgICAgICAgIHJldHVybiAkbmV3
RGF0YU5vZGU7CiAgICAgfQogICAgICRzZWxmLT5hc3NlcnRVbmV4cGVjdGVkVG9rZW4oJG5leHQt
PnZhbHVlKCksIF9fTElORV9fKTsKIH0KQEAgLTEwNjksNyArMTA5MiwxMiBAQCBzdWIgcGFyc2VT
ZXJpYWxpemVyUmVzdAogICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tlbigpOwogICAgIGlm
ICgkbmV4dC0+dmFsdWUoKSBlcSAiPSIpIHsKICAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFs
dWUoJHNlbGYtPmdldFRva2VuKCksICI9IiwgX19MSU5FX18pOwotICAgICAgICByZXR1cm4gJHNl
bGYtPnBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm4oJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7Cisg
ICAgICAgIG15ICRhdHRyaWJ1dGVzID0gJHNlbGYtPnBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm4o
KTsKKworICAgICAgICBteSAkbmV3RGF0YU5vZGUgPSBkb21TZXJpYWxpemFibGUtPm5ldygpOwor
ICAgICAgICAkbmV3RGF0YU5vZGUtPmF0dHJpYnV0ZXMoJGF0dHJpYnV0ZXMpOworCisgICAgICAg
IHJldHVybiAkbmV3RGF0YU5vZGU7CiAgICAgfQogICAgIGlmICgkbmV4dC0+dHlwZSgpID09IElk
ZW50aWZpZXJUb2tlbiB8fCAkbmV4dC0+dmFsdWUoKSBlcSAiKCIpIHsKICAgICAgICAgcmV0dXJu
ICRzZWxmLT5wYXJzZU9wZXJhdGlvblJlc3QoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7CkBAIC0x
MDc5LDU5ICsxMTA3LDQ1IEBAIHN1YiBwYXJzZVNlcmlhbGl6ZXJSZXN0CiBzdWIgcGFyc2VTZXJp
YWxpemF0aW9uUGF0dGVybgogewogICAgIG15ICRzZWxmID0gc2hpZnQ7Ci0gICAgbXkgJGV4dGVu
ZGVkQXR0cmlidXRlTGlzdCA9IHNoaWZ0OwogCiAgICAgbXkgJG5leHQgPSAkc2VsZi0+bmV4dFRv
a2VuKCk7CiAgICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJ7IikgewogICAgICAgICAkc2VsZi0+
YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgInsiLCBfX0xJTkVfXyk7Ci0gICAg
ICAgICRzZWxmLT5wYXJzZVNlcmlhbGl6YXRpb25QYXR0ZXJuTWFwKCk7CisgICAgICAgIG15ICRh
dHRyaWJ1dGVzID0gJHNlbGYtPnBhcnNlU2VyaWFsaXphdGlvbkF0dHJpYnV0ZXMoKTsKICAgICAg
ICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICJ9IiwgX19MSU5F
X18pOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBcQHskYXR0cmlidXRlc307CiAg
ICAgfQogICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAiWyIpIHsKLSAgICAgICAgJHNlbGYtPmFz
c2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICJbIiwgX19MSU5FX18pOwotICAgICAg
ICAkc2VsZi0+cGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybkxpc3QoKTsKLSAgICAgICAgJHNlbGYt
PmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICJdIiwgX19MSU5FX18pOwotICAg
ICAgICByZXR1cm47CisgICAgICAgIGRpZSAiU2VyaWFsaXphdGlvbiBvZiBsaXN0cyBwYXR0ZXJu
IGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLiI7CiAgICAgfQogICAgIGlmICgkbmV4dC0+dHlw
ZSgpID09IElkZW50aWZpZXJUb2tlbikgewotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5UeXBl
KCRzZWxmLT5nZXRUb2tlbigpLCBJZGVudGlmaWVyVG9rZW4pOwotICAgICAgICByZXR1cm47Cisg
ICAgICAgIG15IEBhdHRyaWJ1dGVzID0gKCk7CisgICAgICAgIG15ICR0b2tlbiA9ICRzZWxmLT5n
ZXRUb2tlbigpOworICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5UeXBlKCR0b2tlbiwgSWRlbnRp
ZmllclRva2VuKTsKKyAgICAgICAgcHVzaChAYXR0cmlidXRlcywgJHRva2VuLT52YWx1ZSgpKTsK
KyAgICAgICAgcmV0dXJuIFxAYXR0cmlidXRlczsKICAgICB9CiAgICAgJHNlbGYtPmFzc2VydFVu
ZXhwZWN0ZWRUb2tlbigkbmV4dC0+dmFsdWUoKSwgX19MSU5FX18pOwogfQogCi1zdWIgcGFyc2VT
ZXJpYWxpemF0aW9uUGF0dGVybk1hcAorc3ViIHBhcnNlU2VyaWFsaXphdGlvbkF0dHJpYnV0ZXMK
IHsKICAgICBteSAkc2VsZiA9IHNoaWZ0OwotICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tl
bigpOwotICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAiZ2V0dGVyIikgewotICAgICAgICAkc2Vs
Zi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgImdldHRlciIsIF9fTElORV9f
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgImlu
aGVyaXQiKSB7Ci0gICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tl
bigpLCAiaW5oZXJpdCIsIF9fTElORV9fKTsKLSAgICAgICAgJHNlbGYtPnBhcnNlSWRlbnRpZmll
cnMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoJG5leHQtPnR5cGUoKSA9PSBJ
ZGVudGlmaWVyVG9rZW4pIHsKLSAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVHlwZSgkc2VsZi0+
Z2V0VG9rZW4oKSwgSWRlbnRpZmllclRva2VuKTsKLSAgICAgICAgJHNlbGYtPnBhcnNlSWRlbnRp
ZmllcnMoKTsKLSAgICB9Ci19CisgICAgbXkgJHRva2VuID0gJHNlbGYtPmdldFRva2VuKCk7CisK
KyAgICBpZiAoJHRva2VuLT52YWx1ZSgpIGVxICJnZXR0ZXIiKSB7CisgICAgICAgIGRpZSAiU2Vy
aWFsaXplciBnZXR0ZXIga2V5d29yZCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4iOwogCi1z
dWIgcGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybkxpc3QKLXsKLSAgICBteSAkc2VsZiA9IHNoaWZ0
OwotICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tlbigpOwotICAgIGlmICgkbmV4dC0+dmFs
dWUoKSBlcSAiZ2V0dGVyIikgewotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2Vs
Zi0+Z2V0VG9rZW4oKSwgImdldHRlciIsIF9fTElORV9fKTsKLSAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICBpZiAoJG5leHQtPnR5cGUoKSA9PSBJZGVudGlmaWVyVG9rZW4pIHsKLSAgICAgICAg
JHNlbGYtPmFzc2VydFRva2VuVHlwZSgkc2VsZi0+Z2V0VG9rZW4oKSwgSWRlbnRpZmllclRva2Vu
KTsKLSAgICAgICAgJHNlbGYtPnBhcnNlSWRlbnRpZmllcnMoKTsKKyAgICBpZiAoJHRva2VuLT52
YWx1ZSgpIGVxICJpbmhlcml0IikgeworICAgICAgICBkaWUgIlNlcmlhbGl6ZXIgaW5oZXJpdCBr
ZXl3b3JkIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLiI7CiAgICAgfQorCisgICAgbXkgQGF0
dHJpYnV0ZXMgPSAoKTsKKyAgICAkc2VsZi0+YXNzZXJ0VG9rZW5UeXBlKCR0b2tlbiwgSWRlbnRp
ZmllclRva2VuKTsKKyAgICBwdXNoKEBhdHRyaWJ1dGVzLCAkdG9rZW4tPnZhbHVlKCkpOworICAg
IHB1c2goQGF0dHJpYnV0ZXMsIEB7JHNlbGYtPnBhcnNlSWRlbnRpZmllcnMoKX0pOworICAgIHJl
dHVybiBcQGF0dHJpYnV0ZXM7CiB9CiAKIHN1YiBwYXJzZUlkZW50aWZpZXJMaXN0CkBAIC0yMjY3
LDYgKzIyODEsMTkgQEAgc3ViIGFwcGx5TWVtYmVyTGlzdAogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgbmV4dDsKICAgICAgICAgfQorICAgICAgICBpZiAocmVmKCRpdGVtKSBlcSAiZG9tU2Vy
aWFsaXphYmxlIikgeworICAgICAgICAgICAgJGludGVyZmFjZS0+c2VyaWFsaXphYmxlKCRpdGVt
KTsKKyAgICAgICAgICAgIG5leHQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoJGludGVy
ZmFjZS0+c2VyaWFsaXphYmxlKSB7CisgICAgICAgIG15ICRudW1TZXJpYWxpemVyQXR0cmlidXRl
cyA9IEB7JGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5hdHRyaWJ1dGVzfTsKKyAgICAgICAgaWYg
KCRudW1TZXJpYWxpemVyQXR0cmlidXRlcyA9PSAwKSB7CisgICAgICAgICAgICBmb3JlYWNoIG15
ICRhdHRyaWJ1dGUgKEB7JGludGVyZmFjZS0+YXR0cmlidXRlc30pIHsKKyAgICAgICAgICAgICAg
ICBwdXNoKEB7JGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5hdHRyaWJ1dGVzfSwgJGF0dHJpYnV0
ZS0+c2lnbmF0dXJlLT5uYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5vZGUuY3BwCmluZGV4IDBiYjdiYTVkMDYxNjA2N2U1ZmI4MmZhNjU1ZjhjZjUxOGIwOTc5
NTEuLjhjNDZjODgwZDAwZDU0MDAxZmFjMzFlYWI4MjdlMTJiN2MwZmRkZmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5j
cHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCiAjaW5j
bHVkZSAiSlNET01JdGVyYXRvci5oIgogI2luY2x1ZGUgIkpTRE9NUHJvbWlzZS5oIgorI2luY2x1
ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJl
cy5oIgogI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KQEAgLTQ0
LDYgKzQ1LDcgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQ
cm90b3R5cGVGdW5jdGlvbkVudHJpZXMoSlNDOjpFeGVjU3QKIEpTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25LZXlzKEpTQzo6RXhlY1N0
YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3Rv
dHlwZUZ1bmN0aW9uVmFsdWVzKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaChKU0M6OkV4
ZWNTdGF0ZSopOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQ
cm90b3R5cGVGdW5jdGlvblRvSlNPTihKU0M6OkV4ZWNTdGF0ZSopOwogCiAvLyBBdHRyaWJ1dGVz
CiAKQEAgLTExNSw2ICsxMTcsNyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0
Tm9kZVByb3RvdHlwZVRhYmxlVmFsdWVzW10gPQogICAgIHsgImtleXMiLCBKU0M6OkZ1bmN0aW9u
LCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpz
VGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvbktleXMpLCAoaW50cHRyX3QpICgwKSB9IH0sCiAgICAg
eyAidmFsdWVzIiwgSlNDOjpGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRp
Y19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25WYWx1ZXMp
LCAoaW50cHRyX3QpICgwKSB9IH0sCiAgICAgeyAiZm9yRWFjaCIsIEpTQzo6RnVuY3Rpb24sIE5v
SW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0
Tm9kZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaCksIChpbnRwdHJfdCkgKDEpIH0gfSwKKyAgICB7
ICJ0b0pTT04iLCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGlj
X2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTiks
IChpbnRwdHJfdCkgKDApIH0gfSwKIH07CiAKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3ROb2RlUHJv
dG90eXBlOjpzX2luZm8gPSB7ICJUZXN0Tm9kZVByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIDAs
IENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0Tm9kZVByb3RvdHlwZSkgfTsKQEAgLTI4Nyw2ICsy
OTAsMjUgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90
b3R5cGVGdW5jdGlvbkZvckVhY2goSlNDOjpFeGVjU3QKICAgICByZXR1cm4gaXRlcmF0b3JGb3JF
YWNoPEpTVGVzdE5vZGU+KCpzdGF0ZSwgImZvckVhY2giKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oRXhlY1N0YXRl
KiBzdGF0ZSkKK3sKKyAgICBBU1NFUlQoc3RhdGUpOworICAgIGF1dG8gdGhpc1ZhbHVlID0gc3Rh
dGUtPnRoaXNWYWx1ZSgpOworICAgIGF1dG8gY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0Tm9kZSo+KHRoaXNWYWx1ZSk7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSl7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRl
LCB0aHJvd1Njb3BlLCAiVGVzdE5vZGUiLCAidG9KU09OIik7CisgICAgfQorICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0Tm9kZTo6aW5mbygpKTsKKworICAg
IGF1dG8qIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KHN0YXRlKTsKKyAgICBhdXRvIG5h
bWVWYWx1ZSA9IGpzVGVzdE5vZGVOYW1lKHN0YXRlLCBKU1ZhbHVlOjplbmNvZGUodGhpc1ZhbHVl
KSwgSWRlbnRpZmllcigpKTsKKyAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOwor
ICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm5h
bWUiKSwgSlNWYWx1ZTo6ZGVjb2RlKG5hbWVWYWx1ZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKK30KKwogdm9pZCBKU1Rlc3ROb2RlOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU1Rlc3ROb2RlKj4oY2VsbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCmluZGV4IDA3NzE4MTYxM2M2ODkx
ZjBjZDM4NTBjMDM3OWIyZTdhZTZlMTc0YWEuLjM0OTlmMmQ1ZDNlOTlhNTdmNmZlMmJlODliNTAy
MGI1MTc0YzU0NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiSlNU
ZXN0T2JqLmgiCiAjaW5jbHVkZSAiSlNUZXN0U3ViT2JqLmgiCiAjaW5jbHVkZSAiSlNYUGF0aE5T
UmVzb2x2ZXIuaCIKKyNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlJ1
bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTVkdEb2N1bWVudC5oIgogI2luY2x1
ZGUgIlNWR1BvaW50LmgiCkBAIC03ODIsNiArNzgzLDcgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxPdmVybG9h
ZCgKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvblNpbmdsZUNvbmRpdGlvbmFsT3ZlcmxvYWQoSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkF0
dGFjaFNoYWRvd1Jvb3QoSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nKEpTQzo6RXhlY1N0
YXRlKik7CitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25Ub0pTT04oSlNDOjpFeGVjU3RhdGUqKTsKIAogLy8gQXR0cmlidXRlcwogCkBA
IC0xMzg3LDYgKzEzODksNyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2Jq
UHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9CiAgICAgeyAic2luZ2xlQ29uZGl0aW9uYWxPdmVybG9h
ZCIsIEpTQzo6RnVuY3Rpb24sIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxO
YXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TaW5nbGVDb25kaXRpb25h
bE92ZXJsb2FkKSwgKGludHB0cl90KSAoMSkgfSB9LAogICAgIHsgImF0dGFjaFNoYWRvd1Jvb3Qi
LCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0
aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQXR0YWNoU2hhZG93Um9vdCks
IChpbnRwdHJfdCkgKDEpIH0gfSwKICAgICB7ICJ0b1N0cmluZyIsIEpTQzo6RnVuY3Rpb24sIE5v
SW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25Ub1N0cmluZyksIChpbnRwdHJfdCkgKDApIH0gfSwKKyAgICB7
ICJ0b0pTT04iLCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGlj
X2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKSwg
KGludHB0cl90KSAoMCkgfSB9LAogI2lmIEVOQUJMRShDb25kaXRpb24xKQogICAgIHsgIkNPTkRJ
VElPTkFMX0NPTlNUIiwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgQ29uc3RhbnRJbnRlZ2VyLCBO
b0ludHJpbnNpYywgeyAobG9uZyBsb25nKSgwKSB9IH0sCiAjZWxzZQpAQCAtNzM3NSw2ICs3Mzc4
LDM0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25Ub1N0cmluZyhFeGVjU3RhdGUqIHN0YXRlCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOwogfQogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uVG9KU09OKEV4ZWNTdGF0ZSogc3RhdGUpCit7CisgICAgQVNTRVJUKHN0
YXRlKTsKKyAgICBhdXRvIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKKyAgICBhdXRv
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7CisgICAg
Vk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSl7CisgICAgICAgIHJl
dHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iaiIsICJ0
b0pTT04iKTsKKyAgICB9CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlz
LCBKU1Rlc3RPYmo6OmluZm8oKSk7CisKKyAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0
eU9iamVjdChzdGF0ZSk7CisgICAgYXV0byByZWFkT25seVN0cmluZ0F0dHJWYWx1ZSA9IGpzVGVz
dE9ialJlYWRPbmx5U3RyaW5nQXR0cihzdGF0ZSwgSlNWYWx1ZTo6ZW5jb2RlKHRoaXNWYWx1ZSks
IElkZW50aWZpZXIoKSk7CisgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKKyAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJyZWFk
T25seVN0cmluZ0F0dHIiKSwgSlNWYWx1ZTo6ZGVjb2RlKHJlYWRPbmx5U3RyaW5nQXR0clZhbHVl
KSk7CisgICAgYXV0byBlbnVtQXR0clZhbHVlID0ganNUZXN0T2JqRW51bUF0dHIoc3RhdGUsIEpT
VmFsdWU6OmVuY29kZSh0aGlzVmFsdWUpLCBJZGVudGlmaWVyKCkpOworICAgIEFTU0VSVCghdGhy
b3dTY29wZS5leGNlcHRpb24oKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnZtLCAiZW51bUF0dHIiKSwgSlNWYWx1ZTo6ZGVjb2RlKGVudW1BdHRy
VmFsdWUpKTsKKyAgICBhdXRvIGxvbmdBdHRyVmFsdWUgPSBqc1Rlc3RPYmpMb25nQXR0cihzdGF0
ZSwgSlNWYWx1ZTo6ZW5jb2RlKHRoaXNWYWx1ZSksIElkZW50aWZpZXIoKSk7CisgICAgQVNTRVJU
KCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJsb25nQXR0ciIpLCBKU1ZhbHVlOjpkZWNvZGUobG9u
Z0F0dHJWYWx1ZSkpOworICAgIGF1dG8gY3JlYXRlVmFsdWUgPSBqc1Rlc3RPYmpDcmVhdGUoc3Rh
dGUsIEpTVmFsdWU6OmVuY29kZSh0aGlzVmFsdWUpLCBJZGVudGlmaWVyKCkpOworICAgIEFTU0VS
VCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY3JlYXRlIiksIEpTVmFsdWU6OmRlY29kZShjcmVh
dGVWYWx1ZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKwogdm9p
ZCBKU1Rlc3RPYmo6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE9iaio+KGNlbGwp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RO
b2RlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Tm9kZS5p
ZGwKaW5kZXggNDRmOGNhODI3M2U3OGZmMWQ1M2ExZjllYzVmMWZlNTNlYjk2OGJkZS4uOWQyYTA3
OGViZmJlNDcyYTExODQ5NjdlMDAxYjkwZWM4MWI4YWE5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROb2RlLmlkbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5vZGUuaWRsCkBAIC0yNyw0ICsyNyw2IEBA
CiAKICAgICBbRW5hYmxlZEF0UnVudGltZT1ET01JdGVyYXRvcl0gaXRlcmFibGU8VGVzdE5vZGU+
OwogICAgIFByb21pc2UgdGVzdFdvcmtlclByb21pc2UoKTsKKworICAgIHNlcmlhbGl6ZXI7CiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RP
YmouaWRsIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRs
CmluZGV4IDIxMGQ1NWY4YTBiNWQ3ZDhkZmVmZWI2MGE0YmM5M2RmZWMyYmU0Y2YuLjRlYjA3MmEw
MmMxNGIzYmE1Y2VlZDQ2YTNjNGQ5MjZjZjQ3MTMxYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKQEAgLTQxMCw2ICs0MTAsOSBAQCBl
bnVtIFRlc3RDb25maWRlbmNlIHsgImhpZ2giLCAia2luZGEtbG93IiB9OwogICAgIHZvaWQgYXR0
YWNoU2hhZG93Um9vdChUZXN0RGljdGlvbmFyeSBpbml0KTsKIAogICAgIHN0cmluZ2lmaWVyIGF0
dHJpYnV0ZSBVU1ZTdHJpbmcgc3RyaW5naWZpZXJBdHRyaWJ1dGU7CisKKworICAgIHNlcmlhbGl6
ZXIgPSB7cmVhZE9ubHlTdHJpbmdBdHRyLCBjcmVhdGUsIGVudW1BdHRyLCBsb25nQXR0cn07CiB9
OwogCiAvLyBUaGUgZm9sbG93aW5nIGNvbW1lbnQgc2hvdWxkIG5vdCBnZW5lcmF0ZSBhbnkgY29k
ZS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwppbmRleCAzMTgwYzE2OTY3YmZlNzRkMzQwYTM4ZjliMGI0MDI2MmY2Y2MzMTFlLi5hZGNl
MWZmNWM0N2VjMGMwMmVkMTBiZDA5MDY2M2Q0ODg2YzdjZjg4IDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTgg
QEAKKzIwMTYtMDktMjcgIEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CisK
KyAgICAgICAgQWRkIFdlYklETCBzcGVjaWFsIG9wZXJhdGlvbiBzdXBwb3J0OiBzZXJpYWxpemVy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTYyOTMK
KworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBWZXJpZnkgdGhl
IG5ldyBBUEkgb2YgdGhlIG9iamVjdHMgYW5kIGNoZWNrIHdoYXQgaGFwcGVucyB3aGVuIHVzZXIK
KyAgICAgICAgbW9kaWZpZXMgdGhlIHZhbHVlcyBhbmQgdHlwZXMgb2YgdGhlIGF0dHJpYnV0ZXMs
IG9yIGFkZHMgYSBudWxsIHZhbHVlLgorCisgICAgICAgICogZmFzdC9tZWRpYXN0cmVhbS9SVENJ
Y2VDYW5kaWRhdGUtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvbWVkaWFzdHJlYW0vUlRD
SWNlQ2FuZGlkYXRlLmh0bWw6CisgICAgICAgICogZmFzdC9tZWRpYXN0cmVhbS9SVENTZXNzaW9u
RGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvbWVkaWFzdHJlYW0vUlRD
U2Vzc2lvbkRlc2NyaXB0aW9uLmh0bWw6CisKIDIwMTYtMDktMjcgIE5hbiBXYW5nICA8bl93YW5n
QGFwcGxlLmNvbT4KIAogICAgICAgICBBWDogQ3Jhc2hUcmFjZXI6IGNvbS5hcHBsZS5XZWJLaXQu
V2ViQ29udGVudCBhdCBXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpsb2NhbENhcmV0UmVjdEZvckNo
YXJhY3Rlck9mZnNldChXZWJDb3JlOjpSZW5kZXJPYmplY3QqJiwgV2ViQ29yZTo6Q2hhcmFjdGVy
T2Zmc2V0IGNvbnN0JikgKyAxMTYKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFz
dHJlYW0vUlRDSWNlQ2FuZGlkYXRlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvbWVk
aWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLWV4cGVjdGVkLnR4dAppbmRleCAzYzkwMjk4MzY1OWNj
N2VlMzgxZmE1MWQ4YzQ2MjVhNDNiMzA3ZjQ1Li5hMmRjNzFhZmJiMGJmMGZiNzJhNWEzMWVlODFh
YWZlNTJjM2JhMzg1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JU
Q0ljZUNhbmRpZGF0ZS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0
cmVhbS9SVENJY2VDYW5kaWRhdGUtZXhwZWN0ZWQudHh0CkBAIC03LDYgKzcsMjEgQEAgUEFTUyBj
YW5kaWRhdGUgPSBuZXcgUlRDSWNlQ2FuZGlkYXRlKGluaXRpYWxpemVyKTsgZGlkIG5vdCB0aHJv
dyBleGNlcHRpb24uCiBQQVNTIGNhbmRpZGF0ZS5jYW5kaWRhdGUgaXMgImZvbyIKIFBBU1MgY2Fu
ZGlkYXRlLnNkcE1pZCBpcyAiYmFyIgogUEFTUyBjYW5kaWRhdGUuc2RwTUxpbmVJbmRleCBpcyA2
CitQQVNTIFJUQ0ljZUNhbmRpZGF0ZS5wcm90b3R5cGUudG9KU09OIGlzIGRlZmluZWQuCitQQVNT
IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUlRDSWNlQ2FuZGlkYXRlLnByb3RvdHlw
ZSwgInRvSlNPTiIpLmVudW1lcmFibGUgaXMgdHJ1ZQorUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKFJUQ0ljZUNhbmRpZGF0ZS5wcm90b3R5cGUsICJ0b0pTT04iKS53cml0YWJs
ZSBpcyB0cnVlCitQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUlRDSWNlQ2Fu
ZGlkYXRlLnByb3RvdHlwZSwgInRvSlNPTiIpLmNvbmZpZ3VyYWJsZSBpcyB0cnVlCitQQVNTIFJU
Q0ljZUNhbmRpZGF0ZS5wcm90b3R5cGUudG9KU09OLmxlbmd0aCBpcyAwCitQQVNTIFJUQ0ljZUNh
bmRpZGF0ZS5wcm90b3R5cGUudG9KU09OLm5hbWUgaXMgInRvSlNPTiIKK1BBU1MgT2JqZWN0Lmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihqc29uTWFwLCAiY2FuZGlkYXRlIikuZW51bWVyYWJsZSBp
cyB0cnVlCitQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoanNvbk1hcCwgImNh
bmRpZGF0ZSIpLndyaXRhYmxlIGlzIHRydWUKK1BBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihqc29uTWFwLCAiY2FuZGlkYXRlIikuY29uZmlndXJhYmxlIGlzIHRydWUKK1BBU1Mg
Y2hpbGRDYW5kaWRhdGUudG9KU09OKCk7IHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IENhbiBv
bmx5IGNhbGwgUlRDSWNlQ2FuZGlkYXRlLnRvSlNPTiBvbiBpbnN0YW5jZXMgb2YgUlRDSWNlQ2Fu
ZGlkYXRlLgorUEFTUyBKU09OLnN0cmluZ2lmeShjYW5kaWRhdGUudG9KU09OKCkpIGlzICJ7XCJj
YW5kaWRhdGVcIjpcImZvb1wiLFwic2RwTWlkXCI6XCJiYXJcIixcInNkcE1MaW5lSW5kZXhcIjo2
fSIKK1BBU1MgSlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNPTigpKSBpcyAie1wiY2FuZGlk
YXRlXCI6XCJmb29cIixcInNkcE1pZFwiOlwiYmFyXCIsXCJzZHBNTGluZUluZGV4XCI6Nn0iCitQ
QVNTIEpTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSkgaXMgIntcImNhbmRpZGF0ZVwi
OlwiZm9vXCIsXCJzZHBNaWRcIjpcImJhclwiLFwic2RwTUxpbmVJbmRleFwiOjZ9IgorUEFTUyBK
U09OLnN0cmluZ2lmeShjYW5kaWRhdGUudG9KU09OKCkpIGlzICJ7XCJjYW5kaWRhdGVcIjpcImZv
b1wiLFwic2RwTWlkXCI6XCJiYXJcIixcInNkcE1MaW5lSW5kZXhcIjo2fSIKK1BBU1MgSlNPTi5z
dHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNPTigpKSBpcyAie1wiY2FuZGlkYXRlXCI6XCJmb29cIixc
InNkcE1pZFwiOlwiYmFyXCIsXCJzZHBNTGluZUluZGV4XCI6Nn0iCiAKIEF0dHJpYnV0ZXMgYXJl
IHJlYWRvbmx5CiBjYW5kaWRhdGUuY2FuZGlkYXRlID0gImZvby11cGRhdGVkIgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaHRtbCBiL0xh
eW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmh0bWwKaW5kZXggYzQw
MzE1NjU1NjllMjM4YjZjNGM1YTg5ZjhhOWIxMDc5MjRhMzdhZi4uNTNmNDljYjcyZjA5MWE0MTNl
Njc1NjliN2MzMTM3MzM2YzcwZDhjNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRp
YXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlh
c3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5odG1sCkBAIC0xMyw2ICsxMywzMyBAQAogICAgICAgICAg
ICAgc2hvdWxkQmUoJ2NhbmRpZGF0ZS5jYW5kaWRhdGUnLCAnImZvbyInKTsKICAgICAgICAgICAg
IHNob3VsZEJlKCdjYW5kaWRhdGUuc2RwTWlkJywgJyJiYXIiJyk7CiAgICAgICAgICAgICBzaG91
bGRCZSgnY2FuZGlkYXRlLnNkcE1MaW5lSW5kZXgnLCAnNicpOworICAgICAgICAgICAgc2hvdWxk
QmVEZWZpbmVkKCdSVENJY2VDYW5kaWRhdGUucHJvdG90eXBlLnRvSlNPTicpOworICAgICAgICAg
ICAgc2hvdWxkQmVUcnVlKCdPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFJUQ0ljZUNh
bmRpZGF0ZS5wcm90b3R5cGUsICJ0b0pTT04iKS5lbnVtZXJhYmxlJyk7CisgICAgICAgICAgICBz
aG91bGRCZVRydWUoJ09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUlRDSWNlQ2FuZGlk
YXRlLnByb3RvdHlwZSwgInRvSlNPTiIpLndyaXRhYmxlJyk7CisgICAgICAgICAgICBzaG91bGRC
ZVRydWUoJ09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUlRDSWNlQ2FuZGlkYXRlLnBy
b3RvdHlwZSwgInRvSlNPTiIpLmNvbmZpZ3VyYWJsZScpOworICAgICAgICAgICAgc2hvdWxkQmUo
J1JUQ0ljZUNhbmRpZGF0ZS5wcm90b3R5cGUudG9KU09OLmxlbmd0aCcsICcwJyk7CisgICAgICAg
ICAgICBzaG91bGRCZSgnUlRDSWNlQ2FuZGlkYXRlLnByb3RvdHlwZS50b0pTT04ubmFtZScsICci
dG9KU09OIicpOworCisgICAgICAgICAgICB2YXIganNvbk1hcCA9IGNhbmRpZGF0ZS50b0pTT04o
KTsKKyAgICAgICAgICAgIHNob3VsZEJlVHJ1ZSgnT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihqc29uTWFwLCAiY2FuZGlkYXRlIikuZW51bWVyYWJsZScpOworICAgICAgICAgICAgc2hv
dWxkQmVUcnVlKCdPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGpzb25NYXAsICJjYW5k
aWRhdGUiKS53cml0YWJsZScpOworICAgICAgICAgICAgc2hvdWxkQmVUcnVlKCdPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKGpzb25NYXAsICJjYW5kaWRhdGUiKS5jb25maWd1cmFibGUn
KTsKKworICAgICAgICAgICAgdmFyIGNoaWxkUlRDSWNlQ2FuZGlkYXRlID0gZnVuY3Rpb24oKSB7
fTsKKyAgICAgICAgICAgIGNoaWxkUlRDSWNlQ2FuZGlkYXRlLnByb3RvdHlwZSA9IE9iamVjdC5j
cmVhdGUoUlRDSWNlQ2FuZGlkYXRlLnByb3RvdHlwZSk7CisgICAgICAgICAgICB2YXIgY2hpbGRD
YW5kaWRhdGUgPSBuZXcgY2hpbGRSVENJY2VDYW5kaWRhdGUoKTsKKyAgICAgICAgICAgIHNob3Vs
ZFRocm93KCdjaGlsZENhbmRpZGF0ZS50b0pTT04oKTsnKTsKKworICAgICAgICAgICAgc2hvdWxk
QmVFcXVhbFRvU3RyaW5nKCdKU09OLnN0cmluZ2lmeShjYW5kaWRhdGUudG9KU09OKCkpJywgJ3si
Y2FuZGlkYXRlIjoiZm9vIiwic2RwTWlkIjoiYmFyIiwic2RwTUxpbmVJbmRleCI6Nn0nKTsKKyAg
ICAgICAgICAgIGNhbmRpZGF0ZS5uZXdBdHRyaWJ1dGUgPSAibmV3IHZhbHVlIjsKKyAgICAgICAg
ICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnSlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNP
TigpKScsICd7ImNhbmRpZGF0ZSI6ImZvbyIsInNkcE1pZCI6ImJhciIsInNkcE1MaW5lSW5kZXgi
OjZ9Jyk7CisgICAgICAgICAgICBjYW5kaWRhdGUuc2RwTUxpbmVJbmRleCA9ICJub3QgYSBudW1i
ZXIiOworICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdKU09OLnN0cmluZ2lmeShj
YW5kaWRhdGUudG9KU09OKCkpJywgJ3siY2FuZGlkYXRlIjoiZm9vIiwic2RwTWlkIjoiYmFyIiwi
c2RwTUxpbmVJbmRleCI6Nn0nKTsKKyAgICAgICAgICAgIGNhbmRpZGF0ZS5zZHBNaWQgPSA3Owor
ICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdKU09OLnN0cmluZ2lmeShjYW5kaWRh
dGUudG9KU09OKCkpJywgJ3siY2FuZGlkYXRlIjoiZm9vIiwic2RwTWlkIjoiYmFyIiwic2RwTUxp
bmVJbmRleCI6Nn0nKTsKKyAgICAgICAgICAgIGNhbmRpZGF0ZS5zZHBNaWQgPSBudWxsOworICAg
ICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdKU09OLnN0cmluZ2lmeShjYW5kaWRhdGUu
dG9KU09OKCkpJywgJ3siY2FuZGlkYXRlIjoiZm9vIiwic2RwTWlkIjoiYmFyIiwic2RwTUxpbmVJ
bmRleCI6Nn0nKTsKKwogICAgICAgICAgICAgZGVidWcoIiIpOwogCiAgICAgICAgICAgICBkZWJ1
ZygiQXR0cmlidXRlcyBhcmUgcmVhZG9ubHkiKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLWV4cGVjdGVkLnR4
dAppbmRleCA4MWFlMDFhN2Y3ZjlkODAzOTk1OTk5OTNmODM2YTJkOTYxNTIzYmIxLi41OWQzYmNk
MTc1MDliMjdkZTg0ZGYyODhkOTNjY2IyNmRkNDQzZDcwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi1leHBlY3RlZC50eHQKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24tZXhw
ZWN0ZWQudHh0CkBAIC02LDYgKzYsNyBAQCBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURQogUEFTUyBz
ZXNzaW9uRGVzY3JpcHRpb24gPSBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGluaXRpYWxpemVy
KTsgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCiBQQVNTIHNlc3Npb25EZXNjcmlwdGlvbi50eXBl
IGlzICJvZmZlciIKIFBBU1Mgc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCBpcyAiZm9vYmFyIgorUEFT
UyBKU09OLnN0cmluZ2lmeShzZXNzaW9uRGVzY3JpcHRpb24udG9KU09OKCkpIGlzICJ7XCJ0eXBl
XCI6XCJvZmZlclwiLFwic2RwXCI6XCJmb29iYXJcIn0iCiAqKiogQXR0cmlidXRlcyBhcmUgcmVh
ZC1vbmx5LgogUEFTUyBzZXNzaW9uRGVzY3JpcHRpb24udHlwZSA9ICdhbnN3ZXInIGRpZCBub3Qg
dGhyb3cgZXhjZXB0aW9uLgogUEFTUyBzZXNzaW9uRGVzY3JpcHRpb24udHlwZSBpcyAnb2ZmZXIn
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNj
cmlwdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVz
Y3JpcHRpb24uaHRtbAppbmRleCA4YTJlOTMzZDFjNGJkMWRkNGYzZGViMDI3YmRlN2IwOTlmMTA3
YWIxLi44MzQzZWI4MjhjNmI4MGU2MzE1OTAyMDNmMjQ3NTAxOTljNmRlOGI3IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5odG1s
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9u
Lmh0bWwKQEAgLTE0LDYgKzE0LDcgQEAKICAgICAgICAgICAgIHNob3VsZE5vdFRocm93KCJzZXNz
aW9uRGVzY3JpcHRpb24gPSBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGluaXRpYWxpemVyKTsi
KTsKICAgICAgICAgICAgIHNob3VsZEJlKCdzZXNzaW9uRGVzY3JpcHRpb24udHlwZScsICcib2Zm
ZXIiJyk7CiAgICAgICAgICAgICBzaG91bGRCZSgnc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCcsICci
Zm9vYmFyIicpOworICAgICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdKU09OLnN0cmlu
Z2lmeShzZXNzaW9uRGVzY3JpcHRpb24udG9KU09OKCkpJywgJ3sidHlwZSI6Im9mZmVyIiwic2Rw
IjoiZm9vYmFyIn0nKTsKIAogICAgICAgICAgICAgZGVidWcoIioqKiBBdHRyaWJ1dGVzIGFyZSBy
ZWFkLW9ubHkuIik7CiAgICAgICAgICAgICBzaG91bGROb3RUaHJvdygic2Vzc2lvbkRlc2NyaXB0
aW9uLnR5cGUgPSAnYW5zd2VyJyIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290079</attachid>
            <date>2016-09-28 05:47:49 -0700</date>
            <delta_ts>2016-09-28 06:20:59 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-156293-20160928144448.patch</filename>
            <type>text/plain</type>
            <size>30061</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2NTEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTE3YWVhZjQ0M2U0OWIw
OTIzODdmODA1YmY3YmZiZGQxZTM0OWUxZC4uYjEyMDI5NzQyYmUzZWYxNzhkMDRkMWFiZjk4YWI5
MWJmZTkzZWJhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0IEBACisyMDE2LTA5LTI4ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIEFkZCBXZWJJREwg
c3BlY2lhbCBvcGVyYXRpb24gc3VwcG9ydDogc2VyaWFsaXplcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MjkzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgWW91ZW5uIEZhYmxldC4KKworICAgICAgICBBZGRlZCBzdXBwb3J0IGZvciB0aGUgc2VyaWFs
aXplciBzcGVjaWFsIG9wZXJhdGlvbiBmb3IgV2ViSURMcywKKyAgICAgICAgY3VycmVudCBpbXBs
ZW1lbnRhdGlvbiBhZGRzIHN1cHBvcnQgZm9yOgorICAgICAgICAgIC0ganVzdCB0aGUga2V5d29y
ZDogc2VyaWFsaXplcjsgSXQgd2lsbCByZXR1cm4gYWxsIHRoZQorICAgICAgICAgICAgYXR0cmli
dXRlcyBvZiBpbiBhbiBvYmplY3QuCisgICAgICAgICAgLSBtYXAgb2YgZW50cmllcyB3aXRoIHRo
ZSBhdHRyaWJ1dGVzOiBzZXJpYWxpemVyID0ge2F0dHJpYnV0ZTEsCisgICAgICAgICAgICBhdHRy
aWJ1dGUyLCAuLi59CisKKyAgICAgICAgSXQgY3JlYXRlcyBhIHRvSlNPTiBtZXRob2QgdGhhdCBy
ZXR1cm5zIHRoZSBzZXJpYWxpemVkIHZhbHVlCisgICAgICAgIGNvbnZlcnRlZCBpbnRvIGFuIEVD
TUFTY3JpcHQgdmFsdWUuIEZvciBtb3JlIGluZm9ybWF0aW9uIGNoZWNrIHRoZQorICAgICAgICBk
ZWZpbml0aW9uIG9mIHRoZSBvcGVyYXRpb246CisKKyAgICAgICAgaHR0cDovL2hleWNhbS5naXRo
dWIuaW8vd2ViaWRsLyNpZGwtc2VyaWFsaXplcnMKKworICAgICAgICBXZSBoYXZlIGNyZWF0ZWQg
YSBuZXcgZnVuY3Rpb24gaW4gdGhlIEFQSSBvZiB0aGUgb2JqZWN0cworICAgICAgICB0aGF0IGFy
ZSBtYXJrZWQgYXMgc2VyaWFsaXplci4KKworICAgICAgICBVc2VkIHRoZSBzdXBwb3J0IHRvIGFk
ZCBuZXcgQVBJIGZvciBSVENJY2VDYW5kaWRhdGUgYW5kCisgICAgICAgIFJUQ1Nlc3Npb25EZXNj
cmlwdGlvbi4KKworICAgICAgICBVcGRhdGVkIHRoZSB0ZXN0cyBleHBlY3RhdGlvbnMgb2YgdGhl
IGJpbmRpbmdzLgorCisgICAgICAgIFRlc3RzOiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5v
ZGUuaWRsCisgICAgICAgICAgICAgICBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwK
KyAgICAgICAgICAgICAgIGZhc3QvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmh0bWwKKyAg
ICAgICAgICAgICAgIGZhc3QvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmh0bWwK
KworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmlkbDogQWRk
ZWQgdGhlIHNlcmlhbGl6ZXIKKyAgICAgICAgb3BlcmF0aW9uLgorICAgICAgICAqIE1vZHVsZXMv
bWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmlkbDogQWRkZWQgdGhlCisgICAgICAg
IHNlcmlhbGl6ZXIgb3BlcmF0aW9uLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6IEFkZGVkIHRo
ZSBjYWxscyB0byB0aGUgc2VyaWFsaXplcgorICAgICAgICBjb2RlIGdlbmVyYXRvci4KKyAgICAg
ICAgKEdlbmVyYXRlU2VyaWFsaXplckZ1bmN0aW9uKTogQWRkZWQsIGdlbmVyYXRlcyB0aGUgdG9K
U09OIGZ1bmN0aW9uCisgICAgICAgIGFkZGluZyBhbGwgdGhlIHNlcmlhbGl6YWJsZS0+YXR0cmli
dXRlcyB2YWx1ZSB0byBhbiBvYmplY3QgYXMKKyAgICAgICAgZGVmaW5lZCBpbiB0aGUgc3BlYy4K
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbTogTW9kaWZpZWQgdGhlIHNl
cmlhbGl6ZXIgcGFyc2VyCisgICAgICAgIHRoYXQgd2FzIHVudXNlZCB0byBzdXBwb3J0IHRoZSBX
ZWJJREwgc3BlYyBwYXJ0cy4gQWRkZWQgYSBuZXcKKyAgICAgICAgZG9tU2VyaWFsaXphYmxlIHR5
cGUgdG8gc3RvcmUgdGhlIGxpc3Qgb2YgYXR0cmlidXRlcyBpbiB0aGUKKyAgICAgICAgcG9zc2li
bGUgbWFwLgorICAgICAgICAocGFyc2VTZXJpYWxpemVyKTogTW9kaWZpZWQgdGhlIGZ1bmN0aW9u
IHRvIGZvbGxvdyB0aGUKKyAgICAgICAgc2VtaWNvbG9uIHJ1bGUgaW4gdGhlIHNwZWMsIG5vdyB0
aGUgc2VyaWFsaXplciBsaW5lIG11c3QgaGF2ZSBhCisgICAgICAgIHNlbWljb2xvbiBsaWtlIGFu
eSBvdGhlciBsaW5lLgorICAgICAgICAocGFyc2VTZXJpYWxpemVyUmVzdCk6IFRoZSBmdW5jdGlv
biBub3cgaGFzIHRvIGdldCB0aGUgYXR0cmlidXRlcworICAgICAgICBsaXN0IGZyb20gdGhlIHBh
dHRlcm4gcGFyc2luZyBmdW5jdGlvbiBhbmQgYWRkIHRoZW0gdG8gdGhlCisgICAgICAgIGRvbVNl
cmlhbGl6YWJsZSBpdGVtLgorICAgICAgICAocGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybik6IE5v
dyB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxpc3Qgb2YKKyAgICAgICAgYXR0cmlidXRlcyBp
biB0aGUgc2VyaWFsaXphYmxlIG1hcCBvciBsaXN0IGlmIHdlIGhhdmUgb25lLgorICAgICAgICAo
cGFyc2VTZXJpYWxpemF0aW9uQXR0cmlidXRlcyk6IEFkZGVkLCB0aGlzIGZ1bmN0aW9uIHJlcGxh
Y2VzIHRoZQorICAgICAgICBNYXAgYW5kIExpc3QgZnVuY3Rpb25zLCB0aGUgY3VycmVudGx5IHN1
cHBvcnRlZCBwYXJ0cyBhcmUgc2ltaWxhcgorICAgICAgICBmb3IgYm90aCBzaXR1YXRpb25zLgor
ICAgICAgICAoYXBwbHlNZW1iZXJMaXN0KTogQWRkZWQgdGhlIHNlcmlhbGl6YWJsZSBpdGVtIHRv
IHRoZSBpbnRlcmZhY2UKKyAgICAgICAgdmFyaWFibGUgYW5kIHBvcHVsYXRlIHRoZSBzZXJpYWxp
emFibGUgaW4gY2FzZSB0aGVyZSBpcyBub3QgYQorICAgICAgICBkZWZpbmVkIG1hcC4KKyAgICAg
ICAgKHBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm5NYXApOiBSZXBsYWNlZCB3aXRoCisgICAgICAg
IHBhcnNlU2VyaWFsaXphdGlvbkF0dHJpYnV0ZXMuCisgICAgICAgIChwYXJzZVNlcmlhbGl6YXRp
b25QYXR0ZXJuTGlzdCk6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROb2RlLmNwcDogTW9kaWZpZWQgdGhlIGV4cGVjdGVkIHJlc3VsdC4KKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTik6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6IE1vZGlmaWVkIHRoZSBleHBl
Y3RlZCByZXN1bHQuCisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
blRvSlNPTik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROb2RlLmlkbDog
QWRkZWQgdGhlIHNlcmlhbGl6ZXIgdGVzdC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVGVzdE9iai5pZGw6IEFkZGVkIHNlcmlhbGl6ZXIgbWFwIHRlc3QuCisKIDIwMTYtMDktMjgg
IE1pY2hhZWwgQ2F0YW56YXJvICA8bWNhdGFuemFyb0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFtH
VEtdIEFkZCB3YXJuaW5nIGNvbW1lbnQgaW4gVXNlckFnZW50R3RrLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaWRsIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaWRsCmlu
ZGV4IDA0MDc4M2Y3ZmEwZDY3YzU2YmI3MjBkMTVlYjIwYmYyNDMyNWI4ODguLjhjMmQ5YmU4NDQ4
NTA1NGMxNmI1MTkzMzQzY2FkYzc2NzcwMjlmNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmlkbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5pZGwKQEAgLTM5LDUgKzM5
LDcgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGNhbmRpZGF0ZTsKICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nPyBzZHBNaWQ7CiAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIHVuc2lnbmVkIHNob3J0PyBzZHBNTGluZUluZGV4OworCisgICAgc2VyaWFsaXplciA9IHtj
YW5kaWRhdGUsIHNkcE1pZCwgc2RwTUxpbmVJbmRleH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi5pZGwg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlv
bi5pZGwKaW5kZXggNDc1NWFkYTI1MzBlOGY2NWEyYTZlZWNkOWI3YjcwYTM5ZWVhNWExZS4uNzM1
MDkyYmM1MzA1OGZlY2ZjNzllZDY5NzFlNGQyOTk2YTE1NDVkYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24uaWRsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0
aW9uLmlkbApAQCAtMzgsNiArMzgsOCBAQAogXSBpbnRlcmZhY2UgUlRDU2Vzc2lvbkRlc2NyaXB0
aW9uIHsKICAgICBbU2V0dGVyUmFpc2VzRXhjZXB0aW9uXSByZWFkb25seSBhdHRyaWJ1dGUgUlRD
U2RwVHlwZSB0eXBlOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgc2RwOworCisg
ICAgc2VyaWFsaXplciA9IHt0eXBlLCBzZHB9OwogfTsKIAogZW51bSBSVENTZHBUeXBlIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0K
aW5kZXggZmViMTVkZWVmNDYzY2FkZGZhNzk4ZGUzMjJiZDQyY2QxMWY0OTUwMC4uM2M4ZmQwZGU1
ZWM2ZGI3ZmIyM2IwMzMyZDgzNDIyOGU4Y2UwN2NjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KQEAgLTY2NCw2ICs2NjQsNyBA
QCBzdWIgUHJvdG90eXBlRnVuY3Rpb25Db3VudAogICAgIH0KIAogICAgICRjb3VudCArPSBzY2Fs
YXIgQHskaW50ZXJmYWNlLT5pdGVyYWJsZS0+ZnVuY3Rpb25zfSBpZiAkaW50ZXJmYWNlLT5pdGVy
YWJsZTsKKyAgICAkY291bnQgKz0gc2NhbGFyIEB7JGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5m
dW5jdGlvbnN9IGlmICRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZTsKIAogICAgIHJldHVybiAkY291
bnQ7CiB9CkBAIC0xNjgwLDYgKzE2ODEsNyBAQCBzdWIgR2VuZXJhdGVQcm9wZXJ0aWVzSGFzaFRh
YmxlCiAKICAgICBteSBAZnVuY3Rpb25zID0gQHskaW50ZXJmYWNlLT5mdW5jdGlvbnN9OwogICAg
IHB1c2goQGZ1bmN0aW9ucywgQHskaW50ZXJmYWNlLT5pdGVyYWJsZS0+ZnVuY3Rpb25zfSkgaWYg
SXNLZXlWYWx1ZUl0ZXJhYmxlSW50ZXJmYWNlKCRpbnRlcmZhY2UpOworICAgIHB1c2goQGZ1bmN0
aW9ucywgQHskaW50ZXJmYWNlLT5zZXJpYWxpemFibGUtPmZ1bmN0aW9uc30pIGlmICRpbnRlcmZh
Y2UtPnNlcmlhbGl6YWJsZTsKICAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQGZ1bmN0aW9ucykg
ewogICAgICAgICBuZXh0IGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IlByaXZhdGVJZGVudGlmaWVyIn0gYW5kIG5vdCAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlB1YmxpY0lkZW50aWZpZXIifSk7CiAgICAgICAgIG5leHQg
aWYgKCRmdW5jdGlvbi0+aXNTdGF0aWMpOwpAQCAtMjMyMiw2ICsyMzI0LDcgQEAgc3ViIEdlbmVy
YXRlSW1wbGVtZW50YXRpb24KIAogICAgIG15IEBmdW5jdGlvbnMgPSBAeyRpbnRlcmZhY2UtPmZ1
bmN0aW9uc307CiAgICAgcHVzaChAZnVuY3Rpb25zLCBAeyRpbnRlcmZhY2UtPml0ZXJhYmxlLT5m
dW5jdGlvbnN9KSBpZiBJc0tleVZhbHVlSXRlcmFibGVJbnRlcmZhY2UoJGludGVyZmFjZSk7Cisg
ICAgcHVzaChAZnVuY3Rpb25zLCBAeyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+ZnVuY3Rpb25z
fSkgaWYgJGludGVyZmFjZS0+c2VyaWFsaXphYmxlOwogCiAgICAgbXkgJG51bUNvbnN0YW50cyA9
IEB7JGludGVyZmFjZS0+Y29uc3RhbnRzfTsKICAgICBteSAkbnVtRnVuY3Rpb25zID0gQGZ1bmN0
aW9uczsKQEAgLTM1MzMsOSArMzUzNiw5IEBAIEVORAogCiAgICAgfQogCi0gICAgaWYgKCRpbnRl
cmZhY2UtPml0ZXJhYmxlKSB7Ci0gICAgICAgIEdlbmVyYXRlSW1wbGVtZW50YXRpb25JdGVyYWJs
ZUZ1bmN0aW9ucygkaW50ZXJmYWNlKTsKLSAgICB9CisKKyAgICBHZW5lcmF0ZUltcGxlbWVudGF0
aW9uSXRlcmFibGVGdW5jdGlvbnMoJGludGVyZmFjZSkgaWYgJGludGVyZmFjZS0+aXRlcmFibGU7
CisgICAgR2VuZXJhdGVTZXJpYWxpemVyRnVuY3Rpb24oJGludGVyZmFjZSwgJGludGVyZmFjZU5h
bWUsICRjbGFzc05hbWUpIGlmICRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZTsKIAogICAgIGlmICgk
bmVlZHNWaXNpdENoaWxkcmVuKSB7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAidm9pZCAk
e2NsYXNzTmFtZX06OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcilcbiIpOwpAQCAtMzc1OCw2ICszNzYxLDM4IEBAIEVORAogICAgIHB1c2goQGltcGxDb250
ZW50LCAiXG4jZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25kaXRpb25h
bFN0cmluZzsKIH0KIAorc3ViIEdlbmVyYXRlU2VyaWFsaXplckZ1bmN0aW9uCit7CisgICAgbXkg
KCRpbnRlcmZhY2UsICRpbnRlcmZhY2VOYW1lLCAkY2xhc3NOYW1lKSA9IEBfOworICAgIG15ICRz
ZXJpYWxpemVyRnVuY3Rpb25OYW1lID0gInRvSlNPTiI7CisgICAgbXkgJHNlcmlhbGl6ZXJOYXRp
dmVGdW5jdGlvbk5hbWUgPSAkY29kZUdlbmVyYXRvci0+V0tfbGNmaXJzdCgkY2xhc3NOYW1lKSAu
ICJQcm90b3R5cGVGdW5jdGlvbiIgLiAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkc2VyaWFs
aXplckZ1bmN0aW9uTmFtZSk7CisKKyAgICBBZGRUb0ltcGxJbmNsdWRlcygiT2JqZWN0Q29uc3Ry
dWN0b3IuaCIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCAke3NlcmlhbGl6ZXJOYXRpdmVGdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogc3RhdGUp
XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOworICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIEFTU0VSVChzdGF0ZSk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBhdXRvIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTtcbiIpOworICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIGF1dG8gY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlMkaW50ZXJm
YWNlTmFtZSo+KHRoaXNWYWx1ZSk7XG4iKTsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBW
TSYgdm0gPSBzdGF0ZS0+dm0oKTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pO1xuIik7CisgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSl7XG4iKTsKKyAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3Rh
dGUsIHRocm93U2NvcGUsIFwiJGludGVyZmFjZU5hbWVcIiwgXCIkc2VyaWFsaXplckZ1bmN0aW9u
TmFtZVwiKTtcbiIpOworICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOworICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhp
cywgJHtjbGFzc05hbWV9OjppbmZvKCkpO1xuXG4iKSB1bmxlc3MgJGludGVyZmFjZU5hbWUgZXEg
IkV2ZW50VGFyZ2V0IjsKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiByZXN1bHQg
PSBjb25zdHJ1Y3RFbXB0eU9iamVjdChzdGF0ZSk7XG4iKTsKKyAgICBmb3JlYWNoIG15ICRhdHRy
aWJ1dGUgKEB7JGludGVyZmFjZS0+YXR0cmlidXRlc30pIHsKKyAgICAgICAgbXkgJG5hbWUgPSAk
YXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWU7CisgICAgICAgIGlmIChncmVwICRfIGVxICRuYW1l
LCBAeyRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZS0+YXR0cmlidXRlc30pIHsKKyAgICAgICAgICAg
IG15ICRnZXRGdW5jdGlvbk5hbWUgPSBHZXRBdHRyaWJ1dGVHZXR0ZXJOYW1lKCRpbnRlcmZhY2Us
ICRjbGFzc05hbWUsICRhdHRyaWJ1dGUpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgYXV0byAke25hbWV9VmFsdWUgPSAke2dldEZ1bmN0aW9uTmFtZX0oc3RhdGUsIEpTVmFs
dWU6OmVuY29kZSh0aGlzVmFsdWUpLCBJZGVudGlmaWVyKCkpO1xuIik7CisgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkpO1xu
Iik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXN1bHQtPnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIFwiJHtuYW1lfVwiKSwgSlNWYWx1ZTo6
ZGVjb2RlKCR7bmFtZX1WYWx1ZSkpO1xuIik7CisgICAgICAgIH0KKyAgICB9CisgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpO1xuIik7Cisg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOworfQorCiBzdWIgR2VuZXJhdGVGdW5jdGlv
bkNhc3RlZFRoaXMKIHsKICAgICBteSAoJGludGVyZmFjZSwgJGNsYXNzTmFtZSwgJGZ1bmN0aW9u
LCAkc2hvdWxkUmVqZWN0UHJvbWlzZSkgPSBAXzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9JRExQYXJzZXIucG0KaW5kZXggMGRjYzRjZTIwNjBmZWJmYTk2ZGJkMGY1NGNhMjg0
ODY1MmUyMGY1Mi4uNmYyMzk5YWNhZjllMWZjZGZiMTcyOTIyODZmODY4YzMxZGYxODFjNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0KKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0KQEAgLTYwLDYg
KzYwLDcgQEAgc3RydWN0KCBkb21JbnRlcmZhY2UgPT4gewogICAgIGlzQ2FsbGJhY2sgPT4gJyQn
LCAjIFVzZWQgZm9yIGNhbGxiYWNrIGludGVyZmFjZXMKICAgICBpc1BhcnRpYWwgPT4gJyQnLCAj
IFVzZWQgZm9yIHBhcnRpYWwgaW50ZXJmYWNlcwogICAgIGl0ZXJhYmxlID0+ICckJywgIyBVc2Vk
IGZvciBpdGVyYWJsZSBpbnRlcmZhY2VzCisgICAgc2VyaWFsaXphYmxlID0+ICckJywgIyBVc2Vk
IGZvciBzZXJpYWxpemFibGUgaW50ZXJmYWNlcwogfSk7CiAKICMgVXNlZCB0byByZXByZXNlbnQg
ZG9tSW50ZXJmYWNlIGNvbnRlbnRzIChuYW1lIG9mIG1ldGhvZCwgc2lnbmF0dXJlKQpAQCAtMTA3
LDYgKzEwOCwxMiBAQCBzdHJ1Y3QoIGRvbUl0ZXJhYmxlID0+IHsKICAgICBleHRlbmRlZEF0dHJp
YnV0ZXMgPT4gJyQnLCAjIEV4dGVuZGVkIGF0dHJpYnV0ZXMKIH0pOwogCisjIFVzZWQgdG8gcmVw
cmVzZW50IHNlcmlhbGl6YWJsZSBpbnRlcmZhY2UKK3N0cnVjdCggZG9tU2VyaWFsaXphYmxlID0+
IHsKKyAgICBhdHRyaWJ1dGVzID0+ICdAJywgIyBMaXN0IG9mIGF0dHJpYnV0ZXMgdG8gc2VyaWFs
aXplCisgICAgZnVuY3Rpb25zID0+ICdAJywgIyB0b0pTT04gZnVuY3Rpb24KK30pOworCiAjIFVz
ZWQgdG8gcmVwcmVzZW50IHN0cmluZyBjb25zdGFudHMKIHN0cnVjdCggZG9tQ29uc3RhbnQgPT4g
ewogICAgIG5hbWUgPT4gJyQnLCAgICAgICAgIyBET00gQ29uc3RhbnQgaWRlbnRpZmllcgpAQCAt
MTA1Niw3ICsxMDYzLDIzIEBAIHN1YiBwYXJzZVNlcmlhbGl6ZXIKICAgICBteSAkbmV4dCA9ICRz
ZWxmLT5uZXh0VG9rZW4oKTsKICAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgInNlcmlhbGl6ZXIi
KSB7CiAgICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigpLCAi
c2VyaWFsaXplciIsIF9fTElORV9fKTsKLSAgICAgICAgcmV0dXJuICRzZWxmLT5wYXJzZVNlcmlh
bGl6ZXJSZXN0KCRleHRlbmRlZEF0dHJpYnV0ZUxpc3QpOworICAgICAgICBteSAkbmV4dCA9ICRz
ZWxmLT5uZXh0VG9rZW4oKTsKKyAgICAgICAgbXkgJG5ld0RhdGFOb2RlOworICAgICAgICBpZiAo
JG5leHQtPnZhbHVlKCkgbmUgIjsiKSB7CisgICAgICAgICAgICAkbmV3RGF0YU5vZGUgPSAkc2Vs
Zi0+cGFyc2VTZXJpYWxpemVyUmVzdCgkZXh0ZW5kZWRBdHRyaWJ1dGVMaXN0KTsKKyAgICAgICAg
ICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tlbigpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgJG5ld0RhdGFOb2RlID0gZG9tU2VyaWFsaXphYmxlLT5uZXcoKTsKKyAgICAgICAg
fQorCisgICAgICAgIG15ICR0b0pTT05GdW5jdGlvbiA9IGRvbUZ1bmN0aW9uLT5uZXcoKTsKKyAg
ICAgICAgJHRvSlNPTkZ1bmN0aW9uLT5zaWduYXR1cmUoZG9tU2lnbmF0dXJlLT5uZXcoKSk7Cisg
ICAgICAgICR0b0pTT05GdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMoJGV4
dGVuZGVkQXR0cmlidXRlTGlzdCk7CisgICAgICAgICR0b0pTT05GdW5jdGlvbi0+c2lnbmF0dXJl
LT5uYW1lKCJ0b0pTT04iKTsKKyAgICAgICAgcHVzaChAeyRuZXdEYXRhTm9kZS0+ZnVuY3Rpb25z
fSwgJHRvSlNPTkZ1bmN0aW9uKTsKKworICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgk
c2VsZi0+Z2V0VG9rZW4oKSwgIjsiLCBfX0xJTkVfXyk7CisgICAgICAgIHJldHVybiAkbmV3RGF0
YU5vZGU7CiAgICAgfQogICAgICRzZWxmLT5hc3NlcnRVbmV4cGVjdGVkVG9rZW4oJG5leHQtPnZh
bHVlKCksIF9fTElORV9fKTsKIH0KQEAgLTEwNjksNyArMTA5MiwxMiBAQCBzdWIgcGFyc2VTZXJp
YWxpemVyUmVzdAogICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tlbigpOwogICAgIGlmICgk
bmV4dC0+dmFsdWUoKSBlcSAiPSIpIHsKICAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVmFsdWUo
JHNlbGYtPmdldFRva2VuKCksICI9IiwgX19MSU5FX18pOwotICAgICAgICByZXR1cm4gJHNlbGYt
PnBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm4oJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7CisgICAg
ICAgIG15ICRhdHRyaWJ1dGVzID0gJHNlbGYtPnBhcnNlU2VyaWFsaXphdGlvblBhdHRlcm4oKTsK
KworICAgICAgICBteSAkbmV3RGF0YU5vZGUgPSBkb21TZXJpYWxpemFibGUtPm5ldygpOworICAg
ICAgICAkbmV3RGF0YU5vZGUtPmF0dHJpYnV0ZXMoJGF0dHJpYnV0ZXMpOworCisgICAgICAgIHJl
dHVybiAkbmV3RGF0YU5vZGU7CiAgICAgfQogICAgIGlmICgkbmV4dC0+dHlwZSgpID09IElkZW50
aWZpZXJUb2tlbiB8fCAkbmV4dC0+dmFsdWUoKSBlcSAiKCIpIHsKICAgICAgICAgcmV0dXJuICRz
ZWxmLT5wYXJzZU9wZXJhdGlvblJlc3QoJGV4dGVuZGVkQXR0cmlidXRlTGlzdCk7CkBAIC0xMDc5
LDU5ICsxMTA3LDQ1IEBAIHN1YiBwYXJzZVNlcmlhbGl6ZXJSZXN0CiBzdWIgcGFyc2VTZXJpYWxp
emF0aW9uUGF0dGVybgogewogICAgIG15ICRzZWxmID0gc2hpZnQ7Ci0gICAgbXkgJGV4dGVuZGVk
QXR0cmlidXRlTGlzdCA9IHNoaWZ0OwogCiAgICAgbXkgJG5leHQgPSAkc2VsZi0+bmV4dFRva2Vu
KCk7CiAgICAgaWYgKCRuZXh0LT52YWx1ZSgpIGVxICJ7IikgewogICAgICAgICAkc2VsZi0+YXNz
ZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgInsiLCBfX0xJTkVfXyk7Ci0gICAgICAg
ICRzZWxmLT5wYXJzZVNlcmlhbGl6YXRpb25QYXR0ZXJuTWFwKCk7CisgICAgICAgIG15ICRhdHRy
aWJ1dGVzID0gJHNlbGYtPnBhcnNlU2VyaWFsaXphdGlvbkF0dHJpYnV0ZXMoKTsKICAgICAgICAg
JHNlbGYtPmFzc2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICJ9IiwgX19MSU5FX18p
OwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBcQHskYXR0cmlidXRlc307CiAgICAg
fQogICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAiWyIpIHsKLSAgICAgICAgJHNlbGYtPmFzc2Vy
dFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICJbIiwgX19MSU5FX18pOwotICAgICAgICAk
c2VsZi0+cGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybkxpc3QoKTsKLSAgICAgICAgJHNlbGYtPmFz
c2VydFRva2VuVmFsdWUoJHNlbGYtPmdldFRva2VuKCksICJdIiwgX19MSU5FX18pOwotICAgICAg
ICByZXR1cm47CisgICAgICAgIGRpZSAiU2VyaWFsaXphdGlvbiBvZiBsaXN0cyBwYXR0ZXJuIGlz
IG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLiI7CiAgICAgfQogICAgIGlmICgkbmV4dC0+dHlwZSgp
ID09IElkZW50aWZpZXJUb2tlbikgewotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5UeXBlKCRz
ZWxmLT5nZXRUb2tlbigpLCBJZGVudGlmaWVyVG9rZW4pOwotICAgICAgICByZXR1cm47CisgICAg
ICAgIG15IEBhdHRyaWJ1dGVzID0gKCk7CisgICAgICAgIG15ICR0b2tlbiA9ICRzZWxmLT5nZXRU
b2tlbigpOworICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5UeXBlKCR0b2tlbiwgSWRlbnRpZmll
clRva2VuKTsKKyAgICAgICAgcHVzaChAYXR0cmlidXRlcywgJHRva2VuLT52YWx1ZSgpKTsKKyAg
ICAgICAgcmV0dXJuIFxAYXR0cmlidXRlczsKICAgICB9CiAgICAgJHNlbGYtPmFzc2VydFVuZXhw
ZWN0ZWRUb2tlbigkbmV4dC0+dmFsdWUoKSwgX19MSU5FX18pOwogfQogCi1zdWIgcGFyc2VTZXJp
YWxpemF0aW9uUGF0dGVybk1hcAorc3ViIHBhcnNlU2VyaWFsaXphdGlvbkF0dHJpYnV0ZXMKIHsK
ICAgICBteSAkc2VsZiA9IHNoaWZ0OwotICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tlbigp
OwotICAgIGlmICgkbmV4dC0+dmFsdWUoKSBlcSAiZ2V0dGVyIikgewotICAgICAgICAkc2VsZi0+
YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+Z2V0VG9rZW4oKSwgImdldHRlciIsIF9fTElORV9fKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoJG5leHQtPnZhbHVlKCkgZXEgImluaGVy
aXQiKSB7Ci0gICAgICAgICRzZWxmLT5hc3NlcnRUb2tlblZhbHVlKCRzZWxmLT5nZXRUb2tlbigp
LCAiaW5oZXJpdCIsIF9fTElORV9fKTsKLSAgICAgICAgJHNlbGYtPnBhcnNlSWRlbnRpZmllcnMo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoJG5leHQtPnR5cGUoKSA9PSBJZGVu
dGlmaWVyVG9rZW4pIHsKLSAgICAgICAgJHNlbGYtPmFzc2VydFRva2VuVHlwZSgkc2VsZi0+Z2V0
VG9rZW4oKSwgSWRlbnRpZmllclRva2VuKTsKLSAgICAgICAgJHNlbGYtPnBhcnNlSWRlbnRpZmll
cnMoKTsKLSAgICB9Ci19CisgICAgbXkgJHRva2VuID0gJHNlbGYtPmdldFRva2VuKCk7CisKKyAg
ICBpZiAoJHRva2VuLT52YWx1ZSgpIGVxICJnZXR0ZXIiKSB7CisgICAgICAgIGRpZSAiU2VyaWFs
aXplciBnZXR0ZXIga2V5d29yZCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4iOwogCi1zdWIg
cGFyc2VTZXJpYWxpemF0aW9uUGF0dGVybkxpc3QKLXsKLSAgICBteSAkc2VsZiA9IHNoaWZ0Owot
ICAgIG15ICRuZXh0ID0gJHNlbGYtPm5leHRUb2tlbigpOwotICAgIGlmICgkbmV4dC0+dmFsdWUo
KSBlcSAiZ2V0dGVyIikgewotICAgICAgICAkc2VsZi0+YXNzZXJ0VG9rZW5WYWx1ZSgkc2VsZi0+
Z2V0VG9rZW4oKSwgImdldHRlciIsIF9fTElORV9fKTsKLSAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBpZiAoJG5leHQtPnR5cGUoKSA9PSBJZGVudGlmaWVyVG9rZW4pIHsKLSAgICAgICAgJHNl
bGYtPmFzc2VydFRva2VuVHlwZSgkc2VsZi0+Z2V0VG9rZW4oKSwgSWRlbnRpZmllclRva2VuKTsK
LSAgICAgICAgJHNlbGYtPnBhcnNlSWRlbnRpZmllcnMoKTsKKyAgICBpZiAoJHRva2VuLT52YWx1
ZSgpIGVxICJpbmhlcml0IikgeworICAgICAgICBkaWUgIlNlcmlhbGl6ZXIgaW5oZXJpdCBrZXl3
b3JkIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLiI7CiAgICAgfQorCisgICAgbXkgQGF0dHJp
YnV0ZXMgPSAoKTsKKyAgICAkc2VsZi0+YXNzZXJ0VG9rZW5UeXBlKCR0b2tlbiwgSWRlbnRpZmll
clRva2VuKTsKKyAgICBwdXNoKEBhdHRyaWJ1dGVzLCAkdG9rZW4tPnZhbHVlKCkpOworICAgIHB1
c2goQGF0dHJpYnV0ZXMsIEB7JHNlbGYtPnBhcnNlSWRlbnRpZmllcnMoKX0pOworICAgIHJldHVy
biBcQGF0dHJpYnV0ZXM7CiB9CiAKIHN1YiBwYXJzZUlkZW50aWZpZXJMaXN0CkBAIC0yMjY3LDYg
KzIyODEsMTkgQEAgc3ViIGFwcGx5TWVtYmVyTGlzdAogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgbmV4dDsKICAgICAgICAgfQorICAgICAgICBpZiAocmVmKCRpdGVtKSBlcSAiZG9tU2VyaWFs
aXphYmxlIikgeworICAgICAgICAgICAgJGludGVyZmFjZS0+c2VyaWFsaXphYmxlKCRpdGVtKTsK
KyAgICAgICAgICAgIG5leHQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoJGludGVyZmFj
ZS0+c2VyaWFsaXphYmxlKSB7CisgICAgICAgIG15ICRudW1TZXJpYWxpemVyQXR0cmlidXRlcyA9
IEB7JGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5hdHRyaWJ1dGVzfTsKKyAgICAgICAgaWYgKCRu
dW1TZXJpYWxpemVyQXR0cmlidXRlcyA9PSAwKSB7CisgICAgICAgICAgICBmb3JlYWNoIG15ICRh
dHRyaWJ1dGUgKEB7JGludGVyZmFjZS0+YXR0cmlidXRlc30pIHsKKyAgICAgICAgICAgICAgICBw
dXNoKEB7JGludGVyZmFjZS0+c2VyaWFsaXphYmxlLT5hdHRyaWJ1dGVzfSwgJGF0dHJpYnV0ZS0+
c2lnbmF0dXJlLT5uYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5vZGUuY3BwCmluZGV4IDBiYjdiYTVkMDYxNjA2N2U1ZmI4MmZhNjU1ZjhjZjUxOGIwOTc5NTEu
LjhjNDZjODgwZDAwZDU0MDAxZmFjMzFlYWI4MjdlMTJiN2MwZmRkZmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAK
QEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVk
ZSAiSlNET01JdGVyYXRvci5oIgogI2luY2x1ZGUgIkpTRE9NUHJvbWlzZS5oIgorI2luY2x1ZGUg
Ik9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5o
IgogI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KQEAgLTQ0LDYg
KzQ1LDcgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90
b3R5cGVGdW5jdGlvbkVudHJpZXMoSlNDOjpFeGVjU3QKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25LZXlzKEpTQzo6RXhlY1N0YXRl
Kik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlw
ZUZ1bmN0aW9uVmFsdWVzKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0Tm9kZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaChKU0M6OkV4ZWNT
dGF0ZSopOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90
b3R5cGVGdW5jdGlvblRvSlNPTihKU0M6OkV4ZWNTdGF0ZSopOwogCiAvLyBBdHRyaWJ1dGVzCiAK
QEAgLTExNSw2ICsxMTcsNyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0Tm9k
ZVByb3RvdHlwZVRhYmxlVmFsdWVzW10gPQogICAgIHsgImtleXMiLCBKU0M6OkZ1bmN0aW9uLCBO
b0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVz
dE5vZGVQcm90b3R5cGVGdW5jdGlvbktleXMpLCAoaW50cHRyX3QpICgwKSB9IH0sCiAgICAgeyAi
dmFsdWVzIiwgSlNDOjpGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19j
YXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25WYWx1ZXMpLCAo
aW50cHRyX3QpICgwKSB9IH0sCiAgICAgeyAiZm9yRWFjaCIsIEpTQzo6RnVuY3Rpb24sIE5vSW50
cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0Tm9k
ZVByb3RvdHlwZUZ1bmN0aW9uRm9yRWFjaCksIChpbnRwdHJfdCkgKDEpIH0gfSwKKyAgICB7ICJ0
b0pTT04iLCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nh
c3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE5vZGVQcm90b3R5cGVGdW5jdGlvblRvSlNPTiksIChp
bnRwdHJfdCkgKDApIH0gfSwKIH07CiAKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3ROb2RlUHJvdG90
eXBlOjpzX2luZm8gPSB7ICJUZXN0Tm9kZVByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIDAsIENS
RUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0Tm9kZVByb3RvdHlwZSkgfTsKQEAgLTI4Nyw2ICsyOTAs
MjUgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5vZGVQcm90b3R5
cGVGdW5jdGlvbkZvckVhY2goSlNDOjpFeGVjU3QKICAgICByZXR1cm4gaXRlcmF0b3JGb3JFYWNo
PEpTVGVzdE5vZGU+KCpzdGF0ZSwgImZvckVhY2giKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3ROb2RlUHJvdG90eXBlRnVuY3Rpb25Ub0pTT04oRXhlY1N0YXRlKiBz
dGF0ZSkKK3sKKyAgICBBU1NFUlQoc3RhdGUpOworICAgIGF1dG8gdGhpc1ZhbHVlID0gc3RhdGUt
PnRoaXNWYWx1ZSgpOworICAgIGF1dG8gY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
Tm9kZSo+KHRoaXNWYWx1ZSk7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSl7CisgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCB0
aHJvd1Njb3BlLCAiVGVzdE5vZGUiLCAidG9KU09OIik7CisgICAgfQorICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0Tm9kZTo6aW5mbygpKTsKKworICAgIGF1
dG8qIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KHN0YXRlKTsKKyAgICBhdXRvIG5hbWVW
YWx1ZSA9IGpzVGVzdE5vZGVOYW1lKHN0YXRlLCBKU1ZhbHVlOjplbmNvZGUodGhpc1ZhbHVlKSwg
SWRlbnRpZmllcigpKTsKKyAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOworICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm5hbWUi
KSwgSlNWYWx1ZTo6ZGVjb2RlKG5hbWVWYWx1ZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKK30KKwogdm9pZCBKU1Rlc3ROb2RlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1Rlc3ROb2RlKj4oY2VsbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCmluZGV4IDA3NzE4MTYxM2M2ODkxZjBj
ZDM4NTBjMDM3OWIyZTdhZTZlMTc0YWEuLjM0OTlmMmQ1ZDNlOTlhNTdmNmZlMmJlODliNTAyMGI1
MTc0YzU0NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouY3BwCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiSlNUZXN0
T2JqLmgiCiAjaW5jbHVkZSAiSlNUZXN0U3ViT2JqLmgiCiAjaW5jbHVkZSAiSlNYUGF0aE5TUmVz
b2x2ZXIuaCIKKyNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlJ1bnRp
bWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTVkdEb2N1bWVudC5oIgogI2luY2x1ZGUg
IlNWR1BvaW50LmgiCkBAIC03ODIsNiArNzgzLDcgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxPdmVybG9hZCgK
IEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvblNpbmdsZUNvbmRpdGlvbmFsT3ZlcmxvYWQoSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkF0dGFj
aFNoYWRvd1Jvb3QoSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRvU3RyaW5nKEpTQzo6RXhlY1N0YXRl
Kik7CitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25Ub0pTT04oSlNDOjpFeGVjU3RhdGUqKTsKIAogLy8gQXR0cmlidXRlcwogCkBAIC0x
Mzg3LDYgKzEzODksNyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJv
dG90eXBlVGFibGVWYWx1ZXNbXSA9CiAgICAgeyAic2luZ2xlQ29uZGl0aW9uYWxPdmVybG9hZCIs
IEpTQzo6RnVuY3Rpb24sIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRp
dmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TaW5nbGVDb25kaXRpb25hbE92
ZXJsb2FkKSwgKGludHB0cl90KSAoMSkgfSB9LAogICAgIHsgImF0dGFjaFNoYWRvd1Jvb3QiLCBK
U0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZl
RnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQXR0YWNoU2hhZG93Um9vdCksIChp
bnRwdHJfdCkgKDEpIH0gfSwKICAgICB7ICJ0b1N0cmluZyIsIEpTQzo6RnVuY3Rpb24sIE5vSW50
cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25Ub1N0cmluZyksIChpbnRwdHJfdCkgKDApIH0gfSwKKyAgICB7ICJ0
b0pTT04iLCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nh
c3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9KU09OKSwgKGlu
dHB0cl90KSAoMCkgfSB9LAogI2lmIEVOQUJMRShDb25kaXRpb24xKQogICAgIHsgIkNPTkRJVElP
TkFMX0NPTlNUIiwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgQ29uc3RhbnRJbnRlZ2VyLCBOb0lu
dHJpbnNpYywgeyAobG9uZyBsb25nKSgwKSB9IH0sCiAjZWxzZQpAQCAtNzM3NSw2ICs3Mzc4LDM0
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25Ub1N0cmluZyhFeGVjU3RhdGUqIHN0YXRlCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOwogfQogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uVG9KU09OKEV4ZWNTdGF0ZSogc3RhdGUpCit7CisgICAgQVNTRVJUKHN0YXRl
KTsKKyAgICBhdXRvIHRoaXNWYWx1ZSA9IHN0YXRlLT50aGlzVmFsdWUoKTsKKyAgICBhdXRvIGNh
c3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KHRoaXNWYWx1ZSk7CisgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSl7CisgICAgICAgIHJldHVy
biB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9iaiIsICJ0b0pT
T04iKTsKKyAgICB9CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBK
U1Rlc3RPYmo6OmluZm8oKSk7CisKKyAgICBhdXRvKiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9i
amVjdChzdGF0ZSk7CisgICAgYXV0byByZWFkT25seVN0cmluZ0F0dHJWYWx1ZSA9IGpzVGVzdE9i
alJlYWRPbmx5U3RyaW5nQXR0cihzdGF0ZSwgSlNWYWx1ZTo6ZW5jb2RlKHRoaXNWYWx1ZSksIElk
ZW50aWZpZXIoKSk7CisgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKKyAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJyZWFkT25s
eVN0cmluZ0F0dHIiKSwgSlNWYWx1ZTo6ZGVjb2RlKHJlYWRPbmx5U3RyaW5nQXR0clZhbHVlKSk7
CisgICAgYXV0byBlbnVtQXR0clZhbHVlID0ganNUZXN0T2JqRW51bUF0dHIoc3RhdGUsIEpTVmFs
dWU6OmVuY29kZSh0aGlzVmFsdWUpLCBJZGVudGlmaWVyKCkpOworICAgIEFTU0VSVCghdGhyb3dT
Y29wZS5leGNlcHRpb24oKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCAiZW51bUF0dHIiKSwgSlNWYWx1ZTo6ZGVjb2RlKGVudW1BdHRyVmFs
dWUpKTsKKyAgICBhdXRvIGxvbmdBdHRyVmFsdWUgPSBqc1Rlc3RPYmpMb25nQXR0cihzdGF0ZSwg
SlNWYWx1ZTo6ZW5jb2RlKHRoaXNWYWx1ZSksIElkZW50aWZpZXIoKSk7CisgICAgQVNTRVJUKCF0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKKyAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmdm0sICJsb25nQXR0ciIpLCBKU1ZhbHVlOjpkZWNvZGUobG9uZ0F0
dHJWYWx1ZSkpOworICAgIGF1dG8gY3JlYXRlVmFsdWUgPSBqc1Rlc3RPYmpDcmVhdGUoc3RhdGUs
IEpTVmFsdWU6OmVuY29kZSh0aGlzVmFsdWUpLCBJZGVudGlmaWVyKCkpOworICAgIEFTU0VSVCgh
dGhyb3dTY29wZS5leGNlcHRpb24oKSk7CisgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY3JlYXRlIiksIEpTVmFsdWU6OmRlY29kZShjcmVhdGVW
YWx1ZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKwogdm9pZCBK
U1Rlc3RPYmo6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE9iaio+KGNlbGwpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROb2Rl
LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Tm9kZS5pZGwK
aW5kZXggNDRmOGNhODI3M2U3OGZmMWQ1M2ExZjllYzVmMWZlNTNlYjk2OGJkZS4uOWQyYTA3OGVi
ZmJlNDcyYTExODQ5NjdlMDAxYjkwZWM4MWI4YWE5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROb2RlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5vZGUuaWRsCkBAIC0yNyw0ICsyNyw2IEBACiAK
ICAgICBbRW5hYmxlZEF0UnVudGltZT1ET01JdGVyYXRvcl0gaXRlcmFibGU8VGVzdE5vZGU+Owog
ICAgIFByb21pc2UgdGVzdFdvcmtlclByb21pc2UoKTsKKworICAgIHNlcmlhbGl6ZXI7CiB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmou
aWRsIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCmlu
ZGV4IDIxMGQ1NWY4YTBiNWQ3ZDhkZmVmZWI2MGE0YmM5M2RmZWMyYmU0Y2YuLjRlYjA3MmEwMmMx
NGIzYmE1Y2VlZDQ2YTNjNGQ5MjZjZjQ3MTMxYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKQEAgLTQxMCw2ICs0MTAsOSBAQCBlbnVt
IFRlc3RDb25maWRlbmNlIHsgImhpZ2giLCAia2luZGEtbG93IiB9OwogICAgIHZvaWQgYXR0YWNo
U2hhZG93Um9vdChUZXN0RGljdGlvbmFyeSBpbml0KTsKIAogICAgIHN0cmluZ2lmaWVyIGF0dHJp
YnV0ZSBVU1ZTdHJpbmcgc3RyaW5naWZpZXJBdHRyaWJ1dGU7CisKKworICAgIHNlcmlhbGl6ZXIg
PSB7cmVhZE9ubHlTdHJpbmdBdHRyLCBjcmVhdGUsIGVudW1BdHRyLCBsb25nQXR0cn07CiB9Owog
CiAvLyBUaGUgZm9sbG93aW5nIGNvbW1lbnQgc2hvdWxkIG5vdCBnZW5lcmF0ZSBhbnkgY29kZS4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAzMTgwYzE2OTY3YmZlNzRkMzQwYTM4ZjliMGI0MDI2MmY2Y2MzMTFlLi5hNmIzMWMx
ZTc1Y2I2NTA4NzQ1MjQ3ZmE4ODEyYmVkZDUxOGZjNTFjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAK
KzIwMTYtMDktMjggIEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+CisKKyAg
ICAgICAgQWRkIFdlYklETCBzcGVjaWFsIG9wZXJhdGlvbiBzdXBwb3J0OiBzZXJpYWxpemVyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTYyOTMKKwor
ICAgICAgICBSZXZpZXdlZCBieSBZb3Vlbm4gRmFibGV0LgorCisgICAgICAgIFZlcmlmeSB0aGUg
bmV3IEFQSSBvZiB0aGUgb2JqZWN0cyBhbmQgY2hlY2sgd2hhdCBoYXBwZW5zIHdoZW4gdXNlcgor
ICAgICAgICBtb2RpZmllcyB0aGUgdmFsdWVzIGFuZCB0eXBlcyBvZiB0aGUgYXR0cmlidXRlcywg
b3IgYWRkcyBhIG51bGwgdmFsdWUuCisKKyAgICAgICAgKiBmYXN0L21lZGlhc3RyZWFtL1JUQ0lj
ZUNhbmRpZGF0ZS1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9tZWRpYXN0cmVhbS9SVENJ
Y2VDYW5kaWRhdGUuaHRtbDoKKyAgICAgICAgKiBmYXN0L21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25E
ZXNjcmlwdGlvbi1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9tZWRpYXN0cmVhbS9SVENT
ZXNzaW9uRGVzY3JpcHRpb24uaHRtbDoKKwogMjAxNi0wOS0yNyAgTmFuIFdhbmcgIDxuX3dhbmdA
YXBwbGUuY29tPgogCiAgICAgICAgIEFYOiBDcmFzaFRyYWNlcjogY29tLmFwcGxlLldlYktpdC5X
ZWJDb250ZW50IGF0IFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmxvY2FsQ2FyZXRSZWN0Rm9yQ2hh
cmFjdGVyT2Zmc2V0KFdlYkNvcmU6OlJlbmRlck9iamVjdComLCBXZWJDb3JlOjpDaGFyYWN0ZXJP
ZmZzZXQgY29uc3QmKSArIDExNgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0
cmVhbS9SVENJY2VDYW5kaWRhdGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRp
YXN0cmVhbS9SVENJY2VDYW5kaWRhdGUtZXhwZWN0ZWQudHh0CmluZGV4IDNjOTAyOTgzNjU5Y2M3
ZWUzODFmYTUxZDhjNDYyNWE0M2IzMDdmNDUuLmEyZGM3MWFmYmIwYmYwZmI3MmE1YTMxZWU4MWFh
ZmU1MmMzYmEzODUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRD
SWNlQ2FuZGlkYXRlLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3Ry
ZWFtL1JUQ0ljZUNhbmRpZGF0ZS1leHBlY3RlZC50eHQKQEAgLTcsNiArNywyMSBAQCBQQVNTIGNh
bmRpZGF0ZSA9IG5ldyBSVENJY2VDYW5kaWRhdGUoaW5pdGlhbGl6ZXIpOyBkaWQgbm90IHRocm93
IGV4Y2VwdGlvbi4KIFBBU1MgY2FuZGlkYXRlLmNhbmRpZGF0ZSBpcyAiZm9vIgogUEFTUyBjYW5k
aWRhdGUuc2RwTWlkIGlzICJiYXIiCiBQQVNTIGNhbmRpZGF0ZS5zZHBNTGluZUluZGV4IGlzIDYK
K1BBU1MgUlRDSWNlQ2FuZGlkYXRlLnByb3RvdHlwZS50b0pTT04gaXMgZGVmaW5lZC4KK1BBU1Mg
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihSVENJY2VDYW5kaWRhdGUucHJvdG90eXBl
LCAidG9KU09OIikuZW51bWVyYWJsZSBpcyB0cnVlCitQQVNTIE9iamVjdC5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoUlRDSWNlQ2FuZGlkYXRlLnByb3RvdHlwZSwgInRvSlNPTiIpLndyaXRhYmxl
IGlzIHRydWUKK1BBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihSVENJY2VDYW5k
aWRhdGUucHJvdG90eXBlLCAidG9KU09OIikuY29uZmlndXJhYmxlIGlzIHRydWUKK1BBU1MgUlRD
SWNlQ2FuZGlkYXRlLnByb3RvdHlwZS50b0pTT04ubGVuZ3RoIGlzIDAKK1BBU1MgUlRDSWNlQ2Fu
ZGlkYXRlLnByb3RvdHlwZS50b0pTT04ubmFtZSBpcyAidG9KU09OIgorUEFTUyBPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKGpzb25NYXAsICJjYW5kaWRhdGUiKS5lbnVtZXJhYmxlIGlz
IHRydWUKK1BBU1MgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihqc29uTWFwLCAiY2Fu
ZGlkYXRlIikud3JpdGFibGUgaXMgdHJ1ZQorUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKGpzb25NYXAsICJjYW5kaWRhdGUiKS5jb25maWd1cmFibGUgaXMgdHJ1ZQorUEFTUyBj
aGlsZENhbmRpZGF0ZS50b0pTT04oKTsgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogQ2FuIG9u
bHkgY2FsbCBSVENJY2VDYW5kaWRhdGUudG9KU09OIG9uIGluc3RhbmNlcyBvZiBSVENJY2VDYW5k
aWRhdGUuCitQQVNTIEpTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSkgaXMgIntcImNh
bmRpZGF0ZVwiOlwiZm9vXCIsXCJzZHBNaWRcIjpcImJhclwiLFwic2RwTUxpbmVJbmRleFwiOjZ9
IgorUEFTUyBKU09OLnN0cmluZ2lmeShjYW5kaWRhdGUudG9KU09OKCkpIGlzICJ7XCJjYW5kaWRh
dGVcIjpcImZvb1wiLFwic2RwTWlkXCI6XCJiYXJcIixcInNkcE1MaW5lSW5kZXhcIjo2fSIKK1BB
U1MgSlNPTi5zdHJpbmdpZnkoY2FuZGlkYXRlLnRvSlNPTigpKSBpcyAie1wiY2FuZGlkYXRlXCI6
XCJmb29cIixcInNkcE1pZFwiOlwiYmFyXCIsXCJzZHBNTGluZUluZGV4XCI6Nn0iCitQQVNTIEpT
T04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSkgaXMgIntcImNhbmRpZGF0ZVwiOlwiZm9v
XCIsXCJzZHBNaWRcIjpcImJhclwiLFwic2RwTUxpbmVJbmRleFwiOjZ9IgorUEFTUyBKU09OLnN0
cmluZ2lmeShjYW5kaWRhdGUudG9KU09OKCkpIGlzICJ7XCJjYW5kaWRhdGVcIjpcImZvb1wiLFwi
c2RwTWlkXCI6XCJiYXJcIixcInNkcE1MaW5lSW5kZXhcIjo2fSIKIAogQXR0cmlidXRlcyBhcmUg
cmVhZG9ubHkKIGNhbmRpZGF0ZS5jYW5kaWRhdGUgPSAiZm9vLXVwZGF0ZWQiCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5odG1sIGIvTGF5
b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENJY2VDYW5kaWRhdGUuaHRtbAppbmRleCBjNDAz
MTU2NTU2OWUyMzhiNmM0YzVhODlmOGE5YjEwNzkyNGEzN2FmLi41M2Y0OWNiNzJmMDkxYTQxM2U2
NzU2OWI3YzMxMzczMzZjNzBkOGM2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlh
c3RyZWFtL1JUQ0ljZUNhbmRpZGF0ZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFz
dHJlYW0vUlRDSWNlQ2FuZGlkYXRlLmh0bWwKQEAgLTEzLDYgKzEzLDMzIEBACiAgICAgICAgICAg
ICBzaG91bGRCZSgnY2FuZGlkYXRlLmNhbmRpZGF0ZScsICciZm9vIicpOwogICAgICAgICAgICAg
c2hvdWxkQmUoJ2NhbmRpZGF0ZS5zZHBNaWQnLCAnImJhciInKTsKICAgICAgICAgICAgIHNob3Vs
ZEJlKCdjYW5kaWRhdGUuc2RwTUxpbmVJbmRleCcsICc2Jyk7CisgICAgICAgICAgICBzaG91bGRC
ZURlZmluZWQoJ1JUQ0ljZUNhbmRpZGF0ZS5wcm90b3R5cGUudG9KU09OJyk7CisgICAgICAgICAg
ICBzaG91bGRCZVRydWUoJ09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUlRDSWNlQ2Fu
ZGlkYXRlLnByb3RvdHlwZSwgInRvSlNPTiIpLmVudW1lcmFibGUnKTsKKyAgICAgICAgICAgIHNo
b3VsZEJlVHJ1ZSgnT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihSVENJY2VDYW5kaWRh
dGUucHJvdG90eXBlLCAidG9KU09OIikud3JpdGFibGUnKTsKKyAgICAgICAgICAgIHNob3VsZEJl
VHJ1ZSgnT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihSVENJY2VDYW5kaWRhdGUucHJv
dG90eXBlLCAidG9KU09OIikuY29uZmlndXJhYmxlJyk7CisgICAgICAgICAgICBzaG91bGRCZSgn
UlRDSWNlQ2FuZGlkYXRlLnByb3RvdHlwZS50b0pTT04ubGVuZ3RoJywgJzAnKTsKKyAgICAgICAg
ICAgIHNob3VsZEJlKCdSVENJY2VDYW5kaWRhdGUucHJvdG90eXBlLnRvSlNPTi5uYW1lJywgJyJ0
b0pTT04iJyk7CisKKyAgICAgICAgICAgIHZhciBqc29uTWFwID0gY2FuZGlkYXRlLnRvSlNPTigp
OworICAgICAgICAgICAgc2hvdWxkQmVUcnVlKCdPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKGpzb25NYXAsICJjYW5kaWRhdGUiKS5lbnVtZXJhYmxlJyk7CisgICAgICAgICAgICBzaG91
bGRCZVRydWUoJ09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoanNvbk1hcCwgImNhbmRp
ZGF0ZSIpLndyaXRhYmxlJyk7CisgICAgICAgICAgICBzaG91bGRCZVRydWUoJ09iamVjdC5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoanNvbk1hcCwgImNhbmRpZGF0ZSIpLmNvbmZpZ3VyYWJsZScp
OworCisgICAgICAgICAgICB2YXIgY2hpbGRSVENJY2VDYW5kaWRhdGUgPSBmdW5jdGlvbigpIHt9
OworICAgICAgICAgICAgY2hpbGRSVENJY2VDYW5kaWRhdGUucHJvdG90eXBlID0gT2JqZWN0LmNy
ZWF0ZShSVENJY2VDYW5kaWRhdGUucHJvdG90eXBlKTsKKyAgICAgICAgICAgIHZhciBjaGlsZENh
bmRpZGF0ZSA9IG5ldyBjaGlsZFJUQ0ljZUNhbmRpZGF0ZSgpOworICAgICAgICAgICAgc2hvdWxk
VGhyb3coJ2NoaWxkQ2FuZGlkYXRlLnRvSlNPTigpOycpOworCisgICAgICAgICAgICBzaG91bGRC
ZUVxdWFsVG9TdHJpbmcoJ0pTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50b0pTT04oKSknLCAneyJj
YW5kaWRhdGUiOiJmb28iLCJzZHBNaWQiOiJiYXIiLCJzZHBNTGluZUluZGV4Ijo2fScpOworICAg
ICAgICAgICAgY2FuZGlkYXRlLm5ld0F0dHJpYnV0ZSA9ICJuZXcgdmFsdWUiOworICAgICAgICAg
ICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdKU09OLnN0cmluZ2lmeShjYW5kaWRhdGUudG9KU09O
KCkpJywgJ3siY2FuZGlkYXRlIjoiZm9vIiwic2RwTWlkIjoiYmFyIiwic2RwTUxpbmVJbmRleCI6
Nn0nKTsKKyAgICAgICAgICAgIGNhbmRpZGF0ZS5zZHBNTGluZUluZGV4ID0gIm5vdCBhIG51bWJl
ciI7CisgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ0pTT04uc3RyaW5naWZ5KGNh
bmRpZGF0ZS50b0pTT04oKSknLCAneyJjYW5kaWRhdGUiOiJmb28iLCJzZHBNaWQiOiJiYXIiLCJz
ZHBNTGluZUluZGV4Ijo2fScpOworICAgICAgICAgICAgY2FuZGlkYXRlLnNkcE1pZCA9IDc7Cisg
ICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ0pTT04uc3RyaW5naWZ5KGNhbmRpZGF0
ZS50b0pTT04oKSknLCAneyJjYW5kaWRhdGUiOiJmb28iLCJzZHBNaWQiOiJiYXIiLCJzZHBNTGlu
ZUluZGV4Ijo2fScpOworICAgICAgICAgICAgY2FuZGlkYXRlLnNkcE1pZCA9IG51bGw7CisgICAg
ICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ0pTT04uc3RyaW5naWZ5KGNhbmRpZGF0ZS50
b0pTT04oKSknLCAneyJjYW5kaWRhdGUiOiJmb28iLCJzZHBNaWQiOiJiYXIiLCJzZHBNTGluZUlu
ZGV4Ijo2fScpOworCiAgICAgICAgICAgICBkZWJ1ZygiIik7CiAKICAgICAgICAgICAgIGRlYnVn
KCJBdHRyaWJ1dGVzIGFyZSByZWFkb25seSIpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0
CmluZGV4IDgxYWUwMWE3ZjdmOWQ4MDM5OTU5OTk5M2Y4MzZhMmQ5NjE1MjNiYjEuLjU5ZDNiY2Qx
NzUwOWIyN2RlODRkZjI4OGQ5M2NjYjI2ZGQ0NDNkNzAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2Zhc3QvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNjcmlwdGlvbi1leHBl
Y3RlZC50eHQKQEAgLTYsNiArNiw3IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFCiBQQVNTIHNl
c3Npb25EZXNjcmlwdGlvbiA9IG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24oaW5pdGlhbGl6ZXIp
OyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KIFBBU1Mgc2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUg
aXMgIm9mZmVyIgogUEFTUyBzZXNzaW9uRGVzY3JpcHRpb24uc2RwIGlzICJmb29iYXIiCitQQVNT
IEpTT04uc3RyaW5naWZ5KHNlc3Npb25EZXNjcmlwdGlvbi50b0pTT04oKSkgaXMgIntcInR5cGVc
IjpcIm9mZmVyXCIsXCJzZHBcIjpcImZvb2JhclwifSIKICoqKiBBdHRyaWJ1dGVzIGFyZSByZWFk
LW9ubHkuCiBQQVNTIHNlc3Npb25EZXNjcmlwdGlvbi50eXBlID0gJ2Fuc3dlcicgZGlkIG5vdCB0
aHJvdyBleGNlcHRpb24uCiBQQVNTIHNlc3Npb25EZXNjcmlwdGlvbi50eXBlIGlzICdvZmZlcicK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2Ny
aXB0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1Nlc3Npb25EZXNj
cmlwdGlvbi5odG1sCmluZGV4IDhhMmU5MzNkMWM0YmQxZGQ0ZjNkZWIwMjdiZGU3YjA5OWYxMDdh
YjEuLjgzNDNlYjgyOGM2YjgwZTYzMTU5MDIwM2YyNDc1MDE5OWM2ZGU4YjcgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmh0bWwK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENTZXNzaW9uRGVzY3JpcHRpb24u
aHRtbApAQCAtMTQsNiArMTQsNyBAQAogICAgICAgICAgICAgc2hvdWxkTm90VGhyb3coInNlc3Np
b25EZXNjcmlwdGlvbiA9IG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24oaW5pdGlhbGl6ZXIpOyIp
OwogICAgICAgICAgICAgc2hvdWxkQmUoJ3Nlc3Npb25EZXNjcmlwdGlvbi50eXBlJywgJyJvZmZl
ciInKTsKICAgICAgICAgICAgIHNob3VsZEJlKCdzZXNzaW9uRGVzY3JpcHRpb24uc2RwJywgJyJm
b29iYXIiJyk7CisgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoJ0pTT04uc3RyaW5n
aWZ5KHNlc3Npb25EZXNjcmlwdGlvbi50b0pTT04oKSknLCAneyJ0eXBlIjoib2ZmZXIiLCJzZHAi
OiJmb29iYXIifScpOwogCiAgICAgICAgICAgICBkZWJ1ZygiKioqIEF0dHJpYnV0ZXMgYXJlIHJl
YWQtb25seS4iKTsKICAgICAgICAgICAgIHNob3VsZE5vdFRocm93KCJzZXNzaW9uRGVzY3JpcHRp
b24udHlwZSA9ICdhbnN3ZXInIik7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>