<?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>172687</bug_id>
          
          <creation_ts>2017-05-28 17:36:23 -0700</creation_ts>
          <short_desc>Can&apos;t use Object.defineProperty() to add an item to a DOMStringMap or Storage</short_desc>
          <delta_ts>2020-11-23 11:31:59 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Bindings</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=218849</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>ashvayka</cc>
    
    <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1313508</commentid>
    <comment_count>0</comment_count>
      <attachid>311447</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-05-28 17:36:23 -0700</bug_when>
    <thetext>Created attachment 311447
Test case

Using Object.defineProperty() to add a item to a DOMStringMap does not seem to work. Given an dataset create like so:

    let element = document.createElement(&quot;div&quot;);
    element.dataset[&quot;a&quot;] = &quot;1&quot;;
    element.dataset[&quot;b&quot;] = &quot;2&quot;;

If you try to add an additional item like so:

    Object.defineProperty(element.dataset, &quot;key&quot;, {
        value: &apos;value&apos;
    });

The element remains unchanged (This is shown in the test case by printing out element.outerHTML).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1313509</commentid>
    <comment_count>1</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-05-28 17:41:46 -0700</bug_when>
    <thetext>I believe what we need to do is override the &apos;defineOwnProperty&apos; static function, in addition to &apos;put&apos; and &apos;putByIndex&apos;.

I&apos;d be interested in going over all the overrides we do at some point, as I am not 100% what the ramifications of not overriding some (specifically getOwnNonIndexPropertyNames, getPropertyNames, getEnumerableLength, getStructurePropertyNames, getGenericPropertyNames, preventExtensions, and isExtensible) are with respect to the WebIDL specification of &apos;legacy platform objects&apos; (https://heycam.github.io/webidl/#es-legacy-platform-objects)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1314300</commentid>
    <comment_count>2</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-05-31 13:43:49 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #1)
&gt; I believe what we need to do is override the &apos;defineOwnProperty&apos; static
&gt; function, in addition to &apos;put&apos; and &apos;putByIndex&apos;.
&gt; 
&gt; I&apos;d be interested in going over all the overrides we do at some point, as I
&gt; am not 100% what the ramifications of not overriding some (specifically
&gt; getOwnNonIndexPropertyNames, getPropertyNames, getEnumerableLength,
&gt; getStructurePropertyNames, getGenericPropertyNames, preventExtensions, and
&gt; isExtensible) are with respect to the WebIDL specification of &apos;legacy
&gt; platform objects&apos;
&gt; (https://heycam.github.io/webidl/#es-legacy-platform-objects)

Sam, what does the element derive from here? (I think JSDOMStringMap is a derived source and I don&apos;t have a build handy.) Anyways, it seems like it&apos;s probably easy to implement the &quot;legacy platform object&quot; semantics you linked to. It is a bit surprising that the element is totally unchanged here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1314350</commentid>
    <comment_count>3</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-05-31 14:52:52 -0700</bug_when>
    <thetext>Ok, my build finished. So I think this is probably as simple as implanting the specced behavior. It is weird though that we&apos;re not seeing the defineOwnProperty. Perhaps it has to do with how getOwnPropertySlot is written:

```
bool JSDOMStringMap::getOwnPropertySlot(JSObject* object, ExecState* state, PropertyName propertyName, PropertySlot&amp; slot)
{
    auto* thisObject = jsCast&lt;JSDOMStringMap*&gt;(object);
    ASSERT_GC_OBJECT_INHERITS(thisObject, info());
    if (thisObject-&gt;classInfo() == info() &amp;&amp; !propertyName.isSymbol()) {
        auto item = thisObject-&gt;wrapped().namedItem(propertyNameToAtomicString(propertyName));
        if (!IDLDOMString::isNullValue(item)) {
            slot.setValue(thisObject, 0, toJS&lt;IDLDOMString&gt;(*state, item));
            return true;
        }
    }
    if (Base::getOwnPropertySlot(thisObject, state, propertyName, slot))
        return true;
    return false;
}
```</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1314355</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-05-31 14:56:52 -0700</bug_when>
    <thetext>Yeah, I&apos;m just going to implement the defineOwnProperty hook. One issue though is that as specified, I need to modify the PropertyDescriptor (see step 3 of https://heycam.github.io/webidl/#legacy-platform-object-defineownproperty) but the hook passes it as a const reference. Seems relatively straightforward to change this in JSC, but I am not clear if that was done for a reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1314358</commentid>
    <comment_count>5</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-05-31 15:00:20 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #4)
&gt; Yeah, I&apos;m just going to implement the defineOwnProperty hook. One issue
&gt; though is that as specified, I need to modify the PropertyDescriptor (see
&gt; step 3 of
&gt; https://heycam.github.io/webidl/#legacy-platform-object-defineownproperty)
&gt; but the hook passes it as a const reference. Seems relatively
&gt; straightforward to change this in JSC, but I am not clear if that was done
&gt; for a reason.

I&apos;m not sure why JSC passes it as const. However, why not just create a new one? I think that should be pretty cheap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1314538</commentid>
    <comment_count>6</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-05-31 21:33:13 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #5)
&gt; (In reply to Sam Weinig from comment #4)
&gt; &gt; Yeah, I&apos;m just going to implement the defineOwnProperty hook. One issue
&gt; &gt; though is that as specified, I need to modify the PropertyDescriptor (see
&gt; &gt; step 3 of
&gt; &gt; https://heycam.github.io/webidl/#legacy-platform-object-defineownproperty)
&gt; &gt; but the hook passes it as a const reference. Seems relatively
&gt; &gt; straightforward to change this in JSC, but I am not clear if that was done
&gt; &gt; for a reason.
&gt; 
&gt; I&apos;m not sure why JSC passes it as const. However, why not just create a new
&gt; one? I think that should be pretty cheap.

Oh duh.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315512</commentid>
    <comment_count>7</comment_count>
      <attachid>311953</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-06-03 21:41:21 -0700</bug_when>
    <thetext>Created attachment 311953
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315543</commentid>
    <comment_count>8</comment_count>
      <attachid>311961</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-06-04 08:26:16 -0700</bug_when>
    <thetext>Created attachment 311961
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315571</commentid>
    <comment_count>9</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-06-04 11:00:03 -0700</bug_when>
    <thetext>Committed r217773: &lt;http://trac.webkit.org/changeset/217773&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315580</commentid>
    <comment_count>10</comment_count>
      <attachid>311961</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-06-04 12:41:01 -0700</bug_when>
    <thetext>Comment on attachment 311961
Patch

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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:483
&gt; +        push(@$outputArray, &quot;    JSValue proto = thisObject-&gt;getPrototypeDirect();\n&quot;);
&gt; +        push(@$outputArray, &quot;    if (proto.isObject() &amp;&amp; jsCast&lt;JSObject*&gt;(proto)-&gt;hasProperty(state, propertyName))\n&quot;);
&gt; +        push(@$outputArray, &quot;        return false;\n\n&quot;);

Is it safe to use getPrototypeDirect here? Do we not expect that this is generated for something that has a custom getPrototype hook? Would that even matter?

Also, don&apos;t we need an exception check after hasProperty?

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:763
&gt; +            push(@$outputArray, &quot;    PropertySlot slot { thisObject, PropertySlot::InternalMethodType::VMInquiry };\n&quot;);

VMInquiry looks wrong here. I think you want something else, but it depends on which operation you&apos;re trying to perform.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:764
&gt; +            push(@$outputArray, &quot;    JSValue prototype = thisObject-&gt;getPrototypeDirect();\n&quot;);

ditto about safety of using getPrototypeDirect here.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:887
&gt; +            # FIXME: Is Base::getOwnPropertySlot the right function to call? Is there a function that will
&gt; +            #        only look at the actual properties, and not call into our implementation of the
&gt; +            #        [[GetOwnProperty]] hook?

This seems correct to me, but it probably depends on what Base is.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:904
&gt; +            # 2.2.1. If the result of calling IsDataDescriptor(Desc) is false, then return false.
&gt; +            push(@$outputArray, $additionalIndent . &quot;        if (!propertyDescriptor.isDataDescriptor())\n&quot;);
&gt; +            push(@$outputArray, $additionalIndent . &quot;            return false;\n&quot;);
&gt; +            
&gt; +            # 2.2.2. Invoke the named property setter with P and Desc.[[Value]].
&gt; +            GenerateInvokeNamedPropertySetter($outputArray, $additionalIndent . &quot;        &quot;, $interface, $namedSetterOperation, &quot;propertyDescriptor.value()&quot;);

These specced semantics are bizarre. I&apos;m sure there is some reason they are the way they are, but it&apos;s counter-intuitive that defineOwnProperty can mean &quot;call this setter instead&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315581</commentid>
    <comment_count>11</comment_count>
      <attachid>311961</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-06-04 12:44:35 -0700</bug_when>
    <thetext>Comment on attachment 311961
Patch

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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:634
&gt; +    push(@$outputArray, $indent . &quot;RETURN_IF_EXCEPTION(throwScope, true);\n&quot;);

nit: Should not matter in practice, but I&apos;d return false in case of an exception.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709926</commentid>
    <comment_count>12</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-11-23 11:31:59 -0800</bug_when>
    <thetext>(In reply to Saam Barati from comment #11)
&gt; Comment on attachment 311961 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=311961&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:634
&gt; &gt; +    push(@$outputArray, $indent . &quot;RETURN_IF_EXCEPTION(throwScope, true);\n&quot;);
&gt; 
&gt; nit: Should not matter in practice, but I&apos;d return false in case of an
&gt; exception.

Saam, I&apos;ve replied to the post-review feedback in https://bugs.webkit.org/show_bug.cgi?id=218849#c8.

Would also appreciate your insight on slot caching in that patch: while [[Delete]] tests are a bit flaky without DeletePropertySlot::disableCaching(), get() and put() seem to work fine w/o it.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>311447</attachid>
            <date>2017-05-28 17:36:23 -0700</date>
            <delta_ts>2017-05-28 17:36:23 -0700</delta_ts>
            <desc>Test case</desc>
            <filename>definePropertyDOMStringMap.html</filename>
            <type>text/html</type>
            <size>758</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">PHA+VGhpcyBzaG93cyB0aGF0IHVzaW5nIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSguLi4pIHRvIGFk
ZCBhIHByb3BlcnR5IG9uIGEgRE9NU3RyaW5nTWFwIGRvZXMgbm90IHdvcmsgYXMgZXhwZWN0ZWQ8
L3A+CjxwcmUgaWQ9J2NvbnNvbGUnPjwvcHJlPgo8c2NyaXB0PgogICAgZnVuY3Rpb24gbG9nKG1z
ZykKICAgIHsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmFwcGVu
ZChtc2cgKyAnXG4nKTsKICAgIH0KCiAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImRpdiIpOwogICAgZWxlbWVudC5kYXRhc2V0WyJhIl0gPSAiMSI7CiAgICBlbGVtZW50
LmRhdGFzZXRbImIiXSA9ICIyIjsKICAgIGxvZygiQ3JlYXRpbmcgYSBFbGVtZW50IGFuZCBhZGRp
bmcgdHdvIGl0ZW1zIHRvIGl0cyBkYXRhc2V0LiBJdCBoYXMgdGhlIGZvbGxvd2luZyBvdXRlckhU
TUwuIikKICAgIGxvZyhlbGVtZW50Lm91dGVySFRNTCk7CgogICAgbG9nKCJcblRlc3RpbmcgdXNp
bmcgT2JqZWN0LmRlZmluZVByb3BlcnR5IHRvIGFkZCAoJ2tleScgPT4gJ3ZhbHVlJykgdG8gdGhl
IGRhdGFzZXQsIHRoaXMgc2hvdWxkIGFkZCBhbm90aGVyIGF0dHJpYnV0ZSwgZGF0YS1rZXk9XCJ2
YWx1ZVwiLiIpCiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudC5kYXRhc2V0LCAia2V5
IiwgewogICAgICAgIHZhbHVlOiAndmFsdWUnCiAgICB9KTsKICAgIGxvZyhlbGVtZW50Lm91dGVy
SFRNTCk7Cjwvc2NyaXB0Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>311953</attachid>
            <date>2017-06-03 21:41:21 -0700</date>
            <delta_ts>2017-06-04 08:26:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-172687-20170603213741.patch</filename>
            <type>text/plain</type>
            <size>462070</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNzc2NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0OSBAQAorMjAxNy0wNi0wMyAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIENhbid0IHVzZSBPYmplY3QuZGVmaW5l
UHJvcGVydHkoKSB0byBhZGQgYW4gaXRlbSB0byBhIERPTVN0cmluZ01hcCBvciBTdG9yYWdlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzI2ODcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIEFkZHMgc3Vw
cG9ydCBmb3IgZ2VuZXJhdGluZyB0aGUgZGVmaW5lT3duUHJvcGVydHkgQ2xhc3NJbmZvIG1ldGhv
ZCB0YWJsZSBob29rCisgICAgICAgICAgdG8gYWRkIHN1cHBvcnQgZm9yIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eSgpLiBUaGUgaW1wbGVtZW50YXRpb24gZm9sbG93cyBXZWJJREwKKyAgICAgICAgICBz
ZWN0aW9uIDMuOS4zIFtbRGVmaW5lT3duUHJvcGVydHldXS4KKyAgICAgICAgICAoaHR0cHM6Ly9o
ZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jbGVnYWN5LXBsYXRmb3JtLW9iamVjdC1kZWZpbmVvd25w
cm9wZXJ0eSkKKyAgICAgICAgLSBBZGRzIHN1cHBvcnQgZm9yIGdlbmVyYXRpbmcgbmFtZWQgc2V0
dGVycyBpbiBhZGRpdGlvbiB0byB0aGUgYWxyZWFkeSBzdXBwb3J0ZWQKKyAgICAgICAgICBpbmRl
eGVkIHNldHRlcnMgYXMgbXVjaCBvZiB0aGUgcmVxdWlyZWQgd29yayB3YXMgbmVlZGVkIHRvIG1h
a2UgZGVmaW5lT3duUHJvcGVydHkKKyAgICAgICAgICB3b3JrIGZvciB0aG9zZSBwcm9wZXJ0aWVz
LiBUaGlzIHBhdGNoIGRvZXMgbm90IGFpbSB0byBmb2xsb3cgV2ViSURMIGZhaXRoZnVsbHksCisg
ICAgICAgICAgYnV0IHJhdGhlciB0byBnZW5lcmF0ZSBhcyBjbG9zZSB0byB0aGUgY3VzdG9tIGNv
ZGUgYXMgcG9zc2libGUuIEEgZm9sbG93IHVwIAorICAgICAgICAgIGNoYW5nZSB3aWxsIGF0dGVt
cHQgdG8gbWF0Y2ggV2ViSURMIG1vcmUgY2xvc2VseSAod2hpY2ggd2lsbCBhbHNvIHJlcXVpcmUg
Y2hhbmdlcworICAgICAgICAgIHRvIFtbR2V0T3duUHJvcGVydHlTbG90XV0pLgorICAgICAgICAt
IFJlbW92ZXMgdGhlIG5lZWQgZm9yIGN1c3RvbSBiaW5kaW5ncyBpbiBET01TdHJpbmdNYXAsIEhU
TUxPcHRpb25zQ29sbGVjdGlvbiBhbmQKKyAgICAgICAgICBIVE1MU2VsZWN0RWxlbWVudC4gR2V0
cyB1cyBvbmUgZnVuY3Rpb24gYXdheSBmcm9tIHN1cHBvcnRpbmcgU3RvcmFnZS4KKyAgICAgICAg
LSBUaWRpZXMgdXAgZ2VuZXJhdGVkIGhlYWRlcnMgYSBiaXQgYnkgZ3JvdXBpbmcgYWxsIHRoZSBD
bGFzc0luZm8gbWV0aG9kIHRhYmxlIGhvb2tzCisgICAgICAgICAgdG9nZXRoZXIuCisgICAgICAg
IC0gUmVtb3ZlcyBzdXBwb3J0IGZvciBDdXN0b21JbmRleGVkU2V0dGVyLCB3aGljaCBpcyBubyBs
b25nZXIgdXNlZC4KKworICAgICAgICBUZXN0OiBqcy9kb20vbGVnYWN5LXBsYXRmb3JtLW9iamVj
dC1kZWZpbmVPd25Qcm9wZXJ0eS5odG1sCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNCaW5kaW5nc0FsbEluT25lLmNwcDoKKyAgICAgICAgUmVtb3ZlZCBub3cgdW5u
ZWVkZWQgY3VzdG9tIGJpbmRpbmdzLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01TdHJp
bmdNYXBDdXN0b20uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTE9w
dGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmg6IFJlbW92ZWQuCisgICAgICAgICog
YmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU3Rv
cmFnZTo6cHV0RGVsZWdhdGUpOiBEZWxldGVkLgorICAgICAgICBSZW1vdmUgbW9yZSBjb2RlIHRo
YXQgaXMgbm93IGdlbmVyYXRlZC4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVJbmRleGVkR2V0dGVyKToKKyAgICAgICAg
LSBBZGQgbWlzc2luZyBjaGVjayBmb3IgaW5kZXhlZCBzZXR0ZXIgb3BlcmF0aW9uIHdoZW4gZGV0
ZXJtaW5pbmcgaWYgdGhlIHByb3BlcnR5IHNob3VsZCBiZSBSZWFkT25seS4KKyAgICAgICAgLSBB
ZGQgc3VwcG9ydCBmb3IgY3VzdG9tIGltcGxlbWVudGF0aW9uIG5hbWUsIG1hdGNoaW5nIEdlbmVy
YXRlTmFtZWRHZXR0ZXIuCisgICAgICAgIC0gQ29udmVydCB0byB0YWtpbmcgYW4gb3V0cHV0QXJy
YXkgYW5kIGluZGVudCB0byBhbGxvdyBtb3JlIGZsZXhpYmlsaXR5IGdvaW5nIGZvcndhcmQuCisK
KyAgICAgICAgKEdlbmVyYXRlTmFtZWRHZXR0ZXIpOgorICAgICAgICAtIEFkZCBtaXNzaW5nIGNo
ZWNrIGZvciBuYW1lZCBzZXR0ZXIgb3BlcmF0aW9uIHdoZW4gZGV0ZXJtaW5pbmcgaWYgdGhlIHBy
b3BlcnR5IHNob3VsZCBiZSBSZWFkT25seS4KKyAgICAgICAgLSBDb252ZXJ0IHRvIHRha2luZyBh
biBvdXRwdXRBcnJheSBhbmQgaW5kZW50IHRvIGFsbG93IG1vcmUgZmxleGliaWxpdHkgZ29pbmcg
Zm9yd2FyZC4KKworICAgICAgICAoR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eVNsb3RCb2R5KToKKyAg
ICAgICAgLSBDb252ZXJ0IHRvIHRha2luZyBhbiBvdXRwdXRBcnJheSBhbmQgaW5kZW50IHRvIGFs
bG93IG1vcmUgZmxleGliaWxpdHkgZ29pbmcgZm9yd2FyZC4KKyAgICAgICAgLSBUYWtlIG92ZXIg
cmVzcG9uc2liaWxpdHkgZm9yIGNoZWNraW5nIGFuZCBiYWlsaW5nIGlmIEN1c3RvbUdldE93blBy
b3BlcnR5U2xvdCBpcyBzZXQuCisKKyAgICAgICAgKEdlbmVyYXRlR2V0T3duUHJvcGVydHlTbG90
Qm9keUJ5SW5kZXgpOgorICAgICAgICAtIENvbnZlcnQgdG8gdGFraW5nIGFuIG91dHB1dEFycmF5
IGFuZCBpbmRlbnQgdG8gYWxsb3cgbW9yZSBmbGV4aWJpbGl0eSBnb2luZyBmb3J3YXJkLgorICAg
ICAgICAtIFRha2Ugb3ZlciByZXNwb25zaWJpbGl0eSBmb3IgY2hlY2tpbmcgYW5kIGJhaWxpbmcg
aWYgQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QnlJbmRleCBpcyBzZXQuCisKKyAgICAgICAgKEdl
bmVyYXRlR2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIC0gQ29udmVydCB0byB0YWtpbmcg
YW4gb3V0cHV0QXJyYXkgYW5kIGluZGVudCB0byBhbGxvdyBtb3JlIGZsZXhpYmlsaXR5IGdvaW5n
IGZvcndhcmQuCisgICAgICAgIC0gVGFrZSBvdmVyIHJlc3BvbnNpYmlsaXR5IGZvciBjaGVja2lu
ZyBhbmQgYmFpbGluZyBpZiBDdXN0b21FbnVtZXJhdGVQcm9wZXJ0eSBpcyBzZXQuCisKKyAgICAg
ICAgKEdlbmVyYXRlSW52b2tlSW5kZXhlZFByb3BlcnR5U2V0dGVyKToKKyAgICAgICAgQWRkZWQu
IEltcGxlbWVudHMgdGhlICdpbnZva2UgYW4gaW5kZXhlZCBwcm9wZXJ0eSBzZXR0ZXInIGFsZ29y
aXRobSAoaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jaW52b2tlLWluZGV4ZWQtc2V0
dGVyKQorCisgICAgICAgIChHZW5lcmF0ZUludm9rZU5hbWVkUHJvcGVydHlTZXR0ZXIpOgorICAg
ICAgICBBZGRlZC4gSW1wbGVtZW50cyB0aGUgJ2ludm9rZSBhIG5hbWVkIHByb3BlcnR5IHNldHRl
cicgYWxnb3JpdGhtIChodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNpbnZva2UtbmFt
ZWQtc2V0dGVyKQorCisgICAgICAgIChHZW5lcmF0ZVB1dCk6CisgICAgICAgIChHZW5lcmF0ZVB1
dEJ5SW5kZXgpOgorICAgICAgICAtIENvbnZlcnQgdG8gdGFraW5nIGFuIG91dHB1dEFycmF5IGFu
ZCBpbmRlbnQgdG8gYWxsb3cgbW9yZSBmbGV4aWJpbGl0eSBnb2luZyBmb3J3YXJkLgorICAgICAg
ICAtIFRha2Ugb3ZlciByZXNwb25zaWJpbGl0eSBmb3IgY2hlY2tpbmcgYW5kIGJhaWxpbmcgaWYg
Q3VzdG9tUHV0IGlzIHNldC4KKyAgICAgICAgLSBBZGRzIHN1cHBvcnQgZm9yIENFUmVhY3Rpb25z
LgorICAgICAgICAtIEFkb3B0cyBHZW5lcmF0ZUludm9rZUluZGV4ZWRQcm9wZXJ0eVNldHRlciBh
bmQgR2VuZXJhdGVJbnZva2VOYW1lZFByb3BlcnR5U2V0dGVyIHRvCisgICAgICAgICAgc2ltcGxp
ZnkgY29kZS4KKyAgICAgICAgLSBSZW1vdmVzIHN1cHBvcnQgZm9yIEN1c3RvbUluZGV4ZWRTZXR0
ZXIsIHdoaWNoIGlzIG5vIGxvbmdlciB1c2VkLgorICAgICAgICAtIFJlcGxhY2VzIHVzZSBkaXJl
Y3QgY2hlY2tpbmcgb2YgT3ZlcnJpZGVCdWlsdGlucyB3aXRoIGNoZWNrIGlmIGFueSBpbnRlcmZh
Y2UgaXQgaW5oZXJpdHMKKyAgICAgICAgICBoYXMgaXQsIHdoaWNoIGlzIGhvdyBpdCBpcyBzcGVj
aWZpZWQgdG8gd29yay4KKworICAgICAgICAoR2VuZXJhdGVJc1VuZm9yZ2VhYmxlUHJvcGVydHlO
YW1lKToKKyAgICAgICAgQWRkZWQuIEhlbHBlciBzdWJyb3V0aW5lIHRvIGdlbmVyYXRlIGEgZnVu
Y3Rpb24gdGhhdCBjb21wYXJlcyBhIHByb3BlcnR5IG5hbWUKKyAgICAgICAgYWdhaW5zIGFsbCB0
aGUgcHJvcGVydHkgbmFtZXMgZGVmaW5lZCBhcyBVbmZvcmdlYWJsZSBvbiB0aGUgaW50ZXJmYWNl
LiBVc2VkIGJ5CisgICAgICAgIEdlbmVyYXRlRGVmaW5lT3duUHJvcGVydHkuCisKKyAgICAgICAg
KEdlbmVyYXRlRGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICBBZGRlZC4gSW1wbGVtZW50cyBz
ZWN0aW9uIDMuOS4zIFtbRGVmaW5lT3duUHJvcGVydHldXSAoaHR0cHM6Ly9oZXljYW0uZ2l0aHVi
LmlvL3dlYmlkbC8jbGVnYWN5LXBsYXRmb3JtLW9iamVjdC1kZWZpbmVvd25wcm9wZXJ0eSkKKyAg
ICAgICAgQWRkcyBzdXBwb3J0IGZvciBDRVJlYWN0aW9ucy4KKworICAgICAgICAoR2VuZXJhdGVE
ZWxldGVQcm9wZXJ0eUNvbW1vbik6CisgICAgICAgIFN3aXRjaCBmcm9tIGdldHRpbmcgT3ZlcnJp
ZGVCdWlsdGlucyBkaXJlY3RseSBvZmYgdGhlIGludGVyZmFjZSB0byB1c2luZyBJbmhlcml0c0V4
dGVuZGVkQXR0cmlidXRlLgorCisgICAgICAgIChHZW5lcmF0ZU5hbWVkRGVsZXRlckRlZmluaXRp
b24pOgorICAgICAgICBTd2l0Y2ggc2lnbmF0dXJlIHRvIG1hdGNoIHBlZXIgZ2VuZXJhdG9ycy4K
KworICAgICAgICAoSW5zdGFuY2VPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAg
ICBVcGRhdGUgZm9yIHJlbmFtZSBvZiBKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2Ny
aXB0b3IgdG8gQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvci4KKworICAgICAg
ICAoSW5zdGFuY2VPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAg
QWRkZWQuIExpa2UgSW5zdGFuY2VPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QsIGJ1dCBjaGVj
a3MgZm9yIHRoZSBuZXcgQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QnlJbmRleCAKKyAgICAgICAg
cmF0aGVyIHRoYW4gQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90LgorCisgICAgICAgIChJbnN0YW5j
ZU92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICBBZGRlZC4gTW92ZXMgY29t
cGxleCBwcmVkaWNhdGUgb3V0IG9mIGxpbmUuCisKKyAgICAgICAgKEluc3RhbmNlT3ZlcnJpZGVz
UHV0KToKKyAgICAgICAgUmVtb3ZlcyBub3cgdW51c2VkIEN1c3RvbUluZGV4ZWRTZXR0ZXIsIGFu
ZCBhZGRzIEN1c3RvbVB1dEZ1bmN0aW9uLCB3aGljaCB1c2VkIHRvIGJlIGNoZWNrZWQgc2VwYXJh
dGVseS4KKworICAgICAgICAoSW5zdGFuY2VPdmVycmlkZXNEZWZpbmVPd25Qcm9wZXJ0eSk6Cisg
ICAgICAgIEFkZGVkLgorCisgICAgICAgIChHZW5lcmF0ZUhlYWRlcik6CisgICAgICAgIC0gTW92
ZXMgbW9yZSBzdHJ1Y3R1cmUgZmxhZ3MgdG9nZXRoZXIuCisgICAgICAgIC0gU2ltcGxpZmllcyBw
cmVkaWNhdGVzIGFuZCBtb3ZlcyB0aGUgQ2xhc3NJbmZvIG1ldGhvZCB0YWJsZSBob29rcyB0b2dl
dGhlci4KKworICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6CisgICAgICAgIC0gTW92
ZXMgdGhlIENsYXNzSW5mbyBtZXRob2QgdGFibGUgaG9va3MgdG9nZXRoZXIKKyAgICAgICAgLSBB
ZGRzIGNhbGwgdG8gR2VuZXJhdGVEZWZpbmVPd25Qcm9wZXJ0eS4KKworICAgICAgICAoR2VuZXJh
dGVMZWdhY3lDYWxsZXJEZWZpbml0aW9ucyk6CisgICAgICAgIFNpbXBsaWZ5IGJhaWwgY29uZGl0
aW9uIHRvIG1hdGNoIG90aGVyIGdlbmVyYXRvcnMuCisKKyAgICAgICAgKEdlbmVyYXRlUHJvdG90
eXBlRGVjbGFyYXRpb24pOgorICAgICAgICBVcGRhdGUgZm9yIG5ldyBleHRlbmRlZCBhdHRyaWJ1
dGUgbmFtZXMuCisKKyAgICAgICAgKEluc3RhbmNlT3ZlcnJpZGVzQ2FsbCk6IAorICAgICAgICBS
ZW5hbWVkIGZyb20gSXNDYWxsYWJsZSBmb3IgY29uc2lzdGVuY3kuCisgICAgICAgIAorICAgICAg
ICAoSGFzQ29tcGxleEdldE93blByb3BlcnR5KTogCisgICAgICAgIERlbGV0ZWQuIFVudXNlZC4K
KyAgICAgICAgCisgICAgICAgIChJbnN0YW5jZU92ZXJyaWRlc1B1dEltcGxlbWVudGF0aW9uKTog
CisgICAgICAgIERlbGV0ZWQuIFVudXNlZC4KKyAgICAgICAgCisgICAgICAgIChJbnN0YW5jZU92
ZXJyaWRlc1B1dERlY2xhcmF0aW9uKTogCisgICAgICAgIERlbGV0ZWQuIFVudXNlZC4KKyAgICAg
ICAgCisgICAgICAgIChJc0NhbGxhYmxlKTogCisgICAgICAgIFJlbmFtZWQsIGZvciBjb25zaXN0
ZW5jeSwgdG8gSW5zdGFuY2VPdmVycmlkZXNDYWxsIC4KKworICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvSURMQXR0cmlidXRlcy5qc29uOgorICAgICAgICBSZW5hbWVzIGEgZmV3IG9mIHRoZSBl
eHRlbmRlZCBhdHRyaWJ1dGVzIHRvIHJlbW92ZSB0aGUgSlMgcHJlZml4LiBUaGlzIHRpbWUKKyAg
ICAgICAgYXJvdW5kIEkgb25seSBkaWQgdGhlIG9uZXMgaW4gdGhlIGFyZWEgSSB3YXMgd29ya2lu
ZywgYnV0IHdlIHNob3VsZCBwcm9iYWJseQorICAgICAgICByZW1vdmUgbW9zdCBvZiB0aGUgcmVz
dC4KKyAgICAKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5pZGw6CisgICAgICAg
IFVwZGF0ZSBmb3IgSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yIC0+IEN1
c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2NyaXB0b3IgcmVuYW1lLgorCisgICAgICAgICog
ZG9tL0RPTVN0cmluZ01hcC5pZGw6CisgICAgICAgIFJlbW92ZSBDdXN0b21OYW1lZFNldHRlciBh
bmQgYWRkIHVuY29tbWVudCBvdXQgdGhlIHNldHRlci4KKworICAgICAgICAqIGRvbS9EYXRhc2V0
RE9NU3RyaW5nTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFzZXRET01TdHJpbmdNYXA6
OnNldE5hbWVkSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhc2V0RE9NU3RyaW5nTWFwOjpz
ZXRJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgKiBkb20vRGF0YXNldERPTVN0cmluZ01hcC5oOgor
ICAgICAgICBSZW5hbWUgc2V0SXRlbSB0byBzZXROYW1lZEl0ZW0sIHdoaWNoIGlzIHdoYXQgdGhl
IGdlbmVyYXRvciBleHBlY3RzLgorCisgICAgICAgICogZG9tL05vZGUuaWRsOgorICAgICAgICBV
cGRhdGUgZm9yIEpTQ3VzdG9tUHVzaEV2ZW50SGFuZGxlclNjb3BlIC0+IEN1c3RvbVB1c2hFdmVu
dEhhbmRsZXJTY29wZSByZW5hbWUuCisKKyAgICAgICAgKiBodG1sL0hUTUxBcHBsZXRFbGVtZW50
LmlkbDoKKyAgICAgICAgKiBodG1sL0hUTUxFbWJlZEVsZW1lbnQuaWRsOgorICAgICAgICAqIGh0
bWwvSFRNTE9iamVjdEVsZW1lbnQuaWRsOgorICAgICAgICBVcGRhdGUgZm9yIEpTQ3VzdG9tR2V0
T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvciAtPiBDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RB
bmREZXNjcmlwdG9yIHJlbmFtZS4KKworICAgICAgICAqIGh0bWwvSFRNTENvbGxlY3Rpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246OmlzU3VwcG9ydGVkUHJvcGVydHlO
YW1lKToKKyAgICAgICAgKiBodG1sL0hUTUxDb2xsZWN0aW9uLmg6CisgICAgICAgIEFkZCBpc1N1
cHBvcnRlZFByb3BlcnR5TmFtZSBmdW5jdGlvbiB3aGljaCBpcyB1c2VkIGJ5IHRoZSBiaW5kaW5n
cyBhbmQgaXMgbm93IG5lZWRlZC4KKworICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuaWRsOgor
ICAgICAgICBVcGRhdGUgZm9yIEpTQ3VzdG9tUHVzaEV2ZW50SGFuZGxlclNjb3BlIC0+IEN1c3Rv
bVB1c2hFdmVudEhhbmRsZXJTY29wZSByZW5hbWUuCisKKyAgICAgICAgKiBodG1sL0hUTUxPcHRp
b25zQ29sbGVjdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbnNDb2xsZWN0aW9u
OjpzZXRJdGVtKToKKyAgICAgICAgQWRkIHNldEl0ZW0oKSBpbXBsZW1lbnRhdGlvbiB3aGljaCBq
dXN0IGZvcndhcmRzIHRvIHRoZSBzZWxlY3QgZWxlbWVudC4gQWxzbywgYWRkIAorICAgICAgICBh
IHR5cGUgYWxpYXMgdG8gbWFrZSB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGl0ZW0gYW5kIG5hbWVk
SXRlbSBsZXNzIHZlcmJvc2UuCisKKyAgICAgICAgKiBodG1sL0hUTUxPcHRpb25zQ29sbGVjdGlv
bi5pZGw6CisgICAgICAgIFJlbW92ZSBDdXN0b21JbmRleGVkU2V0dGVyIGFuZCB1bmNvbW1lbnQg
dGhlIHNldHRlci4KKworICAgICAgICAqIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaWRsOgorICAg
ICAgICBSZW1vdmUgQ3VzdG9tSW5kZXhlZFNldHRlciBhbmQgdW5jb21tZW50IHRoZSBzZXR0ZXIu
IEFsc28sIHJlZm9ybWF0CisgICAgICAgIHRvIG1hdGNoIHRoZSBXSEFUV0cgc3BlYy4KKworICAg
ICAgICAqIHBhZ2UvRE9NV2luZG93LmlkbDoKKyAgICAgICAgVXBkYXRlIGZvciBKU0N1c3RvbURl
ZmluZU93blByb3BlcnR5IC0+IEN1c3RvbURlZmluZU93blByb3BlcnR5IHJlbmFtZS4gQWRkIAor
ICAgICAgICBDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4IHdoaWNoIGlzIG5vdyBuZWVk
ZWQgdG8gcmVtb3ZlIHNvbWUgdW5zb3VuZAorICAgICAgICBhc3N1bXB0aW9ucyB0aGUgZ2VuZXJh
dG9yIHdhcyBtYWtpbmcuCisKKyAgICAgICAgKiBwYWdlL0xvY2F0aW9uLmlkbDoKKyAgICAgICAg
VXBkYXRlIGZvciByZW1vdmFsIG9mIEpTIHByZWZpeCBmcm9tIGEgYnVuY2ggb2YgZXh0ZW5kZWQg
YXR0cmlidXRlcy4KKworICAgICAgICAqIHBhZ2UvVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFj
ZS5pZGw6CisgICAgICAgIFVwZGF0ZSBmb3IgSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmRE
ZXNjcmlwdG9yIC0+IEN1c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2NyaXB0b3IgcmVuYW1l
LgorCisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlLmlkbDoKKyAgICAgICAgUmVtb3ZlIEN1c3Rv
bU5hbWVkU2V0dGVyIGFuZCB1bmNvbW1lbnQgdGhlIHNldHRlci4KKworICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU0ludGVyZmFjZU5hbWUuaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHA6IEFk
ZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwOiBBZGRlZC4KKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93
aW5nRXhjZXB0aW9uLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwOiBBZGRlZC4KKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJ
bnRlcmZhY2UuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVu
dGlmaWVyLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHA6IEFkZGVkLgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllci5oOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4
Y2VwdGlvbi5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZERlbGV0ZXJXaXRoSWRlbnRpZmllci5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmg6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVy
Lmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVy
Tm9JZGVudGlmaWVyLmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmg6IEFkZGVkLgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9u
LmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoSWRlbnRpZmllci5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucy5jcHA6IEFkZGVkLgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVy
cmlkZUJ1aWx0aW5zLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcy5jcHA6IEFkZGVkLgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhV
bmZvcmdhYmxlUHJvcGVydGllcy5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVy
cmlkZUJ1aWx0aW5zLmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVC
dWlsdGlucy5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0T2JqLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2Jq
Lmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVp
bHRpbnMuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEluZGV4ZWRTZXR0
ZXJOb0lkZW50aWZpZXIuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5pZGw6IEFkZGVkLgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVy
LmlkbDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9u
LmlkbDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5pZGw6IEFkZGVkLgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9UZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuaWRsOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIu
aWRsOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5hbWVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb24uaWRsOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuaWRsOiBBZGRlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVp
bHRpbnMuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5h
bWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzLmlkbDogQWRkZWQuCisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVy
dGllc0FuZE92ZXJyaWRlQnVpbHRpbnMuaWRsOiBBZGRlZC4KKyAgICAgICAgQWRkZWQgbmV3IHRl
c3RzIGFuZCB1cGRhdGVkIHNvbWUgcmVzdWx0cy4KKwogMjAxNy0wNi0wMyAgQ2hyaXMgRHVtZXog
IDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEltcGxlbWVudCBET01NYXRyaXgncyBmcm9t
RmxvYXQzMkFycmF5IC8gZnJvbUZsb2F0NjRBcnJheSAmIHRvRmxvYXQzMkFycmF5IC8gdG9GbG9h
dDY0QXJyYXkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMTc3NjQpCisrKyBT
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTE2Niw3ICsx
MTY2LDYgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIGJpbmRpbmdzL2pzL0pTRE9NR3VhcmRl
ZE9iamVjdC5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0RPTU1hcExpa2UuY3BwCiAgICAgYmluZGlu
Z3MvanMvSlNET01Qcm9taXNlRGVmZXJyZWQuY3BwCi0gICAgYmluZGluZ3MvanMvSlNET01TdHJp
bmdNYXBDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAogICAg
IGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTRE9N
V2luZG93UHJvcGVydGllcy5jcHAKQEAgLTExODksOCArMTE4OCw2IEBAIHNldChXZWJDb3JlX1NP
VVJDRVMKICAgICBiaW5kaW5ncy9qcy9KU0hUTUxFbWJlZEVsZW1lbnRDdXN0b20uY3BwCiAgICAg
YmluZGluZ3MvanMvSlNIVE1MRnJhbWVTZXRFbGVtZW50Q3VzdG9tLmNwcAogICAgIGJpbmRpbmdz
L2pzL0pTSFRNTE9iamVjdEVsZW1lbnRDdXN0b20uY3BwCi0gICAgYmluZGluZ3MvanMvSlNIVE1M
T3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwCi0gICAgYmluZGluZ3MvanMvSlNIVE1MU2VsZWN0
RWxlbWVudEN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0hUTUxUZW1wbGF0ZUVsZW1lbnRD
dXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAogICAgIGJpbmRp
bmdzL2pzL0pTSURCQ3Vyc29yQ3VzdG9tLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjE3NzY0KQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTAwLDcgKzE5MDAsNiBAQAogCQk0NDc5NTgwNTE2NDNCNEIyMDAxRTBBN0Yg
LyogUGFyc2VkQ29udGVudFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDQ3OTU4MDIxNjQzQjQ3QjAwMUUwQTdGIC8qIFBhcnNlZENvbnRlbnRU
eXBlLmNwcCAqLzsgfTsKIAkJNDQ4QTI5QkYwQTQ2RDlDQjAwMzA3NTlGIC8qIEpTSFRNTE9wdGlv
bnNDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0NDhBMjlCRDBBNDZEOUNCMDAzMDc1OUYgLyogSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb24u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NDhB
MjlDMDBBNDZEOUNCMDAzMDc1OUYgLyogSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb24uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQ4QTI5QkUwQTQ2RDlD
QjAwMzA3NTlGIC8qIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmNwcCAqLzsgfTsKLQkJNDQ4QUQy
N0MwQTQ4MTM3QTAwMjNEMTc5IC8qIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0OEFEMjdBMEE0
ODEzNzkwMDIzRDE3OSAvKiBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbkN1c3RvbS5jcHAgKi87IH07
CiAJCTQ0OEIxQjdBMEYzQTJGOUIwMDQ3QTlFMiAvKiBUZXh0U2l6ZUFkanVzdG1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0OEIxQjc4MEYzQTJG
OUIwMDQ3QTlFMiAvKiBUZXh0U2l6ZUFkanVzdG1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NDk2RTM5RDEzOTgxMzZDMDAzRUUzMkEgLyog
SlNTVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0NDk2RTM5QjEzOTgxMzZDMDAzRUUzMkEgLyogSlNTVkdBbmlt
YXRlTW90aW9uRWxlbWVudC5jcHAgKi87IH07CiAJCTQ0OTZFMzlFMTM5ODEzNkMwMDNFRTMyQSAv
KiBKU1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0NDk2RTM5QzEzOTgxMzZDMDAzRUUzMkEgLyogSlNTVkdBbmlt
YXRlTW90aW9uRWxlbWVudC5oICovOyB9OwpAQCAtNDkxNCw3ICs0OTEzLDYgQEAKIAkJQUIyNDdB
NkMwQUZENjM4MzAwM0ZBNUZEIC8qIFJlbmRlclNsaWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQjI0N0E2QTBBRkQ2MzgzMDAzRkE1RkQgLyog
UmVuZGVyU2xpZGVyLmNwcCAqLzsgfTsKIAkJQUIyNDdBNkQwQUZENjM4MzAwM0ZBNUZEIC8qIFJl
bmRlclNsaWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQUIyNDdBNkIwQUZENjM4MzAwM0ZBNUZEIC8qIFJlbmRlclNsaWRlci5oICovOyB9OwogCQlB
QjMxQzkxRTEwQUUxQjhFMDAwQzdCOTIgLyogTGluZUNsYW1wVmFsdWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFCMzFDOTFEMTBBRTFCOEUwMDBDN0I5
MiAvKiBMaW5lQ2xhbXBWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCUFCNENCNEVCMEI4QkRBM0QwMDlGNDBCMCAvKiBKU0hUTUxTZWxlY3RF
bGVtZW50Q3VzdG9tLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBQjRDQjRFQTBCOEJEQTNEMDA5RjQwQjAgLyogSlNIVE1MU2VsZWN0RWxlbWVudEN1c3Rv
bS5oICovOyB9OwogCQlBQjY3RDFBODA5N0YzQUUzMDBGOTM5MkUgLyogUmVuZGVyVGV4dENvbnRy
b2wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUI2
N0QxQTYwOTdGM0FFMzAwRjkzOTJFIC8qIFJlbmRlclRleHRDb250cm9sLmNwcCAqLzsgfTsKIAkJ
QUI2N0QxQTkwOTdGM0FFMzAwRjkzOTJFIC8qIFJlbmRlclRleHRDb250cm9sLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQjY3RDFBNzA5N0YzQUUzMDBG
OTM5MkUgLyogUmVuZGVyVGV4dENvbnRyb2wuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlBQjcxNzA4OTBCMzExODA4MDAxNzEyM0UgLyogU2VhcmNo
UG9wdXBNZW51LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBQjcxNzA4ODBCMzExODA4MDAxNzEyM0UgLyogU2VhcmNoUG9wdXBNZW51LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU1ODcsNyArNTU4NSw2
IEBACiAJCUJDMTI4QjAxMTM3QzhENDYwMENBQzg0NSAvKiBSZW5kZXJHcmlkLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMTI4QjAwMTM3QzhENDYw
MENBQzg0NSAvKiBSZW5kZXJHcmlkLmNwcCAqLzsgfTsKIAkJQkMxNDAyOEEwRTgzNjgwODAwMzE5
NzE3IC8qIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMTQwMjg4MEU4MzY4MDgwMDMxOTcxNyAvKiBTY3Jv
bGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAgKi87IH07CiAJCUJDMTQwMjhCMEU4MzY4MDgwMDMxOTcx
NyAvKiBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkMxNDAyODkwRTgzNjgwODAwMzE5NzE3IC8qIFNjcm9sbGJh
clRoZW1lQ29tcG9zaXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJQkMxN0Y5NjYwQjY0RUJCODAwNEE2NUNCIC8qIEpTSFRNTFNlbGVjdEVsZW1l
bnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkMxN0Y5NjUwQjY0RUJCODAwNEE2NUNCIC8qIEpTSFRNTFNlbGVjdEVsZW1lbnRDdXN0b20u
Y3BwICovOyB9OwogCQlCQzFBN0Q5NzE4RkNCNUIwMDA0MjE4NzkgLyogUmVuZGVyTXVsdGlDb2x1
bW5TcGFubmVyUGxhY2Vob2xkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkMxQTdEOTUxOEZDQjVCMDAwNDIxODc5IC8qIFJlbmRlck11bHRpQ29s
dW1uU3Bhbm5lclBsYWNlaG9sZGVyLmNwcCAqLzsgfTsKIAkJQkMxQTdEOTgxOEZDQjVCMDAwNDIx
ODc5IC8qIFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzFBN0Q5NjE4RkNCNUIwMDA0MjE4
NzkgLyogUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuaCAqLzsgfTsKIAkJQkMx
QkRGMjQxNTZDMTg4MzAwMUMxMjQzIC8qIERPTUVycm9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMUJERjIwMTU2QzE3QTkwMDFDMTI0MyAvKiBE
T01FcnJvci5jcHAgKi87IH07CkBAIC01NzI4LDcgKzU3MjUsNiBAQAogCQlCQzY0NjQxRDExRDdG
NDE2MDA2NDU1QjAgLyogRGF0YXNldERPTVN0cmluZ01hcC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzY0NjQxQjExRDdGNDE2MDA2NDU1QjAgLyog
RGF0YXNldERPTVN0cmluZ01hcC5jcHAgKi87IH07CiAJCUJDNjQ2NDk3MTFEODIzNDkwMDY0NTVC
MCAvKiBKU0RPTVN0cmluZ01hcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzY0NjQ5NTExRDgyMzQ5MDA2NDU1QjAgLyogSlNET01TdHJpbmdNYXAu
Y3BwICovOyB9OwogCQlCQzY0NjQ5ODExRDgyMzQ5MDA2NDU1QjAgLyogSlNET01TdHJpbmdNYXAu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNjQ2NDk2
MTFEODIzNDkwMDY0NTVCMCAvKiBKU0RPTVN0cmluZ01hcC5oICovOyB9OwotCQlCQzY0NjQ5QzEx
RDgyMzhDMDA2NDU1QjAgLyogSlNET01TdHJpbmdNYXBDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM2NDY0OUIxMUQ4MjM4QzAwNjQ1NUIw
IC8qIEpTRE9NU3RyaW5nTWFwQ3VzdG9tLmNwcCAqLzsgfTsKIAkJQkM2NEI0Q0IwQ0I0Mjk1RDAw
NUYyQjYyIC8qIENhY2hlZEZvbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkM2NEI0QzkwQ0I0Mjk1RDAwNUYyQjYyIC8qIENhY2hlZEZvbnQuY3Bw
ICovOyB9OwogCQlCQzY0QjRDQzBDQjQyOTVEMDA1RjJCNjIgLyogQ2FjaGVkRm9udC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM2NEI0Q0EwQ0I0Mjk1
RDAwNUYyQjYyIC8qIENhY2hlZEZvbnQuaCAqLzsgfTsKIAkJQkM2NEI0RDUwQ0I0Mjk4QTAwNUYy
QjYyIC8qIENTU0ZvbnRGYWNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDNjRCNENEMENCNDI5OEEwMDVGMkI2MiAvKiBDU1NGb250RmFjZS5jcHAg
Ki87IH07CkBAIC05NjI2LDcgKzk2MjIsNiBAQAogCQk0NDc5NTgwMzE2NDNCNDdCMDAxRTBBN0Yg
LyogUGFyc2VkQ29udGVudFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGFyc2VkQ29udGVudFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQ4QTI5
QkQwQTQ2RDlDQjAwMzA3NTlGIC8qIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NDhBMjlCRTBBNDZEOUNCMDAzMDc1OUYgLyogSlNI
VE1MT3B0aW9uc0NvbGxlY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNDQ4QUQyN0EwQTQ4MTM3OTAwMjNEMTc5IC8qIEpTSFRNTE9wdGlvbnNDb2xsZWN0
aW9uQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSFRN
TE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNDQ4QjFCNzgwRjNBMkY5QjAwNDdBOUUyIC8qIFRleHRTaXplQWRqdXN0bWVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0U2l6ZUFkanVzdG1lbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQ5MDk4QjEwRjhGODI1MjAwNzZBMzI3IC8qIEZlYXR1
cmVEZWZpbmVzLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IEZlYXR1
cmVEZWZpbmVzLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NDk2RTM5
QjEzOTgxMzZDMDAzRUUzMkEgLyogSlNTVkdBbmltYXRlTW90aW9uRWxlbWVudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMjQxLDcgKzEzMjM2LDYgQEAK
IAkJQUIyNDdBNkEwQUZENjM4MzAwM0ZBNUZEIC8qIFJlbmRlclNsaWRlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU2xpZGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUIyNDdBNkIwQUZENjM4MzAwM0ZBNUZEIC8qIFJlbmRlclNs
aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU2xpZGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFCMzFDOTFEMTBBRTFCOEUwMDBDN0I5MiAv
KiBMaW5lQ2xhbXBWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaW5l
Q2xhbXBWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBQjRDQjRFQTBCOEJE
QTNEMDA5RjQwQjAgLyogSlNIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBQjY3RDFBNjA5N0YzQUUzMDBGOTM5MkUgLyogUmVuZGVy
VGV4dENvbnRyb2wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
bmRlclRleHRDb250cm9sLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUI2N0Qx
QTcwOTdGM0FFMzAwRjkzOTJFIC8qIFJlbmRlclRleHRDb250cm9sLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJUZXh0Q29udHJvbC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBQjcxNzA4ODBCMzExODA4MDAxNzEyM0UgLyogU2VhcmNoUG9wdXBNZW51
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWFyY2hQb3B1cE1lbnUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0MDY4LDcgKzE0MDYyLDYgQEAKIAkJQkMx
MjhCMDAxMzdDOEQ0NjAwQ0FDODQ1IC8qIFJlbmRlckdyaWQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyR3JpZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDMTQwMjg4MEU4MzY4MDgwMDMxOTcxNyAvKiBTY3JvbGxiYXJUaGVtZUNvbXBv
c2l0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxiYXJU
aGVtZUNvbXBvc2l0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMTQwMjg5
MEU4MzY4MDgwMDMxOTcxNyAvKiBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlCQzE3Rjk2NTBCNjRFQkI4MDA0QTY1Q0IgLyogSlNIVE1M
U2VsZWN0RWxlbWVudEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDMUE3RDk1MThGQ0I1QjAwMDQyMTg3OSAvKiBSZW5kZXJNdWx0aUNvbHVtblNw
YW5uZXJQbGFjZWhvbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUJDMUE3RDk2MThGQ0I1QjAwMDQyMTg3OSAvKiBSZW5kZXJNdWx0aUNv
bHVtblNwYW5uZXJQbGFjZWhvbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCQzFCREYyMDE1NkMxN0E5MDAxQzEyNDMgLyogRE9NRXJyb3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE9NRXJyb3IuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQyMTYsNyArMTQyMDksNiBAQAogCQlCQzY0NjQ3OTEx
RDgwMENEMDA2NDU1QjAgLyogRE9NU3RyaW5nTWFwLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBET01TdHJpbmdNYXAuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzY0NjQ5
NTExRDgyMzQ5MDA2NDU1QjAgLyogSlNET01TdHJpbmdNYXAuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNET01TdHJpbmdNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCQzY0NjQ5NjExRDgyMzQ5MDA2NDU1QjAgLyogSlNET01TdHJpbmdNYXAu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01TdHJpbmdNYXAuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkM2NDY0OUIxMUQ4MjM4QzAwNjQ1NUIwIC8qIEpT
RE9NU3RyaW5nTWFwQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTRE9NU3RyaW5nTWFwQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQkM2NEI0QzkwQ0I0Mjk1RDAwNUYyQjYyIC8qIENhY2hlZEZvbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FjaGVkRm9udC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUJDNjRCNENBMENCNDI5NUQwMDVGMkI2MiAvKiBDYWNoZWRGb250Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlZEZvbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM2NEI0Q0QwQ0I0Mjk4QTAwNUYyQjYyIC8qIENTU0ZvbnRG
YWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0ZvbnRGYWNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIzNjQyLDcgKzIzNjM0LDYgQEAK
IAkJCQlERUMyOTc1RDFCNERFQjJBMDA1RjU5NDUgLyogSlNDdXN0b21FdmVudEN1c3RvbS5jcHAg
Ki8sCiAJCQkJNDlDN0JBOEMxMDQyRjVCMTAwMDlENDQ3IC8qIEpTRG9jdW1lbnRDdXN0b20uY3Bw
ICovLAogCQkJCUFEREE5NEJGMTk2ODZGODAwMDQ1MzAyOSAvKiBKU0RvY3VtZW50Q3VzdG9tLmgg
Ki8sCi0JCQkJQkM2NDY0OUIxMUQ4MjM4QzAwNjQ1NUIwIC8qIEpTRE9NU3RyaW5nTWFwQ3VzdG9t
LmNwcCAqLywKIAkJCQlCQ0Q5QzI1RTBDMTdBQTY3MDA1QzkwQTIgLyogSlNET01XaW5kb3dDdXN0
b20uY3BwICovLAogCQkJCTY1MkZCQkJCMERFMjdDQjYwMDAxRDM4NiAvKiBKU0RPTVdpbmRvd0N1
c3RvbS5oICovLAogCQkJCUMyODA4MzQxMUM2REM5NkEwMDE0NTFCNiAvKiBKU0ZvbnRGYWNlQ3Vz
dG9tLmNwcCAqLywKQEAgLTIzNjU1LDkgKzIzNjQ2LDYgQEAKIAkJCQlCQzZENDRCRDBDMDdFRkI2
MDA3MkQyQzkgLyogSlNIVE1MRW1iZWRFbGVtZW50Q3VzdG9tLmNwcCAqLywKIAkJCQlCQ0Q0MUFC
QTBDMDYwREU4MDBDMEU0NDYgLyogSlNIVE1MRnJhbWVTZXRFbGVtZW50Q3VzdG9tLmNwcCAqLywK
IAkJCQlCQzMwNUNBMzBDMDc4MUJCMDBDRDIwRjAgLyogSlNIVE1MT2JqZWN0RWxlbWVudEN1c3Rv
bS5jcHAgKi8sCi0JCQkJNDQ4QUQyN0EwQTQ4MTM3OTAwMjNEMTc5IC8qIEpTSFRNTE9wdGlvbnND
b2xsZWN0aW9uQ3VzdG9tLmNwcCAqLywKLQkJCQlCQzE3Rjk2NTBCNjRFQkI4MDA0QTY1Q0IgLyog
SlNIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHAgKi8sCi0JCQkJQUI0Q0I0RUEwQjhCREEzRDAw
OUY0MEIwIC8qIEpTSFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uaCAqLywKIAkJCQlENkY3OTYwQzE2
NkZGRUNFMDA3NkREMTggLyogSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcCAqLywKIAkJ
CQk3QTc0RUNCQzEwMTgzOURBMDBCRjkzOUUgLyogSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0
b20uY3BwICovLAogCQkJCUJDRTFDNDNGMEQ5ODMwRjQwMDNCMDJGMiAvKiBKU0xvY2F0aW9uQ3Vz
dG9tLmNwcCAqLywKQEAgLTI4MDg1LDcgKzI4MDczLDYgQEAKIAkJCQkxQUUyQUVDODBBMUQyOTdC
MDBCNDJCMjUgLyogSlNIVE1MUXVvdGVFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUUy
QUJBRDBBMUNFOTA1MDBCNDJCMjUgLyogSlNIVE1MU2NyaXB0RWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTFFNkVFQTgwQjYyOERCMzAwNUYyRjcwIC8qIEpTSFRNTFNlbGVjdEVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAotCQkJCUFCNENCNEVCMEI4QkRBM0QwMDlGNDBCMCAvKiBKU0hUTUxT
ZWxlY3RFbGVtZW50Q3VzdG9tLmggaW4gSGVhZGVycyAqLywKIAkJCQk5QjY5RDNCOTFCOTkxMDA3
MDBFMzUxMkIgLyogSlNIVE1MU2xvdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0NDYx
NDNDMENENjg5Q0MwMEZBREE3NSAvKiBKU0hUTUxTb3VyY2VFbGVtZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQk5NzUyRDM4RTE0MTMxMDRCMDAzMzA1QkQgLyogSlNIVE1MU3BhbkVsZW1lbnQuaCBp
biBIZWFkZXJzICovLApAQCAtMzE5MzcsNyArMzE5MjQsNiBAQAogCQkJCUJDNUE4NkI1MEMzMzY3
RTgwMEVFQTY0OSAvKiBKU0RPTVNlbGVjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDNTEz
N0NGMjExQTU4Mzc4MDA0QURCOTkgLyogSlNET01TdHJpbmdMaXN0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUJDNjQ2NDk3MTFEODIzNDkwMDY0NTVCMCAvKiBKU0RPTVN0cmluZ01hcC5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQlCQzY0NjQ5QzExRDgyMzhDMDA2NDU1QjAgLyogSlNET01TdHJpbmdN
YXBDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzY5NDU2M0MxMjE0RDk3QzAwMDdDQkFF
IC8qIEpTRE9NVG9rZW5MaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJFMzdFMDA1MTJEQkM1
QTQwMEE2QjIzMyAvKiBKU0RPTVVSTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDAzQkEwQzA5
RUIxOEM3MDA3OTdDN0YgLyogSlNET01XaW5kb3cuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMjA2
MSw3ICszMjA0Nyw2IEBACiAJCQkJQTgwRTdFOUMwQTFBODNFMzAwN0ZCOEM1IC8qIEpTSFRNTE9w
dEdyb3VwRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODBFN0U5QTBBMUE4M0UzMDA3
RkI4QzUgLyogSlNIVE1MT3B0aW9uRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0NDhB
MjlDMDBBNDZEOUNCMDAzMDc1OUYgLyogSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb24uY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJNDQ4QUQyN0MwQTQ4MTM3QTAwMjNEMTc5IC8qIEpTSFRNTE9wdGlvbnND
b2xsZWN0aW9uQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRBRDAxNzNDMTI3RTgyODYw
MDE1MDM1RiAvKiBKU0hUTUxPdXRwdXRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFB
RTJBQkE2MEExQ0U5MDUwMEI0MkIyNSAvKiBKU0hUTUxQYXJhZ3JhcGhFbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTFBRTJBQkE4MEExQ0U5MDUwMEI0MkIyNSAvKiBKU0hUTUxQYXJhbUVs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMjA3MSw3ICszMjA1Niw2IEBACiAJCQkJMUFF
MkFFQzcwQTFEMjk3QjAwQjQyQjI1IC8qIEpTSFRNTFF1b3RlRWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxQUUyQUJBQzBBMUNFOTA1MDBCNDJCMjUgLyogSlNIVE1MU2NyaXB0RWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUU2RUVBNDBCNjI4REE4MDA1RjJGNzAgLyogSlNI
VE1MU2VsZWN0RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCQzE3Rjk2NjBCNjRFQkI4
MDA0QTY1Q0IgLyogSlNIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5QjY5RDNCODFCOTkxMDA3MDBFMzUxMkIgLyogSlNIVE1MU2xvdEVsZW1lbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRTQ0NjE0M0IwQ0Q2ODlDQzAwRkFEQTc1IC8qIEpTSFRNTFNvdXJj
ZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc1MkQzOEQxNDEzMTA0QjAwMzMwNUJE
IC8qIEpTSFRNTFNwYW5FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNCaW5kaW5nc0FsbEluT25lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0JpbmRpbmdzQWxsSW5PbmUuY3BwCShyZXZpc2lv
biAyMTc3NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0JpbmRpbmdzQWxsSW5P
bmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw2IEBACiAjaW5jbHVkZSAiSlNET01H
bG9iYWxPYmplY3QuY3BwIgogI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0VGFzay5jcHAiCiAj
aW5jbHVkZSAiSlNET01Qcm9taXNlRGVmZXJyZWQuY3BwIgotI2luY2x1ZGUgIkpTRE9NU3RyaW5n
TWFwQ3VzdG9tLmNwcCIKICNpbmNsdWRlICJKU0RPTVdpbmRvd0Jhc2UuY3BwIgogI2luY2x1ZGUg
IkpTRE9NV2luZG93Q3VzdG9tLmNwcCIKICNpbmNsdWRlICJKU0RPTVdpbmRvd1Byb3BlcnRpZXMu
Y3BwIgpAQCAtNzQsOCArNzMsNiBAQAogI2luY2x1ZGUgIkpTSFRNTEVtYmVkRWxlbWVudEN1c3Rv
bS5jcHAiCiAjaW5jbHVkZSAiSlNIVE1MRnJhbWVTZXRFbGVtZW50Q3VzdG9tLmNwcCIKICNpbmNs
dWRlICJKU0hUTUxPYmplY3RFbGVtZW50Q3VzdG9tLmNwcCIKLSNpbmNsdWRlICJKU0hUTUxPcHRp
b25zQ29sbGVjdGlvbkN1c3RvbS5jcHAiCi0jaW5jbHVkZSAiSlNIVE1MU2VsZWN0RWxlbWVudEN1
c3RvbS5jcHAiCiAjaW5jbHVkZSAiSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcCIKICNp
bmNsdWRlICJKU0hpc3RvcnlDdXN0b20uY3BwIgogI2luY2x1ZGUgIkpTSW1hZ2VEYXRhQ3VzdG9t
LmNwcCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NU3RyaW5nTWFwQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVN0
cmluZ01hcEN1c3RvbS5jcHAJKHJldmlzaW9uIDIxNzc2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NU3RyaW5nTWFwQ3VzdG9tLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDYz
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiSlNET01TdHJpbmdNYXAuaCIKLQotI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRSZWFjdGlvblF1
ZXVlLmgiCi0jaW5jbHVkZSAiRE9NU3RyaW5nTWFwLmgiCi0jaW5jbHVkZSAiSlNET01Db252ZXJ0
LmgiCi0jaW5jbHVkZSAiSlNOb2RlLmgiCi0jaW5jbHVkZSA8cnVudGltZS9JZGVudGlmaWVySW5s
aW5lcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgotCi11c2luZyBuYW1l
c3BhY2UgSlNDOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWJvb2wgSlNET01TdHJpbmdNYXA6
OnB1dERlbGVnYXRlKEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYsIGJvb2wmIHB1dFJlc3VsdCkKLXsKLSAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0KLSAgICBpZiAocHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrIGN1c3RvbUVsZW1l
bnRSZWFjdGlvblN0YWNrOwotCi0gICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9XVEZT
dHJpbmcoc3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHRydWUpOwotCi0g
ICAgYXV0byByZXN1bHQgPSB3cmFwcGVkKCkuc2V0SXRlbShwcm9wZXJ0eU5hbWVUb1N0cmluZyhw
cm9wZXJ0eU5hbWUpLCBXVEZNb3ZlKHN0cmluZ1ZhbHVlKSk7Ci0gICAgaWYgKHJlc3VsdC5oYXNF
eGNlcHRpb24oKSkgewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oKnN0YXRlLCBzY29wZSwg
cmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LQotICAgIHB1dFJlc3VsdCA9IHRydWU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NU3RyaW5nTWFwQ3VzdG9tLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjpl
b2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJv
cGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTE9wdGlvbnNDb2xs
ZWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0hUTUxPcHRpb25zQ29sbGVjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDIxNzc2NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9t
LmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb24uaCIKLQotI2lu
Y2x1ZGUgIkN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9u
Q29kZS5oIgotI2luY2x1ZGUgIkpTSFRNTE9wdGlvbkVsZW1lbnQuaCIKLSNpbmNsdWRlICJKU0hU
TUxTZWxlY3RFbGVtZW50LmgiCi0jaW5jbHVkZSAiSlNIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5o
IgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbjo6aW5k
ZXhTZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUp
Ci17Ci0gICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2sgY3VzdG9tRWxlbWVudFJlYWN0aW9u
U3RhY2s7Ci0gICAgc2VsZWN0RWxlbWVudEluZGV4U2V0dGVyKCpzdGF0ZSwgd3JhcHBlZCgpLnNl
bGVjdEVsZW1lbnQoKSwgaW5kZXgsIHZhbHVlKTsKLX0KLQotfQoKUHJvcGVydHkgY2hhbmdlcyBv
bjogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0
b20uY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCwwICMjCi1u
YXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5j
cHAJKHJldmlzaW9uIDIxNzc2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRN
TFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwCShub25leGlzdGVudCkKQEAgLTEsNTQgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Vi
a2l0Lm9yZykKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTSFRNTFNlbGVjdEVsZW1l
bnRDdXN0b20uaCIKLQotI2luY2x1ZGUgIkN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmgiCi0j
aW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1
ZGUgIkhUTUxPcHRpb25FbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTFNlbGVjdEVsZW1lbnQuaCIK
LSNpbmNsdWRlICJKU0hUTUxPcHRpb25FbGVtZW50LmgiCi0jaW5jbHVkZSAiSlNIVE1MU2VsZWN0
RWxlbWVudC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7
Ci11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotCi12b2lkIHNlbGVjdEVsZW1lbnRJbmRleFNl
dHRlcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEhUTUxTZWxlY3RFbGVtZW50JiBlbGVtZW50LCB1
bnNpZ25lZCBpbmRleCwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRl
LnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0K
LSAgICBhdXRvKiBvcHRpb24gPSBjb252ZXJ0PElETE51bGxhYmxlPElETEludGVyZmFjZTxIVE1M
T3B0aW9uRWxlbWVudD4+PihzdGF0ZSwgdmFsdWUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgdm9pZCgpKTsKLQotICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhy
b3dTY29wZSwgZWxlbWVudC5zZXRJdGVtKGluZGV4LCBvcHRpb24pKTsKLX0KLQotdm9pZCBKU0hU
TUxTZWxlY3RFbGVtZW50OjppbmRleFNldHRlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHVuc2ln
bmVkIGluZGV4LCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgQ3VzdG9tRWxlbWVudFJlYWN0
aW9uU3RhY2sgY3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2s7Ci0gICAgc2VsZWN0RWxlbWVudElu
ZGV4U2V0dGVyKCpzdGF0ZSwgd3JhcHBlZCgpLCBpbmRleCwgdmFsdWUpOwotfQotCi19CgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxTZWxlY3RF
bGVtZW50Q3VzdG9tLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEg
KzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxTZWxlY3RFbGVtZW50
Q3VzdG9tLmgJKHJldmlzaW9uIDIxNzc2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uaAkobm9uZXhpc3RlbnQpCkBAIC0xLDQyICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSAKLSNw
cmFnbWEgb25jZQotCi1uYW1lc3BhY2UgSlNDIHsKLWNsYXNzIEV4ZWNTdGF0ZTsKLWNsYXNzIEpT
VmFsdWU7Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSFRNTFNlbGVjdEVsZW1l
bnQ7Ci0KLXZvaWQgc2VsZWN0RWxlbWVudEluZGV4U2V0dGVyKEpTQzo6RXhlY1N0YXRlJiwgSFRN
TFNlbGVjdEVsZW1lbnQmLCB1bnNpZ25lZCBpbmRleCwgSlNDOjpKU1ZhbHVlKTsKLQotfQoKUHJv
cGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MU2VsZWN0
RWxlbWVudEN1c3RvbS5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSAr
MCwwICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCShyZXZpc2lv
biAyMTc3NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCwzNCArNjAsNCBAQCB2b2lkIEpTU3RvcmFnZTo6Z2V0
T3duUHJvcGVydHlOYW1lcyhKU09iCiAgICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcygmdGhp
c09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCi1ib29sIEpTU3RvcmFn
ZTo6cHV0RGVsZWdhdGUoRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiwgYm9vbCYgcHV0UmVzdWx0KQotewot
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLQotICAgIGlmIChwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgLy8gT25seSBwZXJmb3JtIHRoZSBjdXN0b20gcHV0IGlmIHRo
ZSBvYmplY3QgZG9lc24ndCBoYXZlIGEgbmF0aXZlIHByb3BlcnR5IGJ5IHRoaXMgbmFtZS4KLSAg
ICAvLyBTaW5jZSBoYXNQcm9wZXJ0eSgpIHdvdWxkIGVuZCB1cCBjYWxsaW5nIGNhbkdldEl0ZW1z
Rm9yTmFtZSgpIGFuZCBiZSBmb29sZWQsIHdlIG5lZWQgdG8gY2hlY2sKLSAgICAvLyB0aGUgbmF0
aXZlIHByb3BlcnR5IHNsb3RzIG1hbnVhbGx5LgotICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhp
cywgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldE93blByb3BlcnR5IH07Ci0K
LSAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXMtPmdldFByb3RvdHlwZURpcmVjdCgpOwotICAg
IGlmIChwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9w
ZXJ0eVNsb3Qoc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGF1dG8gc3RyaW5nVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRl
LCB2YWx1ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdHJ1ZSk7Ci0KLSAgICBh
dXRvIHNldEl0ZW1SZXN1bHQgPSB3cmFwcGVkKCkuc2V0SXRlbShwcm9wZXJ0eU5hbWVUb1N0cmlu
Zyhwcm9wZXJ0eU5hbWUpLCBzdHJpbmdWYWx1ZSk7Ci0gICAgaWYgKHNldEl0ZW1SZXN1bHQuaGFz
RXhjZXB0aW9uKCkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKCpzdGF0ZSwgc2NvcGUs
IHNldEl0ZW1SZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgcHV0UmVzdWx0ID0gdHJ1ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDIxNzc2NCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5n
IGNvcHkpCkBAIC00MDYsMTQzICs0MDYsMTM4IEBAIHN1YiBTaG91bGRVc2VHbG9iYWxPYmplY3RQ
cm90b3R5cGUKIAogc3ViIEdlbmVyYXRlSW5kZXhlZEdldHRlcgogewotICAgIG15ICgkaW50ZXJm
YWNlLCAkaW5kZXhlZEdldHRlck9wZXJhdGlvbikgPSBAXzsKLQotICAgIG15IEBvdXRwdXQgPSAo
KTsKLQorICAgIG15ICgkb3V0cHV0QXJyYXksICRpbmRlbnQsICRpbnRlcmZhY2UsICRpbmRleGVk
R2V0dGVyT3BlcmF0aW9uKSA9IEBfOworICAgIAogICAgIG15IEBhdHRyaWJ1dGVzID0gKCk7Ci0g
ICAgcHVzaChAYXR0cmlidXRlcywgIlJlYWRPbmx5IikgaWYgISRpbnRlcmZhY2UtPmV4dGVuZGVk
QXR0cmlidXRlcy0+e0N1c3RvbU5hbWVkU2V0dGVyfTsKKyAgICBwdXNoKEBhdHRyaWJ1dGVzLCAi
UmVhZE9ubHkiKSBpZiAhR2V0SW5kZXhlZFNldHRlck9wZXJhdGlvbigkaW50ZXJmYWNlKSAmJiAh
JGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q3VzdG9tTmFtZWRTZXR0ZXJ9OwogCiAg
ICAgbXkgJGF0dHJpYnV0ZVN0cmluZyA9ICgoQGF0dHJpYnV0ZXMgPiAwKSA/IGpvaW4oIiB8ICIs
IEBhdHRyaWJ1dGVzKSA6ICIwIik7CiAKLSAgICBteSAkaW5kZXhlZEdldHRlckZ1bmN0aW9uTmFt
ZSA9ICRpbmRleGVkR2V0dGVyT3BlcmF0aW9uLT5uYW1lIHx8ICJpdGVtIjsKKyAgICBteSAkaW5k
ZXhlZEdldHRlckZ1bmN0aW9uTmFtZSA9ICRpbmRleGVkR2V0dGVyT3BlcmF0aW9uLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPntJbXBsZW1lbnRlZEFzfSB8fCAkaW5kZXhlZEdldHRlck9wZXJhdGlvbi0+
bmFtZSB8fCAiaXRlbSI7CiAgICAgbXkgJG5hdGl2ZVRvSlNDb252ZXJzaW9uID0gTmF0aXZlVG9K
U1ZhbHVlVXNpbmdQb2ludGVycygkaW5kZXhlZEdldHRlck9wZXJhdGlvbiwgJGludGVyZmFjZSwg
InRoaXNPYmplY3QtPndyYXBwZWQoKS4ke2luZGV4ZWRHZXR0ZXJGdW5jdGlvbk5hbWV9KGluZGV4
KSIsICIqdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCkiKTsKIAotICAgIHB1c2goQG91dHB1dCwg
IiAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCAke2F0dHJpYnV0ZVN0cmluZ30sICR7
bmF0aXZlVG9KU0NvbnZlcnNpb259KTtcbiIpOwotICAgIHB1c2goQG91dHB1dCwgIiAgICAgICAg
cmV0dXJuIHRydWU7XG4iKTsKLQotICAgIHJldHVybiBAb3V0cHV0OworICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgJGluZGVudCAuICJzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsICR7YXR0cmlidXRl
U3RyaW5nfSwgJHtuYXRpdmVUb0pTQ29udmVyc2lvbn0pO1xuIik7CisgICAgcHVzaChAJG91dHB1
dEFycmF5LCAkaW5kZW50IC4gInJldHVybiB0cnVlO1xuIik7CiB9CiAKIHN1YiBHZW5lcmF0ZU5h
bWVkR2V0dGVyCiB7Ci0gICAgbXkgKCRpbnRlcmZhY2UsICRuYW1lZEdldHRlck9wZXJhdGlvbikg
PSBAXzsKLQotICAgIG15IEBvdXRwdXQgPSAoKTsKKyAgICBteSAoJG91dHB1dEFycmF5LCAkaW5k
ZW50LCAkaW50ZXJmYWNlLCAkbmFtZWRHZXR0ZXJPcGVyYXRpb24pID0gQF87CiAKICAgICBteSBA
YXR0cmlidXRlcyA9ICgpOwotICAgIHB1c2goQGF0dHJpYnV0ZXMsICJSZWFkT25seSIpIGlmICEk
aW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21OYW1lZFNldHRlcn07CisgICAg
cHVzaChAYXR0cmlidXRlcywgIlJlYWRPbmx5IikgaWYgIUdldE5hbWVkU2V0dGVyT3BlcmF0aW9u
KCRpbnRlcmZhY2UpICYmICEkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21O
YW1lZFNldHRlcn07CiAgICAgcHVzaChAYXR0cmlidXRlcywgIkRvbnRFbnVtIikgaWYgJGludGVy
ZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57TGVnYWN5VW5lbnVtZXJhYmxlTmFtZWRQcm9wZXJ0
aWVzfTsKIAogICAgIG15ICRhdHRyaWJ1dGVTdHJpbmcgPSAoKEBhdHRyaWJ1dGVzID4gMCkgPyBq
b2luKCIgfCAiLCBAYXR0cmlidXRlcykgOiAiMCIpOwogCiAgICAgaWYgKCRpbnRlcmZhY2UtPmV4
dGVuZGVkQXR0cmlidXRlcy0+e0N1c3RvbU5hbWVkR2V0dGVyfSkgewotICAgICAgICBwdXNoKEBv
dXRwdXQsICIgICAgICAgIEpTVmFsdWUgdmFsdWU7XG4iKTsKLSAgICAgICAgcHVzaChAb3V0cHV0
LCAiICAgICAgICBpZiAodGhpc09iamVjdC0+bmFtZUdldHRlcihzdGF0ZSwgcHJvcGVydHlOYW1l
LCB2YWx1ZSkpIHtcbiIpOwotICAgICAgICBwdXNoKEBvdXRwdXQsICIgICAgICAgICAgICBzbG90
LnNldFZhbHVlKHRoaXNPYmplY3QsICR7YXR0cmlidXRlU3RyaW5nfSwgdmFsdWUpO1xuIik7Cisg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGluZGVudCAuICJKU1ZhbHVlIHZhbHVlO1xuIik7
CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGluZGVudCAuICJpZiAodGhpc09iamVjdC0+
bmFtZUdldHRlcihzdGF0ZSwgcHJvcGVydHlOYW1lLCB2YWx1ZSkpIHtcbiIpOworICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQgLiAiICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVj
dCwgJHthdHRyaWJ1dGVTdHJpbmd9LCB2YWx1ZSk7XG4iKTsKICAgICB9IGVsc2UgewogICAgICAg
ICBteSAkbmFtZWRHZXR0ZXJGdW5jdGlvbk5hbWUgPSAkbmFtZWRHZXR0ZXJPcGVyYXRpb24tPmV4
dGVuZGVkQXR0cmlidXRlcy0+e0ltcGxlbWVudGVkQXN9IHx8ICRuYW1lZEdldHRlck9wZXJhdGlv
bi0+bmFtZSB8fCAibmFtZWRJdGVtIjsKICAgICAgICAgbXkgJGl0ZW1WYXJpYWJsZSA9ICJpdGVt
IjsKLSAgICAgICAgcHVzaChAb3V0cHV0LCAiICAgICAgICBhdXRvIGl0ZW0gPSB0aGlzT2JqZWN0
LT53cmFwcGVkKCkuJHtuYW1lZEdldHRlckZ1bmN0aW9uTmFtZX0ocHJvcGVydHlOYW1lVG9BdG9t
aWNTdHJpbmcocHJvcGVydHlOYW1lKSk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAkaW5kZW50IC4gImF1dG8gaXRlbSA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS4ke25hbWVkR2V0
dGVyRnVuY3Rpb25OYW1lfShwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUp
KTtcbiIpOwogCiAgICAgICAgIGlmICgkbmFtZWRHZXR0ZXJPcGVyYXRpb24tPmV4dGVuZGVkQXR0
cmlidXRlcy0+e01heVRocm93RXhjZXB0aW9ufSkgewotICAgICAgICAgICAgcHVzaChAb3V0cHV0
LCAiICAgICAgICBpZiAoaXRlbS5oYXNFeGNlcHRpb24oKSkge1xuIik7Ci0gICAgICAgICAgICBw
dXNoKEBvdXRwdXQsICIgICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHN0YXRlLT52bSgpKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAb3V0cHV0LCAiICAg
ICAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKCpzdGF0ZSwgdGhyb3dTY29wZSwgaXRlbS5yZWxl
YXNlRXhjZXB0aW9uKCkpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBvdXRwdXQsICIgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTtcbiIpOwotICAgICAgICAgICAgcHVzaChAb3V0cHV0LCAiICAgICAg
ICB9XG5cbiIpOwotICAgICAgICAgICAgcHVzaChAb3V0cHV0LCAiICAgICAgICBhdXRvIGl0ZW1W
YWx1ZSA9IGl0ZW0ucmVsZWFzZVJldHVyblZhbHVlKCk7XG4iKTsKKyAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgJGluZGVudCAuICJpZiAoaXRlbS5oYXNFeGNlcHRpb24oKSkge1xuIik7
CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQgLiAiICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpO1xuIik7CisgICAgICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQgLiAiICAgIHByb3BhZ2F0ZUV4Y2VwdGlv
bigqc3RhdGUsIHRocm93U2NvcGUsIGl0ZW0ucmVsZWFzZUV4Y2VwdGlvbigpKTtcbiIpOworICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkaW5kZW50IC4gIiAgICByZXR1cm4gdHJ1ZTtc
biIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkaW5kZW50IC4gIn1cblxuIik7
CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQgLiAiYXV0byBpdGVtVmFs
dWUgPSBpdGVtLnJlbGVhc2VSZXR1cm5WYWx1ZSgpO1xuIik7CiAKICAgICAgICAgICAgICRpdGVt
VmFyaWFibGUgPSAiaXRlbVZhbHVlIjsKICAgICAgICAgfQogCiAgICAgICAgIG15ICRJRExUeXBl
ID0gR2V0SURMVHlwZSgkaW50ZXJmYWNlLCAkbmFtZWRHZXR0ZXJPcGVyYXRpb24tPnR5cGUpOwot
ICAgICAgICBwdXNoKEBvdXRwdXQsICIgICAgICAgIGlmICghJHtJRExUeXBlfTo6aXNOdWxsVmFs
dWUoJHtpdGVtVmFyaWFibGV9KSkge1xuIik7Ci0KICAgICAgICAgbXkgJG5hdGl2ZVRvSlNDb252
ZXJzaW9uID0gTmF0aXZlVG9KU1ZhbHVlVXNpbmdQb2ludGVycygkbmFtZWRHZXR0ZXJPcGVyYXRp
b24sICRpbnRlcmZhY2UsICRpdGVtVmFyaWFibGUsICIqdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0
KCkiLCAxKTsKLSAgICAgICAgcHVzaChAb3V0cHV0LCAiICAgICAgICAgICAgc2xvdC5zZXRWYWx1
ZSh0aGlzT2JqZWN0LCAke2F0dHJpYnV0ZVN0cmluZ30sICR7bmF0aXZlVG9KU0NvbnZlcnNpb259
KTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQgLiAiaWYgKCEke0lE
TFR5cGV9Ojppc051bGxWYWx1ZSgke2l0ZW1WYXJpYWJsZX0pKSB7XG4iKTsKKyAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAkaW5kZW50IC4gIiAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3Qs
ICR7YXR0cmlidXRlU3RyaW5nfSwgJHtuYXRpdmVUb0pTQ29udmVyc2lvbn0pO1xuIik7CiAgICAg
fQogICAgIAotICAgIHB1c2goQG91dHB1dCwgIiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuIik7
Ci0gICAgcHVzaChAb3V0cHV0LCAiICAgICAgICB9XG4iKTsKLQotICAgIHJldHVybiBAb3V0cHV0
OworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGluZGVudCAuICIgICAgcmV0dXJuIHRydWU7XG4i
KTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQgLiAifVxuIik7CiB9CiAKIHN1YiBH
ZW5lcmF0ZUdldE93blByb3BlcnR5U2xvdEJvZHkKIHsKLSAgICBteSAoJGludGVyZmFjZSwgJGNs
YXNzTmFtZSwgJGluZGV4ZWRHZXR0ZXJPcGVyYXRpb24sICRuYW1lZEdldHRlck9wZXJhdGlvbikg
PSBAXzsKLQotICAgIG15IEBvdXRwdXQgPSAoKTsKLQorICAgIG15ICgkb3V0cHV0QXJyYXksICRp
bnRlcmZhY2UsICRjbGFzc05hbWUpID0gQF87CisgICAgCisgICAgcmV0dXJuIGlmICRpbnRlcmZh
Y2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0N1c3RvbUdldE93blByb3BlcnR5U2xvdH07CisgICAg
CisgICAgbXkgJG5hbWVkR2V0dGVyT3BlcmF0aW9uID0gR2V0TmFtZWRHZXR0ZXJPcGVyYXRpb24o
JGludGVyZmFjZSk7CisgICAgbXkgJGluZGV4ZWRHZXR0ZXJPcGVyYXRpb24gPSBHZXRJbmRleGVk
R2V0dGVyT3BlcmF0aW9uKCRpbnRlcmZhY2UpOworICAgIAogICAgIG15ICRvd25Qcm9wZXJ0eUNo
ZWNrID0gc3ViIHsKLSAgICAgICAgcHVzaChAb3V0cHV0LCAiICAgIGlmIChCYXNlOjpnZXRPd25Q
cm9wZXJ0eVNsb3QodGhpc09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpXG4iKTsK
LSAgICAgICAgcHVzaChAb3V0cHV0LCAiICAgICAgICByZXR1cm4gdHJ1ZTtcbiIpOworICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0
aGlzT2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90KSlcbiIpOworICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiB0cnVlO1xuIik7CiAgICAgfTsKIAogICAg
ICMgRklYTUU6IEFzIHBlciB0aGUgV2ViIElETCBzcGVjaWZpY2F0aW9uLCB0aGUgcHJvdG90eXBl
IGNoZWNrIGlzIHN1cHBvc2VkIHRvIHNraXAgIm5hbWVkIHByb3BlcnRpZXMgb2JqZWN0cyI6CiAg
ICAgIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNkZm4tbmFtZWQtcHJvcGVydHkt
dmlzaWJpbGl0eQogICAgICMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jZGZuLW5h
bWVkLXByb3BlcnRpZXMtb2JqZWN0CiAgICAgbXkgJHByb3RvdHlwZUNoZWNrID0gc3ViIHsKLSAg
ICAgICAgcHVzaChAb3V0cHV0LCAiICAgIEpTVmFsdWUgcHJvdG8gPSB0aGlzT2JqZWN0LT5nZXRQ
cm90b3R5cGVEaXJlY3QoKTtcbiIpOwotICAgICAgICBwdXNoKEBvdXRwdXQsICIgICAgaWYgKHBy
b3RvLmlzT2JqZWN0KCkgJiYganNDYXN0PEpTT2JqZWN0Kj4ocHJvdG8pLT5oYXNQcm9wZXJ0eShz
dGF0ZSwgcHJvcGVydHlOYW1lKSlcbiIpOwotICAgICAgICBwdXNoKEBvdXRwdXQsICIgICAgICAg
IHJldHVybiBmYWxzZTtcblxuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBK
U1ZhbHVlIHByb3RvID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KCk7XG4iKTsKKyAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChwcm90by5pc09iamVjdCgpICYmIGpz
Q2FzdDxKU09iamVjdCo+KHByb3RvKS0+aGFzUHJvcGVydHkoc3RhdGUsIHByb3BlcnR5TmFtZSkp
XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gZmFsc2U7
XG5cbiIpOwogICAgIH07CiAKLSAgICBwdXNoKEBvdXRwdXQsICJib29sICR7Y2xhc3NOYW1lfTo6
Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdClcbiIpOwotICAgIHB1
c2goQG91dHB1dCwgIntcbiIpOwotICAgIHB1c2goQG91dHB1dCwgIiAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KG9iamVjdCk7XG4iKTsKLSAgICBwdXNoKEBvdXRw
dXQsICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpO1xu
Iik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiYm9vbCAke2NsYXNzTmFtZX06OmdldE93blBy
b3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpXG4iKTsKKyAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICJ7XG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihvYmplY3QpO1xuIik7CisgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTtcbiIpOwogCiAKICAgICBpZiAoJGluZGV4ZWRHZXR0ZXJPcGVyYXRpb24pIHsKLSAg
ICAgICAgcHVzaChAb3V0cHV0LCAiICAgIGF1dG8gb3B0aW9uYWxJbmRleCA9IHBhcnNlSW5kZXgo
cHJvcGVydHlOYW1lKTtcbiIpOwotICAgICAgICBwdXNoKEBvdXRwdXQsICIgICAgaWYgKG9wdGlv
bmFsSW5kZXggJiYgb3B0aW9uYWxJbmRleC52YWx1ZSgpIDwgdGhpc09iamVjdC0+d3JhcHBlZCgp
Lmxlbmd0aCgpKSB7XG4iKTsKLSAgICAgICAgcHVzaChAb3V0cHV0LCAiICAgICAgICBhdXRvIGlu
ZGV4ID0gb3B0aW9uYWxJbmRleC52YWx1ZSgpO1xuIik7Ci0gICAgICAgIHB1c2goQG91dHB1dCwg
R2VuZXJhdGVJbmRleGVkR2V0dGVyKCRpbnRlcmZhY2UsICRpbmRleGVkR2V0dGVyT3BlcmF0aW9u
KSk7Ci0gICAgICAgIHB1c2goQG91dHB1dCwgIiAgICB9XG4iKTsKKyAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgIGF1dG8gb3B0aW9uYWxJbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlO
YW1lKTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKG9wdGlvbmFs
SW5kZXggJiYgb3B0aW9uYWxJbmRleC52YWx1ZSgpIDwgdGhpc09iamVjdC0+d3JhcHBlZCgpLmxl
bmd0aCgpKSB7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBhdXRv
IGluZGV4ID0gb3B0aW9uYWxJbmRleC52YWx1ZSgpO1xuIik7CisgICAgICAgIEdlbmVyYXRlSW5k
ZXhlZEdldHRlcigkb3V0cHV0QXJyYXksICIgICAgICAgICIsICRpbnRlcmZhY2UsICRpbmRleGVk
R2V0dGVyT3BlcmF0aW9uKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIH1cbiIp
OwogICAgIH0KIAogICAgIG15ICRoYXNOYW1lZEdldHRlciA9ICRuYW1lZEdldHRlck9wZXJhdGlv
biB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21OYW1lZEdldHRlcn07
CiAgICAgaWYgKCRoYXNOYW1lZEdldHRlcikgewotICAgICAgICBpZiAoISRpbnRlcmZhY2UtPmV4
dGVuZGVkQXR0cmlidXRlcy0+e092ZXJyaWRlQnVpbHRpbnN9KSB7CisgICAgICAgIGlmICghJGNv
ZGVHZW5lcmF0b3ItPkluaGVyaXRzRXh0ZW5kZWRBdHRyaWJ1dGUoJGludGVyZmFjZSwgIk92ZXJy
aWRlQnVpbHRpbnMiKSkgewogICAgICAgICAgICAgJiRvd25Qcm9wZXJ0eUNoZWNrKCk7CiAgICAg
ICAgICAgICAmJHByb3RvdHlwZUNoZWNrKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCRpbmRl
eGVkR2V0dGVyT3BlcmF0aW9uKSB7Ci0gICAgICAgICAgICBwdXNoKEBvdXRwdXQsICIgICAgaWYg
KCFvcHRpb25hbEluZGV4ICYmIHRoaXNPYmplY3QtPmNsYXNzSW5mbygpID09IGluZm8oKSAmJiAh
cHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpIHtcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIGlmICghb3B0aW9uYWxJbmRleCAmJiB0aGlzT2JqZWN0LT5jbGFzc0luZm8o
KSA9PSBpbmZvKCkgJiYgIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7XG4iKTsKICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIHB1c2goQG91dHB1dCwgIiAgICBpZiAodGhpc09iamVjdC0+
Y2xhc3NJbmZvKCkgPT0gaW5mbygpICYmICFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkge1xuIik7
CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKHRoaXNPYmplY3QtPmNs
YXNzSW5mbygpID09IGluZm8oKSAmJiAhcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpIHtcbiIpOwog
ICAgICAgICB9Ci0gICAgICAgIHB1c2goQG91dHB1dCwgR2VuZXJhdGVOYW1lZEdldHRlcigkaW50
ZXJmYWNlLCAkbmFtZWRHZXR0ZXJPcGVyYXRpb24pKTsKLSAgICAgICAgcHVzaChAb3V0cHV0LCAi
ICAgIH1cbiIpOworICAgICAgICBHZW5lcmF0ZU5hbWVkR2V0dGVyKCRvdXRwdXRBcnJheSwgIiAg
ICAgICAgIiwgJGludGVyZmFjZSwgJG5hbWVkR2V0dGVyT3BlcmF0aW9uKTsKKyAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIH1cbiIpOwogICAgIH0KIAotICAgIGlmICgkaW50ZXJmYWNl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2Ny
aXB0b3J9KSB7Ci0gICAgICAgIHB1c2goQG91dHB1dCwgIiAgICBpZiAodGhpc09iamVjdC0+Z2V0
T3duUHJvcGVydHlTbG90RGVsZWdhdGUoc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpXG4iKTsK
LSAgICAgICAgcHVzaChAb3V0cHV0LCAiICAgICAgICByZXR1cm4gdHJ1ZTtcbiIpOworICAgIGlm
ICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21HZXRPd25Qcm9wZXJ0eVNs
b3RBbmREZXNjcmlwdG9yfSkgeworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYg
KHRoaXNPYmplY3QtPmdldE93blByb3BlcnR5U2xvdERlbGVnYXRlKHN0YXRlLCBwcm9wZXJ0eU5h
bWUsIHNsb3QpKVxuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0
dXJuIHRydWU7XG4iKTsKICAgICB9CiAKLSAgICBpZiAoISRoYXNOYW1lZEdldHRlciB8fCAkaW50
ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntPdmVycmlkZUJ1aWx0aW5zfSkgeworICAgIGlm
ICghJGhhc05hbWVkR2V0dGVyIHx8ICRjb2RlR2VuZXJhdG9yLT5Jbmhlcml0c0V4dGVuZGVkQXR0
cmlidXRlKCRpbnRlcmZhY2UsICJPdmVycmlkZUJ1aWx0aW5zIikpIHsKICAgICAgICAgJiRvd25Q
cm9wZXJ0eUNoZWNrKCk7CiAgICAgfQogCi0gICAgcHVzaChAb3V0cHV0LCAiICAgIHJldHVybiBm
YWxzZTtcbiIpOwotICAgIHB1c2goQG91dHB1dCwgIn1cblxuIik7Ci0KLSAgICByZXR1cm4gQG91
dHB1dDsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJuIGZhbHNlO1xuIik7Cisg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxuXG4iKTsKIH0KIAogc3ViIEdlbmVyYXRlR2V0T3du
UHJvcGVydHlTbG90Qm9keUJ5SW5kZXgKIHsKLSAgICBteSAoJGludGVyZmFjZSwgJGNsYXNzTmFt
ZSwgJGluZGV4ZWRHZXR0ZXJPcGVyYXRpb24sICRuYW1lZEdldHRlck9wZXJhdGlvbikgPSBAXzsK
LQotICAgIG15IEBvdXRwdXQgPSAoKTsKLQotICAgIHB1c2goQG91dHB1dCwgImJvb2wgJHtjbGFz
c05hbWV9OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpXG4iKTsKLSAg
ICBwdXNoKEBvdXRwdXQsICJ7XG4iKTsKLSAgICBwdXNoKEBvdXRwdXQsICIgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihvYmplY3QpO1xuIik7Ci0gICAgcHVzaChA
b3V0cHV0LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTtcbiIpOworICAgIG15ICgkb3V0cHV0QXJyYXksICRpbnRlcmZhY2UsICRjbGFzc05hbWUpID0g
QF87CisgICAgCisgICAgcmV0dXJuIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+
e0N1c3RvbUdldE93blByb3BlcnR5U2xvdEJ5SW5kZXh9OworICAgIAorICAgIG15ICRuYW1lZEdl
dHRlck9wZXJhdGlvbiA9IEdldE5hbWVkR2V0dGVyT3BlcmF0aW9uKCRpbnRlcmZhY2UpOworICAg
IG15ICRpbmRleGVkR2V0dGVyT3BlcmF0aW9uID0gR2V0SW5kZXhlZEdldHRlck9wZXJhdGlvbigk
aW50ZXJmYWNlKTsKKyAgICAKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJib29sICR7Y2xhc3NO
YW1lfTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KVxuIik7CisgICAg
cHVzaChAJG91dHB1dEFycmF5LCAie1xuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05hbWV9Kj4ob2JqZWN0KTtcbiIpOwor
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7XG4iKTsKICAgICAKICAgICAjIFNpbmsgdGhlIGludC10by1zdHJp
bmcgY29udmVyc2lvbiB0aGF0IGhhcHBlbnMgd2hlbiB3ZSBjcmVhdGUgYSBQcm9wZXJ0eU5hbWUK
ICAgICAjIHRvIHRoZSBwb2ludCB3aGVyZSB3ZSBhY3R1YWxseSBuZWVkIGl0LgpAQCAtNTUxLDU1
ICs1NDYsNTUgQEAgc3ViIEdlbmVyYXRlR2V0T3duUHJvcGVydHlTbG90Qm9keUJ5SW5kZQogICAg
ICAgICBpZiAoJGdlbmVyYXRlZFByb3BlcnR5TmFtZSkgewogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9Ci0gICAgICAgIHB1c2goQG91dHB1dCwgIiAgICBJZGVudGlmaWVyIHByb3BlcnR5
TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTtcbiIpOworICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVy
Ojpmcm9tKHN0YXRlLCBpbmRleCk7XG4iKTsKICAgICAgICAgJGdlbmVyYXRlZFByb3BlcnR5TmFt
ZSA9IDE7CiAgICAgfTsKICAgICAKICAgICBpZiAoJGluZGV4ZWRHZXR0ZXJPcGVyYXRpb24pIHsK
LSAgICAgICAgcHVzaChAb3V0cHV0LCAiICAgIGlmIChMSUtFTFkoaW5kZXggPCB0aGlzT2JqZWN0
LT53cmFwcGVkKCkubGVuZ3RoKCkpKSB7XG4iKTsKLSAgICAgICAgcHVzaChAb3V0cHV0LCBHZW5l
cmF0ZUluZGV4ZWRHZXR0ZXIoJGludGVyZmFjZSwgJGluZGV4ZWRHZXR0ZXJPcGVyYXRpb24pKTsK
LSAgICAgICAgcHVzaChAb3V0cHV0LCAiICAgIH1cbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgaWYgKExJS0VMWShpbmRleCA8IHRoaXNPYmplY3QtPndyYXBwZWQoKS5sZW5n
dGgoKSkpIHtcbiIpOworICAgICAgICBHZW5lcmF0ZUluZGV4ZWRHZXR0ZXIoJG91dHB1dEFycmF5
LCAiICAgICAgICAiLCAkaW50ZXJmYWNlLCAkaW5kZXhlZEdldHRlck9wZXJhdGlvbik7CisgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB9XG4iKTsKICAgICB9CiAKICAgICAjIEluZGV4
aW5nIGFuIG9iamVjdCB3aXRoIGFuIGludGVnZXIgdGhhdCBpcyBub3QgYSBzdXBwb3J0ZWQgcHJv
cGVydHkgaW5kZXggc2hvdWxkIG5vdCBjYWxsIHRoZSBuYW1lZCBwcm9wZXJ0eSBnZXR0ZXIuCiAg
ICAgIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNpZGwtaW5kZXhlZC1wcm9wZXJ0
aWVzCiAgICAgaWYgKCEkaW5kZXhlZEdldHRlck9wZXJhdGlvbiAmJiAoJG5hbWVkR2V0dGVyT3Bl
cmF0aW9uIHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0N1c3RvbU5hbWVkR2V0
dGVyfSkpIHsKICAgICAgICAgJiRwcm9wZXJ0eU5hbWVHZW5lcmF0aW9uKCk7Ci0gICAgICAgIHB1
c2goQG91dHB1dCwgIiAgICBpZiAodGhpc09iamVjdC0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKSB7
XG4iKTsKLSAgICAgICAgcHVzaChAb3V0cHV0LCBHZW5lcmF0ZU5hbWVkR2V0dGVyKCRpbnRlcmZh
Y2UsICRuYW1lZEdldHRlck9wZXJhdGlvbikpOwotICAgICAgICBwdXNoKEBvdXRwdXQsICIgICAg
fVxuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAodGhpc09iamVjdC0+
Y2xhc3NJbmZvKCkgPT0gaW5mbygpKSB7XG4iKTsKKyAgICAgICAgR2VuZXJhdGVOYW1lZEdldHRl
cigkb3V0cHV0QXJyYXksICIgICAgICAgICIsICRpbnRlcmZhY2UsICRuYW1lZEdldHRlck9wZXJh
dGlvbik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB9XG4iKTsKICAgICB9CiAK
LSAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0b21HZXRPd25Q
cm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yfSkgeworICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPntDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yfSkgewog
ICAgICAgICAmJHByb3BlcnR5TmFtZUdlbmVyYXRpb24oKTsKLSAgICAgICAgcHVzaChAb3V0cHV0
LCAiICAgIGlmICh0aGlzT2JqZWN0LT5nZXRPd25Qcm9wZXJ0eVNsb3REZWxlZ2F0ZShzdGF0ZSwg
cHJvcGVydHlOYW1lLCBzbG90KSlcbiIpOwotICAgICAgICBwdXNoKEBvdXRwdXQsICIgICAgICAg
IHJldHVybiB0cnVlO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAo
dGhpc09iamVjdC0+Z2V0T3duUHJvcGVydHlTbG90RGVsZWdhdGUoc3RhdGUsIHByb3BlcnR5TmFt
ZSwgc2xvdCkpXG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1
cm4gdHJ1ZTtcbiIpOwogICAgIH0KIAotICAgIHB1c2goQG91dHB1dCwgIiAgICByZXR1cm4gQmFz
ZTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCh0aGlzT2JqZWN0LCBzdGF0ZSwgaW5kZXgsIHNs
b3QpO1xuIik7Ci0gICAgcHVzaChAb3V0cHV0LCAifVxuXG4iKTsKLQotICAgIHJldHVybiBAb3V0
cHV0OworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJv
cGVydHlTbG90QnlJbmRleCh0aGlzT2JqZWN0LCBzdGF0ZSwgaW5kZXgsIHNsb3QpO1xuIik7Cisg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxuXG4iKTsKIH0KIAorIyBodHRwczovL2hleWNhbS5n
aXRodWIuaW8vd2ViaWRsLyNsZWdhY3ktcGxhdGZvcm0tb2JqZWN0LXByb3BlcnR5LWVudW1lcmF0
aW9uCiBzdWIgR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eU5hbWVzCiB7Ci0gICAgbXkgKCRpbnRlcmZh
Y2UsICRjbGFzc05hbWUsICRpbmRleGVkR2V0dGVyT3BlcmF0aW9uLCAkbmFtZWRHZXR0ZXJPcGVy
YXRpb24pID0gQF87Ci0KLSAgICBteSBAb3V0cHV0ID0gKCk7Ci0KLSAgICAjIFByb3BlcnR5IGVu
dW1lcmF0aW9uIC0gaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jbGVnYWN5LXBsYXRm
b3JtLW9iamVjdC1wcm9wZXJ0eS1lbnVtZXJhdGlvbgotCi0gICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ2b2lkICR7Y2xhc3NOYW1lfTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51
bWVyYXRpb25Nb2RlIG1vZGUpXG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwot
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtj
bGFzc05hbWV9Kj4ob2JqZWN0KTtcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTtcbiIpOworICAgIG15
ICgkb3V0cHV0QXJyYXksICRpbnRlcmZhY2UsICRjbGFzc05hbWUpID0gQF87CisgICAgCisgICAg
cmV0dXJuIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0N1c3RvbUVudW1lcmF0
ZVByb3BlcnR5fTsKKyAgICAKKyAgICBteSAkbmFtZWRHZXR0ZXJPcGVyYXRpb24gPSBHZXROYW1l
ZEdldHRlck9wZXJhdGlvbigkaW50ZXJmYWNlKTsKKyAgICBteSAkaW5kZXhlZEdldHRlck9wZXJh
dGlvbiA9IEdldEluZGV4ZWRHZXR0ZXJPcGVyYXRpb24oJGludGVyZmFjZSk7CisgICAgCisgICAg
cHVzaChAJG91dHB1dEFycmF5LCAidm9pZCAke2NsYXNzTmFtZX06OmdldE93blByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lQXJyYXkm
IHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKVxuIik7CisgICAgcHVzaChAJG91
dHB1dEFycmF5LCAie1xuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8qIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05hbWV9Kj4ob2JqZWN0KTtcbiIpOworICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7XG4iKTsKIAogICAgICMgMS4gSWYgdGhlIG9iamVjdCBzdXBwb3J0cyBpbmRleGVk
IHByb3BlcnRpZXMsIHRoZW4gdGhlIG9iamVjdOKAmXMgc3VwcG9ydGVkCiAgICAgIyAgICBwcm9w
ZXJ0eSBpbmRpY2VzIGFyZSBlbnVtZXJhdGVkIGZpcnN0LCBpbiBudW1lcmljYWwgb3JkZXIuCiAg
ICAgaWYgKCRpbmRleGVkR2V0dGVyT3BlcmF0aW9uKSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGNvdW50ID0gdGhpc09iamVjdC0+d3JhcHBl
ZCgpLmxlbmd0aCgpOyBpIDwgY291bnQ7ICsraSlcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwg
aSkpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwLCBjb3VudCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5sZW5ndGgoKTsgaSA8IGNvdW50
OyArK2kpXG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBwcm9wZXJ0
eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpKSk7XG4iKTsKICAgICB9CiAKICAg
ICAjIDIuIElmIHRoZSBvYmplY3Qgc3VwcG9ydHMgbmFtZWQgcHJvcGVydGllcyBhbmQgZG9lc27i
gJl0IGltcGxlbWVudCBhbiBpbnRlcmZhY2UKQEAgLTYwOSwxMjUgKzYwNCwzMzQgQEAgc3ViIEdl
bmVyYXRlR2V0T3duUHJvcGVydHlOYW1lcwogICAgICMgICAgdGhlIGRlZmluaXRpb24gb2YgdGhl
IHNldCBvZiBzdXBwb3J0ZWQgcHJvcGVydHkgbmFtZXMuCiAgICAgaWYgKCRuYW1lZEdldHRlck9w
ZXJhdGlvbikgewogICAgICAgICBpZiAoISRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+
e0xlZ2FjeVVuZW51bWVyYWJsZU5hbWVkUHJvcGVydGllc30pIHsKLSAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVjdC0+
d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSlcbiIpOwotICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZy
b21TdHJpbmcoc3RhdGUsIHByb3BlcnR5TmFtZSkpO1xuIik7CisgICAgICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgZm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53
cmFwcGVkKCkuc3VwcG9ydGVkUHJvcGVydHlOYW1lcygpKVxuIik7CisgICAgICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZy
b21TdHJpbmcoc3RhdGUsIHByb3BlcnR5TmFtZSkpO1xuIik7CiAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAobW9kZS5pbmNsdWRlRG9udEVu
dW1Qcm9wZXJ0aWVzKCkpIHtcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVjdC0+d3JhcHBlZCgpLnN1
cHBvcnRlZFByb3BlcnR5TmFtZXMoKSlcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHN0YXRlLCBwcm9wZXJ0eU5hbWUpKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgfVxuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYg
KG1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygpKSB7XG4iKTsKKyAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgZm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0aGlz
T2JqZWN0LT53cmFwcGVkKCkuc3VwcG9ydGVkUHJvcGVydHlOYW1lcygpKVxuIik7CisgICAgICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCBwcm9wZXJ0eU5hbWUpKTtcbiIpOworICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIH1cbiIpOwogICAgICAgICB9CiAgICAgfQor
ICAgIAogICAgICMgMy4gRmluYWxseSwgYW55IGVudW1lcmFibGUgb3duIHByb3BlcnRpZXMgb3Ig
cHJvcGVydGllcyBmcm9tIHRoZSBvYmplY3TigJlzCiAgICAgIyAgICBwcm90b3R5cGUgY2hhaW4g
YXJlIHRoZW4gZW51bWVyYXRlZCwgaW4gbm8gZGVmaW5lZCBvcmRlci4KLSAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIHN0YXRl
LCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTtcbiIpOwotICAgIHB1c2goQGltcGxDb250ZW50LCAifVxu
XG4iKTsKLQotICAgIHJldHVybiBAb3V0cHV0OworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5h
bWVzLCBtb2RlKTtcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIn1cblxuIik7CiB9CiAK
LXN1YiBHZW5lcmF0ZVB1dAorIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNpbnZv
a2UtaW5kZXhlZC1zZXR0ZXIKK3N1YiBHZW5lcmF0ZUludm9rZUluZGV4ZWRQcm9wZXJ0eVNldHRl
cgogewotICAgIG15ICgkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkaW5kZXhlZFNldHRlck9wZXJh
dGlvbiwgJG5hbWVkU2V0dGVyT3BlcmF0aW9uKSA9IEBfOwotCi0gICAgYXNzZXJ0KCJOYW1lZCBz
ZXR0ZXJzIGFyZSBub3Qgc3VwcG9ydGVkLiIpIGlmICRuYW1lZFNldHRlck9wZXJhdGlvbjsKKyAg
ICBteSAoJG91dHB1dEFycmF5LCAkaW5kZW50LCAkaW50ZXJmYWNlLCAkaW5kZXhlZFNldHRlck9w
ZXJhdGlvbiwgJGluZGV4RXhwcmVzc2lvbiwgJHZhbHVlKSA9IEBfOworICAgIAorICAgICMgVGhl
IHNlY29uZCBhcmd1bWVudCBvZiB0aGUgaW5kZXhlZCBzZXR0ZXIgb3BlcmF0aW9uIGlzIHRoZSBh
cmd1bWVudCBiZWluZyBjb252ZXJ0ZWQuCisgICAgbXkgJGFyZ3VtZW50ID0gQHskaW5kZXhlZFNl
dHRlck9wZXJhdGlvbi0+YXJndW1lbnRzfVsxXTsKKyAgICBteSAkbmF0aXZlVmFsdWUgPSBKU1Zh
bHVlVG9OYXRpdmUoJGludGVyZmFjZSwgJGFyZ3VtZW50LCAkdmFsdWUsICRpbmRleGVkU2V0dGVy
T3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDb25kaXRpb25hbH0sICJzdGF0ZSIsICIq
c3RhdGUiLCAidGhpc09iamVjdCIsICIiLCAiIik7CisgICAgCisgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAkaW5kZW50IC4gImF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3Rh
dGUtPnZtKCkpO1xuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAkaW5kZW50IC4gImF1dG8g
bmF0aXZlVmFsdWUgPSAke25hdGl2ZVZhbHVlfTtcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgJGluZGVudCAuICJSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpO1xuIik7
CisgICAgCisgICAgbXkgJGluZGV4ZWRTZXR0ZXJGdW5jdGlvbk5hbWUgPSAkaW5kZXhlZFNldHRl
ck9wZXJhdGlvbi0+bmFtZSB8fCAic2V0SXRlbSI7CisgICAgbXkgJG5hdGl2ZVZhbHVlUGFzc0V4
cHJlc3Npb24gPSBQYXNzQXJndW1lbnRFeHByZXNzaW9uKCJuYXRpdmVWYWx1ZSIsICRhcmd1bWVu
dCk7CisgICAgbXkgJGZ1bmN0aW9uU3RyaW5nID0gInRoaXNPYmplY3QtPndyYXBwZWQoKS4ke2lu
ZGV4ZWRTZXR0ZXJGdW5jdGlvbk5hbWV9KCR7aW5kZXhFeHByZXNzaW9ufSwgJHtuYXRpdmVWYWx1
ZVBhc3NFeHByZXNzaW9ufSkiOworICAgICRmdW5jdGlvblN0cmluZyA9ICJwcm9wYWdhdGVFeGNl
cHRpb24oKnN0YXRlLCB0aHJvd1Njb3BlLCAke2Z1bmN0aW9uU3RyaW5nfSkiIGlmIE5lZWRzRXhw
bGljaXRQcm9wYWdhdGVFeGNlcHRpb25DYWxsKCRpbmRleGVkU2V0dGVyT3BlcmF0aW9uKTsKKyAg
ICAKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQgLiAkZnVuY3Rpb25TdHJpbmcgLiAi
O1xuIik7Cit9CiAKLSAgICBteSBAb3V0cHV0ID0gKCk7CisjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1
Yi5pby93ZWJpZGwvI2ludm9rZS1uYW1lZC1zZXR0ZXIKK3N1YiBHZW5lcmF0ZUludm9rZU5hbWVk
UHJvcGVydHlTZXR0ZXIKK3sKKyAgICBteSAoJG91dHB1dEFycmF5LCAkaW5kZW50LCAkaW50ZXJm
YWNlLCAkbmFtZWRTZXR0ZXJPcGVyYXRpb24sICR2YWx1ZSkgPSBAXzsKKyAgICAKKyAgICBteSAk
YXJndW1lbnQgPSBAeyRuYW1lZFNldHRlck9wZXJhdGlvbi0+YXJndW1lbnRzfVsxXTsKKyAgICBt
eSAkbmF0aXZlVmFsdWUgPSBKU1ZhbHVlVG9OYXRpdmUoJGludGVyZmFjZSwgJGFyZ3VtZW50LCAk
dmFsdWUsICRuYW1lZFNldHRlck9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q29uZGl0
aW9uYWx9LCAic3RhdGUiLCAiKnN0YXRlIiwgInRoaXNPYmplY3QiLCAiIiwgIiIpOworICAgIAor
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGluZGVudCAuICJhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTtcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgJGluZGVudCAuICJhdXRvIG5hdGl2ZVZhbHVlID0gJHtuYXRpdmVWYWx1ZX07XG4iKTsKKyAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQgLiAiUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCB0cnVlKTtcbiIpOworICAgIAorICAgIG15ICRuYW1lZFNldHRlckZ1bmN0aW9uTmFt
ZSA9ICRuYW1lZFNldHRlck9wZXJhdGlvbi0+bmFtZSB8fCAic2V0TmFtZWRJdGVtIjsKKyAgICBt
eSAkbmF0aXZlVmFsdWVQYXNzRXhwcmVzc2lvbiA9IFBhc3NBcmd1bWVudEV4cHJlc3Npb24oIm5h
dGl2ZVZhbHVlIiwgJGFyZ3VtZW50KTsKKyAgICBteSAkZnVuY3Rpb25TdHJpbmcgPSAidGhpc09i
amVjdC0+d3JhcHBlZCgpLiR7bmFtZWRTZXR0ZXJGdW5jdGlvbk5hbWV9KHByb3BlcnR5TmFtZVRv
U3RyaW5nKHByb3BlcnR5TmFtZSksICR7bmF0aXZlVmFsdWVQYXNzRXhwcmVzc2lvbn0pIjsKKyAg
ICAkZnVuY3Rpb25TdHJpbmcgPSAicHJvcGFnYXRlRXhjZXB0aW9uKCpzdGF0ZSwgdGhyb3dTY29w
ZSwgJHtmdW5jdGlvblN0cmluZ30pIiBpZiBOZWVkc0V4cGxpY2l0UHJvcGFnYXRlRXhjZXB0aW9u
Q2FsbCgkbmFtZWRTZXR0ZXJPcGVyYXRpb24pOworICAgIAorICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgJGluZGVudCAuICRmdW5jdGlvblN0cmluZyAuICI7XG4iKTsKK30KIAotICAgIHB1c2goQG91
dHB1dCwgImJvb2wgJHtjbGFzc05hbWV9OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0
YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0
eVNsb3QmIHNsb3QpXG4iKTsKLSAgICBwdXNoKEBvdXRwdXQsICJ7XG4iKTsKLSAgICBwdXNoKEBv
dXRwdXQsICIgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxs
KTtcbiIpOwotICAgIHB1c2goQG91dHB1dCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7XG4iKTsKLSAgICAKLSAgICBpZiAoJGluZGV4ZWRTZXR0ZXJP
cGVyYXRpb24gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q3VzdG9tSW5kZXhl
ZFNldHRlcn0pIHsKLSAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+
e0N1c3RvbUluZGV4ZWRTZXR0ZXJ9KSB7Ci0gICAgICAgICAgICBwdXNoKEBvdXRwdXQsICIgICAg
aWYgKGF1dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHtcbiIpOwotICAgICAg
ICAgICAgcHVzaChAb3V0cHV0LCAiICAgICAgICB0aGlzT2JqZWN0LT5pbmRleFNldHRlcihzdGF0
ZSwgaW5kZXgudmFsdWUoKSwgdmFsdWUpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBvdXRwdXQs
ICIgICAgICAgIHJldHVybiB0cnVlO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBvdXRwdXQsICIg
ICAgfVxuIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAjIFRoZSBzZWNvbmQgYXJn
dW1lbnQgb2YgdGhlIGluZGV4ZWQgc2V0dGVyIG9wZXJhdGlvbiBpcyB0aGUgYXJndW1lbnQgYmVp
bmcgY29udmVydGVkLgotICAgICAgICAgICAgbXkgJGFyZ3VtZW50ID0gQHskaW5kZXhlZFNldHRl
ck9wZXJhdGlvbi0+YXJndW1lbnRzfVsxXTsKLSAgICAgICAgICAgIG15ICRuYXRpdmVWYWx1ZSA9
IEpTVmFsdWVUb05hdGl2ZSgkaW50ZXJmYWNlLCAkYXJndW1lbnQsICJ2YWx1ZSIsICRpbmRleGVk
U2V0dGVyT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDb25kaXRpb25hbH0sICJzdGF0
ZSIsICIqc3RhdGUiLCAidGhpc09iamVjdCIsICIiLCAiIik7Ci0KLSAgICAgICAgICAgIHB1c2go
QG91dHB1dCwgIiAgICBpZiAoYXV0byBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkg
e1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBvdXRwdXQsICIgICAgICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpO1xuIik7Ci0gICAgICAgICAgICBw
dXNoKEBvdXRwdXQsICIgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSAke25hdGl2ZVZhbHVlfTtc
biIpOwotICAgICAgICAgICAgcHVzaChAb3V0cHV0LCAiICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHRydWUpO1xuIik7Ci0KLSAgICAgICAgICAgIG15ICRpbmRleGVkU2V0
dGVyRnVuY3Rpb25OYW1lID0gJGluZGV4ZWRTZXR0ZXJPcGVyYXRpb24tPm5hbWUgfHwgInNldEl0
ZW0iOwotICAgICAgICAgICAgbXkgJGZ1bmN0aW9uU3RyaW5nID0gIiR7aW5kZXhlZFNldHRlckZ1
bmN0aW9uTmFtZX0oaW5kZXgsIFdURk1vdmUobmF0aXZlVmFsdWUpKSI7Ci0gICAgICAgICAgICAk
ZnVuY3Rpb25TdHJpbmcgPSAicHJvcGFnYXRlRXhjZXB0aW9uKCpzdGF0ZSwgdGhyb3dTY29wZSwg
JHtmdW5jdGlvblN0cmluZ30pIiBpZiBOZWVkc0V4cGxpY2l0UHJvcGFnYXRlRXhjZXB0aW9uQ2Fs
bCgkaW5kZXhlZFNldHRlck9wZXJhdGlvbik7Ci0KLSAgICAgICAgICAgIHB1c2goQG91dHB1dCwg
IiAgICAgICAgJHtmdW5jdGlvblN0cmluZ307XG4iKTsKLSAgICAgICAgICAgIHB1c2goQG91dHB1
dCwgIiAgICAgICAgcmV0dXJuIHRydWU7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQG91dHB1dCwg
IiAgICB9XG4iKTsKK3N1YiBHZW5lcmF0ZVB1dAoreworICAgIG15ICgkb3V0cHV0QXJyYXksICRp
bnRlcmZhY2UsICRjbGFzc05hbWUpID0gQF87CisgICAgCisgICAgcmV0dXJuIGlmICRpbnRlcmZh
Y2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0N1c3RvbVB1dEZ1bmN0aW9ufTsKKyAgICAKKyAgICBt
eSAkbmFtZWRTZXR0ZXJPcGVyYXRpb24gPSBHZXROYW1lZFNldHRlck9wZXJhdGlvbigkaW50ZXJm
YWNlKTsKKyAgICBteSAkaW5kZXhlZFNldHRlck9wZXJhdGlvbiA9IEdldEluZGV4ZWRTZXR0ZXJP
cGVyYXRpb24oJGludGVyZmFjZSk7CisgICAgCisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiYm9v
bCAke2NsYXNzTmFtZX06OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgcHV0
UHJvcGVydHlTbG90KVxuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAie1xuIik7CisgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFz
c05hbWV9Kj4oY2VsbCk7XG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpO1xuXG4iKTsKKyAgICAKKyAg
ICBpZiAoKCRuYW1lZFNldHRlck9wZXJhdGlvbiAmJiAkbmFtZWRTZXR0ZXJPcGVyYXRpb24tPmV4
dGVuZGVkQXR0cmlidXRlcy0+e0NFUmVhY3Rpb25zfSkgfHwgKCRpbmRleGVkU2V0dGVyT3BlcmF0
aW9uICYmICRpbmRleGVkU2V0dGVyT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDRVJl
YWN0aW9uc30pKSB7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBDdXN0b21FbGVt
ZW50UmVhY3Rpb25TdGFjayBjdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjaztcblxuIik7CisgICAg
ICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5oIik7Cisg
ICAgfQorICAgIAorICAgIGlmICgkaW5kZXhlZFNldHRlck9wZXJhdGlvbikgeworICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKGF1dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3Bl
cnR5TmFtZSkpIHtcbiIpOworICAgICAgICAKKyAgICAgICAgR2VuZXJhdGVJbnZva2VJbmRleGVk
UHJvcGVydHlTZXR0ZXIoJG91dHB1dEFycmF5LCAiICAgICAgICAiLCAkaW50ZXJmYWNlLCAkaW5k
ZXhlZFNldHRlck9wZXJhdGlvbiwgImluZGV4LnZhbHVlKCkiLCAidmFsdWUiKTsKKyAgICAgICAg
CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIHRydWU7XG4iKTsK
KyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIH1cblxuIik7CisgICAgfQorICAgIAor
ICAgIGlmICgkbmFtZWRTZXR0ZXJPcGVyYXRpb24pIHsKKyAgICAgICAgIyBGSU1YRTogV2UgbmVl
ZCBhIG1vcmUgY29tcHJlaGVuc2l2ZSBzdG9yeSBmb3IgU3ltYm9scy4KKyAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpIHtcbiIpOwor
ICAgICAgICAKKyAgICAgICAgbXkgJGFkZGl0aW9uYWxJbmRlbnQgPSAiIjsKKyAgICAgICAgCisg
ICAgICAgIG15ICRvdmVycmlkZUJ1aWx0aW5zID0gJGNvZGVHZW5lcmF0b3ItPkluaGVyaXRzRXh0
ZW5kZWRBdHRyaWJ1dGUoJGludGVyZmFjZSwgIk92ZXJyaWRlQnVpbHRpbnMiKTsKKyAgICAgICAg
aWYgKCEkb3ZlcnJpZGVCdWlsdGlucykgeworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7IHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6
SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkgfTtcbiIpOworICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdl
dFByb3RvdHlwZURpcmVjdCgpO1xuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgICAgIGlmICghKHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlw
ZSktPmdldFByb3BlcnR5U2xvdChzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90KSkpIHtcbiIpOwor
ICAgICAgICAgICAgJGFkZGl0aW9uYWxJbmRlbnQgLj0gIiAgICAiOwogICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBHZW5lcmF0ZUludm9rZU5hbWVkUHJvcGVydHlTZXR0ZXIoJG91dHB1dEFy
cmF5LCAkYWRkaXRpb25hbEluZGVudCAuICIgICAgICAgICIsICRpbnRlcmZhY2UsICRuYW1lZFNl
dHRlck9wZXJhdGlvbiwgInZhbHVlIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGFk
ZGl0aW9uYWxJbmRlbnQgLiAiICAgICAgICByZXR1cm4gdHJ1ZTtcbiIpOworICAgICAgICAKKyAg
ICAgICAgaWYgKCEkb3ZlcnJpZGVCdWlsdGlucykgeworICAgICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgICAgICB9XG4iKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIH1cblxuIik7CiAgICAgfQogICAgIAorICAgIGFzc2VydCgi
VXNpbmcgYm90aCBhIG5hbWVkIHByb3BlcnR5IHNldHRlciBhbmQgW0N1c3RvbU5hbWVkU2V0dGVy
XSB0b2dldGhlciBpcyBub3Qgc3VwcG9ydGVkLiIpIGlmICRuYW1lZFNldHRlck9wZXJhdGlvbiAm
JiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21OYW1lZFNldHRlcn07CiAg
ICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0N1c3RvbU5hbWVkU2V0dGVy
fSkgewotICAgICAgICBwdXNoKEBvdXRwdXQsICIgICAgYm9vbCBwdXRSZXN1bHQgPSBmYWxzZTtc
biIpOwotICAgICAgICBwdXNoKEBvdXRwdXQsICIgICAgaWYgKHRoaXNPYmplY3QtPnB1dERlbGVn
YXRlKHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LCBwdXRSZXN1bHQpKVxuIik7Ci0g
ICAgICAgIHB1c2goQG91dHB1dCwgIiAgICAgICAgcmV0dXJuIHB1dFJlc3VsdDtcbiIpOworICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYm9vbCBwdXRSZXN1bHQgPSBmYWxzZTtcbiIp
OworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKHRoaXNPYmplY3QtPnB1dERl
bGVnYXRlKHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3QsIHB1dFJl
c3VsdCkpXG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4g
cHV0UmVzdWx0O1xuXG4iKTsKICAgICB9Ci0KLSAgICBwdXNoKEBvdXRwdXQsICIgICAgcmV0dXJu
IEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7
XG4iKTsKLSAgICBwdXNoKEBvdXRwdXQsICJ9XG5cbiIpOwotCi0gICAgcmV0dXJuIEBvdXRwdXQ7
CisgICAgCisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiBCYXNlOjpwdXQodGhp
c09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7XG4i
KTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9XG5cbiIpOwogfQogCiBzdWIgR2VuZXJhdGVQ
dXRCeUluZGV4CiB7Ci0gICAgbXkgKCRpbnRlcmZhY2UsICRjbGFzc05hbWUsICRpbmRleGVkU2V0
dGVyT3BlcmF0aW9uLCAkbmFtZWRTZXR0ZXJPcGVyYXRpb24pID0gQF87Ci0KLSAgICBhc3NlcnQo
Ik5hbWVkIHNldHRlcnMgYXJlIG5vdCBzdXBwb3J0ZWQuIikgaWYgJG5hbWVkU2V0dGVyT3BlcmF0
aW9uOwotCi0gICAgbXkgQG91dHB1dCA9ICgpOwotCi0gICAgcHVzaChAb3V0cHV0LCAiYm9vbCAk
e2NsYXNzTmFtZX06OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCB1
bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdylcbiIpOwotICAg
IHB1c2goQG91dHB1dCwgIntcbiIpOwotICAgIHB1c2goQG91dHB1dCwgIiAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KGNlbGwpO1xuIik7Ci0gICAgcHVzaChAb3V0
cHV0LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTtc
biIpOwotCi0gICAgaWYgKCRpbmRleGVkU2V0dGVyT3BlcmF0aW9uIHx8ICRpbnRlcmZhY2UtPmV4
dGVuZGVkQXR0cmlidXRlcy0+e0N1c3RvbUluZGV4ZWRTZXR0ZXJ9KSB7Ci0gICAgICAgIGlmICgk
aW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21JbmRleGVkU2V0dGVyfSkgewot
ICAgICAgICAgICAgcHVzaChAb3V0cHV0LCAiICAgIGlmIChMSUtFTFkoaW5kZXggPD0gTUFYX0FS
UkFZX0lOREVYKSkge1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBvdXRwdXQsICIgICAgICAgIHRo
aXNPYmplY3QtPmluZGV4U2V0dGVyKHN0YXRlLCBpbmRleCwgdmFsdWUpO1xuIik7Ci0gICAgICAg
ICAgICBwdXNoKEBvdXRwdXQsICIgICAgICAgIHJldHVybiB0cnVlO1xuIik7Ci0gICAgICAgICAg
ICBwdXNoKEBvdXRwdXQsICIgICAgfVxuIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAjIFRoZSBzZWNvbmQgYXJndW1lbnQgb2YgdGhlIGluZGV4ZWQgc2V0dGVyIG9wZXJhdGlvbiBp
cyB0aGUgYXJndW1lbnQgYmVpbmcgY29udmVydGVkLgotICAgICAgICAgICAgbXkgJGFyZ3VtZW50
ID0gQHskaW5kZXhlZFNldHRlck9wZXJhdGlvbi0+YXJndW1lbnRzfVsxXTsKLSAgICAgICAgICAg
IG15ICRuYXRpdmVWYWx1ZSA9IEpTVmFsdWVUb05hdGl2ZSgkaW50ZXJmYWNlLCAkYXJndW1lbnQs
ICJ2YWx1ZSIsICRpbmRleGVkU2V0dGVyT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntD
b25kaXRpb25hbH0sICJzdGF0ZSIsICIqc3RhdGUiLCAidGhpc09iamVjdCIsICIiLCAiIik7Ci0K
LSAgICAgICAgICAgIHB1c2goQG91dHB1dCwgIiAgICBpZiAoTElLRUxZKGluZGV4IDw9IE1BWF9B
UlJBWV9JTkRFWCkpIHtcbiIpOwotICAgICAgICAgICAgcHVzaChAb3V0cHV0LCAiICAgICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTtcbiIpOwot
ICAgICAgICAgICAgcHVzaChAb3V0cHV0LCAiICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gJHtu
YXRpdmVWYWx1ZX07XG4iKTsKLSAgICAgICAgICAgIHB1c2goQG91dHB1dCwgIiAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTtcbiIpOwotCi0gICAgICAgICAgICBt
eSAkaW5kZXhlZFNldHRlckZ1bmN0aW9uTmFtZSA9ICRpbmRleGVkU2V0dGVyT3BlcmF0aW9uLT5u
YW1lIHx8ICJzZXRJdGVtIjsKLSAgICAgICAgICAgIG15ICRmdW5jdGlvblN0cmluZyA9ICIke2lu
ZGV4ZWRTZXR0ZXJGdW5jdGlvbk5hbWV9KGluZGV4LCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSkiOwot
ICAgICAgICAgICAgJGZ1bmN0aW9uU3RyaW5nID0gInByb3BhZ2F0ZUV4Y2VwdGlvbigqc3RhdGUs
IHRocm93U2NvcGUsICR7ZnVuY3Rpb25TdHJpbmd9KSIgaWYgTmVlZHNFeHBsaWNpdFByb3BhZ2F0
ZUV4Y2VwdGlvbkNhbGwoJGluZGV4ZWRTZXR0ZXJPcGVyYXRpb24pOwotCi0gICAgICAgICAgICBw
dXNoKEBvdXRwdXQsICIgICAgICAgICR7ZnVuY3Rpb25TdHJpbmd9O1xuIik7Ci0gICAgICAgICAg
ICBwdXNoKEBvdXRwdXQsICIgICAgICAgIHJldHVybiB0cnVlO1xuIik7Ci0gICAgICAgICAgICBw
dXNoKEBvdXRwdXQsICIgICAgfVxuIik7CisgICAgbXkgKCRvdXRwdXRBcnJheSwgJGludGVyZmFj
ZSwgJGNsYXNzTmFtZSkgPSBAXzsKKyAgICAKKyAgICByZXR1cm4gaWYgJGludGVyZmFjZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57Q3VzdG9tUHV0RnVuY3Rpb259OworICAgIAorICAgIG15ICRuYW1l
ZFNldHRlck9wZXJhdGlvbiA9IEdldE5hbWVkU2V0dGVyT3BlcmF0aW9uKCRpbnRlcmZhY2UpOwor
ICAgIG15ICRpbmRleGVkU2V0dGVyT3BlcmF0aW9uID0gR2V0SW5kZXhlZFNldHRlck9wZXJhdGlv
bigkaW50ZXJmYWNlKTsKKyAgICAKKyAgICBteSAkb3ZlcnJpZGVCdWlsdGlucyA9ICRjb2RlR2Vu
ZXJhdG9yLT5Jbmhlcml0c0V4dGVuZGVkQXR0cmlidXRlKCRpbnRlcmZhY2UsICJPdmVycmlkZUJ1
aWx0aW5zIik7CisgICAgbXkgJGVsbGlkZXNDYWxsc1RvQmFzZSA9ICgkbmFtZWRTZXR0ZXJPcGVy
YXRpb24gJiYgJG92ZXJyaWRlQnVpbHRpbnMpICYmICEkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPntDdXN0b21OYW1lZFNldHRlcn07CisgICAgCisgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiYm9vbCAke2NsYXNzTmFtZX06OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUq
IHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCIgLiAoISRlbGxpZGVz
Q2FsbHNUb0Jhc2UgPyAiIHNob3VsZFRocm93IiA6ICIiKSAuICIpXG4iKTsKKyAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICJ7XG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byog
dGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOworICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7XG5cbiIpOworICAgIAorICAgIGlmICgoJG5hbWVkU2V0dGVyT3BlcmF0aW9uICYm
ICRuYW1lZFNldHRlck9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q0VSZWFjdGlvbnN9
KSB8fCAoJGluZGV4ZWRTZXR0ZXJPcGVyYXRpb24gJiYgJGluZGV4ZWRTZXR0ZXJPcGVyYXRpb24t
PmV4dGVuZGVkQXR0cmlidXRlcy0+e0NFUmVhY3Rpb25zfSkpIHsKKyAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrIGN1c3RvbUVsZW1lbnRS
ZWFjdGlvblN0YWNrO1xuXG4iKTsKKyAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkN1c3RvbUVs
ZW1lbnRSZWFjdGlvblF1ZXVlLmgiKTsKKyAgICB9CisgICAgCisgICAgaWYgKCRpbmRleGVkU2V0
dGVyT3BlcmF0aW9uICkgeworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKExJ
S0VMWShpbmRleCA8PSBNQVhfQVJSQVlfSU5ERVgpKSB7XG4iKTsKKyAgICAgICAgCisgICAgICAg
IEdlbmVyYXRlSW52b2tlSW5kZXhlZFByb3BlcnR5U2V0dGVyKCRvdXRwdXRBcnJheSwgIiAgICAg
ICAgIiwgJGludGVyZmFjZSwgJGluZGV4ZWRTZXR0ZXJPcGVyYXRpb24sICJpbmRleCIsICJ2YWx1
ZSIpOworICAgICAgICAKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1
cm4gdHJ1ZTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgfVxuXG4iKTsK
KyAgICB9CisgICAgCisgICAgaWYgKCRuYW1lZFNldHRlck9wZXJhdGlvbikgeworICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBJZGVudGlm
aWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7XG4iKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
bXkgJGFkZGl0aW9uYWxJbmRlbnQgPSAiIjsKKyAgICAgICAgaWYgKCEkb3ZlcnJpZGVCdWlsdGlu
cykgeworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFByb3BlcnR5U2xvdCBz
bG90IHsgdGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5x
dWlyeSB9O1xuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgSlNWYWx1
ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3QoKTtcbiIpOworICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmICghKHByb3RvdHlwZS5pc09iamVj
dCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChzdGF0ZSwgcHJvcGVy
dHlOYW1lLCBzbG90KSkpIHtcbiIpOworICAgICAgICAgICAgJGFkZGl0aW9uYWxJbmRlbnQgLj0g
IiAgICAiOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBHZW5lcmF0ZUludm9rZU5hbWVk
UHJvcGVydHlTZXR0ZXIoJG91dHB1dEFycmF5LCAkYWRkaXRpb25hbEluZGVudCAuICIgICAgIiwg
JGludGVyZmFjZSwgJG5hbWVkU2V0dGVyT3BlcmF0aW9uLCAidmFsdWUiKTsKKyAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAkYWRkaXRpb25hbEluZGVudCAuICIgICAgcmV0dXJuIHRydWU7XG4i
KTsKKyAgICAgICAgCisgICAgICAgIGlmICghJG92ZXJyaWRlQnVpbHRpbnMpIHsKKyAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB9XG5cbiIpOwogICAgICAgICB9CiAgICAgfQot
CisgICAgCisgICAgYXNzZXJ0KCJVc2luZyBib3RoIGEgbmFtZWQgcHJvcGVydHkgc2V0dGVyIGFu
ZCBbQ3VzdG9tTmFtZWRTZXR0ZXJdIHRvZ2V0aGVyIGlzIG5vdCBzdXBwb3J0ZWQuIikgaWYgJG5h
bWVkU2V0dGVyT3BlcmF0aW9uICYmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0N1
c3RvbU5hbWVkU2V0dGVyfTsKICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57Q3VzdG9tTmFtZWRTZXR0ZXJ9KSB7Ci0gICAgICAgIHB1c2goQG91dHB1dCwgIiAgICBJZGVu
dGlmaWVyIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTtcbiIp
OwotICAgICAgICBwdXNoKEBvdXRwdXQsICIgICAgUHV0UHJvcGVydHlTbG90IHNsb3QodGhpc09i
amVjdCwgc2hvdWxkVGhyb3cpO1xuIik7Ci0gICAgICAgIHB1c2goQG91dHB1dCwgIiAgICBib29s
IHB1dFJlc3VsdCA9IGZhbHNlO1xuIik7Ci0gICAgICAgIHB1c2goQG91dHB1dCwgIiAgICBpZiAo
dGhpc09iamVjdC0+cHV0RGVsZWdhdGUoc3RhdGUsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3Qs
IHB1dFJlc3VsdCkpXG4iKTsKLSAgICAgICAgcHVzaChAb3V0cHV0LCAiICAgICAgICByZXR1cm4g
cHV0UmVzdWx0O1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBJZGVudGlm
aWVyIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTtcbiIpOwor
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgUHV0UHJvcGVydHlTbG90IHNsb3QodGhp
c09iamVjdCwgc2hvdWxkVGhyb3cpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICBib29sIHB1dFJlc3VsdCA9IGZhbHNlO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICBpZiAodGhpc09iamVjdC0+cHV0RGVsZWdhdGUoc3RhdGUsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNsb3QsIHB1dFJlc3VsdCkpXG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgICAgICByZXR1cm4gcHV0UmVzdWx0O1xuXG4iKTsKICAgICB9CisgICAgCisgICAg
aWYgKCEkZWxsaWRlc0NhbGxzVG9CYXNlKSB7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICByZXR1cm4gQmFzZTo6cHV0QnlJbmRleChjZWxsLCBzdGF0ZSwgaW5kZXgsIHZhbHVlLCBz
aG91bGRUaHJvdyk7XG4iKTsKKyAgICB9CisgICAgCisgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
fVxuXG4iKTsKK30KIAotICAgIHB1c2goQG91dHB1dCwgIiAgICByZXR1cm4gQmFzZTo6cHV0QnlJ
bmRleChjZWxsLCBzdGF0ZSwgaW5kZXgsIHZhbHVlLCBzaG91bGRUaHJvdyk7XG4iKTsKLSAgICBw
dXNoKEBvdXRwdXQsICJ9XG5cbiIpOworc3ViIEdlbmVyYXRlSXNVbmZvcmdlYWJsZVByb3BlcnR5
TmFtZQoreworICAgIG15ICgkb3V0cHV0QXJyYXksICRpbnRlcmZhY2UpID0gQF87CisgICAgCisg
ICAgbXkgQHVuZm9yZ2VhYmxlUHJvcGVydHlOYW1lcyA9ICgpOworICAgIGZvcmVhY2ggbXkgJHBy
b3BlcnR5IChAeyRpbnRlcmZhY2UtPmF0dHJpYnV0ZXN9LCBAeyRpbnRlcmZhY2UtPm9wZXJhdGlv
bnN9KSB7CisgICAgICAgIG5leHQgaWYgJHByb3BlcnR5LT5pc1N0YXRpYzsKKyAgICAgICAgCisg
ICAgICAgIGlmIChJc1VuZm9yZ2VhYmxlKCRpbnRlcmZhY2UsICRwcm9wZXJ0eSkpIHsKKyAgICAg
ICAgICAgIHB1c2ggKEB1bmZvcmdlYWJsZVByb3BlcnR5TmFtZXMsICRwcm9wZXJ0eS0+bmFtZSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIDAgaWYgKHNjYWxhcihAdW5mb3Jn
ZWFibGVQcm9wZXJ0eU5hbWVzKSA9PSAwKTsKKyAgICAKKyAgICBteSAkY29uZGl0aW9uID0gam9p
bigiIHx8ICIsIG1hcCB7ICJwcm9wZXJ0eU5hbWUgPT0gXCIiIC4gJF8gLiAiXCIiIH0gQHVuZm9y
Z2VhYmxlUHJvcGVydHlOYW1lcyk7CisgICAgCisgICAgcHVzaChAJG91dHB1dEFycmF5LCAic3Rh
dGljIGJvb2wgaXNVbmZvcmdlYWJsZVByb3BlcnR5TmFtZShQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lKVxuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAie1xuIik7CisgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgIHJldHVybiAke2NvbmRpdGlvbn07XG4iKTsKKyAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICJ9XG5cbiIpOworICAgIAorICAgIHJldHVybiAxOworfQogCi0gICAgcmV0dXJu
IEBvdXRwdXQ7CisjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2xlZ2FjeS1wbGF0
Zm9ybS1vYmplY3QtZGVmaW5lb3ducHJvcGVydHkKK3N1YiBHZW5lcmF0ZURlZmluZU93blByb3Bl
cnR5Cit7CisgICAgbXkgKCRvdXRwdXRBcnJheSwgJGludGVyZmFjZSwgJGNsYXNzTmFtZSkgPSBA
XzsKKyAgICAKKyAgICByZXR1cm4gaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
Q3VzdG9tRGVmaW5lT3duUHJvcGVydHl9OworICAgIAorICAgIG15ICRuYW1lZFNldHRlck9wZXJh
dGlvbiA9IEdldE5hbWVkU2V0dGVyT3BlcmF0aW9uKCRpbnRlcmZhY2UpOworICAgIG15ICRpbmRl
eGVkU2V0dGVyT3BlcmF0aW9uID0gR2V0SW5kZXhlZFNldHRlck9wZXJhdGlvbigkaW50ZXJmYWNl
KTsKKyAgICAKKyAgICByZXR1cm4gaWYgISRuYW1lZFNldHRlck9wZXJhdGlvbiAmJiAhJGluZGV4
ZWRTZXR0ZXJPcGVyYXRpb247CisgICAgCisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiYm9vbCAk
e2NsYXNzTmFtZX06OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3Jp
cHRvciYgcHJvcGVydHlEZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KVxuIik7CisgICAgcHVz
aChAJG91dHB1dEFycmF5LCAie1xuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05hbWV9Kj4ob2JqZWN0KTtcbiIpOworICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7XG5cbiIpOworICAgIAorICAgIGlmICgoJG5hbWVkU2V0dGVyT3BlcmF0
aW9uICYmICRuYW1lZFNldHRlck9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q0VSZWFj
dGlvbnN9KSB8fCAoJGluZGV4ZWRTZXR0ZXJPcGVyYXRpb24gJiYgJGluZGV4ZWRTZXR0ZXJPcGVy
YXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NFUmVhY3Rpb25zfSkpIHsKKyAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrIGN1c3RvbUVs
ZW1lbnRSZWFjdGlvblN0YWNrO1xuXG4iKTsKKyAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkN1
c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmgiKTsKKyAgICB9CisgICAgCisgICAgIyAxLiBJZiBP
IHN1cHBvcnRzIGluZGV4ZWQgcHJvcGVydGllcyBhbmQgUCBpcyBhbiBhcnJheSBpbmRleCBwcm9w
ZXJ0eSBuYW1lLCB0aGVuOgorICAgIGlmIChHZXRJbmRleGVkR2V0dGVyT3BlcmF0aW9uKCRpbnRl
cmZhY2UpKSB7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoYXV0byBpbmRl
eCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkge1xuIik7CisgICAgICAgIAorICAgICAgICAj
IE5PVEU6IFRoZSBudW1iZXJzIGFyZSBvdXQgb2Ygb3JkZXIgYmVjYXVzZSB0aGVyZSBpcyBubyBy
ZWFzb24gZG9pbmcgc3RlcHMgMSwgMywgYW5kIDQgaWYgdGhlcmUKKyAgICAgICAgIyBpcyBubyBp
bmRleGVkIHByb3BlcnR5IHNldHRlci4KKyAgICAgICAgCisgICAgICAgIGlmICghJGluZGV4ZWRT
ZXR0ZXJPcGVyYXRpb24pIHsKKyAgICAgICAgICAgICMgMi4gSWYgTyBkb2VzIG5vdCBpbXBsZW1l
bnQgYW4gaW50ZXJmYWNlIHdpdGggYW4gaW5kZXhlZCBwcm9wZXJ0eSBzZXR0ZXIsIHRoZW4gcmV0
dXJuIGZhbHNlLgorICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1
cm4gZmFsc2U7XG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICMgMS4gSWYgdGhl
IHJlc3VsdCBvZiBjYWxsaW5nIElzRGF0YURlc2NyaXB0b3IoRGVzYykgaXMgZmFsc2UsIHRoZW4g
cmV0dXJuIGZhbHNlLgorICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBp
ZiAoIXByb3BlcnR5RGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpXG4iKTsKKyAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiIpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICAjIDMuIEludm9rZSB0aGUgaW5kZXhlZCBwcm9wZXJ0
eSBzZXR0ZXIgd2l0aCBQIGFuZCBEZXNjLltbVmFsdWVdXS4KKyAgICAgICAgICAgIEdlbmVyYXRl
SW52b2tlSW5kZXhlZFByb3BlcnR5U2V0dGVyKCRvdXRwdXRBcnJheSwgIiAgICAgICAgIiwgJGlu
dGVyZmFjZSwgJGluZGV4ZWRTZXR0ZXJPcGVyYXRpb24sICJpbmRleC52YWx1ZSgpIiwgInByb3Bl
cnR5RGVzY3JpcHRvci52YWx1ZSgpIik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICMgNC4g
UmV0dXJuIHRydWUuCisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJl
dHVybiB0cnVlO1xuIik7CisgICAgICAgIH0KKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgIH1cblxuIik7CisgICAgfQorICAgIAorICAgICMgMi4gSWYgTyBzdXBwb3J0cyBuYW1lZCBw
cm9wZXJ0aWVzLCBPIGRvZXMgbm90IGltcGxlbWVudCBhbiBpbnRlcmZhY2Ugd2l0aCB0aGUgW0ds
b2JhbF0gb3IgW1ByaW1hcnlHbG9iYWxdCisgICAgIyAgICBleHRlbmRlZCBhdHRyaWJ1dGUgYW5k
IFAgaXMgbm90IGFuIHVuZm9yZ2VhYmxlIHByb3BlcnR5IG5hbWUgb2YgTywgdGhlbjoKKyAgICBp
ZiAoR2V0TmFtZWRHZXR0ZXJPcGVyYXRpb24oJGludGVyZmFjZSkgJiYgIUlzR2xvYmFsT3JQcmlt
YXJ5R2xvYmFsSW50ZXJmYWNlKCRpbnRlcmZhY2UpKSB7CisgICAgICAgICMgRklNWEU6IFdlIG5l
ZWQgYSBtb3JlIGNvbXByZWhlbnNpdmUgc3RvcnkgZm9yIFN5bWJvbHMuCisgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICBpZiAoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7XG4iKTsK
KyAgICAgICAgCisgICAgICAgIG15ICRhZGRpdGlvbmFsSW5kZW50ID0gIiI7CisgICAgICAgIAor
ICAgICAgICBteSAkaGFzVW5mb3JnYWJsZVByb3BlcnRpZXMgPSBHZW5lcmF0ZUlzVW5mb3JnZWFi
bGVQcm9wZXJ0eU5hbWUoJG91dHB1dEFycmF5LCAkaW50ZXJmYWNlKTsKKyAgICAgICAgaWYgKCRo
YXNVbmZvcmdhYmxlUHJvcGVydGllcykgeworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgICAgICBpZiAoIWlzVW5mb3JnZWFibGVQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lKSkg
e1xuIik7CisgICAgICAgICAgICAkYWRkaXRpb25hbEluZGVudCAuPSAiICAgICI7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgICMgMS4gTGV0IGNyZWF0aW5nIGJlIHRydWUgaWYgUCBpcyBu
b3QgYSBzdXBwb3J0ZWQgcHJvcGVydHkgbmFtZSwgYW5kIGZhbHNlIG90aGVyd2lzZS4KKyAgICAg
ICAgIyBOT1RFOiBUaGlzIHN0ZXAgaXMgc3RyZW5ndGggcmVkdWNlZCBpbnRvIHRoZSBvbmx5IHVz
ZSBvZiAnY3JlYXRpbmcnIGluIHN0ZXAgMi4yLjEKKyAgICAgICAgCisgICAgICAgICMgMi4gSWYg
TyBpbXBsZW1lbnRzIGFuIGludGVyZmFjZSB3aXRoIHRoZSBbT3ZlcnJpZGVCdWlsdGluc10gZXh0
ZW5kZWQgYXR0cmlidXRlIG9yIE8KKyAgICAgICAgIyAgICBkb2VzIG5vdCBoYXZlIGFuIG93biBw
cm9wZXJ0eSBuYW1lZCBQLCB0aGVuOgorICAgICAgICBteSAkb3ZlcnJpZGVCdWlsdGlucyA9ICRj
b2RlR2VuZXJhdG9yLT5Jbmhlcml0c0V4dGVuZGVkQXR0cmlidXRlKCRpbnRlcmZhY2UsICJPdmVy
cmlkZUJ1aWx0aW5zIik7CisgICAgICAgIGlmICghJG92ZXJyaWRlQnVpbHRpbnMpIHsKKyAgICAg
ICAgICAgICMgRklYTUU6IElzIEJhc2U6OmdldE93blByb3BlcnR5U2xvdCB0aGUgcmlnaHQgZnVu
Y3Rpb24gdG8gY2FsbD8gSXMgdGhlcmUgYSBmdW5jdGlvbiB0aGF0IHdpbGwKKyAgICAgICAgICAg
ICMgICAgICAgIG9ubHkgbG9vayBhdCB0aGUgYWN0dWFsIHByb3BlcnRpZXMsIGFuZCBub3QgY2Fs
bCBpbnRvIG91ciBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKKyAgICAgICAgICAgICMgICAgICAgIFtb
R2V0T3duUHJvcGVydHldXSBob29rPworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAk
YWRkaXRpb25hbEluZGVudC4gIiAgICAgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2JqZWN0
LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5IH07XG4iKTsKKyAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGFkZGl0aW9uYWxJbmRlbnQuICIgICAgICAg
IGlmICghQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIHN0YXRlLCBwcm9wZXJ0
eU5hbWUsIHNsb3QpKSB7XG4iKTsKKyAgICAgICAgICAgICRhZGRpdGlvbmFsSW5kZW50IC49ICIg
ICAgIjsKKyAgICAgICAgfQorICAgICAgICBpZiAoISRuYW1lZFNldHRlck9wZXJhdGlvbikgewor
ICAgICAgICAgICAgIyAyLjEuIElmIGNyZWF0aW5nIGlzIGZhbHNlIGFuZCBPIGRvZXMgbm90IGlt
cGxlbWVudCBhbiBpbnRlcmZhY2Ugd2l0aCBhIG5hbWVkIHByb3BlcnR5IHNldHRlciwgdGhlbiBy
ZXR1cm4gZmFsc2UuCisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRhZGRpdGlvbmFs
SW5kZW50IC4gIiAgICAgICAgaWYgKHRoaXNPYmplY3QtPndyYXBwZWQoKS5pc1N1cHBvcnRlZFBy
b3BlcnR5TmFtZShwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUpKSlcbiIpOworICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkYWRkaXRpb25hbEluZGVudCAuICIgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7XG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICMg
Mi4yLiBJZiBPIGltcGxlbWVudHMgYW4gaW50ZXJmYWNlIHdpdGggYSBuYW1lZCBwcm9wZXJ0eSBz
ZXR0ZXIsIHRoZW46CisgICAgICAgICAgICAKKyAgICAgICAgICAgICMgMi4yLjEuIElmIHRoZSBy
ZXN1bHQgb2YgY2FsbGluZyBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGlzIGZhbHNlLCB0aGVuIHJl
dHVybiBmYWxzZS4KKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGFkZGl0aW9uYWxJ
bmRlbnQgLiAiICAgICAgICBpZiAoIXByb3BlcnR5RGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9y
KCkpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGFkZGl0aW9uYWxJbmRl
bnQgLiAiICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuIik7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgICMgMi4yLjIuIEludm9rZSB0aGUgbmFtZWQgcHJvcGVydHkgc2V0dGVyIHdpdGggUCBh
bmQgRGVzYy5bW1ZhbHVlXV0uCisgICAgICAgICAgICBHZW5lcmF0ZUludm9rZU5hbWVkUHJvcGVy
dHlTZXR0ZXIoJG91dHB1dEFycmF5LCAkYWRkaXRpb25hbEluZGVudCAuICIgICAgICAgICIsICRp
bnRlcmZhY2UsICRuYW1lZFNldHRlck9wZXJhdGlvbiwgInByb3BlcnR5RGVzY3JpcHRvci52YWx1
ZSgpIik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICMgMi4yLjMuIFJldHVybiB0cnVlLgor
ICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkYWRkaXRpb25hbEluZGVudCAuICIgICAg
ICAgIHJldHVybiB0cnVlO1xuIik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICgh
JG92ZXJyaWRlQnVpbHRpbnMpIHsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGFk
ZGl0aW9uYWxJbmRlbnQgLiAiICAgIH1cbiIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpZiAoJGhhc1VuZm9yZ2FibGVQcm9wZXJ0aWVzKSB7CisgICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgICAgIH1cbiIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAj
IENsb3NlIHRoZSAhcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkgY29uZGl0aW9uLgorICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgfVxuXG4iKTsKKyAgICB9CisgICAgCisgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIFByb3BlcnR5RGVzY3JpcHRvciBuZXdQcm9wZXJ0eURlc2NyaXB0
b3IgPSBwcm9wZXJ0eURlc2NyaXB0b3I7XG4iKTsKKyAgICAgICAgCisgICAgIyAzLiBJZiBPIGRv
ZXMgbm90IGltcGxlbWVudCBhbiBpbnRlcmZhY2Ugd2l0aCB0aGUgW0dsb2JhbF0gb3IgW1ByaW1h
cnlHbG9iYWxdIGV4dGVuZGVkIGF0dHJpYnV0ZSwKKyAgICAjICAgIHRoZW4gc2V0IERlc2MuW1tD
b25maWd1cmFibGVdXSB0byB0cnVlLgorICAgIGlmICghSXNHbG9iYWxPclByaW1hcnlHbG9iYWxJ
bnRlcmZhY2UoJGludGVyZmFjZSkpIHsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
IG5ld1Byb3BlcnR5RGVzY3JpcHRvci5zZXRDb25maWd1cmFibGUodHJ1ZSk7XG4iKTsKKyAgICB9
CisgICAgCisgICAgIyA0LiBSZXR1cm4gT3JkaW5hcnlEZWZpbmVPd25Qcm9wZXJ0eShPLCBQLCBE
ZXNjKS4KKyAgICAjIEZJWE1FOiBEb2VzIHRoaXMgZG8gdGhlIHNhbWUgdGhpbmc/CisgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShvYmpl
Y3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIGNvbmZpZ3VyYWJsZVByb3BlcnR5RGVzY3JpcHRvciwg
c2hvdWxkVGhyb3cpO1xuIik7CisgICAgCisgICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxuXG4i
KTsKIH0KIAogc3ViIEdlbmVyYXRlRGVsZXRlUHJvcGVydHlDb21tb24KQEAgLTc0NSw3ICs5NDks
NyBAQCBzdWIgR2VuZXJhdGVEZWxldGVQcm9wZXJ0eUNvbW1vbgogICAgIGFzc2VydCgiTmFtZWQg
cHJvcGVydHkgZGVsZXRlcnMgYXJlIG5vdCBhbGxvd2VkIG9uIGdsb2JhbCBvYmplY3QgaW50ZXJm
YWNlcy4iKSBpZiBJc0dsb2JhbE9yUHJpbWFyeUdsb2JhbEludGVyZmFjZSgkaW50ZXJmYWNlKTsK
IAogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oIiwgJGNv
bmRpdGlvbmFsKTsKLSAgICBteSAkb3ZlcnJpZGVCdWlsdGluID0gJGludGVyZmFjZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57T3ZlcnJpZGVCdWlsdGluc30gPyAidHJ1ZSIgOiAiZmFsc2UiOworICAg
IG15ICRvdmVycmlkZUJ1aWx0aW4gPSAkY29kZUdlbmVyYXRvci0+SW5oZXJpdHNFeHRlbmRlZEF0
dHJpYnV0ZSgkaW50ZXJmYWNlLCAiT3ZlcnJpZGVCdWlsdGlucyIpID8gInRydWUiIDogImZhbHNl
IjsKICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKGlzVmlzaWJsZU5hbWVkUHJvcGVy
dHk8JHtvdmVycmlkZUJ1aWx0aW59Pigqc3RhdGUsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSkp
IHtcbiIpOwogCiAgICAgaWYgKCRvcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NFUmVh
Y3Rpb25zfSkgewpAQCAtODc3LDIyICsxMDgxLDI2IEBAIHN1YiBHZW5lcmF0ZURlbGV0ZVByb3Bl
cnR5QnlJbmRleERlZmluaXQKIAogc3ViIEdlbmVyYXRlTmFtZWREZWxldGVyRGVmaW5pdGlvbgog
ewotICAgIG15ICgkb3V0cHV0QXJyYXksICRpbnRlcmZhY2UsICRjbGFzc05hbWUsICRvcGVyYXRp
b24pID0gQF87CisgICAgbXkgKCRvdXRwdXRBcnJheSwgJGludGVyZmFjZSwgJGNsYXNzTmFtZSkg
PSBAXzsKKyAgICAKKyAgICByZXR1cm4gaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57Q3VzdG9tRGVsZXRlUHJvcGVydHl9OwogCisgICAgbXkgJG5hbWVkRGVsZXRlck9wZXJhdGlv
biA9IEdldE5hbWVkRGVsZXRlck9wZXJhdGlvbigkaW50ZXJmYWNlKTsKKyAgICAKICAgICAjIFRo
aXMgaW1wbGVtZW50cyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNsZWdhY3ktcGxh
dGZvcm0tb2JqZWN0LWRlbGV0ZSB1c2luZwogICAgICMgdGhlIGRlbGV0ZVByb3BlcnR5IGFuZCBk
ZWxldGVQcm9wZXJ0eUJ5SW5kZXggb3ZlcnJpZGUgaG9va3MuCiAKICAgICBhc3NlcnQoIk5hbWVk
IHByb3BlcnR5IGRlbGV0ZXJzIGFyZSBub3QgYWxsb3dlZCB3aXRob3V0IGEgY29ycmVzcG9uZGlu
ZyBuYW1lZCBwcm9wZXJ0eSBnZXR0ZXIuIikgaWYgIUdldE5hbWVkR2V0dGVyT3BlcmF0aW9uKCRp
bnRlcmZhY2UpOwogICAgIGFzc2VydCgiTmFtZWQgcHJvcGVydHkgZGVsZXRlcnMgYXJlIG5vdCBh
bGxvd2VkIG9uIGdsb2JhbCBvYmplY3QgaW50ZXJmYWNlcy4iKSBpZiBJc0dsb2JhbE9yUHJpbWFy
eUdsb2JhbEludGVyZmFjZSgkaW50ZXJmYWNlKTsKIAotICAgIG15ICRjb25kaXRpb25hbCA9ICRv
cGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NvbmRpdGlvbmFsfTsKKyAgICBteSAkY29u
ZGl0aW9uYWwgPSAkbmFtZWREZWxldGVyT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntD
b25kaXRpb25hbH07CiAgICAgaWYgKCRjb25kaXRpb25hbCkgewogICAgICAgICBteSAkY29uZGl0
aW9uYWxTdHJpbmcgPSAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVDb25kaXRpb25hbFN0cmluZ0Zy
b21BdHRyaWJ1dGVWYWx1ZSgkY29uZGl0aW9uYWwpOwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIjaWYgJHtjb25kaXRpb25hbFN0cmluZ31cblxuIik7OwogICAgIH0KIAotICAgIEdlbmVy
YXRlRGVsZXRlUHJvcGVydHlEZWZpbml0aW9uKCRvdXRwdXRBcnJheSwgJGludGVyZmFjZSwgJGNs
YXNzTmFtZSwgJG9wZXJhdGlvbiwgJGNvbmRpdGlvbmFsKTsKLSAgICBHZW5lcmF0ZURlbGV0ZVBy
b3BlcnR5QnlJbmRleERlZmluaXRpb24oJG91dHB1dEFycmF5LCAkaW50ZXJmYWNlLCAkY2xhc3NO
YW1lLCAkb3BlcmF0aW9uLCAkY29uZGl0aW9uYWwpOworICAgIEdlbmVyYXRlRGVsZXRlUHJvcGVy
dHlEZWZpbml0aW9uKCRvdXRwdXRBcnJheSwgJGludGVyZmFjZSwgJGNsYXNzTmFtZSwgJG5hbWVk
RGVsZXRlck9wZXJhdGlvbiwgJGNvbmRpdGlvbmFsKTsKKyAgICBHZW5lcmF0ZURlbGV0ZVByb3Bl
cnR5QnlJbmRleERlZmluaXRpb24oJG91dHB1dEFycmF5LCAkaW50ZXJmYWNlLCAkY2xhc3NOYW1l
LCAkbmFtZWREZWxldGVyT3BlcmF0aW9uLCAkY29uZGl0aW9uYWwpOwogCiAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIjZW5kaWZcblxuIikgaWYgJGNvbmRpdGlvbmFsOwogfQpAQCAtMTEwOCwxNCAr
MTMxNiw2IEBAIHN1YiBHZXRTcGVjaWFsQWNjZXNzb3JPcGVyYXRpb25Gb3JUeXBlCiAgICAgcmV0
dXJuIDA7CiB9CiAKLXN1YiBIYXNDb21wbGV4R2V0T3duUHJvcGVydHkKLXsKLSAgICBteSAkaW50
ZXJmYWNlID0gc2hpZnQ7Ci0gICAgcmV0dXJuICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRl
cy0+e0NoZWNrU2VjdXJpdHl9Ci0gICAgICAgIHx8IElzRE9NR2xvYmFsT2JqZWN0KCRpbnRlcmZh
Y2UpCi0gICAgICAgIHx8IEluc3RhbmNlT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90KCRpbnRl
cmZhY2UpOwotfQotCiBzdWIgSXNHbG9iYWxPclByaW1hcnlHbG9iYWxJbnRlcmZhY2UKIHsKICAg
ICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7CkBAIC0xMzA2LDcgKzE1MDYsMjUgQEAgc3ViIEluc3Rh
bmNlT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90CiAgICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0
OwogICAgIHJldHVybiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21HZXRP
d25Qcm9wZXJ0eVNsb3R9CiAgICAgICAgIHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRl
cy0+e0N1c3RvbU5hbWVkR2V0dGVyfQotICAgICAgICB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPntKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2NyaXB0b3J9CisgICAg
ICAgIHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0N1c3RvbUdldE93blByb3Bl
cnR5U2xvdEFuZERlc2NyaXB0b3J9CisgICAgICAgIHx8IEdldEluZGV4ZWRHZXR0ZXJPcGVyYXRp
b24oJGludGVyZmFjZSkKKyAgICAgICAgfHwgR2V0TmFtZWRHZXR0ZXJPcGVyYXRpb24oJGludGVy
ZmFjZSk7Cit9CisKK3N1YiBJbnN0YW5jZU92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgKK3sKKyAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7CisgICAgcmV0dXJuICRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+e0N1c3RvbUdldE93blByb3BlcnR5U2xvdEJ5SW5kZXh9Cisg
ICAgICAgIHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0N1c3RvbU5hbWVkR2V0
dGVyfQorICAgICAgICB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21H
ZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yfQorICAgICAgICB8fCBHZXRJbmRleGVkR2V0
dGVyT3BlcmF0aW9uKCRpbnRlcmZhY2UpCisgICAgICAgIHx8IEdldE5hbWVkR2V0dGVyT3BlcmF0
aW9uKCRpbnRlcmZhY2UpOworfQorCitzdWIgSW5zdGFuY2VPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eU5hbWVzCit7CisgICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OworICAgIHJldHVybiAkaW50ZXJm
YWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21FbnVtZXJhdGVQcm9wZXJ0eX0KICAgICAg
ICAgfHwgR2V0SW5kZXhlZEdldHRlck9wZXJhdGlvbigkaW50ZXJmYWNlKQogICAgICAgICB8fCBH
ZXROYW1lZEdldHRlck9wZXJhdGlvbigkaW50ZXJmYWNlKTsKIH0KQEAgLTEzMTUsNyArMTUzMywx
NSBAQCBzdWIgSW5zdGFuY2VPdmVycmlkZXNQdXQKIHsKICAgICBteSAkaW50ZXJmYWNlID0gc2hp
ZnQ7CiAgICAgcmV0dXJuICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0N1c3RvbU5h
bWVkU2V0dGVyfQotICAgICAgICB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntD
dXN0b21JbmRleGVkU2V0dGVyfQorICAgICAgICB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPntDdXN0b21QdXRGdW5jdGlvbn0KKyAgICAgICAgfHwgR2V0SW5kZXhlZFNldHRlck9w
ZXJhdGlvbigkaW50ZXJmYWNlKQorICAgICAgICB8fCBHZXROYW1lZFNldHRlck9wZXJhdGlvbigk
aW50ZXJmYWNlKTsKK30KKworc3ViIEluc3RhbmNlT3ZlcnJpZGVzRGVmaW5lT3duUHJvcGVydHkK
K3sKKyAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7CisgICAgcmV0dXJuICRpbnRlcmZhY2UtPmV4
dGVuZGVkQXR0cmlidXRlcy0+e0N1c3RvbURlZmluZU93blByb3BlcnR5fQogICAgICAgICB8fCBH
ZXRJbmRleGVkU2V0dGVyT3BlcmF0aW9uKCRpbnRlcmZhY2UpCiAgICAgICAgIHx8IEdldE5hbWVk
U2V0dGVyT3BlcmF0aW9uKCRpbnRlcmZhY2UpOwogfQpAQCAtMTMzNCwyMSArMTU2MCw2IEBAIHN1
YiBQcm90b3R5cGVIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlCiAgICAgcmV0dXJuICRudW1Db25zdGFu
dHMgPiAwIHx8IFByb3RvdHlwZVByb3BlcnR5Q291bnQoJGludGVyZmFjZSkgPiAwOwogfQogCi1z
dWIgSW5zdGFuY2VPdmVycmlkZXNQdXRJbXBsZW1lbnRhdGlvbgotewotICAgIG15ICRpbnRlcmZh
Y2UgPSBzaGlmdDsKLSAgICByZXR1cm4gJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
Q3VzdG9tTmFtZWRTZXR0ZXJ9Ci0gICAgICAgIHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmli
dXRlcy0+e0N1c3RvbUluZGV4ZWRTZXR0ZXJ9OwotfQotCi1zdWIgSW5zdGFuY2VPdmVycmlkZXNQ
dXREZWNsYXJhdGlvbgotewotICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKLSAgICByZXR1cm4g
JGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q3VzdG9tUHV0RnVuY3Rpb259Ci0gICAg
ICAgIHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0N1c3RvbU5hbWVkU2V0dGVy
fQotICAgICAgICB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21JbmRl
eGVkU2V0dGVyfTsKLX0KLQogc3ViIEluc3RhbmNlTmVlZHNWaXNpdENoaWxkcmVuCiB7CiAgICAg
bXkgJGludGVyZmFjZSA9IHNoaWZ0OwpAQCAtMTk5OSw3ICsyMjEwLDkgQEAgc3ViIEdlbmVyYXRl
SGVhZGVyCiAgICAgJHN0cnVjdHVyZUZsYWdzeyJKU0M6Okhhc1N0YXRpY1Byb3BlcnR5VGFibGUi
fSA9IDEgaWYgSW5zdGFuY2VQcm9wZXJ0eUNvdW50KCRpbnRlcmZhY2UpID4gMDsKICAgICAkc3Ry
dWN0dXJlRmxhZ3N7IkpTQzo6TmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzIn0gPSAx
IGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e05ld0ltcHVyZVByb3BlcnR5Rmly
ZXNXYXRjaHBvaW50c307CiAgICAgJHN0cnVjdHVyZUZsYWdzeyJKU0M6OklzSW1tdXRhYmxlUHJv
dG90eXBlRXhvdGljT2JqZWN0In0gPSAxIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRl
cy0+e0lzSW1tdXRhYmxlUHJvdG90eXBlRXhvdGljT2JqZWN0fTsKLQorICAgICRzdHJ1Y3R1cmVG
bGFnc3siSlNDOjpNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIn0gPSAxIGlmICRpbnRlcmZhY2UtPmV4
dGVuZGVkQXR0cmlidXRlcy0+e01hc3F1ZXJhZGVzQXNVbmRlZmluZWR9OworICAgICRzdHJ1Y3R1
cmVGbGFnc3siSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBKU0M6OkltcGxlbWVudHNEZWZh
dWx0SGFzSW5zdGFuY2UifSA9IDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyI7Cisg
ICAgICAgIAogICAgICMgUHJvdG90eXBlCiAgICAgdW5sZXNzIChTaG91bGRVc2VHbG9iYWxPYmpl
Y3RQcm90b3R5cGUoJGludGVyZmFjZSkpIHsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RP
TUdsb2JhbE9iamVjdCYpO1xuIik7CkBAIC0yMDI2LDUxICsyMjM5LDc4IEBAIHN1YiBHZW5lcmF0
ZUhlYWRlcgogICAgIG15ICRuYW1lZEdldHRlck9wZXJhdGlvbiA9IEdldE5hbWVkR2V0dGVyT3Bl
cmF0aW9uKCRpbnRlcmZhY2UpOwogICAgIG15ICRpbmRleGVkR2V0dGVyT3BlcmF0aW9uID0gR2V0
SW5kZXhlZEdldHRlck9wZXJhdGlvbigkaW50ZXJmYWNlKTsKIAotICAgIG15ICRoYXNOYW1lZEdl
dHRlciA9ICRuYW1lZEdldHRlck9wZXJhdGlvbgotICAgICAgICB8fCAkaW50ZXJmYWNlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPntDdXN0b21OYW1lZEdldHRlcn07Ci0KLSAgICBteSAkaGFzQ29tcGxl
eEdldHRlciA9ICRpbmRleGVkR2V0dGVyT3BlcmF0aW9uCi0gICAgICAgIHx8ICRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+e0pTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3Jp
cHRvcn0KLSAgICAgICAgfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q3VzdG9t
R2V0T3duUHJvcGVydHlTbG90fQotICAgICAgICB8fCAkaGFzTmFtZWRHZXR0ZXI7Ci0KLSAgICBp
ZiAoJGhhc05hbWVkR2V0dGVyKSB7Ci0gICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPntPdmVycmlkZUJ1aWx0aW5zfSkgeworICAgICMgRklYTUU6IFdoeSBkb2Vzbid0
IHRoaXMgYWxzbyBpbmNsdWRlIEluZGV4ZWQgR2V0dGVycywge0N1c3RvbUdldE93blByb3BlcnR5
U2xvdH0gYW5kIHtDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yfQorICAgIGlm
ICgkbmFtZWRHZXR0ZXJPcGVyYXRpb24gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57Q3VzdG9tTmFtZWRHZXR0ZXJ9KSB7CisgICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+SW5o
ZXJpdHNFeHRlbmRlZEF0dHJpYnV0ZSgkaW50ZXJmYWNlLCAiT3ZlcnJpZGVCdWlsdGlucyIpKSB7
CiAgICAgICAgICAgICAkc3RydWN0dXJlRmxhZ3N7IkpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJ
bXB1cmUifSA9IDE7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAkc3RydWN0dXJlRmxh
Z3N7IkpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UifSA9
IDE7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICBteSAkb3ZlcnJpZGVzR2V0ID0gSW5zdGFuY2VP
dmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QoJGludGVyZmFjZSk7Ci0gICAgaWYgKCRvdmVycmlk
ZXNHZXQpIHsKKyAgICAKKyAgICAjIENsYXNzSW5mbyBNZXRob2RUYWJsZSBkZWNsYXJhdGlvbnMu
CisgICAgCisgICAgaWYgKEluc3RhbmNlT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90KCRpbnRl
cmZhY2UpKSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpO1xuIik7CiAgICAgICAgICRzdHJ1Y3R1
cmVGbGFnc3siSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QifSA9IDE7Ci0KLSAgICAg
ICAgaWYgKCRoYXNDb21wbGV4R2V0dGVyKSB7Ci0gICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09i
amVjdCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3Bl
cnR5U2xvdCYpO1xuIik7Ci0gICAgICAgICAgICAkc3RydWN0dXJlRmxhZ3N7IkpTQzo6SW50ZXJj
ZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyJ9ID0g
MTsKLSAgICAgICAgfQogICAgIH0KLQotICAgIG15ICRvdmVycmlkZXNQdXQgPSBJbnN0YW5jZU92
ZXJyaWRlc1B1dERlY2xhcmF0aW9uKCRpbnRlcmZhY2UpOwotICAgIGlmICgkb3ZlcnJpZGVzUHV0
KSB7CisgICAgCisgICAgaWYgKEluc3RhbmNlT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleCgkaW50ZXJmYWNlKSkgeworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6
RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpO1xu
Iik7CisgICAgICAgICRzdHJ1Y3R1cmVGbGFnc3siSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIn0gPSAxOworICAgIH0KKyAgICAK
KyAgICAjIEZJWE1FOiBDdXJyZW50bHkgb25seSBET01XaW5kb3cgbmVlZHMgdG8gb3ZlcnJpZGUg
dGhlIGdldFByb3BlcnR5TmFtZXMgZmFtaWx5IG9mIGZ1bmN0aW9ucywgYnV0IGV2ZW4KKyAgICAj
ICAgICAgICBzbywgaXQgc2hvdWxkIHByb2JhYmx5IGJlIHR1cm5lZCBpbnRvIGFuIGV4dGVuZGVk
IGF0dHJpYnV0ZS4KKyAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKKyAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCBnZXRQcm9wZXJ0eU5h
bWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJy
YXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpO1xuIik7
CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQgZ2V0R2VuZXJp
Y1Byb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9w
ZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1v
ZGUoKSk7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9p
ZCBnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6
RW51bWVyYXRpb25Nb2RlKCkpO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIg
ICAgc3RhdGljIHVpbnQzMl90IGdldEVudW1lcmFibGVMZW5ndGgoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTT2JqZWN0Kik7XG4iKTsKKyAgICAgICAgJHN0cnVjdHVyZUZsYWdzeyJKU0M6Ok92ZXJy
aWRlc0dldFByb3BlcnR5TmFtZXMifSA9IDE7CisgICAgfQorICAgIAorICAgIGlmIChJbnN0YW5j
ZU92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMoJGludGVyZmFjZSkpIHsKKyAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
Qzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBK
U0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpO1xuIik7CisgICAg
ICAgICRzdHJ1Y3R1cmVGbGFnc3siSlNDOjpPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIn0gPSAx
OworICAgIH0KKyAgICAKKyAgICBpZiAoSW5zdGFuY2VPdmVycmlkZXNQdXQoJGludGVyZmFjZSkp
IHsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgYm9vbCBwdXQoSlND
OjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFs
dWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7XG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIiAgICBzdGF0aWMgYm9vbCBwdXRCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVj
U3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCBzaG91bGRU
aHJvdyk7XG4iKTsKICAgICB9CisgICAgCisgICAgaWYgKEluc3RhbmNlT3ZlcnJpZGVzRGVmaW5l
T3duUHJvcGVydHkoJGludGVyZmFjZSkpIHsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU0M6OkpTT2JqZWN0KiwgSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgY29uc3QgSlNDOjpQcm9wZXJ0eURlc2NyaXB0
b3ImLCBib29sIHNob3VsZFRocm93KTtcbiIpOworICAgIH0KIAogICAgIGlmIChJbnN0YW5jZU92
ZXJyaWRlc0RlbGV0ZSgkaW50ZXJmYWNlKSkgewogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSk7XG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIiAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDOjpKU0NlbGwq
LCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkKTtcbiIpOwogICAgIH0KIAotICAgICMgTGVnYWN5
Q2FsbGVyIGFuZCBjdXN0b20gY2FsbCBmdW5jdGlvbnMKLSAgICBpZiAoSXNDYWxsYWJsZSgkaW50
ZXJmYWNlKSkgeworICAgIGlmIChJbnN0YW5jZU92ZXJyaWRlc0NhbGwoJGludGVyZmFjZSkpIHsK
ICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgSlNDOjpDYWxsVHlwZSBn
ZXRDYWxsRGF0YShKU0M6OkpTQ2VsbCosIEpTQzo6Q2FsbERhdGEmKTtcblxuIik7CiAgICAgICAg
ICRoZWFkZXJJbmNsdWRlc3siPHJ1bnRpbWUvQ2FsbERhdGEuaD4ifSA9IDE7CiAgICAgICAgICRz
dHJ1Y3R1cmVGbGFnc3siSlNDOjpUeXBlT2ZTaG91bGRDYWxsR2V0Q2FsbERhdGEifSA9IDE7CiAg
ICAgfQotCisgICAgCisgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0N1
c3RvbUdldFByb3RvdHlwZX0pIHsKKyAgICAgICAgcHVzaCAoQGhlYWRlckNvbnRlbnQsICIgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRQcm90b3R5cGUoSlNDOjpKU09iamVjdCosIEpTQzo6RXhl
Y1N0YXRlKik7XG4iKTsKKyAgICB9CisgICAgCisgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVk
QXR0cmlidXRlcy0+e0N1c3RvbVRvU3RyaW5nTmFtZX0pIHsKKyAgICAgICAgcHVzaCAoQGhlYWRl
ckNvbnRlbnQsICIgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZ05hbWUoY29uc3QgSlNDOjpKU09i
amVjdCosIEpTQzo6RXhlY1N0YXRlKik7XG4iKTsKKyAgICB9CisgICAgCisgICAgaWYgKCRpbnRl
cmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0N1c3RvbVByZXZlbnRFeHRlbnNpb25zfSkgewor
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBib29sIHByZXZlbnRFeHRl
bnNpb25zKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSopO1xuIik7CisgICAgfQorICAg
IAorICAgIGlmIChJbnN0YW5jZU5lZWRzRXN0aW1hdGVkU2l6ZSgkaW50ZXJmYWNlKSkgeworICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6
ZShKU0NlbGwqKTtcbiIpOworICAgIH0KKyAgICAKICAgICBpZiAoISRoYXNQYXJlbnQpIHsKICAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6
SlNDZWxsKik7XG4iKTsKICAgICB9CkBAIC0yMDg4LDcgKzIzMjgsNiBAQCBzdWIgR2VuZXJhdGVI
ZWFkZXIKICAgICB9CiAKICAgICAjIFN0cnVjdHVyZSBJRAotICAgICRzdHJ1Y3R1cmVGbGFnc3si
SlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBKU0M6OkltcGxlbWVudHNEZWZhdWx0SGFzSW5z
dGFuY2UifSA9IDEgaWYgJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyI7CiAgICAgcHVzaChA
aGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpT
VmFsdWUgcHJvdG90eXBlKVxuIik7CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB7XG4i
KTsKICAgICBpZiAoSXNET01HbG9iYWxPYmplY3QoJGludGVyZmFjZSkpIHsKQEAgLTIxMDQsMzcg
KzIzNDMsMTAgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICB9XG5cbiIpOwogCiAgICAgIyBDdXN0b20gcHVzaEV2ZW50SGFuZGxlclNjb3BlIGZ1bmN0
aW9uCi0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBKU0M6OkpTU2NvcGUqIHB1c2hFdmVu
dEhhbmRsZXJTY29wZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNTY29wZSopIGNvbnN0O1xuXG4i
KSBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntKU0N1c3RvbVB1c2hFdmVudEhh
bmRsZXJTY29wZX07Ci0KLSAgICAjIEN1c3RvbSBnZXRQcm9wZXJ0eU5hbWVzIGZ1bmN0aW9uIGV4
aXN0cyBvbiBET01XaW5kb3cKLSAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIp
IHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgdm9pZCBnZXRQcm9w
ZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlO
YW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkp
O1xuIik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQgZ2V0
R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJh
dGlvbk1vZGUoKSk7XG4iKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0
aWMgdm9pZCBnZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9
IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpO1xuIik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsICIgICAgc3RhdGljIHVpbnQzMl90IGdldEVudW1lcmFibGVMZW5ndGgoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTT2JqZWN0Kik7XG4iKTsKLSAgICAgICAgJHN0cnVjdHVyZUZsYWdzeyJKU0M6
Ok92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMifSA9IDE7Ci0gICAgfQotCi0gICAgIyBDdXN0b20g
Z2V0T3duUHJvcGVydHlOYW1lcyBmdW5jdGlvbgotICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPntDdXN0b21FbnVtZXJhdGVQcm9wZXJ0eX0gfHwgJGluZGV4ZWRHZXR0ZXJP
cGVyYXRpb24gfHwgJG5hbWVkR2V0dGVyT3BlcmF0aW9uKSB7Ci0gICAgICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVt
ZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTtcbiIpOwotICAgICAgICAkc3Ry
dWN0dXJlRmxhZ3N7IkpTQzo6T3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyJ9ID0gMTsgICAgICAg
CisgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0N1c3RvbVB1c2hFdmVu
dEhhbmRsZXJTY29wZX0pIHsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBKU0M6
OkpTU2NvcGUqIHB1c2hFdmVudEhhbmRsZXJTY29wZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNT
Y29wZSopIGNvbnN0O1xuXG4iKTsKICAgICB9Ci0KLSAgICAjIEN1c3RvbSBkZWZpbmVPd25Qcm9w
ZXJ0eSBmdW5jdGlvbgotICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIGJvb2wg
ZGVmaW5lT3duUHJvcGVydHkoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQ
cm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRU
aHJvdyk7XG4iKSBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntKU0N1c3RvbURl
ZmluZU93blByb3BlcnR5fTsKLQotICAgICMgQ3VzdG9tIGdldFByb3RvdHlwZSAvIHNldFByb3Rv
dHlwZSBmdW5jdGlvbnMuCi0gICAgcHVzaCAoQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBnZXRQcm90b3R5cGUoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKik7
XG4iKSBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21HZXRQcm90b3R5
cGV9OwotCi0gICAgIyBDdXN0b20gdG9TdHJpbmdOYW1lIGZ1bmN0aW9uLgotICAgIHB1c2ggKEBo
ZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpTQzo6
SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSopO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57Q3VzdG9tVG9TdHJpbmdOYW1lfTsKLQotICAgICMgQ3VzdG9tIHByZXZlbnRF
eHRlbnNpb25zIGZ1bmN0aW9uLgotICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGlj
IGJvb2wgcHJldmVudEV4dGVuc2lvbnMoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKik7
XG4iKSBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21QcmV2ZW50RXh0
ZW5zaW9uc307CiAgICAgCi0gICAgJHN0cnVjdHVyZUZsYWdzeyJKU0M6Ok1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQifSA9IDEgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57TWFzcXVl
cmFkZXNBc1VuZGVmaW5lZH07Ci0KICAgICAjIENvbnN0cnVjdG9yIG9iamVjdCBnZXR0ZXIKICAg
ICB1bmxlc3MgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e05vSW50ZXJmYWNlT2Jq
ZWN0fSkgewogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3Qq
KTtcbiIpOwpAQCAtMjE0Miw4ICsyMzU0LDEwIEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgIH0K
IAogICAgICMgU2VyaWFsaXplciBmdW5jdGlvbi4KLSAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBzZXJpYWxpemUoSlNDOjpFeGVjU3RhdGUqLCBKUyR7
aW50ZXJmYWNlTmFtZX0qIHRoaXNPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYpO1xuIikgaWYgJGlu
dGVyZmFjZS0+c2VyaWFsaXphYmxlOwotCisgICAgaWYgKCRpbnRlcmZhY2UtPnNlcmlhbGl6YWJs
ZSkgeworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBKU0M6OkpTT2Jq
ZWN0KiBzZXJpYWxpemUoSlNDOjpFeGVjU3RhdGUqLCAke2NsYXNzTmFtZX0qIHRoaXNPYmplY3Qs
IEpTQzo6VGhyb3dTY29wZSYpO1xuIik7CisgICAgfQorICAgIAogICAgIG15ICRudW1DdXN0b21P
cGVyYXRpb25zID0gMDsKICAgICBteSAkbnVtQ3VzdG9tQXR0cmlidXRlcyA9IDA7CiAKQEAgLTIx
OTMsMTEgKzI0MDcsNyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgICAgIHB1c2goQGhl
YWRlckNvbnRlbnQsICIgICAgdGVtcGxhdGU8dHlwZW5hbWU+IHN0YXRpYyBKU0M6OlN1YnNwYWNl
KiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkgeyByZXR1cm4gJHN1YnNwYWNlRnVuYyh2bSk7IH1c
biIpOwogICAgICAgICB9CiAgICAgfQotCi0gICAgaWYgKEluc3RhbmNlTmVlZHNFc3RpbWF0ZWRT
aXplKCRpbnRlcmZhY2UpKSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3Rh
dGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCopO1xuIik7Ci0gICAgfQotCisgICAgCiAg
ICAgaWYgKCRudW1DdXN0b21BdHRyaWJ1dGVzID4gMCkgewogICAgICAgICBwdXNoKEBoZWFkZXJD
b250ZW50LCAiXG4gICAgLy8gQ3VzdG9tIGF0dHJpYnV0ZXNcbiIpOwogCkBAIC0yMjk1LDcgKzI1
MDUsNyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTtcbiIpOwogICAgIH0KIAotICAgIGlm
ICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntKU0N1c3RvbUdldE93blByb3BlcnR5
U2xvdEFuZERlc2NyaXB0b3J9KSB7CisgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmli
dXRlcy0+e0N1c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2NyaXB0b3J9KSB7CiAgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3REZWxlZ2F0
ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYp
O1xuIik7CiAgICAgfQogCkBAIC0yMzA2LDExICsyNTE2LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVy
CiAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0N1c3RvbU5hbWVkU2V0
dGVyfSkgewogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIGJvb2wgcHV0RGVsZWdh
dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6
OlB1dFByb3BlcnR5U2xvdCYsIGJvb2wmIHB1dFJlc3VsdCk7XG4iKTsKICAgICB9Ci0KLSAgICBp
ZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q3VzdG9tSW5kZXhlZFNldHRlcn0p
IHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2b2lkIGluZGV4U2V0dGVyKEpT
Qzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgaW5kZXgsIEpTQzo6SlNWYWx1ZSk7XG4iKTsKLSAgICB9
Ci0KKyAgICAKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAifTtcblxuIik7CiAKICAgICBpZiAo
U2hvdWxkR2VuZXJhdGVXcmFwcGVyT3duZXJDb2RlKCRoYXNQYXJlbnQsICRpbnRlcmZhY2UpKSB7
CkBAIC0zNjEzLDcgKzM4MTksNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAgICAgfQogCi0gICAgaWYgKCRpbnRlcmZh
Y2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0pTQ3VzdG9tTmFtZWRHZXR0ZXJPblByb3RvdHlwZX0p
IHsKKyAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q3VzdG9tTmFtZWRH
ZXR0ZXJPblByb3RvdHlwZX0pIHsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJib29sICR7
Y2xhc3NOYW1lfVByb3RvdHlwZTo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBzdGF0ZSwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90
JiBzbG90KVxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFz
c05hbWV9UHJvdG90eXBlKj4oY2VsbCk7XG4iKTsKQEAgLTM3OTIsNDMgKzM5OTgsMzUgQEAgc3Vi
IEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5c
biIpOwogICAgIH0KIAotICAgIG15ICRvdmVycmlkZXNHZXQgPSBJbnN0YW5jZU92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdCgkaW50ZXJmYWNlKTsKLSAgICBpZiAoJG92ZXJyaWRlc0dldCkgewot
ICAgICAgICBpZiAoISRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0N1c3RvbUdldE93
blByb3BlcnR5U2xvdH0pIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCBHZW5lcmF0
ZUdldE93blByb3BlcnR5U2xvdEJvZHkoJGludGVyZmFjZSwgJGNsYXNzTmFtZSwgJGluZGV4ZWRH
ZXR0ZXJPcGVyYXRpb24sICRuYW1lZEdldHRlck9wZXJhdGlvbikpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKCRpbmRleGVkR2V0dGVyT3BlcmF0aW9uIHx8ICRuYW1lZEdldHRlck9wZXJhdGlv
bgotICAgICAgICAgICAgICAgIHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0N1
c3RvbU5hbWVkR2V0dGVyfQotICAgICAgICAgICAgICAgIHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVk
QXR0cmlidXRlcy0+e0pTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvcn0pIHsK
LSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCBHZW5lcmF0ZUdldE93blByb3BlcnR5U2xv
dEJvZHlCeUluZGV4KCRpbnRlcmZhY2UsICRjbGFzc05hbWUsICRpbmRleGVkR2V0dGVyT3BlcmF0
aW9uLCAkbmFtZWRHZXR0ZXJPcGVyYXRpb24pKTsKLSAgICAgICAgfQorICAgIGlmIChJbnN0YW5j
ZU92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCgkaW50ZXJmYWNlKSkgeworICAgICAgICBHZW5l
cmF0ZUdldE93blByb3BlcnR5U2xvdEJvZHkoXEBpbXBsQ29udGVudCwgJGludGVyZmFjZSwgJGNs
YXNzTmFtZSk7CiAgICAgfQotCi0KLSAgICBpZiAoKCRpbmRleGVkR2V0dGVyT3BlcmF0aW9uIHx8
ICRuYW1lZEdldHRlck9wZXJhdGlvbikgJiYgISRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRl
cy0+e0N1c3RvbUVudW1lcmF0ZVByb3BlcnR5fSkgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eU5hbWVzKCRpbnRlcmZhY2UsICRjbGFzc05hbWUsICRp
bmRleGVkR2V0dGVyT3BlcmF0aW9uLCAkbmFtZWRHZXR0ZXJPcGVyYXRpb24pKTsKKyAgICAKKyAg
ICBpZiAoSW5zdGFuY2VPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KCRpbnRlcmZh
Y2UpKSB7CisgICAgICAgIEdlbmVyYXRlR2V0T3duUHJvcGVydHlTbG90Qm9keUJ5SW5kZXgoXEBp
bXBsQ29udGVudCwgJGludGVyZmFjZSwgJGNsYXNzTmFtZSk7CiAgICAgfQotCi0gICAgbXkgJG5h
bWVkU2V0dGVyT3BlcmF0aW9uID0gR2V0TmFtZWRTZXR0ZXJPcGVyYXRpb24oJGludGVyZmFjZSk7
Ci0gICAgbXkgJGluZGV4ZWRTZXR0ZXJPcGVyYXRpb24gPSBHZXRJbmRleGVkU2V0dGVyT3BlcmF0
aW9uKCRpbnRlcmZhY2UpOwotCi0gICAgbXkgJGhhc1NldHRlciA9IEluc3RhbmNlT3ZlcnJpZGVz
UHV0KCRpbnRlcmZhY2UpOwotICAgIGlmICgkaGFzU2V0dGVyKSB7Ci0gICAgICAgIGlmICghJGlu
dGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q3VzdG9tUHV0RnVuY3Rpb259KSB7Ci0gICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgR2VuZXJhdGVQdXQoJGludGVyZmFjZSwgJGNsYXNz
TmFtZSwgJGluZGV4ZWRTZXR0ZXJPcGVyYXRpb24sICRuYW1lZFNldHRlck9wZXJhdGlvbikpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57Q3VzdG9tSW5kZXhlZFNldHRlcn0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57Q3VzdG9tTmFtZWRTZXR0ZXJ9KSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsIEdlbmVyYXRlUHV0QnlJbmRleCgkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkaW5kZXhl
ZFNldHRlck9wZXJhdGlvbiwgJG5hbWVkU2V0dGVyT3BlcmF0aW9uKSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KKyAgICAKKyAgICBpZiAoSW5zdGFuY2VPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eU5hbWVzKCRpbnRlcmZhY2UpKSB7CisgICAgICAgIEdlbmVyYXRlR2V0T3duUHJvcGVydHlOYW1l
cyhcQGltcGxDb250ZW50LCAkaW50ZXJmYWNlLCAkY2xhc3NOYW1lKTsKICAgICB9Ci0KLSAgICBt
eSAkbmFtZWREZWxldGVyT3BlcmF0aW9uID0gR2V0TmFtZWREZWxldGVyT3BlcmF0aW9uKCRpbnRl
cmZhY2UpOwotICAgIGlmICgkbmFtZWREZWxldGVyT3BlcmF0aW9uKSB7Ci0gICAgICAgIEdlbmVy
YXRlTmFtZWREZWxldGVyRGVmaW5pdGlvbihcQGltcGxDb250ZW50LCAkaW50ZXJmYWNlLCAkY2xh
c3NOYW1lLCAkbmFtZWREZWxldGVyT3BlcmF0aW9uKTsKKyAgICAKKyAgICBpZiAoSW5zdGFuY2VP
dmVycmlkZXNQdXQoJGludGVyZmFjZSkpIHsKKyAgICAgICAgR2VuZXJhdGVQdXQoXEBpbXBsQ29u
dGVudCwgJGludGVyZmFjZSwgJGNsYXNzTmFtZSk7CisgICAgICAgIEdlbmVyYXRlUHV0QnlJbmRl
eChcQGltcGxDb250ZW50LCAkaW50ZXJmYWNlLCAkY2xhc3NOYW1lKTsKKyAgICB9CisgICAgCisg
ICAgaWYgKEluc3RhbmNlT3ZlcnJpZGVzRGVmaW5lT3duUHJvcGVydHkoJGludGVyZmFjZSkpIHsK
KyAgICAgICAgR2VuZXJhdGVEZWZpbmVPd25Qcm9wZXJ0eShcQGltcGxDb250ZW50LCAkaW50ZXJm
YWNlLCAkY2xhc3NOYW1lKTsKICAgICB9CiAKKyAgICBpZiAoSW5zdGFuY2VPdmVycmlkZXNEZWxl
dGUoJGludGVyZmFjZSkpIHsKKyAgICAgICAgR2VuZXJhdGVOYW1lZERlbGV0ZXJEZWZpbml0aW9u
KFxAaW1wbENvbnRlbnQsICRpbnRlcmZhY2UsICRjbGFzc05hbWUpOworICAgIH0KKyAgICAKKyAg
ICBpZiAoSW5zdGFuY2VPdmVycmlkZXNDYWxsKCRpbnRlcmZhY2UpKSB7CisgICAgICAgIEdlbmVy
YXRlTGVnYWN5Q2FsbGVyRGVmaW5pdGlvbnMoJGludGVyZmFjZSwgJGNsYXNzTmFtZSk7CisgICAg
fQorICAgIAogICAgIGlmICgkbnVtQXR0cmlidXRlcyA+IDApIHsKICAgICAgICAgQWRkVG9JbXBs
SW5jbHVkZXMoIkpTRE9NQXR0cmlidXRlLmgiKTsKIApAQCAtMzkwOCw4ICs0MTA2LDcgQEAgc3Vi
IEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBmb3JlYWNoIG15ICRvcGVyYXRpb24gKEBvcGVy
YXRpb25zKSB7CiAgICAgICAgIEdlbmVyYXRlT3BlcmF0aW9uRGVmaW5pdGlvbigkaW50ZXJmYWNl
LCAkY2xhc3NOYW1lLCAkb3BlcmF0aW9uKTsKICAgICB9Ci0KLSAgICBHZW5lcmF0ZUxlZ2FjeUNh
bGxlckRlZmluaXRpb25zKCRpbnRlcmZhY2UsICRjbGFzc05hbWUpOworICAgIAogICAgIEdlbmVy
YXRlSXRlcmFibGVEZWZpbml0aW9uKCRpbnRlcmZhY2UpIGlmICRpbnRlcmZhY2UtPml0ZXJhYmxl
OwogICAgIEdlbmVyYXRlU2VyaWFsaXplckRlZmluaXRpb24oJGludGVyZmFjZSwgJGNsYXNzTmFt
ZSkgaWYgJGludGVyZmFjZS0+c2VyaWFsaXphYmxlOwogCkBAIC00NzY5LDEwICs0OTY2LDggQEAg
c3ViIEdlbmVyYXRlTGVnYWN5Q2FsbGVyRGVmaW5pdGlvbnMKIHsKICAgICBteSAoJGludGVyZmFj
ZSwgJGNsYXNzTmFtZSkgPSBAXzsKIAotICAgIGlmICghSXNDYWxsYWJsZSgkaW50ZXJmYWNlKSB8
fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21DYWxsfSkgewotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCisgICAgcmV0dXJuIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0
cmlidXRlcy0+e0N1c3RvbUNhbGx9OworICAgIAogICAgIG15IEBsZWdhY3lDYWxsZXJzID0gQHsk
aW50ZXJmYWNlLT57TGVnYWN5Q2FsbGVyc319OwogICAgIGlmIChAbGVnYWN5Q2FsbGVycyA+IDEp
IHsKICAgICAgICAgZm9yZWFjaCBteSAkbGVnYWN5Q2FsbGVyIChAbGVnYWN5Q2FsbGVycykgewpA
QCAtNjMxMiwxNCArNjUwNywxNCBAQCBzdWIgR2VuZXJhdGVQcm90b3R5cGVEZWNsYXJhdGlvbgog
ICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRl
cy0+e0pTQ3VzdG9tTmFtZWRHZXR0ZXJPblByb3RvdHlwZX0pIHsKKyAgICBpZiAoJGludGVyZmFj
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q3VzdG9tTmFtZWRHZXR0ZXJPblByb3RvdHlwZX0pIHsK
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiXG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIHN0YXRpYyBib29sIHB1dChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3Qm
KTtcbiIpOwogICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYm9vbCBwdXREZWxlZ2F0
ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6
UHV0UHJvcGVydHlTbG90JiwgYm9vbCYgcHV0UmVzdWx0KTtcbiIpOwogICAgIH0KIAogICAgICMg
Q3VzdG9tIGRlZmluZU93blByb3BlcnR5IGZ1bmN0aW9uCi0gICAgaWYgKCRpbnRlcmZhY2UtPmV4
dGVuZGVkQXR0cmlidXRlcy0+e0pTQ3VzdG9tRGVmaW5lT3duUHJvcGVydHlPblByb3RvdHlwZX0p
IHsKKyAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q3VzdG9tRGVmaW5l
T3duUHJvcGVydHlPblByb3RvdHlwZX0pIHsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
XG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHN0YXRpYyBib29sIGRlZmlu
ZU93blByb3BlcnR5KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVy
dHlOYW1lLCBjb25zdCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cp
O1xuIik7CiAgICAgfQpAQCAtNjU4MCw3ICs2Nzc1LDcgQEAgc3ViIElzQ29uc3RydWN0YWJsZQog
ICAgICAgICB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntKU0J1aWx0aW5Db25z
dHJ1Y3Rvcn07CiB9CiAKLXN1YiBJc0NhbGxhYmxlCitzdWIgSW5zdGFuY2VPdmVycmlkZXNDYWxs
CiB7CiAgICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OwogICAgIHJldHVybiAkaW50ZXJmYWNlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21DYWxsfSB8fCAkaW50ZXJmYWNlLT57TGVnYWN5Q2Fs
bGVyc30KQEAgLTY1ODksNyArNjc4NCw5IEBAIHN1YiBJc0NhbGxhYmxlCiBzdWIgSGVhZGVyTmVl
ZHNQcm90b3R5cGVEZWNsYXJhdGlvbgogewogICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKLSAg
ICByZXR1cm4gSXNET01HbG9iYWxPYmplY3QoJGludGVyZmFjZSkgfHwgJGludGVyZmFjZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0b21OYW1lZEdldHRlck9uUHJvdG90eXBlfSB8fCAkaW50
ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntKU0N1c3RvbURlZmluZU93blByb3BlcnR5T25Q
cm90b3R5cGV9OworICAgIHJldHVybiBJc0RPTUdsb2JhbE9iamVjdCgkaW50ZXJmYWNlKQorICAg
ICAgICB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21OYW1lZEdldHRl
ck9uUHJvdG90eXBlfQorICAgICAgICB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PntDdXN0b21EZWZpbmVPd25Qcm9wZXJ0eU9uUHJvdG90eXBlfTsKIH0KIAogc3ViIElzVW5mb3Jn
ZWFibGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRl
cy5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURM
QXR0cmlidXRlcy5qc29uCShyZXZpc2lvbiAyMTc3NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMuanNvbgkod29ya2luZyBjb3B5KQpAQCAtODAsNiAr
ODAsMTIgQEAKICAgICAgICAgIkN1c3RvbUNvbnN0cnVjdG9yIjogewogICAgICAgICAgICAgImNv
bnRleHRzQWxsb3dlZCI6IFsiaW50ZXJmYWNlIl0KICAgICAgICAgfSwKKyAgICAgICAgIkN1c3Rv
bURlZmluZU93blByb3BlcnR5IjogeworICAgICAgICAgICAgImNvbnRleHRzQWxsb3dlZCI6IFsi
aW50ZXJmYWNlIl0KKyAgICAgICAgfSwKKyAgICAgICAgIkN1c3RvbURlZmluZU93blByb3BlcnR5
T25Qcm90b3R5cGUiOiB7CisgICAgICAgICAgICAiY29udGV4dHNBbGxvd2VkIjogWyJpbnRlcmZh
Y2UiXQorICAgICAgICB9LAogICAgICAgICAiQ3VzdG9tRGVsZXRlUHJvcGVydHkiOiB7CiAgICAg
ICAgICAgICAiY29udGV4dHNBbGxvd2VkIjogWyJpbnRlcmZhY2UiXQogICAgICAgICB9LApAQCAt
ODksNiArOTUsMTIgQEAKICAgICAgICAgIkN1c3RvbUdldE93blByb3BlcnR5U2xvdCI6IHsKICAg
ICAgICAgICAgICJjb250ZXh0c0FsbG93ZWQiOiBbImludGVyZmFjZSJdCiAgICAgICAgIH0sCisg
ICAgICAgICJDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4IjogeworICAgICAgICAgICAg
ImNvbnRleHRzQWxsb3dlZCI6IFsiaW50ZXJmYWNlIl0KKyAgICAgICAgfSwKKyAgICAgICAgIkN1
c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2NyaXB0b3IiOiB7CisgICAgICAgICAgICAiY29u
dGV4dHNBbGxvd2VkIjogWyJpbnRlcmZhY2UiXQorICAgICAgICB9LAogICAgICAgICAiQ3VzdG9t
R2V0UHJvdG90eXBlIjogewogICAgICAgICAgICAgImNvbnRleHRzQWxsb3dlZCI6IFsiaW50ZXJm
YWNlIl0KICAgICAgICAgfSwKQEAgLTEwNCw2ICsxMTYsOSBAQAogICAgICAgICAiQ3VzdG9tTmFt
ZWRHZXR0ZXIiOiB7CiAgICAgICAgICAgICAiY29udGV4dHNBbGxvd2VkIjogWyJpbnRlcmZhY2Ui
XQogICAgICAgICB9LAorICAgICAgICAiQ3VzdG9tTmFtZWRHZXR0ZXJPblByb3RvdHlwZSI6IHsK
KyAgICAgICAgICAgICJjb250ZXh0c0FsbG93ZWQiOiBbImludGVyZmFjZSJdCisgICAgICAgIH0s
CiAgICAgICAgICJDdXN0b21OYW1lZFNldHRlciI6IHsKICAgICAgICAgICAgICJjb250ZXh0c0Fs
bG93ZWQiOiBbImludGVyZmFjZSJdCiAgICAgICAgIH0sCkBAIC0xMTMsNiArMTI4LDkgQEAKICAg
ICAgICAgIkN1c3RvbVByb3h5VG9KU09iamVjdCI6IHsKICAgICAgICAgICAgICJjb250ZXh0c0Fs
bG93ZWQiOiBbImludGVyZmFjZSJdCiAgICAgICAgIH0sCisgICAgICAgICJDdXN0b21QdXNoRXZl
bnRIYW5kbGVyU2NvcGUiOiB7CisgICAgICAgICAgICAiY29udGV4dHNBbGxvd2VkIjogWyJpbnRl
cmZhY2UiXQorICAgICAgICB9LAogICAgICAgICAiQ3VzdG9tUHV0RnVuY3Rpb24iOiB7CiAgICAg
ICAgICAgICAiY29udGV4dHNBbGxvd2VkIjogWyJpbnRlcmZhY2UiXQogICAgICAgICB9LApAQCAt
MjIyLDMwICsyNDAsMTUgQEAKICAgICAgICAgIkpTQnVpbHRpbkNvbnN0cnVjdG9yIjogewogICAg
ICAgICAgICAgImNvbnRleHRzQWxsb3dlZCI6IFsiaW50ZXJmYWNlIl0KICAgICAgICAgfSwKLSAg
ICAgICAgIkpTQ3VzdG9tRGVmaW5lT3duUHJvcGVydHkiOiB7Ci0gICAgICAgICAgICAiY29udGV4
dHNBbGxvd2VkIjogWyJpbnRlcmZhY2UiXQotICAgICAgICB9LAotICAgICAgICAiSlNDdXN0b21E
ZWZpbmVPd25Qcm9wZXJ0eU9uUHJvdG90eXBlIjogewotICAgICAgICAgICAgImNvbnRleHRzQWxs
b3dlZCI6IFsiaW50ZXJmYWNlIl0KLSAgICAgICAgfSwKICAgICAgICAgIkpTQ3VzdG9tRmluYWxp
emUiOiB7CiAgICAgICAgICAgICAiY29udGV4dHNBbGxvd2VkIjogWyJpbnRlcmZhY2UiXQogICAg
ICAgICB9LAotICAgICAgICAiSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9y
IjogewotICAgICAgICAgICAgImNvbnRleHRzQWxsb3dlZCI6IFsiaW50ZXJmYWNlIl0KLSAgICAg
ICAgfSwKICAgICAgICAgIkpTQ3VzdG9tSGVhZGVyIjogewogICAgICAgICAgICAgImNvbnRleHRz
QWxsb3dlZCI6IFsiaW50ZXJmYWNlIl0KICAgICAgICAgfSwKICAgICAgICAgIkpTQ3VzdG9tTWFy
a0Z1bmN0aW9uIjogewogICAgICAgICAgICAgImNvbnRleHRzQWxsb3dlZCI6IFsiaW50ZXJmYWNl
Il0KICAgICAgICAgfSwKLSAgICAgICAgIkpTQ3VzdG9tTmFtZWRHZXR0ZXJPblByb3RvdHlwZSI6
IHsKLSAgICAgICAgICAgICJjb250ZXh0c0FsbG93ZWQiOiBbImludGVyZmFjZSJdCi0gICAgICAg
IH0sCi0gICAgICAgICJKU0N1c3RvbVB1c2hFdmVudEhhbmRsZXJTY29wZSI6IHsKLSAgICAgICAg
ICAgICJjb250ZXh0c0FsbG93ZWQiOiBbImludGVyZmFjZSJdCi0gICAgICAgIH0sCiAgICAgICAg
ICJKU0N1c3RvbVRvTmF0aXZlT2JqZWN0IjogewogICAgICAgICAgICAgImNvbnRleHRzQWxsb3dl
ZCI6IFsiaW50ZXJmYWNlIl0KICAgICAgICAgfSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9UZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RJbmRleGVk
U2V0dGVyTm9JZGVudGlmaWVyLmlkbAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitpbnRlcmZhY2UgVGVz
dEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIgeworICAgIHNldHRlciB2b2lkICh1bnNpZ25lZCBs
b25nIGluZGV4LCBET01TdHJpbmcgdmFsdWUpOworCisgICAgLy8gTk9URTogSW5kZXhlZCBzZXR0
ZXJzIHJlcXVpcmUgdGhlIHByZXNlbmNlIG9mIGEgaW5kZXhlZCBnZXR0ZXIgYXMgd2VsbC4KKyAg
ICBnZXR0ZXIgRE9NU3RyaW5nICh1bnNpZ25lZCBsb25nIGluZGV4KTsKK307CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaWRsCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0SW5kZXhl
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworaW50ZXJmYWNlIFRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24geworICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gc2V0dGVyIHZvaWQgKHVuc2lnbmVkIGxv
bmcgaW5kZXgsIERPTVN0cmluZyB2YWx1ZSk7CisKKyAgICAvLyBOT1RFOiBJbmRleGVkIHNldHRl
cnMgcmVxdWlyZSB0aGUgcHJlc2VuY2Ugb2YgYSBpbmRleGVkIGdldHRlciBhcyB3ZWxsLgorICAg
IGdldHRlciBET01TdHJpbmcgKHVuc2lnbmVkIGxvbmcgaW5kZXgpOworfTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0SW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5pZGwJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXIuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCitpbnRlcmZhY2UgVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciB7CisgICAg
c2V0dGVyIHZvaWQgaW5kZXhlZFNldHRlcih1bnNpZ25lZCBsb25nIGluZGV4LCBET01TdHJpbmcg
dmFsdWUpOworCisgICAgLy8gTk9URTogSW5kZXhlZCBzZXR0ZXJzIHJlcXVpcmUgdGhlIHByZXNl
bmNlIG9mIGEgaW5kZXhlZCBnZXR0ZXIgYXMgd2VsbC4KKyAgICBnZXR0ZXIgRE9NU3RyaW5nICh1
bnNpZ25lZCBsb25nIGluZGV4KTsKK307CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5pZGwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaWRsCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
Tm9JZGVudGlmaWVyLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworaW50ZXJmYWNlIFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIgewor
ICAgIHNldHRlciB2b2lkIChET01TdHJpbmcgbmFtZSwgRE9NU3RyaW5nIHZhbHVlKTsKKyAgICBn
ZXR0ZXIgRE9NU3RyaW5nIChET01TdHJpbmcgbmFtZSk7CisKKyAgICBzZXR0ZXIgdm9pZCAodW5z
aWduZWQgbG9uZyBpbmRleCwgRE9NU3RyaW5nIHZhbHVlKTsKKyAgICBnZXR0ZXIgRE9NU3RyaW5n
ICh1bnNpZ25lZCBsb25nIGluZGV4KTsKK307CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9u
LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmlkbAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworaW50ZXJmYWNlIFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbiB7CisgICAgW01heVRocm93RXhjZXB0aW9uXSBzZXR0ZXIgdm9p
ZCAoRE9NU3RyaW5nIG5hbWUsIERPTVN0cmluZyB2YWx1ZSk7CisgICAgZ2V0dGVyIERPTVN0cmlu
ZyAoRE9NU3RyaW5nIG5hbWUpOworCisgICAgW01heVRocm93RXhjZXB0aW9uXSBzZXR0ZXIgdm9p
ZCAodW5zaWduZWQgbG9uZyBpbmRleCwgRE9NU3RyaW5nIHZhbHVlKTsKKyAgICBnZXR0ZXIgRE9N
U3RyaW5nICh1bnNpZ25lZCBsb25nIGluZGV4KTsKK307CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmlkbAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworaW50ZXJmYWNlIFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllciB7CisgICAgc2V0dGVyIHZvaWQgbmFtZWRTZXR0ZXIoRE9NU3RyaW5nIG5h
bWUsIERPTVN0cmluZyB2YWx1ZSk7CisgICAgZ2V0dGVyIERPTVN0cmluZyAoRE9NU3RyaW5nIG5h
bWUpOworCisgICAgc2V0dGVyIHZvaWQgaW5kZXhlZFNldHRlcih1bnNpZ25lZCBsb25nIGluZGV4
LCBET01TdHJpbmcgdmFsdWUpOworICAgIGdldHRlciBET01TdHJpbmcgKHVuc2lnbmVkIGxvbmcg
aW5kZXgpOworfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9U
ZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuaWRsCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZp
ZXIuaWRsCShyZXZpc2lvbiAyMTc3NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmlkbAkod29ya2luZyBjb3B5
KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKIGludGVyZmFjZSBUZXN0TmFtZWREZWxldGVyV2l0
aElkZW50aWZpZXIgewotICAgIGRlbGV0ZXIgdm9pZCByZW1vdmUoRE9NU3RyaW5nIG5hbWUpOwor
ICAgIGRlbGV0ZXIgdm9pZCBuYW1lZERlbGV0ZXIoRE9NU3RyaW5nIG5hbWUpOwogCiAgICAgLy8g
Tk9URTogTmFtZWQgZGVsZXRlcnMgcmVxdWlyZSB0aGUgcHJlc2VuY2Ugb2YgYSBuYW1lZCBnZXR0
ZXIgYXMgd2VsbC4KICAgICBnZXR0ZXIgRE9NU3RyaW5nIChET01TdHJpbmcgbmFtZSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5hbWVkU2V0dGVyTm9J
ZGVudGlmaWVyLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmlkbAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5hbWVkU2V0dGVyTm9J
ZGVudGlmaWVyLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworaW50ZXJmYWNlIFRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllciB7CisgICAgc2V0dGVyIHZv
aWQgKERPTVN0cmluZyBuYW1lLCBET01TdHJpbmcgdmFsdWUpOworCisgICAgLy8gTk9URTogTmFt
ZWQgc2V0dGVycyByZXF1aXJlIHRoZSBwcmVzZW5jZSBvZiBhIG5hbWVkIGdldHRlciBhcyB3ZWxs
LgorICAgIGdldHRlciBET01TdHJpbmcgKERPTVN0cmluZyBuYW1lKTsKK307CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb24uaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9UZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5pZGwJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROYW1lZFNldHRl
clRocm93aW5nRXhjZXB0aW9uLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworaW50ZXJmYWNlIFRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uIHsK
KyAgICBbTWF5VGhyb3dFeGNlcHRpb25dIHNldHRlciB2b2lkIChET01TdHJpbmcgbmFtZSwgRE9N
U3RyaW5nIHZhbHVlKTsKKworICAgIC8vIE5PVEU6IE5hbWVkIHNldHRlcnMgcmVxdWlyZSB0aGUg
cHJlc2VuY2Ugb2YgYSBuYW1lZCBnZXR0ZXIgYXMgd2VsbC4KKyAgICBnZXR0ZXIgRE9NU3RyaW5n
IChET01TdHJpbmcgbmFtZSk7Cit9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmlkbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5hbWVkU2V0dGVyV2l0
aElkZW50aWZpZXIuaWRsCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9UZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5pZGwJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK2ludGVyZmFjZSBUZXN0TmFtZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllciB7CisgICAgc2V0dGVyIHZvaWQgbmFtZWRTZXR0ZXIoRE9NU3Ry
aW5nIG5hbWUsIERPTVN0cmluZyB2YWx1ZSk7CisKKyAgICAvLyBOT1RFOiBOYW1lZCBzZXR0ZXJz
IHJlcXVpcmUgdGhlIHByZXNlbmNlIG9mIGEgbmFtZWQgZ2V0dGVyIGFzIHdlbGwuCisgICAgZ2V0
dGVyIERPTVN0cmluZyAoRE9NU3RyaW5nIG5hbWUpOworfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlu
cy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zLmlkbAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5hbWVkU2V0dGVyV2l0
aE92ZXJyaWRlQnVpbHRpbnMuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCitbCisgICAgT3ZlcnJpZGVCdWlsdGlucworXSBpbnRlcmZhY2UgVGVzdE5hbWVk
U2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMgeworICAgIHNldHRlciB2b2lkIChET01TdHJpbmcg
bmFtZSwgRE9NU3RyaW5nIHZhbHVlKTsKKworICAgIC8vIE5PVEU6IE5hbWVkIHNldHRlcnMgcmVx
dWlyZSB0aGUgcHJlc2VuY2Ugb2YgYSBuYW1lZCBnZXR0ZXIgYXMgd2VsbC4KKyAgICBnZXR0ZXIg
RE9NU3RyaW5nIChET01TdHJpbmcgbmFtZSk7Cit9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGll
cy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcy5pZGwJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROYW1lZFNldHRl
cldpdGhVbmZvcmdhYmxlUHJvcGVydGllcy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKK2ludGVyZmFjZSBUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJs
ZVByb3BlcnRpZXMgeworICAgIHNldHRlciB2b2lkIChET01TdHJpbmcgbmFtZSwgRE9NU3RyaW5n
IHZhbHVlKTsKKworICAgIC8vIE5PVEU6IE5hbWVkIHNldHRlcnMgcmVxdWlyZSB0aGUgcHJlc2Vu
Y2Ugb2YgYSBuYW1lZCBnZXR0ZXIgYXMgd2VsbC4KKyAgICBnZXR0ZXIgRE9NU3RyaW5nIChET01T
dHJpbmcgbmFtZSk7CisKKyAgICBbVW5mb3JnZWFibGVdIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01T
dHJpbmcgdW5mb3JnZWFibGVBdHRyaWJ1dGU7CisgICAgW1VuZm9yZ2VhYmxlXSB2b2lkIHVuZm9y
Z2VhYmxlT3BlcmF0aW9uKCk7Cit9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJy
aWRlQnVpbHRpbnMuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9UZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVy
cmlkZUJ1aWx0aW5zLmlkbAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5k
T3ZlcnJpZGVCdWlsdGlucy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKK1sKKyAgICBPdmVycmlkZUJ1aWx0aW5zCitdIGludGVyZmFjZSBUZXN0TmFtZWRT
ZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zIHsKKyAgICBz
ZXR0ZXIgdm9pZCAoRE9NU3RyaW5nIG5hbWUsIERPTVN0cmluZyB2YWx1ZSk7CisKKyAgICAvLyBO
T1RFOiBOYW1lZCBzZXR0ZXJzIHJlcXVpcmUgdGhlIHByZXNlbmNlIG9mIGEgbmFtZWQgZ2V0dGVy
IGFzIHdlbGwuCisgICAgZ2V0dGVyIERPTVN0cmluZyAoRE9NU3RyaW5nIG5hbWUpOworCisgICAg
W1VuZm9yZ2VhYmxlXSByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHVuZm9yZ2VhYmxlQXR0
cmlidXRlOworICAgIFtVbmZvcmdlYWJsZV0gdm9pZCB1bmZvcmdlYWJsZU9wZXJhdGlvbigpOwor
fTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0ludGVy
ZmFjZU5hbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNJbnRlcmZhY2VOYW1lLmgJKHJldmlzaW9uIDIxNzc2NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0ludGVyZmFjZU5hbWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SlNPYmpl
Y3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKICAgICBz
dGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVj
dCYpOwogICAgIHN0YXRpYyBJbnRlcmZhY2VOYW1lKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6
SlNWYWx1ZSk7CisgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCopOwogICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKIAogICAgIERFQ0xBUkVfSU5GTzsK
QEAgLTUxLDcgKzUyLDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29u
c3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKIAotICAg
IHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqKTsKIHByb3RlY3RlZDoKICAgICBK
U0ludGVyZmFjZU5hbWUoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxJ
bnRlcmZhY2VOYW1lPiYmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmgJKHJldmlzaW9u
IDIxNzc2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RFdmVudFRhcmdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgVGVzdEV2ZW50VGFyZ2V0KiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNW
YWx1ZSk7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYp
OwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVj
dCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5
U2xvdCYpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVj
dCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVy
YXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CiAKICAgICBERUNMQVJFX0lORk87
CiAKQEAgLTUwLDcgKzUxLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCi0gICAgc3Rh
dGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6
OkVudW1lcmF0aW9uTW9kZSgpKTsKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVj
dG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAgICAgVGVzdEV2ZW50
VGFyZ2V0JiB3cmFwcGVkKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9J
ZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwNCBAQAorLyoKKyAgICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNUZXN0SW5k
ZXhlZFNldHRlck5vSWRlbnRpZmllci5oIgorCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisj
aW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKKyNpbmNsdWRlICJK
U0RPTUNvbnZlcnQuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCisjaW5j
bHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRlIDxy
dW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmg+CisjaW5jbHVkZSA8cnVudGltZS9Qcm9wZXJ0eU5h
bWVBcnJheS5oPgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIEpT
QzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBBdHRyaWJ1dGVzCisKK0pTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9v
bCBzZXRKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKKworY2xh
c3MgSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllclByb3RvdHlwZSA6IHB1YmxpYyBKU0M6
OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0M6OkpTTm9u
RmluYWxPYmplY3Q7CisgICAgc3RhdGljIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJQ
cm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTVGVzdElu
ZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlND
OjphbGxvY2F0ZUNlbGw8SlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllclByb3RvdHlwZT4o
dm0uaGVhcCkpIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJQcm90b3R5cGUodm0sIGds
b2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7
CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0
YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAg
eworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVzdEluZGV4ZWRTZXR0ZXJO
b0lkZW50aWZpZXJQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEpTQzo6SlNOb25GaW5hbE9iamVj
dCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KEpTQzo6Vk0mKTsKK307CisKK3VzaW5nIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJD
b25zdHJ1Y3RvciA9IEpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpTVGVzdEluZGV4
ZWRTZXR0ZXJOb0lkZW50aWZpZXI+OworCit0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0SW5kZXhl
ZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUoSlND
OjpWTSYgdm0sIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAg
VU5VU0VEX1BBUkFNKHZtKTsKKyAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LmZ1bmN0aW9uUHJvdG90
eXBlKCk7Cit9CisKK3RlbXBsYXRlPD4gdm9pZCBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlm
aWVyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPnByb3RvdHlwZSwgSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6cHJvdG90eXBl
KHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7Cisg
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJp
bmcoJnZtLCBTdHJpbmcoQVNDSUlMaXRlcmFsKCJUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmll
ciIpKSksIFJlYWRPbmx5IHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250RW51bSk7Cit9CisK
K3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZp
ZXJDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIi
LCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpT
VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcikgfTsKKworLyogSGFzaCB0
YWJsZSBmb3IgcHJvdG90eXBlICovCisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rl
c3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyUHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9Cit7Cisg
ICAgeyAiY29uc3RydWN0b3IiLCBEb250RW51bSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0
YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RJbmRleGVkU2V0dGVy
Tm9JZGVudGlmaWVyQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3Bl
cnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVy
Q29uc3RydWN0b3IpIH0gfSwKK307CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3RJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyUHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0SW5kZXhlZFNldHRlck5v
SWRlbnRpZmllclByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENS
RUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllclByb3RvdHlw
ZSkgfTsKKwordm9pZCBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyUHJvdG90eXBlOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwor
ICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRp
ZmllclByb3RvdHlwZVRhYmxlVmFsdWVzLCAqdGhpcyk7Cit9CisKK2NvbnN0IENsYXNzSW5mbyBK
U1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpzX2luZm8gPSB7ICJUZXN0SW5kZXhlZFNl
dHRlck5vSWRlbnRpZmllciIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFU
RV9NRVRIT0RfVEFCTEUoSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcikgfTsKKworSlNU
ZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6SlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRp
ZmllcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgUmVmPFRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyPiYmIGltcGwpCisgICAgOiBKU0RP
TVdyYXBwZXI8VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI+KHN0cnVjdHVyZSwgZ2xvYmFs
T2JqZWN0LCBXVEZNb3ZlKGltcGwpKQoreworfQorCit2b2lkIEpTVGVzdEluZGV4ZWRTZXR0ZXJO
b0lkZW50aWZpZXI6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSk7CisgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKKworfQorCitK
U09iamVjdCogSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6Y3JlYXRlUHJvdG90eXBl
KFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4g
SlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllclByb3RvdHlwZTo6Y3JlYXRlKHZtLCAmZ2xv
YmFsT2JqZWN0LCBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyUHJvdG90eXBlOjpjcmVh
dGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC5vYmplY3RQcm90b3R5
cGUoKSkpOworfQorCitKU09iamVjdCogSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6
cHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAg
ICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI+
KHZtLCBnbG9iYWxPYmplY3QpOworfQorCitKU1ZhbHVlIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXI6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0SW5kZXhl
ZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUds
b2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOworfQorCit2b2lkIEpTVGVzdEluZGV4ZWRTZXR0
ZXJOb0lkZW50aWZpZXI6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCit7CisgICAgSlNUZXN0
SW5kZXhlZFNldHRlck5vSWRlbnRpZmllciogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVz
dEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIqPihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT5KU1Rl
c3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjp+SlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRp
ZmllcigpOworfQorCitib29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93
blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyKj4ob2JqZWN0
KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Cisg
ICAgYXV0byBvcHRpb25hbEluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpOworICAgIGlm
IChvcHRpb25hbEluZGV4ICYmIG9wdGlvbmFsSW5kZXgudmFsdWUoKSA8IHRoaXNPYmplY3QtPndy
YXBwZWQoKS5sZW5ndGgoKSkgeworICAgICAgICBhdXRvIGluZGV4ID0gb3B0aW9uYWxJbmRleC52
YWx1ZSgpOworICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIDAsIHRvSlM8SURMRE9N
U3RyaW5nPigqc3RhdGUsIHRoaXNPYmplY3QtPndyYXBwZWQoKS5pdGVtKGluZGV4KSkpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKEJhc2U6OmdldE93blByb3BlcnR5U2xv
dCh0aGlzT2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90KSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJO
b0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sK
KyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50
aWZpZXIqPihvYmplY3QpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKKyAgICBpZiAoTElLRUxZKGluZGV4IDwgdGhpc09iamVjdC0+d3JhcHBlZCgp
Lmxlbmd0aCgpKSkgeworICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIDAsIHRvSlM8
SURMRE9NU3RyaW5nPigqc3RhdGUsIHRoaXNPYmplY3QtPndyYXBwZWQoKS5pdGVtKGluZGV4KSkp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIEJhc2U6OmdldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXgodGhpc09iamVjdCwgc3RhdGUsIGluZGV4LCBzbG90KTsKK30KKwor
dm9pZCBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBw
cm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIqPihvYmplY3QpOwor
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5sZW5ndGgo
KTsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6
OmZyb20oc3RhdGUsIGkpKTsKKyAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmpl
Y3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKK30KKworYm9vbCBKU1Rlc3RJbmRleGVk
U2V0dGVyTm9JZGVudGlmaWVyOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3Qm
IHB1dFByb3BlcnR5U2xvdCkKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVz
dEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisKKyAgICBpZiAoYXV0byBpbmRleCA9IHBh
cnNlSW5kZXgocHJvcGVydHlOYW1lKSkgeworICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKKyAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKKyAgICAgICAgdGhpc09iamVjdC0+d3JhcHBl
ZCgpLnNldEl0ZW0oaW5kZXgudmFsdWUoKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gQmFzZTo6cHV0KHRoaXNPYmplY3Qs
IHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3QpOworfQorCitib29s
IEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxs
LCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBz
aG91bGRUaHJvdykKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdEluZGV4
ZWRTZXR0ZXJOb0lkZW50aWZpZXIqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisKKyAgICBpZiAoTElLRUxZKGluZGV4IDw9IE1BWF9B
UlJBWV9JTkRFWCkpIHsKKyAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRShzdGF0ZS0+dm0oKSk7CisgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElE
TERPTVN0cmluZz4oKnN0YXRlLCB2YWx1ZSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgdHJ1ZSk7CisgICAgICAgIHRoaXNPYmplY3QtPndyYXBwZWQoKS5zZXRJdGVt
KGluZGV4LCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIHJldHVybiBCYXNlOjpwdXRCeUluZGV4KGNlbGwsIHN0YXRlLCBpbmRleCwgdmFs
dWUsIHNob3VsZFRocm93KTsKK30KKworYm9vbCBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlm
aWVyOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRl
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIHBy
b3BlcnR5RGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIqPihvYmplY3QpOwor
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKworICAg
IGlmIChhdXRvIGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgIGlm
ICghcHJvcGVydHlEZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RShzdGF0ZS0+dm0oKSk7CisgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERP
TVN0cmluZz4oKnN0YXRlLCBwcm9wZXJ0eURlc2NyaXB0b3IudmFsdWUoKSk7CisgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CisgICAgICAgIHRoaXNPYmplY3Qt
PndyYXBwZWQoKS5zZXRJdGVtKGluZGV4LnZhbHVlKCksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgUHJvcGVydHlEZXNjcmlwdG9yIG5l
d1Byb3BlcnR5RGVzY3JpcHRvciA9IHByb3BlcnR5RGVzY3JpcHRvcjsKKyAgICBuZXdQcm9wZXJ0
eURlc2NyaXB0b3Iuc2V0Q29uZmlndXJhYmxlKHRydWUpOworICAgIHJldHVybiBCYXNlOjpkZWZp
bmVPd25Qcm9wZXJ0eShvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIGNvbmZpZ3VyYWJsZVBy
b3BlcnR5RGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0SW5kZXhl
ZFNldHRlck5vSWRlbnRpZmllclByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQorICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZXRDb25zdHJ1Y3RvcihzdGF0
ZS0+dm0oKSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOworfQorCitib29sIHNldEpTVGVz
dEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sK
KyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNEb3duY2Fz
dDxKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKKyAg
ICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IK
KyAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9w
ZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsK
K30KKworYm9vbCBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyT3duZXI6OmlzUmVhY2hh
YmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lk
KiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBK
U1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyT3duZXI6OmZpbmFsaXplKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiBjb250ZXh0KQoreworICAgIGF1dG8qIGpzVGVz
dEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxKU1Rlc3RJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpOworICAgIGF1dG8mIHdv
cmxkID0gKnN0YXRpY19jYXN0PERPTVdyYXBwZXJXb3JsZCo+KGNvbnRleHQpOworICAgIHVuY2Fj
aGVXcmFwcGVyKHdvcmxkLCAmanNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci0+d3JhcHBl
ZCgpLCBqc1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyKTsKK30KKworI2lmIEVOQUJMRShC
SU5ESU5HX0lOVEVHUklUWSkKKyNpZiBQTEFURk9STShXSU4pCisjcHJhZ21hIHdhcm5pbmcoZGlz
YWJsZTogNDQ4MykKK2V4dGVybiAiQyIgeyBleHRlcm4gdm9pZCAoKmNvbnN0IF9faWRlbnRpZmll
cigiPz9fN1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyQFdlYkNvcmVAQDZCQCIpW10pKCk7
IH0KKyNlbHNlCitleHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQqIF9aVFZON1dlYkNvcmUyOVRlc3RJ
bmRleGVkU2V0dGVyTm9JZGVudGlmaWVyRVtdOyB9CisjZW5kaWYKKyNlbmRpZgorCitKU0M6OkpT
VmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcj4mJiBpbXBs
KQoreworCisjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQorICAgIHZvaWQqIGFjdHVhbFZU
YWJsZVBvaW50ZXIgPSAqKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihpbXBsLnB0cigpKSk7Cisj
aWYgUExBVEZPUk0oV0lOKQorICAgIHZvaWQqIGV4cGVjdGVkVlRhYmxlUG9pbnRlciA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KF9faWRlbnRpZmllcigiPz9fN1Rlc3RJbmRleGVkU2V0dGVyTm9J
ZGVudGlmaWVyQFdlYkNvcmVAQDZCQCIpKTsKKyNlbHNlCisgICAgdm9pZCogZXhwZWN0ZWRWVGFi
bGVQb2ludGVyID0gJl9aVFZON1dlYkNvcmUyOVRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVy
RVsyXTsKKyNpZiBDT01QSUxFUihDTEFORykKKyAgICAvLyBJZiB0aGlzIGZhaWxzIFRlc3RJbmRl
eGVkU2V0dGVyTm9JZGVudGlmaWVyIGRvZXMgbm90IGhhdmUgYSB2dGFibGUsIHNvIHlvdSBuZWVk
IHRvIGFkZCB0aGUKKyAgICAvLyBJbXBsZW1lbnRhdGlvbkxhY2tzVlRhYmxlIGF0dHJpYnV0ZSB0
byB0aGUgaW50ZXJmYWNlIGRlZmluaXRpb24KKyAgICBzdGF0aWNfYXNzZXJ0KF9faXNfcG9seW1v
cnBoaWMoVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIpLCAiVGVzdEluZGV4ZWRTZXR0ZXJO
b0lkZW50aWZpZXIgaXMgbm90IHBvbHltb3JwaGljIik7CisjZW5kaWYKKyNlbmRpZgorICAgIC8v
IElmIHlvdSBoaXQgdGhpcyBhc3NlcnRpb24geW91IGVpdGhlciBoYXZlIGEgdXNlIGFmdGVyIGZy
ZWUgYnVnLCBvcgorICAgIC8vIFRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyIGhhcyBzdWJj
bGFzc2VzLiBJZiBUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllciBoYXMgc3ViY2xhc3NlcyB0
aGF0IGdldCBwYXNzZWQKKyAgICAvLyB0byB0b0pTKCkgd2UgY3VycmVudGx5IHJlcXVpcmUgVGVz
dEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIgeW91IHRvIG9wdCBvdXQgb2YgYmluZGluZyBoYXJk
ZW5pbmcKKyAgICAvLyBieSBhZGRpbmcgdGhlIFNraXBWVGFibGVWYWxpZGF0aW9uIGF0dHJpYnV0
ZSB0byB0aGUgaW50ZXJmYWNlIElETCBkZWZpbml0aW9uCisgICAgUkVMRUFTRV9BU1NFUlQoYWN0
dWFsVlRhYmxlUG9pbnRlciA9PSBleHBlY3RlZFZUYWJsZVBvaW50ZXIpOworI2VuZGlmCisgICAg
cmV0dXJuIGNyZWF0ZVdyYXBwZXI8VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI+KGdsb2Jh
bE9iamVjdCwgV1RGTW92ZShpbXBsKSk7Cit9CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdEluZGV4
ZWRTZXR0ZXJOb0lkZW50aWZpZXImIGltcGwpCit7CisgICAgcmV0dXJuIHdyYXAoc3RhdGUsIGds
b2JhbE9iamVjdCwgaW1wbCk7Cit9CisKK1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyKiBK
U1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjp0b1dyYXBwZWQoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAoYXV0byogd3JhcHBlciA9IGpzRHluYW1pY0Rv
d25jYXN0PEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIqPih2bSwgdmFsdWUpKQorICAg
ICAgICByZXR1cm4gJndyYXBwZXItPndyYXBwZWQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
KworfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmll
ci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw5MyBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgorI2luY2x1ZGUgIlRlc3RJbmRleGVkU2V0dGVyTm9J
ZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllciA6IHB1
YmxpYyBKU0RPTVdyYXBwZXI8VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI+IHsKK3B1Ymxp
YzoKKyAgICB1c2luZyBCYXNlID0gSlNET01XcmFwcGVyPFRlc3RJbmRleGVkU2V0dGVyTm9JZGVu
dGlmaWVyPjsKKyAgICBzdGF0aWMgSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllciogY3Jl
YXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFJlZjxUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcj4mJiBpbXBsKQorICAgIHsK
KyAgICAgICAgSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllciogcHRyID0gbmV3IChOb3RO
dWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyPihn
bG9iYWxPYmplY3QtPnZtKCkuaGVhcCkpIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIo
c3RydWN0dXJlLCAqZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKKyAgICAgICAgcHRyLT5m
aW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOworICAgICAgICByZXR1cm4gcHRyOwor
ICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpW
TSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHByb3Rv
dHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKKyAgICBzdGF0aWMgVGVzdEluZGV4
ZWRTZXR0ZXJOb0lkZW50aWZpZXIqIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsK
KyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlND
OjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7
CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlND
OjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1v
ZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgYm9vbCBwdXQoSlNDOjpK
U0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUs
IEpTQzo6UHV0UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgcHV0QnlJbmRleChKU0M6
OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpT
VmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3Bl
cnR5KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBj
b25zdCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0
YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKwor
ICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRD
b25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOworcHVibGlj
OgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6SW50ZXJj
ZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpT
Qzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNHZXRQcm9wZXJ0
eU5hbWVzIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7Citwcm90ZWN0ZWQ6CisgICAgSlNUZXN0SW5k
ZXhlZFNldHRlck5vSWRlbnRpZmllcihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0
JiwgUmVmPFRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyPiYmKTsKKworICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKKworY2xhc3MgSlNUZXN0SW5kZXhlZFNldHRlck5v
SWRlbnRpZmllck93bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZp
cnR1YWwgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250
ZXh0KTsKK307CisKK2lubGluZSBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERP
TVdyYXBwZXJXb3JsZCYsIFRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyKikKK3sKKyAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllck93bmVy
PiBvd25lcjsKKyAgICByZXR1cm4gJm93bmVyLmdldCgpOworfQorCitpbmxpbmUgdm9pZCogd3Jh
cHBlcktleShUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllciogd3JhcHBhYmxlT2JqZWN0KQor
eworICAgIHJldHVybiB3cmFwcGFibGVPYmplY3Q7Cit9CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0SW5kZXhlZFNldHRlck5vSWRl
bnRpZmllciYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXIqIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3Qs
ICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVk
KEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdEluZGV4ZWRTZXR0
ZXJOb0lkZW50aWZpZXI+JiYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVk
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UmVmUHRyPFRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyPiYmIGltcGwpIHsgcmV0dXJuIGlt
cGwgPyB0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5v
bk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3Jh
cHBlckNvbnZlcnRlclRyYWl0czxUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcj4geworICAg
IHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI7Cisg
ICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlm
aWVyKjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJ
bmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzA0IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaCIKKworI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25z
dHJ1Y3RhYmxlLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCisjaW5jbHVkZSAiSlNET01F
eGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5j
bHVkZSAiVVJMLmgiCisjaW5jbHVkZSA8cnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5oPgorI2lu
Y2x1ZGUgPHJ1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYvR2V0UHRy
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8g
QXR0cmlidXRlcworCitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEluZGV4ZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RJbmRleGVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpT
VmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworCitjbGFzcyBKU1Rlc3RJbmRleGVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb25Qcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0
IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNDOjpKU05vbkZpbmFsT2JqZWN0OworICAg
IHN0YXRpYyBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Qcm90b3R5cGUqIGNy
ZWF0ZShKU0M6OlZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTVGVzdEluZGV4ZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvblByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9j
YXRlQ2VsbDxKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Qcm90b3R5cGU+KHZt
LmhlYXApKSBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Qcm90b3R5cGUodm0s
IGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2
bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAg
IHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisg
ICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVzdEluZGV4ZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvblByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogSlNDOjpKU05vbkZp
bmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oSlNDOjpWTSYpOworfTsKKwordXNpbmcgSlNUZXN0SW5kZXhlZFNldHRlclRocm93
aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IgPSBKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJs
ZTxKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+OworCit0ZW1wbGF0ZTw+IEpT
VmFsdWUgSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3I6OnBy
b3RvdHlwZUZvclN0cnVjdHVyZShKU0M6OlZNJiB2bSwgY29uc3QgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0odm0pOworICAgIHJldHVybiBnbG9i
YWxPYmplY3QuZnVuY3Rpb25Qcm90b3R5cGUoKTsKK30KKwordGVtcGxhdGU8PiB2b2lkIEpTVGVz
dEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJv
cGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdEluZGV4ZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBEb250
RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBTdHJpbmcoQVNDSUlMaXRl
cmFsKCJUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uIikpKSwgUmVhZE9ubHkgfCBE
b250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpz
TnVtYmVyKDApLCBSZWFkT25seSB8IERvbnRFbnVtKTsKK30KKwordGVtcGxhdGU8PiBjb25zdCBD
bGFzc0luZm8gSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3I6
OnNfaW5mbyA9IHsgIlRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24iLCAmQmFzZTo6
c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKSB9OworCisvKiBIYXNoIHRhYmxl
IGZvciBwcm90b3R5cGUgKi8KKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdElu
ZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvblByb3RvdHlwZVRhYmxlVmFsdWVzW10gPQorewor
ICAgIHsgImNvbnN0cnVjdG9yIiwgRG9udEVudW0sIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClz
dGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0SW5kZXhlZFNldHRl
clRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1
dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb25Db25zdHJ1Y3RvcikgfSB9LAorfTsKKworY29uc3QgQ2xhc3NJbmZvIEpTVGVz
dEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvblByb3RvdHlwZTo6c19pbmZvID0geyAiVGVz
dEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvblByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8s
IG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0SW5kZXhlZFNldHRl
clRocm93aW5nRXhjZXB0aW9uUHJvdG90eXBlKSB9OworCit2b2lkIEpTVGVzdEluZGV4ZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvblByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQorewor
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXMo
dm0sIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvblByb3RvdHlwZVRhYmxlVmFs
dWVzLCAqdGhpcyk7Cit9CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3RJbmRleGVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb246OnNfaW5mbyA9IHsgIlRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24iLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbikgfTsKKworSlNUZXN0SW5k
ZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb24oU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIFJlZjxUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uPiYmIGltcGwpCisg
ICAgOiBKU0RPTVdyYXBwZXI8VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4oc3Ry
dWN0dXJlLCBnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpCit7Cit9CisKK3ZvaWQgSlNUZXN0
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7
CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VSVChpbmhlcml0cyh2bSwg
aW5mbygpKSk7CisKK30KKworSlNPYmplY3QqIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbjo6Y3JlYXRlUHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCkKK3sKKyAgICByZXR1cm4gSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uUHJvdG90eXBlOjpjcmVhdGUodm0sICZnbG9iYWxPYmplY3QsIEpTVGVzdEluZGV4ZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCAmZ2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3Qub2JqZWN0UHJvdG90eXBlKCkpKTsKK30KKworSlNPYmplY3Qq
IEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6cHJvdG90eXBlKFZNJiB2bSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJv
dG90eXBlPEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4odm0sIGdsb2JhbE9i
amVjdCk7Cit9CisKK0pTVmFsdWUgSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9u
OjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdEluZGV4ZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2Jh
bE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOworfQorCit2b2lkIEpTVGVzdEluZGV4ZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbjo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKK3sKKyAgICBKU1Rl
c3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qIHRoaXNPYmplY3QgPSBzdGF0aWNfY2Fz
dDxKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qPihjZWxsKTsKKyAgICB0aGlz
T2JqZWN0LT5KU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246On5KU1Rlc3RJbmRl
eGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24oKTsKK30KKworYm9vbCBKU1Rlc3RJbmRleGVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RJbmRleGVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qPihvYmplY3QpOworICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBhdXRvIG9wdGlvbmFsSW5kZXggPSBw
YXJzZUluZGV4KHByb3BlcnR5TmFtZSk7CisgICAgaWYgKG9wdGlvbmFsSW5kZXggJiYgb3B0aW9u
YWxJbmRleC52YWx1ZSgpIDwgdGhpc09iamVjdC0+d3JhcHBlZCgpLmxlbmd0aCgpKSB7CisgICAg
ICAgIGF1dG8gaW5kZXggPSBvcHRpb25hbEluZGV4LnZhbHVlKCk7CisgICAgICAgIHNsb3Quc2V0
VmFsdWUodGhpc09iamVjdCwgMCwgdG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwgdGhpc09iamVj
dC0+d3JhcHBlZCgpLml0ZW0oaW5kZXgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICBpZiAoQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIHN0YXRlLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIHVu
c2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgYXV0byogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qPihvYmplY3Qp
OworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAg
ICBpZiAoTElLRUxZKGluZGV4IDwgdGhpc09iamVjdC0+d3JhcHBlZCgpLmxlbmd0aCgpKSkgewor
ICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIDAsIHRvSlM8SURMRE9NU3RyaW5nPigq
c3RhdGUsIHRoaXNPYmplY3QtPndyYXBwZWQoKS5pdGVtKGluZGV4KSkpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgodGhpc09iamVjdCwgc3RhdGUsIGluZGV4LCBzbG90KTsKK30KKwordm9pZCBKU1Rlc3RJbmRl
eGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFt
ZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4ob2JqZWN0KTsKKyAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMCwgY291bnQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkubGVuZ3RoKCk7IGkg
PCBjb3VudDsgKytpKQorICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9t
KHN0YXRlLCBpKSk7CisgICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBz
dGF0ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7Cit9CisKK2Jvb2wgSlNUZXN0SW5kZXhlZFNldHRl
clRocm93aW5nRXhjZXB0aW9uOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3Qm
IHB1dFByb3BlcnR5U2xvdCkKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVz
dEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KGNlbGwpOworICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKworICAgIGlmIChhdXRvIGluZGV4
ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOworICAgICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgdmFsdWUpOworICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOworICAgICAgICBwcm9wYWdhdGVFeGNl
cHRpb24oKnN0YXRlLCB0aHJvd1Njb3BlLCB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0SXRlbShp
bmRleC52YWx1ZSgpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSkpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gQmFzZTo6cHV0KHRoaXNPYmplY3QsIHN0YXRlLCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3QpOworfQorCitib29sIEpTVGVzdEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNT
dGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRo
cm93KQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0SW5kZXhlZFNldHRl
clRocm93aW5nRXhjZXB0aW9uKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOworCisgICAgaWYgKExJS0VMWShpbmRleCA8PSBNQVhfQVJS
QVlfSU5ERVgpKSB7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUoc3RhdGUtPnZtKCkpOworICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExE
T01TdHJpbmc+KCpzdGF0ZSwgdmFsdWUpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIHRydWUpOworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oKnN0YXRlLCB0aHJv
d1Njb3BlLCB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0SXRlbShpbmRleCwgV1RGTW92ZShuYXRp
dmVWYWx1ZSkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIEJh
c2U6OnB1dEJ5SW5kZXgoY2VsbCwgc3RhdGUsIGluZGV4LCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwor
fQorCitib29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6ZGVmaW5lT3du
UHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBwcm9wZXJ0eURlc2NyaXB0
b3IsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qPihvYmplY3QpOworICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKworICAgIGlmIChhdXRv
IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgIGlmICghcHJvcGVy
dHlEZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+
dm0oKSk7CisgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4o
KnN0YXRlLCBwcm9wZXJ0eURlc2NyaXB0b3IudmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbigq
c3RhdGUsIHRocm93U2NvcGUsIHRoaXNPYmplY3QtPndyYXBwZWQoKS5zZXRJdGVtKGluZGV4LnZh
bHVlKCksIFdURk1vdmUobmF0aXZlVmFsdWUpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIFByb3BlcnR5RGVzY3JpcHRvciBuZXdQcm9wZXJ0eURlc2NyaXB0b3IgPSBwcm9w
ZXJ0eURlc2NyaXB0b3I7CisgICAgbmV3UHJvcGVydHlEZXNjcmlwdG9yLnNldENvbmZpZ3VyYWJs
ZSh0cnVlKTsKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBzdGF0
ZSwgcHJvcGVydHlOYW1lLCBjb25maWd1cmFibGVQcm9wZXJ0eURlc2NyaXB0b3IsIHNob3VsZFRo
cm93KTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byogcHJvdG90
eXBlID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAo
VU5MSUtFTFkoIXByb3RvdHlwZSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0
YXRlLCB0aHJvd1Njb3BlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIHBy
b3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKK30KKworYm9vbCBzZXRKU1Rlc3RJbmRleGVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICBW
TSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rl
c3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Qcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgeworICAg
ICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvcgor
ICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3Bl
cnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwor
fQorCitib29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbk93bmVyOjppc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwg
dm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFVOVVNFRF9QQVJBTShoYW5kbGUp
OworICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Zv
aWQgSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uT3duZXI6OmZpbmFsaXplKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiBjb250ZXh0KQoreworICAgIGF1
dG8qIGpzVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiA9IHN0YXRpY19jYXN0PEpT
VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KGhhbmRsZS5zbG90KCktPmFzQ2Vs
bCgpKTsKKyAgICBhdXRvJiB3b3JsZCA9ICpzdGF0aWNfY2FzdDxET01XcmFwcGVyV29ybGQqPihj
b250ZXh0KTsKKyAgICB1bmNhY2hlV3JhcHBlcih3b3JsZCwgJmpzVGVzdEluZGV4ZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbi0+d3JhcHBlZCgpLCBqc1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb24pOworfQorCisjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQorI2lmIFBMQVRG
T1JNKFdJTikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NDgzKQorZXh0ZXJuICJDIiB7IGV4
dGVybiB2b2lkICgqY29uc3QgX19pZGVudGlmaWVyKCI/P183VGVzdEluZGV4ZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbkBXZWJDb3JlQEA2QkAiKVtdKSgpOyB9CisjZWxzZQorZXh0ZXJuICJDIiB7
IGV4dGVybiB2b2lkKiBfWlRWTjdXZWJDb3JlMzRUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uRVtdOyB9CisjZW5kaWYKKyNlbmRpZgorCitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3Jl
YXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJl
ZjxUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uPiYmIGltcGwpCit7CisKKyNpZiBF
TkFCTEUoQklORElOR19JTlRFR1JJVFkpCisgICAgdm9pZCogYWN0dWFsVlRhYmxlUG9pbnRlciA9
ICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KGltcGwucHRyKCkpKTsKKyNpZiBQTEFURk9STShX
SU4pCisgICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oX19pZGVudGlmaWVyKCI/P183VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
bkBXZWJDb3JlQEA2QkAiKSk7CisjZWxzZQorICAgIHZvaWQqIGV4cGVjdGVkVlRhYmxlUG9pbnRl
ciA9ICZfWlRWTjdXZWJDb3JlMzRUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uRVsy
XTsKKyNpZiBDT01QSUxFUihDTEFORykKKyAgICAvLyBJZiB0aGlzIGZhaWxzIFRlc3RJbmRleGVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb24gZG9lcyBub3QgaGF2ZSBhIHZ0YWJsZSwgc28geW91IG5l
ZWQgdG8gYWRkIHRoZQorICAgIC8vIEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUgYXR0cmlidXRl
IHRvIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbgorICAgIHN0YXRpY19hc3NlcnQoX19pc19wb2x5
bW9ycGhpYyhUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKSwgIlRlc3RJbmRleGVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb24gaXMgbm90IHBvbHltb3JwaGljIik7CisjZW5kaWYKKyNl
bmRpZgorICAgIC8vIElmIHlvdSBoaXQgdGhpcyBhc3NlcnRpb24geW91IGVpdGhlciBoYXZlIGEg
dXNlIGFmdGVyIGZyZWUgYnVnLCBvcgorICAgIC8vIFRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb24gaGFzIHN1YmNsYXNzZXMuIElmIFRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24gaGFzIHN1YmNsYXNzZXMgdGhhdCBnZXQgcGFzc2VkCisgICAgLy8gdG8gdG9KUygpIHdl
IGN1cnJlbnRseSByZXF1aXJlIFRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24geW91
IHRvIG9wdCBvdXQgb2YgYmluZGluZyBoYXJkZW5pbmcKKyAgICAvLyBieSBhZGRpbmcgdGhlIFNr
aXBWVGFibGVWYWxpZGF0aW9uIGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJmYWNlIElETCBkZWZpbml0
aW9uCisgICAgUkVMRUFTRV9BU1NFUlQoYWN0dWFsVlRhYmxlUG9pbnRlciA9PSBleHBlY3RlZFZU
YWJsZVBvaW50ZXIpOworI2VuZGlmCisgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXI8VGVzdEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4oZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsK
K30KKworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9u
JiBpbXBsKQoreworICAgIHJldHVybiB3cmFwKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwpOwor
fQorCitUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKiBKU1Rlc3RJbmRleGVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb246OnRvV3JhcHBlZChKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQoreworICAgIGlmIChhdXRvKiB3cmFwcGVyID0ganNEeW5hbWljRG93bmNhc3Q8SlNU
ZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4odm0sIHZhbHVlKSkKKyAgICAgICAg
cmV0dXJuICZ3cmFwcGVyLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRl
eGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5l
cmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJUZXN0SW5kZXhl
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgiCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNUZXN0SW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uIDogcHVibGljIEpTRE9NV3JhcHBlcjxUZXN0SW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uPiB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTRE9NV3JhcHBl
cjxUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uPjsKKyAgICBzdGF0aWMgSlNUZXN0
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RJbmRleGVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+JiYgaW1wbCkKKyAgICB7CisgICAgICAgIEpTVGVzdElu
ZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFs
bG9jYXRlQ2VsbDxKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+KGdsb2JhbE9i
amVjdC0+dm0oKS5oZWFwKSkgSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKHN0
cnVjdHVyZSwgKmdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7CisgICAgICAgIHB0ci0+Zmlu
aXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAg
ICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0m
LCBKU0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90b3R5
cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CisgICAgc3RhdGljIFRlc3RJbmRleGVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVl
KTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Cisg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0Kiwg
SlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90
Jik7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0Kiwg
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlv
bk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgYm9vbCBwdXQoSlND
OjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFs
dWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgcHV0QnlJbmRleChK
U0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6
OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyBib29sIGRlZmluZU93blBy
b3BlcnR5KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1l
LCBjb25zdCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOworICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKKworICAgIERFQ0xBUkVfSU5GTzsK
KworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBn
ZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOworcHVi
bGljOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6SW50
ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8
IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNHZXRQcm9w
ZXJ0eU5hbWVzIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7Citwcm90ZWN0ZWQ6CisgICAgSlNUZXN0
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9i
YWxPYmplY3QmLCBSZWY8VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4mJik7CisK
KyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK2NsYXNzIEpTVGVzdElu
ZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbk93bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRs
ZU93bmVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90
VmlzaXRvciYpOworICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+LCB2b2lkKiBjb250ZXh0KTsKK307CisKK2lubGluZSBKU0M6OldlYWtIYW5kbGVPd25l
ciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3JsZCYsIFRlc3RJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb24qKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxKU1Rlc3RJbmRleGVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Pd25lcj4gb3duZXI7CisgICAgcmV0dXJuICZvd25lci5n
ZXQoKTsKK30KKworaW5saW5lIHZvaWQqIHdyYXBwZXJLZXkoVGVzdEluZGV4ZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbiogd3JhcHBhYmxlT2JqZWN0KQoreworICAgIHJldHVybiB3cmFwcGFibGVP
YmplY3Q7Cit9CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9i
YWxPYmplY3QqLCBUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uJik7CitpbmxpbmUg
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKiBpbXBs
KSB7IHJldHVybiBpbXBsID8gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6
OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0
ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24+JiYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRl
c3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+JiYgaW1wbCkgeyByZXR1cm4gaW1wbCA/
IHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVs
bCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVy
Q29udmVydGVyVHJhaXRzPFRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+IHsKKyAg
ICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b247CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFRlc3RJbmRleGVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb24qOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwzMzUgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oIgorCisjaW5j
bHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0
cnVjdGFibGUuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnQuaCIKKyNpbmNsdWRlICJKU0RPTUV4
Y2VwdGlvbkhhbmRsaW5nLmgiCisjaW5jbHVkZSAiSlNET01PcGVyYXRpb24uaCIKKyNpbmNsdWRl
ICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgIlVSTC5oIgorI2luY2x1ZGUgPHJ1bnRp
bWUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KKyNpbmNsdWRlIDxydW50aW1lL1Byb3BlcnR5TmFtZUFy
cmF5Lmg+CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgSlNDOwor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEZ1bmN0aW9ucworCitKU0M6OkVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG90
eXBlRnVuY3Rpb25JbmRleGVkU2V0dGVyKEpTQzo6RXhlY1N0YXRlKik7CisKKy8vIEF0dHJpYnV0
ZXMKKworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXJDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVy
Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlKTsKKworY2xhc3MgSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVy
UHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAg
dXNpbmcgQmFzZSA9IEpTQzo6SlNOb25GaW5hbE9iamVjdDsKKyAgICBzdGF0aWMgSlNUZXN0SW5k
ZXhlZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CisgICAgeworICAgICAgICBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5
cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0SW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0SW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Cisg
ICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gcHRyOworICAg
IH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZv
KEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGUoSlND
OjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJl
KQorICAgICAgICA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsK
KyAgICB9CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK3VzaW5n
IEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yID0gSlNET01Db25z
dHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVy
PjsKKwordGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmll
ckNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIGNvbnN0IEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHZtKTsK
KyAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LmZ1bmN0aW9uUHJvdG90eXBlKCk7Cit9CisKK3RlbXBs
YXRlPD4gdm9pZCBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3Rvcjo6
aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0KQoreworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBK
U1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2Jq
ZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5n
KEFTQ0lJTGl0ZXJhbCgiVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciIpKSksIFJlYWRP
bmx5IHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVu
Z3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250RW51bSk7Cit9CisKK3RlbXBsYXRlPD4g
Y29uc3QgQ2xhc3NJbmZvIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVj
dG9yOjpzX2luZm8gPSB7ICJUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyIiwgJkJhc2U6
OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcikgfTsKKworLyogSGFzaCB0YWJsZSBm
b3IgcHJvdG90eXBlICovCisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KK3sKKyAgICB7
ICJjb25zdHJ1Y3RvciIsIERvbnRFbnVtLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGlj
X2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEluZGV4ZWRTZXR0ZXJXaXRo
SWRlbnRpZmllckNvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0
eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVy
Q29uc3RydWN0b3IpIH0gfSwKKyAgICB7ICJpbmRleGVkU2V0dGVyIiwgSlNDOjpGdW5jdGlvbiwg
Tm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rl
c3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGVGdW5jdGlvbkluZGV4ZWRTZXR0
ZXIpLCAoaW50cHRyX3QpICgyKSB9IH0sCit9OworCitjb25zdCBDbGFzc0luZm8gSlNUZXN0SW5k
ZXhlZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0SW5kZXhl
ZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwg
bnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXJQcm90b3R5cGUpIH07CisKK3ZvaWQgSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24odm0pOworICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNUZXN0SW5kZXhl
ZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlVGFibGVWYWx1ZXMsICp0aGlzKTsKK30KKwor
Y29uc3QgQ2xhc3NJbmZvIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6c19pbmZv
ID0geyAiVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciIsICZCYXNlOjpzX2luZm8sIG51
bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0SW5kZXhlZFNldHRlcldp
dGhJZGVudGlmaWVyKSB9OworCitKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OkpT
VGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXI+JiYgaW1wbCkKKyAgICA6IEpTRE9NV3JhcHBlcjxUZXN0SW5kZXhlZFNldHRlcldp
dGhJZGVudGlmaWVyPihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSkKK3sK
K30KKwordm9pZCBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgQVNTRVJU
KGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKKworfQorCitKU09iamVjdCogSlNUZXN0SW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyOjpjcmVhdGVQcm90b3R5cGUoVk0mIHZtLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0
aElkZW50aWZpZXJQcm90b3R5cGU6OmNyZWF0ZSh2bSwgJmdsb2JhbE9iamVjdCwgSlNUZXN0SW5k
ZXhlZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sICZn
bG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC5vYmplY3RQcm90b3R5cGUoKSkpOworfQorCitKU09i
amVjdCogSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpwcm90b3R5cGUoVk0mIHZt
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Q
cm90b3R5cGU8SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyPih2bSwgZ2xvYmFsT2Jq
ZWN0KTsKK30KKworSlNWYWx1ZSBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6Omdl
dENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
K3sKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJ
ZGVudGlmaWVyQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0
Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisKK3ZvaWQgSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQoreworICAgIEpTVGVzdEluZGV4ZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllciogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdEluZGV4
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KGNlbGwpOworICAgIHRoaXNPYmplY3QtPkpTVGVzdElu
ZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6fkpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRp
ZmllcigpOworfQorCitib29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0
T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBhdXRvKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KG9i
amVjdCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OworICAgIGF1dG8gb3B0aW9uYWxJbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKTsKKyAg
ICBpZiAob3B0aW9uYWxJbmRleCAmJiBvcHRpb25hbEluZGV4LnZhbHVlKCkgPCB0aGlzT2JqZWN0
LT53cmFwcGVkKCkubGVuZ3RoKCkpIHsKKyAgICAgICAgYXV0byBpbmRleCA9IG9wdGlvbmFsSW5k
ZXgudmFsdWUoKTsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCAwLCB0b0pTPElE
TERPTVN0cmluZz4oKnN0YXRlLCB0aGlzT2JqZWN0LT53cmFwcGVkKCkuaXRlbShpbmRleCkpKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmIChCYXNlOjpnZXRPd25Qcm9wZXJ0
eVNsb3QodGhpc09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBKU1Rlc3RJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xv
dCkKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllcio+KG9iamVjdCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIGlmIChMSUtFTFkoaW5kZXggPCB0aGlzT2JqZWN0LT53
cmFwcGVkKCkubGVuZ3RoKCkpKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwg
MCwgdG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwgdGhpc09iamVjdC0+d3JhcHBlZCgpLml0ZW0o
aW5kZXgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gQmFzZTo6
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCh0aGlzT2JqZWN0LCBzdGF0ZSwgaW5kZXgsIHNsb3Qp
OworfQorCit2b2lkIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJv
cGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5h
bWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIq
PihvYmplY3QpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHRoaXNPYmplY3QtPndyYXBw
ZWQoKS5sZW5ndGgoKTsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRk
KElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGkpKTsKKyAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKHRoaXNPYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKK30KKworYm9vbCBK
U1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNT
dGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYgcHV0UHJvcGVydHlTbG90KQoreworICAgIGF1dG8qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKj4oY2VsbCk7CisgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworCisgICAgaWYg
KGF1dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7CisgICAgICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCB2YWx1ZSk7Cisg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CisgICAgICAgIHRo
aXNPYmplY3QtPndyYXBwZWQoKS5pbmRleGVkU2V0dGVyKGluZGV4LnZhbHVlKCksIFdURk1vdmUo
bmF0aXZlVmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJu
IEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJv
cGVydHlTbG90KTsKK30KKworYm9vbCBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6
OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRl
eCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KGNlbGwpOwor
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKworICAg
IGlmIChMSUtFTFkoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKSkgeworICAgICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKKyAgICAgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHZhbHVlKTsKKyAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKKyAgICAgICAgdGhp
c09iamVjdC0+d3JhcHBlZCgpLmluZGV4ZWRTZXR0ZXIoaW5kZXgsIFdURk1vdmUobmF0aXZlVmFs
dWUpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIEJhc2U6OnB1
dEJ5SW5kZXgoY2VsbCwgc3RhdGUsIGluZGV4LCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworfQorCiti
b29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6ZGVmaW5lT3duUHJvcGVydHko
SlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBwcm9wZXJ0eURlc2NyaXB0b3IsIGJvb2wg
c2hvdWxkVGhyb3cpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXIqPihvYmplY3QpOworICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKworICAgIGlmIChhdXRvIGluZGV4ID0gcGFy
c2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgIGlmICghcHJvcGVydHlEZXNjcmlwdG9y
LmlzRGF0YURlc2NyaXB0b3IoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7CisgICAg
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBwcm9w
ZXJ0eURlc2NyaXB0b3IudmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgdHJ1ZSk7CisgICAgICAgIHRoaXNPYmplY3QtPndyYXBwZWQoKS5pbmRleGVkU2V0
dGVyKGluZGV4LnZhbHVlKCksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgUHJvcGVydHlEZXNjcmlwdG9yIG5ld1Byb3BlcnR5RGVzY3Jp
cHRvciA9IHByb3BlcnR5RGVzY3JpcHRvcjsKKyAgICBuZXdQcm9wZXJ0eURlc2NyaXB0b3Iuc2V0
Q29uZmlndXJhYmxlKHRydWUpOworICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShv
YmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIGNvbmZpZ3VyYWJsZVByb3BlcnR5RGVzY3JpcHRv
ciwgc2hvdWxkVGhyb3cpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXIqIElETE9wZXJhdGlvbjxKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXI+OjpjYXN0KEV4ZWNTdGF0ZSYgc3RhdGUpCit7CisgICAgcmV0dXJuIGpzRHluYW1p
Y0Rvd25jYXN0PEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KHN0YXRlLnZtKCks
IHN0YXRlLnRoaXNWYWx1ZSgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0SW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUtPnZt
KCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
YXV0byogcHJvdG90eXBlID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0SW5kZXhlZFNldHRlcldp
dGhJZGVudGlmaWVyUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
KyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
VGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZt
KCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKK30KKworYm9vbCBzZXRKU1Rlc3RJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNEb3duY2FzdDxK
U1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgeworICAg
ICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvcgor
ICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3Bl
cnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwor
fQorCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0SW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyUHJvdG90eXBlRnVuY3Rpb25JbmRleGVkU2V0dGVyQm9keShKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3RJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXI+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2Nv
cGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKKyAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQorICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihzdGF0ZSkpOworICAgIGF1dG8gaW5kZXggPSBjb252ZXJ0PElETFVuc2ln
bmVkTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgYXV0byB2
YWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgxKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKKyAgICBpbXBsLmluZGV4ZWRTZXR0ZXIoV1RGTW92ZShpbmRleCksIFdURk1vdmUo
dmFsdWUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQor
CitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllclByb3RvdHlwZUZ1bmN0aW9uSW5kZXhlZFNldHRlcihFeGVjU3RhdGUqIHN0YXRlKQor
eworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyPjo6Y2FsbDxqc1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGVGdW5j
dGlvbkluZGV4ZWRTZXR0ZXJCb2R5Pigqc3RhdGUsICJpbmRleGVkU2V0dGVyIik7Cit9CisKK2Jv
b2wgSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyT3duZXI6OmlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CisgICAgVU5V
U0VEX1BBUkFNKHZpc2l0b3IpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBKU1Rlc3RJ
bmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJPd25lcjo6ZmluYWxpemUoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqIGNvbnRleHQpCit7CisgICAgYXV0byoganNUZXN0SW5k
ZXhlZFNldHRlcldpdGhJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8SlNUZXN0SW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpOworICAgIGF1dG8mIHdv
cmxkID0gKnN0YXRpY19jYXN0PERPTVdyYXBwZXJXb3JsZCo+KGNvbnRleHQpOworICAgIHVuY2Fj
aGVXcmFwcGVyKHdvcmxkLCAmanNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLT53cmFw
cGVkKCksIGpzVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcik7Cit9CisKKyNpZiBFTkFC
TEUoQklORElOR19JTlRFR1JJVFkpCisjaWYgUExBVEZPUk0oV0lOKQorI3ByYWdtYSB3YXJuaW5n
KGRpc2FibGU6IDQ0ODMpCitleHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQgKCpjb25zdCBfX2lkZW50
aWZpZXIoIj8/XzdUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQFdlYkNvcmVAQDZCQCIp
W10pKCk7IH0KKyNlbHNlCitleHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQqIF9aVFZON1dlYkNvcmUz
MVRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJFW107IH0KKyNlbmRpZgorI2VuZGlmCisK
K0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXI+JiYgaW1wbCkKK3sKKworI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKKyAgICB2b2lk
KiBhY3R1YWxWVGFibGVQb2ludGVyID0gKihyZWludGVycHJldF9jYXN0PHZvaWQqKj4oaW1wbC5w
dHIoKSkpOworI2lmIFBMQVRGT1JNKFdJTikKKyAgICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50
ZXIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihfX2lkZW50aWZpZXIoIj8/XzdUZXN0SW5kZXhl
ZFNldHRlcldpdGhJZGVudGlmaWVyQFdlYkNvcmVAQDZCQCIpKTsKKyNlbHNlCisgICAgdm9pZCog
ZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gJl9aVFZON1dlYkNvcmUzMVRlc3RJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXJFWzJdOworI2lmIENPTVBJTEVSKENMQU5HKQorICAgIC8vIElmIHRoaXMg
ZmFpbHMgVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciBkb2VzIG5vdCBoYXZlIGEgdnRh
YmxlLCBzbyB5b3UgbmVlZCB0byBhZGQgdGhlCisgICAgLy8gSW1wbGVtZW50YXRpb25MYWNrc1ZU
YWJsZSBhdHRyaWJ1dGUgdG8gdGhlIGludGVyZmFjZSBkZWZpbml0aW9uCisgICAgc3RhdGljX2Fz
c2VydChfX2lzX3BvbHltb3JwaGljKFRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIpLCAi
VGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciBpcyBub3QgcG9seW1vcnBoaWMiKTsKKyNl
bmRpZgorI2VuZGlmCisgICAgLy8gSWYgeW91IGhpdCB0aGlzIGFzc2VydGlvbiB5b3UgZWl0aGVy
IGhhdmUgYSB1c2UgYWZ0ZXIgZnJlZSBidWcsIG9yCisgICAgLy8gVGVzdEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllciBoYXMgc3ViY2xhc3Nlcy4gSWYgVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllciBoYXMgc3ViY2xhc3NlcyB0aGF0IGdldCBwYXNzZWQKKyAgICAvLyB0byB0b0pTKCkg
d2UgY3VycmVudGx5IHJlcXVpcmUgVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciB5b3Ug
dG8gb3B0IG91dCBvZiBiaW5kaW5nIGhhcmRlbmluZworICAgIC8vIGJ5IGFkZGluZyB0aGUgU2tp
cFZUYWJsZVZhbGlkYXRpb24gYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2UgSURMIGRlZmluaXRp
b24KKyAgICBSRUxFQVNFX0FTU0VSVChhY3R1YWxWVGFibGVQb2ludGVyID09IGV4cGVjdGVkVlRh
YmxlUG9pbnRlcik7CisjZW5kaWYKKyAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxUZXN0SW5kZXhl
ZFNldHRlcldpdGhJZGVudGlmaWVyPihnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOworfQor
CitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXImIGltcGwp
Cit7CisgICAgcmV0dXJuIHdyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbCk7Cit9CisKK1Rl
c3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIqIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllcjo6dG9XcmFwcGVkKEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7Cisg
ICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXIqPih2bSwgdmFsdWUpKQorICAgICAgICByZXR1cm4gJndyYXBwZXIt
PndyYXBwZWQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhl
ZFNldHRlcldpdGhJZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MyBAQAor
LyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTRE9N
V3JhcHBlci5oIgorI2luY2x1ZGUgIlRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuaCIK
KyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIgOiBwdWJsaWMgSlNET01X
cmFwcGVyPFRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI+IHsKK3B1YmxpYzoKKyAgICB1
c2luZyBCYXNlID0gSlNET01XcmFwcGVyPFRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI+
OworICAgIHN0YXRpYyBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIqIGNyZWF0ZShK
U0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBSZWY8VGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj4mJiBpbXBsKQorICAgIHsKKyAg
ICAgICAgSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKiBwdHIgPSBuZXcgKE5vdE51
bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj4o
Z2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXIoc3RydWN0dXJlLCAqZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKKyAgICAgICAgcHRy
LT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOworICAgICAgICByZXR1cm4gcHRy
OworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlND
OjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHBy
b3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKKyAgICBzdGF0aWMgVGVzdElu
ZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFs
dWUpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0Kiwg
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsK
KyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNs
b3QmKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0
aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyBib29sIHB1dChK
U0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNW
YWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBwdXRCeUluZGV4
KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpT
Qzo6SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIGJvb2wgZGVmaW5lT3du
UHJvcGVydHkoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5h
bWUsIGNvbnN0IEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7Cisg
ICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOworCisgICAgREVDTEFSRV9JTkZP
OworCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3Rv
dHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Citw
dWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpJ
bnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJv
IHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc0dldFBy
b3BlcnR5TmFtZXMgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKK3Byb3RlY3RlZDoKKyAgICBKU1Rl
c3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2Jh
bE9iamVjdCYsIFJlZjxUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyPiYmKTsKKworICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKKworY2xhc3MgSlNUZXN0SW5kZXhl
ZFNldHRlcldpdGhJZGVudGlmaWVyT3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIg
eworcHVibGljOgorICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9y
Jik7CisgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4s
IHZvaWQqIGNvbnRleHQpOworfTsKKworaW5saW5lIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFw
cGVyT3duZXIoRE9NV3JhcHBlcldvcmxkJiwgVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmll
ciopCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRo
SWRlbnRpZmllck93bmVyPiBvd25lcjsKKyAgICByZXR1cm4gJm93bmVyLmdldCgpOworfQorCitp
bmxpbmUgdm9pZCogd3JhcHBlcktleShUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKiB3
cmFwcGFibGVPYmplY3QpCit7CisgICAgcmV0dXJuIHdyYXBwYWJsZU9iamVjdDsKK30KKworSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3RJ
bmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXImKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRl
c3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIqIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pT
KHN0YXRlLCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6SlNW
YWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3Qq
LCBSZWY8VGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj4mJik7CitpbmxpbmUgSlNDOjpK
U1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRp
Zmllcj4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xv
YmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQorCit0
ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdEluZGV4ZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllcj4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTVGVzdElu
ZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBl
ID0gVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0SW50ZXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAkocmV2aXNpb24gMjE3NzY0KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFj
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNywyNSArNDA3LDI5IEBAIHZvaWQgSlNUZXN0SW50
ZXJmYWNlOjpkZXN0cm95KEpTQzo6SlNDZWwKICAgICB0aGlzT2JqZWN0LT5KU1Rlc3RJbnRlcmZh
Y2U6On5KU1Rlc3RJbnRlcmZhY2UoKTsKIH0KIAotYm9vbCBKU1Rlc3RJbnRlcmZhY2U6OnB1dChK
U0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK2Jvb2wgSlNUZXN0SW50ZXJm
YWNlOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHB1dFByb3BlcnR5U2xv
dCkKIHsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdEludGVyZmFjZSo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
KwogICAgIGJvb2wgcHV0UmVzdWx0ID0gZmFsc2U7Ci0gICAgaWYgKHRoaXNPYmplY3QtPnB1dERl
bGVnYXRlKHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LCBwdXRSZXN1bHQpKQorICAg
IGlmICh0aGlzT2JqZWN0LT5wdXREZWxlZ2F0ZShzdGF0ZSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
cHV0UHJvcGVydHlTbG90LCBwdXRSZXN1bHQpKQogICAgICAgICByZXR1cm4gcHV0UmVzdWx0Owot
ICAgIHJldHVybiBCYXNlOjpwdXQodGhpc09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHNsb3QpOworCisgICAgcmV0dXJuIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBzdGF0ZSwgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKIH0KIAogYm9vbCBKU1Rlc3RJbnRl
cmZhY2U6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25l
ZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsKICAgICBhdXRvKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdEludGVyZmFjZSo+KGNlbGwpOwogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKwogICAgIElkZW50aWZpZXIg
cHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpOwogICAgIFB1dFBy
b3BlcnR5U2xvdCBzbG90KHRoaXNPYmplY3QsIHNob3VsZFRocm93KTsKICAgICBib29sIHB1dFJl
c3VsdCA9IGZhbHNlOwogICAgIGlmICh0aGlzT2JqZWN0LT5wdXREZWxlZ2F0ZShzdGF0ZSwgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgc2xvdCwgcHV0UmVzdWx0KSkKICAgICAgICAgcmV0dXJuIHB1dFJl
c3VsdDsKKwogICAgIHJldHVybiBCYXNlOjpwdXRCeUluZGV4KGNlbGwsIHN0YXRlLCBpbmRleCwg
dmFsdWUsIHNob3VsZFRocm93KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzNTMgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNv
dXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJh
dGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
ICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAg
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5oIgorCisj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENv
bnN0cnVjdGFibGUuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnQuaCIKKyNpbmNsdWRlICJKU0RP
TUV4Y2VwdGlvbkhhbmRsaW5nLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNp
bmNsdWRlICJVUkwuaCIKKyNpbmNsdWRlIDxydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmg+Cisj
aW5jbHVkZSA8cnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5oPgorI2luY2x1ZGUgPHd0Zi9HZXRQ
dHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisv
LyBBdHRyaWJ1dGVzCisKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CisKK2NsYXNzIEpTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllclByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9u
RmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0M6OkpTTm9uRmluYWxP
YmplY3Q7CisgICAgc3RhdGljIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmll
clByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5v
dE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRl
bnRpZmllclByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5v
SWRlbnRpZmllclByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAg
ICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisK
KyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6
Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyUHJvdG90eXBlKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKKyAgICAgICAgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKKyAgICB7
CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cit9OworCit1c2lu
ZyBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvciA9IEpT
RE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
ck5vSWRlbnRpZmllcj47CisKK3RlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKEpT
Qzo6Vk0mIHZtLCBjb25zdCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAg
IFVOVVNFRF9QQVJBTSh2bSk7CisgICAgcmV0dXJuIGdsb2JhbE9iamVjdC5mdW5jdGlvblByb3Rv
dHlwZSgpOworfQorCit0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
Tm9JZGVudGlmaWVyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBwdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVu
dGlmaWVyOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25s
eSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUs
IGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZyhBU0NJSUxpdGVyYWwoIlRlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIiKSkpLCBSZWFkT25seSB8IERvbnRFbnVtKTsKKyAg
ICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJl
YWRPbmx5IHwgRG9udEVudW0pOworfQorCit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3Rvcjo6c19pbmZvID0g
eyAiVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciIsICZCYXNlOjpzX2luZm8s
IG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IpIH07CisKKy8qIEhhc2ggdGFibGUgZm9y
IHByb3RvdHlwZSAqLworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyUHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9Cit7Cisg
ICAgeyAiY29uc3RydWN0b3IiLCBEb250RW51bSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0
YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8
UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKSB9IH0sCit9OworCitjb25zdCBDbGFzc0luZm8g
SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyUHJvdG90eXBlOjpzX2luZm8g
PSB7ICJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyUHJvdG90eXBlIiwgJkJh
c2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJQcm90b3R5cGUpIH07CisKK3ZvaWQgSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyUHJvdG90eXBlOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJlaWZ5
U3RhdGljUHJvcGVydGllcyh2bSwgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlm
aWVyUHJvdG90eXBlVGFibGVWYWx1ZXMsICp0aGlzKTsKK30KKworY29uc3QgQ2xhc3NJbmZvIEpT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6c19pbmZvID0geyAiVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIs
IG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
Tm9JZGVudGlmaWVyKSB9OworCitKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZp
ZXI6OkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcihTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmPFRlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI+JiYgaW1wbCkKKyAgICA6IEpTRE9NV3JhcHBlcjxU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyPihzdHJ1Y3R1cmUsIGdsb2JhbE9i
amVjdCwgV1RGTW92ZShpbXBsKSkKK3sKK30KKwordm9pZCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJOb0lkZW50aWZpZXI6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSk7CisgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKKwor
fQorCitKU09iamVjdCogSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpj
cmVhdGVQcm90b3R5cGUoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQor
eworICAgIHJldHVybiBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJQcm90
b3R5cGU6OmNyZWF0ZSh2bSwgJmdsb2JhbE9iamVjdCwgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxPYmpl
Y3QsIGdsb2JhbE9iamVjdC5vYmplY3RQcm90b3R5cGUoKSkpOworfQorCitKU09iamVjdCogSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpwcm90b3R5cGUoVk0mIHZtLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90
b3R5cGU8SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyPih2bSwgZ2xvYmFs
T2JqZWN0KTsKK30KKworSlNWYWx1ZSBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50
aWZpZXI6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpT
RE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisKK3ZvaWQgSlNUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQor
eworICAgIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciogdGhpc09iamVj
dCA9IHN0YXRpY19jYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcio+
KGNlbGwpOworICAgIHRoaXNPYmplY3QtPkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRl
bnRpZmllcjo6fkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcigpOworfQor
Citib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJv
cGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcio+KG9i
amVjdCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OworICAgIGF1dG8gb3B0aW9uYWxJbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKTsKKyAg
ICBpZiAob3B0aW9uYWxJbmRleCAmJiBvcHRpb25hbEluZGV4LnZhbHVlKCkgPCB0aGlzT2JqZWN0
LT53cmFwcGVkKCkubGVuZ3RoKCkpIHsKKyAgICAgICAgYXV0byBpbmRleCA9IG9wdGlvbmFsSW5k
ZXgudmFsdWUoKTsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCAwLCB0b0pTPElE
TERPTVN0cmluZz4oKnN0YXRlLCB0aGlzT2JqZWN0LT53cmFwcGVkKCkuaXRlbShpbmRleCkpKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmIChCYXNlOjpnZXRPd25Qcm9wZXJ0
eVNsb3QodGhpc09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIEpTVmFsdWUgcHJvdG8gPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVE
aXJlY3QoKTsKKyAgICBpZiAocHJvdG8uaXNPYmplY3QoKSAmJiBqc0Nhc3Q8SlNPYmplY3QqPihw
cm90byktPmhhc1Byb3BlcnR5KHN0YXRlLCBwcm9wZXJ0eU5hbWUpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoIW9wdGlvbmFsSW5kZXggJiYgdGhpc09iamVjdC0+Y2xhc3NJbmZv
KCkgPT0gaW5mbygpICYmICFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkgeworICAgICAgICBhdXRv
IGl0ZW0gPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkubmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvQXRv
bWljU3RyaW5nKHByb3BlcnR5TmFtZSkpOworICAgICAgICBpZiAoIUlETERPTVN0cmluZzo6aXNO
dWxsVmFsdWUoaXRlbSkpIHsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwg
MCwgdG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwgaXRlbSkpOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEpT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlTbG90
QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRl
eCwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyKj4ob2JqZWN0KTsKKyAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgaWYgKExJ
S0VMWShpbmRleCA8IHRoaXNPYmplY3QtPndyYXBwZWQoKS5sZW5ndGgoKSkpIHsKKyAgICAgICAg
c2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCAwLCB0b0pTPElETERPTVN0cmluZz4oKnN0YXRlLCB0
aGlzT2JqZWN0LT53cmFwcGVkKCkuaXRlbShpbmRleCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRoaXNP
YmplY3QsIHN0YXRlLCBpbmRleCwgc2xvdCk7Cit9CisKK3ZvaWQgSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBF
bnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcio+KG9iamVjdCk7CisgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDAsIGNvdW50ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLmxlbmd0aCgpOyBpIDwg
Y291bnQ7ICsraSkKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShz
dGF0ZSwgaSkpOworICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVjdC0+d3Jh
cHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSkKKyAgICAgICAgcHJvcGVydHlOYW1lcy5h
ZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgcHJvcGVydHlOYW1lKSk7CisgICAgQmFz
ZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywg
bW9kZSk7Cit9CisKK2Jvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVy
OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHB1dFByb3BlcnR5U2xvdCkK
K3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlck5vSWRlbnRpZmllcio+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKKworICAgIGlmIChhdXRvIGluZGV4ID0gcGFyc2VJbmRleChw
cm9wZXJ0eU5hbWUpKSB7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUoc3RhdGUtPnZtKCkpOworICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExET01TdHJpbmc+KCpzdGF0ZSwgdmFsdWUpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIHRydWUpOworICAgICAgICB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0SXRl
bShpbmRleC52YWx1ZSgpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpIHsKKyAgICAg
ICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFs
TWV0aG9kVHlwZTo6Vk1JbnF1aXJ5IH07CisgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhp
c09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KCk7CisgICAgICAgIGlmICghKHByb3RvdHlwZS5p
c09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChzdGF0ZSwg
cHJvcGVydHlOYW1lLCBzbG90KSkpIHsKKyAgICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOworICAgICAgICAgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CisgICAgICAgICAgICB0aGlz
T2JqZWN0LT53cmFwcGVkKCkuc2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvU3RyaW5nKHByb3Bl
cnR5TmFtZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBz
dGF0ZSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKK30KKworYm9vbCBK
U1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnB1dEJ5SW5kZXgoSlNDZWxs
KiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwg
Ym9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcio+KGNlbGwpOworICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKworICAgIGlmIChMSUtFTFko
aW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKSkgeworICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKKyAgICAgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKKyAgICAgICAgdGhpc09iamVjdC0+d3Jh
cHBlZCgpLnNldEl0ZW0oaW5kZXgsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBJZGVudGlm
aWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7CisgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2Jq
ZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5IH07CisgICAg
SlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3QoKTsKKyAg
ICBpZiAoIShwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQ
cm9wZXJ0eVNsb3Qoc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpKSB7CisgICAgICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOworICAgICAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgdmFsdWUpOwor
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOworICAgICAgICB0
aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvU3RyaW5nKHBy
b3BlcnR5TmFtZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgcmV0dXJuIEJhc2U6OnB1dEJ5SW5kZXgoY2VsbCwgc3RhdGUsIGluZGV4
LCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworfQorCitib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlck5vSWRlbnRpZmllcjo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlE
ZXNjcmlwdG9yJiBwcm9wZXJ0eURlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXIqPihvYmplY3QpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKKworICAgIGlmIChhdXRvIGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0
eU5hbWUpKSB7CisgICAgICAgIGlmICghcHJvcGVydHlEZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0
b3IoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7CisgICAgICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBwcm9wZXJ0eURlc2NyaXB0b3Iu
dmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7
CisgICAgICAgIHRoaXNPYmplY3QtPndyYXBwZWQoKS5zZXRJdGVtKGluZGV4LnZhbHVlKCksIFdU
Rk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
aWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkgeworICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xv
dCB7IHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVp
cnkgfTsKKyAgICAgICAgaWYgKCFCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwg
c3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpIHsKKyAgICAgICAgICAgIGlmICghcHJvcGVydHlE
ZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0
YXRlLT52bSgpKTsKKyAgICAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERP
TVN0cmluZz4oKnN0YXRlLCBwcm9wZXJ0eURlc2NyaXB0b3IudmFsdWUoKSk7CisgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOworICAgICAgICAgICAgdGhp
c09iamVjdC0+d3JhcHBlZCgpLnNldE5hbWVkSXRlbShwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9w
ZXJ0eU5hbWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFByb3BlcnR5RGVzY3JpcHRvciBuZXdQcm9wZXJ0
eURlc2NyaXB0b3IgPSBwcm9wZXJ0eURlc2NyaXB0b3I7CisgICAgbmV3UHJvcGVydHlEZXNjcmlw
dG9yLnNldENvbmZpZ3VyYWJsZSh0cnVlKTsKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJv
cGVydHkob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBjb25maWd1cmFibGVQcm9wZXJ0eURl
c2NyaXB0b3IsIHNob3VsZFRocm93KTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6Z2V0
Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKK30K
KworYm9vbCBzZXRKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90
b3R5cGUgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXJQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAg
IGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgeworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0
YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBT
aGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgorICAgIHJldHVybiBwcm90b3R5cGUtPnB1
dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rvciwg
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOworfQorCitib29sIEpTVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlck5vSWRlbnRpZmllck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290
cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQoreworICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOworICAgIFVOVVNFRF9QQVJBTSh2
aXNpdG9yKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyTm9JZGVudGlmaWVyT3duZXI6OmZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4gaGFuZGxlLCB2b2lkKiBjb250ZXh0KQoreworICAgIGF1dG8qIGpzVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlck5vSWRlbnRpZmllciA9IHN0YXRpY19jYXN0PEpTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlck5vSWRlbnRpZmllcio+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKKyAgICBh
dXRvJiB3b3JsZCA9ICpzdGF0aWNfY2FzdDxET01XcmFwcGVyV29ybGQqPihjb250ZXh0KTsKKyAg
ICB1bmNhY2hlV3JhcHBlcih3b3JsZCwgJmpzVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRl
bnRpZmllci0+d3JhcHBlZCgpLCBqc1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZp
ZXIpOworfQorCisjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQorI2lmIFBMQVRGT1JNKFdJ
TikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NDgzKQorZXh0ZXJuICJDIiB7IGV4dGVybiB2
b2lkICgqY29uc3QgX19pZGVudGlmaWVyKCI/P183VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5v
SWRlbnRpZmllckBXZWJDb3JlQEA2QkAiKVtdKSgpOyB9CisjZWxzZQorZXh0ZXJuICJDIiB7IGV4
dGVybiB2b2lkKiBfWlRWTjdXZWJDb3JlMzdUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVu
dGlmaWVyRVtdOyB9CisjZW5kaWYKKyNlbmRpZgorCitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3Jl
YXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJl
ZjxUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyPiYmIGltcGwpCit7CisKKyNp
ZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCisgICAgdm9pZCogYWN0dWFsVlRhYmxlUG9pbnRl
ciA9ICoocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KGltcGwucHRyKCkpKTsKKyNpZiBQTEFURk9S
TShXSU4pCisgICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oX19pZGVudGlmaWVyKCI/P183VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRl
bnRpZmllckBXZWJDb3JlQEA2QkAiKSk7CisjZWxzZQorICAgIHZvaWQqIGV4cGVjdGVkVlRhYmxl
UG9pbnRlciA9ICZfWlRWTjdXZWJDb3JlMzdUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVu
dGlmaWVyRVsyXTsKKyNpZiBDT01QSUxFUihDTEFORykKKyAgICAvLyBJZiB0aGlzIGZhaWxzIFRl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIgZG9lcyBub3QgaGF2ZSBhIHZ0YWJs
ZSwgc28geW91IG5lZWQgdG8gYWRkIHRoZQorICAgIC8vIEltcGxlbWVudGF0aW9uTGFja3NWVGFi
bGUgYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbgorICAgIHN0YXRpY19hc3Nl
cnQoX19pc19wb2x5bW9ycGhpYyhUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVy
KSwgIlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIgaXMgbm90IHBvbHltb3Jw
aGljIik7CisjZW5kaWYKKyNlbmRpZgorICAgIC8vIElmIHlvdSBoaXQgdGhpcyBhc3NlcnRpb24g
eW91IGVpdGhlciBoYXZlIGEgdXNlIGFmdGVyIGZyZWUgYnVnLCBvcgorICAgIC8vIFRlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIgaGFzIHN1YmNsYXNzZXMuIElmIFRlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIgaGFzIHN1YmNsYXNzZXMgdGhhdCBnZXQgcGFz
c2VkCisgICAgLy8gdG8gdG9KUygpIHdlIGN1cnJlbnRseSByZXF1aXJlIFRlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIgeW91IHRvIG9wdCBvdXQgb2YgYmluZGluZyBoYXJkZW5p
bmcKKyAgICAvLyBieSBhZGRpbmcgdGhlIFNraXBWVGFibGVWYWxpZGF0aW9uIGF0dHJpYnV0ZSB0
byB0aGUgaW50ZXJmYWNlIElETCBkZWZpbml0aW9uCisgICAgUkVMRUFTRV9BU1NFUlQoYWN0dWFs
VlRhYmxlUG9pbnRlciA9PSBleHBlY3RlZFZUYWJsZVBvaW50ZXIpOworI2VuZGlmCisgICAgcmV0
dXJuIGNyZWF0ZVdyYXBwZXI8VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcj4o
Z2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKK30KKworSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyJiBpbXBsKQoreworICAgIHJldHVybiB3
cmFwKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwpOworfQorCitUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyTm9JZGVudGlmaWVyKiBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZp
ZXI6OnRvV3JhcHBlZChKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGlm
IChhdXRvKiB3cmFwcGVyID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyTm9JZGVudGlmaWVyKj4odm0sIHZhbHVlKSkKKyAgICAgICAgcmV0dXJuICZ3cmFwcGVy
LT53cmFwcGVkKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJOb0lkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktp
dCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQg
YnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyTm9JZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyIDogcHVibGljIEpTRE9NV3JhcHBlcjxUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyTm9JZGVudGlmaWVyPiB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTRE9NV3Jh
cHBlcjxUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyPjsKKyAgICBzdGF0aWMg
SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyKiBjcmVhdGUoSlNDOjpTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI+JiYgaW1wbCkKKyAgICB7CisgICAg
ICAgIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciogcHRyID0gbmV3IChO
b3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXI+KGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwKSkgSlNUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyTm9JZGVudGlmaWVyKHN0cnVjdHVyZSwgKmdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBs
KSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAg
ICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3Jl
YXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBK
U0M6OkpTT2JqZWN0KiBwcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Cisg
ICAgc3RhdGljIFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIqIHRvV3JhcHBl
ZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUs
IEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0
eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVy
dHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFt
ZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsK
KyAgICBzdGF0aWMgYm9vbCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7CisgICAg
c3RhdGljIGJvb2wgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAg
IHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBjb25zdCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYs
IGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwq
KTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlND
OjpKU0dsb2JhbE9iamVjdCopOworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0
eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldo
ZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpT
Qzo6T3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworcHJv
dGVjdGVkOgorICAgIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcihKU0M6
OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJOb0lkZW50aWZpZXI+JiYpOworCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZN
Jik7Cit9OworCitjbGFzcyBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJP
d25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CitwdWJsaWM6CisgICAgdmlydHVh
bCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCk7Cit9Owor
CitpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29y
bGQmLCBUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyKikKK3sKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVy
T3duZXI+IG93bmVyOworICAgIHJldHVybiAmb3duZXIuZ2V0KCk7Cit9CisKK2lubGluZSB2b2lk
KiB3cmFwcGVyS2V5KFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIqIHdyYXBw
YWJsZU9iamVjdCkKK3sKKyAgICByZXR1cm4gd3JhcHBhYmxlT2JqZWN0OworfQorCitKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciogaW1wbCkgeyByZXR1cm4gaW1w
bCA/IHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgKmltcGwpIDogSlNDOjpqc051bGwoKTsgfQor
SlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2Jh
bE9iamVjdCosIFJlZjxUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyPiYmKTsK
K2lubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyTm9JZGVudGlmaWVyPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3
bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBK
U0M6OmpzTnVsbCgpOyB9CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRl
clRyYWl0czxUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyPiB7CisgICAgdXNp
bmcgV3JhcHBlckNsYXNzID0gSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVy
OworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyKjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzUzIEBACisvKgorICAgIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBU
aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBO
T1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oIgorCisjaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIK
KyNpbmNsdWRlICJKU0RPTUNvbnZlcnQuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRs
aW5nLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJVUkwuaCIK
KyNpbmNsdWRlIDxydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmg+CisjaW5jbHVkZSA8cnVudGlt
ZS9Qcm9wZXJ0eU5hbWVBcnJheS5oPgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKwordXNpbmcg
bmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBBdHRyaWJ1dGVzCisK
K0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb25Db25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworCitjbGFzcyBKU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvblByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9u
RmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0M6OkpTTm9uRmluYWxP
YmplY3Q7CisgICAgc3RhdGljIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBK
U1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvblByb3RvdHlwZSogcHRy
ID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvblByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICBy
ZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvblByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogSlNDOjpKU05vbkZpbmFsT2Jq
ZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oSlNDOjpWTSYpOworfTsKKwordXNpbmcgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvciA9IEpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3Rh
YmxlPEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uPjsKKwordGVt
cGxhdGU8PiBKU1ZhbHVlIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZShKU0M6OlZNJiB2bSwgY29uc3Qg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0odm0p
OworICAgIHJldHVybiBnbG9iYWxPYmplY3QuZnVuY3Rpb25Qcm90b3R5cGUoKTsKK30KKwordGVt
cGxhdGU8PiB2b2lkIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9u
Q29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PnByb3RvdHlwZSwgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246
OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9u
dEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250
cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uIikpKSwgUmVhZE9ubHkgfCBEb250RW51bSk7CisgICAg
cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFk
T25seSB8IERvbnRFbnVtKTsKK30KKwordGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6c19pbmZv
ID0geyAiVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uIiwgJkJhc2U6
OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKSB9OworCisvKiBI
YXNoIHRhYmxlIGZvciBwcm90b3R5cGUgKi8KKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVl
IEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uUHJvdG90eXBlVGFi
bGVWYWx1ZXNbXSA9Cit7CisgICAgeyAiY29uc3RydWN0b3IiLCBEb250RW51bSwgTm9JbnRyaW5z
aWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihq
c1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKSwg
KGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0
SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3Rvcikg
fSB9LAorfTsKKworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uUHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Qcm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCBudWxscHRy
LCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
clRocm93aW5nRXhjZXB0aW9uUHJvdG90eXBlKSB9OworCit2b2lkIEpTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJlaWZ5U3RhdGljUHJv
cGVydGllcyh2bSwgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Q
cm90b3R5cGVUYWJsZVZhbHVlcywgKnRoaXMpOworfQorCitjb25zdCBDbGFzc0luZm8gSlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnNfaW5mbyA9IHsgIlRlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIsICZCYXNlOjpzX2luZm8sIG51
bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb24pIH07CisKK0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
clRocm93aW5nRXhjZXB0aW9uOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgUmVmPFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4mJiBp
bXBsKQorICAgIDogSlNET01XcmFwcGVyPFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbj4oc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpCit7Cit9
CisKK3ZvaWQgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Cisg
ICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKKworfQorCitKU09iamVjdCogSlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmNyZWF0ZVByb3RvdHlwZShW
TSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIEpT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uUHJvdG90eXBlOjpjcmVh
dGUodm0sICZnbG9iYWxPYmplY3QsIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5n
RXhjZXB0aW9uUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxPYmplY3QsIGds
b2JhbE9iamVjdC5vYmplY3RQcm90b3R5cGUoKSkpOworfQorCitKU09iamVjdCogSlNUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnByb3RvdHlwZShWTSYgdm0sIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTVByb3Rv
dHlwZTxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4odm0sIGds
b2JhbE9iamVjdCk7Cit9CisKK0pTVmFsdWUgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb246OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3Rvcj4odm0sICpq
c0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKK30KKwordm9p
ZCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6ZGVzdHJveShK
U0M6OkpTQ2VsbCogY2VsbCkKK3sKKyAgICBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbiogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4oY2VsbCk7CisgICAgdGhpc09iamVjdC0+SlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246On5KU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbigpOworfQorCitib29sIEpTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qPihvYmplY3QpOwor
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBh
dXRvIG9wdGlvbmFsSW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSk7CisgICAgaWYgKG9w
dGlvbmFsSW5kZXggJiYgb3B0aW9uYWxJbmRleC52YWx1ZSgpIDwgdGhpc09iamVjdC0+d3JhcHBl
ZCgpLmxlbmd0aCgpKSB7CisgICAgICAgIGF1dG8gaW5kZXggPSBvcHRpb25hbEluZGV4LnZhbHVl
KCk7CisgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgMCwgdG9KUzxJRExET01TdHJp
bmc+KCpzdGF0ZSwgdGhpc09iamVjdC0+d3JhcHBlZCgpLml0ZW0oaW5kZXgpKSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAoQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRo
aXNPYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBKU1ZhbHVlIHByb3RvID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KCk7
CisgICAgaWYgKHByb3RvLmlzT2JqZWN0KCkgJiYganNDYXN0PEpTT2JqZWN0Kj4ocHJvdG8pLT5o
YXNQcm9wZXJ0eShzdGF0ZSwgcHJvcGVydHlOYW1lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKCFvcHRpb25hbEluZGV4ICYmIHRoaXNPYmplY3QtPmNsYXNzSW5mbygpID09IGlu
Zm8oKSAmJiAhcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpIHsKKyAgICAgICAgYXV0byBpdGVtID0g
dGhpc09iamVjdC0+d3JhcHBlZCgpLm5hbWVkSXRlbShwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmlu
Zyhwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgaWYgKCFJRExET01TdHJpbmc6OmlzTnVsbFZhbHVl
KGl0ZW0pKSB7CisgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIDAsIHRvSlM8
SURMRE9NU3RyaW5nPigqc3RhdGUsIGl0ZW0pKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBKU1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwg
UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qPihvYmplY3QpOworICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBpZiAo
TElLRUxZKGluZGV4IDwgdGhpc09iamVjdC0+d3JhcHBlZCgpLmxlbmd0aCgpKSkgeworICAgICAg
ICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIDAsIHRvSlM8SURMRE9NU3RyaW5nPigqc3RhdGUs
IHRoaXNPYmplY3QtPndyYXBwZWQoKS5pdGVtKGluZGV4KSkpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhp
c09iamVjdCwgc3RhdGUsIGluZGV4LCBzbG90KTsKK30KKwordm9pZCBKU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlO
YW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KG9iamVj
dCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGNvdW50ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLmxl
bmd0aCgpOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRp
Zmllcjo6ZnJvbShzdGF0ZSwgaSkpOworICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhp
c09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSkKKyAgICAgICAgcHJv
cGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgcHJvcGVydHlOYW1l
KSk7CisgICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBzdGF0ZSwgcHJv
cGVydHlOYW1lcywgbW9kZSk7Cit9CisKK2Jvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb246OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYg
cHV0UHJvcGVydHlTbG90KQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qPihjZWxsKTsKKyAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisKKyAgICBpZiAoYXV0
byBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgeworICAgICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKKyAgICAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHZhbHVlKTsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKKyAgICAgICAgcHJvcGFn
YXRlRXhjZXB0aW9uKCpzdGF0ZSwgdGhyb3dTY29wZSwgdGhpc09iamVjdC0+d3JhcHBlZCgpLnNl
dEl0ZW0oaW5kZXgudmFsdWUoKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkgewor
ICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7IHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50
ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkgfTsKKyAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUg
PSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3QoKTsKKyAgICAgICAgaWYgKCEocHJvdG90
eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QocHJvdG90eXBlKS0+Z2V0UHJvcGVydHlTbG90KHN0
YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSkgeworICAgICAgICAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7CisgICAgICAgICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgdmFsdWUpOworICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKKyAgICAgICAgICAg
IHByb3BhZ2F0ZUV4Y2VwdGlvbigqc3RhdGUsIHRocm93U2NvcGUsIHRoaXNPYmplY3QtPndyYXBw
ZWQoKS5zZXROYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgV1RG
TW92ZShuYXRpdmVWYWx1ZSkpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBzdGF0ZSwgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKK30KKworYm9vbCBKU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGws
IEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlLCBib29sIHNo
b3VsZFRocm93KQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qPihjZWxsKTsKKyAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisKKyAgICBpZiAoTElLRUxZKGlu
ZGV4IDw9IE1BWF9BUlJBWV9JTkRFWCkpIHsKKyAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7CisgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCB2YWx1ZSk7CisgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlv
bigqc3RhdGUsIHRocm93U2NvcGUsIHRoaXNPYmplY3QtPndyYXBwZWQoKS5zZXRJdGVtKGluZGV4
LCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGlu
ZGV4KTsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7IHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6
SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkgfTsKKyAgICBKU1ZhbHVlIHByb3RvdHlwZSA9
IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdCgpOworICAgIGlmICghKHByb3RvdHlwZS5p
c09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChzdGF0ZSwg
cHJvcGVydHlOYW1lLCBzbG90KSkpIHsKKyAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7CisgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCB2YWx1ZSk7CisgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbigq
c3RhdGUsIHRocm93U2NvcGUsIHRoaXNPYmplY3QtPndyYXBwZWQoKS5zZXROYW1lZEl0ZW0ocHJv
cGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIEJhc2U6OnB1dEJ5SW5k
ZXgoY2VsbCwgc3RhdGUsIGluZGV4LCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworfQorCitib29sIEpT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpkZWZpbmVPd25Qcm9w
ZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIHByb3BlcnR5RGVzY3JpcHRvciwg
Ym9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4ob2JqZWN0KTsKKyAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisKKyAgICBpZiAo
YXV0byBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgeworICAgICAgICBpZiAoIXBy
b3BlcnR5RGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3Rh
dGUtPnZtKCkpOworICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJp
bmc+KCpzdGF0ZSwgcHJvcGVydHlEZXNjcmlwdG9yLnZhbHVlKCkpOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOworICAgICAgICBwcm9wYWdhdGVFeGNlcHRp
b24oKnN0YXRlLCB0aHJvd1Njb3BlLCB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0SXRlbShpbmRl
eC52YWx1ZSgpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICBpZiAoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7CisgICAgICAgIFBy
b3BlcnR5U2xvdCBzbG90IHsgdGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhv
ZFR5cGU6OlZNSW5xdWlyeSB9OworICAgICAgICBpZiAoIUJhc2U6OmdldE93blByb3BlcnR5U2xv
dCh0aGlzT2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90KSkgeworICAgICAgICAgICAg
aWYgKCFwcm9wZXJ0eURlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOworICAgICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHByb3BlcnR5RGVzY3JpcHRvci52YWx1ZSgp
KTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7Cisg
ICAgICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oKnN0YXRlLCB0aHJvd1Njb3BlLCB0aGlzT2Jq
ZWN0LT53cmFwcGVkKCkuc2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5
TmFtZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIFByb3BlcnR5RGVzY3JpcHRvciBuZXdQcm9wZXJ0eURl
c2NyaXB0b3IgPSBwcm9wZXJ0eURlc2NyaXB0b3I7CisgICAgbmV3UHJvcGVydHlEZXNjcmlwdG9y
LnNldENvbmZpZ3VyYWJsZSh0cnVlKTsKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVy
dHkob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBjb25maWd1cmFibGVQcm9wZXJ0eURlc2Ny
aXB0b3IsIHNob3VsZFRocm93KTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRl
LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvblByb3RvdHlwZSo+KHZtLCBKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQorICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIHByb3RvdHlwZS0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKK30KKworYm9vbCBzZXRKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKKyAgICAg
ICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKKyAg
ICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0
eU5hbWVzKCkuY29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKK30K
KworYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbk93bmVy
Ojppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhh
bmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFVOVVNFRF9QQVJBTSho
YW5kbGUpOworICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3ZvaWQgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Pd25l
cjo6ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqIGNvbnRl
eHQpCit7CisgICAgYXV0byoganNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24gPSBzdGF0aWNfY2FzdDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbio+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKKyAgICBhdXRvJiB3b3JsZCA9ICpz
dGF0aWNfY2FzdDxET01XcmFwcGVyV29ybGQqPihjb250ZXh0KTsKKyAgICB1bmNhY2hlV3JhcHBl
cih3b3JsZCwgJmpzVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLT53
cmFwcGVkKCksIGpzVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKTsK
K30KKworI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKKyNpZiBQTEFURk9STShXSU4pCisj
cHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDQ4MykKK2V4dGVybiAiQyIgeyBleHRlcm4gdm9pZCAo
KmNvbnN0IF9faWRlbnRpZmllcigiPz9fN1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbkBXZWJDb3JlQEA2QkAiKVtdKSgpOyB9CisjZWxzZQorZXh0ZXJuICJDIiB7IGV4
dGVybiB2b2lkKiBfWlRWTjdXZWJDb3JlNDJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb25FW107IH0KKyNlbmRpZgorI2VuZGlmCisKK0pTQzo6SlNWYWx1ZSB0b0pTTmV3
bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUmVmPFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4mJiBpbXBs
KQoreworCisjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQorICAgIHZvaWQqIGFjdHVhbFZU
YWJsZVBvaW50ZXIgPSAqKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihpbXBsLnB0cigpKSk7Cisj
aWYgUExBVEZPUk0oV0lOKQorICAgIHZvaWQqIGV4cGVjdGVkVlRhYmxlUG9pbnRlciA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KF9faWRlbnRpZmllcigiPz9fN1Rlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkBXZWJDb3JlQEA2QkAiKSk7CisjZWxzZQorICAgIHZvaWQq
IGV4cGVjdGVkVlRhYmxlUG9pbnRlciA9ICZfWlRWTjdXZWJDb3JlNDJUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25FWzJdOworI2lmIENPTVBJTEVSKENMQU5HKQorICAg
IC8vIElmIHRoaXMgZmFpbHMgVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uIGRvZXMgbm90IGhhdmUgYSB2dGFibGUsIHNvIHlvdSBuZWVkIHRvIGFkZCB0aGUKKyAgICAv
LyBJbXBsZW1lbnRhdGlvbkxhY2tzVlRhYmxlIGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJmYWNlIGRl
ZmluaXRpb24KKyAgICBzdGF0aWNfYXNzZXJ0KF9faXNfcG9seW1vcnBoaWMoVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKSwgIlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbiBpcyBub3QgcG9seW1vcnBoaWMiKTsKKyNlbmRpZgorI2VuZGlm
CisgICAgLy8gSWYgeW91IGhpdCB0aGlzIGFzc2VydGlvbiB5b3UgZWl0aGVyIGhhdmUgYSB1c2Ug
YWZ0ZXIgZnJlZSBidWcsIG9yCisgICAgLy8gVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93
aW5nRXhjZXB0aW9uIGhhcyBzdWJjbGFzc2VzLiBJZiBUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb24gaGFzIHN1YmNsYXNzZXMgdGhhdCBnZXQgcGFzc2VkCisgICAgLy8g
dG8gdG9KUygpIHdlIGN1cnJlbnRseSByZXF1aXJlIFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbiB5b3UgdG8gb3B0IG91dCBvZiBiaW5kaW5nIGhhcmRlbmluZworICAg
IC8vIGJ5IGFkZGluZyB0aGUgU2tpcFZUYWJsZVZhbGlkYXRpb24gYXR0cmlidXRlIHRvIHRoZSBp
bnRlcmZhY2UgSURMIGRlZmluaXRpb24KKyAgICBSRUxFQVNFX0FTU0VSVChhY3R1YWxWVGFibGVQ
b2ludGVyID09IGV4cGVjdGVkVlRhYmxlUG9pbnRlcik7CisjZW5kaWYKKyAgICByZXR1cm4gY3Jl
YXRlV3JhcHBlcjxUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+KGds
b2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7Cit9CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uJiBpbXBsKQoreworICAgIHJldHVy
biB3cmFwKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwpOworfQorCitUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uOjp0b1dyYXBwZWQoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKK3sKKyAgICBpZiAoYXV0byogd3JhcHBlciA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4odm0sIHZhbHVlKSkKKyAgICAg
ICAgcmV0dXJuICZ3cmFwcGVyLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
K30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisg
ICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0Lgor
ICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwu
IERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0RPTVdyYXBw
ZXIuaCIKKyNpbmNsdWRlICJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b24uaCIKKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
biA6IHB1YmxpYyBKU0RPTVdyYXBwZXI8VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5n
RXhjZXB0aW9uPiB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTRE9NV3JhcHBlcjxUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+OworICAgIHN0YXRpYyBKU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiogY3JlYXRlKEpTQzo6U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+JiYgaW1wbCkKKyAgICB7
CisgICAgICAgIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKiBw
dHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uPihnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkpIEpTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKHN0cnVjdHVyZSwgKmdsb2Jh
bE9iamVjdCwgV1RGTW92ZShpbXBsKSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xv
YmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBzdGF0
aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9i
amVjdCYpOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUoSlNDOjpWTSYsIEpT
RE9NR2xvYmFsT2JqZWN0Jik7CisgICAgc3RhdGljIFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbiogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworICAg
IHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4
ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAg
ICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9
IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyBib29sIHB1dChKU0M6OkpTQ2Vs
bCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlND
OjpQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBwdXRCeUluZGV4KEpTQzo6SlND
ZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1
ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHko
SlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIGNvbnN0
IEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGlj
IHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOworCisgICAgREVDTEFSRV9JTkZPOworCisgICAg
c3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0
cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CitwdWJsaWM6Cisg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpHZXRPd25Qcm9w
ZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93
blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwg
QmFzZTo6U3RydWN0dXJlRmxhZ3M7Citwcm90ZWN0ZWQ6CisgICAgSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24oSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9i
amVjdCYsIFJlZjxUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+JiYp
OworCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cit9OworCitjbGFzcyBKU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbk93bmVyIDogcHVibGljIEpT
Qzo6V2Vha0hhbmRsZU93bmVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4
dCwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZShKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KTsKK307CisKK2lubGluZSBKU0M6Oldl
YWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3JsZCYsIFRlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiopCit7CisgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uT3duZXI+
IG93bmVyOworICAgIHJldHVybiAmb3duZXIuZ2V0KCk7Cit9CisKK2lubGluZSB2b2lkKiB3cmFw
cGVyS2V5KFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiogd3JhcHBh
YmxlT2JqZWN0KQoreworICAgIHJldHVybiB3cmFwcGFibGVPYmplY3Q7Cit9CisKK0pTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24mKTsKK2lubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiogaW1wbCkgeyBy
ZXR1cm4gaW1wbCA/IHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgKmltcGwpIDogSlNDOjpqc051
bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBK
U0RPTUdsb2JhbE9iamVjdCosIFJlZjxUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb24+JiYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRy
PFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4mJiBpbXBsKSB7IHJl
dHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJl
bGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBK
U0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93
aW5nRXhjZXB0aW9uPiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb247CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJu
VHlwZSA9IFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbio7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQwNiBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIu
aCIKKworI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0
b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCisjaW5jbHVk
ZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgi
CisjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJVUkwuaCIKKyNpbmNs
dWRlIDxydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmg+CisjaW5jbHVkZSA8cnVudGltZS9Qcm9w
ZXJ0eU5hbWVBcnJheS5oPgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKwordXNpbmcgbmFtZXNw
YWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBGdW5jdGlvbnMKKworSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldp
dGhJZGVudGlmaWVyUHJvdG90eXBlRnVuY3Rpb25OYW1lZFNldHRlcihKU0M6OkV4ZWNTdGF0ZSop
OworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlRnVuY3Rpb25JbmRleGVkU2V0dGVyKEpTQzo6
RXhlY1N0YXRlKik7CisKKy8vIEF0dHJpYnV0ZXMKKworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBz
ZXRKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7
CisKK2NsYXNzIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG90
eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdXNpbmcg
QmFzZSA9IEpTQzo6SlNOb25GaW5hbE9iamVjdDsKKyAgICBzdGF0aWMgSlNUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKKyAgICB7CisgICAgICAgIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlPih2bS5oZWFwKSkg
SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGUodm0sIGds
b2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7
CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0
YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAg
eworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0M6OkpTTm9u
RmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihKU0M6OlZNJik7Cit9OworCit1c2luZyBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yID0gSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0
cnVjdGFibGU8SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI+OworCit0
ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXJDb25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBjb25zdCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTSh2bSk7
CisgICAgcmV0dXJuIGdsb2JhbE9iamVjdC5mdW5jdGlvblByb3RvdHlwZSgpOworfQorCit0ZW1w
bGF0ZTw+IHZvaWQgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25z
dHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0KQoreworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJv
dG90eXBlLCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6cHJvdG90
eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7
CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxT
dHJpbmcoJnZtLCBTdHJpbmcoQVNDSUlMaXRlcmFsKCJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXIiKSkpLCBSZWFkT25seSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9u
dEVudW0pOworfQorCit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIiLCAmQmFzZTo6c19pbmZvLCBudWxscHRy
LCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IpIH07CisKKy8qIEhhc2ggdGFibGUgZm9yIHByb3Rv
dHlwZSAqLworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KK3sKKyAgICB7
ICJjb25zdHJ1Y3RvciIsIERvbnRFbnVtLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGlj
X2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1
dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKSB9IH0sCisgICAgeyAibmFtZWRTZXR0ZXIiLCBK
U0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZl
RnVuY3Rpb24+KGpzVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG90
eXBlRnVuY3Rpb25OYW1lZFNldHRlciksIChpbnRwdHJfdCkgKDIpIH0gfSwKKyAgICB7ICJpbmRl
eGVkU2V0dGVyIiwgSlNDOjpGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRp
Y19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllclByb3RvdHlwZUZ1bmN0aW9uSW5kZXhlZFNldHRlciksIChpbnRwdHJfdCkgKDIpIH0g
fSwKK307CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRo
SWRlbnRpZmllclByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyUHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0
ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllclByb3RvdHlwZSkgfTsKKwordm9pZCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlVGFibGVWYWx1
ZXMsICp0aGlzKTsKK30KKworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyOjpzX2luZm8gPSB7ICJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXIiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKSB9
OworCitKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6SlNUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXI+JiYgaW1wbCkKKyAgICA6IEpTRE9NV3JhcHBlcjxUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI+KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBX
VEZNb3ZlKGltcGwpKQoreworfQorCit2b2lkIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldp
dGhJZGVudGlmaWVyOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24odm0pOworICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CisKK30KKwor
SlNPYmplY3QqIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpjcmVh
dGVQcm90b3R5cGUoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQorewor
ICAgIHJldHVybiBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3Rv
dHlwZTo6Y3JlYXRlKHZtLCAmZ2xvYmFsT2JqZWN0LCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCAmZ2xvYmFsT2Jq
ZWN0LCBnbG9iYWxPYmplY3Qub2JqZWN0UHJvdG90eXBlKCkpKTsKK30KKworSlNPYmplY3QqIEpT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpwcm90b3R5cGUoVk0mIHZt
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Q
cm90b3R5cGU8SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI+KHZtLCBn
bG9iYWxPYmplY3QpOworfQorCitKU1ZhbHVlIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldp
dGhJZGVudGlmaWVyOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0
PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisKK3ZvaWQgSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmRlc3Ryb3koSlNDOjpKU0Nl
bGwqIGNlbGwpCit7CisgICAgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXIqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllcio+KGNlbGwpOworICAgIHRoaXNPYmplY3QtPkpTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjp+SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0
aElkZW50aWZpZXIoKTsKK30KKworYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRo
SWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkK
K3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyKj4ob2JqZWN0KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgYXV0byBvcHRpb25hbEluZGV4ID0gcGFyc2VJ
bmRleChwcm9wZXJ0eU5hbWUpOworICAgIGlmIChvcHRpb25hbEluZGV4ICYmIG9wdGlvbmFsSW5k
ZXgudmFsdWUoKSA8IHRoaXNPYmplY3QtPndyYXBwZWQoKS5sZW5ndGgoKSkgeworICAgICAgICBh
dXRvIGluZGV4ID0gb3B0aW9uYWxJbmRleC52YWx1ZSgpOworICAgICAgICBzbG90LnNldFZhbHVl
KHRoaXNPYmplY3QsIDAsIHRvSlM8SURMRE9NU3RyaW5nPigqc3RhdGUsIHRoaXNPYmplY3QtPndy
YXBwZWQoKS5pdGVtKGluZGV4KSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
aWYgKEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlO
YW1lLCBzbG90KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgSlNWYWx1ZSBwcm90byA9IHRo
aXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdCgpOworICAgIGlmIChwcm90by5pc09iamVjdCgp
ICYmIGpzQ2FzdDxKU09iamVjdCo+KHByb3RvKS0+aGFzUHJvcGVydHkoc3RhdGUsIHByb3BlcnR5
TmFtZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghb3B0aW9uYWxJbmRleCAm
JiB0aGlzT2JqZWN0LT5jbGFzc0luZm8oKSA9PSBpbmZvKCkgJiYgIXByb3BlcnR5TmFtZS5pc1N5
bWJvbCgpKSB7CisgICAgICAgIGF1dG8gaXRlbSA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5uYW1l
ZEl0ZW0ocHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcocHJvcGVydHlOYW1lKSk7CisgICAgICAg
IGlmICghSURMRE9NU3RyaW5nOjppc051bGxWYWx1ZShpdGVtKSkgeworICAgICAgICAgICAgc2xv
dC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCAwLCB0b0pTPElETERPTVN0cmluZz4oKnN0YXRlLCBpdGVt
KSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2Jvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXI6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBh
dXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJ
ZGVudGlmaWVyKj4ob2JqZWN0KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CisgICAgaWYgKExJS0VMWShpbmRleCA8IHRoaXNPYmplY3QtPndyYXBw
ZWQoKS5sZW5ndGgoKSkpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCAwLCB0
b0pTPElETERPTVN0cmluZz4oKnN0YXRlLCB0aGlzT2JqZWN0LT53cmFwcGVkKCkuaXRlbShpbmRl
eCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBCYXNlOjpnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRoaXNPYmplY3QsIHN0YXRlLCBpbmRleCwgc2xvdCk7Cit9
CisKK3ZvaWQgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmdldE93
blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVy
dHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0
aElkZW50aWZpZXIqPihvYmplY3QpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHRoaXNP
YmplY3QtPndyYXBwZWQoKS5sZW5ndGgoKTsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIHByb3Bl
cnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGkpKTsKKyAgICBmb3IgKGF1dG8m
IHByb3BlcnR5TmFtZSA6IHRoaXNPYmplY3QtPndyYXBwZWQoKS5zdXBwb3J0ZWRQcm9wZXJ0eU5h
bWVzKCkpCisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmco
c3RhdGUsIHByb3BlcnR5TmFtZSkpOworICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXModGhp
c09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworfQorCitib29sIEpTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVj
U3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQ
dXRQcm9wZXJ0eVNsb3QmIHB1dFByb3BlcnR5U2xvdCkKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKj4oY2Vs
bCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwor
CisgICAgaWYgKGF1dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKKyAgICAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7Cisg
ICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCB2
YWx1ZSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7Cisg
ICAgICAgIHRoaXNPYmplY3QtPndyYXBwZWQoKS5pbmRleGVkU2V0dGVyKGluZGV4LnZhbHVlKCks
IFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkgeworICAgICAgICBQcm9wZXJ0eVNsb3Qg
c2xvdCB7IHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlu
cXVpcnkgfTsKKyAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90
b3R5cGVEaXJlY3QoKTsKKyAgICAgICAgaWYgKCEocHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNP
YmplY3QocHJvdG90eXBlKS0+Z2V0UHJvcGVydHlTbG90KHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNs
b3QpKSkgeworICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RShzdGF0ZS0+dm0oKSk7CisgICAgICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExET01TdHJpbmc+KCpzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCB0cnVlKTsKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPndyYXBwZWQo
KS5uYW1lZFNldHRlcihwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUpLCBXVEZNb3Zl
KG5hdGl2ZVZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiBCYXNlOjpwdXQodGhpc09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7Cit9CisKK2Jvb2wgSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJv
dykKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlcldpdGhJZGVudGlmaWVyKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworCisgICAgaWYgKExJS0VMWShpbmRleCA8PSBNQVhf
QVJSQVlfSU5ERVgpKSB7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUoc3RhdGUtPnZtKCkpOworICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExET01TdHJpbmc+KCpzdGF0ZSwgdmFsdWUpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIHRydWUpOworICAgICAgICB0aGlzT2JqZWN0LT53cmFwcGVkKCkuaW5kZXhl
ZFNldHRlcihpbmRleCwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZy
b20oc3RhdGUsIGluZGV4KTsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7IHRoaXNPYmplY3QsIFBy
b3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkgfTsKKyAgICBKU1ZhbHVl
IHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdCgpOworICAgIGlmICgh
KHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5
U2xvdChzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90KSkpIHsKKyAgICAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7CisgICAgICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCB2YWx1ZSk7CisgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CisgICAgICAgIHRoaXNPYmpl
Y3QtPndyYXBwZWQoKS5uYW1lZFNldHRlcihwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5h
bWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIHJldHVybiBCYXNlOjpwdXRCeUluZGV4KGNlbGwsIHN0YXRlLCBpbmRleCwgdmFsdWUs
IHNob3VsZFRocm93KTsKK30KKworYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRo
SWRlbnRpZmllcjo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlw
dG9yJiBwcm9wZXJ0eURlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgYXV0byog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRp
Zmllcio+KG9iamVjdCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOworCisgICAgaWYgKGF1dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFt
ZSkpIHsKKyAgICAgICAgaWYgKCFwcm9wZXJ0eURlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKKyAgICAgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHByb3BlcnR5RGVzY3JpcHRvci52YWx1
ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKKyAg
ICAgICAgdGhpc09iamVjdC0+d3JhcHBlZCgpLmluZGV4ZWRTZXR0ZXIoaW5kZXgudmFsdWUoKSwg
V1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICBpZiAoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7CisgICAgICAgIFByb3BlcnR5U2xvdCBz
bG90IHsgdGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5x
dWlyeSB9OworICAgICAgICBpZiAoIUJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0
LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90KSkgeworICAgICAgICAgICAgaWYgKCFwcm9wZXJ0
eURlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
c3RhdGUtPnZtKCkpOworICAgICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
RE9NU3RyaW5nPigqc3RhdGUsIHByb3BlcnR5RGVzY3JpcHRvci52YWx1ZSgpKTsKKyAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CisgICAgICAgICAgICB0
aGlzT2JqZWN0LT53cmFwcGVkKCkubmFtZWRTZXR0ZXIocHJvcGVydHlOYW1lVG9TdHJpbmcocHJv
cGVydHlOYW1lKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBQcm9wZXJ0eURlc2NyaXB0b3IgbmV3UHJvcGVy
dHlEZXNjcmlwdG9yID0gcHJvcGVydHlEZXNjcmlwdG9yOworICAgIG5ld1Byb3BlcnR5RGVzY3Jp
cHRvci5zZXRDb25maWd1cmFibGUodHJ1ZSk7CisgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blBy
b3BlcnR5KG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgY29uZmlndXJhYmxlUHJvcGVydHlE
ZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIEpTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKiBJRExPcGVyYXRpb248SlNUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI+OjpjYXN0KEV4ZWNTdGF0ZSYgc3RhdGUp
Cit7CisgICAgcmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyKj4oc3RhdGUudm0oKSwgc3RhdGUudGhpc1ZhbHVlKCkpOworfQor
CitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmll
ckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQoreworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIHByb3RvdHlwZSA9
IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAo
VU5MSUtFTFkoIXByb3RvdHlwZSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0
YXRlLCB0aHJvd1Njb3BlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0o
KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOworfQorCitib29sIHNldEpTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0
ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUp
Cit7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljRG93
bmNhc3Q8SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGUq
Pih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJv
dG90eXBlKSkgeworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1p
biBjb25zdHJ1Y3RvcgorICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdChzdGF0ZS0+dm0o
KSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSkpOworfQorCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGVGdW5jdGlvbk5h
bWVkU2V0dGVyQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1lIElETE9wZXJhdGlv
bjxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj46OkNsYXNzUGFyYW1l
dGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVT
RURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
YXJndW1lbnRDb3VudCgpIDwgMikpCisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUs
IHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CisgICAg
YXV0byBuYW1lID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOworICAgIGF1dG8gdmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0
YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgaW1wbC5uYW1lZFNldHRlcihX
VEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZUZ1bmN0aW9uTmFt
ZWRTZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSkKK3sKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyPjo6Y2FsbDxqc1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZUZ1bmN0aW9uTmFtZWRTZXR0
ZXJCb2R5Pigqc3RhdGUsICJuYW1lZFNldHRlciIpOworfQorCitzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJQ
cm90b3R5cGVGdW5jdGlvbkluZGV4ZWRTZXR0ZXJCb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
dHlwZW5hbWUgSURMT3BlcmF0aW9uPEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAyKSkKKyAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3Ioc3RhdGUpKTsKKyAgICBhdXRvIGluZGV4ID0gY29udmVydDxJRExVbnNpZ25lZExvbmc+
KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIGF1dG8gdmFsdWUgPSBj
b252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgaW1wbC5pbmRleGVkU2V0dGVyKFdURk1vdmUoaW5kZXgpLCBXVEZNb3ZlKHZhbHVlKSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllclByb3RvdHlwZUZ1bmN0aW9uSW5kZXhlZFNldHRlcihFeGVjU3RhdGUqIHN0YXRlKQor
eworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0
aElkZW50aWZpZXI+OjpjYWxsPGpzVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyUHJvdG90eXBlRnVuY3Rpb25JbmRleGVkU2V0dGVyQm9keT4oKnN0YXRlLCAiaW5kZXhlZFNl
dHRlciIpOworfQorCitib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVU5VU0VE
X1BBUkFNKGhhbmRsZSk7CisgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOworICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmll
ck93bmVyOjpmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCog
Y29udGV4dCkKK3sKKyAgICBhdXRvKiBqc1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllciA9IHN0YXRpY19jYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpOworICAgIGF1dG8mIHdvcmxkID0gKnN0
YXRpY19jYXN0PERPTVdyYXBwZXJXb3JsZCo+KGNvbnRleHQpOworICAgIHVuY2FjaGVXcmFwcGVy
KHdvcmxkLCAmanNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXItPndyYXBw
ZWQoKSwganNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIpOworfQorCisj
aWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQorI2lmIFBMQVRGT1JNKFdJTikKKyNwcmFnbWEg
d2FybmluZyhkaXNhYmxlOiA0NDgzKQorZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkICgqY29uc3Qg
X19pZGVudGlmaWVyKCI/P183VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVy
QFdlYkNvcmVAQDZCQCIpW10pKCk7IH0KKyNlbHNlCitleHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQq
IF9aVFZON1dlYkNvcmUzOVRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckVb
XTsgfQorI2VuZGlmCisjZW5kaWYKKworSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlND
OjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyPiYmIGltcGwpCit7CisKKyNpZiBFTkFC
TEUoQklORElOR19JTlRFR1JJVFkpCisgICAgdm9pZCogYWN0dWFsVlRhYmxlUG9pbnRlciA9ICoo
cmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KGltcGwucHRyKCkpKTsKKyNpZiBQTEFURk9STShXSU4p
CisgICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oX19pZGVudGlmaWVyKCI/P183VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyQFdlYkNvcmVAQDZCQCIpKTsKKyNlbHNlCisgICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2lu
dGVyID0gJl9aVFZON1dlYkNvcmUzOVRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRp
ZmllckVbMl07CisjaWYgQ09NUElMRVIoQ0xBTkcpCisgICAgLy8gSWYgdGhpcyBmYWlscyBUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIgZG9lcyBub3QgaGF2ZSBhIHZ0YWJs
ZSwgc28geW91IG5lZWQgdG8gYWRkIHRoZQorICAgIC8vIEltcGxlbWVudGF0aW9uTGFja3NWVGFi
bGUgYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbgorICAgIHN0YXRpY19hc3Nl
cnQoX19pc19wb2x5bW9ycGhpYyhUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXIpLCAiVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyIGlzIG5vdCBwb2x5
bW9ycGhpYyIpOworI2VuZGlmCisjZW5kaWYKKyAgICAvLyBJZiB5b3UgaGl0IHRoaXMgYXNzZXJ0
aW9uIHlvdSBlaXRoZXIgaGF2ZSBhIHVzZSBhZnRlciBmcmVlIGJ1Zywgb3IKKyAgICAvLyBUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIgaGFzIHN1YmNsYXNzZXMuIElmIFRl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciBoYXMgc3ViY2xhc3NlcyB0aGF0
IGdldCBwYXNzZWQKKyAgICAvLyB0byB0b0pTKCkgd2UgY3VycmVudGx5IHJlcXVpcmUgVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyIHlvdSB0byBvcHQgb3V0IG9mIGJpbmRp
bmcgaGFyZGVuaW5nCisgICAgLy8gYnkgYWRkaW5nIHRoZSBTa2lwVlRhYmxlVmFsaWRhdGlvbiBh
dHRyaWJ1dGUgdG8gdGhlIGludGVyZmFjZSBJREwgZGVmaW5pdGlvbgorICAgIFJFTEVBU0VfQVNT
RVJUKGFjdHVhbFZUYWJsZVBvaW50ZXIgPT0gZXhwZWN0ZWRWVGFibGVQb2ludGVyKTsKKyNlbmRp
ZgorICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRo
SWRlbnRpZmllcj4oZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKK30KKworSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXImIGltcGwpCit7
CisgICAgcmV0dXJuIHdyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbCk7Cit9CisKK1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciogSlNUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyV2l0aElkZW50aWZpZXI6OnRvV3JhcHBlZChKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQoreworICAgIGlmIChhdXRvKiB3cmFwcGVyID0ganNEeW5hbWljRG93bmNhc3Q8SlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIqPih2bSwgdmFsdWUpKQorICAg
ICAgICByZXR1cm4gJndyYXBwZXItPndyYXBwZWQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
KworfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlcldpdGhJZGVudGlmaWVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJ
ZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAgICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhp
cyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9U
IE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgor
I2luY2x1ZGUgIlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oIgorI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyIDogcHVibGljIEpT
RE9NV3JhcHBlcjxUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI+IHsKK3B1
YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNET01XcmFwcGVyPFRlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllcj47CisgICAgc3RhdGljIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyKiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJXaXRoSWRlbnRpZmllcj4mJiBpbXBsKQorICAgIHsKKyAgICAgICAgSlNUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxv
Y2F0ZUNlbGw8SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI+KGdsb2Jh
bE9iamVjdC0+dm0oKS5oZWFwKSkgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXIoc3RydWN0dXJlLCAqZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKKyAgICAgICAg
cHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOworICAgICAgICByZXR1cm4g
cHRyOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUo
SlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3Qq
IHByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKKyAgICBzdGF0aWMgVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKiB0b1dyYXBwZWQoSlNDOjpWTSYs
IEpTQzo6SlNWYWx1ZSk7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6
SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3Bl
cnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlND
OjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6
OlByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlND
OjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpT
Qzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGlj
IGJvb2wgcHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFt
ZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29s
IHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9v
bCBkZWZpbmVPd25Qcm9wZXJ0eShKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OlByb3BlcnR5TmFtZSwgY29uc3QgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3Vs
ZFRocm93KTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CisKKyAgICBE
RUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpT
VmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxP
YmplY3QqKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwg
SlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNO
b3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRl
c0dldFByb3BlcnR5TmFtZXMgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKK3Byb3RlY3RlZDoKKyAg
ICBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcihKU0M6OlN0cnVjdHVy
ZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRo
SWRlbnRpZmllcj4mJik7CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307
CisKK2NsYXNzIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyT3duZXIg
OiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgYm9v
bCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2
b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdmlydHVhbCB2b2lkIGZpbmFs
aXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpOworfTsKKworaW5s
aW5lIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxkJiwg
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKikKK3sKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJP
d25lcj4gb3duZXI7CisgICAgcmV0dXJuICZvd25lci5nZXQoKTsKK30KKworaW5saW5lIHZvaWQq
IHdyYXBwZXJLZXkoVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKiB3cmFw
cGFibGVPYmplY3QpCit7CisgICAgcmV0dXJuIHdyYXBwYWJsZU9iamVjdDsKK30KKworSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKiBpbXBsKSB7IHJldHVy
biBpbXBsID8gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgp
OyB9CitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9N
R2xvYmFsT2JqZWN0KiwgUmVmPFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmll
cj4mJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyPiYmIGltcGwpIHsgcmV0dXJuIGltcGwg
PyB0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51
bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBl
ckNvbnZlcnRlclRyYWl0czxUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI+
IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllcjsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVy
LmgJKHJldmlzaW9uIDIxNzc2NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNDEsNiArNDEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFRlc3ROYW1lZERlbGV0ZXJOb0lk
ZW50aWZpZXIqIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKICAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUq
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGlj
IHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVu
dW1lcmF0aW9uTW9kZSgpKTsKICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0M6OkpT
Q2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogICAgIHN0YXRpYyBi
b29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwg
dW5zaWduZWQpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKQEAgLTUy
LDcgKzUzLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQg
Z2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0
aW9uTW9kZSgpKTsKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6
Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0lt
cHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xv
dEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgQmFzZTo6U3RydWN0
dXJlRmxhZ3M7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyVGhy
b3dpbmdFeGNlcHRpb24uaAkocmV2aXNpb24gMjE3NzY0KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBU
ZXN0TmFtZWREZWxldGVyVGhyb3dpbmdFeGNlcHRpb24qIHRvV3JhcHBlZChKU0M6OlZNJiwgSlND
OjpKU1ZhbHVlKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09i
amVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlT
bG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpT
T2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJv
cGVydHlTbG90Jik7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpT
T2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpF
bnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKICAgICBzdGF0aWMgYm9v
bCBkZWxldGVQcm9wZXJ0eShKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOwogICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0M6OkpT
Q2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ry
b3koSlNDOjpKU0NlbGwqKTsKQEAgLTUyLDcgKzUzLDYgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpT
Qzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAg
ICAgfQogCi0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0
KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJh
dGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKICAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7
CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlND
OjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50
ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8
IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNHZXRQcm9w
ZXJ0eU5hbWVzIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHJldmlzaW9uIDIxNzc2NCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERl
bGV0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBGdW5jdGlvbnMKIAotSlNDOjpFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBl
RnVuY3Rpb25SZW1vdmUoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZUZ1bmN0
aW9uTmFtZWREZWxldGVyKEpTQzo6RXhlY1N0YXRlKik7CiAKIC8vIEF0dHJpYnV0ZXMKIApAQCAt
OTEsNyArOTEsNyBAQCB0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU1Rlc3ROYW1lZERlCiBz
dGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZp
ZXJQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KIHsKICAgICB7ICJjb25zdHJ1Y3RvciIsIERvbnRF
bnVtLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpH
ZXRWYWx1ZUZ1bmM+KGpzVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3Ip
LCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihz
ZXRKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKSB9IH0sCi0gICAg
eyAicmVtb3ZlIiwgSlNDOjpGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRp
Y19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllclBy
b3RvdHlwZUZ1bmN0aW9uUmVtb3ZlKSwgKGludHB0cl90KSAoMSkgfSB9LAorICAgIHsgIm5hbWVk
RGVsZXRlciIsIEpTQzo6RnVuY3Rpb24sIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNf
Y2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXJQcm90
b3R5cGVGdW5jdGlvbk5hbWVkRGVsZXRlciksIChpbnRwdHJfdCkgKDEpIH0gfSwKIH07CiAKIGNv
bnN0IENsYXNzSW5mbyBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZTo6
c19pbmZvID0geyAiVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlIiwgJkJh
c2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RO
YW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZSkgfTsKQEAgLTE4Niw3ICsxODYsNyBA
QCBib29sIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyOjpkCiAgICAgYXV0byYgdGhp
c09iamVjdCA9ICpqc0Nhc3Q8SlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIqPihjZWxs
KTsKICAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgaWYgKGlzVmlz
aWJsZU5hbWVkUHJvcGVydHk8ZmFsc2U+KCpzdGF0ZSwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1l
KSkgewotICAgICAgICBpbXBsLnJlbW92ZShwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5h
bWUpKTsKKyAgICAgICAgaW1wbC5uYW1lZERlbGV0ZXIocHJvcGVydHlOYW1lVG9TdHJpbmcocHJv
cGVydHlOYW1lKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gQmFz
ZTo6ZGVsZXRlUHJvcGVydHkoY2VsbCwgc3RhdGUsIHByb3BlcnR5TmFtZSk7CkBAIC0xOTgsNyAr
MTk4LDcgQEAgYm9vbCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcjo6ZAogICAgIGF1
dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9
IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKICAgICBpZiAoaXNWaXNpYmxlTmFtZWRQ
cm9wZXJ0eTxmYWxzZT4oKnN0YXRlLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUpKSB7Ci0gICAg
ICAgIGltcGwucmVtb3ZlKHByb3BlcnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFtZSkpOworICAg
ICAgICBpbXBsLm5hbWVkRGVsZXRlcihwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUp
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBCYXNlOjpkZWxldGVQ
cm9wZXJ0eUJ5SW5kZXgoY2VsbCwgc3RhdGUsIGluZGV4KTsKQEAgLTIzMiw3ICsyMzIsNyBAQCBi
b29sIHNldEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyCiAgICAgcmV0dXJuIHByb3Rv
dHlwZS0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0
cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllclBy
b3RvdHlwZUZ1bmN0aW9uUmVtb3ZlQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1l
IElETE9wZXJhdGlvbjxKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcj46OkNsYXNzUGFy
YW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3N0YXRpYyBp
bmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmll
clByb3RvdHlwZUZ1bmN0aW9uTmFtZWREZWxldGVyQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcj46
OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSkK
IHsKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKQEAgLTI0MSwxMyArMjQxLDEzIEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3QKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIG5hbWUgPSBj
b252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
Ci0gICAgaW1wbC5yZW1vdmUoV1RGTW92ZShuYW1lKSk7CisgICAgaW1wbC5uYW1lZERlbGV0ZXIo
V1RGTW92ZShuYW1lKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROYW1lZERlbGV0ZXJX
aXRoSWRlbnRpZmllclByb3RvdHlwZUZ1bmN0aW9uUmVtb3ZlKEV4ZWNTdGF0ZSogc3RhdGUpCitF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlm
aWVyUHJvdG90eXBlRnVuY3Rpb25OYW1lZERlbGV0ZXIoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAg
ICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyPjo6
Y2FsbDxqc1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZUZ1bmN0aW9uUmVt
b3ZlQm9keT4oKnN0YXRlLCAicmVtb3ZlIik7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rl
c3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcj46OmNhbGw8anNUZXN0TmFtZWREZWxldGVyV2l0
aElkZW50aWZpZXJQcm90b3R5cGVGdW5jdGlvbk5hbWVkRGVsZXRlckJvZHk+KCpzdGF0ZSwgIm5h
bWVkRGVsZXRlciIpOwogfQogCiBib29sIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVy
T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50
aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuaAkocmV2aXNpb24gMjE3NzY0
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
RGVsZXRlcldpdGhJZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyBUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIqIHRvV3Jh
cHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5h
bWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJv
cGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5
TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgp
KTsKICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0M6OkpTQ2VsbCosIEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogICAgIHN0YXRpYyBib29sIGRlbGV0ZVByb3Bl
cnR5QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQpOwogICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKQEAgLTUyLDcgKzUzLDYgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlO
YW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZUFy
cmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKICAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6
OkpTR2xvYmFsT2JqZWN0Kik7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0
cnVjdHVyZUZsYWdzID0gSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5
QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hl
bkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlND
OjpPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxl
dGVyV2l0aEluZGV4ZWRHZXR0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXIu
aAkocmV2aXNpb24gMjE3NzY0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDYgKzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBUZXN0TmFtZWREZWxldGVy
V2l0aEluZGV4ZWRHZXR0ZXIqIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKICAg
ICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpF
eGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Cisg
ICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUg
PSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0
eShKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogICAg
IHN0YXRpYyBib29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhl
Y1N0YXRlKiwgdW5zaWduZWQpOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwq
KTsKQEAgLTUyLDcgKzUzLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCi0gICAgc3Rh
dGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6
OkVudW1lcmF0aW9uTW9kZSgpKTsKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVj
dG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CiBwdWJsaWM6CiAgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpHZXRPd25Qcm9wZXJ0
eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgQmFz
ZTo6U3RydWN0dXJlRmxhZ3M7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRl
ck5vSWRlbnRpZmllci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDMyMSBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVu
IGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZp
ZXIuaCIKKworI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQ29uc3Ry
dWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCisjaW5j
bHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNh
Y2hlLmgiCisjaW5jbHVkZSA8cnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5oPgorI2luY2x1ZGUg
PHd0Zi9HZXRQdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisvLyBBdHRyaWJ1dGVzCisKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRT
ZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0TmFtZWRTZXR0ZXJO
b0lkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworCitjbGFzcyBKU1Rlc3ROYW1lZFNldHRlck5vSWRl
bnRpZmllclByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGlj
OgorICAgIHVzaW5nIEJhc2UgPSBKU0M6OkpTTm9uRmluYWxPYmplY3Q7CisgICAgc3RhdGljIEpT
VGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0s
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCisgICAgeworICAgICAgICBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllclByb3RvdHlw
ZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3ROYW1lZFNldHRl
ck5vSWRlbnRpZmllclByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVu
dGlmaWVyUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0
ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAg
IERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpT
VmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllclByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDog
SlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAgeworICAgIH0KKworICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKKwordXNpbmcgSlNUZXN0TmFtZWRT
ZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvciA9IEpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1
Y3RhYmxlPEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyPjsKKwordGVtcGxhdGU8PiBKU1Zh
bHVlIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3I6OnByb3RvdHlwZUZv
clN0cnVjdHVyZShKU0M6OlZNJiB2bSwgY29uc3QgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0odm0pOworICAgIHJldHVybiBnbG9iYWxPYmplY3Qu
ZnVuY3Rpb25Qcm90b3R5cGUoKTsKK30KKwordGVtcGxhdGU8PiB2b2lkIEpTVGVzdE5hbWVkU2V0
dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI6
OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9u
dEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250
cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiVGVzdE5hbWVkU2V0dGVyTm9J
ZGVudGlmaWVyIikpKSwgUmVhZE9ubHkgfCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFkT25seSB8IERvbnRFbnVt
KTsKK30KKwordGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlNUZXN0TmFtZWRTZXR0ZXJOb0lk
ZW50aWZpZXJDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlm
aWVyIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKSB9OworCisvKiBIYXNo
IHRhYmxlIGZvciBwcm90b3R5cGUgKi8KKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpT
VGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyUHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9Cit7Cisg
ICAgeyAiY29uc3RydWN0b3IiLCBEb250RW51bSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0
YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3ROYW1lZFNldHRlck5v
SWRlbnRpZmllckNvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0
eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25z
dHJ1Y3RvcikgfSB9LAorfTsKKworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE5hbWVkU2V0dGVyTm9J
ZGVudGlmaWVyUHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZp
ZXJQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyUHJvdG90eXBlKSB9OworCit2
b2lkIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJlaWZ5U3Rh
dGljUHJvcGVydGllcyh2bSwgSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXJQcm90b3R5cGVU
YWJsZVZhbHVlcywgKnRoaXMpOworfQorCitjb25zdCBDbGFzc0luZm8gSlNUZXN0TmFtZWRTZXR0
ZXJOb0lkZW50aWZpZXI6OnNfaW5mbyA9IHsgIlRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllciIs
ICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNU
ZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIpIH07CisKK0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVu
dGlmaWVyOjpKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcihTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmPFRlc3ROYW1lZFNldHRlck5v
SWRlbnRpZmllcj4mJiBpbXBsKQorICAgIDogSlNET01XcmFwcGVyPFRlc3ROYW1lZFNldHRlck5v
SWRlbnRpZmllcj4oc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpCit7Cit9
CisKK3ZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgQVNTRVJUKGluaGVy
aXRzKHZtLCBpbmZvKCkpKTsKKworfQorCitKU09iamVjdCogSlNUZXN0TmFtZWRTZXR0ZXJOb0lk
ZW50aWZpZXI6OmNyZWF0ZVByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QpCit7CisgICAgcmV0dXJuIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyUHJv
dG90eXBlOjpjcmVhdGUodm0sICZnbG9iYWxPYmplY3QsIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVu
dGlmaWVyUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxPYmplY3QsIGdsb2Jh
bE9iamVjdC5vYmplY3RQcm90b3R5cGUoKSkpOworfQorCitKU09iamVjdCogSlNUZXN0TmFtZWRT
ZXR0ZXJOb0lkZW50aWZpZXI6OnByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3ROYW1lZFNl
dHRlck5vSWRlbnRpZmllcj4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisKK0pTVmFsdWUgSlNUZXN0
TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0
b3I8SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8
Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKK30KKwordm9pZCBKU1Rl
c3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKK3sK
KyAgICBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllciogdGhpc09iamVjdCA9IHN0YXRpY19j
YXN0PEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyKj4oY2VsbCk7CisgICAgdGhpc09iamVj
dC0+SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI6On5KU1Rlc3ROYW1lZFNldHRlck5vSWRl
bnRpZmllcigpOworfQorCitib29sIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIGF1dG8qIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIqPihvYmplY3Qp
OworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAg
ICBpZiAoQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIHN0YXRlLCBwcm9wZXJ0
eU5hbWUsIHNsb3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBKU1ZhbHVlIHByb3RvID0g
dGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KCk7CisgICAgaWYgKHByb3RvLmlzT2JqZWN0
KCkgJiYganNDYXN0PEpTT2JqZWN0Kj4ocHJvdG8pLT5oYXNQcm9wZXJ0eShzdGF0ZSwgcHJvcGVy
dHlOYW1lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHRoaXNPYmplY3QtPmNs
YXNzSW5mbygpID09IGluZm8oKSAmJiAhcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpIHsKKyAgICAg
ICAgYXV0byBpdGVtID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLm5hbWVkSXRlbShwcm9wZXJ0eU5h
bWVUb0F0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgaWYgKCFJRExET01TdHJp
bmc6OmlzTnVsbFZhbHVlKGl0ZW0pKSB7CisgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNP
YmplY3QsIDAsIHRvSlM8SURMRE9NU3RyaW5nPigqc3RhdGUsIGl0ZW0pKTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwg
UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNU
ZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIqPihvYmplY3QpOworICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBJZGVudGlmaWVyIHByb3BlcnR5
TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBpZiAodGhpc09iamVj
dC0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKSB7CisgICAgICAgIGF1dG8gaXRlbSA9IHRoaXNPYmpl
Y3QtPndyYXBwZWQoKS5uYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcocHJvcGVy
dHlOYW1lKSk7CisgICAgICAgIGlmICghSURMRE9NU3RyaW5nOjppc051bGxWYWx1ZShpdGVtKSkg
eworICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCAwLCB0b0pTPElETERPTVN0
cmluZz4oKnN0YXRlLCBpdGVtKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCh0aGlz
T2JqZWN0LCBzdGF0ZSwgaW5kZXgsIHNsb3QpOworfQorCit2b2lkIEpTVGVzdE5hbWVkU2V0dGVy
Tm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlv
bk1vZGUgbW9kZSkKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVk
U2V0dGVyTm9JZGVudGlmaWVyKj4ob2JqZWN0KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgZm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0
aGlzT2JqZWN0LT53cmFwcGVkKCkuc3VwcG9ydGVkUHJvcGVydHlOYW1lcygpKQorICAgICAgICBw
cm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCBwcm9wZXJ0eU5h
bWUpKTsKKyAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIHN0YXRlLCBw
cm9wZXJ0eU5hbWVzLCBtb2RlKTsKK30KKworYm9vbCBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRp
Zmllcjo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBwdXRQcm9wZXJ0eVNs
b3QpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlck5v
SWRlbnRpZmllcio+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKKworICAgIGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpIHsKKyAg
ICAgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVy
bmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5IH07CisgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0g
dGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KCk7CisgICAgICAgIGlmICghKHByb3RvdHlw
ZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChzdGF0
ZSwgcHJvcGVydHlOYW1lLCBzbG90KSkpIHsKKyAgICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOworICAgICAgICAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHZhbHVlKTsKKyAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CisgICAgICAgICAgICB0
aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvU3RyaW5nKHBy
b3BlcnR5TmFtZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIEJhc2U6OnB1dCh0aGlzT2JqZWN0
LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKK30KKworYm9v
bCBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGws
IEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlIHZhbHVlLCBib29sIHNo
b3VsZFRocm93KQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRT
ZXR0ZXJOb0lkZW50aWZpZXIqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CisKKyAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IElk
ZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7IHRo
aXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkgfTsK
KyAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdCgp
OworICAgIGlmICghKHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSkt
PmdldFByb3BlcnR5U2xvdChzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90KSkpIHsKKyAgICAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7CisgICAg
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCB2YWx1
ZSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CisgICAg
ICAgIHRoaXNPYmplY3QtPndyYXBwZWQoKS5zZXROYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9TdHJp
bmcocHJvcGVydHlOYW1lKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gQmFzZTo6cHV0QnlJbmRleChjZWxsLCBzdGF0ZSwg
aW5kZXgsIHZhbHVlLCBzaG91bGRUaHJvdyk7Cit9CisKK2Jvb2wgSlNUZXN0TmFtZWRTZXR0ZXJO
b0lkZW50aWZpZXI6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3Jp
cHRvciYgcHJvcGVydHlEZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQoreworICAgIGF1dG8q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIqPihvYmpl
Y3QpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
KworICAgIGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpIHsKKyAgICAgICAgUHJvcGVydHlT
bG90IHNsb3QgeyB0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6
Vk1JbnF1aXJ5IH07CisgICAgICAgIGlmICghQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNP
YmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSB7CisgICAgICAgICAgICBpZiAoIXBy
b3BlcnR5RGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRShzdGF0ZS0+dm0oKSk7CisgICAgICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExET01TdHJpbmc+KCpzdGF0ZSwgcHJvcGVydHlEZXNjcmlwdG9yLnZhbHVlKCkpOworICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKKyAgICAgICAg
ICAgIHRoaXNPYmplY3QtPndyYXBwZWQoKS5zZXROYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9TdHJp
bmcocHJvcGVydHlOYW1lKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBQcm9wZXJ0eURlc2NyaXB0b3IgbmV3
UHJvcGVydHlEZXNjcmlwdG9yID0gcHJvcGVydHlEZXNjcmlwdG9yOworICAgIG5ld1Byb3BlcnR5
RGVzY3JpcHRvci5zZXRDb25maWd1cmFibGUodHJ1ZSk7CisgICAgcmV0dXJuIEJhc2U6OmRlZmlu
ZU93blByb3BlcnR5KG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgY29uZmlndXJhYmxlUHJv
cGVydHlEZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVz
dE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0TmFtZWRTZXR0
ZXJOb0lkZW50aWZpZXJQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgp
LCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0TmFtZWRT
ZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RO
YW1lZFNldHRlck5vSWRlbnRpZmllclByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7CisgICAgICAgIHRocm93
Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCisgICAgcmV0dXJu
IHByb3RvdHlwZS0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygp
LmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7Cit9CisKK2Jvb2wg
SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3sKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKKyAgICBVTlVTRURfUEFS
QU0odmlzaXRvcik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEpTVGVzdE5hbWVkU2V0
dGVyTm9JZGVudGlmaWVyT3duZXI6OmZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4g
aGFuZGxlLCB2b2lkKiBjb250ZXh0KQoreworICAgIGF1dG8qIGpzVGVzdE5hbWVkU2V0dGVyTm9J
ZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIqPiho
YW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CisgICAgYXV0byYgd29ybGQgPSAqc3RhdGljX2Nhc3Q8
RE9NV3JhcHBlcldvcmxkKj4oY29udGV4dCk7CisgICAgdW5jYWNoZVdyYXBwZXIod29ybGQsICZq
c1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci0+d3JhcHBlZCgpLCBqc1Rlc3ROYW1lZFNldHRl
ck5vSWRlbnRpZmllcik7Cit9CisKKyNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCisjaWYg
UExBVEZPUk0oV0lOKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ0ODMpCitleHRlcm4gIkMi
IHsgZXh0ZXJuIHZvaWQgKCpjb25zdCBfX2lkZW50aWZpZXIoIj8/XzdUZXN0TmFtZWRTZXR0ZXJO
b0lkZW50aWZpZXJAV2ViQ29yZUBANkJAIilbXSkoKTsgfQorI2Vsc2UKK2V4dGVybiAiQyIgeyBl
eHRlcm4gdm9pZCogX1pUVk43V2ViQ29yZTI3VGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyRVtd
OyB9CisjZW5kaWYKKyNlbmRpZgorCitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6
OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0TmFt
ZWRTZXR0ZXJOb0lkZW50aWZpZXI+JiYgaW1wbCkKK3sKKworI2lmIEVOQUJMRShCSU5ESU5HX0lO
VEVHUklUWSkKKyAgICB2b2lkKiBhY3R1YWxWVGFibGVQb2ludGVyID0gKihyZWludGVycHJldF9j
YXN0PHZvaWQqKj4oaW1wbC5wdHIoKSkpOworI2lmIFBMQVRGT1JNKFdJTikKKyAgICB2b2lkKiBl
eHBlY3RlZFZUYWJsZVBvaW50ZXIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihfX2lkZW50aWZp
ZXIoIj8/XzdUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXJAV2ViQ29yZUBANkJAIikpOworI2Vs
c2UKKyAgICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSAmX1pUVk43V2ViQ29yZTI3VGVz
dE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyRVsyXTsKKyNpZiBDT01QSUxFUihDTEFORykKKyAgICAv
LyBJZiB0aGlzIGZhaWxzIFRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllciBkb2VzIG5vdCBoYXZl
IGEgdnRhYmxlLCBzbyB5b3UgbmVlZCB0byBhZGQgdGhlCisgICAgLy8gSW1wbGVtZW50YXRpb25M
YWNrc1ZUYWJsZSBhdHRyaWJ1dGUgdG8gdGhlIGludGVyZmFjZSBkZWZpbml0aW9uCisgICAgc3Rh
dGljX2Fzc2VydChfX2lzX3BvbHltb3JwaGljKFRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllciks
ICJUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIgaXMgbm90IHBvbHltb3JwaGljIik7CisjZW5k
aWYKKyNlbmRpZgorICAgIC8vIElmIHlvdSBoaXQgdGhpcyBhc3NlcnRpb24geW91IGVpdGhlciBo
YXZlIGEgdXNlIGFmdGVyIGZyZWUgYnVnLCBvcgorICAgIC8vIFRlc3ROYW1lZFNldHRlck5vSWRl
bnRpZmllciBoYXMgc3ViY2xhc3Nlcy4gSWYgVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyIGhh
cyBzdWJjbGFzc2VzIHRoYXQgZ2V0IHBhc3NlZAorICAgIC8vIHRvIHRvSlMoKSB3ZSBjdXJyZW50
bHkgcmVxdWlyZSBUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIgeW91IHRvIG9wdCBvdXQgb2Yg
YmluZGluZyBoYXJkZW5pbmcKKyAgICAvLyBieSBhZGRpbmcgdGhlIFNraXBWVGFibGVWYWxpZGF0
aW9uIGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJmYWNlIElETCBkZWZpbml0aW9uCisgICAgUkVMRUFT
RV9BU1NFUlQoYWN0dWFsVlRhYmxlUG9pbnRlciA9PSBleHBlY3RlZFZUYWJsZVBvaW50ZXIpOwor
I2VuZGlmCisgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXI8VGVzdE5hbWVkU2V0dGVyTm9JZGVudGlm
aWVyPihnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOworfQorCitKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllciYgaW1wbCkKK3sKKyAgICByZXR1cm4gd3JhcChz
dGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKK30KKworVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlm
aWVyKiBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6dG9XcmFwcGVkKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBqc0R5bmFt
aWNEb3duY2FzdDxKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcio+KHZtLCB2YWx1ZSkpCisg
ICAgICAgIHJldHVybiAmd3JhcHBlci0+d3JhcHBlZCgpOworICAgIHJldHVybiBudWxscHRyOwor
fQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIu
aAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDkzIEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiSlNET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlm
aWVyLmgiCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIgOiBwdWJsaWMgSlNE
T01XcmFwcGVyPFRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcj4geworcHVibGljOgorICAgIHVz
aW5nIEJhc2UgPSBKU0RPTVdyYXBwZXI8VGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyPjsKKyAg
ICBzdGF0aWMgSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIqIGNyZWF0ZShKU0M6OlN0cnVj
dHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVz
dE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyPiYmIGltcGwpCisgICAgeworICAgICAgICBKU1Rlc3RO
YW1lZFNldHRlck5vSWRlbnRpZmllciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRl
Q2VsbDxKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcj4oZ2xvYmFsT2JqZWN0LT52bSgpLmhl
YXApKSBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcihzdHJ1Y3R1cmUsICpnbG9iYWxPYmpl
Y3QsIFdURk1vdmUoaW1wbCkpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9i
amVjdC0+dm0oKSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgc3RhdGljIEpT
Qzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3Qm
KTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUds
b2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIqIHRv
V3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0
eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIHZvaWQgZ2V0T3du
UHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3Bl
cnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9k
ZSgpKTsKKyAgICBzdGF0aWMgYm9vbCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7
CisgICAgc3RhdGljIGJvb2wgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRl
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cp
OworICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTQzo6SlNPYmplY3QqLCBKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBjb25zdCBKU0M6OlByb3BlcnR5RGVzY3Jp
cHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpK
U0NlbGwqKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4g
SlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6
VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAg
fQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29u
c3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQ
cm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xv
dCB8IEpTQzo6T3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdz
OworcHJvdGVjdGVkOgorICAgIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyKEpTQzo6U3Ry
dWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkU2V0dGVyTm9JZGVudGlm
aWVyPiYmKTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKKworY2xh
c3MgSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXJPd25lciA6IHB1YmxpYyBKU0M6OldlYWtI
YW5kbGVPd25lciB7CitwdWJsaWM6CisgICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6
U2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiwgdm9pZCogY29udGV4dCk7Cit9OworCitpbmxpbmUgSlNDOjpXZWFrSGFuZGxl
T3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmLCBUZXN0TmFtZWRTZXR0ZXJOb0lk
ZW50aWZpZXIqKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxKU1Rlc3ROYW1lZFNldHRl
ck5vSWRlbnRpZmllck93bmVyPiBvd25lcjsKKyAgICByZXR1cm4gJm93bmVyLmdldCgpOworfQor
CitpbmxpbmUgdm9pZCogd3JhcHBlcktleShUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIqIHdy
YXBwYWJsZU9iamVjdCkKK3sKKyAgICByZXR1cm4gd3JhcHBhYmxlT2JqZWN0OworfQorCitKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE5h
bWVkU2V0dGVyTm9JZGVudGlmaWVyJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0TmFt
ZWRTZXR0ZXJOb0lkZW50aWZpZXIqIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKHN0YXRlLCBn
bG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pT
TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVz
dE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyPiYmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KU05l
d2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFJlZlB0cjxUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI+JiYgaW1wbCkgeyBy
ZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbC5y
ZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcj4g
eworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVy
OworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBUZXN0TmFtZWRTZXR0ZXJOb0lkZW50
aWZpZXIqOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
MjEgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaCIKKworI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3Rh
YmxlLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRp
b25IYW5kbGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSA8
cnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5oPgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBBdHRyaWJ1
dGVzCisKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbkNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0
aW9uQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OkVuY29kZWRKU1ZhbHVlKTsKKworY2xhc3MgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvblByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgor
ICAgIHVzaW5nIEJhc2UgPSBKU0M6OkpTTm9uRmluYWxPYmplY3Q7CisgICAgc3RhdGljIEpTVGVz
dE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Qcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2
bSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKKyAgICB7CisgICAgICAgIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Q
cm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TmFt
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvblByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdE5hbWVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Qcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0
dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBw
dHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4g
SlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6
VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAg
fQorCitwcml2YXRlOgorICAgIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Qcm90
b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSog
c3RydWN0dXJlKQorICAgICAgICA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJl
KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307
CisKK3VzaW5nIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvciA9
IEpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb24+OworCit0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0TmFtZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUoSlNDOjpWTSYg
dm0sIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgVU5VU0VE
X1BBUkFNKHZtKTsKKyAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LmZ1bmN0aW9uUHJvdG90eXBlKCk7
Cit9CisKK3RlbXBsYXRlPD4gdm9pZCBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9u
Q29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PnByb3RvdHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6cHJvdG90eXBl
KHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7Cisg
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJp
bmcoJnZtLCBTdHJpbmcoQVNDSUlMaXRlcmFsKCJUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbiIpKSksIFJlYWRPbmx5IHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250RW51bSk7Cit9
CisKK3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb25Db25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb24iLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvcikgfTsK
KworLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovCisKK3N0YXRpYyBjb25zdCBIYXNoVGFi
bGVWYWx1ZSBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uUHJvdG90eXBlVGFibGVW
YWx1ZXNbXSA9Cit7CisgICAgeyAiY29uc3RydWN0b3IiLCBEb250RW51bSwgTm9JbnRyaW5zaWMs
IHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rl
c3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0
YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3ROYW1lZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IpIH0gfSwKK307CisKK2NvbnN0IENsYXNz
SW5mbyBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uUHJvdG90eXBlOjpzX2luZm8g
PSB7ICJUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvblByb3RvdHlwZSIsICZCYXNlOjpz
X2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0TmFtZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvblByb3RvdHlwZSkgfTsKKwordm9pZCBKU1Rlc3ROYW1lZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7
CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJlaWZ5U3RhdGljUHJvcGVydGll
cyh2bSwgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvblByb3RvdHlwZVRhYmxlVmFs
dWVzLCAqdGhpcyk7Cit9CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3ROYW1lZFNldHRlclRocm93
aW5nRXhjZXB0aW9uOjpzX2luZm8gPSB7ICJUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
biIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUo
SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbikgfTsKKworSlNUZXN0TmFtZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbihT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVm
PFRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uPiYmIGltcGwpCisgICAgOiBKU0RPTVdy
YXBwZXI8VGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+KHN0cnVjdHVyZSwgZ2xvYmFs
T2JqZWN0LCBXVEZNb3ZlKGltcGwpKQoreworfQorCit2b2lkIEpTVGVzdE5hbWVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7CisgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKKworfQor
CitKU09iamVjdCogSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6Y3JlYXRlUHJv
dG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBy
ZXR1cm4gSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvblByb3RvdHlwZTo6Y3JlYXRl
KHZtLCAmZ2xvYmFsT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uUHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC5v
YmplY3RQcm90b3R5cGUoKSkpOworfQorCitKU09iamVjdCogSlNUZXN0TmFtZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbjo6cHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdE5hbWVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb24+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCitKU1ZhbHVlIEpTVGVz
dE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29u
c3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NQ29u
c3RydWN0b3I8SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yPih2
bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOworfQor
Cit2b2lkIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmRlc3Ryb3koSlNDOjpK
U0NlbGwqIGNlbGwpCit7CisgICAgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiog
dGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b24qPihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT5KU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uOjp+SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbigpOworfQorCitib29s
IEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldE93blByb3BlcnR5U2xvdChK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4ob2JqZWN0KTsKKyAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgaWYgKEJhc2U6
OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgSlNWYWx1ZSBwcm90byA9IHRoaXNPYmplY3Qt
PmdldFByb3RvdHlwZURpcmVjdCgpOworICAgIGlmIChwcm90by5pc09iamVjdCgpICYmIGpzQ2Fz
dDxKU09iamVjdCo+KHByb3RvKS0+aGFzUHJvcGVydHkoc3RhdGUsIHByb3BlcnR5TmFtZSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICh0aGlzT2JqZWN0LT5jbGFzc0luZm8oKSA9
PSBpbmZvKCkgJiYgIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7CisgICAgICAgIGF1dG8gaXRl
bSA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5uYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9BdG9taWNT
dHJpbmcocHJvcGVydHlOYW1lKSk7CisgICAgICAgIGlmICghSURMRE9NU3RyaW5nOjppc051bGxW
YWx1ZShpdGVtKSkgeworICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCAwLCB0
b0pTPElETERPTVN0cmluZz4oKnN0YXRlLCBpdGVtKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSlNUZXN0
TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVy
dHlTbG90JiBzbG90KQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFt
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KG9iamVjdCk7CisgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIElkZW50aWZpZXIgcHJvcGVydHlO
YW1lID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpOworICAgIGlmICh0aGlzT2JqZWN0
LT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpIHsKKyAgICAgICAgYXV0byBpdGVtID0gdGhpc09iamVj
dC0+d3JhcHBlZCgpLm5hbWVkSXRlbShwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhwcm9wZXJ0
eU5hbWUpKTsKKyAgICAgICAgaWYgKCFJRExET01TdHJpbmc6OmlzTnVsbFZhbHVlKGl0ZW0pKSB7
CisgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIDAsIHRvSlM8SURMRE9NU3Ry
aW5nPigqc3RhdGUsIGl0ZW0pKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgfQorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRoaXNP
YmplY3QsIHN0YXRlLCBpbmRleCwgc2xvdCk7Cit9CisKK3ZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVy
YXRpb25Nb2RlIG1vZGUpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RO
YW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4ob2JqZWN0KTsKKyAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgZm9yIChhdXRvJiBwcm9wZXJ0
eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc3VwcG9ydGVkUHJvcGVydHlOYW1lcygpKQor
ICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCBw
cm9wZXJ0eU5hbWUpKTsKKyAgICBCYXNlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3Qs
IHN0YXRlLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKK30KKworYm9vbCBKU1Rlc3ROYW1lZFNldHRl
clRocm93aW5nRXhjZXB0aW9uOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3Qm
IHB1dFByb3BlcnR5U2xvdCkKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVz
dE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisKKyAgICBpZiAoIXByb3BlcnR5TmFt
ZS5pc1N5bWJvbCgpKSB7CisgICAgICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09iamVjdCwg
UHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSB9OworICAgICAgICBK
U1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdCgpOworICAg
ICAgICBpZiAoIShwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5n
ZXRQcm9wZXJ0eVNsb3Qoc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpKSB7CisgICAgICAgICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKKyAg
ICAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRl
LCB2YWx1ZSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRy
dWUpOworICAgICAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKCpzdGF0ZSwgdGhyb3dTY29wZSwg
dGhpc09iamVjdC0+d3JhcHBlZCgpLnNldE5hbWVkSXRlbShwcm9wZXJ0eU5hbWVUb1N0cmluZyhw
cm9wZXJ0eU5hbWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSkpOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gQmFzZTo6cHV0KHRoaXNPYmpl
Y3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3QpOworfQorCiti
b29sIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnB1dEJ5SW5kZXgoSlNDZWxs
KiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwg
Ym9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVz
dE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisKKyAgICBJZGVudGlmaWVyIHByb3Bl
cnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBQcm9wZXJ0eVNs
b3Qgc2xvdCB7IHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpW
TUlucXVpcnkgfTsKKyAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3Rv
dHlwZURpcmVjdCgpOworICAgIGlmICghKHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFzT2JqZWN0
KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90KSkp
IHsKKyAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+
dm0oKSk7CisgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4o
KnN0YXRlLCB2YWx1ZSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
dHJ1ZSk7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbigqc3RhdGUsIHRocm93U2NvcGUsIHRo
aXNPYmplY3QtPndyYXBwZWQoKS5zZXROYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9TdHJpbmcocHJv
cGVydHlOYW1lKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgcmV0dXJuIEJhc2U6OnB1dEJ5SW5kZXgoY2VsbCwgc3RhdGUsIGluZGV4
LCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworfQorCitib29sIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb246OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3Jp
cHRvciYgcHJvcGVydHlEZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQoreworICAgIGF1dG8q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+
KG9iamVjdCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOworCisgICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkgeworICAgICAgICBQcm9w
ZXJ0eVNsb3Qgc2xvdCB7IHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RU
eXBlOjpWTUlucXVpcnkgfTsKKyAgICAgICAgaWYgKCFCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
dGhpc09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpIHsKKyAgICAgICAgICAgIGlm
ICghcHJvcGVydHlEZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKKyAgICAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBwcm9wZXJ0eURlc2NyaXB0b3IudmFsdWUoKSk7
CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOworICAg
ICAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKCpzdGF0ZSwgdGhyb3dTY29wZSwgdGhpc09iamVj
dC0+d3JhcHBlZCgpLnNldE5hbWVkSXRlbShwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5h
bWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBQcm9wZXJ0eURlc2NyaXB0b3IgbmV3UHJvcGVydHlEZXNj
cmlwdG9yID0gcHJvcGVydHlEZXNjcmlwdG9yOworICAgIG5ld1Byb3BlcnR5RGVzY3JpcHRvci5z
ZXRDb25maWd1cmFibGUodHJ1ZSk7CisgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5
KG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgY29uZmlndXJhYmxlUHJvcGVydHlEZXNjcmlw
dG9yLCBzaG91bGRUaHJvdyk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBh
dXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3ROYW1lZFNldHRlclRocm93
aW5nRXhjZXB0aW9uUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
KyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
VGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldENvbnN0cnVjdG9yKHN0YXRlLT52
bSgpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0TmFt
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQorewor
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Rvd25jYXN0
PEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Qcm90b3R5cGUqPih2bSwgSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgewor
ICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rv
cgorICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnBy
b3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkp
OworfQorCitib29sIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Pd25lcjo6aXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUs
IHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxl
KTsKKyAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2
b2lkIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Pd25lcjo6ZmluYWxpemUoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqIGNvbnRleHQpCit7CisgICAgYXV0
byoganNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiA9IHN0YXRpY19jYXN0PEpTVGVz
dE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7
CisgICAgYXV0byYgd29ybGQgPSAqc3RhdGljX2Nhc3Q8RE9NV3JhcHBlcldvcmxkKj4oY29udGV4
dCk7CisgICAgdW5jYWNoZVdyYXBwZXIod29ybGQsICZqc1Rlc3ROYW1lZFNldHRlclRocm93aW5n
RXhjZXB0aW9uLT53cmFwcGVkKCksIGpzVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24p
OworfQorCisjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQorI2lmIFBMQVRGT1JNKFdJTikK
KyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NDgzKQorZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lk
ICgqY29uc3QgX19pZGVudGlmaWVyKCI/P183VGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b25AV2ViQ29yZUBANkJAIilbXSkoKTsgfQorI2Vsc2UKK2V4dGVybiAiQyIgeyBleHRlcm4gdm9p
ZCogX1pUVk43V2ViQ29yZTMyVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25FW107IH0K
KyNlbmRpZgorI2VuZGlmCisKK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhl
Y1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3ROYW1lZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uPiYmIGltcGwpCit7CisKKyNpZiBFTkFCTEUoQklORElOR19J
TlRFR1JJVFkpCisgICAgdm9pZCogYWN0dWFsVlRhYmxlUG9pbnRlciA9ICoocmVpbnRlcnByZXRf
Y2FzdDx2b2lkKio+KGltcGwucHRyKCkpKTsKKyNpZiBQTEFURk9STShXSU4pCisgICAgdm9pZCog
ZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oX19pZGVudGlm
aWVyKCI/P183VGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25AV2ViQ29yZUBANkJAIikp
OworI2Vsc2UKKyAgICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSAmX1pUVk43V2ViQ29y
ZTMyVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25FWzJdOworI2lmIENPTVBJTEVSKENM
QU5HKQorICAgIC8vIElmIHRoaXMgZmFpbHMgVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b24gZG9lcyBub3QgaGF2ZSBhIHZ0YWJsZSwgc28geW91IG5lZWQgdG8gYWRkIHRoZQorICAgIC8v
IEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUgYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2UgZGVm
aW5pdGlvbgorICAgIHN0YXRpY19hc3NlcnQoX19pc19wb2x5bW9ycGhpYyhUZXN0TmFtZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbiksICJUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiBp
cyBub3QgcG9seW1vcnBoaWMiKTsKKyNlbmRpZgorI2VuZGlmCisgICAgLy8gSWYgeW91IGhpdCB0
aGlzIGFzc2VydGlvbiB5b3UgZWl0aGVyIGhhdmUgYSB1c2UgYWZ0ZXIgZnJlZSBidWcsIG9yCisg
ICAgLy8gVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24gaGFzIHN1YmNsYXNzZXMuIElm
IFRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uIGhhcyBzdWJjbGFzc2VzIHRoYXQgZ2V0
IHBhc3NlZAorICAgIC8vIHRvIHRvSlMoKSB3ZSBjdXJyZW50bHkgcmVxdWlyZSBUZXN0TmFtZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiB5b3UgdG8gb3B0IG91dCBvZiBiaW5kaW5nIGhhcmRlbmlu
ZworICAgIC8vIGJ5IGFkZGluZyB0aGUgU2tpcFZUYWJsZVZhbGlkYXRpb24gYXR0cmlidXRlIHRv
IHRoZSBpbnRlcmZhY2UgSURMIGRlZmluaXRpb24KKyAgICBSRUxFQVNFX0FTU0VSVChhY3R1YWxW
VGFibGVQb2ludGVyID09IGV4cGVjdGVkVlRhYmxlUG9pbnRlcik7CisjZW5kaWYKKyAgICByZXR1
cm4gY3JlYXRlV3JhcHBlcjxUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4oZ2xvYmFs
T2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKK30KKworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0TmFtZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiYgaW1wbCkKK3sKKyAgICByZXR1cm4gd3JhcChzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCBpbXBsKTsKK30KKworVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b24qIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnRvV3JhcHBlZChKU0M6OlZN
JiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmIChhdXRvKiB3cmFwcGVyID0ganNE
eW5hbWljRG93bmNhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KHZtLCB2
YWx1ZSkpCisgICAgICAgIHJldHVybiAmd3JhcHBlci0+d3JhcHBlZCgpOworICAgIHJldHVybiBu
dWxscHRyOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRl
clRocm93aW5nRXhjZXB0aW9uLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkzIEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFz
IGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCisjaW5jbHVkZSAi
VGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaCIKKyNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBKU1Rlc3ROYW1lZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uIDogcHVibGljIEpTRE9NV3JhcHBlcjxUZXN0TmFtZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbj4geworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0RPTVdy
YXBwZXI8VGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+OworICAgIHN0YXRpYyBKU1Rl
c3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uKiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3ROYW1lZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uPiYmIGltcGwpCisgICAgeworICAgICAgICBKU1Rlc3ROYW1l
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2Nh
dGVDZWxsPEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+KGdsb2JhbE9iamVjdC0+
dm0oKS5oZWFwKSkgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbihzdHJ1Y3R1cmUs
ICpnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0
aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisg
ICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNET01H
bG9iYWxPYmplY3QmKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6
Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBUZXN0TmFtZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbiogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNT
dGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBz
dGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpT
Qzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyBib29sIHB1dChKU0M6OkpTQ2VsbCos
IEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQ
dXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBwdXRCeUluZGV4KEpTQzo6SlNDZWxs
KiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwg
Ym9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlND
OjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIGNvbnN0IEpT
Qzo6UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIHZv
aWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOworCisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3Rh
dGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVj
dG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CitwdWJsaWM6CisgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpHZXRPd25Qcm9wZXJ0
eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgQmFz
ZTo6U3RydWN0dXJlRmxhZ3M7Citwcm90ZWN0ZWQ6CisgICAgSlNUZXN0TmFtZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRl
c3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uPiYmKTsKKworICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oSlNDOjpWTSYpOworfTsKKworY2xhc3MgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbk93bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZpcnR1
YWwgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0
KTsKK307CisKK2lubGluZSBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdy
YXBwZXJXb3JsZCYsIFRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uKikKK3sKKyAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbk93
bmVyPiBvd25lcjsKKyAgICByZXR1cm4gJm93bmVyLmdldCgpOworfQorCitpbmxpbmUgdm9pZCog
d3JhcHBlcktleShUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiogd3JhcHBhYmxlT2Jq
ZWN0KQoreworICAgIHJldHVybiB3cmFwcGFibGVPYmplY3Q7Cit9CisKK0pTQzo6SlNWYWx1ZSB0
b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0TmFtZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbiYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE5hbWVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb24qIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKHN0YXRlLCBn
bG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pT
TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVz
dE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+JiYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uPiYm
IGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmpl
Y3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CisKK3RlbXBsYXRl
PD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0TmFtZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbj4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTVGVzdE5hbWVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb247CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFRl
c3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uKjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRp
Zmllci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMzUyIEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmgi
CisKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9y
Tm90Q29uc3RydWN0YWJsZS5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydC5oIgorI2luY2x1ZGUg
IkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgor
I2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSA8cnVudGltZS9GdW5jdGlv
blByb3RvdHlwZS5oPgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKwordXNpbmcgbmFtZXNwYWNl
IEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBGdW5jdGlvbnMKKworSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJQ
cm90b3R5cGVGdW5jdGlvbk5hbWVkU2V0dGVyKEpTQzo6RXhlY1N0YXRlKik7CisKKy8vIEF0dHJp
YnV0ZXMKKworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlm
aWVyQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJD
b25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5j
b2RlZEpTVmFsdWUpOworCitjbGFzcyBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyUHJv
dG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdXNp
bmcgQmFzZSA9IEpTQzo6SlNOb25GaW5hbE9iamVjdDsKKyAgICBzdGF0aWMgSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAg
IHsKKyAgICAgICAgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZSogcHRy
ID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3ROYW1lZFNldHRlcldpdGhJ
ZGVudGlmaWVyUHJvdG90eXBlPih2bS5oZWFwKSkgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRp
ZmllclByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHIt
PmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBE
RUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1Zh
bHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDog
SlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAgeworICAgIH0KKworICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKKwordXNpbmcgSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yID0gSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0
cnVjdGFibGU8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj47CisKK3RlbXBsYXRlPD4g
SlNWYWx1ZSBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3I6OnByb3Rv
dHlwZUZvclN0cnVjdHVyZShKU0M6OlZNJiB2bSwgY29uc3QgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0odm0pOworICAgIHJldHVybiBnbG9iYWxP
YmplY3QuZnVuY3Rpb25Qcm90b3R5cGUoKTsKK30KKwordGVtcGxhdGU8PiB2b2lkIEpTVGVzdE5h
bWVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMo
Vk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJ
ZGVudGlmaWVyOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFk
T25seSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5h
bWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZyhBU0NJSUxpdGVyYWwoIlRlc3ROYW1l
ZFNldHRlcldpdGhJZGVudGlmaWVyIikpKSwgUmVhZE9ubHkgfCBEb250RW51bSk7CisgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFkT25s
eSB8IERvbnRFbnVtKTsKK30KKwordGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0TmFtZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllciIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENS
RUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVj
dG9yKSB9OworCisvKiBIYXNoIHRhYmxlIGZvciBwcm90b3R5cGUgKi8KKworc3RhdGljIGNvbnN0
IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGVU
YWJsZVZhbHVlc1tdID0KK3sKKyAgICB7ICJjb25zdHJ1Y3RvciIsIERvbnRFbnVtLCBOb0ludHJp
bnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+
KGpzVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkg
c3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdE5hbWVk
U2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcikgfSB9LAorICAgIHsgIm5hbWVkU2V0dGVy
IiwgSlNDOjpGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PE5h
dGl2ZUZ1bmN0aW9uPihqc1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlRnVu
Y3Rpb25OYW1lZFNldHRlciksIChpbnRwdHJfdCkgKDIpIH0gfSwKK307CisKK2NvbnN0IENsYXNz
SW5mbyBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlOjpzX2luZm8gPSB7
ICJUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8s
IG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoSWRlbnRpZmllclByb3RvdHlwZSkgfTsKKwordm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJ
ZGVudGlmaWVyUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZVRhYmxlVmFsdWVzLCAqdGhpcyk7Cit9
CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyOjpzX2lu
Zm8gPSB7ICJUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllciIsICZCYXNlOjpzX2luZm8sIG51
bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SWRlbnRpZmllcikgfTsKKworSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6SlNUZXN0
TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmPFRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVy
PiYmIGltcGwpCisgICAgOiBKU0RPTVdyYXBwZXI8VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZp
ZXI+KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKQoreworfQorCit2b2lk
IEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkK
K3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgQVNTRVJUKGluaGVyaXRzKHZt
LCBpbmZvKCkpKTsKKworfQorCitKU09iamVjdCogSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRp
Zmllcjo6Y3JlYXRlUHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCkKK3sKKyAgICByZXR1cm4gSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3Rv
dHlwZTo6Y3JlYXRlKHZtLCAmZ2xvYmFsT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVu
dGlmaWVyUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxPYmplY3QsIGdsb2Jh
bE9iamVjdC5vYmplY3RQcm90b3R5cGUoKSkpOworfQorCitKU09iamVjdCogSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllcjo6cHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdE5hbWVk
U2V0dGVyV2l0aElkZW50aWZpZXI+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCitKU1ZhbHVlIEpT
VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29u
c3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NQ29u
c3RydWN0b3I8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yPih2bSwg
KmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOworfQorCit2
b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmRlc3Ryb3koSlNDOjpKU0NlbGwq
IGNlbGwpCit7CisgICAgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllciogdGhpc09iamVj
dCA9IHN0YXRpY19jYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIqPihjZWxsKTsK
KyAgICB0aGlzT2JqZWN0LT5KU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyOjp+SlNUZXN0
TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcigpOworfQorCitib29sIEpTVGVzdE5hbWVkU2V0dGVy
V2l0aElkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldp
dGhJZGVudGlmaWVyKj4ob2JqZWN0KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CisgICAgaWYgKEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlz
T2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90KSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgSlNWYWx1ZSBwcm90byA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdCgpOwor
ICAgIGlmIChwcm90by5pc09iamVjdCgpICYmIGpzQ2FzdDxKU09iamVjdCo+KHByb3RvKS0+aGFz
UHJvcGVydHkoc3RhdGUsIHByb3BlcnR5TmFtZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmICh0aGlzT2JqZWN0LT5jbGFzc0luZm8oKSA9PSBpbmZvKCkgJiYgIXByb3BlcnR5TmFt
ZS5pc1N5bWJvbCgpKSB7CisgICAgICAgIGF1dG8gaXRlbSA9IHRoaXNPYmplY3QtPndyYXBwZWQo
KS5uYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcocHJvcGVydHlOYW1lKSk7Cisg
ICAgICAgIGlmICghSURMRE9NU3RyaW5nOjppc051bGxWYWx1ZShpdGVtKSkgeworICAgICAgICAg
ICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCAwLCB0b0pTPElETERPTVN0cmluZz4oKnN0YXRl
LCBpdGVtKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmll
cjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIGF1dG8q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KG9i
amVjdCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OworICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwg
aW5kZXgpOworICAgIGlmICh0aGlzT2JqZWN0LT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpIHsKKyAg
ICAgICAgYXV0byBpdGVtID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLm5hbWVkSXRlbShwcm9wZXJ0
eU5hbWVUb0F0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgaWYgKCFJRExET01T
dHJpbmc6OmlzTnVsbFZhbHVlKGl0ZW0pKSB7CisgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRo
aXNPYmplY3QsIDAsIHRvSlM8SURMRE9NU3RyaW5nPigqc3RhdGUsIGl0ZW0pKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBCYXNlOjpnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRoaXNPYmplY3QsIHN0YXRlLCBpbmRleCwgc2xvdCk7Cit9
CisKK3ZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlO
YW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJh
eSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyKj4ob2JqZWN0
KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Cisg
ICAgZm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc3VwcG9y
dGVkUHJvcGVydHlOYW1lcygpKQorICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHN0YXRlLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICBCYXNlOjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKHRoaXNPYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKK30KKwor
Ym9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyOjpwdXQoSlNDZWxsKiBjZWxsLCBF
eGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVl
LCBQdXRQcm9wZXJ0eVNsb3QmIHB1dFByb3BlcnR5U2xvdCkKK3sKKyAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIqPihjZWxsKTsKKyAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisKKyAgICBp
ZiAoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7CisgICAgICAgIFByb3BlcnR5U2xvdCBzbG90
IHsgdGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWly
eSB9OworICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlw
ZURpcmVjdCgpOworICAgICAgICBpZiAoIShwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVj
dChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3Qoc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkp
KSB7CisgICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0
YXRlLT52bSgpKTsKKyAgICAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERP
TVN0cmluZz4oKnN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIHRydWUpOworICAgICAgICAgICAgdGhpc09iamVjdC0+d3JhcHBlZCgpLm5h
bWVkU2V0dGVyKHByb3BlcnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFtZSksIFdURk1vdmUobmF0
aXZlVmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKK30KKworYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJ
ZGVudGlmaWVyOjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5z
aWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyKj4o
Y2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OworCisgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRl
LCBpbmRleCk7CisgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2JqZWN0LCBQcm9wZXJ0eVNs
b3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5IH07CisgICAgSlNWYWx1ZSBwcm90b3R5
cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3QoKTsKKyAgICBpZiAoIShwcm90b3R5
cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3Qoc3Rh
dGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpKSB7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOworICAgICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgdmFsdWUpOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOworICAgICAgICB0aGlzT2JqZWN0LT53cmFw
cGVkKCkubmFtZWRTZXR0ZXIocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgV1RG
TW92ZShuYXRpdmVWYWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gQmFzZTo6cHV0QnlJbmRleChjZWxsLCBzdGF0ZSwgaW5kZXgsIHZhbHVlLCBzaG91bGRU
aHJvdyk7Cit9CisKK2Jvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6ZGVmaW5l
T3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBwcm9wZXJ0eURlc2Ny
aXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyKj4ob2JqZWN0KTsKKyAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisKKyAgICBpZiAoIXByb3Bl
cnR5TmFtZS5pc1N5bWJvbCgpKSB7CisgICAgICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09i
amVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSB9OworICAg
ICAgICBpZiAoIUJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBzdGF0ZSwgcHJv
cGVydHlOYW1lLCBzbG90KSkgeworICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eURlc2NyaXB0b3Iu
aXNEYXRhRGVzY3JpcHRvcigpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkp
OworICAgICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigq
c3RhdGUsIHByb3BlcnR5RGVzY3JpcHRvci52YWx1ZSgpKTsKKyAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CisgICAgICAgICAgICB0aGlzT2JqZWN0LT53
cmFwcGVkKCkubmFtZWRTZXR0ZXIocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwg
V1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBQcm9wZXJ0eURlc2NyaXB0b3IgbmV3UHJvcGVydHlEZXNjcmlwdG9y
ID0gcHJvcGVydHlEZXNjcmlwdG9yOworICAgIG5ld1Byb3BlcnR5RGVzY3JpcHRvci5zZXRDb25m
aWd1cmFibGUodHJ1ZSk7CisgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9iamVj
dCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgY29uZmlndXJhYmxlUHJvcGVydHlEZXNjcmlwdG9yLCBz
aG91bGRUaHJvdyk7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIEpTVGVzdE5hbWVkU2V0dGVyV2l0
aElkZW50aWZpZXIqIElETE9wZXJhdGlvbjxKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVy
Pjo6Y2FzdChFeGVjU3RhdGUmIHN0YXRlKQoreworICAgIHJldHVybiBqc0R5bmFtaWNEb3duY2Fz
dDxKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyKj4oc3RhdGUudm0oKSwgc3RhdGUudGhp
c1ZhbHVlKCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZFNldHRlcldpdGhJZGVu
dGlmaWVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byogcHJvdG90
eXBlID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllclBy
b3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElL
RUxZKCFwcm90b3R5cGUpKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwg
dGhyb3dTY29wZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3ROYW1lZFNldHRl
cldpdGhJZGVudGlmaWVyOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgcHJvdG90eXBlLT5n
bG9iYWxPYmplY3QoKSkpOworfQorCitib29sIHNldEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50
aWZpZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3ROYW1lZFNldHRlcldp
dGhJZGVudGlmaWVyUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
KyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKKyAgICAgICAgdGhyb3dWTVR5cGVFcnJv
cihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
Ly8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKKyAgICByZXR1cm4gcHJvdG90eXBl
LT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0
b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKK30KKworc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5
cGVGdW5jdGlvbk5hbWVkU2V0dGVyQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1l
IElETE9wZXJhdGlvbjxKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyPjo6Q2xhc3NQYXJh
bWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5hcmd1bWVudENvdW50KCkgPCAyKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKKyAg
ICBhdXRvIG5hbWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CisgICAgYXV0byB2YWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigq
c3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBpbXBsLm5hbWVkU2V0dGVy
KFdURk1vdmUobmFtZSksIFdURk1vdmUodmFsdWUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGVGdW5jdGlvbk5hbWVkU2V0dGVy
KEV4ZWNTdGF0ZSogc3RhdGUpCit7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3ROYW1l
ZFNldHRlcldpdGhJZGVudGlmaWVyPjo6Y2FsbDxqc1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlm
aWVyUHJvdG90eXBlRnVuY3Rpb25OYW1lZFNldHRlckJvZHk+KCpzdGF0ZSwgIm5hbWVkU2V0dGVy
Iik7Cit9CisKK2Jvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllck93bmVyOjppc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwg
dm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFVOVVNFRF9QQVJBTShoYW5kbGUp
OworICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Zv
aWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllck93bmVyOjpmaW5hbGl6ZShKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4dCkKK3sKKyAgICBhdXRvKiBq
c1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8SlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllcio+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKKyAgICBhdXRv
JiB3b3JsZCA9ICpzdGF0aWNfY2FzdDxET01XcmFwcGVyV29ybGQqPihjb250ZXh0KTsKKyAgICB1
bmNhY2hlV3JhcHBlcih3b3JsZCwgJmpzVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXItPndy
YXBwZWQoKSwganNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcik7Cit9CisKKyNpZiBFTkFC
TEUoQklORElOR19JTlRFR1JJVFkpCisjaWYgUExBVEZPUk0oV0lOKQorI3ByYWdtYSB3YXJuaW5n
KGRpc2FibGU6IDQ0ODMpCitleHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQgKCpjb25zdCBfX2lkZW50
aWZpZXIoIj8/XzdUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllckBXZWJDb3JlQEA2QkAiKVtd
KSgpOyB9CisjZWxzZQorZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkKiBfWlRWTjdXZWJDb3JlMjlU
ZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllckVbXTsgfQorI2VuZGlmCisjZW5kaWYKKworSlND
OjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI+JiYg
aW1wbCkKK3sKKworI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKKyAgICB2b2lkKiBhY3R1
YWxWVGFibGVQb2ludGVyID0gKihyZWludGVycHJldF9jYXN0PHZvaWQqKj4oaW1wbC5wdHIoKSkp
OworI2lmIFBMQVRGT1JNKFdJTikKKyAgICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihfX2lkZW50aWZpZXIoIj8/XzdUZXN0TmFtZWRTZXR0ZXJX
aXRoSWRlbnRpZmllckBXZWJDb3JlQEA2QkAiKSk7CisjZWxzZQorICAgIHZvaWQqIGV4cGVjdGVk
VlRhYmxlUG9pbnRlciA9ICZfWlRWTjdXZWJDb3JlMjlUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRp
ZmllckVbMl07CisjaWYgQ09NUElMRVIoQ0xBTkcpCisgICAgLy8gSWYgdGhpcyBmYWlscyBUZXN0
TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllciBkb2VzIG5vdCBoYXZlIGEgdnRhYmxlLCBzbyB5b3Ug
bmVlZCB0byBhZGQgdGhlCisgICAgLy8gSW1wbGVtZW50YXRpb25MYWNrc1ZUYWJsZSBhdHRyaWJ1
dGUgdG8gdGhlIGludGVyZmFjZSBkZWZpbml0aW9uCisgICAgc3RhdGljX2Fzc2VydChfX2lzX3Bv
bHltb3JwaGljKFRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyKSwgIlRlc3ROYW1lZFNldHRl
cldpdGhJZGVudGlmaWVyIGlzIG5vdCBwb2x5bW9ycGhpYyIpOworI2VuZGlmCisjZW5kaWYKKyAg
ICAvLyBJZiB5b3UgaGl0IHRoaXMgYXNzZXJ0aW9uIHlvdSBlaXRoZXIgaGF2ZSBhIHVzZSBhZnRl
ciBmcmVlIGJ1Zywgb3IKKyAgICAvLyBUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllciBoYXMg
c3ViY2xhc3Nlcy4gSWYgVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIgaGFzIHN1YmNsYXNz
ZXMgdGhhdCBnZXQgcGFzc2VkCisgICAgLy8gdG8gdG9KUygpIHdlIGN1cnJlbnRseSByZXF1aXJl
IFRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyIHlvdSB0byBvcHQgb3V0IG9mIGJpbmRpbmcg
aGFyZGVuaW5nCisgICAgLy8gYnkgYWRkaW5nIHRoZSBTa2lwVlRhYmxlVmFsaWRhdGlvbiBhdHRy
aWJ1dGUgdG8gdGhlIGludGVyZmFjZSBJREwgZGVmaW5pdGlvbgorICAgIFJFTEVBU0VfQVNTRVJU
KGFjdHVhbFZUYWJsZVBvaW50ZXIgPT0gZXhwZWN0ZWRWVGFibGVQb2ludGVyKTsKKyNlbmRpZgor
ICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPFRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyPihn
bG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RO
YW1lZFNldHRlcldpdGhJZGVudGlmaWVyJiBpbXBsKQoreworICAgIHJldHVybiB3cmFwKHN0YXRl
LCBnbG9iYWxPYmplY3QsIGltcGwpOworfQorCitUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmll
ciogSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6dG9XcmFwcGVkKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBqc0R5bmFt
aWNEb3duY2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyKj4odm0sIHZhbHVlKSkK
KyAgICAgICAgcmV0dXJuICZ3cmFwcGVyLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50
aWZpZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktp
dCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQg
YnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJUZXN0TmFtZWRTZXR0ZXJX
aXRoSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIg
OiBwdWJsaWMgSlNET01XcmFwcGVyPFRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyPiB7Citw
dWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTRE9NV3JhcHBlcjxUZXN0TmFtZWRTZXR0ZXJXaXRo
SWRlbnRpZmllcj47CisgICAgc3RhdGljIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIq
IGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBSZWY8VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI+JiYgaW1wbCkKKyAg
ICB7CisgICAgICAgIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIqIHB0ciA9IG5ldyAo
Tm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmll
cj4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlm
aWVyKHN0cnVjdHVyZSwgKmdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7CisgICAgICAgIHB0
ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgcmV0dXJuIHB0
cjsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpT
Qzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBw
cm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CisgICAgc3RhdGljIFRlc3RO
YW1lZFNldHRlcldpdGhJZGVudGlmaWVyKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1
ZSk7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwor
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCos
IEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xv
dCYpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCos
IEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRp
b25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGljIGJvb2wgcHV0KEpT
Qzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1Zh
bHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgo
SlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlND
OjpKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Q
cm9wZXJ0eShKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFt
ZSwgY29uc3QgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKKyAg
ICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CisKKyAgICBERUNMQVJFX0lORk87
CisKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2
bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90
eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Z2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Okdl
dE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNl
cHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlND
OjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc0dldFByb3BlcnR5
TmFtZXMgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKK3Byb3RlY3RlZDoKKyAgICBKU1Rlc3ROYW1l
ZFNldHRlcldpdGhJZGVudGlmaWVyKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3Qm
LCBSZWY8VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI+JiYpOworCisgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihKU0M6OlZNJik7Cit9OworCitjbGFzcyBKU1Rlc3ROYW1lZFNldHRlcldpdGhJ
ZGVudGlmaWVyT3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgeworcHVibGljOgor
ICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdmly
dHVhbCB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRl
eHQpOworfTsKKworaW5saW5lIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9N
V3JhcHBlcldvcmxkJiwgVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIqKQoreworICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyT3duZXI+
IG93bmVyOworICAgIHJldHVybiAmb3duZXIuZ2V0KCk7Cit9CisKK2lubGluZSB2b2lkKiB3cmFw
cGVyS2V5KFRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyKiB3cmFwcGFibGVPYmplY3QpCit7
CisgICAgcmV0dXJuIHdyYXBwYWJsZU9iamVjdDsKK30KKworSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3ROYW1lZFNldHRlcldpdGhJZGVu
dGlmaWVyJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0TmFtZWRTZXR0ZXJXaXRoSWRl
bnRpZmllciogaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwg
KmltcGwpIDogSlNDOjpqc051bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQo
SlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUZXN0TmFtZWRTZXR0ZXJX
aXRoSWRlbnRpZmllcj4mJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBS
ZWZQdHI8VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI+JiYgaW1wbCkgeyByZXR1cm4gaW1w
bCA/IHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9u
TnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFw
cGVyQ29udmVydGVyVHJhaXRzPFRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyPiB7CisgICAg
dXNpbmcgV3JhcHBlckNsYXNzID0gSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjsKKyAg
ICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZp
ZXIqOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVp
bHRpbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zLmNwcAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwzMDQgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVu
IHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2Vu
ZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMuaCIKKwor
I2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RD
b25zdHJ1Y3RhYmxlLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCisjaW5jbHVkZSAiSlNE
T01FeGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisj
aW5jbHVkZSA8cnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5oPgorI2luY2x1ZGUgPHd0Zi9HZXRQ
dHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisv
LyBBdHRyaWJ1dGVzCisKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRTZXR0ZXJXaXRo
T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3ROYW1lZFNldHRlcldp
dGhPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKKworY2xhc3MgSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoT3ZlcnJpZGVCdWlsdGluc1Byb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxP
YmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0M6OkpTTm9uRmluYWxPYmplY3Q7
CisgICAgc3RhdGljIEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5
cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTVGVzdE5hbWVkU2V0
dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlND
OjphbGxvY2F0ZUNlbGw8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluc1Byb3Rv
dHlwZT4odm0uaGVhcCkpIEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNQcm90
b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hD
cmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9J
TkZPOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVzdE5h
bWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEpT
Qzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK3VzaW5nIEpTVGVzdE5hbWVkU2V0
dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvciA9IEpTRE9NQ29uc3RydWN0b3JOb3RD
b25zdHJ1Y3RhYmxlPEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnM+OworCit0
ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluc0Nv
bnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIGNvbnN0IEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAg
ICByZXR1cm4gZ2xvYmFsT2JqZWN0LmZ1bmN0aW9uUHJvdG90eXBlKCk7Cit9CisKK3RlbXBsYXRl
PD4gdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3I6
OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCkKK3sKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwg
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluczo6cHJvdG90eXBlKHZtLCBnbG9i
YWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CisgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBT
dHJpbmcoQVNDSUlMaXRlcmFsKCJUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucyIp
KSksIFJlYWRPbmx5IHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250RW51bSk7Cit9CisKK3Rl
bXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVp
bHRpbnNDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRl
QnVpbHRpbnMiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3Rvcikg
fTsKKworLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovCisKK3N0YXRpYyBjb25zdCBIYXNo
VGFibGVWYWx1ZSBKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zUHJvdG90eXBl
VGFibGVWYWx1ZXNbXSA9Cit7CisgICAgeyAiY29uc3RydWN0b3IiLCBEb250RW51bSwgTm9JbnRy
aW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5j
Pihqc1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3IpLCAoaW50
cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rl
c3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3IpIH0gfSwKK307CisK
K2NvbnN0IENsYXNzSW5mbyBKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zUHJv
dG90eXBlOjpzX2luZm8gPSB7ICJUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluc1By
b3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluc1Byb3RvdHlwZSkgfTsK
Kwordm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zUHJvdG90eXBlOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwor
ICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJp
ZGVCdWlsdGluc1Byb3RvdHlwZVRhYmxlVmFsdWVzLCAqdGhpcyk7Cit9CisKK2NvbnN0IENsYXNz
SW5mbyBKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zOjpzX2luZm8gPSB7ICJU
ZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucyIsICZCYXNlOjpzX2luZm8sIG51bGxw
dHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3Zl
cnJpZGVCdWlsdGlucykgfTsKKworSlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlu
czo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucyhTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmPFRlc3ROYW1lZFNldHRl
cldpdGhPdmVycmlkZUJ1aWx0aW5zPiYmIGltcGwpCisgICAgOiBKU0RPTVdyYXBwZXI8VGVzdE5h
bWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnM+KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBX
VEZNb3ZlKGltcGwpKQoreworfQorCit2b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRl
QnVpbHRpbnM6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7CisgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKKworfQorCitKU09i
amVjdCogSlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluczo6Y3JlYXRlUHJvdG90
eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1
cm4gSlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluc1Byb3RvdHlwZTo6Y3JlYXRl
KHZtLCAmZ2xvYmFsT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5z
UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVj
dC5vYmplY3RQcm90b3R5cGUoKSkpOworfQorCitKU09iamVjdCogSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoT3ZlcnJpZGVCdWlsdGluczo6cHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdE5hbWVk
U2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnM+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCitKU1Zh
bHVlIEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnM6OmdldENvbnN0cnVjdG9y
KFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1
cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlu
c0NvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2Jh
bE9iamVjdCkpOworfQorCit2b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRp
bnM6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCit7CisgICAgSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoT3ZlcnJpZGVCdWlsdGlucyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdE5hbWVk
U2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMqPihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT5KU1Rl
c3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zOjp+SlNUZXN0TmFtZWRTZXR0ZXJXaXRo
T3ZlcnJpZGVCdWlsdGlucygpOworfQorCitib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJy
aWRlQnVpbHRpbnM6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
Cit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhP
dmVycmlkZUJ1aWx0aW5zKj4ob2JqZWN0KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgaWYgKHRoaXNPYmplY3QtPmNsYXNzSW5mbygpID09
IGluZm8oKSAmJiAhcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpIHsKKyAgICAgICAgYXV0byBpdGVt
ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLm5hbWVkSXRlbShwcm9wZXJ0eU5hbWVUb0F0b21pY1N0
cmluZyhwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgaWYgKCFJRExET01TdHJpbmc6OmlzTnVsbFZh
bHVlKGl0ZW0pKSB7CisgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIDAsIHRv
SlM8SURMRE9NU3RyaW5nPigqc3RhdGUsIGl0ZW0pKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgfQorICAgIGlmIChCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhp
c09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVy
cmlkZUJ1aWx0aW5zOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7
CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVy
cmlkZUJ1aWx0aW5zKj4ob2JqZWN0KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CisgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBJZGVudGlm
aWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7CisgICAgaWYgKHRoaXNPYmplY3QtPmNsYXNzSW5mbygp
ID09IGluZm8oKSkgeworICAgICAgICBhdXRvIGl0ZW0gPSB0aGlzT2JqZWN0LT53cmFwcGVkKCku
bmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZSkpOworICAg
ICAgICBpZiAoIUlETERPTVN0cmluZzo6aXNOdWxsVmFsdWUoaXRlbSkpIHsKKyAgICAgICAgICAg
IHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgMCwgdG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwg
aXRlbSkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpc09iamVjdCwgc3RhdGUs
IGluZGV4LCBzbG90KTsKK30KKwordm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1
aWx0aW5zOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
c3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUg
bW9kZSkKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVy
V2l0aE92ZXJyaWRlQnVpbHRpbnMqPihvYmplY3QpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBmb3IgKGF1dG8mIHByb3BlcnR5TmFtZSA6
IHRoaXNPYmplY3QtPndyYXBwZWQoKS5zdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkpCisgICAgICAg
IHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcoc3RhdGUsIHByb3BlcnR5
TmFtZSkpOworICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgc3RhdGUs
IHByb3BlcnR5TmFtZXMsIG1vZGUpOworfQorCitib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92
ZXJyaWRlQnVpbHRpbnM6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgcHV0
UHJvcGVydHlTbG90KQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucyo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKworICAgIGlmICghcHJvcGVydHlOYW1l
LmlzU3ltYm9sKCkpIHsKKyAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRShzdGF0ZS0+dm0oKSk7CisgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElE
TERPTVN0cmluZz4oKnN0YXRlLCB2YWx1ZSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgdHJ1ZSk7CisgICAgICAgIHRoaXNPYmplY3QtPndyYXBwZWQoKS5zZXROYW1l
ZEl0ZW0ocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgV1RGTW92ZShuYXRpdmVW
YWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gQmFzZTo6
cHV0KHRoaXNPYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNs
b3QpOworfQorCitib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnM6OnB1
dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwg
SlNWYWx1ZSB2YWx1ZSwgYm9vbCkKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
VGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMqPihjZWxsKTsKKyAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisKKyAgICBJZGVudGlmaWVy
IHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKKyAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgdmFsdWUpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CisgICAgdGhpc09iamVjdC0+
d3JhcHBlZCgpLnNldE5hbWVkSXRlbShwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUp
LCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluczo6ZGVmaW5lT3duUHJvcGVydHkoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBwcm9wZXJ0eURlc2NyaXB0b3IsIGJvb2wgc2hv
dWxkVGhyb3cpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNl
dHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zKj4ob2JqZWN0KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisKKyAgICBpZiAoIXByb3BlcnR5TmFtZS5p
c1N5bWJvbCgpKSB7CisgICAgICAgIGlmICghcHJvcGVydHlEZXNjcmlwdG9yLmlzRGF0YURlc2Ny
aXB0b3IoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7CisgICAgICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBwcm9wZXJ0eURlc2NyaXB0
b3IudmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1
ZSk7CisgICAgICAgIHRoaXNPYmplY3QtPndyYXBwZWQoKS5zZXROYW1lZEl0ZW0ocHJvcGVydHlO
YW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBQcm9wZXJ0eURlc2NyaXB0b3IgbmV3UHJvcGVy
dHlEZXNjcmlwdG9yID0gcHJvcGVydHlEZXNjcmlwdG9yOworICAgIG5ld1Byb3BlcnR5RGVzY3Jp
cHRvci5zZXRDb25maWd1cmFibGUodHJ1ZSk7CisgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blBy
b3BlcnR5KG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgY29uZmlndXJhYmxlUHJvcGVydHlE
ZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVk
U2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICBWTSYgdm0gPSBz
dGF0ZS0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3ROYW1lZFNl
dHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCisgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnM6OmdldENvbnN0
cnVjdG9yKHN0YXRlLT52bSgpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7Cit9CisKK2Jv
b2wgc2V0SlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQoreworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIHByb3RvdHlwZSA9
IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNQ
cm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJ
S0VMWSghcHJvdG90eXBlKSkgeworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBTaGFkb3dpbmcg
YSBidWlsdC1pbiBjb25zdHJ1Y3RvcgorICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdChz
dGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOworfQorCitib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92
ZXJyaWRlQnVpbHRpbnNPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sK
KyAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKKyAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRl
QnVpbHRpbnNPd25lcjo6ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUs
IHZvaWQqIGNvbnRleHQpCit7CisgICAgYXV0byoganNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJp
ZGVCdWlsdGlucyA9IHN0YXRpY19jYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVp
bHRpbnMqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CisgICAgYXV0byYgd29ybGQgPSAqc3Rh
dGljX2Nhc3Q8RE9NV3JhcHBlcldvcmxkKj4oY29udGV4dCk7CisgICAgdW5jYWNoZVdyYXBwZXIo
d29ybGQsICZqc1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zLT53cmFwcGVkKCks
IGpzVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMpOworfQorCisjaWYgRU5BQkxF
KEJJTkRJTkdfSU5URUdSSVRZKQorI2lmIFBMQVRGT1JNKFdJTikKKyNwcmFnbWEgd2FybmluZyhk
aXNhYmxlOiA0NDgzKQorZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkICgqY29uc3QgX19pZGVudGlm
aWVyKCI/P183VGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNAV2ViQ29yZUBANkJA
IilbXSkoKTsgfQorI2Vsc2UKK2V4dGVybiAiQyIgeyBleHRlcm4gdm9pZCogX1pUVk43V2ViQ29y
ZTM1VGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNFW107IH0KKyNlbmRpZgorI2Vu
ZGlmCisKK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3ROYW1lZFNldHRlcldpdGhPdmVy
cmlkZUJ1aWx0aW5zPiYmIGltcGwpCit7CisKKyNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkp
CisgICAgdm9pZCogYWN0dWFsVlRhYmxlUG9pbnRlciA9ICoocmVpbnRlcnByZXRfY2FzdDx2b2lk
Kio+KGltcGwucHRyKCkpKTsKKyNpZiBQTEFURk9STShXSU4pCisgICAgdm9pZCogZXhwZWN0ZWRW
VGFibGVQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oX19pZGVudGlmaWVyKCI/P183
VGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNAV2ViQ29yZUBANkJAIikpOworI2Vs
c2UKKyAgICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSAmX1pUVk43V2ViQ29yZTM1VGVz
dE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNFWzJdOworI2lmIENPTVBJTEVSKENMQU5H
KQorICAgIC8vIElmIHRoaXMgZmFpbHMgVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRp
bnMgZG9lcyBub3QgaGF2ZSBhIHZ0YWJsZSwgc28geW91IG5lZWQgdG8gYWRkIHRoZQorICAgIC8v
IEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUgYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2UgZGVm
aW5pdGlvbgorICAgIHN0YXRpY19hc3NlcnQoX19pc19wb2x5bW9ycGhpYyhUZXN0TmFtZWRTZXR0
ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucyksICJUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWls
dGlucyBpcyBub3QgcG9seW1vcnBoaWMiKTsKKyNlbmRpZgorI2VuZGlmCisgICAgLy8gSWYgeW91
IGhpdCB0aGlzIGFzc2VydGlvbiB5b3UgZWl0aGVyIGhhdmUgYSB1c2UgYWZ0ZXIgZnJlZSBidWcs
IG9yCisgICAgLy8gVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMgaGFzIHN1YmNs
YXNzZXMuIElmIFRlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zIGhhcyBzdWJjbGFz
c2VzIHRoYXQgZ2V0IHBhc3NlZAorICAgIC8vIHRvIHRvSlMoKSB3ZSBjdXJyZW50bHkgcmVxdWly
ZSBUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucyB5b3UgdG8gb3B0IG91dCBvZiBi
aW5kaW5nIGhhcmRlbmluZworICAgIC8vIGJ5IGFkZGluZyB0aGUgU2tpcFZUYWJsZVZhbGlkYXRp
b24gYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2UgSURMIGRlZmluaXRpb24KKyAgICBSRUxFQVNF
X0FTU0VSVChhY3R1YWxWVGFibGVQb2ludGVyID09IGV4cGVjdGVkVlRhYmxlUG9pbnRlcik7Cisj
ZW5kaWYKKyAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJp
ZGVCdWlsdGlucz4oZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKK30KKworSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucyYgaW1wbCkKK3sKKyAg
ICByZXR1cm4gd3JhcChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKK30KKworVGVzdE5hbWVk
U2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMqIEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRl
QnVpbHRpbnM6OnRvV3JhcHBlZChKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorewor
ICAgIGlmIChhdXRvKiB3cmFwcGVyID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0TmFtZWRTZXR0
ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucyo+KHZtLCB2YWx1ZSkpCisgICAgICAgIHJldHVybiAmd3Jh
cHBlci0+d3JhcHBlZCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCit9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
T3ZlcnJpZGVCdWlsdGlucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zLmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDkzIEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
b3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiVGVzdE5hbWVkU2V0dGVyV2l0
aE92ZXJyaWRlQnVpbHRpbnMuaCIKKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlk
ZUJ1aWx0aW5zIDogcHVibGljIEpTRE9NV3JhcHBlcjxUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJp
ZGVCdWlsdGlucz4geworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0RPTVdyYXBwZXI8VGVz
dE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnM+OworICAgIHN0YXRpYyBKU1Rlc3ROYW1l
ZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zKiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3ROYW1lZFNldHRl
cldpdGhPdmVycmlkZUJ1aWx0aW5zPiYmIGltcGwpCisgICAgeworICAgICAgICBKU1Rlc3ROYW1l
ZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxs
b2NhdGVDZWxsPEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnM+KGdsb2JhbE9i
amVjdC0+dm0oKS5oZWFwKSkgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucyhz
dHJ1Y3R1cmUsICpnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOworICAgICAgICBwdHItPmZp
bmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAgIHJldHVybiBwdHI7Cisg
ICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZN
JiwgSlNET01HbG9iYWxPYmplY3QmKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90
eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBUZXN0TmFtZWRT
ZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucyogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFs
dWUpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0Kiwg
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsK
KyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNs
b3QmKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0
aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyBib29sIHB1dChK
U0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNW
YWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBwdXRCeUluZGV4
KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpT
Qzo6SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIGJvb2wgZGVmaW5lT3du
UHJvcGVydHkoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5h
bWUsIGNvbnN0IEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7Cisg
ICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOworCisgICAgREVDTEFSRV9JTkZP
OworCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3Rv
dHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Citw
dWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpH
ZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5
U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgQmFzZTo6U3Ry
dWN0dXJlRmxhZ3M7Citwcm90ZWN0ZWQ6CisgICAgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJp
ZGVCdWlsdGlucyhKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RO
YW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zPiYmKTsKKworICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oSlNDOjpWTSYpOworfTsKKworY2xhc3MgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJp
ZGVCdWlsdGluc093bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZp
cnR1YWwgdm9pZCBmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250
ZXh0KTsKK307CisKK2lubGluZSBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERP
TVdyYXBwZXJXb3JsZCYsIFRlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zKikKK3sK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVC
dWlsdGluc093bmVyPiBvd25lcjsKKyAgICByZXR1cm4gJm93bmVyLmdldCgpOworfQorCitpbmxp
bmUgdm9pZCogd3JhcHBlcktleShUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucyog
d3JhcHBhYmxlT2JqZWN0KQoreworICAgIHJldHVybiB3cmFwcGFibGVPYmplY3Q7Cit9CisKK0pT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0
TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucyYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMqIGltcGwpIHsgcmV0dXJuIGlt
cGwgPyB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0K
K0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9i
YWxPYmplY3QqLCBSZWY8VGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnM+JiYpOwor
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3ROYW1lZFNldHRl
cldpdGhPdmVycmlkZUJ1aWx0aW5zPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlD
cmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6
OmpzTnVsbCgpOyB9CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRy
YWl0czxUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucz4geworICAgIHVzaW5nIFdy
YXBwZXJDbGFzcyA9IEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnM7CisgICAg
dXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFRlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1
aWx0aW5zKjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdh
YmxlUHJvcGVydGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVz
LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkwIEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4g
Z2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdh
YmxlUHJvcGVydGllcy5oIgorCisjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKKyNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0
YWJsZS5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydC5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0
aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIkpT
RE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSA8cnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5o
PgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisvLyBGdW5jdGlvbnMKKworSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzSW5z
dGFuY2VGdW5jdGlvblVuZm9yZ2VhYmxlT3BlcmF0aW9uKEpTQzo6RXhlY1N0YXRlKik7CisKKy8v
IEF0dHJpYnV0ZXMKKworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZFNldHRlcldpdGhV
bmZvcmdhYmxlUHJvcGVydGllc0NvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3ROYW1lZFNldHRl
cldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0NvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzVW5mb3JnZWFibGVB
dHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3Bl
cnR5TmFtZSk7CisKK2NsYXNzIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0
aWVzUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6Cisg
ICAgdXNpbmcgQmFzZSA9IEpTQzo6SlNOb25GaW5hbE9iamVjdDsKKyAgICBzdGF0aWMgSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNQcm90b3R5cGUqIGNyZWF0ZShKU0M6
OlZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2Fi
bGVQcm9wZXJ0aWVzUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVD
ZWxsPEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzUHJvdG90eXBlPih2
bS5oZWFwKSkgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNQcm90b3R5
cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVh
dGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZP
OworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVzdE5hbWVk
U2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBK
U0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cit9OworCit1c2luZyBKU1Rlc3ROYW1lZFNl
dHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0NvbnN0cnVjdG9yID0gSlNET01Db25zdHJ1Y3Rv
ck5vdENvbnN0cnVjdGFibGU8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRp
ZXM+OworCisvKiBIYXNoIHRhYmxlICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhh
c2hJbmRleCBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc1RhYmxlSW5k
ZXhbNF0gPSB7CisgICAgeyAtMSwgLTEgfSwKKyAgICB7IDEsIC0xIH0sCisgICAgeyAtMSwgLTEg
fSwKKyAgICB7IDAsIC0xIH0sCit9OworCisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBK
U1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc1RhYmxlVmFsdWVzW10gPQor
eworICAgIHsgInVuZm9yZ2VhYmxlQXR0cmlidXRlIiwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwg
Q3VzdG9tQWNjZXNzb3IsIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9w
ZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVBy
b3BlcnRpZXNVbmZvcmdlYWJsZUF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0
UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KDApIH0gfSwKKyAgICB7ICJ1bmZvcmdlYWJsZU9w
ZXJhdGlvbiIsIERvbnREZWxldGUgfCBSZWFkT25seSB8IEpTQzo6RnVuY3Rpb24sIE5vSW50cmlu
c2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0TmFtZWRT
ZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNJbnN0YW5jZUZ1bmN0aW9uVW5mb3JnZWFibGVP
cGVyYXRpb24pLCAoaW50cHRyX3QpICgwKSB9IH0sCit9OworCitzdGF0aWMgY29uc3QgSGFzaFRh
YmxlIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzVGFibGUgPSB7IDIs
IDMsIHRydWUsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzVGFibGVW
YWx1ZXMsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzVGFibGVJbmRl
eCB9OwordGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQ
cm9wZXJ0aWVzQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZShKU0M6OlZNJiB2bSwg
Y29uc3QgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBVTlVTRURfUEFS
QU0odm0pOworICAgIHJldHVybiBnbG9iYWxPYmplY3QuZnVuY3Rpb25Qcm90b3R5cGUoKTsKK30K
KwordGVtcGxhdGU8PiB2b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0
aWVzQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPnByb3RvdHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM6
OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9u
dEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250
cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiVGVzdE5hbWVkU2V0dGVyV2l0
aFVuZm9yZ2FibGVQcm9wZXJ0aWVzIikpKSwgUmVhZE9ubHkgfCBEb250RW51bSk7CisgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFkT25s
eSB8IERvbnRFbnVtKTsKK30KKwordGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAi
VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzIiwgJkJhc2U6OnNfaW5mbywg
bnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3ROYW1lZFNldHRlcldp
dGhVbmZvcmdhYmxlUHJvcGVydGllc0NvbnN0cnVjdG9yKSB9OworCisvKiBIYXNoIHRhYmxlIGZv
ciBwcm90b3R5cGUgKi8KKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE5hbWVk
U2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzUHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9Cit7
CisgICAgeyAiY29uc3RydWN0b3IiLCBEb250RW51bSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90
KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3ROYW1lZFNldHRl
cldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0NvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNf
Y2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0TmFtZWRTZXR0ZXJX
aXRoVW5mb3JnYWJsZVByb3BlcnRpZXNDb25zdHJ1Y3RvcikgfSB9LAorfTsKKworY29uc3QgQ2xh
c3NJbmZvIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzUHJvdG90eXBl
OjpzX2luZm8gPSB7ICJUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNQcm90
b3R5cGUiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzUHJvdG90eXBlKSB9
OworCit2b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzUHJvdG90
eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0pOworICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
VW5mb3JnYWJsZVByb3BlcnRpZXNQcm90b3R5cGVUYWJsZVZhbHVlcywgKnRoaXMpOworfQorCitj
b25zdCBDbGFzc0luZm8gSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM6
OnNfaW5mbyA9IHsgIlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcyIsICZC
YXNlOjpzX2luZm8sICZKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc1Rh
YmxlLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVu
Zm9yZ2FibGVQcm9wZXJ0aWVzKSB9OworCitKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxl
UHJvcGVydGllczo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZjxU
ZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM+JiYgaW1wbCkKKyAgICA6IEpT
RE9NV3JhcHBlcjxUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM+KHN0cnVj
dHVyZSwgZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKQoreworfQorCit2b2lkIEpTVGVzdE5h
bWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0p
Cit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VSVChpbmhlcml0cyh2
bSwgaW5mbygpKSk7CisKK30KKworSlNPYmplY3QqIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9y
Z2FibGVQcm9wZXJ0aWVzOjpjcmVhdGVQcm90b3R5cGUoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZv
cmdhYmxlUHJvcGVydGllc1Byb3RvdHlwZTo6Y3JlYXRlKHZtLCAmZ2xvYmFsT2JqZWN0LCBKU1Rl
c3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc1Byb3RvdHlwZTo6Y3JlYXRlU3Ry
dWN0dXJlKHZtLCAmZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qub2JqZWN0UHJvdG90eXBlKCkp
KTsKK30KKworSlNPYmplY3QqIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0
aWVzOjpwcm90b3R5cGUoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQor
eworICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3Jn
YWJsZVByb3BlcnRpZXM+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCitKU1ZhbHVlIEpTVGVzdE5h
bWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0s
IGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERP
TUNvbnN0cnVjdG9yPEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQ29u
c3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2Jq
ZWN0KSk7Cit9CisKK3ZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRp
ZXM6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCit7CisgICAgSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoVW5mb3JnYWJsZVByb3BlcnRpZXMqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3RO
YW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcyo+KGNlbGwpOworICAgIHRoaXNPYmpl
Y3QtPkpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzOjp+SlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMoKTsKK30KKworYm9vbCBKU1Rlc3ROYW1l
ZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllczo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzKj4ob2JqZWN0KTsKKyAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgaWYgKEJh
c2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBz
bG90KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgSlNWYWx1ZSBwcm90byA9IHRoaXNPYmpl
Y3QtPmdldFByb3RvdHlwZURpcmVjdCgpOworICAgIGlmIChwcm90by5pc09iamVjdCgpICYmIGpz
Q2FzdDxKU09iamVjdCo+KHByb3RvKS0+aGFzUHJvcGVydHkoc3RhdGUsIHByb3BlcnR5TmFtZSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICh0aGlzT2JqZWN0LT5jbGFzc0luZm8o
KSA9PSBpbmZvKCkgJiYgIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7CisgICAgICAgIGF1dG8g
aXRlbSA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5uYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9BdG9t
aWNTdHJpbmcocHJvcGVydHlOYW1lKSk7CisgICAgICAgIGlmICghSURMRE9NU3RyaW5nOjppc051
bGxWYWx1ZShpdGVtKSkgeworICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCAw
LCB0b0pTPElETERPTVN0cmluZz4oKnN0YXRlLCBpdGVtKSk7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM6OmdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5k
ZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzKj4ob2JqZWN0KTsKKyAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgSWRl
bnRpZmllciBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7Cisg
ICAgaWYgKHRoaXNPYmplY3QtPmNsYXNzSW5mbygpID09IGluZm8oKSkgeworICAgICAgICBhdXRv
IGl0ZW0gPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkubmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvQXRv
bWljU3RyaW5nKHByb3BlcnR5TmFtZSkpOworICAgICAgICBpZiAoIUlETERPTVN0cmluZzo6aXNO
dWxsVmFsdWUoaXRlbSkpIHsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwg
MCwgdG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwgaXRlbSkpOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5
U2xvdEJ5SW5kZXgodGhpc09iamVjdCwgc3RhdGUsIGluZGV4LCBzbG90KTsKK30KKwordm9pZCBK
U1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllczo6Z2V0T3duUHJvcGVydHlO
YW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJh
eSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGll
cyo+KG9iamVjdCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOworICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhpc09iamVjdC0+d3JhcHBl
ZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSkKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQo
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgcHJvcGVydHlOYW1lKSk7CisgICAgQmFzZTo6
Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywgbW9k
ZSk7Cit9CisKK2Jvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM6
OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgcHV0UHJvcGVydHlTbG90KQor
eworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5m
b3JnYWJsZVByb3BlcnRpZXMqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CisKKyAgICBpZiAoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgp
KSB7CisgICAgICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09iamVjdCwgUHJvcGVydHlTbG90
OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSB9OworICAgICAgICBKU1ZhbHVlIHByb3Rv
dHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdCgpOworICAgICAgICBpZiAoIShw
cm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNs
b3Qoc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpKSB7CisgICAgICAgICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKKyAgICAgICAgICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCB2YWx1ZSk7Cisg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOworICAgICAg
ICAgICAgdGhpc09iamVjdC0+d3JhcHBlZCgpLnNldE5hbWVkSXRlbShwcm9wZXJ0eU5hbWVUb1N0
cmluZyhwcm9wZXJ0eU5hbWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBCYXNlOjpwdXQodGhp
c09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7Cit9
CisKK2Jvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM6OnB1dEJ5
SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgSlNW
YWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzKj4oY2VsbCk7
CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworCisg
ICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRl
eCk7CisgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6Oklu
dGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5IH07CisgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0
aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3QoKTsKKyAgICBpZiAoIShwcm90b3R5cGUuaXNP
YmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3Qoc3RhdGUsIHBy
b3BlcnR5TmFtZSwgc2xvdCkpKSB7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOworICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgdmFsdWUpOworICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIHRydWUpOworICAgICAgICB0aGlzT2JqZWN0LT53cmFwcGVkKCku
c2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFtZSksIFdURk1vdmUo
bmF0aXZlVmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJu
IEJhc2U6OnB1dEJ5SW5kZXgoY2VsbCwgc3RhdGUsIGluZGV4LCB2YWx1ZSwgc2hvdWxkVGhyb3cp
OworfQorCitib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzOjpk
ZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIHByb3BlcnR5
RGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzKj4ob2JqZWN0
KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisK
KyAgICBpZiAoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7CitzdGF0aWMgYm9vbCBpc1VuZm9y
Z2VhYmxlUHJvcGVydHlOYW1lKFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0
dXJuIHByb3BlcnR5TmFtZSA9PSAidW5mb3JnZWFibGVBdHRyaWJ1dGUiIHx8IHByb3BlcnR5TmFt
ZSA9PSAidW5mb3JnZWFibGVPcGVyYXRpb24iOworfQorCisgICAgICAgIGlmICghaXNVbmZvcmdl
YWJsZVByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgICAgICBQcm9wZXJ0eVNs
b3Qgc2xvdCB7IHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpW
TUlucXVpcnkgfTsKKyAgICAgICAgICAgIGlmICghQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRo
aXNPYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSB7CisgICAgICAgICAgICAgICAg
aWYgKCFwcm9wZXJ0eURlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7CisgICAgICAgICAgICAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHByb3BlcnR5RGVzY3Jp
cHRvci52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHRydWUpOworICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPndyYXBwZWQoKS5zZXRO
YW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgV1RGTW92ZShuYXRp
dmVWYWx1ZSkpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgUHJvcGVydHlEZXNjcmlwdG9yIG5ld1Byb3BlcnR5RGVz
Y3JpcHRvciA9IHByb3BlcnR5RGVzY3JpcHRvcjsKKyAgICBuZXdQcm9wZXJ0eURlc2NyaXB0b3Iu
c2V0Q29uZmlndXJhYmxlKHRydWUpOworICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0
eShvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIGNvbmZpZ3VyYWJsZVByb3BlcnR5RGVzY3Jp
cHRvciwgc2hvdWxkVGhyb3cpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3ROYW1lZFNl
dHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcyogSURMQXR0cmlidXRlPEpTVGVzdE5hbWVkU2V0
dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzPjo6Y2FzdChFeGVjU3RhdGUmIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCit7CisgICAgcmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0PEpT
VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzKj4oc3RhdGUudm0oKSwgSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3RO
YW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcyogSURMT3BlcmF0aW9uPEpTVGVzdE5h
bWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzPjo6Y2FzdChFeGVjU3RhdGUmIHN0YXRl
KQoreworICAgIHJldHVybiBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhV
bmZvcmdhYmxlUHJvcGVydGllcyo+KHN0YXRlLnZtKCksIHN0YXRlLnRoaXNWYWx1ZSgpKTsKK30K
KworRW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRp
ZXNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUg
PSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVy
dGllc1Byb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYg
KFVOTElLRUxZKCFwcm90b3R5cGUpKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihz
dGF0ZSwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3ROYW1l
ZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllczo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZt
KCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKK30KKworYm9vbCBzZXRKU1Rlc3ROYW1l
ZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQoreworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Rv
d25jYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzUHJvdG90eXBl
Kj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXBy
b3RvdHlwZSkpIHsKKyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQt
aW4gY29uc3RydWN0b3IKKyAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZt
KCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdE5hbWVkU2V0
dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzVW5mb3JnZWFibGVBdHRyaWJ1dGVHZXR0ZXIoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMm
IHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgYXV0byYgaW1wbCA9
IHRoaXNPYmplY3Qud3JhcHBlZCgpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUzxJRExET01T
dHJpbmc+KHN0YXRlLCBpbXBsLnVuZm9yZ2VhYmxlQXR0cmlidXRlKCkpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2Fi
bGVQcm9wZXJ0aWVzVW5mb3JnZWFibGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcz46OmdldDxqc1Rl
c3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc1VuZm9yZ2VhYmxlQXR0cmlidXRl
R2V0dGVyPigqc3RhdGUsIHRoaXNWYWx1ZSwgInVuZm9yZ2VhYmxlQXR0cmlidXRlIik7Cit9CisK
K3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZFNldHRlcldpdGhV
bmZvcmdhYmxlUHJvcGVydGllc0luc3RhbmNlRnVuY3Rpb25VbmZvcmdlYWJsZU9wZXJhdGlvbkJv
ZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRU
aGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0
YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBpbXBsLnVuZm9yZ2VhYmxlT3BlcmF0aW9uKCk7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVy
dGllc0luc3RhbmNlRnVuY3Rpb25VbmZvcmdlYWJsZU9wZXJhdGlvbihFeGVjU3RhdGUqIHN0YXRl
KQoreworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3Jn
YWJsZVByb3BlcnRpZXM+OjpjYWxsPGpzVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9w
ZXJ0aWVzSW5zdGFuY2VGdW5jdGlvblVuZm9yZ2VhYmxlT3BlcmF0aW9uQm9keT4oKnN0YXRlLCAi
dW5mb3JnZWFibGVPcGVyYXRpb24iKTsKK30KKworYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhV
bmZvcmdhYmxlUHJvcGVydGllc093bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQoreworICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOworICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9y
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5m
b3JnYWJsZVByb3BlcnRpZXNPd25lcjo6ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
PiBoYW5kbGUsIHZvaWQqIGNvbnRleHQpCit7CisgICAgYXV0byoganNUZXN0TmFtZWRTZXR0ZXJX
aXRoVW5mb3JnYWJsZVByb3BlcnRpZXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3ROYW1lZFNldHRlcldp
dGhVbmZvcmdhYmxlUHJvcGVydGllcyo+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKKyAgICBh
dXRvJiB3b3JsZCA9ICpzdGF0aWNfY2FzdDxET01XcmFwcGVyV29ybGQqPihjb250ZXh0KTsKKyAg
ICB1bmNhY2hlV3JhcHBlcih3b3JsZCwgJmpzVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQ
cm9wZXJ0aWVzLT53cmFwcGVkKCksIGpzVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9w
ZXJ0aWVzKTsKK30KKworI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKKyNpZiBQTEFURk9S
TShXSU4pCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDQ4MykKK2V4dGVybiAiQyIgeyBleHRl
cm4gdm9pZCAoKmNvbnN0IF9faWRlbnRpZmllcigiPz9fN1Rlc3ROYW1lZFNldHRlcldpdGhVbmZv
cmdhYmxlUHJvcGVydGllc0BXZWJDb3JlQEA2QkAiKVtdKSgpOyB9CisjZWxzZQorZXh0ZXJuICJD
IiB7IGV4dGVybiB2b2lkKiBfWlRWTjdXZWJDb3JlMzlUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3Jn
YWJsZVByb3BlcnRpZXNFW107IH0KKyNlbmRpZgorI2VuZGlmCisKK0pTQzo6SlNWYWx1ZSB0b0pT
TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUmVmPFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcz4mJiBpbXBs
KQoreworCisjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQorICAgIHZvaWQqIGFjdHVhbFZU
YWJsZVBvaW50ZXIgPSAqKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihpbXBsLnB0cigpKSk7Cisj
aWYgUExBVEZPUk0oV0lOKQorICAgIHZvaWQqIGV4cGVjdGVkVlRhYmxlUG9pbnRlciA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KF9faWRlbnRpZmllcigiPz9fN1Rlc3ROYW1lZFNldHRlcldpdGhV
bmZvcmdhYmxlUHJvcGVydGllc0BXZWJDb3JlQEA2QkAiKSk7CisjZWxzZQorICAgIHZvaWQqIGV4
cGVjdGVkVlRhYmxlUG9pbnRlciA9ICZfWlRWTjdXZWJDb3JlMzlUZXN0TmFtZWRTZXR0ZXJXaXRo
VW5mb3JnYWJsZVByb3BlcnRpZXNFWzJdOworI2lmIENPTVBJTEVSKENMQU5HKQorICAgIC8vIElm
IHRoaXMgZmFpbHMgVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzIGRvZXMg
bm90IGhhdmUgYSB2dGFibGUsIHNvIHlvdSBuZWVkIHRvIGFkZCB0aGUKKyAgICAvLyBJbXBsZW1l
bnRhdGlvbkxhY2tzVlRhYmxlIGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJmYWNlIGRlZmluaXRpb24K
KyAgICBzdGF0aWNfYXNzZXJ0KF9faXNfcG9seW1vcnBoaWMoVGVzdE5hbWVkU2V0dGVyV2l0aFVu
Zm9yZ2FibGVQcm9wZXJ0aWVzKSwgIlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVy
dGllcyBpcyBub3QgcG9seW1vcnBoaWMiKTsKKyNlbmRpZgorI2VuZGlmCisgICAgLy8gSWYgeW91
IGhpdCB0aGlzIGFzc2VydGlvbiB5b3UgZWl0aGVyIGhhdmUgYSB1c2UgYWZ0ZXIgZnJlZSBidWcs
IG9yCisgICAgLy8gVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzIGhhcyBz
dWJjbGFzc2VzLiBJZiBUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMgaGFz
IHN1YmNsYXNzZXMgdGhhdCBnZXQgcGFzc2VkCisgICAgLy8gdG8gdG9KUygpIHdlIGN1cnJlbnRs
eSByZXF1aXJlIFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcyB5b3UgdG8g
b3B0IG91dCBvZiBiaW5kaW5nIGhhcmRlbmluZworICAgIC8vIGJ5IGFkZGluZyB0aGUgU2tpcFZU
YWJsZVZhbGlkYXRpb24gYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2UgSURMIGRlZmluaXRpb24K
KyAgICBSRUxFQVNFX0FTU0VSVChhY3R1YWxWVGFibGVQb2ludGVyID09IGV4cGVjdGVkVlRhYmxl
UG9pbnRlcik7CisjZW5kaWYKKyAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxUZXN0TmFtZWRTZXR0
ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM+KGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7
Cit9CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9w
ZXJ0aWVzJiBpbXBsKQoreworICAgIHJldHVybiB3cmFwKHN0YXRlLCBnbG9iYWxPYmplY3QsIGlt
cGwpOworfQorCitUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMqIEpTVGVz
dE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzOjp0b1dyYXBwZWQoSlNDOjpWTSYg
dm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAoYXV0byogd3JhcHBlciA9IGpzRHlu
YW1pY0Rvd25jYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzKj4o
dm0sIHZhbHVlKSkKKyAgICAgICAgcmV0dXJuICZ3cmFwcGVyLT53cmFwcGVkKCk7CisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcy5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRl
cldpdGhVbmZvcmdhYmxlUHJvcGVydGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTMg
QEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBw
cm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmlu
ZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJK
U0RPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVBy
b3BlcnRpZXMuaCIKKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVy
dGllcyA6IHB1YmxpYyBKU0RPTVdyYXBwZXI8VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQ
cm9wZXJ0aWVzPiB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTRE9NV3JhcHBlcjxUZXN0
TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM+OworICAgIHN0YXRpYyBKU1Rlc3RO
YW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcyogY3JlYXRlKEpTQzo6U3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0TmFt
ZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM+JiYgaW1wbCkKKyAgICB7CisgICAgICAg
IEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzKiBwdHIgPSBuZXcgKE5v
dE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQ
cm9wZXJ0aWVzPihnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkpIEpTVGVzdE5hbWVkU2V0dGVyV2l0
aFVuZm9yZ2FibGVQcm9wZXJ0aWVzKHN0cnVjdHVyZSwgKmdsb2JhbE9iamVjdCwgV1RGTW92ZShp
bXBsKSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsK
KyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCog
Y3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRp
YyBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7
CisgICAgc3RhdGljIFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcyogdG9X
cmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5
TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVy
dHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2Rl
KCkpOworICAgIHN0YXRpYyBib29sIHB1dChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsK
KyAgICBzdGF0aWMgYm9vbCBwdXRCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUq
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7
CisgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNDOjpKU09iamVjdCosIEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJvcGVydHlEZXNjcmlw
dG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpT
Q2VsbCopOworCisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25z
dCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclBy
b3BlcnR5QWJzZW5jZSB8IEpTQzo6SGFzU3RhdGljUHJvcGVydHlUYWJsZSB8IEpTQzo6SW50ZXJj
ZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpT
Qzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNHZXRQcm9wZXJ0
eU5hbWVzIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7Citwcm90ZWN0ZWQ6CisgICAgSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUds
b2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM+
JiYpOworCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cit9OworCitjbGFzcyBK
U1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc093bmVyIDogcHVibGljIEpT
Qzo6V2Vha0hhbmRsZU93bmVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4
dCwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZShKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KTsKK307CisKK2lubGluZSBKU0M6Oldl
YWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3JsZCYsIFRlc3ROYW1lZFNl
dHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcyopCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzT3duZXI+IG93bmVy
OworICAgIHJldHVybiAmb3duZXIuZ2V0KCk7Cit9CisKK2lubGluZSB2b2lkKiB3cmFwcGVyS2V5
KFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcyogd3JhcHBhYmxlT2JqZWN0
KQoreworICAgIHJldHVybiB3cmFwcGFibGVPYmplY3Q7Cit9CisKK0pTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0TmFtZWRTZXR0ZXJXaXRo
VW5mb3JnYWJsZVByb3BlcnRpZXMmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3ROYW1l
ZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcyogaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRv
SlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgKmltcGwpIDogSlNDOjpqc051bGwoKTsgfQorSlNDOjpK
U1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVj
dCosIFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM+JiYpOworaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3ROYW1lZFNldHRlcldp
dGhVbmZvcmdhYmxlUHJvcGVydGllcz4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5
Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlND
Ojpqc051bGwoKTsgfQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJU
cmFpdHM8VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzPiB7CisgICAgdXNp
bmcgV3JhcHBlckNsYXNzID0gSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRp
ZXM7CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFRlc3ROYW1lZFNldHRlcldpdGhV
bmZvcmdhYmxlUHJvcGVydGllcyo7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zLmNwcAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0
aW5zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3MyBAQAorLyoKKyAgICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBm
aWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1P
RElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zLmgiCisKKyNpbmNs
dWRlICJKU0RPTUF0dHJpYnV0ZS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1
ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCisjaW5jbHVkZSAiSlNET01D
b252ZXJ0LmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUg
IkpTRE9NT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNs
dWRlIDxydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmg+CisjaW5jbHVkZSA8d3RmL0dldFB0ci5o
PgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEZ1
bmN0aW9ucworCitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0TmFtZWRT
ZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zSW5zdGFuY2VG
dW5jdGlvblVuZm9yZ2VhYmxlT3BlcmF0aW9uKEpTQzo6RXhlY1N0YXRlKik7CisKKy8vIEF0dHJp
YnV0ZXMKKworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdh
YmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5z
Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRTZXR0ZXJXaXRo
VW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zVW5mb3JnZWFibGVBdHRyaWJ1
dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7CisKK2NsYXNzIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5k
T3ZlcnJpZGVCdWlsdGluc1Byb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3Qg
eworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0M6OkpTTm9uRmluYWxPYmplY3Q7CisgICAg
c3RhdGljIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJp
ZGVCdWlsdGluc1Byb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAg
ICAgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1
aWx0aW5zUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpT
VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlu
c1Byb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9w
ZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluc1Byb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJu
IHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlND
OjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3Bl
cnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0M6OkpT
Tm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cit9OworCit1c2luZyBKU1Rlc3ROYW1lZFNldHRlcldp
dGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvciA9IEpT
RE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9y
Z2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucz47CisKKy8qIEhhc2ggdGFibGUgKi8K
Kworc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVGVzdE5hbWVkU2V0dGVy
V2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluc1RhYmxlSW5kZXhbNF0g
PSB7CisgICAgeyAtMSwgLTEgfSwKKyAgICB7IDEsIC0xIH0sCisgICAgeyAtMSwgLTEgfSwKKyAg
ICB7IDAsIC0xIH0sCit9OworCisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RO
YW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNUYWJs
ZVZhbHVlc1tdID0KK3sKKyAgICB7ICJ1bmZvcmdlYWJsZUF0dHJpYnV0ZSIsIERvbnREZWxldGUg
fCBSZWFkT25seSB8IEN1c3RvbUFjY2Vzc29yLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3Rh
dGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE5hbWVkU2V0dGVyV2l0
aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluc1VuZm9yZ2VhYmxlQXR0cmli
dXRlKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVu
Yz4oMCkgfSB9LAorICAgIHsgInVuZm9yZ2VhYmxlT3BlcmF0aW9uIiwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5IHwgSlNDOjpGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19j
YXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVy
dGllc0FuZE92ZXJyaWRlQnVpbHRpbnNJbnN0YW5jZUZ1bmN0aW9uVW5mb3JnZWFibGVPcGVyYXRp
b24pLCAoaW50cHRyX3QpICgwKSB9IH0sCit9OworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpT
VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlu
c1RhYmxlID0geyAyLCAzLCB0cnVlLCBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJv
cGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNUYWJsZVZhbHVlcywgSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zVGFibGVJbmRleCB9Owor
dGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0
aWVzQW5kT3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUo
SlNDOjpWTSYgdm0sIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LmZ1bmN0aW9uUHJv
dG90eXBlKCk7Cit9CisKK3RlbXBsYXRlPD4gdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZv
cmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6
ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQorewor
ICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3ROYW1l
ZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnM6OnByb3Rv
dHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0p
OworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFs
U3RyaW5nKCZ2bSwgU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9y
Z2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucyIpKSksIFJlYWRPbmx5IHwgRG9udEVu
dW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJl
cigwKSwgUmVhZE9ubHkgfCBEb250RW51bSk7Cit9CisKK3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJ
bmZvIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVC
dWlsdGluc0NvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3Jn
YWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0
ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZv
cmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvcikgfTsKKworLyog
SGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovCisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1
ZSBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVp
bHRpbnNQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KK3sKKyAgICB7ICJjb25zdHJ1Y3RvciIsIERv
bnRFbnVtLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90
OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVz
QW5kT3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQ
dXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5m
b3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3IpIH0gfSwKK307
CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVy
dGllc0FuZE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3ROYW1lZFNl
dHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGUi
LCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpT
VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlu
c1Byb3RvdHlwZSkgfTsKKwordm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJv
cGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmVpZnlTdGF0aWNQcm9w
ZXJ0aWVzKHZtLCBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92
ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGVUYWJsZVZhbHVlcywgKnRoaXMpOworfQorCitjb25zdCBD
bGFzc0luZm8gSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVy
cmlkZUJ1aWx0aW5zOjpzX2luZm8gPSB7ICJUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVBy
b3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zIiwgJkJhc2U6OnNfaW5mbywgJkpTVGVzdE5hbWVk
U2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluc1RhYmxlLCBu
dWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2Fi
bGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucykgfTsKKworSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zOjpKU1Rlc3ROYW1lZFNl
dHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnMoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0TmFt
ZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zPiYmIGlt
cGwpCisgICAgOiBKU0RPTVdyYXBwZXI8VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9w
ZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucz4oc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIFdURk1v
dmUoaW1wbCkpCit7Cit9CisKK3ZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVBy
b3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7Cisg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5m
bygpKSk7CisKK30KKworSlNPYmplY3QqIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQ
cm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluczo6Y3JlYXRlUHJvdG90eXBlKFZNJiB2bSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zUHJvdG90eXBl
OjpjcmVhdGUodm0sICZnbG9iYWxPYmplY3QsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2Fi
bGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluc1Byb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJl
KHZtLCAmZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qub2JqZWN0UHJvdG90eXBlKCkpKTsKK30K
KworSlNPYmplY3QqIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5k
T3ZlcnJpZGVCdWlsdGluczo6cHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdE5hbWVkU2V0
dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucz4odm0sIGdsb2Jh
bE9iamVjdCk7Cit9CisKK0pTVmFsdWUgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVBy
b3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0
cnVjdG9yPEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJp
ZGVCdWlsdGluc0NvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVj
dCo+KGdsb2JhbE9iamVjdCkpOworfQorCit2b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9y
Z2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluczo6ZGVzdHJveShKU0M6OkpTQ2VsbCog
Y2VsbCkKK3sKKyAgICBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0Fu
ZE92ZXJyaWRlQnVpbHRpbnMqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3ROYW1lZFNl
dHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnMqPihjZWxsKTsK
KyAgICB0aGlzT2JqZWN0LT5KU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGll
c0FuZE92ZXJyaWRlQnVpbHRpbnM6On5KU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJv
cGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnMoKTsKK30KKworYm9vbCBKU1Rlc3ROYW1lZFNldHRl
cldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnM6OmdldE93blByb3Bl
cnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgYXV0byogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92
ZXJyaWRlQnVpbHRpbnMqPihvYmplY3QpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBpZiAodGhpc09iamVjdC0+Y2xhc3NJbmZvKCkgPT0g
aW5mbygpICYmICFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkgeworICAgICAgICBhdXRvIGl0ZW0g
PSB0aGlzT2JqZWN0LT53cmFwcGVkKCkubmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvQXRvbWljU3Ry
aW5nKHByb3BlcnR5TmFtZSkpOworICAgICAgICBpZiAoIUlETERPTVN0cmluZzo6aXNOdWxsVmFs
dWUoaXRlbSkpIHsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgMCwgdG9K
UzxJRExET01TdHJpbmc+KCpzdGF0ZSwgaXRlbSkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlz
T2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90KSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9y
Z2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluczo6Z2V0T3duUHJvcGVydHlTbG90QnlJ
bmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwg
UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5z
Kj4ob2JqZWN0KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CisgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0
YXRlLCBpbmRleCk7CisgICAgaWYgKHRoaXNPYmplY3QtPmNsYXNzSW5mbygpID09IGluZm8oKSkg
eworICAgICAgICBhdXRvIGl0ZW0gPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkubmFtZWRJdGVtKHBy
b3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZSkpOworICAgICAgICBpZiAoIUlE
TERPTVN0cmluZzo6aXNOdWxsVmFsdWUoaXRlbSkpIHsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFs
dWUodGhpc09iamVjdCwgMCwgdG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwgaXRlbSkpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEJhc2U6
OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpc09iamVjdCwgc3RhdGUsIGluZGV4LCBzbG90
KTsKK30KKwordm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0Fu
ZE92ZXJyaWRlQnVpbHRpbnM6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1l
cmF0aW9uTW9kZSBtb2RlKQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0
TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zKj4o
b2JqZWN0KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CisgICAgZm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCku
c3VwcG9ydGVkUHJvcGVydHlOYW1lcygpKQorICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICBCYXNlOjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsK
K30KKworYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92
ZXJyaWRlQnVpbHRpbnM6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgcHV0
UHJvcGVydHlTbG90KQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zKj4oY2Vs
bCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwor
CisgICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkgeworICAgICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKKyAgICAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHZhbHVlKTsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKKyAgICAgICAgdGhpc09i
amVjdC0+d3JhcHBlZCgpLnNldE5hbWVkSXRlbShwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0
eU5hbWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIHJldHVybiBCYXNlOjpwdXQodGhpc09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7Cit9CisKK2Jvb2wgSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zOjpwdXRCeUluZGV4KEpT
Q2VsbCogY2VsbCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFs
dWUsIGJvb2wpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNl
dHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnMqPihjZWxsKTsK
KyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisKKyAg
ICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4
KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgp
KTsKKyAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwg
dmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CisgICAg
dGhpc09iamVjdC0+d3JhcHBlZCgpLnNldE5hbWVkSXRlbShwcm9wZXJ0eU5hbWVUb1N0cmluZyhw
cm9wZXJ0eU5hbWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVy
cmlkZUJ1aWx0aW5zOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3Rh
dGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2Ny
aXB0b3ImIHByb3BlcnR5RGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9w
ZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucyo+KG9iamVjdCk7CisgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworCisgICAgaWYgKCFwcm9wZXJ0eU5hbWUu
aXNTeW1ib2woKSkgeworc3RhdGljIGJvb2wgaXNVbmZvcmdlYWJsZVByb3BlcnR5TmFtZShQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBwcm9wZXJ0eU5hbWUgPT0gInVu
Zm9yZ2VhYmxlQXR0cmlidXRlIiB8fCBwcm9wZXJ0eU5hbWUgPT0gInVuZm9yZ2VhYmxlT3BlcmF0
aW9uIjsKK30KKworICAgICAgICBpZiAoIWlzVW5mb3JnZWFibGVQcm9wZXJ0eU5hbWUocHJvcGVy
dHlOYW1lKSkgeworICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eURlc2NyaXB0b3IuaXNEYXRhRGVz
Y3JpcHRvcigpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOworICAgICAg
ICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHBy
b3BlcnR5RGVzY3JpcHRvci52YWx1ZSgpKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgdHJ1ZSk7CisgICAgICAgICAgICB0aGlzT2JqZWN0LT53cmFwcGVkKCku
c2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFtZSksIFdURk1vdmUo
bmF0aXZlVmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
fQorCisgICAgUHJvcGVydHlEZXNjcmlwdG9yIG5ld1Byb3BlcnR5RGVzY3JpcHRvciA9IHByb3Bl
cnR5RGVzY3JpcHRvcjsKKyAgICBuZXdQcm9wZXJ0eURlc2NyaXB0b3Iuc2V0Q29uZmlndXJhYmxl
KHRydWUpOworICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIHN0YXRl
LCBwcm9wZXJ0eU5hbWUsIGNvbmZpZ3VyYWJsZVByb3BlcnR5RGVzY3JpcHRvciwgc2hvdWxkVGhy
b3cpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdh
YmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnMqIElETEF0dHJpYnV0ZTxKU1Rlc3ROYW1l
ZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnM+OjpjYXN0
KEV4ZWNTdGF0ZSYgc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSkKK3sKKyAgICByZXR1
cm4ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3Bl
cnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zKj4oc3RhdGUudm0oKSwgSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rlc3ROYW1lZFNldHRlcldpdGhV
bmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnMqIElETE9wZXJhdGlvbjxKU1Rl
c3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnM+
OjpjYXN0KEV4ZWNTdGF0ZSYgc3RhdGUpCit7CisgICAgcmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0
PEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWls
dGlucyo+KHN0YXRlLnZtKCksIHN0YXRlLnRoaXNWYWx1ZSgpKTsKK30KKworRW5jb2RlZEpTVmFs
dWUganNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1
aWx0aW5zQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byogcHJvdG90
eXBlID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVBy
b3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5k
T3ZlcnJpZGVCdWlsdGluczo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCksIHByb3RvdHlwZS0+
Z2xvYmFsT2JqZWN0KCkpKTsKK30KKworYm9vbCBzZXRKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZv
cmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFt
aWNEb3duY2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92
ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgeworICAgICAgICB0aHJvd1ZNVHlwZUVy
cm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgorICAgIHJldHVybiBwcm90b3R5
cGUtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1
Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOworfQorCitzdGF0aWMgaW5saW5l
IEpTVmFsdWUganNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVy
cmlkZUJ1aWx0aW5zVW5mb3JnZWFibGVBdHRyaWJ1dGVHZXR0ZXIoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0
aW5zJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIGF1dG8mIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlM8SURM
RE9NU3RyaW5nPihzdGF0ZSwgaW1wbC51bmZvcmdlYWJsZUF0dHJpYnV0ZSgpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZFNldHRlcldpdGhVbmZv
cmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNVbmZvcmdlYWJsZUF0dHJpYnV0ZShF
eGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
K3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2Fi
bGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucz46OmdldDxqc1Rlc3ROYW1lZFNldHRlcldp
dGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNVbmZvcmdlYWJsZUF0dHJp
YnV0ZUdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJ1bmZvcmdlYWJsZUF0dHJpYnV0ZSIpOwor
fQorCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRTZXR0ZXJX
aXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zSW5zdGFuY2VGdW5jdGlv
blVuZm9yZ2VhYmxlT3BlcmF0aW9uQm9keShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIHR5cGVuYW1l
IElETE9wZXJhdGlvbjxKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0Fu
ZE92ZXJyaWRlQnVpbHRpbnM+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKKyAgICBpbXBsLnVuZm9yZ2VhYmxlT3BlcmF0aW9uKCk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRl
QnVpbHRpbnNJbnN0YW5jZUZ1bmN0aW9uVW5mb3JnZWFibGVPcGVyYXRpb24oRXhlY1N0YXRlKiBz
dGF0ZSkKK3sKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVu
Zm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucz46OmNhbGw8anNUZXN0TmFtZWRT
ZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zSW5zdGFuY2VG
dW5jdGlvblVuZm9yZ2VhYmxlT3BlcmF0aW9uQm9keT4oKnN0YXRlLCAidW5mb3JnZWFibGVPcGVy
YXRpb24iKTsKK30KKworYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVy
dGllc0FuZE92ZXJyaWRlQnVpbHRpbnNPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3sKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKKyAgICBVTlVTRURfUEFSQU0odmlz
aXRvcik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0
aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluc093bmVyOjpmaW5hbGl6ZShK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4dCkKK3sKKyAgICBh
dXRvKiBqc1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRl
QnVpbHRpbnMgPSBzdGF0aWNfY2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJv
cGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnMqPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7Cisg
ICAgYXV0byYgd29ybGQgPSAqc3RhdGljX2Nhc3Q8RE9NV3JhcHBlcldvcmxkKj4oY29udGV4dCk7
CisgICAgdW5jYWNoZVdyYXBwZXIod29ybGQsICZqc1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdh
YmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnMtPndyYXBwZWQoKSwganNUZXN0TmFtZWRT
ZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zKTsKK30KKwor
I2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKKyNpZiBQTEFURk9STShXSU4pCisjcHJhZ21h
IHdhcm5pbmcoZGlzYWJsZTogNDQ4MykKK2V4dGVybiAiQyIgeyBleHRlcm4gdm9pZCAoKmNvbnN0
IF9faWRlbnRpZmllcigiPz9fN1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGll
c0FuZE92ZXJyaWRlQnVpbHRpbnNAV2ViQ29yZUBANkJAIilbXSkoKTsgfQorI2Vsc2UKK2V4dGVy
biAiQyIgeyBleHRlcm4gdm9pZCogX1pUVk43V2ViQ29yZTU4VGVzdE5hbWVkU2V0dGVyV2l0aFVu
Zm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluc0VbXTsgfQorI2VuZGlmCisjZW5k
aWYKKworSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9y
Z2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucz4mJiBpbXBsKQoreworCisjaWYgRU5B
QkxFKEJJTkRJTkdfSU5URUdSSVRZKQorICAgIHZvaWQqIGFjdHVhbFZUYWJsZVBvaW50ZXIgPSAq
KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihpbXBsLnB0cigpKSk7CisjaWYgUExBVEZPUk0oV0lO
KQorICAgIHZvaWQqIGV4cGVjdGVkVlRhYmxlUG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KF9faWRlbnRpZmllcigiPz9fN1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVy
dGllc0FuZE92ZXJyaWRlQnVpbHRpbnNAV2ViQ29yZUBANkJAIikpOworI2Vsc2UKKyAgICB2b2lk
KiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSAmX1pUVk43V2ViQ29yZTU4VGVzdE5hbWVkU2V0dGVy
V2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluc0VbMl07CisjaWYgQ09N
UElMRVIoQ0xBTkcpCisgICAgLy8gSWYgdGhpcyBmYWlscyBUZXN0TmFtZWRTZXR0ZXJXaXRoVW5m
b3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zIGRvZXMgbm90IGhhdmUgYSB2dGFi
bGUsIHNvIHlvdSBuZWVkIHRvIGFkZCB0aGUKKyAgICAvLyBJbXBsZW1lbnRhdGlvbkxhY2tzVlRh
YmxlIGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJmYWNlIGRlZmluaXRpb24KKyAgICBzdGF0aWNfYXNz
ZXJ0KF9faXNfcG9seW1vcnBoaWMoVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0
aWVzQW5kT3ZlcnJpZGVCdWlsdGlucyksICJUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVBy
b3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zIGlzIG5vdCBwb2x5bW9ycGhpYyIpOworI2VuZGlm
CisjZW5kaWYKKyAgICAvLyBJZiB5b3UgaGl0IHRoaXMgYXNzZXJ0aW9uIHlvdSBlaXRoZXIgaGF2
ZSBhIHVzZSBhZnRlciBmcmVlIGJ1Zywgb3IKKyAgICAvLyBUZXN0TmFtZWRTZXR0ZXJXaXRoVW5m
b3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zIGhhcyBzdWJjbGFzc2VzLiBJZiBU
ZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5z
IGhhcyBzdWJjbGFzc2VzIHRoYXQgZ2V0IHBhc3NlZAorICAgIC8vIHRvIHRvSlMoKSB3ZSBjdXJy
ZW50bHkgcmVxdWlyZSBUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRP
dmVycmlkZUJ1aWx0aW5zIHlvdSB0byBvcHQgb3V0IG9mIGJpbmRpbmcgaGFyZGVuaW5nCisgICAg
Ly8gYnkgYWRkaW5nIHRoZSBTa2lwVlRhYmxlVmFsaWRhdGlvbiBhdHRyaWJ1dGUgdG8gdGhlIGlu
dGVyZmFjZSBJREwgZGVmaW5pdGlvbgorICAgIFJFTEVBU0VfQVNTRVJUKGFjdHVhbFZUYWJsZVBv
aW50ZXIgPT0gZXhwZWN0ZWRWVGFibGVQb2ludGVyKTsKKyNlbmRpZgorICAgIHJldHVybiBjcmVh
dGVXcmFwcGVyPFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJy
aWRlQnVpbHRpbnM+KGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7Cit9CisKK0pTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJp
ZGVCdWlsdGlucyYgaW1wbCkKK3sKKyAgICByZXR1cm4gd3JhcChzdGF0ZSwgZ2xvYmFsT2JqZWN0
LCBpbXBsKTsKK30KKworVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5k
T3ZlcnJpZGVCdWlsdGlucyogSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRp
ZXNBbmRPdmVycmlkZUJ1aWx0aW5zOjp0b1dyYXBwZWQoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKK3sKKyAgICBpZiAoYXV0byogd3JhcHBlciA9IGpzRHluYW1pY0Rvd25jYXN0PEpT
VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlu
cyo+KHZtLCB2YWx1ZSkpCisgICAgICAgIHJldHVybiAmd3JhcHBlci0+d3JhcHBlZCgpOworICAg
IHJldHVybiBudWxscHRyOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNB
bmRPdmVycmlkZUJ1aWx0aW5zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0
aWVzQW5kT3ZlcnJpZGVCdWlsdGlucy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxl
UHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDkzIEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAg
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiSlNET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2Fi
bGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucy5oIgorI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEpTVGVzdE5hbWVkU2V0
dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucyA6IHB1YmxpYyBK
U0RPTVdyYXBwZXI8VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3Zl
cnJpZGVCdWlsdGlucz4geworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0RPTVdyYXBwZXI8
VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlu
cz47CisgICAgc3RhdGljIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVz
QW5kT3ZlcnJpZGVCdWlsdGlucyogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRoVW5m
b3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zPiYmIGltcGwpCisgICAgeworICAg
ICAgICBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRl
QnVpbHRpbnMqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zPihnbG9i
YWxPYmplY3QtPnZtKCkuaGVhcCkpIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9w
ZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucyhzdHJ1Y3R1cmUsICpnbG9iYWxPYmplY3QsIFdURk1v
dmUoaW1wbCkpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0o
KSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNPYmpl
Y3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKKyAgICBz
dGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVj
dCYpOworICAgIHN0YXRpYyBUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNB
bmRPdmVycmlkZUJ1aWx0aW5zKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Cisg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6
RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwor
ICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2Rl
ID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGljIGJvb2wgcHV0KEpTQzo6SlND
ZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBK
U0M6OlB1dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDOjpK
U0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpKU1Zh
bHVlLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0
eShKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgY29u
c3QgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CisKKyAgICBERUNMQVJFX0lORk87CisKKyAg
ICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29u
c3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6OkdldE93blBy
b3BlcnR5U2xvdElzSW1wdXJlIHwgSlNDOjpIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlIHwgSlNDOjpJ
bnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJv
IHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc0dldFBy
b3BlcnR5TmFtZXMgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKK3Byb3RlY3RlZDoKKyAgICBKU1Rl
c3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnMo
SlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRTZXR0ZXJX
aXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zPiYmKTsKKworICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKKworY2xhc3MgSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zT3duZXIgOiBwdWJs
aWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgYm9vbCBpc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBj
b250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJik7CisgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKEpT
Qzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpOworfTsKKworaW5saW5lIEpT
Qzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxkJiwgVGVzdE5h
bWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucyopCit7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2Fi
bGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluc093bmVyPiBvd25lcjsKKyAgICByZXR1cm4g
Jm93bmVyLmdldCgpOworfQorCitpbmxpbmUgdm9pZCogd3JhcHBlcktleShUZXN0TmFtZWRTZXR0
ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zKiB3cmFwcGFibGVP
YmplY3QpCit7CisgICAgcmV0dXJuIHdyYXBwYWJsZU9iamVjdDsKK30KKworSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3ROYW1lZFNldHRl
cldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnMmKTsKK2lubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0Fu
ZE92ZXJyaWRlQnVpbHRpbnMqIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKHN0YXRlLCBnbG9i
YWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTTmV3
bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdE5h
bWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucz4mJik7
CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VGVzdE5hbWVkU2V0
dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucz4mJiBpbXBsKSB7
IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBs
LnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQorCit0ZW1wbGF0ZTw+IHN0cnVj
dCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2Fi
bGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucz4geworICAgIHVzaW5nIFdyYXBwZXJDbGFz
cyA9IEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVC
dWlsdGluczsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gVGVzdE5hbWVkU2V0dGVy
V2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucyo7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkocmV2aXNpb24gMjE3NzY0KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE5NzIsNiArMTk3Miw2OSBAQCB2b2lkIEpTVGVzdE9iajo6Z2V0T3du
UHJvcGVydHlOYW1lcyhKU09iCiAgICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2Jq
ZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgRW5j
b2RlZEpTVmFsdWUgY2FsbEpTVGVzdE9iajEoRXhlY1N0YXRlKiBzdGF0ZSkKK3sKKyAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgYXV0byogY2FzdGVk
VGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihzdGF0ZS0+anNDYWxsZWUoKSk7CisgICAgQVNTRVJU
KGNhc3RlZFRoaXMpOworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Cisg
ICAgYXV0byBwYXJhbSA9IGNvbnZlcnQ8SURMTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CisgICAgaW1wbC5sZWdhY3lDYWxsZXJOYW1lZChXVEZNb3ZlKHBhcmFtKSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworc3RhdGlj
IGlubGluZSBFbmNvZGVkSlNWYWx1ZSBjYWxsSlNUZXN0T2JqMihFeGVjU3RhdGUqIHN0YXRlKQor
eworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBh
dXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KHN0YXRlLT5qc0NhbGxlZSgpKTsK
KyAgICBBU1NFUlQoY2FzdGVkVGhpcyk7CisgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKKyAgICBhdXRvIHBhcmFtID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwg
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dG9KUzxJRExMb25nPihpbXBsLmxlZ2FjeUNhbGxlck9wZXJhdGlvbkZyb21CaW5kaW5ncyhXVEZN
b3ZlKHBhcmFtKSkpKTsKK30KKworc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBjYWxsSlNU
ZXN0T2JqMyhFeGVjU3RhdGUqIHN0YXRlKQoreworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwor
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVz
dE9iaio+KHN0YXRlLT5qc0NhbGxlZSgpKTsKKyAgICBBU1NFUlQoY2FzdGVkVGhpcyk7CisgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBpbXBsLmxlZ2FjeUNhbGxl
ck9wZXJhdGlvbkZyb21CaW5kaW5ncygpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEpTVGVz
dE9iaihFeGVjU3RhdGUqIHN0YXRlKQoreworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKKyAgICBzaXplX3QgYXJnc0NvdW50ID0gc3RkOjptaW48c2l6ZV90
PigxLCBzdGF0ZS0+YXJndW1lbnRDb3VudCgpKTsKKyAgICBpZiAoYXJnc0NvdW50ID09IDApIHsK
KyAgICAgICAgcmV0dXJuIGNhbGxKU1Rlc3RPYmozKHN0YXRlKTsKKyAgICB9CisgICAgaWYgKGFy
Z3NDb3VudCA9PSAxKSB7CisgICAgICAgIEpTVmFsdWUgZGlzdGluZ3Vpc2hpbmdBcmcgPSBzdGF0
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgICAgIGlmIChkaXN0aW5ndWlzaGluZ0FyZy5p
c051bWJlcigpKQorICAgICAgICAgICAgcmV0dXJuIGNhbGxKU1Rlc3RPYmoxKHN0YXRlKTsKKyAg
ICAgICAgcmV0dXJuIGNhbGxKU1Rlc3RPYmoyKHN0YXRlKTsKKyAgICB9CisgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworfQorCitDYWxsVHlwZSBKU1Rlc3RP
Ymo6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKK3sKKyAgICBjYWxs
RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjYWxsSlNUZXN0T2JqOworICAgIHJldHVybiBDYWxsVHlw
ZTo6SG9zdDsKK30KKwogdGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0T2JqKiBJRExBdHRyaWJ1dGU8
SlNUZXN0T2JqPjo6Y2FzdChFeGVjU3RhdGUmIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUpCiB7CiAgICAgcmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE9iaio+KHN0YXRlLnZt
KCksIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKQEAgLTc3OTQsNjkgKzc4NTcsNiBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgcmV0dXJuIElETE9w
ZXJhdGlvbjxKU1Rlc3RPYmo+OjpjYWxsPGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVG9TdHJp
bmdCb2R5Pigqc3RhdGUsICJ0b1N0cmluZyIpOwogfQogCi1zdGF0aWMgaW5saW5lIEVuY29kZWRK
U1ZhbHVlIGNhbGxKU1Rlc3RPYmoxKEV4ZWNTdGF0ZSogc3RhdGUpCi17Ci0gICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8qIGNhc3RlZFRoaXMg
PSBqc0Nhc3Q8SlNUZXN0T2JqKj4oc3RhdGUtPmpzQ2FsbGVlKCkpOwotICAgIEFTU0VSVChjYXN0
ZWRUaGlzKTsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGF1
dG8gcGFyYW0gPSBjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwotICAgIGltcGwubGVnYWN5Q2FsbGVyTmFtZWQoV1RGTW92ZShwYXJhbSkpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgRW5jb2RlZEpTVmFsdWUgY2FsbEpTVGVzdE9iajIoRXhlY1N0YXRlKiBzdGF0ZSkKLXsKLSAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byog
Y2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihzdGF0ZS0+anNDYWxsZWUoKSk7Ci0gICAg
QVNTRVJUKGNhc3RlZFRoaXMpOwotICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7Ci0gICAgYXV0byBwYXJhbSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRl
LT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlM8
SURMTG9uZz4oaW1wbC5sZWdhY3lDYWxsZXJPcGVyYXRpb25Gcm9tQmluZGluZ3MoV1RGTW92ZShw
YXJhbSkpKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY2FsbEpTVGVzdE9i
ajMoRXhlY1N0YXRlKiBzdGF0ZSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7Ci0gICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoq
PihzdGF0ZS0+anNDYWxsZWUoKSk7Ci0gICAgQVNTRVJUKGNhc3RlZFRoaXMpOwotICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgaW1wbC5sZWdhY3lDYWxsZXJPcGVy
YXRpb25Gcm9tQmluZGluZ3MoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxKU1Rlc3RPYmoo
RXhlY1N0YXRlKiBzdGF0ZSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7Ci0gICAgc2l6ZV90IGFyZ3NDb3VudCA9IHN0ZDo6bWluPHNpemVfdD4oMSwg
c3RhdGUtPmFyZ3VtZW50Q291bnQoKSk7Ci0gICAgaWYgKGFyZ3NDb3VudCA9PSAwKSB7Ci0gICAg
ICAgIHJldHVybiBjYWxsSlNUZXN0T2JqMyhzdGF0ZSk7Ci0gICAgfQotICAgIGlmIChhcmdzQ291
bnQgPT0gMSkgewotICAgICAgICBKU1ZhbHVlIGRpc3Rpbmd1aXNoaW5nQXJnID0gc3RhdGUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApOwotICAgICAgICBpZiAoZGlzdGluZ3Vpc2hpbmdBcmcuaXNOdW1i
ZXIoKSkKLSAgICAgICAgICAgIHJldHVybiBjYWxsSlNUZXN0T2JqMShzdGF0ZSk7Ci0gICAgICAg
IHJldHVybiBjYWxsSlNUZXN0T2JqMihzdGF0ZSk7Ci0gICAgfQotICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKLX0KLQotQ2FsbFR5cGUgSlNUZXN0T2JqOjpn
ZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCi17Ci0gICAgY2FsbERhdGEu
bmF0aXZlLmZ1bmN0aW9uID0gY2FsbEpTVGVzdE9iajsKLSAgICByZXR1cm4gQ2FsbFR5cGU6Okhv
c3Q7Ci19Ci0KIEpTQzo6SlNPYmplY3QqIEpTVGVzdE9iajo6c2VyaWFsaXplKEV4ZWNTdGF0ZSog
c3RhdGUsIEpTVGVzdE9iaiogdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKIHsK
ICAgICBhdXRvJiB2bSA9IHN0YXRlLT52bSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAkocmV2aXNpb24gMjE3NzY0
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgVGVz
dE9iaiogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwogICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9p
ZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51bWVy
YXRpb25Nb2RlKCkpOwogICAgIHN0YXRpYyBKU0M6OkNhbGxUeXBlIGdldENhbGxEYXRhKEpTQzo6
SlNDZWxsKiwgSlNDOjpDYWxsRGF0YSYpOwogCiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6
OkpTQ2VsbCopOwpAQCAtNTQsNyArNTUsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBKU0M6
OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBl
SW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9k
ZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOwogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0
Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICAgICBz
dGF0aWMgSlNDOjpKU09iamVjdCogc2VyaWFsaXplKEpTQzo6RXhlY1N0YXRlKiwgSlNUZXN0T2Jq
KiB0aGlzT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmKTsKICAgICBtdXRhYmxlIEpTQzo6V3JpdGVC
YXJyaWVyPEpTQzo6VW5rbm93bj4gbV9jYWNoZWRBdHRyaWJ1dGUxOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0T3ZlcnJpZGVCdWlsdGlucy5oCShyZXZpc2lvbiAyMTc3NjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgVGVzdE92ZXJy
aWRlQnVpbHRpbnMqIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKICAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3Rh
dGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgc3Rh
dGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6
OkVudW1lcmF0aW9uTW9kZSgpKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxs
Kik7CiAKICAgICBERUNMQVJFX0lORk87CkBAIC01MCw3ICs1MSw2IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpK
U09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6
RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CiAgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9i
amVjdCopOwogcHVibGljOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmUgfCBKU0M6OkludGVyY2VwdHNHZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8
IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxl
RGVjbGFyYXRpb24uaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHls
ZURlY2xhcmF0aW9uLmlkbAkocmV2aXNpb24gMjE3NzY0KQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlRGVjbGFyYXRpb24uaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxMCArMjAsMTAg
QEAKIAogWwogICAgIEN1c3RvbUVudW1lcmF0ZVByb3BlcnR5LAorICAgIEN1c3RvbUdldE93blBy
b3BlcnR5U2xvdEFuZERlc2NyaXB0b3IsCiAgICAgQ3VzdG9tTmFtZWRTZXR0ZXIsCiAgICAgRXhw
b3J0TWFjcm89V0VCQ09SRV9FWFBPUlQsCiAgICAgR2VuZXJhdGVJc1JlYWNoYWJsZSwKLSAgICBK
U0N1c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2NyaXB0b3IsCiAgICAgSlNDdXN0b21IZWFk
ZXIsCiAgICAgSlNDdXN0b21NYXJrRnVuY3Rpb24sCiAgICAgU2tpcFZUYWJsZVZhbGlkYXRpb24s
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRE9NU3RyaW5nTWFwLmlkbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vRE9NU3RyaW5nTWFwLmlkbAkocmV2aXNpb24gMjE3NzY0KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL0RPTVN0cmluZ01hcC5pZGwJKHdvcmtpbmcgY29weSkKQEAg
LTI0LDE2ICsyNCwxMiBAQAogICovCiAKIFsKLSAgICBDdXN0b21OYW1lZFNldHRlciwKICAgICBH
ZW5lcmF0ZUlzUmVhY2hhYmxlPUltcGxFbGVtZW50Um9vdCwKICAgICBPdmVycmlkZUJ1aWx0aW5z
LAogICAgIFNraXBWVGFibGVWYWxpZGF0aW9uLAogXSBpbnRlcmZhY2UgRE9NU3RyaW5nTWFwIHsK
ICAgICBnZXR0ZXIgRE9NU3RyaW5nIChET01TdHJpbmcgbmFtZSk7Ci0KLSAgICAvLyBGSVhNRTog
QWRkIHN1cHBvcnQgZm9yIHRoZSBuYW1lZCBzZXR0ZXIgc3BlY2lhbC4KLSAgICAvLyBbQ0VSZWFj
dGlvbnNdIHNldHRlciB2b2lkIChET01TdHJpbmcgbmFtZSwgRE9NU3RyaW5nIHZhbHVlKTsKLQor
ICAgIFtDRVJlYWN0aW9ucywgTWF5VGhyb3dFeGNlcHRpb25dIHNldHRlciB2b2lkIChET01TdHJp
bmcgbmFtZSwgRE9NU3RyaW5nIHZhbHVlKTsKICAgICBbQ0VSZWFjdGlvbnNdIGRlbGV0ZXIgdm9p
ZCAoRE9NU3RyaW5nIG5hbWUpOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RhdGFz
ZXRET01TdHJpbmdNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9EYXRh
c2V0RE9NU3RyaW5nTWFwLmNwcAkocmV2aXNpb24gMjE3NzY0KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL0RhdGFzZXRET01TdHJpbmdNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTcsNyArMjE3
LDcgQEAgU3RyaW5nIERhdGFzZXRET01TdHJpbmdNYXA6Om5hbWVkSXRlbShjbwogICAgIHJldHVy
biBpdGVtKG5hbWUpLnZhbHVlX29yKFN0cmluZyB7IH0pOwogfQogCi1FeGNlcHRpb25Pcjx2b2lk
PiBEYXRhc2V0RE9NU3RyaW5nTWFwOjpzZXRJdGVtKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKK0V4Y2VwdGlvbk9yPHZvaWQ+IERhdGFzZXRET01TdHJpbmdNYXA6OnNl
dE5hbWVkSXRlbShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAg
ICAgaWYgKCFpc1ZhbGlkUHJvcGVydHlOYW1lKG5hbWUpKQogICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgU1lOVEFYX0VSUiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RhdGFzZXRET01T
dHJpbmdNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRGF0YXNldERPTVN0
cmluZ01hcC5oCShyZXZpc2lvbiAyMTc3NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRGF0YXNl
dERPTVN0cmluZ01hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoK
ICAgICBWZWN0b3I8U3RyaW5nPiBzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkgY29uc3Q7CiAKICAg
ICBTdHJpbmcgbmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3Q7Ci0gICAg
RXhjZXB0aW9uT3I8dm9pZD4gc2V0SXRlbShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpOworICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldE5hbWVkSXRlbShjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwogICAgIGJvb2wgZGVsZXRlTmFtZWRQcm9w
ZXJ0eShjb25zdCBTdHJpbmcmIG5hbWUpOwogCiAgICAgRWxlbWVudCYgZWxlbWVudCgpIHsgcmV0
dXJuIG1fZWxlbWVudDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaWRsCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmlkbAkocmV2aXNpb24gMjE3NzY0KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxMiAr
MjAsMTIgQEAKIAogWwogICAgIEN1c3RvbUlzUmVhY2hhYmxlLAorICAgIEN1c3RvbVB1c2hFdmVu
dEhhbmRsZXJTY29wZSwKICAgICBDdXN0b21Ub0pTT2JqZWN0LAogICAgIERPTUpJVCwKICAgICBF
eHBvcnRNYWNybz1XRUJDT1JFX0VYUE9SVCwKICAgICBKU0N1c3RvbUhlYWRlciwKICAgICBKU0N1
c3RvbU1hcmtGdW5jdGlvbiwKLSAgICBKU0N1c3RvbVB1c2hFdmVudEhhbmRsZXJTY29wZSwKIF0g
aW50ZXJmYWNlIE5vZGUgOiBFdmVudFRhcmdldCB7CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQg
RUxFTUVOVF9OT0RFID0gMTsKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBBVFRSSUJVVEVfTk9E
RSA9IDI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmlkbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmlkbAko
cmV2aXNpb24gMjE3NzY0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVu
dC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTIwLDggKzIwLDggQEAKIAogWwogICAgIEN1c3RvbUNh
bGwsCisgICAgQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvciwKICAgICBDdXN0
b21OYW1lZFNldHRlciwKLSAgICBKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2NyaXB0
b3IsCiBdIGludGVyZmFjZSBIVE1MQXBwbGV0RWxlbWVudCA6IEhUTUxFbGVtZW50IHsKICAgICBb
UmVmbGVjdF0gYXR0cmlidXRlIERPTVN0cmluZyBhbGlnbjsKICAgICBbUmVmbGVjdF0gYXR0cmli
dXRlIERPTVN0cmluZyBhbHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9u
LmNwcAkocmV2aXNpb24gMjE3NzY0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVj
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OSw2ICsxNzksMTkgQEAgY29uc3QgVmVjdG9y
PEF0b21pY1N0cmluZz4mIEhUTUxDb2xsZWN0aQogICAgIHJldHVybiBtX25hbWVkRWxlbWVudENh
Y2hlLT5wcm9wZXJ0eU5hbWVzKCk7CiB9CiAKK2Jvb2wgSFRNTENvbGxlY3Rpb246OmlzU3VwcG9y
dGVkUHJvcGVydHlOYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICB1cGRhdGVOYW1lZEVs
ZW1lbnRDYWNoZSgpOworICAgIEFTU0VSVChtX25hbWVkRWxlbWVudENhY2hlKTsKKyAgICAKKyAg
ICBpZiAobV9uYW1lZEVsZW1lbnRDYWNoZS0+ZmluZEVsZW1lbnRzV2l0aElkKG5hbWUpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobV9uYW1lZEVsZW1lbnRDYWNoZS0+ZmluZEVsZW1l
bnRzV2l0aE5hbWUobmFtZSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZh
bHNlOworfQorCiB2b2lkIEhUTUxDb2xsZWN0aW9uOjp1cGRhdGVOYW1lZEVsZW1lbnRDYWNoZSgp
IGNvbnN0CiB7CiAgICAgaWYgKGhhc05hbWVkRWxlbWVudENhY2hlKCkpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAyMTc3NjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcg
QEAgcHVibGljOgogICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4qIGZpbmRFbGVtZW50c1dpdGhJ
ZChjb25zdCBBdG9taWNTdHJpbmcmIGlkKSBjb25zdDsKICAgICBjb25zdCBWZWN0b3I8RWxlbWVu
dCo+KiBmaW5kRWxlbWVudHNXaXRoTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0
OwogICAgIGNvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+JiBwcm9wZXJ0eU5hbWVzKCkgY29uc3Qg
eyByZXR1cm4gbV9wcm9wZXJ0eU5hbWVzOyB9Ci0KKyAgICAKICAgICB2b2lkIGFwcGVuZFRvSWRD
YWNoZShjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBFbGVtZW50Jik7CiAgICAgdm9pZCBhcHBlbmRU
b05hbWVDYWNoZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIEVsZW1lbnQmKTsKICAgICB2b2lk
IGRpZFBvcHVsYXRlKCk7CkBAIC02OSw2ICs2OSw3IEBAIHB1YmxpYzoKICAgICBFbGVtZW50KiBp
dGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdCBvdmVycmlkZSA9IDA7IC8vIFRpZ2h0ZW4gcmV0dXJu
IHR5cGUgZnJvbSBOb2RlTGlzdDo6aXRlbSgpLgogICAgIHZpcnR1YWwgRWxlbWVudCogbmFtZWRJ
dGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QgPSAwOwogICAgIGNvbnN0IFZlY3Rv
cjxBdG9taWNTdHJpbmc+JiBzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCk7CisgICAgYm9vbCBpc1N1
cHBvcnRlZFByb3BlcnR5TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpOwogCiAgICAgLy8gTm9uLURP
TSBBUEkKICAgICBWZWN0b3I8UmVmPEVsZW1lbnQ+PiBuYW1lZEl0ZW1zKGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50
LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmlkbAko
cmV2aXNpb24gMjE3NzY0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5pZGwJ
KHdvcmtpbmcgY29weSkKQEAgLTIwLDggKzIwLDggQEAKIAogWwogICAgIEN1c3RvbUNvbnN0cnVj
dG9yKCksCisgICAgQ3VzdG9tUHVzaEV2ZW50SGFuZGxlclNjb3BlLAogICAgIEV4cG9ydE1hY3Jv
PVdFQkNPUkVfRVhQT1JULAotICAgIEpTQ3VzdG9tUHVzaEV2ZW50SGFuZGxlclNjb3BlLAogICAg
IEpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCwKIF0gaW50ZXJmYWNlIEhUTUxFbGVtZW50IDogRWxl
bWVudCB7CiAgICAgLy8gTWV0YWRhdGEgYXR0cmlidXRlcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEVtYmVkRWxlbWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRW1iZWRFbGVtZW50LmlkbAkocmV2aXNpb24gMjE3NzY0KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjAsOCAr
MjAsOCBAQAogCiBbCiAgICAgQ3VzdG9tQ2FsbCwKKyAgICBDdXN0b21HZXRPd25Qcm9wZXJ0eVNs
b3RBbmREZXNjcmlwdG9yLAogICAgIEN1c3RvbU5hbWVkU2V0dGVyLAotICAgIEpTQ3VzdG9tR2V0
T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvciwKIF0gaW50ZXJmYWNlIEhUTUxFbWJlZEVsZW1l
bnQgOiBIVE1MRWxlbWVudCB7CiAgICAgW1JlZmxlY3RdIGF0dHJpYnV0ZSBET01TdHJpbmcgYWxp
Z247CiAgICAgW1JlZmxlY3RdIGF0dHJpYnV0ZSBET01TdHJpbmcgaGVpZ2h0OwpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5pZGwJKHJldmlzaW9uIDIxNzc2NCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuaWRsCSh3b3JraW5nIGNv
cHkpCkBAIC0yMCw4ICsyMCw4IEBACiAKIFsKICAgICBDdXN0b21DYWxsLAotICAgIEN1c3RvbU5h
bWVkU2V0dGVyLAotICAgIEpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvciwK
KyAgICBDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yLAorICAgIEN1c3RvbU5h
bWVkU2V0dGVyCiBdIGludGVyZmFjZSBIVE1MT2JqZWN0RWxlbWVudCA6IEhUTUxFbGVtZW50IHsK
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgSFRNTEZvcm1FbGVtZW50IGZvcm07CiAgICAgW1JlZmxl
Y3RdIGF0dHJpYnV0ZSBET01TdHJpbmcgY29kZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE9wdGlvbnNDb2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaAkocmV2aXNpb24gMjE3NzY0KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NiArMzEsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxPcHRpb25zQ29sbGVj
dGlvbiBmaW5hbCA6IHB1YmxpYyBDYWNoZWRIVE1MQ29sbGVjdGlvbjxIVE1MT3B0aW9uc0NvbGxl
Y3Rpb24sIENvbGxlY3Rpb25UeXBlVHJhaXRzPFNlbGVjdE9wdGlvbnM+Ojp0cmF2ZXJzYWxUeXBl
PiB7CiBwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IENhY2hlZEhUTUxDb2xsZWN0aW9uPEhUTUxP
cHRpb25zQ29sbGVjdGlvbiwgQ29sbGVjdGlvblR5cGVUcmFpdHM8U2VsZWN0T3B0aW9ucz46OnRy
YXZlcnNhbFR5cGU+OworCiAgICAgc3RhdGljIFJlZjxIVE1MT3B0aW9uc0NvbGxlY3Rpb24+IGNy
ZWF0ZShIVE1MU2VsZWN0RWxlbWVudCYsIENvbGxlY3Rpb25UeXBlKTsKIAogICAgIEhUTUxTZWxl
Y3RFbGVtZW50JiBzZWxlY3RFbGVtZW50KCkgeyByZXR1cm4gZG93bmNhc3Q8SFRNTFNlbGVjdEVs
ZW1lbnQ+KG93bmVyTm9kZSgpKTsgfQpAQCAtMzgsNyArNDAsOSBAQCBwdWJsaWM6CiAKICAgICBI
VE1MT3B0aW9uRWxlbWVudCogaXRlbSh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0IGZpbmFsOwogICAg
IEhUTUxPcHRpb25FbGVtZW50KiBuYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBj
b25zdCBmaW5hbDsKLQorICAgIAorICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldEl0ZW0odW5zaWdu
ZWQgaW5kZXgsIEhUTUxPcHRpb25FbGVtZW50Kik7CisgICAgCiAgICAgdXNpbmcgT3B0aW9uT3JP
cHRHcm91cEVsZW1lbnQgPSBWYXJpYW50PFJlZlB0cjxIVE1MT3B0aW9uRWxlbWVudD4sIFJlZlB0
cjxIVE1MT3B0R3JvdXBFbGVtZW50Pj47CiAgICAgdXNpbmcgSFRNTEVsZW1lbnRPckludCA9IFZh
cmlhbnQ8UmVmUHRyPEhUTUxFbGVtZW50PiwgaW50PjsKICAgICBXRUJDT1JFX0VYUE9SVCBFeGNl
cHRpb25Pcjx2b2lkPiBhZGQoY29uc3QgT3B0aW9uT3JPcHRHcm91cEVsZW1lbnQmLCBjb25zdCBz
dGQ6Om9wdGlvbmFsPEhUTUxFbGVtZW50T3JJbnQ+JiBiZWZvcmUpOwpAQCAtNTgsMTIgKzYyLDE3
IEBAIHByaXZhdGU6CiAKIGlubGluZSBIVE1MT3B0aW9uRWxlbWVudCogSFRNTE9wdGlvbnNDb2xs
ZWN0aW9uOjppdGVtKHVuc2lnbmVkIG9mZnNldCkgY29uc3QKIHsKLSAgICByZXR1cm4gZG93bmNh
c3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KENhY2hlZEhUTUxDb2xsZWN0aW9uPEhUTUxPcHRpb25zQ29s
bGVjdGlvbiwgQ29sbGVjdGlvblR5cGVUcmFpdHM8U2VsZWN0T3B0aW9ucz46OnRyYXZlcnNhbFR5
cGU+OjppdGVtKG9mZnNldCkpOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVu
dD4oQmFzZTo6aXRlbShvZmZzZXQpKTsKIH0KIAogaW5saW5lIEhUTUxPcHRpb25FbGVtZW50KiBI
VE1MT3B0aW9uc0NvbGxlY3Rpb246Om5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PihDYWNoZWRI
VE1MQ29sbGVjdGlvbjxIVE1MT3B0aW9uc0NvbGxlY3Rpb24sIENvbGxlY3Rpb25UeXBlVHJhaXRz
PFNlbGVjdE9wdGlvbnM+Ojp0cmF2ZXJzYWxUeXBlPjo6bmFtZWRJdGVtKG5hbWUpKTsKKyAgICBy
ZXR1cm4gZG93bmNhc3Q8SFRNTE9wdGlvbkVsZW1lbnQ+KEJhc2U6Om5hbWVkSXRlbShuYW1lKSk7
Cit9CisKK2lubGluZSBFeGNlcHRpb25Pcjx2b2lkPiBIVE1MT3B0aW9uc0NvbGxlY3Rpb246OnNl
dEl0ZW0odW5zaWduZWQgaW5kZXgsIEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50KQor
eworICAgIHJldHVybiBzZWxlY3RFbGVtZW50KCkuc2V0SXRlbShpbmRleCwgb3B0aW9uRWxlbWVu
dCk7CiB9CiAKIGlubGluZSBib29sIEhUTUxPcHRpb25zQ29sbGVjdGlvbjo6ZWxlbWVudE1hdGNo
ZXMoRWxlbWVudCYgZWxlbWVudCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE9wdGlvbnNDb2xsZWN0aW9uLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxPcHRpb25zQ29sbGVjdGlvbi5pZGwJKHJldmlzaW9uIDIxNzc2NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmlkbAkod29ya2luZyBjb3B5KQpAQCAt
MTksMTMgKzE5LDEyIEBACiAgKi8KIAogWwotICAgIEN1c3RvbUluZGV4ZWRTZXR0ZXIsCiAgICAg
RXhwb3J0VG9XcmFwcGVkRnVuY3Rpb24sCiAgICAgR2VuZXJhdGVJc1JlYWNoYWJsZT1JbXBsT3du
ZXJOb2RlUm9vdCwKICAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCiBdIGludGVyZmFjZSBI
VE1MT3B0aW9uc0NvbGxlY3Rpb24gOiBIVE1MQ29sbGVjdGlvbiB7CiAgICAgW0NFUmVhY3Rpb25z
LCBTZXR0ZXJNYXlUaHJvd0V4Y2VwdGlvbl0gYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3Ro
OwotICAgIC8vIFtDRVJlYWN0aW9uc10gc2V0dGVyIHZvaWQgKHVuc2lnbmVkIGxvbmcgaW5kZXgs
IEhUTUxPcHRpb25FbGVtZW50PyBvcHRpb24pOworICAgIFtDRVJlYWN0aW9uc10gc2V0dGVyIHZv
aWQgKHVuc2lnbmVkIGxvbmcgaW5kZXgsIEhUTUxPcHRpb25FbGVtZW50PyBvcHRpb24pOwogICAg
IFtDRVJlYWN0aW9ucywgTWF5VGhyb3dFeGNlcHRpb25dIHZvaWQgYWRkKChIVE1MT3B0aW9uRWxl
bWVudCBvciBIVE1MT3B0R3JvdXBFbGVtZW50KSBlbGVtZW50LCBvcHRpb25hbCAoSFRNTEVsZW1l
bnQgb3IgbG9uZyk/IGJlZm9yZSA9IG51bGwpOwogICAgIFtDRVJlYWN0aW9uc10gdm9pZCByZW1v
dmUobG9uZyBpbmRleCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVs
ZW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVs
ZW1lbnQuaWRsCShyZXZpc2lvbiAyMTc3NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxT
ZWxlY3RFbGVtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMTksMzUgKzE5LDMxIEBACiAgKi8K
IAogWwotICAgIEN1c3RvbUluZGV4ZWRTZXR0ZXIsCiAgICAgRXhwb3J0TWFjcm89V0VCQ09SRV9F
WFBPUlQsCiAgICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAogXSBpbnRlcmZhY2UgSFRNTFNl
bGVjdEVsZW1lbnQgOiBIVE1MRWxlbWVudCB7Ci0gICAgW1JlZmxlY3RdIGF0dHJpYnV0ZSBib29s
ZWFuIGF1dG9mb2N1czsKLSAgICBbUmVmbGVjdF0gYXR0cmlidXRlIGJvb2xlYW4gZGlzYWJsZWQ7
CisgICAgW0NFUmVhY3Rpb25zXSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGF1dG9jb21wbGV0ZTsKKyAg
ICBbQ0VSZWFjdGlvbnMsIFJlZmxlY3RdIGF0dHJpYnV0ZSBib29sZWFuIGF1dG9mb2N1czsKKyAg
ICBbQ0VSZWFjdGlvbnMsIFJlZmxlY3RdIGF0dHJpYnV0ZSBib29sZWFuIGRpc2FibGVkOwogICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBIVE1MRm9ybUVsZW1lbnQ/IGZvcm07Ci0gICAgYXR0cmlidXRl
IGJvb2xlYW4gbXVsdGlwbGU7Ci0gICAgW1JlZmxlY3RdIGF0dHJpYnV0ZSBET01TdHJpbmcgbmFt
ZTsKLSAgICBbUmVmbGVjdF0gYXR0cmlidXRlIGJvb2xlYW4gcmVxdWlyZWQ7Ci0KLSAgICBhdHRy
aWJ1dGUgdW5zaWduZWQgbG9uZyBzaXplOworICAgIFtDRVJlYWN0aW9uc10gYXR0cmlidXRlIGJv
b2xlYW4gbXVsdGlwbGU7CisgICAgW0NFUmVhY3Rpb25zLCBSZWZsZWN0XSBhdHRyaWJ1dGUgRE9N
U3RyaW5nIG5hbWU7CisgICAgW0NFUmVhY3Rpb25zLCBSZWZsZWN0XSBhdHRyaWJ1dGUgYm9vbGVh
biByZXF1aXJlZDsKKyAgICBbQ0VSZWFjdGlvbnNdIGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIHNp
emU7CiAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHR5cGU7CiAKLSAgICByZWFk
b25seSBhdHRyaWJ1dGUgSFRNTE9wdGlvbnNDb2xsZWN0aW9uIG9wdGlvbnM7CisgICAgLyogW1Nh
bWVPYmplY3RdICovIHJlYWRvbmx5IGF0dHJpYnV0ZSBIVE1MT3B0aW9uc0NvbGxlY3Rpb24gb3B0
aW9uczsKICAgICBbQ0VSZWFjdGlvbnMsIFNldHRlck1heVRocm93RXhjZXB0aW9uXSBhdHRyaWJ1
dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7Ci0KLSAgICBnZXR0ZXIgSFRNTE9wdGlvbkVsZW1lbnQ/
IGl0ZW0odW5zaWduZWQgbG9uZyBpbmRleCk7CisgICAgZ2V0dGVyIEhUTUxPcHRpb25FbGVtZW50
PyBpdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgpOyAvLyBGSVhNRTogVGhlIHNwZWMgaGFzIHRoaXMg
cmV0dXJuaW5nIEVsZW1lbnQ/LgogICAgIEhUTUxPcHRpb25FbGVtZW50PyBuYW1lZEl0ZW0oRE9N
U3RyaW5nIG5hbWUpOwotCiAgICAgW0NFUmVhY3Rpb25zLCBNYXlUaHJvd0V4Y2VwdGlvbl0gdm9p
ZCBhZGQoKEhUTUxPcHRpb25FbGVtZW50IG9yIEhUTUxPcHRHcm91cEVsZW1lbnQpIGVsZW1lbnQs
IG9wdGlvbmFsIChIVE1MRWxlbWVudCBvciBsb25nKT8gYmVmb3JlID0gbnVsbCk7Ci0KLSAgICBb
TWF5VGhyb3dFeGNlcHRpb25dIHZvaWQgcmVtb3ZlKCk7IC8vIENoaWxkTm9kZSBvdmVybG9hZAor
ICAgIFtDRVJlYWN0aW9ucywgTWF5VGhyb3dFeGNlcHRpb25dIHZvaWQgcmVtb3ZlKCk7IC8vIENo
aWxkTm9kZSBvdmVybG9hZAogICAgIFtDRVJlYWN0aW9uc10gdm9pZCByZW1vdmUobG9uZyBpbmRl
eCk7CisgICAgW0NFUmVhY3Rpb25zXSBzZXR0ZXIgdm9pZCAodW5zaWduZWQgbG9uZyBpbmRleCwg
SFRNTE9wdGlvbkVsZW1lbnQ/IG9wdGlvbik7CiAKLSAgICByZWFkb25seSBhdHRyaWJ1dGUgSFRN
TENvbGxlY3Rpb24gc2VsZWN0ZWRPcHRpb25zOworICAgIC8qIFtTYW1lT2JqZWN0XSAqLyByZWFk
b25seSBhdHRyaWJ1dGUgSFRNTENvbGxlY3Rpb24gc2VsZWN0ZWRPcHRpb25zOwogICAgIGF0dHJp
YnV0ZSBsb25nIHNlbGVjdGVkSW5kZXg7Ci0KICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIHZhbHVl
OwogCiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gd2lsbFZhbGlkYXRlOwpAQCAtNTgs
NiArNTQsNCBAQAogICAgIHZvaWQgc2V0Q3VzdG9tVmFsaWRpdHkoRE9NU3RyaW5nIGVycm9yKTsK
IAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBOb2RlTGlzdCBsYWJlbHM7Ci0KLSAgICBhdHRyaWJ1
dGUgRE9NU3RyaW5nIGF1dG9jb21wbGV0ZTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L0RPTVdpbmRvdy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5k
b3cuaWRsCShyZXZpc2lvbiAyMTc3NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDExIEBAIHR5cGVkZWYgVVNWU3RyaW5n
IENTU09NU3RyaW5nOwogCiBbCiAgICAgQ2hlY2tTZWN1cml0eSwKKyAgICBDdXN0b21EZWZpbmVP
d25Qcm9wZXJ0eSwKICAgICBDdXN0b21EZWxldGVQcm9wZXJ0eSwKICAgICBDdXN0b21FbnVtZXJh
dGVQcm9wZXJ0eSwKICAgICBDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QsCisgICAgQ3VzdG9tR2V0
T3duUHJvcGVydHlTbG90QnlJbmRleCwKICAgICBDdXN0b21HZXRQcm90b3R5cGUsCiAgICAgQ3Vz
dG9tUHJldmVudEV4dGVuc2lvbnMsCiAgICAgQ3VzdG9tUHJveHlUb0pTT2JqZWN0LApAQCAtNDEs
NyArNDMsNiBAQCB0eXBlZGVmIFVTVlN0cmluZyBDU1NPTVN0cmluZzsKICAgICBJbnRlcmZhY2VO
YW1lPVdpbmRvdywKICAgICBJc0ltbXV0YWJsZVByb3RvdHlwZUV4b3RpY09iamVjdCwKICAgICBJ
c0ltbXV0YWJsZVByb3RvdHlwZUV4b3RpY09iamVjdE9uUHJvdG90eXBlLAotICAgIEpTQ3VzdG9t
RGVmaW5lT3duUHJvcGVydHksCiAgICAgSlNDdXN0b21NYXJrRnVuY3Rpb24sCiAgICAgSlNDdXN0
b21Ub05hdGl2ZU9iamVjdCwKICAgICBKU0xlZ2FjeVBhcmVudD1KU0RPTVdpbmRvd0Jhc2UsCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0xvY2F0aW9uLmlkbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0xvY2F0aW9uLmlkbAkocmV2aXNpb24gMjE3NzY0KQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9Mb2NhdGlvbi5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI4LDE4ICsyOCwx
OCBAQAogCiBbCiAgICAgQ2hlY2tTZWN1cml0eSwKKyAgICBDdXN0b21EZWZpbmVPd25Qcm9wZXJ0
eSwKKyAgICBDdXN0b21EZWZpbmVPd25Qcm9wZXJ0eU9uUHJvdG90eXBlLAogICAgIEN1c3RvbURl
bGV0ZVByb3BlcnR5LAogICAgIEN1c3RvbUVudW1lcmF0ZVByb3BlcnR5LAorICAgIEN1c3RvbUdl
dE93blByb3BlcnR5U2xvdEFuZERlc2NyaXB0b3IsCiAgICAgQ3VzdG9tR2V0UHJvdG90eXBlLAor
ICAgIEN1c3RvbU5hbWVkR2V0dGVyT25Qcm90b3R5cGUsCiAgICAgQ3VzdG9tTmFtZWRTZXR0ZXIs
CiAgICAgQ3VzdG9tUHJldmVudEV4dGVuc2lvbnMsCiAgICAgQ3VzdG9tVG9TdHJpbmdOYW1lLAog
ICAgIEdlbmVyYXRlSXNSZWFjaGFibGU9SW1wbEZyYW1lLAogICAgIElzSW1tdXRhYmxlUHJvdG90
eXBlRXhvdGljT2JqZWN0LAotICAgIEpTQ3VzdG9tRGVmaW5lT3duUHJvcGVydHksCi0gICAgSlND
dXN0b21EZWZpbmVPd25Qcm9wZXJ0eU9uUHJvdG90eXBlLAotICAgIEpTQ3VzdG9tR2V0T3duUHJv
cGVydHlTbG90QW5kRGVzY3JpcHRvciwKLSAgICBKU0N1c3RvbU5hbWVkR2V0dGVyT25Qcm90b3R5
cGUsCiAgICAgVW5mb3JnZWFibGUsCiBdIGludGVyZmFjZSBMb2NhdGlvbiB7CiAgICAgW1NldHRl
ckNhbGxXaXRoPUFjdGl2ZVdpbmRvdyZGaXJzdFdpbmRvdywgRG9Ob3RDaGVja1NlY3VyaXR5T25T
ZXR0ZXJdIHN0cmluZ2lmaWVyIGF0dHJpYnV0ZSBVU1ZTdHJpbmcgaHJlZjsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5pZGwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlLmlk
bAkocmV2aXNpb24gMjE3NzY0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyTWVzc2FnZUhh
bmRsZXJzTmFtZXNwYWNlLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICov
CiAKIFsKLSAgICBKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2NyaXB0b3IsCi0gICAg
Q29uZGl0aW9uYWw9VVNFUl9NRVNTQUdFX0hBTkRMRVJTCisgICAgQ29uZGl0aW9uYWw9VVNFUl9N
RVNTQUdFX0hBTkRMRVJTLAorICAgIEN1c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2NyaXB0
b3IsCiBdIGludGVyZmFjZSBVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlIHsKIH07CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2UuaWRsCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZS5pZGwJKHJldmlzaW9uIDIxNzc2NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI1LDE0ICsy
NSwxMyBAQAogCiBbCiAgICAgQ3VzdG9tRW51bWVyYXRlUHJvcGVydHksCi0gICAgQ3VzdG9tTmFt
ZWRTZXR0ZXIsCiAgICAgR2VuZXJhdGVJc1JlYWNoYWJsZT1JbXBsRnJhbWUsCiAgICAgU2tpcFZU
YWJsZVZhbGlkYXRpb24sCiBdIGludGVyZmFjZSBTdG9yYWdlIHsKICAgICBbR2V0dGVyTWF5VGhy
b3dFeGNlcHRpb25dIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKICAg
ICBbTWF5VGhyb3dFeGNlcHRpb25dIERPTVN0cmluZz8ga2V5KHVuc2lnbmVkIGxvbmcgaW5kZXgp
OwogICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gZ2V0dGVyIERPTVN0cmluZz8gZ2V0SXRlbShET01T
dHJpbmcga2V5KTsKLSAgICBbTWF5VGhyb3dFeGNlcHRpb25dIC8qc2V0dGVyKi8gdm9pZCBzZXRJ
dGVtKERPTVN0cmluZyBrZXksIERPTVN0cmluZyBkYXRhKTsKKyAgICBbTWF5VGhyb3dFeGNlcHRp
b25dIHNldHRlciB2b2lkIHNldEl0ZW0oRE9NU3RyaW5nIGtleSwgRE9NU3RyaW5nIGRhdGEpOwog
ICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gZGVsZXRlciB2b2lkIHJlbW92ZUl0ZW0oRE9NU3RyaW5n
IGtleSk7CiAgICAgW01heVRocm93RXhjZXB0aW9uXSB2b2lkIGNsZWFyKCk7CiB9OwpJbmRleDog
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxv
ZwkocmV2aXNpb24gMjE3NzY0KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTctMDYtMDMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0
Lm9yZz4KKworICAgICAgICBDYW4ndCB1c2UgT2JqZWN0LmRlZmluZVByb3BlcnR5KCkgdG8gYWRk
IGFuIGl0ZW0gdG8gYSBET01TdHJpbmdNYXAgb3IgU3RvcmFnZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyNjg3CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBqcy9kb20vbGVnYWN5LXBsYXRmb3JtLW9i
amVjdC1kZWZpbmVPd25Qcm9wZXJ0eS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpz
L2RvbS9sZWdhY3ktcGxhdGZvcm0tb2JqZWN0LWRlZmluZU93blByb3BlcnR5Lmh0bWw6IEFkZGVk
LgorICAgICAgICBOZXcgdGVzdHMgZm9yIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBvbiBTdG9yYWdl
IGFuZCBET01TdHJpbmdNYXAuCisKKyAgICAgICAgKiBqcy9kb20vbmFtZWQtcHJvcGVydHktZGVs
ZXRlci5odG1sOgorICAgICAgICBGaXggdGVzdCB3aGljaCB3YXMgZGVsZXRpbmcgdGhlIHdyb25n
IHByb3BlcnR5LiBUaGlzIGRvZXNuJ3QgY2hhbmdlIHRoZSByZXN1bHQsCisgICAgICAgIGJ1dCBp
cyBub3cgYWN0dWFsbHkgdGVzdGluZyB0aGUgdGhpbmcgaXQgbWVhbnQgdG8uCisKKyAgICAgICAg
KiBzdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL2RlbGV0ZS1kZWZpbmVwcm9wZXJ0eS1y
ZW1vdmFsLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBzdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxz
dG9yYWdlL2RlbGV0ZS1kZWZpbmVwcm9wZXJ0eS1yZW1vdmFsLmh0bWw6CisgICAgICAgIENvbnZl
cnQgdG8gdGVzdGhhcm5lc3MuanMgYW5kIHNob3cgdGhhdCB0aGUgcmVzdWx0cyBhcmUgbm93IGNv
cnJlY3QuCisKIDIwMTctMDYtMDMgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAog
ICAgICAgICBJbXBsZW1lbnQgRE9NTWF0cml4J3MgZnJvbUZsb2F0MzJBcnJheSAvIGZyb21GbG9h
dDY0QXJyYXkgJiB0b0Zsb2F0MzJBcnJheSAvIHRvRmxvYXQ2NEFycmF5CkluZGV4OiBMYXlvdXRU
ZXN0cy9qcy9kb20vbGVnYWN5LXBsYXRmb3JtLW9iamVjdC1kZWZpbmVPd25Qcm9wZXJ0eS1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvZG9tL2xlZ2FjeS1wbGF0Zm9y
bS1vYmplY3QtZGVmaW5lT3duUHJvcGVydHktZXhwZWN0ZWQudHh0CShub25leGlzdGVudCkKKysr
IExheW91dFRlc3RzL2pzL2RvbS9sZWdhY3ktcGxhdGZvcm0tb2JqZWN0LWRlZmluZU93blByb3Bl
cnR5LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2IEBACisKK1BBU1Mg
VGVzdCB0aGF0IHRoZSBzZXR0aW5nIGEgbm9uLWV4aXN0aW5nIG5hbWVkIHByb3BlcnR5IHdpdGgg
T2JqZWN0LmRlZmluZVByb3BlcnR5IGNyZWF0ZXMgdGhlIHByb3BlcnR5IChbT3ZlcnJpZGVCdWls
dGluc10gc3BlY2lmaWVkKS4gCitQQVNTIFRlc3QgdGhhdCB0aGUgc2V0dGluZyBhIG5vbi1leGlz
dGluZyBpbmRleGVkIHByb3BlcnR5IHdpdGggT2JqZWN0LmRlZmluZVByb3BlcnR5IGNyZWF0ZXMg
dGhlIHByb3BlcnR5IChbT3ZlcnJpZGVCdWlsdGluc10gc3BlY2lmaWVkKS4gCitQQVNTIFRlc3Qg
dGhhdCB0aGUgc2V0dGluZyBhbiBleGlzdGluZyBuYW1lZCBwcm9wZXJ0eSB3aXRoIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eSByZXBsYWNlcyB0aGUgdmFsdWUgKFtPdmVycmlkZUJ1aWx0aW5zXSBzcGVj
aWZpZWQpLiAKK1BBU1MgVGVzdCB0aGF0IHRoZSBzZXR0aW5nIGFuIGV4aXN0aW5nIGluZGV4ZWQg
cHJvcGVydHkgd2l0aCBPYmplY3QuZGVmaW5lUHJvcGVydHkgcmVwbGFjZXMgdGhlIHZhbHVlIChb
T3ZlcnJpZGVCdWlsdGluc10gc3BlY2lmaWVkKS4gCitQQVNTIFRlc3QgdGhhdCB0aGUgc2V0dGlu
ZyBhIG5vbi1leGlzdGluZyBidXQgaW52YWxpZCBuYW1lZCBwcm9wZXJ0eSB3aXRoIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eSB0aHJvd3MgKFtPdmVycmlkZUJ1aWx0aW5zXSBzcGVjaWZpZWQpLiAKK1BB
U1MgVGVzdCB0aGF0IHRoZSBzZXR0aW5nIGEgbm9uLWRhdGEgZGVzY3JpcHRvciBwcm9wZXJ0eSB3
aXRoIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBkb2VzIG5vdCBzZXQgYW55dGhpbmcgKFtPdmVycmlk
ZUJ1aWx0aW5zXSBzcGVjaWZpZWQpLiAKK1BBU1MgVGVzdCB0aGF0IHRoZSBzZXR0aW5nIGEgbmFt
ZWQgcHJvcGVydHkgd2l0aCBPYmplY3QuZGVmaW5lUHJvcGVydHkgdGhhdCBzaGFkb3dzIGFuIGV4
aXN0aW5nIHByb3RvdHlwZSB2YWx1ZSBzdGlsbCBjcmVhdGVzIHRoZSBpdGVtIChbT3ZlcnJpZGVC
dWlsdGluc10gc3BlY2lmaWVkKS4gCitQQVNTIFRlc3QgdGhhdCB0aGUgc2V0dGluZyBhIG5vbi1l
eGlzdGluZyBuYW1lZCBwcm9wZXJ0eSB3aXRoIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBjcmVhdGVz
IHRoZSBwcm9wZXJ0eSAoW092ZXJyaWRlQnVpbHRpbnNdIG5vdCBzcGVjaWZpZWQpLiAKK1BBU1Mg
VGVzdCB0aGF0IHRoZSBzZXR0aW5nIGEgbm9uLWV4aXN0aW5nIGluZGV4ZWQgcHJvcGVydHkgd2l0
aCBPYmplY3QuZGVmaW5lUHJvcGVydHkgY3JlYXRlcyB0aGUgcHJvcGVydHkgKFtPdmVycmlkZUJ1
aWx0aW5zXSBub3Qgc3BlY2lmaWVkKS4gCitQQVNTIFRlc3QgdGhhdCB0aGUgc2V0dGluZyBhbiBl
eGlzdGluZyBuYW1lZCBwcm9wZXJ0eSB3aXRoIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSByZXBsYWNl
cyB0aGUgdmFsdWUgKFtPdmVycmlkZUJ1aWx0aW5zXSBub3Qgc3BlY2lmaWVkKS4gCitQQVNTIFRl
c3QgdGhhdCB0aGUgc2V0dGluZyBhbiBleGlzdGluZyBpbmRleGVkIHByb3BlcnR5IHdpdGggT2Jq
ZWN0LmRlZmluZVByb3BlcnR5IHJlcGxhY2VzIHRoZSB2YWx1ZSAoW092ZXJyaWRlQnVpbHRpbnNd
IG5vdCBzcGVjaWZpZWQpLiAKK1BBU1MgVGVzdCB0aGF0IHRoZSBzZXR0aW5nIGEgbm9uLWRhdGEg
ZGVzY3JpcHRvciBwcm9wZXJ0eSB3aXRoIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBkb2VzIG5vdCBz
ZXQgYW55dGhpbmcgKFtPdmVycmlkZUJ1aWx0aW5zXSBub3Qgc3BlY2lmaWVkKS4gCitQQVNTIFRl
c3QgdGhhdCB0aGUgc2V0dGluZyBhIG5hbWVkIHByb3BlcnR5IHdpdGggT2JqZWN0LmRlZmluZVBy
b3BlcnR5IHRoYXQgc2hhZG93cyBhbiBleGlzdGluZyBwcm90b3R5cGUgdmFsdWUgc3RpbGwgY3Jl
YXRlcyB0aGUgaXRlbSAoW092ZXJyaWRlQnVpbHRpbnNdIG5vdCBzcGVjaWZpZWQpLiAKK1BBU1Mg
VGVzdCB0aGF0IHRoZSB0cnlpbmcgdG8gc2V0IGEgbmFtZWQgcHJvcGVydHksIG1hdGNoaW5nIGEg
YnVpbHRpbiBwcm9wZXJ0eSBuYW1lLCB3aXRoIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBkb2VzIG5v
dGhpbmcgKFtPdmVycmlkZUJ1aWx0aW5zXSBub3Qgc3BlY2lmaWVkKS4gCisKSW5kZXg6IExheW91
dFRlc3RzL2pzL2RvbS9sZWdhY3ktcGxhdGZvcm0tb2JqZWN0LWRlZmluZU93blByb3BlcnR5Lmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvZG9tL2xlZ2FjeS1wbGF0Zm9ybS1vYmpl
Y3QtZGVmaW5lT3duUHJvcGVydHkuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9q
cy9kb20vbGVnYWN5LXBsYXRmb3JtLW9iamVjdC1kZWZpbmVPd25Qcm9wZXJ0eS5odG1sCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjA5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhl
YWQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9z
Y3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9y
dC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CisgICAgLy8gVG8gdGVz
dCBhIG5hbWVkIHByb3BlcnR5IHNldHRlciB3aXRoIFtPdmVycmlkZUJ1aWx0aW5zXSBzcGVjaWZp
ZWQsIHdlIHVzZSBET01TdHJpbmdNYXAgdmlhIGVsZW1lbnQuZGF0YXNldC4KKyAgICB0ZXN0KCgp
ID0+IHsKKyAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYi
KTsKKyAgICAgICAgZWxlbWVudC5kYXRhc2V0WyJhIl0gPSAidmFsdWUxIjsKKyAgICAgICAgZWxl
bWVudC5kYXRhc2V0WyJiIl0gPSAidmFsdWUyIjsKKyAgICAgICAgCisgICAgICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShlbGVtZW50LmRhdGFzZXQsICJjIiwgeyB2YWx1ZTogInZhbHVlMyIgfSk7
CisgICAgICAgIGFzc2VydF9lcXVhbHMoZWxlbWVudC5kYXRhc2V0WyJjIl0sICJ2YWx1ZTMiKTsK
KyAgICAgICAgYXNzZXJ0X2VxdWFscyhlbGVtZW50LmdldEF0dHJpYnV0ZSgiZGF0YS1jIiksICJ2
YWx1ZTMiKQorICAgIH0sICJUZXN0IHRoYXQgdGhlIHNldHRpbmcgYSBub24tZXhpc3RpbmcgbmFt
ZWQgcHJvcGVydHkgd2l0aCBPYmplY3QuZGVmaW5lUHJvcGVydHkgY3JlYXRlcyB0aGUgcHJvcGVy
dHkgKFtPdmVycmlkZUJ1aWx0aW5zXSBzcGVjaWZpZWQpLiIpOworCisgICAgdGVzdCgoKSA9PiB7
CisgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Cisg
ICAgICAgIGVsZW1lbnQuZGF0YXNldFsxXSA9ICJ2YWx1ZTEiOworICAgICAgICBlbGVtZW50LmRh
dGFzZXRbMl0gPSAidmFsdWUyIjsKKyAgICAgICAgCisgICAgICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShlbGVtZW50LmRhdGFzZXQsIDMsIHsgdmFsdWU6ICJ2YWx1ZTMiIH0pOworICAgICAgICBh
c3NlcnRfZXF1YWxzKGVsZW1lbnQuZGF0YXNldFszXSwgInZhbHVlMyIpOworICAgICAgICBhc3Nl
cnRfZXF1YWxzKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLTMiKSwgInZhbHVlMyIpCisgICAg
fSwgIlRlc3QgdGhhdCB0aGUgc2V0dGluZyBhIG5vbi1leGlzdGluZyBpbmRleGVkIHByb3BlcnR5
IHdpdGggT2JqZWN0LmRlZmluZVByb3BlcnR5IGNyZWF0ZXMgdGhlIHByb3BlcnR5IChbT3ZlcnJp
ZGVCdWlsdGluc10gc3BlY2lmaWVkKS4iKTsKKworICAgIHRlc3QoKCkgPT4geworICAgICAgICBs
ZXQgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICBlbGVt
ZW50LmRhdGFzZXRbImEiXSA9ICJ2YWx1ZTEiOworICAgICAgICBlbGVtZW50LmRhdGFzZXRbImIi
XSA9ICJ2YWx1ZTIiOworICAgICAgICAKKyAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVs
ZW1lbnQuZGF0YXNldCwgImEiLCB7IHZhbHVlOiAidmFsdWUzIiB9KTsKKyAgICAgICAgYXNzZXJ0
X2VxdWFscyhlbGVtZW50LmRhdGFzZXRbImEiXSwgInZhbHVlMyIpOworICAgICAgICBhc3NlcnRf
ZXF1YWxzKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLWEiKSwgInZhbHVlMyIpCisgICAgfSwg
IlRlc3QgdGhhdCB0aGUgc2V0dGluZyBhbiBleGlzdGluZyBuYW1lZCBwcm9wZXJ0eSB3aXRoIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eSByZXBsYWNlcyB0aGUgdmFsdWUgKFtPdmVycmlkZUJ1aWx0aW5z
XSBzcGVjaWZpZWQpLiIpOworCisgICAgdGVzdCgoKSA9PiB7CisgICAgICAgIGxldCBlbGVtZW50
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgIGVsZW1lbnQuZGF0YXNl
dFsxXSA9ICJ2YWx1ZTEiOworICAgICAgICBlbGVtZW50LmRhdGFzZXRbMl0gPSAidmFsdWUyIjsK
KyAgICAgICAgCisgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LmRhdGFzZXQs
IDEsIHsgdmFsdWU6ICJ2YWx1ZTMiIH0pOworICAgICAgICBhc3NlcnRfZXF1YWxzKGVsZW1lbnQu
ZGF0YXNldFsxXSwgInZhbHVlMyIpOworICAgICAgICBhc3NlcnRfZXF1YWxzKGVsZW1lbnQuZ2V0
QXR0cmlidXRlKCJkYXRhLTEiKSwgInZhbHVlMyIpCisgICAgfSwgIlRlc3QgdGhhdCB0aGUgc2V0
dGluZyBhbiBleGlzdGluZyBpbmRleGVkIHByb3BlcnR5IHdpdGggT2JqZWN0LmRlZmluZVByb3Bl
cnR5IHJlcGxhY2VzIHRoZSB2YWx1ZSAoW092ZXJyaWRlQnVpbHRpbnNdIHNwZWNpZmllZCkuIik7
CisKKyAgICB0ZXN0KCgpID0+IHsKKyAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgZWxlbWVudC5kYXRhc2V0WyJhIl0gPSAidmFsdWUx
IjsKKyAgICAgICAgZWxlbWVudC5kYXRhc2V0WyJiIl0gPSAidmFsdWUyIjsKKyAgICAgICAgCisg
ICAgICAgIGFzc2VydF90aHJvd3MoIlN5bnRheEVycm9yIiwgKCkgPT4geworICAgICAgICAgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQuZGF0YXNldCwgIi1pbnZhbGlkIiwgeyB2YWx1
ZTogInZhbHVlMyIgfSk7ICAgICAgICAgICAgCisgICAgICAgIH0pOworICAgICAgICBhc3NlcnRf
bm90X2VxdWFscyhlbGVtZW50LmRhdGFzZXRbIi1pbnZhbGlkIl0sICd2YWx1ZTMnKTsKKyAgICAg
ICAgYXNzZXJ0X25vdF9lcXVhbHMoZWxlbWVudC5nZXRBdHRyaWJ1dGUoImRhdGEtLWludmFsaWQi
KSwgInZhbHVlMyIpCisgICAgfSwgIlRlc3QgdGhhdCB0aGUgc2V0dGluZyBhIG5vbi1leGlzdGlu
ZyBidXQgaW52YWxpZCBuYW1lZCBwcm9wZXJ0eSB3aXRoIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSB0
aHJvd3MgKFtPdmVycmlkZUJ1aWx0aW5zXSBzcGVjaWZpZWQpLiIpOworCisgICAgdGVzdCgoKSA9
PiB7CisgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7
CisgICAgICAgIGVsZW1lbnQuZGF0YXNldFsiYSJdID0gInZhbHVlMSI7CisgICAgICAgIGVsZW1l
bnQuZGF0YXNldFsiYiJdID0gInZhbHVlMiI7CisgICAgICAgIAorICAgICAgICBhc3NlcnRfZXF1
YWxzKGVsZW1lbnQuZGF0YXNldFsiYyJdLCB1bmRlZmluZWQpOworICAgICAgICBPYmplY3QuZGVm
aW5lUHJvcGVydHkoZWxlbWVudC5kYXRhc2V0LCAiYyIsIHsgCisgICAgICAgICAgICBnZXQ6IGZ1
bmN0aW9uKCkgeyByZXR1cm4gMTsgfSwKKyAgICAgICAgICAgIHNldDogZnVuY3Rpb24obmV3VmFs
dWUpIHsgfQorICAgICAgICB9KTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhlbGVtZW50LmRhdGFz
ZXRbImMiXSwgdW5kZWZpbmVkKTsKKyAgICB9LCAiVGVzdCB0aGF0IHRoZSBzZXR0aW5nIGEgbm9u
LWRhdGEgZGVzY3JpcHRvciBwcm9wZXJ0eSB3aXRoIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBkb2Vz
IG5vdCBzZXQgYW55dGhpbmcgKFtPdmVycmlkZUJ1aWx0aW5zXSBzcGVjaWZpZWQpLiIpOworCisg
ICAgdGVzdCgodCkgPT4geworICAgICAgICB0LmFkZF9jbGVhbnVwKCgpID0+IHsKKyAgICAgICAg
ICBkZWxldGUgRE9NU3RyaW5nTWFwLnByb3RvdHlwZVsiYyJdOworICAgICAgICB9KTsKKyAgICAK
KyAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAg
ICAKKyAgICAgICAgRE9NU3RyaW5nTWFwLnByb3RvdHlwZVsiYyJdID0gJ3Byb3RvdHlwZS12YWx1
ZSc7CisgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LmRhdGFzZXQsICJjIiwg
eyB2YWx1ZTogIm1hcC12YWx1ZSIgfSk7CisgICAgICAgIAorICAgICAgICBhc3NlcnRfZXF1YWxz
KGVsZW1lbnQuZGF0YXNldFsiYyJdLCAibWFwLXZhbHVlIik7CisgICAgICAgIGFzc2VydF9lcXVh
bHMoZWxlbWVudC5nZXRBdHRyaWJ1dGUoImRhdGEtYyIpLCAibWFwLXZhbHVlIikKKyAgICAgICAg
YXNzZXJ0X2VxdWFscyhET01TdHJpbmdNYXAucHJvdG90eXBlWyJjIl0sICJwcm90b3R5cGUtdmFs
dWUiKQorICAgIH0sICJUZXN0IHRoYXQgdGhlIHNldHRpbmcgYSBuYW1lZCBwcm9wZXJ0eSB3aXRo
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSB0aGF0IHNoYWRvd3MgYW4gZXhpc3RpbmcgcHJvdG90eXBl
IHZhbHVlIHN0aWxsIGNyZWF0ZXMgdGhlIGl0ZW0gKFtPdmVycmlkZUJ1aWx0aW5zXSBzcGVjaWZp
ZWQpLiIpOworCisKKyAgICAvLyBUbyB0ZXN0IGEgbmFtZWQgcHJvcGVydHkgc2V0dGVyIHdpdGhv
dXQgW092ZXJyaWRlQnVpbHRpbnNdIHNwZWNpZmllZCwgd2UgdXNlIFN0b3JhZ2UgdmlhIHdpbmRv
dy5zZXNzaW9uU3RvcmFnZS4KKyAgICB0ZXN0KCh0KSA9PiB7CisgICAgICAgIHQuYWRkX2NsZWFu
dXAoKCkgPT4geworICAgICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5jbGVhcigpOworICAg
ICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5jbGVhcigp
OworICAgICAgICBhc3NlcnRfZXF1YWxzKHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5sZW5ndGgsIDAp
OworICAgIAorICAgICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2VbImEiXSA9ICJ2YWx1ZTEiOwor
ICAgICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2VbImIiXSA9ICJ2YWx1ZTIiOworICAgICAgICAK
KyAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5zZXNzaW9uU3RvcmFnZSwgImMi
LCB7IHZhbHVlOiAidmFsdWUzIiB9KTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyh3aW5kb3cuc2Vz
c2lvblN0b3JhZ2VbImMiXSwgInZhbHVlMyIpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHdpbmRv
dy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCJjIiksICJ2YWx1ZTMiKQorICAgIH0sICJUZXN0IHRo
YXQgdGhlIHNldHRpbmcgYSBub24tZXhpc3RpbmcgbmFtZWQgcHJvcGVydHkgd2l0aCBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkgY3JlYXRlcyB0aGUgcHJvcGVydHkgKFtPdmVycmlkZUJ1aWx0aW5zXSBu
b3Qgc3BlY2lmaWVkKS4iKTsKKworICAgIHRlc3QoKHQpID0+IHsKKyAgICAgICAgdC5hZGRfY2xl
YW51cCgoKSA9PiB7CisgICAgICAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLmNsZWFyKCk7Cisg
ICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLmNsZWFy
KCk7CisgICAgICAgIGFzc2VydF9lcXVhbHMod2luZG93LnNlc3Npb25TdG9yYWdlLmxlbmd0aCwg
MCk7CisgICAgCisgICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZVsiYSJdID0gInZhbHVlMSI7
CisgICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZVsiYiJdID0gInZhbHVlMiI7CisgICAgICAg
ICAgICAKKyAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5zZXNzaW9uU3RvcmFn
ZSwgMywgeyB2YWx1ZTogInZhbHVlMyIgfSk7CisgICAgICAgIGFzc2VydF9lcXVhbHMod2luZG93
LnNlc3Npb25TdG9yYWdlWzNdLCAidmFsdWUzIik7CisgICAgICAgIGFzc2VydF9lcXVhbHMod2lu
ZG93LnNlc3Npb25TdG9yYWdlLmdldEl0ZW0oIjMiKSwgInZhbHVlMyIpCisgICAgfSwgIlRlc3Qg
dGhhdCB0aGUgc2V0dGluZyBhIG5vbi1leGlzdGluZyBpbmRleGVkIHByb3BlcnR5IHdpdGggT2Jq
ZWN0LmRlZmluZVByb3BlcnR5IGNyZWF0ZXMgdGhlIHByb3BlcnR5IChbT3ZlcnJpZGVCdWlsdGlu
c10gbm90IHNwZWNpZmllZCkuIik7CisKKyAgICB0ZXN0KCh0KSA9PiB7CisgICAgICAgIHQuYWRk
X2NsZWFudXAoKCkgPT4geworICAgICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5jbGVhcigp
OworICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5j
bGVhcigpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5sZW5n
dGgsIDApOworICAgIAorICAgICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2VbImEiXSA9ICJ2YWx1
ZTEiOworICAgICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2VbImIiXSA9ICJ2YWx1ZTIiOworICAg
ICAgICAKKyAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5zZXNzaW9uU3RvcmFn
ZSwgImEiLCB7IHZhbHVlOiAidmFsdWUzIiB9KTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyh3aW5k
b3cuc2Vzc2lvblN0b3JhZ2VbImEiXSwgInZhbHVlMyIpOworICAgICAgICBhc3NlcnRfZXF1YWxz
KHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCJhIiksICJ2YWx1ZTMiKQorICAgIH0sICJU
ZXN0IHRoYXQgdGhlIHNldHRpbmcgYW4gZXhpc3RpbmcgbmFtZWQgcHJvcGVydHkgd2l0aCBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkgcmVwbGFjZXMgdGhlIHZhbHVlIChbT3ZlcnJpZGVCdWlsdGluc10g
bm90IHNwZWNpZmllZCkuIik7CisKKyAgICB0ZXN0KCh0KSA9PiB7CisgICAgICAgIHQuYWRkX2Ns
ZWFudXAoKCkgPT4geworICAgICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5jbGVhcigpOwor
ICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5jbGVh
cigpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5sZW5ndGgs
IDApOworICAgIAorICAgICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2VbImEiXSA9ICJ2YWx1ZTEi
OworICAgICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2VbImIiXSA9ICJ2YWx1ZTIiOworICAgICAg
ICAgICAgCisgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuc2Vzc2lvblN0b3Jh
Z2UsIDEsIHsgdmFsdWU6ICJ2YWx1ZTMiIH0pOworICAgICAgICBhc3NlcnRfZXF1YWxzKHdpbmRv
dy5zZXNzaW9uU3RvcmFnZVsxXSwgInZhbHVlMyIpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHdp
bmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCIxIiksICJ2YWx1ZTMiKQorICAgIH0sICJUZXN0
IHRoYXQgdGhlIHNldHRpbmcgYW4gZXhpc3RpbmcgaW5kZXhlZCBwcm9wZXJ0eSB3aXRoIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eSByZXBsYWNlcyB0aGUgdmFsdWUgKFtPdmVycmlkZUJ1aWx0aW5zXSBu
b3Qgc3BlY2lmaWVkKS4iKTsKKworICAgIHRlc3QoKHQpID0+IHsKKyAgICAgICAgdC5hZGRfY2xl
YW51cCgoKSA9PiB7CisgICAgICAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLmNsZWFyKCk7Cisg
ICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLmNsZWFy
KCk7CisgICAgICAgIGFzc2VydF9lcXVhbHMod2luZG93LnNlc3Npb25TdG9yYWdlLmxlbmd0aCwg
MCk7CisgICAgCisgICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZVsiYSJdID0gInZhbHVlMSI7
CisgICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZVsiYiJdID0gInZhbHVlMiI7CisgICAgICAg
IAorICAgICAgICBhc3NlcnRfZXF1YWxzKHdpbmRvdy5zZXNzaW9uU3RvcmFnZVsiYyJdLCB1bmRl
ZmluZWQpOworICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LnNlc3Npb25TdG9y
YWdlLCAiYyIsIHsgCisgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gMTsgfSwK
KyAgICAgICAgICAgIHNldDogZnVuY3Rpb24obmV3VmFsdWUpIHsgfQorICAgICAgICB9KTsKKyAg
ICAgICAgYXNzZXJ0X2VxdWFscyh3aW5kb3cuc2Vzc2lvblN0b3JhZ2VbImMiXSwgdW5kZWZpbmVk
KTsKKyAgICB9LCAiVGVzdCB0aGF0IHRoZSBzZXR0aW5nIGEgbm9uLWRhdGEgZGVzY3JpcHRvciBw
cm9wZXJ0eSB3aXRoIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBkb2VzIG5vdCBzZXQgYW55dGhpbmcg
KFtPdmVycmlkZUJ1aWx0aW5zXSBub3Qgc3BlY2lmaWVkKS4iKTsKKworICAgIHRlc3QoKHQpID0+
IHsKKyAgICAgICAgdC5hZGRfY2xlYW51cCgoKSA9PiB7CisgICAgICAgICAgICB3aW5kb3cuc2Vz
c2lvblN0b3JhZ2UuY2xlYXIoKTsKKyAgICAgICAgICAgIGRlbGV0ZSBTdG9yYWdlLnByb3RvdHlw
ZVsiYyJdOworICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIFN0b3JhZ2UucHJvdG90eXBl
WyJjIl0gPSAncHJvdG90eXBlLXZhbHVlJzsKKyAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KHdpbmRvdy5zZXNzaW9uU3RvcmFnZSwgImMiLCB7IHZhbHVlOiAibWFwLXZhbHVlIiB9KTsKKyAg
ICAgICAgCisgICAgICAgIGFzc2VydF9lcXVhbHMod2luZG93LnNlc3Npb25TdG9yYWdlWyJjIl0s
ICJwcm90b3R5cGUtdmFsdWUiKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyh3aW5kb3cuc2Vzc2lv
blN0b3JhZ2UuZ2V0SXRlbSgiYyIpLCAibWFwLXZhbHVlIikKKyAgICAgICAgYXNzZXJ0X2VxdWFs
cyhTdG9yYWdlLnByb3RvdHlwZVsiYyJdLCAicHJvdG90eXBlLXZhbHVlIikKKyAgICB9LCAiVGVz
dCB0aGF0IHRoZSBzZXR0aW5nIGEgbmFtZWQgcHJvcGVydHkgd2l0aCBPYmplY3QuZGVmaW5lUHJv
cGVydHkgdGhhdCBzaGFkb3dzIGFuIGV4aXN0aW5nIHByb3RvdHlwZSB2YWx1ZSBzdGlsbCBjcmVh
dGVzIHRoZSBpdGVtIChbT3ZlcnJpZGVCdWlsdGluc10gbm90IHNwZWNpZmllZCkuIik7CisKKwor
ICAgIHRlc3QoKHQpID0+IHsKKyAgICAgICAgdC5hZGRfY2xlYW51cCgoKSA9PiB7CisgICAgICAg
ICAgd2luZG93LnNlc3Npb25TdG9yYWdlLmNsZWFyKCk7CisgICAgICAgIH0pOworICAgICAgICAK
KyAgICAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLmNsZWFyKCk7CisgICAgICAgIGFzc2VydF9l
cXVhbHMod2luZG93LnNlc3Npb25TdG9yYWdlLmxlbmd0aCwgMCk7CisgICAgCisgICAgICAgIHdp
bmRvdy5zZXNzaW9uU3RvcmFnZVsiYSJdID0gInZhbHVlMSI7CisgICAgICAgIHdpbmRvdy5zZXNz
aW9uU3RvcmFnZVsiYiJdID0gInZhbHVlMiI7CisKKyAgICAgICAgbGV0IGN1cnJlbnRMZW5ndGgg
PSB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UubGVuZ3RoOworICAgICAgICAKKyAgICAgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KHdpbmRvdy5zZXNzaW9uU3RvcmFnZSwgImxlbmd0aCIsIHsgdmFsdWU6
ICJ2YWx1ZTMiIH0pOworICAgICAgICBhc3NlcnRfZXF1YWxzKHdpbmRvdy5zZXNzaW9uU3RvcmFn
ZVsnbGVuZ3RoJ10sIGN1cnJlbnRMZW5ndGggKyAxKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyh3
aW5kb3cuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgibGVuZ3RoIiksICJ2YWx1ZTMiKQorICAgIH0s
ICJUZXN0IHRoYXQgdGhlIHRyeWluZyB0byBzZXQgYSBuYW1lZCBwcm9wZXJ0eSwgbWF0Y2hpbmcg
YSBidWlsdGluIHByb3BlcnR5IG5hbWUsIHdpdGggT2JqZWN0LmRlZmluZVByb3BlcnR5IGRvZXMg
bm90aGluZyAoW092ZXJyaWRlQnVpbHRpbnNdIG5vdCBzcGVjaWZpZWQpLiIpOworPC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9kb20vbmFtZWQtcHJvcGVy
dHktZGVsZXRlci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL2RvbS9uYW1lZC1w
cm9wZXJ0eS1kZWxldGVyLmh0bWwJKHJldmlzaW9uIDIxNzc2NCkKKysrIExheW91dFRlc3RzL2pz
L2RvbS9uYW1lZC1wcm9wZXJ0eS1kZWxldGVyLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcg
KzM2LDcgQEAKICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk
aXYiKTsKIAogICAgICAgICBET01TdHJpbmdNYXAucHJvdG90eXBlWyJjdXN0b21Qcm9wZXJ0eSJd
ID0gJ3Byb3RvdHlwZS12YWx1ZSc7Ci0gICAgICAgIGFzc2VydF90cnVlKGRlbGV0ZSBlbGVtZW50
WyJjdXN0b21Qcm9wZXJ0eSJdLCAiIik7CisgICAgICAgIGFzc2VydF90cnVlKGRlbGV0ZSBlbGVt
ZW50LmRhdGFzZXRbImN1c3RvbVByb3BlcnR5Il0sICIiKTsKICAgICAgICAgYXNzZXJ0X2VxdWFs
cyhET01TdHJpbmdNYXAucHJvdG90eXBlWyJjdXN0b21Qcm9wZXJ0eSJdLCAncHJvdG90eXBlLXZh
bHVlJyk7CiAgICAgfSwgIlRlc3QgdGhhdCBkZWxldGluZyBhIHByb3BlcnR5IHRoYXQgZG9lcyBu
b3QgZXhpc3QgaW4gdGhlIG1hcCwgYnV0IGRvZXMgb24gdGhlIHByb3RvdHlwZSwgd2lsbCByZXR1
cm4gdHJ1ZSBhbmQgbm90IHJlbW92ZSB0aGUgcHJvcGVydHkgZnJvbSB0aGUgcHJvdG90eXBlIChb
T3ZlcnJpZGVCdWlsdGluc10gc3BlY2lmaWVkKS4iKTsKIApJbmRleDogTGF5b3V0VGVzdHMvc3Rv
cmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9kZWxldGUtZGVmaW5lcHJvcGVydHktcmVtb3Zh
bC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9y
YWdlL2xvY2Fsc3RvcmFnZS9kZWxldGUtZGVmaW5lcHJvcGVydHktcmVtb3ZhbC1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDIxNzc2NCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9s
b2NhbHN0b3JhZ2UvZGVsZXRlLWRlZmluZXByb3BlcnR5LXJlbW92YWwtZXhwZWN0ZWQudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMyICsxLDYgQEAKLWxvY2FsU3RvcmFnZS5jbGVhcigpCi1PYmpl
Y3QuZ2V0T3duUHJvcGVydHlOYW1lcyhsb2NhbFN0b3JhZ2UpIGlzICgpCi0KLU9iamVjdC5kZWZp
bmVQcm9wZXJ0eShsb2NhbFN0b3JhZ2UsICcxJywge3ZhbHVlOiAncHJlc2VudCd9KQotT2JqZWN0
LmdldE93blByb3BlcnR5TmFtZXMobG9jYWxTdG9yYWdlKSBpcyAoMSkKLWxvY2FsU3RvcmFnZS5n
ZXRJdGVtKCcxJykgaXMgbnVsbAotCi1kZWxldGUgbG9jYWxTdG9yYWdlWzFdCi1PYmplY3QuZ2V0
T3duUHJvcGVydHlOYW1lcyhsb2NhbFN0b3JhZ2UpIGlzICgxKQotCi1PYmplY3QuZGVmaW5lUHJv
cGVydHkobG9jYWxTdG9yYWdlLCAnMicsIHt2YWx1ZTogJ3ByZXNlbnQnLCAgY29uZmlndXJhYmxl
OiB0cnVlfSkKLU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGxvY2FsU3RvcmFnZSkgaXMgKDEs
MikKLWxvY2FsU3RvcmFnZS5nZXRJdGVtKCcyJykgaXMgbnVsbAotCi1kZWxldGUgbG9jYWxTdG9y
YWdlWzJdCi1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhsb2NhbFN0b3JhZ2UpIGlzICgxKQot
Ci1PYmplY3QuZGVmaW5lUHJvcGVydHkobG9jYWxTdG9yYWdlLCAnVGVzdCcsIHt2YWx1ZTogJ3By
ZXNlbnQnLCAgY29uZmlndXJhYmxlOiB0cnVlfSkKLU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVz
KGxvY2FsU3RvcmFnZSkgaXMgKDEsVGVzdCkKLWxvY2FsU3RvcmFnZS5nZXRJdGVtKCdUZXN0Jykg
aXMgbnVsbAotCi1kZWxldGUgbG9jYWxTdG9yYWdlWydUZXN0J10KLU9iamVjdC5nZXRPd25Qcm9w
ZXJ0eU5hbWVzKGxvY2FsU3RvcmFnZSkgaXMgKDEpCi0KLU9iamVjdC5kZWZpbmVQcm9wZXJ0eShs
b2NhbFN0b3JhZ2UsICdUZXN0MScsIHt2YWx1ZTogJ3ByZXNlbnQnfSkKLU9iamVjdC5nZXRPd25Q
cm9wZXJ0eU5hbWVzKGxvY2FsU3RvcmFnZSkgaXMgKDEsVGVzdDEpCi1sb2NhbFN0b3JhZ2UuZ2V0
SXRlbSgnVGVzdDEnKSBpcyBudWxsCi0KLWRlbGV0ZSBsb2NhbFN0b3JhZ2VbJ1Rlc3QxJ10KLU9i
amVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGxvY2FsU3RvcmFnZSkgaXMgKDEsVGVzdDEpCiAKK1BB
U1MgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobG9jYWxTdG9yYWdlKSBvbiBhbiBlbXB0eSBs
b2NhbCBzdG9yYWdlIHNob3VsZCByZXR1cm4gYW4gZW1wdHkgYXJyYXkuIAorUEFTUyBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkgY2FuIGJlIHVzZWQgdG8gYWRkIGl0ZW1zIHRvIGxvY2FsU3RvcmFnZS4g
CitQQVNTIE9wZXJhdG9yIGRlbGV0ZSBjYW4gYmUgdXNlZCB0byByZW1vdmUgaXRlbXMgZnJvbSBs
b2NhbFN0b3JhZ2UuIAorUEFTUyBUaGUgY29uZmlndXJhYmxlIG1vZGlmaWVyIGRvZXMgZWZmZWN0
IHRoZSByZXN1bHQgd2hlbiB1c2VkIGluIGFkZGluZyBwcm9wZXJ0aWVzIHRvIGxvY2FsU3RvcmFn
ZSB3aXRoIE9iamVjdC5kZWZpbmVQcm9wZXJ0eS4gCiAKSW5kZXg6IExheW91dFRlc3RzL3N0b3Jh
Z2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2UvZGVsZXRlLWRlZmluZXByb3BlcnR5LXJlbW92YWwu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxz
dG9yYWdlL2RlbGV0ZS1kZWZpbmVwcm9wZXJ0eS1yZW1vdmFsLmh0bWwJKHJldmlzaW9uIDIxNzc2
NCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2UvZGVsZXRl
LWRlZmluZXByb3BlcnR5LXJlbW92YWwuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSw2MCArMSwz
NCBAQAotPHByZSBpZD0nY29uc29sZSc+PC9wcmU+Cis8aGVhZD4KKyAgICA8c2NyaXB0IHNyYz0i
Li4vLi4vLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0
IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgogPHNjcmlwdD4KLWZ1bmN0aW9uIHJ1blRlc3QoKSB7Ci0gICAgZnVu
Y3Rpb24gbG9nKG1zZykKLSAgICB7Ci0gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdj
b25zb2xlJykuYXBwZW5kKG1zZyArICdcbicpOwotICAgIH0KKyAgICBsb2NhbFN0b3JhZ2UuY2xl
YXIoKTsKIAotICAgIGZ1bmN0aW9uIGxvZ0FuZEV2YWwoc3RyKQotICAgIHsKLSAgICAgICAgbG9n
KHN0cik7Ci0gICAgICAgIGV2YWwoc3RyKTsKLSAgICB9CisgICAgdGVzdCgoKSA9PiB7CisgICAg
ICAgIGFzc2VydF9hcnJheV9lcXVhbHMoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobG9jYWxT
dG9yYWdlKSwgW10pOworICAgIH0sICJPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhsb2NhbFN0
b3JhZ2UpIG9uIGFuIGVtcHR5IGxvY2FsIHN0b3JhZ2Ugc2hvdWxkIHJldHVybiBhbiBlbXB0eSBh
cnJheS4iKTsKKworICAgIHRlc3QoKCkgPT4geworICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkobG9jYWxTdG9yYWdlLCAnMScsIHt2YWx1ZTogJ3ByZXNlbnQnfSk7CisgICAgICAgIGFzc2Vy
dF9lcXVhbHMobG9jYWxTdG9yYWdlLmdldEl0ZW0oJzEnKSwgJ3ByZXNlbnQnKTsKKyAgICAgICAg
YXNzZXJ0X2FycmF5X2VxdWFscyhPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhsb2NhbFN0b3Jh
Z2UpLCBbJzEnXSk7CisgICAgfSwgIk9iamVjdC5kZWZpbmVQcm9wZXJ0eSBjYW4gYmUgdXNlZCB0
byBhZGQgaXRlbXMgdG8gbG9jYWxTdG9yYWdlLiIpOworCisgICAgdGVzdCgoKSA9PiB7CisgICAg
ICAgIGFzc2VydF9lcXVhbHMoZGVsZXRlIGxvY2FsU3RvcmFnZVsxXSwgdHJ1ZSk7CisgICAgICAg
IGFzc2VydF9hcnJheV9lcXVhbHMoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobG9jYWxTdG9y
YWdlKSwgW10pOworICAgIH0sICJPcGVyYXRvciBkZWxldGUgY2FuIGJlIHVzZWQgdG8gcmVtb3Zl
IGl0ZW1zIGZyb20gbG9jYWxTdG9yYWdlLiIpOworCisgICAgdGVzdCgoKSA9PiB7CisgICAgICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsb2NhbFN0b3JhZ2UsICcyJywge3ZhbHVlOiAncHJlc2Vu
dCcsIGNvbmZpZ3VyYWJsZTogZmFsc2V9KTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhsb2NhbFN0
b3JhZ2UuZ2V0SXRlbSgnMicpLCAncHJlc2VudCcpOworICAgICAgICBhc3NlcnRfYXJyYXlfZXF1
YWxzKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGxvY2FsU3RvcmFnZSksIFsnMiddKTsKKyAg
ICAgICAgCisgICAgICAgIGFzc2VydF9lcXVhbHMoZGVsZXRlIGxvY2FsU3RvcmFnZVsyXSwgdHJ1
ZSk7CisgICAgICAgIGFzc2VydF9hcnJheV9lcXVhbHMoT2JqZWN0LmdldE93blByb3BlcnR5TmFt
ZXMobG9jYWxTdG9yYWdlKSwgW10pOworICAgIH0sICJUaGUgY29uZmlndXJhYmxlIG1vZGlmaWVy
IGRvZXMgZWZmZWN0IHRoZSByZXN1bHQgd2hlbiB1c2VkIGluIGFkZGluZyBwcm9wZXJ0aWVzIHRv
IGxvY2FsU3RvcmFnZSB3aXRoIE9iamVjdC5kZWZpbmVQcm9wZXJ0eS4iKTsKIAotICAgIGlmICh3
aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKLQotICAg
IGlmICghd2luZG93LmxvY2FsU3RvcmFnZSkgewotICAgICAgICBsb2coIndpbmRvdy5sb2NhbFN0
b3JhZ2UgRE9FUyBOT1QgZXhpc3QiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGxv
Z0FuZEV2YWwoImxvY2FsU3RvcmFnZS5jbGVhcigpIik7Ci0gICAgbG9nKCJPYmplY3QuZ2V0T3du
UHJvcGVydHlOYW1lcyhsb2NhbFN0b3JhZ2UpIGlzICgiICsgT2JqZWN0LmdldE93blByb3BlcnR5
TmFtZXMobG9jYWxTdG9yYWdlKSArICIpXG4iKTsKLSAgICAKLSAgICBsb2dBbmRFdmFsKCJPYmpl
Y3QuZGVmaW5lUHJvcGVydHkobG9jYWxTdG9yYWdlLCAnMScsIHt2YWx1ZTogJ3ByZXNlbnQnfSki
KTsKLSAgICBsb2coIk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGxvY2FsU3RvcmFnZSkgaXMg
KCIgKyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhsb2NhbFN0b3JhZ2UpICsgIikiKTsKLSAg
ICAvLyBGSVhNRTogVGhpcyBpcyBpbmNvcnJlY3QuIEl0IHNob3VsZCByZXR1cm4gJ3ByZXNlbnQn
LiBTZWUgaHR0cHM6Ly93ZWJraXQub3JnL2IvMTcyNjg3LgotICAgIGxvZygibG9jYWxTdG9yYWdl
LmdldEl0ZW0oJzEnKSBpcyAiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJzEnKSArICJcbiIpOwot
ICAgIAotICAgIGxvZ0FuZEV2YWwoImRlbGV0ZSBsb2NhbFN0b3JhZ2VbMV0iKTsKLSAgICBsb2co
Ik9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGxvY2FsU3RvcmFnZSkgaXMgKCIgKyBPYmplY3Qu
Z2V0T3duUHJvcGVydHlOYW1lcyhsb2NhbFN0b3JhZ2UpICsgIilcbiIpOwotICAgIAotICAgIGxv
Z0FuZEV2YWwoIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShsb2NhbFN0b3JhZ2UsICcyJywge3ZhbHVl
OiAncHJlc2VudCcsICBjb25maWd1cmFibGU6IHRydWV9KSIpOwotICAgIGxvZygiT2JqZWN0Lmdl
dE93blByb3BlcnR5TmFtZXMobG9jYWxTdG9yYWdlKSBpcyAoIiArIE9iamVjdC5nZXRPd25Qcm9w
ZXJ0eU5hbWVzKGxvY2FsU3RvcmFnZSkgKyAiKSIpOwotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGlu
Y29ycmVjdC4gSXQgc2hvdWxkIHJldHVybiAncHJlc2VudCcuIFNlZSBodHRwczovL3dlYmtpdC5v
cmcvYi8xNzI2ODcuCi0gICAgbG9nKCJsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnMicpIGlzICIgKyBs
b2NhbFN0b3JhZ2UuZ2V0SXRlbSgnMicpICsgIlxuIik7Ci0gICAgCi0gICAgbG9nQW5kRXZhbCgi
ZGVsZXRlIGxvY2FsU3RvcmFnZVsyXSIpOwotICAgIGxvZygiT2JqZWN0LmdldE93blByb3BlcnR5
TmFtZXMobG9jYWxTdG9yYWdlKSBpcyAoIiArIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGxv
Y2FsU3RvcmFnZSkgKyAiKVxuIik7Ci0KLSAgICBsb2dBbmRFdmFsKCJPYmplY3QuZGVmaW5lUHJv
cGVydHkobG9jYWxTdG9yYWdlLCAnVGVzdCcsIHt2YWx1ZTogJ3ByZXNlbnQnLCAgY29uZmlndXJh
YmxlOiB0cnVlfSkiKTsKLSAgICBsb2coIk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGxvY2Fs
U3RvcmFnZSkgaXMgKCIgKyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhsb2NhbFN0b3JhZ2Up
ICsgIikiKTsKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBpbmNvcnJlY3QuIEl0IHNob3VsZCByZXR1
cm4gJ3ByZXNlbnQnLiBTZWUgaHR0cHM6Ly93ZWJraXQub3JnL2IvMTcyNjg3LgotICAgIGxvZygi
bG9jYWxTdG9yYWdlLmdldEl0ZW0oJ1Rlc3QnKSBpcyAiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0o
J1Rlc3QnKSArICJcbiIpOwotICAKLSAgICBsb2dBbmRFdmFsKCJkZWxldGUgbG9jYWxTdG9yYWdl
WydUZXN0J10iKTsKLSAgICBsb2coIk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGxvY2FsU3Rv
cmFnZSkgaXMgKCIgKyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhsb2NhbFN0b3JhZ2UpICsg
IilcbiIpOwotCi0gICAgbG9nQW5kRXZhbCgiT2JqZWN0LmRlZmluZVByb3BlcnR5KGxvY2FsU3Rv
cmFnZSwgJ1Rlc3QxJywge3ZhbHVlOiAncHJlc2VudCd9KSIpOwotICAgIGxvZygiT2JqZWN0Lmdl
dE93blByb3BlcnR5TmFtZXMobG9jYWxTdG9yYWdlKSBpcyAoIiArIE9iamVjdC5nZXRPd25Qcm9w
ZXJ0eU5hbWVzKGxvY2FsU3RvcmFnZSkgKyAiKSIpOwotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGlu
Y29ycmVjdC4gSXQgc2hvdWxkIHJldHVybiAncHJlc2VudCcuIFNlZSBodHRwczovL3dlYmtpdC5v
cmcvYi8xNzI2ODcuCi0gICAgbG9nKCJsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnVGVzdDEnKSBpcyAi
ICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ1Rlc3QxJykgKyAiXG4iKTsKLSAgCi0gICAgbG9nQW5k
RXZhbCgiZGVsZXRlIGxvY2FsU3RvcmFnZVsnVGVzdDEnXSIpOwotICAgIGxvZygiT2JqZWN0Lmdl
dE93blByb3BlcnR5TmFtZXMobG9jYWxTdG9yYWdlKSBpcyAoIiArIE9iamVjdC5nZXRPd25Qcm9w
ZXJ0eU5hbWVzKGxvY2FsU3RvcmFnZSkgKyAiKVxuIik7Ci19CiA8L3NjcmlwdD4KLTxib2R5IG9u
bG9hZD0icnVuVGVzdCgpOyI+CiA8L2JvZHk+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>311961</attachid>
            <date>2017-06-04 08:26:16 -0700</date>
            <delta_ts>2017-06-04 10:23:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-172687-20170604082627.patch</filename>
            <type>text/plain</type>
            <size>461859</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNzc2NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0OSBAQAorMjAxNy0wNi0wMyAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIENhbid0IHVzZSBPYmplY3QuZGVmaW5l
UHJvcGVydHkoKSB0byBhZGQgYW4gaXRlbSB0byBhIERPTVN0cmluZ01hcCBvciBTdG9yYWdlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzI2ODcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIEFkZHMgc3Vw
cG9ydCBmb3IgZ2VuZXJhdGluZyB0aGUgZGVmaW5lT3duUHJvcGVydHkgQ2xhc3NJbmZvIG1ldGhv
ZCB0YWJsZSBob29rCisgICAgICAgICAgdG8gYWRkIHN1cHBvcnQgZm9yIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eSgpLiBUaGUgaW1wbGVtZW50YXRpb24gZm9sbG93cyBXZWJJREwKKyAgICAgICAgICBz
ZWN0aW9uIDMuOS4zIFtbRGVmaW5lT3duUHJvcGVydHldXS4KKyAgICAgICAgICAoaHR0cHM6Ly9o
ZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jbGVnYWN5LXBsYXRmb3JtLW9iamVjdC1kZWZpbmVvd25w
cm9wZXJ0eSkKKyAgICAgICAgLSBBZGRzIHN1cHBvcnQgZm9yIGdlbmVyYXRpbmcgbmFtZWQgc2V0
dGVycyBpbiBhZGRpdGlvbiB0byB0aGUgYWxyZWFkeSBzdXBwb3J0ZWQKKyAgICAgICAgICBpbmRl
eGVkIHNldHRlcnMgYXMgbXVjaCBvZiB0aGUgcmVxdWlyZWQgd29yayB3YXMgbmVlZGVkIHRvIG1h
a2UgZGVmaW5lT3duUHJvcGVydHkKKyAgICAgICAgICB3b3JrIGZvciB0aG9zZSBwcm9wZXJ0aWVz
LiBUaGlzIHBhdGNoIGRvZXMgbm90IGFpbSB0byBmb2xsb3cgV2ViSURMIGZhaXRoZnVsbHksCisg
ICAgICAgICAgYnV0IHJhdGhlciB0byBnZW5lcmF0ZSBhcyBjbG9zZSB0byB0aGUgY3VzdG9tIGNv
ZGUgYXMgcG9zc2libGUuIEEgZm9sbG93IHVwIAorICAgICAgICAgIGNoYW5nZSB3aWxsIGF0dGVt
cHQgdG8gbWF0Y2ggV2ViSURMIG1vcmUgY2xvc2VseSAod2hpY2ggd2lsbCBhbHNvIHJlcXVpcmUg
Y2hhbmdlcworICAgICAgICAgIHRvIFtbR2V0T3duUHJvcGVydHlTbG90XV0pLgorICAgICAgICAt
IFJlbW92ZXMgdGhlIG5lZWQgZm9yIGN1c3RvbSBiaW5kaW5ncyBpbiBET01TdHJpbmdNYXAsIEhU
TUxPcHRpb25zQ29sbGVjdGlvbiBhbmQKKyAgICAgICAgICBIVE1MU2VsZWN0RWxlbWVudC4gR2V0
cyB1cyBvbmUgZnVuY3Rpb24gYXdheSBmcm9tIHN1cHBvcnRpbmcgU3RvcmFnZS4KKyAgICAgICAg
LSBUaWRpZXMgdXAgZ2VuZXJhdGVkIGhlYWRlcnMgYSBiaXQgYnkgZ3JvdXBpbmcgYWxsIHRoZSBD
bGFzc0luZm8gbWV0aG9kIHRhYmxlIGhvb2tzCisgICAgICAgICAgdG9nZXRoZXIuCisgICAgICAg
IC0gUmVtb3ZlcyBzdXBwb3J0IGZvciBDdXN0b21JbmRleGVkU2V0dGVyLCB3aGljaCBpcyBubyBs
b25nZXIgdXNlZC4KKworICAgICAgICBUZXN0OiBqcy9kb20vbGVnYWN5LXBsYXRmb3JtLW9iamVj
dC1kZWZpbmVPd25Qcm9wZXJ0eS5odG1sCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNCaW5kaW5nc0FsbEluT25lLmNwcDoKKyAgICAgICAgUmVtb3ZlZCBub3cgdW5u
ZWVkZWQgY3VzdG9tIGJpbmRpbmdzLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01TdHJp
bmdNYXBDdXN0b20uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTE9w
dGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmg6IFJlbW92ZWQuCisgICAgICAgICog
YmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU3Rv
cmFnZTo6cHV0RGVsZWdhdGUpOiBEZWxldGVkLgorICAgICAgICBSZW1vdmUgbW9yZSBjb2RlIHRo
YXQgaXMgbm93IGdlbmVyYXRlZC4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVJbmRleGVkR2V0dGVyKToKKyAgICAgICAg
LSBBZGQgbWlzc2luZyBjaGVjayBmb3IgaW5kZXhlZCBzZXR0ZXIgb3BlcmF0aW9uIHdoZW4gZGV0
ZXJtaW5pbmcgaWYgdGhlIHByb3BlcnR5IHNob3VsZCBiZSBSZWFkT25seS4KKyAgICAgICAgLSBB
ZGQgc3VwcG9ydCBmb3IgY3VzdG9tIGltcGxlbWVudGF0aW9uIG5hbWUsIG1hdGNoaW5nIEdlbmVy
YXRlTmFtZWRHZXR0ZXIuCisgICAgICAgIC0gQ29udmVydCB0byB0YWtpbmcgYW4gb3V0cHV0QXJy
YXkgYW5kIGluZGVudCB0byBhbGxvdyBtb3JlIGZsZXhpYmlsaXR5IGdvaW5nIGZvcndhcmQuCisK
KyAgICAgICAgKEdlbmVyYXRlTmFtZWRHZXR0ZXIpOgorICAgICAgICAtIEFkZCBtaXNzaW5nIGNo
ZWNrIGZvciBuYW1lZCBzZXR0ZXIgb3BlcmF0aW9uIHdoZW4gZGV0ZXJtaW5pbmcgaWYgdGhlIHBy
b3BlcnR5IHNob3VsZCBiZSBSZWFkT25seS4KKyAgICAgICAgLSBDb252ZXJ0IHRvIHRha2luZyBh
biBvdXRwdXRBcnJheSBhbmQgaW5kZW50IHRvIGFsbG93IG1vcmUgZmxleGliaWxpdHkgZ29pbmcg
Zm9yd2FyZC4KKworICAgICAgICAoR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eVNsb3RCb2R5KToKKyAg
ICAgICAgLSBDb252ZXJ0IHRvIHRha2luZyBhbiBvdXRwdXRBcnJheSBhbmQgaW5kZW50IHRvIGFs
bG93IG1vcmUgZmxleGliaWxpdHkgZ29pbmcgZm9yd2FyZC4KKyAgICAgICAgLSBUYWtlIG92ZXIg
cmVzcG9uc2liaWxpdHkgZm9yIGNoZWNraW5nIGFuZCBiYWlsaW5nIGlmIEN1c3RvbUdldE93blBy
b3BlcnR5U2xvdCBpcyBzZXQuCisKKyAgICAgICAgKEdlbmVyYXRlR2V0T3duUHJvcGVydHlTbG90
Qm9keUJ5SW5kZXgpOgorICAgICAgICAtIENvbnZlcnQgdG8gdGFraW5nIGFuIG91dHB1dEFycmF5
IGFuZCBpbmRlbnQgdG8gYWxsb3cgbW9yZSBmbGV4aWJpbGl0eSBnb2luZyBmb3J3YXJkLgorICAg
ICAgICAtIFRha2Ugb3ZlciByZXNwb25zaWJpbGl0eSBmb3IgY2hlY2tpbmcgYW5kIGJhaWxpbmcg
aWYgQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QnlJbmRleCBpcyBzZXQuCisKKyAgICAgICAgKEdl
bmVyYXRlR2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAgIC0gQ29udmVydCB0byB0YWtpbmcg
YW4gb3V0cHV0QXJyYXkgYW5kIGluZGVudCB0byBhbGxvdyBtb3JlIGZsZXhpYmlsaXR5IGdvaW5n
IGZvcndhcmQuCisgICAgICAgIC0gVGFrZSBvdmVyIHJlc3BvbnNpYmlsaXR5IGZvciBjaGVja2lu
ZyBhbmQgYmFpbGluZyBpZiBDdXN0b21FbnVtZXJhdGVQcm9wZXJ0eSBpcyBzZXQuCisKKyAgICAg
ICAgKEdlbmVyYXRlSW52b2tlSW5kZXhlZFByb3BlcnR5U2V0dGVyKToKKyAgICAgICAgQWRkZWQu
IEltcGxlbWVudHMgdGhlICdpbnZva2UgYW4gaW5kZXhlZCBwcm9wZXJ0eSBzZXR0ZXInIGFsZ29y
aXRobSAoaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jaW52b2tlLWluZGV4ZWQtc2V0
dGVyKQorCisgICAgICAgIChHZW5lcmF0ZUludm9rZU5hbWVkUHJvcGVydHlTZXR0ZXIpOgorICAg
ICAgICBBZGRlZC4gSW1wbGVtZW50cyB0aGUgJ2ludm9rZSBhIG5hbWVkIHByb3BlcnR5IHNldHRl
cicgYWxnb3JpdGhtIChodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNpbnZva2UtbmFt
ZWQtc2V0dGVyKQorCisgICAgICAgIChHZW5lcmF0ZVB1dCk6CisgICAgICAgIChHZW5lcmF0ZVB1
dEJ5SW5kZXgpOgorICAgICAgICAtIENvbnZlcnQgdG8gdGFraW5nIGFuIG91dHB1dEFycmF5IGFu
ZCBpbmRlbnQgdG8gYWxsb3cgbW9yZSBmbGV4aWJpbGl0eSBnb2luZyBmb3J3YXJkLgorICAgICAg
ICAtIFRha2Ugb3ZlciByZXNwb25zaWJpbGl0eSBmb3IgY2hlY2tpbmcgYW5kIGJhaWxpbmcgaWYg
Q3VzdG9tUHV0IGlzIHNldC4KKyAgICAgICAgLSBBZGRzIHN1cHBvcnQgZm9yIENFUmVhY3Rpb25z
LgorICAgICAgICAtIEFkb3B0cyBHZW5lcmF0ZUludm9rZUluZGV4ZWRQcm9wZXJ0eVNldHRlciBh
bmQgR2VuZXJhdGVJbnZva2VOYW1lZFByb3BlcnR5U2V0dGVyIHRvCisgICAgICAgICAgc2ltcGxp
ZnkgY29kZS4KKyAgICAgICAgLSBSZW1vdmVzIHN1cHBvcnQgZm9yIEN1c3RvbUluZGV4ZWRTZXR0
ZXIsIHdoaWNoIGlzIG5vIGxvbmdlciB1c2VkLgorICAgICAgICAtIFJlcGxhY2VzIHVzZSBkaXJl
Y3QgY2hlY2tpbmcgb2YgT3ZlcnJpZGVCdWlsdGlucyB3aXRoIGNoZWNrIGlmIGFueSBpbnRlcmZh
Y2UgaXQgaW5oZXJpdHMKKyAgICAgICAgICBoYXMgaXQsIHdoaWNoIGlzIGhvdyBpdCBpcyBzcGVj
aWZpZWQgdG8gd29yay4KKworICAgICAgICAoR2VuZXJhdGVJc1VuZm9yZ2VhYmxlUHJvcGVydHlO
YW1lKToKKyAgICAgICAgQWRkZWQuIEhlbHBlciBzdWJyb3V0aW5lIHRvIGdlbmVyYXRlIGEgZnVu
Y3Rpb24gdGhhdCBjb21wYXJlcyBhIHByb3BlcnR5IG5hbWUKKyAgICAgICAgYWdhaW5zIGFsbCB0
aGUgcHJvcGVydHkgbmFtZXMgZGVmaW5lZCBhcyBVbmZvcmdlYWJsZSBvbiB0aGUgaW50ZXJmYWNl
LiBVc2VkIGJ5CisgICAgICAgIEdlbmVyYXRlRGVmaW5lT3duUHJvcGVydHkuCisKKyAgICAgICAg
KEdlbmVyYXRlRGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICBBZGRlZC4gSW1wbGVtZW50cyBz
ZWN0aW9uIDMuOS4zIFtbRGVmaW5lT3duUHJvcGVydHldXSAoaHR0cHM6Ly9oZXljYW0uZ2l0aHVi
LmlvL3dlYmlkbC8jbGVnYWN5LXBsYXRmb3JtLW9iamVjdC1kZWZpbmVvd25wcm9wZXJ0eSkKKyAg
ICAgICAgQWRkcyBzdXBwb3J0IGZvciBDRVJlYWN0aW9ucy4KKworICAgICAgICAoR2VuZXJhdGVE
ZWxldGVQcm9wZXJ0eUNvbW1vbik6CisgICAgICAgIFN3aXRjaCBmcm9tIGdldHRpbmcgT3ZlcnJp
ZGVCdWlsdGlucyBkaXJlY3RseSBvZmYgdGhlIGludGVyZmFjZSB0byB1c2luZyBJbmhlcml0c0V4
dGVuZGVkQXR0cmlidXRlLgorCisgICAgICAgIChHZW5lcmF0ZU5hbWVkRGVsZXRlckRlZmluaXRp
b24pOgorICAgICAgICBTd2l0Y2ggc2lnbmF0dXJlIHRvIG1hdGNoIHBlZXIgZ2VuZXJhdG9ycy4K
KworICAgICAgICAoSW5zdGFuY2VPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAg
ICBVcGRhdGUgZm9yIHJlbmFtZSBvZiBKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2Ny
aXB0b3IgdG8gQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvci4KKworICAgICAg
ICAoSW5zdGFuY2VPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAgICAg
QWRkZWQuIExpa2UgSW5zdGFuY2VPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QsIGJ1dCBjaGVj
a3MgZm9yIHRoZSBuZXcgQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QnlJbmRleCAKKyAgICAgICAg
cmF0aGVyIHRoYW4gQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90LgorCisgICAgICAgIChJbnN0YW5j
ZU92ZXJyaWRlc0dldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICBBZGRlZC4gTW92ZXMgY29t
cGxleCBwcmVkaWNhdGUgb3V0IG9mIGxpbmUuCisKKyAgICAgICAgKEluc3RhbmNlT3ZlcnJpZGVz
UHV0KToKKyAgICAgICAgUmVtb3ZlcyBub3cgdW51c2VkIEN1c3RvbUluZGV4ZWRTZXR0ZXIsIGFu
ZCBhZGRzIEN1c3RvbVB1dEZ1bmN0aW9uLCB3aGljaCB1c2VkIHRvIGJlIGNoZWNrZWQgc2VwYXJh
dGVseS4KKworICAgICAgICAoSW5zdGFuY2VPdmVycmlkZXNEZWZpbmVPd25Qcm9wZXJ0eSk6Cisg
ICAgICAgIEFkZGVkLgorCisgICAgICAgIChHZW5lcmF0ZUhlYWRlcik6CisgICAgICAgIC0gTW92
ZXMgbW9yZSBzdHJ1Y3R1cmUgZmxhZ3MgdG9nZXRoZXIuCisgICAgICAgIC0gU2ltcGxpZmllcyBw
cmVkaWNhdGVzIGFuZCBtb3ZlcyB0aGUgQ2xhc3NJbmZvIG1ldGhvZCB0YWJsZSBob29rcyB0b2dl
dGhlci4KKworICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6CisgICAgICAgIC0gTW92
ZXMgdGhlIENsYXNzSW5mbyBtZXRob2QgdGFibGUgaG9va3MgdG9nZXRoZXIKKyAgICAgICAgLSBB
ZGRzIGNhbGwgdG8gR2VuZXJhdGVEZWZpbmVPd25Qcm9wZXJ0eS4KKworICAgICAgICAoR2VuZXJh
dGVMZWdhY3lDYWxsZXJEZWZpbml0aW9ucyk6CisgICAgICAgIFNpbXBsaWZ5IGJhaWwgY29uZGl0
aW9uIHRvIG1hdGNoIG90aGVyIGdlbmVyYXRvcnMuCisKKyAgICAgICAgKEdlbmVyYXRlUHJvdG90
eXBlRGVjbGFyYXRpb24pOgorICAgICAgICBVcGRhdGUgZm9yIG5ldyBleHRlbmRlZCBhdHRyaWJ1
dGUgbmFtZXMuCisKKyAgICAgICAgKEluc3RhbmNlT3ZlcnJpZGVzQ2FsbCk6IAorICAgICAgICBS
ZW5hbWVkIGZyb20gSXNDYWxsYWJsZSBmb3IgY29uc2lzdGVuY3kuCisgICAgICAgIAorICAgICAg
ICAoSGFzQ29tcGxleEdldE93blByb3BlcnR5KTogCisgICAgICAgIERlbGV0ZWQuIFVudXNlZC4K
KyAgICAgICAgCisgICAgICAgIChJbnN0YW5jZU92ZXJyaWRlc1B1dEltcGxlbWVudGF0aW9uKTog
CisgICAgICAgIERlbGV0ZWQuIFVudXNlZC4KKyAgICAgICAgCisgICAgICAgIChJbnN0YW5jZU92
ZXJyaWRlc1B1dERlY2xhcmF0aW9uKTogCisgICAgICAgIERlbGV0ZWQuIFVudXNlZC4KKyAgICAg
ICAgCisgICAgICAgIChJc0NhbGxhYmxlKTogCisgICAgICAgIFJlbmFtZWQsIGZvciBjb25zaXN0
ZW5jeSwgdG8gSW5zdGFuY2VPdmVycmlkZXNDYWxsIC4KKworICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvSURMQXR0cmlidXRlcy5qc29uOgorICAgICAgICBSZW5hbWVzIGEgZmV3IG9mIHRoZSBl
eHRlbmRlZCBhdHRyaWJ1dGVzIHRvIHJlbW92ZSB0aGUgSlMgcHJlZml4LiBUaGlzIHRpbWUKKyAg
ICAgICAgYXJvdW5kIEkgb25seSBkaWQgdGhlIG9uZXMgaW4gdGhlIGFyZWEgSSB3YXMgd29ya2lu
ZywgYnV0IHdlIHNob3VsZCBwcm9iYWJseQorICAgICAgICByZW1vdmUgbW9zdCBvZiB0aGUgcmVz
dC4KKyAgICAKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5pZGw6CisgICAgICAg
IFVwZGF0ZSBmb3IgSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yIC0+IEN1
c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2NyaXB0b3IgcmVuYW1lLgorCisgICAgICAgICog
ZG9tL0RPTVN0cmluZ01hcC5pZGw6CisgICAgICAgIFJlbW92ZSBDdXN0b21OYW1lZFNldHRlciBh
bmQgYWRkIHVuY29tbWVudCBvdXQgdGhlIHNldHRlci4KKworICAgICAgICAqIGRvbS9EYXRhc2V0
RE9NU3RyaW5nTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFzZXRET01TdHJpbmdNYXA6
OnNldE5hbWVkSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhc2V0RE9NU3RyaW5nTWFwOjpz
ZXRJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgKiBkb20vRGF0YXNldERPTVN0cmluZ01hcC5oOgor
ICAgICAgICBSZW5hbWUgc2V0SXRlbSB0byBzZXROYW1lZEl0ZW0sIHdoaWNoIGlzIHdoYXQgdGhl
IGdlbmVyYXRvciBleHBlY3RzLgorCisgICAgICAgICogZG9tL05vZGUuaWRsOgorICAgICAgICBV
cGRhdGUgZm9yIEpTQ3VzdG9tUHVzaEV2ZW50SGFuZGxlclNjb3BlIC0+IEN1c3RvbVB1c2hFdmVu
dEhhbmRsZXJTY29wZSByZW5hbWUuCisKKyAgICAgICAgKiBodG1sL0hUTUxBcHBsZXRFbGVtZW50
LmlkbDoKKyAgICAgICAgKiBodG1sL0hUTUxFbWJlZEVsZW1lbnQuaWRsOgorICAgICAgICAqIGh0
bWwvSFRNTE9iamVjdEVsZW1lbnQuaWRsOgorICAgICAgICBVcGRhdGUgZm9yIEpTQ3VzdG9tR2V0
T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvciAtPiBDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RB
bmREZXNjcmlwdG9yIHJlbmFtZS4KKworICAgICAgICAqIGh0bWwvSFRNTENvbGxlY3Rpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246OmlzU3VwcG9ydGVkUHJvcGVydHlO
YW1lKToKKyAgICAgICAgKiBodG1sL0hUTUxDb2xsZWN0aW9uLmg6CisgICAgICAgIEFkZCBpc1N1
cHBvcnRlZFByb3BlcnR5TmFtZSBmdW5jdGlvbiB3aGljaCBpcyB1c2VkIGJ5IHRoZSBiaW5kaW5n
cyBhbmQgaXMgbm93IG5lZWRlZC4KKworICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuaWRsOgor
ICAgICAgICBVcGRhdGUgZm9yIEpTQ3VzdG9tUHVzaEV2ZW50SGFuZGxlclNjb3BlIC0+IEN1c3Rv
bVB1c2hFdmVudEhhbmRsZXJTY29wZSByZW5hbWUuCisKKyAgICAgICAgKiBodG1sL0hUTUxPcHRp
b25zQ29sbGVjdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbnNDb2xsZWN0aW9u
OjpzZXRJdGVtKToKKyAgICAgICAgQWRkIHNldEl0ZW0oKSBpbXBsZW1lbnRhdGlvbiB3aGljaCBq
dXN0IGZvcndhcmRzIHRvIHRoZSBzZWxlY3QgZWxlbWVudC4gQWxzbywgYWRkIAorICAgICAgICBh
IHR5cGUgYWxpYXMgdG8gbWFrZSB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGl0ZW0gYW5kIG5hbWVk
SXRlbSBsZXNzIHZlcmJvc2UuCisKKyAgICAgICAgKiBodG1sL0hUTUxPcHRpb25zQ29sbGVjdGlv
bi5pZGw6CisgICAgICAgIFJlbW92ZSBDdXN0b21JbmRleGVkU2V0dGVyIGFuZCB1bmNvbW1lbnQg
dGhlIHNldHRlci4KKworICAgICAgICAqIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaWRsOgorICAg
ICAgICBSZW1vdmUgQ3VzdG9tSW5kZXhlZFNldHRlciBhbmQgdW5jb21tZW50IHRoZSBzZXR0ZXIu
IEFsc28sIHJlZm9ybWF0CisgICAgICAgIHRvIG1hdGNoIHRoZSBXSEFUV0cgc3BlYy4KKworICAg
ICAgICAqIHBhZ2UvRE9NV2luZG93LmlkbDoKKyAgICAgICAgVXBkYXRlIGZvciBKU0N1c3RvbURl
ZmluZU93blByb3BlcnR5IC0+IEN1c3RvbURlZmluZU93blByb3BlcnR5IHJlbmFtZS4gQWRkIAor
ICAgICAgICBDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4IHdoaWNoIGlzIG5vdyBuZWVk
ZWQgdG8gcmVtb3ZlIHNvbWUgdW5zb3VuZAorICAgICAgICBhc3N1bXB0aW9ucyB0aGUgZ2VuZXJh
dG9yIHdhcyBtYWtpbmcuCisKKyAgICAgICAgKiBwYWdlL0xvY2F0aW9uLmlkbDoKKyAgICAgICAg
VXBkYXRlIGZvciByZW1vdmFsIG9mIEpTIHByZWZpeCBmcm9tIGEgYnVuY2ggb2YgZXh0ZW5kZWQg
YXR0cmlidXRlcy4KKworICAgICAgICAqIHBhZ2UvVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFj
ZS5pZGw6CisgICAgICAgIFVwZGF0ZSBmb3IgSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmRE
ZXNjcmlwdG9yIC0+IEN1c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2NyaXB0b3IgcmVuYW1l
LgorCisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlLmlkbDoKKyAgICAgICAgUmVtb3ZlIEN1c3Rv
bU5hbWVkU2V0dGVyIGFuZCB1bmNvbW1lbnQgdGhlIHNldHRlci4KKworICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU0ludGVyZmFjZU5hbWUuaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5jcHA6IEFk
ZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwOiBBZGRlZC4KKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93
aW5nRXhjZXB0aW9uLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwOiBBZGRlZC4KKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJ
bnRlcmZhY2UuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVu
dGlmaWVyLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHA6IEFkZGVkLgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllci5oOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4
Y2VwdGlvbi5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZERlbGV0ZXJXaXRoSWRlbnRpZmllci5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmg6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0dGVy
Lmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVy
Tm9JZGVudGlmaWVyLmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmg6IEFkZGVkLgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9u
LmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoSWRlbnRpZmllci5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucy5jcHA6IEFkZGVkLgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVy
cmlkZUJ1aWx0aW5zLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcy5jcHA6IEFkZGVkLgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhV
bmZvcmdhYmxlUHJvcGVydGllcy5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVy
cmlkZUJ1aWx0aW5zLmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVC
dWlsdGlucy5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0T2JqLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2Jq
Lmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVp
bHRpbnMuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEluZGV4ZWRTZXR0
ZXJOb0lkZW50aWZpZXIuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5pZGw6IEFkZGVkLgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVy
LmlkbDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9u
LmlkbDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5pZGw6IEFkZGVkLgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9UZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuaWRsOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIu
aWRsOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5hbWVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb24uaWRsOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuaWRsOiBBZGRlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVp
bHRpbnMuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5h
bWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzLmlkbDogQWRkZWQuCisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVy
dGllc0FuZE92ZXJyaWRlQnVpbHRpbnMuaWRsOiBBZGRlZC4KKyAgICAgICAgQWRkZWQgbmV3IHRl
c3RzIGFuZCB1cGRhdGVkIHNvbWUgcmVzdWx0cy4KKwogMjAxNy0wNi0wNCAgQ2hyaXMgRHVtZXog
IDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEltcGxlbWVudCBET01NYXRyaXhSZWFkT25s
eS50cmFuc2Zvcm1Qb2ludCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjE3
NzY3KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTExNjYsNyArMTE2Niw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBiaW5kaW5ncy9qcy9K
U0RPTUd1YXJkZWRPYmplY3QuY3BwCiAgICAgYmluZGluZ3MvanMvSlNET01NYXBMaWtlLmNwcAog
ICAgIGJpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZURlZmVycmVkLmNwcAotICAgIGJpbmRpbmdzL2pz
L0pTRE9NU3RyaW5nTWFwQ3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFz
ZS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKICAgICBiaW5kaW5n
cy9qcy9KU0RPTVdpbmRvd1Byb3BlcnRpZXMuY3BwCkBAIC0xMTg5LDggKzExODgsNiBAQCBzZXQo
V2ViQ29yZV9TT1VSQ0VTCiAgICAgYmluZGluZ3MvanMvSlNIVE1MRW1iZWRFbGVtZW50Q3VzdG9t
LmNwcAogICAgIGJpbmRpbmdzL2pzL0pTSFRNTEZyYW1lU2V0RWxlbWVudEN1c3RvbS5jcHAKICAg
ICBiaW5kaW5ncy9qcy9KU0hUTUxPYmplY3RFbGVtZW50Q3VzdG9tLmNwcAotICAgIGJpbmRpbmdz
L2pzL0pTSFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcAotICAgIGJpbmRpbmdzL2pzL0pT
SFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNIVE1MVGVtcGxh
dGVFbGVtZW50Q3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAK
ICAgICBiaW5kaW5ncy9qcy9KU0lEQkN1cnNvckN1c3RvbS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIx
Nzc2NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMTkwMCw3ICsxOTAwLDYgQEAKIAkJNDQ3OTU4MDUxNjQzQjRC
MjAwMUUwQTdGIC8qIFBhcnNlZENvbnRlbnRUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0Nzk1ODAyMTY0M0I0N0IwMDFFMEE3RiAvKiBQYXJz
ZWRDb250ZW50VHlwZS5jcHAgKi87IH07CiAJCTQ0OEEyOUJGMEE0NkQ5Q0IwMDMwNzU5RiAvKiBK
U0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDQ4QTI5QkQwQTQ2RDlDQjAwMzA3NTlGIC8qIEpTSFRNTE9wdGlvbnND
b2xsZWN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNDQ4QTI5QzAwQTQ2RDlDQjAwMzA3NTlGIC8qIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9u
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0OEEy
OUJFMEE0NkQ5Q0IwMDMwNzU5RiAvKiBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbi5jcHAgKi87IH07
Ci0JCTQ0OEFEMjdDMEE0ODEzN0EwMDIzRDE3OSAvKiBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbkN1
c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
NDhBRDI3QTBBNDgxMzc5MDAyM0QxNzkgLyogSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20u
Y3BwICovOyB9OwogCQk0NDhCMUI3QTBGM0EyRjlCMDA0N0E5RTIgLyogVGV4dFNpemVBZGp1c3Rt
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDhC
MUI3ODBGM0EyRjlCMDA0N0E5RTIgLyogVGV4dFNpemVBZGp1c3RtZW50LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDQ5NkUzOUQxMzk4MTM2QzAw
M0VFMzJBIC8qIEpTU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQ5NkUzOUIxMzk4MTM2QzAwM0VFMzJBIC8q
IEpTU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwICovOyB9OwogCQk0NDk2RTM5RTEzOTgxMzZD
MDAzRUUzMkEgLyogSlNTVkdBbmltYXRlTW90aW9uRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQ5NkUzOUMxMzk4MTM2QzAwM0VFMzJBIC8q
IEpTU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaCAqLzsgfTsKQEAgLTQ5MTQsNyArNDkxMyw2IEBA
CiAJCUFCMjQ3QTZDMEFGRDYzODMwMDNGQTVGRCAvKiBSZW5kZXJTbGlkZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUIyNDdBNkEwQUZENjM4MzAw
M0ZBNUZEIC8qIFJlbmRlclNsaWRlci5jcHAgKi87IH07CiAJCUFCMjQ3QTZEMEFGRDYzODMwMDNG
QTVGRCAvKiBSZW5kZXJTbGlkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEFCMjQ3QTZCMEFGRDYzODMwMDNGQTVGRCAvKiBSZW5kZXJTbGlkZXIuaCAq
LzsgfTsKIAkJQUIzMUM5MUUxMEFFMUI4RTAwMEM3QjkyIC8qIExpbmVDbGFtcFZhbHVlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQjMxQzkxRDEwQUUx
QjhFMDAwQzdCOTIgLyogTGluZUNsYW1wVmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlBQjRDQjRFQjBCOEJEQTNEMDA5RjQwQjAgLyogSlNI
VE1MU2VsZWN0RWxlbWVudEN1c3RvbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQUI0Q0I0RUEwQjhCREEzRDAwOUY0MEIwIC8qIEpTSFRNTFNlbGVjdEVs
ZW1lbnRDdXN0b20uaCAqLzsgfTsKIAkJQUI2N0QxQTgwOTdGM0FFMzAwRjkzOTJFIC8qIFJlbmRl
clRleHRDb250cm9sLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEFCNjdEMUE2MDk3RjNBRTMwMEY5MzkyRSAvKiBSZW5kZXJUZXh0Q29udHJvbC5jcHAg
Ki87IH07CiAJCUFCNjdEMUE5MDk3RjNBRTMwMEY5MzkyRSAvKiBSZW5kZXJUZXh0Q29udHJvbC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUI2N0QxQTcw
OTdGM0FFMzAwRjkzOTJFIC8qIFJlbmRlclRleHRDb250cm9sLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQUI3MTcwODkwQjMxMTgwODAwMTcxMjNF
IC8qIFNlYXJjaFBvcHVwTWVudS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQUI3MTcwODgwQjMxMTgwODAwMTcxMjNFIC8qIFNlYXJjaFBvcHVwTWVudS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC01NTg3
LDcgKzU1ODUsNiBAQAogCQlCQzEyOEIwMTEzN0M4RDQ2MDBDQUM4NDUgLyogUmVuZGVyR3JpZC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzEyOEIw
MDEzN0M4RDQ2MDBDQUM4NDUgLyogUmVuZGVyR3JpZC5jcHAgKi87IH07CiAJCUJDMTQwMjhBMEU4
MzY4MDgwMDMxOTcxNyAvKiBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzE0MDI4ODBFODM2ODA4MDAzMTk3
MTcgLyogU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuY3BwICovOyB9OwogCQlCQzE0MDI4QjBFODM2
ODA4MDAzMTk3MTcgLyogU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMTQwMjg5MEU4MzY4MDgwMDMxOTcxNyAv
KiBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCUJDMTdGOTY2MEI2NEVCQjgwMDRBNjVDQiAvKiBKU0hUTUxT
ZWxlY3RFbGVtZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDMTdGOTY1MEI2NEVCQjgwMDRBNjVDQiAvKiBKU0hUTUxTZWxlY3RFbGVt
ZW50Q3VzdG9tLmNwcCAqLzsgfTsKIAkJQkMxQTdEOTcxOEZDQjVCMDAwNDIxODc5IC8qIFJlbmRl
ck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMUE3RDk1MThGQ0I1QjAwMDQyMTg3OSAvKiBSZW5k
ZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5jcHAgKi87IH07CiAJCUJDMUE3RDk4MThG
Q0I1QjAwMDQyMTg3OSAvKiBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMxQTdEOTYxOEZD
QjVCMDAwNDIxODc5IC8qIFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyLmggKi87
IH07CiAJCUJDMUJERjI0MTU2QzE4ODMwMDFDMTI0MyAvKiBET01FcnJvci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzFCREYyMDE1NkMxN0E5MDAx
QzEyNDMgLyogRE9NRXJyb3IuY3BwICovOyB9OwpAQCAtNTcyOCw3ICs1NzI1LDYgQEAKIAkJQkM2
NDY0MUQxMUQ3RjQxNjAwNjQ1NUIwIC8qIERhdGFzZXRET01TdHJpbmdNYXAuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM2NDY0MUIxMUQ3RjQxNjAw
NjQ1NUIwIC8qIERhdGFzZXRET01TdHJpbmdNYXAuY3BwICovOyB9OwogCQlCQzY0NjQ5NzExRDgy
MzQ5MDA2NDU1QjAgLyogSlNET01TdHJpbmdNYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM2NDY0OTUxMUQ4MjM0OTAwNjQ1NUIwIC8qIEpTRE9N
U3RyaW5nTWFwLmNwcCAqLzsgfTsKIAkJQkM2NDY0OTgxMUQ4MjM0OTAwNjQ1NUIwIC8qIEpTRE9N
U3RyaW5nTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQzY0NjQ5NjExRDgyMzQ5MDA2NDU1QjAgLyogSlNET01TdHJpbmdNYXAuaCAqLzsgfTsKLQkJ
QkM2NDY0OUMxMUQ4MjM4QzAwNjQ1NUIwIC8qIEpTRE9NU3RyaW5nTWFwQ3VzdG9tLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNjQ2NDlCMTFEODIz
OEMwMDY0NTVCMCAvKiBKU0RPTVN0cmluZ01hcEN1c3RvbS5jcHAgKi87IH07CiAJCUJDNjRCNENC
MENCNDI5NUQwMDVGMkI2MiAvKiBDYWNoZWRGb250LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNjRCNEM5MENCNDI5NUQwMDVGMkI2MiAvKiBDYWNo
ZWRGb250LmNwcCAqLzsgfTsKIAkJQkM2NEI0Q0MwQ0I0Mjk1RDAwNUYyQjYyIC8qIENhY2hlZEZv
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNjRC
NENBMENCNDI5NUQwMDVGMkI2MiAvKiBDYWNoZWRGb250LmggKi87IH07CiAJCUJDNjRCNEQ1MENC
NDI5OEEwMDVGMkI2MiAvKiBDU1NGb250RmFjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzY0QjRDRDBDQjQyOThBMDA1RjJCNjIgLyogQ1NTRm9u
dEZhY2UuY3BwICovOyB9OwpAQCAtOTYyNiw3ICs5NjIyLDYgQEAKIAkJNDQ3OTU4MDMxNjQzQjQ3
QjAwMUUwQTdGIC8qIFBhcnNlZENvbnRlbnRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFBhcnNlZENvbnRlbnRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQ0OEEyOUJEMEE0NkQ5Q0IwMDMwNzU5RiAvKiBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNIVE1MT3B0aW9uc0NvbGxlY3Rp
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQ4QTI5QkUwQTQ2RDlDQjAwMzA3
NTlGIC8qIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTQ0OEFEMjdBMEE0ODEzNzkwMDIzRDE3OSAvKiBKU0hUTUxPcHRp
b25zQ29sbGVjdGlvbkN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbkN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQ0OEIxQjc4MEYzQTJGOUIwMDQ3QTlFMiAvKiBUZXh0U2l6ZUFkanVzdG1l
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dFNpemVBZGp1c3RtZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0OTA5OEIxMEY4RjgyNTIwMDc2QTMy
NyAvKiBGZWF0dXJlRGVmaW5lcy54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBh
dGggPSBGZWF0dXJlRGVmaW5lcy54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNDQ5NkUzOUIxMzk4MTM2QzAwM0VFMzJBIC8qIEpTU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTVkdBbmltYXRlTW90
aW9uRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzI0MSw3ICsx
MzIzNiw2IEBACiAJCUFCMjQ3QTZBMEFGRDYzODMwMDNGQTVGRCAvKiBSZW5kZXJTbGlkZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNsaWRlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFCMjQ3QTZCMEFGRDYzODMwMDNGQTVGRCAv
KiBSZW5kZXJTbGlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRl
clNsaWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQjMxQzkxRDEwQUUxQjhF
MDAwQzdCOTIgLyogTGluZUNsYW1wVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTGluZUNsYW1wVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQUI0
Q0I0RUEwQjhCREEzRDAwOUY0MEIwIC8qIEpTSFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSFRNTFNlbGVjdEVsZW1lbnRDdXN0b20u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUI2N0QxQTYwOTdGM0FFMzAwRjkzOTJF
IC8qIFJlbmRlclRleHRDb250cm9sLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBSZW5kZXJUZXh0Q29udHJvbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUFCNjdEMUE3MDk3RjNBRTMwMEY5MzkyRSAvKiBSZW5kZXJUZXh0Q29udHJvbC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyVGV4dENvbnRyb2wuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUI3MTcwODgwQjMxMTgwODAwMTcxMjNFIC8qIFNlYXJj
aFBvcHVwTWVudS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VhcmNoUG9w
dXBNZW51Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDA2OCw3ICsxNDA2Miw2
IEBACiAJCUJDMTI4QjAwMTM3QzhENDYwMENBQzg0NSAvKiBSZW5kZXJHcmlkLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckdyaWQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQzE0MDI4ODBFODM2ODA4MDAzMTk3MTcgLyogU2Nyb2xsYmFy
VGhlbWVDb21wb3NpdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCQzE0MDI4OTBFODM2ODA4MDAzMTk3MTcgLyogU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkMxN0Y5NjUwQjY0RUJCODAwNEE2NUNC
IC8qIEpTSFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTSFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQzFBN0Q5NTE4RkNCNUIwMDA0MjE4NzkgLyogUmVuZGVyTXVs
dGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzFBN0Q5NjE4RkNCNUIwMDA0MjE4NzkgLyogUmVu
ZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMxQkRGMjAxNTZDMTdBOTAwMUMxMjQzIC8qIERPTUVy
cm9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTUVycm9yLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0MjE2LDcgKzE0MjA5LDYgQEAKIAkJ
QkM2NDY0NzkxMUQ4MDBDRDAwNjQ1NUIwIC8qIERPTVN0cmluZ01hcC5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gRE9NU3RyaW5nTWFwLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQkM2NDY0OTUxMUQ4MjM0OTAwNjQ1NUIwIC8qIEpTRE9NU3RyaW5nTWFwLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9NU3RyaW5nTWFwLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM2NDY0OTYxMUQ4MjM0OTAwNjQ1NUIwIC8qIEpTRE9N
U3RyaW5nTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NU3RyaW5n
TWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDNjQ2NDlCMTFEODIzOEMwMDY0
NTVCMCAvKiBKU0RPTVN0cmluZ01hcEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU0RPTVN0cmluZ01hcEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUJDNjRCNEM5MENCNDI5NUQwMDVGMkI2MiAvKiBDYWNoZWRGb250LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hlZEZvbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzY0QjRDQTBDQjQyOTVEMDA1RjJCNjIgLyogQ2Fj
aGVkRm9udC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWRGb250Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNjRCNENEMENCNDI5OEEwMDVGMkI2MiAv
KiBDU1NGb250RmFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBD
U1NGb250RmFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMzY0Miw3ICsy
MzYzNCw2IEBACiAJCQkJREVDMjk3NUQxQjRERUIyQTAwNUY1OTQ1IC8qIEpTQ3VzdG9tRXZlbnRD
dXN0b20uY3BwICovLAogCQkJCTQ5QzdCQThDMTA0MkY1QjEwMDA5RDQ0NyAvKiBKU0RvY3VtZW50
Q3VzdG9tLmNwcCAqLywKIAkJCQlBRERBOTRCRjE5Njg2RjgwMDA0NTMwMjkgLyogSlNEb2N1bWVu
dEN1c3RvbS5oICovLAotCQkJCUJDNjQ2NDlCMTFEODIzOEMwMDY0NTVCMCAvKiBKU0RPTVN0cmlu
Z01hcEN1c3RvbS5jcHAgKi8sCiAJCQkJQkNEOUMyNUUwQzE3QUE2NzAwNUM5MEEyIC8qIEpTRE9N
V2luZG93Q3VzdG9tLmNwcCAqLywKIAkJCQk2NTJGQkJCQjBERTI3Q0I2MDAwMUQzODYgLyogSlNE
T01XaW5kb3dDdXN0b20uaCAqLywKIAkJCQlDMjgwODM0MTFDNkRDOTZBMDAxNDUxQjYgLyogSlNG
b250RmFjZUN1c3RvbS5jcHAgKi8sCkBAIC0yMzY1NSw5ICsyMzY0Niw2IEBACiAJCQkJQkM2RDQ0
QkQwQzA3RUZCNjAwNzJEMkM5IC8qIEpTSFRNTEVtYmVkRWxlbWVudEN1c3RvbS5jcHAgKi8sCiAJ
CQkJQkNENDFBQkEwQzA2MERFODAwQzBFNDQ2IC8qIEpTSFRNTEZyYW1lU2V0RWxlbWVudEN1c3Rv
bS5jcHAgKi8sCiAJCQkJQkMzMDVDQTMwQzA3ODFCQjAwQ0QyMEYwIC8qIEpTSFRNTE9iamVjdEVs
ZW1lbnRDdXN0b20uY3BwICovLAotCQkJCTQ0OEFEMjdBMEE0ODEzNzkwMDIzRDE3OSAvKiBKU0hU
TUxPcHRpb25zQ29sbGVjdGlvbkN1c3RvbS5jcHAgKi8sCi0JCQkJQkMxN0Y5NjUwQjY0RUJCODAw
NEE2NUNCIC8qIEpTSFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwICovLAotCQkJCUFCNENCNEVB
MEI4QkRBM0QwMDlGNDBCMCAvKiBKU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmggKi8sCiAJCQkJ
RDZGNzk2MEMxNjZGRkVDRTAwNzZERDE4IC8qIEpTSFRNTFRlbXBsYXRlRWxlbWVudEN1c3RvbS5j
cHAgKi8sCiAJCQkJN0E3NEVDQkMxMDE4MzlEQTAwQkY5MzlFIC8qIEpTSW5zcGVjdG9yRnJvbnRl
bmRIb3N0Q3VzdG9tLmNwcCAqLywKIAkJCQlCQ0UxQzQzRjBEOTgzMEY0MDAzQjAyRjIgLyogSlNM
b2NhdGlvbkN1c3RvbS5jcHAgKi8sCkBAIC0yODA4NSw3ICsyODA3Myw2IEBACiAJCQkJMUFFMkFF
QzgwQTFEMjk3QjAwQjQyQjI1IC8qIEpTSFRNTFF1b3RlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUFFMkFCQUQwQTFDRTkwNTAwQjQyQjI1IC8qIEpTSFRNTFNjcmlwdEVsZW1lbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCUUxRTZFRUE4MEI2MjhEQjMwMDVGMkY3MCAvKiBKU0hUTUxTZWxl
Y3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQlBQjRDQjRFQjBCOEJEQTNEMDA5RjQwQjAg
LyogSlNIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUI2OUQz
QjkxQjk5MTAwNzAwRTM1MTJCIC8qIEpTSFRNTFNsb3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlFNDQ2MTQzQzBDRDY4OUNDMDBGQURBNzUgLyogSlNIVE1MU291cmNlRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTc1MkQzOEUxNDEzMTA0QjAwMzMwNUJEIC8qIEpTSFRNTFNwYW5F
bGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTMxOTM3LDcgKzMxOTI0LDYgQEAKIAkJCQlCQzVB
ODZCNTBDMzM2N0U4MDBFRUE2NDkgLyogSlNET01TZWxlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQzUxMzdDRjIxMUE1ODM3ODAwNEFEQjk5IC8qIEpTRE9NU3RyaW5nTGlzdC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCQzY0NjQ5NzExRDgyMzQ5MDA2NDU1QjAgLyogSlNET01TdHJpbmdN
YXAuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQkM2NDY0OUMxMUQ4MjM4QzAwNjQ1NUIwIC8qIEpT
RE9NU3RyaW5nTWFwQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc2OTQ1NjNDMTIxNEQ5
N0MwMDA3Q0JBRSAvKiBKU0RPTVRva2VuTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRTM3
RTAwNTEyREJDNUE0MDBBNkIyMzMgLyogSlNET01VUkwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQwM0JBMEMwOUVCMThDNzAwNzk3QzdGIC8qIEpTRE9NV2luZG93LmNwcCBpbiBTb3VyY2VzICov
LApAQCAtMzIwNjEsNyArMzIwNDcsNiBAQAogCQkJCUE4MEU3RTlDMEExQTgzRTMwMDdGQjhDNSAv
KiBKU0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgwRTdFOUEw
QTFBODNFMzAwN0ZCOEM1IC8qIEpTSFRNTE9wdGlvbkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNDQ4QTI5QzAwQTQ2RDlDQjAwMzA3NTlGIC8qIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9u
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ0OEFEMjdDMEE0ODEzN0EwMDIzRDE3OSAvKiBKU0hU
TUxPcHRpb25zQ29sbGVjdGlvbkN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0QUQwMTcz
QzEyN0U4Mjg2MDAxNTAzNUYgLyogSlNIVE1MT3V0cHV0RWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxQUUyQUJBNjBBMUNFOTA1MDBCNDJCMjUgLyogSlNIVE1MUGFyYWdyYXBoRWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUUyQUJBODBBMUNFOTA1MDBCNDJCMjUgLyogSlNI
VE1MUGFyYW1FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzIwNzEsNyArMzIwNTYsNiBA
QAogCQkJCTFBRTJBRUM3MEExRDI5N0IwMEI0MkIyNSAvKiBKU0hUTUxRdW90ZUVsZW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMUFFMkFCQUMwQTFDRTkwNTAwQjQyQjI1IC8qIEpTSFRNTFNj
cmlwdEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFFNkVFQTQwQjYyOERBODAwNUYy
RjcwIC8qIEpTSFRNTFNlbGVjdEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQkMxN0Y5
NjYwQjY0RUJCODAwNEE2NUNCIC8qIEpTSFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOUI2OUQzQjgxQjk5MTAwNzAwRTM1MTJCIC8qIEpTSFRNTFNsb3RFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0NDYxNDNCMENENjg5Q0MwMEZBREE3NSAvKiBK
U0hUTUxTb3VyY2VFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3NTJEMzhEMTQxMzEw
NEIwMDMzMDVCRCAvKiBKU0hUTUxTcGFuRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmluZGluZ3NBbGxJbk9uZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCaW5kaW5nc0FsbEluT25lLmNw
cAkocmV2aXNpb24gMjE3NzY3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCaW5k
aW5nc0FsbEluT25lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNiBAQAogI2luY2x1
ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmNwcCIKICNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdFRh
c2suY3BwIgogI2luY2x1ZGUgIkpTRE9NUHJvbWlzZURlZmVycmVkLmNwcCIKLSNpbmNsdWRlICJK
U0RPTVN0cmluZ01hcEN1c3RvbS5jcHAiCiAjaW5jbHVkZSAiSlNET01XaW5kb3dCYXNlLmNwcCIK
ICNpbmNsdWRlICJKU0RPTVdpbmRvd0N1c3RvbS5jcHAiCiAjaW5jbHVkZSAiSlNET01XaW5kb3dQ
cm9wZXJ0aWVzLmNwcCIKQEAgLTc0LDggKzczLDYgQEAKICNpbmNsdWRlICJKU0hUTUxFbWJlZEVs
ZW1lbnRDdXN0b20uY3BwIgogI2luY2x1ZGUgIkpTSFRNTEZyYW1lU2V0RWxlbWVudEN1c3RvbS5j
cHAiCiAjaW5jbHVkZSAiSlNIVE1MT2JqZWN0RWxlbWVudEN1c3RvbS5jcHAiCi0jaW5jbHVkZSAi
SlNIVE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwIgotI2luY2x1ZGUgIkpTSFRNTFNlbGVj
dEVsZW1lbnRDdXN0b20uY3BwIgogI2luY2x1ZGUgIkpTSFRNTFRlbXBsYXRlRWxlbWVudEN1c3Rv
bS5jcHAiCiAjaW5jbHVkZSAiSlNIaXN0b3J5Q3VzdG9tLmNwcCIKICNpbmNsdWRlICJKU0ltYWdl
RGF0YUN1c3RvbS5jcHAiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVN0
cmluZ01hcEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01TdHJpbmdNYXBDdXN0b20uY3BwCShyZXZpc2lvbiAyMTc3NjcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVN0cmluZ01hcEN1c3RvbS5jcHAJKG5vbmV4aXN0ZW50
KQpAQCAtMSw2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkpTRE9NU3RyaW5nTWFwLmgiCi0KLSNpbmNsdWRlICJDdXN0b21FbGVtZW50
UmVhY3Rpb25RdWV1ZS5oIgotI2luY2x1ZGUgIkRPTVN0cmluZ01hcC5oIgotI2luY2x1ZGUgIkpT
RE9NQ29udmVydC5oIgotI2luY2x1ZGUgIkpTTm9kZS5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSWRl
bnRpZmllcklubGluZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KLQot
dXNpbmcgbmFtZXNwYWNlIEpTQzsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIEpTRE9N
U3RyaW5nTWFwOjpwdXREZWxlZ2F0ZShFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmLCBib29sJiBwdXRSZXN1
bHQpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgaWYgKHByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjayBj
dXN0b21FbGVtZW50UmVhY3Rpb25TdGFjazsKLQotICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9IHZh
bHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB0
cnVlKTsKLQotICAgIGF1dG8gcmVzdWx0ID0gd3JhcHBlZCgpLnNldEl0ZW0ocHJvcGVydHlOYW1l
VG9TdHJpbmcocHJvcGVydHlOYW1lKSwgV1RGTW92ZShzdHJpbmdWYWx1ZSkpOwotICAgIGlmIChy
ZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKCpzdGF0
ZSwgc2NvcGUsIHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICBwdXRSZXN1bHQgPSB0cnVlOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTVN0cmluZ01hcEN1c3RvbS5jcHAKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxl
dGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxP
cHRpb25zQ29sbGVjdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwCShyZXZpc2lvbiAy
MTc3NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxPcHRpb25zQ29sbGVj
dGlvbkN1c3RvbS5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTSFRNTE9wdGlvbnNDb2xsZWN0aW9u
LmgiCi0KLSNpbmNsdWRlICJDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5oIgotI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJKU0hUTUxPcHRpb25FbGVtZW50LmgiCi0jaW5j
bHVkZSAiSlNIVE1MU2VsZWN0RWxlbWVudC5oIgotI2luY2x1ZGUgIkpTSFRNTFNlbGVjdEVsZW1l
bnRDdXN0b20uaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi11c2luZyBuYW1lc3Bh
Y2UgSlNDOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgSlNIVE1MT3B0aW9uc0NvbGxl
Y3Rpb246OmluZGV4U2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBKU1Zh
bHVlIHZhbHVlKQotewotICAgIEN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrIGN1c3RvbUVsZW1l
bnRSZWFjdGlvblN0YWNrOwotICAgIHNlbGVjdEVsZW1lbnRJbmRleFNldHRlcigqc3RhdGUsIHdy
YXBwZWQoKS5zZWxlY3RFbGVtZW50KCksIGluZGV4LCB2YWx1ZSk7Ci19Ci0KLX0KClByb3BlcnR5
IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTE9wdGlvbnNDb2xs
ZWN0aW9uQ3VzdG9tLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEg
KzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFNlbGVjdEVsZW1l
bnRDdXN0b20uY3BwCShyZXZpc2lvbiAyMTc3NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDU0
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFsZXhleSBQcm9za3VyeWFr
b3YgKGFwQHdlYmtpdC5vcmcpCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU0hUTUxT
ZWxlY3RFbGVtZW50Q3VzdG9tLmgiCi0KLSNpbmNsdWRlICJDdXN0b21FbGVtZW50UmVhY3Rpb25R
dWV1ZS5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKLSNpbmNsdWRlICJIVE1MT3B0aW9uRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxTZWxlY3RF
bGVtZW50LmgiCi0jaW5jbHVkZSAiSlNIVE1MT3B0aW9uRWxlbWVudC5oIgotI2luY2x1ZGUgIkpT
SFRNTFNlbGVjdEVsZW1lbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1l
c3BhY2UgSlNDOwotdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKLQotdm9pZCBzZWxlY3RFbGVt
ZW50SW5kZXhTZXR0ZXIoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBIVE1MU2VsZWN0RWxlbWVudCYg
ZWxlbWVudCwgdW5zaWduZWQgaW5kZXgsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYg
dm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotCi0gICAgYXV0byogb3B0aW9uID0gY29udmVydDxJRExOdWxsYWJsZTxJRExJbnRl
cmZhY2U8SFRNTE9wdGlvbkVsZW1lbnQ+Pj4oc3RhdGUsIHZhbHVlKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHZvaWQoKSk7Ci0KLSAgICBwcm9wYWdhdGVFeGNlcHRpb24o
c3RhdGUsIHRocm93U2NvcGUsIGVsZW1lbnQuc2V0SXRlbShpbmRleCwgb3B0aW9uKSk7Ci19Ci0K
LXZvaWQgSlNIVE1MU2VsZWN0RWxlbWVudDo6aW5kZXhTZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCB1bnNpZ25lZCBpbmRleCwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAgIEN1c3RvbUVs
ZW1lbnRSZWFjdGlvblN0YWNrIGN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrOwotICAgIHNlbGVj
dEVsZW1lbnRJbmRleFNldHRlcigqc3RhdGUsIHdyYXBwZWQoKSwgaW5kZXgsIHZhbHVlKTsKLX0K
LQotfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNI
VE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46ZW9sLXN0
eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxTZWxlY3RFbGVtZW50Q3Vz
dG9tLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MU2Vs
ZWN0RWxlbWVudEN1c3RvbS5oCShyZXZpc2lvbiAyMTc3NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0hUTUxTZWxlY3RFbGVtZW50Q3VzdG9tLmgJKG5vbmV4aXN0ZW50KQpAQCAt
MSw0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
Ci0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0gCi0jcHJhZ21hIG9uY2UKLQotbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBFeGVjU3RhdGU7
Ci1jbGFzcyBKU1ZhbHVlOwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEhUTUxT
ZWxlY3RFbGVtZW50OwotCi12b2lkIHNlbGVjdEVsZW1lbnRJbmRleFNldHRlcihKU0M6OkV4ZWNT
dGF0ZSYsIEhUTUxTZWxlY3RFbGVtZW50JiwgdW5zaWduZWQgaW5kZXgsIEpTQzo6SlNWYWx1ZSk7
Ci0KLX0KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5
bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNw
cAkocmV2aXNpb24gMjE3NzY3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdG9y
YWdlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMzQgKzYwLDQgQEAgdm9pZCBKU1N0
b3JhZ2U6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYgogICAgIEJhc2U6OmdldE93blByb3BlcnR5
TmFtZXMoJnRoaXNPYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKIH0KIAotYm9v
bCBKU1N0b3JhZ2U6OnB1dERlbGVnYXRlKEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYsIGJvb2wmIHB1dFJl
c3VsdCkKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBpZiAocHJvcGVydHlOYW1lLmlzU3ltYm9sKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIE9ubHkgcGVyZm9ybSB0aGUgY3VzdG9t
IHB1dCBpZiB0aGUgb2JqZWN0IGRvZXNuJ3QgaGF2ZSBhIG5hdGl2ZSBwcm9wZXJ0eSBieSB0aGlz
IG5hbWUuCi0gICAgLy8gU2luY2UgaGFzUHJvcGVydHkoKSB3b3VsZCBlbmQgdXAgY2FsbGluZyBj
YW5HZXRJdGVtc0Zvck5hbWUoKSBhbmQgYmUgZm9vbGVkLCB3ZSBuZWVkIHRvIGNoZWNrCi0gICAg
Ly8gdGhlIG5hdGl2ZSBwcm9wZXJ0eSBzbG90cyBtYW51YWxseS4KLSAgICBQcm9wZXJ0eVNsb3Qg
c2xvdCB7IHRoaXMsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Qcm9w
ZXJ0eSB9OwotCi0gICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzLT5nZXRQcm90b3R5cGVEaXJl
Y3QoKTsKLSAgICBpZiAocHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QocHJvdG90eXBl
KS0+Z2V0UHJvcGVydHlTbG90KHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIHN0cmluZ1ZhbHVlID0gY29udmVydDxJRExET01TdHJp
bmc+KCpzdGF0ZSwgdmFsdWUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHRydWUp
OwotCi0gICAgYXV0byBzZXRJdGVtUmVzdWx0ID0gd3JhcHBlZCgpLnNldEl0ZW0ocHJvcGVydHlO
YW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgc3RyaW5nVmFsdWUpOwotICAgIGlmIChzZXRJdGVt
UmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbigqc3Rh
dGUsIHNjb3BlLCBzZXRJdGVtUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIHB1dFJlc3VsdCA9IHRydWU7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAyMTc3
NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bQkod29ya2luZyBjb3B5KQpAQCAtNDA2LDE0MyArNDA2LDEzOCBAQCBzdWIgU2hvdWxkVXNlR2xv
YmFsT2JqZWN0UHJvdG90eXBlCiAKIHN1YiBHZW5lcmF0ZUluZGV4ZWRHZXR0ZXIKIHsKLSAgICBt
eSAoJGludGVyZmFjZSwgJGluZGV4ZWRHZXR0ZXJPcGVyYXRpb24pID0gQF87Ci0KLSAgICBteSBA
b3V0cHV0ID0gKCk7Ci0KKyAgICBteSAoJG91dHB1dEFycmF5LCAkaW5kZW50LCAkaW50ZXJmYWNl
LCAkaW5kZXhlZEdldHRlck9wZXJhdGlvbikgPSBAXzsKKyAgICAKICAgICBteSBAYXR0cmlidXRl
cyA9ICgpOwotICAgIHB1c2goQGF0dHJpYnV0ZXMsICJSZWFkT25seSIpIGlmICEkaW50ZXJmYWNl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21OYW1lZFNldHRlcn07CisgICAgcHVzaChAYXR0
cmlidXRlcywgIlJlYWRPbmx5IikgaWYgIUdldEluZGV4ZWRTZXR0ZXJPcGVyYXRpb24oJGludGVy
ZmFjZSkgJiYgISRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0N1c3RvbU5hbWVkU2V0
dGVyfTsKIAogICAgIG15ICRhdHRyaWJ1dGVTdHJpbmcgPSAoKEBhdHRyaWJ1dGVzID4gMCkgPyBq
b2luKCIgfCAiLCBAYXR0cmlidXRlcykgOiAiMCIpOwogCi0gICAgbXkgJGluZGV4ZWRHZXR0ZXJG
dW5jdGlvbk5hbWUgPSAkaW5kZXhlZEdldHRlck9wZXJhdGlvbi0+bmFtZSB8fCAiaXRlbSI7Cisg
ICAgbXkgJGluZGV4ZWRHZXR0ZXJGdW5jdGlvbk5hbWUgPSAkaW5kZXhlZEdldHRlck9wZXJhdGlv
bi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SW1wbGVtZW50ZWRBc30gfHwgJGluZGV4ZWRHZXR0ZXJP
cGVyYXRpb24tPm5hbWUgfHwgIml0ZW0iOwogICAgIG15ICRuYXRpdmVUb0pTQ29udmVyc2lvbiA9
IE5hdGl2ZVRvSlNWYWx1ZVVzaW5nUG9pbnRlcnMoJGluZGV4ZWRHZXR0ZXJPcGVyYXRpb24sICRp
bnRlcmZhY2UsICJ0aGlzT2JqZWN0LT53cmFwcGVkKCkuJHtpbmRleGVkR2V0dGVyRnVuY3Rpb25O
YW1lfShpbmRleCkiLCAiKnRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpIik7CiAKLSAgICBwdXNo
KEBvdXRwdXQsICIgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgJHthdHRyaWJ1dGVT
dHJpbmd9LCAke25hdGl2ZVRvSlNDb252ZXJzaW9ufSk7XG4iKTsKLSAgICBwdXNoKEBvdXRwdXQs
ICIgICAgICAgIHJldHVybiB0cnVlO1xuIik7Ci0KLSAgICByZXR1cm4gQG91dHB1dDsKKyAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQgLiAic2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCAk
e2F0dHJpYnV0ZVN0cmluZ30sICR7bmF0aXZlVG9KU0NvbnZlcnNpb259KTtcbiIpOworICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgJGluZGVudCAuICJyZXR1cm4gdHJ1ZTtcbiIpOwogfQogCiBzdWIg
R2VuZXJhdGVOYW1lZEdldHRlcgogewotICAgIG15ICgkaW50ZXJmYWNlLCAkbmFtZWRHZXR0ZXJP
cGVyYXRpb24pID0gQF87Ci0KLSAgICBteSBAb3V0cHV0ID0gKCk7CisgICAgbXkgKCRvdXRwdXRB
cnJheSwgJGluZGVudCwgJGludGVyZmFjZSwgJG5hbWVkR2V0dGVyT3BlcmF0aW9uKSA9IEBfOwog
CiAgICAgbXkgQGF0dHJpYnV0ZXMgPSAoKTsKLSAgICBwdXNoKEBhdHRyaWJ1dGVzLCAiUmVhZE9u
bHkiKSBpZiAhJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q3VzdG9tTmFtZWRTZXR0
ZXJ9OworICAgIHB1c2goQGF0dHJpYnV0ZXMsICJSZWFkT25seSIpIGlmICFHZXROYW1lZFNldHRl
ck9wZXJhdGlvbigkaW50ZXJmYWNlKSAmJiAhJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57Q3VzdG9tTmFtZWRTZXR0ZXJ9OwogICAgIHB1c2goQGF0dHJpYnV0ZXMsICJEb250RW51bSIp
IGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0xlZ2FjeVVuZW51bWVyYWJsZU5h
bWVkUHJvcGVydGllc307CiAKICAgICBteSAkYXR0cmlidXRlU3RyaW5nID0gKChAYXR0cmlidXRl
cyA+IDApID8gam9pbigiIHwgIiwgQGF0dHJpYnV0ZXMpIDogIjAiKTsKIAogICAgIGlmICgkaW50
ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21OYW1lZEdldHRlcn0pIHsKLSAgICAg
ICAgcHVzaChAb3V0cHV0LCAiICAgICAgICBKU1ZhbHVlIHZhbHVlO1xuIik7Ci0gICAgICAgIHB1
c2goQG91dHB1dCwgIiAgICAgICAgaWYgKHRoaXNPYmplY3QtPm5hbWVHZXR0ZXIoc3RhdGUsIHBy
b3BlcnR5TmFtZSwgdmFsdWUpKSB7XG4iKTsKLSAgICAgICAgcHVzaChAb3V0cHV0LCAiICAgICAg
ICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCAke2F0dHJpYnV0ZVN0cmluZ30sIHZhbHVl
KTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQgLiAiSlNWYWx1ZSB2
YWx1ZTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQgLiAiaWYgKHRo
aXNPYmplY3QtPm5hbWVHZXR0ZXIoc3RhdGUsIHByb3BlcnR5TmFtZSwgdmFsdWUpKSB7XG4iKTsK
KyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkaW5kZW50IC4gIiAgICBzbG90LnNldFZhbHVl
KHRoaXNPYmplY3QsICR7YXR0cmlidXRlU3RyaW5nfSwgdmFsdWUpO1xuIik7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgbXkgJG5hbWVkR2V0dGVyRnVuY3Rpb25OYW1lID0gJG5hbWVkR2V0dGVyT3Bl
cmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntJbXBsZW1lbnRlZEFzfSB8fCAkbmFtZWRHZXR0
ZXJPcGVyYXRpb24tPm5hbWUgfHwgIm5hbWVkSXRlbSI7CiAgICAgICAgIG15ICRpdGVtVmFyaWFi
bGUgPSAiaXRlbSI7Ci0gICAgICAgIHB1c2goQG91dHB1dCwgIiAgICAgICAgYXV0byBpdGVtID0g
dGhpc09iamVjdC0+d3JhcHBlZCgpLiR7bmFtZWRHZXR0ZXJGdW5jdGlvbk5hbWV9KHByb3BlcnR5
TmFtZVRvQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZSkpO1xuIik7CisgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgJGluZGVudCAuICJhdXRvIGl0ZW0gPSB0aGlzT2JqZWN0LT53cmFwcGVkKCku
JHtuYW1lZEdldHRlckZ1bmN0aW9uTmFtZX0ocHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcocHJv
cGVydHlOYW1lKSk7XG4iKTsKIAogICAgICAgICBpZiAoJG5hbWVkR2V0dGVyT3BlcmF0aW9uLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPntNYXlUaHJvd0V4Y2VwdGlvbn0pIHsKLSAgICAgICAgICAgIHB1
c2goQG91dHB1dCwgIiAgICAgICAgaWYgKGl0ZW0uaGFzRXhjZXB0aW9uKCkpIHtcbiIpOwotICAg
ICAgICAgICAgcHVzaChAb3V0cHV0LCAiICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQG91
dHB1dCwgIiAgICAgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbigqc3RhdGUsIHRocm93U2NvcGUs
IGl0ZW0ucmVsZWFzZUV4Y2VwdGlvbigpKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAb3V0cHV0
LCAiICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQG91dHB1
dCwgIiAgICAgICAgfVxuXG4iKTsKLSAgICAgICAgICAgIHB1c2goQG91dHB1dCwgIiAgICAgICAg
YXV0byBpdGVtVmFsdWUgPSBpdGVtLnJlbGVhc2VSZXR1cm5WYWx1ZSgpO1xuIik7CisgICAgICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQgLiAiaWYgKGl0ZW0uaGFzRXhjZXB0aW9u
KCkpIHtcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkaW5kZW50IC4gIiAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTtcbiIp
OworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkaW5kZW50IC4gIiAgICBwcm9wYWdh
dGVFeGNlcHRpb24oKnN0YXRlLCB0aHJvd1Njb3BlLCBpdGVtLnJlbGVhc2VFeGNlcHRpb24oKSk7
XG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGluZGVudCAuICIgICAgcmV0
dXJuIHRydWU7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGluZGVudCAu
ICJ9XG5cbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkaW5kZW50IC4gImF1
dG8gaXRlbVZhbHVlID0gaXRlbS5yZWxlYXNlUmV0dXJuVmFsdWUoKTtcbiIpOwogCiAgICAgICAg
ICAgICAkaXRlbVZhcmlhYmxlID0gIml0ZW1WYWx1ZSI7CiAgICAgICAgIH0KIAogICAgICAgICBt
eSAkSURMVHlwZSA9IEdldElETFR5cGUoJGludGVyZmFjZSwgJG5hbWVkR2V0dGVyT3BlcmF0aW9u
LT50eXBlKTsKLSAgICAgICAgcHVzaChAb3V0cHV0LCAiICAgICAgICBpZiAoISR7SURMVHlwZX06
OmlzTnVsbFZhbHVlKCR7aXRlbVZhcmlhYmxlfSkpIHtcbiIpOwotCiAgICAgICAgIG15ICRuYXRp
dmVUb0pTQ29udmVyc2lvbiA9IE5hdGl2ZVRvSlNWYWx1ZVVzaW5nUG9pbnRlcnMoJG5hbWVkR2V0
dGVyT3BlcmF0aW9uLCAkaW50ZXJmYWNlLCAkaXRlbVZhcmlhYmxlLCAiKnRoaXNPYmplY3QtPmds
b2JhbE9iamVjdCgpIiwgMSk7Ci0gICAgICAgIHB1c2goQG91dHB1dCwgIiAgICAgICAgICAgIHNs
b3Quc2V0VmFsdWUodGhpc09iamVjdCwgJHthdHRyaWJ1dGVTdHJpbmd9LCAke25hdGl2ZVRvSlND
b252ZXJzaW9ufSk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkaW5kZW50IC4g
ImlmICghJHtJRExUeXBlfTo6aXNOdWxsVmFsdWUoJHtpdGVtVmFyaWFibGV9KSkge1xuIik7Cisg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGluZGVudCAuICIgICAgc2xvdC5zZXRWYWx1ZSh0
aGlzT2JqZWN0LCAke2F0dHJpYnV0ZVN0cmluZ30sICR7bmF0aXZlVG9KU0NvbnZlcnNpb259KTtc
biIpOwogICAgIH0KICAgICAKLSAgICBwdXNoKEBvdXRwdXQsICIgICAgICAgICAgICByZXR1cm4g
dHJ1ZTtcbiIpOwotICAgIHB1c2goQG91dHB1dCwgIiAgICAgICAgfVxuIik7Ci0KLSAgICByZXR1
cm4gQG91dHB1dDsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQgLiAiICAgIHJldHVy
biB0cnVlO1xuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAkaW5kZW50IC4gIn1cbiIpOwog
fQogCiBzdWIgR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eVNsb3RCb2R5CiB7Ci0gICAgbXkgKCRpbnRl
cmZhY2UsICRjbGFzc05hbWUsICRpbmRleGVkR2V0dGVyT3BlcmF0aW9uLCAkbmFtZWRHZXR0ZXJP
cGVyYXRpb24pID0gQF87Ci0KLSAgICBteSBAb3V0cHV0ID0gKCk7Ci0KKyAgICBteSAoJG91dHB1
dEFycmF5LCAkaW50ZXJmYWNlLCAkY2xhc3NOYW1lKSA9IEBfOworICAgIAorICAgIHJldHVybiBp
ZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21HZXRPd25Qcm9wZXJ0eVNs
b3R9OworICAgIAorICAgIG15ICRuYW1lZEdldHRlck9wZXJhdGlvbiA9IEdldE5hbWVkR2V0dGVy
T3BlcmF0aW9uKCRpbnRlcmZhY2UpOworICAgIG15ICRpbmRleGVkR2V0dGVyT3BlcmF0aW9uID0g
R2V0SW5kZXhlZEdldHRlck9wZXJhdGlvbigkaW50ZXJmYWNlKTsKKyAgICAKICAgICBteSAkb3du
UHJvcGVydHlDaGVjayA9IHN1YiB7Ci0gICAgICAgIHB1c2goQG91dHB1dCwgIiAgICBpZiAoQmFz
ZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNs
b3QpKVxuIik7Ci0gICAgICAgIHB1c2goQG91dHB1dCwgIiAgICAgICAgcmV0dXJuIHRydWU7XG4i
KTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChCYXNlOjpnZXRPd25Qcm9w
ZXJ0eVNsb3QodGhpc09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpXG4iKTsKKyAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gdHJ1ZTtcbiIpOwogICAg
IH07CiAKICAgICAjIEZJWE1FOiBBcyBwZXIgdGhlIFdlYiBJREwgc3BlY2lmaWNhdGlvbiwgdGhl
IHByb3RvdHlwZSBjaGVjayBpcyBzdXBwb3NlZCB0byBza2lwICJuYW1lZCBwcm9wZXJ0aWVzIG9i
amVjdHMiOgogICAgICMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jZGZuLW5hbWVk
LXByb3BlcnR5LXZpc2liaWxpdHkKICAgICAjIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJp
ZGwvI2Rmbi1uYW1lZC1wcm9wZXJ0aWVzLW9iamVjdAogICAgIG15ICRwcm90b3R5cGVDaGVjayA9
IHN1YiB7Ci0gICAgICAgIHB1c2goQG91dHB1dCwgIiAgICBKU1ZhbHVlIHByb3RvID0gdGhpc09i
amVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KCk7XG4iKTsKLSAgICAgICAgcHVzaChAb3V0cHV0LCAi
ICAgIGlmIChwcm90by5pc09iamVjdCgpICYmIGpzQ2FzdDxKU09iamVjdCo+KHByb3RvKS0+aGFz
UHJvcGVydHkoc3RhdGUsIHByb3BlcnR5TmFtZSkpXG4iKTsKLSAgICAgICAgcHVzaChAb3V0cHV0
LCAiICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgSlNWYWx1ZSBwcm90byA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdCgp
O1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAocHJvdG8uaXNPYmpl
Y3QoKSAmJiBqc0Nhc3Q8SlNPYmplY3QqPihwcm90byktPmhhc1Byb3BlcnR5KHN0YXRlLCBwcm9w
ZXJ0eU5hbWUpKVxuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0
dXJuIGZhbHNlO1xuXG4iKTsKICAgICB9OwogCi0gICAgcHVzaChAb3V0cHV0LCAiYm9vbCAke2Ns
YXNzTmFtZX06OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpXG4i
KTsKLSAgICBwdXNoKEBvdXRwdXQsICJ7XG4iKTsKLSAgICBwdXNoKEBvdXRwdXQsICIgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihvYmplY3QpO1xuIik7Ci0gICAg
cHVzaChAb3V0cHV0LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTtcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgImJvb2wgJHtjbGFzc05hbWV9
OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KVxuIik7CisgICAg
cHVzaChAJG91dHB1dEFycmF5LCAie1xuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05hbWV9Kj4ob2JqZWN0KTtcbiIpOwor
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7XG4iKTsKIAogCiAgICAgaWYgKCRpbmRleGVkR2V0dGVyT3BlcmF0
aW9uKSB7Ci0gICAgICAgIHB1c2goQG91dHB1dCwgIiAgICBhdXRvIG9wdGlvbmFsSW5kZXggPSBw
YXJzZUluZGV4KHByb3BlcnR5TmFtZSk7XG4iKTsKLSAgICAgICAgcHVzaChAb3V0cHV0LCAiICAg
IGlmIChvcHRpb25hbEluZGV4ICYmIG9wdGlvbmFsSW5kZXgudmFsdWUoKSA8IHRoaXNPYmplY3Qt
PndyYXBwZWQoKS5sZW5ndGgoKSkge1xuIik7Ci0gICAgICAgIHB1c2goQG91dHB1dCwgIiAgICAg
ICAgYXV0byBpbmRleCA9IG9wdGlvbmFsSW5kZXgudmFsdWUoKTtcbiIpOwotICAgICAgICBwdXNo
KEBvdXRwdXQsIEdlbmVyYXRlSW5kZXhlZEdldHRlcigkaW50ZXJmYWNlLCAkaW5kZXhlZEdldHRl
ck9wZXJhdGlvbikpOwotICAgICAgICBwdXNoKEBvdXRwdXQsICIgICAgfVxuIik7CisgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvIG9wdGlvbmFsSW5kZXggPSBwYXJzZUluZGV4
KHByb3BlcnR5TmFtZSk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlm
IChvcHRpb25hbEluZGV4ICYmIG9wdGlvbmFsSW5kZXgudmFsdWUoKSA8IHRoaXNPYmplY3QtPndy
YXBwZWQoKS5sZW5ndGgoKSkge1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICAgICAgYXV0byBpbmRleCA9IG9wdGlvbmFsSW5kZXgudmFsdWUoKTtcbiIpOworICAgICAgICBH
ZW5lcmF0ZUluZGV4ZWRHZXR0ZXIoJG91dHB1dEFycmF5LCAiICAgICAgICAiLCAkaW50ZXJmYWNl
LCAkaW5kZXhlZEdldHRlck9wZXJhdGlvbik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICB9XG4iKTsKICAgICB9CiAKICAgICBteSAkaGFzTmFtZWRHZXR0ZXIgPSAkbmFtZWRHZXR0
ZXJPcGVyYXRpb24gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q3VzdG9tTmFt
ZWRHZXR0ZXJ9OwogICAgIGlmICgkaGFzTmFtZWRHZXR0ZXIpIHsKLSAgICAgICAgaWYgKCEkaW50
ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntPdmVycmlkZUJ1aWx0aW5zfSkgeworICAgICAg
ICBpZiAoISRjb2RlR2VuZXJhdG9yLT5Jbmhlcml0c0V4dGVuZGVkQXR0cmlidXRlKCRpbnRlcmZh
Y2UsICJPdmVycmlkZUJ1aWx0aW5zIikpIHsKICAgICAgICAgICAgICYkb3duUHJvcGVydHlDaGVj
aygpOwogICAgICAgICAgICAgJiRwcm90b3R5cGVDaGVjaygpOwogICAgICAgICB9CiAgICAgICAg
IGlmICgkaW5kZXhlZEdldHRlck9wZXJhdGlvbikgewotICAgICAgICAgICAgcHVzaChAb3V0cHV0
LCAiICAgIGlmICghb3B0aW9uYWxJbmRleCAmJiB0aGlzT2JqZWN0LT5jbGFzc0luZm8oKSA9PSBp
bmZvKCkgJiYgIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7XG4iKTsKKyAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoIW9wdGlvbmFsSW5kZXggJiYgdGhpc09iamVjdC0+
Y2xhc3NJbmZvKCkgPT0gaW5mbygpICYmICFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkge1xuIik7
CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwdXNoKEBvdXRwdXQsICIgICAgaWYgKHRo
aXNPYmplY3QtPmNsYXNzSW5mbygpID09IGluZm8oKSAmJiAhcHJvcGVydHlOYW1lLmlzU3ltYm9s
KCkpIHtcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmICh0aGlz
T2JqZWN0LT5jbGFzc0luZm8oKSA9PSBpbmZvKCkgJiYgIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgp
KSB7XG4iKTsKICAgICAgICAgfQotICAgICAgICBwdXNoKEBvdXRwdXQsIEdlbmVyYXRlTmFtZWRH
ZXR0ZXIoJGludGVyZmFjZSwgJG5hbWVkR2V0dGVyT3BlcmF0aW9uKSk7Ci0gICAgICAgIHB1c2go
QG91dHB1dCwgIiAgICB9XG4iKTsKKyAgICAgICAgR2VuZXJhdGVOYW1lZEdldHRlcigkb3V0cHV0
QXJyYXksICIgICAgICAgICIsICRpbnRlcmZhY2UsICRuYW1lZEdldHRlck9wZXJhdGlvbik7Cisg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB9XG4iKTsKICAgICB9CiAKLSAgICBpZiAo
JGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNs
b3RBbmREZXNjcmlwdG9yfSkgewotICAgICAgICBwdXNoKEBvdXRwdXQsICIgICAgaWYgKHRoaXNP
YmplY3QtPmdldE93blByb3BlcnR5U2xvdERlbGVnYXRlKHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNs
b3QpKVxuIik7Ci0gICAgICAgIHB1c2goQG91dHB1dCwgIiAgICAgICAgcmV0dXJuIHRydWU7XG4i
KTsKKyAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q3VzdG9tR2V0T3du
UHJvcGVydHlTbG90QW5kRGVzY3JpcHRvcn0pIHsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIGlmICh0aGlzT2JqZWN0LT5nZXRPd25Qcm9wZXJ0eVNsb3REZWxlZ2F0ZShzdGF0ZSwg
cHJvcGVydHlOYW1lLCBzbG90KSlcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgICAgIHJldHVybiB0cnVlO1xuIik7CiAgICAgfQogCi0gICAgaWYgKCEkaGFzTmFtZWRHZXR0
ZXIgfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57T3ZlcnJpZGVCdWlsdGluc30p
IHsKKyAgICBpZiAoISRoYXNOYW1lZEdldHRlciB8fCAkY29kZUdlbmVyYXRvci0+SW5oZXJpdHNF
eHRlbmRlZEF0dHJpYnV0ZSgkaW50ZXJmYWNlLCAiT3ZlcnJpZGVCdWlsdGlucyIpKSB7CiAgICAg
ICAgICYkb3duUHJvcGVydHlDaGVjaygpOwogICAgIH0KIAotICAgIHB1c2goQG91dHB1dCwgIiAg
ICByZXR1cm4gZmFsc2U7XG4iKTsKLSAgICBwdXNoKEBvdXRwdXQsICJ9XG5cbiIpOwotCi0gICAg
cmV0dXJuIEBvdXRwdXQ7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIHJldHVybiBmYWxz
ZTtcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIn1cblxuIik7CiB9CiAKIHN1YiBHZW5l
cmF0ZUdldE93blByb3BlcnR5U2xvdEJvZHlCeUluZGV4CiB7Ci0gICAgbXkgKCRpbnRlcmZhY2Us
ICRjbGFzc05hbWUsICRpbmRleGVkR2V0dGVyT3BlcmF0aW9uLCAkbmFtZWRHZXR0ZXJPcGVyYXRp
b24pID0gQF87Ci0KLSAgICBteSBAb3V0cHV0ID0gKCk7Ci0KLSAgICBwdXNoKEBvdXRwdXQsICJi
b29sICR7Y2xhc3NOYW1lfTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90
KVxuIik7Ci0gICAgcHVzaChAb3V0cHV0LCAie1xuIik7Ci0gICAgcHVzaChAb3V0cHV0LCAiICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05hbWV9Kj4ob2JqZWN0KTtcbiIpOwot
ICAgIHB1c2goQG91dHB1dCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7XG4iKTsKKyAgICBteSAoJG91dHB1dEFycmF5LCAkaW50ZXJmYWNlLCAkY2xh
c3NOYW1lKSA9IEBfOworICAgIAorICAgIHJldHVybiBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPntDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4fTsKKyAgICAKKyAgICBt
eSAkbmFtZWRHZXR0ZXJPcGVyYXRpb24gPSBHZXROYW1lZEdldHRlck9wZXJhdGlvbigkaW50ZXJm
YWNlKTsKKyAgICBteSAkaW5kZXhlZEdldHRlck9wZXJhdGlvbiA9IEdldEluZGV4ZWRHZXR0ZXJP
cGVyYXRpb24oJGludGVyZmFjZSk7CisgICAgCisgICAgcHVzaChAJG91dHB1dEFycmF5LCAiYm9v
bCAke2NsYXNzTmFtZX06OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdClc
biIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOworICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KG9iamVj
dCk7XG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpO1xuIik7CiAgICAgCiAgICAgIyBTaW5rIHRoZSBp
bnQtdG8tc3RyaW5nIGNvbnZlcnNpb24gdGhhdCBoYXBwZW5zIHdoZW4gd2UgY3JlYXRlIGEgUHJv
cGVydHlOYW1lCiAgICAgIyB0byB0aGUgcG9pbnQgd2hlcmUgd2UgYWN0dWFsbHkgbmVlZCBpdC4K
QEAgLTU1MSw1NSArNTQ2LDU1IEBAIHN1YiBHZW5lcmF0ZUdldE93blByb3BlcnR5U2xvdEJvZHlC
eUluZGUKICAgICAgICAgaWYgKCRnZW5lcmF0ZWRQcm9wZXJ0eU5hbWUpIHsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQotICAgICAgICBwdXNoKEBvdXRwdXQsICIgICAgSWRlbnRpZmll
ciBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7XG4iKTsKKyAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0g
SWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpO1xuIik7CiAgICAgICAgICRnZW5lcmF0ZWRQ
cm9wZXJ0eU5hbWUgPSAxOwogICAgIH07CiAgICAgCiAgICAgaWYgKCRpbmRleGVkR2V0dGVyT3Bl
cmF0aW9uKSB7Ci0gICAgICAgIHB1c2goQG91dHB1dCwgIiAgICBpZiAoTElLRUxZKGluZGV4IDwg
dGhpc09iamVjdC0+d3JhcHBlZCgpLmxlbmd0aCgpKSkge1xuIik7Ci0gICAgICAgIHB1c2goQG91
dHB1dCwgR2VuZXJhdGVJbmRleGVkR2V0dGVyKCRpbnRlcmZhY2UsICRpbmRleGVkR2V0dGVyT3Bl
cmF0aW9uKSk7Ci0gICAgICAgIHB1c2goQG91dHB1dCwgIiAgICB9XG4iKTsKKyAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIGlmIChMSUtFTFkoaW5kZXggPCB0aGlzT2JqZWN0LT53cmFw
cGVkKCkubGVuZ3RoKCkpKSB7XG4iKTsKKyAgICAgICAgR2VuZXJhdGVJbmRleGVkR2V0dGVyKCRv
dXRwdXRBcnJheSwgIiAgICAgICAgIiwgJGludGVyZmFjZSwgJGluZGV4ZWRHZXR0ZXJPcGVyYXRp
b24pOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgfVxuIik7CiAgICAgfQogCiAg
ICAgIyBJbmRleGluZyBhbiBvYmplY3Qgd2l0aCBhbiBpbnRlZ2VyIHRoYXQgaXMgbm90IGEgc3Vw
cG9ydGVkIHByb3BlcnR5IGluZGV4IHNob3VsZCBub3QgY2FsbCB0aGUgbmFtZWQgcHJvcGVydHkg
Z2V0dGVyLgogICAgICMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jaWRsLWluZGV4
ZWQtcHJvcGVydGllcwogICAgIGlmICghJGluZGV4ZWRHZXR0ZXJPcGVyYXRpb24gJiYgKCRuYW1l
ZEdldHRlck9wZXJhdGlvbiB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0
b21OYW1lZEdldHRlcn0pKSB7CiAgICAgICAgICYkcHJvcGVydHlOYW1lR2VuZXJhdGlvbigpOwot
ICAgICAgICBwdXNoKEBvdXRwdXQsICIgICAgaWYgKHRoaXNPYmplY3QtPmNsYXNzSW5mbygpID09
IGluZm8oKSkge1xuIik7Ci0gICAgICAgIHB1c2goQG91dHB1dCwgR2VuZXJhdGVOYW1lZEdldHRl
cigkaW50ZXJmYWNlLCAkbmFtZWRHZXR0ZXJPcGVyYXRpb24pKTsKLSAgICAgICAgcHVzaChAb3V0
cHV0LCAiICAgIH1cbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKHRo
aXNPYmplY3QtPmNsYXNzSW5mbygpID09IGluZm8oKSkge1xuIik7CisgICAgICAgIEdlbmVyYXRl
TmFtZWRHZXR0ZXIoJG91dHB1dEFycmF5LCAiICAgICAgICAiLCAkaW50ZXJmYWNlLCAkbmFtZWRH
ZXR0ZXJPcGVyYXRpb24pOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgfVxuIik7
CiAgICAgfQogCi0gICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0pTQ3Vz
dG9tR2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvcn0pIHsKKyAgICBpZiAoJGludGVyZmFj
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q3VzdG9tR2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3Jp
cHRvcn0pIHsKICAgICAgICAgJiRwcm9wZXJ0eU5hbWVHZW5lcmF0aW9uKCk7Ci0gICAgICAgIHB1
c2goQG91dHB1dCwgIiAgICBpZiAodGhpc09iamVjdC0+Z2V0T3duUHJvcGVydHlTbG90RGVsZWdh
dGUoc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpXG4iKTsKLSAgICAgICAgcHVzaChAb3V0cHV0
LCAiICAgICAgICByZXR1cm4gdHJ1ZTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgaWYgKHRoaXNPYmplY3QtPmdldE93blByb3BlcnR5U2xvdERlbGVnYXRlKHN0YXRlLCBw
cm9wZXJ0eU5hbWUsIHNsb3QpKVxuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICAgICAgcmV0dXJuIHRydWU7XG4iKTsKICAgICB9CiAKLSAgICBwdXNoKEBvdXRwdXQsICIgICAg
cmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpc09iamVjdCwgc3RhdGUs
IGluZGV4LCBzbG90KTtcbiIpOwotICAgIHB1c2goQG91dHB1dCwgIn1cblxuIik7Ci0KLSAgICBy
ZXR1cm4gQG91dHB1dDsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgcmV0dXJuIEJhc2U6
OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgodGhpc09iamVjdCwgc3RhdGUsIGluZGV4LCBzbG90
KTtcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIn1cblxuIik7CiB9CiAKKyMgaHR0cHM6
Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jbGVnYWN5LXBsYXRmb3JtLW9iamVjdC1wcm9wZXJ0
eS1lbnVtZXJhdGlvbgogc3ViIEdlbmVyYXRlR2V0T3duUHJvcGVydHlOYW1lcwogewotICAgIG15
ICgkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkaW5kZXhlZEdldHRlck9wZXJhdGlvbiwgJG5hbWVk
R2V0dGVyT3BlcmF0aW9uKSA9IEBfOwotCi0gICAgbXkgQG91dHB1dCA9ICgpOwotCi0gICAgIyBQ
cm9wZXJ0eSBlbnVtZXJhdGlvbiAtIGh0dHBzOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2xl
Z2FjeS1wbGF0Zm9ybS1vYmplY3QtcHJvcGVydHktZW51bWVyYXRpb24KLQotICAgIHB1c2goQGlt
cGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5
TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKVxuIik7Ci0gICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiB0aGlzT2JqZWN0ID0g
anNDYXN0PCR7Y2xhc3NOYW1lfSo+KG9iamVjdCk7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7XG4i
KTsKKyAgICBteSAoJG91dHB1dEFycmF5LCAkaW50ZXJmYWNlLCAkY2xhc3NOYW1lKSA9IEBfOwor
ICAgIAorICAgIHJldHVybiBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0
b21FbnVtZXJhdGVQcm9wZXJ0eX07CisgICAgCisgICAgbXkgJG5hbWVkR2V0dGVyT3BlcmF0aW9u
ID0gR2V0TmFtZWRHZXR0ZXJPcGVyYXRpb24oJGludGVyZmFjZSk7CisgICAgbXkgJGluZGV4ZWRH
ZXR0ZXJPcGVyYXRpb24gPSBHZXRJbmRleGVkR2V0dGVyT3BlcmF0aW9uKCRpbnRlcmZhY2UpOwor
ICAgIAorICAgIHB1c2goQCRvdXRwdXRBcnJheSwgInZvaWQgJHtjbGFzc05hbWV9OjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5
TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSlcbiIpOworICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KG9iamVjdCk7XG4iKTsK
KyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpO1xuIik7CiAKICAgICAjIDEuIElmIHRoZSBvYmplY3Qgc3VwcG9y
dHMgaW5kZXhlZCBwcm9wZXJ0aWVzLCB0aGVuIHRoZSBvYmplY3TigJlzIHN1cHBvcnRlZAogICAg
ICMgICAgcHJvcGVydHkgaW5kaWNlcyBhcmUgZW51bWVyYXRlZCBmaXJzdCwgaW4gbnVtZXJpY2Fs
IG9yZGVyLgogICAgIGlmICgkaW5kZXhlZEdldHRlck9wZXJhdGlvbikgewotICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHRoaXNPYmpl
Y3QtPndyYXBwZWQoKS5sZW5ndGgoKTsgaSA8IGNvdW50OyArK2kpXG4iKTsKLSAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZy
b20oc3RhdGUsIGkpKTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgZm9y
ICh1bnNpZ25lZCBpID0gMCwgY291bnQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkubGVuZ3RoKCk7
IGkgPCBjb3VudDsgKytpKVxuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAg
ICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaSkpO1xuIik7CiAg
ICAgfQogCiAgICAgIyAyLiBJZiB0aGUgb2JqZWN0IHN1cHBvcnRzIG5hbWVkIHByb3BlcnRpZXMg
YW5kIGRvZXNu4oCZdCBpbXBsZW1lbnQgYW4gaW50ZXJmYWNlCkBAIC02MDksMTI1ICs2MDQsMzM0
IEBAIHN1YiBHZW5lcmF0ZUdldE93blByb3BlcnR5TmFtZXMKICAgICAjICAgIHRoZSBkZWZpbml0
aW9uIG9mIHRoZSBzZXQgb2Ygc3VwcG9ydGVkIHByb3BlcnR5IG5hbWVzLgogICAgIGlmICgkbmFt
ZWRHZXR0ZXJPcGVyYXRpb24pIHsKICAgICAgICAgaWYgKCEkaW50ZXJmYWNlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPntMZWdhY3lVbmVudW1lcmFibGVOYW1lZFByb3BlcnRpZXN9KSB7Ci0gICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBmb3IgKGF1dG8mIHByb3BlcnR5TmFtZSA6IHRo
aXNPYmplY3QtPndyYXBwZWQoKS5zdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkpXG4iKTsKLSAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCBwcm9wZXJ0eU5hbWUpKTtcbiIpOworICAgICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhp
c09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSlcbiIpOworICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCBwcm9wZXJ0eU5hbWUpKTtcbiIpOwogICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKG1vZGUuaW5j
bHVkZURvbnRFbnVtUHJvcGVydGllcygpKSB7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICAgICBmb3IgKGF1dG8mIHByb3BlcnR5TmFtZSA6IHRoaXNPYmplY3QtPndy
YXBwZWQoKS5zdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkpXG4iKTsKLSAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6
ZnJvbVN0cmluZyhzdGF0ZSwgcHJvcGVydHlOYW1lKSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgIH1cbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIGlmIChtb2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSkge1xuIik7CisgICAg
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIGZvciAoYXV0byYgcHJvcGVydHlO
YW1lIDogdGhpc09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSlcbiIp
OworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICAgICAgcHJvcGVydHlO
YW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgcHJvcGVydHlOYW1lKSk7XG4i
KTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB9XG4iKTsKICAgICAgICAg
fQogICAgIH0KKyAgICAKICAgICAjIDMuIEZpbmFsbHksIGFueSBlbnVtZXJhYmxlIG93biBwcm9w
ZXJ0aWVzIG9yIHByb3BlcnRpZXMgZnJvbSB0aGUgb2JqZWN04oCZcwogICAgICMgICAgcHJvdG90
eXBlIGNoYWluIGFyZSB0aGVuIGVudW1lcmF0ZWQsIGluIG5vIGRlZmluZWQgb3JkZXIuCi0gICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2Jq
ZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7XG4iKTsKLSAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIn1cblxuIik7Ci0KLSAgICByZXR1cm4gQG91dHB1dDsKKyAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBzdGF0ZSwg
cHJvcGVydHlOYW1lcywgbW9kZSk7XG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICJ9XG5c
biIpOwogfQogCi1zdWIgR2VuZXJhdGVQdXQKKyMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dl
YmlkbC8jaW52b2tlLWluZGV4ZWQtc2V0dGVyCitzdWIgR2VuZXJhdGVJbnZva2VJbmRleGVkUHJv
cGVydHlTZXR0ZXIKIHsKLSAgICBteSAoJGludGVyZmFjZSwgJGNsYXNzTmFtZSwgJGluZGV4ZWRT
ZXR0ZXJPcGVyYXRpb24sICRuYW1lZFNldHRlck9wZXJhdGlvbikgPSBAXzsKLQotICAgIGFzc2Vy
dCgiTmFtZWQgc2V0dGVycyBhcmUgbm90IHN1cHBvcnRlZC4iKSBpZiAkbmFtZWRTZXR0ZXJPcGVy
YXRpb247CisgICAgbXkgKCRvdXRwdXRBcnJheSwgJGluZGVudCwgJGludGVyZmFjZSwgJGluZGV4
ZWRTZXR0ZXJPcGVyYXRpb24sICRpbmRleEV4cHJlc3Npb24sICR2YWx1ZSkgPSBAXzsKKyAgICAK
KyAgICAjIFRoZSBzZWNvbmQgYXJndW1lbnQgb2YgdGhlIGluZGV4ZWQgc2V0dGVyIG9wZXJhdGlv
biBpcyB0aGUgYXJndW1lbnQgYmVpbmcgY29udmVydGVkLgorICAgIG15ICRhcmd1bWVudCA9IEB7
JGluZGV4ZWRTZXR0ZXJPcGVyYXRpb24tPmFyZ3VtZW50c31bMV07CisgICAgbXkgJG5hdGl2ZVZh
bHVlID0gSlNWYWx1ZVRvTmF0aXZlKCRpbnRlcmZhY2UsICRhcmd1bWVudCwgJHZhbHVlLCAkaW5k
ZXhlZFNldHRlck9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q29uZGl0aW9uYWx9LCAi
c3RhdGUiLCAiKnN0YXRlIiwgInRoaXNPYmplY3QiLCAiIiwgIiIpOworICAgIAorICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgJGluZGVudCAuICJhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHN0YXRlLT52bSgpKTtcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGluZGVu
dCAuICJhdXRvIG5hdGl2ZVZhbHVlID0gJHtuYXRpdmVWYWx1ZX07XG4iKTsKKyAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICRpbmRlbnQgLiAiUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0
cnVlKTtcbiIpOworICAgIAorICAgIG15ICRpbmRleGVkU2V0dGVyRnVuY3Rpb25OYW1lID0gJGlu
ZGV4ZWRTZXR0ZXJPcGVyYXRpb24tPm5hbWUgfHwgInNldEl0ZW0iOworICAgIG15ICRuYXRpdmVW
YWx1ZVBhc3NFeHByZXNzaW9uID0gUGFzc0FyZ3VtZW50RXhwcmVzc2lvbigibmF0aXZlVmFsdWUi
LCAkYXJndW1lbnQpOworICAgIG15ICRmdW5jdGlvblN0cmluZyA9ICJ0aGlzT2JqZWN0LT53cmFw
cGVkKCkuJHtpbmRleGVkU2V0dGVyRnVuY3Rpb25OYW1lfSgke2luZGV4RXhwcmVzc2lvbn0sICR7
bmF0aXZlVmFsdWVQYXNzRXhwcmVzc2lvbn0pIjsKKyAgICAkZnVuY3Rpb25TdHJpbmcgPSAicHJv
cGFnYXRlRXhjZXB0aW9uKCpzdGF0ZSwgdGhyb3dTY29wZSwgJHtmdW5jdGlvblN0cmluZ30pIiBp
ZiBOZWVkc0V4cGxpY2l0UHJvcGFnYXRlRXhjZXB0aW9uQ2FsbCgkaW5kZXhlZFNldHRlck9wZXJh
dGlvbik7CisgICAgCisgICAgcHVzaChAJG91dHB1dEFycmF5LCAkaW5kZW50IC4gJGZ1bmN0aW9u
U3RyaW5nIC4gIjtcbiIpOworfQogCi0gICAgbXkgQG91dHB1dCA9ICgpOworIyBodHRwczovL2hl
eWNhbS5naXRodWIuaW8vd2ViaWRsLyNpbnZva2UtbmFtZWQtc2V0dGVyCitzdWIgR2VuZXJhdGVJ
bnZva2VOYW1lZFByb3BlcnR5U2V0dGVyCit7CisgICAgbXkgKCRvdXRwdXRBcnJheSwgJGluZGVu
dCwgJGludGVyZmFjZSwgJG5hbWVkU2V0dGVyT3BlcmF0aW9uLCAkdmFsdWUpID0gQF87CisgICAg
CisgICAgbXkgJGFyZ3VtZW50ID0gQHskbmFtZWRTZXR0ZXJPcGVyYXRpb24tPmFyZ3VtZW50c31b
MV07CisgICAgbXkgJG5hdGl2ZVZhbHVlID0gSlNWYWx1ZVRvTmF0aXZlKCRpbnRlcmZhY2UsICRh
cmd1bWVudCwgJHZhbHVlLCAkbmFtZWRTZXR0ZXJPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRl
cy0+e0NvbmRpdGlvbmFsfSwgInN0YXRlIiwgIipzdGF0ZSIsICJ0aGlzT2JqZWN0IiwgIiIsICIi
KTsKKyAgICAKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQgLiAiYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7XG4iKTsKKyAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICRpbmRlbnQgLiAiYXV0byBuYXRpdmVWYWx1ZSA9ICR7bmF0aXZlVmFsdWV9
O1xuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAkaW5kZW50IC4gIlJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7XG4iKTsKKyAgICAKKyAgICBteSAkbmFtZWRTZXR0ZXJG
dW5jdGlvbk5hbWUgPSAkbmFtZWRTZXR0ZXJPcGVyYXRpb24tPm5hbWUgfHwgInNldE5hbWVkSXRl
bSI7CisgICAgbXkgJG5hdGl2ZVZhbHVlUGFzc0V4cHJlc3Npb24gPSBQYXNzQXJndW1lbnRFeHBy
ZXNzaW9uKCJuYXRpdmVWYWx1ZSIsICRhcmd1bWVudCk7CisgICAgbXkgJGZ1bmN0aW9uU3RyaW5n
ID0gInRoaXNPYmplY3QtPndyYXBwZWQoKS4ke25hbWVkU2V0dGVyRnVuY3Rpb25OYW1lfShwcm9w
ZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUpLCAke25hdGl2ZVZhbHVlUGFzc0V4cHJlc3Np
b259KSI7CisgICAgJGZ1bmN0aW9uU3RyaW5nID0gInByb3BhZ2F0ZUV4Y2VwdGlvbigqc3RhdGUs
IHRocm93U2NvcGUsICR7ZnVuY3Rpb25TdHJpbmd9KSIgaWYgTmVlZHNFeHBsaWNpdFByb3BhZ2F0
ZUV4Y2VwdGlvbkNhbGwoJG5hbWVkU2V0dGVyT3BlcmF0aW9uKTsKKyAgICAKKyAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICRpbmRlbnQgLiAkZnVuY3Rpb25TdHJpbmcgLiAiO1xuIik7Cit9CiAKLSAg
ICBwdXNoKEBvdXRwdXQsICJib29sICR7Y2xhc3NOYW1lfTo6cHV0KEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwg
UHV0UHJvcGVydHlTbG90JiBzbG90KVxuIik7Ci0gICAgcHVzaChAb3V0cHV0LCAie1xuIik7Ci0g
ICAgcHVzaChAb3V0cHV0LCAiICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05h
bWV9Kj4oY2VsbCk7XG4iKTsKLSAgICBwdXNoKEBvdXRwdXQsICIgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpO1xuIik7Ci0gICAgCi0gICAgaWYgKCRpbmRl
eGVkU2V0dGVyT3BlcmF0aW9uIHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0N1
c3RvbUluZGV4ZWRTZXR0ZXJ9KSB7Ci0gICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPntDdXN0b21JbmRleGVkU2V0dGVyfSkgewotICAgICAgICAgICAgcHVzaChAb3V0
cHV0LCAiICAgIGlmIChhdXRvIGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7XG4i
KTsKLSAgICAgICAgICAgIHB1c2goQG91dHB1dCwgIiAgICAgICAgdGhpc09iamVjdC0+aW5kZXhT
ZXR0ZXIoc3RhdGUsIGluZGV4LnZhbHVlKCksIHZhbHVlKTtcbiIpOwotICAgICAgICAgICAgcHVz
aChAb3V0cHV0LCAiICAgICAgICByZXR1cm4gdHJ1ZTtcbiIpOwotICAgICAgICAgICAgcHVzaChA
b3V0cHV0LCAiICAgIH1cbiIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgIyBUaGUg
c2Vjb25kIGFyZ3VtZW50IG9mIHRoZSBpbmRleGVkIHNldHRlciBvcGVyYXRpb24gaXMgdGhlIGFy
Z3VtZW50IGJlaW5nIGNvbnZlcnRlZC4KLSAgICAgICAgICAgIG15ICRhcmd1bWVudCA9IEB7JGlu
ZGV4ZWRTZXR0ZXJPcGVyYXRpb24tPmFyZ3VtZW50c31bMV07Ci0gICAgICAgICAgICBteSAkbmF0
aXZlVmFsdWUgPSBKU1ZhbHVlVG9OYXRpdmUoJGludGVyZmFjZSwgJGFyZ3VtZW50LCAidmFsdWUi
LCAkaW5kZXhlZFNldHRlck9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q29uZGl0aW9u
YWx9LCAic3RhdGUiLCAiKnN0YXRlIiwgInRoaXNPYmplY3QiLCAiIiwgIiIpOwotCi0gICAgICAg
ICAgICBwdXNoKEBvdXRwdXQsICIgICAgaWYgKGF1dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3Bl
cnR5TmFtZSkpIHtcbiIpOwotICAgICAgICAgICAgcHVzaChAb3V0cHV0LCAiICAgICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTtcbiIpOwotICAg
ICAgICAgICAgcHVzaChAb3V0cHV0LCAiICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gJHtuYXRp
dmVWYWx1ZX07XG4iKTsKLSAgICAgICAgICAgIHB1c2goQG91dHB1dCwgIiAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTtcbiIpOwotCi0gICAgICAgICAgICBteSAk
aW5kZXhlZFNldHRlckZ1bmN0aW9uTmFtZSA9ICRpbmRleGVkU2V0dGVyT3BlcmF0aW9uLT5uYW1l
IHx8ICJzZXRJdGVtIjsKLSAgICAgICAgICAgIG15ICRmdW5jdGlvblN0cmluZyA9ICIke2luZGV4
ZWRTZXR0ZXJGdW5jdGlvbk5hbWV9KGluZGV4LCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSkiOwotICAg
ICAgICAgICAgJGZ1bmN0aW9uU3RyaW5nID0gInByb3BhZ2F0ZUV4Y2VwdGlvbigqc3RhdGUsIHRo
cm93U2NvcGUsICR7ZnVuY3Rpb25TdHJpbmd9KSIgaWYgTmVlZHNFeHBsaWNpdFByb3BhZ2F0ZUV4
Y2VwdGlvbkNhbGwoJGluZGV4ZWRTZXR0ZXJPcGVyYXRpb24pOwotCi0gICAgICAgICAgICBwdXNo
KEBvdXRwdXQsICIgICAgICAgICR7ZnVuY3Rpb25TdHJpbmd9O1xuIik7Ci0gICAgICAgICAgICBw
dXNoKEBvdXRwdXQsICIgICAgICAgIHJldHVybiB0cnVlO1xuIik7Ci0gICAgICAgICAgICBwdXNo
KEBvdXRwdXQsICIgICAgfVxuIik7CitzdWIgR2VuZXJhdGVQdXQKK3sKKyAgICBteSAoJG91dHB1
dEFycmF5LCAkaW50ZXJmYWNlLCAkY2xhc3NOYW1lKSA9IEBfOworICAgIAorICAgIHJldHVybiBp
ZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21QdXRGdW5jdGlvbn07Cisg
ICAgCisgICAgbXkgJG5hbWVkU2V0dGVyT3BlcmF0aW9uID0gR2V0TmFtZWRTZXR0ZXJPcGVyYXRp
b24oJGludGVyZmFjZSk7CisgICAgbXkgJGluZGV4ZWRTZXR0ZXJPcGVyYXRpb24gPSBHZXRJbmRl
eGVkU2V0dGVyT3BlcmF0aW9uKCRpbnRlcmZhY2UpOworICAgIAorICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgImJvb2wgJHtjbGFzc05hbWV9OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0
YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0
eVNsb3QmIHB1dFByb3BlcnR5U2xvdClcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntc
biIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganND
YXN0PCR7Y2xhc3NOYW1lfSo+KGNlbGwpO1xuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTtcblxuIik7
CisgICAgCisgICAgaWYgKCgkbmFtZWRTZXR0ZXJPcGVyYXRpb24gJiYgJG5hbWVkU2V0dGVyT3Bl
cmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDRVJlYWN0aW9uc30pIHx8ICgkaW5kZXhlZFNl
dHRlck9wZXJhdGlvbiAmJiAkaW5kZXhlZFNldHRlck9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57Q0VSZWFjdGlvbnN9KSkgeworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
Q3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2sgY3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2s7XG5c
biIpOworICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVl
dWUuaCIpOworICAgIH0KKyAgICAKKyAgICBpZiAoJGluZGV4ZWRTZXR0ZXJPcGVyYXRpb24pIHsK
KyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChhdXRvIGluZGV4ID0gcGFyc2VJ
bmRleChwcm9wZXJ0eU5hbWUpKSB7XG4iKTsKKyAgICAgICAgCisgICAgICAgIEdlbmVyYXRlSW52
b2tlSW5kZXhlZFByb3BlcnR5U2V0dGVyKCRvdXRwdXRBcnJheSwgIiAgICAgICAgIiwgJGludGVy
ZmFjZSwgJGluZGV4ZWRTZXR0ZXJPcGVyYXRpb24sICJpbmRleC52YWx1ZSgpIiwgInZhbHVlIik7
CisgICAgICAgIAorICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiB0
cnVlO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB9XG5cbiIpOworICAg
IH0KKyAgICAKKyAgICBpZiAoJG5hbWVkU2V0dGVyT3BlcmF0aW9uKSB7CisgICAgICAgICMgRklN
WEU6IFdlIG5lZWQgYSBtb3JlIGNvbXByZWhlbnNpdmUgc3RvcnkgZm9yIFN5bWJvbHMuCisgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgp
KSB7XG4iKTsKKyAgICAgICAgCisgICAgICAgIG15ICRhZGRpdGlvbmFsSW5kZW50ID0gIiI7Cisg
ICAgICAgIAorICAgICAgICBteSAkb3ZlcnJpZGVCdWlsdGlucyA9ICRjb2RlR2VuZXJhdG9yLT5J
bmhlcml0c0V4dGVuZGVkQXR0cmlidXRlKCRpbnRlcmZhY2UsICJPdmVycmlkZUJ1aWx0aW5zIik7
CisgICAgICAgIGlmICghJG92ZXJyaWRlQnVpbHRpbnMpIHsKKyAgICAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICAgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2JqZWN0LCBQcm9w
ZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5IH07XG4iKTsKKyAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlz
T2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3QoKTtcbiIpOworICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgICAgICBpZiAoIShwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVj
dChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3Qoc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkp
KSB7XG4iKTsKKyAgICAgICAgICAgICRhZGRpdGlvbmFsSW5kZW50IC49ICIgICAgIjsKICAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgR2VuZXJhdGVJbnZva2VOYW1lZFByb3BlcnR5U2V0dGVy
KCRvdXRwdXRBcnJheSwgJGFkZGl0aW9uYWxJbmRlbnQgLiAiICAgICAgICAiLCAkaW50ZXJmYWNl
LCAkbmFtZWRTZXR0ZXJPcGVyYXRpb24sICJ2YWx1ZSIpOworICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICRhZGRpdGlvbmFsSW5kZW50IC4gIiAgICAgICAgcmV0dXJuIHRydWU7XG4iKTsKKyAg
ICAgICAgCisgICAgICAgIGlmICghJG92ZXJyaWRlQnVpbHRpbnMpIHsKKyAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgfVxuIik7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB9XG5cbiIpOwogICAgIH0KICAgICAKKyAg
ICBhc3NlcnQoIlVzaW5nIGJvdGggYSBuYW1lZCBwcm9wZXJ0eSBzZXR0ZXIgYW5kIFtDdXN0b21O
YW1lZFNldHRlcl0gdG9nZXRoZXIgaXMgbm90IHN1cHBvcnRlZC4iKSBpZiAkbmFtZWRTZXR0ZXJP
cGVyYXRpb24gJiYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q3VzdG9tTmFtZWRT
ZXR0ZXJ9OwogICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21O
YW1lZFNldHRlcn0pIHsKLSAgICAgICAgcHVzaChAb3V0cHV0LCAiICAgIGJvb2wgcHV0UmVzdWx0
ID0gZmFsc2U7XG4iKTsKLSAgICAgICAgcHVzaChAb3V0cHV0LCAiICAgIGlmICh0aGlzT2JqZWN0
LT5wdXREZWxlZ2F0ZShzdGF0ZSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCwgcHV0UmVzdWx0
KSlcbiIpOwotICAgICAgICBwdXNoKEBvdXRwdXQsICIgICAgICAgIHJldHVybiBwdXRSZXN1bHQ7
XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGJvb2wgcHV0UmVzdWx0ID0g
ZmFsc2U7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmICh0aGlzT2Jq
ZWN0LT5wdXREZWxlZ2F0ZShzdGF0ZSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlT
bG90LCBwdXRSZXN1bHQpKVxuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAg
ICAgcmV0dXJuIHB1dFJlc3VsdDtcblxuIik7CiAgICAgfQotCi0gICAgcHVzaChAb3V0cHV0LCAi
ICAgIHJldHVybiBCYXNlOjpwdXQodGhpc09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHNsb3QpO1xuIik7Ci0gICAgcHVzaChAb3V0cHV0LCAifVxuXG4iKTsKLQotICAgIHJldHVy
biBAb3V0cHV0OworICAgIAorICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4gQmFz
ZTo6cHV0KHRoaXNPYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0
eVNsb3QpO1xuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAifVxuXG4iKTsKIH0KIAogc3Vi
IEdlbmVyYXRlUHV0QnlJbmRleAogewotICAgIG15ICgkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAk
aW5kZXhlZFNldHRlck9wZXJhdGlvbiwgJG5hbWVkU2V0dGVyT3BlcmF0aW9uKSA9IEBfOwotCi0g
ICAgYXNzZXJ0KCJOYW1lZCBzZXR0ZXJzIGFyZSBub3Qgc3VwcG9ydGVkLiIpIGlmICRuYW1lZFNl
dHRlck9wZXJhdGlvbjsKLQotICAgIG15IEBvdXRwdXQgPSAoKTsKLQotICAgIHB1c2goQG91dHB1
dCwgImJvb2wgJHtjbGFzc05hbWV9OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRl
KiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cp
XG4iKTsKLSAgICBwdXNoKEBvdXRwdXQsICJ7XG4iKTsKLSAgICBwdXNoKEBvdXRwdXQsICIgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOwotICAg
IHB1c2goQG91dHB1dCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7XG4iKTsKLQotICAgIGlmICgkaW5kZXhlZFNldHRlck9wZXJhdGlvbiB8fCAkaW50
ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21JbmRleGVkU2V0dGVyfSkgewotICAg
ICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q3VzdG9tSW5kZXhlZFNl
dHRlcn0pIHsKLSAgICAgICAgICAgIHB1c2goQG91dHB1dCwgIiAgICBpZiAoTElLRUxZKGluZGV4
IDw9IE1BWF9BUlJBWV9JTkRFWCkpIHtcbiIpOwotICAgICAgICAgICAgcHVzaChAb3V0cHV0LCAi
ICAgICAgICB0aGlzT2JqZWN0LT5pbmRleFNldHRlcihzdGF0ZSwgaW5kZXgsIHZhbHVlKTtcbiIp
OwotICAgICAgICAgICAgcHVzaChAb3V0cHV0LCAiICAgICAgICByZXR1cm4gdHJ1ZTtcbiIpOwot
ICAgICAgICAgICAgcHVzaChAb3V0cHV0LCAiICAgIH1cbiIpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgIyBUaGUgc2Vjb25kIGFyZ3VtZW50IG9mIHRoZSBpbmRleGVkIHNldHRlciBv
cGVyYXRpb24gaXMgdGhlIGFyZ3VtZW50IGJlaW5nIGNvbnZlcnRlZC4KLSAgICAgICAgICAgIG15
ICRhcmd1bWVudCA9IEB7JGluZGV4ZWRTZXR0ZXJPcGVyYXRpb24tPmFyZ3VtZW50c31bMV07Ci0g
ICAgICAgICAgICBteSAkbmF0aXZlVmFsdWUgPSBKU1ZhbHVlVG9OYXRpdmUoJGludGVyZmFjZSwg
JGFyZ3VtZW50LCAidmFsdWUiLCAkaW5kZXhlZFNldHRlck9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57Q29uZGl0aW9uYWx9LCAic3RhdGUiLCAiKnN0YXRlIiwgInRoaXNPYmplY3QiLCAi
IiwgIiIpOwotCi0gICAgICAgICAgICBwdXNoKEBvdXRwdXQsICIgICAgaWYgKExJS0VMWShpbmRl
eCA8PSBNQVhfQVJSQVlfSU5ERVgpKSB7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQG91dHB1dCwg
IiAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0o
KSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQG91dHB1dCwgIiAgICAgICAgYXV0byBuYXRpdmVW
YWx1ZSA9ICR7bmF0aXZlVmFsdWV9O1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBvdXRwdXQsICIg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7XG4iKTsKLQotICAg
ICAgICAgICAgbXkgJGluZGV4ZWRTZXR0ZXJGdW5jdGlvbk5hbWUgPSAkaW5kZXhlZFNldHRlck9w
ZXJhdGlvbi0+bmFtZSB8fCAic2V0SXRlbSI7Ci0gICAgICAgICAgICBteSAkZnVuY3Rpb25TdHJp
bmcgPSAiJHtpbmRleGVkU2V0dGVyRnVuY3Rpb25OYW1lfShpbmRleCwgV1RGTW92ZShuYXRpdmVW
YWx1ZSkpIjsKLSAgICAgICAgICAgICRmdW5jdGlvblN0cmluZyA9ICJwcm9wYWdhdGVFeGNlcHRp
b24oKnN0YXRlLCB0aHJvd1Njb3BlLCAke2Z1bmN0aW9uU3RyaW5nfSkiIGlmIE5lZWRzRXhwbGlj
aXRQcm9wYWdhdGVFeGNlcHRpb25DYWxsKCRpbmRleGVkU2V0dGVyT3BlcmF0aW9uKTsKLQotICAg
ICAgICAgICAgcHVzaChAb3V0cHV0LCAiICAgICAgICAke2Z1bmN0aW9uU3RyaW5nfTtcbiIpOwot
ICAgICAgICAgICAgcHVzaChAb3V0cHV0LCAiICAgICAgICByZXR1cm4gdHJ1ZTtcbiIpOwotICAg
ICAgICAgICAgcHVzaChAb3V0cHV0LCAiICAgIH1cbiIpOworICAgIG15ICgkb3V0cHV0QXJyYXks
ICRpbnRlcmZhY2UsICRjbGFzc05hbWUpID0gQF87CisgICAgCisgICAgcmV0dXJuIGlmICRpbnRl
cmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0N1c3RvbVB1dEZ1bmN0aW9ufTsKKyAgICAKKyAg
ICBteSAkbmFtZWRTZXR0ZXJPcGVyYXRpb24gPSBHZXROYW1lZFNldHRlck9wZXJhdGlvbigkaW50
ZXJmYWNlKTsKKyAgICBteSAkaW5kZXhlZFNldHRlck9wZXJhdGlvbiA9IEdldEluZGV4ZWRTZXR0
ZXJPcGVyYXRpb24oJGludGVyZmFjZSk7CisgICAgCisgICAgbXkgJG92ZXJyaWRlQnVpbHRpbnMg
PSAkY29kZUdlbmVyYXRvci0+SW5oZXJpdHNFeHRlbmRlZEF0dHJpYnV0ZSgkaW50ZXJmYWNlLCAi
T3ZlcnJpZGVCdWlsdGlucyIpOworICAgIG15ICRlbGxpZGVzQ2FsbHNUb0Jhc2UgPSAoJG5hbWVk
U2V0dGVyT3BlcmF0aW9uICYmICRvdmVycmlkZUJ1aWx0aW5zKSAmJiAhJGludGVyZmFjZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57Q3VzdG9tTmFtZWRTZXR0ZXJ9OworICAgIAorICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgImJvb2wgJHtjbGFzc05hbWV9OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwg
RXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wiIC4g
KCEkZWxsaWRlc0NhbGxzVG9CYXNlID8gIiBzaG91bGRUaHJvdyIgOiAiIikgLiAiKVxuIik7Cisg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAie1xuIik7CisgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05hbWV9Kj4oY2VsbCk7XG4iKTsK
KyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpO1xuXG4iKTsKKyAgICAKKyAgICBpZiAoKCRuYW1lZFNldHRlck9w
ZXJhdGlvbiAmJiAkbmFtZWRTZXR0ZXJPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NF
UmVhY3Rpb25zfSkgfHwgKCRpbmRleGVkU2V0dGVyT3BlcmF0aW9uICYmICRpbmRleGVkU2V0dGVy
T3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDRVJlYWN0aW9uc30pKSB7CisgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjayBjdXN0
b21FbGVtZW50UmVhY3Rpb25TdGFjaztcblxuIik7CisgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVz
KCJDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5oIik7CisgICAgfQorICAgIAorICAgIGlmICgk
aW5kZXhlZFNldHRlck9wZXJhdGlvbiApIHsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgIGlmIChMSUtFTFkoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKSkge1xuIik7CisgICAgICAg
IAorICAgICAgICBHZW5lcmF0ZUludm9rZUluZGV4ZWRQcm9wZXJ0eVNldHRlcigkb3V0cHV0QXJy
YXksICIgICAgICAgICIsICRpbnRlcmZhY2UsICRpbmRleGVkU2V0dGVyT3BlcmF0aW9uLCAiaW5k
ZXgiLCAidmFsdWUiKTsKKyAgICAgICAgCisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICAgICAgcmV0dXJuIHRydWU7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
IH1cblxuIik7CisgICAgfQorICAgIAorICAgIGlmICgkbmFtZWRTZXR0ZXJPcGVyYXRpb24pIHsK
KyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1l
ID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpO1xuIik7CisgICAgICAgICAgICAgICAg
CisgICAgICAgIG15ICRhZGRpdGlvbmFsSW5kZW50ID0gIiI7CisgICAgICAgIGlmICghJG92ZXJy
aWRlQnVpbHRpbnMpIHsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBQcm9w
ZXJ0eVNsb3Qgc2xvdCB7IHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RU
eXBlOjpWTUlucXVpcnkgfTtcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KCk7
XG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoIShwcm90b3R5
cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3Qoc3Rh
dGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpKSB7XG4iKTsKKyAgICAgICAgICAgICRhZGRpdGlvbmFs
SW5kZW50IC49ICIgICAgIjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgR2VuZXJhdGVJ
bnZva2VOYW1lZFByb3BlcnR5U2V0dGVyKCRvdXRwdXRBcnJheSwgJGFkZGl0aW9uYWxJbmRlbnQg
LiAiICAgICIsICRpbnRlcmZhY2UsICRuYW1lZFNldHRlck9wZXJhdGlvbiwgInZhbHVlIik7Cisg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGFkZGl0aW9uYWxJbmRlbnQgLiAiICAgIHJldHVy
biB0cnVlO1xuIik7CisgICAgICAgIAorICAgICAgICBpZiAoISRvdmVycmlkZUJ1aWx0aW5zKSB7
CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgfVxuXG4iKTsKICAgICAgICAg
fQogICAgIH0KLQorICAgIAorICAgIGFzc2VydCgiVXNpbmcgYm90aCBhIG5hbWVkIHByb3BlcnR5
IHNldHRlciBhbmQgW0N1c3RvbU5hbWVkU2V0dGVyXSB0b2dldGhlciBpcyBub3Qgc3VwcG9ydGVk
LiIpIGlmICRuYW1lZFNldHRlck9wZXJhdGlvbiAmJiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPntDdXN0b21OYW1lZFNldHRlcn07CiAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVk
QXR0cmlidXRlcy0+e0N1c3RvbU5hbWVkU2V0dGVyfSkgewotICAgICAgICBwdXNoKEBvdXRwdXQs
ICIgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBp
bmRleCk7XG4iKTsKLSAgICAgICAgcHVzaChAb3V0cHV0LCAiICAgIFB1dFByb3BlcnR5U2xvdCBz
bG90KHRoaXNPYmplY3QsIHNob3VsZFRocm93KTtcbiIpOwotICAgICAgICBwdXNoKEBvdXRwdXQs
ICIgICAgYm9vbCBwdXRSZXN1bHQgPSBmYWxzZTtcbiIpOwotICAgICAgICBwdXNoKEBvdXRwdXQs
ICIgICAgaWYgKHRoaXNPYmplY3QtPnB1dERlbGVnYXRlKHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzbG90LCBwdXRSZXN1bHQpKVxuIik7Ci0gICAgICAgIHB1c2goQG91dHB1dCwgIiAgICAg
ICAgcmV0dXJuIHB1dFJlc3VsdDtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRl
eCk7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFB1dFByb3BlcnR5U2xv
dCBzbG90KHRoaXNPYmplY3QsIHNob3VsZFRocm93KTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgYm9vbCBwdXRSZXN1bHQgPSBmYWxzZTtcbiIpOworICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgaWYgKHRoaXNPYmplY3QtPnB1dERlbGVnYXRlKHN0YXRlLCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LCBwdXRSZXN1bHQpKVxuIik7CisgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIHB1dFJlc3VsdDtcblxuIik7CiAgICAgfQor
ICAgIAorICAgIGlmICghJGVsbGlkZXNDYWxsc1RvQmFzZSkgeworICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgcmV0dXJuIEJhc2U6OnB1dEJ5SW5kZXgoY2VsbCwgc3RhdGUsIGluZGV4
LCB2YWx1ZSwgc2hvdWxkVGhyb3cpO1xuIik7CisgICAgfQorICAgIAorICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIn1cblxuIik7Cit9CiAKLSAgICBwdXNoKEBvdXRwdXQsICIgICAgcmV0dXJuIEJh
c2U6OnB1dEJ5SW5kZXgoY2VsbCwgc3RhdGUsIGluZGV4LCB2YWx1ZSwgc2hvdWxkVGhyb3cpO1xu
Iik7Ci0gICAgcHVzaChAb3V0cHV0LCAifVxuXG4iKTsKK3N1YiBHZW5lcmF0ZUlzVW5mb3JnZWFi
bGVQcm9wZXJ0eU5hbWUKK3sKKyAgICBteSAoJG91dHB1dEFycmF5LCAkaW50ZXJmYWNlKSA9IEBf
OworICAgIAorICAgIG15IEB1bmZvcmdlYWJsZVByb3BlcnR5TmFtZXMgPSAoKTsKKyAgICBmb3Jl
YWNoIG15ICRwcm9wZXJ0eSAoQHskaW50ZXJmYWNlLT5hdHRyaWJ1dGVzfSwgQHskaW50ZXJmYWNl
LT5vcGVyYXRpb25zfSkgeworICAgICAgICBuZXh0IGlmICRwcm9wZXJ0eS0+aXNTdGF0aWM7Cisg
ICAgICAgIAorICAgICAgICBpZiAoSXNVbmZvcmdlYWJsZSgkaW50ZXJmYWNlLCAkcHJvcGVydHkp
KSB7CisgICAgICAgICAgICBwdXNoIChAdW5mb3JnZWFibGVQcm9wZXJ0eU5hbWVzLCAkcHJvcGVy
dHktPm5hbWUpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiAwIGlmIChzY2Fs
YXIoQHVuZm9yZ2VhYmxlUHJvcGVydHlOYW1lcykgPT0gMCk7CisgICAgCisgICAgbXkgJGNvbmRp
dGlvbiA9IGpvaW4oIiB8fCAiLCBtYXAgeyAicHJvcGVydHlOYW1lID09IFwiIiAuICRfIC4gIlwi
IiB9IEB1bmZvcmdlYWJsZVByb3BlcnR5TmFtZXMpOworICAgIAorICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgInN0YXRpYyBib29sIGlzVW5mb3JnZWFibGVQcm9wZXJ0eU5hbWUoUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSlcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOworICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4gJHtjb25kaXRpb259O1xuIik7CisgICAg
cHVzaChAJG91dHB1dEFycmF5LCAifVxuXG4iKTsKKyAgICAKKyAgICByZXR1cm4gMTsKK30KIAot
ICAgIHJldHVybiBAb3V0cHV0OworIyBodHRwczovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNs
ZWdhY3ktcGxhdGZvcm0tb2JqZWN0LWRlZmluZW93bnByb3BlcnR5CitzdWIgR2VuZXJhdGVEZWZp
bmVPd25Qcm9wZXJ0eQoreworICAgIG15ICgkb3V0cHV0QXJyYXksICRpbnRlcmZhY2UsICRjbGFz
c05hbWUpID0gQF87CisgICAgCisgICAgcmV0dXJuIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0
cmlidXRlcy0+e0N1c3RvbURlZmluZU93blByb3BlcnR5fTsKKyAgICAKKyAgICBteSAkbmFtZWRT
ZXR0ZXJPcGVyYXRpb24gPSBHZXROYW1lZFNldHRlck9wZXJhdGlvbigkaW50ZXJmYWNlKTsKKyAg
ICBteSAkaW5kZXhlZFNldHRlck9wZXJhdGlvbiA9IEdldEluZGV4ZWRTZXR0ZXJPcGVyYXRpb24o
JGludGVyZmFjZSk7CisgICAgCisgICAgcmV0dXJuIGlmICEkbmFtZWRTZXR0ZXJPcGVyYXRpb24g
JiYgISRpbmRleGVkU2V0dGVyT3BlcmF0aW9uOworICAgIAorICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgImJvb2wgJHtjbGFzc05hbWV9OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9w
ZXJ0eURlc2NyaXB0b3ImIHByb3BlcnR5RGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdylcbiIp
OworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIntcbiIpOworICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KG9iamVjdCk7
XG4iKTsKKyAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpO1xuXG4iKTsKKyAgICAKKyAgICBpZiAoKCRuYW1lZFNl
dHRlck9wZXJhdGlvbiAmJiAkbmFtZWRTZXR0ZXJPcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRl
cy0+e0NFUmVhY3Rpb25zfSkgfHwgKCRpbmRleGVkU2V0dGVyT3BlcmF0aW9uICYmICRpbmRleGVk
U2V0dGVyT3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDRVJlYWN0aW9uc30pKSB7Cisg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBDdXN0b21FbGVtZW50UmVhY3Rpb25TdGFj
ayBjdXN0b21FbGVtZW50UmVhY3Rpb25TdGFjaztcblxuIik7CisgICAgICAgIEFkZFRvSW1wbElu
Y2x1ZGVzKCJDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5oIik7CisgICAgfQorICAgIAorICAg
ICMgMS4gSWYgTyBzdXBwb3J0cyBpbmRleGVkIHByb3BlcnRpZXMgYW5kIFAgaXMgYW4gYXJyYXkg
aW5kZXggcHJvcGVydHkgbmFtZSwgdGhlbjoKKyAgICBpZiAoR2V0SW5kZXhlZEdldHRlck9wZXJh
dGlvbigkaW50ZXJmYWNlKSkgeworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYg
KGF1dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHtcbiIpOworICAgICAgICAK
KyAgICAgICAgIyBOT1RFOiBUaGUgbnVtYmVycyBhcmUgb3V0IG9mIG9yZGVyIGJlY2F1c2UgdGhl
cmUgaXMgbm8gcmVhc29uIGRvaW5nIHN0ZXBzIDEsIDMsIGFuZCA0IGlmIHRoZXJlCisgICAgICAg
ICMgaXMgbm8gaW5kZXhlZCBwcm9wZXJ0eSBzZXR0ZXIuCisgICAgICAgIAorICAgICAgICBpZiAo
ISRpbmRleGVkU2V0dGVyT3BlcmF0aW9uKSB7CisgICAgICAgICAgICAjIDIuIElmIE8gZG9lcyBu
b3QgaW1wbGVtZW50IGFuIGludGVyZmFjZSB3aXRoIGFuIGluZGV4ZWQgcHJvcGVydHkgc2V0dGVy
LCB0aGVuIHJldHVybiBmYWxzZS4KKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICAgICAgcmV0dXJuIGZhbHNlO1xuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAj
IDEuIElmIHRoZSByZXN1bHQgb2YgY2FsbGluZyBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGlzIGZh
bHNlLCB0aGVuIHJldHVybiBmYWxzZS4KKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICAgICAgaWYgKCFwcm9wZXJ0eURlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKVxuIik7
CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgICAgICByZXR1cm4gZmFs
c2U7XG4iKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgIyAzLiBJbnZva2UgdGhlIGluZGV4
ZWQgcHJvcGVydHkgc2V0dGVyIHdpdGggUCBhbmQgRGVzYy5bW1ZhbHVlXV0uCisgICAgICAgICAg
ICBHZW5lcmF0ZUludm9rZUluZGV4ZWRQcm9wZXJ0eVNldHRlcigkb3V0cHV0QXJyYXksICIgICAg
ICAgICIsICRpbnRlcmZhY2UsICRpbmRleGVkU2V0dGVyT3BlcmF0aW9uLCAiaW5kZXgudmFsdWUo
KSIsICJwcm9wZXJ0eURlc2NyaXB0b3IudmFsdWUoKSIpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICAjIDQuIFJldHVybiB0cnVlLgorICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgICAgICByZXR1cm4gdHJ1ZTtcbiIpOworICAgICAgICB9CisgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICB9XG5cbiIpOworICAgIH0KKyAgICAKKyAgICAjIDIuIElmIE8gc3VwcG9y
dHMgbmFtZWQgcHJvcGVydGllcywgTyBkb2VzIG5vdCBpbXBsZW1lbnQgYW4gaW50ZXJmYWNlIHdp
dGggdGhlIFtHbG9iYWxdIG9yIFtQcmltYXJ5R2xvYmFsXQorICAgICMgICAgZXh0ZW5kZWQgYXR0
cmlidXRlIGFuZCBQIGlzIG5vdCBhbiB1bmZvcmdlYWJsZSBwcm9wZXJ0eSBuYW1lIG9mIE8sIHRo
ZW46CisgICAgaWYgKEdldE5hbWVkR2V0dGVyT3BlcmF0aW9uKCRpbnRlcmZhY2UpICYmICFJc0ds
b2JhbE9yUHJpbWFyeUdsb2JhbEludGVyZmFjZSgkaW50ZXJmYWNlKSkgeworICAgICAgICAjIEZJ
TVhFOiBXZSBuZWVkIGEgbW9yZSBjb21wcmVoZW5zaXZlIHN0b3J5IGZvciBTeW1ib2xzLgorICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2wo
KSkge1xuIik7CisgICAgICAgIAorICAgICAgICBteSAkYWRkaXRpb25hbEluZGVudCA9ICIiOwor
ICAgICAgICAKKyAgICAgICAgbXkgJGhhc1VuZm9yZ2FibGVQcm9wZXJ0aWVzID0gR2VuZXJhdGVJ
c1VuZm9yZ2VhYmxlUHJvcGVydHlOYW1lKCRvdXRwdXRBcnJheSwgJGludGVyZmFjZSk7CisgICAg
ICAgIGlmICgkaGFzVW5mb3JnYWJsZVByb3BlcnRpZXMpIHsKKyAgICAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICAgICAgaWYgKCFpc1VuZm9yZ2VhYmxlUHJvcGVydHlOYW1lKHByb3Bl
cnR5TmFtZSkpIHtcbiIpOworICAgICAgICAgICAgJGFkZGl0aW9uYWxJbmRlbnQgLj0gIiAgICAi
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAjIDEuIExldCBjcmVhdGluZyBiZSB0cnVl
IGlmIFAgaXMgbm90IGEgc3VwcG9ydGVkIHByb3BlcnR5IG5hbWUsIGFuZCBmYWxzZSBvdGhlcndp
c2UuCisgICAgICAgICMgTk9URTogVGhpcyBzdGVwIGlzIHN0cmVuZ3RoIHJlZHVjZWQgaW50byB0
aGUgb25seSB1c2Ugb2YgJ2NyZWF0aW5nJyBpbiBzdGVwIDIuMi4xCisgICAgICAgIAorICAgICAg
ICAjIDIuIElmIE8gaW1wbGVtZW50cyBhbiBpbnRlcmZhY2Ugd2l0aCB0aGUgW092ZXJyaWRlQnVp
bHRpbnNdIGV4dGVuZGVkIGF0dHJpYnV0ZSBvciBPCisgICAgICAgICMgICAgZG9lcyBub3QgaGF2
ZSBhbiBvd24gcHJvcGVydHkgbmFtZWQgUCwgdGhlbjoKKyAgICAgICAgbXkgJG92ZXJyaWRlQnVp
bHRpbnMgPSAkY29kZUdlbmVyYXRvci0+SW5oZXJpdHNFeHRlbmRlZEF0dHJpYnV0ZSgkaW50ZXJm
YWNlLCAiT3ZlcnJpZGVCdWlsdGlucyIpOworICAgICAgICBpZiAoISRvdmVycmlkZUJ1aWx0aW5z
KSB7CisgICAgICAgICAgICAjIEZJWE1FOiBJcyBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QgdGhl
IHJpZ2h0IGZ1bmN0aW9uIHRvIGNhbGw/IElzIHRoZXJlIGEgZnVuY3Rpb24gdGhhdCB3aWxsCisg
ICAgICAgICAgICAjICAgICAgICBvbmx5IGxvb2sgYXQgdGhlIGFjdHVhbCBwcm9wZXJ0aWVzLCBh
bmQgbm90IGNhbGwgaW50byBvdXIgaW1wbGVtZW50YXRpb24gb2YgdGhlCisgICAgICAgICAgICAj
ICAgICAgICBbW0dldE93blByb3BlcnR5XV0gaG9vaz8KKyAgICAgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgJGFkZGl0aW9uYWxJbmRlbnQuICIgICAgICAgIFByb3BlcnR5U2xvdCBzbG90IHsg
dGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSB9
O1xuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRhZGRpdGlvbmFsSW5kZW50
LiAiICAgICAgICBpZiAoIUJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBzdGF0
ZSwgcHJvcGVydHlOYW1lLCBzbG90KSkge1xuIik7CisgICAgICAgICAgICAkYWRkaXRpb25hbElu
ZGVudCAuPSAiICAgICI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCEkbmFtZWRTZXR0ZXJPcGVy
YXRpb24pIHsKKyAgICAgICAgICAgICMgMi4xLiBJZiBjcmVhdGluZyBpcyBmYWxzZSBhbmQgTyBk
b2VzIG5vdCBpbXBsZW1lbnQgYW4gaW50ZXJmYWNlIHdpdGggYSBuYW1lZCBwcm9wZXJ0eSBzZXR0
ZXIsIHRoZW4gcmV0dXJuIGZhbHNlLgorICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAk
YWRkaXRpb25hbEluZGVudCAuICIgICAgICAgIGlmICh0aGlzT2JqZWN0LT53cmFwcGVkKCkuaXNT
dXBwb3J0ZWRQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSkp
XG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGFkZGl0aW9uYWxJbmRlbnQg
LiAiICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAjIDIuMi4gSWYgTyBpbXBsZW1lbnRzIGFuIGludGVyZmFjZSB3aXRoIGEgbmFtZWQg
cHJvcGVydHkgc2V0dGVyLCB0aGVuOgorICAgICAgICAgICAgCisgICAgICAgICAgICAjIDIuMi4x
LiBJZiB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBpcyBmYWxz
ZSwgdGhlbiByZXR1cm4gZmFsc2UuCisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRh
ZGRpdGlvbmFsSW5kZW50IC4gIiAgICAgICAgaWYgKCFwcm9wZXJ0eURlc2NyaXB0b3IuaXNEYXRh
RGVzY3JpcHRvcigpKVxuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRhZGRp
dGlvbmFsSW5kZW50IC4gIiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiIpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICAjIDIuMi4yLiBJbnZva2UgdGhlIG5hbWVkIHByb3BlcnR5IHNldHRl
ciB3aXRoIFAgYW5kIERlc2MuW1tWYWx1ZV1dLgorICAgICAgICAgICAgR2VuZXJhdGVJbnZva2VO
YW1lZFByb3BlcnR5U2V0dGVyKCRvdXRwdXRBcnJheSwgJGFkZGl0aW9uYWxJbmRlbnQgLiAiICAg
ICAgICAiLCAkaW50ZXJmYWNlLCAkbmFtZWRTZXR0ZXJPcGVyYXRpb24sICJwcm9wZXJ0eURlc2Ny
aXB0b3IudmFsdWUoKSIpOworICAgICAgICAgICAgCisgICAgICAgICAgICAjIDIuMi4zLiBSZXR1
cm4gdHJ1ZS4KKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGFkZGl0aW9uYWxJbmRl
bnQgLiAiICAgICAgICByZXR1cm4gdHJ1ZTtcbiIpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBpZiAoISRvdmVycmlkZUJ1aWx0aW5zKSB7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICRhZGRpdGlvbmFsSW5kZW50IC4gIiAgICB9XG4iKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgaWYgKCRoYXNVbmZvcmdhYmxlUHJvcGVydGllcykgeworICAgICAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICB9XG4iKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgIyBDbG9zZSB0aGUgIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpIGNvbmRpdGlvbi4K
KyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIH1cblxuIik7CisgICAgfQorICAgIAor
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBQcm9wZXJ0eURlc2NyaXB0b3IgbmV3UHJvcGVy
dHlEZXNjcmlwdG9yID0gcHJvcGVydHlEZXNjcmlwdG9yO1xuIik7CisgICAgICAgIAorICAgICMg
My4gSWYgTyBkb2VzIG5vdCBpbXBsZW1lbnQgYW4gaW50ZXJmYWNlIHdpdGggdGhlIFtHbG9iYWxd
IG9yIFtQcmltYXJ5R2xvYmFsXSBleHRlbmRlZCBhdHRyaWJ1dGUsCisgICAgIyAgICB0aGVuIHNl
dCBEZXNjLltbQ29uZmlndXJhYmxlXV0gdG8gdHJ1ZS4KKyAgICBpZiAoIUlzR2xvYmFsT3JQcmlt
YXJ5R2xvYmFsSW50ZXJmYWNlKCRpbnRlcmZhY2UpKSB7CisgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICBuZXdQcm9wZXJ0eURlc2NyaXB0b3Iuc2V0Q29uZmlndXJhYmxlKHRydWUpO1xu
Iik7CisgICAgfQorICAgIAorICAgICMgNC4gUmV0dXJuIE9yZGluYXJ5RGVmaW5lT3duUHJvcGVy
dHkoTywgUCwgRGVzYykuCisgICAgIyBGSVhNRTogRG9lcyB0aGlzIGRvIHRoZSBzYW1lIHRoaW5n
PworICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJv
cGVydHkob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBuZXdQcm9wZXJ0eURlc2NyaXB0b3Is
IHNob3VsZFRocm93KTtcbiIpOworICAgIAorICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIn1cblxu
Iik7CiB9CiAKIHN1YiBHZW5lcmF0ZURlbGV0ZVByb3BlcnR5Q29tbW9uCkBAIC03NDUsNyArOTQ5
LDcgQEAgc3ViIEdlbmVyYXRlRGVsZXRlUHJvcGVydHlDb21tb24KICAgICBhc3NlcnQoIk5hbWVk
IHByb3BlcnR5IGRlbGV0ZXJzIGFyZSBub3QgYWxsb3dlZCBvbiBnbG9iYWwgb2JqZWN0IGludGVy
ZmFjZXMuIikgaWYgSXNHbG9iYWxPclByaW1hcnlHbG9iYWxJbnRlcmZhY2UoJGludGVyZmFjZSk7
CiAKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCIsICRj
b25kaXRpb25hbCk7Ci0gICAgbXkgJG92ZXJyaWRlQnVpbHRpbiA9ICRpbnRlcmZhY2UtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+e092ZXJyaWRlQnVpbHRpbnN9ID8gInRydWUiIDogImZhbHNlIjsKKyAg
ICBteSAkb3ZlcnJpZGVCdWlsdGluID0gJGNvZGVHZW5lcmF0b3ItPkluaGVyaXRzRXh0ZW5kZWRB
dHRyaWJ1dGUoJGludGVyZmFjZSwgIk92ZXJyaWRlQnVpbHRpbnMiKSA/ICJ0cnVlIiA6ICJmYWxz
ZSI7CiAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChpc1Zpc2libGVOYW1lZFByb3Bl
cnR5PCR7b3ZlcnJpZGVCdWlsdGlufT4oKnN0YXRlLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUp
KSB7XG4iKTsKIAogICAgIGlmICgkb3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDRVJl
YWN0aW9uc30pIHsKQEAgLTg3NywyMiArMTA4MSwyNiBAQCBzdWIgR2VuZXJhdGVEZWxldGVQcm9w
ZXJ0eUJ5SW5kZXhEZWZpbml0CiAKIHN1YiBHZW5lcmF0ZU5hbWVkRGVsZXRlckRlZmluaXRpb24K
IHsKLSAgICBteSAoJG91dHB1dEFycmF5LCAkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkb3BlcmF0
aW9uKSA9IEBfOworICAgIG15ICgkb3V0cHV0QXJyYXksICRpbnRlcmZhY2UsICRjbGFzc05hbWUp
ID0gQF87CisgICAgCisgICAgcmV0dXJuIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRl
cy0+e0N1c3RvbURlbGV0ZVByb3BlcnR5fTsKIAorICAgIG15ICRuYW1lZERlbGV0ZXJPcGVyYXRp
b24gPSBHZXROYW1lZERlbGV0ZXJPcGVyYXRpb24oJGludGVyZmFjZSk7CisgICAgCiAgICAgIyBU
aGlzIGltcGxlbWVudHMgaHR0cHM6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jbGVnYWN5LXBs
YXRmb3JtLW9iamVjdC1kZWxldGUgdXNpbmcKICAgICAjIHRoZSBkZWxldGVQcm9wZXJ0eSBhbmQg
ZGVsZXRlUHJvcGVydHlCeUluZGV4IG92ZXJyaWRlIGhvb2tzLgogCiAgICAgYXNzZXJ0KCJOYW1l
ZCBwcm9wZXJ0eSBkZWxldGVycyBhcmUgbm90IGFsbG93ZWQgd2l0aG91dCBhIGNvcnJlc3BvbmRp
bmcgbmFtZWQgcHJvcGVydHkgZ2V0dGVyLiIpIGlmICFHZXROYW1lZEdldHRlck9wZXJhdGlvbigk
aW50ZXJmYWNlKTsKICAgICBhc3NlcnQoIk5hbWVkIHByb3BlcnR5IGRlbGV0ZXJzIGFyZSBub3Qg
YWxsb3dlZCBvbiBnbG9iYWwgb2JqZWN0IGludGVyZmFjZXMuIikgaWYgSXNHbG9iYWxPclByaW1h
cnlHbG9iYWxJbnRlcmZhY2UoJGludGVyZmFjZSk7CiAKLSAgICBteSAkY29uZGl0aW9uYWwgPSAk
b3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDb25kaXRpb25hbH07CisgICAgbXkgJGNv
bmRpdGlvbmFsID0gJG5hbWVkRGVsZXRlck9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
Q29uZGl0aW9uYWx9OwogICAgIGlmICgkY29uZGl0aW9uYWwpIHsKICAgICAgICAgbXkgJGNvbmRp
dGlvbmFsU3RyaW5nID0gJGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmdG
cm9tQXR0cmlidXRlVmFsdWUoJGNvbmRpdGlvbmFsKTsKICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG5cbiIpOzsKICAgICB9CiAKLSAgICBHZW5l
cmF0ZURlbGV0ZVByb3BlcnR5RGVmaW5pdGlvbigkb3V0cHV0QXJyYXksICRpbnRlcmZhY2UsICRj
bGFzc05hbWUsICRvcGVyYXRpb24sICRjb25kaXRpb25hbCk7Ci0gICAgR2VuZXJhdGVEZWxldGVQ
cm9wZXJ0eUJ5SW5kZXhEZWZpbml0aW9uKCRvdXRwdXRBcnJheSwgJGludGVyZmFjZSwgJGNsYXNz
TmFtZSwgJG9wZXJhdGlvbiwgJGNvbmRpdGlvbmFsKTsKKyAgICBHZW5lcmF0ZURlbGV0ZVByb3Bl
cnR5RGVmaW5pdGlvbigkb3V0cHV0QXJyYXksICRpbnRlcmZhY2UsICRjbGFzc05hbWUsICRuYW1l
ZERlbGV0ZXJPcGVyYXRpb24sICRjb25kaXRpb25hbCk7CisgICAgR2VuZXJhdGVEZWxldGVQcm9w
ZXJ0eUJ5SW5kZXhEZWZpbml0aW9uKCRvdXRwdXRBcnJheSwgJGludGVyZmFjZSwgJGNsYXNzTmFt
ZSwgJG5hbWVkRGVsZXRlck9wZXJhdGlvbiwgJGNvbmRpdGlvbmFsKTsKIAogICAgIHB1c2goQGlt
cGxDb250ZW50LCAiI2VuZGlmXG5cbiIpIGlmICRjb25kaXRpb25hbDsKIH0KQEAgLTExMDgsMTQg
KzEzMTYsNiBAQCBzdWIgR2V0U3BlY2lhbEFjY2Vzc29yT3BlcmF0aW9uRm9yVHlwZQogICAgIHJl
dHVybiAwOwogfQogCi1zdWIgSGFzQ29tcGxleEdldE93blByb3BlcnR5Ci17Ci0gICAgbXkgJGlu
dGVyZmFjZSA9IHNoaWZ0OwotICAgIHJldHVybiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPntDaGVja1NlY3VyaXR5fQotICAgICAgICB8fCBJc0RPTUdsb2JhbE9iamVjdCgkaW50ZXJm
YWNlKQotICAgICAgICB8fCBJbnN0YW5jZU92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCgkaW50
ZXJmYWNlKTsKLX0KLQogc3ViIElzR2xvYmFsT3JQcmltYXJ5R2xvYmFsSW50ZXJmYWNlCiB7CiAg
ICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OwpAQCAtMTMwNiw3ICsxNTA2LDI1IEBAIHN1YiBJbnN0
YW5jZU92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdAogICAgIG15ICRpbnRlcmZhY2UgPSBzaGlm
dDsKICAgICByZXR1cm4gJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q3VzdG9tR2V0
T3duUHJvcGVydHlTbG90fQogICAgICAgICB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPntDdXN0b21OYW1lZEdldHRlcn0KLSAgICAgICAgfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57SlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yfQorICAg
ICAgICB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21HZXRPd25Qcm9w
ZXJ0eVNsb3RBbmREZXNjcmlwdG9yfQorICAgICAgICB8fCBHZXRJbmRleGVkR2V0dGVyT3BlcmF0
aW9uKCRpbnRlcmZhY2UpCisgICAgICAgIHx8IEdldE5hbWVkR2V0dGVyT3BlcmF0aW9uKCRpbnRl
cmZhY2UpOworfQorCitzdWIgSW5zdGFuY2VPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4Cit7CisgICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OworICAgIHJldHVybiAkaW50ZXJmYWNl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4fQor
ICAgICAgICB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21OYW1lZEdl
dHRlcn0KKyAgICAgICAgfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q3VzdG9t
R2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvcn0KKyAgICAgICAgfHwgR2V0SW5kZXhlZEdl
dHRlck9wZXJhdGlvbigkaW50ZXJmYWNlKQorICAgICAgICB8fCBHZXROYW1lZEdldHRlck9wZXJh
dGlvbigkaW50ZXJmYWNlKTsKK30KKworc3ViIEluc3RhbmNlT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlOYW1lcworeworICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKKyAgICByZXR1cm4gJGludGVy
ZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q3VzdG9tRW51bWVyYXRlUHJvcGVydHl9CiAgICAg
ICAgIHx8IEdldEluZGV4ZWRHZXR0ZXJPcGVyYXRpb24oJGludGVyZmFjZSkKICAgICAgICAgfHwg
R2V0TmFtZWRHZXR0ZXJPcGVyYXRpb24oJGludGVyZmFjZSk7CiB9CkBAIC0xMzE1LDcgKzE1MzMs
MTUgQEAgc3ViIEluc3RhbmNlT3ZlcnJpZGVzUHV0CiB7CiAgICAgbXkgJGludGVyZmFjZSA9IHNo
aWZ0OwogICAgIHJldHVybiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21O
YW1lZFNldHRlcn0KLSAgICAgICAgfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
Q3VzdG9tSW5kZXhlZFNldHRlcn0KKyAgICAgICAgfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57Q3VzdG9tUHV0RnVuY3Rpb259CisgICAgICAgIHx8IEdldEluZGV4ZWRTZXR0ZXJP
cGVyYXRpb24oJGludGVyZmFjZSkKKyAgICAgICAgfHwgR2V0TmFtZWRTZXR0ZXJPcGVyYXRpb24o
JGludGVyZmFjZSk7Cit9CisKK3N1YiBJbnN0YW5jZU92ZXJyaWRlc0RlZmluZU93blByb3BlcnR5
Cit7CisgICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OworICAgIHJldHVybiAkaW50ZXJmYWNlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21EZWZpbmVPd25Qcm9wZXJ0eX0KICAgICAgICAgfHwg
R2V0SW5kZXhlZFNldHRlck9wZXJhdGlvbigkaW50ZXJmYWNlKQogICAgICAgICB8fCBHZXROYW1l
ZFNldHRlck9wZXJhdGlvbigkaW50ZXJmYWNlKTsKIH0KQEAgLTEzMzQsMjEgKzE1NjAsNiBAQCBz
dWIgUHJvdG90eXBlSGFzU3RhdGljUHJvcGVydHlUYWJsZQogICAgIHJldHVybiAkbnVtQ29uc3Rh
bnRzID4gMCB8fCBQcm90b3R5cGVQcm9wZXJ0eUNvdW50KCRpbnRlcmZhY2UpID4gMDsKIH0KIAot
c3ViIEluc3RhbmNlT3ZlcnJpZGVzUHV0SW1wbGVtZW50YXRpb24KLXsKLSAgICBteSAkaW50ZXJm
YWNlID0gc2hpZnQ7Ci0gICAgcmV0dXJuICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+
e0N1c3RvbU5hbWVkU2V0dGVyfQotICAgICAgICB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPntDdXN0b21JbmRleGVkU2V0dGVyfTsKLX0KLQotc3ViIEluc3RhbmNlT3ZlcnJpZGVz
UHV0RGVjbGFyYXRpb24KLXsKLSAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7Ci0gICAgcmV0dXJu
ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0N1c3RvbVB1dEZ1bmN0aW9ufQotICAg
ICAgICB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21OYW1lZFNldHRl
cn0KLSAgICAgICAgfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q3VzdG9tSW5k
ZXhlZFNldHRlcn07Ci19Ci0KIHN1YiBJbnN0YW5jZU5lZWRzVmlzaXRDaGlsZHJlbgogewogICAg
IG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKQEAgLTE5OTksNyArMjIxMCw5IEBAIHN1YiBHZW5lcmF0
ZUhlYWRlcgogICAgICRzdHJ1Y3R1cmVGbGFnc3siSlNDOjpIYXNTdGF0aWNQcm9wZXJ0eVRhYmxl
In0gPSAxIGlmIEluc3RhbmNlUHJvcGVydHlDb3VudCgkaW50ZXJmYWNlKSA+IDA7CiAgICAgJHN0
cnVjdHVyZUZsYWdzeyJKU0M6Ok5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cyJ9ID0g
MSBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntOZXdJbXB1cmVQcm9wZXJ0eUZp
cmVzV2F0Y2hwb2ludHN9OwogICAgICRzdHJ1Y3R1cmVGbGFnc3siSlNDOjpJc0ltbXV0YWJsZVBy
b3RvdHlwZUV4b3RpY09iamVjdCJ9ID0gMSBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPntJc0ltbXV0YWJsZVByb3RvdHlwZUV4b3RpY09iamVjdH07Ci0KKyAgICAkc3RydWN0dXJl
RmxhZ3N7IkpTQzo6TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCJ9ID0gMSBpZiAkaW50ZXJmYWNlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPntNYXNxdWVyYWRlc0FzVW5kZWZpbmVkfTsKKyAgICAkc3RydWN0
dXJlRmxhZ3N7IkpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgSlNDOjpJbXBsZW1lbnRzRGVm
YXVsdEhhc0luc3RhbmNlIn0gPSAxIGlmICRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciOwor
ICAgICAgICAKICAgICAjIFByb3RvdHlwZQogICAgIHVubGVzcyAoU2hvdWxkVXNlR2xvYmFsT2Jq
ZWN0UHJvdG90eXBlKCRpbnRlcmZhY2UpKSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICIgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNE
T01HbG9iYWxPYmplY3QmKTtcbiIpOwpAQCAtMjAyNiw1MSArMjIzOSw3OCBAQCBzdWIgR2VuZXJh
dGVIZWFkZXIKICAgICBteSAkbmFtZWRHZXR0ZXJPcGVyYXRpb24gPSBHZXROYW1lZEdldHRlck9w
ZXJhdGlvbigkaW50ZXJmYWNlKTsKICAgICBteSAkaW5kZXhlZEdldHRlck9wZXJhdGlvbiA9IEdl
dEluZGV4ZWRHZXR0ZXJPcGVyYXRpb24oJGludGVyZmFjZSk7CiAKLSAgICBteSAkaGFzTmFtZWRH
ZXR0ZXIgPSAkbmFtZWRHZXR0ZXJPcGVyYXRpb24KLSAgICAgICAgfHwgJGludGVyZmFjZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57Q3VzdG9tTmFtZWRHZXR0ZXJ9OwotCi0gICAgbXkgJGhhc0NvbXBs
ZXhHZXR0ZXIgPSAkaW5kZXhlZEdldHRlck9wZXJhdGlvbgotICAgICAgICB8fCAkaW50ZXJmYWNl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2Ny
aXB0b3J9Ci0gICAgICAgIHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0N1c3Rv
bUdldE93blByb3BlcnR5U2xvdH0KLSAgICAgICAgfHwgJGhhc05hbWVkR2V0dGVyOwotCi0gICAg
aWYgKCRoYXNOYW1lZEdldHRlcikgewotICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57T3ZlcnJpZGVCdWlsdGluc30pIHsKKyAgICAjIEZJWE1FOiBXaHkgZG9lc24n
dCB0aGlzIGFsc28gaW5jbHVkZSBJbmRleGVkIEdldHRlcnMsIHtDdXN0b21HZXRPd25Qcm9wZXJ0
eVNsb3R9IGFuZCB7Q3VzdG9tR2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvcn0KKyAgICBp
ZiAoJG5hbWVkR2V0dGVyT3BlcmF0aW9uIHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRl
cy0+e0N1c3RvbU5hbWVkR2V0dGVyfSkgeworICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklu
aGVyaXRzRXh0ZW5kZWRBdHRyaWJ1dGUoJGludGVyZmFjZSwgIk92ZXJyaWRlQnVpbHRpbnMiKSkg
ewogICAgICAgICAgICAgJHN0cnVjdHVyZUZsYWdzeyJKU0M6OkdldE93blByb3BlcnR5U2xvdElz
SW1wdXJlIn0gPSAxOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgJHN0cnVjdHVyZUZs
YWdzeyJKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIn0g
PSAxOwogICAgICAgICB9CiAgICAgfQotCi0gICAgbXkgJG92ZXJyaWRlc0dldCA9IEluc3RhbmNl
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90KCRpbnRlcmZhY2UpOwotICAgIGlmICgkb3ZlcnJp
ZGVzR2V0KSB7CisgICAgCisgICAgIyBDbGFzc0luZm8gTWV0aG9kVGFibGUgZGVjbGFyYXRpb25z
LgorICAgIAorICAgIGlmIChJbnN0YW5jZU92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCgkaW50
ZXJmYWNlKSkgewogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTtcbiIpOwogICAgICAgICAkc3RydWN0
dXJlRmxhZ3N7IkpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90In0gPSAxOwotCi0gICAg
ICAgIGlmICgkaGFzQ29tcGxleEdldHRlcikgewotICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgIiAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNP
YmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9w
ZXJ0eVNsb3QmKTtcbiIpOwotICAgICAgICAgICAgJHN0cnVjdHVyZUZsYWdzeyJKU0M6OkludGVy
Y2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8ifSA9
IDE7Ci0gICAgICAgIH0KICAgICB9Ci0KLSAgICBteSAkb3ZlcnJpZGVzUHV0ID0gSW5zdGFuY2VP
dmVycmlkZXNQdXREZWNsYXJhdGlvbigkaW50ZXJmYWNlKTsKLSAgICBpZiAoJG92ZXJyaWRlc1B1
dCkgeworICAgIAorICAgIGlmIChJbnN0YW5jZU92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgoJGludGVyZmFjZSkpIHsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBz
dGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6
OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTtc
biIpOworICAgICAgICAkc3RydWN0dXJlRmxhZ3N7IkpTQzo6SW50ZXJjZXB0c0dldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyJ9ID0gMTsKKyAgICB9CisgICAg
CisgICAgIyBGSVhNRTogQ3VycmVudGx5IG9ubHkgRE9NV2luZG93IG5lZWRzIHRvIG92ZXJyaWRl
IHRoZSBnZXRQcm9wZXJ0eU5hbWVzIGZhbWlseSBvZiBmdW5jdGlvbnMsIGJ1dCBldmVuCisgICAg
IyAgICAgICAgc28sIGl0IHNob3VsZCBwcm9iYWJseSBiZSB0dXJuZWQgaW50byBhbiBleHRlbmRl
ZCBhdHRyaWJ1dGUuCisgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSB7Cisg
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQgZ2V0UHJvcGVydHlO
YW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZUFy
cmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTtcbiIp
OworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyB2b2lkIGdldEdlbmVy
aWNQcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJv
cGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRpb25N
b2RlKCkpO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZv
aWQgZ2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6
OkVudW1lcmF0aW9uTW9kZSgpKTtcbiIpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgIHN0YXRpYyB1aW50MzJfdCBnZXRFbnVtZXJhYmxlTGVuZ3RoKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU09iamVjdCopO1xuIik7CisgICAgICAgICRzdHJ1Y3R1cmVGbGFnc3siSlNDOjpPdmVy
cmlkZXNHZXRQcm9wZXJ0eU5hbWVzIn0gPSAxOworICAgIH0KKyAgICAKKyAgICBpZiAoSW5zdGFu
Y2VPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eU5hbWVzKCRpbnRlcmZhY2UpKSB7CisgICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhK
U0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5Jiwg
SlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTtcbiIpOworICAg
ICAgICAkc3RydWN0dXJlRmxhZ3N7IkpTQzo6T3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyJ9ID0g
MTsKKyAgICB9CisgICAgCisgICAgaWYgKEluc3RhbmNlT3ZlcnJpZGVzUHV0KCRpbnRlcmZhY2Up
KSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIGJvb2wgcHV0KEpT
Qzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1Zh
bHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpO1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgc3RhdGljIGJvb2wgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhl
Y1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxk
VGhyb3cpO1xuIik7CiAgICAgfQorICAgIAorICAgIGlmIChJbnN0YW5jZU92ZXJyaWRlc0RlZmlu
ZU93blByb3BlcnR5KCRpbnRlcmZhY2UpKSB7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICIgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNDOjpKU09iamVjdCosIEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJvcGVydHlEZXNjcmlw
dG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7XG4iKTsKKyAgICB9CiAKICAgICBpZiAoSW5zdGFuY2VP
dmVycmlkZXNEZWxldGUoJGludGVyZmFjZSkpIHsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIiAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0M6OkpTQ2VsbCosIEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUpO1xuIik7CiAgICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQzo6SlNDZWxs
KiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCk7XG4iKTsKICAgICB9CiAKLSAgICAjIExlZ2Fj
eUNhbGxlciBhbmQgY3VzdG9tIGNhbGwgZnVuY3Rpb25zCi0gICAgaWYgKElzQ2FsbGFibGUoJGlu
dGVyZmFjZSkpIHsKKyAgICBpZiAoSW5zdGFuY2VPdmVycmlkZXNDYWxsKCRpbnRlcmZhY2UpKSB7
CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIEpTQzo6Q2FsbFR5cGUg
Z2V0Q2FsbERhdGEoSlNDOjpKU0NlbGwqLCBKU0M6OkNhbGxEYXRhJik7XG5cbiIpOwogICAgICAg
ICAkaGVhZGVySW5jbHVkZXN7IjxydW50aW1lL0NhbGxEYXRhLmg+In0gPSAxOwogICAgICAgICAk
c3RydWN0dXJlRmxhZ3N7IkpTQzo6VHlwZU9mU2hvdWxkQ2FsbEdldENhbGxEYXRhIn0gPSAxOwog
ICAgIH0KLQorICAgIAorICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntD
dXN0b21HZXRQcm90b3R5cGV9KSB7CisgICAgICAgIHB1c2ggKEBoZWFkZXJDb250ZW50LCAiICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0UHJvdG90eXBlKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4
ZWNTdGF0ZSopO1xuIik7CisgICAgfQorICAgIAorICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPntDdXN0b21Ub1N0cmluZ05hbWV9KSB7CisgICAgICAgIHB1c2ggKEBoZWFk
ZXJDb250ZW50LCAiICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpTQzo6SlNP
YmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSopO1xuIik7CisgICAgfQorICAgIAorICAgIGlmICgkaW50
ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21QcmV2ZW50RXh0ZW5zaW9uc30pIHsK
KyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgYm9vbCBwcmV2ZW50RXh0
ZW5zaW9ucyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqKTtcbiIpOworICAgIH0KKyAg
ICAKKyAgICBpZiAoSW5zdGFuY2VOZWVkc0VzdGltYXRlZFNpemUoJGludGVyZmFjZSkpIHsKKyAg
ICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNp
emUoSlNDZWxsKik7XG4iKTsKKyAgICB9CisgICAgCiAgICAgaWYgKCEkaGFzUGFyZW50KSB7CiAg
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6
OkpTQ2VsbCopO1xuIik7CiAgICAgfQpAQCAtMjA4OCw3ICsyMzI4LDYgQEAgc3ViIEdlbmVyYXRl
SGVhZGVyCiAgICAgfQogCiAgICAgIyBTdHJ1Y3R1cmUgSUQKLSAgICAkc3RydWN0dXJlRmxhZ3N7
IkpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgSlNDOjpJbXBsZW1lbnRzRGVmYXVsdEhhc0lu
c3RhbmNlIn0gPSAxIGlmICRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciOwogICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpK
U1ZhbHVlIHByb3RvdHlwZSlcbiIpOwogICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAge1xu
Iik7CiAgICAgaWYgKElzRE9NR2xvYmFsT2JqZWN0KCRpbnRlcmZhY2UpKSB7CkBAIC0yMTA0LDM3
ICsyMzQzLDEwIEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICIgICAgfVxuXG4iKTsKIAogICAgICMgQ3VzdG9tIHB1c2hFdmVudEhhbmRsZXJTY29wZSBmdW5j
dGlvbgotICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgSlNDOjpKU1Njb3BlKiBwdXNoRXZl
bnRIYW5kbGVyU2NvcGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTU2NvcGUqKSBjb25zdDtcblxu
IikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0b21QdXNoRXZlbnRI
YW5kbGVyU2NvcGV9OwotCi0gICAgIyBDdXN0b20gZ2V0UHJvcGVydHlOYW1lcyBmdW5jdGlvbiBl
eGlzdHMgb24gRE9NV2luZG93Ci0gICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ci
KSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3RhdGljIHZvaWQgZ2V0UHJv
cGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5
TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgp
KTtcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyB2b2lkIGdl
dEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51bWVy
YXRpb25Nb2RlKCkpO1xuIik7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3Rh
dGljIHZvaWQgZ2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUg
PSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTtcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250
ZW50LCAiICAgIHN0YXRpYyB1aW50MzJfdCBnZXRFbnVtZXJhYmxlTGVuZ3RoKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU09iamVjdCopO1xuIik7Ci0gICAgICAgICRzdHJ1Y3R1cmVGbGFnc3siSlND
OjpPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIn0gPSAxOwotICAgIH0KLQotICAgICMgQ3VzdG9t
IGdldE93blByb3BlcnR5TmFtZXMgZnVuY3Rpb24KLSAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57Q3VzdG9tRW51bWVyYXRlUHJvcGVydHl9IHx8ICRpbmRleGVkR2V0dGVy
T3BlcmF0aW9uIHx8ICRuYW1lZEdldHRlck9wZXJhdGlvbikgewotICAgICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09i
amVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51
bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7XG4iKTsKLSAgICAgICAgJHN0
cnVjdHVyZUZsYWdzeyJKU0M6Ok92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMifSA9IDE7ICAgICAg
IAorICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21QdXNoRXZl
bnRIYW5kbGVyU2NvcGV9KSB7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgSlND
OjpKU1Njb3BlKiBwdXNoRXZlbnRIYW5kbGVyU2NvcGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
U2NvcGUqKSBjb25zdDtcblxuIik7CiAgICAgfQotCi0gICAgIyBDdXN0b20gZGVmaW5lT3duUHJv
cGVydHkgZnVuY3Rpb24KLSAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBib29s
IGRlZmluZU93blByb3BlcnR5KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
UHJvcGVydHlOYW1lLCBjb25zdCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxk
VGhyb3cpO1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0b21E
ZWZpbmVPd25Qcm9wZXJ0eX07Ci0KLSAgICAjIEN1c3RvbSBnZXRQcm90b3R5cGUgLyBzZXRQcm90
b3R5cGUgZnVuY3Rpb25zLgotICAgIHB1c2ggKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgZ2V0UHJvdG90eXBlKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSop
O1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q3VzdG9tR2V0UHJvdG90
eXBlfTsKLQotICAgICMgQ3VzdG9tIHRvU3RyaW5nTmFtZSBmdW5jdGlvbi4KLSAgICBwdXNoIChA
aGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBKU0M6
OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqKTtcbiIpIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVk
QXR0cmlidXRlcy0+e0N1c3RvbVRvU3RyaW5nTmFtZX07Ci0KLSAgICAjIEN1c3RvbSBwcmV2ZW50
RXh0ZW5zaW9ucyBmdW5jdGlvbi4KLSAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRp
YyBib29sIHByZXZlbnRFeHRlbnNpb25zKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSop
O1xuIikgaWYgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q3VzdG9tUHJldmVudEV4
dGVuc2lvbnN9OwogICAgIAotICAgICRzdHJ1Y3R1cmVGbGFnc3siSlNDOjpNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkIn0gPSAxIGlmICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e01hc3F1
ZXJhZGVzQXNVbmRlZmluZWR9OwotCiAgICAgIyBDb25zdHJ1Y3RvciBvYmplY3QgZ2V0dGVyCiAg
ICAgdW5sZXNzICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntOb0ludGVyZmFjZU9i
amVjdH0pIHsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0
Kik7XG4iKTsKQEAgLTIxNDIsOCArMjM1NCwxMCBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICB9
CiAKICAgICAjIFNlcmlhbGl6ZXIgZnVuY3Rpb24uCi0gICAgcHVzaChAaGVhZGVyQ29udGVudCwg
IiAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VyaWFsaXplKEpTQzo6RXhlY1N0YXRlKiwgSlMk
e2ludGVyZmFjZU5hbWV9KiB0aGlzT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmKTtcbiIpIGlmICRp
bnRlcmZhY2UtPnNlcmlhbGl6YWJsZTsKLQorICAgIGlmICgkaW50ZXJmYWNlLT5zZXJpYWxpemFi
bGUpIHsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgSlNDOjpKU09i
amVjdCogc2VyaWFsaXplKEpTQzo6RXhlY1N0YXRlKiwgJHtjbGFzc05hbWV9KiB0aGlzT2JqZWN0
LCBKU0M6OlRocm93U2NvcGUmKTtcbiIpOworICAgIH0KKyAgICAKICAgICBteSAkbnVtQ3VzdG9t
T3BlcmF0aW9ucyA9IDA7CiAgICAgbXkgJG51bUN1c3RvbUF0dHJpYnV0ZXMgPSAwOwogCkBAIC0y
MTkzLDExICsyNDA3LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiICAgIHRlbXBsYXRlPHR5cGVuYW1lPiBzdGF0aWMgSlNDOjpTdWJzcGFj
ZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pIHsgcmV0dXJuICRzdWJzcGFjZUZ1bmModm0pOyB9
XG4iKTsKICAgICAgICAgfQogICAgIH0KLQotICAgIGlmIChJbnN0YW5jZU5lZWRzRXN0aW1hdGVk
U2l6ZSgkaW50ZXJmYWNlKSkgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0
YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqKTtcbiIpOwotICAgIH0KLQorICAgIAog
ICAgIGlmICgkbnVtQ3VzdG9tQXR0cmlidXRlcyA+IDApIHsKICAgICAgICAgcHVzaChAaGVhZGVy
Q29udGVudCwgIlxuICAgIC8vIEN1c3RvbSBhdHRyaWJ1dGVzXG4iKTsKIApAQCAtMjI5NSw3ICsy
NTA1LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICIgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7XG4iKTsKICAgICB9CiAKLSAgICBp
ZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0b21HZXRPd25Qcm9wZXJ0
eVNsb3RBbmREZXNjcmlwdG9yfSkgeworICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPntDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yfSkgewogICAgICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90RGVsZWdh
dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3Qm
KTtcbiIpOwogICAgIH0KIApAQCAtMjMwNiwxMSArMjUxNiw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRl
cgogICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21OYW1lZFNl
dHRlcn0pIHsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBib29sIHB1dERlbGVn
YXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlND
OjpQdXRQcm9wZXJ0eVNsb3QmLCBib29sJiBwdXRSZXN1bHQpO1xuIik7CiAgICAgfQotCi0gICAg
aWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0N1c3RvbUluZGV4ZWRTZXR0ZXJ9
KSB7Ci0gICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgdm9pZCBpbmRleFNldHRlcihK
U0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4LCBKU0M6OkpTVmFsdWUpO1xuIik7Ci0gICAg
fQotCisgICAgCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIn07XG5cbiIpOwogCiAgICAgaWYg
KFNob3VsZEdlbmVyYXRlV3JhcHBlck93bmVyQ29kZSgkaGFzUGFyZW50LCAkaW50ZXJmYWNlKSkg
ewpAQCAtMzYxMyw3ICszODE5LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogICAgIH0KIAotICAgIGlmICgkaW50ZXJm
YWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntKU0N1c3RvbU5hbWVkR2V0dGVyT25Qcm90b3R5cGV9
KSB7CisgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0N1c3RvbU5hbWVk
R2V0dGVyT25Qcm90b3R5cGV9KSB7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiYm9vbCAk
e2NsYXNzTmFtZX1Qcm90b3R5cGU6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xv
dCYgc2xvdClcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xh
c3NOYW1lfVByb3RvdHlwZSo+KGNlbGwpO1xuIik7CkBAIC0zNzkyLDQzICszOTk4LDM1IEBAIHN1
YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxu
XG4iKTsKICAgICB9CiAKLSAgICBteSAkb3ZlcnJpZGVzR2V0ID0gSW5zdGFuY2VPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eVNsb3QoJGludGVyZmFjZSk7Ci0gICAgaWYgKCRvdmVycmlkZXNHZXQpIHsK
LSAgICAgICAgaWYgKCEkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDdXN0b21HZXRP
d25Qcm9wZXJ0eVNsb3R9KSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgR2VuZXJh
dGVHZXRPd25Qcm9wZXJ0eVNsb3RCb2R5KCRpbnRlcmZhY2UsICRjbGFzc05hbWUsICRpbmRleGVk
R2V0dGVyT3BlcmF0aW9uLCAkbmFtZWRHZXR0ZXJPcGVyYXRpb24pKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmICgkaW5kZXhlZEdldHRlck9wZXJhdGlvbiB8fCAkbmFtZWRHZXR0ZXJPcGVyYXRp
b24KLSAgICAgICAgICAgICAgICB8fCAkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntD
dXN0b21OYW1lZEdldHRlcn0KLSAgICAgICAgICAgICAgICB8fCAkaW50ZXJmYWNlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPntKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2NyaXB0b3J9KSB7
Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eVNs
b3RCb2R5QnlJbmRleCgkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkaW5kZXhlZEdldHRlck9wZXJh
dGlvbiwgJG5hbWVkR2V0dGVyT3BlcmF0aW9uKSk7Ci0gICAgICAgIH0KKyAgICBpZiAoSW5zdGFu
Y2VPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QoJGludGVyZmFjZSkpIHsKKyAgICAgICAgR2Vu
ZXJhdGVHZXRPd25Qcm9wZXJ0eVNsb3RCb2R5KFxAaW1wbENvbnRlbnQsICRpbnRlcmZhY2UsICRj
bGFzc05hbWUpOwogICAgIH0KLQotCi0gICAgaWYgKCgkaW5kZXhlZEdldHRlck9wZXJhdGlvbiB8
fCAkbmFtZWRHZXR0ZXJPcGVyYXRpb24pICYmICEkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPntDdXN0b21FbnVtZXJhdGVQcm9wZXJ0eX0pIHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsIEdlbmVyYXRlR2V0T3duUHJvcGVydHlOYW1lcygkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAk
aW5kZXhlZEdldHRlck9wZXJhdGlvbiwgJG5hbWVkR2V0dGVyT3BlcmF0aW9uKSk7CisgICAgCisg
ICAgaWYgKEluc3RhbmNlT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleCgkaW50ZXJm
YWNlKSkgeworICAgICAgICBHZW5lcmF0ZUdldE93blByb3BlcnR5U2xvdEJvZHlCeUluZGV4KFxA
aW1wbENvbnRlbnQsICRpbnRlcmZhY2UsICRjbGFzc05hbWUpOwogICAgIH0KLQotICAgIG15ICRu
YW1lZFNldHRlck9wZXJhdGlvbiA9IEdldE5hbWVkU2V0dGVyT3BlcmF0aW9uKCRpbnRlcmZhY2Up
OwotICAgIG15ICRpbmRleGVkU2V0dGVyT3BlcmF0aW9uID0gR2V0SW5kZXhlZFNldHRlck9wZXJh
dGlvbigkaW50ZXJmYWNlKTsKLQotICAgIG15ICRoYXNTZXR0ZXIgPSBJbnN0YW5jZU92ZXJyaWRl
c1B1dCgkaW50ZXJmYWNlKTsKLSAgICBpZiAoJGhhc1NldHRlcikgewotICAgICAgICBpZiAoISRp
bnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0N1c3RvbVB1dEZ1bmN0aW9ufSkgewotICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIEdlbmVyYXRlUHV0KCRpbnRlcmZhY2UsICRjbGFz
c05hbWUsICRpbmRleGVkU2V0dGVyT3BlcmF0aW9uLCAkbmFtZWRTZXR0ZXJPcGVyYXRpb24pKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmli
dXRlcy0+e0N1c3RvbUluZGV4ZWRTZXR0ZXJ9IHx8ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmli
dXRlcy0+e0N1c3RvbU5hbWVkU2V0dGVyfSkgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCBHZW5lcmF0ZVB1dEJ5SW5kZXgoJGludGVyZmFjZSwgJGNsYXNzTmFtZSwgJGluZGV4
ZWRTZXR0ZXJPcGVyYXRpb24sICRuYW1lZFNldHRlck9wZXJhdGlvbikpOwotICAgICAgICAgICAg
fQotICAgICAgICB9CisgICAgCisgICAgaWYgKEluc3RhbmNlT3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlOYW1lcygkaW50ZXJmYWNlKSkgeworICAgICAgICBHZW5lcmF0ZUdldE93blByb3BlcnR5TmFt
ZXMoXEBpbXBsQ29udGVudCwgJGludGVyZmFjZSwgJGNsYXNzTmFtZSk7CiAgICAgfQotCi0gICAg
bXkgJG5hbWVkRGVsZXRlck9wZXJhdGlvbiA9IEdldE5hbWVkRGVsZXRlck9wZXJhdGlvbigkaW50
ZXJmYWNlKTsKLSAgICBpZiAoJG5hbWVkRGVsZXRlck9wZXJhdGlvbikgewotICAgICAgICBHZW5l
cmF0ZU5hbWVkRGVsZXRlckRlZmluaXRpb24oXEBpbXBsQ29udGVudCwgJGludGVyZmFjZSwgJGNs
YXNzTmFtZSwgJG5hbWVkRGVsZXRlck9wZXJhdGlvbik7CisgICAgCisgICAgaWYgKEluc3RhbmNl
T3ZlcnJpZGVzUHV0KCRpbnRlcmZhY2UpKSB7CisgICAgICAgIEdlbmVyYXRlUHV0KFxAaW1wbENv
bnRlbnQsICRpbnRlcmZhY2UsICRjbGFzc05hbWUpOworICAgICAgICBHZW5lcmF0ZVB1dEJ5SW5k
ZXgoXEBpbXBsQ29udGVudCwgJGludGVyZmFjZSwgJGNsYXNzTmFtZSk7CisgICAgfQorICAgIAor
ICAgIGlmIChJbnN0YW5jZU92ZXJyaWRlc0RlZmluZU93blByb3BlcnR5KCRpbnRlcmZhY2UpKSB7
CisgICAgICAgIEdlbmVyYXRlRGVmaW5lT3duUHJvcGVydHkoXEBpbXBsQ29udGVudCwgJGludGVy
ZmFjZSwgJGNsYXNzTmFtZSk7CiAgICAgfQogCisgICAgaWYgKEluc3RhbmNlT3ZlcnJpZGVzRGVs
ZXRlKCRpbnRlcmZhY2UpKSB7CisgICAgICAgIEdlbmVyYXRlTmFtZWREZWxldGVyRGVmaW5pdGlv
bihcQGltcGxDb250ZW50LCAkaW50ZXJmYWNlLCAkY2xhc3NOYW1lKTsKKyAgICB9CisgICAgCisg
ICAgaWYgKEluc3RhbmNlT3ZlcnJpZGVzQ2FsbCgkaW50ZXJmYWNlKSkgeworICAgICAgICBHZW5l
cmF0ZUxlZ2FjeUNhbGxlckRlZmluaXRpb25zKCRpbnRlcmZhY2UsICRjbGFzc05hbWUpOworICAg
IH0KKyAgICAKICAgICBpZiAoJG51bUF0dHJpYnV0ZXMgPiAwKSB7CiAgICAgICAgIEFkZFRvSW1w
bEluY2x1ZGVzKCJKU0RPTUF0dHJpYnV0ZS5oIik7CiAKQEAgLTM5MDgsOCArNDEwNiw3IEBAIHN1
YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgZm9yZWFjaCBteSAkb3BlcmF0aW9uIChAb3Bl
cmF0aW9ucykgewogICAgICAgICBHZW5lcmF0ZU9wZXJhdGlvbkRlZmluaXRpb24oJGludGVyZmFj
ZSwgJGNsYXNzTmFtZSwgJG9wZXJhdGlvbik7CiAgICAgfQotCi0gICAgR2VuZXJhdGVMZWdhY3lD
YWxsZXJEZWZpbml0aW9ucygkaW50ZXJmYWNlLCAkY2xhc3NOYW1lKTsKKyAgICAKICAgICBHZW5l
cmF0ZUl0ZXJhYmxlRGVmaW5pdGlvbigkaW50ZXJmYWNlKSBpZiAkaW50ZXJmYWNlLT5pdGVyYWJs
ZTsKICAgICBHZW5lcmF0ZVNlcmlhbGl6ZXJEZWZpbml0aW9uKCRpbnRlcmZhY2UsICRjbGFzc05h
bWUpIGlmICRpbnRlcmZhY2UtPnNlcmlhbGl6YWJsZTsKIApAQCAtNDc2OSwxMCArNDk2Niw4IEBA
IHN1YiBHZW5lcmF0ZUxlZ2FjeUNhbGxlckRlZmluaXRpb25zCiB7CiAgICAgbXkgKCRpbnRlcmZh
Y2UsICRjbGFzc05hbWUpID0gQF87CiAKLSAgICBpZiAoIUlzQ2FsbGFibGUoJGludGVyZmFjZSkg
fHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q3VzdG9tQ2FsbH0pIHsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQorICAgIHJldHVybiBpZiAkaW50ZXJmYWNlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPntDdXN0b21DYWxsfTsKKyAgICAKICAgICBteSBAbGVnYWN5Q2FsbGVycyA9IEB7
JGludGVyZmFjZS0+e0xlZ2FjeUNhbGxlcnN9fTsKICAgICBpZiAoQGxlZ2FjeUNhbGxlcnMgPiAx
KSB7CiAgICAgICAgIGZvcmVhY2ggbXkgJGxlZ2FjeUNhbGxlciAoQGxlZ2FjeUNhbGxlcnMpIHsK
QEAgLTYzMTIsMTQgKzY1MDcsMTQgQEAgc3ViIEdlbmVyYXRlUHJvdG90eXBlRGVjbGFyYXRpb24K
ICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPntKU0N1c3RvbU5hbWVkR2V0dGVyT25Qcm90b3R5cGV9KSB7CisgICAgaWYgKCRpbnRlcmZh
Y2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0N1c3RvbU5hbWVkR2V0dGVyT25Qcm90b3R5cGV9KSB7
CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIlxuIik7CiAgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICBzdGF0aWMgYm9vbCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90
Jik7XG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGJvb2wgcHV0RGVsZWdh
dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6
OlB1dFByb3BlcnR5U2xvdCYsIGJvb2wmIHB1dFJlc3VsdCk7XG4iKTsKICAgICB9CiAKICAgICAj
IEN1c3RvbSBkZWZpbmVPd25Qcm9wZXJ0eSBmdW5jdGlvbgotICAgIGlmICgkaW50ZXJmYWNlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPntKU0N1c3RvbURlZmluZU93blByb3BlcnR5T25Qcm90b3R5cGV9
KSB7CisgICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0N1c3RvbURlZmlu
ZU93blByb3BlcnR5T25Qcm90b3R5cGV9KSB7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IlxuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBzdGF0aWMgYm9vbCBkZWZp
bmVPd25Qcm9wZXJ0eShKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3Bl
cnR5TmFtZSwgY29uc3QgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93
KTtcbiIpOwogICAgIH0KQEAgLTY1ODAsNyArNjc3NSw3IEBAIHN1YiBJc0NvbnN0cnVjdGFibGUK
ICAgICAgICAgfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNCdWlsdGluQ29u
c3RydWN0b3J9OwogfQogCi1zdWIgSXNDYWxsYWJsZQorc3ViIEluc3RhbmNlT3ZlcnJpZGVzQ2Fs
bAogewogICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKICAgICByZXR1cm4gJGludGVyZmFjZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q3VzdG9tQ2FsbH0gfHwgJGludGVyZmFjZS0+e0xlZ2FjeUNh
bGxlcnN9CkBAIC02NTg5LDcgKzY3ODQsOSBAQCBzdWIgSXNDYWxsYWJsZQogc3ViIEhlYWRlck5l
ZWRzUHJvdG90eXBlRGVjbGFyYXRpb24KIHsKICAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7Ci0g
ICAgcmV0dXJuIElzRE9NR2xvYmFsT2JqZWN0KCRpbnRlcmZhY2UpIHx8ICRpbnRlcmZhY2UtPmV4
dGVuZGVkQXR0cmlidXRlcy0+e0pTQ3VzdG9tTmFtZWRHZXR0ZXJPblByb3RvdHlwZX0gfHwgJGlu
dGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57SlNDdXN0b21EZWZpbmVPd25Qcm9wZXJ0eU9u
UHJvdG90eXBlfTsKKyAgICByZXR1cm4gSXNET01HbG9iYWxPYmplY3QoJGludGVyZmFjZSkKKyAg
ICAgICAgfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q3VzdG9tTmFtZWRHZXR0
ZXJPblByb3RvdHlwZX0KKyAgICAgICAgfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57Q3VzdG9tRGVmaW5lT3duUHJvcGVydHlPblByb3RvdHlwZX07CiB9CiAKIHN1YiBJc1VuZm9y
Z2VhYmxlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0
ZXMuanNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lE
TEF0dHJpYnV0ZXMuanNvbgkocmV2aXNpb24gMjE3NzY3KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLmpzb24JKHdvcmtpbmcgY29weSkKQEAgLTgwLDYg
KzgwLDEyIEBACiAgICAgICAgICJDdXN0b21Db25zdHJ1Y3RvciI6IHsKICAgICAgICAgICAgICJj
b250ZXh0c0FsbG93ZWQiOiBbImludGVyZmFjZSJdCiAgICAgICAgIH0sCisgICAgICAgICJDdXN0
b21EZWZpbmVPd25Qcm9wZXJ0eSI6IHsKKyAgICAgICAgICAgICJjb250ZXh0c0FsbG93ZWQiOiBb
ImludGVyZmFjZSJdCisgICAgICAgIH0sCisgICAgICAgICJDdXN0b21EZWZpbmVPd25Qcm9wZXJ0
eU9uUHJvdG90eXBlIjogeworICAgICAgICAgICAgImNvbnRleHRzQWxsb3dlZCI6IFsiaW50ZXJm
YWNlIl0KKyAgICAgICAgfSwKICAgICAgICAgIkN1c3RvbURlbGV0ZVByb3BlcnR5IjogewogICAg
ICAgICAgICAgImNvbnRleHRzQWxsb3dlZCI6IFsiaW50ZXJmYWNlIl0KICAgICAgICAgfSwKQEAg
LTg5LDYgKzk1LDEyIEBACiAgICAgICAgICJDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QiOiB7CiAg
ICAgICAgICAgICAiY29udGV4dHNBbGxvd2VkIjogWyJpbnRlcmZhY2UiXQogICAgICAgICB9LAor
ICAgICAgICAiQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QnlJbmRleCI6IHsKKyAgICAgICAgICAg
ICJjb250ZXh0c0FsbG93ZWQiOiBbImludGVyZmFjZSJdCisgICAgICAgIH0sCisgICAgICAgICJD
dXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yIjogeworICAgICAgICAgICAgImNv
bnRleHRzQWxsb3dlZCI6IFsiaW50ZXJmYWNlIl0KKyAgICAgICAgfSwKICAgICAgICAgIkN1c3Rv
bUdldFByb3RvdHlwZSI6IHsKICAgICAgICAgICAgICJjb250ZXh0c0FsbG93ZWQiOiBbImludGVy
ZmFjZSJdCiAgICAgICAgIH0sCkBAIC0xMDQsNiArMTE2LDkgQEAKICAgICAgICAgIkN1c3RvbU5h
bWVkR2V0dGVyIjogewogICAgICAgICAgICAgImNvbnRleHRzQWxsb3dlZCI6IFsiaW50ZXJmYWNl
Il0KICAgICAgICAgfSwKKyAgICAgICAgIkN1c3RvbU5hbWVkR2V0dGVyT25Qcm90b3R5cGUiOiB7
CisgICAgICAgICAgICAiY29udGV4dHNBbGxvd2VkIjogWyJpbnRlcmZhY2UiXQorICAgICAgICB9
LAogICAgICAgICAiQ3VzdG9tTmFtZWRTZXR0ZXIiOiB7CiAgICAgICAgICAgICAiY29udGV4dHNB
bGxvd2VkIjogWyJpbnRlcmZhY2UiXQogICAgICAgICB9LApAQCAtMTEzLDYgKzEyOCw5IEBACiAg
ICAgICAgICJDdXN0b21Qcm94eVRvSlNPYmplY3QiOiB7CiAgICAgICAgICAgICAiY29udGV4dHNB
bGxvd2VkIjogWyJpbnRlcmZhY2UiXQogICAgICAgICB9LAorICAgICAgICAiQ3VzdG9tUHVzaEV2
ZW50SGFuZGxlclNjb3BlIjogeworICAgICAgICAgICAgImNvbnRleHRzQWxsb3dlZCI6IFsiaW50
ZXJmYWNlIl0KKyAgICAgICAgfSwKICAgICAgICAgIkN1c3RvbVB1dEZ1bmN0aW9uIjogewogICAg
ICAgICAgICAgImNvbnRleHRzQWxsb3dlZCI6IFsiaW50ZXJmYWNlIl0KICAgICAgICAgfSwKQEAg
LTIyMiwzMCArMjQwLDE1IEBACiAgICAgICAgICJKU0J1aWx0aW5Db25zdHJ1Y3RvciI6IHsKICAg
ICAgICAgICAgICJjb250ZXh0c0FsbG93ZWQiOiBbImludGVyZmFjZSJdCiAgICAgICAgIH0sCi0g
ICAgICAgICJKU0N1c3RvbURlZmluZU93blByb3BlcnR5IjogewotICAgICAgICAgICAgImNvbnRl
eHRzQWxsb3dlZCI6IFsiaW50ZXJmYWNlIl0KLSAgICAgICAgfSwKLSAgICAgICAgIkpTQ3VzdG9t
RGVmaW5lT3duUHJvcGVydHlPblByb3RvdHlwZSI6IHsKLSAgICAgICAgICAgICJjb250ZXh0c0Fs
bG93ZWQiOiBbImludGVyZmFjZSJdCi0gICAgICAgIH0sCiAgICAgICAgICJKU0N1c3RvbUZpbmFs
aXplIjogewogICAgICAgICAgICAgImNvbnRleHRzQWxsb3dlZCI6IFsiaW50ZXJmYWNlIl0KICAg
ICAgICAgfSwKLSAgICAgICAgIkpTQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRv
ciI6IHsKLSAgICAgICAgICAgICJjb250ZXh0c0FsbG93ZWQiOiBbImludGVyZmFjZSJdCi0gICAg
ICAgIH0sCiAgICAgICAgICJKU0N1c3RvbUhlYWRlciI6IHsKICAgICAgICAgICAgICJjb250ZXh0
c0FsbG93ZWQiOiBbImludGVyZmFjZSJdCiAgICAgICAgIH0sCiAgICAgICAgICJKU0N1c3RvbU1h
cmtGdW5jdGlvbiI6IHsKICAgICAgICAgICAgICJjb250ZXh0c0FsbG93ZWQiOiBbImludGVyZmFj
ZSJdCiAgICAgICAgIH0sCi0gICAgICAgICJKU0N1c3RvbU5hbWVkR2V0dGVyT25Qcm90b3R5cGUi
OiB7Ci0gICAgICAgICAgICAiY29udGV4dHNBbGxvd2VkIjogWyJpbnRlcmZhY2UiXQotICAgICAg
ICB9LAotICAgICAgICAiSlNDdXN0b21QdXNoRXZlbnRIYW5kbGVyU2NvcGUiOiB7Ci0gICAgICAg
ICAgICAiY29udGV4dHNBbGxvd2VkIjogWyJpbnRlcmZhY2UiXQotICAgICAgICB9LAogICAgICAg
ICAiSlNDdXN0b21Ub05hdGl2ZU9iamVjdCI6IHsKICAgICAgICAgICAgICJjb250ZXh0c0FsbG93
ZWQiOiBbImludGVyZmFjZSJdCiAgICAgICAgIH0sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaWRsCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0SW5kZXhl
ZFNldHRlck5vSWRlbnRpZmllci5pZGwJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmlkbAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworaW50ZXJmYWNlIFRl
c3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyIHsKKyAgICBzZXR0ZXIgdm9pZCAodW5zaWduZWQg
bG9uZyBpbmRleCwgRE9NU3RyaW5nIHZhbHVlKTsKKworICAgIC8vIE5PVEU6IEluZGV4ZWQgc2V0
dGVycyByZXF1aXJlIHRoZSBwcmVzZW5jZSBvZiBhIGluZGV4ZWQgZ2V0dGVyIGFzIHdlbGwuCisg
ICAgZ2V0dGVyIERPTVN0cmluZyAodW5zaWduZWQgbG9uZyBpbmRleCk7Cit9OwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb24uaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9UZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmlkbAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKK2ludGVyZmFjZSBUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uIHsKKyAgICBbTWF5VGhyb3dFeGNlcHRpb25dIHNldHRlciB2b2lkICh1bnNpZ25lZCBs
b25nIGluZGV4LCBET01TdHJpbmcgdmFsdWUpOworCisgICAgLy8gTk9URTogSW5kZXhlZCBzZXR0
ZXJzIHJlcXVpcmUgdGhlIHByZXNlbmNlIG9mIGEgaW5kZXhlZCBnZXR0ZXIgYXMgd2VsbC4KKyAg
ICBnZXR0ZXIgRE9NU3RyaW5nICh1bnNpZ25lZCBsb25nIGluZGV4KTsKK307CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuaWRsCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0SW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworaW50ZXJmYWNlIFRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIgeworICAg
IHNldHRlciB2b2lkIGluZGV4ZWRTZXR0ZXIodW5zaWduZWQgbG9uZyBpbmRleCwgRE9NU3RyaW5n
IHZhbHVlKTsKKworICAgIC8vIE5PVEU6IEluZGV4ZWQgc2V0dGVycyByZXF1aXJlIHRoZSBwcmVz
ZW5jZSBvZiBhIGluZGV4ZWQgZ2V0dGVyIGFzIHdlbGwuCisgICAgZ2V0dGVyIERPTVN0cmluZyAo
dW5zaWduZWQgbG9uZyBpbmRleCk7Cit9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmlkbAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
ck5vSWRlbnRpZmllci5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKK2ludGVyZmFjZSBUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyIHsK
KyAgICBzZXR0ZXIgdm9pZCAoRE9NU3RyaW5nIG5hbWUsIERPTVN0cmluZyB2YWx1ZSk7CisgICAg
Z2V0dGVyIERPTVN0cmluZyAoRE9NU3RyaW5nIG5hbWUpOworCisgICAgc2V0dGVyIHZvaWQgKHVu
c2lnbmVkIGxvbmcgaW5kZXgsIERPTVN0cmluZyB2YWx1ZSk7CisgICAgZ2V0dGVyIERPTVN0cmlu
ZyAodW5zaWduZWQgbG9uZyBpbmRleCk7Cit9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
bi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5pZGwJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKK2ludGVyZmFjZSBUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb24geworICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gc2V0dGVyIHZv
aWQgKERPTVN0cmluZyBuYW1lLCBET01TdHJpbmcgdmFsdWUpOworICAgIGdldHRlciBET01TdHJp
bmcgKERPTVN0cmluZyBuYW1lKTsKKworICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gc2V0dGVyIHZv
aWQgKHVuc2lnbmVkIGxvbmcgaW5kZXgsIERPTVN0cmluZyB2YWx1ZSk7CisgICAgZ2V0dGVyIERP
TVN0cmluZyAodW5zaWduZWQgbG9uZyBpbmRleCk7Cit9OwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRp
Zmllci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5pZGwJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKK2ludGVyZmFjZSBUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXIgeworICAgIHNldHRlciB2b2lkIG5hbWVkU2V0dGVyKERPTVN0cmluZyBu
YW1lLCBET01TdHJpbmcgdmFsdWUpOworICAgIGdldHRlciBET01TdHJpbmcgKERPTVN0cmluZyBu
YW1lKTsKKworICAgIHNldHRlciB2b2lkIGluZGV4ZWRTZXR0ZXIodW5zaWduZWQgbG9uZyBpbmRl
eCwgRE9NU3RyaW5nIHZhbHVlKTsKKyAgICBnZXR0ZXIgRE9NU3RyaW5nICh1bnNpZ25lZCBsb25n
IGluZGV4KTsKK307CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmlkbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlm
aWVyLmlkbAkocmV2aXNpb24gMjE3NzY3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5pZGwJKHdvcmtpbmcgY29w
eSkKQEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiBpbnRlcmZhY2UgVGVzdE5hbWVkRGVsZXRlcldp
dGhJZGVudGlmaWVyIHsKLSAgICBkZWxldGVyIHZvaWQgcmVtb3ZlKERPTVN0cmluZyBuYW1lKTsK
KyAgICBkZWxldGVyIHZvaWQgbmFtZWREZWxldGVyKERPTVN0cmluZyBuYW1lKTsKIAogICAgIC8v
IE5PVEU6IE5hbWVkIGRlbGV0ZXJzIHJlcXVpcmUgdGhlIHByZXNlbmNlIG9mIGEgbmFtZWQgZ2V0
dGVyIGFzIHdlbGwuCiAgICAgZ2V0dGVyIERPTVN0cmluZyAoRE9NU3RyaW5nIG5hbWUpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROYW1lZFNldHRlck5v
SWRlbnRpZmllci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5pZGwJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROYW1lZFNldHRlck5v
SWRlbnRpZmllci5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKK2ludGVyZmFjZSBUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIgeworICAgIHNldHRlciB2
b2lkIChET01TdHJpbmcgbmFtZSwgRE9NU3RyaW5nIHZhbHVlKTsKKworICAgIC8vIE5PVEU6IE5h
bWVkIHNldHRlcnMgcmVxdWlyZSB0aGUgcHJlc2VuY2Ugb2YgYSBuYW1lZCBnZXR0ZXIgYXMgd2Vs
bC4KKyAgICBnZXR0ZXIgRE9NU3RyaW5nIChET01TdHJpbmcgbmFtZSk7Cit9OwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROYW1lZFNldHRlclRocm93aW5n
RXhjZXB0aW9uLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaWRsCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0TmFtZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbi5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKK2ludGVyZmFjZSBUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiB7
CisgICAgW01heVRocm93RXhjZXB0aW9uXSBzZXR0ZXIgdm9pZCAoRE9NU3RyaW5nIG5hbWUsIERP
TVN0cmluZyB2YWx1ZSk7CisKKyAgICAvLyBOT1RFOiBOYW1lZCBzZXR0ZXJzIHJlcXVpcmUgdGhl
IHByZXNlbmNlIG9mIGEgbmFtZWQgZ2V0dGVyIGFzIHdlbGwuCisgICAgZ2V0dGVyIERPTVN0cmlu
ZyAoRE9NU3RyaW5nIG5hbWUpOworfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9UZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROYW1lZFNldHRlcldp
dGhJZGVudGlmaWVyLmlkbAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuaWRsCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitpbnRlcmZhY2UgVGVzdE5hbWVk
U2V0dGVyV2l0aElkZW50aWZpZXIgeworICAgIHNldHRlciB2b2lkIG5hbWVkU2V0dGVyKERPTVN0
cmluZyBuYW1lLCBET01TdHJpbmcgdmFsdWUpOworCisgICAgLy8gTk9URTogTmFtZWQgc2V0dGVy
cyByZXF1aXJlIHRoZSBwcmVzZW5jZSBvZiBhIG5hbWVkIGdldHRlciBhcyB3ZWxsLgorICAgIGdl
dHRlciBET01TdHJpbmcgKERPTVN0cmluZyBuYW1lKTsKK307CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRp
bnMuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9UZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucy5pZGwJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3ROYW1lZFNldHRlcldp
dGhPdmVycmlkZUJ1aWx0aW5zLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworWworICAgIE92ZXJyaWRlQnVpbHRpbnMKK10gaW50ZXJmYWNlIFRlc3ROYW1l
ZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zIHsKKyAgICBzZXR0ZXIgdm9pZCAoRE9NU3RyaW5n
IG5hbWUsIERPTVN0cmluZyB2YWx1ZSk7CisKKyAgICAvLyBOT1RFOiBOYW1lZCBzZXR0ZXJzIHJl
cXVpcmUgdGhlIHByZXNlbmNlIG9mIGEgbmFtZWQgZ2V0dGVyIGFzIHdlbGwuCisgICAgZ2V0dGVy
IERPTVN0cmluZyAoRE9NU3RyaW5nIG5hbWUpOworfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRp
ZXMuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9UZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMuaWRsCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0TmFtZWRTZXR0
ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCitpbnRlcmZhY2UgVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2Fi
bGVQcm9wZXJ0aWVzIHsKKyAgICBzZXR0ZXIgdm9pZCAoRE9NU3RyaW5nIG5hbWUsIERPTVN0cmlu
ZyB2YWx1ZSk7CisKKyAgICAvLyBOT1RFOiBOYW1lZCBzZXR0ZXJzIHJlcXVpcmUgdGhlIHByZXNl
bmNlIG9mIGEgbmFtZWQgZ2V0dGVyIGFzIHdlbGwuCisgICAgZ2V0dGVyIERPTVN0cmluZyAoRE9N
U3RyaW5nIG5hbWUpOworCisgICAgW1VuZm9yZ2VhYmxlXSByZWFkb25seSBhdHRyaWJ1dGUgRE9N
U3RyaW5nIHVuZm9yZ2VhYmxlQXR0cmlidXRlOworICAgIFtVbmZvcmdlYWJsZV0gdm9pZCB1bmZv
cmdlYWJsZU9wZXJhdGlvbigpOworfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9UZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVy
cmlkZUJ1aWx0aW5zLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3Zl
cnJpZGVCdWlsdGlucy5pZGwJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0Fu
ZE92ZXJyaWRlQnVpbHRpbnMuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCitbCisgICAgT3ZlcnJpZGVCdWlsdGlucworXSBpbnRlcmZhY2UgVGVzdE5hbWVk
U2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucyB7CisgICAg
c2V0dGVyIHZvaWQgKERPTVN0cmluZyBuYW1lLCBET01TdHJpbmcgdmFsdWUpOworCisgICAgLy8g
Tk9URTogTmFtZWQgc2V0dGVycyByZXF1aXJlIHRoZSBwcmVzZW5jZSBvZiBhIG5hbWVkIGdldHRl
ciBhcyB3ZWxsLgorICAgIGdldHRlciBET01TdHJpbmcgKERPTVN0cmluZyBuYW1lKTsKKworICAg
IFtVbmZvcmdlYWJsZV0gcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyB1bmZvcmdlYWJsZUF0
dHJpYnV0ZTsKKyAgICBbVW5mb3JnZWFibGVdIHZvaWQgdW5mb3JnZWFibGVPcGVyYXRpb24oKTsK
K307CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNJbnRl
cmZhY2VOYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTSW50ZXJmYWNlTmFtZS5oCShyZXZpc2lvbiAyMTc3NjcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNJbnRlcmZhY2VOYW1lLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6OkpTT2Jq
ZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CiAgICAg
c3RhdGljIEpTQzo6SlNPYmplY3QqIHByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmpl
Y3QmKTsKICAgICBzdGF0aWMgSW50ZXJmYWNlTmFtZSogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6
OkpTVmFsdWUpOworICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqKTsKICAg
ICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CiAKICAgICBERUNMQVJFX0lORk87
CkBAIC01MSw3ICs1Miw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENv
bnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAgICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CiAKLSAg
ICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKik7CiBwcm90ZWN0ZWQ6CiAgICAg
SlNJbnRlcmZhY2VOYW1lKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8
SW50ZXJmYWNlTmFtZT4mJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5oCShyZXZpc2lv
biAyMTc3NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RXZlbnRUYXJnZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIFRlc3RFdmVudFRhcmdldCogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpT
VmFsdWUpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0
KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3Qm
KTsKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0
eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1l
cmF0aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOwogCiAgICAgREVDTEFSRV9JTkZP
OwogCkBAIC01MCw3ICs1MSw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpT
Qzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAotICAgIHN0
YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlND
OjpFbnVtZXJhdGlvbk1vZGUoKSk7CiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1
Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwogICAgIFRlc3RFdmVu
dFRhcmdldCYgd3JhcHBlZCgpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlck5v
SWRlbnRpZmllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMDQgQEAKKy8qCisgICAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAg
IFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERP
IE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVGVzdElu
ZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaCIKKworI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgor
I2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCisjaW5jbHVkZSAi
SlNET01Db252ZXJ0LmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2lu
Y2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiVVJMLmgiCisjaW5jbHVkZSA8
cnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvUHJvcGVydHlO
YW1lQXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBK
U0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQXR0cmlidXRlcworCitKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jv
b2wgc2V0SlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CisKK2Ns
YXNzIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJQcm90b3R5cGUgOiBwdWJsaWMgSlND
OjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNDOjpKU05v
bkZpbmFsT2JqZWN0OworICAgIHN0YXRpYyBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVy
UHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rlc3RJ
bmRleGVkU2V0dGVyTm9JZGVudGlmaWVyUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpT
Qzo6YWxsb2NhdGVDZWxsPEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJQcm90b3R5cGU+
KHZtLmhlYXApKSBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyUHJvdG90eXBlKHZtLCBn
bG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0p
OworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBz
dGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3RJbmRleGVkU2V0dGVy
Tm9JZGVudGlmaWVyUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0M6OkpTTm9uRmluYWxPYmpl
Y3Qodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihKU0M6OlZNJik7Cit9OworCit1c2luZyBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVy
Q29uc3RydWN0b3IgPSBKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZTxKU1Rlc3RJbmRl
eGVkU2V0dGVyTm9JZGVudGlmaWVyPjsKKwordGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdEluZGV4
ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKEpT
Qzo6Vk0mIHZtLCBjb25zdCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAg
IFVOVVNFRF9QQVJBTSh2bSk7CisgICAgcmV0dXJuIGdsb2JhbE9iamVjdC5mdW5jdGlvblByb3Rv
dHlwZSgpOworfQorCit0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRp
ZmllckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5wcm90b3R5cGUsIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnByb3RvdHlw
ZSh2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwor
ICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3Ry
aW5nKCZ2bSwgU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZp
ZXIiKSkpLCBSZWFkT25seSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9udEVudW0pOworfQor
Cit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlm
aWVyQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVy
IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShK
U1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IpIH07CisKKy8qIEhhc2gg
dGFibGUgZm9yIHByb3RvdHlwZSAqLworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNU
ZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllclByb3RvdHlwZVRhYmxlVmFsdWVzW10gPQorewor
ICAgIHsgImNvbnN0cnVjdG9yIiwgRG9udEVudW0sIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClz
dGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0SW5kZXhlZFNldHRl
ck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9w
ZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmll
ckNvbnN0cnVjdG9yKSB9IH0sCit9OworCitjb25zdCBDbGFzc0luZm8gSlNUZXN0SW5kZXhlZFNl
dHRlck5vSWRlbnRpZmllclByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdEluZGV4ZWRTZXR0ZXJO
b0lkZW50aWZpZXJQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJQcm90b3R5
cGUpIH07CisKK3ZvaWQgSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllclByb3RvdHlwZTo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsK
KyAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50
aWZpZXJQcm90b3R5cGVUYWJsZVZhbHVlcywgKnRoaXMpOworfQorCitjb25zdCBDbGFzc0luZm8g
SlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6c19pbmZvID0geyAiVGVzdEluZGV4ZWRT
ZXR0ZXJOb0lkZW50aWZpZXIiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIpIH07CisKK0pT
VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OkpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50
aWZpZXIoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIFJlZjxUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcj4mJiBpbXBsKQorICAgIDogSlNE
T01XcmFwcGVyPFRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyPihzdHJ1Y3R1cmUsIGdsb2Jh
bE9iamVjdCwgV1RGTW92ZShpbXBsKSkKK3sKK30KKwordm9pZCBKU1Rlc3RJbmRleGVkU2V0dGVy
Tm9JZGVudGlmaWVyOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24odm0pOworICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CisKK30KKwor
SlNPYmplY3QqIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmNyZWF0ZVByb3RvdHlw
ZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJu
IEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJQcm90b3R5cGU6OmNyZWF0ZSh2bSwgJmds
b2JhbE9iamVjdCwgSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllclByb3RvdHlwZTo6Y3Jl
YXRlU3RydWN0dXJlKHZtLCAmZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qub2JqZWN0UHJvdG90
eXBlKCkpKTsKK30KKworSlNPYmplY3QqIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6
OnByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7Cisg
ICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVy
Pih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKworSlNWYWx1ZSBKU1Rlc3RJbmRleGVkU2V0dGVyTm9J
ZGVudGlmaWVyOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdEluZGV4
ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01H
bG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKK30KKwordm9pZCBKU1Rlc3RJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQoreworICAgIEpTVGVz
dEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rl
c3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyKj4oY2VsbCk7CisgICAgdGhpc09iamVjdC0+SlNU
ZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6fkpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50
aWZpZXIoKTsKK30KKworYm9vbCBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIGF1dG8qIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcio+KG9iamVj
dCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwor
ICAgIGF1dG8gb3B0aW9uYWxJbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKTsKKyAgICBp
ZiAob3B0aW9uYWxJbmRleCAmJiBvcHRpb25hbEluZGV4LnZhbHVlKCkgPCB0aGlzT2JqZWN0LT53
cmFwcGVkKCkubGVuZ3RoKCkpIHsKKyAgICAgICAgYXV0byBpbmRleCA9IG9wdGlvbmFsSW5kZXgu
dmFsdWUoKTsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCAwLCB0b0pTPElETERP
TVN0cmluZz4oKnN0YXRlLCB0aGlzT2JqZWN0LT53cmFwcGVkKCkuaXRlbShpbmRleCkpKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmIChCYXNlOjpnZXRPd25Qcm9wZXJ0eVNs
b3QodGhpc09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBKU1Rlc3RJbmRleGVkU2V0dGVy
Tm9JZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7
CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVu
dGlmaWVyKj4ob2JqZWN0KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CisgICAgaWYgKExJS0VMWShpbmRleCA8IHRoaXNPYmplY3QtPndyYXBwZWQo
KS5sZW5ndGgoKSkpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCAwLCB0b0pT
PElETERPTVN0cmluZz4oKnN0YXRlLCB0aGlzT2JqZWN0LT53cmFwcGVkKCkuaXRlbShpbmRleCkp
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBCYXNlOjpnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KHRoaXNPYmplY3QsIHN0YXRlLCBpbmRleCwgc2xvdCk7Cit9CisK
K3ZvaWQgSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1l
cyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyKj4ob2JqZWN0KTsK
KyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMCwgY291bnQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkubGVuZ3Ro
KCk7IGkgPCBjb3VudDsgKytpKQorICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVy
Ojpmcm9tKHN0YXRlLCBpKSk7CisgICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2Jq
ZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7Cit9CisKK2Jvb2wgSlNUZXN0SW5kZXhl
ZFNldHRlck5vSWRlbnRpZmllcjo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBzdGF0ZSwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90
JiBwdXRQcm9wZXJ0eVNsb3QpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rl
c3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworCisgICAgaWYgKGF1dG8gaW5kZXggPSBw
YXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7CisgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCB2YWx1ZSk7CisgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CisgICAgICAgIHRoaXNPYmplY3QtPndyYXBw
ZWQoKS5zZXRJdGVtKGluZGV4LnZhbHVlKCksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIEJhc2U6OnB1dCh0aGlzT2JqZWN0
LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKK30KKworYm9v
bCBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpwdXRCeUluZGV4KEpTQ2VsbCogY2Vs
bCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wg
c2hvdWxkVGhyb3cpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RJbmRl
eGVkU2V0dGVyTm9JZGVudGlmaWVyKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworCisgICAgaWYgKExJS0VMWShpbmRleCA8PSBNQVhf
QVJSQVlfSU5ERVgpKSB7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUoc3RhdGUtPnZtKCkpOworICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJ
RExET01TdHJpbmc+KCpzdGF0ZSwgdmFsdWUpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIHRydWUpOworICAgICAgICB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0SXRl
bShpbmRleCwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gQmFzZTo6cHV0QnlJbmRleChjZWxsLCBzdGF0ZSwgaW5kZXgsIHZh
bHVlLCBzaG91bGRUaHJvdyk7Cit9CisKK2Jvb2wgSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRp
Zmllcjo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0
ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBw
cm9wZXJ0eURlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyKj4ob2JqZWN0KTsK
KyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisKKyAg
ICBpZiAoYXV0byBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgeworICAgICAgICBp
ZiAoIXByb3BlcnR5RGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUoc3RhdGUtPnZtKCkpOworICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExE
T01TdHJpbmc+KCpzdGF0ZSwgcHJvcGVydHlEZXNjcmlwdG9yLnZhbHVlKCkpOworICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOworICAgICAgICB0aGlzT2JqZWN0
LT53cmFwcGVkKCkuc2V0SXRlbShpbmRleC52YWx1ZSgpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIFByb3BlcnR5RGVzY3JpcHRvciBu
ZXdQcm9wZXJ0eURlc2NyaXB0b3IgPSBwcm9wZXJ0eURlc2NyaXB0b3I7CisgICAgbmV3UHJvcGVy
dHlEZXNjcmlwdG9yLnNldENvbmZpZ3VyYWJsZSh0cnVlKTsKKyAgICByZXR1cm4gQmFzZTo6ZGVm
aW5lT3duUHJvcGVydHkob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBuZXdQcm9wZXJ0eURl
c2NyaXB0b3IsIHNob3VsZFRocm93KTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0SW5kZXhl
ZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEluZGV4ZWRTZXR0ZXJO
b0lkZW50aWZpZXJQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwor
ICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNU
ZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUtPnZtKCks
IHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKK30KKworYm9vbCBzZXRKU1Rlc3RJbmRleGVk
U2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0
SW5kZXhlZFNldHRlck5vSWRlbnRpZmllclByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7CisgICAgICAgIHRo
cm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCisgICAgcmV0
dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1l
cygpLmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7Cit9CisKK2Jv
b2wgSlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllck93bmVyOjppc1JlYWNoYWJsZUZyb21P
cGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQoreworICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOworICAgIFVOVVNF
RF9QQVJBTSh2aXNpdG9yKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSlNUZXN0SW5k
ZXhlZFNldHRlck5vSWRlbnRpZmllck93bmVyOjpmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4dCkKK3sKKyAgICBhdXRvKiBqc1Rlc3RJbmRleGVk
U2V0dGVyTm9JZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8SlNUZXN0SW5kZXhlZFNldHRlck5vSWRl
bnRpZmllcio+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKKyAgICBhdXRvJiB3b3JsZCA9ICpz
dGF0aWNfY2FzdDxET01XcmFwcGVyV29ybGQqPihjb250ZXh0KTsKKyAgICB1bmNhY2hlV3JhcHBl
cih3b3JsZCwgJmpzVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXItPndyYXBwZWQoKSwganNU
ZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcik7Cit9CisKKyNpZiBFTkFCTEUoQklORElOR19J
TlRFR1JJVFkpCisjaWYgUExBVEZPUk0oV0lOKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ0
ODMpCitleHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQgKCpjb25zdCBfX2lkZW50aWZpZXIoIj8/XzdU
ZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllckBXZWJDb3JlQEA2QkAiKVtdKSgpOyB9CisjZWxz
ZQorZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkKiBfWlRWTjdXZWJDb3JlMjlUZXN0SW5kZXhlZFNl
dHRlck5vSWRlbnRpZmllckVbXTsgfQorI2VuZGlmCisjZW5kaWYKKworSlNDOjpKU1ZhbHVlIHRv
SlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBSZWY8VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI+JiYgaW1wbCkKK3sKKwor
I2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKKyAgICB2b2lkKiBhY3R1YWxWVGFibGVQb2lu
dGVyID0gKihyZWludGVycHJldF9jYXN0PHZvaWQqKj4oaW1wbC5wdHIoKSkpOworI2lmIFBMQVRG
T1JNKFdJTikKKyAgICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSByZWludGVycHJldF9j
YXN0PHZvaWQqPihfX2lkZW50aWZpZXIoIj8/XzdUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmll
ckBXZWJDb3JlQEA2QkAiKSk7CisjZWxzZQorICAgIHZvaWQqIGV4cGVjdGVkVlRhYmxlUG9pbnRl
ciA9ICZfWlRWTjdXZWJDb3JlMjlUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllckVbMl07Cisj
aWYgQ09NUElMRVIoQ0xBTkcpCisgICAgLy8gSWYgdGhpcyBmYWlscyBUZXN0SW5kZXhlZFNldHRl
ck5vSWRlbnRpZmllciBkb2VzIG5vdCBoYXZlIGEgdnRhYmxlLCBzbyB5b3UgbmVlZCB0byBhZGQg
dGhlCisgICAgLy8gSW1wbGVtZW50YXRpb25MYWNrc1ZUYWJsZSBhdHRyaWJ1dGUgdG8gdGhlIGlu
dGVyZmFjZSBkZWZpbml0aW9uCisgICAgc3RhdGljX2Fzc2VydChfX2lzX3BvbHltb3JwaGljKFRl
c3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyKSwgIlRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlm
aWVyIGlzIG5vdCBwb2x5bW9ycGhpYyIpOworI2VuZGlmCisjZW5kaWYKKyAgICAvLyBJZiB5b3Ug
aGl0IHRoaXMgYXNzZXJ0aW9uIHlvdSBlaXRoZXIgaGF2ZSBhIHVzZSBhZnRlciBmcmVlIGJ1Zywg
b3IKKyAgICAvLyBUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllciBoYXMgc3ViY2xhc3Nlcy4g
SWYgVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIgaGFzIHN1YmNsYXNzZXMgdGhhdCBnZXQg
cGFzc2VkCisgICAgLy8gdG8gdG9KUygpIHdlIGN1cnJlbnRseSByZXF1aXJlIFRlc3RJbmRleGVk
U2V0dGVyTm9JZGVudGlmaWVyIHlvdSB0byBvcHQgb3V0IG9mIGJpbmRpbmcgaGFyZGVuaW5nCisg
ICAgLy8gYnkgYWRkaW5nIHRoZSBTa2lwVlRhYmxlVmFsaWRhdGlvbiBhdHRyaWJ1dGUgdG8gdGhl
IGludGVyZmFjZSBJREwgZGVmaW5pdGlvbgorICAgIFJFTEVBU0VfQVNTRVJUKGFjdHVhbFZUYWJs
ZVBvaW50ZXIgPT0gZXhwZWN0ZWRWVGFibGVQb2ludGVyKTsKKyNlbmRpZgorICAgIHJldHVybiBj
cmVhdGVXcmFwcGVyPFRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyPihnbG9iYWxPYmplY3Qs
IFdURk1vdmUoaW1wbCkpOworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RJbmRleGVkU2V0dGVy
Tm9JZGVudGlmaWVyJiBpbXBsKQoreworICAgIHJldHVybiB3cmFwKHN0YXRlLCBnbG9iYWxPYmpl
Y3QsIGltcGwpOworfQorCitUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllciogSlNUZXN0SW5k
ZXhlZFNldHRlck5vSWRlbnRpZmllcjo6dG9XcmFwcGVkKEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCit7CisgICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBqc0R5bmFtaWNEb3duY2FzdDxK
U1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyKj4odm0sIHZhbHVlKSkKKyAgICAgICAgcmV0
dXJuICZ3cmFwcGVyLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVk
U2V0dGVyTm9JZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
OTMgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJKU0RPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmll
ci5oIgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIgOiBwdWJsaWMgSlNE
T01XcmFwcGVyPFRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyPiB7CitwdWJsaWM6CisgICAg
dXNpbmcgQmFzZSA9IEpTRE9NV3JhcHBlcjxUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcj47
CisgICAgc3RhdGljIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIqIGNyZWF0ZShKU0M6
OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBS
ZWY8VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI+JiYgaW1wbCkKKyAgICB7CisgICAgICAg
IEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlND
OjphbGxvY2F0ZUNlbGw8SlNUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcj4oZ2xvYmFsT2Jq
ZWN0LT52bSgpLmhlYXApKSBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyKHN0cnVjdHVy
ZSwgKmdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisK
KyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RP
TUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUoSlND
OjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CisgICAgc3RhdGljIFRlc3RJbmRleGVkU2V0dGVy
Tm9JZGVudGlmaWVyKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CisgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0
YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHN0
YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlND
OjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGljIGJvb2wgcHV0KEpTQzo6SlNDZWxsKiwg
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1
dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwq
LCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBi
b29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU0M6
OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgY29uc3QgSlND
OjpQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgdm9p
ZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0
aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0
b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6OkludGVyY2VwdHNHZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8
IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworcHJvdGVjdGVkOgorICAgIEpTVGVzdEluZGV4ZWRTZXR0
ZXJOb0lkZW50aWZpZXIoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxU
ZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcj4mJik7CisKKyAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKEpTQzo6Vk0mKTsKK307CisKK2NsYXNzIEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZp
ZXJPd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CitwdWJsaWM6CisgICAgdmly
dHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCk7Cit9
OworCitpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVy
V29ybGQmLCBUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllciopCit7CisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEpTVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJPd25lcj4gb3duZXI7
CisgICAgcmV0dXJuICZvd25lci5nZXQoKTsKK30KKworaW5saW5lIHZvaWQqIHdyYXBwZXJLZXko
VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIqIHdyYXBwYWJsZU9iamVjdCkKK3sKKyAgICBy
ZXR1cm4gd3JhcHBhYmxlT2JqZWN0OworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIm
KTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVy
KiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkg
OiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4
ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3RJbmRleGVkU2V0dGVyTm9JZGVu
dGlmaWVyPiYmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxU
ZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcj4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9K
U05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkp
IDogSlNDOjpqc051bGwoKTsgfQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252
ZXJ0ZXJUcmFpdHM8VGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI+IHsKKyAgICB1c2luZyBX
cmFwcGVyQ2xhc3MgPSBKU1Rlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOworICAgIHVzaW5n
IFRvV3JhcHBlZFJldHVyblR5cGUgPSBUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllcio7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwNCBA
QAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHBy
b2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5k
aW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgiCisKKyNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJs
ZS5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydC5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9u
SGFuZGxpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgIlVS
TC5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KKyNpbmNsdWRlIDxy
dW50aW1lL1Byb3BlcnR5TmFtZUFycmF5Lmg+CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorCit1
c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEF0dHJpYnV0
ZXMKKworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb25Db25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OkVuY29kZWRKU1ZhbHVlKTsKKworY2xhc3MgSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5n
RXhjZXB0aW9uUHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJs
aWM6CisgICAgdXNpbmcgQmFzZSA9IEpTQzo6SlNOb25GaW5hbE9iamVjdDsKKyAgICBzdGF0aWMg
SlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uUHJvdG90eXBlKiBjcmVhdGUoSlND
OjpWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb25Qcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8
SlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uUHJvdG90eXBlPih2bS5oZWFwKSkg
SlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uUHJvdG90eXBlKHZtLCBnbG9iYWxP
YmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAg
ICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMg
SlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb25Qcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEpTQzo6SlNOb25GaW5hbE9iamVj
dCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KEpTQzo6Vk0mKTsKK307CisKK3VzaW5nIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbkNvbnN0cnVjdG9yID0gSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8SlNUZXN0
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uPjsKKwordGVtcGxhdGU8PiBKU1ZhbHVlIEpT
VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yOjpwcm90b3R5cGVG
b3JTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICByZXR1cm4gZ2xvYmFsT2JqZWN0
LmZ1bmN0aW9uUHJvdG90eXBlKCk7Cit9CisKK3RlbXBsYXRlPD4gdm9pZCBKU1Rlc3RJbmRleGVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMo
Vk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RJbmRleGVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb246OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8
IFJlYWRPbmx5IHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiVGVz
dEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpKSksIFJlYWRPbmx5IHwgRG9udEVudW0p
OworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigw
KSwgUmVhZE9ubHkgfCBEb250RW51bSk7Cit9CisKK3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZv
IEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yOjpzX2luZm8g
PSB7ICJUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uIiwgJkJhc2U6OnNfaW5mbywg
bnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RJbmRleGVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvcikgfTsKKworLyogSGFzaCB0YWJsZSBmb3IgcHJv
dG90eXBlICovCisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RJbmRleGVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb25Qcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KK3sKKyAgICB7ICJj
b25zdHJ1Y3RvciIsIERvbnRFbnVtLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nh
c3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbkNvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0
eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uQ29uc3RydWN0b3IpIH0gfSwKK307CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3RJbmRleGVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Qcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RJbmRleGVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Qcm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCBudWxscHRy
LCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvblByb3RvdHlwZSkgfTsKKwordm9pZCBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb25Qcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBKU1Rl
c3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Qcm90b3R5cGVUYWJsZVZhbHVlcywgKnRo
aXMpOworfQorCitjb25zdCBDbGFzc0luZm8gSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uOjpzX2luZm8gPSB7ICJUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uIiwg
JkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rl
c3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24pIH07CisKK0pTVGVzdEluZGV4ZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6SlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9u
KFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBS
ZWY8VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4mJiBpbXBsKQorICAgIDogSlNE
T01XcmFwcGVyPFRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+KHN0cnVjdHVyZSwg
Z2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKQoreworfQorCit2b2lkIEpTVGVzdEluZGV4ZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkp
OworCit9CisKK0pTT2JqZWN0KiBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246
OmNyZWF0ZVByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qp
Cit7CisgICAgcmV0dXJuIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvblByb3Rv
dHlwZTo6Y3JlYXRlKHZtLCAmZ2xvYmFsT2JqZWN0LCBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb25Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgJmdsb2JhbE9iamVjdCwg
Z2xvYmFsT2JqZWN0Lm9iamVjdFByb3RvdHlwZSgpKSk7Cit9CisKK0pTT2JqZWN0KiBKU1Rlc3RJ
bmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxK
U1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+KHZtLCBnbG9iYWxPYmplY3QpOwor
fQorCitKU1ZhbHVlIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6Z2V0Q29u
c3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorewor
ICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb25Db25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3Qq
PihnbG9iYWxPYmplY3QpKTsKK30KKwordm9pZCBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb246OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCit7CisgICAgSlNUZXN0SW5kZXhl
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4oY2VsbCk7CisgICAgdGhpc09iamVjdC0+
SlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjp+SlNUZXN0SW5kZXhlZFNldHRl
clRocm93aW5nRXhjZXB0aW9uKCk7Cit9CisKK2Jvb2wgSlNUZXN0SW5kZXhlZFNldHRlclRocm93
aW5nRXhjZXB0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90
KQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0SW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uKj4ob2JqZWN0KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgYXV0byBvcHRpb25hbEluZGV4ID0gcGFyc2VJbmRl
eChwcm9wZXJ0eU5hbWUpOworICAgIGlmIChvcHRpb25hbEluZGV4ICYmIG9wdGlvbmFsSW5kZXgu
dmFsdWUoKSA8IHRoaXNPYmplY3QtPndyYXBwZWQoKS5sZW5ndGgoKSkgeworICAgICAgICBhdXRv
IGluZGV4ID0gb3B0aW9uYWxJbmRleC52YWx1ZSgpOworICAgICAgICBzbG90LnNldFZhbHVlKHRo
aXNPYmplY3QsIDAsIHRvSlM8SURMRE9NU3RyaW5nPigqc3RhdGUsIHRoaXNPYmplY3QtPndyYXBw
ZWQoKS5pdGVtKGluZGV4KSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYg
KEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1l
LCBzbG90KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiti
b29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6Z2V0T3duUHJvcGVydHlT
bG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBp
bmRleCwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4ob2JqZWN0KTsKKyAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgaWYgKExJ
S0VMWShpbmRleCA8IHRoaXNPYmplY3QtPndyYXBwZWQoKS5sZW5ndGgoKSkpIHsKKyAgICAgICAg
c2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCAwLCB0b0pTPElETERPTVN0cmluZz4oKnN0YXRlLCB0
aGlzT2JqZWN0LT53cmFwcGVkKCkuaXRlbShpbmRleCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRoaXNP
YmplY3QsIHN0YXRlLCBpbmRleCwgc2xvdCk7Cit9CisKK3ZvaWQgSlNUZXN0SW5kZXhlZFNldHRl
clRocm93aW5nRXhjZXB0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVt
ZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVz
dEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KG9iamVjdCk7CisgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIGZvciAodW5zaWduZWQg
aSA9IDAsIGNvdW50ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLmxlbmd0aCgpOyBpIDwgY291bnQ7
ICsraSkKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwg
aSkpOworICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwgc3RhdGUsIHBy
b3BlcnR5TmFtZXMsIG1vZGUpOworfQorCitib29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbjo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBwdXRQcm9w
ZXJ0eVNsb3QpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RJbmRleGVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisKKyAgICBpZiAoYXV0byBpbmRleCA9IHBhcnNl
SW5kZXgocHJvcGVydHlOYW1lKSkgeworICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKKyAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKCpz
dGF0ZSwgdGhyb3dTY29wZSwgdGhpc09iamVjdC0+d3JhcHBlZCgpLnNldEl0ZW0oaW5kZXgudmFs
dWUoKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgcmV0dXJuIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKK30KKworYm9vbCBKU1Rlc3RJbmRleGVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb246OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0
YXRlLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sK
KyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbio+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKKworICAgIGlmIChMSUtFTFkoaW5kZXggPD0gTUFYX0FSUkFZX0lOREVY
KSkgeworICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRl
LT52bSgpKTsKKyAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5n
Pigqc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCB0cnVlKTsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKCpzdGF0ZSwgdGhyb3dTY29wZSwg
dGhpc09iamVjdC0+d3JhcHBlZCgpLnNldEl0ZW0oaW5kZXgsIFdURk1vdmUobmF0aXZlVmFsdWUp
KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBCYXNlOjpwdXRC
eUluZGV4KGNlbGwsIHN0YXRlLCBpbmRleCwgdmFsdWUsIHNob3VsZFRocm93KTsKK30KKworYm9v
bCBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmRlZmluZU93blByb3BlcnR5
KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgcHJvcGVydHlEZXNjcmlwdG9yLCBib29s
IHNob3VsZFRocm93KQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0SW5k
ZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4ob2JqZWN0KTsKKyAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisKKyAgICBpZiAoYXV0byBpbmRleCA9
IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgeworICAgICAgICBpZiAoIXByb3BlcnR5RGVzY3Jp
cHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwor
ICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwg
cHJvcGVydHlEZXNjcmlwdG9yLnZhbHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIHRydWUpOworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oKnN0YXRlLCB0
aHJvd1Njb3BlLCB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0SXRlbShpbmRleC52YWx1ZSgpLCBX
VEZNb3ZlKG5hdGl2ZVZhbHVlKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICBQcm9wZXJ0eURlc2NyaXB0b3IgbmV3UHJvcGVydHlEZXNjcmlwdG9yID0gcHJvcGVydHlEZXNj
cmlwdG9yOworICAgIG5ld1Byb3BlcnR5RGVzY3JpcHRvci5zZXRDb25maWd1cmFibGUodHJ1ZSk7
CisgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgc3RhdGUsIHByb3Bl
cnR5TmFtZSwgbmV3UHJvcGVydHlEZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9CisKK0VuY29k
ZWRKU1ZhbHVlIGpzVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1l
KQoreworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Rv
d25jYXN0PEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvblByb3RvdHlwZSo+KHZt
LCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5
cGUpKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb246OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBwcm90b3R5cGUtPmdsb2JhbE9i
amVjdCgpKSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUtPnZt
KCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
YXV0byogcHJvdG90eXBlID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0SW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKKyAgICAgICAgdGhyb3dWTVR5cGVF
cnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKKyAgICByZXR1cm4gcHJvdG90
eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3Ry
dWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKK30KKworYm9vbCBKU1Rlc3RJ
bmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Pd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3sKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKKyAgICBVTlVTRURfUEFS
QU0odmlzaXRvcik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEpTVGVzdEluZGV4ZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbk93bmVyOjpmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4dCkKK3sKKyAgICBhdXRvKiBqc1Rlc3RJbmRleGVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb24gPSBzdGF0aWNfY2FzdDxKU1Rlc3RJbmRleGVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb24qPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CisgICAgYXV0byYg
d29ybGQgPSAqc3RhdGljX2Nhc3Q8RE9NV3JhcHBlcldvcmxkKj4oY29udGV4dCk7CisgICAgdW5j
YWNoZVdyYXBwZXIod29ybGQsICZqc1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24t
PndyYXBwZWQoKSwganNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKTsKK30KKwor
I2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKKyNpZiBQTEFURk9STShXSU4pCisjcHJhZ21h
IHdhcm5pbmcoZGlzYWJsZTogNDQ4MykKK2V4dGVybiAiQyIgeyBleHRlcm4gdm9pZCAoKmNvbnN0
IF9faWRlbnRpZmllcigiPz9fN1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25AV2Vi
Q29yZUBANkJAIilbXSkoKTsgfQorI2Vsc2UKK2V4dGVybiAiQyIgeyBleHRlcm4gdm9pZCogX1pU
Vk43V2ViQ29yZTM0VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkVbXTsgfQorI2Vu
ZGlmCisjZW5kaWYKKworSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3Rh
dGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdEluZGV4ZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbj4mJiBpbXBsKQoreworCisjaWYgRU5BQkxFKEJJTkRJTkdfSU5U
RUdSSVRZKQorICAgIHZvaWQqIGFjdHVhbFZUYWJsZVBvaW50ZXIgPSAqKHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCoqPihpbXBsLnB0cigpKSk7CisjaWYgUExBVEZPUk0oV0lOKQorICAgIHZvaWQqIGV4
cGVjdGVkVlRhYmxlUG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KF9faWRlbnRpZmll
cigiPz9fN1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25AV2ViQ29yZUBANkJAIikp
OworI2Vsc2UKKyAgICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSAmX1pUVk43V2ViQ29y
ZTM0VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkVbMl07CisjaWYgQ09NUElMRVIo
Q0xBTkcpCisgICAgLy8gSWYgdGhpcyBmYWlscyBUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uIGRvZXMgbm90IGhhdmUgYSB2dGFibGUsIHNvIHlvdSBuZWVkIHRvIGFkZCB0aGUKKyAg
ICAvLyBJbXBsZW1lbnRhdGlvbkxhY2tzVlRhYmxlIGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJmYWNl
IGRlZmluaXRpb24KKyAgICBzdGF0aWNfYXNzZXJ0KF9faXNfcG9seW1vcnBoaWMoVGVzdEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiksICJUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uIGlzIG5vdCBwb2x5bW9ycGhpYyIpOworI2VuZGlmCisjZW5kaWYKKyAgICAvLyBJZiB5
b3UgaGl0IHRoaXMgYXNzZXJ0aW9uIHlvdSBlaXRoZXIgaGF2ZSBhIHVzZSBhZnRlciBmcmVlIGJ1
Zywgb3IKKyAgICAvLyBUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uIGhhcyBzdWJj
bGFzc2VzLiBJZiBUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uIGhhcyBzdWJjbGFz
c2VzIHRoYXQgZ2V0IHBhc3NlZAorICAgIC8vIHRvIHRvSlMoKSB3ZSBjdXJyZW50bHkgcmVxdWly
ZSBUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uIHlvdSB0byBvcHQgb3V0IG9mIGJp
bmRpbmcgaGFyZGVuaW5nCisgICAgLy8gYnkgYWRkaW5nIHRoZSBTa2lwVlRhYmxlVmFsaWRhdGlv
biBhdHRyaWJ1dGUgdG8gdGhlIGludGVyZmFjZSBJREwgZGVmaW5pdGlvbgorICAgIFJFTEVBU0Vf
QVNTRVJUKGFjdHVhbFZUYWJsZVBvaW50ZXIgPT0gZXhwZWN0ZWRWVGFibGVQb2ludGVyKTsKKyNl
bmRpZgorICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPFRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb24+KGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7Cit9CisKK0pTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiYgaW1wbCkKK3sKKyAgICBy
ZXR1cm4gd3JhcChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKK30KKworVGVzdEluZGV4ZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiogSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uOjp0b1dyYXBwZWQoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBp
ZiAoYXV0byogd3JhcHBlciA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdEluZGV4ZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbio+KHZtLCB2YWx1ZSkpCisgICAgICAgIHJldHVybiAmd3JhcHBlci0+
d3JhcHBlZCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCit9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5n
RXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJ
bmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDkzIEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAg
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiSlNET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiA6
IHB1YmxpYyBKU0RPTVdyYXBwZXI8VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4g
eworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0RPTVdyYXBwZXI8VGVzdEluZGV4ZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbj47CisgICAgc3RhdGljIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbiogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uPiYmIGltcGwpCisgICAgeworICAgICAgICBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb24qIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uPihnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkp
IEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbihzdHJ1Y3R1cmUsICpnbG9iYWxP
YmplY3QsIFdURk1vdmUoaW1wbCkpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2Jh
bE9iamVjdC0+dm0oKSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgc3RhdGlj
IEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmpl
Y3QmKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RP
TUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CisgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyB2
b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVt
ZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGljIGJvb2wgcHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3Bl
cnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6
OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBib29sIHNo
b3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgY29uc3QgSlNDOjpQcm9w
ZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0
cm95KEpTQzo6SlNDZWxsKik7CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgSlND
OjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlND
OjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dl
dE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEJhc2U6
OlN0cnVjdHVyZUZsYWdzOworcHJvdGVjdGVkOgorICAgIEpTVGVzdEluZGV4ZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbihKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRl
c3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+JiYpOworCisgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihKU0M6OlZNJik7Cit9OworCitjbGFzcyBKU1Rlc3RJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb25Pd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CitwdWJsaWM6
CisgICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29u
dGV4dCk7Cit9OworCitpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihE
T01XcmFwcGVyV29ybGQmLCBUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKikKK3sK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uT3duZXI+IG93bmVyOworICAgIHJldHVybiAmb3duZXIuZ2V0KCk7Cit9CisKK2lubGlu
ZSB2b2lkKiB3cmFwcGVyS2V5KFRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qIHdy
YXBwYWJsZU9iamVjdCkKK3sKKyAgICByZXR1cm4gd3JhcHBhYmxlT2JqZWN0OworfQorCitKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdElu
ZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
VGVzdEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiogaW1wbCkgeyByZXR1cm4gaW1wbCA/
IHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgKmltcGwpIDogSlNDOjpqc051bGwoKTsgfQorSlND
OjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9i
amVjdCosIFJlZjxUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uPiYmKTsKK2lubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0SW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVk
KHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVs
bCgpOyB9CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxU
ZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uPiB7CisgICAgdXNpbmcgV3JhcHBlckNs
YXNzID0gSlNUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOworICAgIHVzaW5nIFRv
V3JhcHBlZFJldHVyblR5cGUgPSBUZXN0SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKjsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzM1IEBACisvKgor
ICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1Rl
c3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuaCIKKworI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgorI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCisjaW5j
bHVkZSAiSlNET01Db252ZXJ0LmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5o
IgorI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2Fj
aGUuaCIKKyNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRlIDxydW50aW1lL0Z1bmN0aW9uUHJvdG90
eXBlLmg+CisjaW5jbHVkZSA8cnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5oPgorI2luY2x1ZGUg
PHd0Zi9HZXRQdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisvLyBGdW5jdGlvbnMKKworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZUZ1bmN0aW9uSW5kZXhl
ZFNldHRlcihKU0M6OkV4ZWNTdGF0ZSopOworCisvLyBBdHRyaWJ1dGVzCisKK0pTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citi
b29sIHNldEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CisK
K2NsYXNzIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZSA6IHB1Ymxp
YyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0M6
OkpTTm9uRmluYWxPYmplY3Q7CisgICAgc3RhdGljIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllclByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAg
SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5v
dE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmll
clByb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllclBy
b3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlz
aENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJF
X0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpW
TSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHBy
b3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0M6
OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cit9OworCit1c2luZyBKU1Rlc3RJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvciA9IEpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1
Y3RhYmxlPEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj47CisKK3RlbXBsYXRlPD4g
SlNWYWx1ZSBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3Rvcjo6cHJv
dG90eXBlRm9yU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBjb25zdCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTSh2bSk7CisgICAgcmV0dXJuIGdsb2Jh
bE9iamVjdC5mdW5jdGlvblByb3RvdHlwZSgpOworfQorCit0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0
aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0SW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUg
fCBSZWFkT25seSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZyhBU0NJSUxpdGVyYWwoIlRl
c3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIiKSkpLCBSZWFkT25seSB8IERvbnRFbnVtKTsK
KyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCks
IFJlYWRPbmx5IHwgRG9udEVudW0pOworfQorCit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBK
U1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAi
VGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIs
IG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyQ29uc3RydWN0b3IpIH07CisKKy8qIEhhc2ggdGFibGUgZm9yIHByb3RvdHlwZSAqLwor
CitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyUHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9Cit7CisgICAgeyAiY29uc3RydWN0b3IiLCBE
b250RW51bSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xv
dDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1
Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1
bmM+KHNldEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKSB9IH0s
CisgICAgeyAiaW5kZXhlZFNldHRlciIsIEpTQzo6RnVuY3Rpb24sIE5vSW50cmluc2ljLCB7IChp
bnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0SW5kZXhlZFNldHRlcldp
dGhJZGVudGlmaWVyUHJvdG90eXBlRnVuY3Rpb25JbmRleGVkU2V0dGVyKSwgKGludHB0cl90KSAo
MikgfSB9LAorfTsKKworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllclByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRp
ZmllclByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9N
RVRIT0RfVEFCTEUoSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlKSB9
OworCit2b2lkIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZTo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAg
ICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRp
ZmllclByb3RvdHlwZVRhYmxlVmFsdWVzLCAqdGhpcyk7Cit9CisKK2NvbnN0IENsYXNzSW5mbyBK
U1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnNfaW5mbyA9IHsgIlRlc3RJbmRleGVk
U2V0dGVyV2l0aElkZW50aWZpZXIiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcikgfTsK
KworSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpKU1Rlc3RJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXIoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIFJlZjxUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyPiYmIGltcGwp
CisgICAgOiBKU0RPTVdyYXBwZXI8VGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj4oc3Ry
dWN0dXJlLCBnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpCit7Cit9CisKK3ZvaWQgSlNUZXN0
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7Cisg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5m
bygpKSk7CisKK30KKworSlNPYmplY3QqIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmll
cjo6Y3JlYXRlUHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCkKK3sKKyAgICByZXR1cm4gSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG90
eXBlOjpjcmVhdGUodm0sICZnbG9iYWxPYmplY3QsIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCAmZ2xvYmFsT2JqZWN0LCBnbG9i
YWxPYmplY3Qub2JqZWN0UHJvdG90eXBlKCkpKTsKK30KKworSlNPYmplY3QqIEpTVGVzdEluZGV4
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6cHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdElu
ZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisKK0pTVmFs
dWUgSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpnZXRDb25zdHJ1Y3RvcihWTSYg
dm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdl
dERPTUNvbnN0cnVjdG9yPEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVj
dG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkp
OworfQorCit2b2lkIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6ZGVzdHJveShK
U0M6OkpTQ2VsbCogY2VsbCkKK3sKKyAgICBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXIqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXIqPihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT5KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXI6On5KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIoKTsKK30KKworYm9v
bCBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xvdChK
U09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIqPihvYmplY3QpOworICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBhdXRvIG9wdGlv
bmFsSW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSk7CisgICAgaWYgKG9wdGlvbmFsSW5k
ZXggJiYgb3B0aW9uYWxJbmRleC52YWx1ZSgpIDwgdGhpc09iamVjdC0+d3JhcHBlZCgpLmxlbmd0
aCgpKSB7CisgICAgICAgIGF1dG8gaW5kZXggPSBvcHRpb25hbEluZGV4LnZhbHVlKCk7CisgICAg
ICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgMCwgdG9KUzxJRExET01TdHJpbmc+KCpzdGF0
ZSwgdGhpc09iamVjdC0+d3JhcHBlZCgpLml0ZW0oaW5kZXgpKSk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICBpZiAoQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3Qs
IHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVy
OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
c3RhdGUsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgYXV0byog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIqPihv
YmplY3QpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKKyAgICBpZiAoTElLRUxZKGluZGV4IDwgdGhpc09iamVjdC0+d3JhcHBlZCgpLmxlbmd0aCgp
KSkgeworICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIDAsIHRvSlM8SURMRE9NU3Ry
aW5nPigqc3RhdGUsIHRoaXNPYmplY3QtPndyYXBwZWQoKS5pdGVtKGluZGV4KSkpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgodGhpc09iamVjdCwgc3RhdGUsIGluZGV4LCBzbG90KTsKK30KKwordm9pZCBKU1Rl
c3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5
TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKj4ob2JqZWN0KTsKKyAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMCwgY291bnQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkubGVuZ3RoKCk7IGkg
PCBjb3VudDsgKytpKQorICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9t
KHN0YXRlLCBpKSk7CisgICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBz
dGF0ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7Cit9CisKK2Jvb2wgSlNUZXN0SW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHB1
dFByb3BlcnR5U2xvdCkKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdElu
ZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKworICAgIGlmIChhdXRvIGluZGV4ID0gcGFy
c2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOworICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgdmFsdWUpOworICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOworICAgICAgICB0aGlzT2JqZWN0LT53cmFwcGVk
KCkuaW5kZXhlZFNldHRlcihpbmRleC52YWx1ZSgpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBCYXNlOjpwdXQodGhpc09i
amVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7Cit9CisK
K2Jvb2wgSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpwdXRCeUluZGV4KEpTQ2Vs
bCogY2VsbCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUs
IGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rl
c3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisKKyAgICBpZiAoTElLRUxZKGluZGV4
IDw9IE1BWF9BUlJBWV9JTkRFWCkpIHsKKyAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7CisgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCB2YWx1ZSk7CisgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CisgICAgICAgIHRoaXNPYmplY3QtPndyYXBwZWQo
KS5pbmRleGVkU2V0dGVyKGluZGV4LCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBCYXNlOjpwdXRCeUluZGV4KGNlbGwsIHN0
YXRlLCBpbmRleCwgdmFsdWUsIHNob3VsZFRocm93KTsKK30KKworYm9vbCBKU1Rlc3RJbmRleGVk
U2V0dGVyV2l0aElkZW50aWZpZXI6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3Bl
cnR5RGVzY3JpcHRvciYgcHJvcGVydHlEZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQorewor
ICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyKj4ob2JqZWN0KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CisKKyAgICBpZiAoYXV0byBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlO
YW1lKSkgeworICAgICAgICBpZiAoIXByb3BlcnR5RGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9y
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOworICAgICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgcHJvcGVydHlEZXNjcmlwdG9yLnZh
bHVlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwor
ICAgICAgICB0aGlzT2JqZWN0LT53cmFwcGVkKCkuaW5kZXhlZFNldHRlcihpbmRleC52YWx1ZSgp
LCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIFByb3BlcnR5RGVzY3JpcHRvciBuZXdQcm9wZXJ0eURlc2NyaXB0b3IgPSBwcm9wZXJ0eURl
c2NyaXB0b3I7CisgICAgbmV3UHJvcGVydHlEZXNjcmlwdG9yLnNldENvbmZpZ3VyYWJsZSh0cnVl
KTsKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBzdGF0ZSwgcHJv
cGVydHlOYW1lLCBuZXdQcm9wZXJ0eURlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKK30KKwordGVt
cGxhdGU8PiBpbmxpbmUgSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKiBJRExPcGVy
YXRpb248SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyPjo6Y2FzdChFeGVjU3RhdGUm
IHN0YXRlKQoreworICAgIHJldHVybiBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXIqPihzdGF0ZS52bSgpLCBzdGF0ZS50aGlzVmFsdWUoKSk7Cit9CisK
K0VuY29kZWRKU1ZhbHVlIGpzVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQoreworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1p
Y0Rvd25jYXN0PEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZSo+KHZt
LCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5
cGUpKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXI6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVj
dCgpKSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyQ29u
c3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Cisg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byog
cHJvdG90eXBlID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBp
ZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKKyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgLy8gU2hh
ZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKKyAgICByZXR1cm4gcHJvdG90eXBlLT5wdXRE
aXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKK30KKworc3RhdGljIGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZUZ1
bmN0aW9uSW5kZXhlZFNldHRlckJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJ
RExPcGVyYXRpb248SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyPjo6Q2xhc3NQYXJh
bWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5hcmd1bWVudENvdW50KCkgPCAyKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKKyAg
ICBhdXRvIGluZGV4ID0gY29udmVydDxJRExVbnNpZ25lZExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOworICAgIGF1dG8gdmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmlu
Zz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgaW1wbC5pbmRleGVk
U2V0dGVyKFdURk1vdmUoaW5kZXgpLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGVGdW5jdGlvbklu
ZGV4ZWRTZXR0ZXIoRXhlY1N0YXRlKiBzdGF0ZSkKK3sKKyAgICByZXR1cm4gSURMT3BlcmF0aW9u
PEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj46OmNhbGw8anNUZXN0SW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlRnVuY3Rpb25JbmRleGVkU2V0dGVyQm9keT4oKnN0
YXRlLCAiaW5kZXhlZFNldHRlciIpOworfQorCitib29sIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRo
SWRlbnRpZmllck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAg
IFVOVVNFRF9QQVJBTShoYW5kbGUpOworICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVy
T3duZXI6OmZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiBj
b250ZXh0KQoreworICAgIGF1dG8qIGpzVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciA9
IHN0YXRpY19jYXN0PEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KGhhbmRsZS5z
bG90KCktPmFzQ2VsbCgpKTsKKyAgICBhdXRvJiB3b3JsZCA9ICpzdGF0aWNfY2FzdDxET01XcmFw
cGVyV29ybGQqPihjb250ZXh0KTsKKyAgICB1bmNhY2hlV3JhcHBlcih3b3JsZCwgJmpzVGVzdElu
ZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci0+d3JhcHBlZCgpLCBqc1Rlc3RJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXIpOworfQorCisjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQorI2lm
IFBMQVRGT1JNKFdJTikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NDgzKQorZXh0ZXJuICJD
IiB7IGV4dGVybiB2b2lkICgqY29uc3QgX19pZGVudGlmaWVyKCI/P183VGVzdEluZGV4ZWRTZXR0
ZXJXaXRoSWRlbnRpZmllckBXZWJDb3JlQEA2QkAiKVtdKSgpOyB9CisjZWxzZQorZXh0ZXJuICJD
IiB7IGV4dGVybiB2b2lkKiBfWlRWTjdXZWJDb3JlMzFUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyRVtdOyB9CisjZW5kaWYKKyNlbmRpZgorCitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3Jl
YXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJl
ZjxUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyPiYmIGltcGwpCit7CisKKyNpZiBFTkFC
TEUoQklORElOR19JTlRFR1JJVFkpCisgICAgdm9pZCogYWN0dWFsVlRhYmxlUG9pbnRlciA9ICoo
cmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KGltcGwucHRyKCkpKTsKKyNpZiBQTEFURk9STShXSU4p
CisgICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oX19pZGVudGlmaWVyKCI/P183VGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckBXZWJD
b3JlQEA2QkAiKSk7CisjZWxzZQorICAgIHZvaWQqIGV4cGVjdGVkVlRhYmxlUG9pbnRlciA9ICZf
WlRWTjdXZWJDb3JlMzFUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyRVsyXTsKKyNpZiBD
T01QSUxFUihDTEFORykKKyAgICAvLyBJZiB0aGlzIGZhaWxzIFRlc3RJbmRleGVkU2V0dGVyV2l0
aElkZW50aWZpZXIgZG9lcyBub3QgaGF2ZSBhIHZ0YWJsZSwgc28geW91IG5lZWQgdG8gYWRkIHRo
ZQorICAgIC8vIEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUgYXR0cmlidXRlIHRvIHRoZSBpbnRl
cmZhY2UgZGVmaW5pdGlvbgorICAgIHN0YXRpY19hc3NlcnQoX19pc19wb2x5bW9ycGhpYyhUZXN0
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKSwgIlRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXIgaXMgbm90IHBvbHltb3JwaGljIik7CisjZW5kaWYKKyNlbmRpZgorICAgIC8vIElmIHlv
dSBoaXQgdGhpcyBhc3NlcnRpb24geW91IGVpdGhlciBoYXZlIGEgdXNlIGFmdGVyIGZyZWUgYnVn
LCBvcgorICAgIC8vIFRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIgaGFzIHN1YmNsYXNz
ZXMuIElmIFRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIgaGFzIHN1YmNsYXNzZXMgdGhh
dCBnZXQgcGFzc2VkCisgICAgLy8gdG8gdG9KUygpIHdlIGN1cnJlbnRseSByZXF1aXJlIFRlc3RJ
bmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIgeW91IHRvIG9wdCBvdXQgb2YgYmluZGluZyBoYXJk
ZW5pbmcKKyAgICAvLyBieSBhZGRpbmcgdGhlIFNraXBWVGFibGVWYWxpZGF0aW9uIGF0dHJpYnV0
ZSB0byB0aGUgaW50ZXJmYWNlIElETCBkZWZpbml0aW9uCisgICAgUkVMRUFTRV9BU1NFUlQoYWN0
dWFsVlRhYmxlUG9pbnRlciA9PSBleHBlY3RlZFZUYWJsZVBvaW50ZXIpOworI2VuZGlmCisgICAg
cmV0dXJuIGNyZWF0ZVdyYXBwZXI8VGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj4oZ2xv
YmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKK30KKworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0SW5k
ZXhlZFNldHRlcldpdGhJZGVudGlmaWVyJiBpbXBsKQoreworICAgIHJldHVybiB3cmFwKHN0YXRl
LCBnbG9iYWxPYmplY3QsIGltcGwpOworfQorCitUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyKiBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OnRvV3JhcHBlZChKU0M6OlZN
JiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmIChhdXRvKiB3cmFwcGVyID0ganNE
eW5hbWljRG93bmNhc3Q8SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKj4odm0sIHZh
bHVlKSkKKyAgICAgICAgcmV0dXJuICZ3cmFwcGVyLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJUZXN0
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJv
eWVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNUZXN0SW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyIDogcHVibGljIEpTRE9NV3JhcHBlcjxUZXN0SW5kZXhlZFNldHRlcldp
dGhJZGVudGlmaWVyPiB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTRE9NV3JhcHBlcjxU
ZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyPjsKKyAgICBzdGF0aWMgSlNUZXN0SW5kZXhl
ZFNldHRlcldpdGhJZGVudGlmaWVyKiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RJbmRleGVkU2V0dGVyV2l0
aElkZW50aWZpZXI+JiYgaW1wbCkKKyAgICB7CisgICAgICAgIEpTVGVzdEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllciogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rl
c3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI+KGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwKSkg
SlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKHN0cnVjdHVyZSwgKmdsb2JhbE9iamVj
dCwgV1RGTW92ZShpbXBsKSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2Jq
ZWN0LT52bSgpKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBzdGF0aWMgSlND
OjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYp
OworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xv
YmFsT2JqZWN0Jik7CisgICAgc3RhdGljIFRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIq
IHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9w
ZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIHZvaWQgZ2V0
T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlBy
b3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9u
TW9kZSgpKTsKKyAgICBzdGF0aWMgYm9vbCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90
Jik7CisgICAgc3RhdGljIGJvb2wgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0
YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhy
b3cpOworICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTQzo6SlNPYmplY3QqLCBK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBjb25zdCBKU0M6OlByb3BlcnR5RGVz
Y3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlND
OjpKU0NlbGwqKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBKU0M6OlN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1
cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpT
Qzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cisg
ICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwg
Y29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xv
dEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJv
cGVydHlTbG90IHwgSlNDOjpPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgQmFzZTo6U3RydWN0
dXJlRmxhZ3M7Citwcm90ZWN0ZWQ6CisgICAgSlNUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdEluZGV4ZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllcj4mJik7CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6
Vk0mKTsKK307CisKK2NsYXNzIEpTVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllck93bmVy
IDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJv
b2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwg
dm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZpcnR1YWwgdm9pZCBmaW5h
bGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KTsKK307CisKK2lu
bGluZSBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3JsZCYs
IFRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIqKQoreworICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJPd25lcj4gb3duZXI7Cisg
ICAgcmV0dXJuICZvd25lci5nZXQoKTsKK30KKworaW5saW5lIHZvaWQqIHdyYXBwZXJLZXkoVGVz
dEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciogd3JhcHBhYmxlT2JqZWN0KQoreworICAgIHJl
dHVybiB3cmFwcGFibGVPYmplY3Q7Cit9CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVy
Jik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0SW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyKiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAqaW1w
bCkgOiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6
OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3RJbmRleGVkU2V0dGVyV2l0
aElkZW50aWZpZXI+JiYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVm
UHRyPFRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI+JiYgaW1wbCkgeyByZXR1cm4gaW1w
bCA/IHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9u
TnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFw
cGVyQ29udmVydGVyVHJhaXRzPFRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI+IHsKKyAg
ICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU1Rlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI7
CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFRlc3RJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXIqOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdElu
dGVyZmFjZS5jcHAJKHJldmlzaW9uIDIxNzc2NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MDcsMjUgKzQwNywyOSBAQCB2b2lkIEpTVGVzdEludGVyZmFjZTo6ZGVzdHJveShKU0M6OkpTQ2Vs
CiAgICAgdGhpc09iamVjdC0+SlNUZXN0SW50ZXJmYWNlOjp+SlNUZXN0SW50ZXJmYWNlKCk7CiB9
CiAKLWJvb2wgSlNUZXN0SW50ZXJmYWNlOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0
YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0
eVNsb3QmIHNsb3QpCitib29sIEpTVGVzdEludGVyZmFjZTo6cHV0KEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwg
UHV0UHJvcGVydHlTbG90JiBwdXRQcm9wZXJ0eVNsb3QpCiB7CiAgICAgYXV0byogdGhpc09iamVj
dCA9IGpzQ2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisKICAgICBib29sIHB1dFJlc3VsdCA9IGZh
bHNlOwotICAgIGlmICh0aGlzT2JqZWN0LT5wdXREZWxlZ2F0ZShzdGF0ZSwgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgc2xvdCwgcHV0UmVzdWx0KSkKKyAgICBpZiAodGhpc09iamVjdC0+cHV0RGVsZWdh
dGUoc3RhdGUsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCwgcHV0UmVzdWx0
KSkKICAgICAgICAgcmV0dXJuIHB1dFJlc3VsdDsKLSAgICByZXR1cm4gQmFzZTo6cHV0KHRoaXNP
YmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKworICAgIHJldHVybiBC
YXNlOjpwdXQodGhpc09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3Bl
cnR5U2xvdCk7CiB9CiAKIGJvb2wgSlNUZXN0SW50ZXJmYWNlOjpwdXRCeUluZGV4KEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJv
b2wgc2hvdWxkVGhyb3cpCiB7CiAgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RJ
bnRlcmZhY2UqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CisKICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6
OmZyb20oc3RhdGUsIGluZGV4KTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzT2JqZWN0
LCBzaG91bGRUaHJvdyk7CiAgICAgYm9vbCBwdXRSZXN1bHQgPSBmYWxzZTsKICAgICBpZiAodGhp
c09iamVjdC0+cHV0RGVsZWdhdGUoc3RhdGUsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QsIHB1
dFJlc3VsdCkpCiAgICAgICAgIHJldHVybiBwdXRSZXN1bHQ7CisKICAgICByZXR1cm4gQmFzZTo6
cHV0QnlJbmRleChjZWxsLCBzdGF0ZSwgaW5kZXgsIHZhbHVlLCBzaG91bGRUaHJvdyk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJOb0lkZW50aWZpZXIuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZp
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzUzIEBACisvKgorICAgIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIuaCIKKworI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgor
I2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCisjaW5jbHVkZSAi
SlNET01Db252ZXJ0LmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2lu
Y2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiVVJMLmgiCisjaW5jbHVkZSA8
cnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvUHJvcGVydHlO
YW1lQXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBK
U0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQXR0cmlidXRlcworCitKU0M6OkVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVj
dG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOworYm9vbCBzZXRKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25z
dHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUpOworCitjbGFzcyBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZp
ZXJQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAg
ICB1c2luZyBCYXNlID0gSlNDOjpKU05vbkZpbmFsT2JqZWN0OworICAgIHN0YXRpYyBKU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZN
JiB2bSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRl
bnRpZmllclByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxK
U1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJQcm90b3R5cGU+KHZtLmhlYXAp
KSBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJQcm90b3R5cGUodm0sIGds
b2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7
CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0
YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAg
eworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlck5vSWRlbnRpZmllclByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogSlNDOjpKU05vbkZp
bmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oSlNDOjpWTSYpOworfTsKKwordXNpbmcgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IgPSBKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0
YWJsZTxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI+OworCit0ZW1wbGF0
ZTw+IEpTVmFsdWUgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3Ry
dWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZShKU0M6OlZNJiB2bSwgY29uc3QgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0odm0pOworICAgIHJl
dHVybiBnbG9iYWxPYmplY3QuZnVuY3Rpb25Qcm90b3R5cGUoKTsKK30KKwordGVtcGxhdGU8PiB2
b2lkIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yOjpp
bml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QpCit7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6cHJvdG90eXBlKHZtLCBnbG9i
YWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CisgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBT
dHJpbmcoQVNDSUlMaXRlcmFsKCJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVy
IikpKSwgUmVhZE9ubHkgfCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBSZWFkT25seSB8IERvbnRFbnVtKTsKK30KKwor
dGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9J
ZGVudGlmaWVyQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJOb0lkZW50aWZpZXIiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0
cnVjdG9yKSB9OworCisvKiBIYXNoIHRhYmxlIGZvciBwcm90b3R5cGUgKi8KKworc3RhdGljIGNv
bnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmll
clByb3RvdHlwZVRhYmxlVmFsdWVzW10gPQoreworICAgIHsgImNvbnN0cnVjdG9yIiwgRG9udEVu
dW0sIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6Okdl
dFZhbHVlRnVuYz4oanNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3Ry
dWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVG
dW5jPihzZXRKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3Rv
cikgfSB9LAorfTsKKworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
ck5vSWRlbnRpZmllclByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlck5vSWRlbnRpZmllclByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxw
dHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVu
dGlmaWVyUHJvdG90eXBlKSB9OworCit2b2lkIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5v
SWRlbnRpZmllclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllclByb3RvdHlwZVRhYmxlVmFsdWVzLCAq
dGhpcyk7Cit9CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJO
b0lkZW50aWZpZXI6OnNfaW5mbyA9IHsgIlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50
aWZpZXIiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcikgfTsKKworSlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpKU1Rlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJOb0lkZW50aWZpZXIoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVy
PiYmIGltcGwpCisgICAgOiBKU0RPTVdyYXBwZXI8VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5v
SWRlbnRpZmllcj4oc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpCit7Cit9
CisKK3ZvaWQgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFT
U0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CisKK30KKworSlNPYmplY3QqIEpTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6Y3JlYXRlUHJvdG90eXBlKFZNJiB2bSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gSlNUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyUHJvdG90eXBlOjpjcmVhdGUodm0sICZnbG9iYWxP
YmplY3QsIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllclByb3RvdHlwZTo6
Y3JlYXRlU3RydWN0dXJlKHZtLCAmZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qub2JqZWN0UHJv
dG90eXBlKCkpKTsKK30KKworSlNPYmplY3QqIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5v
SWRlbnRpZmllcjo6cHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlck5vSWRlbnRpZmllcj4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisKK0pTVmFsdWUgSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZXRDb25zdHJ1Y3RvcihWTSYg
dm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdl
dERPTUNvbnN0cnVjdG9yPEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllckNv
bnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9i
amVjdCkpOworfQorCit2b2lkIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmll
cjo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKK3sKKyAgICBKU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJOb0lkZW50aWZpZXIqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIqPihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT5K
U1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6On5KU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIoKTsKK30KKworYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0
LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIqPihvYmplY3QpOworICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBhdXRvIG9wdGlvbmFsSW5kZXgg
PSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSk7CisgICAgaWYgKG9wdGlvbmFsSW5kZXggJiYgb3B0
aW9uYWxJbmRleC52YWx1ZSgpIDwgdGhpc09iamVjdC0+d3JhcHBlZCgpLmxlbmd0aCgpKSB7Cisg
ICAgICAgIGF1dG8gaW5kZXggPSBvcHRpb25hbEluZGV4LnZhbHVlKCk7CisgICAgICAgIHNsb3Qu
c2V0VmFsdWUodGhpc09iamVjdCwgMCwgdG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwgdGhpc09i
amVjdC0+d3JhcHBlZCgpLml0ZW0oaW5kZXgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICBpZiAoQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIHN0YXRlLCBw
cm9wZXJ0eU5hbWUsIHNsb3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBKU1ZhbHVlIHBy
b3RvID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KCk7CisgICAgaWYgKHByb3RvLmlz
T2JqZWN0KCkgJiYganNDYXN0PEpTT2JqZWN0Kj4ocHJvdG8pLT5oYXNQcm9wZXJ0eShzdGF0ZSwg
cHJvcGVydHlOYW1lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFvcHRpb25h
bEluZGV4ICYmIHRoaXNPYmplY3QtPmNsYXNzSW5mbygpID09IGluZm8oKSAmJiAhcHJvcGVydHlO
YW1lLmlzU3ltYm9sKCkpIHsKKyAgICAgICAgYXV0byBpdGVtID0gdGhpc09iamVjdC0+d3JhcHBl
ZCgpLm5hbWVkSXRlbShwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUpKTsK
KyAgICAgICAgaWYgKCFJRExET01TdHJpbmc6OmlzTnVsbFZhbHVlKGl0ZW0pKSB7CisgICAgICAg
ICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIDAsIHRvSlM8SURMRE9NU3RyaW5nPigqc3Rh
dGUsIGl0ZW0pKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJO
b0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sK
KyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
ck5vSWRlbnRpZmllcio+KG9iamVjdCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIGlmIChMSUtFTFkoaW5kZXggPCB0aGlzT2JqZWN0LT53
cmFwcGVkKCkubGVuZ3RoKCkpKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwg
MCwgdG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwgdGhpc09iamVjdC0+d3JhcHBlZCgpLml0ZW0o
aW5kZXgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gQmFzZTo6
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCh0aGlzT2JqZWN0LCBzdGF0ZSwgaW5kZXgsIHNsb3Qp
OworfQorCit2b2lkIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6Z2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7Cisg
ICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJO
b0lkZW50aWZpZXIqPihvYmplY3QpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHRoaXNP
YmplY3QtPndyYXBwZWQoKS5sZW5ndGgoKTsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIHByb3Bl
cnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGkpKTsKKyAgICBmb3IgKGF1dG8m
IHByb3BlcnR5TmFtZSA6IHRoaXNPYmplY3QtPndyYXBwZWQoKS5zdXBwb3J0ZWRQcm9wZXJ0eU5h
bWVzKCkpCisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmco
c3RhdGUsIHByb3BlcnR5TmFtZSkpOworICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXModGhp
c09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworfQorCitib29sIEpTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0
UHJvcGVydHlTbG90JiBwdXRQcm9wZXJ0eVNsb3QpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIqPihjZWxsKTsK
KyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisKKyAg
ICBpZiAoYXV0byBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgeworICAgICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKKyAgICAg
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHZhbHVl
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKKyAgICAg
ICAgdGhpc09iamVjdC0+d3JhcHBlZCgpLnNldEl0ZW0oaW5kZXgudmFsdWUoKSwgV1RGTW92ZShu
YXRpdmVWYWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIXBy
b3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7CisgICAgICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhp
c09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSB9Owor
ICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVj
dCgpOworICAgICAgICBpZiAoIShwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90
b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3Qoc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpKSB7Cisg
ICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52
bSgpKTsKKyAgICAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmlu
Zz4oKnN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIHRydWUpOworICAgICAgICAgICAgdGhpc09iamVjdC0+d3JhcHBlZCgpLnNldE5hbWVk
SXRlbShwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUpLCBXVEZNb3ZlKG5hdGl2ZVZh
bHVlKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiBCYXNlOjpwdXQodGhpc09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgdmFsdWUs
IHB1dFByb3BlcnR5U2xvdCk7Cit9CisKK2Jvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
Tm9JZGVudGlmaWVyOjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBzdGF0ZSwg
dW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXIqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CisKKyAgICBpZiAoTElLRUxZKGluZGV4IDw9IE1BWF9BUlJBWV9JTkRFWCkp
IHsKKyAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+
dm0oKSk7CisgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4o
KnN0YXRlLCB2YWx1ZSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
dHJ1ZSk7CisgICAgICAgIHRoaXNPYmplY3QtPndyYXBwZWQoKS5zZXRJdGVtKGluZGV4LCBXVEZN
b3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIElk
ZW50aWZpZXIgcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpOwor
ICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5h
bE1ldGhvZFR5cGU6OlZNSW5xdWlyeSB9OworICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09i
amVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KCk7CisgICAgaWYgKCEocHJvdG90eXBlLmlzT2JqZWN0
KCkgJiYgYXNPYmplY3QocHJvdG90eXBlKS0+Z2V0UHJvcGVydHlTbG90KHN0YXRlLCBwcm9wZXJ0
eU5hbWUsIHNsb3QpKSkgeworICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHN0YXRlLT52bSgpKTsKKyAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMRE9NU3RyaW5nPigqc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCB0cnVlKTsKKyAgICAgICAgdGhpc09iamVjdC0+d3JhcHBlZCgpLnNldE5h
bWVkSXRlbShwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUpLCBXVEZNb3ZlKG5hdGl2
ZVZhbHVlKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBCYXNl
OjpwdXRCeUluZGV4KGNlbGwsIHN0YXRlLCBpbmRleCwgdmFsdWUsIHNob3VsZFRocm93KTsKK30K
KworYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmRlZmluZU93
blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgcHJvcGVydHlEZXNjcmlw
dG9yLCBib29sIHNob3VsZFRocm93KQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyKj4ob2JqZWN0KTsKKyAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisKKyAgICBpZiAo
YXV0byBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgeworICAgICAgICBpZiAoIXBy
b3BlcnR5RGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3Rh
dGUtPnZtKCkpOworICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJp
bmc+KCpzdGF0ZSwgcHJvcGVydHlEZXNjcmlwdG9yLnZhbHVlKCkpOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOworICAgICAgICB0aGlzT2JqZWN0LT53cmFw
cGVkKCkuc2V0SXRlbShpbmRleC52YWx1ZSgpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9s
KCkpIHsKKyAgICAgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2JqZWN0LCBQcm9wZXJ0eVNs
b3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5IH07CisgICAgICAgIGlmICghQmFzZTo6
Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
KSB7CisgICAgICAgICAgICBpZiAoIXByb3BlcnR5RGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9y
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7CisgICAgICAgICAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgcHJvcGVydHlE
ZXNjcmlwdG9yLnZhbHVlKCkpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCB0cnVlKTsKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPndyYXBwZWQoKS5zZXROYW1l
ZEl0ZW0ocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgV1RGTW92ZShuYXRpdmVW
YWx1ZSkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBQcm9wZXJ0eURlc2NyaXB0b3IgbmV3UHJvcGVydHlEZXNjcmlwdG9yID0gcHJvcGVydHlEZXNj
cmlwdG9yOworICAgIG5ld1Byb3BlcnR5RGVzY3JpcHRvci5zZXRDb25maWd1cmFibGUodHJ1ZSk7
CisgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgc3RhdGUsIHByb3Bl
cnR5TmFtZSwgbmV3UHJvcGVydHlEZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9CisKK0VuY29k
ZWRKU1ZhbHVlIGpzVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQoreworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1p
Y0Rvd25jYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllclByb3RvdHlw
ZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFw
cm90b3R5cGUpKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dT
Y29wZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJOb0lkZW50aWZpZXI6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBwcm90b3R5cGUt
Pmdsb2JhbE9iamVjdCgpKSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKKyAgICAg
ICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKKyAg
ICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0
eU5hbWVzKCkuY29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKK30K
KworYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJPd25lcjo6aXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUs
IHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxl
KTsKKyAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2
b2lkIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllck93bmVyOjpmaW5hbGl6
ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4dCkKK3sKKyAg
ICBhdXRvKiBqc1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIgPSBzdGF0aWNf
Y2FzdDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXIqPihoYW5kbGUuc2xv
dCgpLT5hc0NlbGwoKSk7CisgICAgYXV0byYgd29ybGQgPSAqc3RhdGljX2Nhc3Q8RE9NV3JhcHBl
cldvcmxkKj4oY29udGV4dCk7CisgICAgdW5jYWNoZVdyYXBwZXIod29ybGQsICZqc1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXItPndyYXBwZWQoKSwganNUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyTm9JZGVudGlmaWVyKTsKK30KKworI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVH
UklUWSkKKyNpZiBQTEFURk9STShXSU4pCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDQ4MykK
K2V4dGVybiAiQyIgeyBleHRlcm4gdm9pZCAoKmNvbnN0IF9faWRlbnRpZmllcigiPz9fN1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJAV2ViQ29yZUBANkJAIilbXSkoKTsgfQor
I2Vsc2UKK2V4dGVybiAiQyIgeyBleHRlcm4gdm9pZCogX1pUVk43V2ViQ29yZTM3VGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllckVbXTsgfQorI2VuZGlmCisjZW5kaWYKKworSlND
OjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRp
Zmllcj4mJiBpbXBsKQoreworCisjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQorICAgIHZv
aWQqIGFjdHVhbFZUYWJsZVBvaW50ZXIgPSAqKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihpbXBs
LnB0cigpKSk7CisjaWYgUExBVEZPUk0oV0lOKQorICAgIHZvaWQqIGV4cGVjdGVkVlRhYmxlUG9p
bnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KF9faWRlbnRpZmllcigiPz9fN1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJAV2ViQ29yZUBANkJAIikpOworI2Vsc2UKKyAg
ICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSAmX1pUVk43V2ViQ29yZTM3VGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllckVbMl07CisjaWYgQ09NUElMRVIoQ0xBTkcpCisg
ICAgLy8gSWYgdGhpcyBmYWlscyBUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVy
IGRvZXMgbm90IGhhdmUgYSB2dGFibGUsIHNvIHlvdSBuZWVkIHRvIGFkZCB0aGUKKyAgICAvLyBJ
bXBsZW1lbnRhdGlvbkxhY2tzVlRhYmxlIGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJmYWNlIGRlZmlu
aXRpb24KKyAgICBzdGF0aWNfYXNzZXJ0KF9faXNfcG9seW1vcnBoaWMoVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlck5vSWRlbnRpZmllciksICJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVu
dGlmaWVyIGlzIG5vdCBwb2x5bW9ycGhpYyIpOworI2VuZGlmCisjZW5kaWYKKyAgICAvLyBJZiB5
b3UgaGl0IHRoaXMgYXNzZXJ0aW9uIHlvdSBlaXRoZXIgaGF2ZSBhIHVzZSBhZnRlciBmcmVlIGJ1
Zywgb3IKKyAgICAvLyBUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyIGhhcyBz
dWJjbGFzc2VzLiBJZiBUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyIGhhcyBz
dWJjbGFzc2VzIHRoYXQgZ2V0IHBhc3NlZAorICAgIC8vIHRvIHRvSlMoKSB3ZSBjdXJyZW50bHkg
cmVxdWlyZSBUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyIHlvdSB0byBvcHQg
b3V0IG9mIGJpbmRpbmcgaGFyZGVuaW5nCisgICAgLy8gYnkgYWRkaW5nIHRoZSBTa2lwVlRhYmxl
VmFsaWRhdGlvbiBhdHRyaWJ1dGUgdG8gdGhlIGludGVyZmFjZSBJREwgZGVmaW5pdGlvbgorICAg
IFJFTEVBU0VfQVNTRVJUKGFjdHVhbFZUYWJsZVBvaW50ZXIgPT0gZXhwZWN0ZWRWVGFibGVQb2lu
dGVyKTsKKyNlbmRpZgorICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPFRlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJOb0lkZW50aWZpZXI+KGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7Cit9CisK
K0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciYg
aW1wbCkKK3sKKyAgICByZXR1cm4gd3JhcChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKK30K
KworVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciogSlNUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOjp0b1dyYXBwZWQoSlNDOjpWTSYgdm0sIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAoYXV0byogd3JhcHBlciA9IGpzRHluYW1pY0Rvd25jYXN0
PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcio+KHZtLCB2YWx1ZSkpCisg
ICAgICAgIHJldHVybiAmd3JhcHBlci0+d3JhcHBlZCgpOworICAgIHJldHVybiBudWxscHRyOwor
fQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlck5vSWRlbnRpZmllci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50
aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkzIEBACisvKgorICAgIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCisjaW5j
bHVkZSAiVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllci5oIgorI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEpT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllciA6IHB1YmxpYyBKU0RPTVdyYXBw
ZXI8VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcj4geworcHVibGljOgorICAg
IHVzaW5nIEJhc2UgPSBKU0RPTVdyYXBwZXI8VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRl
bnRpZmllcj47CisgICAgc3RhdGljIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRp
ZmllciogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVy
PiYmIGltcGwpCisgICAgeworICAgICAgICBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lk
ZW50aWZpZXIqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyPihnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkp
IEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcihzdHJ1Y3R1cmUsICpnbG9i
YWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGds
b2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgc3Rh
dGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxP
YmplY3QmKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0mLCBK
U0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
Tm9JZGVudGlmaWVyKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CisgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0
YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHN0
YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlND
OjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgc3RhdGljIGJvb2wgcHV0KEpTQzo6SlNDZWxsKiwg
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1
dFByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwq
LCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBi
b29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU0M6
OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgY29uc3QgSlND
OjpQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgdm9p
ZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0
aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0
b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6OkdldE93blByb3BlcnR5
U2xvdElzSW1wdXJlRm9yUHJvcGVydHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJv
cGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNH
ZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBCYXNl
OjpTdHJ1Y3R1cmVGbGFnczsKK3Byb3RlY3RlZDoKKyAgICBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJOb0lkZW50aWZpZXIoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJl
ZjxUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyPiYmKTsKKworICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKKworY2xhc3MgSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyTm9JZGVudGlmaWVyT3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIg
eworcHVibGljOgorICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9y
Jik7CisgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4s
IHZvaWQqIGNvbnRleHQpOworfTsKKworaW5saW5lIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFw
cGVyT3duZXIoRE9NV3JhcHBlcldvcmxkJiwgVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRl
bnRpZmllciopCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEpTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlck5vSWRlbnRpZmllck93bmVyPiBvd25lcjsKKyAgICByZXR1cm4gJm93bmVyLmdl
dCgpOworfQorCitpbmxpbmUgdm9pZCogd3JhcHBlcktleShUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyKiB3cmFwcGFibGVPYmplY3QpCit7CisgICAgcmV0dXJuIHdyYXBwYWJs
ZU9iamVjdDsKK30KKworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUds
b2JhbE9iamVjdCosIFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXImKTsKK2lu
bGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZp
ZXIqIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICppbXBs
KSA6IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6
RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlck5vSWRlbnRpZmllcj4mJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0
ZWQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBSZWZQdHI8VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcj4mJiBpbXBsKSB7
IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBs
LnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQorCit0ZW1wbGF0ZTw+IHN0cnVj
dCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5v
SWRlbnRpZmllcj4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlck5vSWRlbnRpZmllcjsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0g
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcio7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDM1MyBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4g
c291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5l
cmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24u
aCIKKworI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0
b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCisjaW5jbHVk
ZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hl
LmgiCisjaW5jbHVkZSAiVVJMLmgiCisjaW5jbHVkZSA8cnVudGltZS9GdW5jdGlvblByb3RvdHlw
ZS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuaD4KKyNpbmNsdWRlIDx3
dGYvR2V0UHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworLy8gQXR0cmlidXRlcworCitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKKwor
Y2xhc3MgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Qcm90b3R5
cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBC
YXNlID0gSlNDOjpKU05vbkZpbmFsT2JqZWN0OworICAgIHN0YXRpYyBKU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvblByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZt
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb25Qcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8
SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Qcm90b3R5cGU+KHZt
LmhlYXApKSBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvblByb3Rv
dHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENy
ZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lO
Rk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3Rv
dHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSlNUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Qcm90b3R5cGUoSlNDOjpWTSYgdm0s
IEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAg
ICA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisK
KyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK3VzaW5nIEpTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IgPSBKU0RPTUNv
bnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZTxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbj47CisKK3RlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1
cmUoSlNDOjpWTSYgdm0sIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7
CisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LmZ1bmN0aW9u
UHJvdG90eXBlKCk7Cit9CisKK3RlbXBsYXRlPD4gdm9pZCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhW
TSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnRE
ZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZyhBU0NJSUxpdGVy
YWwoIlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiIpKSksIFJlYWRP
bmx5IHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVu
Z3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250RW51bSk7Cit9CisKK3RlbXBsYXRlPD4g
Y29uc3QgQ2xhc3NJbmZvIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbiIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9N
RVRIT0RfVEFCTEUoSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25D
b25zdHJ1Y3RvcikgfTsKKworLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovCisKK3N0YXRp
YyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvblByb3RvdHlwZVRhYmxlVmFsdWVzW10gPQoreworICAgIHsgImNvbnN0cnVjdG9y
IiwgRG9udEVudW0sIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0
eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb25Db25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlT
bG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5n
RXhjZXB0aW9uQ29uc3RydWN0b3IpIH0gfSwKK307CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvblByb3RvdHlwZTo6c19pbmZvID0g
eyAiVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uUHJvdG90eXBlIiwg
JkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvblByb3RvdHlwZSkgfTsKKwor
dm9pZCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvblByb3RvdHlw
ZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
KTsKKyAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uUHJvdG90eXBlVGFibGVWYWx1ZXMsICp0aGlzKTsKK30KKwor
Y29uc3QgQ2xhc3NJbmZvIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uOjpzX2luZm8gPSB7ICJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b24iLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKSB9OworCitKU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6SlNUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24oU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb24+JiYgaW1wbCkKKyAgICA6IEpTRE9NV3JhcHBlcjxUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0
LCBXVEZNb3ZlKGltcGwpKQoreworfQorCit2b2lkIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
clRocm93aW5nRXhjZXB0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CisK
K30KKworSlNPYmplY3QqIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uOjpjcmVhdGVQcm90b3R5cGUoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0KQoreworICAgIHJldHVybiBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvblByb3RvdHlwZTo6Y3JlYXRlKHZtLCAmZ2xvYmFsT2JqZWN0LCBKU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJl
KHZtLCAmZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qub2JqZWN0UHJvdG90eXBlKCkpKTsKK30K
KworSlNPYmplY3QqIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9u
Ojpwcm90b3R5cGUoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQorewor
ICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb24+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCitKU1ZhbHVlIEpTVGVzdE5h
bWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpnZXRDb25zdHJ1Y3RvcihWTSYg
dm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdl
dERPTUNvbnN0cnVjdG9yPEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xv
YmFsT2JqZWN0KSk7Cit9CisKK3ZvaWQgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb246OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCit7CisgICAgSlNUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qIHRoaXNPYmplY3QgPSBzdGF0aWNf
Y2FzdDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KGNlbGwp
OworICAgIHRoaXNPYmplY3QtPkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uOjp+SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24oKTsK
K30KKworYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6
Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5n
RXhjZXB0aW9uKj4ob2JqZWN0KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CisgICAgYXV0byBvcHRpb25hbEluZGV4ID0gcGFyc2VJbmRleChwcm9w
ZXJ0eU5hbWUpOworICAgIGlmIChvcHRpb25hbEluZGV4ICYmIG9wdGlvbmFsSW5kZXgudmFsdWUo
KSA8IHRoaXNPYmplY3QtPndyYXBwZWQoKS5sZW5ndGgoKSkgeworICAgICAgICBhdXRvIGluZGV4
ID0gb3B0aW9uYWxJbmRleC52YWx1ZSgpOworICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmpl
Y3QsIDAsIHRvSlM8SURMRE9NU3RyaW5nPigqc3RhdGUsIHRoaXNPYmplY3QtPndyYXBwZWQoKS5p
dGVtKGluZGV4KSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKEJhc2U6
OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgSlNWYWx1ZSBwcm90byA9IHRoaXNPYmplY3Qt
PmdldFByb3RvdHlwZURpcmVjdCgpOworICAgIGlmIChwcm90by5pc09iamVjdCgpICYmIGpzQ2Fz
dDxKU09iamVjdCo+KHByb3RvKS0+aGFzUHJvcGVydHkoc3RhdGUsIHByb3BlcnR5TmFtZSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghb3B0aW9uYWxJbmRleCAmJiB0aGlzT2Jq
ZWN0LT5jbGFzc0luZm8oKSA9PSBpbmZvKCkgJiYgIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7
CisgICAgICAgIGF1dG8gaXRlbSA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5uYW1lZEl0ZW0ocHJv
cGVydHlOYW1lVG9BdG9taWNTdHJpbmcocHJvcGVydHlOYW1lKSk7CisgICAgICAgIGlmICghSURM
RE9NU3RyaW5nOjppc051bGxWYWx1ZShpdGVtKSkgeworICAgICAgICAgICAgc2xvdC5zZXRWYWx1
ZSh0aGlzT2JqZWN0LCAwLCB0b0pTPElETERPTVN0cmluZz4oKnN0YXRlLCBpdGVtKSk7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246
OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBz
dGF0ZSwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBhdXRvKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uKj4ob2JqZWN0KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CisgICAgaWYgKExJS0VMWShpbmRleCA8IHRoaXNPYmplY3QtPndyYXBwZWQo
KS5sZW5ndGgoKSkpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCAwLCB0b0pT
PElETERPTVN0cmluZz4oKnN0YXRlLCB0aGlzT2JqZWN0LT53cmFwcGVkKCkuaXRlbShpbmRleCkp
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBCYXNlOjpnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KHRoaXNPYmplY3QsIHN0YXRlLCBpbmRleCwgc2xvdCk7Cit9CisK
K3ZvaWQgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldE93
blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVy
dHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb24qPihvYmplY3QpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHRo
aXNPYmplY3QtPndyYXBwZWQoKS5sZW5ndGgoKTsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIHBy
b3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGkpKTsKKyAgICBmb3IgKGF1
dG8mIHByb3BlcnR5TmFtZSA6IHRoaXNPYmplY3QtPndyYXBwZWQoKS5zdXBwb3J0ZWRQcm9wZXJ0
eU5hbWVzKCkpCisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJp
bmcoc3RhdGUsIHByb3BlcnR5TmFtZSkpOworICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXMo
dGhpc09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworfQorCitib29sIEpTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpwdXQoSlNDZWxsKiBjZWxs
LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZh
bHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHB1dFByb3BlcnR5U2xvdCkKK3sKKyAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0
aW9uKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOworCisgICAgaWYgKGF1dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkp
IHsKKyAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+
dm0oKSk7CisgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4o
KnN0YXRlLCB2YWx1ZSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwg
dHJ1ZSk7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbigqc3RhdGUsIHRocm93U2NvcGUsIHRo
aXNPYmplY3QtPndyYXBwZWQoKS5zZXRJdGVtKGluZGV4LnZhbHVlKCksIFdURk1vdmUobmF0aXZl
VmFsdWUpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICghcHJvcGVy
dHlOYW1lLmlzU3ltYm9sKCkpIHsKKyAgICAgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2Jq
ZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5IH07CisgICAg
ICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KCk7
CisgICAgICAgIGlmICghKHByb3RvdHlwZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlw
ZSktPmdldFByb3BlcnR5U2xvdChzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90KSkpIHsKKyAgICAg
ICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkp
OworICAgICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigq
c3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgdHJ1ZSk7CisgICAgICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oKnN0YXRlLCB0aHJvd1Nj
b3BlLCB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvU3Ry
aW5nKHByb3BlcnR5TmFtZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKSk7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBCYXNlOjpwdXQodGhp
c09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7Cit9
CisKK2Jvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnB1
dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwg
SlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4o
Y2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OworCisgICAgaWYgKExJS0VMWShpbmRleCA8PSBNQVhfQVJSQVlfSU5ERVgpKSB7CisgICAgICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOworICAg
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgdmFs
dWUpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOworICAg
ICAgICBwcm9wYWdhdGVFeGNlcHRpb24oKnN0YXRlLCB0aHJvd1Njb3BlLCB0aGlzT2JqZWN0LT53
cmFwcGVkKCkuc2V0SXRlbShpbmRleCwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBJZGVu
dGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7CisgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlz
T2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5IH07Cisg
ICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3QoKTsK
KyAgICBpZiAoIShwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5n
ZXRQcm9wZXJ0eVNsb3Qoc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpKSB7CisgICAgICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOworICAgICAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgdmFsdWUp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOworICAgICAg
ICBwcm9wYWdhdGVFeGNlcHRpb24oKnN0YXRlLCB0aHJvd1Njb3BlLCB0aGlzT2JqZWN0LT53cmFw
cGVkKCkuc2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFtZSksIFdU
Rk1vdmUobmF0aXZlVmFsdWUpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IHJldHVybiBCYXNlOjpwdXRCeUluZGV4KGNlbGwsIHN0YXRlLCBpbmRleCwgdmFsdWUsIHNob3Vs
ZFRocm93KTsKK30KKworYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbjo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBz
dGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9y
JiBwcm9wZXJ0eURlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCit7CisgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbio+KG9iamVjdCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOworCisgICAgaWYgKGF1dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFt
ZSkpIHsKKyAgICAgICAgaWYgKCFwcm9wZXJ0eURlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKKyAgICAgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHByb3BlcnR5RGVzY3JpcHRvci52YWx1
ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKKyAg
ICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKCpzdGF0ZSwgdGhyb3dTY29wZSwgdGhpc09iamVjdC0+
d3JhcHBlZCgpLnNldEl0ZW0oaW5kZXgudmFsdWUoKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNT
eW1ib2woKSkgeworICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7IHRoaXNPYmplY3QsIFByb3Bl
cnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkgfTsKKyAgICAgICAgaWYgKCFC
YXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwg
c2xvdCkpIHsKKyAgICAgICAgICAgIGlmICghcHJvcGVydHlEZXNjcmlwdG9yLmlzRGF0YURlc2Ny
aXB0b3IoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKKyAgICAgICAg
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBwcm9w
ZXJ0eURlc2NyaXB0b3IudmFsdWUoKSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIHRydWUpOworICAgICAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKCpzdGF0
ZSwgdGhyb3dTY29wZSwgdGhpc09iamVjdC0+d3JhcHBlZCgpLnNldE5hbWVkSXRlbShwcm9wZXJ0
eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSkpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBQcm9wZXJ0eURl
c2NyaXB0b3IgbmV3UHJvcGVydHlEZXNjcmlwdG9yID0gcHJvcGVydHlEZXNjcmlwdG9yOworICAg
IG5ld1Byb3BlcnR5RGVzY3JpcHRvci5zZXRDb25maWd1cmFibGUodHJ1ZSk7CisgICAgcmV0dXJu
IEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgbmV3
UHJvcGVydHlEZXNjcmlwdG9yLCBzaG91bGRUaHJvdyk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpz
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7
CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljRG93bmNh
c3Q8SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Qcm90b3R5cGUq
Pih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJv
dG90eXBlKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2Nv
cGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBwcm90b3R5
cGUtPmdsb2JhbE9iamVjdCgpKSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNEb3duY2FzdDxK
U1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvblByb3RvdHlwZSo+KHZt
LCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5
cGUpKSB7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNv
bnN0cnVjdG9yCisgICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHN0YXRlLT52bSgpLCBz
dGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKSk7Cit9CisKK2Jvb2wgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb25Pd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlND
OjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBV
TlVTRURfUEFSQU0oaGFuZGxlKTsKKyAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCit2b2lkIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5n
RXhjZXB0aW9uT3duZXI6OmZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxl
LCB2b2lkKiBjb250ZXh0KQoreworICAgIGF1dG8qIGpzVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
clRocm93aW5nRXhjZXB0aW9uID0gc3RhdGljX2Nhc3Q8SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb24qPihoYW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CisgICAgYXV0
byYgd29ybGQgPSAqc3RhdGljX2Nhc3Q8RE9NV3JhcHBlcldvcmxkKj4oY29udGV4dCk7CisgICAg
dW5jYWNoZVdyYXBwZXIod29ybGQsICZqc1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbi0+d3JhcHBlZCgpLCBqc1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbik7Cit9CisKKyNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCisjaWYgUExB
VEZPUk0oV0lOKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ0ODMpCitleHRlcm4gIkMiIHsg
ZXh0ZXJuIHZvaWQgKCpjb25zdCBfX2lkZW50aWZpZXIoIj8/XzdUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb25AV2ViQ29yZUBANkJAIilbXSkoKTsgfQorI2Vsc2UKK2V4
dGVybiAiQyIgeyBleHRlcm4gdm9pZCogX1pUVk43V2ViQ29yZTQyVGVzdE5hbWVkQW5kSW5kZXhl
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uRVtdOyB9CisjZW5kaWYKKyNlbmRpZgorCitKU0M6OkpT
VmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24+JiYgaW1wbCkKK3sKKworI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKKyAgICB2
b2lkKiBhY3R1YWxWVGFibGVQb2ludGVyID0gKihyZWludGVycHJldF9jYXN0PHZvaWQqKj4oaW1w
bC5wdHIoKSkpOworI2lmIFBMQVRGT1JNKFdJTikKKyAgICB2b2lkKiBleHBlY3RlZFZUYWJsZVBv
aW50ZXIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihfX2lkZW50aWZpZXIoIj8/XzdUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25AV2ViQ29yZUBANkJAIikpOworI2Vs
c2UKKyAgICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSAmX1pUVk43V2ViQ29yZTQyVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uRVsyXTsKKyNpZiBDT01QSUxF
UihDTEFORykKKyAgICAvLyBJZiB0aGlzIGZhaWxzIFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbiBkb2VzIG5vdCBoYXZlIGEgdnRhYmxlLCBzbyB5b3UgbmVlZCB0byBh
ZGQgdGhlCisgICAgLy8gSW1wbGVtZW50YXRpb25MYWNrc1ZUYWJsZSBhdHRyaWJ1dGUgdG8gdGhl
IGludGVyZmFjZSBkZWZpbml0aW9uCisgICAgc3RhdGljX2Fzc2VydChfX2lzX3BvbHltb3JwaGlj
KFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiksICJUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24gaXMgbm90IHBvbHltb3JwaGljIik7Cisj
ZW5kaWYKKyNlbmRpZgorICAgIC8vIElmIHlvdSBoaXQgdGhpcyBhc3NlcnRpb24geW91IGVpdGhl
ciBoYXZlIGEgdXNlIGFmdGVyIGZyZWUgYnVnLCBvcgorICAgIC8vIFRlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiBoYXMgc3ViY2xhc3Nlcy4gSWYgVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uIGhhcyBzdWJjbGFzc2VzIHRoYXQgZ2V0IHBh
c3NlZAorICAgIC8vIHRvIHRvSlMoKSB3ZSBjdXJyZW50bHkgcmVxdWlyZSBUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24geW91IHRvIG9wdCBvdXQgb2YgYmluZGluZyBo
YXJkZW5pbmcKKyAgICAvLyBieSBhZGRpbmcgdGhlIFNraXBWVGFibGVWYWxpZGF0aW9uIGF0dHJp
YnV0ZSB0byB0aGUgaW50ZXJmYWNlIElETCBkZWZpbml0aW9uCisgICAgUkVMRUFTRV9BU1NFUlQo
YWN0dWFsVlRhYmxlUG9pbnRlciA9PSBleHBlY3RlZFZUYWJsZVBvaW50ZXIpOworI2VuZGlmCisg
ICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXI8VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5n
RXhjZXB0aW9uPihnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOworfQorCitKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiYgaW1wbCkK
K3sKKyAgICByZXR1cm4gd3JhcChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKK30KKworVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKiBKU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbjo6dG9XcmFwcGVkKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBqc0R5bmFtaWNEb3du
Y2FzdDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KHZtLCB2
YWx1ZSkpCisgICAgICAgIHJldHVybiAmd3JhcHBlci0+d3JhcHBlZCgpOworICAgIHJldHVybiBu
dWxscHRyOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDkzIEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAg
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiSlNET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uLmgiCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb24gOiBwdWJsaWMgSlNET01XcmFwcGVyPFRlc3ROYW1lZEFuZEluZGV4ZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4geworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0RP
TVdyYXBwZXI8VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uPjsKKyAg
ICBzdGF0aWMgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qIGNy
ZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBSZWY8VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uPiYm
IGltcGwpCisgICAgeworICAgICAgICBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbiogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4oZ2xvYmFsT2JqZWN0LT52bSgp
LmhlYXApKSBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbihzdHJ1
Y3R1cmUsICpnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOworICAgICAgICBwdHItPmZpbmlz
aENyZWF0aW9uKGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAg
fQorCisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwg
SlNET01HbG9iYWxPYmplY3QmKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBl
KEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpK
U1ZhbHVlKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVj
dCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90
Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVy
dHlTbG90Jik7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVt
ZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgYm9vbCBw
dXQoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6
OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgcHV0QnlJ
bmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1l
LCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyBib29sIGRlZmlu
ZU93blByb3BlcnR5KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVy
dHlOYW1lLCBjb25zdCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cp
OworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKKworICAgIERFQ0xBUkVf
SU5GTzsKKworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6
Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBw
cm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCop
OworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpT
Qzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6Oklu
dGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8g
fCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzR2V0UHJv
cGVydHlOYW1lcyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworcHJvdGVjdGVkOgorICAgIEpTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uKEpTQzo6U3RydWN0dXJlKiwg
SlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5n
RXhjZXB0aW9uPiYmKTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsK
KworY2xhc3MgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Pd25l
ciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CitwdWJsaWM6CisgICAgdmlydHVhbCBi
b29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4s
IHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlu
YWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCk7Cit9OworCitp
bmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQm
LCBUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qKQoreworICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbk93bmVyPiBvd25lcjsKKyAgICByZXR1cm4gJm93bmVyLmdldCgpOworfQorCitpbmxp
bmUgdm9pZCogd3JhcHBlcktleShUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24qIHdyYXBwYWJsZU9iamVjdCkKK3sKKyAgICByZXR1cm4gd3JhcHBhYmxlT2JqZWN0Owor
fQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0
KiwgVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uJik7CitpbmxpbmUg
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b24qIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICppbXBs
KSA6IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6
RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uPiYmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5
Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFJlZlB0cjxUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+
JiYgaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9i
amVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KKwordGVtcGxh
dGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFRlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOworICAgIHVzaW5nIFRv
V3JhcHBlZFJldHVyblR5cGUgPSBUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24qOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldp
dGhJZGVudGlmaWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIu
Y3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0MDYgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBn
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldp
dGhJZGVudGlmaWVyLmgiCisKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJK
U0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVy
dC5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRlICJKU0RP
TU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAi
VVJMLmgiCisjaW5jbHVkZSA8cnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5oPgorI2luY2x1ZGUg
PHJ1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRnVuY3Rp
b25zCisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZUZ1bmN0aW9uTmFtZWRTZXR0ZXIoSlND
OjpFeGVjU3RhdGUqKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZUZ1bmN0aW9uSW5kZXhl
ZFNldHRlcihKU0M6OkV4ZWNTdGF0ZSopOworCisvLyBBdHRyaWJ1dGVzCisKK0pTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1
Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKK2Jvb2wgc2V0SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJD
b25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5j
b2RlZEpTVmFsdWUpOworCitjbGFzcyBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllclByb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGlj
OgorICAgIHVzaW5nIEJhc2UgPSBKU0M6OkpTTm9uRmluYWxPYmplY3Q7CisgICAgc3RhdGljIEpT
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlKiBjcmVhdGUo
SlNDOjpWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0
ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9j
YXRlQ2VsbDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlw
ZT4odm0uaGVhcCkpIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyUHJv
dG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNo
Q3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVf
SU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZN
JiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJv
dG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAg
IDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAgeworICAgIH0KKwor
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKKwordXNpbmcgSlNUZXN0TmFt
ZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvciA9IEpTRE9NQ29uc3Ry
dWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyPjsKKwordGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZShKU0M6OlZN
JiB2bSwgY29uc3QgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBVTlVT
RURfUEFSQU0odm0pOworICAgIHJldHVybiBnbG9iYWxPYmplY3QuZnVuY3Rpb25Qcm90b3R5cGUo
KTsKK30KKwordGVtcGxhdGU8PiB2b2lkIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJ
ZGVudGlmaWVyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXI6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5
IHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwg
anNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyIikpKSwgUmVhZE9ubHkgfCBEb250RW51bSk7Cisg
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBS
ZWFkT25seSB8IERvbnRFbnVtKTsKK30KKwordGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlNU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3Rvcjo6c19pbmZv
ID0geyAiVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyIiwgJkJhc2U6OnNf
aW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKSB9OworCisvKiBIYXNoIHRh
YmxlIGZvciBwcm90b3R5cGUgKi8KKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlVGFibGVWYWx1ZXNb
XSA9Cit7CisgICAgeyAiY29uc3RydWN0b3IiLCBEb250RW51bSwgTm9JbnRyaW5zaWMsIHsgKGlu
dHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKSwgKGludHB0cl90KSBz
dGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcikgfSB9LAorICAgIHsgIm5h
bWVkU2V0dGVyIiwgSlNDOjpGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRp
Y19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllclByb3RvdHlwZUZ1bmN0aW9uTmFtZWRTZXR0ZXIpLCAoaW50cHRyX3QpICgyKSB9IH0s
CisgICAgeyAiaW5kZXhlZFNldHRlciIsIEpTQzo6RnVuY3Rpb24sIE5vSW50cmluc2ljLCB7IChp
bnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGVGdW5jdGlvbkluZGV4ZWRTZXR0ZXIpLCAoaW50
cHRyX3QpICgyKSB9IH0sCit9OworCitjb25zdCBDbGFzc0luZm8gSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3ROYW1lZEFu
ZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZSIsICZCYXNlOjpzX2luZm8sIG51
bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGUpIH07CisKK3ZvaWQgSlNUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmVpZnlTdGF0aWNQcm9w
ZXJ0aWVzKHZtLCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3Rv
dHlwZVRhYmxlVmFsdWVzLCAqdGhpcyk7Cit9CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6c19pbmZvID0geyAiVGVzdE5hbWVkQW5k
SW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVs
bHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRo
SWRlbnRpZmllcikgfTsKKworSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXI6OkpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKFN0cnVjdHVyZSog
c3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyPiYmIGltcGwpCisgICAgOiBKU0RPTVdyYXBw
ZXI8VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyPihzdHJ1Y3R1cmUsIGds
b2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSkKK3sKK30KKwordm9pZCBKU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8o
KSkpOworCit9CisKK0pTT2JqZWN0KiBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllcjo6Y3JlYXRlUHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCkKK3sKKyAgICByZXR1cm4gSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXJQcm90b3R5cGU6OmNyZWF0ZSh2bSwgJmdsb2JhbE9iamVjdCwgSlNUZXN0TmFtZWRB
bmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2
bSwgJmdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0Lm9iamVjdFByb3RvdHlwZSgpKSk7Cit9CisK
K0pTT2JqZWN0KiBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6cHJv
dG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBy
ZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyPih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKworSlNWYWx1ZSBKU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Db25zdHJ1
Y3RvcjxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9y
Pih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOwor
fQorCit2b2lkIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpkZXN0
cm95KEpTQzo6SlNDZWxsKiBjZWxsKQoreworICAgIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0TmFtZWRBbmRJ
bmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIqPihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT5KU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6fkpTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKCk7Cit9CisKK2Jvb2wgSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2Jq
ZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1l
ZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KG9iamVjdCk7CisgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIGF1dG8gb3B0aW9uYWxJ
bmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKTsKKyAgICBpZiAob3B0aW9uYWxJbmRleCAm
JiBvcHRpb25hbEluZGV4LnZhbHVlKCkgPCB0aGlzT2JqZWN0LT53cmFwcGVkKCkubGVuZ3RoKCkp
IHsKKyAgICAgICAgYXV0byBpbmRleCA9IG9wdGlvbmFsSW5kZXgudmFsdWUoKTsKKyAgICAgICAg
c2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCAwLCB0b0pTPElETERPTVN0cmluZz4oKnN0YXRlLCB0
aGlzT2JqZWN0LT53cmFwcGVkKCkuaXRlbShpbmRleCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIGlmIChCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgc3Rh
dGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIEpTVmFs
dWUgcHJvdG8gPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3QoKTsKKyAgICBpZiAocHJv
dG8uaXNPYmplY3QoKSAmJiBqc0Nhc3Q8SlNPYmplY3QqPihwcm90byktPmhhc1Byb3BlcnR5KHN0
YXRlLCBwcm9wZXJ0eU5hbWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW9w
dGlvbmFsSW5kZXggJiYgdGhpc09iamVjdC0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpICYmICFwcm9w
ZXJ0eU5hbWUuaXNTeW1ib2woKSkgeworICAgICAgICBhdXRvIGl0ZW0gPSB0aGlzT2JqZWN0LT53
cmFwcGVkKCkubmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKHByb3BlcnR5TmFt
ZSkpOworICAgICAgICBpZiAoIUlETERPTVN0cmluZzo6aXNOdWxsVmFsdWUoaXRlbSkpIHsKKyAg
ICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgMCwgdG9KUzxJRExET01TdHJpbmc+
KCpzdGF0ZSwgaXRlbSkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNl
dHRlcldpdGhJZGVudGlmaWVyOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KG9iamVjdCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIGlmIChMSUtFTFkoaW5kZXggPCB0aGlz
T2JqZWN0LT53cmFwcGVkKCkubGVuZ3RoKCkpKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUodGhp
c09iamVjdCwgMCwgdG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwgdGhpc09iamVjdC0+d3JhcHBl
ZCgpLml0ZW0oaW5kZXgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1
cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCh0aGlzT2JqZWN0LCBzdGF0ZSwgaW5k
ZXgsIHNsb3QpOworfQorCit2b2lkIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
c3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUg
bW9kZSkKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKj4ob2JqZWN0KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMCwg
Y291bnQgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkubGVuZ3RoKCk7IGkgPCBjb3VudDsgKytpKQor
ICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpKSk7Cisg
ICAgZm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc3VwcG9y
dGVkUHJvcGVydHlOYW1lcygpKQorICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHN0YXRlLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICBCYXNlOjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKHRoaXNPYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKK30KKwor
Ym9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6cHV0KEpTQ2Vs
bCogY2VsbCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBwdXRQcm9wZXJ0eVNsb3QpCit7CisgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllcio+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKKworICAgIGlmIChhdXRvIGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5h
bWUpKSB7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3Rh
dGUtPnZtKCkpOworICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJp
bmc+KCpzdGF0ZSwgdmFsdWUpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHRydWUpOworICAgICAgICB0aGlzT2JqZWN0LT53cmFwcGVkKCkuaW5kZXhlZFNldHRlcihp
bmRleC52YWx1ZSgpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpIHsKKyAgICAgICAg
UHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0
aG9kVHlwZTo6Vk1JbnF1aXJ5IH07CisgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09i
amVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KCk7CisgICAgICAgIGlmICghKHByb3RvdHlwZS5pc09i
amVjdCgpICYmIGFzT2JqZWN0KHByb3RvdHlwZSktPmdldFByb3BlcnR5U2xvdChzdGF0ZSwgcHJv
cGVydHlOYW1lLCBzbG90KSkpIHsKKyAgICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOworICAgICAgICAgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CisgICAgICAgICAgICB0aGlzT2Jq
ZWN0LT53cmFwcGVkKCkubmFtZWRTZXR0ZXIocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlO
YW1lKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gQmFzZTo6cHV0KHRoaXNPYmplY3QsIHN0YXRl
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3QpOworfQorCitib29sIEpTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjpwdXRCeUluZGV4KEpTQ2VsbCog
Y2VsbCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJv
b2wgc2hvdWxkVGhyb3cpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KGNlbGwpOworICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKworICAgIGlmIChMSUtFTFko
aW5kZXggPD0gTUFYX0FSUkFZX0lOREVYKSkgeworICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKKyAgICAgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKKyAgICAgICAgdGhpc09iamVjdC0+d3Jh
cHBlZCgpLmluZGV4ZWRTZXR0ZXIoaW5kZXgsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBJ
ZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7CisgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0
aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5IH07
CisgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3Qo
KTsKKyAgICBpZiAoIShwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUp
LT5nZXRQcm9wZXJ0eVNsb3Qoc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpKSB7CisgICAgICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOworICAg
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgdmFs
dWUpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOworICAg
ICAgICB0aGlzT2JqZWN0LT53cmFwcGVkKCkubmFtZWRTZXR0ZXIocHJvcGVydHlOYW1lVG9TdHJp
bmcocHJvcGVydHlOYW1lKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gQmFzZTo6cHV0QnlJbmRleChjZWxsLCBzdGF0ZSwg
aW5kZXgsIHZhbHVlLCBzaG91bGRUaHJvdyk7Cit9CisKK2Jvb2wgSlNUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFBy
b3BlcnR5RGVzY3JpcHRvciYgcHJvcGVydHlEZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQor
eworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXIqPihvYmplY3QpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKKworICAgIGlmIChhdXRvIGluZGV4ID0gcGFyc2VJbmRl
eChwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgIGlmICghcHJvcGVydHlEZXNjcmlwdG9yLmlzRGF0
YURlc2NyaXB0b3IoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7CisgICAgICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBwcm9wZXJ0eURl
c2NyaXB0b3IudmFsdWUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgdHJ1ZSk7CisgICAgICAgIHRoaXNPYmplY3QtPndyYXBwZWQoKS5pbmRleGVkU2V0dGVyKGlu
ZGV4LnZhbHVlKCksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkgeworICAgICAgICBQ
cm9wZXJ0eVNsb3Qgc2xvdCB7IHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRo
b2RUeXBlOjpWTUlucXVpcnkgfTsKKyAgICAgICAgaWYgKCFCYXNlOjpnZXRPd25Qcm9wZXJ0eVNs
b3QodGhpc09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpIHsKKyAgICAgICAgICAg
IGlmICghcHJvcGVydHlEZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKKyAgICAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBwcm9wZXJ0eURlc2NyaXB0b3IudmFsdWUo
KSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwor
ICAgICAgICAgICAgdGhpc09iamVjdC0+d3JhcHBlZCgpLm5hbWVkU2V0dGVyKHByb3BlcnR5TmFt
ZVRvU3RyaW5nKHByb3BlcnR5TmFtZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgUHJvcGVydHlEZXNjcmlw
dG9yIG5ld1Byb3BlcnR5RGVzY3JpcHRvciA9IHByb3BlcnR5RGVzY3JpcHRvcjsKKyAgICBuZXdQ
cm9wZXJ0eURlc2NyaXB0b3Iuc2V0Q29uZmlndXJhYmxlKHRydWUpOworICAgIHJldHVybiBCYXNl
OjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIG5ld1Byb3Bl
cnR5RGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBKU1Rl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciogSURMT3BlcmF0aW9uPEpTVGVz
dE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyPjo6Y2FzdChFeGVjU3RhdGUmIHN0
YXRlKQoreworICAgIHJldHVybiBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KHN0YXRlLnZtKCksIHN0YXRlLnRoaXNWYWx1ZSgpKTsK
K30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5
cGUgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllclByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAg
aWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0Q29uc3RydWN0b3Ioc3RhdGUt
PnZtKCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKK30KKworYm9vbCBzZXRKU1Rlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQoreworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1p
Y0Rvd25jYXN0PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG90
eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFko
IXByb3RvdHlwZSkpIHsKKyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29w
ZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgLy8gU2hhZG93aW5nIGEgYnVp
bHQtaW4gY29uc3RydWN0b3IKKyAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qoc3RhdGUt
PnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpKTsKK30KKworc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlRnVuY3Rp
b25OYW1lZFNldHRlckJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVy
YXRpb248SlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI+OjpDbGFzc1Bh
cmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCit7CisgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKKyAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwor
ICAgIGF1dG8gbmFtZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNo
ZWNrZWRBcmd1bWVudCgwKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBhdXRvIHZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+
KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIGltcGwubmFtZWRTZXR0
ZXIoV1RGTW92ZShuYW1lKSwgV1RGTW92ZSh2YWx1ZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGVGdW5jdGlv
bk5hbWVkU2V0dGVyKEV4ZWNTdGF0ZSogc3RhdGUpCit7CisgICAgcmV0dXJuIElETE9wZXJhdGlv
bjxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj46OmNhbGw8anNUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGVGdW5jdGlvbk5hbWVk
U2V0dGVyQm9keT4oKnN0YXRlLCAibmFtZWRTZXR0ZXIiKTsKK30KKworc3RhdGljIGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyUHJvdG90eXBlRnVuY3Rpb25JbmRleGVkU2V0dGVyQm9keShKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRo
SWRlbnRpZmllcj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwor
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCisgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKHN0YXRlKSk7CisgICAgYXV0byBpbmRleCA9IGNvbnZlcnQ8SURMVW5zaWduZWRM
b25nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBhdXRvIHZhbHVl
ID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KDEpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOworICAgIGltcGwuaW5kZXhlZFNldHRlcihXVEZNb3ZlKGluZGV4KSwgV1RGTW92ZSh2YWx1
ZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK0Vu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0
aElkZW50aWZpZXJQcm90b3R5cGVGdW5jdGlvbkluZGV4ZWRTZXR0ZXIoRXhlY1N0YXRlKiBzdGF0
ZSkKK3sKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRl
cldpdGhJZGVudGlmaWVyPjo6Y2FsbDxqc1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllclByb3RvdHlwZUZ1bmN0aW9uSW5kZXhlZFNldHRlckJvZHk+KCpzdGF0ZSwgImluZGV4
ZWRTZXR0ZXIiKTsKK30KKworYm9vbCBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6
OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFVO
VVNFRF9QQVJBTShoYW5kbGUpOworICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXJPd25lcjo6ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZv
aWQqIGNvbnRleHQpCit7CisgICAgYXV0byoganNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0
aElkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRo
SWRlbnRpZmllcio+KGhhbmRsZS5zbG90KCktPmFzQ2VsbCgpKTsKKyAgICBhdXRvJiB3b3JsZCA9
ICpzdGF0aWNfY2FzdDxET01XcmFwcGVyV29ybGQqPihjb250ZXh0KTsKKyAgICB1bmNhY2hlV3Jh
cHBlcih3b3JsZCwgJmpzVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyLT53
cmFwcGVkKCksIGpzVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKTsKK30K
KworI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKKyNpZiBQTEFURk9STShXSU4pCisjcHJh
Z21hIHdhcm5pbmcoZGlzYWJsZTogNDQ4MykKK2V4dGVybiAiQyIgeyBleHRlcm4gdm9pZCAoKmNv
bnN0IF9faWRlbnRpZmllcigiPz9fN1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRp
ZmllckBXZWJDb3JlQEA2QkAiKVtdKSgpOyB9CisjZWxzZQorZXh0ZXJuICJDIiB7IGV4dGVybiB2
b2lkKiBfWlRWTjdXZWJDb3JlMzlUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZp
ZXJFW107IH0KKyNlbmRpZgorI2VuZGlmCisKK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVk
KEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj4mJiBpbXBsKQoreworCisjaWYg
RU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQorICAgIHZvaWQqIGFjdHVhbFZUYWJsZVBvaW50ZXIg
PSAqKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihpbXBsLnB0cigpKSk7CisjaWYgUExBVEZPUk0o
V0lOKQorICAgIHZvaWQqIGV4cGVjdGVkVlRhYmxlUG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KF9faWRlbnRpZmllcigiPz9fN1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllckBXZWJDb3JlQEA2QkAiKSk7CisjZWxzZQorICAgIHZvaWQqIGV4cGVjdGVkVlRhYmxl
UG9pbnRlciA9ICZfWlRWTjdXZWJDb3JlMzlUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElk
ZW50aWZpZXJFWzJdOworI2lmIENPTVBJTEVSKENMQU5HKQorICAgIC8vIElmIHRoaXMgZmFpbHMg
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyIGRvZXMgbm90IGhhdmUgYSB2
dGFibGUsIHNvIHlvdSBuZWVkIHRvIGFkZCB0aGUKKyAgICAvLyBJbXBsZW1lbnRhdGlvbkxhY2tz
VlRhYmxlIGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJmYWNlIGRlZmluaXRpb24KKyAgICBzdGF0aWNf
YXNzZXJ0KF9faXNfcG9seW1vcnBoaWMoVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVu
dGlmaWVyKSwgIlRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciBpcyBub3Qg
cG9seW1vcnBoaWMiKTsKKyNlbmRpZgorI2VuZGlmCisgICAgLy8gSWYgeW91IGhpdCB0aGlzIGFz
c2VydGlvbiB5b3UgZWl0aGVyIGhhdmUgYSB1c2UgYWZ0ZXIgZnJlZSBidWcsIG9yCisgICAgLy8g
VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyIGhhcyBzdWJjbGFzc2VzLiBJ
ZiBUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIgaGFzIHN1YmNsYXNzZXMg
dGhhdCBnZXQgcGFzc2VkCisgICAgLy8gdG8gdG9KUygpIHdlIGN1cnJlbnRseSByZXF1aXJlIFRl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciB5b3UgdG8gb3B0IG91dCBvZiBi
aW5kaW5nIGhhcmRlbmluZworICAgIC8vIGJ5IGFkZGluZyB0aGUgU2tpcFZUYWJsZVZhbGlkYXRp
b24gYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2UgSURMIGRlZmluaXRpb24KKyAgICBSRUxFQVNF
X0FTU0VSVChhY3R1YWxWVGFibGVQb2ludGVyID09IGV4cGVjdGVkVlRhYmxlUG9pbnRlcik7Cisj
ZW5kaWYKKyAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXI+KGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7Cit9CisKK0pTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyJiBpbXBs
KQoreworICAgIHJldHVybiB3cmFwKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwpOworfQorCitU
ZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIqIEpTVGVzdE5hbWVkQW5kSW5k
ZXhlZFNldHRlcldpdGhJZGVudGlmaWVyOjp0b1dyYXBwZWQoSlNDOjpWTSYgdm0sIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAoYXV0byogd3JhcHBlciA9IGpzRHluYW1pY0Rvd25jYXN0
PEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKj4odm0sIHZhbHVlKSkK
KyAgICAgICAgcmV0dXJuICZ3cmFwcGVyLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgICAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAg
IFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERP
IE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIu
aCIKKyNpbmNsdWRlICJUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIuaCIK
KyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciA6IHB1Ymxp
YyBKU0RPTVdyYXBwZXI8VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyPiB7
CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTRE9NV3JhcHBlcjxUZXN0TmFtZWRBbmRJbmRl
eGVkU2V0dGVyV2l0aElkZW50aWZpZXI+OworICAgIHN0YXRpYyBKU1Rlc3ROYW1lZEFuZEluZGV4
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0TmFtZWRBbmRJbmRleGVk
U2V0dGVyV2l0aElkZW50aWZpZXI+JiYgaW1wbCkKKyAgICB7CisgICAgICAgIEpTVGVzdE5hbWVk
QW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6
YWxsb2NhdGVDZWxsPEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlmaWVyPihn
bG9iYWxPYmplY3QtPnZtKCkuaGVhcCkpIEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJ
ZGVudGlmaWVyKHN0cnVjdHVyZSwgKmdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7CisgICAg
ICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgcmV0
dXJuIHB0cjsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90
eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBKU0M6OkpTT2Jq
ZWN0KiBwcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CisgICAgc3RhdGlj
IFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciogdG9XcmFwcGVkKEpTQzo6
Vk0mLCBKU0M6OkpTVmFsdWUpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChK
U0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQ
cm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
SlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkm
LCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0
YXRpYyBib29sIHB1dChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0
eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMg
Ym9vbCBwdXRCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGlj
IGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpQcm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBz
aG91bGRUaHJvdyk7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOworCisg
ICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6
Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xv
YmFsT2JqZWN0Kik7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJzZW5j
ZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0
aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVy
cmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7Citwcm90ZWN0ZWQ6
CisgICAgSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXIoSlNDOjpTdHJ1
Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
V2l0aElkZW50aWZpZXI+JiYpOworCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7
Cit9OworCitjbGFzcyBKU1Rlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllck93
bmVyIDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IGJvb2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
Piwgdm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZpcnR1YWwgdm9pZCBm
aW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KTsKK307CisK
K2lubGluZSBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3Js
ZCYsIFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciopCit7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEpTVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyT3duZXI+IG93bmVyOworICAgIHJldHVybiAmb3duZXIuZ2V0KCk7Cit9CisKK2lubGluZSB2
b2lkKiB3cmFwcGVyS2V5KFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciog
d3JhcHBhYmxlT2JqZWN0KQoreworICAgIHJldHVybiB3cmFwcGFibGVPYmplY3Q7Cit9CisKK0pT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0
TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXImKTsKK2lubGluZSBKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllciogaW1wbCkgeyBy
ZXR1cm4gaW1wbCA/IHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgKmltcGwpIDogSlNDOjpqc051
bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUqLCBK
U0RPTUdsb2JhbE9iamVjdCosIFJlZjxUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50
aWZpZXI+JiYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRl
c3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj4mJiBpbXBsKSB7IHJldHVybiBp
bXBsID8gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VO
b25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdy
YXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlcldpdGhJZGVudGlm
aWVyPiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyV2l0aElkZW50aWZpZXI7CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFRlc3RO
YW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRp
Zmllci5oCShyZXZpc2lvbiAyMTc3NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWREZWxldGVyTm9JZGVudGlmaWVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDYgKzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBUZXN0TmFtZWREZWxldGVy
Tm9JZGVudGlmaWVyKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CiAgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0
YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHN0
YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlND
OjpFbnVtZXJhdGlvbk1vZGUoKSk7CiAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlND
OjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lKTsKICAgICBzdGF0
aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0
ZSosIHVuc2lnbmVkKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CkBA
IC01Miw3ICs1Myw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2
b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVt
ZXJhdGlvbk1vZGUoKSk7CiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihK
U0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwogcHVibGljOgogICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6R2V0T3duUHJvcGVydHlTbG90
SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93
blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEJhc2U6OlN0
cnVjdHVyZUZsYWdzOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRl
clRocm93aW5nRXhjZXB0aW9uLmgJKHJldmlzaW9uIDIxNzc2NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uKiB0b1dyYXBwZWQoSlNDOjpWTSYs
IEpTQzo6SlNWYWx1ZSk7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6
SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3Bl
cnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlND
OjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6
OlByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlND
OjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpT
Qzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CiAgICAgc3RhdGlj
IGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
UHJvcGVydHlOYW1lKTsKICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlND
OjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkKTsKICAgICBzdGF0aWMgdm9pZCBk
ZXN0cm95KEpTQzo6SlNDZWxsKik7CkBAIC01Miw3ICs1Myw2IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09i
amVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51
bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CiAgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVj
dCopOwogcHVibGljOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6
OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFpl
cm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzR2V0
UHJvcGVydHlOYW1lcyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlm
aWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXIuY3BwCShyZXZpc2lvbiAyMTc3
NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWREZWxldGVyV2l0aElkZW50aWZpZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gRnVuY3Rpb25zCiAKLUpTQzo6RW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllclByb3Rv
dHlwZUZ1bmN0aW9uUmVtb3ZlKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGVG
dW5jdGlvbk5hbWVkRGVsZXRlcihKU0M6OkV4ZWNTdGF0ZSopOwogCiAvLyBBdHRyaWJ1dGVzCiAK
QEAgLTkxLDcgKzkxLDcgQEAgdGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlNUZXN0TmFtZWRE
ZQogc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVu
dGlmaWVyUHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9CiB7CiAgICAgeyAiY29uc3RydWN0b3IiLCBE
b250RW51bSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xv
dDo6R2V0VmFsdWVGdW5jPihqc1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVj
dG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVu
Yz4oc2V0SlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcikgfSB9LAot
ICAgIHsgInJlbW92ZSIsIEpTQzo6RnVuY3Rpb24sIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClz
dGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZp
ZXJQcm90b3R5cGVGdW5jdGlvblJlbW92ZSksIChpbnRwdHJfdCkgKDEpIH0gfSwKKyAgICB7ICJu
YW1lZERlbGV0ZXIiLCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3Rh
dGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVy
UHJvdG90eXBlRnVuY3Rpb25OYW1lZERlbGV0ZXIpLCAoaW50cHRyX3QpICgxKSB9IH0sCiB9Owog
CiBjb25zdCBDbGFzc0luZm8gSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXJQcm90b3R5
cGU6OnNfaW5mbyA9IHsgIlRlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZSIs
ICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNU
ZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGUpIH07CkBAIC0xODYsNyArMTg2
LDcgQEAgYm9vbCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcjo6ZAogICAgIGF1dG8m
IHRoaXNPYmplY3QgPSAqanNDYXN0PEpTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyKj4o
Y2VsbCk7CiAgICAgYXV0byYgaW1wbCA9IHRoaXNPYmplY3Qud3JhcHBlZCgpOwogICAgIGlmIChp
c1Zpc2libGVOYW1lZFByb3BlcnR5PGZhbHNlPigqc3RhdGUsIHRoaXNPYmplY3QsIHByb3BlcnR5
TmFtZSkpIHsKLSAgICAgICAgaW1wbC5yZW1vdmUocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVy
dHlOYW1lKSk7CisgICAgICAgIGltcGwubmFtZWREZWxldGVyKHByb3BlcnR5TmFtZVRvU3RyaW5n
KHByb3BlcnR5TmFtZSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJu
IEJhc2U6OmRlbGV0ZVByb3BlcnR5KGNlbGwsIHN0YXRlLCBwcm9wZXJ0eU5hbWUpOwpAQCAtMTk4
LDcgKzE5OCw3IEBAIGJvb2wgSlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXI6OmQKICAg
ICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CiAgICAgYXV0byBwcm9wZXJ0eU5h
bWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7CiAgICAgaWYgKGlzVmlzaWJsZU5h
bWVkUHJvcGVydHk8ZmFsc2U+KCpzdGF0ZSwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lKSkgewot
ICAgICAgICBpbXBsLnJlbW92ZShwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUpKTsK
KyAgICAgICAgaW1wbC5uYW1lZERlbGV0ZXIocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlO
YW1lKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gQmFzZTo6ZGVs
ZXRlUHJvcGVydHlCeUluZGV4KGNlbGwsIHN0YXRlLCBpbmRleCk7CkBAIC0yMzIsNyArMjMyLDcg
QEAgYm9vbCBzZXRKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllcgogICAgIHJldHVybiBw
cm90b3R5cGUtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5j
b25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCi1zdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZp
ZXJQcm90b3R5cGVGdW5jdGlvblJlbW92ZUJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBl
bmFtZSBJRExPcGVyYXRpb248SlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXI+OjpDbGFz
c1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpCitzdGF0
aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50
aWZpZXJQcm90b3R5cGVGdW5jdGlvbk5hbWVkRGVsZXRlckJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZp
ZXI+OjpDbGFzc1BhcmFtZXRlciBjYXN0ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CkBAIC0yNDEsMTMgKzI0MSwxMyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBuYW1l
ID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwotICAgIGltcGwucmVtb3ZlKFdURk1vdmUobmFtZSkpOworICAgIGltcGwubmFtZWREZWxl
dGVyKFdURk1vdmUobmFtZSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0TmFtZWREZWxl
dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGVGdW5jdGlvblJlbW92ZShFeGVjU3RhdGUqIHN0YXRl
KQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRl
bnRpZmllclByb3RvdHlwZUZ1bmN0aW9uTmFtZWREZWxldGVyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7
Ci0gICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRpZmll
cj46OmNhbGw8anNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGVGdW5jdGlv
blJlbW92ZUJvZHk+KCpzdGF0ZSwgInJlbW92ZSIpOworICAgIHJldHVybiBJRExPcGVyYXRpb248
SlNUZXN0TmFtZWREZWxldGVyV2l0aElkZW50aWZpZXI+OjpjYWxsPGpzVGVzdE5hbWVkRGVsZXRl
cldpdGhJZGVudGlmaWVyUHJvdG90eXBlRnVuY3Rpb25OYW1lZERlbGV0ZXJCb2R5Pigqc3RhdGUs
ICJuYW1lZERlbGV0ZXIiKTsKIH0KIAogYm9vbCBKU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSWRlbnRp
Zmllck93bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVu
a25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJ
ZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyLmgJKHJldmlzaW9uIDIx
Nzc2NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
YW1lZERlbGV0ZXJXaXRoSWRlbnRpZmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyKiB0
b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3du
UHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVy
dHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQg
cHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyB2b2lkIGdldE93
blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9w
ZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1v
ZGUoKSk7CiAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDOjpKU0NlbGwqLCBKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lKTsKICAgICBzdGF0aWMgYm9vbCBkZWxldGVQ
cm9wZXJ0eUJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkKTsK
ICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxsKik7CkBAIC01Miw3ICs1Myw2IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGdldE93blByb3Bl
cnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5h
bWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7
CiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3Qg
SlNDOjpKU0dsb2JhbE9iamVjdCopOwogcHVibGljOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVGb3JQcm9w
ZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZl
bldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8
IEpTQzo6T3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVk
RGVsZXRlcldpdGhJbmRleGVkR2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkRGVsZXRlcldpdGhJbmRleGVkR2V0
dGVyLmgJKHJldmlzaW9uIDIxNzc2NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MSw2ICs0MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgVGVzdE5hbWVkRGVs
ZXRlcldpdGhJbmRleGVkR2V0dGVyKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7
CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAg
IHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpT
Qzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYp
OworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25N
b2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CiAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJv
cGVydHkoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lKTsK
ICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6
OkV4ZWNTdGF0ZSosIHVuc2lnbmVkKTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlND
ZWxsKik7CkBAIC01Miw3ICs1Myw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEpTQzo6U3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZv
KEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAotICAg
IHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0g
SlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25z
dHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwogcHVibGljOgog
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6R2V0T3duUHJv
cGVydHlTbG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8
IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRT
ZXR0ZXJOb0lkZW50aWZpZXIuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMjEgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMg
YmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVGVzdE5hbWVkU2V0dGVyTm9JZGVu
dGlmaWVyLmgiCisKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNv
bnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydC5oIgor
I2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBw
ZXJDYWNoZS5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KKyNpbmNs
dWRlIDx3dGYvR2V0UHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworLy8gQXR0cmlidXRlcworCitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5h
bWVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdE5hbWVkU2V0
dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKKworY2xhc3MgSlNUZXN0TmFtZWRTZXR0ZXJO
b0lkZW50aWZpZXJQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1
YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNDOjpKU05vbkZpbmFsT2JqZWN0OworICAgIHN0YXRp
YyBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllclByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0m
IHZtLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3Ry
dWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXJQcm90
b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TmFtZWRT
ZXR0ZXJOb0lkZW50aWZpZXJQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3ROYW1lZFNldHRlck5v
SWRlbnRpZmllclByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAg
ICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisK
KyAgICBERUNMQVJFX0lORk87CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6
Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXJQcm90b3R5cGUoSlNDOjpWTSYgdm0s
IEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAg
ICA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisK
KyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK3VzaW5nIEpTVGVzdE5h
bWVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IgPSBKU0RPTUNvbnN0cnVjdG9yTm90Q29u
c3RydWN0YWJsZTxKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcj47CisKK3RlbXBsYXRlPD4g
SlNWYWx1ZSBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yOjpwcm90b3R5
cGVGb3JTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICByZXR1cm4gZ2xvYmFsT2Jq
ZWN0LmZ1bmN0aW9uUHJvdG90eXBlKCk7Cit9CisKK3RlbXBsYXRlPD4gdm9pZCBKU1Rlc3ROYW1l
ZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYg
dm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlm
aWVyOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFkT25seSB8
IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpz
Tm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZyhBU0NJSUxpdGVyYWwoIlRlc3ROYW1lZFNldHRl
ck5vSWRlbnRpZmllciIpKSksIFJlYWRPbmx5IHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250
RW51bSk7Cit9CisKK3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE5hbWVkU2V0dGVy
Tm9JZGVudGlmaWVyQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3ROYW1lZFNldHRlck5vSWRl
bnRpZmllciIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvcikgfTsKKworLyog
SGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovCisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1
ZSBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllclByb3RvdHlwZVRhYmxlVmFsdWVzW10gPQor
eworICAgIHsgImNvbnN0cnVjdG9yIiwgRG9udEVudW0sIE5vSW50cmluc2ljLCB7IChpbnRwdHJf
dClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0TmFtZWRTZXR0
ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJv
cGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVy
Q29uc3RydWN0b3IpIH0gfSwKK307CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3ROYW1lZFNldHRl
ck5vSWRlbnRpZmllclByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdE5hbWVkU2V0dGVyTm9JZGVu
dGlmaWVyUHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllclByb3RvdHlwZSkgfTsK
Kwordm9pZCBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllclByb3RvdHlwZTo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZWlm
eVN0YXRpY1Byb3BlcnRpZXModm0sIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyUHJvdG90
eXBlVGFibGVWYWx1ZXMsICp0aGlzKTsKK30KKworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE5hbWVk
U2V0dGVyTm9JZGVudGlmaWVyOjpzX2luZm8gPSB7ICJUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZp
ZXIiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyKSB9OworCitKU1Rlc3ROYW1lZFNldHRlck5v
SWRlbnRpZmllcjo6SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0TmFtZWRTZXR0
ZXJOb0lkZW50aWZpZXI+JiYgaW1wbCkKKyAgICA6IEpTRE9NV3JhcHBlcjxUZXN0TmFtZWRTZXR0
ZXJOb0lkZW50aWZpZXI+KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKQor
eworfQorCit2b2lkIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VSVChp
bmhlcml0cyh2bSwgaW5mbygpKSk7CisKK30KKworSlNPYmplY3QqIEpTVGVzdE5hbWVkU2V0dGVy
Tm9JZGVudGlmaWVyOjpjcmVhdGVQcm90b3R5cGUoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmll
clByb3RvdHlwZTo6Y3JlYXRlKHZtLCAmZ2xvYmFsT2JqZWN0LCBKU1Rlc3ROYW1lZFNldHRlck5v
SWRlbnRpZmllclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCAmZ2xvYmFsT2JqZWN0LCBn
bG9iYWxPYmplY3Qub2JqZWN0UHJvdG90eXBlKCkpKTsKK30KKworSlNPYmplY3QqIEpTVGVzdE5h
bWVkU2V0dGVyTm9JZGVudGlmaWVyOjpwcm90b3R5cGUoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNUZXN0TmFt
ZWRTZXR0ZXJOb0lkZW50aWZpZXI+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCitKU1ZhbHVlIEpT
VGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0
cnVjdG9yPEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3I+KHZtLCAqanND
YXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisKK3ZvaWQg
SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwp
Cit7CisgICAgSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIqIHRoaXNPYmplY3QgPSBzdGF0
aWNfY2FzdDxKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcio+KGNlbGwpOworICAgIHRoaXNP
YmplY3QtPkpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjp+SlNUZXN0TmFtZWRTZXR0ZXJO
b0lkZW50aWZpZXIoKTsKK30KKworYm9vbCBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjo6
Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyKj4ob2Jq
ZWN0KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CisgICAgaWYgKEJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBzdGF0ZSwgcHJv
cGVydHlOYW1lLCBzbG90KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgSlNWYWx1ZSBwcm90
byA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdCgpOworICAgIGlmIChwcm90by5pc09i
amVjdCgpICYmIGpzQ2FzdDxKU09iamVjdCo+KHByb3RvKS0+aGFzUHJvcGVydHkoc3RhdGUsIHBy
b3BlcnR5TmFtZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICh0aGlzT2JqZWN0
LT5jbGFzc0luZm8oKSA9PSBpbmZvKCkgJiYgIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7Cisg
ICAgICAgIGF1dG8gaXRlbSA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5uYW1lZEl0ZW0ocHJvcGVy
dHlOYW1lVG9BdG9taWNTdHJpbmcocHJvcGVydHlOYW1lKSk7CisgICAgICAgIGlmICghSURMRE9N
U3RyaW5nOjppc051bGxWYWx1ZShpdGVtKSkgeworICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0
aGlzT2JqZWN0LCAwLCB0b0pTPElETERPTVN0cmluZz4oKnN0YXRlLCBpdGVtKSk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI6OmdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5k
ZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyKj4ob2JqZWN0KTsKKyAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgSWRlbnRpZmllciBwcm9w
ZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7CisgICAgaWYgKHRoaXNP
YmplY3QtPmNsYXNzSW5mbygpID09IGluZm8oKSkgeworICAgICAgICBhdXRvIGl0ZW0gPSB0aGlz
T2JqZWN0LT53cmFwcGVkKCkubmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKHBy
b3BlcnR5TmFtZSkpOworICAgICAgICBpZiAoIUlETERPTVN0cmluZzo6aXNOdWxsVmFsdWUoaXRl
bSkpIHsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgMCwgdG9KUzxJRExE
T01TdHJpbmc+KCpzdGF0ZSwgaXRlbSkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgo
dGhpc09iamVjdCwgc3RhdGUsIGluZGV4LCBzbG90KTsKK30KKwordm9pZCBKU1Rlc3ROYW1lZFNl
dHRlck5vSWRlbnRpZmllcjo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVy
YXRpb25Nb2RlIG1vZGUpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RO
YW1lZFNldHRlck5vSWRlbnRpZmllcio+KG9iamVjdCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1l
IDogdGhpc09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSkKKyAgICAg
ICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgcHJvcGVy
dHlOYW1lKSk7CisgICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBzdGF0
ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7Cit9CisKK2Jvb2wgSlNUZXN0TmFtZWRTZXR0ZXJOb0lk
ZW50aWZpZXI6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgcHV0UHJvcGVy
dHlTbG90KQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0
ZXJOb0lkZW50aWZpZXIqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CisKKyAgICBpZiAoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7
CisgICAgICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJ
bnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSB9OworICAgICAgICBKU1ZhbHVlIHByb3RvdHlw
ZSA9IHRoaXNPYmplY3QtPmdldFByb3RvdHlwZURpcmVjdCgpOworICAgICAgICBpZiAoIShwcm90
b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3Qo
c3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpKSB7CisgICAgICAgICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKKyAgICAgICAgICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCB2YWx1ZSk7CisgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOworICAgICAgICAg
ICAgdGhpc09iamVjdC0+d3JhcHBlZCgpLnNldE5hbWVkSXRlbShwcm9wZXJ0eU5hbWVUb1N0cmlu
Zyhwcm9wZXJ0eU5hbWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBCYXNlOjpwdXQodGhpc09i
amVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3BlcnR5U2xvdCk7Cit9CisK
K2Jvb2wgSlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnB1dEJ5SW5kZXgoSlNDZWxsKiBj
ZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSwgYm9v
bCBzaG91bGRUaHJvdykKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5h
bWVkU2V0dGVyTm9JZGVudGlmaWVyKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworCisgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUg
PSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7CisgICAgUHJvcGVydHlTbG90IHNsb3Qg
eyB0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5
IH07CisgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJl
Y3QoKTsKKyAgICBpZiAoIShwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90b3R5
cGUpLT5nZXRQcm9wZXJ0eVNsb3Qoc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpKSB7CisgICAg
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwor
ICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwg
dmFsdWUpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOwor
ICAgICAgICB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZVRv
U3RyaW5nKHByb3BlcnR5TmFtZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIEJhc2U6OnB1dEJ5SW5kZXgoY2VsbCwgc3Rh
dGUsIGluZGV4LCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworfQorCitib29sIEpTVGVzdE5hbWVkU2V0
dGVyTm9JZGVudGlmaWVyOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURl
c2NyaXB0b3ImIHByb3BlcnR5RGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBh
dXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyKj4o
b2JqZWN0KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CisKKyAgICBpZiAoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7CisgICAgICAgIFByb3Bl
cnR5U2xvdCBzbG90IHsgdGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5
cGU6OlZNSW5xdWlyeSB9OworICAgICAgICBpZiAoIUJhc2U6OmdldE93blByb3BlcnR5U2xvdCh0
aGlzT2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBzbG90KSkgeworICAgICAgICAgICAgaWYg
KCFwcm9wZXJ0eURlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUoc3RhdGUtPnZtKCkpOworICAgICAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHByb3BlcnR5RGVzY3JpcHRvci52YWx1ZSgpKTsK
KyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7CisgICAg
ICAgICAgICB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZVRv
U3RyaW5nKHByb3BlcnR5TmFtZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgUHJvcGVydHlEZXNjcmlwdG9y
IG5ld1Byb3BlcnR5RGVzY3JpcHRvciA9IHByb3BlcnR5RGVzY3JpcHRvcjsKKyAgICBuZXdQcm9w
ZXJ0eURlc2NyaXB0b3Iuc2V0Q29uZmlndXJhYmxlKHRydWUpOworICAgIHJldHVybiBCYXNlOjpk
ZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIG5ld1Byb3BlcnR5
RGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1l
ZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE5hbWVkU2V0dGVyTm9J
ZGVudGlmaWVyUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAg
ICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVGVz
dE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgcHJv
dG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOworfQorCitib29sIHNldEpTVGVzdE5hbWVkU2V0dGVy
Tm9JZGVudGlmaWVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0TmFtZWRT
ZXR0ZXJOb0lkZW50aWZpZXJQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgeworICAgICAgICB0aHJvd1ZNVHlw
ZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgorICAgIHJldHVybiBwcm90
b3R5cGUtPnB1dERpcmVjdChzdGF0ZS0+dm0oKSwgc3RhdGUtPnByb3BlcnR5TmFtZXMoKS5jb25z
dHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOworfQorCitib29sIEpTVGVz
dE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CisgICAgVU5VU0VEX1BBUkFNKHZp
c2l0b3IpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBKU1Rlc3ROYW1lZFNldHRlck5v
SWRlbnRpZmllck93bmVyOjpmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRs
ZSwgdm9pZCogY29udGV4dCkKK3sKKyAgICBhdXRvKiBqc1Rlc3ROYW1lZFNldHRlck5vSWRlbnRp
ZmllciA9IHN0YXRpY19jYXN0PEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyKj4oaGFuZGxl
LnNsb3QoKS0+YXNDZWxsKCkpOworICAgIGF1dG8mIHdvcmxkID0gKnN0YXRpY19jYXN0PERPTVdy
YXBwZXJXb3JsZCo+KGNvbnRleHQpOworICAgIHVuY2FjaGVXcmFwcGVyKHdvcmxkLCAmanNUZXN0
TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXItPndyYXBwZWQoKSwganNUZXN0TmFtZWRTZXR0ZXJOb0lk
ZW50aWZpZXIpOworfQorCisjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQorI2lmIFBMQVRG
T1JNKFdJTikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NDgzKQorZXh0ZXJuICJDIiB7IGV4
dGVybiB2b2lkICgqY29uc3QgX19pZGVudGlmaWVyKCI/P183VGVzdE5hbWVkU2V0dGVyTm9JZGVu
dGlmaWVyQFdlYkNvcmVAQDZCQCIpW10pKCk7IH0KKyNlbHNlCitleHRlcm4gIkMiIHsgZXh0ZXJu
IHZvaWQqIF9aVFZON1dlYkNvcmUyN1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllckVbXTsgfQor
I2VuZGlmCisjZW5kaWYKKworSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVj
U3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdE5hbWVkU2V0
dGVyTm9JZGVudGlmaWVyPiYmIGltcGwpCit7CisKKyNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJ
VFkpCisgICAgdm9pZCogYWN0dWFsVlRhYmxlUG9pbnRlciA9ICoocmVpbnRlcnByZXRfY2FzdDx2
b2lkKio+KGltcGwucHRyKCkpKTsKKyNpZiBQTEFURk9STShXSU4pCisgICAgdm9pZCogZXhwZWN0
ZWRWVGFibGVQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oX19pZGVudGlmaWVyKCI/
P183VGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyQFdlYkNvcmVAQDZCQCIpKTsKKyNlbHNlCisg
ICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gJl9aVFZON1dlYkNvcmUyN1Rlc3ROYW1l
ZFNldHRlck5vSWRlbnRpZmllckVbMl07CisjaWYgQ09NUElMRVIoQ0xBTkcpCisgICAgLy8gSWYg
dGhpcyBmYWlscyBUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIgZG9lcyBub3QgaGF2ZSBhIHZ0
YWJsZSwgc28geW91IG5lZWQgdG8gYWRkIHRoZQorICAgIC8vIEltcGxlbWVudGF0aW9uTGFja3NW
VGFibGUgYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbgorICAgIHN0YXRpY19h
c3NlcnQoX19pc19wb2x5bW9ycGhpYyhUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIpLCAiVGVz
dE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyIGlzIG5vdCBwb2x5bW9ycGhpYyIpOworI2VuZGlmCisj
ZW5kaWYKKyAgICAvLyBJZiB5b3UgaGl0IHRoaXMgYXNzZXJ0aW9uIHlvdSBlaXRoZXIgaGF2ZSBh
IHVzZSBhZnRlciBmcmVlIGJ1Zywgb3IKKyAgICAvLyBUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZp
ZXIgaGFzIHN1YmNsYXNzZXMuIElmIFRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllciBoYXMgc3Vi
Y2xhc3NlcyB0aGF0IGdldCBwYXNzZWQKKyAgICAvLyB0byB0b0pTKCkgd2UgY3VycmVudGx5IHJl
cXVpcmUgVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyIHlvdSB0byBvcHQgb3V0IG9mIGJpbmRp
bmcgaGFyZGVuaW5nCisgICAgLy8gYnkgYWRkaW5nIHRoZSBTa2lwVlRhYmxlVmFsaWRhdGlvbiBh
dHRyaWJ1dGUgdG8gdGhlIGludGVyZmFjZSBJREwgZGVmaW5pdGlvbgorICAgIFJFTEVBU0VfQVNT
RVJUKGFjdHVhbFZUYWJsZVBvaW50ZXIgPT0gZXhwZWN0ZWRWVGFibGVQb2ludGVyKTsKKyNlbmRp
ZgorICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPFRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcj4o
Z2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKK30KKworSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0
TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXImIGltcGwpCit7CisgICAgcmV0dXJuIHdyYXAoc3RhdGUs
IGdsb2JhbE9iamVjdCwgaW1wbCk7Cit9CisKK1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllciog
SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI6OnRvV3JhcHBlZChKU0M6OlZNJiB2bSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmIChhdXRvKiB3cmFwcGVyID0ganNEeW5hbWljRG93
bmNhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIqPih2bSwgdmFsdWUpKQorICAgICAg
ICByZXR1cm4gJndyYXBwZXItPndyYXBwZWQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwor
fQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkU2V0dGVyTm9JZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5
MyBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNl
IHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1i
aW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkpTRE9NV3JhcHBlci5oIgorI2luY2x1ZGUgIlRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllci5o
IgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyIDogcHVibGljIEpTRE9NV3Jh
cHBlcjxUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI+IHsKK3B1YmxpYzoKKyAgICB1c2luZyBC
YXNlID0gSlNET01XcmFwcGVyPFRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcj47CisgICAgc3Rh
dGljIEpTVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyKiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3ROYW1l
ZFNldHRlck5vSWRlbnRpZmllcj4mJiBpbXBsKQorICAgIHsKKyAgICAgICAgSlNUZXN0TmFtZWRT
ZXR0ZXJOb0lkZW50aWZpZXIqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8
SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI+KGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwKSkg
SlNUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXIoc3RydWN0dXJlLCAqZ2xvYmFsT2JqZWN0LCBX
VEZNb3ZlKGltcGwpKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3Qt
PnZtKCkpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpT
T2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Cisg
ICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxP
YmplY3QmKTsKKyAgICBzdGF0aWMgVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyKiB0b1dyYXBw
ZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1l
LCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVy
dHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgIHN0YXRpYyB2b2lkIGdldE93blByb3Bl
cnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5h
bWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2RlID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7
CisgICAgc3RhdGljIGJvb2wgcHV0KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OlByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBKU0M6OlB1dFByb3BlcnR5U2xvdCYpOworICAg
IHN0YXRpYyBib29sIHB1dEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKKyAg
ICBzdGF0aWMgYm9vbCBkZWZpbmVPd25Qcm9wZXJ0eShKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgY29uc3QgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3Im
LCBib29sIHNob3VsZFRocm93KTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQzo6SlNDZWxs
Kik7CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJ
bmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKwor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpT
Qzo6SlNHbG9iYWxPYmplY3QqKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9yUHJvcGVy
dHlBYnNlbmNlIHwgSlNDOjpJbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5X
aGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBK
U0M6Ok92ZXJyaWRlc0dldFByb3BlcnR5TmFtZXMgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKK3By
b3RlY3RlZDoKKyAgICBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcihKU0M6OlN0cnVjdHVy
ZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcj4m
Jik7CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK2NsYXNzIEpT
VGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyT3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxl
T3duZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVS
b290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RW
aXNpdG9yJik7CisgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4sIHZvaWQqIGNvbnRleHQpOworfTsKKworaW5saW5lIEpTQzo6V2Vha0hhbmRsZU93bmVy
KiB3cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxkJiwgVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlm
aWVyKikKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SlNUZXN0TmFtZWRTZXR0ZXJOb0lk
ZW50aWZpZXJPd25lcj4gb3duZXI7CisgICAgcmV0dXJuICZvd25lci5nZXQoKTsKK30KKworaW5s
aW5lIHZvaWQqIHdyYXBwZXJLZXkoVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyKiB3cmFwcGFi
bGVPYmplY3QpCit7CisgICAgcmV0dXJuIHdyYXBwYWJsZU9iamVjdDsKK30KKworSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFRlc3ROYW1lZFNl
dHRlck5vSWRlbnRpZmllciYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE5hbWVkU2V0
dGVyTm9JZGVudGlmaWVyKiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KU05ld2x5
Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3ROYW1l
ZFNldHRlck5vSWRlbnRpZmllcj4mJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNy
ZWF0ZWQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBSZWZQdHI8VGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyPiYmIGltcGwpIHsgcmV0dXJu
IGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFz
ZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9N
V3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI+IHsKKyAg
ICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU1Rlc3ROYW1lZFNldHRlck5vSWRlbnRpZmllcjsKKyAg
ICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVy
KjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi5jcHAJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIxIEBA
CisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJv
amVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRp
bmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgiCisKKyNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5o
IgorI2luY2x1ZGUgIkpTRE9NQ29udmVydC5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFu
ZGxpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgPHJ1bnRp
bWUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQXR0cmlidXRlcwor
CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25D
b25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNv
bnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSk7CisKK2NsYXNzIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Q
cm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB1
c2luZyBCYXNlID0gSlNDOjpKU05vbkZpbmFsT2JqZWN0OworICAgIHN0YXRpYyBKU1Rlc3ROYW1l
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CisgICAgeworICAgICAgICBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uUHJvdG90
eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5hbWVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb25Qcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3ROYW1lZFNldHRl
clRocm93aW5nRXhjZXB0aW9uUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7
CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gcHRyOwor
ICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJ
bmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uUHJvdG90eXBl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKKyAgICAgICAgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKKyAg
ICB7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cit9OworCit1
c2luZyBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IgPSBKU0RP
TUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZTxKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uPjsKKwordGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb25Db25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBj
b25zdCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJB
TSh2bSk7CisgICAgcmV0dXJuIGdsb2JhbE9iamVjdC5mdW5jdGlvblByb3RvdHlwZSgpOworfQor
Cit0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0
cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QpCit7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90
b3R5cGUsIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OnByb3RvdHlwZSh2bSwg
Z2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOworICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2
bSwgU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24i
KSkpLCBSZWFkT25seSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9udEVudW0pOworfQorCit0
ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0
aW9uQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0
aW9uIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IpIH07CisKKy8q
IEhhc2ggdGFibGUgZm9yIHByb3RvdHlwZSAqLworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFs
dWUgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvblByb3RvdHlwZVRhYmxlVmFsdWVz
W10gPQoreworICAgIHsgImNvbnN0cnVjdG9yIiwgRG9udEVudW0sIE5vSW50cmluc2ljLCB7IChp
bnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0TmFt
ZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNf
Y2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0TmFtZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yKSB9IH0sCit9OworCitjb25zdCBDbGFzc0luZm8g
SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvblByb3RvdHlwZTo6c19pbmZvID0geyAi
VGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Qcm90b3R5cGUiLCAmQmFzZTo6c19pbmZv
LCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE5hbWVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb25Qcm90b3R5cGUpIH07CisKK3ZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvblByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0s
IEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Qcm90b3R5cGVUYWJsZVZhbHVlcywg
KnRoaXMpOworfQorCitjb25zdCBDbGFzc0luZm8gSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbjo6c19pbmZvID0geyAiVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24iLCAm
QmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVz
dE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24pIH07CisKK0pTVGVzdE5hbWVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb246OkpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24oU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0
TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4mJiBpbXBsKQorICAgIDogSlNET01XcmFwcGVy
PFRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uPihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVj
dCwgV1RGTW92ZShpbXBsKSkKK3sKK30KKwordm9pZCBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5n
RXhjZXB0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24odm0pOworICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CisKK30KKworSlNP
YmplY3QqIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmNyZWF0ZVByb3RvdHlw
ZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJu
IEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Qcm90b3R5cGU6OmNyZWF0ZSh2bSwg
Jmdsb2JhbE9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvblByb3RvdHlw
ZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCAmZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qub2JqZWN0
UHJvdG90eXBlKCkpKTsKK30KKworSlNPYmplY3QqIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb246OnByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QpCit7CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3ROYW1lZFNldHRlclRocm93
aW5nRXhjZXB0aW9uPih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKworSlNWYWx1ZSBKU1Rlc3ROYW1l
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVj
dG9yPEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3Rvcj4odm0sICpq
c0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKK30KKwordm9p
ZCBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpkZXN0cm95KEpTQzo6SlNDZWxs
KiBjZWxsKQoreworICAgIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qIHRoaXNP
YmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4o
Y2VsbCk7CisgICAgdGhpc09iamVjdC0+SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlv
bjo6fkpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24oKTsKK30KKworYm9vbCBKU1Rl
c3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNU
ZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KG9iamVjdCk7CisgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIGlmIChCYXNlOjpnZXRP
d25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIEpTVmFsdWUgcHJvdG8gPSB0aGlzT2JqZWN0LT5nZXRQ
cm90b3R5cGVEaXJlY3QoKTsKKyAgICBpZiAocHJvdG8uaXNPYmplY3QoKSAmJiBqc0Nhc3Q8SlNP
YmplY3QqPihwcm90byktPmhhc1Byb3BlcnR5KHN0YXRlLCBwcm9wZXJ0eU5hbWUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAodGhpc09iamVjdC0+Y2xhc3NJbmZvKCkgPT0gaW5m
bygpICYmICFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkgeworICAgICAgICBhdXRvIGl0ZW0gPSB0
aGlzT2JqZWN0LT53cmFwcGVkKCkubmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5n
KHByb3BlcnR5TmFtZSkpOworICAgICAgICBpZiAoIUlETERPTVN0cmluZzo6aXNOdWxsVmFsdWUo
aXRlbSkpIHsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgMCwgdG9KUzxJ
RExET01TdHJpbmc+KCpzdGF0ZSwgaXRlbSkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEpTVGVzdE5hbWVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb246OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xv
dCYgc2xvdCkKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0
dGVyVGhyb3dpbmdFeGNlcHRpb24qPihvYmplY3QpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9
IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBpZiAodGhpc09iamVjdC0+Y2xh
c3NJbmZvKCkgPT0gaW5mbygpKSB7CisgICAgICAgIGF1dG8gaXRlbSA9IHRoaXNPYmplY3QtPndy
YXBwZWQoKS5uYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcocHJvcGVydHlOYW1l
KSk7CisgICAgICAgIGlmICghSURMRE9NU3RyaW5nOjppc051bGxWYWx1ZShpdGVtKSkgeworICAg
ICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCAwLCB0b0pTPElETERPTVN0cmluZz4o
KnN0YXRlLCBpdGVtKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
IH0KKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCh0aGlzT2JqZWN0
LCBzdGF0ZSwgaW5kZXgsIHNsb3QpOworfQorCit2b2lkIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb246OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9u
TW9kZSBtb2RlKQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRT
ZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbio+KG9iamVjdCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1l
IDogdGhpc09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSkKKyAgICAg
ICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgcHJvcGVy
dHlOYW1lKSk7CisgICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBzdGF0
ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7Cit9CisKK2Jvb2wgSlNUZXN0TmFtZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbjo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBwdXRQ
cm9wZXJ0eVNsb3QpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1l
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworCisgICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNT
eW1ib2woKSkgeworICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7IHRoaXNPYmplY3QsIFByb3Bl
cnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkgfTsKKyAgICAgICAgSlNWYWx1
ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3QoKTsKKyAgICAgICAg
aWYgKCEocHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QocHJvdG90eXBlKS0+Z2V0UHJv
cGVydHlTbG90KHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSkgeworICAgICAgICAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7CisgICAgICAg
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgdmFs
dWUpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsK
KyAgICAgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbigqc3RhdGUsIHRocm93U2NvcGUsIHRoaXNP
YmplY3QtPndyYXBwZWQoKS5zZXROYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVy
dHlOYW1lKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBz
dGF0ZSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKK30KKworYm9vbCBK
U1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjpwdXRCeUluZGV4KEpTQ2VsbCogY2Vs
bCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wg
c2hvdWxkVGhyb3cpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1l
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworCisgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5h
bWUgPSBJZGVudGlmaWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7CisgICAgUHJvcGVydHlTbG90IHNs
b3QgeyB0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1
aXJ5IH07CisgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVE
aXJlY3QoKTsKKyAgICBpZiAoIShwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChwcm90
b3R5cGUpLT5nZXRQcm9wZXJ0eVNsb3Qoc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpKSB7Cisg
ICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkp
OworICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0
ZSwgdmFsdWUpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUp
OworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oKnN0YXRlLCB0aHJvd1Njb3BlLCB0aGlzT2Jq
ZWN0LT53cmFwcGVkKCkuc2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5
TmFtZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIHJldHVybiBCYXNlOjpwdXRCeUluZGV4KGNlbGwsIHN0YXRlLCBpbmRleCwgdmFs
dWUsIHNob3VsZFRocm93KTsKK30KKworYm9vbCBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0
YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3Im
IHByb3BlcnR5RGVzY3JpcHRvciwgYm9vbCBzaG91bGRUaHJvdykKK3sKKyAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qPihvYmpl
Y3QpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
KworICAgIGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpIHsKKyAgICAgICAgUHJvcGVydHlT
bG90IHNsb3QgeyB0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6
Vk1JbnF1aXJ5IH07CisgICAgICAgIGlmICghQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNP
YmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSB7CisgICAgICAgICAgICBpZiAoIXBy
b3BlcnR5RGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRShzdGF0ZS0+dm0oKSk7CisgICAgICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxJRExET01TdHJpbmc+KCpzdGF0ZSwgcHJvcGVydHlEZXNjcmlwdG9yLnZhbHVlKCkpOworICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKKyAgICAgICAg
ICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbigqc3RhdGUsIHRocm93U2NvcGUsIHRoaXNPYmplY3QtPndy
YXBwZWQoKS5zZXROYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwg
V1RGTW92ZShuYXRpdmVWYWx1ZSkpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgfQorCisgICAgUHJvcGVydHlEZXNjcmlwdG9yIG5ld1Byb3BlcnR5RGVzY3JpcHRv
ciA9IHByb3BlcnR5RGVzY3JpcHRvcjsKKyAgICBuZXdQcm9wZXJ0eURlc2NyaXB0b3Iuc2V0Q29u
ZmlndXJhYmxlKHRydWUpOworICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShvYmpl
Y3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIG5ld1Byb3BlcnR5RGVzY3JpcHRvciwgc2hvdWxkVGhy
b3cpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0
aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBQcm9wZXJ0eU5hbWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byogcHJvdG90eXBl
ID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvblBy
b3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElL
RUxZKCFwcm90b3R5cGUpKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwg
dGhyb3dTY29wZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3ROYW1lZFNldHRl
clRocm93aW5nRXhjZXB0aW9uOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgcHJvdG90eXBl
LT5nbG9iYWxPYmplY3QoKSkpOworfQorCitib29sIHNldEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dp
bmdFeGNlcHRpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBz
dGF0ZS0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3ROYW1lZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKKyAgICAgICAgdGhyb3dW
TVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKKyAgICByZXR1cm4g
cHJvdG90eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCku
Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKK30KKworYm9vbCBK
U1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CisgICAgVU5VU0VE
X1BBUkFNKHZpc2l0b3IpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBKU1Rlc3ROYW1l
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uT3duZXI6OmZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6
VW5rbm93bj4gaGFuZGxlLCB2b2lkKiBjb250ZXh0KQoreworICAgIGF1dG8qIGpzVGVzdE5hbWVk
U2V0dGVyVGhyb3dpbmdFeGNlcHRpb24gPSBzdGF0aWNfY2FzdDxKU1Rlc3ROYW1lZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpOworICAgIGF1dG8mIHdv
cmxkID0gKnN0YXRpY19jYXN0PERPTVdyYXBwZXJXb3JsZCo+KGNvbnRleHQpOworICAgIHVuY2Fj
aGVXcmFwcGVyKHdvcmxkLCAmanNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbi0+d3Jh
cHBlZCgpLCBqc1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uKTsKK30KKworI2lmIEVO
QUJMRShCSU5ESU5HX0lOVEVHUklUWSkKKyNpZiBQTEFURk9STShXSU4pCisjcHJhZ21hIHdhcm5p
bmcoZGlzYWJsZTogNDQ4MykKK2V4dGVybiAiQyIgeyBleHRlcm4gdm9pZCAoKmNvbnN0IF9faWRl
bnRpZmllcigiPz9fN1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uQFdlYkNvcmVAQDZC
QCIpW10pKCk7IH0KKyNlbHNlCitleHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQqIF9aVFZON1dlYkNv
cmUzMlRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uRVtdOyB9CisjZW5kaWYKKyNlbmRp
ZgorCitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbj4mJiBpbXBsKQoreworCisjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQorICAg
IHZvaWQqIGFjdHVhbFZUYWJsZVBvaW50ZXIgPSAqKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihp
bXBsLnB0cigpKSk7CisjaWYgUExBVEZPUk0oV0lOKQorICAgIHZvaWQqIGV4cGVjdGVkVlRhYmxl
UG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KF9faWRlbnRpZmllcigiPz9fN1Rlc3RO
YW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uQFdlYkNvcmVAQDZCQCIpKTsKKyNlbHNlCisgICAg
dm9pZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gJl9aVFZON1dlYkNvcmUzMlRlc3ROYW1lZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uRVsyXTsKKyNpZiBDT01QSUxFUihDTEFORykKKyAgICAvLyBJ
ZiB0aGlzIGZhaWxzIFRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uIGRvZXMgbm90IGhh
dmUgYSB2dGFibGUsIHNvIHlvdSBuZWVkIHRvIGFkZCB0aGUKKyAgICAvLyBJbXBsZW1lbnRhdGlv
bkxhY2tzVlRhYmxlIGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJmYWNlIGRlZmluaXRpb24KKyAgICBz
dGF0aWNfYXNzZXJ0KF9faXNfcG9seW1vcnBoaWMoVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24pLCAiVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24gaXMgbm90IHBvbHltb3Jw
aGljIik7CisjZW5kaWYKKyNlbmRpZgorICAgIC8vIElmIHlvdSBoaXQgdGhpcyBhc3NlcnRpb24g
eW91IGVpdGhlciBoYXZlIGEgdXNlIGFmdGVyIGZyZWUgYnVnLCBvcgorICAgIC8vIFRlc3ROYW1l
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uIGhhcyBzdWJjbGFzc2VzLiBJZiBUZXN0TmFtZWRTZXR0
ZXJUaHJvd2luZ0V4Y2VwdGlvbiBoYXMgc3ViY2xhc3NlcyB0aGF0IGdldCBwYXNzZWQKKyAgICAv
LyB0byB0b0pTKCkgd2UgY3VycmVudGx5IHJlcXVpcmUgVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb24geW91IHRvIG9wdCBvdXQgb2YgYmluZGluZyBoYXJkZW5pbmcKKyAgICAvLyBieSBh
ZGRpbmcgdGhlIFNraXBWVGFibGVWYWxpZGF0aW9uIGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJmYWNl
IElETCBkZWZpbml0aW9uCisgICAgUkVMRUFTRV9BU1NFUlQoYWN0dWFsVlRhYmxlUG9pbnRlciA9
PSBleHBlY3RlZFZUYWJsZVBvaW50ZXIpOworI2VuZGlmCisgICAgcmV0dXJuIGNyZWF0ZVdyYXBw
ZXI8VGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+KGdsb2JhbE9iamVjdCwgV1RGTW92
ZShpbXBsKSk7Cit9CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb24mIGltcGwpCit7CisgICAgcmV0dXJuIHdyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCwg
aW1wbCk7Cit9CisKK1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uKiBKU1Rlc3ROYW1l
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uOjp0b1dyYXBwZWQoSlNDOjpWTSYgdm0sIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAoYXV0byogd3JhcHBlciA9IGpzRHluYW1pY0Rvd25jYXN0
PEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qPih2bSwgdmFsdWUpKQorICAgICAg
ICByZXR1cm4gJndyYXBwZXItPndyYXBwZWQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwor
fQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5h
bWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbi5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2Vi
S2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRl
ZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgorI2luY2x1ZGUgIlRlc3ROYW1lZFNldHRl
clRocm93aW5nRXhjZXB0aW9uLmgiCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbiA6IHB1YmxpYyBKU0RPTVdyYXBwZXI8VGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNl
cHRpb24+IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNET01XcmFwcGVyPFRlc3ROYW1l
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uPjsKKyAgICBzdGF0aWMgSlNUZXN0TmFtZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbiogY3JlYXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4
Y2VwdGlvbj4mJiBpbXBsKQorICAgIHsKKyAgICAgICAgSlNUZXN0TmFtZWRTZXR0ZXJUaHJvd2lu
Z0V4Y2VwdGlvbiogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RO
YW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uPihnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkpIEpT
VGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24oc3RydWN0dXJlLCAqZ2xvYmFsT2JqZWN0
LCBXVEZNb3ZlKGltcGwpKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmpl
Y3QtPnZtKCkpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6
OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7
CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9i
YWxPYmplY3QmKTsKKyAgICBzdGF0aWMgVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24q
IHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9w
ZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIHZvaWQgZ2V0
T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlBy
b3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9u
TW9kZSgpKTsKKyAgICBzdGF0aWMgYm9vbCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90
Jik7CisgICAgc3RhdGljIGJvb2wgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0
YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhy
b3cpOworICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTQzo6SlNPYmplY3QqLCBK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBjb25zdCBKU0M6OlByb3BlcnR5RGVz
Y3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlND
OjpKU0NlbGwqKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBKU0M6OlN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1
cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpT
Qzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cisg
ICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwg
Y29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmVG
b3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdCB8IEpTQzo6T3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEJhc2U6OlN0cnVjdHVyZUZs
YWdzOworcHJvdGVjdGVkOgorICAgIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24o
SlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbj4mJik7CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0m
KTsKK307CisKK2NsYXNzIEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Pd25lciA6
IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CitwdWJsaWM6CisgICAgdmlydHVhbCBib29s
IGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZv
aWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluYWxp
emUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCk7Cit9OworCitpbmxp
bmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmLCBU
ZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbiopCit7CisgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEpTVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Pd25lcj4gb3duZXI7Cisg
ICAgcmV0dXJuICZvd25lci5nZXQoKTsKK30KKworaW5saW5lIHZvaWQqIHdyYXBwZXJLZXkoVGVz
dE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24qIHdyYXBwYWJsZU9iamVjdCkKK3sKKyAgICBy
ZXR1cm4gd3JhcHBhYmxlT2JqZWN0OworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRp
b24mKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3ROYW1lZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uKiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAq
aW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChK
U0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3ROYW1lZFNldHRlclRo
cm93aW5nRXhjZXB0aW9uPiYmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRl
ZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFJlZlB0cjxUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2VwdGlvbj4mJiBpbXBsKSB7IHJldHVy
biBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVh
c2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RP
TVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb24+
IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU1Rlc3ROYW1lZFNldHRlclRocm93aW5nRXhj
ZXB0aW9uOworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBUZXN0TmFtZWRTZXR0ZXJU
aHJvd2luZ0V4Y2VwdGlvbio7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoSWRlbnRpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuY3BwCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDM1MiBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291
cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0
ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAg
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAg
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllci5oIgorCisjaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFi
bGUuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnQuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlv
bkhhbmRsaW5nLmgiCisjaW5jbHVkZSAiSlNET01PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJKU0RP
TVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaD4K
KyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworLy8gRnVuY3Rpb25zCisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlRnVuY3Rp
b25OYW1lZFNldHRlcihKU0M6OkV4ZWNTdGF0ZSopOworCisvLyBBdHRyaWJ1dGVzCisKK0pTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9y
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OworYm9vbCBzZXRKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
KworY2xhc3MgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZSA6IHB1Ymxp
YyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0M6
OkpTTm9uRmluYWxPYmplY3Q7CisgICAgc3RhdGljIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50
aWZpZXJQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpT
VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVs
bCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3Rv
dHlwZT4odm0uaGVhcCkpIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGUo
dm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlv
bih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOwor
ICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVzdE5hbWVkU2V0
dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEpTQzo6SlNOb25GaW5h
bE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK3VzaW5nIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50
aWZpZXJDb25zdHJ1Y3RvciA9IEpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpTVGVz
dE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI+OworCit0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1
cmUoSlNDOjpWTSYgdm0sIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7
CisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LmZ1bmN0aW9u
UHJvdG90eXBlKCk7Cit9CisKK3RlbXBsYXRlPD4gdm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJ
ZGVudGlmaWVyQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6cHJv
dG90eXBlKHZtLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51
bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZp
YWxTdHJpbmcoJnZtLCBTdHJpbmcoQVNDSUlMaXRlcmFsKCJUZXN0TmFtZWRTZXR0ZXJXaXRoSWRl
bnRpZmllciIpKSksIFJlYWRPbmx5IHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250RW51bSk7
Cit9CisKK3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElk
ZW50aWZpZXJDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50
aWZpZXIiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvcikgfTsKKworLyog
SGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovCisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1
ZSBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9
Cit7CisgICAgeyAiY29uc3RydWN0b3IiLCBEb250RW51bSwgTm9JbnRyaW5zaWMsIHsgKGludHB0
cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3ROYW1lZFNl
dHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1
dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVu
dGlmaWVyQ29uc3RydWN0b3IpIH0gfSwKKyAgICB7ICJuYW1lZFNldHRlciIsIEpTQzo6RnVuY3Rp
b24sIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4o
anNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZUZ1bmN0aW9uTmFtZWRTZXR0
ZXIpLCAoaW50cHRyX3QpICgyKSB9IH0sCit9OworCitjb25zdCBDbGFzc0luZm8gSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdE5hbWVkU2V0
dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxs
cHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJQ
cm90b3R5cGUpIH07CisKK3ZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3Rv
dHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KHZtKTsKKyAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpTVGVzdE5hbWVkU2V0dGVyV2l0
aElkZW50aWZpZXJQcm90b3R5cGVUYWJsZVZhbHVlcywgKnRoaXMpOworfQorCitjb25zdCBDbGFz
c0luZm8gSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6c19pbmZvID0geyAiVGVzdE5h
bWVkU2V0dGVyV2l0aElkZW50aWZpZXIiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRy
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIpIH07
CisKK0pTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OkpTVGVzdE5hbWVkU2V0dGVyV2l0
aElkZW50aWZpZXIoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj4mJiBpbXBsKQorICAg
IDogSlNET01XcmFwcGVyPFRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyPihzdHJ1Y3R1cmUs
IGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSkKK3sKK30KKwordm9pZCBKU1Rlc3ROYW1lZFNl
dHRlcldpdGhJZGVudGlmaWVyOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CisK
K30KKworSlNPYmplY3QqIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmNyZWF0ZVBy
b3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAg
cmV0dXJuIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGU6OmNyZWF0ZSh2
bSwgJmdsb2JhbE9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlw
ZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCAmZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qub2JqZWN0
UHJvdG90eXBlKCkpKTsKK30KKworSlNPYmplY3QqIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50
aWZpZXI6OnByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qp
Cit7CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVu
dGlmaWVyPih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKworSlNWYWx1ZSBKU1Rlc3ROYW1lZFNldHRl
cldpdGhJZGVudGlmaWVyOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVz
dE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3Qg
SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKK30KKwordm9pZCBKU1Rlc3ROYW1l
ZFNldHRlcldpdGhJZGVudGlmaWVyOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQoreworICAg
IEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2Fz
dDxKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyKj4oY2VsbCk7CisgICAgdGhpc09iamVj
dC0+SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6fkpTVGVzdE5hbWVkU2V0dGVyV2l0
aElkZW50aWZpZXIoKTsKK30KKworYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVy
OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+
KG9iamVjdCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOworICAgIGlmIChCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgc3RhdGUs
IHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIEpTVmFsdWUg
cHJvdG8gPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3QoKTsKKyAgICBpZiAocHJvdG8u
aXNPYmplY3QoKSAmJiBqc0Nhc3Q8SlNPYmplY3QqPihwcm90byktPmhhc1Byb3BlcnR5KHN0YXRl
LCBwcm9wZXJ0eU5hbWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAodGhpc09i
amVjdC0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpICYmICFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkg
eworICAgICAgICBhdXRvIGl0ZW0gPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkubmFtZWRJdGVtKHBy
b3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZSkpOworICAgICAgICBpZiAoIUlE
TERPTVN0cmluZzo6aXNOdWxsVmFsdWUoaXRlbSkpIHsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFs
dWUodGhpc09iamVjdCwgMCwgdG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwgaXRlbSkpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWdu
ZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIqPihvYmplY3QpOworICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBJZGVudGlm
aWVyIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20oc3RhdGUsIGluZGV4KTsKKyAgICBp
ZiAodGhpc09iamVjdC0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKSB7CisgICAgICAgIGF1dG8gaXRl
bSA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5uYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9BdG9taWNT
dHJpbmcocHJvcGVydHlOYW1lKSk7CisgICAgICAgIGlmICghSURMRE9NU3RyaW5nOjppc051bGxW
YWx1ZShpdGVtKSkgeworICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCAwLCB0
b0pTPElETERPTVN0cmluZz4oKnN0YXRlLCBpdGVtKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90
QnlJbmRleCh0aGlzT2JqZWN0LCBzdGF0ZSwgaW5kZXgsIHNsb3QpOworfQorCit2b2lkIEpTVGVz
dE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFt
ZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KG9iamVjdCk7CisgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIGZvciAoYXV0byYg
cHJvcGVydHlOYW1lIDogdGhpc09iamVjdC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFt
ZXMoKSkKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhz
dGF0ZSwgcHJvcGVydHlOYW1lKSk7CisgICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlz
T2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lcywgbW9kZSk7Cit9CisKK2Jvb2wgSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBzdGF0
ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlT
bG90JiBwdXRQcm9wZXJ0eVNsb3QpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworCisgICAgaWYgKCFwcm9wZXJ0eU5h
bWUuaXNTeW1ib2woKSkgeworICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7IHRoaXNPYmplY3Qs
IFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkgfTsKKyAgICAgICAg
SlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3QoKTsKKyAg
ICAgICAgaWYgKCEocHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QocHJvdG90eXBlKS0+
Z2V0UHJvcGVydHlTbG90KHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSkgeworICAgICAgICAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7Cisg
ICAgICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0
ZSwgdmFsdWUpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0
cnVlKTsKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPndyYXBwZWQoKS5uYW1lZFNldHRlcihwcm9w
ZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBC
YXNlOjpwdXQodGhpc09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHB1dFByb3Bl
cnR5U2xvdCk7Cit9CisKK2Jvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6cHV0
QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBK
U1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQoreworICAgIGF1dG8qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcio+KGNlbGwpOworICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKworICAgIElkZW50
aWZpZXIgcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpOworICAg
IFByb3BlcnR5U2xvdCBzbG90IHsgdGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1l
dGhvZFR5cGU6OlZNSW5xdWlyeSB9OworICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09iamVj
dC0+Z2V0UHJvdG90eXBlRGlyZWN0KCk7CisgICAgaWYgKCEocHJvdG90eXBlLmlzT2JqZWN0KCkg
JiYgYXNPYmplY3QocHJvdG90eXBlKS0+Z2V0UHJvcGVydHlTbG90KHN0YXRlLCBwcm9wZXJ0eU5h
bWUsIHNsb3QpKSkgeworICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHN0YXRlLT52bSgpKTsKKyAgICAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURM
RE9NU3RyaW5nPigqc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCB0cnVlKTsKKyAgICAgICAgdGhpc09iamVjdC0+d3JhcHBlZCgpLm5hbWVkU2V0
dGVyKHByb3BlcnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFtZSksIFdURk1vdmUobmF0aXZlVmFs
dWUpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIEJhc2U6OnB1
dEJ5SW5kZXgoY2VsbCwgc3RhdGUsIGluZGV4LCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworfQorCiti
b29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI6OmRlZmluZU93blByb3BlcnR5KEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgcHJvcGVydHlEZXNjcmlwdG9yLCBib29sIHNo
b3VsZFRocm93KQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllcio+KG9iamVjdCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworCisgICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1i
b2woKSkgeworICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7IHRoaXNPYmplY3QsIFByb3BlcnR5
U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkgfTsKKyAgICAgICAgaWYgKCFCYXNl
OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xv
dCkpIHsKKyAgICAgICAgICAgIGlmICghcHJvcGVydHlEZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0
b3IoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKKyAgICAgICAgICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBwcm9wZXJ0
eURlc2NyaXB0b3IudmFsdWUoKSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIHRydWUpOworICAgICAgICAgICAgdGhpc09iamVjdC0+d3JhcHBlZCgpLm5hbWVk
U2V0dGVyKHByb3BlcnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFtZSksIFdURk1vdmUobmF0aXZl
VmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisg
ICAgUHJvcGVydHlEZXNjcmlwdG9yIG5ld1Byb3BlcnR5RGVzY3JpcHRvciA9IHByb3BlcnR5RGVz
Y3JpcHRvcjsKKyAgICBuZXdQcm9wZXJ0eURlc2NyaXB0b3Iuc2V0Q29uZmlndXJhYmxlKHRydWUp
OworICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIHN0YXRlLCBwcm9w
ZXJ0eU5hbWUsIG5ld1Byb3BlcnR5RGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOworfQorCit0ZW1w
bGF0ZTw+IGlubGluZSBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyKiBJRExPcGVyYXRp
b248SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj46OmNhc3QoRXhlY1N0YXRlJiBzdGF0
ZSkKK3sKKyAgICByZXR1cm4ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRo
SWRlbnRpZmllcio+KHN0YXRlLnZtKCksIHN0YXRlLnRoaXNWYWx1ZSgpKTsKK30KKworRW5jb2Rl
ZEpTVmFsdWUganNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorewor
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Rvd25jYXN0
PEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkKKyAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcjo6Z2V0Q29u
c3RydWN0b3Ioc3RhdGUtPnZtKCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKK30KKwor
Ym9vbCBzZXRKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IoRXhlY1N0
YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byogcHJvdG90eXBlID0ganNE
eW5hbWljRG93bmNhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZSo+
KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90
b3R5cGUpKSB7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWlu
IGNvbnN0cnVjdG9yCisgICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHN0YXRlLT52bSgp
LCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyUHJvdG90eXBlRnVuY3Rpb25OYW1lZFNldHRlckJv
ZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMsIEpTQzo6
VGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOworICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOworICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikp
CisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CisgICAgYXV0byBuYW1lID0gY29udmVydDxJ
RExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIGF1
dG8gdmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2Vk
QXJndW1lbnQoMSkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CisgICAgaW1wbC5uYW1lZFNldHRlcihXVEZNb3ZlKG5hbWUpLCBXVEZNb3Zl
KHZhbHVlKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30K
KworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROYW1lZFNldHRlcldpdGhJZGVu
dGlmaWVyUHJvdG90eXBlRnVuY3Rpb25OYW1lZFNldHRlcihFeGVjU3RhdGUqIHN0YXRlKQorewor
ICAgIHJldHVybiBJRExPcGVyYXRpb248SlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj46
OmNhbGw8anNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllclByb3RvdHlwZUZ1bmN0aW9uTmFt
ZWRTZXR0ZXJCb2R5Pigqc3RhdGUsICJuYW1lZFNldHRlciIpOworfQorCitib29sIEpTVGVzdE5h
bWVkU2V0dGVyV2l0aElkZW50aWZpZXJPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMo
SlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKK3sKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKKyAgICBVTlVTRURfUEFSQU0odmlz
aXRvcik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEpTVGVzdE5hbWVkU2V0dGVyV2l0
aElkZW50aWZpZXJPd25lcjo6ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5k
bGUsIHZvaWQqIGNvbnRleHQpCit7CisgICAgYXV0byoganNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRl
bnRpZmllciA9IHN0YXRpY19jYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIqPiho
YW5kbGUuc2xvdCgpLT5hc0NlbGwoKSk7CisgICAgYXV0byYgd29ybGQgPSAqc3RhdGljX2Nhc3Q8
RE9NV3JhcHBlcldvcmxkKj4oY29udGV4dCk7CisgICAgdW5jYWNoZVdyYXBwZXIod29ybGQsICZq
c1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLT53cmFwcGVkKCksIGpzVGVzdE5hbWVkU2V0
dGVyV2l0aElkZW50aWZpZXIpOworfQorCisjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQor
I2lmIFBMQVRGT1JNKFdJTikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NDgzKQorZXh0ZXJu
ICJDIiB7IGV4dGVybiB2b2lkICgqY29uc3QgX19pZGVudGlmaWVyKCI/P183VGVzdE5hbWVkU2V0
dGVyV2l0aElkZW50aWZpZXJAV2ViQ29yZUBANkJAIilbXSkoKTsgfQorI2Vsc2UKK2V4dGVybiAi
QyIgeyBleHRlcm4gdm9pZCogX1pUVk43V2ViQ29yZTI5VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50
aWZpZXJFW107IH0KKyNlbmRpZgorI2VuZGlmCisKK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVh
dGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVm
PFRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyPiYmIGltcGwpCit7CisKKyNpZiBFTkFCTEUo
QklORElOR19JTlRFR1JJVFkpCisgICAgdm9pZCogYWN0dWFsVlRhYmxlUG9pbnRlciA9ICoocmVp
bnRlcnByZXRfY2FzdDx2b2lkKio+KGltcGwucHRyKCkpKTsKKyNpZiBQTEFURk9STShXSU4pCisg
ICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
X19pZGVudGlmaWVyKCI/P183VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJAV2ViQ29yZUBA
NkJAIikpOworI2Vsc2UKKyAgICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSAmX1pUVk43
V2ViQ29yZTI5VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXJFWzJdOworI2lmIENPTVBJTEVS
KENMQU5HKQorICAgIC8vIElmIHRoaXMgZmFpbHMgVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZp
ZXIgZG9lcyBub3QgaGF2ZSBhIHZ0YWJsZSwgc28geW91IG5lZWQgdG8gYWRkIHRoZQorICAgIC8v
IEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUgYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2UgZGVm
aW5pdGlvbgorICAgIHN0YXRpY19hc3NlcnQoX19pc19wb2x5bW9ycGhpYyhUZXN0TmFtZWRTZXR0
ZXJXaXRoSWRlbnRpZmllciksICJUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllciBpcyBub3Qg
cG9seW1vcnBoaWMiKTsKKyNlbmRpZgorI2VuZGlmCisgICAgLy8gSWYgeW91IGhpdCB0aGlzIGFz
c2VydGlvbiB5b3UgZWl0aGVyIGhhdmUgYSB1c2UgYWZ0ZXIgZnJlZSBidWcsIG9yCisgICAgLy8g
VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIgaGFzIHN1YmNsYXNzZXMuIElmIFRlc3ROYW1l
ZFNldHRlcldpdGhJZGVudGlmaWVyIGhhcyBzdWJjbGFzc2VzIHRoYXQgZ2V0IHBhc3NlZAorICAg
IC8vIHRvIHRvSlMoKSB3ZSBjdXJyZW50bHkgcmVxdWlyZSBUZXN0TmFtZWRTZXR0ZXJXaXRoSWRl
bnRpZmllciB5b3UgdG8gb3B0IG91dCBvZiBiaW5kaW5nIGhhcmRlbmluZworICAgIC8vIGJ5IGFk
ZGluZyB0aGUgU2tpcFZUYWJsZVZhbGlkYXRpb24gYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2Ug
SURMIGRlZmluaXRpb24KKyAgICBSRUxFQVNFX0FTU0VSVChhY3R1YWxWVGFibGVQb2ludGVyID09
IGV4cGVjdGVkVlRhYmxlUG9pbnRlcik7CisjZW5kaWYKKyAgICByZXR1cm4gY3JlYXRlV3JhcHBl
cjxUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj4oZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGlt
cGwpKTsKK30KKworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmll
ciYgaW1wbCkKK3sKKyAgICByZXR1cm4gd3JhcChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsK
K30KKworVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIqIEpTVGVzdE5hbWVkU2V0dGVyV2l0
aElkZW50aWZpZXI6OnRvV3JhcHBlZChKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQor
eworICAgIGlmIChhdXRvKiB3cmFwcGVyID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoSWRlbnRpZmllcio+KHZtLCB2YWx1ZSkpCisgICAgICAgIHJldHVybiAmd3JhcHBl
ci0+d3JhcHBlZCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCit9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRl
bnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyLmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0
dGVyV2l0aElkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkzIEBACisvKgor
ICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4K
KyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBs
LiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNET01XcmFw
cGVyLmgiCisjaW5jbHVkZSAiVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIuaCIKKyNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyIDogcHVibGljIEpTRE9NV3JhcHBlcjxU
ZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj4geworcHVibGljOgorICAgIHVzaW5nIEJhc2Ug
PSBKU0RPTVdyYXBwZXI8VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI+OworICAgIHN0YXRp
YyBKU1Rlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyKiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3ROYW1l
ZFNldHRlcldpdGhJZGVudGlmaWVyPiYmIGltcGwpCisgICAgeworICAgICAgICBKU1Rlc3ROYW1l
ZFNldHRlcldpdGhJZGVudGlmaWVyKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVD
ZWxsPEpTVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI+KGdsb2JhbE9iamVjdC0+dm0oKS5o
ZWFwKSkgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcihzdHJ1Y3R1cmUsICpnbG9iYWxP
YmplY3QsIFdURk1vdmUoaW1wbCkpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2Jh
bE9iamVjdC0+dm0oKSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgc3RhdGlj
IEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmpl
Y3QmKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RP
TUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmll
ciogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlBy
b3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgdm9pZCBn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRp
b25Nb2RlKCkpOworICAgIHN0YXRpYyBib29sIHB1dChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNs
b3QmKTsKKyAgICBzdGF0aWMgYm9vbCBwdXRCeUluZGV4KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVj
U3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNWYWx1ZSwgYm9vbCBzaG91bGRU
aHJvdyk7CisgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNDOjpKU09iamVjdCos
IEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIGNvbnN0IEpTQzo6UHJvcGVydHlE
ZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShK
U0M6OkpTQ2VsbCopOworCisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIEpTQzo6U3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
SlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0m
LCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpHZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVy
ZUZvclByb3BlcnR5QWJzZW5jZSB8IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5
SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVy
dHlTbG90IHwgSlNDOjpPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVzIHwgQmFzZTo6U3RydWN0dXJl
RmxhZ3M7Citwcm90ZWN0ZWQ6CisgICAgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcihK
U0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3ROYW1lZFNldHRlcldp
dGhJZGVudGlmaWVyPiYmKTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwor
fTsKKworY2xhc3MgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllck93bmVyIDogcHVibGlj
IEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWFj
aGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29u
dGV4dCwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZShKU0M6
OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KTsKK307CisKK2lubGluZSBKU0M6
OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3JsZCYsIFRlc3ROYW1l
ZFNldHRlcldpdGhJZGVudGlmaWVyKikKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllck93bmVyPiBvd25lcjsKKyAgICByZXR1cm4gJm93
bmVyLmdldCgpOworfQorCitpbmxpbmUgdm9pZCogd3JhcHBlcktleShUZXN0TmFtZWRTZXR0ZXJX
aXRoSWRlbnRpZmllciogd3JhcHBhYmxlT2JqZWN0KQoreworICAgIHJldHVybiB3cmFwcGFibGVP
YmplY3Q7Cit9CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9i
YWxPYmplY3QqLCBUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllciYpOworaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXIqIGltcGwpIHsgcmV0dXJu
IGltcGwgPyB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7
IH0KK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwgSlNET01H
bG9iYWxPYmplY3QqLCBSZWY8VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI+JiYpOworaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3ROYW1lZFNldHRlcldp
dGhJZGVudGlmaWVyPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKHN0
YXRlLCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgp
OyB9CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUZXN0
TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllcj4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpT
VGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI7CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJu
VHlwZSA9IFRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyKjsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucy5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRl
QnVpbHRpbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzA0IEBACisvKgorICAgIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBU
aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBO
T1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1Rlc3ROYW1l
ZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zLmgiCisKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcu
aCIKKyNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgorI2luY2x1
ZGUgIkpTRE9NQ29udmVydC5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIK
KyNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvRnVuY3Rp
b25Qcm90b3R5cGUuaD4KKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQXR0cmlidXRlcworCitKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1
Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKK2Jvb2wgc2V0SlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluc0NvbnN0
cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSk7CisKK2NsYXNzIEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNQ
cm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB1
c2luZyBCYXNlID0gSlNDOjpKU05vbkZpbmFsT2JqZWN0OworICAgIHN0YXRpYyBKU1Rlc3ROYW1l
ZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0s
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCisgICAgeworICAgICAgICBKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5z
UHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE5h
bWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3RO
YW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICBy
ZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1
aWx0aW5zUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0s
IHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6
OlZNJik7Cit9OworCit1c2luZyBKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5z
Q29uc3RydWN0b3IgPSBKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZTxKU1Rlc3ROYW1l
ZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zPjsKKwordGVtcGxhdGU8PiBKU1ZhbHVlIEpTVGVz
dE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9y
U3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBjb25zdCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0KQoreworICAgIFVOVVNFRF9QQVJBTSh2bSk7CisgICAgcmV0dXJuIGdsb2JhbE9iamVjdC5m
dW5jdGlvblByb3RvdHlwZSgpOworfQorCit0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoT3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhW
TSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92
ZXJyaWRlQnVpbHRpbnM6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8
IFJlYWRPbmx5IHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2bSwgU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiVGVz
dE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMiKSkpLCBSZWFkT25seSB8IERvbnRFbnVt
KTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIo
MCksIFJlYWRPbmx5IHwgRG9udEVudW0pOworfQorCit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5m
byBKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3I6OnNfaW5m
byA9IHsgIlRlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zIiwgJkJhc2U6OnNfaW5m
bywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3ROYW1lZFNldHRl
cldpdGhPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3IpIH07CisKKy8qIEhhc2ggdGFibGUgZm9y
IHByb3RvdHlwZSAqLworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0TmFtZWRT
ZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluc1Byb3RvdHlwZVRhYmxlVmFsdWVzW10gPQoreworICAg
IHsgImNvbnN0cnVjdG9yIiwgRG9udEVudW0sIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0
aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0TmFtZWRTZXR0ZXJXaXRo
T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQ
cm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJp
ZGVCdWlsdGluc0NvbnN0cnVjdG9yKSB9IH0sCit9OworCitjb25zdCBDbGFzc0luZm8gSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluc1Byb3RvdHlwZTo6c19pbmZvID0geyAiVGVz
dE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGUiLCAmQmFzZTo6c19pbmZv
LCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE5hbWVkU2V0dGVy
V2l0aE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGUpIH07CisKK3ZvaWQgSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoT3ZlcnJpZGVCdWlsdGluc1Byb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQor
eworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZWlmeVN0YXRpY1Byb3BlcnRp
ZXModm0sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGVUYWJs
ZVZhbHVlcywgKnRoaXMpOworfQorCitjb25zdCBDbGFzc0luZm8gSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoT3ZlcnJpZGVCdWlsdGluczo6c19pbmZvID0geyAiVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJy
aWRlQnVpbHRpbnMiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMpIH07CisKK0pT
VGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnM6OkpTVGVzdE5hbWVkU2V0dGVyV2l0
aE92ZXJyaWRlQnVpbHRpbnMoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucz4m
JiBpbXBsKQorICAgIDogSlNET01XcmFwcGVyPFRlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1
aWx0aW5zPihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSkKK3sKK30KKwor
dm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zOjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VSVChp
bmhlcml0cyh2bSwgaW5mbygpKSk7CisKK30KKworSlNPYmplY3QqIEpTVGVzdE5hbWVkU2V0dGVy
V2l0aE92ZXJyaWRlQnVpbHRpbnM6OmNyZWF0ZVByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIEpTVGVzdE5hbWVkU2V0dGVyV2l0
aE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGU6OmNyZWF0ZSh2bSwgJmdsb2JhbE9iamVjdCwgSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluc1Byb3RvdHlwZTo6Y3JlYXRlU3RydWN0
dXJlKHZtLCAmZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qub2JqZWN0UHJvdG90eXBlKCkpKTsK
K30KKworSlNPYmplY3QqIEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnM6OnBy
b3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAg
cmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0
aW5zPih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKworSlNWYWx1ZSBKU1Rlc3ROYW1lZFNldHRlcldp
dGhPdmVycmlkZUJ1aWx0aW5zOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpT
VGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3Rvcj4odm0sICpqc0Nh
c3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKK30KKwordm9pZCBK
U1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zOjpkZXN0cm95KEpTQzo6SlNDZWxs
KiBjZWxsKQoreworICAgIEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMqIHRo
aXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0
aW5zKj4oY2VsbCk7CisgICAgdGhpc09iamVjdC0+SlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJp
ZGVCdWlsdGluczo6fkpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMoKTsKK30K
KworYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zOjpnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIGF1dG8qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucyo+KG9iamVj
dCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwor
ICAgIGlmICh0aGlzT2JqZWN0LT5jbGFzc0luZm8oKSA9PSBpbmZvKCkgJiYgIXByb3BlcnR5TmFt
ZS5pc1N5bWJvbCgpKSB7CisgICAgICAgIGF1dG8gaXRlbSA9IHRoaXNPYmplY3QtPndyYXBwZWQo
KS5uYW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcocHJvcGVydHlOYW1lKSk7Cisg
ICAgICAgIGlmICghSURMRE9NU3RyaW5nOjppc051bGxWYWx1ZShpdGVtKSkgeworICAgICAgICAg
ICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCAwLCB0b0pTPElETERPTVN0cmluZz4oKnN0YXRl
LCBpdGVtKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBpZiAoQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIHN0YXRlLCBwcm9wZXJ0
eU5hbWUsIHNsb3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluczo6Z2V0T3duUHJv
cGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCB1bnNp
Z25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIGF1dG8qIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucyo+KG9iamVjdCk7
CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAg
IElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgp
OworICAgIGlmICh0aGlzT2JqZWN0LT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpIHsKKyAgICAgICAg
YXV0byBpdGVtID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLm5hbWVkSXRlbShwcm9wZXJ0eU5hbWVU
b0F0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgaWYgKCFJRExET01TdHJpbmc6
OmlzTnVsbFZhbHVlKGl0ZW0pKSB7CisgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmpl
Y3QsIDAsIHRvSlM8SURMRE9NU3RyaW5nPigqc3RhdGUsIGl0ZW0pKTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4KHRoaXNPYmplY3QsIHN0YXRlLCBpbmRleCwgc2xvdCk7Cit9CisKK3Zv
aWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluczo6Z2V0T3duUHJvcGVydHlO
YW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWVBcnJh
eSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zKj4o
b2JqZWN0KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CisgICAgZm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiB0aGlzT2JqZWN0LT53cmFwcGVkKCku
c3VwcG9ydGVkUHJvcGVydHlOYW1lcygpKQorICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICBCYXNlOjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsK
K30KKworYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zOjpwdXQoSlND
ZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHB1dFByb3BlcnR5U2xvdCkKK3sKKyAgICBh
dXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVp
bHRpbnMqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CisKKyAgICBpZiAoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7CisgICAgICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOworICAg
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgdmFs
dWUpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOworICAg
ICAgICB0aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvU3Ry
aW5nKHByb3BlcnR5TmFtZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIEJhc2U6OnB1dCh0aGlzT2JqZWN0LCBzdGF0ZSwg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgcHV0UHJvcGVydHlTbG90KTsKK30KKworYm9vbCBKU1Rlc3RO
YW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zOjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwg
RXhlY1N0YXRlKiBzdGF0ZSwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wpCit7
CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVy
cmlkZUJ1aWx0aW5zKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOworCisgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBJZGVudGlm
aWVyOjpmcm9tKHN0YXRlLCBpbmRleCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
SURMRE9NU3RyaW5nPigqc3RhdGUsIHZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIHRydWUpOworICAgIHRoaXNPYmplY3QtPndyYXBwZWQoKS5zZXROYW1lZEl0ZW0o
cHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkp
OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJy
aWRlQnVpbHRpbnM6OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogc3RhdGUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3Jp
cHRvciYgcHJvcGVydHlEZXNjcmlwdG9yLCBib29sIHNob3VsZFRocm93KQoreworICAgIGF1dG8q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlu
cyo+KG9iamVjdCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOworCisgICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkgeworICAgICAgICBp
ZiAoIXByb3BlcnR5RGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUoc3RhdGUtPnZtKCkpOworICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExE
T01TdHJpbmc+KCpzdGF0ZSwgcHJvcGVydHlEZXNjcmlwdG9yLnZhbHVlKCkpOworICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOworICAgICAgICB0aGlzT2JqZWN0
LT53cmFwcGVkKCkuc2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFt
ZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgUHJvcGVydHlEZXNjcmlwdG9yIG5ld1Byb3BlcnR5RGVzY3JpcHRvciA9IHByb3BlcnR5
RGVzY3JpcHRvcjsKKyAgICBuZXdQcm9wZXJ0eURlc2NyaXB0b3Iuc2V0Q29uZmlndXJhYmxlKHRy
dWUpOworICAgIHJldHVybiBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIHN0YXRlLCBw
cm9wZXJ0eU5hbWUsIG5ld1Byb3BlcnR5RGVzY3JpcHRvciwgc2hvdWxkVGhyb3cpOworfQorCitF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zQ29uc3Ry
dWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5h
bWljRG93bmNhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluc1Byb3RvdHlw
ZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFw
cm90b3R5cGUpKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dT
Y29wZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3ROYW1lZFNldHRlcldpdGhP
dmVycmlkZUJ1aWx0aW5zOjpnZXRDb25zdHJ1Y3RvcihzdGF0ZS0+dm0oKSwgcHJvdG90eXBlLT5n
bG9iYWxPYmplY3QoKSkpOworfQorCitib29sIHNldEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJy
aWRlQnVpbHRpbnNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBz
dGF0ZS0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3ROYW1lZFNl
dHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKKyAgICAgICAgdGhy
b3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKKyAgICByZXR1
cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVz
KCkuY29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKK30KKworYm9v
bCBKU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zT3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CisgICAg
VU5VU0VEX1BBUkFNKHZpc2l0b3IpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBKU1Rl
c3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zT3duZXI6OmZpbmFsaXplKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiBjb250ZXh0KQoreworICAgIGF1dG8qIGpz
VGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RO
YW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkp
OworICAgIGF1dG8mIHdvcmxkID0gKnN0YXRpY19jYXN0PERPTVdyYXBwZXJXb3JsZCo+KGNvbnRl
eHQpOworICAgIHVuY2FjaGVXcmFwcGVyKHdvcmxkLCAmanNUZXN0TmFtZWRTZXR0ZXJXaXRoT3Zl
cnJpZGVCdWlsdGlucy0+d3JhcHBlZCgpLCBqc1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1
aWx0aW5zKTsKK30KKworI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKKyNpZiBQTEFURk9S
TShXSU4pCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDQ4MykKK2V4dGVybiAiQyIgeyBleHRl
cm4gdm9pZCAoKmNvbnN0IF9faWRlbnRpZmllcigiPz9fN1Rlc3ROYW1lZFNldHRlcldpdGhPdmVy
cmlkZUJ1aWx0aW5zQFdlYkNvcmVAQDZCQCIpW10pKCk7IH0KKyNlbHNlCitleHRlcm4gIkMiIHsg
ZXh0ZXJuIHZvaWQqIF9aVFZON1dlYkNvcmUzNVRlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1
aWx0aW5zRVtdOyB9CisjZW5kaWYKKyNlbmRpZgorCitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3Jl
YXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJl
ZjxUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucz4mJiBpbXBsKQoreworCisjaWYg
RU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQorICAgIHZvaWQqIGFjdHVhbFZUYWJsZVBvaW50ZXIg
PSAqKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihpbXBsLnB0cigpKSk7CisjaWYgUExBVEZPUk0o
V0lOKQorICAgIHZvaWQqIGV4cGVjdGVkVlRhYmxlUG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KF9faWRlbnRpZmllcigiPz9fN1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0
aW5zQFdlYkNvcmVAQDZCQCIpKTsKKyNlbHNlCisgICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2lu
dGVyID0gJl9aVFZON1dlYkNvcmUzNVRlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5z
RVsyXTsKKyNpZiBDT01QSUxFUihDTEFORykKKyAgICAvLyBJZiB0aGlzIGZhaWxzIFRlc3ROYW1l
ZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zIGRvZXMgbm90IGhhdmUgYSB2dGFibGUsIHNvIHlv
dSBuZWVkIHRvIGFkZCB0aGUKKyAgICAvLyBJbXBsZW1lbnRhdGlvbkxhY2tzVlRhYmxlIGF0dHJp
YnV0ZSB0byB0aGUgaW50ZXJmYWNlIGRlZmluaXRpb24KKyAgICBzdGF0aWNfYXNzZXJ0KF9faXNf
cG9seW1vcnBoaWMoVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMpLCAiVGVzdE5h
bWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMgaXMgbm90IHBvbHltb3JwaGljIik7CisjZW5k
aWYKKyNlbmRpZgorICAgIC8vIElmIHlvdSBoaXQgdGhpcyBhc3NlcnRpb24geW91IGVpdGhlciBo
YXZlIGEgdXNlIGFmdGVyIGZyZWUgYnVnLCBvcgorICAgIC8vIFRlc3ROYW1lZFNldHRlcldpdGhP
dmVycmlkZUJ1aWx0aW5zIGhhcyBzdWJjbGFzc2VzLiBJZiBUZXN0TmFtZWRTZXR0ZXJXaXRoT3Zl
cnJpZGVCdWlsdGlucyBoYXMgc3ViY2xhc3NlcyB0aGF0IGdldCBwYXNzZWQKKyAgICAvLyB0byB0
b0pTKCkgd2UgY3VycmVudGx5IHJlcXVpcmUgVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVp
bHRpbnMgeW91IHRvIG9wdCBvdXQgb2YgYmluZGluZyBoYXJkZW5pbmcKKyAgICAvLyBieSBhZGRp
bmcgdGhlIFNraXBWVGFibGVWYWxpZGF0aW9uIGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJmYWNlIElE
TCBkZWZpbml0aW9uCisgICAgUkVMRUFTRV9BU1NFUlQoYWN0dWFsVlRhYmxlUG9pbnRlciA9PSBl
eHBlY3RlZFZUYWJsZVBvaW50ZXIpOworI2VuZGlmCisgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXI8
VGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnM+KGdsb2JhbE9iamVjdCwgV1RGTW92
ZShpbXBsKSk7Cit9CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJy
aWRlQnVpbHRpbnMmIGltcGwpCit7CisgICAgcmV0dXJuIHdyYXAoc3RhdGUsIGdsb2JhbE9iamVj
dCwgaW1wbCk7Cit9CisKK1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zKiBKU1Rl
c3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zOjp0b1dyYXBwZWQoSlNDOjpWTSYgdm0s
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAoYXV0byogd3JhcHBlciA9IGpzRHluYW1p
Y0Rvd25jYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMqPih2bSwgdmFs
dWUpKQorICAgICAgICByZXR1cm4gJndyYXBwZXItPndyYXBwZWQoKTsKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1
aWx0aW5zLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAgICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBm
aWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1P
RElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgorI2lu
Y2x1ZGUgIlRlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zLmgiCisjaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucyA6IHB1YmxpYyBKU0RPTVdyYXBwZXI8
VGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnM+IHsKK3B1YmxpYzoKKyAgICB1c2lu
ZyBCYXNlID0gSlNET01XcmFwcGVyPFRlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5z
PjsKKyAgICBzdGF0aWMgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucyogY3Jl
YXRlKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucz4mJiBpbXBsKQor
ICAgIHsKKyAgICAgICAgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucyogcHRy
ID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3ROYW1lZFNldHRlcldpdGhP
dmVycmlkZUJ1aWx0aW5zPihnbG9iYWxPYmplY3QtPnZtKCkuaGVhcCkpIEpTVGVzdE5hbWVkU2V0
dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMoc3RydWN0dXJlLCAqZ2xvYmFsT2JqZWN0LCBXVEZNb3Zl
KGltcGwpKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkp
OworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0
KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CisgICAgc3Rh
dGljIEpTQzo6SlNPYmplY3QqIHByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3Qm
KTsKKyAgICBzdGF0aWMgVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMqIHRvV3Jh
cHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5h
bWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIHZvaWQgZ2V0T3duUHJv
cGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5
TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgp
KTsKKyAgICBzdGF0aWMgYm9vbCBwdXQoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0UHJvcGVydHlTbG90Jik7Cisg
ICAgc3RhdGljIGJvb2wgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwor
ICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBjb25zdCBKU0M6OlByb3BlcnR5RGVzY3JpcHRv
ciYsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0Nl
bGwqKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlND
OjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlw
ZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQor
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3Qg
SlNDOjpKU0dsb2JhbE9iamVjdCopOworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6R2V0T3duUHJvcGVydHlTbG90SXNJbXB1cmUgfCBKU0M6
OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFpl
cm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3ZlcnJpZGVzR2V0
UHJvcGVydHlOYW1lcyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworcHJvdGVjdGVkOgorICAgIEpT
VGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RP
TUdsb2JhbE9iamVjdCYsIFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucz4m
Jik7CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK2NsYXNzIEpT
VGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNPd25lciA6IHB1YmxpYyBKU0M6Oldl
YWtIYW5kbGVPd25lciB7CitwdWJsaWM6CisgICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJv
bU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpT
Qzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8
SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCk7Cit9OworCitpbmxpbmUgSlNDOjpXZWFrSGFu
ZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmLCBUZXN0TmFtZWRTZXR0ZXJX
aXRoT3ZlcnJpZGVCdWlsdGlucyopCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEpTVGVz
dE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnNPd25lcj4gb3duZXI7CisgICAgcmV0dXJu
ICZvd25lci5nZXQoKTsKK30KKworaW5saW5lIHZvaWQqIHdyYXBwZXJLZXkoVGVzdE5hbWVkU2V0
dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMqIHdyYXBwYWJsZU9iamVjdCkKK3sKKyAgICByZXR1cm4g
d3JhcHBhYmxlT2JqZWN0OworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSos
IEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMm
KTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1
aWx0aW5zKiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAq
aW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChK
U0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFRlc3ROYW1lZFNldHRlcldp
dGhPdmVycmlkZUJ1aWx0aW5zPiYmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3Jl
YXRlZChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFJlZlB0cjxUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucz4mJiBpbXBsKSB7
IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbXBs
LnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQorCit0ZW1wbGF0ZTw+IHN0cnVj
dCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRl
QnVpbHRpbnM+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU1Rlc3ROYW1lZFNldHRlcldp
dGhPdmVycmlkZUJ1aWx0aW5zOworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBUZXN0
TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGlucyo7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRl
cldpdGhVbmZvcmdhYmxlUHJvcGVydGllcy5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9y
Z2FibGVQcm9wZXJ0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5MCBAQAorLyoK
KyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
CisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMuaCIKKworI2luY2x1ZGUgIkpT
RE9NQXR0cmlidXRlLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNE
T01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnQu
aCIKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCisjaW5jbHVkZSAiSlNET01P
cGVyYXRpb24uaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgPHJ1
bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRnVuY3Rpb25z
CisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3ROYW1lZFNldHRlcldp
dGhVbmZvcmdhYmxlUHJvcGVydGllc0luc3RhbmNlRnVuY3Rpb25VbmZvcmdlYWJsZU9wZXJhdGlv
bihKU0M6OkV4ZWNTdGF0ZSopOworCisvLyBBdHRyaWJ1dGVzCisKK0pTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNDb25zdHJ1Y3RvcihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
K2Jvb2wgc2V0SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNDb25zdHJ1
Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpT
VmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdh
YmxlUHJvcGVydGllc1VuZm9yZ2VhYmxlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworCitjbGFzcyBKU1Rlc3ROYW1lZFNl
dHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc1Byb3RvdHlwZSA6IHB1YmxpYyBKU0M6OkpTTm9u
RmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0M6OkpTTm9uRmluYWxP
YmplY3Q7CisgICAgc3RhdGljIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0
aWVzUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1Rl
c3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc1Byb3RvdHlwZSogcHRyID0gbmV3
IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdh
YmxlUHJvcGVydGllc1Byb3RvdHlwZT4odm0uaGVhcCkpIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVu
Zm9yZ2FibGVQcm9wZXJ0aWVzUHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7
CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gcHRyOwor
ICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJ
bmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc1By
b3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCisgICAgICAgIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1
cmUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwor
fTsKKwordXNpbmcgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNDb25z
dHJ1Y3RvciA9IEpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpTVGVzdE5hbWVkU2V0
dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzPjsKKworLyogSGFzaCB0YWJsZSAqLworCitzdGF0
aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5m
b3JnYWJsZVByb3BlcnRpZXNUYWJsZUluZGV4WzRdID0geworICAgIHsgLTEsIC0xIH0sCisgICAg
eyAxLCAtMSB9LAorICAgIHsgLTEsIC0xIH0sCisgICAgeyAwLCAtMSB9LAorfTsKKworCitzdGF0
aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVBy
b3BlcnRpZXNUYWJsZVZhbHVlc1tdID0KK3sKKyAgICB7ICJ1bmZvcmdlYWJsZUF0dHJpYnV0ZSIs
IERvbnREZWxldGUgfCBSZWFkT25seSB8IEN1c3RvbUFjY2Vzc29yLCBOb0ludHJpbnNpYywgeyAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE5h
bWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzVW5mb3JnZWFibGVBdHRyaWJ1dGUpLCAo
aW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPigwKSB9
IH0sCisgICAgeyAidW5mb3JnZWFibGVPcGVyYXRpb24iLCBEb250RGVsZXRlIHwgUmVhZE9ubHkg
fCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0
aXZlRnVuY3Rpb24+KGpzVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzSW5z
dGFuY2VGdW5jdGlvblVuZm9yZ2VhYmxlT3BlcmF0aW9uKSwgKGludHB0cl90KSAoMCkgfSB9LAor
fTsKKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZSBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdh
YmxlUHJvcGVydGllc1RhYmxlID0geyAyLCAzLCB0cnVlLCBKU1Rlc3ROYW1lZFNldHRlcldpdGhV
bmZvcmdhYmxlUHJvcGVydGllc1RhYmxlVmFsdWVzLCBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZv
cmdhYmxlUHJvcGVydGllc1RhYmxlSW5kZXggfTsKK3RlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3RO
YW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0NvbnN0cnVjdG9yOjpwcm90b3R5cGVG
b3JTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICByZXR1cm4gZ2xvYmFsT2JqZWN0
LmZ1bmN0aW9uUHJvdG90eXBlKCk7Cit9CisKK3RlbXBsYXRlPD4gdm9pZCBKU1Rlc3ROYW1lZFNl
dHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0NvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVy
dGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTVGVzdE5hbWVkU2V0dGVy
V2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERv
bnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZyhBU0NJSUxp
dGVyYWwoIlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcyIpKSksIFJlYWRP
bmx5IHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVu
Z3RoLCBqc051bWJlcigwKSwgUmVhZE9ubHkgfCBEb250RW51bSk7Cit9CisKK3RlbXBsYXRlPD4g
Y29uc3QgQ2xhc3NJbmZvIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVz
Q29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJv
cGVydGllcyIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNDb25zdHJ1Y3Rv
cikgfTsKKworLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovCisKK3N0YXRpYyBjb25zdCBI
YXNoVGFibGVWYWx1ZSBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc1By
b3RvdHlwZVRhYmxlVmFsdWVzW10gPQoreworICAgIHsgImNvbnN0cnVjdG9yIiwgRG9udEVudW0s
IE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZh
bHVlRnVuYz4oanNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNDb25zdHJ1
Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1
bmM+KHNldEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQ29uc3RydWN0
b3IpIH0gfSwKK307CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZv
cmdhYmxlUHJvcGVydGllc1Byb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdE5hbWVkU2V0dGVyV2l0
aFVuZm9yZ2FibGVQcm9wZXJ0aWVzUHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwg
bnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdh
YmxlUHJvcGVydGllc1Byb3RvdHlwZSkgfTsKKwordm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhV
bmZvcmdhYmxlUHJvcGVydGllc1Byb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQorewor
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXMo
dm0sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzUHJvdG90eXBlVGFi
bGVWYWx1ZXMsICp0aGlzKTsKK30KKworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE5hbWVkU2V0dGVy
V2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzOjpzX2luZm8gPSB7ICJUZXN0TmFtZWRTZXR0ZXJXaXRo
VW5mb3JnYWJsZVByb3BlcnRpZXMiLCAmQmFzZTo6c19pbmZvLCAmSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoVW5mb3JnYWJsZVByb3BlcnRpZXNUYWJsZSwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcykgfTsKKworSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM6OkpTVGVzdE5hbWVkU2V0dGVyV2l0
aFVuZm9yZ2FibGVQcm9wZXJ0aWVzKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9w
ZXJ0aWVzPiYmIGltcGwpCisgICAgOiBKU0RPTVdyYXBwZXI8VGVzdE5hbWVkU2V0dGVyV2l0aFVu
Zm9yZ2FibGVQcm9wZXJ0aWVzPihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBs
KSkKK3sKK30KKwordm9pZCBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGll
czo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
KTsKKyAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOworCit9CisKK0pTT2JqZWN0KiBK
U1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllczo6Y3JlYXRlUHJvdG90eXBl
KFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4g
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNQcm90b3R5cGU6OmNyZWF0
ZSh2bSwgJmdsb2JhbE9iamVjdCwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3Bl
cnRpZXNQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgJmdsb2JhbE9iamVjdCwgZ2xvYmFs
T2JqZWN0Lm9iamVjdFByb3RvdHlwZSgpKSk7Cit9CisKK0pTT2JqZWN0KiBKU1Rlc3ROYW1lZFNl
dHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllczo6cHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpT
VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzPih2bSwgZ2xvYmFsT2JqZWN0
KTsKK30KKworSlNWYWx1ZSBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGll
czo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQoreworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3ROYW1lZFNldHRlcldp
dGhVbmZvcmdhYmxlUHJvcGVydGllc0NvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RP
TUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOworfQorCit2b2lkIEpTVGVzdE5hbWVkU2V0
dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQor
eworICAgIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzKiB0aGlzT2Jq
ZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRp
ZXMqPihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT5KU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdh
YmxlUHJvcGVydGllczo6fkpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVz
KCk7Cit9CisKK2Jvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM6
OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIHN0YXRlLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJv
cGVydGllcyo+KG9iamVjdCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOworICAgIGlmIChCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVj
dCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IEpTVmFsdWUgcHJvdG8gPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3QoKTsKKyAgICBp
ZiAocHJvdG8uaXNPYmplY3QoKSAmJiBqc0Nhc3Q8SlNPYmplY3QqPihwcm90byktPmhhc1Byb3Bl
cnR5KHN0YXRlLCBwcm9wZXJ0eU5hbWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAodGhpc09iamVjdC0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpICYmICFwcm9wZXJ0eU5hbWUuaXNT
eW1ib2woKSkgeworICAgICAgICBhdXRvIGl0ZW0gPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkubmFt
ZWRJdGVtKHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZSkpOworICAgICAg
ICBpZiAoIUlETERPTVN0cmluZzo6aXNOdWxsVmFsdWUoaXRlbSkpIHsKKyAgICAgICAgICAgIHNs
b3Quc2V0VmFsdWUodGhpc09iamVjdCwgMCwgdG9KUzxJRExET01TdHJpbmc+KCpzdGF0ZSwgaXRl
bSkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9w
ZXJ0aWVzOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogc3RhdGUsIHVuc2lnbmVkIGluZGV4LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxl
UHJvcGVydGllcyo+KG9iamVjdCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOworICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gSWRlbnRpZmll
cjo6ZnJvbShzdGF0ZSwgaW5kZXgpOworICAgIGlmICh0aGlzT2JqZWN0LT5jbGFzc0luZm8oKSA9
PSBpbmZvKCkpIHsKKyAgICAgICAgYXV0byBpdGVtID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLm5h
bWVkSXRlbShwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUpKTsKKyAgICAg
ICAgaWYgKCFJRExET01TdHJpbmc6OmlzTnVsbFZhbHVlKGl0ZW0pKSB7CisgICAgICAgICAgICBz
bG90LnNldFZhbHVlKHRoaXNPYmplY3QsIDAsIHRvSlM8SURMRE9NU3RyaW5nPigqc3RhdGUsIGl0
ZW0pKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJl
dHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRoaXNPYmplY3QsIHN0YXRlLCBp
bmRleCwgc2xvdCk7Cit9CisKK3ZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVBy
b3BlcnRpZXM6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBzdGF0ZSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9k
ZSBtb2RlKQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0
ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMqPihvYmplY3QpOworICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBmb3IgKGF1dG8mIHByb3BlcnR5
TmFtZSA6IHRoaXNPYmplY3QtPndyYXBwZWQoKS5zdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkpCisg
ICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcoc3RhdGUsIHBy
b3BlcnR5TmFtZSkpOworICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVjdCwg
c3RhdGUsIHByb3BlcnR5TmFtZXMsIG1vZGUpOworfQorCitib29sIEpTVGVzdE5hbWVkU2V0dGVy
V2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIHN0
YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0
eVNsb3QmIHB1dFByb3BlcnR5U2xvdCkKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzKj4oY2VsbCk7CisgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworCisgICAgaWYg
KCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkgeworICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCB7
IHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkg
fTsKKyAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB0aGlzT2JqZWN0LT5nZXRQcm90b3R5cGVE
aXJlY3QoKTsKKyAgICAgICAgaWYgKCEocHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmplY3Qo
cHJvdG90eXBlKS0+Z2V0UHJvcGVydHlTbG90KHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSkg
eworICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0
ZS0+dm0oKSk7CisgICAgICAgICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxJRExET01T
dHJpbmc+KCpzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCB0cnVlKTsKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPndyYXBwZWQoKS5zZXRO
YW1lZEl0ZW0ocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgV1RGTW92ZShuYXRp
dmVWYWx1ZSkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gQmFzZTo6cHV0KHRoaXNPYmplY3QsIHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBwdXRQcm9wZXJ0eVNsb3QpOworfQorCitib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVu
Zm9yZ2FibGVQcm9wZXJ0aWVzOjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBz
dGF0ZSwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCit7
CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZv
cmdhYmxlUHJvcGVydGllcyo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKKworICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gSWRl
bnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpOworICAgIFByb3BlcnR5U2xvdCBzbG90IHsgdGhp
c09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSB9Owor
ICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGhpc09iamVjdC0+Z2V0UHJvdG90eXBlRGlyZWN0KCk7
CisgICAgaWYgKCEocHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QocHJvdG90eXBlKS0+
Z2V0UHJvcGVydHlTbG90KHN0YXRlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSkgeworICAgICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKKyAgICAg
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHZhbHVl
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKKyAgICAg
ICAgdGhpc09iamVjdC0+d3JhcHBlZCgpLnNldE5hbWVkSXRlbShwcm9wZXJ0eU5hbWVUb1N0cmlu
Zyhwcm9wZXJ0eU5hbWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIHJldHVybiBCYXNlOjpwdXRCeUluZGV4KGNlbGwsIHN0YXRlLCBp
bmRleCwgdmFsdWUsIHNob3VsZFRocm93KTsKK30KKworYm9vbCBKU1Rlc3ROYW1lZFNldHRlcldp
dGhVbmZvcmdhYmxlUHJvcGVydGllczo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgUHJv
cGVydHlEZXNjcmlwdG9yJiBwcm9wZXJ0eURlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhyb3cpCit7
CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZv
cmdhYmxlUHJvcGVydGllcyo+KG9iamVjdCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOworCisgICAgaWYgKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2wo
KSkgeworc3RhdGljIGJvb2wgaXNVbmZvcmdlYWJsZVByb3BlcnR5TmFtZShQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBwcm9wZXJ0eU5hbWUgPT0gInVuZm9yZ2VhYmxl
QXR0cmlidXRlIiB8fCBwcm9wZXJ0eU5hbWUgPT0gInVuZm9yZ2VhYmxlT3BlcmF0aW9uIjsKK30K
KworICAgICAgICBpZiAoIWlzVW5mb3JnZWFibGVQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lKSkg
eworICAgICAgICAgICAgUHJvcGVydHlTbG90IHNsb3QgeyB0aGlzT2JqZWN0LCBQcm9wZXJ0eVNs
b3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5IH07CisgICAgICAgICAgICBpZiAoIUJh
c2U6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBz
bG90KSkgeworICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHlEZXNjcmlwdG9yLmlzRGF0YURl
c2NyaXB0b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkp
OworICAgICAgICAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmlu
Zz4oKnN0YXRlLCBwcm9wZXJ0eURlc2NyaXB0b3IudmFsdWUoKSk7CisgICAgICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB0cnVlKTsKKyAgICAgICAgICAgICAgICB0
aGlzT2JqZWN0LT53cmFwcGVkKCkuc2V0TmFtZWRJdGVtKHByb3BlcnR5TmFtZVRvU3RyaW5nKHBy
b3BlcnR5TmFtZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIFByb3BlcnR5
RGVzY3JpcHRvciBuZXdQcm9wZXJ0eURlc2NyaXB0b3IgPSBwcm9wZXJ0eURlc2NyaXB0b3I7Cisg
ICAgbmV3UHJvcGVydHlEZXNjcmlwdG9yLnNldENvbmZpZ3VyYWJsZSh0cnVlKTsKKyAgICByZXR1
cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBu
ZXdQcm9wZXJ0eURlc2NyaXB0b3IsIHNob3VsZFRocm93KTsKK30KKwordGVtcGxhdGU8PiBpbmxp
bmUgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMqIElETEF0dHJpYnV0
ZTxKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcz46OmNhc3QoRXhlY1N0
YXRlJiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlKQoreworICAgIHJldHVybiBqc0R5
bmFtaWNEb3duY2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcyo+
KHN0YXRlLnZtKCksIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKK30KKwordGVtcGxhdGU8
PiBpbmxpbmUgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMqIElETE9w
ZXJhdGlvbjxKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcz46OmNhc3Qo
RXhlY1N0YXRlJiBzdGF0ZSkKK3sKKyAgICByZXR1cm4ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0
TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMqPihzdGF0ZS52bSgpLCBzdGF0ZS50
aGlzVmFsdWUoKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVkU2V0dGVyV2l0aFVu
Zm9yZ2FibGVQcm9wZXJ0aWVzQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUtPnZt
KCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
YXV0byogcHJvdG90eXBlID0ganNEeW5hbWljRG93bmNhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRo
VW5mb3JnYWJsZVByb3BlcnRpZXNQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM6OmdldENvbnN0
cnVjdG9yKHN0YXRlLT52bSgpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7Cit9CisKK2Jv
b2wgc2V0SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5
cGUgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJv
cGVydGllc1Byb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAg
aWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3Ioc3Rh
dGUsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8vIFNo
YWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCisgICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0
RGlyZWN0KHN0YXRlLT52bSgpLCBzdGF0ZS0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1
ZSBqc1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc1VuZm9yZ2VhYmxlQXR0
cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9y
Z2FibGVQcm9wZXJ0aWVzJiB0aGlzT2JqZWN0LCBUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQorewor
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwor
ICAgIGF1dG8mIGltcGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IHRvSlM8SURMRE9NU3RyaW5nPihzdGF0ZSwgaW1wbC51bmZvcmdlYWJsZUF0dHJpYnV0ZSgp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3ROYW1lZFNl
dHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc1VuZm9yZ2VhYmxlQXR0cmlidXRlKEV4ZWNTdGF0
ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAg
IHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3Bl
cnRpZXM+OjpnZXQ8anNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNVbmZv
cmdlYWJsZUF0dHJpYnV0ZUdldHRlcj4oKnN0YXRlLCB0aGlzVmFsdWUsICJ1bmZvcmdlYWJsZUF0
dHJpYnV0ZSIpOworfQorCitzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0
TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNJbnN0YW5jZUZ1bmN0aW9uVW5mb3Jn
ZWFibGVPcGVyYXRpb25Cb2R5KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgdHlwZW5hbWUgSURMT3Bl
cmF0aW9uPEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzPjo6Q2xhc3NQ
YXJhbWV0ZXIgY2FzdGVkVGhpcywgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgaW1wbC51bmZvcmdlYWJs
ZU9wZXJhdGlvbigpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0TmFtZWRTZXR0ZXJXaXRo
VW5mb3JnYWJsZVByb3BlcnRpZXNJbnN0YW5jZUZ1bmN0aW9uVW5mb3JnZWFibGVPcGVyYXRpb24o
RXhlY1N0YXRlKiBzdGF0ZSkKK3sKKyAgICByZXR1cm4gSURMT3BlcmF0aW9uPEpTVGVzdE5hbWVk
U2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzPjo6Y2FsbDxqc1Rlc3ROYW1lZFNldHRlcldp
dGhVbmZvcmdhYmxlUHJvcGVydGllc0luc3RhbmNlRnVuY3Rpb25VbmZvcmdlYWJsZU9wZXJhdGlv
bkJvZHk+KCpzdGF0ZSwgInVuZm9yZ2VhYmxlT3BlcmF0aW9uIik7Cit9CisKK2Jvb2wgSlNUZXN0
TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNPd25lcjo6aXNSZWFjaGFibGVGcm9t
T3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlKTsKKyAgICBVTlVT
RURfUEFSQU0odmlzaXRvcik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEpTVGVzdE5h
bWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzT3duZXI6OmZpbmFsaXplKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiBjb250ZXh0KQoreworICAgIGF1dG8qIGpz
VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzID0gc3RhdGljX2Nhc3Q8SlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMqPihoYW5kbGUuc2xvdCgpLT5h
c0NlbGwoKSk7CisgICAgYXV0byYgd29ybGQgPSAqc3RhdGljX2Nhc3Q8RE9NV3JhcHBlcldvcmxk
Kj4oY29udGV4dCk7CisgICAgdW5jYWNoZVdyYXBwZXIod29ybGQsICZqc1Rlc3ROYW1lZFNldHRl
cldpdGhVbmZvcmdhYmxlUHJvcGVydGllcy0+d3JhcHBlZCgpLCBqc1Rlc3ROYW1lZFNldHRlcldp
dGhVbmZvcmdhYmxlUHJvcGVydGllcyk7Cit9CisKKyNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJ
VFkpCisjaWYgUExBVEZPUk0oV0lOKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ0ODMpCitl
eHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQgKCpjb25zdCBfX2lkZW50aWZpZXIoIj8/XzdUZXN0TmFt
ZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNAV2ViQ29yZUBANkJAIilbXSkoKTsgfQor
I2Vsc2UKK2V4dGVybiAiQyIgeyBleHRlcm4gdm9pZCogX1pUVk43V2ViQ29yZTM5VGVzdE5hbWVk
U2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzRVtdOyB9CisjZW5kaWYKKyNlbmRpZgorCitK
U0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVBy
b3BlcnRpZXM+JiYgaW1wbCkKK3sKKworI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKKyAg
ICB2b2lkKiBhY3R1YWxWVGFibGVQb2ludGVyID0gKihyZWludGVycHJldF9jYXN0PHZvaWQqKj4o
aW1wbC5wdHIoKSkpOworI2lmIFBMQVRGT1JNKFdJTikKKyAgICB2b2lkKiBleHBlY3RlZFZUYWJs
ZVBvaW50ZXIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihfX2lkZW50aWZpZXIoIj8/XzdUZXN0
TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNAV2ViQ29yZUBANkJAIikpOworI2Vs
c2UKKyAgICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSAmX1pUVk43V2ViQ29yZTM5VGVz
dE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzRVsyXTsKKyNpZiBDT01QSUxFUihD
TEFORykKKyAgICAvLyBJZiB0aGlzIGZhaWxzIFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxl
UHJvcGVydGllcyBkb2VzIG5vdCBoYXZlIGEgdnRhYmxlLCBzbyB5b3UgbmVlZCB0byBhZGQgdGhl
CisgICAgLy8gSW1wbGVtZW50YXRpb25MYWNrc1ZUYWJsZSBhdHRyaWJ1dGUgdG8gdGhlIGludGVy
ZmFjZSBkZWZpbml0aW9uCisgICAgc3RhdGljX2Fzc2VydChfX2lzX3BvbHltb3JwaGljKFRlc3RO
YW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcyksICJUZXN0TmFtZWRTZXR0ZXJXaXRo
VW5mb3JnYWJsZVByb3BlcnRpZXMgaXMgbm90IHBvbHltb3JwaGljIik7CisjZW5kaWYKKyNlbmRp
ZgorICAgIC8vIElmIHlvdSBoaXQgdGhpcyBhc3NlcnRpb24geW91IGVpdGhlciBoYXZlIGEgdXNl
IGFmdGVyIGZyZWUgYnVnLCBvcgorICAgIC8vIFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxl
UHJvcGVydGllcyBoYXMgc3ViY2xhc3Nlcy4gSWYgVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2Fi
bGVQcm9wZXJ0aWVzIGhhcyBzdWJjbGFzc2VzIHRoYXQgZ2V0IHBhc3NlZAorICAgIC8vIHRvIHRv
SlMoKSB3ZSBjdXJyZW50bHkgcmVxdWlyZSBUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVBy
b3BlcnRpZXMgeW91IHRvIG9wdCBvdXQgb2YgYmluZGluZyBoYXJkZW5pbmcKKyAgICAvLyBieSBh
ZGRpbmcgdGhlIFNraXBWVGFibGVWYWxpZGF0aW9uIGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJmYWNl
IElETCBkZWZpbml0aW9uCisgICAgUkVMRUFTRV9BU1NFUlQoYWN0dWFsVlRhYmxlUG9pbnRlciA9
PSBleHBlY3RlZFZUYWJsZVBvaW50ZXIpOworI2VuZGlmCisgICAgcmV0dXJuIGNyZWF0ZVdyYXBw
ZXI8VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzPihnbG9iYWxPYmplY3Qs
IFdURk1vdmUoaW1wbCkpOworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3ROYW1lZFNldHRlcldp
dGhVbmZvcmdhYmxlUHJvcGVydGllcyYgaW1wbCkKK3sKKyAgICByZXR1cm4gd3JhcChzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCBpbXBsKTsKK30KKworVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQ
cm9wZXJ0aWVzKiBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllczo6dG9X
cmFwcGVkKEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKGF1dG8q
IHdyYXBwZXIgPSBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdh
YmxlUHJvcGVydGllcyo+KHZtLCB2YWx1ZSkpCisgICAgICAgIHJldHVybiAmd3JhcHBlci0+d3Jh
cHBlZCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJs
ZVByb3BlcnRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDkzIEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVk
IGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiVGVzdE5hbWVkU2V0dGVy
V2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzLmgiCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
VW5mb3JnYWJsZVByb3BlcnRpZXMgOiBwdWJsaWMgSlNET01XcmFwcGVyPFRlc3ROYW1lZFNldHRl
cldpdGhVbmZvcmdhYmxlUHJvcGVydGllcz4geworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBK
U0RPTVdyYXBwZXI8VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzPjsKKyAg
ICBzdGF0aWMgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMqIGNyZWF0
ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBSZWY8VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzPiYmIGltcGwp
CisgICAgeworICAgICAgICBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGll
cyogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3ROYW1lZFNldHRl
cldpdGhVbmZvcmdhYmxlUHJvcGVydGllcz4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBKU1Rl
c3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcyhzdHJ1Y3R1cmUsICpnbG9iYWxP
YmplY3QsIFdURk1vdmUoaW1wbCkpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2Jh
bE9iamVjdC0+dm0oKSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgc3RhdGlj
IEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmpl
Y3QmKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RP
TUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJs
ZVByb3BlcnRpZXMqIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKKyAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3Rh
dGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgc3Rh
dGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6
OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICBzdGF0aWMgYm9vbCBwdXQoSlNDOjpKU0NlbGwqLCBK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIEpTQzo6UHV0
UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgcHV0QnlJbmRleChKU0M6OkpTQ2VsbCos
IEpTQzo6RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OkpTVmFsdWUsIGJv
b2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTQzo6
SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBjb25zdCBKU0M6
OlByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIHN0YXRpYyB2b2lk
IGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRp
YyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgewor
ICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3Rv
cihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOworcHVibGljOgorICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEpTQzo6R2V0T3duUHJvcGVydHlT
bG90SXNJbXB1cmVGb3JQcm9wZXJ0eUFic2VuY2UgfCBKU0M6Okhhc1N0YXRpY1Byb3BlcnR5VGFi
bGUgfCBKU0M6OkludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5n
dGhJc05vdFplcm8gfCBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6T3Zl
cnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworcHJvdGVjdGVk
OgorICAgIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzKEpTQzo6U3Ry
dWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9y
Z2FibGVQcm9wZXJ0aWVzPiYmKTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYp
OworfTsKKworY2xhc3MgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNP
d25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CitwdWJsaWM6CisgICAgdmlydHVh
bCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93
bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCk7Cit9Owor
CitpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29y
bGQmLCBUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMqKQoreworICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVy
dGllc093bmVyPiBvd25lcjsKKyAgICByZXR1cm4gJm93bmVyLmdldCgpOworfQorCitpbmxpbmUg
dm9pZCogd3JhcHBlcktleShUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMq
IHdyYXBwYWJsZU9iamVjdCkKK3sKKyAgICByZXR1cm4gd3JhcHBhYmxlT2JqZWN0OworfQorCitK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVz
dE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzJik7CitpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMqIGltcGwpIHsg
cmV0dXJuIGltcGwgPyB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNO
dWxsKCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlKiwg
SlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9w
ZXJ0aWVzPiYmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxU
ZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM+JiYgaW1wbCkgeyByZXR1cm4g
aW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNl
Tm9uTnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01X
cmFwcGVyQ29udmVydGVyVHJhaXRzPFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVy
dGllcz4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVu
Zm9yZ2FibGVQcm9wZXJ0aWVzOworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBUZXN0
TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXMqOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWls
dGlucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJp
ZGVCdWlsdGlucy5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVz
QW5kT3ZlcnJpZGVCdWlsdGlucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNzMgQEAK
Ky8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWls
dGlucy5oIgorCisjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgor
I2luY2x1ZGUgIkpTRE9NQ29udmVydC5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxp
bmcuaCIKKyNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBl
ckNhY2hlLmgiCisjaW5jbHVkZSA8cnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5oPgorI2luY2x1
ZGUgPHd0Zi9HZXRQdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCisvLyBGdW5jdGlvbnMKKworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVC
dWlsdGluc0luc3RhbmNlRnVuY3Rpb25VbmZvcmdlYWJsZU9wZXJhdGlvbihKU0M6OkV4ZWNTdGF0
ZSopOworCisvLyBBdHRyaWJ1dGVzCisKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRT
ZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0
b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7Citib29sIHNldEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5k
T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluc1Vu
Zm9yZ2VhYmxlQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOworCitjbGFzcyBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdh
YmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpK
U05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNDOjpKU05vbkZp
bmFsT2JqZWN0OworICAgIHN0YXRpYyBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJv
cGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKKyAgICB7CisgICAgICAgIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0
aWVzQW5kT3ZlcnJpZGVCdWlsdGluc1Byb3RvdHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6
OmFsbG9jYXRlQ2VsbDxKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0Fu
ZE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGU+KHZtLmhlYXApKSBKU1Rlc3ROYW1lZFNldHRlcldp
dGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGUodm0sIGds
b2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7
CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0
YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAg
eworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTVGVzdE5hbWVkU2V0dGVyV2l0
aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluc1Byb3RvdHlwZShKU0M6OlZN
JiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisg
ICAgICAgIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAgeworICAg
IH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKKwordXNpbmcgSlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5z
Q29uc3RydWN0b3IgPSBKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZTxKU1Rlc3ROYW1l
ZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnM+OworCisv
KiBIYXNoIHRhYmxlICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBK
U1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRp
bnNUYWJsZUluZGV4WzRdID0geworICAgIHsgLTEsIC0xIH0sCisgICAgeyAxLCAtMSB9LAorICAg
IHsgLTEsIC0xIH0sCisgICAgeyAwLCAtMSB9LAorfTsKKworCitzdGF0aWMgY29uc3QgSGFzaFRh
YmxlVmFsdWUgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVy
cmlkZUJ1aWx0aW5zVGFibGVWYWx1ZXNbXSA9Cit7CisgICAgeyAidW5mb3JnZWFibGVBdHRyaWJ1
dGUiLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBDdXN0b21BY2Nlc3NvciwgTm9JbnRyaW5zaWMs
IHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rl
c3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNV
bmZvcmdlYWJsZUF0dHJpYnV0ZSksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlT
bG90OjpQdXRWYWx1ZUZ1bmM+KDApIH0gfSwKKyAgICB7ICJ1bmZvcmdlYWJsZU9wZXJhdGlvbiIs
IERvbnREZWxldGUgfCBSZWFkT25seSB8IEpTQzo6RnVuY3Rpb24sIE5vSW50cmluc2ljLCB7IChp
bnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0TmFtZWRTZXR0ZXJXaXRo
VW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zSW5zdGFuY2VGdW5jdGlvblVu
Zm9yZ2VhYmxlT3BlcmF0aW9uKSwgKGludHB0cl90KSAoMCkgfSB9LAorfTsKKworc3RhdGljIGNv
bnN0IEhhc2hUYWJsZSBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0Fu
ZE92ZXJyaWRlQnVpbHRpbnNUYWJsZSA9IHsgMiwgMywgdHJ1ZSwgSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zVGFibGVWYWx1ZXMsIEpT
VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlu
c1RhYmxlSW5kZXggfTsKK3RlbXBsYXRlPD4gSlNWYWx1ZSBKU1Rlc3ROYW1lZFNldHRlcldpdGhV
bmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3Rvcjo6cHJvdG90
eXBlRm9yU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBjb25zdCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTSh2bSk7CisgICAgcmV0dXJuIGdsb2JhbE9i
amVjdC5mdW5jdGlvblByb3RvdHlwZSgpOworfQorCit0ZW1wbGF0ZTw+IHZvaWQgSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zQ29uc3Ry
dWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCkKK3sKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3Rv
dHlwZSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlk
ZUJ1aWx0aW5zOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIERvbnREZWxldGUgfCBSZWFk
T25seSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5h
bWUsIGpzTm9udHJpdmlhbFN0cmluZygmdm0sIFN0cmluZyhBU0NJSUxpdGVyYWwoIlRlc3ROYW1l
ZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnMiKSkpLCBS
ZWFkT25seSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
Pmxlbmd0aCwganNOdW1iZXIoMCksIFJlYWRPbmx5IHwgRG9udEVudW0pOworfQorCit0ZW1wbGF0
ZTw+IGNvbnN0IENsYXNzSW5mbyBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVy
dGllc0FuZE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVzdE5hbWVk
U2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucyIsICZCYXNl
OjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0TmFt
ZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zQ29uc3Ry
dWN0b3IpIH07CisKKy8qIEhhc2ggdGFibGUgZm9yIHByb3RvdHlwZSAqLworCitzdGF0aWMgY29u
c3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRp
ZXNBbmRPdmVycmlkZUJ1aWx0aW5zUHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9Cit7CisgICAgeyAi
Y29uc3RydWN0b3IiLCBEb250RW51bSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19j
YXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3ROYW1lZFNldHRlcldpdGhVbmZv
cmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3RvciksIChpbnRwdHJf
dCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdE5h
bWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluc0NvbnN0
cnVjdG9yKSB9IH0sCit9OworCitjb25zdCBDbGFzc0luZm8gSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
VW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zUHJvdG90eXBlOjpzX2luZm8g
PSB7ICJUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1
aWx0aW5zUHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0Fu
ZE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGUpIH07CisKK3ZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJX
aXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zUHJvdG90eXBlOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAg
IHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJs
ZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zUHJvdG90eXBlVGFibGVWYWx1ZXMsICp0aGlz
KTsKK30KKworY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQ
cm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluczo6c19pbmZvID0geyAiVGVzdE5hbWVkU2V0dGVy
V2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucyIsICZCYXNlOjpzX2lu
Zm8sICZKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRl
QnVpbHRpbnNUYWJsZSwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3ROYW1lZFNl
dHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnMpIH07CisKK0pT
VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlu
czo6SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1
aWx0aW5zKFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBSZWY8VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJp
ZGVCdWlsdGlucz4mJiBpbXBsKQorICAgIDogSlNET01XcmFwcGVyPFRlc3ROYW1lZFNldHRlcldp
dGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnM+KHN0cnVjdHVyZSwgZ2xv
YmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKQoreworfQorCit2b2lkIEpTVGVzdE5hbWVkU2V0dGVy
V2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluczo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBBU1NFUlQo
aW5oZXJpdHModm0sIGluZm8oKSkpOworCit9CisKK0pTT2JqZWN0KiBKU1Rlc3ROYW1lZFNldHRl
cldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnM6OmNyZWF0ZVByb3Rv
dHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0
dXJuIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVC
dWlsdGluc1Byb3RvdHlwZTo6Y3JlYXRlKHZtLCAmZ2xvYmFsT2JqZWN0LCBKU1Rlc3ROYW1lZFNl
dHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNQcm90b3R5cGU6
OmNyZWF0ZVN0cnVjdHVyZSh2bSwgJmdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0Lm9iamVjdFBy
b3RvdHlwZSgpKSk7Cit9CisKK0pTT2JqZWN0KiBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdh
YmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnM6OnByb3RvdHlwZShWTSYgdm0sIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlw
ZTxKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVp
bHRpbnM+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCitKU1ZhbHVlIEpTVGVzdE5hbWVkU2V0dGVy
V2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluczo6Z2V0Q29uc3RydWN0
b3IoVk0mIHZtLCBjb25zdCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJl
dHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJv
cGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3Qg
SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKK30KKwordm9pZCBKU1Rlc3ROYW1l
ZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnM6OmRlc3Ry
b3koSlNDOjpKU0NlbGwqIGNlbGwpCit7CisgICAgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3Jn
YWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nh
c3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1
aWx0aW5zKj4oY2VsbCk7CisgICAgdGhpc09iamVjdC0+SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5m
b3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zOjp+SlNUZXN0TmFtZWRTZXR0ZXJX
aXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zKCk7Cit9CisKK2Jvb2wg
SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0
aW5zOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0
ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJs
ZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zKj4ob2JqZWN0KTsKKyAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgaWYgKHRoaXNPYmplY3Qt
PmNsYXNzSW5mbygpID09IGluZm8oKSAmJiAhcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpIHsKKyAg
ICAgICAgYXV0byBpdGVtID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLm5hbWVkSXRlbShwcm9wZXJ0
eU5hbWVUb0F0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgaWYgKCFJRExET01T
dHJpbmc6OmlzTnVsbFZhbHVlKGl0ZW0pKSB7CisgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRo
aXNPYmplY3QsIDAsIHRvSlM8SURMRE9NU3RyaW5nPigqc3RhdGUsIGl0ZW0pKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIGlmIChCYXNlOjpnZXRPd25Q
cm9wZXJ0eVNsb3QodGhpc09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBKU1Rlc3ROYW1l
ZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnM6OmdldE93
blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwg
dW5zaWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5k
T3ZlcnJpZGVCdWlsdGlucyo+KG9iamVjdCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gSWRl
bnRpZmllcjo6ZnJvbShzdGF0ZSwgaW5kZXgpOworICAgIGlmICh0aGlzT2JqZWN0LT5jbGFzc0lu
Zm8oKSA9PSBpbmZvKCkpIHsKKyAgICAgICAgYXV0byBpdGVtID0gdGhpc09iamVjdC0+d3JhcHBl
ZCgpLm5hbWVkSXRlbShwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUpKTsK
KyAgICAgICAgaWYgKCFJRExET01TdHJpbmc6OmlzTnVsbFZhbHVlKGl0ZW0pKSB7CisgICAgICAg
ICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIDAsIHRvSlM8SURMRE9NU3RyaW5nPigqc3Rh
dGUsIGl0ZW0pKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQor
ICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KHRoaXNPYmplY3QsIHN0
YXRlLCBpbmRleCwgc2xvdCk7Cit9CisKK3ZvaWQgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3Jn
YWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpT
T2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogc3RhdGUsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9w
ZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3Zl
cnJpZGVCdWlsdGlucyo+KG9iamVjdCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogdGhpc09i
amVjdC0+d3JhcHBlZCgpLnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSkKKyAgICAgICAgcHJvcGVy
dHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgcHJvcGVydHlOYW1lKSk7
CisgICAgQmFzZTo6Z2V0T3duUHJvcGVydHlOYW1lcyh0aGlzT2JqZWN0LCBzdGF0ZSwgcHJvcGVy
dHlOYW1lcywgbW9kZSk7Cit9CisKK2Jvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJs
ZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zOjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
dGUqIHN0YXRlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQ
cm9wZXJ0eVNsb3QmIHB1dFByb3BlcnR5U2xvdCkKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJp
ZGVCdWlsdGlucyo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09i
amVjdCwgaW5mbygpKTsKKworICAgIGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpIHsKKyAg
ICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7
CisgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRl
LCB2YWx1ZSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdHJ1ZSk7
CisgICAgICAgIHRoaXNPYmplY3QtPndyYXBwZWQoKS5zZXROYW1lZEl0ZW0ocHJvcGVydHlOYW1l
VG9TdHJpbmcocHJvcGVydHlOYW1lKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gQmFzZTo6cHV0KHRoaXNPYmplY3QsIHN0
YXRlLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBwdXRQcm9wZXJ0eVNsb3QpOworfQorCitib29sIEpT
VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlu
czo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogc3RhdGUsIHVuc2lnbmVkIGlu
ZGV4LCBKU1ZhbHVlIHZhbHVlLCBib29sKQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1
aWx0aW5zKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOworCisgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpm
cm9tKHN0YXRlLCBpbmRleCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRShzdGF0ZS0+dm0oKSk7CisgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRE9N
U3RyaW5nPigqc3RhdGUsIHZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIHRydWUpOworICAgIHRoaXNPYmplY3QtPndyYXBwZWQoKS5zZXROYW1lZEl0ZW0ocHJvcGVy
dHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQ
cm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluczo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBzdGF0ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29u
c3QgUHJvcGVydHlEZXNjcmlwdG9yJiBwcm9wZXJ0eURlc2NyaXB0b3IsIGJvb2wgc2hvdWxkVGhy
b3cpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3ROYW1lZFNldHRlcldp
dGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnMqPihvYmplY3QpOworICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKworICAgIGlm
ICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpIHsKK3N0YXRpYyBib29sIGlzVW5mb3JnZWFibGVQ
cm9wZXJ0eU5hbWUoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gcHJv
cGVydHlOYW1lID09ICJ1bmZvcmdlYWJsZUF0dHJpYnV0ZSIgfHwgcHJvcGVydHlOYW1lID09ICJ1
bmZvcmdlYWJsZU9wZXJhdGlvbiI7Cit9CisKKyAgICAgICAgaWYgKCFpc1VuZm9yZ2VhYmxlUHJv
cGVydHlOYW1lKHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgICAgIGlmICghcHJvcGVydHlEZXNj
cmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRl
LT52bSgpKTsKKyAgICAgICAgICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PElETERPTVN0
cmluZz4oKnN0YXRlLCBwcm9wZXJ0eURlc2NyaXB0b3IudmFsdWUoKSk7CisgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHRydWUpOworICAgICAgICAgICAgdGhpc09i
amVjdC0+d3JhcHBlZCgpLnNldE5hbWVkSXRlbShwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0
eU5hbWUpLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIFByb3BlcnR5RGVzY3JpcHRvciBuZXdQcm9wZXJ0eURl
c2NyaXB0b3IgPSBwcm9wZXJ0eURlc2NyaXB0b3I7CisgICAgbmV3UHJvcGVydHlEZXNjcmlwdG9y
LnNldENvbmZpZ3VyYWJsZSh0cnVlKTsKKyAgICByZXR1cm4gQmFzZTo6ZGVmaW5lT3duUHJvcGVy
dHkob2JqZWN0LCBzdGF0ZSwgcHJvcGVydHlOYW1lLCBuZXdQcm9wZXJ0eURlc2NyaXB0b3IsIHNo
b3VsZFRocm93KTsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0TmFtZWRTZXR0ZXJXaXRo
VW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zKiBJRExBdHRyaWJ1dGU8SlNU
ZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5z
Pjo6Y2FzdChFeGVjU3RhdGUmIHN0YXRlLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCit7Cisg
ICAgcmV0dXJuIGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2Fi
bGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucyo+KHN0YXRlLnZtKCksIEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgSlNUZXN0TmFtZWRTZXR0
ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zKiBJRExPcGVyYXRp
b248SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1
aWx0aW5zPjo6Y2FzdChFeGVjU3RhdGUmIHN0YXRlKQoreworICAgIHJldHVybiBqc0R5bmFtaWNE
b3duY2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJy
aWRlQnVpbHRpbnMqPihzdGF0ZS52bSgpLCBzdGF0ZS50aGlzVmFsdWUoKSk7Cit9CisKK0VuY29k
ZWRKU1ZhbHVlIGpzVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3Zl
cnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogc3RhdGUsIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwor
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8q
IHByb3RvdHlwZSA9IGpzRHluYW1pY0Rvd25jYXN0PEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9y
Z2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluc1Byb3RvdHlwZSo+KHZtLCBKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQorICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVy
dGllc0FuZE92ZXJyaWRlQnVpbHRpbnM6OmdldENvbnN0cnVjdG9yKHN0YXRlLT52bSgpLCBwcm90
b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0TmFtZWRTZXR0ZXJX
aXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byogcHJvdG90eXBlID0g
anNEeW5hbWljRG93bmNhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRp
ZXNBbmRPdmVycmlkZUJ1aWx0aW5zUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKKyAgICAgICAgdGhyb3dW
TVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKKyAgICByZXR1cm4g
cHJvdG90eXBlLT5wdXREaXJlY3Qoc3RhdGUtPnZtKCksIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCku
Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKK30KKworc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVz
QW5kT3ZlcnJpZGVCdWlsdGluc1VuZm9yZ2VhYmxlQXR0cmlidXRlR2V0dGVyKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJp
ZGVCdWlsdGlucyYgdGhpc09iamVjdCwgVGhyb3dTY29wZSYgdGhyb3dTY29wZSkKK3sKKyAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKKyAgICBh
dXRvJiBpbXBsID0gdGhpc09iamVjdC53cmFwcGVkKCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0
b0pTPElETERPTVN0cmluZz4oc3RhdGUsIGltcGwudW5mb3JnZWFibGVBdHRyaWJ1dGUoKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0TmFtZWRTZXR0ZXJX
aXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zVW5mb3JnZWFibGVBdHRy
aWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3ROYW1lZFNldHRlcldpdGhV
bmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnM+OjpnZXQ8anNUZXN0TmFtZWRT
ZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zVW5mb3JnZWFi
bGVBdHRyaWJ1dGVHZXR0ZXI+KCpzdGF0ZSwgdGhpc1ZhbHVlLCAidW5mb3JnZWFibGVBdHRyaWJ1
dGUiKTsKK30KKworc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE5hbWVk
U2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluc0luc3RhbmNl
RnVuY3Rpb25VbmZvcmdlYWJsZU9wZXJhdGlvbkJvZHkoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCB0
eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3Bl
cnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zPjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcywgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlKQoreworICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CisgICAgaW1wbC51bmZvcmdlYWJsZU9wZXJhdGlvbigpOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRP
dmVycmlkZUJ1aWx0aW5zSW5zdGFuY2VGdW5jdGlvblVuZm9yZ2VhYmxlT3BlcmF0aW9uKEV4ZWNT
dGF0ZSogc3RhdGUpCit7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU1Rlc3ROYW1lZFNldHRl
cldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnM+OjpjYWxsPGpzVGVz
dE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluc0lu
c3RhbmNlRnVuY3Rpb25VbmZvcmdlYWJsZU9wZXJhdGlvbkJvZHk+KCpzdGF0ZSwgInVuZm9yZ2Vh
YmxlT3BlcmF0aW9uIik7Cit9CisKK2Jvb2wgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJs
ZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1
ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CisgICAgVU5VU0VEX1BB
UkFNKHZpc2l0b3IpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBKU1Rlc3ROYW1lZFNl
dHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNPd25lcjo6Zmlu
YWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqIGNvbnRleHQpCit7
CisgICAgYXV0byoganNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRP
dmVycmlkZUJ1aWx0aW5zID0gc3RhdGljX2Nhc3Q8SlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3Jn
YWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zKj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxs
KCkpOworICAgIGF1dG8mIHdvcmxkID0gKnN0YXRpY19jYXN0PERPTVdyYXBwZXJXb3JsZCo+KGNv
bnRleHQpOworICAgIHVuY2FjaGVXcmFwcGVyKHdvcmxkLCAmanNUZXN0TmFtZWRTZXR0ZXJXaXRo
VW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zLT53cmFwcGVkKCksIGpzVGVz
dE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucyk7
Cit9CisKKyNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCisjaWYgUExBVEZPUk0oV0lOKQor
I3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ0ODMpCitleHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQg
KCpjb25zdCBfX2lkZW50aWZpZXIoIj8/XzdUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVBy
b3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zQFdlYkNvcmVAQDZCQCIpW10pKCk7IH0KKyNlbHNl
CitleHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQqIF9aVFZON1dlYkNvcmU1OFRlc3ROYW1lZFNldHRl
cldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNFW107IH0KKyNlbmRp
ZgorI2VuZGlmCisKK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRl
KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3ROYW1lZFNldHRlcldp
dGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnM+JiYgaW1wbCkKK3sKKwor
I2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKKyAgICB2b2lkKiBhY3R1YWxWVGFibGVQb2lu
dGVyID0gKihyZWludGVycHJldF9jYXN0PHZvaWQqKj4oaW1wbC5wdHIoKSkpOworI2lmIFBMQVRG
T1JNKFdJTikKKyAgICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSByZWludGVycHJldF9j
YXN0PHZvaWQqPihfX2lkZW50aWZpZXIoIj8/XzdUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJs
ZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zQFdlYkNvcmVAQDZCQCIpKTsKKyNlbHNlCisg
ICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gJl9aVFZON1dlYkNvcmU1OFRlc3ROYW1l
ZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNFWzJdOwor
I2lmIENPTVBJTEVSKENMQU5HKQorICAgIC8vIElmIHRoaXMgZmFpbHMgVGVzdE5hbWVkU2V0dGVy
V2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucyBkb2VzIG5vdCBoYXZl
IGEgdnRhYmxlLCBzbyB5b3UgbmVlZCB0byBhZGQgdGhlCisgICAgLy8gSW1wbGVtZW50YXRpb25M
YWNrc1ZUYWJsZSBhdHRyaWJ1dGUgdG8gdGhlIGludGVyZmFjZSBkZWZpbml0aW9uCisgICAgc3Rh
dGljX2Fzc2VydChfX2lzX3BvbHltb3JwaGljKFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxl
UHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnMpLCAiVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9y
Z2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucyBpcyBub3QgcG9seW1vcnBoaWMiKTsK
KyNlbmRpZgorI2VuZGlmCisgICAgLy8gSWYgeW91IGhpdCB0aGlzIGFzc2VydGlvbiB5b3UgZWl0
aGVyIGhhdmUgYSB1c2UgYWZ0ZXIgZnJlZSBidWcsIG9yCisgICAgLy8gVGVzdE5hbWVkU2V0dGVy
V2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucyBoYXMgc3ViY2xhc3Nl
cy4gSWYgVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVC
dWlsdGlucyBoYXMgc3ViY2xhc3NlcyB0aGF0IGdldCBwYXNzZWQKKyAgICAvLyB0byB0b0pTKCkg
d2UgY3VycmVudGx5IHJlcXVpcmUgVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0
aWVzQW5kT3ZlcnJpZGVCdWlsdGlucyB5b3UgdG8gb3B0IG91dCBvZiBiaW5kaW5nIGhhcmRlbmlu
ZworICAgIC8vIGJ5IGFkZGluZyB0aGUgU2tpcFZUYWJsZVZhbGlkYXRpb24gYXR0cmlidXRlIHRv
IHRoZSBpbnRlcmZhY2UgSURMIGRlZmluaXRpb24KKyAgICBSRUxFQVNFX0FTU0VSVChhY3R1YWxW
VGFibGVQb2ludGVyID09IGV4cGVjdGVkVlRhYmxlUG9pbnRlcik7CisjZW5kaWYKKyAgICByZXR1
cm4gY3JlYXRlV3JhcHBlcjxUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNB
bmRPdmVycmlkZUJ1aWx0aW5zPihnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOworfQorCitK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0Fu
ZE92ZXJyaWRlQnVpbHRpbnMmIGltcGwpCit7CisgICAgcmV0dXJuIHdyYXAoc3RhdGUsIGdsb2Jh
bE9iamVjdCwgaW1wbCk7Cit9CisKK1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVy
dGllc0FuZE92ZXJyaWRlQnVpbHRpbnMqIEpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQ
cm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluczo6dG9XcmFwcGVkKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBqc0R5bmFtaWNEb3du
Y2FzdDxKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRl
QnVpbHRpbnMqPih2bSwgdmFsdWUpKQorICAgICAgICByZXR1cm4gJndyYXBwZXItPndyYXBwZWQo
KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9w
ZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxl
UHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5m
b3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw5MyBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgorI2luY2x1ZGUgIlRlc3ROYW1lZFNldHRlcldpdGhV
bmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnMuaCIKKyNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBKU1Rlc3RO
YW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnMgOiBw
dWJsaWMgSlNET01XcmFwcGVyPFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGll
c0FuZE92ZXJyaWRlQnVpbHRpbnM+IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNET01X
cmFwcGVyPFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRl
QnVpbHRpbnM+OworICAgIHN0YXRpYyBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJv
cGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnMqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VGVzdE5hbWVkU2V0dGVy
V2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucz4mJiBpbXBsKQorICAg
IHsKKyAgICAgICAgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRP
dmVycmlkZUJ1aWx0aW5zKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpT
VGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlu
cz4oZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApKSBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdh
YmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnMoc3RydWN0dXJlLCAqZ2xvYmFsT2JqZWN0
LCBXVEZNb3ZlKGltcGwpKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmpl
Y3QtPnZtKCkpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6
OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7
CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9i
YWxPYmplY3QmKTsKKyAgICBzdGF0aWMgVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9w
ZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucyogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFs
dWUpOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTT2JqZWN0Kiwg
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsK
KyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNs
b3QmKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNPYmplY3Qq
LCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmLCBKU0M6OkVudW1lcmF0
aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgIHN0YXRpYyBib29sIHB1dChK
U0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6SlNW
YWx1ZSwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICBzdGF0aWMgYm9vbCBwdXRCeUluZGV4
KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpT
Qzo6SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CisgICAgc3RhdGljIGJvb2wgZGVmaW5lT3du
UHJvcGVydHkoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5h
bWUsIGNvbnN0IEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCBzaG91bGRUaHJvdyk7Cisg
ICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOworCisgICAgREVDTEFSRV9JTkZP
OworCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3Rv
dHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Citw
dWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpH
ZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZSB8IEpTQzo6SGFzU3RhdGljUHJvcGVydHlUYWJsZSB8
IEpTQzo6SW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElz
Tm90WmVybyB8IEpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgSlNDOjpPdmVycmlk
ZXNHZXRQcm9wZXJ0eU5hbWVzIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7Citwcm90ZWN0ZWQ6Cisg
ICAgSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1
aWx0aW5zKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8VGVzdE5hbWVk
U2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucz4mJik7CisK
KyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK2NsYXNzIEpTVGVzdE5h
bWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGluc093bmVy
IDogcHVibGljIEpTQzo6V2Vha0hhbmRsZU93bmVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJv
b2wgaXNSZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwg
dm9pZCogY29udGV4dCwgSlNDOjpTbG90VmlzaXRvciYpOworICAgIHZpcnR1YWwgdm9pZCBmaW5h
bGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KTsKK307CisKK2lu
bGluZSBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3JsZCYs
IFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRp
bnMqKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxKU1Rlc3ROYW1lZFNldHRlcldpdGhV
bmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNPd25lcj4gb3duZXI7CisgICAg
cmV0dXJuICZvd25lci5nZXQoKTsKK30KKworaW5saW5lIHZvaWQqIHdyYXBwZXJLZXkoVGVzdE5h
bWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsdGlucyogd3Jh
cHBhYmxlT2JqZWN0KQoreworICAgIHJldHVybiB3cmFwcGFibGVPYmplY3Q7Cit9CisKK0pTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0TmFt
ZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zJik7Citp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3Bl
cnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zKiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUg
dG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVm
PFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRp
bnM+JiYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3RO
YW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnM+JiYg
aW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVj
dCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KKwordGVtcGxhdGU8
PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFRlc3ROYW1lZFNldHRlcldpdGhV
bmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnM+IHsKKyAgICB1c2luZyBXcmFw
cGVyQ2xhc3MgPSBKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92
ZXJyaWRlQnVpbHRpbnM7CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFRlc3ROYW1l
ZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnMqOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHJldmlzaW9uIDIxNzc2
NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmou
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcyLDYgKzE5NzIsNjkgQEAgdm9pZCBKU1Rlc3RPYmo6
OmdldE93blByb3BlcnR5TmFtZXMoSlNPYgogICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXMo
dGhpc09iamVjdCwgc3RhdGUsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwogfQogCitzdGF0aWMgaW5s
aW5lIEVuY29kZWRKU1ZhbHVlIGNhbGxKU1Rlc3RPYmoxKEV4ZWNTdGF0ZSogc3RhdGUpCit7Cisg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIGF1dG8q
IGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oc3RhdGUtPmpzQ2FsbGVlKCkpOworICAg
IEFTU0VSVChjYXN0ZWRUaGlzKTsKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOworICAgIGF1dG8gcGFyYW0gPSBjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IGVuY29kZWRKU1ZhbHVlKCkpOworICAgIGltcGwubGVnYWN5Q2FsbGVyTmFtZWQoV1RGTW92ZShw
YXJhbSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisK
K3N0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY2FsbEpTVGVzdE9iajIoRXhlY1N0YXRlKiBz
dGF0ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CisgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihzdGF0ZS0+anNDYWxs
ZWUoKSk7CisgICAgQVNTRVJUKGNhc3RlZFRoaXMpOworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CisgICAgYXV0byBwYXJhbSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigq
c3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRvSlM8SURMTG9uZz4oaW1wbC5sZWdhY3lDYWxsZXJPcGVyYXRpb25Gcm9tQmluZGlu
Z3MoV1RGTW92ZShwYXJhbSkpKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUg
Y2FsbEpTVGVzdE9iajMoRXhlY1N0YXRlKiBzdGF0ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2Fz
dDxKU1Rlc3RPYmoqPihzdGF0ZS0+anNDYWxsZWUoKSk7CisgICAgQVNTRVJUKGNhc3RlZFRoaXMp
OworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgaW1wbC5sZWdh
Y3lDYWxsZXJPcGVyYXRpb25Gcm9tQmluZGluZ3MoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNh
bGxKU1Rlc3RPYmooRXhlY1N0YXRlKiBzdGF0ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgc2l6ZV90IGFyZ3NDb3VudCA9IHN0ZDo6bWlu
PHNpemVfdD4oMSwgc3RhdGUtPmFyZ3VtZW50Q291bnQoKSk7CisgICAgaWYgKGFyZ3NDb3VudCA9
PSAwKSB7CisgICAgICAgIHJldHVybiBjYWxsSlNUZXN0T2JqMyhzdGF0ZSk7CisgICAgfQorICAg
IGlmIChhcmdzQ291bnQgPT0gMSkgeworICAgICAgICBKU1ZhbHVlIGRpc3Rpbmd1aXNoaW5nQXJn
ID0gc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgICAgICBpZiAoZGlzdGluZ3Vpc2hp
bmdBcmcuaXNOdW1iZXIoKSkKKyAgICAgICAgICAgIHJldHVybiBjYWxsSlNUZXN0T2JqMShzdGF0
ZSk7CisgICAgICAgIHJldHVybiBjYWxsSlNUZXN0T2JqMihzdGF0ZSk7CisgICAgfQorICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlKTsKK30KKworQ2FsbFR5cGUg
SlNUZXN0T2JqOjpnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCit7Cisg
ICAgY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY2FsbEpTVGVzdE9iajsKKyAgICByZXR1cm4g
Q2FsbFR5cGU6Okhvc3Q7Cit9CisKIHRlbXBsYXRlPD4gaW5saW5lIEpTVGVzdE9iaiogSURMQXR0
cmlidXRlPEpTVGVzdE9iaj46OmNhc3QoRXhlY1N0YXRlJiBzdGF0ZSwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlKQogewogICAgIHJldHVybiBqc0R5bmFtaWNEb3duY2FzdDxKU1Rlc3RPYmoqPihz
dGF0ZS52bSgpLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CkBAIC03Nzk0LDY5ICs3ODU3
LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIHJldHVy
biBJRExPcGVyYXRpb248SlNUZXN0T2JqPjo6Y2FsbDxqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
blRvU3RyaW5nQm9keT4oKnN0YXRlLCAidG9TdHJpbmciKTsKIH0KIAotc3RhdGljIGlubGluZSBF
bmNvZGVkSlNWYWx1ZSBjYWxsSlNUZXN0T2JqMShFeGVjU3RhdGUqIHN0YXRlKQotewotICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBhdXRvKiBjYXN0
ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KHN0YXRlLT5qc0NhbGxlZSgpKTsKLSAgICBBU1NF
UlQoY2FzdGVkVGhpcyk7Ci0gICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
LSAgICBhdXRvIHBhcmFtID0gY29udmVydDxJRExMb25nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNr
ZWRBcmd1bWVudCgwKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKLSAgICBpbXBsLmxlZ2FjeUNhbGxlck5hbWVkKFdURk1vdmUocGFyYW0p
KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotfQotCi1zdGF0
aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGNhbGxKU1Rlc3RPYmoyKEV4ZWNTdGF0ZSogc3RhdGUp
Ci17Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAg
IGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oc3RhdGUtPmpzQ2FsbGVlKCkp
OwotICAgIEFTU0VSVChjYXN0ZWRUaGlzKTsKLSAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwotICAgIGF1dG8gcGFyYW0gPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRl
LCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0b0pTPElETExvbmc+KGltcGwubGVnYWN5Q2FsbGVyT3BlcmF0aW9uRnJvbUJpbmRpbmdzKFdU
Rk1vdmUocGFyYW0pKSkpOwotfQotCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGNhbGxK
U1Rlc3RPYmozKEV4ZWNTdGF0ZSogc3RhdGUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwotICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNU
ZXN0T2JqKj4oc3RhdGUtPmpzQ2FsbGVlKCkpOwotICAgIEFTU0VSVChjYXN0ZWRUaGlzKTsKLSAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGltcGwubGVnYWN5Q2Fs
bGVyT3BlcmF0aW9uRnJvbUJpbmRpbmdzKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSlNU
ZXN0T2JqKEV4ZWNTdGF0ZSogc3RhdGUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0g
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOwotICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGQ6Om1pbjxzaXpl
X3Q+KDEsIHN0YXRlLT5hcmd1bWVudENvdW50KCkpOwotICAgIGlmIChhcmdzQ291bnQgPT0gMCkg
ewotICAgICAgICByZXR1cm4gY2FsbEpTVGVzdE9iajMoc3RhdGUpOwotICAgIH0KLSAgICBpZiAo
YXJnc0NvdW50ID09IDEpIHsKLSAgICAgICAgSlNWYWx1ZSBkaXN0aW5ndWlzaGluZ0FyZyA9IHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICAgICAgaWYgKGRpc3Rpbmd1aXNoaW5nQXJn
LmlzTnVtYmVyKCkpCi0gICAgICAgICAgICByZXR1cm4gY2FsbEpTVGVzdE9iajEoc3RhdGUpOwot
ICAgICAgICByZXR1cm4gY2FsbEpTVGVzdE9iajIoc3RhdGUpOwotICAgIH0KLSAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihzdGF0ZSwgdGhyb3dTY29wZSk7Ci19Ci0KLUNhbGxUeXBlIEpTVGVz
dE9iajo6Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmIGNhbGxEYXRhKQotewotICAgIGNh
bGxEYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNhbGxKU1Rlc3RPYmo7Ci0gICAgcmV0dXJuIENhbGxU
eXBlOjpIb3N0OwotfQotCiBKU0M6OkpTT2JqZWN0KiBKU1Rlc3RPYmo6OnNlcmlhbGl6ZShFeGVj
U3RhdGUqIHN0YXRlLCBKU1Rlc3RPYmoqIHRoaXNPYmplY3QsIFRocm93U2NvcGUmIHRocm93U2Nv
cGUpCiB7CiAgICAgYXV0byYgdm0gPSBzdGF0ZS0+dm0oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgJKHJldmlzaW9u
IDIxNzc2NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RPYmouaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIFRlc3RPYmoqIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKICAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU09iamVjdCosIEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpQcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3Rh
dGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgc3Rh
dGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJhdGlvbk1vZGUgPSBKU0M6
OkVudW1lcmF0aW9uTW9kZSgpKTsKICAgICBzdGF0aWMgSlNDOjpDYWxsVHlwZSBnZXRDYWxsRGF0
YShKU0M6OkpTQ2VsbCosIEpTQzo6Q2FsbERhdGEmKTsKIAogICAgIHN0YXRpYyB2b2lkIGRlc3Ry
b3koSlNDOjpKU0NlbGwqKTsKQEAgLTU0LDcgKzU1LDYgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpT
Qzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAg
ICAgfQogCi0gICAgc3RhdGljIHZvaWQgZ2V0T3duUHJvcGVydHlOYW1lcyhKU0M6OkpTT2JqZWN0
KiwgSlNDOjpFeGVjU3RhdGUqLCBKU0M6OlByb3BlcnR5TmFtZUFycmF5JiwgSlNDOjpFbnVtZXJh
dGlvbk1vZGUgPSBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKICAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7
CiAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlcmlhbGl6ZShKU0M6OkV4ZWNTdGF0ZSosIEpT
VGVzdE9iaiogdGhpc09iamVjdCwgSlNDOjpUaHJvd1Njb3BlJik7CiAgICAgbXV0YWJsZSBKU0M6
OldyaXRlQmFycmllcjxKU0M6OlVua25vd24+IG1fY2FjaGVkQXR0cmlidXRlMTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVycmlkZUJ1aWx0
aW5zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMuaAkocmV2aXNpb24gMjE3NzY3KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMu
aAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFRl
c3RPdmVycmlkZUJ1aWx0aW5zKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CiAg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwogICAgIHN0
YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU09iamVjdCosIEpTQzo6
RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5U2xvdCYpOwor
ICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNDOjpKU09iamVjdCosIEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSYsIEpTQzo6RW51bWVyYXRpb25Nb2Rl
ID0gSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6
OkpTQ2VsbCopOwogCiAgICAgREVDTEFSRV9JTkZPOwpAQCAtNTAsNyArNTEsNiBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVz
KEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkm
LCBKU0M6OkVudW1lcmF0aW9uTW9kZSA9IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOwogICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNH
bG9iYWxPYmplY3QqKTsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBKU0M6OkdldE93blByb3BlcnR5U2xvdElzSW1wdXJlIHwgSlNDOjpJbnRlcmNl
cHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSlND
OjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBKU0M6Ok92ZXJyaWRlc0dldFByb3BlcnR5
TmFtZXMgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NTdHlsZURlY2xhcmF0aW9uLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVEZWNsYXJhdGlvbi5pZGwJKHJldmlzaW9uIDIxNzc2NykKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjAsMTAg
KzIwLDEwIEBACiAKIFsKICAgICBDdXN0b21FbnVtZXJhdGVQcm9wZXJ0eSwKKyAgICBDdXN0b21H
ZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yLAogICAgIEN1c3RvbU5hbWVkU2V0dGVyLAog
ICAgIEV4cG9ydE1hY3JvPVdFQkNPUkVfRVhQT1JULAogICAgIEdlbmVyYXRlSXNSZWFjaGFibGUs
Ci0gICAgSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yLAogICAgIEpTQ3Vz
dG9tSGVhZGVyLAogICAgIEpTQ3VzdG9tTWFya0Z1bmN0aW9uLAogICAgIFNraXBWVGFibGVWYWxp
ZGF0aW9uLApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RPTVN0cmluZ01hcC5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RPTVN0cmluZ01hcC5pZGwJKHJldmlzaW9uIDIx
Nzc2NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9ET01TdHJpbmdNYXAuaWRsCSh3b3JraW5nIGNv
cHkpCkBAIC0yNCwxNiArMjQsMTIgQEAKICAqLwogCiBbCi0gICAgQ3VzdG9tTmFtZWRTZXR0ZXIs
CiAgICAgR2VuZXJhdGVJc1JlYWNoYWJsZT1JbXBsRWxlbWVudFJvb3QsCiAgICAgT3ZlcnJpZGVC
dWlsdGlucywKICAgICBTa2lwVlRhYmxlVmFsaWRhdGlvbiwKIF0gaW50ZXJmYWNlIERPTVN0cmlu
Z01hcCB7CiAgICAgZ2V0dGVyIERPTVN0cmluZyAoRE9NU3RyaW5nIG5hbWUpOwotCi0gICAgLy8g
RklYTUU6IEFkZCBzdXBwb3J0IGZvciB0aGUgbmFtZWQgc2V0dGVyIHNwZWNpYWwuCi0gICAgLy8g
W0NFUmVhY3Rpb25zXSBzZXR0ZXIgdm9pZCAoRE9NU3RyaW5nIG5hbWUsIERPTVN0cmluZyB2YWx1
ZSk7Ci0KKyAgICBbQ0VSZWFjdGlvbnMsIE1heVRocm93RXhjZXB0aW9uXSBzZXR0ZXIgdm9pZCAo
RE9NU3RyaW5nIG5hbWUsIERPTVN0cmluZyB2YWx1ZSk7CiAgICAgW0NFUmVhY3Rpb25zXSBkZWxl
dGVyIHZvaWQgKERPTVN0cmluZyBuYW1lKTsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9EYXRhc2V0RE9NU3RyaW5nTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vRGF0YXNldERPTVN0cmluZ01hcC5jcHAJKHJldmlzaW9uIDIxNzc2NykKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9EYXRhc2V0RE9NU3RyaW5nTWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE3
LDcgKzIxNyw3IEBAIFN0cmluZyBEYXRhc2V0RE9NU3RyaW5nTWFwOjpuYW1lZEl0ZW0oY28KICAg
ICByZXR1cm4gaXRlbShuYW1lKS52YWx1ZV9vcihTdHJpbmcgeyB9KTsKIH0KIAotRXhjZXB0aW9u
T3I8dm9pZD4gRGF0YXNldERPTVN0cmluZ01hcDo6c2V0SXRlbShjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgdmFsdWUpCitFeGNlcHRpb25Pcjx2b2lkPiBEYXRhc2V0RE9NU3RyaW5n
TWFwOjpzZXROYW1lZEl0ZW0oY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVl
KQogewogICAgIGlmICghaXNWYWxpZFByb3BlcnR5TmFtZShuYW1lKSkKICAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9EYXRh
c2V0RE9NU3RyaW5nTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RhdGFz
ZXRET01TdHJpbmdNYXAuaAkocmV2aXNpb24gMjE3NzY3KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L0RhdGFzZXRET01TdHJpbmdNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBw
dWJsaWM6CiAgICAgVmVjdG9yPFN0cmluZz4gc3VwcG9ydGVkUHJvcGVydHlOYW1lcygpIGNvbnN0
OwogCiAgICAgU3RyaW5nIG5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0
OwotICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldEl0ZW0oY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIHZhbHVlKTsKKyAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXROYW1lZEl0ZW0oY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKICAgICBib29sIGRlbGV0ZU5h
bWVkUHJvcGVydHkoY29uc3QgU3RyaW5nJiBuYW1lKTsKIAogICAgIEVsZW1lbnQmIGVsZW1lbnQo
KSB7IHJldHVybiBtX2VsZW1lbnQ7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmlk
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5pZGwJKHJldmlzaW9uIDIx
Nzc2NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmlkbAkod29ya2luZyBjb3B5KQpAQCAt
MjAsMTIgKzIwLDEyIEBACiAKIFsKICAgICBDdXN0b21Jc1JlYWNoYWJsZSwKKyAgICBDdXN0b21Q
dXNoRXZlbnRIYW5kbGVyU2NvcGUsCiAgICAgQ3VzdG9tVG9KU09iamVjdCwKICAgICBET01KSVQs
CiAgICAgRXhwb3J0TWFjcm89V0VCQ09SRV9FWFBPUlQsCiAgICAgSlNDdXN0b21IZWFkZXIsCiAg
ICAgSlNDdXN0b21NYXJrRnVuY3Rpb24sCi0gICAgSlNDdXN0b21QdXNoRXZlbnRIYW5kbGVyU2Nv
cGUsCiBdIGludGVyZmFjZSBOb2RlIDogRXZlbnRUYXJnZXQgewogICAgIGNvbnN0IHVuc2lnbmVk
IHNob3J0IEVMRU1FTlRfTk9ERSA9IDE7CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQVRUUklC
VVRFX05PREUgPSAyOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVu
dC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVu
dC5pZGwJKHJldmlzaW9uIDIxNzc2NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFwcGxl
dEVsZW1lbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw4ICsyMCw4IEBACiAKIFsKICAgICBD
dXN0b21DYWxsLAorICAgIEN1c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2NyaXB0b3IsCiAg
ICAgQ3VzdG9tTmFtZWRTZXR0ZXIsCi0gICAgSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmRE
ZXNjcmlwdG9yLAogXSBpbnRlcmZhY2UgSFRNTEFwcGxldEVsZW1lbnQgOiBIVE1MRWxlbWVudCB7
CiAgICAgW1JlZmxlY3RdIGF0dHJpYnV0ZSBET01TdHJpbmcgYWxpZ247CiAgICAgW1JlZmxlY3Rd
IGF0dHJpYnV0ZSBET01TdHJpbmcgYWx0OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Q29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29s
bGVjdGlvbi5jcHAJKHJldmlzaW9uIDIxNzc2NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TENvbGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzksNiArMTc5LDE5IEBAIGNvbnN0
IFZlY3RvcjxBdG9taWNTdHJpbmc+JiBIVE1MQ29sbGVjdGkKICAgICByZXR1cm4gbV9uYW1lZEVs
ZW1lbnRDYWNoZS0+cHJvcGVydHlOYW1lcygpOwogfQogCitib29sIEhUTUxDb2xsZWN0aW9uOjpp
c1N1cHBvcnRlZFByb3BlcnR5TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgdXBkYXRl
TmFtZWRFbGVtZW50Q2FjaGUoKTsKKyAgICBBU1NFUlQobV9uYW1lZEVsZW1lbnRDYWNoZSk7Cisg
ICAgCisgICAgaWYgKG1fbmFtZWRFbGVtZW50Q2FjaGUtPmZpbmRFbGVtZW50c1dpdGhJZChuYW1l
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG1fbmFtZWRFbGVtZW50Q2FjaGUtPmZp
bmRFbGVtZW50c1dpdGhOYW1lKG5hbWUpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJl
dHVybiBmYWxzZTsKK30KKwogdm9pZCBIVE1MQ29sbGVjdGlvbjo6dXBkYXRlTmFtZWRFbGVtZW50
Q2FjaGUoKSBjb25zdAogewogICAgIGlmIChoYXNOYW1lZEVsZW1lbnRDYWNoZSgpKQpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uaAkocmV2aXNpb24gMjE3NzY3KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3
ICszOCw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+KiBmaW5kRWxlbWVu
dHNXaXRoSWQoY29uc3QgQXRvbWljU3RyaW5nJiBpZCkgY29uc3Q7CiAgICAgY29uc3QgVmVjdG9y
PEVsZW1lbnQqPiogZmluZEVsZW1lbnRzV2l0aE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
KSBjb25zdDsKICAgICBjb25zdCBWZWN0b3I8QXRvbWljU3RyaW5nPiYgcHJvcGVydHlOYW1lcygp
IGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlOYW1lczsgfQotCisgICAgCiAgICAgdm9pZCBhcHBl
bmRUb0lkQ2FjaGUoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgRWxlbWVudCYpOwogICAgIHZvaWQg
YXBwZW5kVG9OYW1lQ2FjaGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBFbGVtZW50Jik7CiAg
ICAgdm9pZCBkaWRQb3B1bGF0ZSgpOwpAQCAtNjksNiArNjksNyBAQCBwdWJsaWM6CiAgICAgRWxl
bWVudCogaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3Qgb3ZlcnJpZGUgPSAwOyAvLyBUaWdodGVu
IHJldHVybiB0eXBlIGZyb20gTm9kZUxpc3Q6Oml0ZW0oKS4KICAgICB2aXJ0dWFsIEVsZW1lbnQq
IG5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0ID0gMDsKICAgICBjb25z
dCBWZWN0b3I8QXRvbWljU3RyaW5nPiYgc3VwcG9ydGVkUHJvcGVydHlOYW1lcygpOworICAgIGJv
b2wgaXNTdXBwb3J0ZWRQcm9wZXJ0eU5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKTsKIAogICAgIC8v
IE5vbi1ET00gQVBJCiAgICAgVmVjdG9yPFJlZjxFbGVtZW50Pj4gbmFtZWRJdGVtcyhjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RWxlbWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVu
dC5pZGwJKHJldmlzaW9uIDIxNzc2NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1l
bnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw4ICsyMCw4IEBACiAKIFsKICAgICBDdXN0b21D
b25zdHJ1Y3RvcigpLAorICAgIEN1c3RvbVB1c2hFdmVudEhhbmRsZXJTY29wZSwKICAgICBFeHBv
cnRNYWNybz1XRUJDT1JFX0VYUE9SVCwKLSAgICBKU0N1c3RvbVB1c2hFdmVudEhhbmRsZXJTY29w
ZSwKICAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCiBdIGludGVyZmFjZSBIVE1MRWxlbWVu
dCA6IEVsZW1lbnQgewogICAgIC8vIE1ldGFkYXRhIGF0dHJpYnV0ZXMuCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5pZGwJKHJldmlzaW9uIDIxNzc2NykKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAg
LTIwLDggKzIwLDggQEAKIAogWwogICAgIEN1c3RvbUNhbGwsCisgICAgQ3VzdG9tR2V0T3duUHJv
cGVydHlTbG90QW5kRGVzY3JpcHRvciwKICAgICBDdXN0b21OYW1lZFNldHRlciwKLSAgICBKU0N1
c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2NyaXB0b3IsCiBdIGludGVyZmFjZSBIVE1MRW1i
ZWRFbGVtZW50IDogSFRNTEVsZW1lbnQgewogICAgIFtSZWZsZWN0XSBhdHRyaWJ1dGUgRE9NU3Ry
aW5nIGFsaWduOwogICAgIFtSZWZsZWN0XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGhlaWdodDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuaWRsCShyZXZpc2lvbiAy
MTc3NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmlkbAkod29y
a2luZyBjb3B5KQpAQCAtMjAsOCArMjAsOCBAQAogCiBbCiAgICAgQ3VzdG9tQ2FsbCwKLSAgICBD
dXN0b21OYW1lZFNldHRlciwKLSAgICBKU0N1c3RvbUdldE93blByb3BlcnR5U2xvdEFuZERlc2Ny
aXB0b3IsCisgICAgQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90QW5kRGVzY3JpcHRvciwKKyAgICBD
dXN0b21OYW1lZFNldHRlcgogXSBpbnRlcmZhY2UgSFRNTE9iamVjdEVsZW1lbnQgOiBIVE1MRWxl
bWVudCB7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEhUTUxGb3JtRWxlbWVudCBmb3JtOwogICAg
IFtSZWZsZWN0XSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGNvZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmgJKHJldmlzaW9uIDIxNzc2NykKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDYgKzMxLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MT3B0aW9u
c0NvbGxlY3Rpb24gZmluYWwgOiBwdWJsaWMgQ2FjaGVkSFRNTENvbGxlY3Rpb248SFRNTE9wdGlv
bnNDb2xsZWN0aW9uLCBDb2xsZWN0aW9uVHlwZVRyYWl0czxTZWxlY3RPcHRpb25zPjo6dHJhdmVy
c2FsVHlwZT4gewogcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBDYWNoZWRIVE1MQ29sbGVjdGlv
bjxIVE1MT3B0aW9uc0NvbGxlY3Rpb24sIENvbGxlY3Rpb25UeXBlVHJhaXRzPFNlbGVjdE9wdGlv
bnM+Ojp0cmF2ZXJzYWxUeXBlPjsKKwogICAgIHN0YXRpYyBSZWY8SFRNTE9wdGlvbnNDb2xsZWN0
aW9uPiBjcmVhdGUoSFRNTFNlbGVjdEVsZW1lbnQmLCBDb2xsZWN0aW9uVHlwZSk7CiAKICAgICBI
VE1MU2VsZWN0RWxlbWVudCYgc2VsZWN0RWxlbWVudCgpIHsgcmV0dXJuIGRvd25jYXN0PEhUTUxT
ZWxlY3RFbGVtZW50Pihvd25lck5vZGUoKSk7IH0KQEAgLTM4LDcgKzQwLDkgQEAgcHVibGljOgog
CiAgICAgSFRNTE9wdGlvbkVsZW1lbnQqIGl0ZW0odW5zaWduZWQgb2Zmc2V0KSBjb25zdCBmaW5h
bDsKICAgICBIVE1MT3B0aW9uRWxlbWVudCogbmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZSkgY29uc3QgZmluYWw7Ci0KKyAgICAKKyAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRJdGVt
KHVuc2lnbmVkIGluZGV4LCBIVE1MT3B0aW9uRWxlbWVudCopOworICAgIAogICAgIHVzaW5nIE9w
dGlvbk9yT3B0R3JvdXBFbGVtZW50ID0gVmFyaWFudDxSZWZQdHI8SFRNTE9wdGlvbkVsZW1lbnQ+
LCBSZWZQdHI8SFRNTE9wdEdyb3VwRWxlbWVudD4+OwogICAgIHVzaW5nIEhUTUxFbGVtZW50T3JJ
bnQgPSBWYXJpYW50PFJlZlB0cjxIVE1MRWxlbWVudD4sIGludD47CiAgICAgV0VCQ09SRV9FWFBP
UlQgRXhjZXB0aW9uT3I8dm9pZD4gYWRkKGNvbnN0IE9wdGlvbk9yT3B0R3JvdXBFbGVtZW50Jiwg
Y29uc3Qgc3RkOjpvcHRpb25hbDxIVE1MRWxlbWVudE9ySW50PiYgYmVmb3JlKTsKQEAgLTU4LDEy
ICs2MiwxNyBAQCBwcml2YXRlOgogCiBpbmxpbmUgSFRNTE9wdGlvbkVsZW1lbnQqIEhUTUxPcHRp
b25zQ29sbGVjdGlvbjo6aXRlbSh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PihDYWNoZWRIVE1MQ29sbGVjdGlvbjxIVE1MT3B0
aW9uc0NvbGxlY3Rpb24sIENvbGxlY3Rpb25UeXBlVHJhaXRzPFNlbGVjdE9wdGlvbnM+Ojp0cmF2
ZXJzYWxUeXBlPjo6aXRlbShvZmZzZXQpKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTE9wdGlv
bkVsZW1lbnQ+KEJhc2U6Oml0ZW0ob2Zmc2V0KSk7CiB9CiAKIGlubGluZSBIVE1MT3B0aW9uRWxl
bWVudCogSFRNTE9wdGlvbnNDb2xsZWN0aW9uOjpuYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lKSBjb25zdAogewotICAgIHJldHVybiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4o
Q2FjaGVkSFRNTENvbGxlY3Rpb248SFRNTE9wdGlvbnNDb2xsZWN0aW9uLCBDb2xsZWN0aW9uVHlw
ZVRyYWl0czxTZWxlY3RPcHRpb25zPjo6dHJhdmVyc2FsVHlwZT46Om5hbWVkSXRlbShuYW1lKSk7
CisgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50PihCYXNlOjpuYW1lZEl0ZW0o
bmFtZSkpOworfQorCitpbmxpbmUgRXhjZXB0aW9uT3I8dm9pZD4gSFRNTE9wdGlvbnNDb2xsZWN0
aW9uOjpzZXRJdGVtKHVuc2lnbmVkIGluZGV4LCBIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9uRWxl
bWVudCkKK3sKKyAgICByZXR1cm4gc2VsZWN0RWxlbWVudCgpLnNldEl0ZW0oaW5kZXgsIG9wdGlv
bkVsZW1lbnQpOwogfQogCiBpbmxpbmUgYm9vbCBIVE1MT3B0aW9uc0NvbGxlY3Rpb246OmVsZW1l
bnRNYXRjaGVzKEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaWRsCShyZXZpc2lvbiAyMTc3NjcpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5pZGwJKHdvcmtpbmcgY29w
eSkKQEAgLTE5LDEzICsxOSwxMiBAQAogICovCiAKIFsKLSAgICBDdXN0b21JbmRleGVkU2V0dGVy
LAogICAgIEV4cG9ydFRvV3JhcHBlZEZ1bmN0aW9uLAogICAgIEdlbmVyYXRlSXNSZWFjaGFibGU9
SW1wbE93bmVyTm9kZVJvb3QsCiAgICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAogXSBpbnRl
cmZhY2UgSFRNTE9wdGlvbnNDb2xsZWN0aW9uIDogSFRNTENvbGxlY3Rpb24gewogICAgIFtDRVJl
YWN0aW9ucywgU2V0dGVyTWF5VGhyb3dFeGNlcHRpb25dIGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25n
IGxlbmd0aDsKLSAgICAvLyBbQ0VSZWFjdGlvbnNdIHNldHRlciB2b2lkICh1bnNpZ25lZCBsb25n
IGluZGV4LCBIVE1MT3B0aW9uRWxlbWVudD8gb3B0aW9uKTsKKyAgICBbQ0VSZWFjdGlvbnNdIHNl
dHRlciB2b2lkICh1bnNpZ25lZCBsb25nIGluZGV4LCBIVE1MT3B0aW9uRWxlbWVudD8gb3B0aW9u
KTsKICAgICBbQ0VSZWFjdGlvbnMsIE1heVRocm93RXhjZXB0aW9uXSB2b2lkIGFkZCgoSFRNTE9w
dGlvbkVsZW1lbnQgb3IgSFRNTE9wdEdyb3VwRWxlbWVudCkgZWxlbWVudCwgb3B0aW9uYWwgKEhU
TUxFbGVtZW50IG9yIGxvbmcpPyBiZWZvcmUgPSBudWxsKTsKICAgICBbQ0VSZWFjdGlvbnNdIHZv
aWQgcmVtb3ZlKGxvbmcgaW5kZXgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxT
ZWxlY3RFbGVtZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxT
ZWxlY3RFbGVtZW50LmlkbAkocmV2aXNpb24gMjE3NzY3KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MU2VsZWN0RWxlbWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTE5LDM1ICsxOSwzMSBA
QAogICovCiAKIFsKLSAgICBDdXN0b21JbmRleGVkU2V0dGVyLAogICAgIEV4cG9ydE1hY3JvPVdF
QkNPUkVfRVhQT1JULAogICAgIEpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCwKIF0gaW50ZXJmYWNl
IEhUTUxTZWxlY3RFbGVtZW50IDogSFRNTEVsZW1lbnQgewotICAgIFtSZWZsZWN0XSBhdHRyaWJ1
dGUgYm9vbGVhbiBhdXRvZm9jdXM7Ci0gICAgW1JlZmxlY3RdIGF0dHJpYnV0ZSBib29sZWFuIGRp
c2FibGVkOworICAgIFtDRVJlYWN0aW9uc10gYXR0cmlidXRlIERPTVN0cmluZyBhdXRvY29tcGxl
dGU7CisgICAgW0NFUmVhY3Rpb25zLCBSZWZsZWN0XSBhdHRyaWJ1dGUgYm9vbGVhbiBhdXRvZm9j
dXM7CisgICAgW0NFUmVhY3Rpb25zLCBSZWZsZWN0XSBhdHRyaWJ1dGUgYm9vbGVhbiBkaXNhYmxl
ZDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgSFRNTEZvcm1FbGVtZW50PyBmb3JtOwotICAgIGF0
dHJpYnV0ZSBib29sZWFuIG11bHRpcGxlOwotICAgIFtSZWZsZWN0XSBhdHRyaWJ1dGUgRE9NU3Ry
aW5nIG5hbWU7Ci0gICAgW1JlZmxlY3RdIGF0dHJpYnV0ZSBib29sZWFuIHJlcXVpcmVkOwotCi0g
ICAgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgc2l6ZTsKKyAgICBbQ0VSZWFjdGlvbnNdIGF0dHJp
YnV0ZSBib29sZWFuIG11bHRpcGxlOworICAgIFtDRVJlYWN0aW9ucywgUmVmbGVjdF0gYXR0cmli
dXRlIERPTVN0cmluZyBuYW1lOworICAgIFtDRVJlYWN0aW9ucywgUmVmbGVjdF0gYXR0cmlidXRl
IGJvb2xlYW4gcmVxdWlyZWQ7CisgICAgW0NFUmVhY3Rpb25zXSBhdHRyaWJ1dGUgdW5zaWduZWQg
bG9uZyBzaXplOwogCiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyB0eXBlOwogCi0g
ICAgcmVhZG9ubHkgYXR0cmlidXRlIEhUTUxPcHRpb25zQ29sbGVjdGlvbiBvcHRpb25zOworICAg
IC8qIFtTYW1lT2JqZWN0XSAqLyByZWFkb25seSBhdHRyaWJ1dGUgSFRNTE9wdGlvbnNDb2xsZWN0
aW9uIG9wdGlvbnM7CiAgICAgW0NFUmVhY3Rpb25zLCBTZXR0ZXJNYXlUaHJvd0V4Y2VwdGlvbl0g
YXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwotCi0gICAgZ2V0dGVyIEhUTUxPcHRpb25F
bGVtZW50PyBpdGVtKHVuc2lnbmVkIGxvbmcgaW5kZXgpOworICAgIGdldHRlciBIVE1MT3B0aW9u
RWxlbWVudD8gaXRlbSh1bnNpZ25lZCBsb25nIGluZGV4KTsgLy8gRklYTUU6IFRoZSBzcGVjIGhh
cyB0aGlzIHJldHVybmluZyBFbGVtZW50Py4KICAgICBIVE1MT3B0aW9uRWxlbWVudD8gbmFtZWRJ
dGVtKERPTVN0cmluZyBuYW1lKTsKLQogICAgIFtDRVJlYWN0aW9ucywgTWF5VGhyb3dFeGNlcHRp
b25dIHZvaWQgYWRkKChIVE1MT3B0aW9uRWxlbWVudCBvciBIVE1MT3B0R3JvdXBFbGVtZW50KSBl
bGVtZW50LCBvcHRpb25hbCAoSFRNTEVsZW1lbnQgb3IgbG9uZyk/IGJlZm9yZSA9IG51bGwpOwot
Ci0gICAgW01heVRocm93RXhjZXB0aW9uXSB2b2lkIHJlbW92ZSgpOyAvLyBDaGlsZE5vZGUgb3Zl
cmxvYWQKKyAgICBbQ0VSZWFjdGlvbnMsIE1heVRocm93RXhjZXB0aW9uXSB2b2lkIHJlbW92ZSgp
OyAvLyBDaGlsZE5vZGUgb3ZlcmxvYWQKICAgICBbQ0VSZWFjdGlvbnNdIHZvaWQgcmVtb3ZlKGxv
bmcgaW5kZXgpOworICAgIFtDRVJlYWN0aW9uc10gc2V0dGVyIHZvaWQgKHVuc2lnbmVkIGxvbmcg
aW5kZXgsIEhUTUxPcHRpb25FbGVtZW50PyBvcHRpb24pOwogCi0gICAgcmVhZG9ubHkgYXR0cmli
dXRlIEhUTUxDb2xsZWN0aW9uIHNlbGVjdGVkT3B0aW9uczsKKyAgICAvKiBbU2FtZU9iamVjdF0g
Ki8gcmVhZG9ubHkgYXR0cmlidXRlIEhUTUxDb2xsZWN0aW9uIHNlbGVjdGVkT3B0aW9uczsKICAg
ICBhdHRyaWJ1dGUgbG9uZyBzZWxlY3RlZEluZGV4OwotCiAgICAgYXR0cmlidXRlIERPTVN0cmlu
ZyB2YWx1ZTsKIAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIHdpbGxWYWxpZGF0ZTsK
QEAgLTU4LDYgKzU0LDQgQEAKICAgICB2b2lkIHNldEN1c3RvbVZhbGlkaXR5KERPTVN0cmluZyBl
cnJvcik7CiAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgTm9kZUxpc3QgbGFiZWxzOwotCi0gICAg
YXR0cmlidXRlIERPTVN0cmluZyBhdXRvY29tcGxldGU7CiB9OwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9ET01XaW5kb3cuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RE9NV2luZG93LmlkbAkocmV2aXNpb24gMjE3NzY3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9E
T01XaW5kb3cuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwxMSBAQCB0eXBlZGVmIFVT
VlN0cmluZyBDU1NPTVN0cmluZzsKIAogWwogICAgIENoZWNrU2VjdXJpdHksCisgICAgQ3VzdG9t
RGVmaW5lT3duUHJvcGVydHksCiAgICAgQ3VzdG9tRGVsZXRlUHJvcGVydHksCiAgICAgQ3VzdG9t
RW51bWVyYXRlUHJvcGVydHksCiAgICAgQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90LAorICAgIEN1
c3RvbUdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgsCiAgICAgQ3VzdG9tR2V0UHJvdG90eXBlLAog
ICAgIEN1c3RvbVByZXZlbnRFeHRlbnNpb25zLAogICAgIEN1c3RvbVByb3h5VG9KU09iamVjdCwK
QEAgLTQxLDcgKzQzLDYgQEAgdHlwZWRlZiBVU1ZTdHJpbmcgQ1NTT01TdHJpbmc7CiAgICAgSW50
ZXJmYWNlTmFtZT1XaW5kb3csCiAgICAgSXNJbW11dGFibGVQcm90b3R5cGVFeG90aWNPYmplY3Qs
CiAgICAgSXNJbW11dGFibGVQcm90b3R5cGVFeG90aWNPYmplY3RPblByb3RvdHlwZSwKLSAgICBK
U0N1c3RvbURlZmluZU93blByb3BlcnR5LAogICAgIEpTQ3VzdG9tTWFya0Z1bmN0aW9uLAogICAg
IEpTQ3VzdG9tVG9OYXRpdmVPYmplY3QsCiAgICAgSlNMZWdhY3lQYXJlbnQ9SlNET01XaW5kb3dC
YXNlLApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Mb2NhdGlvbi5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9Mb2NhdGlvbi5pZGwJKHJldmlzaW9uIDIxNzc2NykKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvTG9jYXRpb24uaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwx
OCArMjgsMTggQEAKIAogWwogICAgIENoZWNrU2VjdXJpdHksCisgICAgQ3VzdG9tRGVmaW5lT3du
UHJvcGVydHksCisgICAgQ3VzdG9tRGVmaW5lT3duUHJvcGVydHlPblByb3RvdHlwZSwKICAgICBD
dXN0b21EZWxldGVQcm9wZXJ0eSwKICAgICBDdXN0b21FbnVtZXJhdGVQcm9wZXJ0eSwKKyAgICBD
dXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9yLAogICAgIEN1c3RvbUdldFByb3Rv
dHlwZSwKKyAgICBDdXN0b21OYW1lZEdldHRlck9uUHJvdG90eXBlLAogICAgIEN1c3RvbU5hbWVk
U2V0dGVyLAogICAgIEN1c3RvbVByZXZlbnRFeHRlbnNpb25zLAogICAgIEN1c3RvbVRvU3RyaW5n
TmFtZSwKICAgICBHZW5lcmF0ZUlzUmVhY2hhYmxlPUltcGxGcmFtZSwKICAgICBJc0ltbXV0YWJs
ZVByb3RvdHlwZUV4b3RpY09iamVjdCwKLSAgICBKU0N1c3RvbURlZmluZU93blByb3BlcnR5LAot
ICAgIEpTQ3VzdG9tRGVmaW5lT3duUHJvcGVydHlPblByb3RvdHlwZSwKLSAgICBKU0N1c3RvbUdl
dE93blByb3BlcnR5U2xvdEFuZERlc2NyaXB0b3IsCi0gICAgSlNDdXN0b21OYW1lZEdldHRlck9u
UHJvdG90eXBlLAogICAgIFVuZm9yZ2VhYmxlLAogXSBpbnRlcmZhY2UgTG9jYXRpb24gewogICAg
IFtTZXR0ZXJDYWxsV2l0aD1BY3RpdmVXaW5kb3cmRmlyc3RXaW5kb3csIERvTm90Q2hlY2tTZWN1
cml0eU9uU2V0dGVyXSBzdHJpbmdpZmllciBhdHRyaWJ1dGUgVVNWU3RyaW5nIGhyZWY7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UuaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVz
cGFjZS5pZGwJKHJldmlzaW9uIDIxNzc2NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlck1l
c3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcg
QEAKICAqLwogCiBbCi0gICAgSlNDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmREZXNjcmlwdG9y
LAotICAgIENvbmRpdGlvbmFsPVVTRVJfTUVTU0FHRV9IQU5ETEVSUworICAgIENvbmRpdGlvbmFs
PVVTRVJfTUVTU0FHRV9IQU5ETEVSUywKKyAgICBDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3RBbmRE
ZXNjcmlwdG9yLAogXSBpbnRlcmZhY2UgVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZSB7CiB9
OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlLmlkbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2UuaWRsCShyZXZpc2lvbiAyMTc3NjcpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2UuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0y
NSwxNCArMjUsMTMgQEAKIAogWwogICAgIEN1c3RvbUVudW1lcmF0ZVByb3BlcnR5LAotICAgIEN1
c3RvbU5hbWVkU2V0dGVyLAogICAgIEdlbmVyYXRlSXNSZWFjaGFibGU9SW1wbEZyYW1lLAogICAg
IFNraXBWVGFibGVWYWxpZGF0aW9uLAogXSBpbnRlcmZhY2UgU3RvcmFnZSB7CiAgICAgW0dldHRl
ck1heVRocm93RXhjZXB0aW9uXSByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5n
dGg7CiAgICAgW01heVRocm93RXhjZXB0aW9uXSBET01TdHJpbmc/IGtleSh1bnNpZ25lZCBsb25n
IGluZGV4KTsKICAgICBbTWF5VGhyb3dFeGNlcHRpb25dIGdldHRlciBET01TdHJpbmc/IGdldEl0
ZW0oRE9NU3RyaW5nIGtleSk7Ci0gICAgW01heVRocm93RXhjZXB0aW9uXSAvKnNldHRlciovIHZv
aWQgc2V0SXRlbShET01TdHJpbmcga2V5LCBET01TdHJpbmcgZGF0YSk7CisgICAgW01heVRocm93
RXhjZXB0aW9uXSBzZXR0ZXIgdm9pZCBzZXRJdGVtKERPTVN0cmluZyBrZXksIERPTVN0cmluZyBk
YXRhKTsKICAgICBbTWF5VGhyb3dFeGNlcHRpb25dIGRlbGV0ZXIgdm9pZCByZW1vdmVJdGVtKERP
TVN0cmluZyBrZXkpOwogICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gdm9pZCBjbGVhcigpOwogfTsK
SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDIxNzc2NykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE3LTA2LTAzICBTYW0gV2VpbmlnICA8c2Ft
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ2FuJ3QgdXNlIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgp
IHRvIGFkZCBhbiBpdGVtIHRvIGEgRE9NU3RyaW5nTWFwIG9yIFN0b3JhZ2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjY4NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICoganMvZG9tL2xlZ2FjeS1wbGF0
Zm9ybS1vYmplY3QtZGVmaW5lT3duUHJvcGVydHktZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBqcy9kb20vbGVnYWN5LXBsYXRmb3JtLW9iamVjdC1kZWZpbmVPd25Qcm9wZXJ0eS5odG1s
OiBBZGRlZC4KKyAgICAgICAgTmV3IHRlc3RzIGZvciBPYmplY3QuZGVmaW5lUHJvcGVydHkgb24g
U3RvcmFnZSBhbmQgRE9NU3RyaW5nTWFwLgorCisgICAgICAgICoganMvZG9tL25hbWVkLXByb3Bl
cnR5LWRlbGV0ZXIuaHRtbDoKKyAgICAgICAgRml4IHRlc3Qgd2hpY2ggd2FzIGRlbGV0aW5nIHRo
ZSB3cm9uZyBwcm9wZXJ0eS4gVGhpcyBkb2Vzbid0IGNoYW5nZSB0aGUgcmVzdWx0LAorICAgICAg
ICBidXQgaXMgbm93IGFjdHVhbGx5IHRlc3RpbmcgdGhlIHRoaW5nIGl0IG1lYW50IHRvLgorCisg
ICAgICAgICogc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9kZWxldGUtZGVmaW5lcHJv
cGVydHktcmVtb3ZhbC1leHBlY3RlZC50eHQ6CisgICAgICAgICogc3RvcmFnZS9kb21zdG9yYWdl
L2xvY2Fsc3RvcmFnZS9kZWxldGUtZGVmaW5lcHJvcGVydHktcmVtb3ZhbC5odG1sOgorICAgICAg
ICBDb252ZXJ0IHRvIHRlc3RoYXJuZXNzLmpzIGFuZCBzaG93IHRoYXQgdGhlIHJlc3VsdHMgYXJl
IG5vdyBjb3JyZWN0LgorCiAyMDE3LTA2LTA0ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5j
b20+CiAKICAgICAgICAgSW1wbGVtZW50IERPTU1hdHJpeFJlYWRPbmx5LnRyYW5zZm9ybVBvaW50
KCkKSW5kZXg6IExheW91dFRlc3RzL2pzL2RvbS9sZWdhY3ktcGxhdGZvcm0tb2JqZWN0LWRlZmlu
ZU93blByb3BlcnR5LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9k
b20vbGVnYWN5LXBsYXRmb3JtLW9iamVjdC1kZWZpbmVPd25Qcm9wZXJ0eS1leHBlY3RlZC50eHQJ
KG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvanMvZG9tL2xlZ2FjeS1wbGF0Zm9ybS1vYmpl
Y3QtZGVmaW5lT3duUHJvcGVydHktZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTYgQEAKKworUEFTUyBUZXN0IHRoYXQgdGhlIHNldHRpbmcgYSBub24tZXhpc3RpbmcgbmFt
ZWQgcHJvcGVydHkgd2l0aCBPYmplY3QuZGVmaW5lUHJvcGVydHkgY3JlYXRlcyB0aGUgcHJvcGVy
dHkgKFtPdmVycmlkZUJ1aWx0aW5zXSBzcGVjaWZpZWQpLiAKK1BBU1MgVGVzdCB0aGF0IHRoZSBz
ZXR0aW5nIGEgbm9uLWV4aXN0aW5nIGluZGV4ZWQgcHJvcGVydHkgd2l0aCBPYmplY3QuZGVmaW5l
UHJvcGVydHkgY3JlYXRlcyB0aGUgcHJvcGVydHkgKFtPdmVycmlkZUJ1aWx0aW5zXSBzcGVjaWZp
ZWQpLiAKK1BBU1MgVGVzdCB0aGF0IHRoZSBzZXR0aW5nIGFuIGV4aXN0aW5nIG5hbWVkIHByb3Bl
cnR5IHdpdGggT2JqZWN0LmRlZmluZVByb3BlcnR5IHJlcGxhY2VzIHRoZSB2YWx1ZSAoW092ZXJy
aWRlQnVpbHRpbnNdIHNwZWNpZmllZCkuIAorUEFTUyBUZXN0IHRoYXQgdGhlIHNldHRpbmcgYW4g
ZXhpc3RpbmcgaW5kZXhlZCBwcm9wZXJ0eSB3aXRoIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSByZXBs
YWNlcyB0aGUgdmFsdWUgKFtPdmVycmlkZUJ1aWx0aW5zXSBzcGVjaWZpZWQpLiAKK1BBU1MgVGVz
dCB0aGF0IHRoZSBzZXR0aW5nIGEgbm9uLWV4aXN0aW5nIGJ1dCBpbnZhbGlkIG5hbWVkIHByb3Bl
cnR5IHdpdGggT2JqZWN0LmRlZmluZVByb3BlcnR5IHRocm93cyAoW092ZXJyaWRlQnVpbHRpbnNd
IHNwZWNpZmllZCkuIAorUEFTUyBUZXN0IHRoYXQgdGhlIHNldHRpbmcgYSBub24tZGF0YSBkZXNj
cmlwdG9yIHByb3BlcnR5IHdpdGggT2JqZWN0LmRlZmluZVByb3BlcnR5IGRvZXMgbm90IHNldCBh
bnl0aGluZyAoW092ZXJyaWRlQnVpbHRpbnNdIHNwZWNpZmllZCkuIAorUEFTUyBUZXN0IHRoYXQg
dGhlIHNldHRpbmcgYSBuYW1lZCBwcm9wZXJ0eSB3aXRoIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSB0
aGF0IHNoYWRvd3MgYW4gZXhpc3RpbmcgcHJvdG90eXBlIHZhbHVlIHN0aWxsIGNyZWF0ZXMgdGhl
IGl0ZW0gKFtPdmVycmlkZUJ1aWx0aW5zXSBzcGVjaWZpZWQpLiAKK1BBU1MgVGVzdCB0aGF0IHRo
ZSBzZXR0aW5nIGEgbm9uLWV4aXN0aW5nIG5hbWVkIHByb3BlcnR5IHdpdGggT2JqZWN0LmRlZmlu
ZVByb3BlcnR5IGNyZWF0ZXMgdGhlIHByb3BlcnR5IChbT3ZlcnJpZGVCdWlsdGluc10gbm90IHNw
ZWNpZmllZCkuIAorUEFTUyBUZXN0IHRoYXQgdGhlIHNldHRpbmcgYSBub24tZXhpc3RpbmcgaW5k
ZXhlZCBwcm9wZXJ0eSB3aXRoIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBjcmVhdGVzIHRoZSBwcm9w
ZXJ0eSAoW092ZXJyaWRlQnVpbHRpbnNdIG5vdCBzcGVjaWZpZWQpLiAKK1BBU1MgVGVzdCB0aGF0
IHRoZSBzZXR0aW5nIGFuIGV4aXN0aW5nIG5hbWVkIHByb3BlcnR5IHdpdGggT2JqZWN0LmRlZmlu
ZVByb3BlcnR5IHJlcGxhY2VzIHRoZSB2YWx1ZSAoW092ZXJyaWRlQnVpbHRpbnNdIG5vdCBzcGVj
aWZpZWQpLiAKK1BBU1MgVGVzdCB0aGF0IHRoZSBzZXR0aW5nIGFuIGV4aXN0aW5nIGluZGV4ZWQg
cHJvcGVydHkgd2l0aCBPYmplY3QuZGVmaW5lUHJvcGVydHkgcmVwbGFjZXMgdGhlIHZhbHVlIChb
T3ZlcnJpZGVCdWlsdGluc10gbm90IHNwZWNpZmllZCkuIAorUEFTUyBUZXN0IHRoYXQgdGhlIHNl
dHRpbmcgYSBub24tZGF0YSBkZXNjcmlwdG9yIHByb3BlcnR5IHdpdGggT2JqZWN0LmRlZmluZVBy
b3BlcnR5IGRvZXMgbm90IHNldCBhbnl0aGluZyAoW092ZXJyaWRlQnVpbHRpbnNdIG5vdCBzcGVj
aWZpZWQpLiAKK1BBU1MgVGVzdCB0aGF0IHRoZSBzZXR0aW5nIGEgbmFtZWQgcHJvcGVydHkgd2l0
aCBPYmplY3QuZGVmaW5lUHJvcGVydHkgdGhhdCBzaGFkb3dzIGFuIGV4aXN0aW5nIHByb3RvdHlw
ZSB2YWx1ZSBzdGlsbCBjcmVhdGVzIHRoZSBpdGVtIChbT3ZlcnJpZGVCdWlsdGluc10gbm90IHNw
ZWNpZmllZCkuIAorUEFTUyBUZXN0IHRoYXQgdGhlIHRyeWluZyB0byBzZXQgYSBuYW1lZCBwcm9w
ZXJ0eSwgbWF0Y2hpbmcgYSBidWlsdGluIHByb3BlcnR5IG5hbWUsIHdpdGggT2JqZWN0LmRlZmlu
ZVByb3BlcnR5IGRvZXMgbm90aGluZyAoW092ZXJyaWRlQnVpbHRpbnNdIG5vdCBzcGVjaWZpZWQp
LiAKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvZG9tL2xlZ2FjeS1wbGF0Zm9ybS1vYmplY3QtZGVm
aW5lT3duUHJvcGVydHkuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9kb20vbGVn
YWN5LXBsYXRmb3JtLW9iamVjdC1kZWZpbmVPd25Qcm9wZXJ0eS5odG1sCShub25leGlzdGVudCkK
KysrIExheW91dFRlc3RzL2pzL2RvbS9sZWdhY3ktcGxhdGZvcm0tb2JqZWN0LWRlZmluZU93blBy
b3BlcnR5Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDkgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlw
dD4KKyAgICAvLyBUbyB0ZXN0IGEgbmFtZWQgcHJvcGVydHkgc2V0dGVyIHdpdGggW092ZXJyaWRl
QnVpbHRpbnNdIHNwZWNpZmllZCwgd2UgdXNlIERPTVN0cmluZ01hcCB2aWEgZWxlbWVudC5kYXRh
c2V0LgorICAgIHRlc3QoKCkgPT4geworICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICBlbGVtZW50LmRhdGFzZXRbImEiXSA9ICJ2YWx1
ZTEiOworICAgICAgICBlbGVtZW50LmRhdGFzZXRbImIiXSA9ICJ2YWx1ZTIiOworICAgICAgICAK
KyAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQuZGF0YXNldCwgImMiLCB7IHZh
bHVlOiAidmFsdWUzIiB9KTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhlbGVtZW50LmRhdGFzZXRb
ImMiXSwgInZhbHVlMyIpOworICAgICAgICBhc3NlcnRfZXF1YWxzKGVsZW1lbnQuZ2V0QXR0cmli
dXRlKCJkYXRhLWMiKSwgInZhbHVlMyIpCisgICAgfSwgIlRlc3QgdGhhdCB0aGUgc2V0dGluZyBh
IG5vbi1leGlzdGluZyBuYW1lZCBwcm9wZXJ0eSB3aXRoIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBj
cmVhdGVzIHRoZSBwcm9wZXJ0eSAoW092ZXJyaWRlQnVpbHRpbnNdIHNwZWNpZmllZCkuIik7CisK
KyAgICB0ZXN0KCgpID0+IHsKKyAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJkaXYiKTsKKyAgICAgICAgZWxlbWVudC5kYXRhc2V0WzFdID0gInZhbHVlMSI7Cisg
ICAgICAgIGVsZW1lbnQuZGF0YXNldFsyXSA9ICJ2YWx1ZTIiOworICAgICAgICAKKyAgICAgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQuZGF0YXNldCwgMywgeyB2YWx1ZTogInZhbHVl
MyIgfSk7CisgICAgICAgIGFzc2VydF9lcXVhbHMoZWxlbWVudC5kYXRhc2V0WzNdLCAidmFsdWUz
Iik7CisgICAgICAgIGFzc2VydF9lcXVhbHMoZWxlbWVudC5nZXRBdHRyaWJ1dGUoImRhdGEtMyIp
LCAidmFsdWUzIikKKyAgICB9LCAiVGVzdCB0aGF0IHRoZSBzZXR0aW5nIGEgbm9uLWV4aXN0aW5n
IGluZGV4ZWQgcHJvcGVydHkgd2l0aCBPYmplY3QuZGVmaW5lUHJvcGVydHkgY3JlYXRlcyB0aGUg
cHJvcGVydHkgKFtPdmVycmlkZUJ1aWx0aW5zXSBzcGVjaWZpZWQpLiIpOworCisgICAgdGVzdCgo
KSA9PiB7CisgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2
Iik7CisgICAgICAgIGVsZW1lbnQuZGF0YXNldFsiYSJdID0gInZhbHVlMSI7CisgICAgICAgIGVs
ZW1lbnQuZGF0YXNldFsiYiJdID0gInZhbHVlMiI7CisgICAgICAgIAorICAgICAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoZWxlbWVudC5kYXRhc2V0LCAiYSIsIHsgdmFsdWU6ICJ2YWx1ZTMiIH0p
OworICAgICAgICBhc3NlcnRfZXF1YWxzKGVsZW1lbnQuZGF0YXNldFsiYSJdLCAidmFsdWUzIik7
CisgICAgICAgIGFzc2VydF9lcXVhbHMoZWxlbWVudC5nZXRBdHRyaWJ1dGUoImRhdGEtYSIpLCAi
dmFsdWUzIikKKyAgICB9LCAiVGVzdCB0aGF0IHRoZSBzZXR0aW5nIGFuIGV4aXN0aW5nIG5hbWVk
IHByb3BlcnR5IHdpdGggT2JqZWN0LmRlZmluZVByb3BlcnR5IHJlcGxhY2VzIHRoZSB2YWx1ZSAo
W092ZXJyaWRlQnVpbHRpbnNdIHNwZWNpZmllZCkuIik7CisKKyAgICB0ZXN0KCgpID0+IHsKKyAg
ICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAg
ICAgZWxlbWVudC5kYXRhc2V0WzFdID0gInZhbHVlMSI7CisgICAgICAgIGVsZW1lbnQuZGF0YXNl
dFsyXSA9ICJ2YWx1ZTIiOworICAgICAgICAKKyAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5
KGVsZW1lbnQuZGF0YXNldCwgMSwgeyB2YWx1ZTogInZhbHVlMyIgfSk7CisgICAgICAgIGFzc2Vy
dF9lcXVhbHMoZWxlbWVudC5kYXRhc2V0WzFdLCAidmFsdWUzIik7CisgICAgICAgIGFzc2VydF9l
cXVhbHMoZWxlbWVudC5nZXRBdHRyaWJ1dGUoImRhdGEtMSIpLCAidmFsdWUzIikKKyAgICB9LCAi
VGVzdCB0aGF0IHRoZSBzZXR0aW5nIGFuIGV4aXN0aW5nIGluZGV4ZWQgcHJvcGVydHkgd2l0aCBP
YmplY3QuZGVmaW5lUHJvcGVydHkgcmVwbGFjZXMgdGhlIHZhbHVlIChbT3ZlcnJpZGVCdWlsdGlu
c10gc3BlY2lmaWVkKS4iKTsKKworICAgIHRlc3QoKCkgPT4geworICAgICAgICBsZXQgZWxlbWVu
dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICBlbGVtZW50LmRhdGFz
ZXRbImEiXSA9ICJ2YWx1ZTEiOworICAgICAgICBlbGVtZW50LmRhdGFzZXRbImIiXSA9ICJ2YWx1
ZTIiOworICAgICAgICAKKyAgICAgICAgYXNzZXJ0X3Rocm93cygiU3ludGF4RXJyb3IiLCAoKSA9
PiB7CisgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudC5kYXRhc2V0LCAi
LWludmFsaWQiLCB7IHZhbHVlOiAidmFsdWUzIiB9KTsgICAgICAgICAgICAKKyAgICAgICAgfSk7
CisgICAgICAgIGFzc2VydF9ub3RfZXF1YWxzKGVsZW1lbnQuZGF0YXNldFsiLWludmFsaWQiXSwg
J3ZhbHVlMycpOworICAgICAgICBhc3NlcnRfbm90X2VxdWFscyhlbGVtZW50LmdldEF0dHJpYnV0
ZSgiZGF0YS0taW52YWxpZCIpLCAidmFsdWUzIikKKyAgICB9LCAiVGVzdCB0aGF0IHRoZSBzZXR0
aW5nIGEgbm9uLWV4aXN0aW5nIGJ1dCBpbnZhbGlkIG5hbWVkIHByb3BlcnR5IHdpdGggT2JqZWN0
LmRlZmluZVByb3BlcnR5IHRocm93cyAoW092ZXJyaWRlQnVpbHRpbnNdIHNwZWNpZmllZCkuIik7
CisKKyAgICB0ZXN0KCgpID0+IHsKKyAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgZWxlbWVudC5kYXRhc2V0WyJhIl0gPSAidmFsdWUx
IjsKKyAgICAgICAgZWxlbWVudC5kYXRhc2V0WyJiIl0gPSAidmFsdWUyIjsKKyAgICAgICAgCisg
ICAgICAgIGFzc2VydF9lcXVhbHMoZWxlbWVudC5kYXRhc2V0WyJjIl0sIHVuZGVmaW5lZCk7Cisg
ICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LmRhdGFzZXQsICJjIiwgeyAKKyAg
ICAgICAgICAgIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiAxOyB9LAorICAgICAgICAgICAgc2V0
OiBmdW5jdGlvbihuZXdWYWx1ZSkgeyB9CisgICAgICAgIH0pOworICAgICAgICBhc3NlcnRfZXF1
YWxzKGVsZW1lbnQuZGF0YXNldFsiYyJdLCB1bmRlZmluZWQpOworICAgIH0sICJUZXN0IHRoYXQg
dGhlIHNldHRpbmcgYSBub24tZGF0YSBkZXNjcmlwdG9yIHByb3BlcnR5IHdpdGggT2JqZWN0LmRl
ZmluZVByb3BlcnR5IGRvZXMgbm90IHNldCBhbnl0aGluZyAoW092ZXJyaWRlQnVpbHRpbnNdIHNw
ZWNpZmllZCkuIik7CisKKyAgICB0ZXN0KCh0KSA9PiB7CisgICAgICAgIHQuYWRkX2NsZWFudXAo
KCkgPT4geworICAgICAgICAgIGRlbGV0ZSBET01TdHJpbmdNYXAucHJvdG90eXBlWyJjIl07Cisg
ICAgICAgIH0pOworICAgIAorICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImRpdiIpOworICAgIAorICAgICAgICBET01TdHJpbmdNYXAucHJvdG90eXBlWyJjIl0g
PSAncHJvdG90eXBlLXZhbHVlJzsKKyAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1l
bnQuZGF0YXNldCwgImMiLCB7IHZhbHVlOiAibWFwLXZhbHVlIiB9KTsKKyAgICAgICAgCisgICAg
ICAgIGFzc2VydF9lcXVhbHMoZWxlbWVudC5kYXRhc2V0WyJjIl0sICJtYXAtdmFsdWUiKTsKKyAg
ICAgICAgYXNzZXJ0X2VxdWFscyhlbGVtZW50LmdldEF0dHJpYnV0ZSgiZGF0YS1jIiksICJtYXAt
dmFsdWUiKQorICAgICAgICBhc3NlcnRfZXF1YWxzKERPTVN0cmluZ01hcC5wcm90b3R5cGVbImMi
XSwgInByb3RvdHlwZS12YWx1ZSIpCisgICAgfSwgIlRlc3QgdGhhdCB0aGUgc2V0dGluZyBhIG5h
bWVkIHByb3BlcnR5IHdpdGggT2JqZWN0LmRlZmluZVByb3BlcnR5IHRoYXQgc2hhZG93cyBhbiBl
eGlzdGluZyBwcm90b3R5cGUgdmFsdWUgc3RpbGwgY3JlYXRlcyB0aGUgaXRlbSAoW092ZXJyaWRl
QnVpbHRpbnNdIHNwZWNpZmllZCkuIik7CisKKworICAgIC8vIFRvIHRlc3QgYSBuYW1lZCBwcm9w
ZXJ0eSBzZXR0ZXIgd2l0aG91dCBbT3ZlcnJpZGVCdWlsdGluc10gc3BlY2lmaWVkLCB3ZSB1c2Ug
U3RvcmFnZSB2aWEgd2luZG93LnNlc3Npb25TdG9yYWdlLgorICAgIHRlc3QoKHQpID0+IHsKKyAg
ICAgICAgdC5hZGRfY2xlYW51cCgoKSA9PiB7CisgICAgICAgICAgd2luZG93LnNlc3Npb25TdG9y
YWdlLmNsZWFyKCk7CisgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgd2luZG93LnNlc3Np
b25TdG9yYWdlLmNsZWFyKCk7CisgICAgICAgIGFzc2VydF9lcXVhbHMod2luZG93LnNlc3Npb25T
dG9yYWdlLmxlbmd0aCwgMCk7CisgICAgCisgICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZVsi
YSJdID0gInZhbHVlMSI7CisgICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZVsiYiJdID0gInZh
bHVlMiI7CisgICAgICAgIAorICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LnNl
c3Npb25TdG9yYWdlLCAiYyIsIHsgdmFsdWU6ICJ2YWx1ZTMiIH0pOworICAgICAgICBhc3NlcnRf
ZXF1YWxzKHdpbmRvdy5zZXNzaW9uU3RvcmFnZVsiYyJdLCAidmFsdWUzIik7CisgICAgICAgIGFz
c2VydF9lcXVhbHMod2luZG93LnNlc3Npb25TdG9yYWdlLmdldEl0ZW0oImMiKSwgInZhbHVlMyIp
CisgICAgfSwgIlRlc3QgdGhhdCB0aGUgc2V0dGluZyBhIG5vbi1leGlzdGluZyBuYW1lZCBwcm9w
ZXJ0eSB3aXRoIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBjcmVhdGVzIHRoZSBwcm9wZXJ0eSAoW092
ZXJyaWRlQnVpbHRpbnNdIG5vdCBzcGVjaWZpZWQpLiIpOworCisgICAgdGVzdCgodCkgPT4gewor
ICAgICAgICB0LmFkZF9jbGVhbnVwKCgpID0+IHsKKyAgICAgICAgICB3aW5kb3cuc2Vzc2lvblN0
b3JhZ2UuY2xlYXIoKTsKKyAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICB3aW5kb3cuc2Vz
c2lvblN0b3JhZ2UuY2xlYXIoKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyh3aW5kb3cuc2Vzc2lv
blN0b3JhZ2UubGVuZ3RoLCAwKTsKKyAgICAKKyAgICAgICAgd2luZG93LnNlc3Npb25TdG9yYWdl
WyJhIl0gPSAidmFsdWUxIjsKKyAgICAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlWyJiIl0gPSAi
dmFsdWUyIjsKKyAgICAgICAgICAgIAorICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2lu
ZG93LnNlc3Npb25TdG9yYWdlLCAzLCB7IHZhbHVlOiAidmFsdWUzIiB9KTsKKyAgICAgICAgYXNz
ZXJ0X2VxdWFscyh3aW5kb3cuc2Vzc2lvblN0b3JhZ2VbM10sICJ2YWx1ZTMiKTsKKyAgICAgICAg
YXNzZXJ0X2VxdWFscyh3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgiMyIpLCAidmFsdWUz
IikKKyAgICB9LCAiVGVzdCB0aGF0IHRoZSBzZXR0aW5nIGEgbm9uLWV4aXN0aW5nIGluZGV4ZWQg
cHJvcGVydHkgd2l0aCBPYmplY3QuZGVmaW5lUHJvcGVydHkgY3JlYXRlcyB0aGUgcHJvcGVydHkg
KFtPdmVycmlkZUJ1aWx0aW5zXSBub3Qgc3BlY2lmaWVkKS4iKTsKKworICAgIHRlc3QoKHQpID0+
IHsKKyAgICAgICAgdC5hZGRfY2xlYW51cCgoKSA9PiB7CisgICAgICAgICAgd2luZG93LnNlc3Np
b25TdG9yYWdlLmNsZWFyKCk7CisgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgd2luZG93
LnNlc3Npb25TdG9yYWdlLmNsZWFyKCk7CisgICAgICAgIGFzc2VydF9lcXVhbHMod2luZG93LnNl
c3Npb25TdG9yYWdlLmxlbmd0aCwgMCk7CisgICAgCisgICAgICAgIHdpbmRvdy5zZXNzaW9uU3Rv
cmFnZVsiYSJdID0gInZhbHVlMSI7CisgICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZVsiYiJd
ID0gInZhbHVlMiI7CisgICAgICAgIAorICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2lu
ZG93LnNlc3Npb25TdG9yYWdlLCAiYSIsIHsgdmFsdWU6ICJ2YWx1ZTMiIH0pOworICAgICAgICBh
c3NlcnRfZXF1YWxzKHdpbmRvdy5zZXNzaW9uU3RvcmFnZVsiYSJdLCAidmFsdWUzIik7CisgICAg
ICAgIGFzc2VydF9lcXVhbHMod2luZG93LnNlc3Npb25TdG9yYWdlLmdldEl0ZW0oImEiKSwgInZh
bHVlMyIpCisgICAgfSwgIlRlc3QgdGhhdCB0aGUgc2V0dGluZyBhbiBleGlzdGluZyBuYW1lZCBw
cm9wZXJ0eSB3aXRoIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSByZXBsYWNlcyB0aGUgdmFsdWUgKFtP
dmVycmlkZUJ1aWx0aW5zXSBub3Qgc3BlY2lmaWVkKS4iKTsKKworICAgIHRlc3QoKHQpID0+IHsK
KyAgICAgICAgdC5hZGRfY2xlYW51cCgoKSA9PiB7CisgICAgICAgICAgd2luZG93LnNlc3Npb25T
dG9yYWdlLmNsZWFyKCk7CisgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgd2luZG93LnNl
c3Npb25TdG9yYWdlLmNsZWFyKCk7CisgICAgICAgIGFzc2VydF9lcXVhbHMod2luZG93LnNlc3Np
b25TdG9yYWdlLmxlbmd0aCwgMCk7CisgICAgCisgICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFn
ZVsiYSJdID0gInZhbHVlMSI7CisgICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZVsiYiJdID0g
InZhbHVlMiI7CisgICAgICAgICAgICAKKyAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdp
bmRvdy5zZXNzaW9uU3RvcmFnZSwgMSwgeyB2YWx1ZTogInZhbHVlMyIgfSk7CisgICAgICAgIGFz
c2VydF9lcXVhbHMod2luZG93LnNlc3Npb25TdG9yYWdlWzFdLCAidmFsdWUzIik7CisgICAgICAg
IGFzc2VydF9lcXVhbHMod2luZG93LnNlc3Npb25TdG9yYWdlLmdldEl0ZW0oIjEiKSwgInZhbHVl
MyIpCisgICAgfSwgIlRlc3QgdGhhdCB0aGUgc2V0dGluZyBhbiBleGlzdGluZyBpbmRleGVkIHBy
b3BlcnR5IHdpdGggT2JqZWN0LmRlZmluZVByb3BlcnR5IHJlcGxhY2VzIHRoZSB2YWx1ZSAoW092
ZXJyaWRlQnVpbHRpbnNdIG5vdCBzcGVjaWZpZWQpLiIpOworCisgICAgdGVzdCgodCkgPT4gewor
ICAgICAgICB0LmFkZF9jbGVhbnVwKCgpID0+IHsKKyAgICAgICAgICB3aW5kb3cuc2Vzc2lvblN0
b3JhZ2UuY2xlYXIoKTsKKyAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICB3aW5kb3cuc2Vz
c2lvblN0b3JhZ2UuY2xlYXIoKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyh3aW5kb3cuc2Vzc2lv
blN0b3JhZ2UubGVuZ3RoLCAwKTsKKyAgICAKKyAgICAgICAgd2luZG93LnNlc3Npb25TdG9yYWdl
WyJhIl0gPSAidmFsdWUxIjsKKyAgICAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlWyJiIl0gPSAi
dmFsdWUyIjsKKyAgICAgICAgCisgICAgICAgIGFzc2VydF9lcXVhbHMod2luZG93LnNlc3Npb25T
dG9yYWdlWyJjIl0sIHVuZGVmaW5lZCk7CisgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3
aW5kb3cuc2Vzc2lvblN0b3JhZ2UsICJjIiwgeyAKKyAgICAgICAgICAgIGdldDogZnVuY3Rpb24o
KSB7IHJldHVybiAxOyB9LAorICAgICAgICAgICAgc2V0OiBmdW5jdGlvbihuZXdWYWx1ZSkgeyB9
CisgICAgICAgIH0pOworICAgICAgICBhc3NlcnRfZXF1YWxzKHdpbmRvdy5zZXNzaW9uU3RvcmFn
ZVsiYyJdLCB1bmRlZmluZWQpOworICAgIH0sICJUZXN0IHRoYXQgdGhlIHNldHRpbmcgYSBub24t
ZGF0YSBkZXNjcmlwdG9yIHByb3BlcnR5IHdpdGggT2JqZWN0LmRlZmluZVByb3BlcnR5IGRvZXMg
bm90IHNldCBhbnl0aGluZyAoW092ZXJyaWRlQnVpbHRpbnNdIG5vdCBzcGVjaWZpZWQpLiIpOwor
CisgICAgdGVzdCgodCkgPT4geworICAgICAgICB0LmFkZF9jbGVhbnVwKCgpID0+IHsKKyAgICAg
ICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5jbGVhcigpOworICAgICAgICAgICAgZGVsZXRl
IFN0b3JhZ2UucHJvdG90eXBlWyJjIl07CisgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAg
U3RvcmFnZS5wcm90b3R5cGVbImMiXSA9ICdwcm90b3R5cGUtdmFsdWUnOworICAgICAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkod2luZG93LnNlc3Npb25TdG9yYWdlLCAiYyIsIHsgdmFsdWU6ICJt
YXAtdmFsdWUiIH0pOworICAgICAgICAKKyAgICAgICAgYXNzZXJ0X2VxdWFscyh3aW5kb3cuc2Vz
c2lvblN0b3JhZ2VbImMiXSwgInByb3RvdHlwZS12YWx1ZSIpOworICAgICAgICBhc3NlcnRfZXF1
YWxzKHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCJjIiksICJtYXAtdmFsdWUiKQorICAg
ICAgICBhc3NlcnRfZXF1YWxzKFN0b3JhZ2UucHJvdG90eXBlWyJjIl0sICJwcm90b3R5cGUtdmFs
dWUiKQorICAgIH0sICJUZXN0IHRoYXQgdGhlIHNldHRpbmcgYSBuYW1lZCBwcm9wZXJ0eSB3aXRo
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSB0aGF0IHNoYWRvd3MgYW4gZXhpc3RpbmcgcHJvdG90eXBl
IHZhbHVlIHN0aWxsIGNyZWF0ZXMgdGhlIGl0ZW0gKFtPdmVycmlkZUJ1aWx0aW5zXSBub3Qgc3Bl
Y2lmaWVkKS4iKTsKKworCisgICAgdGVzdCgodCkgPT4geworICAgICAgICB0LmFkZF9jbGVhbnVw
KCgpID0+IHsKKyAgICAgICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuY2xlYXIoKTsKKyAgICAg
ICAgfSk7CisgICAgICAgIAorICAgICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuY2xlYXIoKTsK
KyAgICAgICAgYXNzZXJ0X2VxdWFscyh3aW5kb3cuc2Vzc2lvblN0b3JhZ2UubGVuZ3RoLCAwKTsK
KyAgICAKKyAgICAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlWyJhIl0gPSAidmFsdWUxIjsKKyAg
ICAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlWyJiIl0gPSAidmFsdWUyIjsKKworICAgICAgICBs
ZXQgY3VycmVudExlbmd0aCA9IHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5sZW5ndGg7CisgICAgICAg
IAorICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LnNlc3Npb25TdG9yYWdlLCAi
bGVuZ3RoIiwgeyB2YWx1ZTogInZhbHVlMyIgfSk7CisgICAgICAgIGFzc2VydF9lcXVhbHMod2lu
ZG93LnNlc3Npb25TdG9yYWdlWydsZW5ndGgnXSwgY3VycmVudExlbmd0aCArIDEpOworICAgICAg
ICBhc3NlcnRfZXF1YWxzKHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCJsZW5ndGgiKSwg
InZhbHVlMyIpCisgICAgfSwgIlRlc3QgdGhhdCB0aGUgdHJ5aW5nIHRvIHNldCBhIG5hbWVkIHBy
b3BlcnR5LCBtYXRjaGluZyBhIGJ1aWx0aW4gcHJvcGVydHkgbmFtZSwgd2l0aCBPYmplY3QuZGVm
aW5lUHJvcGVydHkgZG9lcyBub3RoaW5nIChbT3ZlcnJpZGVCdWlsdGluc10gbm90IHNwZWNpZmll
ZCkuIik7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pz
L2RvbS9uYW1lZC1wcm9wZXJ0eS1kZWxldGVyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvanMvZG9tL25hbWVkLXByb3BlcnR5LWRlbGV0ZXIuaHRtbAkocmV2aXNpb24gMjE3NzY3KQor
KysgTGF5b3V0VGVzdHMvanMvZG9tL25hbWVkLXByb3BlcnR5LWRlbGV0ZXIuaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogCiAgICAgICAgIERPTVN0cmluZ01hcC5wcm90b3R5cGVb
ImN1c3RvbVByb3BlcnR5Il0gPSAncHJvdG90eXBlLXZhbHVlJzsKLSAgICAgICAgYXNzZXJ0X3Ry
dWUoZGVsZXRlIGVsZW1lbnRbImN1c3RvbVByb3BlcnR5Il0sICIiKTsKKyAgICAgICAgYXNzZXJ0
X3RydWUoZGVsZXRlIGVsZW1lbnQuZGF0YXNldFsiY3VzdG9tUHJvcGVydHkiXSwgIiIpOwogICAg
ICAgICBhc3NlcnRfZXF1YWxzKERPTVN0cmluZ01hcC5wcm90b3R5cGVbImN1c3RvbVByb3BlcnR5
Il0sICdwcm90b3R5cGUtdmFsdWUnKTsKICAgICB9LCAiVGVzdCB0aGF0IGRlbGV0aW5nIGEgcHJv
cGVydHkgdGhhdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwLCBidXQgZG9lcyBvbiB0aGUgcHJv
dG90eXBlLCB3aWxsIHJldHVybiB0cnVlIGFuZCBub3QgcmVtb3ZlIHRoZSBwcm9wZXJ0eSBmcm9t
IHRoZSBwcm90b3R5cGUgKFtPdmVycmlkZUJ1aWx0aW5zXSBzcGVjaWZpZWQpLiIpOwogCkluZGV4
OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL2RlbGV0ZS1kZWZp
bmVwcm9wZXJ0eS1yZW1vdmFsLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9zdG9yYWdlL2RvbXN0b3JhZ2UvbG9jYWxzdG9yYWdlL2RlbGV0ZS1kZWZpbmVwcm9wZXJ0eS1y
ZW1vdmFsLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjE3NzY3KQorKysgTGF5b3V0VGVzdHMvc3Rv
cmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9kZWxldGUtZGVmaW5lcHJvcGVydHktcmVtb3Zh
bC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMzIgKzEsNiBAQAotbG9jYWxTdG9y
YWdlLmNsZWFyKCkKLU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGxvY2FsU3RvcmFnZSkgaXMg
KCkKLQotT2JqZWN0LmRlZmluZVByb3BlcnR5KGxvY2FsU3RvcmFnZSwgJzEnLCB7dmFsdWU6ICdw
cmVzZW50J30pCi1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhsb2NhbFN0b3JhZ2UpIGlzICgx
KQotbG9jYWxTdG9yYWdlLmdldEl0ZW0oJzEnKSBpcyBudWxsCi0KLWRlbGV0ZSBsb2NhbFN0b3Jh
Z2VbMV0KLU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGxvY2FsU3RvcmFnZSkgaXMgKDEpCi0K
LU9iamVjdC5kZWZpbmVQcm9wZXJ0eShsb2NhbFN0b3JhZ2UsICcyJywge3ZhbHVlOiAncHJlc2Vu
dCcsICBjb25maWd1cmFibGU6IHRydWV9KQotT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobG9j
YWxTdG9yYWdlKSBpcyAoMSwyKQotbG9jYWxTdG9yYWdlLmdldEl0ZW0oJzInKSBpcyBudWxsCi0K
LWRlbGV0ZSBsb2NhbFN0b3JhZ2VbMl0KLU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGxvY2Fs
U3RvcmFnZSkgaXMgKDEpCi0KLU9iamVjdC5kZWZpbmVQcm9wZXJ0eShsb2NhbFN0b3JhZ2UsICdU
ZXN0Jywge3ZhbHVlOiAncHJlc2VudCcsICBjb25maWd1cmFibGU6IHRydWV9KQotT2JqZWN0Lmdl
dE93blByb3BlcnR5TmFtZXMobG9jYWxTdG9yYWdlKSBpcyAoMSxUZXN0KQotbG9jYWxTdG9yYWdl
LmdldEl0ZW0oJ1Rlc3QnKSBpcyBudWxsCi0KLWRlbGV0ZSBsb2NhbFN0b3JhZ2VbJ1Rlc3QnXQot
T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobG9jYWxTdG9yYWdlKSBpcyAoMSkKLQotT2JqZWN0
LmRlZmluZVByb3BlcnR5KGxvY2FsU3RvcmFnZSwgJ1Rlc3QxJywge3ZhbHVlOiAncHJlc2VudCd9
KQotT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobG9jYWxTdG9yYWdlKSBpcyAoMSxUZXN0MSkK
LWxvY2FsU3RvcmFnZS5nZXRJdGVtKCdUZXN0MScpIGlzIG51bGwKLQotZGVsZXRlIGxvY2FsU3Rv
cmFnZVsnVGVzdDEnXQotT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobG9jYWxTdG9yYWdlKSBp
cyAoMSxUZXN0MSkKIAorUEFTUyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhsb2NhbFN0b3Jh
Z2UpIG9uIGFuIGVtcHR5IGxvY2FsIHN0b3JhZ2Ugc2hvdWxkIHJldHVybiBhbiBlbXB0eSBhcnJh
eS4gCitQQVNTIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBjYW4gYmUgdXNlZCB0byBhZGQgaXRlbXMg
dG8gbG9jYWxTdG9yYWdlLiAKK1BBU1MgT3BlcmF0b3IgZGVsZXRlIGNhbiBiZSB1c2VkIHRvIHJl
bW92ZSBpdGVtcyBmcm9tIGxvY2FsU3RvcmFnZS4gCitQQVNTIFRoZSBjb25maWd1cmFibGUgbW9k
aWZpZXIgZG9lcyBlZmZlY3QgdGhlIHJlc3VsdCB3aGVuIHVzZWQgaW4gYWRkaW5nIHByb3BlcnRp
ZXMgdG8gbG9jYWxTdG9yYWdlIHdpdGggT2JqZWN0LmRlZmluZVByb3BlcnR5LiAKIApJbmRleDog
TGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xvY2Fsc3RvcmFnZS9kZWxldGUtZGVmaW5l
cHJvcGVydHktcmVtb3ZhbC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2Uv
ZG9tc3RvcmFnZS9sb2NhbHN0b3JhZ2UvZGVsZXRlLWRlZmluZXByb3BlcnR5LXJlbW92YWwuaHRt
bAkocmV2aXNpb24gMjE3NzY3KQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9kb21zdG9yYWdlL2xv
Y2Fsc3RvcmFnZS9kZWxldGUtZGVmaW5lcHJvcGVydHktcmVtb3ZhbC5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYwICsxLDM0IEBACi08cHJlIGlkPSdjb25zb2xlJz48L3ByZT4KKzxoZWFkPgor
ICAgIDxzY3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2Ny
aXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBv
cnQuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CiA8c2NyaXB0PgotZnVuY3Rpb24gcnVu
VGVzdCgpIHsKLSAgICBmdW5jdGlvbiBsb2cobXNnKQotICAgIHsKLSAgICAgICAgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBlbmQobXNnICsgJ1xuJyk7Ci0gICAgfQorICAg
IGxvY2FsU3RvcmFnZS5jbGVhcigpOwogCi0gICAgZnVuY3Rpb24gbG9nQW5kRXZhbChzdHIpCi0g
ICAgewotICAgICAgICBsb2coc3RyKTsKLSAgICAgICAgZXZhbChzdHIpOwotICAgIH0KKyAgICB0
ZXN0KCgpID0+IHsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhPYmplY3QuZ2V0T3duUHJv
cGVydHlOYW1lcyhsb2NhbFN0b3JhZ2UpLCBbXSk7CisgICAgfSwgIk9iamVjdC5nZXRPd25Qcm9w
ZXJ0eU5hbWVzKGxvY2FsU3RvcmFnZSkgb24gYW4gZW1wdHkgbG9jYWwgc3RvcmFnZSBzaG91bGQg
cmV0dXJuIGFuIGVtcHR5IGFycmF5LiIpOworCisgICAgdGVzdCgoKSA9PiB7CisgICAgICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShsb2NhbFN0b3JhZ2UsICcxJywge3ZhbHVlOiAncHJlc2VudCd9
KTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnMScpLCAncHJl
c2VudCcpOworICAgICAgICBhc3NlcnRfYXJyYXlfZXF1YWxzKE9iamVjdC5nZXRPd25Qcm9wZXJ0
eU5hbWVzKGxvY2FsU3RvcmFnZSksIFsnMSddKTsKKyAgICB9LCAiT2JqZWN0LmRlZmluZVByb3Bl
cnR5IGNhbiBiZSB1c2VkIHRvIGFkZCBpdGVtcyB0byBsb2NhbFN0b3JhZ2UuIik7CisKKyAgICB0
ZXN0KCgpID0+IHsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhkZWxldGUgbG9jYWxTdG9yYWdlWzFd
LCB0cnVlKTsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhPYmplY3QuZ2V0T3duUHJvcGVy
dHlOYW1lcyhsb2NhbFN0b3JhZ2UpLCBbXSk7CisgICAgfSwgIk9wZXJhdG9yIGRlbGV0ZSBjYW4g
YmUgdXNlZCB0byByZW1vdmUgaXRlbXMgZnJvbSBsb2NhbFN0b3JhZ2UuIik7CisKKyAgICB0ZXN0
KCgpID0+IHsKKyAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGxvY2FsU3RvcmFnZSwgJzIn
LCB7dmFsdWU6ICdwcmVzZW50JywgY29uZmlndXJhYmxlOiBmYWxzZX0pOworICAgICAgICBhc3Nl
cnRfZXF1YWxzKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCcyJyksICdwcmVzZW50Jyk7CisgICAgICAg
IGFzc2VydF9hcnJheV9lcXVhbHMoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobG9jYWxTdG9y
YWdlKSwgWycyJ10pOworICAgICAgICAKKyAgICAgICAgYXNzZXJ0X2VxdWFscyhkZWxldGUgbG9j
YWxTdG9yYWdlWzJdLCB0cnVlKTsKKyAgICAgICAgYXNzZXJ0X2FycmF5X2VxdWFscyhPYmplY3Qu
Z2V0T3duUHJvcGVydHlOYW1lcyhsb2NhbFN0b3JhZ2UpLCBbXSk7CisgICAgfSwgIlRoZSBjb25m
aWd1cmFibGUgbW9kaWZpZXIgZG9lcyBlZmZlY3QgdGhlIHJlc3VsdCB3aGVuIHVzZWQgaW4gYWRk
aW5nIHByb3BlcnRpZXMgdG8gbG9jYWxTdG9yYWdlIHdpdGggT2JqZWN0LmRlZmluZVByb3BlcnR5
LiIpOwogCi0gICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgIHRlc3RSdW5uZXIuZHVt
cEFzVGV4dCgpOwotCi0gICAgaWYgKCF3aW5kb3cubG9jYWxTdG9yYWdlKSB7Ci0gICAgICAgIGxv
Zygid2luZG93LmxvY2FsU3RvcmFnZSBET0VTIE5PVCBleGlzdCIpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgbG9nQW5kRXZhbCgibG9jYWxTdG9yYWdlLmNsZWFyKCkiKTsKLSAgICBs
b2coIk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGxvY2FsU3RvcmFnZSkgaXMgKCIgKyBPYmpl
Y3QuZ2V0T3duUHJvcGVydHlOYW1lcyhsb2NhbFN0b3JhZ2UpICsgIilcbiIpOwotICAgIAotICAg
IGxvZ0FuZEV2YWwoIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShsb2NhbFN0b3JhZ2UsICcxJywge3Zh
bHVlOiAncHJlc2VudCd9KSIpOwotICAgIGxvZygiT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMo
bG9jYWxTdG9yYWdlKSBpcyAoIiArIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGxvY2FsU3Rv
cmFnZSkgKyAiKSIpOwotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGluY29ycmVjdC4gSXQgc2hvdWxk
IHJldHVybiAncHJlc2VudCcuIFNlZSBodHRwczovL3dlYmtpdC5vcmcvYi8xNzI2ODcuCi0gICAg
bG9nKCJsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnMScpIGlzICIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRl
bSgnMScpICsgIlxuIik7Ci0gICAgCi0gICAgbG9nQW5kRXZhbCgiZGVsZXRlIGxvY2FsU3RvcmFn
ZVsxXSIpOwotICAgIGxvZygiT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobG9jYWxTdG9yYWdl
KSBpcyAoIiArIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGxvY2FsU3RvcmFnZSkgKyAiKVxu
Iik7Ci0gICAgCi0gICAgbG9nQW5kRXZhbCgiT2JqZWN0LmRlZmluZVByb3BlcnR5KGxvY2FsU3Rv
cmFnZSwgJzInLCB7dmFsdWU6ICdwcmVzZW50JywgIGNvbmZpZ3VyYWJsZTogdHJ1ZX0pIik7Ci0g
ICAgbG9nKCJPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhsb2NhbFN0b3JhZ2UpIGlzICgiICsg
T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobG9jYWxTdG9yYWdlKSArICIpIik7Ci0gICAgLy8g
RklYTUU6IFRoaXMgaXMgaW5jb3JyZWN0LiBJdCBzaG91bGQgcmV0dXJuICdwcmVzZW50Jy4gU2Vl
IGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE3MjY4Ny4KLSAgICBsb2coImxvY2FsU3RvcmFnZS5nZXRJ
dGVtKCcyJykgaXMgIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCcyJykgKyAiXG4iKTsKLSAgICAK
LSAgICBsb2dBbmRFdmFsKCJkZWxldGUgbG9jYWxTdG9yYWdlWzJdIik7Ci0gICAgbG9nKCJPYmpl
Y3QuZ2V0T3duUHJvcGVydHlOYW1lcyhsb2NhbFN0b3JhZ2UpIGlzICgiICsgT2JqZWN0LmdldE93
blByb3BlcnR5TmFtZXMobG9jYWxTdG9yYWdlKSArICIpXG4iKTsKLQotICAgIGxvZ0FuZEV2YWwo
Ik9iamVjdC5kZWZpbmVQcm9wZXJ0eShsb2NhbFN0b3JhZ2UsICdUZXN0Jywge3ZhbHVlOiAncHJl
c2VudCcsICBjb25maWd1cmFibGU6IHRydWV9KSIpOwotICAgIGxvZygiT2JqZWN0LmdldE93blBy
b3BlcnR5TmFtZXMobG9jYWxTdG9yYWdlKSBpcyAoIiArIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5h
bWVzKGxvY2FsU3RvcmFnZSkgKyAiKSIpOwotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGluY29ycmVj
dC4gSXQgc2hvdWxkIHJldHVybiAncHJlc2VudCcuIFNlZSBodHRwczovL3dlYmtpdC5vcmcvYi8x
NzI2ODcuCi0gICAgbG9nKCJsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnVGVzdCcpIGlzICIgKyBsb2Nh
bFN0b3JhZ2UuZ2V0SXRlbSgnVGVzdCcpICsgIlxuIik7Ci0gIAotICAgIGxvZ0FuZEV2YWwoImRl
bGV0ZSBsb2NhbFN0b3JhZ2VbJ1Rlc3QnXSIpOwotICAgIGxvZygiT2JqZWN0LmdldE93blByb3Bl
cnR5TmFtZXMobG9jYWxTdG9yYWdlKSBpcyAoIiArIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVz
KGxvY2FsU3RvcmFnZSkgKyAiKVxuIik7Ci0KLSAgICBsb2dBbmRFdmFsKCJPYmplY3QuZGVmaW5l
UHJvcGVydHkobG9jYWxTdG9yYWdlLCAnVGVzdDEnLCB7dmFsdWU6ICdwcmVzZW50J30pIik7Ci0g
ICAgbG9nKCJPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhsb2NhbFN0b3JhZ2UpIGlzICgiICsg
T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobG9jYWxTdG9yYWdlKSArICIpIik7Ci0gICAgLy8g
RklYTUU6IFRoaXMgaXMgaW5jb3JyZWN0LiBJdCBzaG91bGQgcmV0dXJuICdwcmVzZW50Jy4gU2Vl
IGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE3MjY4Ny4KLSAgICBsb2coImxvY2FsU3RvcmFnZS5nZXRJ
dGVtKCdUZXN0MScpIGlzICIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnVGVzdDEnKSArICJcbiIp
OwotICAKLSAgICBsb2dBbmRFdmFsKCJkZWxldGUgbG9jYWxTdG9yYWdlWydUZXN0MSddIik7Ci0g
ICAgbG9nKCJPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhsb2NhbFN0b3JhZ2UpIGlzICgiICsg
T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobG9jYWxTdG9yYWdlKSArICIpXG4iKTsKLX0KIDwv
c2NyaXB0PgotPGJvZHkgb25sb2FkPSJydW5UZXN0KCk7Ij4KIDwvYm9keT4K
</data>
<flag name="review"
          id="332902"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>