<?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>171490</bug_id>
          
          <creation_ts>2017-04-30 21:19:32 -0700</creation_ts>
          <short_desc>Remove some usage of PassRefPtr in editing code</short_desc>
          <delta_ts>2017-05-01 11:08:12 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1303190</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-04-30 21:19:32 -0700</bug_when>
    <thetext>Remove some usage of PassRefPtr in editing code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303193</commentid>
    <comment_count>1</comment_count>
      <attachid>308712</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-04-30 21:33:23 -0700</bug_when>
    <thetext>Created attachment 308712
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303194</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-30 21:35:56 -0700</bug_when>
    <thetext>Attachment 308712 did not pass style-queue:


ERROR: Source/WebCore/editing/ApplyStyleCommand.cpp:1346:  &apos;node&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedStartNode&apos;.  [readability/naming/protected] [4]
ERROR: Source/WebCore/editing/ApplyStyleCommand.cpp:1424:  &apos;startNode&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedPassedStart&apos;.  [readability/naming/protected] [4]
ERROR: Source/WebCore/editing/ApplyStyleCommand.cpp:1425:  &apos;endNode&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedPassedEnd&apos;.  [readability/naming/protected] [4]
Total errors found: 3 in 30 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303243</commentid>
    <comment_count>3</comment_count>
      <attachid>308712</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-05-01 09:19:43 -0700</bug_when>
    <thetext>Comment on attachment 308712
Patch

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

&gt; Source/WebCore/editing/AlternativeTextController.cpp:242
&gt; +    RefPtr&lt;Range&gt; paragraphRangeContainingCorrection = range.cloneRange();

Seems like this should be Ref rather than RefPtr.

&gt; Source/WebCore/editing/AlternativeTextController.cpp:516
&gt; +void AlternativeTextController::recordAutocorrectionResponse(AutocorrectionResponse response, const String&amp; replacedString, Range* replacementRange)

Can the replacement range be null? I am surprised it’s a pointer and not a reference.

&gt; Source/WebCore/editing/ApplyStyleCommand.cpp:769
&gt; +void ApplyStyleCommand::applyInlineStyleToNodeRange(EditingStyle* style, Node* startNode, Node* pastEndNode)

These can both be null?

&gt; Source/WebCore/editing/CompositeEditCommand.cpp:646
&gt; +    auto command = ReplaceNodeWithSpanCommand::create(node);
&gt; +    applyCommandToComposite(command.copyRef());

Another way to do this would be to put the span element pointer into a local variable before applying the command, then we could use WTFMove instead of copyRef. The comment below explains why it’s OK to return a raw pointer to the element.

&gt; Source/WebCore/editing/DeleteSelectionCommand.cpp:796
&gt; +    Vector&lt;RenderedDocumentMarker*&gt; markers = document().markers().markersInRange(rangeOfFirstCharacter, DocumentMarker::Autocorrected);
&gt;      for (auto* marker : markers) {

I would put this inside the for statement and not use a local variable.

&gt; Source/WebCore/editing/DictationCommand.cpp:120
&gt; +    auto command = InsertTextCommand::createWithMarkerSupplier(document(), m_textToInsert.substring(lineStart, lineLength), DictationMarkerSupplier::create(alternativesInLine), EditActionDictation);
&gt; +    applyCommandToComposite(WTFMove(command), endingSelection());

Seems unnecessary to put this in a local variable, but I guess that &quot;endingSelection()&quot; would get lost in a one-liner?

&gt; Source/WebCore/editing/EditingStyle.cpp:-122
&gt; -    ASSERT_NOT_REACHED();

Why remove the ASSERT_NOT_REACHED? I understand that we can’t return 0 any more, but it seems slightly unfortunate lose the runtime &quot;bad enum value&quot; checking. I wish there was a better idiom for this.

&gt; Source/WebCore/editing/EditingStyle.cpp:-1161
&gt; -    ASSERT_NOT_REACHED();

Ditto.

&gt; Source/WebCore/editing/Editor.cpp:508
&gt; +    RefPtr&lt;ReplaceSelectionCommand&gt; command = ReplaceSelectionCommand::create(document(), &amp;fragment, options, editingAction);

Ref instead of RefPtr?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303247</commentid>
    <comment_count>4</comment_count>
      <attachid>308712</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-05-01 09:33:54 -0700</bug_when>
    <thetext>Comment on attachment 308712
Patch

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

&gt;&gt; Source/WebCore/editing/AlternativeTextController.cpp:242
&gt;&gt; +    RefPtr&lt;Range&gt; paragraphRangeContainingCorrection = range.cloneRange();
&gt; 
&gt; Seems like this should be Ref rather than RefPtr.

The issue is that paragraphRangeContainingCorrection gets reassigned later in this function.

&gt;&gt; Source/WebCore/editing/AlternativeTextController.cpp:516
&gt;&gt; +void AlternativeTextController::recordAutocorrectionResponse(AutocorrectionResponse response, const String&amp; replacedString, Range* replacementRange)
&gt; 
&gt; Can the replacement range be null? I am surprised it’s a pointer and not a reference.

There are 2 call sites and one of them seems like it may pass null:
void Editor::changeBackToReplacedString(const String&amp; replacedString)

Also, the implementation of this function seems to properly deal with passing null.

&gt;&gt; Source/WebCore/editing/ApplyStyleCommand.cpp:769
&gt;&gt; +void ApplyStyleCommand::applyInlineStyleToNodeRange(EditingStyle* style, Node* startNode, Node* pastEndNode)
&gt; 
&gt; These can both be null?

Upon further inspection, it seems startNode cannot be null. I&apos;ll fix.

&gt;&gt; Source/WebCore/editing/CompositeEditCommand.cpp:646
&gt;&gt; +    applyCommandToComposite(command.copyRef());
&gt; 
&gt; Another way to do this would be to put the span element pointer into a local variable before applying the command, then we could use WTFMove instead of copyRef. The comment below explains why it’s OK to return a raw pointer to the element.

Ok.

&gt;&gt; Source/WebCore/editing/DeleteSelectionCommand.cpp:796
&gt;&gt;      for (auto* marker : markers) {
&gt; 
&gt; I would put this inside the for statement and not use a local variable.

Ok.

&gt;&gt; Source/WebCore/editing/DictationCommand.cpp:120
&gt;&gt; +    applyCommandToComposite(WTFMove(command), endingSelection());
&gt; 
&gt; Seems unnecessary to put this in a local variable, but I guess that &quot;endingSelection()&quot; would get lost in a one-liner?

Yes, I think this one would become a bit long and endingSelection() would be hard to notice.

&gt;&gt; Source/WebCore/editing/EditingStyle.cpp:-122
&gt;&gt; -    ASSERT_NOT_REACHED();
&gt; 
&gt; Why remove the ASSERT_NOT_REACHED? I understand that we can’t return 0 any more, but it seems slightly unfortunate lose the runtime &quot;bad enum value&quot; checking. I wish there was a better idiom for this.

I do not understand what we are loosing. There is no default case in the switch, therefore, ALL enum values have to be handled in the switch.

This trick of falling through and have a return statement after the switch is only yo make gcc happy AFAIK.

&gt;&gt; Source/WebCore/editing/Editor.cpp:508
&gt;&gt; +    RefPtr&lt;ReplaceSelectionCommand&gt; command = ReplaceSelectionCommand::create(document(), &amp;fragment, options, editingAction);
&gt; 
&gt; Ref instead of RefPtr?

Yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303248</commentid>
    <comment_count>5</comment_count>
      <attachid>308723</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-05-01 09:35:11 -0700</bug_when>
    <thetext>Created attachment 308723
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303249</commentid>
    <comment_count>6</comment_count>
      <attachid>308723</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-01 09:36:23 -0700</bug_when>
    <thetext>Comment on attachment 308723
Patch

Rejecting attachment 308723 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-02&apos;, &apos;validate-changelog&apos;, &apos;--check-oops&apos;, &apos;--non-interactive&apos;, 308723, &apos;--port=mac&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

ChangeLog entry in Source/WebKit/ios/ChangeLog contains OOPS!.

Full output: http://webkit-queues.webkit.org/results/3651350</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303252</commentid>
    <comment_count>7</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-05-01 09:37:58 -0700</bug_when>
    <thetext>Attachment 308723 did not pass style-queue:


ERROR: Source/WebCore/editing/ApplyStyleCommand.cpp:777:  &apos;node&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedStartNode&apos;.  [readability/naming/protected] [4]
ERROR: Source/WebCore/editing/ApplyStyleCommand.cpp:1346:  &apos;node&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedStartNode&apos;.  [readability/naming/protected] [4]
ERROR: Source/WebCore/editing/ApplyStyleCommand.cpp:1424:  &apos;startNode&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedPassedStart&apos;.  [readability/naming/protected] [4]
ERROR: Source/WebCore/editing/ApplyStyleCommand.cpp:1425:  &apos;endNode&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedPassedEnd&apos;.  [readability/naming/protected] [4]
Total errors found: 4 in 30 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303253</commentid>
    <comment_count>8</comment_count>
      <attachid>308712</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-05-01 09:40:13 -0700</bug_when>
    <thetext>Comment on attachment 308712
Patch

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

&gt;&gt;&gt; Source/WebCore/editing/EditingStyle.cpp:-122
&gt;&gt;&gt; -    ASSERT_NOT_REACHED();
&gt;&gt; 
&gt;&gt; Why remove the ASSERT_NOT_REACHED? I understand that we can’t return 0 any more, but it seems slightly unfortunate lose the runtime &quot;bad enum value&quot; checking. I wish there was a better idiom for this.
&gt; 
&gt; I do not understand what we are loosing. There is no default case in the switch, therefore, ALL enum values have to be handled in the switch.
&gt; 
&gt; This trick of falling through and have a return statement after the switch is only yo make gcc happy AFAIK.

There are two things we often like to check with functions that handle enumerations:

1) We want to make sure that we don’t forget to handle each enumeration value in a switch rather than implicitly having one value that runs no code. We do that by leaving out default statements. It’s particularly helpful to do this when adding new enumeration values so we remember to consider if they are handled correctly in each case.

2) We want to make sure that we catch it if we get an illegal enumeration value at runtime. Like all assertions, it’s something we think is impossible, but it’s not checked by the compiled code unless we write an assertion. So the value &quot;4&quot; could be in there even if the only legal enum values are 0-3. Could happen due to type casting to the enumeration from an integer, for example. There are presumably other causes.

This clumsy idiom checks both:

    switch (x) {
    case A:
        return d;
    case B:
        return e;
    case C:
        return f;
    }
    ASSERT_NOT_REACHED();
    return &lt;anything&gt;;

This idiom takes care of (1), but not (2):

    switch (x) {
    case A:
        break;
    case B:
        return e;
    case C:
        break f;
    }
    return d;

When we use &quot;if&quot; statements instead of &quot;switch&quot;, we don’t even take care of (1).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303256</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-05-01 09:42:29 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #8)
&gt; This clumsy idiom checks both:
&gt; 
&gt;     switch (x) {
&gt;     case A:
&gt;         return d;
&gt;     case B:
&gt;         return e;
&gt;     case C:
&gt;         return f;
&gt;     }
&gt;     ASSERT_NOT_REACHED();
&gt;     return &lt;anything&gt;;

If the compiler is so smart that it complains about the unreachable &quot;return &lt;anything&gt;&quot; code, since all code paths return inside the switch statement, then it prevents us from compiling our check for (2). I can imagine compilers that work that way, and we could either decide that (2) is not important, or get that check from something like &quot;undefined behavior sanitizer&quot; rather than from an explicit assertion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303258</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-05-01 09:50:37 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #9)
&gt; (In reply to Darin Adler from comment #8)
&gt; &gt; This clumsy idiom checks both:
&gt; &gt; 
&gt; &gt;     switch (x) {
&gt; &gt;     case A:
&gt; &gt;         return d;
&gt; &gt;     case B:
&gt; &gt;         return e;
&gt; &gt;     case C:
&gt; &gt;         return f;
&gt; &gt;     }
&gt; &gt;     ASSERT_NOT_REACHED();
&gt; &gt;     return &lt;anything&gt;;
&gt; 
&gt; If the compiler is so smart that it complains about the unreachable &quot;return
&gt; &lt;anything&gt;&quot; code, since all code paths return inside the switch statement,
&gt; then it prevents us from compiling our check for (2). I can imagine
&gt; compilers that work that way, and we could either decide that (2) is not
&gt; important, or get that check from something like &quot;undefined behavior
&gt; sanitizer&quot; rather than from an explicit assertion.

To be clear, I am not aware of a compiler that complains about the unreachable return here. The issue is gcc is that even though the switch handles all enum values, it still requires us to have a return statement after the switch.

Can I land the patch as is or do you see an easy way to deal with (1) and (2), while letting me return a Ref&lt;&gt;? We could return a derefenced null in the last return statement but this would look very ugly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303259</commentid>
    <comment_count>11</comment_count>
      <attachid>308725</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-05-01 09:51:41 -0700</bug_when>
    <thetext>Created attachment 308725
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303261</commentid>
    <comment_count>12</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-05-01 09:53:53 -0700</bug_when>
    <thetext>Attachment 308725 did not pass style-queue:


ERROR: Source/WebCore/editing/ApplyStyleCommand.cpp:777:  &apos;node&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedStartNode&apos;.  [readability/naming/protected] [4]
ERROR: Source/WebCore/editing/ApplyStyleCommand.cpp:1346:  &apos;node&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedStartNode&apos;.  [readability/naming/protected] [4]
ERROR: Source/WebCore/editing/ApplyStyleCommand.cpp:1424:  &apos;startNode&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedPassedStart&apos;.  [readability/naming/protected] [4]
ERROR: Source/WebCore/editing/ApplyStyleCommand.cpp:1425:  &apos;endNode&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedPassedEnd&apos;.  [readability/naming/protected] [4]
Total errors found: 4 in 30 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303291</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-05-01 10:55:25 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #10)
&gt; Can I land the patch as is

Sure.

&gt; do you see an easy way to deal with (1) and
&gt; (2), while letting me return a Ref&lt;&gt;? We could return a derefenced null in
&gt; the last return statement but this would look very ugly.

I usually just repeat the code for one of the cases, the one that seems most harmless.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303295</commentid>
    <comment_count>14</comment_count>
      <attachid>308725</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-01 11:08:10 -0700</bug_when>
    <thetext>Comment on attachment 308725
Patch

Clearing flags on attachment: 308725

Committed r216019: &lt;http://trac.webkit.org/changeset/216019&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303296</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-01 11:08:12 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308712</attachid>
            <date>2017-04-30 21:33:23 -0700</date>
            <delta_ts>2017-05-01 09:51:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171490-20170430213322.patch</filename>
            <type>text/plain</type>
            <size>125964</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2MDAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjY4MmQwNTQ2ZTgwNDMz
ZDViZDM4NzgxNTQ2NzQ1OTk4ZGRmMjI1OS4uMjhmNzllNzEyZTlkODc3MDAyYTRkYzBlZDNmZjRi
MjUxYTQwYjhkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDEzMiBAQAogMjAxNy0wNC0zMCAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCisgICAgICAgIFJlbW92ZSBzb21lIHVzYWdl
IG9mIFBhc3NSZWZQdHIgaW4gZWRpdGluZyBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzE0OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgc29tZSB1c2FnZSBvZiBQYXNzUmVmUHRyIGlu
IGVkaXRpbmcgY29kZS4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJz
SW5SYW5nZSk6CisgICAgICAgIChEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Omhhc01hcmtlcnMp
OgorICAgICAgICAoRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjbGVhckRlc2NyaXB0aW9uT25N
YXJrZXJzSW50ZXJzZWN0aW5nUmFuZ2UpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudE1hcmtlckNv
bnRyb2xsZXIuaDoKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aXNTcGVs
bGluZ01hcmtlckFsbG93ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6c2hvdyk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjphcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZWNvcmRBdXRv
Y29ycmVjdGlvblJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6Om1hcmtSZXZlcnNlZCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyOjptYXJrQ29ycmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjpyZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZvck1vZGlmaWVk
Q29ycmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
Ojpwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KToKKyAgICAgICAgKFdl
YkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5RGljdGF0aW9uQWx0ZXJuYXRp
dmUpOgorICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oOgorICAg
ICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6VU5MRVNTX0VOQUJMRUQp
OgorICAgICAgICAqIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlRm9udEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU3R5bGVT
cGFuRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6QXBwbHlT
dHlsZUNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6Y29weVN0eWxlT3JDcmVhdGVFbXB0eSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlSZWxhdGl2ZUZvbnRT
dHlsZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJ
bmxpbmVTdHlsZVRvTm9kZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21t
YW5kOjpyZW1vdmVDb25mbGljdGluZ0lubGluZVN0eWxlRnJvbVJ1bik6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6aGlnaGVzdEFuY2VzdG9yV2l0aENv
bmZsaWN0aW5nSW5saW5lU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1h
bmQ6OmFwcGx5SW5saW5lU3R5bGVUb1B1c2hEb3duKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
U3R5bGVDb21tYW5kOjpwdXNoRG93bklubGluZVN0eWxlQXJvdW5kTm9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnNob3VsZFNwbGl0VGV4dEVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnN1cnJvdW5kTm9kZVJhbmdlV2l0aEVs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmFkZElubGluZVN0
eWxlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnBvc2l0
aW9uVG9Db21wdXRlSW5saW5lU3R5bGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlT
dHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVDaGFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcv
QXBwbHlTdHlsZUNvbW1hbmQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5k
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnNob3VsZFJl
bW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQpOgorICAgICAgICAqIGVkaXRpbmcvQ29tcG9zaXRl
RWRpdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6
OmFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVk
aXRDb21tYW5kOjphcHBseVN0eWxlZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
aXRlRWRpdENvbW1hbmQ6OnJlbW92ZVN0eWxlZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VFbGVtZW50V2l0aFNwYW5QcmVzZXJ2aW5nQ2hp
bGRyZW5BbmRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21t
YW5kOjppbnB1dFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6
OnJlcGxhY2VUZXh0SW5Ob2RlUHJlc2VydmluZ01hcmtlcnMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnB1c2hBbmNob3JFbGVtZW50RG93bik6CisgICAgICAgICog
ZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oOgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRl
U2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25D
b21tYW5kOjpvcmlnaW5hbFN0cmluZ0ZvckF1dG9jb3JyZWN0aW9uQXRCZWdpbm5pbmdPZlNlbGVj
dGlvbik6CisgICAgICAgICogZWRpdGluZy9EaWN0YXRpb25Db21tYW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRpY3RhdGlvbkNvbW1hbmQ6Omluc2VydFRleHRSdW5XaXRob3V0TmV3bGluZXMp
OgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmNvcHlFZGl0aW5nUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJvcGVydGll
c0Zyb21Db21wdXRlZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmV4dHJhY3RQcm9wZXJ0eVZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBdHRyaWJ1dGVFcXVpdmFsZW50OjphdHRyaWJ1
dGVWYWx1ZUFzQ1NTVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvbnRTaXplRXF1aXZh
bGVudDo6YXR0cmlidXRlVmFsdWVBc0NTU1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRp
bmdTdHlsZTo6c2V0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpjb3B5
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6ZXh0cmFjdEFuZFJlbW92ZUJsb2Nr
UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OmV4dHJhY3RBbmRS
ZW1vdmVUZXh0RGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6bWVy
Z2VJbmxpbmVTdHlsZU9mRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpleHRyYWN0RWRpdGlu
Z1Byb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpzdHlsZUF0U2Vs
ZWN0aW9uU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UHJvcGVydGllc05vdEluKToKKyAg
ICAgICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5oOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aGFuZGxlVGV4dEV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6Omluc2VydE9yZGVyZWRMaXN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6aW5zZXJ0VW5vcmRlcmVkTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Y29ycmVjdFNwZWxsY2hlY2tpbmdQcmVzZXJ2aW5nVGV4dENoZWNraW5nUGFyYWdy
YXBoKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjaGFuZ2VCYWNrVG9SZXBsYWNlZFN0cmluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cmFuZ2VGb3JQb2ludCk6CisgICAgICAg
ICogZWRpdGluZy9FZGl0b3IuaDoKKyAgICAgICAgKiBlZGl0aW5nL01vZGlmeVNlbGVjdGlvbkxp
c3RMZXZlbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZl
bENvbW1hbmQ6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKToKKyAgICAgICAgKFdlYkNvcmU6
OkluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0
TGV2ZWxPcmRlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkluY3JlYXNlU2VsZWN0aW9uTGlzdExl
dmVsQ29tbWFuZDo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxVbm9yZGVyZWQpOgorICAgICAg
ICAqIGVkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmg6CisgICAgICAgICogZWRpdGlu
Zy9TcGVsbENoZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2VyOjpyZXF1
ZXN0Q2hlY2tpbmdGb3IpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2VyOjpkaWRDaGVj
a1N1Y2NlZWQpOgorICAgICAgICAqIGVkaXRpbmcvU3BlbGxDaGVja2VyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpTcGVsbENoZWNrUmVxdWVzdDo6Y2hlY2tpbmdSYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpTcGVsbENoZWNrUmVxdWVzdDo6cGFyYWdyYXBoUmFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6U3BlbGxDaGVja1JlcXVlc3Q6OnJvb3RFZGl0YWJsZUVsZW1lbnQpOgorICAgICAgICAqIGVk
aXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
cGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OndpbGxBcHBseUNvbW1h
bmQpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6ZG9BcHBs
eSk6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjp0YXJnZXRS
YW5nZXMpOgorICAgICAgICAqIGVkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oOgor
ICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKToKKyAg
ICAgICAgKiBlZGl0aW5nL1N1cnJvdW5kaW5nVGV4dC5oOgorICAgICAgICAqIGVkaXRpbmcvVGV4
dENoZWNraW5nSGVscGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFn
cmFwaDo6ZXhwYW5kUmFuZ2VUb05leHRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNr
aW5nUGFyYWdyYXBoOjpyYW5nZUxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tp
bmdQYXJhZ3JhcGg6OnBhcmFncmFwaFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVj
a2luZ1BhcmFncmFwaDo6c3VicmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5n
UGFyYWdyYXBoOjpvZmZzZXRUbyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdQYXJh
Z3JhcGg6Om9mZnNldEFzUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nUGFy
YWdyYXBoOjp0ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6
Y2hlY2tpbmdTdGFydCk6CisgICAgICAgICogZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuaDoK
KyAgICAgICAgKiBlZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dFJ1bldpdGhvdXROZXdsaW5lcyk6CisgICAgICAgICog
ZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tOgorICAgICAgICAoSFRNTENvbnZlcnRlckNh
Y2hlczo6Y29tcHV0ZWRTdHlsZVByb3BlcnR5Rm9yRWxlbWVudCk6CisgICAgICAgIChIVE1MQ29u
dmVydGVyQ2FjaGVzOjppbmxpbmVTdHlsZVByb3BlcnR5Rm9yRWxlbWVudCk6CisgICAgICAgICog
cGFnZS9pb3MvRnJhbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6aW50ZXJwcmV0
YXRpb25zRm9yQ3VycmVudFJvb3QpOgorCisyMDE3LTA0LTMwICBDaHJpcyBEdW1leiAgPGNkdW1l
ekBhcHBsZS5jb20+CisKICAgICAgICAgRHJvcCBzdXBwb3J0IGZvciBsZWdhY3kgQ2xpZW50UmVj
dCAvIENsaWVudFJlY3RMaXN0CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzE0MTgKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9pb3MvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9pb3MvQ2hhbmdlTG9nCmluZGV4IGVmZmE3MDJkODM2ODUyNWIz
NDkxMWI4OGRjZjMxZjIyZTMzZDcxZGMuLjYzN2Y4MWYxOTFhMGVlYjk1ZmM0YjMzYjE3NzI3Y2Ni
ZGEzMTQ0MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvaW9zL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L2lvcy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxNy0wNC0zMCAg
Q2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBzb21lIHVz
YWdlIG9mIFBhc3NSZWZQdHIgaW4gZWRpdGluZyBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzE0OTAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1t
OgorICAgICAgICAoLVtXZWJGcmFtZSBwcmV2aW91c1VucGVydHVyYmVkRGljdGF0aW9uUmVzdWx0
Qm91bmRhcnlGcm9tUG9zaXRpb246XSk6CisgICAgICAgICgtW1dlYkZyYW1lIG5leHRVbnBlcnR1
cmJlZERpY3RhdGlvblJlc3VsdEJvdW5kYXJ5RnJvbVBvc2l0aW9uOl0pOgorCiAyMDE3LTA0LTE0
ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFtXSzJd
IFN1cHBvcnQgSWNvbiBjcmVhdGlvbiBmcm9tIGZpbGUgVVJMcyBvbiBpT1MKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxv
ZwppbmRleCBmNjcwZjAwNzgwMWU4ZGE1NjM2MWNhYjUyYWQzOGFmYzgzNWE4MGU0Li5lMGFlMGQ1
ZWRkMGQxMTZmYzBmYjg5OGEzMmJiODY5NzY3OWFmOTI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMTctMDQtMzAgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4K
KworICAgICAgICBSZW1vdmUgc29tZSB1c2FnZSBvZiBQYXNzUmVmUHRyIGluIGVkaXRpbmcgY29k
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcxNDkw
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJW
aWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBkaWN0YXRpb25SZXN1bHRNZXRh
ZGF0YUZvclJhbmdlOl0pOgorICAgICAgICAoLVtXZWJGcmFtZSBfcmVwbGFjZVNlbGVjdGlvbldp
dGhGcmFnbWVudDpzZWxlY3RSZXBsYWNlbWVudDpzbWFydFJlcGxhY2U6bWF0Y2hTdHlsZTpdKToK
KwogMjAxNy0wNC0zMCAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAg
IFtDb2NvYV0gUmVwbGFjZXMgdXNlcyBvZiBbZ2V04oCmKCkgYWxsb2NdIHdpdGggYWxsb2PigKZJ
bnN0YW5jZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXIuY3BwCmluZGV4IGNjZGRjZjU4YzM5MmJlNDU1YjBkYmYyNTIyNTBlYTIxZTY4OGQwNzcuLmU5
ZDRhYTNhNWQ4NjE4YjZmMzUwNjU1ZDU3MjFlOGE0ODk4YzFlMGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCkBAIC01MTcsMjQgKzUxNywy
NCBAQCBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IERvY3VtZW50TWFya2VyQ29udHJv
bGxlcjo6bWFya2Vyc0ZvcihOb2RlKiBub2RlLAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVZl
Y3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpt
YXJrZXJzSW5SYW5nZShSYW5nZSogcmFuZ2UsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyBt
YXJrZXJUeXBlcykKK1ZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjptYXJrZXJzSW5SYW5nZShSYW5nZSYgcmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpNYXJrZXJUeXBlcyBtYXJrZXJUeXBlcykKIHsKICAgICBpZiAoIXBvc3NpYmx5SGFzTWFya2Vy
cyhtYXJrZXJUeXBlcykpCiAgICAgICAgIHJldHVybiBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1h
cmtlcio+KCk7CiAKICAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IGZvdW5kTWFy
a2VyczsKIAotICAgIE5vZGUmIHN0YXJ0Q29udGFpbmVyID0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVy
KCk7Ci0gICAgTm9kZSYgZW5kQ29udGFpbmVyID0gcmFuZ2UtPmVuZENvbnRhaW5lcigpOworICAg
IE5vZGUmIHN0YXJ0Q29udGFpbmVyID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKTsKKyAgICBOb2Rl
JiBlbmRDb250YWluZXIgPSByYW5nZS5lbmRDb250YWluZXIoKTsKIAotICAgIE5vZGUqIHBhc3RM
YXN0Tm9kZSA9IHJhbmdlLT5wYXN0TGFzdE5vZGUoKTsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBy
YW5nZS0+Zmlyc3ROb2RlKCk7IG5vZGUgIT0gcGFzdExhc3ROb2RlOyBub2RlID0gTm9kZVRyYXZl
cnNhbDo6bmV4dCgqbm9kZSkpIHsKKyAgICBOb2RlKiBwYXN0TGFzdE5vZGUgPSByYW5nZS5wYXN0
TGFzdE5vZGUoKTsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5nZS5maXJzdE5vZGUoKTsgbm9k
ZSAhPSBwYXN0TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewog
ICAgICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IG1hcmtlcnNGb3Iobm9kZSkpIHsKICAgICAgICAg
ICAgIGlmICghbWFya2VyVHlwZXMuY29udGFpbnMobWFya2VyLT50eXBlKCkpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKG5vZGUgPT0gJnN0YXJ0Q29udGFpbmVy
ICYmIG1hcmtlci0+ZW5kT2Zmc2V0KCkgPD0gcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpCisgICAgICAg
ICAgICBpZiAobm9kZSA9PSAmc3RhcnRDb250YWluZXIgJiYgbWFya2VyLT5lbmRPZmZzZXQoKSA8
PSByYW5nZS5zdGFydE9mZnNldCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgaWYgKG5vZGUgPT0gJmVuZENvbnRhaW5lciAmJiBtYXJrZXItPnN0YXJ0T2Zmc2V0KCkg
Pj0gcmFuZ2UtPmVuZE9mZnNldCgpKQorICAgICAgICAgICAgaWYgKG5vZGUgPT0gJmVuZENvbnRh
aW5lciAmJiBtYXJrZXItPnN0YXJ0T2Zmc2V0KCkgPj0gcmFuZ2UuZW5kT2Zmc2V0KCkpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBmb3VuZE1hcmtlcnMuYXBwZW5kKG1h
cmtlcik7CiAgICAgICAgIH0KQEAgLTczMiwyMyArNzMyLDIzIEBAIHZvaWQgRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjpzZXRNYXJrZXJzQWN0aXZlKE5vZGUqIG5vZGUsIHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0CiAgICAgICAgIG5vZGUtPnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKIH0KIAotYm9vbCBE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Omhhc01hcmtlcnMoUmFuZ2UqIHJhbmdlLCBEb2N1bWVu
dE1hcmtlcjo6TWFya2VyVHlwZXMgbWFya2VyVHlwZXMpCitib29sIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlcjo6aGFzTWFya2VycyhSYW5nZSYgcmFuZ2UsIERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlcyBtYXJrZXJUeXBlcykKIHsKICAgICBpZiAoIXBvc3NpYmx5SGFzTWFya2VycyhtYXJrZXJU
eXBlcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBBU1NFUlQoIW1fbWFya2Vycy5pc0Vt
cHR5KCkpOwogCi0gICAgTm9kZSYgc3RhcnRDb250YWluZXIgPSByYW5nZS0+c3RhcnRDb250YWlu
ZXIoKTsKLSAgICBOb2RlJiBlbmRDb250YWluZXIgPSByYW5nZS0+ZW5kQ29udGFpbmVyKCk7Cisg
ICAgTm9kZSYgc3RhcnRDb250YWluZXIgPSByYW5nZS5zdGFydENvbnRhaW5lcigpOworICAgIE5v
ZGUmIGVuZENvbnRhaW5lciA9IHJhbmdlLmVuZENvbnRhaW5lcigpOwogCi0gICAgTm9kZSogcGFz
dExhc3ROb2RlID0gcmFuZ2UtPnBhc3RMYXN0Tm9kZSgpOwotICAgIGZvciAoTm9kZSogbm9kZSA9
IHJhbmdlLT5maXJzdE5vZGUoKTsgbm9kZSAhPSBwYXN0TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJh
dmVyc2FsOjpuZXh0KCpub2RlKSkgeworICAgIE5vZGUqIHBhc3RMYXN0Tm9kZSA9IHJhbmdlLnBh
c3RMYXN0Tm9kZSgpOworICAgIGZvciAoTm9kZSogbm9kZSA9IHJhbmdlLmZpcnN0Tm9kZSgpOyBu
b2RlICE9IHBhc3RMYXN0Tm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7
CiAgICAgICAgIGZvciAoYXV0byogbWFya2VyIDogbWFya2Vyc0Zvcihub2RlKSkgewogICAgICAg
ICAgICAgaWYgKCFtYXJrZXJUeXBlcy5jb250YWlucyhtYXJrZXItPnR5cGUoKSkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAobm9kZSA9PSAmc3RhcnRDb250YWlu
ZXIgJiYgbWFya2VyLT5lbmRPZmZzZXQoKSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmFuZ2Ut
PnN0YXJ0T2Zmc2V0KCkpKQorICAgICAgICAgICAgaWYgKG5vZGUgPT0gJnN0YXJ0Q29udGFpbmVy
ICYmIG1hcmtlci0+ZW5kT2Zmc2V0KCkgPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJhbmdlLnN0
YXJ0T2Zmc2V0KCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYg
KG5vZGUgPT0gJmVuZENvbnRhaW5lciAmJiBtYXJrZXItPnN0YXJ0T2Zmc2V0KCkgPj0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHJhbmdlLT5lbmRPZmZzZXQoKSkpCisgICAgICAgICAgICBpZiAobm9k
ZSA9PSAmZW5kQ29udGFpbmVyICYmIG1hcmtlci0+c3RhcnRPZmZzZXQoKSA+PSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4ocmFuZ2UuZW5kT2Zmc2V0KCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTc1NiwxOSArNzU2LDE5
IEBAIGJvb2wgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpoYXNNYXJrZXJzKFJhbmdlKiByYW5n
ZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lk
IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6Y2xlYXJEZXNjcmlwdGlvbk9uTWFya2Vyc0ludGVy
c2VjdGluZ1JhbmdlKFJhbmdlKiByYW5nZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGVzIG1h
cmtlclR5cGVzKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmNsZWFyRGVzY3JpcHRp
b25Pbk1hcmtlcnNJbnRlcnNlY3RpbmdSYW5nZShSYW5nZSYgcmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpNYXJrZXJUeXBlcyBtYXJrZXJUeXBlcykKIHsKICAgICBpZiAoIXBvc3NpYmx5SGFzTWFya2Vy
cyhtYXJrZXJUeXBlcykpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoIW1fbWFya2Vycy5p
c0VtcHR5KCkpOwogCi0gICAgTm9kZSYgc3RhcnRDb250YWluZXIgPSByYW5nZS0+c3RhcnRDb250
YWluZXIoKTsKLSAgICBOb2RlJiBlbmRDb250YWluZXIgPSByYW5nZS0+ZW5kQ29udGFpbmVyKCk7
CisgICAgTm9kZSYgc3RhcnRDb250YWluZXIgPSByYW5nZS5zdGFydENvbnRhaW5lcigpOworICAg
IE5vZGUmIGVuZENvbnRhaW5lciA9IHJhbmdlLmVuZENvbnRhaW5lcigpOwogCi0gICAgTm9kZSog
cGFzdExhc3ROb2RlID0gcmFuZ2UtPnBhc3RMYXN0Tm9kZSgpOwotICAgIGZvciAoTm9kZSogbm9k
ZSA9IHJhbmdlLT5maXJzdE5vZGUoKTsgbm9kZSAhPSBwYXN0TGFzdE5vZGU7IG5vZGUgPSBOb2Rl
VHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewotICAgICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9
IG5vZGUgPT0gJnN0YXJ0Q29udGFpbmVyID8gcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgOiAwOwotICAg
ICAgICB1bnNpZ25lZCBlbmRPZmZzZXQgPSBub2RlID09ICZlbmRDb250YWluZXIgPyBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4ocmFuZ2UtPmVuZE9mZnNldCgpKSA6IHN0ZDo6bnVtZXJpY19saW1pdHM8
dW5zaWduZWQ+OjptYXgoKTsKKyAgICBOb2RlKiBwYXN0TGFzdE5vZGUgPSByYW5nZS5wYXN0TGFz
dE5vZGUoKTsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5nZS5maXJzdE5vZGUoKTsgbm9kZSAh
PSBwYXN0TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgeworICAg
ICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IG5vZGUgPT0gJnN0YXJ0Q29udGFpbmVyID8gcmFu
Z2Uuc3RhcnRPZmZzZXQoKSA6IDA7CisgICAgICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9IG5vZGUg
PT0gJmVuZENvbnRhaW5lciA/IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyYW5nZS5lbmRPZmZzZXQo
KSkgOiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CiAgICAgICAgIE1hcmtl
ckxpc3QqIGxpc3QgPSBtX21hcmtlcnMuZ2V0KG5vZGUpOwogICAgICAgICBpZiAoIWxpc3QpCiAg
ICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudE1hcmtlckNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXIuaAppbmRleCAyYzJjZDM3N2EyOGJmOGNhZWU3MDVmZGIzMjA0NzY4NWQ2N2Ix
OTEyLi4wZjVjMjM2NDY0MTdhMjQ5MzNmM2FhYTAyYjNjNDJiYjk4YzFhYTZjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5oCkBAIC02Niw3ICs2Niw3
IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1fbWFya2Vycy5pc0VtcHR5KCkgPT0gIW1fcG9z
c2libHlFeGlzdGluZ01hcmtlclR5cGVzLmludGVyc2VjdHMoRG9jdW1lbnRNYXJrZXI6OkFsbE1h
cmtlcnMoKSkpOwogICAgICAgICByZXR1cm4gIW1fbWFya2Vycy5pc0VtcHR5KCk7CiAgICAgfQot
ICAgIGJvb2wgaGFzTWFya2VycyhSYW5nZSosIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyA9
IERvY3VtZW50TWFya2VyOjpBbGxNYXJrZXJzKCkpOworICAgIGJvb2wgaGFzTWFya2VycyhSYW5n
ZSYsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyA9IERvY3VtZW50TWFya2VyOjpBbGxNYXJr
ZXJzKCkpOwogCiAgICAgLy8gV2hlbiBhIG1hcmtlciBwYXJ0aWFsbHkgb3ZlcmxhcHMgd2l0aCBy
YW5nZSwgaWYgcmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJzIGlzIHRydWUsIHdlIGNv
bXBsZXRlbHkKICAgICAvLyByZW1vdmUgdGhlIG1hcmtlci4gSWYgdGhlIGFyZ3VtZW50IGlzIGZh
bHNlLCB3ZSB3aWxsIGFkanVzdCB0aGUgc3BhbiBvZiB0aGUgbWFya2VyIHNvIHRoYXQgaXQgcmV0
YWlucwpAQCAtODMsOCArODMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRNYXJrZXJzQWN0aXZl
KE5vZGUqLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBib29sKTsK
IAogICAgIFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFy
a2Vyc0ZvcihOb2RlKiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGVzID0gRG9jdW1lbnRNYXJr
ZXI6OkFsbE1hcmtlcnMoKSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPFJlbmRlcmVkRG9j
dW1lbnRNYXJrZXIqPiBtYXJrZXJzSW5SYW5nZShSYW5nZSosIERvY3VtZW50TWFya2VyOjpNYXJr
ZXJUeXBlcyk7Ci0gICAgdm9pZCBjbGVhckRlc2NyaXB0aW9uT25NYXJrZXJzSW50ZXJzZWN0aW5n
UmFuZ2UoUmFuZ2UqLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXMpOworICAgIFdFQkNPUkVf
RVhQT1JUIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2Vyc0luUmFuZ2UoUmFu
Z2UmLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXMpOworICAgIHZvaWQgY2xlYXJEZXNjcmlw
dGlvbk9uTWFya2Vyc0ludGVyc2VjdGluZ1JhbmdlKFJhbmdlJiwgRG9jdW1lbnRNYXJrZXI6Ok1h
cmtlclR5cGVzKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlUmVjdHNGb3JJbnZh
bGlkYXRlZE1hcmtlcnNPZlR5cGUoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNw
cAppbmRleCAwNWFmYWU0Yjk5Yzk3YzhkMmVmODRmMDJiNjJiZGI1MmYzNzhjYWQ1Li5lMmQ3ZmJm
NmMyYzg5MmFmMjUwYmQyMWY4ZjYzYzhiYmNmYTFiMWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKQEAgLTE5MCwxOCAr
MTkwLDE4IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFzUGVuZGluZ0NvcnJl
Y3Rpb24oKSBjb25zdAogICAgIHJldHVybiBtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRo
QWx0ZXJuYXRpdmU7CiB9CiAKLWJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aXNTcGVs
bGluZ01hcmtlckFsbG93ZWQoUGFzc1JlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5nZSkgY29u
c3QKK2Jvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aXNTcGVsbGluZ01hcmtlckFsbG93
ZWQoUmFuZ2UmIG1pc3NwZWxsaW5nUmFuZ2UpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFtX2ZyYW1l
LmRvY3VtZW50KCktPm1hcmtlcnMoKS5oYXNNYXJrZXJzKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCks
IERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKKyAgICByZXR1cm4gIW1f
ZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpLmhhc01hcmtlcnMobWlzc3BlbGxpbmdSYW5nZSwg
RG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwogfQogCi12b2lkIEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OnNob3coUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VUb1JlcGxh
Y2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQpCit2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI6OnNob3coUmFuZ2UmIHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2Vt
ZW50KQogewotICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJvb3RWaWV3UmVjdEZvclJhbmdl
KHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKKyAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByb290
Vmlld1JlY3RGb3JSYW5nZSgmcmFuZ2VUb1JlcGxhY2UpOwogICAgIGlmIChib3VuZGluZ0JveC5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2FsdGVybmF0aXZlVGV4dEluZm8ub3Jp
Z2luYWxUZXh0ID0gcGxhaW5UZXh0KHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKLSAgICBtX2FsdGVy
bmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSByYW5nZVRvUmVwbGFjZTsKKyAg
ICBtX2FsdGVybmF0aXZlVGV4dEluZm8ub3JpZ2luYWxUZXh0ID0gcGxhaW5UZXh0KCZyYW5nZVRv
UmVwbGFjZSk7CisgICAgbV9hbHRlcm5hdGl2ZVRleHRJbmZvLnJhbmdlV2l0aEFsdGVybmF0aXZl
ID0gJnJhbmdlVG9SZXBsYWNlOwogICAgIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5kZXRhaWxzID0g
QXV0b2NvcnJlY3Rpb25BbHRlcm5hdGl2ZURldGFpbHM6OmNyZWF0ZShyZXBsYWNlbWVudCk7CiAg
ICAgbV9hbHRlcm5hdGl2ZVRleHRJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKICAgICBpZiAoQWx0ZXJu
YXRpdmVUZXh0Q2xpZW50KiBjbGllbnQgPSBhbHRlcm5hdGl2ZVRleHRDbGllbnQoKSkKQEAgLTIz
NywxNSArMjM3LDEyIEBAIFN0cmluZyBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpkaXNtaXNz
U29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0CiAgICAgcmV0dXJuIFN0cmlu
ZygpOwogfQogCi12b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QWx0ZXJuYXRp
dmVUZXh0VG9SYW5nZShjb25zdCBSYW5nZSogcmFuZ2UsIGNvbnN0IFN0cmluZyYgYWx0ZXJuYXRp
dmUsIEFsdGVybmF0aXZlVGV4dFR5cGUgYWx0ZXJuYXRpdmVUeXBlLCBjb25zdCBWZWN0b3I8RG9j
dW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+JiBtYXJrZXJUeXBlc1RvQWRkKQordm9pZCBBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjphcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UoY29uc3QgUmFu
Z2UmIHJhbmdlLCBjb25zdCBTdHJpbmcmIGFsdGVybmF0aXZlLCBBbHRlcm5hdGl2ZVRleHRUeXBl
IGFsdGVybmF0aXZlVHlwZSwgY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBl
PiYgbWFya2VyVHlwZXNUb0FkZCkKIHsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm47
CisgICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uID0g
cmFuZ2UuY2xvbmVSYW5nZSgpOwogCi0gICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZUNv
bnRhaW5pbmdDb3JyZWN0aW9uID0gcmFuZ2UtPmNsb25lUmFuZ2UoKTsKLQotICAgIHNldFN0YXJ0
KHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIHN0YXJ0T2ZQYXJhZ3Jh
cGgocmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkpOwotICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZUNv
bnRhaW5pbmdDb3JyZWN0aW9uLmdldCgpLCBlbmRPZlBhcmFncmFwaChyYW5nZS0+ZW5kUG9zaXRp
b24oKSkpOworICAgIHNldFN0YXJ0KHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24u
Z2V0KCksIHN0YXJ0T2ZQYXJhZ3JhcGgocmFuZ2Uuc3RhcnRQb3NpdGlvbigpKSk7CisgICAgc2V0
RW5kKHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIGVuZE9mUGFyYWdy
YXBoKHJhbmdlLmVuZFBvc2l0aW9uKCkpKTsKIAogICAgIC8vIEFmdGVyIHdlIHJlcGxhY2UgdGhl
IHdvcmQgYXQgcmFuZ2UgcmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIHdlIG5lZWQgdG8gYWRkIG1hcmtl
cnMgdG8gdGhhdCByYW5nZS4KICAgICAvLyBIb3dldmVyLCBvbmNlIHRoZSByZXBsYWNlbWVudCB0
b29rIHBsYWNlLCB0aGUgdmFsdWUgb2YgcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgaXMgbm90IHZhbGlk
IGFueW1vcmUuCkBAIC0yNTUsNyArMjUyLDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjphcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UoY29uc3QgUmFuZ2UqIHJhbmdlLAogICAg
IC8vIHdoaWNoIHNwYW5zIGZyb20gdGhlIHN0YXJ0IG9mIHBhcmFncmFwaCB0byB0aGUgc3RhcnQg
cG9zaXRpb24gb2YgcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuCiAgICAgUmVmUHRyPFJhbmdlPiBjb3Jy
ZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFn
cmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQo
KSwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigpLCBw
YXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydFBvc2l0aW9uKCkpOwogCi0g
ICAgUG9zaXRpb24gc3RhcnRQb3NpdGlvbk9mUmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSByYW5nZS0+
c3RhcnRQb3NpdGlvbigpOworICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRpb25PZlJhbmdlV2l0aEFs
dGVybmF0aXZlID0gcmFuZ2Uuc3RhcnRQb3NpdGlvbigpOwogICAgIGlmICghc3RhcnRQb3NpdGlv
bk9mUmFuZ2VXaXRoQWx0ZXJuYXRpdmUuY29udGFpbmVyTm9kZSgpKQogICAgICAgICByZXR1cm47
CiAgICAgYXV0byBzZXRFbmRSZXN1bHQgPSBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFw
aEFzUmFuZ2UtPnNldEVuZCgqc3RhcnRQb3NpdGlvbk9mUmFuZ2VXaXRoQWx0ZXJuYXRpdmUuY29u
dGFpbmVyTm9kZSgpLCBzdGFydFBvc2l0aW9uT2ZSYW5nZVdpdGhBbHRlcm5hdGl2ZS5jb21wdXRl
T2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwpAQCAtMjY2LDExICsyNjMsMTEgQEAgdm9pZCBBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UoY29uc3Qg
UmFuZ2UqIHJhbmdlLAogICAgIGludCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCA9
IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3Jh
cGhBc1JhbmdlLmdldCgpKTsKIAogICAgIC8vIENsb25lIHRoZSByYW5nZSwgc2luY2UgdGhlIGNh
bGxlciBvZiB0aGlzIG1ldGhvZCBtYXkgd2FudCB0byBrZWVwIHRoZSBvcmlnaW5hbCByYW5nZSBh
cm91bmQuCi0gICAgUmVmPFJhbmdlPiByYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IHJhbmdlLT5jbG9u
ZVJhbmdlKCk7CisgICAgYXV0byByYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IHJhbmdlLmNsb25lUmFu
Z2UoKTsKIAogICAgIENvbnRhaW5lck5vZGUmIHJvb3ROb2RlID0gcGFyYWdyYXBoUmFuZ2VDb250
YWluaW5nQ29ycmVjdGlvbi5nZXQoKS0+c3RhcnRDb250YWluZXIoKS50cmVlU2NvcGUoKS5yb290
Tm9kZSgpOwogICAgIGludCBwYXJhZ3JhcGhTdGFydEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5n
ZUxlbmd0aChSYW5nZTo6Y3JlYXRlKHJvb3ROb2RlLmRvY3VtZW50KCksICZyb290Tm9kZSwgMCwg
JnBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0Q29udGFpbmVyKCksIHBh
cmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0T2Zmc2V0KCkpLnB0cigpKTsK
LSAgICBhcHBseUNvbW1hbmQoU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKHJhbmdl
V2l0aEFsdGVybmF0aXZlLnB0cigpLCBhbHRlcm5hdGl2ZSkpOworICAgIGFwcGx5Q29tbWFuZChT
cGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpjcmVhdGUocmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIGFs
dGVybmF0aXZlKSk7CiAgICAgLy8gUmVjYWxjdWxhdGUgcHJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdD
b3JyZWN0aW9uLCBzaW5jZSBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kIG1vZGlmaWVkIHRoZSBE
T00sIHN1Y2ggdGhhdCB0aGUgb3JpZ2luYWwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVj
dGlvbiBpcyBubyBsb25nZXIgdmFsaWQuIFJhZGFyOiAxMDMwNTMxNSBCdWd6aWxsYTogODk1MjYK
ICAgICBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uID0gVGV4dEl0ZXJhdG9yOjpy
YW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aCgmcm9vdE5vZGUsIHBhcmFncmFwaFN0YXJ0SW5kZXgs
IGNvcnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoICsgYWx0ZXJuYXRpdmUubGVuZ3RoKCkp
OwogICAgIGlmICghcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbikKQEAgLTM1NSw3
ICszNTIsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQoKQog
ICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6IHsKICAgICAg
ICAgaWYgKCFtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmUgfHwgcGxh
aW5UZXh0KG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdpdGhBbHRlcm5hdGl2ZS5nZXQoKSkg
IT0gbV9hbHRlcm5hdGl2ZVRleHRJbmZvLm9yaWdpbmFsVGV4dCkKICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBTdHJpbmcgcGFyYWdyYXBoVGV4dCA9IHBsYWluVGV4dChUZXh0Q2hlY2tpbmdQ
YXJhZ3JhcGgobV9hbHRlcm5hdGl2ZVRleHRJbmZvLnJhbmdlV2l0aEFsdGVybmF0aXZlKS5wYXJh
Z3JhcGhSYW5nZSgpLmdldCgpKTsKKyAgICAgICAgU3RyaW5nIHBhcmFncmFwaFRleHQgPSBwbGFp
blRleHQoJlRleHRDaGVja2luZ1BhcmFncmFwaChtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VX
aXRoQWx0ZXJuYXRpdmUpLnBhcmFncmFwaFJhbmdlKCkpOwogICAgICAgICBWZWN0b3I8U3RyaW5n
PiBzdWdnZXN0aW9uczsKICAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQo
bV9hbHRlcm5hdGl2ZVRleHRJbmZvLm9yaWdpbmFsVGV4dCwgcGFyYWdyYXBoVGV4dCwgbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgc3VnZ2VzdGlvbnMpOwogICAgICAgICBpZiAoc3Vn
Z2VzdGlvbnMuaXNFbXB0eSgpKSB7CkBAIC00MDcsMTggKzQwNCwxOCBAQCB2b2lkIEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OmhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KGNvbnN0IFN0
cmluZyYgcmVzdQogICAgIHN3aXRjaCAobV9hbHRlcm5hdGl2ZVRleHRJbmZvLnR5cGUpIHsKICAg
ICBjYXNlIEFsdGVybmF0aXZlVGV4dFR5cGVDb3JyZWN0aW9uOgogICAgICAgICBpZiAocmVzdWx0
Lmxlbmd0aCgpKQotICAgICAgICAgICAgYXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKHJhbmdl
V2l0aEFsdGVybmF0aXZlLCByZXN1bHQsIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby50eXBlLCBtYXJr
ZXJUeXBlc0ZvckF1dG9jb3JyZWN0aW9uKCkpOworICAgICAgICAgICAgYXBwbHlBbHRlcm5hdGl2
ZVRleHRUb1JhbmdlKCpyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgcmVzdWx0LCBtX2FsdGVybmF0aXZl
VGV4dEluZm8udHlwZSwgbWFya2VyVHlwZXNGb3JBdXRvY29ycmVjdGlvbigpKTsKICAgICAgICAg
ZWxzZSBpZiAoIW1faXNEaXNtaXNzZWRCeUVkaXRpbmcpCiAgICAgICAgICAgICByYW5nZVdpdGhB
bHRlcm5hdGl2ZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJr
ZXIocmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIERvY3VtZW50TWFya2VyOjpSZWplY3RlZENvcnJlY3Rp
b24sIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5vcmlnaW5hbFRleHQpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEFsdGVybmF0aXZlVGV4dFR5cGVSZXZlcnNpb246CiAgICAgY2FzZSBBbHRlcm5h
dGl2ZVRleHRUeXBlU3BlbGxpbmdTdWdnZXN0aW9uczoKICAgICAgICAgaWYgKHJlc3VsdC5sZW5n
dGgoKSkKLSAgICAgICAgICAgIGFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZShyYW5nZVdpdGhB
bHRlcm5hdGl2ZSwgcmVzdWx0LCBtX2FsdGVybmF0aXZlVGV4dEluZm8udHlwZSwgbWFya2VyVHlw
ZXNGb3JSZXBsYWNlbWVudCgpKTsKKyAgICAgICAgICAgIGFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9S
YW5nZSgqcmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIHJlc3VsdCwgbV9hbHRlcm5hdGl2ZVRleHRJbmZv
LnR5cGUsIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQoKSk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZURpY3RhdGlvbkFsdGVybmF0aXZlczoKICAgICAgICAg
aWYgKHJlc3VsdC5sZW5ndGgoKSkKLSAgICAgICAgICAgIGFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9S
YW5nZShyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgcmVzdWx0LCBtX2FsdGVybmF0aXZlVGV4dEluZm8u
dHlwZSwgbWFya2VyVHlwZXNGb3JBcHBsaWVkRGljdGF0aW9uQWx0ZXJuYXRpdmUoKSk7CisgICAg
ICAgICAgICBhcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UoKnJhbmdlV2l0aEFsdGVybmF0aXZl
LCByZXN1bHQsIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby50eXBlLCBtYXJrZXJUeXBlc0ZvckFwcGxp
ZWREaWN0YXRpb25BbHRlcm5hdGl2ZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC01
MTYsMzQgKzUxMywzMiBAQCBUZXh0Q2hlY2tlckNsaWVudCogQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6dGV4dENoZWNrZXIoKQogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lkIEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2Nv
cnJlY3Rpb25SZXNwb25zZSByZXNwb25zZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywg
UGFzc1JlZlB0cjxSYW5nZT4gcmVwbGFjZW1lbnRSYW5nZSkKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlcjo6cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJl
c3BvbnNlIHJlc3BvbnNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBSYW5nZSogcmVw
bGFjZW1lbnRSYW5nZSkKIHsKICAgICBpZiAoYXV0byBjbGllbnQgPSBhbHRlcm5hdGl2ZVRleHRD
bGllbnQoKSkKLSAgICAgICAgY2xpZW50LT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKHJl
c3BvbnNlLCByZXBsYWNlZFN0cmluZywgcGxhaW5UZXh0KHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCkp
KTsKKyAgICAgICAgY2xpZW50LT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKHJlc3BvbnNl
LCByZXBsYWNlZFN0cmluZywgcGxhaW5UZXh0KHJlcGxhY2VtZW50UmFuZ2UpKTsKIH0KIAotdm9p
ZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrUmV2ZXJzZWQoUGFzc1JlZlB0cjxSYW5n
ZT4gY2hhbmdlZFJhbmdlKQordm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrUmV2
ZXJzZWQoUmFuZ2UmIGNoYW5nZWRSYW5nZSkKIHsKLSAgICBjaGFuZ2VkUmFuZ2UtPnN0YXJ0Q29u
dGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhjaGFuZ2VkUmFuZ2Uu
Z2V0KCksIERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkLCBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKLSAgICBjaGFuZ2VkUmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKGNoYW5n
ZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwor
ICAgIGNoYW5nZWRSYW5nZS5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLnJl
bW92ZU1hcmtlcnMoJmNoYW5nZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQs
IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJr
ZXIpOworICAgIGNoYW5nZWRSYW5nZS5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2Vy
cygpLmFkZE1hcmtlcigmY2hhbmdlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2lu
Z0V4ZW1wdGlvbik7CiB9CiAKLXZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya0Nv
cnJlY3Rpb24oUGFzc1JlZlB0cjxSYW5nZT4gcmVwbGFjZWRSYW5nZSwgY29uc3QgU3RyaW5nJiBy
ZXBsYWNlZFN0cmluZykKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya0NvcnJl
Y3Rpb24oUmFuZ2UmIHJlcGxhY2VkUmFuZ2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcp
CiB7Ci0gICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyJiBtYXJrZXJzID0gcmVwbGFjZWRSYW5n
ZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKTsKKyAgICBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXImIG1hcmtlcnMgPSByZXBsYWNlZFJhbmdlLnN0YXJ0Q29udGFpbmVyKCku
ZG9jdW1lbnQoKS5tYXJrZXJzKCk7CiAgICAgZm9yIChhdXRvJiBtYXJrZXJUeXBlIDogbWFya2Vy
VHlwZXNGb3JBdXRvY29ycmVjdGlvbigpKSB7CiAgICAgICAgIGlmIChtYXJrZXJUeXBlID09IERv
Y3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCB8fCBtYXJrZXJUeXBlID09IERvY3VtZW50TWFya2Vy
OjpBdXRvY29ycmVjdGVkKQotICAgICAgICAgICAgbWFya2Vycy5hZGRNYXJrZXIocmVwbGFjZWRS
YW5nZS5nZXQoKSwgbWFya2VyVHlwZSwgcmVwbGFjZWRTdHJpbmcpOworICAgICAgICAgICAgbWFy
a2Vycy5hZGRNYXJrZXIoJnJlcGxhY2VkUmFuZ2UsIG1hcmtlclR5cGUsIHJlcGxhY2VkU3RyaW5n
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWFya2Vycy5hZGRNYXJrZXIocmVwbGFjZWRS
YW5nZS5nZXQoKSwgbWFya2VyVHlwZSk7CisgICAgICAgICAgICBtYXJrZXJzLmFkZE1hcmtlcigm
cmVwbGFjZWRSYW5nZSwgbWFya2VyVHlwZSk7CiAgICAgfQogfQogCi12b2lkIEFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3Jy
ZWN0aW9uKFJhbmdlKiByYW5nZU9mQ29ycmVjdGlvbiwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQs
IGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6cmVjb3JkU3BlbGxjaGVja2VyUmVzcG9uc2VGb3JNb2RpZmllZENvcnJlY3Rpb24oUmFuZ2Um
IHJhbmdlT2ZDb3JyZWN0aW9uLCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5n
JiBjb3JyZWN0aW9uKQogewotICAgIGlmICghcmFuZ2VPZkNvcnJlY3Rpb24pCi0gICAgICAgIHJl
dHVybjsKLSAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXImIG1hcmtlcnMgPSByYW5nZU9mQ29y
cmVjdGlvbi0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKTsKKyAgICBEb2N1
bWVudE1hcmtlckNvbnRyb2xsZXImIG1hcmtlcnMgPSByYW5nZU9mQ29ycmVjdGlvbi5zdGFydENv
bnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpOwogICAgIFZlY3RvcjxSZW5kZXJlZERvY3Vt
ZW50TWFya2VyKj4gY29ycmVjdGVkT25jZU1hcmtlcnMgPSBtYXJrZXJzLm1hcmtlcnNJblJhbmdl
KHJhbmdlT2ZDb3JyZWN0aW9uLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCk7CiAgICAg
aWYgKGNvcnJlY3RlZE9uY2VNYXJrZXJzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
NTU3LDcgKzU1Miw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVjb3JkU3Bl
bGxjaGVja2VyUmVzcG9uc2VGb3JNb2RpZmllZENvcnJlY3Rpb24oCiAgICAgICAgICAgICBjbGll
bnQtPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZTo6
RWRpdGVkLCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24pOwogICAgIH0KIAotICAgIG1hcmtlcnMucmVt
b3ZlTWFya2VycyhyYW5nZU9mQ29ycmVjdGlvbiwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0
ZWQsIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdN
YXJrZXIpOworICAgIG1hcmtlcnMucmVtb3ZlTWFya2VycygmcmFuZ2VPZkNvcnJlY3Rpb24sIERv
Y3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkLCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJl
bW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKIH0KIAogdm9pZCBBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyOjpkZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKGNvbnN0IFBvc2l0
aW9uJiBwb3NpdGlvbiwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFN0cmluZykKQEAgLTU4NywxMiAr
NTgyLDEyIEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya1ByZWNlZGluZ1do
aXRlc3BhY2VGb3JEZWxldGVkQXV0b2NvcnJlY3Rpb25BCiAgICAgbV9mcmFtZS5kb2N1bWVudCgp
LT5tYXJrZXJzKCkuYWRkTWFya2VyKHByZWNlZGluZ0NoYXJhY3RlclJhbmdlLmdldCgpLCBEb2N1
bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uLCBtX29yaWdpbmFsU3RyaW5nRm9yTGFz
dERlbGV0ZWRBdXRvY29ycmVjdGlvbik7CiB9CiAKLWJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdChjb25zdCBUZXh0
Q2hlY2tpbmdSZXN1bHQqIHJlc3VsdCwgUmFuZ2UqIHJhbmdlV2l0aEFsdGVybmF0aXZlLCBjb25z
dCBTdHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNlZCkKK2Jvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdChjb25zdCBUZXh0
Q2hlY2tpbmdSZXN1bHQmIHJlc3VsdCwgUmFuZ2UmIHJhbmdlV2l0aEFsdGVybmF0aXZlLCBjb25z
dCBTdHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNlZCkKIHsKICAgICBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXImIG1hcmtlckNvbnRyb2xsZXIgPSBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKTsK
ICAgICBpZiAobWFya2VyQ29udHJvbGxlci5oYXNNYXJrZXJzKHJhbmdlV2l0aEFsdGVybmF0aXZl
LCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpKSB7Ci0gICAgICAgIGlmIChyZXN1bHQtPnR5
cGUgPT0gVGV4dENoZWNraW5nVHlwZUNvcnJlY3Rpb24pCi0gICAgICAgICAgICByZWNvcmRTcGVs
bGNoZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbihyYW5nZVdpdGhBbHRlcm5hdGl2
ZSwgc3RyaW5nVG9CZVJlcGxhY2VkLCByZXN1bHQtPnJlcGxhY2VtZW50KTsKKyAgICAgICAgaWYg
KHJlc3VsdC50eXBlID09IFRleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uKQorICAgICAgICAgICAg
cmVjb3JkU3BlbGxjaGVja2VyUmVzcG9uc2VGb3JNb2RpZmllZENvcnJlY3Rpb24ocmFuZ2VXaXRo
QWx0ZXJuYXRpdmUsIHN0cmluZ1RvQmVSZXBsYWNlZCwgcmVzdWx0LnJlcGxhY2VtZW50KTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNjAyLDExICs1OTcsMTEgQEAgYm9vbCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNl
ZEJ5UmVzdWx0KGNvbnN0IFQKICAgICBpZiAobWFya2VyQ29udHJvbGxlci5oYXNNYXJrZXJzKHJh
bmdlV2l0aEFsdGVybmF0aXZlLCBEb2N1bWVudE1hcmtlcjo6QWNjZXB0ZWRDYW5kaWRhdGUpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBQb3NpdGlvbiBiZWdpbm5pbmdPZlJhbmdlID0g
cmFuZ2VXaXRoQWx0ZXJuYXRpdmUtPnN0YXJ0UG9zaXRpb24oKTsKKyAgICBQb3NpdGlvbiBiZWdp
bm5pbmdPZlJhbmdlID0gcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuc3RhcnRQb3NpdGlvbigpOwogICAg
IFBvc2l0aW9uIHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uID0gYmVnaW5uaW5nT2ZSYW5nZS5w
cmV2aW91cygpOwotICAgIFJlZlB0cjxSYW5nZT4gcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIHByZWNlZGluZ0NoYXJhY3RlclBvc2l0
aW9uLCBiZWdpbm5pbmdPZlJhbmdlKTsKKyAgICBhdXRvIHByZWNlZGluZ0NoYXJhY3RlclJhbmdl
ID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBwcmVjZWRpbmdDaGFyYWN0ZXJQ
b3NpdGlvbiwgYmVnaW5uaW5nT2ZSYW5nZSk7CiAKLSAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVu
dE1hcmtlcio+IG1hcmtlcnMgPSBtYXJrZXJDb250cm9sbGVyLm1hcmtlcnNJblJhbmdlKHByZWNl
ZGluZ0NoYXJhY3RlclJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3Jy
ZWN0aW9uKTsKKyAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBt
YXJrZXJDb250cm9sbGVyLm1hcmtlcnNJblJhbmdlKHByZWNlZGluZ0NoYXJhY3RlclJhbmdlLCBE
b2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uKTsKICAgICBmb3IgKGNvbnN0IGF1
dG8qIG1hcmtlciA6IG1hcmtlcnMpIHsKICAgICAgICAgaWYgKG1hcmtlci0+ZGVzY3JpcHRpb24o
KSA9PSBzdHJpbmdUb0JlUmVwbGFjZWQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC03
MjMsMTEgKzcxOCwxMSBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5RGlj
dGF0aW9uQWx0ZXJuYXRpdmUoY29uc3QgU3RyaW5nJiBhbHRlcm5hdAogICAgIGlmICghc2VsZWN0
aW9uIHx8ICFlZGl0b3Iuc2hvdWxkSW5zZXJ0VGV4dChhbHRlcm5hdGl2ZVN0cmluZywgc2VsZWN0
aW9uLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAgICAgIHJldHVybjsK
ICAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXImIG1hcmtlcnMgPSBzZWxlY3Rpb24tPnN0YXJ0
Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCk7Ci0gICAgVmVjdG9yPFJlbmRlcmVkRG9j
dW1lbnRNYXJrZXIqPiBkaWN0YXRpb25BbHRlcm5hdGl2ZXNNYXJrZXJzID0gbWFya2Vycy5tYXJr
ZXJzSW5SYW5nZShzZWxlY3Rpb24uZ2V0KCksIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25BbHRl
cm5hdGl2ZXMpOworICAgIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gZGljdGF0aW9u
QWx0ZXJuYXRpdmVzTWFya2VycyA9IG1hcmtlcnMubWFya2Vyc0luUmFuZ2UoKnNlbGVjdGlvbiwg
RG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlcyk7CiAgICAgZm9yIChhdXRvKiBt
YXJrZXIgOiBkaWN0YXRpb25BbHRlcm5hdGl2ZXNNYXJrZXJzKQogICAgICAgICByZW1vdmVEaWN0
YXRpb25BbHRlcm5hdGl2ZXNGb3JNYXJrZXIoKm1hcmtlcik7CiAKLSAgICBhcHBseUFsdGVybmF0
aXZlVGV4dFRvUmFuZ2Uoc2VsZWN0aW9uLmdldCgpLCBhbHRlcm5hdGl2ZVN0cmluZywgQWx0ZXJu
YXRpdmVUZXh0VHlwZURpY3RhdGlvbkFsdGVybmF0aXZlcywgbWFya2VyVHlwZXNGb3JBcHBsaWVk
RGljdGF0aW9uQWx0ZXJuYXRpdmUoKSk7CisgICAgYXBwbHlBbHRlcm5hdGl2ZVRleHRUb1Jhbmdl
KCpzZWxlY3Rpb24sIGFsdGVybmF0aXZlU3RyaW5nLCBBbHRlcm5hdGl2ZVRleHRUeXBlRGljdGF0
aW9uQWx0ZXJuYXRpdmVzLCBtYXJrZXJUeXBlc0ZvckFwcGxpZWREaWN0YXRpb25BbHRlcm5hdGl2
ZSgpKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGFsdGVybmF0aXZlU3RyaW5nKTsKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXIuaAppbmRleCBjNTgzNTAzZWFhMjI2NjY3NTNiMjAyM2IzZTU2YmJkNTE2MTQxYWIyLi41ZjY2
NWE4ZDNlYWU0MTRjMjdkZjZkZTUyZjRhMDljNjU3NTA2YzgwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaApAQCAtODAsNyArODAs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdG9wQWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigpIFVOTEVT
U19FTkFCTEVEKHsgfSkKIAogICAgIHZvaWQgZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQWx0
ZXJuYXRpdmVUZXh0KSBVTkxFU1NfRU5BQkxFRCh7IH0pCi0gICAgdm9pZCBzaG93KFBhc3NSZWZQ
dHI8UmFuZ2U+IHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50KSBVTkxF
U1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShyYW5nZVRvUmVwbGFjZSk7IFVOVVNFRF9QQVJBTShy
ZXBsYWNlbWVudCk7IH0pCisgICAgdm9pZCBzaG93KFJhbmdlJiByYW5nZVRvUmVwbGFjZSwgY29u
c3QgU3RyaW5nJiByZXBsYWNlbWVudCkgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmFu
Z2VUb1JlcGxhY2UpOyBVTlVTRURfUEFSQU0ocmVwbGFjZW1lbnQpOyB9KQogCiAgICAgLy8gUmV0
dXJuIHRydWUgaWYgY29ycmVjdGlvbiB3YXMgYXBwbGllZCwgZmFsc2Ugb3RoZXJ3aXNlLgogICAg
IGJvb2wgYXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKSBVTkxF
U1NfRU5BQkxFRCh7IHJldHVybiBmYWxzZTsgfSkKQEAgLTk3LDE2ICs5NywxNiBAQCBwdWJsaWM6
CiAgICAgdm9pZCBoYW5kbGVDYW5jZWxPcGVyYXRpb24oKSBVTkxFU1NfRU5BQkxFRCh7IH0pCiAK
ICAgICBib29sIGhhc1BlbmRpbmdDb3JyZWN0aW9uKCkgY29uc3QgVU5MRVNTX0VOQUJMRUQoeyBy
ZXR1cm4gZmFsc2U7IH0pCi0gICAgYm9vbCBpc1NwZWxsaW5nTWFya2VyQWxsb3dlZChQYXNzUmVm
UHRyPFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlKSBjb25zdCBVTkxFU1NfRU5BQkxFRCh7IFVOVVNF
RF9QQVJBTShtaXNzcGVsbGluZ1JhbmdlKTsgcmV0dXJuIHRydWU7IH0pCisgICAgYm9vbCBpc1Nw
ZWxsaW5nTWFya2VyQWxsb3dlZChSYW5nZSYgbWlzc3BlbGxpbmdSYW5nZSkgY29uc3QgVU5MRVNT
X0VOQUJMRUQoeyBVTlVTRURfUEFSQU0obWlzc3BlbGxpbmdSYW5nZSk7IHJldHVybiB0cnVlOyB9
KQogICAgIGJvb2wgaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkgVU5MRVNT
X0VOQUJMRUQoeyByZXR1cm4gZmFsc2U7IH0pCiAgICAgYm9vbCBzaG91bGRSZW1vdmVNYXJrZXJz
VXBvbkVkaXRpbmcoKTsKIAotICAgIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShB
dXRvY29ycmVjdGlvblJlc3BvbnNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBQYXNz
UmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9Q
QVJBTShyZXBsYWNlZFN0cmluZyk7IFVOVVNFRF9QQVJBTShyZXBsYWNlbWVudFJhbmdlKTsgfSkK
LSAgICB2b2lkIG1hcmtSZXZlcnNlZChQYXNzUmVmUHRyPFJhbmdlPiBjaGFuZ2VkUmFuZ2UpIFVO
TEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKGNoYW5nZWRSYW5nZSk7IH0pCi0gICAgdm9pZCBt
YXJrQ29ycmVjdGlvbihQYXNzUmVmUHRyPFJhbmdlPiByZXBsYWNlZFJhbmdlLCBjb25zdCBTdHJp
bmcmIHJlcGxhY2VkU3RyaW5nKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShyZXBsYWNl
ZFJhbmdlKTsgVU5VU0VEX1BBUkFNKHJlcGxhY2VkU3RyaW5nKTsgfSkKKyAgICB2b2lkIHJlY29y
ZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZSwgY29uc3QgU3Ry
aW5nJiByZXBsYWNlZFN0cmluZywgUmFuZ2UqIHJlcGxhY2VtZW50UmFuZ2UpIFVOTEVTU19FTkFC
TEVEKHsgVU5VU0VEX1BBUkFNKHJlcGxhY2VkU3RyaW5nKTsgVU5VU0VEX1BBUkFNKHJlcGxhY2Vt
ZW50UmFuZ2UpOyB9KQorICAgIHZvaWQgbWFya1JldmVyc2VkKFJhbmdlJiBjaGFuZ2VkUmFuZ2Up
IFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKGNoYW5nZWRSYW5nZSk7IH0pCisgICAgdm9p
ZCBtYXJrQ29ycmVjdGlvbihSYW5nZSYgcmVwbGFjZWRSYW5nZSwgY29uc3QgU3RyaW5nJiByZXBs
YWNlZFN0cmluZykgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmVwbGFjZWRSYW5nZSk7
IFVOVVNFRF9QQVJBTShyZXBsYWNlZFN0cmluZyk7IH0pCiAKICAgICAvLyBUaGlzIGZ1bmN0aW9u
IHJldHVybnMgZmFsc2UgaWYgdGhlIHJlcGxhY2VtZW50IHNob3VsZCBub3QgYmUgY2FycmllZCBv
dXQuCi0gICAgYm9vbCBwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KGNv
bnN0IFRleHRDaGVja2luZ1Jlc3VsdCosIFJhbmdlKiByYW5nZVRvQmVSZXBsYWNlZCwgY29uc3Qg
U3RyaW5nJiBzdHJpbmdUb0JlUmVwbGFjZWQpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFN
KHJhbmdlVG9CZVJlcGxhY2VkKTsgVU5VU0VEX1BBUkFNKHN0cmluZ1RvQmVSZXBsYWNlZCk7IHJl
dHVybiB0cnVlOyB9KTsKKyAgICBib29sIHByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2Vk
QnlSZXN1bHQoY29uc3QgVGV4dENoZWNraW5nUmVzdWx0JiwgUmFuZ2UmIHJhbmdlVG9CZVJlcGxh
Y2VkLCBjb25zdCBTdHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNlZCkgVU5MRVNTX0VOQUJMRUQoeyBV
TlVTRURfUEFSQU0ocmFuZ2VUb0JlUmVwbGFjZWQpOyBVTlVTRURfUEFSQU0oc3RyaW5nVG9CZVJl
cGxhY2VkKTsgcmV0dXJuIHRydWU7IH0pOwogICAgIHZvaWQgZGVsZXRlZEF1dG9jb3JyZWN0aW9u
QXRQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYsIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxTdHJpbmcp
IFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKG9yaWdpbmFsU3RyaW5nKTsgfSkKIAogICAg
IGJvb2wgaW5zZXJ0RGljdGF0ZWRUZXh0KGNvbnN0IFN0cmluZyYsIGNvbnN0IFZlY3RvcjxEaWN0
YXRpb25BbHRlcm5hdGl2ZT4mLCBFdmVudCopOwpAQCAtMTE3LDkgKzExNyw5IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAjaWYgVVNFKEFVVE9DT1JSRUNUSU9OX1BBTkVMKQogICAgIFN0cmluZyBkaXNt
aXNzU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0KTsKLSAgICB2b2lkIGFw
cGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZShjb25zdCBSYW5nZSosIGNvbnN0IFN0cmluZyYgYWx0
ZXJuYXRpdmUsIEFsdGVybmF0aXZlVGV4dFR5cGUsIGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtl
cjo6TWFya2VyVHlwZT4mKTsKKyAgICB2b2lkIGFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZShj
b25zdCBSYW5nZSYsIGNvbnN0IFN0cmluZyYgYWx0ZXJuYXRpdmUsIEFsdGVybmF0aXZlVGV4dFR5
cGUsIGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mKTsKICAgICB2b2lk
IHRpbWVyRmlyZWQoKTsKLSAgICB2b2lkIHJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9k
aWZpZWRDb3JyZWN0aW9uKFJhbmdlKiByYW5nZU9mQ29ycmVjdGlvbiwgY29uc3QgU3RyaW5nJiBj
b3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbik7CisgICAgdm9pZCByZWNvcmRTcGVs
bGNoZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbihSYW5nZSYgcmFuZ2VPZkNvcnJl
Y3Rpb24sIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24p
OwogICAgIFN0cmluZyBtYXJrZXJEZXNjcmlwdGlvbkZvckFwcGxpZWRBbHRlcm5hdGl2ZVRleHQo
QWx0ZXJuYXRpdmVUZXh0VHlwZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUpOwogCiAgICAg
Ym9vbCBzaG91bGRTdGFydFRpbWVyRm9yKGNvbnN0IERvY3VtZW50TWFya2VyJiwgaW50IGVuZE9m
ZnNldCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5
bGVDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQu
Y3BwCmluZGV4IDFlZDk2ZGJlNjZlYmI5MTNlMGEyODQ4MjkxMDQ0MDlkNmI4NmI4YmQuLmM1YWQ1
Y2JiMGU2YWEwZGE5NzUxZDE3OGZiYzYyYWFjZjQ4ZjhkNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCkBAIC0xMTQsMTIgKzExNCwxMiBAQCBib29s
IGlzRW1wdHlGb250VGFnKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIFNob3VsZFN0eWxlQXR0cmli
dXRlQmVFbXB0eSBzaG91bGRTdAogICAgIHJldHVybiBoYXNOb0F0dHJpYnV0ZU9yT25seVN0eWxl
QXR0cmlidXRlKGRvd25jYXN0PEhUTUxGb250RWxlbWVudD4oZWxlbWVudCksIHNob3VsZFN0eWxl
QXR0cmlidXRlQmVFbXB0eSk7CiB9CiAKLXN0YXRpYyBSZWZQdHI8SFRNTEVsZW1lbnQ+IGNyZWF0
ZUZvbnRFbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCkKK3N0YXRpYyBSZWY8SFRNTEVsZW1lbnQ+
IGNyZWF0ZUZvbnRFbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCkKIHsKICAgICByZXR1cm4gY3Jl
YXRlSFRNTEVsZW1lbnQoZG9jdW1lbnQsIGZvbnRUYWcpOwogfQogCi1SZWZQdHI8SFRNTEVsZW1l
bnQ+IGNyZWF0ZVN0eWxlU3BhbkVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQorUmVmPEhUTUxF
bGVtZW50PiBjcmVhdGVTdHlsZVNwYW5FbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCkKIHsKICAg
ICByZXR1cm4gY3JlYXRlSFRNTEVsZW1lbnQoZG9jdW1lbnQsIHNwYW5UYWcpOwogfQpAQCAtMTQ2
LDE0ICsxNDYsMTQgQEAgQXBwbHlTdHlsZUNvbW1hbmQ6OkFwcGx5U3R5bGVDb21tYW5kKERvY3Vt
ZW50JiBkb2N1bWVudCwgY29uc3QgRWRpdGluZ1N0eWxlKiBzdHkKIHsKIH0KIAotQXBwbHlTdHls
ZUNvbW1hbmQ6OkFwcGx5U3R5bGVDb21tYW5kKFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCwg
Ym9vbCByZW1vdmVPbmx5LCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCitBcHBseVN0eWxlQ29t
bWFuZDo6QXBwbHlTdHlsZUNvbW1hbmQoUmVmPEVsZW1lbnQ+JiYgZWxlbWVudCwgYm9vbCByZW1v
dmVPbmx5LCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiAgICAgOiBDb21wb3NpdGVFZGl0Q29t
bWFuZChlbGVtZW50LT5kb2N1bWVudCgpLCBlZGl0aW5nQWN0aW9uKQogICAgICwgbV9zdHlsZShF
ZGl0aW5nU3R5bGU6OmNyZWF0ZSgpKQogICAgICwgbV9wcm9wZXJ0eUxldmVsKFByb3BlcnR5RGVm
YXVsdCkKICAgICAsIG1fc3RhcnQoZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKS5kb3duc3RyZWFt
KCkpCiAgICAgLCBtX2VuZChlbmRpbmdTZWxlY3Rpb24oKS5lbmQoKS51cHN0cmVhbSgpKQogICAg
ICwgbV91c2VFbmRpbmdTZWxlY3Rpb24odHJ1ZSkKLSAgICAsIG1fc3R5bGVkSW5saW5lRWxlbWVu
dChlbGVtZW50KQorICAgICwgbV9zdHlsZWRJbmxpbmVFbGVtZW50KFdURk1vdmUoZWxlbWVudCkp
CiAgICAgLCBtX3JlbW92ZU9ubHkocmVtb3ZlT25seSkKIHsKIH0KQEAgLTI5MCw3ICsyOTAsNyBA
QCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUJsb2NrU3R5bGUoRWRpdGluZ1N0eWxlICpz
dHlsZSkKICAgICAgICAgdXBkYXRlU3RhcnRFbmQoc3RhcnRSYW5nZS0+c3RhcnRQb3NpdGlvbigp
LCBlbmRSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8TXV0
YWJsZVN0eWxlUHJvcGVydGllcz4gY29weVN0eWxlT3JDcmVhdGVFbXB0eShjb25zdCBTdHlsZVBy
b3BlcnRpZXMqIHN0eWxlKQorc3RhdGljIFJlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBjb3B5
U3R5bGVPckNyZWF0ZUVtcHR5KGNvbnN0IFN0eWxlUHJvcGVydGllcyogc3R5bGUpCiB7CiAgICAg
aWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuIE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0
ZSgpOwpAQCAtMzk5LDcgKzM5OSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5UmVs
YXRpdmVGb250U3R5bGVDaGFuZ2UoRWRpdGluZ1N0eWxlKiBzdHlsZSkKICAgICAgICAgICAgIC8v
IExhc3Qgc3R5bGVkIG5vZGUgd2FzIG5vdCBwYXJlbnQgbm9kZSBvZiB0aGlzIHRleHQgbm9kZSwg
YnV0IHdlIHdpc2ggdG8gc3R5bGUgdGhpcwogICAgICAgICAgICAgLy8gdGV4dCBub2RlLiBUbyBt
YWtlIHRoaXMgcG9zc2libGUsIGFkZCBhIHN0eWxlIHNwYW4gdG8gc3Vycm91bmQgdGhpcyB0ZXh0
IG5vZGUuCiAgICAgICAgICAgICBhdXRvIHNwYW4gPSBjcmVhdGVTdHlsZVNwYW5FbGVtZW50KGRv
Y3VtZW50KCkpOwotICAgICAgICAgICAgc3Vycm91bmROb2RlUmFuZ2VXaXRoRWxlbWVudChub2Rl
LCBub2RlLCBzcGFuLmdldCgpKTsKKyAgICAgICAgICAgIHN1cnJvdW5kTm9kZVJhbmdlV2l0aEVs
ZW1lbnQoKm5vZGUsICpub2RlLCBzcGFuLmNvcHlSZWYoKSk7CiAgICAgICAgICAgICBlbGVtZW50
ID0gV1RGTW92ZShzcGFuKTsKICAgICAgICAgfSAgZWxzZSB7CiAgICAgICAgICAgICAvLyBPbmx5
IGhhbmRsZSBIVE1MIGVsZW1lbnRzIGFuZCB0ZXh0IG5vZGVzLgpAQCAtNzY2LDcgKzc2Niw3IEBA
IHN0cnVjdCBJbmxpbmVSdW5Ub0FwcGx5U3R5bGUgewogICAgIFN0eWxlQ2hhbmdlIGNoYW5nZTsK
IH07CiAKLXZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVUb05vZGVSYW5n
ZShFZGl0aW5nU3R5bGUqIHN0eWxlLCBQYXNzUmVmUHRyPE5vZGU+IHN0YXJ0Tm9kZSwgUGFzc1Jl
ZlB0cjxOb2RlPiBwYXN0RW5kTm9kZSkKK3ZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5s
aW5lU3R5bGVUb05vZGVSYW5nZShFZGl0aW5nU3R5bGUqIHN0eWxlLCBOb2RlKiBzdGFydE5vZGUs
IE5vZGUqIHBhc3RFbmROb2RlKQogewogICAgIGlmIChtX3JlbW92ZU9ubHkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTgwMSw3ICs4MDEsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlu
bGluZVN0eWxlVG9Ob2RlUmFuZ2UoRWRpdGluZ1N0eWxlKiBzdHlsZSwgUGFzc1JlZgogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIAogICAgICAgICBpZiAobm9kZS0+aGFzQ2hpbGROb2Rl
cygpKSB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y29udGFpbnMocGFzdEVuZE5vZGUuZ2V0KCkp
IHx8IGNvbnRhaW5zTm9uRWRpdGFibGVSZWdpb24oKm5vZGUpIHx8ICFub2RlLT5wYXJlbnROb2Rl
KCktPmhhc0VkaXRhYmxlU3R5bGUoKSkKKyAgICAgICAgICAgIGlmIChub2RlLT5jb250YWlucyhw
YXN0RW5kTm9kZSkgfHwgY29udGFpbnNOb25FZGl0YWJsZVJlZ2lvbigqbm9kZSkgfHwgIW5vZGUt
PnBhcmVudE5vZGUoKS0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgaWYgKGVkaXRpbmdJZ25vcmVzQ29udGVudCgqbm9kZSkpIHsKICAg
ICAgICAgICAgICAgICBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4o
Km5vZGUpOwpAQCAtODEyLDcgKzgxMiw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5
SW5saW5lU3R5bGVUb05vZGVSYW5nZShFZGl0aW5nU3R5bGUqIHN0eWxlLCBQYXNzUmVmCiAgICAg
ICAgIE5vZGUqIHJ1blN0YXJ0ID0gbm9kZS5nZXQoKTsKICAgICAgICAgTm9kZSogcnVuRW5kID0g
bm9kZS5nZXQoKTsKICAgICAgICAgTm9kZSogc2libGluZyA9IG5vZGUtPm5leHRTaWJsaW5nKCk7
Ci0gICAgICAgIHdoaWxlIChzaWJsaW5nICYmIHNpYmxpbmcgIT0gcGFzdEVuZE5vZGUgJiYgIXNp
YmxpbmctPmNvbnRhaW5zKHBhc3RFbmROb2RlLmdldCgpKSAmJiAoIWlzQmxvY2soc2libGluZykg
fHwgc2libGluZy0+aGFzVGFnTmFtZShiclRhZykpICYmICFjb250YWluc05vbkVkaXRhYmxlUmVn
aW9uKCpzaWJsaW5nKSkgeworICAgICAgICB3aGlsZSAoc2libGluZyAmJiBzaWJsaW5nICE9IHBh
c3RFbmROb2RlICYmICFzaWJsaW5nLT5jb250YWlucyhwYXN0RW5kTm9kZSkgJiYgKCFpc0Jsb2Nr
KHNpYmxpbmcpIHx8IHNpYmxpbmctPmhhc1RhZ05hbWUoYnJUYWcpKSAmJiAhY29udGFpbnNOb25F
ZGl0YWJsZVJlZ2lvbigqc2libGluZykpIHsKICAgICAgICAgICAgIHJ1bkVuZCA9IHNpYmxpbmc7
CiAgICAgICAgICAgICBzaWJsaW5nID0gcnVuRW5kLT5uZXh0U2libGluZygpOwogICAgICAgICB9
CkBAIC04MjYsOSArODI2LDkgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVT
dHlsZVRvTm9kZVJhbmdlKEVkaXRpbmdTdHlsZSogc3R5bGUsIFBhc3NSZWYKICAgICB9CiAKICAg
ICBmb3IgKGF1dG8mIHJ1biA6IHJ1bnMpIHsKLSAgICAgICAgcmVtb3ZlQ29uZmxpY3RpbmdJbmxp
bmVTdHlsZUZyb21SdW4oc3R5bGUsIHJ1bi5zdGFydCwgcnVuLmVuZCwgcnVuLnBhc3RFbmROb2Rl
KTsKKyAgICAgICAgcmVtb3ZlQ29uZmxpY3RpbmdJbmxpbmVTdHlsZUZyb21SdW4oc3R5bGUsIHJ1
bi5zdGFydCwgcnVuLmVuZCwgcnVuLnBhc3RFbmROb2RlLmdldCgpKTsKICAgICAgICAgaWYgKHJ1
bi5zdGFydEFuZEVuZEFyZVN0aWxsSW5Eb2N1bWVudCgpKQotICAgICAgICAgICAgcnVuLnBvc2l0
aW9uRm9yU3R5bGVDb21wdXRhdGlvbiA9IHBvc2l0aW9uVG9Db21wdXRlSW5saW5lU3R5bGVDaGFu
Z2UocnVuLnN0YXJ0LCBydW4uZHVtbXlFbGVtZW50KTsKKyAgICAgICAgICAgIHJ1bi5wb3NpdGlv
bkZvclN0eWxlQ29tcHV0YXRpb24gPSBwb3NpdGlvblRvQ29tcHV0ZUlubGluZVN0eWxlQ2hhbmdl
KCpydW4uc3RhcnQsIHJ1bi5kdW1teUVsZW1lbnQpOwogICAgIH0KIAogICAgIGRvY3VtZW50KCku
dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CkBAIC04NDAsNyArODQwLDcg
QEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRvTm9kZVJhbmdlKEVk
aXRpbmdTdHlsZSogc3R5bGUsIFBhc3NSZWYKICAgICAgICAgaWYgKHJ1bi5kdW1teUVsZW1lbnQp
CiAgICAgICAgICAgICByZW1vdmVOb2RlKHJ1bi5kdW1teUVsZW1lbnQpOwogICAgICAgICBpZiAo
cnVuLnN0YXJ0QW5kRW5kQXJlU3RpbGxJbkRvY3VtZW50KCkpCi0gICAgICAgICAgICBhcHBseUlu
bGluZVN0eWxlQ2hhbmdlKFdURk1vdmUocnVuLnN0YXJ0KSwgV1RGTW92ZShydW4uZW5kKSwgcnVu
LmNoYW5nZSwgQWRkU3R5bGVkRWxlbWVudCk7CisgICAgICAgICAgICBhcHBseUlubGluZVN0eWxl
Q2hhbmdlKHJ1bi5zdGFydC5yZWxlYXNlTm9uTnVsbCgpLCBydW4uZW5kLnJlbGVhc2VOb25OdWxs
KCksIHJ1bi5jaGFuZ2UsIEFkZFN0eWxlZEVsZW1lbnQpOwogICAgIH0KIH0KIApAQCAtODY2LDEz
ICs4NjYsMTMgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6c2hvdWxkQXBwbHlJbmxpbmVTdHls
ZVRvUnVuKEVkaXRpbmdTdHlsZSogc3R5bGUsIE5vZGUqIHIKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLXZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUNvbmZsaWN0aW5nSW5saW5lU3R5bGVG
cm9tUnVuKEVkaXRpbmdTdHlsZSogc3R5bGUsIFJlZlB0cjxOb2RlPiYgcnVuU3RhcnQsIFJlZlB0
cjxOb2RlPiYgcnVuRW5kLCBQYXNzUmVmUHRyPE5vZGU+IHBhc3RFbmROb2RlKQordm9pZCBBcHBs
eVN0eWxlQ29tbWFuZDo6cmVtb3ZlQ29uZmxpY3RpbmdJbmxpbmVTdHlsZUZyb21SdW4oRWRpdGlu
Z1N0eWxlKiBzdHlsZSwgUmVmUHRyPE5vZGU+JiBydW5TdGFydCwgUmVmUHRyPE5vZGU+JiBydW5F
bmQsIE5vZGUqIHBhc3RFbmROb2RlKQogewogICAgIEFTU0VSVChydW5TdGFydCAmJiBydW5FbmQp
OwogICAgIFJlZlB0cjxOb2RlPiBuZXh0ID0gcnVuU3RhcnQ7CiAgICAgZm9yIChSZWZQdHI8Tm9k
ZT4gbm9kZSA9IG5leHQ7IG5vZGUgJiYgbm9kZS0+aXNDb25uZWN0ZWQoKSAmJiBub2RlICE9IHBh
c3RFbmROb2RlOyBub2RlID0gbmV4dCkgewogICAgICAgICBpZiAoZWRpdGluZ0lnbm9yZXNDb250
ZW50KCpub2RlKSkgewotICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5jb250YWlucyhwYXN0RW5k
Tm9kZS5nZXQoKSkpOworICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5jb250YWlucyhwYXN0RW5k
Tm9kZSkpOwogICAgICAgICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0No
aWxkcmVuKCpub2RlKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBuZXh0ID0gTm9kZVRy
YXZlcnNhbDo6bmV4dCgqbm9kZSk7CkBAIC04ODMsNyArODgzLDcgQEAgdm9pZCBBcHBseVN0eWxl
Q29tbWFuZDo6cmVtb3ZlQ29uZmxpY3RpbmdJbmxpbmVTdHlsZUZyb21SdW4oRWRpdGluZ1N0eWxl
KiBzdHlsZSwKICAgICAgICAgUmVmUHRyPE5vZGU+IHByZXZpb3VzU2libGluZyA9IG5vZGUtPnBy
ZXZpb3VzU2libGluZygpOwogICAgICAgICBSZWZQdHI8Tm9kZT4gbmV4dFNpYmxpbmcgPSBub2Rl
LT5uZXh0U2libGluZygpOwogICAgICAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gcGFyZW50ID0g
bm9kZS0+cGFyZW50Tm9kZSgpOwotICAgICAgICByZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50
KHN0eWxlLCBkb3duY2FzdDxIVE1MRWxlbWVudD4obm9kZS5nZXQoKSksIFJlbW92ZUFsd2F5cyk7
CisgICAgICAgIHJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoc3R5bGUsIGRvd25jYXN0PEhU
TUxFbGVtZW50Pigqbm9kZSksIFJlbW92ZUFsd2F5cyk7CiAgICAgICAgIGlmICghbm9kZS0+aXND
b25uZWN0ZWQoKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IFdlIG1pZ2h0IG5lZWQgdG8gdXBk
YXRlIHRoZSBzdGFydCBhbmQgdGhlIGVuZCBvZiBjdXJyZW50IHNlbGVjdGlvbiBoZXJlIGJ1dCBu
ZWVkIGEgdGVzdC4KICAgICAgICAgICAgIGlmIChydW5TdGFydCA9PSBub2RlKQpAQCAtODk0LDMy
ICs4OTQsMzAgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlQ29uZmxpY3RpbmdJbmxp
bmVTdHlsZUZyb21SdW4oRWRpdGluZ1N0eWxlKiBzdHlsZSwKICAgICB9CiB9CiAKLWJvb2wgQXBw
bHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoRWRpdGluZ1N0eWxl
KiBzdHlsZSwgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gZWxlbWVudCwgSW5saW5lU3R5bGVSZW1v
dmFsTW9kZSBtb2RlLCBFZGl0aW5nU3R5bGUqIGV4dHJhY3RlZFN0eWxlKQorYm9vbCBBcHBseVN0
eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudChFZGl0aW5nU3R5bGUqIHN0
eWxlLCBIVE1MRWxlbWVudCYgZWxlbWVudCwgSW5saW5lU3R5bGVSZW1vdmFsTW9kZSBtb2RlLCBF
ZGl0aW5nU3R5bGUqIGV4dHJhY3RlZFN0eWxlKQogewotICAgIEFTU0VSVChlbGVtZW50KTsKLQot
ICAgIGlmICghZWxlbWVudC0+cGFyZW50Tm9kZSgpIHx8ICFpc0VkaXRhYmxlTm9kZSgqZWxlbWVu
dC0+cGFyZW50Tm9kZSgpKSkKKyAgICBpZiAoIWVsZW1lbnQucGFyZW50Tm9kZSgpIHx8ICFpc0Vk
aXRhYmxlTm9kZSgqZWxlbWVudC5wYXJlbnROb2RlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBpZiAoaXNTdHlsZWRJbmxpbmVFbGVtZW50VG9SZW1vdmUoZWxlbWVudC5nZXQoKSkp
IHsKKyAgICBpZiAoaXNTdHlsZWRJbmxpbmVFbGVtZW50VG9SZW1vdmUoJmVsZW1lbnQpKSB7CiAg
ICAgICAgIGlmIChtb2RlID09IFJlbW92ZU5vbmUpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgaWYgKGV4dHJhY3RlZFN0eWxlKQotICAgICAgICAgICAgZXh0cmFjdGVkU3R5bGUt
Pm1lcmdlSW5saW5lU3R5bGVPZkVsZW1lbnQoZWxlbWVudC5nZXQoKSwgRWRpdGluZ1N0eWxlOjpP
dmVycmlkZVZhbHVlcyk7Ci0gICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oZWxl
bWVudCk7CisgICAgICAgICAgICBleHRyYWN0ZWRTdHlsZS0+bWVyZ2VJbmxpbmVTdHlsZU9mRWxl
bWVudCgmZWxlbWVudCwgRWRpdGluZ1N0eWxlOjpPdmVycmlkZVZhbHVlcyk7CisgICAgICAgIHJl
bW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oJmVsZW1lbnQpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKICAgICBib29sIHJlbW92ZWQgPSBmYWxzZTsKLSAgICBpZiAocmVtb3ZlSW1w
bGljaXRseVN0eWxlZEVsZW1lbnQoc3R5bGUsIGVsZW1lbnQuZ2V0KCksIG1vZGUsIGV4dHJhY3Rl
ZFN0eWxlKSkKKyAgICBpZiAocmVtb3ZlSW1wbGljaXRseVN0eWxlZEVsZW1lbnQoc3R5bGUsICZl
bGVtZW50LCBtb2RlLCBleHRyYWN0ZWRTdHlsZSkpCiAgICAgICAgIHJlbW92ZWQgPSB0cnVlOwog
Ci0gICAgaWYgKCFlbGVtZW50LT5pc0Nvbm5lY3RlZCgpKQorICAgIGlmICghZWxlbWVudC5pc0Nv
bm5lY3RlZCgpKQogICAgICAgICByZXR1cm4gcmVtb3ZlZDsKIAogICAgIC8vIElmIHRoZSBub2Rl
IHdhcyBjb252ZXJ0ZWQgdG8gYSBzcGFuLCB0aGUgc3BhbiBtYXkgc3RpbGwgY29udGFpbiByZWxl
dmFudAogICAgIC8vIHN0eWxlcyB3aGljaCBtdXN0IGJlIHJlbW92ZWQgKGUuZy4gPGIgc3R5bGU9
J2ZvbnQtd2VpZ2h0OiBib2xkJz4pCi0gICAgaWYgKHJlbW92ZUNTU1N0eWxlKHN0eWxlLCBlbGVt
ZW50LmdldCgpLCBtb2RlLCBleHRyYWN0ZWRTdHlsZSkpCisgICAgaWYgKHJlbW92ZUNTU1N0eWxl
KHN0eWxlLCAmZWxlbWVudCwgbW9kZSwgZXh0cmFjdGVkU3R5bGUpKQogICAgICAgICByZW1vdmVk
ID0gdHJ1ZTsKIAogICAgIHJldHVybiByZW1vdmVkOwpAQCAtOTk3LDcgKzk5NSw3IEBAIEhUTUxF
bGVtZW50KiBBcHBseVN0eWxlQ29tbWFuZDo6aGlnaGVzdEFuY2VzdG9yV2l0aENvbmZsaWN0aW5n
SW5saW5lU3R5bGUoRWRpdGluCiAgICAgTm9kZSogdW5zcGxpdHRhYmxlRWxlbWVudCA9IHVuc3Bs
aXR0YWJsZUVsZW1lbnRGb3JQb3NpdGlvbihmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9k
ZSkpOwogCiAgICAgZm9yIChOb2RlKiBhbmNlc3RvciA9IG5vZGU7IGFuY2VzdG9yOyBhbmNlc3Rv
ciA9IGFuY2VzdG9yLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKGlzPEhUTUxFbGVtZW50
PigqYW5jZXN0b3IpICYmIHNob3VsZFJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoc3R5bGUs
IGRvd25jYXN0PEhUTUxFbGVtZW50PihhbmNlc3RvcikpKQorICAgICAgICBpZiAoaXM8SFRNTEVs
ZW1lbnQ+KCphbmNlc3RvcikgJiYgc2hvdWxkUmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudChz
dHlsZSwgZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCphbmNlc3RvcikpKQogICAgICAgICAgICAgcmVz
dWx0ID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KGFuY2VzdG9yKTsKICAgICAgICAgLy8gU2hvdWxk
IHN0b3AgYXQgdGhlIGVkaXRhYmxlIHJvb3QgKGNhbm5vdCBjcm9zcyBlZGl0aW5nIGJvdW5kYXJ5
KSBhbmQKICAgICAgICAgLy8gYWxzbyBzdG9wIGF0IHRoZSB1bnNwbGl0dGFibGUgZWxlbWVudCB0
byBiZSBjb25zaXN0ZW50IHdpdGggb3RoZXIgVUFzCkBAIC0xMDA4LDMxICsxMDA2LDI5IEBAIEhU
TUxFbGVtZW50KiBBcHBseVN0eWxlQ29tbWFuZDo6aGlnaGVzdEFuY2VzdG9yV2l0aENvbmZsaWN0
aW5nSW5saW5lU3R5bGUoRWRpdGluCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBBcHBs
eVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRvUHVzaERvd24oTm9kZSogbm9kZSwgRWRp
dGluZ1N0eWxlKiBzdHlsZSkKK3ZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5
bGVUb1B1c2hEb3duKE5vZGUmIG5vZGUsIEVkaXRpbmdTdHlsZSogc3R5bGUpCiB7Ci0gICAgQVNT
RVJUKG5vZGUpOworICAgIG5vZGUuZG9jdW1lbnQoKS51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAK
LSAgICBub2RlLT5kb2N1bWVudCgpLnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKLQotICAgIGlmICgh
c3R5bGUgfHwgc3R5bGUtPmlzRW1wdHkoKSB8fCAhbm9kZS0+cmVuZGVyZXIoKSB8fCBpczxIVE1M
SUZyYW1lRWxlbWVudD4oKm5vZGUpKQorICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmlzRW1wdHko
KSB8fCAhbm9kZS5yZW5kZXJlcigpIHx8IGlzPEhUTUxJRnJhbWVFbGVtZW50Pihub2RlKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gbmV3SW5saW5lU3R5bGUg
PSBzdHlsZTsKLSAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+KCpub2RlKSAmJiBkb3duY2FzdDxIVE1M
RWxlbWVudD4obm9kZSktPmlubGluZVN0eWxlKCkpIHsKKyAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+
KG5vZGUpICYmIGRvd25jYXN0PEhUTUxFbGVtZW50Pihub2RlKS5pbmxpbmVTdHlsZSgpKSB7CiAg
ICAgICAgIG5ld0lubGluZVN0eWxlID0gc3R5bGUtPmNvcHkoKTsKLSAgICAgICAgbmV3SW5saW5l
U3R5bGUtPm1lcmdlSW5saW5lU3R5bGVPZkVsZW1lbnQoZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KG5v
ZGUpLCBFZGl0aW5nU3R5bGU6Ok92ZXJyaWRlVmFsdWVzKTsKKyAgICAgICAgbmV3SW5saW5lU3R5
bGUtPm1lcmdlSW5saW5lU3R5bGVPZkVsZW1lbnQoJmRvd25jYXN0PEhUTUxFbGVtZW50Pihub2Rl
KSwgRWRpdGluZ1N0eWxlOjpPdmVycmlkZVZhbHVlcyk7CiAgICAgfQogCiAgICAgLy8gU2luY2Ug
YWRkSW5saW5lU3R5bGVJZk5lZWRlZCBjYW4ndCBhZGQgc3R5bGVzIHRvIGJsb2NrLWZsb3cgcmVu
ZGVyIG9iamVjdHMsIGFkZCBzdHlsZSBhdHRyaWJ1dGUgaW5zdGVhZC4KICAgICAvLyBGSVhNRTog
YXBwbHlJbmxpbmVTdHlsZVRvUmFuZ2Ugc2hvdWxkIGJlIHVzZWQgaGVyZSBpbnN0ZWFkLgotICAg
IGlmICgobm9kZS0+cmVuZGVyZXIoKS0+aXNSZW5kZXJCbG9ja0Zsb3coKSB8fCBub2RlLT5oYXND
aGlsZE5vZGVzKCkpICYmIGlzPEhUTUxFbGVtZW50Pigqbm9kZSkpIHsKLSAgICAgICAgc2V0Tm9k
ZUF0dHJpYnV0ZShkb3duY2FzdDxIVE1MRWxlbWVudD4obm9kZSksIHN0eWxlQXR0ciwgbmV3SW5s
aW5lU3R5bGUtPnN0eWxlKCktPmFzVGV4dCgpKTsKKyAgICBpZiAoKG5vZGUucmVuZGVyZXIoKS0+
aXNSZW5kZXJCbG9ja0Zsb3coKSB8fCBub2RlLmhhc0NoaWxkTm9kZXMoKSkgJiYgaXM8SFRNTEVs
ZW1lbnQ+KG5vZGUpKSB7CisgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoJmRvd25jYXN0PEhUTUxF
bGVtZW50Pihub2RlKSwgc3R5bGVBdHRyLCBuZXdJbmxpbmVTdHlsZS0+c3R5bGUoKS0+YXNUZXh0
KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG5vZGUtPnJlbmRlcmVyKCkt
PmlzVGV4dCgpICYmIHN0YXRpY19jYXN0PFJlbmRlclRleHQqPihub2RlLT5yZW5kZXJlcigpKS0+
aXNBbGxDb2xsYXBzaWJsZVdoaXRlc3BhY2UoKSkKKyAgICBpZiAobm9kZS5yZW5kZXJlcigpLT5p
c1RleHQoKSAmJiBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4obm9kZS5yZW5kZXJlcigpKS0+aXNB
bGxDb2xsYXBzaWJsZVdoaXRlc3BhY2UoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChub2Rl
LT5yZW5kZXJlcigpLT5pc0JSKCkgJiYgIW5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCkucHJlc2Vy
dmVOZXdsaW5lKCkpCisgICAgaWYgKG5vZGUucmVuZGVyZXIoKS0+aXNCUigpICYmICFub2RlLnJl
bmRlcmVyKCktPnN0eWxlKCkucHJlc2VydmVOZXdsaW5lKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIC8vIFdlIGNhbid0IHdyYXAgbm9kZSB3aXRoIHRoZSBzdHlsZWQgZWxlbWVudCBoZXJlIGJl
Y2F1c2UgbmV3IHN0eWxlZCBlbGVtZW50IHdpbGwgbmV2ZXIgYmUgcmVtb3ZlZCBpZiB3ZSBkaWQu
CkBAIC0xMDY0LDcgKzEwNjAsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpwdXNoRG93bklu
bGluZVN0eWxlQXJvdW5kTm9kZShFZGl0aW5nU3R5bGUqIHN0eWxlLCBOb2RlKgogCiAgICAgICAg
IFJlZlB0cjxFZGl0aW5nU3R5bGU+IHN0eWxlVG9QdXNoRG93biA9IEVkaXRpbmdTdHlsZTo6Y3Jl
YXRlKCk7CiAgICAgICAgIGlmIChpczxIVE1MRWxlbWVudD4oKmN1cnJlbnQpKQotICAgICAgICAg
ICAgcmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudChzdHlsZSwgZG93bmNhc3Q8SFRNTEVsZW1l
bnQ+KGN1cnJlbnQuZ2V0KCkpLCBSZW1vdmVJZk5lZWRlZCwgc3R5bGVUb1B1c2hEb3duLmdldCgp
KTsKKyAgICAgICAgICAgIHJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoc3R5bGUsIGRvd25j
YXN0PEhUTUxFbGVtZW50PigqY3VycmVudCksIFJlbW92ZUlmTmVlZGVkLCBzdHlsZVRvUHVzaERv
d24uZ2V0KCkpOwogCiAgICAgICAgIC8vIFRoZSBpbm5lciBsb29wIHdpbGwgZ28gdGhyb3VnaCBj
aGlsZHJlbiBvbiBlYWNoIGxldmVsCiAgICAgICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgYWdncmVn
YXRlIGlubGluZSBjaGlsZCBlbGVtZW50cyB0b2dldGhlciBzbyB0aGF0IHdlIGRvbid0IHdyYXAg
ZWFjaCBjaGlsZCBzZXBhcmF0ZWx5LgpAQCAtMTA3NCwxNiArMTA3MCwxNiBAQCB2b2lkIEFwcGx5
U3R5bGVDb21tYW5kOjpwdXNoRG93bklubGluZVN0eWxlQXJvdW5kTm9kZShFZGl0aW5nU3R5bGUq
IHN0eWxlLCBOb2RlKgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYg
KCFjaGlsZC5jb250YWlucyh0YXJnZXROb2RlKSAmJiBlbGVtZW50c1RvUHVzaERvd24uc2l6ZSgp
KSB7CiAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogZWxlbWVudHNUb1B1c2hE
b3duKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlZlB0cjxFbGVtZW50PiB3cmFwcGVyID0gZWxl
bWVudC0+Y2xvbmVFbGVtZW50V2l0aG91dENoaWxkcmVuKGRvY3VtZW50KCkpOworICAgICAgICAg
ICAgICAgICAgICBhdXRvIHdyYXBwZXIgPSBlbGVtZW50LT5jbG9uZUVsZW1lbnRXaXRob3V0Q2hp
bGRyZW4oZG9jdW1lbnQoKSk7CiAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXItPnJlbW92ZUF0
dHJpYnV0ZShzdHlsZUF0dHIpOwotICAgICAgICAgICAgICAgICAgICBzdXJyb3VuZE5vZGVSYW5n
ZVdpdGhFbGVtZW50KCZjaGlsZCwgJmNoaWxkLCB3cmFwcGVyKTsKKyAgICAgICAgICAgICAgICAg
ICAgc3Vycm91bmROb2RlUmFuZ2VXaXRoRWxlbWVudChjaGlsZCwgY2hpbGQsIFdURk1vdmUod3Jh
cHBlcikpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
Ly8gQXBwbHkgc3R5bGUgdG8gYWxsIG5vZGVzIGNvbnRhaW5pbmcgdGFyZ2V0Tm9kZSBhbmQgdGhl
aXIgc2libGluZ3MgYnV0IE5PVCB0byB0YXJnZXROb2RlCiAgICAgICAgICAgICAvLyBCdXQgaWYg
d2UndmUgcmVtb3ZlZCBzdHlsZWRFbGVtZW50IHRoZW4gYWx3YXlzIGFwcGx5IHRoZSBzdHlsZS4K
ICAgICAgICAgICAgIGlmICgmY2hpbGQgIT0gdGFyZ2V0Tm9kZSB8fCBzdHlsZWRFbGVtZW50KQot
ICAgICAgICAgICAgICAgIGFwcGx5SW5saW5lU3R5bGVUb1B1c2hEb3duKCZjaGlsZCwgc3R5bGVU
b1B1c2hEb3duLmdldCgpKTsKKyAgICAgICAgICAgICAgICBhcHBseUlubGluZVN0eWxlVG9QdXNo
RG93bihjaGlsZCwgc3R5bGVUb1B1c2hEb3duLmdldCgpKTsKIAogICAgICAgICAgICAgLy8gV2Ug
Zm91bmQgdGhlIG5leHQgbm9kZSBmb3IgdGhlIG91dGVyIGxvb3AgKGNvbnRhaW5zIHRhcmdldE5v
ZGUpCiAgICAgICAgICAgICAvLyBXaGVuIHJlYWNoZWQgdGFyZ2V0Tm9kZSwgc3RvcCB0aGUgb3V0
ZXIgbG9vcCB1cG9uIHRoZSBjb21wbGV0aW9uIG9mIHRoZSBjdXJyZW50IGlubmVyIGxvb3AKQEAg
LTExNDcsNyArMTE0Myw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0
eWxlKEVkaXRpbmdTdHlsZSogc3R5bGUsIGNvbnN0IFBvc2l0aW9uJiBzCiAgICAgICAgICAgICAg
ICAgY2hpbGROb2RlID0gZWxlbWVudC0+Zmlyc3RDaGlsZCgpOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICByZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KHN0eWxlLCBlbGVtZW50LnB0
cigpLCBSZW1vdmVJZk5lZWRlZCwgc3R5bGVUb1B1c2hEb3duLmdldCgpKTsKKyAgICAgICAgICAg
IHJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoc3R5bGUsIGVsZW1lbnQsIFJlbW92ZUlmTmVl
ZGVkLCBzdHlsZVRvUHVzaERvd24uZ2V0KCkpOwogICAgICAgICAgICAgaWYgKCFlbGVtZW50LT5p
c0Nvbm5lY3RlZCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHMuZGVwcmVjYXRlZE5vZGUoKSA9
PSBlbGVtZW50LnB0cigpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFNpbmNlIGVsZW0gbXVz
dCBoYXZlIGJlZW4gZnVsbHkgc2VsZWN0ZWQsIGFuZCBpdCBpcyBhdCB0aGUgc3RhcnQKQEAgLTEx
NjYsNyArMTE2Miw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWxl
KEVkaXRpbmdTdHlsZSogc3R5bGUsIGNvbnN0IFBvc2l0aW9uJiBzCiAKICAgICAgICAgICAgIGlm
IChzdHlsZVRvUHVzaERvd24pIHsKICAgICAgICAgICAgICAgICBmb3IgKDsgY2hpbGROb2RlOyBj
aGlsZE5vZGUgPSBjaGlsZE5vZGUtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgICAgICAgICAgICAg
IGFwcGx5SW5saW5lU3R5bGVUb1B1c2hEb3duKGNoaWxkTm9kZS5nZXQoKSwgc3R5bGVUb1B1c2hE
b3duLmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYXBwbHlJbmxpbmVTdHlsZVRvUHVzaERv
d24oKmNoaWxkTm9kZSwgc3R5bGVUb1B1c2hEb3duLmdldCgpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgICAgICBpZiAobm9kZSA9PSBlbmQuZGVwcmVjYXRlZE5vZGUoKSkKQEAgLTEy
NjMsNyArMTI1OSw3IEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnNob3VsZFNwbGl0VGV4dEVs
ZW1lbnQoRWxlbWVudCogZWxlbWVudCwgRWRpdGluZ1N0eWxlKiBzCiAgICAgaWYgKCFpczxIVE1M
RWxlbWVudD4oZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBz
aG91bGRSZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KHN0eWxlLCAmZG93bmNhc3Q8SFRNTEVs
ZW1lbnQ+KCplbGVtZW50KSk7CisgICAgcmV0dXJuIHNob3VsZFJlbW92ZUlubGluZVN0eWxlRnJv
bUVsZW1lbnQoc3R5bGUsIGRvd25jYXN0PEhUTUxFbGVtZW50PigqZWxlbWVudCkpOwogfQogCiBi
b29sIEFwcGx5U3R5bGVDb21tYW5kOjppc1ZhbGlkQ2FyZXRQb3NpdGlvbkluVGV4dE5vZGUoY29u
c3QgUG9zaXRpb24mIHBvc2l0aW9uKQpAQCAtMTM0MCwyNCArMTMzNiwyMSBAQCBib29sIEFwcGx5
U3R5bGVDb21tYW5kOjptZXJnZUVuZFdpdGhOZXh0SWZJZGVudGljYWwoY29uc3QgUG9zaXRpb24m
IHN0YXJ0LCBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEFwcGx5U3R5bGVDb21t
YW5kOjpzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVtZW50KFBhc3NSZWZQdHI8Tm9kZT4gcGFzc2Vk
U3RhcnROb2RlLCBQYXNzUmVmUHRyPE5vZGU+IGVuZE5vZGUsIFBhc3NSZWZQdHI8RWxlbWVudD4g
ZWxlbWVudFRvSW5zZXJ0KQordm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6c3Vycm91bmROb2RlUmFu
Z2VXaXRoRWxlbWVudChOb2RlJiBzdGFydE5vZGUsIE5vZGUmIGVuZE5vZGUsIFJlZjxFbGVtZW50
PiYmIGVsZW1lbnRUb0luc2VydCkKIHsKLSAgICBBU1NFUlQocGFzc2VkU3RhcnROb2RlKTsKLSAg
ICBBU1NFUlQoZW5kTm9kZSk7Ci0gICAgQVNTRVJUKGVsZW1lbnRUb0luc2VydCk7Ci0gICAgUmVm
UHRyPE5vZGU+IHN0YXJ0Tm9kZSA9IHBhc3NlZFN0YXJ0Tm9kZTsKLSAgICBSZWZQdHI8RWxlbWVu
dD4gZWxlbWVudCA9IGVsZW1lbnRUb0luc2VydDsKKyAgICBSZWY8Tm9kZT4gcHJvdGVjdGVkU3Rh
cnROb2RlID0gc3RhcnROb2RlOworICAgIFJlZjxFbGVtZW50PiBlbGVtZW50ID0gV1RGTW92ZShl
bGVtZW50VG9JbnNlcnQpOwogCi0gICAgaW5zZXJ0Tm9kZUJlZm9yZShlbGVtZW50LCBzdGFydE5v
ZGUpOworICAgIGluc2VydE5vZGVCZWZvcmUoZWxlbWVudC5wdHIoKSwgJnN0YXJ0Tm9kZSk7CiAK
LSAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IHN0YXJ0Tm9kZTsKKyAgICBSZWZQdHI8Tm9kZT4gbm9k
ZSA9ICZzdGFydE5vZGU7CiAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAgICAgUmVmUHRyPE5vZGU+
IG5leHQgPSBub2RlLT5uZXh0U2libGluZygpOwogICAgICAgICBpZiAoaXNFZGl0YWJsZU5vZGUo
Km5vZGUpKSB7CiAgICAgICAgICAgICByZW1vdmVOb2RlKG5vZGUpOwotICAgICAgICAgICAgYXBw
ZW5kTm9kZShub2RlLCBlbGVtZW50KTsKKyAgICAgICAgICAgIGFwcGVuZE5vZGUobm9kZSwgZWxl
bWVudC5wdHIoKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG5vZGUgPT0gZW5kTm9kZSkKKyAg
ICAgICAgaWYgKG5vZGUgPT0gJmVuZE5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
bm9kZSA9IG5leHQ7CiAgICAgfQpAQCAtMTM2NSw4ICsxMzU4LDggQEAgdm9pZCBBcHBseVN0eWxl
Q29tbWFuZDo6c3Vycm91bmROb2RlUmFuZ2VXaXRoRWxlbWVudChQYXNzUmVmUHRyPE5vZGU+IHBh
c3NlZFN0YXIKICAgICBSZWZQdHI8Tm9kZT4gbmV4dFNpYmxpbmcgPSBlbGVtZW50LT5uZXh0U2li
bGluZygpOwogICAgIFJlZlB0cjxOb2RlPiBwcmV2aW91c1NpYmxpbmcgPSBlbGVtZW50LT5wcmV2
aW91c1NpYmxpbmcoKTsKIAotICAgIGlmIChuZXh0U2libGluZyAmJiBuZXh0U2libGluZy0+aGFz
RWRpdGFibGVTdHlsZSgpICYmIGFyZUlkZW50aWNhbEVsZW1lbnRzKCplbGVtZW50LCAqbmV4dFNp
YmxpbmcpKQotICAgICAgICBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKGVsZW1lbnQuZ2V0KCksIGRv
d25jYXN0PEVsZW1lbnQ+KG5leHRTaWJsaW5nLmdldCgpKSk7CisgICAgaWYgKG5leHRTaWJsaW5n
ICYmIG5leHRTaWJsaW5nLT5oYXNFZGl0YWJsZVN0eWxlKCkgJiYgYXJlSWRlbnRpY2FsRWxlbWVu
dHMoZWxlbWVudCwgKm5leHRTaWJsaW5nKSkKKyAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50
cyhlbGVtZW50LnB0cigpLCBkb3duY2FzdDxFbGVtZW50PihuZXh0U2libGluZy5nZXQoKSkpOwog
CiAgICAgaWYgKGlzPEVsZW1lbnQ+KHByZXZpb3VzU2libGluZy5nZXQoKSkgJiYgcHJldmlvdXNT
aWJsaW5nLT5oYXNFZGl0YWJsZVN0eWxlKCkpIHsKICAgICAgICAgYXV0byogbWVyZ2VkRWxlbWVu
dCA9IHByZXZpb3VzU2libGluZy0+bmV4dFNpYmxpbmcoKTsKQEAgLTEzOTksMzcgKzEzOTIsMzcg
QEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YWRkQmxvY2tTdHlsZShjb25zdCBTdHlsZUNoYW5n
ZSYgc3R5bGVDaGFuZ2UsIEhUTUxFbGVtZW4KICAgICBzZXROb2RlQXR0cmlidXRlKGJsb2NrLCBz
dHlsZUF0dHIsIGNzc1RleHQudG9TdHJpbmcoKSk7CiB9CiAKLXZvaWQgQXBwbHlTdHlsZUNvbW1h
bmQ6OmFkZElubGluZVN0eWxlSWZOZWVkZWQoRWRpdGluZ1N0eWxlKiBzdHlsZSwgUGFzc1JlZlB0
cjxOb2RlPiBwYXNzZWRTdGFydCwgUGFzc1JlZlB0cjxOb2RlPiBwYXNzZWRFbmQsIEVBZGRTdHls
ZWRFbGVtZW50IGFkZFN0eWxlZEVsZW1lbnQpCit2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphZGRJ
bmxpbmVTdHlsZUlmTmVlZGVkKEVkaXRpbmdTdHlsZSogc3R5bGUsIE5vZGUmIHN0YXJ0LCBOb2Rl
JiBlbmQsIEVBZGRTdHlsZWRFbGVtZW50IGFkZFN0eWxlZEVsZW1lbnQpCiB7Ci0gICAgaWYgKCFw
YXNzZWRTdGFydCB8fCAhcGFzc2VkRW5kIHx8ICFwYXNzZWRTdGFydC0+aXNDb25uZWN0ZWQoKSB8
fCAhcGFzc2VkRW5kLT5pc0Nvbm5lY3RlZCgpKQorICAgIGlmICghc3RhcnQuaXNDb25uZWN0ZWQo
KSB8fCAhZW5kLmlzQ29ubmVjdGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxO
b2RlPiBzdGFydCA9IHBhc3NlZFN0YXJ0OworICAgIFJlZjxOb2RlPiBwcm90ZWN0ZWRTdGFydCA9
IHN0YXJ0OwogICAgIFJlZlB0cjxOb2RlPiBkdW1teUVsZW1lbnQ7CiAgICAgU3R5bGVDaGFuZ2Ug
c3R5bGVDaGFuZ2Uoc3R5bGUsIHBvc2l0aW9uVG9Db21wdXRlSW5saW5lU3R5bGVDaGFuZ2Uoc3Rh
cnQsIGR1bW15RWxlbWVudCkpOwogCiAgICAgaWYgKGR1bW15RWxlbWVudCkKICAgICAgICAgcmVt
b3ZlTm9kZShkdW1teUVsZW1lbnQpOwogCi0gICAgYXBwbHlJbmxpbmVTdHlsZUNoYW5nZShzdGFy
dCwgcGFzc2VkRW5kLCBzdHlsZUNoYW5nZSwgYWRkU3R5bGVkRWxlbWVudCk7CisgICAgYXBwbHlJ
bmxpbmVTdHlsZUNoYW5nZShzdGFydCwgZW5kLCBzdHlsZUNoYW5nZSwgYWRkU3R5bGVkRWxlbWVu
dCk7CiB9CiAKLVBvc2l0aW9uIEFwcGx5U3R5bGVDb21tYW5kOjpwb3NpdGlvblRvQ29tcHV0ZUlu
bGluZVN0eWxlQ2hhbmdlKFBhc3NSZWZQdHI8Tm9kZT4gc3RhcnROb2RlLCBSZWZQdHI8Tm9kZT4m
IGR1bW15RWxlbWVudCkKK1Bvc2l0aW9uIEFwcGx5U3R5bGVDb21tYW5kOjpwb3NpdGlvblRvQ29t
cHV0ZUlubGluZVN0eWxlQ2hhbmdlKE5vZGUmIHN0YXJ0Tm9kZSwgUmVmUHRyPE5vZGU+JiBkdW1t
eUVsZW1lbnQpCiB7CiAgICAgLy8gSXQncyBva2F5IHRvIG9idGFpbiB0aGUgc3R5bGUgYXQgdGhl
IHN0YXJ0Tm9kZSBiZWNhdXNlIHdlJ3ZlIHJlbW92ZWQgYWxsIHJlbGV2YW50IHN0eWxlcyBmcm9t
IHRoZSBjdXJyZW50IHJ1bi4KLSAgICBpZiAoIWlzPEVsZW1lbnQ+KCpzdGFydE5vZGUpKSB7Cisg
ICAgaWYgKCFpczxFbGVtZW50PihzdGFydE5vZGUpKSB7CiAgICAgICAgIGR1bW15RWxlbWVudCA9
IGNyZWF0ZVN0eWxlU3BhbkVsZW1lbnQoZG9jdW1lbnQoKSk7Ci0gICAgICAgIGluc2VydE5vZGVB
dChkdW1teUVsZW1lbnQsIHBvc2l0aW9uQmVmb3JlTm9kZShzdGFydE5vZGUuZ2V0KCkpKTsKKyAg
ICAgICAgaW5zZXJ0Tm9kZUF0KGR1bW15RWxlbWVudCwgcG9zaXRpb25CZWZvcmVOb2RlKCZzdGFy
dE5vZGUpKTsKICAgICAgICAgcmV0dXJuIGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShkdW1t
eUVsZW1lbnQuZ2V0KCkpOwogICAgIH0KIAotICAgIHJldHVybiBmaXJzdFBvc2l0aW9uSW5PckJl
Zm9yZU5vZGUoc3RhcnROb2RlLmdldCgpKTsKKyAgICByZXR1cm4gZmlyc3RQb3NpdGlvbkluT3JC
ZWZvcmVOb2RlKCZzdGFydE5vZGUpOwogfQogCi12b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBs
eUlubGluZVN0eWxlQ2hhbmdlKFBhc3NSZWZQdHI8Tm9kZT4gcGFzc2VkU3RhcnQsIFBhc3NSZWZQ
dHI8Tm9kZT4gcGFzc2VkRW5kLCBTdHlsZUNoYW5nZSYgc3R5bGVDaGFuZ2UsIEVBZGRTdHlsZWRF
bGVtZW50IGFkZFN0eWxlZEVsZW1lbnQpCit2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlu
bGluZVN0eWxlQ2hhbmdlKE5vZGUmIHBhc3NlZFN0YXJ0LCBOb2RlJiBwYXNzZWRFbmQsIFN0eWxl
Q2hhbmdlJiBzdHlsZUNoYW5nZSwgRUFkZFN0eWxlZEVsZW1lbnQgYWRkU3R5bGVkRWxlbWVudCkK
IHsKLSAgICBSZWZQdHI8Tm9kZT4gc3RhcnROb2RlID0gcGFzc2VkU3RhcnQ7Ci0gICAgUmVmUHRy
PE5vZGU+IGVuZE5vZGUgPSBwYXNzZWRFbmQ7CisgICAgUmVmUHRyPE5vZGU+IHN0YXJ0Tm9kZSA9
ICZwYXNzZWRTdGFydDsKKyAgICBSZWZQdHI8Tm9kZT4gZW5kTm9kZSA9ICZwYXNzZWRFbmQ7CiAg
ICAgQVNTRVJUKHN0YXJ0Tm9kZS0+aXNDb25uZWN0ZWQoKSk7CiAgICAgQVNTRVJUKGVuZE5vZGUt
PmlzQ29ubmVjdGVkKCkpOwogCkBAIC0xNDY4LDcgKzE0NjEsNyBAQCB2b2lkIEFwcGx5U3R5bGVD
b21tYW5kOjphcHBseUlubGluZVN0eWxlQ2hhbmdlKFBhc3NSZWZQdHI8Tm9kZT4gcGFzc2VkU3Rh
cnQsIFBhcwogICAgICAgICAgICAgICAgIGZvbnRFbGVtZW50LT5zZXRBdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKGZhY2VBdHRyLCBzdHlsZUNoYW5nZS5mb250RmFjZSgpKTsKICAgICAg
ICAgICAgIGlmIChzdHlsZUNoYW5nZS5hcHBseUZvbnRTaXplKCkpCiAgICAgICAgICAgICAgICAg
Zm9udEVsZW1lbnQtPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oc2l6ZUF0dHIs
IHN0eWxlQ2hhbmdlLmZvbnRTaXplKCkpOwotICAgICAgICAgICAgc3Vycm91bmROb2RlUmFuZ2VX
aXRoRWxlbWVudChzdGFydE5vZGUsIGVuZE5vZGUsIGZvbnRFbGVtZW50LmdldCgpKTsKKyAgICAg
ICAgICAgIHN1cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1lbnQoKnN0YXJ0Tm9kZSwgKmVuZE5vZGUs
IFdURk1vdmUoZm9udEVsZW1lbnQpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTQ4MywyOSAr
MTQ3NiwyOSBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlQ2hhbmdl
KFBhc3NSZWZQdHI8Tm9kZT4gcGFzc2VkU3RhcnQsIFBhcwogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgYXV0byBzdHlsZUVsZW1lbnQgPSBjcmVhdGVTdHlsZVNwYW5FbGVtZW50KGRvY3Vt
ZW50KCkpOwogICAgICAgICAgICAgc3R5bGVFbGVtZW50LT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRy
LCBzdHlsZVRvTWVyZ2UtPmFzVGV4dCgpKTsKLSAgICAgICAgICAgIHN1cnJvdW5kTm9kZVJhbmdl
V2l0aEVsZW1lbnQoc3RhcnROb2RlLCBlbmROb2RlLCBXVEZNb3ZlKHN0eWxlRWxlbWVudCkpOwor
ICAgICAgICAgICAgc3Vycm91bmROb2RlUmFuZ2VXaXRoRWxlbWVudCgqc3RhcnROb2RlLCAqZW5k
Tm9kZSwgV1RGTW92ZShzdHlsZUVsZW1lbnQpKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlm
IChzdHlsZUNoYW5nZS5hcHBseUJvbGQoKSkKLSAgICAgICAgc3Vycm91bmROb2RlUmFuZ2VXaXRo
RWxlbWVudChzdGFydE5vZGUsIGVuZE5vZGUsIGNyZWF0ZUhUTUxFbGVtZW50KGRvY3VtZW50KCks
IGJUYWcpKTsKKyAgICAgICAgc3Vycm91bmROb2RlUmFuZ2VXaXRoRWxlbWVudCgqc3RhcnROb2Rl
LCAqZW5kTm9kZSwgY3JlYXRlSFRNTEVsZW1lbnQoZG9jdW1lbnQoKSwgYlRhZykpOwogCiAgICAg
aWYgKHN0eWxlQ2hhbmdlLmFwcGx5SXRhbGljKCkpCi0gICAgICAgIHN1cnJvdW5kTm9kZVJhbmdl
V2l0aEVsZW1lbnQoc3RhcnROb2RlLCBlbmROb2RlLCBjcmVhdGVIVE1MRWxlbWVudChkb2N1bWVu
dCgpLCBpVGFnKSk7CisgICAgICAgIHN1cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1lbnQoKnN0YXJ0
Tm9kZSwgKmVuZE5vZGUsIGNyZWF0ZUhUTUxFbGVtZW50KGRvY3VtZW50KCksIGlUYWcpKTsKIAog
ICAgIGlmIChzdHlsZUNoYW5nZS5hcHBseVVuZGVybGluZSgpKQotICAgICAgICBzdXJyb3VuZE5v
ZGVSYW5nZVdpdGhFbGVtZW50KHN0YXJ0Tm9kZSwgZW5kTm9kZSwgY3JlYXRlSFRNTEVsZW1lbnQo
ZG9jdW1lbnQoKSwgdVRhZykpOworICAgICAgICBzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVtZW50
KCpzdGFydE5vZGUsICplbmROb2RlLCBjcmVhdGVIVE1MRWxlbWVudChkb2N1bWVudCgpLCB1VGFn
KSk7CiAKICAgICBpZiAoc3R5bGVDaGFuZ2UuYXBwbHlMaW5lVGhyb3VnaCgpKQotICAgICAgICBz
dXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVtZW50KHN0YXJ0Tm9kZSwgZW5kTm9kZSwgY3JlYXRlSFRN
TEVsZW1lbnQoZG9jdW1lbnQoKSwgc3RyaWtlVGFnKSk7CisgICAgICAgIHN1cnJvdW5kTm9kZVJh
bmdlV2l0aEVsZW1lbnQoKnN0YXJ0Tm9kZSwgKmVuZE5vZGUsIGNyZWF0ZUhUTUxFbGVtZW50KGRv
Y3VtZW50KCksIHN0cmlrZVRhZykpOwogCiAgICAgaWYgKHN0eWxlQ2hhbmdlLmFwcGx5U3Vic2Ny
aXB0KCkpCi0gICAgICAgIHN1cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1lbnQoc3RhcnROb2RlLCBl
bmROb2RlLCBjcmVhdGVIVE1MRWxlbWVudChkb2N1bWVudCgpLCBzdWJUYWcpKTsKKyAgICAgICAg
c3Vycm91bmROb2RlUmFuZ2VXaXRoRWxlbWVudCgqc3RhcnROb2RlLCAqZW5kTm9kZSwgY3JlYXRl
SFRNTEVsZW1lbnQoZG9jdW1lbnQoKSwgc3ViVGFnKSk7CiAgICAgZWxzZSBpZiAoc3R5bGVDaGFu
Z2UuYXBwbHlTdXBlcnNjcmlwdCgpKQotICAgICAgICBzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVt
ZW50KHN0YXJ0Tm9kZSwgZW5kTm9kZSwgY3JlYXRlSFRNTEVsZW1lbnQoZG9jdW1lbnQoKSwgc3Vw
VGFnKSk7CisgICAgICAgIHN1cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1lbnQoKnN0YXJ0Tm9kZSwg
KmVuZE5vZGUsIGNyZWF0ZUhUTUxFbGVtZW50KGRvY3VtZW50KCksIHN1cFRhZykpOwogCiAgICAg
aWYgKG1fc3R5bGVkSW5saW5lRWxlbWVudCAmJiBhZGRTdHlsZWRFbGVtZW50ID09IEFkZFN0eWxl
ZEVsZW1lbnQpCi0gICAgICAgIHN1cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1lbnQoc3RhcnROb2Rl
LCBlbmROb2RlLCBtX3N0eWxlZElubGluZUVsZW1lbnQtPmNsb25lRWxlbWVudFdpdGhvdXRDaGls
ZHJlbihkb2N1bWVudCgpKSk7CisgICAgICAgIHN1cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1lbnQo
KnN0YXJ0Tm9kZSwgKmVuZE5vZGUsIG1fc3R5bGVkSW5saW5lRWxlbWVudC0+Y2xvbmVFbGVtZW50
V2l0aG91dENoaWxkcmVuKGRvY3VtZW50KCkpKTsKIH0KIAogZmxvYXQgQXBwbHlTdHlsZUNvbW1h
bmQ6OmNvbXB1dGVkRm9udFNpemUoTm9kZSogbm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
QXBwbHlTdHlsZUNvbW1hbmQuaAppbmRleCBhNDg1NDk4Zjk1YWZmYjcwMjc2ZmZlYTZlN2ZjMWQ1
ZDIzM2M4YjY1Li5iMDIyY2NhOTY1NmNlZTk1ZDVlYThmMTA5Y2MwZjVmYzVhMGIwZGMwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oCkBAIC01NSw5ICs1NSw5
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEFwcGx5U3R5
bGVDb21tYW5kKGRvY3VtZW50LCBzdHlsZSwgc3RhcnQsIGVuZCwgYWN0aW9uLCBsZXZlbCkpOwog
ICAgIH0KLSAgICBzdGF0aWMgUmVmPEFwcGx5U3R5bGVDb21tYW5kPiBjcmVhdGUoUGFzc1JlZlB0
cjxFbGVtZW50PiBlbGVtZW50LCBib29sIHJlbW92ZU9ubHkgPSBmYWxzZSwgRWRpdEFjdGlvbiBh
Y3Rpb24gPSBFZGl0QWN0aW9uQ2hhbmdlQXR0cmlidXRlcykKKyAgICBzdGF0aWMgUmVmPEFwcGx5
U3R5bGVDb21tYW5kPiBjcmVhdGUoUmVmPEVsZW1lbnQ+JiYgZWxlbWVudCwgYm9vbCByZW1vdmVP
bmx5ID0gZmFsc2UsIEVkaXRBY3Rpb24gYWN0aW9uID0gRWRpdEFjdGlvbkNoYW5nZUF0dHJpYnV0
ZXMpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBcHBseVN0eWxlQ29tbWFu
ZChlbGVtZW50LCByZW1vdmVPbmx5LCBhY3Rpb24pKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgQXBwbHlTdHlsZUNvbW1hbmQoV1RGTW92ZShlbGVtZW50KSwgcmVtb3ZlT25seSwgYWN0
aW9uKSk7CiAgICAgfQogICAgIHN0YXRpYyBSZWY8QXBwbHlTdHlsZUNvbW1hbmQ+IGNyZWF0ZShE
b2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IEVkaXRpbmdTdHlsZSogc3R5bGUsIElzSW5saW5lRWxl
bWVudFRvUmVtb3ZlRnVuY3Rpb24gaXNJbmxpbmVFbGVtZW50VG9SZW1vdmVGdW5jdGlvbiwgRWRp
dEFjdGlvbiBhY3Rpb24gPSBFZGl0QWN0aW9uQ2hhbmdlQXR0cmlidXRlcykKICAgICB7CkBAIC02
Nyw3ICs2Nyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgQXBwbHlTdHlsZUNvbW1hbmQoRG9j
dW1lbnQmLCBjb25zdCBFZGl0aW5nU3R5bGUqLCBFZGl0QWN0aW9uLCBFUHJvcGVydHlMZXZlbCk7
CiAgICAgQXBwbHlTdHlsZUNvbW1hbmQoRG9jdW1lbnQmLCBjb25zdCBFZGl0aW5nU3R5bGUqLCBj
b25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQsIEVkaXRBY3Rpb24sIEVQ
cm9wZXJ0eUxldmVsKTsKLSAgICBBcHBseVN0eWxlQ29tbWFuZChQYXNzUmVmUHRyPEVsZW1lbnQ+
LCBib29sIHJlbW92ZU9ubHksIEVkaXRBY3Rpb24pOworICAgIEFwcGx5U3R5bGVDb21tYW5kKFJl
ZjxFbGVtZW50PiYmLCBib29sIHJlbW92ZU9ubHksIEVkaXRBY3Rpb24pOwogICAgIEFwcGx5U3R5
bGVDb21tYW5kKERvY3VtZW50JiwgY29uc3QgRWRpdGluZ1N0eWxlKiwgYm9vbCAoKmlzSW5saW5l
RWxlbWVudFRvUmVtb3ZlKShjb25zdCBFbGVtZW50KiksIEVkaXRBY3Rpb24pOwogCiAgICAgdm9p
ZCBkb0FwcGx5KCkgb3ZlcnJpZGU7CkBAIC03NiwxNCArNzYsMTQgQEAgcHJpdmF0ZToKICAgICAv
LyBzdHlsZS1yZW1vdmFsIGhlbHBlcnMKICAgICBib29sIGlzU3R5bGVkSW5saW5lRWxlbWVudFRv
UmVtb3ZlKEVsZW1lbnQqKSBjb25zdDsKICAgICBib29sIHNob3VsZEFwcGx5SW5saW5lU3R5bGVU
b1J1bihFZGl0aW5nU3R5bGUqLCBOb2RlKiBydW5TdGFydCwgTm9kZSogcGFzdEVuZE5vZGUpOwot
ICAgIHZvaWQgcmVtb3ZlQ29uZmxpY3RpbmdJbmxpbmVTdHlsZUZyb21SdW4oRWRpdGluZ1N0eWxl
KiwgUmVmUHRyPE5vZGU+JiBydW5TdGFydCwgUmVmUHRyPE5vZGU+JiBydW5FbmQsIFBhc3NSZWZQ
dHI8Tm9kZT4gcGFzdEVuZE5vZGUpOwotICAgIGJvb2wgcmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxl
bWVudChFZGl0aW5nU3R5bGUqLCBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiwgSW5saW5lU3R5bGVS
ZW1vdmFsTW9kZSA9IFJlbW92ZUlmTmVlZGVkLCBFZGl0aW5nU3R5bGUqIGV4dHJhY3RlZFN0eWxl
ID0gbnVsbHB0cik7Ci0gICAgaW5saW5lIGJvb2wgc2hvdWxkUmVtb3ZlSW5saW5lU3R5bGVGcm9t
RWxlbWVudChFZGl0aW5nU3R5bGUqIHN0eWxlLCBIVE1MRWxlbWVudCogZWxlbWVudCkge3JldHVy
biByZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KHN0eWxlLCBlbGVtZW50LCBSZW1vdmVOb25l
KTt9CisgICAgdm9pZCByZW1vdmVDb25mbGljdGluZ0lubGluZVN0eWxlRnJvbVJ1bihFZGl0aW5n
U3R5bGUqLCBSZWZQdHI8Tm9kZT4mIHJ1blN0YXJ0LCBSZWZQdHI8Tm9kZT4mIHJ1bkVuZCwgTm9k
ZSogcGFzdEVuZE5vZGUpOworICAgIGJvb2wgcmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudChF
ZGl0aW5nU3R5bGUqLCBIVE1MRWxlbWVudCYsIElubGluZVN0eWxlUmVtb3ZhbE1vZGUgPSBSZW1v
dmVJZk5lZWRlZCwgRWRpdGluZ1N0eWxlKiBleHRyYWN0ZWRTdHlsZSA9IG51bGxwdHIpOworICAg
IGlubGluZSBib29sIHNob3VsZFJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoRWRpdGluZ1N0
eWxlKiBzdHlsZSwgSFRNTEVsZW1lbnQmIGVsZW1lbnQpIHtyZXR1cm4gcmVtb3ZlSW5saW5lU3R5
bGVGcm9tRWxlbWVudChzdHlsZSwgZWxlbWVudCwgUmVtb3ZlTm9uZSk7fQogICAgIHZvaWQgcmVw
bGFjZVdpdGhTcGFuT3JSZW1vdmVJZldpdGhvdXRBdHRyaWJ1dGVzKEhUTUxFbGVtZW50KiYpOwog
ICAgIGJvb2wgcmVtb3ZlSW1wbGljaXRseVN0eWxlZEVsZW1lbnQoRWRpdGluZ1N0eWxlKiwgSFRN
TEVsZW1lbnQqLCBJbmxpbmVTdHlsZVJlbW92YWxNb2RlLCBFZGl0aW5nU3R5bGUqIGV4dHJhY3Rl
ZFN0eWxlKTsKICAgICBib29sIHJlbW92ZUNTU1N0eWxlKEVkaXRpbmdTdHlsZSosIEhUTUxFbGVt
ZW50KiwgSW5saW5lU3R5bGVSZW1vdmFsTW9kZSA9IFJlbW92ZUlmTmVlZGVkLCBFZGl0aW5nU3R5
bGUqIGV4dHJhY3RlZFN0eWxlID0gbnVsbHB0cik7CiAgICAgSFRNTEVsZW1lbnQqIGhpZ2hlc3RB
bmNlc3RvcldpdGhDb25mbGljdGluZ0lubGluZVN0eWxlKEVkaXRpbmdTdHlsZSosIE5vZGUqKTsK
LSAgICB2b2lkIGFwcGx5SW5saW5lU3R5bGVUb1B1c2hEb3duKE5vZGUqLCBFZGl0aW5nU3R5bGUq
KTsKKyAgICB2b2lkIGFwcGx5SW5saW5lU3R5bGVUb1B1c2hEb3duKE5vZGUmLCBFZGl0aW5nU3R5
bGUqKTsKICAgICB2b2lkIHB1c2hEb3duSW5saW5lU3R5bGVBcm91bmROb2RlKEVkaXRpbmdTdHls
ZSosIE5vZGUqKTsKICAgICB2b2lkIHJlbW92ZUlubGluZVN0eWxlKEVkaXRpbmdTdHlsZSogLCBj
b25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpOwogICAgIGJvb2wgbm9k
ZUZ1bGx5U2VsZWN0ZWQoRWxlbWVudCYsIGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9z
aXRpb24mIGVuZCkgY29uc3Q7CkBAIC05NCwxMSArOTQsMTEgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGFwcGx5UmVsYXRpdmVGb250U3R5bGVDaGFuZ2UoRWRpdGluZ1N0eWxlKik7CiAgICAgdm9pZCBh
cHBseUlubGluZVN0eWxlKEVkaXRpbmdTdHlsZSopOwogICAgIHZvaWQgZml4UmFuZ2VBbmRBcHBs
eUlubGluZVN0eWxlKEVkaXRpbmdTdHlsZSosIGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3Qg
UG9zaXRpb24mIGVuZCk7Ci0gICAgdm9pZCBhcHBseUlubGluZVN0eWxlVG9Ob2RlUmFuZ2UoRWRp
dGluZ1N0eWxlKiwgUGFzc1JlZlB0cjxOb2RlPiBzdGFydE5vZGUsIFBhc3NSZWZQdHI8Tm9kZT4g
cGFzdEVuZE5vZGUpOworICAgIHZvaWQgYXBwbHlJbmxpbmVTdHlsZVRvTm9kZVJhbmdlKEVkaXRp
bmdTdHlsZSosIE5vZGUqIHN0YXJ0Tm9kZSwgTm9kZSogcGFzdEVuZE5vZGUpOwogICAgIHZvaWQg
YWRkQmxvY2tTdHlsZShjb25zdCBTdHlsZUNoYW5nZSYsIEhUTUxFbGVtZW50Kik7Ci0gICAgdm9p
ZCBhZGRJbmxpbmVTdHlsZUlmTmVlZGVkKEVkaXRpbmdTdHlsZSosIFBhc3NSZWZQdHI8Tm9kZT4g
c3RhcnQsIFBhc3NSZWZQdHI8Tm9kZT4gZW5kLCBFQWRkU3R5bGVkRWxlbWVudCA9IEFkZFN0eWxl
ZEVsZW1lbnQpOwotICAgIFBvc2l0aW9uIHBvc2l0aW9uVG9Db21wdXRlSW5saW5lU3R5bGVDaGFu
Z2UoUGFzc1JlZlB0cjxOb2RlPiwgUmVmUHRyPE5vZGU+JiBkdW1teUVsZW1lbnQpOwotICAgIHZv
aWQgYXBwbHlJbmxpbmVTdHlsZUNoYW5nZShQYXNzUmVmUHRyPE5vZGU+IHN0YXJ0Tm9kZSwgUGFz
c1JlZlB0cjxOb2RlPiBlbmROb2RlLCBTdHlsZUNoYW5nZSYsIEVBZGRTdHlsZWRFbGVtZW50KTsK
KyAgICB2b2lkIGFkZElubGluZVN0eWxlSWZOZWVkZWQoRWRpdGluZ1N0eWxlKiwgTm9kZSYgc3Rh
cnQsIE5vZGUmIGVuZCwgRUFkZFN0eWxlZEVsZW1lbnQgPSBBZGRTdHlsZWRFbGVtZW50KTsKKyAg
ICBQb3NpdGlvbiBwb3NpdGlvblRvQ29tcHV0ZUlubGluZVN0eWxlQ2hhbmdlKE5vZGUmLCBSZWZQ
dHI8Tm9kZT4mIGR1bW15RWxlbWVudCk7CisgICAgdm9pZCBhcHBseUlubGluZVN0eWxlQ2hhbmdl
KE5vZGUmIHN0YXJ0Tm9kZSwgTm9kZSYgZW5kTm9kZSwgU3R5bGVDaGFuZ2UmLCBFQWRkU3R5bGVk
RWxlbWVudCk7CiAgICAgdm9pZCBzcGxpdFRleHRBdFN0YXJ0KGNvbnN0IFBvc2l0aW9uJiBzdGFy
dCwgY29uc3QgUG9zaXRpb24mIGVuZCk7CiAgICAgdm9pZCBzcGxpdFRleHRBdEVuZChjb25zdCBQ
b3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpOwogICAgIHZvaWQgc3BsaXRUZXh0
RWxlbWVudEF0U3RhcnQoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5k
KTsKQEAgLTEwOSw3ICsxMDksNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbWVyZ2VFbmRXaXRoTmV4
dElmSWRlbnRpY2FsKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCk7
CiAgICAgdm9pZCBjbGVhbnVwVW5zdHlsZWRBcHBsZVN0eWxlU3BhbnMoQ29udGFpbmVyTm9kZSog
ZHVtbXlTcGFuQW5jZXN0b3IpOwogCi0gICAgdm9pZCBzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVt
ZW50KFBhc3NSZWZQdHI8Tm9kZT4gc3RhcnQsIFBhc3NSZWZQdHI8Tm9kZT4gZW5kLCBQYXNzUmVm
UHRyPEVsZW1lbnQ+KTsKKyAgICB2b2lkIHN1cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1lbnQoTm9k
ZSYgc3RhcnQsIE5vZGUmIGVuZCwgUmVmPEVsZW1lbnQ+JiYpOwogICAgIGZsb2F0IGNvbXB1dGVk
Rm9udFNpemUoTm9kZSopOwogICAgIHZvaWQgam9pbkNoaWxkVGV4dE5vZGVzKE5vZGUqLCBjb25z
dCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpOwogCkBAIC0xMzQsNiArMTM0
LDYgQEAgZW51bSBTaG91bGRTdHlsZUF0dHJpYnV0ZUJlRW1wdHkgeyBBbGxvd05vbkVtcHR5U3R5
bGVBdHRyaWJ1dGUsIFN0eWxlQXR0cmlidXRlU2gKIGJvb2wgaXNFbXB0eUZvbnRUYWcoY29uc3Qg
RWxlbWVudCosIFNob3VsZFN0eWxlQXR0cmlidXRlQmVFbXB0eSA9IFN0eWxlQXR0cmlidXRlU2hv
dWxkQmVFbXB0eSk7CiBib29sIGlzTGVnYWN5QXBwbGVTdHlsZVNwYW4oY29uc3QgTm9kZSopOwog
Ym9vbCBpc1N0eWxlU3Bhbk9yU3BhbldpdGhPbmx5U3R5bGVBdHRyaWJ1dGUoY29uc3QgRWxlbWVu
dCopOwotUmVmUHRyPEhUTUxFbGVtZW50PiBjcmVhdGVTdHlsZVNwYW5FbGVtZW50KERvY3VtZW50
Jik7CitSZWY8SFRNTEVsZW1lbnQ+IGNyZWF0ZVN0eWxlU3BhbkVsZW1lbnQoRG9jdW1lbnQmKTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Nv
bXBvc2l0ZUVkaXRDb21tYW5kLmNwcAppbmRleCBmYzNhZDlhYjQ3NGE3Y2E1NGM4YThmZDhlY2Q3
OTFiMWVmOTY1MGE5Li5iYjQ5NzlmZWM2OWNhNjAzMGE3ODA2Nzg2MWQ2MWUyMGJmZjQ3MDBkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcApA
QCAtNDU4LDE5ICs0NTgsMTggQEAgU3RyaW5nIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnB1dEV2
ZW50VHlwZU5hbWUoKSBjb25zdAogLy8KIC8vIHN1Z2FyeS1zd2VldCBjb252ZW5pZW5jZSBmdW5j
dGlvbnMgdG8gaGVscCBjcmVhdGUgYW5kIGFwcGx5IGVkaXQgY29tbWFuZHMgaW4gY29tcG9zaXRl
IGNvbW1hbmRzCiAvLwotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBwbHlDb21tYW5kVG9D
b21wb3NpdGUoUGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4gcHJwQ29tbWFuZCkKK3ZvaWQgQ29tcG9z
aXRlRWRpdENvbW1hbmQ6OmFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFJlZjxFZGl0Q29tbWFuZD4m
JiBjb21tYW5kKQogewotICAgIFJlZlB0cjxFZGl0Q29tbWFuZD4gY29tbWFuZCA9IHBycENvbW1h
bmQ7CiAgICAgY29tbWFuZC0+c2V0UGFyZW50KHRoaXMpOwogICAgIGNvbW1hbmQtPmRvQXBwbHko
KTsKICAgICBpZiAoY29tbWFuZC0+aXNTaW1wbGVFZGl0Q29tbWFuZCgpKSB7CiAgICAgICAgIGNv
bW1hbmQtPnNldFBhcmVudChudWxscHRyKTsKLSAgICAgICAgZW5zdXJlQ29tcG9zaXRpb24oKS5h
cHBlbmQodG9TaW1wbGVFZGl0Q29tbWFuZChjb21tYW5kLmdldCgpKSk7CisgICAgICAgIGVuc3Vy
ZUNvbXBvc2l0aW9uKCkuYXBwZW5kKHRvU2ltcGxlRWRpdENvbW1hbmQoY29tbWFuZC5wdHIoKSkp
OwogICAgIH0KICAgICBtX2NvbW1hbmRzLmFwcGVuZChXVEZNb3ZlKGNvbW1hbmQpKTsKIH0KIAot
dm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBwbHlDb21tYW5kVG9Db21wb3NpdGUoUGFzc1Jl
ZlB0cjxDb21wb3NpdGVFZGl0Q29tbWFuZD4gY29tbWFuZCwgY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgc2VsZWN0aW9uKQordm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBwbHlDb21tYW5kVG9D
b21wb3NpdGUoUmVmPENvbXBvc2l0ZUVkaXRDb21tYW5kPiYmIGNvbW1hbmQsIGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKIHsKICAgICBjb21tYW5kLT5zZXRQYXJlbnQodGhpcyk7
CiAgICAgaWYgKHNlbGVjdGlvbiAhPSBjb21tYW5kLT5lbmRpbmdTZWxlY3Rpb24oKSkgewpAQCAt
NDc4LDcgKzQ3Nyw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmFwcGx5Q29tbWFuZFRv
Q29tcG9zaXRlKFBhc3NSZWZQdHI8Q29tcG9zaXRlRWRpdENvbW1hCiAgICAgICAgIGNvbW1hbmQt
PnNldEVuZGluZ1NlbGVjdGlvbihzZWxlY3Rpb24pOwogICAgIH0KICAgICBjb21tYW5kLT5kb0Fw
cGx5KCk7Ci0gICAgbV9jb21tYW5kcy5hcHBlbmQoY29tbWFuZCk7CisgICAgbV9jb21tYW5kcy5h
cHBlbmQoV1RGTW92ZShjb21tYW5kKSk7CiB9CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6
OmFwcGx5U3R5bGUoY29uc3QgRWRpdGluZ1N0eWxlKiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5n
QWN0aW9uKQpAQCAtNDkxLDE0ICs0OTAsMTQgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6
YXBwbHlTdHlsZShjb25zdCBFZGl0aW5nU3R5bGUqIHN0eWxlLCBjb25zdCBQb3NpdGlvbiYKICAg
ICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShBcHBseVN0eWxlQ29tbWFuZDo6Y3JlYXRlKGRvY3Vt
ZW50KCksIHN0eWxlLCBzdGFydCwgZW5kLCBlZGl0aW5nQWN0aW9uKSk7CiB9CiAKLXZvaWQgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6OmFwcGx5U3R5bGVkRWxlbWVudChQYXNzUmVmUHRyPEVsZW1lbnQ+
IGVsZW1lbnQpCit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjphcHBseVN0eWxlZEVsZW1lbnQo
UmVmPEVsZW1lbnQ+JiYgZWxlbWVudCkKIHsKLSAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShB
cHBseVN0eWxlQ29tbWFuZDo6Y3JlYXRlKGVsZW1lbnQsIGZhbHNlKSk7CisgICAgYXBwbHlDb21t
YW5kVG9Db21wb3NpdGUoQXBwbHlTdHlsZUNvbW1hbmQ6OmNyZWF0ZShXVEZNb3ZlKGVsZW1lbnQp
LCBmYWxzZSkpOwogfQogCi12b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVTdHlsZWRF
bGVtZW50KFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCkKK3ZvaWQgQ29tcG9zaXRlRWRpdENv
bW1hbmQ6OnJlbW92ZVN0eWxlZEVsZW1lbnQoUmVmPEVsZW1lbnQ+JiYgZWxlbWVudCkKIHsKLSAg
ICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShBcHBseVN0eWxlQ29tbWFuZDo6Y3JlYXRlKGVsZW1l
bnQsIHRydWUpKTsKKyAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShBcHBseVN0eWxlQ29tbWFu
ZDo6Y3JlYXRlKFdURk1vdmUoZWxlbWVudCksIHRydWUpKTsKIH0KIAogdm9pZCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKGJvb2wgdXNlRGVmYXVsdFBhcmFn
cmFwaEVsZW1lbnQsIGJvb2wgcGFzdGVCbG9ja3F1dG9lSW50b1VucXVvdGVkQXJlYSkKQEAgLTY0
Myw4ICs2NDIsOCBAQCBIVE1MRWxlbWVudCogQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VF
bGVtZW50V2l0aFNwYW5QcmVzZXJ2aW5nQ2hpbGRyZW5BbmRBdAogICAgIC8vIEl0IHdvdWxkIGFs
c28gYmUgcG9zc2libGUgdG8gaW1wbGVtZW50IGFsbCBvZiBSZXBsYWNlTm9kZVdpdGhTcGFuQ29t
bWFuZAogICAgIC8vIGFzIGEgc2VyaWVzIG9mIGV4aXN0aW5nIHNtYWxsZXIgZWRpdCBjb21tYW5k
cy4gIFNvbWVvbmUgd2hvIHdhbnRlZCB0bwogICAgIC8vIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGVk
aXQgY29tbWFuZHMgY291bGQgZG8gc28gaGVyZS4KLSAgICBSZWZQdHI8UmVwbGFjZU5vZGVXaXRo
U3BhbkNvbW1hbmQ+IGNvbW1hbmQgPSBSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZDo6Y3JlYXRl
KG5vZGUpOwotICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKGNvbW1hbmQpOworICAgIGF1dG8g
Y29tbWFuZCA9IFJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kOjpjcmVhdGUobm9kZSk7CisgICAg
YXBwbHlDb21tYW5kVG9Db21wb3NpdGUoY29tbWFuZC5jb3B5UmVmKCkpOwogICAgIC8vIFJldHVy
bmluZyBhIHJhdyBwb2ludGVyIGhlcmUgaXMgT0sgYmVjYXVzZSB0aGUgY29tbWFuZCBpcyByZXRh
aW5lZCBieQogICAgIC8vIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlICh0aHVzIHJldGFpbmluZyB0
aGUgc3BhbiksIGFuZCB0aGUgc3BhbiBpcyBhbHNvCiAgICAgLy8gaW4gdGhlIERPTSB0cmVlLCBh
bmQgdGh1cyBhbGl2ZSB3aGllIGl0IGhhcyBhIHBhcmVudC4KQEAgLTcwMyw4ICs3MDIsNyBAQCB2
b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnB1dFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBi
b29sIHNlbGVjdEluc2VydGVkVGV4dAogICAgICAgICBuZXdsaW5lID0gdGV4dC5maW5kKCdcbics
IG9mZnNldCk7CiAgICAgICAgIGlmIChuZXdsaW5lICE9IG9mZnNldCkgewogICAgICAgICAgICAg
aW50IHN1YnN0cmluZ0xlbmd0aCA9IG5ld2xpbmUgPT0gbm90Rm91bmQgPyBsZW5ndGggLSBvZmZz
ZXQgOiBuZXdsaW5lIC0gb2Zmc2V0OwotICAgICAgICAgICAgUmVmUHRyPEluc2VydFRleHRDb21t
YW5kPiBjb21tYW5kID0gSW5zZXJ0VGV4dENvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCB0ZXh0
LnN1YnN0cmluZyhvZmZzZXQsIHN1YnN0cmluZ0xlbmd0aCksIGZhbHNlKTsKLSAgICAgICAgICAg
IGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKGNvbW1hbmQpOworICAgICAgICAgICAgYXBwbHlDb21t
YW5kVG9Db21wb3NpdGUoSW5zZXJ0VGV4dENvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCB0ZXh0
LnN1YnN0cmluZyhvZmZzZXQsIHN1YnN0cmluZ0xlbmd0aCksIGZhbHNlKSk7CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKG5ld2xpbmUgIT0gbm90Rm91bmQpIHsKICAgICAgICAgICAgIFZpc2libGVQ
b3NpdGlvbiBjYXJldChlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSk7CkBAIC03Nzcs
NyArNzc1LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVwbGFjZVRleHRJbk5vZGVQ
cmVzZXJ2aW5nTWFya2VycyhQYXNzUmVmUHRyPFRleHQ+IHAKIHsKICAgICBSZWZQdHI8VGV4dD4g
bm9kZShwcnBOb2RlKTsKICAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXImIG1hcmtlckNvbnRy
b2xsZXIgPSBkb2N1bWVudCgpLm1hcmtlcnMoKTsKLSAgICBhdXRvIG1hcmtlcnMgPSBjb3B5TWFy
a2VycyhtYXJrZXJDb250cm9sbGVyLm1hcmtlcnNJblJhbmdlKFJhbmdlOjpjcmVhdGUoZG9jdW1l
bnQoKSwgbm9kZSwgb2Zmc2V0LCBub2RlLCBvZmZzZXQgKyBjb3VudCkucHRyKCksIERvY3VtZW50
TWFya2VyOjpBbGxNYXJrZXJzKCkpKTsKKyAgICBhdXRvIG1hcmtlcnMgPSBjb3B5TWFya2Vycyht
YXJrZXJDb250cm9sbGVyLm1hcmtlcnNJblJhbmdlKFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwg
bm9kZSwgb2Zmc2V0LCBub2RlLCBvZmZzZXQgKyBjb3VudCksIERvY3VtZW50TWFya2VyOjpBbGxN
YXJrZXJzKCkpKTsKICAgICByZXBsYWNlVGV4dEluTm9kZShub2RlLCBvZmZzZXQsIGNvdW50LCBy
ZXBsYWNlbWVudFRleHQpOwogICAgIFJlZlB0cjxSYW5nZT4gbmV3UmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKGRvY3VtZW50KCksIG5vZGUsIG9mZnNldCwgbm9kZSwgb2Zmc2V0ICsgcmVwbGFjZW1lbnRU
ZXh0Lmxlbmd0aCgpKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIG1hcmtlciA6IG1hcmtlcnMpCkBA
IC0xMjM2LDcgKzEyMzQsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpwdXNoQW5jaG9y
RWxlbWVudERvd24oRWxlbWVudCYgYW5jaG9yRWxlbWVudCkKICAgICBBU1NFUlQoYW5jaG9yRWxl
bWVudC5pc0xpbmsoKSk7CiAgICAgCiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxl
Y3Rpb246OnNlbGVjdGlvbkZyb21Db250ZW50c09mTm9kZSgmYW5jaG9yRWxlbWVudCkpOwotICAg
IGFwcGx5U3R5bGVkRWxlbWVudCgmYW5jaG9yRWxlbWVudCk7CisgICAgYXBwbHlTdHlsZWRFbGVt
ZW50KGFuY2hvckVsZW1lbnQpOwogICAgIC8vIENsb25lcyBvZiBhbmNob3JFbGVtZW50IGhhdmUg
YmVlbiBwdXNoZWQgZG93biwgbm93IHJlbW92ZSBpdC4KICAgICBpZiAoYW5jaG9yRWxlbWVudC5p
c0Nvbm5lY3RlZCgpKQogICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKCZhbmNo
b3JFbGVtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRl
RWRpdENvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1h
bmQuaAppbmRleCAwMjIxZGM5OTljY2ZlNmZjNTliMTgxYTlmZjc4MDk5YjZlMzVmM2I3Li4zN2Fm
MDFlOTJkNzRlNTk1NzI4Mzg2N2Y1YjE0NWUzZjZmMTBhMjE3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oCkBAIC0xMzQsMTIgKzEzNCwxMiBAQCBw
cm90ZWN0ZWQ6CiAgICAgLy8gc3VnYXJ5LXN3ZWV0IGNvbnZlbmllbmNlIGZ1bmN0aW9ucyB0byBo
ZWxwIGNyZWF0ZSBhbmQgYXBwbHkgZWRpdCBjb21tYW5kcyBpbiBjb21wb3NpdGUgY29tbWFuZHMK
ICAgICAvLwogICAgIHZvaWQgYXBwZW5kTm9kZShQYXNzUmVmUHRyPE5vZGU+LCBQYXNzUmVmUHRy
PENvbnRhaW5lck5vZGU+IHBhcmVudCk7Ci0gICAgdm9pZCBhcHBseUNvbW1hbmRUb0NvbXBvc2l0
ZShQYXNzUmVmUHRyPEVkaXRDb21tYW5kPik7Ci0gICAgdm9pZCBhcHBseUNvbW1hbmRUb0NvbXBv
c2l0ZShQYXNzUmVmUHRyPENvbXBvc2l0ZUVkaXRDb21tYW5kPiwgY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYpOworICAgIHZvaWQgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoUmVmPEVkaXRDb21tYW5k
PiYmKTsKKyAgICB2b2lkIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFJlZjxDb21wb3NpdGVFZGl0
Q29tbWFuZD4mJiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogICAgIHZvaWQgYXBwbHlTdHls
ZShjb25zdCBFZGl0aW5nU3R5bGUqLCBFZGl0QWN0aW9uID0gRWRpdEFjdGlvbkNoYW5nZUF0dHJp
YnV0ZXMpOwogICAgIHZvaWQgYXBwbHlTdHlsZShjb25zdCBFZGl0aW5nU3R5bGUqLCBjb25zdCBQ
b3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQsIEVkaXRBY3Rpb24gPSBFZGl0QWN0
aW9uQ2hhbmdlQXR0cmlidXRlcyk7Ci0gICAgdm9pZCBhcHBseVN0eWxlZEVsZW1lbnQoUGFzc1Jl
ZlB0cjxFbGVtZW50Pik7Ci0gICAgdm9pZCByZW1vdmVTdHlsZWRFbGVtZW50KFBhc3NSZWZQdHI8
RWxlbWVudD4pOworICAgIHZvaWQgYXBwbHlTdHlsZWRFbGVtZW50KFJlZjxFbGVtZW50PiYmKTsK
KyAgICB2b2lkIHJlbW92ZVN0eWxlZEVsZW1lbnQoUmVmPEVsZW1lbnQ+JiYpOwogICAgIHZvaWQg
ZGVsZXRlU2VsZWN0aW9uKGJvb2wgc21hcnREZWxldGUgPSBmYWxzZSwgYm9vbCBtZXJnZUJsb2Nr
c0FmdGVyRGVsZXRlID0gdHJ1ZSwgYm9vbCByZXBsYWNlID0gZmFsc2UsIGJvb2wgZXhwYW5kRm9y
U3BlY2lhbEVsZW1lbnRzID0gdHJ1ZSwgYm9vbCBzYW5pdGl6ZU1hcmt1cCA9IHRydWUpOwogICAg
IHZvaWQgZGVsZXRlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBib29sIHNtYXJ0
RGVsZXRlID0gZmFsc2UsIGJvb2wgbWVyZ2VCbG9ja3NBZnRlckRlbGV0ZSA9IHRydWUsIGJvb2wg
cmVwbGFjZSA9IGZhbHNlLCBib29sIGV4cGFuZEZvclNwZWNpYWxFbGVtZW50cyA9IHRydWUsIGJv
b2wgc2FuaXRpemVNYXJrdXAgPSB0cnVlKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVGV4dEZy
b21Ob2RlKFBhc3NSZWZQdHI8VGV4dD4sIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291bnQp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21t
YW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5j
cHAKaW5kZXggYjhjOTdkOGNlZmFhYzI3NDFlMjA0MThiZjQxNTdkMmIyNzQ1NzUyZC4uNjYxZGFm
OWEwZGE4NDQ0MmRmNjg2NDQ3YmE3MDZhMmUyMDExMjZkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC03OTEsOCArNzkxLDgg
QEAgU3RyaW5nIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om9yaWdpbmFsU3RyaW5nRm9yQXV0b2Nv
cnJlY3Rpb25BdEJlZ2lubmluZ09mU2VsZWMKICAgICBpZiAobmV4dFBvc2l0aW9uLmlzTnVsbCgp
KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlT2ZG
aXJzdENoYXJhY3RlciA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3RhcnRPZlNlbGVjdGlv
bi5kZWVwRXF1aXZhbGVudCgpLCBuZXh0UG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7Ci0gICAg
VmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gZG9jdW1lbnQoKS5tYXJr
ZXJzKCkubWFya2Vyc0luUmFuZ2UocmFuZ2VPZkZpcnN0Q2hhcmFjdGVyLmdldCgpLCBEb2N1bWVu
dE1hcmtlcjo6QXV0b2NvcnJlY3RlZCk7CisgICAgYXV0byByYW5nZU9mRmlyc3RDaGFyYWN0ZXIg
PSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIHN0YXJ0T2ZTZWxlY3Rpb24uZGVlcEVxdWl2YWxl
bnQoKSwgbmV4dFBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkpOworICAgIFZlY3RvcjxSZW5kZXJl
ZERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IGRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNJ
blJhbmdlKHJhbmdlT2ZGaXJzdENoYXJhY3RlciwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0
ZWQpOwogICAgIGZvciAoYXV0byogbWFya2VyIDogbWFya2VycykgewogICAgICAgICBpbnQgc3Rh
cnRPZmZzZXQgPSBtYXJrZXItPnN0YXJ0T2Zmc2V0KCk7CiAgICAgICAgIGlmIChzdGFydE9mZnNl
dCA9PSBzdGFydE9mU2VsZWN0aW9uLmRlZXBFcXVpdmFsZW50KCkub2Zmc2V0SW5Db250YWluZXJO
b2RlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RpY3RhdGlvbkNvbW1h
bmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EaWN0YXRpb25Db21tYW5kLmNwcAppbmRl
eCA5YjE1YTgxODY1Yzc3ODI5MDAyOTBhNDdlYmVlY2MyOWEyZDNlMWIyLi4zNWU2NjNmYWFhNDE3
NGFiOTBjMDk1NTMxNmQ2MDZjMmQ0MWEzZTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0RpY3RhdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RGljdGF0aW9uQ29tbWFuZC5jcHAKQEAgLTExNiw4ICsxMTYsOCBAQCB2b2lkIERpY3RhdGlvbkNv
bW1hbmQ6Omluc2VydFRleHRSdW5XaXRob3V0TmV3bGluZXMoc2l6ZV90IGxpbmVTdGFydCwgc2l6
ZV90IGxpbgogewogICAgIFZlY3RvcjxEaWN0YXRpb25BbHRlcm5hdGl2ZT4gYWx0ZXJuYXRpdmVz
SW5MaW5lOwogICAgIGNvbGxlY3REaWN0YXRpb25BbHRlcm5hdGl2ZXNJblJhbmdlKGxpbmVTdGFy
dCwgbGluZUxlbmd0aCwgYWx0ZXJuYXRpdmVzSW5MaW5lKTsKLSAgICBSZWZQdHI8SW5zZXJ0VGV4
dENvbW1hbmQ+IGNvbW1hbmQgPSBJbnNlcnRUZXh0Q29tbWFuZDo6Y3JlYXRlV2l0aE1hcmtlclN1
cHBsaWVyKGRvY3VtZW50KCksIG1fdGV4dFRvSW5zZXJ0LnN1YnN0cmluZyhsaW5lU3RhcnQsIGxp
bmVMZW5ndGgpLCBEaWN0YXRpb25NYXJrZXJTdXBwbGllcjo6Y3JlYXRlKGFsdGVybmF0aXZlc0lu
TGluZSksIEVkaXRBY3Rpb25EaWN0YXRpb24pOwotICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRl
KGNvbW1hbmQsIGVuZGluZ1NlbGVjdGlvbigpKTsKKyAgICBhdXRvIGNvbW1hbmQgPSBJbnNlcnRU
ZXh0Q29tbWFuZDo6Y3JlYXRlV2l0aE1hcmtlclN1cHBsaWVyKGRvY3VtZW50KCksIG1fdGV4dFRv
SW5zZXJ0LnN1YnN0cmluZyhsaW5lU3RhcnQsIGxpbmVMZW5ndGgpLCBEaWN0YXRpb25NYXJrZXJT
dXBwbGllcjo6Y3JlYXRlKGFsdGVybmF0aXZlc0luTGluZSksIEVkaXRBY3Rpb25EaWN0YXRpb24p
OworICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFdURk1vdmUoY29tbWFuZCksIGVuZGluZ1Nl
bGVjdGlvbigpKTsKIH0KIAogdm9pZCBEaWN0YXRpb25Db21tYW5kOjppbnNlcnRQYXJhZ3JhcGhT
ZXBhcmF0b3IoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5
bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCmluZGV4IGFl
NDk1M2IyOGUxM2FiODhmNDMxMDU3Y2Q3ZmNjYjY0YTBjYzkwM2MuLmJlMTlmOWM0ZDkyMjE1MzBh
MjJkMzQ3ZmIwYzQzZDFiOTQxZjQyNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdGluZ1N0eWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdT
dHlsZS5jcHAKQEAgLTkzLDcgKzkzLDcgQEAgY29uc3QgdW5zaWduZWQgbnVtSW5oZXJpdGFibGVF
ZGl0aW5nUHJvcGVydGllcyA9IG51bUFsbEVkaXRpbmdQcm9wZXJ0aWVzIC0gMjsKIAogZW51bSBF
ZGl0aW5nUHJvcGVydGllc1RvSW5jbHVkZSB7IE9ubHlJbmhlcml0YWJsZUVkaXRpbmdQcm9wZXJ0
aWVzLCBBbGxFZGl0aW5nUHJvcGVydGllcyB9OwogdGVtcGxhdGUgPGNsYXNzIFN0eWxlRGVjbGFy
YXRpb25UeXBlPgotc3RhdGljIFBhc3NSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gY29w
eUVkaXRpbmdQcm9wZXJ0aWVzKFN0eWxlRGVjbGFyYXRpb25UeXBlKiBzdHlsZSwgRWRpdGluZ1By
b3BlcnRpZXNUb0luY2x1ZGUgdHlwZSkKK3N0YXRpYyBSZWY8TXV0YWJsZVN0eWxlUHJvcGVydGll
cz4gY29weUVkaXRpbmdQcm9wZXJ0aWVzKFN0eWxlRGVjbGFyYXRpb25UeXBlKiBzdHlsZSwgRWRp
dGluZ1Byb3BlcnRpZXNUb0luY2x1ZGUgdHlwZSkKIHsKICAgICBpZiAodHlwZSA9PSBBbGxFZGl0
aW5nUHJvcGVydGllcykKICAgICAgICAgcmV0dXJuIHN0eWxlLT5jb3B5UHJvcGVydGllc0luU2V0
KGVkaXRpbmdQcm9wZXJ0aWVzLCBudW1BbGxFZGl0aW5nUHJvcGVydGllcyk7CkBAIC0xMDksMzIg
KzEwOSwzMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNFZGl0aW5nUHJvcGVydHkoaW50IGlkKQog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8TXV0YWJsZVN0eWxlUHJv
cGVydGllcz4gY29weVByb3BlcnRpZXNGcm9tQ29tcHV0ZWRTdHlsZShDb21wdXRlZFN0eWxlRXh0
cmFjdG9yJiBjb21wdXRlZFN0eWxlLCBFZGl0aW5nU3R5bGU6OlByb3BlcnRpZXNUb0luY2x1ZGUg
cHJvcGVydGllc1RvSW5jbHVkZSkKK3N0YXRpYyBSZWY8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4g
Y29weVByb3BlcnRpZXNGcm9tQ29tcHV0ZWRTdHlsZShDb21wdXRlZFN0eWxlRXh0cmFjdG9yJiBj
b21wdXRlZFN0eWxlLCBFZGl0aW5nU3R5bGU6OlByb3BlcnRpZXNUb0luY2x1ZGUgcHJvcGVydGll
c1RvSW5jbHVkZSkKIHsKICAgICBzd2l0Y2ggKHByb3BlcnRpZXNUb0luY2x1ZGUpIHsKLSAgICBj
YXNlIEVkaXRpbmdTdHlsZTo6QWxsUHJvcGVydGllczoKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVk
U3R5bGUuY29weVByb3BlcnRpZXMoKTsKICAgICBjYXNlIEVkaXRpbmdTdHlsZTo6T25seUVkaXRp
bmdJbmhlcml0YWJsZVByb3BlcnRpZXM6CiAgICAgICAgIHJldHVybiBjb3B5RWRpdGluZ1Byb3Bl
cnRpZXMoJmNvbXB1dGVkU3R5bGUsIE9ubHlJbmhlcml0YWJsZUVkaXRpbmdQcm9wZXJ0aWVzKTsK
ICAgICBjYXNlIEVkaXRpbmdTdHlsZTo6RWRpdGluZ1Byb3BlcnRpZXNJbkVmZmVjdDoKICAgICAg
ICAgcmV0dXJuIGNvcHlFZGl0aW5nUHJvcGVydGllcygmY29tcHV0ZWRTdHlsZSwgQWxsRWRpdGlu
Z1Byb3BlcnRpZXMpOworICAgIGNhc2UgRWRpdGluZ1N0eWxlOjpBbGxQcm9wZXJ0aWVzOgorICAg
ICAgICBicmVhazsKICAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIGNvbXB1dGVkU3R5bGUuY29weVByb3BlcnRpZXMoKTsKIH0KIAotc3Rh
dGljIFBhc3NSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gY29weVByb3BlcnRpZXNGcm9t
Q29tcHV0ZWRTdHlsZShOb2RlKiBub2RlLCBFZGl0aW5nU3R5bGU6OlByb3BlcnRpZXNUb0luY2x1
ZGUgcHJvcGVydGllc1RvSW5jbHVkZSkKK3N0YXRpYyBSZWY8TXV0YWJsZVN0eWxlUHJvcGVydGll
cz4gY29weVByb3BlcnRpZXNGcm9tQ29tcHV0ZWRTdHlsZShOb2RlKiBub2RlLCBFZGl0aW5nU3R5
bGU6OlByb3BlcnRpZXNUb0luY2x1ZGUgcHJvcGVydGllc1RvSW5jbHVkZSkKIHsKICAgICBDb21w
dXRlZFN0eWxlRXh0cmFjdG9yIGNvbXB1dGVkU3R5bGUobm9kZSk7CiAgICAgcmV0dXJuIGNvcHlQ
cm9wZXJ0aWVzRnJvbUNvbXB1dGVkU3R5bGUoY29tcHV0ZWRTdHlsZSwgcHJvcGVydGllc1RvSW5j
bHVkZSk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiBleHRyYWN0UHJvcGVydHlW
YWx1ZShjb25zdCBTdHlsZVByb3BlcnRpZXMmIHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
SUQpCitzdGF0aWMgUmVmUHRyPENTU1ZhbHVlPiBleHRyYWN0UHJvcGVydHlWYWx1ZShjb25zdCBT
dHlsZVByb3BlcnRpZXMmIHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCiB7CiAgICAg
cmV0dXJuIHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHlJRCk7CiB9CiAKLXN0YXRp
YyBQYXNzUmVmUHRyPENTU1ZhbHVlPiBleHRyYWN0UHJvcGVydHlWYWx1ZShDb21wdXRlZFN0eWxl
RXh0cmFjdG9yJiBjb21wdXRlZFN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCitzdGF0
aWMgUmVmUHRyPENTU1ZhbHVlPiBleHRyYWN0UHJvcGVydHlWYWx1ZShDb21wdXRlZFN0eWxlRXh0
cmFjdG9yJiBjb21wdXRlZFN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCiB7CiAgICAg
cmV0dXJuIGNvbXB1dGVkU3R5bGUucHJvcGVydHlWYWx1ZShwcm9wZXJ0eUlEKTsKIH0KQEAgLTE1
MCw3ICsxNDksNyBAQCBpbnQgaWRlbnRpZmllckZvclN0eWxlUHJvcGVydHkoVCYgc3R5bGUsIENT
U1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KCp2YWx1ZSkudmFsdWVJRCgpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBQYXNz
UmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IGdldFByb3BlcnRpZXNOb3RJbihTdHlsZVBy
b3BlcnRpZXMmIHN0eWxlV2l0aFJlZHVuZGFudFByb3BlcnRpZXMsIFQmIGJhc2VTdHlsZSk7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBSZWY8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gZ2V0UHJvcGVy
dGllc05vdEluKFN0eWxlUHJvcGVydGllcyYgc3R5bGVXaXRoUmVkdW5kYW50UHJvcGVydGllcywg
VCYgYmFzZVN0eWxlKTsKIGVudW0gTGVnYWN5Rm9udFNpemVNb2RlIHsgQWx3YXlzVXNlTGVnYWN5
Rm9udFNpemUsIFVzZUxlZ2FjeUZvbnRTaXplT25seUlmUGl4ZWxWYWx1ZXNNYXRjaCB9Owogc3Rh
dGljIGludCBsZWdhY3lGb250U2l6ZUZyb21DU1NWYWx1ZShEb2N1bWVudCosIENTU1ByaW1pdGl2
ZVZhbHVlKiwgYm9vbCBzaG91bGRVc2VGaXhlZEZvbnREZWZhdWx0U2l6ZSwgTGVnYWN5Rm9udFNp
emVNb2RlKTsKIHN0YXRpYyBib29sIGhhc1RyYW5zcGFyZW50QmFja2dyb3VuZENvbG9yKFN0eWxl
UHJvcGVydGllcyopOwpAQCAtMjU4LDcgKzI1Nyw3IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0F0
dHJpYnV0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KICAgICBib29sIHZhbHVl
SXNQcmVzZW50SW5TdHlsZShFbGVtZW50JiwgY29uc3QgRWRpdGluZ1N0eWxlJikgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgdm9pZCBhZGRUb1N0eWxlKEVsZW1lbnQqLCBFZGl0aW5nU3R5bGUqKSBjb25z
dCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGF0dHJpYnV0ZVZh
bHVlQXNDU1NWYWx1ZShFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBSZWZQdHI8Q1NTVmFs
dWU+IGF0dHJpYnV0ZVZhbHVlQXNDU1NWYWx1ZShFbGVtZW50KikgY29uc3Q7CiAgICAgaW5saW5l
IGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2F0
dHJOYW1lOyB9CiAKIHByb3RlY3RlZDoKQEAgLTI5MSw3ICsyOTAsNyBAQCB2b2lkIEhUTUxBdHRy
aWJ1dGVFcXVpdmFsZW50OjphZGRUb1N0eWxlKEVsZW1lbnQqIGVsZW1lbnQsIEVkaXRpbmdTdHls
ZSogc3R5bGUpCiAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShtX3Byb3BlcnR5SUQsIHZhbHVl
LT5jc3NUZXh0KCkpOwogfQogCi1QYXNzUmVmUHRyPENTU1ZhbHVlPiBIVE1MQXR0cmlidXRlRXF1
aXZhbGVudDo6YXR0cmlidXRlVmFsdWVBc0NTU1ZhbHVlKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0
CitSZWZQdHI8Q1NTVmFsdWU+IEhUTUxBdHRyaWJ1dGVFcXVpdmFsZW50OjphdHRyaWJ1dGVWYWx1
ZUFzQ1NTVmFsdWUoRWxlbWVudCogZWxlbWVudCkgY29uc3QKIHsKICAgICBBU1NFUlQoZWxlbWVu
dCk7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGVsZW1lbnQtPmdldEF0dHJpYnV0
ZShtX2F0dHJOYW1lKTsKQEAgLTMwOCw3ICszMDcsNyBAQCBjbGFzcyBIVE1MRm9udFNpemVFcXVp
dmFsZW50IDogcHVibGljIEhUTUxBdHRyaWJ1dGVFcXVpdmFsZW50IHsKIHB1YmxpYzoKICAgICBI
VE1MRm9udFNpemVFcXVpdmFsZW50KCk7CiAKLSAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBhdHRy
aWJ1dGVWYWx1ZUFzQ1NTVmFsdWUoRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0
cjxDU1NWYWx1ZT4gYXR0cmlidXRlVmFsdWVBc0NTU1ZhbHVlKEVsZW1lbnQqKSBjb25zdCBvdmVy
cmlkZTsKIH07CiAKIEhUTUxGb250U2l6ZUVxdWl2YWxlbnQ6OkhUTUxGb250U2l6ZUVxdWl2YWxl
bnQoKQpAQCAtMzE2LDcgKzMxNSw3IEBAIEhUTUxGb250U2l6ZUVxdWl2YWxlbnQ6OkhUTUxGb250
U2l6ZUVxdWl2YWxlbnQoKQogewogfQogCi1QYXNzUmVmUHRyPENTU1ZhbHVlPiBIVE1MRm9udFNp
emVFcXVpdmFsZW50OjphdHRyaWJ1dGVWYWx1ZUFzQ1NTVmFsdWUoRWxlbWVudCogZWxlbWVudCkg
Y29uc3QKK1JlZlB0cjxDU1NWYWx1ZT4gSFRNTEZvbnRTaXplRXF1aXZhbGVudDo6YXR0cmlidXRl
VmFsdWVBc0NTU1ZhbHVlKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGVs
ZW1lbnQpOwogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBlbGVtZW50LT5nZXRBdHRy
aWJ1dGUobV9hdHRyTmFtZSk7CkBAIC01NzQsOSArNTczLDkgQEAgYm9vbCBFZGl0aW5nU3R5bGU6
OnRleHREaXJlY3Rpb24oV3JpdGluZ0RpcmVjdGlvbiYgd3JpdGluZ0RpcmVjdGlvbikgY29uc3QK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgRWRpdGluZ1N0eWxlOjpzZXRTdHlsZShQYXNz
UmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IHN0eWxlKQordm9pZCBFZGl0aW5nU3R5bGU6
OnNldFN0eWxlKFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiYmIHN0eWxlKQogewotICAg
IG1fbXV0YWJsZVN0eWxlID0gc3R5bGU7CisgICAgbV9tdXRhYmxlU3R5bGUgPSBXVEZNb3ZlKHN0
eWxlKTsKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gZmlndXJlIG91dCB3aGV0
aGVyIG9yIG5vdCBmb250IGlzIGZpeGVkIHdpZHRoIGZvciBtdXRhYmxlIHN0eWxlLgogICAgIC8v
IFdlIG5lZWQgdG8gY2hlY2sgZm9udC1mYW1pbHkgaXMgbW9ub3NwYWNlIGFzIGluIEZvbnREZXNj
cmlwdGlvbiBidXQgd2UgZG9uJ3Qgd2FudCB0byBkdXBsaWNhdGUgY29kZSBoZXJlLgogICAgIG1f
c2hvdWxkVXNlRml4ZWREZWZhdWx0Rm9udFNpemUgPSBmYWxzZTsKQEAgLTY0Niw5ICs2NDUsOSBA
QCB2b2lkIEVkaXRpbmdTdHlsZTo6Y2xlYXIoKQogICAgIHNldFN0cmlrZVRocm91Z2hDaGFuZ2Uo
VGV4dERlY29yYXRpb25DaGFuZ2U6Ok5vbmUpOwogfQogCi1QYXNzUmVmUHRyPEVkaXRpbmdTdHls
ZT4gRWRpdGluZ1N0eWxlOjpjb3B5KCkgY29uc3QKK1JlZjxFZGl0aW5nU3R5bGU+IEVkaXRpbmdT
dHlsZTo6Y29weSgpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gY29weSA9IEVk
aXRpbmdTdHlsZTo6Y3JlYXRlKCk7CisgICAgYXV0byBjb3B5ID0gRWRpdGluZ1N0eWxlOjpjcmVh
dGUoKTsKICAgICBpZiAobV9tdXRhYmxlU3R5bGUpCiAgICAgICAgIGNvcHktPm1fbXV0YWJsZVN0
eWxlID0gbV9tdXRhYmxlU3R5bGUtPm11dGFibGVDb3B5KCk7CiAgICAgY29weS0+bV9zaG91bGRV
c2VGaXhlZERlZmF1bHRGb250U2l6ZSA9IG1fc2hvdWxkVXNlRml4ZWREZWZhdWx0Rm9udFNpemU7
CkBAIC02NTgsOSArNjU3LDkgQEAgUGFzc1JlZlB0cjxFZGl0aW5nU3R5bGU+IEVkaXRpbmdTdHls
ZTo6Y29weSgpIGNvbnN0CiAgICAgcmV0dXJuIGNvcHk7CiB9CiAKLVBhc3NSZWZQdHI8RWRpdGlu
Z1N0eWxlPiBFZGl0aW5nU3R5bGU6OmV4dHJhY3RBbmRSZW1vdmVCbG9ja1Byb3BlcnRpZXMoKQor
UmVmPEVkaXRpbmdTdHlsZT4gRWRpdGluZ1N0eWxlOjpleHRyYWN0QW5kUmVtb3ZlQmxvY2tQcm9w
ZXJ0aWVzKCkKIHsKLSAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBibG9ja1Byb3BlcnRpZXMgPSBF
ZGl0aW5nU3R5bGU6OmNyZWF0ZSgpOworICAgIGF1dG8gYmxvY2tQcm9wZXJ0aWVzID0gRWRpdGlu
Z1N0eWxlOjpjcmVhdGUoKTsKICAgICBpZiAoIW1fbXV0YWJsZVN0eWxlKQogICAgICAgICByZXR1
cm4gYmxvY2tQcm9wZXJ0aWVzOwogCkBAIC02NzAsOSArNjY5LDkgQEAgUGFzc1JlZlB0cjxFZGl0
aW5nU3R5bGU+IEVkaXRpbmdTdHlsZTo6ZXh0cmFjdEFuZFJlbW92ZUJsb2NrUHJvcGVydGllcygp
CiAgICAgcmV0dXJuIGJsb2NrUHJvcGVydGllczsKIH0KIAotUGFzc1JlZlB0cjxFZGl0aW5nU3R5
bGU+IEVkaXRpbmdTdHlsZTo6ZXh0cmFjdEFuZFJlbW92ZVRleHREaXJlY3Rpb24oKQorUmVmPEVk
aXRpbmdTdHlsZT4gRWRpdGluZ1N0eWxlOjpleHRyYWN0QW5kUmVtb3ZlVGV4dERpcmVjdGlvbigp
CiB7Ci0gICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gdGV4dERpcmVjdGlvbiA9IEVkaXRpbmdTdHls
ZTo6Y3JlYXRlKCk7CisgICAgYXV0byB0ZXh0RGlyZWN0aW9uID0gRWRpdGluZ1N0eWxlOjpjcmVh
dGUoKTsKICAgICB0ZXh0RGlyZWN0aW9uLT5tX211dGFibGVTdHlsZSA9IE11dGFibGVTdHlsZVBy
b3BlcnRpZXM6OmNyZWF0ZSgpOwogICAgIHRleHREaXJlY3Rpb24tPm1fbXV0YWJsZVN0eWxlLT5z
ZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpLCBDU1NWYWx1ZUVtYmVkLCBtX211dGFi
bGVTdHlsZS0+cHJvcGVydHlJc0ltcG9ydGFudChDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpKSk7CiAg
ICAgdGV4dERpcmVjdGlvbi0+bV9tdXRhYmxlU3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5
RGlyZWN0aW9uLCBtX211dGFibGVTdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eURp
cmVjdGlvbiksCkBAIC0xMTI2LDEwICsxMTI1LDEwIEBAIHZvaWQgRWRpdGluZ1N0eWxlOjptZXJn
ZUlubGluZVN0eWxlT2ZFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQsIENTU1Byb3BlcnR5
CiAgICAgICAgIG1lcmdlU3R5bGUoZWxlbWVudC0+aW5saW5lU3R5bGUoKSwgbW9kZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICBjYXNlIE9ubHlFZGl0aW5nSW5oZXJpdGFibGVQcm9wZXJ0aWVzOgot
ICAgICAgICBtZXJnZVN0eWxlKGNvcHlFZGl0aW5nUHJvcGVydGllcyhlbGVtZW50LT5pbmxpbmVT
dHlsZSgpLCBPbmx5SW5oZXJpdGFibGVFZGl0aW5nUHJvcGVydGllcykuZ2V0KCksIG1vZGUpOwor
ICAgICAgICBtZXJnZVN0eWxlKGNvcHlFZGl0aW5nUHJvcGVydGllcyhlbGVtZW50LT5pbmxpbmVT
dHlsZSgpLCBPbmx5SW5oZXJpdGFibGVFZGl0aW5nUHJvcGVydGllcykucHRyKCksIG1vZGUpOwog
ICAgICAgICByZXR1cm47CiAgICAgY2FzZSBFZGl0aW5nUHJvcGVydGllc0luRWZmZWN0OgotICAg
ICAgICBtZXJnZVN0eWxlKGNvcHlFZGl0aW5nUHJvcGVydGllcyhlbGVtZW50LT5pbmxpbmVTdHls
ZSgpLCBBbGxFZGl0aW5nUHJvcGVydGllcykuZ2V0KCksIG1vZGUpOworICAgICAgICBtZXJnZVN0
eWxlKGNvcHlFZGl0aW5nUHJvcGVydGllcyhlbGVtZW50LT5pbmxpbmVTdHlsZSgpLCBBbGxFZGl0
aW5nUHJvcGVydGllcykucHRyKCksIG1vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogfQpA
QCAtMTE0NSwyMSArMTE0NCwxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZWxlbWVudE1hdGNoZXNB
bmRQcm9wZXJ0eUlzTm90SW5JbmxpbmVTdHlsZURlY2woY29uc3QgSFRNTEVsZQogICAgIHJldHVy
biAhZWxlbWVudC0+aW5saW5lU3R5bGUoKSB8fCAhZXF1aXZhbGVudC0+cHJvcGVydHlFeGlzdHNJ
blN0eWxlKEVkaXRpbmdTdHlsZTo6Y3JlYXRlKGVsZW1lbnQtPmlubGluZVN0eWxlKCkpLmdldCgp
KTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gZXh0cmFj
dEVkaXRpbmdQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydGllcyogc3R5bGUsIEVkaXRpbmdT
dHlsZTo6UHJvcGVydGllc1RvSW5jbHVkZSBwcm9wZXJ0aWVzVG9JbmNsdWRlKQorc3RhdGljIFJl
ZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBleHRyYWN0RWRpdGluZ1Byb3BlcnRpZXMoY29u
c3QgU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRpdGluZ1N0eWxlOjpQcm9wZXJ0aWVzVG9JbmNs
dWRlIHByb3BlcnRpZXNUb0luY2x1ZGUpCiB7CiAgICAgaWYgKCFzdHlsZSkKLSAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgc3dpdGNoIChwcm9wZXJ0aWVz
VG9JbmNsdWRlKSB7Ci0gICAgY2FzZSBFZGl0aW5nU3R5bGU6OkFsbFByb3BlcnRpZXM6Ci0gICAg
Y2FzZSBFZGl0aW5nU3R5bGU6OkVkaXRpbmdQcm9wZXJ0aWVzSW5FZmZlY3Q6Ci0gICAgICAgIHJl
dHVybiBjb3B5RWRpdGluZ1Byb3BlcnRpZXMoc3R5bGUsIEFsbEVkaXRpbmdQcm9wZXJ0aWVzKTsK
ICAgICBjYXNlIEVkaXRpbmdTdHlsZTo6T25seUVkaXRpbmdJbmhlcml0YWJsZVByb3BlcnRpZXM6
CiAgICAgICAgIHJldHVybiBjb3B5RWRpdGluZ1Byb3BlcnRpZXMoc3R5bGUsIE9ubHlJbmhlcml0
YWJsZUVkaXRpbmdQcm9wZXJ0aWVzKTsKKyAgICBjYXNlIEVkaXRpbmdTdHlsZTo6QWxsUHJvcGVy
dGllczoKKyAgICBjYXNlIEVkaXRpbmdTdHlsZTo6RWRpdGluZ1Byb3BlcnRpZXNJbkVmZmVjdDoK
KyAgICAgICAgYnJlYWs7CiAgICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
cmV0dXJuIDA7CisgICAgcmV0dXJuIGNvcHlFZGl0aW5nUHJvcGVydGllcyhzdHlsZSwgQWxsRWRp
dGluZ1Byb3BlcnRpZXMpOwogfQogCiB2b2lkIEVkaXRpbmdTdHlsZTo6bWVyZ2VJbmxpbmVBbmRJ
bXBsaWNpdFN0eWxlT2ZFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQsIENTU1Byb3BlcnR5
T3ZlcnJpZGVNb2RlIG1vZGUsIFByb3BlcnRpZXNUb0luY2x1ZGUgcHJvcGVydGllc1RvSW5jbHVk
ZSkKQEAgLTE0MjUsMTAgKzE0MjIsMTAgQEAgaW50IEVkaXRpbmdTdHlsZTo6bGVnYWN5Rm9udFNp
emUoRG9jdW1lbnQqIGRvY3VtZW50KSBjb25zdAogICAgICAgICBtX3Nob3VsZFVzZUZpeGVkRGVm
YXVsdEZvbnRTaXplLCBBbHdheXNVc2VMZWdhY3lGb250U2l6ZSk7CiB9CiAKLVBhc3NSZWZQdHI8
RWRpdGluZ1N0eWxlPiBFZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIGJvb2wgc2hvdWxkVXNlQmFja2dyb3VuZENvbG9y
SW5FZmZlY3QpCitSZWZQdHI8RWRpdGluZ1N0eWxlPiBFZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxl
Y3Rpb25TdGFydChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIGJvb2wgc2hvdWxk
VXNlQmFja2dyb3VuZENvbG9ySW5FZmZlY3QpCiB7CiAgICAgaWYgKHNlbGVjdGlvbi5pc05vbmUo
KSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgUG9z
aXRpb24gcG9zaXRpb24gPSBhZGp1c3RlZFNlbGVjdGlvblN0YXJ0Rm9yU3R5bGVDb21wdXRhdGlv
bihzZWxlY3Rpb24pOwogCkBAIC0xNDQyLDkgKzE0MzksOSBAQCBQYXNzUmVmUHRyPEVkaXRpbmdT
dHlsZT4gRWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQoY29uc3QgVmlzaWJsZVNl
bGVjdAogCiAgICAgRWxlbWVudCogZWxlbWVudCA9IHBvc2l0aW9uLmVsZW1lbnQoKTsKICAgICBp
ZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUo
ZWxlbWVudCwgRWRpdGluZ1N0eWxlOjpBbGxQcm9wZXJ0aWVzKTsKKyAgICBhdXRvIHN0eWxlID0g
RWRpdGluZ1N0eWxlOjpjcmVhdGUoZWxlbWVudCwgRWRpdGluZ1N0eWxlOjpBbGxQcm9wZXJ0aWVz
KTsKICAgICBzdHlsZS0+bWVyZ2VUeXBpbmdTdHlsZShlbGVtZW50LT5kb2N1bWVudCgpKTsKIAog
ICAgIC8vIElmIGJhY2tncm91bmQgY29sb3IgaXMgdHJhbnNwYXJlbnQsIHRyYXZlcnNlIHBhcmVu
dCBub2RlcyB1bnRpbCB3ZSBoaXQgYSBkaWZmZXJlbnQgdmFsdWUgb3IgZG9jdW1lbnQgcm9vdApA
QCAtMTQ1Niw3ICsxNDUzLDcgQEAgUGFzc1JlZlB0cjxFZGl0aW5nU3R5bGU+IEVkaXRpbmdTdHls
ZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KGNvbnN0IFZpc2libGVTZWxlY3QKICAgICAgICAgICAg
IHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgdmFsdWUtPmNz
c1RleHQoKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIHN0eWxlOworICAgIHJldHVybiBXVEZNb3Zl
KHN0eWxlKTsKIH0KIAogV3JpdGluZ0RpcmVjdGlvbiBFZGl0aW5nU3R5bGU6OnRleHREaXJlY3Rp
b25Gb3JTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBFZGl0aW5n
U3R5bGUqIHR5cGluZ1N0eWxlLCBib29sJiBoYXNOZXN0ZWRPck11bHRpcGxlRW1iZWRkaW5ncykK
QEAgLTE3OTEsNyArMTc4OCw3IEBAIHN0YXRpYyBSZWY8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4g
ZXh0cmFjdFByb3BlcnRpZXNOb3RJbihTdHlsZVByb3BlcnRpZXMmIHN0eWxlCiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci1QYXNzUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IGdldFBy
b3BlcnRpZXNOb3RJbihTdHlsZVByb3BlcnRpZXMmIHN0eWxlV2l0aFJlZHVuZGFudFByb3BlcnRp
ZXMsIFQmIGJhc2VTdHlsZSkKK1JlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBnZXRQcm9wZXJ0
aWVzTm90SW4oU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZVdpdGhSZWR1bmRhbnRQcm9wZXJ0aWVzLCBU
JiBiYXNlU3R5bGUpCiB7CiAgICAgcmV0dXJuIGV4dHJhY3RQcm9wZXJ0aWVzTm90SW4oc3R5bGVX
aXRoUmVkdW5kYW50UHJvcGVydGllcywgYmFzZVN0eWxlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRpbmdTdHlsZS5oCmluZGV4IGI5ZTUyZTMzMzgwZjljMGMzY2QyOThiZmRhMWVmZTExZmEx
ZDczOWQuLjFjYTA3MTM1ZjVmNDJkYjFmNjRkYzc4MGIyNjA3OTUzNDIxZjA5ZjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaApAQCAtMTEzLDEzICsxMTMsMTMgQEAgcHVibGlj
OgogICAgIFJlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBzdHlsZVdpdGhSZXNvbHZlZFRleHRE
ZWNvcmF0aW9ucygpIGNvbnN0OwogICAgIGJvb2wgdGV4dERpcmVjdGlvbihXcml0aW5nRGlyZWN0
aW9uJikgY29uc3Q7CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTdHls
ZShQYXNzUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+KTsKKyAgICB2b2lkIHNldFN0eWxl
KFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiYmKTsKICAgICB2b2lkIG92ZXJyaWRlV2l0
aFN0eWxlKGNvbnN0IFN0eWxlUHJvcGVydGllcyopOwogICAgIHZvaWQgb3ZlcnJpZGVUeXBpbmdT
dHlsZUF0KGNvbnN0IEVkaXRpbmdTdHlsZSYsIGNvbnN0IFBvc2l0aW9uJik7CiAgICAgdm9pZCBj
bGVhcigpOwotICAgIFBhc3NSZWZQdHI8RWRpdGluZ1N0eWxlPiBjb3B5KCkgY29uc3Q7Ci0gICAg
UGFzc1JlZlB0cjxFZGl0aW5nU3R5bGU+IGV4dHJhY3RBbmRSZW1vdmVCbG9ja1Byb3BlcnRpZXMo
KTsKLSAgICBQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4gZXh0cmFjdEFuZFJlbW92ZVRleHREaXJl
Y3Rpb24oKTsKKyAgICBSZWY8RWRpdGluZ1N0eWxlPiBjb3B5KCkgY29uc3Q7CisgICAgUmVmPEVk
aXRpbmdTdHlsZT4gZXh0cmFjdEFuZFJlbW92ZUJsb2NrUHJvcGVydGllcygpOworICAgIFJlZjxF
ZGl0aW5nU3R5bGU+IGV4dHJhY3RBbmRSZW1vdmVUZXh0RGlyZWN0aW9uKCk7CiAgICAgdm9pZCBy
ZW1vdmVCbG9ja1Byb3BlcnRpZXMoKTsKICAgICB2b2lkIHJlbW92ZVN0eWxlQWRkZWRCeU5vZGUo
Tm9kZSopOwogICAgIHZvaWQgcmVtb3ZlU3R5bGVDb25mbGljdGluZ1dpdGhTdHlsZU9mTm9kZShO
b2RlKik7CkBAIC0xNjUsNyArMTY1LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U3RyaWtlVGhy
b3VnaENoYW5nZShUZXh0RGVjb3JhdGlvbkNoYW5nZSBjaGFuZ2UpIHsgbV9zdHJpa2VUaHJvdWdo
Q2hhbmdlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNoYW5nZSk7IH0KICAgICBUZXh0RGVjb3Jh
dGlvbkNoYW5nZSBzdHJpa2VUaHJvdWdoQ2hhbmdlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8VGV4dERlY29yYXRpb25DaGFuZ2U+KG1fc3RyaWtlVGhyb3VnaENoYW5nZSk7IH0KIAotICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4gc3R5bGVBdFNl
bGVjdGlvblN0YXJ0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBib29sIHNob3VsZFVzZUJhY2tn
cm91bmRDb2xvckluRWZmZWN0ID0gZmFsc2UpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBS
ZWZQdHI8RWRpdGluZ1N0eWxlPiBzdHlsZUF0U2VsZWN0aW9uU3RhcnQoY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYsIGJvb2wgc2hvdWxkVXNlQmFja2dyb3VuZENvbG9ySW5FZmZlY3QgPSBmYWxzZSk7
CiAgICAgc3RhdGljIFdyaXRpbmdEaXJlY3Rpb24gdGV4dERpcmVjdGlvbkZvclNlbGVjdGlvbihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgRWRpdGluZ1N0eWxlKiB0eXBpbmdTdHlsZSwgYm9vbCYg
aGFzTmVzdGVkT3JNdWx0aXBsZUVtYmVkZGluZ3MpOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuY3BwCmluZGV4IGU5YTI5NjRlZTViNjc3NDU2NDkyOTZhNjQxZjg5M2E0ZDg5NDdl
ZjkuLjg4ZDk3ZDE5ZDdmMzc4M2RhMzFlNTJhM2IxODczNTFjOTNkNTBkNjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5jcHAKQEAgLTI0OCw3ICsyNDgsNyBAQCBib29sIEVkaXRvcjo6aGFuZGxl
VGV4dEV2ZW50KFRleHRFdmVudCYgZXZlbnQpCiAgICAgICAgICAgICBpZiAoY2xpZW50KCktPnBl
cmZvcm1zVHdvU3RlcFBhc3RlKGV2ZW50LnBhc3RpbmdGcmFnbWVudCgpKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgotICAgICAgICAgICAgcmVwbGFjZVNlbGVjdGlvbldp
dGhGcmFnbWVudChldmVudC5wYXN0aW5nRnJhZ21lbnQoKSwgZmFsc2UsIGV2ZW50LnNob3VsZFNt
YXJ0UmVwbGFjZSgpLCBldmVudC5zaG91bGRNYXRjaFN0eWxlKCksIEVkaXRBY3Rpb25QYXN0ZSwg
ZXZlbnQubWFpbEJsb2NrcXVvdGVIYW5kbGluZygpKTsKKyAgICAgICAgICAgIHJlcGxhY2VTZWxl
Y3Rpb25XaXRoRnJhZ21lbnQoKmV2ZW50LnBhc3RpbmdGcmFnbWVudCgpLCBmYWxzZSwgZXZlbnQu
c2hvdWxkU21hcnRSZXBsYWNlKCksIGV2ZW50LnNob3VsZE1hdGNoU3R5bGUoKSwgRWRpdEFjdGlv
blBhc3RlLCBldmVudC5tYWlsQmxvY2txdW90ZUhhbmRsaW5nKCkpOwogICAgICAgICB9IGVsc2UK
ICAgICAgICAgICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChldmVudC5kYXRhKCksIGZhbHNl
LCBldmVudC5zaG91bGRTbWFydFJlcGxhY2UoKSwgRWRpdEFjdGlvblBhc3RlKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CkBAIC00ODUsMTAgKzQ4NSwxMCBAQCBib29sIEVkaXRvcjo6c2hvdWxkSW5z
ZXJ0RnJhZ21lbnQoUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCwgUGFzc1Jl
ZgogICAgIHJldHVybiBjbGllbnQoKS0+c2hvdWxkSW5zZXJ0Tm9kZShmcmFnbWVudC5nZXQoKSwg
cmVwbGFjaW5nRE9NUmFuZ2UuZ2V0KCksIGdpdmVuQWN0aW9uKTsKIH0KIAotdm9pZCBFZGl0b3I6
OnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBmcmFnbWVudCwgYm9vbCBzZWxlY3RSZXBsYWNlbWVudCwgYm9vbCBzbWFydFJlcGxhY2UsIGJv
b2wgbWF0Y2hTdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uLCBNYWlsQmxvY2txdW90ZUhh
bmRsaW5nIG1haWxCbG9ja3F1b3RlSGFuZGxpbmcpCit2b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVj
dGlvbldpdGhGcmFnbWVudChEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgYm9vbCBzZWxlY3RS
ZXBsYWNlbWVudCwgYm9vbCBzbWFydFJlcGxhY2UsIGJvb2wgbWF0Y2hTdHlsZSwgRWRpdEFjdGlv
biBlZGl0aW5nQWN0aW9uLCBNYWlsQmxvY2txdW90ZUhhbmRsaW5nIG1haWxCbG9ja3F1b3RlSGFu
ZGxpbmcpCiB7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpOwotICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkgfHwgIXNlbGVj
dGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8ICFmcmFnbWVudCkKKyAgICBpZiAoc2VsZWN0aW9u
LmlzTm9uZSgpIHx8ICFzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgQWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dCByZXBsYWNlZFRleHQ7CkBAIC01
MDUsNyArNTA1LDcgQEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQo
UGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCwKICAgICBpZiAobWFpbEJsb2Nr
cXVvdGVIYW5kbGluZyA9PSBNYWlsQmxvY2txdW90ZUhhbmRsaW5nOjpJZ25vcmVCbG9ja3F1b3Rl
KQogICAgICAgICBvcHRpb25zIHw9IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpJZ25vcmVNYWls
QmxvY2txdW90ZTsKIAotICAgIFJlZlB0cjxSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZD4gY29tbWFu
ZCA9IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgZnJhZ21lbnQs
IG9wdGlvbnMsIGVkaXRpbmdBY3Rpb24pOworICAgIFJlZlB0cjxSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZD4gY29tbWFuZCA9IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoZG9jdW1lbnQo
KSwgJmZyYWdtZW50LCBvcHRpb25zLCBlZGl0aW5nQWN0aW9uKTsKICAgICBhcHBseUNvbW1hbmQo
Y29tbWFuZCk7CiAgICAgcmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7CiAK
QEAgLTY1OCwyMCArNjU4LDIwIEBAIFRyaVN0YXRlIEVkaXRvcjo6c2VsZWN0aW9uT3JkZXJlZExp
c3RTdGF0ZSgpIGNvbnN0CiAgICAgcmV0dXJuIEZhbHNlVHJpU3RhdGU7CiB9CiAKLVBhc3NSZWZQ
dHI8Tm9kZT4gRWRpdG9yOjppbnNlcnRPcmRlcmVkTGlzdCgpCitSZWZQdHI8Tm9kZT4gRWRpdG9y
OjppbnNlcnRPcmRlcmVkTGlzdCgpCiB7CiAgICAgaWYgKCFjYW5FZGl0UmljaGx5KCkpCi0gICAg
ICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgCiAgICAgUmVm
UHRyPE5vZGU+IG5ld0xpc3QgPSBJbnNlcnRMaXN0Q29tbWFuZDo6aW5zZXJ0TGlzdChkb2N1bWVu
dCgpLCBJbnNlcnRMaXN0Q29tbWFuZDo6T3JkZXJlZExpc3QpOwogICAgIHJldmVhbFNlbGVjdGlv
bkFmdGVyRWRpdGluZ09wZXJhdGlvbigpOwogICAgIHJldHVybiBuZXdMaXN0OwogfQogCi1QYXNz
UmVmUHRyPE5vZGU+IEVkaXRvcjo6aW5zZXJ0VW5vcmRlcmVkTGlzdCgpCitSZWZQdHI8Tm9kZT4g
RWRpdG9yOjppbnNlcnRVbm9yZGVyZWRMaXN0KCkKIHsKICAgICBpZiAoIWNhbkVkaXRSaWNobHko
KSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAK
ICAgICBSZWZQdHI8Tm9kZT4gbmV3TGlzdCA9IEluc2VydExpc3RDb21tYW5kOjppbnNlcnRMaXN0
KGRvY3VtZW50KCksIEluc2VydExpc3RDb21tYW5kOjpVbm9yZGVyZWRMaXN0KTsKICAgICByZXZl
YWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oKTsKQEAgLTI0MDEsMTMgKzI0MDEsMTMg
QEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMo
VGV4dENoZWNraW5nVHlwZU1hc2sgdGV4dEMKICAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFy
YWdyYXBoVG9DaGVjayhyYW5nZVRvQ2hlY2spOwogICAgIGlmIChwYXJhZ3JhcGhUb0NoZWNrLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFJlZlB0cjxSYW5nZT4gcGFyYWdyYXBoUmFu
Z2UgPSBwYXJhZ3JhcGhUb0NoZWNrLnBhcmFncmFwaFJhbmdlKCk7CisgICAgUmVmPFJhbmdlPiBw
YXJhZ3JhcGhSYW5nZSA9IHBhcmFncmFwaFRvQ2hlY2sucGFyYWdyYXBoUmFuZ2UoKTsKIAogICAg
IGJvb2wgYXN5bmNocm9ub3VzID0gbV9mcmFtZS5zZXR0aW5ncygpLmFzeW5jaHJvbm91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkKCkgJiYgIXNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWw7CiAKICAgICAv
LyBJbiBhc3luY2hyb25vdXMgbW9kZSwgd2UgaW50ZW50aW9uYWxseSBjaGVjayBwYXJhZ3JhcGgt
d2lkZSBzZW50ZW5jZS4KICAgICBjb25zdCBhdXRvIHJlc29sdmVkT3B0aW9ucyA9IHJlc29sdmVU
ZXh0Q2hlY2tpbmdUeXBlTWFzayhlZGl0YWJsZU5vZGUsIHRleHRDaGVja2luZ09wdGlvbnMpOwot
ICAgIGF1dG8gcmVxdWVzdCA9IFNwZWxsQ2hlY2tSZXF1ZXN0OjpjcmVhdGUocmVzb2x2ZWRPcHRp
b25zLCBUZXh0Q2hlY2tpbmdQcm9jZXNzSW5jcmVtZW50YWwsIGFzeW5jaHJvbm91cyA/IHBhcmFn
cmFwaFJhbmdlIDogcmFuZ2VUb0NoZWNrLCBwYXJhZ3JhcGhSYW5nZSk7CisgICAgYXV0byByZXF1
ZXN0ID0gU3BlbGxDaGVja1JlcXVlc3Q6OmNyZWF0ZShyZXNvbHZlZE9wdGlvbnMsIFRleHRDaGVj
a2luZ1Byb2Nlc3NJbmNyZW1lbnRhbCwgYXN5bmNocm9ub3VzID8gcGFyYWdyYXBoUmFuZ2UucHRy
KCkgOiByYW5nZVRvQ2hlY2ssIHBhcmFncmFwaFJhbmdlLnB0cigpKTsKIAogICAgIGlmIChhc3lu
Y2hyb25vdXMpIHsKICAgICAgICAgbV9zcGVsbENoZWNrZXItPnJlcXVlc3RDaGVja2luZ0ZvcihX
VEZNb3ZlKHJlcXVlc3QpKTsKQEAgLTI0MzgsMTMgKzI0MzgsMTMgQEAgc3RhdGljIGJvb2wgaXNB
dXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRUeXBlKFRleHRDaGVja2luZ1R5cGUgdHlwZSkKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyB2b2lkIGNvcnJlY3RTcGVsbGNoZWNraW5nUHJlc2Vy
dmluZ1RleHRDaGVja2luZ1BhcmFncmFwaChUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgmIHBhcmFncmFw
aCwgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFj
ZW1lbnQsIGludCByZXN1bHRMb2NhdGlvbiwgaW50IHJlc3VsdExlbmd0aCkKK3N0YXRpYyB2b2lk
IGNvcnJlY3RTcGVsbGNoZWNraW5nUHJlc2VydmluZ1RleHRDaGVja2luZ1BhcmFncmFwaChUZXh0
Q2hlY2tpbmdQYXJhZ3JhcGgmIHBhcmFncmFwaCwgUmFuZ2UmIHJhbmdlVG9SZXBsYWNlLCBjb25z
dCBTdHJpbmcmIHJlcGxhY2VtZW50LCBpbnQgcmVzdWx0TG9jYXRpb24sIGludCByZXN1bHRMZW5n
dGgpCiB7Ci0gICAgYXV0byYgc2NvcGUgPSBkb3duY2FzdDxDb250YWluZXJOb2RlPihwYXJhZ3Jh
cGgucGFyYWdyYXBoUmFuZ2UoKS0+c3RhcnRDb250YWluZXIoKS5yb290Tm9kZSgpKTsKKyAgICBh
dXRvJiBzY29wZSA9IGRvd25jYXN0PENvbnRhaW5lck5vZGU+KHBhcmFncmFwaC5wYXJhZ3JhcGhS
YW5nZSgpLnN0YXJ0Q29udGFpbmVyKCkucm9vdE5vZGUoKSk7CiAKICAgICBzaXplX3QgcGFyYWdy
YXBoTG9jYXRpb247CiAgICAgc2l6ZV90IHBhcmFncmFwaExlbmd0aDsKLSAgICBUZXh0SXRlcmF0
b3I6OmdldExvY2F0aW9uQW5kTGVuZ3RoRnJvbVJhbmdlKCZzY29wZSwgcGFyYWdyYXBoLnBhcmFn
cmFwaFJhbmdlKCkuZ2V0KCksIHBhcmFncmFwaExvY2F0aW9uLCBwYXJhZ3JhcGhMZW5ndGgpOwor
ICAgIFRleHRJdGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UoJnNjb3BlLCAm
cGFyYWdyYXBoLnBhcmFncmFwaFJhbmdlKCksIHBhcmFncmFwaExvY2F0aW9uLCBwYXJhZ3JhcGhM
ZW5ndGgpOwogCiAgICAgYXBwbHlDb21tYW5kKFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmNy
ZWF0ZShyYW5nZVRvUmVwbGFjZSwgcmVwbGFjZW1lbnQpKTsKIApAQCAtMjUxMywxNyArMjUxMywx
NyBAQCB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IoUGFzc1JlZlB0cjxTcGVsbENoZWNr
UmVxdWVzdD4gcmVxdWVzdCwgY29uc3QgVmVjdAogICAgICAgICBpZiAoc2hvdWxkTWFya1NwZWxs
aW5nICYmICFzaG91bGRTaG93Q29ycmVjdGlvblBhbmVsICYmIHJlc3VsdFR5cGUgPT0gVGV4dENo
ZWNraW5nVHlwZVNwZWxsaW5nCiAgICAgICAgICAgICAmJiByZXN1bHRMb2NhdGlvbiA+PSBwYXJh
Z3JhcGguY2hlY2tpbmdTdGFydCgpICYmIHJlc3VsdEVuZExvY2F0aW9uIDw9IHNwZWxsaW5nUmFu
Z2VFbmRPZmZzZXQgJiYgIXJlc3VsdEVuZHNBdEFtYmlndW91c0JvdW5kYXJ5KSB7CiAgICAgICAg
ICAgICBBU1NFUlQocmVzdWx0TGVuZ3RoID4gMCAmJiByZXN1bHRMb2NhdGlvbiA+PSAwKTsKLSAg
ICAgICAgICAgIFJlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5nZSA9IHBhcmFncmFwaC5zdWJy
YW5nZShyZXN1bHRMb2NhdGlvbiwgcmVzdWx0TGVuZ3RoKTsKKyAgICAgICAgICAgIGF1dG8gbWlz
c3BlbGxpbmdSYW5nZSA9IHBhcmFncmFwaC5zdWJyYW5nZShyZXN1bHRMb2NhdGlvbiwgcmVzdWx0
TGVuZ3RoKTsKICAgICAgICAgICAgIGlmICghbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5p
c1NwZWxsaW5nTWFya2VyQWxsb3dlZChtaXNzcGVsbGluZ1JhbmdlKSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIG1pc3NwZWxsaW5nUmFuZ2UtPnN0YXJ0Q29udGFpbmVy
KCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCks
IERvY3VtZW50TWFya2VyOjpTcGVsbGluZywgcmVwbGFjZW1lbnQpOworICAgICAgICAgICAgbWlz
c3BlbGxpbmdSYW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRN
YXJrZXIobWlzc3BlbGxpbmdSYW5nZS5wdHIoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nLCBy
ZXBsYWNlbWVudCk7CiAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkTWFya0dyYW1tYXIgJiYgcmVz
dWx0VHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hciAmJiBwYXJhZ3JhcGguY2hlY2tpbmdS
YW5nZUNvdmVycyhyZXN1bHRMb2NhdGlvbiwgcmVzdWx0TGVuZ3RoKSkgewogICAgICAgICAgICAg
QVNTRVJUKHJlc3VsdExlbmd0aCA+IDAgJiYgcmVzdWx0TG9jYXRpb24gPj0gMCk7CiAgICAgICAg
ICAgICBmb3IgKGF1dG8mIGRldGFpbCA6IHJlc3VsdHNbaV0uZGV0YWlscykgewogICAgICAgICAg
ICAgICAgIEFTU0VSVChkZXRhaWwubGVuZ3RoID4gMCAmJiBkZXRhaWwubG9jYXRpb24gPj0gMCk7
CiAgICAgICAgICAgICAgICAgaWYgKHBhcmFncmFwaC5jaGVja2luZ1JhbmdlQ292ZXJzKHJlc3Vs
dExvY2F0aW9uICsgZGV0YWlsLmxvY2F0aW9uLCBkZXRhaWwubGVuZ3RoKSkgewotICAgICAgICAg
ICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IGJhZEdyYW1tYXJSYW5nZSA9IHBhcmFncmFwaC5zdWJy
YW5nZShyZXN1bHRMb2NhdGlvbiArIGRldGFpbC5sb2NhdGlvbiwgZGV0YWlsLmxlbmd0aCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJhZEdyYW1tYXJSYW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1
bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoYmFkR3JhbW1hclJhbmdlLmdldCgpLCBEb2N1bWVu
dE1hcmtlcjo6R3JhbW1hciwgZGV0YWlsLnVzZXJEZXNjcmlwdGlvbik7CisgICAgICAgICAgICAg
ICAgICAgIGF1dG8gYmFkR3JhbW1hclJhbmdlID0gcGFyYWdyYXBoLnN1YnJhbmdlKHJlc3VsdExv
Y2F0aW9uICsgZGV0YWlsLmxvY2F0aW9uLCBkZXRhaWwubGVuZ3RoKTsKKyAgICAgICAgICAgICAg
ICAgICAgYmFkR3JhbW1hclJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2Vy
cygpLmFkZE1hcmtlcihiYWRHcmFtbWFyUmFuZ2UucHRyKCksIERvY3VtZW50TWFya2VyOjpHcmFt
bWFyLCBkZXRhaWwudXNlckRlc2NyaXB0aW9uKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0RW5kTG9jYXRpb24gPD0gc3BlbGxpbmdS
YW5nZUVuZE9mZnNldCAmJiByZXN1bHRFbmRMb2NhdGlvbiA+PSBwYXJhZ3JhcGguY2hlY2tpbmdT
dGFydCgpCkBAIC0yNTQwLDcgKzI1NDAsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VG
b3IoUGFzc1JlZlB0cjxTcGVsbENoZWNrUmVxdWVzdD4gcmVxdWVzdCwgY29uc3QgVmVjdAogICAg
ICAgICAgICAgLy8gMi4gVGhlIHJlc3VsdCBkb2Vzbid0IGVuZCBhdCBhbiBhbWJpZ3VvdXMgYm91
bmRhcnkuCiAgICAgICAgICAgICAvLyAgICAoRklYTUU6IHRoaXMgaXMgcmVxdWlyZWQgdW50aWwg
Njg1MzAyNyBpcyBmaXhlZCBhbmQgdGV4dCBjaGVja2luZyBjYW4gZG8gdGhpcyBmb3IgdXMKICAg
ICAgICAgICAgIGJvb2wgZG9SZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50Lmxlbmd0aCgpID4gMCAm
JiAhcmVzdWx0RW5kc0F0QW1iaWd1b3VzQm91bmRhcnk7Ci0gICAgICAgICAgICBSZWZQdHI8UmFu
Z2U+IHJhbmdlVG9SZXBsYWNlID0gcGFyYWdyYXBoLnN1YnJhbmdlKHJlc3VsdExvY2F0aW9uLCBy
ZXN1bHRMZW5ndGgpOworICAgICAgICAgICAgYXV0byByYW5nZVRvUmVwbGFjZSA9IHBhcmFncmFw
aC5zdWJyYW5nZShyZXN1bHRMb2NhdGlvbiwgcmVzdWx0TGVuZ3RoKTsKIAogICAgICAgICAgICAg
Ly8gYWRkaW5nIGxpbmtzIHNob3VsZCBiZSBkb25lIG9ubHkgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhl
eSBhcmUgdHlwZWQKICAgICAgICAgICAgIGlmIChyZXN1bHRUeXBlID09IFRleHRDaGVja2luZ1R5
cGVMaW5rICYmIHNlbGVjdGlvbk9mZnNldCAhPSByZXN1bHRFbmRMb2NhdGlvbiArIDEpCkBAIC0y
NTQ5LDggKzI1NDksOCBAQCB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IoUGFzc1JlZlB0
cjxTcGVsbENoZWNrUmVxdWVzdD4gcmVxdWVzdCwgY29uc3QgVmVjdAogICAgICAgICAgICAgaWYg
KCEoc2hvdWxkUGVyZm9ybVJlcGxhY2VtZW50IHx8IHNob3VsZENoZWNrRm9yQ29ycmVjdGlvbiB8
fCBzaG91bGRNYXJrTGluaykgfHwgIWRvUmVwbGFjZW1lbnQpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICAgICAgICAgIFN0cmluZyByZXBsYWNlZFN0cmluZyA9IHBsYWluVGV4dChy
YW5nZVRvUmVwbGFjZS5nZXQoKSk7Ci0gICAgICAgICAgICBjb25zdCBib29sIGV4aXN0aW5nTWFy
a2Vyc1Blcm1pdFJlcGxhY2VtZW50ID0gbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5wcm9j
ZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KCZyZXN1bHRzW2ldLCByYW5nZVRv
UmVwbGFjZS5nZXQoKSwgcmVwbGFjZWRTdHJpbmcpOworICAgICAgICAgICAgU3RyaW5nIHJlcGxh
Y2VkU3RyaW5nID0gcGxhaW5UZXh0KHJhbmdlVG9SZXBsYWNlLnB0cigpKTsKKyAgICAgICAgICAg
IGNvbnN0IGJvb2wgZXhpc3RpbmdNYXJrZXJzUGVybWl0UmVwbGFjZW1lbnQgPSBtX2FsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXItPnByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlSZXN1
bHQocmVzdWx0c1tpXSwgcmFuZ2VUb1JlcGxhY2UsIHJlcGxhY2VkU3RyaW5nKTsKICAgICAgICAg
ICAgIGlmICghZXhpc3RpbmdNYXJrZXJzUGVybWl0UmVwbGFjZW1lbnQpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAKQEAgLTI1NjQsNyArMjU2NCw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5k
UmVwbGFjZUZvcihQYXNzUmVmUHRyPFNwZWxsQ2hlY2tSZXF1ZXN0PiByZXF1ZXN0LCBjb25zdCBW
ZWN0CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uVG9SZXBsYWNlKCpyYW5nZVRvUmVwbGFjZSwg
RE9XTlNUUkVBTSk7CisgICAgICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvblRvUmVw
bGFjZShyYW5nZVRvUmVwbGFjZSwgRE9XTlNUUkVBTSk7CiAgICAgICAgICAgICBpZiAoc2VsZWN0
aW9uVG9SZXBsYWNlICE9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpIHsKICAgICAg
ICAgICAgICAgICBpZiAoIW1fZnJhbWUuc2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9u
KHNlbGVjdGlvblRvUmVwbGFjZSkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAt
MjU3Niw3ICsyNTc2LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKFBhc3NSZWZQ
dHI8U3BlbGxDaGVja1JlcXVlc3Q+IHJlcXVlc3QsIGNvbnN0IFZlY3QKICAgICAgICAgICAgICAg
ICByZXN0b3JlU2VsZWN0aW9uQWZ0ZXJDaGFuZ2UgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBp
ZiAoY2FuRWRpdFJpY2hseSgpKQogICAgICAgICAgICAgICAgICAgICBhcHBseUNvbW1hbmQoQ3Jl
YXRlTGlua0NvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCByZXBsYWNlbWVudCkpOwotICAgICAg
ICAgICAgfSBlbHNlIGlmIChjYW5FZGl0KCkgJiYgc2hvdWxkSW5zZXJ0VGV4dChyZXBsYWNlbWVu
dCwgcmFuZ2VUb1JlcGxhY2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKSB7Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKGNhbkVkaXQoKSAmJiBzaG91bGRJbnNlcnRUZXh0KHJlcGxh
Y2VtZW50LCByYW5nZVRvUmVwbGFjZS5wdHIoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkp
IHsKICAgICAgICAgICAgICAgICBjb3JyZWN0U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0Q2hl
Y2tpbmdQYXJhZ3JhcGgocGFyYWdyYXBoLCByYW5nZVRvUmVwbGFjZSwgcmVwbGFjZW1lbnQsIHJl
c3VsdExvY2F0aW9uLCByZXN1bHRMZW5ndGgpOwogCiAgICAgICAgICAgICAgICAgaWYgKEFYT2Jq
ZWN0Q2FjaGUqIGNhY2hlID0gZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkgewpA
QCAtMjU5NCwxMSArMjU5NCwxMSBAQCB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IoUGFz
c1JlZlB0cjxTcGVsbENoZWNrUmVxdWVzdD4gcmVxdWVzdCwgY29uc3QgVmVjdAogICAgICAgICAg
ICAgICAgICAgICBzZWxlY3Rpb25PZmZzZXQgKz0gcmVwbGFjZW1lbnQubGVuZ3RoKCkgLSByZXN1
bHRMZW5ndGg7CiAKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0VHlwZSA9PSBUZXh0Q2hlY2tp
bmdUeXBlQ29ycmVjdGlvbikgewotICAgICAgICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHJl
cGxhY2VtZW50UmFuZ2UgPSBwYXJhZ3JhcGguc3VicmFuZ2UocmVzdWx0TG9jYXRpb24sIHJlcGxh
Y2VtZW50Lmxlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyLT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVz
cG9uc2U6OkFjY2VwdGVkLCByZXBsYWNlZFN0cmluZywgcmVwbGFjZW1lbnRSYW5nZSk7CisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gcmVwbGFjZW1lbnRSYW5nZSA9IHBhcmFncmFwaC5zdWJyYW5n
ZShyZXN1bHRMb2NhdGlvbiwgcmVwbGFjZW1lbnQubGVuZ3RoKCkpOworICAgICAgICAgICAgICAg
ICAgICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVz
cG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZTo6QWNjZXB0ZWQsIHJlcGxhY2VkU3RyaW5nLCBy
ZXBsYWNlbWVudFJhbmdlLnB0cigpKTsKIAogICAgICAgICAgICAgICAgICAgICAvLyBBZGQgYSBt
YXJrZXIgc28gdGhhdCBjb3JyZWN0aW9ucyBjYW4gZWFzaWx5IGJlIHVuZG9uZSBhbmQgd29uJ3Qg
YmUgcmUtY29ycmVjdGVkLgotICAgICAgICAgICAgICAgICAgICBtX2FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXItPm1hcmtDb3JyZWN0aW9uKFdURk1vdmUocmVwbGFjZW1lbnRSYW5nZSksIHJlcGxh
Y2VkU3RyaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyLT5tYXJrQ29ycmVjdGlvbihyZXBsYWNlbWVudFJhbmdlLCByZXBsYWNlZFN0cmluZyk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yNjA5LDcgKzI2
MDksNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IoUGFzc1JlZlB0cjxTcGVsbENo
ZWNrUmVxdWVzdD4gcmVxdWVzdCwgY29uc3QgVmVjdAogICAgICAgICAvLyBSZXN0b3JlIHRoZSBj
YXJldCBwb3NpdGlvbiBpZiB3ZSBoYXZlIG1hZGUgYW55IHJlcGxhY2VtZW50cwogICAgICAgICBl
eHRlbmRlZFBhcmFncmFwaC5leHBhbmRSYW5nZVRvTmV4dEVuZCgpOwogICAgICAgICBpZiAocmVz
dG9yZVNlbGVjdGlvbkFmdGVyQ2hhbmdlICYmIHNlbGVjdGlvbk9mZnNldCA+PSAwICYmIHNlbGVj
dGlvbk9mZnNldCA8PSBleHRlbmRlZFBhcmFncmFwaC5yYW5nZUxlbmd0aCgpKSB7Ci0gICAgICAg
ICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvblJhbmdlID0gZXh0ZW5kZWRQYXJhZ3JhcGguc3Vi
cmFuZ2UoMCwgc2VsZWN0aW9uT2Zmc2V0KTsKKyAgICAgICAgICAgIGF1dG8gc2VsZWN0aW9uUmFu
Z2UgPSBleHRlbmRlZFBhcmFncmFwaC5zdWJyYW5nZSgwLCBzZWxlY3Rpb25PZmZzZXQpOwogICAg
ICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5tb3ZlVG8oc2VsZWN0aW9uUmFuZ2UtPmVuZFBv
c2l0aW9uKCksIERPV05TVFJFQU0pOwogICAgICAgICAgICAgaWYgKGFkanVzdFNlbGVjdGlvbkZv
clBhcmFncmFwaEJvdW5kYXJpZXMpCiAgICAgICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24o
KS5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJk
LCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CkBAIC0yNjMzLDEyICsyNjMzLDEyIEBAIHZvaWQgRWRp
dG9yOjpjaGFuZ2VCYWNrVG9SZXBsYWNlZFN0cmluZyhjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3Ry
aW5nKQogICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dChyZXBsYWNlZFN0cmluZywgc2VsZWN0aW9u
LmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAgICAgIHJldHVybjsKICAg
ICAKLSAgICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPnJlY29yZEF1dG9jb3JyZWN0aW9u
UmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZTo6UmV2ZXJ0ZWQsIHJlcGxhY2VkU3RyaW5n
LCBzZWxlY3Rpb24pOworICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVjb3JkQXV0
b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlOjpSZXZlcnRlZCwgcmVw
bGFjZWRTdHJpbmcsIHNlbGVjdGlvbi5nZXQoKSk7CiAgICAgVGV4dENoZWNraW5nUGFyYWdyYXBo
IHBhcmFncmFwaChzZWxlY3Rpb24pOwogICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChyZXBs
YWNlZFN0cmluZywgZmFsc2UsIGZhbHNlLCBFZGl0QWN0aW9uSW5zZXJ0KTsKLSAgICBSZWZQdHI8
UmFuZ2U+IGNoYW5nZWRSYW5nZSA9IHBhcmFncmFwaC5zdWJyYW5nZShwYXJhZ3JhcGguY2hlY2tp
bmdTdGFydCgpLCByZXBsYWNlZFN0cmluZy5sZW5ndGgoKSk7Ci0gICAgY2hhbmdlZFJhbmdlLT5z
dGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihjaGFuZ2VkUmFu
Z2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCwgU3RyaW5nKCkpOwotICAgIG1f
YWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+bWFya1JldmVyc2VkKGNoYW5nZWRSYW5nZS5nZXQo
KSk7CisgICAgYXV0byBjaGFuZ2VkUmFuZ2UgPSBwYXJhZ3JhcGguc3VicmFuZ2UocGFyYWdyYXBo
LmNoZWNraW5nU3RhcnQoKSwgcmVwbGFjZWRTdHJpbmcubGVuZ3RoKCkpOworICAgIGNoYW5nZWRS
YW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoY2hh
bmdlZFJhbmdlLnB0cigpLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQsIFN0cmluZygpKTsK
KyAgICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPm1hcmtSZXZlcnNlZChjaGFuZ2VkUmFu
Z2UpOwogI2Vsc2UKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICBVTlVTRURfUEFSQU0o
cmVwbGFjZWRTdHJpbmcpOwpAQCAtMjczNywxOCArMjczNywxOCBAQCB2b2lkIEVkaXRvcjo6dXBk
YXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoYm9vbCBkb05vdFJlbW92ZUlmU2Vs
ZWN0aW9uQQogICAgIC8vIGdhcmRlIiwgd2Ugd2lsbCBoYXZlIENvcnJlY3Rpb25JbmRpY2F0b3Ig
bWFya2VyIG9uIGJvdGggd29yZHMgYW5kIG9uIHRoZSB3aGl0ZXNwYWNlIGJldHdlZW4gdGhlbS4g
SWYgd2UgdGhlbiBlZGl0IGdhcmRlLAogICAgIC8vIHdlIHdvdWxkIGxpa2UgdG8gcmVtb3ZlIHRo
ZSBtYXJrZXIgZnJvbSB3b3JkICJhdmFudCIgYW5kIHdoaXRlc3BhY2UgYXMgd2VsbC4gU28gd2Ug
bmVlZCB0byBnZXQgdGhlIGNvbnRpbm91cyByYW5nZSBvZgogICAgIC8vIG9mIG1hcmtlciB0aGF0
IGNvbnRhaW5zIHRoZSB3b3JkIGluIHF1ZXN0aW9uLCBhbmQgcmVtb3ZlIG1hcmtlciBvbiB0aGF0
IHdob2xlIHJhbmdlLgotICAgIFJlZlB0cjxSYW5nZT4gd29yZFJhbmdlID0gUmFuZ2U6OmNyZWF0
ZShkb2N1bWVudCgpLCBzdGFydE9mRmlyc3RXb3JkLmRlZXBFcXVpdmFsZW50KCksIGVuZE9mTGFz
dFdvcmQuZGVlcEVxdWl2YWxlbnQoKSk7CisgICAgYXV0byB3b3JkUmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKGRvY3VtZW50KCksIHN0YXJ0T2ZGaXJzdFdvcmQuZGVlcEVxdWl2YWxlbnQoKSwgZW5kT2ZM
YXN0V29yZC5kZWVwRXF1aXZhbGVudCgpKTsKIAotICAgIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50
TWFya2VyKj4gbWFya2VycyA9IGRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNJblJhbmdlKHdv
cmRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlcyk7Cisg
ICAgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gZG9jdW1lbnQoKS5t
YXJrZXJzKCkubWFya2Vyc0luUmFuZ2Uod29yZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6RGljdGF0
aW9uQWx0ZXJuYXRpdmVzKTsKICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IG1hcmtlcnMpCiAgICAg
ICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRp
dmVzRm9yTWFya2VyKCptYXJrZXIpOwogCiAjaWYgUExBVEZPUk0oSU9TKQotICAgIGRvY3VtZW50
KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMod29yZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtl
cjo6U3BlbGxpbmcgfCBEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlvbkluZGljYXRvciB8IERvY3Vt
ZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uIHwgRG9jdW1lbnRNYXJrZXI6OkRpY3Rh
dGlvbkFsdGVybmF0aXZlcyB8IERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25QaHJhc2VXaXRoQWx0
ZXJuYXRpdmVzLCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJs
YXBwaW5nTWFya2VyKTsKKyAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKHdv
cmRSYW5nZS5wdHIoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nIHwgRG9jdW1lbnRNYXJrZXI6
OkNvcnJlY3Rpb25JbmRpY2F0b3IgfCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1w
dGlvbiB8IERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMgfCBEb2N1bWVudE1h
cmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcywgRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CiAjZWxzZQotICAgIGRv
Y3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMod29yZFJhbmdlLmdldCgpLCBEb2N1bWVu
dE1hcmtlcjo6U3BlbGxpbmcgfCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hciB8IERvY3VtZW50TWFy
a2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yIHwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdF
eGVtcHRpb24gfCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzLCBEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKKyAg
ICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKHdvcmRSYW5nZS5wdHIoKSwgRG9j
dW1lbnRNYXJrZXI6OlNwZWxsaW5nIHwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIgfCBEb2N1bWVu
dE1hcmtlcjo6Q29ycmVjdGlvbkluZGljYXRvciB8IERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNr
aW5nRXhlbXB0aW9uIHwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlcywgRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7
CiAjZW5kaWYKLSAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5jbGVhckRlc2NyaXB0aW9uT25NYXJr
ZXJzSW50ZXJzZWN0aW5nUmFuZ2Uod29yZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6UmVw
bGFjZW1lbnQpOworICAgIGRvY3VtZW50KCkubWFya2VycygpLmNsZWFyRGVzY3JpcHRpb25Pbk1h
cmtlcnNJbnRlcnNlY3RpbmdSYW5nZSh3b3JkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZXBsYWNl
bWVudCk7CiB9CiAKIHZvaWQgRWRpdG9yOjpkZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9u
KGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFN0cmluZykK
QEAgLTI3NTYsMTcgKzI3NTYsMTcgQEAgdm9pZCBFZGl0b3I6OmRlbGV0ZWRBdXRvY29ycmVjdGlv
bkF0UG9zaXRpb24oY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBTdHIKICAgICBtX2Fs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXItPmRlbGV0ZWRBdXRvY29ycmVjdGlvbkF0UG9zaXRpb24o
cG9zaXRpb24sIG9yaWdpbmFsU3RyaW5nKTsKIH0KIAotUGFzc1JlZlB0cjxSYW5nZT4gRWRpdG9y
OjpyYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCkKK1JlZlB0cjxSYW5n
ZT4gRWRpdG9yOjpyYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCkKIHsK
ICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLmRvY3VtZW50QXRQb2ludCh3aW5kb3dQ
b2ludCk7CiAgICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIAogICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgp
OwogICAgIEFTU0VSVChmcmFtZSk7CiAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBmcmFtZS0+
dmlldygpOwogICAgIGlmICghZnJhbWVWaWV3KQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgSW50UG9pbnQgZnJhbWVQb2ludCA9IGZyYW1lVmlldy0+d2lu
ZG93VG9Db250ZW50cyh3aW5kb3dQb2ludCk7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rp
b24oZnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KGZyYW1lUG9pbnQpKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmgKaW5kZXggODc2NzIwZjgxNWIxY2Y3MDIzOTFmNTI2MGUxNGNkOGEyYWE4
ZTIzZC4uZjY5MDQ1NjRjMjg5ZDY0MDQ4ZmUzYTE0MWRmODUxNGE3N2RjMTUyYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5oCkBAIC0xNzMsOCArMTczLDggQEAgcHVibGljOgogICAgIAogICAgIFRy
aVN0YXRlIHNlbGVjdGlvblVub3JkZXJlZExpc3RTdGF0ZSgpIGNvbnN0OwogICAgIFRyaVN0YXRl
IHNlbGVjdGlvbk9yZGVyZWRMaXN0U3RhdGUoKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBQ
YXNzUmVmUHRyPE5vZGU+IGluc2VydE9yZGVyZWRMaXN0KCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
UGFzc1JlZlB0cjxOb2RlPiBpbnNlcnRVbm9yZGVyZWRMaXN0KCk7CisgICAgV0VCQ09SRV9FWFBP
UlQgUmVmUHRyPE5vZGU+IGluc2VydE9yZGVyZWRMaXN0KCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
UmVmUHRyPE5vZGU+IGluc2VydFVub3JkZXJlZExpc3QoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBi
b29sIGNhbkluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQg
Ym9vbCBjYW5EZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCgpOwogICAgIFdFQkNPUkVfRVhQT1JU
IFJlZlB0cjxOb2RlPiBpbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCgpOwpAQCAtMzM3LDcgKzMz
Nyw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldElnbm9yZVNlbGVjdGlv
bkNoYW5nZXMoYm9vbCwgUmV2ZWFsU2VsZWN0aW9uIHNob3VsZFJldmVhbEV4aXN0aW5nU2VsZWN0
aW9uID0gUmV2ZWFsU2VsZWN0aW9uOjpZZXMpOwogICAgIGJvb2wgaWdub3JlU2VsZWN0aW9uQ2hh
bmdlcygpIGNvbnN0IHsgcmV0dXJuIG1faWdub3JlU2VsZWN0aW9uQ2hhbmdlczsgfQogCi0gICAg
V0VCQ09SRV9FWFBPUlQgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VGb3JQb2ludChjb25zdCBJbnRQ
b2ludCYgd2luZG93UG9pbnQpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gcmFu
Z2VGb3JQb2ludChjb25zdCBJbnRQb2ludCYgd2luZG93UG9pbnQpOwogCiAgICAgdm9pZCBjbGVh
cigpOwogCkBAIC00MTEsNyArNDExLDcgQEAgcHVibGljOgogICAgIHZvaWQgdGV4dERpZENoYW5n
ZUluVGV4dEFyZWEoRWxlbWVudCopOwogICAgIFdFQkNPUkVfRVhQT1JUIFdyaXRpbmdEaXJlY3Rp
b24gYmFzZVdyaXRpbmdEaXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFydCgpIGNvbnN0OwogCi0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCByZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KFBhc3NSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4sIGJvb2wgc2VsZWN0UmVwbGFjZW1lbnQsIGJvb2wgc21hcnRS
ZXBsYWNlLCBib29sIG1hdGNoU3R5bGUsIEVkaXRBY3Rpb24gPSBFZGl0QWN0aW9uSW5zZXJ0LCBN
YWlsQmxvY2txdW90ZUhhbmRsaW5nID0gTWFpbEJsb2NrcXVvdGVIYW5kbGluZzo6UmVzcGVjdEJs
b2NrcXVvdGUpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVwbGFjZVNlbGVjdGlvbldpdGhG
cmFnbWVudChEb2N1bWVudEZyYWdtZW50JiwgYm9vbCBzZWxlY3RSZXBsYWNlbWVudCwgYm9vbCBz
bWFydFJlcGxhY2UsIGJvb2wgbWF0Y2hTdHlsZSwgRWRpdEFjdGlvbiA9IEVkaXRBY3Rpb25JbnNl
cnQsIE1haWxCbG9ja3F1b3RlSGFuZGxpbmcgPSBNYWlsQmxvY2txdW90ZUhhbmRsaW5nOjpSZXNw
ZWN0QmxvY2txdW90ZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXBsYWNlU2VsZWN0aW9u
V2l0aFRleHQoY29uc3QgU3RyaW5nJiwgYm9vbCBzZWxlY3RSZXBsYWNlbWVudCwgYm9vbCBzbWFy
dFJlcGxhY2UsIEVkaXRBY3Rpb24gPSBFZGl0QWN0aW9uSW5zZXJ0KTsKICAgICBXRUJDT1JFX0VY
UE9SVCBib29sIHNlbGVjdGlvblN0YXJ0SGFzTWFya2VyRm9yKERvY3VtZW50TWFya2VyOjpNYXJr
ZXJUeXBlLCBpbnQgZnJvbSwgaW50IGxlbmd0aCkgY29uc3Q7CiAgICAgdm9pZCB1cGRhdGVNYXJr
ZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhib29sIG9ubHlIYW5kbGVXb3Jkc0NvbnRhaW5p
bmdTZWxlY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Nb2RpZnlT
ZWxlY3Rpb25MaXN0TGV2ZWwuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Nb2RpZnlTZWxl
Y3Rpb25MaXN0TGV2ZWwuY3BwCmluZGV4IDk2MjU1ZTliNjljOGFmNTEyOTgwZDJkYTI3MjMzNGVm
YWU4ZDUxNzEuLjUyZDIxYWY0ZTcyYzRmODlkYTgzMjg0NTdlZDdiNDk2NmQ0NDc4MjQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5j
cHAKQEAgLTIxOSwxNyArMjE5LDE3IEBAIFJlZlB0cjxOb2RlPiBJbmNyZWFzZVNlbGVjdGlvbkxp
c3RMZXZlbENvbW1hbmQ6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKERvY3VtCiAgICAgcmV0
dXJuIFdURk1vdmUoY29tbWFuZC0+bV9saXN0RWxlbWVudCk7CiB9CiAKLVBhc3NSZWZQdHI8Tm9k
ZT4gSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kOjppbmNyZWFzZVNlbGVjdGlvbkxp
c3RMZXZlbChEb2N1bWVudCogZG9jdW1lbnQpCitSZWZQdHI8Tm9kZT4gSW5jcmVhc2VTZWxlY3Rp
b25MaXN0TGV2ZWxDb21tYW5kOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbChEb2N1bWVudCog
ZG9jdW1lbnQpCiB7CiAgICAgcmV0dXJuIGluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKGRvY3Vt
ZW50LCBJbmhlcml0ZWRMaXN0VHlwZSk7CiB9CiAKLVBhc3NSZWZQdHI8Tm9kZT4gSW5jcmVhc2VT
ZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbE9yZGVy
ZWQoRG9jdW1lbnQqIGRvY3VtZW50KQorUmVmUHRyPE5vZGU+IEluY3JlYXNlU2VsZWN0aW9uTGlz
dExldmVsQ29tbWFuZDo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxPcmRlcmVkKERvY3VtZW50
KiBkb2N1bWVudCkKIHsKICAgICByZXR1cm4gaW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoZG9j
dW1lbnQsIE9yZGVyZWRMaXN0KTsKIH0KIAotUGFzc1JlZlB0cjxOb2RlPiBJbmNyZWFzZVNlbGVj
dGlvbkxpc3RMZXZlbENvbW1hbmQ6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsVW5vcmRlcmVk
KERvY3VtZW50KiBkb2N1bWVudCkKK1JlZlB0cjxOb2RlPiBJbmNyZWFzZVNlbGVjdGlvbkxpc3RM
ZXZlbENvbW1hbmQ6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsVW5vcmRlcmVkKERvY3VtZW50
KiBkb2N1bWVudCkKIHsKICAgICByZXR1cm4gaW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoZG9j
dW1lbnQsIFVub3JkZXJlZExpc3QpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9Nb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
TW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmgKaW5kZXggY2MwNmNmNGRlODg5OWQyOWFhNWYwYzYz
YjZkNzBlOTllNmZjYzM5Zi4uYTJjZmQzOTQwNzk0MmViMWU4YTAwOWU2MDQ1NDFiYWZhMTYzNWQy
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Nb2RpZnlTZWxlY3Rpb25MaXN0
TGV2ZWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01vZGlmeVNlbGVjdGlvbkxpc3RM
ZXZlbC5oCkBAIC00OCw5ICs0OCw5IEBAIHByaXZhdGU6CiBjbGFzcyBJbmNyZWFzZVNlbGVjdGlv
bkxpc3RMZXZlbENvbW1hbmQgOiBwdWJsaWMgTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsQ29tbWFu
ZCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgY2FuSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2
ZWwoRG9jdW1lbnQqKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxOb2RlPiBpbmNyZWFzZVNlbGVj
dGlvbkxpc3RMZXZlbChEb2N1bWVudCopOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE5vZGU+IGlu
Y3JlYXNlU2VsZWN0aW9uTGlzdExldmVsT3JkZXJlZChEb2N1bWVudCopOwotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPE5vZGU+IGluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsVW5vcmRlcmVkKERvY3Vt
ZW50Kik7CisgICAgc3RhdGljIFJlZlB0cjxOb2RlPiBpbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZl
bChEb2N1bWVudCopOworICAgIHN0YXRpYyBSZWZQdHI8Tm9kZT4gaW5jcmVhc2VTZWxlY3Rpb25M
aXN0TGV2ZWxPcmRlcmVkKERvY3VtZW50Kik7CisgICAgc3RhdGljIFJlZlB0cjxOb2RlPiBpbmNy
ZWFzZVNlbGVjdGlvbkxpc3RMZXZlbFVub3JkZXJlZChEb2N1bWVudCopOwogCiBwcml2YXRlOgog
ICAgIGVudW0gVHlwZSB7IEluaGVyaXRlZExpc3RUeXBlLCBPcmRlcmVkTGlzdCwgVW5vcmRlcmVk
TGlzdCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCmluZGV4IDcwOWI0
NzJlYzcxNjhmYjVjNWI4ZDYyZmE3M2MxOTdiNjc5M2MxOTYuLjAxM2QxMzEwNDE1MGU3YTJjNDAz
Njg4YmYzYjA1ZDhmODhhYmExYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
U3BlbGxDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tl
ci5jcHAKQEAgLTE1OCw3ICsxNTgsNyBAQCBib29sIFNwZWxsQ2hlY2tlcjo6aXNDaGVja2FibGUo
UmFuZ2UqIHJhbmdlKSBjb25zdAogCiB2b2lkIFNwZWxsQ2hlY2tlcjo6cmVxdWVzdENoZWNraW5n
Rm9yKFBhc3NSZWZQdHI8U3BlbGxDaGVja1JlcXVlc3Q+IHJlcXVlc3QpCiB7Ci0gICAgaWYgKCFy
ZXF1ZXN0IHx8ICFjYW5DaGVja0FzeW5jaHJvbm91c2x5KHJlcXVlc3QtPnBhcmFncmFwaFJhbmdl
KCkuZ2V0KCkpKQorICAgIGlmICghcmVxdWVzdCB8fCAhY2FuQ2hlY2tBc3luY2hyb25vdXNseShy
ZXF1ZXN0LT5wYXJhZ3JhcGhSYW5nZSgpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJU
KHJlcXVlc3QtPmRhdGEoKS5zZXF1ZW5jZSgpID09IHVucmVxdWVzdGVkVGV4dENoZWNraW5nU2Vx
dWVuY2UpOwpAQCAtMjI5LDcgKzIyOSw3IEBAIHZvaWQgU3BlbGxDaGVja2VyOjpkaWRDaGVja1N1
Y2NlZWQoaW50IHNlcXVlbmNlLCBjb25zdCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0CiAgICAg
ICAgIGlmIChyZXF1ZXN0RGF0YS5tYXNrKCkgJiBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcikKICAg
ICAgICAgICAgIG1hcmtlcnMgfD0gRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXI7CiAgICAgICAgIGlm
IChtYXJrZXJzKQotICAgICAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCkucmVt
b3ZlTWFya2VycyhtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5jaGVja2luZ1JhbmdlKCkuZ2V0KCksIG1h
cmtlcnMpOworICAgICAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCkucmVtb3Zl
TWFya2VycyhtX3Byb2Nlc3NpbmdSZXF1ZXN0LT5jaGVja2luZ1JhbmdlKCksIG1hcmtlcnMpOwog
ICAgIH0KICAgICBkaWRDaGVjayhzZXF1ZW5jZSwgcmVzdWx0cyk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5oIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9TcGVsbENoZWNrZXIuaAppbmRleCAwNDlkMWM1MWYwNDJhMmNjZmVlNTkzYjQ3OWU5NjM1
MjA3MjY5ZGYyLi4wNmFhYjA1Zjc0ZjgzZjQxYmY2N2EzMWVjZWJjOGZlYjc5ZDAwNTE5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmgKQEAgLTQ3LDkgKzQ3LDkgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBSZWZQdHI8U3BlbGxDaGVja1JlcXVlc3Q+IGNyZWF0ZShUZXh0Q2hlY2tp
bmdUeXBlTWFzaywgVGV4dENoZWNraW5nUHJvY2Vzc1R5cGUsIFBhc3NSZWZQdHI8UmFuZ2U+IGNo
ZWNraW5nUmFuZ2UsIFBhc3NSZWZQdHI8UmFuZ2U+IHBhcmFncmFwaFJhbmdlKTsKICAgICB2aXJ0
dWFsIH5TcGVsbENoZWNrUmVxdWVzdCgpOwogCi0gICAgUGFzc1JlZlB0cjxSYW5nZT4gY2hlY2tp
bmdSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2hlY2tpbmdSYW5nZTsgfQotICAgIFBhc3NSZWZQ
dHI8UmFuZ2U+IHBhcmFncmFwaFJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJhZ3JhcGhSYW5n
ZTsgfQotICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gcm9vdEVkaXRhYmxlRWxlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fcm9vdEVkaXRhYmxlRWxlbWVudDsgfQorICAgIFJhbmdlKiBjaGVja2luZ1Jh
bmdlKCkgY29uc3QgeyByZXR1cm4gbV9jaGVja2luZ1JhbmdlLmdldCgpOyB9CisgICAgUmFuZ2Uq
IHBhcmFncmFwaFJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJhZ3JhcGhSYW5nZS5nZXQoKTsg
fQorICAgIEVsZW1lbnQqIHJvb3RFZGl0YWJsZUVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3Jv
b3RFZGl0YWJsZUVsZW1lbnQuZ2V0KCk7IH0KIAogICAgIHZvaWQgc2V0Q2hlY2tlckFuZFNlcXVl
bmNlKFNwZWxsQ2hlY2tlciosIGludCBzZXF1ZW5jZSk7CiAgICAgdm9pZCByZXF1ZXN0ZXJEZXN0
cm95ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVj
dGlvbkNvbW1hbmQuY3BwCmluZGV4IGM5YmYyYzA5OTc1YmVlZTQ4NDBiYjZmN2QzMzI4NzJlODZj
YmFiYzguLjMzNTdlMGEyNzZkYmUwOWM5Y2RmYTdiZTk1Nzk5MTI4ZTc2OTQ0ODAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNw
cApAQCAtODMsMzIgKzgzLDI5IEBAIHByaXZhdGU6CiB9OwogI2VuZGlmCiAKLVNwZWxsaW5nQ29y
cmVjdGlvbkNvbW1hbmQ6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQoUGFzc1JlZlB0cjxSYW5n
ZT4gcmFuZ2VUb0JlQ29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCi0gICAgOiBD
b21wb3NpdGVFZGl0Q29tbWFuZChyYW5nZVRvQmVDb3JyZWN0ZWQtPnN0YXJ0Q29udGFpbmVyKCku
ZG9jdW1lbnQoKSwgRWRpdEFjdGlvbkluc2VydFJlcGxhY2VtZW50KQorU3BlbGxpbmdDb3JyZWN0
aW9uQ29tbWFuZDo6U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZChSYW5nZSYgcmFuZ2VUb0JlQ29y
cmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCisgICAgOiBDb21wb3NpdGVFZGl0Q29t
bWFuZChyYW5nZVRvQmVDb3JyZWN0ZWQuc3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLCBFZGl0
QWN0aW9uSW5zZXJ0UmVwbGFjZW1lbnQpCiAgICAgLCBtX3JhbmdlVG9CZUNvcnJlY3RlZChyYW5n
ZVRvQmVDb3JyZWN0ZWQpCi0gICAgLCBtX3NlbGVjdGlvblRvQmVDb3JyZWN0ZWQoKm1fcmFuZ2VU
b0JlQ29ycmVjdGVkKQorICAgICwgbV9zZWxlY3Rpb25Ub0JlQ29ycmVjdGVkKG1fcmFuZ2VUb0Jl
Q29ycmVjdGVkKQogICAgICwgbV9jb3JyZWN0aW9uKGNvcnJlY3Rpb24pCiB7CiB9CiAKIGJvb2wg
U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6d2lsbEFwcGx5Q29tbWFuZCgpCiB7Ci0gICAgbV9j
b3JyZWN0aW9uRnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KCptX3JhbmdlVG9CZUNv
cnJlY3RlZCwgbV9jb3JyZWN0aW9uKTsKKyAgICBtX2NvcnJlY3Rpb25GcmFnbWVudCA9IGNyZWF0
ZUZyYWdtZW50RnJvbVRleHQobV9yYW5nZVRvQmVDb3JyZWN0ZWQsIG1fY29ycmVjdGlvbik7CiAg
ICAgcmV0dXJuIENvbXBvc2l0ZUVkaXRDb21tYW5kOjp3aWxsQXBwbHlDb21tYW5kKCk7CiB9CiAK
IHZvaWQgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiB7Ci0gICAgbV9jb3Jy
ZWN0ZWQgPSBwbGFpblRleHQobV9yYW5nZVRvQmVDb3JyZWN0ZWQuZ2V0KCkpOworICAgIG1fY29y
cmVjdGVkID0gcGxhaW5UZXh0KG1fcmFuZ2VUb0JlQ29ycmVjdGVkLnB0cigpKTsKICAgICBpZiAo
IW1fY29ycmVjdGVkLmxlbmd0aCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIWZyYW1l
KCkuc2VsZWN0aW9uKCkuc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG1fc2VsZWN0aW9uVG9CZUNvcnJl
Y3RlZCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghbV9yYW5nZVRvQmVDb3JyZWN0ZWQp
Ci0gICAgICAgIHJldHVybjsKLQogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFNldFNlbGVj
dGlvbkNvbW1hbmQ6OmNyZWF0ZShtX3NlbGVjdGlvblRvQmVDb3JyZWN0ZWQsIEZyYW1lU2VsZWN0
aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucygpIHwgRnJhbWVTZWxlY3Rpb246OlNwZWxs
Q29ycmVjdGlvblRyaWdnZXJlZCkpOwogI2lmIFVTRShBVVRPQ09SUkVDVElPTl9QQU5FTCkKICAg
ICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShTcGVsbGluZ0NvcnJlY3Rpb25SZWNvcmRVbmRvQ29t
bWFuZDo6Y3JlYXRlKGRvY3VtZW50KCksIG1fY29ycmVjdGVkLCBtX2NvcnJlY3Rpb24pKTsKQEAg
LTEyNyw3ICsxMjQsNyBAQCBTdHJpbmcgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6aW5wdXRF
dmVudERhdGEoKSBjb25zdAogCiBWZWN0b3I8UmVmUHRyPFN0YXRpY1JhbmdlPj4gU3BlbGxpbmdD
b3JyZWN0aW9uQ29tbWFuZDo6dGFyZ2V0UmFuZ2VzKCkgY29uc3QKIHsKLSAgICBSZWZQdHI8U3Rh
dGljUmFuZ2U+IHJhbmdlID0gU3RhdGljUmFuZ2U6OmNyZWF0ZUZyb21SYW5nZSgqbV9yYW5nZVRv
QmVDb3JyZWN0ZWQpOworICAgIFJlZlB0cjxTdGF0aWNSYW5nZT4gcmFuZ2UgPSBTdGF0aWNSYW5n
ZTo6Y3JlYXRlRnJvbVJhbmdlKG1fcmFuZ2VUb0JlQ29ycmVjdGVkKTsKICAgICByZXR1cm4geyAx
LCByYW5nZSB9OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxs
aW5nQ29ycmVjdGlvbkNvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdD
b3JyZWN0aW9uQ29tbWFuZC5oCmluZGV4IDZjNDM5YTdhNTg3NGZlYWJjYTQ3NDJhNmFiM2VjYjRj
ODc1ZmFmYTguLjViODFlZjIzNTZjOTlhNzMzZjRhM2UxODg3OGIwMDVmM2M5MDIyZDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5o
CkBAIC0zMiwxMiArMzIsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTcGVsbGlu
Z0NvcnJlY3Rpb25Db21tYW5kIDogcHVibGljIENvbXBvc2l0ZUVkaXRDb21tYW5kIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ+IGNyZWF0ZShQYXNz
UmVmUHRyPFJhbmdlPiByYW5nZVRvQmVDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlv
bikKKyAgICBzdGF0aWMgUmVmPFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ+IGNyZWF0ZShSYW5n
ZSYgcmFuZ2VUb0JlQ29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCiAgICAgewog
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kKHJh
bmdlVG9CZUNvcnJlY3RlZCwgY29ycmVjdGlvbikpOwogICAgIH0KIHByaXZhdGU6Ci0gICAgU3Bl
bGxpbmdDb3JyZWN0aW9uQ29tbWFuZChQYXNzUmVmUHRyPFJhbmdlPiByYW5nZVRvQmVDb3JyZWN0
ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbik7CisgICAgU3BlbGxpbmdDb3JyZWN0aW9uQ29t
bWFuZChSYW5nZSYgcmFuZ2VUb0JlQ29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24p
OwogICAgIGJvb2wgd2lsbEFwcGx5Q29tbWFuZCgpIGZpbmFsOwogICAgIHZvaWQgZG9BcHBseSgp
IG92ZXJyaWRlOwogICAgIGJvb2wgc2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3Io
KSBjb25zdCBvdmVycmlkZTsKQEAgLTQ2LDcgKzQ2LDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8
UmVmUHRyPFN0YXRpY1JhbmdlPj4gdGFyZ2V0UmFuZ2VzKCkgY29uc3QgZmluYWw7CiAgICAgUmVm
UHRyPERhdGFUcmFuc2Zlcj4gaW5wdXRFdmVudERhdGFUcmFuc2ZlcigpIGNvbnN0IGZpbmFsOwog
Ci0gICAgUmVmUHRyPFJhbmdlPiBtX3JhbmdlVG9CZUNvcnJlY3RlZDsKKyAgICBSZWY8UmFuZ2U+
IG1fcmFuZ2VUb0JlQ29ycmVjdGVkOwogICAgIFZpc2libGVTZWxlY3Rpb24gbV9zZWxlY3Rpb25U
b0JlQ29ycmVjdGVkOwogICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBtX2NvcnJlY3Rpb25G
cmFnbWVudDsKICAgICBTdHJpbmcgbV9jb3JyZWN0ZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1N1cnJvdW5kaW5nVGV4dC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
dXJyb3VuZGluZ1RleHQuaAppbmRleCBiZDZlMzY2NTA5MzI2NjA1ODcxOGQxMGM1NzcxM2NlN2Iz
YWEzOTgzLi4wYzYxMTAxNGZlODNhZWQxZTY0NTY5YTFhNTM4NWRmZjk5ODJkMDg4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1N1cnJvdW5kaW5nVGV4dC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvU3Vycm91bmRpbmdUZXh0LmgKQEAgLTQ1LDggKzQ1LDYgQEAgcHVi
bGljOgogICAgIFN0cmluZyBjb250ZW50KCkgY29uc3Q7CiAgICAgdW5zaWduZWQgcG9zaXRpb25P
ZmZzZXRJbkNvbnRlbnQoKSBjb25zdDsKIAotICAgIFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlRnJv
bUNvbnRlbnRPZmZzZXRzKHVuc2lnbmVkIHN0YXJ0T2Zmc2V0SW5Db250ZW50LCB1bnNpZ25lZCBl
bmRPZmZzZXRJbkNvbnRlbnQpOwotCiBwcml2YXRlOgogICAgIFJlZlB0cjxSYW5nZT4gbV9jb250
ZW50UmFuZ2U7CiAgICAgc2l6ZV90IG1fcG9zaXRpb25PZmZzZXRJbkNvbnRlbnQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKaW5kZXggMzc5ZDdkMjk5
ZTc2MDY3MmNiNTZhOTNhNjY4NDUwNGM5MzA5MGJiMy4uN2JkMDIxN2U5NTdjZDM3YjZlNzk2NGFk
NmU2YzA4MzM3M2M4MWM5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0
Q2hlY2tpbmdIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNr
aW5nSGVscGVyLmNwcApAQCAtMTQyLDcgKzE0Miw3IEBAIFRleHRDaGVja2luZ1BhcmFncmFwaDo6
flRleHRDaGVja2luZ1BhcmFncmFwaCgpCiB2b2lkIFRleHRDaGVja2luZ1BhcmFncmFwaDo6ZXhw
YW5kUmFuZ2VUb05leHRFbmQoKQogewogICAgIEFTU0VSVChtX2NoZWNraW5nUmFuZ2UpOwotICAg
IHNldEVuZChwYXJhZ3JhcGhSYW5nZSgpLmdldCgpLCBlbmRPZlBhcmFncmFwaChzdGFydE9mTmV4
dFBhcmFncmFwaChwYXJhZ3JhcGhSYW5nZSgpLT5zdGFydFBvc2l0aW9uKCkpKSk7CisgICAgc2V0
RW5kKCZwYXJhZ3JhcGhSYW5nZSgpLCBlbmRPZlBhcmFncmFwaChzdGFydE9mTmV4dFBhcmFncmFw
aChwYXJhZ3JhcGhSYW5nZSgpLnN0YXJ0UG9zaXRpb24oKSkpKTsKICAgICBpbnZhbGlkYXRlUGFy
YWdyYXBoUmFuZ2VWYWx1ZXMoKTsKIH0KIApAQCAtMTU2LDIxICsxNTYsMjEgQEAgdm9pZCBUZXh0
Q2hlY2tpbmdQYXJhZ3JhcGg6OmludmFsaWRhdGVQYXJhZ3JhcGhSYW5nZVZhbHVlcygpCiBpbnQg
VGV4dENoZWNraW5nUGFyYWdyYXBoOjpyYW5nZUxlbmd0aCgpIGNvbnN0CiB7CiAgICAgQVNTRVJU
KG1fY2hlY2tpbmdSYW5nZSk7Ci0gICAgcmV0dXJuIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgo
cGFyYWdyYXBoUmFuZ2UoKS5nZXQoKSk7CisgICAgcmV0dXJuIFRleHRJdGVyYXRvcjo6cmFuZ2VM
ZW5ndGgoJnBhcmFncmFwaFJhbmdlKCkpOwogfQogCi1QYXNzUmVmUHRyPFJhbmdlPiBUZXh0Q2hl
Y2tpbmdQYXJhZ3JhcGg6OnBhcmFncmFwaFJhbmdlKCkgY29uc3QKK1JhbmdlJiBUZXh0Q2hlY2tp
bmdQYXJhZ3JhcGg6OnBhcmFncmFwaFJhbmdlKCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9jaGVj
a2luZ1JhbmdlKTsKICAgICBpZiAoIW1fcGFyYWdyYXBoUmFuZ2UpCiAgICAgICAgIG1fcGFyYWdy
YXBoUmFuZ2UgPSBleHBhbmRUb1BhcmFncmFwaEJvdW5kYXJ5KG1fY2hlY2tpbmdSYW5nZSk7Ci0g
ICAgcmV0dXJuIG1fcGFyYWdyYXBoUmFuZ2U7CisgICAgcmV0dXJuICptX3BhcmFncmFwaFJhbmdl
OwogfQogCi1QYXNzUmVmUHRyPFJhbmdlPiBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OnN1YnJhbmdl
KGludCBjaGFyYWN0ZXJPZmZzZXQsIGludCBjaGFyYWN0ZXJDb3VudCkgY29uc3QKK1JlZjxSYW5n
ZT4gVGV4dENoZWNraW5nUGFyYWdyYXBoOjpzdWJyYW5nZShpbnQgY2hhcmFjdGVyT2Zmc2V0LCBp
bnQgY2hhcmFjdGVyQ291bnQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fY2hlY2tpbmdSYW5nZSk7
Ci0gICAgcmV0dXJuIFRleHRJdGVyYXRvcjo6c3VicmFuZ2UocGFyYWdyYXBoUmFuZ2UoKS5nZXQo
KSwgY2hhcmFjdGVyT2Zmc2V0LCBjaGFyYWN0ZXJDb3VudCk7CisgICAgcmV0dXJuIFRleHRJdGVy
YXRvcjo6c3VicmFuZ2UoJnBhcmFncmFwaFJhbmdlKCksIGNoYXJhY3Rlck9mZnNldCwgY2hhcmFj
dGVyQ291bnQpOwogfQogCiBFeGNlcHRpb25PcjxpbnQ+IFRleHRDaGVja2luZ1BhcmFncmFwaDo6
b2Zmc2V0VG8oY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKSBjb25zdApAQCAtMTc5LDcgKzE3OSw3
IEBAIEV4Y2VwdGlvbk9yPGludD4gVGV4dENoZWNraW5nUGFyYWdyYXBoOjpvZmZzZXRUbyhjb25z
dCBQb3NpdGlvbiYgcG9zaXRpb24pIGNvbnN0CiAgICAgaWYgKCFwb3NpdGlvbi5jb250YWluZXJO
b2RlKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3IgfTsKIAotICAgIGF1
dG8gcmFuZ2UgPSBvZmZzZXRBc1JhbmdlKCktPmNsb25lUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdl
ID0gb2Zmc2V0QXNSYW5nZSgpLmNsb25lUmFuZ2UoKTsKICAgICBhdXRvIHJlc3VsdCA9IHJhbmdl
LT5zZXRFbmQoKnBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKSwgcG9zaXRpb24uY29tcHV0ZU9mZnNl
dEluQ29udGFpbmVyTm9kZSgpKTsKICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKQEAgLTE5MywyMCArMTkzLDIw
IEBAIGJvb2wgVGV4dENoZWNraW5nUGFyYWdyYXBoOjppc0VtcHR5KCkgY29uc3QKICAgICByZXR1
cm4gY2hlY2tpbmdTdGFydCgpID49IGNoZWNraW5nRW5kKCkgfHwgdGV4dCgpLmlzRW1wdHkoKTsK
IH0KIAotUGFzc1JlZlB0cjxSYW5nZT4gVGV4dENoZWNraW5nUGFyYWdyYXBoOjpvZmZzZXRBc1Jh
bmdlKCkgY29uc3QKK1JhbmdlJiBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6Om9mZnNldEFzUmFuZ2Uo
KSBjb25zdAogewogICAgIEFTU0VSVChtX2NoZWNraW5nUmFuZ2UpOwogICAgIGlmICghbV9vZmZz
ZXRBc1JhbmdlKQotICAgICAgICBtX29mZnNldEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFn
cmFwaFJhbmdlKCktPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2Uo
KS0+c3RhcnRQb3NpdGlvbigpLCBtX2NoZWNraW5nUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7Cisg
ICAgICAgIG1fb2Zmc2V0QXNSYW5nZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2UoKS5z
dGFydENvbnRhaW5lcigpLmRvY3VtZW50KCksIHBhcmFncmFwaFJhbmdlKCkuc3RhcnRQb3NpdGlv
bigpLCBtX2NoZWNraW5nUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7CiAKLSAgICByZXR1cm4gbV9v
ZmZzZXRBc1JhbmdlOworICAgIHJldHVybiAqbV9vZmZzZXRBc1JhbmdlOwogfQogCiBjb25zdCBT
dHJpbmcmIFRleHRDaGVja2luZ1BhcmFncmFwaDo6dGV4dCgpIGNvbnN0CiB7CiAgICAgQVNTRVJU
KG1fY2hlY2tpbmdSYW5nZSk7CiAgICAgaWYgKG1fdGV4dC5pc0VtcHR5KCkpCi0gICAgICAgIG1f
dGV4dCA9IHBsYWluVGV4dChwYXJhZ3JhcGhSYW5nZSgpLmdldCgpKTsKKyAgICAgICAgbV90ZXh0
ID0gcGxhaW5UZXh0KCZwYXJhZ3JhcGhSYW5nZSgpKTsKICAgICByZXR1cm4gbV90ZXh0OyAKIH0K
IApAQCAtMjE0LDcgKzIxNCw3IEBAIGludCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmNoZWNraW5n
U3RhcnQoKSBjb25zdAogewogICAgIEFTU0VSVChtX2NoZWNraW5nUmFuZ2UpOwogICAgIGlmICht
X2NoZWNraW5nU3RhcnQgPT0gLTEpCi0gICAgICAgIG1fY2hlY2tpbmdTdGFydCA9IFRleHRJdGVy
YXRvcjo6cmFuZ2VMZW5ndGgob2Zmc2V0QXNSYW5nZSgpLmdldCgpKTsKKyAgICAgICAgbV9jaGVj
a2luZ1N0YXJ0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCgmb2Zmc2V0QXNSYW5nZSgpKTsK
ICAgICByZXR1cm4gbV9jaGVja2luZ1N0YXJ0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9UZXh0Q2hlY2tpbmdIZWxwZXIuaAppbmRleCBkOGRmMjRlNjY4N2MyMDBmMTQ1N2M3MTUxNzBi
ZmM5OTlhZjA1Njk4Li44ZmUyMDE2MmM3ZDIyYTkxZDA2ZTEzNzEzN2JlZDJiZDk1MWJlYjhmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmgKQEAgLTM4LDcg
KzM4LDcgQEAgcHVibGljOgogICAgIH5UZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoKTsKIAogICAgIGlu
dCByYW5nZUxlbmd0aCgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8UmFuZ2U+IHN1YnJhbmdlKGlu
dCBjaGFyYWN0ZXJPZmZzZXQsIGludCBjaGFyYWN0ZXJDb3VudCkgY29uc3Q7CisgICAgUmVmPFJh
bmdlPiBzdWJyYW5nZShpbnQgY2hhcmFjdGVyT2Zmc2V0LCBpbnQgY2hhcmFjdGVyQ291bnQpIGNv
bnN0OwogICAgIEV4Y2VwdGlvbk9yPGludD4gb2Zmc2V0VG8oY29uc3QgUG9zaXRpb24mKSBjb25z
dDsKICAgICB2b2lkIGV4cGFuZFJhbmdlVG9OZXh0RW5kKCk7CiAKQEAgLTYwLDExICs2MCwxMSBA
QCBwdWJsaWM6CiAgICAgYm9vbCBjaGVja2luZ1JhbmdlTWF0Y2hlcyhpbnQgbG9jYXRpb24sIGlu
dCBsZW5ndGgpIGNvbnN0IHsgcmV0dXJuIGxvY2F0aW9uID09IGNoZWNraW5nU3RhcnQoKSAmJiBs
ZW5ndGggPT0gY2hlY2tpbmdMZW5ndGgoKTsgfQogICAgIGJvb2wgaXNDaGVja2luZ1JhbmdlQ292
ZXJlZEJ5KGludCBsb2NhdGlvbiwgaW50IGxlbmd0aCkgY29uc3QgeyByZXR1cm4gbG9jYXRpb24g
PD0gY2hlY2tpbmdTdGFydCgpICYmIGxvY2F0aW9uICsgbGVuZ3RoID49IGNoZWNraW5nU3RhcnQo
KSArIGNoZWNraW5nTGVuZ3RoKCk7IH0KICAgICBib29sIGNoZWNraW5nUmFuZ2VDb3ZlcnMoaW50
IGxvY2F0aW9uLCBpbnQgbGVuZ3RoKSBjb25zdCB7IHJldHVybiBsb2NhdGlvbiA8IGNoZWNraW5n
RW5kKCkgJiYgbG9jYXRpb24gKyBsZW5ndGggPiBjaGVja2luZ1N0YXJ0KCk7IH0KLSAgICBQYXNz
UmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZSgpIGNvbnN0OworICAgIFJhbmdlJiBwYXJhZ3Jh
cGhSYW5nZSgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIHZvaWQgaW52YWxpZGF0ZVBhcmFncmFw
aFJhbmdlVmFsdWVzKCk7Ci0gICAgUGFzc1JlZlB0cjxSYW5nZT4gb2Zmc2V0QXNSYW5nZSgpIGNv
bnN0OworICAgIFJhbmdlJiBvZmZzZXRBc1JhbmdlKCkgY29uc3Q7CiAKICAgICBSZWZQdHI8UmFu
Z2U+IG1fY2hlY2tpbmdSYW5nZTsKICAgICBtdXRhYmxlIFJlZlB0cjxSYW5nZT4gbV9wYXJhZ3Jh
cGhSYW5nZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFu
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCmluZGV4IDc4
NTJhMTNlMGE4NGY1YzgwMTYxMTk3NWRkMzc0ZGY5ZDA5ODVlNzcuLjFkMGEzMmRiMGE3ZDMxMTE0
NTM5NWM2ZTE0ZDcyNTRjMzk2NTMzZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVHlwaW5nQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdD
b21tYW5kLmNwcApAQCAtNTQ3LDEwICs1NDcsMTAgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNl
cnRUZXh0UnVuV2l0aG91dE5ld2xpbmVzKGNvbnN0IFN0cmluZyAmdGV4dCwgYm9vbCBzZWxlY3QK
ICAgICBpZiAoIXdpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKEluc2VydFRleHQsIENoYXJhY3Rl
ckdyYW51bGFyaXR5LCB0ZXh0KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPEluc2Vy
dFRleHRDb21tYW5kPiBjb21tYW5kID0gSW5zZXJ0VGV4dENvbW1hbmQ6OmNyZWF0ZShkb2N1bWVu
dCgpLCB0ZXh0LCBzZWxlY3RJbnNlcnRlZFRleHQsCisgICAgYXV0byBjb21tYW5kID0gSW5zZXJ0
VGV4dENvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCB0ZXh0LCBzZWxlY3RJbnNlcnRlZFRleHQs
CiAgICAgICAgIG1fY29tcG9zaXRpb25UeXBlID09IFRleHRDb21wb3NpdGlvbk5vbmUgPyBJbnNl
cnRUZXh0Q29tbWFuZDo6UmViYWxhbmNlTGVhZGluZ0FuZFRyYWlsaW5nV2hpdGVzcGFjZXMgOiBJ
bnNlcnRUZXh0Q29tbWFuZDo6UmViYWxhbmNlQWxsV2hpdGVzcGFjZXMsIEVkaXRBY3Rpb25UeXBp
bmdJbnNlcnRUZXh0KTsKIAotICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKGNvbW1hbmQsIGVu
ZGluZ1NlbGVjdGlvbigpKTsKKyAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShXVEZNb3ZlKGNv
bW1hbmQpLCBlbmRpbmdTZWxlY3Rpb24oKSk7CiAKICAgICB0eXBpbmdBZGRlZFRvT3BlbkNvbW1h
bmQoSW5zZXJ0VGV4dCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL0hUTUxDb252ZXJ0ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxD
b252ZXJ0ZXIubW0KaW5kZXggNjBhODZhMjIzM2JiYzA2NjU4MWIzY2MwYTRiN2IxZTVlZjJhY2Rj
Ny4uMzRjMTYxMzVjODQ1MjlkYWU1NDFlOTJmODJkZGJhNzk3ZDMwNWVhZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQpAQCAtMzM4LDggKzMzOCw4
IEBAIHB1YmxpYzoKICAgICBib29sIGlzQmxvY2tFbGVtZW50KEVsZW1lbnQmKTsKICAgICBib29s
IGVsZW1lbnRIYXNPd25CYWNrZ3JvdW5kQ29sb3IoRWxlbWVudCYpOwogCi0gICAgUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gY29tcHV0ZWRTdHlsZVByb3BlcnR5Rm9yRWxlbWVudChFbGVtZW50JiwgQ1NT
UHJvcGVydHlJRCk7Ci0gICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gaW5saW5lU3R5bGVQcm9wZXJ0
eUZvckVsZW1lbnQoRWxlbWVudCYsIENTU1Byb3BlcnR5SUQpOworICAgIFJlZlB0cjxDU1NWYWx1
ZT4gY29tcHV0ZWRTdHlsZVByb3BlcnR5Rm9yRWxlbWVudChFbGVtZW50JiwgQ1NTUHJvcGVydHlJ
RCk7CisgICAgUmVmUHRyPENTU1ZhbHVlPiBpbmxpbmVTdHlsZVByb3BlcnR5Rm9yRWxlbWVudChF
bGVtZW50JiwgQ1NTUHJvcGVydHlJRCk7CiAKICAgICBOb2RlKiBjYWNoZUFuY2VzdG9yc09mU3Rh
cnRUb0JlQ29udmVydGVkKGNvbnN0IFJhbmdlJik7CiAgICAgYm9vbCBpc0FuY2VzdG9yc09mU3Rh
cnRUb0JlQ29udmVydGVkKE5vZGUmIG5vZGUpIGNvbnN0IHsgcmV0dXJuIG1fYW5jZXN0b3JzVW5k
ZXJDb21tb25BbmNlc3Rvci5jb250YWlucygmbm9kZSk7IH0KQEAgLTYxOSw3ICs2MTksNyBAQCBz
dGF0aWMgTlNQYXJhZ3JhcGhTdHlsZSAqZGVmYXVsdFBhcmFncmFwaFN0eWxlKCkKICAgICByZXR1
cm4gZGVmYXVsdFBhcmFncmFwaFN0eWxlOwogfQogCi1QYXNzUmVmUHRyPENTU1ZhbHVlPiBIVE1M
Q29udmVydGVyQ2FjaGVzOjpjb21wdXRlZFN0eWxlUHJvcGVydHlGb3JFbGVtZW50KEVsZW1lbnQm
IGVsZW1lbnQsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCkKK1JlZlB0cjxDU1NWYWx1ZT4gSFRN
TENvbnZlcnRlckNhY2hlczo6Y29tcHV0ZWRTdHlsZVByb3BlcnR5Rm9yRWxlbWVudChFbGVtZW50
JiBlbGVtZW50LCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SWQpCiB7CiAgICAgaWYgKHByb3BlcnR5
SWQgPT0gQ1NTUHJvcGVydHlJbnZhbGlkKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTYz
MSw3ICs2MzEsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBIVE1MQ29udmVydGVyQ2FjaGVzOjpj
b21wdXRlZFN0eWxlUHJvcGVydHlGb3JFbGVtZW50KEVsZW1lbgogICAgIHJldHVybiBjb21wdXRl
ZFN0eWxlLnByb3BlcnR5VmFsdWUocHJvcGVydHlJZCk7CiB9CiAKLVBhc3NSZWZQdHI8Q1NTVmFs
dWU+IEhUTUxDb252ZXJ0ZXJDYWNoZXM6OmlubGluZVN0eWxlUHJvcGVydHlGb3JFbGVtZW50KEVs
ZW1lbnQmIGVsZW1lbnQsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCkKK1JlZlB0cjxDU1NWYWx1
ZT4gSFRNTENvbnZlcnRlckNhY2hlczo6aW5saW5lU3R5bGVQcm9wZXJ0eUZvckVsZW1lbnQoRWxl
bWVudCYgZWxlbWVudCwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkKQogewogICAgIGlmIChwcm9w
ZXJ0eUlkID09IENTU1Byb3BlcnR5SW52YWxpZCB8fCAhaXM8U3R5bGVkRWxlbWVudD4oZWxlbWVu
dCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9pb3MvRnJhbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5t
bQppbmRleCBlMDZmNDc4MTY2NjU1MzRhNTg0M2JmNzc5OTViZWExNWY2Y2Y2NDg1Li45Y2UwZDM4
OTc3YTYwYjhkMTk5NDgxMDM0OTg2M2RhYWY4YzUyYzhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9G
cmFtZUlPUy5tbQpAQCAtNjI5LDEzICs2MjksMTMgQEAgTlNBcnJheSAqRnJhbWU6OmludGVycHJl
dGF0aW9uc0ZvckN1cnJlbnRSb290KCkgY29uc3QKIAogICAgIGF1dG8qIHJvb3QgPSBzZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCkgPT0gVmlzaWJsZVNlbGVjdGlvbjo6Tm9T
ZWxlY3Rpb24gPyBkb2N1bWVudCgpLT5ib2R5T3JGcmFtZXNldCgpIDogc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIHVuc2lnbmVkIHJvb3RDaGlsZENv
dW50ID0gcm9vdC0+Y291bnRDaGlsZE5vZGVzKCk7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZU9m
Um9vdENvbnRlbnRzID0gUmFuZ2U6OmNyZWF0ZSgqZG9jdW1lbnQoKSwgY3JlYXRlTGVnYWN5RWRp
dGluZ1Bvc2l0aW9uKHJvb3QsIDApLCBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocm9vdCwg
cm9vdENoaWxkQ291bnQpKTsKKyAgICBhdXRvIHJhbmdlT2ZSb290Q29udGVudHMgPSBSYW5nZTo6
Y3JlYXRlKCpkb2N1bWVudCgpLCBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocm9vdCwgMCks
IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyb290LCByb290Q2hpbGRDb3VudCkpOwogCi0g
ICAgYXV0byBtYXJrZXJzSW5Sb290ID0gZG9jdW1lbnQoKS0+bWFya2VycygpLm1hcmtlcnNJblJh
bmdlKHJhbmdlT2ZSb290Q29udGVudHMuZ2V0KCksIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25Q
aHJhc2VXaXRoQWx0ZXJuYXRpdmVzKTsKKyAgICBhdXRvIG1hcmtlcnNJblJvb3QgPSBkb2N1bWVu
dCgpLT5tYXJrZXJzKCkubWFya2Vyc0luUmFuZ2UocmFuZ2VPZlJvb3RDb250ZW50cywgRG9jdW1l
bnRNYXJrZXI6OkRpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXMpOwogCiAgICAgLy8gVGhl
cmUgYXJlIG5vIHBocmFzZXMgd2l0aCBhbHRlcm5hdGl2ZXMsIHNvIHRoZXJlIGlzIGp1c3Qgb25l
IGludGVycHJldGF0aW9uLgogICAgIGlmIChtYXJrZXJzSW5Sb290LmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdDpwbGFpblRleHQocmFuZ2VPZlJvb3RD
b250ZW50cy5nZXQoKSldOworICAgICAgICByZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0
OnBsYWluVGV4dChyYW5nZU9mUm9vdENvbnRlbnRzLnB0cigpKV07CiAKICAgICAvLyBUaGUgbnVt
YmVyIG9mIGludGVycHJldGF0aW9ucyB3aWxsIGJlIGkxICogaTIgKiAuLi4gKiBpTiwgd2hlcmUg
aVggaXMgdGhlIG51bWJlciBvZiBpbnRlcnByZXRhdGlvbnMgZm9yIHRoZSBYdGggcGhyYXNlIHdp
dGggYWx0ZXJuYXRpdmVzLgogICAgIHNpemVfdCBpbnRlcnByZXRhdGlvbnNDb3VudCA9IDE7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5t
bSBiL1NvdXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tCmluZGV4
IGZhMDFkNDM1ZjIzYzdlYWU1NDgyNTMwZTM4ZGNiOTU5MTBmN2RhMzQuLjgzZGVmYmVhZGQ1MzAw
OGU0YmY5YTc5NmRiNTk2MWU5NmZjZWY5ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvaW9z
L1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvaW9zL1dl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tCkBAIC04NTcsOSArODU3LDkgQEAgLSAoV2ViVmlz
aWJsZVBvc2l0aW9uICopcHJldmlvdXNVbnBlcnR1cmJlZERpY3RhdGlvblJlc3VsdEJvdW5kYXJ5
RnJvbVBvc2l0aW9uOigKICAgICAgICAgaWYgKHByZXZpb3VzVmlzaWJsZVBvc2l0aW9uLmlzTnVs
bCgpKQogICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRXZWJWaXNpYmxlUG9zaXRpb247CiAgICAg
ICAgIAotICAgICAgICBSZWZQdHI8UmFuZ2U+IGdyYXBoZW1lUmFuZ2UgPSBSYW5nZTo6Y3JlYXRl
KGRvY3VtZW50LCBwcmV2aW91c1Zpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLCBjdXJy
ZW50VmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkpOworICAgICAgICBhdXRvIGdyYXBo
ZW1lUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50LCBwcmV2aW91c1Zpc2libGVQb3NpdGlv
bi5kZWVwRXF1aXZhbGVudCgpLCBjdXJyZW50VmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50
KCkpOwogICAgICAgICAKLSAgICAgICAgYXV0byBtYXJrZXJzID0gZG9jdW1lbnQubWFya2Vycygp
Lm1hcmtlcnNJblJhbmdlKGdyYXBoZW1lUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpEaWN0
YXRpb25SZXN1bHQpOworICAgICAgICBhdXRvIG1hcmtlcnMgPSBkb2N1bWVudC5tYXJrZXJzKCku
bWFya2Vyc0luUmFuZ2UoZ3JhcGhlbWVSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblJl
c3VsdCk7CiAgICAgICAgIGlmIChtYXJrZXJzLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVy
biBjdXJyZW50V2ViVmlzaWJsZVBvc2l0aW9uOwogICAgICAgICAKQEAgLTkxMyw5ICs5MTMsOSBA
QCAtIChXZWJWaXNpYmxlUG9zaXRpb24gKiluZXh0VW5wZXJ0dXJiZWREaWN0YXRpb25SZXN1bHRC
b3VuZGFyeUZyb21Qb3NpdGlvbjooV2ViVgogICAgICAgICBpZiAobmV4dFZpc2libGVQb3NpdGlv
bi5pc051bGwoKSkKICAgICAgICAgICAgIHJldHVybiBjdXJyZW50V2ViVmlzaWJsZVBvc2l0aW9u
OwogICAgICAgICAKLSAgICAgICAgUmVmUHRyPFJhbmdlPiBncmFwaGVtZVJhbmdlID0gUmFuZ2U6
OmNyZWF0ZShkb2N1bWVudCwgY3VycmVudFZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgp
LCBuZXh0VmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkpOworICAgICAgICBhdXRvIGdy
YXBoZW1lUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50LCBjdXJyZW50VmlzaWJsZVBvc2l0
aW9uLmRlZXBFcXVpdmFsZW50KCksIG5leHRWaXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQo
KSk7CiAgICAgICAgIAotICAgICAgICBhdXRvIG1hcmtlcnMgPSBkb2N1bWVudC5tYXJrZXJzKCku
bWFya2Vyc0luUmFuZ2UoZ3JhcGhlbWVSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkRpY3Rh
dGlvblJlc3VsdCk7CisgICAgICAgIGF1dG8gbWFya2VycyA9IGRvY3VtZW50Lm1hcmtlcnMoKS5t
YXJrZXJzSW5SYW5nZShncmFwaGVtZVJhbmdlLCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUmVz
dWx0KTsKICAgICAgICAgaWYgKG1hcmtlcnMuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJu
IGN1cnJlbnRXZWJWaXNpYmxlUG9zaXRpb247CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViRnJhbWUubW0KaW5kZXggZWM5MzgzZGY5NmZmYmU5ODcwOGQzNTZmOWM1MjQ2NzhjMDhj
ZGY4Yy4uNTgxOTVlZTM2NTliMWRjZDNmOTVkYzIzZGIxMmI3ODU0N2IyNDIxNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCkBAIC0xNzU2LDcgKzE3NTYsNyBAQCAtIChpZClk
aWN0YXRpb25SZXN1bHRNZXRhZGF0YUZvclJhbmdlOihET01SYW5nZSAqKXJhbmdlCiAgICAgaWYg
KCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAgICBhdXRvIG1hcmtlcnMgPSBj
b3JlKHNlbGYpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCkubWFya2Vyc0luUmFuZ2UoY29yZShyYW5n
ZSksIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25SZXN1bHQpOworICAgIGF1dG8gbWFya2VycyA9
IGNvcmUoc2VsZiktPmRvY3VtZW50KCktPm1hcmtlcnMoKS5tYXJrZXJzSW5SYW5nZSgqY29yZShy
YW5nZSksIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25SZXN1bHQpOwogICAgIAogICAgIC8vIFVJ
S2l0IHNob3VsZCBvbmx5IGV2ZXIgZ2l2ZSB1cyBhIERPTVJhbmdlIGZvciBhIHBocmFzZSB3aXRo
IGFsdGVybmF0aXZlcywgd2hpY2ggc2hvdWxkIG5vdCBiZSBwYXJ0IG9mIG1vcmUgdGhhbiBvbmUg
cmVzdWx0LgogICAgIEFTU0VSVChtYXJrZXJzLnNpemUoKSA8PSAxKTsKQEAgLTE5MjksNyArMTky
OSw3IEBAIC0gKHZvaWQpX3JlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQ6KERPTURvY3VtZW50
RnJhZ21lbnQgKilmcmFnbWVudCBzZWxlY3RSZXBsCiB7CiAgICAgaWYgKF9wcml2YXRlLT5jb3Jl
RnJhbWUtPnNlbGVjdGlvbigpLmlzTm9uZSgpIHx8ICFmcmFnbWVudCkKICAgICAgICAgcmV0dXJu
OwotICAgIF9wcml2YXRlLT5jb3JlRnJhbWUtPmVkaXRvcigpLnJlcGxhY2VTZWxlY3Rpb25XaXRo
RnJhZ21lbnQoY29yZShmcmFnbWVudCksIHNlbGVjdFJlcGxhY2VtZW50LCBzbWFydFJlcGxhY2Us
IG1hdGNoU3R5bGUpOworICAgIF9wcml2YXRlLT5jb3JlRnJhbWUtPmVkaXRvcigpLnJlcGxhY2VT
ZWxlY3Rpb25XaXRoRnJhZ21lbnQoKmNvcmUoZnJhZ21lbnQpLCBzZWxlY3RSZXBsYWNlbWVudCwg
c21hcnRSZXBsYWNlLCBtYXRjaFN0eWxlKTsKIH0KIAogI2lmIFBMQVRGT1JNKElPUykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308723</attachid>
            <date>2017-05-01 09:35:11 -0700</date>
            <delta_ts>2017-05-01 09:51:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171490-20170501093510.patch</filename>
            <type>text/plain</type>
            <size>127064</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2MDAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjY4MmQwNTQ2ZTgwNDMz
ZDViZDM4NzgxNTQ2NzQ1OTk4ZGRmMjI1OS4uMGEzYTkxYzRkYWY1NzQ2ZjYzM2FhMTcxZDQ0YWFk
MTdmZThmYTM0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDEzMiBAQAogMjAxNy0wNC0zMCAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCisgICAgICAgIFJlbW92ZSBzb21lIHVzYWdl
IG9mIFBhc3NSZWZQdHIgaW4gZWRpdGluZyBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzE0OTAKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJp
biBBZGxlci4KKworICAgICAgICBSZW1vdmUgc29tZSB1c2FnZSBvZiBQYXNzUmVmUHRyIGluIGVk
aXRpbmcgY29kZS4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJzSW5S
YW5nZSk6CisgICAgICAgIChEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Omhhc01hcmtlcnMpOgor
ICAgICAgICAoRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjbGVhckRlc2NyaXB0aW9uT25NYXJr
ZXJzSW50ZXJzZWN0aW5nUmFuZ2UpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudE1hcmtlckNvbnRy
b2xsZXIuaDoKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aXNTcGVsbGlu
Z01hcmtlckFsbG93ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6c2hvdyk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
OjphcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjpoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZWNvcmRBdXRvY29y
cmVjdGlvblJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI6Om1hcmtSZXZlcnNlZCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjptYXJrQ29ycmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjpyZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29y
cmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpw
cm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5RGljdGF0aW9uQWx0ZXJuYXRpdmUp
OgorICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6VU5MRVNTX0VOQUJMRUQpOgor
ICAgICAgICAqIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlRm9udEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU3R5bGVTcGFu
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6QXBwbHlTdHls
ZUNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6Y29weVN0eWxlT3JDcmVhdGVFbXB0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlSZWxhdGl2ZUZvbnRTdHls
ZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxp
bmVTdHlsZVRvTm9kZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5k
OjpyZW1vdmVDb25mbGljdGluZ0lubGluZVN0eWxlRnJvbVJ1bik6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6aGlnaGVzdEFuY2VzdG9yV2l0aENvbmZs
aWN0aW5nSW5saW5lU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6
OmFwcGx5SW5saW5lU3R5bGVUb1B1c2hEb3duKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5
bGVDb21tYW5kOjpwdXNoRG93bklubGluZVN0eWxlQXJvdW5kTm9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnNob3VsZFNwbGl0VGV4dEVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnN1cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmFkZElubGluZVN0eWxl
SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnBvc2l0aW9u
VG9Db21wdXRlSW5saW5lU3R5bGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHls
ZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVDaGFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcvQXBw
bHlTdHlsZUNvbW1hbmQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnNob3VsZFJlbW92
ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQpOgorICAgICAgICAqIGVkaXRpbmcvQ29tcG9zaXRlRWRp
dENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmFw
cGx5Q29tbWFuZFRvQ29tcG9zaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRD
b21tYW5kOjphcHBseVN0eWxlZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRl
RWRpdENvbW1hbmQ6OnJlbW92ZVN0eWxlZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29t
cG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VFbGVtZW50V2l0aFNwYW5QcmVzZXJ2aW5nQ2hpbGRy
ZW5BbmRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5k
OjppbnB1dFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJl
cGxhY2VUZXh0SW5Ob2RlUHJlc2VydmluZ01hcmtlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29t
cG9zaXRlRWRpdENvbW1hbmQ6OnB1c2hBbmNob3JFbGVtZW50RG93bik6CisgICAgICAgICogZWRp
dGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oOgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21t
YW5kOjpvcmlnaW5hbFN0cmluZ0ZvckF1dG9jb3JyZWN0aW9uQXRCZWdpbm5pbmdPZlNlbGVjdGlv
bik6CisgICAgICAgICogZWRpdGluZy9EaWN0YXRpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRpY3RhdGlvbkNvbW1hbmQ6Omluc2VydFRleHRSdW5XaXRob3V0TmV3bGluZXMpOgor
ICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNv
cHlFZGl0aW5nUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJvcGVydGllc0Zy
b21Db21wdXRlZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmV4dHJhY3RQcm9wZXJ0eVZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBdHRyaWJ1dGVFcXVpdmFsZW50OjphdHRyaWJ1dGVW
YWx1ZUFzQ1NTVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvbnRTaXplRXF1aXZhbGVu
dDo6YXR0cmlidXRlVmFsdWVBc0NTU1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdT
dHlsZTo6c2V0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpjb3B5KToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6ZXh0cmFjdEFuZFJlbW92ZUJsb2NrUHJv
cGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OmV4dHJhY3RBbmRSZW1v
dmVUZXh0RGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6bWVyZ2VJ
bmxpbmVTdHlsZU9mRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpleHRyYWN0RWRpdGluZ1By
b3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0
aW9uU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UHJvcGVydGllc05vdEluKToKKyAgICAg
ICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5oOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aGFuZGxlVGV4dEV2ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6Omluc2VydE9yZGVyZWRMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6aW5zZXJ0VW5vcmRlcmVkTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6Y29ycmVjdFNwZWxsY2hlY2tpbmdQcmVzZXJ2aW5nVGV4dENoZWNraW5nUGFyYWdyYXBo
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpjaGFuZ2VCYWNrVG9SZXBsYWNlZFN0cmluZyk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cmFuZ2VGb3JQb2ludCk6CisgICAgICAgICog
ZWRpdGluZy9FZGl0b3IuaDoKKyAgICAgICAgKiBlZGl0aW5nL01vZGlmeVNlbGVjdGlvbkxpc3RM
ZXZlbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENv
bW1hbmQ6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
Y3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2
ZWxPcmRlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVs
Q29tbWFuZDo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxVbm9yZGVyZWQpOgorICAgICAgICAq
IGVkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmg6CisgICAgICAgICogZWRpdGluZy9T
cGVsbENoZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2VyOjpyZXF1ZXN0
Q2hlY2tpbmdGb3IpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2VyOjpkaWRDaGVja1N1
Y2NlZWQpOgorICAgICAgICAqIGVkaXRpbmcvU3BlbGxDaGVja2VyLmg6CisgICAgICAgIChXZWJD
b3JlOjpTcGVsbENoZWNrUmVxdWVzdDo6Y2hlY2tpbmdSYW5nZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTcGVsbENoZWNrUmVxdWVzdDo6cGFyYWdyYXBoUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
U3BlbGxDaGVja1JlcXVlc3Q6OnJvb3RFZGl0YWJsZUVsZW1lbnQpOgorICAgICAgICAqIGVkaXRp
bmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGVs
bGluZ0NvcnJlY3Rpb25Db21tYW5kOjpTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OndpbGxBcHBseUNvbW1hbmQp
OgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6
CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjp0YXJnZXRSYW5n
ZXMpOgorICAgICAgICAqIGVkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oOgorICAg
ICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKToKKyAgICAg
ICAgKiBlZGl0aW5nL1N1cnJvdW5kaW5nVGV4dC5oOgorICAgICAgICAqIGVkaXRpbmcvVGV4dENo
ZWNraW5nSGVscGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFw
aDo6ZXhwYW5kUmFuZ2VUb05leHRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5n
UGFyYWdyYXBoOjpyYW5nZUxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdQ
YXJhZ3JhcGg6OnBhcmFncmFwaFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2lu
Z1BhcmFncmFwaDo6c3VicmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nUGFy
YWdyYXBoOjpvZmZzZXRUbyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdQYXJhZ3Jh
cGg6Om9mZnNldEFzUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nUGFyYWdy
YXBoOjp0ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6Y2hl
Y2tpbmdTdGFydCk6CisgICAgICAgICogZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuaDoKKyAg
ICAgICAgKiBlZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHlw
aW5nQ29tbWFuZDo6aW5zZXJ0VGV4dFJ1bldpdGhvdXROZXdsaW5lcyk6CisgICAgICAgICogZWRp
dGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tOgorICAgICAgICAoSFRNTENvbnZlcnRlckNhY2hl
czo6Y29tcHV0ZWRTdHlsZVByb3BlcnR5Rm9yRWxlbWVudCk6CisgICAgICAgIChIVE1MQ29udmVy
dGVyQ2FjaGVzOjppbmxpbmVTdHlsZVByb3BlcnR5Rm9yRWxlbWVudCk6CisgICAgICAgICogcGFn
ZS9pb3MvRnJhbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6aW50ZXJwcmV0YXRp
b25zRm9yQ3VycmVudFJvb3QpOgorCisyMDE3LTA0LTMwICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CisKICAgICAgICAgRHJvcCBzdXBwb3J0IGZvciBsZWdhY3kgQ2xpZW50UmVjdCAv
IENsaWVudFJlY3RMaXN0CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzE0MTgKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9pb3MvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9pb3MvQ2hhbmdlTG9nCmluZGV4IGVmZmE3MDJkODM2ODUyNWIzNDkx
MWI4OGRjZjMxZjIyZTMzZDcxZGMuLjYzN2Y4MWYxOTFhMGVlYjk1ZmM0YjMzYjE3NzI3Y2NiZGEz
MTQ0MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvaW9zL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L2lvcy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxNy0wNC0zMCAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBzb21lIHVzYWdl
IG9mIFBhc3NSZWZQdHIgaW4gZWRpdGluZyBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzE0OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tOgor
ICAgICAgICAoLVtXZWJGcmFtZSBwcmV2aW91c1VucGVydHVyYmVkRGljdGF0aW9uUmVzdWx0Qm91
bmRhcnlGcm9tUG9zaXRpb246XSk6CisgICAgICAgICgtW1dlYkZyYW1lIG5leHRVbnBlcnR1cmJl
ZERpY3RhdGlvblJlc3VsdEJvdW5kYXJ5RnJvbVBvc2l0aW9uOl0pOgorCiAyMDE3LTA0LTE0ICBX
ZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFtXSzJdIFN1
cHBvcnQgSWNvbiBjcmVhdGlvbiBmcm9tIGZpbGUgVVJMcyBvbiBpT1MKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwpp
bmRleCBmNjcwZjAwNzgwMWU4ZGE1NjM2MWNhYjUyYWQzOGFmYzgzNWE4MGU0Li5lMGFlMGQ1ZWRk
MGQxMTZmYzBmYjg5OGEzMmJiODY5NzY3OWFmOTI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTQgQEAKKzIwMTctMDQtMzAgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKwor
ICAgICAgICBSZW1vdmUgc29tZSB1c2FnZSBvZiBQYXNzUmVmUHRyIGluIGVkaXRpbmcgY29kZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcxNDkwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJWaWV3
L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBkaWN0YXRpb25SZXN1bHRNZXRhZGF0
YUZvclJhbmdlOl0pOgorICAgICAgICAoLVtXZWJGcmFtZSBfcmVwbGFjZVNlbGVjdGlvbldpdGhG
cmFnbWVudDpzZWxlY3RSZXBsYWNlbWVudDpzbWFydFJlcGxhY2U6bWF0Y2hTdHlsZTpdKToKKwog
MjAxNy0wNC0zMCAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFtD
b2NvYV0gUmVwbGFjZXMgdXNlcyBvZiBbZ2V04oCmKCkgYWxsb2NdIHdpdGggYWxsb2PigKZJbnN0
YW5jZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIu
Y3BwCmluZGV4IGNjZGRjZjU4YzM5MmJlNDU1YjBkYmYyNTIyNTBlYTIxZTY4OGQwNzcuLmU5ZDRh
YTNhNWQ4NjE4YjZmMzUwNjU1ZDU3MjFlOGE0ODk4YzFlMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCkBAIC01MTcsMjQgKzUxNywyNCBA
QCBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IERvY3VtZW50TWFya2VyQ29udHJvbGxl
cjo6bWFya2Vyc0ZvcihOb2RlKiBub2RlLAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVZlY3Rv
cjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJr
ZXJzSW5SYW5nZShSYW5nZSogcmFuZ2UsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyBtYXJr
ZXJUeXBlcykKK1ZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyOjptYXJrZXJzSW5SYW5nZShSYW5nZSYgcmFuZ2UsIERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlcyBtYXJrZXJUeXBlcykKIHsKICAgICBpZiAoIXBvc3NpYmx5SGFzTWFya2Vycyht
YXJrZXJUeXBlcykpCiAgICAgICAgIHJldHVybiBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtl
cio+KCk7CiAKICAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IGZvdW5kTWFya2Vy
czsKIAotICAgIE5vZGUmIHN0YXJ0Q29udGFpbmVyID0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCk7
Ci0gICAgTm9kZSYgZW5kQ29udGFpbmVyID0gcmFuZ2UtPmVuZENvbnRhaW5lcigpOworICAgIE5v
ZGUmIHN0YXJ0Q29udGFpbmVyID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKTsKKyAgICBOb2RlJiBl
bmRDb250YWluZXIgPSByYW5nZS5lbmRDb250YWluZXIoKTsKIAotICAgIE5vZGUqIHBhc3RMYXN0
Tm9kZSA9IHJhbmdlLT5wYXN0TGFzdE5vZGUoKTsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5n
ZS0+Zmlyc3ROb2RlKCk7IG5vZGUgIT0gcGFzdExhc3ROb2RlOyBub2RlID0gTm9kZVRyYXZlcnNh
bDo6bmV4dCgqbm9kZSkpIHsKKyAgICBOb2RlKiBwYXN0TGFzdE5vZGUgPSByYW5nZS5wYXN0TGFz
dE5vZGUoKTsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5nZS5maXJzdE5vZGUoKTsgbm9kZSAh
PSBwYXN0TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewogICAg
ICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IG1hcmtlcnNGb3Iobm9kZSkpIHsKICAgICAgICAgICAg
IGlmICghbWFya2VyVHlwZXMuY29udGFpbnMobWFya2VyLT50eXBlKCkpKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKG5vZGUgPT0gJnN0YXJ0Q29udGFpbmVyICYm
IG1hcmtlci0+ZW5kT2Zmc2V0KCkgPD0gcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpCisgICAgICAgICAg
ICBpZiAobm9kZSA9PSAmc3RhcnRDb250YWluZXIgJiYgbWFya2VyLT5lbmRPZmZzZXQoKSA8PSBy
YW5nZS5zdGFydE9mZnNldCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgaWYgKG5vZGUgPT0gJmVuZENvbnRhaW5lciAmJiBtYXJrZXItPnN0YXJ0T2Zmc2V0KCkgPj0g
cmFuZ2UtPmVuZE9mZnNldCgpKQorICAgICAgICAgICAgaWYgKG5vZGUgPT0gJmVuZENvbnRhaW5l
ciAmJiBtYXJrZXItPnN0YXJ0T2Zmc2V0KCkgPj0gcmFuZ2UuZW5kT2Zmc2V0KCkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBmb3VuZE1hcmtlcnMuYXBwZW5kKG1hcmtl
cik7CiAgICAgICAgIH0KQEAgLTczMiwyMyArNzMyLDIzIEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyOjpzZXRNYXJrZXJzQWN0aXZlKE5vZGUqIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0CiAgICAgICAgIG5vZGUtPnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKIH0KIAotYm9vbCBEb2N1
bWVudE1hcmtlckNvbnRyb2xsZXI6Omhhc01hcmtlcnMoUmFuZ2UqIHJhbmdlLCBEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZXMgbWFya2VyVHlwZXMpCitib29sIERvY3VtZW50TWFya2VyQ29udHJv
bGxlcjo6aGFzTWFya2VycyhSYW5nZSYgcmFuZ2UsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBl
cyBtYXJrZXJUeXBlcykKIHsKICAgICBpZiAoIXBvc3NpYmx5SGFzTWFya2VycyhtYXJrZXJUeXBl
cykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBBU1NFUlQoIW1fbWFya2Vycy5pc0VtcHR5
KCkpOwogCi0gICAgTm9kZSYgc3RhcnRDb250YWluZXIgPSByYW5nZS0+c3RhcnRDb250YWluZXIo
KTsKLSAgICBOb2RlJiBlbmRDb250YWluZXIgPSByYW5nZS0+ZW5kQ29udGFpbmVyKCk7CisgICAg
Tm9kZSYgc3RhcnRDb250YWluZXIgPSByYW5nZS5zdGFydENvbnRhaW5lcigpOworICAgIE5vZGUm
IGVuZENvbnRhaW5lciA9IHJhbmdlLmVuZENvbnRhaW5lcigpOwogCi0gICAgTm9kZSogcGFzdExh
c3ROb2RlID0gcmFuZ2UtPnBhc3RMYXN0Tm9kZSgpOwotICAgIGZvciAoTm9kZSogbm9kZSA9IHJh
bmdlLT5maXJzdE5vZGUoKTsgbm9kZSAhPSBwYXN0TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVy
c2FsOjpuZXh0KCpub2RlKSkgeworICAgIE5vZGUqIHBhc3RMYXN0Tm9kZSA9IHJhbmdlLnBhc3RM
YXN0Tm9kZSgpOworICAgIGZvciAoTm9kZSogbm9kZSA9IHJhbmdlLmZpcnN0Tm9kZSgpOyBub2Rl
ICE9IHBhc3RMYXN0Tm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7CiAg
ICAgICAgIGZvciAoYXV0byogbWFya2VyIDogbWFya2Vyc0Zvcihub2RlKSkgewogICAgICAgICAg
ICAgaWYgKCFtYXJrZXJUeXBlcy5jb250YWlucyhtYXJrZXItPnR5cGUoKSkpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAobm9kZSA9PSAmc3RhcnRDb250YWluZXIg
JiYgbWFya2VyLT5lbmRPZmZzZXQoKSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmFuZ2UtPnN0
YXJ0T2Zmc2V0KCkpKQorICAgICAgICAgICAgaWYgKG5vZGUgPT0gJnN0YXJ0Q29udGFpbmVyICYm
IG1hcmtlci0+ZW5kT2Zmc2V0KCkgPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJhbmdlLnN0YXJ0
T2Zmc2V0KCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKG5v
ZGUgPT0gJmVuZENvbnRhaW5lciAmJiBtYXJrZXItPnN0YXJ0T2Zmc2V0KCkgPj0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHJhbmdlLT5lbmRPZmZzZXQoKSkpCisgICAgICAgICAgICBpZiAobm9kZSA9
PSAmZW5kQ29udGFpbmVyICYmIG1hcmtlci0+c3RhcnRPZmZzZXQoKSA+PSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4ocmFuZ2UuZW5kT2Zmc2V0KCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTc1NiwxOSArNzU2LDE5IEBA
IGJvb2wgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpoYXNNYXJrZXJzKFJhbmdlKiByYW5nZSwg
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIERv
Y3VtZW50TWFya2VyQ29udHJvbGxlcjo6Y2xlYXJEZXNjcmlwdGlvbk9uTWFya2Vyc0ludGVyc2Vj
dGluZ1JhbmdlKFJhbmdlKiByYW5nZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGVzIG1hcmtl
clR5cGVzKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmNsZWFyRGVzY3JpcHRpb25P
bk1hcmtlcnNJbnRlcnNlY3RpbmdSYW5nZShSYW5nZSYgcmFuZ2UsIERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlcyBtYXJrZXJUeXBlcykKIHsKICAgICBpZiAoIXBvc3NpYmx5SGFzTWFya2Vycyht
YXJrZXJUeXBlcykpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoIW1fbWFya2Vycy5pc0Vt
cHR5KCkpOwogCi0gICAgTm9kZSYgc3RhcnRDb250YWluZXIgPSByYW5nZS0+c3RhcnRDb250YWlu
ZXIoKTsKLSAgICBOb2RlJiBlbmRDb250YWluZXIgPSByYW5nZS0+ZW5kQ29udGFpbmVyKCk7Cisg
ICAgTm9kZSYgc3RhcnRDb250YWluZXIgPSByYW5nZS5zdGFydENvbnRhaW5lcigpOworICAgIE5v
ZGUmIGVuZENvbnRhaW5lciA9IHJhbmdlLmVuZENvbnRhaW5lcigpOwogCi0gICAgTm9kZSogcGFz
dExhc3ROb2RlID0gcmFuZ2UtPnBhc3RMYXN0Tm9kZSgpOwotICAgIGZvciAoTm9kZSogbm9kZSA9
IHJhbmdlLT5maXJzdE5vZGUoKTsgbm9kZSAhPSBwYXN0TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJh
dmVyc2FsOjpuZXh0KCpub2RlKSkgewotICAgICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IG5v
ZGUgPT0gJnN0YXJ0Q29udGFpbmVyID8gcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgOiAwOwotICAgICAg
ICB1bnNpZ25lZCBlbmRPZmZzZXQgPSBub2RlID09ICZlbmRDb250YWluZXIgPyBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4ocmFuZ2UtPmVuZE9mZnNldCgpKSA6IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5z
aWduZWQ+OjptYXgoKTsKKyAgICBOb2RlKiBwYXN0TGFzdE5vZGUgPSByYW5nZS5wYXN0TGFzdE5v
ZGUoKTsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5nZS5maXJzdE5vZGUoKTsgbm9kZSAhPSBw
YXN0TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgeworICAgICAg
ICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IG5vZGUgPT0gJnN0YXJ0Q29udGFpbmVyID8gcmFuZ2Uu
c3RhcnRPZmZzZXQoKSA6IDA7CisgICAgICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9IG5vZGUgPT0g
JmVuZENvbnRhaW5lciA/IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyYW5nZS5lbmRPZmZzZXQoKSkg
OiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CiAgICAgICAgIE1hcmtlckxp
c3QqIGxpc3QgPSBtX21hcmtlcnMuZ2V0KG5vZGUpOwogICAgICAgICBpZiAoIWxpc3QpCiAgICAg
ICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNv
bnRyb2xsZXIuaAppbmRleCAyYzJjZDM3N2EyOGJmOGNhZWU3MDVmZGIzMjA0NzY4NWQ2N2IxOTEy
Li4wZjVjMjM2NDY0MTdhMjQ5MzNmM2FhYTAyYjNjNDJiYjk4YzFhYTZjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5oCkBAIC02Niw3ICs2Niw3IEBA
IHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1fbWFya2Vycy5pc0VtcHR5KCkgPT0gIW1fcG9zc2li
bHlFeGlzdGluZ01hcmtlclR5cGVzLmludGVyc2VjdHMoRG9jdW1lbnRNYXJrZXI6OkFsbE1hcmtl
cnMoKSkpOwogICAgICAgICByZXR1cm4gIW1fbWFya2Vycy5pc0VtcHR5KCk7CiAgICAgfQotICAg
IGJvb2wgaGFzTWFya2VycyhSYW5nZSosIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyA9IERv
Y3VtZW50TWFya2VyOjpBbGxNYXJrZXJzKCkpOworICAgIGJvb2wgaGFzTWFya2VycyhSYW5nZSYs
IERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyA9IERvY3VtZW50TWFya2VyOjpBbGxNYXJrZXJz
KCkpOwogCiAgICAgLy8gV2hlbiBhIG1hcmtlciBwYXJ0aWFsbHkgb3ZlcmxhcHMgd2l0aCByYW5n
ZSwgaWYgcmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJzIGlzIHRydWUsIHdlIGNvbXBs
ZXRlbHkKICAgICAvLyByZW1vdmUgdGhlIG1hcmtlci4gSWYgdGhlIGFyZ3VtZW50IGlzIGZhbHNl
LCB3ZSB3aWxsIGFkanVzdCB0aGUgc3BhbiBvZiB0aGUgbWFya2VyIHNvIHRoYXQgaXQgcmV0YWlu
cwpAQCAtODMsOCArODMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRNYXJrZXJzQWN0aXZlKE5v
ZGUqLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBib29sKTsKIAog
ICAgIFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2Vy
c0ZvcihOb2RlKiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGVzID0gRG9jdW1lbnRNYXJrZXI6
OkFsbE1hcmtlcnMoKSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPFJlbmRlcmVkRG9jdW1l
bnRNYXJrZXIqPiBtYXJrZXJzSW5SYW5nZShSYW5nZSosIERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlcyk7Ci0gICAgdm9pZCBjbGVhckRlc2NyaXB0aW9uT25NYXJrZXJzSW50ZXJzZWN0aW5nUmFu
Z2UoUmFuZ2UqLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXMpOworICAgIFdFQkNPUkVfRVhQ
T1JUIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2Vyc0luUmFuZ2UoUmFuZ2Um
LCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXMpOworICAgIHZvaWQgY2xlYXJEZXNjcmlwdGlv
bk9uTWFya2Vyc0ludGVyc2VjdGluZ1JhbmdlKFJhbmdlJiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtl
clR5cGVzKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlUmVjdHNGb3JJbnZhbGlk
YXRlZE1hcmtlcnNPZlR5cGUoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcApp
bmRleCAwNWFmYWU0Yjk5Yzk3YzhkMmVmODRmMDJiNjJiZGI1MmYzNzhjYWQ1Li5lMmQ3ZmJmNmMy
Yzg5MmFmMjUwYmQyMWY4ZjYzYzhiYmNmYTFiMWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKQEAgLTE5MCwxOCArMTkw
LDE4IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFzUGVuZGluZ0NvcnJlY3Rp
b24oKSBjb25zdAogICAgIHJldHVybiBtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0
ZXJuYXRpdmU7CiB9CiAKLWJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aXNTcGVsbGlu
Z01hcmtlckFsbG93ZWQoUGFzc1JlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5nZSkgY29uc3QK
K2Jvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aXNTcGVsbGluZ01hcmtlckFsbG93ZWQo
UmFuZ2UmIG1pc3NwZWxsaW5nUmFuZ2UpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFtX2ZyYW1lLmRv
Y3VtZW50KCktPm1hcmtlcnMoKS5oYXNNYXJrZXJzKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERv
Y3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKKyAgICByZXR1cm4gIW1fZnJh
bWUuZG9jdW1lbnQoKS0+bWFya2VycygpLmhhc01hcmtlcnMobWlzc3BlbGxpbmdSYW5nZSwgRG9j
dW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwogfQogCi12b2lkIEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OnNob3coUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VUb1JlcGxhY2Us
IGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQpCit2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXI6OnNob3coUmFuZ2UmIHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50
KQogewotICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJvb3RWaWV3UmVjdEZvclJhbmdlKHJh
bmdlVG9SZXBsYWNlLmdldCgpKTsKKyAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByb290Vmll
d1JlY3RGb3JSYW5nZSgmcmFuZ2VUb1JlcGxhY2UpOwogICAgIGlmIChib3VuZGluZ0JveC5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2FsdGVybmF0aXZlVGV4dEluZm8ub3JpZ2lu
YWxUZXh0ID0gcGxhaW5UZXh0KHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKLSAgICBtX2FsdGVybmF0
aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSByYW5nZVRvUmVwbGFjZTsKKyAgICBt
X2FsdGVybmF0aXZlVGV4dEluZm8ub3JpZ2luYWxUZXh0ID0gcGxhaW5UZXh0KCZyYW5nZVRvUmVw
bGFjZSk7CisgICAgbV9hbHRlcm5hdGl2ZVRleHRJbmZvLnJhbmdlV2l0aEFsdGVybmF0aXZlID0g
JnJhbmdlVG9SZXBsYWNlOwogICAgIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5kZXRhaWxzID0gQXV0
b2NvcnJlY3Rpb25BbHRlcm5hdGl2ZURldGFpbHM6OmNyZWF0ZShyZXBsYWNlbWVudCk7CiAgICAg
bV9hbHRlcm5hdGl2ZVRleHRJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKICAgICBpZiAoQWx0ZXJuYXRp
dmVUZXh0Q2xpZW50KiBjbGllbnQgPSBhbHRlcm5hdGl2ZVRleHRDbGllbnQoKSkKQEAgLTIzNywx
NSArMjM3LDEyIEBAIFN0cmluZyBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpkaXNtaXNzU29v
bihSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0CiAgICAgcmV0dXJuIFN0cmluZygp
OwogfQogCi12b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QWx0ZXJuYXRpdmVU
ZXh0VG9SYW5nZShjb25zdCBSYW5nZSogcmFuZ2UsIGNvbnN0IFN0cmluZyYgYWx0ZXJuYXRpdmUs
IEFsdGVybmF0aXZlVGV4dFR5cGUgYWx0ZXJuYXRpdmVUeXBlLCBjb25zdCBWZWN0b3I8RG9jdW1l
bnRNYXJrZXI6Ok1hcmtlclR5cGU+JiBtYXJrZXJUeXBlc1RvQWRkKQordm9pZCBBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjphcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UoY29uc3QgUmFuZ2Um
IHJhbmdlLCBjb25zdCBTdHJpbmcmIGFsdGVybmF0aXZlLCBBbHRlcm5hdGl2ZVRleHRUeXBlIGFs
dGVybmF0aXZlVHlwZSwgY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYg
bWFya2VyVHlwZXNUb0FkZCkKIHsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm47Cisg
ICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uID0gcmFu
Z2UuY2xvbmVSYW5nZSgpOwogCi0gICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZUNvbnRh
aW5pbmdDb3JyZWN0aW9uID0gcmFuZ2UtPmNsb25lUmFuZ2UoKTsKLQotICAgIHNldFN0YXJ0KHBh
cmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIHN0YXJ0T2ZQYXJhZ3JhcGgo
cmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkpOwotICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZUNvbnRh
aW5pbmdDb3JyZWN0aW9uLmdldCgpLCBlbmRPZlBhcmFncmFwaChyYW5nZS0+ZW5kUG9zaXRpb24o
KSkpOworICAgIHNldFN0YXJ0KHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0
KCksIHN0YXJ0T2ZQYXJhZ3JhcGgocmFuZ2Uuc3RhcnRQb3NpdGlvbigpKSk7CisgICAgc2V0RW5k
KHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIGVuZE9mUGFyYWdyYXBo
KHJhbmdlLmVuZFBvc2l0aW9uKCkpKTsKIAogICAgIC8vIEFmdGVyIHdlIHJlcGxhY2UgdGhlIHdv
cmQgYXQgcmFuZ2UgcmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIHdlIG5lZWQgdG8gYWRkIG1hcmtlcnMg
dG8gdGhhdCByYW5nZS4KICAgICAvLyBIb3dldmVyLCBvbmNlIHRoZSByZXBsYWNlbWVudCB0b29r
IHBsYWNlLCB0aGUgdmFsdWUgb2YgcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgaXMgbm90IHZhbGlkIGFu
eW1vcmUuCkBAIC0yNTUsNyArMjUyLDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
OjphcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UoY29uc3QgUmFuZ2UqIHJhbmdlLAogICAgIC8v
IHdoaWNoIHNwYW5zIGZyb20gdGhlIHN0YXJ0IG9mIHBhcmFncmFwaCB0byB0aGUgc3RhcnQgcG9z
aXRpb24gb2YgcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuCiAgICAgUmVmUHRyPFJhbmdlPiBjb3JyZWN0
aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFw
aFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKSwg
cGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigpLCBwYXJh
Z3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydFBvc2l0aW9uKCkpOwogCi0gICAg
UG9zaXRpb24gc3RhcnRQb3NpdGlvbk9mUmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSByYW5nZS0+c3Rh
cnRQb3NpdGlvbigpOworICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRpb25PZlJhbmdlV2l0aEFsdGVy
bmF0aXZlID0gcmFuZ2Uuc3RhcnRQb3NpdGlvbigpOwogICAgIGlmICghc3RhcnRQb3NpdGlvbk9m
UmFuZ2VXaXRoQWx0ZXJuYXRpdmUuY29udGFpbmVyTm9kZSgpKQogICAgICAgICByZXR1cm47CiAg
ICAgYXV0byBzZXRFbmRSZXN1bHQgPSBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFz
UmFuZ2UtPnNldEVuZCgqc3RhcnRQb3NpdGlvbk9mUmFuZ2VXaXRoQWx0ZXJuYXRpdmUuY29udGFp
bmVyTm9kZSgpLCBzdGFydFBvc2l0aW9uT2ZSYW5nZVdpdGhBbHRlcm5hdGl2ZS5jb21wdXRlT2Zm
c2V0SW5Db250YWluZXJOb2RlKCkpOwpAQCAtMjY2LDExICsyNjMsMTEgQEAgdm9pZCBBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjphcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UoY29uc3QgUmFu
Z2UqIHJhbmdlLAogICAgIGludCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCA9IFRl
eHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhB
c1JhbmdlLmdldCgpKTsKIAogICAgIC8vIENsb25lIHRoZSByYW5nZSwgc2luY2UgdGhlIGNhbGxl
ciBvZiB0aGlzIG1ldGhvZCBtYXkgd2FudCB0byBrZWVwIHRoZSBvcmlnaW5hbCByYW5nZSBhcm91
bmQuCi0gICAgUmVmPFJhbmdlPiByYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IHJhbmdlLT5jbG9uZVJh
bmdlKCk7CisgICAgYXV0byByYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IHJhbmdlLmNsb25lUmFuZ2Uo
KTsKIAogICAgIENvbnRhaW5lck5vZGUmIHJvb3ROb2RlID0gcGFyYWdyYXBoUmFuZ2VDb250YWlu
aW5nQ29ycmVjdGlvbi5nZXQoKS0+c3RhcnRDb250YWluZXIoKS50cmVlU2NvcGUoKS5yb290Tm9k
ZSgpOwogICAgIGludCBwYXJhZ3JhcGhTdGFydEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxl
bmd0aChSYW5nZTo6Y3JlYXRlKHJvb3ROb2RlLmRvY3VtZW50KCksICZyb290Tm9kZSwgMCwgJnBh
cmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0Q29udGFpbmVyKCksIHBhcmFn
cmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0T2Zmc2V0KCkpLnB0cigpKTsKLSAg
ICBhcHBseUNvbW1hbmQoU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKHJhbmdlV2l0
aEFsdGVybmF0aXZlLnB0cigpLCBhbHRlcm5hdGl2ZSkpOworICAgIGFwcGx5Q29tbWFuZChTcGVs
bGluZ0NvcnJlY3Rpb25Db21tYW5kOjpjcmVhdGUocmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIGFsdGVy
bmF0aXZlKSk7CiAgICAgLy8gUmVjYWxjdWxhdGUgcHJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3Jy
ZWN0aW9uLCBzaW5jZSBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kIG1vZGlmaWVkIHRoZSBET00s
IHN1Y2ggdGhhdCB0aGUgb3JpZ2luYWwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlv
biBpcyBubyBsb25nZXIgdmFsaWQuIFJhZGFyOiAxMDMwNTMxNSBCdWd6aWxsYTogODk1MjYKICAg
ICBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uID0gVGV4dEl0ZXJhdG9yOjpyYW5n
ZUZyb21Mb2NhdGlvbkFuZExlbmd0aCgmcm9vdE5vZGUsIHBhcmFncmFwaFN0YXJ0SW5kZXgsIGNv
cnJlY3Rpb25TdGFydE9mZnNldEluUGFyYWdyYXBoICsgYWx0ZXJuYXRpdmUubGVuZ3RoKCkpOwog
ICAgIGlmICghcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbikKQEAgLTM1NSw3ICsz
NTIsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQoKQogICAg
IGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6IHsKICAgICAgICAg
aWYgKCFtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmUgfHwgcGxhaW5U
ZXh0KG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdpdGhBbHRlcm5hdGl2ZS5nZXQoKSkgIT0g
bV9hbHRlcm5hdGl2ZVRleHRJbmZvLm9yaWdpbmFsVGV4dCkKICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBTdHJpbmcgcGFyYWdyYXBoVGV4dCA9IHBsYWluVGV4dChUZXh0Q2hlY2tpbmdQYXJh
Z3JhcGgobV9hbHRlcm5hdGl2ZVRleHRJbmZvLnJhbmdlV2l0aEFsdGVybmF0aXZlKS5wYXJhZ3Jh
cGhSYW5nZSgpLmdldCgpKTsKKyAgICAgICAgU3RyaW5nIHBhcmFncmFwaFRleHQgPSBwbGFpblRl
eHQoJlRleHRDaGVja2luZ1BhcmFncmFwaChtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRo
QWx0ZXJuYXRpdmUpLnBhcmFncmFwaFJhbmdlKCkpOwogICAgICAgICBWZWN0b3I8U3RyaW5nPiBz
dWdnZXN0aW9uczsKICAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQobV9h
bHRlcm5hdGl2ZVRleHRJbmZvLm9yaWdpbmFsVGV4dCwgcGFyYWdyYXBoVGV4dCwgbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgc3VnZ2VzdGlvbnMpOwogICAgICAgICBpZiAoc3VnZ2Vz
dGlvbnMuaXNFbXB0eSgpKSB7CkBAIC00MDcsMTggKzQwNCwxOCBAQCB2b2lkIEFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OmhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KGNvbnN0IFN0cmlu
ZyYgcmVzdQogICAgIHN3aXRjaCAobV9hbHRlcm5hdGl2ZVRleHRJbmZvLnR5cGUpIHsKICAgICBj
YXNlIEFsdGVybmF0aXZlVGV4dFR5cGVDb3JyZWN0aW9uOgogICAgICAgICBpZiAocmVzdWx0Lmxl
bmd0aCgpKQotICAgICAgICAgICAgYXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKHJhbmdlV2l0
aEFsdGVybmF0aXZlLCByZXN1bHQsIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby50eXBlLCBtYXJrZXJU
eXBlc0ZvckF1dG9jb3JyZWN0aW9uKCkpOworICAgICAgICAgICAgYXBwbHlBbHRlcm5hdGl2ZVRl
eHRUb1JhbmdlKCpyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgcmVzdWx0LCBtX2FsdGVybmF0aXZlVGV4
dEluZm8udHlwZSwgbWFya2VyVHlwZXNGb3JBdXRvY29ycmVjdGlvbigpKTsKICAgICAgICAgZWxz
ZSBpZiAoIW1faXNEaXNtaXNzZWRCeUVkaXRpbmcpCiAgICAgICAgICAgICByYW5nZVdpdGhBbHRl
cm5hdGl2ZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIo
cmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIERvY3VtZW50TWFya2VyOjpSZWplY3RlZENvcnJlY3Rpb24s
IG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5vcmlnaW5hbFRleHQpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEFsdGVybmF0aXZlVGV4dFR5cGVSZXZlcnNpb246CiAgICAgY2FzZSBBbHRlcm5hdGl2
ZVRleHRUeXBlU3BlbGxpbmdTdWdnZXN0aW9uczoKICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGgo
KSkKLSAgICAgICAgICAgIGFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZShyYW5nZVdpdGhBbHRl
cm5hdGl2ZSwgcmVzdWx0LCBtX2FsdGVybmF0aXZlVGV4dEluZm8udHlwZSwgbWFya2VyVHlwZXNG
b3JSZXBsYWNlbWVudCgpKTsKKyAgICAgICAgICAgIGFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5n
ZSgqcmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIHJlc3VsdCwgbV9hbHRlcm5hdGl2ZVRleHRJbmZvLnR5
cGUsIG1hcmtlclR5cGVzRm9yUmVwbGFjZW1lbnQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgQWx0ZXJuYXRpdmVUZXh0VHlwZURpY3RhdGlvbkFsdGVybmF0aXZlczoKICAgICAgICAgaWYg
KHJlc3VsdC5sZW5ndGgoKSkKLSAgICAgICAgICAgIGFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5n
ZShyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgcmVzdWx0LCBtX2FsdGVybmF0aXZlVGV4dEluZm8udHlw
ZSwgbWFya2VyVHlwZXNGb3JBcHBsaWVkRGljdGF0aW9uQWx0ZXJuYXRpdmUoKSk7CisgICAgICAg
ICAgICBhcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UoKnJhbmdlV2l0aEFsdGVybmF0aXZlLCBy
ZXN1bHQsIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby50eXBlLCBtYXJrZXJUeXBlc0ZvckFwcGxpZWRE
aWN0YXRpb25BbHRlcm5hdGl2ZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC01MTYs
MzQgKzUxMywzMiBAQCBUZXh0Q2hlY2tlckNsaWVudCogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6dGV4dENoZWNrZXIoKQogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lkIEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJl
Y3Rpb25SZXNwb25zZSByZXNwb25zZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgUGFz
c1JlZlB0cjxSYW5nZT4gcmVwbGFjZW1lbnRSYW5nZSkKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3Bv
bnNlIHJlc3BvbnNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBSYW5nZSogcmVwbGFj
ZW1lbnRSYW5nZSkKIHsKICAgICBpZiAoYXV0byBjbGllbnQgPSBhbHRlcm5hdGl2ZVRleHRDbGll
bnQoKSkKLSAgICAgICAgY2xpZW50LT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKHJlc3Bv
bnNlLCByZXBsYWNlZFN0cmluZywgcGxhaW5UZXh0KHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCkpKTsK
KyAgICAgICAgY2xpZW50LT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKHJlc3BvbnNlLCBy
ZXBsYWNlZFN0cmluZywgcGxhaW5UZXh0KHJlcGxhY2VtZW50UmFuZ2UpKTsKIH0KIAotdm9pZCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrUmV2ZXJzZWQoUGFzc1JlZlB0cjxSYW5nZT4g
Y2hhbmdlZFJhbmdlKQordm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrUmV2ZXJz
ZWQoUmFuZ2UmIGNoYW5nZWRSYW5nZSkKIHsKLSAgICBjaGFuZ2VkUmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhjaGFuZ2VkUmFuZ2UuZ2V0
KCksIERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkLCBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKLSAgICBjaGFuZ2VkUmFuZ2Ut
PnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKGNoYW5nZWRS
YW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOworICAg
IGNoYW5nZWRSYW5nZS5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLnJlbW92
ZU1hcmtlcnMoJmNoYW5nZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQsIERv
Y3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIp
OworICAgIGNoYW5nZWRSYW5nZS5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2Vycygp
LmFkZE1hcmtlcigmY2hhbmdlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4
ZW1wdGlvbik7CiB9CiAKLXZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya0NvcnJl
Y3Rpb24oUGFzc1JlZlB0cjxSYW5nZT4gcmVwbGFjZWRSYW5nZSwgY29uc3QgU3RyaW5nJiByZXBs
YWNlZFN0cmluZykKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya0NvcnJlY3Rp
b24oUmFuZ2UmIHJlcGxhY2VkUmFuZ2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcpCiB7
Ci0gICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyJiBtYXJrZXJzID0gcmVwbGFjZWRSYW5nZS0+
c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKTsKKyAgICBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXImIG1hcmtlcnMgPSByZXBsYWNlZFJhbmdlLnN0YXJ0Q29udGFpbmVyKCkuZG9j
dW1lbnQoKS5tYXJrZXJzKCk7CiAgICAgZm9yIChhdXRvJiBtYXJrZXJUeXBlIDogbWFya2VyVHlw
ZXNGb3JBdXRvY29ycmVjdGlvbigpKSB7CiAgICAgICAgIGlmIChtYXJrZXJUeXBlID09IERvY3Vt
ZW50TWFya2VyOjpSZXBsYWNlbWVudCB8fCBtYXJrZXJUeXBlID09IERvY3VtZW50TWFya2VyOjpB
dXRvY29ycmVjdGVkKQotICAgICAgICAgICAgbWFya2Vycy5hZGRNYXJrZXIocmVwbGFjZWRSYW5n
ZS5nZXQoKSwgbWFya2VyVHlwZSwgcmVwbGFjZWRTdHJpbmcpOworICAgICAgICAgICAgbWFya2Vy
cy5hZGRNYXJrZXIoJnJlcGxhY2VkUmFuZ2UsIG1hcmtlclR5cGUsIHJlcGxhY2VkU3RyaW5nKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWFya2Vycy5hZGRNYXJrZXIocmVwbGFjZWRSYW5n
ZS5nZXQoKSwgbWFya2VyVHlwZSk7CisgICAgICAgICAgICBtYXJrZXJzLmFkZE1hcmtlcigmcmVw
bGFjZWRSYW5nZSwgbWFya2VyVHlwZSk7CiAgICAgfQogfQogCi12b2lkIEFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OnJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0
aW9uKFJhbmdlKiByYW5nZU9mQ29ycmVjdGlvbiwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNv
bnN0IFN0cmluZyYgY29ycmVjdGlvbikKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
cmVjb3JkU3BlbGxjaGVja2VyUmVzcG9uc2VGb3JNb2RpZmllZENvcnJlY3Rpb24oUmFuZ2UmIHJh
bmdlT2ZDb3JyZWN0aW9uLCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBj
b3JyZWN0aW9uKQogewotICAgIGlmICghcmFuZ2VPZkNvcnJlY3Rpb24pCi0gICAgICAgIHJldHVy
bjsKLSAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXImIG1hcmtlcnMgPSByYW5nZU9mQ29ycmVj
dGlvbi0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKTsKKyAgICBEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXImIG1hcmtlcnMgPSByYW5nZU9mQ29ycmVjdGlvbi5zdGFydENvbnRh
aW5lcigpLmRvY3VtZW50KCkubWFya2VycygpOwogICAgIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50
TWFya2VyKj4gY29ycmVjdGVkT25jZU1hcmtlcnMgPSBtYXJrZXJzLm1hcmtlcnNJblJhbmdlKHJh
bmdlT2ZDb3JyZWN0aW9uLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCk7CiAgICAgaWYg
KGNvcnJlY3RlZE9uY2VNYXJrZXJzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTU3
LDcgKzU1Miw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVjb3JkU3BlbGxj
aGVja2VyUmVzcG9uc2VGb3JNb2RpZmllZENvcnJlY3Rpb24oCiAgICAgICAgICAgICBjbGllbnQt
PnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZTo6RWRp
dGVkLCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24pOwogICAgIH0KIAotICAgIG1hcmtlcnMucmVtb3Zl
TWFya2VycyhyYW5nZU9mQ29ycmVjdGlvbiwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQs
IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJr
ZXIpOworICAgIG1hcmtlcnMucmVtb3ZlTWFya2VycygmcmFuZ2VPZkNvcnJlY3Rpb24sIERvY3Vt
ZW50TWFya2VyOjpBdXRvY29ycmVjdGVkLCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92
ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKIH0KIAogdm9pZCBBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjpkZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9u
JiBwb3NpdGlvbiwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFN0cmluZykKQEAgLTU4NywxMiArNTgy
LDEyIEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya1ByZWNlZGluZ1doaXRl
c3BhY2VGb3JEZWxldGVkQXV0b2NvcnJlY3Rpb25BCiAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT5t
YXJrZXJzKCkuYWRkTWFya2VyKHByZWNlZGluZ0NoYXJhY3RlclJhbmdlLmdldCgpLCBEb2N1bWVu
dE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uLCBtX29yaWdpbmFsU3RyaW5nRm9yTGFzdERl
bGV0ZWRBdXRvY29ycmVjdGlvbik7CiB9CiAKLWJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdChjb25zdCBUZXh0Q2hl
Y2tpbmdSZXN1bHQqIHJlc3VsdCwgUmFuZ2UqIHJhbmdlV2l0aEFsdGVybmF0aXZlLCBjb25zdCBT
dHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNlZCkKK2Jvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdChjb25zdCBUZXh0Q2hl
Y2tpbmdSZXN1bHQmIHJlc3VsdCwgUmFuZ2UmIHJhbmdlV2l0aEFsdGVybmF0aXZlLCBjb25zdCBT
dHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNlZCkKIHsKICAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXImIG1hcmtlckNvbnRyb2xsZXIgPSBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKTsKICAg
ICBpZiAobWFya2VyQ29udHJvbGxlci5oYXNNYXJrZXJzKHJhbmdlV2l0aEFsdGVybmF0aXZlLCBE
b2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpKSB7Ci0gICAgICAgIGlmIChyZXN1bHQtPnR5cGUg
PT0gVGV4dENoZWNraW5nVHlwZUNvcnJlY3Rpb24pCi0gICAgICAgICAgICByZWNvcmRTcGVsbGNo
ZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbihyYW5nZVdpdGhBbHRlcm5hdGl2ZSwg
c3RyaW5nVG9CZVJlcGxhY2VkLCByZXN1bHQtPnJlcGxhY2VtZW50KTsKKyAgICAgICAgaWYgKHJl
c3VsdC50eXBlID09IFRleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uKQorICAgICAgICAgICAgcmVj
b3JkU3BlbGxjaGVja2VyUmVzcG9uc2VGb3JNb2RpZmllZENvcnJlY3Rpb24ocmFuZ2VXaXRoQWx0
ZXJuYXRpdmUsIHN0cmluZ1RvQmVSZXBsYWNlZCwgcmVzdWx0LnJlcGxhY2VtZW50KTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNjAyLDExICs1OTcsMTEgQEAgYm9vbCBBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5
UmVzdWx0KGNvbnN0IFQKICAgICBpZiAobWFya2VyQ29udHJvbGxlci5oYXNNYXJrZXJzKHJhbmdl
V2l0aEFsdGVybmF0aXZlLCBEb2N1bWVudE1hcmtlcjo6QWNjZXB0ZWRDYW5kaWRhdGUpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBQb3NpdGlvbiBiZWdpbm5pbmdPZlJhbmdlID0gcmFu
Z2VXaXRoQWx0ZXJuYXRpdmUtPnN0YXJ0UG9zaXRpb24oKTsKKyAgICBQb3NpdGlvbiBiZWdpbm5p
bmdPZlJhbmdlID0gcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuc3RhcnRQb3NpdGlvbigpOwogICAgIFBv
c2l0aW9uIHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uID0gYmVnaW5uaW5nT2ZSYW5nZS5wcmV2
aW91cygpOwotICAgIFJlZlB0cjxSYW5nZT4gcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBSYW5n
ZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9u
LCBiZWdpbm5pbmdPZlJhbmdlKTsKKyAgICBhdXRvIHByZWNlZGluZ0NoYXJhY3RlclJhbmdlID0g
UmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBwcmVjZWRpbmdDaGFyYWN0ZXJQb3Np
dGlvbiwgYmVnaW5uaW5nT2ZSYW5nZSk7CiAKLSAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1h
cmtlcio+IG1hcmtlcnMgPSBtYXJrZXJDb250cm9sbGVyLm1hcmtlcnNJblJhbmdlKHByZWNlZGlu
Z0NoYXJhY3RlclJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0
aW9uKTsKKyAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBtYXJr
ZXJDb250cm9sbGVyLm1hcmtlcnNJblJhbmdlKHByZWNlZGluZ0NoYXJhY3RlclJhbmdlLCBEb2N1
bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uKTsKICAgICBmb3IgKGNvbnN0IGF1dG8q
IG1hcmtlciA6IG1hcmtlcnMpIHsKICAgICAgICAgaWYgKG1hcmtlci0+ZGVzY3JpcHRpb24oKSA9
PSBzdHJpbmdUb0JlUmVwbGFjZWQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC03MjMs
MTEgKzcxOCwxMSBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5RGljdGF0
aW9uQWx0ZXJuYXRpdmUoY29uc3QgU3RyaW5nJiBhbHRlcm5hdAogICAgIGlmICghc2VsZWN0aW9u
IHx8ICFlZGl0b3Iuc2hvdWxkSW5zZXJ0VGV4dChhbHRlcm5hdGl2ZVN0cmluZywgc2VsZWN0aW9u
LmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAgICAgIHJldHVybjsKICAg
ICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXImIG1hcmtlcnMgPSBzZWxlY3Rpb24tPnN0YXJ0Q29u
dGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCk7Ci0gICAgVmVjdG9yPFJlbmRlcmVkRG9jdW1l
bnRNYXJrZXIqPiBkaWN0YXRpb25BbHRlcm5hdGl2ZXNNYXJrZXJzID0gbWFya2Vycy5tYXJrZXJz
SW5SYW5nZShzZWxlY3Rpb24uZ2V0KCksIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25BbHRlcm5h
dGl2ZXMpOworICAgIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gZGljdGF0aW9uQWx0
ZXJuYXRpdmVzTWFya2VycyA9IG1hcmtlcnMubWFya2Vyc0luUmFuZ2UoKnNlbGVjdGlvbiwgRG9j
dW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlcyk7CiAgICAgZm9yIChhdXRvKiBtYXJr
ZXIgOiBkaWN0YXRpb25BbHRlcm5hdGl2ZXNNYXJrZXJzKQogICAgICAgICByZW1vdmVEaWN0YXRp
b25BbHRlcm5hdGl2ZXNGb3JNYXJrZXIoKm1hcmtlcik7CiAKLSAgICBhcHBseUFsdGVybmF0aXZl
VGV4dFRvUmFuZ2Uoc2VsZWN0aW9uLmdldCgpLCBhbHRlcm5hdGl2ZVN0cmluZywgQWx0ZXJuYXRp
dmVUZXh0VHlwZURpY3RhdGlvbkFsdGVybmF0aXZlcywgbWFya2VyVHlwZXNGb3JBcHBsaWVkRGlj
dGF0aW9uQWx0ZXJuYXRpdmUoKSk7CisgICAgYXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKCpz
ZWxlY3Rpb24sIGFsdGVybmF0aXZlU3RyaW5nLCBBbHRlcm5hdGl2ZVRleHRUeXBlRGljdGF0aW9u
QWx0ZXJuYXRpdmVzLCBtYXJrZXJUeXBlc0ZvckFwcGxpZWREaWN0YXRpb25BbHRlcm5hdGl2ZSgp
KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGFsdGVybmF0aXZlU3RyaW5nKTsKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIu
aAppbmRleCBjNTgzNTAzZWFhMjI2NjY3NTNiMjAyM2IzZTU2YmJkNTE2MTQxYWIyLi41ZjY2NWE4
ZDNlYWU0MTRjMjdkZjZkZTUyZjRhMDljNjU3NTA2YzgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaApAQCAtODAsNyArODAsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzdG9wQWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigpIFVOTEVTU19F
TkFCTEVEKHsgfSkKIAogICAgIHZvaWQgZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJu
YXRpdmVUZXh0KSBVTkxFU1NfRU5BQkxFRCh7IH0pCi0gICAgdm9pZCBzaG93KFBhc3NSZWZQdHI8
UmFuZ2U+IHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50KSBVTkxFU1Nf
RU5BQkxFRCh7IFVOVVNFRF9QQVJBTShyYW5nZVRvUmVwbGFjZSk7IFVOVVNFRF9QQVJBTShyZXBs
YWNlbWVudCk7IH0pCisgICAgdm9pZCBzaG93KFJhbmdlJiByYW5nZVRvUmVwbGFjZSwgY29uc3Qg
U3RyaW5nJiByZXBsYWNlbWVudCkgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmFuZ2VU
b1JlcGxhY2UpOyBVTlVTRURfUEFSQU0ocmVwbGFjZW1lbnQpOyB9KQogCiAgICAgLy8gUmV0dXJu
IHRydWUgaWYgY29ycmVjdGlvbiB3YXMgYXBwbGllZCwgZmFsc2Ugb3RoZXJ3aXNlLgogICAgIGJv
b2wgYXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKSBVTkxFU1Nf
RU5BQkxFRCh7IHJldHVybiBmYWxzZTsgfSkKQEAgLTk3LDE2ICs5NywxNiBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBoYW5kbGVDYW5jZWxPcGVyYXRpb24oKSBVTkxFU1NfRU5BQkxFRCh7IH0pCiAKICAg
ICBib29sIGhhc1BlbmRpbmdDb3JyZWN0aW9uKCkgY29uc3QgVU5MRVNTX0VOQUJMRUQoeyByZXR1
cm4gZmFsc2U7IH0pCi0gICAgYm9vbCBpc1NwZWxsaW5nTWFya2VyQWxsb3dlZChQYXNzUmVmUHRy
PFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlKSBjb25zdCBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9Q
QVJBTShtaXNzcGVsbGluZ1JhbmdlKTsgcmV0dXJuIHRydWU7IH0pCisgICAgYm9vbCBpc1NwZWxs
aW5nTWFya2VyQWxsb3dlZChSYW5nZSYgbWlzc3BlbGxpbmdSYW5nZSkgY29uc3QgVU5MRVNTX0VO
QUJMRUQoeyBVTlVTRURfUEFSQU0obWlzc3BlbGxpbmdSYW5nZSk7IHJldHVybiB0cnVlOyB9KQog
ICAgIGJvb2wgaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkgVU5MRVNTX0VO
QUJMRUQoeyByZXR1cm4gZmFsc2U7IH0pCiAgICAgYm9vbCBzaG91bGRSZW1vdmVNYXJrZXJzVXBv
bkVkaXRpbmcoKTsKIAotICAgIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRv
Y29ycmVjdGlvblJlc3BvbnNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBQYXNzUmVm
UHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJB
TShyZXBsYWNlZFN0cmluZyk7IFVOVVNFRF9QQVJBTShyZXBsYWNlbWVudFJhbmdlKTsgfSkKLSAg
ICB2b2lkIG1hcmtSZXZlcnNlZChQYXNzUmVmUHRyPFJhbmdlPiBjaGFuZ2VkUmFuZ2UpIFVOTEVT
U19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKGNoYW5nZWRSYW5nZSk7IH0pCi0gICAgdm9pZCBtYXJr
Q29ycmVjdGlvbihQYXNzUmVmUHRyPFJhbmdlPiByZXBsYWNlZFJhbmdlLCBjb25zdCBTdHJpbmcm
IHJlcGxhY2VkU3RyaW5nKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShyZXBsYWNlZFJh
bmdlKTsgVU5VU0VEX1BBUkFNKHJlcGxhY2VkU3RyaW5nKTsgfSkKKyAgICB2b2lkIHJlY29yZEF1
dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZSwgY29uc3QgU3RyaW5n
JiByZXBsYWNlZFN0cmluZywgUmFuZ2UqIHJlcGxhY2VtZW50UmFuZ2UpIFVOTEVTU19FTkFCTEVE
KHsgVU5VU0VEX1BBUkFNKHJlcGxhY2VkU3RyaW5nKTsgVU5VU0VEX1BBUkFNKHJlcGxhY2VtZW50
UmFuZ2UpOyB9KQorICAgIHZvaWQgbWFya1JldmVyc2VkKFJhbmdlJiBjaGFuZ2VkUmFuZ2UpIFVO
TEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKGNoYW5nZWRSYW5nZSk7IH0pCisgICAgdm9pZCBt
YXJrQ29ycmVjdGlvbihSYW5nZSYgcmVwbGFjZWRSYW5nZSwgY29uc3QgU3RyaW5nJiByZXBsYWNl
ZFN0cmluZykgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmVwbGFjZWRSYW5nZSk7IFVO
VVNFRF9QQVJBTShyZXBsYWNlZFN0cmluZyk7IH0pCiAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIHJl
dHVybnMgZmFsc2UgaWYgdGhlIHJlcGxhY2VtZW50IHNob3VsZCBub3QgYmUgY2FycmllZCBvdXQu
Ci0gICAgYm9vbCBwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KGNvbnN0
IFRleHRDaGVja2luZ1Jlc3VsdCosIFJhbmdlKiByYW5nZVRvQmVSZXBsYWNlZCwgY29uc3QgU3Ry
aW5nJiBzdHJpbmdUb0JlUmVwbGFjZWQpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJh
bmdlVG9CZVJlcGxhY2VkKTsgVU5VU0VEX1BBUkFNKHN0cmluZ1RvQmVSZXBsYWNlZCk7IHJldHVy
biB0cnVlOyB9KTsKKyAgICBib29sIHByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlS
ZXN1bHQoY29uc3QgVGV4dENoZWNraW5nUmVzdWx0JiwgUmFuZ2UmIHJhbmdlVG9CZVJlcGxhY2Vk
LCBjb25zdCBTdHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNlZCkgVU5MRVNTX0VOQUJMRUQoeyBVTlVT
RURfUEFSQU0ocmFuZ2VUb0JlUmVwbGFjZWQpOyBVTlVTRURfUEFSQU0oc3RyaW5nVG9CZVJlcGxh
Y2VkKTsgcmV0dXJuIHRydWU7IH0pOwogICAgIHZvaWQgZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQ
b3NpdGlvbihjb25zdCBQb3NpdGlvbiYsIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxTdHJpbmcpIFVO
TEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKG9yaWdpbmFsU3RyaW5nKTsgfSkKIAogICAgIGJv
b2wgaW5zZXJ0RGljdGF0ZWRUZXh0KGNvbnN0IFN0cmluZyYsIGNvbnN0IFZlY3RvcjxEaWN0YXRp
b25BbHRlcm5hdGl2ZT4mLCBFdmVudCopOwpAQCAtMTE3LDkgKzExNyw5IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAjaWYgVVNFKEFVVE9DT1JSRUNUSU9OX1BBTkVMKQogICAgIFN0cmluZyBkaXNtaXNz
U29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0KTsKLSAgICB2b2lkIGFwcGx5
QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZShjb25zdCBSYW5nZSosIGNvbnN0IFN0cmluZyYgYWx0ZXJu
YXRpdmUsIEFsdGVybmF0aXZlVGV4dFR5cGUsIGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6
TWFya2VyVHlwZT4mKTsKKyAgICB2b2lkIGFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZShjb25z
dCBSYW5nZSYsIGNvbnN0IFN0cmluZyYgYWx0ZXJuYXRpdmUsIEFsdGVybmF0aXZlVGV4dFR5cGUs
IGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mKTsKICAgICB2b2lkIHRp
bWVyRmlyZWQoKTsKLSAgICB2b2lkIHJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZp
ZWRDb3JyZWN0aW9uKFJhbmdlKiByYW5nZU9mQ29ycmVjdGlvbiwgY29uc3QgU3RyaW5nJiBjb3Jy
ZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbik7CisgICAgdm9pZCByZWNvcmRTcGVsbGNo
ZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbihSYW5nZSYgcmFuZ2VPZkNvcnJlY3Rp
b24sIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pOwog
ICAgIFN0cmluZyBtYXJrZXJEZXNjcmlwdGlvbkZvckFwcGxpZWRBbHRlcm5hdGl2ZVRleHQoQWx0
ZXJuYXRpdmVUZXh0VHlwZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUpOwogCiAgICAgYm9v
bCBzaG91bGRTdGFydFRpbWVyRm9yKGNvbnN0IERvY3VtZW50TWFya2VyJiwgaW50IGVuZE9mZnNl
dCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVD
b21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3Bw
CmluZGV4IDFlZDk2ZGJlNjZlYmI5MTNlMGEyODQ4MjkxMDQ0MDlkNmI4NmI4YmQuLmFiNzFiMWE2
YmM0N2JlZjJlY2I1NGI1NTEyYzVkODljYzNiZTZiZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCkBAIC0xMTQsMTIgKzExNCwxMiBAQCBib29sIGlz
RW1wdHlGb250VGFnKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIFNob3VsZFN0eWxlQXR0cmlidXRl
QmVFbXB0eSBzaG91bGRTdAogICAgIHJldHVybiBoYXNOb0F0dHJpYnV0ZU9yT25seVN0eWxlQXR0
cmlidXRlKGRvd25jYXN0PEhUTUxGb250RWxlbWVudD4oZWxlbWVudCksIHNob3VsZFN0eWxlQXR0
cmlidXRlQmVFbXB0eSk7CiB9CiAKLXN0YXRpYyBSZWZQdHI8SFRNTEVsZW1lbnQ+IGNyZWF0ZUZv
bnRFbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCkKK3N0YXRpYyBSZWY8SFRNTEVsZW1lbnQ+IGNy
ZWF0ZUZvbnRFbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCkKIHsKICAgICByZXR1cm4gY3JlYXRl
SFRNTEVsZW1lbnQoZG9jdW1lbnQsIGZvbnRUYWcpOwogfQogCi1SZWZQdHI8SFRNTEVsZW1lbnQ+
IGNyZWF0ZVN0eWxlU3BhbkVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQorUmVmPEhUTUxFbGVt
ZW50PiBjcmVhdGVTdHlsZVNwYW5FbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCkKIHsKICAgICBy
ZXR1cm4gY3JlYXRlSFRNTEVsZW1lbnQoZG9jdW1lbnQsIHNwYW5UYWcpOwogfQpAQCAtMTQ2LDE0
ICsxNDYsMTQgQEAgQXBwbHlTdHlsZUNvbW1hbmQ6OkFwcGx5U3R5bGVDb21tYW5kKERvY3VtZW50
JiBkb2N1bWVudCwgY29uc3QgRWRpdGluZ1N0eWxlKiBzdHkKIHsKIH0KIAotQXBwbHlTdHlsZUNv
bW1hbmQ6OkFwcGx5U3R5bGVDb21tYW5kKFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCwgYm9v
bCByZW1vdmVPbmx5LCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCitBcHBseVN0eWxlQ29tbWFu
ZDo6QXBwbHlTdHlsZUNvbW1hbmQoUmVmPEVsZW1lbnQ+JiYgZWxlbWVudCwgYm9vbCByZW1vdmVP
bmx5LCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiAgICAgOiBDb21wb3NpdGVFZGl0Q29tbWFu
ZChlbGVtZW50LT5kb2N1bWVudCgpLCBlZGl0aW5nQWN0aW9uKQogICAgICwgbV9zdHlsZShFZGl0
aW5nU3R5bGU6OmNyZWF0ZSgpKQogICAgICwgbV9wcm9wZXJ0eUxldmVsKFByb3BlcnR5RGVmYXVs
dCkKICAgICAsIG1fc3RhcnQoZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKS5kb3duc3RyZWFtKCkp
CiAgICAgLCBtX2VuZChlbmRpbmdTZWxlY3Rpb24oKS5lbmQoKS51cHN0cmVhbSgpKQogICAgICwg
bV91c2VFbmRpbmdTZWxlY3Rpb24odHJ1ZSkKLSAgICAsIG1fc3R5bGVkSW5saW5lRWxlbWVudChl
bGVtZW50KQorICAgICwgbV9zdHlsZWRJbmxpbmVFbGVtZW50KFdURk1vdmUoZWxlbWVudCkpCiAg
ICAgLCBtX3JlbW92ZU9ubHkocmVtb3ZlT25seSkKIHsKIH0KQEAgLTI5MCw3ICsyOTAsNyBAQCB2
b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUJsb2NrU3R5bGUoRWRpdGluZ1N0eWxlICpzdHls
ZSkKICAgICAgICAgdXBkYXRlU3RhcnRFbmQoc3RhcnRSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBl
bmRSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8TXV0YWJs
ZVN0eWxlUHJvcGVydGllcz4gY29weVN0eWxlT3JDcmVhdGVFbXB0eShjb25zdCBTdHlsZVByb3Bl
cnRpZXMqIHN0eWxlKQorc3RhdGljIFJlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBjb3B5U3R5
bGVPckNyZWF0ZUVtcHR5KGNvbnN0IFN0eWxlUHJvcGVydGllcyogc3R5bGUpCiB7CiAgICAgaWYg
KCFzdHlsZSkKICAgICAgICAgcmV0dXJuIE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgp
OwpAQCAtMzk5LDcgKzM5OSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5UmVsYXRp
dmVGb250U3R5bGVDaGFuZ2UoRWRpdGluZ1N0eWxlKiBzdHlsZSkKICAgICAgICAgICAgIC8vIExh
c3Qgc3R5bGVkIG5vZGUgd2FzIG5vdCBwYXJlbnQgbm9kZSBvZiB0aGlzIHRleHQgbm9kZSwgYnV0
IHdlIHdpc2ggdG8gc3R5bGUgdGhpcwogICAgICAgICAgICAgLy8gdGV4dCBub2RlLiBUbyBtYWtl
IHRoaXMgcG9zc2libGUsIGFkZCBhIHN0eWxlIHNwYW4gdG8gc3Vycm91bmQgdGhpcyB0ZXh0IG5v
ZGUuCiAgICAgICAgICAgICBhdXRvIHNwYW4gPSBjcmVhdGVTdHlsZVNwYW5FbGVtZW50KGRvY3Vt
ZW50KCkpOwotICAgICAgICAgICAgc3Vycm91bmROb2RlUmFuZ2VXaXRoRWxlbWVudChub2RlLCBu
b2RlLCBzcGFuLmdldCgpKTsKKyAgICAgICAgICAgIHN1cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1l
bnQoKm5vZGUsICpub2RlLCBzcGFuLmNvcHlSZWYoKSk7CiAgICAgICAgICAgICBlbGVtZW50ID0g
V1RGTW92ZShzcGFuKTsKICAgICAgICAgfSAgZWxzZSB7CiAgICAgICAgICAgICAvLyBPbmx5IGhh
bmRsZSBIVE1MIGVsZW1lbnRzIGFuZCB0ZXh0IG5vZGVzLgpAQCAtNzI3LDcgKzcyNyw3IEBAIHZv
aWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmZpeFJhbmdlQW5kQXBwbHlJbmxpbmVTdHlsZShFZGl0aW5n
U3R5bGUqIHN0eWxlLCBjb25zdCBQCiAgICAgICAgICAgICBzdGFydE5vZGUgPSBzdGFydE5vZGUt
PnBhcmVudE5vZGUoKTsKICAgICB9CiAKLSAgICBhcHBseUlubGluZVN0eWxlVG9Ob2RlUmFuZ2Uo
c3R5bGUsIHN0YXJ0Tm9kZSwgcGFzdEVuZE5vZGUpOworICAgIGFwcGx5SW5saW5lU3R5bGVUb05v
ZGVSYW5nZShzdHlsZSwgKnN0YXJ0Tm9kZSwgcGFzdEVuZE5vZGUpOwogfQogCiBzdGF0aWMgYm9v
bCBjb250YWluc05vbkVkaXRhYmxlUmVnaW9uKE5vZGUmIG5vZGUpCkBAIC03NjYsNyArNzY2LDcg
QEAgc3RydWN0IElubGluZVJ1blRvQXBwbHlTdHlsZSB7CiAgICAgU3R5bGVDaGFuZ2UgY2hhbmdl
OwogfTsKIAotdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRvTm9kZVJh
bmdlKEVkaXRpbmdTdHlsZSogc3R5bGUsIFBhc3NSZWZQdHI8Tm9kZT4gc3RhcnROb2RlLCBQYXNz
UmVmUHRyPE5vZGU+IHBhc3RFbmROb2RlKQordm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJ
bmxpbmVTdHlsZVRvTm9kZVJhbmdlKEVkaXRpbmdTdHlsZSogc3R5bGUsIE5vZGUmIHN0YXJ0Tm9k
ZSwgTm9kZSogcGFzdEVuZE5vZGUpCiB7CiAgICAgaWYgKG1fcmVtb3ZlT25seSkKICAgICAgICAg
cmV0dXJuOwpAQCAtNzc0LDcgKzc3NCw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5
SW5saW5lU3R5bGVUb05vZGVSYW5nZShFZGl0aW5nU3R5bGUqIHN0eWxlLCBQYXNzUmVmCiAgICAg
ZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAogICAg
IFZlY3RvcjxJbmxpbmVSdW5Ub0FwcGx5U3R5bGU+IHJ1bnM7Ci0gICAgUmVmUHRyPE5vZGU+IG5v
ZGUgPSBzdGFydE5vZGU7CisgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSAmc3RhcnROb2RlOwogICAg
IGZvciAoUmVmUHRyPE5vZGU+IG5leHQ7IG5vZGUgJiYgbm9kZSAhPSBwYXN0RW5kTm9kZTsgbm9k
ZSA9IG5leHQpIHsKICAgICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpOwog
CkBAIC04MDEsNyArODAxLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVT
dHlsZVRvTm9kZVJhbmdlKEVkaXRpbmdTdHlsZSogc3R5bGUsIFBhc3NSZWYKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgaWYgKG5vZGUtPmhhc0NoaWxkTm9kZXMoKSkg
ewotICAgICAgICAgICAgaWYgKG5vZGUtPmNvbnRhaW5zKHBhc3RFbmROb2RlLmdldCgpKSB8fCBj
b250YWluc05vbkVkaXRhYmxlUmVnaW9uKCpub2RlKSB8fCAhbm9kZS0+cGFyZW50Tm9kZSgpLT5o
YXNFZGl0YWJsZVN0eWxlKCkpCisgICAgICAgICAgICBpZiAobm9kZS0+Y29udGFpbnMocGFzdEVu
ZE5vZGUpIHx8IGNvbnRhaW5zTm9uRWRpdGFibGVSZWdpb24oKm5vZGUpIHx8ICFub2RlLT5wYXJl
bnROb2RlKCktPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIGlmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQoKm5vZGUpKSB7CiAgICAgICAg
ICAgICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKCpub2Rl
KTsKQEAgLTgxMiw3ICs4MTIsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGlu
ZVN0eWxlVG9Ob2RlUmFuZ2UoRWRpdGluZ1N0eWxlKiBzdHlsZSwgUGFzc1JlZgogICAgICAgICBO
b2RlKiBydW5TdGFydCA9IG5vZGUuZ2V0KCk7CiAgICAgICAgIE5vZGUqIHJ1bkVuZCA9IG5vZGUu
Z2V0KCk7CiAgICAgICAgIE5vZGUqIHNpYmxpbmcgPSBub2RlLT5uZXh0U2libGluZygpOwotICAg
ICAgICB3aGlsZSAoc2libGluZyAmJiBzaWJsaW5nICE9IHBhc3RFbmROb2RlICYmICFzaWJsaW5n
LT5jb250YWlucyhwYXN0RW5kTm9kZS5nZXQoKSkgJiYgKCFpc0Jsb2NrKHNpYmxpbmcpIHx8IHNp
YmxpbmctPmhhc1RhZ05hbWUoYnJUYWcpKSAmJiAhY29udGFpbnNOb25FZGl0YWJsZVJlZ2lvbigq
c2libGluZykpIHsKKyAgICAgICAgd2hpbGUgKHNpYmxpbmcgJiYgc2libGluZyAhPSBwYXN0RW5k
Tm9kZSAmJiAhc2libGluZy0+Y29udGFpbnMocGFzdEVuZE5vZGUpICYmICghaXNCbG9jayhzaWJs
aW5nKSB8fCBzaWJsaW5nLT5oYXNUYWdOYW1lKGJyVGFnKSkgJiYgIWNvbnRhaW5zTm9uRWRpdGFi
bGVSZWdpb24oKnNpYmxpbmcpKSB7CiAgICAgICAgICAgICBydW5FbmQgPSBzaWJsaW5nOwogICAg
ICAgICAgICAgc2libGluZyA9IHJ1bkVuZC0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgfQpAQCAt
ODI2LDkgKzgyNiw5IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVU
b05vZGVSYW5nZShFZGl0aW5nU3R5bGUqIHN0eWxlLCBQYXNzUmVmCiAgICAgfQogCiAgICAgZm9y
IChhdXRvJiBydW4gOiBydW5zKSB7Ci0gICAgICAgIHJlbW92ZUNvbmZsaWN0aW5nSW5saW5lU3R5
bGVGcm9tUnVuKHN0eWxlLCBydW4uc3RhcnQsIHJ1bi5lbmQsIHJ1bi5wYXN0RW5kTm9kZSk7Cisg
ICAgICAgIHJlbW92ZUNvbmZsaWN0aW5nSW5saW5lU3R5bGVGcm9tUnVuKHN0eWxlLCBydW4uc3Rh
cnQsIHJ1bi5lbmQsIHJ1bi5wYXN0RW5kTm9kZS5nZXQoKSk7CiAgICAgICAgIGlmIChydW4uc3Rh
cnRBbmRFbmRBcmVTdGlsbEluRG9jdW1lbnQoKSkKLSAgICAgICAgICAgIHJ1bi5wb3NpdGlvbkZv
clN0eWxlQ29tcHV0YXRpb24gPSBwb3NpdGlvblRvQ29tcHV0ZUlubGluZVN0eWxlQ2hhbmdlKHJ1
bi5zdGFydCwgcnVuLmR1bW15RWxlbWVudCk7CisgICAgICAgICAgICBydW4ucG9zaXRpb25Gb3JT
dHlsZUNvbXB1dGF0aW9uID0gcG9zaXRpb25Ub0NvbXB1dGVJbmxpbmVTdHlsZUNoYW5nZSgqcnVu
LnN0YXJ0LCBydW4uZHVtbXlFbGVtZW50KTsKICAgICB9CiAKICAgICBkb2N1bWVudCgpLnVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwpAQCAtODQwLDcgKzg0MCw3IEBAIHZv
aWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVUb05vZGVSYW5nZShFZGl0aW5n
U3R5bGUqIHN0eWxlLCBQYXNzUmVmCiAgICAgICAgIGlmIChydW4uZHVtbXlFbGVtZW50KQogICAg
ICAgICAgICAgcmVtb3ZlTm9kZShydW4uZHVtbXlFbGVtZW50KTsKICAgICAgICAgaWYgKHJ1bi5z
dGFydEFuZEVuZEFyZVN0aWxsSW5Eb2N1bWVudCgpKQotICAgICAgICAgICAgYXBwbHlJbmxpbmVT
dHlsZUNoYW5nZShXVEZNb3ZlKHJ1bi5zdGFydCksIFdURk1vdmUocnVuLmVuZCksIHJ1bi5jaGFu
Z2UsIEFkZFN0eWxlZEVsZW1lbnQpOworICAgICAgICAgICAgYXBwbHlJbmxpbmVTdHlsZUNoYW5n
ZShydW4uc3RhcnQucmVsZWFzZU5vbk51bGwoKSwgcnVuLmVuZC5yZWxlYXNlTm9uTnVsbCgpLCBy
dW4uY2hhbmdlLCBBZGRTdHlsZWRFbGVtZW50KTsKICAgICB9CiB9CiAKQEAgLTg2NiwxMyArODY2
LDEzIEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnNob3VsZEFwcGx5SW5saW5lU3R5bGVUb1J1
bihFZGl0aW5nU3R5bGUqIHN0eWxlLCBOb2RlKiByCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12
b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVDb25mbGljdGluZ0lubGluZVN0eWxlRnJvbVJ1
bihFZGl0aW5nU3R5bGUqIHN0eWxlLCBSZWZQdHI8Tm9kZT4mIHJ1blN0YXJ0LCBSZWZQdHI8Tm9k
ZT4mIHJ1bkVuZCwgUGFzc1JlZlB0cjxOb2RlPiBwYXN0RW5kTm9kZSkKK3ZvaWQgQXBwbHlTdHls
ZUNvbW1hbmQ6OnJlbW92ZUNvbmZsaWN0aW5nSW5saW5lU3R5bGVGcm9tUnVuKEVkaXRpbmdTdHls
ZSogc3R5bGUsIFJlZlB0cjxOb2RlPiYgcnVuU3RhcnQsIFJlZlB0cjxOb2RlPiYgcnVuRW5kLCBO
b2RlKiBwYXN0RW5kTm9kZSkKIHsKICAgICBBU1NFUlQocnVuU3RhcnQgJiYgcnVuRW5kKTsKICAg
ICBSZWZQdHI8Tm9kZT4gbmV4dCA9IHJ1blN0YXJ0OwogICAgIGZvciAoUmVmUHRyPE5vZGU+IG5v
ZGUgPSBuZXh0OyBub2RlICYmIG5vZGUtPmlzQ29ubmVjdGVkKCkgJiYgbm9kZSAhPSBwYXN0RW5k
Tm9kZTsgbm9kZSA9IG5leHQpIHsKICAgICAgICAgaWYgKGVkaXRpbmdJZ25vcmVzQ29udGVudCgq
bm9kZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+Y29udGFpbnMocGFzdEVuZE5vZGUu
Z2V0KCkpKTsKKyAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+Y29udGFpbnMocGFzdEVuZE5vZGUp
KTsKICAgICAgICAgICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJl
bigqbm9kZSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJz
YWw6Om5leHQoKm5vZGUpOwpAQCAtODgzLDcgKzg4Myw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1h
bmQ6OnJlbW92ZUNvbmZsaWN0aW5nSW5saW5lU3R5bGVGcm9tUnVuKEVkaXRpbmdTdHlsZSogc3R5
bGUsCiAgICAgICAgIFJlZlB0cjxOb2RlPiBwcmV2aW91c1NpYmxpbmcgPSBub2RlLT5wcmV2aW91
c1NpYmxpbmcoKTsKICAgICAgICAgUmVmUHRyPE5vZGU+IG5leHRTaWJsaW5nID0gbm9kZS0+bmV4
dFNpYmxpbmcoKTsKICAgICAgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IHBhcmVudCA9IG5vZGUt
PnBhcmVudE5vZGUoKTsKLSAgICAgICAgcmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudChzdHls
ZSwgZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KG5vZGUuZ2V0KCkpLCBSZW1vdmVBbHdheXMpOworICAg
ICAgICByZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KHN0eWxlLCBkb3duY2FzdDxIVE1MRWxl
bWVudD4oKm5vZGUpLCBSZW1vdmVBbHdheXMpOwogICAgICAgICBpZiAoIW5vZGUtPmlzQ29ubmVj
dGVkKCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBtaWdodCBuZWVkIHRvIHVwZGF0ZSB0
aGUgc3RhcnQgYW5kIHRoZSBlbmQgb2YgY3VycmVudCBzZWxlY3Rpb24gaGVyZSBidXQgbmVlZCBh
IHRlc3QuCiAgICAgICAgICAgICBpZiAocnVuU3RhcnQgPT0gbm9kZSkKQEAgLTg5NCwzMiArODk0
LDMwIEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUNvbmZsaWN0aW5nSW5saW5lU3R5
bGVGcm9tUnVuKEVkaXRpbmdTdHlsZSogc3R5bGUsCiAgICAgfQogfQogCi1ib29sIEFwcGx5U3R5
bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KEVkaXRpbmdTdHlsZSogc3R5
bGUsIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGVsZW1lbnQsIElubGluZVN0eWxlUmVtb3ZhbE1v
ZGUgbW9kZSwgRWRpdGluZ1N0eWxlKiBleHRyYWN0ZWRTdHlsZSkKK2Jvb2wgQXBwbHlTdHlsZUNv
bW1hbmQ6OnJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoRWRpdGluZ1N0eWxlKiBzdHlsZSwg
SFRNTEVsZW1lbnQmIGVsZW1lbnQsIElubGluZVN0eWxlUmVtb3ZhbE1vZGUgbW9kZSwgRWRpdGlu
Z1N0eWxlKiBleHRyYWN0ZWRTdHlsZSkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCk7Ci0KLSAgICBp
ZiAoIWVsZW1lbnQtPnBhcmVudE5vZGUoKSB8fCAhaXNFZGl0YWJsZU5vZGUoKmVsZW1lbnQtPnBh
cmVudE5vZGUoKSkpCisgICAgaWYgKCFlbGVtZW50LnBhcmVudE5vZGUoKSB8fCAhaXNFZGl0YWJs
ZU5vZGUoKmVsZW1lbnQucGFyZW50Tm9kZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgaWYgKGlzU3R5bGVkSW5saW5lRWxlbWVudFRvUmVtb3ZlKGVsZW1lbnQuZ2V0KCkpKSB7Cisg
ICAgaWYgKGlzU3R5bGVkSW5saW5lRWxlbWVudFRvUmVtb3ZlKCZlbGVtZW50KSkgewogICAgICAg
ICBpZiAobW9kZSA9PSBSZW1vdmVOb25lKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIGlmIChleHRyYWN0ZWRTdHlsZSkKLSAgICAgICAgICAgIGV4dHJhY3RlZFN0eWxlLT5tZXJn
ZUlubGluZVN0eWxlT2ZFbGVtZW50KGVsZW1lbnQuZ2V0KCksIEVkaXRpbmdTdHlsZTo6T3ZlcnJp
ZGVWYWx1ZXMpOwotICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKGVsZW1lbnQp
OworICAgICAgICAgICAgZXh0cmFjdGVkU3R5bGUtPm1lcmdlSW5saW5lU3R5bGVPZkVsZW1lbnQo
JmVsZW1lbnQsIEVkaXRpbmdTdHlsZTo6T3ZlcnJpZGVWYWx1ZXMpOworICAgICAgICByZW1vdmVO
b2RlUHJlc2VydmluZ0NoaWxkcmVuKCZlbGVtZW50KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCiAgICAgYm9vbCByZW1vdmVkID0gZmFsc2U7Ci0gICAgaWYgKHJlbW92ZUltcGxpY2l0
bHlTdHlsZWRFbGVtZW50KHN0eWxlLCBlbGVtZW50LmdldCgpLCBtb2RlLCBleHRyYWN0ZWRTdHls
ZSkpCisgICAgaWYgKHJlbW92ZUltcGxpY2l0bHlTdHlsZWRFbGVtZW50KHN0eWxlLCAmZWxlbWVu
dCwgbW9kZSwgZXh0cmFjdGVkU3R5bGUpKQogICAgICAgICByZW1vdmVkID0gdHJ1ZTsKIAotICAg
IGlmICghZWxlbWVudC0+aXNDb25uZWN0ZWQoKSkKKyAgICBpZiAoIWVsZW1lbnQuaXNDb25uZWN0
ZWQoKSkKICAgICAgICAgcmV0dXJuIHJlbW92ZWQ7CiAKICAgICAvLyBJZiB0aGUgbm9kZSB3YXMg
Y29udmVydGVkIHRvIGEgc3BhbiwgdGhlIHNwYW4gbWF5IHN0aWxsIGNvbnRhaW4gcmVsZXZhbnQK
ICAgICAvLyBzdHlsZXMgd2hpY2ggbXVzdCBiZSByZW1vdmVkIChlLmcuIDxiIHN0eWxlPSdmb250
LXdlaWdodDogYm9sZCc+KQotICAgIGlmIChyZW1vdmVDU1NTdHlsZShzdHlsZSwgZWxlbWVudC5n
ZXQoKSwgbW9kZSwgZXh0cmFjdGVkU3R5bGUpKQorICAgIGlmIChyZW1vdmVDU1NTdHlsZShzdHls
ZSwgJmVsZW1lbnQsIG1vZGUsIGV4dHJhY3RlZFN0eWxlKSkKICAgICAgICAgcmVtb3ZlZCA9IHRy
dWU7CiAKICAgICByZXR1cm4gcmVtb3ZlZDsKQEAgLTk5Nyw3ICs5OTUsNyBAQCBIVE1MRWxlbWVu
dCogQXBwbHlTdHlsZUNvbW1hbmQ6OmhpZ2hlc3RBbmNlc3RvcldpdGhDb25mbGljdGluZ0lubGlu
ZVN0eWxlKEVkaXRpbgogICAgIE5vZGUqIHVuc3BsaXR0YWJsZUVsZW1lbnQgPSB1bnNwbGl0dGFi
bGVFbGVtZW50Rm9yUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpKTsK
IAogICAgIGZvciAoTm9kZSogYW5jZXN0b3IgPSBub2RlOyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBh
bmNlc3Rvci0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChpczxIVE1MRWxlbWVudD4oKmFu
Y2VzdG9yKSAmJiBzaG91bGRSZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KHN0eWxlLCBkb3du
Y2FzdDxIVE1MRWxlbWVudD4oYW5jZXN0b3IpKSkKKyAgICAgICAgaWYgKGlzPEhUTUxFbGVtZW50
PigqYW5jZXN0b3IpICYmIHNob3VsZFJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoc3R5bGUs
IGRvd25jYXN0PEhUTUxFbGVtZW50PigqYW5jZXN0b3IpKSkKICAgICAgICAgICAgIHJlc3VsdCA9
IGRvd25jYXN0PEhUTUxFbGVtZW50PihhbmNlc3Rvcik7CiAgICAgICAgIC8vIFNob3VsZCBzdG9w
IGF0IHRoZSBlZGl0YWJsZSByb290IChjYW5ub3QgY3Jvc3MgZWRpdGluZyBib3VuZGFyeSkgYW5k
CiAgICAgICAgIC8vIGFsc28gc3RvcCBhdCB0aGUgdW5zcGxpdHRhYmxlIGVsZW1lbnQgdG8gYmUg
Y29uc2lzdGVudCB3aXRoIG90aGVyIFVBcwpAQCAtMTAwOCwzMSArMTAwNiwyOSBAQCBIVE1MRWxl
bWVudCogQXBwbHlTdHlsZUNvbW1hbmQ6OmhpZ2hlc3RBbmNlc3RvcldpdGhDb25mbGljdGluZ0lu
bGluZVN0eWxlKEVkaXRpbgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQXBwbHlTdHls
ZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVUb1B1c2hEb3duKE5vZGUqIG5vZGUsIEVkaXRpbmdT
dHlsZSogc3R5bGUpCit2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlVG9Q
dXNoRG93bihOb2RlJiBub2RlLCBFZGl0aW5nU3R5bGUqIHN0eWxlKQogewotICAgIEFTU0VSVChu
b2RlKTsKLQotICAgIG5vZGUtPmRvY3VtZW50KCkudXBkYXRlU3R5bGVJZk5lZWRlZCgpOworICAg
IG5vZGUuZG9jdW1lbnQoKS51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAKLSAgICBpZiAoIXN0eWxl
IHx8IHN0eWxlLT5pc0VtcHR5KCkgfHwgIW5vZGUtPnJlbmRlcmVyKCkgfHwgaXM8SFRNTElGcmFt
ZUVsZW1lbnQ+KCpub2RlKSkKKyAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5pc0VtcHR5KCkgfHwg
IW5vZGUucmVuZGVyZXIoKSB8fCBpczxIVE1MSUZyYW1lRWxlbWVudD4obm9kZSkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IG5ld0lubGluZVN0eWxlID0gc3R5
bGU7Ci0gICAgaWYgKGlzPEhUTUxFbGVtZW50Pigqbm9kZSkgJiYgZG93bmNhc3Q8SFRNTEVsZW1l
bnQ+KG5vZGUpLT5pbmxpbmVTdHlsZSgpKSB7CisgICAgaWYgKGlzPEhUTUxFbGVtZW50Pihub2Rl
KSAmJiBkb3duY2FzdDxIVE1MRWxlbWVudD4obm9kZSkuaW5saW5lU3R5bGUoKSkgewogICAgICAg
ICBuZXdJbmxpbmVTdHlsZSA9IHN0eWxlLT5jb3B5KCk7Ci0gICAgICAgIG5ld0lubGluZVN0eWxl
LT5tZXJnZUlubGluZVN0eWxlT2ZFbGVtZW50KGRvd25jYXN0PEhUTUxFbGVtZW50Pihub2RlKSwg
RWRpdGluZ1N0eWxlOjpPdmVycmlkZVZhbHVlcyk7CisgICAgICAgIG5ld0lubGluZVN0eWxlLT5t
ZXJnZUlubGluZVN0eWxlT2ZFbGVtZW50KCZkb3duY2FzdDxIVE1MRWxlbWVudD4obm9kZSksIEVk
aXRpbmdTdHlsZTo6T3ZlcnJpZGVWYWx1ZXMpOwogICAgIH0KIAogICAgIC8vIFNpbmNlIGFkZElu
bGluZVN0eWxlSWZOZWVkZWQgY2FuJ3QgYWRkIHN0eWxlcyB0byBibG9jay1mbG93IHJlbmRlciBv
YmplY3RzLCBhZGQgc3R5bGUgYXR0cmlidXRlIGluc3RlYWQuCiAgICAgLy8gRklYTUU6IGFwcGx5
SW5saW5lU3R5bGVUb1JhbmdlIHNob3VsZCBiZSB1c2VkIGhlcmUgaW5zdGVhZC4KLSAgICBpZiAo
KG5vZGUtPnJlbmRlcmVyKCktPmlzUmVuZGVyQmxvY2tGbG93KCkgfHwgbm9kZS0+aGFzQ2hpbGRO
b2RlcygpKSAmJiBpczxIVE1MRWxlbWVudD4oKm5vZGUpKSB7Ci0gICAgICAgIHNldE5vZGVBdHRy
aWJ1dGUoZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KG5vZGUpLCBzdHlsZUF0dHIsIG5ld0lubGluZVN0
eWxlLT5zdHlsZSgpLT5hc1RleHQoKSk7CisgICAgaWYgKChub2RlLnJlbmRlcmVyKCktPmlzUmVu
ZGVyQmxvY2tGbG93KCkgfHwgbm9kZS5oYXNDaGlsZE5vZGVzKCkpICYmIGlzPEhUTUxFbGVtZW50
Pihub2RlKSkgeworICAgICAgICBzZXROb2RlQXR0cmlidXRlKCZkb3duY2FzdDxIVE1MRWxlbWVu
dD4obm9kZSksIHN0eWxlQXR0ciwgbmV3SW5saW5lU3R5bGUtPnN0eWxlKCktPmFzVGV4dCgpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChub2RlLT5yZW5kZXJlcigpLT5pc1Rl
eHQoKSAmJiBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4obm9kZS0+cmVuZGVyZXIoKSktPmlzQWxs
Q29sbGFwc2libGVXaGl0ZXNwYWNlKCkpCisgICAgaWYgKG5vZGUucmVuZGVyZXIoKS0+aXNUZXh0
KCkgJiYgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KG5vZGUucmVuZGVyZXIoKSktPmlzQWxsQ29s
bGFwc2libGVXaGl0ZXNwYWNlKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAobm9kZS0+cmVu
ZGVyZXIoKS0+aXNCUigpICYmICFub2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpLnByZXNlcnZlTmV3
bGluZSgpKQorICAgIGlmIChub2RlLnJlbmRlcmVyKCktPmlzQlIoKSAmJiAhbm9kZS5yZW5kZXJl
cigpLT5zdHlsZSgpLnByZXNlcnZlTmV3bGluZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICAv
LyBXZSBjYW4ndCB3cmFwIG5vZGUgd2l0aCB0aGUgc3R5bGVkIGVsZW1lbnQgaGVyZSBiZWNhdXNl
IG5ldyBzdHlsZWQgZWxlbWVudCB3aWxsIG5ldmVyIGJlIHJlbW92ZWQgaWYgd2UgZGlkLgpAQCAt
MTA2NCw3ICsxMDYwLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cHVzaERvd25JbmxpbmVT
dHlsZUFyb3VuZE5vZGUoRWRpdGluZ1N0eWxlKiBzdHlsZSwgTm9kZSoKIAogICAgICAgICBSZWZQ
dHI8RWRpdGluZ1N0eWxlPiBzdHlsZVRvUHVzaERvd24gPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZSgp
OwogICAgICAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+KCpjdXJyZW50KSkKLSAgICAgICAgICAgIHJl
bW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoc3R5bGUsIGRvd25jYXN0PEhUTUxFbGVtZW50Pihj
dXJyZW50LmdldCgpKSwgUmVtb3ZlSWZOZWVkZWQsIHN0eWxlVG9QdXNoRG93bi5nZXQoKSk7Cisg
ICAgICAgICAgICByZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KHN0eWxlLCBkb3duY2FzdDxI
VE1MRWxlbWVudD4oKmN1cnJlbnQpLCBSZW1vdmVJZk5lZWRlZCwgc3R5bGVUb1B1c2hEb3duLmdl
dCgpKTsKIAogICAgICAgICAvLyBUaGUgaW5uZXIgbG9vcCB3aWxsIGdvIHRocm91Z2ggY2hpbGRy
ZW4gb24gZWFjaCBsZXZlbAogICAgICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGFnZ3JlZ2F0ZSBp
bmxpbmUgY2hpbGQgZWxlbWVudHMgdG9nZXRoZXIgc28gdGhhdCB3ZSBkb24ndCB3cmFwIGVhY2gg
Y2hpbGQgc2VwYXJhdGVseS4KQEAgLTEwNzQsMTYgKzEwNzAsMTYgQEAgdm9pZCBBcHBseVN0eWxl
Q29tbWFuZDo6cHVzaERvd25JbmxpbmVTdHlsZUFyb3VuZE5vZGUoRWRpdGluZ1N0eWxlKiBzdHls
ZSwgTm9kZSoKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmICghY2hp
bGQuY29udGFpbnModGFyZ2V0Tm9kZSkgJiYgZWxlbWVudHNUb1B1c2hEb3duLnNpemUoKSkgewog
ICAgICAgICAgICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGVsZW1lbnRzVG9QdXNoRG93bikg
ewotICAgICAgICAgICAgICAgICAgICBSZWZQdHI8RWxlbWVudD4gd3JhcHBlciA9IGVsZW1lbnQt
PmNsb25lRWxlbWVudFdpdGhvdXRDaGlsZHJlbihkb2N1bWVudCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgYXV0byB3cmFwcGVyID0gZWxlbWVudC0+Y2xvbmVFbGVtZW50V2l0aG91dENoaWxkcmVu
KGRvY3VtZW50KCkpOwogICAgICAgICAgICAgICAgICAgICB3cmFwcGVyLT5yZW1vdmVBdHRyaWJ1
dGUoc3R5bGVBdHRyKTsKLSAgICAgICAgICAgICAgICAgICAgc3Vycm91bmROb2RlUmFuZ2VXaXRo
RWxlbWVudCgmY2hpbGQsICZjaGlsZCwgd3JhcHBlcik7CisgICAgICAgICAgICAgICAgICAgIHN1
cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1lbnQoY2hpbGQsIGNoaWxkLCBXVEZNb3ZlKHdyYXBwZXIp
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIEFw
cGx5IHN0eWxlIHRvIGFsbCBub2RlcyBjb250YWluaW5nIHRhcmdldE5vZGUgYW5kIHRoZWlyIHNp
YmxpbmdzIGJ1dCBOT1QgdG8gdGFyZ2V0Tm9kZQogICAgICAgICAgICAgLy8gQnV0IGlmIHdlJ3Zl
IHJlbW92ZWQgc3R5bGVkRWxlbWVudCB0aGVuIGFsd2F5cyBhcHBseSB0aGUgc3R5bGUuCiAgICAg
ICAgICAgICBpZiAoJmNoaWxkICE9IHRhcmdldE5vZGUgfHwgc3R5bGVkRWxlbWVudCkKLSAgICAg
ICAgICAgICAgICBhcHBseUlubGluZVN0eWxlVG9QdXNoRG93bigmY2hpbGQsIHN0eWxlVG9QdXNo
RG93bi5nZXQoKSk7CisgICAgICAgICAgICAgICAgYXBwbHlJbmxpbmVTdHlsZVRvUHVzaERvd24o
Y2hpbGQsIHN0eWxlVG9QdXNoRG93bi5nZXQoKSk7CiAKICAgICAgICAgICAgIC8vIFdlIGZvdW5k
IHRoZSBuZXh0IG5vZGUgZm9yIHRoZSBvdXRlciBsb29wIChjb250YWlucyB0YXJnZXROb2RlKQog
ICAgICAgICAgICAgLy8gV2hlbiByZWFjaGVkIHRhcmdldE5vZGUsIHN0b3AgdGhlIG91dGVyIGxv
b3AgdXBvbiB0aGUgY29tcGxldGlvbiBvZiB0aGUgY3VycmVudCBpbm5lciBsb29wCkBAIC0xMTQ3
LDcgKzExNDMsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsZShF
ZGl0aW5nU3R5bGUqIHN0eWxlLCBjb25zdCBQb3NpdGlvbiYgcwogICAgICAgICAgICAgICAgIGNo
aWxkTm9kZSA9IGVsZW1lbnQtPmZpcnN0Q2hpbGQoKTsKICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgcmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudChzdHlsZSwgZWxlbWVudC5wdHIoKSwg
UmVtb3ZlSWZOZWVkZWQsIHN0eWxlVG9QdXNoRG93bi5nZXQoKSk7CisgICAgICAgICAgICByZW1v
dmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KHN0eWxlLCBlbGVtZW50LCBSZW1vdmVJZk5lZWRlZCwg
c3R5bGVUb1B1c2hEb3duLmdldCgpKTsKICAgICAgICAgICAgIGlmICghZWxlbWVudC0+aXNDb25u
ZWN0ZWQoKSkgewogICAgICAgICAgICAgICAgIGlmIChzLmRlcHJlY2F0ZWROb2RlKCkgPT0gZWxl
bWVudC5wdHIoKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSBlbGVtIG11c3QgaGF2
ZSBiZWVuIGZ1bGx5IHNlbGVjdGVkLCBhbmQgaXQgaXMgYXQgdGhlIHN0YXJ0CkBAIC0xMTY2LDcg
KzExNjIsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsZShFZGl0
aW5nU3R5bGUqIHN0eWxlLCBjb25zdCBQb3NpdGlvbiYgcwogCiAgICAgICAgICAgICBpZiAoc3R5
bGVUb1B1c2hEb3duKSB7CiAgICAgICAgICAgICAgICAgZm9yICg7IGNoaWxkTm9kZTsgY2hpbGRO
b2RlID0gY2hpbGROb2RlLT5uZXh0U2libGluZygpKQotICAgICAgICAgICAgICAgICAgICBhcHBs
eUlubGluZVN0eWxlVG9QdXNoRG93bihjaGlsZE5vZGUuZ2V0KCksIHN0eWxlVG9QdXNoRG93bi5n
ZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGFwcGx5SW5saW5lU3R5bGVUb1B1c2hEb3duKCpj
aGlsZE5vZGUsIHN0eWxlVG9QdXNoRG93bi5nZXQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICAgICAgaWYgKG5vZGUgPT0gZW5kLmRlcHJlY2F0ZWROb2RlKCkpCkBAIC0xMjYzLDcg
KzEyNTksNyBAQCBib29sIEFwcGx5U3R5bGVDb21tYW5kOjpzaG91bGRTcGxpdFRleHRFbGVtZW50
KEVsZW1lbnQqIGVsZW1lbnQsIEVkaXRpbmdTdHlsZSogcwogICAgIGlmICghaXM8SFRNTEVsZW1l
bnQ+KGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gc2hvdWxk
UmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudChzdHlsZSwgJmRvd25jYXN0PEhUTUxFbGVtZW50
PigqZWxlbWVudCkpOworICAgIHJldHVybiBzaG91bGRSZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVt
ZW50KHN0eWxlLCBkb3duY2FzdDxIVE1MRWxlbWVudD4oKmVsZW1lbnQpKTsKIH0KIAogYm9vbCBB
cHBseVN0eWxlQ29tbWFuZDo6aXNWYWxpZENhcmV0UG9zaXRpb25JblRleHROb2RlKGNvbnN0IFBv
c2l0aW9uJiBwb3NpdGlvbikKQEAgLTEzNDAsMjQgKzEzMzYsMjEgQEAgYm9vbCBBcHBseVN0eWxl
Q29tbWFuZDo6bWVyZ2VFbmRXaXRoTmV4dElmSWRlbnRpY2FsKGNvbnN0IFBvc2l0aW9uJiBzdGFy
dCwgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6
c3Vycm91bmROb2RlUmFuZ2VXaXRoRWxlbWVudChQYXNzUmVmUHRyPE5vZGU+IHBhc3NlZFN0YXJ0
Tm9kZSwgUGFzc1JlZlB0cjxOb2RlPiBlbmROb2RlLCBQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1l
bnRUb0luc2VydCkKK3ZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnN1cnJvdW5kTm9kZVJhbmdlV2l0
aEVsZW1lbnQoTm9kZSYgc3RhcnROb2RlLCBOb2RlJiBlbmROb2RlLCBSZWY8RWxlbWVudD4mJiBl
bGVtZW50VG9JbnNlcnQpCiB7Ci0gICAgQVNTRVJUKHBhc3NlZFN0YXJ0Tm9kZSk7Ci0gICAgQVNT
RVJUKGVuZE5vZGUpOwotICAgIEFTU0VSVChlbGVtZW50VG9JbnNlcnQpOwotICAgIFJlZlB0cjxO
b2RlPiBzdGFydE5vZGUgPSBwYXNzZWRTdGFydE5vZGU7Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IGVs
ZW1lbnQgPSBlbGVtZW50VG9JbnNlcnQ7CisgICAgUmVmPE5vZGU+IHByb3RlY3RlZFN0YXJ0Tm9k
ZSA9IHN0YXJ0Tm9kZTsKKyAgICBSZWY8RWxlbWVudD4gZWxlbWVudCA9IFdURk1vdmUoZWxlbWVu
dFRvSW5zZXJ0KTsKIAotICAgIGluc2VydE5vZGVCZWZvcmUoZWxlbWVudCwgc3RhcnROb2RlKTsK
KyAgICBpbnNlcnROb2RlQmVmb3JlKGVsZW1lbnQucHRyKCksICZzdGFydE5vZGUpOwogCi0gICAg
UmVmUHRyPE5vZGU+IG5vZGUgPSBzdGFydE5vZGU7CisgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSAm
c3RhcnROb2RlOwogICAgIHdoaWxlIChub2RlKSB7CiAgICAgICAgIFJlZlB0cjxOb2RlPiBuZXh0
ID0gbm9kZS0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgaWYgKGlzRWRpdGFibGVOb2RlKCpub2Rl
KSkgewogICAgICAgICAgICAgcmVtb3ZlTm9kZShub2RlKTsKLSAgICAgICAgICAgIGFwcGVuZE5v
ZGUobm9kZSwgZWxlbWVudCk7CisgICAgICAgICAgICBhcHBlbmROb2RlKG5vZGUsIGVsZW1lbnQu
cHRyKCkpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChub2RlID09IGVuZE5vZGUpCisgICAgICAg
IGlmIChub2RlID09ICZlbmROb2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIG5vZGUg
PSBuZXh0OwogICAgIH0KQEAgLTEzNjUsOCArMTM1OCw4IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1h
bmQ6OnN1cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1lbnQoUGFzc1JlZlB0cjxOb2RlPiBwYXNzZWRT
dGFyCiAgICAgUmVmUHRyPE5vZGU+IG5leHRTaWJsaW5nID0gZWxlbWVudC0+bmV4dFNpYmxpbmco
KTsKICAgICBSZWZQdHI8Tm9kZT4gcHJldmlvdXNTaWJsaW5nID0gZWxlbWVudC0+cHJldmlvdXNT
aWJsaW5nKCk7CiAKLSAgICBpZiAobmV4dFNpYmxpbmcgJiYgbmV4dFNpYmxpbmctPmhhc0VkaXRh
YmxlU3R5bGUoKSAmJiBhcmVJZGVudGljYWxFbGVtZW50cygqZWxlbWVudCwgKm5leHRTaWJsaW5n
KSkKLSAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhlbGVtZW50LmdldCgpLCBkb3duY2Fz
dDxFbGVtZW50PihuZXh0U2libGluZy5nZXQoKSkpOworICAgIGlmIChuZXh0U2libGluZyAmJiBu
ZXh0U2libGluZy0+aGFzRWRpdGFibGVTdHlsZSgpICYmIGFyZUlkZW50aWNhbEVsZW1lbnRzKGVs
ZW1lbnQsICpuZXh0U2libGluZykpCisgICAgICAgIG1lcmdlSWRlbnRpY2FsRWxlbWVudHMoZWxl
bWVudC5wdHIoKSwgZG93bmNhc3Q8RWxlbWVudD4obmV4dFNpYmxpbmcuZ2V0KCkpKTsKIAogICAg
IGlmIChpczxFbGVtZW50PihwcmV2aW91c1NpYmxpbmcuZ2V0KCkpICYmIHByZXZpb3VzU2libGlu
Zy0+aGFzRWRpdGFibGVTdHlsZSgpKSB7CiAgICAgICAgIGF1dG8qIG1lcmdlZEVsZW1lbnQgPSBw
cmV2aW91c1NpYmxpbmctPm5leHRTaWJsaW5nKCk7CkBAIC0xMzk5LDM3ICsxMzkyLDM3IEBAIHZv
aWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFkZEJsb2NrU3R5bGUoY29uc3QgU3R5bGVDaGFuZ2UmIHN0
eWxlQ2hhbmdlLCBIVE1MRWxlbWVuCiAgICAgc2V0Tm9kZUF0dHJpYnV0ZShibG9jaywgc3R5bGVB
dHRyLCBjc3NUZXh0LnRvU3RyaW5nKCkpOwogfQogCi12b2lkIEFwcGx5U3R5bGVDb21tYW5kOjph
ZGRJbmxpbmVTdHlsZUlmTmVlZGVkKEVkaXRpbmdTdHlsZSogc3R5bGUsIFBhc3NSZWZQdHI8Tm9k
ZT4gcGFzc2VkU3RhcnQsIFBhc3NSZWZQdHI8Tm9kZT4gcGFzc2VkRW5kLCBFQWRkU3R5bGVkRWxl
bWVudCBhZGRTdHlsZWRFbGVtZW50KQordm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YWRkSW5saW5l
U3R5bGVJZk5lZWRlZChFZGl0aW5nU3R5bGUqIHN0eWxlLCBOb2RlJiBzdGFydCwgTm9kZSYgZW5k
LCBFQWRkU3R5bGVkRWxlbWVudCBhZGRTdHlsZWRFbGVtZW50KQogewotICAgIGlmICghcGFzc2Vk
U3RhcnQgfHwgIXBhc3NlZEVuZCB8fCAhcGFzc2VkU3RhcnQtPmlzQ29ubmVjdGVkKCkgfHwgIXBh
c3NlZEVuZC0+aXNDb25uZWN0ZWQoKSkKKyAgICBpZiAoIXN0YXJ0LmlzQ29ubmVjdGVkKCkgfHwg
IWVuZC5pc0Nvbm5lY3RlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8Tm9kZT4g
c3RhcnQgPSBwYXNzZWRTdGFydDsKKyAgICBSZWY8Tm9kZT4gcHJvdGVjdGVkU3RhcnQgPSBzdGFy
dDsKICAgICBSZWZQdHI8Tm9kZT4gZHVtbXlFbGVtZW50OwogICAgIFN0eWxlQ2hhbmdlIHN0eWxl
Q2hhbmdlKHN0eWxlLCBwb3NpdGlvblRvQ29tcHV0ZUlubGluZVN0eWxlQ2hhbmdlKHN0YXJ0LCBk
dW1teUVsZW1lbnQpKTsKIAogICAgIGlmIChkdW1teUVsZW1lbnQpCiAgICAgICAgIHJlbW92ZU5v
ZGUoZHVtbXlFbGVtZW50KTsKIAotICAgIGFwcGx5SW5saW5lU3R5bGVDaGFuZ2Uoc3RhcnQsIHBh
c3NlZEVuZCwgc3R5bGVDaGFuZ2UsIGFkZFN0eWxlZEVsZW1lbnQpOworICAgIGFwcGx5SW5saW5l
U3R5bGVDaGFuZ2Uoc3RhcnQsIGVuZCwgc3R5bGVDaGFuZ2UsIGFkZFN0eWxlZEVsZW1lbnQpOwog
fQogCi1Qb3NpdGlvbiBBcHBseVN0eWxlQ29tbWFuZDo6cG9zaXRpb25Ub0NvbXB1dGVJbmxpbmVT
dHlsZUNoYW5nZShQYXNzUmVmUHRyPE5vZGU+IHN0YXJ0Tm9kZSwgUmVmUHRyPE5vZGU+JiBkdW1t
eUVsZW1lbnQpCitQb3NpdGlvbiBBcHBseVN0eWxlQ29tbWFuZDo6cG9zaXRpb25Ub0NvbXB1dGVJ
bmxpbmVTdHlsZUNoYW5nZShOb2RlJiBzdGFydE5vZGUsIFJlZlB0cjxOb2RlPiYgZHVtbXlFbGVt
ZW50KQogewogICAgIC8vIEl0J3Mgb2theSB0byBvYnRhaW4gdGhlIHN0eWxlIGF0IHRoZSBzdGFy
dE5vZGUgYmVjYXVzZSB3ZSd2ZSByZW1vdmVkIGFsbCByZWxldmFudCBzdHlsZXMgZnJvbSB0aGUg
Y3VycmVudCBydW4uCi0gICAgaWYgKCFpczxFbGVtZW50Pigqc3RhcnROb2RlKSkgeworICAgIGlm
ICghaXM8RWxlbWVudD4oc3RhcnROb2RlKSkgewogICAgICAgICBkdW1teUVsZW1lbnQgPSBjcmVh
dGVTdHlsZVNwYW5FbGVtZW50KGRvY3VtZW50KCkpOwotICAgICAgICBpbnNlcnROb2RlQXQoZHVt
bXlFbGVtZW50LCBwb3NpdGlvbkJlZm9yZU5vZGUoc3RhcnROb2RlLmdldCgpKSk7CisgICAgICAg
IGluc2VydE5vZGVBdChkdW1teUVsZW1lbnQsIHBvc2l0aW9uQmVmb3JlTm9kZSgmc3RhcnROb2Rl
KSk7CiAgICAgICAgIHJldHVybiBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoZHVtbXlFbGVt
ZW50LmdldCgpKTsKICAgICB9CiAKLSAgICByZXR1cm4gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVO
b2RlKHN0YXJ0Tm9kZS5nZXQoKSk7CisgICAgcmV0dXJuIGZpcnN0UG9zaXRpb25Jbk9yQmVmb3Jl
Tm9kZSgmc3RhcnROb2RlKTsKIH0KIAotdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxp
bmVTdHlsZUNoYW5nZShQYXNzUmVmUHRyPE5vZGU+IHBhc3NlZFN0YXJ0LCBQYXNzUmVmUHRyPE5v
ZGU+IHBhc3NlZEVuZCwgU3R5bGVDaGFuZ2UmIHN0eWxlQ2hhbmdlLCBFQWRkU3R5bGVkRWxlbWVu
dCBhZGRTdHlsZWRFbGVtZW50KQordm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVT
dHlsZUNoYW5nZShOb2RlJiBwYXNzZWRTdGFydCwgTm9kZSYgcGFzc2VkRW5kLCBTdHlsZUNoYW5n
ZSYgc3R5bGVDaGFuZ2UsIEVBZGRTdHlsZWRFbGVtZW50IGFkZFN0eWxlZEVsZW1lbnQpCiB7Ci0g
ICAgUmVmUHRyPE5vZGU+IHN0YXJ0Tm9kZSA9IHBhc3NlZFN0YXJ0OwotICAgIFJlZlB0cjxOb2Rl
PiBlbmROb2RlID0gcGFzc2VkRW5kOworICAgIFJlZlB0cjxOb2RlPiBzdGFydE5vZGUgPSAmcGFz
c2VkU3RhcnQ7CisgICAgUmVmUHRyPE5vZGU+IGVuZE5vZGUgPSAmcGFzc2VkRW5kOwogICAgIEFT
U0VSVChzdGFydE5vZGUtPmlzQ29ubmVjdGVkKCkpOwogICAgIEFTU0VSVChlbmROb2RlLT5pc0Nv
bm5lY3RlZCgpKTsKIApAQCAtMTQ2OCw3ICsxNDYxLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFu
ZDo6YXBwbHlJbmxpbmVTdHlsZUNoYW5nZShQYXNzUmVmUHRyPE5vZGU+IHBhc3NlZFN0YXJ0LCBQ
YXMKICAgICAgICAgICAgICAgICBmb250RWxlbWVudC0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihmYWNlQXR0ciwgc3R5bGVDaGFuZ2UuZm9udEZhY2UoKSk7CiAgICAgICAgICAg
ICBpZiAoc3R5bGVDaGFuZ2UuYXBwbHlGb250U2l6ZSgpKQogICAgICAgICAgICAgICAgIGZvbnRF
bGVtZW50LT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHNpemVBdHRyLCBzdHls
ZUNoYW5nZS5mb250U2l6ZSgpKTsKLSAgICAgICAgICAgIHN1cnJvdW5kTm9kZVJhbmdlV2l0aEVs
ZW1lbnQoc3RhcnROb2RlLCBlbmROb2RlLCBmb250RWxlbWVudC5nZXQoKSk7CisgICAgICAgICAg
ICBzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVtZW50KCpzdGFydE5vZGUsICplbmROb2RlLCBXVEZN
b3ZlKGZvbnRFbGVtZW50KSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE0ODMsMjkgKzE0NzYs
MjkgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZUNoYW5nZShQYXNz
UmVmUHRyPE5vZGU+IHBhc3NlZFN0YXJ0LCBQYXMKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIGF1dG8gc3R5bGVFbGVtZW50ID0gY3JlYXRlU3R5bGVTcGFuRWxlbWVudChkb2N1bWVudCgp
KTsKICAgICAgICAgICAgIHN0eWxlRWxlbWVudC0+c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwgc3R5
bGVUb01lcmdlLT5hc1RleHQoKSk7Ci0gICAgICAgICAgICBzdXJyb3VuZE5vZGVSYW5nZVdpdGhF
bGVtZW50KHN0YXJ0Tm9kZSwgZW5kTm9kZSwgV1RGTW92ZShzdHlsZUVsZW1lbnQpKTsKKyAgICAg
ICAgICAgIHN1cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1lbnQoKnN0YXJ0Tm9kZSwgKmVuZE5vZGUs
IFdURk1vdmUoc3R5bGVFbGVtZW50KSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoc3R5
bGVDaGFuZ2UuYXBwbHlCb2xkKCkpCi0gICAgICAgIHN1cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1l
bnQoc3RhcnROb2RlLCBlbmROb2RlLCBjcmVhdGVIVE1MRWxlbWVudChkb2N1bWVudCgpLCBiVGFn
KSk7CisgICAgICAgIHN1cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1lbnQoKnN0YXJ0Tm9kZSwgKmVu
ZE5vZGUsIGNyZWF0ZUhUTUxFbGVtZW50KGRvY3VtZW50KCksIGJUYWcpKTsKIAogICAgIGlmIChz
dHlsZUNoYW5nZS5hcHBseUl0YWxpYygpKQotICAgICAgICBzdXJyb3VuZE5vZGVSYW5nZVdpdGhF
bGVtZW50KHN0YXJ0Tm9kZSwgZW5kTm9kZSwgY3JlYXRlSFRNTEVsZW1lbnQoZG9jdW1lbnQoKSwg
aVRhZykpOworICAgICAgICBzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVtZW50KCpzdGFydE5vZGUs
ICplbmROb2RlLCBjcmVhdGVIVE1MRWxlbWVudChkb2N1bWVudCgpLCBpVGFnKSk7CiAKICAgICBp
ZiAoc3R5bGVDaGFuZ2UuYXBwbHlVbmRlcmxpbmUoKSkKLSAgICAgICAgc3Vycm91bmROb2RlUmFu
Z2VXaXRoRWxlbWVudChzdGFydE5vZGUsIGVuZE5vZGUsIGNyZWF0ZUhUTUxFbGVtZW50KGRvY3Vt
ZW50KCksIHVUYWcpKTsKKyAgICAgICAgc3Vycm91bmROb2RlUmFuZ2VXaXRoRWxlbWVudCgqc3Rh
cnROb2RlLCAqZW5kTm9kZSwgY3JlYXRlSFRNTEVsZW1lbnQoZG9jdW1lbnQoKSwgdVRhZykpOwog
CiAgICAgaWYgKHN0eWxlQ2hhbmdlLmFwcGx5TGluZVRocm91Z2goKSkKLSAgICAgICAgc3Vycm91
bmROb2RlUmFuZ2VXaXRoRWxlbWVudChzdGFydE5vZGUsIGVuZE5vZGUsIGNyZWF0ZUhUTUxFbGVt
ZW50KGRvY3VtZW50KCksIHN0cmlrZVRhZykpOworICAgICAgICBzdXJyb3VuZE5vZGVSYW5nZVdp
dGhFbGVtZW50KCpzdGFydE5vZGUsICplbmROb2RlLCBjcmVhdGVIVE1MRWxlbWVudChkb2N1bWVu
dCgpLCBzdHJpa2VUYWcpKTsKIAogICAgIGlmIChzdHlsZUNoYW5nZS5hcHBseVN1YnNjcmlwdCgp
KQotICAgICAgICBzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVtZW50KHN0YXJ0Tm9kZSwgZW5kTm9k
ZSwgY3JlYXRlSFRNTEVsZW1lbnQoZG9jdW1lbnQoKSwgc3ViVGFnKSk7CisgICAgICAgIHN1cnJv
dW5kTm9kZVJhbmdlV2l0aEVsZW1lbnQoKnN0YXJ0Tm9kZSwgKmVuZE5vZGUsIGNyZWF0ZUhUTUxF
bGVtZW50KGRvY3VtZW50KCksIHN1YlRhZykpOwogICAgIGVsc2UgaWYgKHN0eWxlQ2hhbmdlLmFw
cGx5U3VwZXJzY3JpcHQoKSkKLSAgICAgICAgc3Vycm91bmROb2RlUmFuZ2VXaXRoRWxlbWVudChz
dGFydE5vZGUsIGVuZE5vZGUsIGNyZWF0ZUhUTUxFbGVtZW50KGRvY3VtZW50KCksIHN1cFRhZykp
OworICAgICAgICBzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVtZW50KCpzdGFydE5vZGUsICplbmRO
b2RlLCBjcmVhdGVIVE1MRWxlbWVudChkb2N1bWVudCgpLCBzdXBUYWcpKTsKIAogICAgIGlmICht
X3N0eWxlZElubGluZUVsZW1lbnQgJiYgYWRkU3R5bGVkRWxlbWVudCA9PSBBZGRTdHlsZWRFbGVt
ZW50KQotICAgICAgICBzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVtZW50KHN0YXJ0Tm9kZSwgZW5k
Tm9kZSwgbV9zdHlsZWRJbmxpbmVFbGVtZW50LT5jbG9uZUVsZW1lbnRXaXRob3V0Q2hpbGRyZW4o
ZG9jdW1lbnQoKSkpOworICAgICAgICBzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVtZW50KCpzdGFy
dE5vZGUsICplbmROb2RlLCBtX3N0eWxlZElubGluZUVsZW1lbnQtPmNsb25lRWxlbWVudFdpdGhv
dXRDaGlsZHJlbihkb2N1bWVudCgpKSk7CiB9CiAKIGZsb2F0IEFwcGx5U3R5bGVDb21tYW5kOjpj
b21wdXRlZEZvbnRTaXplKE5vZGUqIG5vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5
U3R5bGVDb21tYW5kLmgKaW5kZXggYTQ4NTQ5OGY5NWFmZmI3MDI3NmZmZWE2ZTdmYzFkNWQyMzNj
OGI2NS4uMjdmYWU2Njc0N2M1MzU1YjUzZTIwZDc1MWQzZWJkYmE1MWJjNWNiMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaApAQCAtNTUsOSArNTUsOSBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBcHBseVN0eWxlQ29t
bWFuZChkb2N1bWVudCwgc3R5bGUsIHN0YXJ0LCBlbmQsIGFjdGlvbiwgbGV2ZWwpKTsKICAgICB9
Ci0gICAgc3RhdGljIFJlZjxBcHBseVN0eWxlQ29tbWFuZD4gY3JlYXRlKFBhc3NSZWZQdHI8RWxl
bWVudD4gZWxlbWVudCwgYm9vbCByZW1vdmVPbmx5ID0gZmFsc2UsIEVkaXRBY3Rpb24gYWN0aW9u
ID0gRWRpdEFjdGlvbkNoYW5nZUF0dHJpYnV0ZXMpCisgICAgc3RhdGljIFJlZjxBcHBseVN0eWxl
Q29tbWFuZD4gY3JlYXRlKFJlZjxFbGVtZW50PiYmIGVsZW1lbnQsIGJvb2wgcmVtb3ZlT25seSA9
IGZhbHNlLCBFZGl0QWN0aW9uIGFjdGlvbiA9IEVkaXRBY3Rpb25DaGFuZ2VBdHRyaWJ1dGVzKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQXBwbHlTdHlsZUNvbW1hbmQoZWxl
bWVudCwgcmVtb3ZlT25seSwgYWN0aW9uKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IEFwcGx5U3R5bGVDb21tYW5kKFdURk1vdmUoZWxlbWVudCksIHJlbW92ZU9ubHksIGFjdGlvbikp
OwogICAgIH0KICAgICBzdGF0aWMgUmVmPEFwcGx5U3R5bGVDb21tYW5kPiBjcmVhdGUoRG9jdW1l
bnQmIGRvY3VtZW50LCBjb25zdCBFZGl0aW5nU3R5bGUqIHN0eWxlLCBJc0lubGluZUVsZW1lbnRU
b1JlbW92ZUZ1bmN0aW9uIGlzSW5saW5lRWxlbWVudFRvUmVtb3ZlRnVuY3Rpb24sIEVkaXRBY3Rp
b24gYWN0aW9uID0gRWRpdEFjdGlvbkNoYW5nZUF0dHJpYnV0ZXMpCiAgICAgewpAQCAtNjcsNyAr
NjcsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEFwcGx5U3R5bGVDb21tYW5kKERvY3VtZW50
JiwgY29uc3QgRWRpdGluZ1N0eWxlKiwgRWRpdEFjdGlvbiwgRVByb3BlcnR5TGV2ZWwpOwogICAg
IEFwcGx5U3R5bGVDb21tYW5kKERvY3VtZW50JiwgY29uc3QgRWRpdGluZ1N0eWxlKiwgY29uc3Qg
UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kLCBFZGl0QWN0aW9uLCBFUHJvcGVy
dHlMZXZlbCk7Ci0gICAgQXBwbHlTdHlsZUNvbW1hbmQoUGFzc1JlZlB0cjxFbGVtZW50PiwgYm9v
bCByZW1vdmVPbmx5LCBFZGl0QWN0aW9uKTsKKyAgICBBcHBseVN0eWxlQ29tbWFuZChSZWY8RWxl
bWVudD4mJiwgYm9vbCByZW1vdmVPbmx5LCBFZGl0QWN0aW9uKTsKICAgICBBcHBseVN0eWxlQ29t
bWFuZChEb2N1bWVudCYsIGNvbnN0IEVkaXRpbmdTdHlsZSosIGJvb2wgKCppc0lubGluZUVsZW1l
bnRUb1JlbW92ZSkoY29uc3QgRWxlbWVudCopLCBFZGl0QWN0aW9uKTsKIAogICAgIHZvaWQgZG9B
cHBseSgpIG92ZXJyaWRlOwpAQCAtNzYsMTQgKzc2LDE0IEBAIHByaXZhdGU6CiAgICAgLy8gc3R5
bGUtcmVtb3ZhbCBoZWxwZXJzCiAgICAgYm9vbCBpc1N0eWxlZElubGluZUVsZW1lbnRUb1JlbW92
ZShFbGVtZW50KikgY29uc3Q7CiAgICAgYm9vbCBzaG91bGRBcHBseUlubGluZVN0eWxlVG9SdW4o
RWRpdGluZ1N0eWxlKiwgTm9kZSogcnVuU3RhcnQsIE5vZGUqIHBhc3RFbmROb2RlKTsKLSAgICB2
b2lkIHJlbW92ZUNvbmZsaWN0aW5nSW5saW5lU3R5bGVGcm9tUnVuKEVkaXRpbmdTdHlsZSosIFJl
ZlB0cjxOb2RlPiYgcnVuU3RhcnQsIFJlZlB0cjxOb2RlPiYgcnVuRW5kLCBQYXNzUmVmUHRyPE5v
ZGU+IHBhc3RFbmROb2RlKTsKLSAgICBib29sIHJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQo
RWRpdGluZ1N0eWxlKiwgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4sIElubGluZVN0eWxlUmVtb3Zh
bE1vZGUgPSBSZW1vdmVJZk5lZWRlZCwgRWRpdGluZ1N0eWxlKiBleHRyYWN0ZWRTdHlsZSA9IG51
bGxwdHIpOwotICAgIGlubGluZSBib29sIHNob3VsZFJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1l
bnQoRWRpdGluZ1N0eWxlKiBzdHlsZSwgSFRNTEVsZW1lbnQqIGVsZW1lbnQpIHtyZXR1cm4gcmVt
b3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudChzdHlsZSwgZWxlbWVudCwgUmVtb3ZlTm9uZSk7fQor
ICAgIHZvaWQgcmVtb3ZlQ29uZmxpY3RpbmdJbmxpbmVTdHlsZUZyb21SdW4oRWRpdGluZ1N0eWxl
KiwgUmVmUHRyPE5vZGU+JiBydW5TdGFydCwgUmVmUHRyPE5vZGU+JiBydW5FbmQsIE5vZGUqIHBh
c3RFbmROb2RlKTsKKyAgICBib29sIHJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoRWRpdGlu
Z1N0eWxlKiwgSFRNTEVsZW1lbnQmLCBJbmxpbmVTdHlsZVJlbW92YWxNb2RlID0gUmVtb3ZlSWZO
ZWVkZWQsIEVkaXRpbmdTdHlsZSogZXh0cmFjdGVkU3R5bGUgPSBudWxscHRyKTsKKyAgICBpbmxp
bmUgYm9vbCBzaG91bGRSZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KEVkaXRpbmdTdHlsZSog
c3R5bGUsIEhUTUxFbGVtZW50JiBlbGVtZW50KSB7cmV0dXJuIHJlbW92ZUlubGluZVN0eWxlRnJv
bUVsZW1lbnQoc3R5bGUsIGVsZW1lbnQsIFJlbW92ZU5vbmUpO30KICAgICB2b2lkIHJlcGxhY2VX
aXRoU3Bhbk9yUmVtb3ZlSWZXaXRob3V0QXR0cmlidXRlcyhIVE1MRWxlbWVudComKTsKICAgICBi
b29sIHJlbW92ZUltcGxpY2l0bHlTdHlsZWRFbGVtZW50KEVkaXRpbmdTdHlsZSosIEhUTUxFbGVt
ZW50KiwgSW5saW5lU3R5bGVSZW1vdmFsTW9kZSwgRWRpdGluZ1N0eWxlKiBleHRyYWN0ZWRTdHls
ZSk7CiAgICAgYm9vbCByZW1vdmVDU1NTdHlsZShFZGl0aW5nU3R5bGUqLCBIVE1MRWxlbWVudCos
IElubGluZVN0eWxlUmVtb3ZhbE1vZGUgPSBSZW1vdmVJZk5lZWRlZCwgRWRpdGluZ1N0eWxlKiBl
eHRyYWN0ZWRTdHlsZSA9IG51bGxwdHIpOwogICAgIEhUTUxFbGVtZW50KiBoaWdoZXN0QW5jZXN0
b3JXaXRoQ29uZmxpY3RpbmdJbmxpbmVTdHlsZShFZGl0aW5nU3R5bGUqLCBOb2RlKik7Ci0gICAg
dm9pZCBhcHBseUlubGluZVN0eWxlVG9QdXNoRG93bihOb2RlKiwgRWRpdGluZ1N0eWxlKik7Cisg
ICAgdm9pZCBhcHBseUlubGluZVN0eWxlVG9QdXNoRG93bihOb2RlJiwgRWRpdGluZ1N0eWxlKik7
CiAgICAgdm9pZCBwdXNoRG93bklubGluZVN0eWxlQXJvdW5kTm9kZShFZGl0aW5nU3R5bGUqLCBO
b2RlKik7CiAgICAgdm9pZCByZW1vdmVJbmxpbmVTdHlsZShFZGl0aW5nU3R5bGUqICwgY29uc3Qg
UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKTsKICAgICBib29sIG5vZGVGdWxs
eVNlbGVjdGVkKEVsZW1lbnQmLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9u
JiBlbmQpIGNvbnN0OwpAQCAtOTQsMTEgKzk0LDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBhcHBs
eVJlbGF0aXZlRm9udFN0eWxlQ2hhbmdlKEVkaXRpbmdTdHlsZSopOwogICAgIHZvaWQgYXBwbHlJ
bmxpbmVTdHlsZShFZGl0aW5nU3R5bGUqKTsKICAgICB2b2lkIGZpeFJhbmdlQW5kQXBwbHlJbmxp
bmVTdHlsZShFZGl0aW5nU3R5bGUqLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0
aW9uJiBlbmQpOwotICAgIHZvaWQgYXBwbHlJbmxpbmVTdHlsZVRvTm9kZVJhbmdlKEVkaXRpbmdT
dHlsZSosIFBhc3NSZWZQdHI8Tm9kZT4gc3RhcnROb2RlLCBQYXNzUmVmUHRyPE5vZGU+IHBhc3RF
bmROb2RlKTsKKyAgICB2b2lkIGFwcGx5SW5saW5lU3R5bGVUb05vZGVSYW5nZShFZGl0aW5nU3R5
bGUqLCBOb2RlJiBzdGFydE5vZGUsIE5vZGUqIHBhc3RFbmROb2RlKTsKICAgICB2b2lkIGFkZEJs
b2NrU3R5bGUoY29uc3QgU3R5bGVDaGFuZ2UmLCBIVE1MRWxlbWVudCopOwotICAgIHZvaWQgYWRk
SW5saW5lU3R5bGVJZk5lZWRlZChFZGl0aW5nU3R5bGUqLCBQYXNzUmVmUHRyPE5vZGU+IHN0YXJ0
LCBQYXNzUmVmUHRyPE5vZGU+IGVuZCwgRUFkZFN0eWxlZEVsZW1lbnQgPSBBZGRTdHlsZWRFbGVt
ZW50KTsKLSAgICBQb3NpdGlvbiBwb3NpdGlvblRvQ29tcHV0ZUlubGluZVN0eWxlQ2hhbmdlKFBh
c3NSZWZQdHI8Tm9kZT4sIFJlZlB0cjxOb2RlPiYgZHVtbXlFbGVtZW50KTsKLSAgICB2b2lkIGFw
cGx5SW5saW5lU3R5bGVDaGFuZ2UoUGFzc1JlZlB0cjxOb2RlPiBzdGFydE5vZGUsIFBhc3NSZWZQ
dHI8Tm9kZT4gZW5kTm9kZSwgU3R5bGVDaGFuZ2UmLCBFQWRkU3R5bGVkRWxlbWVudCk7CisgICAg
dm9pZCBhZGRJbmxpbmVTdHlsZUlmTmVlZGVkKEVkaXRpbmdTdHlsZSosIE5vZGUmIHN0YXJ0LCBO
b2RlJiBlbmQsIEVBZGRTdHlsZWRFbGVtZW50ID0gQWRkU3R5bGVkRWxlbWVudCk7CisgICAgUG9z
aXRpb24gcG9zaXRpb25Ub0NvbXB1dGVJbmxpbmVTdHlsZUNoYW5nZShOb2RlJiwgUmVmUHRyPE5v
ZGU+JiBkdW1teUVsZW1lbnQpOworICAgIHZvaWQgYXBwbHlJbmxpbmVTdHlsZUNoYW5nZShOb2Rl
JiBzdGFydE5vZGUsIE5vZGUmIGVuZE5vZGUsIFN0eWxlQ2hhbmdlJiwgRUFkZFN0eWxlZEVsZW1l
bnQpOwogICAgIHZvaWQgc3BsaXRUZXh0QXRTdGFydChjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNv
bnN0IFBvc2l0aW9uJiBlbmQpOwogICAgIHZvaWQgc3BsaXRUZXh0QXRFbmQoY29uc3QgUG9zaXRp
b24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKTsKICAgICB2b2lkIHNwbGl0VGV4dEVsZW1l
bnRBdFN0YXJ0KGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCk7CkBA
IC0xMDksNyArMTA5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1lcmdlRW5kV2l0aE5leHRJZklk
ZW50aWNhbChjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpOwogICAg
IHZvaWQgY2xlYW51cFVuc3R5bGVkQXBwbGVTdHlsZVNwYW5zKENvbnRhaW5lck5vZGUqIGR1bW15
U3BhbkFuY2VzdG9yKTsKIAotICAgIHZvaWQgc3Vycm91bmROb2RlUmFuZ2VXaXRoRWxlbWVudChQ
YXNzUmVmUHRyPE5vZGU+IHN0YXJ0LCBQYXNzUmVmUHRyPE5vZGU+IGVuZCwgUGFzc1JlZlB0cjxF
bGVtZW50Pik7CisgICAgdm9pZCBzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVtZW50KE5vZGUmIHN0
YXJ0LCBOb2RlJiBlbmQsIFJlZjxFbGVtZW50PiYmKTsKICAgICBmbG9hdCBjb21wdXRlZEZvbnRT
aXplKE5vZGUqKTsKICAgICB2b2lkIGpvaW5DaGlsZFRleHROb2RlcyhOb2RlKiwgY29uc3QgUG9z
aXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKTsKIApAQCAtMTM0LDYgKzEzNCw2IEBA
IGVudW0gU2hvdWxkU3R5bGVBdHRyaWJ1dGVCZUVtcHR5IHsgQWxsb3dOb25FbXB0eVN0eWxlQXR0
cmlidXRlLCBTdHlsZUF0dHJpYnV0ZVNoCiBib29sIGlzRW1wdHlGb250VGFnKGNvbnN0IEVsZW1l
bnQqLCBTaG91bGRTdHlsZUF0dHJpYnV0ZUJlRW1wdHkgPSBTdHlsZUF0dHJpYnV0ZVNob3VsZEJl
RW1wdHkpOwogYm9vbCBpc0xlZ2FjeUFwcGxlU3R5bGVTcGFuKGNvbnN0IE5vZGUqKTsKIGJvb2wg
aXNTdHlsZVNwYW5PclNwYW5XaXRoT25seVN0eWxlQXR0cmlidXRlKGNvbnN0IEVsZW1lbnQqKTsK
LVJlZlB0cjxIVE1MRWxlbWVudD4gY3JlYXRlU3R5bGVTcGFuRWxlbWVudChEb2N1bWVudCYpOwor
UmVmPEhUTUxFbGVtZW50PiBjcmVhdGVTdHlsZVNwYW5FbGVtZW50KERvY3VtZW50Jik7CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Q29tcG9zaXRlRWRpdENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3Np
dGVFZGl0Q29tbWFuZC5jcHAKaW5kZXggZmMzYWQ5YWI0NzRhN2NhNTRjOGE4ZmQ4ZWNkNzkxYjFl
Zjk2NTBhOS4uZTdkZWI4NjM5OTY1YmUwMjZjOTliZDkwM2JiYjI3M2U2MTlmYmM1YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKQEAgLTQ1
OCwxOSArNDU4LDE4IEBAIFN0cmluZyBDb21wb3NpdGVFZGl0Q29tbWFuZDo6aW5wdXRFdmVudFR5
cGVOYW1lKCkgY29uc3QKIC8vCiAvLyBzdWdhcnktc3dlZXQgY29udmVuaWVuY2UgZnVuY3Rpb25z
IHRvIGhlbHAgY3JlYXRlIGFuZCBhcHBseSBlZGl0IGNvbW1hbmRzIGluIGNvbXBvc2l0ZSBjb21t
YW5kcwogLy8KLXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmFwcGx5Q29tbWFuZFRvQ29tcG9z
aXRlKFBhc3NSZWZQdHI8RWRpdENvbW1hbmQ+IHBycENvbW1hbmQpCit2b2lkIENvbXBvc2l0ZUVk
aXRDb21tYW5kOjphcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShSZWY8RWRpdENvbW1hbmQ+JiYgY29t
bWFuZCkKIHsKLSAgICBSZWZQdHI8RWRpdENvbW1hbmQ+IGNvbW1hbmQgPSBwcnBDb21tYW5kOwog
ICAgIGNvbW1hbmQtPnNldFBhcmVudCh0aGlzKTsKICAgICBjb21tYW5kLT5kb0FwcGx5KCk7CiAg
ICAgaWYgKGNvbW1hbmQtPmlzU2ltcGxlRWRpdENvbW1hbmQoKSkgewogICAgICAgICBjb21tYW5k
LT5zZXRQYXJlbnQobnVsbHB0cik7Ci0gICAgICAgIGVuc3VyZUNvbXBvc2l0aW9uKCkuYXBwZW5k
KHRvU2ltcGxlRWRpdENvbW1hbmQoY29tbWFuZC5nZXQoKSkpOworICAgICAgICBlbnN1cmVDb21w
b3NpdGlvbigpLmFwcGVuZCh0b1NpbXBsZUVkaXRDb21tYW5kKGNvbW1hbmQucHRyKCkpKTsKICAg
ICB9CiAgICAgbV9jb21tYW5kcy5hcHBlbmQoV1RGTW92ZShjb21tYW5kKSk7CiB9CiAKLXZvaWQg
Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFBhc3NSZWZQdHI8
Q29tcG9zaXRlRWRpdENvbW1hbmQ+IGNvbW1hbmQsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbikKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmFwcGx5Q29tbWFuZFRvQ29tcG9z
aXRlKFJlZjxDb21wb3NpdGVFZGl0Q29tbWFuZD4mJiBjb21tYW5kLCBjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlY3Rpb24pCiB7CiAgICAgY29tbWFuZC0+c2V0UGFyZW50KHRoaXMpOwogICAg
IGlmIChzZWxlY3Rpb24gIT0gY29tbWFuZC0+ZW5kaW5nU2VsZWN0aW9uKCkpIHsKQEAgLTQ3OCw3
ICs0NzcsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjphcHBseUNvbW1hbmRUb0NvbXBv
c2l0ZShQYXNzUmVmUHRyPENvbXBvc2l0ZUVkaXRDb21tYQogICAgICAgICBjb21tYW5kLT5zZXRF
bmRpbmdTZWxlY3Rpb24oc2VsZWN0aW9uKTsKICAgICB9CiAgICAgY29tbWFuZC0+ZG9BcHBseSgp
OwotICAgIG1fY29tbWFuZHMuYXBwZW5kKGNvbW1hbmQpOworICAgIG1fY29tbWFuZHMuYXBwZW5k
KFdURk1vdmUoY29tbWFuZCkpOwogfQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjphcHBs
eVN0eWxlKGNvbnN0IEVkaXRpbmdTdHlsZSogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlv
bikKQEAgLTQ5MSwxNCArNDkwLDE0IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmFwcGx5
U3R5bGUoY29uc3QgRWRpdGluZ1N0eWxlKiBzdHlsZSwgY29uc3QgUG9zaXRpb24mCiAgICAgYXBw
bHlDb21tYW5kVG9Db21wb3NpdGUoQXBwbHlTdHlsZUNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgp
LCBzdHlsZSwgc3RhcnQsIGVuZCwgZWRpdGluZ0FjdGlvbikpOwogfQogCi12b2lkIENvbXBvc2l0
ZUVkaXRDb21tYW5kOjphcHBseVN0eWxlZEVsZW1lbnQoUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVt
ZW50KQordm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBwbHlTdHlsZWRFbGVtZW50KFJlZjxF
bGVtZW50PiYmIGVsZW1lbnQpCiB7Ci0gICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoQXBwbHlT
dHlsZUNvbW1hbmQ6OmNyZWF0ZShlbGVtZW50LCBmYWxzZSkpOworICAgIGFwcGx5Q29tbWFuZFRv
Q29tcG9zaXRlKEFwcGx5U3R5bGVDb21tYW5kOjpjcmVhdGUoV1RGTW92ZShlbGVtZW50KSwgZmFs
c2UpKTsKIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlU3R5bGVkRWxlbWVu
dChQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQpCit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5k
OjpyZW1vdmVTdHlsZWRFbGVtZW50KFJlZjxFbGVtZW50PiYmIGVsZW1lbnQpCiB7Ci0gICAgYXBw
bHlDb21tYW5kVG9Db21wb3NpdGUoQXBwbHlTdHlsZUNvbW1hbmQ6OmNyZWF0ZShlbGVtZW50LCB0
cnVlKSk7CisgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoQXBwbHlTdHlsZUNvbW1hbmQ6OmNy
ZWF0ZShXVEZNb3ZlKGVsZW1lbnQpLCB0cnVlKSk7CiB9CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENv
bW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcihib29sIHVzZURlZmF1bHRQYXJhZ3JhcGhF
bGVtZW50LCBib29sIHBhc3RlQmxvY2txdXRvZUludG9VbnF1b3RlZEFyZWEpCkBAIC02NDMsMTMg
KzY0MiwxNCBAQCBIVE1MRWxlbWVudCogQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VFbGVt
ZW50V2l0aFNwYW5QcmVzZXJ2aW5nQ2hpbGRyZW5BbmRBdAogICAgIC8vIEl0IHdvdWxkIGFsc28g
YmUgcG9zc2libGUgdG8gaW1wbGVtZW50IGFsbCBvZiBSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFu
ZAogICAgIC8vIGFzIGEgc2VyaWVzIG9mIGV4aXN0aW5nIHNtYWxsZXIgZWRpdCBjb21tYW5kcy4g
IFNvbWVvbmUgd2hvIHdhbnRlZCB0bwogICAgIC8vIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGVkaXQg
Y29tbWFuZHMgY291bGQgZG8gc28gaGVyZS4KLSAgICBSZWZQdHI8UmVwbGFjZU5vZGVXaXRoU3Bh
bkNvbW1hbmQ+IGNvbW1hbmQgPSBSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZDo6Y3JlYXRlKG5v
ZGUpOwotICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKGNvbW1hbmQpOworICAgIGF1dG8gY29t
bWFuZCA9IFJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kOjpjcmVhdGUobm9kZSk7CisgICAgYXV0
byogY29tbWFuZFB0ciA9IGNvbW1hbmQucHRyKCk7CisgICAgYXBwbHlDb21tYW5kVG9Db21wb3Np
dGUoV1RGTW92ZShjb21tYW5kKSk7CiAgICAgLy8gUmV0dXJuaW5nIGEgcmF3IHBvaW50ZXIgaGVy
ZSBpcyBPSyBiZWNhdXNlIHRoZSBjb21tYW5kIGlzIHJldGFpbmVkIGJ5CiAgICAgLy8gYXBwbHlD
b21tYW5kVG9Db21wb3NpdGUgKHRodXMgcmV0YWluaW5nIHRoZSBzcGFuKSwgYW5kIHRoZSBzcGFu
IGlzIGFsc28KICAgICAvLyBpbiB0aGUgRE9NIHRyZWUsIGFuZCB0aHVzIGFsaXZlIHdoaWUgaXQg
aGFzIGEgcGFyZW50LgotICAgIEFTU0VSVChjb21tYW5kLT5zcGFuRWxlbWVudCgpLT5pc0Nvbm5l
Y3RlZCgpKTsKLSAgICByZXR1cm4gY29tbWFuZC0+c3BhbkVsZW1lbnQoKTsKKyAgICBBU1NFUlQo
Y29tbWFuZFB0ci0+c3BhbkVsZW1lbnQoKS0+aXNDb25uZWN0ZWQoKSk7CisgICAgcmV0dXJuIGNv
bW1hbmRQdHItPnNwYW5FbGVtZW50KCk7CiB9CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6
OnBydW5lKFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSkKQEAgLTcwMyw4ICs3MDMsNyBAQCB2b2lkIENv
bXBvc2l0ZUVkaXRDb21tYW5kOjppbnB1dFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIHNl
bGVjdEluc2VydGVkVGV4dAogICAgICAgICBuZXdsaW5lID0gdGV4dC5maW5kKCdcbicsIG9mZnNl
dCk7CiAgICAgICAgIGlmIChuZXdsaW5lICE9IG9mZnNldCkgewogICAgICAgICAgICAgaW50IHN1
YnN0cmluZ0xlbmd0aCA9IG5ld2xpbmUgPT0gbm90Rm91bmQgPyBsZW5ndGggLSBvZmZzZXQgOiBu
ZXdsaW5lIC0gb2Zmc2V0OwotICAgICAgICAgICAgUmVmUHRyPEluc2VydFRleHRDb21tYW5kPiBj
b21tYW5kID0gSW5zZXJ0VGV4dENvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCB0ZXh0LnN1YnN0
cmluZyhvZmZzZXQsIHN1YnN0cmluZ0xlbmd0aCksIGZhbHNlKTsKLSAgICAgICAgICAgIGFwcGx5
Q29tbWFuZFRvQ29tcG9zaXRlKGNvbW1hbmQpOworICAgICAgICAgICAgYXBwbHlDb21tYW5kVG9D
b21wb3NpdGUoSW5zZXJ0VGV4dENvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCB0ZXh0LnN1YnN0
cmluZyhvZmZzZXQsIHN1YnN0cmluZ0xlbmd0aCksIGZhbHNlKSk7CiAgICAgICAgIH0KICAgICAg
ICAgaWYgKG5ld2xpbmUgIT0gbm90Rm91bmQpIHsKICAgICAgICAgICAgIFZpc2libGVQb3NpdGlv
biBjYXJldChlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSk7CkBAIC03NzcsNyArNzc2
LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVwbGFjZVRleHRJbk5vZGVQcmVzZXJ2
aW5nTWFya2VycyhQYXNzUmVmUHRyPFRleHQ+IHAKIHsKICAgICBSZWZQdHI8VGV4dD4gbm9kZShw
cnBOb2RlKTsKICAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXImIG1hcmtlckNvbnRyb2xsZXIg
PSBkb2N1bWVudCgpLm1hcmtlcnMoKTsKLSAgICBhdXRvIG1hcmtlcnMgPSBjb3B5TWFya2Vycyht
YXJrZXJDb250cm9sbGVyLm1hcmtlcnNJblJhbmdlKFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwg
bm9kZSwgb2Zmc2V0LCBub2RlLCBvZmZzZXQgKyBjb3VudCkucHRyKCksIERvY3VtZW50TWFya2Vy
OjpBbGxNYXJrZXJzKCkpKTsKKyAgICBhdXRvIG1hcmtlcnMgPSBjb3B5TWFya2VycyhtYXJrZXJD
b250cm9sbGVyLm1hcmtlcnNJblJhbmdlKFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgbm9kZSwg
b2Zmc2V0LCBub2RlLCBvZmZzZXQgKyBjb3VudCksIERvY3VtZW50TWFya2VyOjpBbGxNYXJrZXJz
KCkpKTsKICAgICByZXBsYWNlVGV4dEluTm9kZShub2RlLCBvZmZzZXQsIGNvdW50LCByZXBsYWNl
bWVudFRleHQpOwogICAgIFJlZlB0cjxSYW5nZT4gbmV3UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRv
Y3VtZW50KCksIG5vZGUsIG9mZnNldCwgbm9kZSwgb2Zmc2V0ICsgcmVwbGFjZW1lbnRUZXh0Lmxl
bmd0aCgpKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIG1hcmtlciA6IG1hcmtlcnMpCkBAIC0xMjM2
LDcgKzEyMzUsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpwdXNoQW5jaG9yRWxlbWVu
dERvd24oRWxlbWVudCYgYW5jaG9yRWxlbWVudCkKICAgICBBU1NFUlQoYW5jaG9yRWxlbWVudC5p
c0xpbmsoKSk7CiAgICAgCiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb246
OnNlbGVjdGlvbkZyb21Db250ZW50c09mTm9kZSgmYW5jaG9yRWxlbWVudCkpOwotICAgIGFwcGx5
U3R5bGVkRWxlbWVudCgmYW5jaG9yRWxlbWVudCk7CisgICAgYXBwbHlTdHlsZWRFbGVtZW50KGFu
Y2hvckVsZW1lbnQpOwogICAgIC8vIENsb25lcyBvZiBhbmNob3JFbGVtZW50IGhhdmUgYmVlbiBw
dXNoZWQgZG93biwgbm93IHJlbW92ZSBpdC4KICAgICBpZiAoYW5jaG9yRWxlbWVudC5pc0Nvbm5l
Y3RlZCgpKQogICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKCZhbmNob3JFbGVt
ZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENv
bW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaApp
bmRleCAwMjIxZGM5OTljY2ZlNmZjNTliMTgxYTlmZjc4MDk5YjZlMzVmM2I3Li4zN2FmMDFlOTJk
NzRlNTk1NzI4Mzg2N2Y1YjE0NWUzZjZmMTBhMjE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oCkBAIC0xMzQsMTIgKzEzNCwxMiBAQCBwcm90ZWN0
ZWQ6CiAgICAgLy8gc3VnYXJ5LXN3ZWV0IGNvbnZlbmllbmNlIGZ1bmN0aW9ucyB0byBoZWxwIGNy
ZWF0ZSBhbmQgYXBwbHkgZWRpdCBjb21tYW5kcyBpbiBjb21wb3NpdGUgY29tbWFuZHMKICAgICAv
LwogICAgIHZvaWQgYXBwZW5kTm9kZShQYXNzUmVmUHRyPE5vZGU+LCBQYXNzUmVmUHRyPENvbnRh
aW5lck5vZGU+IHBhcmVudCk7Ci0gICAgdm9pZCBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShQYXNz
UmVmUHRyPEVkaXRDb21tYW5kPik7Ci0gICAgdm9pZCBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShQ
YXNzUmVmUHRyPENvbXBvc2l0ZUVkaXRDb21tYW5kPiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYp
OworICAgIHZvaWQgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoUmVmPEVkaXRDb21tYW5kPiYmKTsK
KyAgICB2b2lkIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFJlZjxDb21wb3NpdGVFZGl0Q29tbWFu
ZD4mJiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogICAgIHZvaWQgYXBwbHlTdHlsZShjb25z
dCBFZGl0aW5nU3R5bGUqLCBFZGl0QWN0aW9uID0gRWRpdEFjdGlvbkNoYW5nZUF0dHJpYnV0ZXMp
OwogICAgIHZvaWQgYXBwbHlTdHlsZShjb25zdCBFZGl0aW5nU3R5bGUqLCBjb25zdCBQb3NpdGlv
biYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQsIEVkaXRBY3Rpb24gPSBFZGl0QWN0aW9uQ2hh
bmdlQXR0cmlidXRlcyk7Ci0gICAgdm9pZCBhcHBseVN0eWxlZEVsZW1lbnQoUGFzc1JlZlB0cjxF
bGVtZW50Pik7Ci0gICAgdm9pZCByZW1vdmVTdHlsZWRFbGVtZW50KFBhc3NSZWZQdHI8RWxlbWVu
dD4pOworICAgIHZvaWQgYXBwbHlTdHlsZWRFbGVtZW50KFJlZjxFbGVtZW50PiYmKTsKKyAgICB2
b2lkIHJlbW92ZVN0eWxlZEVsZW1lbnQoUmVmPEVsZW1lbnQ+JiYpOwogICAgIHZvaWQgZGVsZXRl
U2VsZWN0aW9uKGJvb2wgc21hcnREZWxldGUgPSBmYWxzZSwgYm9vbCBtZXJnZUJsb2Nrc0FmdGVy
RGVsZXRlID0gdHJ1ZSwgYm9vbCByZXBsYWNlID0gZmFsc2UsIGJvb2wgZXhwYW5kRm9yU3BlY2lh
bEVsZW1lbnRzID0gdHJ1ZSwgYm9vbCBzYW5pdGl6ZU1hcmt1cCA9IHRydWUpOwogICAgIHZvaWQg
ZGVsZXRlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBib29sIHNtYXJ0RGVsZXRl
ID0gZmFsc2UsIGJvb2wgbWVyZ2VCbG9ja3NBZnRlckRlbGV0ZSA9IHRydWUsIGJvb2wgcmVwbGFj
ZSA9IGZhbHNlLCBib29sIGV4cGFuZEZvclNwZWNpYWxFbGVtZW50cyA9IHRydWUsIGJvb2wgc2Fu
aXRpemVNYXJrdXAgPSB0cnVlKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVGV4dEZyb21Ob2Rl
KFBhc3NSZWZQdHI8VGV4dD4sIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291bnQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5k
ZXggYjhjOTdkOGNlZmFhYzI3NDFlMjA0MThiZjQxNTdkMmIyNzQ1NzUyZC4uNWI3NGNmODFkNjJh
ZjQwZjNkMWFkMzVlZjYxNmY1NzYwMmE5NTg0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC03OTEsOSArNzkxLDggQEAgU3Ry
aW5nIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om9yaWdpbmFsU3RyaW5nRm9yQXV0b2NvcnJlY3Rp
b25BdEJlZ2lubmluZ09mU2VsZWMKICAgICBpZiAobmV4dFBvc2l0aW9uLmlzTnVsbCgpKQogICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlT2ZGaXJzdENo
YXJhY3RlciA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3RhcnRPZlNlbGVjdGlvbi5kZWVw
RXF1aXZhbGVudCgpLCBuZXh0UG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7Ci0gICAgVmVjdG9y
PFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gZG9jdW1lbnQoKS5tYXJrZXJzKCku
bWFya2Vyc0luUmFuZ2UocmFuZ2VPZkZpcnN0Q2hhcmFjdGVyLmdldCgpLCBEb2N1bWVudE1hcmtl
cjo6QXV0b2NvcnJlY3RlZCk7Ci0gICAgZm9yIChhdXRvKiBtYXJrZXIgOiBtYXJrZXJzKSB7Cisg
ICAgYXV0byByYW5nZU9mRmlyc3RDaGFyYWN0ZXIgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCks
IHN0YXJ0T2ZTZWxlY3Rpb24uZGVlcEVxdWl2YWxlbnQoKSwgbmV4dFBvc2l0aW9uLmRlZXBFcXVp
dmFsZW50KCkpOworICAgIGZvciAoYXV0byogbWFya2VyIDogZG9jdW1lbnQoKS5tYXJrZXJzKCku
bWFya2Vyc0luUmFuZ2UocmFuZ2VPZkZpcnN0Q2hhcmFjdGVyLCBEb2N1bWVudE1hcmtlcjo6QXV0
b2NvcnJlY3RlZCkpIHsKICAgICAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gbWFya2VyLT5zdGFydE9m
ZnNldCgpOwogICAgICAgICBpZiAoc3RhcnRPZmZzZXQgPT0gc3RhcnRPZlNlbGVjdGlvbi5kZWVw
RXF1aXZhbGVudCgpLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKQogICAgICAgICAgICAgcmV0dXJu
IG1hcmtlci0+ZGVzY3JpcHRpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRGljdGF0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RpY3RhdGlv
bkNvbW1hbmQuY3BwCmluZGV4IDliMTVhODE4NjVjNzc4MjkwMDI5MGE0N2ViZWVjYzI5YTJkM2Ux
YjIuLjM1ZTY2M2ZhYWE0MTc0YWI5MGMwOTU1MzE2ZDYwNmMyZDQxYTNlODYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9EaWN0YXRpb25Db21tYW5kLmNwcApAQCAtMTE2LDggKzExNiw4IEBA
IHZvaWQgRGljdGF0aW9uQ29tbWFuZDo6aW5zZXJ0VGV4dFJ1bldpdGhvdXROZXdsaW5lcyhzaXpl
X3QgbGluZVN0YXJ0LCBzaXplX3QgbGluCiB7CiAgICAgVmVjdG9yPERpY3RhdGlvbkFsdGVybmF0
aXZlPiBhbHRlcm5hdGl2ZXNJbkxpbmU7CiAgICAgY29sbGVjdERpY3RhdGlvbkFsdGVybmF0aXZl
c0luUmFuZ2UobGluZVN0YXJ0LCBsaW5lTGVuZ3RoLCBhbHRlcm5hdGl2ZXNJbkxpbmUpOwotICAg
IFJlZlB0cjxJbnNlcnRUZXh0Q29tbWFuZD4gY29tbWFuZCA9IEluc2VydFRleHRDb21tYW5kOjpj
cmVhdGVXaXRoTWFya2VyU3VwcGxpZXIoZG9jdW1lbnQoKSwgbV90ZXh0VG9JbnNlcnQuc3Vic3Ry
aW5nKGxpbmVTdGFydCwgbGluZUxlbmd0aCksIERpY3RhdGlvbk1hcmtlclN1cHBsaWVyOjpjcmVh
dGUoYWx0ZXJuYXRpdmVzSW5MaW5lKSwgRWRpdEFjdGlvbkRpY3RhdGlvbik7Ci0gICAgYXBwbHlD
b21tYW5kVG9Db21wb3NpdGUoY29tbWFuZCwgZW5kaW5nU2VsZWN0aW9uKCkpOworICAgIGF1dG8g
Y29tbWFuZCA9IEluc2VydFRleHRDb21tYW5kOjpjcmVhdGVXaXRoTWFya2VyU3VwcGxpZXIoZG9j
dW1lbnQoKSwgbV90ZXh0VG9JbnNlcnQuc3Vic3RyaW5nKGxpbmVTdGFydCwgbGluZUxlbmd0aCks
IERpY3RhdGlvbk1hcmtlclN1cHBsaWVyOjpjcmVhdGUoYWx0ZXJuYXRpdmVzSW5MaW5lKSwgRWRp
dEFjdGlvbkRpY3RhdGlvbik7CisgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoV1RGTW92ZShj
b21tYW5kKSwgZW5kaW5nU2VsZWN0aW9uKCkpOwogfQogCiB2b2lkIERpY3RhdGlvbkNvbW1hbmQ6
Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdT
dHlsZS5jcHAKaW5kZXggYWU0OTUzYjI4ZTEzYWI4OGY0MzEwNTdjZDdmY2NiNjRhMGNjOTAzYy4u
YmUxOWY5YzRkOTIyMTUzMGEyMmQzNDdmYjBjNDNkMWI5NDFmNDI0NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcApAQCAtOTMsNyArOTMsNyBAQCBjb25zdCB1bnNpZ25l
ZCBudW1Jbmhlcml0YWJsZUVkaXRpbmdQcm9wZXJ0aWVzID0gbnVtQWxsRWRpdGluZ1Byb3BlcnRp
ZXMgLSAyOwogCiBlbnVtIEVkaXRpbmdQcm9wZXJ0aWVzVG9JbmNsdWRlIHsgT25seUluaGVyaXRh
YmxlRWRpdGluZ1Byb3BlcnRpZXMsIEFsbEVkaXRpbmdQcm9wZXJ0aWVzIH07CiB0ZW1wbGF0ZSA8
Y2xhc3MgU3R5bGVEZWNsYXJhdGlvblR5cGU+Ci1zdGF0aWMgUGFzc1JlZlB0cjxNdXRhYmxlU3R5
bGVQcm9wZXJ0aWVzPiBjb3B5RWRpdGluZ1Byb3BlcnRpZXMoU3R5bGVEZWNsYXJhdGlvblR5cGUq
IHN0eWxlLCBFZGl0aW5nUHJvcGVydGllc1RvSW5jbHVkZSB0eXBlKQorc3RhdGljIFJlZjxNdXRh
YmxlU3R5bGVQcm9wZXJ0aWVzPiBjb3B5RWRpdGluZ1Byb3BlcnRpZXMoU3R5bGVEZWNsYXJhdGlv
blR5cGUqIHN0eWxlLCBFZGl0aW5nUHJvcGVydGllc1RvSW5jbHVkZSB0eXBlKQogewogICAgIGlm
ICh0eXBlID09IEFsbEVkaXRpbmdQcm9wZXJ0aWVzKQogICAgICAgICByZXR1cm4gc3R5bGUtPmNv
cHlQcm9wZXJ0aWVzSW5TZXQoZWRpdGluZ1Byb3BlcnRpZXMsIG51bUFsbEVkaXRpbmdQcm9wZXJ0
aWVzKTsKQEAgLTEwOSwzMiArMTA5LDMxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0VkaXRpbmdQ
cm9wZXJ0eShpbnQgaWQpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0
cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBjb3B5UHJvcGVydGllc0Zyb21Db21wdXRlZFN0eWxl
KENvbXB1dGVkU3R5bGVFeHRyYWN0b3ImIGNvbXB1dGVkU3R5bGUsIEVkaXRpbmdTdHlsZTo6UHJv
cGVydGllc1RvSW5jbHVkZSBwcm9wZXJ0aWVzVG9JbmNsdWRlKQorc3RhdGljIFJlZjxNdXRhYmxl
U3R5bGVQcm9wZXJ0aWVzPiBjb3B5UHJvcGVydGllc0Zyb21Db21wdXRlZFN0eWxlKENvbXB1dGVk
U3R5bGVFeHRyYWN0b3ImIGNvbXB1dGVkU3R5bGUsIEVkaXRpbmdTdHlsZTo6UHJvcGVydGllc1Rv
SW5jbHVkZSBwcm9wZXJ0aWVzVG9JbmNsdWRlKQogewogICAgIHN3aXRjaCAocHJvcGVydGllc1Rv
SW5jbHVkZSkgewotICAgIGNhc2UgRWRpdGluZ1N0eWxlOjpBbGxQcm9wZXJ0aWVzOgotICAgICAg
ICByZXR1cm4gY29tcHV0ZWRTdHlsZS5jb3B5UHJvcGVydGllcygpOwogICAgIGNhc2UgRWRpdGlu
Z1N0eWxlOjpPbmx5RWRpdGluZ0luaGVyaXRhYmxlUHJvcGVydGllczoKICAgICAgICAgcmV0dXJu
IGNvcHlFZGl0aW5nUHJvcGVydGllcygmY29tcHV0ZWRTdHlsZSwgT25seUluaGVyaXRhYmxlRWRp
dGluZ1Byb3BlcnRpZXMpOwogICAgIGNhc2UgRWRpdGluZ1N0eWxlOjpFZGl0aW5nUHJvcGVydGll
c0luRWZmZWN0OgogICAgICAgICByZXR1cm4gY29weUVkaXRpbmdQcm9wZXJ0aWVzKCZjb21wdXRl
ZFN0eWxlLCBBbGxFZGl0aW5nUHJvcGVydGllcyk7CisgICAgY2FzZSBFZGl0aW5nU3R5bGU6OkFs
bFByb3BlcnRpZXM6CisgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY29tcHV0ZWRTdHlsZS5jb3B5UHJvcGVy
dGllcygpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBj
b3B5UHJvcGVydGllc0Zyb21Db21wdXRlZFN0eWxlKE5vZGUqIG5vZGUsIEVkaXRpbmdTdHlsZTo6
UHJvcGVydGllc1RvSW5jbHVkZSBwcm9wZXJ0aWVzVG9JbmNsdWRlKQorc3RhdGljIFJlZjxNdXRh
YmxlU3R5bGVQcm9wZXJ0aWVzPiBjb3B5UHJvcGVydGllc0Zyb21Db21wdXRlZFN0eWxlKE5vZGUq
IG5vZGUsIEVkaXRpbmdTdHlsZTo6UHJvcGVydGllc1RvSW5jbHVkZSBwcm9wZXJ0aWVzVG9JbmNs
dWRlKQogewogICAgIENvbXB1dGVkU3R5bGVFeHRyYWN0b3IgY29tcHV0ZWRTdHlsZShub2RlKTsK
ICAgICByZXR1cm4gY29weVByb3BlcnRpZXNGcm9tQ29tcHV0ZWRTdHlsZShjb21wdXRlZFN0eWxl
LCBwcm9wZXJ0aWVzVG9JbmNsdWRlKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+
IGV4dHJhY3RQcm9wZXJ0eVZhbHVlKGNvbnN0IFN0eWxlUHJvcGVydGllcyYgc3R5bGUsIENTU1By
b3BlcnR5SUQgcHJvcGVydHlJRCkKK3N0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGV4dHJhY3RQcm9w
ZXJ0eVZhbHVlKGNvbnN0IFN0eWxlUHJvcGVydGllcyYgc3R5bGUsIENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJRCkKIHsKICAgICByZXR1cm4gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0
eUlEKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGV4dHJhY3RQcm9wZXJ0eVZh
bHVlKENvbXB1dGVkU3R5bGVFeHRyYWN0b3ImIGNvbXB1dGVkU3R5bGUsIENTU1Byb3BlcnR5SUQg
cHJvcGVydHlJRCkKK3N0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGV4dHJhY3RQcm9wZXJ0eVZhbHVl
KENvbXB1dGVkU3R5bGVFeHRyYWN0b3ImIGNvbXB1dGVkU3R5bGUsIENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJRCkKIHsKICAgICByZXR1cm4gY29tcHV0ZWRTdHlsZS5wcm9wZXJ0eVZhbHVlKHByb3Bl
cnR5SUQpOwogfQpAQCAtMTUwLDcgKzE0OSw3IEBAIGludCBpZGVudGlmaWVyRm9yU3R5bGVQcm9w
ZXJ0eShUJiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQogICAgIHJldHVybiBkb3du
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS52YWx1ZUlEKCk7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IFBhc3NSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gZ2V0UHJvcGVy
dGllc05vdEluKFN0eWxlUHJvcGVydGllcyYgc3R5bGVXaXRoUmVkdW5kYW50UHJvcGVydGllcywg
VCYgYmFzZVN0eWxlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFJlZjxNdXRhYmxlU3R5bGVQcm9w
ZXJ0aWVzPiBnZXRQcm9wZXJ0aWVzTm90SW4oU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZVdpdGhSZWR1
bmRhbnRQcm9wZXJ0aWVzLCBUJiBiYXNlU3R5bGUpOwogZW51bSBMZWdhY3lGb250U2l6ZU1vZGUg
eyBBbHdheXNVc2VMZWdhY3lGb250U2l6ZSwgVXNlTGVnYWN5Rm9udFNpemVPbmx5SWZQaXhlbFZh
bHVlc01hdGNoIH07CiBzdGF0aWMgaW50IGxlZ2FjeUZvbnRTaXplRnJvbUNTU1ZhbHVlKERvY3Vt
ZW50KiwgQ1NTUHJpbWl0aXZlVmFsdWUqLCBib29sIHNob3VsZFVzZUZpeGVkRm9udERlZmF1bHRT
aXplLCBMZWdhY3lGb250U2l6ZU1vZGUpOwogc3RhdGljIGJvb2wgaGFzVHJhbnNwYXJlbnRCYWNr
Z3JvdW5kQ29sb3IoU3R5bGVQcm9wZXJ0aWVzKik7CkBAIC0yNTgsNyArMjU3LDcgQEAgcHVibGlj
OgogICAgIGJvb2wgaGFzQXR0cmlidXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsg
fQogICAgIGJvb2wgdmFsdWVJc1ByZXNlbnRJblN0eWxlKEVsZW1lbnQmLCBjb25zdCBFZGl0aW5n
U3R5bGUmKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIGFkZFRvU3R5bGUoRWxlbWVudCosIEVk
aXRpbmdTdHlsZSopIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NW
YWx1ZT4gYXR0cmlidXRlVmFsdWVBc0NTU1ZhbHVlKEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0
dWFsIFJlZlB0cjxDU1NWYWx1ZT4gYXR0cmlidXRlVmFsdWVBc0NTU1ZhbHVlKEVsZW1lbnQqKSBj
b25zdDsKICAgICBpbmxpbmUgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYXR0ck5hbWU7IH0KIAogcHJvdGVjdGVkOgpAQCAtMjkxLDcgKzI5MCw3
IEBAIHZvaWQgSFRNTEF0dHJpYnV0ZUVxdWl2YWxlbnQ6OmFkZFRvU3R5bGUoRWxlbWVudCogZWxl
bWVudCwgRWRpdGluZ1N0eWxlKiBzdHlsZSkKICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KG1f
cHJvcGVydHlJRCwgdmFsdWUtPmNzc1RleHQoKSk7CiB9CiAKLVBhc3NSZWZQdHI8Q1NTVmFsdWU+
IEhUTUxBdHRyaWJ1dGVFcXVpdmFsZW50OjphdHRyaWJ1dGVWYWx1ZUFzQ1NTVmFsdWUoRWxlbWVu
dCogZWxlbWVudCkgY29uc3QKK1JlZlB0cjxDU1NWYWx1ZT4gSFRNTEF0dHJpYnV0ZUVxdWl2YWxl
bnQ6OmF0dHJpYnV0ZVZhbHVlQXNDU1NWYWx1ZShFbGVtZW50KiBlbGVtZW50KSBjb25zdAogewog
ICAgIEFTU0VSVChlbGVtZW50KTsKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gZWxl
bWVudC0+Z2V0QXR0cmlidXRlKG1fYXR0ck5hbWUpOwpAQCAtMzA4LDcgKzMwNyw3IEBAIGNsYXNz
IEhUTUxGb250U2l6ZUVxdWl2YWxlbnQgOiBwdWJsaWMgSFRNTEF0dHJpYnV0ZUVxdWl2YWxlbnQg
ewogcHVibGljOgogICAgIEhUTUxGb250U2l6ZUVxdWl2YWxlbnQoKTsKIAotICAgIFBhc3NSZWZQ
dHI8Q1NTVmFsdWU+IGF0dHJpYnV0ZVZhbHVlQXNDU1NWYWx1ZShFbGVtZW50KikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgUmVmUHRyPENTU1ZhbHVlPiBhdHRyaWJ1dGVWYWx1ZUFzQ1NTVmFsdWUoRWxl
bWVudCopIGNvbnN0IG92ZXJyaWRlOwogfTsKIAogSFRNTEZvbnRTaXplRXF1aXZhbGVudDo6SFRN
TEZvbnRTaXplRXF1aXZhbGVudCgpCkBAIC0zMTYsNyArMzE1LDcgQEAgSFRNTEZvbnRTaXplRXF1
aXZhbGVudDo6SFRNTEZvbnRTaXplRXF1aXZhbGVudCgpCiB7CiB9CiAKLVBhc3NSZWZQdHI8Q1NT
VmFsdWU+IEhUTUxGb250U2l6ZUVxdWl2YWxlbnQ6OmF0dHJpYnV0ZVZhbHVlQXNDU1NWYWx1ZShF
bGVtZW50KiBlbGVtZW50KSBjb25zdAorUmVmUHRyPENTU1ZhbHVlPiBIVE1MRm9udFNpemVFcXVp
dmFsZW50OjphdHRyaWJ1dGVWYWx1ZUFzQ1NTVmFsdWUoRWxlbWVudCogZWxlbWVudCkgY29uc3QK
IHsKICAgICBBU1NFUlQoZWxlbWVudCk7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9
IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShtX2F0dHJOYW1lKTsKQEAgLTU3NCw5ICs1NzMsOSBAQCBi
b29sIEVkaXRpbmdTdHlsZTo6dGV4dERpcmVjdGlvbihXcml0aW5nRGlyZWN0aW9uJiB3cml0aW5n
RGlyZWN0aW9uKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBFZGl0aW5nU3R5
bGU6OnNldFN0eWxlKFBhc3NSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gc3R5bGUpCit2
b2lkIEVkaXRpbmdTdHlsZTo6c2V0U3R5bGUoUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+
JiYgc3R5bGUpCiB7Ci0gICAgbV9tdXRhYmxlU3R5bGUgPSBzdHlsZTsKKyAgICBtX211dGFibGVT
dHlsZSA9IFdURk1vdmUoc3R5bGUpOwogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0
byBmaWd1cmUgb3V0IHdoZXRoZXIgb3Igbm90IGZvbnQgaXMgZml4ZWQgd2lkdGggZm9yIG11dGFi
bGUgc3R5bGUuCiAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBmb250LWZhbWlseSBpcyBtb25vc3Bh
Y2UgYXMgaW4gRm9udERlc2NyaXB0aW9uIGJ1dCB3ZSBkb24ndCB3YW50IHRvIGR1cGxpY2F0ZSBj
b2RlIGhlcmUuCiAgICAgbV9zaG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6ZSA9IGZhbHNlOwpA
QCAtNjQ2LDkgKzY0NSw5IEBAIHZvaWQgRWRpdGluZ1N0eWxlOjpjbGVhcigpCiAgICAgc2V0U3Ry
aWtlVGhyb3VnaENoYW5nZShUZXh0RGVjb3JhdGlvbkNoYW5nZTo6Tm9uZSk7CiB9CiAKLVBhc3NS
ZWZQdHI8RWRpdGluZ1N0eWxlPiBFZGl0aW5nU3R5bGU6OmNvcHkoKSBjb25zdAorUmVmPEVkaXRp
bmdTdHlsZT4gRWRpdGluZ1N0eWxlOjpjb3B5KCkgY29uc3QKIHsKLSAgICBSZWZQdHI8RWRpdGlu
Z1N0eWxlPiBjb3B5ID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoKTsKKyAgICBhdXRvIGNvcHkgPSBF
ZGl0aW5nU3R5bGU6OmNyZWF0ZSgpOwogICAgIGlmIChtX211dGFibGVTdHlsZSkKICAgICAgICAg
Y29weS0+bV9tdXRhYmxlU3R5bGUgPSBtX211dGFibGVTdHlsZS0+bXV0YWJsZUNvcHkoKTsKICAg
ICBjb3B5LT5tX3Nob3VsZFVzZUZpeGVkRGVmYXVsdEZvbnRTaXplID0gbV9zaG91bGRVc2VGaXhl
ZERlZmF1bHRGb250U2l6ZTsKQEAgLTY1OCw5ICs2NTcsOSBAQCBQYXNzUmVmUHRyPEVkaXRpbmdT
dHlsZT4gRWRpdGluZ1N0eWxlOjpjb3B5KCkgY29uc3QKICAgICByZXR1cm4gY29weTsKIH0KIAot
UGFzc1JlZlB0cjxFZGl0aW5nU3R5bGU+IEVkaXRpbmdTdHlsZTo6ZXh0cmFjdEFuZFJlbW92ZUJs
b2NrUHJvcGVydGllcygpCitSZWY8RWRpdGluZ1N0eWxlPiBFZGl0aW5nU3R5bGU6OmV4dHJhY3RB
bmRSZW1vdmVCbG9ja1Byb3BlcnRpZXMoKQogewotICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IGJs
b2NrUHJvcGVydGllcyA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKCk7CisgICAgYXV0byBibG9ja1By
b3BlcnRpZXMgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZSgpOwogICAgIGlmICghbV9tdXRhYmxlU3R5
bGUpCiAgICAgICAgIHJldHVybiBibG9ja1Byb3BlcnRpZXM7CiAKQEAgLTY3MCw5ICs2NjksOSBA
QCBQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4gRWRpdGluZ1N0eWxlOjpleHRyYWN0QW5kUmVtb3Zl
QmxvY2tQcm9wZXJ0aWVzKCkKICAgICByZXR1cm4gYmxvY2tQcm9wZXJ0aWVzOwogfQogCi1QYXNz
UmVmUHRyPEVkaXRpbmdTdHlsZT4gRWRpdGluZ1N0eWxlOjpleHRyYWN0QW5kUmVtb3ZlVGV4dERp
cmVjdGlvbigpCitSZWY8RWRpdGluZ1N0eWxlPiBFZGl0aW5nU3R5bGU6OmV4dHJhY3RBbmRSZW1v
dmVUZXh0RGlyZWN0aW9uKCkKIHsKLSAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiB0ZXh0RGlyZWN0
aW9uID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoKTsKKyAgICBhdXRvIHRleHREaXJlY3Rpb24gPSBF
ZGl0aW5nU3R5bGU6OmNyZWF0ZSgpOwogICAgIHRleHREaXJlY3Rpb24tPm1fbXV0YWJsZVN0eWxl
ID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKCk7CiAgICAgdGV4dERpcmVjdGlvbi0+
bV9tdXRhYmxlU3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5VW5pY29kZUJpZGksIENTU1Zh
bHVlRW1iZWQsIG1fbXV0YWJsZVN0eWxlLT5wcm9wZXJ0eUlzSW1wb3J0YW50KENTU1Byb3BlcnR5
VW5pY29kZUJpZGkpKTsKICAgICB0ZXh0RGlyZWN0aW9uLT5tX211dGFibGVTdHlsZS0+c2V0UHJv
cGVydHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24sIG1fbXV0YWJsZVN0eWxlLT5nZXRQcm9wZXJ0eVZh
bHVlKENTU1Byb3BlcnR5RGlyZWN0aW9uKSwKQEAgLTExMjYsMTAgKzExMjUsMTAgQEAgdm9pZCBF
ZGl0aW5nU3R5bGU6Om1lcmdlSW5saW5lU3R5bGVPZkVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxl
bWVudCwgQ1NTUHJvcGVydHkKICAgICAgICAgbWVyZ2VTdHlsZShlbGVtZW50LT5pbmxpbmVTdHls
ZSgpLCBtb2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgT25seUVkaXRpbmdJbmhlcml0
YWJsZVByb3BlcnRpZXM6Ci0gICAgICAgIG1lcmdlU3R5bGUoY29weUVkaXRpbmdQcm9wZXJ0aWVz
KGVsZW1lbnQtPmlubGluZVN0eWxlKCksIE9ubHlJbmhlcml0YWJsZUVkaXRpbmdQcm9wZXJ0aWVz
KS5nZXQoKSwgbW9kZSk7CisgICAgICAgIG1lcmdlU3R5bGUoY29weUVkaXRpbmdQcm9wZXJ0aWVz
KGVsZW1lbnQtPmlubGluZVN0eWxlKCksIE9ubHlJbmhlcml0YWJsZUVkaXRpbmdQcm9wZXJ0aWVz
KS5wdHIoKSwgbW9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEVkaXRpbmdQcm9wZXJ0
aWVzSW5FZmZlY3Q6Ci0gICAgICAgIG1lcmdlU3R5bGUoY29weUVkaXRpbmdQcm9wZXJ0aWVzKGVs
ZW1lbnQtPmlubGluZVN0eWxlKCksIEFsbEVkaXRpbmdQcm9wZXJ0aWVzKS5nZXQoKSwgbW9kZSk7
CisgICAgICAgIG1lcmdlU3R5bGUoY29weUVkaXRpbmdQcm9wZXJ0aWVzKGVsZW1lbnQtPmlubGlu
ZVN0eWxlKCksIEFsbEVkaXRpbmdQcm9wZXJ0aWVzKS5wdHIoKSwgbW9kZSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiB9CkBAIC0xMTQ1LDIxICsxMTQ0LDE5IEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBlbGVtZW50TWF0Y2hlc0FuZFByb3BlcnR5SXNOb3RJbklubGluZVN0eWxlRGVjbChjb25zdCBI
VE1MRWxlCiAgICAgcmV0dXJuICFlbGVtZW50LT5pbmxpbmVTdHlsZSgpIHx8ICFlcXVpdmFsZW50
LT5wcm9wZXJ0eUV4aXN0c0luU3R5bGUoRWRpdGluZ1N0eWxlOjpjcmVhdGUoZWxlbWVudC0+aW5s
aW5lU3R5bGUoKSkuZ2V0KCkpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxNdXRhYmxlU3R5bGVQ
cm9wZXJ0aWVzPiBleHRyYWN0RWRpdGluZ1Byb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0aWVz
KiBzdHlsZSwgRWRpdGluZ1N0eWxlOjpQcm9wZXJ0aWVzVG9JbmNsdWRlIHByb3BlcnRpZXNUb0lu
Y2x1ZGUpCitzdGF0aWMgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IGV4dHJhY3RFZGl0
aW5nUHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0aW5nU3R5bGU6
OlByb3BlcnRpZXNUb0luY2x1ZGUgcHJvcGVydGllc1RvSW5jbHVkZSkKIHsKICAgICBpZiAoIXN0
eWxlKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBz
d2l0Y2ggKHByb3BlcnRpZXNUb0luY2x1ZGUpIHsKLSAgICBjYXNlIEVkaXRpbmdTdHlsZTo6QWxs
UHJvcGVydGllczoKLSAgICBjYXNlIEVkaXRpbmdTdHlsZTo6RWRpdGluZ1Byb3BlcnRpZXNJbkVm
ZmVjdDoKLSAgICAgICAgcmV0dXJuIGNvcHlFZGl0aW5nUHJvcGVydGllcyhzdHlsZSwgQWxsRWRp
dGluZ1Byb3BlcnRpZXMpOwogICAgIGNhc2UgRWRpdGluZ1N0eWxlOjpPbmx5RWRpdGluZ0luaGVy
aXRhYmxlUHJvcGVydGllczoKICAgICAgICAgcmV0dXJuIGNvcHlFZGl0aW5nUHJvcGVydGllcyhz
dHlsZSwgT25seUluaGVyaXRhYmxlRWRpdGluZ1Byb3BlcnRpZXMpOworICAgIGNhc2UgRWRpdGlu
Z1N0eWxlOjpBbGxQcm9wZXJ0aWVzOgorICAgIGNhc2UgRWRpdGluZ1N0eWxlOjpFZGl0aW5nUHJv
cGVydGllc0luRWZmZWN0OgorICAgICAgICBicmVhazsKICAgICB9Ci0KLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY29weUVkaXRpbmdQcm9wZXJ0
aWVzKHN0eWxlLCBBbGxFZGl0aW5nUHJvcGVydGllcyk7CiB9CiAKIHZvaWQgRWRpdGluZ1N0eWxl
OjptZXJnZUlubGluZUFuZEltcGxpY2l0U3R5bGVPZkVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxl
bWVudCwgQ1NTUHJvcGVydHlPdmVycmlkZU1vZGUgbW9kZSwgUHJvcGVydGllc1RvSW5jbHVkZSBw
cm9wZXJ0aWVzVG9JbmNsdWRlKQpAQCAtMTQyNSwxMCArMTQyMiwxMCBAQCBpbnQgRWRpdGluZ1N0
eWxlOjpsZWdhY3lGb250U2l6ZShEb2N1bWVudCogZG9jdW1lbnQpIGNvbnN0CiAgICAgICAgIG1f
c2hvdWxkVXNlRml4ZWREZWZhdWx0Rm9udFNpemUsIEFsd2F5c1VzZUxlZ2FjeUZvbnRTaXplKTsK
IH0KIAotUGFzc1JlZlB0cjxFZGl0aW5nU3R5bGU+IEVkaXRpbmdTdHlsZTo6c3R5bGVBdFNlbGVj
dGlvblN0YXJ0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgYm9vbCBzaG91bGRV
c2VCYWNrZ3JvdW5kQ29sb3JJbkVmZmVjdCkKK1JlZlB0cjxFZGl0aW5nU3R5bGU+IEVkaXRpbmdT
dHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbiwgYm9vbCBzaG91bGRVc2VCYWNrZ3JvdW5kQ29sb3JJbkVmZmVjdCkKIHsKICAgICBpZiAo
c2VsZWN0aW9uLmlzTm9uZSgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKICAgICBQb3NpdGlvbiBwb3NpdGlvbiA9IGFkanVzdGVkU2VsZWN0aW9uU3RhcnRG
b3JTdHlsZUNvbXB1dGF0aW9uKHNlbGVjdGlvbik7CiAKQEAgLTE0NDIsOSArMTQzOSw5IEBAIFBh
c3NSZWZQdHI8RWRpdGluZ1N0eWxlPiBFZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFy
dChjb25zdCBWaXNpYmxlU2VsZWN0CiAKICAgICBFbGVtZW50KiBlbGVtZW50ID0gcG9zaXRpb24u
ZWxlbWVudCgpOwogICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gc3R5bGUgPSBFZGl0
aW5nU3R5bGU6OmNyZWF0ZShlbGVtZW50LCBFZGl0aW5nU3R5bGU6OkFsbFByb3BlcnRpZXMpOwor
ICAgIGF1dG8gc3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShlbGVtZW50LCBFZGl0aW5nU3R5
bGU6OkFsbFByb3BlcnRpZXMpOwogICAgIHN0eWxlLT5tZXJnZVR5cGluZ1N0eWxlKGVsZW1lbnQt
PmRvY3VtZW50KCkpOwogCiAgICAgLy8gSWYgYmFja2dyb3VuZCBjb2xvciBpcyB0cmFuc3BhcmVu
dCwgdHJhdmVyc2UgcGFyZW50IG5vZGVzIHVudGlsIHdlIGhpdCBhIGRpZmZlcmVudCB2YWx1ZSBv
ciBkb2N1bWVudCByb290CkBAIC0xNDU2LDcgKzE0NTMsNyBAQCBQYXNzUmVmUHRyPEVkaXRpbmdT
dHlsZT4gRWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQoY29uc3QgVmlzaWJsZVNl
bGVjdAogICAgICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENvbG9yLCB2YWx1ZS0+Y3NzVGV4dCgpKTsKICAgICB9CiAKLSAgICByZXR1cm4gc3R5bGU7Cisg
ICAgcmV0dXJuIFdURk1vdmUoc3R5bGUpOwogfQogCiBXcml0aW5nRGlyZWN0aW9uIEVkaXRpbmdT
dHlsZTo6dGV4dERpcmVjdGlvbkZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBz
ZWxlY3Rpb24sIEVkaXRpbmdTdHlsZSogdHlwaW5nU3R5bGUsIGJvb2wmIGhhc05lc3RlZE9yTXVs
dGlwbGVFbWJlZGRpbmdzKQpAQCAtMTc5MSw3ICsxNzg4LDcgQEAgc3RhdGljIFJlZjxNdXRhYmxl
U3R5bGVQcm9wZXJ0aWVzPiBleHRyYWN0UHJvcGVydGllc05vdEluKFN0eWxlUHJvcGVydGllcyYg
c3R5bGUKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLVBhc3NSZWZQdHI8TXV0YWJsZVN0eWxl
UHJvcGVydGllcz4gZ2V0UHJvcGVydGllc05vdEluKFN0eWxlUHJvcGVydGllcyYgc3R5bGVXaXRo
UmVkdW5kYW50UHJvcGVydGllcywgVCYgYmFzZVN0eWxlKQorUmVmPE11dGFibGVTdHlsZVByb3Bl
cnRpZXM+IGdldFByb3BlcnRpZXNOb3RJbihTdHlsZVByb3BlcnRpZXMmIHN0eWxlV2l0aFJlZHVu
ZGFudFByb3BlcnRpZXMsIFQmIGJhc2VTdHlsZSkKIHsKICAgICByZXR1cm4gZXh0cmFjdFByb3Bl
cnRpZXNOb3RJbihzdHlsZVdpdGhSZWR1bmRhbnRQcm9wZXJ0aWVzLCBiYXNlU3R5bGUpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmgKaW5kZXggYjllNTJlMzMzODBmOWMwYzNj
ZDI5OGJmZGExZWZlMTFmYTFkNzM5ZC4uMWNhMDcxMzVmNWY0MmRiMWY2NGRjNzgwYjI2MDc5NTM0
MjFmMDlmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oCkBAIC0xMTMsMTMg
KzExMywxMyBAQCBwdWJsaWM6CiAgICAgUmVmPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IHN0eWxl
V2l0aFJlc29sdmVkVGV4dERlY29yYXRpb25zKCkgY29uc3Q7CiAgICAgYm9vbCB0ZXh0RGlyZWN0
aW9uKFdyaXRpbmdEaXJlY3Rpb24mKSBjb25zdDsKICAgICBib29sIGlzRW1wdHkoKSBjb25zdDsK
LSAgICB2b2lkIHNldFN0eWxlKFBhc3NSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4pOwor
ICAgIHZvaWQgc2V0U3R5bGUoUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+JiYpOwogICAg
IHZvaWQgb3ZlcnJpZGVXaXRoU3R5bGUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzKik7CiAgICAgdm9p
ZCBvdmVycmlkZVR5cGluZ1N0eWxlQXQoY29uc3QgRWRpdGluZ1N0eWxlJiwgY29uc3QgUG9zaXRp
b24mKTsKICAgICB2b2lkIGNsZWFyKCk7Ci0gICAgUGFzc1JlZlB0cjxFZGl0aW5nU3R5bGU+IGNv
cHkoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4gZXh0cmFjdEFuZFJlbW92
ZUJsb2NrUHJvcGVydGllcygpOwotICAgIFBhc3NSZWZQdHI8RWRpdGluZ1N0eWxlPiBleHRyYWN0
QW5kUmVtb3ZlVGV4dERpcmVjdGlvbigpOworICAgIFJlZjxFZGl0aW5nU3R5bGU+IGNvcHkoKSBj
b25zdDsKKyAgICBSZWY8RWRpdGluZ1N0eWxlPiBleHRyYWN0QW5kUmVtb3ZlQmxvY2tQcm9wZXJ0
aWVzKCk7CisgICAgUmVmPEVkaXRpbmdTdHlsZT4gZXh0cmFjdEFuZFJlbW92ZVRleHREaXJlY3Rp
b24oKTsKICAgICB2b2lkIHJlbW92ZUJsb2NrUHJvcGVydGllcygpOwogICAgIHZvaWQgcmVtb3Zl
U3R5bGVBZGRlZEJ5Tm9kZShOb2RlKik7CiAgICAgdm9pZCByZW1vdmVTdHlsZUNvbmZsaWN0aW5n
V2l0aFN0eWxlT2ZOb2RlKE5vZGUqKTsKQEAgLTE2NSw3ICsxNjUsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRTdHJpa2VUaHJvdWdoQ2hhbmdlKFRleHREZWNvcmF0aW9uQ2hhbmdlIGNoYW5nZSkg
eyBtX3N0cmlrZVRocm91Z2hDaGFuZ2UgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2hhbmdlKTsg
fQogICAgIFRleHREZWNvcmF0aW9uQ2hhbmdlIHN0cmlrZVRocm91Z2hDaGFuZ2UoKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxUZXh0RGVjb3JhdGlvbkNoYW5nZT4obV9zdHJpa2VUaHJvdWdo
Q2hhbmdlKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFBhc3NSZWZQdHI8RWRpdGlu
Z1N0eWxlPiBzdHlsZUF0U2VsZWN0aW9uU3RhcnQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIGJv
b2wgc2hvdWxkVXNlQmFja2dyb3VuZENvbG9ySW5FZmZlY3QgPSBmYWxzZSk7CisgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHN0eWxlQXRTZWxlY3Rpb25TdGFy
dChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgYm9vbCBzaG91bGRVc2VCYWNrZ3JvdW5kQ29sb3JJ
bkVmZmVjdCA9IGZhbHNlKTsKICAgICBzdGF0aWMgV3JpdGluZ0RpcmVjdGlvbiB0ZXh0RGlyZWN0
aW9uRm9yU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBFZGl0aW5nU3R5bGUqIHR5
cGluZ1N0eWxlLCBib29sJiBoYXNOZXN0ZWRPck11bHRpcGxlRW1iZWRkaW5ncyk7CiAKIHByaXZh
dGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggZTlhMjk2NGVlNWI2Nzc0NTY0OTI5
NmE2NDFmODkzYTRkODk0N2VmOS4uYzNkZDQ4YzM5N2Y0ZmNiZTE0ZWY3MDBhM2JmMTQ4MDBhMjU5
ZWVmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtMjQ4LDcgKzI0OCw3IEBAIGJv
b2wgRWRpdG9yOjpoYW5kbGVUZXh0RXZlbnQoVGV4dEV2ZW50JiBldmVudCkKICAgICAgICAgICAg
IGlmIChjbGllbnQoKS0+cGVyZm9ybXNUd29TdGVwUGFzdGUoZXZlbnQucGFzdGluZ0ZyYWdtZW50
KCkpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogI2VuZGlmCi0gICAgICAgICAgICBy
ZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KGV2ZW50LnBhc3RpbmdGcmFnbWVudCgpLCBmYWxz
ZSwgZXZlbnQuc2hvdWxkU21hcnRSZXBsYWNlKCksIGV2ZW50LnNob3VsZE1hdGNoU3R5bGUoKSwg
RWRpdEFjdGlvblBhc3RlLCBldmVudC5tYWlsQmxvY2txdW90ZUhhbmRsaW5nKCkpOworICAgICAg
ICAgICAgcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCgqZXZlbnQucGFzdGluZ0ZyYWdtZW50
KCksIGZhbHNlLCBldmVudC5zaG91bGRTbWFydFJlcGxhY2UoKSwgZXZlbnQuc2hvdWxkTWF0Y2hT
dHlsZSgpLCBFZGl0QWN0aW9uUGFzdGUsIGV2ZW50Lm1haWxCbG9ja3F1b3RlSGFuZGxpbmcoKSk7
CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGV2
ZW50LmRhdGEoKSwgZmFsc2UsIGV2ZW50LnNob3VsZFNtYXJ0UmVwbGFjZSgpLCBFZGl0QWN0aW9u
UGFzdGUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ4NSwxMCArNDg1LDEwIEBAIGJvb2wg
RWRpdG9yOjpzaG91bGRJbnNlcnRGcmFnbWVudChQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IGZyYWdtZW50LCBQYXNzUmVmCiAgICAgcmV0dXJuIGNsaWVudCgpLT5zaG91bGRJbnNlcnROb2Rl
KGZyYWdtZW50LmdldCgpLCByZXBsYWNpbmdET01SYW5nZS5nZXQoKSwgZ2l2ZW5BY3Rpb24pOwog
fQogCi12b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudChQYXNzUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50LCBib29sIHNlbGVjdFJlcGxhY2VtZW50LCBib29s
IHNtYXJ0UmVwbGFjZSwgYm9vbCBtYXRjaFN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24s
IE1haWxCbG9ja3F1b3RlSGFuZGxpbmcgbWFpbEJsb2NrcXVvdGVIYW5kbGluZykKK3ZvaWQgRWRp
dG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQmIGZyYWdt
ZW50LCBib29sIHNlbGVjdFJlcGxhY2VtZW50LCBib29sIHNtYXJ0UmVwbGFjZSwgYm9vbCBtYXRj
aFN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24sIE1haWxCbG9ja3F1b3RlSGFuZGxpbmcg
bWFpbEJsb2NrcXVvdGVIYW5kbGluZykKIHsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlv
biA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgaWYgKHNlbGVjdGlvbi5p
c05vbmUoKSB8fCAhc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkgfHwgIWZyYWdtZW50KQor
ICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkgfHwgIXNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJs
ZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0IHJl
cGxhY2VkVGV4dDsKQEAgLTUwNSw4ICs1MDUsOCBAQCB2b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVj
dGlvbldpdGhGcmFnbWVudChQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50LAog
ICAgIGlmIChtYWlsQmxvY2txdW90ZUhhbmRsaW5nID09IE1haWxCbG9ja3F1b3RlSGFuZGxpbmc6
Oklnbm9yZUJsb2NrcXVvdGUpCiAgICAgICAgIG9wdGlvbnMgfD0gUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQ6Oklnbm9yZU1haWxCbG9ja3F1b3RlOwogCi0gICAgUmVmUHRyPFJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kPiBjb21tYW5kID0gUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShkb2N1
bWVudCgpLCBmcmFnbWVudCwgb3B0aW9ucywgZWRpdGluZ0FjdGlvbik7Ci0gICAgYXBwbHlDb21t
YW5kKGNvbW1hbmQpOworICAgIGF1dG8gY29tbWFuZCA9IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
OjpjcmVhdGUoZG9jdW1lbnQoKSwgJmZyYWdtZW50LCBvcHRpb25zLCBlZGl0aW5nQWN0aW9uKTsK
KyAgICBhcHBseUNvbW1hbmQoY29tbWFuZC5wdHIoKSk7CiAgICAgcmV2ZWFsU2VsZWN0aW9uQWZ0
ZXJFZGl0aW5nT3BlcmF0aW9uKCk7CiAKICAgICBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpOwpAQCAtNjU4LDIwICs2NTgsMjAgQEAgVHJpU3RhdGUgRWRpdG9yOjpz
ZWxlY3Rpb25PcmRlcmVkTGlzdFN0YXRlKCkgY29uc3QKICAgICByZXR1cm4gRmFsc2VUcmlTdGF0
ZTsKIH0KIAotUGFzc1JlZlB0cjxOb2RlPiBFZGl0b3I6Omluc2VydE9yZGVyZWRMaXN0KCkKK1Jl
ZlB0cjxOb2RlPiBFZGl0b3I6Omluc2VydE9yZGVyZWRMaXN0KCkKIHsKICAgICBpZiAoIWNhbkVk
aXRSaWNobHkoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgICAgICAKICAgICBSZWZQdHI8Tm9kZT4gbmV3TGlzdCA9IEluc2VydExpc3RDb21tYW5kOjpp
bnNlcnRMaXN0KGRvY3VtZW50KCksIEluc2VydExpc3RDb21tYW5kOjpPcmRlcmVkTGlzdCk7CiAg
ICAgcmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7CiAgICAgcmV0dXJuIG5l
d0xpc3Q7CiB9CiAKLVBhc3NSZWZQdHI8Tm9kZT4gRWRpdG9yOjppbnNlcnRVbm9yZGVyZWRMaXN0
KCkKK1JlZlB0cjxOb2RlPiBFZGl0b3I6Omluc2VydFVub3JkZXJlZExpc3QoKQogewogICAgIGlm
ICghY2FuRWRpdFJpY2hseSgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgICAgIAogICAgIFJlZlB0cjxOb2RlPiBuZXdMaXN0ID0gSW5zZXJ0TGlzdENv
bW1hbmQ6Omluc2VydExpc3QoZG9jdW1lbnQoKSwgSW5zZXJ0TGlzdENvbW1hbmQ6OlVub3JkZXJl
ZExpc3QpOwogICAgIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigpOwpAQCAt
MjQwMSwxMyArMjQwMSwxMyBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJh
ZEdyYW1tYXJJblJhbmdlcyhUZXh0Q2hlY2tpbmdUeXBlTWFzayB0ZXh0QwogICAgIFRleHRDaGVj
a2luZ1BhcmFncmFwaCBwYXJhZ3JhcGhUb0NoZWNrKHJhbmdlVG9DaGVjayk7CiAgICAgaWYgKHBh
cmFncmFwaFRvQ2hlY2suaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgUmVmUHRyPFJh
bmdlPiBwYXJhZ3JhcGhSYW5nZSA9IHBhcmFncmFwaFRvQ2hlY2sucGFyYWdyYXBoUmFuZ2UoKTsK
KyAgICBSZWY8UmFuZ2U+IHBhcmFncmFwaFJhbmdlID0gcGFyYWdyYXBoVG9DaGVjay5wYXJhZ3Jh
cGhSYW5nZSgpOwogCiAgICAgYm9vbCBhc3luY2hyb25vdXMgPSBtX2ZyYW1lLnNldHRpbmdzKCku
YXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSAmJiAhc2hvdWxkU2hvd0NvcnJlY3Rp
b25QYW5lbDsKIAogICAgIC8vIEluIGFzeW5jaHJvbm91cyBtb2RlLCB3ZSBpbnRlbnRpb25hbGx5
IGNoZWNrIHBhcmFncmFwaC13aWRlIHNlbnRlbmNlLgogICAgIGNvbnN0IGF1dG8gcmVzb2x2ZWRP
cHRpb25zID0gcmVzb2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKGVkaXRhYmxlTm9kZSwgdGV4dENo
ZWNraW5nT3B0aW9ucyk7Ci0gICAgYXV0byByZXF1ZXN0ID0gU3BlbGxDaGVja1JlcXVlc3Q6OmNy
ZWF0ZShyZXNvbHZlZE9wdGlvbnMsIFRleHRDaGVja2luZ1Byb2Nlc3NJbmNyZW1lbnRhbCwgYXN5
bmNocm9ub3VzID8gcGFyYWdyYXBoUmFuZ2UgOiByYW5nZVRvQ2hlY2ssIHBhcmFncmFwaFJhbmdl
KTsKKyAgICBhdXRvIHJlcXVlc3QgPSBTcGVsbENoZWNrUmVxdWVzdDo6Y3JlYXRlKHJlc29sdmVk
T3B0aW9ucywgVGV4dENoZWNraW5nUHJvY2Vzc0luY3JlbWVudGFsLCBhc3luY2hyb25vdXMgPyBw
YXJhZ3JhcGhSYW5nZS5wdHIoKSA6IHJhbmdlVG9DaGVjaywgcGFyYWdyYXBoUmFuZ2UucHRyKCkp
OwogCiAgICAgaWYgKGFzeW5jaHJvbm91cykgewogICAgICAgICBtX3NwZWxsQ2hlY2tlci0+cmVx
dWVzdENoZWNraW5nRm9yKFdURk1vdmUocmVxdWVzdCkpOwpAQCAtMjQzOCwxMyArMjQzOCwxMyBA
QCBzdGF0aWMgYm9vbCBpc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudFR5cGUoVGV4dENoZWNraW5n
VHlwZSB0eXBlKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIHZvaWQgY29ycmVjdFNw
ZWxsY2hlY2tpbmdQcmVzZXJ2aW5nVGV4dENoZWNraW5nUGFyYWdyYXBoKFRleHRDaGVja2luZ1Bh
cmFncmFwaCYgcGFyYWdyYXBoLCBQYXNzUmVmUHRyPFJhbmdlPiByYW5nZVRvUmVwbGFjZSwgY29u
c3QgU3RyaW5nJiByZXBsYWNlbWVudCwgaW50IHJlc3VsdExvY2F0aW9uLCBpbnQgcmVzdWx0TGVu
Z3RoKQorc3RhdGljIHZvaWQgY29ycmVjdFNwZWxsY2hlY2tpbmdQcmVzZXJ2aW5nVGV4dENoZWNr
aW5nUGFyYWdyYXBoKFRleHRDaGVja2luZ1BhcmFncmFwaCYgcGFyYWdyYXBoLCBSYW5nZSYgcmFu
Z2VUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQsIGludCByZXN1bHRMb2NhdGlv
biwgaW50IHJlc3VsdExlbmd0aCkKIHsKLSAgICBhdXRvJiBzY29wZSA9IGRvd25jYXN0PENvbnRh
aW5lck5vZGU+KHBhcmFncmFwaC5wYXJhZ3JhcGhSYW5nZSgpLT5zdGFydENvbnRhaW5lcigpLnJv
b3ROb2RlKCkpOworICAgIGF1dG8mIHNjb3BlID0gZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4ocGFy
YWdyYXBoLnBhcmFncmFwaFJhbmdlKCkuc3RhcnRDb250YWluZXIoKS5yb290Tm9kZSgpKTsKIAog
ICAgIHNpemVfdCBwYXJhZ3JhcGhMb2NhdGlvbjsKICAgICBzaXplX3QgcGFyYWdyYXBoTGVuZ3Ro
OwotICAgIFRleHRJdGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UoJnNjb3Bl
LCBwYXJhZ3JhcGgucGFyYWdyYXBoUmFuZ2UoKS5nZXQoKSwgcGFyYWdyYXBoTG9jYXRpb24sIHBh
cmFncmFwaExlbmd0aCk7CisgICAgVGV4dEl0ZXJhdG9yOjpnZXRMb2NhdGlvbkFuZExlbmd0aEZy
b21SYW5nZSgmc2NvcGUsICZwYXJhZ3JhcGgucGFyYWdyYXBoUmFuZ2UoKSwgcGFyYWdyYXBoTG9j
YXRpb24sIHBhcmFncmFwaExlbmd0aCk7CiAKICAgICBhcHBseUNvbW1hbmQoU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKHJhbmdlVG9SZXBsYWNlLCByZXBsYWNlbWVudCkpOwogCkBA
IC0yNTEzLDE3ICsyNTEzLDE3IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcihQYXNz
UmVmUHRyPFNwZWxsQ2hlY2tSZXF1ZXN0PiByZXF1ZXN0LCBjb25zdCBWZWN0CiAgICAgICAgIGlm
IChzaG91bGRNYXJrU3BlbGxpbmcgJiYgIXNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwgJiYgcmVz
dWx0VHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcKICAgICAgICAgICAgICYmIHJlc3Vs
dExvY2F0aW9uID49IHBhcmFncmFwaC5jaGVja2luZ1N0YXJ0KCkgJiYgcmVzdWx0RW5kTG9jYXRp
b24gPD0gc3BlbGxpbmdSYW5nZUVuZE9mZnNldCAmJiAhcmVzdWx0RW5kc0F0QW1iaWd1b3VzQm91
bmRhcnkpIHsKICAgICAgICAgICAgIEFTU0VSVChyZXN1bHRMZW5ndGggPiAwICYmIHJlc3VsdExv
Y2F0aW9uID49IDApOwotICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBtaXNzcGVsbGluZ1Jhbmdl
ID0gcGFyYWdyYXBoLnN1YnJhbmdlKHJlc3VsdExvY2F0aW9uLCByZXN1bHRMZW5ndGgpOworICAg
ICAgICAgICAgYXV0byBtaXNzcGVsbGluZ1JhbmdlID0gcGFyYWdyYXBoLnN1YnJhbmdlKHJlc3Vs
dExvY2F0aW9uLCByZXN1bHRMZW5ndGgpOwogICAgICAgICAgICAgaWYgKCFtX2FsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXItPmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkKG1pc3NwZWxsaW5nUmFuZ2Up
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgbWlzc3BlbGxpbmdSYW5n
ZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIobWlzc3Bl
bGxpbmdSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nLCByZXBsYWNlbWVudCk7
CisgICAgICAgICAgICBtaXNzcGVsbGluZ1JhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50
KCkubWFya2VycygpLmFkZE1hcmtlcihtaXNzcGVsbGluZ1JhbmdlLnB0cigpLCBEb2N1bWVudE1h
cmtlcjo6U3BlbGxpbmcsIHJlcGxhY2VtZW50KTsKICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRN
YXJrR3JhbW1hciAmJiByZXN1bHRUeXBlID09IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyICYmIHBh
cmFncmFwaC5jaGVja2luZ1JhbmdlQ292ZXJzKHJlc3VsdExvY2F0aW9uLCByZXN1bHRMZW5ndGgp
KSB7CiAgICAgICAgICAgICBBU1NFUlQocmVzdWx0TGVuZ3RoID4gMCAmJiByZXN1bHRMb2NhdGlv
biA+PSAwKTsKICAgICAgICAgICAgIGZvciAoYXV0byYgZGV0YWlsIDogcmVzdWx0c1tpXS5kZXRh
aWxzKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGRldGFpbC5sZW5ndGggPiAwICYmIGRldGFp
bC5sb2NhdGlvbiA+PSAwKTsKICAgICAgICAgICAgICAgICBpZiAocGFyYWdyYXBoLmNoZWNraW5n
UmFuZ2VDb3ZlcnMocmVzdWx0TG9jYXRpb24gKyBkZXRhaWwubG9jYXRpb24sIGRldGFpbC5sZW5n
dGgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gYmFkR3JhbW1hclJhbmdl
ID0gcGFyYWdyYXBoLnN1YnJhbmdlKHJlc3VsdExvY2F0aW9uICsgZGV0YWlsLmxvY2F0aW9uLCBk
ZXRhaWwubGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAgICAgYmFkR3JhbW1hclJhbmdlLT5zdGFy
dENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihiYWRHcmFtbWFyUmFu
Z2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpHcmFtbWFyLCBkZXRhaWwudXNlckRlc2NyaXB0aW9u
KTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBiYWRHcmFtbWFyUmFuZ2UgPSBwYXJhZ3JhcGgu
c3VicmFuZ2UocmVzdWx0TG9jYXRpb24gKyBkZXRhaWwubG9jYXRpb24sIGRldGFpbC5sZW5ndGgp
OworICAgICAgICAgICAgICAgICAgICBiYWRHcmFtbWFyUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCku
ZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKGJhZEdyYW1tYXJSYW5nZS5wdHIoKSwgRG9j
dW1lbnRNYXJrZXI6OkdyYW1tYXIsIGRldGFpbC51c2VyRGVzY3JpcHRpb24pOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHRFbmRMb2Nh
dGlvbiA8PSBzcGVsbGluZ1JhbmdlRW5kT2Zmc2V0ICYmIHJlc3VsdEVuZExvY2F0aW9uID49IHBh
cmFncmFwaC5jaGVja2luZ1N0YXJ0KCkKQEAgLTI1NDAsNyArMjU0MCw3IEBAIHZvaWQgRWRpdG9y
OjptYXJrQW5kUmVwbGFjZUZvcihQYXNzUmVmUHRyPFNwZWxsQ2hlY2tSZXF1ZXN0PiByZXF1ZXN0
LCBjb25zdCBWZWN0CiAgICAgICAgICAgICAvLyAyLiBUaGUgcmVzdWx0IGRvZXNuJ3QgZW5kIGF0
IGFuIGFtYmlndW91cyBib3VuZGFyeS4KICAgICAgICAgICAgIC8vICAgIChGSVhNRTogdGhpcyBp
cyByZXF1aXJlZCB1bnRpbCA2ODUzMDI3IGlzIGZpeGVkIGFuZCB0ZXh0IGNoZWNraW5nIGNhbiBk
byB0aGlzIGZvciB1cwogICAgICAgICAgICAgYm9vbCBkb1JlcGxhY2VtZW50ID0gcmVwbGFjZW1l
bnQubGVuZ3RoKCkgPiAwICYmICFyZXN1bHRFbmRzQXRBbWJpZ3VvdXNCb3VuZGFyeTsKLSAgICAg
ICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VUb1JlcGxhY2UgPSBwYXJhZ3JhcGguc3VicmFuZ2Uo
cmVzdWx0TG9jYXRpb24sIHJlc3VsdExlbmd0aCk7CisgICAgICAgICAgICBhdXRvIHJhbmdlVG9S
ZXBsYWNlID0gcGFyYWdyYXBoLnN1YnJhbmdlKHJlc3VsdExvY2F0aW9uLCByZXN1bHRMZW5ndGgp
OwogCiAgICAgICAgICAgICAvLyBhZGRpbmcgbGlua3Mgc2hvdWxkIGJlIGRvbmUgb25seSBpbW1l
ZGlhdGVseSBhZnRlciB0aGV5IGFyZSB0eXBlZAogICAgICAgICAgICAgaWYgKHJlc3VsdFR5cGUg
PT0gVGV4dENoZWNraW5nVHlwZUxpbmsgJiYgc2VsZWN0aW9uT2Zmc2V0ICE9IHJlc3VsdEVuZExv
Y2F0aW9uICsgMSkKQEAgLTI1NDksOCArMjU0OSw4IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVw
bGFjZUZvcihQYXNzUmVmUHRyPFNwZWxsQ2hlY2tSZXF1ZXN0PiByZXF1ZXN0LCBjb25zdCBWZWN0
CiAgICAgICAgICAgICBpZiAoIShzaG91bGRQZXJmb3JtUmVwbGFjZW1lbnQgfHwgc2hvdWxkQ2hl
Y2tGb3JDb3JyZWN0aW9uIHx8IHNob3VsZE1hcmtMaW5rKSB8fCAhZG9SZXBsYWNlbWVudCkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgU3RyaW5nIHJlcGxhY2VkU3Ry
aW5nID0gcGxhaW5UZXh0KHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKLSAgICAgICAgICAgIGNvbnN0
IGJvb2wgZXhpc3RpbmdNYXJrZXJzUGVybWl0UmVwbGFjZW1lbnQgPSBtX2FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXItPnByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlSZXN1bHQoJnJl
c3VsdHNbaV0sIHJhbmdlVG9SZXBsYWNlLmdldCgpLCByZXBsYWNlZFN0cmluZyk7CisgICAgICAg
ICAgICBTdHJpbmcgcmVwbGFjZWRTdHJpbmcgPSBwbGFpblRleHQocmFuZ2VUb1JlcGxhY2UucHRy
KCkpOworICAgICAgICAgICAgY29uc3QgYm9vbCBleGlzdGluZ01hcmtlcnNQZXJtaXRSZXBsYWNl
bWVudCA9IG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cHJvY2Vzc01hcmtlcnNPblRleHRU
b0JlUmVwbGFjZWRCeVJlc3VsdChyZXN1bHRzW2ldLCByYW5nZVRvUmVwbGFjZSwgcmVwbGFjZWRT
dHJpbmcpOwogICAgICAgICAgICAgaWYgKCFleGlzdGluZ01hcmtlcnNQZXJtaXRSZXBsYWNlbWVu
dCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMjU2NCw3ICsyNTY0LDcgQEAgdm9p
ZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKFBhc3NSZWZQdHI8U3BlbGxDaGVja1JlcXVlc3Q+
IHJlcXVlc3QsIGNvbnN0IFZlY3QKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Ub1JlcGxhY2Uo
KnJhbmdlVG9SZXBsYWNlLCBET1dOU1RSRUFNKTsKKyAgICAgICAgICAgIFZpc2libGVTZWxlY3Rp
b24gc2VsZWN0aW9uVG9SZXBsYWNlKHJhbmdlVG9SZXBsYWNlLCBET1dOU1RSRUFNKTsKICAgICAg
ICAgICAgIGlmIChzZWxlY3Rpb25Ub1JlcGxhY2UgIT0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKSkgewogICAgICAgICAgICAgICAgIGlmICghbV9mcmFtZS5zZWxlY3Rpb24oKS5zaG91
bGRDaGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uVG9SZXBsYWNlKSkKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CkBAIC0yNTc2LDcgKzI1NzYsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FuZFJl
cGxhY2VGb3IoUGFzc1JlZlB0cjxTcGVsbENoZWNrUmVxdWVzdD4gcmVxdWVzdCwgY29uc3QgVmVj
dAogICAgICAgICAgICAgICAgIHJlc3RvcmVTZWxlY3Rpb25BZnRlckNoYW5nZSA9IGZhbHNlOwog
ICAgICAgICAgICAgICAgIGlmIChjYW5FZGl0UmljaGx5KCkpCiAgICAgICAgICAgICAgICAgICAg
IGFwcGx5Q29tbWFuZChDcmVhdGVMaW5rQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCksIHJlcGxh
Y2VtZW50KSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNhbkVkaXQoKSAmJiBzaG91bGRJbnNl
cnRUZXh0KHJlcGxhY2VtZW50LCByYW5nZVRvUmVwbGFjZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0
aW9uOjpUeXBlZCkpIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY2FuRWRpdCgpICYmIHNob3Vs
ZEluc2VydFRleHQocmVwbGFjZW1lbnQsIHJhbmdlVG9SZXBsYWNlLnB0cigpLCBFZGl0b3JJbnNl
cnRBY3Rpb246OlR5cGVkKSkgewogICAgICAgICAgICAgICAgIGNvcnJlY3RTcGVsbGNoZWNraW5n
UHJlc2VydmluZ1RleHRDaGVja2luZ1BhcmFncmFwaChwYXJhZ3JhcGgsIHJhbmdlVG9SZXBsYWNl
LCByZXBsYWNlbWVudCwgcmVzdWx0TG9jYXRpb24sIHJlc3VsdExlbmd0aCk7CiAKICAgICAgICAg
ICAgICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBkb2N1bWVudCgpLmV4aXN0aW5nQVhP
YmplY3RDYWNoZSgpKSB7CkBAIC0yNTk0LDExICsyNTk0LDExIEBAIHZvaWQgRWRpdG9yOjptYXJr
QW5kUmVwbGFjZUZvcihQYXNzUmVmUHRyPFNwZWxsQ2hlY2tSZXF1ZXN0PiByZXF1ZXN0LCBjb25z
dCBWZWN0CiAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbk9mZnNldCArPSByZXBsYWNlbWVu
dC5sZW5ndGgoKSAtIHJlc3VsdExlbmd0aDsKIAogICAgICAgICAgICAgICAgIGlmIChyZXN1bHRU
eXBlID09IFRleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAg
IFJlZlB0cjxSYW5nZT4gcmVwbGFjZW1lbnRSYW5nZSA9IHBhcmFncmFwaC5zdWJyYW5nZShyZXN1
bHRMb2NhdGlvbiwgcmVwbGFjZW1lbnQubGVuZ3RoKCkpOwotICAgICAgICAgICAgICAgICAgICBt
X2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXItPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2Uo
QXV0b2NvcnJlY3Rpb25SZXNwb25zZTo6QWNjZXB0ZWQsIHJlcGxhY2VkU3RyaW5nLCByZXBsYWNl
bWVudFJhbmdlKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byByZXBsYWNlbWVudFJhbmdlID0g
cGFyYWdyYXBoLnN1YnJhbmdlKHJlc3VsdExvY2F0aW9uLCByZXBsYWNlbWVudC5sZW5ndGgoKSk7
CisgICAgICAgICAgICAgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVjb3Jk
QXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlOjpBY2NlcHRlZCwg
cmVwbGFjZWRTdHJpbmcsIHJlcGxhY2VtZW50UmFuZ2UucHRyKCkpOwogCiAgICAgICAgICAgICAg
ICAgICAgIC8vIEFkZCBhIG1hcmtlciBzbyB0aGF0IGNvcnJlY3Rpb25zIGNhbiBlYXNpbHkgYmUg
dW5kb25lIGFuZCB3b24ndCBiZSByZS1jb3JyZWN0ZWQuCi0gICAgICAgICAgICAgICAgICAgIG1f
YWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+bWFya0NvcnJlY3Rpb24oV1RGTW92ZShyZXBsYWNl
bWVudFJhbmdlKSwgcmVwbGFjZWRTdHJpbmcpOworICAgICAgICAgICAgICAgICAgICBtX2FsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXItPm1hcmtDb3JyZWN0aW9uKHJlcGxhY2VtZW50UmFuZ2UsIHJl
cGxhY2VkU3RyaW5nKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KQEAgLTI2MDksNyArMjYwOSw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcihQ
YXNzUmVmUHRyPFNwZWxsQ2hlY2tSZXF1ZXN0PiByZXF1ZXN0LCBjb25zdCBWZWN0CiAgICAgICAg
IC8vIFJlc3RvcmUgdGhlIGNhcmV0IHBvc2l0aW9uIGlmIHdlIGhhdmUgbWFkZSBhbnkgcmVwbGFj
ZW1lbnRzCiAgICAgICAgIGV4dGVuZGVkUGFyYWdyYXBoLmV4cGFuZFJhbmdlVG9OZXh0RW5kKCk7
CiAgICAgICAgIGlmIChyZXN0b3JlU2VsZWN0aW9uQWZ0ZXJDaGFuZ2UgJiYgc2VsZWN0aW9uT2Zm
c2V0ID49IDAgJiYgc2VsZWN0aW9uT2Zmc2V0IDw9IGV4dGVuZGVkUGFyYWdyYXBoLnJhbmdlTGVu
Z3RoKCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0aW9uUmFuZ2UgPSBleHRl
bmRlZFBhcmFncmFwaC5zdWJyYW5nZSgwLCBzZWxlY3Rpb25PZmZzZXQpOworICAgICAgICAgICAg
YXV0byBzZWxlY3Rpb25SYW5nZSA9IGV4dGVuZGVkUGFyYWdyYXBoLnN1YnJhbmdlKDAsIHNlbGVj
dGlvbk9mZnNldCk7CiAgICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLm1vdmVUbyhzZWxl
Y3Rpb25SYW5nZS0+ZW5kUG9zaXRpb24oKSwgRE9XTlNUUkVBTSk7CiAgICAgICAgICAgICBpZiAo
YWRqdXN0U2VsZWN0aW9uRm9yUGFyYWdyYXBoQm91bmRhcmllcykKICAgICAgICAgICAgICAgICBt
X2ZyYW1lLnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUs
IERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKQEAgLTI2MzMsMTIgKzI2
MzMsMTIgQEAgdm9pZCBFZGl0b3I6OmNoYW5nZUJhY2tUb1JlcGxhY2VkU3RyaW5nKGNvbnN0IFN0
cmluZyYgcmVwbGFjZWRTdHJpbmcpCiAgICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KHJlcGxhY2Vk
U3RyaW5nLCBzZWxlY3Rpb24uZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIAotICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVj
b3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlOjpSZXZlcnRl
ZCwgcmVwbGFjZWRTdHJpbmcsIHNlbGVjdGlvbik7CisgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyLT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9u
c2U6OlJldmVydGVkLCByZXBsYWNlZFN0cmluZywgc2VsZWN0aW9uLmdldCgpKTsKICAgICBUZXh0
Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoKHNlbGVjdGlvbik7CiAgICAgcmVwbGFjZVNlbGVj
dGlvbldpdGhUZXh0KHJlcGxhY2VkU3RyaW5nLCBmYWxzZSwgZmFsc2UsIEVkaXRBY3Rpb25JbnNl
cnQpOwotICAgIFJlZlB0cjxSYW5nZT4gY2hhbmdlZFJhbmdlID0gcGFyYWdyYXBoLnN1YnJhbmdl
KHBhcmFncmFwaC5jaGVja2luZ1N0YXJ0KCksIHJlcGxhY2VkU3RyaW5nLmxlbmd0aCgpKTsKLSAg
ICBjaGFuZ2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRk
TWFya2VyKGNoYW5nZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50LCBT
dHJpbmcoKSk7Ci0gICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5tYXJrUmV2ZXJzZWQo
Y2hhbmdlZFJhbmdlLmdldCgpKTsKKyAgICBhdXRvIGNoYW5nZWRSYW5nZSA9IHBhcmFncmFwaC5z
dWJyYW5nZShwYXJhZ3JhcGguY2hlY2tpbmdTdGFydCgpLCByZXBsYWNlZFN0cmluZy5sZW5ndGgo
KSk7CisgICAgY2hhbmdlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2Vy
cygpLmFkZE1hcmtlcihjaGFuZ2VkUmFuZ2UucHRyKCksIERvY3VtZW50TWFya2VyOjpSZXBsYWNl
bWVudCwgU3RyaW5nKCkpOworICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+bWFya1Jl
dmVyc2VkKGNoYW5nZWRSYW5nZSk7CiAjZWxzZQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgIFVOVVNFRF9QQVJBTShyZXBsYWNlZFN0cmluZyk7CkBAIC0yNzM3LDE4ICsyNzM3LDE4IEBA
IHZvaWQgRWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhib29s
IGRvTm90UmVtb3ZlSWZTZWxlY3Rpb25BCiAgICAgLy8gZ2FyZGUiLCB3ZSB3aWxsIGhhdmUgQ29y
cmVjdGlvbkluZGljYXRvciBtYXJrZXIgb24gYm90aCB3b3JkcyBhbmQgb24gdGhlIHdoaXRlc3Bh
Y2UgYmV0d2VlbiB0aGVtLiBJZiB3ZSB0aGVuIGVkaXQgZ2FyZGUsCiAgICAgLy8gd2Ugd291bGQg
bGlrZSB0byByZW1vdmUgdGhlIG1hcmtlciBmcm9tIHdvcmQgImF2YW50IiBhbmQgd2hpdGVzcGFj
ZSBhcyB3ZWxsLiBTbyB3ZSBuZWVkIHRvIGdldCB0aGUgY29udGlub3VzIHJhbmdlIG9mCiAgICAg
Ly8gb2YgbWFya2VyIHRoYXQgY29udGFpbnMgdGhlIHdvcmQgaW4gcXVlc3Rpb24sIGFuZCByZW1v
dmUgbWFya2VyIG9uIHRoYXQgd2hvbGUgcmFuZ2UuCi0gICAgUmVmUHRyPFJhbmdlPiB3b3JkUmFu
Z2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIHN0YXJ0T2ZGaXJzdFdvcmQuZGVlcEVxdWl2
YWxlbnQoKSwgZW5kT2ZMYXN0V29yZC5kZWVwRXF1aXZhbGVudCgpKTsKKyAgICBhdXRvIHdvcmRS
YW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3RhcnRPZkZpcnN0V29yZC5kZWVwRXF1
aXZhbGVudCgpLCBlbmRPZkxhc3RXb3JkLmRlZXBFcXVpdmFsZW50KCkpOwogCi0gICAgVmVjdG9y
PFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gZG9jdW1lbnQoKS5tYXJrZXJzKCku
bWFya2Vyc0luUmFuZ2Uod29yZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9u
QWx0ZXJuYXRpdmVzKTsKKyAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtl
cnMgPSBkb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzSW5SYW5nZSh3b3JkUmFuZ2UsIERvY3Vt
ZW50TWFya2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMpOwogICAgIGZvciAoYXV0byogbWFya2Vy
IDogbWFya2VycykKICAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZW1vdmVE
aWN0YXRpb25BbHRlcm5hdGl2ZXNGb3JNYXJrZXIoKm1hcmtlcik7CiAKICNpZiBQTEFURk9STShJ
T1MpCi0gICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vycyh3b3JkUmFuZ2UuZ2V0
KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyB8IERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9u
SW5kaWNhdG9yIHwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24gfCBEb2N1
bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzIHwgRG9jdW1lbnRNYXJrZXI6OkRpY3Rh
dGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXMsIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVt
b3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOworICAgIGRvY3VtZW50KCkubWFya2Vycygp
LnJlbW92ZU1hcmtlcnMod29yZFJhbmdlLnB0cigpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcg
fCBEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlvbkluZGljYXRvciB8IERvY3VtZW50TWFya2VyOjpT
cGVsbENoZWNraW5nRXhlbXB0aW9uIHwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0
aXZlcyB8IERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLCBE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2Vy
KTsKICNlbHNlCi0gICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vycyh3b3JkUmFu
Z2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyB8IERvY3VtZW50TWFya2VyOjpHcmFt
bWFyIHwgRG9jdW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3IgfCBEb2N1bWVudE1hcmtl
cjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbiB8IERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25BbHRl
cm5hdGl2ZXMsIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3Zlcmxh
cHBpbmdNYXJrZXIpOworICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMod29y
ZFJhbmdlLnB0cigpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcgfCBEb2N1bWVudE1hcmtlcjo6
R3JhbW1hciB8IERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yIHwgRG9jdW1lbnRN
YXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24gfCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9u
QWx0ZXJuYXRpdmVzLCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92
ZXJsYXBwaW5nTWFya2VyKTsKICNlbmRpZgotICAgIGRvY3VtZW50KCkubWFya2VycygpLmNsZWFy
RGVzY3JpcHRpb25Pbk1hcmtlcnNJbnRlcnNlY3RpbmdSYW5nZSh3b3JkUmFuZ2UuZ2V0KCksIERv
Y3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7CisgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuY2xl
YXJEZXNjcmlwdGlvbk9uTWFya2Vyc0ludGVyc2VjdGluZ1JhbmdlKHdvcmRSYW5nZSwgRG9jdW1l
bnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKIH0KIAogdm9pZCBFZGl0b3I6OmRlbGV0ZWRBdXRvY29y
cmVjdGlvbkF0UG9zaXRpb24oY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBTdHJpbmcm
IG9yaWdpbmFsU3RyaW5nKQpAQCAtMjc1NiwxNyArMjc1NiwxNyBAQCB2b2lkIEVkaXRvcjo6ZGVs
ZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIGNv
bnN0IFN0cgogICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+ZGVsZXRlZEF1dG9jb3Jy
ZWN0aW9uQXRQb3NpdGlvbihwb3NpdGlvbiwgb3JpZ2luYWxTdHJpbmcpOwogfQogCi1QYXNzUmVm
UHRyPFJhbmdlPiBFZGl0b3I6OnJhbmdlRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHdpbmRvd1Bv
aW50KQorUmVmUHRyPFJhbmdlPiBFZGl0b3I6OnJhbmdlRm9yUG9pbnQoY29uc3QgSW50UG9pbnQm
IHdpbmRvd1BvaW50KQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUuZG9jdW1l
bnRBdFBvaW50KHdpbmRvd1BvaW50KTsKICAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgRnJhbWUqIGZyYW1lID0g
ZG9jdW1lbnQtPmZyYW1lKCk7CiAgICAgQVNTRVJUKGZyYW1lKTsKICAgICBGcmFtZVZpZXcqIGZy
YW1lVmlldyA9IGZyYW1lLT52aWV3KCk7CiAgICAgaWYgKCFmcmFtZVZpZXcpCi0gICAgICAgIHJl
dHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBJbnRQb2ludCBmcmFtZVBvaW50
ID0gZnJhbWVWaWV3LT53aW5kb3dUb0NvbnRlbnRzKHdpbmRvd1BvaW50KTsKICAgICBWaXNpYmxl
U2VsZWN0aW9uIHNlbGVjdGlvbihmcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQ
b2ludCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAppbmRleCA4NzY3MjBmODE1YjFjZjcwMjM5
MWY1MjYwZTE0Y2Q4YTJhYThlMjNkLi5mNjkwNDU2NGMyODlkNjQwNDhmZTNhMTQxZGY4NTE0YTc3
ZGMxNTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKQEAgLTE3Myw4ICsxNzMsOCBAQCBwdWJs
aWM6CiAgICAgCiAgICAgVHJpU3RhdGUgc2VsZWN0aW9uVW5vcmRlcmVkTGlzdFN0YXRlKCkgY29u
c3Q7CiAgICAgVHJpU3RhdGUgc2VsZWN0aW9uT3JkZXJlZExpc3RTdGF0ZSgpIGNvbnN0OwotICAg
IFdFQkNPUkVfRVhQT1JUIFBhc3NSZWZQdHI8Tm9kZT4gaW5zZXJ0T3JkZXJlZExpc3QoKTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCBQYXNzUmVmUHRyPE5vZGU+IGluc2VydFVub3JkZXJlZExpc3QoKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8Tm9kZT4gaW5zZXJ0T3JkZXJlZExpc3QoKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8Tm9kZT4gaW5zZXJ0VW5vcmRlcmVkTGlzdCgpOwogICAg
IFdFQkNPUkVfRVhQT1JUIGJvb2wgY2FuSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoKTsKICAg
ICBXRUJDT1JFX0VYUE9SVCBib29sIGNhbkRlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCk7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPE5vZGU+IGluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVs
KCk7CkBAIC0zMzcsNyArMzM3LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2V0SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyhib29sLCBSZXZlYWxTZWxlY3Rpb24gc2hvdWxkUmV2
ZWFsRXhpc3RpbmdTZWxlY3Rpb24gPSBSZXZlYWxTZWxlY3Rpb246Olllcyk7CiAgICAgYm9vbCBp
Z25vcmVTZWxlY3Rpb25DaGFuZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9pZ25vcmVTZWxlY3Rpb25D
aGFuZ2VzOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBQYXNzUmVmUHRyPFJhbmdlPiByYW5nZUZv
clBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
UmVmUHRyPFJhbmdlPiByYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCk7
CiAKICAgICB2b2lkIGNsZWFyKCk7CiAKQEAgLTQxMSw3ICs0MTEsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCB0ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYShFbGVtZW50Kik7CiAgICAgV0VCQ09SRV9FWFBP
UlQgV3JpdGluZ0RpcmVjdGlvbiBiYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0
KCkgY29uc3Q7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcGxhY2VTZWxlY3Rpb25XaXRo
RnJhZ21lbnQoUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiwgYm9vbCBzZWxlY3RSZXBsYWNl
bWVudCwgYm9vbCBzbWFydFJlcGxhY2UsIGJvb2wgbWF0Y2hTdHlsZSwgRWRpdEFjdGlvbiA9IEVk
aXRBY3Rpb25JbnNlcnQsIE1haWxCbG9ja3F1b3RlSGFuZGxpbmcgPSBNYWlsQmxvY2txdW90ZUhh
bmRsaW5nOjpSZXNwZWN0QmxvY2txdW90ZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXBs
YWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQmLCBib29sIHNlbGVjdFJl
cGxhY2VtZW50LCBib29sIHNtYXJ0UmVwbGFjZSwgYm9vbCBtYXRjaFN0eWxlLCBFZGl0QWN0aW9u
ID0gRWRpdEFjdGlvbkluc2VydCwgTWFpbEJsb2NrcXVvdGVIYW5kbGluZyA9IE1haWxCbG9ja3F1
b3RlSGFuZGxpbmc6OlJlc3BlY3RCbG9ja3F1b3RlKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChjb25zdCBTdHJpbmcmLCBib29sIHNlbGVjdFJlcGxh
Y2VtZW50LCBib29sIHNtYXJ0UmVwbGFjZSwgRWRpdEFjdGlvbiA9IEVkaXRBY3Rpb25JbnNlcnQp
OwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc2VsZWN0aW9uU3RhcnRIYXNNYXJrZXJGb3IoRG9j
dW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUsIGludCBmcm9tLCBpbnQgbGVuZ3RoKSBjb25zdDsKICAg
ICB2b2lkIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGJvb2wgb25seUhh
bmRsZVdvcmRzQ29udGFpbmluZ1NlbGVjdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL01vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL01vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAKaW5kZXggOTYyNTVlOWI2OWM4YWY1
MTI5ODBkMmRhMjcyMzM0ZWZhZThkNTE3MS4uNTJkMjFhZjRlNzJjNGY4OWRhODMyODQ1N2VkN2I0
OTY2ZDQ0NzgyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Nb2RpZnlTZWxl
Y3Rpb25MaXN0TGV2ZWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTW9kaWZ5U2Vs
ZWN0aW9uTGlzdExldmVsLmNwcApAQCAtMjE5LDE3ICsyMTksMTcgQEAgUmVmUHRyPE5vZGU+IElu
Y3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2
ZWwoRG9jdW0KICAgICByZXR1cm4gV1RGTW92ZShjb21tYW5kLT5tX2xpc3RFbGVtZW50KTsKIH0K
IAotUGFzc1JlZlB0cjxOb2RlPiBJbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6Omlu
Y3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKERvY3VtZW50KiBkb2N1bWVudCkKK1JlZlB0cjxOb2Rl
PiBJbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OmluY3JlYXNlU2VsZWN0aW9uTGlz
dExldmVsKERvY3VtZW50KiBkb2N1bWVudCkKIHsKICAgICByZXR1cm4gaW5jcmVhc2VTZWxlY3Rp
b25MaXN0TGV2ZWwoZG9jdW1lbnQsIEluaGVyaXRlZExpc3RUeXBlKTsKIH0KIAotUGFzc1JlZlB0
cjxOb2RlPiBJbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OmluY3JlYXNlU2VsZWN0
aW9uTGlzdExldmVsT3JkZXJlZChEb2N1bWVudCogZG9jdW1lbnQpCitSZWZQdHI8Tm9kZT4gSW5j
cmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZl
bE9yZGVyZWQoRG9jdW1lbnQqIGRvY3VtZW50KQogewogICAgIHJldHVybiBpbmNyZWFzZVNlbGVj
dGlvbkxpc3RMZXZlbChkb2N1bWVudCwgT3JkZXJlZExpc3QpOwogfQogCi1QYXNzUmVmUHRyPE5v
ZGU+IEluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6aW5jcmVhc2VTZWxlY3Rpb25M
aXN0TGV2ZWxVbm9yZGVyZWQoRG9jdW1lbnQqIGRvY3VtZW50KQorUmVmUHRyPE5vZGU+IEluY3Jl
YXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxV
bm9yZGVyZWQoRG9jdW1lbnQqIGRvY3VtZW50KQogewogICAgIHJldHVybiBpbmNyZWFzZVNlbGVj
dGlvbkxpc3RMZXZlbChkb2N1bWVudCwgVW5vcmRlcmVkTGlzdCk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL01vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9Nb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaAppbmRleCBjYzA2Y2Y0
ZGU4ODk5ZDI5YWE1ZjBjNjNiNmQ3MGU5OWU2ZmNjMzlmLi5hMmNmZDM5NDA3OTQyZWIxZThhMDA5
ZTYwNDU0MWJhZmExNjM1ZDIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01v
ZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTW9k
aWZ5U2VsZWN0aW9uTGlzdExldmVsLmgKQEAgLTQ4LDkgKzQ4LDkgQEAgcHJpdmF0ZToKIGNsYXNz
IEluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZCA6IHB1YmxpYyBNb2RpZnlTZWxlY3Rp
b25MaXN0TGV2ZWxDb21tYW5kIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBjYW5JbmNyZWFz
ZVNlbGVjdGlvbkxpc3RMZXZlbChEb2N1bWVudCopOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE5v
ZGU+IGluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKERvY3VtZW50Kik7Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8Tm9kZT4gaW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxPcmRlcmVkKERvY3VtZW50
Kik7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Tm9kZT4gaW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2
ZWxVbm9yZGVyZWQoRG9jdW1lbnQqKTsKKyAgICBzdGF0aWMgUmVmUHRyPE5vZGU+IGluY3JlYXNl
U2VsZWN0aW9uTGlzdExldmVsKERvY3VtZW50Kik7CisgICAgc3RhdGljIFJlZlB0cjxOb2RlPiBp
bmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbE9yZGVyZWQoRG9jdW1lbnQqKTsKKyAgICBzdGF0aWMg
UmVmUHRyPE5vZGU+IGluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsVW5vcmRlcmVkKERvY3VtZW50
Kik7CiAKIHByaXZhdGU6CiAgICAgZW51bSBUeXBlIHsgSW5oZXJpdGVkTGlzdFR5cGUsIE9yZGVy
ZWRMaXN0LCBVbm9yZGVyZWRMaXN0IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1NwZWxsQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tl
ci5jcHAKaW5kZXggNzA5YjQ3MmVjNzE2OGZiNWM1YjhkNjJmYTczYzE5N2I2NzkzYzE5Ni4uMDEz
ZDEzMTA0MTUwZTdhMmM0MDM2ODhiZjNiMDVkOGY4OGFiYTFhNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU3BlbGxDaGVja2VyLmNwcApAQCAtMTU4LDcgKzE1OCw3IEBAIGJvb2wgU3BlbGxDaGVj
a2VyOjppc0NoZWNrYWJsZShSYW5nZSogcmFuZ2UpIGNvbnN0CiAKIHZvaWQgU3BlbGxDaGVja2Vy
OjpyZXF1ZXN0Q2hlY2tpbmdGb3IoUGFzc1JlZlB0cjxTcGVsbENoZWNrUmVxdWVzdD4gcmVxdWVz
dCkKIHsKLSAgICBpZiAoIXJlcXVlc3QgfHwgIWNhbkNoZWNrQXN5bmNocm9ub3VzbHkocmVxdWVz
dC0+cGFyYWdyYXBoUmFuZ2UoKS5nZXQoKSkpCisgICAgaWYgKCFyZXF1ZXN0IHx8ICFjYW5DaGVj
a0FzeW5jaHJvbm91c2x5KHJlcXVlc3QtPnBhcmFncmFwaFJhbmdlKCkpKQogICAgICAgICByZXR1
cm47CiAKICAgICBBU1NFUlQocmVxdWVzdC0+ZGF0YSgpLnNlcXVlbmNlKCkgPT0gdW5yZXF1ZXN0
ZWRUZXh0Q2hlY2tpbmdTZXF1ZW5jZSk7CkBAIC0yMjksNyArMjI5LDcgQEAgdm9pZCBTcGVsbENo
ZWNrZXI6OmRpZENoZWNrU3VjY2VlZChpbnQgc2VxdWVuY2UsIGNvbnN0IFZlY3RvcjxUZXh0Q2hl
Y2tpbmdSZXN1bHQKICAgICAgICAgaWYgKHJlcXVlc3REYXRhLm1hc2soKSAmIFRleHRDaGVja2lu
Z1R5cGVHcmFtbWFyKQogICAgICAgICAgICAgbWFya2VycyB8PSBEb2N1bWVudE1hcmtlcjo6R3Jh
bW1hcjsKICAgICAgICAgaWYgKG1hcmtlcnMpCi0gICAgICAgICAgICBtX2ZyYW1lLmRvY3VtZW50
KCktPm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKG1fcHJvY2Vzc2luZ1JlcXVlc3QtPmNoZWNraW5n
UmFuZ2UoKS5nZXQoKSwgbWFya2Vycyk7CisgICAgICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCkt
Pm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKG1fcHJvY2Vzc2luZ1JlcXVlc3QtPmNoZWNraW5nUmFu
Z2UoKSwgbWFya2Vycyk7CiAgICAgfQogICAgIGRpZENoZWNrKHNlcXVlbmNlLCByZXN1bHRzKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmggYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5oCmluZGV4IDA0OWQxYzUxZjA0MmEy
Y2NmZWU1OTNiNDc5ZTk2MzUyMDcyNjlkZjIuLjA2YWFiMDVmNzRmODNmNDFiZjY3YTMxZWNlYmM4
ZmViNzlkMDA1MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVj
a2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuaApAQCAtNDcs
OSArNDcsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJlZlB0cjxTcGVsbENoZWNrUmVxdWVzdD4g
Y3JlYXRlKFRleHRDaGVja2luZ1R5cGVNYXNrLCBUZXh0Q2hlY2tpbmdQcm9jZXNzVHlwZSwgUGFz
c1JlZlB0cjxSYW5nZT4gY2hlY2tpbmdSYW5nZSwgUGFzc1JlZlB0cjxSYW5nZT4gcGFyYWdyYXBo
UmFuZ2UpOwogICAgIHZpcnR1YWwgflNwZWxsQ2hlY2tSZXF1ZXN0KCk7CiAKLSAgICBQYXNzUmVm
UHRyPFJhbmdlPiBjaGVja2luZ1JhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9jaGVja2luZ1Jhbmdl
OyB9Ci0gICAgUGFzc1JlZlB0cjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2UoKSBjb25zdCB7IHJldHVy
biBtX3BhcmFncmFwaFJhbmdlOyB9Ci0gICAgUGFzc1JlZlB0cjxFbGVtZW50PiByb290RWRpdGFi
bGVFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9yb290RWRpdGFibGVFbGVtZW50OyB9CisgICAg
UmFuZ2UqIGNoZWNraW5nUmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2NoZWNraW5nUmFuZ2UuZ2V0
KCk7IH0KKyAgICBSYW5nZSogcGFyYWdyYXBoUmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3BhcmFn
cmFwaFJhbmdlLmdldCgpOyB9CisgICAgRWxlbWVudCogcm9vdEVkaXRhYmxlRWxlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fcm9vdEVkaXRhYmxlRWxlbWVudC5nZXQoKTsgfQogCiAgICAgdm9pZCBz
ZXRDaGVja2VyQW5kU2VxdWVuY2UoU3BlbGxDaGVja2VyKiwgaW50IHNlcXVlbmNlKTsKICAgICB2
b2lkIHJlcXVlc3RlckRlc3Ryb3llZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggYzliZjJjMDk5NzViZWVlNDg0
MGJiNmY3ZDMzMjg3MmU4NmNiYWJjOC4uMzM1N2UwYTI3NmRiZTA5YzljZGZhN2JlOTU3OTkxMjhl
NzY5NDQ4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJl
Y3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29y
cmVjdGlvbkNvbW1hbmQuY3BwCkBAIC04MywzMiArODMsMjkgQEAgcHJpdmF0ZToKIH07CiAjZW5k
aWYKIAotU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFu
ZChQYXNzUmVmUHRyPFJhbmdlPiByYW5nZVRvQmVDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29y
cmVjdGlvbikKLSAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5kKHJhbmdlVG9CZUNvcnJlY3RlZC0+
c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLCBFZGl0QWN0aW9uSW5zZXJ0UmVwbGFjZW1lbnQp
CitTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kKFJh
bmdlJiByYW5nZVRvQmVDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikKKyAgICA6
IENvbXBvc2l0ZUVkaXRDb21tYW5kKHJhbmdlVG9CZUNvcnJlY3RlZC5zdGFydENvbnRhaW5lcigp
LmRvY3VtZW50KCksIEVkaXRBY3Rpb25JbnNlcnRSZXBsYWNlbWVudCkKICAgICAsIG1fcmFuZ2VU
b0JlQ29ycmVjdGVkKHJhbmdlVG9CZUNvcnJlY3RlZCkKLSAgICAsIG1fc2VsZWN0aW9uVG9CZUNv
cnJlY3RlZCgqbV9yYW5nZVRvQmVDb3JyZWN0ZWQpCisgICAgLCBtX3NlbGVjdGlvblRvQmVDb3Jy
ZWN0ZWQobV9yYW5nZVRvQmVDb3JyZWN0ZWQpCiAgICAgLCBtX2NvcnJlY3Rpb24oY29ycmVjdGlv
bikKIHsKIH0KIAogYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjp3aWxsQXBwbHlDb21t
YW5kKCkKIHsKLSAgICBtX2NvcnJlY3Rpb25GcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRl
eHQoKm1fcmFuZ2VUb0JlQ29ycmVjdGVkLCBtX2NvcnJlY3Rpb24pOworICAgIG1fY29ycmVjdGlv
bkZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChtX3JhbmdlVG9CZUNvcnJlY3RlZCwg
bV9jb3JyZWN0aW9uKTsKICAgICByZXR1cm4gQ29tcG9zaXRlRWRpdENvbW1hbmQ6OndpbGxBcHBs
eUNvbW1hbmQoKTsKIH0KIAogdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpkb0FwcGx5
KCkKIHsKLSAgICBtX2NvcnJlY3RlZCA9IHBsYWluVGV4dChtX3JhbmdlVG9CZUNvcnJlY3RlZC5n
ZXQoKSk7CisgICAgbV9jb3JyZWN0ZWQgPSBwbGFpblRleHQobV9yYW5nZVRvQmVDb3JyZWN0ZWQu
cHRyKCkpOwogICAgIGlmICghbV9jb3JyZWN0ZWQubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGlmICghZnJhbWUoKS5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obV9z
ZWxlY3Rpb25Ub0JlQ29ycmVjdGVkKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFtX3Jh
bmdlVG9CZUNvcnJlY3RlZCkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgYXBwbHlDb21tYW5kVG9D
b21wb3NpdGUoU2V0U2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKG1fc2VsZWN0aW9uVG9CZUNvcnJl
Y3RlZCwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKCkgfCBGcmFt
ZVNlbGVjdGlvbjo6U3BlbGxDb3JyZWN0aW9uVHJpZ2dlcmVkKSk7CiAjaWYgVVNFKEFVVE9DT1JS
RUNUSU9OX1BBTkVMKQogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFNwZWxsaW5nQ29ycmVj
dGlvblJlY29yZFVuZG9Db21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgbV9jb3JyZWN0ZWQsIG1f
Y29ycmVjdGlvbikpOwpAQCAtMTI3LDcgKzEyNCw3IEBAIFN0cmluZyBTcGVsbGluZ0NvcnJlY3Rp
b25Db21tYW5kOjppbnB1dEV2ZW50RGF0YSgpIGNvbnN0CiAKIFZlY3RvcjxSZWZQdHI8U3RhdGlj
UmFuZ2U+PiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjp0YXJnZXRSYW5nZXMoKSBjb25zdAog
ewotICAgIFJlZlB0cjxTdGF0aWNSYW5nZT4gcmFuZ2UgPSBTdGF0aWNSYW5nZTo6Y3JlYXRlRnJv
bVJhbmdlKCptX3JhbmdlVG9CZUNvcnJlY3RlZCk7CisgICAgUmVmUHRyPFN0YXRpY1JhbmdlPiBy
YW5nZSA9IFN0YXRpY1JhbmdlOjpjcmVhdGVGcm9tUmFuZ2UobV9yYW5nZVRvQmVDb3JyZWN0ZWQp
OwogICAgIHJldHVybiB7IDEsIHJhbmdlIH07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmgKaW5kZXggNmM0MzlhN2E1ODc0ZmVh
YmNhNDc0MmE2YWIzZWNiNGM4NzVmYWZhOC4uNWI4MWVmMjM1NmM5OWE3MzNmNGEzZTE4ODc4YjAw
NWYzYzkwMjJkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0Nv
cnJlY3Rpb25Db21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0Nv
cnJlY3Rpb25Db21tYW5kLmgKQEAgLTMyLDEyICszMiwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQgOiBwdWJsaWMgQ29tcG9zaXRlRWRp
dENvbW1hbmQgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U3BlbGxpbmdDb3JyZWN0aW9uQ29t
bWFuZD4gY3JlYXRlKFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlVG9CZUNvcnJlY3RlZCwgY29uc3Qg
U3RyaW5nJiBjb3JyZWN0aW9uKQorICAgIHN0YXRpYyBSZWY8U3BlbGxpbmdDb3JyZWN0aW9uQ29t
bWFuZD4gY3JlYXRlKFJhbmdlJiByYW5nZVRvQmVDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29y
cmVjdGlvbikKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNwZWxsaW5nQ29y
cmVjdGlvbkNvbW1hbmQocmFuZ2VUb0JlQ29ycmVjdGVkLCBjb3JyZWN0aW9uKSk7CiAgICAgfQog
cHJpdmF0ZToKLSAgICBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kKFBhc3NSZWZQdHI8UmFuZ2U+
IHJhbmdlVG9CZUNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKTsKKyAgICBTcGVs
bGluZ0NvcnJlY3Rpb25Db21tYW5kKFJhbmdlJiByYW5nZVRvQmVDb3JyZWN0ZWQsIGNvbnN0IFN0
cmluZyYgY29ycmVjdGlvbik7CiAgICAgYm9vbCB3aWxsQXBwbHlDb21tYW5kKCkgZmluYWw7CiAg
ICAgdm9pZCBkb0FwcGx5KCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBzaG91bGRSZXRhaW5BdXRvY29y
cmVjdGlvbkluZGljYXRvcigpIGNvbnN0IG92ZXJyaWRlOwpAQCAtNDYsNyArNDYsNyBAQCBwcml2
YXRlOgogICAgIFZlY3RvcjxSZWZQdHI8U3RhdGljUmFuZ2U+PiB0YXJnZXRSYW5nZXMoKSBjb25z
dCBmaW5hbDsKICAgICBSZWZQdHI8RGF0YVRyYW5zZmVyPiBpbnB1dEV2ZW50RGF0YVRyYW5zZmVy
KCkgY29uc3QgZmluYWw7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IG1fcmFuZ2VUb0JlQ29ycmVjdGVk
OworICAgIFJlZjxSYW5nZT4gbV9yYW5nZVRvQmVDb3JyZWN0ZWQ7CiAgICAgVmlzaWJsZVNlbGVj
dGlvbiBtX3NlbGVjdGlvblRvQmVDb3JyZWN0ZWQ7CiAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IG1fY29ycmVjdGlvbkZyYWdtZW50OwogICAgIFN0cmluZyBtX2NvcnJlY3RlZDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3Vycm91bmRpbmdUZXh0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1N1cnJvdW5kaW5nVGV4dC5oCmluZGV4IGJkNmUzNjY1MDkzMjY2MDU4
NzE4ZDEwYzU3NzEzY2U3YjNhYTM5ODMuLjBjNjExMDE0ZmU4M2FlZDFlNjQ1NjlhMWE1Mzg1ZGZm
OTk4MmQwODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3Vycm91bmRpbmdU
ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TdXJyb3VuZGluZ1RleHQuaApAQCAt
NDUsOCArNDUsNiBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGNvbnRlbnQoKSBjb25zdDsKICAgICB1
bnNpZ25lZCBwb3NpdGlvbk9mZnNldEluQ29udGVudCgpIGNvbnN0OwogCi0gICAgUGFzc1JlZlB0
cjxSYW5nZT4gcmFuZ2VGcm9tQ29udGVudE9mZnNldHModW5zaWduZWQgc3RhcnRPZmZzZXRJbkNv
bnRlbnQsIHVuc2lnbmVkIGVuZE9mZnNldEluQ29udGVudCk7Ci0KIHByaXZhdGU6CiAgICAgUmVm
UHRyPFJhbmdlPiBtX2NvbnRlbnRSYW5nZTsKICAgICBzaXplX3QgbV9wb3NpdGlvbk9mZnNldElu
Q29udGVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5n
SGVscGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNw
cAppbmRleCAzNzlkN2QyOTllNzYwNjcyY2I1NmE5M2E2Njg0NTA0YzkzMDkwYmIzLi43YmQwMjE3
ZTk1N2NkMzdiNmU3OTY0YWQ2ZTZjMDgzMzczYzgxYzkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCkBAIC0xNDIsNyArMTQyLDcgQEAgVGV4dENo
ZWNraW5nUGFyYWdyYXBoOjp+VGV4dENoZWNraW5nUGFyYWdyYXBoKCkKIHZvaWQgVGV4dENoZWNr
aW5nUGFyYWdyYXBoOjpleHBhbmRSYW5nZVRvTmV4dEVuZCgpCiB7CiAgICAgQVNTRVJUKG1fY2hl
Y2tpbmdSYW5nZSk7Ci0gICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlKCkuZ2V0KCksIGVuZE9mUGFy
YWdyYXBoKHN0YXJ0T2ZOZXh0UGFyYWdyYXBoKHBhcmFncmFwaFJhbmdlKCktPnN0YXJ0UG9zaXRp
b24oKSkpKTsKKyAgICBzZXRFbmQoJnBhcmFncmFwaFJhbmdlKCksIGVuZE9mUGFyYWdyYXBoKHN0
YXJ0T2ZOZXh0UGFyYWdyYXBoKHBhcmFncmFwaFJhbmdlKCkuc3RhcnRQb3NpdGlvbigpKSkpOwog
ICAgIGludmFsaWRhdGVQYXJhZ3JhcGhSYW5nZVZhbHVlcygpOwogfQogCkBAIC0xNTYsMjEgKzE1
NiwyMSBAQCB2b2lkIFRleHRDaGVja2luZ1BhcmFncmFwaDo6aW52YWxpZGF0ZVBhcmFncmFwaFJh
bmdlVmFsdWVzKCkKIGludCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OnJhbmdlTGVuZ3RoKCkgY29u
c3QKIHsKICAgICBBU1NFUlQobV9jaGVja2luZ1JhbmdlKTsKLSAgICByZXR1cm4gVGV4dEl0ZXJh
dG9yOjpyYW5nZUxlbmd0aChwYXJhZ3JhcGhSYW5nZSgpLmdldCgpKTsKKyAgICByZXR1cm4gVGV4
dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCgmcGFyYWdyYXBoUmFuZ2UoKSk7CiB9CiAKLVBhc3NSZWZQ
dHI8UmFuZ2U+IFRleHRDaGVja2luZ1BhcmFncmFwaDo6cGFyYWdyYXBoUmFuZ2UoKSBjb25zdAor
UmFuZ2UmIFRleHRDaGVja2luZ1BhcmFncmFwaDo6cGFyYWdyYXBoUmFuZ2UoKSBjb25zdAogewog
ICAgIEFTU0VSVChtX2NoZWNraW5nUmFuZ2UpOwogICAgIGlmICghbV9wYXJhZ3JhcGhSYW5nZSkK
ICAgICAgICAgbV9wYXJhZ3JhcGhSYW5nZSA9IGV4cGFuZFRvUGFyYWdyYXBoQm91bmRhcnkobV9j
aGVja2luZ1JhbmdlKTsKLSAgICByZXR1cm4gbV9wYXJhZ3JhcGhSYW5nZTsKKyAgICByZXR1cm4g
Km1fcGFyYWdyYXBoUmFuZ2U7CiB9CiAKLVBhc3NSZWZQdHI8UmFuZ2U+IFRleHRDaGVja2luZ1Bh
cmFncmFwaDo6c3VicmFuZ2UoaW50IGNoYXJhY3Rlck9mZnNldCwgaW50IGNoYXJhY3RlckNvdW50
KSBjb25zdAorUmVmPFJhbmdlPiBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OnN1YnJhbmdlKGludCBj
aGFyYWN0ZXJPZmZzZXQsIGludCBjaGFyYWN0ZXJDb3VudCkgY29uc3QKIHsKICAgICBBU1NFUlQo
bV9jaGVja2luZ1JhbmdlKTsKLSAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShwYXJh
Z3JhcGhSYW5nZSgpLmdldCgpLCBjaGFyYWN0ZXJPZmZzZXQsIGNoYXJhY3RlckNvdW50KTsKKyAg
ICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZSgmcGFyYWdyYXBoUmFuZ2UoKSwgY2hhcmFj
dGVyT2Zmc2V0LCBjaGFyYWN0ZXJDb3VudCk7CiB9CiAKIEV4Y2VwdGlvbk9yPGludD4gVGV4dENo
ZWNraW5nUGFyYWdyYXBoOjpvZmZzZXRUbyhjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pIGNvbnN0
CkBAIC0xNzksNyArMTc5LDcgQEAgRXhjZXB0aW9uT3I8aW50PiBUZXh0Q2hlY2tpbmdQYXJhZ3Jh
cGg6Om9mZnNldFRvKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikgY29uc3QKICAgICBpZiAoIXBv
c2l0aW9uLmNvbnRhaW5lck5vZGUoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVF
cnJvciB9OwogCi0gICAgYXV0byByYW5nZSA9IG9mZnNldEFzUmFuZ2UoKS0+Y2xvbmVSYW5nZSgp
OworICAgIGF1dG8gcmFuZ2UgPSBvZmZzZXRBc1JhbmdlKCkuY2xvbmVSYW5nZSgpOwogICAgIGF1
dG8gcmVzdWx0ID0gcmFuZ2UtPnNldEVuZCgqcG9zaXRpb24uY29udGFpbmVyTm9kZSgpLCBwb3Np
dGlvbi5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwogICAgIGlmIChyZXN1bHQuaGFz
RXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwpA
QCAtMTkzLDIwICsxOTMsMjAgQEAgYm9vbCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmlzRW1wdHko
KSBjb25zdAogICAgIHJldHVybiBjaGVja2luZ1N0YXJ0KCkgPj0gY2hlY2tpbmdFbmQoKSB8fCB0
ZXh0KCkuaXNFbXB0eSgpOwogfQogCi1QYXNzUmVmUHRyPFJhbmdlPiBUZXh0Q2hlY2tpbmdQYXJh
Z3JhcGg6Om9mZnNldEFzUmFuZ2UoKSBjb25zdAorUmFuZ2UmIFRleHRDaGVja2luZ1BhcmFncmFw
aDo6b2Zmc2V0QXNSYW5nZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fY2hlY2tpbmdSYW5nZSk7
CiAgICAgaWYgKCFtX29mZnNldEFzUmFuZ2UpCi0gICAgICAgIG1fb2Zmc2V0QXNSYW5nZSA9IFJh
bmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2UoKS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgp
LCBwYXJhZ3JhcGhSYW5nZSgpLT5zdGFydFBvc2l0aW9uKCksIG1fY2hlY2tpbmdSYW5nZS0+c3Rh
cnRQb3NpdGlvbigpKTsKKyAgICAgICAgbV9vZmZzZXRBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShw
YXJhZ3JhcGhSYW5nZSgpLnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFu
Z2UoKS5zdGFydFBvc2l0aW9uKCksIG1fY2hlY2tpbmdSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsK
IAotICAgIHJldHVybiBtX29mZnNldEFzUmFuZ2U7CisgICAgcmV0dXJuICptX29mZnNldEFzUmFu
Z2U7CiB9CiAKIGNvbnN0IFN0cmluZyYgVGV4dENoZWNraW5nUGFyYWdyYXBoOjp0ZXh0KCkgY29u
c3QKIHsKICAgICBBU1NFUlQobV9jaGVja2luZ1JhbmdlKTsKICAgICBpZiAobV90ZXh0LmlzRW1w
dHkoKSkKLSAgICAgICAgbV90ZXh0ID0gcGxhaW5UZXh0KHBhcmFncmFwaFJhbmdlKCkuZ2V0KCkp
OworICAgICAgICBtX3RleHQgPSBwbGFpblRleHQoJnBhcmFncmFwaFJhbmdlKCkpOwogICAgIHJl
dHVybiBtX3RleHQ7IAogfQogCkBAIC0yMTQsNyArMjE0LDcgQEAgaW50IFRleHRDaGVja2luZ1Bh
cmFncmFwaDo6Y2hlY2tpbmdTdGFydCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fY2hlY2tpbmdS
YW5nZSk7CiAgICAgaWYgKG1fY2hlY2tpbmdTdGFydCA9PSAtMSkKLSAgICAgICAgbV9jaGVja2lu
Z1N0YXJ0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChvZmZzZXRBc1JhbmdlKCkuZ2V0KCkp
OworICAgICAgICBtX2NoZWNraW5nU3RhcnQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKCZv
ZmZzZXRBc1JhbmdlKCkpOwogICAgIHJldHVybiBtX2NoZWNraW5nU3RhcnQ7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5oCmluZGV4IGQ4ZGYyNGU2Njg3
YzIwMGYxNDU3YzcxNTE3MGJmYzk5OWFmMDU2OTguLjhmZTIwMTYyYzdkMjJhOTFkMDZlMTM3MTM3
YmVkMmJkOTUxYmViOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENo
ZWNraW5nSGVscGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdI
ZWxwZXIuaApAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgflRleHRDaGVja2luZ1BhcmFn
cmFwaCgpOwogCiAgICAgaW50IHJhbmdlTGVuZ3RoKCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxS
YW5nZT4gc3VicmFuZ2UoaW50IGNoYXJhY3Rlck9mZnNldCwgaW50IGNoYXJhY3RlckNvdW50KSBj
b25zdDsKKyAgICBSZWY8UmFuZ2U+IHN1YnJhbmdlKGludCBjaGFyYWN0ZXJPZmZzZXQsIGludCBj
aGFyYWN0ZXJDb3VudCkgY29uc3Q7CiAgICAgRXhjZXB0aW9uT3I8aW50PiBvZmZzZXRUbyhjb25z
dCBQb3NpdGlvbiYpIGNvbnN0OwogICAgIHZvaWQgZXhwYW5kUmFuZ2VUb05leHRFbmQoKTsKIApA
QCAtNjAsMTEgKzYwLDExIEBAIHB1YmxpYzoKICAgICBib29sIGNoZWNraW5nUmFuZ2VNYXRjaGVz
KGludCBsb2NhdGlvbiwgaW50IGxlbmd0aCkgY29uc3QgeyByZXR1cm4gbG9jYXRpb24gPT0gY2hl
Y2tpbmdTdGFydCgpICYmIGxlbmd0aCA9PSBjaGVja2luZ0xlbmd0aCgpOyB9CiAgICAgYm9vbCBp
c0NoZWNraW5nUmFuZ2VDb3ZlcmVkQnkoaW50IGxvY2F0aW9uLCBpbnQgbGVuZ3RoKSBjb25zdCB7
IHJldHVybiBsb2NhdGlvbiA8PSBjaGVja2luZ1N0YXJ0KCkgJiYgbG9jYXRpb24gKyBsZW5ndGgg
Pj0gY2hlY2tpbmdTdGFydCgpICsgY2hlY2tpbmdMZW5ndGgoKTsgfQogICAgIGJvb2wgY2hlY2tp
bmdSYW5nZUNvdmVycyhpbnQgbG9jYXRpb24sIGludCBsZW5ndGgpIGNvbnN0IHsgcmV0dXJuIGxv
Y2F0aW9uIDwgY2hlY2tpbmdFbmQoKSAmJiBsb2NhdGlvbiArIGxlbmd0aCA+IGNoZWNraW5nU3Rh
cnQoKTsgfQotICAgIFBhc3NSZWZQdHI8UmFuZ2U+IHBhcmFncmFwaFJhbmdlKCkgY29uc3Q7Cisg
ICAgUmFuZ2UmIHBhcmFncmFwaFJhbmdlKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBp
bnZhbGlkYXRlUGFyYWdyYXBoUmFuZ2VWYWx1ZXMoKTsKLSAgICBQYXNzUmVmUHRyPFJhbmdlPiBv
ZmZzZXRBc1JhbmdlKCkgY29uc3Q7CisgICAgUmFuZ2UmIG9mZnNldEFzUmFuZ2UoKSBjb25zdDsK
IAogICAgIFJlZlB0cjxSYW5nZT4gbV9jaGVja2luZ1JhbmdlOwogICAgIG11dGFibGUgUmVmUHRy
PFJhbmdlPiBtX3BhcmFncmFwaFJhbmdlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9UeXBpbmdDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29t
bWFuZC5jcHAKaW5kZXggNzg1MmExM2UwYTg0ZjVjODAxNjExOTc1ZGQzNzRkZjlkMDk4NWU3Ny4u
MWQwYTMyZGIwYTdkMzExMTQ1Mzk1YzZlMTRkNzI1NGMzOTY1MzNlNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCkBAIC01NDcsMTAgKzU0NywxMCBAQCB2b2lkIFR5
cGluZ0NvbW1hbmQ6Omluc2VydFRleHRSdW5XaXRob3V0TmV3bGluZXMoY29uc3QgU3RyaW5nICZ0
ZXh0LCBib29sIHNlbGVjdAogICAgIGlmICghd2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQoSW5z
ZXJ0VGV4dCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHksIHRleHQpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBSZWZQdHI8SW5zZXJ0VGV4dENvbW1hbmQ+IGNvbW1hbmQgPSBJbnNlcnRUZXh0Q29tbWFu
ZDo6Y3JlYXRlKGRvY3VtZW50KCksIHRleHQsIHNlbGVjdEluc2VydGVkVGV4dCwKKyAgICBhdXRv
IGNvbW1hbmQgPSBJbnNlcnRUZXh0Q29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCksIHRleHQsIHNl
bGVjdEluc2VydGVkVGV4dCwKICAgICAgICAgbV9jb21wb3NpdGlvblR5cGUgPT0gVGV4dENvbXBv
c2l0aW9uTm9uZSA/IEluc2VydFRleHRDb21tYW5kOjpSZWJhbGFuY2VMZWFkaW5nQW5kVHJhaWxp
bmdXaGl0ZXNwYWNlcyA6IEluc2VydFRleHRDb21tYW5kOjpSZWJhbGFuY2VBbGxXaGl0ZXNwYWNl
cywgRWRpdEFjdGlvblR5cGluZ0luc2VydFRleHQpOwogCi0gICAgYXBwbHlDb21tYW5kVG9Db21w
b3NpdGUoY29tbWFuZCwgZW5kaW5nU2VsZWN0aW9uKCkpOworICAgIGFwcGx5Q29tbWFuZFRvQ29t
cG9zaXRlKFdURk1vdmUoY29tbWFuZCksIGVuZGluZ1NlbGVjdGlvbigpKTsKIAogICAgIHR5cGlu
Z0FkZGVkVG9PcGVuQ29tbWFuZChJbnNlcnRUZXh0KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbSBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQppbmRleCA2MGE4NmEyMjMzYmJjMDY2NTgxYjNj
YzBhNGI3YjFlNWVmMmFjZGM3Li4zNGMxNjEzNWM4NDUyOWRhZTU0MWU5MmY4MmRkYmE3OTdkMzA1
ZWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0
ZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1t
CkBAIC0zMzgsOCArMzM4LDggQEAgcHVibGljOgogICAgIGJvb2wgaXNCbG9ja0VsZW1lbnQoRWxl
bWVudCYpOwogICAgIGJvb2wgZWxlbWVudEhhc093bkJhY2tncm91bmRDb2xvcihFbGVtZW50Jik7
CiAKLSAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBjb21wdXRlZFN0eWxlUHJvcGVydHlGb3JFbGVt
ZW50KEVsZW1lbnQmLCBDU1NQcm9wZXJ0eUlEKTsKLSAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBp
bmxpbmVTdHlsZVByb3BlcnR5Rm9yRWxlbWVudChFbGVtZW50JiwgQ1NTUHJvcGVydHlJRCk7Cisg
ICAgUmVmUHRyPENTU1ZhbHVlPiBjb21wdXRlZFN0eWxlUHJvcGVydHlGb3JFbGVtZW50KEVsZW1l
bnQmLCBDU1NQcm9wZXJ0eUlEKTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IGlubGluZVN0eWxlUHJv
cGVydHlGb3JFbGVtZW50KEVsZW1lbnQmLCBDU1NQcm9wZXJ0eUlEKTsKIAogICAgIE5vZGUqIGNh
Y2hlQW5jZXN0b3JzT2ZTdGFydFRvQmVDb252ZXJ0ZWQoY29uc3QgUmFuZ2UmKTsKICAgICBib29s
IGlzQW5jZXN0b3JzT2ZTdGFydFRvQmVDb252ZXJ0ZWQoTm9kZSYgbm9kZSkgY29uc3QgeyByZXR1
cm4gbV9hbmNlc3RvcnNVbmRlckNvbW1vbkFuY2VzdG9yLmNvbnRhaW5zKCZub2RlKTsgfQpAQCAt
NjE5LDcgKzYxOSw3IEBAIHN0YXRpYyBOU1BhcmFncmFwaFN0eWxlICpkZWZhdWx0UGFyYWdyYXBo
U3R5bGUoKQogICAgIHJldHVybiBkZWZhdWx0UGFyYWdyYXBoU3R5bGU7CiB9CiAKLVBhc3NSZWZQ
dHI8Q1NTVmFsdWU+IEhUTUxDb252ZXJ0ZXJDYWNoZXM6OmNvbXB1dGVkU3R5bGVQcm9wZXJ0eUZv
ckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkKQorUmVm
UHRyPENTU1ZhbHVlPiBIVE1MQ29udmVydGVyQ2FjaGVzOjpjb21wdXRlZFN0eWxlUHJvcGVydHlG
b3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCkKIHsK
ICAgICBpZiAocHJvcGVydHlJZCA9PSBDU1NQcm9wZXJ0eUludmFsaWQpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwpAQCAtNjMxLDcgKzYzMSw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IEhUTUxD
b252ZXJ0ZXJDYWNoZXM6OmNvbXB1dGVkU3R5bGVQcm9wZXJ0eUZvckVsZW1lbnQoRWxlbWVuCiAg
ICAgcmV0dXJuIGNvbXB1dGVkU3R5bGUucHJvcGVydHlWYWx1ZShwcm9wZXJ0eUlkKTsKIH0KIAot
UGFzc1JlZlB0cjxDU1NWYWx1ZT4gSFRNTENvbnZlcnRlckNhY2hlczo6aW5saW5lU3R5bGVQcm9w
ZXJ0eUZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlk
KQorUmVmUHRyPENTU1ZhbHVlPiBIVE1MQ29udmVydGVyQ2FjaGVzOjppbmxpbmVTdHlsZVByb3Bl
cnR5Rm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50LCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SWQp
CiB7CiAgICAgaWYgKHByb3BlcnR5SWQgPT0gQ1NTUHJvcGVydHlJbnZhbGlkIHx8ICFpczxTdHls
ZWRFbGVtZW50PihlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvaW9zL0ZyYW1lSU9TLm1tCmluZGV4IGUwNmY0NzgxNjY2NTUzNGE1ODQzYmY3Nzk5NWJlYTE1
ZjZjZjY0ODUuLjljZTBkMzg5NzdhNjBiOGQxOTk0ODEwMzQ5ODYzZGFhZjhjNTJjOGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCkBAIC02MjksMTMgKzYyOSwxMyBAQCBOU0FycmF5
ICpGcmFtZTo6aW50ZXJwcmV0YXRpb25zRm9yQ3VycmVudFJvb3QoKSBjb25zdAogCiAgICAgYXV0
byogcm9vdCA9IHNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKSA9PSBWaXNp
YmxlU2VsZWN0aW9uOjpOb1NlbGVjdGlvbiA/IGRvY3VtZW50KCktPmJvZHlPckZyYW1lc2V0KCkg
OiBzZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgdW5z
aWduZWQgcm9vdENoaWxkQ291bnQgPSByb290LT5jb3VudENoaWxkTm9kZXMoKTsKLSAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlT2ZSb290Q29udGVudHMgPSBSYW5nZTo6Y3JlYXRlKCpkb2N1bWVudCgp
LCBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocm9vdCwgMCksIGNyZWF0ZUxlZ2FjeUVkaXRp
bmdQb3NpdGlvbihyb290LCByb290Q2hpbGRDb3VudCkpOworICAgIGF1dG8gcmFuZ2VPZlJvb3RD
b250ZW50cyA9IFJhbmdlOjpjcmVhdGUoKmRvY3VtZW50KCksIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQ
b3NpdGlvbihyb290LCAwKSwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJvb3QsIHJvb3RD
aGlsZENvdW50KSk7CiAKLSAgICBhdXRvIG1hcmtlcnNJblJvb3QgPSBkb2N1bWVudCgpLT5tYXJr
ZXJzKCkubWFya2Vyc0luUmFuZ2UocmFuZ2VPZlJvb3RDb250ZW50cy5nZXQoKSwgRG9jdW1lbnRN
YXJrZXI6OkRpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXMpOworICAgIGF1dG8gbWFya2Vy
c0luUm9vdCA9IGRvY3VtZW50KCktPm1hcmtlcnMoKS5tYXJrZXJzSW5SYW5nZShyYW5nZU9mUm9v
dENvbnRlbnRzLCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZl
cyk7CiAKICAgICAvLyBUaGVyZSBhcmUgbm8gcGhyYXNlcyB3aXRoIGFsdGVybmF0aXZlcywgc28g
dGhlcmUgaXMganVzdCBvbmUgaW50ZXJwcmV0YXRpb24uCiAgICAgaWYgKG1hcmtlcnNJblJvb3Qu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OnBsYWlu
VGV4dChyYW5nZU9mUm9vdENvbnRlbnRzLmdldCgpKV07CisgICAgICAgIHJldHVybiBbTlNBcnJh
eSBhcnJheVdpdGhPYmplY3Q6cGxhaW5UZXh0KHJhbmdlT2ZSb290Q29udGVudHMucHRyKCkpXTsK
IAogICAgIC8vIFRoZSBudW1iZXIgb2YgaW50ZXJwcmV0YXRpb25zIHdpbGwgYmUgaTEgKiBpMiAq
IC4uLiAqIGlOLCB3aGVyZSBpWCBpcyB0aGUgbnVtYmVyIG9mIGludGVycHJldGF0aW9ucyBmb3Ig
dGhlIFh0aCBwaHJhc2Ugd2l0aCBhbHRlcm5hdGl2ZXMuCiAgICAgc2l6ZV90IGludGVycHJldGF0
aW9uc0NvdW50ID0gMTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBw
b3J0L1dlYkZyYW1lSU9TLm1tIGIvU291cmNlL1dlYktpdC9pb3MvV2ViQ29yZVN1cHBvcnQvV2Vi
RnJhbWVJT1MubW0KaW5kZXggZmEwMWQ0MzVmMjNjN2VhZTU0ODI1MzBlMzhkY2I5NTkxMGY3ZGEz
NC4uODNkZWZiZWFkZDUzMDA4ZTRiZjlhNzk2ZGI1OTYxZTk2ZmNlZjllMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0KKysrIGIvU291
cmNlL1dlYktpdC9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0KQEAgLTg1Nyw5ICs4
NTcsOSBAQCAtIChXZWJWaXNpYmxlUG9zaXRpb24gKilwcmV2aW91c1VucGVydHVyYmVkRGljdGF0
aW9uUmVzdWx0Qm91bmRhcnlGcm9tUG9zaXRpb246KAogICAgICAgICBpZiAocHJldmlvdXNWaXNp
YmxlUG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gY3VycmVudFdlYlZpc2li
bGVQb3NpdGlvbjsKICAgICAgICAgCi0gICAgICAgIFJlZlB0cjxSYW5nZT4gZ3JhcGhlbWVSYW5n
ZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQsIHByZXZpb3VzVmlzaWJsZVBvc2l0aW9uLmRlZXBF
cXVpdmFsZW50KCksIGN1cnJlbnRWaXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7Cisg
ICAgICAgIGF1dG8gZ3JhcGhlbWVSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQsIHByZXZp
b3VzVmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCksIGN1cnJlbnRWaXNpYmxlUG9zaXRp
b24uZGVlcEVxdWl2YWxlbnQoKSk7CiAgICAgICAgIAotICAgICAgICBhdXRvIG1hcmtlcnMgPSBk
b2N1bWVudC5tYXJrZXJzKCkubWFya2Vyc0luUmFuZ2UoZ3JhcGhlbWVSYW5nZS5nZXQoKSwgRG9j
dW1lbnRNYXJrZXI6OkRpY3RhdGlvblJlc3VsdCk7CisgICAgICAgIGF1dG8gbWFya2VycyA9IGRv
Y3VtZW50Lm1hcmtlcnMoKS5tYXJrZXJzSW5SYW5nZShncmFwaGVtZVJhbmdlLCBEb2N1bWVudE1h
cmtlcjo6RGljdGF0aW9uUmVzdWx0KTsKICAgICAgICAgaWYgKG1hcmtlcnMuaXNFbXB0eSgpKQog
ICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRXZWJWaXNpYmxlUG9zaXRpb247CiAgICAgICAgIApA
QCAtOTEzLDkgKzkxMyw5IEBAIC0gKFdlYlZpc2libGVQb3NpdGlvbiAqKW5leHRVbnBlcnR1cmJl
ZERpY3RhdGlvblJlc3VsdEJvdW5kYXJ5RnJvbVBvc2l0aW9uOihXZWJWCiAgICAgICAgIGlmIChu
ZXh0VmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRX
ZWJWaXNpYmxlUG9zaXRpb247CiAgICAgICAgIAotICAgICAgICBSZWZQdHI8UmFuZ2U+IGdyYXBo
ZW1lUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50LCBjdXJyZW50VmlzaWJsZVBvc2l0aW9u
LmRlZXBFcXVpdmFsZW50KCksIG5leHRWaXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7
CisgICAgICAgIGF1dG8gZ3JhcGhlbWVSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQsIGN1
cnJlbnRWaXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSwgbmV4dFZpc2libGVQb3NpdGlv
bi5kZWVwRXF1aXZhbGVudCgpKTsKICAgICAgICAgCi0gICAgICAgIGF1dG8gbWFya2VycyA9IGRv
Y3VtZW50Lm1hcmtlcnMoKS5tYXJrZXJzSW5SYW5nZShncmFwaGVtZVJhbmdlLmdldCgpLCBEb2N1
bWVudE1hcmtlcjo6RGljdGF0aW9uUmVzdWx0KTsKKyAgICAgICAgYXV0byBtYXJrZXJzID0gZG9j
dW1lbnQubWFya2VycygpLm1hcmtlcnNJblJhbmdlKGdyYXBoZW1lUmFuZ2UsIERvY3VtZW50TWFy
a2VyOjpEaWN0YXRpb25SZXN1bHQpOwogICAgICAgICBpZiAobWFya2Vycy5pc0VtcHR5KCkpCiAg
ICAgICAgICAgICByZXR1cm4gY3VycmVudFdlYlZpc2libGVQb3NpdGlvbjsKICAgICAgICAgCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIvU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCBlYzkzODNkZjk2ZmZiZTk4NzA4
ZDM1NmY5YzUyNDY3OGMwOGNkZjhjLi41ODE5NWVlMzY1OWIxZGNkM2Y5NWRjMjNkYjEyYjc4NTQ3
YjI0MjE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KQEAgLTE3NTYsNyAr
MTc1Niw3IEBAIC0gKGlkKWRpY3RhdGlvblJlc3VsdE1ldGFkYXRhRm9yUmFuZ2U6KERPTVJhbmdl
ICopcmFuZ2UKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIAotICAg
IGF1dG8gbWFya2VycyA9IGNvcmUoc2VsZiktPmRvY3VtZW50KCktPm1hcmtlcnMoKS5tYXJrZXJz
SW5SYW5nZShjb3JlKHJhbmdlKSwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblJlc3VsdCk7Cisg
ICAgYXV0byBtYXJrZXJzID0gY29yZShzZWxmKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLm1hcmtl
cnNJblJhbmdlKCpjb3JlKHJhbmdlKSwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblJlc3VsdCk7
CiAgICAgCiAgICAgLy8gVUlLaXQgc2hvdWxkIG9ubHkgZXZlciBnaXZlIHVzIGEgRE9NUmFuZ2Ug
Zm9yIGEgcGhyYXNlIHdpdGggYWx0ZXJuYXRpdmVzLCB3aGljaCBzaG91bGQgbm90IGJlIHBhcnQg
b2YgbW9yZSB0aGFuIG9uZSByZXN1bHQuCiAgICAgQVNTRVJUKG1hcmtlcnMuc2l6ZSgpIDw9IDEp
OwpAQCAtMTkyOSw3ICsxOTI5LDcgQEAgLSAodm9pZClfcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFn
bWVudDooRE9NRG9jdW1lbnRGcmFnbWVudCAqKWZyYWdtZW50IHNlbGVjdFJlcGwKIHsKICAgICBp
ZiAoX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuaXNOb25lKCkgfHwgIWZyYWdtZW50
KQogICAgICAgICByZXR1cm47Ci0gICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9yKCkucmVw
bGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudChjb3JlKGZyYWdtZW50KSwgc2VsZWN0UmVwbGFjZW1l
bnQsIHNtYXJ0UmVwbGFjZSwgbWF0Y2hTdHlsZSk7CisgICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+
ZWRpdG9yKCkucmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCgqY29yZShmcmFnbWVudCksIHNl
bGVjdFJlcGxhY2VtZW50LCBzbWFydFJlcGxhY2UsIG1hdGNoU3R5bGUpOwogfQogCiAjaWYgUExB
VEZPUk0oSU9TKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308725</attachid>
            <date>2017-05-01 09:51:41 -0700</date>
            <delta_ts>2017-05-01 11:08:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171490-20170501095140.patch</filename>
            <type>text/plain</type>
            <size>127058</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2MDAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjY4MmQwNTQ2ZTgwNDMz
ZDViZDM4NzgxNTQ2NzQ1OTk4ZGRmMjI1OS4uMGEzYTkxYzRkYWY1NzQ2ZjYzM2FhMTcxZDQ0YWFk
MTdmZThmYTM0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDEzMiBAQAogMjAxNy0wNC0zMCAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCisgICAgICAgIFJlbW92ZSBzb21lIHVzYWdl
IG9mIFBhc3NSZWZQdHIgaW4gZWRpdGluZyBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzE0OTAKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJp
biBBZGxlci4KKworICAgICAgICBSZW1vdmUgc29tZSB1c2FnZSBvZiBQYXNzUmVmUHRyIGluIGVk
aXRpbmcgY29kZS4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJzSW5S
YW5nZSk6CisgICAgICAgIChEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Omhhc01hcmtlcnMpOgor
ICAgICAgICAoRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjbGVhckRlc2NyaXB0aW9uT25NYXJr
ZXJzSW50ZXJzZWN0aW5nUmFuZ2UpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudE1hcmtlckNvbnRy
b2xsZXIuaDoKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aXNTcGVsbGlu
Z01hcmtlckFsbG93ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6c2hvdyk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
OjphcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjpoYW5kbGVBbHRlcm5hdGl2ZVRleHRVSVJlc3VsdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZWNvcmRBdXRvY29y
cmVjdGlvblJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI6Om1hcmtSZXZlcnNlZCk6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjptYXJrQ29ycmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjpyZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29y
cmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpw
cm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5RGljdGF0aW9uQWx0ZXJuYXRpdmUp
OgorICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6VU5MRVNTX0VOQUJMRUQpOgor
ICAgICAgICAqIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlRm9udEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU3R5bGVTcGFu
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6QXBwbHlTdHls
ZUNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6Y29weVN0eWxlT3JDcmVhdGVFbXB0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlSZWxhdGl2ZUZvbnRTdHls
ZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxp
bmVTdHlsZVRvTm9kZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5k
OjpyZW1vdmVDb25mbGljdGluZ0lubGluZVN0eWxlRnJvbVJ1bik6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6aGlnaGVzdEFuY2VzdG9yV2l0aENvbmZs
aWN0aW5nSW5saW5lU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6
OmFwcGx5SW5saW5lU3R5bGVUb1B1c2hEb3duKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5
bGVDb21tYW5kOjpwdXNoRG93bklubGluZVN0eWxlQXJvdW5kTm9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnNob3VsZFNwbGl0VGV4dEVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnN1cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmFkZElubGluZVN0eWxl
SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnBvc2l0aW9u
VG9Db21wdXRlSW5saW5lU3R5bGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHls
ZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVDaGFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcvQXBw
bHlTdHlsZUNvbW1hbmQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnNob3VsZFJlbW92
ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQpOgorICAgICAgICAqIGVkaXRpbmcvQ29tcG9zaXRlRWRp
dENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmFw
cGx5Q29tbWFuZFRvQ29tcG9zaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRD
b21tYW5kOjphcHBseVN0eWxlZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRl
RWRpdENvbW1hbmQ6OnJlbW92ZVN0eWxlZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29t
cG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VFbGVtZW50V2l0aFNwYW5QcmVzZXJ2aW5nQ2hpbGRy
ZW5BbmRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5k
OjppbnB1dFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJl
cGxhY2VUZXh0SW5Ob2RlUHJlc2VydmluZ01hcmtlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29t
cG9zaXRlRWRpdENvbW1hbmQ6OnB1c2hBbmNob3JFbGVtZW50RG93bik6CisgICAgICAgICogZWRp
dGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oOgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21t
YW5kOjpvcmlnaW5hbFN0cmluZ0ZvckF1dG9jb3JyZWN0aW9uQXRCZWdpbm5pbmdPZlNlbGVjdGlv
bik6CisgICAgICAgICogZWRpdGluZy9EaWN0YXRpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRpY3RhdGlvbkNvbW1hbmQ6Omluc2VydFRleHRSdW5XaXRob3V0TmV3bGluZXMpOgor
ICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNv
cHlFZGl0aW5nUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJvcGVydGllc0Zy
b21Db21wdXRlZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmV4dHJhY3RQcm9wZXJ0eVZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBdHRyaWJ1dGVFcXVpdmFsZW50OjphdHRyaWJ1dGVW
YWx1ZUFzQ1NTVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvbnRTaXplRXF1aXZhbGVu
dDo6YXR0cmlidXRlVmFsdWVBc0NTU1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdT
dHlsZTo6c2V0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpjb3B5KToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6ZXh0cmFjdEFuZFJlbW92ZUJsb2NrUHJv
cGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OmV4dHJhY3RBbmRSZW1v
dmVUZXh0RGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6bWVyZ2VJ
bmxpbmVTdHlsZU9mRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpleHRyYWN0RWRpdGluZ1By
b3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0
aW9uU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UHJvcGVydGllc05vdEluKToKKyAgICAg
ICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5oOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aGFuZGxlVGV4dEV2ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6Omluc2VydE9yZGVyZWRMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6aW5zZXJ0VW5vcmRlcmVkTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6Y29ycmVjdFNwZWxsY2hlY2tpbmdQcmVzZXJ2aW5nVGV4dENoZWNraW5nUGFyYWdyYXBo
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpjaGFuZ2VCYWNrVG9SZXBsYWNlZFN0cmluZyk6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cmFuZ2VGb3JQb2ludCk6CisgICAgICAgICog
ZWRpdGluZy9FZGl0b3IuaDoKKyAgICAgICAgKiBlZGl0aW5nL01vZGlmeVNlbGVjdGlvbkxpc3RM
ZXZlbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENv
bW1hbmQ6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
Y3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2
ZWxPcmRlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVs
Q29tbWFuZDo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxVbm9yZGVyZWQpOgorICAgICAgICAq
IGVkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmg6CisgICAgICAgICogZWRpdGluZy9T
cGVsbENoZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2VyOjpyZXF1ZXN0
Q2hlY2tpbmdGb3IpOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2VyOjpkaWRDaGVja1N1
Y2NlZWQpOgorICAgICAgICAqIGVkaXRpbmcvU3BlbGxDaGVja2VyLmg6CisgICAgICAgIChXZWJD
b3JlOjpTcGVsbENoZWNrUmVxdWVzdDo6Y2hlY2tpbmdSYW5nZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTcGVsbENoZWNrUmVxdWVzdDo6cGFyYWdyYXBoUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
U3BlbGxDaGVja1JlcXVlc3Q6OnJvb3RFZGl0YWJsZUVsZW1lbnQpOgorICAgICAgICAqIGVkaXRp
bmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGVs
bGluZ0NvcnJlY3Rpb25Db21tYW5kOjpTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OndpbGxBcHBseUNvbW1hbmQp
OgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6
CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjp0YXJnZXRSYW5n
ZXMpOgorICAgICAgICAqIGVkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oOgorICAg
ICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKToKKyAgICAg
ICAgKiBlZGl0aW5nL1N1cnJvdW5kaW5nVGV4dC5oOgorICAgICAgICAqIGVkaXRpbmcvVGV4dENo
ZWNraW5nSGVscGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFw
aDo6ZXhwYW5kUmFuZ2VUb05leHRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5n
UGFyYWdyYXBoOjpyYW5nZUxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdQ
YXJhZ3JhcGg6OnBhcmFncmFwaFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2lu
Z1BhcmFncmFwaDo6c3VicmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nUGFy
YWdyYXBoOjpvZmZzZXRUbyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdQYXJhZ3Jh
cGg6Om9mZnNldEFzUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nUGFyYWdy
YXBoOjp0ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6Y2hl
Y2tpbmdTdGFydCk6CisgICAgICAgICogZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuaDoKKyAg
ICAgICAgKiBlZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHlw
aW5nQ29tbWFuZDo6aW5zZXJ0VGV4dFJ1bldpdGhvdXROZXdsaW5lcyk6CisgICAgICAgICogZWRp
dGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tOgorICAgICAgICAoSFRNTENvbnZlcnRlckNhY2hl
czo6Y29tcHV0ZWRTdHlsZVByb3BlcnR5Rm9yRWxlbWVudCk6CisgICAgICAgIChIVE1MQ29udmVy
dGVyQ2FjaGVzOjppbmxpbmVTdHlsZVByb3BlcnR5Rm9yRWxlbWVudCk6CisgICAgICAgICogcGFn
ZS9pb3MvRnJhbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6aW50ZXJwcmV0YXRp
b25zRm9yQ3VycmVudFJvb3QpOgorCisyMDE3LTA0LTMwICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CisKICAgICAgICAgRHJvcCBzdXBwb3J0IGZvciBsZWdhY3kgQ2xpZW50UmVjdCAv
IENsaWVudFJlY3RMaXN0CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzE0MTgKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9pb3MvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9pb3MvQ2hhbmdlTG9nCmluZGV4IGVmZmE3MDJkODM2ODUyNWIzNDkx
MWI4OGRjZjMxZjIyZTMzZDcxZGMuLjA3NTQzNzZiMjFiMWIyNzQ0Mjg3MjAyMDIxMzBiOTY4ZWYw
YTdmYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvaW9zL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L2lvcy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxNy0wNC0zMCAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBzb21lIHVzYWdl
IG9mIFBhc3NSZWZQdHIgaW4gZWRpdGluZyBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzE0OTAKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJp
biBBZGxlci4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tOgorICAg
ICAgICAoLVtXZWJGcmFtZSBwcmV2aW91c1VucGVydHVyYmVkRGljdGF0aW9uUmVzdWx0Qm91bmRh
cnlGcm9tUG9zaXRpb246XSk6CisgICAgICAgICgtW1dlYkZyYW1lIG5leHRVbnBlcnR1cmJlZERp
Y3RhdGlvblJlc3VsdEJvdW5kYXJ5RnJvbVBvc2l0aW9uOl0pOgorCiAyMDE3LTA0LTE0ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFtXSzJdIFN1cHBv
cnQgSWNvbiBjcmVhdGlvbiBmcm9tIGZpbGUgVVJMcyBvbiBpT1MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRl
eCBmNjcwZjAwNzgwMWU4ZGE1NjM2MWNhYjUyYWQzOGFmYzgzNWE4MGU0Li5mZWYxZGQ4ZTRiYTZj
NDU0MDViOWQ0MWNkZjU1MDExMDA3ZjUzM2E0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21h
Yy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTQgQEAKKzIwMTctMDQtMzAgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAg
ICAgICBSZW1vdmUgc29tZSB1c2FnZSBvZiBQYXNzUmVmUHRyIGluIGVkaXRpbmcgY29kZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcxNDkwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZy
YW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBkaWN0YXRpb25SZXN1bHRNZXRhZGF0YUZvclJh
bmdlOl0pOgorICAgICAgICAoLVtXZWJGcmFtZSBfcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVu
dDpzZWxlY3RSZXBsYWNlbWVudDpzbWFydFJlcGxhY2U6bWF0Y2hTdHlsZTpdKToKKwogMjAxNy0w
NC0zMCAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFtDb2NvYV0g
UmVwbGFjZXMgdXNlcyBvZiBbZ2V04oCmKCkgYWxsb2NdIHdpdGggYWxsb2PigKZJbnN0YW5jZSgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCmlu
ZGV4IGNjZGRjZjU4YzM5MmJlNDU1YjBkYmYyNTIyNTBlYTIxZTY4OGQwNzcuLmU5ZDRhYTNhNWQ4
NjE4YjZmMzUwNjU1ZDU3MjFlOGE0ODk4YzFlMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCkBAIC01MTcsMjQgKzUxNywyNCBAQCBWZWN0
b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFy
a2Vyc0ZvcihOb2RlKiBub2RlLAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVZlY3RvcjxSZW5k
ZXJlZERvY3VtZW50TWFya2VyKj4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJzSW5S
YW5nZShSYW5nZSogcmFuZ2UsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyBtYXJrZXJUeXBl
cykKK1ZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjptYXJrZXJzSW5SYW5nZShSYW5nZSYgcmFuZ2UsIERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlcyBtYXJrZXJUeXBlcykKIHsKICAgICBpZiAoIXBvc3NpYmx5SGFzTWFya2VycyhtYXJrZXJU
eXBlcykpCiAgICAgICAgIHJldHVybiBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+KCk7
CiAKICAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IGZvdW5kTWFya2VyczsKIAot
ICAgIE5vZGUmIHN0YXJ0Q29udGFpbmVyID0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCk7Ci0gICAg
Tm9kZSYgZW5kQ29udGFpbmVyID0gcmFuZ2UtPmVuZENvbnRhaW5lcigpOworICAgIE5vZGUmIHN0
YXJ0Q29udGFpbmVyID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKTsKKyAgICBOb2RlJiBlbmRDb250
YWluZXIgPSByYW5nZS5lbmRDb250YWluZXIoKTsKIAotICAgIE5vZGUqIHBhc3RMYXN0Tm9kZSA9
IHJhbmdlLT5wYXN0TGFzdE5vZGUoKTsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5nZS0+Zmly
c3ROb2RlKCk7IG5vZGUgIT0gcGFzdExhc3ROb2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4
dCgqbm9kZSkpIHsKKyAgICBOb2RlKiBwYXN0TGFzdE5vZGUgPSByYW5nZS5wYXN0TGFzdE5vZGUo
KTsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5nZS5maXJzdE5vZGUoKTsgbm9kZSAhPSBwYXN0
TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewogICAgICAgICBm
b3IgKGF1dG8qIG1hcmtlciA6IG1hcmtlcnNGb3Iobm9kZSkpIHsKICAgICAgICAgICAgIGlmICgh
bWFya2VyVHlwZXMuY29udGFpbnMobWFya2VyLT50eXBlKCkpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgaWYgKG5vZGUgPT0gJnN0YXJ0Q29udGFpbmVyICYmIG1hcmtl
ci0+ZW5kT2Zmc2V0KCkgPD0gcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpCisgICAgICAgICAgICBpZiAo
bm9kZSA9PSAmc3RhcnRDb250YWluZXIgJiYgbWFya2VyLT5lbmRPZmZzZXQoKSA8PSByYW5nZS5z
dGFydE9mZnNldCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYg
KG5vZGUgPT0gJmVuZENvbnRhaW5lciAmJiBtYXJrZXItPnN0YXJ0T2Zmc2V0KCkgPj0gcmFuZ2Ut
PmVuZE9mZnNldCgpKQorICAgICAgICAgICAgaWYgKG5vZGUgPT0gJmVuZENvbnRhaW5lciAmJiBt
YXJrZXItPnN0YXJ0T2Zmc2V0KCkgPj0gcmFuZ2UuZW5kT2Zmc2V0KCkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICBmb3VuZE1hcmtlcnMuYXBwZW5kKG1hcmtlcik7CiAg
ICAgICAgIH0KQEAgLTczMiwyMyArNzMyLDIzIEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjpzZXRNYXJrZXJzQWN0aXZlKE5vZGUqIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0CiAg
ICAgICAgIG5vZGUtPnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKIH0KIAotYm9vbCBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6Omhhc01hcmtlcnMoUmFuZ2UqIHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6
TWFya2VyVHlwZXMgbWFya2VyVHlwZXMpCitib29sIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
aGFzTWFya2VycyhSYW5nZSYgcmFuZ2UsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyBtYXJr
ZXJUeXBlcykKIHsKICAgICBpZiAoIXBvc3NpYmx5SGFzTWFya2VycyhtYXJrZXJUeXBlcykpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBBU1NFUlQoIW1fbWFya2Vycy5pc0VtcHR5KCkpOwog
Ci0gICAgTm9kZSYgc3RhcnRDb250YWluZXIgPSByYW5nZS0+c3RhcnRDb250YWluZXIoKTsKLSAg
ICBOb2RlJiBlbmRDb250YWluZXIgPSByYW5nZS0+ZW5kQ29udGFpbmVyKCk7CisgICAgTm9kZSYg
c3RhcnRDb250YWluZXIgPSByYW5nZS5zdGFydENvbnRhaW5lcigpOworICAgIE5vZGUmIGVuZENv
bnRhaW5lciA9IHJhbmdlLmVuZENvbnRhaW5lcigpOwogCi0gICAgTm9kZSogcGFzdExhc3ROb2Rl
ID0gcmFuZ2UtPnBhc3RMYXN0Tm9kZSgpOwotICAgIGZvciAoTm9kZSogbm9kZSA9IHJhbmdlLT5m
aXJzdE5vZGUoKTsgbm9kZSAhPSBwYXN0TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpu
ZXh0KCpub2RlKSkgeworICAgIE5vZGUqIHBhc3RMYXN0Tm9kZSA9IHJhbmdlLnBhc3RMYXN0Tm9k
ZSgpOworICAgIGZvciAoTm9kZSogbm9kZSA9IHJhbmdlLmZpcnN0Tm9kZSgpOyBub2RlICE9IHBh
c3RMYXN0Tm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7CiAgICAgICAg
IGZvciAoYXV0byogbWFya2VyIDogbWFya2Vyc0Zvcihub2RlKSkgewogICAgICAgICAgICAgaWYg
KCFtYXJrZXJUeXBlcy5jb250YWlucyhtYXJrZXItPnR5cGUoKSkpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBpZiAobm9kZSA9PSAmc3RhcnRDb250YWluZXIgJiYgbWFy
a2VyLT5lbmRPZmZzZXQoKSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmFuZ2UtPnN0YXJ0T2Zm
c2V0KCkpKQorICAgICAgICAgICAgaWYgKG5vZGUgPT0gJnN0YXJ0Q29udGFpbmVyICYmIG1hcmtl
ci0+ZW5kT2Zmc2V0KCkgPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJhbmdlLnN0YXJ0T2Zmc2V0
KCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKG5vZGUgPT0g
JmVuZENvbnRhaW5lciAmJiBtYXJrZXItPnN0YXJ0T2Zmc2V0KCkgPj0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHJhbmdlLT5lbmRPZmZzZXQoKSkpCisgICAgICAgICAgICBpZiAobm9kZSA9PSAmZW5k
Q29udGFpbmVyICYmIG1hcmtlci0+c3RhcnRPZmZzZXQoKSA+PSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4ocmFuZ2UuZW5kT2Zmc2V0KCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTc1NiwxOSArNzU2LDE5IEBAIGJvb2wg
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpoYXNNYXJrZXJzKFJhbmdlKiByYW5nZSwgRG9jdW1l
bnRNYXJrZXI6Ok1hcmtlclR5CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIERvY3VtZW50
TWFya2VyQ29udHJvbGxlcjo6Y2xlYXJEZXNjcmlwdGlvbk9uTWFya2Vyc0ludGVyc2VjdGluZ1Jh
bmdlKFJhbmdlKiByYW5nZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGVzIG1hcmtlclR5cGVz
KQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmNsZWFyRGVzY3JpcHRpb25Pbk1hcmtl
cnNJbnRlcnNlY3RpbmdSYW5nZShSYW5nZSYgcmFuZ2UsIERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlcyBtYXJrZXJUeXBlcykKIHsKICAgICBpZiAoIXBvc3NpYmx5SGFzTWFya2VycyhtYXJrZXJU
eXBlcykpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoIW1fbWFya2Vycy5pc0VtcHR5KCkp
OwogCi0gICAgTm9kZSYgc3RhcnRDb250YWluZXIgPSByYW5nZS0+c3RhcnRDb250YWluZXIoKTsK
LSAgICBOb2RlJiBlbmRDb250YWluZXIgPSByYW5nZS0+ZW5kQ29udGFpbmVyKCk7CisgICAgTm9k
ZSYgc3RhcnRDb250YWluZXIgPSByYW5nZS5zdGFydENvbnRhaW5lcigpOworICAgIE5vZGUmIGVu
ZENvbnRhaW5lciA9IHJhbmdlLmVuZENvbnRhaW5lcigpOwogCi0gICAgTm9kZSogcGFzdExhc3RO
b2RlID0gcmFuZ2UtPnBhc3RMYXN0Tm9kZSgpOwotICAgIGZvciAoTm9kZSogbm9kZSA9IHJhbmdl
LT5maXJzdE5vZGUoKTsgbm9kZSAhPSBwYXN0TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2Fs
OjpuZXh0KCpub2RlKSkgewotICAgICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IG5vZGUgPT0g
JnN0YXJ0Q29udGFpbmVyID8gcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgOiAwOwotICAgICAgICB1bnNp
Z25lZCBlbmRPZmZzZXQgPSBub2RlID09ICZlbmRDb250YWluZXIgPyBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4ocmFuZ2UtPmVuZE9mZnNldCgpKSA6IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+
OjptYXgoKTsKKyAgICBOb2RlKiBwYXN0TGFzdE5vZGUgPSByYW5nZS5wYXN0TGFzdE5vZGUoKTsK
KyAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5nZS5maXJzdE5vZGUoKTsgbm9kZSAhPSBwYXN0TGFz
dE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgeworICAgICAgICB1bnNp
Z25lZCBzdGFydE9mZnNldCA9IG5vZGUgPT0gJnN0YXJ0Q29udGFpbmVyID8gcmFuZ2Uuc3RhcnRP
ZmZzZXQoKSA6IDA7CisgICAgICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9IG5vZGUgPT0gJmVuZENv
bnRhaW5lciA/IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyYW5nZS5lbmRPZmZzZXQoKSkgOiBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CiAgICAgICAgIE1hcmtlckxpc3QqIGxp
c3QgPSBtX21hcmtlcnMuZ2V0KG5vZGUpOwogICAgICAgICBpZiAoIWxpc3QpCiAgICAgICAgICAg
ICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXIuaAppbmRleCAyYzJjZDM3N2EyOGJmOGNhZWU3MDVmZGIzMjA0NzY4NWQ2N2IxOTEyLi4wZjVj
MjM2NDY0MTdhMjQ5MzNmM2FhYTAyYjNjNDJiYjk4YzFhYTZjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5oCkBAIC02Niw3ICs2Niw3IEBAIHB1Ymxp
YzoKICAgICAgICAgQVNTRVJUKG1fbWFya2Vycy5pc0VtcHR5KCkgPT0gIW1fcG9zc2libHlFeGlz
dGluZ01hcmtlclR5cGVzLmludGVyc2VjdHMoRG9jdW1lbnRNYXJrZXI6OkFsbE1hcmtlcnMoKSkp
OwogICAgICAgICByZXR1cm4gIW1fbWFya2Vycy5pc0VtcHR5KCk7CiAgICAgfQotICAgIGJvb2wg
aGFzTWFya2VycyhSYW5nZSosIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyA9IERvY3VtZW50
TWFya2VyOjpBbGxNYXJrZXJzKCkpOworICAgIGJvb2wgaGFzTWFya2VycyhSYW5nZSYsIERvY3Vt
ZW50TWFya2VyOjpNYXJrZXJUeXBlcyA9IERvY3VtZW50TWFya2VyOjpBbGxNYXJrZXJzKCkpOwog
CiAgICAgLy8gV2hlbiBhIG1hcmtlciBwYXJ0aWFsbHkgb3ZlcmxhcHMgd2l0aCByYW5nZSwgaWYg
cmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJzIGlzIHRydWUsIHdlIGNvbXBsZXRlbHkK
ICAgICAvLyByZW1vdmUgdGhlIG1hcmtlci4gSWYgdGhlIGFyZ3VtZW50IGlzIGZhbHNlLCB3ZSB3
aWxsIGFkanVzdCB0aGUgc3BhbiBvZiB0aGUgbWFya2VyIHNvIHRoYXQgaXQgcmV0YWlucwpAQCAt
ODMsOCArODMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRNYXJrZXJzQWN0aXZlKE5vZGUqLCB1
bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBib29sKTsKIAogICAgIFdF
QkNPUkVfRVhQT1JUIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2Vyc0ZvcihO
b2RlKiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGVzID0gRG9jdW1lbnRNYXJrZXI6OkFsbE1h
cmtlcnMoKSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJr
ZXIqPiBtYXJrZXJzSW5SYW5nZShSYW5nZSosIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyk7
Ci0gICAgdm9pZCBjbGVhckRlc2NyaXB0aW9uT25NYXJrZXJzSW50ZXJzZWN0aW5nUmFuZ2UoUmFu
Z2UqLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXMpOworICAgIFdFQkNPUkVfRVhQT1JUIFZl
Y3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2Vyc0luUmFuZ2UoUmFuZ2UmLCBEb2N1
bWVudE1hcmtlcjo6TWFya2VyVHlwZXMpOworICAgIHZvaWQgY2xlYXJEZXNjcmlwdGlvbk9uTWFy
a2Vyc0ludGVyc2VjdGluZ1JhbmdlKFJhbmdlJiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGVz
KTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlUmVjdHNGb3JJbnZhbGlkYXRlZE1h
cmtlcnNPZlR5cGUoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAppbmRleCAw
NWFmYWU0Yjk5Yzk3YzhkMmVmODRmMDJiNjJiZGI1MmYzNzhjYWQ1Li5lMmQ3ZmJmNmMyYzg5MmFm
MjUwYmQyMWY4ZjYzYzhiYmNmYTFiMWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKQEAgLTE5MCwxOCArMTkwLDE4IEBA
IGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aGFzUGVuZGluZ0NvcnJlY3Rpb24oKSBj
b25zdAogICAgIHJldHVybiBtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRp
dmU7CiB9CiAKLWJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aXNTcGVsbGluZ01hcmtl
ckFsbG93ZWQoUGFzc1JlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5nZSkgY29uc3QKK2Jvb2wg
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aXNTcGVsbGluZ01hcmtlckFsbG93ZWQoUmFuZ2Um
IG1pc3NwZWxsaW5nUmFuZ2UpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFtX2ZyYW1lLmRvY3VtZW50
KCktPm1hcmtlcnMoKS5oYXNNYXJrZXJzKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERvY3VtZW50
TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKKyAgICByZXR1cm4gIW1fZnJhbWUuZG9j
dW1lbnQoKS0+bWFya2VycygpLmhhc01hcmtlcnMobWlzc3BlbGxpbmdSYW5nZSwgRG9jdW1lbnRN
YXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwogfQogCi12b2lkIEFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OnNob3coUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2VUb1JlcGxhY2UsIGNvbnN0
IFN0cmluZyYgcmVwbGFjZW1lbnQpCit2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnNo
b3coUmFuZ2UmIHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50KQogewot
ICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJvb3RWaWV3UmVjdEZvclJhbmdlKHJhbmdlVG9S
ZXBsYWNlLmdldCgpKTsKKyAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByb290Vmlld1JlY3RG
b3JSYW5nZSgmcmFuZ2VUb1JlcGxhY2UpOwogICAgIGlmIChib3VuZGluZ0JveC5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKLSAgICBtX2FsdGVybmF0aXZlVGV4dEluZm8ub3JpZ2luYWxUZXh0
ID0gcGxhaW5UZXh0KHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKLSAgICBtX2FsdGVybmF0aXZlVGV4
dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSByYW5nZVRvUmVwbGFjZTsKKyAgICBtX2FsdGVy
bmF0aXZlVGV4dEluZm8ub3JpZ2luYWxUZXh0ID0gcGxhaW5UZXh0KCZyYW5nZVRvUmVwbGFjZSk7
CisgICAgbV9hbHRlcm5hdGl2ZVRleHRJbmZvLnJhbmdlV2l0aEFsdGVybmF0aXZlID0gJnJhbmdl
VG9SZXBsYWNlOwogICAgIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby5kZXRhaWxzID0gQXV0b2NvcnJl
Y3Rpb25BbHRlcm5hdGl2ZURldGFpbHM6OmNyZWF0ZShyZXBsYWNlbWVudCk7CiAgICAgbV9hbHRl
cm5hdGl2ZVRleHRJbmZvLmlzQWN0aXZlID0gdHJ1ZTsKICAgICBpZiAoQWx0ZXJuYXRpdmVUZXh0
Q2xpZW50KiBjbGllbnQgPSBhbHRlcm5hdGl2ZVRleHRDbGllbnQoKSkKQEAgLTIzNywxNSArMjM3
LDEyIEBAIFN0cmluZyBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpkaXNtaXNzU29vbihSZWFz
b25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQog
Ci12b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9S
YW5nZShjb25zdCBSYW5nZSogcmFuZ2UsIGNvbnN0IFN0cmluZyYgYWx0ZXJuYXRpdmUsIEFsdGVy
bmF0aXZlVGV4dFR5cGUgYWx0ZXJuYXRpdmVUeXBlLCBjb25zdCBWZWN0b3I8RG9jdW1lbnRNYXJr
ZXI6Ok1hcmtlclR5cGU+JiBtYXJrZXJUeXBlc1RvQWRkKQordm9pZCBBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjphcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdl
LCBjb25zdCBTdHJpbmcmIGFsdGVybmF0aXZlLCBBbHRlcm5hdGl2ZVRleHRUeXBlIGFsdGVybmF0
aXZlVHlwZSwgY29uc3QgVmVjdG9yPERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiYgbWFya2Vy
VHlwZXNUb0FkZCkKIHsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm47CisgICAgUmVm
UHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uID0gcmFuZ2UuY2xv
bmVSYW5nZSgpOwogCi0gICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdD
b3JyZWN0aW9uID0gcmFuZ2UtPmNsb25lUmFuZ2UoKTsKLQotICAgIHNldFN0YXJ0KHBhcmFncmFw
aFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIHN0YXJ0T2ZQYXJhZ3JhcGgocmFuZ2Ut
PnN0YXJ0UG9zaXRpb24oKSkpOwotICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdD
b3JyZWN0aW9uLmdldCgpLCBlbmRPZlBhcmFncmFwaChyYW5nZS0+ZW5kUG9zaXRpb24oKSkpOwor
ICAgIHNldFN0YXJ0KHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIHN0
YXJ0T2ZQYXJhZ3JhcGgocmFuZ2Uuc3RhcnRQb3NpdGlvbigpKSk7CisgICAgc2V0RW5kKHBhcmFn
cmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCksIGVuZE9mUGFyYWdyYXBoKHJhbmdl
LmVuZFBvc2l0aW9uKCkpKTsKIAogICAgIC8vIEFmdGVyIHdlIHJlcGxhY2UgdGhlIHdvcmQgYXQg
cmFuZ2UgcmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIHdlIG5lZWQgdG8gYWRkIG1hcmtlcnMgdG8gdGhh
dCByYW5nZS4KICAgICAvLyBIb3dldmVyLCBvbmNlIHRoZSByZXBsYWNlbWVudCB0b29rIHBsYWNl
LCB0aGUgdmFsdWUgb2YgcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgaXMgbm90IHZhbGlkIGFueW1vcmUu
CkBAIC0yNTUsNyArMjUyLDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBs
eUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UoY29uc3QgUmFuZ2UqIHJhbmdlLAogICAgIC8vIHdoaWNo
IHNwYW5zIGZyb20gdGhlIHN0YXJ0IG9mIHBhcmFncmFwaCB0byB0aGUgc3RhcnQgcG9zaXRpb24g
b2YgcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuCiAgICAgUmVmUHRyPFJhbmdlPiBjb3JyZWN0aW9uU3Rh
cnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdl
Q29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKSwgcGFyYWdy
YXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbi0+c3RhcnRQb3NpdGlvbigpLCBwYXJhZ3JhcGhS
YW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLT5zdGFydFBvc2l0aW9uKCkpOwogCi0gICAgUG9zaXRp
b24gc3RhcnRQb3NpdGlvbk9mUmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSByYW5nZS0+c3RhcnRQb3Np
dGlvbigpOworICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRpb25PZlJhbmdlV2l0aEFsdGVybmF0aXZl
ID0gcmFuZ2Uuc3RhcnRQb3NpdGlvbigpOwogICAgIGlmICghc3RhcnRQb3NpdGlvbk9mUmFuZ2VX
aXRoQWx0ZXJuYXRpdmUuY29udGFpbmVyTm9kZSgpKQogICAgICAgICByZXR1cm47CiAgICAgYXV0
byBzZXRFbmRSZXN1bHQgPSBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaEFzUmFuZ2Ut
PnNldEVuZCgqc3RhcnRQb3NpdGlvbk9mUmFuZ2VXaXRoQWx0ZXJuYXRpdmUuY29udGFpbmVyTm9k
ZSgpLCBzdGFydFBvc2l0aW9uT2ZSYW5nZVdpdGhBbHRlcm5hdGl2ZS5jb21wdXRlT2Zmc2V0SW5D
b250YWluZXJOb2RlKCkpOwpAQCAtMjY2LDExICsyNjMsMTEgQEAgdm9pZCBBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyOjphcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UoY29uc3QgUmFuZ2UqIHJh
bmdlLAogICAgIGludCBjb3JyZWN0aW9uU3RhcnRPZmZzZXRJblBhcmFncmFwaCA9IFRleHRJdGVy
YXRvcjo6cmFuZ2VMZW5ndGgoY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGhBc1Jhbmdl
LmdldCgpKTsKIAogICAgIC8vIENsb25lIHRoZSByYW5nZSwgc2luY2UgdGhlIGNhbGxlciBvZiB0
aGlzIG1ldGhvZCBtYXkgd2FudCB0byBrZWVwIHRoZSBvcmlnaW5hbCByYW5nZSBhcm91bmQuCi0g
ICAgUmVmPFJhbmdlPiByYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IHJhbmdlLT5jbG9uZVJhbmdlKCk7
CisgICAgYXV0byByYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IHJhbmdlLmNsb25lUmFuZ2UoKTsKIAog
ICAgIENvbnRhaW5lck5vZGUmIHJvb3ROb2RlID0gcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29y
cmVjdGlvbi5nZXQoKS0+c3RhcnRDb250YWluZXIoKS50cmVlU2NvcGUoKS5yb290Tm9kZSgpOwog
ICAgIGludCBwYXJhZ3JhcGhTdGFydEluZGV4ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChS
YW5nZTo6Y3JlYXRlKHJvb3ROb2RlLmRvY3VtZW50KCksICZyb290Tm9kZSwgMCwgJnBhcmFncmFw
aFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0Q29udGFpbmVyKCksIHBhcmFncmFwaFJh
bmdlQ29udGFpbmluZ0NvcnJlY3Rpb24tPnN0YXJ0T2Zmc2V0KCkpLnB0cigpKTsKLSAgICBhcHBs
eUNvbW1hbmQoU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKHJhbmdlV2l0aEFsdGVy
bmF0aXZlLnB0cigpLCBhbHRlcm5hdGl2ZSkpOworICAgIGFwcGx5Q29tbWFuZChTcGVsbGluZ0Nv
cnJlY3Rpb25Db21tYW5kOjpjcmVhdGUocmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIGFsdGVybmF0aXZl
KSk7CiAgICAgLy8gUmVjYWxjdWxhdGUgcHJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9u
LCBzaW5jZSBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kIG1vZGlmaWVkIHRoZSBET00sIHN1Y2gg
dGhhdCB0aGUgb3JpZ2luYWwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiBpcyBu
byBsb25nZXIgdmFsaWQuIFJhZGFyOiAxMDMwNTMxNSBCdWd6aWxsYTogODk1MjYKICAgICBwYXJh
Z3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21M
b2NhdGlvbkFuZExlbmd0aCgmcm9vdE5vZGUsIHBhcmFncmFwaFN0YXJ0SW5kZXgsIGNvcnJlY3Rp
b25TdGFydE9mZnNldEluUGFyYWdyYXBoICsgYWx0ZXJuYXRpdmUubGVuZ3RoKCkpOwogICAgIGlm
ICghcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbikKQEAgLTM1NSw3ICszNTIsNyBA
QCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQoKQogICAgIGNhc2Ug
QWx0ZXJuYXRpdmVUZXh0VHlwZVNwZWxsaW5nU3VnZ2VzdGlvbnM6IHsKICAgICAgICAgaWYgKCFt
X2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJuYXRpdmUgfHwgcGxhaW5UZXh0KG1f
YWx0ZXJuYXRpdmVUZXh0SW5mby5yYW5nZVdpdGhBbHRlcm5hdGl2ZS5nZXQoKSkgIT0gbV9hbHRl
cm5hdGl2ZVRleHRJbmZvLm9yaWdpbmFsVGV4dCkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBTdHJpbmcgcGFyYWdyYXBoVGV4dCA9IHBsYWluVGV4dChUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgo
bV9hbHRlcm5hdGl2ZVRleHRJbmZvLnJhbmdlV2l0aEFsdGVybmF0aXZlKS5wYXJhZ3JhcGhSYW5n
ZSgpLmdldCgpKTsKKyAgICAgICAgU3RyaW5nIHBhcmFncmFwaFRleHQgPSBwbGFpblRleHQoJlRl
eHRDaGVja2luZ1BhcmFncmFwaChtX2FsdGVybmF0aXZlVGV4dEluZm8ucmFuZ2VXaXRoQWx0ZXJu
YXRpdmUpLnBhcmFncmFwaFJhbmdlKCkpOwogICAgICAgICBWZWN0b3I8U3RyaW5nPiBzdWdnZXN0
aW9uczsKICAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQobV9hbHRlcm5h
dGl2ZVRleHRJbmZvLm9yaWdpbmFsVGV4dCwgcGFyYWdyYXBoVGV4dCwgbV9mcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKSwgc3VnZ2VzdGlvbnMpOwogICAgICAgICBpZiAoc3VnZ2VzdGlvbnMu
aXNFbXB0eSgpKSB7CkBAIC00MDcsMTggKzQwNCwxOCBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OmhhbmRsZUFsdGVybmF0aXZlVGV4dFVJUmVzdWx0KGNvbnN0IFN0cmluZyYgcmVz
dQogICAgIHN3aXRjaCAobV9hbHRlcm5hdGl2ZVRleHRJbmZvLnR5cGUpIHsKICAgICBjYXNlIEFs
dGVybmF0aXZlVGV4dFR5cGVDb3JyZWN0aW9uOgogICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCgp
KQotICAgICAgICAgICAgYXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKHJhbmdlV2l0aEFsdGVy
bmF0aXZlLCByZXN1bHQsIG1fYWx0ZXJuYXRpdmVUZXh0SW5mby50eXBlLCBtYXJrZXJUeXBlc0Zv
ckF1dG9jb3JyZWN0aW9uKCkpOworICAgICAgICAgICAgYXBwbHlBbHRlcm5hdGl2ZVRleHRUb1Jh
bmdlKCpyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgcmVzdWx0LCBtX2FsdGVybmF0aXZlVGV4dEluZm8u
dHlwZSwgbWFya2VyVHlwZXNGb3JBdXRvY29ycmVjdGlvbigpKTsKICAgICAgICAgZWxzZSBpZiAo
IW1faXNEaXNtaXNzZWRCeUVkaXRpbmcpCiAgICAgICAgICAgICByYW5nZVdpdGhBbHRlcm5hdGl2
ZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIocmFuZ2VX
aXRoQWx0ZXJuYXRpdmUsIERvY3VtZW50TWFya2VyOjpSZWplY3RlZENvcnJlY3Rpb24sIG1fYWx0
ZXJuYXRpdmVUZXh0SW5mby5vcmlnaW5hbFRleHQpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IEFsdGVybmF0aXZlVGV4dFR5cGVSZXZlcnNpb246CiAgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRU
eXBlU3BlbGxpbmdTdWdnZXN0aW9uczoKICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGgoKSkKLSAg
ICAgICAgICAgIGFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZShyYW5nZVdpdGhBbHRlcm5hdGl2
ZSwgcmVzdWx0LCBtX2FsdGVybmF0aXZlVGV4dEluZm8udHlwZSwgbWFya2VyVHlwZXNGb3JSZXBs
YWNlbWVudCgpKTsKKyAgICAgICAgICAgIGFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZSgqcmFu
Z2VXaXRoQWx0ZXJuYXRpdmUsIHJlc3VsdCwgbV9hbHRlcm5hdGl2ZVRleHRJbmZvLnR5cGUsIG1h
cmtlclR5cGVzRm9yUmVwbGFjZW1lbnQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWx0
ZXJuYXRpdmVUZXh0VHlwZURpY3RhdGlvbkFsdGVybmF0aXZlczoKICAgICAgICAgaWYgKHJlc3Vs
dC5sZW5ndGgoKSkKLSAgICAgICAgICAgIGFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZShyYW5n
ZVdpdGhBbHRlcm5hdGl2ZSwgcmVzdWx0LCBtX2FsdGVybmF0aXZlVGV4dEluZm8udHlwZSwgbWFy
a2VyVHlwZXNGb3JBcHBsaWVkRGljdGF0aW9uQWx0ZXJuYXRpdmUoKSk7CisgICAgICAgICAgICBh
cHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UoKnJhbmdlV2l0aEFsdGVybmF0aXZlLCByZXN1bHQs
IG1fYWx0ZXJuYXRpdmVUZXh0SW5mby50eXBlLCBtYXJrZXJUeXBlc0ZvckFwcGxpZWREaWN0YXRp
b25BbHRlcm5hdGl2ZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC01MTYsMzQgKzUx
MywzMiBAQCBUZXh0Q2hlY2tlckNsaWVudCogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGV4
dENoZWNrZXIoKQogICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lkIEFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25S
ZXNwb25zZSByZXNwb25zZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZywgUGFzc1JlZlB0
cjxSYW5nZT4gcmVwbGFjZW1lbnRSYW5nZSkKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlIHJl
c3BvbnNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBSYW5nZSogcmVwbGFjZW1lbnRS
YW5nZSkKIHsKICAgICBpZiAoYXV0byBjbGllbnQgPSBhbHRlcm5hdGl2ZVRleHRDbGllbnQoKSkK
LSAgICAgICAgY2xpZW50LT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKHJlc3BvbnNlLCBy
ZXBsYWNlZFN0cmluZywgcGxhaW5UZXh0KHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCkpKTsKKyAgICAg
ICAgY2xpZW50LT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKHJlc3BvbnNlLCByZXBsYWNl
ZFN0cmluZywgcGxhaW5UZXh0KHJlcGxhY2VtZW50UmFuZ2UpKTsKIH0KIAotdm9pZCBBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjptYXJrUmV2ZXJzZWQoUGFzc1JlZlB0cjxSYW5nZT4gY2hhbmdl
ZFJhbmdlKQordm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrUmV2ZXJzZWQoUmFu
Z2UmIGNoYW5nZWRSYW5nZSkKIHsKLSAgICBjaGFuZ2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCku
ZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2VycyhjaGFuZ2VkUmFuZ2UuZ2V0KCksIERv
Y3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkLCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJl
bW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKLSAgICBjaGFuZ2VkUmFuZ2UtPnN0YXJ0
Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKGNoYW5nZWRSYW5nZS5n
ZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOworICAgIGNoYW5n
ZWRSYW5nZS5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtl
cnMoJmNoYW5nZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQsIERvY3VtZW50
TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOworICAg
IGNoYW5nZWRSYW5nZS5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1h
cmtlcigmY2hhbmdlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlv
bik7CiB9CiAKLXZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya0NvcnJlY3Rpb24o
UGFzc1JlZlB0cjxSYW5nZT4gcmVwbGFjZWRSYW5nZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0
cmluZykKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya0NvcnJlY3Rpb24oUmFu
Z2UmIHJlcGxhY2VkUmFuZ2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcpCiB7Ci0gICAg
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyJiBtYXJrZXJzID0gcmVwbGFjZWRSYW5nZS0+c3RhcnRD
b250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKTsKKyAgICBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXImIG1hcmtlcnMgPSByZXBsYWNlZFJhbmdlLnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQo
KS5tYXJrZXJzKCk7CiAgICAgZm9yIChhdXRvJiBtYXJrZXJUeXBlIDogbWFya2VyVHlwZXNGb3JB
dXRvY29ycmVjdGlvbigpKSB7CiAgICAgICAgIGlmIChtYXJrZXJUeXBlID09IERvY3VtZW50TWFy
a2VyOjpSZXBsYWNlbWVudCB8fCBtYXJrZXJUeXBlID09IERvY3VtZW50TWFya2VyOjpBdXRvY29y
cmVjdGVkKQotICAgICAgICAgICAgbWFya2Vycy5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZS5nZXQo
KSwgbWFya2VyVHlwZSwgcmVwbGFjZWRTdHJpbmcpOworICAgICAgICAgICAgbWFya2Vycy5hZGRN
YXJrZXIoJnJlcGxhY2VkUmFuZ2UsIG1hcmtlclR5cGUsIHJlcGxhY2VkU3RyaW5nKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgbWFya2Vycy5hZGRNYXJrZXIocmVwbGFjZWRSYW5nZS5nZXQo
KSwgbWFya2VyVHlwZSk7CisgICAgICAgICAgICBtYXJrZXJzLmFkZE1hcmtlcigmcmVwbGFjZWRS
YW5nZSwgbWFya2VyVHlwZSk7CiAgICAgfQogfQogCi12b2lkIEFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI6OnJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKFJh
bmdlKiByYW5nZU9mQ29ycmVjdGlvbiwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0
cmluZyYgY29ycmVjdGlvbikKK3ZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVjb3Jk
U3BlbGxjaGVja2VyUmVzcG9uc2VGb3JNb2RpZmllZENvcnJlY3Rpb24oUmFuZ2UmIHJhbmdlT2ZD
b3JyZWN0aW9uLCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0
aW9uKQogewotICAgIGlmICghcmFuZ2VPZkNvcnJlY3Rpb24pCi0gICAgICAgIHJldHVybjsKLSAg
ICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXImIG1hcmtlcnMgPSByYW5nZU9mQ29ycmVjdGlvbi0+
c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKTsKKyAgICBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXImIG1hcmtlcnMgPSByYW5nZU9mQ29ycmVjdGlvbi5zdGFydENvbnRhaW5lcigp
LmRvY3VtZW50KCkubWFya2VycygpOwogICAgIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2Vy
Kj4gY29ycmVjdGVkT25jZU1hcmtlcnMgPSBtYXJrZXJzLm1hcmtlcnNJblJhbmdlKHJhbmdlT2ZD
b3JyZWN0aW9uLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCk7CiAgICAgaWYgKGNvcnJl
Y3RlZE9uY2VNYXJrZXJzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTU3LDcgKzU1
Miw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVjb3JkU3BlbGxjaGVja2Vy
UmVzcG9uc2VGb3JNb2RpZmllZENvcnJlY3Rpb24oCiAgICAgICAgICAgICBjbGllbnQtPnJlY29y
ZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZTo6RWRpdGVkLCBj
b3JyZWN0ZWQsIGNvcnJlY3Rpb24pOwogICAgIH0KIAotICAgIG1hcmtlcnMucmVtb3ZlTWFya2Vy
cyhyYW5nZU9mQ29ycmVjdGlvbiwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQsIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwor
ICAgIG1hcmtlcnMucmVtb3ZlTWFya2VycygmcmFuZ2VPZkNvcnJlY3Rpb24sIERvY3VtZW50TWFy
a2VyOjpBdXRvY29ycmVjdGVkLCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRp
YWxseU92ZXJsYXBwaW5nTWFya2VyKTsKIH0KIAogdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjpkZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwb3Np
dGlvbiwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFN0cmluZykKQEAgLTU4NywxMiArNTgyLDEyIEBA
IHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya1ByZWNlZGluZ1doaXRlc3BhY2VG
b3JEZWxldGVkQXV0b2NvcnJlY3Rpb25BCiAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJz
KCkuYWRkTWFya2VyKHByZWNlZGluZ0NoYXJhY3RlclJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtl
cjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uLCBtX29yaWdpbmFsU3RyaW5nRm9yTGFzdERlbGV0ZWRB
dXRvY29ycmVjdGlvbik7CiB9CiAKLWJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cHJv
Y2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdChjb25zdCBUZXh0Q2hlY2tpbmdS
ZXN1bHQqIHJlc3VsdCwgUmFuZ2UqIHJhbmdlV2l0aEFsdGVybmF0aXZlLCBjb25zdCBTdHJpbmcm
IHN0cmluZ1RvQmVSZXBsYWNlZCkKK2Jvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cHJv
Y2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdChjb25zdCBUZXh0Q2hlY2tpbmdS
ZXN1bHQmIHJlc3VsdCwgUmFuZ2UmIHJhbmdlV2l0aEFsdGVybmF0aXZlLCBjb25zdCBTdHJpbmcm
IHN0cmluZ1RvQmVSZXBsYWNlZCkKIHsKICAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXImIG1h
cmtlckNvbnRyb2xsZXIgPSBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKTsKICAgICBpZiAo
bWFya2VyQ29udHJvbGxlci5oYXNNYXJrZXJzKHJhbmdlV2l0aEFsdGVybmF0aXZlLCBEb2N1bWVu
dE1hcmtlcjo6UmVwbGFjZW1lbnQpKSB7Ci0gICAgICAgIGlmIChyZXN1bHQtPnR5cGUgPT0gVGV4
dENoZWNraW5nVHlwZUNvcnJlY3Rpb24pCi0gICAgICAgICAgICByZWNvcmRTcGVsbGNoZWNrZXJS
ZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbihyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgc3RyaW5n
VG9CZVJlcGxhY2VkLCByZXN1bHQtPnJlcGxhY2VtZW50KTsKKyAgICAgICAgaWYgKHJlc3VsdC50
eXBlID09IFRleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uKQorICAgICAgICAgICAgcmVjb3JkU3Bl
bGxjaGVja2VyUmVzcG9uc2VGb3JNb2RpZmllZENvcnJlY3Rpb24ocmFuZ2VXaXRoQWx0ZXJuYXRp
dmUsIHN0cmluZ1RvQmVSZXBsYWNlZCwgcmVzdWx0LnJlcGxhY2VtZW50KTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNjAyLDExICs1OTcsMTEgQEAgYm9vbCBBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjpwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0
KGNvbnN0IFQKICAgICBpZiAobWFya2VyQ29udHJvbGxlci5oYXNNYXJrZXJzKHJhbmdlV2l0aEFs
dGVybmF0aXZlLCBEb2N1bWVudE1hcmtlcjo6QWNjZXB0ZWRDYW5kaWRhdGUpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBQb3NpdGlvbiBiZWdpbm5pbmdPZlJhbmdlID0gcmFuZ2VXaXRo
QWx0ZXJuYXRpdmUtPnN0YXJ0UG9zaXRpb24oKTsKKyAgICBQb3NpdGlvbiBiZWdpbm5pbmdPZlJh
bmdlID0gcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuc3RhcnRQb3NpdGlvbigpOwogICAgIFBvc2l0aW9u
IHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uID0gYmVnaW5uaW5nT2ZSYW5nZS5wcmV2aW91cygp
OwotICAgIFJlZlB0cjxSYW5nZT4gcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uLCBiZWdp
bm5pbmdPZlJhbmdlKTsKKyAgICBhdXRvIHByZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gUmFuZ2U6
OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiwg
YmVnaW5uaW5nT2ZSYW5nZSk7CiAKLSAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+
IG1hcmtlcnMgPSBtYXJrZXJDb250cm9sbGVyLm1hcmtlcnNJblJhbmdlKHByZWNlZGluZ0NoYXJh
Y3RlclJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uKTsK
KyAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBtYXJrZXJDb250
cm9sbGVyLm1hcmtlcnNJblJhbmdlKHByZWNlZGluZ0NoYXJhY3RlclJhbmdlLCBEb2N1bWVudE1h
cmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uKTsKICAgICBmb3IgKGNvbnN0IGF1dG8qIG1hcmtl
ciA6IG1hcmtlcnMpIHsKICAgICAgICAgaWYgKG1hcmtlci0+ZGVzY3JpcHRpb24oKSA9PSBzdHJp
bmdUb0JlUmVwbGFjZWQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC03MjMsMTEgKzcx
OCwxMSBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5RGljdGF0aW9uQWx0
ZXJuYXRpdmUoY29uc3QgU3RyaW5nJiBhbHRlcm5hdAogICAgIGlmICghc2VsZWN0aW9uIHx8ICFl
ZGl0b3Iuc2hvdWxkSW5zZXJ0VGV4dChhbHRlcm5hdGl2ZVN0cmluZywgc2VsZWN0aW9uLmdldCgp
LCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAgICAgIHJldHVybjsKICAgICBEb2N1
bWVudE1hcmtlckNvbnRyb2xsZXImIG1hcmtlcnMgPSBzZWxlY3Rpb24tPnN0YXJ0Q29udGFpbmVy
KCkuZG9jdW1lbnQoKS5tYXJrZXJzKCk7Ci0gICAgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJr
ZXIqPiBkaWN0YXRpb25BbHRlcm5hdGl2ZXNNYXJrZXJzID0gbWFya2Vycy5tYXJrZXJzSW5SYW5n
ZShzZWxlY3Rpb24uZ2V0KCksIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMp
OworICAgIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gZGljdGF0aW9uQWx0ZXJuYXRp
dmVzTWFya2VycyA9IG1hcmtlcnMubWFya2Vyc0luUmFuZ2UoKnNlbGVjdGlvbiwgRG9jdW1lbnRN
YXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlcyk7CiAgICAgZm9yIChhdXRvKiBtYXJrZXIgOiBk
aWN0YXRpb25BbHRlcm5hdGl2ZXNNYXJrZXJzKQogICAgICAgICByZW1vdmVEaWN0YXRpb25BbHRl
cm5hdGl2ZXNGb3JNYXJrZXIoKm1hcmtlcik7CiAKLSAgICBhcHBseUFsdGVybmF0aXZlVGV4dFRv
UmFuZ2Uoc2VsZWN0aW9uLmdldCgpLCBhbHRlcm5hdGl2ZVN0cmluZywgQWx0ZXJuYXRpdmVUZXh0
VHlwZURpY3RhdGlvbkFsdGVybmF0aXZlcywgbWFya2VyVHlwZXNGb3JBcHBsaWVkRGljdGF0aW9u
QWx0ZXJuYXRpdmUoKSk7CisgICAgYXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKCpzZWxlY3Rp
b24sIGFsdGVybmF0aXZlU3RyaW5nLCBBbHRlcm5hdGl2ZVRleHRUeXBlRGljdGF0aW9uQWx0ZXJu
YXRpdmVzLCBtYXJrZXJUeXBlc0ZvckFwcGxpZWREaWN0YXRpb25BbHRlcm5hdGl2ZSgpKTsKICNl
bHNlCiAgICAgVU5VU0VEX1BBUkFNKGFsdGVybmF0aXZlU3RyaW5nKTsKICNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaAppbmRl
eCBjNTgzNTAzZWFhMjI2NjY3NTNiMjAyM2IzZTU2YmJkNTE2MTQxYWIyLi41ZjY2NWE4ZDNlYWU0
MTRjMjdkZjZkZTUyZjRhMDljNjU3NTA2YzgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaApAQCAtODAsNyArODAsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzdG9wQWx0ZXJuYXRpdmVUZXh0VUlUaW1lcigpIFVOTEVTU19FTkFCTEVE
KHsgfSkKIAogICAgIHZvaWQgZGlzbWlzcyhSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVU
ZXh0KSBVTkxFU1NfRU5BQkxFRCh7IH0pCi0gICAgdm9pZCBzaG93KFBhc3NSZWZQdHI8UmFuZ2U+
IHJhbmdlVG9SZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50KSBVTkxFU1NfRU5BQkxF
RCh7IFVOVVNFRF9QQVJBTShyYW5nZVRvUmVwbGFjZSk7IFVOVVNFRF9QQVJBTShyZXBsYWNlbWVu
dCk7IH0pCisgICAgdm9pZCBzaG93KFJhbmdlJiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5n
JiByZXBsYWNlbWVudCkgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmFuZ2VUb1JlcGxh
Y2UpOyBVTlVTRURfUEFSQU0ocmVwbGFjZW1lbnQpOyB9KQogCiAgICAgLy8gUmV0dXJuIHRydWUg
aWYgY29ycmVjdGlvbiB3YXMgYXBwbGllZCwgZmFsc2Ugb3RoZXJ3aXNlLgogICAgIGJvb2wgYXBw
bHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKSBVTkxFU1NfRU5BQkxF
RCh7IHJldHVybiBmYWxzZTsgfSkKQEAgLTk3LDE2ICs5NywxNiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBoYW5kbGVDYW5jZWxPcGVyYXRpb24oKSBVTkxFU1NfRU5BQkxFRCh7IH0pCiAKICAgICBib29s
IGhhc1BlbmRpbmdDb3JyZWN0aW9uKCkgY29uc3QgVU5MRVNTX0VOQUJMRUQoeyByZXR1cm4gZmFs
c2U7IH0pCi0gICAgYm9vbCBpc1NwZWxsaW5nTWFya2VyQWxsb3dlZChQYXNzUmVmUHRyPFJhbmdl
PiBtaXNzcGVsbGluZ1JhbmdlKSBjb25zdCBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTSht
aXNzcGVsbGluZ1JhbmdlKTsgcmV0dXJuIHRydWU7IH0pCisgICAgYm9vbCBpc1NwZWxsaW5nTWFy
a2VyQWxsb3dlZChSYW5nZSYgbWlzc3BlbGxpbmdSYW5nZSkgY29uc3QgVU5MRVNTX0VOQUJMRUQo
eyBVTlVTRURfUEFSQU0obWlzc3BlbGxpbmdSYW5nZSk7IHJldHVybiB0cnVlOyB9KQogICAgIGJv
b2wgaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkgVU5MRVNTX0VOQUJMRUQo
eyByZXR1cm4gZmFsc2U7IH0pCiAgICAgYm9vbCBzaG91bGRSZW1vdmVNYXJrZXJzVXBvbkVkaXRp
bmcoKTsKIAotICAgIHZvaWQgcmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVj
dGlvblJlc3BvbnNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nLCBQYXNzUmVmUHRyPFJh
bmdlPiByZXBsYWNlbWVudFJhbmdlKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShyZXBs
YWNlZFN0cmluZyk7IFVOVVNFRF9QQVJBTShyZXBsYWNlbWVudFJhbmdlKTsgfSkKLSAgICB2b2lk
IG1hcmtSZXZlcnNlZChQYXNzUmVmUHRyPFJhbmdlPiBjaGFuZ2VkUmFuZ2UpIFVOTEVTU19FTkFC
TEVEKHsgVU5VU0VEX1BBUkFNKGNoYW5nZWRSYW5nZSk7IH0pCi0gICAgdm9pZCBtYXJrQ29ycmVj
dGlvbihQYXNzUmVmUHRyPFJhbmdlPiByZXBsYWNlZFJhbmdlLCBjb25zdCBTdHJpbmcmIHJlcGxh
Y2VkU3RyaW5nKSBVTkxFU1NfRU5BQkxFRCh7IFVOVVNFRF9QQVJBTShyZXBsYWNlZFJhbmdlKTsg
VU5VU0VEX1BBUkFNKHJlcGxhY2VkU3RyaW5nKTsgfSkKKyAgICB2b2lkIHJlY29yZEF1dG9jb3Jy
ZWN0aW9uUmVzcG9uc2UoQXV0b2NvcnJlY3Rpb25SZXNwb25zZSwgY29uc3QgU3RyaW5nJiByZXBs
YWNlZFN0cmluZywgUmFuZ2UqIHJlcGxhY2VtZW50UmFuZ2UpIFVOTEVTU19FTkFCTEVEKHsgVU5V
U0VEX1BBUkFNKHJlcGxhY2VkU3RyaW5nKTsgVU5VU0VEX1BBUkFNKHJlcGxhY2VtZW50UmFuZ2Up
OyB9KQorICAgIHZvaWQgbWFya1JldmVyc2VkKFJhbmdlJiBjaGFuZ2VkUmFuZ2UpIFVOTEVTU19F
TkFCTEVEKHsgVU5VU0VEX1BBUkFNKGNoYW5nZWRSYW5nZSk7IH0pCisgICAgdm9pZCBtYXJrQ29y
cmVjdGlvbihSYW5nZSYgcmVwbGFjZWRSYW5nZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmlu
ZykgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFSQU0ocmVwbGFjZWRSYW5nZSk7IFVOVVNFRF9Q
QVJBTShyZXBsYWNlZFN0cmluZyk7IH0pCiAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMg
ZmFsc2UgaWYgdGhlIHJlcGxhY2VtZW50IHNob3VsZCBub3QgYmUgY2FycmllZCBvdXQuCi0gICAg
Ym9vbCBwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KGNvbnN0IFRleHRD
aGVja2luZ1Jlc3VsdCosIFJhbmdlKiByYW5nZVRvQmVSZXBsYWNlZCwgY29uc3QgU3RyaW5nJiBz
dHJpbmdUb0JlUmVwbGFjZWQpIFVOTEVTU19FTkFCTEVEKHsgVU5VU0VEX1BBUkFNKHJhbmdlVG9C
ZVJlcGxhY2VkKTsgVU5VU0VEX1BBUkFNKHN0cmluZ1RvQmVSZXBsYWNlZCk7IHJldHVybiB0cnVl
OyB9KTsKKyAgICBib29sIHByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlSZXN1bHQo
Y29uc3QgVGV4dENoZWNraW5nUmVzdWx0JiwgUmFuZ2UmIHJhbmdlVG9CZVJlcGxhY2VkLCBjb25z
dCBTdHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNlZCkgVU5MRVNTX0VOQUJMRUQoeyBVTlVTRURfUEFS
QU0ocmFuZ2VUb0JlUmVwbGFjZWQpOyBVTlVTRURfUEFSQU0oc3RyaW5nVG9CZVJlcGxhY2VkKTsg
cmV0dXJuIHRydWU7IH0pOwogICAgIHZvaWQgZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlv
bihjb25zdCBQb3NpdGlvbiYsIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxTdHJpbmcpIFVOTEVTU19F
TkFCTEVEKHsgVU5VU0VEX1BBUkFNKG9yaWdpbmFsU3RyaW5nKTsgfSkKIAogICAgIGJvb2wgaW5z
ZXJ0RGljdGF0ZWRUZXh0KGNvbnN0IFN0cmluZyYsIGNvbnN0IFZlY3RvcjxEaWN0YXRpb25BbHRl
cm5hdGl2ZT4mLCBFdmVudCopOwpAQCAtMTE3LDkgKzExNyw5IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAjaWYgVVNFKEFVVE9DT1JSRUNUSU9OX1BBTkVMKQogICAgIFN0cmluZyBkaXNtaXNzU29vbihS
ZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0KTsKLSAgICB2b2lkIGFwcGx5QWx0ZXJu
YXRpdmVUZXh0VG9SYW5nZShjb25zdCBSYW5nZSosIGNvbnN0IFN0cmluZyYgYWx0ZXJuYXRpdmUs
IEFsdGVybmF0aXZlVGV4dFR5cGUsIGNvbnN0IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2Vy
VHlwZT4mKTsKKyAgICB2b2lkIGFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZShjb25zdCBSYW5n
ZSYsIGNvbnN0IFN0cmluZyYgYWx0ZXJuYXRpdmUsIEFsdGVybmF0aXZlVGV4dFR5cGUsIGNvbnN0
IFZlY3RvcjxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4mKTsKICAgICB2b2lkIHRpbWVyRmly
ZWQoKTsKLSAgICB2b2lkIHJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3Jy
ZWN0aW9uKFJhbmdlKiByYW5nZU9mQ29ycmVjdGlvbiwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQs
IGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbik7CisgICAgdm9pZCByZWNvcmRTcGVsbGNoZWNrZXJS
ZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbihSYW5nZSYgcmFuZ2VPZkNvcnJlY3Rpb24sIGNv
bnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pOwogICAgIFN0
cmluZyBtYXJrZXJEZXNjcmlwdGlvbkZvckFwcGxpZWRBbHRlcm5hdGl2ZVRleHQoQWx0ZXJuYXRp
dmVUZXh0VHlwZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUpOwogCiAgICAgYm9vbCBzaG91
bGRTdGFydFRpbWVyRm9yKGNvbnN0IERvY3VtZW50TWFya2VyJiwgaW50IGVuZE9mZnNldCkgY29u
c3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCmluZGV4
IDFlZDk2ZGJlNjZlYmI5MTNlMGEyODQ4MjkxMDQ0MDlkNmI4NmI4YmQuLmFiNzFiMWE2YmM0N2Jl
ZjJlY2I1NGI1NTEyYzVkODljYzNiZTZiZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
QXBwbHlTdHlsZUNvbW1hbmQuY3BwCkBAIC0xMTQsMTIgKzExNCwxMiBAQCBib29sIGlzRW1wdHlG
b250VGFnKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIFNob3VsZFN0eWxlQXR0cmlidXRlQmVFbXB0
eSBzaG91bGRTdAogICAgIHJldHVybiBoYXNOb0F0dHJpYnV0ZU9yT25seVN0eWxlQXR0cmlidXRl
KGRvd25jYXN0PEhUTUxGb250RWxlbWVudD4oZWxlbWVudCksIHNob3VsZFN0eWxlQXR0cmlidXRl
QmVFbXB0eSk7CiB9CiAKLXN0YXRpYyBSZWZQdHI8SFRNTEVsZW1lbnQ+IGNyZWF0ZUZvbnRFbGVt
ZW50KERvY3VtZW50JiBkb2N1bWVudCkKK3N0YXRpYyBSZWY8SFRNTEVsZW1lbnQ+IGNyZWF0ZUZv
bnRFbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCkKIHsKICAgICByZXR1cm4gY3JlYXRlSFRNTEVs
ZW1lbnQoZG9jdW1lbnQsIGZvbnRUYWcpOwogfQogCi1SZWZQdHI8SFRNTEVsZW1lbnQ+IGNyZWF0
ZVN0eWxlU3BhbkVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQorUmVmPEhUTUxFbGVtZW50PiBj
cmVhdGVTdHlsZVNwYW5FbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCkKIHsKICAgICByZXR1cm4g
Y3JlYXRlSFRNTEVsZW1lbnQoZG9jdW1lbnQsIHNwYW5UYWcpOwogfQpAQCAtMTQ2LDE0ICsxNDYs
MTQgQEAgQXBwbHlTdHlsZUNvbW1hbmQ6OkFwcGx5U3R5bGVDb21tYW5kKERvY3VtZW50JiBkb2N1
bWVudCwgY29uc3QgRWRpdGluZ1N0eWxlKiBzdHkKIHsKIH0KIAotQXBwbHlTdHlsZUNvbW1hbmQ6
OkFwcGx5U3R5bGVDb21tYW5kKFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCwgYm9vbCByZW1v
dmVPbmx5LCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCitBcHBseVN0eWxlQ29tbWFuZDo6QXBw
bHlTdHlsZUNvbW1hbmQoUmVmPEVsZW1lbnQ+JiYgZWxlbWVudCwgYm9vbCByZW1vdmVPbmx5LCBF
ZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiAgICAgOiBDb21wb3NpdGVFZGl0Q29tbWFuZChlbGVt
ZW50LT5kb2N1bWVudCgpLCBlZGl0aW5nQWN0aW9uKQogICAgICwgbV9zdHlsZShFZGl0aW5nU3R5
bGU6OmNyZWF0ZSgpKQogICAgICwgbV9wcm9wZXJ0eUxldmVsKFByb3BlcnR5RGVmYXVsdCkKICAg
ICAsIG1fc3RhcnQoZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKS5kb3duc3RyZWFtKCkpCiAgICAg
LCBtX2VuZChlbmRpbmdTZWxlY3Rpb24oKS5lbmQoKS51cHN0cmVhbSgpKQogICAgICwgbV91c2VF
bmRpbmdTZWxlY3Rpb24odHJ1ZSkKLSAgICAsIG1fc3R5bGVkSW5saW5lRWxlbWVudChlbGVtZW50
KQorICAgICwgbV9zdHlsZWRJbmxpbmVFbGVtZW50KFdURk1vdmUoZWxlbWVudCkpCiAgICAgLCBt
X3JlbW92ZU9ubHkocmVtb3ZlT25seSkKIHsKIH0KQEAgLTI5MCw3ICsyOTAsNyBAQCB2b2lkIEFw
cGx5U3R5bGVDb21tYW5kOjphcHBseUJsb2NrU3R5bGUoRWRpdGluZ1N0eWxlICpzdHlsZSkKICAg
ICAgICAgdXBkYXRlU3RhcnRFbmQoc3RhcnRSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBlbmRSYW5n
ZS0+c3RhcnRQb3NpdGlvbigpKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8TXV0YWJsZVN0eWxl
UHJvcGVydGllcz4gY29weVN0eWxlT3JDcmVhdGVFbXB0eShjb25zdCBTdHlsZVByb3BlcnRpZXMq
IHN0eWxlKQorc3RhdGljIFJlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBjb3B5U3R5bGVPckNy
ZWF0ZUVtcHR5KGNvbnN0IFN0eWxlUHJvcGVydGllcyogc3R5bGUpCiB7CiAgICAgaWYgKCFzdHls
ZSkKICAgICAgICAgcmV0dXJuIE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgpOwpAQCAt
Mzk5LDcgKzM5OSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5UmVsYXRpdmVGb250
U3R5bGVDaGFuZ2UoRWRpdGluZ1N0eWxlKiBzdHlsZSkKICAgICAgICAgICAgIC8vIExhc3Qgc3R5
bGVkIG5vZGUgd2FzIG5vdCBwYXJlbnQgbm9kZSBvZiB0aGlzIHRleHQgbm9kZSwgYnV0IHdlIHdp
c2ggdG8gc3R5bGUgdGhpcwogICAgICAgICAgICAgLy8gdGV4dCBub2RlLiBUbyBtYWtlIHRoaXMg
cG9zc2libGUsIGFkZCBhIHN0eWxlIHNwYW4gdG8gc3Vycm91bmQgdGhpcyB0ZXh0IG5vZGUuCiAg
ICAgICAgICAgICBhdXRvIHNwYW4gPSBjcmVhdGVTdHlsZVNwYW5FbGVtZW50KGRvY3VtZW50KCkp
OwotICAgICAgICAgICAgc3Vycm91bmROb2RlUmFuZ2VXaXRoRWxlbWVudChub2RlLCBub2RlLCBz
cGFuLmdldCgpKTsKKyAgICAgICAgICAgIHN1cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1lbnQoKm5v
ZGUsICpub2RlLCBzcGFuLmNvcHlSZWYoKSk7CiAgICAgICAgICAgICBlbGVtZW50ID0gV1RGTW92
ZShzcGFuKTsKICAgICAgICAgfSAgZWxzZSB7CiAgICAgICAgICAgICAvLyBPbmx5IGhhbmRsZSBI
VE1MIGVsZW1lbnRzIGFuZCB0ZXh0IG5vZGVzLgpAQCAtNzI3LDcgKzcyNyw3IEBAIHZvaWQgQXBw
bHlTdHlsZUNvbW1hbmQ6OmZpeFJhbmdlQW5kQXBwbHlJbmxpbmVTdHlsZShFZGl0aW5nU3R5bGUq
IHN0eWxlLCBjb25zdCBQCiAgICAgICAgICAgICBzdGFydE5vZGUgPSBzdGFydE5vZGUtPnBhcmVu
dE5vZGUoKTsKICAgICB9CiAKLSAgICBhcHBseUlubGluZVN0eWxlVG9Ob2RlUmFuZ2Uoc3R5bGUs
IHN0YXJ0Tm9kZSwgcGFzdEVuZE5vZGUpOworICAgIGFwcGx5SW5saW5lU3R5bGVUb05vZGVSYW5n
ZShzdHlsZSwgKnN0YXJ0Tm9kZSwgcGFzdEVuZE5vZGUpOwogfQogCiBzdGF0aWMgYm9vbCBjb250
YWluc05vbkVkaXRhYmxlUmVnaW9uKE5vZGUmIG5vZGUpCkBAIC03NjYsNyArNzY2LDcgQEAgc3Ry
dWN0IElubGluZVJ1blRvQXBwbHlTdHlsZSB7CiAgICAgU3R5bGVDaGFuZ2UgY2hhbmdlOwogfTsK
IAotdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRvTm9kZVJhbmdlKEVk
aXRpbmdTdHlsZSogc3R5bGUsIFBhc3NSZWZQdHI8Tm9kZT4gc3RhcnROb2RlLCBQYXNzUmVmUHRy
PE5vZGU+IHBhc3RFbmROb2RlKQordm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVT
dHlsZVRvTm9kZVJhbmdlKEVkaXRpbmdTdHlsZSogc3R5bGUsIE5vZGUmIHN0YXJ0Tm9kZSwgTm9k
ZSogcGFzdEVuZE5vZGUpCiB7CiAgICAgaWYgKG1fcmVtb3ZlT25seSkKICAgICAgICAgcmV0dXJu
OwpAQCAtNzc0LDcgKzc3NCw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5l
U3R5bGVUb05vZGVSYW5nZShFZGl0aW5nU3R5bGUqIHN0eWxlLCBQYXNzUmVmCiAgICAgZG9jdW1l
bnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAogICAgIFZlY3Rv
cjxJbmxpbmVSdW5Ub0FwcGx5U3R5bGU+IHJ1bnM7Ci0gICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBz
dGFydE5vZGU7CisgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSAmc3RhcnROb2RlOwogICAgIGZvciAo
UmVmUHRyPE5vZGU+IG5leHQ7IG5vZGUgJiYgbm9kZSAhPSBwYXN0RW5kTm9kZTsgbm9kZSA9IG5l
eHQpIHsKICAgICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpOwogCkBAIC04
MDEsNyArODAxLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRv
Tm9kZVJhbmdlKEVkaXRpbmdTdHlsZSogc3R5bGUsIFBhc3NSZWYKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAKICAgICAgICAgaWYgKG5vZGUtPmhhc0NoaWxkTm9kZXMoKSkgewotICAg
ICAgICAgICAgaWYgKG5vZGUtPmNvbnRhaW5zKHBhc3RFbmROb2RlLmdldCgpKSB8fCBjb250YWlu
c05vbkVkaXRhYmxlUmVnaW9uKCpub2RlKSB8fCAhbm9kZS0+cGFyZW50Tm9kZSgpLT5oYXNFZGl0
YWJsZVN0eWxlKCkpCisgICAgICAgICAgICBpZiAobm9kZS0+Y29udGFpbnMocGFzdEVuZE5vZGUp
IHx8IGNvbnRhaW5zTm9uRWRpdGFibGVSZWdpb24oKm5vZGUpIHx8ICFub2RlLT5wYXJlbnROb2Rl
KCktPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIGlmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQoKm5vZGUpKSB7CiAgICAgICAgICAgICAg
ICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKCpub2RlKTsKQEAg
LTgxMiw3ICs4MTIsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxl
VG9Ob2RlUmFuZ2UoRWRpdGluZ1N0eWxlKiBzdHlsZSwgUGFzc1JlZgogICAgICAgICBOb2RlKiBy
dW5TdGFydCA9IG5vZGUuZ2V0KCk7CiAgICAgICAgIE5vZGUqIHJ1bkVuZCA9IG5vZGUuZ2V0KCk7
CiAgICAgICAgIE5vZGUqIHNpYmxpbmcgPSBub2RlLT5uZXh0U2libGluZygpOwotICAgICAgICB3
aGlsZSAoc2libGluZyAmJiBzaWJsaW5nICE9IHBhc3RFbmROb2RlICYmICFzaWJsaW5nLT5jb250
YWlucyhwYXN0RW5kTm9kZS5nZXQoKSkgJiYgKCFpc0Jsb2NrKHNpYmxpbmcpIHx8IHNpYmxpbmct
Pmhhc1RhZ05hbWUoYnJUYWcpKSAmJiAhY29udGFpbnNOb25FZGl0YWJsZVJlZ2lvbigqc2libGlu
ZykpIHsKKyAgICAgICAgd2hpbGUgKHNpYmxpbmcgJiYgc2libGluZyAhPSBwYXN0RW5kTm9kZSAm
JiAhc2libGluZy0+Y29udGFpbnMocGFzdEVuZE5vZGUpICYmICghaXNCbG9jayhzaWJsaW5nKSB8
fCBzaWJsaW5nLT5oYXNUYWdOYW1lKGJyVGFnKSkgJiYgIWNvbnRhaW5zTm9uRWRpdGFibGVSZWdp
b24oKnNpYmxpbmcpKSB7CiAgICAgICAgICAgICBydW5FbmQgPSBzaWJsaW5nOwogICAgICAgICAg
ICAgc2libGluZyA9IHJ1bkVuZC0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgfQpAQCAtODI2LDkg
KzgyNiw5IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVUb05vZGVS
YW5nZShFZGl0aW5nU3R5bGUqIHN0eWxlLCBQYXNzUmVmCiAgICAgfQogCiAgICAgZm9yIChhdXRv
JiBydW4gOiBydW5zKSB7Ci0gICAgICAgIHJlbW92ZUNvbmZsaWN0aW5nSW5saW5lU3R5bGVGcm9t
UnVuKHN0eWxlLCBydW4uc3RhcnQsIHJ1bi5lbmQsIHJ1bi5wYXN0RW5kTm9kZSk7CisgICAgICAg
IHJlbW92ZUNvbmZsaWN0aW5nSW5saW5lU3R5bGVGcm9tUnVuKHN0eWxlLCBydW4uc3RhcnQsIHJ1
bi5lbmQsIHJ1bi5wYXN0RW5kTm9kZS5nZXQoKSk7CiAgICAgICAgIGlmIChydW4uc3RhcnRBbmRF
bmRBcmVTdGlsbEluRG9jdW1lbnQoKSkKLSAgICAgICAgICAgIHJ1bi5wb3NpdGlvbkZvclN0eWxl
Q29tcHV0YXRpb24gPSBwb3NpdGlvblRvQ29tcHV0ZUlubGluZVN0eWxlQ2hhbmdlKHJ1bi5zdGFy
dCwgcnVuLmR1bW15RWxlbWVudCk7CisgICAgICAgICAgICBydW4ucG9zaXRpb25Gb3JTdHlsZUNv
bXB1dGF0aW9uID0gcG9zaXRpb25Ub0NvbXB1dGVJbmxpbmVTdHlsZUNoYW5nZSgqcnVuLnN0YXJ0
LCBydW4uZHVtbXlFbGVtZW50KTsKICAgICB9CiAKICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91
dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwpAQCAtODQwLDcgKzg0MCw3IEBAIHZvaWQgQXBw
bHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVUb05vZGVSYW5nZShFZGl0aW5nU3R5bGUq
IHN0eWxlLCBQYXNzUmVmCiAgICAgICAgIGlmIChydW4uZHVtbXlFbGVtZW50KQogICAgICAgICAg
ICAgcmVtb3ZlTm9kZShydW4uZHVtbXlFbGVtZW50KTsKICAgICAgICAgaWYgKHJ1bi5zdGFydEFu
ZEVuZEFyZVN0aWxsSW5Eb2N1bWVudCgpKQotICAgICAgICAgICAgYXBwbHlJbmxpbmVTdHlsZUNo
YW5nZShXVEZNb3ZlKHJ1bi5zdGFydCksIFdURk1vdmUocnVuLmVuZCksIHJ1bi5jaGFuZ2UsIEFk
ZFN0eWxlZEVsZW1lbnQpOworICAgICAgICAgICAgYXBwbHlJbmxpbmVTdHlsZUNoYW5nZShydW4u
c3RhcnQucmVsZWFzZU5vbk51bGwoKSwgcnVuLmVuZC5yZWxlYXNlTm9uTnVsbCgpLCBydW4uY2hh
bmdlLCBBZGRTdHlsZWRFbGVtZW50KTsKICAgICB9CiB9CiAKQEAgLTg2NiwxMyArODY2LDEzIEBA
IGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnNob3VsZEFwcGx5SW5saW5lU3R5bGVUb1J1bihFZGl0
aW5nU3R5bGUqIHN0eWxlLCBOb2RlKiByCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEFw
cGx5U3R5bGVDb21tYW5kOjpyZW1vdmVDb25mbGljdGluZ0lubGluZVN0eWxlRnJvbVJ1bihFZGl0
aW5nU3R5bGUqIHN0eWxlLCBSZWZQdHI8Tm9kZT4mIHJ1blN0YXJ0LCBSZWZQdHI8Tm9kZT4mIHJ1
bkVuZCwgUGFzc1JlZlB0cjxOb2RlPiBwYXN0RW5kTm9kZSkKK3ZvaWQgQXBwbHlTdHlsZUNvbW1h
bmQ6OnJlbW92ZUNvbmZsaWN0aW5nSW5saW5lU3R5bGVGcm9tUnVuKEVkaXRpbmdTdHlsZSogc3R5
bGUsIFJlZlB0cjxOb2RlPiYgcnVuU3RhcnQsIFJlZlB0cjxOb2RlPiYgcnVuRW5kLCBOb2RlKiBw
YXN0RW5kTm9kZSkKIHsKICAgICBBU1NFUlQocnVuU3RhcnQgJiYgcnVuRW5kKTsKICAgICBSZWZQ
dHI8Tm9kZT4gbmV4dCA9IHJ1blN0YXJ0OwogICAgIGZvciAoUmVmUHRyPE5vZGU+IG5vZGUgPSBu
ZXh0OyBub2RlICYmIG5vZGUtPmlzQ29ubmVjdGVkKCkgJiYgbm9kZSAhPSBwYXN0RW5kTm9kZTsg
bm9kZSA9IG5leHQpIHsKICAgICAgICAgaWYgKGVkaXRpbmdJZ25vcmVzQ29udGVudCgqbm9kZSkp
IHsKLSAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+Y29udGFpbnMocGFzdEVuZE5vZGUuZ2V0KCkp
KTsKKyAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+Y29udGFpbnMocGFzdEVuZE5vZGUpKTsKICAg
ICAgICAgICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbigqbm9k
ZSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHQoKm5vZGUpOwpAQCAtODgzLDcgKzg4Myw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJl
bW92ZUNvbmZsaWN0aW5nSW5saW5lU3R5bGVGcm9tUnVuKEVkaXRpbmdTdHlsZSogc3R5bGUsCiAg
ICAgICAgIFJlZlB0cjxOb2RlPiBwcmV2aW91c1NpYmxpbmcgPSBub2RlLT5wcmV2aW91c1NpYmxp
bmcoKTsKICAgICAgICAgUmVmUHRyPE5vZGU+IG5leHRTaWJsaW5nID0gbm9kZS0+bmV4dFNpYmxp
bmcoKTsKICAgICAgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IHBhcmVudCA9IG5vZGUtPnBhcmVu
dE5vZGUoKTsKLSAgICAgICAgcmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudChzdHlsZSwgZG93
bmNhc3Q8SFRNTEVsZW1lbnQ+KG5vZGUuZ2V0KCkpLCBSZW1vdmVBbHdheXMpOworICAgICAgICBy
ZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KHN0eWxlLCBkb3duY2FzdDxIVE1MRWxlbWVudD4o
Km5vZGUpLCBSZW1vdmVBbHdheXMpOwogICAgICAgICBpZiAoIW5vZGUtPmlzQ29ubmVjdGVkKCkp
IHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBtaWdodCBuZWVkIHRvIHVwZGF0ZSB0aGUgc3Rh
cnQgYW5kIHRoZSBlbmQgb2YgY3VycmVudCBzZWxlY3Rpb24gaGVyZSBidXQgbmVlZCBhIHRlc3Qu
CiAgICAgICAgICAgICBpZiAocnVuU3RhcnQgPT0gbm9kZSkKQEAgLTg5NCwzMiArODk0LDMwIEBA
IHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUNvbmZsaWN0aW5nSW5saW5lU3R5bGVGcm9t
UnVuKEVkaXRpbmdTdHlsZSogc3R5bGUsCiAgICAgfQogfQogCi1ib29sIEFwcGx5U3R5bGVDb21t
YW5kOjpyZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KEVkaXRpbmdTdHlsZSogc3R5bGUsIFBh
c3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGVsZW1lbnQsIElubGluZVN0eWxlUmVtb3ZhbE1vZGUgbW9k
ZSwgRWRpdGluZ1N0eWxlKiBleHRyYWN0ZWRTdHlsZSkKK2Jvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6
OnJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoRWRpdGluZ1N0eWxlKiBzdHlsZSwgSFRNTEVs
ZW1lbnQmIGVsZW1lbnQsIElubGluZVN0eWxlUmVtb3ZhbE1vZGUgbW9kZSwgRWRpdGluZ1N0eWxl
KiBleHRyYWN0ZWRTdHlsZSkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCk7Ci0KLSAgICBpZiAoIWVs
ZW1lbnQtPnBhcmVudE5vZGUoKSB8fCAhaXNFZGl0YWJsZU5vZGUoKmVsZW1lbnQtPnBhcmVudE5v
ZGUoKSkpCisgICAgaWYgKCFlbGVtZW50LnBhcmVudE5vZGUoKSB8fCAhaXNFZGl0YWJsZU5vZGUo
KmVsZW1lbnQucGFyZW50Tm9kZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYg
KGlzU3R5bGVkSW5saW5lRWxlbWVudFRvUmVtb3ZlKGVsZW1lbnQuZ2V0KCkpKSB7CisgICAgaWYg
KGlzU3R5bGVkSW5saW5lRWxlbWVudFRvUmVtb3ZlKCZlbGVtZW50KSkgewogICAgICAgICBpZiAo
bW9kZSA9PSBSZW1vdmVOb25lKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGlm
IChleHRyYWN0ZWRTdHlsZSkKLSAgICAgICAgICAgIGV4dHJhY3RlZFN0eWxlLT5tZXJnZUlubGlu
ZVN0eWxlT2ZFbGVtZW50KGVsZW1lbnQuZ2V0KCksIEVkaXRpbmdTdHlsZTo6T3ZlcnJpZGVWYWx1
ZXMpOwotICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKGVsZW1lbnQpOworICAg
ICAgICAgICAgZXh0cmFjdGVkU3R5bGUtPm1lcmdlSW5saW5lU3R5bGVPZkVsZW1lbnQoJmVsZW1l
bnQsIEVkaXRpbmdTdHlsZTo6T3ZlcnJpZGVWYWx1ZXMpOworICAgICAgICByZW1vdmVOb2RlUHJl
c2VydmluZ0NoaWxkcmVuKCZlbGVtZW50KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
CiAgICAgYm9vbCByZW1vdmVkID0gZmFsc2U7Ci0gICAgaWYgKHJlbW92ZUltcGxpY2l0bHlTdHls
ZWRFbGVtZW50KHN0eWxlLCBlbGVtZW50LmdldCgpLCBtb2RlLCBleHRyYWN0ZWRTdHlsZSkpCisg
ICAgaWYgKHJlbW92ZUltcGxpY2l0bHlTdHlsZWRFbGVtZW50KHN0eWxlLCAmZWxlbWVudCwgbW9k
ZSwgZXh0cmFjdGVkU3R5bGUpKQogICAgICAgICByZW1vdmVkID0gdHJ1ZTsKIAotICAgIGlmICgh
ZWxlbWVudC0+aXNDb25uZWN0ZWQoKSkKKyAgICBpZiAoIWVsZW1lbnQuaXNDb25uZWN0ZWQoKSkK
ICAgICAgICAgcmV0dXJuIHJlbW92ZWQ7CiAKICAgICAvLyBJZiB0aGUgbm9kZSB3YXMgY29udmVy
dGVkIHRvIGEgc3BhbiwgdGhlIHNwYW4gbWF5IHN0aWxsIGNvbnRhaW4gcmVsZXZhbnQKICAgICAv
LyBzdHlsZXMgd2hpY2ggbXVzdCBiZSByZW1vdmVkIChlLmcuIDxiIHN0eWxlPSdmb250LXdlaWdo
dDogYm9sZCc+KQotICAgIGlmIChyZW1vdmVDU1NTdHlsZShzdHlsZSwgZWxlbWVudC5nZXQoKSwg
bW9kZSwgZXh0cmFjdGVkU3R5bGUpKQorICAgIGlmIChyZW1vdmVDU1NTdHlsZShzdHlsZSwgJmVs
ZW1lbnQsIG1vZGUsIGV4dHJhY3RlZFN0eWxlKSkKICAgICAgICAgcmVtb3ZlZCA9IHRydWU7CiAK
ICAgICByZXR1cm4gcmVtb3ZlZDsKQEAgLTk5Nyw3ICs5OTUsNyBAQCBIVE1MRWxlbWVudCogQXBw
bHlTdHlsZUNvbW1hbmQ6OmhpZ2hlc3RBbmNlc3RvcldpdGhDb25mbGljdGluZ0lubGluZVN0eWxl
KEVkaXRpbgogICAgIE5vZGUqIHVuc3BsaXR0YWJsZUVsZW1lbnQgPSB1bnNwbGl0dGFibGVFbGVt
ZW50Rm9yUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpKTsKIAogICAg
IGZvciAoTm9kZSogYW5jZXN0b3IgPSBub2RlOyBhbmNlc3RvcjsgYW5jZXN0b3IgPSBhbmNlc3Rv
ci0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChpczxIVE1MRWxlbWVudD4oKmFuY2VzdG9y
KSAmJiBzaG91bGRSZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KHN0eWxlLCBkb3duY2FzdDxI
VE1MRWxlbWVudD4oYW5jZXN0b3IpKSkKKyAgICAgICAgaWYgKGlzPEhUTUxFbGVtZW50PigqYW5j
ZXN0b3IpICYmIHNob3VsZFJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoc3R5bGUsIGRvd25j
YXN0PEhUTUxFbGVtZW50PigqYW5jZXN0b3IpKSkKICAgICAgICAgICAgIHJlc3VsdCA9IGRvd25j
YXN0PEhUTUxFbGVtZW50PihhbmNlc3Rvcik7CiAgICAgICAgIC8vIFNob3VsZCBzdG9wIGF0IHRo
ZSBlZGl0YWJsZSByb290IChjYW5ub3QgY3Jvc3MgZWRpdGluZyBib3VuZGFyeSkgYW5kCiAgICAg
ICAgIC8vIGFsc28gc3RvcCBhdCB0aGUgdW5zcGxpdHRhYmxlIGVsZW1lbnQgdG8gYmUgY29uc2lz
dGVudCB3aXRoIG90aGVyIFVBcwpAQCAtMTAwOCwzMSArMTAwNiwyOSBAQCBIVE1MRWxlbWVudCog
QXBwbHlTdHlsZUNvbW1hbmQ6OmhpZ2hlc3RBbmNlc3RvcldpdGhDb25mbGljdGluZ0lubGluZVN0
eWxlKEVkaXRpbgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQXBwbHlTdHlsZUNvbW1h
bmQ6OmFwcGx5SW5saW5lU3R5bGVUb1B1c2hEb3duKE5vZGUqIG5vZGUsIEVkaXRpbmdTdHlsZSog
c3R5bGUpCit2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlVG9QdXNoRG93
bihOb2RlJiBub2RlLCBFZGl0aW5nU3R5bGUqIHN0eWxlKQogewotICAgIEFTU0VSVChub2RlKTsK
LQotICAgIG5vZGUtPmRvY3VtZW50KCkudXBkYXRlU3R5bGVJZk5lZWRlZCgpOworICAgIG5vZGUu
ZG9jdW1lbnQoKS51cGRhdGVTdHlsZUlmTmVlZGVkKCk7CiAKLSAgICBpZiAoIXN0eWxlIHx8IHN0
eWxlLT5pc0VtcHR5KCkgfHwgIW5vZGUtPnJlbmRlcmVyKCkgfHwgaXM8SFRNTElGcmFtZUVsZW1l
bnQ+KCpub2RlKSkKKyAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5pc0VtcHR5KCkgfHwgIW5vZGUu
cmVuZGVyZXIoKSB8fCBpczxIVE1MSUZyYW1lRWxlbWVudD4obm9kZSkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IG5ld0lubGluZVN0eWxlID0gc3R5bGU7Ci0g
ICAgaWYgKGlzPEhUTUxFbGVtZW50Pigqbm9kZSkgJiYgZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KG5v
ZGUpLT5pbmxpbmVTdHlsZSgpKSB7CisgICAgaWYgKGlzPEhUTUxFbGVtZW50Pihub2RlKSAmJiBk
b3duY2FzdDxIVE1MRWxlbWVudD4obm9kZSkuaW5saW5lU3R5bGUoKSkgewogICAgICAgICBuZXdJ
bmxpbmVTdHlsZSA9IHN0eWxlLT5jb3B5KCk7Ci0gICAgICAgIG5ld0lubGluZVN0eWxlLT5tZXJn
ZUlubGluZVN0eWxlT2ZFbGVtZW50KGRvd25jYXN0PEhUTUxFbGVtZW50Pihub2RlKSwgRWRpdGlu
Z1N0eWxlOjpPdmVycmlkZVZhbHVlcyk7CisgICAgICAgIG5ld0lubGluZVN0eWxlLT5tZXJnZUlu
bGluZVN0eWxlT2ZFbGVtZW50KCZkb3duY2FzdDxIVE1MRWxlbWVudD4obm9kZSksIEVkaXRpbmdT
dHlsZTo6T3ZlcnJpZGVWYWx1ZXMpOwogICAgIH0KIAogICAgIC8vIFNpbmNlIGFkZElubGluZVN0
eWxlSWZOZWVkZWQgY2FuJ3QgYWRkIHN0eWxlcyB0byBibG9jay1mbG93IHJlbmRlciBvYmplY3Rz
LCBhZGQgc3R5bGUgYXR0cmlidXRlIGluc3RlYWQuCiAgICAgLy8gRklYTUU6IGFwcGx5SW5saW5l
U3R5bGVUb1JhbmdlIHNob3VsZCBiZSB1c2VkIGhlcmUgaW5zdGVhZC4KLSAgICBpZiAoKG5vZGUt
PnJlbmRlcmVyKCktPmlzUmVuZGVyQmxvY2tGbG93KCkgfHwgbm9kZS0+aGFzQ2hpbGROb2Rlcygp
KSAmJiBpczxIVE1MRWxlbWVudD4oKm5vZGUpKSB7Ci0gICAgICAgIHNldE5vZGVBdHRyaWJ1dGUo
ZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KG5vZGUpLCBzdHlsZUF0dHIsIG5ld0lubGluZVN0eWxlLT5z
dHlsZSgpLT5hc1RleHQoKSk7CisgICAgaWYgKChub2RlLnJlbmRlcmVyKCktPmlzUmVuZGVyQmxv
Y2tGbG93KCkgfHwgbm9kZS5oYXNDaGlsZE5vZGVzKCkpICYmIGlzPEhUTUxFbGVtZW50Pihub2Rl
KSkgeworICAgICAgICBzZXROb2RlQXR0cmlidXRlKCZkb3duY2FzdDxIVE1MRWxlbWVudD4obm9k
ZSksIHN0eWxlQXR0ciwgbmV3SW5saW5lU3R5bGUtPnN0eWxlKCktPmFzVGV4dCgpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChub2RlLT5yZW5kZXJlcigpLT5pc1RleHQoKSAm
JiBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4obm9kZS0+cmVuZGVyZXIoKSktPmlzQWxsQ29sbGFw
c2libGVXaGl0ZXNwYWNlKCkpCisgICAgaWYgKG5vZGUucmVuZGVyZXIoKS0+aXNUZXh0KCkgJiYg
c3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KG5vZGUucmVuZGVyZXIoKSktPmlzQWxsQ29sbGFwc2li
bGVXaGl0ZXNwYWNlKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAobm9kZS0+cmVuZGVyZXIo
KS0+aXNCUigpICYmICFub2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpLnByZXNlcnZlTmV3bGluZSgp
KQorICAgIGlmIChub2RlLnJlbmRlcmVyKCktPmlzQlIoKSAmJiAhbm9kZS5yZW5kZXJlcigpLT5z
dHlsZSgpLnByZXNlcnZlTmV3bGluZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBXZSBj
YW4ndCB3cmFwIG5vZGUgd2l0aCB0aGUgc3R5bGVkIGVsZW1lbnQgaGVyZSBiZWNhdXNlIG5ldyBz
dHlsZWQgZWxlbWVudCB3aWxsIG5ldmVyIGJlIHJlbW92ZWQgaWYgd2UgZGlkLgpAQCAtMTA2NCw3
ICsxMDYwLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cHVzaERvd25JbmxpbmVTdHlsZUFy
b3VuZE5vZGUoRWRpdGluZ1N0eWxlKiBzdHlsZSwgTm9kZSoKIAogICAgICAgICBSZWZQdHI8RWRp
dGluZ1N0eWxlPiBzdHlsZVRvUHVzaERvd24gPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZSgpOwogICAg
ICAgICBpZiAoaXM8SFRNTEVsZW1lbnQ+KCpjdXJyZW50KSkKLSAgICAgICAgICAgIHJlbW92ZUlu
bGluZVN0eWxlRnJvbUVsZW1lbnQoc3R5bGUsIGRvd25jYXN0PEhUTUxFbGVtZW50PihjdXJyZW50
LmdldCgpKSwgUmVtb3ZlSWZOZWVkZWQsIHN0eWxlVG9QdXNoRG93bi5nZXQoKSk7CisgICAgICAg
ICAgICByZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KHN0eWxlLCBkb3duY2FzdDxIVE1MRWxl
bWVudD4oKmN1cnJlbnQpLCBSZW1vdmVJZk5lZWRlZCwgc3R5bGVUb1B1c2hEb3duLmdldCgpKTsK
IAogICAgICAgICAvLyBUaGUgaW5uZXIgbG9vcCB3aWxsIGdvIHRocm91Z2ggY2hpbGRyZW4gb24g
ZWFjaCBsZXZlbAogICAgICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGFnZ3JlZ2F0ZSBpbmxpbmUg
Y2hpbGQgZWxlbWVudHMgdG9nZXRoZXIgc28gdGhhdCB3ZSBkb24ndCB3cmFwIGVhY2ggY2hpbGQg
c2VwYXJhdGVseS4KQEAgLTEwNzQsMTYgKzEwNzAsMTYgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFu
ZDo6cHVzaERvd25JbmxpbmVTdHlsZUFyb3VuZE5vZGUoRWRpdGluZ1N0eWxlKiBzdHlsZSwgTm9k
ZSoKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmICghY2hpbGQuY29u
dGFpbnModGFyZ2V0Tm9kZSkgJiYgZWxlbWVudHNUb1B1c2hEb3duLnNpemUoKSkgewogICAgICAg
ICAgICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGVsZW1lbnRzVG9QdXNoRG93bikgewotICAg
ICAgICAgICAgICAgICAgICBSZWZQdHI8RWxlbWVudD4gd3JhcHBlciA9IGVsZW1lbnQtPmNsb25l
RWxlbWVudFdpdGhvdXRDaGlsZHJlbihkb2N1bWVudCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
YXV0byB3cmFwcGVyID0gZWxlbWVudC0+Y2xvbmVFbGVtZW50V2l0aG91dENoaWxkcmVuKGRvY3Vt
ZW50KCkpOwogICAgICAgICAgICAgICAgICAgICB3cmFwcGVyLT5yZW1vdmVBdHRyaWJ1dGUoc3R5
bGVBdHRyKTsKLSAgICAgICAgICAgICAgICAgICAgc3Vycm91bmROb2RlUmFuZ2VXaXRoRWxlbWVu
dCgmY2hpbGQsICZjaGlsZCwgd3JhcHBlcik7CisgICAgICAgICAgICAgICAgICAgIHN1cnJvdW5k
Tm9kZVJhbmdlV2l0aEVsZW1lbnQoY2hpbGQsIGNoaWxkLCBXVEZNb3ZlKHdyYXBwZXIpKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIEFwcGx5IHN0
eWxlIHRvIGFsbCBub2RlcyBjb250YWluaW5nIHRhcmdldE5vZGUgYW5kIHRoZWlyIHNpYmxpbmdz
IGJ1dCBOT1QgdG8gdGFyZ2V0Tm9kZQogICAgICAgICAgICAgLy8gQnV0IGlmIHdlJ3ZlIHJlbW92
ZWQgc3R5bGVkRWxlbWVudCB0aGVuIGFsd2F5cyBhcHBseSB0aGUgc3R5bGUuCiAgICAgICAgICAg
ICBpZiAoJmNoaWxkICE9IHRhcmdldE5vZGUgfHwgc3R5bGVkRWxlbWVudCkKLSAgICAgICAgICAg
ICAgICBhcHBseUlubGluZVN0eWxlVG9QdXNoRG93bigmY2hpbGQsIHN0eWxlVG9QdXNoRG93bi5n
ZXQoKSk7CisgICAgICAgICAgICAgICAgYXBwbHlJbmxpbmVTdHlsZVRvUHVzaERvd24oY2hpbGQs
IHN0eWxlVG9QdXNoRG93bi5nZXQoKSk7CiAKICAgICAgICAgICAgIC8vIFdlIGZvdW5kIHRoZSBu
ZXh0IG5vZGUgZm9yIHRoZSBvdXRlciBsb29wIChjb250YWlucyB0YXJnZXROb2RlKQogICAgICAg
ICAgICAgLy8gV2hlbiByZWFjaGVkIHRhcmdldE5vZGUsIHN0b3AgdGhlIG91dGVyIGxvb3AgdXBv
biB0aGUgY29tcGxldGlvbiBvZiB0aGUgY3VycmVudCBpbm5lciBsb29wCkBAIC0xMTQ3LDcgKzEx
NDMsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsZShFZGl0aW5n
U3R5bGUqIHN0eWxlLCBjb25zdCBQb3NpdGlvbiYgcwogICAgICAgICAgICAgICAgIGNoaWxkTm9k
ZSA9IGVsZW1lbnQtPmZpcnN0Q2hpbGQoKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
cmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudChzdHlsZSwgZWxlbWVudC5wdHIoKSwgUmVtb3Zl
SWZOZWVkZWQsIHN0eWxlVG9QdXNoRG93bi5nZXQoKSk7CisgICAgICAgICAgICByZW1vdmVJbmxp
bmVTdHlsZUZyb21FbGVtZW50KHN0eWxlLCBlbGVtZW50LCBSZW1vdmVJZk5lZWRlZCwgc3R5bGVU
b1B1c2hEb3duLmdldCgpKTsKICAgICAgICAgICAgIGlmICghZWxlbWVudC0+aXNDb25uZWN0ZWQo
KSkgewogICAgICAgICAgICAgICAgIGlmIChzLmRlcHJlY2F0ZWROb2RlKCkgPT0gZWxlbWVudC5w
dHIoKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSBlbGVtIG11c3QgaGF2ZSBiZWVu
IGZ1bGx5IHNlbGVjdGVkLCBhbmQgaXQgaXMgYXQgdGhlIHN0YXJ0CkBAIC0xMTY2LDcgKzExNjIs
NyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsZShFZGl0aW5nU3R5
bGUqIHN0eWxlLCBjb25zdCBQb3NpdGlvbiYgcwogCiAgICAgICAgICAgICBpZiAoc3R5bGVUb1B1
c2hEb3duKSB7CiAgICAgICAgICAgICAgICAgZm9yICg7IGNoaWxkTm9kZTsgY2hpbGROb2RlID0g
Y2hpbGROb2RlLT5uZXh0U2libGluZygpKQotICAgICAgICAgICAgICAgICAgICBhcHBseUlubGlu
ZVN0eWxlVG9QdXNoRG93bihjaGlsZE5vZGUuZ2V0KCksIHN0eWxlVG9QdXNoRG93bi5nZXQoKSk7
CisgICAgICAgICAgICAgICAgICAgIGFwcGx5SW5saW5lU3R5bGVUb1B1c2hEb3duKCpjaGlsZE5v
ZGUsIHN0eWxlVG9QdXNoRG93bi5nZXQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKG5vZGUgPT0gZW5kLmRlcHJlY2F0ZWROb2RlKCkpCkBAIC0xMjYzLDcgKzEyNTks
NyBAQCBib29sIEFwcGx5U3R5bGVDb21tYW5kOjpzaG91bGRTcGxpdFRleHRFbGVtZW50KEVsZW1l
bnQqIGVsZW1lbnQsIEVkaXRpbmdTdHlsZSogcwogICAgIGlmICghaXM8SFRNTEVsZW1lbnQ+KGVs
ZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gc2hvdWxkUmVtb3Zl
SW5saW5lU3R5bGVGcm9tRWxlbWVudChzdHlsZSwgJmRvd25jYXN0PEhUTUxFbGVtZW50PigqZWxl
bWVudCkpOworICAgIHJldHVybiBzaG91bGRSZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KHN0
eWxlLCBkb3duY2FzdDxIVE1MRWxlbWVudD4oKmVsZW1lbnQpKTsKIH0KIAogYm9vbCBBcHBseVN0
eWxlQ29tbWFuZDo6aXNWYWxpZENhcmV0UG9zaXRpb25JblRleHROb2RlKGNvbnN0IFBvc2l0aW9u
JiBwb3NpdGlvbikKQEAgLTEzNDAsMjQgKzEzMzYsMjEgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFu
ZDo6bWVyZ2VFbmRXaXRoTmV4dElmSWRlbnRpY2FsKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29u
c3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6c3Vycm91
bmROb2RlUmFuZ2VXaXRoRWxlbWVudChQYXNzUmVmUHRyPE5vZGU+IHBhc3NlZFN0YXJ0Tm9kZSwg
UGFzc1JlZlB0cjxOb2RlPiBlbmROb2RlLCBQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnRUb0lu
c2VydCkKK3ZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnN1cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1l
bnQoTm9kZSYgc3RhcnROb2RlLCBOb2RlJiBlbmROb2RlLCBSZWY8RWxlbWVudD4mJiBlbGVtZW50
VG9JbnNlcnQpCiB7Ci0gICAgQVNTRVJUKHBhc3NlZFN0YXJ0Tm9kZSk7Ci0gICAgQVNTRVJUKGVu
ZE5vZGUpOwotICAgIEFTU0VSVChlbGVtZW50VG9JbnNlcnQpOwotICAgIFJlZlB0cjxOb2RlPiBz
dGFydE5vZGUgPSBwYXNzZWRTdGFydE5vZGU7Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQg
PSBlbGVtZW50VG9JbnNlcnQ7CisgICAgUmVmPE5vZGU+IHByb3RlY3RlZFN0YXJ0Tm9kZSA9IHN0
YXJ0Tm9kZTsKKyAgICBSZWY8RWxlbWVudD4gZWxlbWVudCA9IFdURk1vdmUoZWxlbWVudFRvSW5z
ZXJ0KTsKIAotICAgIGluc2VydE5vZGVCZWZvcmUoZWxlbWVudCwgc3RhcnROb2RlKTsKKyAgICBp
bnNlcnROb2RlQmVmb3JlKGVsZW1lbnQucHRyKCksICZzdGFydE5vZGUpOwogCi0gICAgUmVmUHRy
PE5vZGU+IG5vZGUgPSBzdGFydE5vZGU7CisgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSAmc3RhcnRO
b2RlOwogICAgIHdoaWxlIChub2RlKSB7CiAgICAgICAgIFJlZlB0cjxOb2RlPiBuZXh0ID0gbm9k
ZS0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgaWYgKGlzRWRpdGFibGVOb2RlKCpub2RlKSkgewog
ICAgICAgICAgICAgcmVtb3ZlTm9kZShub2RlKTsKLSAgICAgICAgICAgIGFwcGVuZE5vZGUobm9k
ZSwgZWxlbWVudCk7CisgICAgICAgICAgICBhcHBlbmROb2RlKG5vZGUsIGVsZW1lbnQucHRyKCkp
OwogICAgICAgICB9Ci0gICAgICAgIGlmIChub2RlID09IGVuZE5vZGUpCisgICAgICAgIGlmIChu
b2RlID09ICZlbmROb2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIG5vZGUgPSBuZXh0
OwogICAgIH0KQEAgLTEzNjUsOCArMTM1OCw4IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnN1
cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1lbnQoUGFzc1JlZlB0cjxOb2RlPiBwYXNzZWRTdGFyCiAg
ICAgUmVmUHRyPE5vZGU+IG5leHRTaWJsaW5nID0gZWxlbWVudC0+bmV4dFNpYmxpbmcoKTsKICAg
ICBSZWZQdHI8Tm9kZT4gcHJldmlvdXNTaWJsaW5nID0gZWxlbWVudC0+cHJldmlvdXNTaWJsaW5n
KCk7CiAKLSAgICBpZiAobmV4dFNpYmxpbmcgJiYgbmV4dFNpYmxpbmctPmhhc0VkaXRhYmxlU3R5
bGUoKSAmJiBhcmVJZGVudGljYWxFbGVtZW50cygqZWxlbWVudCwgKm5leHRTaWJsaW5nKSkKLSAg
ICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhlbGVtZW50LmdldCgpLCBkb3duY2FzdDxFbGVt
ZW50PihuZXh0U2libGluZy5nZXQoKSkpOworICAgIGlmIChuZXh0U2libGluZyAmJiBuZXh0U2li
bGluZy0+aGFzRWRpdGFibGVTdHlsZSgpICYmIGFyZUlkZW50aWNhbEVsZW1lbnRzKGVsZW1lbnQs
ICpuZXh0U2libGluZykpCisgICAgICAgIG1lcmdlSWRlbnRpY2FsRWxlbWVudHMoZWxlbWVudC5w
dHIoKSwgZG93bmNhc3Q8RWxlbWVudD4obmV4dFNpYmxpbmcuZ2V0KCkpKTsKIAogICAgIGlmIChp
czxFbGVtZW50PihwcmV2aW91c1NpYmxpbmcuZ2V0KCkpICYmIHByZXZpb3VzU2libGluZy0+aGFz
RWRpdGFibGVTdHlsZSgpKSB7CiAgICAgICAgIGF1dG8qIG1lcmdlZEVsZW1lbnQgPSBwcmV2aW91
c1NpYmxpbmctPm5leHRTaWJsaW5nKCk7CkBAIC0xMzk5LDM3ICsxMzkyLDM3IEBAIHZvaWQgQXBw
bHlTdHlsZUNvbW1hbmQ6OmFkZEJsb2NrU3R5bGUoY29uc3QgU3R5bGVDaGFuZ2UmIHN0eWxlQ2hh
bmdlLCBIVE1MRWxlbWVuCiAgICAgc2V0Tm9kZUF0dHJpYnV0ZShibG9jaywgc3R5bGVBdHRyLCBj
c3NUZXh0LnRvU3RyaW5nKCkpOwogfQogCi12b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphZGRJbmxp
bmVTdHlsZUlmTmVlZGVkKEVkaXRpbmdTdHlsZSogc3R5bGUsIFBhc3NSZWZQdHI8Tm9kZT4gcGFz
c2VkU3RhcnQsIFBhc3NSZWZQdHI8Tm9kZT4gcGFzc2VkRW5kLCBFQWRkU3R5bGVkRWxlbWVudCBh
ZGRTdHlsZWRFbGVtZW50KQordm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YWRkSW5saW5lU3R5bGVJ
Zk5lZWRlZChFZGl0aW5nU3R5bGUqIHN0eWxlLCBOb2RlJiBzdGFydCwgTm9kZSYgZW5kLCBFQWRk
U3R5bGVkRWxlbWVudCBhZGRTdHlsZWRFbGVtZW50KQogewotICAgIGlmICghcGFzc2VkU3RhcnQg
fHwgIXBhc3NlZEVuZCB8fCAhcGFzc2VkU3RhcnQtPmlzQ29ubmVjdGVkKCkgfHwgIXBhc3NlZEVu
ZC0+aXNDb25uZWN0ZWQoKSkKKyAgICBpZiAoIXN0YXJ0LmlzQ29ubmVjdGVkKCkgfHwgIWVuZC5p
c0Nvbm5lY3RlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8Tm9kZT4gc3RhcnQg
PSBwYXNzZWRTdGFydDsKKyAgICBSZWY8Tm9kZT4gcHJvdGVjdGVkU3RhcnQgPSBzdGFydDsKICAg
ICBSZWZQdHI8Tm9kZT4gZHVtbXlFbGVtZW50OwogICAgIFN0eWxlQ2hhbmdlIHN0eWxlQ2hhbmdl
KHN0eWxlLCBwb3NpdGlvblRvQ29tcHV0ZUlubGluZVN0eWxlQ2hhbmdlKHN0YXJ0LCBkdW1teUVs
ZW1lbnQpKTsKIAogICAgIGlmIChkdW1teUVsZW1lbnQpCiAgICAgICAgIHJlbW92ZU5vZGUoZHVt
bXlFbGVtZW50KTsKIAotICAgIGFwcGx5SW5saW5lU3R5bGVDaGFuZ2Uoc3RhcnQsIHBhc3NlZEVu
ZCwgc3R5bGVDaGFuZ2UsIGFkZFN0eWxlZEVsZW1lbnQpOworICAgIGFwcGx5SW5saW5lU3R5bGVD
aGFuZ2Uoc3RhcnQsIGVuZCwgc3R5bGVDaGFuZ2UsIGFkZFN0eWxlZEVsZW1lbnQpOwogfQogCi1Q
b3NpdGlvbiBBcHBseVN0eWxlQ29tbWFuZDo6cG9zaXRpb25Ub0NvbXB1dGVJbmxpbmVTdHlsZUNo
YW5nZShQYXNzUmVmUHRyPE5vZGU+IHN0YXJ0Tm9kZSwgUmVmUHRyPE5vZGU+JiBkdW1teUVsZW1l
bnQpCitQb3NpdGlvbiBBcHBseVN0eWxlQ29tbWFuZDo6cG9zaXRpb25Ub0NvbXB1dGVJbmxpbmVT
dHlsZUNoYW5nZShOb2RlJiBzdGFydE5vZGUsIFJlZlB0cjxOb2RlPiYgZHVtbXlFbGVtZW50KQog
ewogICAgIC8vIEl0J3Mgb2theSB0byBvYnRhaW4gdGhlIHN0eWxlIGF0IHRoZSBzdGFydE5vZGUg
YmVjYXVzZSB3ZSd2ZSByZW1vdmVkIGFsbCByZWxldmFudCBzdHlsZXMgZnJvbSB0aGUgY3VycmVu
dCBydW4uCi0gICAgaWYgKCFpczxFbGVtZW50Pigqc3RhcnROb2RlKSkgeworICAgIGlmICghaXM8
RWxlbWVudD4oc3RhcnROb2RlKSkgewogICAgICAgICBkdW1teUVsZW1lbnQgPSBjcmVhdGVTdHls
ZVNwYW5FbGVtZW50KGRvY3VtZW50KCkpOwotICAgICAgICBpbnNlcnROb2RlQXQoZHVtbXlFbGVt
ZW50LCBwb3NpdGlvbkJlZm9yZU5vZGUoc3RhcnROb2RlLmdldCgpKSk7CisgICAgICAgIGluc2Vy
dE5vZGVBdChkdW1teUVsZW1lbnQsIHBvc2l0aW9uQmVmb3JlTm9kZSgmc3RhcnROb2RlKSk7CiAg
ICAgICAgIHJldHVybiBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoZHVtbXlFbGVtZW50Lmdl
dCgpKTsKICAgICB9CiAKLSAgICByZXR1cm4gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKHN0
YXJ0Tm9kZS5nZXQoKSk7CisgICAgcmV0dXJuIGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZSgm
c3RhcnROb2RlKTsKIH0KIAotdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHls
ZUNoYW5nZShQYXNzUmVmUHRyPE5vZGU+IHBhc3NlZFN0YXJ0LCBQYXNzUmVmUHRyPE5vZGU+IHBh
c3NlZEVuZCwgU3R5bGVDaGFuZ2UmIHN0eWxlQ2hhbmdlLCBFQWRkU3R5bGVkRWxlbWVudCBhZGRT
dHlsZWRFbGVtZW50KQordm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZUNo
YW5nZShOb2RlJiBwYXNzZWRTdGFydCwgTm9kZSYgcGFzc2VkRW5kLCBTdHlsZUNoYW5nZSYgc3R5
bGVDaGFuZ2UsIEVBZGRTdHlsZWRFbGVtZW50IGFkZFN0eWxlZEVsZW1lbnQpCiB7Ci0gICAgUmVm
UHRyPE5vZGU+IHN0YXJ0Tm9kZSA9IHBhc3NlZFN0YXJ0OwotICAgIFJlZlB0cjxOb2RlPiBlbmRO
b2RlID0gcGFzc2VkRW5kOworICAgIFJlZlB0cjxOb2RlPiBzdGFydE5vZGUgPSAmcGFzc2VkU3Rh
cnQ7CisgICAgUmVmUHRyPE5vZGU+IGVuZE5vZGUgPSAmcGFzc2VkRW5kOwogICAgIEFTU0VSVChz
dGFydE5vZGUtPmlzQ29ubmVjdGVkKCkpOwogICAgIEFTU0VSVChlbmROb2RlLT5pc0Nvbm5lY3Rl
ZCgpKTsKIApAQCAtMTQ2OCw3ICsxNDYxLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBw
bHlJbmxpbmVTdHlsZUNoYW5nZShQYXNzUmVmUHRyPE5vZGU+IHBhc3NlZFN0YXJ0LCBQYXMKICAg
ICAgICAgICAgICAgICBmb250RWxlbWVudC0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihmYWNlQXR0ciwgc3R5bGVDaGFuZ2UuZm9udEZhY2UoKSk7CiAgICAgICAgICAgICBpZiAo
c3R5bGVDaGFuZ2UuYXBwbHlGb250U2l6ZSgpKQogICAgICAgICAgICAgICAgIGZvbnRFbGVtZW50
LT5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHNpemVBdHRyLCBzdHlsZUNoYW5n
ZS5mb250U2l6ZSgpKTsKLSAgICAgICAgICAgIHN1cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1lbnQo
c3RhcnROb2RlLCBlbmROb2RlLCBmb250RWxlbWVudC5nZXQoKSk7CisgICAgICAgICAgICBzdXJy
b3VuZE5vZGVSYW5nZVdpdGhFbGVtZW50KCpzdGFydE5vZGUsICplbmROb2RlLCBXVEZNb3ZlKGZv
bnRFbGVtZW50KSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE0ODMsMjkgKzE0NzYsMjkgQEAg
dm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZUNoYW5nZShQYXNzUmVmUHRy
PE5vZGU+IHBhc3NlZFN0YXJ0LCBQYXMKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGF1
dG8gc3R5bGVFbGVtZW50ID0gY3JlYXRlU3R5bGVTcGFuRWxlbWVudChkb2N1bWVudCgpKTsKICAg
ICAgICAgICAgIHN0eWxlRWxlbWVudC0+c2V0QXR0cmlidXRlKHN0eWxlQXR0ciwgc3R5bGVUb01l
cmdlLT5hc1RleHQoKSk7Ci0gICAgICAgICAgICBzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVtZW50
KHN0YXJ0Tm9kZSwgZW5kTm9kZSwgV1RGTW92ZShzdHlsZUVsZW1lbnQpKTsKKyAgICAgICAgICAg
IHN1cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1lbnQoKnN0YXJ0Tm9kZSwgKmVuZE5vZGUsIFdURk1v
dmUoc3R5bGVFbGVtZW50KSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoc3R5bGVDaGFu
Z2UuYXBwbHlCb2xkKCkpCi0gICAgICAgIHN1cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1lbnQoc3Rh
cnROb2RlLCBlbmROb2RlLCBjcmVhdGVIVE1MRWxlbWVudChkb2N1bWVudCgpLCBiVGFnKSk7Cisg
ICAgICAgIHN1cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1lbnQoKnN0YXJ0Tm9kZSwgKmVuZE5vZGUs
IGNyZWF0ZUhUTUxFbGVtZW50KGRvY3VtZW50KCksIGJUYWcpKTsKIAogICAgIGlmIChzdHlsZUNo
YW5nZS5hcHBseUl0YWxpYygpKQotICAgICAgICBzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVtZW50
KHN0YXJ0Tm9kZSwgZW5kTm9kZSwgY3JlYXRlSFRNTEVsZW1lbnQoZG9jdW1lbnQoKSwgaVRhZykp
OworICAgICAgICBzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVtZW50KCpzdGFydE5vZGUsICplbmRO
b2RlLCBjcmVhdGVIVE1MRWxlbWVudChkb2N1bWVudCgpLCBpVGFnKSk7CiAKICAgICBpZiAoc3R5
bGVDaGFuZ2UuYXBwbHlVbmRlcmxpbmUoKSkKLSAgICAgICAgc3Vycm91bmROb2RlUmFuZ2VXaXRo
RWxlbWVudChzdGFydE5vZGUsIGVuZE5vZGUsIGNyZWF0ZUhUTUxFbGVtZW50KGRvY3VtZW50KCks
IHVUYWcpKTsKKyAgICAgICAgc3Vycm91bmROb2RlUmFuZ2VXaXRoRWxlbWVudCgqc3RhcnROb2Rl
LCAqZW5kTm9kZSwgY3JlYXRlSFRNTEVsZW1lbnQoZG9jdW1lbnQoKSwgdVRhZykpOwogCiAgICAg
aWYgKHN0eWxlQ2hhbmdlLmFwcGx5TGluZVRocm91Z2goKSkKLSAgICAgICAgc3Vycm91bmROb2Rl
UmFuZ2VXaXRoRWxlbWVudChzdGFydE5vZGUsIGVuZE5vZGUsIGNyZWF0ZUhUTUxFbGVtZW50KGRv
Y3VtZW50KCksIHN0cmlrZVRhZykpOworICAgICAgICBzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVt
ZW50KCpzdGFydE5vZGUsICplbmROb2RlLCBjcmVhdGVIVE1MRWxlbWVudChkb2N1bWVudCgpLCBz
dHJpa2VUYWcpKTsKIAogICAgIGlmIChzdHlsZUNoYW5nZS5hcHBseVN1YnNjcmlwdCgpKQotICAg
ICAgICBzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVtZW50KHN0YXJ0Tm9kZSwgZW5kTm9kZSwgY3Jl
YXRlSFRNTEVsZW1lbnQoZG9jdW1lbnQoKSwgc3ViVGFnKSk7CisgICAgICAgIHN1cnJvdW5kTm9k
ZVJhbmdlV2l0aEVsZW1lbnQoKnN0YXJ0Tm9kZSwgKmVuZE5vZGUsIGNyZWF0ZUhUTUxFbGVtZW50
KGRvY3VtZW50KCksIHN1YlRhZykpOwogICAgIGVsc2UgaWYgKHN0eWxlQ2hhbmdlLmFwcGx5U3Vw
ZXJzY3JpcHQoKSkKLSAgICAgICAgc3Vycm91bmROb2RlUmFuZ2VXaXRoRWxlbWVudChzdGFydE5v
ZGUsIGVuZE5vZGUsIGNyZWF0ZUhUTUxFbGVtZW50KGRvY3VtZW50KCksIHN1cFRhZykpOworICAg
ICAgICBzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVtZW50KCpzdGFydE5vZGUsICplbmROb2RlLCBj
cmVhdGVIVE1MRWxlbWVudChkb2N1bWVudCgpLCBzdXBUYWcpKTsKIAogICAgIGlmIChtX3N0eWxl
ZElubGluZUVsZW1lbnQgJiYgYWRkU3R5bGVkRWxlbWVudCA9PSBBZGRTdHlsZWRFbGVtZW50KQot
ICAgICAgICBzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVtZW50KHN0YXJ0Tm9kZSwgZW5kTm9kZSwg
bV9zdHlsZWRJbmxpbmVFbGVtZW50LT5jbG9uZUVsZW1lbnRXaXRob3V0Q2hpbGRyZW4oZG9jdW1l
bnQoKSkpOworICAgICAgICBzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVtZW50KCpzdGFydE5vZGUs
ICplbmROb2RlLCBtX3N0eWxlZElubGluZUVsZW1lbnQtPmNsb25lRWxlbWVudFdpdGhvdXRDaGls
ZHJlbihkb2N1bWVudCgpKSk7CiB9CiAKIGZsb2F0IEFwcGx5U3R5bGVDb21tYW5kOjpjb21wdXRl
ZEZvbnRTaXplKE5vZGUqIG5vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0FwcGx5U3R5bGVDb21tYW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVD
b21tYW5kLmgKaW5kZXggYTQ4NTQ5OGY5NWFmZmI3MDI3NmZmZWE2ZTdmYzFkNWQyMzNjOGI2NS4u
MjdmYWU2Njc0N2M1MzU1YjUzZTIwZDc1MWQzZWJkYmE1MWJjNWNiMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaApAQCAtNTUsOSArNTUsOSBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBcHBseVN0eWxlQ29tbWFuZChk
b2N1bWVudCwgc3R5bGUsIHN0YXJ0LCBlbmQsIGFjdGlvbiwgbGV2ZWwpKTsKICAgICB9Ci0gICAg
c3RhdGljIFJlZjxBcHBseVN0eWxlQ29tbWFuZD4gY3JlYXRlKFBhc3NSZWZQdHI8RWxlbWVudD4g
ZWxlbWVudCwgYm9vbCByZW1vdmVPbmx5ID0gZmFsc2UsIEVkaXRBY3Rpb24gYWN0aW9uID0gRWRp
dEFjdGlvbkNoYW5nZUF0dHJpYnV0ZXMpCisgICAgc3RhdGljIFJlZjxBcHBseVN0eWxlQ29tbWFu
ZD4gY3JlYXRlKFJlZjxFbGVtZW50PiYmIGVsZW1lbnQsIGJvb2wgcmVtb3ZlT25seSA9IGZhbHNl
LCBFZGl0QWN0aW9uIGFjdGlvbiA9IEVkaXRBY3Rpb25DaGFuZ2VBdHRyaWJ1dGVzKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQXBwbHlTdHlsZUNvbW1hbmQoZWxlbWVudCwg
cmVtb3ZlT25seSwgYWN0aW9uKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEFwcGx5
U3R5bGVDb21tYW5kKFdURk1vdmUoZWxlbWVudCksIHJlbW92ZU9ubHksIGFjdGlvbikpOwogICAg
IH0KICAgICBzdGF0aWMgUmVmPEFwcGx5U3R5bGVDb21tYW5kPiBjcmVhdGUoRG9jdW1lbnQmIGRv
Y3VtZW50LCBjb25zdCBFZGl0aW5nU3R5bGUqIHN0eWxlLCBJc0lubGluZUVsZW1lbnRUb1JlbW92
ZUZ1bmN0aW9uIGlzSW5saW5lRWxlbWVudFRvUmVtb3ZlRnVuY3Rpb24sIEVkaXRBY3Rpb24gYWN0
aW9uID0gRWRpdEFjdGlvbkNoYW5nZUF0dHJpYnV0ZXMpCiAgICAgewpAQCAtNjcsNyArNjcsNyBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEFwcGx5U3R5bGVDb21tYW5kKERvY3VtZW50JiwgY29u
c3QgRWRpdGluZ1N0eWxlKiwgRWRpdEFjdGlvbiwgRVByb3BlcnR5TGV2ZWwpOwogICAgIEFwcGx5
U3R5bGVDb21tYW5kKERvY3VtZW50JiwgY29uc3QgRWRpdGluZ1N0eWxlKiwgY29uc3QgUG9zaXRp
b24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kLCBFZGl0QWN0aW9uLCBFUHJvcGVydHlMZXZl
bCk7Ci0gICAgQXBwbHlTdHlsZUNvbW1hbmQoUGFzc1JlZlB0cjxFbGVtZW50PiwgYm9vbCByZW1v
dmVPbmx5LCBFZGl0QWN0aW9uKTsKKyAgICBBcHBseVN0eWxlQ29tbWFuZChSZWY8RWxlbWVudD4m
JiwgYm9vbCByZW1vdmVPbmx5LCBFZGl0QWN0aW9uKTsKICAgICBBcHBseVN0eWxlQ29tbWFuZChE
b2N1bWVudCYsIGNvbnN0IEVkaXRpbmdTdHlsZSosIGJvb2wgKCppc0lubGluZUVsZW1lbnRUb1Jl
bW92ZSkoY29uc3QgRWxlbWVudCopLCBFZGl0QWN0aW9uKTsKIAogICAgIHZvaWQgZG9BcHBseSgp
IG92ZXJyaWRlOwpAQCAtNzYsMTQgKzc2LDE0IEBAIHByaXZhdGU6CiAgICAgLy8gc3R5bGUtcmVt
b3ZhbCBoZWxwZXJzCiAgICAgYm9vbCBpc1N0eWxlZElubGluZUVsZW1lbnRUb1JlbW92ZShFbGVt
ZW50KikgY29uc3Q7CiAgICAgYm9vbCBzaG91bGRBcHBseUlubGluZVN0eWxlVG9SdW4oRWRpdGlu
Z1N0eWxlKiwgTm9kZSogcnVuU3RhcnQsIE5vZGUqIHBhc3RFbmROb2RlKTsKLSAgICB2b2lkIHJl
bW92ZUNvbmZsaWN0aW5nSW5saW5lU3R5bGVGcm9tUnVuKEVkaXRpbmdTdHlsZSosIFJlZlB0cjxO
b2RlPiYgcnVuU3RhcnQsIFJlZlB0cjxOb2RlPiYgcnVuRW5kLCBQYXNzUmVmUHRyPE5vZGU+IHBh
c3RFbmROb2RlKTsKLSAgICBib29sIHJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoRWRpdGlu
Z1N0eWxlKiwgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4sIElubGluZVN0eWxlUmVtb3ZhbE1vZGUg
PSBSZW1vdmVJZk5lZWRlZCwgRWRpdGluZ1N0eWxlKiBleHRyYWN0ZWRTdHlsZSA9IG51bGxwdHIp
OwotICAgIGlubGluZSBib29sIHNob3VsZFJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoRWRp
dGluZ1N0eWxlKiBzdHlsZSwgSFRNTEVsZW1lbnQqIGVsZW1lbnQpIHtyZXR1cm4gcmVtb3ZlSW5s
aW5lU3R5bGVGcm9tRWxlbWVudChzdHlsZSwgZWxlbWVudCwgUmVtb3ZlTm9uZSk7fQorICAgIHZv
aWQgcmVtb3ZlQ29uZmxpY3RpbmdJbmxpbmVTdHlsZUZyb21SdW4oRWRpdGluZ1N0eWxlKiwgUmVm
UHRyPE5vZGU+JiBydW5TdGFydCwgUmVmUHRyPE5vZGU+JiBydW5FbmQsIE5vZGUqIHBhc3RFbmRO
b2RlKTsKKyAgICBib29sIHJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoRWRpdGluZ1N0eWxl
KiwgSFRNTEVsZW1lbnQmLCBJbmxpbmVTdHlsZVJlbW92YWxNb2RlID0gUmVtb3ZlSWZOZWVkZWQs
IEVkaXRpbmdTdHlsZSogZXh0cmFjdGVkU3R5bGUgPSBudWxscHRyKTsKKyAgICBpbmxpbmUgYm9v
bCBzaG91bGRSZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KEVkaXRpbmdTdHlsZSogc3R5bGUs
IEhUTUxFbGVtZW50JiBlbGVtZW50KSB7cmV0dXJuIHJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1l
bnQoc3R5bGUsIGVsZW1lbnQsIFJlbW92ZU5vbmUpO30KICAgICB2b2lkIHJlcGxhY2VXaXRoU3Bh
bk9yUmVtb3ZlSWZXaXRob3V0QXR0cmlidXRlcyhIVE1MRWxlbWVudComKTsKICAgICBib29sIHJl
bW92ZUltcGxpY2l0bHlTdHlsZWRFbGVtZW50KEVkaXRpbmdTdHlsZSosIEhUTUxFbGVtZW50Kiwg
SW5saW5lU3R5bGVSZW1vdmFsTW9kZSwgRWRpdGluZ1N0eWxlKiBleHRyYWN0ZWRTdHlsZSk7CiAg
ICAgYm9vbCByZW1vdmVDU1NTdHlsZShFZGl0aW5nU3R5bGUqLCBIVE1MRWxlbWVudCosIElubGlu
ZVN0eWxlUmVtb3ZhbE1vZGUgPSBSZW1vdmVJZk5lZWRlZCwgRWRpdGluZ1N0eWxlKiBleHRyYWN0
ZWRTdHlsZSA9IG51bGxwdHIpOwogICAgIEhUTUxFbGVtZW50KiBoaWdoZXN0QW5jZXN0b3JXaXRo
Q29uZmxpY3RpbmdJbmxpbmVTdHlsZShFZGl0aW5nU3R5bGUqLCBOb2RlKik7Ci0gICAgdm9pZCBh
cHBseUlubGluZVN0eWxlVG9QdXNoRG93bihOb2RlKiwgRWRpdGluZ1N0eWxlKik7CisgICAgdm9p
ZCBhcHBseUlubGluZVN0eWxlVG9QdXNoRG93bihOb2RlJiwgRWRpdGluZ1N0eWxlKik7CiAgICAg
dm9pZCBwdXNoRG93bklubGluZVN0eWxlQXJvdW5kTm9kZShFZGl0aW5nU3R5bGUqLCBOb2RlKik7
CiAgICAgdm9pZCByZW1vdmVJbmxpbmVTdHlsZShFZGl0aW5nU3R5bGUqICwgY29uc3QgUG9zaXRp
b24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKTsKICAgICBib29sIG5vZGVGdWxseVNlbGVj
dGVkKEVsZW1lbnQmLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQp
IGNvbnN0OwpAQCAtOTQsMTEgKzk0LDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBhcHBseVJlbGF0
aXZlRm9udFN0eWxlQ2hhbmdlKEVkaXRpbmdTdHlsZSopOwogICAgIHZvaWQgYXBwbHlJbmxpbmVT
dHlsZShFZGl0aW5nU3R5bGUqKTsKICAgICB2b2lkIGZpeFJhbmdlQW5kQXBwbHlJbmxpbmVTdHls
ZShFZGl0aW5nU3R5bGUqLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBl
bmQpOwotICAgIHZvaWQgYXBwbHlJbmxpbmVTdHlsZVRvTm9kZVJhbmdlKEVkaXRpbmdTdHlsZSos
IFBhc3NSZWZQdHI8Tm9kZT4gc3RhcnROb2RlLCBQYXNzUmVmUHRyPE5vZGU+IHBhc3RFbmROb2Rl
KTsKKyAgICB2b2lkIGFwcGx5SW5saW5lU3R5bGVUb05vZGVSYW5nZShFZGl0aW5nU3R5bGUqLCBO
b2RlJiBzdGFydE5vZGUsIE5vZGUqIHBhc3RFbmROb2RlKTsKICAgICB2b2lkIGFkZEJsb2NrU3R5
bGUoY29uc3QgU3R5bGVDaGFuZ2UmLCBIVE1MRWxlbWVudCopOwotICAgIHZvaWQgYWRkSW5saW5l
U3R5bGVJZk5lZWRlZChFZGl0aW5nU3R5bGUqLCBQYXNzUmVmUHRyPE5vZGU+IHN0YXJ0LCBQYXNz
UmVmUHRyPE5vZGU+IGVuZCwgRUFkZFN0eWxlZEVsZW1lbnQgPSBBZGRTdHlsZWRFbGVtZW50KTsK
LSAgICBQb3NpdGlvbiBwb3NpdGlvblRvQ29tcHV0ZUlubGluZVN0eWxlQ2hhbmdlKFBhc3NSZWZQ
dHI8Tm9kZT4sIFJlZlB0cjxOb2RlPiYgZHVtbXlFbGVtZW50KTsKLSAgICB2b2lkIGFwcGx5SW5s
aW5lU3R5bGVDaGFuZ2UoUGFzc1JlZlB0cjxOb2RlPiBzdGFydE5vZGUsIFBhc3NSZWZQdHI8Tm9k
ZT4gZW5kTm9kZSwgU3R5bGVDaGFuZ2UmLCBFQWRkU3R5bGVkRWxlbWVudCk7CisgICAgdm9pZCBh
ZGRJbmxpbmVTdHlsZUlmTmVlZGVkKEVkaXRpbmdTdHlsZSosIE5vZGUmIHN0YXJ0LCBOb2RlJiBl
bmQsIEVBZGRTdHlsZWRFbGVtZW50ID0gQWRkU3R5bGVkRWxlbWVudCk7CisgICAgUG9zaXRpb24g
cG9zaXRpb25Ub0NvbXB1dGVJbmxpbmVTdHlsZUNoYW5nZShOb2RlJiwgUmVmUHRyPE5vZGU+JiBk
dW1teUVsZW1lbnQpOworICAgIHZvaWQgYXBwbHlJbmxpbmVTdHlsZUNoYW5nZShOb2RlJiBzdGFy
dE5vZGUsIE5vZGUmIGVuZE5vZGUsIFN0eWxlQ2hhbmdlJiwgRUFkZFN0eWxlZEVsZW1lbnQpOwog
ICAgIHZvaWQgc3BsaXRUZXh0QXRTdGFydChjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBv
c2l0aW9uJiBlbmQpOwogICAgIHZvaWQgc3BsaXRUZXh0QXRFbmQoY29uc3QgUG9zaXRpb24mIHN0
YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKTsKICAgICB2b2lkIHNwbGl0VGV4dEVsZW1lbnRBdFN0
YXJ0KGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCk7CkBAIC0xMDks
NyArMTA5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1lcmdlRW5kV2l0aE5leHRJZklkZW50aWNh
bChjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpOwogICAgIHZvaWQg
Y2xlYW51cFVuc3R5bGVkQXBwbGVTdHlsZVNwYW5zKENvbnRhaW5lck5vZGUqIGR1bW15U3BhbkFu
Y2VzdG9yKTsKIAotICAgIHZvaWQgc3Vycm91bmROb2RlUmFuZ2VXaXRoRWxlbWVudChQYXNzUmVm
UHRyPE5vZGU+IHN0YXJ0LCBQYXNzUmVmUHRyPE5vZGU+IGVuZCwgUGFzc1JlZlB0cjxFbGVtZW50
Pik7CisgICAgdm9pZCBzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVtZW50KE5vZGUmIHN0YXJ0LCBO
b2RlJiBlbmQsIFJlZjxFbGVtZW50PiYmKTsKICAgICBmbG9hdCBjb21wdXRlZEZvbnRTaXplKE5v
ZGUqKTsKICAgICB2b2lkIGpvaW5DaGlsZFRleHROb2RlcyhOb2RlKiwgY29uc3QgUG9zaXRpb24m
IHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKTsKIApAQCAtMTM0LDYgKzEzNCw2IEBAIGVudW0g
U2hvdWxkU3R5bGVBdHRyaWJ1dGVCZUVtcHR5IHsgQWxsb3dOb25FbXB0eVN0eWxlQXR0cmlidXRl
LCBTdHlsZUF0dHJpYnV0ZVNoCiBib29sIGlzRW1wdHlGb250VGFnKGNvbnN0IEVsZW1lbnQqLCBT
aG91bGRTdHlsZUF0dHJpYnV0ZUJlRW1wdHkgPSBTdHlsZUF0dHJpYnV0ZVNob3VsZEJlRW1wdHkp
OwogYm9vbCBpc0xlZ2FjeUFwcGxlU3R5bGVTcGFuKGNvbnN0IE5vZGUqKTsKIGJvb2wgaXNTdHls
ZVNwYW5PclNwYW5XaXRoT25seVN0eWxlQXR0cmlidXRlKGNvbnN0IEVsZW1lbnQqKTsKLVJlZlB0
cjxIVE1MRWxlbWVudD4gY3JlYXRlU3R5bGVTcGFuRWxlbWVudChEb2N1bWVudCYpOworUmVmPEhU
TUxFbGVtZW50PiBjcmVhdGVTdHlsZVNwYW5FbGVtZW50KERvY3VtZW50Jik7CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9z
aXRlRWRpdENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0
Q29tbWFuZC5jcHAKaW5kZXggZmMzYWQ5YWI0NzRhN2NhNTRjOGE4ZmQ4ZWNkNzkxYjFlZjk2NTBh
OS4uZTdkZWI4NjM5OTY1YmUwMjZjOTliZDkwM2JiYjI3M2U2MTlmYmM1YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKQEAgLTQ1OCwxOSAr
NDU4LDE4IEBAIFN0cmluZyBDb21wb3NpdGVFZGl0Q29tbWFuZDo6aW5wdXRFdmVudFR5cGVOYW1l
KCkgY29uc3QKIC8vCiAvLyBzdWdhcnktc3dlZXQgY29udmVuaWVuY2UgZnVuY3Rpb25zIHRvIGhl
bHAgY3JlYXRlIGFuZCBhcHBseSBlZGl0IGNvbW1hbmRzIGluIGNvbXBvc2l0ZSBjb21tYW5kcwog
Ly8KLXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFBh
c3NSZWZQdHI8RWRpdENvbW1hbmQ+IHBycENvbW1hbmQpCit2b2lkIENvbXBvc2l0ZUVkaXRDb21t
YW5kOjphcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShSZWY8RWRpdENvbW1hbmQ+JiYgY29tbWFuZCkK
IHsKLSAgICBSZWZQdHI8RWRpdENvbW1hbmQ+IGNvbW1hbmQgPSBwcnBDb21tYW5kOwogICAgIGNv
bW1hbmQtPnNldFBhcmVudCh0aGlzKTsKICAgICBjb21tYW5kLT5kb0FwcGx5KCk7CiAgICAgaWYg
KGNvbW1hbmQtPmlzU2ltcGxlRWRpdENvbW1hbmQoKSkgewogICAgICAgICBjb21tYW5kLT5zZXRQ
YXJlbnQobnVsbHB0cik7Ci0gICAgICAgIGVuc3VyZUNvbXBvc2l0aW9uKCkuYXBwZW5kKHRvU2lt
cGxlRWRpdENvbW1hbmQoY29tbWFuZC5nZXQoKSkpOworICAgICAgICBlbnN1cmVDb21wb3NpdGlv
bigpLmFwcGVuZCh0b1NpbXBsZUVkaXRDb21tYW5kKGNvbW1hbmQucHRyKCkpKTsKICAgICB9CiAg
ICAgbV9jb21tYW5kcy5hcHBlbmQoV1RGTW92ZShjb21tYW5kKSk7CiB9CiAKLXZvaWQgQ29tcG9z
aXRlRWRpdENvbW1hbmQ6OmFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFBhc3NSZWZQdHI8Q29tcG9z
aXRlRWRpdENvbW1hbmQ+IGNvbW1hbmQsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlv
bikKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFJl
ZjxDb21wb3NpdGVFZGl0Q29tbWFuZD4mJiBjb21tYW5kLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzZWxlY3Rpb24pCiB7CiAgICAgY29tbWFuZC0+c2V0UGFyZW50KHRoaXMpOwogICAgIGlmIChz
ZWxlY3Rpb24gIT0gY29tbWFuZC0+ZW5kaW5nU2VsZWN0aW9uKCkpIHsKQEAgLTQ3OCw3ICs0Nzcs
NyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjphcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShQ
YXNzUmVmUHRyPENvbXBvc2l0ZUVkaXRDb21tYQogICAgICAgICBjb21tYW5kLT5zZXRFbmRpbmdT
ZWxlY3Rpb24oc2VsZWN0aW9uKTsKICAgICB9CiAgICAgY29tbWFuZC0+ZG9BcHBseSgpOwotICAg
IG1fY29tbWFuZHMuYXBwZW5kKGNvbW1hbmQpOworICAgIG1fY29tbWFuZHMuYXBwZW5kKFdURk1v
dmUoY29tbWFuZCkpOwogfQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjphcHBseVN0eWxl
KGNvbnN0IEVkaXRpbmdTdHlsZSogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKQEAg
LTQ5MSwxNCArNDkwLDE0IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmFwcGx5U3R5bGUo
Y29uc3QgRWRpdGluZ1N0eWxlKiBzdHlsZSwgY29uc3QgUG9zaXRpb24mCiAgICAgYXBwbHlDb21t
YW5kVG9Db21wb3NpdGUoQXBwbHlTdHlsZUNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCBzdHls
ZSwgc3RhcnQsIGVuZCwgZWRpdGluZ0FjdGlvbikpOwogfQogCi12b2lkIENvbXBvc2l0ZUVkaXRD
b21tYW5kOjphcHBseVN0eWxlZEVsZW1lbnQoUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50KQor
dm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBwbHlTdHlsZWRFbGVtZW50KFJlZjxFbGVtZW50
PiYmIGVsZW1lbnQpCiB7Ci0gICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoQXBwbHlTdHlsZUNv
bW1hbmQ6OmNyZWF0ZShlbGVtZW50LCBmYWxzZSkpOworICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9z
aXRlKEFwcGx5U3R5bGVDb21tYW5kOjpjcmVhdGUoV1RGTW92ZShlbGVtZW50KSwgZmFsc2UpKTsK
IH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlU3R5bGVkRWxlbWVudChQYXNz
UmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQpCit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1v
dmVTdHlsZWRFbGVtZW50KFJlZjxFbGVtZW50PiYmIGVsZW1lbnQpCiB7Ci0gICAgYXBwbHlDb21t
YW5kVG9Db21wb3NpdGUoQXBwbHlTdHlsZUNvbW1hbmQ6OmNyZWF0ZShlbGVtZW50LCB0cnVlKSk7
CisgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoQXBwbHlTdHlsZUNvbW1hbmQ6OmNyZWF0ZShX
VEZNb3ZlKGVsZW1lbnQpLCB0cnVlKSk7CiB9CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6
Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcihib29sIHVzZURlZmF1bHRQYXJhZ3JhcGhFbGVtZW50
LCBib29sIHBhc3RlQmxvY2txdXRvZUludG9VbnF1b3RlZEFyZWEpCkBAIC02NDMsMTMgKzY0Miwx
NCBAQCBIVE1MRWxlbWVudCogQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VFbGVtZW50V2l0
aFNwYW5QcmVzZXJ2aW5nQ2hpbGRyZW5BbmRBdAogICAgIC8vIEl0IHdvdWxkIGFsc28gYmUgcG9z
c2libGUgdG8gaW1wbGVtZW50IGFsbCBvZiBSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZAogICAg
IC8vIGFzIGEgc2VyaWVzIG9mIGV4aXN0aW5nIHNtYWxsZXIgZWRpdCBjb21tYW5kcy4gIFNvbWVv
bmUgd2hvIHdhbnRlZCB0bwogICAgIC8vIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGVkaXQgY29tbWFu
ZHMgY291bGQgZG8gc28gaGVyZS4KLSAgICBSZWZQdHI8UmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1h
bmQ+IGNvbW1hbmQgPSBSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZDo6Y3JlYXRlKG5vZGUpOwot
ICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKGNvbW1hbmQpOworICAgIGF1dG8gY29tbWFuZCA9
IFJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kOjpjcmVhdGUobm9kZSk7CisgICAgYXV0byogY29t
bWFuZFB0ciA9IGNvbW1hbmQucHRyKCk7CisgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoV1RG
TW92ZShjb21tYW5kKSk7CiAgICAgLy8gUmV0dXJuaW5nIGEgcmF3IHBvaW50ZXIgaGVyZSBpcyBP
SyBiZWNhdXNlIHRoZSBjb21tYW5kIGlzIHJldGFpbmVkIGJ5CiAgICAgLy8gYXBwbHlDb21tYW5k
VG9Db21wb3NpdGUgKHRodXMgcmV0YWluaW5nIHRoZSBzcGFuKSwgYW5kIHRoZSBzcGFuIGlzIGFs
c28KICAgICAvLyBpbiB0aGUgRE9NIHRyZWUsIGFuZCB0aHVzIGFsaXZlIHdoaWUgaXQgaGFzIGEg
cGFyZW50LgotICAgIEFTU0VSVChjb21tYW5kLT5zcGFuRWxlbWVudCgpLT5pc0Nvbm5lY3RlZCgp
KTsKLSAgICByZXR1cm4gY29tbWFuZC0+c3BhbkVsZW1lbnQoKTsKKyAgICBBU1NFUlQoY29tbWFu
ZFB0ci0+c3BhbkVsZW1lbnQoKS0+aXNDb25uZWN0ZWQoKSk7CisgICAgcmV0dXJuIGNvbW1hbmRQ
dHItPnNwYW5FbGVtZW50KCk7CiB9CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnBydW5l
KFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSkKQEAgLTcwMyw4ICs3MDMsNyBAQCB2b2lkIENvbXBvc2l0
ZUVkaXRDb21tYW5kOjppbnB1dFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIHNlbGVjdElu
c2VydGVkVGV4dAogICAgICAgICBuZXdsaW5lID0gdGV4dC5maW5kKCdcbicsIG9mZnNldCk7CiAg
ICAgICAgIGlmIChuZXdsaW5lICE9IG9mZnNldCkgewogICAgICAgICAgICAgaW50IHN1YnN0cmlu
Z0xlbmd0aCA9IG5ld2xpbmUgPT0gbm90Rm91bmQgPyBsZW5ndGggLSBvZmZzZXQgOiBuZXdsaW5l
IC0gb2Zmc2V0OwotICAgICAgICAgICAgUmVmUHRyPEluc2VydFRleHRDb21tYW5kPiBjb21tYW5k
ID0gSW5zZXJ0VGV4dENvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCB0ZXh0LnN1YnN0cmluZyhv
ZmZzZXQsIHN1YnN0cmluZ0xlbmd0aCksIGZhbHNlKTsKLSAgICAgICAgICAgIGFwcGx5Q29tbWFu
ZFRvQ29tcG9zaXRlKGNvbW1hbmQpOworICAgICAgICAgICAgYXBwbHlDb21tYW5kVG9Db21wb3Np
dGUoSW5zZXJ0VGV4dENvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCB0ZXh0LnN1YnN0cmluZyhv
ZmZzZXQsIHN1YnN0cmluZ0xlbmd0aCksIGZhbHNlKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYg
KG5ld2xpbmUgIT0gbm90Rm91bmQpIHsKICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBjYXJl
dChlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSk7CkBAIC03NzcsNyArNzc2LDcgQEAg
dm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVwbGFjZVRleHRJbk5vZGVQcmVzZXJ2aW5nTWFy
a2VycyhQYXNzUmVmUHRyPFRleHQ+IHAKIHsKICAgICBSZWZQdHI8VGV4dD4gbm9kZShwcnBOb2Rl
KTsKICAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXImIG1hcmtlckNvbnRyb2xsZXIgPSBkb2N1
bWVudCgpLm1hcmtlcnMoKTsKLSAgICBhdXRvIG1hcmtlcnMgPSBjb3B5TWFya2VycyhtYXJrZXJD
b250cm9sbGVyLm1hcmtlcnNJblJhbmdlKFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgbm9kZSwg
b2Zmc2V0LCBub2RlLCBvZmZzZXQgKyBjb3VudCkucHRyKCksIERvY3VtZW50TWFya2VyOjpBbGxN
YXJrZXJzKCkpKTsKKyAgICBhdXRvIG1hcmtlcnMgPSBjb3B5TWFya2VycyhtYXJrZXJDb250cm9s
bGVyLm1hcmtlcnNJblJhbmdlKFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgbm9kZSwgb2Zmc2V0
LCBub2RlLCBvZmZzZXQgKyBjb3VudCksIERvY3VtZW50TWFya2VyOjpBbGxNYXJrZXJzKCkpKTsK
ICAgICByZXBsYWNlVGV4dEluTm9kZShub2RlLCBvZmZzZXQsIGNvdW50LCByZXBsYWNlbWVudFRl
eHQpOwogICAgIFJlZlB0cjxSYW5nZT4gbmV3UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50
KCksIG5vZGUsIG9mZnNldCwgbm9kZSwgb2Zmc2V0ICsgcmVwbGFjZW1lbnRUZXh0Lmxlbmd0aCgp
KTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIG1hcmtlciA6IG1hcmtlcnMpCkBAIC0xMjM2LDcgKzEy
MzUsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpwdXNoQW5jaG9yRWxlbWVudERvd24o
RWxlbWVudCYgYW5jaG9yRWxlbWVudCkKICAgICBBU1NFUlQoYW5jaG9yRWxlbWVudC5pc0xpbmso
KSk7CiAgICAgCiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb246OnNlbGVj
dGlvbkZyb21Db250ZW50c09mTm9kZSgmYW5jaG9yRWxlbWVudCkpOwotICAgIGFwcGx5U3R5bGVk
RWxlbWVudCgmYW5jaG9yRWxlbWVudCk7CisgICAgYXBwbHlTdHlsZWRFbGVtZW50KGFuY2hvckVs
ZW1lbnQpOwogICAgIC8vIENsb25lcyBvZiBhbmNob3JFbGVtZW50IGhhdmUgYmVlbiBwdXNoZWQg
ZG93biwgbm93IHJlbW92ZSBpdC4KICAgICBpZiAoYW5jaG9yRWxlbWVudC5pc0Nvbm5lY3RlZCgp
KQogICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKCZhbmNob3JFbGVtZW50KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQu
aCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaAppbmRleCAw
MjIxZGM5OTljY2ZlNmZjNTliMTgxYTlmZjc4MDk5YjZlMzVmM2I3Li4zN2FmMDFlOTJkNzRlNTk1
NzI4Mzg2N2Y1YjE0NWUzZjZmMTBhMjE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9D
b21wb3NpdGVFZGl0Q29tbWFuZC5oCkBAIC0xMzQsMTIgKzEzNCwxMiBAQCBwcm90ZWN0ZWQ6CiAg
ICAgLy8gc3VnYXJ5LXN3ZWV0IGNvbnZlbmllbmNlIGZ1bmN0aW9ucyB0byBoZWxwIGNyZWF0ZSBh
bmQgYXBwbHkgZWRpdCBjb21tYW5kcyBpbiBjb21wb3NpdGUgY29tbWFuZHMKICAgICAvLwogICAg
IHZvaWQgYXBwZW5kTm9kZShQYXNzUmVmUHRyPE5vZGU+LCBQYXNzUmVmUHRyPENvbnRhaW5lck5v
ZGU+IHBhcmVudCk7Ci0gICAgdm9pZCBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShQYXNzUmVmUHRy
PEVkaXRDb21tYW5kPik7Ci0gICAgdm9pZCBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShQYXNzUmVm
UHRyPENvbXBvc2l0ZUVkaXRDb21tYW5kPiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOworICAg
IHZvaWQgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoUmVmPEVkaXRDb21tYW5kPiYmKTsKKyAgICB2
b2lkIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFJlZjxDb21wb3NpdGVFZGl0Q29tbWFuZD4mJiwg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogICAgIHZvaWQgYXBwbHlTdHlsZShjb25zdCBFZGl0
aW5nU3R5bGUqLCBFZGl0QWN0aW9uID0gRWRpdEFjdGlvbkNoYW5nZUF0dHJpYnV0ZXMpOwogICAg
IHZvaWQgYXBwbHlTdHlsZShjb25zdCBFZGl0aW5nU3R5bGUqLCBjb25zdCBQb3NpdGlvbiYgc3Rh
cnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQsIEVkaXRBY3Rpb24gPSBFZGl0QWN0aW9uQ2hhbmdlQXR0
cmlidXRlcyk7Ci0gICAgdm9pZCBhcHBseVN0eWxlZEVsZW1lbnQoUGFzc1JlZlB0cjxFbGVtZW50
Pik7Ci0gICAgdm9pZCByZW1vdmVTdHlsZWRFbGVtZW50KFBhc3NSZWZQdHI8RWxlbWVudD4pOwor
ICAgIHZvaWQgYXBwbHlTdHlsZWRFbGVtZW50KFJlZjxFbGVtZW50PiYmKTsKKyAgICB2b2lkIHJl
bW92ZVN0eWxlZEVsZW1lbnQoUmVmPEVsZW1lbnQ+JiYpOwogICAgIHZvaWQgZGVsZXRlU2VsZWN0
aW9uKGJvb2wgc21hcnREZWxldGUgPSBmYWxzZSwgYm9vbCBtZXJnZUJsb2Nrc0FmdGVyRGVsZXRl
ID0gdHJ1ZSwgYm9vbCByZXBsYWNlID0gZmFsc2UsIGJvb2wgZXhwYW5kRm9yU3BlY2lhbEVsZW1l
bnRzID0gdHJ1ZSwgYm9vbCBzYW5pdGl6ZU1hcmt1cCA9IHRydWUpOwogICAgIHZvaWQgZGVsZXRl
U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBib29sIHNtYXJ0RGVsZXRlID0gZmFs
c2UsIGJvb2wgbWVyZ2VCbG9ja3NBZnRlckRlbGV0ZSA9IHRydWUsIGJvb2wgcmVwbGFjZSA9IGZh
bHNlLCBib29sIGV4cGFuZEZvclNwZWNpYWxFbGVtZW50cyA9IHRydWUsIGJvb2wgc2FuaXRpemVN
YXJrdXAgPSB0cnVlKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVGV4dEZyb21Ob2RlKFBhc3NS
ZWZQdHI8VGV4dD4sIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291bnQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggYjhj
OTdkOGNlZmFhYzI3NDFlMjA0MThiZjQxNTdkMmIyNzQ1NzUyZC4uNWI3NGNmODFkNjJhZjQwZjNk
MWFkMzVlZjYxNmY1NzYwMmE5NTg0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC03OTEsOSArNzkxLDggQEAgU3RyaW5nIERl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om9yaWdpbmFsU3RyaW5nRm9yQXV0b2NvcnJlY3Rpb25BdEJl
Z2lubmluZ09mU2VsZWMKICAgICBpZiAobmV4dFBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlT2ZGaXJzdENoYXJhY3Rl
ciA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3RhcnRPZlNlbGVjdGlvbi5kZWVwRXF1aXZh
bGVudCgpLCBuZXh0UG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7Ci0gICAgVmVjdG9yPFJlbmRl
cmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vy
c0luUmFuZ2UocmFuZ2VPZkZpcnN0Q2hhcmFjdGVyLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6QXV0
b2NvcnJlY3RlZCk7Ci0gICAgZm9yIChhdXRvKiBtYXJrZXIgOiBtYXJrZXJzKSB7CisgICAgYXV0
byByYW5nZU9mRmlyc3RDaGFyYWN0ZXIgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIHN0YXJ0
T2ZTZWxlY3Rpb24uZGVlcEVxdWl2YWxlbnQoKSwgbmV4dFBvc2l0aW9uLmRlZXBFcXVpdmFsZW50
KCkpOworICAgIGZvciAoYXV0byogbWFya2VyIDogZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vy
c0luUmFuZ2UocmFuZ2VPZkZpcnN0Q2hhcmFjdGVyLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJl
Y3RlZCkpIHsKICAgICAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gbWFya2VyLT5zdGFydE9mZnNldCgp
OwogICAgICAgICBpZiAoc3RhcnRPZmZzZXQgPT0gc3RhcnRPZlNlbGVjdGlvbi5kZWVwRXF1aXZh
bGVudCgpLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKQogICAgICAgICAgICAgcmV0dXJuIG1hcmtl
ci0+ZGVzY3JpcHRpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGlj
dGF0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RpY3RhdGlvbkNvbW1h
bmQuY3BwCmluZGV4IDliMTVhODE4NjVjNzc4MjkwMDI5MGE0N2ViZWVjYzI5YTJkM2UxYjIuLjM1
ZTY2M2ZhYWE0MTc0YWI5MGMwOTU1MzE2ZDYwNmMyZDQxYTNlODYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9EaWN0YXRpb25Db21tYW5kLmNwcApAQCAtMTE2LDggKzExNiw4IEBAIHZvaWQg
RGljdGF0aW9uQ29tbWFuZDo6aW5zZXJ0VGV4dFJ1bldpdGhvdXROZXdsaW5lcyhzaXplX3QgbGlu
ZVN0YXJ0LCBzaXplX3QgbGluCiB7CiAgICAgVmVjdG9yPERpY3RhdGlvbkFsdGVybmF0aXZlPiBh
bHRlcm5hdGl2ZXNJbkxpbmU7CiAgICAgY29sbGVjdERpY3RhdGlvbkFsdGVybmF0aXZlc0luUmFu
Z2UobGluZVN0YXJ0LCBsaW5lTGVuZ3RoLCBhbHRlcm5hdGl2ZXNJbkxpbmUpOwotICAgIFJlZlB0
cjxJbnNlcnRUZXh0Q29tbWFuZD4gY29tbWFuZCA9IEluc2VydFRleHRDb21tYW5kOjpjcmVhdGVX
aXRoTWFya2VyU3VwcGxpZXIoZG9jdW1lbnQoKSwgbV90ZXh0VG9JbnNlcnQuc3Vic3RyaW5nKGxp
bmVTdGFydCwgbGluZUxlbmd0aCksIERpY3RhdGlvbk1hcmtlclN1cHBsaWVyOjpjcmVhdGUoYWx0
ZXJuYXRpdmVzSW5MaW5lKSwgRWRpdEFjdGlvbkRpY3RhdGlvbik7Ci0gICAgYXBwbHlDb21tYW5k
VG9Db21wb3NpdGUoY29tbWFuZCwgZW5kaW5nU2VsZWN0aW9uKCkpOworICAgIGF1dG8gY29tbWFu
ZCA9IEluc2VydFRleHRDb21tYW5kOjpjcmVhdGVXaXRoTWFya2VyU3VwcGxpZXIoZG9jdW1lbnQo
KSwgbV90ZXh0VG9JbnNlcnQuc3Vic3RyaW5nKGxpbmVTdGFydCwgbGluZUxlbmd0aCksIERpY3Rh
dGlvbk1hcmtlclN1cHBsaWVyOjpjcmVhdGUoYWx0ZXJuYXRpdmVzSW5MaW5lKSwgRWRpdEFjdGlv
bkRpY3RhdGlvbik7CisgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoV1RGTW92ZShjb21tYW5k
KSwgZW5kaW5nU2VsZWN0aW9uKCkpOwogfQogCiB2b2lkIERpY3RhdGlvbkNvbW1hbmQ6Omluc2Vy
dFBhcmFncmFwaFNlcGFyYXRvcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRpbmdTdHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5j
cHAKaW5kZXggYWU0OTUzYjI4ZTEzYWI4OGY0MzEwNTdjZDdmY2NiNjRhMGNjOTAzYy4uYmUxOWY5
YzRkOTIyMTUzMGEyMmQzNDdmYjBjNDNkMWI5NDFmNDI0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdGluZ1N0eWxlLmNwcApAQCAtOTMsNyArOTMsNyBAQCBjb25zdCB1bnNpZ25lZCBudW1J
bmhlcml0YWJsZUVkaXRpbmdQcm9wZXJ0aWVzID0gbnVtQWxsRWRpdGluZ1Byb3BlcnRpZXMgLSAy
OwogCiBlbnVtIEVkaXRpbmdQcm9wZXJ0aWVzVG9JbmNsdWRlIHsgT25seUluaGVyaXRhYmxlRWRp
dGluZ1Byb3BlcnRpZXMsIEFsbEVkaXRpbmdQcm9wZXJ0aWVzIH07CiB0ZW1wbGF0ZSA8Y2xhc3Mg
U3R5bGVEZWNsYXJhdGlvblR5cGU+Ci1zdGF0aWMgUGFzc1JlZlB0cjxNdXRhYmxlU3R5bGVQcm9w
ZXJ0aWVzPiBjb3B5RWRpdGluZ1Byb3BlcnRpZXMoU3R5bGVEZWNsYXJhdGlvblR5cGUqIHN0eWxl
LCBFZGl0aW5nUHJvcGVydGllc1RvSW5jbHVkZSB0eXBlKQorc3RhdGljIFJlZjxNdXRhYmxlU3R5
bGVQcm9wZXJ0aWVzPiBjb3B5RWRpdGluZ1Byb3BlcnRpZXMoU3R5bGVEZWNsYXJhdGlvblR5cGUq
IHN0eWxlLCBFZGl0aW5nUHJvcGVydGllc1RvSW5jbHVkZSB0eXBlKQogewogICAgIGlmICh0eXBl
ID09IEFsbEVkaXRpbmdQcm9wZXJ0aWVzKQogICAgICAgICByZXR1cm4gc3R5bGUtPmNvcHlQcm9w
ZXJ0aWVzSW5TZXQoZWRpdGluZ1Byb3BlcnRpZXMsIG51bUFsbEVkaXRpbmdQcm9wZXJ0aWVzKTsK
QEAgLTEwOSwzMiArMTA5LDMxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0VkaXRpbmdQcm9wZXJ0
eShpbnQgaWQpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxNdXRh
YmxlU3R5bGVQcm9wZXJ0aWVzPiBjb3B5UHJvcGVydGllc0Zyb21Db21wdXRlZFN0eWxlKENvbXB1
dGVkU3R5bGVFeHRyYWN0b3ImIGNvbXB1dGVkU3R5bGUsIEVkaXRpbmdTdHlsZTo6UHJvcGVydGll
c1RvSW5jbHVkZSBwcm9wZXJ0aWVzVG9JbmNsdWRlKQorc3RhdGljIFJlZjxNdXRhYmxlU3R5bGVQ
cm9wZXJ0aWVzPiBjb3B5UHJvcGVydGllc0Zyb21Db21wdXRlZFN0eWxlKENvbXB1dGVkU3R5bGVF
eHRyYWN0b3ImIGNvbXB1dGVkU3R5bGUsIEVkaXRpbmdTdHlsZTo6UHJvcGVydGllc1RvSW5jbHVk
ZSBwcm9wZXJ0aWVzVG9JbmNsdWRlKQogewogICAgIHN3aXRjaCAocHJvcGVydGllc1RvSW5jbHVk
ZSkgewotICAgIGNhc2UgRWRpdGluZ1N0eWxlOjpBbGxQcm9wZXJ0aWVzOgotICAgICAgICByZXR1
cm4gY29tcHV0ZWRTdHlsZS5jb3B5UHJvcGVydGllcygpOwogICAgIGNhc2UgRWRpdGluZ1N0eWxl
OjpPbmx5RWRpdGluZ0luaGVyaXRhYmxlUHJvcGVydGllczoKICAgICAgICAgcmV0dXJuIGNvcHlF
ZGl0aW5nUHJvcGVydGllcygmY29tcHV0ZWRTdHlsZSwgT25seUluaGVyaXRhYmxlRWRpdGluZ1By
b3BlcnRpZXMpOwogICAgIGNhc2UgRWRpdGluZ1N0eWxlOjpFZGl0aW5nUHJvcGVydGllc0luRWZm
ZWN0OgogICAgICAgICByZXR1cm4gY29weUVkaXRpbmdQcm9wZXJ0aWVzKCZjb21wdXRlZFN0eWxl
LCBBbGxFZGl0aW5nUHJvcGVydGllcyk7CisgICAgY2FzZSBFZGl0aW5nU3R5bGU6OkFsbFByb3Bl
cnRpZXM6CisgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY29tcHV0ZWRTdHlsZS5jb3B5UHJvcGVydGllcygp
OwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBjb3B5UHJv
cGVydGllc0Zyb21Db21wdXRlZFN0eWxlKE5vZGUqIG5vZGUsIEVkaXRpbmdTdHlsZTo6UHJvcGVy
dGllc1RvSW5jbHVkZSBwcm9wZXJ0aWVzVG9JbmNsdWRlKQorc3RhdGljIFJlZjxNdXRhYmxlU3R5
bGVQcm9wZXJ0aWVzPiBjb3B5UHJvcGVydGllc0Zyb21Db21wdXRlZFN0eWxlKE5vZGUqIG5vZGUs
IEVkaXRpbmdTdHlsZTo6UHJvcGVydGllc1RvSW5jbHVkZSBwcm9wZXJ0aWVzVG9JbmNsdWRlKQog
ewogICAgIENvbXB1dGVkU3R5bGVFeHRyYWN0b3IgY29tcHV0ZWRTdHlsZShub2RlKTsKICAgICBy
ZXR1cm4gY29weVByb3BlcnRpZXNGcm9tQ29tcHV0ZWRTdHlsZShjb21wdXRlZFN0eWxlLCBwcm9w
ZXJ0aWVzVG9JbmNsdWRlKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGV4dHJh
Y3RQcm9wZXJ0eVZhbHVlKGNvbnN0IFN0eWxlUHJvcGVydGllcyYgc3R5bGUsIENTU1Byb3BlcnR5
SUQgcHJvcGVydHlJRCkKK3N0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGV4dHJhY3RQcm9wZXJ0eVZh
bHVlKGNvbnN0IFN0eWxlUHJvcGVydGllcyYgc3R5bGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCkKIHsKICAgICByZXR1cm4gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eUlEKTsK
IH0KIAotc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGV4dHJhY3RQcm9wZXJ0eVZhbHVlKENv
bXB1dGVkU3R5bGVFeHRyYWN0b3ImIGNvbXB1dGVkU3R5bGUsIENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJRCkKK3N0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IGV4dHJhY3RQcm9wZXJ0eVZhbHVlKENvbXB1
dGVkU3R5bGVFeHRyYWN0b3ImIGNvbXB1dGVkU3R5bGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCkKIHsKICAgICByZXR1cm4gY29tcHV0ZWRTdHlsZS5wcm9wZXJ0eVZhbHVlKHByb3BlcnR5SUQp
OwogfQpAQCAtMTUwLDcgKzE0OSw3IEBAIGludCBpZGVudGlmaWVyRm9yU3R5bGVQcm9wZXJ0eShU
JiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQogICAgIHJldHVybiBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS52YWx1ZUlEKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IFBhc3NSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gZ2V0UHJvcGVydGllc05v
dEluKFN0eWxlUHJvcGVydGllcyYgc3R5bGVXaXRoUmVkdW5kYW50UHJvcGVydGllcywgVCYgYmFz
ZVN0eWxlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFJlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVz
PiBnZXRQcm9wZXJ0aWVzTm90SW4oU3R5bGVQcm9wZXJ0aWVzJiBzdHlsZVdpdGhSZWR1bmRhbnRQ
cm9wZXJ0aWVzLCBUJiBiYXNlU3R5bGUpOwogZW51bSBMZWdhY3lGb250U2l6ZU1vZGUgeyBBbHdh
eXNVc2VMZWdhY3lGb250U2l6ZSwgVXNlTGVnYWN5Rm9udFNpemVPbmx5SWZQaXhlbFZhbHVlc01h
dGNoIH07CiBzdGF0aWMgaW50IGxlZ2FjeUZvbnRTaXplRnJvbUNTU1ZhbHVlKERvY3VtZW50Kiwg
Q1NTUHJpbWl0aXZlVmFsdWUqLCBib29sIHNob3VsZFVzZUZpeGVkRm9udERlZmF1bHRTaXplLCBM
ZWdhY3lGb250U2l6ZU1vZGUpOwogc3RhdGljIGJvb2wgaGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5k
Q29sb3IoU3R5bGVQcm9wZXJ0aWVzKik7CkBAIC0yNTgsNyArMjU3LDcgQEAgcHVibGljOgogICAg
IGJvb2wgaGFzQXR0cmlidXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogICAg
IGJvb2wgdmFsdWVJc1ByZXNlbnRJblN0eWxlKEVsZW1lbnQmLCBjb25zdCBFZGl0aW5nU3R5bGUm
KSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIGFkZFRvU3R5bGUoRWxlbWVudCosIEVkaXRpbmdT
dHlsZSopIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
YXR0cmlidXRlVmFsdWVBc0NTU1ZhbHVlKEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIFJl
ZlB0cjxDU1NWYWx1ZT4gYXR0cmlidXRlVmFsdWVBc0NTU1ZhbHVlKEVsZW1lbnQqKSBjb25zdDsK
ICAgICBpbmxpbmUgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSgpIGNvbnN0IHsg
cmV0dXJuIG1fYXR0ck5hbWU7IH0KIAogcHJvdGVjdGVkOgpAQCAtMjkxLDcgKzI5MCw3IEBAIHZv
aWQgSFRNTEF0dHJpYnV0ZUVxdWl2YWxlbnQ6OmFkZFRvU3R5bGUoRWxlbWVudCogZWxlbWVudCwg
RWRpdGluZ1N0eWxlKiBzdHlsZSkKICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KG1fcHJvcGVy
dHlJRCwgdmFsdWUtPmNzc1RleHQoKSk7CiB9CiAKLVBhc3NSZWZQdHI8Q1NTVmFsdWU+IEhUTUxB
dHRyaWJ1dGVFcXVpdmFsZW50OjphdHRyaWJ1dGVWYWx1ZUFzQ1NTVmFsdWUoRWxlbWVudCogZWxl
bWVudCkgY29uc3QKK1JlZlB0cjxDU1NWYWx1ZT4gSFRNTEF0dHJpYnV0ZUVxdWl2YWxlbnQ6OmF0
dHJpYnV0ZVZhbHVlQXNDU1NWYWx1ZShFbGVtZW50KiBlbGVtZW50KSBjb25zdAogewogICAgIEFT
U0VSVChlbGVtZW50KTsKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gZWxlbWVudC0+
Z2V0QXR0cmlidXRlKG1fYXR0ck5hbWUpOwpAQCAtMzA4LDcgKzMwNyw3IEBAIGNsYXNzIEhUTUxG
b250U2l6ZUVxdWl2YWxlbnQgOiBwdWJsaWMgSFRNTEF0dHJpYnV0ZUVxdWl2YWxlbnQgewogcHVi
bGljOgogICAgIEhUTUxGb250U2l6ZUVxdWl2YWxlbnQoKTsKIAotICAgIFBhc3NSZWZQdHI8Q1NT
VmFsdWU+IGF0dHJpYnV0ZVZhbHVlQXNDU1NWYWx1ZShFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgUmVmUHRyPENTU1ZhbHVlPiBhdHRyaWJ1dGVWYWx1ZUFzQ1NTVmFsdWUoRWxlbWVudCop
IGNvbnN0IG92ZXJyaWRlOwogfTsKIAogSFRNTEZvbnRTaXplRXF1aXZhbGVudDo6SFRNTEZvbnRT
aXplRXF1aXZhbGVudCgpCkBAIC0zMTYsNyArMzE1LDcgQEAgSFRNTEZvbnRTaXplRXF1aXZhbGVu
dDo6SFRNTEZvbnRTaXplRXF1aXZhbGVudCgpCiB7CiB9CiAKLVBhc3NSZWZQdHI8Q1NTVmFsdWU+
IEhUTUxGb250U2l6ZUVxdWl2YWxlbnQ6OmF0dHJpYnV0ZVZhbHVlQXNDU1NWYWx1ZShFbGVtZW50
KiBlbGVtZW50KSBjb25zdAorUmVmUHRyPENTU1ZhbHVlPiBIVE1MRm9udFNpemVFcXVpdmFsZW50
OjphdHRyaWJ1dGVWYWx1ZUFzQ1NTVmFsdWUoRWxlbWVudCogZWxlbWVudCkgY29uc3QKIHsKICAg
ICBBU1NFUlQoZWxlbWVudCk7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGVsZW1l
bnQtPmdldEF0dHJpYnV0ZShtX2F0dHJOYW1lKTsKQEAgLTU3NCw5ICs1NzMsOSBAQCBib29sIEVk
aXRpbmdTdHlsZTo6dGV4dERpcmVjdGlvbihXcml0aW5nRGlyZWN0aW9uJiB3cml0aW5nRGlyZWN0
aW9uKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBFZGl0aW5nU3R5bGU6OnNl
dFN0eWxlKFBhc3NSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gc3R5bGUpCit2b2lkIEVk
aXRpbmdTdHlsZTo6c2V0U3R5bGUoUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+JiYgc3R5
bGUpCiB7Ci0gICAgbV9tdXRhYmxlU3R5bGUgPSBzdHlsZTsKKyAgICBtX211dGFibGVTdHlsZSA9
IFdURk1vdmUoc3R5bGUpOwogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBmaWd1
cmUgb3V0IHdoZXRoZXIgb3Igbm90IGZvbnQgaXMgZml4ZWQgd2lkdGggZm9yIG11dGFibGUgc3R5
bGUuCiAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBmb250LWZhbWlseSBpcyBtb25vc3BhY2UgYXMg
aW4gRm9udERlc2NyaXB0aW9uIGJ1dCB3ZSBkb24ndCB3YW50IHRvIGR1cGxpY2F0ZSBjb2RlIGhl
cmUuCiAgICAgbV9zaG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6ZSA9IGZhbHNlOwpAQCAtNjQ2
LDkgKzY0NSw5IEBAIHZvaWQgRWRpdGluZ1N0eWxlOjpjbGVhcigpCiAgICAgc2V0U3RyaWtlVGhy
b3VnaENoYW5nZShUZXh0RGVjb3JhdGlvbkNoYW5nZTo6Tm9uZSk7CiB9CiAKLVBhc3NSZWZQdHI8
RWRpdGluZ1N0eWxlPiBFZGl0aW5nU3R5bGU6OmNvcHkoKSBjb25zdAorUmVmPEVkaXRpbmdTdHls
ZT4gRWRpdGluZ1N0eWxlOjpjb3B5KCkgY29uc3QKIHsKLSAgICBSZWZQdHI8RWRpdGluZ1N0eWxl
PiBjb3B5ID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoKTsKKyAgICBhdXRvIGNvcHkgPSBFZGl0aW5n
U3R5bGU6OmNyZWF0ZSgpOwogICAgIGlmIChtX211dGFibGVTdHlsZSkKICAgICAgICAgY29weS0+
bV9tdXRhYmxlU3R5bGUgPSBtX211dGFibGVTdHlsZS0+bXV0YWJsZUNvcHkoKTsKICAgICBjb3B5
LT5tX3Nob3VsZFVzZUZpeGVkRGVmYXVsdEZvbnRTaXplID0gbV9zaG91bGRVc2VGaXhlZERlZmF1
bHRGb250U2l6ZTsKQEAgLTY1OCw5ICs2NTcsOSBAQCBQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4g
RWRpdGluZ1N0eWxlOjpjb3B5KCkgY29uc3QKICAgICByZXR1cm4gY29weTsKIH0KIAotUGFzc1Jl
ZlB0cjxFZGl0aW5nU3R5bGU+IEVkaXRpbmdTdHlsZTo6ZXh0cmFjdEFuZFJlbW92ZUJsb2NrUHJv
cGVydGllcygpCitSZWY8RWRpdGluZ1N0eWxlPiBFZGl0aW5nU3R5bGU6OmV4dHJhY3RBbmRSZW1v
dmVCbG9ja1Byb3BlcnRpZXMoKQogewotICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IGJsb2NrUHJv
cGVydGllcyA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKCk7CisgICAgYXV0byBibG9ja1Byb3BlcnRp
ZXMgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZSgpOwogICAgIGlmICghbV9tdXRhYmxlU3R5bGUpCiAg
ICAgICAgIHJldHVybiBibG9ja1Byb3BlcnRpZXM7CiAKQEAgLTY3MCw5ICs2NjksOSBAQCBQYXNz
UmVmUHRyPEVkaXRpbmdTdHlsZT4gRWRpdGluZ1N0eWxlOjpleHRyYWN0QW5kUmVtb3ZlQmxvY2tQ
cm9wZXJ0aWVzKCkKICAgICByZXR1cm4gYmxvY2tQcm9wZXJ0aWVzOwogfQogCi1QYXNzUmVmUHRy
PEVkaXRpbmdTdHlsZT4gRWRpdGluZ1N0eWxlOjpleHRyYWN0QW5kUmVtb3ZlVGV4dERpcmVjdGlv
bigpCitSZWY8RWRpdGluZ1N0eWxlPiBFZGl0aW5nU3R5bGU6OmV4dHJhY3RBbmRSZW1vdmVUZXh0
RGlyZWN0aW9uKCkKIHsKLSAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiB0ZXh0RGlyZWN0aW9uID0g
RWRpdGluZ1N0eWxlOjpjcmVhdGUoKTsKKyAgICBhdXRvIHRleHREaXJlY3Rpb24gPSBFZGl0aW5n
U3R5bGU6OmNyZWF0ZSgpOwogICAgIHRleHREaXJlY3Rpb24tPm1fbXV0YWJsZVN0eWxlID0gTXV0
YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKCk7CiAgICAgdGV4dERpcmVjdGlvbi0+bV9tdXRh
YmxlU3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5VW5pY29kZUJpZGksIENTU1ZhbHVlRW1i
ZWQsIG1fbXV0YWJsZVN0eWxlLT5wcm9wZXJ0eUlzSW1wb3J0YW50KENTU1Byb3BlcnR5VW5pY29k
ZUJpZGkpKTsKICAgICB0ZXh0RGlyZWN0aW9uLT5tX211dGFibGVTdHlsZS0+c2V0UHJvcGVydHko
Q1NTUHJvcGVydHlEaXJlY3Rpb24sIG1fbXV0YWJsZVN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKENT
U1Byb3BlcnR5RGlyZWN0aW9uKSwKQEAgLTExMjYsMTAgKzExMjUsMTAgQEAgdm9pZCBFZGl0aW5n
U3R5bGU6Om1lcmdlSW5saW5lU3R5bGVPZkVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCwg
Q1NTUHJvcGVydHkKICAgICAgICAgbWVyZ2VTdHlsZShlbGVtZW50LT5pbmxpbmVTdHlsZSgpLCBt
b2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgT25seUVkaXRpbmdJbmhlcml0YWJsZVBy
b3BlcnRpZXM6Ci0gICAgICAgIG1lcmdlU3R5bGUoY29weUVkaXRpbmdQcm9wZXJ0aWVzKGVsZW1l
bnQtPmlubGluZVN0eWxlKCksIE9ubHlJbmhlcml0YWJsZUVkaXRpbmdQcm9wZXJ0aWVzKS5nZXQo
KSwgbW9kZSk7CisgICAgICAgIG1lcmdlU3R5bGUoY29weUVkaXRpbmdQcm9wZXJ0aWVzKGVsZW1l
bnQtPmlubGluZVN0eWxlKCksIE9ubHlJbmhlcml0YWJsZUVkaXRpbmdQcm9wZXJ0aWVzKS5wdHIo
KSwgbW9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEVkaXRpbmdQcm9wZXJ0aWVzSW5F
ZmZlY3Q6Ci0gICAgICAgIG1lcmdlU3R5bGUoY29weUVkaXRpbmdQcm9wZXJ0aWVzKGVsZW1lbnQt
PmlubGluZVN0eWxlKCksIEFsbEVkaXRpbmdQcm9wZXJ0aWVzKS5nZXQoKSwgbW9kZSk7CisgICAg
ICAgIG1lcmdlU3R5bGUoY29weUVkaXRpbmdQcm9wZXJ0aWVzKGVsZW1lbnQtPmlubGluZVN0eWxl
KCksIEFsbEVkaXRpbmdQcm9wZXJ0aWVzKS5wdHIoKSwgbW9kZSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiB9CkBAIC0xMTQ1LDIxICsxMTQ0LDE5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBlbGVt
ZW50TWF0Y2hlc0FuZFByb3BlcnR5SXNOb3RJbklubGluZVN0eWxlRGVjbChjb25zdCBIVE1MRWxl
CiAgICAgcmV0dXJuICFlbGVtZW50LT5pbmxpbmVTdHlsZSgpIHx8ICFlcXVpdmFsZW50LT5wcm9w
ZXJ0eUV4aXN0c0luU3R5bGUoRWRpdGluZ1N0eWxlOjpjcmVhdGUoZWxlbWVudC0+aW5saW5lU3R5
bGUoKSkuZ2V0KCkpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0
aWVzPiBleHRyYWN0RWRpdGluZ1Byb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBzdHls
ZSwgRWRpdGluZ1N0eWxlOjpQcm9wZXJ0aWVzVG9JbmNsdWRlIHByb3BlcnRpZXNUb0luY2x1ZGUp
CitzdGF0aWMgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IGV4dHJhY3RFZGl0aW5nUHJv
cGVydGllcyhjb25zdCBTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0aW5nU3R5bGU6OlByb3Bl
cnRpZXNUb0luY2x1ZGUgcHJvcGVydGllc1RvSW5jbHVkZSkKIHsKICAgICBpZiAoIXN0eWxlKQot
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBzd2l0Y2gg
KHByb3BlcnRpZXNUb0luY2x1ZGUpIHsKLSAgICBjYXNlIEVkaXRpbmdTdHlsZTo6QWxsUHJvcGVy
dGllczoKLSAgICBjYXNlIEVkaXRpbmdTdHlsZTo6RWRpdGluZ1Byb3BlcnRpZXNJbkVmZmVjdDoK
LSAgICAgICAgcmV0dXJuIGNvcHlFZGl0aW5nUHJvcGVydGllcyhzdHlsZSwgQWxsRWRpdGluZ1By
b3BlcnRpZXMpOwogICAgIGNhc2UgRWRpdGluZ1N0eWxlOjpPbmx5RWRpdGluZ0luaGVyaXRhYmxl
UHJvcGVydGllczoKICAgICAgICAgcmV0dXJuIGNvcHlFZGl0aW5nUHJvcGVydGllcyhzdHlsZSwg
T25seUluaGVyaXRhYmxlRWRpdGluZ1Byb3BlcnRpZXMpOworICAgIGNhc2UgRWRpdGluZ1N0eWxl
OjpBbGxQcm9wZXJ0aWVzOgorICAgIGNhc2UgRWRpdGluZ1N0eWxlOjpFZGl0aW5nUHJvcGVydGll
c0luRWZmZWN0OgorICAgICAgICBicmVhazsKICAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY29weUVkaXRpbmdQcm9wZXJ0aWVzKHN0
eWxlLCBBbGxFZGl0aW5nUHJvcGVydGllcyk7CiB9CiAKIHZvaWQgRWRpdGluZ1N0eWxlOjptZXJn
ZUlubGluZUFuZEltcGxpY2l0U3R5bGVPZkVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCwg
Q1NTUHJvcGVydHlPdmVycmlkZU1vZGUgbW9kZSwgUHJvcGVydGllc1RvSW5jbHVkZSBwcm9wZXJ0
aWVzVG9JbmNsdWRlKQpAQCAtMTQyNSwxMCArMTQyMiwxMCBAQCBpbnQgRWRpdGluZ1N0eWxlOjps
ZWdhY3lGb250U2l6ZShEb2N1bWVudCogZG9jdW1lbnQpIGNvbnN0CiAgICAgICAgIG1fc2hvdWxk
VXNlRml4ZWREZWZhdWx0Rm9udFNpemUsIEFsd2F5c1VzZUxlZ2FjeUZvbnRTaXplKTsKIH0KIAot
UGFzc1JlZlB0cjxFZGl0aW5nU3R5bGU+IEVkaXRpbmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0
YXJ0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgYm9vbCBzaG91bGRVc2VCYWNr
Z3JvdW5kQ29sb3JJbkVmZmVjdCkKK1JlZlB0cjxFZGl0aW5nU3R5bGU+IEVkaXRpbmdTdHlsZTo6
c3R5bGVBdFNlbGVjdGlvblN0YXJ0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwg
Ym9vbCBzaG91bGRVc2VCYWNrZ3JvdW5kQ29sb3JJbkVmZmVjdCkKIHsKICAgICBpZiAoc2VsZWN0
aW9uLmlzTm9uZSgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICBQb3NpdGlvbiBwb3NpdGlvbiA9IGFkanVzdGVkU2VsZWN0aW9uU3RhcnRGb3JTdHls
ZUNvbXB1dGF0aW9uKHNlbGVjdGlvbik7CiAKQEAgLTE0NDIsOSArMTQzOSw5IEBAIFBhc3NSZWZQ
dHI8RWRpdGluZ1N0eWxlPiBFZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChjb25z
dCBWaXNpYmxlU2VsZWN0CiAKICAgICBFbGVtZW50KiBlbGVtZW50ID0gcG9zaXRpb24uZWxlbWVu
dCgpOwogICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gc3R5bGUgPSBFZGl0aW5nU3R5
bGU6OmNyZWF0ZShlbGVtZW50LCBFZGl0aW5nU3R5bGU6OkFsbFByb3BlcnRpZXMpOworICAgIGF1
dG8gc3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShlbGVtZW50LCBFZGl0aW5nU3R5bGU6OkFs
bFByb3BlcnRpZXMpOwogICAgIHN0eWxlLT5tZXJnZVR5cGluZ1N0eWxlKGVsZW1lbnQtPmRvY3Vt
ZW50KCkpOwogCiAgICAgLy8gSWYgYmFja2dyb3VuZCBjb2xvciBpcyB0cmFuc3BhcmVudCwgdHJh
dmVyc2UgcGFyZW50IG5vZGVzIHVudGlsIHdlIGhpdCBhIGRpZmZlcmVudCB2YWx1ZSBvciBkb2N1
bWVudCByb290CkBAIC0xNDU2LDcgKzE0NTMsNyBAQCBQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4g
RWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQoY29uc3QgVmlzaWJsZVNlbGVjdAog
ICAgICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9y
LCB2YWx1ZS0+Y3NzVGV4dCgpKTsKICAgICB9CiAKLSAgICByZXR1cm4gc3R5bGU7CisgICAgcmV0
dXJuIFdURk1vdmUoc3R5bGUpOwogfQogCiBXcml0aW5nRGlyZWN0aW9uIEVkaXRpbmdTdHlsZTo6
dGV4dERpcmVjdGlvbkZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rp
b24sIEVkaXRpbmdTdHlsZSogdHlwaW5nU3R5bGUsIGJvb2wmIGhhc05lc3RlZE9yTXVsdGlwbGVF
bWJlZGRpbmdzKQpAQCAtMTc5MSw3ICsxNzg4LDcgQEAgc3RhdGljIFJlZjxNdXRhYmxlU3R5bGVQ
cm9wZXJ0aWVzPiBleHRyYWN0UHJvcGVydGllc05vdEluKFN0eWxlUHJvcGVydGllcyYgc3R5bGUK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLVBhc3NSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVy
dGllcz4gZ2V0UHJvcGVydGllc05vdEluKFN0eWxlUHJvcGVydGllcyYgc3R5bGVXaXRoUmVkdW5k
YW50UHJvcGVydGllcywgVCYgYmFzZVN0eWxlKQorUmVmPE11dGFibGVTdHlsZVByb3BlcnRpZXM+
IGdldFByb3BlcnRpZXNOb3RJbihTdHlsZVByb3BlcnRpZXMmIHN0eWxlV2l0aFJlZHVuZGFudFBy
b3BlcnRpZXMsIFQmIGJhc2VTdHlsZSkKIHsKICAgICByZXR1cm4gZXh0cmFjdFByb3BlcnRpZXNO
b3RJbihzdHlsZVdpdGhSZWR1bmRhbnRQcm9wZXJ0aWVzLCBiYXNlU3R5bGUpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmgKaW5kZXggYjllNTJlMzMzODBmOWMwYzNjZDI5OGJm
ZGExZWZlMTFmYTFkNzM5ZC4uMWNhMDcxMzVmNWY0MmRiMWY2NGRjNzgwYjI2MDc5NTM0MjFmMDlm
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oCkBAIC0xMTMsMTMgKzExMywx
MyBAQCBwdWJsaWM6CiAgICAgUmVmPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IHN0eWxlV2l0aFJl
c29sdmVkVGV4dERlY29yYXRpb25zKCkgY29uc3Q7CiAgICAgYm9vbCB0ZXh0RGlyZWN0aW9uKFdy
aXRpbmdEaXJlY3Rpb24mKSBjb25zdDsKICAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKLSAgICB2
b2lkIHNldFN0eWxlKFBhc3NSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4pOworICAgIHZv
aWQgc2V0U3R5bGUoUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+JiYpOwogICAgIHZvaWQg
b3ZlcnJpZGVXaXRoU3R5bGUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzKik7CiAgICAgdm9pZCBvdmVy
cmlkZVR5cGluZ1N0eWxlQXQoY29uc3QgRWRpdGluZ1N0eWxlJiwgY29uc3QgUG9zaXRpb24mKTsK
ICAgICB2b2lkIGNsZWFyKCk7Ci0gICAgUGFzc1JlZlB0cjxFZGl0aW5nU3R5bGU+IGNvcHkoKSBj
b25zdDsKLSAgICBQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4gZXh0cmFjdEFuZFJlbW92ZUJsb2Nr
UHJvcGVydGllcygpOwotICAgIFBhc3NSZWZQdHI8RWRpdGluZ1N0eWxlPiBleHRyYWN0QW5kUmVt
b3ZlVGV4dERpcmVjdGlvbigpOworICAgIFJlZjxFZGl0aW5nU3R5bGU+IGNvcHkoKSBjb25zdDsK
KyAgICBSZWY8RWRpdGluZ1N0eWxlPiBleHRyYWN0QW5kUmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCk7
CisgICAgUmVmPEVkaXRpbmdTdHlsZT4gZXh0cmFjdEFuZFJlbW92ZVRleHREaXJlY3Rpb24oKTsK
ICAgICB2b2lkIHJlbW92ZUJsb2NrUHJvcGVydGllcygpOwogICAgIHZvaWQgcmVtb3ZlU3R5bGVB
ZGRlZEJ5Tm9kZShOb2RlKik7CiAgICAgdm9pZCByZW1vdmVTdHlsZUNvbmZsaWN0aW5nV2l0aFN0
eWxlT2ZOb2RlKE5vZGUqKTsKQEAgLTE2NSw3ICsxNjUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRTdHJpa2VUaHJvdWdoQ2hhbmdlKFRleHREZWNvcmF0aW9uQ2hhbmdlIGNoYW5nZSkgeyBtX3N0
cmlrZVRocm91Z2hDaGFuZ2UgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2hhbmdlKTsgfQogICAg
IFRleHREZWNvcmF0aW9uQ2hhbmdlIHN0cmlrZVRocm91Z2hDaGFuZ2UoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxUZXh0RGVjb3JhdGlvbkNoYW5nZT4obV9zdHJpa2VUaHJvdWdoQ2hhbmdl
KTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFBhc3NSZWZQdHI8RWRpdGluZ1N0eWxl
PiBzdHlsZUF0U2VsZWN0aW9uU3RhcnQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIGJvb2wgc2hv
dWxkVXNlQmFja2dyb3VuZENvbG9ySW5FZmZlY3QgPSBmYWxzZSk7CisgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHN0eWxlQXRTZWxlY3Rpb25TdGFydChjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiwgYm9vbCBzaG91bGRVc2VCYWNrZ3JvdW5kQ29sb3JJbkVmZmVj
dCA9IGZhbHNlKTsKICAgICBzdGF0aWMgV3JpdGluZ0RpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uRm9y
U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBFZGl0aW5nU3R5bGUqIHR5cGluZ1N0
eWxlLCBib29sJiBoYXNOZXN0ZWRPck11bHRpcGxlRW1iZWRkaW5ncyk7CiAKIHByaXZhdGU6CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggZTlhMjk2NGVlNWI2Nzc0NTY0OTI5NmE2NDFm
ODkzYTRkODk0N2VmOS4uYzNkZDQ4YzM5N2Y0ZmNiZTE0ZWY3MDBhM2JmMTQ4MDBhMjU5ZWVmZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtMjQ4LDcgKzI0OCw3IEBAIGJvb2wgRWRp
dG9yOjpoYW5kbGVUZXh0RXZlbnQoVGV4dEV2ZW50JiBldmVudCkKICAgICAgICAgICAgIGlmIChj
bGllbnQoKS0+cGVyZm9ybXNUd29TdGVwUGFzdGUoZXZlbnQucGFzdGluZ0ZyYWdtZW50KCkpKQog
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogI2VuZGlmCi0gICAgICAgICAgICByZXBsYWNl
U2VsZWN0aW9uV2l0aEZyYWdtZW50KGV2ZW50LnBhc3RpbmdGcmFnbWVudCgpLCBmYWxzZSwgZXZl
bnQuc2hvdWxkU21hcnRSZXBsYWNlKCksIGV2ZW50LnNob3VsZE1hdGNoU3R5bGUoKSwgRWRpdEFj
dGlvblBhc3RlLCBldmVudC5tYWlsQmxvY2txdW90ZUhhbmRsaW5nKCkpOworICAgICAgICAgICAg
cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCgqZXZlbnQucGFzdGluZ0ZyYWdtZW50KCksIGZh
bHNlLCBldmVudC5zaG91bGRTbWFydFJlcGxhY2UoKSwgZXZlbnQuc2hvdWxkTWF0Y2hTdHlsZSgp
LCBFZGl0QWN0aW9uUGFzdGUsIGV2ZW50Lm1haWxCbG9ja3F1b3RlSGFuZGxpbmcoKSk7CiAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGV2ZW50LmRh
dGEoKSwgZmFsc2UsIGV2ZW50LnNob3VsZFNtYXJ0UmVwbGFjZSgpLCBFZGl0QWN0aW9uUGFzdGUp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ4NSwxMCArNDg1LDEwIEBAIGJvb2wgRWRpdG9y
OjpzaG91bGRJbnNlcnRGcmFnbWVudChQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdt
ZW50LCBQYXNzUmVmCiAgICAgcmV0dXJuIGNsaWVudCgpLT5zaG91bGRJbnNlcnROb2RlKGZyYWdt
ZW50LmdldCgpLCByZXBsYWNpbmdET01SYW5nZS5nZXQoKSwgZ2l2ZW5BY3Rpb24pOwogfQogCi12
b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudChQYXNzUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IGZyYWdtZW50LCBib29sIHNlbGVjdFJlcGxhY2VtZW50LCBib29sIHNtYXJ0
UmVwbGFjZSwgYm9vbCBtYXRjaFN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24sIE1haWxC
bG9ja3F1b3RlSGFuZGxpbmcgbWFpbEJsb2NrcXVvdGVIYW5kbGluZykKK3ZvaWQgRWRpdG9yOjpy
ZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBi
b29sIHNlbGVjdFJlcGxhY2VtZW50LCBib29sIHNtYXJ0UmVwbGFjZSwgYm9vbCBtYXRjaFN0eWxl
LCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24sIE1haWxCbG9ja3F1b3RlSGFuZGxpbmcgbWFpbEJs
b2NrcXVvdGVIYW5kbGluZykKIHsKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgaWYgKHNlbGVjdGlvbi5pc05vbmUo
KSB8fCAhc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkgfHwgIWZyYWdtZW50KQorICAgIGlm
IChzZWxlY3Rpb24uaXNOb25lKCkgfHwgIXNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBBY2Nlc3NpYmlsaXR5UmVwbGFjZWRUZXh0IHJlcGxhY2Vk
VGV4dDsKQEAgLTUwNSw4ICs1MDUsOCBAQCB2b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldp
dGhGcmFnbWVudChQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50LAogICAgIGlm
IChtYWlsQmxvY2txdW90ZUhhbmRsaW5nID09IE1haWxCbG9ja3F1b3RlSGFuZGxpbmc6Oklnbm9y
ZUJsb2NrcXVvdGUpCiAgICAgICAgIG9wdGlvbnMgfD0gUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6
Oklnbm9yZU1haWxCbG9ja3F1b3RlOwogCi0gICAgUmVmUHRyPFJlcGxhY2VTZWxlY3Rpb25Db21t
YW5kPiBjb21tYW5kID0gUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgp
LCBmcmFnbWVudCwgb3B0aW9ucywgZWRpdGluZ0FjdGlvbik7Ci0gICAgYXBwbHlDb21tYW5kKGNv
bW1hbmQpOworICAgIGF1dG8gY29tbWFuZCA9IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpjcmVh
dGUoZG9jdW1lbnQoKSwgJmZyYWdtZW50LCBvcHRpb25zLCBlZGl0aW5nQWN0aW9uKTsKKyAgICBh
cHBseUNvbW1hbmQoY29tbWFuZC5wdHIoKSk7CiAgICAgcmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0
aW5nT3BlcmF0aW9uKCk7CiAKICAgICBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpOwpAQCAtNjU4LDIwICs2NTgsMjAgQEAgVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rp
b25PcmRlcmVkTGlzdFN0YXRlKCkgY29uc3QKICAgICByZXR1cm4gRmFsc2VUcmlTdGF0ZTsKIH0K
IAotUGFzc1JlZlB0cjxOb2RlPiBFZGl0b3I6Omluc2VydE9yZGVyZWRMaXN0KCkKK1JlZlB0cjxO
b2RlPiBFZGl0b3I6Omluc2VydE9yZGVyZWRMaXN0KCkKIHsKICAgICBpZiAoIWNhbkVkaXRSaWNo
bHkoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAg
ICAKICAgICBSZWZQdHI8Tm9kZT4gbmV3TGlzdCA9IEluc2VydExpc3RDb21tYW5kOjppbnNlcnRM
aXN0KGRvY3VtZW50KCksIEluc2VydExpc3RDb21tYW5kOjpPcmRlcmVkTGlzdCk7CiAgICAgcmV2
ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7CiAgICAgcmV0dXJuIG5ld0xpc3Q7
CiB9CiAKLVBhc3NSZWZQdHI8Tm9kZT4gRWRpdG9yOjppbnNlcnRVbm9yZGVyZWRMaXN0KCkKK1Jl
ZlB0cjxOb2RlPiBFZGl0b3I6Omluc2VydFVub3JkZXJlZExpc3QoKQogewogICAgIGlmICghY2Fu
RWRpdFJpY2hseSgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgICAgIAogICAgIFJlZlB0cjxOb2RlPiBuZXdMaXN0ID0gSW5zZXJ0TGlzdENvbW1hbmQ6
Omluc2VydExpc3QoZG9jdW1lbnQoKSwgSW5zZXJ0TGlzdENvbW1hbmQ6OlVub3JkZXJlZExpc3Qp
OwogICAgIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigpOwpAQCAtMjQwMSwx
MyArMjQwMSwxMyBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1t
YXJJblJhbmdlcyhUZXh0Q2hlY2tpbmdUeXBlTWFzayB0ZXh0QwogICAgIFRleHRDaGVja2luZ1Bh
cmFncmFwaCBwYXJhZ3JhcGhUb0NoZWNrKHJhbmdlVG9DaGVjayk7CiAgICAgaWYgKHBhcmFncmFw
aFRvQ2hlY2suaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgUmVmUHRyPFJhbmdlPiBw
YXJhZ3JhcGhSYW5nZSA9IHBhcmFncmFwaFRvQ2hlY2sucGFyYWdyYXBoUmFuZ2UoKTsKKyAgICBS
ZWY8UmFuZ2U+IHBhcmFncmFwaFJhbmdlID0gcGFyYWdyYXBoVG9DaGVjay5wYXJhZ3JhcGhSYW5n
ZSgpOwogCiAgICAgYm9vbCBhc3luY2hyb25vdXMgPSBtX2ZyYW1lLnNldHRpbmdzKCkuYXN5bmNo
cm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSAmJiAhc2hvdWxkU2hvd0NvcnJlY3Rpb25QYW5l
bDsKIAogICAgIC8vIEluIGFzeW5jaHJvbm91cyBtb2RlLCB3ZSBpbnRlbnRpb25hbGx5IGNoZWNr
IHBhcmFncmFwaC13aWRlIHNlbnRlbmNlLgogICAgIGNvbnN0IGF1dG8gcmVzb2x2ZWRPcHRpb25z
ID0gcmVzb2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKGVkaXRhYmxlTm9kZSwgdGV4dENoZWNraW5n
T3B0aW9ucyk7Ci0gICAgYXV0byByZXF1ZXN0ID0gU3BlbGxDaGVja1JlcXVlc3Q6OmNyZWF0ZShy
ZXNvbHZlZE9wdGlvbnMsIFRleHRDaGVja2luZ1Byb2Nlc3NJbmNyZW1lbnRhbCwgYXN5bmNocm9u
b3VzID8gcGFyYWdyYXBoUmFuZ2UgOiByYW5nZVRvQ2hlY2ssIHBhcmFncmFwaFJhbmdlKTsKKyAg
ICBhdXRvIHJlcXVlc3QgPSBTcGVsbENoZWNrUmVxdWVzdDo6Y3JlYXRlKHJlc29sdmVkT3B0aW9u
cywgVGV4dENoZWNraW5nUHJvY2Vzc0luY3JlbWVudGFsLCBhc3luY2hyb25vdXMgPyBwYXJhZ3Jh
cGhSYW5nZS5wdHIoKSA6IHJhbmdlVG9DaGVjaywgcGFyYWdyYXBoUmFuZ2UucHRyKCkpOwogCiAg
ICAgaWYgKGFzeW5jaHJvbm91cykgewogICAgICAgICBtX3NwZWxsQ2hlY2tlci0+cmVxdWVzdENo
ZWNraW5nRm9yKFdURk1vdmUocmVxdWVzdCkpOwpAQCAtMjQzOCwxMyArMjQzOCwxMyBAQCBzdGF0
aWMgYm9vbCBpc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudFR5cGUoVGV4dENoZWNraW5nVHlwZSB0
eXBlKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIHZvaWQgY29ycmVjdFNwZWxsY2hl
Y2tpbmdQcmVzZXJ2aW5nVGV4dENoZWNraW5nUGFyYWdyYXBoKFRleHRDaGVja2luZ1BhcmFncmFw
aCYgcGFyYWdyYXBoLCBQYXNzUmVmUHRyPFJhbmdlPiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3Ry
aW5nJiByZXBsYWNlbWVudCwgaW50IHJlc3VsdExvY2F0aW9uLCBpbnQgcmVzdWx0TGVuZ3RoKQor
c3RhdGljIHZvaWQgY29ycmVjdFNwZWxsY2hlY2tpbmdQcmVzZXJ2aW5nVGV4dENoZWNraW5nUGFy
YWdyYXBoKFRleHRDaGVja2luZ1BhcmFncmFwaCYgcGFyYWdyYXBoLCBSYW5nZSYgcmFuZ2VUb1Jl
cGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQsIGludCByZXN1bHRMb2NhdGlvbiwgaW50
IHJlc3VsdExlbmd0aCkKIHsKLSAgICBhdXRvJiBzY29wZSA9IGRvd25jYXN0PENvbnRhaW5lck5v
ZGU+KHBhcmFncmFwaC5wYXJhZ3JhcGhSYW5nZSgpLT5zdGFydENvbnRhaW5lcigpLnJvb3ROb2Rl
KCkpOworICAgIGF1dG8mIHNjb3BlID0gZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4ocGFyYWdyYXBo
LnBhcmFncmFwaFJhbmdlKCkuc3RhcnRDb250YWluZXIoKS5yb290Tm9kZSgpKTsKIAogICAgIHNp
emVfdCBwYXJhZ3JhcGhMb2NhdGlvbjsKICAgICBzaXplX3QgcGFyYWdyYXBoTGVuZ3RoOwotICAg
IFRleHRJdGVyYXRvcjo6Z2V0TG9jYXRpb25BbmRMZW5ndGhGcm9tUmFuZ2UoJnNjb3BlLCBwYXJh
Z3JhcGgucGFyYWdyYXBoUmFuZ2UoKS5nZXQoKSwgcGFyYWdyYXBoTG9jYXRpb24sIHBhcmFncmFw
aExlbmd0aCk7CisgICAgVGV4dEl0ZXJhdG9yOjpnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5n
ZSgmc2NvcGUsICZwYXJhZ3JhcGgucGFyYWdyYXBoUmFuZ2UoKSwgcGFyYWdyYXBoTG9jYXRpb24s
IHBhcmFncmFwaExlbmd0aCk7CiAKICAgICBhcHBseUNvbW1hbmQoU3BlbGxpbmdDb3JyZWN0aW9u
Q29tbWFuZDo6Y3JlYXRlKHJhbmdlVG9SZXBsYWNlLCByZXBsYWNlbWVudCkpOwogCkBAIC0yNTEz
LDE3ICsyNTEzLDE3IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcihQYXNzUmVmUHRy
PFNwZWxsQ2hlY2tSZXF1ZXN0PiByZXF1ZXN0LCBjb25zdCBWZWN0CiAgICAgICAgIGlmIChzaG91
bGRNYXJrU3BlbGxpbmcgJiYgIXNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwgJiYgcmVzdWx0VHlw
ZSA9PSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcKICAgICAgICAgICAgICYmIHJlc3VsdExvY2F0
aW9uID49IHBhcmFncmFwaC5jaGVja2luZ1N0YXJ0KCkgJiYgcmVzdWx0RW5kTG9jYXRpb24gPD0g
c3BlbGxpbmdSYW5nZUVuZE9mZnNldCAmJiAhcmVzdWx0RW5kc0F0QW1iaWd1b3VzQm91bmRhcnkp
IHsKICAgICAgICAgICAgIEFTU0VSVChyZXN1bHRMZW5ndGggPiAwICYmIHJlc3VsdExvY2F0aW9u
ID49IDApOwotICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlID0gcGFy
YWdyYXBoLnN1YnJhbmdlKHJlc3VsdExvY2F0aW9uLCByZXN1bHRMZW5ndGgpOworICAgICAgICAg
ICAgYXV0byBtaXNzcGVsbGluZ1JhbmdlID0gcGFyYWdyYXBoLnN1YnJhbmdlKHJlc3VsdExvY2F0
aW9uLCByZXN1bHRMZW5ndGgpOwogICAgICAgICAgICAgaWYgKCFtX2FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXItPmlzU3BlbGxpbmdNYXJrZXJBbGxvd2VkKG1pc3NwZWxsaW5nUmFuZ2UpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgbWlzc3BlbGxpbmdSYW5nZS0+c3Rh
cnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIobWlzc3BlbGxpbmdS
YW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nLCByZXBsYWNlbWVudCk7CisgICAg
ICAgICAgICBtaXNzcGVsbGluZ1JhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFy
a2VycygpLmFkZE1hcmtlcihtaXNzcGVsbGluZ1JhbmdlLnB0cigpLCBEb2N1bWVudE1hcmtlcjo6
U3BlbGxpbmcsIHJlcGxhY2VtZW50KTsKICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRNYXJrR3Jh
bW1hciAmJiByZXN1bHRUeXBlID09IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyICYmIHBhcmFncmFw
aC5jaGVja2luZ1JhbmdlQ292ZXJzKHJlc3VsdExvY2F0aW9uLCByZXN1bHRMZW5ndGgpKSB7CiAg
ICAgICAgICAgICBBU1NFUlQocmVzdWx0TGVuZ3RoID4gMCAmJiByZXN1bHRMb2NhdGlvbiA+PSAw
KTsKICAgICAgICAgICAgIGZvciAoYXV0byYgZGV0YWlsIDogcmVzdWx0c1tpXS5kZXRhaWxzKSB7
CiAgICAgICAgICAgICAgICAgQVNTRVJUKGRldGFpbC5sZW5ndGggPiAwICYmIGRldGFpbC5sb2Nh
dGlvbiA+PSAwKTsKICAgICAgICAgICAgICAgICBpZiAocGFyYWdyYXBoLmNoZWNraW5nUmFuZ2VD
b3ZlcnMocmVzdWx0TG9jYXRpb24gKyBkZXRhaWwubG9jYXRpb24sIGRldGFpbC5sZW5ndGgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gYmFkR3JhbW1hclJhbmdlID0gcGFy
YWdyYXBoLnN1YnJhbmdlKHJlc3VsdExvY2F0aW9uICsgZGV0YWlsLmxvY2F0aW9uLCBkZXRhaWwu
bGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAgICAgYmFkR3JhbW1hclJhbmdlLT5zdGFydENvbnRh
aW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihiYWRHcmFtbWFyUmFuZ2UuZ2V0
KCksIERvY3VtZW50TWFya2VyOjpHcmFtbWFyLCBkZXRhaWwudXNlckRlc2NyaXB0aW9uKTsKKyAg
ICAgICAgICAgICAgICAgICAgYXV0byBiYWRHcmFtbWFyUmFuZ2UgPSBwYXJhZ3JhcGguc3VicmFu
Z2UocmVzdWx0TG9jYXRpb24gKyBkZXRhaWwubG9jYXRpb24sIGRldGFpbC5sZW5ndGgpOworICAg
ICAgICAgICAgICAgICAgICBiYWRHcmFtbWFyUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1l
bnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKGJhZEdyYW1tYXJSYW5nZS5wdHIoKSwgRG9jdW1lbnRN
YXJrZXI6OkdyYW1tYXIsIGRldGFpbC51c2VyRGVzY3JpcHRpb24pOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHRFbmRMb2NhdGlvbiA8
PSBzcGVsbGluZ1JhbmdlRW5kT2Zmc2V0ICYmIHJlc3VsdEVuZExvY2F0aW9uID49IHBhcmFncmFw
aC5jaGVja2luZ1N0YXJ0KCkKQEAgLTI1NDAsNyArMjU0MCw3IEBAIHZvaWQgRWRpdG9yOjptYXJr
QW5kUmVwbGFjZUZvcihQYXNzUmVmUHRyPFNwZWxsQ2hlY2tSZXF1ZXN0PiByZXF1ZXN0LCBjb25z
dCBWZWN0CiAgICAgICAgICAgICAvLyAyLiBUaGUgcmVzdWx0IGRvZXNuJ3QgZW5kIGF0IGFuIGFt
YmlndW91cyBib3VuZGFyeS4KICAgICAgICAgICAgIC8vICAgIChGSVhNRTogdGhpcyBpcyByZXF1
aXJlZCB1bnRpbCA2ODUzMDI3IGlzIGZpeGVkIGFuZCB0ZXh0IGNoZWNraW5nIGNhbiBkbyB0aGlz
IGZvciB1cwogICAgICAgICAgICAgYm9vbCBkb1JlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQubGVu
Z3RoKCkgPiAwICYmICFyZXN1bHRFbmRzQXRBbWJpZ3VvdXNCb3VuZGFyeTsKLSAgICAgICAgICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2VUb1JlcGxhY2UgPSBwYXJhZ3JhcGguc3VicmFuZ2UocmVzdWx0
TG9jYXRpb24sIHJlc3VsdExlbmd0aCk7CisgICAgICAgICAgICBhdXRvIHJhbmdlVG9SZXBsYWNl
ID0gcGFyYWdyYXBoLnN1YnJhbmdlKHJlc3VsdExvY2F0aW9uLCByZXN1bHRMZW5ndGgpOwogCiAg
ICAgICAgICAgICAvLyBhZGRpbmcgbGlua3Mgc2hvdWxkIGJlIGRvbmUgb25seSBpbW1lZGlhdGVs
eSBhZnRlciB0aGV5IGFyZSB0eXBlZAogICAgICAgICAgICAgaWYgKHJlc3VsdFR5cGUgPT0gVGV4
dENoZWNraW5nVHlwZUxpbmsgJiYgc2VsZWN0aW9uT2Zmc2V0ICE9IHJlc3VsdEVuZExvY2F0aW9u
ICsgMSkKQEAgLTI1NDksOCArMjU0OSw4IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZv
cihQYXNzUmVmUHRyPFNwZWxsQ2hlY2tSZXF1ZXN0PiByZXF1ZXN0LCBjb25zdCBWZWN0CiAgICAg
ICAgICAgICBpZiAoIShzaG91bGRQZXJmb3JtUmVwbGFjZW1lbnQgfHwgc2hvdWxkQ2hlY2tGb3JD
b3JyZWN0aW9uIHx8IHNob3VsZE1hcmtMaW5rKSB8fCAhZG9SZXBsYWNlbWVudCkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgU3RyaW5nIHJlcGxhY2VkU3RyaW5nID0g
cGxhaW5UZXh0KHJhbmdlVG9SZXBsYWNlLmdldCgpKTsKLSAgICAgICAgICAgIGNvbnN0IGJvb2wg
ZXhpc3RpbmdNYXJrZXJzUGVybWl0UmVwbGFjZW1lbnQgPSBtX2FsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXItPnByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlSZXN1bHQoJnJlc3VsdHNb
aV0sIHJhbmdlVG9SZXBsYWNlLmdldCgpLCByZXBsYWNlZFN0cmluZyk7CisgICAgICAgICAgICBT
dHJpbmcgcmVwbGFjZWRTdHJpbmcgPSBwbGFpblRleHQocmFuZ2VUb1JlcGxhY2UucHRyKCkpOwor
ICAgICAgICAgICAgY29uc3QgYm9vbCBleGlzdGluZ01hcmtlcnNQZXJtaXRSZXBsYWNlbWVudCA9
IG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVw
bGFjZWRCeVJlc3VsdChyZXN1bHRzW2ldLCByYW5nZVRvUmVwbGFjZSwgcmVwbGFjZWRTdHJpbmcp
OwogICAgICAgICAgICAgaWYgKCFleGlzdGluZ01hcmtlcnNQZXJtaXRSZXBsYWNlbWVudCkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMjU2NCw3ICsyNTY0LDcgQEAgdm9pZCBFZGl0
b3I6Om1hcmtBbmRSZXBsYWNlRm9yKFBhc3NSZWZQdHI8U3BlbGxDaGVja1JlcXVlc3Q+IHJlcXVl
c3QsIGNvbnN0IFZlY3QKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25Ub1JlcGxhY2UoKnJhbmdl
VG9SZXBsYWNlLCBET1dOU1RSRUFNKTsKKyAgICAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2Vs
ZWN0aW9uVG9SZXBsYWNlKHJhbmdlVG9SZXBsYWNlLCBET1dOU1RSRUFNKTsKICAgICAgICAgICAg
IGlmIChzZWxlY3Rpb25Ub1JlcGxhY2UgIT0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KSkgewogICAgICAgICAgICAgICAgIGlmICghbV9mcmFtZS5zZWxlY3Rpb24oKS5zaG91bGRDaGFu
Z2VTZWxlY3Rpb24oc2VsZWN0aW9uVG9SZXBsYWNlKSkKICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CkBAIC0yNTc2LDcgKzI1NzYsNyBAQCB2b2lkIEVkaXRvcjo6bWFya0FuZFJlcGxhY2VG
b3IoUGFzc1JlZlB0cjxTcGVsbENoZWNrUmVxdWVzdD4gcmVxdWVzdCwgY29uc3QgVmVjdAogICAg
ICAgICAgICAgICAgIHJlc3RvcmVTZWxlY3Rpb25BZnRlckNoYW5nZSA9IGZhbHNlOwogICAgICAg
ICAgICAgICAgIGlmIChjYW5FZGl0UmljaGx5KCkpCiAgICAgICAgICAgICAgICAgICAgIGFwcGx5
Q29tbWFuZChDcmVhdGVMaW5rQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCksIHJlcGxhY2VtZW50
KSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNhbkVkaXQoKSAmJiBzaG91bGRJbnNlcnRUZXh0
KHJlcGxhY2VtZW50LCByYW5nZVRvUmVwbGFjZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpU
eXBlZCkpIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY2FuRWRpdCgpICYmIHNob3VsZEluc2Vy
dFRleHQocmVwbGFjZW1lbnQsIHJhbmdlVG9SZXBsYWNlLnB0cigpLCBFZGl0b3JJbnNlcnRBY3Rp
b246OlR5cGVkKSkgewogICAgICAgICAgICAgICAgIGNvcnJlY3RTcGVsbGNoZWNraW5nUHJlc2Vy
dmluZ1RleHRDaGVja2luZ1BhcmFncmFwaChwYXJhZ3JhcGgsIHJhbmdlVG9SZXBsYWNlLCByZXBs
YWNlbWVudCwgcmVzdWx0TG9jYXRpb24sIHJlc3VsdExlbmd0aCk7CiAKICAgICAgICAgICAgICAg
ICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RD
YWNoZSgpKSB7CkBAIC0yNTk0LDExICsyNTk0LDExIEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVw
bGFjZUZvcihQYXNzUmVmUHRyPFNwZWxsQ2hlY2tSZXF1ZXN0PiByZXF1ZXN0LCBjb25zdCBWZWN0
CiAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbk9mZnNldCArPSByZXBsYWNlbWVudC5sZW5n
dGgoKSAtIHJlc3VsdExlbmd0aDsKIAogICAgICAgICAgICAgICAgIGlmIChyZXN1bHRUeXBlID09
IFRleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlZlB0
cjxSYW5nZT4gcmVwbGFjZW1lbnRSYW5nZSA9IHBhcmFncmFwaC5zdWJyYW5nZShyZXN1bHRMb2Nh
dGlvbiwgcmVwbGFjZW1lbnQubGVuZ3RoKCkpOwotICAgICAgICAgICAgICAgICAgICBtX2FsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXItPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2UoQXV0b2Nv
cnJlY3Rpb25SZXNwb25zZTo6QWNjZXB0ZWQsIHJlcGxhY2VkU3RyaW5nLCByZXBsYWNlbWVudFJh
bmdlKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byByZXBsYWNlbWVudFJhbmdlID0gcGFyYWdy
YXBoLnN1YnJhbmdlKHJlc3VsdExvY2F0aW9uLCByZXBsYWNlbWVudC5sZW5ndGgoKSk7CisgICAg
ICAgICAgICAgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVjb3JkQXV0b2Nv
cnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlOjpBY2NlcHRlZCwgcmVwbGFj
ZWRTdHJpbmcsIHJlcGxhY2VtZW50UmFuZ2UucHRyKCkpOwogCiAgICAgICAgICAgICAgICAgICAg
IC8vIEFkZCBhIG1hcmtlciBzbyB0aGF0IGNvcnJlY3Rpb25zIGNhbiBlYXNpbHkgYmUgdW5kb25l
IGFuZCB3b24ndCBiZSByZS1jb3JyZWN0ZWQuCi0gICAgICAgICAgICAgICAgICAgIG1fYWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlci0+bWFya0NvcnJlY3Rpb24oV1RGTW92ZShyZXBsYWNlbWVudFJh
bmdlKSwgcmVwbGFjZWRTdHJpbmcpOworICAgICAgICAgICAgICAgICAgICBtX2FsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXItPm1hcmtDb3JyZWN0aW9uKHJlcGxhY2VtZW50UmFuZ2UsIHJlcGxhY2Vk
U3RyaW5nKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAg
LTI2MDksNyArMjYwOSw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcihQYXNzUmVm
UHRyPFNwZWxsQ2hlY2tSZXF1ZXN0PiByZXF1ZXN0LCBjb25zdCBWZWN0CiAgICAgICAgIC8vIFJl
c3RvcmUgdGhlIGNhcmV0IHBvc2l0aW9uIGlmIHdlIGhhdmUgbWFkZSBhbnkgcmVwbGFjZW1lbnRz
CiAgICAgICAgIGV4dGVuZGVkUGFyYWdyYXBoLmV4cGFuZFJhbmdlVG9OZXh0RW5kKCk7CiAgICAg
ICAgIGlmIChyZXN0b3JlU2VsZWN0aW9uQWZ0ZXJDaGFuZ2UgJiYgc2VsZWN0aW9uT2Zmc2V0ID49
IDAgJiYgc2VsZWN0aW9uT2Zmc2V0IDw9IGV4dGVuZGVkUGFyYWdyYXBoLnJhbmdlTGVuZ3RoKCkp
IHsKLSAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0aW9uUmFuZ2UgPSBleHRlbmRlZFBh
cmFncmFwaC5zdWJyYW5nZSgwLCBzZWxlY3Rpb25PZmZzZXQpOworICAgICAgICAgICAgYXV0byBz
ZWxlY3Rpb25SYW5nZSA9IGV4dGVuZGVkUGFyYWdyYXBoLnN1YnJhbmdlKDAsIHNlbGVjdGlvbk9m
ZnNldCk7CiAgICAgICAgICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLm1vdmVUbyhzZWxlY3Rpb25S
YW5nZS0+ZW5kUG9zaXRpb24oKSwgRE9XTlNUUkVBTSk7CiAgICAgICAgICAgICBpZiAoYWRqdXN0
U2VsZWN0aW9uRm9yUGFyYWdyYXBoQm91bmRhcmllcykKICAgICAgICAgICAgICAgICBtX2ZyYW1l
LnNlbGVjdGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVj
dGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKQEAgLTI2MzMsMTIgKzI2MzMsMTIg
QEAgdm9pZCBFZGl0b3I6OmNoYW5nZUJhY2tUb1JlcGxhY2VkU3RyaW5nKGNvbnN0IFN0cmluZyYg
cmVwbGFjZWRTdHJpbmcpCiAgICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KHJlcGxhY2VkU3RyaW5n
LCBzZWxlY3Rpb24uZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAgICAg
cmV0dXJuOwogICAgIAotICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVjb3JkQXV0
b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlOjpSZXZlcnRlZCwgcmVw
bGFjZWRTdHJpbmcsIHNlbGVjdGlvbik7CisgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
LT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2U6OlJl
dmVydGVkLCByZXBsYWNlZFN0cmluZywgc2VsZWN0aW9uLmdldCgpKTsKICAgICBUZXh0Q2hlY2tp
bmdQYXJhZ3JhcGggcGFyYWdyYXBoKHNlbGVjdGlvbik7CiAgICAgcmVwbGFjZVNlbGVjdGlvbldp
dGhUZXh0KHJlcGxhY2VkU3RyaW5nLCBmYWxzZSwgZmFsc2UsIEVkaXRBY3Rpb25JbnNlcnQpOwot
ICAgIFJlZlB0cjxSYW5nZT4gY2hhbmdlZFJhbmdlID0gcGFyYWdyYXBoLnN1YnJhbmdlKHBhcmFn
cmFwaC5jaGVja2luZ1N0YXJ0KCksIHJlcGxhY2VkU3RyaW5nLmxlbmd0aCgpKTsKLSAgICBjaGFu
Z2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2Vy
KGNoYW5nZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50LCBTdHJpbmco
KSk7Ci0gICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5tYXJrUmV2ZXJzZWQoY2hhbmdl
ZFJhbmdlLmdldCgpKTsKKyAgICBhdXRvIGNoYW5nZWRSYW5nZSA9IHBhcmFncmFwaC5zdWJyYW5n
ZShwYXJhZ3JhcGguY2hlY2tpbmdTdGFydCgpLCByZXBsYWNlZFN0cmluZy5sZW5ndGgoKSk7Cisg
ICAgY2hhbmdlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkubWFya2VycygpLmFk
ZE1hcmtlcihjaGFuZ2VkUmFuZ2UucHRyKCksIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCwg
U3RyaW5nKCkpOworICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+bWFya1JldmVyc2Vk
KGNoYW5nZWRSYW5nZSk7CiAjZWxzZQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIFVO
VVNFRF9QQVJBTShyZXBsYWNlZFN0cmluZyk7CkBAIC0yNzM3LDE4ICsyNzM3LDE4IEBAIHZvaWQg
RWRpdG9yOjp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhib29sIGRvTm90
UmVtb3ZlSWZTZWxlY3Rpb25BCiAgICAgLy8gZ2FyZGUiLCB3ZSB3aWxsIGhhdmUgQ29ycmVjdGlv
bkluZGljYXRvciBtYXJrZXIgb24gYm90aCB3b3JkcyBhbmQgb24gdGhlIHdoaXRlc3BhY2UgYmV0
d2VlbiB0aGVtLiBJZiB3ZSB0aGVuIGVkaXQgZ2FyZGUsCiAgICAgLy8gd2Ugd291bGQgbGlrZSB0
byByZW1vdmUgdGhlIG1hcmtlciBmcm9tIHdvcmQgImF2YW50IiBhbmQgd2hpdGVzcGFjZSBhcyB3
ZWxsLiBTbyB3ZSBuZWVkIHRvIGdldCB0aGUgY29udGlub3VzIHJhbmdlIG9mCiAgICAgLy8gb2Yg
bWFya2VyIHRoYXQgY29udGFpbnMgdGhlIHdvcmQgaW4gcXVlc3Rpb24sIGFuZCByZW1vdmUgbWFy
a2VyIG9uIHRoYXQgd2hvbGUgcmFuZ2UuCi0gICAgUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIHN0YXJ0T2ZGaXJzdFdvcmQuZGVlcEVxdWl2YWxlbnQo
KSwgZW5kT2ZMYXN0V29yZC5kZWVwRXF1aXZhbGVudCgpKTsKKyAgICBhdXRvIHdvcmRSYW5nZSA9
IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3RhcnRPZkZpcnN0V29yZC5kZWVwRXF1aXZhbGVu
dCgpLCBlbmRPZkxhc3RXb3JkLmRlZXBFcXVpdmFsZW50KCkpOwogCi0gICAgVmVjdG9yPFJlbmRl
cmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vy
c0luUmFuZ2Uod29yZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJu
YXRpdmVzKTsKKyAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBk
b2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzSW5SYW5nZSh3b3JkUmFuZ2UsIERvY3VtZW50TWFy
a2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMpOwogICAgIGZvciAoYXV0byogbWFya2VyIDogbWFy
a2VycykKICAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZW1vdmVEaWN0YXRp
b25BbHRlcm5hdGl2ZXNGb3JNYXJrZXIoKm1hcmtlcik7CiAKICNpZiBQTEFURk9STShJT1MpCi0g
ICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vycyh3b3JkUmFuZ2UuZ2V0KCksIERv
Y3VtZW50TWFya2VyOjpTcGVsbGluZyB8IERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNh
dG9yIHwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24gfCBEb2N1bWVudE1h
cmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzIHwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblBo
cmFzZVdpdGhBbHRlcm5hdGl2ZXMsIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFy
dGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOworICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92
ZU1hcmtlcnMod29yZFJhbmdlLnB0cigpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcgfCBEb2N1
bWVudE1hcmtlcjo6Q29ycmVjdGlvbkluZGljYXRvciB8IERvY3VtZW50TWFya2VyOjpTcGVsbENo
ZWNraW5nRXhlbXB0aW9uIHwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlcyB8
IERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLCBEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKICNl
bHNlCi0gICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vycyh3b3JkUmFuZ2UuZ2V0
KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyB8IERvY3VtZW50TWFya2VyOjpHcmFtbWFyIHwg
RG9jdW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3IgfCBEb2N1bWVudE1hcmtlcjo6U3Bl
bGxDaGVja2luZ0V4ZW1wdGlvbiB8IERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2
ZXMsIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdN
YXJrZXIpOworICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMod29yZFJhbmdl
LnB0cigpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcgfCBEb2N1bWVudE1hcmtlcjo6R3JhbW1h
ciB8IERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yIHwgRG9jdW1lbnRNYXJrZXI6
OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24gfCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJu
YXRpdmVzLCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBw
aW5nTWFya2VyKTsKICNlbmRpZgotICAgIGRvY3VtZW50KCkubWFya2VycygpLmNsZWFyRGVzY3Jp
cHRpb25Pbk1hcmtlcnNJbnRlcnNlY3RpbmdSYW5nZSh3b3JkUmFuZ2UuZ2V0KCksIERvY3VtZW50
TWFya2VyOjpSZXBsYWNlbWVudCk7CisgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuY2xlYXJEZXNj
cmlwdGlvbk9uTWFya2Vyc0ludGVyc2VjdGluZ1JhbmdlKHdvcmRSYW5nZSwgRG9jdW1lbnRNYXJr
ZXI6OlJlcGxhY2VtZW50KTsKIH0KIAogdm9pZCBFZGl0b3I6OmRlbGV0ZWRBdXRvY29ycmVjdGlv
bkF0UG9zaXRpb24oY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBTdHJpbmcmIG9yaWdp
bmFsU3RyaW5nKQpAQCAtMjc1NiwxNyArMjc1NiwxNyBAQCB2b2lkIEVkaXRvcjo6ZGVsZXRlZEF1
dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFN0
cgogICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+ZGVsZXRlZEF1dG9jb3JyZWN0aW9u
QXRQb3NpdGlvbihwb3NpdGlvbiwgb3JpZ2luYWxTdHJpbmcpOwogfQogCi1QYXNzUmVmUHRyPFJh
bmdlPiBFZGl0b3I6OnJhbmdlRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KQor
UmVmUHRyPFJhbmdlPiBFZGl0b3I6OnJhbmdlRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHdpbmRv
d1BvaW50KQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUuZG9jdW1lbnRBdFBv
aW50KHdpbmRvd1BvaW50KTsKICAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1l
bnQtPmZyYW1lKCk7CiAgICAgQVNTRVJUKGZyYW1lKTsKICAgICBGcmFtZVZpZXcqIGZyYW1lVmll
dyA9IGZyYW1lLT52aWV3KCk7CiAgICAgaWYgKCFmcmFtZVZpZXcpCi0gICAgICAgIHJldHVybiAw
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBJbnRQb2ludCBmcmFtZVBvaW50ID0gZnJh
bWVWaWV3LT53aW5kb3dUb0NvbnRlbnRzKHdpbmRvd1BvaW50KTsKICAgICBWaXNpYmxlU2VsZWN0
aW9uIHNlbGVjdGlvbihmcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQb2ludCkp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAppbmRleCA4NzY3MjBmODE1YjFjZjcwMjM5MWY1MjYw
ZTE0Y2Q4YTJhYThlMjNkLi5mNjkwNDU2NGMyODlkNjQwNDhmZTNhMTQxZGY4NTE0YTc3ZGMxNTJi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKQEAgLTE3Myw4ICsxNzMsOCBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgVHJpU3RhdGUgc2VsZWN0aW9uVW5vcmRlcmVkTGlzdFN0YXRlKCkgY29uc3Q7CiAg
ICAgVHJpU3RhdGUgc2VsZWN0aW9uT3JkZXJlZExpc3RTdGF0ZSgpIGNvbnN0OwotICAgIFdFQkNP
UkVfRVhQT1JUIFBhc3NSZWZQdHI8Tm9kZT4gaW5zZXJ0T3JkZXJlZExpc3QoKTsKLSAgICBXRUJD
T1JFX0VYUE9SVCBQYXNzUmVmUHRyPE5vZGU+IGluc2VydFVub3JkZXJlZExpc3QoKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBSZWZQdHI8Tm9kZT4gaW5zZXJ0T3JkZXJlZExpc3QoKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBSZWZQdHI8Tm9kZT4gaW5zZXJ0VW5vcmRlcmVkTGlzdCgpOwogICAgIFdFQkNP
UkVfRVhQT1JUIGJvb2wgY2FuSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoKTsKICAgICBXRUJD
T1JFX0VYUE9SVCBib29sIGNhbkRlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCk7CiAgICAgV0VC
Q09SRV9FWFBPUlQgUmVmUHRyPE5vZGU+IGluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCk7CkBA
IC0zMzcsNyArMzM3LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SWdu
b3JlU2VsZWN0aW9uQ2hhbmdlcyhib29sLCBSZXZlYWxTZWxlY3Rpb24gc2hvdWxkUmV2ZWFsRXhp
c3RpbmdTZWxlY3Rpb24gPSBSZXZlYWxTZWxlY3Rpb246Olllcyk7CiAgICAgYm9vbCBpZ25vcmVT
ZWxlY3Rpb25DaGFuZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9pZ25vcmVTZWxlY3Rpb25DaGFuZ2Vz
OyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBQYXNzUmVmUHRyPFJhbmdlPiByYW5nZUZvclBvaW50
KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCk7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRy
PFJhbmdlPiByYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCk7CiAKICAg
ICB2b2lkIGNsZWFyKCk7CiAKQEAgLTQxMSw3ICs0MTEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB0
ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYShFbGVtZW50Kik7CiAgICAgV0VCQ09SRV9FWFBPUlQgV3Jp
dGluZ0RpcmVjdGlvbiBiYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0KCkgY29u
c3Q7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21l
bnQoUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiwgYm9vbCBzZWxlY3RSZXBsYWNlbWVudCwg
Ym9vbCBzbWFydFJlcGxhY2UsIGJvb2wgbWF0Y2hTdHlsZSwgRWRpdEFjdGlvbiA9IEVkaXRBY3Rp
b25JbnNlcnQsIE1haWxCbG9ja3F1b3RlSGFuZGxpbmcgPSBNYWlsQmxvY2txdW90ZUhhbmRsaW5n
OjpSZXNwZWN0QmxvY2txdW90ZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXBsYWNlU2Vs
ZWN0aW9uV2l0aEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQmLCBib29sIHNlbGVjdFJlcGxhY2Vt
ZW50LCBib29sIHNtYXJ0UmVwbGFjZSwgYm9vbCBtYXRjaFN0eWxlLCBFZGl0QWN0aW9uID0gRWRp
dEFjdGlvbkluc2VydCwgTWFpbEJsb2NrcXVvdGVIYW5kbGluZyA9IE1haWxCbG9ja3F1b3RlSGFu
ZGxpbmc6OlJlc3BlY3RCbG9ja3F1b3RlKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcGxh
Y2VTZWxlY3Rpb25XaXRoVGV4dChjb25zdCBTdHJpbmcmLCBib29sIHNlbGVjdFJlcGxhY2VtZW50
LCBib29sIHNtYXJ0UmVwbGFjZSwgRWRpdEFjdGlvbiA9IEVkaXRBY3Rpb25JbnNlcnQpOwogICAg
IFdFQkNPUkVfRVhQT1JUIGJvb2wgc2VsZWN0aW9uU3RhcnRIYXNNYXJrZXJGb3IoRG9jdW1lbnRN
YXJrZXI6Ok1hcmtlclR5cGUsIGludCBmcm9tLCBpbnQgbGVuZ3RoKSBjb25zdDsKICAgICB2b2lk
IHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGJvb2wgb25seUhhbmRsZVdv
cmRzQ29udGFpbmluZ1NlbGVjdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL01vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L01vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAKaW5kZXggOTYyNTVlOWI2OWM4YWY1MTI5ODBk
MmRhMjcyMzM0ZWZhZThkNTE3MS4uNTJkMjFhZjRlNzJjNGY4OWRhODMyODQ1N2VkN2I0OTY2ZDQ0
NzgyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Nb2RpZnlTZWxlY3Rpb25M
aXN0TGV2ZWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTW9kaWZ5U2VsZWN0aW9u
TGlzdExldmVsLmNwcApAQCAtMjE5LDE3ICsyMTksMTcgQEAgUmVmUHRyPE5vZGU+IEluY3JlYXNl
U2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoRG9j
dW0KICAgICByZXR1cm4gV1RGTW92ZShjb21tYW5kLT5tX2xpc3RFbGVtZW50KTsKIH0KIAotUGFz
c1JlZlB0cjxOb2RlPiBJbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OmluY3JlYXNl
U2VsZWN0aW9uTGlzdExldmVsKERvY3VtZW50KiBkb2N1bWVudCkKK1JlZlB0cjxOb2RlPiBJbmNy
ZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVs
KERvY3VtZW50KiBkb2N1bWVudCkKIHsKICAgICByZXR1cm4gaW5jcmVhc2VTZWxlY3Rpb25MaXN0
TGV2ZWwoZG9jdW1lbnQsIEluaGVyaXRlZExpc3RUeXBlKTsKIH0KIAotUGFzc1JlZlB0cjxOb2Rl
PiBJbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6OmluY3JlYXNlU2VsZWN0aW9uTGlz
dExldmVsT3JkZXJlZChEb2N1bWVudCogZG9jdW1lbnQpCitSZWZQdHI8Tm9kZT4gSW5jcmVhc2VT
ZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kOjppbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbE9yZGVy
ZWQoRG9jdW1lbnQqIGRvY3VtZW50KQogewogICAgIHJldHVybiBpbmNyZWFzZVNlbGVjdGlvbkxp
c3RMZXZlbChkb2N1bWVudCwgT3JkZXJlZExpc3QpOwogfQogCi1QYXNzUmVmUHRyPE5vZGU+IElu
Y3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2
ZWxVbm9yZGVyZWQoRG9jdW1lbnQqIGRvY3VtZW50KQorUmVmUHRyPE5vZGU+IEluY3JlYXNlU2Vs
ZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxVbm9yZGVy
ZWQoRG9jdW1lbnQqIGRvY3VtZW50KQogewogICAgIHJldHVybiBpbmNyZWFzZVNlbGVjdGlvbkxp
c3RMZXZlbChkb2N1bWVudCwgVW5vcmRlcmVkTGlzdCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL01vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9Nb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaAppbmRleCBjYzA2Y2Y0ZGU4ODk5
ZDI5YWE1ZjBjNjNiNmQ3MGU5OWU2ZmNjMzlmLi5hMmNmZDM5NDA3OTQyZWIxZThhMDA5ZTYwNDU0
MWJhZmExNjM1ZDIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01vZGlmeVNl
bGVjdGlvbkxpc3RMZXZlbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTW9kaWZ5U2Vs
ZWN0aW9uTGlzdExldmVsLmgKQEAgLTQ4LDkgKzQ4LDkgQEAgcHJpdmF0ZToKIGNsYXNzIEluY3Jl
YXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZCA6IHB1YmxpYyBNb2RpZnlTZWxlY3Rpb25MaXN0
TGV2ZWxDb21tYW5kIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBjYW5JbmNyZWFzZVNlbGVj
dGlvbkxpc3RMZXZlbChEb2N1bWVudCopOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE5vZGU+IGlu
Y3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKERvY3VtZW50Kik7Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8Tm9kZT4gaW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxPcmRlcmVkKERvY3VtZW50Kik7Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8Tm9kZT4gaW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxVbm9y
ZGVyZWQoRG9jdW1lbnQqKTsKKyAgICBzdGF0aWMgUmVmUHRyPE5vZGU+IGluY3JlYXNlU2VsZWN0
aW9uTGlzdExldmVsKERvY3VtZW50Kik7CisgICAgc3RhdGljIFJlZlB0cjxOb2RlPiBpbmNyZWFz
ZVNlbGVjdGlvbkxpc3RMZXZlbE9yZGVyZWQoRG9jdW1lbnQqKTsKKyAgICBzdGF0aWMgUmVmUHRy
PE5vZGU+IGluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsVW5vcmRlcmVkKERvY3VtZW50Kik7CiAK
IHByaXZhdGU6CiAgICAgZW51bSBUeXBlIHsgSW5oZXJpdGVkTGlzdFR5cGUsIE9yZGVyZWRMaXN0
LCBVbm9yZGVyZWRMaXN0IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Nw
ZWxsQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAK
aW5kZXggNzA5YjQ3MmVjNzE2OGZiNWM1YjhkNjJmYTczYzE5N2I2NzkzYzE5Ni4uMDEzZDEzMTA0
MTUwZTdhMmM0MDM2ODhiZjNiMDVkOGY4OGFiYTFhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
U3BlbGxDaGVja2VyLmNwcApAQCAtMTU4LDcgKzE1OCw3IEBAIGJvb2wgU3BlbGxDaGVja2VyOjpp
c0NoZWNrYWJsZShSYW5nZSogcmFuZ2UpIGNvbnN0CiAKIHZvaWQgU3BlbGxDaGVja2VyOjpyZXF1
ZXN0Q2hlY2tpbmdGb3IoUGFzc1JlZlB0cjxTcGVsbENoZWNrUmVxdWVzdD4gcmVxdWVzdCkKIHsK
LSAgICBpZiAoIXJlcXVlc3QgfHwgIWNhbkNoZWNrQXN5bmNocm9ub3VzbHkocmVxdWVzdC0+cGFy
YWdyYXBoUmFuZ2UoKS5nZXQoKSkpCisgICAgaWYgKCFyZXF1ZXN0IHx8ICFjYW5DaGVja0FzeW5j
aHJvbm91c2x5KHJlcXVlc3QtPnBhcmFncmFwaFJhbmdlKCkpKQogICAgICAgICByZXR1cm47CiAK
ICAgICBBU1NFUlQocmVxdWVzdC0+ZGF0YSgpLnNlcXVlbmNlKCkgPT0gdW5yZXF1ZXN0ZWRUZXh0
Q2hlY2tpbmdTZXF1ZW5jZSk7CkBAIC0yMjksNyArMjI5LDcgQEAgdm9pZCBTcGVsbENoZWNrZXI6
OmRpZENoZWNrU3VjY2VlZChpbnQgc2VxdWVuY2UsIGNvbnN0IFZlY3RvcjxUZXh0Q2hlY2tpbmdS
ZXN1bHQKICAgICAgICAgaWYgKHJlcXVlc3REYXRhLm1hc2soKSAmIFRleHRDaGVja2luZ1R5cGVH
cmFtbWFyKQogICAgICAgICAgICAgbWFya2VycyB8PSBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcjsK
ICAgICAgICAgaWYgKG1hcmtlcnMpCi0gICAgICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPm1h
cmtlcnMoKS5yZW1vdmVNYXJrZXJzKG1fcHJvY2Vzc2luZ1JlcXVlc3QtPmNoZWNraW5nUmFuZ2Uo
KS5nZXQoKSwgbWFya2Vycyk7CisgICAgICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtl
cnMoKS5yZW1vdmVNYXJrZXJzKG1fcHJvY2Vzc2luZ1JlcXVlc3QtPmNoZWNraW5nUmFuZ2UoKSwg
bWFya2Vycyk7CiAgICAgfQogICAgIGRpZENoZWNrKHNlcXVlbmNlLCByZXN1bHRzKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5oCmluZGV4IDA0OWQxYzUxZjA0MmEyY2NmZWU1
OTNiNDc5ZTk2MzUyMDcyNjlkZjIuLjA2YWFiMDVmNzRmODNmNDFiZjY3YTMxZWNlYmM4ZmViNzlk
MDA1MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuaApAQCAtNDcsOSArNDcs
OSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJlZlB0cjxTcGVsbENoZWNrUmVxdWVzdD4gY3JlYXRl
KFRleHRDaGVja2luZ1R5cGVNYXNrLCBUZXh0Q2hlY2tpbmdQcm9jZXNzVHlwZSwgUGFzc1JlZlB0
cjxSYW5nZT4gY2hlY2tpbmdSYW5nZSwgUGFzc1JlZlB0cjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2Up
OwogICAgIHZpcnR1YWwgflNwZWxsQ2hlY2tSZXF1ZXN0KCk7CiAKLSAgICBQYXNzUmVmUHRyPFJh
bmdlPiBjaGVja2luZ1JhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9jaGVja2luZ1JhbmdlOyB9Ci0g
ICAgUGFzc1JlZlB0cjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3Bh
cmFncmFwaFJhbmdlOyB9Ci0gICAgUGFzc1JlZlB0cjxFbGVtZW50PiByb290RWRpdGFibGVFbGVt
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9yb290RWRpdGFibGVFbGVtZW50OyB9CisgICAgUmFuZ2Uq
IGNoZWNraW5nUmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2NoZWNraW5nUmFuZ2UuZ2V0KCk7IH0K
KyAgICBSYW5nZSogcGFyYWdyYXBoUmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3BhcmFncmFwaFJh
bmdlLmdldCgpOyB9CisgICAgRWxlbWVudCogcm9vdEVkaXRhYmxlRWxlbWVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fcm9vdEVkaXRhYmxlRWxlbWVudC5nZXQoKTsgfQogCiAgICAgdm9pZCBzZXRDaGVj
a2VyQW5kU2VxdWVuY2UoU3BlbGxDaGVja2VyKiwgaW50IHNlcXVlbmNlKTsKICAgICB2b2lkIHJl
cXVlc3RlckRlc3Ryb3llZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
cGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3Bl
bGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggYzliZjJjMDk5NzViZWVlNDg0MGJiNmY3
ZDMzMjg3MmU4NmNiYWJjOC4uMzM1N2UwYTI3NmRiZTA5YzljZGZhN2JlOTU3OTkxMjhlNzY5NDQ4
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25D
b21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlv
bkNvbW1hbmQuY3BwCkBAIC04MywzMiArODMsMjkgQEAgcHJpdmF0ZToKIH07CiAjZW5kaWYKIAot
U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZChQYXNz
UmVmUHRyPFJhbmdlPiByYW5nZVRvQmVDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlv
bikKLSAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5kKHJhbmdlVG9CZUNvcnJlY3RlZC0+c3RhcnRD
b250YWluZXIoKS5kb2N1bWVudCgpLCBFZGl0QWN0aW9uSW5zZXJ0UmVwbGFjZW1lbnQpCitTcGVs
bGluZ0NvcnJlY3Rpb25Db21tYW5kOjpTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kKFJhbmdlJiBy
YW5nZVRvQmVDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikKKyAgICA6IENvbXBv
c2l0ZUVkaXRDb21tYW5kKHJhbmdlVG9CZUNvcnJlY3RlZC5zdGFydENvbnRhaW5lcigpLmRvY3Vt
ZW50KCksIEVkaXRBY3Rpb25JbnNlcnRSZXBsYWNlbWVudCkKICAgICAsIG1fcmFuZ2VUb0JlQ29y
cmVjdGVkKHJhbmdlVG9CZUNvcnJlY3RlZCkKLSAgICAsIG1fc2VsZWN0aW9uVG9CZUNvcnJlY3Rl
ZCgqbV9yYW5nZVRvQmVDb3JyZWN0ZWQpCisgICAgLCBtX3NlbGVjdGlvblRvQmVDb3JyZWN0ZWQo
bV9yYW5nZVRvQmVDb3JyZWN0ZWQpCiAgICAgLCBtX2NvcnJlY3Rpb24oY29ycmVjdGlvbikKIHsK
IH0KIAogYm9vbCBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjp3aWxsQXBwbHlDb21tYW5kKCkK
IHsKLSAgICBtX2NvcnJlY3Rpb25GcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKm1f
cmFuZ2VUb0JlQ29ycmVjdGVkLCBtX2NvcnJlY3Rpb24pOworICAgIG1fY29ycmVjdGlvbkZyYWdt
ZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChtX3JhbmdlVG9CZUNvcnJlY3RlZCwgbV9jb3Jy
ZWN0aW9uKTsKICAgICByZXR1cm4gQ29tcG9zaXRlRWRpdENvbW1hbmQ6OndpbGxBcHBseUNvbW1h
bmQoKTsKIH0KIAogdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKIHsK
LSAgICBtX2NvcnJlY3RlZCA9IHBsYWluVGV4dChtX3JhbmdlVG9CZUNvcnJlY3RlZC5nZXQoKSk7
CisgICAgbV9jb3JyZWN0ZWQgPSBwbGFpblRleHQobV9yYW5nZVRvQmVDb3JyZWN0ZWQucHRyKCkp
OwogICAgIGlmICghbV9jb3JyZWN0ZWQubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGlmICghZnJhbWUoKS5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obV9zZWxlY3Rp
b25Ub0JlQ29ycmVjdGVkKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFtX3JhbmdlVG9C
ZUNvcnJlY3RlZCkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3Np
dGUoU2V0U2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKG1fc2VsZWN0aW9uVG9CZUNvcnJlY3RlZCwg
RnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKCkgfCBGcmFtZVNlbGVj
dGlvbjo6U3BlbGxDb3JyZWN0aW9uVHJpZ2dlcmVkKSk7CiAjaWYgVVNFKEFVVE9DT1JSRUNUSU9O
X1BBTkVMKQogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFNwZWxsaW5nQ29ycmVjdGlvblJl
Y29yZFVuZG9Db21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgbV9jb3JyZWN0ZWQsIG1fY29ycmVj
dGlvbikpOwpAQCAtMTI3LDcgKzEyNCw3IEBAIFN0cmluZyBTcGVsbGluZ0NvcnJlY3Rpb25Db21t
YW5kOjppbnB1dEV2ZW50RGF0YSgpIGNvbnN0CiAKIFZlY3RvcjxSZWZQdHI8U3RhdGljUmFuZ2U+
PiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjp0YXJnZXRSYW5nZXMoKSBjb25zdAogewotICAg
IFJlZlB0cjxTdGF0aWNSYW5nZT4gcmFuZ2UgPSBTdGF0aWNSYW5nZTo6Y3JlYXRlRnJvbVJhbmdl
KCptX3JhbmdlVG9CZUNvcnJlY3RlZCk7CisgICAgUmVmUHRyPFN0YXRpY1JhbmdlPiByYW5nZSA9
IFN0YXRpY1JhbmdlOjpjcmVhdGVGcm9tUmFuZ2UobV9yYW5nZVRvQmVDb3JyZWN0ZWQpOwogICAg
IHJldHVybiB7IDEsIHJhbmdlIH07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmgKaW5kZXggNmM0MzlhN2E1ODc0ZmVhYmNhNDc0
MmE2YWIzZWNiNGM4NzVmYWZhOC4uNWI4MWVmMjM1NmM5OWE3MzNmNGEzZTE4ODc4YjAwNWYzYzkw
MjJkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rp
b25Db21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rp
b25Db21tYW5kLmgKQEAgLTMyLDEyICszMiwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQgOiBwdWJsaWMgQ29tcG9zaXRlRWRpdENvbW1h
bmQgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZD4g
Y3JlYXRlKFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlVG9CZUNvcnJlY3RlZCwgY29uc3QgU3RyaW5n
JiBjb3JyZWN0aW9uKQorICAgIHN0YXRpYyBSZWY8U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZD4g
Y3JlYXRlKFJhbmdlJiByYW5nZVRvQmVDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlv
bikKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNwZWxsaW5nQ29ycmVjdGlv
bkNvbW1hbmQocmFuZ2VUb0JlQ29ycmVjdGVkLCBjb3JyZWN0aW9uKSk7CiAgICAgfQogcHJpdmF0
ZToKLSAgICBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kKFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdl
VG9CZUNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKTsKKyAgICBTcGVsbGluZ0Nv
cnJlY3Rpb25Db21tYW5kKFJhbmdlJiByYW5nZVRvQmVDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYg
Y29ycmVjdGlvbik7CiAgICAgYm9vbCB3aWxsQXBwbHlDb21tYW5kKCkgZmluYWw7CiAgICAgdm9p
ZCBkb0FwcGx5KCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBzaG91bGRSZXRhaW5BdXRvY29ycmVjdGlv
bkluZGljYXRvcigpIGNvbnN0IG92ZXJyaWRlOwpAQCAtNDYsNyArNDYsNyBAQCBwcml2YXRlOgog
ICAgIFZlY3RvcjxSZWZQdHI8U3RhdGljUmFuZ2U+PiB0YXJnZXRSYW5nZXMoKSBjb25zdCBmaW5h
bDsKICAgICBSZWZQdHI8RGF0YVRyYW5zZmVyPiBpbnB1dEV2ZW50RGF0YVRyYW5zZmVyKCkgY29u
c3QgZmluYWw7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IG1fcmFuZ2VUb0JlQ29ycmVjdGVkOworICAg
IFJlZjxSYW5nZT4gbV9yYW5nZVRvQmVDb3JyZWN0ZWQ7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBt
X3NlbGVjdGlvblRvQmVDb3JyZWN0ZWQ7CiAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IG1f
Y29ycmVjdGlvbkZyYWdtZW50OwogICAgIFN0cmluZyBtX2NvcnJlY3RlZDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3Vycm91bmRpbmdUZXh0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1N1cnJvdW5kaW5nVGV4dC5oCmluZGV4IGJkNmUzNjY1MDkzMjY2MDU4NzE4ZDEw
YzU3NzEzY2U3YjNhYTM5ODMuLjBjNjExMDE0ZmU4M2FlZDFlNjQ1NjlhMWE1Mzg1ZGZmOTk4MmQw
ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3Vycm91bmRpbmdUZXh0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TdXJyb3VuZGluZ1RleHQuaApAQCAtNDUsOCAr
NDUsNiBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGNvbnRlbnQoKSBjb25zdDsKICAgICB1bnNpZ25l
ZCBwb3NpdGlvbk9mZnNldEluQ29udGVudCgpIGNvbnN0OwogCi0gICAgUGFzc1JlZlB0cjxSYW5n
ZT4gcmFuZ2VGcm9tQ29udGVudE9mZnNldHModW5zaWduZWQgc3RhcnRPZmZzZXRJbkNvbnRlbnQs
IHVuc2lnbmVkIGVuZE9mZnNldEluQ29udGVudCk7Ci0KIHByaXZhdGU6CiAgICAgUmVmUHRyPFJh
bmdlPiBtX2NvbnRlbnRSYW5nZTsKICAgICBzaXplX3QgbV9wb3NpdGlvbk9mZnNldEluQ29udGVu
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAppbmRl
eCAzNzlkN2QyOTllNzYwNjcyY2I1NmE5M2E2Njg0NTA0YzkzMDkwYmIzLi43YmQwMjE3ZTk1N2Nk
MzdiNmU3OTY0YWQ2ZTZjMDgzMzczYzgxYzkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCkBAIC0xNDIsNyArMTQyLDcgQEAgVGV4dENoZWNraW5n
UGFyYWdyYXBoOjp+VGV4dENoZWNraW5nUGFyYWdyYXBoKCkKIHZvaWQgVGV4dENoZWNraW5nUGFy
YWdyYXBoOjpleHBhbmRSYW5nZVRvTmV4dEVuZCgpCiB7CiAgICAgQVNTRVJUKG1fY2hlY2tpbmdS
YW5nZSk7Ci0gICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlKCkuZ2V0KCksIGVuZE9mUGFyYWdyYXBo
KHN0YXJ0T2ZOZXh0UGFyYWdyYXBoKHBhcmFncmFwaFJhbmdlKCktPnN0YXJ0UG9zaXRpb24oKSkp
KTsKKyAgICBzZXRFbmQoJnBhcmFncmFwaFJhbmdlKCksIGVuZE9mUGFyYWdyYXBoKHN0YXJ0T2ZO
ZXh0UGFyYWdyYXBoKHBhcmFncmFwaFJhbmdlKCkuc3RhcnRQb3NpdGlvbigpKSkpOwogICAgIGlu
dmFsaWRhdGVQYXJhZ3JhcGhSYW5nZVZhbHVlcygpOwogfQogCkBAIC0xNTYsMjEgKzE1NiwyMSBA
QCB2b2lkIFRleHRDaGVja2luZ1BhcmFncmFwaDo6aW52YWxpZGF0ZVBhcmFncmFwaFJhbmdlVmFs
dWVzKCkKIGludCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OnJhbmdlTGVuZ3RoKCkgY29uc3QKIHsK
ICAgICBBU1NFUlQobV9jaGVja2luZ1JhbmdlKTsKLSAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpy
YW5nZUxlbmd0aChwYXJhZ3JhcGhSYW5nZSgpLmdldCgpKTsKKyAgICByZXR1cm4gVGV4dEl0ZXJh
dG9yOjpyYW5nZUxlbmd0aCgmcGFyYWdyYXBoUmFuZ2UoKSk7CiB9CiAKLVBhc3NSZWZQdHI8UmFu
Z2U+IFRleHRDaGVja2luZ1BhcmFncmFwaDo6cGFyYWdyYXBoUmFuZ2UoKSBjb25zdAorUmFuZ2Um
IFRleHRDaGVja2luZ1BhcmFncmFwaDo6cGFyYWdyYXBoUmFuZ2UoKSBjb25zdAogewogICAgIEFT
U0VSVChtX2NoZWNraW5nUmFuZ2UpOwogICAgIGlmICghbV9wYXJhZ3JhcGhSYW5nZSkKICAgICAg
ICAgbV9wYXJhZ3JhcGhSYW5nZSA9IGV4cGFuZFRvUGFyYWdyYXBoQm91bmRhcnkobV9jaGVja2lu
Z1JhbmdlKTsKLSAgICByZXR1cm4gbV9wYXJhZ3JhcGhSYW5nZTsKKyAgICByZXR1cm4gKm1fcGFy
YWdyYXBoUmFuZ2U7CiB9CiAKLVBhc3NSZWZQdHI8UmFuZ2U+IFRleHRDaGVja2luZ1BhcmFncmFw
aDo6c3VicmFuZ2UoaW50IGNoYXJhY3Rlck9mZnNldCwgaW50IGNoYXJhY3RlckNvdW50KSBjb25z
dAorUmVmPFJhbmdlPiBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OnN1YnJhbmdlKGludCBjaGFyYWN0
ZXJPZmZzZXQsIGludCBjaGFyYWN0ZXJDb3VudCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9jaGVj
a2luZ1JhbmdlKTsKLSAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShwYXJhZ3JhcGhS
YW5nZSgpLmdldCgpLCBjaGFyYWN0ZXJPZmZzZXQsIGNoYXJhY3RlckNvdW50KTsKKyAgICByZXR1
cm4gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZSgmcGFyYWdyYXBoUmFuZ2UoKSwgY2hhcmFjdGVyT2Zm
c2V0LCBjaGFyYWN0ZXJDb3VudCk7CiB9CiAKIEV4Y2VwdGlvbk9yPGludD4gVGV4dENoZWNraW5n
UGFyYWdyYXBoOjpvZmZzZXRUbyhjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pIGNvbnN0CkBAIC0x
NzksNyArMTc5LDcgQEAgRXhjZXB0aW9uT3I8aW50PiBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6Om9m
ZnNldFRvKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikgY29uc3QKICAgICBpZiAoIXBvc2l0aW9u
LmNvbnRhaW5lck5vZGUoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciB9
OwogCi0gICAgYXV0byByYW5nZSA9IG9mZnNldEFzUmFuZ2UoKS0+Y2xvbmVSYW5nZSgpOworICAg
IGF1dG8gcmFuZ2UgPSBvZmZzZXRBc1JhbmdlKCkuY2xvbmVSYW5nZSgpOwogICAgIGF1dG8gcmVz
dWx0ID0gcmFuZ2UtPnNldEVuZCgqcG9zaXRpb24uY29udGFpbmVyTm9kZSgpLCBwb3NpdGlvbi5j
b21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwogICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0
aW9uKCkpCiAgICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwpAQCAtMTkz
LDIwICsxOTMsMjAgQEAgYm9vbCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmlzRW1wdHkoKSBjb25z
dAogICAgIHJldHVybiBjaGVja2luZ1N0YXJ0KCkgPj0gY2hlY2tpbmdFbmQoKSB8fCB0ZXh0KCku
aXNFbXB0eSgpOwogfQogCi1QYXNzUmVmUHRyPFJhbmdlPiBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6
Om9mZnNldEFzUmFuZ2UoKSBjb25zdAorUmFuZ2UmIFRleHRDaGVja2luZ1BhcmFncmFwaDo6b2Zm
c2V0QXNSYW5nZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fY2hlY2tpbmdSYW5nZSk7CiAgICAg
aWYgKCFtX29mZnNldEFzUmFuZ2UpCi0gICAgICAgIG1fb2Zmc2V0QXNSYW5nZSA9IFJhbmdlOjpj
cmVhdGUocGFyYWdyYXBoUmFuZ2UoKS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLCBwYXJh
Z3JhcGhSYW5nZSgpLT5zdGFydFBvc2l0aW9uKCksIG1fY2hlY2tpbmdSYW5nZS0+c3RhcnRQb3Np
dGlvbigpKTsKKyAgICAgICAgbV9vZmZzZXRBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3Jh
cGhSYW5nZSgpLnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2UoKS5z
dGFydFBvc2l0aW9uKCksIG1fY2hlY2tpbmdSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKIAotICAg
IHJldHVybiBtX29mZnNldEFzUmFuZ2U7CisgICAgcmV0dXJuICptX29mZnNldEFzUmFuZ2U7CiB9
CiAKIGNvbnN0IFN0cmluZyYgVGV4dENoZWNraW5nUGFyYWdyYXBoOjp0ZXh0KCkgY29uc3QKIHsK
ICAgICBBU1NFUlQobV9jaGVja2luZ1JhbmdlKTsKICAgICBpZiAobV90ZXh0LmlzRW1wdHkoKSkK
LSAgICAgICAgbV90ZXh0ID0gcGxhaW5UZXh0KHBhcmFncmFwaFJhbmdlKCkuZ2V0KCkpOworICAg
ICAgICBtX3RleHQgPSBwbGFpblRleHQoJnBhcmFncmFwaFJhbmdlKCkpOwogICAgIHJldHVybiBt
X3RleHQ7IAogfQogCkBAIC0yMTQsNyArMjE0LDcgQEAgaW50IFRleHRDaGVja2luZ1BhcmFncmFw
aDo6Y2hlY2tpbmdTdGFydCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fY2hlY2tpbmdSYW5nZSk7
CiAgICAgaWYgKG1fY2hlY2tpbmdTdGFydCA9PSAtMSkKLSAgICAgICAgbV9jaGVja2luZ1N0YXJ0
ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChvZmZzZXRBc1JhbmdlKCkuZ2V0KCkpOworICAg
ICAgICBtX2NoZWNraW5nU3RhcnQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKCZvZmZzZXRB
c1JhbmdlKCkpOwogICAgIHJldHVybiBtX2NoZWNraW5nU3RhcnQ7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5oCmluZGV4IGQ4ZGYyNGU2Njg3YzIwMGYx
NDU3YzcxNTE3MGJmYzk5OWFmMDU2OTguLjhmZTIwMTYyYzdkMjJhOTFkMDZlMTM3MTM3YmVkMmJk
OTUxYmViOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5n
SGVscGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIu
aApAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgflRleHRDaGVja2luZ1BhcmFncmFwaCgp
OwogCiAgICAgaW50IHJhbmdlTGVuZ3RoKCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxSYW5nZT4g
c3VicmFuZ2UoaW50IGNoYXJhY3Rlck9mZnNldCwgaW50IGNoYXJhY3RlckNvdW50KSBjb25zdDsK
KyAgICBSZWY8UmFuZ2U+IHN1YnJhbmdlKGludCBjaGFyYWN0ZXJPZmZzZXQsIGludCBjaGFyYWN0
ZXJDb3VudCkgY29uc3Q7CiAgICAgRXhjZXB0aW9uT3I8aW50PiBvZmZzZXRUbyhjb25zdCBQb3Np
dGlvbiYpIGNvbnN0OwogICAgIHZvaWQgZXhwYW5kUmFuZ2VUb05leHRFbmQoKTsKIApAQCAtNjAs
MTEgKzYwLDExIEBAIHB1YmxpYzoKICAgICBib29sIGNoZWNraW5nUmFuZ2VNYXRjaGVzKGludCBs
b2NhdGlvbiwgaW50IGxlbmd0aCkgY29uc3QgeyByZXR1cm4gbG9jYXRpb24gPT0gY2hlY2tpbmdT
dGFydCgpICYmIGxlbmd0aCA9PSBjaGVja2luZ0xlbmd0aCgpOyB9CiAgICAgYm9vbCBpc0NoZWNr
aW5nUmFuZ2VDb3ZlcmVkQnkoaW50IGxvY2F0aW9uLCBpbnQgbGVuZ3RoKSBjb25zdCB7IHJldHVy
biBsb2NhdGlvbiA8PSBjaGVja2luZ1N0YXJ0KCkgJiYgbG9jYXRpb24gKyBsZW5ndGggPj0gY2hl
Y2tpbmdTdGFydCgpICsgY2hlY2tpbmdMZW5ndGgoKTsgfQogICAgIGJvb2wgY2hlY2tpbmdSYW5n
ZUNvdmVycyhpbnQgbG9jYXRpb24sIGludCBsZW5ndGgpIGNvbnN0IHsgcmV0dXJuIGxvY2F0aW9u
IDwgY2hlY2tpbmdFbmQoKSAmJiBsb2NhdGlvbiArIGxlbmd0aCA+IGNoZWNraW5nU3RhcnQoKTsg
fQotICAgIFBhc3NSZWZQdHI8UmFuZ2U+IHBhcmFncmFwaFJhbmdlKCkgY29uc3Q7CisgICAgUmFu
Z2UmIHBhcmFncmFwaFJhbmdlKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBpbnZhbGlk
YXRlUGFyYWdyYXBoUmFuZ2VWYWx1ZXMoKTsKLSAgICBQYXNzUmVmUHRyPFJhbmdlPiBvZmZzZXRB
c1JhbmdlKCkgY29uc3Q7CisgICAgUmFuZ2UmIG9mZnNldEFzUmFuZ2UoKSBjb25zdDsKIAogICAg
IFJlZlB0cjxSYW5nZT4gbV9jaGVja2luZ1JhbmdlOwogICAgIG11dGFibGUgUmVmUHRyPFJhbmdl
PiBtX3BhcmFncmFwaFJhbmdlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
eXBpbmdDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5j
cHAKaW5kZXggNzg1MmExM2UwYTg0ZjVjODAxNjExOTc1ZGQzNzRkZjlkMDk4NWU3Ny4uMWQwYTMy
ZGIwYTdkMzExMTQ1Mzk1YzZlMTRkNzI1NGMzOTY1MzNlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1R5cGluZ0NvbW1hbmQuY3BwCkBAIC01NDcsMTAgKzU0NywxMCBAQCB2b2lkIFR5cGluZ0Nv
bW1hbmQ6Omluc2VydFRleHRSdW5XaXRob3V0TmV3bGluZXMoY29uc3QgU3RyaW5nICZ0ZXh0LCBi
b29sIHNlbGVjdAogICAgIGlmICghd2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQoSW5zZXJ0VGV4
dCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHksIHRleHQpKQogICAgICAgICByZXR1cm47CiAKLSAgICBS
ZWZQdHI8SW5zZXJ0VGV4dENvbW1hbmQ+IGNvbW1hbmQgPSBJbnNlcnRUZXh0Q29tbWFuZDo6Y3Jl
YXRlKGRvY3VtZW50KCksIHRleHQsIHNlbGVjdEluc2VydGVkVGV4dCwKKyAgICBhdXRvIGNvbW1h
bmQgPSBJbnNlcnRUZXh0Q29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCksIHRleHQsIHNlbGVjdElu
c2VydGVkVGV4dCwKICAgICAgICAgbV9jb21wb3NpdGlvblR5cGUgPT0gVGV4dENvbXBvc2l0aW9u
Tm9uZSA/IEluc2VydFRleHRDb21tYW5kOjpSZWJhbGFuY2VMZWFkaW5nQW5kVHJhaWxpbmdXaGl0
ZXNwYWNlcyA6IEluc2VydFRleHRDb21tYW5kOjpSZWJhbGFuY2VBbGxXaGl0ZXNwYWNlcywgRWRp
dEFjdGlvblR5cGluZ0luc2VydFRleHQpOwogCi0gICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUo
Y29tbWFuZCwgZW5kaW5nU2VsZWN0aW9uKCkpOworICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRl
KFdURk1vdmUoY29tbWFuZCksIGVuZGluZ1NlbGVjdGlvbigpKTsKIAogICAgIHR5cGluZ0FkZGVk
VG9PcGVuQ29tbWFuZChJbnNlcnRUZXh0KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Y29jb2EvSFRNTENvbnZlcnRlci5tbQppbmRleCA2MGE4NmEyMjMzYmJjMDY2NTgxYjNjYzBhNGI3
YjFlNWVmMmFjZGM3Li4zNGMxNjEzNWM4NDUyOWRhZTU0MWU5MmY4MmRkYmE3OTdkMzA1ZWFkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCkBAIC0z
MzgsOCArMzM4LDggQEAgcHVibGljOgogICAgIGJvb2wgaXNCbG9ja0VsZW1lbnQoRWxlbWVudCYp
OwogICAgIGJvb2wgZWxlbWVudEhhc093bkJhY2tncm91bmRDb2xvcihFbGVtZW50Jik7CiAKLSAg
ICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBjb21wdXRlZFN0eWxlUHJvcGVydHlGb3JFbGVtZW50KEVs
ZW1lbnQmLCBDU1NQcm9wZXJ0eUlEKTsKLSAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBpbmxpbmVT
dHlsZVByb3BlcnR5Rm9yRWxlbWVudChFbGVtZW50JiwgQ1NTUHJvcGVydHlJRCk7CisgICAgUmVm
UHRyPENTU1ZhbHVlPiBjb21wdXRlZFN0eWxlUHJvcGVydHlGb3JFbGVtZW50KEVsZW1lbnQmLCBD
U1NQcm9wZXJ0eUlEKTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IGlubGluZVN0eWxlUHJvcGVydHlG
b3JFbGVtZW50KEVsZW1lbnQmLCBDU1NQcm9wZXJ0eUlEKTsKIAogICAgIE5vZGUqIGNhY2hlQW5j
ZXN0b3JzT2ZTdGFydFRvQmVDb252ZXJ0ZWQoY29uc3QgUmFuZ2UmKTsKICAgICBib29sIGlzQW5j
ZXN0b3JzT2ZTdGFydFRvQmVDb252ZXJ0ZWQoTm9kZSYgbm9kZSkgY29uc3QgeyByZXR1cm4gbV9h
bmNlc3RvcnNVbmRlckNvbW1vbkFuY2VzdG9yLmNvbnRhaW5zKCZub2RlKTsgfQpAQCAtNjE5LDcg
KzYxOSw3IEBAIHN0YXRpYyBOU1BhcmFncmFwaFN0eWxlICpkZWZhdWx0UGFyYWdyYXBoU3R5bGUo
KQogICAgIHJldHVybiBkZWZhdWx0UGFyYWdyYXBoU3R5bGU7CiB9CiAKLVBhc3NSZWZQdHI8Q1NT
VmFsdWU+IEhUTUxDb252ZXJ0ZXJDYWNoZXM6OmNvbXB1dGVkU3R5bGVQcm9wZXJ0eUZvckVsZW1l
bnQoRWxlbWVudCYgZWxlbWVudCwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkKQorUmVmUHRyPENT
U1ZhbHVlPiBIVE1MQ29udmVydGVyQ2FjaGVzOjpjb21wdXRlZFN0eWxlUHJvcGVydHlGb3JFbGVt
ZW50KEVsZW1lbnQmIGVsZW1lbnQsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCkKIHsKICAgICBp
ZiAocHJvcGVydHlJZCA9PSBDU1NQcm9wZXJ0eUludmFsaWQpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwpAQCAtNjMxLDcgKzYzMSw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IEhUTUxDb252ZXJ0
ZXJDYWNoZXM6OmNvbXB1dGVkU3R5bGVQcm9wZXJ0eUZvckVsZW1lbnQoRWxlbWVuCiAgICAgcmV0
dXJuIGNvbXB1dGVkU3R5bGUucHJvcGVydHlWYWx1ZShwcm9wZXJ0eUlkKTsKIH0KIAotUGFzc1Jl
ZlB0cjxDU1NWYWx1ZT4gSFRNTENvbnZlcnRlckNhY2hlczo6aW5saW5lU3R5bGVQcm9wZXJ0eUZv
ckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkKQorUmVm
UHRyPENTU1ZhbHVlPiBIVE1MQ29udmVydGVyQ2FjaGVzOjppbmxpbmVTdHlsZVByb3BlcnR5Rm9y
RWxlbWVudChFbGVtZW50JiBlbGVtZW50LCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SWQpCiB7CiAg
ICAgaWYgKHByb3BlcnR5SWQgPT0gQ1NTUHJvcGVydHlJbnZhbGlkIHx8ICFpczxTdHlsZWRFbGVt
ZW50PihlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9z
L0ZyYW1lSU9TLm1tCmluZGV4IGUwNmY0NzgxNjY2NTUzNGE1ODQzYmY3Nzk5NWJlYTE1ZjZjZjY0
ODUuLjljZTBkMzg5NzdhNjBiOGQxOTk0ODEwMzQ5ODYzZGFhZjhjNTJjOGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCkBAIC02MjksMTMgKzYyOSwxMyBAQCBOU0FycmF5ICpGcmFt
ZTo6aW50ZXJwcmV0YXRpb25zRm9yQ3VycmVudFJvb3QoKSBjb25zdAogCiAgICAgYXV0byogcm9v
dCA9IHNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKSA9PSBWaXNpYmxlU2Vs
ZWN0aW9uOjpOb1NlbGVjdGlvbiA/IGRvY3VtZW50KCktPmJvZHlPckZyYW1lc2V0KCkgOiBzZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgdW5zaWduZWQg
cm9vdENoaWxkQ291bnQgPSByb290LT5jb3VudENoaWxkTm9kZXMoKTsKLSAgICBSZWZQdHI8UmFu
Z2U+IHJhbmdlT2ZSb290Q29udGVudHMgPSBSYW5nZTo6Y3JlYXRlKCpkb2N1bWVudCgpLCBjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocm9vdCwgMCksIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3Np
dGlvbihyb290LCByb290Q2hpbGRDb3VudCkpOworICAgIGF1dG8gcmFuZ2VPZlJvb3RDb250ZW50
cyA9IFJhbmdlOjpjcmVhdGUoKmRvY3VtZW50KCksIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlv
bihyb290LCAwKSwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJvb3QsIHJvb3RDaGlsZENv
dW50KSk7CiAKLSAgICBhdXRvIG1hcmtlcnNJblJvb3QgPSBkb2N1bWVudCgpLT5tYXJrZXJzKCku
bWFya2Vyc0luUmFuZ2UocmFuZ2VPZlJvb3RDb250ZW50cy5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6
OkRpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXMpOworICAgIGF1dG8gbWFya2Vyc0luUm9v
dCA9IGRvY3VtZW50KCktPm1hcmtlcnMoKS5tYXJrZXJzSW5SYW5nZShyYW5nZU9mUm9vdENvbnRl
bnRzLCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcyk7CiAK
ICAgICAvLyBUaGVyZSBhcmUgbm8gcGhyYXNlcyB3aXRoIGFsdGVybmF0aXZlcywgc28gdGhlcmUg
aXMganVzdCBvbmUgaW50ZXJwcmV0YXRpb24uCiAgICAgaWYgKG1hcmtlcnNJblJvb3QuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OnBsYWluVGV4dChy
YW5nZU9mUm9vdENvbnRlbnRzLmdldCgpKV07CisgICAgICAgIHJldHVybiBbTlNBcnJheSBhcnJh
eVdpdGhPYmplY3Q6cGxhaW5UZXh0KHJhbmdlT2ZSb290Q29udGVudHMucHRyKCkpXTsKIAogICAg
IC8vIFRoZSBudW1iZXIgb2YgaW50ZXJwcmV0YXRpb25zIHdpbGwgYmUgaTEgKiBpMiAqIC4uLiAq
IGlOLCB3aGVyZSBpWCBpcyB0aGUgbnVtYmVyIG9mIGludGVycHJldGF0aW9ucyBmb3IgdGhlIFh0
aCBwaHJhc2Ugd2l0aCBhbHRlcm5hdGl2ZXMuCiAgICAgc2l6ZV90IGludGVycHJldGF0aW9uc0Nv
dW50ID0gMTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBwb3J0L1dl
YkZyYW1lSU9TLm1tIGIvU291cmNlL1dlYktpdC9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJ
T1MubW0KaW5kZXggZmEwMWQ0MzVmMjNjN2VhZTU0ODI1MzBlMzhkY2I5NTkxMGY3ZGEzNC4uODNk
ZWZiZWFkZDUzMDA4ZTRiZjlhNzk2ZGI1OTYxZTk2ZmNlZjllMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0KKysrIGIvU291cmNlL1dl
YktpdC9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0KQEAgLTg1Nyw5ICs4NTcsOSBA
QCAtIChXZWJWaXNpYmxlUG9zaXRpb24gKilwcmV2aW91c1VucGVydHVyYmVkRGljdGF0aW9uUmVz
dWx0Qm91bmRhcnlGcm9tUG9zaXRpb246KAogICAgICAgICBpZiAocHJldmlvdXNWaXNpYmxlUG9z
aXRpb24uaXNOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gY3VycmVudFdlYlZpc2libGVQb3Np
dGlvbjsKICAgICAgICAgCi0gICAgICAgIFJlZlB0cjxSYW5nZT4gZ3JhcGhlbWVSYW5nZSA9IFJh
bmdlOjpjcmVhdGUoZG9jdW1lbnQsIHByZXZpb3VzVmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFs
ZW50KCksIGN1cnJlbnRWaXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7CisgICAgICAg
IGF1dG8gZ3JhcGhlbWVSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQsIHByZXZpb3VzVmlz
aWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCksIGN1cnJlbnRWaXNpYmxlUG9zaXRpb24uZGVl
cEVxdWl2YWxlbnQoKSk7CiAgICAgICAgIAotICAgICAgICBhdXRvIG1hcmtlcnMgPSBkb2N1bWVu
dC5tYXJrZXJzKCkubWFya2Vyc0luUmFuZ2UoZ3JhcGhlbWVSYW5nZS5nZXQoKSwgRG9jdW1lbnRN
YXJrZXI6OkRpY3RhdGlvblJlc3VsdCk7CisgICAgICAgIGF1dG8gbWFya2VycyA9IGRvY3VtZW50
Lm1hcmtlcnMoKS5tYXJrZXJzSW5SYW5nZShncmFwaGVtZVJhbmdlLCBEb2N1bWVudE1hcmtlcjo6
RGljdGF0aW9uUmVzdWx0KTsKICAgICAgICAgaWYgKG1hcmtlcnMuaXNFbXB0eSgpKQogICAgICAg
ICAgICAgcmV0dXJuIGN1cnJlbnRXZWJWaXNpYmxlUG9zaXRpb247CiAgICAgICAgIApAQCAtOTEz
LDkgKzkxMyw5IEBAIC0gKFdlYlZpc2libGVQb3NpdGlvbiAqKW5leHRVbnBlcnR1cmJlZERpY3Rh
dGlvblJlc3VsdEJvdW5kYXJ5RnJvbVBvc2l0aW9uOihXZWJWCiAgICAgICAgIGlmIChuZXh0Vmlz
aWJsZVBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRXZWJWaXNp
YmxlUG9zaXRpb247CiAgICAgICAgIAotICAgICAgICBSZWZQdHI8UmFuZ2U+IGdyYXBoZW1lUmFu
Z2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50LCBjdXJyZW50VmlzaWJsZVBvc2l0aW9uLmRlZXBF
cXVpdmFsZW50KCksIG5leHRWaXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7CisgICAg
ICAgIGF1dG8gZ3JhcGhlbWVSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQsIGN1cnJlbnRW
aXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKSwgbmV4dFZpc2libGVQb3NpdGlvbi5kZWVw
RXF1aXZhbGVudCgpKTsKICAgICAgICAgCi0gICAgICAgIGF1dG8gbWFya2VycyA9IGRvY3VtZW50
Lm1hcmtlcnMoKS5tYXJrZXJzSW5SYW5nZShncmFwaGVtZVJhbmdlLmdldCgpLCBEb2N1bWVudE1h
cmtlcjo6RGljdGF0aW9uUmVzdWx0KTsKKyAgICAgICAgYXV0byBtYXJrZXJzID0gZG9jdW1lbnQu
bWFya2VycygpLm1hcmtlcnNJblJhbmdlKGdyYXBoZW1lUmFuZ2UsIERvY3VtZW50TWFya2VyOjpE
aWN0YXRpb25SZXN1bHQpOwogICAgICAgICBpZiAobWFya2Vycy5pc0VtcHR5KCkpCiAgICAgICAg
ICAgICByZXR1cm4gY3VycmVudFdlYlZpc2libGVQb3NpdGlvbjsKICAgICAgICAgCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIvU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCBlYzkzODNkZjk2ZmZiZTk4NzA4ZDM1NmY5
YzUyNDY3OGMwOGNkZjhjLi41ODE5NWVlMzY1OWIxZGNkM2Y5NWRjMjNkYjEyYjc4NTQ3YjI0MjE1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KQEAgLTE3NTYsNyArMTc1Niw3
IEBAIC0gKGlkKWRpY3RhdGlvblJlc3VsdE1ldGFkYXRhRm9yUmFuZ2U6KERPTVJhbmdlICopcmFu
Z2UKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIAotICAgIGF1dG8g
bWFya2VycyA9IGNvcmUoc2VsZiktPmRvY3VtZW50KCktPm1hcmtlcnMoKS5tYXJrZXJzSW5SYW5n
ZShjb3JlKHJhbmdlKSwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblJlc3VsdCk7CisgICAgYXV0
byBtYXJrZXJzID0gY29yZShzZWxmKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLm1hcmtlcnNJblJh
bmdlKCpjb3JlKHJhbmdlKSwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblJlc3VsdCk7CiAgICAg
CiAgICAgLy8gVUlLaXQgc2hvdWxkIG9ubHkgZXZlciBnaXZlIHVzIGEgRE9NUmFuZ2UgZm9yIGEg
cGhyYXNlIHdpdGggYWx0ZXJuYXRpdmVzLCB3aGljaCBzaG91bGQgbm90IGJlIHBhcnQgb2YgbW9y
ZSB0aGFuIG9uZSByZXN1bHQuCiAgICAgQVNTRVJUKG1hcmtlcnMuc2l6ZSgpIDw9IDEpOwpAQCAt
MTkyOSw3ICsxOTI5LDcgQEAgLSAodm9pZClfcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudDoo
RE9NRG9jdW1lbnRGcmFnbWVudCAqKWZyYWdtZW50IHNlbGVjdFJlcGwKIHsKICAgICBpZiAoX3By
aXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuaXNOb25lKCkgfHwgIWZyYWdtZW50KQogICAg
ICAgICByZXR1cm47Ci0gICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9yKCkucmVwbGFjZVNl
bGVjdGlvbldpdGhGcmFnbWVudChjb3JlKGZyYWdtZW50KSwgc2VsZWN0UmVwbGFjZW1lbnQsIHNt
YXJ0UmVwbGFjZSwgbWF0Y2hTdHlsZSk7CisgICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9y
KCkucmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCgqY29yZShmcmFnbWVudCksIHNlbGVjdFJl
cGxhY2VtZW50LCBzbWFydFJlcGxhY2UsIG1hdGNoU3R5bGUpOwogfQogCiAjaWYgUExBVEZPUk0o
SU9TKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>